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'
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|