analyzer = $analyzer ?? new SEO_Analyzer(); } /** * Register REST API routes. * * @return void */ public function register_routes(): void { register_rest_route(self::NAMESPACE, '/seo-analyzer', [ 'methods' => 'GET', 'callback' => [$this, 'get_analysis'], 'permission_callback' => [$this, 'check_permissions'], ]); register_rest_route(self::NAMESPACE, '/seo-analyzer/run', [ 'methods' => 'POST', 'callback' => [$this, 'run_analysis'], 'permission_callback' => [$this, 'check_permissions'], ]); } /** * Return the last cached analysis (computing it if none is cached). * * @param WP_REST_Request $request Request object. * @return WP_REST_Response */ public function get_analysis(WP_REST_Request $request): WP_REST_Response { return new WP_REST_Response([ 'success' => true, 'data' => $this->analyzer->run(false), ], 200); } /** * Force a fresh analysis, busting the cache. * * @param WP_REST_Request $request Request object. * @return WP_REST_Response */ public function run_analysis(WP_REST_Request $request): WP_REST_Response { return new WP_REST_Response([ 'success' => true, 'data' => $this->analyzer->run(true), ], 200); } /** * Only administrators may run the site-wide analyzer. * * @param WP_REST_Request $request Request object. * @return bool|\WP_Error */ public function check_permissions(WP_REST_Request $request) { if (!is_user_logged_in()) { return new \WP_Error( 'rest_forbidden', __('You must be logged in to access this endpoint.', 'thinkrank'), ['status' => 401] ); } if (!current_user_can('manage_options')) { return new \WP_Error( 'rest_forbidden', __('You do not have permission to run the site SEO analyzer.', 'thinkrank'), ['status' => 403] ); } return true; } }