Skip to content

Technical Plugin CertifyComplete

Daniel Neto edited this page Oct 29, 2026 · 1 revision

Technical: CertifyComplete plugin

Generates course-completion PDF certificates with configured payment/integration checks.

Audience: developers, advanced administrators and AI-assisted diagnosis. Plugin catalog.

Source baseline

  • Review date: 2026-10-29. Method: static source analysis; runtime/provider behavior was not exercised.
  • Code ownership: independently versioned plugin repository.
  • Reported version: 2.8.
  • Source revision: c82359bd59b2fbf6e06b236be3665348af117ec5.
  • Entry class file: CertifyComplete.php.

Confirm the installed plugin version independently of the Streamer version. Configuration defaults below are not a dump of this installation's saved settings.

Dependencies

No literal dependency declaration was extracted. This does not prove the plugin is standalone.

Hook integration

Override Implementation
getPluginMenu() CertifyComplete.php:108
getPlayListButtons($playlist_id) CertifyComplete.php:138
getFooterCode() CertifyComplete.php:158
getHTMLMenuLeft() CertifyComplete.php:167
profileTabName($users_id) CertifyComplete.php:182
profileTabContent($users_id) CertifyComplete.php:189
executeEveryMinute() CertifyComplete.php:203

Configuration assignments

These are direct assignments inside getEmptyDataObject(), not evaluated effective defaults. Stored plugins.object_data, globals, structured values and conditional branches may alter runtime behavior. Private/default credential values are omitted.

Field Literal default or expression type Literal source label/help Evidence
minimumWatchingPercentageToConsiderComplete Computed/structured; inspect source — source
textTitle "Certificate of Completion" — source
textCertificate Computed/structured; inspect source — source
css Computed/structured; inspect source — source
SigningAuthorityName "John Smith is the official signatory responsible" — source
showCertificatesOnLeftMenu false — source

Files and request surface

This inventory distinguishes implementation files from an API specification. Includes, templates, callbacks and CLI workers are not interchangeable HTTP endpoints. Request-field names below are direct source references, not a complete schema or permission declaration.

File Source role Direct request fields observed
CertifyComplete.php plugin entry class —
HTMLMenuLeft.php PHP page/include/worker; inspect caller —
Objects/Certificate_courses.php class/helper implementation —
Objects/Certificate_pix_settings.php class/helper implementation —
Objects/Certificate_progress.php class/helper implementation —
Objects/Certified_playlist.php class/helper implementation certified_playlist_id, playlists_id
Objects/Certify_complete_certificates.php class/helper implementation —
Objects/User_certificate_identity.php class/helper implementation —
View/Certified_playlist/add.json.php JSON entry point; inspect caller and guard add, id, playlists_id
View/Certified_playlist/delete.json.php JSON entry point; inspect caller and guard id
View/Certified_playlist/index.php PHP page/include/worker; inspect caller —
View/Certified_playlist/index_body.php PHP page/include/worker; inspect caller —
View/Certified_playlist/list.json.php JSON entry point; inspect caller and guard draw
View/Certify_complete_certificates/add.json.php JSON entry point; inspect caller and guard certified_playlist_id, created_php_time, date_of_certificate, id, json, modified_php_time, total_duration, users_id
View/Certify_complete_certificates/delete.json.php JSON entry point; inspect caller and guard id
View/Certify_complete_certificates/index.php PHP page/include/worker; inspect caller —
View/Certify_complete_certificates/index_body.php PHP page/include/worker; inspect caller —
View/Certify_complete_certificates/list.json.php JSON entry point; inspect caller and guard draw
View/admin/delete_course.json.php JSON entry point; inspect caller and guard id
View/admin/get_course.json.php JSON entry point; inspect caller and guard id
View/admin/issue_certificate.json.php JSON entry point; inspect caller and guard playlist_id, user_id
View/admin/list_certificates.json.php JSON entry point; inspect caller and guard playlist_id
View/admin/list_courses.json.php JSON entry point; inspect caller and guard —
View/admin/list_identities.json.php JSON entry point; inspect caller and guard —
View/admin/list_playlists.json.php JSON entry point; inspect caller and guard —
View/admin/manage_courses.php PHP page/include/worker; inspect caller —
View/admin/manage_identities.php PHP page/include/worker; inspect caller —
View/admin/manage_identity.json.php JSON entry point; inspect caller and guard action, user_id
View/admin/manage_issuance.php PHP page/include/worker; inspect caller —
View/admin/pix_settings.json.php JSON entry point; inspect caller and guard fixed_value, instructions_text, pix_payload, qr_code_base64
View/admin/pix_settings.php PHP page/include/worker; inspect caller —
View/admin/recalc_hours.json.php JSON entry point; inspect caller and guard id
View/admin/revoke_certificate.json.php JSON entry point; inspect caller and guard playlist_id, user_id
View/admin/save_course.json.php JSON entry point; inspect caller and guard alternate_course_name, enabled, extra_info, id, minimum_required_percent, playlist_id
View/details.php PHP page/include/worker; inspect caller —
View/editor.php PHP page/include/worker; inspect caller —
View/my_certificates.php PHP page/include/worker; inspect caller —
View/profileTabContent.php PHP page/include/worker; inspect caller —
View/script.js browser/worker JavaScript; verify loader —
View/student/confirm_identity.json.php JSON entry point; inspect caller and guard confirmed_cpf, confirmed_name
View/student/confirm_identity.php PHP page/include/worker; inspect caller —
View/student/download_certificate.php PHP page/include/worker; inspect caller playlist_id, user_id
View/student/request_certificate.php PHP page/include/worker; inspect caller playlist_id
View/student/validate_certificate.php PHP page/include/worker; inspect caller h, p, u
assets/editor.php PHP page/include/worker; inspect caller —
assets/editorSave.php PHP page/include/worker; inspect caller image, type
cert.php PHP page/include/worker; inspect caller h
certificate.php PHP page/include/worker; inspect caller users_id
cli/debug_user.php PHP page/include/worker; inspect caller —
cli/update_progress.php PHP page/include/worker; inspect caller —
editCertificate.php PHP page/include/worker; inspect caller html, users_id
install/install.sql schema/migration SQL —
save.json.php JSON entry point; inspect caller and guard —

