namespace, self::BASE_ROUTE . '/snippet-view', [ [ 'methods' => WP_REST_Server::READABLE, 'callback' => [ $this, 'get_snippet_view_callback' ], 'permission_callback' => [ $this, 'permission_callback' ], ], [ 'methods' => WP_REST_Server::EDITABLE, 'callback' => [ $this, 'update_snippet_view_callback' ], 'permission_callback' => [ $this, 'permission_callback' ], 'args' => [ 'view' => [ 'description' => esc_html__( 'Whether snippet lists display as a grid of cards or a table.', 'code-snippets' ), 'type' => 'string', 'enum' => self::SNIPPET_VIEWS, 'required' => true, ], ], ], ] ); } /** * Determine whether the request has permission to manage preferences. * * @param WP_REST_Request $request Full data about the request. * * @return bool */ public function permission_callback( WP_REST_Request $request ): bool { return code_snippets()->current_user_can(); } /** * Retrieve the current snippet view preference. * * @param WP_REST_Request $request Full data about the request. * * @return WP_REST_Response */ public function get_snippet_view_callback( WP_REST_Request $request ): WP_REST_Response { return new WP_REST_Response( [ 'view' => self::get_snippet_view() ] ); } /** * Update the snippet view preference. * * @param WP_REST_Request $request Full data about the request. * * @return WP_REST_Response */ public function update_snippet_view_callback( WP_REST_Request $request ): WP_REST_Response { $view = $request->get_param( 'view' ); update_option( self::SNIPPET_VIEW_OPTION, $view ); return new WP_REST_Response( [ 'view' => $view ] ); } }