Skip to content

Technical Plugin SocialMediaPublisher

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

Technical: SocialMediaPublisher plugin

Manages connected publishing accounts and background social-video uploads.

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: AVideo Streamer repository.
  • Reported version: 1.0.
  • Source revision: 7d48f2dfc0289236718a3f9fba7c5ffecff4a37f.
  • Entry class file: SocialMediaPublisher.php.

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

Behavior and operational checks

YouTube publishing uses this plugin's OAuth broker and publisher worker. Connection state, queued job, resumable upload and remote publication are distinct. The YouTubeAPI search/gallery plugin is a separate integration.

Dependencies

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

Hook integration

Override Implementation
getTags() SocialMediaPublisher.php:58
updateScript() SocialMediaPublisher.php:90
getPluginMenu() SocialMediaPublisher.php:124
getHeadCode() SocialMediaPublisher.php:316
getVideosManagerListButton() SocialMediaPublisher.php:340
executeEveryMinute() SocialMediaPublisher.php:398

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.

No direct $obj->field assignments were extracted. Inspect inherited defaults, getCustomizeAdvancedOptions() and the plugin-specific settings page.

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
Objects/Publisher_schedule.php class/helper implementation —
Objects/Publisher_social_medias.php class/helper implementation —
Objects/Publisher_user_preferences.php class/helper implementation —
Objects/Publisher_video_publisher_logs.php class/helper implementation —
Objects/SocialUploader.php class/helper implementation —
Objects/YouTubePublisher.php class/helper implementation —
SocialMediaPublisher.php plugin entry class description, id, provider, title, visibility
View/Publisher_schedule/add.json.php JSON entry point; inspect caller and guard id, publisher_social_medias_id, scheduled_timestamp, status, timezone, users_id, videos_id
View/Publisher_schedule/delete.json.php JSON entry point; inspect caller and guard id
View/Publisher_schedule/index.php PHP page/include/worker; inspect caller —
View/Publisher_schedule/index_body.php PHP page/include/worker; inspect caller —
View/Publisher_schedule/list.json.php JSON entry point; inspect caller and guard draw
View/Publisher_social_medias/add.json.php JSON entry point; inspect caller and guard api_details, id, name
View/Publisher_social_medias/delete.json.php JSON entry point; inspect caller and guard id
View/Publisher_social_medias/index.php PHP page/include/worker; inspect caller —
View/Publisher_social_medias/index_body.php PHP page/include/worker; inspect caller —
View/Publisher_social_medias/list.json.php JSON entry point; inspect caller and guard draw
View/Publisher_user_preferences/add.json.php JSON entry point; inspect caller and guard id, json, name, provider
View/Publisher_user_preferences/delete.json.php JSON entry point; inspect caller and guard id
View/Publisher_user_preferences/index.php PHP page/include/worker; inspect caller —
View/Publisher_user_preferences/index_body.php PHP page/include/worker; inspect caller —
View/Publisher_user_preferences/list.json.php JSON entry point; inspect caller and guard draw
View/Publisher_video_publisher_logs/add.json.php JSON entry point; inspect caller and guard details, id, publish_datetimestamp, publisher_social_medias_id, status, timezone, users_id, videos_id
View/Publisher_video_publisher_logs/delete.json.php JSON entry point; inspect caller and guard id
View/Publisher_video_publisher_logs/index.php PHP page/include/worker; inspect caller —
View/Publisher_video_publisher_logs/index_body.php PHP page/include/worker; inspect caller —
View/Publisher_video_publisher_logs/index_body_videos_id.php PHP page/include/worker; inspect caller —
View/Publisher_video_publisher_logs/list.json.php JSON entry point; inspect caller and guard draw
View/editor.php PHP page/include/worker; inspect caller —
View/texts.php PHP page/include/worker; inspect caller —
install/install.sql schema/migration SQL —
isConnected.json.php JSON entry point; inspect caller and guard id
linkSocialMediasButtons.php PHP page/include/worker; inspect caller —
publishInstagram.json.php JSON entry point; inspect caller and guard accessToken, containerId, instagramAccountId
refresh.json.php JSON entry point; inspect caller and guard id
script.js browser/worker JavaScript; verify loader —
uploadVideo.json.php JSON entry point; inspect caller and guard categoryId, confirmDuplicate, description, id, tags, title, visibility
uploadVideo.php PHP page/include/worker; inspect caller —
youtubeCategories.json.php JSON entry point; inspect caller and guard id
youtubeJob.json.php JSON entry point; inspect caller and guard action, logs_id
youtubeUploadWorker.php PHP page/include/worker; inspect caller —

Data and migrations

