| | <?php |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | class WP_REST_Navigation_Fallback_Controller extends WP_REST_Controller { |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | private $post_type; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | public function __construct() { |
| | $this->namespace = 'wp-block-editor/v1'; |
| | $this->rest_base = 'navigation-fallback'; |
| | $this->post_type = 'wp_navigation'; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | public function register_routes() { |
| |
|
| | |
| | register_rest_route( |
| | $this->namespace, |
| | '/' . $this->rest_base, |
| | array( |
| | array( |
| | 'methods' => WP_REST_Server::READABLE, |
| | 'callback' => array( $this, 'get_item' ), |
| | 'permission_callback' => array( $this, 'get_item_permissions_check' ), |
| | 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::READABLE ), |
| | ), |
| | 'schema' => array( $this, 'get_item_schema' ), |
| | ) |
| | ); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function get_item_permissions_check( $request ) { |
| |
|
| | $post_type = get_post_type_object( $this->post_type ); |
| |
|
| | |
| | if ( ! current_user_can( $post_type->cap->create_posts ) || ! current_user_can( 'edit_theme_options' ) || ! current_user_can( 'edit_posts' ) ) { |
| | return new WP_Error( |
| | 'rest_cannot_create', |
| | __( 'Sorry, you are not allowed to create Navigation Menus as this user.' ), |
| | array( 'status' => rest_authorization_required_code() ) |
| | ); |
| | } |
| |
|
| | if ( 'edit' === $request['context'] && ! current_user_can( $post_type->cap->edit_posts ) ) { |
| | return new WP_Error( |
| | 'rest_forbidden_context', |
| | __( 'Sorry, you are not allowed to edit Navigation Menus as this user.' ), |
| | array( 'status' => rest_authorization_required_code() ) |
| | ); |
| | } |
| |
|
| | return true; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function get_item( $request ) { |
| | $post = WP_Navigation_Fallback::get_fallback(); |
| |
|
| | if ( empty( $post ) ) { |
| | return rest_ensure_response( new WP_Error( 'no_fallback_menu', __( 'No fallback menu found.' ), array( 'status' => 404 ) ) ); |
| | } |
| |
|
| | $response = $this->prepare_item_for_response( $post, $request ); |
| |
|
| | return $response; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function get_item_schema() { |
| | if ( $this->schema ) { |
| | return $this->add_additional_fields_schema( $this->schema ); |
| | } |
| |
|
| | $this->schema = array( |
| | '$schema' => 'http://json-schema.org/draft-04/schema#', |
| | 'title' => 'navigation-fallback', |
| | 'type' => 'object', |
| | 'properties' => array( |
| | 'id' => array( |
| | 'description' => __( 'The unique identifier for the Navigation Menu.' ), |
| | 'type' => 'integer', |
| | 'context' => array( 'view', 'edit', 'embed' ), |
| | 'readonly' => true, |
| | ), |
| | ), |
| | ); |
| |
|
| | return $this->add_additional_fields_schema( $this->schema ); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function prepare_item_for_response( $item, $request ) { |
| | $data = array(); |
| |
|
| | $fields = $this->get_fields_for_response( $request ); |
| |
|
| | if ( rest_is_field_included( 'id', $fields ) ) { |
| | $data['id'] = (int) $item->ID; |
| | } |
| |
|
| | $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; |
| | $data = $this->add_additional_fields_to_object( $data, $request ); |
| | $data = $this->filter_response_by_context( $data, $context ); |
| |
|
| | $response = rest_ensure_response( $data ); |
| |
|
| | if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) { |
| | $links = $this->prepare_links( $item ); |
| | $response->add_links( $links ); |
| | } |
| |
|
| | return $response; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | private function prepare_links( $post ) { |
| | return array( |
| | 'self' => array( |
| | 'href' => rest_url( rest_get_route_for_post( $post->ID ) ), |
| | 'embeddable' => true, |
| | ), |
| | ); |
| | } |
| | } |
| |
|