WC_Connect_Service_Settings_Store::validate_and_possibly_update_settings PHP 메소드

validate_and_possibly_update_settings() 공개 메소드

Given id and possibly instance, validates the settings and, if they validate, saves them to options
public validate_and_possibly_update_settings ( $settings, $id, $instance = false ) : boolean | WP_Error
리턴 boolean | WP_Error
        public function validate_and_possibly_update_settings($settings, $id, $instance = false)
        {
            // Validate instance or at least id if no instance is given
            if (!empty($instance)) {
                $service_schema = $this->service_schemas_store->get_service_schema_by_instance_id($instance);
                if (!$service_schema) {
                    wp_send_json_error(array('error' => 'bad_instance_id', 'message' => __('An invalid service instance was received.', 'connectforwoocommerce')));
                }
            } else {
                $service_schema = $this->service_schemas_store->get_service_schema_by_id($id);
                if (!$service_schema) {
                    wp_send_json_error(array('error' => 'bad_service_id', 'message' => __('An invalid service ID was received.', 'connectforwoocommerce')));
                }
            }
            // Validate settings with WCC server
            $response_body = $this->api_client->validate_service_settings($id, $settings);
            if (is_wp_error($response_body)) {
                // TODO - handle multiple error messages when the validation endpoint can return them
                wp_send_json_error(array('error' => 'validation_failure', 'message' => $response_body->get_error_message(), 'data' => $response_body->get_error_data()));
            }
            // On success, save the settings to the database and exit
            update_option($this->get_service_settings_key($id, $instance), $settings);
            do_action('wc_connect_saved_service_settings', $id, $instance, $settings);
            return true;
        }

Usage Example

 /**
  * Attempts to update the settings on a particular service and instance
  */
 public function update_item($request)
 {
     $request_params = $request->get_params();
     $id = array_key_exists('id', $request_params) ? $request_params['id'] : '';
     $instance = array_key_exists('instance', $request_params) ? absint($request_params['instance']) : false;
     if (empty($id)) {
         $error = new WP_Error('service_id_missing', __('Unable to update service settings. Form data is missing service ID.', 'connectforwoocommerce'), array('status' => 400));
         $this->logger->log($error, __CLASS__);
         return $error;
     }
     $request_body = $request->get_body();
     $settings = json_decode($request_body, false, WOOCOMMERCE_CONNECT_MAX_JSON_DECODE_DEPTH);
     if (empty($settings)) {
         $error = new WP_Error('bad_form_data', __('Unable to update service settings. The form data could not be read.', 'connectforwoocommerce'), array('status' => 400));
         $this->logger->log($error, __CLASS__);
         return $error;
     }
     $validation_result = $this->service_settings_store->validate_and_possibly_update_settings($settings, $id, $instance);
     if (is_wp_error($validation_result)) {
         $error = new WP_Error('validation_failed', sprintf(__('Unable to update service settings. Validation failed. %s', 'connectforwoocommerce'), $validation_result->get_error_message()), array_merge(array('status' => 400), $validation_result->get_error_data()));
         $this->logger->log($error, __CLASS__);
         return $error;
     }
     return new WP_REST_Response(array('success' => true), 200);
 }