422 lines
17 KiB
PHP
422 lines
17 KiB
PHP
<?php
|
|
/**
|
|
* @author ThemePunch <info@themepunch.com>
|
|
* @link http://www.themepunch.com/
|
|
* @copyright 2015 ThemePunch
|
|
*/
|
|
|
|
if( !defined( 'ABSPATH') ) exit();
|
|
|
|
class RevSliderTinyBox {
|
|
|
|
protected static $instanceIndex = 1;
|
|
|
|
public function __construct(){
|
|
|
|
}
|
|
|
|
/**
|
|
* Add interface for custom shortcodes to tinymce
|
|
* @since: 5.1.1
|
|
*/
|
|
public static function add_tinymce_editor(){
|
|
global $typenow, $pagenow;
|
|
|
|
// check user permissions
|
|
if (!current_user_can('edit_posts') && !current_user_can('edit_pages')) return;
|
|
|
|
$post_types = get_post_types();
|
|
if(!is_array($post_types)) $post_types = array( 'post', 'page' );
|
|
// verify the post type
|
|
if(!in_array($typenow, $post_types)) return;
|
|
if((isset($_GET['action']) && $_GET['action'] == 'edit') || (isset($_GET['vc_action']) && $_GET['vc_action'] == 'vc_inline') || $pagenow == 'post-new.php'){
|
|
// check if WYSIWYG is enabled
|
|
if(get_user_option('rich_editing') == 'true'){
|
|
add_filter('mce_external_plugins', array('RevSliderTinyBox', 'add_tinymce_shortcode_editor_plugin'));
|
|
add_filter('mce_buttons', array('RevSliderTinyBox', 'add_tinymce_shortcode_editor_button'));
|
|
}
|
|
|
|
add_action('in_admin_footer', array('RevSliderTinyBox', 'add_tiny_mce_shortcode_dialog'));
|
|
}else{
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Allow for VC to use this plugin
|
|
*/
|
|
public static function visual_composer_include(){
|
|
if(@is_user_logged_in()){
|
|
|
|
if(!function_exists('vc_map') || !function_exists('vc_action')) return false;
|
|
|
|
if('true' === vc_request_param('vc_editable') || 'vc_inline' === vc_action() || is_admin()){
|
|
add_action( 'init', array('RevSliderTinyBox', 'add_to_VC' ));
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
public static function add_to_VC() {
|
|
|
|
//wp_enqueue_script('revslider-admin-script', RS_PLUGIN_URL.'admin/assets/js/admin.js', array('jquery'), RevSliderGlobals::SLIDER_REVISION );
|
|
wp_enqueue_script('wpdialogs', 'jquery-ui-sortable', 'jquery-ui-dialog');
|
|
wp_enqueue_style('wp-jquery-ui-dialog');
|
|
|
|
vc_map( array(
|
|
'name' => __('Revolution Slider 5', 'revslider'),
|
|
'base' => 'rev_slider',
|
|
'icon' => 'icon-wpb-revslider',
|
|
'category' => __('Content', 'revslider'),
|
|
'show_settings_on_create' => false,
|
|
'js_view' => 'VcSliderRevolution',
|
|
'admin_enqueue_js' => RS_PLUGIN_URL.'admin/assets/js/vc.js',
|
|
'front_enqueue_js' => RS_PLUGIN_URL.'admin/assets/js/vc.js',
|
|
'params' => array(
|
|
array(
|
|
'type' => 'rev_slider_shortcode',
|
|
'heading' => __('Alias', 'revslider'),
|
|
'param_name' => 'alias',
|
|
'admin_label' => true,
|
|
'value' => ''
|
|
),
|
|
array(
|
|
'type' => 'rev_slider_shortcode',
|
|
'heading' => __('Order', 'revslider'),
|
|
'param_name' => 'order',
|
|
'admin_label' => true,
|
|
'value' => ''
|
|
)
|
|
)
|
|
) );
|
|
|
|
if(version_compare(WPB_VC_VERSION, '4.4', '>=')){ //use if 4.4 or newer
|
|
vc_add_shortcode_param('rev_slider_shortcode', array('RevSliderTinyBox', 'revslider_shortcode_settings_field'));
|
|
}else{ //use if older than 4.4
|
|
add_shortcode_param('rev_slider_shortcode', array('RevSliderTinyBox', 'revslider_shortcode_settings_field'));
|
|
}
|
|
|
|
//if ( vc_is_frontend_ajax() || vc_is_frontend_editor() ) {
|
|
// remove_filter( 'vc_revslider_shortcode', array( 'Vc_Vendor_Revslider', 'setId' ) );
|
|
//}
|
|
|
|
}
|
|
|
|
//public function setId( $output ) {
|
|
// return preg_replace( '/rev_slider_(\d+)_(\d+)/', 'rev_slider_$1_$2' . time() . '_' . self::$instanceIndex ++, $output );
|
|
//}
|
|
|
|
|
|
/**
|
|
* The Dialog for Visual Composer
|
|
* @since: 5.1.1
|
|
*/
|
|
public static function revslider_shortcode_settings_field($settings, $value) {
|
|
|
|
return '<div class="rev_slider_shortcode_block">'
|
|
.'<input id="rs-vc-input-'.$settings['param_name'].'" name="'.$settings['param_name']
|
|
.'" class="wpb_vc_param_value wpb-textinput '
|
|
.$settings['param_name'].' '.$settings['type'].'_field" type="text" value="'
|
|
.$value.'" />'
|
|
.'</div>';
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* add script tinymce shortcode script
|
|
* @since: 5.1.1
|
|
*/
|
|
public static function add_tinymce_shortcode_editor_plugin($plugin_array){
|
|
|
|
$plugin_array['revslider_sc_button'] = RS_PLUGIN_URL . 'admin/assets/js/tinymce-shortcode-script.js';
|
|
|
|
return $plugin_array;
|
|
|
|
}
|
|
|
|
/**
|
|
* Add button to tinymce
|
|
* @since: 5.1.1
|
|
*/
|
|
public static function add_tinymce_shortcode_editor_button($buttons){
|
|
|
|
array_push($buttons, "revslider_sc_button");
|
|
|
|
return $buttons;
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* Add dialog for shortcode generator
|
|
* @since: 5.1.1
|
|
*/
|
|
public static function add_tiny_mce_shortcode_dialog(){
|
|
?>
|
|
<div id="revslider-tiny-mce-dialog" tabindex="-1" action="" title="" style="display: none; ">
|
|
<form id="revslider-tiny-mce-settings-form" action="">
|
|
<!-- STEP 1 -->
|
|
<div id="revslider-tiny-dialog-step-1">
|
|
<p class="revslider-quicktitle"></p>
|
|
<?php
|
|
self::add_step_1_markup();
|
|
?>
|
|
<div class="revslider-stepnavigator">
|
|
<span class="revslider-currentstep"><strong><?php _e('STEP 1', 'revslider'); ?></strong><?php _e('Select / Create Slider', 'revslider'); ?></span>
|
|
<span class="revslider-step-actions-wrapper">
|
|
<a href="javascript:void(0);" class="button-primary nonclickable" id="rs-modify-predefined-slider"><span class="dashicons dashicons-admin-generic"></span><?php _e('Quick Modify Slider', 'revslider'); ?></a>
|
|
<a href="javascript:void(0);" class="button-primary nonclickable" id="rs-add-predefined-slider"><span class="dashicons dashicons-migrate"></span><?php _e('Add Selected Slider', 'revslider'); ?></a>
|
|
</span>
|
|
<span style="clear:both;width:100%;display:block"></span>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- STEP 1.5 -->
|
|
<div id="revslider-tiny-dialog-step-1-5" style="display: none;">
|
|
<p class="revslider-quicktitle"></p>
|
|
<div id="revslider-tiny-settings-wrap" class="revslider-quick-inner-wrapper" style="padding-right:0px;padding-bottom:0px;">
|
|
<ul class="rs-mod-slides-wrapper">
|
|
|
|
</ul>
|
|
</div>
|
|
<div class="revslider-stepnavigator"><span class="revslider-currentstep"><strong><?php _e('STEP 2', 'revslider'); ?></strong><?php _e('Quick Modify / Add Slider', 'revslider'); ?></span>
|
|
<span class="revslider-step-actions-wrapper">
|
|
<a href="javascript:void(0);" class="button-primary rs-goto-step-1"><span class="dashicons dashicons-arrow-left-alt"></span><?php _e('Select Slider', 'revslider'); ?></a>
|
|
<a href="javascript:void(0);" class="button-primary " id="revslider-add-custom-shortcode-modify"><span class="dashicons dashicons-migrate"></span><?php _e('Add Selected Slider', 'revslider'); ?></a>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
|
|
<script>
|
|
jQuery("document").ready(function() {
|
|
jQuery('body').on('click', '.slide-published.pubclickable', function(){
|
|
var li = jQuery(this).closest('li');
|
|
li.find('.slide-published').removeClass("pubclickable");
|
|
li.find('.slide-unpublished').addClass("pubclickable");
|
|
});
|
|
jQuery('body').on('click', '.slide-unpublished.pubclickable', function(){
|
|
var li = jQuery(this).closest('li');
|
|
li.find('.slide-published').addClass("pubclickable");
|
|
li.find('.slide-unpublished').removeClass("pubclickable");
|
|
});
|
|
|
|
jQuery('body').on('click', '.slide-hero-published.pubclickable', function(){
|
|
var li = jQuery(this).closest('li');
|
|
jQuery('.slide-link-published-wrapper').each(function(){
|
|
jQuery(this).find('.slide-hero-published').addClass("pubclickable");
|
|
jQuery(this).find('.slide-hero-unpublished').removeClass("pubclickable");
|
|
});
|
|
li.find('.slide-hero-published').removeClass("pubclickable");
|
|
li.find('.slide-hero-unpublished').addClass("pubclickable");
|
|
});
|
|
jQuery('body').on('click', '.slide-hero-unpublished.pubclickable', function(){
|
|
var li = jQuery(this).closest('li');
|
|
jQuery('.slide-link-published-wrapper').each(function(){
|
|
jQuery(this).find('.slide-hero-published').addClass("pubclickable");
|
|
jQuery(this).find('.slide-hero-unpublished').removeClass("pubclickable");
|
|
});
|
|
li.find('.slide-hero-published').addClass("pubclickable");
|
|
//li.find('.slide-hero-unpublished').removeClass("pubclickable");
|
|
});
|
|
});
|
|
</script>
|
|
|
|
|
|
<script type="text/html" id="tmpl-rs-modify-slide-wrap">
|
|
<li id="slidelist_item_{{ data.id }}" class="rs-slide-modify-li">
|
|
<span class="mini-transparent mini-as-bg"></span>
|
|
<div class="rs-slide-modify-container {{ data.bg_extraClass }}" {{{ data.bg_fullstyle }}}></div>
|
|
<i class="slide-link-forward eg-icon-forward"></i>
|
|
|
|
<span class="slide-link-published-wrapper">
|
|
<# if(data.slider_type !== 'hero'){ #>
|
|
<# if(data.state == 'published'){ #>
|
|
<span class="slide-published" ></span>
|
|
<span class="slide-unpublished pubclickable"></span>
|
|
<# }else{ #>
|
|
<span class="slide-unpublished"></span>
|
|
<span class="slide-published pubclickable"></span>
|
|
<# } #>
|
|
<# }else{ #>
|
|
<# if(data.active_slide == data.id || data.active_slide == -1){ #> <?php /* || data.active_slide == -1 */ ?>
|
|
<span class="slide-hero-published"></span>
|
|
<span class="slide-hero-unpublished pubclickable"></span>
|
|
<# }else{ #>
|
|
<span class="slide-hero-published pubclickable"></span>
|
|
<span class="slide-hero-unpublished"></span>
|
|
<# } #>
|
|
<# } #>
|
|
</span>
|
|
<span class="rs-slide-modify-title">{{ data.title }}</span>
|
|
</li>
|
|
</script>
|
|
<?php
|
|
}
|
|
|
|
public static function add_step_1_markup(){
|
|
$sld = new RevSlider();
|
|
$sliders = $sld->getArrSliders();
|
|
?>
|
|
<div class="revslider-quick-inner-wrapper" style="padding-right:0px;padding-bottom:0px;">
|
|
<select name="revslider-existing-slider" id="revslider-existing-slider">
|
|
<option value="-1" selected="selected"><?php _e('--- Choose Slider ---', 'revslider'); ?></option>
|
|
<?php
|
|
$sl = array();
|
|
$sliders_info = array();
|
|
if(!empty($sliders)){
|
|
foreach($sliders as $slider){
|
|
$alias = $slider->getParam('alias','false');
|
|
$title = $slider->getTitle();
|
|
$type = $slider->getParam('source_type','gallery');
|
|
$slider_type = $slider->getParam('slider-type','standard');
|
|
$active_slide = $slider->getParam('hero_active', -1);
|
|
$sliderID = $slider->getID();
|
|
|
|
if($type == 'gallery'){
|
|
$slides = $slider->getSlides();
|
|
}elseif($type == 'specific_posts' || $type == 'current_post'){
|
|
$slides = $slider->getSlidesFromPosts();
|
|
}
|
|
|
|
if(!empty($slides)){
|
|
$sliders_info[$sliderID] = array();
|
|
|
|
foreach($slides as $slide){
|
|
$bg_extraClass = '';
|
|
$bg_fullstyle = '';
|
|
|
|
$urlImageForView = $slide->getThumbUrl();
|
|
|
|
$bgt = $slide->getParam('background_type', 'transparent');
|
|
if($type == 'woocommerce'){
|
|
}
|
|
if($bgt == 'image' || $bgt == 'streamvimeo' || $bgt == 'streamyoutube' || $bgt == 'streaminstagram'){
|
|
switch($type){
|
|
case 'posts':
|
|
$urlImageForView = RS_PLUGIN_URL.'public/assets/assets/sources/post.png';
|
|
break;
|
|
case 'woocommerce':
|
|
$urlImageForView = RS_PLUGIN_URL.'public/assets/assets/sources/wc.png';
|
|
break;
|
|
case 'facebook':
|
|
$urlImageForView = RS_PLUGIN_URL.'public/assets/assets/sources/fb.png';
|
|
break;
|
|
case 'twitter':
|
|
$urlImageForView = RS_PLUGIN_URL.'public/assets/assets/sources/tw.png';
|
|
break;
|
|
case 'instagram':
|
|
$urlImageForView = RS_PLUGIN_URL.'public/assets/assets/sources/ig.png';
|
|
break;
|
|
case 'flickr':
|
|
$urlImageForView = RS_PLUGIN_URL.'public/assets/assets/sources/fr.png';
|
|
break;
|
|
case 'youtube':
|
|
$urlImageForView = RS_PLUGIN_URL.'public/assets/assets/sources/yt.png';
|
|
break;
|
|
case 'vimeo':
|
|
$urlImageForView = RS_PLUGIN_URL.'public/assets/assets/sources/vm.png';
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ($bgt == 'image' || $bgt == 'vimeo' || $bgt == 'youtube' || $bgt == 'html5' || $bgt == 'streamvimeo' || $bgt == 'streamyoutube' || $bgt == 'streaminstagram'){
|
|
$bg_style = ' ';
|
|
if($slide->getParam('bg_fit', 'cover') == 'percentage'){
|
|
$bg_style .= "background-size: ".$slide->getParam('bg_fit_x', '100').'% '.$slide->getParam('bg_fit_y', '100').'%;';
|
|
}else{
|
|
$bg_style .= "background-size: ".$slide->getParam('bg_fit', 'cover').";";
|
|
}
|
|
if($slide->getParam('bg_position', 'center center') == 'percentage'){
|
|
$bg_style .= "background-position: ".intval($slide->getParam('bg_position_x', '0')).'% '.intval($slide->getParam('bg_position_y', '0')).'%;';
|
|
}else{
|
|
$bg_style .= "background-position: ".$slide->getParam('bg_position', 'center center').";";
|
|
}
|
|
$bg_style .= "background-repeat: ".$slide->getParam('bg_repeat', 'no-repeat').";";
|
|
$bg_fullstyle =' style="background-image:url('.$urlImageForView.');'.$bg_style.'" ';
|
|
}
|
|
|
|
if ($bgt == 'solid') $bg_fullstyle =' style="background-color:'.$slide->getParam('slide_bg_color', 'transparent').';" ';
|
|
if ($bgt == 'trans') $bg_extraClass = 'mini-transparent';
|
|
if ($slide->getParam('thumb_for_admin', 'off') == "on") $bg_fullstyle =' style="background-image:url('.$slide->getParam('slide_thumb','').');background-size:cover;background-position:center center" ';
|
|
|
|
$sliders_info[$sliderID][] = array( 'id' => $slide->getID(),
|
|
'slider_type' => $slider_type,
|
|
'title' => $slide->getTitle(),
|
|
'slidertitle' => $title,
|
|
'slideralias' => $alias,
|
|
'sliderid' => $sliderID,
|
|
'state' => $slide->getParam('state', 'published'),
|
|
'slide_thumb' => $slide->getParam('slide_thumb', ''),
|
|
'bg_fullstyle' => $bg_fullstyle,
|
|
'bg_extraClass' => $bg_extraClass,
|
|
'active_slide' => $active_slide
|
|
);
|
|
|
|
if($active_slide == -1) $active_slide = -99; //do this so that we are hero, only the first slide will be active if no hero slide was yet set
|
|
}
|
|
}
|
|
|
|
$sl[$type][] = array('alias' => $alias, 'title' => $title, 'id' => $sliderID);
|
|
}
|
|
|
|
if(!empty($sl)){
|
|
foreach($sl as $type => $slider){
|
|
$mtype = ($type == 'specific_posts') ? 'Specific Posts' : $type;
|
|
$mtype = ($type == 'current_post') ? 'Current Post' : $type;
|
|
echo '<option disabled="disabled">--- '.ucfirst(esc_attr($mtype)).' ---</option>';
|
|
foreach($slider as $values){
|
|
if($values['alias'] != 'false'){
|
|
echo '<option data-sliderid="'.esc_attr($values['id']).'" data-slidertype="'.esc_attr($type).'" value="'.esc_attr($values['alias']).'">'.esc_attr($values['title']).'</option>'."\n";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
?>
|
|
</select>
|
|
|
|
<ul id="rs-shortcode-select-wrapper">
|
|
<li class="rs-slider-modify-li rs-slider-modify-new-slider">
|
|
<a href="<?php echo RevSliderBaseAdmin::getViewUrl(RevSliderAdmin::VIEW_SLIDER); ?>" target="_blank" class="button-primary revgreen" id="rs-create-predefined-slider"><span class="dashicons dashicons-plus"></span><span class="rs-slider-modify-title"><?php _e('Create Slider', 'revslider'); ?></span></a>
|
|
</li>
|
|
<?php
|
|
if(!empty($sliders_info)){
|
|
foreach($sliders_info as $type => $slider){
|
|
foreach($slider as $values){
|
|
?>
|
|
<li id="slider_list_item_<?php echo $values['sliderid']; ?>" class="rs-slider-modify-li" data-sliderid="<?php echo esc_attr($values['sliderid']); ?>" data-slideralias="<?php echo esc_attr($values['slideralias']); ?>">
|
|
<span class="mini-transparent mini-as-bg"></span>
|
|
<div class="rs-slider-modify-container <?php echo $values['bg_extraClass']; ?>" <?php echo $values['bg_fullstyle']; ?>></div>
|
|
<i class="slide-link-forward eg-icon-forward"></i>
|
|
|
|
<span class="rs-slider-modify-title">#<?php echo $values['sliderid'].' '.$values['slidertitle']; ?></span>
|
|
</li>
|
|
<?php
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
?>
|
|
|
|
<span style="clear:both;width:100%;display:block"></span>
|
|
|
|
</ul>
|
|
<span style="clear:both;width:100%;display:block"></span>
|
|
<script type="text/javascript">
|
|
var rev_sliders_info = jQuery.parseJSON(<?php echo RevSliderFunctions::jsonEncodeForClientSide($sliders_info); ?>);
|
|
</script>
|
|
</div>
|
|
<?php
|
|
}
|
|
}
|
|
|
|
/**
|
|
* old classname extends new one (old classnames will be obsolete soon)
|
|
* @since: 5.0
|
|
**/
|
|
class RevSlider_TinyBox extends RevSliderTinyBox {}
|
|
?>
|