Booster for WooCommerce - Version 4.8.0

Version Description

  • 18/03/2020 =
  • Fix - Functions - General - Fix php warning if WPML isn't active and 'WPML: Get Terms in All Languages' is enabled.
  • Fix - PRICES & CURRENCIES - Multicurrency Product Base Price - Remove "Third Party Price Filter Compatibility" option.
  • Fix - PRICES & CURRENCIES - Multicurrency Product Base Price - Fix Compatibility with Price Filter widget.
  • Fix - PRICES & CURRENCIES - Fix "WooCommerce Price Filter Compatibility" option.
  • Fix - PRODUCTS - Product Availability by Date - Fix wrong availabilities by always creating the date with DateTime::createFromFormat.
  • Fix - PRODUCTS - Product Addons - Fix warning when exporting 'wcj_product_addons_per_productenable_by_variation_%' meta.
  • Fix - PRODUCTS - Product Addons - Fix wrong 'wcj_product_addons_per_product_enable_byvariation_%' meta value after import.
  • Fix - SHIPPING & ORDERS - Order Custom Statuses - Add compatibility with "Load Modules on Init Hook" option.
  • Dev - CART & CHECKOUT - Checkout Custom Fields - Update fields on admin for subscription orders.
  • Dev - EMAILS & MISC. - Admin Tools - Add 'Enable Interface By User Roles' option allowing to disable the whole Booster admin interface for not selected roles.
  • Dev - EMAILS & MISC. - My Account - Add 'Endpoint' option to Custom Pages as a plus feature.
  • Dev - PAYMENT GATEWAYS - Gateways Fees and Discounts - Add 'Force Default Payment Gateway' option allowing to pre-set the default available payment gateway on cart and checkout pages.
  • Dev - PRICES & CURRENCIES - Global Discount - Add 'Compatibility With Products Shortcode' option, allowing the on_sale attribute to work.
  • Dev - PRICES & CURRENCIES - Prices and Currencies by Country - Add new compatibility option with native WooCommerce coupons.
  • Dev - PRODUCTS - Product Addons - Add %addon_title% template variable on Each Addon from Cart Template.
  • Dev - SHIPPING & ORDERS - Order Custom Statuses - Add "Remove Status Prefix" option added.
  • Dev - SHIPPING & ORDERS - Shipping Methods by Users - Add 'Multiple Role Checking' option for plus version.
  • WC tested up to: 4.0
Download this release

Release Info

Developer algoritmika
Plugin Icon 128x128 Booster for WooCommerce
Version 4.8.0
Comparing to
See all releases

Code changes from version 4.7.1 to 4.8.0

includes/admin/class-wcj-tools.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce Tools
4
  *
5
- * @version 3.5.3
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -17,24 +17,28 @@ class WCJ_Tools {
17
  */
18
  function __construct() {
19
  if ( is_admin() ) {
20
- add_action( 'admin_menu', array( $this, 'add_wcj_tools' ), 100 );
 
 
21
  }
22
  }
23
 
24
  /**
25
  * add_wcj_tools.
26
  *
27
- * @version 3.5.3
28
  */
29
  function add_wcj_tools() {
30
- add_submenu_page(
31
- 'woocommerce',
32
- __( 'Booster for WooCommerce Tools', 'woocommerce-jetpack' ),
33
- __( 'Booster Tools', 'woocommerce-jetpack' ),
34
- ( 'yes' === get_option( 'wcj_' . 'admin_tools' . '_enabled', 'no' ) && 'yes' === get_option( 'wcj_admin_tools_show_menus_to_admin_only', 'no' ) ? 'manage_options' : 'manage_woocommerce' ),
35
- 'wcj-tools',
36
- array( $this, 'create_tools_page' )
37
- );
 
 
38
  }
39
 
40
  /**
2
  /**
3
  * Booster for WooCommerce Tools
4
  *
5
+ * @version 4.8.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
17
  */
18
  function __construct() {
19
  if ( is_admin() ) {
20
+ if ( apply_filters( 'wcj_can_create_admin_interface', true ) ) {
21
+ add_action( 'admin_menu', array( $this, 'add_wcj_tools' ), 100 );
22
+ }
23
  }
24
  }
25
 
26
  /**
27
  * add_wcj_tools.
28
  *
29
+ * @version 4.8.0
30
  */
31
  function add_wcj_tools() {
32
+ if ( apply_filters( 'wcj_can_create_admin_interface', true ) ) {
33
+ add_submenu_page(
34
+ 'woocommerce',
35
+ __( 'Booster for WooCommerce Tools', 'woocommerce-jetpack' ),
36
+ __( 'Booster Tools', 'woocommerce-jetpack' ),
37
+ ( 'yes' === get_option( 'wcj_' . 'admin_tools' . '_enabled', 'no' ) && 'yes' === get_option( 'wcj_admin_tools_show_menus_to_admin_only', 'no' ) ? 'manage_options' : 'manage_woocommerce' ),
38
+ 'wcj-tools',
39
+ array( $this, 'create_tools_page' )
40
+ );
41
+ }
42
  }
43
 
44
  /**
includes/class-wcj-admin-tools.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Admin Tools
4
  *
5
- * @version 4.1.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -63,9 +63,35 @@ class WCJ_Admin_Tools extends WCJ_Module {
63
  if ( 0 != get_option( 'wcj_product_json_search_limit', 0 ) ) {
64
  add_filter( 'woocommerce_json_search_limit', array( $this, 'set_json_search_limit' ) );
65
  }
 
 
66
  }
67
  }
68
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
  /**
70
  * set_json_search_limit.
71
  *
2
  /**
3
  * Booster for WooCommerce - Module - Admin Tools
4
  *
5
+ * @version 4.8.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
63
  if ( 0 != get_option( 'wcj_product_json_search_limit', 0 ) ) {
64
  add_filter( 'woocommerce_json_search_limit', array( $this, 'set_json_search_limit' ) );
65
  }
66
+ // Enable interface by user role
67
+ add_filter( 'wcj_can_create_admin_interface', array( $this, 'enable_interface_by_user_roles' ) );
68
  }
69
  }
70
 
71
+ /**
72
+ * enable_interface_by_user_roles.
73
+ *
74
+ * @version 4.8.0
75
+ * @since 4.8.0
76
+ *
77
+ * @param $allowed
78
+ *
79
+ * @return bool
80
+ */
81
+ function enable_interface_by_user_roles( $allowed ) {
82
+ if ( empty( $disabled_roles = get_option( 'wcj_admin_tools_enable_interface_by_role', array() ) ) ) {
83
+ return $allowed;
84
+ }
85
+ $current_user_roles = wcj_get_current_user_all_roles();
86
+ if (
87
+ ! in_array( 'administrator', $current_user_roles ) &&
88
+ ! array_intersect( $disabled_roles, $current_user_roles )
89
+ ) {
90
+ $allowed = false;
91
+ }
92
+ return $allowed;
93
+ }
94
+
95
  /**
96
  * set_json_search_limit.
97
  *
includes/class-wcj-checkout-custom-fields.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Checkout Custom Fields
4
  *
5
- * @version 4.7.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -15,7 +15,7 @@ class WCJ_Checkout_Custom_Fields extends WCJ_Module {
15
  /**
16
  * Constructor.
17
  *
18
- * @version 4.5.0
19
  * @todo (maybe) check if `'wcj_checkout_custom_field_customer_meta_fields_' . $i` option should affect `add_default_checkout_custom_fields`
20
  */
21
  function __construct() {
@@ -53,6 +53,9 @@ class WCJ_Checkout_Custom_Fields extends WCJ_Module {
53
 
54
  // Update checkout fields from admin edit order
55
  add_action( 'save_post_shop_order', array( $this, 'update_custom_checkout_fields_order_meta' ) );
 
 
 
56
  }
57
  }
58
 
2
  /**
3
  * Booster for WooCommerce - Module - Checkout Custom Fields
4
  *
5
+ * @version 4.8.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
15
  /**
16
  * Constructor.
17
  *
18
+ * @version 4.8.0
19
  * @todo (maybe) check if `'wcj_checkout_custom_field_customer_meta_fields_' . $i` option should affect `add_default_checkout_custom_fields`
20
  */
21
  function __construct() {
53
 
54
  // Update checkout fields from admin edit order
55
  add_action( 'save_post_shop_order', array( $this, 'update_custom_checkout_fields_order_meta' ) );
56
+
57
+ // Update checkout fields from admin on a subscription order
58
+ add_action( 'save_post_shop_subscription', array( $this, 'update_custom_checkout_fields_order_meta' ) );
59
  }
60
  }
61
 
includes/class-wcj-global-discount.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Global Discount
4
  *
5
- * @version 4.0.0
6
  * @since 2.5.7
7
  * @author Algoritmika Ltd.
8
  */
@@ -13,10 +13,12 @@ if ( ! class_exists( 'WCJ_Global_Discount' ) ) :
13
 
14
  class WCJ_Global_Discount extends WCJ_Module {
15
 
 
 
16
  /**
17
  * Constructor.
18
  *
19
- * @version 4.0.0
20
  * @since 2.5.7
21
  * @todo fee instead of discount
22
  * @todo regular price coefficient
@@ -34,7 +36,195 @@ class WCJ_Global_Discount extends WCJ_Module {
34
  if ( 'yes' === get_option( 'wcj_global_discount_enabled_in_admin', 'no' ) || wcj_is_frontend() ) {
35
  wcj_add_change_price_hooks( $this, $this->price_hooks_priority, false );
36
  }
 
 
 
37
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  }
39
 
40
  /**
@@ -186,29 +376,45 @@ class WCJ_Global_Discount extends WCJ_Module {
186
  return $price; // no changes
187
  }
188
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
189
  /**
190
  * get_variation_prices_hash.
191
  *
192
- * @version 3.1.0
193
  * @since 2.5.7
194
  */
195
  function get_variation_prices_hash( $price_hash, $_product, $display ) {
196
- $wcj_global_discount_price_hash = array();
197
- $total_number = apply_filters( 'booster_option', 1, get_option( 'wcj_global_discount_groups_total_number', 1 ) );
198
- $wcj_global_discount_price_hash['total_number'] = $total_number;
199
- for ( $i = 1; $i <= $total_number; $i++ ) {
200
- $wcj_global_discount_price_hash[ 'enabled_' . $i ] = get_option( 'wcj_global_discount_sale_enabled_' . $i, 'yes' );
201
- $wcj_global_discount_price_hash[ 'type_' . $i ] = get_option( 'wcj_global_discount_sale_coefficient_type_' . $i, 'percent' );
202
- $wcj_global_discount_price_hash[ 'value_' . $i ] = get_option( 'wcj_global_discount_sale_coefficient_' . $i, 0 );
203
- $wcj_global_discount_price_hash[ 'scope_' . $i ] = get_option( 'wcj_global_discount_sale_product_scope_' . $i, 'all' );
204
- $wcj_global_discount_price_hash[ 'cats_in_' . $i ] = get_option( 'wcj_global_discount_sale_categories_incl_' . $i, '' );
205
- $wcj_global_discount_price_hash[ 'cats_ex_' . $i ] = get_option( 'wcj_global_discount_sale_categories_excl_' . $i, '' );
206
- $wcj_global_discount_price_hash[ 'tags_in_' . $i ] = get_option( 'wcj_global_discount_sale_tags_incl_' . $i, '' );
207
- $wcj_global_discount_price_hash[ 'tags_ex_' . $i ] = get_option( 'wcj_global_discount_sale_tags_excl_' . $i, '' );
208
- $wcj_global_discount_price_hash[ 'products_in_' . $i ] = get_option( 'wcj_global_discount_sale_products_incl_' . $i, '' );
209
- $wcj_global_discount_price_hash[ 'products_ex_' . $i ] = get_option( 'wcj_global_discount_sale_products_excl_' . $i, '' );
210
- }
211
- $price_hash['wcj_global_discount_price_hash'] = $wcj_global_discount_price_hash;
212
  return $price_hash;
213
  }
214
 
2
  /**
3
  * Booster for WooCommerce - Module - Global Discount
4
  *
5
+ * @version 4.8.0
6
  * @since 2.5.7
7
  * @author Algoritmika Ltd.
8
  */
13
 
14
  class WCJ_Global_Discount extends WCJ_Module {
15
 
16
+ private $wcj_global_options = array();
17
+
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 4.8.0
22
  * @since 2.5.7
23
  * @todo fee instead of discount
24
  * @todo regular price coefficient
36
  if ( 'yes' === get_option( 'wcj_global_discount_enabled_in_admin', 'no' ) || wcj_is_frontend() ) {
37
  wcj_add_change_price_hooks( $this, $this->price_hooks_priority, false );
38
  }
39
+
40
+ add_action( 'admin_init', array( $this, 'regenerate_wcj_sale_products_in_cache' ) );
41
+ add_filter( 'woocommerce_shortcode_products_query', array( $this, 'add_wcj_sale_ids_to_products_shortcode' ), 10, 3 );
42
  }
43
+
44
+ }
45
+
46
+ /**
47
+ * add_wcj_sale_ids_to_products_shortcode.
48
+ *
49
+ * @version 4.8.0
50
+ * @since 4.8.0
51
+ *
52
+ * @param $args
53
+ * @param $atts
54
+ * @param $type
55
+ *
56
+ * @return mixed
57
+ */
58
+ function add_wcj_sale_ids_to_products_shortcode( $args, $atts, $type ) {
59
+ if (
60
+ 'sale_products' != $type ||
61
+ 'yes' != get_option( 'wcj_global_discount_products_shortcode_compatibility', 'no' )
62
+ ) {
63
+ return $args;
64
+ }
65
+
66
+ $prev_post__in = isset( $args['post__in'] ) ? $args['post__in'] : array();
67
+ $args['post__in'] = array_merge( $prev_post__in, $this->get_wcj_sale_products() );
68
+ return $args;
69
+ }
70
+
71
+ /**
72
+ * regenerate_wcj_sale_products_in_cache.
73
+ *
74
+ * @version 4.8.0
75
+ * @since 4.8.0
76
+ */
77
+ function regenerate_wcj_sale_products_in_cache() {
78
+ if (
79
+ 'yes' != get_option( 'wcj_global_discount_products_shortcode_compatibility', 'no' ) ||
80
+ ! isset( $_REQUEST['page'] ) || 'wc-settings' !== $_REQUEST['page'] ||
81
+ ! isset( $_REQUEST['tab'] ) || 'jetpack' !== $_REQUEST['tab'] ||
82
+ ! isset( $_REQUEST['wcj-cat'] ) || 'prices_and_currencies' !== $_REQUEST['wcj-cat'] ||
83
+ ! isset( $_REQUEST['section'] ) || 'global_discount' !== $_REQUEST['section'] ||
84
+ ! isset( $_POST['save'] )
85
+ ) {
86
+ return;
87
+ }
88
+ $this->clear_wcj_sale_products_from_cache();
89
+ $this->get_wcj_sale_products();
90
+ }
91
+
92
+ /**
93
+ * get_wcj_sale_products.
94
+ *
95
+ * @version 4.8.0
96
+ * @since 4.8.0
97
+ *
98
+ * @return array|mixed
99
+ */
100
+ function get_wcj_sale_products() {
101
+ $transient_name = 'wcj_global_discount_sale_products';
102
+ $sale_products = get_transient( $transient_name );
103
+ if ( false === $sale_products ) {
104
+ $args = array(
105
+ 'post_type' => 'product',
106
+ 'posts_per_page' => - 1,
107
+ 'fields' => 'ids',
108
+ );
109
+ $total_number = apply_filters( 'booster_option', 1, get_option( 'wcj_global_discount_groups_total_number', 1 ) );
110
+ for ( $i = 1; $i <= $total_number; $i ++ ) {
111
+ $enabled = get_option( 'wcj_global_discount_sale_enabled_' . $i, 'yes' );
112
+ if ( 'yes' !== $enabled ) {
113
+ continue;
114
+ }
115
+
116
+ // Categories
117
+ $include_cats = get_option( 'wcj_global_discount_sale_categories_incl_' . $i, array() );
118
+ $exclude_cats = get_option( 'wcj_global_discount_sale_categories_excl_' . $i, array() );
119
+ $cats = array();
120
+ if ( ! empty( $include_cats ) || ! empty( $exclude_cats ) ) {
121
+ $cats = array(
122
+ 'relation' => 'AND',
123
+ );
124
+ if ( ! empty( $include_cats ) ) {
125
+ $cats[] = array(
126
+ 'taxonomy' => 'product_cat',
127
+ 'field' => 'term_id',
128
+ 'include_children' => false,
129
+ 'terms' => $include_cats
130
+ );
131
+ }
132
+ if ( ! empty( $exclude_cats ) ) {
133
+ $cats[] = array(
134
+ 'taxonomy' => 'product_cat',
135
+ 'field' => 'term_id',
136
+ 'include_children' => false,
137
+ 'terms' => $exclude_cats,
138
+ 'operator' => 'NOT IN'
139
+ );
140
+ }
141
+ }
142
+
143
+ // Tags
144
+ $include_tags = get_option( 'wcj_global_discount_sale_tags_incl_' . $i, array() );
145
+ $exclude_tags = get_option( 'wcj_global_discount_sale_tags_excl_' . $i, array() );
146
+ $tags = array();
147
+ if ( ! empty( $include_tags ) || ! empty( $exclude_tags ) ) {
148
+ $tags = array(
149
+ 'relation' => 'AND',
150
+ );
151
+ if ( ! empty( $include_tags ) ) {
152
+ $tags[] = array(
153
+ 'taxonomy' => 'product_tag',
154
+ 'field' => 'term_id',
155
+ 'terms' => $include_tags
156
+ );
157
+ }
158
+ if ( ! empty( $exclude_tags ) ) {
159
+ $tags[] = array(
160
+ 'taxonomy' => 'product_tag',
161
+ 'field' => 'term_id',
162
+ 'terms' => $exclude_tags,
163
+ 'operator' => 'NOT IN'
164
+ );
165
+ }
166
+ }
167
+
168
+ // Tax Query
169
+ if ( ! empty( $cats ) || ! empty( $tags ) ) {
170
+ $args['tax_query'] = array(
171
+ 'relation' => 'AND'
172
+ );
173
+ if ( ! empty( $cats ) ) {
174
+ $args['tax_query'][] = $cats;
175
+ }
176
+ if ( ! empty( $tags ) ) {
177
+ $args['tax_query'][] = $tags;
178
+ }
179
+ }
180
+
181
+ // Products
182
+ $products_incl = get_option( 'wcj_global_discount_sale_products_incl_' . $i, array() );
183
+ $products_excl = get_option( 'wcj_global_discount_sale_products_excl_' . $i, array() );
184
+ if ( ! empty( $products_incl ) || ! empty( $products_excl ) ) {
185
+ if ( ! empty( $products_incl ) ) {
186
+ $args['post__in'] = $products_incl;
187
+ }
188
+ if ( ! empty( $products_excl ) ) {
189
+ $args['post__not_in'] = $products_excl;
190
+ }
191
+ }
192
+
193
+ // Scope
194
+ $scope = get_option( 'wcj_global_discount_sale_product_scope_' . $i, 'all' );
195
+ if ( 'all' != $scope ) {
196
+ $wc_sale_products = wc_get_product_ids_on_sale();
197
+ if ( 'only_on_sale' == $scope ) {
198
+ $args['post__in'] = $wc_sale_products;
199
+ if ( empty( $wc_sale_products ) ) {
200
+ $args['post_type'] = 'do_not_search';
201
+ }
202
+ } elseif ( 'only_not_on_sale' == $scope ) {
203
+ $args['post__not_in'] = $wc_sale_products;
204
+ }
205
+ }
206
+
207
+ $query = new WP_Query( $args );
208
+ $sale_products = array_unique( $query->posts );
209
+ $prev_group_sale_products = get_transient( $transient_name );
210
+ if ( false !== $prev_group_sale_products ) {
211
+ $sale_products = array_unique( array_merge( $prev_group_sale_products, $sale_products ) );
212
+ }
213
+
214
+ set_transient( $transient_name, $sale_products, YEAR_IN_SECONDS );
215
+ }
216
+ }
217
+ return $sale_products;
218
+ }
219
+
220
+ /**
221
+ * clear_wcj_sale_products_from_cache.
222
+ *
223
+ * @version 4.8.0
224
+ * @since 4.8.0
225
+ */
226
+ function clear_wcj_sale_products_from_cache() {
227
+ delete_transient( 'wcj_global_discount_sale_products' );
228
  }
229
 
230
  /**
376
  return $price; // no changes
377
  }
378
 
379
+ /**
380
+ * get_global_discount_options.
381
+ *
382
+ * @version 4.8.0
383
+ * @since 4.8.0
384
+ *
385
+ * @return array
386
+ */
387
+ function get_global_discount_options() {
388
+ $options = $this->wcj_global_options;
389
+ if ( empty( $options ) ) {
390
+ $total_number = apply_filters( 'booster_option', 1, get_option( 'wcj_global_discount_groups_total_number', 1 ) );
391
+ $options['total_number'] = $total_number;
392
+ for ( $i = 1; $i <= $total_number; $i ++ ) {
393
+ $options['enabled'][ $i ] = get_option( 'wcj_global_discount_sale_enabled_' . $i, 'yes' );
394
+ $options['type'][ $i ] = get_option( 'wcj_global_discount_sale_coefficient_type_' . $i, 'percent' );
395
+ $options['value'][ $i ] = get_option( 'wcj_global_discount_sale_coefficient_' . $i, 0 );
396
+ $options['scope'][ $i ] = get_option( 'wcj_global_discount_sale_product_scope_' . $i, 'all' );
397
+ $options['cats_in'][ $i ] = get_option( 'wcj_global_discount_sale_categories_incl_' . $i, array() );
398
+ $options['cats_ex'][ $i ] = get_option( 'wcj_global_discount_sale_categories_excl_' . $i, array() );
399
+ $options['tags_in'][ $i ] = get_option( 'wcj_global_discount_sale_tags_incl_' . $i, array() );
400
+ $options['tags_ex'][ $i ] = get_option( 'wcj_global_discount_sale_tags_excl_' . $i, array() );
401
+ $options['products_in'][ $i ] = get_option( 'wcj_global_discount_sale_products_incl_' . $i, array() );
402
+ $options['products_ex'][ $i ] = get_option( 'wcj_global_discount_sale_products_excl_' . $i, array() );
403
+ }
404
+ $this->wcj_global_options = $options;
405
+ }
406
+ return $options;
407
+ }
408
+
409
  /**
410
  * get_variation_prices_hash.
411
  *
412
+ * @version 4.8.0
413
  * @since 2.5.7
414
  */
415
  function get_variation_prices_hash( $price_hash, $_product, $display ) {
416
+ $options = $this->get_global_discount_options();
417
+ $price_hash['wcj_global_discount_price_hash'] = $options;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
418
  return $price_hash;
419
  }
420
 
includes/class-wcj-multicurrency-product-base-price.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Multicurrency Product Base Price
4
  *
5
- * @version 4.7.1
6
  * @since 2.4.8
7
  * @author Algoritmika Ltd.
8
  */
@@ -48,47 +48,109 @@ if ( ! class_exists( 'WCJ_Multicurrency_Base_Price' ) ) :
48
  /**
49
  * Adds Compatibility with WooCommerce Price Filter Widget.
50
  *
51
- * @version 4.4.0
52
  * @since 4.3.1
53
  */
54
  function handle_price_filter_widget_compatibility() {
55
  add_action( 'updated_post_meta', array( $this, 'update_base_price_meta_on_price_update' ), 10, 3 );
56
  add_action( 'updated_post_meta', array( $this, 'update_base_price_meta_on_base_price_currency_update' ), 10, 3 );
57
  add_action( 'added_post_meta', array( $this, 'update_base_price_meta_on_base_price_currency_update' ), 10, 3 );
58
- add_filter( 'woocommerce_product_query_meta_query', array( $this, 'add_base_price_on_product_meta_query' ) );
59
  add_action( 'updated_option', array( $this, 'update_products_base_price_on_exchange_rate_change' ), 10, 3 );
60
  add_action( 'updated_post_meta', array( $this, 'handle_price_filter_compatibility_flag_on_base_price_update' ), 10, 4 );
61
  add_action( 'updated_post_meta', array( $this, 'handle_price_filter_compatibility_flag_on_base_price_currency_update' ), 10, 4 );
62
  add_filter( 'woocommerce_price_filter_sql', array( $this, 'change_woocommerce_price_filter_sql' ) );
63
-
64
- // Compatibility with third party price filters
65
- if ( 'yes' === get_option( 'wcj_multicurrency_base_price_advanced_price_filter_comp_tp', 'no' ) ) {
66
- add_filter( 'query', array( $this, 'change_third_party_price_filter_sql' ) );
67
- add_filter( 'prdctfltr_meta_query', array( $this, 'add_base_price_on_product_meta_query' ) );
68
- }
69
  }
70
 
71
  /**
72
- * Changes the sql from third party price filters comparing with the same sql from WooCommerce price filter.
73
- * This is only necessary due to some third party plugin not use the 'woocommerce_price_filter_sql' hook
74
  *
75
- * @version 4.4.0
76
- * @since 4.4.0
77
  *
78
- * @see WC_Widget_Price_Filter::get_filtered_price()
79
- * @param $sql
80
  *
81
- * @return string
82
  */
83
- public function change_third_party_price_filter_sql( $sql ) {
84
  if (
85
- is_admin() ||
86
- ( false === strpos( $sql, "SELECT min( FLOOR( price_meta.meta_value ) ) as min_price" ) && false === strpos( $sql, "max( CEILING( price_meta.meta_value ) ) as max_price" ) )
 
87
  ) {
88
- return $sql;
89
  }
90
- $sql = $this->change_woocommerce_price_filter_sql( $sql );
91
- return $sql;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
  }
93
 
94
  /**
@@ -96,7 +158,7 @@ if ( ! class_exists( 'WCJ_Multicurrency_Base_Price' ) ) :
96
  *
97
  * All in all, it creates the min and max from '_price' meta, and from '_wcj_multicurrency_base_price' if there is the '_wcj_multicurrency_base_price_comp_pf' meta
98
  *
99
- * @version 4.4.0
100
  * @since 4.3.1
101
  *
102
  * @see WC_Widget_Price_Filter::get_filtered_price()
@@ -108,7 +170,6 @@ if ( ! class_exists( 'WCJ_Multicurrency_Base_Price' ) ) :
108
  if (
109
  is_admin() ||
110
  ( ! is_shop() && ! is_product_taxonomy() ) ||
111
- ! wc()->query->get_main_query()->post_count ||
112
  'no' === get_option( 'wcj_multicurrency_base_price_advanced_price_filter_comp', 'no' )
113
  ) {
114
  return $sql;
@@ -194,51 +255,6 @@ if ( ! class_exists( 'WCJ_Multicurrency_Base_Price' ) ) :
194
  $this->update_wcj_multicurrency_base_price_meta( $product );
195
  }
196
 
197
- /**
198
- * Adds compatibility with price filter adding '_wcj_multicurrency_base_price' on product meta query.
199
- * It only compares products with '_wcj_multicurrency_base_price_comp_pf' meta
200
- *
201
- * @version 4.7.1
202
- * @since 4.3.1
203
- *
204
- * @param $query
205
- *
206
- * @return mixed
207
- */
208
- function add_base_price_on_product_meta_query( $query ) {
209
- if (
210
- ! isset( $query['price_filter'] ) || empty( $query['price_filter'] ) ||
211
- 'no' === get_option( 'wcj_multicurrency_base_price_advanced_price_filter_comp', 'no' )
212
- ) {
213
- return $query;
214
- }
215
- wcj_remove_class_filter( 'posts_clauses', 'WC_Query', 'price_filter_post_clauses' );
216
- $price_filter = $price_filter_wcj = $query['price_filter'];
217
- $price_filter_wcj['key'] = '_wcj_multicurrency_base_price';
218
- $price_filter_wcj['wcj_mcpb_price_filter'] = 1;
219
- unset( $query['price_filter'] );
220
- $query['price_filter'] = array(
221
- 'relation' => 'OR',
222
- array(
223
- 'relation' => 'AND',
224
- $price_filter,
225
- array(
226
- 'key' => '_wcj_multicurrency_base_price_comp_pf',
227
- 'compare' => 'NOT EXISTS',
228
- )
229
- ),
230
- array(
231
- 'relation' => 'AND',
232
- $price_filter_wcj,
233
- array(
234
- 'key' => '_wcj_multicurrency_base_price_comp_pf',
235
- 'compare' => 'EXISTS',
236
- )
237
- )
238
- );
239
- return $query;
240
- }
241
-
242
  /**
243
  * Updates '_wcj_multicurrency_base_price' meta on products by currency when exchange rate changes inside 'Multicurrency Product Base Price' module.
244
  *
2
  /**
3
  * Booster for WooCommerce - Module - Multicurrency Product Base Price
4
  *
5
+ * @version 4.8.0
6
  * @since 2.4.8
7
  * @author Algoritmika Ltd.
8
  */
48
  /**
49
  * Adds Compatibility with WooCommerce Price Filter Widget.
50
  *
51
+ * @version 4.8.0
52
  * @since 4.3.1
53
  */
54
  function handle_price_filter_widget_compatibility() {
55
  add_action( 'updated_post_meta', array( $this, 'update_base_price_meta_on_price_update' ), 10, 3 );
56
  add_action( 'updated_post_meta', array( $this, 'update_base_price_meta_on_base_price_currency_update' ), 10, 3 );
57
  add_action( 'added_post_meta', array( $this, 'update_base_price_meta_on_base_price_currency_update' ), 10, 3 );
 
58
  add_action( 'updated_option', array( $this, 'update_products_base_price_on_exchange_rate_change' ), 10, 3 );
59
  add_action( 'updated_post_meta', array( $this, 'handle_price_filter_compatibility_flag_on_base_price_update' ), 10, 4 );
60
  add_action( 'updated_post_meta', array( $this, 'handle_price_filter_compatibility_flag_on_base_price_currency_update' ), 10, 4 );
61
  add_filter( 'woocommerce_price_filter_sql', array( $this, 'change_woocommerce_price_filter_sql' ) );
62
+ add_action( 'woocommerce_product_query', array( $this, 'modify_default_price_filter_hook' ), PHP_INT_MAX );
 
 
 
 
 
63
  }
64
 
65
  /**
66
+ * modify_default_price_filter_hook.
 
67
  *
68
+ * @version 4.8.0
69
+ * @since 4.8.0
70
  *
71
+ * @param $query
 
72
  *
73
+ * @return mixed
74
  */
