Changeset 37476 for trunk/src/wp-includes/class-wp-customize-manager.php
- Timestamp:
- 05/20/2016 09:09:40 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/class-wp-customize-manager.php
r37342 r37476 655 655 * 656 656 * @since 3.4.0 657 * @since 4.1.1 Introduced 'default' parameter. 658 * 659 * @param WP_Customize_Setting $setting A WP_Customize_Setting derived object 660 * @param mixed $default value returned $setting has no post value (added in 4.2.0). 661 * @return string|mixed $post_value Sanitized value or the $default provided 657 * @since 4.1.1 Introduced `$default` parameter. 658 * @since 4.6.0 Return `$default` when setting post value is invalid. 659 * @see WP_REST_Server::dispatch() 660 * @see WP_Rest_Request::sanitize_params() 661 * @see WP_Rest_Request::has_valid_params() 662 * 663 * @param WP_Customize_Setting $setting A WP_Customize_Setting derived object. 664 * @param mixed $default Value returned $setting has no post value (added in 4.2.0) 665 * or the post value is invalid (added in 4.6.0). 666 * @return string|mixed $post_value Sanitized value or the $default provided. 662 667 */ 663 668 public function post_value( $setting, $default = null ) { 664 669 $post_values = $this->unsanitized_post_values(); 665 if ( array_key_exists( $setting->id, $post_values ) ) { 666 return $setting->sanitize( $post_values[ $setting->id ] ); 667 } else { 670 if ( ! array_key_exists( $setting->id, $post_values ) ) { 668 671 return $default; 669 672 } 673 $value = $setting->sanitize( $post_values[ $setting->id ] ); 674 if ( is_null( $value ) || is_wp_error( $value ) ) { 675 return $default; 676 } 677 $valid = $setting->validate( $value ); 678 if ( is_wp_error( $valid ) ) { 679 return $default; 680 } 681 return $value; 670 682 } 671 683 … … 971 983 972 984 /** 985 * Validate setting values. 986 * 987 * Sanitization is applied to the values before being passed for validation. 988 * Validation is skipped for unregistered settings or for values that are 989 * already null since they will be skipped anyway. 990 * 991 * @since 4.6.0 992 * @access public 993 * @see WP_REST_Request::has_valid_params() 994 * 995 * @param array $setting_values Mapping of setting IDs to values to sanitize and validate. 996 * @return array Empty array if all settings were valid. One or more instances of `WP_Error` if any were invalid. 997 */ 998 public function validate_setting_values( $setting_values ) { 999 $validity_errors = array(); 1000 foreach ( $setting_values as $setting_id => $unsanitized_value ) { 1001 $setting = $this->get_setting( $setting_id ); 1002 if ( ! $setting || is_null( $unsanitized_value ) ) { 1003 continue; 1004 } 1005 $validity = $setting->validate( $setting->sanitize( $unsanitized_value ) ); 1006 if ( false === $validity || null === $validity ) { 1007 $validity = new WP_Error( 'invalid_value', __( 'Invalid value.' ) ); 1008 } 1009 if ( is_wp_error( $validity ) ) { 1010 $validity_errors[ $setting_id ] = $validity; 1011 } 1012 } 1013 return $validity_errors; 1014 } 1015 1016 /** 973 1017 * Switch the theme and trigger the save() method on each setting. 974 1018 * … … 983 1027 if ( ! check_ajax_referer( $action, 'nonce', false ) ) { 984 1028 wp_send_json_error( 'invalid_nonce' ); 1029 } 1030 1031 /** 1032 * Fires before save validation happens. 1033 * 1034 * Plugins can add just-in-time `customize_validate_{$setting_id}` filters 1035 * at this point to catch any settings registered after `customize_register`. 1036 * 1037 * @since 4.6.0 1038 * 1039 * @param WP_Customize_Manager $this WP_Customize_Manager instance. 1040 */ 1041 do_action( 'customize_save_validation_before', $this ); 1042 1043 // Validate settings. 1044 $validity_errors = $this->validate_setting_values( $this->unsanitized_post_values() ); 1045 $invalid_count = count( $validity_errors ); 1046 if ( $invalid_count > 0 ) { 1047 $settings_errors = array(); 1048 foreach ( $validity_errors as $setting_id => $validity_error ) { 1049 $settings_errors[ $setting_id ] = array(); 1050 foreach ( $validity_error->errors as $error_code => $error_messages ) { 1051 $settings_errors[ $setting_id ][ $error_code ] = array( 1052 'message' => join( ' ', $error_messages ), 1053 'data' => $validity_error->get_error_data( $error_code ), 1054 ); 1055 } 1056 } 1057 $response = array( 1058 'invalid_settings' => $settings_errors, 1059 'message' => sprintf( _n( 'There is %s invalid setting.', 'There are %s invalid settings.', $invalid_count ), number_format_i18n( $invalid_count ) ), 1060 ); 1061 1062 /** This filter is documented in wp-includes/class-wp-customize-manager.php */ 1063 $response = apply_filters( 'customize_save_response', $response, $this ); 1064 wp_send_json_error( $response ); 985 1065 } 986 1066 … … 1404 1484 $control->print_template(); 1405 1485 } 1486 ?> 1487 <script type="text/html" id="tmpl-customize-control-notifications"> 1488 <ul> 1489 <# _.each( data.notifications, function( notification ) { #> 1490 <li class="notice notice-{{ notification.type || 'info' }} {{ data.altNotice ? 'notice-alt' : '' }}" data-code="{{ notification.code }}" data-type="{{ notification.type }}">{{ notification.message || notification.code }}</li> 1491 <# } ); #> 1492 </ul> 1493 </script> 1494 <?php 1406 1495 } 1407 1496 … … 1764 1853 "s[%s] = %s;\n", 1765 1854 wp_json_encode( $setting->id ), 1766 wp_json_encode( array( 1767 'value' => $setting->js_value(), 1768 'transport' => $setting->transport, 1769 'dirty' => $setting->dirty, 1770 ) ) 1855 wp_json_encode( $setting->json() ) 1771 1856 ); 1772 1857 }
Note: See TracChangeset
for help on using the changeset viewer.