revslider-admin.class.php 84 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172
  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 RevSliderAdmin extends RevSliderBaseAdmin{
  9. const VIEW_SLIDER = "slider";
  10. const VIEW_SLIDER_TEMPLATE = "slider_template"; //obsolete
  11. const VIEW_SLIDERS = "sliders";
  12. const VIEW_SLIDES = "slides";
  13. const VIEW_SLIDE = "slide";
  14. /**
  15. * the constructor
  16. */
  17. public function __construct(){
  18. parent::__construct($this);
  19. //set table names
  20. RevSliderGlobals::$table_sliders = self::$table_prefix.RevSliderGlobals::TABLE_SLIDERS_NAME;
  21. RevSliderGlobals::$table_slides = self::$table_prefix.RevSliderGlobals::TABLE_SLIDES_NAME;
  22. RevSliderGlobals::$table_static_slides = self::$table_prefix.RevSliderGlobals::TABLE_STATIC_SLIDES_NAME;
  23. RevSliderGlobals::$table_settings = self::$table_prefix.RevSliderGlobals::TABLE_SETTINGS_NAME;
  24. RevSliderGlobals::$table_css = self::$table_prefix.RevSliderGlobals::TABLE_CSS_NAME;
  25. RevSliderGlobals::$table_layer_anims = self::$table_prefix.RevSliderGlobals::TABLE_LAYER_ANIMS_NAME;
  26. RevSliderGlobals::$table_navigation = self::$table_prefix.RevSliderGlobals::TABLE_NAVIGATION_NAME;
  27. RevSliderGlobals::$filepath_backup = RS_PLUGIN_PATH.'backup/';
  28. RevSliderGlobals::$filepath_captions = RS_PLUGIN_PATH.'public/assets/css/captions.css';
  29. RevSliderGlobals::$urlCaptionsCSS = RS_PLUGIN_URL.'public/assets/css/captions.php';
  30. RevSliderGlobals::$filepath_dynamic_captions = RS_PLUGIN_PATH.'public/assets/css/dynamic-captions.css';
  31. RevSliderGlobals::$filepath_captions_original = RS_PLUGIN_PATH.'public/assets/css/captions-original.css';
  32. $wp_upload_dir = wp_upload_dir();
  33. $wp_upload_dir = $wp_upload_dir['basedir'].'/';
  34. RevSliderGlobals::$uploadsUrlExportZip = $wp_upload_dir.'export.zip';
  35. $this->init();
  36. }
  37. /**
  38. * init all actions
  39. */
  40. private function init(){
  41. global $revSliderAsTheme;
  42. global $pagenow;
  43. $template = new RevSliderTemplate();
  44. $operations = new RevSliderOperations();
  45. $obj_library = new RevSliderObjectLibrary();
  46. $general_settings = $operations->getGeneralSettingsValues();
  47. $role = RevSliderBase::getVar($general_settings, 'role', 'admin');
  48. $force_activation_box = RevSliderBase::getVar($general_settings, 'force_activation_box', 'off');
  49. if($force_activation_box == 'on'){ //force the notifications and more
  50. $revSliderAsTheme = false;
  51. }
  52. self::setMenuRole($role);
  53. self::addMenuPage('Slider Revolution', "adminPages");
  54. self::addSubMenuPage(__('Navigation Editor', 'revslider'), 'display_plugin_submenu_page_navigation', 'revslider_navigation');
  55. self::addSubMenuPage(__('Global Settings', 'revslider'), 'display_plugin_submenu_page_global_settings', 'revslider_global_settings');
  56. $this->addSliderMetaBox();
  57. //ajax response to save slider options.
  58. self::addActionAjax("ajax_action", "onAjaxAction");
  59. $upgrade = new RevSliderUpdate( GlobalsRevSlider::SLIDER_REVISION );
  60. $temp_active = get_option('revslider-temp-active', 'false');
  61. if($temp_active == 'true'){ //check once an hour
  62. $temp_force = (isset($_GET['checktempactivate'])) ? true : false;
  63. $upgrade->add_temp_active_check($temp_force);
  64. }
  65. //add common scripts there
  66. $validated = get_option('revslider-valid', 'false');
  67. $notice = get_option('revslider-valid-notice', 'true');
  68. $latestv = RevSliderGlobals::SLIDER_REVISION;
  69. $stablev = get_option('revslider-stable-version', '0');
  70. if(!$revSliderAsTheme || version_compare($latestv, $stablev, '<')){
  71. if($validated === 'false' && $notice === 'true'){
  72. add_action('admin_notices', array($this, 'addActivateNotification'));
  73. }
  74. if(isset($_GET['checkforupdates']) && $_GET['checkforupdates'] == 'true')
  75. $upgrade->_retrieve_version_info(true);
  76. if($validated === 'true' || version_compare($latestv, $stablev, '<')) {
  77. $upgrade->add_update_checks();
  78. }
  79. }
  80. if(isset($_REQUEST['update_shop'])){
  81. $template->_get_template_list(true);
  82. }else{
  83. $template->_get_template_list();
  84. }
  85. if(isset($_REQUEST['update_object_library'])){
  86. $obj_library->_get_list(true);
  87. }else{
  88. $obj_library->_get_list();
  89. }
  90. $upgrade->_retrieve_version_info();
  91. add_action('admin_notices', array($this, 'add_notices'));
  92. add_action('admin_enqueue_scripts', array('RevSliderAdmin', 'enqueue_styles'));
  93. add_action('admin_enqueue_scripts', array('RevSliderAdmin', 'enqueue_all_admin_scripts'));
  94. add_action('wp_ajax_revslider_ajax_call_front', array('RevSliderAdmin', 'onFrontAjaxAction'));
  95. add_action('wp_ajax_nopriv_revslider_ajax_call_front', array('RevSliderAdmin', 'onFrontAjaxAction')); //for not logged in users
  96. add_action( 'admin_head', array('RevSliderAdmin', 'include_custom_css' ));
  97. if(isset($pagenow) && $pagenow == 'plugins.php'){
  98. add_action('admin_notices', array('RevSliderAdmin', 'add_plugins_page_notices'));
  99. }
  100. // Add-on Admin
  101. $addon_admin = new Rev_addon_Admin( 'rev_addon', RevSliderGlobals::SLIDER_REVISION );
  102. add_action( 'admin_enqueue_scripts', array( $addon_admin, 'enqueue_styles') );
  103. add_action( 'admin_enqueue_scripts', array( $addon_admin, 'enqueue_scripts') );
  104. add_action( 'admin_menu', array( $addon_admin, 'add_plugin_admin_menu'), 11 );
  105. // Add-on Admin Button Ajax Actions
  106. add_action( 'wp_ajax_activate_plugin', array( $addon_admin, 'activate_plugin') );
  107. //add_action( 'wp_ajax_nopriv_activate_plugin', array( $addon_admin, 'activate_plugin') );
  108. add_action( 'wp_ajax_deactivate_plugin', array( $addon_admin, 'deactivate_plugin'));
  109. //add_action( 'wp_ajax_nopriv_deactivate_plugin', array( $addon_admin, 'deactivate_plugin') );
  110. add_action( 'wp_ajax_install_plugin', array( $addon_admin, 'install_plugin'));
  111. //add_action( 'wp_ajax_nopriv_install_plugin', array( $addon_admin, 'install_plugin') );
  112. //add_filter('plugin_action_links', array('RevSliderAdmin', 'plugin_action_links' ), 10, 2);
  113. }
  114. public static function add_plugins_page_notices(){
  115. $plugins = get_plugins();
  116. foreach($plugins as $plugin_id => $plugin){
  117. $slug = dirname($plugin_id);
  118. if(empty($slug)) continue;
  119. if($slug !== 'revslider') continue;
  120. //check version, latest updates and if registered or not
  121. $validated = get_option('revslider-valid', 'false');
  122. $latestv = get_option('revslider-latest-version', RevSliderGlobals::SLIDER_REVISION);
  123. if($validated == 'false'){ //activate for updates and support
  124. add_action( "after_plugin_row_" . $plugin_id, array('RevSliderAdmin', 'show_purchase_notice'), 10, 3);
  125. }
  126. if(version_compare($latestv, $plugin['Version'], '>')){
  127. add_action( "after_plugin_row_" . $plugin_id, array('RevSliderAdmin', 'show_update_notice'), 10, 3);
  128. }
  129. }
  130. }
  131. public static function show_purchase_notice(){
  132. $wp_list_table = _get_list_table('WP_Plugins_List_Table');
  133. ?>
  134. <tr class="plugin-update-tr"><td colspan="<?php echo $wp_list_table->get_column_count(); ?>" class="plugin-update colspanchange">
  135. <div class="update-message installer-q-icon">
  136. <?php _e('Activate Slider Revolution for <a href="http://revolution.themepunch.com/direct-customer-benefits/" target="_blank">Premium Benefits (e.g. Live Updates)</a>.', 'revslider'); ?>
  137. </div>
  138. </tr>
  139. <?php
  140. }
  141. public static function show_update_notice(){
  142. $wp_list_table = _get_list_table('WP_Plugins_List_Table');
  143. ?>
  144. <tr class="plugin-update-tr"><td colspan="<?php echo $wp_list_table->get_column_count(); ?>" class="plugin-update colspanchange">
  145. <div class="update-message">
  146. <?php _e('A new version of Slider Revolution is available.', 'revslider'); ?>
  147. </div>
  148. </tr>
  149. <?php
  150. }
  151. public static function plugin_action_links($links, $file){
  152. if ($file == plugin_basename(RS_PLUGIN_FILE_PATH)){
  153. $rs_enabled = get_option('revslider-valid', 'false');
  154. if($rs_enabled == 'true'){
  155. krsort($links);
  156. end($links);
  157. $key = key($links);
  158. $links[$key] .= '';
  159. }
  160. }
  161. return $links;
  162. }
  163. public static function enqueue_styles(){
  164. wp_enqueue_style('rs-open-sans', '//fonts.googleapis.com/css?family=Open+Sans:400,300,700,600,800');
  165. wp_enqueue_style('revslider-global-styles', RS_PLUGIN_URL . 'admin/assets/css/global.css', array(), GlobalsRevSlider::SLIDER_REVISION );
  166. }
  167. public static function include_custom_css(){
  168. $type = (isset($_GET['view'])) ? $_GET['view'] : '';
  169. $page = (isset($_GET['page'])) ? $_GET['page'] : '';
  170. if($page !== 'slider' && $page !== 'revslider_navigation') return false; //showbiz fix
  171. $sliderID = '';
  172. switch($type){
  173. case 'slider':
  174. $sliderID = (isset($_GET['id'])) ? $_GET['id'] : '';
  175. break;
  176. case 'slide':
  177. $slideID = (isset($_GET['id'])) ? $_GET['id'] : '';
  178. if($slideID == 'new') break;
  179. $slide = new RevSlide();
  180. $slide->initByID($slideID);
  181. $sliderID = $slide->getSliderID();
  182. break;
  183. default:
  184. if(isset($_GET['slider'])){
  185. $sliderID = $_GET['slider'];
  186. }
  187. break;
  188. }
  189. $arrFieldsParams = array();
  190. if(!empty($sliderID)){
  191. $slider = new RevSlider();
  192. $slider->initByID($sliderID);
  193. $settingsFields = $slider->getSettingsFields();
  194. $arrFieldsMain = $settingsFields['main'];
  195. $arrFieldsParams = $settingsFields['params'];
  196. $custom_css = @stripslashes($arrFieldsParams['custom_css']);
  197. $custom_css = RevSliderCssParser::compress_css($custom_css);
  198. echo '<style>'.$custom_css.'</style>';
  199. }
  200. }
  201. public static function enqueue_all_admin_scripts() {
  202. wp_localize_script('unite_admin', 'rev_lang', self::get_javascript_multilanguage()); //Load multilanguage for JavaScript
  203. wp_enqueue_style(array('wp-color-picker'));
  204. wp_enqueue_script(array('wp-color-picker'));
  205. //enqueue TP-COLOR
  206. wp_enqueue_style('tp-color-picker-css', plugins_url('../public/assets/css/tp-color-picker.css', __FILE__ ), array(), RevSliderGlobals::SLIDER_REVISION);
  207. wp_enqueue_script('tp-color-picker-js', plugins_url('../public/assets/js/tp-color-picker.min.js', __FILE__ ), array('jquery'), RevSliderGlobals::SLIDER_REVISION);
  208. //enqueue in all pages / posts in backend
  209. $screen = get_current_screen();
  210. $post_types = get_post_types( '', 'names' );
  211. foreach($post_types as $post_type) {
  212. if($post_type == $screen->id){
  213. wp_enqueue_script('revslider-tinymce-shortcode-script', RS_PLUGIN_URL . 'admin/assets/js/tinymce-shortcode-script.js', array('jquery'), RevSliderGlobals::SLIDER_REVISION );
  214. }
  215. }
  216. }
  217. /**
  218. * Include wanted submenu page
  219. */
  220. public function display_plugin_submenu_page_navigation() {
  221. self::display_plugin_submenu('navigation-editor');
  222. }
  223. /**
  224. * Include wanted submenu page
  225. */
  226. public function display_plugin_submenu_page_global_settings() {
  227. self::display_plugin_submenu('global-settings');
  228. }
  229. /**
  230. * Include wanted submenu page
  231. */
  232. public function display_plugin_submenu_page_google_fonts() {
  233. self::display_plugin_submenu('themepunch-google-fonts');
  234. }
  235. public static function display_plugin_submenu($subMenu){
  236. parent::adminPages();
  237. self::setMasterView('master-view');
  238. self::requireView($subMenu);
  239. }
  240. /**
  241. * Create Multilanguage for JavaScript
  242. */
  243. protected static function get_javascript_multilanguage(){
  244. $lang = array(
  245. 'wrong_alias' => __('-- wrong alias -- ', 'revslider'),
  246. 'nav_bullet_arrows_to_none' => __('Navigation Bullets and Arrows are now set to none.', 'revslider'),
  247. 'create_template' => __('Create Template', 'revslider'),
  248. 'really_want_to_delete' => __('Do you really want to delete', 'revslider'),
  249. 'sure_to_replace_urls' => __('Are you sure to replace the urls?', 'revslider'),
  250. 'set_settings_on_all_slider' => __('Set selected settings on all Slides of this Slider? (This will be saved immediately)', 'revslider'),
  251. 'select_slide_img' => __('Select Slide Image', 'revslider'),
  252. 'select_layer_img' => __('Select Layer Image', 'revslider'),
  253. 'select_slide_video' => __('Select Slide Video', 'revslider'),
  254. 'show_slide_opt' => __('Show Slide Options', 'revslider'),
  255. 'hide_slide_opt' => __('Hide Slide Options', 'revslider'),
  256. 'close' => __('Close', 'revslider'),
  257. 'really_update_global_styles' => __('Really update global styles?', 'revslider'),
  258. 'really_clear_global_styles' => __('This will remove all Global Styles, continue?', 'revslider'),
  259. 'global_styles_editor' => __('Global Styles Editor', 'revslider'),
  260. 'select_image' => __('Select Image', 'revslider'),
  261. 'video_not_found' => __('No Thumbnail Image Set on Video / Video Not Found / No Valid Video ID', 'revslider'),
  262. 'handle_at_least_three_chars' => __('Handle has to be at least three character long', 'revslider'),
  263. 'really_change_font_sett' => __('Really change font settings?', 'revslider'),
  264. 'really_delete_font' => __('Really delete font?', 'revslider'),
  265. 'class_exist_overwrite' => __('Class already exists, overwrite?', 'revslider'),
  266. 'class_must_be_valid' => __('Class must be a valid CSS class name', 'revslider'),
  267. 'really_overwrite_class' => __('Really overwrite Class?', 'revslider'),
  268. 'relly_delete_class' => __('Really delete Class', 'revslider'),
  269. 'class_this_cant_be_undone' => __('? This can\'t be undone!', 'revslider'),
  270. 'this_class_does_not_exist' => __('This class does not exist.', 'revslider'),
  271. 'making_changes_will_probably_overwrite_advanced' => __('Making changes to these settings will probably overwrite advanced settings. Continue?', 'revslider'),
  272. 'select_static_layer_image' => __('Select Static Layer Image', 'revslider'),
  273. 'select_layer_image' => __('Select Layer Image', 'revslider'),
  274. 'really_want_to_delete_all_layer' => __('Do you really want to delete all the layers?', 'revslider'),
  275. 'layer_animation_editor' => __('Layer Animation Editor', 'revslider'),
  276. 'animation_exists_overwrite' => __('Animation already exists, overwrite?', 'revslider'),
  277. 'really_overwrite_animation' => __('Really overwrite animation?', 'revslider'),
  278. 'default_animations_cant_delete' => __('Default animations can\'t be deleted', 'revslider'),
  279. 'must_be_greater_than_start_time' => __('Must be greater than start time', 'revslider'),
  280. 'sel_layer_not_set' => __('Selected layer not set', 'revslider'),
  281. 'edit_layer_start' => __('Edit Layer Start', 'revslider'),
  282. 'edit_layer_end' => __('Edit Layer End', 'revslider'),
  283. 'default_animations_cant_rename' => __('Default Animations can\'t be renamed', 'revslider'),
  284. 'anim_name_already_exists' => __('Animationname already existing', 'revslider'),
  285. 'css_name_already_exists' => __('CSS classname already existing', 'revslider'),
  286. 'css_orig_name_does_not_exists' => __('Original CSS classname not found', 'revslider'),
  287. 'enter_correct_class_name' => __('Enter a correct class name', 'revslider'),
  288. 'class_not_found' => __('Class not found in database', 'revslider'),
  289. 'css_name_does_not_exists' => __('CSS classname not found', 'revslider'),
  290. 'delete_this_caption' => __('Delete this caption? This may affect other Slider', 'revslider'),
  291. 'this_will_change_the_class' => __('This will update the Class with the current set Style settings, this may affect other Sliders. Proceed?', 'revslider'),
  292. 'unsaved_changes_will_not_be_added' => __('Template will have the state of the last save, proceed?', 'revslider'),
  293. 'please_enter_a_slide_title' => __('Please enter a Slide title', 'revslider'),
  294. 'please_wait_a_moment' => __('Please Wait a Moment', 'revslider'),
  295. 'copy_move' => __('Copy / Move', 'revslider'),
  296. 'preset_loaded' => __('Preset Loaded', 'revslider'),
  297. 'add_bulk_slides' => __('Add Bulk Slides', 'revslider'),
  298. 'select_image' => __('Select Image', 'revslider'),
  299. 'arrows' => __('Arrows', 'revslider'),
  300. 'bullets' => __('Bullets', 'revslider'),
  301. 'thumbnails' => __('Thumbnails', 'revslider'),
  302. 'tabs' => __('Tabs', 'revslider'),
  303. 'delete_navigation' => __('Delete this Navigation?', 'revslider'),
  304. 'could_not_update_nav_name' => __('Navigation name could not be updated', 'revslider'),
  305. 'name_too_short_sanitize_3' => __('Name too short, at least 3 letters between a-zA-z needed', 'revslider'),
  306. 'nav_name_already_exists' => __('Navigation name already exists, please choose a different name', 'revslider'),
  307. 'remove_nav_element' => __('Remove current element from Navigation?', 'revslider'),
  308. 'create_this_nav_element' => __('This navigation element does not exist, create one?', 'revslider'),
  309. 'overwrite_animation' => __('Overwrite current animation?', 'revslider'),
  310. 'cant_modify_default_anims' => __('Default animations can\'t be changed', 'revslider'),
  311. 'anim_with_handle_exists' => __('Animation already existing with given handle, please choose a different name.', 'revslider'),
  312. 'really_delete_anim' => __('Really delete animation:', 'revslider'),
  313. 'this_will_reset_navigation' => __('This will reset the navigation, continue?', 'revslider'),
  314. 'preset_name_already_exists' => __('Preset name already exists, please choose a different name', 'revslider'),
  315. 'delete_preset' => __('Really delete this preset?', 'revslider'),
  316. 'update_preset' => __('This will update the preset with the current settings. Proceed?', 'revslider'),
  317. 'maybe_wrong_yt_id' => __('No Thumbnail Image Set on Video / Video Not Found / No Valid Video ID', 'revslider'),
  318. 'preset_not_found' => __('Preset not found', 'revslider'),
  319. 'cover_image_needs_to_be_set' => __('Cover Image need to be set for videos', 'revslider'),
  320. 'remove_this_action' => __('Really remove this action?', 'revslider'),
  321. 'layer_action_by' => __('Layer is triggered by ', 'revslider'),
  322. 'due_to_action' => __(' due to action: ', 'revslider'),
  323. 'layer' => __('layer:', 'revslider'),
  324. 'start_layer_in' => __('Start Layer "in" animation', 'revslider'),
  325. 'start_layer_out' => __('Start Layer "out" animation', 'revslider'),
  326. 'start_video' => __('Start Media', 'revslider'),
  327. 'stop_video' => __('Stop Media', 'revslider'),
  328. 'mute_video' => __('Mute Media', 'revslider'),
  329. 'unmute_video' => __('Unmute Media', 'revslider'),
  330. 'toggle_layer_anim' => __('Toggle Layer Animation', 'revslider'),
  331. 'toggle_video' => __('Toggle Media', 'revslider'),
  332. 'toggle_mute_video' => __('Toggle Mute Media', 'revslider'),
  333. 'toggle_global_mute_video' => __('Toggle Mute All Media', 'revslider'),
  334. 'last_slide' => __('Last Slide', 'revslider'),
  335. 'simulate_click' => __('Simulate Click', 'revslider'),
  336. 'togglefullscreen' => __('Toggle FullScreen', 'revslider'),
  337. 'gofullscreen' => __('Go FullScreen', 'revslider'),
  338. 'exitfullscreen' => __('Exit FullScreen', 'revslider'),
  339. 'toggle_class' => __('Toogle Class', 'revslider'),
  340. 'copy_styles_to_hover_from_idle' => __('Copy hover styles to idle?', 'revslider'),
  341. 'copy_styles_to_idle_from_hover' => __('Copy idle styles to hover?', 'revslider'),
  342. 'select_at_least_one_device_type' => __('Please select at least one device type', 'revslider'),
  343. 'please_select_first_an_existing_style' => __('Please select an existing Style Template', 'revslider'),
  344. 'cant_remove_last_transition' => __('Can not remove last transition!', 'revslider'),
  345. 'name_is_default_animations_cant_be_changed' => __('Given animation name is a default animation. These can not be changed.', 'revslider'),
  346. 'override_animation' => __('Animation exists, override existing animation?', 'revslider'),
  347. 'this_feature_only_if_activated' => __('This feature is only available if you activate Slider Revolution for this installation', 'revslider'),
  348. 'unsaved_data_will_be_lost_proceed' => __('Unsaved data will be lost, proceed?', 'revslider'),
  349. 'delete_user_slide' => __('This will delete this Slide Template, proceed?', 'revslider'),
  350. 'is_loading' => __('is Loading...', 'revslider'),
  351. 'google_fonts_loaded' => __('Google Fonts Loaded', 'revslider'),
  352. 'delete_layer' => __('Delete Layer?', 'revslider'),
  353. 'this_template_requires_version' => __('This template requires at least version', 'revslider'),
  354. 'of_slider_revolution' => __('of Slider Revolution to work.', 'revslider'),
  355. 'slider_revolution_shortcode_creator' => __('Slider Revolution Shortcode Creator', 'revslider'),
  356. 'slider_informations_are_missing' => __('Slider informations are missing!', 'revslider'),
  357. 'shortcode_generator' => __('Shortcode Generator', 'revslider'),
  358. 'please_add_at_least_one_layer' => __('Please add at least one Layer.', 'revslider'),
  359. 'choose_image' => __('Choose Image', 'revslider'),
  360. 'shortcode_parsing_successfull' => __('Shortcode parsing successfull. Items can be found in step 3', 'revslider'),
  361. 'shortcode_could_not_be_correctly_parsed' => __('Shortcode could not be parsed.', 'revslider'),
  362. 'background_video' => __('Background Video', 'revslider'),
  363. 'active_video' => __('Video in Active Slide', 'revslider'),
  364. 'empty_data_retrieved_for_slider' => __('Data could not be fetched for selected Slider', 'revslider'),
  365. 'import_selected_layer' => __('Import Selected Layer?', 'revslider'),
  366. 'import_all_layer_from_actions' => __('Layer Imported! The Layer has actions which include other Layers. Import all connected layers?', 'revslider'),
  367. 'not_available_in_demo' => __('Not available in Demo Mode', 'revslider'),
  368. 'leave_not_saved' => __('By leaving now, all changes since the last saving will be lost. Really leave now?', 'revslider'),
  369. 'static_layers' => __('--- Static Layers ---', 'revslider'),
  370. 'objects_only_available_if_activated' => __('Only available if plugin is activated', 'revslider'),
  371. 'download_install_takes_longer' => __('Download/Install takes longer than usual, please wait', 'revslider'),
  372. 'download_failed_check_server' => __('<div class="import_failure">Download/Install seems to have failed.</div><br>Please check your server <span class="import_failure">download speed</span> and if the server can programatically connect to <span class="import_failure">http://templates.themepunch.com</span><br><br>', 'revslider'),
  373. 'aborting_import' => __('<b>Aborting Import...</b>', 'revslider'),
  374. 'create_draft' => __('Creating Draft Page...', 'revslider'),
  375. 'draft_created' => __('Draft Page created. Popup will open', 'revslider'),
  376. 'draft_not_created' => __('Draft Page could not be created.', 'revslider'),
  377. 'slider_import_success_reload' => __('Slider import successful', 'revslider'),
  378. 'save_changes' => __('Save Changes?', 'revslider')
  379. );
  380. return $lang;
  381. }
  382. public function addActivateNotification(){
  383. $nonce = wp_create_nonce("revslider_actions");
  384. ?>
  385. <div class="updated below-h2 rs-update-notice-wrap" id="message"><a href="javascript:void(0);" style="float: right;padding-top: 9px;" id="rs-dismiss-notice"><?php _e('(never show this message again)&nbsp;&nbsp;<b>X</b>','revslider'); ?></a><p><?php _e('Hi! Would you like to activate your version of Revolution Slider to receive live updates & get premium support? This is optional and not needed if the slider came bundled with a theme. ','revslider'); ?></p></div>
  386. <script type="text/javascript">
  387. jQuery('#rs-dismiss-notice').click(function(){
  388. var objData = {
  389. action:"revslider_ajax_action",
  390. client_action: 'dismiss_notice',
  391. nonce:'<?php echo $nonce; ?>',
  392. data:''
  393. };
  394. jQuery.ajax({
  395. type:"post",
  396. url:ajaxurl,
  397. dataType: 'json',
  398. data:objData
  399. });
  400. jQuery('.rs-update-notice-wrap').hide();
  401. });
  402. </script>
  403. <?php
  404. }
  405. /**
  406. * add notices from ThemePunch
  407. * @since: 4.6.8
  408. */
  409. public function add_notices(){
  410. $operations = new RevSliderOperations();
  411. $general_settings = $operations->getGeneralSettingsValues();
  412. //check permissions here
  413. if(!current_user_can('administrator')) return true;
  414. $enable_newschannel = RevSliderBase::getVar($general_settings, 'enable_newschannel', 'on');
  415. $enable_newschannel = apply_filters('revslider_set_notifications', $enable_newschannel);
  416. if($enable_newschannel == 'on'){
  417. $nonce = wp_create_nonce("revslider_actions");
  418. $notices = get_option('revslider-notices', false);
  419. $vn = get_option('revslider-deact-notice', false);
  420. if($vn == true){
  421. $notices[99999] = new stdClass();
  422. $notices[99999]->code = 'DISCARD';
  423. $notices[99999]->version = '99.99';
  424. $notices[99999]->is_global = false;
  425. $notices[99999]->color = 'error';
  426. $notices[99999]->text = '<p>'.__('Hi, your Purchase Code for Slider Revolution has been deregistered manually through <a href="https://www.themepunch.com/purchase-code-deactivation" target="_blank">https://www.themepunch.com/purchase-code-deactivation</a> and is no longer active for this installation.', 'revslider').'</p>';
  427. $notices[99999]->disable = false;
  428. $notices[99999]->additional = array();
  429. }
  430. $tmp = get_option('revslider-temp-active-notice', 'false');
  431. if($tmp == 'true'){
  432. $notices[99998] = new stdClass();
  433. $notices[99998]->code = 'DISCARDTEMPACT';
  434. $notices[99998]->version = '99.99';
  435. $notices[99998]->is_global = false;
  436. $notices[99998]->color = 'error';
  437. $notices[99998]->text = '<p>'.__('Hi, your Purchase Code for Slider Revolution has been deregistered as it was not a valid Slider Revolution Purchase Code', 'revslider').'</p>';
  438. $notices[99998]->disable = false;
  439. $notices[99998]->additional = array();
  440. }
  441. if(!empty($notices) && is_array($notices)){
  442. global $revslider_screens;
  443. $notices_discarded = get_option('revslider-notices-dc', array());
  444. $screen = get_current_screen();
  445. foreach($notices as $notice){
  446. if($notice->is_global !== true && !in_array($screen->id, $revslider_screens)) continue; //check if global or just on plugin related pages
  447. if(!in_array($notice->code, $notices_discarded) && version_compare($notice->version, GlobalsRevSlider::SLIDER_REVISION, '>=')){
  448. $text = '<div style="text-align:right;vertical-align:middle;display:table-cell; min-width:225px;border-left:1px solid #ddd; padding-left:15px;"><a href="javascript:void(0);" class="rs-notices-button rs-notice-'. esc_attr($notice->code) .'">'. __('Close & don\'t show again<b>X</b>','revslider') .'</a></div>';
  449. if($notice->disable == true) $text = '';
  450. ?>
  451. <style>
  452. .rs-notices-button { color:#999; text-decoration: none !important; font-size:14px;font-weight: 400;}
  453. .rs-notices-button:hover { color:#3498DB !important;}
  454. .rs-notices-button b { font-weight:800; vertical-align:bottom;line-height:15px;font-size:10px;margin-left:10px;margin-right:10px;border:2px solid #999; display:inline-block; width:15px;height:15px; text-align: center; border-radius: 50%; -webkit-border-radius: 50%; -moz-border-radius: 50%;}
  455. .rs-notices-button:hover b { border-color:#3498DB;}
  456. </style>
  457. <div class="<?php echo $notice->color; ?> below-h2 rs-update-notice-wrap" id="message" style="clear:both;display: block;position:relative;margin:35px 20px 25px 0px"><div style="display:table;width:100%;"><div style="vertical-align:middle;display:table-cell;min-width:100%;padding-right:15px;"><?php echo $notice->text; ?></div><?php echo $text; ?></div></div>
  458. <?php
  459. }
  460. }
  461. ?>
  462. <script type="text/javascript">
  463. jQuery('.rs-notices-button').click(function(){
  464. var notice_id = jQuery(this).attr('class').replace('rs-notices-button', '').replace('rs-notice-', '');
  465. var objData = {
  466. action:"revslider_ajax_action",
  467. client_action: 'dismiss_dynamic_notice',
  468. nonce:'<?php echo $nonce; ?>',
  469. data:{'id':notice_id}
  470. };
  471. jQuery.ajax({
  472. type:"post",
  473. url:ajaxurl,
  474. dataType: 'json',
  475. data:objData
  476. });
  477. jQuery(this).closest('.rs-update-notice-wrap').slideUp(200);
  478. });
  479. </script>
  480. <?php
  481. }
  482. }
  483. }
  484. /**
  485. *
  486. * add wildcards metabox variables to posts
  487. */
  488. private function addSliderMetaBox($postTypes = null){ //null = all, post = only posts
  489. try{
  490. self::addMetaBox("Revolution Slider Options",'',array("RevSliderAdmin","customPostFieldsOutput"),$postTypes);
  491. }catch(Exception $e){}
  492. }
  493. /**
  494. * custom output function
  495. */
  496. public static function customPostFieldsOutput(){
  497. $meta = get_post_meta(get_the_ID(), 'slide_template', true);
  498. if($meta == '') $meta = 'default';
  499. $slider = new RevSlider();
  500. $arrOutput = array();
  501. $arrOutput["default"] = "default";
  502. $arrSlides = $slider->getArrSlidersWithSlidesShort(RevSlider::SLIDER_TYPE_TEMPLATE);
  503. $arrOutput = $arrOutput + $arrSlides; //union arrays
  504. ?>
  505. <ul class="revslider_settings">
  506. <li id="slide_template_row">
  507. <div title="" class="setting_text" id="slide_template_text"><?php _e('Choose Slide Template', 'revslider'); ?></div>
  508. <div class="setting_input">
  509. <select name="slide_template" id="slide_template">
  510. <?php
  511. foreach($arrOutput as $handle => $name){
  512. echo '<option '.selected($handle, $meta).' value="'.$handle.'">'.$name.'</option>';
  513. }
  514. ?>
  515. </select>
  516. </div>
  517. <div class="clear"></div>
  518. </li>
  519. </ul>
  520. <?php
  521. }
  522. /**
  523. * a must function. please don't remove it.
  524. * process activate event - install the db (with delta).
  525. */
  526. public static function onActivate(){
  527. RevSliderFront::createDBTables();
  528. }
  529. /**
  530. * a must function. adds scripts on the page
  531. * add all page scripts and styles here.
  532. * pelase don't remove this function
  533. * common scripts even if the plugin not load, use this function only if no choise.
  534. */
  535. public static function onAddScripts(){
  536. global $wp_version;
  537. $style_pre = '';
  538. $style_post = '';
  539. if($wp_version < 3.7){
  540. $style_pre = '<style type="text/css">';
  541. $style_post = '</style>';
  542. }
  543. wp_enqueue_style('edit_layers', RS_PLUGIN_URL .'admin/assets/css/edit_layers.css', array(), RevSliderGlobals::SLIDER_REVISION);
  544. wp_enqueue_script('unite_layers_timeline', RS_PLUGIN_URL .'admin/assets/js/edit_layers_timeline.js', array(), RevSliderGlobals::SLIDER_REVISION );
  545. wp_enqueue_script('unite_context_menu', RS_PLUGIN_URL .'admin/assets/js/context_menu.js', array(), RevSliderGlobals::SLIDER_REVISION );
  546. wp_enqueue_script('unite_layers', RS_PLUGIN_URL .'admin/assets/js/edit_layers.js', array('jquery-ui-mouse'), RevSliderGlobals::SLIDER_REVISION );
  547. wp_enqueue_script('unite_css_editor', RS_PLUGIN_URL .'admin/assets/js/css_editor.js', array(), RevSliderGlobals::SLIDER_REVISION );
  548. wp_enqueue_script('rev_admin', RS_PLUGIN_URL .'admin/assets/js/rev_admin.js', array(), RevSliderGlobals::SLIDER_REVISION );
  549. wp_enqueue_script('tp-tools', RS_PLUGIN_URL .'public/assets/js/jquery.themepunch.tools.min.js', array(), RevSliderGlobals::SLIDER_REVISION );
  550. //include all media upload scripts
  551. self::addMediaUploadIncludes();
  552. //add rs css:
  553. wp_enqueue_style('rs-plugin-settings', RS_PLUGIN_URL .'public/assets/css/settings.css', array(), RevSliderGlobals::SLIDER_REVISION);
  554. //add icon sets
  555. wp_enqueue_style('rs-icon-set-fa-icon-', RS_PLUGIN_URL .'public/assets/fonts/font-awesome/css/font-awesome.css', array(), RevSliderGlobals::SLIDER_REVISION);
  556. wp_enqueue_style('rs-icon-set-pe-7s-', RS_PLUGIN_URL .'public/assets/fonts/pe-icon-7-stroke/css/pe-icon-7-stroke.css', array(), RevSliderGlobals::SLIDER_REVISION);
  557. add_filter('revslider_mod_icon_sets', array('RevSliderBase', 'set_icon_sets'));
  558. $db = new RevSliderDB();
  559. $styles = $db->fetch(RevSliderGlobals::$table_css);
  560. $styles = RevSliderCssParser::parseDbArrayToCss($styles, "\n");
  561. $styles = RevSliderCssParser::compress_css($styles);
  562. wp_add_inline_style( 'rs-plugin-settings', $style_pre.$styles.$style_post );
  563. $custom_css = RevSliderOperations::getStaticCss();
  564. $custom_css = RevSliderCssParser::compress_css($custom_css);
  565. wp_add_inline_style( 'rs-plugin-settings', $style_pre.$custom_css.$style_post );
  566. }
  567. /**
  568. *
  569. * admin main page function.
  570. */
  571. public static function adminPages(){
  572. parent::adminPages();
  573. self::setMasterView('master-view');
  574. self::requireView(self::$view);
  575. }
  576. /**
  577. *
  578. * import slideer handle (not ajax response)
  579. */
  580. private static function importSliderHandle($viewBack = null, $updateAnim = true, $updateStatic = true, $updateNavigation = true){
  581. $slider = new RevSlider();
  582. $response = $slider->importSliderFromPost($updateAnim, $updateStatic, false, false, false, $updateNavigation);
  583. $sliderID = intval($response["sliderID"]);
  584. if(empty($viewBack)){
  585. $viewBack = self::getViewUrl(self::VIEW_SLIDER,"id=".$sliderID);
  586. if(empty($sliderID))
  587. $viewBack = self::getViewUrl(self::VIEW_SLIDERS);
  588. }
  589. //handle error this
  590. if($response["success"] == false){
  591. $message = $response["error"];
  592. RevSliderOperations::import_failed_message($message, $viewBack);
  593. }else{ //handle success, js redirect.
  594. //check here to create a page or not
  595. if(!empty($sliderID)){
  596. $page_id = 0;
  597. $page_creation = esc_attr(RevSliderFunctions::getPostVariable('page-creation'));
  598. if($page_creation === 'true'){
  599. $operations = new RevSliderOperations();
  600. $page_id = $operations->create_slider_page((array)$sliderID);
  601. }
  602. if($page_id > 0){
  603. echo '<script>window.open("'.get_permalink($page_id).'", "_blank");</script>';
  604. }
  605. }
  606. echo "<script>
  607. location.href='".$viewBack."';
  608. </script>";
  609. }
  610. exit();
  611. }
  612. /**
  613. * import slider from TP servers
  614. * @since: 5.0.5
  615. */
  616. private static function importSliderOnlineTemplateHandleNew($data, $viewBack = null, $updateAnim = true, $updateStatic = true, $single_slide = false){
  617. $return = array('error' => array(), 'success' => array(), 'open' => false, 'view' => $viewBack);
  618. $uid = esc_attr($data['uid']);
  619. $added = array();
  620. if($uid == ''){
  621. $return['error'][] = __("ID missing, something went wrong. Please try again!", 'revslider');
  622. }else{
  623. $tmp = new RevSliderTemplate();
  624. $package = esc_attr($data['package']);
  625. $package = ($package == 'true') ? true : false;
  626. //get all in the same package as the uid
  627. if($package === true){
  628. $uids = $tmp->get_package_uids($uid);
  629. }else{
  630. $uids = (array)$uid;
  631. }
  632. if(!empty($uids)){
  633. foreach($uids as $uid){
  634. set_time_limit(60); //reset the time limit
  635. $filepath = $tmp->_download_template($uid); //can be single or multiple, depending on $package beeing false or true
  636. //send request to TP server and download file
  637. if(is_array($filepath) && isset($filepath['error'])){
  638. $return['error'][] = $filepath['error'];
  639. break;
  640. }
  641. if($filepath !== false){
  642. //check if Slider Template was already imported. If yes, remove the old Slider Template as we now do an "update" (in reality we delete and insert again)
  643. //get all template sliders
  644. $tmp_slider = $tmp->getThemePunchTemplateSliders();
  645. foreach($tmp_slider as $tslider){
  646. if(isset($tslider['uid']) && $uid == $tslider['uid']){
  647. if(!isset($tslider['installed'])){ //slider is installed
  648. //delete template Slider!
  649. $mSlider = new RevSlider();
  650. $mSlider->initByID($tslider['id']);
  651. $mSlider->deleteSlider();
  652. //remove the update flag from the slider
  653. $tmp->remove_is_new($uid);
  654. }
  655. break;
  656. }
  657. }
  658. $slider = new RevSlider();
  659. $response = $slider->importSliderFromPost($updateAnim, $updateStatic, $filepath, $uid, $single_slide);
  660. $tmp->_delete_template($uid);
  661. if($single_slide === false){
  662. if(empty($viewBack)){
  663. $sliderID = $response["sliderID"];
  664. $viewBack = self::getViewUrl(self::VIEW_SLIDER,"id=".$sliderID);
  665. $return['view'] = $viewBack;
  666. if(empty($sliderID)){
  667. $viewBack = self::getViewUrl(self::VIEW_SLIDERS);
  668. $return['view'] = $viewBack;
  669. }
  670. }
  671. }
  672. if(isset($response["sliderID"])){
  673. $return['slider_id'] = $response["sliderID"];
  674. $added[] = $response["sliderID"];
  675. }
  676. //handle error
  677. if($response["success"] == false){
  678. $return['error'][] = $response["error"];
  679. break;
  680. }else{ //handle success, js redirect.
  681. $return['success'][] = __("Slider Import Success", 'revslider');
  682. }
  683. }else{
  684. if(is_array($filepath)){
  685. $return['error'][] = $filepath['error'];
  686. }else{
  687. $return['error'][] = __("Could not download from server. Please try again later!", 'revslider');
  688. }
  689. break;
  690. }
  691. }
  692. //check here to create a page or not
  693. if(!empty($added)){
  694. $page_creation = esc_attr($data['page-creation']);
  695. if($page_creation === 'true'){
  696. $operations = new RevSliderOperations();
  697. $page_id = $operations->create_slider_page($added);
  698. }
  699. if($page_id > 0){
  700. $return['open'] = get_permalink($page_id);
  701. }
  702. }
  703. }else{
  704. $return['error'][] = __("Could not download package. Please try again later!", 'revslider');
  705. }
  706. }
  707. return $return;
  708. }
  709. /**
  710. * import slider from TP servers
  711. * @since: 5.0.5
  712. */
  713. private static function importSliderOnlineTemplateHandle($data, $viewBack = null, $updateAnim = true, $updateStatic = true, $single_slide = false){
  714. $uid = esc_attr($data['uid']);
  715. $added = array();
  716. if($uid == ''){
  717. $message = __("ID missing, something went wrong. Please try again!", 'revslider');
  718. RevSliderOperations::import_failed_message($message, $viewBack);
  719. exit;
  720. }else{
  721. $tmp = new RevSliderTemplate();
  722. $package = esc_attr($data['package']);
  723. $package = ($package == 'true') ? true : false;
  724. //get all in the same package as the uid
  725. if($package === true){
  726. $uids = $tmp->get_package_uids($uid);
  727. }else{
  728. $uids = (array)$uid;
  729. }
  730. if(!empty($uids)){
  731. foreach($uids as $uid){
  732. set_time_limit(60); //reset the time limit
  733. $filepath = $tmp->_download_template($uid); //can be single or multiple, depending on $package beeing false or true
  734. //var_dump($filepath);
  735. //exit;
  736. //send request to TP server and download file
  737. if(is_array($filepath) && isset($filepath['error'])){
  738. $message = $filepath['error'];
  739. RevSliderOperations::import_failed_message($message, $viewBack);
  740. exit;
  741. }
  742. if($filepath !== false){
  743. //check if Slider Template was already imported. If yes, remove the old Slider Template as we now do an "update" (in reality we delete and insert again)
  744. //get all template sliders
  745. $tmp_slider = $tmp->getThemePunchTemplateSliders();
  746. foreach($tmp_slider as $tslider){
  747. if(isset($tslider['uid']) && $uid == $tslider['uid']){
  748. if(!isset($tslider['installed'])){ //slider is installed
  749. //delete template Slider!
  750. $mSlider = new RevSlider();
  751. $mSlider->initByID($tslider['id']);
  752. $mSlider->deleteSlider();
  753. //remove the update flag from the slider
  754. $tmp->remove_is_new($uid);
  755. }
  756. break;
  757. }
  758. }
  759. $slider = new RevSlider();
  760. $response = $slider->importSliderFromPost($updateAnim, $updateStatic, $filepath, $uid, $single_slide);
  761. $tmp->_delete_template($uid);
  762. if($single_slide === false){
  763. if(empty($viewBack)){
  764. $sliderID = $response["sliderID"];
  765. $viewBack = self::getViewUrl(self::VIEW_SLIDER,"id=".$sliderID);
  766. if(empty($sliderID))
  767. $viewBack = self::getViewUrl(self::VIEW_SLIDERS);
  768. }
  769. }
  770. if(isset($response["sliderID"])){
  771. $added[] = $response["sliderID"];
  772. }
  773. //handle error
  774. if($response["success"] == false){
  775. $message = $response["error"];
  776. RevSliderOperations::import_failed_message($message, $viewBack);
  777. }else{ //handle success, js redirect.
  778. }
  779. }else{
  780. if(is_array($filepath)){
  781. $message = $filepath['error'];
  782. }else{
  783. $message = __("Could not download from server. Please try again later!", 'revslider');
  784. }
  785. RevSliderOperations::import_failed_message($message, $viewBack);
  786. exit;
  787. }
  788. }
  789. //check here to create a page or not
  790. if(!empty($added)){
  791. $page_creation = esc_attr($data['page-creation']);
  792. if($page_creation === 'true'){
  793. $operations = new RevSliderOperations();
  794. $page_id = $operations->create_slider_page($added);
  795. }
  796. if($page_id > 0){
  797. echo '<script>window.open("'.get_permalink($page_id).'", "_blank");</script>';
  798. }
  799. }
  800. echo "<script>location.href='".$viewBack."';</script>";
  801. }else{
  802. $message = __("Could not download package. Please try again later!", 'revslider');
  803. RevSliderOperations::import_failed_message($message, $viewBack);
  804. exit;
  805. }
  806. }
  807. exit;
  808. }
  809. /**
  810. *
  811. * import slider handle (not ajax response)
  812. */
  813. private static function importSliderTemplateHandle($viewBack = null, $updateAnim = true, $updateStatic = true, $single_slide = false){
  814. $uid = esc_attr(RevSliderFunctions::getPostVariable('uid'));
  815. if($uid == ''){
  816. $message = __("ID missing, something went wrong. Please try again!", 'revslider');
  817. RevSliderOperations::import_failed_message($message, $viewBack);
  818. exit;
  819. }
  820. //check if the filename is correct
  821. //import to templates, then duplicate Slider
  822. $slider = new RevSlider();
  823. $response = $slider->importSliderFromPost($updateAnim, $updateStatic, false, $uid, $single_slide);
  824. if($single_slide === false){
  825. $sliderID = $response["sliderID"];
  826. if(empty($viewBack)){
  827. $viewBack = self::getViewUrl(self::VIEW_SLIDER,"id=".$sliderID);
  828. if(empty($sliderID))
  829. $viewBack = self::getViewUrl(self::VIEW_SLIDERS);
  830. }
  831. }
  832. //handle error
  833. if($response["success"] == false){
  834. $message = $response["error"];
  835. RevSliderOperations::import_failed_message($message, $viewBack);
  836. }else{ //handle success, js redirect.
  837. //check here to create a page or not
  838. if(isset($sliderID) && !empty($sliderID)){
  839. $page_creation = esc_attr(RevSliderFunctions::getPostVariable('page-creation'));
  840. if($page_creation === 'true'){
  841. $operations = new RevSliderOperations();
  842. $page_id = $operations->create_slider_page((array)$sliderID);
  843. }
  844. if($page_id > 0){
  845. echo '<script>window.open("'.get_permalink($page_id).'", "_blank");</script>';
  846. }
  847. }
  848. echo "<script>location.href='".$viewBack."';</script>";
  849. }
  850. exit();
  851. }
  852. /**
  853. * Get url to secific view.
  854. */
  855. public static function getFontsUrl(){
  856. $link = admin_url('admin.php?page=themepunch-google-fonts');
  857. return($link);
  858. }
  859. /**
  860. * Toggle Favorite State of Slider
  861. * @since: 5.0
  862. */
  863. public static function toggle_favorite_by_id($id){
  864. $id = intval($id);
  865. if($id === 0) return false;
  866. global $wpdb;
  867. $table_name = $wpdb->prefix . RevSliderGlobals::TABLE_SLIDERS_NAME;
  868. //check if ID exists
  869. $slider = $wpdb->get_row($wpdb->prepare("SELECT settings FROM $table_name WHERE id = %s", $id), ARRAY_A);
  870. if(empty($slider))
  871. return __('Slider not found', 'revslider');
  872. $settings = json_decode($slider['settings'], true);
  873. if(!isset($settings['favorite']) || $settings['favorite'] == 'false' || $settings['favorite'] == false){
  874. $settings['favorite'] = 'true';
  875. }else{
  876. $settings['favorite'] = 'false';
  877. }
  878. $response = $wpdb->update($table_name, array('settings' => json_encode($settings)), array('id' => $id));
  879. if($response === false) return __('Slider setting could not be changed', 'revslider');
  880. return true;
  881. }
  882. /**
  883. *
  884. * onAjax action handler
  885. */
  886. public static function onAjaxAction(){
  887. $role = self::getMenuRole(); //add additional security check and allow for example import only for admin
  888. $slider = new RevSlider();
  889. $slide = new RevSlide();
  890. $operations = new RevSliderOperations();
  891. $action = self::getPostGetVar("client_action");
  892. $data = self::getPostGetVar("data");
  893. if($data == '') $data = array();
  894. $nonce = self::getPostGetVar("nonce");
  895. if(empty($nonce))
  896. $nonce = self::getPostGetVar("rs-nonce");
  897. try{
  898. if(RS_DEMO){
  899. switch($action){
  900. case 'import_slider_online_template_slidersview':
  901. case 'duplicate_slider':
  902. case 'preview_slider':
  903. case 'get_static_css':
  904. case 'get_dynamic_css':
  905. case 'preview_slide':
  906. //these are all okay in demo mode
  907. break;
  908. default:
  909. RevSliderFunctions::throwError(__('Function Not Available in Demo Mode', 'revslider'));
  910. exit;
  911. break;
  912. }
  913. }
  914. if(!RevSliderFunctionsWP::isAdminUser() && apply_filters('revslider_restrict_role', true)){
  915. switch($action){
  916. case 'change_specific_navigation':
  917. case 'change_navigations':
  918. case 'update_static_css':
  919. case 'add_new_preset':
  920. case 'update_preset':
  921. case 'import_slider':
  922. case 'import_slider_slidersview':
  923. case 'import_slider_template_slidersview':
  924. case 'import_slide_template_slidersview':
  925. case 'import_slider_online_template_slidersview_new':
  926. case 'fix_database_issues':
  927. RevSliderFunctions::throwError(__('Function Only Available for Adminstrators', 'revslider'));
  928. exit;
  929. break;
  930. default:
  931. $return = apply_filters('revslider_admin_onAjaxAction_user_restriction', true, $action, $data, $slider, $slide, $operations);
  932. if($return !== true){
  933. RevSliderFunctions::throwError(__('Function Only Available for Adminstrators', 'revslider'));
  934. exit;
  935. }
  936. break;
  937. }
  938. }
  939. //verify the nonce
  940. $isVerified = wp_verify_nonce($nonce, "revslider_actions");
  941. if($isVerified == false){
  942. RevSliderFunctions::throwError("Wrong request");
  943. exit;
  944. }
  945. switch($action){
  946. case 'add_new_preset':
  947. if(!isset($data['settings']) || !isset($data['values'])) self::ajaxResponseError(__('Missing values to add preset', 'revslider'), false);
  948. $result = $operations->add_preset_setting($data);
  949. if($result === true){
  950. $presets = $operations->get_preset_settings();
  951. self::ajaxResponseSuccess(__('Preset created', 'revslider'), array('data' => $presets));
  952. }else{
  953. self::ajaxResponseError($result, false);
  954. }
  955. exit;
  956. break;
  957. case 'update_preset':
  958. if(!isset($data['name']) || !isset($data['values'])) self::ajaxResponseError(__('Missing values to update preset', 'revslider'), false);
  959. $result = $operations->update_preset_setting($data);
  960. if($result === true){
  961. $presets = $operations->get_preset_settings();
  962. self::ajaxResponseSuccess(__('Preset created', 'revslider'), array('data' => $presets));
  963. }else{
  964. self::ajaxResponseError($result, false);
  965. }
  966. exit;
  967. break;
  968. case 'remove_preset':
  969. if(!isset($data['name'])) self::ajaxResponseError(__('Missing values to remove preset', 'revslider'), false);
  970. $result = $operations->remove_preset_setting($data);
  971. if($result === true){
  972. $presets = $operations->get_preset_settings();
  973. self::ajaxResponseSuccess(__('Preset deleted', 'revslider'), array('data' => $presets));
  974. }else{
  975. self::ajaxResponseError($result, false);
  976. }
  977. exit;
  978. break;
  979. case "export_slider":
  980. $sliderID = self::getGetVar("sliderid");
  981. $dummy = self::getGetVar("dummy");
  982. $slider->initByID($sliderID);
  983. $slider->exportSlider($dummy);
  984. break;
  985. case "import_slider":
  986. $updateAnim = self::getPostGetVar("update_animations");
  987. $updateNav = self::getPostGetVar("update_navigations");
  988. //$updateStatic = self::getPostGetVar("update_static_captions");
  989. $updateStatic = 'none';
  990. self::importSliderHandle(null, $updateAnim, $updateStatic, $updateNav);
  991. break;
  992. case "import_slider_slidersview":
  993. $viewBack = self::getViewUrl(self::VIEW_SLIDERS);
  994. $updateAnim = self::getPostGetVar("update_animations");
  995. $updateNav = self::getPostGetVar("update_navigations");
  996. //$updateStatic = self::getPostGetVar("update_static_captions");
  997. $updateStatic = 'none';
  998. self::importSliderHandle($viewBack, $updateAnim, $updateStatic, $updateNav);
  999. break;
  1000. case "import_slider_online_template_slidersview":
  1001. $viewBack = self::getViewUrl(self::VIEW_SLIDERS);
  1002. //ob_start();
  1003. $data['uid'] = esc_attr(RevSliderFunctions::getPostVariable('uid'));
  1004. $data['page-creation'] = esc_attr(RevSliderFunctions::getPostVariable('page-creation'));
  1005. $data['package'] = esc_attr(RevSliderFunctions::getPostVariable('package'));
  1006. self::importSliderOnlineTemplateHandle($data, $viewBack, 'true', 'none');
  1007. /*$html = ob_get_contents();
  1008. ob_clean();
  1009. ob_end_clean();
  1010. self::ajaxResponseData($html);*/
  1011. break;
  1012. case "import_slider_template_slidersview":
  1013. $viewBack = self::getViewUrl(self::VIEW_SLIDERS);
  1014. $updateAnim = self::getPostGetVar("update_animations");
  1015. //$updateStatic = self::getPostGetVar("update_static_captions");
  1016. $updateStatic = 'none';
  1017. self::importSliderTemplateHandle($viewBack, $updateAnim, $updateStatic);
  1018. break;
  1019. case "import_slider_online_template_slidersview_new":
  1020. $viewBack = self::getViewUrl(self::VIEW_SLIDERS);
  1021. $response = self::importSliderOnlineTemplateHandleNew($data, $viewBack, 'true', 'none');
  1022. self::ajaxResponseData($response);
  1023. break;
  1024. case 'create_draft_page':
  1025. $response = array('open' => false);
  1026. $page_id = $operations->create_slider_page($data['slider_ids']);
  1027. if($page_id > 0){
  1028. $response['open'] = get_permalink($page_id);
  1029. }
  1030. self::ajaxResponseData($response);
  1031. break;
  1032. case "import_slide_online_template_slidersview":
  1033. $redirect_id = esc_attr(self::getPostGetVar("redirect_id"));
  1034. $viewBack = self::getViewUrl(self::VIEW_SLIDE,"id=$redirect_id");
  1035. $slidenum = intval(self::getPostGetVar("slidenum"));
  1036. $sliderid = intval(self::getPostGetVar("slider_id"));
  1037. $data['uid'] = esc_attr(RevSliderFunctions::getPostVariable('uid'));
  1038. $data['page-creation'] = esc_attr(RevSliderFunctions::getPostVariable('page-creation'));
  1039. $data['package'] = esc_attr(RevSliderFunctions::getPostVariable('package'));
  1040. self::importSliderOnlineTemplateHandle($data, $viewBack, 'true', 'none', array('slider_id' => $sliderid, 'slide_id' => $slidenum));
  1041. break;
  1042. case "import_slide_template_slidersview":
  1043. $redirect_id = esc_attr(self::getPostGetVar("redirect_id"));
  1044. $viewBack = self::getViewUrl(self::VIEW_SLIDE,"id=$redirect_id");
  1045. $updateAnim = self::getPostGetVar("update_animations");
  1046. //$updateStatic = self::getPostGetVar("update_static_captions");
  1047. $updateStatic = 'none';
  1048. $slidenum = intval(self::getPostGetVar("slidenum"));
  1049. $sliderid = intval(self::getPostGetVar("slider_id"));
  1050. self::importSliderTemplateHandle($viewBack, $updateAnim, $updateStatic, array('slider_id' => $sliderid, 'slide_id' => $slidenum));
  1051. break;
  1052. case "create_slider":
  1053. $data = $operations->modifyCustomSliderParams($data);
  1054. $newSliderID = $slider->createSliderFromOptions($data);
  1055. self::ajaxResponseSuccessRedirect(__("Slider created",'revslider'), self::getViewUrl(self::VIEW_SLIDE, 'id=new&slider='.esc_attr($newSliderID))); //redirect to slide now
  1056. break;
  1057. case "update_slider":
  1058. $data = $operations->modifyCustomSliderParams($data);
  1059. $slider->updateSliderFromOptions($data);
  1060. self::ajaxResponseSuccess(__("Slider updated",'revslider'));
  1061. break;
  1062. case "delete_slider":
  1063. case "delete_slider_stay":
  1064. $isDeleted = $slider->deleteSliderFromData($data);
  1065. if(is_array($isDeleted)){
  1066. $isDeleted = implode(', ', $isDeleted);
  1067. self::ajaxResponseError(__("Template can't be deleted, it is still being used by the following Sliders: ", 'revslider').$isDeleted);
  1068. }else{
  1069. if($action == 'delete_slider_stay'){
  1070. self::ajaxResponseSuccess(__("Slider deleted",'revslider'));
  1071. }else{
  1072. self::ajaxResponseSuccessRedirect(__("Slider deleted",'revslider'), self::getViewUrl(self::VIEW_SLIDERS));
  1073. }
  1074. }
  1075. break;
  1076. case "duplicate_slider":
  1077. $slider->duplicateSliderFromData($data);
  1078. self::ajaxResponseSuccessRedirect(__("Success! Refreshing page...",'revslider'), self::getViewUrl(self::VIEW_SLIDERS));
  1079. break;
  1080. case "duplicate_slider_package":
  1081. $ret = $slider->duplicateSliderPackageFromData($data);
  1082. if($ret !== true){
  1083. RevSliderFunctions::throwError($ret);
  1084. }else{
  1085. self::ajaxResponseSuccessRedirect(__("Success! Refreshing page...",'revslider'), self::getViewUrl(self::VIEW_SLIDERS));
  1086. }
  1087. break;
  1088. case "add_slide":
  1089. case "add_bulk_slide":
  1090. $numSlides = $slider->createSlideFromData($data);
  1091. $sliderID = $data["sliderid"];
  1092. if($numSlides == 1){
  1093. $responseText = __("Slide Created",'revslider');
  1094. }else{
  1095. $responseText = $numSlides . " ".__("Slides Created",'revslider');
  1096. }
  1097. $urlRedirect = self::getViewUrl(self::VIEW_SLIDE,"id=new&slider=$sliderID");
  1098. self::ajaxResponseSuccessRedirect($responseText,$urlRedirect);
  1099. break;
  1100. case "add_slide_fromslideview":
  1101. $slideID = $slider->createSlideFromData($data,true);
  1102. $urlRedirect = self::getViewUrl(self::VIEW_SLIDE,"id=$slideID");
  1103. $responseText = __("Slide Created, redirecting...",'revslider');
  1104. self::ajaxResponseSuccessRedirect($responseText,$urlRedirect);
  1105. break;
  1106. case 'copy_slide_to_slider':
  1107. $slideID = (isset($data['redirect_id'])) ? $data['redirect_id'] : -1;
  1108. if($slideID === -1) RevSliderFunctions::throwError(__('Missing redirect ID!', 'revslider'));
  1109. $return = $slider->copySlideToSlider($data);
  1110. if($return !== true) RevSliderFunctions::throwError($return);
  1111. $urlRedirect = self::getViewUrl(self::VIEW_SLIDE,"id=$slideID");
  1112. $responseText = __("Slide copied to current Slider, redirecting...",'revslider');
  1113. self::ajaxResponseSuccessRedirect($responseText,$urlRedirect);
  1114. break;
  1115. case 'update_slide':
  1116. if(isset($data['obj_favorites'])){
  1117. $obj_favorites = $data['obj_favorites'];
  1118. unset($data['obj_favorites']);
  1119. //save object favourites
  1120. $objlib = new RevSliderObjectLibrary();
  1121. $objlib->save_favorites($obj_favorites);
  1122. }
  1123. $slide->updateSlideFromData($data);
  1124. self::ajaxResponseSuccess(__("Slide updated",'revslider'));
  1125. break;
  1126. case "update_static_slide":
  1127. if(isset($data['obj_favorites'])){
  1128. $obj_favorites = $data['obj_favorites'];
  1129. unset($data['obj_favorites']);
  1130. //save object favourites
  1131. $objlib = new RevSliderObjectLibrary();
  1132. $objlib->save_favorites($obj_favorites);
  1133. }
  1134. $slide->updateStaticSlideFromData($data);
  1135. self::ajaxResponseSuccess(__("Static Global Layers updated",'revslider'));
  1136. break;
  1137. case "delete_slide":
  1138. case "delete_slide_stay":
  1139. $isPost = $slide->deleteSlideFromData($data);
  1140. if($isPost)
  1141. $message = __("Post deleted",'revslider');
  1142. else
  1143. $message = __("Slide deleted",'revslider');
  1144. $sliderID = RevSliderFunctions::getVal($data, "sliderID");
  1145. if($action == 'delete_slide_stay'){
  1146. self::ajaxResponseSuccess($message);
  1147. }else{
  1148. self::ajaxResponseSuccessRedirect($message, self::getViewUrl(self::VIEW_SLIDE,"id=new&slider=$sliderID"));
  1149. }
  1150. break;
  1151. case "duplicate_slide":
  1152. case "duplicate_slide_stay":
  1153. $return = $slider->duplicateSlideFromData($data);
  1154. if($action == 'duplicate_slide_stay'){
  1155. self::ajaxResponseSuccess(__("Slide duplicated",'revslider'), array('id' => $return[1]));
  1156. }else{
  1157. self::ajaxResponseSuccessRedirect(__("Slide duplicated",'revslider'), self::getViewUrl(self::VIEW_SLIDE,"id=new&slider=".$return[0]));
  1158. }
  1159. break;
  1160. case "copy_move_slide":
  1161. case "copy_move_slide_stay":
  1162. $sliderID = $slider->copyMoveSlideFromData($data);
  1163. if($action == 'copy_move_slide_stay'){
  1164. self::ajaxResponseSuccess(__("Success!",'revslider'));
  1165. }else{
  1166. self::ajaxResponseSuccessRedirect(__("Success! Refreshing page...",'revslider'), self::getViewUrl(self::VIEW_SLIDE,"id=new&slider=$sliderID"));
  1167. }
  1168. break;
  1169. case "add_slide_to_template":
  1170. $template = new RevSliderTemplate();
  1171. if(!isset($data['slideID']) || intval($data['slideID']) == 0){
  1172. RevSliderFunctions::throwError(__('No valid Slide ID given', 'revslider'));
  1173. exit;
  1174. }
  1175. if(!isset($data['title']) || strlen(trim($data['title'])) < 3){
  1176. RevSliderFunctions::throwError(__('No valid title given', 'revslider'));
  1177. exit;
  1178. }
  1179. if(!isset($data['settings']) || !isset($data['settings']['width']) || !isset($data['settings']['height'])){
  1180. RevSliderFunctions::throwError(__('No valid title given', 'revslider'));
  1181. exit;
  1182. }
  1183. $return = $template->copySlideToTemplates($data['slideID'], $data['title'], $data['settings']);
  1184. if($return == false){
  1185. RevSliderFunctions::throwError(__('Could not save Slide as Template', 'revslider'));
  1186. exit;
  1187. }
  1188. //get HTML for template section
  1189. ob_start();
  1190. $rs_disable_template_script = true; //disable the script output of template selector file
  1191. include(RS_PLUGIN_PATH.'admin/views/templates/template-selector.php');
  1192. $html = ob_get_contents();
  1193. ob_clean();
  1194. ob_end_clean();
  1195. self::ajaxResponseSuccess(__('Slide added to Templates', 'revslider'),array('HTML' => $html));
  1196. exit;
  1197. break;
  1198. case "get_slider_custom_css_js":
  1199. $slider_css = '';
  1200. $slider_js = '';
  1201. if(isset($data['slider_id']) && intval($data['slider_id']) > 0){
  1202. $slider->initByID(intval($data['slider_id']));
  1203. $slider_css = stripslashes($slider->getParam('custom_css', ''));
  1204. $slider_js = stripslashes($slider->getParam('custom_javascript', ''));
  1205. }
  1206. self::ajaxResponseData(array('css' => $slider_css, 'js' => $slider_js));
  1207. break;
  1208. case "update_slider_custom_css_js":
  1209. if(isset($data['slider_id']) && intval($data['slider_id']) > 0){
  1210. $slider->initByID(intval($data['slider_id']));
  1211. $slider->updateParam(array('custom_css' => $data['css']));
  1212. $slider->updateParam(array('custom_javascript' => $data['js']));
  1213. }
  1214. self::ajaxResponseSuccess(__('Slider CSS saved', 'revslider'));
  1215. exit;
  1216. break;
  1217. case "get_static_css":
  1218. $contentCSS = $operations->getStaticCss();
  1219. self::ajaxResponseData($contentCSS);
  1220. break;
  1221. case "get_dynamic_css":
  1222. $contentCSS = $operations->getDynamicCss();
  1223. self::ajaxResponseData($contentCSS);
  1224. break;
  1225. case "insert_captions_css":
  1226. $arrCaptions = $operations->insertCaptionsContentData($data);
  1227. if($arrCaptions !== false){
  1228. $db = new RevSliderDB();
  1229. $styles = $db->fetch(RevSliderGlobals::$table_css);
  1230. $styles = RevSliderCssParser::parseDbArrayToCss($styles, "\n");
  1231. $styles = RevSliderCssParser::compress_css($styles);
  1232. $custom_css = RevSliderOperations::getStaticCss();
  1233. $custom_css = RevSliderCssParser::compress_css($custom_css);
  1234. $arrCSS = $operations->getCaptionsContentArray();
  1235. $arrCssStyles = RevSliderFunctions::jsonEncodeForClientSide($arrCSS);
  1236. $arrCssStyles = $arrCSS;
  1237. self::ajaxResponseSuccess(__("CSS saved",'revslider'),array("arrCaptions"=>$arrCaptions,'compressed_css'=>$styles.$custom_css,'initstyles'=>$arrCssStyles));
  1238. }
  1239. RevSliderFunctions::throwError(__('CSS could not be saved', 'revslider'));
  1240. exit();
  1241. break;
  1242. case "update_captions_css":
  1243. $arrCaptions = $operations->updateCaptionsContentData($data);
  1244. //now check all layers of all sliders and check if you need to change them (only if all values are default)
  1245. if($arrCaptions !== false){
  1246. $db = new RevSliderDB();
  1247. $styles = $db->fetch(RevSliderGlobals::$table_css);
  1248. $styles = RevSliderCssParser::parseDbArrayToCss($styles, "\n");
  1249. $styles = RevSliderCssParser::compress_css($styles);
  1250. $custom_css = RevSliderOperations::getStaticCss();
  1251. $custom_css = RevSliderCssParser::compress_css($custom_css);
  1252. $arrCSS = $operations->getCaptionsContentArray();
  1253. $arrCssStyles = RevSliderFunctions::jsonEncodeForClientSide($arrCSS);
  1254. $arrCssStyles = $arrCSS;
  1255. self::ajaxResponseSuccess(__("CSS saved",'revslider'),array("arrCaptions"=>$arrCaptions,'compressed_css'=>$styles.$custom_css,'initstyles'=>$arrCssStyles));
  1256. }
  1257. RevSliderFunctions::throwError(__('CSS could not be saved', 'revslider'));
  1258. exit();
  1259. break;
  1260. case "update_captions_advanced_css":
  1261. $arrCaptions = $operations->updateAdvancedCssData($data);
  1262. if($arrCaptions !== false){
  1263. $db = new RevSliderDB();
  1264. $styles = $db->fetch(RevSliderGlobals::$table_css);
  1265. $styles = RevSliderCssParser::parseDbArrayToCss($styles, "\n");
  1266. $styles = RevSliderCssParser::compress_css($styles);
  1267. $custom_css = RevSliderOperations::getStaticCss();
  1268. $custom_css = RevSliderCssParser::compress_css($custom_css);
  1269. $arrCSS = $operations->getCaptionsContentArray();
  1270. $arrCssStyles = RevSliderFunctions::jsonEncodeForClientSide($arrCSS);
  1271. $arrCssStyles = $arrCSS;
  1272. self::ajaxResponseSuccess(__("CSS saved",'revslider'),array("arrCaptions"=>$arrCaptions,'compressed_css'=>$styles.$custom_css,'initstyles'=>$arrCssStyles));
  1273. }
  1274. RevSliderFunctions::throwError(__('CSS could not be saved', 'revslider'));
  1275. exit();
  1276. break;
  1277. case "rename_captions_css":
  1278. //rename all captions in all sliders with new handle if success
  1279. $arrCaptions = $operations->renameCaption($data);
  1280. $db = new RevSliderDB();
  1281. $styles = $db->fetch(RevSliderGlobals::$table_css);
  1282. $styles = RevSliderCssParser::parseDbArrayToCss($styles, "\n");
  1283. $styles = RevSliderCssParser::compress_css($styles);
  1284. $custom_css = RevSliderOperations::getStaticCss();
  1285. $custom_css = RevSliderCssParser::compress_css($custom_css);
  1286. $arrCSS = $operations->getCaptionsContentArray();
  1287. $arrCssStyles = RevSliderFunctions::jsonEncodeForClientSide($arrCSS);
  1288. $arrCssStyles = $arrCSS;
  1289. self::ajaxResponseSuccess(__("Class name renamed",'revslider'),array("arrCaptions"=>$arrCaptions,'compressed_css'=>$styles.$custom_css,'initstyles'=>$arrCssStyles));
  1290. break;
  1291. case "delete_captions_css":
  1292. $arrCaptions = $operations->deleteCaptionsContentData($data);
  1293. $db = new RevSliderDB();
  1294. $styles = $db->fetch(RevSliderGlobals::$table_css);
  1295. $styles = RevSliderCssParser::parseDbArrayToCss($styles, "\n");
  1296. $styles = RevSliderCssParser::compress_css($styles);
  1297. $custom_css = RevSliderOperations::getStaticCss();
  1298. $custom_css = RevSliderCssParser::compress_css($custom_css);
  1299. $arrCSS = $operations->getCaptionsContentArray();
  1300. $arrCssStyles = RevSliderFunctions::jsonEncodeForClientSide($arrCSS);
  1301. $arrCssStyles = $arrCSS;
  1302. self::ajaxResponseSuccess(__("Style deleted!",'revslider'),array("arrCaptions"=>$arrCaptions,'compressed_css'=>$styles.$custom_css,'initstyles'=>$arrCssStyles));
  1303. break;
  1304. case "update_static_css":
  1305. $data = ''; //do not allow to add new global CSS anymore, instead, remove all!
  1306. $staticCss = $operations->updateStaticCss($data);
  1307. $db = new RevSliderDB();
  1308. $styles = $db->fetch(RevSliderGlobals::$table_css);
  1309. $styles = RevSliderCssParser::parseDbArrayToCss($styles, "\n");
  1310. $styles = RevSliderCssParser::compress_css($styles);
  1311. $custom_css = RevSliderOperations::getStaticCss();
  1312. $custom_css = RevSliderCssParser::compress_css($custom_css);
  1313. self::ajaxResponseSuccess(__("CSS saved",'revslider'),array("css"=>$staticCss,'compressed_css'=>$styles.$custom_css));
  1314. break;
  1315. case "insert_custom_anim":
  1316. $arrAnims = $operations->insertCustomAnim($data); //$arrCaptions =
  1317. self::ajaxResponseSuccess(__("Animation saved",'revslider'), $arrAnims); //,array("arrCaptions"=>$arrCaptions)
  1318. break;
  1319. case "update_custom_anim":
  1320. $arrAnims = $operations->updateCustomAnim($data);
  1321. self::ajaxResponseSuccess(__("Animation saved",'revslider'), $arrAnims); //,array("arrCaptions"=>$arrCaptions)
  1322. break;
  1323. case "update_custom_anim_name":
  1324. $arrAnims = $operations->updateCustomAnimName($data);
  1325. self::ajaxResponseSuccess(__("Animation saved",'revslider'), $arrAnims); //,array("arrCaptions"=>$arrCaptions)
  1326. break;
  1327. case "delete_custom_anim":
  1328. $arrAnims = $operations->deleteCustomAnim($data);
  1329. self::ajaxResponseSuccess(__("Animation deleted",'revslider'), $arrAnims); //,array("arrCaptions"=>$arrCaptions)
  1330. break;
  1331. case "update_slides_order":
  1332. $slider->updateSlidesOrderFromData($data);
  1333. self::ajaxResponseSuccess(__("Order updated",'revslider'));
  1334. break;
  1335. case "change_slide_title":
  1336. $slide->updateTitleByID($data);
  1337. self::ajaxResponseSuccess(__('Title updated','revslider'));
  1338. break;
  1339. case "change_slide_image":
  1340. $slide->updateSlideImageFromData($data);
  1341. $sliderID = RevSliderFunctions::getVal($data, "slider_id");
  1342. self::ajaxResponseSuccessRedirect(__("Slide changed",'revslider'), self::getViewUrl(self::VIEW_SLIDE,"id=new&slider=$sliderID"));
  1343. break;
  1344. case "preview_slide":
  1345. $operations->putSlidePreviewByData($data);
  1346. exit;
  1347. break;
  1348. case "preview_slider":
  1349. $sliderID = RevSliderFunctions::getPostGetVariable("sliderid");
  1350. $do_markup = RevSliderFunctions::getPostGetVariable("only_markup");
  1351. if($do_markup == 'true')
  1352. $operations->previewOutputMarkup($sliderID);
  1353. else
  1354. $operations->previewOutput($sliderID);
  1355. exit;
  1356. break;
  1357. case "get_import_slides_data":
  1358. $slides = array();
  1359. if(!is_array($data)){
  1360. $slider->initByID(intval($data));
  1361. $full_slides = $slider->getSlides(); //static slide is missing
  1362. if(!empty($full_slides)){
  1363. foreach($full_slides as $slide_id => $mslide){
  1364. $slides[$slide_id]['layers'] = $mslide->getLayers();
  1365. foreach($slides[$slide_id]['layers'] as $k => $l){ //remove columns as they can not be imported
  1366. if(isset($l['type']) && ($l['type'] == 'column' || $l['type'] == 'row' || $l['type'] == 'group')) unset($slides[$slide_id]['layers'][$k]);
  1367. }
  1368. $slides[$slide_id]['params'] = $mslide->getParams();
  1369. }
  1370. }
  1371. $staticID = $slide->getStaticSlideID($slider->getID());
  1372. if($staticID !== false){
  1373. $msl = new RevSliderSlide();
  1374. if(strpos($staticID, 'static_') === false){
  1375. $staticID = 'static_'.$slider->getID();
  1376. }
  1377. $msl->initByID($staticID);
  1378. if($msl->getID() !== ''){
  1379. $slides[$msl->getID()]['layers'] = $msl->getLayers();
  1380. foreach($slides[$msl->getID()]['layers'] as $k => $l){ //remove columns as they can not be imported
  1381. if(isset($l['type']) && ($l['type'] == 'column' || $l['type'] == 'row' || $l['type'] == 'group')) unset($slides[$msl->getID()]['layers'][$k]);
  1382. }
  1383. $slides[$msl->getID()]['params'] = $msl->getParams();
  1384. $slides[$msl->getID()]['params']['title'] = __('Static Slide', 'revslider');
  1385. }
  1386. }
  1387. }
  1388. if(!empty($slides)){
  1389. self::ajaxResponseData(array('slides' => $slides));
  1390. }else{
  1391. self::ajaxResponseData('');
  1392. }
  1393. break;
  1394. case "create_navigation_preset":
  1395. $nav = new RevSliderNavigation();
  1396. $return = $nav->add_preset($data);
  1397. if($return === true){
  1398. self::ajaxResponseSuccess(__('Navigation preset saved/updated', 'revslider'), array('navs' => $nav->get_all_navigations()));
  1399. }else{
  1400. if($return === false) $return = __('Preset could not be saved/values are the same', 'revslider');
  1401. self::ajaxResponseError($return);
  1402. }
  1403. break;
  1404. case "delete_navigation_preset":
  1405. $nav = new RevSliderNavigation();
  1406. $return = $nav->delete_preset($data);
  1407. if($return){
  1408. self::ajaxResponseSuccess(__('Navigation preset deleted', 'revslider'), array('navs' => $nav->get_all_navigations()));
  1409. }else{
  1410. if($return === false) $return = __('Preset not found', 'revslider');
  1411. self::ajaxResponseError($return);
  1412. }
  1413. break;
  1414. case "toggle_slide_state":
  1415. $currentState = $slide->toggleSlideStatFromData($data);
  1416. self::ajaxResponseData(array("state"=>$currentState));
  1417. break;
  1418. case "toggle_hero_slide":
  1419. $currentHero = $slider->setHeroSlide($data);
  1420. self::ajaxResponseSuccess(__('Slide is now the new active Hero Slide', 'revslider'));
  1421. break;
  1422. case "slide_lang_operation":
  1423. $responseData = $slide->doSlideLangOperation($data);
  1424. self::ajaxResponseData($responseData);
  1425. break;
  1426. case "update_general_settings":
  1427. $operations->updateGeneralSettings($data);
  1428. self::ajaxResponseSuccess(__("General settings updated",'revslider'));
  1429. break;
  1430. case "fix_database_issues":
  1431. update_option('revslider_change_database', true);
  1432. RevSliderFront::createDBTables();
  1433. self::ajaxResponseSuccess(__('Database structure creation/update done','revslider'));
  1434. break;
  1435. case "update_posts_sortby":
  1436. $slider->updatePostsSortbyFromData($data);
  1437. self::ajaxResponseSuccess(__("Sortby updated",'revslider'));
  1438. break;
  1439. case "replace_image_urls":
  1440. $slider->replaceImageUrlsFromData($data);
  1441. self::ajaxResponseSuccess(__("All Urls replaced",'revslider'));
  1442. break;
  1443. case "reset_slide_settings":
  1444. $slider->resetSlideSettings($data);
  1445. self::ajaxResponseSuccess(__("Settings in all Slides changed",'revslider'));
  1446. break;
  1447. case "delete_template_slide":
  1448. $slideID = (isset($data['slide_id'])) ? $data['slide_id'] : -1;
  1449. if($slideID === -1) RevSliderFunctions::throwError(__('Missing Slide ID!', 'revslider'));
  1450. $slide->initByID($slideID);
  1451. $slide->deleteSlide();
  1452. $responseText = __("Slide deleted",'revslider');
  1453. self::ajaxResponseSuccess($responseText);
  1454. break;
  1455. case "activate_purchase_code":
  1456. $result = false;
  1457. if(!empty($data['code'])){ // && !empty($data['email'])
  1458. $result = $operations->checkPurchaseVerification($data);
  1459. }else{
  1460. RevSliderFunctions::throwError(__('The Purchase Code and the E-Mail address need to be set!', 'revslider'));
  1461. exit();
  1462. }
  1463. if($result === true){
  1464. self::ajaxResponseSuccessRedirect(__("Purchase Code Successfully Activated",'revslider'), self::getViewUrl(self::VIEW_SLIDERS));
  1465. }elseif($result === false){
  1466. RevSliderFunctions::throwError(__('Purchase Code is invalid', 'revslider'));
  1467. }else{
  1468. if($result == 'temp'){
  1469. self::ajaxResponseSuccessRedirect(__("Purchase Code Temporary Activated",'revslider'), self::getViewUrl(self::VIEW_SLIDERS));
  1470. }
  1471. if($result == 'exist'){
  1472. self::ajaxResponseData(array('error'=>$result,'msg'=> __('Purchase Code already registered!', 'revslider')));
  1473. }
  1474. /*elseif($result == 'bad_email'){
  1475. RevSliderFunctions::throwError(__('Please add an valid E-Mail Address', 'revslider'));
  1476. }elseif($result == 'email_used'){
  1477. RevSliderFunctions::throwError(__('E-Mail already in use, please choose a different E-Mail', 'revslider'));
  1478. }*/
  1479. RevSliderFunctions::throwError(__('Purchase Code could not be validated', 'revslider'));
  1480. }
  1481. break;
  1482. case "deactivate_purchase_code":
  1483. $result = $operations->doPurchaseDeactivation($data);
  1484. if($result){
  1485. self::ajaxResponseSuccessRedirect(__("Successfully removed validation",'revslider'), self::getViewUrl(self::VIEW_SLIDERS));
  1486. }else{
  1487. RevSliderFunctions::throwError(__('Could not remove Validation!', 'revslider'));
  1488. }
  1489. break;
  1490. case 'dismiss_notice':
  1491. update_option('revslider-valid-notice', 'false');
  1492. self::ajaxResponseSuccess(__(".",'revslider'));
  1493. break;
  1494. case 'dismiss_dynamic_notice':
  1495. if(trim($data['id']) == 'DISCARD'){
  1496. update_option('revslider-deact-notice', false);
  1497. }elseif(trim($data['id']) == 'DISCARDTEMPACT'){
  1498. update_option('revslider-temp-active-notice', 'false');
  1499. }else{
  1500. $notices_discarded = get_option('revslider-notices-dc', array());
  1501. $notices_discarded[] = esc_attr(trim($data['id']));
  1502. update_option('revslider-notices-dc', $notices_discarded);
  1503. }
  1504. self::ajaxResponseSuccess(__(".",'revslider'));
  1505. break;
  1506. case 'toggle_favorite':
  1507. if(isset($data['id']) && intval($data['id']) > 0){
  1508. $return = self::toggle_favorite_by_id($data['id']);
  1509. if($return === true){
  1510. self::ajaxResponseSuccess(__('Setting Changed!', 'revslider'));
  1511. }else{
  1512. $error = $return;
  1513. }
  1514. }else{
  1515. $error = __('No ID given', 'revslider');
  1516. }
  1517. self::ajaxResponseError($error);
  1518. break;
  1519. case "subscribe_to_newsletter":
  1520. if(isset($data['email']) && !empty($data['email'])){
  1521. $return = ThemePunch_Newsletter::subscribe($data['email']);
  1522. if($return !== false){
  1523. if(!isset($return['status']) || $return['status'] === 'error'){
  1524. $error = (isset($return['message']) && !empty($return['message'])) ? $return['message'] : __('Invalid Email', 'revslider');
  1525. self::ajaxResponseError($error);
  1526. }else{
  1527. self::ajaxResponseSuccess(__("Success! Please check your Emails to finish the subscription", 'revslider'), $return);
  1528. }
  1529. }else{
  1530. self::ajaxResponseError(__('Invalid Email/Could not connect to the Newsletter server', 'revslider'));
  1531. }
  1532. }else{
  1533. self::ajaxResponseError(__('No Email given', 'revslider'));
  1534. }
  1535. break;
  1536. case "unsubscribe_to_newsletter":
  1537. if(isset($data['email']) && !empty($data['email'])){
  1538. $return = ThemePunch_Newsletter::unsubscribe($data['email']);
  1539. if($return !== false){
  1540. if(!isset($return['status']) || $return['status'] === 'error'){
  1541. $error = (isset($return['message']) && !empty($return['message'])) ? $return['message'] : __('Invalid Email', 'revslider');
  1542. self::ajaxResponseError($error);
  1543. }else{
  1544. self::ajaxResponseSuccess(__("Success! Please check your Emails to finish the process", 'revslider'), $return);
  1545. }
  1546. }else{
  1547. self::ajaxResponseError(__('Invalid Email/Could not connect to the Newsletter server', 'revslider'));
  1548. }
  1549. }else{
  1550. self::ajaxResponseError(__('No Email given', 'revslider'));
  1551. }
  1552. break;
  1553. case 'change_specific_navigation':
  1554. $nav = new RevSliderNavigation();
  1555. $found = false;
  1556. $navigations = $nav->get_all_navigations();
  1557. foreach($navigations as $navig){
  1558. if($data['id'] == $navig['id']){
  1559. $found = true;
  1560. break;
  1561. }
  1562. }
  1563. if($found){
  1564. $nav->create_update_navigation($data, $data['id']);
  1565. }else{
  1566. $nav->create_update_navigation($data);
  1567. }
  1568. self::ajaxResponseSuccess(__('Navigation saved/updated', 'revslider'), array('navs' => $nav->get_all_navigations()));
  1569. break;
  1570. case 'change_navigations':
  1571. $nav = new RevSliderNavigation();
  1572. $nav->create_update_full_navigation($data);
  1573. self::ajaxResponseSuccess(__('Navigations updated', 'revslider'), array('navs' => $nav->get_all_navigations()));
  1574. break;
  1575. case 'delete_navigation':
  1576. $nav = new RevSliderNavigation();
  1577. if(isset($data) && intval($data) > 0){
  1578. $return = $nav->delete_navigation($data);
  1579. if($return !== true){
  1580. self::ajaxResponseError($return);
  1581. }else{
  1582. self::ajaxResponseSuccess(__('Navigation deleted', 'revslider'), array('navs' => $nav->get_all_navigations()));
  1583. }
  1584. }
  1585. self::ajaxResponseError(__('Wrong ID given', 'revslider'));
  1586. break;
  1587. case "get_facebook_photosets":
  1588. if(!empty($data['url'])){
  1589. $facebook = new RevSliderFacebook();
  1590. $return = $facebook->get_photo_set_photos_options($data['url'],$data['album'],$data['app_id'],$data['app_secret']);
  1591. if(!empty($return)){
  1592. self::ajaxResponseSuccess(__('Successfully fetched Facebook albums', 'revslider'), array('html'=>implode(' ', $return)));
  1593. }
  1594. else{
  1595. $error = __('Could not fetch Facebook albums', 'revslider');
  1596. self::ajaxResponseError($error);
  1597. }
  1598. }
  1599. else {
  1600. self::ajaxResponseSuccess(__('Cleared Albums', 'revslider'), array('html'=>implode(' ', $return)));
  1601. }
  1602. break;
  1603. case "get_flickr_photosets":
  1604. if(!empty($data['url']) && !empty($data['key'])){
  1605. $flickr = new RevSliderFlickr($data['key']);
  1606. $user_id = $flickr->get_user_from_url($data['url']);
  1607. $return = $flickr->get_photo_sets($user_id,$data['count'],$data['set']);
  1608. if(!empty($return)){
  1609. self::ajaxResponseSuccess(__('Successfully fetched flickr photosets', 'revslider'), array("data"=>array('html'=>implode(' ', $return))));
  1610. }
  1611. else{
  1612. $error = __('Could not fetch flickr photosets', 'revslider');
  1613. self::ajaxResponseError($error);
  1614. }
  1615. }
  1616. else {
  1617. if(empty($data['url']) && empty($data['key'])){
  1618. self::ajaxResponseSuccess(__('Cleared Photosets', 'revslider'), array('html'=>implode(' ', $return)));
  1619. }
  1620. elseif(empty($data['url'])){
  1621. $error = __('No User URL - Could not fetch flickr photosets', 'revslider');
  1622. self::ajaxResponseError($error);
  1623. }
  1624. else{
  1625. $error = __('No API KEY - Could not fetch flickr photosets', 'revslider');
  1626. self::ajaxResponseError($error);
  1627. }
  1628. }
  1629. break;
  1630. case "get_youtube_playlists":
  1631. if(!empty($data['id'])){
  1632. $youtube = new RevSliderYoutube(trim($data['api']),trim($data['id']));
  1633. $return = $youtube->get_playlist_options($data['playlist']);
  1634. self::ajaxResponseSuccess(__('Successfully fetched YouTube playlists', 'revslider'), array("data"=>array('html'=>implode(' ', $return))));
  1635. }
  1636. else {
  1637. $error = __('Could not fetch YouTube playlists', 'revslider');
  1638. self::ajaxResponseError($error);
  1639. }
  1640. break;
  1641. case 'rs_get_store_information':
  1642. global $wp_version, $rslb;
  1643. $code = get_option('revslider-code', '');
  1644. $shop_version = RevSliderTemplate::SHOP_VERSION;
  1645. $validated = get_option('revslider-valid', 'false');
  1646. if($validated == 'false'){
  1647. $api_key = '';
  1648. $username = '';
  1649. $code = '';
  1650. }
  1651. $rattr = array(
  1652. 'code' => urlencode($code),
  1653. 'product' => urlencode('revslider'),
  1654. 'shop_version' => urlencode($shop_version),
  1655. 'version' => urlencode(RevSliderGlobals::SLIDER_REVISION)
  1656. );
  1657. $done = false;
  1658. $count = 0;
  1659. do {
  1660. $url = $rslb->get_url('templates');
  1661. $request = wp_remote_post($url.'/revslider/store.php', array(
  1662. 'user-agent' => 'WordPress/'.$wp_version.'; '.get_bloginfo('url'),
  1663. 'body' => $rattr
  1664. ));
  1665. $response = '';
  1666. if(!is_wp_error($request)) {
  1667. $response = json_decode(@$request['body'], true);
  1668. $done = true;
  1669. }else{
  1670. $rslb->move_server_list();
  1671. }
  1672. $count++;
  1673. }while($done == false && $count < 5);
  1674. self::ajaxResponseData(array("data"=>$response));
  1675. break;
  1676. case 'load_library_object':
  1677. $obj_library = new RevSliderObjectLibrary();
  1678. $thumbhandle = $data['handle'];
  1679. $type = $data['type'];
  1680. if($type == 'thumb'){
  1681. $thumb = $obj_library->_get_object_thumb($thumbhandle, 'thumb');
  1682. }elseif($type == 'orig'){
  1683. $thumb = $obj_library->_get_object_thumb($thumbhandle, 'original');
  1684. }
  1685. if($thumb['error']){
  1686. self::ajaxResponseError(__('Object could not be loaded', 'revslider'));
  1687. }else{
  1688. self::ajaxResponseData(array('url'=> $thumb['url'], 'width' => $thumb['width'], 'height' => $thumb['height']));
  1689. }
  1690. break;
  1691. case 'load_template_store_sliders':
  1692. $tmpl = new RevSliderTemplate();
  1693. $tp_template_slider = $tmpl->getThemePunchTemplateSliders();
  1694. ob_start();
  1695. $tmpl->create_html_sliders($tp_template_slider);
  1696. $html = ob_get_contents();
  1697. ob_clean();
  1698. ob_end_clean();
  1699. self::ajaxResponseData(array('html'=> $html));
  1700. break;
  1701. case 'load_template_store_slides':
  1702. $tmpl = new RevSliderTemplate();
  1703. $templates = $tmpl->getTemplateSlides();
  1704. $tp_template_slider = $tmpl->getThemePunchTemplateSliders();
  1705. $tmp_slider = new RevSlider();
  1706. $all_slider = apply_filters('revslider_slide_templates', $tmp_slider->getArrSliders());
  1707. ob_start();
  1708. $tmpl->create_html_slides($tp_template_slider, $all_slider, $templates);
  1709. $html = ob_get_contents();
  1710. ob_clean();
  1711. ob_end_clean();
  1712. self::ajaxResponseData(array('html'=> $html));
  1713. break;
  1714. case 'load_object_library':
  1715. $html = '';
  1716. $obj = new RevSliderObjectLibrary();
  1717. $mdata = $obj->retrieve_all_object_data();
  1718. self::ajaxResponseData(array('data'=> $mdata));
  1719. break;
  1720. case 'slide_editor_sticky_menu':
  1721. if(isset($data['set_sticky']) && $data['set_sticky'] == 'true'){
  1722. update_option('revslider_slide_editor_sticky', 'true');
  1723. }else{
  1724. update_option('revslider_slide_editor_sticky', 'false');
  1725. }
  1726. self::ajaxResponseData(array());
  1727. break;
  1728. case 'save_color_preset':
  1729. $presets = TPColorpicker::save_color_presets($data['presets']);
  1730. self::ajaxResponseData(array('presets' => $presets));
  1731. break;
  1732. default:
  1733. $return = apply_filters('revslider_admin_onAjaxAction_switch', false, $action, $data, $slider, $slide, $operations);
  1734. if($return === false)
  1735. self::ajaxResponseError("wrong ajax action: ".esc_attr($action));
  1736. exit;
  1737. break;
  1738. }
  1739. $role = self::getMenuRole(); //add additional security check and allow for example import only for admin
  1740. }
  1741. catch(Exception $e){
  1742. $message = $e->getMessage();
  1743. if($action == "preview_slide" || $action == "preview_slider"){
  1744. echo $message;
  1745. exit();
  1746. }
  1747. self::ajaxResponseError($message);
  1748. }
  1749. //it's an ajax action, so exit
  1750. self::ajaxResponseError("No response output on $action action. please check with the developer.");
  1751. exit();
  1752. }
  1753. /**
  1754. * onAjax action handler
  1755. */
  1756. public static function onFrontAjaxAction(){
  1757. $db = new RevSliderDB();
  1758. $slider = new RevSlider();
  1759. $slide = new RevSlide();
  1760. $operations = new RevSliderOperations();
  1761. $token = self::getPostVar("token", false);
  1762. //verify the token
  1763. $isVerified = wp_verify_nonce($token, 'RevSlider_Front');
  1764. $error = false;
  1765. if($isVerified){
  1766. $data = self::getPostVar('data', false);
  1767. switch(self::getPostVar('client_action', false)){
  1768. case 'get_slider_html':
  1769. $id = intval(self::getPostVar('id', 0));
  1770. if($id > 0){
  1771. $html = '';
  1772. ob_start();
  1773. $slider_class = RevSliderOutput::putSlider($id);
  1774. $html = ob_get_contents();
  1775. //add styling
  1776. $custom_css = RevSliderOperations::getStaticCss();
  1777. $custom_css = RevSliderCssParser::compress_css($custom_css);
  1778. $styles = $db->fetch(RevSliderGlobals::$table_css);
  1779. $styles = RevSliderCssParser::parseDbArrayToCss($styles, "\n");
  1780. $styles = RevSliderCssParser::compress_css($styles);
  1781. $html .= '<style type="text/css">'.$custom_css.'</style>';
  1782. $html .= '<style type="text/css">'.$styles.'</style>';
  1783. ob_clean();
  1784. ob_end_clean();
  1785. $result = (!empty($slider_class) && $html !== '') ? true : false;
  1786. if(!$result){
  1787. $error = __('Slider not found', 'revslider');
  1788. }else{
  1789. if($html !== false){
  1790. self::ajaxResponseData($html);
  1791. }else{
  1792. $error = __('Slider not found', 'revslider');
  1793. }
  1794. }
  1795. }else{
  1796. $error = __('No Data Received', 'revslider');
  1797. }
  1798. break;
  1799. }
  1800. }else{
  1801. $error = true;
  1802. }
  1803. if($error !== false){
  1804. $showError = __('Loading Error', 'revslider');
  1805. if($error !== true)
  1806. $showError = __('Loading Error: ', 'revslider').$error;
  1807. self::ajaxResponseError($showError, false);
  1808. }
  1809. exit();
  1810. }
  1811. }
  1812. ?>