WordPress.org

Make WordPress Core

Ticket #45933: 45933.9.diff

File 45933.9.diff, 5.4 KB (added by spacedmonkey, 5 months ago)
  • src/wp-includes/functions.php

     
    30263026
    30273027        $have_gettext = function_exists( '__' );
    30283028
    3029         if ( function_exists( 'is_wp_error' ) && is_wp_error( $message ) ) {
    3030                 if ( empty( $title ) ) {
    3031                         $error_data = $message->get_error_data();
    3032                         if ( is_array( $error_data ) && isset( $error_data['title'] ) ) {
    3033                                 $title = $error_data['title'];
    3034                         }
    3035                 }
    3036                 $errors = $message->get_error_messages();
    3037                 switch ( count( $errors ) ) {
    3038                         case 0:
    3039                                 $message = '';
    3040                                 break;
    3041                         case 1:
    3042                                 $message = "<p>{$errors[0]}</p>";
    3043                                 break;
    3044                         default:
    3045                                 $message = "<ul>\n\t\t<li>" . join( "</li>\n\t\t<li>", $errors ) . "</li>\n\t</ul>";
    3046                                 break;
    3047                 }
    3048         } elseif ( is_string( $message ) ) {
    3049                 $message = "<p>$message</p>";
    3050         }
     3029        $result = _wp_die_process_input( $message, $title, $r );
     3030        if ( isset( $result['additional_errors'] ) && ! empty( $result['additional_errors'] ) ) {
     3031                $message = "<ul>\n\t\t<li>" . $result['message'] . "</li>\n\t\t<li>" . join( "</li>\n\t\t<li>", $result['additional_errors'] ) . "</li>\n\t</ul>";
     3032        } else {
     3033                $message = "<p>" . $result['message'] . "</p>";
     3034    }
    30513035
     3036
    30523037        if ( ! empty( $r['link_url'] ) && ! empty( $r['link_text'] ) ) {
    30533038                $link_url = $r['link_url'];
    30543039                if ( function_exists( 'esc_url' ) ) {
     
    30653050
    30663051        if ( ! did_action( 'admin_head' ) ) :
    30673052                if ( ! headers_sent() ) {
    3068                         status_header( $r['response'] );
     3053                        status_header( $result['data']['status'] );
    30693054                        nocache_headers();
    30703055                        header( 'Content-Type: text/html; charset=utf-8' );
    30713056                }
    30723057
    3073                 if ( empty( $title ) ) {
    3074                         $title = $have_gettext ? __( 'WordPress &rsaquo; Error' ) : 'WordPress &rsaquo; Error';
    3075                 }
    3076 
    30773058                $text_direction = 'ltr';
    30783059                if ( isset( $r['text_direction'] ) && 'rtl' == $r['text_direction'] ) {
    30793060                        $text_direction = 'rtl';
     
    30973078                        wp_no_robots();
    30983079                }
    30993080                ?>
    3100         <title><?php echo $title; ?></title>
     3081        <title><?php echo $result['data']['title']; ?></title>
    31013082        <style type="text/css">
    31023083                html {
    31033084                        background: #f1f1f1;
     
    32413222
    32423223        $r = wp_parse_args( $args, $defaults );
    32433224
    3244         $data = array(
    3245                 'code'    => 'wp_die',
    3246                 'message' => $message,
    3247                 'status'  => $r['response'],
    3248         );
     3225        $result = _wp_die_process_input( $message, $title, $r );
    32493226
    32503227        if ( ! headers_sent() ) {
    32513228                header( 'Content-Type: application/json; charset=utf-8' );
    3252                 if ( null !== $r['response'] ) {
    3253                         status_header( $r['response'] );
     3229                nocache_headers();
     3230                if ( null !== $result['data']['status'] ) {
     3231                        status_header( $result['data']['status'] );
    32543232                }
    32553233        }
    32563234
    3257         echo wp_json_encode( $data );
     3235        echo wp_json_encode( $result );
    32583236        die();
    32593237}
    32603238
     
    32763254        global $wp_xmlrpc_server;
    32773255        $defaults = array( 'response' => 500 );
    32783256
    3279         $r = wp_parse_args( $args, $defaults );
     3257        $r      = wp_parse_args( $args, $defaults );
     3258        $result = _wp_die_process_input( $message, $title, $r );
    32803259
    32813260        if ( $wp_xmlrpc_server ) {
    3282                 $error = new IXR_Error( $r['response'], $message );
     3261                $error = new IXR_Error( $result['data']['status'], $result['message'] );
    32833262                $wp_xmlrpc_server->output( $error->getXml() );
    32843263        }
    32853264        die();
     
    33033282        );
    33043283        $r        = wp_parse_args( $args, $defaults );
    33053284
    3306         if ( ! headers_sent() && null !== $r['response'] ) {
    3307                 status_header( $r['response'] );
     3285        $result = _wp_die_process_input( $message, $title, $r );
     3286
     3287        if ( ! headers_sent() && null !== $result['data']['status'] ) {
     3288                status_header( $result['data']['status'] );
     3289                nocache_headers();
    33083290        }
    33093291
    3310         if ( is_scalar( $message ) ) {
    3311                 die( (string) $message );
     3292        if ( is_scalar( $result['message'] ) ) {
     3293                die( (string) $result['message'] );
    33123294        }
    33133295        die( '0' );
    33143296}
     
    33313313}
    33323314
    33333315/**
     3316 * Helper function to process input from wp_die requests and format them into a usable array.
     3317 *
     3318 * @since 5.1.0
     3319 * @access private
     3320 *
     3321 * @param $message
     3322 * @param title
     3323 * @param array $args
     3324 *
     3325 * @return array $results
     3326 */
     3327function _wp_die_process_input( $message = '', $title = '', array $args = array() ) {
     3328
     3329        $defaults = array( 'response' => 500, 'code' => 'wp_die', );
     3330        $args = wp_parse_args( $args, $defaults );
     3331        $data = array(
     3332                'code'    => $args['code'],
     3333                'message' => '',
     3334                'data'    => array(),
     3335        );
     3336
     3337        if ( function_exists( 'is_wp_error' ) && is_wp_error( $message ) ) {
     3338                $errors = array();
     3339                foreach ( (array) $message->errors as $code => $messages ) {
     3340                        foreach ( (array) $messages as $display_message ) {
     3341                                $errors[] = array(
     3342                                        'code'    => $code,
     3343                                        'message' => $display_message,
     3344                                        'data'    => $message->get_error_data( $code ),
     3345                                );
     3346                        }
     3347                }
     3348                if ( $errors ) {
     3349                        $data = $errors[0];
     3350                        if ( count( $errors ) > 1 ) {
     3351                                // Remove the primary error.
     3352                                array_shift( $errors );
     3353                                $data['additional_errors'] = $errors;
     3354                        }
     3355                }
     3356
     3357                $error_data = $message->get_error_data();
     3358                if ( is_array( $error_data ) && isset( $error_data['title'] ) ) {
     3359                        $title = $error_data['title'];
     3360                }
     3361        } else {
     3362                $data ['message'] = $message;
     3363        }
     3364
     3365        if ( ! isset( $data['data']['status'] ) ) {
     3366                $data['data']['status'] = $args['response'];
     3367        }
     3368
     3369        if ( empty( $title ) ) {
     3370                $have_gettext = function_exists( '__' );
     3371                $title = $have_gettext ? __( 'WordPress &rsaquo; Error' ) : 'WordPress &rsaquo; Error';
     3372        }
     3373
     3374        $data['data']['title'] = $title;
     3375
     3376        return $data;
     3377}
     3378
     3379/**
    33343380 * Encode a variable into JSON, with some sanity checks.
    33353381 *
    33363382 * @since 4.1.0