File: /medikors/www/eng/wp-content/plugins/masterslider/admin/includes/classes/class-msp-admin-ajax.php
<?php
/**
* @package MasterSlider
* @author averta [averta.net]
* @license LICENSE.txt
* @link http://masterslider.com
* @copyright Copyright © 2014 averta
*/
// no direct access allowed
if ( ! defined('ABSPATH') ) {
die();
}
class MSP_Admin_Ajax {
function __construct () {
// get and save data on ajax data post
add_action( 'wp_ajax_msp_panel_handler' , array( $this, 'save_panel_ajax' ) );
add_action( 'wp_ajax_msp_create_new_handler', array( $this, 'create_new_slider' ) );
add_action( 'wp_ajax_post_slider_preview' , array( $this, 'post_slider_preview' ) );
add_action( 'wp_ajax_wc_slider_preview' , array( $this, 'wc_slider_preview' ) );
add_action( 'wp_ajax_ms-slug' , array( $this, 'slider_alias_validation' ) );
add_action( 'wp_ajax_msp_license_activation', array( $this, 'check_license_activation' ) );
add_action( 'wp_ajax_msp_replace' , array( $this, 'msp_replacer' ) );
}
/**
* Get preview data form post in admin area
*
* @since 1.5.0
*/
public function post_slider_preview() {
header( "Content-Type: application/json" );
// verify nonce
if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], "msp_panel") ) {
echo json_encode( array( 'success' => false, 'message' => __( "Authorization failed!", MSWP_TEXT_DOMAIN ) ) );
exit;
}
$PS = msp_get_post_slider_class();
$posts_result = $PS->parse_and_get_posts_result();
$template_tags = $PS->get_first_post_template_tags_value();
if( empty( $posts_result ) )
$template_tags = null;
echo json_encode( array( 'success' => true, 'type' => 'preview' , 'message' => '', 'preview_results' => $posts_result, 'template_tags' => $template_tags ) );
exit;// IMPORTANT
}
/**
* Get preview data form post in admin area
*
* @since 1.5.0
*/
public function slider_alias_validation(){
// verify nonce
if ( ! isset( $_REQUEST['nonce'] ) || ! wp_verify_nonce( $_REQUEST['nonce'], "msp_panel") ) {
wp_send_json_error( __( "Authorization failed!", MSWP_TEXT_DOMAIN ) );
}
global $mspdb;
if( isset( $_REQUEST['slug'] ) && isset( $_REQUEST['id'] ) ){
wp_send_json_success( $mspdb->validate_slider_alias( $_REQUEST['slug'], $_REQUEST['id'] ) );
} else {
wp_send_json_error( __( "Slider ID or slug is not available", MSWP_TEXT_DOMAIN ) );
}
}
/**
* Get preview data form woocommerce product in admin area
*
* @since 1.7.4
*/
public function wc_slider_preview() {
header( "Content-Type: application/json" );
// verify nonce
if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], "msp_panel") ) {
echo json_encode( array( 'success' => false, 'message' => __( "Authorization failed!", MSWP_TEXT_DOMAIN ) ) );
exit;
}
if ( ! msp_is_plugin_active( 'woocommerce/woocommerce.php' ) ){
echo json_encode( array( 'success' => false, 'message' => __( "Please install and activate WooCommerce plugin.", MSWP_TEXT_DOMAIN ) ) );
}
$wcs = msp_get_wc_slider_class();
$posts_result = $wcs->parse_and_get_posts_result();
$template_tags = $wcs->get_first_post_template_tags_value();
if( empty( $posts_result ) )
$template_tags = null;
echo json_encode( array( 'success' => true, 'type' => 'preview' , 'message' => '', 'preview_results' => $posts_result, 'template_tags' => $template_tags ) );
exit;// IMPORTANT
}
/**
* Save ajax handler for main panel data
*
* @since 1.0.0
*/
public function save_panel_ajax() {
header( "Content-Type: application/json" );
// verify nonce
if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], "msp_panel") ) {
echo json_encode( array( 'success' => false, 'message' => __("Authorization failed!", MSWP_TEXT_DOMAIN ) ) );
exit();
}
// ignore the request if the current user doesn't have sufficient permissions
if ( ! current_user_can( 'publish_masterslider' ) ) {
echo json_encode(
array(
'success' => false,
'message' => apply_filters( 'masterslider_insufficient_permissions_to_publish_message', __( "Sorry, You don't have enough permission to publish slider!", MSWP_TEXT_DOMAIN ) )
)
);
exit();
}
/////////////////////////////////////////////////////////////////////////////////////////
// Get the slider id
$slider_id = isset( $_REQUEST['slider_id'] ) ? $_REQUEST['slider_id'] : '';
if ( empty( $slider_id ) ) {
echo json_encode( array( 'success' => false, 'type' => 'save' , 'message' => __( "Slider id is not defined.", MSWP_TEXT_DOMAIN ) ) );
exit;
}
// get the slider type
$slider_type = isset( $_REQUEST['slider_type'] ) ? $_REQUEST['slider_type'] : 'custom';
// get panel data
$msp_data = isset( $_REQUEST['msp_data'] ) ? $_REQUEST['msp_data'] : NULL;
$preset_style = isset( $_REQUEST['preset_style'] ) ? $_REQUEST['preset_style'] : NULL;
$preset_effect = isset( $_REQUEST['preset_effect'] ) ? $_REQUEST['preset_effect'] : NULL;
$buttons_style = isset( $_REQUEST['buttons'] ) ? $_REQUEST['buttons'] : NULL;
// store preset data in database seperately
msp_update_option( 'preset_style' , $preset_style );
msp_update_option( 'preset_effect', $preset_effect );
msp_update_option( 'buttons_style', $buttons_style );
// get parse and database tools
global $mspdb;
// load and get parser and start parsing data
$parser = msp_get_parser();
$parser->set_data( $msp_data, $slider_id );
// get required parsed data
$slider_setting = $parser->get_slider_setting();
$slides = $parser->get_slides();
$slider_custom_styles = $parser->get_styles();
$fields = array(
'title' => $slider_setting[ 'title' ],
'alias' => $slider_setting[ 'alias' ],
'type' => $slider_setting[ 'slider_type' ],
'slides_num' => count( $slides ),
'params' => $msp_data,
'custom_styles' => $slider_custom_styles,
'custom_fonts' => $slider_setting[ 'gfonts' ],
'status' => 'published'
);
// store slider data in database
$is_saved = $mspdb->update_slider( $slider_id, $fields );
msp_update_preset_css();
msp_update_buttons_css();
msp_save_custom_styles();
// flush slider cache if slider cache is enabled
msp_flush_slider_cache( $slider_id );
// create and output the response
if( isset( $is_saved ) )
$response = json_encode( array( 'success' => true, 'type' => 'save' , 'message' => __( "Saved Successfully.", MSWP_TEXT_DOMAIN ) ) );
else
$response = json_encode( array( 'success' => true, 'type' => 'save' , 'message' => __( "No Data Recieved." , MSWP_TEXT_DOMAIN ) ) );
echo $response;
exit;// IMPORTANT
}
/**
* Create new slider by type
*
* @since 1.0.0
*/
public function create_new_slider() {
header( "Content-Type: application/json" );
// verify nonce
if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], "msp_panel") ) {
echo json_encode( array( 'success' => false, 'message' => __("Authorization failed!", MSWP_TEXT_DOMAIN ) ) );
exit();
}
// ignore the request if the current user doesn't have sufficient permissions
if ( ! current_user_can( 'create_masterslider' ) && ! current_user_can( 'publish_masterslider' ) ) {
echo json_encode( array( 'success' => false,
'message' => apply_filters( 'masterslider_create_slider_permissions_message', __( "Sorry, You don't have enough permission to create slider!", MSWP_TEXT_DOMAIN ) )
)
);
exit();
}
/////////////////////////////////////////////////////////////////////////////////////////
// Get the slider id
$slider_type = isset( $_REQUEST['slider_type'] ) ? $_REQUEST['slider_type'] : '';
// Get new slider id
global $mspdb;
$slider_id = $mspdb->add_slider( array( 'status' => 'draft', 'type' => $slider_type ) );
// create and output the response
if( false !== $slider_id )
$response = json_encode( array( 'success' => true, 'slider_id' => $slider_id , 'redirect' => admin_url( 'admin.php?page='.MSWP_SLUG.'&action=edit&slider_id='.$slider_id.'&slider_type='.$slider_type ), 'message' => __( "Slider Created Successfully.", MSWP_TEXT_DOMAIN ) ) );
else
$response = json_encode( array( 'success' => true, 'slider_id' => '' , 'redirect' => '', message => __( "Slider can not be created." , MSWP_TEXT_DOMAIN ) ) );
echo $response;
exit;// IMPORTANT
}
function check_license_activation() {
// header( "Content-Type: application/json" );
// verify nonce
/*if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], "msp_panel") ) {
echo json_encode( array( 'success' => 0, 'message' => __( "Authorization failed!", MSWP_TEXT_DOMAIN ) ) );
exit();
}*/
$username = isset( $_POST['username'] ) ? $_POST['username'] : '';
$purchase_code = isset( $_POST['purchase_code'] ) ? $_POST['purchase_code'] : ''; // check emptiness
$action = isset( $_POST['type'] ) ? $_POST['type'] : '';
$result = Axiom_Plugin_License::get_instance()->license_action( $username, $purchase_code, $action );
echo json_encode( $result );
exit;// IMPORTANT
}
/**
* Replacer function
*/
public function msp_replacer() {
// Check ajax-referer, user capability
if ( current_user_can( 'access_masterslider' ) && check_admin_referer( 'msprp-nonce', 'nonce' ) ) {
if ( empty( $_POST['ids'] ) ) {
wp_send_json_error( __( 'Please Select Slider(s)', MSWP_TEXT_DOMAIN ) );
}
if ( empty( $_POST['search'] ) && 'on' != $_POST['all_urls'] ) {
wp_send_json_error( __( 'Search field is empty.', MSWP_TEXT_DOMAIN ) );
}
if ( empty( $_POST['replace'] ) ) {
wp_send_json_error( __( 'Replace field is empty.', MSWP_TEXT_DOMAIN ) );
}
if ( empty( $_POST['where'] ) ) {
wp_send_json_error( __( 'Please select where to replace.', MSWP_TEXT_DOMAIN ) );
}
$ids = $_POST['ids'];
$search = sanitize_text_field($_POST['search']);
$replace = sanitize_text_field($_POST['replace']);
$case_sensitive = sanitize_text_field($_POST['cs']);
$where = $_POST['where'];
$backup = $_POST['backup'];
if ( array('slides', 'layers') == $where ) {
$where_replace = 'full';
} else {
$where_replace = $where[0];
}
// Pattern for finding initial replace-able data
$pattern = '/(?<=,\\\"link|info|content|bgv_mp4|bgv_ogg|bgv_webm\\\":\\\").*?(?=\\\",\\\")/';
$args_sliders = array(
'perpage' => 0,
'offset' => 0,
'orderby' => 'ID',
'order' => 'DESC',
'where' => "ID IN (".implode(',', $ids).") AND status='published'",
'like' => ''
);
global $mspdb;
$sliders = $mspdb->ms_query($args_sliders);
if ( 'on' == $_POST['all_urls'] ) {
// Pattern for detecting URLs
$urls = '/(https?|ftps?):\/{2}(([\w\d\.-]){1,})\.([a-zA-Z\d:]+|\/&[^\.])|http:\/{2}localhost/i';
$callback = function( $matches ) use ( $urls, $replace ) {
return preg_replace( $urls, $replace, $matches[0] );
};
} else {
if ( 'on' == $case_sensitive ) {
// Case sensitive replace
$callback = function( $matches ) use ( $search, $replace ) {
return str_replace( $search, $replace, $matches[0] );
};
} else {
// Case insensitive replace
$callback = function( $matches ) use ( $search, $replace ) {
return str_ireplace( $search, $replace, $matches[0] );
};
}
}
// Callback that runs replace function for detected replace-able contents
$callback_callback = function( $matches ) use ( $pattern, $callback ) {
return preg_replace_callback( $pattern, $callback, $matches[0], -1, $count);
};
// Start Replacing process
if ( $sliders ) {
if ( 'on' == $backup ) {
foreach ( $sliders as $slider ) {
update_option('msprp_backup_'.$slider['ID'], $slider['params']);
}
}
if ( 'layers' == $where_replace ) {
foreach ( $sliders as $slider ) {
$decoded = base64_decode( $slider['params'] );
// Match in Layers data only
$changed = preg_replace_callback( '/(?<=,\"MSPanel\.Layer\":\{).*?(?=\}\"\},\")/', $callback_callback, $decoded, -1, $count);
$params = base64_encode( $changed );
$mspdb->update_slider( $slider['ID'], array( 'params' => $params ) );
}
wp_send_json_success( __( 'Done!', MSWP_TEXT_DOMAIN ) );
} elseif ( 'slides' == $where_replace ) {
foreach ( $sliders as $slider ) {
$decoded = base64_decode( $slider['params'] );
// Match in Slides data only
$changed = preg_replace_callback( '/(?<=,\"MSPanel\.Slide\":\{).*?(?=\}\"\},\")/', $callback_callback, $decoded, -1, $count);
$params = base64_encode( $changed );
$mspdb->update_slider( $slider['ID'], array( 'params' => $params ) );
}
wp_send_json_success( __( 'Done!', MSWP_TEXT_DOMAIN ) );
} elseif ( 'full' == $where_replace ) {
foreach ( $sliders as $slider ) {
$params = $slider['params'];
$decoded = base64_decode( $params );
// MAtch any replace-able content
$changed = preg_replace_callback( $pattern, $callback, $decoded, -1, $count);
$params = base64_encode( $changed );
$mspdb->update_slider( $slider['ID'], array( 'params' => $params ) );
}
wp_send_json_success( __( 'Done!', MSWP_TEXT_DOMAIN ) );
}
}
// Send error by default
wp_send_json_error( __( 'Sorry! An error occurred while replacing process!', MSWP_TEXT_DOMAIN ) );
}
wp_send_json_error( __( 'Sorry! An error occurred while replacing process!', MSWP_TEXT_DOMAIN ) );
}
}
new MSP_Admin_Ajax();