Tables named in available CREATE TABLE statements: publisher_schedule, publisher_social_medias, publisher_user_preferences, publisher_video_publisher_logs. 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
getTags() 58
getDescription() 67
getName() 75
getUUID() 80
getPluginVersion() 85
updateScript() 90
getEmptyDataObject() 102
getPluginMenu() 124
getOrCreateSocialMedia($provider) 130
getRevalidatedToken($publisher_user_preferences_id, $onlyIfIsExpired = false) 143
revalidateToken($publisher_user_preferences_id, $onlyIfIsExpired = false) 158
revalidateTokenAndSave($publisher_user_preferences_id, $onlyIfIsExpired = false) 219
upload($publisher_user_preferences_id, $videos_id) 240
saveLog($publisher_social_medias_id, $videos_id, $details, $users_id = 0, $status = Publisher_video_publisher_logs::STATUS_UNVERIFIED) 301
getHeadCode() 316
getProiderItem($provider) 322
getOrStopIfProviderIsNotValid() 330
getVideosManagerListButton() 340
scanInstagam() 352
executeEveryMinute() 398
getPublicConnectionRow($row) 411

Supporting PHP declarations

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

Objects/Publisher_schedule.php

Declared classes: Publisher_schedule.

Named symbol Source
getSearchFieldsNames() 9
getTableName() 13
getAllVideos() 17
getAllUsers() 41
getAllPublisher_social_medias() 65
setId($id) 91
setScheduled_timestamp($scheduled_timestamp) 95
setStatus($status) 99
setTimezone($timezone) 103
setVideos_id($videos_id) 107
setUsers_id($users_id) 111
setPublisher_social_medias_id($publisher_social_medias_id) 115
getId() 120
getScheduled_timestamp() 124
getStatus() 128
getTimezone() 132
getVideos_id() 136
getUsers_id() 140
getPublisher_social_medias_id() 144

Objects/Publisher_social_medias.php

Declared classes: Publisher_social_medias.

Named symbol Source
getSearchFieldsNames() 9
getTableName() 13
getFromProvider($provider) 17
setId($id) 36
setName($name) 40
setApi_details($api_details) 49
setStatus($status) 53
setTimezone($timezone) 57
getId() 62
getName() 66
getApi_details() 70
getStatus() 74
getTimezone() 78

Objects/Publisher_user_preferences.php

Declared classes: Publisher_user_preferences.

Named symbol Source
getSearchFieldsNames() 10
getTableName() 15
getAll() 20
getAllFromUsersId($users_id) 35
getTotalFromUsersId($users_id) 53
setId($id) 65
setUsers_id($users_id) 70
setPublisher_social_medias_id($publisher_social_medias_id) 75
setPreferred_profile($preferred_profile) 80
setTimezone($timezone) 85
setJson($json) 90
getId() 98
getUsers_id() 103
getPublisher_social_medias_id() 108
getPreferred_profile() 113
getTimezone() 118
getJson() 123
getProviderName() 128
getFromProfileName($users_id, $publisher_social_medias_id, $preferred_profile) 134
addRowDetails($data) 153
getFromUsersIdAndProvider($users_id, $provider) 174
getFromDb($id, $refreshCache = false) 196
save() 217

Objects/Publisher_video_publisher_logs.php

Declared classes: Publisher_video_publisher_logs.

Named symbol Source
getSearchFieldsNames() 17
getTableName() 22
getAllVideos() 27
getAllUsers() 52
getAllPublisher_social_medias() 77
setId($id) 104
setPublish_datetimestamp($publish_datetimestamp) 109
setStatus($status) 114
setDetails($details) 119
setVideos_id($videos_id) 127
setUsers_id($users_id) 132
setPublisher_social_medias_id($publisher_social_medias_id) 137
setTimezone($timezone) 142
getId() 148
getPublish_datetimestamp() 153
getStatus() 158
getDetails() 163
getVideos_id() 168
getUsers_id() 173
getPublisher_social_medias_id() 178
getTimezone() 183
getAllFromVideosId($videos_id) 188
getInfo($row) 206
getTotalFromVideosId($videos_id) 259
save() 275

Objects/SocialUploader.php

Declared classes: SocialUploader, FacebookUploader, LinkedInUploader, InstagramUploader.

