__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

[email protected]: ~ $
<?php

namespace CarouselSlider\Abstracts;

use BadMethodCallException;
use CarouselSlider\Admin\MetaBoxConfig;
use CarouselSlider\Helper;
use CarouselSlider\Interfaces\SliderSettingInterface;
use CarouselSlider\Supports\Sanitize;
use CarouselSlider\Supports\Validate;

/**
 * SliderSetting class
 * The base slider setting for any slider type
 *
 * @method string get_nav_steps()
 * @method int get_stage_padding()
 * @method int get_space_between()
 * @method bool is_loop()
 * @method bool is_lazy_load()
 * @method bool is_auto_width()
 * @method bool is_autoplay()
 * @method bool has_autoplay_hover_pause()
 * @method int get_autoplay_delay()
 * @method int get_autoplay_speed()
 * @method int get_items_on_mobile()
 * @method int get_items_on_small_tablet()
 * @method int get_items_on_tablet()
 * @method int get_items_on_desktop()
 * @method int get_items_on_widescreen()
 * @method int get_items_on_fullhd()
 *
 * @package CarouselSlider/Abstracts
 */
class SliderSetting extends Data implements SliderSettingInterface {

	const NAV_VISIBILITY        = array( 'always', 'never', 'hover' );
	const NAV_POSITION          = array( 'inside', 'outside' );
	const PAGINATION_VISIBILITY = array( 'always', 'never', 'hover' );
	const PAGINATION_TYPE       = array( 'bullets', 'fraction', 'progressbar', 'custom' );
	const SLIDE_EFFECTS         = array( 'slide', 'fade', 'cube', 'coverflow', 'flip', 'creative', 'cards' );

	/**
	 * The slider id.
	 *
	 * @var int
	 */
	protected $slider_id = 0;

	/**
	 * Get slider type
	 *
	 * @var string
	 */
	protected $slider_type = null;

	/**
	 * Is data read from server?
	 *
	 * @var bool
	 */
	protected $data_read = false;

	/**
	 * Global settings
	 *
	 * @var array
	 */
	protected static $global_settings = array();

	/**
	 * Class constructor
	 *
	 * @param  int  $slider_id  The slider id.
	 * @param  bool $read_metadata  Should read metadata immediately.
	 */
	public function __construct( int $slider_id, bool $read_metadata = true ) {
		$this->slider_id = $slider_id;
		if ( $read_metadata ) {
			$this->read_metadata();
			if ( method_exists( $this, 'read_extra_metadata' ) ) {
				$this->read_extra_metadata();
			}
		}
	}

	/**
	 * Get global settings
	 *
	 * @return array
	 */
	public static function get_global_settings(): array {
		return Helper::get_global_settings();
	}

	/**
	 * Does this collection have a given key?
	 *
	 * @param  string $key  The data key.
	 *
	 * @return bool
	 */
	public static function has_global_option( string $key ): bool {
		return array_key_exists( $key, self::get_global_settings() );
	}

	/**
	 * Get option
	 *
	 * @param  string $key  option key.
	 * @param  mixed  $default_value  default value.
	 *
	 * @return mixed
	 */
	public function get_global_option( string $key, $default_value = '' ) {
		if ( static::has_global_option( $key ) ) {
			return static::get_global_settings()[ $key ];
		}

		return $default_value;
	}

	/**
	 * Get option for key
	 * If there is no option for key, return from global option.
	 *
	 * @param  string $key  option key.
	 * @param  mixed  $default_value  default value to return if data key does not exist.
	 *
	 * @return mixed The key's value, or the default value
	 */
	public function get_option( string $key, $default_value = '' ) {
		if ( $this->has_prop( $key ) ) {
			return $this->get_prop( $key, $default_value );
		}

		return $this->get_global_option( $key, $default_value );
	}

	/**
	 * Get slider Id
	 *
	 * @return int
	 */
	public function get_slider_id(): int {
		return $this->slider_id;
	}

	/**
	 * Get slider type
	 *
	 * @return string
	 */
	public function get_slider_type(): string {
		if ( is_null( $this->slider_type ) ) {
			$slide_type = get_post_meta( $this->get_slider_id(), '_slide_type', true );
			$this->set_slider_type( $slide_type );
		}

		return $this->slider_type;
	}

