Version Description
2018/04/11 =
New feature - video intelligence ads
Bugfix - Video position saving - not working when playing HLS in Firefox
Download this release
Release Info
Developer | FolioVision |
Plugin | FV Flowplayer Video Player |
Version | 6.5.2 |
Comparing to | |
See all releases |
Code changes from version 6.5.1 to 6.5.2
- controller/backend.php +16 -134
- css/admin.css +4 -1
- css/license.css +41 -5
- flowplayer-beta/fv-flowplayer.min.js +4 -3
- flowplayer.php +3 -3
- flowplayer/fv-flowplayer.min.js +4 -3
- images/vi-logo.svg +20 -0
- includes/fp-api.php +142 -0
- models/flowplayer.php +10 -9
- models/video-intelligence.php +287 -0
- readme.txt +8 -2
- test/integration/backend/testSettingsScreen.html +115 -13
- test/integration/backend/videointelligenceInstallTest.php +80 -0
- test/integration/fv-player-unittest-case.php +1 -0
- view/admin-beta.php +1 -1
- view/admin.php +3 -2
controller/backend.php
CHANGED
@@ -363,7 +363,7 @@ function fv_player_admin_update() {
|
|
363 |
if( !isset($aOptions['version']) || version_compare( $fv_wp_flowplayer_ver, $aOptions['version'] ) ) {
|
364 |
//update_option( 'fv_wordpress_flowplayer_deferred_notices', 'FV Flowplayer upgraded - please click "Check template" and "Check videos" for automated check of your site at <a href="'.site_url().'/wp-admin/options-general.php?page=fvplayer">the settings page</a> for automated checks!' );
|
365 |
|
366 |
-
if( $aOptions['version'] == '6.0.5.20' && $aOptions['playlist_advance'] == 'true' ) { // version 6.0.5 used reverse logic for this option!
|
367 |
$aOptions['playlist_advance'] = false;
|
368 |
$fv_fp->_get_conf();
|
369 |
}
|
@@ -637,146 +637,28 @@ function fv_wp_flowplayer_admin_notice() {
|
|
637 |
* Check the extension info from plugin license transient and activate the plugin
|
638 |
*/
|
639 |
function fv_wp_flowplayer_install_extension( $plugin_package = 'fv_player_pro' ) {
|
640 |
-
|
641 |
-
|
642 |
-
$aInstalled = ( get_option('fv_flowplayer_extension_install' ) ) ? get_option('fv_flowplayer_extension_install' ) : array();
|
643 |
$aInstalled = array_merge( $aInstalled, array( $plugin_package => false ) );
|
644 |
update_option('fv_flowplayer_extension_install', $aInstalled );
|
645 |
|
646 |
$aPluginInfo = get_transient( 'fv_flowplayer_license' );
|
647 |
$plugin_basename = $aPluginInfo->{$plugin_package}->slug;
|
648 |
-
$download_url = $aPluginInfo->{$plugin_package}->url;
|
649 |
-
|
650 |
-
$
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
|
658 |
-
|
659 |
-
set_current_screen();
|
660 |
-
|
661 |
-
ob_start();
|
662 |
-
if ( false === ( $creds = request_filesystem_credentials( $url, '', false, false, false ) ) ) {
|
663 |
-
$form = ob_get_clean();
|
664 |
-
include( ABSPATH . 'wp-admin/admin-header.php' );
|
665 |
-
echo fv_wp_flowplayer_install_extension_talk($form);
|
666 |
-
include( ABSPATH . 'wp-admin/admin-footer.php' );
|
667 |
-
die;
|
668 |
-
}
|
669 |
-
|
670 |
-
if ( ! WP_Filesystem( $creds ) ) {
|
671 |
-
ob_start();
|
672 |
-
request_filesystem_credentials( $url, $method, true, false, false );
|
673 |
-
$form = ob_get_clean();
|
674 |
-
include( ABSPATH . 'wp-admin/admin-header.php' );
|
675 |
-
echo fv_wp_flowplayer_install_extension_talk($form);
|
676 |
-
include( ABSPATH . 'wp-admin/admin-footer.php' );
|
677 |
-
die;
|
678 |
-
}
|
679 |
-
|
680 |
-
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
681 |
-
|
682 |
-
$sTaskDone = __('FV Flowplayer Pro extension installed - check the new ', 'fv-wordpress-flowplayer') . '<a href="'.site_url().'/wp-admin/options-general.php?page=fvplayer#fv_player_pro">' . __('Pro features', 'fv-wordpress-flowplayer') . '</a>!';
|
683 |
-
if( !$sPluginBasenameReal || is_wp_error(validate_plugin($plugin_basename)) ) {
|
684 |
-
echo '<div style="display: none;">';
|
685 |
-
$objInstaller = new Plugin_Upgrader();
|
686 |
-
$objInstaller->install( $download_url );
|
687 |
-
echo '</div>';
|
688 |
-
wp_cache_flush();
|
689 |
|
690 |
-
if ( is_wp_error( $objInstaller->skin->result ) ) {
|
691 |
-
|
692 |
-
update_option( 'fv_wordpress_flowplayer_deferred_notices', __('FV Flowplayer Pro extension install failed - ', 'fv-wordpress-flowplayer') . $objInstaller->skin->result->get_error_message() );
|
693 |
-
$bResult = false;
|
694 |
-
} else {
|
695 |
-
if ( $objInstaller->plugin_info() ) {
|
696 |
-
$plugin_basename = $objInstaller->plugin_info();
|
697 |
-
|
698 |
-
}
|
699 |
-
|
700 |
-
$activate = activate_plugin( $plugin_basename );
|
701 |
-
if ( is_wp_error( $activate ) ) {
|
702 |
-
update_option( 'fv_wordpress_flowplayer_deferred_notices', __('FV Flowplayer Pro extension install failed - ', 'fv-wordpress-flowplayer') . $activate->get_error_message());
|
703 |
-
$bResult = false;
|
704 |
-
}
|
705 |
-
}
|
706 |
-
|
707 |
-
} else if( $sPluginBasenameReal ) {
|
708 |
-
$sTaskDone = __('FV Flowplayer Pro extension upgraded successfully!', 'fv-wordpress-flowplayer');
|
709 |
-
|
710 |
-
echo '<div style="display: none;">';
|
711 |
-
$objInstaller = new Plugin_Upgrader();
|
712 |
-
$objInstaller->upgrade( $sPluginBasenameReal );
|
713 |
-
echo '</div></div>'; // explanation: extra closing tag just to be safe (in case of "The plugin is at the latest version.")
|
714 |
-
wp_cache_flush();
|
715 |
-
|
716 |
-
if ( is_wp_error( $objInstaller->skin->result ) ) {
|
717 |
-
update_option( 'fv_wordpress_flowplayer_deferred_notices', 'FV Flowplayer Pro extension upgrade failed - '.$objInstaller->skin->result->get_error_message() );
|
718 |
-
$bResult = false;
|
719 |
-
} else {
|
720 |
-
if ( $objInstaller->plugin_info() ) {
|
721 |
-
$plugin_basename = $objInstaller->plugin_info();
|
722 |
-
|
723 |
-
}
|
724 |
-
|
725 |
-
$activate = activate_plugin( $plugin_basename );
|
726 |
-
if ( is_wp_error( $activate ) ) {
|
727 |
-
update_option( 'fv_wordpress_flowplayer_deferred_notices', 'FV Flowplayer Pro extension upgrade failed - '.$activate->get_error_message() );
|
728 |
-
$bResult = false;
|
729 |
-
}
|
730 |
-
}
|
731 |
-
|
732 |
-
}
|
733 |
-
|
734 |
-
if( !isset($bResult) ) {
|
735 |
-
if( !isset($_GET['page']) || strcmp($_GET['page'],'fvplayer') != 0 ) {
|
736 |
-
update_option( 'fv_wordpress_flowplayer_deferred_notices', $sTaskDone );
|
737 |
-
}
|
738 |
-
$bResult = true;
|
739 |
-
}
|
740 |
-
|
741 |
$aInstalled = ( get_option('fv_flowplayer_extension_install' ) ) ? get_option('fv_flowplayer_extension_install' ) : array();
|
742 |
-
$aInstalled = array_merge( $aInstalled, array( $plugin_package => $
|
743 |
-
update_option('fv_flowplayer_extension_install', $aInstalled );
|
744 |
-
|
745 |
-
return $bResult;
|
746 |
-
}
|
747 |
-
|
748 |
-
|
749 |
-
function fv_wp_flowplayer_install_extension_talk( $content ) {
|
750 |
-
$content = preg_replace( '~<h3.*?</h3>~', '<h3>FV Player Pro auto-installation</h3><p>As a FV Flowplayer license holder, we would like to automatically install our Pro extension for you.</p>', $content );
|
751 |
-
$content = preg_replace( '~(<input[^>]*?type="submit"[^>]*?>)~', '$1 <a href="'.site_url().'/wp-admin/options-general.php?page=fvplayer'.'">Skip the Pro addon install</a>', $content );
|
752 |
-
return $content;
|
753 |
-
}
|
754 |
-
|
755 |
-
|
756 |
-
|
757 |
-
|
758 |
-
//search for plugin path with {slug}.php
|
759 |
-
function fv_flowplayer_get_extension_path( $slug ){
|
760 |
-
$aPluginSlugs = get_transient('plugin_slugs');
|
761 |
-
$aPluginSlugs = is_array($aPluginSlugs) ? $aPluginSlugs : array( 'fv-player-pro/fv-player-pro.php');
|
762 |
-
$aActivePlugins = get_option('active_plugins');
|
763 |
-
$aInactivePlugins = array_diff($aPluginSlugs,$aActivePlugins);
|
764 |
-
|
765 |
-
if( !$aPluginSlugs )
|
766 |
-
return false;
|
767 |
-
|
768 |
-
foreach( $aActivePlugins as $item ){
|
769 |
-
if( stripos($item,$slug.'.php') !== false )
|
770 |
-
return $item;
|
771 |
-
}
|
772 |
-
|
773 |
-
$sPluginFolder = plugin_dir_path( dirname( dirname(__FILE__) ) );
|
774 |
-
foreach( $aInactivePlugins as $item ){
|
775 |
-
if( stripos($item,$slug.'.php') !== false && file_exists($sPluginFolder.$item) )
|
776 |
-
return $item;
|
777 |
-
}
|
778 |
-
|
779 |
-
return false;
|
780 |
}
|
781 |
|
782 |
|
363 |
if( !isset($aOptions['version']) || version_compare( $fv_wp_flowplayer_ver, $aOptions['version'] ) ) {
|
364 |
//update_option( 'fv_wordpress_flowplayer_deferred_notices', 'FV Flowplayer upgraded - please click "Check template" and "Check videos" for automated check of your site at <a href="'.site_url().'/wp-admin/options-general.php?page=fvplayer">the settings page</a> for automated checks!' );
|
365 |
|
366 |
+
if( !empty($aOptions['version']) && $aOptions['version'] == '6.0.5.20' && $aOptions['playlist_advance'] == 'true' ) { // version 6.0.5 used reverse logic for this option!
|
367 |
$aOptions['playlist_advance'] = false;
|
368 |
$fv_fp->_get_conf();
|
369 |
}
|
637 |
* Check the extension info from plugin license transient and activate the plugin
|
638 |
*/
|
639 |
function fv_wp_flowplayer_install_extension( $plugin_package = 'fv_player_pro' ) {
|
640 |
+
|
641 |
+
$aInstalled = get_option( 'fv_flowplayer_extension_install', array() );
|
|
|
642 |
$aInstalled = array_merge( $aInstalled, array( $plugin_package => false ) );
|
643 |
update_option('fv_flowplayer_extension_install', $aInstalled );
|
644 |
|
645 |
$aPluginInfo = get_transient( 'fv_flowplayer_license' );
|
646 |
$plugin_basename = $aPluginInfo->{$plugin_package}->slug;
|
647 |
+
$download_url = $aPluginInfo->{$plugin_package}->url;
|
648 |
+
|
649 |
+
$result = FV_Wordpress_Flowplayer_Plugin::install_plugin(
|
650 |
+
"FV Player Pro",
|
651 |
+
$plugin_package,
|
652 |
+
$plugin_basename,
|
653 |
+
$download_url,
|
654 |
+
admin_url('options-general.php?page=fvplayer&reload='.rand()),
|
655 |
+
'fv_wordpress_flowplayer_deferred_notices',
|
656 |
+
'fv_player_pro_install'
|
657 |
+
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
658 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
659 |
$aInstalled = ( get_option('fv_flowplayer_extension_install' ) ) ? get_option('fv_flowplayer_extension_install' ) : array();
|
660 |
+
$aInstalled = array_merge( $aInstalled, array( $plugin_package => $result ) );
|
661 |
+
update_option('fv_flowplayer_extension_install', $aInstalled );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
662 |
}
|
663 |
|
664 |
|
css/admin.css
CHANGED
@@ -131,4 +131,7 @@ table.fv-player-popup-formats td:first-child { width: 72px }
|
|
131 |
|
132 |
#dashboard-widgets .flowplayer-wrapper h3, #dashboard-widgets .flowplayer-wrapper h4 {color:inherit;margin:0 auto;padding:0;font-weight:700;font-size:inherit}
|
133 |
|
134 |
-
.fv-player-editor-wrapper { float: left }
|
|
|
|
|
|
131 |
|
132 |
#dashboard-widgets .flowplayer-wrapper h3, #dashboard-widgets .flowplayer-wrapper h4 {color:inherit;margin:0 auto;padding:0;font-weight:700;font-size:inherit}
|
133 |
|
134 |
+
.fv-player-editor-wrapper { float: left }
|
135 |
+
|
136 |
+
/* otherwise "Drag boxes here" appears when you hide a meta box initially and then you show it with JS */
|
137 |
+
.metabox-holder #postbox-container-tab_video_intelligence .empty-container::after { content: none }
|
css/license.css
CHANGED
@@ -81,9 +81,36 @@ a.red-button {
|
|
81 |
#wpfp_options #fv_flowplayer_integrations table tr > td:first-child { padding-top: 4px; vertical-align: top; }
|
82 |
#wpfp_options table.flowplayer-settings { width: 29%; }
|
83 |
|
84 |
-
|
85 |
-
|
86 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
87 |
.amazon-s3-first .fv_fp_amazon_remove { display: none; }
|
88 |
.form-table2 td p { line-height: 20px; }
|
89 |
.meta-box-sortables input[type=text] { width: 100%; }
|
@@ -145,7 +172,8 @@ td.aligntop > label { margin-top:4px; }
|
|
145 |
#wpfp_options #flowplayer-wrapper .button-primary,
|
146 |
#wpfp_options #fv_flowplayer_skin_playlist .button-primary,
|
147 |
#wpfp_options #fv_flowplayer_skin_subtitles .button-primary,
|
148 |
-
#wpfp_options #fv_flowplayer_skin_sticky .button-primary
|
|
|
149 |
float: none;
|
150 |
}
|
151 |
|
@@ -155,7 +183,7 @@ td.aligntop > label { margin-top:4px; }
|
|
155 |
}
|
156 |
|
157 |
#wpfp_options .inside input + label {
|
158 |
-
display: inline-block;
|
159 |
}
|
160 |
|
161 |
#fv-player-popups-settings th {
|
@@ -174,3 +202,11 @@ td.aligntop > label { margin-top:4px; }
|
|
174 |
.description .more {
|
175 |
display: none;
|
176 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
#wpfp_options #fv_flowplayer_integrations table tr > td:first-child { padding-top: 4px; vertical-align: top; }
|
82 |
#wpfp_options table.flowplayer-settings { width: 29%; }
|
83 |
|
84 |
+
.wp-core-ui .vi-register {
|
85 |
+
box-shadow: none;
|
86 |
+
border: 2px solid #FFF200;
|
87 |
+
border-radius: 20px;
|
88 |
+
background-color: #FFF200;
|
89 |
+
color: #000;
|
90 |
+
text-align: center;
|
91 |
+
-webkit-appearance: none;
|
92 |
+
margin: 8px 0;
|
93 |
+
padding: 10px 30px;
|
94 |
+
line-height: 1;
|
95 |
+
height: auto;
|
96 |
+
font-size: 16px;
|
97 |
+
font-weight: 700;
|
98 |
+
box-sizing: border-box;
|
99 |
+
position: relative;
|
100 |
+
transition: all 0.2s ease-in-out;
|
101 |
+
}
|
102 |
+
.wp-core-ui .vi-register:hover {
|
103 |
+
background-color: #000;
|
104 |
+
color: #FFF200;
|
105 |
+
border: 2px solid #FFF200;
|
106 |
+
}
|
107 |
+
#fv_flowplayer_video_intelligence_hide .inside {
|
108 |
+
padding-left: 270px;
|
109 |
+
}
|
110 |
+
|
111 |
+
div.clear { clear: both }
|
112 |
+
div.column { float: left; width: 49% }
|
113 |
+
div.green { background-color: #e0ffe0; border-color: #88AA88; }
|
114 |
.amazon-s3-first .fv_fp_amazon_remove { display: none; }
|
115 |
.form-table2 td p { line-height: 20px; }
|
116 |
.meta-box-sortables input[type=text] { width: 100%; }
|
172 |
#wpfp_options #flowplayer-wrapper .button-primary,
|
173 |
#wpfp_options #fv_flowplayer_skin_playlist .button-primary,
|
174 |
#wpfp_options #fv_flowplayer_skin_subtitles .button-primary,
|
175 |
+
#wpfp_options #fv_flowplayer_skin_sticky .button-primary,
|
176 |
+
#wpfp_options #fv_flowplayer_video_intelligence_account .button-primary {
|
177 |
float: none;
|
178 |
}
|
179 |
|
183 |
}
|
184 |
|
185 |
#wpfp_options .inside input + label {
|
186 |
+
display: inline-block;
|
187 |
}
|
188 |
|
189 |
#fv-player-popups-settings th {
|
202 |
.description .more {
|
203 |
display: none;
|
204 |
}
|
205 |
+
|
206 |
+
#fv_flowplayer_video_intelligence ul {
|
207 |
+
list-style: initial;
|
208 |
+
padding-left: 1.5em;
|
209 |
+
}
|
210 |
+
#fv_flowplayer_video_intelligence img {
|
211 |
+
width: 95%;
|
212 |
+
}
|
flowplayer-beta/fv-flowplayer.min.js
CHANGED
@@ -2411,6 +2411,8 @@ flowplayer( function(api,root) {
|
|
2411 |
originalVideoApiPath = getOriginalSource(api.video),
|
2412 |
position = originalVideoApiPath.position;
|
2413 |
|
|
|
|
|
2414 |
if (position) {
|
2415 |
var do_seek = setInterval( function() {
|
2416 |
if( api.loading ) return;
|
@@ -2531,11 +2533,10 @@ flowplayer( function(api,root) {
|
|
2531 |
}
|
2532 |
};
|
2533 |
|
2534 |
-
//
|
2535 |
-
api.bind('progress', storeVideoPosition);
|
2536 |
api.bind('finish', removeVideoPosition);
|
2537 |
|
2538 |
-
// ready event, so we can seek into the last saved position
|
2539 |
api.bind('ready', seekIntoPosition);
|
2540 |
|
2541 |
// TODO: find out what event can be used to force saving of playlist video positions on video change
|
2411 |
originalVideoApiPath = getOriginalSource(api.video),
|
2412 |
position = originalVideoApiPath.position;
|
2413 |
|
2414 |
+
api.bind('progress', storeVideoPosition);
|
2415 |
+
|
2416 |
if (position) {
|
2417 |
var do_seek = setInterval( function() {
|
2418 |
if( api.loading ) return;
|
2533 |
}
|
2534 |
};
|
2535 |
|
2536 |
+
// stop events
|
|
|
2537 |
api.bind('finish', removeVideoPosition);
|
2538 |
|
2539 |
+
// ready event, so we can seek into the last saved position, it also hooks the progress event
|
2540 |
api.bind('ready', seekIntoPosition);
|
2541 |
|
2542 |
// TODO: find out what event can be used to force saving of playlist video positions on video change
|
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. Embed videos (MP4, WEBM, OGV, FLV) into posts or pages. Uses Flowplayer 6.
|
6 |
-
Version: 6.5.
|
7 |
Author URI: http://foliovision.com/
|
8 |
License: GPL-3.0
|
9 |
License URI: http://www.gnu.org/licenses/gpl-3.0.txt
|
@@ -26,7 +26,7 @@ License URI: http://www.gnu.org/licenses/gpl-3.0.txt
|
|
26 |
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
27 |
*/
|
28 |
|
29 |
-
$fv_wp_flowplayer_ver = '6.5.
|
30 |
$fv_wp_flowplayer_core_ver = '6.0.5';
|
31 |
$fv_wp_flowplayer_core_ver_beta = '7.2.4';
|
32 |
|
@@ -56,9 +56,9 @@ include_once(dirname( __FILE__ ) . '/models/widget.php');
|
|
56 |
|
57 |
include_once(dirname( __FILE__ ) . '/models/conversion.php');
|
58 |
include_once(dirname( __FILE__ ) . '/models/email-subscription.php');
|
|
|
59 |
include_once(dirname( __FILE__ ) . '/models/player-position-save.php');
|
60 |
|
61 |
-
|
62 |
$fv_fp = new flowplayer_frontend();
|
63 |
|
64 |
if( is_admin() ) {
|
3 |
Plugin Name: FV Player
|
4 |
Plugin URI: http://foliovision.com/wordpress/plugins/fv-wordpress-flowplayer
|
5 |
Description: Formerly FV WordPress Flowplayer. Embed videos (MP4, WEBM, OGV, FLV) into posts or pages. Uses Flowplayer 6.
|
6 |
+
Version: 6.5.2
|
7 |
Author URI: http://foliovision.com/
|
8 |
License: GPL-3.0
|
9 |
License URI: http://www.gnu.org/licenses/gpl-3.0.txt
|
26 |
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
27 |
*/
|
28 |
|
29 |
+
$fv_wp_flowplayer_ver = '6.5.2';
|
30 |
$fv_wp_flowplayer_core_ver = '6.0.5';
|
31 |
$fv_wp_flowplayer_core_ver_beta = '7.2.4';
|
32 |
|
56 |
|
57 |
include_once(dirname( __FILE__ ) . '/models/conversion.php');
|
58 |
include_once(dirname( __FILE__ ) . '/models/email-subscription.php');
|
59 |
+
include_once(dirname( __FILE__ ) . '/models/video-intelligence.php');
|
60 |
include_once(dirname( __FILE__ ) . '/models/player-position-save.php');
|
61 |
|
|
|
62 |
$fv_fp = new flowplayer_frontend();
|
63 |
|
64 |
if( is_admin() ) {
|
flowplayer/fv-flowplayer.min.js
CHANGED
@@ -2223,6 +2223,8 @@ flowplayer( function(api,root) {
|
|
2223 |
var
|
2224 |
originalVideoApiPath = getOriginalSource(api.video),
|
2225 |
position = originalVideoApiPath.position;
|
|
|
|
|
2226 |
|
2227 |
if (position) {
|
2228 |
var do_seek = setInterval( function() {
|
@@ -2344,11 +2346,10 @@ flowplayer( function(api,root) {
|
|
2344 |
}
|
2345 |
};
|
2346 |
|
2347 |
-
//
|
2348 |
-
api.bind('progress', storeVideoPosition);
|
2349 |
api.bind('finish', removeVideoPosition);
|
2350 |
|
2351 |
-
// ready event, so we can seek into the last saved position
|
2352 |
api.bind('ready', seekIntoPosition);
|
2353 |
|
2354 |
// TODO: find out what event can be used to force saving of playlist video positions on video change
|
2223 |
var
|
2224 |
originalVideoApiPath = getOriginalSource(api.video),
|
2225 |
position = originalVideoApiPath.position;
|
2226 |
+
|
2227 |
+
api.bind('progress', storeVideoPosition);
|
2228 |
|
2229 |
if (position) {
|
2230 |
var do_seek = setInterval( function() {
|
2346 |
}
|
2347 |
};
|
2348 |
|
2349 |
+
// stop events
|
|
|
2350 |
api.bind('finish', removeVideoPosition);
|
2351 |
|
2352 |
+
// ready event, so we can seek into the last saved position, it also hooks the progress event
|
2353 |
api.bind('ready', seekIntoPosition);
|
2354 |
|
2355 |
// TODO: find out what event can be used to force saving of playlist video positions on video change
|
images/vi-logo.svg
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<svg width="125px" height="47px" viewBox="0 0 125 47" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
3 |
+
<defs></defs>
|
4 |
+
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
5 |
+
<g id="09.4.8.1_direct_sell" transform="translate(-149.000000, -4370.000000)">
|
6 |
+
<g id="footer" transform="translate(0.000000, 4284.000000)">
|
7 |
+
<g id="logo_footer" transform="translate(150.000000, 87.000000)">
|
8 |
+
<path d="M22.2142857,44.5714286 C34.5,44.5714286 44.4285714,34.6428571 44.4285714,22.2857143 C44.4285714,10 34.5,0 22.2142857,0 C9.92857143,0.0714285714 0,10 0,22.2857143 C0,34.5714286 9.92857143,44.5714286 22.2142857,44.5714286" id="Fill-1" fill="#FFF200"></path>
|
9 |
+
<path d="M22.1428571,45 C34.3571429,45 44.2857143,34.9285714 44.2857143,22.5 C44.2857143,10.0714286 34.3571429,0 22.1428571,0 C9.92857143,0 0,10.0714286 0,22.5 C0,34.9285714 9.92857143,45 22.1428571,45 L22.1428571,45 L22.1428571,45 L22.1428571,45 L22.1428571,45 Z" id="Stroke-2" stroke="#000000" stroke-width="2"></path>
|
10 |
+
<path d="M16,31.8571429 L20.2857143,31.8571429 L26.2142857,17.2142857 L21.7857143,17.2142857 L19.9285714,21.8571429 C19.3571429,23.3571429 18.7142857,25.0714286 18.1428571,26.5 L18.1428571,26.5 C17.6428571,25 17.0714286,23.4285714 16.5,21.8571429 L14.7857143,17.1428571 L10,17.1428571 L16,31.8571429 L16,31.8571429 L16,31.8571429 L16,31.8571429 L16,31.8571429 Z M27.7142857,31.8571429 L32.2142857,31.8571429 L32.2142857,17.2142857 L27.7142857,17.2142857 L27.7142857,31.8571429 L27.7142857,31.8571429 L27.7142857,31.8571429 L27.7142857,31.8571429 Z" id="Fill-4" fill="#000000"></path>
|
11 |
+
<polygon id="Fill-5" fill="#000000" points="27.7100067 15.2142857 32.2100067 15.2142857 32.2100067 10.7142857 27.7100067 10.7142857"></polygon>
|
12 |
+
<path d="M52.1428571,32.1428571 L54.1428571,32.1428571 L54.1428571,25.7142857 L52.1428571,25.7142857 L52.1428571,32.1428571 L52.1428571,32.1428571 L52.1428571,32.1428571 L52.1428571,32.1428571 Z M55.7857143,32.1428571 L57.7857143,32.1428571 L57.7857143,27.7857143 C58.1428571,27.5 58.6428571,27.2142857 59.1428571,27.2142857 C59.4285714,27.2142857 59.6428571,27.2857143 59.8571429,27.5 C60,27.7142857 60.0714286,27.9285714 60.0714286,28.4285714 L60.0714286,32.1428571 L62.0714286,32.1428571 L62.0714286,28.1428571 C62.0714286,27.2142857 61.9285714,26.6428571 61.5,26.2142857 C61.0714286,25.7857143 60.5,25.5714286 59.7857143,25.5714286 C59,25.5714286 58.2857143,25.9285714 57.7857143,26.2857143 L57.7857143,26.2857143 L57.7857143,25.7142857 L55.7857143,25.7142857 L55.7857143,32.1428571 L55.7857143,32.1428571 L55.7857143,32.1428571 L55.7857143,32.1428571 L55.7857143,32.1428571 Z M64.7142857,31.6428571 C65.1428571,32.0714286 65.7142857,32.2857143 66.3571429,32.2857143 C66.9285714,32.2857143 67.5,32.1428571 67.7857143,31.9285714 L67.7857143,30.3571429 C67.5,30.5 67.1428571,30.6428571 66.8571429,30.6428571 C66.2857143,30.6428571 66.1428571,30.1428571 66.1428571,29.5714286 L66.1428571,27.4285714 L67.8571429,27.4285714 L67.8571429,25.7142857 L66.1428571,25.7142857 L66.1428571,23.7142857 L64.1428571,24.0714286 L64.1428571,25.7142857 L63.0714286,25.7142857 L63.0714286,27.3571429 L64.1428571,27.3571429 L64.1428571,29.7142857 C64.1428571,30.7857143 64.3571429,31.2857143 64.7142857,31.6428571 L64.7142857,31.6428571 L64.7142857,31.6428571 L64.7142857,31.6428571 L64.7142857,31.6428571 Z M75,29.4285714 C75,29.2857143 75.0714286,29 75.0714286,28.7142857 C75.0714286,26.5714286 73.5714286,25.5 72,25.5 C70.2142857,25.5 68.6428571,26.8571429 68.6428571,28.9285714 C68.6428571,30.9285714 70.1428571,32.2857143 72.2857143,32.2857143 C73.1428571,32.2857143 74.1428571,32.0714286 74.7142857,31.7142857 L74.7142857,30.0714286 C74,30.5 73.2142857,30.7857143 72.5,30.7857143 C71.5714286,30.7857143 70.8571429,30.3571429 70.6428571,29.5 L75,29.5 L75,29.4285714 L75,29.4285714 L75,29.4285714 L75,29.4285714 Z M71.9285714,27.0714286 C72.5714286,27.0714286 73.0714286,27.5 73.2142857,28.2142857 L70.6428571,28.2142857 C70.7142857,27.5 71.2857143,27.0714286 71.9285714,27.0714286 L71.9285714,27.0714286 L71.9285714,27.0714286 L71.9285714,27.0714286 L71.9285714,27.0714286 Z M76.2857143,32.1428571 L78.2857143,32.1428571 L78.2857143,22.1428571 L76.2857143,22.1428571 L76.2857143,32.1428571 L76.2857143,32.1428571 L76.2857143,32.1428571 L76.2857143,32.1428571 Z M79.9285714,32.1428571 L81.9285714,32.1428571 L81.9285714,22.1428571 L79.9285714,22.1428571 L79.9285714,32.1428571 L79.9285714,32.1428571 L79.9285714,32.1428571 L79.9285714,32.1428571 Z M83.5714286,32.1428571 L85.5714286,32.1428571 L85.5714286,25.7142857 L83.5714286,25.7142857 L83.5714286,32.1428571 L83.5714286,32.1428571 L83.5714286,32.1428571 L83.5714286,32.1428571 Z M87.7857143,34.7142857 C88.3571429,35 89.1428571,35.2142857 90,35.2142857 C92.0714286,35.2142857 93.4285714,34.0714286 93.4285714,32.0714286 L93.4285714,25.7142857 L91.8571429,26 C91.4285714,25.7857143 90.8571429,25.6428571 90.2142857,25.6428571 C88.2142857,25.6428571 86.8571429,27.1428571 86.8571429,29 C86.8571429,30.9285714 88.2857143,32.1428571 89.8571429,32.1428571 C90.4285714,32.1428571 91,32 91.3571429,31.7142857 L91.3571429,31.7142857 L91.3571429,32.0714286 C91.3571429,33 90.7857143,33.5 89.7857143,33.5 C89.0714286,33.5 88.3571429,33.2857143 87.7142857,32.8571429 L87.7142857,34.7142857 L87.7857143,34.7142857 L87.7857143,34.7142857 L87.7857143,34.7142857 L87.7857143,34.7142857 Z M88.9285714,28.8571429 C88.9285714,28 89.4285714,27.2857143 90.4285714,27.2857143 C90.7857143,27.2857143 91.1428571,27.3571429 91.4285714,27.5 L91.4285714,30.2142857 C91.1428571,30.3571429 90.7857143,30.5 90.4285714,30.5 C89.5,30.5 88.9285714,29.7857143 88.9285714,28.8571429 L88.9285714,28.8571429 L88.9285714,28.8571429 L88.9285714,28.8571429 L88.9285714,28.8571429 Z M101.071429,29.4285714 C101.071429,29.2857143 101.142857,29 101.142857,28.7142857 C101.142857,26.5714286 99.6428571,25.5 98.0714286,25.5 C96.2857143,25.5 94.7142857,26.8571429 94.7142857,28.9285714 C94.7142857,30.9285714 96.2142857,32.2857143 98.3571429,32.2857143 C99.2142857,32.2857143 100.142857,32.0714286 100.785714,31.7142857 L100.785714,30.0714286 C100.071429,30.5 99.2857143,30.7857143 98.5714286,30.7857143 C97.6428571,30.7857143 96.9285714,30.3571429 96.7142857,29.5 L101.071429,29.5 L101.071429,29.4285714 L101.071429,29.4285714 L101.071429,29.4285714 L101.071429,29.4285714 Z M98,27.0714286 C98.6428571,27.0714286 99.1428571,27.5 99.2857143,28.2142857 L96.7142857,28.2142857 C96.8571429,27.5 97.4285714,27.0714286 98,27.0714286 L98,27.0714286 L98,27.0714286 L98,27.0714286 L98,27.0714286 Z M102.428571,32.1428571 L104.428571,32.1428571 L104.428571,27.7857143 C104.785714,27.5 105.285714,27.2142857 105.785714,27.2142857 C106.071429,27.2142857 106.285714,27.2857143 106.5,27.5 C106.642857,27.7142857 106.714286,27.9285714 106.714286,28.4285714 L106.714286,32.1428571 L108.714286,32.1428571 L108.714286,28.1428571 C108.714286,27.2142857 108.571429,26.6428571 108.142857,26.2142857 C107.714286,25.7857143 107.142857,25.5714286 106.428571,25.5714286 C105.642857,25.5714286 104.928571,25.9285714 104.428571,26.2857143 L104.428571,26.2857143 L104.428571,25.7142857 L102.428571,25.7142857 L102.428571,32.1428571 L102.428571,32.1428571 L102.428571,32.1428571 L102.428571,32.1428571 L102.428571,32.1428571 Z M109.928571,28.9285714 C109.928571,30.8571429 111.428571,32.2857143 113.5,32.2857143 C114.214286,32.2857143 115,32.1428571 115.642857,31.7857143 L115.642857,30 C115.071429,30.4285714 114.357143,30.6428571 113.785714,30.6428571 C112.714286,30.6428571 112,29.9285714 112,29 C112,28 112.714286,27.2857143 113.785714,27.2857143 C114.428571,27.2857143 115,27.5 115.571429,27.8571429 L115.571429,26 C115.071429,25.7142857 114.357143,25.5714286 113.642857,25.5714286 C111.571429,25.5714286 109.928571,26.9285714 109.928571,28.9285714 L109.928571,28.9285714 L109.928571,28.9285714 L109.928571,28.9285714 L109.928571,28.9285714 Z M123,29.4285714 C123,29.2857143 123.071429,29 123.071429,28.7142857 C123.071429,26.5714286 121.571429,25.5 120,25.5 C118.214286,25.5 116.642857,26.8571429 116.642857,28.9285714 C116.642857,30.9285714 118.142857,32.2857143 120.285714,32.2857143 C121.142857,32.2857143 122.142857,32.0714286 122.714286,31.7142857 L122.714286,30.0714286 C122,30.5 121.214286,30.7857143 120.5,30.7857143 C119.571429,30.7857143 118.857143,30.3571429 118.642857,29.5 L123,29.5 L123,29.4285714 L123,29.4285714 L123,29.4285714 L123,29.4285714 Z M119.928571,27.0714286 C120.571429,27.0714286 121.071429,27.5 121.214286,28.2142857 L118.571429,28.2142857 C118.785714,27.5 119.285714,27.0714286 119.928571,27.0714286 L119.928571,27.0714286 L119.928571,27.0714286 L119.928571,27.0714286 L119.928571,27.0714286 Z" id="Fill-6" fill="#000000"></path>
|
13 |
+
<path d="M52.1428571,24.8571429 L54.1428571,24.8571429 L54.1428571,22.8571429 L52.1428571,22.8571429 L52.1428571,24.8571429 L52.1428571,24.8571429 L52.1428571,24.8571429 L52.1428571,24.8571429 Z M83.5714286,24.8571429 L85.5714286,24.8571429 L85.5714286,22.8571429 L83.5714286,22.8571429 L83.5714286,24.8571429 L83.5714286,24.8571429 L83.5714286,24.8571429 L83.5714286,24.8571429 Z" id="Fill-7" fill="#000000"></path>
|
14 |
+
<path d="M54.7857143,20.7142857 L56.7142857,20.7142857 L59.3571429,14.2857143 L57.3571429,14.2857143 L56.5714286,16.3571429 C56.2857143,17 56,17.7857143 55.7857143,18.4285714 L55.7857143,18.4285714 C55.5714286,17.7857143 55.2857143,17.0714286 55.0714286,16.3571429 L54.2142857,14.2857143 L52.1428571,14.2857143 L54.7857143,20.7142857 L54.7857143,20.7142857 L54.7857143,20.7142857 L54.7857143,20.7142857 L54.7857143,20.7142857 Z M60.2142857,20.7142857 L62.2142857,20.7142857 L62.2142857,14.2857143 L60.2142857,14.2857143 L60.2142857,20.7142857 L60.2142857,20.7142857 L60.2142857,20.7142857 L60.2142857,20.7142857 Z M63.5,17.6428571 C63.5,19.6428571 64.9285714,20.8571429 66.5,20.8571429 C67.1428571,20.8571429 67.7142857,20.6428571 68.1428571,20.3571429 L68.1428571,20.3571429 L68.1428571,20.7142857 L70.0714286,20.7142857 L70.0714286,10.7142857 L68.0714286,10.7142857 L68.0714286,14.3571429 L68.0714286,14.3571429 C67.7142857,14.2142857 67.3571429,14.1428571 66.8571429,14.1428571 C64.9285714,14.1428571 63.5,15.5714286 63.5,17.6428571 L63.5,17.6428571 L63.5,17.6428571 L63.5,17.6428571 L63.5,17.6428571 Z M65.5,17.5714286 C65.5,16.5714286 66.0714286,15.7857143 67.1428571,15.7857143 C67.5714286,15.7857143 67.8571429,15.8571429 68.1428571,16 L68.1428571,18.8571429 C67.8571429,19.0714286 67.4285714,19.2142857 67,19.2142857 C66,19.2142857 65.5,18.5 65.5,17.5714286 L65.5,17.5714286 L65.5,17.5714286 L65.5,17.5714286 L65.5,17.5714286 Z M77.7857143,18 C77.7857143,17.8571429 77.8571429,17.5714286 77.8571429,17.2857143 C77.8571429,15.1428571 76.3571429,14.0714286 74.7857143,14.0714286 C73,14.0714286 71.4285714,15.4285714 71.4285714,17.5 C71.4285714,19.5 72.9285714,20.8571429 75.0714286,20.8571429 C75.9285714,20.8571429 76.9285714,20.6428571 77.5,20.2857143 L77.5,18.6428571 C76.7857143,19.0714286 76,19.3571429 75.2857143,19.3571429 C74.3571429,19.3571429 73.6428571,18.9285714 73.4285714,18.0714286 L77.7857143,18.0714286 L77.7857143,18 L77.7857143,18 L77.7857143,18 L77.7857143,18 Z M74.7142857,15.6428571 C75.3571429,15.6428571 75.8571429,16.0714286 76,16.7857143 L73.4285714,16.7857143 C73.5714286,16.0714286 74.0714286,15.6428571 74.7142857,15.6428571 L74.7142857,15.6428571 L74.7142857,15.6428571 L74.7142857,15.6428571 L74.7142857,15.6428571 Z M80.7142857,17.5 C80.7142857,16.5714286 81.4285714,15.8571429 82.2857143,15.8571429 C83.1428571,15.8571429 83.8571429,16.5714286 83.8571429,17.5 C83.8571429,18.4285714 83.1428571,19.1428571 82.2857143,19.1428571 C81.4285714,19.1428571 80.7142857,18.4285714 80.7142857,17.5 L80.7142857,17.5 L80.7142857,17.5 L80.7142857,17.5 L80.7142857,17.5 Z M78.7142857,17.5 C78.7142857,19.4285714 80.2142857,20.8571429 82.2857143,20.8571429 C84.3571429,20.8571429 85.8571429,19.3571429 85.8571429,17.5 C85.8571429,15.6428571 84.3571429,14.1428571 82.2857143,14.1428571 C80.2142857,14.1428571 78.7142857,15.5714286 78.7142857,17.5 L78.7142857,17.5 L78.7142857,17.5 L78.7142857,17.5 L78.7142857,17.5 Z" id="Fill-8" fill="#000000"></path>
|
15 |
+
<polygon id="Fill-9" fill="#000000" points="60.2100067 13.4285714 62.2100067 13.4285714 62.2100067 11.4285714 60.2100067 11.4285714"></polygon>
|
16 |
+
</g>
|
17 |
+
</g>
|
18 |
+
</g>
|
19 |
+
</g>
|
20 |
+
</svg>
|
includes/fp-api.php
CHANGED
@@ -377,6 +377,148 @@ class FV_Wordpress_Flowplayer_Plugin
|
|
377 |
return version_compare( $GLOBALS['wp_version'], $version. 'alpha', '>=' );
|
378 |
}
|
379 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
380 |
|
381 |
|
382 |
}
|
377 |
return version_compare( $GLOBALS['wp_version'], $version. 'alpha', '>=' );
|
378 |
}
|
379 |
|
380 |
+
|
381 |
+
|
382 |
+
|
383 |
+
//search for plugin path with {slug}.php
|
384 |
+
public static function get_plugin_path( $slug ){
|
385 |
+
$aPluginSlugs = get_transient('plugin_slugs');
|
386 |
+
$aPluginSlugs = is_array($aPluginSlugs) ? $aPluginSlugs : array( $slug.'/'.$slug.'.php');
|
387 |
+
$aActivePlugins = get_option('active_plugins');
|
388 |
+
$aInactivePlugins = array_diff($aPluginSlugs,$aActivePlugins);
|
389 |
+
|
390 |
+
if( !$aPluginSlugs )
|
391 |
+
return false;
|
392 |
+
|
393 |
+
foreach( $aActivePlugins as $item ){
|
394 |
+
if( stripos($item,$slug.'.php') !== false && !is_wp_error(validate_plugin($item)) )
|
395 |
+
return $item;
|
396 |
+
}
|
397 |
+
|
398 |
+
$sPluginFolder = plugin_dir_path( dirname( dirname(__FILE__) ) );
|
399 |
+
foreach( $aInactivePlugins as $item ){
|
400 |
+
if( stripos($item,$slug.'.php') !== false && file_exists($sPluginFolder.$item) )
|
401 |
+
return $item;
|
402 |
+
}
|
403 |
+
|
404 |
+
return false;
|
405 |
+
}
|
406 |
+
|
407 |
+
|
408 |
+
|
409 |
+
|
410 |
+
public static function install_form_text( $html, $name ) {
|
411 |
+
$tag = stripos($html,'</h3>') !== false ? 'h3' : 'h2';
|
412 |
+
$html = preg_replace( '~<'.$tag.'.*?</'.$tag.'>~', '<'.$tag.'>'.$name.' auto-installation</'.$tag.'>', $html );
|
413 |
+
$html = preg_replace( '~(<input[^>]*?type="submit"[^>]*?>)~', '$1 <a href="'.admin_url('options-general.php?page=fvplayer').'">Skip the '.$name.' install</a>', $html );
|
414 |
+
return $html;
|
415 |
+
}
|
416 |
+
|
417 |
+
|
418 |
+
|
419 |
+
|
420 |
+
public static function install_plugin( $name, $plugin_package, $plugin_basename, $download_url, $settings_url, $option, $nonce ) { // 'FV Player Pro', 'fv-player-pro', '/wp-admin/options-general.php?page=fvplayer', download URL (perhaps from the license), settings URL (use admin_url(...), should also contain some GET which will make it install the extension if present) and option where result message should be stored and a nonce which should be passed
|
421 |
+
global $hook_suffix;
|
422 |
+
|
423 |
+
$plugin_path = self::get_plugin_path( str_replace( '_', '-', $plugin_package ) );
|
424 |
+
if( !defined('PHPUnitTestMode') && $plugin_path ) {
|
425 |
+
$result = activate_plugin( $plugin_path, $settings_url );
|
426 |
+
if ( is_wp_error( $result ) ) {
|
427 |
+
update_option( $option, $name.' extension activation error: '.$result->get_error_message() );
|
428 |
+
return false;
|
429 |
+
} else {
|
430 |
+
update_option( $option, $name.' extension activated' );
|
431 |
+
return true; // already installed
|
432 |
+
}
|
433 |
+
}
|
434 |
+
|
435 |
+
$plugin_basename = $plugin_path ? $plugin_path : $plugin_basename;
|
436 |
+
|
437 |
+
$url = wp_nonce_url( $settings_url, $nonce, 'nonce_'.$nonce );
|
438 |
+
|
439 |
+
set_current_screen();
|
440 |
+
|
441 |
+
ob_start();
|
442 |
+
if ( false === ( $creds = request_filesystem_credentials( $url, '', false, false, false ) ) ) {
|
443 |
+
$form = ob_get_clean();
|
444 |
+
include( ABSPATH . 'wp-admin/admin-header.php' );
|
445 |
+
echo self::install_form_text($form, $name);
|
446 |
+
include( ABSPATH . 'wp-admin/admin-footer.php' );
|
447 |
+
die;
|
448 |
+
}
|
449 |
+
|
450 |
+
if ( ! WP_Filesystem( $creds ) ) {
|
451 |
+
ob_start();
|
452 |
+
request_filesystem_credentials( $url, $method, true, false, false );
|
453 |
+
$form = ob_get_clean();
|
454 |
+
include( ABSPATH . 'wp-admin/admin-header.php' );
|
455 |
+
echo self::install_form_text($form, $name);
|
456 |
+
include( ABSPATH . 'wp-admin/admin-footer.php' );
|
457 |
+
die;
|
458 |
+
}
|
459 |
+
|
460 |
+
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
461 |
+
|
462 |
+
$result = true;
|
463 |
+
|
464 |
+
if( !$plugin_path || is_wp_error(validate_plugin($plugin_basename)) ) {
|
465 |
+
$sTaskDone = $name.__(' extension installed successfully!', 'fv-wordpress-flowplayer');
|
466 |
+
|
467 |
+
echo '<div style="display: none;">';
|
468 |
+
$objInstaller = new Plugin_Upgrader();
|
469 |
+
$objInstaller->install( $download_url );
|
470 |
+
echo '</div>';
|
471 |
+
wp_cache_flush();
|
472 |
+
|
473 |
+
if ( is_wp_error( $objInstaller->skin->result ) ) {
|
474 |
+
update_option( $option, $name.__(' extension install failed - ', 'fv-wordpress-flowplayer') . $objInstaller->skin->result->get_error_message() );
|
475 |
+
$result = false;
|
476 |
+
} else {
|
477 |
+
if ( $objInstaller->plugin_info() ) {
|
478 |
+
$plugin_basename = $objInstaller->plugin_info();
|
479 |
+
}
|
480 |
+
|
481 |
+
$activate = activate_plugin( $plugin_basename );
|
482 |
+
if ( is_wp_error( $activate ) ) {
|
483 |
+
update_option( $option, $name.__(' extension install failed - ', 'fv-wordpress-flowplayer') . $activate->get_error_message());
|
484 |
+
$result = false;
|
485 |
+
}
|
486 |
+
}
|
487 |
+
|
488 |
+
} else if( $plugin_path ) {
|
489 |
+
$sTaskDone = $name.__(' extension upgraded successfully!', 'fv-wordpress-flowplayer');
|
490 |
+
|
491 |
+
echo '<div style="display: none;">';
|
492 |
+
$objInstaller = new Plugin_Upgrader();
|
493 |
+
$objInstaller->upgrade( $plugin_path );
|
494 |
+
echo '</div></div>'; // explanation: extra closing tag just to be safe (in case of "The plugin is at the latest version.")
|
495 |
+
wp_cache_flush();
|
496 |
+
|
497 |
+
if ( is_wp_error( $objInstaller->skin->result ) ) {
|
498 |
+
update_option( $option, $name.' extension upgrade failed - '.$objInstaller->skin->result->get_error_message() );
|
499 |
+
$result = false;
|
500 |
+
} else {
|
501 |
+
if ( $objInstaller->plugin_info() ) {
|
502 |
+
$plugin_basename = $objInstaller->plugin_info();
|
503 |
+
}
|
504 |
+
|
505 |
+
$activate = activate_plugin( $plugin_basename );
|
506 |
+
if ( is_wp_error( $activate ) ) {
|
507 |
+
update_option( $option, $name.' Pro extension upgrade failed - '.$activate->get_error_message() );
|
508 |
+
$result = false;
|
509 |
+
}
|
510 |
+
}
|
511 |
+
|
512 |
+
}
|
513 |
+
|
514 |
+
if( $result ) {
|
515 |
+
update_option( $option, $sTaskDone );
|
516 |
+
echo "<script>location.href='".$settings_url."';</script>";
|
517 |
+
}
|
518 |
+
|
519 |
+
return $result;
|
520 |
+
}
|
521 |
+
|
522 |
|
523 |
|
524 |
}
|
models/flowplayer.php
CHANGED
@@ -162,7 +162,7 @@ class flowplayer extends FV_Wordpress_Flowplayer_Plugin {
|
|
162 |
$key = (!empty($options['key']) ? $options['key'] : '');
|
163 |
$name = (!empty($options['name']) ? $options['name'] : '');
|
164 |
$help = (!empty($options['help']) ? $options['help'] : '');
|
165 |
-
$more = (!empty($options['more']) ? $options['more'] : '');
|
166 |
|
167 |
if (!$key || !$name) {
|
168 |
throw new Exception('Both, "name" and "key" options need to be set for _get_checkbox()!');
|
@@ -173,7 +173,7 @@ class flowplayer extends FV_Wordpress_Flowplayer_Plugin {
|
|
173 |
$name = func_get_arg(0);
|
174 |
$key = func_get_arg(1);
|
175 |
$help = ($args_num >= 3 ? func_get_arg(2) : false);
|
176 |
-
$more = ($args_num >= 4 ? func_get_arg(3) : false);
|
177 |
} else {
|
178 |
throw new Exception('Invalid number of arguments passed to the _get_checkbox() method!');
|
179 |
}
|
@@ -615,15 +615,16 @@ class flowplayer extends FV_Wordpress_Flowplayer_Plugin {
|
|
615 |
}
|
616 |
|
617 |
|
618 |
-
public function _get_option($key) {
|
|
|
619 |
|
620 |
$value = false;
|
621 |
if( is_array($key) && count($key) === 2) {
|
622 |
-
if( isset($
|
623 |
-
$value = $
|
624 |
}
|
625 |
-
} elseif( isset($
|
626 |
-
$value = $
|
627 |
}
|
628 |
|
629 |
if( is_string($value) ) $value = trim($value);
|
@@ -641,8 +642,8 @@ class flowplayer extends FV_Wordpress_Flowplayer_Plugin {
|
|
641 |
}
|
642 |
|
643 |
|
644 |
-
public function _set_conf() {
|
645 |
-
$aNewOptions = $_POST;
|
646 |
$sKey = $aNewOptions['key'];
|
647 |
|
648 |
// make sure the preset Skin properties are not over-written
|
162 |
$key = (!empty($options['key']) ? $options['key'] : '');
|
163 |
$name = (!empty($options['name']) ? $options['name'] : '');
|
164 |
$help = (!empty($options['help']) ? $options['help'] : '');
|
165 |
+
$more = (!empty($options['more']) ? $options['more'] : '');
|
166 |
|
167 |
if (!$key || !$name) {
|
168 |
throw new Exception('Both, "name" and "key" options need to be set for _get_checkbox()!');
|
173 |
$name = func_get_arg(0);
|
174 |
$key = func_get_arg(1);
|
175 |
$help = ($args_num >= 3 ? func_get_arg(2) : false);
|
176 |
+
$more = ($args_num >= 4 ? func_get_arg(3) : false);
|
177 |
} else {
|
178 |
throw new Exception('Invalid number of arguments passed to the _get_checkbox() method!');
|
179 |
}
|
615 |
}
|
616 |
|
617 |
|
618 |
+
public function _get_option($key) {
|
619 |
+
$conf = $this->conf;
|
620 |
|
621 |
$value = false;
|
622 |
if( is_array($key) && count($key) === 2) {
|
623 |
+
if( isset($conf[$key[0]]) && isset($conf[$key[0]][$key[1]]) ) {
|
624 |
+
$value = $conf[$key[0]][$key[1]];
|
625 |
}
|
626 |
+
} elseif( isset($conf[$key]) ) {
|
627 |
+
$value = $conf[$key];
|
628 |
}
|
629 |
|
630 |
if( is_string($value) ) $value = trim($value);
|
642 |
}
|
643 |
|
644 |
|
645 |
+
public function _set_conf( $aNewOptions = false ) {
|
646 |
+
if( !$aNewOptions ) $aNewOptions = $_POST;
|
647 |
$sKey = $aNewOptions['key'];
|
648 |
|
649 |
// make sure the preset Skin properties are not over-written
|
models/video-intelligence.php
ADDED
@@ -0,0 +1,287 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class FV_Player_video_intelligence_Installer {
|
4 |
+
|
5 |
+
var $notice = false;
|
6 |
+
var $notice_status = false;
|
7 |
+
|
8 |
+
function __construct() {
|
9 |
+
add_action( 'admin_menu', array( $this, 'start' ), 8 ) ;
|
10 |
+
add_action( 'admin_init', array( $this, 'settings_register' ) ) ;
|
11 |
+
add_action( 'admin_notices', array( $this, 'show_notice' ) );
|
12 |
+
add_action( 'fv_player_admin_settings_tabs', array( $this, 'settings_tab' ) );
|
13 |
+
add_action( 'wp_ajax_fv-player-vi-add', array( $this, 'settings_remove' ) );
|
14 |
+
add_action( 'wp_ajax_fv-player-vi-remove', array( $this, 'settings_remove' ) );
|
15 |
+
}
|
16 |
+
|
17 |
+
function screen_account() {
|
18 |
+
global $fv_fp;
|
19 |
+
|
20 |
+
$jwt = $fv_fp->_get_option(array('addon-video-intelligence', 'jwt'));
|
21 |
+
wp_nonce_field('fv_player_vi_install','nonce_fv_player_vi_install');
|
22 |
+
?>
|
23 |
+
|
24 |
+
<table class="form-table2" style="margin: 5px; ">
|
25 |
+
<tbody>
|
26 |
+
<?php
|
27 |
+
$data = explode( '.', $jwt );
|
28 |
+
$data = !empty($data[1]) ? json_decode( base64_decode($data[1]) ) : false;
|
29 |
+
|
30 |
+
if( $jwt && $data && !empty($data->exp) && $data->exp > time() ) : ?>
|
31 |
+
<tr>
|
32 |
+
<td class="first"></td>
|
33 |
+
<td>
|
34 |
+
<p>We found an existing video intelligence token. Click below to install FV Player video intelligence plugin.</p>
|
35 |
+
<input type="submit" name="fv_player_vi_install" value="<?php _e('Install', 'fv-wordpress-flowplayer'); ?>" class="button-primary">
|
36 |
+
<input type="submit" name="fv_player_vi_reset" value="<?php _e('Reset', 'fv-wordpress-flowplayer'); ?>" class="button">
|
37 |
+
</td>
|
38 |
+
</tr>
|
39 |
+
<?php endif; ?>
|
40 |
+
<?php if( !$jwt || empty($data->exp) || $data->exp < time() ) : ?>
|
41 |
+
<tr>
|
42 |
+
<td class="first"><label for="vi_login"><?php _e('Login', 'fv-wordpress-flowplayer'); ?>:</label></td>
|
43 |
+
<td>
|
44 |
+
<p class="description">
|
45 |
+
<input type="text" name="vi_login" id="vi_login" class="medium" />
|
46 |
+
</p>
|
47 |
+
</td>
|
48 |
+
</tr>
|
49 |
+
<tr>
|
50 |
+
<td><label for="vi_pass"><?php _e('Password', 'fv-wordpress-flowplayer'); ?>:</label></td>
|
51 |
+
<td>
|
52 |
+
<p class="description">
|
53 |
+
<input type="password" name="vi_pass" id="vi_pass" class="medium" />
|
54 |
+
</p>
|
55 |
+
</td>
|
56 |
+
</tr>
|
57 |
+
<tr>
|
58 |
+
<td>
|
59 |
+
</td>
|
60 |
+
<td>
|
61 |
+
<input type="submit" name="fv_player_vi_install" value="<?php _e('Sign in', 'fv-wordpress-flowplayer'); ?>" class="button-primary">
|
62 |
+
</td>
|
63 |
+
</tr>
|
64 |
+
<tr>
|
65 |
+
<td></td>
|
66 |
+
<td>
|
67 |
+
<p><a href="mailto:support@vi.ai?Subject=Issues%20with%20account%20activation%20for%20<?php echo urlencode(home_url()); ?>">I'm having issues with the account activation</a></p>
|
68 |
+
</td>
|
69 |
+
</tr>
|
70 |
+
<?php endif; ?>
|
71 |
+
</tbody>
|
72 |
+
</table>
|
73 |
+
|
74 |
+
|
75 |
+
|
76 |
+
<?php
|
77 |
+
}
|
78 |
+
|
79 |
+
function screen_ad() {
|
80 |
+
global $fv_fp;
|
81 |
+
$current_user = wp_get_current_user();
|
82 |
+
|
83 |
+
if( $fv_fp->_get_option('hide-tab-video-intelligence') && !class_exists('FV_Player_Video_Intelligence') ) : ?>
|
84 |
+
<style>
|
85 |
+
a[href$=postbox-container-tab_video_intelligence] { display: none }
|
86 |
+
#fv_flowplayer_video_intelligence { display: none }
|
87 |
+
#fv_flowplayer_video_intelligence_account { display: none }
|
88 |
+
#fv_flowplayer_video_intelligence_revival { display: block }
|
89 |
+
</style>
|
90 |
+
<?php else : ?>
|
91 |
+
<style>
|
92 |
+
#fv_flowplayer_video_intelligence_revival { display: none }
|
93 |
+
</style>
|
94 |
+
<?php endif;
|
95 |
+
|
96 |
+
$jwt = $fv_fp->_get_option(array('addon-video-intelligence', 'jwt'));
|
97 |
+
wp_nonce_field('fv_player_vi_install','nonce_fv_player_vi_install');
|
98 |
+
?>
|
99 |
+
<table class="form-table2" style="margin: 5px; ">
|
100 |
+
<tbody>
|
101 |
+
<tr>
|
102 |
+
<td class="first">
|
103 |
+
<img src="<?php echo flowplayer::get_plugin_url(); ?>/images/vi-logo.svg" alt="video intelligence logo" />
|
104 |
+
<a href="https://vi.ai/publisher-video-monetization/?aid=foliovision&email=<?php echo $current_user->user_email; ?>&url=<?php echo home_url(); ?>&invtype=3#publisher_signup" target="_blank" class="button vi-register">Learn More</a>
|
105 |
+
</td>
|
106 |
+
<td>
|
107 |
+
<p>Video content and video advertising – powered by <strong>video intelligence</strong></p>
|
108 |
+
<p>Advertisers pay more for video advertising when it's matched with video content. This new video player will insert both on your page. It increases time on site, and commands a higher CPM than display advertising.</p>
|
109 |
+
<p>You'll see video content that is matched to your sites keywords straight away. A few days after activation you'll begin to receive revenue from advertising served before this video content.</p>
|
110 |
+
<ul>
|
111 |
+
<li>The set up takes only a few minutes</li>
|
112 |
+
<li>Up to 10x higher CPM than traditional display advertising</li>
|
113 |
+
<li>Users spend longer on your site thanks to professional video content</li>
|
114 |
+
</ul>
|
115 |
+
</td>
|
116 |
+
</tr>
|
117 |
+
<tr>
|
118 |
+
<td></td>
|
119 |
+
<td>
|
120 |
+
<p>By clicking sign up you agree to send your current domain, email and affiliate ID to video intelligence.</p>
|
121 |
+
<a href="https://vi.ai/publisher-video-monetization/?aid=foliovision&email=<?php echo $current_user->user_email; ?>&url=<?php echo home_url(); ?>&invtype=3#publisher_signup" target="_blank" class="button vi-register">Learn More or Create an Account</a>
|
122 |
+
</td>
|
123 |
+
</tr>
|
124 |
+
</tbody>
|
125 |
+
</table>
|
126 |
+
|
127 |
+
<?php
|
128 |
+
}
|
129 |
+
|
130 |
+
function settings_hide() {
|
131 |
+
?>
|
132 |
+
<input id="fv-player-vi-remove" type="checkbox"> <label for="fv-player-vi-remove"><?php _e('Hide the vi Ads tab', 'fv-wordpress-flowplayer'); ?></label>
|
133 |
+
<script>
|
134 |
+
jQuery( function($) {
|
135 |
+
$('#fv-player-vi-remove').click( function() {
|
136 |
+
$.post(ajaxurl, {action:'fv-player-vi-remove'}, function() {
|
137 |
+
$('#fv-player-vi-give-back').prop('checked',false);
|
138 |
+
$('[href=#postbox-container-tab_video_intelligence]').hide();
|
139 |
+
$('#fv_flowplayer_video_intelligence').hide();
|
140 |
+
$('[href=#postbox-container-tab_video_ads]').click();
|
141 |
+
$('#fv_flowplayer_video_intelligence_revival').show();
|
142 |
+
});
|
143 |
+
|
144 |
+
});
|
145 |
+
});
|
146 |
+
</script>
|
147 |
+
<?php
|
148 |
+
}
|
149 |
+
|
150 |
+
function settings_register() {
|
151 |
+
if( !class_exists('FV_Player_Video_Intelligence') ) {
|
152 |
+
add_meta_box( 'fv_flowplayer_video_intelligence', __('video intelligence', 'fv-wordpress-flowplayer'), array( $this, 'screen_ad' ), 'fv_flowplayer_settings_video_intelligence', 'normal' );
|
153 |
+
add_meta_box( 'fv_flowplayer_video_intelligence_account', __('Account', 'fv-wordpress-flowplayer'), array( $this, 'screen_account' ), 'fv_flowplayer_settings_video_intelligence', 'normal' );
|
154 |
+
add_meta_box( 'fv_flowplayer_video_intelligence_hide', __('Hide vi Ads', 'fv-wordpress-flowplayer'), array( $this, 'settings_hide' ), 'fv_flowplayer_settings_video_intelligence', 'normal' );
|
155 |
+
add_meta_box( 'fv_flowplayer_video_intelligence_revival', __('Free video intelligence ads', 'fv-wordpress-flowplayer'), array( $this, 'settings_revival' ), 'fv_flowplayer_settings_video_ads', 'normal', 'low' );
|
156 |
+
}
|
157 |
+
}
|
158 |
+
|
159 |
+
function settings_remove() {
|
160 |
+
if( current_user_can('manage_options') ) {
|
161 |
+
global $fv_fp;
|
162 |
+
$aNew = $fv_fp->conf;
|
163 |
+
$aNew['hide-tab-video-intelligence'] = $_POST['action'] == 'fv-player-vi-remove';
|
164 |
+
$fv_fp->_set_conf( $aNew );
|
165 |
+
die();
|
166 |
+
}
|
167 |
+
}
|
168 |
+
|
169 |
+
function settings_revival() {
|
170 |
+
?>
|
171 |
+
<input id="fv-player-vi-give-back" type="checkbox"> <label for="fv-player-vi-give-back"><?php _e('Show the vi Ads tab again', 'fv-wordpress-flowplayer'); ?></label></a>
|
172 |
+
<script>
|
173 |
+
jQuery( function($) {
|
174 |
+
$('#fv-player-vi-give-back').click( function() {
|
175 |
+
$.post(ajaxurl, {action:'fv-player-vi-add'}, function() {
|
176 |
+
$('#fv-player-vi-remove').prop('checked',false);
|
177 |
+
$('[href=#postbox-container-tab_video_intelligence]').show();
|
178 |
+
$('#fv_flowplayer_video_intelligence').show();
|
179 |
+
$('#fv_flowplayer_video_intelligence_account').show();
|
180 |
+
$('[href=#postbox-container-tab_video_intelligence]').click();
|
181 |
+
$('#fv_flowplayer_video_intelligence_revival').hide();
|
182 |
+
});
|
183 |
+
});
|
184 |
+
});
|
185 |
+
</script>
|
186 |
+
<?php
|
187 |
+
}
|
188 |
+
|
189 |
+
function settings_tab( $tabs ) {
|
190 |
+
$tabs[] = array('id' => 'fv_flowplayer_settings_video_intelligence', 'hash' => 'tab_video_intelligence', 'name' => __('vi Ads', 'fv-player-vi') );
|
191 |
+
return $tabs;
|
192 |
+
}
|
193 |
+
|
194 |
+
function show_notice() {
|
195 |
+
if( $this->notice_status ) {
|
196 |
+
echo "<div class='".$this->notice_status."'><p>".$this->notice."</p></div>\n";
|
197 |
+
}
|
198 |
+
}
|
199 |
+
|
200 |
+
function start() {
|
201 |
+
$should_install = false;
|
202 |
+
|
203 |
+
if( current_user_can('install_plugins') && !empty($_POST['vi_login']) && !empty($_POST['vi_pass']) && !empty($_POST['fv_player_vi_install']) ) {
|
204 |
+
check_admin_referer( 'fv_player_vi_install', 'nonce_fv_player_vi_install' );
|
205 |
+
|
206 |
+
remove_action('admin_init', 'fv_player_settings_save', 9);
|
207 |
+
|
208 |
+
$request = wp_remote_get( 'https://dashboard-api.vidint.net/v1/api/widget/settings' );
|
209 |
+
if( is_wp_error($request) ) {
|
210 |
+
$this->notice_status = 'error';
|
211 |
+
$this->notice = "Can't connect to dashboard-api.vidint.net (1)!";
|
212 |
+
return;
|
213 |
+
}
|
214 |
+
|
215 |
+
$body = wp_remote_retrieve_body( $request );
|
216 |
+
|
217 |
+
$data = json_decode( $body );
|
218 |
+
|
219 |
+
if( !$data || empty($data->data) || empty($data->data->loginAPI) ) {
|
220 |
+
$this->notice_status = 'error';
|
221 |
+
$this->notice = "Can't parse settings URLs!";
|
222 |
+
return;
|
223 |
+
}
|
224 |
+
|
225 |
+
|
226 |
+
$request = wp_remote_post( $data->data->loginAPI, array(
|
227 |
+
'headers' => array('Content-Type' => 'application/json;charset=UTF-8'),
|
228 |
+
'body' => json_encode(array( 'email' => $_POST['vi_login'], 'password' => $_POST['vi_pass'] )),
|
229 |
+
'method' => 'POST'
|
230 |
+
));
|
231 |
+
|
232 |
+
if( is_wp_error($request) ) {
|
233 |
+
$this->notice_status = 'error';
|
234 |
+
$this->notice = "Can't connect to dashboard-api.vidint.net (2)!";
|
235 |
+
return;
|
236 |
+
}
|
237 |
+
|
238 |
+
$body = wp_remote_retrieve_body( $request );
|
239 |
+
|
240 |
+
$data = json_decode( $body );
|
241 |
+
|
242 |
+
if( !$data || empty($data->status) || $data->status != 'ok' ) {
|
243 |
+
$this->notice_status = 'error';
|
244 |
+
$this->notice = 'Error logging in to video intelligence account. Please double check that you have filled in the video intelligence signup form and confirmed the account by clicking the link in confirmation email.';
|
245 |
+
return;
|
246 |
+
}
|
247 |
+
|
248 |
+
global $fv_fp;
|
249 |
+
$aNew = $fv_fp->conf;
|
250 |
+
$aNew['addon-video-intelligence'] = array( 'jwt' => $data->data, 'time' => time() );
|
251 |
+
$fv_fp->_set_conf( $aNew );
|
252 |
+
|
253 |
+
$this->notice_status = 'updated';
|
254 |
+
$this->notice = 'video intelligence login successful!';
|
255 |
+
|
256 |
+
// attempt plugin auto install!
|
257 |
+
$should_install = true;
|
258 |
+
}
|
259 |
+
|
260 |
+
else if( current_user_can('install_plugins') && !empty($_REQUEST['fv_player_vi_install']) && wp_verify_nonce( $_REQUEST['nonce_fv_player_vi_install'], 'fv_player_vi_install') ) {
|
261 |
+
$should_install = true;
|
262 |
+
}
|
263 |
+
|
264 |
+
else if( current_user_can('install_plugins') && !empty($_POST['fv_player_vi_reset']) ) {
|
265 |
+
check_admin_referer( 'fv_player_vi_install', 'nonce_fv_player_vi_install' );
|
266 |
+
global $fv_fp;
|
267 |
+
$fv_fp->conf['addon-video-intelligence'] = array();
|
268 |
+
$fv_fp->_set_conf( $fv_fp->conf );
|
269 |
+
$this->notice_status = 'updated';
|
270 |
+
$this->notice = 'video intelligence login reset!';
|
271 |
+
}
|
272 |
+
|
273 |
+
if( $should_install ) {
|
274 |
+
$result = FV_Wordpress_Flowplayer_Plugin::install_plugin(
|
275 |
+
"FV Player video intelligence",
|
276 |
+
"fv-player-video-intelligence",
|
277 |
+
"fv-player-video-intelligence.php",
|
278 |
+
"https://foliovision.com/plugins/public/fv-player-video-intelligence.zip",
|
279 |
+
admin_url('options-general.php?page=fvplayer&fv_player_vi_install=1#postbox-container-tab_video_intelligence'),
|
280 |
+
'fv_wordpress_flowplayer_deferred_notices',
|
281 |
+
'fv_player_vi_install'
|
282 |
+
);
|
283 |
+
}
|
284 |
+
}
|
285 |
+
}
|
286 |
+
|
287 |
+
new FV_Player_video_intelligence_Installer;
|
readme.txt
CHANGED
@@ -18,8 +18,8 @@ FV Player is a free, easy-to-use, and complete solution for embedding FLV or MP4
|
|
18 |
|
19 |
* Remembering video position both both guest users and members
|
20 |
* API for custom video fields
|
21 |
-
*
|
22 |
-
*
|
23 |
* Automated checking of video encoding for logged in admins
|
24 |
* FV Player is a completely responsive WordPress video player.
|
25 |
* Custom start and end screens are built right in. You can use your own custom design before and after the video.
|
@@ -30,6 +30,7 @@ FV Player is a free, easy-to-use, and complete solution for embedding FLV or MP4
|
|
30 |
* 98% Browser coverage. Built-in Flash fallback will get the job done on older browsers.
|
31 |
* Full support for Amazon S3, Cloudfront and other CDN's.
|
32 |
* Totally Brandable. Stop selling YouTube and start selling yourself. Even design your own player.
|
|
|
33 |
|
34 |
To remove our branding and add your own branding and get access to additional pro support, [you can buy your own license here](https://foliovision.com/player/download).
|
35 |
|
@@ -356,6 +357,11 @@ Thank you for being part of the HMTL 5 mobile video revolution!
|
|
356 |
|
357 |
== Changelog ==
|
358 |
|
|
|
|
|
|
|
|
|
|
|
359 |
= 6.5.1 - 2018/04/04 =
|
360 |
|
361 |
* Amazon S3 - Adding URL signature for subtitles
|
18 |
|
19 |
* Remembering video position both both guest users and members
|
20 |
* API for custom video fields
|
21 |
+
* easy AB looped playback for your visitors (great for teaching sites)
|
22 |
+
* improved and more powerful playlists (more playlist features coming soon).
|
23 |
* Automated checking of video encoding for logged in admins
|
24 |
* FV Player is a completely responsive WordPress video player.
|
25 |
* Custom start and end screens are built right in. You can use your own custom design before and after the video.
|
30 |
* 98% Browser coverage. Built-in Flash fallback will get the job done on older browsers.
|
31 |
* Full support for Amazon S3, Cloudfront and other CDN's.
|
32 |
* Totally Brandable. Stop selling YouTube and start selling yourself. Even design your own player.
|
33 |
+
* Supports video intelligence video ads
|
34 |
|
35 |
To remove our branding and add your own branding and get access to additional pro support, [you can buy your own license here](https://foliovision.com/player/download).
|
36 |
|
357 |
|
358 |
== Changelog ==
|
359 |
|
360 |
+
= 6.5.2 - 2018/04/11 =
|
361 |
+
|
362 |
+
* New feature - video intelligence ads
|
363 |
+
* Bugfix - Video position saving - not working when playing HLS in Firefox
|
364 |
+
|
365 |
= 6.5.1 - 2018/04/04 =
|
366 |
|
367 |
* Amazon S3 - Adding URL signature for subtitles
|
test/integration/backend/testSettingsScreen.html
CHANGED
@@ -1,4 +1,3 @@
|
|
1 |
-
|
2 |
<div class="wrap">
|
3 |
<div style="position: absolute; margin-top: 10px; right: 10px;">
|
4 |
<a href="https://foliovision.com/wordpress/plugins/fv-wordpress-flowplayer" target="_blank" title="Documentation"><img alt="visit foliovision" src="//foliovision.com/shared/fv-logo.png" /></a>
|
@@ -48,6 +47,7 @@
|
|
48 |
<a href="#postbox-container-tab_skin" class="nav-tab" style="outline: 0px;">Skin</a>
|
49 |
<a href="#postbox-container-tab_hosting" class="nav-tab" style="outline: 0px;">Hosting</a>
|
50 |
<a href="#postbox-container-tab_actions" class="nav-tab" style="outline: 0px;">Actions</a>
|
|
|
51 |
<a href="#postbox-container-tab_help" class="nav-tab" style="outline: 0px;">Help</a>
|
52 |
<div id="fv_player_js_warning" style=" margin: 8px 40px; display: inline-block; color: darkgrey;" >There Is a Problem with JavaScript.</div>
|
53 |
</h2>
|
@@ -890,7 +890,7 @@ jQuery(document).ready(function($) {
|
|
890 |
<table class="form-table2" style="margin: 5px; ">
|
891 |
<tr>
|
892 |
<td>
|
893 |
-
<input type="button" class="button" value="Convert JW Player shortcodes" style="margin-top: 2ex;" onclick="if( confirm('This converts the [jwplayer] shortcodes into [fvplayer] shortcodes.\n\n Please make sure you backup your database before continuing. You can use revisions to get back to previos versions of your posts as well.') ) location.href='http://example.org/wp-admin/options-general.php?page=fvplayer&convert_jwplayer=
|
894 |
</td>
|
895 |
</tr>
|
896 |
</table>
|
@@ -980,7 +980,7 @@ jQuery(document).ready(function($) {
|
|
980 |
</table>
|
981 |
</div>
|
982 |
</div>
|
983 |
-
</div><input type="hidden" id="closedpostboxesnonce" name="closedpostboxesnonce" value="
|
984 |
</div>
|
985 |
<div id='postbox-container-tab_skin' class='postbox-container' style="">
|
986 |
<div id="normal-sortables" class="meta-box-sortables"><div id="fv_flowplayer_description" class="postbox " >
|
@@ -1001,7 +1001,7 @@ jQuery(document).ready(function($) {
|
|
1001 |
<div class="inside">
|
1002 |
<style id="fv-style-preview"></style>
|
1003 |
<div class="flowplayer-wrapper">
|
1004 |
-
<div id="
|
1005 |
<div class="fp-ratio" style="padding-top: 56.25%"></div>
|
1006 |
<div class='fvp-share-bar'><ul class="fvp-sharing">
|
1007 |
<li><a class="sharing-facebook" href="https://www.facebook.com/sharer/sharer.php?u=" target="_blank">Facebook</a></li>
|
@@ -1101,7 +1101,7 @@ jQuery(document).ready(function($) {
|
|
1101 |
<button type="button" class="handlediv" aria-expanded="true"><span class="screen-reader-text">Toggle panel: Playlist</span><span class="toggle-indicator" aria-hidden="true"></span></button><h2 class='hndle'><span>Playlist</span></h2>
|
1102 |
<div class="inside">
|
1103 |
<div class="flowplayer-wrapper">
|
1104 |
-
<div class="fp-playlist-external fv-playlist-design-2017 fp-playlist-horizontal fp-playlist-has-captions" rel="
|
1105 |
<a href='#' onclick='return false' data-item='{"sources":[{"src":"https:\/\/player.vimeo.com\/external\/196881410.hd.mp4?s=24645ecff21ff60079fc5b7715a97c00f90c6a18&profile_id=174&oauth2_token_id=3501005","type":"video\/mp4"}],"subtitles":[{"srclang":"en","label":"English","src":"http:\/\/example.org\/wp-content\/plugins\/fv-wordpress-flowplayer\/images\/test-subtitles.vtt"}]}'><div style='background-image: url("https://i.vimeocdn.com/video/608654918_295x166.jpg")'></div><h4><span>Foliovision Video</span></h4></a>
|
1106 |
<a href='#' onclick='return false' data-item='{"sources":[{"src":"https:\/\/player.vimeo.com\/external\/224781088.sd.mp4?s=face4dbb990b462826c8e1e43a9c66c6a9bb5585&profile_id=165&oauth2_token_id=3501005","type":"video\/mp4"}]}'><div style='background-image: url("https://i.vimeocdn.com/video/643908843_295x166.jpg")'></div><h4><span>Lapinthrope Extras - Roy Thompson Hall Dance</span></h4></a>
|
1107 |
<a href='#' onclick='return false' data-item='{"sources":[{"src":"https:\/\/player.vimeo.com\/external\/45864857.hd.mp4?s=94fddee594da3258c9e10355f5bad8173c4aee7b&profile_id=113&oauth2_token_id=3501005","type":"video\/mp4"}]}'><div style='background-image: url("https://i.vimeocdn.com/video/319116053_295x166.jpg")'></div><h4><span>Romeo and Juliet Ballet Schloss Kittsee</span></h4></a>
|
@@ -1234,7 +1234,7 @@ Hint: you can click the thumbnails to switch videos in the above player. This pr
|
|
1234 |
<div style="clear: both"></div>
|
1235 |
</div>
|
1236 |
</div>
|
1237 |
-
</div><input type="hidden" id="closedpostboxesnonce" name="closedpostboxesnonce" value="
|
1238 |
</div>
|
1239 |
<div id='postbox-container-tab_hosting' class='postbox-container' style="">
|
1240 |
<div id="normal-sortables" class="meta-box-sortables"><div id="fv_flowplayer_description" class="postbox " >
|
@@ -1332,7 +1332,7 @@ Hint: you can click the thumbnails to switch videos in the above player. This pr
|
|
1332 |
</table>
|
1333 |
</div>
|
1334 |
</div>
|
1335 |
-
</div><input type="hidden" id="closedpostboxesnonce" name="closedpostboxesnonce" value="
|
1336 |
</div>
|
1337 |
<div id='postbox-container-tab_actions' class='postbox-container' style="">
|
1338 |
<div id="normal-sortables" class="meta-box-sortables"><div id="fv_flowplayer_description" class="postbox " >
|
@@ -1591,7 +1591,7 @@ Hint: you can click the thumbnails to switch videos in the above player. This pr
|
|
1591 |
jQuery.ajax( {
|
1592 |
type: "POST",
|
1593 |
url: ajaxurl,
|
1594 |
-
data: aInputs.serialize()+'&key='+key+'&action=fv_player_email_subscription_save&_wpnonce=
|
1595 |
success: function(response) {
|
1596 |
button.css('visibility','hidden');
|
1597 |
button.prop('disabled', false);
|
@@ -1691,7 +1691,109 @@ Hint: you can click the thumbnails to switch videos in the above player. This pr
|
|
1691 |
</table>
|
1692 |
</div>
|
1693 |
</div>
|
1694 |
-
</div><input type="hidden" id="closedpostboxesnonce" name="closedpostboxesnonce" value="
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1695 |
</div>
|
1696 |
<div id='postbox-container-tab_help' class='postbox-container' style="">
|
1697 |
<div id="normal-sortables" class="meta-box-sortables"><div id="fv_flowplayer_usage" class="postbox " >
|
@@ -1771,11 +1873,11 @@ Hint: you can click the thumbnails to switch videos in the above player. This pr
|
|
1771 |
</table>
|
1772 |
</div>
|
1773 |
</div>
|
1774 |
-
</div><input type="hidden" id="closedpostboxesnonce" name="closedpostboxesnonce" value="
|
1775 |
</div>
|
1776 |
<div style="clear: both"></div>
|
1777 |
</div>
|
1778 |
-
<input type="hidden" id="fv_flowplayer_settings_nonce" name="fv_flowplayer_settings_nonce" value="
|
1779 |
|
1780 |
</div>
|
1781 |
<script type="text/javascript" >
|
@@ -1851,7 +1953,7 @@ Hint: you can click the thumbnails to switch videos in the above player. This pr
|
|
1851 |
var button = jQuery(this);
|
1852 |
button.siblings('img').eq(0).show();
|
1853 |
|
1854 |
-
jQuery.post( ajaxurl, { action: 'fv_wp_flowplayer_activate_extension', nonce: '
|
1855 |
button.siblings('img').eq(0).hide();
|
1856 |
|
1857 |
var obj;
|
@@ -1967,4 +2069,4 @@ jQuery('a.fv-settings-anchor').on('click',function(e){
|
|
1967 |
|
1968 |
|
1969 |
|
1970 |
-
</script>
|
|
|
1 |
<div class="wrap">
|
2 |
<div style="position: absolute; margin-top: 10px; right: 10px;">
|
3 |
<a href="https://foliovision.com/wordpress/plugins/fv-wordpress-flowplayer" target="_blank" title="Documentation"><img alt="visit foliovision" src="//foliovision.com/shared/fv-logo.png" /></a>
|
47 |
<a href="#postbox-container-tab_skin" class="nav-tab" style="outline: 0px;">Skin</a>
|
48 |
<a href="#postbox-container-tab_hosting" class="nav-tab" style="outline: 0px;">Hosting</a>
|
49 |
<a href="#postbox-container-tab_actions" class="nav-tab" style="outline: 0px;">Actions</a>
|
50 |
+
<a href="#postbox-container-tab_video_intelligence" class="nav-tab" style="outline: 0px;">vi Ads</a>
|
51 |
<a href="#postbox-container-tab_help" class="nav-tab" style="outline: 0px;">Help</a>
|
52 |
<div id="fv_player_js_warning" style=" margin: 8px 40px; display: inline-block; color: darkgrey;" >There Is a Problem with JavaScript.</div>
|
53 |
</h2>
|
890 |
<table class="form-table2" style="margin: 5px; ">
|
891 |
<tr>
|
892 |
<td>
|
893 |
+
<input type="button" class="button" value="Convert JW Player shortcodes" style="margin-top: 2ex;" onclick="if( confirm('This converts the [jwplayer] shortcodes into [fvplayer] shortcodes.\n\n Please make sure you backup your database before continuing. You can use revisions to get back to previos versions of your posts as well.') ) location.href='http://example.org/wp-admin/options-general.php?page=fvplayer&convert_jwplayer=f13b4f40a5'; "/>
|
894 |
</td>
|
895 |
</tr>
|
896 |
</table>
|
980 |
</table>
|
981 |
</div>
|
982 |
</div>
|
983 |
+
</div><input type="hidden" id="closedpostboxesnonce" name="closedpostboxesnonce" value="d28516cc79" /><input type="hidden" id="meta-box-order-nonce" name="meta-box-order-nonce" value="3edef551d9" />
|
984 |
</div>
|
985 |
<div id='postbox-container-tab_skin' class='postbox-container' style="">
|
986 |
<div id="normal-sortables" class="meta-box-sortables"><div id="fv_flowplayer_description" class="postbox " >
|
1001 |
<div class="inside">
|
1002 |
<style id="fv-style-preview"></style>
|
1003 |
<div class="flowplayer-wrapper">
|
1004 |
+
<div id="wpfp_1b7da827d9fee9aa6d5bb9c5dca973bf" class="flowplayer no-brand is-splash fvp-play-button" style="background-image: url(https://i.vimeocdn.com/video/609485450_1280.jpg);" data-ratio="0.5625">
|
1005 |
<div class="fp-ratio" style="padding-top: 56.25%"></div>
|
1006 |
<div class='fvp-share-bar'><ul class="fvp-sharing">
|
1007 |
<li><a class="sharing-facebook" href="https://www.facebook.com/sharer/sharer.php?u=" target="_blank">Facebook</a></li>
|
1101 |
<button type="button" class="handlediv" aria-expanded="true"><span class="screen-reader-text">Toggle panel: Playlist</span><span class="toggle-indicator" aria-hidden="true"></span></button><h2 class='hndle'><span>Playlist</span></h2>
|
1102 |
<div class="inside">
|
1103 |
<div class="flowplayer-wrapper">
|
1104 |
+
<div class="fp-playlist-external fv-playlist-design-2017 fp-playlist-horizontal fp-playlist-has-captions" rel="wpfp_1b7da827d9fee9aa6d5bb9c5dca973bf">
|
1105 |
<a href='#' onclick='return false' data-item='{"sources":[{"src":"https:\/\/player.vimeo.com\/external\/196881410.hd.mp4?s=24645ecff21ff60079fc5b7715a97c00f90c6a18&profile_id=174&oauth2_token_id=3501005","type":"video\/mp4"}],"subtitles":[{"srclang":"en","label":"English","src":"http:\/\/example.org\/wp-content\/plugins\/fv-wordpress-flowplayer\/images\/test-subtitles.vtt"}]}'><div style='background-image: url("https://i.vimeocdn.com/video/608654918_295x166.jpg")'></div><h4><span>Foliovision Video</span></h4></a>
|
1106 |
<a href='#' onclick='return false' data-item='{"sources":[{"src":"https:\/\/player.vimeo.com\/external\/224781088.sd.mp4?s=face4dbb990b462826c8e1e43a9c66c6a9bb5585&profile_id=165&oauth2_token_id=3501005","type":"video\/mp4"}]}'><div style='background-image: url("https://i.vimeocdn.com/video/643908843_295x166.jpg")'></div><h4><span>Lapinthrope Extras - Roy Thompson Hall Dance</span></h4></a>
|
1107 |
<a href='#' onclick='return false' data-item='{"sources":[{"src":"https:\/\/player.vimeo.com\/external\/45864857.hd.mp4?s=94fddee594da3258c9e10355f5bad8173c4aee7b&profile_id=113&oauth2_token_id=3501005","type":"video\/mp4"}]}'><div style='background-image: url("https://i.vimeocdn.com/video/319116053_295x166.jpg")'></div><h4><span>Romeo and Juliet Ballet Schloss Kittsee</span></h4></a>
|
1234 |
<div style="clear: both"></div>
|
1235 |
</div>
|
1236 |
</div>
|
1237 |
+
</div><input type="hidden" id="closedpostboxesnonce" name="closedpostboxesnonce" value="d28516cc79" /><input type="hidden" id="meta-box-order-nonce" name="meta-box-order-nonce" value="3edef551d9" />
|
1238 |
</div>
|
1239 |
<div id='postbox-container-tab_hosting' class='postbox-container' style="">
|
1240 |
<div id="normal-sortables" class="meta-box-sortables"><div id="fv_flowplayer_description" class="postbox " >
|
1332 |
</table>
|
1333 |
</div>
|
1334 |
</div>
|
1335 |
+
</div><input type="hidden" id="closedpostboxesnonce" name="closedpostboxesnonce" value="d28516cc79" /><input type="hidden" id="meta-box-order-nonce" name="meta-box-order-nonce" value="3edef551d9" />
|
1336 |
</div>
|
1337 |
<div id='postbox-container-tab_actions' class='postbox-container' style="">
|
1338 |
<div id="normal-sortables" class="meta-box-sortables"><div id="fv_flowplayer_description" class="postbox " >
|
1591 |
jQuery.ajax( {
|
1592 |
type: "POST",
|
1593 |
url: ajaxurl,
|
1594 |
+
data: aInputs.serialize()+'&key='+key+'&action=fv_player_email_subscription_save&_wpnonce=71bf337548',
|
1595 |
success: function(response) {
|
1596 |
button.css('visibility','hidden');
|
1597 |
button.prop('disabled', false);
|
1691 |
</table>
|
1692 |
</div>
|
1693 |
</div>
|
1694 |
+
</div><input type="hidden" id="closedpostboxesnonce" name="closedpostboxesnonce" value="d28516cc79" /><input type="hidden" id="meta-box-order-nonce" name="meta-box-order-nonce" value="3edef551d9" />
|
1695 |
+
</div>
|
1696 |
+
<div id='postbox-container-tab_video_intelligence' class='postbox-container' style="">
|
1697 |
+
<div id="normal-sortables" class="meta-box-sortables"><div id="fv_flowplayer_video_intelligence" class="postbox " >
|
1698 |
+
<button type="button" class="handlediv" aria-expanded="true"><span class="screen-reader-text">Toggle panel: video intelligence</span><span class="toggle-indicator" aria-hidden="true"></span></button><h2 class='hndle'><span>video intelligence</span></h2>
|
1699 |
+
<div class="inside">
|
1700 |
+
<style>
|
1701 |
+
#fv_flowplayer_video_intelligence_revival { display: none }
|
1702 |
+
</style>
|
1703 |
+
<input type="hidden" id="nonce_fv_player_vi_install" name="nonce_fv_player_vi_install" value="d9672c9ed6" /><input type="hidden" name="_wp_http_referer" value="" />
|
1704 |
+
<table class="form-table2" style="margin: 5px; ">
|
1705 |
+
<tbody>
|
1706 |
+
<tr>
|
1707 |
+
<td class="first">
|
1708 |
+
<img src="http://example.org/wp-content/plugins/fv-wordpress-flowplayer/images/vi-logo.svg" alt="video intelligence logo" />
|
1709 |
+
<a href="http://vi.ai/publisher-video-monetization/?aid=foliovision&email=&url=http://example.org&invtype=3#publisher_signup" target="_blank" class="button vi-register">Learn More</a>
|
1710 |
+
</td>
|
1711 |
+
<td>
|
1712 |
+
<p>Video content and video advertising – powered by <strong>video intelligence</strong></p>
|
1713 |
+
<p>Advertisers pay more for video advertising when it's matched with video content. This new video player will insert both on your page. It increases time on site, and commands a higher CPM than display advertising.</p>
|
1714 |
+
<p>You'll see video content that is matched to your sites keywords straight away. A few days after activation you'll begin to receive revenue from advertising served before this video content.</p>
|
1715 |
+
<ul>
|
1716 |
+
<li>The set up takes only a few minutes</li>
|
1717 |
+
<li>Up to 10x higher CPM than traditional display advertising</li>
|
1718 |
+
<li>Users spend longer on your site thanks to professional video content</li>
|
1719 |
+
</ul>
|
1720 |
+
</td>
|
1721 |
+
</tr>
|
1722 |
+
<tr>
|
1723 |
+
<td></td>
|
1724 |
+
<td>
|
1725 |
+
<p>By clicking sign up you agree to send your current domain, email and affiliate ID to video intelligence.</p>
|
1726 |
+
<a href="http://vi.ai/publisher-video-monetization/?aid=foliovision&email=&url=http://example.org&invtype=3#publisher_signup" target="_blank" class="button vi-register">Learn More or Create an Account</a>
|
1727 |
+
</td>
|
1728 |
+
</tr>
|
1729 |
+
</tbody>
|
1730 |
+
</table>
|
1731 |
+
|
1732 |
+
</div>
|
1733 |
+
</div>
|
1734 |
+
<div id="fv_flowplayer_video_intelligence_account" class="postbox " >
|
1735 |
+
<button type="button" class="handlediv" aria-expanded="true"><span class="screen-reader-text">Toggle panel: Account</span><span class="toggle-indicator" aria-hidden="true"></span></button><h2 class='hndle'><span>Account</span></h2>
|
1736 |
+
<div class="inside">
|
1737 |
+
<input type="hidden" id="nonce_fv_player_vi_install" name="nonce_fv_player_vi_install" value="d9672c9ed6" /><input type="hidden" name="_wp_http_referer" value="" />
|
1738 |
+
<table class="form-table2" style="margin: 5px; ">
|
1739 |
+
<tbody>
|
1740 |
+
<tr>
|
1741 |
+
<td class="first"><label for="vi_login">Login:</label></td>
|
1742 |
+
<td>
|
1743 |
+
<p class="description">
|
1744 |
+
<input type="text" name="vi_login" id="vi_login" class="medium" />
|
1745 |
+
</p>
|
1746 |
+
</td>
|
1747 |
+
</tr>
|
1748 |
+
<tr>
|
1749 |
+
<td><label for="vi_pass">Password:</label></td>
|
1750 |
+
<td>
|
1751 |
+
<p class="description">
|
1752 |
+
<input type="password" name="vi_pass" id="vi_pass" class="medium" />
|
1753 |
+
</p>
|
1754 |
+
</td>
|
1755 |
+
</tr>
|
1756 |
+
<tr>
|
1757 |
+
<td>
|
1758 |
+
</td>
|
1759 |
+
<td>
|
1760 |
+
<input type="submit" name="fv_player_vi_install" value="Sign in" class="button-primary">
|
1761 |
+
</td>
|
1762 |
+
</tr>
|
1763 |
+
<tr>
|
1764 |
+
<td></td>
|
1765 |
+
<td>
|
1766 |
+
<p><a href="mailto:support@vi.ai?Subject=Issues%20with%20account%20activation%20for%20http%3A%2F%2Fexample.org">I'm having issues with the account activation</a></p>
|
1767 |
+
</td>
|
1768 |
+
</tr>
|
1769 |
+
</tbody>
|
1770 |
+
</table>
|
1771 |
+
|
1772 |
+
|
1773 |
+
|
1774 |
+
</div>
|
1775 |
+
</div>
|
1776 |
+
<div id="fv_flowplayer_video_intelligence_hide" class="postbox " >
|
1777 |
+
<button type="button" class="handlediv" aria-expanded="true"><span class="screen-reader-text">Toggle panel: Hide vi Ads</span><span class="toggle-indicator" aria-hidden="true"></span></button><h2 class='hndle'><span>Hide vi Ads</span></h2>
|
1778 |
+
<div class="inside">
|
1779 |
+
<input id="fv-player-vi-remove" type="checkbox"> <label for="fv-player-vi-remove">Hide the vi Ads tab</label>
|
1780 |
+
<script>
|
1781 |
+
jQuery( function($) {
|
1782 |
+
$('#fv-player-vi-remove').click( function() {
|
1783 |
+
$.post(ajaxurl, {action:'fv-player-vi-remove'}, function() {
|
1784 |
+
$('#fv-player-vi-give-back').prop('checked',false);
|
1785 |
+
$('[href=#postbox-container-tab_video_intelligence]').hide();
|
1786 |
+
$('#fv_flowplayer_video_intelligence').hide();
|
1787 |
+
$('[href=#postbox-container-tab_video_ads]').click();
|
1788 |
+
$('#fv_flowplayer_video_intelligence_revival').show();
|
1789 |
+
});
|
1790 |
+
|
1791 |
+
});
|
1792 |
+
});
|
1793 |
+
</script>
|
1794 |
+
</div>
|
1795 |
+
</div>
|
1796 |
+
</div><input type="hidden" id="closedpostboxesnonce" name="closedpostboxesnonce" value="d28516cc79" /><input type="hidden" id="meta-box-order-nonce" name="meta-box-order-nonce" value="3edef551d9" />
|
1797 |
</div>
|
1798 |
<div id='postbox-container-tab_help' class='postbox-container' style="">
|
1799 |
<div id="normal-sortables" class="meta-box-sortables"><div id="fv_flowplayer_usage" class="postbox " >
|
1873 |
</table>
|
1874 |
</div>
|
1875 |
</div>
|
1876 |
+
</div><input type="hidden" id="closedpostboxesnonce" name="closedpostboxesnonce" value="d28516cc79" /><input type="hidden" id="meta-box-order-nonce" name="meta-box-order-nonce" value="3edef551d9" />
|
1877 |
</div>
|
1878 |
<div style="clear: both"></div>
|
1879 |
</div>
|
1880 |
+
<input type="hidden" id="fv_flowplayer_settings_nonce" name="fv_flowplayer_settings_nonce" value="6efb8df58f" /><input type="hidden" name="_wp_http_referer" value="" /> </form>
|
1881 |
|
1882 |
</div>
|
1883 |
<script type="text/javascript" >
|
1953 |
var button = jQuery(this);
|
1954 |
button.siblings('img').eq(0).show();
|
1955 |
|
1956 |
+
jQuery.post( ajaxurl, { action: 'fv_wp_flowplayer_activate_extension', nonce: 'a3b037f3a9', plugin: jQuery(this).attr("data-plugin") }, function( response ) {
|
1957 |
button.siblings('img').eq(0).hide();
|
1958 |
|
1959 |
var obj;
|
2069 |
|
2070 |
|
2071 |
|
2072 |
+
</script>
|
test/integration/backend/videointelligenceInstallTest.php
ADDED
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once( dirname(__FILE__).'/../fv-player-unittest-case.php');
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Tests WordPress integration of playlists without any advertisements present
|
7 |
+
* in the HTML markup.
|
8 |
+
*/
|
9 |
+
final class FV_Player_videointelligenceInstallTestCase extends FV_Player_UnitTestCase {
|
10 |
+
|
11 |
+
var $directory = WP_CONTENT_DIR.'/plugins/fv-player-video-intelligence';
|
12 |
+
|
13 |
+
// we need to convince it is showing the FV Player settings screen!
|
14 |
+
public static function wpSetUpBeforeClass() {
|
15 |
+
set_current_screen( 'settings_page_fvplayer' );
|
16 |
+
|
17 |
+
parent::wpSetUpBeforeClass();
|
18 |
+
|
19 |
+
remove_action( 'admin_init', 'wp_admin_headers' );
|
20 |
+
do_action( 'admin_init' );
|
21 |
+
}
|
22 |
+
|
23 |
+
public function setUp() {
|
24 |
+
parent::setUp();
|
25 |
+
|
26 |
+
// add new user and create last saved position metadata for this new user
|
27 |
+
$this->userID = $this->factory->user->create(array(
|
28 |
+
'role' => 'admin'
|
29 |
+
));
|
30 |
+
|
31 |
+
}
|
32 |
+
|
33 |
+
public function testInstall() {
|
34 |
+
|
35 |
+
$this->assertTrue( defined('FV_PLAYER_VI_USER') && defined('FV_PLAYER_VI_PASS') );
|
36 |
+
|
37 |
+
// we need to submit a valid vi Ads login with an admin user capable of installing plugins
|
38 |
+
global $current_user;
|
39 |
+
wp_set_current_user($this->userID);
|
40 |
+
$current_user->add_cap( 'install_plugins' );
|
41 |
+
|
42 |
+
$_POST['vi_login'] = FV_PLAYER_VI_USER;
|
43 |
+
$_POST['vi_pass'] = FV_PLAYER_VI_PASS;
|
44 |
+
$_POST['fv_player_vi_install'] = true;
|
45 |
+
$_REQUEST['nonce_fv_player_vi_install'] = wp_create_nonce('fv_player_vi_install'); // notice the nonce goes into $_REQUEST
|
46 |
+
|
47 |
+
$this->assertFalse( file_exists($this->directory) );
|
48 |
+
|
49 |
+
do_action( 'admin_menu' );
|
50 |
+
|
51 |
+
$this->assertEquals( "FV Player video intelligence extension installed successfully!", get_option('fv_wordpress_flowplayer_deferred_notices') );
|
52 |
+
|
53 |
+
$this->assertFileExists( $this->directory );
|
54 |
+
|
55 |
+
do_action( 'admin_menu' );
|
56 |
+
|
57 |
+
$this->assertEquals( "FV Player video intelligence extension upgraded successfully!", get_option('fv_wordpress_flowplayer_deferred_notices') );
|
58 |
+
}
|
59 |
+
|
60 |
+
public function tearDown() {
|
61 |
+
unset($_POST['vi_login']);
|
62 |
+
unset($_POST['vi_pass']);
|
63 |
+
unset($_POST['fv_player_vi_install']);
|
64 |
+
unset($_REQUEST['nonce_fv_player_vi_install']);
|
65 |
+
|
66 |
+
if( strlen($this->directory) > 10 ) {
|
67 |
+
$this->removeDirectory($this->directory);
|
68 |
+
}
|
69 |
+
}
|
70 |
+
|
71 |
+
private function removeDirectory($path) {
|
72 |
+
$files = glob($path . '/*');
|
73 |
+
foreach ($files as $file) {
|
74 |
+
is_dir($file) ? $this->removeDirectory($file) : unlink($file);
|
75 |
+
}
|
76 |
+
rmdir($path);
|
77 |
+
return;
|
78 |
+
}
|
79 |
+
|
80 |
+
}
|
test/integration/fv-player-unittest-case.php
CHANGED
@@ -14,6 +14,7 @@ abstract class FV_Player_UnitTestCase extends WP_UnitTestCase {
|
|
14 |
public function fix_newlines( $html ) {
|
15 |
$html = preg_replace( '/(id|rel)="wpfp_[^"]+"/', '$1="some-test-hash"', $html);
|
16 |
$html = preg_replace( '~<input type="hidden" id="([^"]*?)nonce" name="([^"]*?)nonce" value="([^"]*?)" />~', '<input type="hidden" id="$1nonce" name="$2nonce" value="XYZ" />', $html);
|
|
|
17 |
$html = preg_replace( "~nonce: '([^']*?)'~", "nonce: 'XYZ'", $html);
|
18 |
|
19 |
// testProfileScreen
|
14 |
public function fix_newlines( $html ) {
|
15 |
$html = preg_replace( '/(id|rel)="wpfp_[^"]+"/', '$1="some-test-hash"', $html);
|
16 |
$html = preg_replace( '~<input type="hidden" id="([^"]*?)nonce" name="([^"]*?)nonce" value="([^"]*?)" />~', '<input type="hidden" id="$1nonce" name="$2nonce" value="XYZ" />', $html);
|
17 |
+
$html = preg_replace( '~<input type="hidden" id="nonce_([^"]*?)" name="nonce_([^"]*?)" value="([^"]*?)" />~', '<input type="hidden" id="nonce_$1" name="nonce_$2" value="XYZ" />', $html);
|
18 |
$html = preg_replace( "~nonce: '([^']*?)'~", "nonce: 'XYZ'", $html);
|
19 |
|
20 |
// testProfileScreen
|
view/admin-beta.php
CHANGED
@@ -1637,7 +1637,7 @@ add_meta_box( 'fv_flowplayer_usage', __('Usage', 'fv-wordpress-flowplayer'), 'fv
|
|
1637 |
<p id="fv_flowplayer_admin_buttons">
|
1638 |
<?php if( $aCheck && isset($aCheck->valid) && $aCheck->valid ) : ?>
|
1639 |
<?php
|
1640 |
-
$fv_player_pro_path =
|
1641 |
if( is_plugin_inactive($fv_player_pro_path) && !is_wp_error(validate_plugin($fv_player_pro_path)) ) : ?>
|
1642 |
<input type="button" class='button fv-license-yellow fv_wp_flowplayer_activate_extension' data-plugin="<?php echo $fv_player_pro_path; ?>" value="<?php _e('Enable the Pro extension', 'fv-wordpress-flowplayer'); ?>" /> <img style="display: none; " src="<?php echo site_url(); ?>/wp-includes/images/wpspin.gif" width="16" height="16" />
|
1643 |
<?php elseif( is_plugin_active($fv_player_pro_path) && !is_wp_error(validate_plugin($fv_player_pro_path)) ) : ?>
|
1637 |
<p id="fv_flowplayer_admin_buttons">
|
1638 |
<?php if( $aCheck && isset($aCheck->valid) && $aCheck->valid ) : ?>
|
1639 |
<?php
|
1640 |
+
$fv_player_pro_path = FV_Wordpress_Flowplayer_Plugin::get_plugin_path('fv-player-pro');
|
1641 |
if( is_plugin_inactive($fv_player_pro_path) && !is_wp_error(validate_plugin($fv_player_pro_path)) ) : ?>
|
1642 |
<input type="button" class='button fv-license-yellow fv_wp_flowplayer_activate_extension' data-plugin="<?php echo $fv_player_pro_path; ?>" value="<?php _e('Enable the Pro extension', 'fv-wordpress-flowplayer'); ?>" /> <img style="display: none; " src="<?php echo site_url(); ?>/wp-includes/images/wpspin.gif" width="16" height="16" />
|
1643 |
<?php elseif( is_plugin_active($fv_player_pro_path) && !is_wp_error(validate_plugin($fv_player_pro_path)) ) : ?>
|
view/admin.php
CHANGED
@@ -1352,7 +1352,6 @@ $fv_player_aSettingsTabs = array(
|
|
1352 |
array('id' => 'fv_flowplayer_settings_hosting', 'hash' => 'tab_hosting', 'name' => __('Hosting', 'fv-wordpress-flowplayer') ),
|
1353 |
array('id' => 'fv_flowplayer_settings_actions', 'hash' => 'tab_actions', 'name' => __('Actions', 'fv-wordpress-flowplayer') ),
|
1354 |
array('id' => 'fv_flowplayer_settings_video_ads', 'hash' => 'tab_video_ads', 'name' => __('Video Ads', 'fv-wordpress-flowplayer') ),
|
1355 |
-
array('id' => 'fv_flowplayer_settings_help', 'hash' => 'tab_help', 'name' => __('Help', 'fv-wordpress-flowplayer') ),
|
1356 |
);
|
1357 |
|
1358 |
//unset video ads tab for Legacy PRO player
|
@@ -1364,6 +1363,8 @@ if(version_compare( str_replace( '.beta','',get_option( 'fv_player_pro_ver' ) ),
|
|
1364 |
|
1365 |
$fv_player_aSettingsTabs = apply_filters('fv_player_admin_settings_tabs',$fv_player_aSettingsTabs);
|
1366 |
|
|
|
|
|
1367 |
/* Setup tab */
|
1368 |
add_meta_box( 'fv_flowplayer_description', ' ', 'fv_flowplayer_admin_description', 'fv_flowplayer_settings', 'normal', 'high' );
|
1369 |
add_meta_box( 'fv_flowplayer_interface_options', __('Post Interface Options', 'fv-wordpress-flowplayer'), 'fv_flowplayer_admin_interface_options', 'fv_flowplayer_settings', 'normal' );
|
@@ -1431,7 +1432,7 @@ add_meta_box( 'fv_flowplayer_usage', __('Usage', 'fv-wordpress-flowplayer'), 'fv
|
|
1431 |
<p id="fv_flowplayer_admin_buttons">
|
1432 |
<?php if( $aCheck && isset($aCheck->valid) && $aCheck->valid ) : ?>
|
1433 |
<?php
|
1434 |
-
$fv_player_pro_path =
|
1435 |
if( is_plugin_inactive($fv_player_pro_path) && !is_wp_error(validate_plugin($fv_player_pro_path)) ) : ?>
|
1436 |
<input type="button" class='button fv-license-yellow fv_wp_flowplayer_activate_extension' data-plugin="<?php echo $fv_player_pro_path; ?>" value="<?php _e('Enable the Pro extension', 'fv-wordpress-flowplayer'); ?>" /> <img style="display: none; " src="<?php echo site_url(); ?>/wp-includes/images/wpspin.gif" width="16" height="16" />
|
1437 |
<?php elseif( is_plugin_active($fv_player_pro_path) && !is_wp_error(validate_plugin($fv_player_pro_path)) ) : ?>
|
1352 |
array('id' => 'fv_flowplayer_settings_hosting', 'hash' => 'tab_hosting', 'name' => __('Hosting', 'fv-wordpress-flowplayer') ),
|
1353 |
array('id' => 'fv_flowplayer_settings_actions', 'hash' => 'tab_actions', 'name' => __('Actions', 'fv-wordpress-flowplayer') ),
|
1354 |
array('id' => 'fv_flowplayer_settings_video_ads', 'hash' => 'tab_video_ads', 'name' => __('Video Ads', 'fv-wordpress-flowplayer') ),
|
|
|
1355 |
);
|
1356 |
|
1357 |
//unset video ads tab for Legacy PRO player
|
1363 |
|
1364 |
$fv_player_aSettingsTabs = apply_filters('fv_player_admin_settings_tabs',$fv_player_aSettingsTabs);
|
1365 |
|
1366 |
+
$fv_player_aSettingsTabs[] = array('id' => 'fv_flowplayer_settings_help', 'hash' => 'tab_help', 'name' => __('Help', 'fv-wordpress-flowplayer') );
|
1367 |
+
|
1368 |
/* Setup tab */
|
1369 |
add_meta_box( 'fv_flowplayer_description', ' ', 'fv_flowplayer_admin_description', 'fv_flowplayer_settings', 'normal', 'high' );
|
1370 |
add_meta_box( 'fv_flowplayer_interface_options', __('Post Interface Options', 'fv-wordpress-flowplayer'), 'fv_flowplayer_admin_interface_options', 'fv_flowplayer_settings', 'normal' );
|
1432 |
<p id="fv_flowplayer_admin_buttons">
|
1433 |
<?php if( $aCheck && isset($aCheck->valid) && $aCheck->valid ) : ?>
|
1434 |
<?php
|
1435 |
+
$fv_player_pro_path = FV_Wordpress_Flowplayer_Plugin::get_plugin_path('fv-player-pro');
|
1436 |
if( is_plugin_inactive($fv_player_pro_path) && !is_wp_error(validate_plugin($fv_player_pro_path)) ) : ?>
|
1437 |
<input type="button" class='button fv-license-yellow fv_wp_flowplayer_activate_extension' data-plugin="<?php echo $fv_player_pro_path; ?>" value="<?php _e('Enable the Pro extension', 'fv-wordpress-flowplayer'); ?>" /> <img style="display: none; " src="<?php echo site_url(); ?>/wp-includes/images/wpspin.gif" width="16" height="16" />
|
1438 |
<?php elseif( is_plugin_active($fv_player_pro_path) && !is_wp_error(validate_plugin($fv_player_pro_path)) ) : ?>
|