Named symbol Source
upload($publisher_user_preferences_id, $videoPathMP4, $title, $description, $visibility = '<string>', $isShort = false) 5
uploadLinkedIn($accessToken, $authorUrn, $id, $videoPath, $title, $description, $visibility = '<string>', $isShort = false) 66
uploadYouTube($accessToken, $videoPath, $title, $description, $visibility = '<string>', $isShort = false) 92
uploadFacebook($accessToken, $pageId, $videoPath, $title, $description, $visibility = '<string>', $isShort = false) 144
uploadInstagram($accessToken, $videoPath, $title, $description, $broadcaster_id) 155
getErrorMsg($obj) 161
uploadFacebookVideo($accessToken, $pageId, $videoPath, $title, $description) 199
uploadFacebookReels($accessToken, $pageId, $videoPath, $title, $description) 230
initializeFacebookUploadSession($pageId, $accessToken) 260
uploadLocalVideoToFacebook($videoId, $accessToken, $filePath) 286
uploadHostedVideoToFacebook($videoId, $accessToken, $fileUrl) 314
uploadDirectLocalVideo($pageId, $accessToken, $filePath, $description = '') 335
getPageAccessToken($accessToken, $pageId) 371
uploadDirectHostedVideo($pageId, $accessToken, $videoUrl, $description = '') 421
extractRangeFromFile($videoPath, $firstByte, $lastByte) 458
upload($accessToken, $urn, $id, $videoPath, $title, $description) 493
finalizeLinkedInUploadSession($accessToken, $videoURN, $uploadToken, $uploadedPartIds) 587
initializeLinkedInUploadSession($accessToken, $urn, $fileSizeBytes) 653
uploadVideoToLinkedIn($uploadUrl, $filePath) 715
publishVideo($accessToken, $authorUrn, $videoUrn, $title, $description, $visibility = '<string>', $isShort = false) 753
upload($accessToken, $videoUrl, $caption, $instagramAccountId) 865
createMediaContainer($accessToken, $videoUrl, $caption, $instagramAccountId) 895
publishMediaIfIsReady($accessToken, $containerId, $instagramAccountId) 925
waitForMediaProcessing($accessToken, $containerId, $maxAttempts = 1) 969
publishMedia($accessToken, $containerId, $instagramAccountId) 998
makeCurlRequest($url, $data = []) 1019
getInstagramVideoLink($mediaId, $accessToken) 1053

Objects/YouTubePublisher.php

Declared classes: YouTubePublisher, YouTubePublisherException.

Named symbol Source
isYouTubeProvider($providerName) 45
htmlToText($text) 54
cleanTitle($title) 67
sanitizeTitle($title, $fallback = '') 73
getUnsupportedTypeCode($type) 87
sanitizeDescription($description) 98
sanitizeTags($tags) 115
sanitizePrivacy($privacy) 149
sanitizeCategoryId($categoryId) 155
buildMetadata(array $input, $fallbackTitle = '') 161
parseGoogleError($error, $httpCode = 0) 180
classifyGoogleError($httpCode, $reason) 226
isTransientHttpCode($httpCode) 284
processingResult(array $item) 292
getMessage($code) 322
isActiveState($state) 403
getEffectiveState(array $job, $workerRunning, $now) 412
getPublicJob(array $job, $workerRunning, $now = 0) 437
getLegacyJob(array $details) 483
getJobFromDetails($details) 497
redactDetails($details) 514
getTokenExpiresAt($json) 531
tokenNeedsRefresh($expiresAt, $now, $margin = self::TOKEN_REFRESH_MARGIN) 549
getAccessToken($publisher_user_preferences_id, $forceRefresh = false) 558
createClient($accessToken) 589
getLockDir() 602
openLock($name) 609
isWorkerRunning($logs_id) 624
getCancelFile($logs_id) 642
loadDetails(Publisher_video_publisher_logs $log) 647
saveJob(Publisher_video_publisher_logs $log, array $details, array $changes, $status = '') 653
getJobsForVideoAndConnection($videos_id, $publisher_user_preferences_id, $publisher_social_medias_id) 678
queue($users_id, $publisher_user_preferences_id, $videos_id, array $input, $confirmDuplicate = false) 700
canRunBackgroundTasks() 793
startWorker($logs_id) 802
resume($logs_id, $users_id, $isAutomatic = false) 820
cancel($logs_id, $users_id) 868
recoverInterruptedJobs() 903
resolveSourceFile($videos_id) 937
startResumableSession($client, $media, $fileSize) 984
newMediaUpload($client, $youtube, array $metadata, $fileSize) 1007
classifyUploadException(\Throwable $e) 1037
backoffSeconds($failures) 1064
uploadFile($client, array $metadata, $handle, $fileSize, $resumeUri, array $hooks = array()) 1077
runWorker($logs_id) 1174
notify($users_id, $isError, $msg) 1290
refreshProcessingStatus($logs_id) 1309
getCategories($publisher_user_preferences_id, $language = '<string>') 1352
__construct($errorCode, $detail = '', $resumable = false) 1387
getErrorCode() 1394
isResumable() 1399

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