PluginProbe
FV Player 8 / 8.1
FV Player 8 v8.1
trunk 8.0.18 8.0.19 8.0.20 8.0.21 8.0.25 8.0.27 8.1 8.1.3
fv-player / controller / settings.php

settings.php in FV Player 8 8.1, at controller/settings.php

440 lines 16.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 if ( ! defined( 'ABSPATH' ) ) {
4 exit;
5 }
6
7 /*
8 * Admin menus and such...
9 */
10 function fv_player_admin_page() {
11 include dirname( __FILE__ ) . '/../view/admin.php';
12 }
13
14
15
16
17 function fv_player_is_admin_screen() {
18 if( (isset($_GET['page']) && sanitize_key( $_GET['page'] ) == 'fvplayer') || apply_filters('fv_player_is_admin_screen', false) ) {
19 return true;
20 }
21 return false;
22 }
23
24
25
26
27 function fv_player_stats_page() {
28 include dirname( __FILE__ ) . '/../view/stats.php';
29 }
30
31
32
33
34 add_action( 'fv_player_pro_video_ads_panel', 'fv_player_video_ad_stats_page' );
35
36 function fv_player_video_ad_stats_page() {
37 include dirname( __FILE__ ) . '/../view/video-ad-stats.php';
38 }
39
40
41
42
43 add_filter('plugin_action_links', 'fv_wp_flowplayer_plugin_action_links', 10, 2);
44
45 function fv_wp_flowplayer_plugin_action_links($links, $file) {
46 if( $file == 'fv-player/fv-player.php') {
47 $settings_link = '<a href="https://foliovision.com/pro-support" target="_blank">Premium Support</a>';
48 array_unshift($links, $settings_link);
49 $settings_link = '<a href="admin.php?page=fvplayer">Settings</a>';
50 array_unshift($links, $settings_link);
51 }
52 return $links;
53 }
54
55
56
57
58 add_action( 'after_plugin_row', 'fv_wp_flowplayer_after_plugin_row', 10, 3 );
59
60 function fv_wp_flowplayer_after_plugin_row( $arg) {
61 if( apply_filters('fv_player_skip_ads',false) ) {
62 return;
63 }
64
65 $args = func_get_args();
66
67 if( $args[1]['Name'] == 'FV Player' ) {
68 $options = get_option( 'fvwpflowplayer' );
69 if( $options['key'] == 'false' || $options['key'] == '' ) :
70 ?>
71 <tr class="plugin-update-tr fv-wordpress-flowplayer-tr">
72 <td class="plugin-update colspanchange" colspan="3">
73 <div class="update-message">
74 <a href="https://foliovision.com/player/download">All Licenses 20% Off</a> - Easter sale!
75 </div>
76 </td>
77 </tr>
78 <?php
79 endif;
80 }
81 }
82
83
84
85 /**
86 * Settings metaboxes close
87 */
88 add_filter( 'get_user_option_closedpostboxes_fv_flowplayer_settings', 'fv_wp_flowplayer_closed_meta_boxes' );
89
90 function fv_wp_flowplayer_closed_meta_boxes( $closed ) {
91 if ( false === $closed ) {
92 $closed = array( 'fv_flowplayer_amazon_options', 'fv_flowplayer_interface_options', 'fv_flowplayer_default_options', 'fv_flowplayer_ads', 'fv_flowplayer_integrations', 'fv_flowplayer_mobile', 'fv_flowplayer_seo', 'fv_flowplayer_privacy');
93 }
94
95 return $closed;
96 }
97
98 /**
99 * Tools metaboxes close
100 */
101 add_filter( 'get_user_option_closedpostboxes_fv_flowplayer_settings_tools', 'fv_flowplayer_settings_tools_closed_meta_boxes' );
102
103 function fv_flowplayer_settings_tools_closed_meta_boxes( $closed ) {
104 if ( false === $closed ) {
105 $closed = array( 'fv_flowplayer_conversion' );
106 }
107
108 return $closed;
109 }
110
111 /**
112 * Skin metaboxes close
113 */
114 add_filter( 'get_user_option_closedpostboxes_fv_flowplayer_settings_skin', 'fv_flowplayer_settings_skin_closed_meta_boxes' );
115
116 function fv_flowplayer_settings_skin_closed_meta_boxes( $closed ) {
117 if ( false === $closed ) {
118 global $fv_fp;
119 $customCSS = $fv_fp->_get_option('customCSS');
120
121 if( strlen( $customCSS ) === 0 ) {
122 $closed = array( 'fv_flowplayer_skin_custom_css' );
123 }
124 }
125
126 return $closed;
127 }
128
129 /*
130 * Saving settings
131 */
132 add_action('admin_init', 'fv_player_settings_save', 9);
133 add_action('wp_ajax_fv_flowplayer_settings_save', 'fv_player_settings_save', 9);
134
135 function fv_player_settings_save() {
136
137 if( isset($_POST['fv-wp-flowplayer-submit']) || isset($_POST['fv-wp-flowplayer-submit-ajax']) ) {
138
139 if( isset($_POST['fv-wp-flowplayer-submit-ajax']) ) {
140 if( wp_doing_ajax() ) {
141 unset($_POST['action']);
142 }
143
144 if(! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['fv_flowplayer_settings_ajax_nonce'] ) ), 'fv_flowplayer_settings_ajax_nonce' ) ) {
145 wp_die('Security check failed');
146 }
147 } else {
148 check_admin_referer('fv_flowplayer_settings_nonce','fv_flowplayer_settings_nonce');
149 }
150
151 global $fv_fp;
152 $fv_fp->_set_conf();
153 }
154 }
155
156
157
158
159 function fv_player_handle_secrets($new, $old) {
160 foreach( $new as $k => $v ) {
161 if (is_array($v) && strpos($k, '_is_secret_') !== 0 && isset($old[$k]) ) {
162 // recursive call for nested settings
163 $v = fv_player_handle_secrets($v, $old[$k]);
164 $new[$k] = $v;
165 }
166
167 if(strpos($k, '_is_secret_') === 0 ) {
168 $key = str_replace('_is_secret_', '', $k);
169
170 if( isset($old[$key]) ) {
171 if(is_array($v)) { // array of values, 1 - keep original, 0 - use new
172 foreach( $v as $a_k => $a_v ) {
173 if( $a_v == '1' ) {
174 $new[$key][$a_k] = $old[$key][$a_k];
175 }
176 }
177 } else if($v == '1') { // single value, 1 - keep original, 0 - use new
178 $new[$key] = $old[$key];
179 }
180 }
181
182 unset($new[$k]); // remove _is_secret_
183 }
184 }
185
186 return $new;
187 }
188
189
190
191
192 /*
193 * Pointer boxes
194 */
195 add_action('admin_init', 'fv_player_admin_pointer_boxes');
196
197 function fv_player_admin_pointer_boxes() {
198 global $fv_fp, $fv_wp_flowplayer_ver;
199
200 $nag_fv_player_upgrade = $fv_fp->_get_option( 'nag_fv_player_upgrade' );
201
202 if( ! $nag_fv_player_upgrade || version_compare( $nag_fv_player_upgrade , $fv_wp_flowplayer_ver ) !== 0 ) {
203 $fv_fp->pointer_boxes['fv_player_upgrade'] = array(
204 'id' => '#wp-admin-bar-new-content',
205 'pointerClass' => 'fv_player_upgrade',
206 'heading' => 'FV Player',
207 'content' =>
208 sprintf( __('You just upgraded to version %s with the following improvements:', 'fv-player'), $fv_wp_flowplayer_ver ) .
209 "<ul class='ul-disc'>
210 <li>Autoplay: Preload the video even before it comes to the viewport for faster playback start</li>
211 <li>LMS | Teaching - support for non-logged in users</li>
212 <li>Performance: Fixes for JavaScript loading speed and rendering</li>
213 <li>Remember audio track: Stored in localStorage and in database for logged in users</li>
214 <li>Security: Improved security for video uploads</li>
215 </ul>",
216 'position' => array( 'edge' => 'top', 'align' => 'center' ),
217 'button1' => __('Thanks for letting me know!', 'fv-player'),
218 'value1' => $fv_wp_flowplayer_ver,
219 );
220 }
221
222 if(
223 $fv_fp->_get_option('video_position_save_enable') &&
224 ! $fv_fp->_get_option('notice_user_video_positions_conversion') &&
225 ( empty( $_GET['page'] ) || 'fv_player_conversion_positions_meta2table' != $_GET['page'] )
226 ) {
227 $fv_fp->pointer_boxes['fv_flowplayer_video_positions_conversion'] = array(
228 'id' => '#wp-admin-bar-new-content',
229 'pointerClass' => 'fv_flowplayer_video_positions_conversion',
230 'heading' => __( 'FV Player Video Position Conversion', 'fv-player' ),
231 'content' => __("<p>In this new version of FV Player the user video positions are stored in separate table. This avoids slowing down the user database (wp_usermeta).</p><p>Please run the tool to migrate the video positions to the new table.</p>"),
232 'position' => array( 'edge' => 'top', 'align' => 'left' ),
233 'button1' => __( 'Migrate', 'fv-player' ),
234 'function1' => 'location.href = "' . admin_url('admin.php?page=fv_player_conversion_positions_meta2table') . '"',
235 );
236 }
237
238 if(
239 isset($fv_fp->conf['disable_videochecker']) && $fv_fp->conf['disable_videochecker'] == 'false' &&
240 ( !isset($fv_fp->conf['video_checker_agreement']) || $fv_fp->conf['video_checker_agreement'] != 'true' )
241 ) {
242 $fv_fp->pointer_boxes['fv_flowplayer_video_checker_service'] = array(
243 'id' => '#wp-admin-bar-new-content',
244 'pointerClass' => 'fv_flowplayer_video_checker_service',
245 'heading' => __( 'FV Player Video Checker', 'fv-player' ),
246 'content' => __( "<p>FV Player includes a <a href='https://foliovision.com/player/basic-setup/how-to-use-video-checker' target='_blank'>free video checker</a> which will check your videos for any encoding errors and helps ensure smooth playback of all your videos. To work its magic, our video checker must contact our server.</p><p>Would you like to enable the video encoding checker?</p>", 'fv-player' ),
247 'position' => array( 'edge' => 'top', 'align' => 'center' ),
248 'button1' => __( 'Allow', 'fv-player' ),
249 'button2' => __( 'Disable the video checker', 'fv-player' )
250 );
251 }
252
253 if( $fv_fp->_get_option('video_sitemap') && $fv_fp->_get_option( 'ui_embed' ) && !$fv_fp->_get_option('notice_xml_sitemap_iframes') ) {
254 $fv_fp->pointer_boxes['fv_flowplayer_notice_xml_sitemap_iframes'] = array(
255 'id' => '#wp-admin-bar-new-content',
256 'pointerClass' => 'fv_flowplayer_notice_xml_sitemap_iframes',
257 'heading' => __( 'FV Player Video Sitemap coverage', 'fv-player' ),
258 'content' => __( "<p>The XML Video Sitemap now includes a lot more videos as it uses the individual player iframe embed links. Until now it was only possible to put in videos using MP4 format without any kind of download protection.</p><p>Please <a href='https://foliovision.com/support/fv-wordpress-flowplayer/bug-reports#new-post' target='_blank'>let us know</a> in case you notice any issues. Your members only videos stay protected and won't open, but let us know if they appear in sitemap.</p>", 'fv-player' ).'<script>jQuery(".fv_flowplayer_notice_xml_sitemap_iframes .button2").click()</script>',
259 'position' => array( 'edge' => 'top', 'align' => 'center' ),
260 'button1' => __( 'Thanks for letting me know!', 'fv-player' ),
261 'button2' => __( 'Go to setting', 'fv-player' ),
262 'function2' => 'location.href = "'.admin_url('admin.php?page=fvplayer').'#fv_flowplayer_seo"',
263 );
264 }
265
266 if( !$fv_fp->_get_option('nag_fv_player_8') ) {
267 $fv_fp->pointer_boxes['fv_flowplayer_fv_player_8'] = array(
268 'id' => '#wp-admin-bar-new-content',
269 'pointerClass' => 'fv_flowplayer_fv_player_8',
270 'heading' => __( 'FV Player 8', 'fv-player' ),
271 'content' => '<p>Welcome to the brand new FV Player 8! Improvements include:</p>'.
272 '<ul style="list-style: circle; padding-left: 3em;">
273 <li>New mobile controls</li>
274 <li>New editor interface</li>
275 <li>Proper Gutenberg block</li>
276 <li>Autoplay respects user scroll position</li>
277 <li>Two new playlist styles</li>
278 <li>Shortcodes and video links converted to database entries on post save</li>
279 <li>PageSpeed Score improvements</li>
280 <li>Increased compatibility and performance</li>
281 <li>User Video Positions stored in separate database table</li>
282 </ul>'.
283 '<p>More information in our <a href="https://foliovision.com/player/developers/fv-player-8-changes" target="_blank">blog announcement</a>.</p>',
284 'position' => array( 'edge' => 'top', 'align' => 'center' ),
285 'button1' => __( 'Thanks for letting me know!', 'fv-player' ),
286 );
287 }
288 }
289
290
291
292
293 add_action( 'wp_ajax_fv_foliopress_ajax_pointers', 'fv_wp_flowplayer_pointers_ajax' );
294
295 function fv_wp_flowplayer_pointers_ajax() {
296
297 if( isset($_POST['key']) && sanitize_key( $_POST['key'] ) == 'fv_flowplayer_video_checker_service' && isset($_POST['value']) ) {
298 check_ajax_referer('fv_flowplayer_video_checker_service');
299 $conf = get_option( 'fvwpflowplayer' );
300 if( $conf ) {
301 if( sanitize_key( $_POST['value'] ) == 'true' ) {
302 $conf['disable_videochecker'] = 'false';
303 $conf['video_checker_agreement'] = 'true';
304 } else {
305 $conf['disable_videochecker'] = 'true';
306 }
307 update_option( 'fvwpflowplayer', $conf );
308 }
309 die();
310 }
311
312 if( isset($_POST['key']) && sanitize_key( $_POST['key'] ) == 'fv_flowplayer_video_positions_conversion' && isset($_POST['value']) ) {
313 check_ajax_referer('fv_flowplayer_video_positions_conversion');
314 $conf = get_option( 'fvwpflowplayer' );
315 if( $conf ) {
316 $conf['notice_user_video_positions_conversion'] = sanitize_text_field( $_POST['value'] );
317 update_option( 'fvwpflowplayer', $conf );
318 }
319 die();
320 }
321
322 $notices = array(
323 'fv_flowplayer_notice_xml_sitemap_iframes' => 'notice_xml_sitemap_iframes',
324 'fv_flowplayer_fv_player_8' => 'nag_fv_player_8',
325 'fv_player_upgrade' => 'nag_fv_player_upgrade',
326 );
327
328 if( isset($_POST['key']) && isset($_POST['value']) && in_array($_POST['key'], array_keys($notices) ) ) {
329 check_ajax_referer( sanitize_key( $_POST['key'] ) );
330 $conf = get_option( 'fvwpflowplayer' );
331 if( $conf ) {
332 $conf[ $notices[ sanitize_key( $_POST['key'] ) ] ] = sanitize_text_field( $_POST['value'] );
333 update_option( 'fvwpflowplayer', $conf );
334 }
335 die();
336 }
337
338 }
339
340
341 /*
342 * Making sure FV Player appears properly on settings screen
343 */
344 add_action('admin_enqueue_scripts', 'fv_flowplayer_admin_scripts');
345
346 function fv_flowplayer_admin_scripts() {
347 global $fv_wp_flowplayer_ver, $fv_fp;
348
349 if( fv_player_is_admin_screen() ) {
350 wp_enqueue_media();
351
352 wp_enqueue_script('wp-theme-plugin-editor');
353 wp_enqueue_style('wp-codemirror');
354
355 wp_enqueue_script('common');
356 wp_enqueue_script('wp-lists');
357 wp_enqueue_script('postbox');
358
359 wp_enqueue_script('jquery-minicolors', flowplayer::get_plugin_url().'/js/jquery-minicolors/jquery.minicolors.min.js',array('jquery'), $fv_wp_flowplayer_ver );
360 wp_enqueue_script('fv-player-admin', flowplayer::get_plugin_url().'/js/admin.js',array('jquery','jquery-minicolors'), filemtime( (__DIR__).'/../js/admin.js' ), true );
361 wp_localize_script( 'fv-player-admin', 'fv_player_admin', array(
362 'css_logo_positions' => $fv_fp->css_logo_positions,
363 ) );
364
365 wp_enqueue_script('fv-player-settings', flowplayer::get_plugin_url().'/js/settings.js',array('jquery'), filemtime( (__DIR__).'/../js/settings.js' ), true );
366
367 if( function_exists('wp_enqueue_code_editor') ) {
368 wp_localize_script('fv-player-admin', 'cm_settings', wp_enqueue_code_editor(array('type' => 'text/css')) );
369 }
370 }
371 }
372
373
374
375
376 add_action( 'admin_enqueue_scripts', 'fv_player_settings_styles' );
377
378 function fv_player_settings_styles() {
379 if( !fv_player_is_admin_screen() ) return;
380
381 global $fv_wp_flowplayer_ver;
382 wp_enqueue_style('fv-player-admin', flowplayer::get_plugin_url().'/css/license.css',array(), $fv_wp_flowplayer_ver );
383 wp_enqueue_style('jquery-minicolors', flowplayer::get_plugin_url().'/js/jquery-minicolors/jquery.minicolors.css',array(), $fv_wp_flowplayer_ver );
384 }
385
386 add_action('admin_footer', 'flowplayer_admin_footer');
387
388 function flowplayer_admin_footer() {
389 if( !fv_player_is_admin_screen() ) return;
390
391 flowplayer_prepare_scripts();
392 flowplayer_display_scripts();
393 }
394
395 function fv_player_get_aws_regions() {
396
397 return array(
398 'af-south-1' => __('Africa (Cape Town)', 'fv-player' ),
399 'ap-east-1' => __('Asia Pacific (Hong Kong)', 'fv-player' ),
400 'ap-south-2' => __('Asia Pacific (Hyderabad)', 'fv-player' ),
401 'ap-southeast-3' => __('Asia Pacific (Jakarta)', 'fv-player' ),
402 'ap-southeast-5' => __('Asia Pacific (Malaysia)', 'fv-player' ),
403 'ap-southeast-4' => __('Asia Pacific (Melbourne)', 'fv-player' ),
404 'ap-south-1' => __('Asia Pacific (Mumbai)', 'fv-player' ),
405 'ap-northeast-3' => __('Asia Pacific (Osaka)', 'fv-player' ),
406 'ap-northeast-2' => __('Asia Pacific (Seoul)', 'fv-player' ),
407 'ap-southeast-1' => __('Asia Pacific (Singapore)', 'fv-player' ),
408 'ap-southeast-2' => __('Asia Pacific (Sydney)', 'fv-player' ),
409 'ap-northeast-1' => __('Asia Pacific (Tokyo)', 'fv-player' ),
410
411 'ca-central-1' => __('Canada (Central)', 'fv-player' ),
412 'ca-west-1' => __('Canada West (Calgary)', 'fv-player' ),
413
414 'cn-north-1' => __('China (Beijing)', 'fv-player' ),
415 'cn-northwest-1' => __('China (Ningxia)', 'fv-player' ),
416
417 'eu-central-1' => __('Europe (Frankfurt)', 'fv-player' ),
418 'eu-west-1' => __('Europe (Ireland)', 'fv-player' ),
419 'eu-west-2' => __('Europe (London)', 'fv-player' ),
420 'eu-south-1' => __('Europe (Milan)', 'fv-player' ),
421 'eu-west-3' => __('Europe (Paris)', 'fv-player' ),
422 'eu-south-2' => __('Europe (Spain)', 'fv-player' ),
423 'eu-north-1' => __('Europe (Stockholm)', 'fv-player' ),
424 'eu-central-2' => __('Europe (Zurich)', 'fv-player' ),
425
426 'il-central-1' => __('Israel (Tel Aviv)', 'fv-player' ),
427
428 'me-south-1' => __('Middle East (Bahrain)', 'fv-player' ),
429 'me-central-1' => __('Middle East (UAE)', 'fv-player' ),
430
431 'sa-east-1' => __('South America (S&atilde;o Paulo)', 'fv-player' ),
432
433 'us-west-1' => __('US West (N. California)', 'fv-player' ),
434 'us-east-1' => __('US East (N. Virginia)', 'fv-player' ),
435 'us-east-2' => __('US East (Ohio)', 'fv-player' ),
436 'us-west-2' => __('US West (Oregon)', 'fv-player' )
437
438 );
439 }
440