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 | WooCommerce Germanized |
Version | 3.10.6 |
Comparing to | |
See all releases |
Code changes from version 3.10.5 to 3.10.6
- includes/admin/class-wc-gzd-admin.php +1 -1
- includes/class-wc-gzd-customer-helper.php +32 -10
- includes/class-wc-gzd-install.php +11 -2
- includes/wc-gzd-legacy-functions.php +17 -13
- packages/woocommerce-germanized-shipments/src/Admin/Admin.php +5 -5
- packages/woocommerce-germanized-shipments/src/Package.php +1 -1
- packages/woocommerce-germanized-shipments/woocommerce-germanized-shipments.php +1 -1
- readme.txt +8 -9
- vendor/autoload.php +1 -1
- vendor/autoload_packages.php +1 -1
- vendor/composer/autoload_real.php +7 -7
- vendor/composer/autoload_static.php +4 -4
- vendor/composer/installed.json +7 -7
- vendor/composer/installed.php +5 -5
- vendor/composer/jetpack_autoload_classmap.php +61 -61
- vendor/dvdoug/boxpacker/docs/Dockerfile +0 -3
- vendor/dvdoug/boxpacker/docs/Makefile +0 -20
- vendor/dvdoug/boxpacker/docs/advanced-usage.rst +0 -196
- vendor/dvdoug/boxpacker/docs/build.ps1 +0 -2
- vendor/dvdoug/boxpacker/docs/conf.py +0 -174
- vendor/dvdoug/boxpacker/docs/getting-started.rst +0 -95
- vendor/dvdoug/boxpacker/docs/index.rst +0 -29
- vendor/dvdoug/boxpacker/docs/installation.rst +0 -31
- vendor/dvdoug/boxpacker/docs/principles.rst +0 -22
- vendor/dvdoug/boxpacker/docs/rotation.rst +0 -68
- vendor/dvdoug/boxpacker/docs/sortation.rst +0 -156
- vendor/dvdoug/boxpacker/docs/too-large-items.rst +0 -60
- vendor/dvdoug/boxpacker/docs/weight-distribution.rst +0 -33
- vendor/dvdoug/boxpacker/docs/whatsnew.rst +0 -88
- vendor/jetpack-autoloader/class-autoloader-handler.php +1 -1
- vendor/jetpack-autoloader/class-autoloader-locator.php +1 -1
- vendor/jetpack-autoloader/class-autoloader.php +1 -1
- vendor/jetpack-autoloader/class-container.php +1 -1
- vendor/jetpack-autoloader/class-hook-manager.php +1 -1
- vendor/jetpack-autoloader/class-latest-autoloader-guard.php +1 -1
- vendor/jetpack-autoloader/class-manifest-reader.php +1 -1
- vendor/jetpack-autoloader/class-path-processor.php +1 -1
- vendor/jetpack-autoloader/class-php-autoloader.php +1 -1
- vendor/jetpack-autoloader/class-plugin-locator.php +1 -1
- vendor/jetpack-autoloader/class-plugins-handler.php +1 -1
- vendor/jetpack-autoloader/class-shutdown-handler.php +1 -1
- vendor/jetpack-autoloader/class-version-loader.php +1 -1
- vendor/jetpack-autoloader/class-version-selector.php +1 -1
- 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['
|
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' ),
|
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 |
-
|
660 |
} else {
|
661 |
-
|
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(
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
|
|
|
|
|
|
141 |
}
|
142 |
-
}
|
143 |
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
|
148 |
-
|
|
|
149 |
}
|
150 |
-
}
|
151 |
-
|
|
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.
|
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.
|
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.
|
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
|
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
|
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\
|
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
|
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('
|
28 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
|
29 |
-
spl_autoload_unregister(array('
|
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\
|
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\
|
57 |
} else {
|
58 |
$includeFiles = require __DIR__ . '/autoload_files.php';
|
59 |
}
|
60 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
61 |
-
|
62 |
}
|
63 |
|
64 |
return $loader;
|
65 |
}
|
66 |
}
|
67 |
|
68 |
-
function
|
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
|
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 =
|
560 |
-
$loader->prefixDirsPsr4 =
|
561 |
-
$loader->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.
|
977 |
-
"version_normalized": "2.1.
|
978 |
"source": {
|
979 |
"type": "git",
|
980 |
"url": "https://github.com/vendidero/woocommerce-germanized-shipments.git",
|
981 |
-
"reference": "
|
982 |
},
|
983 |
"dist": {
|
984 |
"type": "zip",
|
985 |
-
"url": "https://api.github.com/repos/vendidero/woocommerce-germanized-shipments/zipball/
|
986 |
-
"reference": "
|
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-
|
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.
|
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' => '
|
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' => '
|
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.
|
171 |
-
'version' => '2.1.
|
172 |
'type' => 'wordpress-plugin',
|
173 |
'install_path' => __DIR__ . '/../../packages/woocommerce-germanized-shipments',
|
174 |
'aliases' => array(),
|
175 |
-
'reference' => '
|
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.
|
387 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Shipment.php'
|
388 |
),
|
389 |
'Vendidero\\Germanized\\Shipments\\Packaging\\ReportHelper' => array(
|
390 |
-
'version' => '2.1.
|
391 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packaging/ReportHelper.php'
|
392 |
),
|
393 |
'Vendidero\\Germanized\\Shipments\\Packaging\\ReportQueue' => array(
|
394 |
-
'version' => '2.1.
|
395 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packaging/ReportQueue.php'
|
396 |
),
|
397 |
'Vendidero\\Germanized\\Shipments\\Packaging\\AsyncReportGenerator' => array(
|
398 |
-
'version' => '2.1.
|
399 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packaging/AsyncReportGenerator.php'
|
400 |
),
|
401 |
'Vendidero\\Germanized\\Shipments\\Packaging\\Report' => array(
|
402 |
-
'version' => '2.1.
|
403 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packaging/Report.php'
|
404 |
),
|
405 |
'Vendidero\\Germanized\\Shipments\\ShippingProvider\\Auto' => array(
|
406 |
-
'version' => '2.1.
|
407 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShippingProvider/Auto.php'
|
408 |
),
|
409 |
'Vendidero\\Germanized\\Shipments\\ShippingProvider\\Method' => array(
|
410 |
-
'version' => '2.1.
|
411 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShippingProvider/Method.php'
|
412 |
),
|
413 |
'Vendidero\\Germanized\\Shipments\\ShippingProvider\\Simple' => array(
|
414 |
-
'version' => '2.1.
|
415 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShippingProvider/Simple.php'
|
416 |
),
|
417 |
'Vendidero\\Germanized\\Shipments\\ShippingProvider\\Helper' => array(
|
418 |
-
'version' => '2.1.
|
419 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShippingProvider/Helper.php'
|
420 |
),
|
421 |
'Vendidero\\Germanized\\Shipments\\ShippingProvider\\MethodPlaceholder' => array(
|
422 |
-
'version' => '2.1.
|
423 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShippingProvider/MethodPlaceholder.php'
|
424 |
),
|
425 |
'Vendidero\\Germanized\\Shipments\\Install' => array(
|
426 |
-
'version' => '2.1.
|
427 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Install.php'
|
428 |
),
|
429 |
'Vendidero\\Germanized\\Shipments\\SimpleShipment' => array(
|
430 |
-
'version' => '2.1.
|
431 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/SimpleShipment.php'
|
432 |
),
|
433 |
'Vendidero\\Germanized\\Shipments\\Package' => array(
|
434 |
-
'version' => '2.1.
|
435 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Package.php'
|
436 |
),
|
437 |
'Vendidero\\Germanized\\Shipments\\Product' => array(
|
438 |
-
'version' => '2.1.
|
439 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Product.php'
|
440 |
),
|
441 |
'Vendidero\\Germanized\\Shipments\\Order' => array(
|
442 |
-
'version' => '2.1.
|
443 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Order.php'
|
444 |
),
|
445 |
'Vendidero\\Germanized\\Shipments\\DataStores\\Shipment' => array(
|
446 |
-
'version' => '2.1.
|
447 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/DataStores/Shipment.php'
|
448 |
),
|
449 |
'Vendidero\\Germanized\\Shipments\\DataStores\\Label' => array(
|
450 |
-
'version' => '2.1.
|
451 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/DataStores/Label.php'
|
452 |
),
|
453 |
'Vendidero\\Germanized\\Shipments\\DataStores\\ShippingProvider' => array(
|
454 |
-
'version' => '2.1.
|
455 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/DataStores/ShippingProvider.php'
|
456 |
),
|
457 |
'Vendidero\\Germanized\\Shipments\\DataStores\\Packaging' => array(
|
458 |
-
'version' => '2.1.
|
459 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/DataStores/Packaging.php'
|
460 |
),
|
461 |
'Vendidero\\Germanized\\Shipments\\DataStores\\ShipmentItem' => array(
|
462 |
-
'version' => '2.1.
|
463 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/DataStores/ShipmentItem.php'
|
464 |
),
|
465 |
'Vendidero\\Germanized\\Shipments\\PackagingFactory' => array(
|
466 |
-
'version' => '2.1.
|
467 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/PackagingFactory.php'
|
468 |
),
|
469 |
'Vendidero\\Germanized\\Shipments\\Ajax' => array(
|
470 |
-
'version' => '2.1.
|
471 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Ajax.php'
|
472 |
),
|
473 |
'Vendidero\\Germanized\\Shipments\\ReturnShipment' => array(
|
474 |
-
'version' => '2.1.
|
475 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ReturnShipment.php'
|
476 |
),
|
477 |
'Vendidero\\Germanized\\Shipments\\AddressSplitter' => array(
|
478 |
-
'version' => '2.1.
|
479 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/AddressSplitter.php'
|
480 |
),
|
481 |
'Vendidero\\Germanized\\Shipments\\Admin\\BulkLabel' => array(
|
482 |
-
'version' => '2.1.
|
483 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Admin/BulkLabel.php'
|
484 |
),
|
485 |
'Vendidero\\Germanized\\Shipments\\Admin\\Settings' => array(
|
486 |
-
'version' => '2.1.
|
487 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Admin/Settings.php'
|
488 |
),
|
489 |
'Vendidero\\Germanized\\Shipments\\Admin\\MetaBox' => array(
|
490 |
-
'version' => '2.1.
|
491 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Admin/MetaBox.php'
|
492 |
),
|
493 |
'Vendidero\\Germanized\\Shipments\\Admin\\ProviderSettings' => array(
|
494 |
-
'version' => '2.1.
|
495 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Admin/ProviderSettings.php'
|
496 |
),
|
497 |
'Vendidero\\Germanized\\Shipments\\Admin\\ReturnTable' => array(
|
498 |
-
'version' => '2.1.
|
499 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Admin/ReturnTable.php'
|
500 |
),
|
501 |
'Vendidero\\Germanized\\Shipments\\Admin\\BulkActionHandler' => array(
|
502 |
-
'version' => '2.1.
|
503 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Admin/BulkActionHandler.php'
|
504 |
),
|
505 |
'Vendidero\\Germanized\\Shipments\\Admin\\Admin' => array(
|
506 |
-
'version' => '2.1.
|
507 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Admin/Admin.php'
|
508 |
),
|
509 |
'Vendidero\\Germanized\\Shipments\\Admin\\Table' => array(
|
510 |
-
'version' => '2.1.
|
511 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Admin/Table.php'
|
512 |
),
|
513 |
'Vendidero\\Germanized\\Shipments\\Labels\\Factory' => array(
|
514 |
-
'version' => '2.1.
|
515 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Labels/Factory.php'
|
516 |
),
|
517 |
'Vendidero\\Germanized\\Shipments\\Labels\\Label' => array(
|
518 |
-
'version' => '2.1.
|
519 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Labels/Label.php'
|
520 |
),
|
521 |
'Vendidero\\Germanized\\Shipments\\Labels\\ReturnLabel' => array(
|
522 |
-
'version' => '2.1.
|
523 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Labels/ReturnLabel.php'
|
524 |
),
|
525 |
'Vendidero\\Germanized\\Shipments\\Labels\\DownloadHandler' => array(
|
526 |
-
'version' => '2.1.
|
527 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Labels/DownloadHandler.php'
|
528 |
),
|
529 |
'Vendidero\\Germanized\\Shipments\\Labels\\Automation' => array(
|
530 |
-
'version' => '2.1.
|
531 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Labels/Automation.php'
|
532 |
),
|
533 |
'Vendidero\\Germanized\\Shipments\\Labels\\Query' => array(
|
534 |
-
'version' => '2.1.
|
535 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Labels/Query.php'
|
536 |
),
|
537 |
'Vendidero\\Germanized\\Shipments\\ShipmentQuery' => array(
|
538 |
-
'version' => '2.1.
|
539 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShipmentQuery.php'
|
540 |
),
|
541 |
'Vendidero\\Germanized\\Shipments\\WPMLHelper' => array(
|
542 |
-
'version' => '2.1.
|
543 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/WPMLHelper.php'
|
544 |
),
|
545 |
'Vendidero\\Germanized\\Shipments\\ShipmentReturnItem' => array(
|
546 |
-
'version' => '2.1.
|
547 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShipmentReturnItem.php'
|
548 |
),
|
549 |
'Vendidero\\Germanized\\Shipments\\FormHandler' => array(
|
550 |
-
'version' => '2.1.
|
551 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/FormHandler.php'
|
552 |
),
|
553 |
'Vendidero\\Germanized\\Shipments\\PDFMerger' => array(
|
554 |
-
'version' => '2.1.
|
555 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/PDFMerger.php'
|
556 |
),
|
557 |
'Vendidero\\Germanized\\Shipments\\ShipmentFactory' => array(
|
558 |
-
'version' => '2.1.
|
559 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShipmentFactory.php'
|
560 |
),
|
561 |
'Vendidero\\Germanized\\Shipments\\Automation' => array(
|
562 |
-
'version' => '2.1.
|
563 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Automation.php'
|
564 |
),
|
565 |
'Vendidero\\Germanized\\Shipments\\Packaging' => array(
|
566 |
-
'version' => '2.1.
|
567 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packaging.php'
|
568 |
),
|
569 |
'Vendidero\\Germanized\\Shipments\\Api' => array(
|
570 |
-
'version' => '2.1.
|
571 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Api.php'
|
572 |
),
|
573 |
'Vendidero\\Germanized\\Shipments\\ShipmentItem' => array(
|
574 |
-
'version' => '2.1.
|
575 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ShipmentItem.php'
|
576 |
),
|
577 |
'Vendidero\\Germanized\\Shipments\\Validation' => array(
|
578 |
-
'version' => '2.1.
|
579 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Validation.php'
|
580 |
),
|
581 |
'Vendidero\\Germanized\\Shipments\\Emails' => array(
|
582 |
-
'version' => '2.1.
|
583 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Emails.php'
|
584 |
),
|
585 |
'Vendidero\\Germanized\\Shipments\\PDFSplitter' => array(
|
586 |
-
'version' => '2.1.
|
587 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/PDFSplitter.php'
|
588 |
),
|
589 |
'Vendidero\\Germanized\\Shipments\\ReturnReason' => array(
|
590 |
-
'version' => '2.1.
|
591 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/ReturnReason.php'
|
592 |
),
|
593 |
'Vendidero\\Germanized\\Shipments\\Rest\\ShipmentsController' => array(
|
594 |
-
'version' => '2.1.
|
595 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Rest/ShipmentsController.php'
|
596 |
),
|
597 |
'Vendidero\\Germanized\\Shipments\\Interfaces\\ShippingProviderAuto' => array(
|
598 |
-
'version' => '2.1.
|
599 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Interfaces/ShippingProviderAuto.php'
|
600 |
),
|
601 |
'Vendidero\\Germanized\\Shipments\\Interfaces\\ShippingProvider' => array(
|
602 |
-
'version' => '2.1.
|
603 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Interfaces/ShippingProvider.php'
|
604 |
),
|
605 |
'Vendidero\\Germanized\\Shipments\\Interfaces\\ShipmentReturnLabel' => array(
|
606 |
-
'version' => '2.1.
|
607 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Interfaces/ShipmentReturnLabel.php'
|
608 |
),
|
609 |
'Vendidero\\Germanized\\Shipments\\Interfaces\\ShipmentLabel' => array(
|
610 |
-
'version' => '2.1.
|
611 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Interfaces/ShipmentLabel.php'
|
612 |
),
|
613 |
'Vendidero\\Germanized\\Shipments\\Packing\\PackagingBox' => array(
|
614 |
-
'version' => '2.1.
|
615 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packing/PackagingBox.php'
|
616 |
),
|
617 |
'Vendidero\\Germanized\\Shipments\\Packing\\OrderItem' => array(
|
618 |
-
'version' => '2.1.
|
619 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packing/OrderItem.php'
|
620 |
),
|
621 |
'Vendidero\\Germanized\\Shipments\\Packing\\Helper' => array(
|
622 |
-
'version' => '2.1.
|
623 |
'path' => $baseDir . '/packages/woocommerce-germanized-shipments/src/Packing/Helper.php'
|
624 |
),
|
625 |
'Vendidero\\Germanized\\Shipments\\Packing\\ShipmentItem' => array(
|
626 |
-
'version' => '2.1.
|
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\
|
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\
|
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\
|
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\
|
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\
|
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\
|
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\
|
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\
|
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\
|
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\
|
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\
|
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\
|
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\
|
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\
|
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.
|
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.
|
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
|