X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/41578db67d72562346e4dbb2a14889b23d522813..9e77185fafaf4e60e2b73821e0e4b9b1a11fb85f:/wp-includes/class-wp-customize-manager.php?ds=sidebyside diff --git a/wp-includes/class-wp-customize-manager.php b/wp-includes/class-wp-customize-manager.php index 8ed4e699..4465a805 100644 --- a/wp-includes/class-wp-customize-manager.php +++ b/wp-includes/class-wp-customize-manager.php @@ -16,7 +16,7 @@ */ final class WP_Customize_Manager { /** - * An instance of the theme that is being customized. + * An instance of the theme being previewed. * * @var WP_Theme */ @@ -30,8 +30,7 @@ final class WP_Customize_Manager { protected $original_stylesheet; /** - * Whether filters have been set to change the active theme to the theme being - * customized. + * Whether this is a Customizer pageload. * * @var boolean */ @@ -44,9 +43,11 @@ final class WP_Customize_Manager { */ public $widgets; - protected $settings = array(); - protected $sections = array(); - protected $controls = array(); + protected $settings = array(); + protected $containers = array(); + protected $panels = array(); + protected $sections = array(); + protected $controls = array(); protected $nonce_tick; @@ -66,6 +67,7 @@ final class WP_Customize_Manager { */ public function __construct() { require( ABSPATH . WPINC . '/class-wp-customize-setting.php' ); + require( ABSPATH . WPINC . '/class-wp-customize-panel.php' ); require( ABSPATH . WPINC . '/class-wp-customize-section.php' ); require( ABSPATH . WPINC . '/class-wp-customize-control.php' ); require( ABSPATH . WPINC . '/class-wp-customize-widgets.php' ); @@ -156,8 +158,9 @@ final class WP_Customize_Manager { show_admin_bar( false ); - if ( ! current_user_can( 'edit_theme_options' ) ) + if ( ! current_user_can( 'customize' ) ) { $this->wp_die( -1 ); + } $this->original_stylesheet = get_stylesheet(); @@ -181,7 +184,6 @@ final class WP_Customize_Manager { $this->wp_die( -1 ); } - // All good, let's do some internal business to preview the theme. $this->start_previewing_theme(); } @@ -190,7 +192,7 @@ final class WP_Customize_Manager { * * @since 3.4.0 */ - function after_setup_theme() { + public function after_setup_theme() { if ( ! $this->doing_ajax() && ! validate_current_theme() ) { wp_redirect( 'themes.php?broken=true' ); exit; @@ -198,7 +200,8 @@ final class WP_Customize_Manager { } /** - * Start previewing the selected theme by adding filters to change the current theme. + * If the theme to be previewed isn't the active theme, add filter callbacks + * to swap it out at runtime. * * @since 3.4.0 */ @@ -303,6 +306,17 @@ final class WP_Customize_Manager { return $this->controls; } + /** + * Get the registered containers. + * + * @since 4.0.0 + * + * @return array + */ + public function containers() { + return $this->containers; + } + /** * Get the registered sections. * @@ -314,6 +328,18 @@ final class WP_Customize_Manager { return $this->sections; } + /** + * Get the registered panels. + * + * @since 4.0.0 + * @access public + * + * @return array Panels. + */ + public function panels() { + return $this->panels; + } + /** * Checks if the current theme is active. * @@ -394,6 +420,7 @@ final class WP_Customize_Manager { $this->prepare_controls(); wp_enqueue_script( 'customize-preview' ); + add_action( 'wp', array( $this, 'customize_preview_override_404_status' ) ); add_action( 'wp_head', array( $this, 'customize_preview_base' ) ); add_action( 'wp_head', array( $this, 'customize_preview_html5' ) ); add_action( 'wp_footer', array( $this, 'customize_preview_settings' ), 20 ); @@ -415,6 +442,19 @@ final class WP_Customize_Manager { do_action( 'customize_preview_init', $this ); } + /** + * Prevent sending a 404 status when returning the response for the customize + * preview, since it causes the jQuery AJAX to fail. Send 200 instead. + * + * @since 4.0.0 + * @access public + */ + public function customize_preview_override_404_status() { + if ( is_404() ) { + status_header( 200 ); + } + } + /** * Print base element for preview frame. * @@ -450,7 +490,8 @@ final class WP_Customize_Manager { public function customize_preview_settings() { $settings = array( 'values' => array(), - 'channel' => esc_js( $_POST['customize_messenger_channel'] ), + 'channel' => wp_unslash( $_POST['customize_messenger_channel'] ), + 'activeControls' => array(), ); if ( 2 == $this->nonce_tick ) { @@ -463,6 +504,9 @@ final class WP_Customize_Manager { foreach ( $this->settings as $id => $setting ) { $settings['values'][ $id ] = $setting->js_value(); } + foreach ( $this->controls as $id => $control ) { + $settings['activeControls'][ $id ] = $control->active(); + } ?>