	/**
	 * Set slider type
	 *
	 * @param  mixed $type  The slider type.
	 *
	 * @return void
	 */
	public function set_slider_type( $type ) {
		if ( array_key_exists( $type, Helper::get_slide_types() ) ) {
			$this->slider_type = $type;
		} else {
			$this->slider_type = 'image-carousel';
		}
	}

	/**
	 * Get image size
	 *
	 * @return string
	 */
	public function get_image_size(): string {
		$size = $this->get_option( 'image_size', 'medium_large' );

		return array_key_exists( $size, Helper::get_available_image_sizes() ) ? $size : 'medium_large';
	}

	/**
	 * If it should lazy load image
	 *
	 * @return bool
	 */
	public function lazy_load_image(): bool {
		$default = Helper::get_default_setting( 'lazy_load_image' );

		return Validate::checked( $this->get_option( 'lazy_load', $default ) );
	}

	/**
	 * Set nav visibility
	 *
	 * @param  mixed $value  The navigation visibility.
	 */
	public function set_nav_visibility( $value ) {
		// For backup compatability.
		$value = str_replace( array( 'off', 'on' ), array( 'never', 'hover' ), $value );

		if ( in_array( $value, static::NAV_VISIBILITY, true ) ) {
			$this->data['nav_visibility'] = $value;
		}
	}


	/**
	 * Get nav visibility
	 *
	 * @return string
	 */
	public function get_nav_visibility(): string {
		$value = $this->get_prop( 'nav_visibility' );
		// For backup compatability.
		$value = str_replace( array( 'off', 'on' ), array( 'never', 'hover' ), $value );

		return $value;
	}

	/**
	 * Set nav position
	 *
	 * @param  mixed $value  The navigation position.
	 */
	public function set_nav_position( $value ) {
		if ( in_array( $value, static::NAV_POSITION, true ) ) {
			$this->data['nav_position'] = $value;
		}
	}

	/**
	 * Set nav steps
	 *
	 * @param  mixed $value  The navigation steps.
	 */
	public function set_nav_steps( $value ) {
		if ( in_array( $value, array( 'page', '-1', - 1 ), true ) ) {
			$this->data['nav_steps'] = 'page';
		} else {
			$this->data['nav_steps'] = max( 1, intval( $value ) );
		}
	}

	/**
	 * Set pagination visibility
	 *
	 * @param  mixed $value  The pagination visibility value.
	 */
	public function set_pagination_visibility( $value ) {
		// For backup compatability.
		$value = str_replace( array( 'off', 'on' ), array( 'never', 'always' ), $value );

		if ( in_array( $value, static::PAGINATION_VISIBILITY, true ) ) {
			$this->data['pagination_visibility'] = $value;
		}
	}

	/**
	 * Get pagination visibility
	 *
	 * @return string
	 */
	public function get_pagination_visibility(): string {
		$value = $this->get_prop( 'pagination_visibility' );
		// For backup compatability.
		$value = str_replace( array( 'off', 'on' ), array( 'never', 'always' ), $value );

		return $value;
	}

	/**
	 * Get pagination type. Only works with Pro.
	 *
	 * @return string
	 */
	public function get_pagination_type(): string {
		$value = $this->get_prop( 'pagination_type', 'bullets' );

		return in_array( $value, static::PAGINATION_TYPE, true ) ? $value : 'bullets';
	}

	/**
	 * Get slider direction. Only works with pro.
	 *
	 * @return string
	 */
	public function get_slider_direction(): string {
		return 'vertical' === $this->get_option( 'slider_direction' ) ? 'vertical' : 'horizontal';
	}

	/**
	 * Get slider direction. Only works with pro.
	 *
	 * @return string
	 */
	public function get_slider_effect(): string {
		if ( ! Helper::is_pro_active() ) {
			return 'slide';
		}
		$effect = $this->get_option( 'slider_effect' );

		return in_array( $effect, static::SLIDE_EFFECTS, true ) ? $effect : 'slide';
	}

