WooCommerce Germanized - Version 3.10.6

Version Description

  • Improvement: Prevent new account activation email from being sent during DOI process in latest Woo version
  • Improvement: Prevent install redirection loops when transients fail
  • Fix: Formal localized decimal in packaging admin list
  • Fix: Formal language install check
Download this release

Release Info

Developer vendidero
Plugin Icon 128x128 WooCommerce Germanized
Version 3.10.6
Comparing to
See all releases

Code changes from version 3.10.5 to 3.10.6

Files changed (44) hide show
  1. includes/admin/class-wc-gzd-admin.php +1 -1
  2. includes/class-wc-gzd-customer-helper.php +32 -10
  3. includes/class-wc-gzd-install.php +11 -2
  4. includes/wc-gzd-legacy-functions.php +17 -13
  5. packages/woocommerce-germanized-shipments/src/Admin/Admin.php +5 -5
  6. packages/woocommerce-germanized-shipments/src/Package.php +1 -1
  7. packages/woocommerce-germanized-shipments/woocommerce-germanized-shipments.php +1 -1
  8. readme.txt +8 -9
  9. vendor/autoload.php +1 -1
  10. vendor/autoload_packages.php +1 -1
  11. vendor/composer/autoload_real.php +7 -7
  12. vendor/composer/autoload_static.php +4 -4
  13. vendor/composer/installed.json +7 -7
  14. vendor/composer/installed.php +5 -5
  15. vendor/composer/jetpack_autoload_classmap.php +61 -61
  16. vendor/dvdoug/boxpacker/docs/Dockerfile +0 -3
  17. vendor/dvdoug/boxpacker/docs/Makefile +0 -20
  18. vendor/dvdoug/boxpacker/docs/advanced-usage.rst +0 -196
  19. vendor/dvdoug/boxpacker/docs/build.ps1 +0 -2
  20. vendor/dvdoug/boxpacker/docs/conf.py +0 -174
  21. vendor/dvdoug/boxpacker/docs/getting-started.rst +0 -95
  22. vendor/dvdoug/boxpacker/docs/index.rst +0 -29
  23. vendor/dvdoug/boxpacker/docs/installation.rst +0 -31
  24. vendor/dvdoug/boxpacker/docs/principles.rst +0 -22
  25. vendor/dvdoug/boxpacker/docs/rotation.rst +0 -68
  26. vendor/dvdoug/boxpacker/docs/sortation.rst +0 -156
  27. vendor/dvdoug/boxpacker/docs/too-large-items.rst +0 -60
  28. vendor/dvdoug/boxpacker/docs/weight-distribution.rst +0 -33
  29. vendor/dvdoug/boxpacker/docs/whatsnew.rst +0 -88
  30. vendor/jetpack-autoloader/class-autoloader-handler.php +1 -1
  31. vendor/jetpack-autoloader/class-autoloader-locator.php +1 -1
  32. vendor/jetpack-autoloader/class-autoloader.php +1 -1
  33. vendor/jetpack-autoloader/class-container.php +1 -1
  34. vendor/jetpack-autoloader/class-hook-manager.php +1 -1
  35. vendor/jetpack-autoloader/class-latest-autoloader-guard.php +1 -1
  36. vendor/jetpack-autoloader/class-manifest-reader.php +1 -1
  37. vendor/jetpack-autoloader/class-path-processor.php +1 -1
  38. vendor/jetpack-autoloader/class-php-autoloader.php +1 -1
  39. vendor/jetpack-autoloader/class-plugin-locator.php +1 -1
  40. vendor/jetpack-autoloader/class-plugins-handler.php +1 -1
  41. vendor/jetpack-autoloader/class-shutdown-handler.php +1 -1
  42. vendor/jetpack-autoloader/class-version-loader.php +1 -1
  43. vendor/jetpack-autoloader/class-version-selector.php +1 -1
  44. woocommerce-germanized.php +2 -2
