PluginProbe
FV Player 8 / trunk
FV Player 8 vtrunk
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 trunk, at controller/settings.php

450 lines 16.4 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
153 $old_debug_log = $fv_fp->_get_option( 'debug_file' );
154
155 $fv_fp->_set_conf();
156
157 if ( ! $old_debug_log && $fv_fp->_get_option( 'debug_file') ) {
158 $fv_fp->log_file_setup();
159
160 } else if ( $old_debug_log && ! $fv_fp->_get_option( 'debug_file') ) {
161 $fv_fp->log_file_delete();
162 }
163 }
164 }
165
166
167
168
169 function fv_player_handle_secrets($new, $old) {
170 foreach( $new as $k => $v ) {
171 if (is_array($v) && strpos($k, '_is_secret_') !== 0 && isset($old[$k]) ) {
172 // recursive call for nested settings
173 $v = fv_player_handle_secrets($v, $old[$k]);
174 $new[$k] = $v;
175 }
176
177 if(strpos($k, '_is_secret_') === 0 ) {
178 $key = str_replace('_is_secret_', '', $k);
179
180 if( isset($old[$key]) ) {
181 if(is_array($v)) { // array of values, 1 - keep original, 0 - use new
182 foreach( $v as $a_k => $a_v ) {
183 if( $a_v == '1' ) {
184 $new[$key][$a_k] = $old[$key][$a_k];
185 }
186 }
187 } else if($v == '1') { // single value, 1 - keep original, 0 - use new
188 $new[$key] = $old[$key];
189 }
190 }
191
192 unset($new[$k]); // remove _is_secret_
193 }
194 }
195
196 return $new;
197 }
198
199
200
201
202 /*
203 * Pointer boxes
204 */
205 add_action('admin_init', 'fv_player_admin_pointer_boxes');
206
207 function fv_player_admin_pointer_boxes() {
208 global $fv_fp, $fv_wp_flowplayer_ver;
209
210 $nag_fv_player_upgrade = $fv_fp->_get_option( 'nag_fv_player_upgrade' );
211
212 if( ! $nag_fv_player_upgrade || version_compare( $nag_fv_player_upgrade , $fv_wp_flowplayer_ver ) !== 0 ) {
213 $fv_fp->pointer_boxes['fv_player_upgrade'] = array(
214 'id' => '#wp-admin-bar-new-content',
215 'pointerClass' => 'fv_player_upgrade',
216 'heading' => 'FV Player',
217 'content' =>
218 sprintf( __('You just upgraded to version %s with the following improvements:', 'fv-player'), $fv_wp_flowplayer_ver ) .
219 "<ul class='ul-disc'>
220 <li>Autoplay: Preload the video even before it comes to the viewport for faster playback start</li>
221 <li>LMS | Teaching - support for non-logged in users</li>
222 <li>Performance: Fixes for JavaScript loading speed and rendering</li>
223 <li>Remember audio track: Stored in localStorage and in database for logged in users</li>
224 <li>Security: Improved security for video uploads</li>
225 </ul>",
226 'position' => array( 'edge' => 'top', 'align' => 'center' ),
227 'button1' => __('Thanks for letting me know!', 'fv-player'),
228 'value1' => $fv_wp_flowplayer_ver,
229 );
230 }
231
232 if(
233 $fv_fp->_get_option('video_position_save_enable') &&
234 ! $fv_fp->_get_option('notice_user_video_positions_conversion') &&
235 ( empty( $_GET['page'] ) || 'fv_player_conversion_positions_meta2table' != $_GET['page'] )
236 ) {
237 $fv_fp->pointer_boxes['fv_flowplayer_video_positions_conversion'] = array(
238 'id' => '#wp-admin-bar-new-content',
239 'pointerClass' => 'fv_flowplayer_video_positions_conversion',
240 'heading' => __( 'FV Player Video Position Conversion', 'fv-player' ),
241 '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>"),
242 'position' => array( 'edge' => 'top', 'align' => 'left' ),
243 'button1' => __( 'Migrate', 'fv-player' ),
244 'function1' => 'location.href = "' . admin_url('admin.php?page=fv_player_conversion_positions_meta2table') . '"',
245 );
246 }
247
248 if(
249 isset($fv_fp->conf['disable_videochecker']) && $fv_fp->conf['disable_videochecker'] == 'false' &&
250 ( !isset($fv_fp->conf['video_checker_agreement']) || $fv_fp->conf['video_checker_agreement'] != 'true' )
251 ) {
252 $fv_fp->pointer_boxes['fv_flowplayer_video_checker_service'] = array(
253 'id' => '#wp-admin-bar-new-content',
254 'pointerClass' => 'fv_flowplayer_video_checker_service',
255 'heading' => __( 'FV Player Video Checker', 'fv-player' ),
256 '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' ),
257 'position' => array( 'edge' => 'top', 'align' => 'center' ),
258 'button1' => __( 'Allow', 'fv-player' ),
259 'button2' => __( 'Disable the video checker', 'fv-player' )
260 );
261 }
262
263 if( $fv_fp->_get_option('video_sitemap') && $fv_fp->_get_option( 'ui_embed' ) && !$fv_fp->_get_option('notice_xml_sitemap_iframes') ) {
264 $fv_fp->pointer_boxes['fv_flowplayer_notice_xml_sitemap_iframes'] = array(
265 'id' => '#wp-admin-bar-new-content',
266 'pointerClass' => 'fv_flowplayer_notice_xml_sitemap_iframes',
267 'heading' => __( 'FV Player Video Sitemap coverage', 'fv-player' ),
268 '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>',
269 'position' => array( 'edge' => 'top', 'align' => 'center' ),
270 'button1' => __( 'Thanks for letting me know!', 'fv-player' ),
271 'button2' => __( 'Go to setting', 'fv-player' ),
272 'function2' => 'location.href = "'.admin_url('admin.php?page=fvplayer').'#fv_flowplayer_seo"',
273 );
274 }
275
276 if( !$fv_fp->_get_option('nag_fv_player_8') ) {
277 $fv_fp->pointer_boxes['fv_flowplayer_fv_player_8'] = array(
278 'id' => '#wp-admin-bar-new-content',
279 'pointerClass' => 'fv_flowplayer_fv_player_8',
280 'heading' => __( 'FV Player 8', 'fv-player' ),
281 'content' => '<p>Welcome to the brand new FV Player 8! Improvements include:</p>'.
282 '<ul style="list-style: circle; padding-left: 3em;">
283 <li>New mobile controls</li>
284 <li>New editor interface</li>
285 <li>Proper Gutenberg block</li>
286 <li>Autoplay respects user scroll position</li>
287 <li>Two new playlist styles</li>
288 <li>Shortcodes and video links converted to database entries on post save</li>
289 <li>PageSpeed Score improvements</li>
290 <li>Increased compatibility and performance</li>
291 <li>User Video Positions stored in separate database table</li>
292 </ul>'.
293 '<p>More information in our <a href="https://foliovision.com/player/developers/fv-player-8-changes" target="_blank">blog announcement</a>.</p>',
294 'position' => array( 'edge' => 'top', 'align' => 'center' ),
295 'button1' => __( 'Thanks for letting me know!', 'fv-player' ),
296 );
297 }
298 }
299
300
301
302
303 add_action( 'wp_ajax_fv_foliopress_ajax_pointers', 'fv_wp_flowplayer_pointers_ajax' );
304
305 function fv_wp_flowplayer_pointers_ajax() {
306
307 if( isset($_POST['key']) && sanitize_key( $_POST['key'] ) == 'fv_flowplayer_video_checker_service' && isset($_POST['value']) ) {
308 check_ajax_referer('fv_flowplayer_video_checker_service');
309 $conf = get_option( 'fvwpflowplayer' );
310 if( $conf ) {
311 if( sanitize_key( $_POST['value'] ) == 'true' ) {
312 $conf['disable_videochecker'] = 'false';
313 $conf['video_checker_agreement'] = 'true';
314 } else {
315 $conf['disable_videochecker'] = 'true';
316 }
317 update_option( 'fvwpflowplayer', $conf );
318 }
319 die();
320 }
321
322 if( isset($_POST['key']) && sanitize_key( $_POST['key'] ) == 'fv_flowplayer_video_positions_conversion' && isset($_POST['value']) ) {
323 check_ajax_referer('fv_flowplayer_video_positions_conversion');
324 $conf = get_option( 'fvwpflowplayer' );
325 if( $conf ) {
326 $conf['notice_user_video_positions_conversion'] = sanitize_text_field( $_POST['value'] );
327 update_option( 'fvwpflowplayer', $conf );
328 }
329 die();
330 }
331
332 $notices = array(
333 'fv_flowplayer_notice_xml_sitemap_iframes' => 'notice_xml_sitemap_iframes',
334 'fv_flowplayer_fv_player_8' => 'nag_fv_player_8',
335 'fv_player_upgrade' => 'nag_fv_player_upgrade',
336 );
337
338 if( isset($_POST['key']) && isset($_POST['value']) && in_array($_POST['key'], array_keys($notices) ) ) {
339 check_ajax_referer( sanitize_key( $_POST['key'] ) );
340 $conf = get_option( 'fvwpflowplayer' );
341 if( $conf ) {
342 $conf[ $notices[ sanitize_key( $_POST['key'] ) ] ] = sanitize_text_field( $_POST['value'] );
343 update_option( 'fvwpflowplayer', $conf );
344 }
345 die();
346 }
347
348 }
349
350
351 /*
352 * Making sure FV Player appears properly on settings screen
353 */
354 add_action('admin_enqueue_scripts', 'fv_flowplayer_admin_scripts');
355
356 function fv_flowplayer_admin_scripts() {
357 global $fv_wp_flowplayer_ver, $fv_fp;
358
359 if( fv_player_is_admin_screen() ) {
360 wp_enqueue_media();
361
362 wp_enqueue_script('wp-theme-plugin-editor');
363 wp_enqueue_style('wp-codemirror');
364
365 wp_enqueue_script('common');
366 wp_enqueue_script('wp-lists');
367 wp_enqueue_script('postbox');
368
369 wp_enqueue_script('jquery-minicolors', flowplayer::get_plugin_url().'/js/jquery-minicolors/jquery.minicolors.min.js',array('jquery'), $fv_wp_flowplayer_ver );
370 wp_enqueue_script('fv-player-admin', flowplayer::get_plugin_url().'/js/admin.js',array('jquery','jquery-minicolors'), filemtime( (__DIR__).'/../js/admin.js' ), true );
371 wp_localize_script( 'fv-player-admin', 'fv_player_admin', array(
372 'css_logo_positions' => $fv_fp->css_logo_positions,
373 ) );
374
375 wp_enqueue_script('fv-player-settings', flowplayer::get_plugin_url().'/js/settings.js',array('jquery'), filemtime( (__DIR__).'/../js/settings.js' ), true );
376
377 if( function_exists('wp_enqueue_code_editor') ) {
378 wp_localize_script('fv-player-admin', 'cm_settings', wp_enqueue_code_editor(array('type' => 'text/css')) );
379 }
380 }
381 }
382
383
384
385
386 add_action( 'admin_enqueue_scripts', 'fv_player_settings_styles' );
387
388 function fv_player_settings_styles() {
389 if( !fv_player_is_admin_screen() ) return;
390
391 global $fv_wp_flowplayer_ver;
392 wp_enqueue_style('fv-player-admin', flowplayer::get_plugin_url().'/css/license.css',array(), $fv_wp_flowplayer_ver );
393 wp_enqueue_style('jquery-minicolors', flowplayer::get_plugin_url().'/js/jquery-minicolors/jquery.minicolors.css',array(), $fv_wp_flowplayer_ver );
394 }
395
396 add_action('admin_footer', 'flowplayer_admin_footer');
397
398 function flowplayer_admin_footer() {
399 if( !fv_player_is_admin_screen() ) return;
400
401 flowplayer_prepare_scripts();
402 flowplayer_display_scripts();
403 }
404
405 function fv_player_get_aws_regions() {
406
407 return array(
408 'af-south-1' => __('Africa (Cape Town)', 'fv-player' ),
409 'ap-east-1' => __('Asia Pacific (Hong Kong)', 'fv-player' ),
410 'ap-south-2' => __('Asia Pacific (Hyderabad)', 'fv-player' ),
411 'ap-southeast-3' => __('Asia Pacific (Jakarta)', 'fv-player' ),
412 'ap-southeast-5' => __('Asia Pacific (Malaysia)', 'fv-player' ),
413 'ap-southeast-4' => __('Asia Pacific (Melbourne)', 'fv-player' ),
414 'ap-south-1' => __('Asia Pacific (Mumbai)', 'fv-player' ),
415 'ap-northeast-3' => __('Asia Pacific (Osaka)', 'fv-player' ),
416 'ap-northeast-2' => __('Asia Pacific (Seoul)', 'fv-player' ),
417 'ap-southeast-1' => __('Asia Pacific (Singapore)', 'fv-player' ),
418 'ap-southeast-2' => __('Asia Pacific (Sydney)', 'fv-player' ),
419 'ap-northeast-1' => __('Asia Pacific (Tokyo)', 'fv-player' ),
420
421 'ca-central-1' => __('Canada (Central)', 'fv-player' ),
422 'ca-west-1' => __('Canada West (Calgary)', 'fv-player' ),
423
424 'cn-north-1' => __('China (Beijing)', 'fv-player' ),
425 'cn-northwest-1' => __('China (Ningxia)', 'fv-player' ),
426
427 'eu-central-1' => __('Europe (Frankfurt)', 'fv-player' ),
428 'eu-west-1' => __('Europe (Ireland)', 'fv-player' ),
429 'eu-west-2' => __('Europe (London)', 'fv-player' ),
430 'eu-south-1' => __('Europe (Milan)', 'fv-player' ),
431 'eu-west-3' => __('Europe (Paris)', 'fv-player' ),
432 'eu-south-2' => __('Europe (Spain)', 'fv-player' ),
433 'eu-north-1' => __('Europe (Stockholm)', 'fv-player' ),
434 'eu-central-2' => __('Europe (Zurich)', 'fv-player' ),
435
436 'il-central-1' => __('Israel (Tel Aviv)', 'fv-player' ),
437
438 'me-south-1' => __('Middle East (Bahrain)', 'fv-player' ),
439 'me-central-1' => __('Middle East (UAE)', 'fv-player' ),
440
441 'sa-east-1' => __('South America (S&atilde;o Paulo)', 'fv-player' ),
442
443 'us-west-1' => __('US West (N. California)', 'fv-player' ),
444 'us-east-1' => __('US East (N. Virginia)', 'fv-player' ),
445 'us-east-2' => __('US East (Ohio)', 'fv-player' ),
446 'us-west-2' => __('US West (Oregon)', 'fv-player' )
447
448 );
449 }
450