Version Description
2017/01/08 =
Caption field - renaming to Title
Database - enabling background processing for videos in DB
Editor - fix for WebM and HLS duration scanning
Lightbox - added Remove fancyBox setting - use if you see a "fancyBox already initialized" message on JavaScript console
Sharing - removing Google+ as it's deprecated
Bugfix - PHP 7.2 compatiblity
Download this release
Release Info
Developer | FolioVision |
Plugin | FV Flowplayer Video Player |
Version | 7.3.6.727 |
Comparing to | |
See all releases |
Code changes from version 7.3.3.727 to 7.3.6.727
- controller/editor.php +4 -0
- controller/shortcodes.php +22 -5
- css/colorbox.css +40 -41
- css/flowplayer.css +3 -9
- css/shortcode-editor.css +166 -161
- flowplayer.php +4 -4
- flowplayer/fv-flowplayer.min.js +4 -2
- js/gutenberg.js +53 -0
- js/shortcode-editor.js +23 -5
- models/checker.php +142 -143
- models/db-player-meta.php +1 -1
- models/db-player.php +30 -22
- models/db-video-meta.php +1 -1
- models/db-video.php +82 -17
- models/db.php +2 -1
- models/flowplayer-frontend.php +4 -5
- models/flowplayer.php +8 -1
- models/gutenberg.php +13 -0
- models/lightbox.php +24 -1
- models/list-table.php +5 -2
- models/xml-video-sitemap.php +10 -3
- readme.txt +18 -1
- view/admin.php +3 -3
- view/wizard.php +2 -2
controller/editor.php
CHANGED
@@ -69,7 +69,11 @@ function flowplayer_add_media_button() {
|
|
69 |
add_action('media_upload_fvplayer_video', '__return_false'); // keep for compatibility!
|
70 |
|
71 |
|
|
|
72 |
|
|
|
|
|
|
|
73 |
|
74 |
add_action( 'edit_form_after_editor', 'fv_wp_flowplayer_edit_form_after_editor' );
|
75 |
|
69 |
add_action('media_upload_fvplayer_video', '__return_false'); // keep for compatibility!
|
70 |
|
71 |
|
72 |
+
add_action( 'block_editor_meta_box_hidden_fields', 'fv_wp_flowplayer_gutenberg_editor_load' );
|
73 |
|
74 |
+
function fv_wp_flowplayer_gutenberg_editor_load() {
|
75 |
+
add_action( 'admin_footer', 'fv_wp_flowplayer_edit_form_after_editor', 0 );
|
76 |
+
}
|
77 |
|
78 |
add_action( 'edit_form_after_editor', 'fv_wp_flowplayer_edit_form_after_editor' );
|
79 |
|
controller/shortcodes.php
CHANGED
@@ -361,10 +361,6 @@ if( ( empty($_POST['action']) || $_POST['action'] != 'parse-media-shortcode' ) &
|
|
361 |
$aArgs = func_get_args();
|
362 |
$atts = $aArgs[1];
|
363 |
|
364 |
-
if( !empty($atts['type']) && $atts['type'] != 'video' ) {
|
365 |
-
return false;
|
366 |
-
}
|
367 |
-
|
368 |
// copy from wp-includes/media.php wp_playlist_shortcode()
|
369 |
global $post;
|
370 |
if ( ! empty( $attr['ids'] ) ) {
|
@@ -416,6 +412,8 @@ if( ( empty($_POST['action']) || $_POST['action'] != 'parse-media-shortcode' ) &
|
|
416 |
$bridge_atts = array();
|
417 |
$aPlaylistItems = array();
|
418 |
$aPlaylistImages = array();
|
|
|
|
|
419 |
$i = 0;
|
420 |
foreach ( $attachments as $attachment ) {
|
421 |
$i++;
|
@@ -437,6 +435,15 @@ if( ( empty($_POST['action']) || $_POST['action'] != 'parse-media-shortcode' ) &
|
|
437 |
} else {
|
438 |
$aPlaylistImages[] = $src;
|
439 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
440 |
|
441 |
}
|
442 |
|
@@ -450,7 +457,13 @@ if( ( empty($_POST['action']) || $_POST['action'] != 'parse-media-shortcode' ) &
|
|
450 |
$bridge_atts['playlist'] .= ';';
|
451 |
}
|
452 |
$bridge_atts['playlist'] = trim($bridge_atts['playlist'],';');
|
|
|
|
|
453 |
|
|
|
|
|
|
|
|
|
454 |
if( isset($atts['width']) ) {
|
455 |
$bridge_atts['width'] = $atts['width'];
|
456 |
}
|
@@ -461,7 +474,11 @@ if( ( empty($_POST['action']) || $_POST['action'] != 'parse-media-shortcode' ) &
|
|
461 |
if( count($bridge_atts) == 0 ) {
|
462 |
return "<!--FV Flowplayer video shortcode integration - no attributes recognized-->";
|
463 |
}
|
464 |
-
|
|
|
|
|
|
|
|
|
465 |
return flowplayer_content_handle( $bridge_atts, false, 'video' );
|
466 |
}
|
467 |
|
361 |
$aArgs = func_get_args();
|
362 |
$atts = $aArgs[1];
|
363 |
|
|
|
|
|
|
|
|
|
364 |
// copy from wp-includes/media.php wp_playlist_shortcode()
|
365 |
global $post;
|
366 |
if ( ! empty( $attr['ids'] ) ) {
|
412 |
$bridge_atts = array();
|
413 |
$aPlaylistItems = array();
|
414 |
$aPlaylistImages = array();
|
415 |
+
$aPlaylistCaptions = array();
|
416 |
+
$aPlaylistDurations = array();
|
417 |
$i = 0;
|
418 |
foreach ( $attachments as $attachment ) {
|
419 |
$i++;
|
435 |
} else {
|
436 |
$aPlaylistImages[] = $src;
|
437 |
}
|
438 |
+
|
439 |
+
$aPlaylistCaptions[] = str_replace( array('"',';'), '', flowplayer::esc_caption($attachment->post_title) );
|
440 |
+
|
441 |
+
$meta = wp_get_attachment_metadata( $attachment->ID );
|
442 |
+
if( !empty($meta) ) {
|
443 |
+
if( !empty($meta['length_formatted']) ) {
|
444 |
+
$aPlaylistDurations[] = $meta['length_formatted'];
|
445 |
+
}
|
446 |
+
}
|
447 |
|
448 |
}
|
449 |
|
457 |
$bridge_atts['playlist'] .= ';';
|
458 |
}
|
459 |
$bridge_atts['playlist'] = trim($bridge_atts['playlist'],';');
|
460 |
+
if( count($aPlaylistCaptions) > 1 || $atts['tracklist'] ) $bridge_atts['caption'] = implode(';',$aPlaylistCaptions);
|
461 |
+
$bridge_atts['durations'] = implode(';',$aPlaylistDurations);
|
462 |
|
463 |
+
if( $atts['tracklist'] ) {
|
464 |
+
$bridge_atts['listshow'] = true;
|
465 |
+
}
|
466 |
+
|
467 |
if( isset($atts['width']) ) {
|
468 |
$bridge_atts['width'] = $atts['width'];
|
469 |
}
|
474 |
if( count($bridge_atts) == 0 ) {
|
475 |
return "<!--FV Flowplayer video shortcode integration - no attributes recognized-->";
|
476 |
}
|
477 |
+
|
478 |
+
if( !empty($atts['type']) && $atts['type'] == 'audio' ) {
|
479 |
+
$bridge_atts['liststyle'] = 'horizontal';
|
480 |
+
}
|
481 |
+
|
482 |
return flowplayer_content_handle( $bridge_atts, false, 'video' );
|
483 |
}
|
484 |
|
css/colorbox.css
CHANGED
@@ -1,41 +1,40 @@
|
|
1 |
-
#fv-wordpress-flowplayer-popup { background: white; }
|
2 |
-
|
3 |
-
/*
|
4 |
-
ColorBox Core Style
|
5 |
-
The following rules are the styles that are consistant between themes.
|
6 |
-
Avoid changing this area to maintain compatability with future versions of ColorBox.
|
7 |
-
*/
|
8 |
-
#fv_player_box, #fv_player_boxOverlay, #fv_player_boxWrapper, #fv_player_box.fv-flowplayer-shortcode-editor, #fv_player_boxOverlay.fv-flowplayer-shortcode-editor, #fv_player_boxWrapper.fv-flowplayer-shortcode-editor{position:absolute; top:0; left:0; z-index:100001; overflow:hidden;}
|
9 |
-
#fv_player_boxOverlay, #fv_player_boxOverlay.fv-flowplayer-shortcode-editor{position:fixed; width:100%; height:100%; z-index: 100000}
|
10 |
-
#fv_player_boxMiddleLeft, #fv_player_boxBottomLeft{clear:left;}
|
11 |
-
#fv_player_boxContent{position:relative; overflow:hidden;}
|
12 |
-
#fv_player_boxLoadedContent{overflow:auto;}
|
13 |
-
#fv_player_boxLoadedContent iframe{display:block; width:100%; height:100%; border:0; background-color: white;}
|
14 |
-
.fv-flowplayer-shortcode-editor #fv_player_boxTitle{margin:5px; text-align: left; bottom: auto;}
|
15 |
-
.fv-flowplayer-shortcode-editor #fv_player_boxClose{top:8px;right:8px;}
|
16 |
-
#fv_player_boxLoadingOverlay, #fv_player_boxLoadingGraphic{position:absolute; top:0; left:0; width:100%;}
|
17 |
-
#fv_player_boxPrevious, #fv_player_boxNext, #fv_player_boxClose, #fv_player_boxSlideshow{cursor:pointer;}
|
18 |
-
|
19 |
-
/*
|
20 |
-
ColorBox example user style
|
21 |
-
The following rules are ordered and tabbed in a way that represents the
|
22 |
-
order/nesting of the generated HTML, so that the structure easier to understand.
|
23 |
-
*/
|
24 |
-
#fv_player_boxOverlay{background:#111;}
|
25 |
-
|
26 |
-
#colorBox{}
|
27 |
-
#fv_player_boxContent{background:#fff; padding: 5px;background:url(loading.gif) 50% 50% no-repeat #fff; }
|
28 |
-
#fv_player_boxLoadedContent{margin-top:35px;}
|
29 |
-
#fv_player_boxTitle{position:absolute; top:0px; left:0; padding: 8px 0 8px 18.5%; width:100%; color:#9D1A28; font-size: 14px;}
|
30 |
-
#fv_player_boxCurrent{position:absolute; bottom:0px; left:100px; color:#999;}
|
31 |
-
#fv_player_boxSlideshow{position:absolute; bottom:0px; right:42px; color:#444;}
|
32 |
-
#fv_player_boxPrevious{position:absolute; bottom:0px; left:0; color:#444;}
|
33 |
-
#fv_player_boxNext{position:absolute; bottom:0px; left:63px; color:#444;}
|
34 |
-
/*#fv_player_boxLoadingOverlay{ text-align: center; background:url(loading.gif) 5px 5px no-repeat #fff;}*/
|
35 |
-
#fv_player_boxClose{position:absolute; top:2px; right:2px; display:block; color:#444; height: 16px; width: 16px; overflow: hidden; text-indent: 25px; background: url("img/uploader-icons.png") -98px 0 no-repeat transparent; border: 0; }
|
36 |
-
#fv_player_boxClose:hover { background-position: -98px 0; }
|
37 |
-
|
38 |
-
/* Add video button */
|
39 |
-
.wp-media-buttons .fv-wordpress-flowplayer-button span{min-width:
|
40 |
-
@media
|
41 |
-
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {.wp-media-buttons .fv-wordpress-flowplayer-button span{background:url('../images/icon@x2.png') no-repeat center center;min-width:32px;background-size:25px auto;} }
|
1 |
+
#fv-wordpress-flowplayer-popup { background: white; }
|
2 |
+
|
3 |
+
/*
|
4 |
+
ColorBox Core Style
|
5 |
+
The following rules are the styles that are consistant between themes.
|
6 |
+
Avoid changing this area to maintain compatability with future versions of ColorBox.
|
7 |
+
*/
|
8 |
+
#fv_player_box, #fv_player_boxOverlay, #fv_player_boxWrapper, #fv_player_box.fv-flowplayer-shortcode-editor, #fv_player_boxOverlay.fv-flowplayer-shortcode-editor, #fv_player_boxWrapper.fv-flowplayer-shortcode-editor{position:absolute; top:0; left:0; z-index:100001; overflow:hidden;}
|
9 |
+
#fv_player_boxOverlay, #fv_player_boxOverlay.fv-flowplayer-shortcode-editor{position:fixed; width:100%; height:100%; z-index: 100000}
|
10 |
+
#fv_player_boxMiddleLeft, #fv_player_boxBottomLeft{clear:left;}
|
11 |
+
#fv_player_boxContent{position:relative; overflow:hidden;}
|
12 |
+
#fv_player_boxLoadedContent{overflow:auto;}
|
13 |
+
#fv_player_boxLoadedContent iframe{display:block; width:100%; height:100%; border:0; background-color: white;}
|
14 |
+
.fv-flowplayer-shortcode-editor #fv_player_boxTitle{margin:5px; text-align: left; bottom: auto;}
|
15 |
+
.fv-flowplayer-shortcode-editor #fv_player_boxClose{top:8px;right:8px;}
|
16 |
+
#fv_player_boxLoadingOverlay, #fv_player_boxLoadingGraphic{position:absolute; top:0; left:0; width:100%;}
|
17 |
+
#fv_player_boxPrevious, #fv_player_boxNext, #fv_player_boxClose, #fv_player_boxSlideshow{cursor:pointer;}
|
18 |
+
|
19 |
+
/*
|
20 |
+
ColorBox example user style
|
21 |
+
The following rules are ordered and tabbed in a way that represents the
|
22 |
+
order/nesting of the generated HTML, so that the structure easier to understand.
|
23 |
+
*/
|
24 |
+
#fv_player_boxOverlay{background:#111;}
|
25 |
+
|
26 |
+
#colorBox{}
|
27 |
+
#fv_player_boxContent{background:#fff; padding: 5px;background:url(loading.gif) 50% 50% no-repeat #fff; }
|
28 |
+
#fv_player_boxLoadedContent{margin-top:35px;}
|
29 |
+
#fv_player_boxTitle{position:absolute; top:0px; left:0; padding: 8px 0 8px 18.5%; width:100%; color:#9D1A28; font-size: 14px;}
|
30 |
+
#fv_player_boxCurrent{position:absolute; bottom:0px; left:100px; color:#999;}
|
31 |
+
#fv_player_boxSlideshow{position:absolute; bottom:0px; right:42px; color:#444;}
|
32 |
+
#fv_player_boxPrevious{position:absolute; bottom:0px; left:0; color:#444;}
|
33 |
+
#fv_player_boxNext{position:absolute; bottom:0px; left:63px; color:#444;}
|
34 |
+
/*#fv_player_boxLoadingOverlay{ text-align: center; background:url(loading.gif) 5px 5px no-repeat #fff;}*/
|
35 |
+
#fv_player_boxClose{position:absolute; top:2px; right:2px; display:block; color:#444; height: 16px; width: 16px; overflow: hidden; text-indent: 25px; background: url("img/uploader-icons.png") -98px 0 no-repeat transparent; border: 0; }
|
36 |
+
#fv_player_boxClose:hover { background-position: -98px 0; }
|
37 |
+
|
38 |
+
/* Add video button */
|
39 |
+
@media only screen and (max-width: 782px) {.wp-media-buttons .fv-wordpress-flowplayer-button span{min-width:24px;display:inline-block;min-height:18px;background-size:24px auto;} }
|
40 |
+
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {.wp-media-buttons .fv-wordpress-flowplayer-button span{background:url('../images/icon@x2.png') no-repeat center center;min-width:32px;background-size:25px auto;} }
|
|
css/flowplayer.css
CHANGED
@@ -365,7 +365,7 @@
|
|
365 |
bottom: 0;
|
366 |
left: 0;
|
367 |
right: 0;
|
368 |
-
height: 100
|
369 |
width: 100%; }
|
370 |
.flowplayer video.fp-engine:not(.native-subtitles)::-webkit-media-controls {
|
371 |
display: none !important; }
|
@@ -1152,14 +1152,6 @@
|
|
1152 |
left: 50%;
|
1153 |
top: 50%;
|
1154 |
}
|
1155 |
-
.fvp-share-bar .fvp-sharing .sharing-google {
|
1156 |
-
background-color: #dd4b39;
|
1157 |
-
}
|
1158 |
-
.fvp-share-bar .fvp-sharing .sharing-google svg{
|
1159 |
-
margin: -9px 0 0 -9px;
|
1160 |
-
width: 18px;
|
1161 |
-
height: 18px;
|
1162 |
-
}
|
1163 |
.fvp-share-bar .fvp-sharing .sharing-facebook {
|
1164 |
background-color: #3B5998;
|
1165 |
}
|
@@ -1268,7 +1260,9 @@
|
|
1268 |
.fp-playlist-external a:hover h4,.fp-playlist-external a.fvp-video-thumb-no-splash h4,#dashboard-widgets .flowplayer-wrapper a:hover h4,.fp-playlist-external a.is-active:hover h4, .fp-playlist-external a:hover .dur {opacity:1;color:#fff}
|
1269 |
.fp-playlist-horizontal a.is-active {-webkit-transition:all .3s;-moz-transition:all .3s;transition:all .3s}
|
1270 |
.is-touch + .fp-playlist-horizontal a h4 {opacity:1;background-color:transparent;text-shadow:0 0 12px #000;top:20%;bottom:20%;font-family:"myriad pro",Helvetica,Arial,sans-serif !important}
|
|
|
1271 |
.is-touch + .fp-playlist-horizontal a h4 span {background-color:rgba(0,0,0,.3)}
|
|
|
1272 |
.fp-playlist-horizontal.is-wide a,.entry-content .fp-playlist-horizontal.is-wide a {width: 20%}
|
1273 |
.fp-playlist-horizontal.is-wide a:nth-child(3n+1) div:before {display: block}
|
1274 |
.fp-playlist-horizontal.is-wide a:nth-child(5n+1) div:before {display: none}
|
365 |
bottom: 0;
|
366 |
left: 0;
|
367 |
right: 0;
|
368 |
+
height: 100% !important;
|
369 |
width: 100%; }
|
370 |
.flowplayer video.fp-engine:not(.native-subtitles)::-webkit-media-controls {
|
371 |
display: none !important; }
|
1152 |
left: 50%;
|
1153 |
top: 50%;
|
1154 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1155 |
.fvp-share-bar .fvp-sharing .sharing-facebook {
|
1156 |
background-color: #3B5998;
|
1157 |
}
|
1260 |
.fp-playlist-external a:hover h4,.fp-playlist-external a.fvp-video-thumb-no-splash h4,#dashboard-widgets .flowplayer-wrapper a:hover h4,.fp-playlist-external a.is-active:hover h4, .fp-playlist-external a:hover .dur {opacity:1;color:#fff}
|
1261 |
.fp-playlist-horizontal a.is-active {-webkit-transition:all .3s;-moz-transition:all .3s;transition:all .3s}
|
1262 |
.is-touch + .fp-playlist-horizontal a h4 {opacity:1;background-color:transparent;text-shadow:0 0 12px #000;top:20%;bottom:20%;font-family:"myriad pro",Helvetica,Arial,sans-serif !important}
|
1263 |
+
.is-touch + .fp-playlist-horizontal.is-audio a h4 {text-shadow:none}
|
1264 |
.is-touch + .fp-playlist-horizontal a h4 span {background-color:rgba(0,0,0,.3)}
|
1265 |
+
.is-touch + .fp-playlist-horizontal.is-audio a h4 span {background-color:transparent}
|
1266 |
.fp-playlist-horizontal.is-wide a,.entry-content .fp-playlist-horizontal.is-wide a {width: 20%}
|
1267 |
.fp-playlist-horizontal.is-wide a:nth-child(3n+1) div:before {display: block}
|
1268 |
.fp-playlist-horizontal.is-wide a:nth-child(5n+1) div:before {display: none}
|
css/shortcode-editor.css
CHANGED
@@ -1,161 +1,166 @@
|
|
1 |
-
#fv_player_boxLoadedContent{ background-color:white; }
|
2 |
-
#fv-player-shortcode-editor { background-color: white; }
|
3 |
-
.fv-wp-flowplayer-notice { background-color: #FFFFE0; border-color: #E6DB55; margin: 5px 0 15px; padding: 0 0.6em; border-radius: 3px 3px 3px 3px; border-style: solid; border-width: 1px; }
|
4 |
-
.fv-wp-flowplayer-notice.fv-wp-flowplayer-note { background-color: #F8F8F8; border-color: #E0E0E0; }
|
5 |
-
.fv-wp-flowplayer-notice p { font-family: sans-serif; font-size: 12px; margin: 0.5em 0; padding: 2px; }
|
6 |
-
.fv_wp_flowplayer_playlist_remove { display: none; }
|
7 |
-
.fv-player-tabs-header { padding:6px 0 12px; }
|
8 |
-
#fv-flowplayer-playlist table { border-bottom: 1px #eee solid; }
|
9 |
-
#fv-player-shortcode-editor table input[type=text], #fv-flowplayer-playlist table input[type=text].with-button { width: 93%; }
|
10 |
-
#fv-player-shortcode-editor table input[type=text].half-field { width:
|
11 |
-
#fv-player-shortcode-editor
|
12 |
-
#fv-player-shortcode-editor table input.
|
13 |
-
#fv-player-shortcode-editor table input.fv_wp_flowplayer_field_subtitles
|
14 |
-
#fv-player-shortcode-editor table
|
15 |
-
#fv-
|
16 |
-
#fv-flowplayer-playlist table tr
|
17 |
-
#fv-flowplayer-playlist table tr#
|
18 |
-
#fv-flowplayer-playlist table
|
19 |
-
#fv-flowplayer-playlist table .
|
20 |
-
#fv-flowplayer-playlist table .
|
21 |
-
|
22 |
-
|
23 |
-
#fv-flowplayer-playlist table:first-child .
|
24 |
-
#fv-flowplayer-playlist table:first-child
|
25 |
-
#fv-flowplayer-playlist table:first-child tr#
|
26 |
-
#fv-flowplayer-playlist table:first-child
|
27 |
-
#fv-flowplayer-playlist table:first-child .
|
28 |
-
|
29 |
-
/*#
|
30 |
-
|
31 |
-
|
32 |
-
#fv-player-shortcode-editor-
|
33 |
-
#fv-player-shortcode-editor
|
34 |
-
.fv-player-
|
35 |
-
|
36 |
-
|
37 |
-
#
|
38 |
-
#
|
39 |
-
|
40 |
-
.fv-player-
|
41 |
-
.fv-player-
|
42 |
-
#
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
#fv-player-
|
48 |
-
.fv-player-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
.
|
54 |
-
|
55 |
-
|
56 |
-
.is-
|
57 |
-
.is-playlist
|
58 |
-
|
59 |
-
|
60 |
-
.
|
61 |
-
.
|
62 |
-
.
|
63 |
-
|
64 |
-
.
|
65 |
-
.fv-player-tab-playlist
|
66 |
-
.fv-player-tab-playlist .
|
67 |
-
|
68 |
-
|
69 |
-
.
|
70 |
-
.
|
71 |
-
.fv-player-tab-playlist
|
72 |
-
|
73 |
-
.
|
74 |
-
.
|
75 |
-
.
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
#fv-player-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
#fv-player-shortcode-editor-
|
86 |
-
#fv-player-shortcode-editor-
|
87 |
-
|
88 |
-
|
89 |
-
#fv-player-shortcode-editor-preview
|
90 |
-
#fv-player-shortcode-editor-preview.
|
91 |
-
#fv-player-shortcode-editor-preview.preview-
|
92 |
-
#fv-player-shortcode-editor-preview-
|
93 |
-
#fv-player-shortcode-editor-preview-
|
94 |
-
|
95 |
-
.
|
96 |
-
#fv-player-shortcode-editor-preview-new-tab
|
97 |
-
#fv-player-shortcode-editor-preview-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
.
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
.fv-player-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
.
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
}
|
151 |
-
#fv-wordpress-flowplayer-popup table
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
#
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
}
|
161 |
-
|
|
|
|
|
|
|
|
|
|
1 |
+
#fv_player_boxLoadedContent{ background-color:white; }
|
2 |
+
#fv-player-shortcode-editor { background-color: white; }
|
3 |
+
.fv-wp-flowplayer-notice { background-color: #FFFFE0; border-color: #E6DB55; margin: 5px 0 15px; padding: 0 0.6em; border-radius: 3px 3px 3px 3px; border-style: solid; border-width: 1px; }
|
4 |
+
.fv-wp-flowplayer-notice.fv-wp-flowplayer-note { background-color: #F8F8F8; border-color: #E0E0E0; }
|
5 |
+
.fv-wp-flowplayer-notice p { font-family: sans-serif; font-size: 12px; margin: 0.5em 0; padding: 2px; }
|
6 |
+
.fv_wp_flowplayer_playlist_remove { display: none; }
|
7 |
+
.fv-player-tabs-header { padding:6px 0 12px; }
|
8 |
+
#fv-flowplayer-playlist table { border-bottom: 1px #eee solid; }
|
9 |
+
#fv-player-shortcode-editor table input[type=text], #fv-flowplayer-playlist table input[type=text].with-button { width: 93%; }
|
10 |
+
#fv-player-shortcode-editor table input[type=text].half-field { width: 37%; }
|
11 |
+
#fv-player-shortcode-editor .fv-player-tab-video-files table input.with-button { width: 75%; }
|
12 |
+
#fv-player-shortcode-editor .fv-player-tab-subtitles table input.with-button { width: 70%; }
|
13 |
+
#fv-player-shortcode-editor table input.fv_wp_flowplayer_field_subtitles { width: 82%; }
|
14 |
+
#fv-player-shortcode-editor table input.fv_wp_flowplayer_field_subtitles.with-button { width: 59%; }
|
15 |
+
#fv-player-shortcode-editor table select.fv_wp_flowplayer_field_subtitles_lang { width: 10%;float:left; margin: 1px 2px; height: 27px }
|
16 |
+
#fv-flowplayer-playlist table tr.video-size { display: none; }
|
17 |
+
#fv-flowplayer-playlist table tr#fv_wp_flowplayer_add_format_wrapper { display: none; }
|
18 |
+
#fv-flowplayer-playlist table tr#fv_wp_flowplayer_file_info { display: none; }
|
19 |
+
#fv-flowplayer-playlist table .fv_wp_flowplayer_field_rtmp { visibility: hidden; }
|
20 |
+
#fv-flowplayer-playlist table .fv_wp_flowplayer_field_rtmp_wrapper th { visibility: hidden; }
|
21 |
+
#fv-flowplayer-playlist table .hint { display: none; }
|
22 |
+
/*#fv-flowplayer-playlist table .button { display: none; }*/
|
23 |
+
#fv-flowplayer-playlist table:first-child tr.video-size { display: table-row; }
|
24 |
+
#fv-flowplayer-playlist table:first-child .hint { display: inline; }
|
25 |
+
#fv-flowplayer-playlist table:first-child tr#fv_wp_flowplayer_add_format_wrapper { display: table-row; }
|
26 |
+
#fv-flowplayer-playlist table:first-child tr#fv_wp_flowplayer_file_info { display: none; }
|
27 |
+
#fv-flowplayer-playlist table:first-child .fv_wp_flowplayer_field_rtmp { visibility: visible; }
|
28 |
+
#fv-flowplayer-playlist table:first-child .fv_wp_flowplayer_field_rtmp_wrapper th { visibility: visible; }
|
29 |
+
/*#fv-flowplayer-playlist table:first-child .button { display: inline-block; }*/
|
30 |
+
/*#colorbox, #cboxOverlay, #cboxWrapper{ z-index: 100000; }*/
|
31 |
+
|
32 |
+
#fv-player-shortcode-editor .fv-player-tab-video-files table .button { width: 22% }
|
33 |
+
#fv-player-shortcode-editor .fv-player-tab-subtitles table .button { width: 26% }
|
34 |
+
#fv-player-shortcode-editor .fv-player-tabs .submit-button-wrapper .button { width: auto; }
|
35 |
+
|
36 |
+
#fv-player-shortcode-editor-editor{ top:0; }
|
37 |
+
#fv-player-shortcode-editor-editor > table{ width:100%; }
|
38 |
+
#fv-player-shortcode-editor td{ vertical-align: top; }
|
39 |
+
.fv-player-tab table{ margin-bottom: 10px; }
|
40 |
+
.fv-player-tabs-header .nav-tab-wrapper{ margin:0; }
|
41 |
+
.fv_player_actions_end-toggle,.fv_player_interface_hide,.fv-player-playlist-item-title{ display:none; }
|
42 |
+
#fv_player_boxTitle{ display:none!important; }
|
43 |
+
#fv_player_boxLoadedContent{ margin-top:0; }
|
44 |
+
|
45 |
+
.fv-player-shortcode-editor-left{ width:40%; }
|
46 |
+
.fv-player-shortcode-editor-right{ width:60%; }
|
47 |
+
#fv-player-shortcode-editor #fv_wp_flowplayer_field_player_name { width: 88% }
|
48 |
+
.fv-player-tab{position:relative;}
|
49 |
+
.fv-player-tabs #fv-player-list-thumb-toggle{ position:absolute;right:10px;text-align:right;top:9px; }
|
50 |
+
#fv-player-list-thumb-toggle a{ text-decoration:none;margin-left:6px;color:#b4b9be; }
|
51 |
+
#fv-player-list-thumb-toggle a.active{ color:#0073aa; }
|
52 |
+
#fv-player-list-thumb-toggle a.disabled{ cursor:default; }
|
53 |
+
.fv-player-playlist-item-title, .fv-player-playlist-item-title:hover{ margin:0;border:0;background:transparent; }
|
54 |
+
|
55 |
+
/*Playlist view*/
|
56 |
+
.is-playlist .fv-player-playlist-item-title{ display:block;padding:0 10px 12px; }
|
57 |
+
.is-playlist .fv_player_field_insert-button{ display:none; }
|
58 |
+
.is-playlist-active .playlist_edit{ display:none; }
|
59 |
+
|
60 |
+
.is-playlist .hide-if-playlist{display:none;}
|
61 |
+
.is-singular .hide-if-singular{display:none;}
|
62 |
+
.is-playlist-active .hide-if-playlist-active{display:none;}
|
63 |
+
|
64 |
+
.playlist_edit{ display:block; }
|
65 |
+
.fv-player-tab-playlist tr:not(:hover) .fvp_item_remove{visibility: hidden;}
|
66 |
+
.fv-player-tab-playlist tr:hover .fvp_item_remove{visibility: visible;color: #a00;}
|
67 |
+
.fv-player-tab-playlist a{cursor:pointer;}
|
68 |
+
|
69 |
+
.fv-player-tab-playlist .fv-player-playlist-item{ border-spacing: 0 2px; }
|
70 |
+
.fv-player-tab-playlist tbody td{ padding:3px 5px;height:50px;cursor:pointer; }
|
71 |
+
.fv-player-tab-playlist .fv-player-playlist-item tbody td:first-child{cursor:n-resize;}
|
72 |
+
|
73 |
+
.fvp_item_video-side-by-side{display:inline-block;vertical-align:top;float: left;margin-right: 1%;}
|
74 |
+
.fvp_item_video-filename {word-wrap: break-word;display: inline-block; max-width: 180px;}
|
75 |
+
.hide-thumbnails .fvp_item_video-filename {max-width: 100%;}
|
76 |
+
.fv-player-tab-playlist > table > thead > tr > th:nth-child(1),.fv-player-tab-playlist > table > tbody > tr > td:nth-child(1),
|
77 |
+
.fv-player-tab-playlist > table > thead > tr > th:nth-child(2),.fv-player-tab-playlist > table > tbody > tr > td:nth-child(2){ width:300px; }
|
78 |
+
.fv-player-tab-playlist > table > thead{ display:block; }
|
79 |
+
.fv-player-tab-playlist.hide-thumbnails .fvp_item_video-thumbnail{ display:none; }
|
80 |
+
.fv-player-tab-playlist > table > tbody{ display:block;overflow:auto;max-height:calc(100vh - 270px); }
|
81 |
+
#fv-player-list-thumb-toggle > .active{ font-weight:bold; }
|
82 |
+
#fv-player-list-thumb-toggle > a{ box-shadow:none; }
|
83 |
+
#fv-player-shortcode-editor td > input[type="checkbox"]{margin-top:-4px}
|
84 |
+
|
85 |
+
#fv-player-shortcode-editor-loading-spinner {background-image: url(../../../../wp-includes/images/wpspin-2x.gif); background-color: white; background-repeat: no-repeat; background-position: center; position:absolute; z-index: 2; height: 100%; width: 100%;}
|
86 |
+
#fv-player-shortcode-editor-loading-spinner.loaded {background: white}
|
87 |
+
|
88 |
+
/*Preview iframe*/
|
89 |
+
#fv-player-shortcode-editor-preview{ width: 460px;position:relative; }
|
90 |
+
#fv-player-shortcode-editor-preview div.fv-player-shortcode-editor-helper {display:none;}
|
91 |
+
#fv-player-shortcode-editor-preview.preview-loading #fv-player-shortcode-editor-preview-spinner,
|
92 |
+
#fv-player-shortcode-editor-preview.preview-no #fv-player-shortcode-editor-preview-no,
|
93 |
+
#fv-player-shortcode-editor-preview.preview-new-tab #fv-player-shortcode-editor-preview-new-tab{display:block;}
|
94 |
+
#fv-player-shortcode-editor-preview.preview-no #fv-player-shortcode-editor-preview-target,
|
95 |
+
#fv-player-shortcode-editor-preview.preview-new-tab #fv-player-shortcode-editor-preview-target{display:none}
|
96 |
+
#fv-player-shortcode-editor-preview.preview-new-tab #fv-player-shortcode-editor-preview-iframe-refresh{display:none!important}
|
97 |
+
#fv-player-shortcode-editor-preview-spinner, .fv-player-shortcode-editor-small-spinner {background-image: url(../../../../wp-includes/images/wpspin-2x.gif); background-color: white; background-repeat: no-repeat; background-position: center}
|
98 |
+
#fv-player-shortcode-editor-preview-spinner{position:absolute; z-index: 2; height: 200px; width: 100%;}
|
99 |
+
.fv-player-shortcode-editor-small-spinner {z-index: 2; background-size: 20px; height: 20px; width: 20px; display: inline-block}
|
100 |
+
.fvp_item_video-thumbnail img{max-width: 95px;max-height: 95px;}
|
101 |
+
#fv-player-shortcode-editor-preview-new-tab, #fv-player-shortcode-editor-preview-no{background-image: url(../images/icon-256x256.png);width: 256px;height: 290px;background-repeat: no-repeat;line-height:512px;overflow:hidden;margin:0 auto;text-align: center;}
|
102 |
+
#fv-player-shortcode-editor-preview-new-tab a {margin-top:256px;}
|
103 |
+
|
104 |
+
#fv-player-shortcode-editor-preview div.notice { display: block }
|
105 |
+
|
106 |
+
.first-item-only {
|
107 |
+
display: none;
|
108 |
+
}
|
109 |
+
.fv-player-playlist-item[data-index="0"] .first-item-only {
|
110 |
+
display: table-row;
|
111 |
+
}
|
112 |
+
.fv-player-playlist-item[data-index="0"] .first-item-only.fv_player_interface_hide {
|
113 |
+
display: none;
|
114 |
+
}
|
115 |
+
|
116 |
+
.fv-player-tabs th { width: 21%; text-align: right; }
|
117 |
+
.fv-player-tabs .fv-player-tab-playlist th { text-align: left; }
|
118 |
+
|
119 |
+
|
120 |
+
|
121 |
+
/* moved in from main plugin css */
|
122 |
+
.add_media span.wp-media-buttons-icon {
|
123 |
+
background: url("img/media-button.png") no-repeat scroll left top;
|
124 |
+
display: inline-block;
|
125 |
+
height: 16px;
|
126 |
+
margin: 0 2px;
|
127 |
+
vertical-align: text-top;
|
128 |
+
width: 16px;
|
129 |
+
}
|
130 |
+
#cboxWrapper a {
|
131 |
+
text-decoration: none;
|
132 |
+
}
|
133 |
+
a #add-format, a #add-rtmp {
|
134 |
+
background: #333;
|
135 |
+
border-radius: 2px;
|
136 |
+
color: #fff;
|
137 |
+
display: inline-block;
|
138 |
+
font-size: 16px;
|
139 |
+
font-weight: normal;
|
140 |
+
height: 18px;
|
141 |
+
line-height: 1rem;
|
142 |
+
margin: 0 5px 0 0;
|
143 |
+
text-align: center;
|
144 |
+
width: 18px;
|
145 |
+
padding: 0;
|
146 |
+
text-decoration: none;
|
147 |
+
}
|
148 |
+
#fv-wordpress-flowplayer-popup table {
|
149 |
+
width: 100%;
|
150 |
+
}
|
151 |
+
#fv-wordpress-flowplayer-popup table th {
|
152 |
+
text-align: right;
|
153 |
+
width: 18%;
|
154 |
+
padding: 4px 2px;
|
155 |
+
}
|
156 |
+
#fv-wordpress-flowplayer-popup table td {
|
157 |
+
padding: 4px 2px;
|
158 |
+
}
|
159 |
+
|
160 |
+
#fv_player_copy_to_clipboard, #fv_player_import_data {width: 80%}
|
161 |
+
#fv_player_copied_to_clipboard_message, #fv_player_imported_message {margin: 22px auto 0 auto; visibility: hidden; width: 20%; text-align: center}
|
162 |
+
|
163 |
+
#fv-player-shortcode-editor-editor ::placeholder {
|
164 |
+
opacity:.5;
|
165 |
+
}
|
166 |
+
|
flowplayer.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
Plugin Name: FV Player
|
4 |
Plugin URI: http://foliovision.com/wordpress/plugins/fv-wordpress-flowplayer
|
5 |
Description: Formerly FV WordPress Flowplayer. Supports MP4, HLS, MPEG-DASH, WebM and OGV. Advanced features such as overlay ads or popups. Uses Flowplayer 7.2.7.
|
6 |
-
Version: 7.3.
|
7 |
Author URI: http://foliovision.com/
|
8 |
License: GPL-3.0
|
9 |
License URI: http://www.gnu.org/licenses/gpl-3.0.txt
|
@@ -27,7 +27,7 @@ License URI: http://www.gnu.org/licenses/gpl-3.0.txt
|
|
27 |
*/
|
28 |
|
29 |
global $fv_wp_flowplayer_ver;
|
30 |
-
$fv_wp_flowplayer_ver = '7.3.
|
31 |
$fv_wp_flowplayer_core_ver = '7.2.7.1';
|
32 |
|
33 |
include_once( dirname( __FILE__ ) . '/includes/extra-functions.php' );
|
@@ -87,8 +87,8 @@ if( is_admin() ) {
|
|
87 |
}
|
88 |
include_once(dirname( __FILE__ ) . '/models/system-info.php');
|
89 |
register_deactivation_hook( __FILE__, 'flowplayer_deactivate' );
|
|
|
90 |
|
91 |
-
}
|
92 |
-
|
93 |
include_once( dirname( __FILE__ ) . '/controller/frontend.php' );
|
94 |
include_once( dirname( __FILE__ ) . '/controller/shortcodes.php');
|
|
3 |
Plugin Name: FV Player
|
4 |
Plugin URI: http://foliovision.com/wordpress/plugins/fv-wordpress-flowplayer
|
5 |
Description: Formerly FV WordPress Flowplayer. Supports MP4, HLS, MPEG-DASH, WebM and OGV. Advanced features such as overlay ads or popups. Uses Flowplayer 7.2.7.
|
6 |
+
Version: 7.3.6.727
|
7 |
Author URI: http://foliovision.com/
|
8 |
License: GPL-3.0
|
9 |
License URI: http://www.gnu.org/licenses/gpl-3.0.txt
|
27 |
*/
|
28 |
|
29 |
global $fv_wp_flowplayer_ver;
|
30 |
+
$fv_wp_flowplayer_ver = '7.3.6.727';
|
31 |
$fv_wp_flowplayer_core_ver = '7.2.7.1';
|
32 |
|
33 |
include_once( dirname( __FILE__ ) . '/includes/extra-functions.php' );
|
87 |
}
|
88 |
include_once(dirname( __FILE__ ) . '/models/system-info.php');
|
89 |
register_deactivation_hook( __FILE__, 'flowplayer_deactivate' );
|
90 |
+
}
|
91 |
|
|
|
|
|
92 |
include_once( dirname( __FILE__ ) . '/controller/frontend.php' );
|
93 |
include_once( dirname( __FILE__ ) . '/controller/shortcodes.php');
|
94 |
+
include_once( dirname( __FILE__ ) . '/models/gutenberg.php' );
|
flowplayer/fv-flowplayer.min.js
CHANGED
@@ -688,7 +688,10 @@ function fv_player_playlist_active(playlist,item) {
|
|
688 |
}
|
689 |
|
690 |
// scroll to the currently playing video if playlist type is vertical or horizontal
|
691 |
-
if (
|
|
|
|
|
|
|
692 |
var $el = (scroll_parent ? $playlist.parent() : $playlist);
|
693 |
$el.animate({
|
694 |
scrollTop: $el.scrollTop() + ($item.position().top - $el.position().top)
|
@@ -794,7 +797,6 @@ flowplayer( function(api,root) {
|
|
794 |
|
795 |
jQuery('.fvp-share-bar .sharing-facebook',root).append('<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="#fff"><title>Facebook</title><path d="M11.9 5.2l-2.6 0 0-1.6c0-0.7 0.3-0.7 0.7-0.7 0.3 0 1.6 0 1.6 0l0-2.9 -2.3 0c-2.6 0-3.3 2-3.3 3.3l0 2 -1.6 0 0 2.9 1.6 0c0 3.6 0 7.8 0 7.8l3.3 0c0 0 0-4.2 0-7.8l2.3 0 0.3-2.9Z"/></svg>');
|
796 |
jQuery('.fvp-share-bar .sharing-twitter',root).append('<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="#fff"><title>Twitter</title><path d="M16 3.1c-0.6 0.3-1.2 0.4-1.9 0.5 0.7-0.4 1.2-1 1.4-1.8 -0.6 0.4-1.3 0.6-2.1 0.8 -0.6-0.6-1.4-1-2.4-1 -2 0.1-3.2 1.6-3.2 4 -2.7-0.1-5.1-1.4-6.7-3.4 -0.9 1.4 0.2 3.8 1 4.4 -0.5 0-1-0.1-1.5-0.4l0 0.1c0 1.6 1.1 2.9 2.6 3.2 -0.7 0.2-1.3 0.1-1.5 0.1 0.4 1.3 1.6 2.2 3 2.3 -1.6 1.7-4.6 1.4-4.8 1.3 1.4 0.9 3.2 1.4 5 1.4 6 0 9.3-5 9.3-9.3 0-0.1 0-0.3 0-0.4 0.6-0.4 1.2-1 1.6-1.7Z"/></svg>');
|
797 |
-
jQuery('.fvp-share-bar .sharing-google',root).append('<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="#fff"><title>Google+</title><path d="M5.1 7l0 2c0 0 2 0 2.8 0 -0.4 1.3-1.1 2-2.8 2 -1.7 0-3-1.3-3-3 0-1.7 1.3-3 3-3 0.9 0 1.5 0.3 2 0.7 0.4-0.4 0.4-0.5 1.5-1.5 -0.9-0.8-2.1-1.3-3.4-1.3 -0.8 0-1.5 0.2-2.2 0.5 -1.7 0.8-2.9 2.6-2.9 4.6 0 2.8 2.3 5.1 5.1 5.1 4.2 0 5.2-3.7 4.9-6.1 -1 0-4.9 0-4.9 0l0 0Zm9.2 0.1l0-1.8 -1.3 0 0 1.8 -1.8 0 0 1.3 1.8 0 0 1.8 1.3 0 0-1.8 1.8 0 0-1.3 -1.8 0Z"/></svg>');
|
798 |
jQuery('.fvp-share-bar .sharing-email',root).append('<svg xmlns="http://www.w3.org/2000/svg" height="16" viewBox="0 0 16 16" width="16" fill="#fff"><title>Email</title><path d="M8 10c0 0 0 0-1 0L0 6v7c0 1 0 1 1 1h14c1 0 1 0 1-1V6L9 10C9 10 8 10 8 10zM15 2H1C0 2 0 2 0 3v1l8 4 8-4V3C16 2 16 2 15 2z"/></svg>');
|
799 |
|
800 |
jQuery('.fp-header',root).prepend( jQuery('.fvp-share-bar',root) );
|
688 |
}
|
689 |
|
690 |
// scroll to the currently playing video if playlist type is vertical or horizontal
|
691 |
+
if ( (
|
692 |
+
$playlist.hasClass('fp-playlist-vertical') ||
|
693 |
+
$playlist.hasClass('fp-playlist-horizontal') && $playlist.hasClass('is-audio') // this combination is also a vertical playlist basically
|
694 |
+
) && !fullyVisibleY($item.get(0)) ) {
|
695 |
var $el = (scroll_parent ? $playlist.parent() : $playlist);
|
696 |
$el.animate({
|
697 |
scrollTop: $el.scrollTop() + ($item.position().top - $el.position().top)
|
797 |
|
798 |
jQuery('.fvp-share-bar .sharing-facebook',root).append('<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="#fff"><title>Facebook</title><path d="M11.9 5.2l-2.6 0 0-1.6c0-0.7 0.3-0.7 0.7-0.7 0.3 0 1.6 0 1.6 0l0-2.9 -2.3 0c-2.6 0-3.3 2-3.3 3.3l0 2 -1.6 0 0 2.9 1.6 0c0 3.6 0 7.8 0 7.8l3.3 0c0 0 0-4.2 0-7.8l2.3 0 0.3-2.9Z"/></svg>');
|
799 |
jQuery('.fvp-share-bar .sharing-twitter',root).append('<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="#fff"><title>Twitter</title><path d="M16 3.1c-0.6 0.3-1.2 0.4-1.9 0.5 0.7-0.4 1.2-1 1.4-1.8 -0.6 0.4-1.3 0.6-2.1 0.8 -0.6-0.6-1.4-1-2.4-1 -2 0.1-3.2 1.6-3.2 4 -2.7-0.1-5.1-1.4-6.7-3.4 -0.9 1.4 0.2 3.8 1 4.4 -0.5 0-1-0.1-1.5-0.4l0 0.1c0 1.6 1.1 2.9 2.6 3.2 -0.7 0.2-1.3 0.1-1.5 0.1 0.4 1.3 1.6 2.2 3 2.3 -1.6 1.7-4.6 1.4-4.8 1.3 1.4 0.9 3.2 1.4 5 1.4 6 0 9.3-5 9.3-9.3 0-0.1 0-0.3 0-0.4 0.6-0.4 1.2-1 1.6-1.7Z"/></svg>');
|
|
|
800 |
jQuery('.fvp-share-bar .sharing-email',root).append('<svg xmlns="http://www.w3.org/2000/svg" height="16" viewBox="0 0 16 16" width="16" fill="#fff"><title>Email</title><path d="M8 10c0 0 0 0-1 0L0 6v7c0 1 0 1 1 1h14c1 0 1 0 1-1V6L9 10C9 10 8 10 8 10zM15 2H1C0 2 0 2 0 3v1l8 4 8-4V3C16 2 16 2 15 2z"/></svg>');
|
801 |
|
802 |
jQuery('.fp-header',root).prepend( jQuery('.fvp-share-bar',root) );
|
js/gutenberg.js
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
( function() {
|
2 |
+
var el = wp.element.createElement;
|
3 |
+
|
4 |
+
wp.blocks.registerBlockType( 'fv-player-gutenberg/basic', {
|
5 |
+
title: 'FV Player',
|
6 |
+
|
7 |
+
icon: 'controls-play',
|
8 |
+
|
9 |
+
category: 'layout',
|
10 |
+
|
11 |
+
attributes: {
|
12 |
+
content: {
|
13 |
+
type: 'string',
|
14 |
+
source: 'text'
|
15 |
+
}
|
16 |
+
},
|
17 |
+
|
18 |
+
edit: function( props ) {
|
19 |
+
var content = props.attributes.content;
|
20 |
+
function onChangeContent( newContent ) {
|
21 |
+
props.setAttributes( { content: newContent } );
|
22 |
+
}
|
23 |
+
|
24 |
+
return el('div', {
|
25 |
+
className: 'fv-player-gutenberg'
|
26 |
+
}, el(
|
27 |
+
'a',{
|
28 |
+
'class': 'button fv-wordpress-flowplayer-button'
|
29 |
+
},
|
30 |
+
el(
|
31 |
+
'span'
|
32 |
+
),
|
33 |
+
'FV Player'
|
34 |
+
),
|
35 |
+
el(
|
36 |
+
wp.components.TextareaControl,
|
37 |
+
{
|
38 |
+
'class': 'components-textarea-control__input fv-player-editor-field',
|
39 |
+
onChange: onChangeContent,
|
40 |
+
value: content,
|
41 |
+
}
|
42 |
+
)
|
43 |
+
);
|
44 |
+
},
|
45 |
+
|
46 |
+
save: function( props ) {
|
47 |
+
return el( wp.element.RawHTML,
|
48 |
+
null,
|
49 |
+
props.attributes.content
|
50 |
+
);
|
51 |
+
},
|
52 |
+
} );
|
53 |
+
}() );
|
js/shortcode-editor.js
CHANGED
@@ -21,7 +21,7 @@ var fv_player_shortcode_preview_unsupported = false;
|
|
21 |
var fv_player_editor_matcher = {
|
22 |
default: {
|
23 |
// matches URL of the video
|
24 |
-
matcher: /\.mp4$/i,
|
25 |
// AJAX will return these fields which can be auto-updated via JS
|
26 |
update_fields: ['duration', 'last_video_meta_check'],
|
27 |
}
|
@@ -544,7 +544,7 @@ function fv_wp_flowplayer_init() {
|
|
544 |
|
545 |
jQuery('#player_id_top_text').html('');
|
546 |
|
547 |
-
var field = jQuery(fv_player_editor_button_clicked).parents('.fv-player-editor-wrapper').find('.fv-player-editor-field');
|
548 |
if( field.length ) {
|
549 |
fv_wp_flowplayer_content = jQuery(field).val();
|
550 |
|
@@ -614,7 +614,15 @@ function fv_wp_flowplayer_init() {
|
|
614 |
function fv_wp_flowplayer_insert( shortcode ) {
|
615 |
if (typeof(jQuery(fv_player_editor_button_clicked).data('player_id')) == 'undefined' && typeof(jQuery(fv_player_editor_button_clicked).data('add_new')) == 'undefined') {
|
616 |
var field = jQuery(fv_player_editor_button_clicked).parents('.fv-player-editor-wrapper').find('.fv-player-editor-field');
|
617 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
618 |
field.val(shortcode);
|
619 |
field.trigger('fv_flowplayer_shortcode_insert', [shortcode]);
|
620 |
|
@@ -826,6 +834,8 @@ function fv_flowplayer_editor_item_show( new_index ) {
|
|
826 |
jQuery('.fv-player-tabs-header .nav-tab').attr('style',false);
|
827 |
|
828 |
var $ = jQuery;
|
|
|
|
|
829 |
|
830 |
$('a[data-tab=fv-player-tab-video-files]').click();
|
831 |
|
@@ -990,7 +1000,7 @@ function fv_wp_flowplayer_edit() {
|
|
990 |
jQuery("[name=fv_wp_flowplayer_field_splash_text]").each( function() { jQuery(this).val( '' ) } );
|
991 |
jQuery(".fv_player_field_insert-button").attr( 'value', 'Insert' );
|
992 |
|
993 |
-
var field = jQuery(fv_player_editor_button_clicked).parents('.fv-player-editor-wrapper').find('.fv-player-editor-field');
|
994 |
if( field.length || jQuery('#widget-widget_fvplayer-'+FVFP_sWidgetId+'-text').length){
|
995 |
// this is a horrible hack as it adds the hidden marker to the otherwise clean text field value just to make sure the shortcode varible below is parsed properly. But it allows some extra text to be entered into the text widget, so for now - ok
|
996 |
if(fv_wp_flowplayer_content.match(/\[/) ) {
|
@@ -1758,7 +1768,15 @@ function fv_wp_flowplayer_on_close() {
|
|
1758 |
|
1759 |
function fv_wp_flowplayer_set_html( html ) {
|
1760 |
var field = jQuery(fv_player_editor_button_clicked).parents('.fv-player-editor-wrapper').find('.fv-player-editor-field');
|
1761 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1762 |
field.val(html);
|
1763 |
field.trigger('fv_flowplayer_shortcode_insert', [ html ] );
|
1764 |
|
21 |
var fv_player_editor_matcher = {
|
22 |
default: {
|
23 |
// matches URL of the video
|
24 |
+
matcher: /\.(mp4|webm|m3u8)$/i,
|
25 |
// AJAX will return these fields which can be auto-updated via JS
|
26 |
update_fields: ['duration', 'last_video_meta_check'],
|
27 |
}
|
544 |
|
545 |
jQuery('#player_id_top_text').html('');
|
546 |
|
547 |
+
var field = jQuery(fv_player_editor_button_clicked).parents('.fv-player-editor-wrapper, .fv-player-gutenberg').find('.fv-player-editor-field');
|
548 |
if( field.length ) {
|
549 |
fv_wp_flowplayer_content = jQuery(field).val();
|
550 |
|
614 |
function fv_wp_flowplayer_insert( shortcode ) {
|
615 |
if (typeof(jQuery(fv_player_editor_button_clicked).data('player_id')) == 'undefined' && typeof(jQuery(fv_player_editor_button_clicked).data('add_new')) == 'undefined') {
|
616 |
var field = jQuery(fv_player_editor_button_clicked).parents('.fv-player-editor-wrapper').find('.fv-player-editor-field');
|
617 |
+
var gutenberg = jQuery(fv_player_editor_button_clicked).parents('.fv-player-gutenberg').find('.fv-player-editor-field');
|
618 |
+
|
619 |
+
if( gutenberg.length ) {
|
620 |
+
var nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, "value").set;
|
621 |
+
nativeInputValueSetter.call(gutenberg[0], shortcode);
|
622 |
+
var ev2 = new Event('change', { bubbles: true});
|
623 |
+
gutenberg[0].dispatchEvent(ev2,shortcode);
|
624 |
+
|
625 |
+
} else if (field.length) {
|
626 |
field.val(shortcode);
|
627 |
field.trigger('fv_flowplayer_shortcode_insert', [shortcode]);
|
628 |
|
834 |
jQuery('.fv-player-tabs-header .nav-tab').attr('style',false);
|
835 |
|
836 |
var $ = jQuery;
|
837 |
+
|
838 |
+
$(document).trigger('fv_flowplayer_shortcode_item_switch', [ new_index ] );
|
839 |
|
840 |
$('a[data-tab=fv-player-tab-video-files]').click();
|
841 |
|
1000 |
jQuery("[name=fv_wp_flowplayer_field_splash_text]").each( function() { jQuery(this).val( '' ) } );
|
1001 |
jQuery(".fv_player_field_insert-button").attr( 'value', 'Insert' );
|
1002 |
|
1003 |
+
var field = jQuery(fv_player_editor_button_clicked).parents('.fv-player-editor-wrapper, .fv-player-gutenberg').find('.fv-player-editor-field');
|
1004 |
if( field.length || jQuery('#widget-widget_fvplayer-'+FVFP_sWidgetId+'-text').length){
|
1005 |
// this is a horrible hack as it adds the hidden marker to the otherwise clean text field value just to make sure the shortcode varible below is parsed properly. But it allows some extra text to be entered into the text widget, so for now - ok
|
1006 |
if(fv_wp_flowplayer_content.match(/\[/) ) {
|
1768 |
|
1769 |
function fv_wp_flowplayer_set_html( html ) {
|
1770 |
var field = jQuery(fv_player_editor_button_clicked).parents('.fv-player-editor-wrapper').find('.fv-player-editor-field');
|
1771 |
+
var gutenberg = jQuery(fv_player_editor_button_clicked).parents('.fv-player-gutenberg').find('.fv-player-editor-field');
|
1772 |
+
|
1773 |
+
if( gutenberg.length ) {
|
1774 |
+
var nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, "value").set;
|
1775 |
+
nativeInputValueSetter.call(gutenberg[0], html);
|
1776 |
+
var ev2 = new Event('change', { bubbles: true});
|
1777 |
+
gutenberg[0].dispatchEvent(ev2,html);
|
1778 |
+
|
1779 |
+
} else if( field.length ) {
|
1780 |
field.val(html);
|
1781 |
field.trigger('fv_flowplayer_shortcode_insert', [ html ] );
|
1782 |
|
models/checker.php
CHANGED
@@ -136,166 +136,117 @@ class FV_Player_Checker {
|
|
136 |
if( isset($media) ) {
|
137 |
$remotefilename = $media;
|
138 |
$remotefilename_encoded = flowplayer::get_encoded_url($remotefilename);
|
139 |
-
|
140 |
-
if( $fv_fp->is_secure_amazon_s3($remotefilename_encoded) || 1>0 ) { // skip headers check for Amazon S3, as it's slow
|
141 |
-
$headers = false;
|
142 |
-
} else {
|
143 |
-
$headers = wp_remote_head( trim( str_replace(' ', '%20', $remotefilename_encoded ) ), array( 'method' => 'GET', 'redirection' => 3 ) );
|
144 |
-
}
|
145 |
-
|
146 |
$bValidFile = true;
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
154 |
}
|
155 |
-
|
156 |
-
|
|
|
|
|
157 |
}
|
158 |
-
|
159 |
-
|
160 |
-
if( function_exists('is_utf8') && is_utf8($remotefilename) ) {
|
161 |
-
$video_errors[] = '<p><strong>UTF-8 error</strong>: Your file name is using non-latin characters, the file might not play in browsers using Flash for the video!</p>';
|
162 |
-
}
|
163 |
-
|
164 |
-
if ( ! class_exists( 'getID3' ) ) {
|
165 |
-
require( ABSPATH . WPINC . '/ID3/getid3.php' );
|
166 |
-
}
|
167 |
-
$getID3 = new getID3;
|
168 |
-
|
169 |
-
if( !function_exists('curl_init') ) {
|
170 |
-
$video_errors[] = 'cURL for PHP not found, please contact your server administrator.';
|
171 |
-
} else {
|
172 |
-
$message = '<p>Analysis of <a class="bluelink" target="_blank" href="'.esc_attr($remotefilename_encoded).'">'.$remotefilename_encoded.'</a></p>';
|
173 |
-
|
174 |
-
// taken from: http://www.getid3.org/phpBB3/viewtopic.php?f=3&t=1141
|
175 |
-
$upload_dir = wp_upload_dir();
|
176 |
-
$localtempfilename = trailingslashit( $upload_dir['basedir'] ).'fv_flowlayer_tmp_'.md5(rand(1,999)).'_'.basename( substr($remotefilename_encoded,0,32) );
|
177 |
|
178 |
-
$
|
179 |
-
|
180 |
-
if( $out ) {
|
181 |
-
$aArgs = array( 'file' => $out );
|
182 |
-
if( !$this->is_cron && !$force_is_cron ) {
|
183 |
-
$aArgs['quick_check'] = apply_filters( 'fv_flowplayer_checker_timeout_quick', 2 );
|
184 |
-
}
|
185 |
-
list( $header, $sHTTPError ) = $this->http_request( $remotefilename_encoded, $aArgs );
|
186 |
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
}
|
192 |
-
fclose($out);
|
193 |
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
if( stripos( $error->Message, 'Request has expired' ) !== false ) {
|
210 |
-
$video_errors[] = '<p><strong>Amazon S3</strong>: Your secure link is expired, there might be problem with your Amazon S3 plugin. Please test if the above URL opens in your browser.</p>';
|
211 |
-
} else {
|
212 |
-
$video_errors[] = '<p><strong>Amazon S3</strong>: '.$error->Message.'</p>';
|
213 |
-
}
|
214 |
-
|
215 |
-
}
|
216 |
-
}
|
217 |
-
|
218 |
-
if( $bValidFile ) {
|
219 |
-
$ThisFileInfo = $getID3->analyze( $localtempfilename );
|
220 |
-
}
|
221 |
-
if( !@unlink($localtempfilename) ) {
|
222 |
-
$video_errors[] = 'Can\'t remove temporary file for video analysis in <tt>'.$localtempfilename.'</tt>!';
|
223 |
-
}
|
224 |
-
} else {
|
225 |
-
$video_errors[] = 'Can\'t create temporary file for video analysis in <tt>'.$localtempfilename.'</tt>!';
|
226 |
-
}
|
227 |
}
|
228 |
-
|
229 |
-
|
230 |
-
/*
|
231 |
-
Only check file length
|
232 |
-
*/
|
233 |
|
234 |
-
if(
|
235 |
-
$time = false;
|
236 |
-
if( isset($ThisFileInfo) && isset($ThisFileInfo['playtime_seconds']) ) {
|
237 |
-
$time = $ThisFileInfo['playtime_seconds'];
|
238 |
-
}
|
239 |
-
|
240 |
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
$segments
|
252 |
-
|
253 |
-
|
254 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
255 |
foreach($segments[1] as $segment_item){
|
256 |
$duration += $segment_item;
|
257 |
}
|
258 |
}
|
259 |
-
|
260 |
-
|
261 |
-
$item_url = preg_replace('/[^\/]*\.m3u8(\?.*)?/i', $item, $meta_original);
|
262 |
-
$request = wp_remote_get($item_url);
|
263 |
-
$playlist_item = wp_remote_retrieve_body( $request );
|
264 |
-
if(preg_match_all('/^#EXTINF:([0-9]+\.?[0-9]*)/im', $playlist_item,$segments)){
|
265 |
-
foreach($segments[1] as $segment_item){
|
266 |
-
$duration += $segment_item;
|
267 |
-
}
|
268 |
-
}
|
269 |
-
if($duration > 0)
|
270 |
-
break;
|
271 |
-
}
|
272 |
}
|
273 |
-
|
274 |
-
$time = $duration;
|
275 |
}
|
276 |
-
|
277 |
-
$time =
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
if(
|
288 |
-
|
289 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
290 |
}
|
291 |
-
|
292 |
-
|
293 |
-
//return false;
|
294 |
-
//}
|
295 |
-
|
296 |
-
}
|
297 |
|
298 |
-
}
|
299 |
|
300 |
} // end isset($media)
|
301 |
}
|
@@ -305,6 +256,54 @@ class FV_Player_Checker {
|
|
305 |
|
306 |
|
307 |
function checker_cron() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
308 |
if( !$aQueue = self::queue_get() ) return;
|
309 |
$tStart = microtime(true);
|
310 |
$this->is_cron = true;
|
136 |
if( isset($media) ) {
|
137 |
$remotefilename = $media;
|
138 |
$remotefilename_encoded = flowplayer::get_encoded_url($remotefilename);
|
139 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
140 |
$bValidFile = true;
|
141 |
+
|
142 |
+
if ( ! class_exists( 'getID3' ) ) {
|
143 |
+
require( ABSPATH . WPINC . '/ID3/getid3.php' );
|
144 |
+
}
|
145 |
+
$getID3 = new getID3;
|
146 |
+
|
147 |
+
if( function_exists('curl_init') ) {
|
148 |
+
$message = '<p>Analysis of <a class="bluelink" target="_blank" href="'.esc_attr($remotefilename_encoded).'">'.$remotefilename_encoded.'</a></p>';
|
149 |
+
|
150 |
+
// taken from: http://www.getid3.org/phpBB3/viewtopic.php?f=3&t=1141
|
151 |
+
$upload_dir = wp_upload_dir();
|
152 |
+
$localtempfilename = trailingslashit( $upload_dir['basedir'] ).'fv_flowlayer_tmp_'.md5(rand(1,999)).'_'.basename( substr($remotefilename_encoded,0,32) );
|
153 |
+
|
154 |
+
$out = @fopen( $localtempfilename,'wb' );
|
155 |
+
|
156 |
+
if( $out ) {
|
157 |
+
$aArgs = array( 'file' => $out );
|
158 |
+
if( !$this->is_cron && !$force_is_cron ) {
|
159 |
+
$aArgs['quick_check'] = apply_filters( 'fv_flowplayer_checker_timeout_quick', 2 );
|
160 |
}
|
161 |
+
list( $header, $sHTTPError ) = $this->http_request( $remotefilename_encoded, $aArgs );
|
162 |
+
|
163 |
+
if( $sHTTPError ) {
|
164 |
+
$bValidFile = false;
|
165 |
}
|
166 |
+
fclose($out);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
167 |
|
168 |
+
$headers = WP_Http::processHeaders( $header );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
169 |
|
170 |
+
list( $aVideoErrors, $sContentType, $bFatal ) = $this->check_headers( $headers, $remotefilename, $random );
|
171 |
+
if( $bFatal ) {
|
172 |
+
$bValidFile = false;
|
173 |
+
}
|
|
|
|
|
174 |
|
175 |
+
if( $bValidFile ) {
|
176 |
+
$ThisFileInfo = $getID3->analyze( $localtempfilename );
|
177 |
+
}
|
178 |
+
}
|
179 |
+
}
|
180 |
+
|
181 |
+
|
182 |
+
/*
|
183 |
+
Only check file length
|
184 |
+
*/
|
185 |
+
|
186 |
+
if( (isset($meta_action) && $meta_action == 'check_time') || $force_is_cron ) {
|
187 |
+
$time = false;
|
188 |
+
if( isset($ThisFileInfo) && isset($ThisFileInfo['playtime_seconds']) ) {
|
189 |
+
$time = $ThisFileInfo['playtime_seconds'];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
190 |
}
|
|
|
|
|
|
|
|
|
|
|
191 |
|
192 |
+
if(preg_match('/.m3u8(\?.*)?$/i', $remotefilename_encoded)){
|
|
|
|
|
|
|
|
|
|
|
193 |
|
194 |
+
remove_action( 'http_api_curl', array( 'FV_Player_Checker', 'http_api_curl' ) );
|
195 |
+
|
196 |
+
$request = wp_remote_get($remotefilename_encoded);
|
197 |
+
$response = wp_remote_retrieve_body( $request );
|
198 |
+
|
199 |
+
$playlist = false;
|
200 |
+
$duration = 0;
|
201 |
+
$segments = false;
|
202 |
+
|
203 |
+
if(!preg_match_all('/^[^#].*\.m3u8(\?.*)?$/im', $response,$playlist)){
|
204 |
+
if(preg_match_all('/^#EXTINF:([0-9]+\.?[0-9]*)/im', $response,$segments)){
|
205 |
+
foreach($segments[1] as $segment_item){
|
206 |
+
$duration += $segment_item;
|
207 |
+
}
|
208 |
+
}
|
209 |
+
}else{
|
210 |
+
foreach($playlist[0] as $item){
|
211 |
+
$item_url = preg_replace('/[^\/]*\.m3u8(\?.*)?/i', $item, $remotefilename_encoded);
|
212 |
+
$request = wp_remote_get($item_url);
|
213 |
+
$playlist_item = wp_remote_retrieve_body( $request );
|
214 |
+
if(preg_match_all('/^#EXTINF:([0-9]+\.?[0-9]*)/im', $playlist_item,$segments)){
|
215 |
foreach($segments[1] as $segment_item){
|
216 |
$duration += $segment_item;
|
217 |
}
|
218 |
}
|
219 |
+
if($duration > 0)
|
220 |
+
break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
221 |
}
|
|
|
|
|
222 |
}
|
223 |
+
|
224 |
+
$time = $duration;
|
225 |
+
}
|
226 |
+
|
227 |
+
$time = apply_filters( 'fv_flowplayer_checker_time', $time, $remotefilename_encoded );
|
228 |
+
$key = flowplayer::get_video_key($remotefilename_encoded);
|
229 |
+
|
230 |
+
global $post;
|
231 |
+
$fv_flowplayer_meta = array();
|
232 |
+
if( !empty($post) ) {
|
233 |
+
$fv_flowplayer_meta = get_post_meta( $post->ID, $key, true );
|
234 |
+
if( !$fv_flowplayer_meta ) $fv_flowplayer_meta = array();
|
235 |
+
}
|
236 |
+
|
237 |
+
$fv_flowplayer_meta['duration'] = $time;
|
238 |
+
$fv_flowplayer_meta['etag'] = isset($headers['headers']['etag']) ? $headers['headers']['etag'] : false; // todo: check!
|
239 |
+
$fv_flowplayer_meta['date'] = time();
|
240 |
+
$fv_flowplayer_meta['check_time'] = microtime(true) - $tStart;
|
241 |
+
|
242 |
+
if( $time > 0 || $this->is_cron ) {
|
243 |
+
if( !empty($post) ) {
|
244 |
+
update_post_meta( $post->ID, $key, $fv_flowplayer_meta );
|
245 |
}
|
246 |
+
return $fv_flowplayer_meta;
|
247 |
+
}
|
|
|
|
|
|
|
|
|
248 |
|
249 |
+
}
|
250 |
|
251 |
} // end isset($media)
|
252 |
}
|
256 |
|
257 |
|
258 |
function checker_cron() {
|
259 |
+
|
260 |
+
// get all video IDs for which there is no duration meta_key
|
261 |
+
global $wpdb, $fv_fp;
|
262 |
+
$aVideos = $wpdb->get_results( "SELECT id, src FROM `{$wpdb->prefix}fv_player_videos` as v left join ( select id_video from {$wpdb->prefix}fv_player_videometa WHERE meta_key = 'duration' ) as m ON v.id = m.id_video where m.id_video IS NULL ORDER BY id DESC" );
|
263 |
+
|
264 |
+
if( $aVideos ) {
|
265 |
+
foreach( $aVideos AS $objVideo ) {
|
266 |
+
$id = $objVideo->id;
|
267 |
+
$url = $objVideo->src;
|
268 |
+
|
269 |
+
global $FV_Player_Db;
|
270 |
+
$objVideo = new FV_Player_Db_Video( $id, array(), $FV_Player_Db );
|
271 |
+
$last_check = $objVideo->getMetaValue('last_video_meta_check',true);
|
272 |
+
|
273 |
+
if( $last_check && intval($last_check) + 3600 > time() ) {
|
274 |
+
continue;
|
275 |
+
}
|
276 |
+
|
277 |
+
$meta_data = apply_filters('fv_player_meta_data', $url, false);
|
278 |
+
if( $meta_data == false) {
|
279 |
+
if( $secured_url = $fv_fp->get_video_src( $url, array( 'dynamic' => true ) ) ) {
|
280 |
+
$url = $secured_url;
|
281 |
+
}
|
282 |
+
|
283 |
+
$meta_data['duration'] = $this->check_mimetype(array($url), false, true);
|
284 |
+
$meta_data['duration'] = $meta_data['duration']['duration'];
|
285 |
+
|
286 |
+
}
|
287 |
+
|
288 |
+
if( !empty($meta_data['thumbnail']) ) {
|
289 |
+
if( !$objVideo->getSplash() || $objVideo->getMetaValue('auto_splash',true) ) {
|
290 |
+
$video_object = new FV_Player_Db_Video( $objVideo->getId(), array(), $FV_Player_Db );
|
291 |
+
$video_object->link2db( $objVideo->getId() );
|
292 |
+
$video_object->set( 'splash', $meta_data['thumbnail'] );
|
293 |
+
$video_object->save();
|
294 |
+
}
|
295 |
+
}
|
296 |
+
|
297 |
+
$objVideo->updateMetaValue('last_video_meta_check', time());
|
298 |
+
|
299 |
+
if( $meta_data['duration'] ) {
|
300 |
+
$objVideo->updateMetaValue( 'duration', $meta_data['duration'] );
|
301 |
+
}
|
302 |
+
|
303 |
+
}
|
304 |
+
}
|
305 |
+
|
306 |
+
// legacy
|
307 |
if( !$aQueue = self::queue_get() ) return;
|
308 |
$tStart = microtime(true);
|
309 |
$this->is_cron = true;
|
models/db-player-meta.php
CHANGED
@@ -267,7 +267,7 @@ CREATE TABLE " . self::$db_table_name . " (
|
|
267 |
|
268 |
if (!$is_cached) {
|
269 |
// load a single player meta data record
|
270 |
-
$meta_data = $wpdb->get_results( 'SELECT * FROM ' . self::$db_table_name . ' WHERE id = ' . $id );
|
271 |
|
272 |
// run through all of the meta data and
|
273 |
// fill the ones that were not found with blank arrays
|
267 |
|
268 |
if (!$is_cached) {
|
269 |
// load a single player meta data record
|
270 |
+
$meta_data = $wpdb->get_results( 'SELECT * FROM ' . self::$db_table_name . ' WHERE id = ' . intval($id) );
|
271 |
|
272 |
// run through all of the meta data and
|
273 |
// fill the ones that were not found with blank arrays
|
models/db-player.php
CHANGED
@@ -539,30 +539,39 @@ CREATE TABLE " . self::$db_table_name . " (
|
|
539 |
}
|
540 |
|
541 |
if ($id === null || count($query_ids)) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
542 |
// if we have multiple video IDs to load players for, let's prepare a like statement here
|
543 |
-
$
|
544 |
-
|
545 |
-
if ($options && !empty($options['db_options']) && !empty($options['db_options']['search_by_video_ids'])){
|
546 |
$where_like_part = array();
|
547 |
-
|
548 |
foreach ($options['db_options']['search_by_video_ids'] as $player_video_id) {
|
|
|
549 |
$where_like_part[] = "(videos = \"$player_video_id\" OR videos LIKE \"%,$player_video_id\" OR videos LIKE \"$player_video_id,%\")";
|
550 |
}
|
551 |
|
552 |
-
$
|
553 |
}
|
554 |
-
|
555 |
-
|
556 |
-
$
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
|
|
|
|
566 |
} else if ($id !== null && !count($query_ids)) {
|
567 |
$all_cached = true;
|
568 |
} else {
|
@@ -574,13 +583,12 @@ CREATE TABLE " . self::$db_table_name . " (
|
|
574 |
// load a single video
|
575 |
$player_data = $wpdb->get_row('
|
576 |
SELECT
|
577 |
-
'.($options && !empty($options['db_options']) && !empty($options['db_options']['select_fields']) ? 'id,'
|
578 |
FROM
|
579 |
'.self::$db_table_name.'
|
580 |
WHERE
|
581 |
-
id = '
|
582 |
-
|
583 |
-
($options && !empty($options['db_options']) && !empty($options['db_options']['offset']) && !empty($options['db_options']['per_page']) ? ' LIMIT '.$options['db_options']['offset'].', '.$options['db_options']['per_page'] : '')
|
584 |
);
|
585 |
} else if ($DB_Cache && $DB_Cache->isPlayerCached($id)) {
|
586 |
$all_cached = true;
|
@@ -590,7 +598,7 @@ CREATE TABLE " . self::$db_table_name . " (
|
|
590 |
}
|
591 |
}
|
592 |
|
593 |
-
if (isset($player_data) && $player_data !== -1 && count($player_data)) {
|
594 |
// single ID, just populate our own data
|
595 |
if (!$multiID) {
|
596 |
$this->fill_properties($player_data,$DB_Cache);
|
539 |
}
|
540 |
|
541 |
if ($id === null || count($query_ids)) {
|
542 |
+
|
543 |
+
// load multiple players via their IDs but a single query and return their values
|
544 |
+
$select = '*';
|
545 |
+
if( !empty($options['db_options']) && !empty($options['db_options']['select_fields']) ) $select = 'id,'.esc_sql($options['db_options']['select_fields']);
|
546 |
+
|
547 |
+
$where = '';
|
548 |
+
if( $id !== null ) {
|
549 |
+
$where = ' WHERE id IN('. implode(',', $query_ids).') ';
|
550 |
+
|
551 |
// if we have multiple video IDs to load players for, let's prepare a like statement here
|
552 |
+
} else if( !empty($options['db_options']) && !empty($options['db_options']['search_by_video_ids'])){
|
|
|
|
|
553 |
$where_like_part = array();
|
|
|
554 |
foreach ($options['db_options']['search_by_video_ids'] as $player_video_id) {
|
555 |
+
$player_video_id = intval($player_video_id);
|
556 |
$where_like_part[] = "(videos = \"$player_video_id\" OR videos LIKE \"%,$player_video_id\" OR videos LIKE \"$player_video_id,%\")";
|
557 |
}
|
558 |
|
559 |
+
$where = ' WHERE '.implode(' OR ', $where_like_part);
|
560 |
}
|
561 |
+
|
562 |
+
$order = '';
|
563 |
+
if( !empty($options['db_options']) && !empty($options['db_options']['order_by']) ) {
|
564 |
+
$order = ' ORDER BY '.esc_sql($options['db_options']['order_by']);
|
565 |
+
if( !empty($options['db_options']['order']) ) $order .= ' '.esc_sql($options['db_options']['order']);
|
566 |
+
}
|
567 |
+
|
568 |
+
$limit = '';
|
569 |
+
if( !empty($options['db_options']) && isset($options['db_options']['offset']) && isset($options['db_options']['per_page']) ) {
|
570 |
+
$limit = ' LIMIT '.intval($options['db_options']['offset']).', '.intval($options['db_options']['per_page']);
|
571 |
+
}
|
572 |
+
|
573 |
+
$player_data = $wpdb->get_results('SELECT '.$select.' FROM '.self::$db_table_name.$where.$order.$limit );
|
574 |
+
|
575 |
} else if ($id !== null && !count($query_ids)) {
|
576 |
$all_cached = true;
|
577 |
} else {
|
583 |
// load a single video
|
584 |
$player_data = $wpdb->get_row('
|
585 |
SELECT
|
586 |
+
'.($options && !empty($options['db_options']) && !empty($options['db_options']['select_fields']) ? 'id,'.esc_sql( $options['db_options']['select_fields'] ) : '*').'
|
587 |
FROM
|
588 |
'.self::$db_table_name.'
|
589 |
WHERE
|
590 |
+
id = '.intval($id),
|
591 |
+
ARRAY_A
|
|
|
592 |
);
|
593 |
} else if ($DB_Cache && $DB_Cache->isPlayerCached($id)) {
|
594 |
$all_cached = true;
|
598 |
}
|
599 |
}
|
600 |
|
601 |
+
if (isset($player_data) && $player_data !== -1 && is_array($player_data) && count($player_data)) {
|
602 |
// single ID, just populate our own data
|
603 |
if (!$multiID) {
|
604 |
$this->fill_properties($player_data,$DB_Cache);
|
models/db-video-meta.php
CHANGED
@@ -259,7 +259,7 @@ CREATE TABLE " . self::$db_table_name . " (
|
|
259 |
|
260 |
if (!$is_cached) {
|
261 |
// load a single video meta data record
|
262 |
-
$meta_data = $wpdb->get_row( $wpdb->query( 'SELECT * FROM ' . self::$db_table_name . ' WHERE id = ' . $id ) );
|
263 |
|
264 |
// run through all of the meta data and
|
265 |
// fill the ones that were not found with blank arrays
|
259 |
|
260 |
if (!$is_cached) {
|
261 |
// load a single video meta data record
|
262 |
+
$meta_data = $wpdb->get_row( $wpdb->query( 'SELECT * FROM ' . self::$db_table_name . ' WHERE id = ' . intval($id) ) );
|
263 |
|
264 |
// run through all of the meta data and
|
265 |
// fill the ones that were not found with blank arrays
|
models/db-video.php
CHANGED
@@ -278,16 +278,23 @@ CREATE TABLE " . self::$db_table_name . " (
|
|
278 |
|
279 |
// load multiple videos via their IDs but a single query and return their values
|
280 |
if (count($query_ids)) {
|
281 |
-
$
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
(
|
290 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
291 |
|
292 |
if( !$video_data && count($id) != count($query_ids) ) { // if no video data has returned, but we have the rest of videos cached already
|
293 |
$all_cached = true;
|
@@ -300,13 +307,11 @@ CREATE TABLE " . self::$db_table_name . " (
|
|
300 |
// load a single video
|
301 |
$video_data = $wpdb->get_row( '
|
302 |
SELECT
|
303 |
-
' . ( $options && ! empty( $options['db_options'] ) && ! empty( $options['db_options']['select_fields'] ) ? 'id,' . $options['db_options']['select_fields'] : '*' ) . '
|
304 |
FROM
|
305 |
' . self::$db_table_name . '
|
306 |
WHERE
|
307 |
-
id = ' . $id
|
308 |
-
( $options && ! empty( $options['db_options'] ) && ! empty( $options['db_options']['order_by'] ) ? ' ORDER BY ' . $options['db_options']['order_by'] . ( ! empty( $options['db_options']['order'] ) ? ' ' . $options['db_options']['order'] : '' ) : '' ) .
|
309 |
-
( $options && ! empty( $options['db_options'] ) && isset( $options['db_options']['offset'] ) && isset( $options['db_options']['per_page'] ) ? ' LIMIT ' . $options['db_options']['offset'] . ', ' . $options['db_options']['per_page'] : '' )
|
310 |
);
|
311 |
} else {
|
312 |
$all_cached = true;
|
@@ -491,7 +496,7 @@ CREATE TABLE " . self::$db_table_name . " (
|
|
491 |
foreach ($fields_to_search as $field_name) {
|
492 |
$where[] = "`$field_name` ". ($like ? 'LIKE "%'.esc_sql($search_string).'%"' : '="'.esc_sql($search_string).'"');
|
493 |
}
|
494 |
-
$where = implode(' '
|
495 |
|
496 |
self::init_db_name();
|
497 |
$data = $wpdb->get_results("SELECT ". ($fields ? esc_sql($fields) : '*') ." FROM `" . self::$db_table_name . "` WHERE $where ORDER BY id DESC");
|
@@ -552,7 +557,20 @@ CREATE TABLE " . self::$db_table_name . " (
|
|
552 |
return array();
|
553 |
} else {
|
554 |
if ($this->meta_data && $this->meta_data->getIsValid()) {
|
555 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
556 |
} else {
|
557 |
return array();
|
558 |
}
|
@@ -578,7 +596,54 @@ CREATE TABLE " . self::$db_table_name . " (
|
|
578 |
}
|
579 |
if( $single ) return false;
|
580 |
return $output;
|
581 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
582 |
|
583 |
/**
|
584 |
* Stores new video instance or updates and existing one
|
278 |
|
279 |
// load multiple videos via their IDs but a single query and return their values
|
280 |
if (count($query_ids)) {
|
281 |
+
$select = '*';
|
282 |
+
if( !empty($options['db_options']) && !empty($options['db_options']['select_fields']) ) $select = 'id,'.esc_sql($options['db_options']['select_fields']);
|
283 |
+
|
284 |
+
$where = ' WHERE id IN('. implode(',', $query_ids).') ';
|
285 |
+
|
286 |
+
$order = '';
|
287 |
+
if( !empty($options['db_options']) && !empty($options['db_options']['order_by']) ) {
|
288 |
+
$order = ' ORDER BY '.esc_sql($options['db_options']['order_by']);
|
289 |
+
if( !empty($options['db_options']['order']) ) $order .= ' '.esc_sql($options['db_options']['order']);
|
290 |
+
}
|
291 |
+
|
292 |
+
$limit = '';
|
293 |
+
if( !empty($options['db_options']) && isset($options['db_options']['offset']) && isset($options['db_options']['per_page']) ) {
|
294 |
+
$limit = ' LIMIT '.intval($options['db_options']['offset']).', '.intval($options['db_options']['per_page']);
|
295 |
+
}
|
296 |
+
|
297 |
+
$video_data = $wpdb->get_results('SELECT '.$select.' FROM '.self::$db_table_name.$order.$limit);
|
298 |
|
299 |
if( !$video_data && count($id) != count($query_ids) ) { // if no video data has returned, but we have the rest of videos cached already
|
300 |
$all_cached = true;
|
307 |
// load a single video
|
308 |
$video_data = $wpdb->get_row( '
|
309 |
SELECT
|
310 |
+
' . ( $options && ! empty( $options['db_options'] ) && ! empty( $options['db_options']['select_fields'] ) ? 'id,' . esc_sql($options['db_options']['select_fields']) : '*' ) . '
|
311 |
FROM
|
312 |
' . self::$db_table_name . '
|
313 |
WHERE
|
314 |
+
id = ' . intval($id)
|
|
|
|
|
315 |
);
|
316 |
} else {
|
317 |
$all_cached = true;
|
496 |
foreach ($fields_to_search as $field_name) {
|
497 |
$where[] = "`$field_name` ". ($like ? 'LIKE "%'.esc_sql($search_string).'%"' : '="'.esc_sql($search_string).'"');
|
498 |
}
|
499 |
+
$where = implode(' '.esc_sql($and_or).' ', $where);
|
500 |
|
501 |
self::init_db_name();
|
502 |
$data = $wpdb->get_results("SELECT ". ($fields ? esc_sql($fields) : '*') ." FROM `" . self::$db_table_name . "` WHERE $where ORDER BY id DESC");
|
557 |
return array();
|
558 |
} else {
|
559 |
if ($this->meta_data && $this->meta_data->getIsValid()) {
|
560 |
+
// meta data will be an array if we filled all of them at once
|
561 |
+
// from database at the time when player is initially created
|
562 |
+
if (is_array($this->meta_data)) {
|
563 |
+
return $this->meta_data;
|
564 |
+
} else if ( $this->DB_Instance->isVideoMetaCached($this->id) ) {
|
565 |
+
$cache = $this->DB_Instance->getVideoMetaCache();
|
566 |
+
return $cache[$this->id];
|
567 |
+
} else {
|
568 |
+
if ($this->meta_data && $this->meta_data->getIsValid()) {
|
569 |
+
return array( $this->meta_data );
|
570 |
+
} else {
|
571 |
+
return array();
|
572 |
+
}
|
573 |
+
}
|
574 |
} else {
|
575 |
return array();
|
576 |
}
|
596 |
}
|
597 |
if( $single ) return false;
|
598 |
return $output;
|
599 |
+
}
|
600 |
+
|
601 |
+
/**
|
602 |
+
* Updates or instert a video meta row
|
603 |
+
*
|
604 |
+
* @param string $key The meta key
|
605 |
+
* @param string $value The meta value
|
606 |
+
* @param int $id ID of the existing video meta row
|
607 |
+
*
|
608 |
+
* @throws Exception When the underlying Meta object throws.
|
609 |
+
*
|
610 |
+
* @return bool|int Returns record ID if successful, false otherwise.
|
611 |
+
*
|
612 |
+
*/
|
613 |
+
public function updateMetaValue( $key, $value, $id = false ) {
|
614 |
+
$to_update = false;
|
615 |
+
$data = $this->getMetaData();
|
616 |
+
|
617 |
+
if (count($data)) {
|
618 |
+
foreach ($data as $meta_object) {
|
619 |
+
// find the matching video meta row and if id is provided as well, match on that too
|
620 |
+
if( ( !$id || $id == $meta_object->getId() ) && $meta_object->getMetaKey() == $key) {
|
621 |
+
if( $meta_object->getMetaValue() != $value ) {
|
622 |
+
$to_update = $meta_object->getId();
|
623 |
+
}
|
624 |
+
}
|
625 |
+
}
|
626 |
+
}
|
627 |
+
|
628 |
+
// if matching row has been found or if it was not found and no row id is provided (insert)
|
629 |
+
if( $to_update || !$to_update && !$id ) {
|
630 |
+
$meta = new FV_Player_Db_Video_Meta( null, array( 'id_video' => $this->getId(), 'meta_key' => $key, 'meta_value' => $value ), $this->DB_Instance );
|
631 |
+
if( $to_update ) $meta->link2db($to_update);
|
632 |
+
return $meta->save();
|
633 |
+
}
|
634 |
+
|
635 |
+
return false;
|
636 |
+
}
|
637 |
+
|
638 |
+
/**
|
639 |
+
* Lets you alter any of the video properties and then call save()
|
640 |
+
*
|
641 |
+
* @param string $key The meta key
|
642 |
+
* @param string $value The meta value
|
643 |
+
*/
|
644 |
+
public function set( $key, $value ) {
|
645 |
+
$this->$key = stripslashes($value);
|
646 |
+
}
|
647 |
|
648 |
/**
|
649 |
* Stores new video instance or updates and existing one
|
models/db.php
CHANGED
@@ -473,7 +473,8 @@ class FV_Player_Db {
|
|
473 |
private function mapDbAttributeValue2Shortcode($att_name, $att_value) {
|
474 |
switch ($att_name) {
|
475 |
case 'playlist_advance':
|
476 |
-
|
|
|
477 |
}
|
478 |
|
479 |
return $att_value;
|
473 |
private function mapDbAttributeValue2Shortcode($att_name, $att_value) {
|
474 |
switch ($att_name) {
|
475 |
case 'playlist_advance':
|
476 |
+
if($att_value == 'on' ) return 'true';
|
477 |
+
if($att_value == 'off' ) return 'false';
|
478 |
}
|
479 |
|
480 |
return $att_value;
|
models/flowplayer-frontend.php
CHANGED
@@ -197,7 +197,7 @@ class flowplayer_frontend extends flowplayer
|
|
197 |
|
198 |
list( $playlist_items_external_html, $aPlaylistItems, $aSplashScreens, $aCaptions ) = $this->build_playlist( $this->aCurArgs, $media, $src1, $src2, $rtmp, $splash_img );
|
199 |
|
200 |
-
if( count($aPlaylistItems) == 1 ) {
|
201 |
$playlist_items_external_html = false;
|
202 |
$attributes['data-item'] = $this->json_encode( apply_filters( 'fv_player_item', $aPlaylistItems[0], 0, $this->aCurArgs ) );
|
203 |
}
|
@@ -518,7 +518,7 @@ class flowplayer_frontend extends flowplayer
|
|
518 |
$playlist_items_external_html = str_replace( 'class="fp-playlist-external', 'style="display: none" class="fp-playlist-external', $playlist_items_external_html );
|
519 |
}
|
520 |
|
521 |
-
if( count($aPlaylistItems) == 1 && !empty($this->aCurArgs['caption']) ) {
|
522 |
$attributes['class'] .= ' has-caption';
|
523 |
$this->sHTMLAfter .= apply_filters( 'fv_player_caption', "<p class='fp-caption'>".$this->aCurArgs['caption']."</p>", $this );
|
524 |
}
|
@@ -1112,7 +1112,6 @@ class flowplayer_frontend extends flowplayer
|
|
1112 |
$sHTMLSharing = '<ul class="fvp-sharing">
|
1113 |
<li><a class="sharing-facebook" href="https://www.facebook.com/sharer/sharer.php?u=' . $sPermalink . '" target="_blank"></a></li>
|
1114 |
<li><a class="sharing-twitter" href="https://twitter.com/home?status=' . $sTitle . $sPermalink . '" target="_blank"></a></li>
|
1115 |
-
<li><a class="sharing-google" href="https://plus.google.com/share?url=' . $sPermalink . '" target="_blank"></a></li>
|
1116 |
<li><a class="sharing-email" href="mailto:?body=' . $sMail . '" target="_blank"></a></li></ul>';
|
1117 |
|
1118 |
if( isset($post) && isset($post->ID) ) {
|
@@ -1154,8 +1153,8 @@ class flowplayer_frontend extends flowplayer
|
|
1154 |
$sSpinURL = site_url('wp-includes/images/wpspin.gif');
|
1155 |
|
1156 |
$sHTML = <<< HTML
|
1157 |
-
<div title="
|
1158 |
-
<div class="fv_wp_flowplayer_notice_head" onclick="fv_wp_flowplayer_admin_show_notice('{$this->hash}', this.parent); return false">
|
1159 |
<small>Admin: <span class="video-checker-result">Checking the video file...</span></small>
|
1160 |
<div style="display: none;" class="fv_wp_fp_notice_content" id="fv_wp_fp_notice_{$this->hash}">
|
1161 |
<div class="mail-content-notice">
|
197 |
|
198 |
list( $playlist_items_external_html, $aPlaylistItems, $aSplashScreens, $aCaptions ) = $this->build_playlist( $this->aCurArgs, $media, $src1, $src2, $rtmp, $splash_img );
|
199 |
|
200 |
+
if( count($aPlaylistItems) == 1 && empty($this->aCurArgs['listshow']) ) {
|
201 |
$playlist_items_external_html = false;
|
202 |
$attributes['data-item'] = $this->json_encode( apply_filters( 'fv_player_item', $aPlaylistItems[0], 0, $this->aCurArgs ) );
|
203 |
}
|
518 |
$playlist_items_external_html = str_replace( 'class="fp-playlist-external', 'style="display: none" class="fp-playlist-external', $playlist_items_external_html );
|
519 |
}
|
520 |
|
521 |
+
if( count($aPlaylistItems) == 1 && !empty($this->aCurArgs['caption']) && empty($this->aCurArgs['listshow']) ) {
|
522 |
$attributes['class'] .= ' has-caption';
|
523 |
$this->sHTMLAfter .= apply_filters( 'fv_player_caption', "<p class='fp-caption'>".$this->aCurArgs['caption']."</p>", $this );
|
524 |
}
|
1112 |
$sHTMLSharing = '<ul class="fvp-sharing">
|
1113 |
<li><a class="sharing-facebook" href="https://www.facebook.com/sharer/sharer.php?u=' . $sPermalink . '" target="_blank"></a></li>
|
1114 |
<li><a class="sharing-twitter" href="https://twitter.com/home?status=' . $sTitle . $sPermalink . '" target="_blank"></a></li>
|
|
|
1115 |
<li><a class="sharing-email" href="mailto:?body=' . $sMail . '" target="_blank"></a></li></ul>';
|
1116 |
|
1117 |
if( isset($post) && isset($post->ID) ) {
|
1153 |
$sSpinURL = site_url('wp-includes/images/wpspin.gif');
|
1154 |
|
1155 |
$sHTML = <<< HTML
|
1156 |
+
<div title="Only you and other admins can see this warning." class="fv-wp-flowplayer-notice-small fv-wp-flowplayer-ok" id="wpfp_notice_{$this->hash}" style="display: none">
|
1157 |
+
<div class="fv_wp_flowplayer_notice_head" onclick="fv_wp_flowplayer_admin_show_notice('{$this->hash}', this.parent); return false">Video Checker</div>
|
1158 |
<small>Admin: <span class="video-checker-result">Checking the video file...</span></small>
|
1159 |
<div style="display: none;" class="fv_wp_fp_notice_content" id="fv_wp_fp_notice_{$this->hash}">
|
1160 |
<div class="mail-content-notice">
|
models/flowplayer.php
CHANGED
@@ -774,6 +774,13 @@ class flowplayer extends FV_Wordpress_Flowplayer_Plugin_Private {
|
|
774 |
$sDuration = $this->current_video()->getDuration();
|
775 |
}
|
776 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
777 |
global $post;
|
778 |
if( !$sDuration && $post && isset($post->ID) && isset($aPlayer['sources']) && isset($aPlayer['sources'][0]) && isset($aPlayer['sources'][0]['src']) ) {
|
779 |
$sDuration = flowplayer::get_duration( $post->ID, $aPlayer['sources'][0]['src'] );
|
@@ -2002,7 +2009,7 @@ class flowplayer extends FV_Wordpress_Flowplayer_Plugin_Private {
|
|
2002 |
<?php
|
2003 |
// regular shortcode data with source
|
2004 |
global $fv_fp;
|
2005 |
-
if (!$dataInPost && preg_match('/src="[^"][^"]*"/i',$shortcode)) {
|
2006 |
$aAtts = shortcode_parse_atts($shortcode);
|
2007 |
if ( $aAtts && !empty($aAtts['liststyle'] ) && $aAtts['liststyle'] == 'vertical' || $fv_fp->_get_option('liststyle') == 'vertical' ) {
|
2008 |
_e('The preview is too narrow, vertical playlist will shift below the player as it would on mobile.','fv-wordpress-flowplayer');
|
774 |
$sDuration = $this->current_video()->getDuration();
|
775 |
}
|
776 |
|
777 |
+
if( !empty($aArgs['durations']) ) {
|
778 |
+
$durations = explode( ';', $aArgs['durations'] );
|
779 |
+
if( !empty($durations[$index]) ) {
|
780 |
+
$sDuration = $durations[$index];
|
781 |
+
}
|
782 |
+
}
|
783 |
+
|
784 |
global $post;
|
785 |
if( !$sDuration && $post && isset($post->ID) && isset($aPlayer['sources']) && isset($aPlayer['sources'][0]) && isset($aPlayer['sources'][0]['src']) ) {
|
786 |
$sDuration = flowplayer::get_duration( $post->ID, $aPlayer['sources'][0]['src'] );
|
2009 |
<?php
|
2010 |
// regular shortcode data with source
|
2011 |
global $fv_fp;
|
2012 |
+
if (!$dataInPost && preg_match('/id="\d+"|src="[^"][^"]*"/i',$shortcode)) {
|
2013 |
$aAtts = shortcode_parse_atts($shortcode);
|
2014 |
if ( $aAtts && !empty($aAtts['liststyle'] ) && $aAtts['liststyle'] == 'vertical' || $fv_fp->_get_option('liststyle') == 'vertical' ) {
|
2015 |
_e('The preview is too narrow, vertical playlist will shift below the player as it would on mobile.','fv-wordpress-flowplayer');
|
models/gutenberg.php
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
function fv_player_gutenberg() {
|
4 |
+
global $fv_wp_flowplayer_ver;
|
5 |
+
wp_register_script( 'fv-player-gutenberg', flowplayer::get_plugin_url().'/js/gutenberg.js', array( 'wp-blocks', 'wp-element', 'wp-components' ), $fv_wp_flowplayer_ver );
|
6 |
+
|
7 |
+
if( function_exists('register_block_type') ) {
|
8 |
+
register_block_type( 'fv-player-gutenberg/basic', array(
|
9 |
+
'editor_script' => 'fv-player-gutenberg',
|
10 |
+
) );
|
11 |
+
}
|
12 |
+
}
|
13 |
+
add_action( 'init', 'fv_player_gutenberg' );
|
models/lightbox.php
CHANGED
@@ -28,10 +28,14 @@ class FV_Player_lightbox {
|
|
28 |
|
29 |
add_action('fv_flowplayer_admin_default_options_after', array( $this, 'lightbox_admin_default_options_html' ) );
|
30 |
add_filter('fv_flowplayer_admin_interface_options_after', array( $this, 'lightbox_admin_interface_html' ) );
|
|
|
31 |
|
32 |
add_action( 'wp_footer', array( $this, 'disp__lightboxed_players' ), 0 );
|
33 |
|
34 |
add_filter('fv_player_conf_defaults', array( $this, 'conf_defaults' ) );
|
|
|
|
|
|
|
35 |
|
36 |
//TODO is this hack needed?
|
37 |
$conf = get_option('fvwpflowplayer');
|
@@ -96,6 +100,20 @@ class FV_Player_lightbox {
|
|
96 |
|
97 |
return $sType;
|
98 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
99 |
|
100 |
function shortcode($attrs) {
|
101 |
$aArgs = func_get_args();
|
@@ -384,7 +402,7 @@ class FV_Player_lightbox {
|
|
384 |
<input type="checkbox" id="fv_wp_flowplayer_field_lightbox" name="fv_wp_flowplayer_field_lightbox" />
|
385 |
<input type="text" id="fv_wp_flowplayer_field_lightbox_width" name="fv_wp_flowplayer_field_lightbox_width" style="width: 12%" placeholder="Width" />
|
386 |
<input type="text" id="fv_wp_flowplayer_field_lightbox_height" name="fv_wp_flowplayer_field_lightbox_height" style="width: 12%" placeholder="Height" />
|
387 |
-
<input type="text" id="fv_wp_flowplayer_field_lightbox_caption" name="fv_wp_flowplayer_field_lightbox_caption" style="width: 62%" placeholder="
|
388 |
</td>
|
389 |
</tr>
|
390 |
<script>
|
@@ -440,6 +458,11 @@ class FV_Player_lightbox {
|
|
440 |
<?php
|
441 |
}
|
442 |
}
|
|
|
|
|
|
|
|
|
|
|
443 |
|
444 |
function lightbox_admin_interface_html() {
|
445 |
global $fv_fp;
|
28 |
|
29 |
add_action('fv_flowplayer_admin_default_options_after', array( $this, 'lightbox_admin_default_options_html' ) );
|
30 |
add_filter('fv_flowplayer_admin_interface_options_after', array( $this, 'lightbox_admin_interface_html' ) );
|
31 |
+
add_filter('fv_flowplayer_admin_integration_options_after', array( $this, 'lightbox_admin_integrations_html' ) );
|
32 |
|
33 |
add_action( 'wp_footer', array( $this, 'disp__lightboxed_players' ), 0 );
|
34 |
|
35 |
add_filter('fv_player_conf_defaults', array( $this, 'conf_defaults' ) );
|
36 |
+
|
37 |
+
add_action('wp_head', array( $this, 'remove_other_fancybox' ), 8 );
|
38 |
+
add_action('wp_footer', array( $this, 'remove_other_fancybox' ), 19 );
|
39 |
|
40 |
//TODO is this hack needed?
|
41 |
$conf = get_option('fvwpflowplayer');
|
100 |
|
101 |
return $sType;
|
102 |
}
|
103 |
+
|
104 |
+
function remove_other_fancybox() {
|
105 |
+
global $fv_fp;
|
106 |
+
if( $fv_fp->_get_option('lightbox_force') ) {
|
107 |
+
global $wp_scripts;
|
108 |
+
if( isset($wp_scripts) && isset($wp_scripts->queue) && is_array($wp_scripts->queue) ) {
|
109 |
+
foreach( $wp_scripts->queue as $handle ) {
|
110 |
+
if( stripos($handle,'fancybox') !== false ) {
|
111 |
+
wp_dequeue_script($handle);
|
112 |
+
}
|
113 |
+
}
|
114 |
+
}
|
115 |
+
}
|
116 |
+
}
|
117 |
|
118 |
function shortcode($attrs) {
|
119 |
$aArgs = func_get_args();
|
402 |
<input type="checkbox" id="fv_wp_flowplayer_field_lightbox" name="fv_wp_flowplayer_field_lightbox" />
|
403 |
<input type="text" id="fv_wp_flowplayer_field_lightbox_width" name="fv_wp_flowplayer_field_lightbox_width" style="width: 12%" placeholder="Width" />
|
404 |
<input type="text" id="fv_wp_flowplayer_field_lightbox_height" name="fv_wp_flowplayer_field_lightbox_height" style="width: 12%" placeholder="Height" />
|
405 |
+
<input type="text" id="fv_wp_flowplayer_field_lightbox_caption" name="fv_wp_flowplayer_field_lightbox_caption" style="width: 62%" placeholder="Title" />
|
406 |
</td>
|
407 |
</tr>
|
408 |
<script>
|
458 |
<?php
|
459 |
}
|
460 |
}
|
461 |
+
|
462 |
+
function lightbox_admin_integrations_html() {
|
463 |
+
global $fv_fp;
|
464 |
+
$fv_fp->_get_checkbox(__('Remove fancyBox', 'fv-wordpress-flowplayer'), 'lightbox_force', __('Use if FV Player lightbox is not working and you see a "fancyBox already initialized" message on JavaScript console.', 'fv-wordpress-flowplayer'));
|
465 |
+
}
|
466 |
|
467 |
function lightbox_admin_interface_html() {
|
468 |
global $fv_fp;
|
models/list-table.php
CHANGED
@@ -14,8 +14,8 @@ class FV_Player_List_Table_View {
|
|
14 |
|
15 |
function admin_menu(){
|
16 |
global $wpdb;
|
17 |
-
if( current_user_can('edit_posts')
|
18 |
-
add_menu_page( 'FV Player', 'FV Player', 'edit_posts', 'fv_player', '', '
|
19 |
add_submenu_page( 'fv_player', 'FV Player', 'FV Player', 'edit_posts', 'fv_player', array($this, 'tools_panel') );
|
20 |
}
|
21 |
}
|
@@ -30,6 +30,9 @@ class FV_Player_List_Table_View {
|
|
30 |
global $fv_wp_flowplayer_ver;
|
31 |
wp_enqueue_style('fv-player-list-view', flowplayer::get_plugin_url().'/css/list-view.css',array(), $fv_wp_flowplayer_ver );
|
32 |
}
|
|
|
|
|
|
|
33 |
}
|
34 |
|
35 |
function tools_panel() {
|
14 |
|
15 |
function admin_menu(){
|
16 |
global $wpdb;
|
17 |
+
if( current_user_can('edit_posts') ) {
|
18 |
+
add_menu_page( 'FV Player', 'FV Player', 'edit_posts', 'fv_player', '', flowplayer::get_plugin_url().'/images/icon@x2.png', 30 );
|
19 |
add_submenu_page( 'fv_player', 'FV Player', 'FV Player', 'edit_posts', 'fv_player', array($this, 'tools_panel') );
|
20 |
}
|
21 |
}
|
30 |
global $fv_wp_flowplayer_ver;
|
31 |
wp_enqueue_style('fv-player-list-view', flowplayer::get_plugin_url().'/css/list-view.css',array(), $fv_wp_flowplayer_ver );
|
32 |
}
|
33 |
+
?>
|
34 |
+
<style>#adminmenu #toplevel_page_fv_player .wp-menu-image img {width:28px;height:25px;padding-top:4px}</style>
|
35 |
+
<?php
|
36 |
}
|
37 |
|
38 |
function tools_panel() {
|
models/xml-video-sitemap.php
CHANGED
@@ -112,6 +112,11 @@ class FV_Xml_Video_Sitemap {
|
|
112 |
$increment_video_counter = false;
|
113 |
$aArgs = shortcode_parse_atts( rtrim( $shortcode, ']' ) );
|
114 |
|
|
|
|
|
|
|
|
|
|
|
115 |
if( !empty($did_videos[$aArgs['src']]) ) continue;
|
116 |
$did_videos[$aArgs['src']] = true;
|
117 |
|
@@ -125,14 +130,16 @@ class FV_Xml_Video_Sitemap {
|
|
125 |
|
126 |
// this crazyness needs to be first converted into non-html characters (so " becomes "), then
|
127 |
// stripped of them all and returned back HTML-encoded for the XML formatting to be correct
|
128 |
-
$splash =
|
|
|
|
|
129 |
$splash = htmlspecialchars(trim(html_entity_decode($splash), "\n\t\r\0\x0B".'"'));
|
130 |
|
131 |
// make sure the URLs are absolute
|
132 |
if( $splash ) {
|
133 |
if( stripos($splash,'http://') !== 0 && stripos($splash,'https://') !== 0 && stripos($splash,'//') !== 0 ) {
|
134 |
$splash = home_url($splash);
|
135 |
-
} else if( stripos($
|
136 |
$splash = 'http:'.$splash;
|
137 |
}
|
138 |
} else {
|
@@ -142,7 +149,7 @@ class FV_Xml_Video_Sitemap {
|
|
142 |
// check for caption - if none present, build it up from page title and video position
|
143 |
// note: html characters must be substituted or enclosed in CDATA, from which the first
|
144 |
// is easier to do correctly on a single line
|
145 |
-
$sanitized_caption = htmlspecialchars(strip_tags($aArgs['caption']), ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE );
|
146 |
$sanitized_src = htmlspecialchars(strip_tags(trim($aArgs['src'])), ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE );
|
147 |
|
148 |
// make sure the URLs are absolute
|
112 |
$increment_video_counter = false;
|
113 |
$aArgs = shortcode_parse_atts( rtrim( $shortcode, ']' ) );
|
114 |
|
115 |
+
global $FV_Player_Db;
|
116 |
+
if( !empty($aArgs['id']) && !empty($FV_Player_Db) ) {
|
117 |
+
$aArgs = $FV_Player_Db->getPlayerAttsFromDb( $aArgs );
|
118 |
+
}
|
119 |
+
|
120 |
if( !empty($did_videos[$aArgs['src']]) ) continue;
|
121 |
$did_videos[$aArgs['src']] = true;
|
122 |
|
130 |
|
131 |
// this crazyness needs to be first converted into non-html characters (so " becomes "), then
|
132 |
// stripped of them all and returned back HTML-encoded for the XML formatting to be correct
|
133 |
+
$splash = false;
|
134 |
+
if( !empty($aArgs['poster']) ) $splash = $aArgs['poster'];
|
135 |
+
if( !empty($aArgs['splash']) ) $splash = $aArgs['splash'];
|
136 |
$splash = htmlspecialchars(trim(html_entity_decode($splash), "\n\t\r\0\x0B".'"'));
|
137 |
|
138 |
// make sure the URLs are absolute
|
139 |
if( $splash ) {
|
140 |
if( stripos($splash,'http://') !== 0 && stripos($splash,'https://') !== 0 && stripos($splash,'//') !== 0 ) {
|
141 |
$splash = home_url($splash);
|
142 |
+
} else if( stripos($splash,'//') === 0 ) {
|
143 |
$splash = 'http:'.$splash;
|
144 |
}
|
145 |
} else {
|
149 |
// check for caption - if none present, build it up from page title and video position
|
150 |
// note: html characters must be substituted or enclosed in CDATA, from which the first
|
151 |
// is easier to do correctly on a single line
|
152 |
+
$sanitized_caption = !empty($aArgs['caption']) ? htmlspecialchars(strip_tags($aArgs['caption']), ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE ) : false;
|
153 |
$sanitized_src = htmlspecialchars(strip_tags(trim($aArgs['src'])), ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE );
|
154 |
|
155 |
// make sure the URLs are absolute
|
readme.txt
CHANGED
@@ -3,7 +3,7 @@ Contributors: FolioVision
|
|
3 |
Donate link: https://foliovision.com/donate
|
4 |
Tags: video player, flowplayer, mobile video, html5 video, Vimeo, html5 player, youtube player, youtube playlist, video playlist, RTMP, Cloudfront, HLS
|
5 |
Requires at least: 3.5
|
6 |
-
Tested up to:
|
7 |
Stable tag: trunk
|
8 |
License: GPLv3 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
@@ -357,6 +357,23 @@ Thank you for being part of the HMTL 5 mobile video revolution!
|
|
357 |
|
358 |
== Changelog ==
|
359 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
360 |
= 7.3.3.727 - 2017/12/05 =
|
361 |
|
362 |
* Compatiblity - improving old Samsung phone detection for warning messages
|
3 |
Donate link: https://foliovision.com/donate
|
4 |
Tags: video player, flowplayer, mobile video, html5 video, Vimeo, html5 player, youtube player, youtube playlist, video playlist, RTMP, Cloudfront, HLS
|
5 |
Requires at least: 3.5
|
6 |
+
Tested up to: 5.0.2
|
7 |
Stable tag: trunk
|
8 |
License: GPLv3 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
357 |
|
358 |
== Changelog ==
|
359 |
|
360 |
+
= 7.3.6.727 - 2017/01/08 =
|
361 |
+
|
362 |
+
* Caption field - renaming to Title
|
363 |
+
* Database - enabling background processing for videos in DB
|
364 |
+
* Editor - fix for WebM and HLS duration scanning
|
365 |
+
* Lightbox - added Remove fancyBox setting - use if you see a "fancyBox already initialized" message on JavaScript console
|
366 |
+
* Sharing - removing Google+ as it's deprecated
|
367 |
+
* Bugfix - PHP 7.2 compatiblity
|
368 |
+
|
369 |
+
= 7.3.4.727 - 2017/12/14 =
|
370 |
+
|
371 |
+
* FV Player top level wp-admin menu item icon
|
372 |
+
* WordPress 5 - Gutenberg editor support
|
373 |
+
* Database - bugfix for mapping of Disable Playlist Autoadvance
|
374 |
+
* Database - making it work with XML sitemap
|
375 |
+
* Handle WordPress shortcodes - improved to work with [playlist] as well
|
376 |
+
|
377 |
= 7.3.3.727 - 2017/12/05 =
|
378 |
|
379 |
* Compatiblity - improving old Samsung phone detection for warning messages
|
view/admin.php
CHANGED
@@ -584,7 +584,7 @@ function fv_flowplayer_admin_integrations() {
|
|
584 |
</td>
|
585 |
</tr>
|
586 |
|
587 |
-
<?php $fv_fp->_get_checkbox(__('Handle WordPress <code><small>[video]</small></code> shortcodes', 'fv-wordpress-flowplayer'), array( 'integrations', 'wp_core_video' ), '...and also the YouTube links', '' ); ?>
|
588 |
<?php $fv_fp->_get_checkbox(__('Load FV Flowplayer JS everywhere', 'fv-wordpress-flowplayer'), 'js-everywhere', __('If you use some special JavaScript integration you might prefer this option.', 'fv-wordpress-flowplayer'), __('Otherwise our JavaScript only loads if the shortcode is found in any of the posts being currently displayed.', 'fv-wordpress-flowplayer') ); ?>
|
589 |
<?php if( $fv_fp->_get_option('parse_commas') ) $fv_fp->_get_checkbox(__('Parse old shortcodes with commas', 'fv-wordpress-flowplayer'), 'parse_commas', __('Older versions of this plugin used commas to sepparate shortcode parameters.', 'fv-wordpress-flowplayer'), __('This option will make sure it works with current version. Turn this off if you have some problems with display or other plugins which use shortcodes.', 'fv-wordpress-flowplayer') ); ?>
|
590 |
<?php $fv_fp->_get_checkbox(__('Parse Vimeo and YouTube links', 'fv-wordpress-flowplayer'), 'parse_comments', __('Affects comments, bbPress and BuddyPress. These links will be displayed as videos.', 'fv-wordpress-flowplayer'), __('This option makes most sense together with FV Player Pro as it embeds these videos using FV Player. Enables use of shortcodes in comments and bbPress.', 'fv-wordpress-flowplayer') ); ?>
|
@@ -834,7 +834,7 @@ function fv_flowplayer_admin_interface_options() {
|
|
834 |
<?php $fv_fp->_get_checkbox(__('Mobile Video', 'fv-wordpress-flowplayer'), array('interface', 'mobile') ); ?>
|
835 |
<?php $fv_fp->_get_checkbox(__('Playlist Auto Advance', 'fv-wordpress-flowplayer'), array('interface', 'playlist_advance') ); ?>
|
836 |
<?php $fv_fp->_get_checkbox(__('Playlist Style', 'fv-wordpress-flowplayer'), array('interface', 'playlist') ); ?>
|
837 |
-
<?php $fv_fp->_get_checkbox(__('Playlist
|
838 |
<?php $fv_fp->_get_checkbox(__('Sharing Buttons', 'fv-wordpress-flowplayer'), array('interface', 'share') ); ?>
|
839 |
<?php $fv_fp->_get_checkbox(__('Speed Buttons', 'fv-wordpress-flowplayer'), array('interface', 'speed') ); ?>
|
840 |
<?php $fv_fp->_get_checkbox(__('Splash Text', 'fv-wordpress-flowplayer'), array('interface', 'splash_text') ); ?>
|
@@ -1522,7 +1522,7 @@ function fv_flowplayer_admin_usage() {
|
|
1522 |
<li><a target="_blank" href="https://foliovision.com/player/basic-setup/encoding"><?php _e('Video Encoding for HTML 5', 'fv-wordpress-flowplayer'); ?></a></li>
|
1523 |
<li><a target="_blank" href="https://foliovision.com/player/basic-setup/creating-playlists"><?php _e('How to Create Playlists', 'fv-wordpress-flowplayer'); ?></a></li>
|
1524 |
<li><a target="_blank" href="https://foliovision.com/player/basic-setup/vtt-chapters"><?php _e('VTT Chapters', 'fv-wordpress-flowplayer'); ?></a></li>
|
1525 |
-
<li><a target="_blank" href="https://foliovision.com/player/basic-setup/adding-captions-and-splash-text"><?php _e('Adding
|
1526 |
<li><a target="_blank" href="https://foliovision.com/player/basic-setup/quality-switching"><?php _e('Setting Up Video Quality Switching', 'fv-wordpress-flowplayer'); ?></a></li>
|
1527 |
<li><a target="_blank" href="https://foliovision.com/player/basic-setup/how-to-use-video-checker"><?php _e('How to Use the Built-in Video Checker', 'fv-wordpress-flowplayer'); ?></a></li>
|
1528 |
<li><a target="_blank" href="https://foliovision.com/player/basic-setup/creating-video-links"><?php _e('Creating Video Links in FV Player', 'fv-wordpress-flowplayer'); ?></a></li>
|
584 |
</td>
|
585 |
</tr>
|
586 |
|
587 |
+
<?php $fv_fp->_get_checkbox(__('Handle WordPress <code><small>[video]</small></code> shortcodes', 'fv-wordpress-flowplayer'), array( 'integrations', 'wp_core_video' ), '...and also <code><small>[playlist]</small></code> and the YouTube links', '' ); ?>
|
588 |
<?php $fv_fp->_get_checkbox(__('Load FV Flowplayer JS everywhere', 'fv-wordpress-flowplayer'), 'js-everywhere', __('If you use some special JavaScript integration you might prefer this option.', 'fv-wordpress-flowplayer'), __('Otherwise our JavaScript only loads if the shortcode is found in any of the posts being currently displayed.', 'fv-wordpress-flowplayer') ); ?>
|
589 |
<?php if( $fv_fp->_get_option('parse_commas') ) $fv_fp->_get_checkbox(__('Parse old shortcodes with commas', 'fv-wordpress-flowplayer'), 'parse_commas', __('Older versions of this plugin used commas to sepparate shortcode parameters.', 'fv-wordpress-flowplayer'), __('This option will make sure it works with current version. Turn this off if you have some problems with display or other plugins which use shortcodes.', 'fv-wordpress-flowplayer') ); ?>
|
590 |
<?php $fv_fp->_get_checkbox(__('Parse Vimeo and YouTube links', 'fv-wordpress-flowplayer'), 'parse_comments', __('Affects comments, bbPress and BuddyPress. These links will be displayed as videos.', 'fv-wordpress-flowplayer'), __('This option makes most sense together with FV Player Pro as it embeds these videos using FV Player. Enables use of shortcodes in comments and bbPress.', 'fv-wordpress-flowplayer') ); ?>
|
834 |
<?php $fv_fp->_get_checkbox(__('Mobile Video', 'fv-wordpress-flowplayer'), array('interface', 'mobile') ); ?>
|
835 |
<?php $fv_fp->_get_checkbox(__('Playlist Auto Advance', 'fv-wordpress-flowplayer'), array('interface', 'playlist_advance') ); ?>
|
836 |
<?php $fv_fp->_get_checkbox(__('Playlist Style', 'fv-wordpress-flowplayer'), array('interface', 'playlist') ); ?>
|
837 |
+
<?php $fv_fp->_get_checkbox(__('Playlist Item Titles', 'fv-wordpress-flowplayer'), array('interface', 'playlist_captions') ); ?>
|
838 |
<?php $fv_fp->_get_checkbox(__('Sharing Buttons', 'fv-wordpress-flowplayer'), array('interface', 'share') ); ?>
|
839 |
<?php $fv_fp->_get_checkbox(__('Speed Buttons', 'fv-wordpress-flowplayer'), array('interface', 'speed') ); ?>
|
840 |
<?php $fv_fp->_get_checkbox(__('Splash Text', 'fv-wordpress-flowplayer'), array('interface', 'splash_text') ); ?>
|
1522 |
<li><a target="_blank" href="https://foliovision.com/player/basic-setup/encoding"><?php _e('Video Encoding for HTML 5', 'fv-wordpress-flowplayer'); ?></a></li>
|
1523 |
<li><a target="_blank" href="https://foliovision.com/player/basic-setup/creating-playlists"><?php _e('How to Create Playlists', 'fv-wordpress-flowplayer'); ?></a></li>
|
1524 |
<li><a target="_blank" href="https://foliovision.com/player/basic-setup/vtt-chapters"><?php _e('VTT Chapters', 'fv-wordpress-flowplayer'); ?></a></li>
|
1525 |
+
<li><a target="_blank" href="https://foliovision.com/player/basic-setup/adding-captions-and-splash-text"><?php _e('Adding Titles and Splash Text', 'fv-wordpress-flowplayer'); ?></a></li>
|
1526 |
<li><a target="_blank" href="https://foliovision.com/player/basic-setup/quality-switching"><?php _e('Setting Up Video Quality Switching', 'fv-wordpress-flowplayer'); ?></a></li>
|
1527 |
<li><a target="_blank" href="https://foliovision.com/player/basic-setup/how-to-use-video-checker"><?php _e('How to Use the Built-in Video Checker', 'fv-wordpress-flowplayer'); ?></a></li>
|
1528 |
<li><a target="_blank" href="https://foliovision.com/player/basic-setup/creating-video-links"><?php _e('Creating Video Links in FV Player', 'fv-wordpress-flowplayer'); ?></a></li>
|
view/wizard.php
CHANGED
@@ -161,7 +161,7 @@ var fv_flowplayer_preview_nonce = '<?php echo wp_create_nonce( "fv-player-previe
|
|
161 |
<thead>
|
162 |
<tr>
|
163 |
<th><a>Video</a></th>
|
164 |
-
<th><a<?php if( !isset($fv_flowplayer_conf["interface"]["playlist_captions"]) || $fv_flowplayer_conf["interface"]["playlist_captions"] != 'true' ) echo ' class="fv_player_interface_hide"'; ?>>
|
165 |
<!--<th>Dimension</th>
|
166 |
<th>Time</th>-->
|
167 |
</tr>
|
@@ -283,7 +283,7 @@ var fv_flowplayer_preview_nonce = '<?php echo wp_create_nonce( "fv-player-previe
|
|
283 |
</tr>
|
284 |
|
285 |
<tr class="<?php if (isset($fv_flowplayer_conf["interface"]["playlist_captions"]) && $fv_flowplayer_conf["interface"]["playlist_captions"] == 'true') echo 'playlist_caption'; else echo 'fv_player_interface_hide'; ?>" >
|
286 |
-
<th scope="row" class="label"><label for="fv_wp_flowplayer_field_caption" class="alignright"><?php _e('
|
287 |
<td class="field" colspan="2"><input type="text" class="text<?php echo $upload_field_class; ?>" id="fv_wp_flowplayer_field_caption" name="fv_wp_flowplayer_field_caption" value=""/></td>
|
288 |
</tr>
|
289 |
|
161 |
<thead>
|
162 |
<tr>
|
163 |
<th><a>Video</a></th>
|
164 |
+
<th><a<?php if( !isset($fv_flowplayer_conf["interface"]["playlist_captions"]) || $fv_flowplayer_conf["interface"]["playlist_captions"] != 'true' ) echo ' class="fv_player_interface_hide"'; ?>>Title</a></th>
|
165 |
<!--<th>Dimension</th>
|
166 |
<th>Time</th>-->
|
167 |
</tr>
|
283 |
</tr>
|
284 |
|
285 |
<tr class="<?php if (isset($fv_flowplayer_conf["interface"]["playlist_captions"]) && $fv_flowplayer_conf["interface"]["playlist_captions"] == 'true') echo 'playlist_caption'; else echo 'fv_player_interface_hide'; ?>" >
|
286 |
+
<th scope="row" class="label"><label for="fv_wp_flowplayer_field_caption" class="alignright"><?php _e('Title', 'fv_flowplayer'); ?></label></th>
|
287 |
<td class="field" colspan="2"><input type="text" class="text<?php echo $upload_field_class; ?>" id="fv_wp_flowplayer_field_caption" name="fv_wp_flowplayer_field_caption" value=""/></td>
|
288 |
</tr>
|
289 |
|