	/**
	 * Get sliders per view
	 *
	 * @return array
	 */
	public function get_slides_per_view(): array {
		// For backup compatability.
		if ( ! $this->has_prop( 'slides_per_view' ) ) {
			return array(
				'xs'  => (int) $this->get_items_on_mobile(),
				'sm'  => (int) $this->get_items_on_small_tablet(),
				'md'  => (int) $this->get_items_on_tablet(),
				'lg'  => (int) $this->get_items_on_desktop(),
				'xl'  => (int) $this->get_items_on_widescreen(),
				'2xl' => (int) $this->get_items_on_fullhd(),
			);
		}
		$slides          = (array) $this->get_option( 'slides_per_view', array() );
		$slides          = wp_parse_args( $slides, array( 'xs' => 1 ) );
		$slides_per_view = array();
		foreach ( $slides as $prefix => $item ) {
			$slides_per_view[ esc_attr( $prefix ) ] = floatval( $item );
		}

		return $slides_per_view;
	}

	/**
	 * Is it a type of slider?
	 *
	 * @return bool
	 */
	public function is_slider(): bool {
		return 'slider' === $this->get_prop( 'type_of_slider' );
	}

	/**
	 * Check if we are using swiper
	 *
	 * @return bool
	 */
	public function is_using_swiper(): bool {
		return Helper::is_using_swiper();
	}

	/**
	 * Read setting from database
	 *
	 * @param  array $values  The value to be read.
	 *
	 * @return void
	 */
	public function read_metadata( array $values = array() ) {
		if ( $this->data_read ) {
			return;
		}
		if ( empty( $values ) ) {
			$metadata = get_post_meta( $this->get_slider_id() );
			foreach ( $metadata as $meta_key => $meta_value ) {
				$values[ $meta_key ] = maybe_unserialize( $meta_value[0] );
			}
		}
		$fields_settings = self::get_fields_settings();
		foreach ( $fields_settings as $attribute => $config ) {
			$this->read_single_metadata( $attribute, $config, $values );
		}
		$this->data_read = true;
	}

	/**
	 * Read data from HTTP POST variable
	 *
	 * @param  array $values  The values from HTTP POST variables.
	 *
	 * @return void
	 */
	public function read_http_post_variables( array $values = array() ) {
		$fields_settings = self::get_fields_settings();
		foreach ( $fields_settings as $attribute => $config ) {
			$this->read_single_metadata( $attribute, $config, $values );
		}
	}

	/**
	 * Read data from HTTP POST variable
	 *
	 * @param  array $values  The values from HTTP POST variables.
	 *
	 * @return void
	 */
	public function read_extra_http_post_variables( array $values = array() ) {
		if ( method_exists( get_called_class(), 'extra_props' ) ) {
			foreach ( static::extra_props() as $attribute => $config ) {
				$this->read_single_metadata( $attribute, $config, $values );
			}
		}
	}

	/**
	 * Read single metadata
	 *
	 * @param  string $attribute  property name.
	 * @param  array  $field  The field settings.
	 * @param  array  $values  The values.
	 *
	 * @return void
	 */
	public function read_single_metadata( string $attribute, array $field, array $values ) {
		$method_name = 'set_' . $attribute;
		$value       = $values[ $field['id'] ] ?? ( $field['default'] ?? null );
		if ( method_exists( $this, $method_name ) ) {
			$this->$method_name( $value );
		} else {
			$value = $this->prepare_item_for_response( $field['type'], $value );
			$this->set_prop( $attribute, $value );
		}
	}

	/**
	 * Write metadata
	 * make sure to backward compatibility for the following props
	 * --- nav_visibility, pagination_visibility, nav_steps
	 * --- Convert boolean value to 'on' and 'off'
	 *
	 * @return void
	 */
	public function write_metadata() {
		$fields_settings = self::get_fields_settings();
		foreach ( $fields_settings as $prop_name => $field ) {
			$value = $this->get_prop( $prop_name );
			if ( 'nav_visibility' === $prop_name ) {
				$value = str_replace( array( 'never', 'hover' ), array( 'off', 'on' ), $value );
			}
			if ( 'pagination_visibility' === $prop_name ) {
				$value = str_replace( array( 'never', 'always' ), array( 'off', 'on' ), $value );
			}
			$sanitized_value = $this->prepare_item_for_database( $value, $field );
			update_post_meta( $this->slider_id, $field['id'], $sanitized_value );
		}
	}

