HEX
Server: Apache
System: Linux linplesk41.pumo.com.tw 3.10.0-962.3.2.lve1.5.27.el7.x86_64 #1 SMP Sat Nov 30 02:18:52 EST 2019 x86_64
User: rajlaw (10192)
PHP: 7.4.24
Disabled: phpinfo,passthru,exec,shell_exec,system,popen,proc_open,proc_close,show_source,pcntl_exec,escapeshellcmd,proc_get_status,proc_nice,proc_terminate,escapeshellarg
Upload Files
File: /home/httpd/vhosts/rajlaw.com.tw/httpdocs/wp-content/plugins/blockart-blocks/includes/Setting.php
<?php
/**
 * Setting API class.
 *
 * @package BlockArt
 */

namespace BlockArt;

defined( 'ABSPATH' ) || exit;

/**
 * Setting class.
 */
class Setting {

	/**
	 * Default data.
	 *
	 * @var array
	 */
	private static $data = array(
		'blocks'           => array(
			'section'          => true,
			'heading'          => true,
			'paragraph'        => true,
			'button'           => true,
			'image'            => true,
			'spacing'          => true,
			'socials'          => true,
			'tabs'             => true,
			'toc'              => true,
			'counter'          => true,
			'lottie'           => true,
			'team'             => true,
			'countdown'        => true,
			'info'             => true,
			'blockquote'       => true,
			'timeline'         => true,
			'notice'           => true,
			'progress'         => true,
			'call-to-action'   => true,
			'slider'           => true,
			'map'              => true,
			'testimonial'      => true,
			'faq'              => true,
			'modal'            => true,
			'icon'             => true,
			'icon-list'        => true,
			'image-comparison' => true,
		),
		'editor'           => array(
			'section-width'          => 1170,
			'editor-blocks-spacing'  => 24,
			'design-library'         => true,
			'responsive-breakpoints' => array(
				'tablet' => 992,
				'mobile' => 768,
			),
			'copy-paste-styles'      => true,
			'auto-collapse-panels'   => true,
		),
		'performance'      => array(
			'local-google-fonts'        => false,
			'preload-local-fonts'       => false,
			'allow-only-selected-fonts' => false,
			'allowed-fonts'             => array(),
		),
		'asset-generation' => array(
			'external-file' => false,
		),
		'version-control'  => array(
			'beta-tester' => false,
		),
		'maintenance-mode' => array(
			'mode'             => 'none',
			'maintenance-page' => null,
		),
		'integrations'     => array(
			'google-maps-embed-api-key' => '',
		),
		'global-styles'    => '',
	);

	/**
	 * Sanitize callbacks.
	 *
	 * @var array
	 */
	private static $sanitize_callbacks = array(
		'blocks'           => array(
			'section'         => 'blockart_string_to_bool',
			'heading'         => 'blockart_string_to_bool',
			'paragraph'       => 'blockart_string_to_bool',
			'button'          => 'blockart_string_to_bool',
			'image'           => 'blockart_string_to_bool',
			'spacing'         => 'blockart_string_to_bool',
			'socials'         => 'blockart_string_to_bool',
			'tabs'            => 'blockart_string_to_bool',
			'toc'             => 'blockart_string_to_bool',
			'counter'         => 'blockart_string_to_bool',
			'lottie'          => 'blockart_string_to_bool',
			'team'            => 'blockart_string_to_bool',
			'countdown'       => 'blockart_string_to_bool',
			'info'            => 'blockart_string_to_bool',
			'blockquote'      => 'blockart_string_to_bool',
			'timeline'        => 'blockart_string_to_bool',
			'notice'          => 'blockart_string_to_bool',
			'progress'        => 'blockart_string_to_bool',
			'call-to-action'  => 'blockart_string_to_bool',
			'slider'          => 'blockart_string_to_bool',
			'map'             => 'blockart_string_to_bool',
			'testimonial'     => 'blockart_string_to_bool',
			'imageComparison' => 'blockart_string_to_bool',
			'faq'             => 'blockart_string_to_bool',
		),
		'editor'           => array(
			'section-width'          => 'absint',
			'editor-blocks-spacing'  => 'absint',
			'design-library'         => 'blockart_string_to_bool',
			'copy-paste-styles'      => 'blockart_string_to_bool',
			'auto-collapse-panels'   => 'blockart_string_to_bool',
			'responsive-breakpoints' => array(
				'tablet' => 'absint',
				'mobile' => 'absint',
			),
		),
		'performance'      => array(
			'local-google-fonts'        => 'blockart_string_to_bool',
			'preload-local-fonts'       => 'blockart_string_to_bool',
			'allow-only-selected-fonts' => 'blockart_string_to_bool',
		),
		'asset-generation' => array(
			'external-file' => 'blockart_string_to_bool',
		),
		'version-control'  => array(

			'beta-tester' => 'blockart_string_to_bool',
		),
		'integrations'     => array(
			'google-maps-embed-api-key' => 'sanitize_text_field',
		),
		'maintenance-mode' => array(
			'mode'             => 'sanitize_text_field',
			'maintenance-page' => array(
				'id'    => 'absint',
				'title' => 'sanitize_text_field',
			),
		),
	);

