<?php
/**
- * Customize
+ * Customize Manager.
*
* @package WordPress
* @subpackage Customize
* @since 3.4.0
*/
-
final class WP_Customize_Manager {
protected $theme;
protected $original_stylesheet;
add_action( 'customize_controls_enqueue_scripts', array( $this, 'enqueue_control_scripts' ) );
}
- /**
+ /**
* Return true if it's an AJAX request.
*
* @since 3.4.0
+ *
+ * @return bool
*/
public function doing_ajax() {
return isset( $_POST['customized'] ) || ( defined( 'DOING_AJAX' ) && DOING_AJAX );
* Custom wp_die wrapper. Returns either the standard message for UI
* or the AJAX message.
*
- * @param mixed $ajax_message AJAX return
- * @param mixed $message UI message
- *
* @since 3.4.0
+ *
+ * @param mixed $ajax_message AJAX return
+ * @param mixed $message UI message
*/
protected function wp_die( $ajax_message, $message = null ) {
if ( $this->doing_ajax() )
* Return the AJAX wp_die() handler if it's a customized request.
*
* @since 3.4.0
+ *
+ * @return string
*/
public function wp_die_handler() {
if ( $this->doing_ajax() )
return '_default_wp_die_handler';
}
+
/**
- * Start preview and customize theme.
- *
- * Check if customize query variable exist. Init filters to filter the current theme.
+ * Start preview and customize theme.
+ *
+ * Check if customize query variable exist. Init filters to filter the current theme.
*
* @since 3.4.0
*/
$this->start_previewing_theme();
}
+ /**
+ * Callback to validate a theme once it is loaded
+ *
+ * @since 3.4.0
+ */
function after_setup_theme() {
if ( ! $this->doing_ajax() && ! validate_current_theme() ) {
wp_redirect( 'themes.php?broken=true' );
* Instead, the JS will sniff out the location header.
*
* @since 3.4.0
+ *
+ * @param $status
+ * @return int
*/
public function wp_redirect_status( $status ) {
if ( $this->is_preview() && ! is_admin() )
* Decode the $_POST attribute used to override the WP_Customize_Setting values.
*
* @since 3.4.0
+ *
+ * @param mixed $setting A WP_Customize_Setting derived object
+ * @return string Sanitized attribute
*/
public function post_value( $setting ) {
if ( ! isset( $this->_post_values ) ) {
if ( isset( $_POST['customized'] ) )
- $this->_post_values = json_decode( stripslashes( $_POST['customized'] ), true );
+ $this->_post_values = json_decode( wp_unslash( $_POST['customized'] ), true );
else
$this->_post_values = false;
}
);
if ( 2 == $this->nonce_tick ) {
- $settings['nonce'] = array(
- 'save' => wp_create_nonce( 'save-customize_' . $this->get_stylesheet() ),
- 'preview' => wp_create_nonce( 'preview-customize_' . $this->get_stylesheet() )
- );
- }
+ $settings['nonce'] = array(
+ 'save' => wp_create_nonce( 'save-customize_' . $this->get_stylesheet() ),
+ 'preview' => wp_create_nonce( 'preview-customize_' . $this->get_stylesheet() )
+ );
+ }
foreach ( $this->settings as $id => $setting ) {
$settings['values'][ $id ] = $setting->js_value();
*
* @since 3.4.0
*
+ * @param $current_theme {@internal Parameter is not used}
* @return string Theme name.
*/
public function current_theme( $current_theme ) {
// Temporarily stop previewing the theme to allow switch_themes()
// to operate properly.
$this->stop_previewing_theme();
- switch_theme( $this->get_template(), $this->get_stylesheet() );
+ switch_theme( $this->get_stylesheet() );
$this->start_previewing_theme();
}
$setting->save();
}
+ do_action( 'customize_save_after', $this );
+
die;
}
*
* @param object $a Object A.
* @param object $b Object B.
+ * @return int
*/
protected final function _cmp_priority( $a, $b ) {
$ap = $a->priority;
if ( $menus ) {
$choices = array( 0 => __( '— Select —' ) );
foreach ( $menus as $menu ) {
- $truncated_name = wp_html_excerpt( $menu->name, 40 );
- $truncated_name = ( $truncated_name == $menu->name ) ? $menu->name : trim( $truncated_name ) . '…';
- $choices[ $menu->term_id ] = $truncated_name;
+ $choices[ $menu->term_id ] = wp_html_excerpt( $menu->name, 40, '…' );
}
foreach ( $locations as $location => $description ) {
* Callback for validating the header_textcolor value.
*
* Accepts 'blank', and otherwise uses sanitize_hex_color_no_hash().
+ * Returns default text color if hex color is empty.
*
* @since 3.4.0
+ *
+ * @param string $color
+ * @return string
*/
public function _sanitize_header_textcolor( $color ) {
- return ( 'blank' === $color ) ? 'blank' : sanitize_hex_color_no_hash( $color );
+ if ( 'blank' === $color )
+ return 'blank';
+
+ $color = sanitize_hex_color_no_hash( $color );
+ if ( empty( $color ) )
+ $color = get_theme_support( 'custom-header', 'default-text-color' );
+
+ return $color;
}
};
* For validating values without a #, see sanitize_hex_color_no_hash().
*
* @since 3.4.0
+ *
+ * @param string $color
+ * @return string|null
*/
function sanitize_hex_color( $color ) {
if ( '' === $color )
* Returns either '', a 3 or 6 digit hex color (without a #), or null.
*
* @since 3.4.0
+ * @uses sanitize_hex_color()
+ *
+ * @param string $color
+ * @return string|null
*/
function sanitize_hex_color_no_hash( $color ) {
$color = ltrim( $color, '#' );
* This method should only be necessary if using sanitize_hex_color_no_hash().
*
* @since 3.4.0
+ *
+ * @param string $color
+ * @return string
*/
function maybe_hash_hex_color( $color ) {
if ( $unhashed = sanitize_hex_color_no_hash( $color ) )