WooCommerce Services - Version 1.6.1

Version Description

  • Better UX when selecting shipping label payment method
Download this release

Release Info

Developer woothemes
Plugin Icon 128x128 WooCommerce Services
Version 1.6.1
Comparing to
See all releases

Code changes from version 1.6.0 to 1.6.1

classes/class-wc-connect-api-client.php CHANGED
@@ -382,6 +382,33 @@ if ( ! class_exists( 'WC_Connect_API_Client' ) ) {
382
return $response_body;
383
}
384
385
/**
386
* Adds useful WP/WC/WCC information to request bodies
387
*
382
return $response_body;
383
}
384
385
+ /**
386
+ * Proxy an HTTP request through the WCS Server
387
+ *
388
+ * @param $path Path of proxy route
389
+ * @param $args WP_Http request args
390
+ *
391
+ * @return array|WP_Error
392
+ */
393
+ public function proxy_request( $path, $args ) {
394
+ $proxy_url = trailingslashit( WOOCOMMERCE_CONNECT_SERVER_URL );
395
+ $proxy_url .= ltrim( $path, '/' );
396
+
397
+ $args['headers']['Authorization'] = $this->authorization_header();
398
+
399
+ $http_timeout = 60; // 1 minute
400
+
401
+ if ( function_exists( 'wc_set_time_limit' ) ) {
402
+ wc_set_time_limit( $http_timeout + 10 );
403
+ }
404
+
405
+ $args['timeout'] = $http_timeout;
406
+
407
+ $response = wp_remote_request( $proxy_url, $args );
408
+
409
+ return $response;
410
+ }
411
+
412
/**
413
* Adds useful WP/WC/WCC information to request bodies
414
*
classes/class-wc-connect-payment-methods-store.php CHANGED
@@ -50,31 +50,28 @@ if ( ! class_exists( 'WC_Connect_Payment_Methods_Store' ) ) {
50
}
51
52
protected function potentially_update_selected_payment_method_from_payment_methods( $payment_methods ) {
53
- $payment_method_count = count( $payment_methods );
54
-
55
- // No payment methods at all? Clear anything we have stored
56
- if ( 0 === $payment_method_count ) {
57
- $this->service_settings_store->set_selected_payment_method_id( 0 );
58
- return;
59
- }
60
-
61
$payment_method_ids = array();
62
foreach ( (array) $payment_methods as $payment_method ) {
63
$payment_method_id = intval( $payment_method->payment_method_id );
64
if ( 0 !== $payment_method_id ) {
65
$payment_method_ids[] = $payment_method_id;
66
}
67
}
68
69
- // Just one? Go ahead and use it
70
- if ( 1 === $payment_method_count ) {
71
- $this->service_settings_store->set_selected_payment_method_id( $payment_method_ids[ 0 ] );
72
return;
73
}
74
75
- // Is the stored method id not in the list? Select the first one
76
$selected_payment_method_id = $this->service_settings_store->get_selected_payment_method_id();
77
- if ( ! in_array( $selected_payment_method_id, $payment_method_ids ) ) {
78
$this->service_settings_store->set_selected_payment_method_id( $payment_method_ids[ 0 ] );
79
}
80
}
50
}
51
52
protected function potentially_update_selected_payment_method_from_payment_methods( $payment_methods ) {
53
$payment_method_ids = array();
54
+
55
foreach ( (array) $payment_methods as $payment_method ) {
56
$payment_method_id = intval( $payment_method->payment_method_id );
57
+
58
if ( 0 !== $payment_method_id ) {
59
$payment_method_ids[] = $payment_method_id;
60
}
61
}
62
63
+ // No payment methods at all? Clear anything we have stored
64
+ if ( 0 === count( $payment_method_ids ) ) {
65
+ $this->service_settings_store->set_selected_payment_method_id( 0 );
66
return;
67
}
68
69
+ // Has the stored method ID been removed? Select the first available one
70
$selected_payment_method_id = $this->service_settings_store->get_selected_payment_method_id();
71
+ if (
72
+ $selected_payment_method_id &&
73
+ ! in_array( $selected_payment_method_id, $payment_method_ids )
74
+ ) {
75
$this->service_settings_store->set_selected_payment_method_id( $payment_method_ids[ 0 ] );
76
}
77
}
classes/class-wc-connect-taxjar-integration.php ADDED
@@ -0,0 +1,87 @@
1
+ <?php
2
+
3
+ class WC_Connect_TaxJar_Integration {
4
+
5
+ /**
6
+ * @var WC_Connect_API_Client
7
+ */
8
+ public $api_client;
9
+
10
+ /**
11
+ * @var WC_Taxjar_Integration
12
+ */
13
+ protected $taxjar_integration;
14
+
15
+ const TAXJAR_URL = 'https://api.taxjar.com';
16
+ const PROXY_PATH = 'taxjar';
17
+ const FAKE_TOKEN = '[Managed by WooCommerce Services]';
18
+
19
+ public function __construct( WC_Connect_API_Client $api_client ) {
20
+ $this->api_client = $api_client;
21
+ }
22
+
23
+ public function init() {
24
+ add_filter( 'default_option_woocommerce_taxjar-integration_settings', array( $this, 'override_taxjar_settings' ) );
25
+ add_filter( 'option_woocommerce_taxjar-integration_settings', array( $this, 'check_taxjar_settings' ) );
26
+ }
27
+
28
+ public function check_taxjar_settings( $settings ) {
29
+ if (
30
+ isset( $settings['api_token'] ) &&
31
+ ( $settings['api_token'] === strtolower( self::FAKE_TOKEN ) )
32
+ ) {
33
+ return $this->override_taxjar_settings( $settings );
34
+ }
35
+
36
+ return $settings;
37
+ }
38
+
39
+ public function override_taxjar_settings( $settings ) {
40
+ $store_city = get_option( 'woocommerce_store_city' );
41
+ $store_postcode = get_option( 'woocommerce_store_postcode' );
42
+
43
+ // Check for store address before hijacking requests.
44
+ if ( empty( $store_city ) || empty( $store_postcode ) ) {
45
+ return $settings;
46
+ }
47
+
48
+ // Attach proxy filter.
49
+ add_filter( 'pre_http_request', array( $this, 'proxy_taxjar_requests' ), 10, 3 );
50
+
51
+ if ( ! is_array( $settings ) ) {
52
+ $settings = array();
53
+ }
54
+
55
+ $settings = array_merge( $settings, array(
56
+ 'api_token' => self::FAKE_TOKEN,
57
+ 'enabled' => 'yes',
58
+ 'store_city' => $store_city,
59
+ 'store_zip' => $store_postcode,
60
+ ) );
61
+
62
+ return $settings;
63
+ }
64
+
65
+ public function proxy_taxjar_requests( $pre, $r, $url ) {
66
+ // TODO: get verification requests working through proxy
67
+ if ( 'https://api.taxjar.com/v2/verify' === $url ) {
68
+ return array(
69
+ 'response' => array(
70
+ 'code' => 200,
71
+ ),
72
+ 'body' => '',
73
+ );
74
+ }
75
+
76
+ // Proxy all TaxJar requests through the WCS server
77
+ if ( strpos( $url, self::TAXJAR_URL ) === 0 ) {
78
+ $taxjar_url = trailingslashit( self::TAXJAR_URL );
79
+ $wcs_path = trailingslashit( self::PROXY_PATH );
80
+ $proxy_path = str_replace( $taxjar_url, $wcs_path, $url );
81
+
82
+ return $this->api_client->proxy_request( $proxy_path, $r );
83
+ }
84
+
85
+ return $pre;
86
+ }
87
+ }
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: automattic, woothemes, allendav, kellychoffman, jkudish, jeffstiel
3
Tags: canada-post, shipping, stamps, usps, woocommerce
4
Requires at least: 4.6
5
Tested up to: 4.8
6
- Stable tag: 1.6.0
7
License: GPLv2 or later
8
License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
@@ -79,6 +79,9 @@ The source code is freely available [in GitHub](https://github.com/Automattic/wo
79
80
== Changelog ==
81
82
= 1.6.0 =
83
* New streamlined onboarding process for plugin dependencies
84
* Better packaging workflow for orders not using live rates at checkout
3
Tags: canada-post, shipping, stamps, usps, woocommerce
4
Requires at least: 4.6
5
Tested up to: 4.8
6
+ Stable tag: 1.6.1
7
License: GPLv2 or later
8
License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
79
80
== Changelog ==
81
82
+ = 1.6.1 =
83
+ * Better UX when selecting shipping label payment method
84
+
85
= 1.6.0 =
86
* New streamlined onboarding process for plugin dependencies
87
* Better packaging workflow for orders not using live rates at checkout
woocommerce-services.php CHANGED
@@ -7,7 +7,7 @@
7
* Author URI: http://woocommerce.com/
8
* Text Domain: woocommerce-services
9
* Domain Path: /i18n/languages/
10
- * Version: 1.6.0
11
*
12
* Copyright (c) 2017 Automattic
13
*
@@ -152,6 +152,11 @@ if ( ! class_exists( 'WC_Connect_Loader' ) ) {
152
*/
153
protected $nux;
154
155
protected $services = array();
156
157
protected $service_object_cache = array();
@@ -169,7 +174,7 @@ if ( ! class_exists( 'WC_Connect_Loader' ) ) {
169
public function __construct() {
170
$this->wc_connect_base_url = trailingslashit( defined( 'WOOCOMMERCE_CONNECT_DEV_SERVER_URL' ) ? WOOCOMMERCE_CONNECT_DEV_SERVER_URL : plugins_url( 'dist/', __FILE__ ) );
171
add_action( 'plugins_loaded', array( $this, 'load_textdomain' ) );
172
- add_action( 'woocommerce_init', array( $this, 'init' ) );
173
}
174
175
public function get_logger() {
@@ -332,6 +337,10 @@ if ( ! class_exists( 'WC_Connect_Loader' ) ) {
332
$this->nux = $nux;
333
}
334
335
/**
336
* Load our textdomain
337
*
@@ -342,11 +351,11 @@ if ( ! class_exists( 'WC_Connect_Loader' ) ) {
342
}
343
344
/**
345
- * Bootstrap our plugin and hook into WP/WC core.
346
*
347
- * @codeCoverageIgnore
348
*/
349
- public function init() {
350
$this->load_dependencies();
351
352
add_action( 'admin_init', array( $this, 'admin_enqueue_scripts' ) );
@@ -361,6 +370,16 @@ if ( ! class_exists( 'WC_Connect_Loader' ) ) {
361
return;
362
}
363
364
$this->schedule_service_schemas_fetch();
365
$this->service_settings_store->migrate_legacy_services();
366
$this->attach_hooks();
@@ -370,11 +389,12 @@ if ( ! class_exists( 'WC_Connect_Loader' ) ) {
370
* Load all plugin dependencies.
371
*/
372
public function load_dependencies() {
373
- require_once( plugin_basename( 'classes/class-wc-connect-error-notice.php' ) );
374
- require_once( plugin_basename( 'classes/class-wc-connect-compatibility.php' ) );
375
require_once( plugin_basename( 'classes/class-wc-connect-logger.php' ) );
376
require_once( plugin_basename( 'classes/class-wc-connect-api-client.php' ) );
377
require_once( plugin_basename( 'classes/class-wc-connect-service-schemas-validator.php' ) );
378
require_once( plugin_basename( 'classes/class-wc-connect-shipping-method.php' ) );
379
require_once( plugin_basename( 'classes/class-wc-connect-service-schemas-store.php' ) );
380
require_once( plugin_basename( 'classes/class-wc-connect-service-settings-store.php' ) );
@@ -384,6 +404,7 @@ if ( ! class_exists( 'WC_Connect_Loader' ) ) {
384
require_once( plugin_basename( 'classes/class-wc-connect-shipping-label.php' ) );
385
require_once( plugin_basename( 'classes/class-wc-connect-nux.php' ) );
386
387
$logger = new WC_Connect_Logger( new WC_Logger() );
388
$validator = new WC_Connect_Service_Schemas_Validator();
389
$api_client = new WC_Connect_API_Client( $validator, $this );
@@ -393,6 +414,7 @@ if ( ! class_exists( 'WC_Connect_Loader' ) ) {
393
$tracks = new WC_Connect_Tracks( $logger, __FILE__ );
394
$shipping_label = new WC_Connect_Shipping_Label( $api_client, $settings_store, $schemas_store, $payment_methods_store );
395
$nux = new WC_Connect_Nux( $tracks, $shipping_label );
396
397
$this->set_logger( $logger );
398
$this->set_api_client( $api_client );
@@ -403,6 +425,9 @@ if ( ! class_exists( 'WC_Connect_Loader' ) ) {
403
$this->set_tracks( $tracks );
404
$this->set_shipping_label( $shipping_label );
405
$this->set_nux( $nux );
406
}
407
408
/**
7
* Author URI: http://woocommerce.com/
8
* Text Domain: woocommerce-services
9
* Domain Path: /i18n/languages/
10
+ * Version: 1.6.1
11
*
12
* Copyright (c) 2017 Automattic
13
*
152
*/
153
protected $nux;
154
155
+ /**
156
+ * @var WC_Connect_TaxJar_Integration
157
+ */
158
+ protected $taxjar;
159
+
160
protected $services = array();
161
162
protected $service_object_cache = array();
174
public function __construct() {
175
$this->wc_connect_base_url = trailingslashit( defined( 'WOOCOMMERCE_CONNECT_DEV_SERVER_URL' ) ? WOOCOMMERCE_CONNECT_DEV_SERVER_URL : plugins_url( 'dist/', __FILE__ ) );
176
add_action( 'plugins_loaded', array( $this, 'load_textdomain' ) );
177
+ add_action( 'before_woocommerce_init', array( $this, 'pre_wc_init' ) );
178
}
179
180
public function get_logger() {
337
$this->nux = $nux;
338
}
339
340
+ public function set_taxjar( WC_Connect_TaxJar_Integration $taxjar ) {
341
+ $this->taxjar = $taxjar;
342
+ }
343
+
344
/**
345
* Load our textdomain
346
*
351
}
352
353
/**
354
+ * Perform plugin bootstrapping that needs to happen before WC init.
355
*
356
+ * This allows the modification of extensions, integrations, etc.
357
*/
358
+ public function pre_wc_init() {
359
$this->load_dependencies();
360
361
add_action( 'admin_init', array( $this, 'admin_enqueue_scripts' ) );
370
return;
371
}
372
373
+ add_action( 'woocommerce_init', array( $this, 'after_wc_init' ) );
374
+ $this->taxjar->init();
375
+ }
376
+
377
+ /**
378
+ * Bootstrap our plugin and hook into WP/WC core.
379
+ *
380
+ * @codeCoverageIgnore
381
+ */
382
+ public function after_wc_init() {
383
$this->schedule_service_schemas_fetch();
384
$this->service_settings_store->migrate_legacy_services();
385
$this->attach_hooks();
389
* Load all plugin dependencies.
390
*/
391
public function load_dependencies() {
392
require_once( plugin_basename( 'classes/class-wc-connect-logger.php' ) );
393
require_once( plugin_basename( 'classes/class-wc-connect-api-client.php' ) );
394
require_once( plugin_basename( 'classes/class-wc-connect-service-schemas-validator.php' ) );
395
+ require_once( plugin_basename( 'classes/class-wc-connect-taxjar-integration.php' ) );
396
+ require_once( plugin_basename( 'classes/class-wc-connect-error-notice.php' ) );
397
+ require_once( plugin_basename( 'classes/class-wc-connect-compatibility.php' ) );
398
require_once( plugin_basename( 'classes/class-wc-connect-shipping-method.php' ) );
399
require_once( plugin_basename( 'classes/class-wc-connect-service-schemas-store.php' ) );
400
require_once( plugin_basename( 'classes/class-wc-connect-service-settings-store.php' ) );
404
require_once( plugin_basename( 'classes/class-wc-connect-shipping-label.php' ) );
405
require_once( plugin_basename( 'classes/class-wc-connect-nux.php' ) );
406
407
+
408
$logger = new WC_Connect_Logger( new WC_Logger() );
409
$validator = new WC_Connect_Service_Schemas_Validator();
410
$api_client = new WC_Connect_API_Client( $validator, $this );
414
$tracks = new WC_Connect_Tracks( $logger, __FILE__ );
415
$shipping_label = new WC_Connect_Shipping_Label( $api_client, $settings_store, $schemas_store, $payment_methods_store );
416
$nux = new WC_Connect_Nux( $tracks, $shipping_label );
417
+ $taxjar = new WC_Connect_TaxJar_Integration( $api_client );
418
419
$this->set_logger( $logger );
420
$this->set_api_client( $api_client );
425
$this->set_tracks( $tracks );
426
$this->set_shipping_label( $shipping_label );
427
$this->set_nux( $nux );
428
+ $this->set_taxjar( $taxjar );
429
+
430
+ add_action( 'admin_init', array( $this, 'load_admin_dependencies' ) );
431
}
432
433
/**