all-in-one-event-calendar/lib/command/change-theme.php
2017-11-09 17:36:04 +01:00

73 lines
2.2 KiB
PHP

<?php
/**
* The concrete command that change active theme.
*
* @author Time.ly Network Inc.
* @since 2.0
*
* @package AI1EC
* @subpackage AI1EC.Command
*/
class Ai1ec_Command_Change_Theme extends Ai1ec_Command {
/**
* Executes the command to change the active theme.
*
* NOTE: {@see self::is_this_to_execute} must return true for this command
* to execute; we can trust that input has been checked for injections.
*/
public function do_execute() {
// Update the active theme in the options table.
$stylesheet = preg_replace(
'|[^a-z_\-]+|i',
'',
$_GET['ai1ec_stylesheet']
);
$this->_registry->get( 'theme.loader' )->switch_theme( array(
'theme_root' => realpath( $_GET['ai1ec_theme_root'] ),
'theme_dir' => realpath( $_GET['ai1ec_theme_dir'] ),
'theme_url' => $_GET['ai1ec_theme_url'],
'stylesheet' => $stylesheet,
'legacy' => false
) );
// Return user to themes list page with success message.
return array(
'url' => ai1ec_admin_url(
'edit.php?post_type=ai1ec_event&page=all-in-one-event-calendar-themes'
),
'query_args' => array(
'activated' => 1
)
);
}
/* (non-PHPdoc)
* @see Ai1ec_Command_Save_Abstract::set_render_strategy()
*/
public function set_render_strategy( Ai1ec_Request_Parser $request ) {
$this->_render_strategy = $this->_registry->get(
'http.response.render.strategy.redirect'
);
}
/* (non-PHPdoc)
* @see Ai1ec_Command::is_this_to_execute()
*/
public function is_this_to_execute() {
if (
isset( $_GET['ai1ec_action'] ) &&
$_GET['ai1ec_action'] === 'activate_theme' &&
current_user_can( 'switch_ai1ec_themes' ) &&
is_dir( $_GET['ai1ec_theme_dir'] ) &&
is_dir( $_GET['ai1ec_theme_root'] )
) {
check_admin_referer(
'switch-ai1ec_theme_' . $_GET['ai1ec_stylesheet']
);
return true;
}
return false;
}
}