75
+ function modify_default_price_filter_hook( $query ) {
76
  if (
77
+ 'no' === get_option( 'wcj_multicurrency_base_price_advanced_price_filter_comp', 'no' ) ||
78
+ ! isset( $_GET['min_price'] ) ||
79
+ ! isset( $_GET['max_price'] )
80
  ) {
81
+ return $query;
82
  }
83
+
84
+ // Remove Price Filter Meta Query
85
+ $meta_query = $query->get( 'meta_query' );
86
+ $meta_query = empty( $meta_query ) ? array() : $meta_query;
87
+ foreach ( $meta_query as $key => $value ) {
88
+ if ( is_array( $value ) ) {
89
+ if ( isset( $value['price_filter'] ) ) {
90
+ unset( $meta_query[ $key ]['price_filter'] );
91
+ }
92
+ }
93
+ }
94
+ $query->set( 'meta_query', $meta_query );
95
+
96
+ // Remove Price Filter Hooks
97
+ wcj_remove_class_filter( 'posts_clauses', 'WC_Query', 'price_filter_post_clauses' );
98
+
99
+ // Remove Price Filter hooks from "Product Filter for WooCommerce" plugin
100
+ if ( class_exists( 'XforWC_Product_Filters_Frontend' ) ) {
101
+ remove_filter( 'posts_clauses', 'XforWC_Product_Filters_Frontend::price_filter_post_clauses', 10, 2 );
102
+ }
103
+
104
+ // Add Price Filter Hook
105
+ add_filter( 'posts_clauses', array( $this, 'price_filter_post_clauses' ), 10, 2 );
106
+ }
107
+
108
+ /**
109
+ * price_filter_post_clauses.
110
+ *
111
+ * @version 4.8.0
112
+ * @since 4.8.0
113
+ *
114
+ * @see WC_Query::price_filter_post_clauses
115
+ *
116
+ * @param $args
117
+ * @param $wp_query
118
+ *
119
+ * @return mixed
120
+ */
121
+ function price_filter_post_clauses( $args, $wp_query ) {
122
+ global $wpdb;
123
+ if ( ! $wp_query->is_main_query() || ( ! isset( $_GET['max_price'] ) && ! isset( $_GET['min_price'] ) ) ) {
124
+ return $args;
125
+ }
126
+ $current_min_price = isset( $_GET['min_price'] ) ? floatval( wp_unslash( $_GET['min_price'] ) ) : 0; // WPCS: input var ok, CSRF ok.
127
+ $current_max_price = isset( $_GET['max_price'] ) ? floatval( wp_unslash( $_GET['max_price'] ) ) : PHP_INT_MAX; // WPCS: input var ok, CSRF ok.
128
+ if ( wc_tax_enabled() && 'incl' === get_option( 'woocommerce_tax_display_shop' ) && ! wc_prices_include_tax() ) {
129
+ $tax_class = apply_filters( 'woocommerce_price_filter_widget_tax_class', '' ); // Uses standard tax class.
130
+ $tax_rates = WC_Tax::get_rates( $tax_class );
131
+ if ( $tax_rates ) {
132
+ $current_min_price -= WC_Tax::get_tax_total( WC_Tax::calc_inclusive_tax( $current_min_price, $tax_rates ) );
133
+ $current_max_price -= WC_Tax::get_tax_total( WC_Tax::calc_inclusive_tax( $current_max_price, $tax_rates ) );
134
+ }
135
+ }
136
+ $args['where'] .= $wpdb->prepare(
137
+ "
138
+ AND {$wpdb->posts}.ID IN (
139
+ SELECT p.ID
140
+ FROM {$wpdb->posts} as p
141
+ LEFT JOIN {$wpdb->postmeta} as pm ON p.ID = pm.post_id AND pm.meta_key = '_wcj_multicurrency_base_price'
142
+ LEFT JOIN {$wpdb->postmeta} as pm2 ON (pm2.post_id=p.ID) AND (pm2.meta_key = '_price')
143
+ WHERE p.post_type = 'product' AND p.post_status = 'publish'
144
+ AND ( (pm.meta_value <= %f AND pm.meta_value >= %f) OR (pm2.meta_value <= %f AND pm2.meta_value >= %f) )
145
+ GROUP BY p.ID
146
+ )
147
+ ",
148
+ $current_max_price,
149
+ $current_min_price,
150
+ $current_max_price,
151
+ $current_min_price
152
+ );
153
+ return $args;
154
  }
155
 
156
  /**
158
  *
159
  * All in all, it creates the min and max from '_price' meta, and from '_wcj_multicurrency_base_price' if there is the '_wcj_multicurrency_base_price_comp_pf' meta
160
  *
161
+ * @version 4.8.0
162
  * @since 4.3.1
163
  *
164
  * @see WC_Widget_Price_Filter::get_filtered_price()
170
  if (
171
  is_admin() ||
172
  ( ! is_shop() && ! is_product_taxonomy() ) ||
 
173
  'no' === get_option( 'wcj_multicurrency_base_price_advanced_price_filter_comp', 'no' )
174
  ) {
175
  return $sql;
255
  $this->update_wcj_multicurrency_base_price_meta( $product );
256
  }
257
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
258
  /**
259
  * Updates '_wcj_multicurrency_base_price' meta on products by currency when exchange rate changes inside 'Multicurrency Product Base Price' module.
260
  *
includes/class-wcj-my-account.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - My Account
4
  *
5
- * @version 4.5.0
6
  * @since 2.9.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -11,446 +11,521 @@ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
11
 
12
  if ( ! class_exists( 'WCJ_My_Account' ) ) :
13
 
14
- class WCJ_My_Account extends WCJ_Module {
15
-
16
- /**
17
- * Constructor.
18
- *
19
- * @version 4.5.0
20
- * @since 2.9.0
21
- * @todo [dev] Custom Menu Pages: add "Type" option with values: "param" (i.e. as it is now) or "endpoint"
22
- * @todo [dev] Custom Menu Pages: deprecate "Add Custom Menu Items" (and add "link" value in "Type" options)
23
- */
24
- function __construct() {
25
-
26
- $this->id = 'my_account';
27
- $this->short_desc = __( 'My Account', 'woocommerce-jetpack' );
28
- $this->desc = __( 'WooCommerce "My Account" page customization.', 'woocommerce-jetpack' );
29
- $this->link_slug = 'woocommerce-my-account';
30
- parent::__construct();
31
-
32
- $this->account_menu_items = array(
33
- 'dashboard' => __( 'Dashboard', 'woocommerce' ),
34
- 'orders' => __( 'Orders', 'woocommerce' ),
35
- 'downloads' => __( 'Downloads', 'woocommerce' ),
36
- 'edit-address' => __( 'Addresses', 'woocommerce' ),
37
- 'payment-methods' => __( 'Payment methods', 'woocommerce' ),
38
- 'edit-account' => __( 'Account details', 'woocommerce' ),
39
- 'customer-logout' => __( 'Logout', 'woocommerce' ),
40
- );
41
- $this->account_menu_endpoints = array(
42
- 'orders' => __( 'Orders', 'woocommerce' ),
43
- 'view-order' => __( 'View order', 'woocommerce' ),
44
- 'downloads' => __( 'Downloads', 'woocommerce' ),
45
- 'edit-account' => __( 'Edit account', 'woocommerce' ) . ' (' . __( 'Account details', 'woocommerce' ) . ')',
46
- 'edit-address' => __( 'Addresses', 'woocommerce' ),
47
- 'payment-methods' => __( 'Payment methods', 'woocommerce' ),
48
- 'lost-password' => __( 'Lost password', 'woocommerce' ),
49
- 'customer-logout' => __( 'Logout', 'woocommerce' ),
50
- );
51
- $this->menu_order_default = implode( PHP_EOL, array_keys( $this->account_menu_items ) );
52
-
53
- if ( $this->is_enabled() ) {
54
- add_filter( 'woocommerce_my_account_my_orders_actions', array( $this, 'maybe_add_my_account_order_actions' ), 10, 2 );
55
- add_action( 'wp_footer', array( $this, 'maybe_add_js_conformation' ) );
56
- add_action( 'init', array( $this, 'process_woocommerce_mark_order_status' ) );
57
- // Custom pages
58
- if ( 'yes' === get_option( 'wcj_my_account_custom_pages_enabled', 'no' ) ) {
59
- add_action( 'woocommerce_account_' . 'page' . '_endpoint', array( $this, 'customize_dashboard' ), PHP_INT_MAX );
60
- add_filter( 'the_title', array( $this, 'set_custom_page_title' ), PHP_INT_MAX );
61
- add_filter( 'woocommerce_account_menu_items', array( $this, 'add_custom_page_menu_item' ), PHP_INT_MAX );
62
- add_filter( 'woocommerce_get_endpoint_url', array( $this, 'set_custom_page_url' ), PHP_INT_MAX, 4 );
63
- }
64
- // Custom info
65
- if ( 'yes' === get_option( 'wcj_my_account_custom_info_enabled', 'no' ) ) {
66
- $total_number = apply_filters( 'booster_option', 1, get_option( 'wcj_my_account_custom_info_total_number', 1 ) );
67
- for ( $i = 1; $i <= $total_number; $i++ ) {
68
- add_action(
69
- get_option( 'wcj_my_account_custom_info_hook_' . $i, 'woocommerce_account_dashboard' ),
70
- array( $this, 'add_my_account_custom_info' ),
71
- get_option( 'wcj_my_account_custom_info_priority_' . $i, 10 )
72
- );
73
  }
74
- }
75
- // Registration extra fields
76
- if ( 'yes' === get_option( 'wcj_my_account_registration_extra_fields_user_role_enabled', 'no' ) ) {
77
- add_action( 'woocommerce_register_form', array( $this, 'add_registration_extra_fields' ), PHP_INT_MAX );
78
- add_action( 'woocommerce_created_customer', array( $this, 'process_registration_extra_fields' ), PHP_INT_MAX, 3 );
79
- }
80
- // Menu & Endpoints
81
- if ( 'yes' === get_option( 'wcj_my_account_menu_customize_enabled', 'no' ) ) {
82
- foreach ( $this->account_menu_endpoints as $account_menu_endpoint_id => $account_menu_endpoint_title ) {
83
- add_filter( 'woocommerce_endpoint_' . $account_menu_endpoint_id . '_title', array( $this, 'customize_endpoint_title' ), PHP_INT_MAX, 2 );
 
 
 
 
 
84
  }
85
- add_filter( 'woocommerce_account_menu_items', array( $this, 'customize_menu' ), PHP_INT_MAX );
86
- if ( 'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_my_account_menu_order_custom_items_enabled', 'no' ) ) ) {
87
- add_filter( 'woocommerce_get_endpoint_url', array( $this, 'customize_menu_custom_endpoints' ), PHP_INT_MAX, 4 );
 
 
 
 
 
 
 
 
 
 
88
  }
89
  }
90
- // Dashboard customization
91
- if ( 'yes' === get_option( 'wcj_my_account_custom_dashboard_enabled', 'no' ) ) {
92
- add_action( 'woocommerce_account_' . 'page' . '_endpoint', array( $this, 'customize_dashboard' ), PHP_INT_MAX );
 
 
 
 
 
 
 
 
 
 
 
93
  }
94
  }
95
- }
96
 
97
- /**
98
- * get_custom_pages.
99
- *
100
- * @version 4.3.0
101
- * @since 4.3.0
102
- * @todo [dev] customizable ID (i.e. instead of `sanitize_title( $title[ $i ] )`)
103
- */
104
- function get_custom_pages() {
105
- if ( isset( $this->custom_pages ) ) {
106
- return $this->custom_pages;
 
 
 
 
 
107
  }
108
- $this->custom_pages = array();
109
- $title = get_option( 'wcj_my_account_custom_pages_title', array() );
110
- $content = get_option( 'wcj_my_account_custom_pages_content', array() );
111
- for ( $i = 1; $i <= apply_filters( 'booster_option', 1, get_option( 'wcj_my_account_custom_pages_total_number', 1 ) ); $i++ ) {
112
- if ( ! empty( $title[ $i ] ) && ! empty( $content[ $i ] ) ) {
113
- $this->custom_pages[ sanitize_title( $title[ $i ] ) ] = array( 'title' => $title[ $i ], 'content' => $content[ $i ] );
 
 
 
 
 
114
  }
 
 
 
 
 
 
 
 
 
 
 
115
  }
116
- return $this->custom_pages;
117
- }
118
 
119
- /**
120
- * set_custom_page_title.
121
- *
122
- * @version 4.5.0
123
- * @since 4.3.0
124
- */
125
- function set_custom_page_title( $title ) {
126
- if (
127
- ! isset( $_GET['section'] ) ||
128
- is_admin() ||
129
- ! in_the_loop() ||
130
- ! is_account_page()
131
- ) {
 
 
 
 
 
 
 
 
132
  return $title;
133
  }
134
- if ( ! isset( $this->custom_pages ) ) {
135
- $this->get_custom_pages();
136
- }
137
- $endpoint = $_GET['section'];
138
- return ( isset( $this->custom_pages[ $endpoint ] ) ? $this->custom_pages[ $endpoint ]['title'] : $title );
139
 
140
- return $title;
141
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
142
 
143
- /**
144
- * set_custom_page_url.
145
- *
146
- * @version 4.3.0
147
- * @since 4.3.0
148
- * @todo [dev] (maybe) customizable `section` (e.g. `wcj-section`)
149
- */
150
- function set_custom_page_url( $url, $endpoint, $value, $permalink ) {
151
- if ( ! isset( $this->custom_pages ) ) {
152
- $this->get_custom_pages();
 
 
153
  }
154
- return ( isset( $this->custom_pages[ $endpoint ] ) && ( $myaccount_page_id = get_option( 'woocommerce_myaccount_page_id' ) ) ?
155
- add_query_arg( 'section', $endpoint, get_permalink( $myaccount_page_id ) ) : $url );
156
- }
157
 
158
- /**
159
- * add_custom_page_menu_item.
160
- *
161
- * @version 4.3.0
162
- * @since 4.3.0
163
- */
164
- function add_custom_page_menu_item( $items ) {
165
- foreach ( $this->get_custom_pages() as $custom_menu_page_id => $custom_menu_page_data ) {
166
- $items[ $custom_menu_page_id ] = $custom_menu_page_data['title'];
 
 
 
167
  }
168
- return $items;
169
- }
170
 
171
- /**
172
- * customize_menu_custom_endpoints.
173
- *
174
- * @version 3.8.0
175
- * @since 3.8.0
176
- */
177
- function customize_menu_custom_endpoints( $url, $endpoint, $value, $permalink ) {
178
- $custom_items = array_map( 'trim', explode( PHP_EOL, get_option( 'wcj_my_account_menu_order_custom_items', '' ) ) );
179
- foreach ( $custom_items as $custom_item ) {
180
- $parts = array_map( 'trim', explode( '|', $custom_item, 3 ) );
181
- if ( 3 === count( $parts ) && $parts[0] === $endpoint ) {
182
- return $parts[2];
183
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
184
  }
185
- return $url;
186
- }
187
 
188
- /**
189
- * customize_dashboard.
190
- *
191
- * @version 4.3.0
192
- * @since 3.8.0
193
- * @see woocommerce/templates/myaccount/dashboard.php
194
- */
195
- function customize_dashboard( $value ) {
196
-
197
- // Custom pages
198
- if ( 'yes' === get_option( 'wcj_my_account_custom_pages_enabled', 'no' ) ) {
199
- if ( isset( $_GET['section'] ) ) {
200
- if ( ! isset( $this->custom_pages ) ) {
201
- $this->get_custom_pages();
 
 
 
 
 
 
 
 
 
 
202
  }
203
- if ( isset( $this->custom_pages[ $_GET['section'] ] ) ) {
204
- echo do_shortcode( $this->custom_pages[ $_GET['section'] ]['content'] );
 
 
205
  return;
206
  }
207
  }
208
- if ( 'no' === get_option( 'wcj_my_account_custom_dashboard_enabled', 'no' ) ) {
209
- wc_get_template( 'myaccount/dashboard.php', array(
210
- 'current_user' => get_user_by( 'id', get_current_user_id() ),
211
- ) );
212
- return;
 
213
  }
214
- }
215
 
216
- // Dashboard customization
217
- $current_user = get_user_by( 'id', get_current_user_id() );
 
 
 
 
 
 
 
 
218
 
219
- if ( '' != ( $custom_content = get_option( 'wcj_my_account_custom_dashboard_content', '' ) ) ) {
220
- echo do_shortcode( $custom_content );
221
- }
 
 
 
 
 
 
 
222
 
223
- if ( 'no' === get_option( 'wcj_my_account_custom_dashboard_hide_hello', 'no' ) ) {
224
- echo '<p>';
225
- /* translators: 1: user display name 2: logout url */
226
- printf(
227
- __( 'Hello %1$s (not %1$s? <a href="%2$s">Log out</a>)', 'woocommerce' ),
228
- '<strong>' . esc_html( $current_user->display_name ) . '</strong>',
229
- esc_url( wc_logout_url( wc_get_page_permalink( 'myaccount' ) ) )
230
- );
231
- echo '</p>';
232
- }
 
 
 
 
 
 
 
 
 
 
233
 
234
- if ( 'no' === get_option( 'wcj_my_account_custom_dashboard_hide_info', 'no' ) ) {
235
- echo '<p>';
236
- printf(
237
- __( 'From your account dashboard you can view your <a href="%1$s">recent orders</a>, manage your <a href="%2$s">shipping and billing addresses</a>, and <a href="%3$s">edit your password and account details</a>.', 'woocommerce' ),
238
- esc_url( wc_get_endpoint_url( 'orders' ) ),
239
- esc_url( wc_get_endpoint_url( 'edit-address' ) ),
240
- esc_url( wc_get_endpoint_url( 'edit-account' ) )
241
- );
242
- echo '</p>';
243
  }
244
 
245
  /**
246
- * My Account dashboard.
247
  *
248
- * @since 2.6.0
 
 
 
 
 
249
  */
250
- do_action( 'woocommerce_account_dashboard' );
251
-
252
- /**
253
- * Deprecated woocommerce_before_my_account action.
254
- *
255
- * @deprecated 2.6.0
256
- */
257
- do_action( 'woocommerce_before_my_account' );
258
 
259
  /**
260
- * Deprecated woocommerce_after_my_account action.
261
  *
262
- * @deprecated 2.6.0
 
 
263
  */
264
- do_action( 'woocommerce_after_my_account' );
265
-
266
- }
267
-
268
- /**
269
- * customize_endpoint_title.
270
- *
271
- * @version 3.8.0
272
- * @since 3.8.0
273
- * @todo (maybe) 'orders': `if ( ! empty( $wp->query_vars['orders'] ) ) { $title = sprintf( __( 'Orders (page %d)', 'woocommerce' ), intval( $wp->query_vars['orders'] ) ); }`
274
- * @todo (maybe) 'view-order': `$title = ( $order = wc_get_order( $wp->query_vars['view-order'] ) ) ? sprintf( __( 'Order #%s', 'woocommerce' ), $order->get_order_number() ) : '';`
275
- * @todo (maybe) 'order-pay' => __( 'Pay for order', 'woocommerce' )
276
- * @todo (maybe) 'order-received' => __( 'Order received', 'woocommerce' )
277
- */
278
- function customize_endpoint_title( $title, $endpoint ) {
279
- $menu_titles = get_option( 'wcj_my_account_menu_title', array() );
280
- if ( ! empty( $menu_titles[ $endpoint ] ) ) {
281
- return $menu_titles[ $endpoint ];
282
- }
283
- return $title;
284
- }
285
-
286
- /**
287
- * customize_menu.
288
- *
289
- * @version 3.8.0
290
- * @since 3.8.0
291
- * @todo (maybe) option to disable menu
292
- */
293
- function customize_menu( $items ) {
294
- $menu_titles = get_option( 'wcj_my_account_menu_title', array() );
295
- foreach ( $items as $item_id => $item_title ) {
296
- if ( ! empty( $menu_titles[ $item_id ] ) ) {
297
- $items[ $item_id ] = $menu_titles[ $item_id ];
298
  }
299
- }
300
- if ( 'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_my_account_menu_order_customize_enabled', 'no' ) ) ) {
301
- $menu_order = array_map( 'trim', explode( PHP_EOL, get_option( 'wcj_my_account_menu_order', $this->menu_order_default ) ) );
302
- $modified_menu = array();
303
- foreach ( $menu_order as $item_id ) {
304
- if ( isset( $items[ $item_id ] ) ) {
305
- $modified_menu[ $item_id ] = $items[ $item_id ];
306
- unset( $items[ $item_id ] );
307
  }
 
308
  }
309
- $items = array_merge( $modified_menu, $items );
310
- }
311
- if ( 'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_my_account_menu_order_custom_items_enabled', 'no' ) ) ) {
312
- $custom_items = array_map( 'trim', explode( PHP_EOL, get_option( 'wcj_my_account_menu_order_custom_items', '' ) ) );
313
- foreach ( $custom_items as $custom_item ) {
314
- $parts = array_map( 'trim', explode( '|', $custom_item, 3 ) );
315
- if ( 3 === count( $parts ) ) {
316
- $items[ $parts[0] ] = $parts[1];
317
  }
318
  }
 
319
  }
320
- return $items;
321
- }
322
 
323
- /**
324
- * add_registration_extra_fields.
325
- *
326
- * @version 3.6.0
327
- * @since 3.6.0
328
- * @todo (maybe) more fields to choose from (i.e. not only "user role" field)
329
- * @todo (maybe) customizable position (check for other hooks or at least customizable priority on `woocommerce_register_form`)
330
- * @todo (maybe) move to new module (e.g. "Registration Form")
331
- */
332
- function add_registration_extra_fields() {
333
- $user_roles_options_html = '';
334
- $current_user_role_input = ! empty( $_POST['wcj_user_role'] ) ? $_POST['wcj_user_role'] :
335
- get_option( 'wcj_my_account_registration_extra_fields_user_role_default', 'customer' );
336
- $user_roles_options = get_option( 'wcj_my_account_registration_extra_fields_user_role_options', array( 'customer' ) );
337
- $all_user_roles = wcj_get_user_roles_options();
338
- foreach ( $user_roles_options as $user_role_id ) {
339
- $user_roles_options_html .= '<option value="' . $user_role_id . '" ' . selected( $user_role_id, $current_user_role_input, false ) . '>' .
340
- ( isset( $all_user_roles[ $user_role_id ] ) ? $all_user_roles[ $user_role_id ] : $user_role_id ) . '</option>';
341
- }
342
- ?><p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
343
  <label for="reg_wcj_user_role"><?php esc_html_e( 'User role', 'woocommerce-jetpack' ); ?></label>
344
  <select name="wcj_user_role" id="reg_wcj_user_role"><?php echo $user_roles_options_html; ?></select>
345
- </p><?php
346
- }
347
 
348
- /**
349
- * process_registration_extra_fields.
350
- *
351
- * @version 3.6.0
352
- * @since 3.6.0
353
- * @todo (maybe) optional admin confirmation for some user roles (probably will need to create additional `...-pending` user roles)
354
- */
355
- function process_registration_extra_fields( $customer_id, $new_customer_data, $password_generated ) {
356
- if ( isset( $_POST['wcj_user_role'] ) && '' != $_POST['wcj_user_role'] ) {
357
- $user_roles_options = get_option( 'wcj_my_account_registration_extra_fields_user_role_options', array( 'customer' ) );
358
- if ( ! empty( $user_roles_options ) && in_array( $_POST['wcj_user_role'], $user_roles_options ) ) {
359
- wp_update_user( array( 'ID' => $customer_id, 'role' => $_POST['wcj_user_role'] ) );
 
360
  }
361
  }
362
- }
363
 
364
- /**
365
- * add_my_account_custom_info.
366
- *
367
- * @version 3.4.0
368
- * @since 3.4.0
369
- */
370
- function add_my_account_custom_info() {
371
- $current_filter = current_filter();
372
- $current_filter_priority = wcj_current_filter_priority();
373
- $total_number = apply_filters( 'booster_option', 1, get_option( 'wcj_my_account_custom_info_total_number', 1 ) );
374
- for ( $i = 1; $i <= $total_number; $i++ ) {
375
- if (
376
- '' != get_option( 'wcj_my_account_custom_info_content_' . $i ) &&
377
- $current_filter === get_option( 'wcj_my_account_custom_info_hook_' . $i, 'woocommerce_account_dashboard' ) &&
378
- $current_filter_priority == get_option( 'wcj_my_account_custom_info_priority_' . $i, 10 )
379
- ) {
380
- echo do_shortcode( get_option( 'wcj_my_account_custom_info_content_' . $i ) );
 
381
  }
382
  }
383
- }
384
 
385
- /*
386
- * maybe_add_my_account_order_actions.
387
- *
388
- * @version 2.9.0
389
- * @since 2.9.0
390
- * @see http://snippet.fm/snippets/add-order-complete-action-to-woocommerce-my-orders-customer-table/
391
- */
392
- function maybe_add_my_account_order_actions( $actions, $order ) {
393
- $statuses_to_add = get_option( 'wcj_my_account_add_order_status_actions', '' );
394
- if ( ! empty( $statuses_to_add ) ) {
395
- $all_statuses = wcj_get_order_statuses();
396
- foreach ( $statuses_to_add as $status_to_add ) {
397
- if ( $status_to_add != $order->get_status() ) {
398
- $actions[ 'wcj_mark_' . $status_to_add . '_by_customer' ] = array(
399
- 'url' => wp_nonce_url( add_query_arg( array(
400
- 'wcj_action' => 'wcj_woocommerce_mark_order_status',
401
- 'status' => $status_to_add,
402
- 'order_id' => $order->get_id() ) ), 'wcj-woocommerce-mark-order-status' ),
403
- 'name' => $all_statuses[ $status_to_add ],
404
- );
 
405
  }
406
  }
 
407
  }
408
- return $actions;
409
- }
410
 
411
- /*
412
- * maybe_add_js_conformation.
413
- *
414
- * @version 2.9.0
415
- * @since 2.9.0
416
- */
417
- function maybe_add_js_conformation() {
418
- $statuses_to_add = get_option( 'wcj_my_account_add_order_status_actions', '' );
419
- if ( ! empty( $statuses_to_add ) ) {
420
- echo '<script>';
421
- foreach ( $statuses_to_add as $status_to_add ) {
422
- echo 'jQuery("a.wcj_mark_' . $status_to_add . '_by_customer").each( function() { jQuery(this).attr("onclick", "return confirm(\'' .
423
- __( 'Are you sure?', 'woocommerce-jetpack' ) . '\')") } );';
 
 
424
  }
425
- echo '</script>';
426
  }
427
- }
428
 
429
- /*
430
- * process_woocommerce_mark_order_status.
431
- *
432
- * @version 2.9.0
433
- * @since 2.9.0
434
- */
435
- function process_woocommerce_mark_order_status() {
436
- if (
437
- isset( $_GET['wcj_action'] ) && 'wcj_woocommerce_mark_order_status' === $_GET['wcj_action'] &&
438
- isset( $_GET['status'] ) &&
439
- isset( $_GET['order_id'] ) &&
440
- isset( $_GET['_wpnonce'] )
441
- ) {
442
- if ( wp_verify_nonce( $_GET['_wpnonce'], 'wcj-woocommerce-mark-order-status' ) ) {
443
- $_order = wc_get_order( $_GET['order_id'] );
444
- if ( $_order->get_customer_id() === get_current_user_id() ) {
445
- $_order->update_status( $_GET['status'] );
446
- wp_safe_redirect( remove_query_arg( array( 'wcj_action', 'status', 'order_id', '_wpnonce' ) ) );
447
- exit;
 
448
  }
449
  }
450
  }
451
- }
452
 
453
- }
454
 
455
  endif;
456
 
2
  /**
3
  * Booster for WooCommerce - Module - My Account
4
  *
5
+ * @version 4.8.0
6
  * @since 2.9.0
7
  * @author Algoritmika Ltd.
8
  */
11
 
12
  if ( ! class_exists( 'WCJ_My_Account' ) ) :
13
 
14
+ class WCJ_My_Account extends WCJ_Module {
15
+
16
+ /**
17
+ * Constructor.
18
+ *
19
+ * @version 4.8.0
20
+ * @since 2.9.0
21
+ * @todo [dev] Custom Menu Pages: add "Type" option with values: "param" (i.e. as it is now) or "endpoint"
22
+ * @todo [dev] Custom Menu Pages: deprecate "Add Custom Menu Items" (and add "link" value in "Type" options)
23
+ */
24
+ function __construct() {
25
+
26
+ $this->id = 'my_account';
27
+ $this->short_desc = __( 'My Account', 'woocommerce-jetpack' );
28
+ $this->desc = __( 'WooCommerce "My Account" page customization.', 'woocommerce-jetpack' );
29
+ $this->link_slug = 'woocommerce-my-account';
30
+ parent::__construct();
31
+
32
+ $this->account_menu_items = array(
33
+ 'dashboard' => __( 'Dashboard', 'woocommerce' ),
34
+ 'orders' => __( 'Orders', 'woocommerce' ),
35
+ 'downloads' => __( 'Downloads', 'woocommerce' ),
36
+ 'edit-address' => __( 'Addresses', 'woocommerce' ),
37
+ 'payment-methods' => __( 'Payment methods', 'woocommerce' ),
38
+ 'edit-account' => __( 'Account details', 'woocommerce' ),
39
+ 'customer-logout' => __( 'Logout', 'woocommerce' ),
40
+ );
41
+ $this->account_menu_endpoints = array(
42
+ 'orders' => __( 'Orders', 'woocommerce' ),
43
+ 'view-order' => __( 'View order', 'woocommerce' ),
44
+ 'downloads' => __( 'Downloads', 'woocommerce' ),
45
+ 'edit-account' => __( 'Edit account', 'woocommerce' ) . ' (' . __( 'Account details', 'woocommerce' ) . ')',
46
+ 'edit-address' => __( 'Addresses', 'woocommerce' ),
47
+ 'payment-methods' => __( 'Payment methods', 'woocommerce' ),
48
+ 'lost-password' => __( 'Lost password', 'woocommerce' ),
49
+ 'customer-logout' => __( 'Logout', 'woocommerce' ),
50
+ );
51
+ $this->menu_order_default = implode( PHP_EOL, array_keys( $this->account_menu_items ) );
52
+
53
+ if ( $this->is_enabled() ) {
54
+ add_filter( 'woocommerce_my_account_my_orders_actions', array( $this, 'maybe_add_my_account_order_actions' ), 10, 2 );
55
+ add_action( 'wp_footer', array( $this, 'maybe_add_js_conformation' ) );
56
+ add_action( 'init', array( $this, 'process_woocommerce_mark_order_status' ) );
57
+ // Custom pages
58
+ if ( 'yes' === get_option( 'wcj_my_account_custom_pages_enabled', 'no' ) ) {
59
+ add_action( 'woocommerce_account_' . 'page' . '_endpoint', array( $this, 'customize_dashboard' ), PHP_INT_MAX );
60
+ add_filter( 'the_title', array( $this, 'set_custom_page_title' ), PHP_INT_MAX );
61
+ add_filter( 'the_title', array( $this, 'set_custom_page_title_with_endpoint' ) );
62
+ add_filter( 'woocommerce_account_menu_items', array( $this, 'add_custom_page_menu_item' ), PHP_INT_MAX );
63
+ add_filter( 'woocommerce_get_endpoint_url', array( $this, 'set_custom_page_url' ), PHP_INT_MAX, 4 );
64
+ add_action( 'init', array( $this, 'add_endpoints' ) );
65
+ $this->customize_dashboard_for_endpoints();
 
 
 
 
 
 
 
66
  }
67
+ // Custom info
68
+ if ( 'yes' === get_option( 'wcj_my_account_custom_info_enabled', 'no' ) ) {
69
+ $total_number = apply_filters( 'booster_option', 1, get_option( 'wcj_my_account_custom_info_total_number', 1 ) );
70
+ for ( $i = 1; $i <= $total_number; $i++ ) {
71
+ add_action(
72
+ get_option( 'wcj_my_account_custom_info_hook_' . $i, 'woocommerce_account_dashboard' ),
73
+ array( $this, 'add_my_account_custom_info' ),
74
+ get_option( 'wcj_my_account_custom_info_priority_' . $i, 10 )
75
+ );
76
+ }
77
+ }
78
+ // Registration extra fields
79
+ if ( 'yes' === get_option( 'wcj_my_account_registration_extra_fields_user_role_enabled', 'no' ) ) {
80
+ add_action( 'woocommerce_register_form', array( $this, 'add_registration_extra_fields' ), PHP_INT_MAX );
81
+ add_action( 'woocommerce_created_customer', array( $this, 'process_registration_extra_fields' ), PHP_INT_MAX, 3 );
82
  }
83
+ // Menu & Endpoints
84
+ if ( 'yes' === get_option( 'wcj_my_account_menu_customize_enabled', 'no' ) ) {
85
+ foreach ( $this->account_menu_endpoints as $account_menu_endpoint_id => $account_menu_endpoint_title ) {
86
+ add_filter( 'woocommerce_endpoint_' . $account_menu_endpoint_id . '_title', array( $this, 'customize_endpoint_title' ), PHP_INT_MAX, 2 );
87
+ }
88
+ add_filter( 'woocommerce_account_menu_items', array( $this, 'customize_menu' ), PHP_INT_MAX );
89
+ if ( 'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_my_account_menu_order_custom_items_enabled', 'no' ) ) ) {
90
+ add_filter( 'woocommerce_get_endpoint_url', array( $this, 'customize_menu_custom_endpoints' ), PHP_INT_MAX, 4 );
91
+ }
92
+ }
93
+ // Dashboard customization
94
+ if ( 'yes' === get_option( 'wcj_my_account_custom_dashboard_enabled', 'no' ) ) {
95
+ add_action( 'woocommerce_account_' . 'page' . '_endpoint', array( $this, 'customize_dashboard' ), PHP_INT_MAX );
96
  }
97
  }
