diff -r c7c34916027a -r 177826044cd9 wp/wp-includes/class-wp-customize-setting.php --- a/wp/wp-includes/class-wp-customize-setting.php Mon Oct 14 18:06:33 2019 +0200 +++ b/wp/wp-includes/class-wp-customize-setting.php Mon Oct 14 18:28:13 2019 +0200 @@ -66,9 +66,9 @@ public $default = ''; /** - * Options for rendering the live preview of changes in Theme Customizer. + * Options for rendering the live preview of changes in Customizer. * - * Set this value to 'postMessage' to enable a custom Javascript handler to render changes to this setting + * Set this value to 'postMessage' to enable a custom JavaScript handler to render changes to this setting * as opposed to reloading the whole page. * * @link https://developer.wordpress.org/themes/customize-api @@ -135,7 +135,6 @@ * Cache of multidimensional values to improve performance. * * @since 4.4.0 - * @static * @var array */ protected static $aggregated_multidimensionals = array(); @@ -169,15 +168,15 @@ } $this->manager = $manager; - $this->id = $id; + $this->id = $id; // Parse the ID for array keys. $this->id_data['keys'] = preg_split( '/\[/', str_replace( ']', '', $this->id ) ); $this->id_data['base'] = array_shift( $this->id_data['keys'] ); // Rebuild the ID. - $this->id = $this->id_data[ 'base' ]; - if ( ! empty( $this->id_data[ 'keys' ] ) ) { + $this->id = $this->id_data['base']; + if ( ! empty( $this->id_data['keys'] ) ) { $this->id .= '[' . implode( '][', $this->id_data['keys'] ) . ']'; } @@ -311,8 +310,8 @@ return true; } - $id_base = $this->id_data['base']; - $is_multidimensional = ! empty( $this->id_data['keys'] ); + $id_base = $this->id_data['base']; + $is_multidimensional = ! empty( $this->id_data['keys'] ); $multidimensional_filter = array( $this, '_multidimensional_preview_filter' ); /* @@ -321,19 +320,19 @@ * then the preview short-circuits because there is nothing that needs * to be previewed. */ - $undefined = new stdClass(); + $undefined = new stdClass(); $needs_preview = ( $undefined !== $this->post_value( $undefined ) ); - $value = null; + $value = null; // Since no post value was defined, check if we have an initial value set. if ( ! $needs_preview ) { if ( $this->is_multidimensional_aggregated ) { - $root = self::$aggregated_multidimensionals[ $this->type ][ $id_base ]['root_value']; + $root = self::$aggregated_multidimensionals[ $this->type ][ $id_base ]['root_value']; $value = $this->multidimensional_get( $root, $this->id_data['keys'], $undefined ); } else { - $default = $this->default; + $default = $this->default; $this->default = $undefined; // Temporarily set default to undefined so we can detect if existing value is set. - $value = $this->value(); + $value = $this->value(); $this->default = $default; } $needs_preview = ( $undefined === $value ); // Because the default needs to be supplied. @@ -348,7 +347,7 @@ } switch ( $this->type ) { - case 'theme_mod' : + case 'theme_mod': if ( ! $is_multidimensional ) { add_filter( "theme_mod_{$id_base}", array( $this, '_preview_filter' ) ); } else { @@ -359,7 +358,7 @@ self::$aggregated_multidimensionals[ $this->type ][ $id_base ]['previewed_instances'][ $this->id ] = $this; } break; - case 'option' : + case 'option': if ( ! $is_multidimensional ) { add_filter( "pre_option_{$id_base}", array( $this, '_preview_filter' ) ); } else { @@ -371,8 +370,7 @@ self::$aggregated_multidimensionals[ $this->type ][ $id_base ]['previewed_instances'][ $this->id ] = $this; } break; - default : - + default: /** * Fires when the WP_Customize_Setting::preview() method is called for settings * not handled as theme_mods or options. @@ -436,7 +434,7 @@ return $original; } - $undefined = new stdClass(); // Symbol hack. + $undefined = new stdClass(); // Symbol hack. $post_value = $this->post_value( $undefined ); if ( $undefined !== $post_value ) { $value = $post_value; @@ -483,8 +481,8 @@ // Do the replacements of the posted/default sub value into the root value. $value = $previewed_setting->post_value( $previewed_setting->default ); - $root = self::$aggregated_multidimensionals[ $previewed_setting->type ][ $id_base ]['root_value']; - $root = $previewed_setting->multidimensional_replace( $root, $previewed_setting->id_data['keys'], $value ); + $root = self::$aggregated_multidimensionals[ $previewed_setting->type ][ $id_base ]['root_value']; + $root = $previewed_setting->multidimensional_replace( $root, $previewed_setting->id_data['keys'], $value ); self::$aggregated_multidimensionals[ $previewed_setting->type ][ $id_base ]['root_value'] = $root; // Mark this setting having been applied so that it will be skipped when the filter is called again. @@ -596,7 +594,7 @@ */ $validity = apply_filters( "customize_validate_{$this->id}", $validity, $value, $this ); - if ( is_wp_error( $validity ) && empty( $validity->errors ) ) { + if ( is_wp_error( $validity ) && ! $validity->has_errors() ) { $validity = true; } return $validity; @@ -720,7 +718,7 @@ * @return mixed The value. */ public function value() { - $id_base = $this->id_data['base']; + $id_base = $this->id_data['base']; $is_core_type = ( 'option' === $this->type || 'theme_mod' === $this->type ); if ( ! $is_core_type && ! $this->is_multidimensional_aggregated ) { @@ -753,7 +751,7 @@ $value = apply_filters( "customize_value_{$id_base}", $value, $this ); } elseif ( $this->is_multidimensional_aggregated ) { $root_value = self::$aggregated_multidimensionals[ $this->type ][ $id_base ]['root_value']; - $value = $this->multidimensional_get( $root_value, $this->id_data['keys'], $this->default ); + $value = $this->multidimensional_get( $root_value, $this->id_data['keys'], $this->default ); // Ensure that the post value is used if the setting is previewed, since preview filters aren't applying on cached $root_value. if ( $this->is_previewed ) { @@ -786,8 +784,9 @@ */ $value = apply_filters( "customize_sanitize_js_{$this->id}", $this->value(), $this ); - if ( is_string( $value ) ) - return html_entity_decode( $value, ENT_QUOTES, 'UTF-8'); + if ( is_string( $value ) ) { + return html_entity_decode( $value, ENT_QUOTES, 'UTF-8' ); + } return $value; } @@ -816,11 +815,13 @@ * @return bool False if theme doesn't support the setting or user can't change setting, otherwise true. */ final public function check_capabilities() { - if ( $this->capability && ! call_user_func_array( 'current_user_can', (array) $this->capability ) ) + if ( $this->capability && ! call_user_func_array( 'current_user_can', (array) $this->capability ) ) { return false; + } - if ( $this->theme_supports && ! call_user_func_array( 'current_theme_supports', (array) $this->theme_supports ) ) + if ( $this->theme_supports && ! call_user_func_array( 'current_theme_supports', (array) $this->theme_supports ) ) { return false; + } return true; } @@ -836,21 +837,25 @@ * @return array|void Keys are 'root', 'node', and 'key'. */ final protected function multidimensional( &$root, $keys, $create = false ) { - if ( $create && empty( $root ) ) + if ( $create && empty( $root ) ) { $root = array(); + } - if ( ! isset( $root ) || empty( $keys ) ) + if ( ! isset( $root ) || empty( $keys ) ) { return; + } $last = array_pop( $keys ); $node = &$root; foreach ( $keys as $key ) { - if ( $create && ! isset( $node[ $key ] ) ) + if ( $create && ! isset( $node[ $key ] ) ) { $node[ $key ] = array(); + } - if ( ! is_array( $node ) || ! isset( $node[ $key ] ) ) + if ( ! is_array( $node ) || ! isset( $node[ $key ] ) ) { return; + } $node = &$node[ $key ]; } @@ -865,8 +870,9 @@ } } - if ( ! isset( $node[ $last ] ) ) + if ( ! isset( $node[ $last ] ) ) { return; + } return array( 'root' => &$root, @@ -886,15 +892,17 @@ * @return mixed */ final protected function multidimensional_replace( $root, $keys, $value ) { - if ( ! isset( $value ) ) + if ( ! isset( $value ) ) { return $root; - elseif ( empty( $keys ) ) // If there are no keys, we're replacing the root. + } elseif ( empty( $keys ) ) { // If there are no keys, we're replacing the root. return $value; + } $result = $this->multidimensional( $root, $keys, true ); - if ( isset( $result ) ) + if ( isset( $result ) ) { $result['node'][ $result['key'] ] = $value; + } return $root; } @@ -910,8 +918,9 @@ * @return mixed The requested value or the default value. */ final protected function multidimensional_get( $root, $keys, $default = null ) { - if ( empty( $keys ) ) // If there are no keys, test the root. + if ( empty( $keys ) ) { // If there are no keys, test the root. return isset( $root ) ? $root : $default; + } $result = $this->multidimensional( $root, $keys ); return isset( $result ) ? $result['node'][ $result['key'] ] : $default;