PluginProbe
FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses / 2.6.0
FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses v2.6.0
2.10.0 2.10.01 2.9.1 2.9.0 2.8.1 2.8.0 2.7.7 2.7.5 2.7.0 2.6.01 2.6.0 2.5.0 2.4.01 trunk 1.0.90 1.0.91 1.0.92 1.0.93 1.0.94 1.0.95 1.0.96 1.0.97 1.0.98 1.0.99 1.1.0 All 77 releases
fluent-community / Modules / Integrations / FluentPlayer / Bootstrap.php

Bootstrap.php in FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses 2.6.0, at Modules/Integrations/FluentPlayer/Bootstrap.php

211 lines 7.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FluentCommunity\Modules\Integrations\FluentPlayer;
4
5 use FluentCommunity\App\Functions\Utility;
6 use FluentCommunity\Framework\Support\Sanitizer;
7 use FluentCommunity\Framework\Support\Arr;
8 use FluentCommunity\App\Models\Media;
9
10 class Bootstrap
11 {
12 protected $app = null;
13
14 /**
15 * Cached plugin status to avoid repeated file system checks
16 */
17 private static $status = null;
18
19 public function register($app)
20 {
21 $app->router->group(function ($router) {
22 require_once __DIR__ . '/Http/player_api.php';
23 });
24
25 $this->app = $app;
26 $this->init();
27
28 }
29
30 public function init()
31 {
32 // Always register portal vars hook to provide plugin status
33 $this->app->addFilter('fluent_community/portal_vars', [$this, 'getPortalVars']);
34
35 // Only register feed functionality if plugin is active
36 if (defined('FLUENT_PLAYER_VERSION')) {
37 $this->registerFeedHooks();
38 }
39 }
40
41 private function registerFeedHooks()
42 {
43 $this->app->addFilter('fluent_community/feed/new_feed_data', [$this, 'maybeAddFluentPlayerMedia'], 10, 2);
44 $this->app->addFilter('fluent_community/feed/update_feed_data', [$this, 'maybeUpdateFluentPlayerMedia'], 10, 2);
45 $this->app->addFilter('fluent_community/feed/uploaded_feed_medias', [$this, 'maybeUpdateUploadedMedia'], 10, 2);
46 }
47
48 /**
49 * Get FluentPlayer plugin status
50 *
51 * @return string 'active', 'installed', or 'not_installed'
52 */
53 public static function getPluginStatus()
54 {
55 if (self::$status !== null) {
56 return self::$status;
57 }
58
59 if (defined('FLUENT_PLAYER_VERSION')) {
60 return self::$status = 'active';
61 }
62
63 if (file_exists(WP_PLUGIN_DIR . '/fluent-player/fluent-player.php')) {
64 return self::$status = 'installed';
65 }
66
67 return self::$status = 'not_installed';
68 }
69
70 public static function getSettings()
71 {
72 static $settings = null;
73 if ($settings) {
74 return $settings;
75 }
76
77 $defaults = [
78 'enable_fluent_player' => 'no',
79 'skin' => 'modern',
80 'brandColor' => '#4a90e2',
81 'controlBarColor' => '',
82 'controls' => [
83 'play' => true,
84 'volume' => true,
85 'progress_bar' => true,
86 'current_time' => true,
87 'captions_toggle' => true,
88 'playback_speed' => true,
89 'settings' => true,
90 'pip' => true,
91 'fullscreen' => true,
92 'backward' => true,
93 'forward' => true
94 ],
95 'behaviors' => [
96 'muted_autoplay' => false,
97 'save_play_position' => false,
98 'hide_top_controls' => false,
99 'hide_center_controls' => false,
100 'hide_bottom_controls' => false,
101 'load_strategy' => 'visible'
102 ],
103 'video_upload' => 'no',
104 'video_upload_role' => 'admin',
105 'play_embedded_videos' => 'yes'
106 ];
107
108 $settings = Utility::getOption('_fluent_player_settings', $defaults);
109 $settings = wp_parse_args($settings, $defaults);
110 $settings['behaviors'] = wp_parse_args($settings['behaviors'], $defaults['behaviors']);
111
112 return $settings;
113 }
114
115 public static function updateSettings($settings)
116 {
117 $sanitizerRules = [
118 'enable_fluent_player' => 'sanitize_text_field',
119 'skin' => 'sanitize_text_field',
120 'brandColor' => 'sanitize_text_field',
121 'controlBarColor' => 'sanitize_text_field',
122 'controls.*' => 'rest_sanitize_boolean',
123 'behaviors.*' => 'rest_sanitize_boolean',
124 'video_upload' => 'sanitize_text_field',
125 'video_upload_role' => 'sanitize_text_field',
126 'play_embedded_videos' => 'sanitize_text_field'
127 ];
128
129 $prevSettings = self::getSettings();
130 $loadStrategy = sanitize_text_field(Arr::get($settings, 'behaviors.load_strategy', 'visible'));
131 $settings = Arr::only($settings, array_keys($prevSettings));
132 $settings = wp_parse_args($settings, $prevSettings);
133 $settings = Sanitizer::sanitize($settings, $sanitizerRules);
134
135 $allowedStrategies = ['eager', 'visible', 'idle', 'play'];
136 $settings['behaviors']['load_strategy'] = in_array($loadStrategy, $allowedStrategies) ? $loadStrategy : 'visible';
137
138 Utility::updateOption('_fluent_player_settings', $settings);
139
140 return $settings;
141 }
142
143 public function getPortalVars($data)
144 {
145 if (!isset($data['features'])) {
146 $data['features'] = [];
147 }
148
149 $status = self::getPluginStatus();
150
151 $data['features']['fluent_player_status'] = $status;
152 $data['features']['has_fluent_player'] = ($status === 'active');
153
154 if ($status === 'active') {
155 $playerSettings = self::getSettings();
156 $data['features']['enable_fluent_player'] = $playerSettings['enable_fluent_player'];
157 $data['features']['fluent_player'] = [
158 'enable' => Arr::get($playerSettings, 'enable_fluent_player') === 'yes',
159 'has_video_upload' => Arr::get($playerSettings, 'video_upload') === 'yes',
160 'video_upload_role' => Arr::get($playerSettings, 'video_upload_role', 'admin'),
161 'play_embedded_videos' => Arr::get($playerSettings, 'play_embedded_videos', 'no') === 'yes'
162 ];
163 }
164 return $data;
165 }
166
167 public function maybeAddFluentPlayerMedia($data, $requestData)
168 {
169 $media = Arr::get($requestData, 'meta.media_preview', []);
170 if ($newMedia = Arr::get($requestData, 'media')) {
171 $media = $newMedia;
172 }
173 if ($media && is_array($media) && Arr::get($media, 'player') == 'fluent_player') {
174 if (!isset($data['meta'])) {
175 $data['meta'] = [];
176 }
177 $data['meta']['media_preview'] = array_filter($media);
178 }
179 return $data;
180 }
181 public function maybeUpdateFluentPlayerMedia($data, $requestData)
182 {
183 $media = Arr::get($requestData, 'media');
184 if ($media && is_array($media) && Arr::get($media, 'player') == 'fluent_player') {
185 if (!isset($data['meta'])) {
186 $data['meta'] = [];
187 }
188 $data['meta']['media_preview'] = array_filter($media);
189 }
190 return $data;
191 }
192
193 public function maybeUpdateUploadedMedia($uploadedMedias, $requestData)
194 {
195 $media = Arr::get($requestData, 'meta.media_preview', []);
196 if ($newMedia = Arr::get($requestData, 'media')) {
197 $media = $newMedia;
198 }
199 if ($media && is_array($media) && Arr::get($media, 'player') == 'fluent_player' && $mediaId = Arr::get($media, 'media_id')) {
200 $mediaId = intval($mediaId);
201 if ($mediaId) {
202 $media = Media::find($mediaId);
203 if ($media) {
204 $uploadedMedias[] = $media;
205 }
206 }
207 }
208 return $uploadedMedias;
209 }
210 }
211