WordPress.org

Make WordPress Core

Ticket #45933: 45933.2.diff

File 45933.2.diff, 6.5 KB (added by flixos90, 3 months ago)
  • src/wp-includes/functions.php

     
    30213021 * @param string|array    $args    Optional. Arguments to control behavior. Default empty array.
    30223022 */
    30233023function _default_wp_die_handler( $message, $title = '', $args = array() ) {
    3024         $defaults = array( 'response' => 500 );
    3025         $r        = wp_parse_args( $args, $defaults );
     3024        list( $message, $title, $r ) = _wp_die_process_input( $message, $title, $args );
    30263025
    3027         $have_gettext = function_exists( '__' );
    3028 
    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;
     3026        if ( is_string( $message ) ) {
     3027                if ( ! empty( $r['additional_errors'] ) ) {
     3028                        $message = array_merge(
     3029                                array( $message ),
     3030                                wp_list_pluck( $r['additional_errors'], 'message' )
     3031                        );
     3032                        $message = "<ul>\n\t\t<li>" . join( "</li>\n\t\t<li>", $message ) . "</li>\n\t</ul>";
     3033                } else {
     3034                        $message = "<p>$message</p>";
    30473035                }
    3048         } elseif ( is_string( $message ) ) {
    3049                 $message = "<p>$message</p>";
    30503036        }
    30513037
     3038        $have_gettext = function_exists( '__' );
     3039
    30523040        if ( ! empty( $r['link_url'] ) && ! empty( $r['link_text'] ) ) {
    30533041                $link_url = $r['link_url'];
    30543042                if ( function_exists( 'esc_url' ) ) {
     
    30703058                        header( 'Content-Type: text/html; charset=utf-8' );
    30713059                }
    30723060
    3073                 if ( empty( $title ) ) {
    3074                         $title = $have_gettext ? __( 'WordPress &rsaquo; Error' ) : 'WordPress &rsaquo; Error';
    3075                 }
    3076 
    3077                 $text_direction = 'ltr';
    3078                 if ( isset( $r['text_direction'] ) && 'rtl' == $r['text_direction'] ) {
    3079                         $text_direction = 'rtl';
    3080                 } elseif ( function_exists( 'is_rtl' ) && is_rtl() ) {
    3081                         $text_direction = 'rtl';
    3082                 }
    3083 
     3061                $text_direction = $r['text_direction'];
    30843062                if ( function_exists( 'language_attributes' ) && function_exists( 'is_rtl' ) ) {
    30853063                        $dir_attr = get_language_attributes();
    30863064                } else {
     
    32373215 * @param string|array $args    Optional. Arguments to control behavior. Default empty array.
    32383216 */
    32393217function _json_wp_die_handler( $message, $title = '', $args = array() ) {
    3240         $defaults = array( 'response' => 500 );
    3241 
    3242         $r = wp_parse_args( $args, $defaults );
     3218        list( $message, $title, $r ) = _wp_die_process_input( $message, $title, $args );
    32433219
    32443220        $data = array(
    3245                 'code'    => 'wp_die',
    3246                 'message' => $message,
    3247                 'status'  => $r['response'],
     3221                'code'              => $r['code'],
     3222                'message'           => $message,
     3223                'data'              => array(
     3224                        'status' => $r['response'],
     3225                ),
     3226                'additional_errors' => $r['additional_errors'],
    32483227        );
    32493228
    32503229        if ( ! headers_sent() ) {
     
    32743253 */
    32753254function _xmlrpc_wp_die_handler( $message, $title = '', $args = array() ) {
    32763255        global $wp_xmlrpc_server;
    3277         $defaults = array( 'response' => 500 );
    32783256
    3279         $r = wp_parse_args( $args, $defaults );
     3257        list( $message, $title, $r ) = _wp_die_process_input( $message, $title, $args );
    32803258
    32813259        if ( $wp_xmlrpc_server ) {
    32823260                $error = new IXR_Error( $r['response'], $message );
     
    32983276 * @param string|array $args    Optional. Arguments to control behavior. Default empty array.
    32993277 */
    33003278function _ajax_wp_die_handler( $message, $title = '', $args = array() ) {
    3301         $defaults = array(
    3302                 'response' => 200,
     3279        // Set default 'response' to 200 for AJAX requests.
     3280        $args = wp_parse_args(
     3281                $args,
     3282                array( 'response' => 200 )
    33033283        );
    3304         $r        = wp_parse_args( $args, $defaults );
     3284
     3285        list( $message, $title, $r ) = _wp_die_process_input( $message, $title, $args );
    33053286
    33063287        if ( ! headers_sent() && null !== $r['response'] ) {
    33073288                status_header( $r['response'] );
     
    33313312}
    33323313
    33333314/**
     3315 * Processes arguments passed to {@see wp_die()} consistently for its handlers.
     3316 *
     3317 * @since 5.1.0
     3318 * @access private
     3319 *
     3320 * @param string       $message Error message.
     3321 * @param string       $title   Optional. Error title. Default empty.
     3322 * @param string|array $args    Optional. Arguments to control behavior. Default empty array.
     3323 * @return array List of processed $message string, $title string, and $args array.
     3324 */
     3325function _wp_die_process_input( $message, $title = '', $args = array() ) {
     3326        $defaults = array(
     3327                'response'          => 0,
     3328                'code'              => '',
     3329                'back_link'         => false,
     3330                'link_url'          => '',
     3331                'link_text'         => '',
     3332                'text_direction'    => '',
     3333                'additional_errors' => array(),
     3334        );
     3335
     3336        $args = wp_parse_args( $args, $defaults );
     3337
     3338        if ( function_exists( 'is_wp_error' ) && is_wp_error( $message ) ) {
     3339                if ( ! empty( $message->errors ) ) {
     3340                        $errors = array();
     3341                        foreach ( (array) $message->errors as $error_code => $error_messages ) {
     3342                                foreach ( (array) $error_messages as $error_message ) {
     3343                                        $errors[] = array(
     3344                                                'code'    => $error_code,
     3345                                                'message' => $error_message,
     3346                                                'data'    => $error->get_error_data( $error_code ),
     3347                                        );
     3348                                }
     3349                        }
     3350
     3351                        $message = $errors[0]['message'];
     3352                        if ( empty( $args['code'] ) ) {
     3353                                $args['code'] = $errors[0]['code'];
     3354                        }
     3355                        if ( empty( $args['response'] ) && is_array( $errors[0]['data'] ) && ! empty( $errors[0]['data']['status'] ) ) {
     3356                                $args['response'] = $errors[0]['data']['status'];
     3357                        }
     3358                        if ( empty( $title ) && is_array( $errors[0]['data'] ) && ! empty( $errors[0]['data']['title'] ) ) {
     3359                                $title = $errors[0]['data']['title'];
     3360                        }
     3361
     3362                        unset( $errors[0] );
     3363                        $args['additional_errors'] = array_values( $errors );
     3364                } else {
     3365                        $message = '';
     3366                }
     3367        }
     3368
     3369        $have_gettext = function_exists( '__' );
     3370
     3371        if ( empty( $args['code'] ) ) {
     3372                $args['code'] = 'wp_die';
     3373        }
     3374        if ( empty( $args['response'] ) ) {
     3375                $args['code'] = 500;
     3376        }
     3377        if ( empty( $title ) ) {
     3378                $title = $have_gettext ? __( 'WordPress &rsaquo; Error' ) : 'WordPress &rsaquo; Error';
     3379        }
     3380
     3381        if ( empty( $args['text_direction'] ) || ! in_array( $args['text_direction'], array( 'ltr', 'rtl' ), true ) ) {
     3382                $args['text_direction'] = 'ltr';
     3383                if ( function_exists( 'is_rtl' ) && is_rtl() ) {
     3384                        $args['text_direction'] = 'rtl';
     3385                }
     3386        }
     3387
     3388        return array( $message, $title, $args );
     3389}
     3390
     3391/**
    33343392 * Encode a variable into JSON, with some sanity checks.
    33353393 *
    33363394 * @since 4.1.0