98
+ }
99
+
100
+ /**
101
+ * customize_dashboard_for_endpoints.
102
+ *
103
+ * @version 4.8.0
104
+ * @since 4.8.0
105
+ */
106
+ function customize_dashboard_for_endpoints() {
107
+ foreach ( $this->get_custom_pages() as $custom_menu_page_id => $custom_menu_page_data ) {
108
+ if ( empty( $endpoint = $custom_menu_page_data['endpoint'] ) ) {
109
+ continue;
110
+ }
111
+ add_action( 'woocommerce_account_' . $endpoint . '_endpoint', array( $this, 'customize_dashboard' ), PHP_INT_MAX );
112
  }
113
  }
 
114
 
115
+ /**
116
+ * Register new endpoint to use inside My Account page.
117
+ *
118
+ * @version 4.8.0
119
+ * @since 4.8.0
120
+ *
121
+ * @see https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/
122
+ */
123
+ public function add_endpoints() {
124
+ foreach ( $this->get_custom_pages() as $custom_menu_page_id => $custom_menu_page_data ) {
125
+ if ( empty( $endpoint = $custom_menu_page_data['endpoint'] ) ) {
126
+ continue;
127
+ }
128
+ add_rewrite_endpoint( $endpoint, EP_ROOT | EP_PAGES );
129
+ }
130
  }
131
+
132
+ /**
133
+ * get_custom_pages.
134
+ *
135
+ * @version 4.8.0
136
+ * @since 4.3.0
137
+ * @todo [dev] customizable ID (i.e. instead of `sanitize_title( $title[ $i ] )`)
138
+ */
139
+ function get_custom_pages() {
140
+ if ( isset( $this->custom_pages ) ) {
141
+ return $this->custom_pages;
142
  }
143
+ $this->custom_pages = array();
144
+ $title = get_option( 'wcj_my_account_custom_pages_title', array() );
145
+ $content = get_option( 'wcj_my_account_custom_pages_content', array() );
146
+ $endpoint = get_option( 'wcj_my_account_custom_pages_endpoint', array() );
147
+ for ( $i = 1; $i <= apply_filters( 'booster_option', 1, get_option( 'wcj_my_account_custom_pages_total_number', 1 ) ); $i ++ ) {
148
+ if ( ! empty( $title[ $i ] ) && ! empty( $content[ $i ] ) ) {
149
+ $endpoint[ $i ] = isset( $endpoint[ $i ] ) ? $endpoint[ $i ] : '';
150
+ $this->custom_pages[ sanitize_title( $title[ $i ] ) ] = array( 'endpoint' => $endpoint[ $i ], 'title' => $title[ $i ], 'content' => $content[ $i ] );
151
+ }
152
+ }
153
+ return $this->custom_pages;
154
  }
 
 
155
 
156
+ /**
157
+ * set_custom_page_title.
158
+ *
159
+ * @version 4.5.0
160
+ * @since 4.3.0
161
+ */
162
+ function set_custom_page_title( $title ) {
163
+ if (
164
+ ! isset( $_GET['section'] ) ||
165
+ is_admin() ||
166
+ ! in_the_loop() ||
167
+ ! is_account_page()
168
+ ) {
169
+ return $title;
170
+ }
171
+ if ( ! isset( $this->custom_pages ) ) {
172
+ $this->get_custom_pages();
173
+ }
174
+ $endpoint = $_GET['section'];
175
+ return ( isset( $this->custom_pages[ $endpoint ] ) ? $this->custom_pages[ $endpoint ]['title'] : $title );
176
+
177
  return $title;
178
  }
 
 
 
 
 
179
 
180
+ /**
181
+ * Set endpoint title.
182
+ *
183
+ * @version 4.8.0
184
+ * @since 4.8.0
185
+ *
186
+ * @param string $title
187
+ * @return string
188
+ */
189
+ public function set_custom_page_title_with_endpoint( $title ) {
190
+ if (
191
+ is_admin() ||
192
+ ! is_account_page() ||
193
+ ! in_the_loop()
194
+ ) {
195
+ return $title;
196
+ }
197
+ global $wp_query;
198
 
199
+ if ( ! isset( $this->custom_pages ) ) {
200
+ $this->get_custom_pages();
201
+ }
202
+ $endpoints = wp_list_pluck( $this->custom_pages, 'endpoint' );
203
+ $intersect = array_intersect_key( $wp_query->query_vars, array_flip( array_filter( $endpoints ) ) );
204
+ if ( ! empty( $intersect ) ) {
205
+ reset( $intersect );
206
+ $filter = wp_list_filter( $this->custom_pages, array( 'endpoint' => key( $intersect ) ) );
207
+ reset( $filter );
208
+ $title = ( isset( $this->custom_pages[ key( $filter ) ] ) ? $this->custom_pages[ key( $filter ) ]['title'] : $title );
209
+ }
210
+ return $title;
211
  }
 
 
 
212
 
213
+ /**
214
+ * set_custom_page_url.
215
+ *
216
+ * @version 4.8.0
217
+ * @since 4.3.0
218
+ * @todo [dev] (maybe) customizable `section` (e.g. `wcj-section`)
219
+ */
220
+ function set_custom_page_url( $url, $endpoint, $value, $permalink ) {
221
+ if ( ! isset( $this->custom_pages ) ) {
222
+ $this->get_custom_pages();
223
+ }
224
+ return ( isset( $this->custom_pages[ $endpoint ] ) && empty( $this->custom_pages[ $endpoint ]['endpoint'] ) && ( $myaccount_page_id = get_option( 'woocommerce_myaccount_page_id' ) ) ? add_query_arg( 'section', $endpoint, get_permalink( $myaccount_page_id ) ) : $url );
225
  }
 
 
226
 
227
+ /**
228
+ * add_custom_page_menu_item.
229
+ *
230
+ * @version 4.8.0
231
+ * @since 4.3.0
232
+ */
233
+ function add_custom_page_menu_item( $items ) {
234
+ foreach ( $this->get_custom_pages() as $custom_menu_page_id => $custom_menu_page_data ) {
235
+ $custom_menu_page_id = ! empty( $custom_menu_page_data['endpoint'] ) ? $custom_menu_page_data['endpoint'] : $custom_menu_page_id;
236
+ $items[ $custom_menu_page_id ] = $custom_menu_page_data['title'];
 
 
237
  }
238
+ return $items;
239
+ }
240
+
241
+ /**
242
+ * customize_menu_custom_endpoints.
243
+ *
244
+ * @version 3.8.0
245
+ * @since 3.8.0
246
+ */
247
+ function customize_menu_custom_endpoints( $url, $endpoint, $value, $permalink ) {
248
+ $custom_items = array_map( 'trim', explode( PHP_EOL, get_option( 'wcj_my_account_menu_order_custom_items', '' ) ) );
249
+ foreach ( $custom_items as $custom_item ) {
250
+ $parts = array_map( 'trim', explode( '|', $custom_item, 3 ) );
251
+ if ( 3 === count( $parts ) && $parts[0] === $endpoint ) {
252
+ return $parts[2];
253
+ }
254
+ }
255
+ return $url;
256
  }
 
 
257
 
258
+ /**
259
+ * customize_dashboard.
260
+ *
261
+ * @version 4.8.0
262
+ * @since 3.8.0
263
+ * @see woocommerce/templates/myaccount/dashboard.php
264
+ */
265
+ function customize_dashboard( $value ) {
266
+
267
+ // Custom pages
268
+ if ( 'yes' === get_option( 'wcj_my_account_custom_pages_enabled', 'no' ) ) {
269
+ if ( isset( $_GET['section'] ) || 'woocommerce_account_page_endpoint' != current_filter() ) {
270
+ if ( ! isset( $this->custom_pages ) ) {
271
+ $this->get_custom_pages();
272
+ }
273
+ $endpoint = 'woocommerce_account_page_endpoint' != current_filter() ? str_replace( array( 'woocommerce_account_', '_endpoint' ), array( '' ), current_filter() ) : false;
274
+ if ( false !== $endpoint ) {
275
+ $endpoint_tab = wp_list_filter( $this->custom_pages, array( 'endpoint' => $endpoint ) );
276
+ }
277
+ $page_id = isset( $_GET['section'] ) ? $_GET['section'] : ( false !== $endpoint ? array_keys( wp_list_pluck( $endpoint_tab, 'endpoint' ) )[0] : '' );
278
+ if ( isset( $this->custom_pages[ $page_id ] ) ) {
279
+ echo do_shortcode( $this->custom_pages[ $page_id ]['content'] );
280
+ return;
281
+ }
282
  }
283
+ if ( 'no' === get_option( 'wcj_my_account_custom_dashboard_enabled', 'no' ) ) {
284
+ wc_get_template( 'myaccount/dashboard.php', array(
285
+ 'current_user' => get_user_by( 'id', get_current_user_id() ),
286
+ ) );
287
  return;
288
  }
289
  }
290
+
291
+ // Dashboard customization
292
+ $current_user = get_user_by( 'id', get_current_user_id() );
293
+
294
+ if ( '' != ( $custom_content = get_option( 'wcj_my_account_custom_dashboard_content', '' ) ) ) {
295
+ echo do_shortcode( $custom_content );
296
  }
 
297
 
298
+ if ( 'no' === get_option( 'wcj_my_account_custom_dashboard_hide_hello', 'no' ) ) {
299
+ echo '<p>';
300
+ /* translators: 1: user display name 2: logout url */
301
+ printf(
302
+ __( 'Hello %1$s (not %1$s? <a href="%2$s">Log out</a>)', 'woocommerce' ),
303
+ '<strong>' . esc_html( $current_user->display_name ) . '</strong>',
304
+ esc_url( wc_logout_url( wc_get_page_permalink( 'myaccount' ) ) )
305
+ );
306
+ echo '</p>';
307
+ }
308
 
309
+ if ( 'no' === get_option( 'wcj_my_account_custom_dashboard_hide_info', 'no' ) ) {
310
+ echo '<p>';
311
+ printf(
312
+ __( 'From your account dashboard you can view your <a href="%1$s">recent orders</a>, manage your <a href="%2$s">shipping and billing addresses</a>, and <a href="%3$s">edit your password and account details</a>.', 'woocommerce' ),
313
+ esc_url( wc_get_endpoint_url( 'orders' ) ),
314
+ esc_url( wc_get_endpoint_url( 'edit-address' ) ),
315
+ esc_url( wc_get_endpoint_url( 'edit-account' ) )
316
+ );
317
+ echo '</p>';
318
+ }
319
 
320
+ /**
321
+ * My Account dashboard.
322
+ *
323
+ * @since 2.6.0
324
+ */
325
+ do_action( 'woocommerce_account_dashboard' );
326
+
327
+ /**
328
+ * Deprecated woocommerce_before_my_account action.
329
+ *
330
+ * @deprecated 2.6.0
331
+ */
332
+ do_action( 'woocommerce_before_my_account' );
333
+
334
+ /**
335
+ * Deprecated woocommerce_after_my_account action.
336
+ *
337
+ * @deprecated 2.6.0
338
+ */
339
+ do_action( 'woocommerce_after_my_account' );
340
 
 
 
 
 
 
 
 
 
 
341
  }
342
 
343
  /**
344
+ * customize_endpoint_title.
345
  *
346
+ * @version 3.8.0
347
+ * @since 3.8.0
348
+ * @todo (maybe) 'orders': `if ( ! empty( $wp->query_vars['orders'] ) ) { $title = sprintf( __( 'Orders (page %d)', 'woocommerce' ), intval( $wp->query_vars['orders'] ) ); }`
349
+ * @todo (maybe) 'view-order': `$title = ( $order = wc_get_order( $wp->query_vars['view-order'] ) ) ? sprintf( __( 'Order #%s', 'woocommerce' ), $order->get_order_number() ) : '';`
350
+ * @todo (maybe) 'order-pay' => __( 'Pay for order', 'woocommerce' )
351
+ * @todo (maybe) 'order-received' => __( 'Order received', 'woocommerce' )
352
  */
353
+ function customize_endpoint_title( $title, $endpoint ) {
354
+ $menu_titles = get_option( 'wcj_my_account_menu_title', array() );
355
+ if ( ! empty( $menu_titles[ $endpoint ] ) ) {
356
+ return $menu_titles[ $endpoint ];
357
+ }
358
+ return $title;
359
+ }
 
360
 
361
  /**
362
+ * customize_menu.
363
  *
364
+ * @version 3.8.0
365
+ * @since 3.8.0
366
+ * @todo (maybe) option to disable menu
367
  */
368
+ function customize_menu( $items ) {
369
+ $menu_titles = get_option( 'wcj_my_account_menu_title', array() );
370
+ foreach ( $items as $item_id => $item_title ) {
371
+ if ( ! empty( $menu_titles[ $item_id ] ) ) {
372
+ $items[ $item_id ] = $menu_titles[ $item_id ];
373
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
374
  }
375
+ if ( 'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_my_account_menu_order_customize_enabled', 'no' ) ) ) {
376
+ $menu_order = array_map( 'trim', explode( PHP_EOL, get_option( 'wcj_my_account_menu_order', $this->menu_order_default ) ) );
377
+ $modified_menu = array();
378
+ foreach ( $menu_order as $item_id ) {
379
+ if ( isset( $items[ $item_id ] ) ) {
380
+ $modified_menu[ $item_id ] = $items[ $item_id ];
381
+ unset( $items[ $item_id ] );
382
+ }
383
  }
384
+ $items = array_merge( $modified_menu, $items );
385
  }
386
+ if ( 'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_my_account_menu_order_custom_items_enabled', 'no' ) ) ) {
387
+ $custom_items = array_map( 'trim', explode( PHP_EOL, get_option( 'wcj_my_account_menu_order_custom_items', '' ) ) );
388
+ foreach ( $custom_items as $custom_item ) {
389
+ $parts = array_map( 'trim', explode( '|', $custom_item, 3 ) );
390
+ if ( 3 === count( $parts ) ) {
391
+ $items[ $parts[0] ] = $parts[1];
392
+ }
 
393
  }
394
  }
395
+ return $items;
396
  }
 
 
397
 
398
+ /**
399
+ * add_registration_extra_fields.
400
+ *
401
+ * @version 3.6.0
402
+ * @since 3.6.0
403
+ * @todo (maybe) more fields to choose from (i.e. not only "user role" field)
404
+ * @todo (maybe) customizable position (check for other hooks or at least customizable priority on `woocommerce_register_form`)
405
+ * @todo (maybe) move to new module (e.g. "Registration Form")
406
+ */
407
+ function add_registration_extra_fields() {
408
+ $user_roles_options_html = '';
409
+ $current_user_role_input = ! empty( $_POST['wcj_user_role'] ) ? $_POST['wcj_user_role'] :
410
+ get_option( 'wcj_my_account_registration_extra_fields_user_role_default', 'customer' );
411
+ $user_roles_options = get_option( 'wcj_my_account_registration_extra_fields_user_role_options', array( 'customer' ) );
412
+ $all_user_roles = wcj_get_user_roles_options();
413
+ foreach ( $user_roles_options as $user_role_id ) {
414
+ $user_roles_options_html .= '<option value="' . $user_role_id . '" ' . selected( $user_role_id, $current_user_role_input, false ) . '>' .
415
+ ( isset( $all_user_roles[ $user_role_id ] ) ? $all_user_roles[ $user_role_id ] : $user_role_id ) . '</option>';
416
+ }
417
+ ?><p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
418
  <label for="reg_wcj_user_role"><?php esc_html_e( 'User role', 'woocommerce-jetpack' ); ?></label>
419
  <select name="wcj_user_role" id="reg_wcj_user_role"><?php echo $user_roles_options_html; ?></select>
420
+ </p><?php
421
+ }
422
 
423
+ /**
424
+ * process_registration_extra_fields.
425
+ *
426
+ * @version 3.6.0
427
+ * @since 3.6.0
428
+ * @todo (maybe) optional admin confirmation for some user roles (probably will need to create additional `...-pending` user roles)
429
+ */
430
+ function process_registration_extra_fields( $customer_id, $new_customer_data, $password_generated ) {
431
+ if ( isset( $_POST['wcj_user_role'] ) && '' != $_POST['wcj_user_role'] ) {
432
+ $user_roles_options = get_option( 'wcj_my_account_registration_extra_fields_user_role_options', array( 'customer' ) );
433
+ if ( ! empty( $user_roles_options ) && in_array( $_POST['wcj_user_role'], $user_roles_options ) ) {
434
+ wp_update_user( array( 'ID' => $customer_id, 'role' => $_POST['wcj_user_role'] ) );
435
+ }
436
  }
437
  }
 
438
 
439
+ /**
440
+ * add_my_account_custom_info.
441
+ *
442
+ * @version 3.4.0
443
+ * @since 3.4.0
444
+ */
445
+ function add_my_account_custom_info() {
446
+ $current_filter = current_filter();
447
+ $current_filter_priority = wcj_current_filter_priority();
448
+ $total_number = apply_filters( 'booster_option', 1, get_option( 'wcj_my_account_custom_info_total_number', 1 ) );
449
+ for ( $i = 1; $i <= $total_number; $i++ ) {
450
+ if (
451
+ '' != get_option( 'wcj_my_account_custom_info_content_' . $i ) &&
452
+ $current_filter === get_option( 'wcj_my_account_custom_info_hook_' . $i, 'woocommerce_account_dashboard' ) &&
453
+ $current_filter_priority == get_option( 'wcj_my_account_custom_info_priority_' . $i, 10 )
454
+ ) {
455
+ echo do_shortcode( get_option( 'wcj_my_account_custom_info_content_' . $i ) );
456
+ }
457
  }
458
  }
 
459
 
460
+ /*
461
+ * maybe_add_my_account_order_actions.
462
+ *
463
+ * @version 2.9.0
464
+ * @since 2.9.0
465
+ * @see http://snippet.fm/snippets/add-order-complete-action-to-woocommerce-my-orders-customer-table/
466
+ */
467
+ function maybe_add_my_account_order_actions( $actions, $order ) {
468
+ $statuses_to_add = get_option( 'wcj_my_account_add_order_status_actions', '' );
469
+ if ( ! empty( $statuses_to_add ) ) {
470
+ $all_statuses = wcj_get_order_statuses();
471
+ foreach ( $statuses_to_add as $status_to_add ) {
472
+ if ( $status_to_add != $order->get_status() ) {
473
+ $actions[ 'wcj_mark_' . $status_to_add . '_by_customer' ] = array(
474
+ 'url' => wp_nonce_url( add_query_arg( array(
475
+ 'wcj_action' => 'wcj_woocommerce_mark_order_status',
476
+ 'status' => $status_to_add,
477
+ 'order_id' => $order->get_id() ) ), 'wcj-woocommerce-mark-order-status' ),
478
+ 'name' => $all_statuses[ $status_to_add ],
479
+ );
480
+ }
481
  }
482
  }
483
+ return $actions;
484
  }
 
 
485
 
486
+ /*
487
+ * maybe_add_js_conformation.
488
+ *
489
+ * @version 2.9.0
490
+ * @since 2.9.0
491
+ */
492
+ function maybe_add_js_conformation() {
493
+ $statuses_to_add = get_option( 'wcj_my_account_add_order_status_actions', '' );
494
+ if ( ! empty( $statuses_to_add ) ) {
495
+ echo '<script>';
496
+ foreach ( $statuses_to_add as $status_to_add ) {
497
+ echo 'jQuery("a.wcj_mark_' . $status_to_add . '_by_customer").each( function() { jQuery(this).attr("onclick", "return confirm(\'' .
498
+ __( 'Are you sure?', 'woocommerce-jetpack' ) . '\')") } );';
499
+ }
500
+ echo '</script>';
501
  }
 
502
  }
 
503
 
504
+ /*
505
+ * process_woocommerce_mark_order_status.
506
+ *
507
+ * @version 2.9.0
508
+ * @since 2.9.0
509
+ */
510
+ function process_woocommerce_mark_order_status() {
511
+ if (
512
+ isset( $_GET['wcj_action'] ) && 'wcj_woocommerce_mark_order_status' === $_GET['wcj_action'] &&
513
+ isset( $_GET['status'] ) &&
514
+ isset( $_GET['order_id'] ) &&
515
+ isset( $_GET['_wpnonce'] )
516
+ ) {
517
+ if ( wp_verify_nonce( $_GET['_wpnonce'], 'wcj-woocommerce-mark-order-status' ) ) {
518
+ $_order = wc_get_order( $_GET['order_id'] );
519
+ if ( $_order->get_customer_id() === get_current_user_id() ) {
520
+ $_order->update_status( $_GET['status'] );
521
+ wp_safe_redirect( remove_query_arg( array( 'wcj_action', 'status', 'order_id', '_wpnonce' ) ) );
522
+ exit;
523
+ }
524
  }
525
  }
526
  }
 
527
 
528
+ }
529
 
530
  endif;
531
 
includes/class-wcj-order-custom-statuses.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Order Custom Statuses
4
  *
5
- * @version 4.0.0
6
  * @since 2.2.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -16,7 +16,7 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
16
  /**
17
  * Constructor.
18
  *
19
- * @version 4.0.0
20
  * @todo [feature] add options to change icon and icon's color for all statuses (i.e. not only custom)
21
  * @todo [dev] maybe rename module to "Custom Order Statuses"
22
  */
