settingsService = $settingsService; } /** * @param WP_REST_Request $data * * @return WP_REST_Response * * @throws InvalidArgumentException * @throws ForbiddenException */ public function handle(WP_REST_Request $data): WP_REST_Response { // Verify the nonce Sanitizer::verifyNonce($data->get_header('X-WP-Nonce')); // Check if settings parameters are provided if (empty($data->get_params())) { throw new InvalidArgumentException( BackendStrings::getCommonStrings()['invalid_request_data'] ); } $settingsCategory = Sanitizer::sanitizeText($data->get_params()['settingsCategory']); $settingsOption = Sanitizer::sanitizeText($data->get_params()['settingsOption']); $settingsValue = Sanitizer::sanitizeSettingsFields($data->get_params()['settingsValue']); if (empty($settingsCategory) || empty($settingsOption)) { throw new InvalidArgumentException( BackendStrings::getSettingsStrings()['settings_category_or_option_missing'] ); } // Update the setting $this->settingsService->setSetting($settingsCategory, $settingsOption, $settingsValue); return new WP_REST_Response([ 'message' => BackendStrings::getSettingsStrings()['settings_option_updated'], 'data' => [ 'value' => $this->settingsService->getSetting($settingsCategory, $settingsOption), ] ], 200); } }