WordPress.org

Make WordPress Core

Ticket #48764: 48764.1.patch

File 48764.1.patch, 4.4 KB (added by dkarfa, 2 months ago)

Code refactoring

  • src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php

     
    959959         * @return stdClass|WP_Error Post object or WP_Error.
    960960         */
    961961        protected function prepare_item_for_database( $request ) {
    962                 $prepared_post = new stdClass;
     962                $prepared_post = new stdClass();
    963963
    964964                // Post ID.
    965965                if ( isset( $request['id'] ) ) {
     
    10131013
    10141014                // Post status.
    10151015                if ( ! empty( $schema['properties']['status'] ) && isset( $request['status'] ) ) {
    1016                         $status = $this->handle_status_param( $request['status'], $post_type );
     1016                        $status = $this->handle_status_param( $request['status'], $post_type, $request['id'] );
    10171017
    10181018                        if ( is_wp_error( $status ) ) {
    10191019                                return $status;
     
    11471147         *
    11481148         * @param string $post_status Post status.
    11491149         * @param object $post_type   Post type.
     1150         * @param int    $post_id     Post ID.
    11501151         * @return string|WP_Error Post status or WP_Error if lacking the proper permission.
    11511152         */
    1152         protected function handle_status_param( $post_status, $post_type ) {
     1153        protected function handle_status_param( $post_status, $post_type, $post_id ) {
    11531154
    11541155                switch ( $post_status ) {
    11551156                        case 'draft':
     
    11561157                        case 'pending':
    11571158                                break;
    11581159                        case 'private':
    1159                                 if ( ! current_user_can( $post_type->cap->publish_posts ) ) {
     1160                                if ( ! current_user_can( $post_type->cap->publish_posts, $post_id ) ) {
    11601161                                        return new WP_Error( 'rest_cannot_publish', __( 'Sorry, you are not allowed to create private posts in this post type.' ), array( 'status' => rest_authorization_required_code() ) );
    11611162                                }
    11621163                                break;
    11631164                        case 'publish':
    11641165                        case 'future':
    1165                                 if ( ! current_user_can( $post_type->cap->publish_posts ) ) {
     1166                                if ( ! current_user_can( $post_type->cap->publish_posts, $post_id ) ) {
    11661167                                        return new WP_Error( 'rest_cannot_publish', __( 'Sorry, you are not allowed to publish posts in this post type.' ), array( 'status' => rest_authorization_required_code() ) );
    11671168                                }
    11681169                                break;
     
    20782079                                                'type'        => 'object',
    20792080                                                'context'     => array( 'view', 'edit', 'embed' ),
    20802081                                                'arg_options' => array(
    2081                                                         'sanitize_callback' => null, // Note: sanitization implemented in self::prepare_item_for_database()
    2082                                                         'validate_callback' => null, // Note: validation implemented in self::prepare_item_for_database()
     2082                                                        'sanitize_callback' => null, // Note: sanitization implemented in self::prepare_item_for_database().
     2083                                                        'validate_callback' => null, // Note: validation implemented in self::prepare_item_for_database().
    20832084                                                ),
    20842085                                                'properties'  => array(
    20852086                                                        'raw'      => array(
     
    21032104                                                'type'        => 'object',
    21042105                                                'context'     => array( 'view', 'edit' ),
    21052106                                                'arg_options' => array(
    2106                                                         'sanitize_callback' => null, // Note: sanitization implemented in self::prepare_item_for_database()
    2107                                                         'validate_callback' => null, // Note: validation implemented in self::prepare_item_for_database()
     2107                                                        'sanitize_callback' => null, // Note: sanitization implemented in self::prepare_item_for_database().
     2108                                                        'validate_callback' => null, // Note: validation implemented in self::prepare_item_for_database().
    21082109                                                ),
    21092110                                                'properties'  => array(
    21102111                                                        'raw'           => array(
     
    21482149                                                'type'        => 'object',
    21492150                                                'context'     => array( 'view', 'edit', 'embed' ),
    21502151                                                'arg_options' => array(
    2151                                                         'sanitize_callback' => null, // Note: sanitization implemented in self::prepare_item_for_database()
    2152                                                         'validate_callback' => null, // Note: validation implemented in self::prepare_item_for_database()
     2152                                                        'sanitize_callback' => null, // Note: sanitization implemented in self::prepare_item_for_database().
     2153                                                        'validate_callback' => null, // Note: validation implemented in self::prepare_item_for_database().
    21532154                                                ),
    21542155                                                'properties'  => array(
    21552156                                                        'raw'       => array(
     
    26062607        public function sanitize_post_statuses( $statuses, $request, $parameter ) {
    26072608                $statuses = wp_parse_slug_list( $statuses );
    26082609
    2609                 // The default status is different in WP_REST_Attachments_Controller
     2610                // The default status is different in WP_REST_Attachments_Controller.
    26102611                $attributes     = $request->get_attributes();
    26112612                $default_status = $attributes['args']['status']['default'];
    26122613