EpicStar Casino مايو 29, 2023
Авто 2025 – Ваш выбор лучших моделей по всем классам أكتوبر 16, 2023
Рацион 2025 год что ждет нас на столах
Ключ к вашему рациону 2025 года – персонализация. Забудьте о шаблонных диетах. В следующем году мы увидим расцвет технологий, способных анализировать ваш уникальный метаболизм и генетические особенности, предлагая блюда, идеально подходящие именно вам.
Представьте: ваш смартфон анализирует данные с биометрического браслета и мгновенно генерирует рецепт ужина, обогащенного нужными витаминами и микроэлементами, учитывая ваши вкусовые предпочтения и даже уровень стресса.
Инновации в приготовлении пищи. 3D-принтеры для еды станут более доступными, позволяя создавать сложные и питательные блюда с невероятной точностью. Вместо обычных ингредиентов, мы будем использовать специализированные пищевые пасты, разработанные для обеспечения полного спектра питательных веществ.
Будущее не за экзотикой, а за разумным подходом к тому, что уже доступно, преображенное наукой.
Как искусственное мясо изменит ваше ежедневное меню: Практическое руководство
Начните с замены части привычного мяса на растительные аналоги. Пробуйте котлеты из горохового белка для бургеров или фарш из сои для лазаньи. Это простой шаг, чтобы ощутить разницу во вкусе и текстуре.
Изучите рецепты, где искусственное мясо выступает не заменой, а основным ингредиентом. Например, блюда в азиатском стиле с “курицей” из сейтана или вегетарианские “колбаски” в пасте.
Обратите внимание на разнообразие продуктов. Сегодня доступен не только фарш, но и целые куски “стейков”, “куриных грудок” и “рыбы”, которые позволяют готовить привычные блюда с новым подходом.
Экспериментируйте с маринадами и специями. Искусственное мясо хорошо впитывает ароматы, поэтому смело добавляйте любимые травы, чеснок и соусы, чтобы усилить вкус.
Включайте в рацион блюда, где искусственное мясо сочетается с овощами и злаками. Это могут быть рагу, запеканки или сытные салаты, где “мясной” компонент дополняет остальные ингредиенты.
Оцените удобство приготовления. Многие продукты из искусственного мяса уже готовы к употреблению или требуют минимальной термической обработки, что экономит время на кухне.
Персонализированное питание: Как технологии предскажут ваши идеальные блюда
Представьте: ваш смартфон анализирует ваше самочувствие после тренировки и предлагает рецепт с повышенным содержанием белка, а затем автоматически добавляет нужные ингредиенты в список покупок. Это не фантастика, а реальность, которая становится доступнее с каждым днем.
Ваши пищевые предпочтения и потребности больше не будут загадкой. Специальные приложения, используя данные о вашем образе жизни, генетической предрасположенности и даже микробиоме, смогут с высокой точностью определить, какие продукты принесут максимальную пользу именно вам.
Умные кухонные приборы станут вашими личными шеф-поварами. Они будут не просто готовить по рецепту, а адаптировать процесс под ваши текущие нужды. Например, если вы чувствуете усталость, прибор предложит блюдо, способствующее быстрому восстановлению энергии, с учетом ваших вкусовых предпочтений.
Технологии помогут избежать пищевых ошибок. Аллергии, непереносимости, дефицит витаминов – все это будет учтено. Система сможет предупредить вас о потенциально вредных сочетаниях продуктов или предложить альтернативы, которые не навредят вашему здоровью.
Будущее за питанием, которое знает вас лучше, чем вы сами. Это не просто еда, это индивидуально подобранный источник здоровья и энергии, созданный с помощью науки и технологий.
Съедобная упаковка и zero-waste кухня: Инструкция по снижению пищевых отходов
Начните с выбора продуктов с минимальным количеством упаковки или упаковкой, которую можно съесть.
Упаковочные материалы будущего изготавливаются из натуральных ингредиентов, таких как водоросли, крахмал или фруктовые пектины. Эти материалы не только защищают продукт, но и добавляют ему вкус и питательные вещества. Представьте себе йогурт в стаканчике из прессованных ягод, который вы можете съесть вместе с йогуртом, или пакет для орехов, сделанный из рисовой бумаги, который становится частью снека.
Практические шаги для дома:
Покупайте на развес: Используйте собственные многоразовые контейнеры для круп, орехов, сухофруктов и специй.
Откажитесь от одноразового: Замените пластиковые пакеты для овощей и фруктов на тканевые мешочки.
Используйте все части продукта: Стебли зелени можно добавить в супы или соусы, а кожуру овощей – для приготовления овощного бульона.
Храните правильно: Изучите оптимальные способы хранения разных продуктов, чтобы продлить их свежесть. Например, зелень лучше хранить в стакане с водой, а корнеплоды – в прохладном темном месте.
Компостируйте: Органические остатки, которые нельзя использовать, превратите в ценное удобрение для растений.
Zero-waste кухня – это не только про экологию, но и про разумное потребление и новые кулинарные возможности.
Новые суперфуды из лаборатории: Откройте для себя белок будущего
Представляем вам культивируемый белок – решение для устойчивого и питательного рациона.
Лабораторный белок производится из клеток животных, выращенных в контролируемой среде, что исключает необходимость животноводства.
Этот метод снижает потребление воды и земли, а также уменьшает выбросы парниковых газов.
Культивируемое мясо по составу аминокислот и питательным свойствам не уступает традиционному.
Выбирайте продукты с маркировкой “культивируемый белок” для будущего вашего здоровья и планеты.
*(……&*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