@@ -38,8 +38,12 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
38
  if ( $this->is_enabled() ) {
39
 
40
  // Core
41
- add_filter( 'wc_order_statuses', array( $this, 'add_custom_statuses_to_filter' ), PHP_INT_MAX );
42
- add_action( 'init', array( $this, 'register_custom_post_statuses' ) );
 
 
 
 
43
 
44
  // CSS
45
  add_action( 'admin_head', array( $this, 'hook_statuses_icons_css' ) );
@@ -101,7 +105,7 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
101
  } else {
102
  if ( $cut_prefix ) {
103
  $orders_custom_statuses_no_prefix = array();
104
- foreach( $orders_custom_statuses as $status => $status_name ) {
105
  $orders_custom_statuses_no_prefix[ substr( $status, 3 ) ] = $status_name;
106
  }
107
  return $orders_custom_statuses_no_prefix;
@@ -309,11 +313,11 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
309
  /**
310
  * register_custom_post_statuses.
311
  *
312
- * @version 3.2.2
313
  */
314
  function register_custom_post_statuses() {
315
- $custom_statuses = $this->get_custom_order_statuses();
316
- foreach ( $custom_statuses as $slug => $label )
317
  register_post_status( $slug, array(
318
  'label' => $label,
319
  'public' => true,
@@ -322,15 +326,39 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
322
  'show_in_admin_status_list' => true,
323
  'label_count' => _n_noop( $label . ' <span class="count">(%s)</span>', $label . ' <span class="count">(%s)</span>' ),
324
  ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
325
  }
326
 
327
  /**
328
  * add_custom_statuses_to_filter.
329
  *
330
- * @version 3.2.2
 
 
331
  */
332
  function add_custom_statuses_to_filter( $order_statuses ) {
333
- return array_merge( ( '' == $order_statuses ? array() : $order_statuses ), $this->get_custom_order_statuses() );
 
 
 
 
 
 
 
 
 
334
  }
335
 
336
  /**
2
  /**
3
  * Booster for WooCommerce - Module - Order Custom Statuses
4
  *
5
+ * @version 4.8.0
6
  * @since 2.2.0
7
  * @author Algoritmika Ltd.
8
  */
16
  /**
17
  * Constructor.
18
  *
19
+ * @version 4.8.0
20
  * @todo [feature] add options to change icon and icon's color for all statuses (i.e. not only custom)
21
  * @todo [dev] maybe rename module to "Custom Order Statuses"
22
  */
38
  if ( $this->is_enabled() ) {
39
 
40
  // Core
41
+ add_filter( 'wc_order_statuses', array( $this, 'add_custom_statuses_to_filter' ), PHP_INT_MAX );
42
+ if ( 'no' === get_option( 'wcj_load_modules_on_init', 'no' ) ) {
43
+ add_action( 'init', array( $this, 'register_custom_post_statuses' ) );
44
+ } else {
45
+ $this->register_custom_post_statuses();
46
+ }
47
 
48
  // CSS
49
  add_action( 'admin_head', array( $this, 'hook_statuses_icons_css' ) );
105
  } else {
106
  if ( $cut_prefix ) {
107
  $orders_custom_statuses_no_prefix = array();
108
+ foreach ( $orders_custom_statuses as $status => $status_name ) {
109
  $orders_custom_statuses_no_prefix[ substr( $status, 3 ) ] = $status_name;
110
  }
111
  return $orders_custom_statuses_no_prefix;
313
  /**
314
  * register_custom_post_statuses.
315
  *
316
+ * @version 4.8.0
317
  */
318
  function register_custom_post_statuses() {
319
+ $custom_statuses = $this->get_custom_order_statuses( $this->cut_prefix() );
320
+ foreach ( $custom_statuses as $slug => $label ) {
321
  register_post_status( $slug, array(
322
  'label' => $label,
323
  'public' => true,
326
  'show_in_admin_status_list' => true,
327
  'label_count' => _n_noop( $label . ' <span class="count">(%s)</span>', $label . ' <span class="count">(%s)</span>' ),
328
  ) );
329
+ }
330
+ }
331
+
332
+ /**
333
+ * cut_prefix.
334
+ *
335
+ * @version 4.8.0
336
+ * @since 4.8.0
337
+ *
338
+ * @return mixed
339
+ */
340
+ function cut_prefix() {
341
+ return filter_var( get_option( 'wcj_orders_custom_statuses_remove_prefix', 'no' ), FILTER_VALIDATE_BOOLEAN );
342
  }
343
 
344
  /**
345
  * add_custom_statuses_to_filter.
346
  *
347
+ * @version 4.8.0
348
+ *
349
+ * @todo Check if there is a way to output the Status Label and not its slug when using the option "Remove Status Prefix", because `wc_get_order_status_name()` has issues when there is no prefix.
350
  */
351
  function add_custom_statuses_to_filter( $order_statuses ) {
352
+ if (
353
+ function_exists('get_current_screen') &&
354
+ ! empty( $screen = get_current_screen() ) &&
355
+ 'edit-shop_order' === $screen->id
356
+ ) {
357
+ $custom_order_statuses = $this->get_custom_order_statuses( $this->cut_prefix() );
358
+ } else {
359
+ $custom_order_statuses = $this->get_custom_order_statuses();
360
+ }
361
+ return array_merge( ( '' == $order_statuses ? array() : $order_statuses ), $custom_order_statuses );
362
  }
363
 
364
  /**
includes/class-wcj-payment-gateways-fees.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Gateways Fees and Discounts
4
  *
5
- * @version 4.1.0
6
  * @since 2.2.2
7
  * @author Algoritmika Ltd.
8
  */
@@ -129,20 +129,41 @@ class WCJ_Payment_Gateways_Fees extends WCJ_Module {
129
  /**
130
  * get_current_gateway.
131
  *
132
- * @version 3.3.0
133
  * @since 3.3.0
134
  */
135
  function get_current_gateway() {
 
 
136
  if ( isset( $_GET['wc-api'] ) && 'WC_Gateway_PayPal_Express_AngellEYE' === $_GET['wc-api'] ) {
137
- return 'paypal_express'; // PayPal for WooCommerce (By Angell EYE)
138
  } elseif (
139
  ( isset( $_GET['wc-ajax'] ) && 'wc_ppec_generate_cart' === $_GET['wc-ajax'] ) ||
140
  ( isset( $_GET['startcheckout'] ) && 'true' === $_GET['startcheckout'] )
141
  ) {
142
- return 'ppec_paypal'; // WooCommerce PayPal Express Checkout Payment Gateway (By WooCommerce)
143
  } else {
144
- return WC()->session->chosen_payment_method;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
145
  }
 
146
  }
147
 
148
  /**
2
  /**
3
  * Booster for WooCommerce - Module - Gateways Fees and Discounts
4
  *
5
+ * @version 4.8.0
6
  * @since 2.2.2
7
  * @author Algoritmika Ltd.
8
  */
129
  /**
130
  * get_current_gateway.
131
  *
132
+ * @version 4.8.0
133
  * @since 3.3.0
134
  */
135
  function get_current_gateway() {
136
+ $gateway = '';
137
+
138
  if ( isset( $_GET['wc-api'] ) && 'WC_Gateway_PayPal_Express_AngellEYE' === $_GET['wc-api'] ) {
139
+ $gateway = 'paypal_express'; // PayPal for WooCommerce (By Angell EYE)
140
  } elseif (
141
  ( isset( $_GET['wc-ajax'] ) && 'wc_ppec_generate_cart' === $_GET['wc-ajax'] ) ||
142
  ( isset( $_GET['startcheckout'] ) && 'true' === $_GET['startcheckout'] )
143
  ) {
144
+ $gateway = 'ppec_paypal'; // WooCommerce PayPal Express Checkout Payment Gateway (By WooCommerce)
145
  } else {
146
+ $gateway = WC()->session->get( 'chosen_payment_method' );
147
+ }
148
+
149
+ // Pre-sets the default available payment gateway on cart and checkout pages.
150
+ if (
151
+ empty( $gateway ) &&
152
+ 'yes' === get_option( 'wcj_gateways_fees_force_default_payment_gateway', 'no' ) &&
153
+ ( is_checkout() || is_cart() )
154
+ ) {
155
+ $gateways = WC()->payment_gateways->get_available_payment_gateways();
156
+ if ( $gateways ) {
157
+ foreach ( $gateways as $gateway ) {
158
+ if ( 'yes' === $gateway->enabled ) {
159
+ WC()->session->set( 'chosen_payment_method', $gateway->id );
160
+ $gateway = WC()->session->get( 'chosen_payment_method' );
161
+ break;
162
+ }
163
+ }
164
+ }
165
  }
166
+ return $gateway;
167
  }
168
 
169
  /**
includes/class-wcj-price-by-country.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Prices and Currencies by Country
4
  *
5
- * @version 4.1.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -22,7 +22,7 @@ class WCJ_Price_By_Country extends WCJ_Module {
22
  /**
23
  * Constructor.
24
  *
25
- * @version 4.1.0
26
  */
27
  function __construct() {
28
 
@@ -74,6 +74,9 @@ class WCJ_Price_By_Country extends WCJ_Module {
74
  add_action( 'woocommerce_ajax_save_product_variations', array( $this, 'update_products_price_by_country_product_saved_ajax' ), PHP_INT_MAX, 1 );
75
  }
76
  }
 
 
 
77
  }
78
 
79
  // Price Filter Widget
@@ -86,6 +89,35 @@ class WCJ_Price_By_Country extends WCJ_Module {
86
  }
87
  }
88
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  /**
90
  * recalculate_price_filter_products_prices.
91
  *
2
  /**
3
  * Booster for WooCommerce - Module - Prices and Currencies by Country
4
  *
5
+ * @version 4.8.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
22
  /**
23
  * Constructor.
24
  *
25
+ * @version 4.8.0
26
  */
27
  function __construct() {
28
 
74
  add_action( 'woocommerce_ajax_save_product_variations', array( $this, 'update_products_price_by_country_product_saved_ajax' ), PHP_INT_MAX, 1 );
75
  }
76
  }
77
+
78
+ // Coupons Compatibility
79
+ add_filter( 'woocommerce_coupon_get_discount_amount', array( $this, 'fix_wc_coupon_currency' ), 10, 5 );
80
  }
81
 
82
  // Price Filter Widget
89
  }
90
  }
91
 
92
+ /**
93
+ * fix_wc_coupon_currency.
94
+ *
95
+ * @version 4.8.0
96
+ * @since 4.8.0
97
+ *
98
+ * @param $amount
99
+ * @param $discount
100
+ * @param $cart_item
101
+ * @param $single
102
+ * @param $wc_coupon
103
+ *
104
+ * @return float|int
105
+ */
106
+ function fix_wc_coupon_currency( $amount, $discount, $cart_item, $single, $wc_coupon ) {
107
+ if (
108
+ 'yes' !== get_option( 'wcj_price_by_country_compatibility_wc_coupons', 'no' ) ||
109
+ 'fixed_cart' !== $wc_coupon->get_discount_type()
110
+ ) {
111
+ return $amount;
112
+ }
113
+
114
+ if ( ! empty( $this->core ) ) {
115
+ $amount = $this->core->change_price( $amount, null );
116
+ }
117
+
118
+ return $amount;
119
+ }
120
+
121
  /**
122
  * recalculate_price_filter_products_prices.
123
  *
includes/class-wcj-product-addons.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Product Addons
4
  *
5
- * @version 4.7.0
6
  * @since 2.5.3
7
  * @author Algoritmika Ltd.
8
  * @todo admin order view (names)
@@ -101,7 +101,7 @@ class WCJ_Product_Addons extends WCJ_Module {
101
  /**
102
  * import_enable_by_variation_meta.
103
  *
104
- * @version 4.7.0
105
  * @since 4.7.0
106
  *
107
  * @param $data
@@ -117,17 +117,12 @@ class WCJ_Product_Addons extends WCJ_Module {
117
  ) {
118
  return $data;
119
  }
120
- $meta_data_key = - 1;
121
  foreach ( $data['meta_data'] as $key => $meta_data ) {
122
  if ( false !== strpos( $meta_data['key'], '_wcj_product_addons_per_product_enable_by_variation_' ) ) {
123
- $meta_data_key = $key;
124
- break;
125
- }
126
- }
127
- if ( - 1 != $meta_data_key ) {
128
- $new_value = array_filter( preg_split( "/\r\n|\n|\r/", $data['meta_data'][ $meta_data_key ]['value'] ) );
129
- if ( ! empty( $new_value ) ) {
130
- $data['meta_data'][ $meta_data_key ]['value'] = $new_value;
131
  }
132
  }
133
  return $data;
@@ -136,7 +131,7 @@ class WCJ_Product_Addons extends WCJ_Module {
136
  /**
137
  * export_enable_by_variation_meta.
138
  *
139
- * @version 4.7.0
140
  * @since 4.7.0
141
  *
142
  * @param $value
@@ -153,7 +148,7 @@ class WCJ_Product_Addons extends WCJ_Module {
153
  ) {
154
  return $value;
155
  }
156
- $value = implode( "\n", $value );
157
  return $value;
158
  }
159
 
@@ -557,7 +552,7 @@ class WCJ_Product_Addons extends WCJ_Module {
557
  /**
558
  * Adds info to order details (and emails).
559
  *
560
- * @version 3.8.0
561
  * @since 2.5.3
562
  */
563
  function add_info_to_order_item_name( $name, $item, $is_cart = false ) {
@@ -577,8 +572,8 @@ class WCJ_Product_Addons extends WCJ_Module {
577
  if ( isset( $item[ $addon['price_key'] ] ) ) {
578
  $addon_price = ( $is_cart ) ? $this->maybe_convert_currency( $item[ $addon['price_key'] ], $_product ) : $item[ $addon['price_key'] ];
579
  $addons_info .= str_replace(
580
- array( '%addon_label%', '%addon_price%' ),
581
- array( $item[ $addon['label_key'] ], wc_price( wcj_get_product_display_price( $_product, $addon_price ) ) ),
582
  $item_format
583
  );
584
  }
2
  /**
3
  * Booster for WooCommerce - Module - Product Addons
4
  *
5
+ * @version 4.8.0
6
  * @since 2.5.3
7
  * @author Algoritmika Ltd.
8
  * @todo admin order view (names)
101
  /**
102
  * import_enable_by_variation_meta.
103
  *
104
+ * @version 4.8.0
105
  * @since 4.7.0
106
  *
107
  * @param $data
117
  ) {
118
  return $data;
119
  }
 
120
  foreach ( $data['meta_data'] as $key => $meta_data ) {
121
  if ( false !== strpos( $meta_data['key'], '_wcj_product_addons_per_product_enable_by_variation_' ) ) {
122
+ $new_value = array_filter( preg_split( "/\n|\r\n?/", $data['meta_data'][ $key ]['value'] ) );
123
+ if ( ! empty( $new_value ) ) {
124
+ $data['meta_data'][ $key ]['value'] = $new_value;
125
+ }
 
 
 
 
126
  }
127
  }
128
  return $data;
131
  /**
132
  * export_enable_by_variation_meta.
133
  *
134
+ * @version 4.8.0
135
  * @since 4.7.0
136
  *
137
  * @param $value
148
  ) {
149
  return $value;
150
  }
151
+ $value = implode( "\n", (array) $value );
152
  return $value;
153
  }
154
 
552
  /**
553
  * Adds info to order details (and emails).
554
  *
555
+ * @version 4.8.0
556
  * @since 2.5.3
557
  */
558
  function add_info_to_order_item_name( $name, $item, $is_cart = false ) {
572
  if ( isset( $item[ $addon['price_key'] ] ) ) {
573
  $addon_price = ( $is_cart ) ? $this->maybe_convert_currency( $item[ $addon['price_key'] ], $_product ) : $item[ $addon['price_key'] ];
574
  $addons_info .= str_replace(
575
+ array( '%addon_label%', '%addon_price%', '%addon_title%' ),
576
+ array( $item[ $addon['label_key'] ], wc_price( wcj_get_product_display_price( $_product, $addon_price ) ), $addon['title'] ),
577
  $item_format
578
  );
579
  }
includes/class-wcj-product-by-date.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Product Availability by Date
4
  *
5
- * @version 4.7.0
6
  * @since 2.9.1
7
  * @author Algoritmika Ltd.
8
  */
@@ -147,21 +147,18 @@ class WCJ_Product_By_Date extends WCJ_Module {
147
  /**
148
  * check_is_purchasable_by_date.
149
  *
150
- * @version 4.7.0
151
  * @since 2.9.1
152
  * @todo validate `wcj_product_by_date_` option before checking (or even better earlier, when option is saved by admin)
153
  */
154
  function check_is_purchasable_by_date( $purchasable, $_product ) {
155
  if ( $purchasable ) {
156
  if ( false !== ( $direct_date = $this->maybe_get_direct_date( wcj_get_product_id_or_variation_parent_id( $_product ) ) ) ) {
157
- $timestamp = strtotime( $direct_date );
158
- if ( false === $timestamp ) {
159
- $date = DateTime::createFromFormat( get_option( 'wcj_product_by_date_direct_date_format', 'm/d/Y' ), $direct_date, wcj_timezone() );
160
- if ( false === $date ) {
161
- return false;
162
- }
163
- $timestamp = $date->getTimestamp();
164
  }
 
165
  return ( $this->time_now >= $timestamp );
166
  } else {
167
  $_date = $this->get_product_availability_this_month( $_product );
2
  /**
3
  * Booster for WooCommerce - Module - Product Availability by Date
4
  *
5
+ * @version 4.8.0
6
  * @since 2.9.1
7
  * @author Algoritmika Ltd.
8
  */
147
  /**
148
  * check_is_purchasable_by_date.
149
  *
150
+ * @version 4.8.0
151
  * @since 2.9.1
152
  * @todo validate `wcj_product_by_date_` option before checking (or even better earlier, when option is saved by admin)
153
  */
154
  function check_is_purchasable_by_date( $purchasable, $_product ) {
155
  if ( $purchasable ) {
156
  if ( false !== ( $direct_date = $this->maybe_get_direct_date( wcj_get_product_id_or_variation_parent_id( $_product ) ) ) ) {
157
+ $date = DateTime::createFromFormat( get_option( 'wcj_product_by_date_direct_date_format', 'm/d/Y' ), $direct_date, wcj_timezone() );
158
+ if ( false === $date ) {
159
+ return false;
 
 
 
 
160
  }
161
+ $timestamp = $date->getTimestamp();
162
  return ( $this->time_now >= $timestamp );
163
  } else {
164
  $_date = $this->get_product_availability_this_month( $_product );
includes/class-wcj-shipping-by-user-role.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Shipping by User Role
4
  *
5
- * @version 3.6.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -51,20 +51,32 @@ class WCJ_Shipping_By_User_Role extends WCJ_Module_Shipping_By_Condition {
51
 
52
  }
53
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  /**
55
  * check.
56
  *
57
- * @version 3.6.0
58
  * @since 3.2.0
59
  * @todo use `$package` (and in this case update `wcj_get_left_to_free_shipping()`)
60
  */
61
  function check( $options_id, $user_roles_or_ids_or_membership_plans, $include_or_exclude, $package ) {
62
  switch( $options_id ) {
63
  case 'user_roles':
64
- if ( ! isset( $this->customer_role ) ) {
65
- $this->customer_role = wcj_get_current_user_first_role();
66
  }
67
- return in_array( $this->customer_role, $user_roles_or_ids_or_membership_plans );
68
  case 'user_id':
69
  if ( ! isset( $this->user_id ) ) {
70
  $this->user_id = get_current_user_id();
2
  /**
3
  * Booster for WooCommerce - Module - Shipping by User Role
4
  *
5
+ * @version 4.8.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
51
 
52
  }
53
 
54
+ /**
55
+ * check_multiple_roles.
56
+ *
57
+ * @version 4.8.0
58
+ * @since 4.8.0
59
+ *
60
+ * @return bool
61
+ */
62
+ public function add_multiple_roles_option() {
63
+ return true;
64
+ }
65
+
66
  /**
67
  * check.
68
  *
69
+ * @version 4.8.0
70
  * @since 3.2.0
71
  * @todo use `$package` (and in this case update `wcj_get_left_to_free_shipping()`)
72
  */
73
  function check( $options_id, $user_roles_or_ids_or_membership_plans, $include_or_exclude, $package ) {
74
  switch( $options_id ) {
75
  case 'user_roles':
76
+ if ( empty( $this->customer_roles ) ) {
77
+ $this->customer_roles = 'no' === ( $multi_role_check = get_option( 'wcj_' . $this->id . '_check_multiple_roles', 'no' ) ) ? array( wcj_get_current_user_first_role() ) : wcj_get_current_user_all_roles();
78
  }
79
+ return count( array_intersect( $this->customer_roles, $user_roles_or_ids_or_membership_plans ) ) > 0;
80
  case 'user_id':
81
  if ( ! isset( $this->user_id ) ) {
82
  $this->user_id = get_current_user_id();
includes/classes/class-wcj-module-shipping-by-condition.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Shipping by Condition
4
  *
5
- * @version 4.0.0
6
  * @since 3.2.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -27,6 +27,18 @@ abstract class WCJ_Module_Shipping_By_Condition extends WCJ_Module {
27
  }
28
  }
29
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  /**
31
  * available_shipping_methods.
32
  *
2
  /**
3
  * Booster for WooCommerce - Module - Shipping by Condition
4
  *
5
+ * @version 4.8.0
6
  * @since 3.2.0
7
  * @author Algoritmika Ltd.
8
  */
27
  }
28
  }
29
 
30
+ /**
31
+ * check_multiple_roles.
32
+ *
33
+ * @version 4.8.0
34
+ * @since 4.8.0
35
+ *
36
+ * @return bool
37
+ */
38
+ function add_multiple_roles_option(){
39
+ return false;
40
+ }
41
+
42
  /**
43
  * available_shipping_methods.
44
  *
includes/core/class-wcj-admin.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Core - Admin
4
  *
5
- * @version 3.5.3
6
  * @since 3.2.4
7
  * @author Algoritmika Ltd.
8
  */
@@ -16,18 +16,21 @@ class WCJ_Admin {
16
  /**
17
  * Constructor.
18
  *
19
- * @version 3.2.4
20
  * @since 3.2.4
21
  */
22
  function __construct() {
23
  if ( is_admin() ) {
24
  add_filter( 'booster_message', 'wcj_get_plus_message', 100, 3 );
25
- add_filter( 'woocommerce_get_settings_pages', array( $this, 'add_wcj_settings_tab' ), 1 );
26
- add_filter( 'plugin_action_links_' . plugin_basename( WCJ_PLUGIN_FILE ), array( $this, 'action_links' ) );
27
- add_action( 'admin_menu', array( $this, 'booster_menu' ), 100 );
28
- add_filter( 'admin_footer_text', array( $this, 'admin_footer_text' ), 2 );
29
- if ( 'woocommerce-jetpack.php' === basename( WCJ_PLUGIN_FILE ) ) {
30
- add_action( 'admin_notices', array( $this, 'check_plus_version' ) );
 
 
 
31
  }
32
  }
33
  }
2
  /**
3
  * Booster for WooCommerce - Core - Admin
4
  *
5
+ * @version 4.8.0
6
  * @since 3.2.4
7
  * @author Algoritmika Ltd.
8
  */
16
  /**
17
  * Constructor.
18
  *
19
+ * @version 4.8.0
20
  * @since 3.2.4
21
  */
22
  function __construct() {
23
  if ( is_admin() ) {
24
  add_filter( 'booster_message', 'wcj_get_plus_message', 100, 3 );
25
+
26
+ if ( apply_filters( 'wcj_can_create_admin_interface', true ) ) {
27
+ add_filter( 'woocommerce_get_settings_pages', array( $this, 'add_wcj_settings_tab' ), 1 );
28
+ add_filter( 'plugin_action_links_' . plugin_basename( WCJ_PLUGIN_FILE ), array( $this, 'action_links' ) );
29
+ add_action( 'admin_menu', array( $this, 'booster_menu' ), 100 );
30
+ add_filter( 'admin_footer_text', array( $this, 'admin_footer_text' ), 2 );
31
+ if ( 'woocommerce-jetpack.php' === basename( WCJ_PLUGIN_FILE ) ) {
32
+ add_action( 'admin_notices', array( $this, 'check_plus_version' ) );
33
+ }
34
  }
35
  }
36
  }
includes/functions/wcj-functions-general.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Functions - General
4
  *
5
- * @version 4.7.0
6
  * @author Algoritmika Ltd.
7
  * @todo add `wcj_add_actions()` and `wcj_add_filters()`
8
  */
@@ -884,7 +884,7 @@ if ( ! function_exists( 'wcj_remove_class_filter' ) ) {
884
  }
885
  }
886
 
887
- if ( ! function_exists( 'wcj_remove_class_filter' ) ) {
888
  /**
889
  * Remove action added with a callback to a class without access.
890
  *
@@ -933,11 +933,14 @@ if ( ! function_exists( 'wcj_remove_wpml_terms_filters' ) ) {
933
  *
934
  * @see https://wpml.org/forums/topic/get-all-terms-of-all-languages-outside-loop/
935
  *
936
- * @version 4.7.0
937
  * @since 4.7.0
938
  */
939
  function wcj_remove_wpml_terms_filters() {
940
  global $sitepress;
 
 
 
941
  remove_filter( 'get_terms_args', array( $sitepress, 'get_terms_args_filter' ) );
942
  remove_filter( 'get_term', array( $sitepress, 'get_term_adjust_id' ) );
943
  remove_filter( 'terms_clauses', array( $sitepress, 'terms_clauses' ) );
@@ -950,12 +953,15 @@ if ( ! function_exists( 'wcj_add_wpml_terms_filters' ) ) {
950
  *
951
  * @see http://support.themeblvd.com/forums/topic/wpml-sitepress-php-error-on-backend-due-to-layout-builder/
952
  *
953
- * @version 4.7.0
954
  * @since 4.7.0
955
  */
956
  function wcj_add_wpml_terms_filters() {
957
  // restore WPML term filters
958
  global $sitepress;
 
 
 
959
  add_filter( 'terms_clauses', array( $sitepress, 'terms_clauses' ), 10, 3 );
960
  add_filter( 'get_term', array( $sitepress, 'get_term_adjust_id' ) );
961
  add_filter( 'get_terms_args', array( $sitepress, 'get_terms_args_filter' ), 10, 2 );
2
  /**
3
  * Booster for WooCommerce - Functions - General
4
  *
5
+ * @version 4.8.0
6
  * @author Algoritmika Ltd.
7
  * @todo add `wcj_add_actions()` and `wcj_add_filters()`
8
  */
884
  }
885
  }
886
 
887
+ if ( ! function_exists( 'wcj_remove_class_action' ) ) {
888
  /**
889
  * Remove action added with a callback to a class without access.
890
  *
933
  *
934
  * @see https://wpml.org/forums/topic/get-all-terms-of-all-languages-outside-loop/
935
  *
936
+ * @version 4.8.0
937
  * @since 4.7.0
938
  */
939
  function wcj_remove_wpml_terms_filters() {
940
  global $sitepress;
941
+ if ( ! $sitepress ) {
942
+ return;
943
+ }
944
  remove_filter( 'get_terms_args', array( $sitepress, 'get_terms_args_filter' ) );
945
  remove_filter( 'get_term', array( $sitepress, 'get_term_adjust_id' ) );
946
  remove_filter( 'terms_clauses', array( $sitepress, 'terms_clauses' ) );
953
  *
954
  * @see http://support.themeblvd.com/forums/topic/wpml-sitepress-php-error-on-backend-due-to-layout-builder/
955
  *
956
+ * @version 4.8.0
957
  * @since 4.7.0
958
  */
959
  function wcj_add_wpml_terms_filters() {
960
  // restore WPML term filters
961
  global $sitepress;
962
+ if ( ! $sitepress ) {
963
+ return;
964
+ }
965
  add_filter( 'terms_clauses', array( $sitepress, 'terms_clauses' ), 10, 3 );
966
  add_filter( 'get_term', array( $sitepress, 'get_term_adjust_id' ) );
967
  add_filter( 'get_terms_args', array( $sitepress, 'get_terms_args_filter' ), 10, 2 );
includes/settings/wcj-settings-admin-tools.php CHANGED
@@ -2,8 +2,8 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Admin Tools
4
  *
5
- * @version 4.1.0
6
- * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
9
 
@@ -41,6 +41,17 @@ return array(
41
  'default' => 'no',
42
  'type' => 'checkbox',
43
  ),
 
 
 
 
 
 
 
 
 
 
 
44
  array(
45
  'type' => 'sectionend',
46
  'id' => 'wcj_admin_tools_general_options',
2
  /**
3
  * Booster for WooCommerce - Settings - Admin Tools
4
  *
5
+ * @version 4.8.0
6
+ * @since 2.7.2
7
  * @author Algoritmika Ltd.
8
  */
9
 
41
  'default' => 'no',
42
  'type' => 'checkbox',
43
  ),
44
+ array(
45
+ 'title' => __( 'Enable Interface By User Roles', 'woocommerce-jetpack' ),
46
+ 'desc_tip' => __( 'The interface can\'t be disabled for The Administrator role.', 'woocommerce-jetpack' ) . '<br /><br />' . __( 'Leave it empty to enable the interface for all the roles.', 'woocommerce-jetpack' ),
47
+ 'desc' => empty( $message = apply_filters( 'booster_message', '', 'desc' ) ) ? __( 'Disables the whole Booster admin interface for not selected roles.', 'woocommerce-jetpack' ) : $message,
48
+ 'custom_attributes' => apply_filters( 'booster_message', '', 'disabled' ),
49
+ 'id' => 'wcj_admin_tools_enable_interface_by_role',
50
+ 'default' => '',
51
+ 'type' => 'multiselect',
52
+ 'class' => 'chosen_select',
53
+ 'options' => wcj_get_user_roles_options(),
54
+ ),
55
  array(
56
  'type' => 'sectionend',
57
  'id' => 'wcj_admin_tools_general_options',
includes/settings/wcj-settings-global-discount.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Global Discount
4
  *
5
- * @version 4.7.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -181,6 +181,14 @@ $settings = array_merge( $settings, array(
181
  'type' => 'title',
182
  'id' => 'wcj_global_discount_advanced_options',
183
  ),
 
 
 
 
 
 
 
 
184
  array(
185
  'title' => __( 'Global Discount in Admin', 'woocommerce-jetpack' ),
186
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
2
  /**
3
  * Booster for WooCommerce - Settings - Global Discount
4
  *
5
+ * @version 4.8.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
181
  'type' => 'title',
182
  'id' => 'wcj_global_discount_advanced_options',
183
  ),
184
+ array(
185
+ 'title' => __( 'Compatibility With Products Shortcode', 'woocommerce-jetpack' ),
186
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
187
+ 'desc_tip' => __( 'This will add compatibility with [products] shortcode that try to get sale products, like [products on_sale="true"]', 'woocommerce-jetpack' ),
188
+ 'id' => 'wcj_global_discount_products_shortcode_compatibility',
189
+ 'default' => 'no',
190
+ 'type' => 'checkbox',
191
+ ),
192
  array(
193
  'title' => __( 'Global Discount in Admin', 'woocommerce-jetpack' ),
194
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
includes/settings/wcj-settings-multicurrency-base-price.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Multicurrency Product Base Price
4
  *
5
- * @version 4.4.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  * @todo (maybe) `if ( isset( $all_currencies[ $currency_from ] ) ) { unset( $all_currencies[ $currency_from ] ); }`
@@ -86,14 +86,6 @@ $settings = array(
86
  'default' => 'no',
87
  'type' => 'checkbox',
88
  ),
89
- array(
90
- 'title' => __( 'Third Party Price Filter Compatibility', 'woocommerce-jetpack' ),
91
- 'desc' => __( 'Add compatibility with Third Party Price Filter Widgets','woocommerce-jetpack' ),
92
- 'desc_tip' => __( 'Requires WooCommerce Price Filter Compatibility option enabled','woocommerce-jetpack' ),
93
- 'id' => 'wcj_multicurrency_base_price_advanced_price_filter_comp_tp',
94
- 'default' => 'no',
95
- 'type' => 'checkbox',
96
- ),
97
  array(
98
  'type' => 'sectionend',
99
  'id' => 'wcj_multicurrency_base_price_options',
2
  /**
3
  * Booster for WooCommerce - Settings - Multicurrency Product Base Price
4
  *
5
+ * @version 4.8.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  * @todo (maybe) `if ( isset( $all_currencies[ $currency_from ] ) ) { unset( $all_currencies[ $currency_from ] ); }`
86
  'default' => 'no',
87
  'type' => 'checkbox',
88
  ),
 
 
 
 
 
 
 
 
89
  array(
90
  'type' => 'sectionend',
91
  'id' => 'wcj_multicurrency_base_price_options',
includes/settings/wcj-settings-my-account.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - My Account
4
  *
5
- * @version 4.3.0
6
  * @since 2.9.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -162,6 +162,14 @@ for ( $i = 1; $i <= apply_filters( 'booster_option', 1, get_option( 'wcj_my_acco
162
  'type' => 'text',
163
  'id' => "wcj_my_account_custom_pages_title[{$i}]",
164
  ),
 
 
 
 
 
 
 
 
165
  array(
166
  'title' => __( 'Content', 'woocommerce-jetpack' ),
167
  'desc_tip' => __( 'You can use HTML and/or shortcodes here.', 'woocommerce-jetpack' ),
2
  /**
3
  * Booster for WooCommerce - Settings - My Account
4
  *
5
+ * @version 4.8.0
6
  * @since 2.9.0
7
  * @author Algoritmika Ltd.
8
  */
162
  'type' => 'text',
163
  'id' => "wcj_my_account_custom_pages_title[{$i}]",
164
  ),
165
+ array(
166
+ 'title' => __( 'Endpoint', 'woocommerce-jetpack' ),
167
+ 'desc' => apply_filters( 'booster_message', '', 'desc' ),
168
+ 'custom_attributes' => apply_filters( 'booster_message', '', 'disabled' ),
169
+ 'desc_tip' => __( 'The Custom Page url, after /my-account/', 'woocommerce-jetpack' ) . '<br /><br />' . sprintf( __( 'If empty, it will be added "?section=your-page" after /my-account/', 'woocommerce-jetpack' ) ),
170
+ 'type' => 'text',
171
+ 'id' => "wcj_my_account_custom_pages_endpoint[{$i}]",
172
+ ),
173
  array(
174
  'title' => __( 'Content', 'woocommerce-jetpack' ),
175
  'desc_tip' => __( 'You can use HTML and/or shortcodes here.', 'woocommerce-jetpack' ),
includes/settings/wcj-settings-order-custom-statuses.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce Settings - Order Custom Statuses
4
  *
5
- * @version 4.0.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -50,6 +50,16 @@ return array(
50
  'type' => 'checkbox',
51
  'custom_attributes' => apply_filters( 'booster_message', '', 'disabled' ),
52
  ),
 
 
 
 
 
 
 
 
 
 
53
  array(
54
  'title' => __( '"Processing" and "Complete" Action Buttons', 'woocommerce-jetpack' ),
55
  'desc_tip' => __( 'By default, when order has custom status, "Processing" and "Complete" action buttons are hidden. You can enable it here. Possible values are: Show both; Show "Processing" only; Show "Complete" only; Hide (default).', 'woocommerce-jetpack' ),
2
  /**
3
  * Booster for WooCommerce Settings - Order Custom Statuses
4
  *
5
+ * @version 4.8.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
50
  'type' => 'checkbox',
51
  'custom_attributes' => apply_filters( 'booster_message', '', 'disabled' ),
52
  ),
53
+ array(
54
+ 'title' => __( 'Remove Status Prefix', 'woocommerce-jetpack' ),
55
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
56
+ 'desc_tip' => __( 'Removes the <code>wc-</code> prefix from custom statuses.', 'woocommerce-jetpack' ) . ' ' . __( 'Enable it if you can\'t see the orders or the statuses.', 'woocommerce-jetpack' ) . ' ' .
57
+ apply_filters( 'booster_message', '', 'desc' ),
58
+ 'id' => 'wcj_orders_custom_statuses_remove_prefix',
59
+ 'default' => 'no',
60
+ 'type' => 'checkbox',
61
+ 'custom_attributes' => apply_filters( 'booster_message', '', 'disabled' ),
62
+ ),
63
  array(
64
  'title' => __( '"Processing" and "Complete" Action Buttons', 'woocommerce-jetpack' ),
65
  'desc_tip' => __( 'By default, when order has custom status, "Processing" and "Complete" action buttons are hidden. You can enable it here. Possible values are: Show both; Show "Processing" only; Show "Complete" only; Hide (default).', 'woocommerce-jetpack' ),
includes/settings/wcj-settings-payment-gateways-fees.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Gateways Fees and Discounts
4
  *
5
- * @version 4.1.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -10,7 +10,26 @@
10
  if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
11
 
12
  $products = wcj_get_products();
13
- $settings = array();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  $available_gateways = WC()->payment_gateways->payment_gateways();
15
  foreach ( $available_gateways as $key => $gateway ) {
16
  $settings = array_merge( $settings, array(
2
  /**
3
  * Booster for WooCommerce - Settings - Gateways Fees and Discounts
4
  *
5
+ * @version 4.8.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
10
  if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
11
 
12
  $products = wcj_get_products();
13
+ $settings = array(
14
+ array(
15
+ 'title' => __( 'General Options', 'woocommerce-jetpack' ),
16
+ 'type' => 'title',
17
+ 'id' => "wcj_gateways_fees",
18
+ ),
19
+ array(
20
+ 'title' => __( 'Force Default Payment Gateway', 'woocommerce-jetpack' ),
21
+ 'desc' => empty( $message = apply_filters( 'booster_message', '', 'desc' ) ) ? __( 'Enable', 'woocommerce-jetpack' ) : $message,
22
+ 'custom_attributes' => apply_filters( 'booster_message', '', 'disabled' ),
23
+ 'desc_tip' => sprintf( __( 'Pre-sets the default available payment gateway on cart and checkout pages.' ) . '<br />' . __( 'The chosen payment will be the first one from the <a href="%s">Payments</a> page', 'woocommerce-jetpack' ), admin_url( 'admin.php?page=wc-settings&tab=checkout' ) ),
24
+ 'type' => 'checkbox',
25
+ 'default' => 'no',
26
+ 'id' => "wcj_gateways_fees_force_default_payment_gateway",
27
+ ),
28
+ array(
29
+ 'type' => 'sectionend',
30
+ 'id' => "wcj_gateways_fees",
31
+ ),
32
+ );
33
  $available_gateways = WC()->payment_gateways->payment_gateways();
34
  foreach ( $available_gateways as $key => $gateway ) {
35
  $settings = array_merge( $settings, array(
includes/settings/wcj-settings-price-by-country.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Prices and Currencies by Country
4
  *
5
- * @version 4.4.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -156,6 +156,23 @@ $settings = array(
156
  'type' => 'sectionend',
157
  'id' => 'wcj_price_by_country_options',
158
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
159
  array(
160
  'title' => __( 'Advanced', 'woocommerce-jetpack' ),
161
  'type' => 'title',
2
  /**
3
  * Booster for WooCommerce - Settings - Prices and Currencies by Country
4
  *
5
+ * @version 4.8.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
156
  'type' => 'sectionend',
157
  'id' => 'wcj_price_by_country_options',
158
  ),
159
+ array(
160
+ 'title' => __( 'Compatibility', 'woocommerce-jetpack' ),
161
+ 'type' => 'title',
162
+ 'id' => 'wcj_price_by_country_compatibility',
163
+ ),
164
+ array(
165
+ 'title' => __( 'WooCommerce Coupons', 'woocommerce-jetpack' ),
166
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
167
+ 'desc_tip' => __( 'When a fixed coupon is used its value changes according to the current currency', 'woocommerce-jetpack' ),
168
+ 'id' => 'wcj_price_by_country_compatibility_wc_coupons',
169
+ 'default' => 'no',
170
+ 'type' => 'checkbox',
171
+ ),
172
+ array(
173
+ 'type' => 'sectionend',
174
+ 'id' => 'wcj_price_by_country_compatibility',
175
+ ),
176
  array(
177
  'title' => __( 'Advanced', 'woocommerce-jetpack' ),
178
  'type' => 'title',
includes/settings/wcj-settings-product-addons.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Product Addons
4
  *
5
- * @version 4.7.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  * @todo (maybe) add `woocommerce_payment_complete` to `$qty_triggers` (also maybe add this trigger to "PDF Invoicing" module)
@@ -368,7 +368,7 @@ $settings = array_merge( $settings, array(
368
  ),
369
  array(
370
  'title' => __( 'Each Addon', 'woocommerce-jetpack' ),
371
- 'desc' => wcj_message_replaced_values( array( '%addon_label%', '%addon_price%' ) ),
372
  'id' => 'wcj_product_addons_cart_format_each_addon',
373
  'default' => '<dt>%addon_label%:</dt><dd>%addon_price%</dd>',
374
  'type' => 'textarea',
@@ -399,7 +399,7 @@ $settings = array_merge( $settings, array(
399
  ),
400
  array(
401
  'title' => __( 'Each Addon', 'woocommerce-jetpack' ),
402
- 'desc' => wcj_message_replaced_values( array( '%addon_label%', '%addon_price%' ) ),
403
  'id' => 'wcj_product_addons_order_details_format_each_addon',
404
  'default' => '&nbsp;| %addon_label%: %addon_price%',
405
  'type' => 'textarea',
2
  /**
3
  * Booster for WooCommerce - Settings - Product Addons
4
  *
5
+ * @version 4.8.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  * @todo (maybe) add `woocommerce_payment_complete` to `$qty_triggers` (also maybe add this trigger to "PDF Invoicing" module)
368
  ),
369
  array(
370
  'title' => __( 'Each Addon', 'woocommerce-jetpack' ),
371
+ 'desc' => wcj_message_replaced_values( array( '%addon_label%', '%addon_price%', '%addon_title%' ) ),
372
  'id' => 'wcj_product_addons_cart_format_each_addon',
373
  'default' => '<dt>%addon_label%:</dt><dd>%addon_price%</dd>',
374
  'type' => 'textarea',
399
  ),
400
  array(
401
  'title' => __( 'Each Addon', 'woocommerce-jetpack' ),
402
+ 'desc' => wcj_message_replaced_values( array( '%addon_label%', '%addon_price%', '%addon_title%' ) ),
403
  'id' => 'wcj_product_addons_order_details_format_each_addon',
404
  'default' => '&nbsp;| %addon_label%: %addon_price%',
405
  'type' => 'textarea',
includes/settings/wcj-settings-shipping-by-condition.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Shipping by Condition
4
  *
5
- * @version 4.0.0
6
  * @since 3.2.1
7
  * @author Algoritmika Ltd.
8
  * @todo [dev] hide settings for the disabled subsection
@@ -15,6 +15,18 @@ if ( ! defined( 'ABSPATH' ) ) {
15
  $use_shipping_instances = ( 'yes' === get_option( 'wcj_' . $this->id . '_use_shipping_instance', 'no' ) );
16
  $shipping_methods = ( $use_shipping_instances ? wcj_get_shipping_methods_instances( true ) : WC()->shipping()->load_shipping_methods() );
17
  $settings = array();
 
 
 
 
 
 
 
 
 
 
 
 
18
  $settings = array_merge( $settings, array(
19
  array(
20
  'title' => __( 'General Options', 'woocommerce-jetpack' ),
@@ -30,11 +42,13 @@ $settings = array_merge( $settings, array(
30
  'id' => 'wcj_' . $this->id . '_use_shipping_instance',
31
  'default' => 'no',
32
  ),
 
33
  array(
34
  'type' => 'sectionend',
35
  'id' => 'wcj_' . $this->id . '_general_options',
36
  ),
37
  ) );
 
38
  foreach ( $this->condition_options as $options_id => $options_data ) {
39
  $settings = array_merge( $settings, array(
40
  array(
2
  /**
3
  * Booster for WooCommerce - Settings - Shipping by Condition
4
  *
5
+ * @version 4.8.0
6
  * @since 3.2.1
7
  * @author Algoritmika Ltd.
8
  * @todo [dev] hide settings for the disabled subsection
15
  $use_shipping_instances = ( 'yes' === get_option( 'wcj_' . $this->id . '_use_shipping_instance', 'no' ) );
16
  $shipping_methods = ( $use_shipping_instances ? wcj_get_shipping_methods_instances( true ) : WC()->shipping()->load_shipping_methods() );
17
  $settings = array();
18
+
19
+ // Multiple Roles Option
20
+ $check_multiple_roles_option = array(
21
+ 'title' => __( 'Multiple Role Checking', 'woocommerce-jetpack' ),
22
+ 'type' => 'checkbox',
23
+ 'default' => 'no',
24
+ 'desc_tip' => __( 'Enable if you have some plugin that allows users with multiple roles like "User Role Editor".', 'woocommerce-jetpack' ),
25
+ 'desc' => empty( $message = apply_filters( 'booster_message', '', 'desc' ) ) ? __( 'Enable', 'woocommerce-jetpack' ) : $message,
26
+ 'custom_attributes' => apply_filters( 'booster_message', '', 'disabled' ),
27
+ 'id' => 'wcj_' . $this->id . '_check_multiple_roles',
28
+ );
29
+
30
  $settings = array_merge( $settings, array(
31
  array(
32
  'title' => __( 'General Options', 'woocommerce-jetpack' ),
42
  'id' => 'wcj_' . $this->id . '_use_shipping_instance',
43
  'default' => 'no',
44
  ),
45
+ $this->add_multiple_roles_option() ? $check_multiple_roles_option : array(),
46
  array(
47
  'type' => 'sectionend',
48
  'id' => 'wcj_' . $this->id . '_general_options',
49
  ),
50
  ) );
51
+
52
  foreach ( $this->condition_options as $options_id => $options_data ) {
53
  $settings = array_merge( $settings, array(
54
  array(
langs/woocommerce-jetpack.pot CHANGED
@@ -45,7 +45,7 @@ msgstr ""
45
  #: includes/class-wcj-track-users.php:251
46
  #: includes/classes/class-wcj-module.php:532
47
  #: includes/classes/class-wcj-module.php:732
48
- #: includes/settings/wcj-settings-price-by-country.php:178
49
  msgid "Booster"
50
  msgstr ""
51
 
@@ -98,14 +98,14 @@ msgstr ""
98
  #: includes/admin/class-wc-settings-jetpack.php:217
99
  #: includes/class-wcj-admin-bar.php:384
100
  #: includes/settings/wcj-settings-emails-verification.php:146
101
- #: includes/settings/wcj-settings-price-by-country.php:177
102
  msgid "WooCommerce"
103
  msgstr ""
104
 
105
  #: includes/admin/class-wc-settings-jetpack.php:219
106
  #: includes/admin/class-wc-settings-jetpack.php:414
107
  #: includes/class-wcj-admin-bar.php:168 includes/class-wcj-admin-bar.php:508
108
- #: includes/class-wcj-admin-bar.php:608 includes/core/class-wcj-admin.php:113
109
  msgid "Settings"
110
  msgstr ""
111
 
@@ -168,13 +168,13 @@ msgstr ""
168
 
169
  #: includes/admin/class-wc-settings-jetpack.php:372
170
  #: includes/admin/class-wc-settings-jetpack.php:379
171
- #: includes/admin/class-wcj-tools.php:72
172
  msgid "Module"
173
  msgstr ""
174
 
175
  #: includes/admin/class-wc-settings-jetpack.php:373
176
  #: includes/admin/class-wc-settings-jetpack.php:380
177
- #: includes/admin/class-wcj-tools.php:73
178
  #: includes/export/class-wcj-fields-helper.php:293
179
  #: includes/gateways/class-wc-gateway-wcj-custom.php:63
180
  #: includes/settings/wcj-settings-checkout-custom-fields.php:172
@@ -241,7 +241,7 @@ msgid "Gateways per Product or Category"
241
  msgstr ""
242
 
243
  #: includes/admin/class-wc-settings-jetpack.php:486
244
- #: includes/class-wcj-global-discount.php:27
245
  #: includes/settings/wcj-settings-product-addons.php:254
246
  msgid "Global Discount"
247
  msgstr ""
@@ -281,7 +281,7 @@ msgid "Use List Instead of Comma Separated Text for Products Tags in Settings"
281
  msgstr ""
282
 
283
  #: includes/admin/class-wc-settings-jetpack.php:532
284
- #: includes/core/class-wcj-admin.php:97
285
  msgid "Booster for WooCommerce"
286
  msgstr ""
287
 
@@ -327,23 +327,23 @@ msgstr ""
327
  msgid "%d options successfully deleted."
328
  msgstr ""
329
 
330
- #: includes/admin/class-wcj-tools.php:32
331
  msgid "Booster for WooCommerce Tools"
332
  msgstr ""
333
 
334
- #: includes/admin/class-wcj-tools.php:33
335
  msgid "Booster Tools"
336
  msgstr ""
337
 
338
- #: includes/admin/class-wcj-tools.php:51
339
  msgid "Tools Dashboard"
340
  msgstr ""
341
 
342
- #: includes/admin/class-wcj-tools.php:65
343
  msgid "Booster for WooCommerce Tools - Dashboard"
344
  msgstr ""
345
 
346
- #: includes/admin/class-wcj-tools.php:66
347
  msgid ""
348
  "This dashboard lets you check statuses and short descriptions of all "
349
  "available Booster for WooCommerce tools. Tools can be enabled through "
@@ -351,11 +351,11 @@ msgid ""
351
  "above."
352
  msgstr ""
353
 
354
- #: includes/admin/class-wcj-tools.php:71
355
  msgid "Tool"
356
  msgstr ""
357
 
358
- #: includes/admin/class-wcj-tools.php:74
359
  #: includes/class-wcj-product-by-user.php:197
360
  #: includes/export/class-wcj-fields-helper.php:294
361
  msgid "Status"
@@ -853,37 +853,37 @@ msgstr ""
853
  msgid "All Products and All Attributes."
854
  msgstr ""
855
 
856
- #: includes/class-wcj-admin-tools.php:126
857
  #: includes/settings/wcj-settings-export.php:157
858
  #: includes/settings/wcj-settings-export.php:236
859
  msgid "Product Meta"
860
  msgstr ""
861
 
862
- #: includes/class-wcj-admin-tools.php:143
863
  #: includes/settings/wcj-settings-export.php:86
864
  #: includes/settings/wcj-settings-export.php:154
865
  msgid "Order Meta"
866
  msgstr ""
867
 
868
- #: includes/class-wcj-admin-tools.php:177
869
  msgid "Order Items Meta"
870
  msgstr ""
871
 
872
- #: includes/class-wcj-admin-tools.php:179
873
  msgid "Item Key"
874
  msgstr ""
875
 
876
- #: includes/class-wcj-admin-tools.php:179
877
  msgid "Item Meta Key"
878
  msgstr ""
879
 
880
- #: includes/class-wcj-admin-tools.php:179
881
  msgid "Item Meta Value"
882
  msgstr ""
883
 
884
- #: includes/class-wcj-admin-tools.php:214
885
- #: includes/class-wcj-admin-tools.php:256
886
- #: includes/class-wcj-admin-tools.php:265
887
  #: includes/class-wcj-product-bulk-meta-editor.php:339
888
  #: includes/class-wcj-product-bulk-price-converter.php:148
889
  #: includes/class-wcj-sku.php:668
@@ -892,14 +892,14 @@ msgstr ""
892
  msgid "Product"
893
  msgstr ""
894
 
895
- #: includes/class-wcj-admin-tools.php:215
896
- #: includes/class-wcj-admin-tools.php:257
897
- #: includes/class-wcj-admin-tools.php:266
898
  #: includes/reports/wcj-class-reports-stock.php:270
899
  msgid "Category"
900
  msgstr ""
901
 
902
- #: includes/class-wcj-admin-tools.php:282
903
  msgid "Total Products:"
904
  msgstr ""
905
 
@@ -1932,8 +1932,8 @@ msgstr ""
1932
  #: includes/settings/wcj-settings-export.php:27
1933
  #: includes/settings/wcj-settings-order-custom-statuses.php:29
1934
  #: includes/settings/wcj-settings-order-custom-statuses.php:37
1935
- #: includes/settings/wcj-settings-order-custom-statuses.php:70
1936
- #: includes/settings/wcj-settings-order-custom-statuses.php:97
1937
  #: includes/settings/wcj-settings-order-min-amount.php:53
1938
  #: includes/settings/wcj-settings-orders.php:132
1939
  #: includes/settings/wcj-settings-orders.php:159
@@ -1954,7 +1954,7 @@ msgstr ""
1954
  msgid "Add"
1955
  msgstr ""
1956
 
1957
- #: includes/class-wcj-global-discount.php:28
1958
  msgid "Add global discount to all products."
1959
  msgstr ""
1960
 
@@ -2131,7 +2131,7 @@ msgid "Logout"
2131
  msgstr ""
2132
 
2133
  #: includes/class-wcj-my-account.php:43
2134
- #: includes/settings/wcj-settings-my-account.php:302
2135
  msgid "View order"
2136
  msgstr ""
2137
 
@@ -2143,12 +2143,12 @@ msgstr ""
2143
  msgid "Lost password"
2144
  msgstr ""
2145
 
2146
- #: includes/class-wcj-my-account.php:227
2147
  #, php-format
2148
  msgid "Hello %1$s (not %1$s? <a href=\"%2$s\">Log out</a>)"
2149
  msgstr ""
2150
 
2151
- #: includes/class-wcj-my-account.php:237
2152
  #, php-format
2153
  msgid ""
2154
  "From your account dashboard you can view your <a href=\"%1$s\">recent "
@@ -2156,11 +2156,11 @@ msgid ""
2156
  "and <a href=\"%3$s\">edit your password and account details</a>."
2157
  msgstr ""
2158
 
2159
- #: includes/class-wcj-my-account.php:343
2160
  msgid "User role"
2161
  msgstr ""
2162
 
2163
- #: includes/class-wcj-my-account.php:423
2164
  #: includes/class-wcj-product-bulk-meta-editor.php:279
2165
  #: includes/class-wcj-product-by-user.php:206
2166
  #: includes/class-wcj-purchase-data.php:94
@@ -2422,32 +2422,32 @@ msgid ""
2422
  "Tool lets you add, edit or delete any custom status for WooCommerce orders."
2423
  msgstr ""
2424
 
2425
- #: includes/class-wcj-order-custom-statuses.php:158
2426
  #, php-format
2427
  msgid "Change order status to %s"
2428
  msgstr ""
2429
 
2430
- #: includes/class-wcj-order-custom-statuses.php:168
2431
  msgid "Change status: "
2432
  msgstr ""
2433
 
2434
- #: includes/class-wcj-order-custom-statuses.php:208
2435
  msgid "Processing"
2436
  msgstr ""
2437
 
2438
- #: includes/class-wcj-order-custom-statuses.php:218
2439
  msgid "Complete"
2440
  msgstr ""
2441
 
2442
- #: includes/class-wcj-order-custom-statuses.php:323
2443
  #, php-format
2444
  msgid " <span class=\"count\">(%s)</span>"
2445
  msgid_plural " <span class=\"count\">(%s)</span>"
2446
  msgstr[0] ""
2447
  msgstr[1] ""
2448
 
2449
- #: includes/class-wcj-order-custom-statuses.php:397
2450
- #: includes/class-wcj-order-custom-statuses.php:399
2451
  msgid "Mark"
2452
  msgstr ""
2453
 
@@ -2772,7 +2772,7 @@ msgstr ""
2772
  msgid "Change product price and currency automatically by customer's country."
2773
  msgstr ""
2774
 
2775
- #: includes/class-wcj-price-by-country.php:99
2776
  msgid "Price filter widget product prices recalculated."
2777
  msgstr ""
2778
 
@@ -2863,10 +2863,10 @@ msgstr ""
2863
  #: includes/settings/wcj-settings-admin-tools.php:22
2864
  #: includes/settings/wcj-settings-admin-tools.php:29
2865
  #: includes/settings/wcj-settings-admin-tools.php:38
2866
- #: includes/settings/wcj-settings-admin-tools.php:56
2867
- #: includes/settings/wcj-settings-admin-tools.php:73
2868
- #: includes/settings/wcj-settings-admin-tools.php:81
2869
- #: includes/settings/wcj-settings-admin-tools.php:89
2870
  #: includes/settings/wcj-settings-breadcrumbs.php:20
2871
  #: includes/settings/wcj-settings-call-for-price.php:79
2872
  #: includes/settings/wcj-settings-cart-customization.php:34
@@ -2916,6 +2916,7 @@ msgstr ""
2916
  #: includes/settings/wcj-settings-general.php:197
2917
  #: includes/settings/wcj-settings-global-discount.php:57
2918
  #: includes/settings/wcj-settings-global-discount.php:186
 
2919
  #: includes/settings/wcj-settings-left-to-free-shipping.php:28
2920
  #: includes/settings/wcj-settings-left-to-free-shipping.php:57
2921
  #: includes/settings/wcj-settings-left-to-free-shipping.php:91
@@ -2939,7 +2940,8 @@ msgstr ""
2939
  #: includes/settings/wcj-settings-my-account.php:104
2940
  #: includes/settings/wcj-settings-offer-price.php:27
2941
  #: includes/settings/wcj-settings-order-custom-statuses.php:45
2942
- #: includes/settings/wcj-settings-order-custom-statuses.php:88
 
2943
  #: includes/settings/wcj-settings-order-numbers.php:97
2944
  #: includes/settings/wcj-settings-order-numbers.php:105
2945
  #: includes/settings/wcj-settings-order-numbers.php:112
@@ -2958,8 +2960,9 @@ msgstr ""
2958
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:23
2959
  #: includes/settings/wcj-settings-payment-gateways-by-user-role.php:23
2960
  #: includes/settings/wcj-settings-payment-gateways-currency.php:95
2961
- #: includes/settings/wcj-settings-payment-gateways-fees.php:67
2962
- #: includes/settings/wcj-settings-payment-gateways-fees.php:83
 
2963
  #: includes/settings/wcj-settings-payment-gateways-per-category.php:25
2964
  #: includes/settings/wcj-settings-pdf-invoicing-advanced.php:55
2965
  #: includes/settings/wcj-settings-pdf-invoicing-display.php:118
@@ -2973,6 +2976,7 @@ msgstr ""
2973
  #: includes/settings/wcj-settings-price-by-country.php:106
2974
  #: includes/settings/wcj-settings-price-by-country.php:133
2975
  #: includes/settings/wcj-settings-price-by-country.php:142
 
2976
  #: includes/settings/wcj-settings-price-by-user-role.php:19
2977
  #: includes/settings/wcj-settings-price-by-user-role.php:46
2978
  #: includes/settings/wcj-settings-price-by-user-role.php:93
@@ -3037,7 +3041,8 @@ msgstr ""
3037
  #: includes/settings/wcj-settings-related-products.php:112
3038
  #: includes/settings/wcj-settings-related-products.php:119
3039
  #: includes/settings/wcj-settings-related-products.php:149
3040
- #: includes/settings/wcj-settings-shipping-by-condition.php:26
 
3041
  #: includes/settings/wcj-settings-shipping-by-order-amount.php:21
3042
  #: includes/settings/wcj-settings-shipping-by-order-qty.php:21
3043
  #: includes/settings/wcj-settings-shipping-calculator.php:20
@@ -3170,11 +3175,11 @@ msgstr ""
3170
  msgid "Add (paid/free/discount) addons to products."
3171
  msgstr ""
3172
 
3173
- #: includes/class-wcj-product-addons.php:283
3174
  msgid "Some of the required addons are not selected!"
3175
  msgstr ""
3176
 
3177
- #: includes/class-wcj-product-addons.php:298
3178
  msgid ""
3179
  "Booster: Free plugin's version is limited to only three products with per "
3180
  "product addons enabled at a time. You will need to get <a href=\"https://"
@@ -3820,7 +3825,7 @@ msgstr ""
3820
  #: includes/settings/wcj-settings-left-to-free-shipping.php:73
3821
  #: includes/settings/wcj-settings-left-to-free-shipping.php:107
3822
  #: includes/settings/wcj-settings-mini-cart.php:46
3823
- #: includes/settings/wcj-settings-my-account.php:261
3824
  #: includes/settings/wcj-settings-product-add-to-cart.php:286
3825
  #: includes/settings/wcj-settings-product-add-to-cart.php:321
3826
  #: includes/settings/wcj-settings-product-custom-info.php:96
@@ -4013,8 +4018,8 @@ msgstr ""
4013
  #: includes/settings/wcj-settings-left-to-free-shipping.php:65
4014
  #: includes/settings/wcj-settings-left-to-free-shipping.php:99
4015
  #: includes/settings/wcj-settings-mini-cart.php:39
4016
- #: includes/settings/wcj-settings-my-account.php:166
4017
- #: includes/settings/wcj-settings-my-account.php:253
4018
  #: includes/settings/wcj-settings-product-custom-info.php:88
4019
  #: includes/settings/wcj-settings-product-tabs.php:92
4020
  #: includes/widgets/class-wcj-widget-left-to-free-shipping.php:59
@@ -4445,7 +4450,7 @@ msgstr ""
4445
 
4446
  #: includes/class-wcj-shipping-by-products.php:205
4447
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:25
4448
- #: includes/settings/wcj-settings-shipping-by-condition.php:28
4449
  #: includes/settings/wcj-settings-shipping-by-order-amount.php:23
4450
  #: includes/settings/wcj-settings-shipping-by-order-qty.php:23
4451
  #: includes/settings/wcj-settings-shipping-description.php:61
@@ -4962,38 +4967,38 @@ msgstr ""
4962
  msgid "Page %page_number% / %total_pages%"
4963
  msgstr ""
4964
 
4965
- #: includes/core/class-wcj-admin.php:57
4966
  msgid "Please update <strong>Booster Plus for WooCommerce</strong> plugin."
4967
  msgstr ""
4968
 
4969
- #: includes/core/class-wcj-admin.php:59
4970
  #, php-format
4971
  msgid ""
4972
  "Visit <a target=\"_blank\" href=\"%s\">your account page</a> on booster.io "
4973
  "to download the latest Booster Plus version."
4974
  msgstr ""
4975
 
4976
- #: includes/core/class-wcj-admin.php:63
4977
  #, php-format
4978
  msgid "Click <a target=\"_blank\" href=\"%s\">here</a> for more info."
4979
  msgstr ""
4980
 
4981
- #: includes/core/class-wcj-admin.php:81
4982
  #, php-format
4983
  msgid ""
4984
  "If you like <strong>Booster for WooCommerce</strong> please leave us a %s "
4985
  "rating. Thank you, we couldn't have done it without you!"
4986
  msgstr ""
4987
 
4988
- #: includes/core/class-wcj-admin.php:98
4989
  msgid "Booster Settings"
4990
  msgstr ""
4991
 
4992
- #: includes/core/class-wcj-admin.php:114
4993
  msgid "Docs"
4994
  msgstr ""
4995
 
4996
- #: includes/core/class-wcj-admin.php:117
4997
  msgid "Unlock all"
4998
  msgstr ""
4999
 
@@ -7618,7 +7623,7 @@ msgstr ""
7618
  #: includes/settings/wcj-settings-multicurrency-base-price.php:63
7619
  #: includes/settings/wcj-settings-multicurrency.php:162
7620
  #: includes/settings/wcj-settings-order-min-amount.php:69
7621
- #: includes/settings/wcj-settings-price-by-country.php:160
7622
  #: includes/settings/wcj-settings-price-by-user-role.php:106
7623
  #: includes/settings/wcj-settings-product-addons.php:230
7624
  msgid "Advanced"
@@ -7855,18 +7860,18 @@ msgstr ""
7855
 
7856
  #: includes/price-by-country/class-wcj-price-by-country-local.php:111
7857
  #: includes/settings/meta-box/wcj-settings-meta-box-price-by-country.php:67
7858
- #: includes/settings/wcj-settings-price-by-country.php:338
7859
  msgid "Make empty price"
7860
  msgstr ""
7861
 
7862
  #: includes/price-by-country/class-wcj-price-by-country-local.php:215
7863
  #: includes/settings/meta-box/wcj-settings-meta-box-price-by-country.php:17
7864
  #: includes/settings/wcj-settings-add-to-cart.php:50
7865
- #: includes/settings/wcj-settings-price-by-country.php:232
7866
- #: includes/settings/wcj-settings-price-by-country.php:233
7867
- #: includes/settings/wcj-settings-price-by-country.php:238
7868
- #: includes/settings/wcj-settings-price-by-country.php:286
7869
- #: includes/settings/wcj-settings-price-by-country.php:329
7870
  msgid "Group"
7871
  msgstr ""
7872
 
@@ -8180,9 +8185,9 @@ msgstr ""
8180
  #: includes/settings/wcj-settings-checkout-customization.php:107
8181
  #: includes/settings/wcj-settings-cross-sells.php:87
8182
  #: includes/settings/wcj-settings-currency.php:22
8183
- #: includes/settings/wcj-settings-my-account.php:202
8184
- #: includes/settings/wcj-settings-my-account.php:209
8185
- #: includes/settings/wcj-settings-order-custom-statuses.php:63
8186
  #: includes/settings/wcj-settings-pdf-invoicing-advanced.php:48
8187
  #: includes/settings/wcj-settings-product-addons.php:291
8188
  #: includes/settings/wcj-settings-product-bookings.php:100
@@ -8213,9 +8218,9 @@ msgstr ""
8213
  #: includes/settings/meta-box/wcj-settings-meta-box-add-to-cart-button-visibility.php:30
8214
  #: includes/settings/meta-box/wcj-settings-meta-box-add-to-cart-button-visibility.php:49
8215
  #: includes/settings/wcj-settings-checkout-customization.php:196
8216
- #: includes/settings/wcj-settings-my-account.php:167
8217
- #: includes/settings/wcj-settings-my-account.php:194
8218
- #: includes/settings/wcj-settings-my-account.php:254
8219
  #: includes/settings/wcj-settings-sale-flash.php:27
8220
  #: includes/settings/wcj-settings-sale-flash.php:111
8221
  msgid "You can use HTML and/or shortcodes here."
@@ -8321,7 +8326,7 @@ msgstr ""
8321
  #: includes/settings/meta-box/wcj-settings-meta-box-offer-price.php:25
8322
  #: includes/settings/wcj-settings-currency-exchange-rates.php:60
8323
  #: includes/settings/wcj-settings-offer-price.php:168
8324
- #: includes/settings/wcj-settings-payment-gateways-fees.php:74
8325
  #: includes/settings/wcj-settings-product-by-user.php:70
8326
  msgid "Number of decimals"
8327
  msgstr ""
@@ -8701,7 +8706,7 @@ msgstr ""
8701
  #: includes/settings/meta-box/wcj-settings-meta-box-wholesale-price.php:18
8702
  #: includes/settings/wcj-settings-checkout-fees.php:72
8703
  #: includes/settings/wcj-settings-global-discount.php:69
8704
- #: includes/settings/wcj-settings-payment-gateways-fees.php:38
8705
  #: includes/settings/wcj-settings-purchase-data.php:89
8706
  #: includes/settings/wcj-settings-wholesale-price.php:80
8707
  msgid "Percent"
@@ -8710,7 +8715,7 @@ msgstr ""
8710
  #: includes/settings/meta-box/wcj-settings-meta-box-wholesale-price.php:19
8711
  #: includes/settings/wcj-settings-checkout-fees.php:71
8712
  #: includes/settings/wcj-settings-global-discount.php:70
8713
- #: includes/settings/wcj-settings-payment-gateways-fees.php:37
8714
  #: includes/settings/wcj-settings-price-by-user-role.php:31
8715
  #: includes/settings/wcj-settings-purchase-data.php:88
8716
  #: includes/settings/wcj-settings-wholesale-price.php:81
@@ -8784,8 +8789,8 @@ msgstr ""
8784
  #: includes/settings/wcj-settings-max-products-per-user.php:43
8785
  #: includes/settings/wcj-settings-my-account.php:67
8786
  #: includes/settings/wcj-settings-my-account.php:135
8787
- #: includes/settings/wcj-settings-my-account.php:186
8788
- #: includes/settings/wcj-settings-my-account.php:227
8789
  #: includes/settings/wcj-settings-order-quantities.php:85
8790
  #: includes/settings/wcj-settings-order-quantities.php:143
8791
  #: includes/settings/wcj-settings-order-quantities.php:201
@@ -8797,7 +8802,7 @@ msgstr ""
8797
  #: includes/settings/wcj-settings-sale-flash.php:20
8798
  #: includes/settings/wcj-settings-sale-flash.php:65
8799
  #: includes/settings/wcj-settings-sale-flash.php:90
8800
- #: includes/settings/wcj-settings-shipping-by-condition.php:48
8801
  #: includes/settings/wcj-settings-shipping-options.php:21
8802
  #: includes/settings/wcj-settings-stock.php:20
8803
  #: includes/settings/wcj-settings-stock.php:87
@@ -9010,7 +9015,7 @@ msgstr ""
9010
  #: includes/settings/wcj-settings-add-to-cart.php:156
9011
  #: includes/settings/wcj-settings-add-to-cart.php:213
9012
  #: includes/settings/wcj-settings-add-to-cart.php:222
9013
- #: includes/settings/wcj-settings-payment-gateways-fees.php:24
9014
  #: includes/settings/wcj-settings-product-custom-info.php:191
9015
  msgid "Leave blank to disable."
9016
  msgstr ""
@@ -9311,57 +9316,73 @@ msgstr ""
9311
  msgid "Will remove admin notices (including the Connect notice)."
9312
  msgstr ""
9313
 
9314
- #: includes/settings/wcj-settings-admin-tools.php:49
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9315
  msgid "Orders Options"
9316
  msgstr ""
9317
 
9318
- #: includes/settings/wcj-settings-admin-tools.php:54
9319
  msgid "Show Order Meta"
9320
  msgstr ""
9321
 
9322
- #: includes/settings/wcj-settings-admin-tools.php:55
9323
  msgid "Will show order meta table in meta box."
9324
  msgstr ""
9325
 
9326
- #: includes/settings/wcj-settings-admin-tools.php:66
9327
  msgid "Products Options"
9328
  msgstr ""
9329
 
9330
- #: includes/settings/wcj-settings-admin-tools.php:71
9331
  msgid "Show Product Meta"
9332
  msgstr ""
9333
 
9334
- #: includes/settings/wcj-settings-admin-tools.php:72
9335
  msgid "Will show product meta table in meta box."
9336
  msgstr ""
9337
 
9338
- #: includes/settings/wcj-settings-admin-tools.php:79
9339
  msgid "Show Variable Product Pricing Table"
9340
  msgstr ""
9341
 
9342
- #: includes/settings/wcj-settings-admin-tools.php:80
9343
  msgid "Will allow to set all variations prices in single meta box."
9344
  msgstr ""
9345
 
9346
- #: includes/settings/wcj-settings-admin-tools.php:87
9347
  msgid "Product Revisions"
9348
  msgstr ""
9349
 
9350
- #: includes/settings/wcj-settings-admin-tools.php:88
9351
  msgid "Will enable product revisions."
9352
  msgstr ""
9353
 
9354
- #: includes/settings/wcj-settings-admin-tools.php:95
9355
  msgid "JSON Product Search Limit"
9356
  msgstr ""
9357
 
9358
- #: includes/settings/wcj-settings-admin-tools.php:96
9359
  msgid ""
9360
  "This will set the maximum number of products to return on JSON search (e.g. "
9361
  "when setting Upsells and Cross-sells on product edit page)."
9362
  msgstr ""
9363
 
9364
- #: includes/settings/wcj-settings-admin-tools.php:97
9365
  #: includes/settings/wcj-settings-checkout-custom-fields.php:240
9366
  #: includes/settings/wcj-settings-checkout-custom-fields.php:249
9367
  #: includes/settings/wcj-settings-order-quantities.php:208
@@ -9488,7 +9509,7 @@ msgstr ""
9488
  #: includes/settings/wcj-settings-cart.php:24
9489
  #: includes/settings/wcj-settings-checkout-custom-info.php:20
9490
  #: includes/settings/wcj-settings-mini-cart.php:19
9491
- #: includes/settings/wcj-settings-my-account.php:233
9492
  #: includes/settings/wcj-settings-product-custom-info.php:52
9493
  msgid "Total Blocks"
9494
  msgstr ""
@@ -9496,14 +9517,14 @@ msgstr ""
9496
  #: includes/settings/wcj-settings-cart.php:39
9497
  #: includes/settings/wcj-settings-checkout-custom-info.php:36
9498
  #: includes/settings/wcj-settings-mini-cart.php:34
9499
- #: includes/settings/wcj-settings-my-account.php:248
9500
  msgid "Info Block"
9501
  msgstr ""
9502
 
9503
  #: includes/settings/wcj-settings-cart.php:58
9504
  #: includes/settings/wcj-settings-checkout-custom-info.php:85
9505
  #: includes/settings/wcj-settings-mini-cart.php:57
9506
- #: includes/settings/wcj-settings-my-account.php:306
9507
  #: includes/settings/wcj-settings-product-custom-info.php:124
9508
  msgid "Position Order (i.e. Priority)"
9509
  msgstr ""
@@ -9533,11 +9554,12 @@ msgstr ""
9533
  #: includes/settings/wcj-settings-payment-gateways-by-country.php:15
9534
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:17
9535
  #: includes/settings/wcj-settings-payment-gateways-by-user-role.php:14
 
9536
  #: includes/settings/wcj-settings-payment-gateways-min-max.php:15
9537
  #: includes/settings/wcj-settings-payment-gateways-per-category.php:19
9538
  #: includes/settings/wcj-settings-price-formats.php:15
9539
  #: includes/settings/wcj-settings-product-tabs.php:15
9540
- #: includes/settings/wcj-settings-shipping-by-condition.php:20
9541
  #: includes/settings/wcj-settings-shipping-by-order-amount.php:15
9542
  #: includes/settings/wcj-settings-shipping-by-order-qty.php:15
9543
  #: includes/settings/wcj-settings-shipping-time.php:25
@@ -9891,7 +9913,7 @@ msgstr ""
9891
 
9892
  #: includes/settings/wcj-settings-checkout-custom-fields.php:360
9893
  #: includes/settings/wcj-settings-global-discount.php:163
9894
- #: includes/settings/wcj-settings-payment-gateways-fees.php:125
9895
  #: includes/settings/wcj-settings-product-addons.php:149
9896
  #: includes/settings/wcj-settings-related-products.php:244
9897
  msgid "Exclude Products"
@@ -10254,7 +10276,7 @@ msgid "Total Fees"
10254
  msgstr ""
10255
 
10256
  #: includes/settings/wcj-settings-checkout-fees.php:53
10257
- #: includes/settings/wcj-settings-payment-gateways-fees.php:82
10258
  msgid "Taxable"
10259
  msgstr ""
10260
 
@@ -10604,7 +10626,7 @@ msgstr ""
10604
  #: includes/settings/wcj-settings-product-by-date.php:117
10605
  #: includes/settings/wcj-settings-product-custom-info.php:185
10606
  #: includes/settings/wcj-settings-product-input-fields.php:348
10607
- #: includes/settings/wcj-settings-shipping-by-condition.php:108
10608
  msgid "Advanced Options"
10609
  msgstr ""
10610
 
@@ -10896,7 +10918,7 @@ msgstr ""
10896
  #: includes/settings/wcj-settings-multicurrency-base-price.php:22
10897
  #: includes/settings/wcj-settings-multicurrency.php:22
10898
  #: includes/settings/wcj-settings-payment-gateways-currency.php:68
10899
- #: includes/settings/wcj-settings-price-by-country.php:302
10900
  msgid "Exchange Rates Updates"
10901
  msgstr ""
10902
 
@@ -10990,7 +11012,7 @@ msgid "Custom Currency"
10990
  msgstr ""
10991
 
10992
  #: includes/settings/wcj-settings-currency-exchange-rates.php:173
10993
- #: includes/settings/wcj-settings-price-by-country.php:297
10994
  msgid "Exchange Rates"
10995
  msgstr ""
10996
 
@@ -11007,9 +11029,9 @@ msgstr ""
11007
 
11008
  #: includes/settings/wcj-settings-currency-external-products.php:20
11009
  #: includes/settings/wcj-settings-currency-per-product.php:180
11010
- #: includes/settings/wcj-settings-multicurrency-base-price.php:131
11011
  #: includes/settings/wcj-settings-multicurrency.php:234
11012
- #: includes/settings/wcj-settings-price-by-country.php:277
11013
  #: includes/settings/wcj-settings-price-formats.php:59
11014
  msgid "Currency"
11015
  msgstr ""
@@ -11084,7 +11106,7 @@ msgstr ""
11084
  #: includes/settings/wcj-settings-multicurrency-base-price.php:27
11085
  #: includes/settings/wcj-settings-multicurrency.php:28
11086
  #: includes/settings/wcj-settings-payment-gateways-currency.php:73
11087
- #: includes/settings/wcj-settings-price-by-country.php:307
11088
  msgid "Enter Rates Manually"
11089
  msgstr ""
11090
 
@@ -11092,7 +11114,7 @@ msgstr ""
11092
  #: includes/settings/wcj-settings-multicurrency-base-price.php:28
11093
  #: includes/settings/wcj-settings-multicurrency.php:29
11094
  #: includes/settings/wcj-settings-payment-gateways-currency.php:74
11095
- #: includes/settings/wcj-settings-price-by-country.php:308
11096
  msgid "Automatically via Currency Exchange Rates module"
11097
  msgstr ""
11098
 
@@ -11100,7 +11122,7 @@ msgstr ""
11100
  #: includes/settings/wcj-settings-multicurrency-base-price.php:31
11101
  #: includes/settings/wcj-settings-multicurrency.php:32
11102
  #: includes/settings/wcj-settings-payment-gateways-currency.php:77
11103
- #: includes/settings/wcj-settings-price-by-country.php:311
11104
  msgid "Visit"
11105
  msgstr ""
11106
 
@@ -11108,12 +11130,12 @@ msgstr ""
11108
  #: includes/settings/wcj-settings-multicurrency-base-price.php:31
11109
  #: includes/settings/wcj-settings-multicurrency.php:32
11110
  #: includes/settings/wcj-settings-payment-gateways-currency.php:79
11111
- #: includes/settings/wcj-settings-price-by-country.php:311
11112
  msgid "Currency Exchange Rates module"
11113
  msgstr ""
11114
 
11115
  #: includes/settings/wcj-settings-currency-per-product.php:138
11116
- #: includes/settings/wcj-settings-multicurrency-base-price.php:102
11117
  #: includes/settings/wcj-settings-multicurrency.php:203
11118
  msgid "Currencies Options"
11119
  msgstr ""
@@ -11126,7 +11148,7 @@ msgid ""
11126
  msgstr ""
11127
 
11128
  #: includes/settings/wcj-settings-currency-per-product.php:144
11129
- #: includes/settings/wcj-settings-multicurrency-base-price.php:107
11130
  #: includes/settings/wcj-settings-multicurrency.php:209
11131
  msgid "Total Currencies"
11132
  msgstr ""
@@ -12125,29 +12147,39 @@ msgid "Advanced Settings"
12125
  msgstr ""
12126
 
12127
  #: includes/settings/wcj-settings-global-discount.php:185
12128
- msgid "Global Discount in Admin"
12129
  msgstr ""
12130
 
12131
  #: includes/settings/wcj-settings-global-discount.php:187
12132
  msgid ""
 
 
 
 
 
 
 
 
 
 
12133
  "This will enable \"global discount\" product pricing in backend. It will "
12134
  "also affect some modules, e.g.: \"Products XML Feeds\" module."
12135
  msgstr ""
12136
 
12137
- #: includes/settings/wcj-settings-global-discount.php:193
12138
  #: includes/settings/wcj-settings-multicurrency-base-price.php:76
12139
  #: includes/settings/wcj-settings-multicurrency.php:176
12140
- #: includes/settings/wcj-settings-price-by-country.php:165
12141
  #: includes/settings/wcj-settings-price-by-user-role.php:111
12142
  #: includes/settings/wcj-settings-product-addons.php:258
12143
  #: includes/settings/wcj-settings-product-price-by-formula.php:100
12144
  msgid "Price Filters Priority"
12145
  msgstr ""
12146
 
12147
- #: includes/settings/wcj-settings-global-discount.php:194
12148
  #: includes/settings/wcj-settings-multicurrency-base-price.php:77
12149
  #: includes/settings/wcj-settings-multicurrency.php:177
12150
- #: includes/settings/wcj-settings-price-by-country.php:166
12151
  #: includes/settings/wcj-settings-price-by-user-role.php:112
12152
  #: includes/settings/wcj-settings-product-addons.php:259
12153
  #: includes/settings/wcj-settings-product-price-by-formula.php:101
@@ -12378,18 +12410,6 @@ msgstr ""
12378
  msgid "Add compatibility with WooCommerce Price Filter Widget"
12379
  msgstr ""
12380
 
12381
- #: includes/settings/wcj-settings-multicurrency-base-price.php:90
12382
- msgid "Third Party Price Filter Compatibility"
12383
- msgstr ""
12384
-
12385
- #: includes/settings/wcj-settings-multicurrency-base-price.php:91
12386
- msgid "Add compatibility with Third Party Price Filter Widgets"
12387
- msgstr ""
12388
-
12389
- #: includes/settings/wcj-settings-multicurrency-base-price.php:92
12390
- msgid "Requires WooCommerce Price Filter Compatibility option enabled"
12391
- msgstr ""
12392
-
12393
  #: includes/settings/wcj-settings-multicurrency.php:23
12394
  msgid ""
12395
  "Select how you want currency exchange rates to be updated. Possible options "
@@ -12449,7 +12469,7 @@ msgid "Revert on both cart & checkout pages"
12449
  msgstr ""
12450
 
12451
  #: includes/settings/wcj-settings-multicurrency.php:72
12452
- #: includes/settings/wcj-settings-payment-gateways-fees.php:66
12453
  #: includes/settings/wcj-settings-product-price-by-formula.php:64
12454
  msgid "Rounding"
12455
  msgstr ""
@@ -12496,15 +12516,18 @@ msgstr ""
12496
 
12497
  #: includes/settings/wcj-settings-multicurrency.php:106
12498
  #: includes/settings/wcj-settings-payment-gateways-min-max.php:65
 
12499
  #: includes/settings/wcj-settings-product-msrp.php:105
12500
  msgid "Compatibility"
12501
  msgstr ""
12502
 
12503
  #: includes/settings/wcj-settings-multicurrency.php:111
 
12504
  msgid "WooCommerce Coupons"
12505
  msgstr ""
12506
 
12507
  #: includes/settings/wcj-settings-multicurrency.php:113
 
12508
  msgid ""
12509
  "When a fixed coupon is used its value changes according to the current "
12510
  "currency"
@@ -12692,184 +12715,196 @@ msgstr ""
12692
  msgid "Custom Page"
12693
  msgstr ""
12694
 
12695
- #: includes/settings/wcj-settings-my-account.php:180
12696
- #: includes/settings/wcj-settings-my-account.php:185
 
 
 
 
 
 
 
 
 
 
 
 
12697
  msgid "Dashboard Customization"
12698
  msgstr ""
12699
 
12700
- #: includes/settings/wcj-settings-my-account.php:192
12701
  msgid "Custom Dashboard Content"
12702
  msgstr ""
12703
 
12704
- #: includes/settings/wcj-settings-my-account.php:193
12705
  msgid ""
12706
  "This will add content at the beginning of dashboard. If you need to add "
12707
  "custom content to the end of the dashboard, use <strong>Custom Info Blocks</"
12708
  "strong> section and select <strong>Account dashboard</strong> position."
12709
  msgstr ""
12710
 
12711
- #: includes/settings/wcj-settings-my-account.php:194
12712
- #: includes/settings/wcj-settings-payment-gateways-fees.php:115
12713
- #: includes/settings/wcj-settings-payment-gateways-fees.php:127
12714
  #: includes/settings/wcj-settings-stock.php:42
12715
  #: includes/settings/wcj-settings-stock.php:55
12716
  msgid "Ignored if empty."
12717
  msgstr ""
12718
 
12719
- #: includes/settings/wcj-settings-my-account.php:201
12720
  msgid "Hide \"Hello ...\" Message"
12721
  msgstr ""
12722
 
12723
- #: includes/settings/wcj-settings-my-account.php:208
12724
  msgid "Hide \"From your account dashboard ...\" Message"
12725
  msgstr ""
12726
 
12727
- #: includes/settings/wcj-settings-my-account.php:221
12728
- #: includes/settings/wcj-settings-my-account.php:226
12729
  msgid "Custom Info Blocks"
12730
  msgstr ""
12731
 
12732
- #: includes/settings/wcj-settings-my-account.php:266
12733
  msgid "Account content"
12734
  msgstr ""
12735
 
12736
- #: includes/settings/wcj-settings-my-account.php:267
12737
  msgid "Account dashboard"
12738
  msgstr ""
12739
 
12740
- #: includes/settings/wcj-settings-my-account.php:268
12741
  msgid "Account navigation"
12742
  msgstr ""
12743
 
12744
- #: includes/settings/wcj-settings-my-account.php:269
12745
  msgid "After account downloads"
12746
  msgstr ""
12747
 
12748
- #: includes/settings/wcj-settings-my-account.php:270
12749
  msgid "After account navigation"
12750
  msgstr ""
12751
 
12752
- #: includes/settings/wcj-settings-my-account.php:271
12753
  msgid "After account orders"
12754
  msgstr ""
12755
 
12756
- #: includes/settings/wcj-settings-my-account.php:272
12757
  msgid "After account payment methods"
12758
  msgstr ""
12759
 
12760
- #: includes/settings/wcj-settings-my-account.php:273
12761
  msgid "After available downloads"
12762
  msgstr ""
12763
 
12764
- #: includes/settings/wcj-settings-my-account.php:274
12765
  msgid "After customer login form"
12766
  msgstr ""
12767
 
12768
- #: includes/settings/wcj-settings-my-account.php:275
12769
  msgid "After edit account address form"
12770
  msgstr ""
12771
 
12772
- #: includes/settings/wcj-settings-my-account.php:276
12773
  msgid "After edit account form"
12774
  msgstr ""
12775
 
12776
- #: includes/settings/wcj-settings-my-account.php:277
12777
  msgid "After my account"
12778
  msgstr ""
12779
 
12780
- #: includes/settings/wcj-settings-my-account.php:278
12781
  msgid "Available download end"
12782
  msgstr ""
12783
 
12784
- #: includes/settings/wcj-settings-my-account.php:279
12785
  msgid "Available download start"
12786
  msgstr ""
12787
 
12788
- #: includes/settings/wcj-settings-my-account.php:280
12789
  msgid "Available downloads"
12790
  msgstr ""
12791
 
12792
- #: includes/settings/wcj-settings-my-account.php:281
12793
  msgid "Before account downloads"
12794
  msgstr ""
12795
 
12796
- #: includes/settings/wcj-settings-my-account.php:282
12797
  msgid "Before account navigation"
12798
  msgstr ""
12799
 
12800
- #: includes/settings/wcj-settings-my-account.php:283
12801
  msgid "Before account orders"
12802
  msgstr ""
12803
 
12804
- #: includes/settings/wcj-settings-my-account.php:284
12805
  msgid "Before account orders pagination"
12806
  msgstr ""
12807
 
12808
- #: includes/settings/wcj-settings-my-account.php:285
12809
  msgid "Before account payment methods"
12810
  msgstr ""
12811
 
12812
- #: includes/settings/wcj-settings-my-account.php:286
12813
  msgid "Before Available downloads"
12814
  msgstr ""
12815
 
12816
- #: includes/settings/wcj-settings-my-account.php:287
12817
  msgid "Before customer login form"
12818
  msgstr ""
12819
 
12820
- #: includes/settings/wcj-settings-my-account.php:288
12821
  msgid "Before edit account address form"
12822
  msgstr ""
12823
 
12824
- #: includes/settings/wcj-settings-my-account.php:289
12825
  msgid "Before edit account form"
12826
  msgstr ""
12827
 
12828
- #: includes/settings/wcj-settings-my-account.php:290
12829
  msgid "Before my account"
12830
  msgstr ""
12831
 
12832
- #: includes/settings/wcj-settings-my-account.php:291
12833
  msgid "Edit account form"
12834
  msgstr ""
12835
 
12836
- #: includes/settings/wcj-settings-my-account.php:292
12837
  msgid "Edit account form end"
12838
  msgstr ""
12839
 
12840
- #: includes/settings/wcj-settings-my-account.php:293
12841
  msgid "Edit account form start"
12842
  msgstr ""
12843
 
12844
- #: includes/settings/wcj-settings-my-account.php:294
12845
  msgid "Login form"
12846
  msgstr ""
12847
 
12848
- #: includes/settings/wcj-settings-my-account.php:295
12849
  msgid "Login form end"
12850
  msgstr ""
12851
 
12852
- #: includes/settings/wcj-settings-my-account.php:296
12853
  msgid "Login form start"
12854
  msgstr ""
12855
 
12856
- #: includes/settings/wcj-settings-my-account.php:297
12857
  msgid "Lost password form"
12858
  msgstr ""
12859
 
12860
- #: includes/settings/wcj-settings-my-account.php:298
12861
  msgid "Register form"
12862
  msgstr ""
12863
 
12864
- #: includes/settings/wcj-settings-my-account.php:299
12865
  msgid "Register form end"
12866
  msgstr ""
12867
 
12868
- #: includes/settings/wcj-settings-my-account.php:300
12869
  msgid "Register form start"
12870
  msgstr ""
12871
 
12872
- #: includes/settings/wcj-settings-my-account.php:301
12873
  msgid "Reset password form"
12874
  msgstr ""
12875
 
@@ -12915,7 +12950,7 @@ msgstr ""
12915
  #: includes/settings/wcj-settings-offer-price.php:48
12916
  #: includes/settings/wcj-settings-order-min-amount.php:29
12917
  #: includes/settings/wcj-settings-order-min-amount.php:36
12918
- #: includes/settings/wcj-settings-payment-gateways-fees.php:98
12919
  msgid "Exclude"
12920
  msgstr ""
12921
 
@@ -13127,59 +13162,71 @@ msgid ""
13127
  msgstr ""
13128
 
13129
  #: includes/settings/wcj-settings-order-custom-statuses.php:54
 
 
 
 
 
 
 
 
 
 
 
 
13130
  msgid "\"Processing\" and \"Complete\" Action Buttons"
13131
  msgstr ""
13132
 
13133
- #: includes/settings/wcj-settings-order-custom-statuses.php:55
13134
  msgid ""
13135
  "By default, when order has custom status, \"Processing\" and \"Complete\" "
13136
  "action buttons are hidden. You can enable it here. Possible values are: Show "
13137
  "both; Show \"Processing\" only; Show \"Complete\" only; Hide (default)."
13138
  msgstr ""
13139
 
13140
- #: includes/settings/wcj-settings-order-custom-statuses.php:60
13141
  msgid "Show both"
13142
  msgstr ""
13143
 
13144
- #: includes/settings/wcj-settings-order-custom-statuses.php:61
13145
  msgid "Show \"Processing\" only"
13146
  msgstr ""
13147
 
13148
- #: includes/settings/wcj-settings-order-custom-statuses.php:62
13149
  msgid "Show \"Complete\" only"
13150
  msgstr ""
13151
 
13152
- #: includes/settings/wcj-settings-order-custom-statuses.php:69
13153
  msgid "Add Custom Statuses to Admin Order List Action Buttons"
13154
  msgstr ""
13155
 
13156
- #: includes/settings/wcj-settings-order-custom-statuses.php:71
13157
  msgid ""
13158
  "If you wish to add custom statuses buttons to the admin Orders page action "
13159
  "buttons (Actions column), enable the checkbox here."
13160
  msgstr ""
13161
 
13162
- #: includes/settings/wcj-settings-order-custom-statuses.php:79
13163
  msgid "Enable Colors"
13164
  msgstr ""
13165
 
13166
- #: includes/settings/wcj-settings-order-custom-statuses.php:80
13167
  msgid "Choose if you want the buttons to have colors."
13168
  msgstr ""
13169
 
13170
- #: includes/settings/wcj-settings-order-custom-statuses.php:87
13171
  msgid "Enable Colors in Status Column"
13172
  msgstr ""
13173
 
13174
- #: includes/settings/wcj-settings-order-custom-statuses.php:89
13175
  msgid "Enable this if you want the statuses in Status column to have colors."
13176
  msgstr ""
13177
 
13178
- #: includes/settings/wcj-settings-order-custom-statuses.php:96
13179
  msgid "Add Custom Statuses Buttons to Admin Order Preview Actions"
13180
  msgstr ""
13181
 
13182
- #: includes/settings/wcj-settings-order-custom-statuses.php:98
13183
  msgid ""
13184
  "If you wish to add custom statuses buttons to the admin orders preview page, "
13185
  "enable the checkbox here."
@@ -13728,7 +13775,7 @@ msgstr ""
13728
 
13729
  #: includes/settings/wcj-settings-payment-gateways-by-currency.php:16
13730
  #: includes/settings/wcj-settings-payment-gateways-by-user-role.php:34
13731
- #: includes/settings/wcj-settings-shipping-by-condition.php:43
13732
  msgid "Leave empty to disable."
13733
  msgstr ""
13734
 
@@ -13746,7 +13793,7 @@ msgid "Denied Currencies"
13746
  msgstr ""
13747
 
13748
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:22
13749
- #: includes/settings/wcj-settings-shipping-by-condition.php:25
13750
  #: includes/settings/wcj-settings-shipping-by-order-amount.php:20
13751
  #: includes/settings/wcj-settings-shipping-by-order-qty.php:20
13752
  #: includes/settings/wcj-settings-shipping-description.php:58
@@ -13756,7 +13803,7 @@ msgid "Use Shipping Instances"
13756
  msgstr ""
13757
 
13758
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:24
13759
- #: includes/settings/wcj-settings-shipping-by-condition.php:27
13760
  #: includes/settings/wcj-settings-shipping-by-order-amount.php:22
13761
  #: includes/settings/wcj-settings-shipping-by-order-qty.php:22
13762
  #: includes/settings/wcj-settings-shipping-description.php:60
@@ -13774,10 +13821,12 @@ msgid ""
13774
  msgstr ""
13775
 
13776
  #: includes/settings/wcj-settings-payment-gateways-by-user-role.php:19
 
13777
  msgid "Multiple Role Checking"
13778
  msgstr ""
13779
 
13780
  #: includes/settings/wcj-settings-payment-gateways-by-user-role.php:22
 
13781
  msgid ""
13782
  "Enable if you have some plugin that allows users with multiple roles like "
13783
  "\"User Role Editor\"."
@@ -13831,101 +13880,117 @@ msgid ""
13831
  "or modules."
13832
  msgstr ""
13833
 
 
 
 
 
 
 
 
 
 
13834
  #: includes/settings/wcj-settings-payment-gateways-fees.php:23
 
 
 
 
 
 
 
13835
  msgid "Fee (or Discount) Title"
13836
  msgstr ""
13837
 
13838
- #: includes/settings/wcj-settings-payment-gateways-fees.php:24
13839
  msgid "Fee (or discount) title to show to customer."
13840
  msgstr ""
13841
 
13842
- #: includes/settings/wcj-settings-payment-gateways-fees.php:31
13843
  msgid "Fee (or Discount) Type"
13844
  msgstr ""
13845
 
13846
- #: includes/settings/wcj-settings-payment-gateways-fees.php:32
13847
  msgid "Percent or fixed value."
13848
  msgstr ""
13849
 
13850
- #: includes/settings/wcj-settings-payment-gateways-fees.php:42
13851
  msgid "Fee (or Discount) Value"
13852
  msgstr ""
13853
 
13854
- #: includes/settings/wcj-settings-payment-gateways-fees.php:43
13855
  msgid "The value. For discount enter a negative number."
13856
  msgstr ""
13857
 
13858
- #: includes/settings/wcj-settings-payment-gateways-fees.php:50
13859
  msgid "Minimum Cart Amount"
13860
  msgstr ""
13861
 
13862
- #: includes/settings/wcj-settings-payment-gateways-fees.php:51
13863
  msgid "Minimum cart amount for adding the fee (or discount)."
13864
  msgstr ""
13865
 
13866
- #: includes/settings/wcj-settings-payment-gateways-fees.php:51
13867
- #: includes/settings/wcj-settings-payment-gateways-fees.php:59
13868
  msgid "Set 0 to disable."
13869
  msgstr ""
13870
 
13871
- #: includes/settings/wcj-settings-payment-gateways-fees.php:58
13872
  msgid "Maximum Cart Amount"
13873
  msgstr ""
13874
 
13875
- #: includes/settings/wcj-settings-payment-gateways-fees.php:59
13876
  msgid "Maximum cart amount for adding the fee (or discount)."
13877
  msgstr ""
13878
 
13879
- #: includes/settings/wcj-settings-payment-gateways-fees.php:68
13880
  msgid "Round the fee (or discount) value before adding to the cart."
13881
  msgstr ""
13882
 
13883
- #: includes/settings/wcj-settings-payment-gateways-fees.php:75
13884
  msgid "If rounding is enabled, set precision (i.e. number of decimals) here."
13885
  msgstr ""
13886
 
13887
- #: includes/settings/wcj-settings-payment-gateways-fees.php:89
13888
  msgid "Tax class"
13889
  msgstr ""
13890
 
13891
- #: includes/settings/wcj-settings-payment-gateways-fees.php:90
13892
  msgid "If taxing is enabled, set tax class here."
13893
  msgstr ""
13894
 
13895
- #: includes/settings/wcj-settings-payment-gateways-fees.php:94
13896
  msgid "Standard Rate"
13897
  msgstr ""
13898
 
13899
- #: includes/settings/wcj-settings-payment-gateways-fees.php:97
13900
  msgid "Exclude Shipping when Calculating Total Cart Amount"
13901
  msgstr ""
13902
 
13903
- #: includes/settings/wcj-settings-payment-gateways-fees.php:99
13904
- #: includes/settings/wcj-settings-payment-gateways-fees.php:107
13905
  msgid ""
13906
  "This affects \"Percent\" type fees and \"Minimum/Maximum Cart Amount\" "
13907
  "options."
13908
  msgstr ""
13909
 
13910
- #: includes/settings/wcj-settings-payment-gateways-fees.php:105
13911
  msgid "Include Taxes"
13912
  msgstr ""
13913
 
13914
- #: includes/settings/wcj-settings-payment-gateways-fees.php:106
13915
  msgid "Include taxes when calculating Total Cart Amount"
13916
  msgstr ""
13917
 
13918
- #: includes/settings/wcj-settings-payment-gateways-fees.php:113
13919
  msgid "Require Products"
13920
  msgstr ""
13921
 
13922
- #: includes/settings/wcj-settings-payment-gateways-fees.php:114
13923
  msgid ""
13924
  "Require at least one of selected products to be in cart for fee to be "
13925
  "applied."
13926
  msgstr ""
13927
 
13928
- #: includes/settings/wcj-settings-payment-gateways-fees.php:126
13929
  msgid "Do not apply fee, if at least one of selected products is in cart."
13930
  msgstr ""
13931
 
@@ -14273,7 +14338,7 @@ msgid "Replace"
14273
  msgstr ""
14274
 
14275
  #: includes/settings/wcj-settings-pdf-invoicing-display.php:25
14276
- #: includes/settings/wcj-settings-price-by-country.php:284
14277
  #: includes/settings/wcj-settings-shipping.php:30
14278
  msgid "Admin Title"
14279
  msgstr ""
@@ -14763,68 +14828,68 @@ msgstr ""
14763
  msgid "Disable Price by Country for Bots"
14764
  msgstr ""
14765
 
14766
- #: includes/settings/wcj-settings-price-by-country.php:172
14767
  msgid "User IP Detection Method"
14768
  msgstr ""
14769
 
14770
- #: includes/settings/wcj-settings-price-by-country.php:182
14771
  msgid "Price Format Method"
14772
  msgstr ""
14773
 
14774
- #: includes/settings/wcj-settings-price-by-country.php:183
14775
  msgid "The moment \"Pretty Price\" and \"Rounding\" will be applied"
14776
  msgstr ""
14777
 
14778
- #: includes/settings/wcj-settings-price-by-country.php:188
14779
  msgid "get_price()"
14780
  msgstr ""
14781
 
14782
- #: includes/settings/wcj-settings-price-by-country.php:189
14783
  msgid "wc_get_price_to_display()"
14784
  msgstr ""
14785
 
14786
- #: includes/settings/wcj-settings-price-by-country.php:197
14787
  msgid "Country Groups"
14788
  msgstr ""
14789
 
14790
- #: includes/settings/wcj-settings-price-by-country.php:202
14791
  msgid "Countries Selection"
14792
  msgstr ""
14793
 
14794
- #: includes/settings/wcj-settings-price-by-country.php:203
14795
  msgid "Choose how do you want to enter countries groups in admin."
14796
  msgstr ""
14797
 
14798
- #: includes/settings/wcj-settings-price-by-country.php:208
14799
  msgid "Comma separated list"
14800
  msgstr ""
14801
 
14802
- #: includes/settings/wcj-settings-price-by-country.php:209
14803
  msgid "Multiselect"
14804
  msgstr ""
14805
 
14806
- #: includes/settings/wcj-settings-price-by-country.php:210
14807
  #: includes/settings/wcj-settings-product-by-condition.php:82
14808
  #: includes/settings/wcj-settings-related-products.php:164
14809
  msgid "Chosen select"
14810
  msgstr ""
14811
 
14812
- #: includes/settings/wcj-settings-price-by-country.php:214
14813
  msgid "Autogenerate Groups"
14814
  msgstr ""
14815
 
14816
- #: includes/settings/wcj-settings-price-by-country.php:220
14817
  msgid "Groups Number"
14818
  msgstr ""
14819
 
14820
- #: includes/settings/wcj-settings-price-by-country.php:244
14821
  msgid ""
14822
  "Countries. List of comma separated country codes.<br>For country codes and "
14823
  "predefined sets visit <a href=\"https://booster.io/country-codes/\" target="
14824
  "\"_blank\">https://booster.io/country-codes/</a>"
14825
  msgstr ""
14826
 
14827
- #: includes/settings/wcj-settings-price-by-country.php:330
14828
  msgid "Multiply Price by"
14829
  msgstr ""
14830
 
@@ -15389,7 +15454,7 @@ msgid "Position Priority on Frontend"
15389
  msgstr ""
15390
 
15391
  #: includes/settings/wcj-settings-product-addons.php:220
15392
- #: includes/settings/wcj-settings-shipping-by-condition.php:114
15393
  #: includes/settings/wcj-settings-shipping-options.php:41
15394
  msgid "Set to zero to use the default priority."
15395
  msgstr ""
@@ -17470,23 +17535,23 @@ msgstr ""
17470
  msgid "Term #%s"
17471
  msgstr ""
17472
 
17473
- #: includes/settings/wcj-settings-shipping-by-condition.php:41
17474
- #: includes/settings/wcj-settings-shipping-by-condition.php:47
17475
  #, php-format
17476
  msgid "Shipping Methods by %s"
17477
  msgstr ""
17478
 
17479
- #: includes/settings/wcj-settings-shipping-by-condition.php:77
17480
  #, php-format
17481
  msgid "Include %s"
17482
  msgstr ""
17483
 
17484
- #: includes/settings/wcj-settings-shipping-by-condition.php:88
17485
  #, php-format
17486
  msgid "Exclude %s"
17487
  msgstr ""
17488
 
17489
- #: includes/settings/wcj-settings-shipping-by-condition.php:113
17490
  msgid "Filter Priority"
17491
  msgstr ""
17492
 
45
  #: includes/class-wcj-track-users.php:251
46
  #: includes/classes/class-wcj-module.php:532
47
  #: includes/classes/class-wcj-module.php:732
48
+ #: includes/settings/wcj-settings-price-by-country.php:195
49
  msgid "Booster"
50
  msgstr ""
51
 
98
  #: includes/admin/class-wc-settings-jetpack.php:217
99
  #: includes/class-wcj-admin-bar.php:384
100
  #: includes/settings/wcj-settings-emails-verification.php:146
101
+ #: includes/settings/wcj-settings-price-by-country.php:194
102
  msgid "WooCommerce"
103
  msgstr ""
104
 
105
  #: includes/admin/class-wc-settings-jetpack.php:219
106
  #: includes/admin/class-wc-settings-jetpack.php:414
107
  #: includes/class-wcj-admin-bar.php:168 includes/class-wcj-admin-bar.php:508
108
+ #: includes/class-wcj-admin-bar.php:608 includes/core/class-wcj-admin.php:116
109
  msgid "Settings"
110
  msgstr ""
111
 
168
 
169
  #: includes/admin/class-wc-settings-jetpack.php:372
170
  #: includes/admin/class-wc-settings-jetpack.php:379
171
+ #: includes/admin/class-wcj-tools.php:76
172
  msgid "Module"
173
  msgstr ""
174
 
175
  #: includes/admin/class-wc-settings-jetpack.php:373
176
  #: includes/admin/class-wc-settings-jetpack.php:380
177
+ #: includes/admin/class-wcj-tools.php:77
178
  #: includes/export/class-wcj-fields-helper.php:293
179
  #: includes/gateways/class-wc-gateway-wcj-custom.php:63
180
  #: includes/settings/wcj-settings-checkout-custom-fields.php:172
241
  msgstr ""
242
 
243
  #: includes/admin/class-wc-settings-jetpack.php:486
244
+ #: includes/class-wcj-global-discount.php:29
245
  #: includes/settings/wcj-settings-product-addons.php:254
246
  msgid "Global Discount"
247
  msgstr ""
281
  msgstr ""
282
 
283
  #: includes/admin/class-wc-settings-jetpack.php:532
284
+ #: includes/core/class-wcj-admin.php:100
285
  msgid "Booster for WooCommerce"
286
  msgstr ""
287
 
327
  msgid "%d options successfully deleted."
328
  msgstr ""
329
 
330
+ #: includes/admin/class-wcj-tools.php:35
331
  msgid "Booster for WooCommerce Tools"
332
  msgstr ""
333
 
334
+ #: includes/admin/class-wcj-tools.php:36
335
  msgid "Booster Tools"
336
  msgstr ""
337
 
338
+ #: includes/admin/class-wcj-tools.php:55
339
  msgid "Tools Dashboard"
340
  msgstr ""
341
 
342
+ #: includes/admin/class-wcj-tools.php:69
343
  msgid "Booster for WooCommerce Tools - Dashboard"
344
  msgstr ""
345
 
346
+ #: includes/admin/class-wcj-tools.php:70
347
  msgid ""
348
  "This dashboard lets you check statuses and short descriptions of all "
349
  "available Booster for WooCommerce tools. Tools can be enabled through "
351
  "above."
352
  msgstr ""
353
 
354
+ #: includes/admin/class-wcj-tools.php:75
355
  msgid "Tool"
356
  msgstr ""
357
 
358
+ #: includes/admin/class-wcj-tools.php:78
359
  #: includes/class-wcj-product-by-user.php:197
360
  #: includes/export/class-wcj-fields-helper.php:294
361
  msgid "Status"
853
  msgid "All Products and All Attributes."
854
  msgstr ""
855
 
856
+ #: includes/class-wcj-admin-tools.php:152
857
  #: includes/settings/wcj-settings-export.php:157
858
  #: includes/settings/wcj-settings-export.php:236
859
  msgid "Product Meta"
860
  msgstr ""
861
 
862
+ #: includes/class-wcj-admin-tools.php:169
863
  #: includes/settings/wcj-settings-export.php:86
864
  #: includes/settings/wcj-settings-export.php:154
865
  msgid "Order Meta"
866
  msgstr ""
867
 
868
+ #: includes/class-wcj-admin-tools.php:203
869
  msgid "Order Items Meta"
870
  msgstr ""
871
 
872
+ #: includes/class-wcj-admin-tools.php:205
873
  msgid "Item Key"
874
  msgstr ""
875
 
876
+ #: includes/class-wcj-admin-tools.php:205
877
  msgid "Item Meta Key"
878
  msgstr ""
879
 
880
+ #: includes/class-wcj-admin-tools.php:205
881
  msgid "Item Meta Value"
882
  msgstr ""
883
 
884
+ #: includes/class-wcj-admin-tools.php:240
885
+ #: includes/class-wcj-admin-tools.php:282
886
+ #: includes/class-wcj-admin-tools.php:291
887
  #: includes/class-wcj-product-bulk-meta-editor.php:339
888
  #: includes/class-wcj-product-bulk-price-converter.php:148
889
  #: includes/class-wcj-sku.php:668
892
  msgid "Product"
893
  msgstr ""
894
 
895
+ #: includes/class-wcj-admin-tools.php:241
896
+ #: includes/class-wcj-admin-tools.php:283
897
+ #: includes/class-wcj-admin-tools.php:292
898
  #: includes/reports/wcj-class-reports-stock.php:270
899
  msgid "Category"
900
  msgstr ""
901
 
902
+ #: includes/class-wcj-admin-tools.php:308
903
  msgid "Total Products:"
904
  msgstr ""
905
 
1932
  #: includes/settings/wcj-settings-export.php:27
1933
  #: includes/settings/wcj-settings-order-custom-statuses.php:29
1934
  #: includes/settings/wcj-settings-order-custom-statuses.php:37
1935
+ #: includes/settings/wcj-settings-order-custom-statuses.php:80
1936
+ #: includes/settings/wcj-settings-order-custom-statuses.php:107
1937
  #: includes/settings/wcj-settings-order-min-amount.php:53
1938
  #: includes/settings/wcj-settings-orders.php:132
1939
  #: includes/settings/wcj-settings-orders.php:159
1954
  msgid "Add"
1955
  msgstr ""
1956
 
1957
+ #: includes/class-wcj-global-discount.php:30
1958
  msgid "Add global discount to all products."
1959
  msgstr ""
1960
 
2131
  msgstr ""
2132
 
2133
  #: includes/class-wcj-my-account.php:43
2134
+ #: includes/settings/wcj-settings-my-account.php:310
2135
  msgid "View order"
2136
  msgstr ""
2137
 
2143
  msgid "Lost password"
2144
  msgstr ""
2145
 
2146
+ #: includes/class-wcj-my-account.php:302
2147
  #, php-format
2148
  msgid "Hello %1$s (not %1$s? <a href=\"%2$s\">Log out</a>)"
2149
  msgstr ""
2150
 
2151
+ #: includes/class-wcj-my-account.php:312
2152
  #, php-format
2153
  msgid ""
2154
  "From your account dashboard you can view your <a href=\"%1$s\">recent "
2156
  "and <a href=\"%3$s\">edit your password and account details</a>."
2157
  msgstr ""
2158
 
2159
+ #: includes/class-wcj-my-account.php:418
2160
  msgid "User role"
2161
  msgstr ""
2162
 
2163
+ #: includes/class-wcj-my-account.php:498
2164
  #: includes/class-wcj-product-bulk-meta-editor.php:279
2165
  #: includes/class-wcj-product-by-user.php:206
2166
  #: includes/class-wcj-purchase-data.php:94
2422
  "Tool lets you add, edit or delete any custom status for WooCommerce orders."
2423
  msgstr ""
2424
 
2425
+ #: includes/class-wcj-order-custom-statuses.php:162
2426
  #, php-format
2427
  msgid "Change order status to %s"
2428
  msgstr ""
2429
 
2430
+ #: includes/class-wcj-order-custom-statuses.php:172
2431
  msgid "Change status: "
2432
  msgstr ""
2433
 
2434
+ #: includes/class-wcj-order-custom-statuses.php:212
2435
  msgid "Processing"
2436
  msgstr ""
2437
 
2438
+ #: includes/class-wcj-order-custom-statuses.php:222
2439
  msgid "Complete"
2440
  msgstr ""
2441
 
2442
+ #: includes/class-wcj-order-custom-statuses.php:327
2443
  #, php-format
2444
  msgid " <span class=\"count\">(%s)</span>"
2445
  msgid_plural " <span class=\"count\">(%s)</span>"
2446
  msgstr[0] ""
2447
  msgstr[1] ""
2448
 
2449
+ #: includes/class-wcj-order-custom-statuses.php:425
2450
+ #: includes/class-wcj-order-custom-statuses.php:427
2451
  msgid "Mark"
2452
  msgstr ""
2453
 
2772
  msgid "Change product price and currency automatically by customer's country."
2773
  msgstr ""
2774
 
2775
+ #: includes/class-wcj-price-by-country.php:131
2776
  msgid "Price filter widget product prices recalculated."
2777
  msgstr ""
2778
 
2863
  #: includes/settings/wcj-settings-admin-tools.php:22
2864
  #: includes/settings/wcj-settings-admin-tools.php:29
2865
  #: includes/settings/wcj-settings-admin-tools.php:38
2866
+ #: includes/settings/wcj-settings-admin-tools.php:67
2867
+ #: includes/settings/wcj-settings-admin-tools.php:84
2868
+ #: includes/settings/wcj-settings-admin-tools.php:92
2869
+ #: includes/settings/wcj-settings-admin-tools.php:100
2870
  #: includes/settings/wcj-settings-breadcrumbs.php:20
2871
  #: includes/settings/wcj-settings-call-for-price.php:79
2872
  #: includes/settings/wcj-settings-cart-customization.php:34
2916
  #: includes/settings/wcj-settings-general.php:197
2917
  #: includes/settings/wcj-settings-global-discount.php:57
2918
  #: includes/settings/wcj-settings-global-discount.php:186
2919
+ #: includes/settings/wcj-settings-global-discount.php:194
2920
  #: includes/settings/wcj-settings-left-to-free-shipping.php:28
2921
  #: includes/settings/wcj-settings-left-to-free-shipping.php:57
2922
  #: includes/settings/wcj-settings-left-to-free-shipping.php:91
2940
  #: includes/settings/wcj-settings-my-account.php:104
2941
  #: includes/settings/wcj-settings-offer-price.php:27
2942
  #: includes/settings/wcj-settings-order-custom-statuses.php:45
2943
+ #: includes/settings/wcj-settings-order-custom-statuses.php:55
2944
+ #: includes/settings/wcj-settings-order-custom-statuses.php:98
2945
  #: includes/settings/wcj-settings-order-numbers.php:97
2946
  #: includes/settings/wcj-settings-order-numbers.php:105
2947
  #: includes/settings/wcj-settings-order-numbers.php:112
2960
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:23
2961
  #: includes/settings/wcj-settings-payment-gateways-by-user-role.php:23
2962
  #: includes/settings/wcj-settings-payment-gateways-currency.php:95
2963
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:21
2964
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:86
2965
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:102
2966
  #: includes/settings/wcj-settings-payment-gateways-per-category.php:25
2967
  #: includes/settings/wcj-settings-pdf-invoicing-advanced.php:55
2968
  #: includes/settings/wcj-settings-pdf-invoicing-display.php:118
2976
  #: includes/settings/wcj-settings-price-by-country.php:106
2977
  #: includes/settings/wcj-settings-price-by-country.php:133
2978
  #: includes/settings/wcj-settings-price-by-country.php:142
2979
+ #: includes/settings/wcj-settings-price-by-country.php:166
2980
  #: includes/settings/wcj-settings-price-by-user-role.php:19
2981
  #: includes/settings/wcj-settings-price-by-user-role.php:46
2982
  #: includes/settings/wcj-settings-price-by-user-role.php:93
3041
  #: includes/settings/wcj-settings-related-products.php:112
3042
  #: includes/settings/wcj-settings-related-products.php:119
3043
  #: includes/settings/wcj-settings-related-products.php:149
3044
+ #: includes/settings/wcj-settings-shipping-by-condition.php:25
3045
+ #: includes/settings/wcj-settings-shipping-by-condition.php:38
3046
  #: includes/settings/wcj-settings-shipping-by-order-amount.php:21
3047
  #: includes/settings/wcj-settings-shipping-by-order-qty.php:21
3048
  #: includes/settings/wcj-settings-shipping-calculator.php:20
3175
  msgid "Add (paid/free/discount) addons to products."
3176
  msgstr ""
3177
 
3178
+ #: includes/class-wcj-product-addons.php:278
3179
  msgid "Some of the required addons are not selected!"
3180
  msgstr ""
3181
 
3182
+ #: includes/class-wcj-product-addons.php:293
3183
  msgid ""
3184
  "Booster: Free plugin's version is limited to only three products with per "
3185
  "product addons enabled at a time. You will need to get <a href=\"https://"
3825
  #: includes/settings/wcj-settings-left-to-free-shipping.php:73
3826
  #: includes/settings/wcj-settings-left-to-free-shipping.php:107
3827
  #: includes/settings/wcj-settings-mini-cart.php:46
3828
+ #: includes/settings/wcj-settings-my-account.php:269
3829
  #: includes/settings/wcj-settings-product-add-to-cart.php:286
3830
  #: includes/settings/wcj-settings-product-add-to-cart.php:321
3831
  #: includes/settings/wcj-settings-product-custom-info.php:96
4018
  #: includes/settings/wcj-settings-left-to-free-shipping.php:65
4019
  #: includes/settings/wcj-settings-left-to-free-shipping.php:99
4020
  #: includes/settings/wcj-settings-mini-cart.php:39
4021
+ #: includes/settings/wcj-settings-my-account.php:174
4022
+ #: includes/settings/wcj-settings-my-account.php:261
4023
  #: includes/settings/wcj-settings-product-custom-info.php:88
4024
  #: includes/settings/wcj-settings-product-tabs.php:92
4025
  #: includes/widgets/class-wcj-widget-left-to-free-shipping.php:59
4450
 
4451
  #: includes/class-wcj-shipping-by-products.php:205
4452
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:25
4453
+ #: includes/settings/wcj-settings-shipping-by-condition.php:40
4454
  #: includes/settings/wcj-settings-shipping-by-order-amount.php:23
4455
  #: includes/settings/wcj-settings-shipping-by-order-qty.php:23
4456
  #: includes/settings/wcj-settings-shipping-description.php:61
4967
  msgid "Page %page_number% / %total_pages%"
4968
  msgstr ""
4969
 
4970
+ #: includes/core/class-wcj-admin.php:60
4971
  msgid "Please update <strong>Booster Plus for WooCommerce</strong> plugin."
4972
  msgstr ""
4973
 
4974
+ #: includes/core/class-wcj-admin.php:62
4975
  #, php-format
4976
  msgid ""
4977
  "Visit <a target=\"_blank\" href=\"%s\">your account page</a> on booster.io "
4978
  "to download the latest Booster Plus version."
4979
  msgstr ""
4980
 
4981
+ #: includes/core/class-wcj-admin.php:66
4982
  #, php-format
4983
  msgid "Click <a target=\"_blank\" href=\"%s\">here</a> for more info."
4984
  msgstr ""
4985
 
4986
+ #: includes/core/class-wcj-admin.php:84
4987
  #, php-format
4988
  msgid ""
4989
  "If you like <strong>Booster for WooCommerce</strong> please leave us a %s "
4990
  "rating. Thank you, we couldn't have done it without you!"
4991
  msgstr ""
4992
 
4993
+ #: includes/core/class-wcj-admin.php:101
4994
  msgid "Booster Settings"
4995
  msgstr ""
4996
 
4997
+ #: includes/core/class-wcj-admin.php:117
4998
  msgid "Docs"
4999
  msgstr ""
5000
 
5001
+ #: includes/core/class-wcj-admin.php:120
5002
  msgid "Unlock all"
5003
  msgstr ""
5004
 
7623
  #: includes/settings/wcj-settings-multicurrency-base-price.php:63
7624
  #: includes/settings/wcj-settings-multicurrency.php:162
7625
  #: includes/settings/wcj-settings-order-min-amount.php:69
7626
+ #: includes/settings/wcj-settings-price-by-country.php:177
7627
  #: includes/settings/wcj-settings-price-by-user-role.php:106
7628
  #: includes/settings/wcj-settings-product-addons.php:230
7629
  msgid "Advanced"
7860
 
7861
  #: includes/price-by-country/class-wcj-price-by-country-local.php:111
7862
  #: includes/settings/meta-box/wcj-settings-meta-box-price-by-country.php:67
7863
+ #: includes/settings/wcj-settings-price-by-country.php:355
7864
  msgid "Make empty price"
7865
  msgstr ""
7866
 
7867
  #: includes/price-by-country/class-wcj-price-by-country-local.php:215
7868
  #: includes/settings/meta-box/wcj-settings-meta-box-price-by-country.php:17
7869
  #: includes/settings/wcj-settings-add-to-cart.php:50
7870
+ #: includes/settings/wcj-settings-price-by-country.php:249
7871
+ #: includes/settings/wcj-settings-price-by-country.php:250
7872
+ #: includes/settings/wcj-settings-price-by-country.php:255
7873
+ #: includes/settings/wcj-settings-price-by-country.php:303
7874
+ #: includes/settings/wcj-settings-price-by-country.php:346
7875
  msgid "Group"
7876
  msgstr ""
7877
 
8185
  #: includes/settings/wcj-settings-checkout-customization.php:107
8186
  #: includes/settings/wcj-settings-cross-sells.php:87
8187
  #: includes/settings/wcj-settings-currency.php:22
8188
+ #: includes/settings/wcj-settings-my-account.php:210
8189
+ #: includes/settings/wcj-settings-my-account.php:217
8190
+ #: includes/settings/wcj-settings-order-custom-statuses.php:73
8191
  #: includes/settings/wcj-settings-pdf-invoicing-advanced.php:48
8192
  #: includes/settings/wcj-settings-product-addons.php:291
8193
  #: includes/settings/wcj-settings-product-bookings.php:100
8218
  #: includes/settings/meta-box/wcj-settings-meta-box-add-to-cart-button-visibility.php:30
8219
  #: includes/settings/meta-box/wcj-settings-meta-box-add-to-cart-button-visibility.php:49
8220
  #: includes/settings/wcj-settings-checkout-customization.php:196
8221
+ #: includes/settings/wcj-settings-my-account.php:175
8222
+ #: includes/settings/wcj-settings-my-account.php:202
8223
+ #: includes/settings/wcj-settings-my-account.php:262
8224
  #: includes/settings/wcj-settings-sale-flash.php:27
8225
  #: includes/settings/wcj-settings-sale-flash.php:111
8226
  msgid "You can use HTML and/or shortcodes here."
8326
  #: includes/settings/meta-box/wcj-settings-meta-box-offer-price.php:25
8327
  #: includes/settings/wcj-settings-currency-exchange-rates.php:60
8328
  #: includes/settings/wcj-settings-offer-price.php:168
8329
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:93
8330
  #: includes/settings/wcj-settings-product-by-user.php:70
8331
  msgid "Number of decimals"
8332
  msgstr ""
8706
  #: includes/settings/meta-box/wcj-settings-meta-box-wholesale-price.php:18
8707
  #: includes/settings/wcj-settings-checkout-fees.php:72
8708
  #: includes/settings/wcj-settings-global-discount.php:69
8709
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:57
8710
  #: includes/settings/wcj-settings-purchase-data.php:89
8711
  #: includes/settings/wcj-settings-wholesale-price.php:80
8712
  msgid "Percent"
8715
  #: includes/settings/meta-box/wcj-settings-meta-box-wholesale-price.php:19
8716
  #: includes/settings/wcj-settings-checkout-fees.php:71
8717
  #: includes/settings/wcj-settings-global-discount.php:70
8718
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:56
8719
  #: includes/settings/wcj-settings-price-by-user-role.php:31
8720
  #: includes/settings/wcj-settings-purchase-data.php:88
8721
  #: includes/settings/wcj-settings-wholesale-price.php:81
8789
  #: includes/settings/wcj-settings-max-products-per-user.php:43
8790
  #: includes/settings/wcj-settings-my-account.php:67
8791
  #: includes/settings/wcj-settings-my-account.php:135
8792
+ #: includes/settings/wcj-settings-my-account.php:194
8793
+ #: includes/settings/wcj-settings-my-account.php:235
8794
  #: includes/settings/wcj-settings-order-quantities.php:85
8795
  #: includes/settings/wcj-settings-order-quantities.php:143
8796
  #: includes/settings/wcj-settings-order-quantities.php:201
8802
  #: includes/settings/wcj-settings-sale-flash.php:20
8803
  #: includes/settings/wcj-settings-sale-flash.php:65
8804
  #: includes/settings/wcj-settings-sale-flash.php:90
8805
+ #: includes/settings/wcj-settings-shipping-by-condition.php:62
8806
  #: includes/settings/wcj-settings-shipping-options.php:21
8807
  #: includes/settings/wcj-settings-stock.php:20
8808
  #: includes/settings/wcj-settings-stock.php:87
9015
  #: includes/settings/wcj-settings-add-to-cart.php:156
9016
  #: includes/settings/wcj-settings-add-to-cart.php:213
9017
  #: includes/settings/wcj-settings-add-to-cart.php:222
9018
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:43
9019
  #: includes/settings/wcj-settings-product-custom-info.php:191
9020
  msgid "Leave blank to disable."
9021
  msgstr ""
9316
  msgid "Will remove admin notices (including the Connect notice)."
9317
  msgstr ""
9318
 
9319
+ #: includes/settings/wcj-settings-admin-tools.php:45
9320
+ msgid "Enable Interface By User Roles"
9321
+ msgstr ""
9322
+
9323
+ #: includes/settings/wcj-settings-admin-tools.php:46
9324
+ msgid "The interface can't be disabled for The Administrator role."
9325
+ msgstr ""
9326
+
9327
+ #: includes/settings/wcj-settings-admin-tools.php:46
9328
+ msgid "Leave it empty to enable the interface for all the roles."
9329
+ msgstr ""
9330
+
9331
+ #: includes/settings/wcj-settings-admin-tools.php:47
9332
+ msgid "Disables the whole Booster admin interface for not selected roles."
9333
+ msgstr ""
9334
+
9335
+ #: includes/settings/wcj-settings-admin-tools.php:60
9336
  msgid "Orders Options"
9337
  msgstr ""
9338
 
9339
+ #: includes/settings/wcj-settings-admin-tools.php:65
9340
  msgid "Show Order Meta"
9341
  msgstr ""
9342
 
9343
+ #: includes/settings/wcj-settings-admin-tools.php:66
9344
  msgid "Will show order meta table in meta box."
9345
  msgstr ""
9346
 
9347
+ #: includes/settings/wcj-settings-admin-tools.php:77
9348
  msgid "Products Options"
9349
  msgstr ""
9350
 
9351
+ #: includes/settings/wcj-settings-admin-tools.php:82
9352
  msgid "Show Product Meta"
9353
  msgstr ""
9354
 
9355
+ #: includes/settings/wcj-settings-admin-tools.php:83
9356
  msgid "Will show product meta table in meta box."
9357
  msgstr ""
9358
 
9359
+ #: includes/settings/wcj-settings-admin-tools.php:90
9360
  msgid "Show Variable Product Pricing Table"
9361
  msgstr ""
9362
 
9363
+ #: includes/settings/wcj-settings-admin-tools.php:91
9364
  msgid "Will allow to set all variations prices in single meta box."
9365
  msgstr ""
9366
 
9367
+ #: includes/settings/wcj-settings-admin-tools.php:98
9368
  msgid "Product Revisions"
9369
  msgstr ""
9370
 
9371
+ #: includes/settings/wcj-settings-admin-tools.php:99
9372
  msgid "Will enable product revisions."
9373
  msgstr ""
9374
 
9375
+ #: includes/settings/wcj-settings-admin-tools.php:106
9376
  msgid "JSON Product Search Limit"
9377
  msgstr ""
9378
 
9379
+ #: includes/settings/wcj-settings-admin-tools.php:107
9380
  msgid ""
9381
  "This will set the maximum number of products to return on JSON search (e.g. "
9382
  "when setting Upsells and Cross-sells on product edit page)."
9383
  msgstr ""
9384
 
9385
+ #: includes/settings/wcj-settings-admin-tools.php:108
9386
  #: includes/settings/wcj-settings-checkout-custom-fields.php:240
9387
  #: includes/settings/wcj-settings-checkout-custom-fields.php:249
9388
  #: includes/settings/wcj-settings-order-quantities.php:208
9509
  #: includes/settings/wcj-settings-cart.php:24
9510
  #: includes/settings/wcj-settings-checkout-custom-info.php:20
9511
  #: includes/settings/wcj-settings-mini-cart.php:19
9512
+ #: includes/settings/wcj-settings-my-account.php:241
9513
  #: includes/settings/wcj-settings-product-custom-info.php:52
9514
  msgid "Total Blocks"
9515
  msgstr ""
9517
  #: includes/settings/wcj-settings-cart.php:39
9518
  #: includes/settings/wcj-settings-checkout-custom-info.php:36
9519
  #: includes/settings/wcj-settings-mini-cart.php:34
9520
+ #: includes/settings/wcj-settings-my-account.php:256
9521
  msgid "Info Block"
9522
  msgstr ""
9523
 
9524
  #: includes/settings/wcj-settings-cart.php:58
9525
  #: includes/settings/wcj-settings-checkout-custom-info.php:85
9526
  #: includes/settings/wcj-settings-mini-cart.php:57
9527
+ #: includes/settings/wcj-settings-my-account.php:314
9528
  #: includes/settings/wcj-settings-product-custom-info.php:124
9529
  msgid "Position Order (i.e. Priority)"
9530
  msgstr ""
9554
  #: includes/settings/wcj-settings-payment-gateways-by-country.php:15
9555
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:17
9556
  #: includes/settings/wcj-settings-payment-gateways-by-user-role.php:14
9557
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:15
9558
  #: includes/settings/wcj-settings-payment-gateways-min-max.php:15
9559
  #: includes/settings/wcj-settings-payment-gateways-per-category.php:19
9560
  #: includes/settings/wcj-settings-price-formats.php:15
9561
  #: includes/settings/wcj-settings-product-tabs.php:15
9562
+ #: includes/settings/wcj-settings-shipping-by-condition.php:32
9563
  #: includes/settings/wcj-settings-shipping-by-order-amount.php:15
9564
  #: includes/settings/wcj-settings-shipping-by-order-qty.php:15
9565
  #: includes/settings/wcj-settings-shipping-time.php:25
9913
 
9914
  #: includes/settings/wcj-settings-checkout-custom-fields.php:360
9915
  #: includes/settings/wcj-settings-global-discount.php:163
9916
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:144
9917
  #: includes/settings/wcj-settings-product-addons.php:149
9918
  #: includes/settings/wcj-settings-related-products.php:244
9919
  msgid "Exclude Products"
10276
  msgstr ""
10277
 
10278
  #: includes/settings/wcj-settings-checkout-fees.php:53
10279
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:101
10280
  msgid "Taxable"
10281
  msgstr ""
10282
 
10626
  #: includes/settings/wcj-settings-product-by-date.php:117
10627
  #: includes/settings/wcj-settings-product-custom-info.php:185
10628
  #: includes/settings/wcj-settings-product-input-fields.php:348
10629
+ #: includes/settings/wcj-settings-shipping-by-condition.php:122
10630
  msgid "Advanced Options"
10631
  msgstr ""
10632
 
10918
  #: includes/settings/wcj-settings-multicurrency-base-price.php:22
10919
  #: includes/settings/wcj-settings-multicurrency.php:22
10920
  #: includes/settings/wcj-settings-payment-gateways-currency.php:68
10921
+ #: includes/settings/wcj-settings-price-by-country.php:319
10922
  msgid "Exchange Rates Updates"
10923
  msgstr ""
10924
 
11012
  msgstr ""
11013
 
11014
  #: includes/settings/wcj-settings-currency-exchange-rates.php:173
11015
+ #: includes/settings/wcj-settings-price-by-country.php:314
11016
  msgid "Exchange Rates"
11017
  msgstr ""
11018
 
11029
 
11030
  #: includes/settings/wcj-settings-currency-external-products.php:20
11031
  #: includes/settings/wcj-settings-currency-per-product.php:180
11032
+ #: includes/settings/wcj-settings-multicurrency-base-price.php:123
11033
  #: includes/settings/wcj-settings-multicurrency.php:234
11034
+ #: includes/settings/wcj-settings-price-by-country.php:294
11035
  #: includes/settings/wcj-settings-price-formats.php:59
11036
  msgid "Currency"
11037
  msgstr ""
11106
  #: includes/settings/wcj-settings-multicurrency-base-price.php:27
11107
  #: includes/settings/wcj-settings-multicurrency.php:28
11108
  #: includes/settings/wcj-settings-payment-gateways-currency.php:73
11109
+ #: includes/settings/wcj-settings-price-by-country.php:324
11110
  msgid "Enter Rates Manually"
11111
  msgstr ""
11112
 
11114
  #: includes/settings/wcj-settings-multicurrency-base-price.php:28
11115
  #: includes/settings/wcj-settings-multicurrency.php:29
11116
  #: includes/settings/wcj-settings-payment-gateways-currency.php:74
11117
+ #: includes/settings/wcj-settings-price-by-country.php:325
11118
  msgid "Automatically via Currency Exchange Rates module"
11119
  msgstr ""
11120
 
11122
  #: includes/settings/wcj-settings-multicurrency-base-price.php:31
11123
  #: includes/settings/wcj-settings-multicurrency.php:32
11124
  #: includes/settings/wcj-settings-payment-gateways-currency.php:77
11125
+ #: includes/settings/wcj-settings-price-by-country.php:328
11126
  msgid "Visit"
11127
  msgstr ""
11128
 
11130
  #: includes/settings/wcj-settings-multicurrency-base-price.php:31
11131
  #: includes/settings/wcj-settings-multicurrency.php:32
11132
  #: includes/settings/wcj-settings-payment-gateways-currency.php:79
11133
+ #: includes/settings/wcj-settings-price-by-country.php:328
11134
  msgid "Currency Exchange Rates module"
11135
  msgstr ""
11136
 
11137
  #: includes/settings/wcj-settings-currency-per-product.php:138
11138
+ #: includes/settings/wcj-settings-multicurrency-base-price.php:94
11139
  #: includes/settings/wcj-settings-multicurrency.php:203
11140
  msgid "Currencies Options"
11141
  msgstr ""
11148
  msgstr ""
11149
 
11150
  #: includes/settings/wcj-settings-currency-per-product.php:144
11151
+ #: includes/settings/wcj-settings-multicurrency-base-price.php:99
11152
  #: includes/settings/wcj-settings-multicurrency.php:209
11153
  msgid "Total Currencies"
11154
  msgstr ""
12147
  msgstr ""
12148
 
12149
  #: includes/settings/wcj-settings-global-discount.php:185
12150
+ msgid "Compatibility With Products Shortcode"
12151
  msgstr ""
12152
 
12153
  #: includes/settings/wcj-settings-global-discount.php:187
12154
  msgid ""
12155
+ "This will add compatibility with [products] shortcode that try to get sale "
12156
+ "products, like [products on_sale=\"true\"]"
12157
+ msgstr ""
12158
+
12159
+ #: includes/settings/wcj-settings-global-discount.php:193
12160
+ msgid "Global Discount in Admin"
12161
+ msgstr ""
12162
+
12163
+ #: includes/settings/wcj-settings-global-discount.php:195
12164
+ msgid ""
12165
  "This will enable \"global discount\" product pricing in backend. It will "
12166
  "also affect some modules, e.g.: \"Products XML Feeds\" module."
12167
  msgstr ""
12168
 
12169
+ #: includes/settings/wcj-settings-global-discount.php:201
12170
  #: includes/settings/wcj-settings-multicurrency-base-price.php:76
12171
  #: includes/settings/wcj-settings-multicurrency.php:176
12172
+ #: includes/settings/wcj-settings-price-by-country.php:182
12173
  #: includes/settings/wcj-settings-price-by-user-role.php:111
12174
  #: includes/settings/wcj-settings-product-addons.php:258
12175
  #: includes/settings/wcj-settings-product-price-by-formula.php:100
12176
  msgid "Price Filters Priority"
12177
  msgstr ""
12178
 
12179
+ #: includes/settings/wcj-settings-global-discount.php:202
12180
  #: includes/settings/wcj-settings-multicurrency-base-price.php:77
12181
  #: includes/settings/wcj-settings-multicurrency.php:177
12182
+ #: includes/settings/wcj-settings-price-by-country.php:183
12183
  #: includes/settings/wcj-settings-price-by-user-role.php:112
12184
  #: includes/settings/wcj-settings-product-addons.php:259
12185
  #: includes/settings/wcj-settings-product-price-by-formula.php:101
12410
  msgid "Add compatibility with WooCommerce Price Filter Widget"
12411
  msgstr ""
12412
 
 
 
 
 
 
 
 
 
 
 
 
 
12413
  #: includes/settings/wcj-settings-multicurrency.php:23
12414
  msgid ""
12415
  "Select how you want currency exchange rates to be updated. Possible options "
12469
  msgstr ""
12470
 
12471
  #: includes/settings/wcj-settings-multicurrency.php:72
12472
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:85
12473
  #: includes/settings/wcj-settings-product-price-by-formula.php:64
12474
  msgid "Rounding"
12475
  msgstr ""
12516
 
12517
  #: includes/settings/wcj-settings-multicurrency.php:106
12518
  #: includes/settings/wcj-settings-payment-gateways-min-max.php:65
12519
+ #: includes/settings/wcj-settings-price-by-country.php:160
12520
  #: includes/settings/wcj-settings-product-msrp.php:105
12521
  msgid "Compatibility"
12522
  msgstr ""
12523
 
12524
  #: includes/settings/wcj-settings-multicurrency.php:111
12525
+ #: includes/settings/wcj-settings-price-by-country.php:165
12526
  msgid "WooCommerce Coupons"
12527
  msgstr ""
12528
 
12529
  #: includes/settings/wcj-settings-multicurrency.php:113
12530
+ #: includes/settings/wcj-settings-price-by-country.php:167
12531
  msgid ""
12532
  "When a fixed coupon is used its value changes according to the current "
12533
  "currency"
12715
  msgid "Custom Page"
12716
  msgstr ""
12717
 
12718
+ #: includes/settings/wcj-settings-my-account.php:166
12719
+ msgid "Endpoint"
12720
+ msgstr ""
12721
+
12722
+ #: includes/settings/wcj-settings-my-account.php:169
12723
+ msgid "The Custom Page url, after /my-account/"
12724
+ msgstr ""
12725
+
12726
+ #: includes/settings/wcj-settings-my-account.php:169
12727
+ msgid "If empty, it will be added \"?section=your-page\" after /my-account/"
12728
+ msgstr ""
12729
+
12730
+ #: includes/settings/wcj-settings-my-account.php:188
12731
+ #: includes/settings/wcj-settings-my-account.php:193
12732
  msgid "Dashboard Customization"
12733
  msgstr ""
12734
 
12735
+ #: includes/settings/wcj-settings-my-account.php:200
12736
  msgid "Custom Dashboard Content"
12737
  msgstr ""
12738
 
12739
+ #: includes/settings/wcj-settings-my-account.php:201
12740
  msgid ""
12741
  "This will add content at the beginning of dashboard. If you need to add "
12742
  "custom content to the end of the dashboard, use <strong>Custom Info Blocks</"
12743
  "strong> section and select <strong>Account dashboard</strong> position."
12744
  msgstr ""
12745
 
12746
+ #: includes/settings/wcj-settings-my-account.php:202
12747
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:134
12748
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:146
12749
  #: includes/settings/wcj-settings-stock.php:42
12750
  #: includes/settings/wcj-settings-stock.php:55
12751
  msgid "Ignored if empty."
12752
  msgstr ""
12753
 
12754
+ #: includes/settings/wcj-settings-my-account.php:209
12755
  msgid "Hide \"Hello ...\" Message"
12756
  msgstr ""
12757
 
12758
+ #: includes/settings/wcj-settings-my-account.php:216
12759
  msgid "Hide \"From your account dashboard ...\" Message"
12760
  msgstr ""
12761
 
12762
+ #: includes/settings/wcj-settings-my-account.php:229
12763
+ #: includes/settings/wcj-settings-my-account.php:234
12764
  msgid "Custom Info Blocks"
12765
  msgstr ""
12766
 
12767
+ #: includes/settings/wcj-settings-my-account.php:274
12768
  msgid "Account content"
12769
  msgstr ""
12770
 
12771
+ #: includes/settings/wcj-settings-my-account.php:275
12772
  msgid "Account dashboard"
12773
  msgstr ""
12774
 
12775
+ #: includes/settings/wcj-settings-my-account.php:276
12776
  msgid "Account navigation"
12777
  msgstr ""
12778
 
12779
+ #: includes/settings/wcj-settings-my-account.php:277
12780
  msgid "After account downloads"
12781
  msgstr ""
12782
 
12783
+ #: includes/settings/wcj-settings-my-account.php:278
12784
  msgid "After account navigation"
12785
  msgstr ""
12786
 
12787
+ #: includes/settings/wcj-settings-my-account.php:279
12788
  msgid "After account orders"
12789
  msgstr ""
12790
 
12791
+ #: includes/settings/wcj-settings-my-account.php:280
12792
  msgid "After account payment methods"
12793
  msgstr ""
12794
 
12795
+ #: includes/settings/wcj-settings-my-account.php:281
12796
  msgid "After available downloads"
12797
  msgstr ""
12798
 
12799
+ #: includes/settings/wcj-settings-my-account.php:282
12800
  msgid "After customer login form"
12801
  msgstr ""
12802
 
12803
+ #: includes/settings/wcj-settings-my-account.php:283
12804
  msgid "After edit account address form"
12805
  msgstr ""
12806
 
12807
+ #: includes/settings/wcj-settings-my-account.php:284
12808
  msgid "After edit account form"
12809
  msgstr ""
12810
 
12811
+ #: includes/settings/wcj-settings-my-account.php:285
12812
  msgid "After my account"
12813
  msgstr ""
12814
 
12815
+ #: includes/settings/wcj-settings-my-account.php:286
12816
  msgid "Available download end"
12817
  msgstr ""
12818
 
12819
+ #: includes/settings/wcj-settings-my-account.php:287
12820
  msgid "Available download start"
12821
  msgstr ""
12822
 
12823
+ #: includes/settings/wcj-settings-my-account.php:288
12824
  msgid "Available downloads"
12825
  msgstr ""
12826
 
12827
+ #: includes/settings/wcj-settings-my-account.php:289
12828
  msgid "Before account downloads"
12829
  msgstr ""
12830
 
12831
+ #: includes/settings/wcj-settings-my-account.php:290
12832
  msgid "Before account navigation"
12833
  msgstr ""
12834
 
12835
+ #: includes/settings/wcj-settings-my-account.php:291
12836
  msgid "Before account orders"
12837
  msgstr ""
12838
 
12839
+ #: includes/settings/wcj-settings-my-account.php:292
12840
  msgid "Before account orders pagination"
12841
  msgstr ""
12842
 
12843
+ #: includes/settings/wcj-settings-my-account.php:293
12844
  msgid "Before account payment methods"
12845
  msgstr ""
12846
 
12847
+ #: includes/settings/wcj-settings-my-account.php:294
12848
  msgid "Before Available downloads"
12849
  msgstr ""
12850
 
12851
+ #: includes/settings/wcj-settings-my-account.php:295
12852
  msgid "Before customer login form"
12853
  msgstr ""
12854
 
12855
+ #: includes/settings/wcj-settings-my-account.php:296
12856
  msgid "Before edit account address form"
12857
  msgstr ""
12858
 
12859
+ #: includes/settings/wcj-settings-my-account.php:297
12860
  msgid "Before edit account form"
12861
  msgstr ""
12862
 
12863
+ #: includes/settings/wcj-settings-my-account.php:298
12864
  msgid "Before my account"
12865
  msgstr ""
12866
 
12867
+ #: includes/settings/wcj-settings-my-account.php:299
12868
  msgid "Edit account form"
12869
  msgstr ""
12870
 
12871
+ #: includes/settings/wcj-settings-my-account.php:300
12872
  msgid "Edit account form end"
12873
  msgstr ""
12874
 
12875
+ #: includes/settings/wcj-settings-my-account.php:301
12876
  msgid "Edit account form start"
12877
  msgstr ""
12878
 
12879
+ #: includes/settings/wcj-settings-my-account.php:302
12880
  msgid "Login form"
12881
  msgstr ""
12882
 
12883
+ #: includes/settings/wcj-settings-my-account.php:303
12884
  msgid "Login form end"
12885
  msgstr ""
12886
 
12887
+ #: includes/settings/wcj-settings-my-account.php:304
12888
  msgid "Login form start"
12889
  msgstr ""
12890
 
12891
+ #: includes/settings/wcj-settings-my-account.php:305
12892
  msgid "Lost password form"
12893
  msgstr ""
12894
 
12895
+ #: includes/settings/wcj-settings-my-account.php:306
12896
  msgid "Register form"
12897
  msgstr ""
12898
 
12899
+ #: includes/settings/wcj-settings-my-account.php:307
12900
  msgid "Register form end"
12901
  msgstr ""
12902
 
12903
+ #: includes/settings/wcj-settings-my-account.php:308
12904
  msgid "Register form start"
12905
  msgstr ""
12906
 
12907
+ #: includes/settings/wcj-settings-my-account.php:309
12908
  msgid "Reset password form"
12909
  msgstr ""
12910
 
12950
  #: includes/settings/wcj-settings-offer-price.php:48
12951
  #: includes/settings/wcj-settings-order-min-amount.php:29
12952
  #: includes/settings/wcj-settings-order-min-amount.php:36
12953
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:117
12954
  msgid "Exclude"
12955
  msgstr ""
12956
 
13162
  msgstr ""
13163
 
13164
  #: includes/settings/wcj-settings-order-custom-statuses.php:54
13165
+ msgid "Remove Status Prefix"
13166
+ msgstr ""
13167
+
13168
+ #: includes/settings/wcj-settings-order-custom-statuses.php:56
13169
+ msgid "Removes the <code>wc-</code> prefix from custom statuses."
13170
+ msgstr ""
13171
+
13172
+ #: includes/settings/wcj-settings-order-custom-statuses.php:56
13173
+ msgid "Enable it if you can't see the orders or the statuses."
13174
+ msgstr ""
13175
+
13176
+ #: includes/settings/wcj-settings-order-custom-statuses.php:64
13177
  msgid "\"Processing\" and \"Complete\" Action Buttons"
13178
  msgstr ""
13179
 
13180
+ #: includes/settings/wcj-settings-order-custom-statuses.php:65
13181
  msgid ""
13182
  "By default, when order has custom status, \"Processing\" and \"Complete\" "
13183
  "action buttons are hidden. You can enable it here. Possible values are: Show "
13184
  "both; Show \"Processing\" only; Show \"Complete\" only; Hide (default)."
13185
  msgstr ""
13186
 
13187
+ #: includes/settings/wcj-settings-order-custom-statuses.php:70
13188
  msgid "Show both"
13189
  msgstr ""
13190
 
13191
+ #: includes/settings/wcj-settings-order-custom-statuses.php:71
13192
  msgid "Show \"Processing\" only"
13193
  msgstr ""
13194
 
13195
+ #: includes/settings/wcj-settings-order-custom-statuses.php:72
13196
  msgid "Show \"Complete\" only"
13197
  msgstr ""
13198
 
13199
+ #: includes/settings/wcj-settings-order-custom-statuses.php:79
13200
  msgid "Add Custom Statuses to Admin Order List Action Buttons"
13201
  msgstr ""
13202
 
13203
+ #: includes/settings/wcj-settings-order-custom-statuses.php:81
13204
  msgid ""
13205
  "If you wish to add custom statuses buttons to the admin Orders page action "
13206
  "buttons (Actions column), enable the checkbox here."
13207
  msgstr ""
13208
 
13209
+ #: includes/settings/wcj-settings-order-custom-statuses.php:89
13210
  msgid "Enable Colors"
13211
  msgstr ""
13212
 
13213
+ #: includes/settings/wcj-settings-order-custom-statuses.php:90
13214
  msgid "Choose if you want the buttons to have colors."
13215
  msgstr ""
13216
 
13217
+ #: includes/settings/wcj-settings-order-custom-statuses.php:97
13218
  msgid "Enable Colors in Status Column"
13219
  msgstr ""
13220
 
13221
+ #: includes/settings/wcj-settings-order-custom-statuses.php:99
13222
  msgid "Enable this if you want the statuses in Status column to have colors."
13223
  msgstr ""
13224
 
13225
+ #: includes/settings/wcj-settings-order-custom-statuses.php:106
13226
  msgid "Add Custom Statuses Buttons to Admin Order Preview Actions"
13227
  msgstr ""
13228
 
13229
+ #: includes/settings/wcj-settings-order-custom-statuses.php:108
13230
  msgid ""
13231
  "If you wish to add custom statuses buttons to the admin orders preview page, "
13232
  "enable the checkbox here."
13775
 
13776
  #: includes/settings/wcj-settings-payment-gateways-by-currency.php:16
13777
  #: includes/settings/wcj-settings-payment-gateways-by-user-role.php:34
13778
+ #: includes/settings/wcj-settings-shipping-by-condition.php:57
13779
  msgid "Leave empty to disable."
13780
  msgstr ""
13781
 
13793
  msgstr ""
13794
 
13795
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:22
13796
+ #: includes/settings/wcj-settings-shipping-by-condition.php:37
13797
  #: includes/settings/wcj-settings-shipping-by-order-amount.php:20
13798
  #: includes/settings/wcj-settings-shipping-by-order-qty.php:20
13799
  #: includes/settings/wcj-settings-shipping-description.php:58
13803
  msgstr ""
13804
 
13805
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:24
13806
+ #: includes/settings/wcj-settings-shipping-by-condition.php:39
13807
  #: includes/settings/wcj-settings-shipping-by-order-amount.php:22
13808
  #: includes/settings/wcj-settings-shipping-by-order-qty.php:22
13809
  #: includes/settings/wcj-settings-shipping-description.php:60
13821
  msgstr ""
13822
 
13823
  #: includes/settings/wcj-settings-payment-gateways-by-user-role.php:19
13824
+ #: includes/settings/wcj-settings-shipping-by-condition.php:21
13825
  msgid "Multiple Role Checking"
13826
  msgstr ""
13827
 
13828
  #: includes/settings/wcj-settings-payment-gateways-by-user-role.php:22
13829
+ #: includes/settings/wcj-settings-shipping-by-condition.php:24
13830
  msgid ""
13831
  "Enable if you have some plugin that allows users with multiple roles like "
13832
  "\"User Role Editor\"."
13880
  "or modules."
13881
  msgstr ""
13882
 
13883
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:20
13884
+ msgid "Force Default Payment Gateway"
13885
+ msgstr ""
13886
+
13887
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:23
13888
+ msgid ""
13889
+ "Pre-sets the default available payment gateway on cart and checkout pages."
13890
+ msgstr ""
13891
+
13892
  #: includes/settings/wcj-settings-payment-gateways-fees.php:23
13893
+ #, php-format
13894
+ msgid ""
13895
+ "The chosen payment will be the first one from the <a href=\"%s\">Payments</"
13896
+ "a> page"
13897
+ msgstr ""
13898
+
13899
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:42
13900
  msgid "Fee (or Discount) Title"
13901
  msgstr ""
13902
 
13903
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:43
13904
  msgid "Fee (or discount) title to show to customer."
13905
  msgstr ""
13906
 
13907
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:50
13908
  msgid "Fee (or Discount) Type"
13909
  msgstr ""
13910
 
13911
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:51
13912
  msgid "Percent or fixed value."
13913
  msgstr ""
13914
 
13915
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:61
13916
  msgid "Fee (or Discount) Value"
13917
  msgstr ""
13918
 
13919
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:62
13920
  msgid "The value. For discount enter a negative number."
13921
  msgstr ""
13922
 
13923
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:69
13924
  msgid "Minimum Cart Amount"
13925
  msgstr ""
13926
 
13927
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:70
13928
  msgid "Minimum cart amount for adding the fee (or discount)."
13929
  msgstr ""
13930
 
13931
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:70
13932
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:78
13933
  msgid "Set 0 to disable."
13934
  msgstr ""
13935
 
13936
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:77
13937
  msgid "Maximum Cart Amount"
13938
  msgstr ""
13939
 
13940
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:78
13941
  msgid "Maximum cart amount for adding the fee (or discount)."
13942
  msgstr ""
13943
 
13944
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:87
13945
  msgid "Round the fee (or discount) value before adding to the cart."
13946
  msgstr ""
13947
 
13948
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:94
13949
  msgid "If rounding is enabled, set precision (i.e. number of decimals) here."
13950
  msgstr ""
13951
 
13952
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:108
13953
  msgid "Tax class"
13954
  msgstr ""
13955
 
13956
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:109
13957
  msgid "If taxing is enabled, set tax class here."
13958
  msgstr ""
13959
 
13960
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:113
13961
  msgid "Standard Rate"
13962
  msgstr ""
13963
 
13964
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:116
13965
  msgid "Exclude Shipping when Calculating Total Cart Amount"
13966
  msgstr ""
13967
 
13968
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:118
13969
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:126
13970
  msgid ""
13971
  "This affects \"Percent\" type fees and \"Minimum/Maximum Cart Amount\" "
13972
  "options."
13973
  msgstr ""
13974
 
13975
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:124
13976
  msgid "Include Taxes"
13977
  msgstr ""
13978
 
13979
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:125
13980
  msgid "Include taxes when calculating Total Cart Amount"
13981
  msgstr ""
13982
 
13983
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:132
13984
  msgid "Require Products"
13985
  msgstr ""
13986
 
13987
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:133
13988
  msgid ""
13989
  "Require at least one of selected products to be in cart for fee to be "
13990
  "applied."
13991
  msgstr ""
13992
 
13993
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:145
13994
  msgid "Do not apply fee, if at least one of selected products is in cart."
13995
  msgstr ""
13996
 
14338
  msgstr ""
14339
 
14340
  #: includes/settings/wcj-settings-pdf-invoicing-display.php:25
14341
+ #: includes/settings/wcj-settings-price-by-country.php:301
14342
  #: includes/settings/wcj-settings-shipping.php:30
14343
  msgid "Admin Title"
14344
  msgstr ""
14828
  msgid "Disable Price by Country for Bots"
14829
  msgstr ""
14830
 
14831
+ #: includes/settings/wcj-settings-price-by-country.php:189
14832
  msgid "User IP Detection Method"
14833
  msgstr ""
14834
 
14835
+ #: includes/settings/wcj-settings-price-by-country.php:199
14836
  msgid "Price Format Method"
14837
  msgstr ""
14838
 
14839
+ #: includes/settings/wcj-settings-price-by-country.php:200
14840
  msgid "The moment \"Pretty Price\" and \"Rounding\" will be applied"
14841
  msgstr ""
14842
 
14843
+ #: includes/settings/wcj-settings-price-by-country.php:205
14844
  msgid "get_price()"
14845
  msgstr ""
14846
 
14847
+ #: includes/settings/wcj-settings-price-by-country.php:206
14848
  msgid "wc_get_price_to_display()"
14849
  msgstr ""
14850
 
14851
+ #: includes/settings/wcj-settings-price-by-country.php:214
14852
  msgid "Country Groups"
14853
  msgstr ""
14854
 
14855
+ #: includes/settings/wcj-settings-price-by-country.php:219
14856
  msgid "Countries Selection"
14857
  msgstr ""
14858
 
14859
+ #: includes/settings/wcj-settings-price-by-country.php:220
14860
  msgid "Choose how do you want to enter countries groups in admin."
14861
  msgstr ""
14862
 
14863
+ #: includes/settings/wcj-settings-price-by-country.php:225
14864
  msgid "Comma separated list"
14865
  msgstr ""
14866
 
14867
+ #: includes/settings/wcj-settings-price-by-country.php:226
14868
  msgid "Multiselect"
14869
  msgstr ""
14870
 
14871
+ #: includes/settings/wcj-settings-price-by-country.php:227
14872
  #: includes/settings/wcj-settings-product-by-condition.php:82
14873
  #: includes/settings/wcj-settings-related-products.php:164
14874
  msgid "Chosen select"
14875
  msgstr ""
14876
 
14877
+ #: includes/settings/wcj-settings-price-by-country.php:231
14878
  msgid "Autogenerate Groups"
14879
  msgstr ""
14880
 
14881
+ #: includes/settings/wcj-settings-price-by-country.php:237
14882
  msgid "Groups Number"
14883
  msgstr ""
14884
 
14885
+ #: includes/settings/wcj-settings-price-by-country.php:261
14886
  msgid ""
14887
  "Countries. List of comma separated country codes.<br>For country codes and "
14888
  "predefined sets visit <a href=\"https://booster.io/country-codes/\" target="
14889
  "\"_blank\">https://booster.io/country-codes/</a>"
14890
  msgstr ""
14891
 
14892
+ #: includes/settings/wcj-settings-price-by-country.php:347
14893
  msgid "Multiply Price by"
14894
  msgstr ""
14895
 
15454
  msgstr ""
15455
 
15456
  #: includes/settings/wcj-settings-product-addons.php:220
15457
+ #: includes/settings/wcj-settings-shipping-by-condition.php:128
15458
  #: includes/settings/wcj-settings-shipping-options.php:41
15459
  msgid "Set to zero to use the default priority."
15460
  msgstr ""
17535
  msgid "Term #%s"
17536
  msgstr ""
17537
 
17538
+ #: includes/settings/wcj-settings-shipping-by-condition.php:55
17539
+ #: includes/settings/wcj-settings-shipping-by-condition.php:61
17540
  #, php-format
17541
  msgid "Shipping Methods by %s"
17542
  msgstr ""
17543
 
17544
+ #: includes/settings/wcj-settings-shipping-by-condition.php:91
17545
  #, php-format
17546
  msgid "Include %s"
17547
  msgstr ""
17548
 
17549
+ #: includes/settings/wcj-settings-shipping-by-condition.php:102
17550
  #, php-format
17551
  msgid "Exclude %s"
17552
  msgstr ""
17553
 
17554
+ #: includes/settings/wcj-settings-shipping-by-condition.php:127
17555
  msgid "Filter Priority"
17556
  msgstr ""
17557
 
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
  Contributors: algoritmika, anbinder, debugeris, karzin
3
  Tags: woocommerce, booster for woocommerce, woocommerce jetpack
4
  Requires at least: 4.4
5
- Tested up to: 5.3
6
- Stable tag: 4.7.1
7
  License: GNU General Public License v3.0
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
@@ -193,6 +193,26 @@ You can see the differences between versions in this [table](https://booster.io/
193
 
194
  == Changelog ==
195
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
196
  = 4.7.1 - 10/02/2020 =
197
  * Feature - EMAILS & MISC. - Template Editor - Add option to set custom `/woocommerce/` folder among other paths from other possible plugins.
198
  * Fix - CART & CHECKOUT - EU VAT Number - Fix possible errors like "Call to Undefined WooCommerce functions".
2
  Contributors: algoritmika, anbinder, debugeris, karzin
3
  Tags: woocommerce, booster for woocommerce, woocommerce jetpack
4
  Requires at least: 4.4
5
+ Tested up to: 5.4
6
+ Stable tag: 4.8.0
7
  License: GNU General Public License v3.0
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
193
 
194
  == Changelog ==
195
 
196
+ = 4.8.0 - 18/03/2020 =
197
+ * Fix - Functions - General - Fix php warning if WPML isn't active and 'WPML: Get Terms in All Languages' is enabled.
198
+ * Fix - PRICES & CURRENCIES - Multicurrency Product Base Price - Remove "Third Party Price Filter Compatibility" option.
199
+ * Fix - PRICES & CURRENCIES - Multicurrency Product Base Price - Fix Compatibility with Price Filter widget.
200
+ * Fix - PRICES & CURRENCIES - Fix "WooCommerce Price Filter Compatibility" option.
201
+ * Fix - PRODUCTS - Product Availability by Date - Fix wrong availabilities by always creating the date with `DateTime::createFromFormat`.
202
+ * Fix - PRODUCTS - Product Addons - Fix warning when exporting '_wcj_product_addons_per_product_enable_by_variation_%' meta.
203
+ * Fix - PRODUCTS - Product Addons - Fix wrong '_wcj_product_addons_per_product_enable_by_variation_%' meta value after import.
204
+ * Fix - SHIPPING & ORDERS - Order Custom Statuses - Add compatibility with "Load Modules on Init Hook" option.
205
+ * Dev - CART & CHECKOUT - Checkout Custom Fields - Update fields on admin for subscription orders.
206
+ * Dev - EMAILS & MISC. - Admin Tools - Add 'Enable Interface By User Roles' option allowing to disable the whole Booster admin interface for not selected roles.
207
+ * Dev - EMAILS & MISC. - My Account - Add 'Endpoint' option to Custom Pages as a plus feature.
208
+ * Dev - PAYMENT GATEWAYS - Gateways Fees and Discounts - Add 'Force Default Payment Gateway' option allowing to pre-set the default available payment gateway on cart and checkout pages.
209
+ * Dev - PRICES & CURRENCIES - Global Discount - Add 'Compatibility With Products Shortcode' option, allowing the on_sale attribute to work.
210
+ * Dev - PRICES & CURRENCIES - Prices and Currencies by Country - Add new compatibility option with native WooCommerce coupons.
211
+ * Dev - PRODUCTS - Product Addons - Add `%addon_title%` template variable on Each Addon from Cart Template.
212
+ * Dev - SHIPPING & ORDERS - Order Custom Statuses - Add "Remove Status Prefix" option added.
213
+ * Dev - SHIPPING & ORDERS - Shipping Methods by Users - Add 'Multiple Role Checking' option for plus version.
214
+ * WC tested up to: 4.0
215
+
216
  = 4.7.1 - 10/02/2020 =
217
  * Feature - EMAILS & MISC. - Template Editor - Add option to set custom `/woocommerce/` folder among other paths from other possible plugins.
218
  * Fix - CART & CHECKOUT - EU VAT Number - Fix possible errors like "Call to Undefined WooCommerce functions".
woocommerce-jetpack.php CHANGED
@@ -3,13 +3,13 @@
3
  Plugin Name: Booster for WooCommerce
4
  Plugin URI: https://booster.io
5
  Description: Supercharge your WooCommerce site with these awesome powerful features. More than 100 modules. All in one WooCommerce plugin.
6
- Version: 4.7.1
7
  Author: Algoritmika Ltd
8
  Author URI: https://booster.io
9
  Text Domain: woocommerce-jetpack
10
  Domain Path: /langs
11
- Copyright: © 2019 Algoritmika Ltd.
12
- WC tested up to: 3.9
13
  License: GNU General Public License v3.0
14
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
15
  */
@@ -57,7 +57,7 @@ final class WC_Jetpack {
57
  * @var string
58
  * @since 2.4.7
59
  */
60
- public $version = '4.7.1';
61
 
62
  /**
63
  * @var WC_Jetpack The single instance of the class
3
  Plugin Name: Booster for WooCommerce
4
  Plugin URI: https://booster.io
5
  Description: Supercharge your WooCommerce site with these awesome powerful features. More than 100 modules. All in one WooCommerce plugin.
6
+ Version: 4.8.0
7
  Author: Algoritmika Ltd
8
  Author URI: https://booster.io
9
  Text Domain: woocommerce-jetpack
10
  Domain Path: /langs
11
+ Copyright: © 2020 Algoritmika Ltd.
12
+ WC tested up to: 4.0
13
  License: GNU General Public License v3.0
14
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
15
  */
57
  * @var string
58
  * @since 2.4.7
59
  */
60
+ public $version = '4.8.0';
61
 
62
  /**
63
  * @var WC_Jetpack The single instance of the class