/**
* 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);
}