WordPress.org

Make WordPress Core

Ticket #45933: 45933.10.diff

File 45933.10.diff, 4.7 KB (added by spacedmonkey, 3 months ago)
  • src/wp-includes/functions.php

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
     
    30243024        $defaults = array( 'response' => 500 );
    30253025        $r        = wp_parse_args( $args, $defaults );
    30263026
    3027         $have_gettext = function_exists( '__' );
     3027        list( $message, $r, $title, $errors ) = _wp_die_process_input( $message, $r, $title );
    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>";
     3029        switch ( count( $errors ) ) {
     3030                case 0:
     3031                        $message = "<p>$message</p>";
     3032                        break;
     3033                case 1:
     3034                        $message = "<p>{$errors[0]}</p>";
     3035                        break;
     3036                default:
     3037                        $message = "<ul>\n\t\t<li>" . join( "</li>\n\t\t<li>", $errors ) . "</li>\n\t</ul>";
     3038                        break;
    30503039        }
    30513040
    30523041        if ( ! empty( $r['link_url'] ) && ! empty( $r['link_text'] ) ) {
     
    30593048        }
    30603049
    30613050        if ( isset( $r['back_link'] ) && $r['back_link'] ) {
     3051                $have_gettext = function_exists( '__' );
    30623052                $back_text = $have_gettext ? __( '&laquo; Back' ) : '&laquo; Back';
    30633053                $message  .= "\n<p><a href='javascript:history.back()'>$back_text</a></p>";
    30643054        }
     
    30703060                        header( 'Content-Type: text/html; charset=utf-8' );
    30713061                }
    30723062
    3073                 if ( empty( $title ) ) {
    3074                         $title = $have_gettext ? __( 'WordPress &rsaquo; Error' ) : 'WordPress &rsaquo; Error';
    3075                 }
    3076 
    30773063                $text_direction = 'ltr';
    30783064                if ( isset( $r['text_direction'] ) && 'rtl' == $r['text_direction'] ) {
    30793065                        $text_direction = 'rtl';
     
    32373223 * @param string|array $args    Optional. Arguments to control behavior. Default empty array.
    32383224 */
    32393225function _json_wp_die_handler( $message, $title = '', $args = array() ) {
    3240         $defaults = array( 'response' => 500 );
    3241 
    3242         $r = wp_parse_args( $args, $defaults );
     3226        $defaults = array( 'response' => 500, 'status' => 500, 'title' => $title );
     3227        $r        = wp_parse_args( $args, $defaults );
    32433228
    3244         $data = array(
    3245                 'code'    => 'wp_die',
    3246                 'message' => $message,
    3247                 'status'  => $r['response'],
    3248         );
     3229        list( $message, $r, $title, $errors ) = _wp_die_process_input( $message, $r, $title );
    32493230
    32503231        if ( ! headers_sent() ) {
    32513232                header( 'Content-Type: application/json; charset=utf-8' );
     
    32543235                }
    32553236        }
    32563237
     3238        $code = $r['code'];
     3239        unset( $r['code'] );
     3240        unset( $r['response'] );
     3241
     3242        $data = array(
     3243                'code'    => $code,
     3244                'message' => $message,
     3245                'data'    => $r,
     3246        );
     3247
     3248        if ( count( $errors ) > 1 ) {
     3249                // Remove the primary error.
     3250                array_shift( $errors );
     3251                $data['additional_errors'] = $errors;
     3252        }
     3253
    32573254        echo wp_json_encode( $data );
    32583255        die();
    32593256}
     
    32773274        $defaults = array( 'response' => 500 );
    32783275
    32793276        $r = wp_parse_args( $args, $defaults );
     3277        list( $message, $r ) = _wp_die_process_input( $message, $r );
    32803278
    32813279        if ( $wp_xmlrpc_server ) {
    32823280                $error = new IXR_Error( $r['response'], $message );
     
    33033301        );
    33043302        $r        = wp_parse_args( $args, $defaults );
    33053303
     3304        list( $message, $r ) = _wp_die_process_input( $message, $r );
     3305
    33063306        if ( ! headers_sent() && null !== $r['response'] ) {
    33073307                status_header( $r['response'] );
    33083308        }
     
    33303330        die();
    33313331}
    33323332
     3333/**
     3334 * @param string $message
     3335 * @param string $title
     3336 * @param array $args
     3337 *
     3338 * @return array
     3339 */
     3340function _wp_die_process_input( $message = '', array $args = array(), $title = '' ) {
     3341        $defaults = array( 'response' => 500, 'code' => 'wp_die', );
     3342        $args     = wp_parse_args( $args, $defaults );
     3343        $errors   = array();
     3344        if ( function_exists( 'is_wp_error' ) && is_wp_error( $message ) ) {
     3345                $errors       = $message->get_error_messages();
     3346                $args['code'] = $message->get_error_code();
     3347                $error_data   = $message->get_error_data();
     3348                $message      = $message->get_error_message();
     3349                if ( is_array( $error_data ) ) {
     3350                        $args = wp_parse_args( $error_data, $args );
     3351                        if ( empty( $title ) && isset( $error_data['title'] ) ) {
     3352                                $title = $error_data['title'];
     3353                        }
     3354                }
     3355
     3356        }
     3357
     3358        if ( empty( $title ) ) {
     3359                $have_gettext = function_exists( '__' );
     3360                $title        = $have_gettext ? __( 'WordPress &rsaquo; Error' ) : 'WordPress &rsaquo; Error';
     3361        }
     3362
     3363        return array( $message, $args, $title, $errors );
     3364}
     3365
    33333366/**
    33343367 * Encode a variable into JSON, with some sanity checks.
    33353368 *