305 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			305 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * File: template.php
 | 
						|
 *
 | 
						|
 * @since 2.0.0
 | 
						|
 *
 | 
						|
 * @package    W3TC
 | 
						|
 * @subpackage W3TC\Wizard
 | 
						|
 */
 | 
						|
 | 
						|
namespace W3TC\Wizard;
 | 
						|
 | 
						|
if ( ! defined( 'W3TC' ) ) {
 | 
						|
	die();
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Class: Template
 | 
						|
 *
 | 
						|
 * Wizard template class.
 | 
						|
 *
 | 
						|
 * @since 2.0.0
 | 
						|
 */
 | 
						|
class Template {
 | 
						|
	/**
 | 
						|
	 * Configuration.
 | 
						|
	 *
 | 
						|
	 * @since 2.0.0
 | 
						|
	 *
 | 
						|
	 * @var array
 | 
						|
	 */
 | 
						|
	private $config = array();
 | 
						|
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Constructor.
 | 
						|
	 *
 | 
						|
	 * @since 2.0.0
 | 
						|
	 *
 | 
						|
	 * @see self::add_hooks();
 | 
						|
	 *
 | 
						|
	 * @param array $config Configuration.
 | 
						|
	 */
 | 
						|
	public function __construct( array $config ) {
 | 
						|
		$this->config = $config;
 | 
						|
 | 
						|
		$this->add_hooks();
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Render the wizard.
 | 
						|
	 *
 | 
						|
	 * @since 2.0.0
 | 
						|
	 */
 | 
						|
	public function render() {
 | 
						|
		$allowed_html = array(
 | 
						|
			'a'      => array(
 | 
						|
				'href'   => array(),
 | 
						|
				'id'     => array(),
 | 
						|
				'target' => array(),
 | 
						|
			),
 | 
						|
			'br'     => array(),
 | 
						|
			'div'    => array(
 | 
						|
				'class' => array(),
 | 
						|
				'id'    => array(),
 | 
						|
			),
 | 
						|
			'em'     => array(),
 | 
						|
			'h3'     => array(),
 | 
						|
			'input'  => array(
 | 
						|
				'checked'     => array(),
 | 
						|
				'class'       => array(),
 | 
						|
				'data-choice' => array(),
 | 
						|
				'id'          => array(),
 | 
						|
				'name'        => array(),
 | 
						|
				'type'        => array(),
 | 
						|
				'value'       => array(),
 | 
						|
			),
 | 
						|
			'label'  => array(
 | 
						|
				'for' => array(),
 | 
						|
			),
 | 
						|
			'p'      => array(
 | 
						|
				'class' => array(),
 | 
						|
				'id'    => array(),
 | 
						|
			),
 | 
						|
			'span'   => array(
 | 
						|
				'class' => array(),
 | 
						|
				'id'    => array(),
 | 
						|
			),
 | 
						|
			'strong' => array(),
 | 
						|
			'table'  => array(
 | 
						|
				'class' => array(),
 | 
						|
				'id'    => array(),
 | 
						|
			),
 | 
						|
			'tbody'  => array(),
 | 
						|
			'td'     => array(),
 | 
						|
			'th'     => array(),
 | 
						|
			'thead'  => array(),
 | 
						|
			'tr'     => array(),
 | 
						|
		);
 | 
						|
 | 
						|
		do_action( 'w3tc-dashboard-head' );
 | 
						|
		?>
 | 
						|
<div class="wrap" id="w3tc">
 | 
						|
	<?php \W3TC\Util_Ui::print_breadcrumb(); ?>
 | 
						|
	<div id="w3tc-wizard-container">
 | 
						|
 | 
						|
		<div id="w3tc_wizard_header">
 | 
						|
			<img id="w3tc_wizard_icon" src="<?php echo esc_url( plugins_url( '/w3-total-cache/pub/img/w3tc_cube-shadow.png' ) ); ?>" />
 | 
						|
			<div id="w3tc_wizard_title">
 | 
						|
				<span>TOTAL</span> <span>CACHE</span><span>:</span> <span><?php echo esc_html( $this->config['title'] ); ?></span>
 | 
						|
			</div>
 | 
						|
		</div>
 | 
						|
 | 
						|
		<div id="w3tc_wizard_content">
 | 
						|
 | 
						|
			<ul id="w3tc-options-menu">
 | 
						|
			<?php
 | 
						|
			foreach ( $this->config['steps'] as $number => $step ) {
 | 
						|
				$number++;
 | 
						|
				$element_id = 'w3tc-wizard-step-' . ( isset( $step['id'] ) ? $step['id'] : $number );
 | 
						|
				if ( isset( $this->config['steps_location'] ) && 'left' === $this->config['steps_location'] ) {
 | 
						|
					?>
 | 
						|
					<li id="<?php echo esc_attr( $element_id ); ?>">
 | 
						|
						<?php echo esc_html( $step['text'] ); ?>
 | 
						|
				</li>
 | 
						|
					<?php
 | 
						|
				} else {
 | 
						|
					?>
 | 
						|
					<li id="<?php echo esc_attr( $element_id ); ?>"><?php echo esc_html( $number ); ?></li>
 | 
						|
					<li id="<?php echo esc_attr( $element_id ); ?>-text"><?php echo esc_html( $step['text'] ); ?></li>
 | 
						|
					<?php
 | 
						|
				}
 | 
						|
			}
 | 
						|
			?>
 | 
						|
			</ul>
 | 
						|
 | 
						|
			<?php
 | 
						|
			// The first slide is visible.
 | 
						|
			$hidden = '';
 | 
						|
 | 
						|
			foreach ( $this->config['slides'] as $number => $slide ) {
 | 
						|
				$number++;
 | 
						|
				$element_id = 'w3tc-wizard-slide-' . ( isset( $slide['id'] ) ? $slide['id'] : $number );
 | 
						|
				?>
 | 
						|
				<div id="<?php echo esc_attr( $element_id ); ?>" class="w3tc-wizard-slides<?php echo esc_attr( $hidden ); ?>">
 | 
						|
					<h3><?php echo wp_kses( $slide['headline'], $allowed_html ); ?></h3>
 | 
						|
					<?php echo wp_kses( $slide['markup'], $allowed_html ); ?>
 | 
						|
				</div>
 | 
						|
				<?php
 | 
						|
				// All subsequent slides are hidden.
 | 
						|
				$hidden = ' hidden';
 | 
						|
			}
 | 
						|
 | 
						|
			unset( $hidden );
 | 
						|
			?>
 | 
						|
 | 
						|
		</div>
 | 
						|
 | 
						|
		<div id="w3tc_wizard_footer">
 | 
						|
			<div id="w3tc-wizard-buttons">
 | 
						|
				<span>
 | 
						|
					<button id="w3tc-wizard-skip" class="w3tc-wizard-buttons"><?php esc_html_e( 'SKIP', 'w3-total-cache' ); ?></button>
 | 
						|
				</span>
 | 
						|
				<span id="w3tc-wizard-previous-span" class="hidden">
 | 
						|
					<button id="w3tc-wizard-previous" class="w3tc-wizard-buttons"><?php esc_html_e( 'PREVIOUS', 'w3-total-cache' ); ?></button>
 | 
						|
				</span>
 | 
						|
				<span>
 | 
						|
					<button id="w3tc-wizard-next" class="w3tc-wizard-buttons"><?php esc_html_e( 'NEXT', 'w3-total-cache' ); ?></button>
 | 
						|
				</span>
 | 
						|
				<span id="w3tc-wizard-dashboard-span" class="hidden">
 | 
						|
					<button id="w3tc-wizard-dashboard" class="w3tc-wizard-buttons"><?php esc_html_e( 'DASHBOARD', 'w3-total-cache' ); ?></button>
 | 
						|
				</span>
 | 
						|
			</div>
 | 
						|
		</div>
 | 
						|
 | 
						|
			<?php wp_nonce_field( 'w3tc_wizard' ); ?>
 | 
						|
		<div id="test-results" class="hidden"></div>
 | 
						|
	</div>
 | 
						|
 | 
						|
		<?php
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Add hooks.
 | 
						|
	 *
 | 
						|
	 * @since 2.0.0
 | 
						|
	 *
 | 
						|
	 * @see self::enqueue_scripts()
 | 
						|
	 * @see self::enqueue_styles()
 | 
						|
	 */
 | 
						|
	public function add_hooks() {
 | 
						|
		add_action(
 | 
						|
			'admin_enqueue_scripts',
 | 
						|
			array(
 | 
						|
				$this,
 | 
						|
				'enqueue_scripts',
 | 
						|
			)
 | 
						|
		);
 | 
						|
 | 
						|
		add_action(
 | 
						|
			'admin_enqueue_scripts',
 | 
						|
			array(
 | 
						|
				$this,
 | 
						|
				'enqueue_styles',
 | 
						|
			)
 | 
						|
		);
 | 
						|
 | 
						|
		if ( isset( $this->config['actions'] ) && is_array( $this->config['actions'] ) ) {
 | 
						|
			foreach ( $this->config['actions'] as $action ) {
 | 
						|
				add_action(
 | 
						|
					$action['tag'],
 | 
						|
					$action['function'],
 | 
						|
					empty( $action['priority'] ) ? 10 : $action['priority'],
 | 
						|
					empty( $action['accepted_args'] ) ? 1 : $action['accepted_args']
 | 
						|
				);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		if ( isset( $this->config['filters'] ) && is_array( $this->config['filters'] ) ) {
 | 
						|
			foreach ( $this->config['filters'] as $filter ) {
 | 
						|
				add_filter(
 | 
						|
					$filter['tag'],
 | 
						|
					$filter['function'],
 | 
						|
					empty( $filter['priority'] ) ? 10 : $filter['priority'],
 | 
						|
					empty( $filter['accepted_args'] ) ? 1 : $filter['accepted_args']
 | 
						|
				);
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Rnqueue scripts.
 | 
						|
	 *
 | 
						|
	 * @since 2.0.0
 | 
						|
	 */
 | 
						|
	public function enqueue_scripts() {
 | 
						|
		wp_enqueue_script(
 | 
						|
			'w3tc_wizard',
 | 
						|
			esc_url( plugin_dir_url( dirname( dirname( __FILE__ ) ) ) . 'pub/js/wizard.js' ),
 | 
						|
			array( 'jquery' ),
 | 
						|
			W3TC_VERSION,
 | 
						|
			false
 | 
						|
		);
 | 
						|
 | 
						|
		wp_localize_script(
 | 
						|
			'w3tc_wizard',
 | 
						|
			'W3TC_Wizard',
 | 
						|
			array(
 | 
						|
				'beforeunloadText' => __( 'Are you sure that you want to leave this page?', 'w3-total-cache' ),
 | 
						|
			)
 | 
						|
		);
 | 
						|
 | 
						|
		wp_enqueue_script( 'w3tc_wizard' );
 | 
						|
 | 
						|
		if ( isset( $this->config['scripts'] ) && is_array( $this->config['scripts'] ) ) {
 | 
						|
			foreach ( $this->config['scripts'] as $script ) {
 | 
						|
				wp_register_script(
 | 
						|
					$script['handle'],
 | 
						|
					$script['src'],
 | 
						|
					is_array( $script['deps'] ) ? $script['deps'] : array(),
 | 
						|
					empty( $script['version'] ) ? gmdate( 'YmdHm' ) : $script['version'],
 | 
						|
					! empty( $script['in_footer'] )
 | 
						|
				);
 | 
						|
 | 
						|
				if ( isset( $script['localize'] ) && is_array( $script['localize'] ) ) {
 | 
						|
					wp_localize_script(
 | 
						|
						$script['handle'],
 | 
						|
						$script['localize']['object_name'],
 | 
						|
						(array) $script['localize']['data']
 | 
						|
					);
 | 
						|
				}
 | 
						|
 | 
						|
				wp_enqueue_script( $script['handle'] );
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Enqueue styles.
 | 
						|
	 *
 | 
						|
	 * @since 2.0.0
 | 
						|
	 */
 | 
						|
	public function enqueue_styles() {
 | 
						|
		wp_enqueue_style(
 | 
						|
			'w3tc_wizard',
 | 
						|
			esc_url( plugin_dir_url( dirname( dirname( __FILE__ ) ) ) . 'pub/css/wizard.css' ),
 | 
						|
			array(),
 | 
						|
			W3TC_VERSION
 | 
						|
		);
 | 
						|
 | 
						|
		if ( isset( $this->config['styles'] ) && is_array( $this->config['styles'] ) ) {
 | 
						|
			foreach ( $this->config['styles'] as $style ) {
 | 
						|
				wp_enqueue_style(
 | 
						|
					$style['handle'],
 | 
						|
					$style['src'],
 | 
						|
					isset( $style['deps'] ) && is_array( $style['deps'] ) ?
 | 
						|
						$style['deps'] : array(),
 | 
						|
					! empty( $style['version'] ) ? $style['version'] : gmdate( 'YmdHm' ),
 | 
						|
					! empty( $style['media'] ) ? $style['media'] : 'all'
 | 
						|
				);
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |