tinybox.class.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422
  1. <?php
  2. /**
  3. * @author ThemePunch <info@themepunch.com>
  4. * @link http://www.themepunch.com/
  5. * @copyright 2015 ThemePunch
  6. */
  7. if( !defined( 'ABSPATH') ) exit();
  8. class RevSliderTinyBox {
  9. protected static $instanceIndex = 1;
  10. public function __construct(){
  11. }
  12. /**
  13. * Add interface for custom shortcodes to tinymce
  14. * @since: 5.1.1
  15. */
  16. public static function add_tinymce_editor(){
  17. global $typenow, $pagenow;
  18. // check user permissions
  19. if (!current_user_can('edit_posts') && !current_user_can('edit_pages')) return;
  20. $post_types = get_post_types();
  21. if(!is_array($post_types)) $post_types = array( 'post', 'page' );
  22. // verify the post type
  23. if(!in_array($typenow, $post_types)) return;
  24. if((isset($_GET['action']) && $_GET['action'] == 'edit') || (isset($_GET['vc_action']) && $_GET['vc_action'] == 'vc_inline') || $pagenow == 'post-new.php'){
  25. // check if WYSIWYG is enabled
  26. if(get_user_option('rich_editing') == 'true'){
  27. add_filter('mce_external_plugins', array('RevSliderTinyBox', 'add_tinymce_shortcode_editor_plugin'));
  28. add_filter('mce_buttons', array('RevSliderTinyBox', 'add_tinymce_shortcode_editor_button'));
  29. }
  30. add_action('in_admin_footer', array('RevSliderTinyBox', 'add_tiny_mce_shortcode_dialog'));
  31. }else{
  32. return;
  33. }
  34. }
  35. /**
  36. * Allow for VC to use this plugin
  37. */
  38. public static function visual_composer_include(){
  39. if(@is_user_logged_in()){
  40. if(!function_exists('vc_map') || !function_exists('vc_action')) return false;
  41. if('vc_inline' === vc_action() || is_admin()){
  42. add_action( 'init', array('RevSliderTinyBox', 'add_to_VC' ));
  43. }
  44. }
  45. }
  46. public static function add_to_VC() {
  47. //wp_enqueue_script('revslider-admin-script', RS_PLUGIN_URL.'admin/assets/js/admin.js', array('jquery'), RevSliderGlobals::SLIDER_REVISION );
  48. wp_enqueue_script('wpdialogs', 'jquery-ui-sortable', 'jquery-ui-dialog');
  49. wp_enqueue_style('wp-jquery-ui-dialog');
  50. vc_map( array(
  51. 'name' => __('Revolution Slider 5', 'revslider'),
  52. 'base' => 'rev_slider',
  53. 'icon' => 'icon-wpb-revslider',
  54. 'category' => __('Content', 'revslider'),
  55. 'show_settings_on_create' => false,
  56. 'js_view' => 'VcSliderRevolution',
  57. 'admin_enqueue_js' => RS_PLUGIN_URL.'admin/assets/js/vc.js',
  58. 'front_enqueue_js' => RS_PLUGIN_URL.'admin/assets/js/vc.js',
  59. 'params' => array(
  60. array(
  61. 'type' => 'rev_slider_shortcode',
  62. 'heading' => __('Alias', 'revslider'),
  63. 'param_name' => 'alias',
  64. 'admin_label' => true,
  65. 'value' => ''
  66. ),
  67. array(
  68. 'type' => 'rev_slider_shortcode',
  69. 'heading' => __('Order', 'revslider'),
  70. 'param_name' => 'order',
  71. 'admin_label' => true,
  72. 'value' => ''
  73. )
  74. )
  75. ) );
  76. if(version_compare(WPB_VC_VERSION, '4.4', '>=')){ //use if 4.4 or newer
  77. vc_add_shortcode_param('rev_slider_shortcode', array('RevSliderTinyBox', 'revslider_shortcode_settings_field'));
  78. }else{ //use if older than 4.4
  79. add_shortcode_param('rev_slider_shortcode', array('RevSliderTinyBox', 'revslider_shortcode_settings_field'));
  80. }
  81. //if ( vc_is_frontend_ajax() || vc_is_frontend_editor() ) {
  82. // remove_filter( 'vc_revslider_shortcode', array( 'Vc_Vendor_Revslider', 'setId' ) );
  83. //}
  84. }
  85. //public function setId( $output ) {
  86. // return preg_replace( '/rev_slider_(\d+)_(\d+)/', 'rev_slider_$1_$2' . time() . '_' . self::$instanceIndex ++, $output );
  87. //}
  88. /**
  89. * The Dialog for Visual Composer
  90. * @since: 5.1.1
  91. */
  92. public static function revslider_shortcode_settings_field($settings, $value) {
  93. return '<div class="rev_slider_shortcode_block">'
  94. .'<input id="rs-vc-input-'.$settings['param_name'].'" name="'.$settings['param_name']
  95. .'" class="wpb_vc_param_value wpb-textinput '
  96. .$settings['param_name'].' '.$settings['type'].'_field" type="text" value="'
  97. .$value.'" />'
  98. .'</div>';
  99. }
  100. /**
  101. * add script tinymce shortcode script
  102. * @since: 5.1.1
  103. */
  104. public static function add_tinymce_shortcode_editor_plugin($plugin_array){
  105. $plugin_array['revslider_sc_button'] = RS_PLUGIN_URL . 'admin/assets/js/tinymce-shortcode-script.js';
  106. return $plugin_array;
  107. }
  108. /**
  109. * Add button to tinymce
  110. * @since: 5.1.1
  111. */
  112. public static function add_tinymce_shortcode_editor_button($buttons){
  113. array_push($buttons, "revslider_sc_button");
  114. return $buttons;
  115. }
  116. /**
  117. * Add dialog for shortcode generator
  118. * @since: 5.1.1
  119. */
  120. public static function add_tiny_mce_shortcode_dialog(){
  121. ?>
  122. <div id="revslider-tiny-mce-dialog" tabindex="-1" action="" title="" style="display: none; ">
  123. <form id="revslider-tiny-mce-settings-form" action="">
  124. <!-- STEP 1 -->
  125. <div id="revslider-tiny-dialog-step-1">
  126. <p class="revslider-quicktitle"></p>
  127. <?php
  128. self::add_step_1_markup();
  129. ?>
  130. <div class="revslider-stepnavigator">
  131. <span class="revslider-currentstep"><strong><?php _e('STEP 1', 'revslider'); ?></strong><?php _e('Select / Create Slider', 'revslider'); ?></span>
  132. <span class="revslider-step-actions-wrapper">
  133. <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>
  134. <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>
  135. </span>
  136. <span style="clear:both;width:100%;display:block"></span>
  137. </div>
  138. </div>
  139. <!-- STEP 1.5 -->
  140. <div id="revslider-tiny-dialog-step-1-5" style="display: none;">
  141. <p class="revslider-quicktitle"></p>
  142. <div id="revslider-tiny-settings-wrap" class="revslider-quick-inner-wrapper" style="padding-right:0px;padding-bottom:0px;">
  143. <ul class="rs-mod-slides-wrapper">
  144. </ul>
  145. </div>
  146. <div class="revslider-stepnavigator"><span class="revslider-currentstep"><strong><?php _e('STEP 2', 'revslider'); ?></strong><?php _e('Quick Modify / Add Slider', 'revslider'); ?></span>
  147. <span class="revslider-step-actions-wrapper">
  148. <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>
  149. <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>
  150. </span>
  151. </div>
  152. </div>
  153. </form>
  154. </div>
  155. <script>
  156. jQuery("document").ready(function() {
  157. jQuery('body').on('click', '.slide-published.pubclickable', function(){
  158. var li = jQuery(this).closest('li');
  159. li.find('.slide-published').removeClass("pubclickable");
  160. li.find('.slide-unpublished').addClass("pubclickable");
  161. });
  162. jQuery('body').on('click', '.slide-unpublished.pubclickable', function(){
  163. var li = jQuery(this).closest('li');
  164. li.find('.slide-published').addClass("pubclickable");
  165. li.find('.slide-unpublished').removeClass("pubclickable");
  166. });
  167. jQuery('body').on('click', '.slide-hero-published.pubclickable', function(){
  168. var li = jQuery(this).closest('li');
  169. jQuery('.slide-link-published-wrapper').each(function(){
  170. jQuery(this).find('.slide-hero-published').addClass("pubclickable");
  171. jQuery(this).find('.slide-hero-unpublished').removeClass("pubclickable");
  172. });
  173. li.find('.slide-hero-published').removeClass("pubclickable");
  174. li.find('.slide-hero-unpublished').addClass("pubclickable");
  175. });
  176. jQuery('body').on('click', '.slide-hero-unpublished.pubclickable', function(){
  177. var li = jQuery(this).closest('li');
  178. jQuery('.slide-link-published-wrapper').each(function(){
  179. jQuery(this).find('.slide-hero-published').addClass("pubclickable");
  180. jQuery(this).find('.slide-hero-unpublished').removeClass("pubclickable");
  181. });
  182. li.find('.slide-hero-published').addClass("pubclickable");
  183. //li.find('.slide-hero-unpublished').removeClass("pubclickable");
  184. });
  185. });
  186. </script>
  187. <script type="text/html" id="tmpl-rs-modify-slide-wrap">
  188. <li id="slidelist_item_{{ data.id }}" class="rs-slide-modify-li">
  189. <span class="mini-transparent mini-as-bg"></span>
  190. <div class="rs-slide-modify-container {{ data.bg_extraClass }}" {{{ data.bg_fullstyle }}}></div>
  191. <i class="slide-link-forward eg-icon-forward"></i>
  192. <span class="slide-link-published-wrapper">
  193. <# if(data.slider_type !== 'hero'){ #>
  194. <# if(data.state == 'published'){ #>
  195. <span class="slide-published" ></span>
  196. <span class="slide-unpublished pubclickable"></span>
  197. <# }else{ #>
  198. <span class="slide-unpublished"></span>
  199. <span class="slide-published pubclickable"></span>
  200. <# } #>
  201. <# }else{ #>
  202. <# if(data.active_slide == data.id || data.active_slide == -1){ #> <?php /* || data.active_slide == -1 */ ?>
  203. <span class="slide-hero-published"></span>
  204. <span class="slide-hero-unpublished pubclickable"></span>
  205. <# }else{ #>
  206. <span class="slide-hero-published pubclickable"></span>
  207. <span class="slide-hero-unpublished"></span>
  208. <# } #>
  209. <# } #>
  210. </span>
  211. <span class="rs-slide-modify-title">{{ data.title }}</span>
  212. </li>
  213. </script>
  214. <?php
  215. }
  216. public static function add_step_1_markup(){
  217. $sld = new RevSlider();
  218. $sliders = $sld->getArrSliders();
  219. ?>
  220. <div class="revslider-quick-inner-wrapper" style="padding-right:0px;padding-bottom:0px;">
  221. <select name="revslider-existing-slider" id="revslider-existing-slider">
  222. <option value="-1" selected="selected"><?php _e('--- Choose Slider ---', 'revslider'); ?></option>
  223. <?php
  224. $sl = array();
  225. $sliders_info = array();
  226. if(!empty($sliders)){
  227. foreach($sliders as $slider){
  228. $alias = $slider->getParam('alias','false');
  229. $title = $slider->getTitle();
  230. $type = $slider->getParam('source_type','gallery');
  231. $slider_type = $slider->getParam('slider-type','standard');
  232. $active_slide = $slider->getParam('hero_active', -1);
  233. $sliderID = $slider->getID();
  234. if($type == 'gallery'){
  235. $slides = $slider->getSlides();
  236. }elseif($type == 'specific_posts' || $type == 'current_post'){
  237. $slides = $slider->getSlidesFromPosts();
  238. }
  239. if(!empty($slides)){
  240. $sliders_info[$sliderID] = array();
  241. foreach($slides as $slide){
  242. $bg_extraClass = '';
  243. $bg_fullstyle = '';
  244. $urlImageForView = $slide->getThumbUrl();
  245. $bgt = $slide->getParam('background_type', 'transparent');
  246. if($type == 'woocommerce'){
  247. }
  248. if($bgt == 'image' || $bgt == 'streamvimeo' || $bgt == 'streamyoutube' || $bgt == 'streaminstagram'){
  249. switch($type){
  250. case 'posts':
  251. $urlImageForView = RS_PLUGIN_URL.'public/assets/assets/sources/post.png';
  252. break;
  253. case 'woocommerce':
  254. $urlImageForView = RS_PLUGIN_URL.'public/assets/assets/sources/wc.png';
  255. break;
  256. case 'facebook':
  257. $urlImageForView = RS_PLUGIN_URL.'public/assets/assets/sources/fb.png';
  258. break;
  259. case 'twitter':
  260. $urlImageForView = RS_PLUGIN_URL.'public/assets/assets/sources/tw.png';
  261. break;
  262. case 'instagram':
  263. $urlImageForView = RS_PLUGIN_URL.'public/assets/assets/sources/ig.png';
  264. break;
  265. case 'flickr':
  266. $urlImageForView = RS_PLUGIN_URL.'public/assets/assets/sources/fr.png';
  267. break;
  268. case 'youtube':
  269. $urlImageForView = RS_PLUGIN_URL.'public/assets/assets/sources/yt.png';
  270. break;
  271. case 'vimeo':
  272. $urlImageForView = RS_PLUGIN_URL.'public/assets/assets/sources/vm.png';
  273. break;
  274. }
  275. }
  276. if ($bgt == 'image' || $bgt == 'vimeo' || $bgt == 'youtube' || $bgt == 'html5' || $bgt == 'streamvimeo' || $bgt == 'streamyoutube' || $bgt == 'streaminstagram'){
  277. $bg_style = ' ';
  278. if($slide->getParam('bg_fit', 'cover') == 'percentage'){
  279. $bg_style .= "background-size: ".$slide->getParam('bg_fit_x', '100').'% '.$slide->getParam('bg_fit_y', '100').'%;';
  280. }else{
  281. $bg_style .= "background-size: ".$slide->getParam('bg_fit', 'cover').";";
  282. }
  283. if($slide->getParam('bg_position', 'center center') == 'percentage'){
  284. $bg_style .= "background-position: ".intval($slide->getParam('bg_position_x', '0')).'% '.intval($slide->getParam('bg_position_y', '0')).'%;';
  285. }else{
  286. $bg_style .= "background-position: ".$slide->getParam('bg_position', 'center center').";";
  287. }
  288. $bg_style .= "background-repeat: ".$slide->getParam('bg_repeat', 'no-repeat').";";
  289. $bg_fullstyle =' style="background-image:url('.$urlImageForView.');'.$bg_style.'" ';
  290. }
  291. if ($bgt == 'solid') $bg_fullstyle =' style="background-color:'.$slide->getParam('slide_bg_color', 'transparent').';" ';
  292. if ($bgt == 'trans') $bg_extraClass = 'mini-transparent';
  293. 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" ';
  294. $sliders_info[$sliderID][] = array( 'id' => $slide->getID(),
  295. 'slider_type' => $slider_type,
  296. 'title' => $slide->getTitle(),
  297. 'slidertitle' => $title,
  298. 'slideralias' => $alias,
  299. 'sliderid' => $sliderID,
  300. 'state' => $slide->getParam('state', 'published'),
  301. 'slide_thumb' => $slide->getParam('slide_thumb', ''),
  302. 'bg_fullstyle' => $bg_fullstyle,
  303. 'bg_extraClass' => $bg_extraClass,
  304. 'active_slide' => $active_slide
  305. );
  306. 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
  307. }
  308. }
  309. $sl[$type][] = array('alias' => $alias, 'title' => $title, 'id' => $sliderID);
  310. }
  311. if(!empty($sl)){
  312. foreach($sl as $type => $slider){
  313. $mtype = ($type == 'specific_posts') ? 'Specific Posts' : $type;
  314. $mtype = ($type == 'current_post') ? 'Current Post' : $type;
  315. echo '<option disabled="disabled">--- '.ucfirst(esc_attr($mtype)).' ---</option>';
  316. foreach($slider as $values){
  317. if($values['alias'] != 'false'){
  318. echo '<option data-sliderid="'.esc_attr($values['id']).'" data-slidertype="'.esc_attr($type).'" value="'.esc_attr($values['alias']).'">'.esc_attr($values['title']).'</option>'."\n";
  319. }
  320. }
  321. }
  322. }
  323. }
  324. ?>
  325. </select>
  326. <ul id="rs-shortcode-select-wrapper">
  327. <li class="rs-slider-modify-li rs-slider-modify-new-slider">
  328. <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>
  329. </li>
  330. <?php
  331. if(!empty($sliders_info)){
  332. foreach($sliders_info as $type => $slider){
  333. foreach($slider as $values){
  334. ?>
  335. <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']); ?>">
  336. <span class="mini-transparent mini-as-bg"></span>
  337. <div class="rs-slider-modify-container <?php echo $values['bg_extraClass']; ?>" <?php echo $values['bg_fullstyle']; ?>></div>
  338. <i class="slide-link-forward eg-icon-forward"></i>
  339. <span class="rs-slider-modify-title">#<?php echo $values['sliderid'].' '.$values['slidertitle']; ?></span>
  340. </li>
  341. <?php
  342. break;
  343. }
  344. }
  345. }
  346. ?>
  347. <span style="clear:both;width:100%;display:block"></span>
  348. </ul>
  349. <span style="clear:both;width:100%;display:block"></span>
  350. <script type="text/javascript">
  351. var rev_sliders_info = jQuery.parseJSON(<?php echo RevSliderFunctions::jsonEncodeForClientSide($sliders_info); ?>);
  352. </script>
  353. </div>
  354. <?php
  355. }
  356. }
  357. /**
  358. * old classname extends new one (old classnames will be obsolete soon)
  359. * @since: 5.0
  360. **/
  361. class RevSlider_TinyBox extends RevSliderTinyBox {}
  362. ?>