File "MetaBox.php"
Full Path: /home/attunedd/public_html/wp-content/plugins/carousel-slider/includes/Admin/MetaBox.php
File size: 8.71 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* The slider meta box specific file of the plugin
*
* @package CarouselSlider/Admin
*/
namespace CarouselSlider\Admin;
use CarouselSlider\Abstracts\SliderSetting;
use CarouselSlider\Helper;
use CarouselSlider\Supports\MetaBoxForm;
use WP_Post;
defined( 'ABSPATH' ) || exit;
/**
* MetaBox class
*/
class MetaBox {
/**
* The instance of the class
*
* @var self
*/
private static $instance = null;
/**
* Ensures only one instance of this class is loaded or can be loaded.
*
* @return MetaBox
*/
public static function init() {
if ( is_null( self::$instance ) ) {
self::$instance = new self();
add_action( 'add_meta_boxes', array( self::$instance, 'add_meta_boxes' ), 10, 2 );
add_action( 'save_post', array( self::$instance, 'save_meta_box' ) );
}
return self::$instance;
}
/**
* Save custom meta box
*
* @param int $post_id The post ID.
*/
public function save_meta_box( int $post_id ) {
// Check if user has permissions to save data.
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return;
}
if ( ! current_user_can( 'edit_post', $post_id ) ) {
return;
}
if ( wp_verify_nonce( $_POST['_carousel_slider_nonce'] ?? '', 'carousel_slider_nonce' ) ) {
$slider_type = get_post_meta( $post_id, '_slide_type', true );
if ( apply_filters( 'carousel_slider/save_common_settings', true ) ) {
$settings = new SliderSetting( $post_id, false );
$settings->get_slider_type();
$settings->read_http_post_variables( $_POST['carousel_slider'] );
$settings->write_metadata();
}
update_post_meta( $post_id, '_carousel_slider_version', CAROUSEL_SLIDER_VERSION );
/**
* Fires once a post has been saved.
*
* @param int $post_id Slider post ID.
* @param array $_POST User submitted data.
*/
do_action( "carousel_slider/save_slider/{$slider_type}", $post_id, $_POST );
/**
* Fires once a post has been saved.
*
* @param int $post_id Slider post ID.
* @param array $_POST User submitted data.
* @param string $slider_type Slider type.
*/
do_action( 'carousel_slider/save_slider', $post_id, $_POST, $slider_type );
}
}
/**
* Add carousel slider meta box
*
* @param string $post_type The post type.
* @param WP_Post $post The post object.
*/
public function add_meta_boxes( $post_type, $post ) {
if ( CAROUSEL_SLIDER_POST_TYPE !== $post_type ) {
return;
}
$slide_type = get_post_meta( $post->ID, '_slide_type', true );
if ( empty( $slide_type ) ) {
add_meta_box(
'carousel-slider-slide-types',
__( 'Slider Type', 'carousel-slider' ),
[ $this, 'carousel_slider_slide_types' ],
CAROUSEL_SLIDER_POST_TYPE,
'normal',
'high'
);
return;
}
$slide_types = Helper::get_slide_types();
$meta_boxes = [
'carousel-slider-meta-boxes' => [
'title' => sprintf(
/* translators: 1 - Slider type label */
__( 'Carousel Slider : %s', 'carousel-slider' ),
$slide_types[ $slide_type ] ?? ''
),
'callback' => [ $this, 'carousel_slider_meta_boxes' ],
'context' => 'normal',
'priority' => 'high',
],
'carousel-slider-settings' => [
'title' => __( 'Slider Settings', 'carousel-slider' ),
'callback' => [ $this, 'carousel_slider_settings' ],
'context' => 'normal',
'priority' => 'low',
],
'carousel-slider-usages' => [
'title' => __( 'Usage', 'carousel-slider' ),
'callback' => [ $this, 'usages_callback' ],
'priority' => 'low',
],
];
foreach ( $meta_boxes as $id => $meta_box ) {
add_meta_box(
$id,
$meta_box['title'],
$meta_box['callback'],
CAROUSEL_SLIDER_POST_TYPE,
'normal',
'low'
);
}
}
/**
* Render short code meta box content
*
* @param WP_Post $post The WP_Post object.
*/
public function usages_callback( WP_Post $post ) {
$shortcode = sprintf( '[carousel_slide id="%s"]', absint( $post->ID ) );
$shortcode_in = sprintf( 'echo do_shortcode( \'[carousel_slide id="%s"]\' );', absint( $post->ID ) );
ob_start();
?>
<div class="shapla-columns">
<div class="shapla-column is-6-tablet">
<strong><?php esc_html_e( 'Shortcode:', 'carousel-slider' ); ?></strong>
<div
class="input-copy-to-clipboard"><?php Helper::print_unescaped_internal_string( $shortcode ); ?></div>
</div>
<div class="shapla-column is-6-tablet">
<strong><?php esc_html_e( 'Template Include:', 'carousel-slider' ); ?></strong>
<div
class="input-copy-to-clipboard"><?php Helper::print_unescaped_internal_string( $shortcode_in ); ?></div>
</div>
</div>
<?php
Helper::print_unescaped_internal_string( ob_get_clean() );
?>
<div>
<a class="button button-primary button-cs-preview hidden" id="carousel-slider-update-preview"
data-id="<?php echo esc_attr( $post->ID ); ?>" href="#">
<span class="button-cs-preview__icon dashicons dashicons-image-rotate"></span>
<span class="button-cs-preview__label">Update Preview</span>
</a>
<a class="button button-primary button-cs-preview hidden" id="carousel-slider-hide-preview"
data-id="<?php echo esc_attr( $post->ID ); ?>" href="#">
<span class="button-cs-preview__icon dashicons dashicons-hidden"></span>
<span class="button-cs-preview__label">Hide Preview</span>
</a>
<a class="button button-primary button-cs-preview" id="carousel-slider-show-preview"
data-id="<?php echo esc_attr( $post->ID ); ?>" href="#">
<span class="button-cs-preview__icon dashicons dashicons-visibility"></span>
<span class="button-cs-preview__label">Show Preview</span>
</a>
</div>
<?php
}
/**
* Post type metabox.
*
* @return void
*/
public function carousel_slider_slide_types() {
wp_nonce_field( 'carousel_slider_nonce', '_carousel_slider_nonce' );
$slide_types = Helper::get_slider_types();
$html = '<div class="carousel-slider-slider-type-container">';
$html .= '<div class="shapla-columns is-multiline">';
foreach ( $slide_types as $slug => $args ) {
$id = sprintf( '_slide_type__%s', $slug );
$attrs = [
'type' => 'radio',
'name' => 'carousel_slider[_slide_type]',
'id' => $id,
'class' => 'screen-reader-text',
'value' => $slug,
];
if ( false === $args['enabled'] ) {
$attrs['disabled'] = true;
}
$is_pro = isset( $args['pro'] ) && true === $args['pro'];
$html .= '<div class="shapla-column is-6-tablet is-4-desktop is-3-fullhd">';
$html .= '<input ' . implode( ' ', Helper::array_to_attribute( $attrs ) ) . '>';
$html .= '<label for="' . esc_attr( $id ) . '" class="option-slider-type">';
$html .= '<span class="option-slider-type__content">';
if ( isset( $args['icon'] ) ) {
$html .= '<span class="option-slider-type__icon">' . $args['icon'] . '</span>';
}
$html .= '<span class="option-slider-type__label">' . esc_html( $args['label'] ) . '</span>';
if ( $is_pro ) {
$html .= '<span class="option-slider-type__pro">' . esc_html__( 'Pro', 'carousel-slider' ) . '</span>';
}
$html .= '</span>';
$html .= '</label>';
$html .= '</div>';
}
$html .= '</div>';
$html .= '</div>';
Helper::print_unescaped_internal_string( $html );
}
/**
* Get slider settings
*
* @return void
*/
public function carousel_slider_settings() {
$sections = MetaBoxConfig::get_sections_settings();
$fields = MetaBoxConfig::get_fields_settings();
$html = '<div class="shapla-section shapla-tabs shapla-tabs--normal">';
$html .= '<div class="shapla-tab-inner">';
$html .= '<ul class="shapla-nav shapla-clearfix">';
foreach ( $sections as $section ) {
$html .= '<li><a href="#' . esc_attr( $section['id'] ) . '">' . esc_html( $section['label'] ) . '</a></li>';
}
$html .= '</ul>';
foreach ( $sections as $section ) {
$html .= '<div id="' . esc_attr( $section['id'] ) . '" class="shapla-tab tab-content">';
$section_html = '';
foreach ( $fields as $field ) {
if ( $field['section'] === $section['id'] ) {
$section_html .= MetaBoxForm::field( $field );
}
}
$html .= apply_filters( 'carousel_slider/admin/' . $section['hook'], $section_html );
$html .= '</div>';
}
$html .= '</div>';
$html .= '</div>';
Helper::print_unescaped_internal_string( $html );
}
/**
* Load meta box content
*
* @param WP_Post $post The WP_Post object.
*/
public function carousel_slider_meta_boxes( WP_Post $post ) {
wp_nonce_field( 'carousel_slider_nonce', '_carousel_slider_nonce' );
$slide_type = get_post_meta( $post->ID, '_slide_type', true );
$slide_type = array_key_exists( $slide_type, Helper::get_slide_types() ) ? $slide_type : 'image-carousel';
do_action( 'carousel_slider/meta_box_content/' . $slide_type, $post->ID );
/**
* Allow third-party plugin to add custom fields
*/
do_action( 'carousel_slider/meta_box_content', $post->ID, $slide_type );
}
}