/** * 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); }
public function get_item($request) { $raw_params = $request->get_params(); $params = array(); $params['paper_size'] = $raw_params['paper_size']; $this->settings_store->set_preferred_paper_size($params['paper_size']); $n_label_ids = isset($raw_params['label_ids']) ? count($raw_params['label_ids']) : 0; $n_captions = isset($raw_params['captions']) ? count($raw_params['captions']) : 0; // Either there are the same number of captions as labels, or no captions at all if (!$n_label_ids || $n_captions && $n_captions !== $n_label_ids) { $message = __('Invalid PDF request.', 'woocommerce'); $error = new WP_Error('invalid_pdf_request', $message, array('message' => $message, 'status' => 400)); $this->logger->log($error, __CLASS__); return $error; } $params['labels'] = array(); for ($i = 0; $i < $n_label_ids; $i++) { $params['labels'][$i] = array(); $params['labels'][$i]['label_id'] = (int) $raw_params['label_ids'][$i]; if ($n_captions) { $params['labels'][$i]['caption'] = $raw_params['captions'][$i]; } } $raw_response = $this->api_client->get_labels_print_pdf($params); if (is_wp_error($raw_response)) { $this->logger->log($raw_response, __CLASS__); return $raw_response; } header('content-type: ' . $raw_response['headers']['content-type']); echo $raw_response['body']; die; }
public function update_items($request) { $request = json_decode($request->get_body(), false, WOOCOMMERCE_CONNECT_MAX_JSON_DECODE_DEPTH); $name = $request->address->name; unset($request->address->name); $company = $request->address->company; unset($request->address->company); $phone = $request->address->phone; unset($request->address->phone); $body = array('destination' => $request->address, 'carrier' => 'usps'); $response = $this->api_client->send_address_normalization_request($body); if (is_wp_error($response)) { $error = new WP_Error($response->get_error_code(), $response->get_error_message(), array('message' => $response->get_error_message())); $this->logger->log($error, __CLASS__); return $error; } if (isset($response->error)) { $error = new WP_Error($response->error->code, $response->error->message, array('message' => $response->error->message)); $this->logger->log($error, __CLASS__); return $error; } $response->normalized->name = $name; $response->normalized->company = $company; $response->normalized->phone = $phone; if ('origin' === $request->type) { $this->settings_store->update_origin_address($response->normalized); } return array('success' => true, 'normalized' => $response->normalized); }
public function get_item($request) { $response = $this->api_client->get_label_status($request['label_id']); if (is_wp_error($response)) { $error = new WP_Error($response->get_error_code(), $response->get_error_message(), array('message' => $response->get_error_message())); $this->logger->log($error, __CLASS__); return $error; } $this->settings_store->update_label_order_meta_data($request['order_id'], $response->label); return array('success' => true, 'label' => $response->label); }
public function update_items($request) { $request_body = $request->get_body(); $settings = json_decode($request_body, true, WOOCOMMERCE_CONNECT_MAX_JSON_DECODE_DEPTH); $result = $this->settings_store->update_account_settings($settings); if (is_wp_error($result)) { $error = new WP_Error('save_failed', sprintf(__('Unable to update settings. %s', 'connectforwoocommerce'), $result->get_error_message()), array_merge(array('status' => 400), $result->get_error_data())); $this->logger->log($error, __CLASS__); return $error; } return new WP_REST_Response(array('success' => true), 200); }
public function fetch_service_schemas_from_connect_server() { $response_body = $this->api_client->get_service_schemas(); if (is_wp_error($response_body)) { $this->logger->log($response_body, __FUNCTION__); return; } $this->logger->log('Successfully loaded service schemas from server response.', __FUNCTION__); $this->update_last_fetch_timestamp(); $this->maybe_update_heartbeat(); // If we made it this far, it is safe to store the object $this->update_service_schemas($response_body); }
/** * * @param WP_REST_Request $request - See WC_Connect_API_Client::get_label_rates() * @return array|WP_Error */ public function update_items($request) { $request_body = $request->get_body(); $payload = json_decode($request_body, true, WOOCOMMERCE_CONNECT_MAX_JSON_DECODE_DEPTH); // Hardcode USPS rates for now $payload['carrier'] = 'usps'; $response = $this->api_client->get_label_rates($payload); if (is_wp_error($response)) { $error = new WP_Error($response->get_error_code(), $response->get_error_message(), array('message' => $response->get_error_message())); $this->logger->log($error, __CLASS__); return $error; } return array('success' => true, 'rates' => property_exists($response, 'rates') ? $response->rates : new stdClass()); }
/** * Hook the REST API * Note that we cannot load our controller until this time, because prior to * rest_api_init firing, WP_REST_Controller is not yet defined */ public function rest_api_init() { $schemas_store = $this->get_service_schemas_store(); $settings_store = $this->get_service_settings_store(); $logger = $this->get_logger(); ////////////////////////////////////////////////////////////////////////////// // TODO - Remove this when woocommerce/pull/10435 lands if (!class_exists('WP_REST_Controller')) { include_once plugin_basename('vendor/class-wp-rest-controller.php'); } ////////////////////////////////////////////////////////////////////////////// if (!class_exists('WP_REST_Controller')) { $this->logger->log('Error. WP_REST_Controller could not be found', __FUNCTION__); return; } require_once plugin_basename('classes/class-wc-rest-connect-packages-controller.php'); $rest_packages_controller = new WC_REST_Connect_Packages_Controller($settings_store, $logger); $this->set_rest_packages_controller($rest_packages_controller); $rest_packages_controller->register_routes(); require_once plugin_basename('classes/class-wc-rest-connect-account-settings-controller.php'); $rest_account_settings_controller = new WC_REST_Connect_Account_Settings_Controller($this->api_client, $settings_store, $logger); $this->set_rest_account_settings_controller($rest_account_settings_controller); $rest_account_settings_controller->register_routes(); require_once plugin_basename('classes/class-wc-rest-connect-services-controller.php'); $rest_services_controller = new WC_REST_Connect_Services_Controller($schemas_store, $settings_store, $logger); $this->set_rest_services_controller($rest_services_controller); $rest_services_controller->register_routes(); require_once plugin_basename('classes/class-wc-rest-connect-self-help-controller.php'); $rest_self_help_controller = new WC_REST_Connect_Self_Help_Controller($logger); $this->set_rest_self_help_controller($rest_self_help_controller); $rest_self_help_controller->register_routes(); require_once plugin_basename('classes/class-wc-rest-connect-shipping-label-controller.php'); $rest_shipping_label_controller = new WC_REST_Connect_Shipping_Label_Controller($this->api_client, $settings_store, $logger); $this->set_rest_shipping_label_controller($rest_shipping_label_controller); $rest_shipping_label_controller->register_routes(); require_once plugin_basename('classes/class-wc-rest-connect-shipping-label-status-controller.php'); $rest_shipping_label_status_controller = new WC_REST_Connect_Shipping_Label_Status_Controller($this->api_client, $settings_store, $logger); $this->set_rest_shipping_label_status_controller($rest_shipping_label_status_controller); $rest_shipping_label_status_controller->register_routes(); require_once plugin_basename('classes/class-wc-rest-connect-shipping-label-refund-controller.php'); $rest_shipping_label_refund_controller = new WC_REST_Connect_Shipping_Label_Refund_Controller($this->api_client, $settings_store, $logger); $this->set_rest_shipping_label_refund_controller($rest_shipping_label_refund_controller); $rest_shipping_label_refund_controller->register_routes(); require_once plugin_basename('classes/class-wc-rest-connect-shipping-labels-preview-controller.php'); $rest_shipping_labels_preview_controller = new WC_REST_Connect_Shipping_Labels_Preview_Controller($this->api_client, $settings_store, $logger); $this->set_rest_shipping_labels_preview_controller($rest_shipping_labels_preview_controller); $rest_shipping_labels_preview_controller->register_routes(); require_once plugin_basename('classes/class-wc-rest-connect-shipping-labels-print-controller.php'); $rest_shipping_labels_print_controller = new WC_REST_Connect_Shipping_Labels_Print_Controller($this->api_client, $settings_store, $logger); $this->set_rest_shipping_labels_print_controller($rest_shipping_labels_print_controller); $rest_shipping_labels_print_controller->register_routes(); require_once plugin_basename('classes/class-wc-rest-connect-shipping-rates-controller.php'); $rest_shipping_rates_controller = new WC_REST_Connect_Shipping_Rates_Controller($this->api_client, $settings_store, $logger); $this->set_rest_shipping_rates_controller($rest_shipping_rates_controller); $rest_shipping_rates_controller->register_routes(); require_once plugin_basename('classes/class-wc-rest-connect-address-normalization-controller.php'); $rest_address_normalization_controller = new WC_REST_Connect_Address_Normalization_Controller($this->api_client, $settings_store, $logger); $this->set_rest_address_normalization_controller($rest_address_normalization_controller); $rest_address_normalization_controller->register_routes(); }
public function fetch_payment_methods_from_connect_server() { $response_body = $this->api_client->get_payment_methods(); if (is_wp_error($response_body)) { $this->logger->log($response_body, __FUNCTION__); return; } $payment_methods = $this->get_payment_methods_from_response_body($response_body); if (is_wp_error($payment_methods)) { $this->logger->log($payment_methods, __FUNCTION__); return; } // If we made it this far, it is safe to store the object $this->update_payment_methods($payment_methods); $this->potentially_update_selected_payment_method_from_payment_methods($payment_methods); }
private function translate_unit($value) { switch ($value) { case 'kg': return __('kg', 'connectforwoocommerce'); case 'g': return __('g', 'connectforwoocommerce'); case 'lbs': return __('lbs', 'connectforwoocommerce'); case 'oz': return __('oz', 'connectforwoocommerce'); case 'm': return __('m', 'connectforwoocommerce'); case 'cm': return __('cm', 'connectforwoocommerce'); case 'mm': return __('mm', 'connectforwoocommerce'); case 'in': return __('in', 'connectforwoocommerce'); case 'yd': return __('yd', 'connectforwoocommerce'); default: $this->logger->log('Unexpected measurement unit: ' . $value, __FUNCTION__); return $value; } }
public function update_items($request) { $response = $this->api_client->send_shipping_label_refund_request($request['label_id']); if (isset($response->error)) { $response = new WP_Error(property_exists($response->error, 'code') ? $response->error->code : 'refund_error', property_exists($response->error, 'message') ? $response->error->message : ''); } if (is_wp_error($response)) { $response->add_data(array('message' => $response->get_error_message()), $response->get_error_code()); $this->logger->log($response, __CLASS__); return $response; } // TODO: use $response->refund->amount ? $label_refund = (object) array('label_id' => (int) $response->label->id, 'refunded_time' => time() * 1000); $this->settings_store->update_label_order_meta_data($request['order_id'], $label_refund); return array('success' => true, 'label' => $label_refund); }
/** * Attempts to update the settings on a particular service and instance */ public function update_items($request) { $request_params = $request->get_params(); $request_body = $request->get_body(); $settings = json_decode($request_body, false, WOOCOMMERCE_CONNECT_MAX_JSON_DECODE_DEPTH); if (empty($settings) || !is_object($settings) || !property_exists($settings, 'wcc_debug_on')) { $error = new WP_Error('bad_form_data', __('Unable to update settings. The form data could not be read.', 'connectforwoocommerce'), array('status' => 400)); $this->logger->log($error, __CLASS__); return $error; } error_log("WCC DEBUG ON = {$settings->wcc_debug_on}"); if (1 == $settings->wcc_debug_on) { $this->logger->enable_logging(); } else { $this->logger->disable_logging(); } return new WP_REST_Response(array('success' => true), 200); }
public function get_item($request) { $raw_params = $request->get_params(); $params = array(); $params['paper_size'] = $raw_params['paper_size']; $this->settings_store->set_preferred_paper_size($params['paper_size']); $params['carrier'] = 'usps'; $params['labels'] = array(); foreach ($raw_params['captions'] as $caption) { $params['labels'][] = array('caption' => $caption); } $raw_response = $this->api_client->get_labels_preview_pdf($params); if (is_wp_error($raw_response)) { $this->logger->log($raw_response, __CLASS__); return $raw_response; } header('content-type: ' . $raw_response['headers']['content-type']); echo $raw_response['body']; die; }
public function update_items($request) { $request_body = $request->get_body(); $settings = json_decode($request_body, true, WOOCOMMERCE_CONNECT_MAX_JSON_DECODE_DEPTH); $order_id = $settings['order_id']; $settings['payment_method_id'] = $this->settings_store->get_selected_payment_method_id(); $settings['carrier'] = 'usps'; $settings['label_size'] = 'default'; $settings['ship_date'] = date('Y-m-d', time() + 86400); // tomorrow $service_names = array(); foreach ($settings['packages'] as $index => $package) { $service_names[] = $package['service_name']; unset($package['service_name']); $settings['packages'][$index] = $package; } $response = $this->api_client->send_shipping_label_request($settings); if (is_wp_error($response)) { $error = new WP_Error($response->get_error_code(), $response->get_error_message(), array('message' => $response->get_error_message())); $this->logger->log($error, __CLASS__); return $error; } $labels_order_meta = array(); $labels_data = array(); foreach ($response->labels as $index => $label_data) { if (isset($label_data->error)) { $error = new WP_Error($label_data->error->code, $label_data->error->message, array('message' => $label_data->error->message)); $this->logger->log($error, __CLASS__); return $error; } $labels_data[] = $label_data->label; $labels_order_meta[] = array('label_id' => $label_data->label->label_id, 'tracking' => $label_data->label->tracking_id, 'refundable_amount' => $label_data->label->refundable_amount, 'created' => $label_data->label->created, 'carrier_id' => $settings['carrier'], 'service_name' => $service_names[$index]); } update_post_meta($order_id, 'wc_connect_labels', json_encode($labels_order_meta)); return array('labels' => $labels_order_meta, 'success' => true); }
protected function log($message) { if (!is_null($this->logger)) { $this->logger->log($message); } }