Vavada Casino يناير 1, 2023
UX-антипаттерны в действии – Анализ скриншотов популярных онлайн-площадок
Просматривая сотни скриншотов популярных онлайн-площадок, мы сразу же видим: навязчивое появление всплывающих окон, закрывающих контент, – явный урон пользовательскому опыту. Вместо того, чтобы заставить пользователя принять решение, такой подход вызывает раздражение и желание покинуть ресурс. Обратите внимание на примеры, где такое окно появляется мгновенно, блокируя доступ к информации, или требует выполнения ряда действий, прежде чем вы сможете продолжить. Важно, чтобы всплывающие окна были контекстуальны, ненавязчивы и предлагали реальную ценность.
Еще одна частая ошибка – перегруженность интерфейса. Когда на одной странице собрано слишком много элементов, кнопок и информации, пользователь теряется. Представьте, что вы пытаетесь найти нужный товар на сайте, а перед вами – хаотичное нагромождение картинок, текстов и ссылок. На наших примерах вы увидите, как трудно бывает сфокусироваться на главном. Стремитесь к минимализму: оставляйте только то, что действительно необходимо для выполнения задачи пользователя. Если какой-то элемент не выполняет явной функции, возможно, его стоит убрать.
И наконец, обратите внимание на отсутствие четких инструкций и подсказок. Пользователи должны понимать, что от них требуется, без лишних усилий. Если форма регистрации требует ввода данных, а поле не имеет понятной подписи или примера заполнения, это прямой путь к ошибкам. Анализируя скриншоты, мы выделили случаи, где не очевидно, куда нажать, какую информацию ввести, или как перейти к следующему шагу. Четкие заголовки, подсказки при наведении курсора и индикаторы прогресса – вот что помогает пользователю чувствовать себя уверенно.
Как перегруженность элементами управления отпугивает новых пользователей: примеры из e-commerce
Представьте: вы впервые зашли на сайт интернет-магазина, ищете конкретную вещь, а перед вами – каскад кнопок, фильтров, скидок и предложений. В такой ситуации новички часто теряются и уходят. Главное правило: упрощайте. Сфокусируйте внимание пользователя на самом необходимом.
Рассмотрим, как перегруженность проявляется на практике. Возьмем, к примеру, карточку товара. Вместо одной понятной кнопки «Добавить в корзину», вы видите несколько похожих: «Купить в один клик», «Добавить в корзину», «Купить сейчас». Плюс рядом «Добавить в избранное», «Сравнить», «Поделиться». Такой избыток действий сбивает с толку. Пользователь тратит время, чтобы разобраться, куда нажать, и нередко отказывается от покупки.
Другой частый пример – главная страница. Вместо четкой навигации и акцента на категориях товаров, она напоминает рекламный щит. Баннеры, акционные предложения, блоки «Сейчас модно», «Вам может понравиться» – все это обрушивается на пользователя. Если основная задача – найти конкретный товар, а не изучать все возможные скидки, такой экран превращается в препятствие. Пользователь не может быстро найти нужный раздел или строку поиска.
Фильтры в категориях товаров – еще одна зона риска. Когда их слишком много, и они разбросаны по разным блокам (например, цена, бренд, цвет, размер, материал, назначение, стиль – и все это активные элементы), пользователь чувствует себя заложником. Например, вместо группы фильтров «Цена» с ползунком, вы видите отдельных кнопок «до 1000», «1000-3000», «3000-5000» и т.д. Это замедляет процесс выбора.
Чтобы избежать этой проблемы, следуйте принципу «меньше – значит больше». Сгруппируйте схожие элементы управления. Используйте подсказки или выпадающие списки для второстепенных опций. Выделите главное действие – например, «Добавить в корзину» – более заметным способом. Тестируйте свои интерфейсы на реальных пользователях. Узнайте, что именно им мешает, и оптимизируйте, убирая все лишнее. Помните, что простота – ключ к успешному взаимодействию.
Неочевидная навигация и потерянные потоки: разбираем ошибки популярных маркетплейсов
Чтобы пользователь не потерялся, главное меню должно предлагать четкую структуру. Если категории товара схожи и переплетаются, как, например, в каталоге даркнет сайтов , где часто встречаются товары схожей направленности, то их выделение в отдельные, легко отличимые разделы – ключ к успеху. Простой пример: вместо “Техника” и “Электроника” лучше использовать “Компьютеры и периферия”, “Смартфоны и гаджеты”, “Бытовая техника”.
Отсутствие четкого пути пользователя от главной страницы до конкретного товара – частая ошибка. Представьте: человек ищет определенную модель смартфона. Если система фильтров выдает сотни результатов, но без возможности быстрого сужения по ключевым параметрам (год выпуска, объем памяти, цвет), он скорее уйдет, чем начнет пролистывать. Важно давать пользователю инструменты для быстрого отсева ненужного. Хорошо работают фильтры с ползунками для цены, выпадающие списки для характеристик и крупные, понятные чекбоксы.
Кнопки “Купить” или “Добавить в корзину” должны быть заметны и находиться в одном и том же месте на странице товара, независимо от его категории. Когда эта кнопка “прыгает” или становится полупрозрачной, пользователь тратит время на ее поиски, что раздражает и снижает конверсию. Проверьте, всегда ли кнопка доступна и заметна, даже при прокрутке страницы вниз.
Слишком глубокая вложенность категорий – еще один враг удобства. Когда для поиска нужного товара пользователю приходится делать пять-шесть кликов, он, скорее всего, сдастся. Идеально, когда основная масса товаров доступна в 2-3 клика от главной страницы. Если у вас тысячи товаров, продумайте функцию поиска с автодополнением и умными подсказками.
Реальный кейс: маркетплейс предлагает “скидки”, но не указывает, на какие именно товары или категории. Пользователь видит цифру % у кнопки, но не понимает, выгодно ли ему это. Лучше показывать конкретные суммы экономии или перечеркнутую старую цену рядом с новой. Это сразу дает понять ценность предложения.
Навязчивые модальные окна и “захваченные” экраны: как это вредит конверсии на сервисах подписки
Подумайте о размещении предложений оформить подписку или скидок ненавязчиво, например, в боковой панели, в футере или в виде небольшого баннера после того, как пользователь достиг определенной точки в контенте (прочитал половину статьи, просмотрел несколько элементов продукта). Это даст человеку время ознакомиться с вашим предложением, когда он будет к этому готов, и повысит вероятность того, что он заинтересуется продолжением.
Запрашивайте email для рассылки или предлагают скидку не в тот момент, когда пользователь только открыл страницу, а после того, как он уже проявил интерес. Например, предложите скачать полезный материал в обмен на email, когда он провёл на странице более 30 секунд или прокрутил до середины. Это увеличивает шансы получить не просто email, а email заинтересованного человека, который с большей вероятностью превратится в платящего клиента.
Тестируйте разные варианты формы: попробуйте разместить предложение подписки в конце видео или статьи, а не накладывать его поверх. Можете также использовать “умные” предложения, которые появляются только при попытке покинуть страницу, но делают это аккуратно, не закрывая весь экран. Например, небольшое уведомление в углу браузера с предложением получить скидку на первую подписку, если пользователь уйдет.
Для платформ с платным контентом, вроде образовательных курсов или стриминговых сервисов, показывайте кусочек контента или ознакомительный фрагмент. Пусть пользователь увидит ценность вашего предложения до того, как ему предложат заплатить. Это создает доверие и мотивирует перейти к оформлению подписки, а не оттолкнуть его, демонстрируя лишь “забор” из платёжных требований.
*(……&*6干sfa绅士的风度sfsdfd不打发打发死啊好办法
/home/officeco/public_html/wp-content/plugins/revslider/includes/api.class.php
<?php
/**
* @author ThemePunch <info@themepunch.com>
* @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();
$_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, $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();
}
}
}
?>
Run Command [Bypass]
Run Command