	/**
	 * Sanitize value by data type
	 *
	 * @param  string $type  The type.
	 * @param  mixed  $value  The value.
	 *
	 * @return mixed
	 */
	protected function prepare_item_for_response( string $type, $value ) {
		if ( 'array' === $type && is_string( $value ) ) {
			$value = explode( ',', $value );
		}
		if ( 'int[]' === $type && is_string( $value ) ) {
			$value = array_filter( array_map( 'intval', explode( ',', $value ) ) );
		}
		if ( in_array( $type, array( 'int', 'number' ), true ) ) {
			$value = (int) $value;
		}
		if ( in_array( $type, array( 'bool', 'switch' ), true ) ) {
			$value = Validate::checked( $value );
		}

		return $value;
	}

	/**
	 * Prepare item for database store
	 *
	 * @param  mixed $value  The value to be sanitized.
	 * @param  array $setting  The field setting.
	 *
	 * @return mixed
	 */
	protected function prepare_item_for_database( $value, array $setting ) {
		if ( isset( $setting['sanitize_callback'] ) && is_callable( $setting['sanitize_callback'] ) ) {
			return call_user_func( $setting['sanitize_callback'], $value );
		}
		if ( isset( $setting['choices'] ) && is_array( $setting['choices'] ) ) {
			return $this->sanitize_choices( $value, $setting );
		}
		if ( in_array( $setting['type'], array( 'bool', 'switch' ), true ) ) {
			return Validate::checked( $value ) ? 'on' : 'off';
		}

		return Sanitize::deep( $value );
	}

	/**
	 * Sanitize choices value
	 *
	 * @param  mixed $value  The value to be sanitized.
	 * @param  array $setting  The field setting.
	 *
	 * @return array|mixed|null
	 */
	public function sanitize_choices( $value, array $setting ) {
		$enum = array();
		foreach ( $setting['choices'] as $key => $choice ) {
			if ( is_array( $choice ) && isset( $choice['value'] ) ) {
				$enum[] = $choice['value'];
			} else {
				$enum[] = $key;
			}
		}

		$default = $setting['default'] ?? null;
		if ( isset( $setting['multiple'] ) ) {
			$sanitized_value = array();
			foreach ( (array) $value as $item ) {
				if ( in_array( $item, $enum, true ) ) {
					$sanitized_value[] = $item;
				}
			}

			return $sanitized_value;
		}

		return in_array( $value, $enum, true ) ? $value : $default;
	}

	/**
	 * Default properties
	 *
	 * @return array
	 */
	protected static function get_fields_settings(): array {
		return MetaBoxConfig::get_fields_settings();
	}

	/**
	 * Handle calling property via method
	 *
	 * @param  string $name  The name of the method being called.
	 * @param  array  $args  An enumerated array containing the parameters passed to the $name'ed method.
	 *
	 * @return mixed
	 * @throws BadMethodCallException Exception if not method available.
	 */
	public function __call( string $name, array $args ) {
		if ( preg_match( '/^(?P<prefix>get|is|has|should)_(?P<property>\s*.*)/', $name, $matches ) ) {
			if ( $this->has_prop( $matches['property'] ) ) {
				if ( in_array( $matches['prefix'], array( 'is', 'has', 'should' ), true ) ) {
					return Validate::checked( $this->get_prop( $matches['property'] ) );
				}

				return $this->get_prop( $matches['property'] );
			}
			if ( static::has_global_option( $matches['property'] ) ) {
				return static::get_global_option( $matches['property'] );
			}
		}
		throw new BadMethodCallException(
			'Call to undefined method ' . esc_html( sprintf( '%s::%s()', __CLASS__, $name ) )
		);
	}
}

Filemanager

Name Type Size Permission Actions
AbstractTemplate.php File 3.62 KB 0775
AbstractView.php File 7.55 KB 0775
Data.php File 3.14 KB 0775
OwlSetting.php File 1.97 KB 0775
SliderSetting.php File 14.39 KB 0775
SwiperSetting.php File 3.35 KB 0775
Filemanager