File "Ajax.php"
Full Path: /home/attunedd/public_html/wp-content/plugins/carousel-slider/modules/HeroCarousel/Ajax.php
File size: 3.94 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace CarouselSlider\Modules\HeroCarousel;
defined( 'ABSPATH' ) || exit;
/**
* Ajax class
*
* @package Modules/HeroCarousel
*/
class Ajax {
/**
* The instance of the class
*
* @var self
*/
protected static $instance = null;
/**
* Ensures only one instance of this class is loaded or can be loaded.
*
* @return self
*/
public static function init() {
if ( is_null( self::$instance ) ) {
self::$instance = new self();
add_action( 'wp_ajax_add_content_slide', [ self::$instance, 'add_slide_template' ] );
}
return self::$instance;
}
/**
* Add slider template
*
* @return void
*/
public function add_slide_template() {
if ( isset( $_POST['nonce'] ) && wp_verify_nonce( $_POST['nonce'], 'carousel_slider_ajax_nonce' ) ) {
if ( ! isset( $_POST['post_id'] ) ) {
wp_send_json( __( 'Required attribute is not set properly.', 'carousel-slider' ), 422 );
}
$post_id = isset( $_POST['post_id'] ) ? absint( $_POST['post_id'] ) : 0;
$post_type = get_post_type_object( CAROUSEL_SLIDER_POST_TYPE );
if ( ! current_user_can( $post_type->cap->edit_post, $post_id ) ) {
wp_send_json( __( 'You are not authorized to perform this action.', 'carousel-slider' ), 401 );
}
$task = isset( $_POST['task'] ) ? sanitize_text_field( $_POST['task'] ) : 'add-slide';
$slider_content = get_post_meta( $post_id, '_content_slider', true );
$slider_content = is_array( $slider_content ) ? array_values( $slider_content ) : [];
if ( 'add-slide' === $task ) {
$new_content = $this->add_new_item( $post_id, $slider_content );
wp_send_json( $new_content, 201 );
}
$last_index = count( $slider_content ) - 1;
$current_index = $this->get_current_index( $last_index );
if ( - 1 === $current_index ) {
wp_send_json_error();
}
$new_index = [
'move-slide-top' => 0,
'move-slide-up' => $current_index - 1,
'move-slide-down' => $current_index + 1,
'move-slide-bottom' => $last_index,
];
if ( 'delete-slide' === $task ) {
array_splice( $slider_content, $current_index, 1 );
}
if ( array_key_exists( $task, $new_index ) ) {
$slider_content = $this->move_array_element( $slider_content, $current_index, $new_index[ $task ] );
}
$slider_content = array_values( $slider_content );
update_post_meta( $post_id, '_content_slider', $slider_content );
wp_send_json( $slider_content );
}
wp_send_json( __( 'You are not authorized to perform this action.', 'carousel-slider' ), 401 );
}
/**
* Move array element position
*
* @param array $original_array Array content.
* @param int $current_index The current index.
* @param int $new_index The new index.
*
* @return array
*/
private function move_array_element( array $original_array, int $current_index, int $new_index ): array {
$output = array_splice( $original_array, $current_index, 1 );
array_splice( $original_array, $new_index, 0, $output );
return $original_array;
}
/**
* Add new item
*
* @param int $post_id The post id.
* @param array $slider_content The slider content.
*
* @return array
*/
protected function add_new_item( int $post_id, array $slider_content ): array {
$data = [
'slide_heading' => 'Slide Heading',
'slide_description' => 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quas, magnam!',
];
$slider_content[] = wp_parse_args( $data, Item::get_default() );
update_post_meta( $post_id, '_content_slider', $slider_content );
return $slider_content;
}
/**
* Get current index
*
* @param int $last_index Last slider index.
*
* @return int
*/
protected function get_current_index( int $last_index ): int {
// phpcs:ignore WordPress.Security.NonceVerification.Missing
$index = isset( $_POST['slide_pos'] ) && is_numeric( $_POST['slide_pos'] ) ? absint( $_POST['slide_pos'] ) : - 1;
if ( in_array( $index, range( 0, $last_index ), true ) ) {
return $index;
}
return - 1;
}
}