	/**
	 * Undocumented function
	 *
	 * @return void
	 */
	public static function read() {
		self::set_default_global_styles();
		self::$data = apply_filters( 'blockart_default_settings', self::$data );
		$settings   = get_option( '_blockart_settings', self::$data );
		self::$data = blockart_parse_args( $settings, self::$data );
		return self::$data;
	}

	/**
	 * Get all data.
	 *
	 * @return array
	 */
	public static function all() {
		return self::read();
	}

	/**
	 * Get setting.
	 *
	 * @param string $key
	 * @param mixed $default_value
	 * @return mixed
	 */
	public static function get( $key, $default_value = null ) {
		self::read();
		return blockart_array_get( self::$data, $key, $default_value );
	}

	/**
	 * Set multiple data.
	 *
	 * @param array $data
	 * @return void
	 */
	public static function set_data( $data ) {
		$data = blockart_array_dot( $data );
		array_walk(
			$data,
			function ( &$value, $key ) {
				$value = self::sanitize( $key, $value );
			}
		);
		$data       = blockart_array_undot( $data );
		self::$data = blockart_parse_args( $data, self::$data );
	}

	/**
	 * Set default global styles.
	 *
	 * @return void
	 */
	private static function set_default_global_styles() {
		$styles                      = array(
			'colors'       => array(
				array(
					'id'    => 'primary',
					'name'  => 'Primary',
					'value' => '#2563eb',
				),
				array(
					'id'    => 'secondary',
					'name'  => 'Secondary',
					'value' => '#54595F',
				),
				array(
					'id'    => 'text',
					'name'  => 'Text',
					'value' => '#7A7A7A',
				),
				array(
					'id'    => 'accent',
					'name'  => 'Accent',
					'value' => '#61CE70',
				),
			),
			'typographies' => array(
				array(
					'id'    => 'primary',
					'name'  => 'Primary',
					'value' => array(
						'fontFamily' => 'Default',
						'weight'     => 600,
					),
				),
				array(
					'id'    => 'secondary',
					'name'  => 'Secondary',
					'value' => array(
						'fontFamily' => 'Default',
						'weight'     => 400,
					),
				),
				array(
					'id'    => 'text',
					'name'  => 'Text',
					'value' => array(
						'fontFamily' => 'Default',
						'weight'     => 600,
					),
				),
				array(
					'id'    => 'accent',
					'name'  => 'Accent',
					'value' => array(
						'fontFamily' => 'Default',
						'weight'     => 500,
					),
				),
			),
		);
		self::$data['global-styles'] = wp_json_encode( $styles );
	}

	/**
	 * Set setting data.
	 *
	 * @param string $key Key to set.
	 * @param mixed $value Value to set.
	 * @return void
	 */
	public static function set( $key, $value ) {
		$value      = self::sanitize( $key, $value );
		self::$data = blockart_array_set( self::$data, $key, $value );
	}

	/**
	 * Sanitize value.
	 *
	 * @param string $key Key to sanitize.
	 * @param mixed $value Value to sanitize.
	 * @return mixed Sanitized value.
	 */
	private static function sanitize( $key, $value ) {
		$sanitize_callback = blockart_array_get(
			(array) apply_filters(
				'blockart_setting_sanitize_callbacks',
				self::$sanitize_callbacks
			),
			$key
		);
		if ( is_callable( $sanitize_callback ) || ( is_string( $sanitize_callback ) && function_exists( $sanitize_callback ) ) ) {
			return call_user_func_array( $sanitize_callback, array( $value ) );
		}
		return $value;
	}

	/**
	 * Save setting data after sanitization.
	 *
	 * @return void
	 */
	public static function save() {
		self::watch_responsive_breakpoints();
		update_option( '_blockart_settings', self::$data );
	}

	/**
	 * Watch responsive breakpoints.
	 *
	 * @return void
	 */
	private static function watch_responsive_breakpoints() {
		$new_breakpoints = blockart_array_get( self::$data, 'editor.responsive-breakpoints', array() );
		$old_breakpoints = wp_parse_args(
			blockart_array_get( get_option( '_blockart_settings', array() ), 'editor.responsive-breakpoints', array() ),
			blockart_array_get( self::$data, 'editor.responsive-breakpoints', array() )
		);

		ksort( $new_breakpoints );
		ksort( $old_breakpoints );

		if ( $new_breakpoints !== $old_breakpoints ) {
			do_action( 'blockart_responsive_breakpoints_changed', $new_breakpoints, $old_breakpoints );
		}
	}
}