File "api.class.php"
Full Path: /home/siazco/grocery.siazco.se/wp-content/plugins/revslider/includes/api.class.php
File size: 73.45 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* @author ThemePunch <[email protected]>
* @link https://www.themepunch.com/
* @copyright 2024 ThemePunch
*/
if(!defined('ABSPATH')) exit();
class RevSliderApi extends RevSliderFunctions {
private $global_settings = array();
public $demo_allowed = array('get_template_information_short', 'import_template_slider', 'install_template_slide', 'get_list_of', 'get_global_settings', 'get_full_slider_object', 'subscribe_to_newsletter', 'check_system', 'load_module', 'get_addon_list', 'get_layers_by_slide', 'silent_slider_update', 'get_help_directory', 'set_tooltip_preference', 'load_builder', 'load_library_object', 'get_tooltips');
public $user_allowed = array('activate_plugin', 'deactivate_plugin', 'import_template_slider', 'install_template_slide', 'import_slider', 'delete_slider', 'create_navigation_preset', 'delete_navigation_preset', 'save_navigation', 'delete_animation', 'save_animation', 'check_system', 'fix_database_issues', 'trigger_font_deletion');
public $no_cache = array('get_template_information_short', 'export_slider', 'export_slider_html', 'getSliderImage', 'getSliderSizeLayout', 'get_list_of', 'load_wordpress_object', 'get_global_settings', 'get_slides_by_slider_id', 'get_full_slider_object', 'load_builder', 'subscribe_to_newsletter', 'check_system', 'get_layers_by_slide', 'export_layer_group', 'load_wordpress_image', 'load_library_image', 'get_help_directory', 'get_tooltips', 'get_addons_sizes', 'get_v5_slider_list');
public $REST = false;
public function __construct(){
$this->add_actions();
$this->global_settings = $this->get_global_settings();
}
/**
* Add all actions that the backend needs here
**/
public function add_actions(){
add_action('wp_ajax_revslider_ajax_action', array($this, 'do_ajax_action')); //ajax response to save slider options.
add_action('wp_ajax_rs_ajax_action', array($this, 'do_ajax_action')); //ajax response to save slider options.
add_action('wp_ajax_revslider_ajax_call_front', array($this, 'do_front_ajax_action'));
add_action('wp_ajax_nopriv_revslider_ajax_call_front', array($this, 'do_front_ajax_action')); //for not logged in users
add_action('rest_api_init', array($this, 'init_rest_api'));
}
/**
* Init the REST API
**/
public function init_rest_api(){
/**
WP_REST_SERVER::READABLE = 'GET'
WP_REST_SERVER::CREATABLE = 'POST'
WP_REST_SERVER::EDITABLE = 'POST, PUT, PATCH'
WP_REST_SERVER::DELETABLE = 'DELETE'
WP_REST_SERVER::ALLMETHODS = 'GET, POST, PUT, PATCH, DELETE'
return $_SERVER['REQUEST_METHOD']
**/
//{"code":"rest_no_route","message":"Es wurde keine Route gefunden, die mit der URL und der Request-Methode identisch ist.","data":{"status":404}}
register_rest_route('sliderrevolution', '/sliders', array(
'methods' => WP_REST_SERVER::READABLE,
'callback' => array($this, 'get_full_slider_object'),
'permission_callback' => array($this, 'setup_exception_handler')
));
register_rest_route('sliderrevolution', '/sliders/(?P<slider>[\w\-]+)', array(
'methods' => WP_REST_SERVER::READABLE,
'callback' => array($this, 'get_full_slider_object'),
'permission_callback' => array($this, 'setup_exception_handler')
));
register_rest_route('sliderrevolution', '/sliders/slides/(?P<id>\d+)', array(
'methods' => WP_REST_SERVER::READABLE,
'callback' => array($this, 'get_full_slider_object'),
'permission_callback' => array($this, 'setup_exception_handler')
));
//register_rest_route('sliderrevolution', '/sliders/stream/(?P<id>\d+)', array(
register_rest_route('sliderrevolution', '/sliders/stream/(?P<id>[0-9,]+)', array(
'methods' => WP_REST_SERVER::READABLE,
'callback' => array($this, 'get_stream_data'),
'permission_callback' => array($this, 'setup_exception_handler')
));
register_rest_route('sliderrevolution', '/sliders/modal/(?P<slider>[\w\-]+)', array(
'methods' => WP_REST_SERVER::READABLE,
'callback' => array($this, 'get_slider_modal_data'),
'permission_callback' => array($this, 'setup_exception_handler')
));
}
public function set_rest_call(){
$this->REST = true;
}
public function is_rest_call(){
return $this->REST;
}
public function check_nonce(){
$this->setup_exception_handler();
$nonce = $this->get_request_var('nonce');
$nonce = (empty($nonce)) ? $this->get_request_var('rs-nonce') : $nonce;
if(wp_verify_nonce($nonce, 'revslider_actions') == false){
//check if it is wp nonce and if the action is refresh nonce
$this->ajax_response_error(__('Bad Request', 'revslider'));
exit;
}
$sr_admin = RevSliderGlobals::instance()->get('RevSliderAdmin');
if(!current_user_can($sr_admin->get_user_role()) && apply_filters('revslider_restrict_role', true)){
$this->ajax_response_error(__('Bad Request', 'revslider'));
exit;
}
return true;
}
public function setup_exception_handler(){
set_exception_handler(array($this, 'handle_rest_exceptions'));
return true;
}
public function handle_rest_exceptions(Throwable $exception){
//http_response_code(500);
//if(!$this->is_rest_call()) return;
$response = array(
'success' => false,
'message' => $exception->getMessage()
);
wp_send_json($response);
}
/**
* The Ajax Action part for backend actions only
**/
public function do_ajax_action(){
global $SR_GLOBALS;
$slider = new RevSliderSlider();
$slide = new RevSliderSlide();
$action = $this->get_request_var('client_action');
$nonce = $this->get_request_var('nonce');
$nonce = (empty($nonce)) ? $this->get_request_var('rs-nonce') : $nonce;
//for now, set also the data for ajax calls here, later to be removed!
$data = $this->get_request_var('data', '', false);
$data = ($data == '') ? array() : $data;
try{
if(RS_DEMO && !in_array($action, $this->demo_allowed)){
$this->ajax_response_error(__('Function Not Available in Demo Mode', 'revslider'));
exit;
}
$sr_admin = RevSliderGlobals::instance()->get('RevSliderAdmin');
if(!current_user_can($sr_admin->get_user_role()) && apply_filters('revslider_restrict_role', true)){
if(in_array($action, $this->user_allowed)){
$this->ajax_response_error(__('Function only available for administrators', 'revslider'));
exit;
}else{
$return = apply_filters('revslider_admin_onAjaxAction_user_restriction', true, $action, $data, $slider, $slide);
if($return !== true){
$this->ajax_response_error(__('Function only available for administrators', 'revslider'));
exit;
}
}
}
if(wp_verify_nonce($nonce, 'revslider_actions') == false){
//check if it is wp nonce and if the action is refresh nonce
$this->ajax_response_error(__('Bad Request', 'revslider'));
exit;
}
if(!in_array($action, $this->no_cache)) $this->flush_wp_cache();
switch($action){
/**
* new to v7 calls
**/
case 'save_slider_v7':
$this->save_slider();
break;
case 'clear_v7_tables':
$this->truncate_v7_tables();
break;
case 'set_v7_migration_failed':
$this->set_v7_migration_failed();
break;
case 'get_full_slider_object_v7':
$this->get_full_slider_object(false, false);
break;
/**
* The old ajax calls, all of these are not in the REST API yet
**/
case 'load_google_font':
$google_font = $this->get_val($data, 'font', '');
$this->download_collected_fonts($google_font);
$this->ajax_response_success('', '');
break;
case 'collect_google_fonts':
$page = $this->get_val($data, 'page', 1);
$return = $this->collect_used_fonts(true, true, $page);
$this->ajax_response_data($return);
break;
case 'delete_full_fonts_cache':
$this->delete_google_fonts();
$this->ajax_response_success(__('Successfully deleted all fonts cache', 'revslider'));
break;
case 'activate_plugin':
$result = false;
$code = trim($this->get_val($data, 'code'));
$selling = $this->get_addition('selling');
$rs_license = new RevSliderLicense();
if(!empty($code)){
$result = $rs_license->activate_plugin($code);
}else{
$error = ($selling === true) ? __('The License Key needs to be set!', 'revslider') : __('The Purchase Code needs to be set!', 'revslider');
$this->ajax_response_error($error);
exit;
}
if($result === true){
$this->ajax_response_success(__('Plugin successfully activated', 'revslider'));
}elseif($result === false){
$error = ($selling === true) ? __('License Key is invalid', 'revslider') : __('Purchase Code is invalid', 'revslider');
$this->ajax_response_error($error);
}else{
if($result == 'exist'){
$error = ($selling === true) ? __('License Key already registered!', 'revslider') : __('Purchase Code already registered!', 'revslider');
$this->ajax_response_error($error);
}elseif($result == 'banned'){
$error = ($selling === true) ? __('License Key was locked, please contact the ThemePunch support!', 'revslider') : __('Purchase Code was locked, please contact the ThemePunch support!', 'revslider');
$this->ajax_response_error($error);
}
$error = ($selling === true) ? __('License Key could not be validated', 'revslider') : __('Purchase Code could not be validated', 'revslider');
$this->ajax_response_error($error);
}
break;
case 'deactivate_plugin':
$rs_license = new RevSliderLicense();
$result = $rs_license->deactivate_plugin();
if($result){
$this->ajax_response_success(__('Plugin deregistered', 'revslider'));
}else{
$this->ajax_response_error(__('Deregistration failed!', 'revslider'));
}
break;
case 'close_deregister_popup':
update_option('revslider-deregister-popup', 'false');
$this->ajax_response_success(__('Saved', 'revslider'));
break;
case 'deactivate_trustpilot':
update_option('revslider-trustpilot', 'false');
$this->ajax_response_success(__('Saved', 'revslider'));
break;
case 'dismiss_dynamic_notice':
$ids = $this->get_val($data, 'id', array());
$notices_discarded = get_option('revslider-notices-dc', array());
if(!empty($ids)){
foreach($ids as $_id){
$notices_discarded[] = esc_attr(trim($_id));
}
update_option('revslider-notices-dc', $notices_discarded);
}
$this->ajax_response_success(__('Saved', 'revslider'));
break;
case 'check_for_updates':
$update = new RevSliderUpdate(RS_REVISION);
$update->force = true;
$update->_retrieve_version_info();
$version = get_option('revslider-latest-version', RS_REVISION);
if($version !== false){
$this->ajax_response_data(array('version' => $version));
}else{
$this->ajax_response_error(__('Connection to Update Server Failed', 'revslider'));
}
break;
case 'get_template_information_short':
$templates = new RevSliderTemplate();
$sliders = $templates->get_tp_template_sliders();
$this->ajax_response_data(array('templates' => $sliders));
break;
case 'import_template_slider': //before: import_slider_template_slidersview
$uid = $this->get_val($data, 'uid');
$sliderID = intval($this->get_val($data, 'sliderid', 0));
$templates = new RevSliderTemplate();
$filepath = $templates->_download_template($uid);
if($filepath !== false){
$templates->remove_old_template($uid);
$slider = new RevSliderSliderImport();
$return = $slider->import_slider(false, $filepath, $uid, false, true);
if($this->get_val($return, 'success') == true){
$new_id = $this->get_val($return, 'sliderID');
if(intval($new_id) > 0){
$map = $this->get_val($return, 'map', array());
$folder_id = $this->get_val($data, 'folderid', -1);
if(intval($folder_id) > 0){
$folder = new RevSliderFolder();
$folder->add_slider_to_folder($new_id, $folder_id, false);
}
$new_slider = new RevSliderSlider();
$new_slider->init_by_id($new_id);
$data = $new_slider->get_overview_data();
$hiddensliderid = $templates->get_slider_id_by_uid($uid);
$templates->_delete_template($uid); //delete template file
$this->ajax_response_data(array('slider' => $data, 'hiddensliderid' => $hiddensliderid, 'map' => $map, 'uid' => $uid));
}
}
$templates->_delete_template($uid); //delete template file
$error = ($this->get_val($return, 'error') !== '') ? $this->get_val($return, 'error') : __('Slider Import Failed', 'revslider');
$this->ajax_response_error($error);
}
$this->ajax_response_error(__('Template Slider Import Failed', 'revslider'));
break;
case 'install_template_slide':
$template = new RevSliderTemplate();
$slider_id = intval($this->get_val($data, 'slider_id'));
$slide_id = intval($this->get_val($data, 'slide_id'));
if($slider_id == 0 || $slide_id == 0){
}else{
$new_slide_id = $slide->duplicate_slide_by_id($slide_id, $slider_id);
if($new_slide_id !== false){
$slide->init_by_id($new_slide_id);
$_slides[] = array(
'order' => $slide->get_order(),
'params' => $slide->get_params(),
'layers' => $slide->get_layers(),
'id' => $slide->get_id(),
);
$this->ajax_response_data(array('slides' => $_slides));
}
}
$this->ajax_response_error(__('Slide duplication failed', 'revslider'));
break;
case 'import_slider':
$import = new RevSliderSliderImport();
$return = $import->import_slider();
if($this->get_val($return, 'success') == true){
$new_id = $this->get_val($return, 'sliderID');
if(intval($new_id) > 0){
$folder = new RevSliderFolder();
$folder_id = $this->get_val($data, 'folderid', -1);
if(intval($folder_id) > 0){
$folder->add_slider_to_folder($new_id, $folder_id, false);
}
$new_slider = new RevSliderSlider();
$new_slider->init_by_id($new_id);
$data = $new_slider->get_overview_data();
$this->ajax_response_data(array('slider' => $data, 'hiddensliderid' => $new_id));
}
}
$error = ($this->get_val($return, 'error') !== '') ? $this->get_val($return, 'error') : __('Slider Import Failed', 'revslider');
$this->ajax_response_error($error);
break;
case 'add_to_media_library':
$sr_admin = RevSliderGlobals::instance()->get('RevSliderAdmin');
$return = $sr_admin->import_upload_media();
if($this->get_val($return, 'error', false) !== false){
$this->ajax_response_error($this->get_val($return, 'error', false));
}else{
$this->ajax_response_data($return);
}
break;
case 'adjust_modal_ids':
$map = $this->get_val($data, 'map', array());
if(!empty($map)){
$slider_ids = $this->get_val($map, 'slider_map', array());
$slides_ids = $this->get_val($map, 'slides_map', array());
$ztt = $this->get_val($slider_ids, 'zip_to_template', array());
$s_a = array();
if(!empty($slides_ids)){
foreach($slides_ids as $k => $v){
if(is_array($v)){
foreach($v as $vk => $vv){
$s_a[$vk] = $vv;
}
unset($slides_ids[$k]);
}
}
}
if(!empty($ztt)){
foreach($ztt as $old => $new){
$slider = new RevSliderSliderImport();
$slider->init_by_id($new);
$slider->update_modal_ids($ztt, $slides_ids);
}
}
$this->ajax_response_data(array());
}else{
$this->ajax_response_error(__('Slider Map Empty', 'revslider'));
}
break;
case 'adjust_js_css_ids':
$map = $this->get_val($data, 'map', array());
if(!empty($map)){
$slider_map = array();
foreach($map as $m){
$slider_ids = $this->get_val($m, 'slider_map', array());
if(!empty($slider_ids)){
foreach($slider_ids as $old => $new){
$slider = new RevSliderSliderImport();
$slider->init_by_id($new);
$slider_map[] = $slider;
}
}
}
if(!empty($slider_map)){
foreach($slider_map as $slider){
foreach($map as $m){
$slider_ids = $this->get_val($m, 'slider_map', array());
$slide_ids = $this->get_val($m, 'slide_map', array());
if(!empty($slider_ids)){
foreach($slider_ids as $old => $new){
$slider->update_css_and_javascript_ids($old, $new, $slide_ids);
}
}
}
}
}
}
break;
case 'export_slider':
$export = new RevSliderSliderExport();
$id = intval($this->get_request_var('id'));
$export->export_slider($id);
//will never be called if all is good
$this->ajax_response_error(__('Slider Export Error!!!', 'revslider'));
break;
case 'export_slider_html':
$export = new RevSliderSliderExportHtml();
$id = intval($this->get_request_var('id'));
$export->export_slider_html($id);
//will never be called if all is good
$this->ajax_response_error(__('Slider HTML Export Error!!!', 'revslider'));
break;
case 'delete_slider':
$id = $this->get_val($data, 'id');
$slider->init_by_id($id);
$slider->delete_slider();
$this->ajax_response_success(__('Slider Deleted', 'revslider'));
break;
case 'duplicate_slider':
$id = $this->get_val($data, 'id');
$new_id = $slider->duplicate_slider_by_id($id);
if(intval($new_id) > 0){
$new_slider = new RevSliderSlider();
$new_slider->init_by_id($new_id);
$data = $new_slider->get_overview_data();
$this->ajax_response_data(array('slider' => $data));
}
$this->ajax_response_error(__('Duplication Failed', 'revslider'));
break;
case 'save_slide':
$slide_id = $this->get_val($data, 'slide_id');
$slider_id = $this->get_val($data, 'slider_id');
$return = $slide->save_slide($slide_id, $data, $slider_id);
$cache = RevSliderGlobals::instance()->get('RevSliderCache');
$cache->clear_transients_by_slider($slider_id);
if($return){
$v7_slider_map = $this->get_v7_slider_map($slider_id);
$this->ajax_response_data(array('v7' => $v7_slider_map));
}else{
$this->ajax_response_error(__('Slide not found', 'revslider'));
}
break;
case 'save_slide_advanced':
$slide_id = $this->get_val($data, 'slide_id');
$slider_id = $this->get_val($data, 'slider_id');
$return = $slide->save_slide_advanced($slide_id, $data, $slider_id);
$cache = RevSliderGlobals::instance()->get('RevSliderCache');
$cache->clear_transients_by_slider($slider_id);
if($return){
$this->ajax_response_success(__('Slide Saved', 'revslider'));
}else{
$this->ajax_response_error(__('Slide not found', 'revslider'));
}
break;
case 'save_slider':
$slider_id = $this->get_val($data, 'slider_id');
$slide_ids = $this->get_val($data, 'slide_ids', array());
$return = $slider->save_slider($slider_id, $data);
$missing_slides = array();
$delete_slides = array();
$cache = RevSliderGlobals::instance()->get('RevSliderCache');
$cache->clear_transients_by_slider($slider_id);
if($return === false) $this->ajax_response_error(__('Slider not found', 'revslider'));
if(!empty($slide_ids)){
$slides = $slider->get_slides(false, true);
//get the missing Slides (if any at all)
foreach($slide_ids as $slide_id){
foreach($slides as $_slide){
if($_slide->get_id() !== $slide_id) continue;
$missing_slides[] = $slide_id;
break;
}
}
//get the Slides that are no longer needed and delete them
$existing_slide_ids = array();
foreach($slides as $key => $_slide){
$id = $_slide->get_id();
if(!in_array($id, $slide_ids)){
$delete_slides[] = $id;
}else{
$existing_slide_ids[] = $id;
}
}
foreach($slides as $key => $_slide){
//check if the parentID exists in the $slides, if not remove this child slide
$parentID = $_slide->get_param(array('child', 'parentId'), false);
if($parentID !== false){
if(!in_array($parentID, $existing_slide_ids)){
$slid = $_slide->get_id();
if(!in_array($slid, $delete_slides)){
$delete_slides[] = $slid;
}
}
}
}
if(!empty($delete_slides)){
//check for parentID's and if they exist, if the parentID will be deleted
foreach($slides as $key => $_slide){
//params -> child -> parentID
$parentID = $_slide->get_param(array('child', 'parentId'), false);
$child = $_slide->get_param(array('child'), false);
if($parentID !== false){
if(in_array($parentID, $delete_slides)){
$delete_slides[] = $_slide->get_id();
}
}
}
foreach($slides as $key => $_slide){
$id = $_slide->get_id();
if(in_array($id, $delete_slides)){
unset($slides[$key]); //remove none existing slides for further ordering process
}
}
foreach($delete_slides as $delete_slide){
$slide->delete_slide_by_id($delete_slide);
}
}
//change the order of slides
$slide = new RevSliderSlide();
foreach($slide_ids as $order => $id){
$new_order = $order + 1;
$slide->change_slide_order($id, $new_order);
}
}
$v7_slider_map = $this->get_v7_slider_map($slider_id);
$trans_ids = $this->get_val($data, 'trans_ids');
if(!empty($trans_ids)){
foreach($trans_ids ?? [] as $t_id){
$t_v7id = $this->get_v7_slider_map(false, $t_id);
if(intval($t_v7id) === 0) continue;
if(!isset($v7_slider_map['n'])) $v7_slider_map['n'] = array();
$v7_slider_map['n'][$t_id] = $t_v7id;
}
}
$this->ajax_response_data(array('missing' => $missing_slides, 'delete' => $delete_slides, 'v7' => $v7_slider_map));
break;
case 'delete_slide':
$slide_id = intval($this->get_val($data, 'slide_id', ''));
if($slide_id > 0){
$slide->init_by_id($slide_id);
$slider_id = $slide->get_slider_id();
$cache = RevSliderGlobals::instance()->get('RevSliderCache');
$cache->clear_transients_by_slider($slider_id);
}
$return = ($slide_id > 0) ? $slide->delete_slide_by_id($slide_id) : false;
if($return !== false){
$this->ajax_response_success(__('Slide deleted', 'revslider'));
}else{
$this->ajax_response_error(__('Slide could not be deleted', 'revslider'));
}
break;
case 'duplicate_slide':
$slide_id = intval($this->get_val($data, 'slide_id', ''));
$slider_id = intval($this->get_val($data, 'slider_id', ''));
$new_slide_id = $slide->duplicate_slide_by_id($slide_id, $slider_id);
if($new_slide_id !== false){
$slide->init_by_id($new_slide_id);
$_slide = $slide->get_overview_data();
$this->ajax_response_data(array('slide' => $_slide));
}else{
$this->ajax_response_error(__('Slide could not duplicated', 'revslider'));
}
break;
case 'update_slide_order':
$slide_ids = $this->get_val($data, 'slide_ids', array());
//change the order of slides
if(!empty($slide_ids)){
$init = false;
foreach($slide_ids as $order => $id){
if($init === false){
$slide->init_by_id($id);
$init = true;
}
$new_order = $order + 1;
$slide->change_slide_order($id, $new_order);
}
$slider_id = $slide->get_slider_id();
$cache = RevSliderGlobals::instance()->get('RevSliderCache');
$cache->clear_transients_by_slider($slider_id);
$this->ajax_response_success(__('Slide order changed', 'revslider'));
}else{
$this->ajax_response_error(__('Slide order could not be changed', 'revslider'));
}
break;
case 'getSliderImage':
// Available Sliders
$slider = new RevSliderSlider();
$arrSliders = $slider->get_sliders();
// Given Alias
$alias = $this->get_val($data, 'alias');
$return = array_search($alias,$arrSliders);
foreach($arrSliders as $sliderony){
if($sliderony->get_alias() != $alias) continue;
$slider_found = $sliderony->get_overview_data();
$return = $this->get_val($slider_found, array('bg', 'src'));
$title = $this->get_val($slider_found, 'title');
$premium_state = $this->get_val($slider_found, 'premium');
break;
}
if(!$return) $return = '';
if(!empty($title)){
$this->ajax_response_data(array('image' => $return, 'title' => $title, 'premium' => $premium_state));
}else{
$this->ajax_response_error( __('The Slider with the alias "' . $alias . '" is not available!', 'revslider') );
}
break;
case 'getSliderSizeLayout':
// Available Sliders
$slider = new RevSliderSlider();
$arrSliders = $slider->get_sliders();
// Given Alias
$alias = $this->get_val($data, 'alias');
$return = array_search($alias, $arrSliders);
$title = '';
foreach($arrSliders as $sliderony){
if($sliderony->get_alias() == $alias){
$slider_found = $sliderony->get_overview_data();
$return = $slider_found['size'];
$title = $slider_found['title'];
}
}
$this->ajax_response_data(array('layout' => $return, 'title' => $title));
break;
case 'get_list_of':
$type = $this->get_val($data, 'type');
switch($type){
case 'sliders':
$slider = new RevSliderSlider();
$arrSliders = $slider->get_sliders();
$return = array();
foreach($arrSliders as $sliderony){
$return[$sliderony->get_id()] = array('slug' => $sliderony->get_alias(), 'title' => $sliderony->get_title(), 'type' => $sliderony->get_type(), 'subtype' => $sliderony->get_param(array('source', 'post', 'subType'), false));
}
$this->ajax_response_data(array('sliders' => $return));
break;
case 'pages':
$pages = get_pages(array());
$return = array();
foreach($pages as $page){
if(!$page->post_password){
$return[$page->ID] = array('slug' => $page->post_name, 'title' => $page->post_title);
}
}
$this->ajax_response_data(array('pages' => $return));
break;
case 'posttypes':
$args = array(
'public' => true,
'_builtin' => false,
);
$output = 'objects';
$operator = 'and';
$post_types = get_post_types($args, $output, $operator);
$return['post'] = array('slug' => 'post', 'title' => __('Posts', 'revslider'));
foreach($post_types as $post_type){
$return[$post_type->rewrite['slug']] = array('slug' => $post_type->rewrite['slug'], 'title' => $post_type->labels->name);
if(!in_array($post_type->name, array('post', 'page', 'attachment', 'revision', 'nav_menu_item', 'custom_css', 'custom_changeset', 'user_request'))){
$taxonomy_objects = get_object_taxonomies($post_type->name, 'objects');
if(!empty($taxonomy_objects)){
$return[$post_type->rewrite['slug']]['tax'] = array();
foreach($taxonomy_objects as $name => $tax){
$return[$post_type->rewrite['slug']]['tax'][$name] = $tax->label;
}
}
}
}
$this->ajax_response_data(array('posttypes' => $return));
break;
}
break;
case 'load_wordpress_object':
$id = $this->get_val($data, 'id', 0);
$type = $this->get_val($data, 'type', 'full');
$file = wp_get_attachment_image_src($id, $type);
if($file !== false){
$this->ajax_response_data(array('url' => $this->get_val($file, 0)));
}else{
$this->ajax_response_error(__('File could not be loaded', 'revslider'));
}
break;
case 'get_global_settings':
$this->ajax_response_data(array('global_settings' => $this->global_settings));
break;
case 'update_global_settings':
$global = $this->get_val($data, 'global_settings', array());
if(!empty($global)){
$update = $this->get_val($data, 'update', false);
$return = $this->set_global_settings($global, $update);
if($return === true){
$this->ajax_response_success(__('Global Settings saved/updated', 'revslider'));
}else{
$this->ajax_response_error(__('Global Settings not saved/updated', 'revslider'));
}
}else{
$this->ajax_response_error(__('Global Settings not saved/updated', 'revslider'));
}
break;
case 'create_navigation_preset':
$nav = new RevSliderNavigation();
$return = $nav->add_preset($data);
if($return === true){
$this->ajax_response_success(__('Navigation preset saved/updated', 'revslider'), array('navs' => $nav->get_all_navigations_builder()));
}else{
if($return === false){
$return = __('Preset could not be saved/values are the same', 'revslider');
}
$this->ajax_response_error($return);
}
break;
case 'delete_navigation_preset':
$nav = new RevSliderNavigation();
$return = $nav->delete_preset($data);
if($return === true){
$this->ajax_response_success(__('Navigation preset deleted', 'revslider'), array('navs' => $nav->get_all_navigations_builder()));
}else{
if($return === false){
$return = __('Preset not found', 'revslider');
}
$this->ajax_response_error($return);
}
break;
case 'save_navigation': //also deletes if requested
$_nav = new RevSliderNavigation();
$navs = (array) $this->get_val($data, 'navs', array());
$delete_navs = (array) $this->get_val($data, 'delete', array());
if(!empty($delete_navs)){
foreach($delete_navs as $dnav){
$_nav->delete_navigation($dnav);
}
}
if(!empty($navs)){
$_nav->create_update_full_navigation($navs);
}
$navigations = $_nav->get_all_navigations_builder();
$this->ajax_response_data(array('navs' => $navigations));
break;
case 'delete_animation':
$animation_id = $this->get_val($data, 'id');
$return = $sr_admin->delete_animation($animation_id);
if($return){
$this->ajax_response_success(__('Animation deleted', 'revslider'));
}else{
$this->ajax_response_error(__('Deletion failed', 'revslider'));
}
break;
case 'save_animation':
$id = $this->get_val($data, 'id', false);
$type = $this->get_val($data, 'type', 'in');
$animation = $this->get_val($data, 'obj');
if($id !== false){
$return = $sr_admin->update_animation($id, $animation, $type);
}else{
$return = $sr_admin->insert_animation($animation, $type);
}
if(intval($return) > 0){
$this->ajax_response_data(array('id' => $return));
} elseif($return === true){
$this->ajax_response_success(__('Animation saved', 'revslider'));
}else{
if($return == false){
$this->ajax_response_error(__('Animation could not be saved', 'revslider'));
}
$this->ajax_response_error($return);
}
break;
case 'get_slides_by_slider_id':
$sid = intval($this->get_val($data, 'id'));
$slides = array();
$_slides = $slide->get_slides_by_slider_id($sid);
if(!empty($_slides)){
foreach($_slides as $slide){
$slides[] = $slide->get_overview_data();
}
}
$this->ajax_response_data(array('slides' => $slides));
break;
case 'get_full_slider_object':
$slide_id = $this->get_val($data, 'id');
$slide_id = RevSliderFunctions::esc_attr_deep($slide_id);
$slider_alias = $this->get_val($data, 'alias', '');
$slider_alias = RevSliderFunctions::esc_attr_deep($slider_alias);
if($slider_alias !== ''){
$slider->init_by_alias($slider_alias);
$slider_id = $slider->get_id();
}else{
if(strpos($slide_id, 'slider-') !== false){
$slider_id = str_replace('slider-', '', $slide_id);
}else{
$slide->init_by_id($slide_id);
$slider_id = $slide->get_slider_id();
if(intval($slider_id) == 0){
$this->ajax_response_error(__('Slider could not be loaded', 'revslider'));
}
}
$slider->init_by_id($slider_id);
}
if($slider->inited === false){
$this->ajax_response_error(__('Slider could not be loaded', 'revslider'));
}
//check if an update is needed
if(version_compare($slider->get_param(array('settings', 'version')), get_option('revslider_update_version', '6.0.0'), '<')){
$upd = new RevSliderPluginUpdate();
$upd->upgrade_slider_to_latest($slider);
$slider->init_by_id($slider_id);
}
//create static Slide if the Slider not yet has one
$static_slide_id = $slide->get_static_slide_id($slider_id);
$static_slide_id = (intval($static_slide_id) === 0) ? $slide->create_slide($slider_id, '', true) : $static_slide_id;
$static_slide = false;
if(intval($static_slide_id) > 0){
$static_slide = new RevSliderSlide();
$static_slide->init_by_static_id($static_slide_id);
}
$slides = $slider->get_slides(false, true);
$_slides = array();
$_static_slide = array();
foreach($slides ?? [] as $s){
$_slides[] = array(
'order' => $s->get_order(),
'params' => $s->get_params(),
'layers' => $s->get_layers(),
'id' => $s->get_id(),
);
}
if(!empty($static_slide)){
$_static_slide = array(
'params' => $static_slide->get_params(),
'layers' => $static_slide->get_layers(),
'id' => $static_slide->get_id(),
);
}
$obj = array(
'id' => $slider_id,
'alias' => $slider->get_alias(),
'title' => $slider->get_title(),
'slider_params' => $slider->get_params(),
'slider_settings' => $slider->get_settings(),
'slides' => $_slides,
'static_slide' => $_static_slide,
);
$uid = $this->get_val($obj, array('slider_params', 'uid'));
if(!empty($uid)){
$templates = new RevSliderTemplate();
$rslb = RevSliderGlobals::instance()->get('RevSliderLoadBalancer');
$temp_url = $rslb->get_url('templates', 0, true).'/'.$templates->templates_server_path;
$defaults = $this->get_addition(array('templates', 'guide'));
$template_data = $templates->get_tp_template_sliders($uid);
if(!empty($template_data)){
foreach($template_data as $data){
$title = $this->get_val($data, 'guide_title');
$url = $this->get_val($data, 'guide_url');
$img = $this->get_val($data, 'guide_img');
$template_img = $this->get_val($data, 'img');
$obj['guide'] = array(
'title' => (empty($title)) ? $this->get_val($defaults, 'title') : $title,
'url' => (empty($url)) ? $this->get_val($defaults, 'url') : $url,
'img' => (empty($img)) ? $this->get_val($defaults, 'img') : $temp_url.'/'.$img,
'template_img' => (empty($template_img)) ? $this->get_val($defaults, 'img') : $template_img,
'template_title'=> $this->get_val($data, 'title'),
);
break;
}
}
}
$this->ajax_response_data($obj);
break;
case 'load_builder':
ob_start();
require_once(RS_PLUGIN_PATH . 'admin/views/builder.php');
$builder = ob_get_contents();
ob_clean();
ob_end_clean();
$this->ajax_response_data($builder);
break;
case 'create_slider_folder':
$folder = new RevSliderFolder();
$title = $this->get_val($data, 'title', __('New Folder', 'revslider'));
$parent = $this->get_val($data, 'parentFolder', 0);
$new = $folder->create_folder($title, $parent);
if($new !== false){
$overview_data = $new->get_overview_data();
$this->ajax_response_data(array('folder' => $overview_data));
}else{
$this->ajax_response_error(__('Folder Creation Failed', 'revslider'));
}
break;
case 'delete_slider_folder':
$id = $this->get_val($data, 'id');
$folder = new RevSliderFolder();
$is = $folder->init_folder_by_id($id);
if($is === true){
$folder->delete_slider();
$this->ajax_response_success(__('Folder Deleted', 'revslider'));
}else{
$this->ajax_response_error(__('Folder Deletion Failed', 'revslider'));
}
break;
case 'update_slider_tags':
$id = $this->get_val($data, 'id');
$tags = $this->get_val($data, 'tags');
$return = $slider->update_slider_tags($id, $tags);
if($return == true){
$this->ajax_response_success(__('Tags Updated', 'revslider'));
}else{
$this->ajax_response_error(__('Failed to Update Tags', 'revslider'));
}
break;
case 'save_slider_folder':
$folder = new RevSliderFolder();
$children = $this->get_val($data, 'children');
$folder_id = $this->get_val($data, 'id');
$return = $folder->add_slider_to_folder($children, $folder_id);
if($return == true){
$this->ajax_response_success(__('Slider Moved to Folder', 'revslider'));
}else{
$this->ajax_response_error(__('Failed to Move Slider Into Folder', 'revslider'));
}
break;
case 'update_slider_name':
case 'update_folder_name':
$slider_id = $this->get_val($data, 'id');
$new_title = $this->get_val($data, 'title');
$slider->init_by_id($slider_id, $new_title);
$return = $slider->update_title($new_title);
if($return != false){
$this->ajax_response_success(__('Title updated', 'revslider'), array('title' => $return));
}else{
$this->ajax_response_error(__('Failed to update Title', 'revslider'));
}
break;
case 'preview_slider':
$slider_id = $this->get_val($data, 'id');
$slider_data = $this->get_val($data, 'data');
$title = __('Slider Revolution Preview', 'revslider');
global $SR_GLOBALS;
$SR_GLOBALS['preview_mode'] = true;
if(intval($slider_id) > 0 && empty($slider_data)){
$slider->init_by_id($slider_id);
//check if an update is needed
if(version_compare($slider->get_param(array('settings', 'version')), get_option('revslider_update_version', '6.0.0'), '<')){
$upd = new RevSliderPluginUpdate();
$upd->upgrade_slider_to_latest($slider);
$slider->init_by_id($slider_id);
}
$content = '[rev_slider alias="' . esc_attr($slider->get_alias()) . '"][/rev_slider]';
}elseif(!empty($slider_data)){
$_slides = array();
$_static = array();
$slides = array();
$static_slide = array();
$_slider = array(
'id' => $slider_id,
'title' => 'Preview',
'alias' => 'preview',
'settings' => json_encode(array('version' => RS_REVISION)),
'params' => stripslashes($this->get_val($slider_data, 'slider'))
);
$slide_order = json_decode(stripslashes($this->get_val($slider_data, array('slide_order'))), true);
foreach($slider_data as $sk => $sd){
if(in_array($sk, array('slider', 'slide_order'), true)) continue;
if(strpos($sk, 'static_') !== false){
$_static = array(
'params' => stripslashes($this->get_val($sd, 'params')),
'layers' => stripslashes($this->get_val($sd, 'layers')),
);
}else{
$_slides[$sk] = array(
'id' => $sk,
'slider_id' => $slider_id,
'slide_order' => array_search($sk, $slide_order),
'params' => stripslashes($this->get_val($sd, 'params')),
'layers' => stripslashes($this->get_val($sd, 'layers')),
'settings' => array('version' => RS_REVISION)
);
}
}
$slider->set_slides($_slides);
$output = new RevSliderOutput();
$output->set_preview_mode(true);
$slider->init_by_data($_slider);
if($slider->is_stream() || $slider->is_posts()){
$slides = $slider->get_slides_for_output();
}else{
if(!empty($_slides)){
//reorder slides
usort($_slides, function($a, $b) {
return $a['slide_order'] - $b['slide_order'];
});
foreach($_slides as $_slide){
$slide = new RevSliderSlide();
$slide->init_by_data($_slide);
if($slide->get_param(array('publish', 'state'), 'published') === 'unpublished') continue;
$slides[] = $slide;
}
}
}
if(!empty($_static)){
$slide = new RevSliderSlide();
$slide->init_by_data($_static);
$static_slide = $slide;
}
$output->set_slider($slider);
$output->set_current_slides($slides);
$output->set_static_slide($static_slide);
ob_start();
$slider = $output->add_slider_to_stage($slider_id);
$content = ob_get_contents();
ob_clean();
ob_end_clean();
}
//get dimensions of slider
$size = array(
'width' => $slider->get_param(array('size', 'width'), array()),
'height' => $slider->get_param(array('size', 'height'), array()),
'custom' => $slider->get_param(array('size', 'custom'), array())
);
if(empty($size['width'])){
$size['width'] = array(
'd' => $this->get_val($this->global_settings, array('size', 'desktop'), '1240'),
'n' => $this->get_val($this->global_settings, array('size', 'notebook'), '1024'),
't' => $this->get_val($this->global_settings, array('size', 'tablet'), '778'),
'm' => $this->get_val($this->global_settings, array('size', 'mobile'), '480')
);
}
if(empty($size['height'])){
$size['height'] = array('d' => '868', 'n' => '768', 't' => '960', 'm' => '720');
}
if(extension_loaded('newrelic')){ //Ensure PHP agent is available
if(function_exists('newrelic_disable_autorum')){
newrelic_disable_autorum();
}
}
$rev_slider_front = new RevSliderFront(); //needed to be called, to load header properly
$admin = new RevSliderAdmin();
$post = $admin->create_fake_post($content, $title);
define('SHOW_CT_BUILDER', false); //fix for oxygen builder plugin to not remove the <html> tag and so on
ob_start();
include(RS_PLUGIN_PATH . 'public/views/revslider-page-template.php');
$html = ob_get_contents();
ob_clean();
ob_end_clean();
$return = array('html' => $html, 'size' => $size, 'layouttype' => $slider->get_param('layouttype', 'fullwidth'));
$return = apply_filters('revslider_preview_slider_addition', $return, $slider);
$this->ajax_response_data($return);
exit;
break;
case 'subscribe_to_newsletter':
$email = $this->get_val($data, 'email');
if(!empty($email)){
$return = ThemePunch_Newsletter::subscribe($email);
if($return !== false){
if(!isset($return['status']) || $return['status'] === 'error'){
$error = $this->get_val($return, 'message', __('Invalid Email', 'revslider'));
$this->ajax_response_error($error);
}else{
$this->ajax_response_success(__('Success! Please check your E-Mails to finish the subscription', 'revslider'), $return);
}
}
$this->ajax_response_error(__('Invalid Email/Could not connect to the Newsletter server', 'revslider'));
}
$this->ajax_response_error(__('No Email given', 'revslider'));
break;
case 'check_system':
//recheck the connection to themepunch server
$update = new RevSliderUpdate(RS_REVISION);
$update->force = true;
$update->_retrieve_version_info();
$system = $sr_admin->get_system_requirements();
$this->ajax_response_data(array('system' => $system));
break;
case 'load_module':
$module = $this->get_val($data, 'module', array('all'));
$module_uid = $this->get_val($data, 'module_uid', false);
$module_slider_id = $this->get_val($data, 'module_id', false);
$refresh_from_server = $this->get_val($data, 'refresh_from_server', false);
$get_static_slide = $this->_truefalse($this->get_val($data, 'static', false));
if($module_uid === false){
$module_uid = $module_slider_id;
}
$modules = $sr_admin->get_full_library($module, $module_uid, $refresh_from_server, $get_static_slide);
$this->ajax_response_data(array('modules' => $modules));
break;
case 'set_favorite':
$do = $this->get_val($data, 'do', 'add');
$type = $this->get_val($data, 'type', 'slider');
$id = esc_attr($this->get_val($data, 'id'));
$favorite = RevSliderGlobals::instance()->get('RevSliderFavorite');
$favorite->set_favorite($do, $type, $id);
$this->ajax_response_success(__('Favorite Changed', 'revslider'));
break;
case 'load_library_object':
$library = new RevSliderObjectLibrary();
$cover = false;
$id = $this->get_val($data, 'id');
$type = $this->get_val($data, 'type');
if($type == 'thumb'){
$thumb = $library->_get_object_thumb($id, 'thumb');
}elseif($type == 'video'){
$thumb = $library->_get_object_thumb($id, 'video_full', true);
$cover = $library->_get_object_thumb($id, 'cover', true);
}elseif($type == 'layers'){
$thumb = $library->_get_object_layers($id);
}else{
$thumb = $library->_get_object_thumb($id, 'orig', true);
if(isset($thumb['error']) && $thumb['error'] === false){
$url = $library->get_correct_size_url($id, $type);
if($url !== ''){
$thumb['url'] = $url;
}
}
}
if(isset($thumb['error']) && $thumb['error'] !== false){
$this->ajax_response_error(__('Object could not be loaded', 'revslider'));
}else{
if($type == 'layers'){
$return = array('layers' => $this->get_val($thumb, 'data'));
}else{
$return = array('url' => $this->get_val($thumb, 'url'));
}
if($cover !== false){
if(isset($cover['error']) && $cover['error'] !== false){
$this->ajax_response_error(__('Video cover could not be loaded', 'revslider'));
}
$return['cover'] = $this->get_val($cover, 'url');
}
$this->ajax_response_data($return);
}
break;
case 'create_slide':
$slider_id = $this->get_val($data, 'slider_id', false);
$amount = $this->get_val($data, 'amount', 1);
$amount = intval($amount);
$slide_ids = array();
if(intval($slider_id) > 0 && ($amount > 0 && $amount < 50)){
for ($i = 0; $i < $amount; $i++){
$slide_ids[] = $slide->create_slide($slider_id);
}
}
if(!empty($slide_ids)){
$this->ajax_response_data(array('slide_id' => $slide_ids));
}else{
$this->ajax_response_error(__('Could not create Slide', 'revslider'));
}
break;
case 'create_slider':
/**
* 1. create a blank Slider
* 2. create a blank Slide
* 3. create a blank Static Slide
**/
$slide_id = false;
$slider_id = $slider->create_blank_slider();
if($slider_id !== false){
$slide_id = $slide->create_slide($slider_id); //normal slide
$slide->create_slide($slider_id, '', true); //static slide
}
if($slide_id !== false){
$this->ajax_response_data(array('slide_id' => $slide_id, 'slider_id' => $slider_id));
}else{
$this->ajax_response_error(__('Could not create Slider', 'revslider'));
}
break;
case 'get_addon_list':
$addon = new RevSliderAddons();
$addons = $addon->get_addon_list();
update_option('rs-addons-counter', 0); //set the counter back to 0
$this->ajax_response_data(array('addons' => $addons));
break;
case 'get_layers_by_slide':
$slide_id = $this->get_val($data, 'slide_id');
$slide->init_by_id($slide_id);
$layers = $slide->get_layers();
$this->ajax_response_data(array('layers' => $layers));
break;
case 'activate_addon':
$handle = $this->get_val($data, 'addon');
$update = $this->get_val($data, 'update', false);
$addon = new RevSliderAddons();
$return = $addon->install_addon($handle, $update);
if($return === true){
$version = $addon->get_addon_version($handle);
//return needed files of the plugin somehow
$data = array();
$data = apply_filters('revslider_activate_addon', $data, $handle);
$this->ajax_response_data(array($handle => $data, 'version' => $version));
}else{
$error = ($return === false) ? __('AddOn could not be activated', 'revslider') : $return;
$this->ajax_response_error($error);
}
break;
case 'deactivate_addon':
$handle = $this->get_val($data, 'addon');
$addon = new RevSliderAddons();
$return = $addon->deactivate_addon($handle);
if($return){
//return needed files of the plugin somehow
$this->ajax_response_success(__('AddOn deactivated', 'revslider'));
}else{
$this->ajax_response_error(__('AddOn could not be deactivated', 'revslider'));
}
break;
case 'create_draft_page':
$response = array('open' => false, 'edit' => false);
$slider_ids = $this->get_val($data, 'slider_ids');
$modals = $this->get_val($data, 'modals', array());
$additions = $this->get_val($data, 'additions', array());
$page_id = $sr_admin->create_slider_page($slider_ids, $modals, $additions);
if($page_id > 0){
$response['open'] = get_permalink($page_id);
$response['edit'] = get_edit_post_link($page_id);
}
$this->ajax_response_data($response);
break;
case 'generate_attachment_metadata':
$this->generate_attachment_metadata();
$this->ajax_response_success('');
break;
case 'export_layer_group': //developer function only :)
$title = $this->get_val($data, 'title', $this->get_request_var('title'));
$videoid = intval($this->get_val($data, 'videoid', $this->get_request_var('videoid')));
$thumbid = intval($this->get_val($data, 'thumbid', $this->get_request_var('thumbid')));
$layers = $this->get_val($data, 'layers', $this->get_request_var('layers', '', false));
$export = new RevSliderSliderExport($title);
$url = $export->export_layer_group($videoid, $thumbid, $layers);
$this->ajax_response_data(array('url' => $url));
break;
case 'silent_slider_update':
$upd = new RevSliderPluginUpdate();
$return = $upd->upgrade_next_slider();
$this->ajax_response_data($return);
break;
case 'load_wordpress_image':
$id = $this->get_val($data, 'id', 0);
$type = $this->get_val($data, 'type', 'orig');
$img = wp_get_attachment_image_url($id, $type);
if(empty($img)){
$this->ajax_response_error(__('Image could not be loaded', 'revslider'));
}
$this->ajax_response_data(array('url' => $img));
break;
case 'load_library_image':
$images = (!is_array($data)) ? (array)$data : $data;
$images = RevSliderFunctions::esc_attr_deep($images);
$images = RevSliderAdmin::esc_js_deep($images);
$img_data = array();
if(!empty($images)){
$templates = new RevSliderTemplate();
$obj = new RevSliderObjectLibrary();
foreach($images as $image){
$type = $this->get_val($image, 'librarytype');
$img = $this->get_val($image, 'id');
$ind = $this->get_val($image, 'ind');
$mt = $this->get_val($image, 'mediatype');
switch($type){
case 'moduletemplates':
case 'moduletemplateslides':
$img = $templates->_check_file_path($img, true);
$img_data[] = array(
'ind' => $ind,
'url' => $img,
'mediatype' => $mt
);
break;
case 'image':
case 'images':
case 'layers':
case 'objects':
$get = ($mt === 'video') ? 'video_thumb' : 'thumb';
$img = $obj->_get_object_thumb($img, $get, true);
if($this->get_val($img, 'error', false) === false){
$img_data[] = array(
'ind' => $ind,
'url' => $this->get_val($img, 'url'),
'mediatype' => $mt
);
}
break;
case 'videos':
$get = ($mt === 'img') ? 'video' : 'video_thumb';
$img = $obj->_get_object_thumb($img, $get, true);
if($this->get_val($img, 'error', false) === false){
$img_data[] = array(
'ind' => $ind,
'url' => $this->get_val($img, 'url'),
'mediatype' => $mt
);
}
break;
}
}
}
$this->ajax_response_data(array('data' => $img_data));
break;
case 'create_customlibrary_tags':
$obj = new RevSliderObjectLibrary();
$name = $this->get_val($data, 'name', '');
$type = $this->get_val($data, 'type', '');
$return = $obj->create_custom_tag($name, $type);
if(!is_array($return)){
$this->ajax_response_error($return);
}else{
$this->ajax_response_data($return);
}
break;
case 'edit_customlibrary_tags':
$obj = new RevSliderObjectLibrary();
$id = $this->get_val($data, 'id', '');
$name = $this->get_val($data, 'name', '');
$type = $this->get_val($data, 'type', '');
$return = $obj->edit_custom_tag($id, $name, $type);
if($return !== true){
$this->ajax_response_error($return);
}else{
$this->ajax_response_success(__('Tag successfully saved', 'revslider'));
}
break;
case 'delete_customlibrary_tags':
$obj = new RevSliderObjectLibrary();
$id = $this->get_val($data, 'id', '');
$type = $this->get_val($data, 'type', '');
$return = $obj->delete_custom_tag($id, $type);
if($return !== true){
$this->ajax_response_error($return);
}else{
$this->ajax_response_success(__('Tag successfully deleted', 'revslider'));
}
break;
case 'upload_customlibrary_item':
$obj = new RevSliderObjectLibrary();
$return = $obj->upload_custom_item($data);
if(!is_array($return)){
$this->ajax_response_error($return);
}else{
$return['tags'] = $this->get_val($obj->get_custom_tags(), 'svgcustom', array());
$this->ajax_response_data($return);
}
break;
case 'edit_customlibrary_item':
$obj = new RevSliderObjectLibrary();
$id = $this->get_val($data, 'id', '');
$type = $this->get_val($data, 'type', '');
$name = $this->get_val($data, 'name', '');
$tags = $this->get_val($data, 'tags', '');
$return = $obj->edit_custom_item($id, $type, $name, $tags);
if($return !== true){
$this->ajax_response_error(__('Item could not be changed', 'revslider'));
}else{
$this->ajax_response_success(__('Item successfully changed', 'revslider'));
}
break;
case 'delete_customlibrary_item':
$obj = new RevSliderObjectLibrary();
$id = $this->get_val($data, 'id', '');
$type = $this->get_val($data, 'type', '');
$return = $obj->delete_custom_item($id, $type);
if($return !== true){
$this->ajax_response_error(__('Item could not be deleted', 'revslider'));
}else{
$this->ajax_response_success(__('Item successfully deleted', 'revslider'));
}
break;
case 'get_help_directory':
include_once(RS_PLUGIN_PATH . 'admin/includes/help.class.php');
if(class_exists('RevSliderHelp')){
$help_data = RevSliderHelp::getIndex();
$this->ajax_response_data(array('data' => $help_data));
}else{
$this->ajax_response_error(__('Error loading RevSliderHelp', 'revslider'));
}
break;
case 'get_tooltips':
include_once(RS_PLUGIN_PATH . 'admin/includes/tooltips.class.php');
if(class_exists('RevSliderTooltips')){
$tooltips = RevSliderTooltips::getTooltips();
$this->ajax_response_data(array('data' => $tooltips));
}else{
$this->ajax_response_error(__('Error loading RevSliderTooltips', 'revslider'));
}
break;
case 'set_tooltip_preference':
update_option('revslider_hide_tooltips', true);
$this->ajax_response_success(__('Preference Updated', 'revslider'));
break;
case 'save_color_preset':
$presets = $this->get_val($data, 'presets', array());
$color_presets = RSColorpicker::save_color_presets($presets);
$this->ajax_response_data(array('presets' => $color_presets));
break;
case 'get_facebook_photosets':
if(empty($data['app_id'])){
$this->ajax_response_error(__('Facebook API error: Empty Access Token', 'revslider'));
}
if(empty($data['page_id'])){
$this->ajax_response_error(__('Facebook API error: Empty Page ID', 'revslider'));
}
$facebook = RevSliderGlobals::instance()->get('RevSliderFacebook');
$return = $facebook->get_photo_set_photos_options($data['app_id'], $data['page_id']);
if(empty($return)){
$error = __('Could not fetch Facebook albums', 'revslider');
$this->ajax_response_error($error);
}
if(!empty($return['error'])){
$this->ajax_response_error(__('Facebook API error: ', 'revslider') . $return['message']);
}
$this->ajax_response_success(__('Successfully fetched Facebook albums', 'revslider'), array('html' => implode(' ', $return)));
break;
case 'get_flickr_photosets':
$error = __('Could not fetch flickr album', 'revslider');
if(!empty($data['url']) && !empty($data['key'])){
$flickr = new RevSliderFlickr($data['key']);
$user_id = $flickr->get_user_from_url($data['url']);
$return = $flickr->get_photo_sets($user_id, $data['count'], $data['set']);
if(!empty($return)){
$this->ajax_response_success(__('Successfully fetched flickr albums', 'revslider'), array('data' => array('html' => implode(' ', $return))));
}else{
$error = __('Could not fetch flickr albums', 'revslider');
}
}else{
if(empty($data['url']) && empty($data['key'])){
$this->ajax_response_success(__('Cleared Albums', 'revslider'), array('html' => implode(' ', $return)));
}elseif(empty($data['url'])){
$error = __('No User URL - Could not fetch flickr albums', 'revslider');
}else{
$error = __('No API KEY - Could not fetch flickr albums', 'revslider');
}
}
$this->ajax_response_error($error);
break;
case 'get_youtube_playlists':
if(!empty($data['id'])){
$youtube = new RevSliderYoutube(trim($data['api']), trim($data['id']));
$return = $youtube->get_playlist_options($data['playlist']);
$this->ajax_response_success(__('Successfully fetched YouTube playlists', 'revslider'), array('data' => array('html' => implode(' ', $return))));
}else{
$this->ajax_response_error(__('Could not fetch YouTube playlists', 'revslider'));
}
break;
case 'fix_database_issues':
update_option('revslider_table_version', '1.0.0');
RevSliderFront::create_tables(true);
$this->ajax_response_success(__('Slider Revolution database structure was updated', 'revslider'));
break;
case 'clear_internal_cache':
$cache = RevSliderGlobals::instance()->get('RevSliderCache');
$cache->clear_all_transients();
$this->ajax_response_success(__('Slider Revolution internal cache was fully cleared', 'revslider'));
break;
case 'get_same_aspect_ratio':
$images = $this->get_val($data, 'images', array());
$return = $sr_admin->get_same_aspect_ratio_images($images);
$this->ajax_response_data(array('images' => $return));
break;
case 'get_addons_sizes':
$addons = $this->get_val($data, 'addons', array());
$sizes = $sr_admin->get_addon_sizes($addons);
$this->ajax_response_data(array('addons' => $sizes));
break;
case 'save_custom_templates_slidetransitions':
$return = $this->save_custom_slidetransitions($data);
if ($return === false || intval($return) === 0) {
$this->ajax_response_success(__('Slide transition template could not be saved', 'revslider'));
} else {
$this->ajax_response_success(__('Slide transition template saved', 'revslider'), array('data' => array('id' => $return)));
}
break;
case 'delete_custom_templates_slidetransitions':
if ($this->delete_custom_slidetransitions($data)) {
$this->ajax_response_success(__('Slide transition template deleted', 'revslider'));
} else {
$this->ajax_response_error(__('Slide transition template could not be deleted', 'revslider'));
}
break;
case 'create_image_from_raw':
$mpeg = $this->get_val($data, 'mpeg', '');
$slideid = $this->get_val($data, 'slideid', 0);
$bitmap = $this->get_val($data, 'bitmap', '');
$mpeg = basename($mpeg);
if(empty($mpeg)) {
$this->ajax_response_error(__('mpeg not set', 'revslider'));
}
$return = $this->import_media_raw($mpeg, $slideid, $bitmap);
if(!is_array($return) && ($return === false || intval($return) === 0)){
if ($return === false) {
$this->ajax_response_error(__('Image could not be created', 'revslider'));
} else {
$this->ajax_response_error($return);
}
}
if(isset($return['id'])){
$return['path'] = wp_get_attachment_url($return['id']);
}
$this->ajax_response_data($return);
break;
default:
$return = ''; //''is not allowed to be added directly in apply_filters(), so its needed like this
$return = apply_filters('revslider_do_ajax', $return, $action, $data);
if($return){
if(is_array($return)){
if(isset($return['error'])){
$this->ajax_response_error($return['error']);
}
if(isset($return['message'])){
$this->ajax_response_data(array('message' => $return['message'], 'data' => $return['data']));
}
$this->ajax_response_data(array('data' => $return['data']));
}else{
$this->ajax_response_success($return);
}
}
break;
}
}catch(Exception $e){
$message = $e->getMessage();
if(in_array($action, array('preview_slide', 'preview_slider'))){
echo $message;
wp_die();
}
$this->ajax_response_error($message);
}
//it's an ajax action, so exit
$this->ajax_response_error(__('No response on action', 'revslider'));
wp_die();
}
/**
* Ajax handling for frontend, no privileges here
*/
public function do_front_ajax_action(){
global $SR_GLOBALS;
$error = false;
$action = $this->get_request_var('client_action', false);
$nonce = $this->get_request_var('nonce');
$nonce = (empty($nonce)) ? $this->get_request_var('rs-nonce') : $nonce;
//if($is_verified){
switch($action){
case 'get_full_slider_object':
$this->get_full_slider_object();
break;
case 'get_stream_data':
$this->get_stream_data();
break;
case 'get_modal_data':
$this->get_slider_modal_data();
break;
/**
* OLD CALLS
**/
case 'get_transitions':
$transitions = $this->get_base_transitions();
$this->ajax_response_data(array('transitions' => $transitions));
break;
case 'get_slider_html':
$alias = $this->get_post_var('alias', '');
$usage = $this->get_post_var('usage', '');
$modal = $this->get_post_var('modal', '');
$layout = $this->get_post_var('layout', '');
$offset = $this->get_post_var('offset', '');
$id = intval($this->get_post_var('id', 0));
//check if $alias exists in database, transform it to id
if($alias !== ''){
$sr = new RevSliderSlider();
$id = intval($sr->alias_exists($alias, true));
}
if($id > 0){
ob_start();
global $SR_GLOBALS;
if($SR_GLOBALS['front_version'] === 6){
$slider = new RevSliderOutput();
$slider->set_ajax_loaded();
$slider_class = $slider->add_slider_to_stage($id, $usage, $layout, $offset, $modal);
}else{
$slider = new RevSlider7Output();
$slider->set_ajax_loaded();
$slider_class = $slider->add_slider_to_stage($id);
}
$html = ob_get_contents();
ob_clean();
ob_end_clean();
$result = !empty($slider_class) && $html !== '';
if(!$result){
$error = __('Slider not found', 'revslider');
}else{
if($html !== false){
$htmlid = $slider->get_html_id();
$return = array('data' => $html, 'waiting' => array(), 'toload' => array(), 'htmlid' => $htmlid);
$return = apply_filters('revslider_get_slider_html_addition', $return, $slider);
$this->ajax_response_data($return);
}else{
$error = __('Slider not found', 'revslider');
}
}
}else{
$error = __('No Data Received', 'revslider');
}
break;
}
if($error !== false){
$show_error = ($error !== true) ? __('Loading Error', 'revslider') : __('Loading Error: ', 'revslider') . $error;
$this->ajax_response_error($show_error, false);
}
exit;
}
public function truncate_v7_tables(){
$this->check_nonce();
$this->truncate_v7();
$this->ajax_response_success(__('V7 Tables Cleared', 'revslider'));
}
public function save_slider($data = false){
global $SR_GLOBALS;
$this->check_nonce();
$slider = new RevSliderSlider();
$slide = new RevSliderSlide();
$data = $this->get_data($data);
$slider_id = $this->get_val($data, 'id');
$slides_data = $this->get_val($data, 'slides');
$slides_data = $this->json_decode_slashes($slides_data);
if($this->_truefalse($this->get_val($data, 'fromSR6')) === true){
$SR_GLOBALS['use_table_version'] = 7;
//$save = $this->get_val($data, 'save', 'database');
$title = $this->get_val($data, 'title');
$alias = $this->get_val($data, 'alias');
$slider_data = $this->get_val($data, 'settings');
$slider_id = $slider->save_slider_v7($slider_id, $slider_data, $title, $alias);
//probably kill all v7 slides here first
if(!empty($slides_data)){
foreach($slides_data as $id => $_slide){
$slide->save_slide_v7($id, $_slide, $slider_id);
}
}
$SR_GLOBALS['use_table_version'] = 6;
}else{
$slider_id = $slider->save_slider($slider_id, $data);
if(!empty($slides_data)){
foreach($slides_data as $id => $_slide){
$slide->save_slide($id, $_slide, $slider_id);
}
}
}
$cache = RevSliderGlobals::instance()->get('RevSliderCache');
$cache->clear_transients_by_slider($slider_id);
$this->ajax_response_success(__('Slider Saved as V7 Slider', 'revslider'));
}
public function set_v7_migration_failed($data = false){
global $SR_GLOBALS;
$this->check_nonce();
$data = $this->get_data($data);
$slider_id = $this->get_val($data, 'id');
$error_text = $this->get_val($data, 'text');
$this->update_v7_migration_failed_map($slider_id, $error_text);
$this->ajax_response_success(__('Saved', 'revslider'));
}
/**
* central function to either fill the $_data by REST API or by ajax requests
**/
public function get_data($data = false){
if($data instanceof WP_REST_Request){
$_data = $data->get_params('GET');
$this->set_rest_call();
}else{
$_data = $this->get_request_var('data', '', false);
$_data = ($_data == '') ? array() : $_data;
}
$this->set_use_db_version();
return $_data;
}
public function set_use_db_version(){
global $SR_GLOBALS;
$SR_GLOBALS['use_table_version'] = get_sr_current_engine();
}
public function get_stream_data($data = false){
$slider = new RevSliderSlider();
$slide = new RevSliderSlide();
$data = $this->get_data($data);
$slider_id = explode(',', $this->get_val($data, 'id'));
$lang = $this->get_val($data, 'srlang', 'all');
if(count($slider_id) > 1){
$slider->set_gallery_ids($slider_id);
$slider->set_param('sourcetype', 'specific_posts');
$slider->set_param(array('source'), array());
$slider->set_param(array('source', 'type'), 'specific_posts');
}else{
$slider_id = $slider_id[0];
$slider->init_by_id($slider_id, false);
if($slider->inited === false){ //try to get v6|v7 data then
global $SR_GLOBALS;
$SR_GLOBALS['use_table_version'] = ($SR_GLOBALS['use_table_version'] === 7) ? 6 : 7;
$slider->init_by_id($slider_id, false);
}
if($slider->inited === false){
$this->ajax_response_error(__('Slider could not be loaded', 'revslider'));
}
}
//set language if given
if($lang !== 'all'){
$slider->change_language($lang);
$SR_wpml = RevSliderGlobals::instance()->get('RevSliderWpml');
$SR_wpml->change_lang($lang, false, array(), $slider);
}
$stream_data = $slider->get_stream_data();
return $this->ajax_response_data(array('data' => $stream_data));
}
public function get_slider_modal_data($data = false){
global $SR_GLOBALS;
$slider = new RevSliderSlider();
$data = $this->get_data($data);
if($this->REST === true){
if(isset($data['slider'])){
if(intval($data['slider']) === 0){
$data['alias'] = $data['slider'];
}else{
$data['id'] = $data['slider'];
}
}
}
$slider_id = RevSliderFunctions::esc_attr_deep($this->get_val($data, 'id'));
$slider_alias = RevSliderFunctions::esc_attr_deep($this->get_val($data, 'alias', ''));
$obj = array(
'id' => '',
'bg' => '',
'sp' => '',
'addons' => array(),
'v6v7ids' => array(),
);
//allow a fallback to the v6 data here? I guess yes
if($SR_GLOBALS['use_table_version'] === 7){
if($slider_alias !== ''){
if(!$slider->check_alias($slider_alias)) $SR_GLOBALS['use_table_version'] = 6;
}else{
if(!$slider->check_slider_id($slider_id)) $SR_GLOBALS['use_table_version'] = 6;
}
}
if($slider_alias !== ''){
$slider->init_by_alias($slider_alias);
$slider_id = $slider->get_id();
}else{
$slider->init_by_id($slider_id);
}
if($SR_GLOBALS['use_table_version'] === 7){
if($slider->inited === false) $this->ajax_response_error(__('V7 Slider could not inited', 'revslider'));
if($slider->get_param(array('modal', 'cover'), true) === true){
$obj['bg'] = $slider->get_param(array('modal', 'bg'), 'rgba(0,0,0,0.5)');
$obj['sp'] = $slider->get_param(array('modal', 'sp'), 1);
}
}else{
if($slider->inited === false) $this->ajax_response_error(__('Modal data could not be loaded', 'revslider'));
if($slider->get_param(array('modal', 'cover'), true) === true){
$obj['bg'] = $slider->get_param(array('modal', 'coverColor'), 'rgba(0,0,0,0.5)');
$obj['sp'] = $slider->get_param(array('modal', 'coverSpeed'), 1);
}
}
$obj['id'] = $slider_id;
$obj['v6v7ids'] = $this->get_v7_slider_map($slider_id);
return $this->ajax_response_data($obj);
}
public function get_full_slider_object($data = false, $modify = true){
global $SR_GLOBALS;
$slider = new RevSliderSlider();
$slide = new RevSliderSlide();
$data = $this->get_data($data);
if($this->REST === true){
if(isset($data['slider'])){
if(intval($data['slider']) === 0){
$data['alias'] = $data['slider'];
}else{
$data['id'] = 'slider-'.$data['slider'];
}
}
}
$slide_id = RevSliderFunctions::esc_attr_deep($this->get_val($data, 'id'));
$slider_alias = RevSliderFunctions::esc_attr_deep($this->get_val($data, 'alias', ''));
$slide_ids = RevSliderFunctions::esc_attr_deep($this->get_val($data, 'slideid', array()));
$raw = RevSliderFunctions::esc_attr_deep($this->get_val($data, 'raw', false));
if($SR_GLOBALS['use_table_version'] === 7){
if($slider_alias !== ''){
if(!$slider->check_alias($slider_alias)) $SR_GLOBALS['use_table_version'] = 6;
}elseif(strpos($slide_id, 'slider-') !== false){
$slider_id = str_replace('slider-', '', $slide_id);
if(!$slider->check_slider_id($slider_id)) $SR_GLOBALS['use_table_version'] = 6;
}
}
if($SR_GLOBALS['use_table_version'] !== 7){
if($slider_alias !== ''){
$slider->init_by_alias($slider_alias);
$slider_id = $slider->get_id();
}else{
if(strpos($slide_id, 'slider-') !== false){
$slider_id = str_replace('slider-', '', $slide_id);
}else{
$slide->init_by_id($slide_id);
$slider_id = $slide->get_slider_id();
if(intval($slider_id) == 0){
$this->ajax_response_error(__('Slider could not be loaded', 'revslider'));
}
}
$slider->init_by_id($slider_id);
}
if($slider->inited === false) $this->ajax_response_error(__('Slider could not be loaded', 'revslider'));
}else{
if($slider_alias !== ''){
$slider->init_by_alias($slider_alias);
$slider_id = $slider->get_id();
}else{
if(strpos($slide_id, 'slider-') !== false){
$slider_id = str_replace('slider-', '', $slide_id);
}else{
$slide->init_by_id($slide_id);
$slider_id = $slide->get_slider_id();
if(intval($slider_id) == 0){
$this->ajax_response_error(__('V7 Slider could not be found', 'revslider'));
}
}
$slider->init_by_id($slider_id);
}
if($slider->inited === false) $this->ajax_response_error(__('V7 Slider could not inited', 'revslider'));
}
$JSON = $slider->get_full_slider_JSON(false, true, $slide_ids, array(), $raw, $modify);
return $this->ajax_response_data(apply_filters('sr_get_full_slider_object', $JSON, $slider));
}
/**
* echo json ajax response as error
* @before: RevSliderBaseAdmin::ajaxResponseError();
*/
public function ajax_response_error($message, $data = null){
$this->ajax_response(false, $message, $data);
}
/**
* echo ajax success response with redirect instructions
* @before: RevSliderBaseAdmin::ajaxResponseSuccessRedirect();
*/
public function ajax_response_redirect($message, $url){
$data = array('is_redirect' => true, 'redirect_url' => $url);
$this->ajax_response(true, $message, $data);
}
/**
* echo json ajax response, without message, only data
* @before: RevSliderBaseAdmin::ajaxResponseData()
*/
public function ajax_response_data($data){
$data = (gettype($data) == 'string') ? array('data' => $data) : $data;
return $this->ajax_response(true, '', $data);
}
/**
* echo ajax success response
* @before: RevSliderBaseAdmin::ajaxResponseSuccess();
*/
public function ajax_response_success($message, $data = null){
$this->ajax_response(true, $message, $data);
}
/**
* echo json ajax response
* before: RevSliderBaseAdmin::ajaxResponse
* @param bool $success
* @param string $message
* @param mixed $data
*/
private function ajax_response($success, $message, $data = null){
$response = array(
'success' => $success,
'message' => $message,
);
if(!empty($data)){
if(gettype($data) == 'string'){
$data = array('data' => $data);
}
$response = array_merge($response, $data);
}
if($this->is_rest_call()){
echo json_encode($response);
exit;
return new WP_REST_Response($response);
}else{
echo json_encode($response);
wp_die();
}
}
}
?>