Data and migrations

Tables named in available CREATE TABLE statements: certificate_courses, certificate_pix_settings, certificate_progress, certified_playlist, certify_complete_certificates, user_certificate_identity. Apply installation/update behavior through the owning plugin; this reference is not a script for running historical migrations manually.

Main-file named symbols

Visibility and implementation semantics must be checked in source. Nonempty string defaults are represented as . This is a symbol reference, not a stable public API promise.

Function or method Source
getDescription() 44
getName() 51
getUUID() 56
getPluginVersion() 61
getEmptyDataObject() 66
getPluginMenu() 108
canSwitchButton() 131
getPlayListButtons($playlist_id) 138
getFooterCode() 158
getHTMLMenuLeft() 167
profileTabName($users_id) 182
profileTabContent($users_id) 189
executeEveryMinute() 203
processCertificateProgress($batchSize = null, $verbose = false, $force = false) 222
cliLog($message) 424
debugTimer($label, $startTime = null) 435
getSqlCount($sql, $formats = '', $params = []) 453
getPluginConfig() 464
getMinWatchPercent() 476
calculateProgressAndStatus($playlistId, $userId, $minRequired) 493
calculateUserProgressPercentFast($userId, $playlistId) 515
getPlaylistVideoIdsFast($playlistId) 565
populateCertificateProgress($verbose = false, $batchSize = null) 621
getEnabledCourses() 724
findUsersWithoutProgressRecord($playlistId, $limit = null) 742
createProgressRecords($users, $playlistId, $minRequired, $verbose = false) 774
calculatePlaylistTotalDuration($playlist_id) 815
calculateUserProgressPercent($user_id, $playlist_id) 843
isUserEligible($user_id, $playlist_id) 852
getCourseDisplayName($playlist_id) 866
generateCertificateHash($playlist_id, $user_id) 883
decodeCertificateHash($hash) 898
getProgress($videos_id, $users_id) 920
getVideoTotalSecondsWatching($videos_id, $users_id) 928
getVideoMaxLastVideoTime($videos_id, $users_id) 949
getFirstAndLastRecords($videos_id, $users_id) 970
getPlaylistInfo($playlists_id, $users_id) 1008
getImagesFolder() 1107
getBGRelative($forceReturnAsset = false) 1112
getSignatureRelative($forceReturnAsset = false) 1123
getCertificateInfoFromCertifiedPlaylistId($certified_playlist_id, $users_id) 1134
getCertificateInfo($playlists_id, $users_id) 1144
getCertificateInfoDB($certified_playlist_id, $users_id, $refreshCache = false) 1202
getPlaylistsIdFromRequest($playlists_id, $users_id) 1211

Supporting PHP declarations

These symbols are grouped by source file; inspect the class declaration and visibility before calling them.

Objects/Certificate_courses.php

Declared classes: Certificate_courses.

Named symbol Source
getSearchFieldsNames() 13
getTableName() 18
setId($id) 23
setPlaylist_id($playlist_id) 28
setEnabled($enabled) 33
setAlternate_course_name($alternate_course_name) 38
setExtra_info($extra_info) 43
setTotal_hours($total_hours) 48
setMinimum_required_percent($minimum_required_percent) 53
getId() 58
getPlaylist_id() 63
getEnabled() 68
getAlternate_course_name() 73
getExtra_info() 78
getTotal_hours() 83
getMinimum_required_percent() 88
getByPlaylistId($playlist_id) 96
isEnabled($playlist_id) 109
getAllEnabled() 118
recalculateTotalHours() 135
deleteByPlaylistId($playlist_id) 149

