revslider-admin.class.php 89 KB

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