Repository navigation
Technical Plugin SocialMediaPublisher
Manages connected publishing accounts and background social-video uploads.
Audience: developers, advanced administrators and AI-assisted diagnosis. Plugin catalog.
- 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.
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.
No literal dependency declaration was extracted. This does not prove the plugin is standalone.
| 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 |
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.
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 | — |
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.
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 |
These symbols are grouped by source file; inspect the class declaration and visibility before calling them.
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 |
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 |
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 |
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 |
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 |
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 |
- Check the installed/enabled version and the dependencies/settings above.
- Identify the actual failing page, request, callback or worker and correlate its timestamp with the AVideo log.
- Follow the linked method and caller. Check business-state changes and output artifacts as well as HTTP status.
- 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.
Start
Install and update
- Install on Ubuntu 24.04 or 26.04
- Installation Setup Page
- Scheduler cron job (required)
- Set up email
- Use HTTPS
- Own Encoder
- Docker
- Update AVideo
- Backup
- Secure file permissions
- Server command-line tools
- Hidden configuration options
Videos
- Upload a video
- Local Encoder (on your computer)
- Bulk upload by FTP
- Import a channel
- Publish on YouTube and social media
- Privacy options
- Only for logged-in users
- Resolutions by user group
- Storage options
- Move and protect video files
- Video does not play
Users
Live
- Make a live stream
- Stream with OBS
- Own live server
- One live server, many sites
- Live server install errors
- Live does not play
Plugins
Problems
Other
- Translate your site
- Write a plugin (developers)
- Technical reference (developers and advanced administrators)
Old and retired guides