Objects/Certificate_pix_settings.php

Declared classes: Certificate_pix_settings.

Named symbol Source
getSearchFieldsNames() 13
getTableName() 18
setId($id) 23
setQr_code_image_path($qr_code_image_path) 28
setPix_payload($pix_payload) 33
setFixed_value($fixed_value) 38
setInstructions_text($instructions_text) 43
getId() 48
getQr_code_image_path() 53
getPix_payload() 58
getFixed_value() 63
getInstructions_text() 68
getSettings() 76
updateSettings($qr_code_image_path, $pix_payload, $fixed_value, $instructions_text) 100

Objects/Certificate_progress.php

Declared classes: Certificate_progress.

Named symbol Source
getSearchFieldsNames() 17
getTableName() 22
setId($id) 27
setPlaylist_id($playlist_id) 32
setUser_id($user_id) 37
setProgress_percent($progress_percent) 42
setStatus($status) 47
setRequested_at($requested_at) 55
setIssued_at($issued_at) 60
getId() 65
getPlaylist_id() 70
getUser_id() 75
getProgress_percent() 80
getStatus() 85
getRequested_at() 90
getIssued_at() 95
getByUserAndPlaylist($user_id, $playlist_id) 103
getOrCreate($user_id, $playlist_id) 116
updateProgress($user_id, $playlist_id) 138
markAsRequested() 168
markAsIssued() 180
markAsEligible() 190
getAllForUser($user_id) 202
ensureProgressRecordsExist($user_id) 225
getAllRequested($playlist_id = null) 252

Objects/Certified_playlist.php

Declared classes: Certified_playlist.

Named symbol Source
getSearchFieldsNames() 10
getTableName() 15
getAllPlaylists() 20
isSelected($playlists_id) 46
deleteFrom($playlists_id) 58
setId($id) 71
setModified_php_time($modified_php_time) 76
setCreated_php_time($created_php_time) 81
setPlaylists_id($playlists_id) 86
setJson($json) 91
setStatus($status) 96
setAlternate_course_name($alternate_course_name) 101
setExtra_info($extra_info) 106
setEnabled($enabled) 111
getId() 117
getModified_php_time() 122
getCreated_php_time() 127
getPlaylists_id() 132
getJson() 137
getStatus() 142
getAlternate_course_name() 147
getExtra_info() 152
getEnabled() 157
getAllAvailable() 162
getFromPlaylist($playlists_id, $refreshCache = false) 189
getFromRequest() 206

Objects/Certify_complete_certificates.php

Declared classes: certify_complete_certificates.

Named symbol Source
getSearchFieldsNames() 10
getTableName() 15
getAllUsers() 20
getAllCertified_playlist() 45
setId($id) 72
setDate_of_certificate($date_of_certificate) 77
setTotal_duration($total_duration) 82
setModified_php_time($modified_php_time) 87
setCreated_php_time($created_php_time) 92
setUsers_id($users_id) 97
setJson($json) 102
setCertified_playlist_id($certified_playlist_id) 110
getId() 116
getDate_of_certificate() 121
getTotal_duration() 126
getModified_php_time() 131
getCreated_php_time() 136
getUsers_id() 141
getJson() 146
getCertified_playlist_id() 151
getStatus() 157
setStatus($status) 162
save() 167
getFromUser($certified_playlist_id, $users_id, $refreshCache = false) 175
setHTML($certified_playlist_id, $users_id, $html) 191

Objects/User_certificate_identity.php

Declared classes: User_certificate_identity.

Named symbol Source
getSearchFieldsNames() 13
getTableName() 18
setUser_id($user_id) 23
setConfirmed_name($confirmed_name) 28
setConfirmed_cpf($confirmed_cpf) 33
setLocked($locked) 39
getUser_id() 44
getConfirmed_name() 49
getConfirmed_cpf() 54
getLocked() 59
getByUserId($user_id) 67
isConfirmed($user_id) 80
validateCPF($cpf) 89
confirmIdentity($user_id, $name, $cpf) 132
formatCPF($cpf) 170
unlockIdentity($user_id) 182
deleteIdentity($user_id) 206

certificate.php

Named symbol Source
getEditBtn($certified_playlist_id, $users_id) 36

Diagnostics and validation

  1. Check the installed/enabled version and the dependencies/settings above.
  2. Identify the actual failing page, request, callback or worker and correlate its timestamp with the AVideo log.
  3. Follow the linked method and caller. Check business-state changes and output artifacts as well as HTTP status.
  4. Reproduce the relevant workflow in a test environment. External provider, Encoder, live-server, storage, payment and authenticated flows require their real integrations.

Related test filenames (name matches only; not executed by generation):

Shared diagnostic workflow. This page is not a security audit or a claim of end-to-end validation.

Clone this wiki locally