Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update/global styles revision extends revisions controller #6105

Closed
Show file tree
Hide file tree
Changes from 22 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
7d192d8
Initial commit.
ramonjd Nov 23, 2023
d7b4c1c
Adding title to schema.
ramonjd Nov 23, 2023
41c98a5
Remove permissions checks and favour parent's
ramonjd Nov 23, 2023
59d6953
Remove duplicated tests
ramonjd Nov 23, 2023
dbcc3b5
Reverting post type registration changes as it assigns an autosave co…
ramonjd Nov 23, 2023
25cbe83
Regenerated fixture
ramonjd Nov 23, 2023
e9d1f10
Revert introducing title in schema
ramonjd Nov 23, 2023
ec4229f
Reinstating global styles revision controller tests that were duplica…
ramonjd Jan 3, 2024
ca524b2
Update src/wp-includes/rest-api/endpoints/class-wp-rest-global-styles…
ramonjd Dec 22, 2023
93190ae
Excluding search, include and exclude from the collection query params
ramonjd Jan 3, 2024
b43344d
Now that https://github.com/WordPress/wordpress-develop/pull/5655 has…
ramonjd Jan 31, 2024
dac8e0b
Pulling across changes from https://github.com/WordPress/wordpress-de…
ramonjd Feb 7, 2024
acd2590
Implementing latest round of feedback:
ramonjd Feb 8, 2024
dfa02f8
Apply suggestions from code review
spacedmonkey Feb 13, 2024
f6f45e3
Fix lints
jonnynews Feb 13, 2024
038331b
Remove ideas
jonnynews Feb 13, 2024
6c7a149
Merge branch 'trunk' into update/global-styles-revision-extends-revis…
jonnynews Feb 13, 2024
95db1e9
Fix
jonnynews Feb 13, 2024
9fb3e30
Add allow_batch parameter.
jonnynews Feb 13, 2024
319bdff
Be overly safe with `__construct` method.
jonnynews Feb 13, 2024
095c7d0
Apply suggestions from code review
spacedmonkey Feb 13, 2024
1fef997
Add 'allow_batch' option to API endpoints in WP API
jonnynews Feb 13, 2024
70d68da
Update version annotations for wp_global_styles related changes
spacedmonkey May 20, 2024
c62fed9
Simplify unset function calls in global styles revisions controller
spacedmonkey May 20, 2024
cc916ac
Merge branch 'trunk' into update/global-styles-revision-extends-revis…
spacedmonkey May 23, 2024
7c526bd
Disable autosave for global styles in WordPress
spacedmonkey May 23, 2024
fe4fc65
Remove redundant comment in wp-post-type.php
spacedmonkey May 23, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/wp-includes/class-wp-post-type.php
Original file line number Diff line number Diff line change
Expand Up @@ -913,6 +913,7 @@ public function get_revisions_rest_controller() {
* Will only instantiate the controller class once per request.
*
* @since 6.4.0
* @since 6.5.0 Prevents autosave class instantiation for wp_global_styles post types.
*
* @return WP_REST_Controller|null The controller instance, or null if the post type
* is set not to show in rest.
Expand All @@ -922,7 +923,7 @@ public function get_autosave_rest_controller() {
return null;
}

if ( 'attachment' === $this->name ) {
if ( in_array( $this->name, array( 'attachment', 'wp_global_styles' ), true ) ) {
swissspidy marked this conversation as resolved.
Show resolved Hide resolved
return null;
}

Expand Down
26 changes: 15 additions & 11 deletions src/wp-includes/post.php
Original file line number Diff line number Diff line change
Expand Up @@ -473,15 +473,19 @@ function create_initial_post_types() {
register_post_type(
'wp_global_styles',
array(
'label' => _x( 'Global Styles', 'post type general name' ),
'description' => __( 'Global styles to include in themes.' ),
'public' => false,
'_builtin' => true, /* internal use only. don't use this when registering your own post type. */
'_edit_link' => '/site-editor.php?canvas=edit', /* internal use only. don't use this when registering your own post type. */
'show_ui' => false,
'show_in_rest' => false,
'rewrite' => false,
'capabilities' => array(
'label' => _x( 'Global Styles', 'post type general name' ),
'description' => __( 'Global styles to include in themes.' ),
'public' => false,
'_builtin' => true, /* internal use only. don't use this when registering your own post type. */
'_edit_link' => '/site-editor.php?canvas=edit', /* internal use only. don't use this when registering your own post type. */
'show_ui' => false,
'show_in_rest' => true,
'rewrite' => false,
'rest_base' => 'global-styles',
'rest_controller_class' => 'WP_REST_Global_Styles_Controller',
'revisions_rest_controller_class' => 'WP_REST_Global_Styles_Revisions_Controller',
'late_route_registration' => true,
'capabilities' => array(
'read' => 'edit_theme_options',
'create_posts' => 'edit_theme_options',
'edit_posts' => 'edit_theme_options',
Expand All @@ -490,8 +494,8 @@ function create_initial_post_types() {
'edit_others_posts' => 'edit_theme_options',
'delete_others_posts' => 'edit_theme_options',
),
'map_meta_cap' => true,
'supports' => array(
'map_meta_cap' => true,
'supports' => array(
'title',
'editor',
'revisions',
Expand Down
8 changes: 0 additions & 8 deletions src/wp-includes/rest-api.php
Original file line number Diff line number Diff line change
Expand Up @@ -323,14 +323,6 @@ function create_initial_rest_routes() {
$controller = new WP_REST_Block_Types_Controller();
$controller->register_routes();

// Global Styles revisions.
$controller = new WP_REST_Global_Styles_Revisions_Controller();
$controller->register_routes();

// Global Styles.
$controller = new WP_REST_Global_Styles_Controller();
$controller->register_routes();

// Settings.
$controller = new WP_REST_Settings_Controller();
$controller->register_routes();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,24 +10,24 @@
/**
* Base Global Styles REST API Controller.
*/
class WP_REST_Global_Styles_Controller extends WP_REST_Controller {

class WP_REST_Global_Styles_Controller extends WP_REST_Posts_Controller {
/**
* Post type.
* Whether the controller supports batching.
*
* @since 5.9.0
* @var string
* @since 6.5.0
* @var array
*/
protected $post_type;
protected $allow_batch = array( 'v1' => false );

/**
* Constructor.
* @since 5.9.0
*
* @since 6.5.0
*
* @param string $post_type Post type.
*/
public function __construct() {
$this->namespace = 'wp/v2';
$this->rest_base = 'global-styles';
$this->post_type = 'wp_global_styles';
public function __construct( $post_type = 'wp_global_styles' ) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This LGTM. I've tested with the plugin activated (with and without this change).

It also provides backwards compatibility for folks running older versions of Gutenberg.

If folks think it's appropriate I can update the class instantiation in Gutenberg to pass 'wp_global_styles' as well, to make things more consistent. But this PR's changes make that unnecessary I suppose.

https://github.com/WordPress/gutenberg/blob/b35bc15f13e2287befaa638a3a6aa168c31b5362/lib/compat/wordpress-6.5/rest-api.php#L17-L17

parent::__construct( $post_type );
}

/**
Expand All @@ -50,6 +50,7 @@ public function register_routes() {
'type' => 'string',
),
),
'allow_batch' => $this->allow_batch,
),
)
);
Expand Down Expand Up @@ -79,6 +80,7 @@ public function register_routes() {
'sanitize_callback' => array( $this, '_sanitize_global_styles_callback' ),
),
),
'allow_batch' => $this->allow_batch,
),
)
);
Expand Down Expand Up @@ -106,7 +108,8 @@ public function register_routes() {
'permission_callback' => array( $this, 'update_item_permissions_check' ),
'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
),
'schema' => array( $this, 'get_public_item_schema' ),
'schema' => array( $this, 'get_public_item_schema' ),
'allow_batch' => $this->allow_batch,
)
);
}
Expand Down Expand Up @@ -194,28 +197,10 @@ public function get_item_permissions_check( $request ) {
* @param WP_Post $post Post object.
* @return bool Whether the post can be read.
*/
protected function check_read_permission( $post ) {
public function check_read_permission( $post ) {
return current_user_can( 'read_post', $post->ID );
}

/**
* Returns the given global styles config.
*
* @since 5.9.0
*
* @param WP_REST_Request $request The request instance.
*
* @return WP_REST_Response|WP_Error
*/
public function get_item( $request ) {
$post = $this->get_post( $request['id'] );
if ( is_wp_error( $post ) ) {
return $post;
}

return $this->prepare_item_for_response( $post, $request );
}

/**
* Checks if a given request has access to write a single global styles config.
*
Expand All @@ -241,55 +226,6 @@ public function update_item_permissions_check( $request ) {
return true;
}

/**
* Checks if a global style can be edited.
*
* @since 5.9.0
*
* @param WP_Post $post Post object.
* @return bool Whether the post can be edited.
*/
protected function check_update_permission( $post ) {
return current_user_can( 'edit_post', $post->ID );
}

/**
* Updates a single global style config.
*
* @since 5.9.0
*
* @param WP_REST_Request $request Full details about the request.
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
*/
public function update_item( $request ) {
$post_before = $this->get_post( $request['id'] );
if ( is_wp_error( $post_before ) ) {
return $post_before;
}

$changes = $this->prepare_item_for_database( $request );
if ( is_wp_error( $changes ) ) {
return $changes;
}

$result = wp_update_post( wp_slash( (array) $changes ), true, false );
if ( is_wp_error( $result ) ) {
return $result;
}

$post = get_post( $request['id'] );
$fields_update = $this->update_additional_fields_for_object( $post, $request );
if ( is_wp_error( $fields_update ) ) {
return $fields_update;
}

wp_after_insert_post( $post, true, $post_before );

$response = $this->prepare_item_for_response( $post, $request );

return rest_ensure_response( $response );
}

/**
* Prepares a single global styles config for update.
*
Expand Down Expand Up @@ -407,7 +343,7 @@ public function prepare_item_for_response( $post, $request ) {
$links = $this->prepare_links( $post->ID );
$response->add_links( $links );
if ( ! empty( $links['self']['href'] ) ) {
$actions = $this->get_available_actions();
$actions = $this->get_available_actions( $post, $request );
$self = $links['self']['href'];
foreach ( $actions as $rel ) {
$response->add_link( $rel, $self );
Expand All @@ -431,9 +367,12 @@ protected function prepare_links( $id ) {
$base = sprintf( '%s/%s', $this->namespace, $this->rest_base );

$links = array(
'self' => array(
'self' => array(
'href' => rest_url( trailingslashit( $base ) . $id ),
),
'about' => array(
'href' => rest_url( 'wp/v2/types/' . $this->post_type ),
),
);

if ( post_type_supports( $this->post_type, 'revisions' ) ) {
Expand All @@ -454,13 +393,16 @@ protected function prepare_links( $id ) {
*
* @since 5.9.0
* @since 6.2.0 Added 'edit-css' action.
* @since 6.5.0 Added $post and $request parameters.
*
* @param WP_Post $post Post object.
* @param WP_REST_Request $request Request object.
* @return array List of link relations.
*/
protected function get_available_actions() {
protected function get_available_actions( $post, $request ) {
$rels = array();

$post_type = get_post_type_object( $this->post_type );
$post_type = get_post_type_object( $post->post_type );
if ( current_user_can( $post_type->cap->publish_posts ) ) {
$rels[] = 'https://api.w.org/action-publish';
}
Expand All @@ -472,21 +414,6 @@ protected function get_available_actions() {
return $rels;
}

/**
* Overwrites the default protected title format.
*
* By default, WordPress will show password protected posts with a title of
* "Protected: %s", as the REST API communicates the protected status of a post
* in a machine readable format, we remove the "Protected: " prefix.
*
* @since 5.9.0
*
* @return string Protected title format.
*/
public function protected_title_format() {
return '%s';
}

/**
* Retrieves the query params for the global styles collection.
*
Expand Down
Loading
Loading