image_manager = new Image_SEO_Manager(); } /** * Register API routes * * @since 1.0.0 */ public function register_routes(): void { register_rest_route( $this->namespace, '/' . $this->rest_base . '/settings', [ [ 'methods' => 'GET', 'callback' => [$this, 'get_settings'], 'permission_callback' => [$this, 'check_permissions'] ], [ 'methods' => 'POST', 'callback' => [$this, 'update_settings'], 'permission_callback' => [$this, 'check_permissions'], 'args' => $this->get_settings_args() ] ] ); } /** * Check if user has required permissions * * @since 1.0.0 * @return bool True if authorized, false otherwise */ public function check_permissions(): bool { return current_user_can('manage_options'); } /** * Get image SEO settings * * @since 1.0.0 * @param WP_REST_Request $request API request object * @return WP_REST_Response|WP_Error API response */ public function get_settings(WP_REST_Request $request): WP_REST_Response { $settings = $this->image_manager->get_settings('site'); return new WP_REST_Response($settings, 200); } /** * Update image SEO settings * * @since 1.0.0 * @param WP_REST_Request $request API request object * @return WP_REST_Response|WP_Error API response */ public function update_settings(WP_REST_Request $request): WP_REST_Response { $settings = $request->get_params(); // Remove nonce from settings if (isset($settings['_wpnonce'])) { unset($settings['_wpnonce']); } $success = $this->image_manager->save_settings('site', 0, $settings); if ($success) { return new WP_REST_Response([ 'success' => true, 'message' => __('Settings updated successfully', 'thinkrank') ], 200); } return new WP_REST_Response([ 'success' => false, 'message' => __('Failed to update settings', 'thinkrank') ], 500); } /** * Get settings schema arguments * * @since 1.0.0 * @return array API arguments array */ private function get_settings_args(): array { $schema = $this->image_manager->get_settings_schema('site'); $args = []; foreach ($schema as $key => $config) { $args[$key] = [ 'type' => $config['type'], 'required' => false, 'sanitize_callback' => $config['type'] === 'boolean' ? 'rest_sanitize_boolean' : 'sanitize_text_field' ]; } return $args; } }