includes/admin/class-wc-gzd-admin.php CHANGED
@@ -820,7 +820,7 @@ class WC_GZD_Admin {
820
 
821
  protected function check_language_install() {
822
  require_once ABSPATH . 'wp-admin/includes/translation-install.php';
823
- $language = isset( $_GET['install-language'] ) ? sanitize_text_field( wp_unslash( $_GET['install-language'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
824
 
825
  if ( empty( $language ) ) {
826
  return false;
820
 
821
  protected function check_language_install() {
822
  require_once ABSPATH . 'wp-admin/includes/translation-install.php';
823
+ $language = isset( $_GET['wc-gzd-check-language_install'] ) ? sanitize_text_field( wp_unslash( $_GET['wc-gzd-check-language_install'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
824
 
825
  if ( empty( $language ) ) {
826
  return false;
includes/class-wc-gzd-customer-helper.php CHANGED
@@ -34,7 +34,7 @@ class WC_GZD_Customer_Helper {
34
 
35
  public function __construct() {
36
  // Send customer account notification
37
- add_action( 'woocommerce_email', array( $this, 'email_hooks' ), 0, 1 );
38
 
39
  // Add Title to user profile
40
  add_filter( 'woocommerce_customer_meta_fields', array( $this, 'profile_field_title' ), 10, 1 );
@@ -175,7 +175,7 @@ class WC_GZD_Customer_Helper {
175
  $session_user_id = get_current_user_id();
176
  }
177
 
178
- if ( $session_user_id && $session_user_id > 0 && ! is_cart() && ! is_checkout() && $this->enable_double_opt_in_for_user( $session_user_id ) && ! wc_gzd_is_customer_activated( $session_user_id ) && ! isset( $_GET['wc-gzd-resent'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
179
  $notice_text = sprintf( __( 'Did not receive the activation email? <a href="%s">Try again</a>.', 'woocommerce-germanized' ), esc_url( $this->get_resend_activation_url() ) );
180
 
181
  if ( ! wc_has_notice( $notice_text, 'notice' ) ) {
@@ -343,8 +343,8 @@ class WC_GZD_Customer_Helper {
343
  }
344
 
345
  public function show_disabled_checkout_notice() {
346
-
347
  if ( ! is_user_logged_in() && isset( $_GET['account'] ) && 'activate' === $_GET['account'] ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
 
348
  wc_add_notice( __( 'Please activate your account through clicking on the activation link received via email.', 'woocommerce-germanized' ), 'notice' );
349
 
350
  return;
@@ -510,6 +510,7 @@ class WC_GZD_Customer_Helper {
510
  }
511
  }
512
  } elseif ( isset( $_GET['activated'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
 
513
  wc_add_notice( __( 'Thank you. You have successfully activated your account.', 'woocommerce-germanized' ), 'notice' );
514
  }
515
  }
@@ -629,9 +630,7 @@ class WC_GZD_Customer_Helper {
629
  $expiration_duration = apply_filters( 'woocommerce_germanized_account_activation_expiration', DAY_IN_SECONDS );
630
 
631
  if ( ! empty( $user_query->results ) ) {
632
-
633
  foreach ( $user_query->results as $user ) {
634
-
635
  $expiration_time = false;
636
 
637
  if ( false !== strpos( $activation_code, ':' ) ) {
@@ -640,7 +639,6 @@ class WC_GZD_Customer_Helper {
640
  }
641
 
642
  if ( $expiration_time && time() < $expiration_time ) {
643
-
644
  /**
645
  * Customer has opted-in.
646
  *
@@ -655,12 +653,21 @@ class WC_GZD_Customer_Helper {
655
  do_action( 'woocommerce_gzd_customer_opted_in', $user );
656
  delete_user_meta( $user->ID, '_woocommerce_activation' );
657
 
 
 
 
 
 
 
 
658
  if ( $this->send_password_reset_link_instead_of_passwords() ) {
659
- WC()->mailer()->customer_new_account( $user->ID, array(), true );
660
  } else {
661
- WC()->mailer()->customer_new_account( $user->ID );
662
  }
663
 
 
 
664
  /**
665
  * Filter to optionally disable automatically authenticate activated customers.
666
  *
@@ -746,11 +753,27 @@ class WC_GZD_Customer_Helper {
746
  public function email_hooks( $mailer ) {
747
  // Add new customer activation
748
  if ( $this->is_double_opt_in_enabled() ) {
749
- remove_action( 'woocommerce_created_customer_notification', array( $mailer, 'customer_new_account' ), 10 );
750
  add_action( 'woocommerce_created_customer_notification', array( $this, 'customer_new_account_activation' ), 9, 3 );
 
 
 
 
 
 
 
 
 
 
 
 
 
751
  }
752
  }
753
 
 
 
 
 
754
  /**
755
  * Customer new account activation email.
756
  *
@@ -767,7 +790,6 @@ class WC_GZD_Customer_Helper {
767
  }
768
 
769
  if ( $email = WC_germanized()->emails->get_email_instance_by_id( 'customer_new_account_activation' ) ) {
770
-
771
  if ( $email->is_enabled() ) {
772
  $user_pass = ! empty( $new_customer_data['user_pass'] ) ? $new_customer_data['user_pass'] : '';
773
  $user_activation = $this->get_customer_activation_meta( $customer_id );
34
 
35
  public function __construct() {
36
  // Send customer account notification
37
+ add_action( 'woocommerce_email', array( $this, 'email_hooks' ), 50, 1 );
38
 
39
  // Add Title to user profile
40
  add_filter( 'woocommerce_customer_meta_fields', array( $this, 'profile_field_title' ), 10, 1 );
175
  $session_user_id = get_current_user_id();
176
  }
177
 
178
+ if ( $session_user_id && $session_user_id > 0 && ! is_cart() && ! is_checkout() && $this->enable_double_opt_in_for_user( $session_user_id ) && ! wc_gzd_is_customer_activated( $session_user_id ) && ( ! isset( $_GET['wc-gzd-resent'] ) && ! isset( $_GET['activated'] ) ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
179
  $notice_text = sprintf( __( 'Did not receive the activation email? <a href="%s">Try again</a>.', 'woocommerce-germanized' ), esc_url( $this->get_resend_activation_url() ) );
180
 
181
  if ( ! wc_has_notice( $notice_text, 'notice' ) ) {
343
  }
344
 
345
  public function show_disabled_checkout_notice() {
 
346
  if ( ! is_user_logged_in() && isset( $_GET['account'] ) && 'activate' === $_GET['account'] ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
347
+ wc_clear_notices();
348
  wc_add_notice( __( 'Please activate your account through clicking on the activation link received via email.', 'woocommerce-germanized' ), 'notice' );
349
 
350
  return;
510
  }
511
  }
512
  } elseif ( isset( $_GET['activated'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
513
+ wc_clear_notices();
514
  wc_add_notice( __( 'Thank you. You have successfully activated your account.', 'woocommerce-germanized' ), 'notice' );
515
  }
516
  }
630
  $expiration_duration = apply_filters( 'woocommerce_germanized_account_activation_expiration', DAY_IN_SECONDS );
631
 
632
  if ( ! empty( $user_query->results ) ) {
 
633
  foreach ( $user_query->results as $user ) {
 
634
  $expiration_time = false;
635
 
636
  if ( false !== strpos( $activation_code, ':' ) ) {
639
  }
640
 
641
  if ( $expiration_time && time() < $expiration_time ) {
 
642
  /**
643
  * Customer has opted-in.
644
  *
653
  do_action( 'woocommerce_gzd_customer_opted_in', $user );
654
  delete_user_meta( $user->ID, '_woocommerce_activation' );
655
 
656
+ /**
657
+ * Make sure email hooks are loaded before removing the disabled mail filter.
658
+ */
659
+ $mailer = WC()->mailer();
660
+
661
+ remove_filter( 'woocommerce_email_enabled_customer_new_account', array( $this, 'disable_new_account_mail_callback' ), 50 );
662
+
663
  if ( $this->send_password_reset_link_instead_of_passwords() ) {
664
+ $mailer->customer_new_account( $user->ID, array(), true );
665
  } else {
666
+ $mailer->customer_new_account( $user->ID );
667
  }
668
 
669
+ add_filter( 'woocommerce_email_enabled_customer_new_account', array( $this, 'disable_new_account_mail_callback' ), 50 );
670
+
671
  /**
672
  * Filter to optionally disable automatically authenticate activated customers.
673
  *
753
  public function email_hooks( $mailer ) {
754
  // Add new customer activation
755
  if ( $this->is_double_opt_in_enabled() ) {
 
756
  add_action( 'woocommerce_created_customer_notification', array( $this, 'customer_new_account_activation' ), 9, 3 );
757
+
758
+ /**
759
+ * The Woo Blocks New Account implementation uses a custom logic
760
+ * to send a custom activation email which prevents our remove_action logic to work.
761
+ * Add a filter to woocommerce_created_customer_notification and disable the whole email via filter instead.
762
+ *
763
+ * @see Automattic\WooCommerce\Blocks\Domain\Services\CreateAccount
764
+ */
765
+ add_action( 'woocommerce_created_customer_notification', function() {
766
+ add_filter( 'woocommerce_email_enabled_customer_new_account', array( $this, 'disable_new_account_mail_callback' ), 50 );
767
+ }, 1 );
768
+
769
+ remove_action( 'woocommerce_created_customer_notification', array( $mailer, 'customer_new_account' ), 10 );
770
  }
771
  }
772
 
773
+ public function disable_new_account_mail_callback() {
774
+ return false;
775
+ }
776
+
777
  /**
778
  * Customer new account activation email.
779
  *
790
  }
791
 
792
  if ( $email = WC_germanized()->emails->get_email_instance_by_id( 'customer_new_account_activation' ) ) {
 
793
  if ( $email->is_enabled() ) {
794
  $user_pass = ! empty( $new_customer_data['user_pass'] ) ? $new_customer_data['user_pass'] : '';
795
  $user_activation = $this->get_customer_activation_meta( $customer_id );
includes/class-wc-gzd-install.php CHANGED
@@ -86,7 +86,6 @@ if ( ! class_exists( 'WC_GZD_Install' ) ) :
86
  }
87
 
88
  if ( get_option( '_wc_gzd_setup_wizard_redirect' ) ) {
89
-
90
  // Bail if activating from network, or bulk, or within an iFrame, or AJAX (e.g. plugins screen)
91
  if ( is_network_admin() || isset( $_GET['activate-multi'] ) || defined( 'IFRAME_REQUEST' ) || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
92
  return;
@@ -97,9 +96,14 @@ if ( ! class_exists( 'WC_GZD_Install' ) ) :
97
  }
98
 
99
  delete_option( '_wc_gzd_setup_wizard_redirect' );
 
 
 
 
 
 
100
  wp_safe_redirect( esc_url_raw( admin_url( 'admin.php?page=wc-gzd-setup' ) ) );
101
  exit();
102
-
103
  } elseif ( get_transient( '_wc_gzd_activation_redirect' ) ) {
104
 
105
  // Delete the redirect transient
@@ -119,6 +123,11 @@ if ( ! class_exists( 'WC_GZD_Install' ) ) :
119
  return;
120
  }
121
 
 
 
 
 
 
122
  wp_safe_redirect( esc_url_raw( admin_url( 'index.php?page=wc-gzd-about' ) ) );
123
  exit;
124
  }
86
  }
87
 
88
  if ( get_option( '_wc_gzd_setup_wizard_redirect' ) ) {
 
89
  // Bail if activating from network, or bulk, or within an iFrame, or AJAX (e.g. plugins screen)
90
  if ( is_network_admin() || isset( $_GET['activate-multi'] ) || defined( 'IFRAME_REQUEST' ) || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
91
  return;
96
  }
97
 
98
  delete_option( '_wc_gzd_setup_wizard_redirect' );
99
+
100
+ // Prevent redirect loop in case options fail
101
+ if ( isset( $_GET['page'] ) && 'wc-gzd-setup' === wc_clean( wp_unslash( $_GET['page'] ) ) ) {
102
+ return;
103
+ }
104
+
105
  wp_safe_redirect( esc_url_raw( admin_url( 'admin.php?page=wc-gzd-setup' ) ) );
106
  exit();
 
107
  } elseif ( get_transient( '_wc_gzd_activation_redirect' ) ) {
108
 
109
  // Delete the redirect transient
123
  return;
124
  }
125
 
126
+ // Prevent redirect loop in case transients fail
127
+ if ( isset( $_GET['page'] ) && 'wc-gzd-about' === wc_clean( wp_unslash( $_GET['page'] ) ) ) {
128
+ return;
129
+ }
130
+
131
  wp_safe_redirect( esc_url_raw( admin_url( 'index.php?page=wc-gzd-about' ) ) );
132
  exit;
133
  }
includes/wc-gzd-legacy-functions.php CHANGED
@@ -132,20 +132,24 @@ function wc_gzd_bool_to_string( $bool ) {
132
  return wc_bool_to_string( $bool );
133
  }
134
 
135
- add_action( 'init', function() {
136
- if ( ! function_exists( 'wc_ts_set_crud_data' ) ) {
137
- function wc_ts_set_crud_data( $object, $key, $value ) {
138
- wc_deprecated_function( __FUNCTION__, '3.10' );
139
-
140
- return $object;
 
 
 
141
  }
142
- }
143
 
144
- if ( ! function_exists( 'wc_ts_get_crud_data' ) ) {
145
- function wc_ts_get_crud_data( $object, $key, $suppress_suffix = false ) {
146
- wc_deprecated_function( __FUNCTION__, '3.10' );
147
 
148
- return '';
 
149
  }
150
- }
151
- }, 0 );
 
132
  return wc_bool_to_string( $bool );
133
  }
134
 
135
+ add_action(
136
+ 'init',
137
+ function() {
138
+ if ( ! function_exists( 'wc_ts_set_crud_data' ) ) {
139
+ function wc_ts_set_crud_data( $object, $key, $value ) {
140
+ wc_deprecated_function( __FUNCTION__, '3.10' );
141
+
142
+ return $object;
143
+ }
144
  }
 
145
 
146
+ if ( ! function_exists( 'wc_ts_get_crud_data' ) ) {
147
+ function wc_ts_get_crud_data( $object, $key, $suppress_suffix = false ) {
148
+ wc_deprecated_function( __FUNCTION__, '3.10' );
149
 
150
+ return '';
151
+ }
152
  }
153
+ },
154
+ 0
155
+ );
packages/woocommerce-germanized-shipments/src/Admin/Admin.php CHANGED
@@ -659,17 +659,17 @@ class Admin {
659
  </select>
660
  </td>
661
  <td style="width: 5ch;">
662
- <input class="wc_input_decimal" type="text" name="packaging[<?php echo esc_attr( $count ); ?>][weight]" value="<?php echo esc_attr( $packaging->get_weight() ); ?>" placeholder="0" />
663
  </td>
664
  <td style="width: 15ch;">
665
  <span class="input-inner-wrap">
666
- <input class="wc_input_decimal" type="text" name="packaging[<?php echo esc_attr( $count ); ?>][length]" value="<?php echo esc_attr( $packaging->get_length() ); ?>" placeholder="<?php echo esc_attr( _x( 'Length', 'shipments', 'woocommerce-germanized' ) ); ?>" />
667
- <input class="wc_input_decimal" type="text" name="packaging[<?php echo esc_attr( $count ); ?>][width]" value="<?php echo esc_attr( $packaging->get_width() ); ?>" placeholder="<?php echo esc_attr( _x( 'Width', 'shipments', 'woocommerce-germanized' ) ); ?>" />
668
- <input class="wc_input_decimal" type="text" name="packaging[<?php echo esc_attr( $count ); ?>][height]" value="<?php echo esc_attr( $packaging->get_height() ); ?>" placeholder="<?php echo esc_attr( _x( 'Height', 'shipments', 'woocommerce-germanized' ) ); ?>" />
669
  </span>
670
  </td>
671
  <td style="width: 5ch;">
672
- <input class="wc_input_decimal" type="text" name="packaging[<?php echo esc_attr( $count ); ?>][max_content_weight]" value="<?php echo esc_attr( $packaging->get_max_content_weight() ); ?>" placeholder="0" />
673
  </td>
674
  </tr>
675
  <?php
659
  </select>
660
  </td>
661
  <td style="width: 5ch;">
662
+ <input class="wc_input_decimal" type="text" name="packaging[<?php echo esc_attr( $count ); ?>][weight]" value="<?php echo esc_attr( wc_format_localized_decimal( $packaging->get_weight() ) ); ?>" placeholder="0" />
663
  </td>
664
  <td style="width: 15ch;">
665
  <span class="input-inner-wrap">
666
+ <input class="wc_input_decimal" type="text" name="packaging[<?php echo esc_attr( $count ); ?>][length]" value="<?php echo esc_attr( wc_format_localized_decimal( $packaging->get_length() ) ); ?>" placeholder="<?php echo esc_attr( _x( 'Length', 'shipments', 'woocommerce-germanized' ) ); ?>" />
667
+ <input class="wc_input_decimal" type="text" name="packaging[<?php echo esc_attr( $count ); ?>][width]" value="<?php echo esc_attr( wc_format_localized_decimal( $packaging->get_width() ) ); ?>" placeholder="<?php echo esc_attr( _x( 'Width', 'shipments', 'woocommerce-germanized' ) ); ?>" />
668
+ <input class="wc_input_decimal" type="text" name="packaging[<?php echo esc_attr( $count ); ?>][height]" value="<?php echo esc_attr( wc_format_localized_decimal( $packaging->get_height() ) ); ?>" placeholder="<?php echo esc_attr( _x( 'Height', 'shipments', 'woocommerce-germanized' ) ); ?>" />
669
  </span>
670
  </td>
671
  <td style="width: 5ch;">
672
+ <input class="wc_input_decimal" type="text" name="packaging[<?php echo esc_attr( $count ); ?>][max_content_weight]" value="<?php echo esc_attr( wc_format_localized_decimal( $packaging->get_max_content_weight() ) ); ?>" placeholder="0" />
673
  </td>
674
  </tr>
675
  <?php
packages/woocommerce-germanized-shipments/src/Package.php CHANGED
@@ -19,7 +19,7 @@ class Package {
19
  *
20
  * @var string
21
  */
22
- const VERSION = '2.1.1';
23
 
24
  public static $upload_dir_suffix = '';
25
 
19
  *
20
  * @var string
21
  */
22
+ const VERSION = '2.1.2';
23
 
24
  public static $upload_dir_suffix = '';
25
 
packages/woocommerce-germanized-shipments/woocommerce-germanized-shipments.php CHANGED
@@ -5,7 +5,7 @@
5
  * Description: The Germanized Shipments integration, installed as a feature plugin for development and testing purposes.
6
  * Author: vendidero
7
  * Author URI: https://vendidero.de
8
- * Version: 2.1.1
9
  * Requires PHP: 5.6
10
  * License: GPLv3
11
  *
5
  * Description: The Germanized Shipments integration, installed as a feature plugin for development and testing purposes.
6
  * Author: vendidero
7
  * Author URI: https://vendidero.de
8
+ * Version: 2.1.2
9
  * Requires PHP: 5.6
10
  * License: GPLv3
11
  *
readme.txt CHANGED
@@ -5,7 +5,7 @@ Requires at least: 5.4
5
  Tested up to: 6.0
6
  WC requires at least: 3.9
7
  WC tested up to: 6.9
8
- Stable tag: 3.10.5
9
  Requires PHP: 5.6
10
  License: GPLv3
11
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
@@ -109,7 +109,7 @@ By default, Germanized works with *every WooCommerce theme*. Some themes may nee
109
 
110
  = Minimal Requirements =
111
 
112
- * WordPress 4.9 or newer
113
  * WooCommerce 3.9 (newest version recommended)
114
  * PHP Version 5.6 or newer
115
 
@@ -161,13 +161,6 @@ Inserts a text that informs the customer about the EU Online Dispute Platform -
161
  `[gzd_return_request_form]`
162
  Insert the guest return request form which allows guests to submit [return requests](https://vendidero.de/dokument/retouren-konfigurieren-und-verwalten).
163
 
164
- `[trusted_shops_badge]`
165
- If you are a Trusted Shops Customer, you may insert this shortcode to insert the Trusted Shops Badge at your favourite place.
166
- By adjusting parameter width=55 (55 means 55px width/height) you may optionally set badge's width.
167
-
168
- `[trusted_shops_rich_snippets]`
169
- If you are using Trusted Shop's review functionality, you may insert a Google Rich Snippet to show your current shop's rating.
170
-
171
  = Updating Germanized for WooCommerce =
172
 
173
  Before updating WooCommerce you should definitely check whether Germanized does already support the newest version.
@@ -211,6 +204,12 @@ Bug reports may be filed via our [GitHub repository](https://github.com/vendider
211
  6. Edit pdf documents (Pro)
212
 
213
  == Changelog ==
 
 
 
 
 
 
214
  = 3.10.5 =
215
  * Improvement: Add HS code and manufacture country to REST API
216
  * Improvement: Legacy function wrapper for wc_ts functions
5
  Tested up to: 6.0
6
  WC requires at least: 3.9
7
  WC tested up to: 6.9
8
+ Stable tag: 3.10.6
9
  Requires PHP: 5.6
10
  License: GPLv3
11
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
109
 
110
  = Minimal Requirements =
111
 
112
+ * WordPress 5.4 or newer
113
  * WooCommerce 3.9 (newest version recommended)
114
  * PHP Version 5.6 or newer
115
 
161
  `[gzd_return_request_form]`
162
  Insert the guest return request form which allows guests to submit [return requests](https://vendidero.de/dokument/retouren-konfigurieren-und-verwalten).
163
 
 
 
 
 
 
 
 
164
  = Updating Germanized for WooCommerce =
165
 
166
  Before updating WooCommerce you should definitely check whether Germanized does already support the newest version.
204
  6. Edit pdf documents (Pro)
205
 
206
  == Changelog ==
207
+ = 3.10.6 =
208
+ * Improvement: Prevent new account activation email from being sent during DOI process in latest Woo version
209
+ * Improvement: Prevent install redirection loops when transients fail
210
+ * Fix: Formal localized decimal in packaging admin list
211
+ * Fix: Formal language install check
212
+
213
  = 3.10.5 =
214
  * Improvement: Add HS code and manufacture country to REST API
215
  * Improvement: Legacy function wrapper for wc_ts functions
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInitcbab968d3fc0209874f3790cfc217a6b::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit158461c45ef8fd285a1dce911a0bd208::getLoader();
vendor/autoload_packages.php CHANGED
@@ -5,7 +5,7 @@
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
- namespace Automattic\Jetpack\Autoloader\jpcbab968d3fc0209874f3790cfc217a6b;
9
 
10
  // phpcs:ignore
11
 
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
+ namespace Automattic\Jetpack\Autoloader\jp158461c45ef8fd285a1dce911a0bd208;
9
 
10
  // phpcs:ignore
11
 
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInitcbab968d3fc0209874f3790cfc217a6b
6
  {
7
  private static $loader;
8
 
@@ -24,15 +24,15 @@ class ComposerAutoloaderInitcbab968d3fc0209874f3790cfc217a6b
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
- spl_autoload_register(array('ComposerAutoloaderInitcbab968d3fc0209874f3790cfc217a6b', 'loadClassLoader'), true, true);
28
  self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
29
- spl_autoload_unregister(array('ComposerAutoloaderInitcbab968d3fc0209874f3790cfc217a6b', 'loadClassLoader'));
30
 
31
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
32
  if ($useStaticLoader) {
33
  require __DIR__ . '/autoload_static.php';
34
 
35
- call_user_func(\Composer\Autoload\ComposerStaticInitcbab968d3fc0209874f3790cfc217a6b::getInitializer($loader));
36
  } else {
37
  $map = require __DIR__ . '/autoload_namespaces.php';
38
  foreach ($map as $namespace => $path) {
@@ -53,19 +53,19 @@ class ComposerAutoloaderInitcbab968d3fc0209874f3790cfc217a6b
53
  $loader->register(true);
54
 
55
  if ($useStaticLoader) {
56
- $includeFiles = Composer\Autoload\ComposerStaticInitcbab968d3fc0209874f3790cfc217a6b::$files;
57
  } else {
58
  $includeFiles = require __DIR__ . '/autoload_files.php';
59
  }
60
  foreach ($includeFiles as $fileIdentifier => $file) {
61
- composerRequirecbab968d3fc0209874f3790cfc217a6b($fileIdentifier, $file);
62
  }
63
 
64
  return $loader;
65
  }
66
  }
67
 
68
- function composerRequirecbab968d3fc0209874f3790cfc217a6b($fileIdentifier, $file)
69
  {
70
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
71
  require $file;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit158461c45ef8fd285a1dce911a0bd208
6
  {
7
  private static $loader;
8
 
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
+ spl_autoload_register(array('ComposerAutoloaderInit158461c45ef8fd285a1dce911a0bd208', 'loadClassLoader'), true, true);
28
  self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
29
+ spl_autoload_unregister(array('ComposerAutoloaderInit158461c45ef8fd285a1dce911a0bd208', 'loadClassLoader'));
30
 
31
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
32
  if ($useStaticLoader) {
33
  require __DIR__ . '/autoload_static.php';
34
 
35
+ call_user_func(\Composer\Autoload\ComposerStaticInit158461c45ef8fd285a1dce911a0bd208::getInitializer($loader));
36
  } else {
37
  $map = require __DIR__ . '/autoload_namespaces.php';
38
  foreach ($map as $namespace => $path) {
53
  $loader->register(true);
54
 
55
  if ($useStaticLoader) {
56
+ $includeFiles = Composer\Autoload\ComposerStaticInit158461c45ef8fd285a1dce911a0bd208::$files;
57
  } else {
58
  $includeFiles = require __DIR__ . '/autoload_files.php';
59
  }
60
  foreach ($includeFiles as $fileIdentifier => $file) {
61
+ composerRequire158461c45ef8fd285a1dce911a0bd208($fileIdentifier, $file);
62
  }
63
 
64
  return $loader;
65
  }
66
  }
67
 
68
+ function composerRequire158461c45ef8fd285a1dce911a0bd208($fileIdentifier, $file)
69
  {
70
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
71
  require $file;
vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInitcbab968d3fc0209874f3790cfc217a6b
8
  {
9
  public static $files = array (
10
  '6124b4c8570aa390c21fafd04a26c69f' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php',
@@ -556,9 +556,9 @@ class ComposerStaticInitcbab968d3fc0209874f3790cfc217a6b
556
  public static function getInitializer(ClassLoader $loader)
557
  {
558
  return \Closure::bind(function () use ($loader) {
559
- $loader->prefixLengthsPsr4 = ComposerStaticInitcbab968d3fc0209874f3790cfc217a6b::$prefixLengthsPsr4;
560
- $loader->prefixDirsPsr4 = ComposerStaticInitcbab968d3fc0209874f3790cfc217a6b::$prefixDirsPsr4;
561
- $loader->classMap = ComposerStaticInitcbab968d3fc0209874f3790cfc217a6b::$classMap;
562
 
563
  }, null, ClassLoader::class);
564
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit158461c45ef8fd285a1dce911a0bd208
8
  {
9
  public static $files = array (
10
  '6124b4c8570aa390c21fafd04a26c69f' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php',
556
  public static function getInitializer(ClassLoader $loader)
557
  {
558
  return \Closure::bind(function () use ($loader) {
559
+ $loader->prefixLengthsPsr4 = ComposerStaticInit158461c45ef8fd285a1dce911a0bd208::$prefixLengthsPsr4;
560
+ $loader->prefixDirsPsr4 = ComposerStaticInit158461c45ef8fd285a1dce911a0bd208::$prefixDirsPsr4;
561
+ $loader->classMap = ComposerStaticInit158461c45ef8fd285a1dce911a0bd208::$classMap;
562
 
563
  }, null, ClassLoader::class);
564
  }
vendor/composer/installed.json CHANGED
@@ -973,17 +973,17 @@
973
  },
974
  {
975
  "name": "vendidero/woocommerce-germanized-shipments",
976
- "version": "v2.1.1",
977
- "version_normalized": "2.1.1.0",
978
  "source": {
979
  "type": "git",
980
  "url": "https://github.com/vendidero/woocommerce-germanized-shipments.git",
981
- "reference": "5d331488feb8ca18b150804bedce639bca990500"
982
  },
983
  "dist": {
984
  "type": "zip",
985
- "url": "https://api.github.com/repos/vendidero/woocommerce-germanized-shipments/zipball/5d331488feb8ca18b150804bedce639bca990500",
986
- "reference": "5d331488feb8ca18b150804bedce639bca990500",
987
  "shasum": ""
988
  },
989
  "require": {
@@ -997,7 +997,7 @@
997
  "woocommerce/woocommerce-sniffs": "^0.1.3",
998
  "yoast/phpunit-polyfills": "^1.0"
999
  },
1000
- "time": "2022-09-15T09:28:27+00:00",
1001
  "type": "wordpress-plugin",
1002
  "installation-source": "dist",
1003
  "autoload": {
@@ -1028,7 +1028,7 @@
1028
  "description": "The Germanized Shipments implementation.",
1029
  "homepage": "https://github.com/vendidero/woocommerce-germanized-shipments",
1030
  "support": {
1031
- "source": "https://github.com/vendidero/woocommerce-germanized-shipments/tree/v2.1.1",
1032
  "issues": "https://github.com/vendidero/woocommerce-germanized-shipments/issues"
1033
  },
1034
  "install-path": "../../packages/woocommerce-germanized-shipments"
973
  },
974
  {
975
  "name": "vendidero/woocommerce-germanized-shipments",
976
+ "version": "v2.1.2",
977
+ "version_normalized": "2.1.2.0",
978
  "source": {
979
  "type": "git",
980
  "url": "https://github.com/vendidero/woocommerce-germanized-shipments.git",
981
+ "reference": "3fbad430a670ebe34c3bfd60ed2c752333e06efa"
982
  },
983
  "dist": {
984
  "type": "zip",
985
+ "url": "https://api.github.com/repos/vendidero/woocommerce-germanized-shipments/zipball/3fbad430a670ebe34c3bfd60ed2c752333e06efa",
986
+ "reference": "3fbad430a670ebe34c3bfd60ed2c752333e06efa",
987
  "shasum": ""
988
  },
989
  "require": {
997
  "woocommerce/woocommerce-sniffs": "^0.1.3",
998
  "yoast/phpunit-polyfills": "^1.0"
999
  },
1000
+ "time": "2022-09-19T13:14:17+00:00",
1001
  "type": "wordpress-plugin",
1002
  "installation-source": "dist",
1003
  "autoload": {
1028
  "description": "The Germanized Shipments implementation.",
1029
  "homepage": "https://github.com/vendidero/woocommerce-germanized-shipments",
1030
  "support": {
1031
+ "source": "https://github.com/vendidero/woocommerce-germanized-shipments/tree/v2.1.2",
1032
  "issues": "https://github.com/vendidero/woocommerce-germanized-shipments/issues"
1033
  },
1034
  "install-path": "../../packages/woocommerce-germanized-shipments"
vendor/composer/installed.php CHANGED
@@ -5,7 +5,7 @@
5
  'type' => 'wordpress-plugin',
6
  'install_path' => __DIR__ . '/../../',
7
  'aliases' => array(),
8
- 'reference' => '38c8a332da9428cee95c029bfdcd4f1ddf4f8156',
9
  'name' => 'vendidero/woocommerce-germanized',
10
  'dev' => false,
11
  ),
@@ -154,7 +154,7 @@
154
  'type' => 'wordpress-plugin',
155
  'install_path' => __DIR__ . '/../../',
156
  'aliases' => array(),
157
- 'reference' => '38c8a332da9428cee95c029bfdcd4f1ddf4f8156',
158
  'dev_requirement' => false,
159
  ),
160
  'vendidero/woocommerce-germanized-dhl' => array(
@@ -167,12 +167,12 @@
167
  'dev_requirement' => false,
168
  ),
169
  'vendidero/woocommerce-germanized-shipments' => array(
170
- 'pretty_version' => 'v2.1.1',
171
- 'version' => '2.1.1.0',
172
  'type' => 'wordpress-plugin',
173
  'install_path' => __DIR__ . '/../../packages/woocommerce-germanized-shipments',
174
  'aliases' => array(),
175
- 'reference' => '5d331488feb8ca18b150804bedce639bca990500',
176
  'dev_requirement' => false,
177
  ),
178
  'vendidero/woocommerce-trusted-shops' => array(
5
  'type' => 'wordpress-plugin',
6
  'install_path' => __DIR__ . '/../../',
7
  'aliases' => array(),
8
+ 'reference' => '8024606060fb5f26adaa70dfd918621193669ff2',
9
  'name' => 'vendidero/woocommerce-germanized',
10
  'dev' => false,
11
  ),
154
  'type' => 'wordpress-plugin',
155
  'install_path' => __DIR__ . '/../../',
156
  'aliases' => array(),
157
+ 'reference' => '8024606060fb5f26adaa70dfd918621193669ff2',
158
  'dev_requirement' => false,
159
  ),
160
  'vendidero/woocommerce-germanized-dhl' => array(
167
  'dev_requirement' => false,
168
  ),
169
  'vendidero/woocommerce-germanized-shipments' => array(
170
+ 'pretty_version' => 'v2.1.2',
171
+ 'version' => '2.1.2.0',
172
  'type' => 'wordpress-plugin',
173
  'install_path' => __DIR__ . '/../../packages/woocommerce-germanized-shipments',
174
  'aliases' => array(),
175
+ 'reference' => '3fbad430a670ebe34c3bfd60ed2c752333e06efa',
176
  'dev_requirement' => false,
177
  ),
178
  'vendidero/woocommerce-trusted-shops' => array(
vendor/composer/jetpack_autoload_classmap.php CHANGED
@@ -383,247 +383,247 @@ return array(
383
  'path' => $baseDir . '/packages/one-stop-shop-woocommerce/src/Report.php'
384
  ),
385
  'Vendidero\\Germanized\\Shipments\\Shipment' => array(
386
- 'version' => '2.1.1.0',
387
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Shipment.php'
388
  ),
389
  'Vendidero\\Germanized\\Shipments\\Packaging\\ReportHelper' => array(
390
- 'version' => '2.1.1.0',
391
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packaging/ReportHelper.php'
392
  ),
393
  'Vendidero\\Germanized\\Shipments\\Packaging\\ReportQueue' => array(
394
- 'version' => '2.1.1.0',
395
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packaging/ReportQueue.php'
396
  ),
397
  'Vendidero\\Germanized\\Shipments\\Packaging\\AsyncReportGenerator' => array(
398
- 'version' => '2.1.1.0',
399
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packaging/AsyncReportGenerator.php'
400
  ),
401
  'Vendidero\\Germanized\\Shipments\\Packaging\\Report' => array(
402
- 'version' => '2.1.1.0',
403
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packaging/Report.php'
404
  ),
405
  'Vendidero\\Germanized\\Shipments\\ShippingProvider\\Auto' => array(
406
- 'version' => '2.1.1.0',
407
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShippingProvider/Auto.php'
408
  ),
409
  'Vendidero\\Germanized\\Shipments\\ShippingProvider\\Method' => array(
410
- 'version' => '2.1.1.0',
411
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShippingProvider/Method.php'
412
  ),
413
  'Vendidero\\Germanized\\Shipments\\ShippingProvider\\Simple' => array(
414
- 'version' => '2.1.1.0',
415
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShippingProvider/Simple.php'
416
  ),
417
  'Vendidero\\Germanized\\Shipments\\ShippingProvider\\Helper' => array(
418
- 'version' => '2.1.1.0',
419
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShippingProvider/Helper.php'
420
  ),
421
  'Vendidero\\Germanized\\Shipments\\ShippingProvider\\MethodPlaceholder' => array(
422
- 'version' => '2.1.1.0',
423
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShippingProvider/MethodPlaceholder.php'
424
  ),
425
  'Vendidero\\Germanized\\Shipments\\Install' => array(
426
- 'version' => '2.1.1.0',
427
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Install.php'
428
  ),
429
  'Vendidero\\Germanized\\Shipments\\SimpleShipment' => array(
430
- 'version' => '2.1.1.0',
431
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/SimpleShipment.php'
432
  ),
433
  'Vendidero\\Germanized\\Shipments\\Package' => array(
434
- 'version' => '2.1.1.0',
435
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Package.php'
436
  ),
437
  'Vendidero\\Germanized\\Shipments\\Product' => array(
438
- 'version' => '2.1.1.0',
439
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Product.php'
440
  ),
441
  'Vendidero\\Germanized\\Shipments\\Order' => array(
442
- 'version' => '2.1.1.0',
443
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Order.php'
444
  ),
445
  'Vendidero\\Germanized\\Shipments\\DataStores\\Shipment' => array(
446
- 'version' => '2.1.1.0',
447
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/DataStores/Shipment.php'
448
  ),
449
  'Vendidero\\Germanized\\Shipments\\DataStores\\Label' => array(
450
- 'version' => '2.1.1.0',
451
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/DataStores/Label.php'
452
  ),
453
  'Vendidero\\Germanized\\Shipments\\DataStores\\ShippingProvider' => array(
454
- 'version' => '2.1.1.0',
455
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/DataStores/ShippingProvider.php'
456
  ),
457
  'Vendidero\\Germanized\\Shipments\\DataStores\\Packaging' => array(
458
- 'version' => '2.1.1.0',
459
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/DataStores/Packaging.php'
460
  ),
461
  'Vendidero\\Germanized\\Shipments\\DataStores\\ShipmentItem' => array(
462
- 'version' => '2.1.1.0',
463
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/DataStores/ShipmentItem.php'
464
  ),
465
  'Vendidero\\Germanized\\Shipments\\PackagingFactory' => array(
466
- 'version' => '2.1.1.0',
467
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/PackagingFactory.php'
468
  ),
469
  'Vendidero\\Germanized\\Shipments\\Ajax' => array(
470
- 'version' => '2.1.1.0',
471
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Ajax.php'
472
  ),
473
  'Vendidero\\Germanized\\Shipments\\ReturnShipment' => array(
474
- 'version' => '2.1.1.0',
475
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ReturnShipment.php'
476
  ),
477
  'Vendidero\\Germanized\\Shipments\\AddressSplitter' => array(
478
- 'version' => '2.1.1.0',
479
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/AddressSplitter.php'
480
  ),
481
  'Vendidero\\Germanized\\Shipments\\Admin\\BulkLabel' => array(
482
- 'version' => '2.1.1.0',
483
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Admin/BulkLabel.php'
484
  ),
485
  'Vendidero\\Germanized\\Shipments\\Admin\\Settings' => array(
486
- 'version' => '2.1.1.0',
487
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Admin/Settings.php'
488
  ),
489
  'Vendidero\\Germanized\\Shipments\\Admin\\MetaBox' => array(
490
- 'version' => '2.1.1.0',
491
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Admin/MetaBox.php'
492
  ),
493
  'Vendidero\\Germanized\\Shipments\\Admin\\ProviderSettings' => array(
494
- 'version' => '2.1.1.0',
495
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Admin/ProviderSettings.php'
496
  ),
497
  'Vendidero\\Germanized\\Shipments\\Admin\\ReturnTable' => array(
498
- 'version' => '2.1.1.0',
499
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Admin/ReturnTable.php'
500
  ),
501
  'Vendidero\\Germanized\\Shipments\\Admin\\BulkActionHandler' => array(
502
- 'version' => '2.1.1.0',
503
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Admin/BulkActionHandler.php'
504
  ),
505
  'Vendidero\\Germanized\\Shipments\\Admin\\Admin' => array(
506
- 'version' => '2.1.1.0',
507
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Admin/Admin.php'
508
  ),
509
  'Vendidero\\Germanized\\Shipments\\Admin\\Table' => array(
510
- 'version' => '2.1.1.0',
511
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Admin/Table.php'
512
  ),
513
  'Vendidero\\Germanized\\Shipments\\Labels\\Factory' => array(
514
- 'version' => '2.1.1.0',
515
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Labels/Factory.php'
516
  ),
517
  'Vendidero\\Germanized\\Shipments\\Labels\\Label' => array(
518
- 'version' => '2.1.1.0',
519
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Labels/Label.php'
520
  ),
521
  'Vendidero\\Germanized\\Shipments\\Labels\\ReturnLabel' => array(
522
- 'version' => '2.1.1.0',
523
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Labels/ReturnLabel.php'
524
  ),
525
  'Vendidero\\Germanized\\Shipments\\Labels\\DownloadHandler' => array(
526
- 'version' => '2.1.1.0',
527
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Labels/DownloadHandler.php'
528
  ),
529
  'Vendidero\\Germanized\\Shipments\\Labels\\Automation' => array(
530
- 'version' => '2.1.1.0',
531
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Labels/Automation.php'
532
  ),
533
  'Vendidero\\Germanized\\Shipments\\Labels\\Query' => array(
534
- 'version' => '2.1.1.0',
535
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Labels/Query.php'
536
  ),
537
  'Vendidero\\Germanized\\Shipments\\ShipmentQuery' => array(
538
- 'version' => '2.1.1.0',
539
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShipmentQuery.php'
540
  ),
541
  'Vendidero\\Germanized\\Shipments\\WPMLHelper' => array(
542
- 'version' => '2.1.1.0',
543
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/WPMLHelper.php'
544
  ),
545
  'Vendidero\\Germanized\\Shipments\\ShipmentReturnItem' => array(
546
- 'version' => '2.1.1.0',
547
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShipmentReturnItem.php'
548
  ),
549
  'Vendidero\\Germanized\\Shipments\\FormHandler' => array(
550
- 'version' => '2.1.1.0',
551
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/FormHandler.php'
552
  ),
553
  'Vendidero\\Germanized\\Shipments\\PDFMerger' => array(
554
- 'version' => '2.1.1.0',
555
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/PDFMerger.php'
556
  ),
557
  'Vendidero\\Germanized\\Shipments\\ShipmentFactory' => array(
558
- 'version' => '2.1.1.0',
559
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShipmentFactory.php'
560
  ),
561
  'Vendidero\\Germanized\\Shipments\\Automation' => array(
562
- 'version' => '2.1.1.0',
563
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Automation.php'
564
  ),
565
  'Vendidero\\Germanized\\Shipments\\Packaging' => array(
566
- 'version' => '2.1.1.0',
567
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packaging.php'
568
  ),
569
  'Vendidero\\Germanized\\Shipments\\Api' => array(
570
- 'version' => '2.1.1.0',
571
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Api.php'
572
  ),
573
  'Vendidero\\Germanized\\Shipments\\ShipmentItem' => array(
574
- 'version' => '2.1.1.0',
575
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShipmentItem.php'
576
  ),
577
  'Vendidero\\Germanized\\Shipments\\Validation' => array(
578
- 'version' => '2.1.1.0',
579
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Validation.php'
580
  ),
581
  'Vendidero\\Germanized\\Shipments\\Emails' => array(
582
- 'version' => '2.1.1.0',
583
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Emails.php'
584
  ),
585
  'Vendidero\\Germanized\\Shipments\\PDFSplitter' => array(
586
- 'version' => '2.1.1.0',
587
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/PDFSplitter.php'
588
  ),
589
  'Vendidero\\Germanized\\Shipments\\ReturnReason' => array(
590
- 'version' => '2.1.1.0',
591
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ReturnReason.php'
592
  ),
593
  'Vendidero\\Germanized\\Shipments\\Rest\\ShipmentsController' => array(
594
- 'version' => '2.1.1.0',
595
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Rest/ShipmentsController.php'
596
  ),
597
  'Vendidero\\Germanized\\Shipments\\Interfaces\\ShippingProviderAuto' => array(
598
- 'version' => '2.1.1.0',
599
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Interfaces/ShippingProviderAuto.php'
600
  ),
601
  'Vendidero\\Germanized\\Shipments\\Interfaces\\ShippingProvider' => array(
602
- 'version' => '2.1.1.0',
603
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Interfaces/ShippingProvider.php'
604
  ),
605
  'Vendidero\\Germanized\\Shipments\\Interfaces\\ShipmentReturnLabel' => array(
606
- 'version' => '2.1.1.0',
607
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Interfaces/ShipmentReturnLabel.php'
608
  ),
609
  'Vendidero\\Germanized\\Shipments\\Interfaces\\ShipmentLabel' => array(
610
- 'version' => '2.1.1.0',
611
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Interfaces/ShipmentLabel.php'
612
  ),
613
  'Vendidero\\Germanized\\Shipments\\Packing\\PackagingBox' => array(
614
- 'version' => '2.1.1.0',
615
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packing/PackagingBox.php'
616
  ),
617
  'Vendidero\\Germanized\\Shipments\\Packing\\OrderItem' => array(
618
- 'version' => '2.1.1.0',
619
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packing/OrderItem.php'
620
  ),
621
  'Vendidero\\Germanized\\Shipments\\Packing\\Helper' => array(
622
- 'version' => '2.1.1.0',
623
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packing/Helper.php'
624
  ),
625
  'Vendidero\\Germanized\\Shipments\\Packing\\ShipmentItem' => array(
626
- 'version' => '2.1.1.0',
627
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packing/ShipmentItem.php'
628
  ),
629
  'Vendidero\\Germanized\\DHL\\ShippingProvider\\DeutschePost' => array(
383
  'path' => $baseDir . '/packages/one-stop-shop-woocommerce/src/Report.php'
384
  ),
385
  'Vendidero\\Germanized\\Shipments\\Shipment' => array(
386
+ 'version' => '2.1.2.0',
387
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Shipment.php'
388
  ),
389
  'Vendidero\\Germanized\\Shipments\\Packaging\\ReportHelper' => array(
390
+ 'version' => '2.1.2.0',
391
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packaging/ReportHelper.php'
392
  ),
393
  'Vendidero\\Germanized\\Shipments\\Packaging\\ReportQueue' => array(
394
+ 'version' => '2.1.2.0',
395
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packaging/ReportQueue.php'
396
  ),
397
  'Vendidero\\Germanized\\Shipments\\Packaging\\AsyncReportGenerator' => array(
398
+ 'version' => '2.1.2.0',
399
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packaging/AsyncReportGenerator.php'
400
  ),
401
  'Vendidero\\Germanized\\Shipments\\Packaging\\Report' => array(
402
+ 'version' => '2.1.2.0',
403
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packaging/Report.php'
404
  ),
405
  'Vendidero\\Germanized\\Shipments\\ShippingProvider\\Auto' => array(
406
+ 'version' => '2.1.2.0',
407
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShippingProvider/Auto.php'
408
  ),
409
  'Vendidero\\Germanized\\Shipments\\ShippingProvider\\Method' => array(
410
+ 'version' => '2.1.2.0',
411
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShippingProvider/Method.php'
412
  ),
413
  'Vendidero\\Germanized\\Shipments\\ShippingProvider\\Simple' => array(
414
+ 'version' => '2.1.2.0',
415
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShippingProvider/Simple.php'
416
  ),
417
  'Vendidero\\Germanized\\Shipments\\ShippingProvider\\Helper' => array(
418
+ 'version' => '2.1.2.0',
419
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShippingProvider/Helper.php'
420
  ),
421
  'Vendidero\\Germanized\\Shipments\\ShippingProvider\\MethodPlaceholder' => array(
422
+ 'version' => '2.1.2.0',
423
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShippingProvider/MethodPlaceholder.php'
424
  ),
425
  'Vendidero\\Germanized\\Shipments\\Install' => array(
426
+ 'version' => '2.1.2.0',
427
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Install.php'
428
  ),
429
  'Vendidero\\Germanized\\Shipments\\SimpleShipment' => array(
430
+ 'version' => '2.1.2.0',
431
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/SimpleShipment.php'
432
  ),
433
  'Vendidero\\Germanized\\Shipments\\Package' => array(
434
+ 'version' => '2.1.2.0',
435
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Package.php'
436
  ),
437
  'Vendidero\\Germanized\\Shipments\\Product' => array(
438
+ 'version' => '2.1.2.0',
439
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Product.php'
440
  ),
441
  'Vendidero\\Germanized\\Shipments\\Order' => array(
442
+ 'version' => '2.1.2.0',
443
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Order.php'
444
  ),
445
  'Vendidero\\Germanized\\Shipments\\DataStores\\Shipment' => array(
446
+ 'version' => '2.1.2.0',
447
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/DataStores/Shipment.php'
448
  ),
449
  'Vendidero\\Germanized\\Shipments\\DataStores\\Label' => array(
450
+ 'version' => '2.1.2.0',
451
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/DataStores/Label.php'
452
  ),
453
  'Vendidero\\Germanized\\Shipments\\DataStores\\ShippingProvider' => array(
454
+ 'version' => '2.1.2.0',
455
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/DataStores/ShippingProvider.php'
456
  ),
457
  'Vendidero\\Germanized\\Shipments\\DataStores\\Packaging' => array(
458
+ 'version' => '2.1.2.0',
459
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/DataStores/Packaging.php'
460
  ),
461
  'Vendidero\\Germanized\\Shipments\\DataStores\\ShipmentItem' => array(
462
+ 'version' => '2.1.2.0',
463
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/DataStores/ShipmentItem.php'
464
  ),
465
  'Vendidero\\Germanized\\Shipments\\PackagingFactory' => array(
466
+ 'version' => '2.1.2.0',
467
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/PackagingFactory.php'
468
  ),
469
  'Vendidero\\Germanized\\Shipments\\Ajax' => array(
470
+ 'version' => '2.1.2.0',
471
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Ajax.php'
472
  ),
473
  'Vendidero\\Germanized\\Shipments\\ReturnShipment' => array(
474
+ 'version' => '2.1.2.0',
475
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ReturnShipment.php'
476
  ),
477
  'Vendidero\\Germanized\\Shipments\\AddressSplitter' => array(
478
+ 'version' => '2.1.2.0',
479
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/AddressSplitter.php'
480
  ),
481
  'Vendidero\\Germanized\\Shipments\\Admin\\BulkLabel' => array(
482
+ 'version' => '2.1.2.0',
483
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Admin/BulkLabel.php'
484
  ),
485
  'Vendidero\\Germanized\\Shipments\\Admin\\Settings' => array(
486
+ 'version' => '2.1.2.0',
487
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Admin/Settings.php'
488
  ),
489
  'Vendidero\\Germanized\\Shipments\\Admin\\MetaBox' => array(
490
+ 'version' => '2.1.2.0',
491
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Admin/MetaBox.php'
492
  ),
493
  'Vendidero\\Germanized\\Shipments\\Admin\\ProviderSettings' => array(
494
+ 'version' => '2.1.2.0',
495
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Admin/ProviderSettings.php'
496
  ),
497
  'Vendidero\\Germanized\\Shipments\\Admin\\ReturnTable' => array(
498
+ 'version' => '2.1.2.0',
499
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Admin/ReturnTable.php'
500
  ),
501
  'Vendidero\\Germanized\\Shipments\\Admin\\BulkActionHandler' => array(
502
+ 'version' => '2.1.2.0',
503
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Admin/BulkActionHandler.php'
504
  ),
505
  'Vendidero\\Germanized\\Shipments\\Admin\\Admin' => array(
506
+ 'version' => '2.1.2.0',
507
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Admin/Admin.php'
508
  ),
509
  'Vendidero\\Germanized\\Shipments\\Admin\\Table' => array(
510
+ 'version' => '2.1.2.0',
511
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Admin/Table.php'
512
  ),
513
  'Vendidero\\Germanized\\Shipments\\Labels\\Factory' => array(
514
+ 'version' => '2.1.2.0',
515
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Labels/Factory.php'
516
  ),
517
  'Vendidero\\Germanized\\Shipments\\Labels\\Label' => array(
518
+ 'version' => '2.1.2.0',
519
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Labels/Label.php'
520
  ),
521
  'Vendidero\\Germanized\\Shipments\\Labels\\ReturnLabel' => array(
522
+ 'version' => '2.1.2.0',
523
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Labels/ReturnLabel.php'
524
  ),
525
  'Vendidero\\Germanized\\Shipments\\Labels\\DownloadHandler' => array(
526
+ 'version' => '2.1.2.0',
527
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Labels/DownloadHandler.php'
528
  ),
529
  'Vendidero\\Germanized\\Shipments\\Labels\\Automation' => array(
530
+ 'version' => '2.1.2.0',
531
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Labels/Automation.php'
532
  ),
533
  'Vendidero\\Germanized\\Shipments\\Labels\\Query' => array(
534
+ 'version' => '2.1.2.0',
535
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Labels/Query.php'
536
  ),
537
  'Vendidero\\Germanized\\Shipments\\ShipmentQuery' => array(
538
+ 'version' => '2.1.2.0',
539
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShipmentQuery.php'
540
  ),
541
  'Vendidero\\Germanized\\Shipments\\WPMLHelper' => array(
542
+ 'version' => '2.1.2.0',
543
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/WPMLHelper.php'
544
  ),
545
  'Vendidero\\Germanized\\Shipments\\ShipmentReturnItem' => array(
546
+ 'version' => '2.1.2.0',
547
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShipmentReturnItem.php'
548
  ),
549
  'Vendidero\\Germanized\\Shipments\\FormHandler' => array(
550
+ 'version' => '2.1.2.0',
551
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/FormHandler.php'
552
  ),
553
  'Vendidero\\Germanized\\Shipments\\PDFMerger' => array(
554
+ 'version' => '2.1.2.0',
555
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/PDFMerger.php'
556
  ),
557
  'Vendidero\\Germanized\\Shipments\\ShipmentFactory' => array(
558
+ 'version' => '2.1.2.0',
559
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShipmentFactory.php'
560
  ),
561
  'Vendidero\\Germanized\\Shipments\\Automation' => array(
562
+ 'version' => '2.1.2.0',
563
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Automation.php'
564
  ),
565
  'Vendidero\\Germanized\\Shipments\\Packaging' => array(
566
+ 'version' => '2.1.2.0',
567
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packaging.php'
568
  ),
569
  'Vendidero\\Germanized\\Shipments\\Api' => array(
570
+ 'version' => '2.1.2.0',
571
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Api.php'
572
  ),
573
  'Vendidero\\Germanized\\Shipments\\ShipmentItem' => array(
574
+ 'version' => '2.1.2.0',
575
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShipmentItem.php'
576
  ),
577
  'Vendidero\\Germanized\\Shipments\\Validation' => array(
578
+ 'version' => '2.1.2.0',
579
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Validation.php'
580
  ),
581
  'Vendidero\\Germanized\\Shipments\\Emails' => array(
582
+ 'version' => '2.1.2.0',
583
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Emails.php'
584
  ),
585
  'Vendidero\\Germanized\\Shipments\\PDFSplitter' => array(
586
+ 'version' => '2.1.2.0',
587
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/PDFSplitter.php'
588
  ),
589
  'Vendidero\\Germanized\\Shipments\\ReturnReason' => array(
590
+ 'version' => '2.1.2.0',
591
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ReturnReason.php'
592
  ),
593
  'Vendidero\\Germanized\\Shipments\\Rest\\ShipmentsController' => array(
594
+ 'version' => '2.1.2.0',
595
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Rest/ShipmentsController.php'
596
  ),
597
  'Vendidero\\Germanized\\Shipments\\Interfaces\\ShippingProviderAuto' => array(
598
+ 'version' => '2.1.2.0',
599
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Interfaces/ShippingProviderAuto.php'
600
  ),
601
  'Vendidero\\Germanized\\Shipments\\Interfaces\\ShippingProvider' => array(
602
+ 'version' => '2.1.2.0',
603
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Interfaces/ShippingProvider.php'
604
  ),
605
  'Vendidero\\Germanized\\Shipments\\Interfaces\\ShipmentReturnLabel' => array(
606
+ 'version' => '2.1.2.0',
607
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Interfaces/ShipmentReturnLabel.php'
608
  ),
609
  'Vendidero\\Germanized\\Shipments\\Interfaces\\ShipmentLabel' => array(
610
+ 'version' => '2.1.2.0',
611
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Interfaces/ShipmentLabel.php'
612
  ),
613
  'Vendidero\\Germanized\\Shipments\\Packing\\PackagingBox' => array(
614
+ 'version' => '2.1.2.0',
615
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packing/PackagingBox.php'
616
  ),
617
  'Vendidero\\Germanized\\Shipments\\Packing\\OrderItem' => array(
618
+ 'version' => '2.1.2.0',
619
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packing/OrderItem.php'
620
  ),
621
  'Vendidero\\Germanized\\Shipments\\Packing\\Helper' => array(
622
+ 'version' => '2.1.2.0',
623
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packing/Helper.php'
624
  ),
625
  'Vendidero\\Germanized\\Shipments\\Packing\\ShipmentItem' => array(
626
+ 'version' => '2.1.2.0',
627
  'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packing/ShipmentItem.php'
628
  ),
629
  'Vendidero\\Germanized\\DHL\\ShippingProvider\\DeutschePost' => array(
vendor/dvdoug/boxpacker/docs/Dockerfile DELETED
@@ -1,3 +0,0 @@
1
- FROM sphinxdoc/sphinx
2
-
3
- RUN pip3 install sphinx-rtd-theme
 
 
 
vendor/dvdoug/boxpacker/docs/Makefile DELETED
@@ -1,20 +0,0 @@
1
- # Minimal makefile for Sphinx documentation
2
- #
3
-
4
- # You can set these variables from the command line.
5
- SPHINXOPTS =
6
- SPHINXBUILD = python3 -msphinx
7
- SPHINXPROJ = BoxPacker
8
- SOURCEDIR = .
9
- BUILDDIR = _build
10
-
11
- # Put it first so that "make" without argument is like "make help".
12
- help:
13
- @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
14
-
15
- .PHONY: help Makefile
16
-
17
- # Catch-all target: route all unknown targets to Sphinx using the new
18
- # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
19
- %: Makefile
20
- @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/dvdoug/boxpacker/docs/advanced-usage.rst DELETED
@@ -1,196 +0,0 @@
1
- Advanced usage
2
- ==============
3
-
4
- Used / remaining space
5
- ----------------------
6
-
7
- After packing it is possible to see how much physical space in each ``PackedBox`` is taken up with items,
8
- and how much space was unused (air). This information might be useful to determine whether it would be useful to source
9
- alternative/additional sizes of box.
10
-
11
- At a high level, the ``getVolumeUtilisation()`` method exists which calculates how full the box is as a percentage of volume.
12
-
13
- Lower-level methods are also available for examining this data in detail either using ``getUsed[Width|Length|Depth()]``
14
- (a hypothetical box placed around the items) or ``getRemaining[Width|Length|Depth()]`` (the difference between the dimensions of
15
- the actual box and the hypothetical box).
16
-
17
- .. note::
18
-
19
- BoxPacker will always try to pack items into the smallest box available
20
-
21
- Example - warning on a massively oversized box
22
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
23
-
24
- .. code-block:: php
25
-
26
- <?php
27
-
28
- // assuming packing already took place
29
- foreach ($packedBoxes as $packedBox) {
30
- if ($packedBox->getVolumeUtilisation() < 20) {
31
- // box is 80% air, log a warning
32
- }
33
- }
34
-
35
- Positional information
36
- ----------------------
37
- It is also possible to see the precise positional and dimensional information of each item as packed. This is exposed as x,y,z
38
- co-ordinates from origin, alongside width/length/depth in the packed orientation. ::
39
-
40
- z y
41
- | /
42
- | /
43
- | /
44
- |/
45
- 0------x
46
-
47
- Example
48
- ^^^^^^^
49
-
50
- .. code-block:: php
51
-
52
- <?php
53
-
54
- // assuming packing already took place
55
- foreach ($packedBoxes as $packedBox) {
56
- $packedItems = $packedBox->getItems();
57
- foreach ($packedItems as $packedItem) { // $packedItem->getItem() is your own item object
58
- echo $packedItem->getItem()->getDescription() . ' was packed at co-ordinate ' ;
59
- echo '(' . $packedItem->getX() . ', ' . $packedItem->getY() . ', ' . $packedItem->getZ() . ') with ';
60
- echo 'l' . $packedItem->getLength() . ', w' . $packedItem->getWidth() . ', d' . $packedItem->getDepth();
61
- echo PHP_EOL;
62
- }
63
- }
64
-
65
- Custom Constraints
66
- ------------------
67
-
68
- For more advanced use cases where greater control over the contents of each box is required (e.g. legal limits on the number of
69
- hazardous items per box, or perhaps fragile items requiring an extra-strong outer box) you may implement the ``BoxPacker\ConstrainedPlacementItem``
70
- interface which contains an additional callback method allowing you to decide whether to allow an item may be packed into a box
71
- or not.
72
-
73
- As with all other library methods, the objects passed into this callback are your own - you have access to their full range of
74
- properties and methods to use when evaluating a constraint, not only those defined by the standard ``BoxPacker\Item`` interface.
75
-
76
- Example - only allow 2 batteries per box
77
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
78
-
79
- .. code-block:: php
80
-
81
- <?php
82
- use DVDoug\BoxPacker\Box;
83
- use DVDoug\BoxPacker\Item;
84
- use DVDoug\BoxPacker\PackedItemList;
85
-
86
- class LithiumBattery implements ConstrainedPlacementItem
87
- {
88
-
89
- /**
90
- * Max 2 batteries per box.
91
- *
92
- * @param Box $box
93
- * @param PackedItemList $alreadyPackedItems
94
- * @param int $proposedX
95
- * @param int $proposedY
96
- * @param int $proposedZ
97
- * @param int $width
98
- * @param int $length
99
- * @param int $depth
100
- * @return bool
101
- */
102
- public function canBePacked(
103
- Box $box,
104
- PackedItemList $alreadyPackedItems,
105
- int $proposedX,
106
- int $proposedY,
107
- int $proposedZ,
108
- int $width,
109
- int $length,
110
- int $depth
111
- ): bool {
112
- $batteriesPacked = 0;
113
- foreach ($alreadyPackedItems as $packedItem) {
114
- if ($packedItem->getItem() instanceof LithiumBattery) {
115
- $batteriesPacked++;
116
- }
117
- }
118
-
119
- if ($batteriesPacked < 2) {
120
- return true; // allowed to pack
121
- } else {
122
- return false; // 2 batteries already packed, no more allowed in this box
123
- }
124
- }
125
- }
126
-
127
- Example - don't allow batteries to be stacked
128
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
129
-
130
- .. code-block:: php
131
-
132
- <?php
133
- use DVDoug\BoxPacker\Box;
134
- use DVDoug\BoxPacker\Item;
135
- use DVDoug\BoxPacker\PackedItemList;
136
-
137
- class LithiumBattery implements ConstrainedPlacementItem
138
- {
139
-
140
- /**
141
- * Batteries cannot be stacked on top of each other.
142
- *
143
- * @param Box $box
144
- * @param PackedItemList $alreadyPackedItems
145
- * @param int $proposedX
146
- * @param int $proposedY
147
- * @param int $proposedZ
148
- * @param int $width
149
- * @param int $length
150
- * @param int $depth
151
- * @return bool
152
- */
153
- public function canBePacked(
154
- Box $box,
155
- PackedItemList $alreadyPackedItems,
156
- int $proposedX,
157
- int $proposedY,
158
- int $proposedZ,
159
- int $width,
160
- int $length,
161
- int $depth
162
- ): bool {
163
- $alreadyPackedType = array_filter(
164
- iterator_to_array($alreadyPackedItems, false),
165
- function (PackedItem $item) {
166
- return $item->getItem()->getDescription() === 'Battery';
167
- }
168
- );
169
-
170
- /** @var PackedItem $alreadyPacked */
171
- foreach ($alreadyPackedType as $alreadyPacked) {
172
- if (
173
- $alreadyPacked->getZ() + $alreadyPacked->getDepth() === $proposedZ &&
174
- $proposedX >= $alreadyPacked->getX() && $proposedX <= ($alreadyPacked->getX() + $alreadyPacked->getWidth()) &&
175
- $proposedY >= $alreadyPacked->getY() && $proposedY <= ($alreadyPacked->getY() + $alreadyPacked->getLength())) {
176
- return false;
177
- }
178
- }
179
-
180
- return true;
181
- }
182
- }
183
-
184
- Limited supply boxes
185
- --------------------
186
-
187
- In standard/basic use, BoxPacker will assume you have an adequate enough supply of each box type on hand to cover all
188
- eventualities i.e. your warehouse will be very well stocked and the concept of "running low" is not applicable.
189
-
190
- However, if you only have limited quantities of boxes available and you have accurate stock control information, you can
191
- feed this information into BoxPacker which will then take it into account so that it won't suggest a packing which would
192
- take you into negative stock.
193
-
194
- To do this, have your box objects implement the ``BoxPacker\LimitedSupplyBox`` interface which has a single additional method
195
- over the standard ``BoxPacker\Box`` namely ``getQuantityAvailable()``. The library will automatically detect this and
196
- use the information accordingly.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/dvdoug/boxpacker/docs/build.ps1 DELETED
@@ -1,2 +0,0 @@
1
- docker build -t sphinxrtd .
2
- docker run -it --rm --name sphinx -v ${PWD}/..:/code -w="/code/docs" sphinxrtd make html
 
 
vendor/dvdoug/boxpacker/docs/conf.py DELETED
@@ -1,174 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- #
3
- # BoxPacker documentation build configuration file, created by
4
- # sphinx-quickstart on Sun Aug 27 14:14:09 2017.
5
- #
6
- # This file is execfile()d with the current directory set to its
7
- # containing dir.
8
- #
9
- # Note that not all possible configuration values are present in this
10
- # autogenerated file.
11
- #
12
- # All configuration values have a default; values that are commented out
13
- # serve to show the default.
14
-
15
- # If extensions (or modules to document with autodoc) are in another directory,
16
- # add these directories to sys.path here. If the directory is relative to the
17
- # documentation root, use os.path.abspath to make it absolute, like shown here.
18
- #
19
- # import os
20
- # import sys
21
- # sys.path.insert(0, os.path.abspath('.'))
22
-
23
-
24
- # -- General configuration ------------------------------------------------
25
-
26
- # If your documentation needs a minimal Sphinx version, state it here.
27
- #
28
- # needs_sphinx = '1.0'
29
-
30
- # Add any Sphinx extension module names here, as strings. They can be
31
- # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
32
- # ones.
33
- extensions = ['sphinx.ext.githubpages']
34
-
35
- # Add any paths that contain templates here, relative to this directory.
36
- templates_path = ['_templates']
37
-
38
- # The suffix(es) of source filenames.
39
- # You can specify multiple suffix as a list of string:
40
- #
41
- # source_suffix = ['.rst', '.md']
42
- source_suffix = '.rst'
43
-
44
- # The master toctree document.
45
- master_doc = 'index'
46
-
47
- # General information about the project.
48
- project = u'BoxPacker'
49
- copyright = u'2012-2021, Doug Wright'
50
- author = u'Doug Wright'
51
-
52
- # The version info for the project you're documenting, acts as replacement for
53
- # |version| and |release|, also used in various other places throughout the
54
- # built documents.
55
- #
56
- # The short X.Y version.
57
- version = u'version 3'
58
- # The full version, including alpha/beta/rc tags.
59
- release = u'version 3'
60
-
61
- # The language for content autogenerated by Sphinx. Refer to documentation
62
- # for a list of supported languages.
63
- #
64
- # This is also used if you do content translation via gettext catalogs.
65
- # Usually you set "language" from the command line for these cases.
66
- language = None
67
-
68
- # List of patterns, relative to source directory, that match files and
69
- # directories to ignore when looking for source files.
70
- # This patterns also effect to html_static_path and html_extra_path
71
- exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
72
-
73
- # The name of the Pygments (syntax highlighting) style to use.
74
- pygments_style = 'friendly'
75
-
76
- # If true, `todo` and `todoList` produce output, else they produce nothing.
77
- todo_include_todos = False
78
-
79
-
80
- # -- Options for HTML output ----------------------------------------------
81
-
82
- # The theme to use for HTML and HTML Help pages. See the documentation for
83
- # a list of builtin themes.
84
- #
85
- html_theme = 'sphinx_rtd_theme'
86
-
87
- # Theme options are theme-specific and customize the look and feel of a theme
88
- # further. For a list of options available for each theme, see the
89
- # documentation.
90
- #
91
- # html_theme_options = {}
92
-
93
- # Add any paths that contain custom static files (such as style sheets) here,
94
- # relative to this directory. They are copied after the builtin static files,
95
- # so a file named "default.css" will overwrite the builtin "default.css".
96
- html_static_path = ['_static']
97
-
98
- # Custom sidebar templates, must be a dictionary that maps document names
99
- # to template names.
100
- #
101
- # This is required for the alabaster theme
102
- # refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars
103
- html_sidebars = {
104
- '**': [
105
- 'about.html',
106
- 'navigation.html',
107
- 'relations.html', # needs 'show_related': True theme option to display
108
- 'searchbox.html',
109
- 'donate.html',
110
- ]
111
- }
112
-
113
-
114
- # -- Options for HTMLHelp output ------------------------------------------
115
-
116
- # Output file base name for HTML help builder.
117
- htmlhelp_basename = 'BoxPackerdoc'
118
-
119
-
120
- # -- Options for LaTeX output ---------------------------------------------
121
-
122
- latex_elements = {
123
- # The paper size ('letterpaper' or 'a4paper').
124
- #
125
- # 'papersize': 'a4paper',
126
-
127
- # The font size ('10pt', '11pt' or '12pt').
128
- #
129
- # 'pointsize': '10pt',
130
-
131
- # Additional stuff for the LaTeX preamble.
132
- #
133
- # 'preamble': '',
134
-
135
- # Latex figure (float) alignment
136
- #
137
- # 'figure_align': 'htbp',
138
- }
139
-
140
- # Grouping the document tree into LaTeX files. List of tuples
141
- # (source start file, target name, title,
142
- # author, documentclass [howto, manual, or own class]).
143
- latex_documents = [
144
- (master_doc, 'BoxPacker.tex', u'BoxPacker Documentation',
145
- u'Doug Wright', 'manual'),
146
- ]
147
-
148
-
149
- # -- Options for manual page output ---------------------------------------
150
-
151
- # One entry per manual page. List of tuples
152
- # (source start file, name, description, authors, manual section).
153
- man_pages = [
154
- (master_doc, 'boxpacker', u'BoxPacker Documentation',
155
- [author], 1)
156
- ]
157
-
158
-
159
- # -- Options for Texinfo output -------------------------------------------
160
-
161
- # Grouping the document tree into Texinfo files. List of tuples
162
- # (source start file, target name, title, author,
163
- # dir menu entry, description, category)
164
- texinfo_documents = [
165
- (master_doc, 'BoxPacker', u'BoxPacker Documentation',
166
- author, 'BoxPacker', 'One line description of project.',
167
- 'Miscellaneous'),
168
- ]
169
-
170
- from sphinx.highlighting import lexers
171
- from pygments.lexers.web import PhpLexer
172
-
173
- # enable highlighting for PHP code not between ``<?php ... ?>`` by default
174
- lexers['php'] = PhpLexer(startinline=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/dvdoug/boxpacker/docs/getting-started.rst DELETED
@@ -1,95 +0,0 @@
1
- Getting started
2
- ===============
3
-
4
- BoxPacker is designed to integrate as seamlessly as possible into your existing systems, and therefore makes strong use of
5
- PHP interfaces. Applications wanting to use this library will typically already have PHP domain objects/entities representing
6
- the items needing packing, so BoxPacker attempts to take advantage of these as much as possible by allowing you to pass them
7
- directly into the Packer rather than needing you to construct library-specific datastructures first. This also makes it much
8
- easier to work with the output of the Packer - the returned list of packed items in each box will contain your own objects,
9
- not simply references to them so if you want to calculate value for insurance purposes or anything else this is easy to do.
10
-
11
- Similarly, although it's much more uncommon to already have 'Box' objects before implementing this library, you'll typically
12
- want to implement them in an application-specific way to allow for storage/retrieval from a database. The Packer also allows
13
- you to pass in these objects directly too.
14
-
15
- To accommodate the wide variety of possible object types, the library defines two interfaces ``BoxPacker\Item`` and
16
- ``BoxPacker\Box`` which define methods for retrieving the required dimensional data - e.g. ``getWidth()``. There's a good chance
17
- you may already have at least some of these defined. ::
18
-
19
- --------------
20
- / /|
21
- / / |
22
- / / |
23
- |------------/ |
24
- | | /
25
- | | /
26
- depth | | / length
27
- | |/
28
- |------------/
29
- width
30
-
31
- If you do happen to have methods defined with those names already, **and they are incompatible with the interface expectations**,
32
- then this will be only case where some kind of wrapper object would be needed.
33
-
34
- Examples
35
- --------
36
-
37
- Packing a set of items into a given set of box types
38
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
39
-
40
- .. code-block:: php
41
-
42
- <?php
43
- use DVDoug\BoxPacker\Packer;
44
- use DVDoug\BoxPacker\Test\TestBox; // use your own `Box` implementation
45
- use DVDoug\BoxPacker\Test\TestItem; // use your own `Item` implementation
46
-
47
- $packer = new Packer();
48
-
49
- /*
50
- * Add choices of box type - in this example the dimensions are passed in directly via constructor,
51
- * but for real code you would probably pass in objects retrieved from a database instead
52
- */
53
- $packer->addBox(new TestBox('Le petite box', 300, 300, 10, 10, 296, 296, 8, 1000));
54
- $packer->addBox(new TestBox('Le grande box', 3000, 3000, 100, 100, 2960, 2960, 80, 10000));
55
-
56
- /*
57
- * Add items to be packed - e.g. from shopping cart stored in user session. Again, the dimensional information
58
- * (and keep-flat requirement) would normally come from a DB
59
- */
60
- $packer->addItem(new TestItem('Item 1', 250, 250, 12, 200, true), 1); // item, quantity
61
- $packer->addItem(new TestItem('Item 2', 250, 250, 12, 200, true), 2);
62
- $packer->addItem(new TestItem('Item 3', 250, 250, 24, 200, false), 1);
63
-
64
- $packedBoxes = $packer->pack();
65
-
66
- echo "These items fitted into " . count($packedBoxes) . " box(es)" . PHP_EOL;
67
- foreach ($packedBoxes as $packedBox) {
68
- $boxType = $packedBox->getBox(); // your own box object, in this case TestBox
69
- echo "This box is a {$boxType->getReference()}, it is {$boxType->getOuterWidth()}mm wide, {$boxType->getOuterLength()}mm long and {$boxType->getOuterDepth()}mm high" . PHP_EOL;
70
- echo "The combined weight of this box and the items inside it is {$packedBox->getWeight()}g" . PHP_EOL;
71
-
72
- echo "The items in this box are:" . PHP_EOL;
73
- $packedItems = $packedBox->getItems();
74
- foreach ($packedItems as $packedItem) { // $packedItem->getItem() is your own item object, in this case TestItem
75
- echo $packedItem->getItem()->getDescription() . PHP_EOL;
76
- }
77
- }
78
-
79
- Does a set of items fit into a particular box
80
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
81
- .. code-block:: php
82
-
83
- <?php
84
- /*
85
- * To just see if a selection of items will fit into one specific box
86
- */
87
- $box = new TestBox('Le box', 300, 300, 10, 10, 296, 296, 8, 1000);
88
-
89
- $items = new ItemList();
90
- $items->insert(new TestItem('Item 1', 297, 296, 2, 200, false));
91
- $items->insert(new TestItem('Item 2', 297, 296, 2, 500, false));
92
- $items->insert(new TestItem('Item 3', 296, 296, 4, 290, false));
93
-
94
- $volumePacker = new VolumePacker($box, $items);
95
- $packedBox = $volumePacker->pack(); //$packedBox->getItems() contains the items that fit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/dvdoug/boxpacker/docs/index.rst DELETED
@@ -1,29 +0,0 @@
1
- Welcome to BoxPacker's documentation!
2
- =====================================
3
-
4
- BoxPacker is an implementation of the "4D" bin packing/knapsack problem i.e. given a list of items, how many boxes do you need to
5
- fit them all in.
6
-
7
- Especially useful for e.g. e-commerce contexts when you need to know box size/weight to calculate shipping costs, or
8
- even just want to know the right number of labels to print.
9
-
10
- License
11
- -------
12
- BoxPacker is licensed under the `MIT license`_.
13
-
14
- .. _MIT license: https://github.com/dvdoug/BoxPacker/blob/master/license.txt
15
-
16
-
17
- .. toctree::
18
- :maxdepth: 1
19
- :caption: Contents
20
-
21
- installation
22
- principles
23
- getting-started
24
- rotation
25
- sortation
26
- weight-distribution
27
- too-large-items
28
- advanced-usage
29
- whatsnew
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/dvdoug/boxpacker/docs/installation.rst DELETED
@@ -1,31 +0,0 @@
1
- Installation
2
- ============
3
-
4
- The recommended way to install BoxPacker is to use `Composer`_. From the command line simply execute the following to add
5
- ``dvdoug/boxpacker`` to your project's ``composer.json`` file. Composer will automatically take care of downloading the source
6
- and configuring an autoloader:
7
-
8
- .. code::
9
-
10
- composer require dvdoug/boxpacker
11
-
12
- If you don't want to use Composer, the code is available to download from `GitHub`_
13
-
14
- Requirements
15
- ------------
16
- BoxPacker v3 is compatible with PHP 7.1+
17
-
18
- .. note::
19
-
20
- Still running an older version of PHP? No problem! BoxPacker v2 is compatible with PHP 5.4 and up, is just as
21
- production-ready, and is actively maintained.
22
-
23
- Versioning
24
- ----------
25
- BoxPacker follows `Semantic Versioning`_. For details about differences between releases please see `What's new`_
26
-
27
-
28
- .. _Composer: https://getcomposer.org
29
- .. _GitHub: https://github.com/dvdoug/BoxPacker/releases
30
- .. _Semantic Versioning: http://semver.org/
31
- .. _What's new: whatsnew.html
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/dvdoug/boxpacker/docs/principles.rst DELETED
@@ -1,22 +0,0 @@
1
- Principles of operation
2
- =======================
3
-
4
- Bin packing is an `NP-hard problem`_ and there is no way to always achieve an optimum solution without running through every
5
- single permutation. But that's OK because this implementation is designed to simulate a naive human approach to the problem
6
- rather than search for the "perfect" solution.
7
-
8
- This is for 2 reasons:
9
-
10
- 1. It's quicker
11
- 2. It doesn't require the person actually packing the box to be given a 3D diagram
12
- explaining just how the items are supposed to fit.
13
-
14
- At a high level, the algorithm works like this:
15
-
16
- * Pack largest (by volume) items first
17
- * Pack vertically up the side of the box
18
- * Pack side-by-side where item under consideration fits alongside the previous item
19
- * If more than 1 box is needed to accommodate all of the items, then aim for boxes of roughly equal weight
20
- (e.g. 3 medium size/weight boxes are better than 1 small light box and 2 that are large and heavy)
21
-
22
- .. _NP-hard problem: http://en.wikipedia.org/wiki/Bin_packing_problem
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/dvdoug/boxpacker/docs/rotation.rst DELETED
@@ -1,68 +0,0 @@
1
- Rotation
2
- ========
3
-
4
- Items
5
- -----
6
- BoxPacker gives you full control of how (or if) an individual item may be rotated to fit into a box, controlled via the
7
- ``getKeepFlat()`` method on the ``BoxPacker\Item`` interface.
8
-
9
-
10
- Best fit
11
- ^^^^^^^^
12
-
13
- To allow an item to be placed in any orientation.
14
-
15
- .. code-block:: php
16
-
17
- <?php
18
- use DVDoug\BoxPacker\Item;
19
-
20
- class YourItem implements Item
21
- {
22
- public function getKeepFlat(): bool
23
- {
24
- return false;
25
- }
26
- }
27
-
28
- Keep flat
29
- ^^^^^^^^^
30
-
31
- For items that must be shipped "flat" or "this way up".
32
-
33
- .. code-block:: php
34
-
35
- <?php
36
- use DVDoug\BoxPacker\Item;
37
-
38
- class YourItem implements Item
39
- {
40
- public function getKeepFlat(): bool
41
- {
42
- return true;
43
- }
44
- }
45
-
46
- Boxes
47
- -----
48
- BoxPacker operates internally by positioning items in "rows", firstly by placing items across the width of the box,
49
- then when there is no more space starting a new row further along the length.
50
-
51
- However, due to the nature of the placement heuristics, better packing is sometimes achieved by going the other way
52
- i.e. placing items along the length first. By default BoxPacker handles this by trying packing both ways around,
53
- transposing widths and lengths as appropriate.
54
-
55
- For most purposes this is fine, when the boxes come to be packed in real life it is done via the top and the direction
56
- used for placement doesn't matter. However, sometimes the "box" being given to BoxPacker is actually a truck or
57
- other side-loaded container and in these cases it is sometimes desirable to enforce the packing direction.
58
-
59
- This can be done when using the ``VolumePacker`` by calling the ``packAcrossWidthOnly`` method.
60
-
61
- .. code-block:: php
62
-
63
- <?php
64
- use DVDoug\BoxPacker\VolumePacker;
65
-
66
- $volumePacker = new VolumePacker($box, $items);
67
- $volumePacker->packAcrossWidthOnly();
68
- $packedBox = $volumePacker->pack();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/dvdoug/boxpacker/docs/sortation.rst DELETED
@@ -1,156 +0,0 @@
1
- Sortation
2
- =========
3
-
4
- BoxPacker (mostly) uses "online" algorithms, that is it packs sequentially, with no regard for what comes next.
5
- Therefore the order of items, or the order of boxes are of crucial importance in obtaining good results.
6
-
7
- By default, BoxPacker will try to be as smart as possible about this, packing larger/heavier items into the bottom
8
- of a box, with smaller/lighter items that might get crushed placed above them. It will also prefer to use smaller
9
- boxes where possible, rather than larger ones.
10
-
11
- However, BoxPacker also allows you to influence many of these decisions if you prefer.
12
-
13
- Items
14
- -----
15
- You may wish to explicitly pack heavier items before larger ones. Or larger ones before heavier ones. Or prefer to keep
16
- items of a similar "group" together (whatever that might mean for your application). The ``ItemList`` class supports
17
- this via two methods.
18
-
19
- Supplying a pre-sorted list
20
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^
21
- If you already have your items in a pre-sorted array (e.g. when using a database ``ORDER BY``, you can construct an
22
- ``ItemList`` directly from it. You can also use this mechanism if you know that all of your items have identical
23
- dimensions and therefore having BoxPacker sort them before commencing packing would just be a waste of CPU time.
24
-
25
- .. code-block:: php
26
-
27
- $itemList = ItemList::fromArray($anArrayOfItems, true); // set the 2nd param to true if presorted
28
-
29
- Overriding the default algorithm
30
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
31
- First, create your own implementation of the ``ItemSorter`` interface implementing your particular requirements:
32
-
33
- .. code-block:: php
34
-
35
- /**
36
- * A callback to be used with usort(), implementing logic to determine which Item is a higher priority for packing.
37
- */
38
- YourApplicationItemSorter implements DVDoug\BoxPacker\ItemSorter
39
- {
40
- /**
41
- * Return -1 if $itemA is preferred, 1 if $itemB is preferred or 0 if neither is preferred.
42
- */
43
- public function compare(Item $itemA, Item $itemB): int
44
- {
45
- // your logic to determine ordering goes here. Remember, that Item is your own object,
46
- // and you have full access to all methods on it, not just the ones from the Item interface
47
- }
48
- }
49
-
50
- Then, pass this to the ``ItemList`` constructor
51
-
52
- .. code-block:: php
53
-
54
- $sorter = new YourApplicationItemSorter();
55
- $itemList = new ItemList($sorter);
56
-
57
- Enforcing strict ordering
58
- ^^^^^^^^^^^^^^^^^^^^^^^^^
59
- Regardless of which of the above methods you use, BoxPacker's normal mode of operation is to respect the sort ordering
60
- *but not at the expense of packing density*. If an item in the list is too large to fit into a particular space,
61
- BoxPacker will temporarily skip over it and will try the next item in the list instead.
62
-
63
- This typically works well for ecommerce, but in some applications you may want your custom sort to be absolutely
64
- determinative. You can do this by calling ``beStrictAboutItemOrdering()``.
65
-
66
- .. code-block:: php
67
-
68
- $packer = new Packer();
69
- $packer->beStrictAboutItemOrdering(true); // or false to turn strict ordering off again
70
-
71
- $volumePacker = new VolumePacker(...);
72
- $volumePacker->beStrictAboutItemOrdering(true); // or false to turn strict ordering off again
73
-
74
- Box types
75
- ---------
76
- BoxPacker's default algorithm assumes that box size/weight is a proxy for cost and therefore seeks to use the
77
- smallest/lightest type of box possible for a set of items. However in some cases this assumption might not be true,
78
- or you may have alternate reasons for preferring to use one type of box over another. The ``BoxList`` class supports
79
- this kind of application-controlled sorting via two methods.
80
-
81
- Supplying a pre-sorted list
82
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^
83
- If you already have your items in a pre-sorted array (e.g. when using a database ``ORDER BY``, you can construct an
84
- ``BoxList`` directly from it.
85
-
86
- .. code-block:: php
87
-
88
- $boxList = BoxList::fromArray($anArrayOfBoxes, true); // set the 2nd param to true if presorted
89
-
90
- Overriding the default algorithm
91
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
92
- First, create your own implementation of the ``BoxSorter`` interface implementing your particular requirements:
93
-
94
- .. code-block:: php
95
-
96
- /**
97
- * A callback to be used with usort(), implementing logic to determine which Box is "better".
98
- */
99
- YourApplicationBoxSorter implements DVDoug\BoxPacker\BoxSorter
100
- {
101
- /**
102
- * Return -1 if $boxA is "best", 1 if $boxB is "best" or 0 if neither is "best".
103
- */
104
- public function compare(Box $boxA, Box $boxB): int
105
- {
106
- // your logic to determine ordering goes here. Remember, that Box is your own object,
107
- // and you have full access to all methods on it, not just the ones from the Box interface
108
- }
109
- }
110
-
111
- Then, pass this to the ``BoxList`` constructor
112
-
113
- .. code-block:: php
114
-
115
- $sorter = new YourApplicationBoxSorter();
116
- $boxList = new BoxList($sorter);
117
-
118
- Choosing between permutations
119
- -----------------------------
120
- In a scenario where even the largest box type is not large enough to contain all of the items, BoxPacker needs to decide
121
- which is the "best" possible first box, so it can then pack the remaining items into a second box (and so on). If there
122
- are two different box types that each hold the same number of items (but different items), which one should be picked?
123
- What if one of the boxes can hold an additional item, but is twice as large? Is it better to minimise the number of boxes,
124
- or their volume?
125
-
126
- By default, BoxPacker will optimise for the largest number of items in a box, with volume acting as a tie-breaker.
127
- This can also be changed:
128
-
129
- Overriding the default algorithm
130
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
131
- First, create your own implementation of the ``PackedBoxSorter`` interface implementing your particular requirements:
132
-
133
- .. code-block:: php
134
-
135
- /**
136
- * A callback to be used with usort(), implementing logic to determine which PackedBox is "better".
137
- */
138
- YourApplicationPackedBoxSorter implements DVDoug\BoxPacker\PackedBoxSorter
139
- {
140
- /**
141
- * Return -1 if $boxA is "best", 1 if $boxB is "best" or 0 if neither is "best".
142
- */
143
- public function compare(PackedBox $boxA, PackedBox $boxB): int
144
- {
145
- // your logic to determine "best" goes here
146
- }
147
- }
148
-
149
- Then, pass this to the ``Packer``
150
-
151
- .. code-block:: php
152
-
153
- $sorter = new YourApplicationPackedBoxSorter();
154
-
155
- $packer = new Packer();
156
- $packer->setPackedBoxSorter($sorter);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/dvdoug/boxpacker/docs/too-large-items.rst DELETED
@@ -1,60 +0,0 @@
1
- Too-large items
2
- ===============
3
-
4
- As a library, by default BoxPacker makes the design choice that any errors or exceptions thrown during operation are
5
- best handled by you and your own code as the appropriate way to to handle a failure will vary from application to application.
6
- There is no attempt made to handle/recover from them internally.
7
-
8
- This includes the case where there are no boxes large enough to pack a particular item. The normal operation of the Packer
9
- class is to throw an ``NoBoxesAvailableException``. If your application has well-defined logging and monitoring it may be
10
- sufficient to simply allow the exception to bubble up to your generic handling layer and handle like any other runtime failure.
11
- Alternatively, you may wish to catch it explicitly and have domain-specific handling logic e.g.
12
-
13
- .. code-block:: php
14
-
15
- <?php
16
- use DVDoug\BoxPacker\NoBoxesAvailableException;
17
- use DVDoug\BoxPacker\Packer;
18
- use DVDoug\BoxPacker\Test\TestBox; // use your own `Box` implementation
19
- use DVDoug\BoxPacker\Test\TestItem; // use your own `Item` implementation
20
-
21
- try {
22
- $packer = new Packer();
23
-
24
- $packer->addBox(new TestBox('Le petite box', 300, 300, 10, 10, 296, 296, 8, 1000));
25
- $packer->addBox(new TestBox('Le grande box', 3000, 3000, 100, 100, 2960, 2960, 80, 10000));
26
-
27
- $packer->addItem(new TestItem('Item 1', 2500, 2500, 20, 2000, true));
28
- $packer->addItem(new TestItem('Item 2', 25000, 2500, 20, 2000, true));
29
- $packer->addItem(new TestItem('Item 3', 2500, 2500, 20, 2000, true));
30
-
31
- $packedBoxes = $packer->pack();
32
- } catch (NoBoxesAvailableException $e) {
33
- $problemItem = $e->getItem(); //the custom exception allows you to retrieve the affected item
34
- // pause dispatch, email someone or any other handling of your choosing
35
- }
36
-
37
- For some applications the ability/requirement to do their own handling of this case may not be wanted or may even be
38
- problematic, e.g. if some items being too large and requiring special handling is a normal situation for that particular business.
39
-
40
- BoxPacker also supports this workflow with the ``InfalliblePacker``. This class extends the base ``Packer`` and automatically
41
- handles any ``NoBoxesAvailableException``. It can be used like this:
42
-
43
- .. code-block:: php
44
-
45
- <?php
46
- use DVDoug\BoxPacker\InfalliblePacker;
47
- use DVDoug\BoxPacker\Test\TestBox; // use your own `Box` implementation
48
- use DVDoug\BoxPacker\Test\TestItem; // use your own `Item` implementation
49
-
50
- $packer = new InfalliblePacker();
51
-
52
- $packer->addBox(new TestBox('Le petite box', 300, 300, 10, 10, 296, 296, 8, 1000));
53
- $packer->addBox(new TestBox('Le grande box', 3000, 3000, 100, 100, 2960, 2960, 80, 10000));
54
-
55
- $packer->addItem(new TestItem('Item 1', 2500, 2500, 20, 2000, true));
56
- $packer->addItem(new TestItem('Item 2', 25000, 2500, 20, 2000, true));
57
- $packer->addItem(new TestItem('Item 3', 2500, 2500, 20, 2000, true));
58
-
59
- $packedBoxes = $packer->pack(); //same as regular Packer
60
- $unpackedItems = $packer->getUnpackedItems();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/dvdoug/boxpacker/docs/weight-distribution.rst DELETED
@@ -1,33 +0,0 @@
1
- Weight distribution
2
- ===================
3
-
4
- If you are shipping a large number of items to a single customer as many businesses do, it might be that more than one box is
5
- required to accommodate all of the items. A common scenario which you'll have probably encountered when receiving your own
6
- deliveries is that the first box(es) will be absolutely full as the warehouse operative will have tried to fit in as much as
7
- possible. The last box by comparison will be virtually empty and mostly filled with protective inner packing.
8
-
9
- There's nothing intrinsically wrong with this, but it can be a bit annoying for e.g. couriers and customers to receive e.g.
10
- a 20kg box which requires heavy lifting alongside a similarly sized box that weighs hardly anything at all. If you have to send
11
- two boxes anyway, it would be much better in such a situation to have e.g. an 11kg box and a 10kg box instead.
12
-
13
- Happily, this smoothing out of weight is handled automatically for you by BoxPacker - once the initial dimension-only packing
14
- is completed, a second pass is made that reallocates items from heavier boxes into any lighter ones that have space.
15
-
16
- For most use-cases the benefits are worth the extra computation time - however if a single "packing" for your scenarios
17
- involves a very large number of permutations e.g. thousands of items, you may wish to tune this behaviour.
18
-
19
- By default, the weight distribution pass is made whenever the items fit into 12 boxes or less. To reduce (or increase) the
20
- threshold, call ``setMaxBoxesToBalanceWeight()``
21
-
22
- .. code-block:: php
23
-
24
- <?php
25
- use DVDoug\BoxPacker\Packer;
26
-
27
- $packer = new Packer();
28
- $packer->setMaxBoxesToBalanceWeight(3);
29
-
30
-
31
- .. note::
32
-
33
- A threshold value of either 0 or 1 will disable the weight distribution pass completely
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/dvdoug/boxpacker/docs/whatsnew.rst DELETED
@@ -1,88 +0,0 @@
1
- What's new / Upgrading
2
- ======================
3
-
4
- .. note::
5
-
6
- Below is summary of key changes between versions that you should be aware of. A full changelog, including changes in minor
7
- versions is available from https://github.com/dvdoug/BoxPacker/blob/master/CHANGELOG.md
8
-
9
- Version 3
10
- ---------
11
-
12
- Positional information on packed items
13
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
14
- Version 3 allows you to see the positional and dimensional information of each item as packed. Exposing this additional data
15
- unfortunately means an API change - specifically ``PackedBox->getItems`` now returns a set of ``PackedItem`` s rather than
16
- ``Item`` s. A ``PackedItem`` is a wrapper around around an `Item` with positional and dimensional information
17
- (x/y/z co-ordinates of corner closest to origin, width/length/depth as packed). Adapting existing v2 code to v3 is simple:
18
-
19
- Before
20
-
21
- .. code-block:: php
22
-
23
- <?php
24
- $itemsInTheBox = $packedBox->getItems();
25
- foreach ($itemsInTheBox as $item) { // your own item object
26
- echo $item->getDescription() . PHP_EOL;
27
- }
28
-
29
- After
30
-
31
- .. code-block:: php
32
-
33
- <?php
34
- $packedItems = $packedBox->getItems();
35
- foreach ($packedItems as $packedItem) { // $packedItem->getItem() is your own item object
36
- echo $packedItem->getItem()->getDescription() . PHP_EOL;
37
- }
38
-
39
- If you use ``BoxPacker\ConstrainedItem``, you'll need to make the same change there too.
40
-
41
- PHP 7 type declarations
42
- ^^^^^^^^^^^^^^^^^^^^^^^
43
- Version 3 also takes advantage of the API break opportunity introduced by the additional positional information and is the first
44
- version of BoxPacker to take advantage of PHP7's type declaration system. The core ``BoxPacker\Item`` and ``BoxPacker\Box``
45
- interfaces definitions have been supplemented with code-level type information to enforce expectations. This is a technical break
46
- only, no implementation requires changing - only the correct type information added, e.g.
47
-
48
- Before
49
-
50
- .. code-block:: php
51
-
52
- <?php
53
- /**
54
- * @return string
55
- */
56
- public function getDescription()
57
- {
58
- return $this->description;
59
- }
60
-
61
- After
62
-
63
- .. code-block:: php
64
-
65
- <?php
66
- /**
67
- * @return string
68
- */
69
- public function getDescription(): string
70
- {
71
- return $this->description;
72
- }
73
-
74
- Version 2
75
- ---------
76
-
77
- 3D rotation when packing
78
- ^^^^^^^^^^^^^^^^^^^^^^^^
79
- Version 2 of BoxPacker introduces a key feature for many use-cases, which is support for full 3D rotations of items. Version 1
80
- was limited to rotating items in 2D only - effectively treating every item as "keep flat" or "ship this way up". Version 2
81
- adds an extra method onto the ``BoxPacker\Item`` interface to control on a per-item level whether the item can be turned onto
82
- it's side or not.
83
-
84
- Removal of deprecated methods
85
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
86
- The ``packIntoBox``, ``packBox`` and ``redistributeWeight`` methods were removed from the ``Packer`` class. If you were previously
87
- using these v1 methods, please see their implementations in https://github.com/dvdoug/BoxPacker/blob/1.x/src/Packer.php for a
88
- guide on how to achieve the same results with v2.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/jetpack-autoloader/class-autoloader-handler.php CHANGED
@@ -5,7 +5,7 @@
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
- namespace Automattic\Jetpack\Autoloader\jpcbab968d3fc0209874f3790cfc217a6b;
9
 
10
  // phpcs:ignore
11
 
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
+ namespace Automattic\Jetpack\Autoloader\jp158461c45ef8fd285a1dce911a0bd208;
9
 
10
  // phpcs:ignore
11
 
vendor/jetpack-autoloader/class-autoloader-locator.php CHANGED
@@ -5,7 +5,7 @@
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
- namespace Automattic\Jetpack\Autoloader\jpcbab968d3fc0209874f3790cfc217a6b;
9
 
10
  // phpcs:ignore
11
 
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
+ namespace Automattic\Jetpack\Autoloader\jp158461c45ef8fd285a1dce911a0bd208;
9
 
10
  // phpcs:ignore
11
 
vendor/jetpack-autoloader/class-autoloader.php CHANGED
@@ -5,7 +5,7 @@
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
- namespace Automattic\Jetpack\Autoloader\jpcbab968d3fc0209874f3790cfc217a6b;
9
 
10
  // phpcs:ignore
11
 
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
+ namespace Automattic\Jetpack\Autoloader\jp158461c45ef8fd285a1dce911a0bd208;
9
 
10
  // phpcs:ignore
11
 
vendor/jetpack-autoloader/class-container.php CHANGED
@@ -5,7 +5,7 @@
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
- namespace Automattic\Jetpack\Autoloader\jpcbab968d3fc0209874f3790cfc217a6b;
9
 
10
  // phpcs:ignore
11
 
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
+ namespace Automattic\Jetpack\Autoloader\jp158461c45ef8fd285a1dce911a0bd208;
9
 
10
  // phpcs:ignore
11
 
vendor/jetpack-autoloader/class-hook-manager.php CHANGED
@@ -5,7 +5,7 @@
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
- namespace Automattic\Jetpack\Autoloader\jpcbab968d3fc0209874f3790cfc217a6b;
9
 
10
  // phpcs:ignore
11
 
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
+ namespace Automattic\Jetpack\Autoloader\jp158461c45ef8fd285a1dce911a0bd208;
9
 
10
  // phpcs:ignore
11
 
vendor/jetpack-autoloader/class-latest-autoloader-guard.php CHANGED
@@ -5,7 +5,7 @@
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
- namespace Automattic\Jetpack\Autoloader\jpcbab968d3fc0209874f3790cfc217a6b;
9
 
10
  // phpcs:ignore
11
 
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
+ namespace Automattic\Jetpack\Autoloader\jp158461c45ef8fd285a1dce911a0bd208;
9
 
10
  // phpcs:ignore
11
 
vendor/jetpack-autoloader/class-manifest-reader.php CHANGED
@@ -5,7 +5,7 @@
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
- namespace Automattic\Jetpack\Autoloader\jpcbab968d3fc0209874f3790cfc217a6b;
9
 
10
  // phpcs:ignore
11
 
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
+ namespace Automattic\Jetpack\Autoloader\jp158461c45ef8fd285a1dce911a0bd208;
9
 
10
  // phpcs:ignore
11
 
vendor/jetpack-autoloader/class-path-processor.php CHANGED
@@ -5,7 +5,7 @@
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
- namespace Automattic\Jetpack\Autoloader\jpcbab968d3fc0209874f3790cfc217a6b;
9
 
10
  // phpcs:ignore
11
 
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
+ namespace Automattic\Jetpack\Autoloader\jp158461c45ef8fd285a1dce911a0bd208;
9
 
10
  // phpcs:ignore
11
 
vendor/jetpack-autoloader/class-php-autoloader.php CHANGED
@@ -5,7 +5,7 @@
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
- namespace Automattic\Jetpack\Autoloader\jpcbab968d3fc0209874f3790cfc217a6b;
9
 
10
  // phpcs:ignore
11
 
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
+ namespace Automattic\Jetpack\Autoloader\jp158461c45ef8fd285a1dce911a0bd208;
9
 
10
  // phpcs:ignore
11
 
vendor/jetpack-autoloader/class-plugin-locator.php CHANGED
@@ -5,7 +5,7 @@
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
- namespace Automattic\Jetpack\Autoloader\jpcbab968d3fc0209874f3790cfc217a6b;
9
 
10
  // phpcs:ignore
11
 
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
+ namespace Automattic\Jetpack\Autoloader\jp158461c45ef8fd285a1dce911a0bd208;
9
 
10
  // phpcs:ignore
11
 
vendor/jetpack-autoloader/class-plugins-handler.php CHANGED
@@ -5,7 +5,7 @@
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
- namespace Automattic\Jetpack\Autoloader\jpcbab968d3fc0209874f3790cfc217a6b;
9
 
10
  // phpcs:ignore
11
 
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
+ namespace Automattic\Jetpack\Autoloader\jp158461c45ef8fd285a1dce911a0bd208;
9
 
10
  // phpcs:ignore
11
 
vendor/jetpack-autoloader/class-shutdown-handler.php CHANGED
@@ -5,7 +5,7 @@
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
- namespace Automattic\Jetpack\Autoloader\jpcbab968d3fc0209874f3790cfc217a6b;
9
 
10
  // phpcs:ignore
11
 
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
+ namespace Automattic\Jetpack\Autoloader\jp158461c45ef8fd285a1dce911a0bd208;
9
 
10
  // phpcs:ignore
11
 
vendor/jetpack-autoloader/class-version-loader.php CHANGED
@@ -5,7 +5,7 @@
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
- namespace Automattic\Jetpack\Autoloader\jpcbab968d3fc0209874f3790cfc217a6b;
9
 
10
  // phpcs:ignore
11
 
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
+ namespace Automattic\Jetpack\Autoloader\jp158461c45ef8fd285a1dce911a0bd208;
9
 
10
  // phpcs:ignore
11
 
vendor/jetpack-autoloader/class-version-selector.php CHANGED
@@ -5,7 +5,7 @@
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
- namespace Automattic\Jetpack\Autoloader\jpcbab968d3fc0209874f3790cfc217a6b;
9
 
10
  // phpcs:ignore
11
 
5
  * @package automattic/jetpack-autoloader
6
  */
7
 
8
+ namespace Automattic\Jetpack\Autoloader\jp158461c45ef8fd285a1dce911a0bd208;
9
 
10
  // phpcs:ignore
11
 
woocommerce-germanized.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Germanized for WooCommerce
4
  * Plugin URI: https://www.vendidero.de/woocommerce-germanized
5
  * Description: Germanized for WooCommerce extends WooCommerce to become a legally compliant store in the german market.
6
- * Version: 3.10.5
7
  * Author: vendidero
8
  * Author URI: https://vendidero.de
9
  * Requires at least: 5.4
@@ -69,7 +69,7 @@ if ( ! class_exists( 'WooCommerce_Germanized' ) ) :
69
  *
70
  * @var string
71
  */
72
- public $version = '3.10.5';
73
 
74
  /**
75
  * @var WooCommerce_Germanized $instance of the plugin
3
  * Plugin Name: Germanized for WooCommerce
4
  * Plugin URI: https://www.vendidero.de/woocommerce-germanized
5
  * Description: Germanized for WooCommerce extends WooCommerce to become a legally compliant store in the german market.
6
+ * Version: 3.10.6
7
  * Author: vendidero
8
  * Author URI: https://vendidero.de
9
  * Requires at least: 5.4
69
  *
70
  * @var string
71
  */
72
+ public $version = '3.10.6';
73
 
74
  /**
75
  * @var WooCommerce_Germanized $instance of the plugin