Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
posthelic
/
wp-content
/
plugins
/
fv-wordpress-flowplayer
/
models
:
lightbox.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php class FV_Player_lightbox { private $lightboxHtml; public $bCSSLoaded = false; public $bLoad = false; public function __construct() { add_action('init', array($this, 'remove_pro_hooks'), 10); add_filter('fv_flowplayer_shortcode', array($this, 'shortcode'), 15, 3); add_filter('fv_flowplayer_player_type', array($this, 'lightbox_enable')); add_filter('fv_flowplayer_playlist_style', array($this, 'lightbox_playlist'), 10, 5); add_filter('fv_flowplayer_args', array($this, 'disable_autoplay')); // disable autoplay for lightboxed videos, todo: it should work instead! add_filter('fv_flowplayer_args', array($this, 'parse_html_caption'), 0); add_filter('the_content', array($this, 'html_to_lightbox_videos')); add_filter('the_content', array($this, 'html_lightbox_images'), 999); // moved after the shortcodes are parsed to work for galleries add_action('fv_flowplayer_shortcode_editor_tab_options', array($this, 'shortcode_editor'), 8); add_action('fv_flowplayer_admin_default_options_after', array( $this, 'lightbox_admin_default_options_html' ) ); add_filter('fv_flowplayer_admin_interface_options_after', array( $this, 'lightbox_admin_interface_html' ) ); add_action( 'wp_footer', array( $this, 'disp__lightboxed_players' ), 0 ); add_filter('fv_player_conf_defaults', array( $this, 'conf_defaults' ) ); //TODO is this hack needed? $conf = get_option('fvwpflowplayer'); if(isset($conf['lightbox_images']) && $conf['lightbox_images'] == 'true' && (!isset($conf['lightbox_improve_galleries']) || isset($conf['lightbox_improve_galleries']) && $conf['lightbox_improve_galleries'] == 'true')) { add_filter( 'shortcode_atts_gallery', array( $this, 'improve_galleries' ) ); } add_action( 'wp_enqueue_scripts', array( $this, 'css_enqueue' ), 999 ); } function css_enqueue( $force ) { global $fv_fp; if( !$force && !$fv_fp->_get_option('lightbox_images') ) return; $bCSSLoaded = true; global $fv_wp_flowplayer_ver; wp_enqueue_style( 'fv_player_lightbox', FV_FP_RELATIVE_PATH . '/css/fancybox.css', array(), $fv_wp_flowplayer_ver ); } function conf_defaults($conf){ //TODO probbably not needed in the future if(isset($conf['lightbox_images']) && $conf['lightbox_images'] && !isset($conf['lightbox_improve_galleries']) )$conf['lightbox_improve_galleries'] = false; $conf += array( 'lightbox_images' => false, 'lightbox_improve_galleries' => false ); return $conf; } function remove_pro_hooks() { global $FV_Player_Pro; if (isset($FV_Player_Pro)) { //remove_filter('fv_flowplayer_shortcode', array($FV_Player_Pro, 'shortcode')); remove_filter('fv_flowplayer_html', array($FV_Player_Pro, 'lightbox_html'), 11 ); remove_filter('fv_flowplayer_playlist_style', array($FV_Player_Pro, 'lightbox_playlist'), 10); remove_filter('fv_flowplayer_args', array($FV_Player_Pro, 'disable_autoplay')); // disable autoplay for lightboxed videos, todo: it should work instead! remove_filter('the_content', array($FV_Player_Pro, 'lightbox_add')); remove_filter('the_content', array($FV_Player_Pro, 'lightbox_add_post'), 999 ); // moved after the shortcodes are parsed to work for galleries } } function improve_galleries( $args ) { if( !$args['link'] ) { $args['link'] = 'file'; } return $args; } function lightbox_enable($sType) { if ($sType === 'video') { add_filter('fv_flowplayer_html', array($this, 'lightbox_html'), 11, 2); } else { remove_filter('fv_flowplayer_html', array($this, 'lightbox_html'), 11); } return $sType; } function shortcode($attrs) { $aArgs = func_get_args(); if (isset($aArgs[2]) && isset($aArgs[2]['lightbox'])) { $attrs['lightbox'] = $aArgs[2]['lightbox']; } return $attrs; } function disp__lightboxed_players() { if (strlen($this->lightboxHtml)) { echo $this->lightboxHtml . "<!-- lightboxed players -->\n\n"; } } function get_title_attr( $args ) { return !empty($args['caption']) ? " title='" . esc_attr($args['caption']) . "'" : ''; } function is_text_lightbox($aArgs) { $aLightbox = preg_split('~[;]~', $aArgs['lightbox']); foreach ($aLightbox AS $k => $i) { if ($i == 'text') { return true; } } return false; } function lightbox_html($html) { $aArgs = func_get_args(); if (isset($aArgs[1]) && isset($aArgs[1]->aCurArgs['lightbox'])) { $this->bLoad = true; global $fv_fp; $iConfWidth = intval($fv_fp->_get_option('width')); $iConfHeight = intval($fv_fp->_get_option('height')); $iPlayerWidth = ( isset($aArgs[1]->aCurArgs['width']) && intval($aArgs[1]->aCurArgs['width']) > 0 ) ? intval($aArgs[1]->aCurArgs['width']) : $iConfWidth; $iPlayerHeight = ( isset($aArgs[1]->aCurArgs['height']) && intval($aArgs[1]->aCurArgs['height']) > 0 ) ? intval($aArgs[1]->aCurArgs['height']) : $iConfHeight; $aLightbox = preg_split('~[;]~', $aArgs[1]->aCurArgs['lightbox']); if ( $this->is_text_lightbox($aArgs[1]->aCurArgs) ) { $sTitle = empty($aArgs[1]->aCurArgs['playlist']) ? $sTitle = $this->get_title_attr($aArgs[1]->aCurArgs) : ''; $html = str_replace(array('class="flowplayer ', "class='flowplayer "), array('class="flowplayer lightboxed ', "class='flowplayer lightboxed "), $html); $this->lightboxHtml .= "<div style='display: none'>\n" . $html . "</div>\n"; $html = "<a".$this->fancybox_opts()." id='fv_flowplayer_" . $aArgs[1]->hash . "_lightbox_starter'" . $sTitle . " href=\"#\" data-src='#wpfp_" . $aArgs[1]->hash . "'>" . $aArgs[1]->aCurArgs['caption'] . "</a>"; } else { $iWidth = ( isset($aLightbox[1]) && intval($aLightbox[1]) > 0 ) ? intval($aLightbox[1]) : ( ($iPlayerWidth > $iPlayerWidth) ? $iPlayerWidth : $iConfWidth ); $iHeight = ( isset($aLightbox[2]) && intval($aLightbox[2]) > 0 ) ? intval($aLightbox[2]) : ( ($iPlayerHeight > $iConfHeight) ? $iPlayerHeight : $iConfHeight ); $sSplash = apply_filters('fv_flowplayer_playlist_splash', $aArgs[1]->aCurArgs['splash'], $fv_fp); $sStyle = 'style="max-width: ' . $iWidth . 'px; max-height: ' . $iHeight . 'px; '; if (isset($aArgs[1]->aCurArgs['splash']) && $sSplash ) { $sStyle .= 'background-image: url(\'' . $sSplash . '\')'; } $sStyle .= '"'; if ($iWidth > 0) { $sStyle .= ' data-ratio="' . round($iHeight / $iWidth, 4) . '"'; } $sClass = ""; if (is_object($aArgs[1]) && method_exists($aArgs[1], 'get_align')) { $sClass = $aArgs[1]->get_align(); } if( !empty($fv_fp->aCurArgs['skin']) ) { $skin = 'skin-'.$fv_fp->aCurArgs['skin']; } else { $skin = 'skin-'.$fv_fp->_get_option('skin'); } $sClass .= ' no-svg is-paused '.$skin; $sClass .= ' '.$fv_fp->_get_option(array($skin, 'design-timeline')).' '.$fv_fp->_get_option(array($skin, 'design-icons')); $sTitle = ''; if (isset($aLightbox[3])) { $sTitle = "title='" . esc_attr($aLightbox[3]) . "'"; } else if (isset($aLightbox[1]) && !isset($aLightbox[2]) && !isset($aLightbox[3])) { $sTitle = "title='" . esc_attr($aLightbox[1]) . "'"; } $lightboxed_player = str_replace(array('class="flowplayer ', "class='flowplayer "), array('class="flowplayer lightboxed ', "class='flowplayer lightboxed "), $html); /* $html = preg_replace( '~max-width: \d+px;~', 'max-width: '.$iWidth.'px;', $html ); $html = preg_replace( '~max-height: \d+px;~', 'max-height: '.$iHeight.'px;', $html ); */ $html = "<div".$this->fancybox_opts($sSplash)." id='fv_flowplayer_" . $aArgs[1]->hash . "_lightbox_starter' $sTitle href='#wpfp_" . $aArgs[1]->hash . "' class='flowplayer lightbox-starter is-splash$sClass' $sStyle>"; $html .= '<div class="fp-ui"><div class="fp-play fp-visible"><a class="fp-icon fp-playbtn"></a></div></div>'; if ($iWidth > 0) { $html .= '<div class="fp-ratio" style="padding-top: '.str_replace(',','.',round($iHeight / $iWidth, 4) * 100).'%"></div>'; } $html .= "</div>\n<div class='fv_player_lightbox_hidden' style='display: none'>\n" . $lightboxed_player . "</div>"; } } return $html; } function lightbox_playlist($output, $aCurArgs, $aPlaylistItems, $aSplashScreens, $aCaptions) { if ($output || empty($aCurArgs['lightbox']) || !count($aPlaylistItems) || count($aPlaylistItems) == 1 ) { return $output; } global $FV_Player_Pro; if( !empty($FV_Player_Pro) && count($FV_Player_Pro->bVideoAdsStatus) ) return $output; global $fv_fp; $output = array(); $output['html'] = ''; $output['script'] = array(); $i = 0; $after = ''; foreach ($aPlaylistItems AS $key => $aSrc) { $i++; unset($aCurArgs['playlist']); $aCurArgs['src'] = $aSrc['sources'][0]['src']; // todo: remaining sources! $aCurArgs['splash'] = isset($aSplashScreens[$key]) ? $aSplashScreens[$key] : false; $aCurArgs['caption'] = isset($aCaptions[$key]) ? $aCaptions[$key] : false; $aCurArgs['liststyle'] = 'horizontal'; // it's the only safe choice! $aPlayer = $fv_fp->build_min_player($aCurArgs['src'], $aCurArgs); if ( $this->is_text_lightbox($aCurArgs) ) { if ($i == 1) { $output['html'] .= "<li>".$aPlayer['html']."</li>"; } if( $i > 1 ) { $sTitle = $this->get_title_attr($fv_fp->aCurArgs); $output['html'] .= "<li><a".$this->fancybox_opts()." id='fv_flowplayer_lightbox_starter'$sTitle href='#' data-src='#wpfp_" . $fv_fp->hash . "'>" . $fv_fp->aCurArgs['caption'] . "</a></li>"; } } else { if ($i == 1) { $output['html'] .= $aPlayer['html']; $output['html'] .= "<div class='fp-playlist-external ".$fv_fp->get_playlist_class($aCaptions)."'>"; } $aPlayerParts = explode("<div class='fv_player_lightbox_hidden'", $aPlayer['html']); if( $i == 1 ) { $output['html'] .= "<a id='fv_flowplayer_lightbox_placeholder' href='#' onclick='document.getElementById(\"fv_flowplayer_" . $fv_fp->hash . "_lightbox_starter\").click(); return false'><div style=\"background-image: url('" . $fv_fp->aCurArgs['splash'] . "')\"></div><h4><span>" . $fv_fp->aCurArgs['caption'] . "</span></h4></a>"; } else { $output['html'] .= "<a".$this->fancybox_opts($fv_fp->aCurArgs['splash'])." id='fv_flowplayer_lightbox_starter' href='#' data-src='#wpfp_" . $fv_fp->hash . "'><div style=\"background-image: url('" . $fv_fp->aCurArgs['splash'] . "')\"></div><h4><span>" . $fv_fp->aCurArgs['caption'] . "</span></h4></a>"; } if ($i > 1) { $after .= "<div class='fv_player_lightbox_hidden'" . $aPlayerParts[1]; } } if ($i == count($aPlaylistItems)) { $output['html'] .= "</div>"; } foreach ($aPlayer['script'] AS $key2 => $value) { $output['script'][$key2] = array_merge(isset($output['script'][$key2]) ? $output['script'][$key2] : array(), $aPlayer['script'][$key2]); } } if ( $this->is_text_lightbox($aCurArgs) ) { $output['html'] = "<ul>".$output['html']."</ul>"; } $output['html'] .= $after; return $output; } function html_to_lightbox_videos($content) { // todo: disabling the option should turn this off if (stripos($content, 'colorbox') !== false) { $content = preg_replace_callback('~<a[^>]*?class=[\'"][^\'"]*?colorbox[^\'"]*?[\'"][^>]*?>([\s\S]*?)</a>~', array($this, 'html_to_lightbox_videos_callback'), $content); return $content; } if( stripos($content, 'lightbox') !== false ) { $content = preg_replace_callback('~<a[^>]*?class=[\'"][^\'"]*?lightbox[^\'"]*?[\'"][^>]*?>([\s\S]*?)</a>~', array($this, 'html_to_lightbox_videos_callback'), $content); return $content; } return $content; } function html_to_lightbox_videos_callback($matches) { $html = $matches[0]; $caption = trim($matches[1]); if( stripos($html,'.mp4') !== false && stripos($html,'.webm') !== false && stripos($html,'.m4v') !== false && stripos($html,'.mov') !== false && stripos($html,'.ogv') !== false && stripos($html,'.ogg') !== false && stripos($html,'.m3u8') !== false && stripos($html,'youtube.com/') !== false && stripos($html,'youtu.be/') !== false && stripos($html,'vimeo.com/') !== false ) { return $html; } if( preg_match( '~href=[\'"](.*?(?:mp4|webm|m4v|mov|ogv|ogg|m3u8|youtube\.com|youtu\.be|vimeo.com).*?)[\'"]~', $html, $href ) ) { if( stripos($caption,'<img') === 0 ) { return '[fvplayer src="'.esc_attr($href[1]).'" lightbox="true;text" caption_html="'.base64_encode($caption).'"]'; } else { return '[fvplayer src="'.esc_attr($href[1]).'" lightbox="true;text" caption="'.esc_attr($caption).'"]'; } } return $html; } function html_lightbox_images($content) { global $fv_fp; //TODO IMAGES if( $fv_fp->_get_option('lightbox_images') === false ) { return $content; } $content = preg_replace_callback('~(<a[^>]*?>\s*?)(<img.*?>)~', array($this, 'html_lightbox_images_callback'), $content); return $content; } function html_lightbox_images_callback($matches) { if( stripos($matches[1],'data-fancybox') ) return $matches[0]; if (!preg_match('/href=[\'"].*?(jpeg|jpg|jpe|gif|png)(?:\?.*?|\s*?)[\'"]/i', $matches[1])) return $matches[0]; $matches[1] = str_replace( '<a ', '<a data-fancybox="gallery" ', $matches[1] ); return $matches[1] . $matches[2]; } function disable_autoplay($aArgs) { if (isset($aArgs['lightbox'])) { $aArgs['autoplay'] = 'false'; } return $aArgs; } function parse_args( $aArgs ) { foreach ($aArgs AS $k => $i) { if ($i == 'text') { unset($aArgs[$k]); $bUseAnchor = true; } } return $aArgs; } function parse_html_caption( $aArgs ) { if( isset($aArgs['caption_html']) && $aArgs['caption_html'] ) { $aArgs['caption'] = base64_decode($aArgs['caption_html']); unset($aArgs['caption_html']); } return $aArgs; } function shortcode_editor() { global $fv_fp; $bLightbox = $fv_fp->_get_option(array('interface','lightbox')); if ($bLightbox) { ?> <tr<?php if (!$bLightbox) echo ' style="display: none"'; ?>> <th scope="row" class="label"><label for="fv_wp_flowplayer_field_lightbox" class="alignright">Lightbox popup</label></th> <td class="field"> <input type="checkbox" id="fv_wp_flowplayer_field_lightbox" name="fv_wp_flowplayer_field_lightbox" /> <input type="text" id="fv_wp_flowplayer_field_lightbox_width" name="fv_wp_flowplayer_field_lightbox_width" style="width: 12%" placeholder="Width" /> <input type="text" id="fv_wp_flowplayer_field_lightbox_height" name="fv_wp_flowplayer_field_lightbox_height" style="width: 12%" placeholder="Height" /> <input type="text" id="fv_wp_flowplayer_field_lightbox_caption" name="fv_wp_flowplayer_field_lightbox_caption" style="width: 62%" placeholder="Caption" /> </td> </tr> <script> jQuery(document).on('fv_flowplayer_shortcode_parse', function (e, shortcode) { document.getElementById("fv_wp_flowplayer_field_lightbox").checked = 0; document.getElementById("fv_wp_flowplayer_field_lightbox_width").value = ''; document.getElementById("fv_wp_flowplayer_field_lightbox_height").value = ''; document.getElementById("fv_wp_flowplayer_field_lightbox_caption").value = ''; var sLightbox = shortcode.match(/lightbox="(.*?)"/); if (sLightbox && typeof (sLightbox) != "undefined" && typeof (sLightbox[1]) != "undefined") { sLightbox = sLightbox[1]; fv_wp_fp_shortcode_remains = fv_wp_fp_shortcode_remains.replace(/lightbox="(.*?)"/, ''); if (sLightbox) { var aLightbox = sLightbox.split(/[;]/, 4); if (aLightbox.length > 2) { for (var i in aLightbox) { if (i == 0 && aLightbox[i] == 'true') { document.getElementById("fv_wp_flowplayer_field_lightbox").checked = 1; } else if (i == 1) { document.getElementById("fv_wp_flowplayer_field_lightbox_width").value = parseInt(aLightbox[i]); } else if (i == 2) { document.getElementById("fv_wp_flowplayer_field_lightbox_height").value = parseInt(aLightbox[i]); } else if (i == 3) { document.getElementById("fv_wp_flowplayer_field_lightbox_caption").value = aLightbox[i].trim(); } } } else { if (typeof (aLightbox[0]) != "undefined" && aLightbox[0] == 'true') { document.getElementById("fv_wp_flowplayer_field_lightbox").checked = 1; } if (typeof (aLightbox[1]) != "undefined") { document.getElementById("fv_wp_flowplayer_field_lightbox_caption").value = aLightbox[1].trim(); } } } } }); jQuery(document).on('fv_flowplayer_shortcode_create', function () { if (document.getElementById("fv_wp_flowplayer_field_lightbox").checked) { var iWidth = parseInt(document.getElementById("fv_wp_flowplayer_field_lightbox_width").value); var iHeight = parseInt(document.getElementById("fv_wp_flowplayer_field_lightbox_height").value); var sSize = (iWidth && iHeight) ? ';' + iWidth + ';' + iHeight : ''; var sCaption = ';' + document.getElementById("fv_wp_flowplayer_field_lightbox_caption").value.trim(); fv_wp_fp_shortcode += ' lightbox="true' + sSize + sCaption + '"'; } }) </script> <?php } } function lightbox_admin_interface_html() { global $fv_fp; $fv_fp->_get_checkbox(__('Enable video lightbox', 'fv-wordpress-flowplayer'), array('interface', 'lightbox'), __('You can also put in <code><a href="http://path.to.your/video.mp4" class="colorbox">Your link title</a></code> for a quick lightboxed video.', 'fv-wordpress-flowplayer')); } function lightbox_admin_default_options_html() { global $fv_fp; ?> <tr> <td style="width: 250px"><label for="lightbox_images"><?php _e('Use video lightbox for images as well', 'fv-wordpress-flowplayer'); ?>:</label></td> <td> <p class="description"> <input type="hidden" value="false" name="lightbox_images" /> <input type="checkbox" value="true" name="lightbox_images" id="lightbox_images" <?php if ($fv_fp->_get_option('lightbox_images')) echo 'checked="checked"'; ?> /> <?php _e('Will group images as well as videos into the same lightbox gallery. Turn <strong>off</strong> your lightbox plugin when using this.', 'fv-wordpress-flowplayer'); ?> <span class="more"><?php _e('Also works with WordPress <code>[gallery]</code> galleries - these are automatically switched to link to image URLs rather than the attachment pages.'); ?></span> <a href="#" class="show-more">(…)</a> </p> </td> </tr> <tr id="lightbox-wp-galleries"> <td style="width: 250px"><label for="lightbox_improve_galleries"><?php _e('Use video lightbox for WP Galleries', 'fv-wordpress-flowplayer'); ?>:</label></td> <td> <p class="description"> <input type="hidden" value="false" name="lightbox_improve_galleries" /> <input type="checkbox" value="true" name="lightbox_improve_galleries" id="lightbox_improve_galleries" <?php if ($fv_fp->_get_option('lightbox_improve_galleries')) echo 'checked="checked"'; ?> /> <?php _e('Your gallery items will link to image files directly to allow this.', 'fv-wordpress-flowplayer'); ?> </p> </td> </tr> <script> jQuery(document).ready(function(){ jQuery('[name="pro[interface][lightbox]"]').parents('td').replaceWith('<td><p><?php _e('Setting <a href="#interface[live]">moved</a>', 'fv-wordpress-flowplayer'); ?></p></td>'); jQuery('[name="pro[lightbox_images]"]').parents('td').replaceWith('<td><p><?php _e('Setting <a href="#subtitleOn">moved</a>', 'fv-wordpress-flowplayer'); ?></p></td>'); var lightbox_images = jQuery('#lightbox_images'); if(lightbox_images.attr('checked')){ jQuery('#lightbox-wp-galleries').show(); }else{ jQuery('#lightbox-wp-galleries').hide(); } lightbox_images.on('click',function(){ if(jQuery(this).attr('checked')){ jQuery('#lightbox-wp-galleries').show(); }else{ jQuery('#lightbox-wp-galleries').hide(); } }) }) </script> <?php } function fancybox_opts( $splash = false ) { $options = array('touch' => false); if( !empty($splash) ) $options['thumb'] = $splash; return " data-fancybox='gallery' data-options='".json_encode($options)."'"; } } global $FV_Player_lightbox; $FV_Player_lightbox = new FV_Player_lightbox();