Make WordPress Core


Ignore:
Timestamp:
02/13/2024 03:10:37 PM (3 months ago)
Author:
davidbaumwald
Message:

REST API: Revert the refactor of global styles endpoints in REST API in [57624].

[57624] introduced some E2E test failures which are the result of an incompatibility with the Gutenberg plugin.

Props jorbin, spacedmonkey, swissspidy, hellofromTonya, youknowriad, costdev.
See #60131.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php

    r57624 r57628  
    1111 * Base Global Styles REST API Controller.
    1212 */
    13 class WP_REST_Global_Styles_Controller extends WP_REST_Posts_Controller {
    14     /**
    15      * Whether the controller supports batching.
    16      *
    17      * @since 6.5.0
    18      * @var array
    19      */
    20     protected $allow_batch = array( 'v1' => false );
     13class WP_REST_Global_Styles_Controller extends WP_REST_Controller {
     14
     15    /**
     16     * Post type.
     17     *
     18     * @since 5.9.0
     19     * @var string
     20     */
     21    protected $post_type;
     22
     23    /**
     24     * Constructor.
     25     * @since 5.9.0
     26     */
     27    public function __construct() {
     28        $this->namespace = 'wp/v2';
     29        $this->rest_base = 'global-styles';
     30        $this->post_type = 'wp_global_styles';
     31    }
    2132
    2233    /**
     
    184195     * @return bool Whether the post can be read.
    185196     */
    186     public function check_read_permission( $post ) {
     197    protected function check_read_permission( $post ) {
    187198        return current_user_can( 'read_post', $post->ID );
     199    }
     200
     201    /**
     202     * Returns the given global styles config.
     203     *
     204     * @since 5.9.0
     205     *
     206     * @param WP_REST_Request $request The request instance.
     207     *
     208     * @return WP_REST_Response|WP_Error
     209     */
     210    public function get_item( $request ) {
     211        $post = $this->get_post( $request['id'] );
     212        if ( is_wp_error( $post ) ) {
     213            return $post;
     214        }
     215
     216        return $this->prepare_item_for_response( $post, $request );
    188217    }
    189218
     
    211240
    212241        return true;
     242    }
     243
     244    /**
     245     * Checks if a global style can be edited.
     246     *
     247     * @since 5.9.0
     248     *
     249     * @param WP_Post $post Post object.
     250     * @return bool Whether the post can be edited.
     251     */
     252    protected function check_update_permission( $post ) {
     253        return current_user_can( 'edit_post', $post->ID );
     254    }
     255
     256    /**
     257     * Updates a single global style config.
     258     *
     259     * @since 5.9.0
     260     *
     261     * @param WP_REST_Request $request Full details about the request.
     262     * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
     263     */
     264    public function update_item( $request ) {
     265        $post_before = $this->get_post( $request['id'] );
     266        if ( is_wp_error( $post_before ) ) {
     267            return $post_before;
     268        }
     269
     270        $changes = $this->prepare_item_for_database( $request );
     271        if ( is_wp_error( $changes ) ) {
     272            return $changes;
     273        }
     274
     275        $result = wp_update_post( wp_slash( (array) $changes ), true, false );
     276        if ( is_wp_error( $result ) ) {
     277            return $result;
     278        }
     279
     280        $post          = get_post( $request['id'] );
     281        $fields_update = $this->update_additional_fields_for_object( $post, $request );
     282        if ( is_wp_error( $fields_update ) ) {
     283            return $fields_update;
     284        }
     285
     286        wp_after_insert_post( $post, true, $post_before );
     287
     288        $response = $this->prepare_item_for_response( $post, $request );
     289
     290        return rest_ensure_response( $response );
    213291    }
    214292
     
    330408            $response->add_links( $links );
    331409            if ( ! empty( $links['self']['href'] ) ) {
    332                 $actions = $this->get_available_actions( $post, $request );
     410                $actions = $this->get_available_actions();
    333411                $self    = $links['self']['href'];
    334412                foreach ( $actions as $rel ) {
     
    354432
    355433        $links = array(
    356             'self'  => array(
     434            'self' => array(
    357435                'href' => rest_url( trailingslashit( $base ) . $id ),
    358             ),
    359             'about' => array(
    360                 'href' => rest_url( 'wp/v2/types/' . $this->post_type ),
    361436            ),
    362437        );
     
    380455     * @since 5.9.0
    381456     * @since 6.2.0 Added 'edit-css' action.
    382      * @since 6.5.0 Added $post and $request parameters.
    383      *
    384      * @param WP_Post         $post    Post object.
    385      * @param WP_REST_Request $request Request object.
     457     *
    386458     * @return array List of link relations.
    387459     */
    388     protected function get_available_actions( $post, $request ) {
     460    protected function get_available_actions() {
    389461        $rels = array();
    390462
    391         $post_type = get_post_type_object( $post->post_type );
     463        $post_type = get_post_type_object( $this->post_type );
    392464        if ( current_user_can( $post_type->cap->publish_posts ) ) {
    393465            $rels[] = 'https://api.w.org/action-publish';
     
    399471
    400472        return $rels;
     473    }
     474
     475    /**
     476     * Overwrites the default protected title format.
     477     *
     478     * By default, WordPress will show password protected posts with a title of
     479     * "Protected: %s", as the REST API communicates the protected status of a post
     480     * in a machine readable format, we remove the "Protected: " prefix.
     481     *
     482     * @since 5.9.0
     483     *
     484     * @return string Protected title format.
     485     */
     486    public function protected_title_format() {
     487        return '%s';
    401488    }
    402489
Note: See TracChangeset for help on using the changeset viewer.