Booster for WooCommerce - Version 4.1.0

Version Description

  • 12/12/2018 =
  • Feature - CART & CHECKOUT - Checkout Customization - Add option to recalculate checkout.
  • Feature - CART & CHECKOUT - Checkout Customization - Add option to update checkout when some field have its value changed.
  • Feature - PAYMENT GATEWAYS - Gateways per Product or Category - "Use Variations" option added.
  • Feature - SHIPPING & ORDERS - Maximum Products per User - "Order Status" option added.
  • Feature - EMAILS & MISC. - Admin Tools - Products Options - "JSON Product Search Limit" option added.
  • Feature - Shortcodes - General - [wcj_post_meta_sum] shortcode added.
  • Fix - PRICES & CURRENCIES - Price Formats - Current currency issue fixed (e.g. price format on admin order edit page).
  • Fix - PRICES & CURRENCIES - Product Price by Formula - Fix shortcodes as parameters miscalculating price on cart by adding product_id attribute on shortcodes.
  • Fix - PRICES & CURRENCIES - Product Open Pricing (Name Your Price) - Empty price issue fixed.
  • Fix - PRICES & CURRENCIES - Product Open Pricing (Name Your Price) - "Multicurrency (Currency Switcher)" module support added.
  • Fix - PRODUCTS - Product Images - product_images_hide_on_archive() - Issue with replacing single product's image with custom HTML on archives fixed.
  • Fix - PRODUCTS - Product Input Fields - Fix multiple uploads generating a single file by renaming them uniquely.
  • Fix - PRODUCTS - Product MSRP - Comma decimal separator issue fixed.
  • Fix - PRODUCTS - Related Products - Relate Manually - Fix warning if there aren't any products selected.
  • Fix - CART & CHECKOUT - Checkout Custom Fields - Hidden fields are not added to order meta now (i.e. not showing hidden fields on thank you page and in emails now).
  • Fix - PAYMENT GATEWAYS - Gateways Fees and Discounts - init_options() is now initialized on init hook for better translation and performance.
  • Fix - SHIPPING & ORDERS - Order Min/Max Quantities - Fix quantity attribute of add to cart button on loop pages.
  • Fix - SHIPPING & ORDERS - Order Minimum Amount - Add compatibility with Price by country module.
  • Fix - PDF INVOICING & PACKING SLIPS - Bulk actions - "Undefined variable: sendback" PHP notice fixed.
  • Fix - PDF INVOICING & PACKING SLIPS - Possible deprecated each() PHP notice fixed (compatibility with PHP v7.2.0).
  • Fix - EMAILS & MISC. - Admin Bar - Page reload added after "Enable Module" checkbox is enabled (so admin bar is shown at once).
  • Fix - EMAILS & MISC. - Custom Emails - $_GET['order_id'] param added (fixes the issue with bulk status update emails on some servers).
  • Dev - PRICES & CURRENCIES - Product Open Pricing (Name Your Price) - Message on Price too Small / too Big - %price%, %min_price% and %max_price% replaced values added.
  • Dev - PRICES & CURRENCIES - Wholesale Price - "Advanced: Price Filters Priority" option added.
  • Dev - PRICES & CURRENCIES - Product Price by Formula - Add option to use the module on admin scope.
  • Dev - PRODUCTS - Product Images - wcj_product_images_loop_product_thumbnail_filter, wcj_product_images_loop_product_thumbnail_filter_priority, wcj_product_images_single_product_images_filter and wcj_product_images_single_product_images_filter_priority filters added.
  • Dev - PRODUCTS - Tax Display - Add shop scope on display by user role option.
  • Dev - PRODUCTS - Products per Page - Add compatibility with DIVI theme.
  • Dev - PRODUCTS - Related Products - Relate Manually - Add new option to set the related products metabox value by default.
  • Dev - PAYMENT GATEWAYS - Gateways Fees and Discounts - Shortcodes are now processed in fee titles.
  • Dev - PAYMENT GATEWAYS - Gateways Fees and Discounts - Add new option to include taxes when calculating total cart amount.
  • Dev - SHIPPING & ORDERS - Order Min/Max Quantities - Sync quantity button with add to cart button quantity.
  • Dev - SHIPPING & ORDERS - Order Min/Max Quantities - Prevent add to cart button on shop pages from being clicked if input requirements haven't been met.
  • Dev - EMAILS & MISC. - Admin Bar - "WooCommerce" Admin Bar - "List product categories" and "List product tags" options added.
  • Dev - EMAILS & MISC. - Admin Tools - "Products Attributes" tool and "Product Revisions" option moved from "General" module.
  • Dev - EMAILS & MISC. - Admin Tools - Module description updated. Admin settings restyled and descriptions updated. "Show extended info" link added.
  • Dev - EMAILS & MISC. - Debug Tools - Initial module release (tools moved from "Admin Tools" module). Admin settings descriptions updated. Log restyled.
  • Dev - EMAILS & MISC. - General - "PHP Options" options moved from "Admin Tools" module.
  • Dev - EMAILS & MISC. - General - Module description updated. Admin settings descriptions updated.
  • Dev - Functions - Products - wcj_get_products() - Code optimized.
  • Dev - Shortcodes - Orders - [wcj_order_total_in_words] - whole attribute now automatically gets order currency symbol or currency code (set by use_currency_symbol attribute) (instead of Dollars). decimal attribute set to ¢ (instead of Cents).
  • Dev - Shortcodes - Products - [wcj_product_you_save_percent] - Add compatibility with "Dynamic Pricing" plugin.
  • Dev - Shortcodes - Products Crowdfunding - get_product_orders_data() - start_date and order_status optional attributes added.
  • Dev - Shortcodes - Products Crowdfunding - get_product_orders_data() - Code cleaned up.
  • Dev - Classes - WCJ_Module_Product_By_Condition - pre_get_posts - WP_Query optimized (post__not_in added).
Download this release

Release Info

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

Code changes from version 4.0.1 to 4.1.0

Files changed (59) hide show
  1. includes/admin/class-wc-settings-jetpack.php +3 -3
  2. includes/admin/wcj-modules-cats.php +2 -1
  3. includes/class-wcj-admin-bar.php +34 -4
  4. includes/class-wcj-admin-tools.php +119 -71
  5. includes/class-wcj-checkout-custom-fields.php +11 -4
  6. includes/class-wcj-checkout-customization.php +60 -2
  7. includes/class-wcj-debug-tools.php +107 -0
  8. includes/class-wcj-general.php +21 -121
  9. includes/class-wcj-max-products-per-user.php +18 -10
  10. includes/class-wcj-order-min-amount.php +7 -3
  11. includes/class-wcj-order-quantities.php +62 -2
  12. includes/class-wcj-payment-gateways-fees.php +9 -6
  13. includes/class-wcj-payment-gateways-per-category.php +11 -12
  14. includes/class-wcj-pdf-invoicing.php +3 -2
  15. includes/class-wcj-price-by-country.php +10 -3
  16. includes/class-wcj-price-formats.php +4 -3
  17. includes/class-wcj-product-images.php +22 -8
  18. includes/class-wcj-product-msrp.php +3 -2
  19. includes/class-wcj-product-open-pricing.php +50 -31
  20. includes/class-wcj-product-price-by-formula.php +31 -4
  21. includes/class-wcj-products-per-page.php +18 -2
  22. includes/class-wcj-related-products.php +17 -14
  23. includes/class-wcj-tax-display.php +6 -4
  24. includes/class-wcj-wholesale-price.php +7 -5
  25. includes/classes/class-wcj-module-product-by-condition.php +6 -4
  26. includes/core/wcj-loader.php +2 -2
  27. includes/core/wcj-modules.php +2 -1
  28. includes/emails/class-wc-email-wcj-custom.php +3 -2
  29. includes/functions/wcj-functions-debug.php +4 -4
  30. includes/functions/wcj-functions-price-currency.php +3 -2
  31. includes/functions/wcj-functions-products.php +10 -10
  32. includes/input-fields/class-wcj-product-input-fields-core.php +5 -5
  33. includes/lib/tcpdf/tcpdf.php +18 -5
  34. includes/price-by-country/class-wcj-price-by-country-core.php +61 -14
  35. includes/settings/meta-box/wcj-settings-meta-box-admin-tools.php +1 -1
  36. includes/settings/meta-box/wcj-settings-meta-box-product-images.php +3 -1
  37. includes/settings/meta-box/wcj-settings-meta-box-related-products.php +3 -2
  38. includes/settings/wcj-settings-admin-bar.php +19 -4
  39. includes/settings/wcj-settings-admin-tools.php +30 -46
  40. includes/settings/wcj-settings-checkout-custom-info.php +1 -0
  41. includes/settings/wcj-settings-checkout-customization.php +51 -1
  42. includes/settings/wcj-settings-debug-tools.php +55 -0
  43. includes/settings/wcj-settings-general.php +44 -27
  44. includes/settings/wcj-settings-max-products-per-user.php +12 -1
  45. includes/settings/wcj-settings-payment-gateways-fees.php +85 -76
  46. includes/settings/wcj-settings-payment-gateways-per-category.php +23 -5
  47. includes/settings/wcj-settings-product-open-pricing.php +3 -1
  48. includes/settings/wcj-settings-product-price-by-formula.php +9 -1
  49. includes/settings/wcj-settings-related-products.php +12 -1
  50. includes/settings/wcj-settings-tax-display.php +15 -2
  51. includes/settings/wcj-settings-wholesale-price.php +8 -1
  52. includes/shortcodes/class-wcj-shortcodes-general.php +18 -2
  53. includes/shortcodes/class-wcj-shortcodes-invoices.php +2 -7
  54. includes/shortcodes/class-wcj-shortcodes-orders.php +20 -17
  55. includes/shortcodes/class-wcj-shortcodes-products-crowdfunding.php +22 -37
  56. includes/shortcodes/class-wcj-shortcodes-products.php +6 -3
  57. langs/woocommerce-jetpack.pot +673 -452
  58. readme.txt +53 -5
  59. woocommerce-jetpack.php +3 -3
includes/admin/class-wc-settings-jetpack.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings
4
  *
5
- * @version 3.6.0
6
  * @since 1.0.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -168,7 +168,7 @@ class WC_Settings_Jetpack extends WC_Settings_Page {
168
  /**
169
  * Output the settings.
170
  *
171
- * @version 3.5.0
172
  * @todo (maybe) admin_notices
173
  */
174
  function output() {
@@ -209,7 +209,7 @@ class WC_Settings_Jetpack extends WC_Settings_Page {
209
  echo '</div>';
210
  }
211
 
212
- if ( 'yes' === get_option( 'wcj_admin_tools_enabled', 'no' ) && 'yes' === get_option( 'wcj_debuging_enabled', 'no' ) ) {
213
  // Breadcrumbs
214
  $breadcrumbs_html = '';
215
  $breadcrumbs_html .= '<p>';
2
  /**
3
  * Booster for WooCommerce - Settings
4
  *
5
+ * @version 4.1.0
6
  * @since 1.0.0
7
  * @author Algoritmika Ltd.
8
  */
168
  /**
169
  * Output the settings.
170
  *
171
+ * @version 4.1.0
172
  * @todo (maybe) admin_notices
173
  */
174
  function output() {
209
  echo '</div>';
210
  }
211
 
212
+ if ( 'yes' === get_option( 'wcj_debug_tools_enabled', 'no' ) && 'yes' === get_option( 'wcj_debuging_enabled', 'no' ) ) {
213
  // Breadcrumbs
214
  $breadcrumbs_html = '';
215
  $breadcrumbs_html .= '<p>';
includes/admin/wcj-modules-cats.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Modules Array
4
  *
5
- * @version 4.0.0
6
  * @since 2.2.0
7
  * @author Algoritmika Ltd.
8
  * @todo (maybe) split "Shipping & Orders", "Cart & Checkout", "Products", "Prices & Currencies" etc.
@@ -186,6 +186,7 @@ return apply_filters( 'wcj_modules', array(
186
  'old_slugs',
187
  'reports',
188
  'admin_tools',
 
189
  'emails',
190
  'email_options',
191
  'emails_verification',
2
  /**
3
  * Booster for WooCommerce - Modules Array
4
  *
5
+ * @version 4.1.0
6
  * @since 2.2.0
7
  * @author Algoritmika Ltd.
8
  * @todo (maybe) split "Shipping & Orders", "Cart & Checkout", "Products", "Prices & Currencies" etc.
186
  'old_slugs',
187
  'reports',
188
  'admin_tools',
189
+ 'debug_tools',
190
  'emails',
191
  'email_options',
192
  'emails_verification',
includes/class-wcj-admin-bar.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Admin Bar
4
  *
5
- * @version 3.9.0
6
  * @since 2.9.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -16,7 +16,7 @@ class WCJ_Admin_Bar extends WCJ_Module {
16
  /**
17
  * Constructor.
18
  *
19
- * @version 3.9.0
20
  * @since 2.9.0
21
  * @todo (maybe) custom user nodes
22
  * @todo (maybe) optional nodes selection
@@ -48,8 +48,8 @@ class WCJ_Admin_Bar extends WCJ_Module {
48
  add_action( 'wp_head', array( $this, 'add_booster_admin_bar_icon_style' ) );
49
  add_action( 'admin_head', array( $this, 'add_booster_admin_bar_icon_style' ) );
50
  }
51
- add_action( 'woojetpack_after_settings_save', array( $this, 'reload_page_after_settings_save' ), PHP_INT_MAX, 2 );
52
  }
 
53
  }
54
 
55
  /**
@@ -336,10 +336,38 @@ class WCJ_Admin_Bar extends WCJ_Module {
336
  return $nodes;
337
  }
338
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
339
  /**
340
  * add_woocommerce_admin_bar.
341
  *
342
- * @version 3.6.0
343
  * @since 2.9.0
344
  * @todo (maybe) reports > customers > customers > add dates
345
  * @todo (maybe) reports > taxes > taxes_by_code > add dates
@@ -449,10 +477,12 @@ class WCJ_Admin_Bar extends WCJ_Module {
449
  'categories' => array(
450
  'title' => __( 'Categories', 'woocommerce' ),
451
  'href' => admin_url( 'edit-tags.php?taxonomy=product_cat&post_type=product' ),
 
452
  ),
453
  'tags' => array(
454
  'title' => __( 'Tags', 'woocommerce' ),
455
  'href' => admin_url( 'edit-tags.php?taxonomy=product_tag&post_type=product' ),
 
456
  ),
457
  'attributes' => array(
458
  'title' => __( 'Attributes', 'woocommerce' ),
2
  /**
3
  * Booster for WooCommerce - Module - Admin Bar
4
  *
5
+ * @version 4.1.0
6
  * @since 2.9.0
7
  * @author Algoritmika Ltd.
8
  */
16
  /**
17
  * Constructor.
18
  *
19
+ * @version 4.1.0
20
  * @since 2.9.0
21
  * @todo (maybe) custom user nodes
22
  * @todo (maybe) optional nodes selection
48
  add_action( 'wp_head', array( $this, 'add_booster_admin_bar_icon_style' ) );
49
  add_action( 'admin_head', array( $this, 'add_booster_admin_bar_icon_style' ) );
50
  }
 
51
  }
52
+ add_action( 'woojetpack_after_settings_save', array( $this, 'reload_page_after_settings_save' ), PHP_INT_MAX, 2 );
53
  }
54
 
55
  /**
336
  return $nodes;
337
  }
338
 
339
+ /**
340
+ * get_nodes_product_taxonomy.
341
+ *
342
+ * @version 4.1.0
343
+ * @since 4.1.0
344
+ * @todo [dev] hierarchy
345
+ * @todo [dev] count
346
+ * @todo [dev] custom taxonomy
347
+ */
348
+ function get_nodes_product_taxonomy( $taxonomy ) {
349
+ $nodes = array();
350
+ $terms = get_terms( array(
351
+ 'taxonomy' => $taxonomy,
352
+ 'orderby' => 'name',
353
+ 'order' => 'ASC',
354
+ 'hide_empty' => false,
355
+ ) );
356
+ if ( ! empty( $terms ) && ! is_wp_error( $terms ) ) {
357
+ foreach ( $terms as $term ) {
358
+ $nodes[ $term->slug ] = array(
359
+ 'title' => $term->name,
360
+ 'href' => admin_url( 'edit.php?post_type=product&' . $taxonomy . '=' . $term->slug ),
361
+ );
362
+ }
363
+ }
364
+ return $nodes;
365
+ }
366
+
367
  /**
368
  * add_woocommerce_admin_bar.
369
  *
370
+ * @version 4.1.0
371
  * @since 2.9.0
372
  * @todo (maybe) reports > customers > customers > add dates
373
  * @todo (maybe) reports > taxes > taxes_by_code > add dates
477
  'categories' => array(
478
  'title' => __( 'Categories', 'woocommerce' ),
479
  'href' => admin_url( 'edit-tags.php?taxonomy=product_cat&post_type=product' ),
480
+ 'nodes' => ( 'no' === get_option( 'wcj_admin_bar_wc_list_cats', 'no' ) ? array() : $this->get_nodes_product_taxonomy( 'product_cat' ) ),
481
  ),
482
  'tags' => array(
483
  'title' => __( 'Tags', 'woocommerce' ),
484
  'href' => admin_url( 'edit-tags.php?taxonomy=product_tag&post_type=product' ),
485
+ 'nodes' => ( 'no' === get_option( 'wcj_admin_bar_wc_list_tags', 'no' ) ? array() : $this->get_nodes_product_taxonomy( 'product_tag' ) ),
486
  ),
487
  'attributes' => array(
488
  'title' => __( 'Attributes', 'woocommerce' ),
includes/class-wcj-admin-tools.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Admin Tools
4
  *
5
- * @version 4.0.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -15,38 +15,25 @@ class WCJ_Admin_Tools extends WCJ_Module {
15
  /**
16
  * Constructor.
17
  *
18
- * @version 4.0.0
19
- * @todo (maybe) add editable (product and order) metas
20
  */
21
  function __construct() {
22
 
23
  $this->id = 'admin_tools';
24
  $this->short_desc = __( 'Admin Tools', 'woocommerce-jetpack' );
25
- $this->desc = __( 'Booster for WooCommerce debug and log tools.', 'woocommerce-jetpack' );
26
  $this->link_slug = 'woocommerce-booster-admin-tools';
27
  parent::__construct();
28
 
29
  $this->add_tools( array(
30
- 'admin_tools' => array(
31
- 'title' => __( 'Debug Log', 'woocommerce-jetpack' ),
32
- 'desc' => __( 'Log.', 'woocommerce-jetpack' ),
33
- 'tab_title' => __( 'Log', 'woocommerce-jetpack' ),
34
  ),
35
  ) );
36
 
37
- $this->current_php_memory_limit = '';
38
- $this->current_php_time_limit = '';
39
  if ( $this->is_enabled() ) {
40
- // PHP Memory Limit
41
- if ( 0 != ( $php_memory_limit = get_option( 'wcj_admin_tools_php_memory_limit', 0 ) ) ) {
42
- ini_set( 'memory_limit', $php_memory_limit . 'M' );
43
- }
44
- $this->current_php_memory_limit = sprintf( ' ' . __( 'Current PHP memory limit: %s.', 'woocommerce-jetpack' ), ini_get( 'memory_limit' ) );
45
- // PHP Time Limit
46
- if ( 0 != ( $php_time_limit = get_option( 'wcj_admin_tools_php_time_limit', 0 ) ) ) {
47
- set_time_limit( $php_time_limit );
48
- }
49
- $this->current_php_time_limit = sprintf( ' ' . __( 'Current PHP time limit: %s seconds.', 'woocommerce-jetpack' ), ini_get( 'max_execution_time' ) );
50
  // Order Meta
51
  if ( 'yes' === get_option( 'wcj_admin_tools_show_order_meta_enabled', 'no' ) ) {
52
  add_action( 'add_meta_boxes', array( $this, 'add_order_meta_meta_box' ) );
@@ -61,6 +48,10 @@ class WCJ_Admin_Tools extends WCJ_Module {
61
  add_action( 'add_meta_boxes', array( $this, 'maybe_add_variable_product_pricing_meta_box' ) );
62
  add_action( 'save_post_product', array( $this, 'save_meta_box' ), PHP_INT_MAX, 2 );
63
  }
 
 
 
 
64
  // Admin Notices
65
  if ( 'yes' === get_option( 'wcj_admin_tools_suppress_connect_notice', 'no' ) ) {
66
  add_filter( 'woocommerce_helper_suppress_connect_notice', '__return_true' );
@@ -68,15 +59,40 @@ class WCJ_Admin_Tools extends WCJ_Module {
68
  if ( 'yes' === get_option( 'wcj_admin_tools_suppress_admin_notices', 'no' ) ) {
69
  add_filter( 'woocommerce_helper_suppress_admin_notices', '__return_true' );
70
  }
 
 
 
 
71
  }
72
  }
73
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74
  /**
75
  * make_original_variable_product_pricing_readonly.
76
  *
77
  * @version 3.3.0
78
  * @since 3.3.0
79
- * @todo this is not really making fields readonly (e.g. field is still editable via keyboard tab button)
80
  */
81
  function make_original_variable_product_pricing_readonly() {
82
  echo '<style>
@@ -171,67 +187,99 @@ class WCJ_Admin_Tools extends WCJ_Module {
171
  }
172
 
173
  /**
174
- * create_admin_tools_tool.
175
  *
176
- * @version 3.3.0
 
177
  */
178
- function create_admin_tools_tool() {
179
- // Delete log
180
- if ( isset( $_GET['wcj_delete_log'] ) && wcj_is_user_role( 'administrator' ) ) {
181
- update_option( 'wcj_log', '' );
182
- if ( wp_safe_redirect( remove_query_arg( 'wcj_delete_log' ) ) ) {
183
- exit;
184
- }
185
- }
186
- // Header
187
- $the_tools = '';
188
- $the_tools .= $this->get_tool_header_html( 'admin_tools' );
189
- $the_tools .= '<p><a href="' . add_query_arg( 'wcj_delete_log', '1' ) . '">' . __( 'Delete Log', 'woocommerce-jetpack' ) . '</a></p>';
190
- // Log
191
- $the_log = '';
192
- $the_log .= '<p style="font-style:italic;color:gray;">' . sprintf( __( 'Now: %s', 'woocommerce-jetpack' ), date( 'Y-m-d H:i:s' ) ) . '</p>';
193
- if ( '' != ( $log = get_option( 'wcj_log', '' ) ) ) {
194
- $the_log .= '<pre style="color:green;background-color:black;padding:5px;">' . $log . '</pre>';
195
- } else {
196
- $the_log .= '<p style="font-style:italic;color:gray;">' . __( 'Log is empty.', 'woocommerce-jetpack' ) . '</p>';
197
- }
198
- // Final output
199
  $html = '';
200
- $html .= '<div class="wrap">';
201
- $html .= '<p>' . $the_tools . '</p>';
202
- $html .= '<p>' . $the_log . '</p>';
203
- $html .= '</div>';
204
  echo $html;
205
  }
206
 
207
- /**
208
- * get_system_info_table_array.
209
  *
210
- * @version 3.4.3
211
- * @since 2.5.7
212
- * @todo (maybe) 'DB_NAME', 'DB_USER', 'DB_PASSWORD', 'DB_HOST', 'DB_CHARSET', 'DB_COLLATE'
213
  */
214
- function get_system_info_table_array() {
215
- $system_info = array();
216
- $constants_array = array(
217
- 'WP_MEMORY_LIMIT',
218
- 'WP_MAX_MEMORY_LIMIT',
219
- 'WP_DEBUG',
220
- 'ABSPATH',
221
- 'DISABLE_WP_CRON',
222
- 'WP_CRON_LOCK_TIMEOUT',
223
- 'WCJ_WC_VERSION',
224
- 'WCJ_SESSION_TYPE',
225
- );
226
- foreach ( $constants_array as $the_constant ) {
227
- $system_info[] = array( $the_constant, ( defined( $the_constant ) ? constant( $the_constant ) : __( 'NOT DEFINED', 'woocommerce-jetpack' ) ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
228
  }
229
- if ( isset( $_GET['wcj_debug'] ) ) {
230
- foreach ( $_SERVER as $server_var_id => $server_var_value ) {
231
- $system_info[] = array( $server_var_id, $server_var_value );
 
 
 
 
 
 
 
232
  }
233
  }
234
- return $system_info;
 
235
  }
236
 
237
  }
2
  /**
3
  * Booster for WooCommerce - Module - Admin Tools
4
  *
5
+ * @version 4.1.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
15
  /**
16
  * Constructor.
17
  *
18
+ * @version 4.1.0
19
+ * @todo [feature] (maybe) add editable (product and order) metas
20
  */
21
  function __construct() {
22
 
23
  $this->id = 'admin_tools';
24
  $this->short_desc = __( 'Admin Tools', 'woocommerce-jetpack' );
25
+ $this->desc = __( 'Booster for WooCommerce general back-end tools.', 'woocommerce-jetpack' );
26
  $this->link_slug = 'woocommerce-booster-admin-tools';
27
  parent::__construct();
28
 
29
  $this->add_tools( array(
30
+ 'products_atts' => array(
31
+ 'title' => __( 'Products Attributes', 'woocommerce-jetpack' ),
32
+ 'desc' => __( 'All Products and All Attributes.', 'woocommerce-jetpack' ),
 
33
  ),
34
  ) );
35
 
 
 
36
  if ( $this->is_enabled() ) {
 
 
 
 
 
 
 
 
 
 
37
  // Order Meta
38
  if ( 'yes' === get_option( 'wcj_admin_tools_show_order_meta_enabled', 'no' ) ) {
39
  add_action( 'add_meta_boxes', array( $this, 'add_order_meta_meta_box' ) );
48
  add_action( 'add_meta_boxes', array( $this, 'maybe_add_variable_product_pricing_meta_box' ) );
49
  add_action( 'save_post_product', array( $this, 'save_meta_box' ), PHP_INT_MAX, 2 );
50
  }
51
+ // Product revisions
52
+ if ( 'yes' === get_option( 'wcj_product_revisions_enabled', 'no' ) ) {
53
+ add_filter( 'woocommerce_register_post_type_product', array( $this, 'enable_product_revisions' ) );
54
+ }
55
  // Admin Notices
56
  if ( 'yes' === get_option( 'wcj_admin_tools_suppress_connect_notice', 'no' ) ) {
57
  add_filter( 'woocommerce_helper_suppress_connect_notice', '__return_true' );
59
  if ( 'yes' === get_option( 'wcj_admin_tools_suppress_admin_notices', 'no' ) ) {
60
  add_filter( 'woocommerce_helper_suppress_admin_notices', '__return_true' );
61
  }
62
+ // JSON product search limit
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
+ *
72
+ * @version 4.1.0
73
+ * @since 4.1.0
74
+ */
75
+ function set_json_search_limit( $limit ) {
76
+ return get_option( 'wcj_product_json_search_limit', 0 );
77
+ }
78
+
79
+ /**
80
+ * enable_product_revisions.
81
+ *
82
+ * @version 2.4.0
83
+ * @since 2.4.0
84
+ */
85
+ function enable_product_revisions( $args ) {
86
+ $args['supports'][] = 'revisions';
87
+ return $args;
88
+ }
89
+
90
  /**
91
  * make_original_variable_product_pricing_readonly.
92
  *
93
  * @version 3.3.0
94
  * @since 3.3.0
95
+ * @todo [fix] this is not really making fields readonly (e.g. field is still editable via keyboard tab button)
96
  */
97
  function make_original_variable_product_pricing_readonly() {
98
  echo '<style>
187
  }
188
 
189
  /**
190
+ * create_products_atts_tool.
191
  *
192
+ * @version 2.3.9
193
+ * @since 2.3.9
194
  */
195
+ function create_products_atts_tool() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
196
  $html = '';
197
+ $html .= $this->get_products_atts();
 
 
 
198
  echo $html;
199
  }
200
 
201
+ /*
202
+ * get_products_atts.
203
  *
204
+ * @version 4.0.0
205
+ * @since 2.3.9
206
+ * @todo [dev] rewrite; add module link;
207
  */
208
+ function get_products_atts() {
209
+
210
+ $total_products = 0;
211
+
212
+ $products_attributes = array();
213
+ $attributes_names = array();
214
+ $attributes_names['wcj_title'] = __( 'Product', 'woocommerce-jetpack' );
215
+ $attributes_names['wcj_category'] = __( 'Category', 'woocommerce-jetpack' );
216
+
217
+ $offset = 0;
218
+ $block_size = 96;
219
+ while( true ) {
220
+
221
+ $args_products = array(
222
+ 'post_type' => 'product',
223
+ 'post_status' => 'publish',
224
+ 'posts_per_page' => $block_size,
225
+ 'orderby' => 'title',
226
+ 'order' => 'ASC',
227
+ 'offset' => $offset,
228
+ );
229
+ $loop_products = new WP_Query( $args_products );
230
+ if ( ! $loop_products->have_posts() ) break;
231
+ while ( $loop_products->have_posts() ) : $loop_products->the_post();
232
+
233
+ $total_products++;
234
+ $product_id = $loop_products->post->ID;
235
+ $the_product = wc_get_product( $product_id );
236
+
237
+ $products_attributes[ $product_id ]['wcj_title'] = '<a href="' . get_permalink( $product_id ) . '">' . $the_product->get_title() . '</a>';
238
+ $products_attributes[ $product_id ]['wcj_category'] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $the_product->get_categories() : wc_get_product_category_list( $product_id ) );
239
+
240
+ foreach ( $the_product->get_attributes() as $attribute ) {
241
+ $products_attributes[ $product_id ][ $attribute['name'] ] = $the_product->get_attribute( $attribute['name'] );
242
+ if ( ! isset( $attributes_names[ $attribute['name'] ] ) ) {
243
+ $attributes_names[ $attribute['name'] ] = wc_attribute_label( $attribute['name'] );
244
+ }
245
+ }
246
+
247
+ endwhile;
248
+
249
+ $offset += $block_size;
250
+
251
+ }
252
+
253
+ $table_data = array();
254
+ if ( isset( $_GET['wcj_attribute'] ) && '' != $_GET['wcj_attribute'] ) {
255
+ $table_data[] = array(
256
+ __( 'Product', 'woocommerce-jetpack' ),
257
+ __( 'Category', 'woocommerce-jetpack' ),
258
+ $_GET['wcj_attribute'],
259
+ );
260
+ } else {
261
+ $header = $attributes_names;
262
+ unset( $header['wcj_title'] );
263
+ unset( $header['wcj_category'] );
264
+ $table_data[] = array_merge( array(
265
+ __( 'Product', 'woocommerce-jetpack' ),
266
+ __( 'Category', 'woocommerce-jetpack' ),
267
+ ), array_keys( $header ) );
268
  }
269
+ foreach ( $attributes_names as $attributes_name => $attribute_title ) {
270
+
271
+ if ( isset( $_GET['wcj_attribute'] ) && '' != $_GET['wcj_attribute'] ) {
272
+ if ( 'wcj_title' != $attributes_name && 'wcj_category' != $attributes_name && $_GET['wcj_attribute'] != $attributes_name ) {
273
+ continue;
274
+ }
275
+ }
276
+
277
+ foreach ( $products_attributes as $product_id => $product_attributes ) {
278
+ $table_data[ $product_id ][ $attributes_name ] = isset( $product_attributes[ $attributes_name ] ) ? $product_attributes[ $attributes_name ] : '';
279
  }
280
  }
281
+
282
+ return '<p>' . __( 'Total Products:', 'woocommerce-jetpack' ) . ' ' . $total_products . '</p>' . wcj_get_table_html( $table_data, array( 'table_class' => 'widefat striped' ) );
283
  }
284
 
285
  }
includes/class-wcj-checkout-custom-fields.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Checkout Custom Fields
4
  *
5
- * @version 3.8.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -187,11 +187,14 @@ class WCJ_Checkout_Custom_Fields extends WCJ_Module {
187
  /**
188
  * update_custom_checkout_fields_order_meta.
189
  *
190
- * @version 3.8.0
191
  */
192
  function update_custom_checkout_fields_order_meta( $order_id ) {
193
  for ( $i = 1; $i <= apply_filters( 'booster_option', 1, get_option( 'wcj_checkout_custom_fields_total_number', 1 ) ); $i++ ) {
194
  if ( 'yes' === get_option( 'wcj_checkout_custom_field_enabled_' . $i ) ) {
 
 
 
195
  $the_section = get_option( 'wcj_checkout_custom_field_section_' . $i );
196
  $the_type = get_option( 'wcj_checkout_custom_field_type_' . $i );
197
  $option_name = $the_section . '_' . 'wcj_checkout_field_' . $i;
@@ -378,8 +381,12 @@ class WCJ_Checkout_Custom_Fields extends WCJ_Module {
378
  $the_meta = get_post_meta( get_the_ID(), '_' . $section . '_' . $the_key, true );
379
  if ( is_array( $the_meta ) ) {
380
  // Converting from before version 2.3.0
381
- if ( isset( $the_meta['value'] ) ) update_post_meta( get_the_ID(), '_' . $section . '_' . $the_key, $the_meta['value'] );
382
- if ( isset( $the_meta['label'] ) ) update_post_meta( get_the_ID(), '_' . $section . '_' . $the_key_label, $the_meta['label'] );
 
 
 
 
383
  }
384
  $fields[ $the_key ] = array(
385
  'type' => $the_type,
2
  /**
3
  * Booster for WooCommerce - Module - Checkout Custom Fields
4
  *
5
+ * @version 4.1.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
187
  /**
188
  * update_custom_checkout_fields_order_meta.
189
  *
190
+ * @version 4.1.0
191
  */
192
  function update_custom_checkout_fields_order_meta( $order_id ) {
193
  for ( $i = 1; $i <= apply_filters( 'booster_option', 1, get_option( 'wcj_checkout_custom_fields_total_number', 1 ) ); $i++ ) {
194
  if ( 'yes' === get_option( 'wcj_checkout_custom_field_enabled_' . $i ) ) {
195
+ if ( ! $this->is_visible( $i ) ) {
196
+ continue;
197
+ }
198
  $the_section = get_option( 'wcj_checkout_custom_field_section_' . $i );
199
  $the_type = get_option( 'wcj_checkout_custom_field_type_' . $i );
200
  $option_name = $the_section . '_' . 'wcj_checkout_field_' . $i;
381
  $the_meta = get_post_meta( get_the_ID(), '_' . $section . '_' . $the_key, true );
382
  if ( is_array( $the_meta ) ) {
383
  // Converting from before version 2.3.0
384
+ if ( isset( $the_meta['value'] ) ) {
385
+ update_post_meta( get_the_ID(), '_' . $section . '_' . $the_key, $the_meta['value'] );
386
+ }
387
+ if ( isset( $the_meta['label'] ) ) {
388
+ update_post_meta( get_the_ID(), '_' . $section . '_' . $the_key_label, $the_meta['label'] );
389
+ }
390
  }
391
  $fields[ $the_key ] = array(
392
  'type' => $the_type,
includes/class-wcj-checkout-customization.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Checkout Customization
4
  *
5
- * @version 3.8.0
6
  * @since 2.7.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -16,7 +16,7 @@ class WCJ_Checkout_Customization extends WCJ_Module {
16
  /**
17
  * Constructor.
18
  *
19
- * @version 3.4.0
20
  * @since 2.7.0
21
  */
22
  function __construct() {
@@ -73,7 +73,65 @@ class WCJ_Checkout_Customization extends WCJ_Module {
73
  if ( 'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_checkout_restrict_countries_by_customer_ip_shipping', 'no' ) ) ) {
74
  add_filter( 'woocommerce_countries_shipping_countries', array( $this, 'restrict_countries_by_customer_ip' ), PHP_INT_MAX );
75
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  }
78
 
79
  /**
2
  /**
3
  * Booster for WooCommerce - Module - Checkout Customization
4
  *
5
+ * @version 4.1.0
6
  * @since 2.7.0
7
  * @author Algoritmika Ltd.
8
  */
16
  /**
17
  * Constructor.
18
  *
19
+ * @version 4.1.0
20
  * @since 2.7.0
21
  */
22
  function __construct() {
73
  if ( 'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_checkout_restrict_countries_by_customer_ip_shipping', 'no' ) ) ) {
74
  add_filter( 'woocommerce_countries_shipping_countries', array( $this, 'restrict_countries_by_customer_ip' ), PHP_INT_MAX );
75
  }
76
+ // Recalculate Checkout
77
+ if ( 'yes' === get_option( 'wcj_checkout_recalculate_checkout_update_enable', 'no' ) ) {
78
+ add_action( 'wp_footer', array( $this, 'recalculate_checkout' ), 50 );
79
+ }
80
+ // Update Checkout
81
+ if ( 'yes' === get_option( 'wcj_checkout_force_checkout_update_enable', 'no' ) ) {
82
+ add_action( 'wp_footer', array( $this, 'update_checkout' ), 50 );
83
+ }
84
+ }
85
+ }
86
+
87
+ /**
88
+ * Updates checkout.
89
+ *
90
+ * @version 4.1.0
91
+ * @since 4.1.0
92
+ */
93
+ function update_checkout() {
94
+ if ( ! is_checkout() ) {
95
+ return;
96
+ }
97
+ ?>
98
+ <script type="text/javascript">
99
+ jQuery(function ($) {
100
+ var selector = <?php echo wp_json_encode( get_option( 'wcj_checkout_force_checkout_update_fields', '' ) ); ?>;
101
+ jQuery(selector).on('change', function () {
102
+ $('body').trigger('update_checkout');
103
+ });
104
+ });
105
+ </script>
106
+ <?php
107
+ }
108
+
109
+ /**
110
+ * Recalculates checkout.
111
+ *
112
+ * @version 4.1.0
113
+ * @since 4.1.0
114
+ */
115
+ function recalculate_checkout() {
116
+ if ( ! is_checkout() ) {
117
+ return;
118
  }
119
+ ?>
120
+ <script type="text/javascript">
121
+ jQuery(function ($) {
122
+ var old_values = [];
123
+ var selector = <?php echo wp_json_encode( get_option( 'wcj_checkout_recalculate_checkout_update_fields', '#billing_country, #shipping_country' ) ); ?>;
124
+ jQuery(document.body).on("updated_checkout", function () {
125
+ jQuery(selector).each(function (index) {
126
+ if (old_values[index] != $(this).val()) {
127
+ $('body').trigger('update_checkout');
128
+ }
129
+ old_values[index] = $(this).val();
130
+ });
131
+ });
132
+ });
133
+ </script>
134
+ <?php
135
  }
136
 
137
  /**
includes/class-wcj-debug-tools.php ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Booster for WooCommerce - Module - Debug Tools
4
+ *
5
+ * @version 4.1.0
6
+ * @version 4.1.0
7
+ * @author Algoritmika Ltd.
8
+ */
9
+
10
+ if ( ! defined( 'ABSPATH' ) ) exit;
11
+
12
+ if ( ! class_exists( 'WCJ_Debug_Tools' ) ) :
13
+
14
+ class WCJ_Debug_Tools extends WCJ_Module {
15
+
16
+ /**
17
+ * Constructor.
18
+ *
19
+ * @version 4.1.0
20
+ * @version 4.1.0
21
+ */
22
+ function __construct() {
23
+
24
+ $this->id = 'debug_tools';
25
+ $this->short_desc = __( 'Debug Tools', 'woocommerce-jetpack' );
26
+ $this->desc = __( 'Booster for WooCommerce debug and log tools.', 'woocommerce-jetpack' );
27
+ $this->link_slug = 'woocommerce-booster-debug-tools';
28
+ parent::__construct();
29
+
30
+ $this->add_tools( array(
31
+ 'debug_tools' => array(
32
+ 'title' => __( 'Log', 'woocommerce-jetpack' ),
33
+ 'desc' => __( 'Log.', 'woocommerce-jetpack' ),
34
+ ),
35
+ ) );
36
+
37
+ }
38
+
39
+ /**
40
+ * create_debug_tools_tool.
41
+ *
42
+ * @version 4.1.0
43
+ */
44
+ function create_debug_tools_tool() {
45
+ // Delete log
46
+ if ( isset( $_GET['wcj_delete_log'] ) && wcj_is_user_role( 'administrator' ) ) {
47
+ update_option( 'wcj_log', '' );
48
+ if ( wp_safe_redirect( remove_query_arg( 'wcj_delete_log' ) ) ) {
49
+ exit;
50
+ }
51
+ }
52
+ // Header
53
+ $the_tools = '';
54
+ $the_tools .= $this->get_tool_header_html( 'debug_tools' );
55
+ $the_tools .= '<p><a href="' . add_query_arg( 'wcj_delete_log', '1' ) . '">' . __( 'Delete Log', 'woocommerce-jetpack' ) . '</a></p>';
56
+ // Log
57
+ $the_log = '';
58
+ $the_log .= '<p style="font-style:italic;color:gray;">' . sprintf( __( 'Now: %s', 'woocommerce-jetpack' ), date( 'Y-m-d H:i:s' ) ) . '</p>';
59
+ if ( '' != ( $log = get_option( 'wcj_log', '' ) ) ) {
60
+ $the_log .= '<pre style="color:green;background-color:black;padding:5px;">' . $log . '</pre>';
61
+ } else {
62
+ $the_log .= '<p style="font-style:italic;color:gray;">' . __( 'Log is empty.', 'woocommerce-jetpack' ) . '</p>';
63
+ }
64
+ // Final output
65
+ $html = '';
66
+ $html .= '<div class="wrap">';
67
+ $html .= '<p>' . $the_tools . '</p>';
68
+ $html .= '<p>' . $the_log . '</p>';
69
+ $html .= '</div>';
70
+ echo $html;
71
+ }
72
+
73
+ /**
74
+ * get_system_info_table_array.
75
+ *
76
+ * @version 4.1.0
77
+ * @since 2.5.7
78
+ * @todo [feature] (maybe) 'DB_NAME', 'DB_USER', 'DB_PASSWORD', 'DB_HOST', 'DB_CHARSET', 'DB_COLLATE'
79
+ */
80
+ function get_system_info_table_array() {
81
+ $system_info = array();
82
+ $constants_array = array(
83
+ 'WP_MEMORY_LIMIT',
84
+ 'WP_MAX_MEMORY_LIMIT',
85
+ 'WP_DEBUG',
86
+ 'ABSPATH',
87
+ 'DISABLE_WP_CRON',
88
+ 'WP_CRON_LOCK_TIMEOUT',
89
+ 'WCJ_WC_VERSION',
90
+ 'WCJ_SESSION_TYPE',
91
+ );
92
+ foreach ( $constants_array as $the_constant ) {
93
+ $system_info[] = array( $the_constant, ( defined( $the_constant ) ? constant( $the_constant ) : __( 'NOT DEFINED', 'woocommerce-jetpack' ) ) );
94
+ }
95
+ if ( isset( $_GET['wcj_debug'] ) ) {
96
+ foreach ( $_SERVER as $server_var_id => $server_var_value ) {
97
+ $system_info[] = array( $server_var_id, esc_html( $server_var_value ) );
98
+ }
99
+ }
100
+ return $system_info;
101
+ }
102
+
103
+ }
104
+
105
+ endif;
106
+
107
+ return new WCJ_Debug_Tools();
includes/class-wcj-general.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - General
4
  *
5
- * @version 4.0.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -15,22 +15,18 @@ class WCJ_General extends WCJ_Module {
15
  /**
16
  * Constructor.
17
  *
18
- * @version 3.2.3
19
- * @todo expand `$this->desc`
20
  */
21
  function __construct() {
22
 
23
  $this->id = 'general';
24
  $this->short_desc = __( 'General', 'woocommerce-jetpack' );
25
- $this->desc = __( 'Custom roles tool. Shortcodes in WordPress text widgets.', 'woocommerce-jetpack' );
26
  $this->link_slug = 'woocommerce-booster-general-tools';
27
  parent::__construct();
28
 
29
  $this->add_tools( array(
30
- 'products_atts' => array(
31
- 'title' => __( 'Products Attributes', 'woocommerce-jetpack' ),
32
- 'desc' => __( 'All Products and All Attributes.', 'woocommerce-jetpack' ),
33
- ),
34
  'custom_roles' => array(
35
  'title' => __( 'Add/Manage Custom Roles', 'woocommerce-jetpack' ),
36
  'tab_title' => __( 'Custom Roles', 'woocommerce-jetpack' ),
@@ -38,18 +34,28 @@ class WCJ_General extends WCJ_Module {
38
  ),
39
  ) );
40
 
 
 
 
41
  if ( $this->is_enabled() ) {
42
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  // Recalculate cart totals
44
  if ( 'yes' === get_option( 'wcj_general_advanced_recalculate_cart_totals', 'no' ) ) {
45
  add_action( 'wp_loaded', array( $this, 'fix_mini_cart' ), PHP_INT_MAX );
46
  }
47
 
48
- // Product revisions
49
- if ( 'yes' === get_option( 'wcj_product_revisions_enabled', 'no' ) ) {
50
- add_filter( 'woocommerce_register_post_type_product', array( $this, 'enable_product_revisions' ) );
51
- }
52
-
53
  // Shortcodes in text widgets
54
  if ( 'yes' === get_option( 'wcj_general_shortcodes_in_text_widgets_enabled' ) ) {
55
  add_filter( 'widget_text', 'do_shortcode' );
@@ -82,7 +88,7 @@ class WCJ_General extends WCJ_Module {
82
  *
83
  * @version 2.9.0
84
  * @since 2.9.0
85
- * @todo (maybe) optionally via cookies
86
  */
87
  function change_user_role_meta() {
88
  if ( isset( $_GET['wcj_booster_user_role'] ) ) {
@@ -127,7 +133,7 @@ class WCJ_General extends WCJ_Module {
127
  *
128
  * @version 2.5.2
129
  * @since 2.5.2
130
- * @todo this is only temporary solution!
131
  */
132
  function fix_mini_cart() {
133
  if ( wcj_is_frontend() ) {
@@ -251,112 +257,6 @@ class WCJ_General extends WCJ_Module {
251
  return $load_gateways;
252
  }
253
 
254
- /**
255
- * enable_product_revisions.
256
- *
257
- * @version 2.4.0
258
- * @since 2.4.0
259
- */
260
- function enable_product_revisions( $args ) {
261
- $args['supports'][] = 'revisions';
262
- return $args;
263
- }
264
-
265
- /**
266
- * create_products_atts_tool.
267
- *
268
- * @version 2.3.9
269
- * @since 2.3.9
270
- */
271
- function create_products_atts_tool() {
272
- $html = '';
273
- $html .= $this->get_products_atts();
274
- echo $html;
275
- }
276
-
277
- /*
278
- * get_products_atts.
279
- *
280
- * @version 4.0.0
281
- * @since 2.3.9
282
- */
283
- function get_products_atts() {
284
-
285
- $total_products = 0;
286
-
287
- $products_attributes = array();
288
- $attributes_names = array();
289
- $attributes_names['wcj_title'] = __( 'Product', 'woocommerce-jetpack' );
290
- $attributes_names['wcj_category'] = __( 'Category', 'woocommerce-jetpack' );
291
-
292
- $offset = 0;
293
- $block_size = 96;
294
- while( true ) {
295
-
296
- $args_products = array(
297
- 'post_type' => 'product',
298
- 'post_status' => 'publish',
299
- 'posts_per_page' => $block_size,
300
- 'orderby' => 'title',
301
- 'order' => 'ASC',
302
- 'offset' => $offset,
303
- );
304
- $loop_products = new WP_Query( $args_products );
305
- if ( ! $loop_products->have_posts() ) break;
306
- while ( $loop_products->have_posts() ) : $loop_products->the_post();
307
-
308
- $total_products++;
309
- $product_id = $loop_products->post->ID;
310
- $the_product = wc_get_product( $product_id );
311
-
312
- $products_attributes[ $product_id ]['wcj_title'] = '<a href="' . get_permalink( $product_id ) . '">' . $the_product->get_title() . '</a>';
313
- $products_attributes[ $product_id ]['wcj_category'] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $the_product->get_categories() : wc_get_product_category_list( $product_id ) );
314
-
315
- foreach ( $the_product->get_attributes() as $attribute ) {
316
- $products_attributes[ $product_id ][ $attribute['name'] ] = $the_product->get_attribute( $attribute['name'] );
317
- if ( ! isset( $attributes_names[ $attribute['name'] ] ) ) {
318
- $attributes_names[ $attribute['name'] ] = wc_attribute_label( $attribute['name'] );
319
- }
320
- }
321
-
322
- endwhile;
323
-
324
- $offset += $block_size;
325
-
326
- }
327
-
328
- $table_data = array();
329
- if ( isset( $_GET['wcj_attribute'] ) && '' != $_GET['wcj_attribute'] ) {
330
- $table_data[] = array(
331
- __( 'Product', 'woocommerce-jetpack' ),
332
- __( 'Category', 'woocommerce-jetpack' ),
333
- $_GET['wcj_attribute'],
334
- );
335
- } else {
336
- $header = $attributes_names;
337
- unset( $header['wcj_title'] );
338
- unset( $header['wcj_category'] );
339
- $table_data[] = array_merge( array(
340
- __( 'Product', 'woocommerce-jetpack' ),
341
- __( 'Category', 'woocommerce-jetpack' ),
342
- ), array_keys( $header ) );
343
- }
344
- foreach ( $attributes_names as $attributes_name => $attribute_title ) {
345
-
346
- if ( isset( $_GET['wcj_attribute'] ) && '' != $_GET['wcj_attribute'] ) {
347
- if ( 'wcj_title' != $attributes_name && 'wcj_category' != $attributes_name && $_GET['wcj_attribute'] != $attributes_name ) {
348
- continue;
349
- }
350
- }
351
-
352
- foreach ( $products_attributes as $product_id => $product_attributes ) {
353
- $table_data[ $product_id ][ $attributes_name ] = isset( $product_attributes[ $attributes_name ] ) ? $product_attributes[ $attributes_name ] : '';
354
- }
355
- }
356
-
357
- return '<p>' . __( 'Total Products:', 'woocommerce-jetpack' ) . ' ' . $total_products . '</p>' . wcj_get_table_html( $table_data, array( 'table_class' => 'widefat striped' ) );
358
- }
359
-
360
  }
361
 
362
  endif;
2
  /**
3
  * Booster for WooCommerce - Module - General
4
  *
5
+ * @version 4.1.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
15
  /**
16
  * Constructor.
17
  *
18
+ * @version 4.1.0
19
+ * @todo [dev] maybe expand `$this->desc` (e.g.: Custom roles tool, shortcodes in WordPress text widgets etc.)
20
  */
21
  function __construct() {
22
 
23
  $this->id = 'general';
24
  $this->short_desc = __( 'General', 'woocommerce-jetpack' );
25
+ $this->desc = __( 'Booster for WooCommerce general front-end tools.', 'woocommerce-jetpack' );
26
  $this->link_slug = 'woocommerce-booster-general-tools';
27
  parent::__construct();
28
 
29
  $this->add_tools( array(
 
 
 
 
30
  'custom_roles' => array(
31
  'title' => __( 'Add/Manage Custom Roles', 'woocommerce-jetpack' ),
32
  'tab_title' => __( 'Custom Roles', 'woocommerce-jetpack' ),
34
  ),
35
  ) );
36
 
37
+ $this->current_php_memory_limit = '';
38
+ $this->current_php_time_limit = '';
39
+
40
  if ( $this->is_enabled() ) {
41
 
42
+ // PHP Memory Limit
43
+ if ( 0 != ( $php_memory_limit = get_option( 'wcj_admin_tools_php_memory_limit', 0 ) ) ) {
44
+ ini_set( 'memory_limit', $php_memory_limit . 'M' );
45
+ }
46
+ $this->current_php_memory_limit = sprintf( ' ' . __( 'Current PHP memory limit: %s.', 'woocommerce-jetpack' ), ini_get( 'memory_limit' ) );
47
+
48
+ // PHP Time Limit
49
+ if ( 0 != ( $php_time_limit = get_option( 'wcj_admin_tools_php_time_limit', 0 ) ) ) {
50
+ set_time_limit( $php_time_limit );
51
+ }
52
+ $this->current_php_time_limit = sprintf( ' ' . __( 'Current PHP time limit: %s seconds.', 'woocommerce-jetpack' ), ini_get( 'max_execution_time' ) );
53
+
54
  // Recalculate cart totals
55
  if ( 'yes' === get_option( 'wcj_general_advanced_recalculate_cart_totals', 'no' ) ) {
56
  add_action( 'wp_loaded', array( $this, 'fix_mini_cart' ), PHP_INT_MAX );
57
  }
58
 
 
 
 
 
 
59
  // Shortcodes in text widgets
60
  if ( 'yes' === get_option( 'wcj_general_shortcodes_in_text_widgets_enabled' ) ) {
61
  add_filter( 'widget_text', 'do_shortcode' );
88
  *
89
  * @version 2.9.0
90
  * @since 2.9.0
91
+ * @todo [dev] (maybe) optionally via cookies
92
  */
93
  function change_user_role_meta() {
94
  if ( isset( $_GET['wcj_booster_user_role'] ) ) {
133
  *
134
  * @version 2.5.2
135
  * @since 2.5.2
136
+ * @todo [dev] this is only temporary solution!
137
  */
138
  function fix_mini_cart() {
139
  if ( wcj_is_frontend() ) {
257
  return $load_gateways;
258
  }
259
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
260
  }
261
 
262
  endif;
includes/class-wcj-max-products-per-user.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Max Products per User
4
  *
5
- * @version 3.5.0
6
  * @since 3.5.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -16,18 +16,20 @@ class WCJ_Max_products_Per_User extends WCJ_Module {
16
  /**
17
  * Constructor.
18
  *
19
- * @version 3.5.0
20
  * @since 3.5.0
21
  * @todo (maybe) JS
22
  * @todo (maybe) zero quantity for "Guest"
23
  * @todo (maybe) editable sales data (i.e. change "Qty Bought" for product for user)
 
 
24
  */
25
  function __construct() {
26
 
27
  $this->id = 'max_products_per_user';
28
  $this->short_desc = __( 'Maximum Products per User', 'woocommerce-jetpack' );
29
  $this->desc = __( 'Limit number of items your (logged) customers can buy.', 'woocommerce-jetpack' );
30
- $this->extra_desc = __( 'Please note, that there is no maximum quantity set for not-logged (i.e. guest) users. Product quantities are updated, when order status is changed to completed.', 'woocommerce-jetpack' );
31
  $this->link_slug = 'woocommerce-maximum-products-per-user';
32
  parent::__construct();
33
 
@@ -43,10 +45,17 @@ class WCJ_Max_products_Per_User extends WCJ_Module {
43
  add_action( 'save_post_product', array( $this, 'save_meta_box' ), PHP_INT_MAX, 2 );
44
  }
45
  }
46
- add_action( 'woocommerce_order_status_completed', array( $this, 'save_quantities' ), PHP_INT_MAX );
47
- add_action( 'add_meta_boxes', array( $this, 'add_report_meta_box' ) );
48
- add_action( 'admin_init', array( $this, 'calculate_data' ) );
49
- add_action( 'admin_notices', array( $this, 'calculate_data_notice' ) );
 
 
 
 
 
 
 
50
  }
51
  }
52
 
@@ -68,7 +77,7 @@ class WCJ_Max_products_Per_User extends WCJ_Module {
68
  /**
69
  * calculate_data.
70
  *
71
- * @version 3.5.0
72
  * @since 3.5.0
73
  * @todo reset `wcj_max_products_per_user_report` and `wcj_max_products_per_user_saved` meta
74
  */
@@ -80,7 +89,7 @@ class WCJ_Max_products_Per_User extends WCJ_Module {
80
  while( true ) {
81
  $args = array(
82
  'post_type' => 'shop_order',
83
- 'post_status' => 'wc-completed',
84
  'posts_per_page' => $block_size,
85
  'orderby' => 'ID',
86
  'order' => 'DESC',
@@ -150,7 +159,6 @@ class WCJ_Max_products_Per_User extends WCJ_Module {
150
  *
151
  * @version 3.5.0
152
  * @since 3.5.0
153
- * @todo (maybe) customizable `save_quantities` trigger
154
  */
155
  function save_quantities( $order_id ) {
156
  if ( $order = wc_get_order( $order_id ) ) {
2
  /**
3
  * Booster for WooCommerce - Module - Max Products per User
4
  *
5
+ * @version 4.1.0
6
  * @since 3.5.0
7
  * @author Algoritmika Ltd.
8
  */
16
  /**
17
  * Constructor.
18
  *
19
+ * @version 4.1.0
20
  * @since 3.5.0
21
  * @todo (maybe) JS
22
  * @todo (maybe) zero quantity for "Guest"
23
  * @todo (maybe) editable sales data (i.e. change "Qty Bought" for product for user)
24
+ * @todo (maybe) `wcj_max_products_per_user_order_status` - add "Any" option
25
+ * @todo (maybe) `wcj_max_products_per_user_order_status` - add "Manually" option
26
  */
27
  function __construct() {
28
 
29
  $this->id = 'max_products_per_user';
30
  $this->short_desc = __( 'Maximum Products per User', 'woocommerce-jetpack' );
31
  $this->desc = __( 'Limit number of items your (logged) customers can buy.', 'woocommerce-jetpack' );
32
+ $this->extra_desc = __( 'Please note, that there is no maximum quantity set for not-logged (i.e. guest) users. Product quantities are updated, when order status is changed to status listed in module\'s "Order Status" option.', 'woocommerce-jetpack' );
33
  $this->link_slug = 'woocommerce-maximum-products-per-user';
34
  parent::__construct();
35
 
45
  add_action( 'save_post_product', array( $this, 'save_meta_box' ), PHP_INT_MAX, 2 );
46
  }
47
  }
48
+ $this->order_status = get_option( 'wcj_max_products_per_user_order_status', array( 'wc-completed' ) );
49
+ if ( empty( $this->order_status ) ) {
50
+ $this->order_status = array( 'wc-completed' );
51
+ }
52
+ foreach ( $this->order_status as $status ) {
53
+ $status = substr( $status, 3 );
54
+ add_action( 'woocommerce_order_status_' . $status, array( $this, 'save_quantities' ), PHP_INT_MAX );
55
+ }
56
+ add_action( 'add_meta_boxes', array( $this, 'add_report_meta_box' ) );
57
+ add_action( 'admin_init', array( $this, 'calculate_data' ) );
58
+ add_action( 'admin_notices', array( $this, 'calculate_data_notice' ) );
59
  }
60
  }
61
 
77
  /**
78
  * calculate_data.
79
  *
80
+ * @version 4.1.0
81
  * @since 3.5.0
82
  * @todo reset `wcj_max_products_per_user_report` and `wcj_max_products_per_user_saved` meta
83
  */
89
  while( true ) {
90
  $args = array(
91
  'post_type' => 'shop_order',
92
+ 'post_status' => $this->order_status,
93
  'posts_per_page' => $block_size,
94
  'orderby' => 'ID',
95
  'order' => 'DESC',
159
  *
160
  * @version 3.5.0
161
  * @since 3.5.0
 
162
  */
163
  function save_quantities( $order_id ) {
164
  if ( $order = wc_get_order( $order_id ) ) {
includes/class-wcj-order-min-amount.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Order Minimum Amount
4
  *
5
- * @version 3.2.4
6
  * @since 2.5.7
7
  * @author Algoritmika Ltd.
8
  * @todo order max amount
@@ -64,7 +64,7 @@ class WCJ_Order_Min_Amount extends WCJ_Module {
64
  /**
65
  * get_order_minimum_amount_with_user_roles.
66
  *
67
- * @version 2.7.0
68
  * @since 2.5.3
69
  */
70
  function get_order_minimum_amount_with_user_roles() {
@@ -73,7 +73,7 @@ class WCJ_Order_Min_Amount extends WCJ_Module {
73
  foreach ( wcj_get_user_roles() as $role_key => $role_data ) {
74
  if ( $role_key === $current_user_role ) {
75
  $order_minimum_amount_by_user_role = get_option( 'wcj_order_minimum_amount_by_user_role_' . $role_key, 0 );
76
- if ( $order_minimum_amount_by_user_role > /* $minimum */ 0 ) {
77
  $minimum = $order_minimum_amount_by_user_role;
78
  }
79
  break;
@@ -83,6 +83,10 @@ class WCJ_Order_Min_Amount extends WCJ_Module {
83
  if ( WCJ()->modules['multicurrency']->is_enabled() ) {
84
  $minimum = WCJ()->modules['multicurrency']->change_price( $minimum, null );
85
  }
 
 
 
 
86
  return $minimum;
87
  }
88
 
2
  /**
3
  * Booster for WooCommerce - Module - Order Minimum Amount
4
  *
5
+ * @version 4.1.0
6
  * @since 2.5.7
7
  * @author Algoritmika Ltd.
8
  * @todo order max amount
64
  /**
65
  * get_order_minimum_amount_with_user_roles.
66
  *
67
+ * @version 4.1.0
68
  * @since 2.5.3
69
  */
70
  function get_order_minimum_amount_with_user_roles() {
73
  foreach ( wcj_get_user_roles() as $role_key => $role_data ) {
74
  if ( $role_key === $current_user_role ) {
75
  $order_minimum_amount_by_user_role = get_option( 'wcj_order_minimum_amount_by_user_role_' . $role_key, 0 );
76
+ if ( $order_minimum_amount_by_user_role > 0 ) {
77
  $minimum = $order_minimum_amount_by_user_role;
78
  }
79
  break;
83
  if ( WCJ()->modules['multicurrency']->is_enabled() ) {
84
  $minimum = WCJ()->modules['multicurrency']->change_price( $minimum, null );
85
  }
86
+ // Price by country module
87
+ if ( WCJ()->modules['price_by_country']->is_enabled() ) {
88
+ $minimum = WCJ()->modules['price_by_country']->core->change_price( $minimum, null );
89
+ }
90
  return $minimum;
91
  }
92
 
includes/class-wcj-order-quantities.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Order Min/Max Quantities
4
  *
5
- * @version 3.7.0
6
  * @since 2.9.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -16,7 +16,7 @@ class WCJ_Order_Quantities extends WCJ_Module {
16
  /**
17
  * Constructor.
18
  *
19
- * @version 3.7.0
20
  * @since 2.9.0
21
  * @todo maybe rename the module to "Order Quantities" or "Order Product Quantities" or "Product Quantities"?
22
  * @todo loop (`woocommerce_loop_add_to_cart_link`)
@@ -68,9 +68,69 @@ class WCJ_Order_Quantities extends WCJ_Module {
68
  }
69
  // For cart
70
  add_filter( 'woocommerce_quantity_input_args', array( $this, 'set_quantity_input_args' ), PHP_INT_MAX, 2 );
 
 
 
71
  }
72
  }
73
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74
  /**
75
  * set_quantity_input_args.
76
  *
2
  /**
3
  * Booster for WooCommerce - Module - Order Min/Max Quantities
4
  *
5
+ * @version 4.1.0
6
  * @since 2.9.0
7
  * @author Algoritmika Ltd.
8
  */
16
  /**
17
  * Constructor.
18
  *
19
+ * @version 4.1.0
20
  * @since 2.9.0
21
  * @todo maybe rename the module to "Order Quantities" or "Order Product Quantities" or "Product Quantities"?
22
  * @todo loop (`woocommerce_loop_add_to_cart_link`)
68
  }
69
  // For cart
70
  add_filter( 'woocommerce_quantity_input_args', array( $this, 'set_quantity_input_args' ), PHP_INT_MAX, 2 );
71
+ // Handle Add to cart button on loop
72
+ add_filter( 'woocommerce_loop_add_to_cart_args', array( $this, 'handle_wc_loop_add_to_cart_args' ), 10, 2 );
73
+ add_action( 'wp_footer', array( $this, 'sync_qty_input_with_add_to_cart_btn_on_loop' ) );
74
  }
75
  }
76
 
77
+ /**
78
+ * Syncs Quantity input with Add to cart button on loop page.
79
+ *
80
+ * @version 4.1.0
81
+ * @since 4.1.0
82
+ */
83
+ function sync_qty_input_with_add_to_cart_btn_on_loop() {
84
+ if ( ! is_shop() && ! is_product_category() && ! is_product_tag() && ! is_product_taxonomy() ) {
85
+ return;
86
+ }
87
+ $js = "
88
+ var wcj_sqwb = {
89
+ init: function () {
90
+ var qtyInput = document.querySelectorAll('.quantity .qty');
91
+ [].forEach.call(qtyInput, function (el) {
92
+ var productWrapper = el.closest('.products .product');
93
+ var addToCartBtn = productWrapper.querySelector('.ajax_add_to_cart');
94
+ var dataProductIDAttr = addToCartBtn.getAttribute('data-product_id');
95
+ el.addEventListener('change', function() {
96
+ if(!this.checkValidity()){
97
+ addToCartBtn.removeAttribute('data-product_id');
98
+ this.reportValidity();
99
+ }else{
100
+ wcj_sqwb.sync(this.value,addToCartBtn);
101
+ addToCartBtn.setAttribute('data-product_id',dataProductIDAttr);
102
+ }
103
+ });
104
+ wcj_sqwb.sync(el.value,addToCartBtn);
105
+ });
106
+ },
107
+ sync:function(qty_value,addToCartBtn){
108
+ addToCartBtn.setAttribute('data-quantity', qty_value);
109
+ }
110
+ };
111
+ jQuery(document).ready(function(){
112
+ wcj_sqwb.init();
113
+ });
114
+ ";
115
+ wc_enqueue_js( $js );
116
+ }
117
+
118
+ /**
119
+ * Handles arguments passed to add to cart loop.
120
+ *
121
+ * @version 4.1.0
122
+ * @since 4.1.0
123
+ *
124
+ * @param $args
125
+ * @param $product
126
+ *
127
+ * @return mixed
128
+ */
129
+ function handle_wc_loop_add_to_cart_args( $args, $product ) {
130
+ $args['quantity'] = $this->get_product_quantity( 'min', $product, $args['quantity'] );
131
+ return $args;
132
+ }
133
+
134
  /**
135
  * set_quantity_input_args.
136
  *
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 3.8.0
6
  * @since 2.2.2
7
  * @author Algoritmika Ltd.
8
  */
@@ -16,7 +16,7 @@ class WCJ_Payment_Gateways_Fees extends WCJ_Module {
16
  /**
17
  * Constructor.
18
  *
19
- * @version 2.8.0
20
  * @todo (maybe) add settings subsections for each gateway
21
  */
22
  function __construct() {
@@ -28,7 +28,7 @@ class WCJ_Payment_Gateways_Fees extends WCJ_Module {
28
  parent::__construct();
29
 
30
  if ( $this->is_enabled() ) {
31
- $this->init_options();
32
  add_action( 'woocommerce_cart_calculate_fees', array( $this, 'gateways_fees' ) );
33
  add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_checkout_script' ) );
34
  }
@@ -37,7 +37,7 @@ class WCJ_Payment_Gateways_Fees extends WCJ_Module {
37
  /**
38
  * init_options.
39
  *
40
- * @version 3.8.0
41
  * @since 3.8.0
42
  */
43
  function init_options() {
@@ -52,6 +52,7 @@ class WCJ_Payment_Gateways_Fees extends WCJ_Module {
52
  'is_taxable' => get_option( 'wcj_gateways_fees_is_taxable', array() ),
53
  'tax_class_id' => get_option( 'wcj_gateways_fees_tax_class_id', array() ),
54
  'exclude_shipping' => get_option( 'wcj_gateways_fees_exclude_shipping', array() ),
 
55
  'include_products' => apply_filters( 'booster_option', array(), get_option( 'wcj_gateways_fees_include_products', array() ) ),
56
  'exclude_products' => apply_filters( 'booster_option', array(), get_option( 'wcj_gateways_fees_exclude_products', array() ) ),
57
  );
@@ -66,6 +67,7 @@ class WCJ_Payment_Gateways_Fees extends WCJ_Module {
66
  'is_taxable' => 'no',
67
  'tax_class_id' => '',
68
  'exclude_shipping' => 'no',
 
69
  'include_products' => '',
70
  'exclude_products' => '',
71
  );
@@ -180,13 +182,13 @@ class WCJ_Payment_Gateways_Fees extends WCJ_Module {
180
  /**
181
  * gateways_fees.
182
  *
183
- * @version 3.8.0
184
  */
185
  function gateways_fees() {
186
  global $woocommerce;
187
  $current_gateway = $this->get_current_gateway();
188
  if ( '' != $current_gateway ) {
189
- $fee_text = $this->get_option( 'text', $current_gateway );
190
  $min_cart_amount = $this->get_option( 'min_cart_amount', $current_gateway );
191
  $max_cart_amount = $this->get_option( 'max_cart_amount', $current_gateway );
192
  // Multicurrency (Currency Switcher) module
@@ -198,6 +200,7 @@ class WCJ_Payment_Gateways_Fees extends WCJ_Module {
198
  $woocommerce->cart->cart_contents_total + $woocommerce->cart->shipping_total :
199
  $woocommerce->cart->cart_contents_total
200
  );
 
201
  if ( '' != $fee_text && $total_in_cart >= $min_cart_amount && ( 0 == $max_cart_amount || $total_in_cart <= $max_cart_amount ) && $this->check_cart_products( $current_gateway ) ) {
202
  $fee_value = $this->get_option( 'value', $current_gateway );
203
  $fee_type = $this->get_option( 'type', $current_gateway );
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
  */
16
  /**
17
  * Constructor.
18
  *
19
+ * @version 4.1.0
20
  * @todo (maybe) add settings subsections for each gateway
21
  */
22
  function __construct() {
28
  parent::__construct();
29
 
30
  if ( $this->is_enabled() ) {
31
+ add_action( 'init', array( $this, 'init_options' ) );
32
  add_action( 'woocommerce_cart_calculate_fees', array( $this, 'gateways_fees' ) );
33
  add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_checkout_script' ) );
34
  }
37
  /**
38
  * init_options.
39
  *
40
+ * @version 4.1.0
41
  * @since 3.8.0
42
  */
43
  function init_options() {
52
  'is_taxable' => get_option( 'wcj_gateways_fees_is_taxable', array() ),
53
  'tax_class_id' => get_option( 'wcj_gateways_fees_tax_class_id', array() ),
54
  'exclude_shipping' => get_option( 'wcj_gateways_fees_exclude_shipping', array() ),
55
+ 'include_taxes' => get_option( 'wcj_gateways_fees_include_taxes', array() ),
56
  'include_products' => apply_filters( 'booster_option', array(), get_option( 'wcj_gateways_fees_include_products', array() ) ),
57
  'exclude_products' => apply_filters( 'booster_option', array(), get_option( 'wcj_gateways_fees_exclude_products', array() ) ),
58
  );
67
  'is_taxable' => 'no',
68
  'tax_class_id' => '',
69
  'exclude_shipping' => 'no',
70
+ 'include_taxes' => 'no',
71
  'include_products' => '',
72
  'exclude_products' => '',
73
  );
182
  /**
183
  * gateways_fees.
184
  *
185
+ * @version 4.1.0
186
  */
187
  function gateways_fees() {
188
  global $woocommerce;
189
  $current_gateway = $this->get_current_gateway();
190
  if ( '' != $current_gateway ) {
191
+ $fee_text = do_shortcode( $this->get_option( 'text', $current_gateway ) );
192
  $min_cart_amount = $this->get_option( 'min_cart_amount', $current_gateway );
193
  $max_cart_amount = $this->get_option( 'max_cart_amount', $current_gateway );
194
  // Multicurrency (Currency Switcher) module
200
  $woocommerce->cart->cart_contents_total + $woocommerce->cart->shipping_total :
201
  $woocommerce->cart->cart_contents_total
202
  );
203
+ $total_in_cart += 'no' === $this->get_option( 'include_taxes', $current_gateway ) ? 0 : $woocommerce->cart->get_subtotal_tax() + $woocommerce->cart->get_shipping_tax();
204
  if ( '' != $fee_text && $total_in_cart >= $min_cart_amount && ( 0 == $max_cart_amount || $total_in_cart <= $max_cart_amount ) && $this->check_cart_products( $current_gateway ) ) {
205
  $fee_value = $this->get_option( 'value', $current_gateway );
206
  $fee_type = $this->get_option( 'type', $current_gateway );
includes/class-wcj-payment-gateways-per-category.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Gateways per Product or Category
4
  *
5
- * @version 3.1.0
6
  * @since 2.2.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -16,7 +16,9 @@ class WCJ_Payment_Gateways_Per_Category extends WCJ_Module {
16
  /**
17
  * Constructor.
18
  *
19
- * @version 2.8.0
 
 
20
  */
21
  function __construct() {
22
 
@@ -27,24 +29,19 @@ class WCJ_Payment_Gateways_Per_Category extends WCJ_Module {
27
  parent::__construct();
28
 
29
  if ( $this->is_enabled() ) {
30
- // add_filter( 'woocommerce_payment_gateways_settings', array( $this, 'add_per_category_settings' ), 100 );
31
  add_filter( 'woocommerce_available_payment_gateways', array( $this, 'filter_available_payment_gateways_per_category' ), 100 );
 
32
  }
33
  }
34
 
35
  /**
36
  * filter_available_payment_gateways_per_category.
37
  *
38
- * @version 3.1.0
 
39
  */
40
  function filter_available_payment_gateways_per_category( $available_gateways ) {
41
 
42
- /*
43
- if ( ! is_checkout() ) {
44
- return $available_gateways;
45
- }
46
- */
47
-
48
  if ( ! isset( WC()->cart ) ) {
49
  return $available_gateways;
50
  }
@@ -114,7 +111,8 @@ class WCJ_Payment_Gateways_Per_Category extends WCJ_Module {
114
  if ( ! empty( $products_in ) ) {
115
  $do_skip = true;
116
  foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
117
- if ( in_array( $values['product_id'], $products_in ) ) {
 
118
  // Current gateway is OK
119
  $do_skip = false;
120
  break;
@@ -134,7 +132,8 @@ class WCJ_Payment_Gateways_Per_Category extends WCJ_Module {
134
  if ( ! empty( $products_excl ) ) {
135
  $do_skip = false;
136
  foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
137
- if ( in_array( $values['product_id'], $products_excl ) ) {
 
138
  // Skip (i.e. hide/unset) current gateway
139
  if ( isset( $available_gateways[ $gateway_id ] ) ) {
140
  unset( $available_gateways[ $gateway_id ] );
2
  /**
3
  * Booster for WooCommerce - Module - Gateways per Product or Category
4
  *
5
+ * @version 4.1.0
6
  * @since 2.2.0
7
  * @author Algoritmika Ltd.
8
  */
16
  /**
17
  * Constructor.
18
  *
19
+ * @version 4.1.0
20
+ * @todo [dev] (maybe) add `$this->do_use_variations_and_variable`
21
+ * @todo [dev] (maybe) `add_filter( 'woocommerce_payment_gateways_settings', array( $this, 'add_per_category_settings' ), 100 );`
22
  */
23
  function __construct() {
24
 
29
  parent::__construct();
30
 
31
  if ( $this->is_enabled() ) {
 
32
  add_filter( 'woocommerce_available_payment_gateways', array( $this, 'filter_available_payment_gateways_per_category' ), 100 );
33
+ $this->do_use_variations = ( 'yes' === get_option( 'wcj_gateways_per_category_use_variations', 'no' ) );
34
  }
35
  }
36
 
37
  /**
38
  * filter_available_payment_gateways_per_category.
39
  *
40
+ * @version 4.1.0
41
+ * @todo [dev] (maybe) `if ( ! is_checkout() ) { return $available_gateways; }`
42
  */
43
  function filter_available_payment_gateways_per_category( $available_gateways ) {
44
 
 
 
 
 
 
 
45
  if ( ! isset( WC()->cart ) ) {
46
  return $available_gateways;
47
  }
111
  if ( ! empty( $products_in ) ) {
112
  $do_skip = true;
113
  foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
114
+ $product_id = ( $this->do_use_variations ? ( ! empty( $values['variation_id'] ) ? $values['variation_id'] : $values['product_id'] ) : $values['product_id'] );
115
+ if ( in_array( $product_id, $products_in ) ) {
116
  // Current gateway is OK
117
  $do_skip = false;
118
  break;
132
  if ( ! empty( $products_excl ) ) {
133
  $do_skip = false;
134
  foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
135
+ $product_id = ( $this->do_use_variations ? ( ! empty( $values['variation_id'] ) ? $values['variation_id'] : $values['product_id'] ) : $values['product_id'] );
136
+ if ( in_array( $product_id, $products_excl ) ) {
137
  // Skip (i.e. hide/unset) current gateway
138
  if ( isset( $available_gateways[ $gateway_id ] ) ) {
139
  unset( $available_gateways[ $gateway_id ] );
includes/class-wcj-pdf-invoicing.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - PDF Invoicing
4
  *
5
- * @version 3.5.2
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -162,7 +162,7 @@ class WCJ_PDF_Invoicing extends WCJ_Module {
162
  /**
163
  * bulk_actions_pdfs.
164
  *
165
- * @version 3.5.0
166
  * @since 2.5.7
167
  * @todo on `generate` (and maybe other actions) validate user permissions/capabilities - `if ( ! current_user_can( $post_type_object->cap->export_post, $post_id ) ) { wp_die( __( 'You are not allowed to export this post.' ) ); }`
168
  * @todo add security check - `check_admin_referer( 'bulk-posts' )`
@@ -186,6 +186,7 @@ class WCJ_PDF_Invoicing extends WCJ_Module {
186
  $post_ids = $_GET['post'];
187
  $the_action = $action_exploded[0];
188
  $the_type = $action_exploded[1];
 
189
  switch( $the_action ) {
190
  case 'generate':
191
  $generated = 0;
2
  /**
3
  * Booster for WooCommerce - Module - PDF Invoicing
4
  *
5
+ * @version 4.1.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
162
  /**
163
  * bulk_actions_pdfs.
164
  *
165
+ * @version 4.1.0
166
  * @since 2.5.7
167
  * @todo on `generate` (and maybe other actions) validate user permissions/capabilities - `if ( ! current_user_can( $post_type_object->cap->export_post, $post_id ) ) { wp_die( __( 'You are not allowed to export this post.' ) ); }`
168
  * @todo add security check - `check_admin_referer( 'bulk-posts' )`
186
  $post_ids = $_GET['post'];
187
  $the_action = $action_exploded[0];
188
  $the_type = $action_exploded[1];
189
+ $sendback = false;
190
  switch( $the_action ) {
191
  case 'generate':
192
  $generated = 0;
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 3.7.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -12,10 +12,17 @@ if ( ! class_exists( 'WCJ_Price_By_Country' ) ) :
12
 
13
  class WCJ_Price_By_Country extends WCJ_Module {
14
 
 
 
 
 
 
 
 
15
  /**
16
  * Constructor.
17
  *
18
- * @version 3.7.0
19
  */
20
  function __construct() {
21
 
@@ -38,7 +45,7 @@ class WCJ_Price_By_Country extends WCJ_Module {
38
  }
39
  if ( $do_load_core ) {
40
  // Frontend
41
- include_once( 'price-by-country/class-wcj-price-by-country-core.php' );
42
  }
43
  }
44
  if ( is_admin() ) {
2
  /**
3
  * Booster for WooCommerce - Module - Prices and Currencies by Country
4
  *
5
+ * @version 4.1.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
12
 
13
  class WCJ_Price_By_Country extends WCJ_Module {
14
 
15
+ /**
16
+ * @var WCJ_Price_by_Country_Core
17
+ *
18
+ * @since 4.1.0
19
+ */
20
+ public $core;
21
+
22
  /**
23
  * Constructor.
24
  *
25
+ * @version 4.1.0
26
  */
27
  function __construct() {
28
 
45
  }
46
  if ( $do_load_core ) {
47
  // Frontend
48
+ $this->core = include_once( 'price-by-country/class-wcj-price-by-country-core.php' );
49
  }
50
  }
51
  if ( is_admin() ) {
includes/class-wcj-price-formats.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Price Formats
4
  *
5
- * @version 3.5.0
6
  * @since 2.5.2
7
  * @author Algoritmika Ltd.
8
  */
@@ -76,12 +76,13 @@ class WCJ_Price_Formats extends WCJ_Module {
76
  /**
77
  * price_format.
78
  *
79
- * @version 3.2.4
80
  * @since 2.5.2
81
  */
82
  function price_format( $args ) {
 
83
  for ( $i = 1; $i <= apply_filters( 'booster_option', 1, get_option( 'wcj_price_formats_total_number', 1 ) ); $i++ ) {
84
- if ( get_woocommerce_currency() === get_option( 'wcj_price_formats_currency_' . $i ) ) {
85
  if ( defined( 'ICL_LANGUAGE_CODE' ) && '' != ( $wpml_language = get_option( 'wcj_price_formats_wpml_language_' . $i, '' ) ) ) {
86
  $wpml_language = explode( ',', trim( str_replace( ' ', '', $wpml_language ), ',' ) );
87
  if ( ! in_array( ICL_LANGUAGE_CODE, $wpml_language ) ) {
2
  /**
3
  * Booster for WooCommerce - Module - Price Formats
4
  *
5
+ * @version 4.1.0
6
  * @since 2.5.2
7
  * @author Algoritmika Ltd.
8
  */
76
  /**
77
  * price_format.
78
  *
79
+ * @version 4.1.0
80
  * @since 2.5.2
81
  */
82
  function price_format( $args ) {
83
+ $current_currency = ( '' !== $args['currency'] ? $args['currency'] : get_woocommerce_currency() );
84
  for ( $i = 1; $i <= apply_filters( 'booster_option', 1, get_option( 'wcj_price_formats_total_number', 1 ) ); $i++ ) {
85
+ if ( $current_currency === get_option( 'wcj_price_formats_currency_' . $i ) ) {
86
  if ( defined( 'ICL_LANGUAGE_CODE' ) && '' != ( $wpml_language = get_option( 'wcj_price_formats_wpml_language_' . $i, '' ) ) ) {
87
  $wpml_language = explode( ',', trim( str_replace( ' ', '', $wpml_language ), ',' ) );
88
  if ( ! in_array( ICL_LANGUAGE_CODE, $wpml_language ) ) {
includes/class-wcj-product-images.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Product Images
4
  *
5
- * @version 3.9.0
6
  * @since 2.2.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -76,26 +76,30 @@ class WCJ_Product_Images extends WCJ_Module {
76
  /**
77
  * hide_per_product_image_on_archives_start.
78
  *
79
- * @version 2.5.2
80
  * @since 2.5.2
81
  */
82
  function hide_per_product_image_on_archives_start() {
83
  $post_id = get_the_ID();
84
  if ( $post_id > 0 && 'yes' === get_post_meta( $post_id, '_' . 'wcj_product_images_hide_image_on_archives', true ) ) {
85
- remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );
 
 
86
  }
87
  }
88
 
89
  /**
90
  * hide_per_product_image_on_archives_end.
91
  *
92
- * @version 2.5.2
93
  * @since 2.5.2
94
  */
95
  function hide_per_product_image_on_archives_end() {
96
  $post_id = get_the_ID();
97
  if ( $post_id > 0 && 'yes' === get_post_meta( $post_id, '_' . 'wcj_product_images_hide_image_on_archives', true ) ) {
98
- add_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );
 
 
99
  }
100
  }
101
 
@@ -117,7 +121,7 @@ class WCJ_Product_Images extends WCJ_Module {
117
  /**
118
  * product_images_hide_on_archive.
119
  *
120
- * @version 2.2.6
121
  */
122
  function product_images_hide_on_archive() {
123
  if (
@@ -125,15 +129,25 @@ class WCJ_Product_Images extends WCJ_Module {
125
  '' != get_option( 'wcj_product_images_custom_on_archives', '' ) ||
126
  ( ( $post_id = get_the_ID() ) > 0 && '' != get_post_meta( $post_id, '_' . 'wcj_product_images_meta_custom_on_archives', true ) )
127
  ) {
128
- remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );
 
 
 
 
 
 
129
  }
130
  }
131
 
132
  /**
133
  * product_images_and_thumbnails_hide_on_single.
 
 
134
  */
135
  function product_images_and_thumbnails_hide_on_single() {
136
- remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_images', 20 );
 
 
137
  }
138
 
139
  /**
2
  /**
3
  * Booster for WooCommerce - Module - Product Images
4
  *
5
+ * @version 4.1.0
6
  * @since 2.2.0
7
  * @author Algoritmika Ltd.
8
  */
76
  /**
77
  * hide_per_product_image_on_archives_start.
78
  *
79
+ * @version 4.1.0
80
  * @since 2.5.2
81
  */
82
  function hide_per_product_image_on_archives_start() {
83
  $post_id = get_the_ID();
84
  if ( $post_id > 0 && 'yes' === get_post_meta( $post_id, '_' . 'wcj_product_images_hide_image_on_archives', true ) ) {
85
+ remove_action( 'woocommerce_before_shop_loop_item_title',
86
+ apply_filters( 'wcj_product_images_loop_product_thumbnail_filter', 'woocommerce_template_loop_product_thumbnail' ),
87
+ apply_filters( 'wcj_product_images_loop_product_thumbnail_filter_priority', 10 ) );
88
  }
89
  }
90
 
91
  /**
92
  * hide_per_product_image_on_archives_end.
93
  *
94
+ * @version 4.1.0
95
  * @since 2.5.2
96
  */
97
  function hide_per_product_image_on_archives_end() {
98
  $post_id = get_the_ID();
99
  if ( $post_id > 0 && 'yes' === get_post_meta( $post_id, '_' . 'wcj_product_images_hide_image_on_archives', true ) ) {
100
+ add_action( 'woocommerce_before_shop_loop_item_title',
101
+ apply_filters( 'wcj_product_images_loop_product_thumbnail_filter', 'woocommerce_template_loop_product_thumbnail' ),
102
+ apply_filters( 'wcj_product_images_loop_product_thumbnail_filter_priority', 10 ) );
103
  }
104
  }
105
 
121
  /**
122
  * product_images_hide_on_archive.
123
  *
124
+ * @version 4.1.0
125
  */
126
  function product_images_hide_on_archive() {
127
  if (
129
  '' != get_option( 'wcj_product_images_custom_on_archives', '' ) ||
130
  ( ( $post_id = get_the_ID() ) > 0 && '' != get_post_meta( $post_id, '_' . 'wcj_product_images_meta_custom_on_archives', true ) )
131
  ) {
132
+ remove_action( 'woocommerce_before_shop_loop_item_title',
133
+ apply_filters( 'wcj_product_images_loop_product_thumbnail_filter', 'woocommerce_template_loop_product_thumbnail' ),
134
+ apply_filters( 'wcj_product_images_loop_product_thumbnail_filter_priority', 10 ) );
135
+ } else {
136
+ add_action( 'woocommerce_before_shop_loop_item_title',
137
+ apply_filters( 'wcj_product_images_loop_product_thumbnail_filter', 'woocommerce_template_loop_product_thumbnail' ),
138
+ apply_filters( 'wcj_product_images_loop_product_thumbnail_filter_priority', 10 ) );
139
  }
140
  }
141
 
142
  /**
143
  * product_images_and_thumbnails_hide_on_single.
144
+ *
145
+ * @version 4.1.0
146
  */
147
  function product_images_and_thumbnails_hide_on_single() {
148
+ remove_action( 'woocommerce_before_single_product_summary',
149
+ apply_filters( 'wcj_product_images_single_product_images_filter', 'woocommerce_show_product_images' ),
150
+ apply_filters( 'wcj_product_images_single_product_images_filter_priority', 20 ) );
151
  }
152
 
153
  /**
includes/class-wcj-product-msrp.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Product MSRP
4
  *
5
- * @version 3.8.0
6
  * @since 3.6.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -114,7 +114,7 @@ class WCJ_Product_MSRP extends WCJ_Module {
114
  /**
115
  * display.
116
  *
117
- * @version 3.8.0
118
  * @since 3.6.0
119
  * @todo (maybe) multicurrency
120
  * @todo (feature) (maybe) variable product's msrp: add another option to enter MSRP directly for the whole variable product, instead of taking first variation's MSRP
@@ -137,6 +137,7 @@ class WCJ_Product_MSRP extends WCJ_Module {
137
  $product_id = wcj_get_product_id( $product );
138
  }
139
  $msrp = apply_filters( 'wcj_product_msrp', get_post_meta( $product_id, '_' . 'wcj_msrp', true ), $product );
 
140
  if ( '' == $msrp || 0 == $msrp ) {
141
  return $price_html;
142
  }
2
  /**
3
  * Booster for WooCommerce - Module - Product MSRP
4
  *
5
+ * @version 4.1.0
6
  * @since 3.6.0
7
  * @author Algoritmika Ltd.
8
  */
114
  /**
115
  * display.
116
  *
117
+ * @version 4.1.0
118
  * @since 3.6.0
119
  * @todo (maybe) multicurrency
120
  * @todo (feature) (maybe) variable product's msrp: add another option to enter MSRP directly for the whole variable product, instead of taking first variation's MSRP
137
  $product_id = wcj_get_product_id( $product );
138
  }
139
  $msrp = apply_filters( 'wcj_product_msrp', get_post_meta( $product_id, '_' . 'wcj_msrp', true ), $product );
140
+ $msrp = str_replace( ',', '.', $msrp );
141
  if ( '' == $msrp || 0 == $msrp ) {
142
  return $price_html;
143
  }
includes/class-wcj-product-open-pricing.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Product Open Pricing
4
  *
5
- * @version 3.8.0
6
  * @since 2.4.8
7
  * @author Algoritmika Ltd.
8
  */
@@ -16,7 +16,7 @@ class WCJ_Product_Open_Pricing extends WCJ_Module {
16
  /**
17
  * Constructor.
18
  *
19
- * @version 3.5.1
20
  * @since 2.4.8
21
  */
22
  function __construct() {
@@ -57,6 +57,7 @@ class WCJ_Product_Open_Pricing extends WCJ_Module {
57
  add_filter( 'manage_edit-product_columns', array( $this, 'add_product_column_open_pricing' ), PHP_INT_MAX );
58
  add_action( 'manage_product_posts_custom_column', array( $this, 'render_product_column_open_pricing' ), PHP_INT_MAX );
59
  }
 
60
  }
61
  }
62
 
@@ -86,21 +87,32 @@ class WCJ_Product_Open_Pricing extends WCJ_Module {
86
  }
87
  }
88
 
 
 
 
 
 
 
 
 
 
 
 
89
  /**
90
  * add_price_info_to_loop.
91
  *
92
- * @version 2.8.2
93
  * @since 2.8.0
94
  */
95
  function add_price_info_to_loop() {
96
  $_product_id = get_the_ID();
97
  if ( $this->is_open_price_product( $_product_id ) ) {
98
  $replaceable_values = array(
99
- '%default_price%' => wc_price( get_post_meta( $_product_id, '_' . 'wcj_product_open_price_default_price', true ) ),
100
- '%min_price%' => wc_price( get_post_meta( $_product_id, '_' . 'wcj_product_open_price_min_price', true ) ),
101
- '%max_price%' => wc_price( get_post_meta( $_product_id, '_' . 'wcj_product_open_price_max_price', true ) ),
102
  );
103
- echo str_replace( array_keys( $replaceable_values ), array_values( $replaceable_values ), $this->loop_price_info_template );
104
  }
105
  }
106
 
@@ -258,39 +270,46 @@ class WCJ_Product_Open_Pricing extends WCJ_Module {
258
  /**
259
  * get_open_price.
260
  *
261
- * @version 2.4.8
262
  * @since 2.4.8
263
  */
264
  function get_open_price( $price, $_product ) {
265
- return ( $this->is_open_price_product( $_product ) && isset( $_product->wcj_open_price ) ) ? $_product->wcj_open_price : $price;
 
 
 
 
 
 
 
 
 
266
  }
267
 
268
  /**
269
  * validate_open_price_on_add_to_cart.
270
  *
271
- * @version 2.6.0
272
  * @since 2.4.8
273
  */
274
  function validate_open_price_on_add_to_cart( $passed, $product_id ) {
275
  $the_product = wc_get_product( $product_id );
276
  if ( $this->is_open_price_product( $the_product ) ) {
277
- $min_price = get_post_meta( $product_id, '_' . 'wcj_product_open_price_min_price', true );
278
- $max_price = get_post_meta( $product_id, '_' . 'wcj_product_open_price_max_price', true );
279
- if ( $min_price > 0 ) {
280
- if ( ! isset( $_POST['wcj_open_price'] ) || '' === $_POST['wcj_open_price'] ) {
281
- wc_add_notice( get_option( 'wcj_product_open_price_messages_required', __( 'Price is required!', 'woocommerce-jetpack' ) ), 'error' );
282
- return false;
283
- }
284
- if ( $_POST['wcj_open_price'] < $min_price ) {
285
- wc_add_notice( get_option( 'wcj_product_open_price_messages_to_small', __( 'Entered price is too small!', 'woocommerce-jetpack' ) ), 'error' );
286
- return false;
287
- }
288
  }
289
- if ( $max_price > 0 ) {
290
- if ( isset( $_POST['wcj_open_price'] ) && $_POST['wcj_open_price'] > $max_price ) {
291
- wc_add_notice( get_option( 'wcj_product_open_price_messages_to_big', __( 'Entered price is too big!', 'woocommerce-jetpack' ) ), 'error' );
292
- return false;
293
- }
294
  }
295
  }
296
  return $passed;
@@ -338,7 +357,7 @@ class WCJ_Product_Open_Pricing extends WCJ_Module {
338
  /**
339
  * add_open_price_input_field_to_frontend.
340
  *
341
- * @version 3.8.0
342
  * @since 2.4.8
343
  */
344
  function add_open_price_input_field_to_frontend() {
@@ -371,7 +390,7 @@ class WCJ_Product_Open_Pricing extends WCJ_Module {
371
  . 'value="' . $value . '" '
372
  . $custom_attributes . '>';
373
  // Currency symbol
374
- $currency_symbol = get_woocommerce_currency_symbol();
375
  // Replacing final values
376
  $replacement_values = array(
377
  '%frontend_label%' => $title,
@@ -380,9 +399,9 @@ class WCJ_Product_Open_Pricing extends WCJ_Module {
380
  '%min_price_simple%' => $min_price,
381
  '%max_price_simple%' => $max_price,
382
  '%default_price_simple%' => $default_price,
383
- '%min_price%' => wc_price( $min_price ),
384
- '%max_price%' => wc_price( $max_price ),
385
- '%default_price%' => wc_price( $default_price ),
386
  );
387
  echo str_replace(
388
  array_keys( $replacement_values ),
2
  /**
3
  * Booster for WooCommerce - Module - Product Open Pricing
4
  *
5
+ * @version 4.1.0
6
  * @since 2.4.8
7
  * @author Algoritmika Ltd.
8
  */
16
  /**
17
  * Constructor.
18
  *
19
+ * @version 4.1.0
20
  * @since 2.4.8
21
  */
22
  function __construct() {
57
  add_filter( 'manage_edit-product_columns', array( $this, 'add_product_column_open_pricing' ), PHP_INT_MAX );
58
  add_action( 'manage_product_posts_custom_column', array( $this, 'render_product_column_open_pricing' ), PHP_INT_MAX );
59
  }
60
+ $this->shop_currency = get_option( 'woocommerce_currency' );
61
  }
62
  }
63
 
87
  }
88
  }
89
 
90
+ /**
91
+ * wc_price_shop_currency.
92
+ *
93
+ * @version 4.1.0
94
+ * @since 4.1.0
95
+ */
96
+ function wc_price_shop_currency( $price, $args = array() ) {
97
+ $args['currency'] = $this->shop_currency;
98
+ return wc_price( $price, $args );
99
+ }
100
+
101
  /**
102
  * add_price_info_to_loop.
103
  *
104
+ * @version 4.1.0
105
  * @since 2.8.0
106
  */
107
  function add_price_info_to_loop() {
108
  $_product_id = get_the_ID();
109
  if ( $this->is_open_price_product( $_product_id ) ) {
110
  $replaceable_values = array(
111
+ '%default_price%' => $this->wc_price_shop_currency( get_post_meta( $_product_id, '_' . 'wcj_product_open_price_default_price', true ) ),
112
+ '%min_price%' => $this->wc_price_shop_currency( get_post_meta( $_product_id, '_' . 'wcj_product_open_price_min_price', true ) ),
113
+ '%max_price%' => $this->wc_price_shop_currency( get_post_meta( $_product_id, '_' . 'wcj_product_open_price_max_price', true ) ),
114
  );
115
+ echo wcj_handle_replacements( $replaceable_values, $this->loop_price_info_template );
116
  }
117
  }
118
 
270
  /**
271
  * get_open_price.
272
  *
273
+ * @version 4.1.0
274
  * @since 2.4.8
275
  */
276
  function get_open_price( $price, $_product ) {
277
+ if ( $this->is_open_price_product( $_product ) && isset( $_product->wcj_open_price ) ) {
278
+ $price = $_product->wcj_open_price;
279
+ // Multicurrency (Currency Switcher) module
280
+ if ( WCJ()->modules['multicurrency']->is_enabled() ) {
281
+ $price = WCJ()->modules['multicurrency']->change_price( $price, null );
282
+ }
283
+ return $price;
284
+ } else {
285
+ return $price;
286
+ }
287
  }
288
 
289
  /**
290
  * validate_open_price_on_add_to_cart.
291
  *
292
+ * @version 4.1.0
293
  * @since 2.4.8
294
  */
295
  function validate_open_price_on_add_to_cart( $passed, $product_id ) {
296
  $the_product = wc_get_product( $product_id );
297
  if ( $this->is_open_price_product( $the_product ) ) {
298
+ // Empty price
299
+ if ( ! isset( $_POST['wcj_open_price'] ) || '' === $_POST['wcj_open_price'] ) {
300
+ wc_add_notice( get_option( 'wcj_product_open_price_messages_required', __( 'Price is required!', 'woocommerce-jetpack' ) ), 'error' );
301
+ return false;
302
+ }
303
+ // Min & Max
304
+ if ( ( $min_price = get_post_meta( $product_id, '_' . 'wcj_product_open_price_min_price', true ) ) > 0 && $_POST['wcj_open_price'] < $min_price ) {
305
+ wc_add_notice( wcj_handle_replacements( array( '%price%' => $this->wc_price_shop_currency( $_POST['wcj_open_price'] ), '%min_price%' => $this->wc_price_shop_currency( $min_price ) ),
306
+ get_option( 'wcj_product_open_price_messages_to_small', __( 'Entered price is too small!', 'woocommerce-jetpack' ) ) ), 'error' );
307
+ return false;
 
308
  }
309
+ if ( ( $max_price = get_post_meta( $product_id, '_' . 'wcj_product_open_price_max_price', true ) ) > 0 && $_POST['wcj_open_price'] > $max_price ) {
310
+ wc_add_notice( wcj_handle_replacements( array( '%price%' => $this->wc_price_shop_currency( $_POST['wcj_open_price'] ), '%max_price%' => $this->wc_price_shop_currency( $max_price ) ),
311
+ get_option( 'wcj_product_open_price_messages_to_big', __( 'Entered price is too big!', 'woocommerce-jetpack' ) ) ), 'error' );
312
+ return false;
 
313
  }
314
  }
315
  return $passed;
357
  /**
358
  * add_open_price_input_field_to_frontend.
359
  *
360
+ * @version 4.1.0
361
  * @since 2.4.8
362
  */
363
  function add_open_price_input_field_to_frontend() {
390
  . 'value="' . $value . '" '
391
  . $custom_attributes . '>';
392
  // Currency symbol
393
+ $currency_symbol = get_woocommerce_currency_symbol( $this->shop_currency );
394
  // Replacing final values
395
  $replacement_values = array(
396
  '%frontend_label%' => $title,
399
  '%min_price_simple%' => $min_price,
400
  '%max_price_simple%' => $max_price,
401
  '%default_price_simple%' => $default_price,
402
+ '%min_price%' => $this->wc_price_shop_currency( $min_price ),
403
+ '%max_price%' => $this->wc_price_shop_currency( $max_price ),
404
+ '%default_price%' => $this->wc_price_shop_currency( $default_price ),
405
  );
406
  echo str_replace(
407
  array_keys( $replacement_values ),
includes/class-wcj-product-price-by-formula.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Product Price by Formula
4
  *
5
- * @version 3.9.0
6
  * @since 2.5.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -16,7 +16,7 @@ class WCJ_Product_Price_by_Formula extends WCJ_Module {
16
  /**
17
  * Constructor.
18
  *
19
- * @version 3.9.0
20
  * @since 2.5.0
21
  * @todo use WC math library instead of `PHPMathParser`
22
  */
@@ -34,7 +34,11 @@ class WCJ_Product_Price_by_Formula extends WCJ_Module {
34
  add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
35
  add_action( 'save_post_product', array( $this, 'save_meta_box' ), PHP_INT_MAX, 2 );
36
 
37
- if ( wcj_is_frontend() || isset( $_GET['wcj_create_products_xml'] ) ) {
 
 
 
 
38
  wcj_add_change_price_hooks( $this, wcj_get_module_price_hooks_priority( 'product_price_by_formula' ), false );
39
  }
40
 
@@ -66,10 +70,32 @@ class WCJ_Product_Price_by_Formula extends WCJ_Module {
66
  return $price;
67
  }
68
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
  /**
70
  * change_price.
71
  *
72
- * @version 3.9.0
73
  * @since 2.5.0
74
  */
75
  function change_price( $price, $_product, $output_errors = false ) {
@@ -95,6 +121,7 @@ class WCJ_Product_Price_by_Formula extends WCJ_Module {
95
  $the_param = ( $is_per_product )
96
  ? get_post_meta( $_product_id, '_' . 'wcj_product_price_by_formula_param_' . $i, true )
97
  : get_option( 'wcj_product_price_by_formula_param_' . $i, '' );
 
98
  $the_param = do_shortcode( $the_param );
99
  if ( '' != $the_param ) {
100
  $math->registerVariable( 'p' . $i, $the_param );
2
  /**
3
  * Booster for WooCommerce - Module - Product Price by Formula
4
  *
5
+ * @version 4.1.0
6
  * @since 2.5.0
7
  * @author Algoritmika Ltd.
8
  */
16
  /**
17
  * Constructor.
18
  *
19
+ * @version 4.1.0
20
  * @since 2.5.0
21
  * @todo use WC math library instead of `PHPMathParser`
22
  */
34
  add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
35
  add_action( 'save_post_product', array( $this, 'save_meta_box' ), PHP_INT_MAX, 2 );
36
 
37
+ if (
38
+ ( wcj_is_frontend() && "yes" === get_option( 'wcj_product_price_by_formula_admin_scope', 'yes' ) ) ||
39
+ ( "no" === get_option( 'wcj_product_price_by_formula_admin_scope', 'yes' ) && ( wcj_is_frontend() || is_admin() ) ) ||
40
+ isset( $_GET['wcj_create_products_xml'] )
41
+ ) {
42
  wcj_add_change_price_hooks( $this, wcj_get_module_price_hooks_priority( 'product_price_by_formula' ), false );
43
  }
44
 
70
  return $price;
71
  }
72
 
73
+ /**
74
+ * Adds product id param on shortcodes.
75
+ *
76
+ * @version 4.1.0
77
+ * @since 4.1.0
78
+ *
79
+ * @param $the_param
80
+ * @param $_product
81
+ *
82
+ * @return string
83
+ */
84
+ function add_product_id_param( $the_param, $_product ) {
85
+ if (
86
+ preg_match( '/^\[.*\]$/', $the_param ) &&
87
+ ! preg_match( '/product_id=[\'"]?\d+[\'"]?/', $the_param )
88
+ ) {
89
+ $product_id = $_product->get_id();
90
+ $the_param = preg_replace( '/\[[^\]]*/', "$0 product_id='{$product_id}'", $the_param );
91
+ }
92
+ return $the_param;
93
+ }
94
+
95
  /**
96
  * change_price.
97
  *
98
+ * @version 4.1.0
99
  * @since 2.5.0
100
  */
101
  function change_price( $price, $_product, $output_errors = false ) {
121
  $the_param = ( $is_per_product )
122
  ? get_post_meta( $_product_id, '_' . 'wcj_product_price_by_formula_param_' . $i, true )
123
  : get_option( 'wcj_product_price_by_formula_param_' . $i, '' );
124
+ $the_param = $this->add_product_id_param( $the_param, $_product );
125
  $the_param = do_shortcode( $the_param );
126
  if ( '' != $the_param ) {
127
  $math->registerVariable( 'p' . $i, $the_param );
includes/class-wcj-products-per-page.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Products per Page
4
  *
5
- * @version 3.8.0
6
  * @since 2.6.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -16,7 +16,7 @@ class WCJ_Products_Per_Page extends WCJ_Module {
16
  /**
17
  * Constructor.
18
  *
19
- * @version 3.8.0
20
  * @since 2.6.0
21
  * @todo (dev) position priority for every hook
22
  * @todo (dev) post or get
@@ -35,6 +35,7 @@ class WCJ_Products_Per_Page extends WCJ_Module {
35
  add_action( 'init', 'wcj_session_maybe_start' );
36
  }
37
  add_filter( 'loop_shop_per_page', array( $this, 'set_products_per_page_number' ), PHP_INT_MAX );
 
38
  $position_hooks = get_option( 'wcj_products_per_page_position', array( 'woocommerce_before_shop_loop' ) );
39
  foreach ( $position_hooks as $position_hook ) {
40
  add_action( $position_hook, array( $this, 'add_products_per_page_form' ), get_option( 'wcj_products_per_page_position_priority', 40 ) );
@@ -99,6 +100,21 @@ class WCJ_Products_Per_Page extends WCJ_Module {
99
  return $this->get_current_products_per_page_number( true );
100
  }
101
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
  /**
103
  * get_current_products_per_page_number.
104
  *
2
  /**
3
  * Booster for WooCommerce - Module - Products per Page
4
  *
5
+ * @version 4.1.0
6
  * @since 2.6.0
7
  * @author Algoritmika Ltd.
8
  */
16
  /**
17
  * Constructor.
18
  *
19
+ * @version 4.1.0
20
  * @since 2.6.0
21
  * @todo (dev) position priority for every hook
22
  * @todo (dev) post or get
35
  add_action( 'init', 'wcj_session_maybe_start' );
36
  }
37
  add_filter( 'loop_shop_per_page', array( $this, 'set_products_per_page_number' ), PHP_INT_MAX );
38
+ add_filter( 'option_et_divi', array( $this, 'set_products_per_page_number_on_divi' ), PHP_INT_MAX );
39
  $position_hooks = get_option( 'wcj_products_per_page_position', array( 'woocommerce_before_shop_loop' ) );
40
  foreach ( $position_hooks as $position_hook ) {
41
  add_action( $position_hook, array( $this, 'add_products_per_page_form' ), get_option( 'wcj_products_per_page_position_priority', 40 ) );
100
  return $this->get_current_products_per_page_number( true );
101
  }
102
 
103
+ /**
104
+ * Sets products per page on DIVI theme.
105
+ *
106
+ * @version 4.1.0
107
+ * @since 4.1.0
108
+ *
109
+ * @param $option
110
+ *
111
+ * @return mixed
112
+ */
113
+ function set_products_per_page_number_on_divi( $option ) {
114
+ $option['divi_woocommerce_archive_num_posts'] = $this->get_current_products_per_page_number( true );
115
+ return $option;
116
+ }
117
+
118
  /**
119
  * get_current_products_per_page_number.
120
  *
includes/class-wcj-related-products.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Related Products
4
  *
5
- * @version 3.9.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -30,7 +30,7 @@ class WCJ_Related_Products extends WCJ_Module {
30
  /**
31
  * Constructor.
32
  *
33
- * @version 3.1.1
34
  */
35
  function __construct() {
36
 
@@ -39,7 +39,7 @@ class WCJ_Related_Products extends WCJ_Module {
39
  $this->desc = __( 'Change displayed related products number, columns, order; relate by tag, category, product attribute or manually on per product basis. Hide related products completely.', 'woocommerce-jetpack' );
40
  $this->link_slug = 'woocommerce-related-products';
41
  $this->extra_desc = sprintf(
42
- __( 'You may need to <a class="button" href="%s">clear all products transients</a> to immediately see results on frontend after changing module\'s settings. Alternatively you can just update each product individually to clear its transients.', 'woocommerce-jetpack' ),
43
  add_query_arg( 'wcj_clear_all_products_transients', 'yes' )
44
  );
45
  parent::__construct();
@@ -48,7 +48,6 @@ class WCJ_Related_Products extends WCJ_Module {
48
  add_action( 'admin_init', array( $this, 'maybe_delete_product_transients' ), PHP_INT_MAX, 2 );
49
 
50
  if ( $this->is_enabled() ) {
51
-
52
  // Related per Product
53
  if ( 'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_product_info_related_products_per_product', 'no' ) ) ) {
54
  add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
@@ -175,13 +174,16 @@ class WCJ_Related_Products extends WCJ_Module {
175
  /**
176
  * get_related_products_ids_wc3.
177
  *
178
- * @version 3.9.0
179
  * @since 2.8.0
180
  */
181
  function get_related_products_ids_wc3( $product_id ) {
182
  $include_ids = array();
183
  // Change Related Products
184
- if ( 'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_product_info_related_products_per_product', 'no' ) ) && 'yes' === get_post_meta( get_the_ID(), '_' . 'wcj_product_info_related_products_enabled', true ) ) {
 
 
 
185
  // Relate per Product (Manual)
186
  $related_per_product = get_post_meta( get_the_ID(), '_' . 'wcj_product_info_related_products_ids', true );
187
  $include_ids = ( ! empty( $related_per_product ) ? $related_per_product : false );
@@ -228,14 +230,13 @@ class WCJ_Related_Products extends WCJ_Module {
228
  /**
229
  * related_products_query_wc3.
230
  *
231
- * @version 3.9.0
232
  * @since 2.8.0
233
  * @see WC_Product_Data_Store_CPT::get_related_products_query()
234
  * @todo "Relate by Product Attribute" - directly to `$query['where']` instead of getting ids via `WP_Query`
235
  * @todo rethink hide related (for >= WC3)
236
  */
237
  function related_products_query_wc3( $_query, $product_id ) {
238
-
239
  //////////////////////////////////////////////////////////////////////
240
  // Algoritmika
241
  if ( 'yes' === get_option( 'wcj_product_info_related_products_hide', 'no' ) ) {
@@ -262,7 +263,6 @@ class WCJ_Related_Products extends WCJ_Module {
262
  $limit += 20;
263
  }
264
  //////////////////////////////////////////////////////////////////////
265
-
266
  global $wpdb;
267
 
268
  // Arrays to string.
@@ -282,7 +282,7 @@ class WCJ_Related_Products extends WCJ_Module {
282
  $query['where'] .= " AND p.ID NOT IN ( {$exclude_ids} )";
283
  //////////////////////////////////////////////////////////////////////
284
  // Algoritmika
285
- if ( $include_ids ) {
286
  $query['where'] .= " AND p.ID IN ( {$include_ids} )";
287
  }
288
  //////////////////////////////////////////////////////////////////////
@@ -322,7 +322,7 @@ class WCJ_Related_Products extends WCJ_Module {
322
  /**
323
  * fix_empty_initial_related_products.
324
  *
325
- * @version 2.6.0
326
  * @since 2.6.0
327
  */
328
  function fix_empty_initial_related_products( $terms, $product_id ) {
@@ -331,7 +331,7 @@ class WCJ_Related_Products extends WCJ_Module {
331
  $do_fix = true;
332
  } elseif (
333
  'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_product_info_related_products_per_product', 'no' ) ) &&
334
- 'yes' === get_post_meta( $product_id, '_' . 'wcj_product_info_related_products_enabled', true ) &&
335
  '' != get_post_meta( $product_id, '_' . 'wcj_product_info_related_products_ids', true )
336
  ) {
337
  $do_fix = true;
@@ -394,7 +394,7 @@ class WCJ_Related_Products extends WCJ_Module {
394
  /**
395
  * related_products_args.
396
  *
397
- * @version 2.8.0
398
  * @todo save custom results as product transient (for < WC3)
399
  */
400
  function related_products_args( $args ) {
@@ -415,7 +415,10 @@ class WCJ_Related_Products extends WCJ_Module {
415
  $args['order'] = get_option( 'wcj_product_info_related_products_order', 'desc' );
416
  }
417
  // Change Related Products
418
- if ( 'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_product_info_related_products_per_product', 'no' ) ) && 'yes' === get_post_meta( get_the_ID(), '_' . 'wcj_product_info_related_products_enabled', true ) ) {
 
 
 
419
  // Relate per Product (Manual)
420
  $related_per_product = get_post_meta( get_the_ID(), '_' . 'wcj_product_info_related_products_ids', true );
421
  if ( '' != $related_per_product ) {
2
  /**
3
  * Booster for WooCommerce - Module - Related Products
4
  *
5
+ * @version 4.1.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
30
  /**
31
  * Constructor.
32
  *
33
+ * @version 4.1.0
34
  */
35
  function __construct() {
36
 
39
  $this->desc = __( 'Change displayed related products number, columns, order; relate by tag, category, product attribute or manually on per product basis. Hide related products completely.', 'woocommerce-jetpack' );
40
  $this->link_slug = 'woocommerce-related-products';
41
  $this->extra_desc = sprintf(
42
+ __( 'You may need to <a href="%s">clear all products transients</a> to immediately see results on frontend after changing module\'s settings. Alternatively you can just update each product individually to clear its transients.', 'woocommerce-jetpack' ),
43
  add_query_arg( 'wcj_clear_all_products_transients', 'yes' )
44
  );
45
  parent::__construct();
48
  add_action( 'admin_init', array( $this, 'maybe_delete_product_transients' ), PHP_INT_MAX, 2 );
49
 
50
  if ( $this->is_enabled() ) {
 
51
  // Related per Product
52
  if ( 'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_product_info_related_products_per_product', 'no' ) ) ) {
53
  add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
174
  /**
175
  * get_related_products_ids_wc3.
176
  *
177
+ * @version 4.1.0
178
  * @since 2.8.0
179
  */
180
  function get_related_products_ids_wc3( $product_id ) {
181
  $include_ids = array();
182
  // Change Related Products
183
+ if (
184
+ 'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_product_info_related_products_per_product', 'no' ) ) &&
185
+ ( 'yes' === get_post_meta( get_the_ID(), '_' . 'wcj_product_info_related_products_enabled', true ) || ( 'yes' === get_option( 'wcj_product_info_related_products_per_product_cmb_default', 'no' ) ) && '' === get_post_meta( get_the_ID(), '_' . 'wcj_product_info_related_products_enabled', true ) )
186
+ ) {
187
  // Relate per Product (Manual)
188
  $related_per_product = get_post_meta( get_the_ID(), '_' . 'wcj_product_info_related_products_ids', true );
189
  $include_ids = ( ! empty( $related_per_product ) ? $related_per_product : false );
230
  /**
231
  * related_products_query_wc3.
232
  *
233
+ * @version 4.1.0
234
  * @since 2.8.0
235
  * @see WC_Product_Data_Store_CPT::get_related_products_query()
236
  * @todo "Relate by Product Attribute" - directly to `$query['where']` instead of getting ids via `WP_Query`
237
  * @todo rethink hide related (for >= WC3)
238
  */
239
  function related_products_query_wc3( $_query, $product_id ) {
 
240
  //////////////////////////////////////////////////////////////////////
241
  // Algoritmika
242
  if ( 'yes' === get_option( 'wcj_product_info_related_products_hide', 'no' ) ) {
263
  $limit += 20;
264
  }
265
  //////////////////////////////////////////////////////////////////////
 
266
  global $wpdb;
267
 
268
  // Arrays to string.
282
  $query['where'] .= " AND p.ID NOT IN ( {$exclude_ids} )";
283
  //////////////////////////////////////////////////////////////////////
284
  // Algoritmika
285
+ if ( ! is_array( $include_ids ) && $include_ids ) {
286
  $query['where'] .= " AND p.ID IN ( {$include_ids} )";
287
  }
288
  //////////////////////////////////////////////////////////////////////
322
  /**
323
  * fix_empty_initial_related_products.
324
  *
325
+ * @version 4.1.0
326
  * @since 2.6.0
327
  */
328
  function fix_empty_initial_related_products( $terms, $product_id ) {
331
  $do_fix = true;
332
  } elseif (
333
  'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_product_info_related_products_per_product', 'no' ) ) &&
334
+ ( 'yes' === get_post_meta( get_the_ID(), '_' . 'wcj_product_info_related_products_enabled', true ) || ( 'yes' === get_option( 'wcj_product_info_related_products_per_product_cmb_default', 'no' ) ) && '' === get_post_meta( get_the_ID(), '_' . 'wcj_product_info_related_products_enabled', true ) ) &&
335
  '' != get_post_meta( $product_id, '_' . 'wcj_product_info_related_products_ids', true )
336
  ) {
337
  $do_fix = true;
394
  /**
395
  * related_products_args.
396
  *
397
+ * @version 4.1.0
398
  * @todo save custom results as product transient (for < WC3)
399
  */
400
  function related_products_args( $args ) {
415
  $args['order'] = get_option( 'wcj_product_info_related_products_order', 'desc' );
416
  }
417
  // Change Related Products
418
+ if (
419
+ 'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_product_info_related_products_per_product', 'no' ) ) &&
420
+ ( 'yes' === get_post_meta( get_the_ID(), '_' . 'wcj_product_info_related_products_enabled', true ) || ( 'yes' === get_option( 'wcj_product_info_related_products_per_product_cmb_default', 'no' ) ) && '' === get_post_meta( get_the_ID(), '_' . 'wcj_product_info_related_products_enabled', true ) )
421
+ ) {
422
  // Relate per Product (Manual)
423
  $related_per_product = get_post_meta( get_the_ID(), '_' . 'wcj_product_info_related_products_ids', true );
424
  if ( '' != $related_per_product ) {
includes/class-wcj-tax-display.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Tax Display
4
  *
5
- * @version 3.2.4
6
  * @since 3.2.4
7
  * @author Algoritmika Ltd.
8
  */
@@ -16,7 +16,7 @@ class WCJ_Tax_Display extends WCJ_Module {
16
  /**
17
  * Constructor.
18
  *
19
- * @version 3.2.4
20
  * @since 3.2.4
21
  */
22
  function __construct() {
@@ -37,6 +37,7 @@ class WCJ_Tax_Display extends WCJ_Module {
37
  // Tax Incl./Excl. by user role
38
  if ( 'yes' === get_option( 'wcj_product_listings_display_taxes_by_user_role_enabled', 'no' ) ) {
39
  add_filter( 'option_woocommerce_tax_display_shop', array( $this, 'tax_display_by_user_role' ), PHP_INT_MAX );
 
40
  }
41
 
42
  // Tax toggle
@@ -84,7 +85,7 @@ class WCJ_Tax_Display extends WCJ_Module {
84
  /**
85
  * tax_display_by_user_role.
86
  *
87
- * @version 3.2.4
88
  * @since 3.2.0
89
  */
90
  function tax_display_by_user_role( $value ) {
@@ -94,7 +95,8 @@ class WCJ_Tax_Display extends WCJ_Module {
94
  if ( '' != ( $display_taxes_by_user_role_roles = get_option( 'wcj_product_listings_display_taxes_by_user_role_roles', '' ) ) ) {
95
  $current_user_first_role = wcj_get_current_user_first_role();
96
  if ( in_array( $current_user_first_role, $display_taxes_by_user_role_roles ) ) {
97
- if ( 'no_changes' != ( $tax_display = get_option( 'wcj_product_listings_display_taxes_by_user_role_' . $current_user_first_role, 'no_changes' ) ) ) {
 
98
  return $tax_display;
99
  }
100
  }
2
  /**
3
  * Booster for WooCommerce - Module - Tax Display
4
  *
5
+ * @version 4.1.0
6
  * @since 3.2.4
7
  * @author Algoritmika Ltd.
8
  */
16
  /**
17
  * Constructor.
18
  *
19
+ * @version 4.1.0
20
  * @since 3.2.4
21
  */
22
  function __construct() {
37
  // Tax Incl./Excl. by user role
38
  if ( 'yes' === get_option( 'wcj_product_listings_display_taxes_by_user_role_enabled', 'no' ) ) {
39
  add_filter( 'option_woocommerce_tax_display_shop', array( $this, 'tax_display_by_user_role' ), PHP_INT_MAX );
40
+ add_filter( 'option_woocommerce_tax_display_cart', array( $this, 'tax_display_by_user_role' ), PHP_INT_MAX );
41
  }
42
 
43
  // Tax toggle
85
  /**
86
  * tax_display_by_user_role.
87
  *
88
+ * @version 4.1.0
89
  * @since 3.2.0
90
  */
91
  function tax_display_by_user_role( $value ) {
95
  if ( '' != ( $display_taxes_by_user_role_roles = get_option( 'wcj_product_listings_display_taxes_by_user_role_roles', '' ) ) ) {
96
  $current_user_first_role = wcj_get_current_user_first_role();
97
  if ( in_array( $current_user_first_role, $display_taxes_by_user_role_roles ) ) {
98
+ $option_name = 'option_woocommerce_tax_display_shop' === current_filter() ? 'wcj_product_listings_display_taxes_by_user_role_' . $current_user_first_role : 'wcj_product_listings_display_taxes_on_cart_by_user_role_' . $current_user_first_role;
99
+ if ( 'no_changes' != ( $tax_display = get_option( $option_name, 'no_changes' ) ) ) {
100
  return $tax_display;
101
  }
102
  }
includes/class-wcj-wholesale-price.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Wholesale Price
4
  *
5
- * @version 3.9.0
6
  * @since 2.2.0
7
  * @author Algoritmika Ltd.
8
  * @todo per variation
@@ -18,7 +18,7 @@ class WCJ_Wholesale_Price extends WCJ_Module {
18
  /**
19
  * Constructor.
20
  *
21
- * @version 2.8.0
22
  * @todo (maybe) `woocommerce_get_variation_prices_hash`
23
  */
24
  function __construct() {
@@ -37,10 +37,12 @@ class WCJ_Wholesale_Price extends WCJ_Module {
37
  }
38
 
39
  add_action( 'woocommerce_cart_loaded_from_session', array( $this, 'cart_loaded_from_session' ), PHP_INT_MAX, 1 );
40
- add_action( 'woocommerce_before_calculate_totals', array( $this, 'calculate_totals' ), PHP_INT_MAX, 1 );
41
- add_filter( WCJ_PRODUCT_GET_PRICE_FILTER, array( $this, 'wholesale_price' ), PHP_INT_MAX, 2 );
 
 
42
  if ( ! WCJ_IS_WC_VERSION_BELOW_3 ) {
43
- add_filter( 'woocommerce_product_variation_get_price', array( $this, 'wholesale_price' ), PHP_INT_MAX, 2 );
44
  }
45
 
46
  if ( 'yes' === get_option( 'wcj_wholesale_price_show_info_on_cart', 'no' ) ) {
2
  /**
3
  * Booster for WooCommerce - Module - Wholesale Price
4
  *
5
+ * @version 4.1.0
6
  * @since 2.2.0
7
  * @author Algoritmika Ltd.
8
  * @todo per variation
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 4.1.0
22
  * @todo (maybe) `woocommerce_get_variation_prices_hash`
23
  */
24
  function __construct() {
37
  }
38
 
39
  add_action( 'woocommerce_cart_loaded_from_session', array( $this, 'cart_loaded_from_session' ), PHP_INT_MAX, 1 );
40
+ add_action( 'woocommerce_before_calculate_totals', array( $this, 'calculate_totals' ), PHP_INT_MAX, 1 );
41
+
42
+ $this->price_hooks_priority = wcj_get_module_price_hooks_priority( 'wholesale_price' );
43
+ add_filter( WCJ_PRODUCT_GET_PRICE_FILTER, array( $this, 'wholesale_price' ), $this->price_hooks_priority, 2 );
44
  if ( ! WCJ_IS_WC_VERSION_BELOW_3 ) {
45
+ add_filter( 'woocommerce_product_variation_get_price', array( $this, 'wholesale_price' ), $this->price_hooks_priority, 2 );
46
  }
47
 
48
  if ( 'yes' === get_option( 'wcj_wholesale_price_show_info_on_cart', 'no' ) ) {
includes/classes/class-wcj-module-product-by-condition.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Product by Condition
4
  *
5
- * @version 3.9.0
6
  * @since 3.6.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -212,8 +212,9 @@ abstract class WCJ_Module_Product_By_Condition extends WCJ_Module {
212
  /**
213
  * pre_get_posts.
214
  *
215
- * @version 3.9.0
216
  * @since 3.6.0
 
217
  */
218
  function pre_get_posts( $query ) {
219
  if ( is_admin() ) {
@@ -224,8 +225,8 @@ abstract class WCJ_Module_Product_By_Condition extends WCJ_Module {
224
  }
225
  remove_action( 'pre_get_posts', array( $this, 'pre_get_posts' ) );
226
  $option_to_check = $this->get_check_option();
227
- $post__not_in = $query->get( 'post__not_in' );
228
- $meta_query = array();
229
  if ( 'invisible' != apply_filters( 'booster_option', 'visible', get_option( 'wcj_' . $this->id . '_visibility_method', 'visible' ) ) ) {
230
  $meta_query[] = array(
231
  'key' => '_' . 'wcj_' . $this->id . '_visible',
@@ -248,6 +249,7 @@ abstract class WCJ_Module_Product_By_Condition extends WCJ_Module {
248
  'posts_per_page' => -1,
249
  'fields' => 'ids',
250
  'meta_query' => $meta_query,
 
251
  );
252
  $loop = new WP_Query( $args );
253
  foreach ( $loop->posts as $product_id ) {
2
  /**
3
  * Booster for WooCommerce - Module - Product by Condition
4
  *
5
+ * @version 4.1.0
6
  * @since 3.6.0
7
  * @author Algoritmika Ltd.
8
  */
212
  /**
213
  * pre_get_posts.
214
  *
215
+ * @version 4.1.0
216
  * @since 3.6.0
217
+ * @todo [dev] maybe move `if ( ! function_exists( 'is_user_logged_in' ) ) {`
218
  */
219
  function pre_get_posts( $query ) {
220
  if ( is_admin() ) {
225
  }
226
  remove_action( 'pre_get_posts', array( $this, 'pre_get_posts' ) );
227
  $option_to_check = $this->get_check_option();
228
+ $post__not_in = $query->get( 'post__not_in' );
229
+ $meta_query = array();
230
  if ( 'invisible' != apply_filters( 'booster_option', 'visible', get_option( 'wcj_' . $this->id . '_visibility_method', 'visible' ) ) ) {
231
  $meta_query[] = array(
232
  'key' => '_' . 'wcj_' . $this->id . '_visible',
249
  'posts_per_page' => -1,
250
  'fields' => 'ids',
251
  'meta_query' => $meta_query,
252
+ 'post__not_in' => $post__not_in,
253
  );
254
  $loop = new WP_Query( $args );
255
  foreach ( $loop->posts as $product_id ) {
includes/core/wcj-loader.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Core - Loader
4
  *
5
- * @version 3.6.0
6
  * @since 3.2.4
7
  * @author Algoritmika Ltd.
8
  */
@@ -12,7 +12,7 @@ if ( ! defined( 'ABSPATH' ) ) {
12
  }
13
 
14
  // Debug Mode
15
- if ( 'yes' === get_option( 'wcj_admin_tools_enabled', 'no' ) && 'yes' === get_option( 'wcj_debuging_enabled', 'no' ) ) {
16
  error_reporting( E_ALL );
17
  }
18
 
2
  /**
3
  * Booster for WooCommerce - Core - Loader
4
  *
5
+ * @version 4.1.0
6
  * @since 3.2.4
7
  * @author Algoritmika Ltd.
8
  */
12
  }
13
 
14
  // Debug Mode
15
+ if ( 'yes' === get_option( 'wcj_debug_tools_enabled', 'no' ) && 'yes' === get_option( 'wcj_debuging_enabled', 'no' ) ) {
16
  error_reporting( E_ALL );
17
  }
18
 
includes/core/wcj-modules.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Modules
4
  *
5
- * @version 4.0.0
6
  * @since 3.2.4
7
  * @author Algoritmika Ltd.
8
  */
@@ -10,6 +10,7 @@
10
  if ( ! defined( 'ABSPATH' ) ) exit;
11
 
12
  $wcj_module_files = array(
 
13
  'class-wcj-admin-tools.php',
14
  'class-wcj-price-labels.php',
15
  'class-wcj-call-for-price.php',
2
  /**
3
  * Booster for WooCommerce - Modules
4
  *
5
+ * @version 4.1.0
6
  * @since 3.2.4
7
  * @author Algoritmika Ltd.
8
  */
10
  if ( ! defined( 'ABSPATH' ) ) exit;
11
 
12
  $wcj_module_files = array(
13
+ 'class-wcj-debug-tools.php',
14
  'class-wcj-admin-tools.php',
15
  'class-wcj-price-labels.php',
16
  'class-wcj-call-for-price.php',
includes/emails/class-wc-email-wcj-custom.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * An email sent to recipient list when selected triggers are called.
6
  *
7
- * @version 3.9.0
8
  * @since 2.3.9
9
  * @author Algoritmika Ltd.
10
  * @extends WC_Email
@@ -105,7 +105,7 @@ class WC_Email_WCJ_Custom extends WC_Email {
105
  /**
106
  * trigger.
107
  *
108
- * @version 3.9.0
109
  */
110
  function trigger( $order_id ) {
111
 
@@ -150,6 +150,7 @@ class WC_Email_WCJ_Custom extends WC_Email {
150
  global $post;
151
  $post = ( WCJ_IS_WC_VERSION_BELOW_3 ? $this->object->post : get_post( $order_id ) );
152
  setup_postdata( $post );
 
153
  }
154
 
155
  $this->recipient = do_shortcode( $this->recipient );
4
  *
5
  * An email sent to recipient list when selected triggers are called.
6
  *
7
+ * @version 4.1.0
8
  * @since 2.3.9
9
  * @author Algoritmika Ltd.
10
  * @extends WC_Email
105
  /**
106
  * trigger.
107
  *
108
+ * @version 4.1.0
109
  */
110
  function trigger( $order_id ) {
111
 
150
  global $post;
151
  $post = ( WCJ_IS_WC_VERSION_BELOW_3 ? $this->object->post : get_post( $order_id ) );
152
  setup_postdata( $post );
153
+ $_GET['order_id'] = $order_id;
154
  }
155
 
156
  $this->recipient = do_shortcode( $this->recipient );
includes/functions/wcj-functions-debug.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Functions - Debug
4
  *
5
- * @version 3.5.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -12,10 +12,10 @@ if ( ! function_exists( 'wcj_log' ) ) {
12
  /**
13
  * wcj_log.
14
  *
15
- * @version 3.5.0
16
  */
17
  function wcj_log( $message = '', $do_var_dump = false ) {
18
- if ( ! wcj_is_module_enabled( 'admin_tools' ) || ( 'no' === get_option( 'wcj_logging_enabled', 'no' ) && 'no' === get_option( 'wcj_wc_logging_enabled', 'no' ) ) ) {
19
  return;
20
  }
21
  if ( $do_var_dump ) {
@@ -26,7 +26,7 @@ if ( ! function_exists( 'wcj_log' ) ) {
26
  $message = print_r( $message, true );
27
  }
28
  if ( 'yes' === get_option( 'wcj_logging_enabled', 'no' ) ) {
29
- update_option( 'wcj_log', date( 'Y-m-d H:i:s' ) . ' ' . esc_url( $_SERVER['REQUEST_URI'] ) . ' [' . $message . ']' . '<br>' . get_option( 'wcj_log', '' ) );
30
  }
31
  // WC log
32
  if ( 'yes' === get_option( 'wcj_wc_logging_enabled', 'no' ) && function_exists( 'wc_get_logger' ) ) {
2
  /**
3
  * Booster for WooCommerce - Functions - Debug
4
  *
5
+ * @version 4.1.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
12
  /**
13
  * wcj_log.
14
  *
15
+ * @version 4.1.0
16
  */
17
  function wcj_log( $message = '', $do_var_dump = false ) {
18
+ if ( ! wcj_is_module_enabled( 'debug_tools' ) || ( 'no' === get_option( 'wcj_logging_enabled', 'no' ) && 'no' === get_option( 'wcj_wc_logging_enabled', 'no' ) ) ) {
19
  return;
20
  }
21
  if ( $do_var_dump ) {
26
  $message = print_r( $message, true );
27
  }
28
  if ( 'yes' === get_option( 'wcj_logging_enabled', 'no' ) ) {
29
+ update_option( 'wcj_log', '<span style="color:red;">' . date( 'Y-m-d H:i:s' ) . ' ' . esc_url( $_SERVER['REQUEST_URI'] ) . '</span> <span style="color:orange;">[</span>' . $message . '<span style="color:orange;">]</span>' . '<br>' . get_option( 'wcj_log', '' ) );
30
  }
31
  // WC log
32
  if ( 'yes' === get_option( 'wcj_wc_logging_enabled', 'no' ) && function_exists( 'wc_get_logger' ) ) {
includes/functions/wcj-functions-price-currency.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Functions - Price and Currency
4
  *
5
- * @version 4.0.0
6
  * @since 2.7.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -26,7 +26,7 @@ if ( ! function_exists( 'wcj_get_module_price_hooks_priority' ) ) {
26
  /**
27
  * wcj_get_module_price_hooks_priority.
28
  *
29
- * @version 3.9.0
30
  * @since 3.2.2
31
  * @todo add all corresponding modules
32
  */
@@ -38,6 +38,7 @@ if ( ! function_exists( 'wcj_get_module_price_hooks_priority' ) ) {
38
  'multicurrency_base_price' => PHP_INT_MAX - 10,
39
  'multicurrency' => PHP_INT_MAX - 1,
40
  'price_by_country' => PHP_INT_MAX - 1,
 
41
  'global_discount' => PHP_INT_MAX,
42
  );
43
  return ( 0 != ( $priority = get_option( 'wcj_' . $module_id . '_advanced_price_hooks_priority', 0 ) ) ? $priority : $modules_priorities[ $module_id ] );
2
  /**
3
  * Booster for WooCommerce - Functions - Price and Currency
4
  *
5
+ * @version 4.1.0
6
  * @since 2.7.0
7
  * @author Algoritmika Ltd.
8
  */
26
  /**
27
  * wcj_get_module_price_hooks_priority.
28
  *
29
+ * @version 4.1.0
30
  * @since 3.2.2
31
  * @todo add all corresponding modules
32
  */
38
  'multicurrency_base_price' => PHP_INT_MAX - 10,
39
  'multicurrency' => PHP_INT_MAX - 1,
40
  'price_by_country' => PHP_INT_MAX - 1,
41
+ 'wholesale_price' => PHP_INT_MAX,
42
  'global_discount' => PHP_INT_MAX,
43
  );
44
  return ( 0 != ( $priority = get_option( 'wcj_' . $module_id . '_advanced_price_hooks_priority', 0 ) ) ? $priority : $modules_priorities[ $module_id ] );
includes/functions/wcj-functions-products.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Functions - Products
4
  *
5
- * @version 3.8.0
6
  * @since 2.9.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -340,13 +340,15 @@ if ( ! function_exists( 'wcj_get_products' ) ) {
340
  /**
341
  * wcj_get_products.
342
  *
343
- * @version 3.5.0
 
 
344
  */
345
- function wcj_get_products( $products = array(), $post_status = 'any', $block_size = 256, $add_variations = false ) {
346
  $offset = 0;
347
  while( true ) {
348
  $args = array(
349
- 'post_type' => 'product',
350
  'post_status' => $post_status,
351
  'posts_per_page' => $block_size,
352
  'offset' => $offset,
@@ -359,15 +361,13 @@ if ( ! function_exists( 'wcj_get_products' ) ) {
359
  break;
360
  }
361
  foreach ( $loop->posts as $post_id ) {
362
- $products[ $post_id ] = get_the_title( $post_id ) . ' (ID:' . $post_id . ')';
363
- if ( $add_variations ) {
364
  $_product = wc_get_product( $post_id );
365
  if ( $_product->is_type( 'variable' ) ) {
366
- foreach ( $_product->get_children() as $child_id ) {
367
- $products[ $child_id ] = get_the_title( $child_id ) . ' (ID:' . $child_id . ')';
368
- }
369
  }
370
  }
 
371
  }
372
  $offset += $block_size;
373
  }
@@ -526,7 +526,7 @@ if ( ! function_exists( 'wcj_get_terms' ) ) {
526
  $_terms = get_terms( $_taxonomy, $args );
527
  }
528
  $_terms_options = array();
529
- if ( ! empty( $_terms ) && ! is_wp_error( $_terms ) ){
530
  foreach ( $_terms as $_term ) {
531
  $_terms_options[ $_term->term_id ] = $_term->name;
532
  }
2
  /**
3
  * Booster for WooCommerce - Functions - Products
4
  *
5
+ * @version 4.1.0
6
  * @since 2.9.0
7
  * @author Algoritmika Ltd.
8
  */
340
  /**
341
  * wcj_get_products.
342
  *
343
+ * @version 4.1.0
344
+ * @todo [dev] optimize `if ( $variations_only ) { ... }`
345
+ * @todo [dev] maybe use `wc_get_products()` instead of `WP_Query`
346
  */
347
+ function wcj_get_products( $products = array(), $post_status = 'any', $block_size = 256, $add_variations = false, $variations_only = false ) {
348
  $offset = 0;
349
  while( true ) {
350
  $args = array(
351
+ 'post_type' => ( $add_variations ? array( 'product', 'product_variation' ) : 'product' ),
352
  'post_status' => $post_status,
353
  'posts_per_page' => $block_size,
354
  'offset' => $offset,
361
  break;
362
  }
363
  foreach ( $loop->posts as $post_id ) {
364
+ if ( $variations_only ) {
 
365
  $_product = wc_get_product( $post_id );
366
  if ( $_product->is_type( 'variable' ) ) {
367
+ continue;
 
 
368
  }
369
  }
370
+ $products[ $post_id ] = get_the_title( $post_id ) . ' (ID:' . $post_id . ')';
371
  }
372
  $offset += $block_size;
373
  }
526
  $_terms = get_terms( $_taxonomy, $args );
527
  }
528
  $_terms_options = array();
529
+ if ( ! empty( $_terms ) && ! is_wp_error( $_terms ) ) {
530
  foreach ( $_terms as $_term ) {
531
  $_terms_options[ $_term->term_id ] = $_term->name;
532
  }
includes/input-fields/class-wcj-product-input-fields-core.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Product Input Fields - Core
4
  *
5
- * @version 3.9.1
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -306,7 +306,7 @@ class WCJ_Product_Input_Fields_Core {
306
  /**
307
  * output_custom_input_fields_in_admin_order.
308
  *
309
- * @version 3.1.0
310
  */
311
  function output_custom_input_fields_in_admin_order( $item_id, $item, $_product ) {
312
  if ( null === $_product ) {
@@ -327,7 +327,7 @@ class WCJ_Product_Input_Fields_Core {
327
  if ( 'file' === $type ) {
328
  $the_value = maybe_unserialize( $the_value );
329
  if ( isset( $the_value['name'] ) ) {
330
- $the_value = '<a href="' . add_query_arg( 'wcj_download_file', $item_id . '.' . pathinfo( $the_value['name'], PATHINFO_EXTENSION ) ) . '">' . $the_value['name'] . '</a>';
331
  }
332
  } else {
333
  if ( 'no' === get_option( 'wcj_product_input_fields_make_nicer_name_enabled', 'yes' ) ) {
@@ -842,7 +842,7 @@ class WCJ_Product_Input_Fields_Core {
842
  /**
843
  * add_product_input_fields_to_order_item_meta.
844
  *
845
- * @version 2.5.0
846
  */
847
  function add_product_input_fields_to_order_item_meta( $item_id, $values, $cart_item_key ) {
848
  $total_number = apply_filters( 'booster_option', 1, $this->get_value( 'wcj_' . 'product_input_fields' . '_' . $this->scope . '_total_number', $values['product_id'], 1 ) );
@@ -854,7 +854,7 @@ class WCJ_Product_Input_Fields_Core {
854
  if ( 'file' === $type ) {
855
  $tmp_name = $input_field_value['tmp_name'];
856
  $ext = pathinfo( $input_field_value['name'], PATHINFO_EXTENSION );
857
- $name = $item_id . '.' . $ext;//$input_field_value['name'];
858
  $upload_dir = wcj_get_wcj_uploads_dir( 'input_fields_uploads' );
859
  if ( ! file_exists( $upload_dir ) ) {
860
  mkdir( $upload_dir, 0755, true );
2
  /**
3
  * Booster for WooCommerce - Product Input Fields - Core
4
  *
5
+ * @version 4.1.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
306
  /**
307
  * output_custom_input_fields_in_admin_order.
308
  *
309
+ * @version 4.1.0
310
  */
311
  function output_custom_input_fields_in_admin_order( $item_id, $item, $_product ) {
312
  if ( null === $_product ) {
327
  if ( 'file' === $type ) {
328
  $the_value = maybe_unserialize( $the_value );
329
  if ( isset( $the_value['name'] ) ) {
330
+ $the_value = '<a href="' . add_query_arg( 'wcj_download_file', $item_id . '_' . $i . '.' . pathinfo( $the_value['name'], PATHINFO_EXTENSION ) ) . '">' . $the_value['name'] . '</a>';
331
  }
332
  } else {
333
  if ( 'no' === get_option( 'wcj_product_input_fields_make_nicer_name_enabled', 'yes' ) ) {
842
  /**
843
  * add_product_input_fields_to_order_item_meta.
844
  *
845
+ * @version 4.1.0
846
  */
847
  function add_product_input_fields_to_order_item_meta( $item_id, $values, $cart_item_key ) {
848
  $total_number = apply_filters( 'booster_option', 1, $this->get_value( 'wcj_' . 'product_input_fields' . '_' . $this->scope . '_total_number', $values['product_id'], 1 ) );
854
  if ( 'file' === $type ) {
855
  $tmp_name = $input_field_value['tmp_name'];
856
  $ext = pathinfo( $input_field_value['name'], PATHINFO_EXTENSION );
857
+ $name = $item_id . '_' . $i . '.' . $ext;//$input_field_value['name'];
858
  $upload_dir = wcj_get_wcj_uploads_dir( 'input_fields_uploads' );
859
  if ( ! file_exists( $upload_dir ) ) {
860
  mkdir( $upload_dir, 0755, true );
includes/lib/tcpdf/tcpdf.php CHANGED
@@ -16545,8 +16545,14 @@ class TCPDF {
16545
  // get attributes
16546
  preg_match_all('/([^=\s]*)[\s]*=[\s]*"([^"]*)"/', $element, $attr_array, PREG_PATTERN_ORDER);
16547
  $dom[$key]['attribute'] = array(); // reset attribute array
16548
- while (list($id, $name) = each($attr_array[1])) {
16549
- $dom[$key]['attribute'][strtolower($name)] = $attr_array[2][$id];
 
 
 
 
 
 
16550
  }
16551
  if (!empty($css)) {
16552
  // merge CSS style to current style
@@ -16558,9 +16564,16 @@ class TCPDF {
16558
  // get style attributes
16559
  preg_match_all('/([^;:\s]*):([^;]*)/', $dom[$key]['attribute']['style'], $style_array, PREG_PATTERN_ORDER);
16560
  $dom[$key]['style'] = array(); // reset style attribute array
16561
- while (list($id, $name) = each($style_array[1])) {
16562
- // in case of duplicate attribute the last replace the previous
16563
- $dom[$key]['style'][strtolower($name)] = trim($style_array[2][$id]);
 
 
 
 
 
 
 
16564
  }
16565
  // --- get some style attributes ---
16566
  // text direction
16545
  // get attributes
16546
  preg_match_all('/([^=\s]*)[\s]*=[\s]*"([^"]*)"/', $element, $attr_array, PREG_PATTERN_ORDER);
16547
  $dom[$key]['attribute'] = array(); // reset attribute array
16548
+ if ( version_compare( PHP_VERSION, '7.2.0', '>=' ) ) { // Algoritmika // added in Booster v4.1.0
16549
+ foreach ( $attr_array[1] as $id => $name ) {
16550
+ $dom[$key]['attribute'][strtolower($name)] = $attr_array[2][$id];
16551
+ }
16552
+ } else {
16553
+ while (list($id, $name) = each($attr_array[1])) {
16554
+ $dom[$key]['attribute'][strtolower($name)] = $attr_array[2][$id];
16555
+ }
16556
  }
16557
  if (!empty($css)) {
16558
  // merge CSS style to current style
16564
  // get style attributes
16565
  preg_match_all('/([^;:\s]*):([^;]*)/', $dom[$key]['attribute']['style'], $style_array, PREG_PATTERN_ORDER);
16566
  $dom[$key]['style'] = array(); // reset style attribute array
16567
+ if ( version_compare( PHP_VERSION, '7.2.0', '>=' ) ) { // Algoritmika // added in Booster v4.1.0
16568
+ foreach ( $style_array[1] as $id => $name ) {
16569
+ // in case of duplicate attribute the last replace the previous
16570
+ $dom[$key]['style'][strtolower($name)] = trim($style_array[2][$id]);
16571
+ }
16572
+ } else {
16573
+ while (list($id, $name) = each($style_array[1])) {
16574
+ // in case of duplicate attribute the last replace the previous
16575
+ $dom[$key]['style'][strtolower($name)] = trim($style_array[2][$id]);
16576
+ }
16577
  }
16578
  // --- get some style attributes ---
16579
  // text direction
includes/price-by-country/class-wcj-price-by-country-core.php CHANGED
@@ -43,11 +43,42 @@ class WCJ_Price_by_Country_Core {
43
  */
44
  function init() {
45
  wcj_session_maybe_start();
46
- if ( isset( $_REQUEST[ 'wcj-country' ] ) ) {
47
- wcj_session_set( 'wcj-country', $_REQUEST[ 'wcj-country' ] );
48
  }
49
- if ( isset( $_REQUEST[ 'wcj_country_selector' ] ) ) {
50
- wcj_session_set( 'wcj-country', $_REQUEST[ 'wcj_country_selector' ] );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  }
52
  }
53
 
@@ -228,7 +259,7 @@ class WCJ_Price_by_Country_Core {
228
  /**
229
  * get_customer_country_group_id.
230
  *
231
- * @version 4.0.0
232
  * @todo [feature] (maybe) `( 'cart_and_checkout' === get_option( 'wcj_price_by_country_override_scope', 'all' ) && ( is_cart() || is_checkout() ) ) ||`
233
  */
234
  function get_customer_country_group_id() {
@@ -272,30 +303,46 @@ class WCJ_Price_by_Country_Core {
272
  return null;
273
  }
274
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
275
  // Get the country group id - go through all the groups, first found group is returned
276
- for ( $i = 1; $i <= apply_filters( 'booster_option', 1, get_option( 'wcj_price_by_country_total_groups_number', 1 ) ); $i++ ) {
277
  switch ( get_option( 'wcj_price_by_country_selection', 'comma_list' ) ) {
278
  case 'comma_list':
279
  $country_exchange_rate_group = get_option( 'wcj_price_by_country_exchange_rate_countries_group_' . $i );
280
  $country_exchange_rate_group = str_replace( ' ', '', $country_exchange_rate_group );
281
  $country_exchange_rate_group = explode( ',', $country_exchange_rate_group );
282
- break;
283
  case 'multiselect':
284
  $country_exchange_rate_group = get_option( 'wcj_price_by_country_countries_group_' . $i, '' );
285
- break;
286
  case 'chosen_select':
287
  $country_exchange_rate_group = get_option( 'wcj_price_by_country_countries_group_chosen_select_' . $i, '' );
288
- break;
289
  }
290
  if ( is_array( $country_exchange_rate_group ) && in_array( $country, $country_exchange_rate_group ) ) {
291
- $this->customer_country_group_id = $i;
292
  return $i;
293
  }
294
  }
295
-
296
- // No country group found
297
- $this->customer_country_group_id = -1;
298
- return null;
299
  }
300
 
301
  /**
43
  */
44
  function init() {
45
  wcj_session_maybe_start();
46
+ if ( isset( $_REQUEST['wcj-country'] ) ) {
47
+ wcj_session_set( 'wcj-country', $_REQUEST['wcj-country'] );
48
  }
49
+ if ( isset( $_REQUEST['wcj_country_selector'] ) ) {
50
+ wcj_session_set( 'wcj-country', $_REQUEST['wcj_country_selector'] );
51
+ }
52
+ }
53
+
54
+ /**
55
+ * Gets currency by country.
56
+ *
57
+ * @version 4.1.0
58
+ * @since 4.1.0
59
+ *
60
+ * @param $country
61
+ *
62
+ * @return bool|mixed|void
63
+ */
64
+ function get_currency_by_country( $country ) {
65
+ $group_id = $this->get_country_group_id( $country );
66
+ $country_currency_code = get_option( 'wcj_price_by_country_exchange_rate_currency_group_' . $group_id );
67
+ return ( '' != $country_currency_code ? $country_currency_code : false );
68
+ }
69
+
70
+ /**
71
+ * Saves currency on session by country.
72
+ *
73
+ * @version 4.1.0
74
+ * @since 4.1.0
75
+ *
76
+ * @param $country
77
+ */
78
+ function save_currency_on_session_by_country( $country ) {
79
+ $currency = $this->get_currency_by_country( $country );
80
+ if ( ! empty( $currency ) ) {
81
+ wcj_session_set( 'wcj-currency', $currency );
82
  }
83
  }
84
 
259
  /**
260
  * get_customer_country_group_id.
261
  *
262
+ * @version 4.1.0
263
  * @todo [feature] (maybe) `( 'cart_and_checkout' === get_option( 'wcj_price_by_country_override_scope', 'all' ) && ( is_cart() || is_checkout() ) ) ||`
264
  */
265
  function get_customer_country_group_id() {
303
  return null;
304
  }
305
 
306
+ $this->customer_country_group_id = $this->get_country_group_id( $country );
307
+ if ( - 1 != $this->customer_country_group_id ) {
308
+ return $this->customer_country_group_id;
309
+ }
310
+
311
+ // No country group found
312
+ $this->customer_country_group_id = -1;
313
+ return null;
314
+ }
315
+
316
+ /**
317
+ * Gets country group id.
318
+ *
319
+ * @version 4.1.0
320
+ * @since 4.1.0
321
+ * @param $country
322
+ *
323
+ * @return int
324
+ */
325
+ function get_country_group_id( $country ) {
326
  // Get the country group id - go through all the groups, first found group is returned
327
+ for ( $i = 1; $i <= apply_filters( 'booster_option', 1, get_option( 'wcj_price_by_country_total_groups_number', 1 ) ); $i ++ ) {
328
  switch ( get_option( 'wcj_price_by_country_selection', 'comma_list' ) ) {
329
  case 'comma_list':
330
  $country_exchange_rate_group = get_option( 'wcj_price_by_country_exchange_rate_countries_group_' . $i );
331
  $country_exchange_rate_group = str_replace( ' ', '', $country_exchange_rate_group );
332
  $country_exchange_rate_group = explode( ',', $country_exchange_rate_group );
333
+ break;
334
  case 'multiselect':
335
  $country_exchange_rate_group = get_option( 'wcj_price_by_country_countries_group_' . $i, '' );
336
+ break;
337
  case 'chosen_select':
338
  $country_exchange_rate_group = get_option( 'wcj_price_by_country_countries_group_chosen_select_' . $i, '' );
339
+ break;
340
  }
341
  if ( is_array( $country_exchange_rate_group ) && in_array( $country, $country_exchange_rate_group ) ) {
 
342
  return $i;
343
  }
344
  }
345
+ return - 1;
 
 
 
346
  }
347
 
348
  /**
includes/settings/meta-box/wcj-settings-meta-box-admin-tools.php CHANGED
@@ -5,7 +5,7 @@
5
  * @version 3.5.0
6
  * @since 3.3.0
7
  * @author Algoritmika Ltd.
8
- * @todo (maybe) sort `$products` with available variations listed at the top
9
  */
10
 
11
  if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
5
  * @version 3.5.0
6
  * @since 3.3.0
7
  * @author Algoritmika Ltd.
8
+ * @todo [dev] (maybe) sort `$products` with available variations listed at the top
9
  */
10
 
11
  if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
includes/settings/meta-box/wcj-settings-meta-box-product-images.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings Meta Box - Product Images
4
  *
5
- * @version 2.9.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -16,6 +16,7 @@ return array(
16
  'type' => 'textarea',
17
  'title' => __( 'Replace image with custom HTML on single product page', 'woocommerce-jetpack' ),
18
  'tooltip' => __( 'You can use shortcodes here.', 'woocommerce-jetpack' ),
 
19
  ),
20
  array(
21
  'name' => 'wcj_product_images_meta_custom_on_archives',
@@ -23,6 +24,7 @@ return array(
23
  'type' => 'textarea',
24
  'title' => __( 'Replace image with custom HTML on archives', 'woocommerce-jetpack' ),
25
  'tooltip' => __( 'You can use shortcodes here.', 'woocommerce-jetpack' ),
 
26
  ),
27
  array(
28
  'name' => 'wcj_product_images_hide_image_on_single',
2
  /**
3
  * Booster for WooCommerce - Settings Meta Box - Product Images
4
  *
5
+ * @version 4.1.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
16
  'type' => 'textarea',
17
  'title' => __( 'Replace image with custom HTML on single product page', 'woocommerce-jetpack' ),
18
  'tooltip' => __( 'You can use shortcodes here.', 'woocommerce-jetpack' ),
19
+ 'css' => 'width:100%;height:75px;',
20
  ),
21
  array(
22
  'name' => 'wcj_product_images_meta_custom_on_archives',
24
  'type' => 'textarea',
25
  'title' => __( 'Replace image with custom HTML on archives', 'woocommerce-jetpack' ),
26
  'tooltip' => __( 'You can use shortcodes here.', 'woocommerce-jetpack' ),
27
+ 'css' => 'width:100%;height:75px;',
28
  ),
29
  array(
30
  'name' => 'wcj_product_images_hide_image_on_single',
includes/settings/meta-box/wcj-settings-meta-box-related-products.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings Meta Box - Related Products
4
  *
5
- * @version 3.9.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -12,13 +12,14 @@ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
12
  $product_id = get_the_ID();
13
  $products = wcj_get_products( array(), 'publish' );
14
  $is_chosen_select = ( 'chosen_select' === get_option( 'wcj_product_info_related_products_per_product_box_type', 'chosen_select' ) );
 
15
  unset( $products[ $product_id ] );
16
  $options = array(
17
  array(
18
  'title' => __( 'Enable', 'woocommerce-jetpack' ),
19
  'tooltip' => __( 'If enabled and no products selected - will hide related products section on frontend for current product.', 'woocommerce-jetpack' ),
20
  'name' => 'wcj_product_info_related_products_enabled',
21
- 'default' => 'no',
22
  'type' => 'select',
23
  'options' => array(
24
  'no' => __( 'No', 'woocommerce-jetpack' ),
2
  /**
3
  * Booster for WooCommerce - Settings Meta Box - Related Products
4
  *
5
+ * @version 4.1.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
12
  $product_id = get_the_ID();
13
  $products = wcj_get_products( array(), 'publish' );
14
  $is_chosen_select = ( 'chosen_select' === get_option( 'wcj_product_info_related_products_per_product_box_type', 'chosen_select' ) );
15
+ $default_value = get_option( 'wcj_product_info_related_products_per_product_cmb_default', 'no' );
16
  unset( $products[ $product_id ] );
17
  $options = array(
18
  array(
19
  'title' => __( 'Enable', 'woocommerce-jetpack' ),
20
  'tooltip' => __( 'If enabled and no products selected - will hide related products section on frontend for current product.', 'woocommerce-jetpack' ),
21
  'name' => 'wcj_product_info_related_products_enabled',
22
+ 'default' => $default_value,
23
  'type' => 'select',
24
  'options' => array(
25
  'no' => __( 'No', 'woocommerce-jetpack' ),
includes/settings/wcj-settings-admin-bar.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Admin Bar
4
  *
5
- * @version 3.1.0
6
  * @since 2.9.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -17,21 +17,36 @@ return array(
17
  ),
18
  array(
19
  'title' => __( '"WooCommerce" Admin Bar', 'woocommerce-jetpack' ),
20
- 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
21
  'id' => 'wcj_admin_bar_wc_enabled',
22
  'default' => 'yes',
23
  'type' => 'checkbox',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  ),
25
  array(
26
  'title' => __( '"Booster" Admin Bar', 'woocommerce-jetpack' ),
27
- 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
28
  'id' => 'wcj_admin_bar_booster_enabled',
29
  'default' => 'yes',
30
  'type' => 'checkbox',
31
  ),
32
  array(
33
  'title' => __( '"Booster: Active" Admin Bar', 'woocommerce-jetpack' ),
34
- 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
35
  'id' => 'wcj_admin_bar_booster_active_enabled',
36
  'default' => 'yes',
37
  'type' => 'checkbox',
2
  /**
3
  * Booster for WooCommerce - Settings - Admin Bar
4
  *
5
+ * @version 4.1.0
6
  * @since 2.9.0
7
  * @author Algoritmika Ltd.
8
  */
17
  ),
18
  array(
19
  'title' => __( '"WooCommerce" Admin Bar', 'woocommerce-jetpack' ),
20
+ 'desc' => '<strong>' . __( 'Enable', 'woocommerce-jetpack' ) . '</strong>',
21
  'id' => 'wcj_admin_bar_wc_enabled',
22
  'default' => 'yes',
23
  'type' => 'checkbox',
24
+ 'checkboxgroup' => 'start',
25
+ ),
26
+ array(
27
+ 'desc' => __( 'List product categories in "WooCommerce > Products > Categories"', 'woocommerce-jetpack' ),
28
+ 'id' => 'wcj_admin_bar_wc_list_cats',
29
+ 'default' => 'no',
30
+ 'type' => 'checkbox',
31
+ 'checkboxgroup' => '',
32
+ ),
33
+ array(
34
+ 'desc' => __( 'List product tags in "WooCommerce > Products > Tags"', 'woocommerce-jetpack' ),
35
+ 'id' => 'wcj_admin_bar_wc_list_tags',
36
+ 'default' => 'no',
37
+ 'type' => 'checkbox',
38
+ 'checkboxgroup' => 'end',
39
  ),
40
  array(
41
  'title' => __( '"Booster" Admin Bar', 'woocommerce-jetpack' ),
42
+ 'desc' => '<strong>' . __( 'Enable', 'woocommerce-jetpack' ) . '</strong>',
43
  'id' => 'wcj_admin_bar_booster_enabled',
44
  'default' => 'yes',
45
  'type' => 'checkbox',
46
  ),
47
  array(
48
  'title' => __( '"Booster: Active" Admin Bar', 'woocommerce-jetpack' ),
49
+ 'desc' => '<strong>' . __( 'Enable', 'woocommerce-jetpack' ) . '</strong>',
50
  'id' => 'wcj_admin_bar_booster_active_enabled',
51
  'default' => 'yes',
52
  'type' => 'checkbox',
includes/settings/wcj-settings-admin-tools.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Admin Tools
4
  *
5
- * @version 4.0.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -13,10 +13,12 @@ return array(
13
  array(
14
  'title' => __( 'Admin Tools Options', 'woocommerce-jetpack' ),
15
  'type' => 'title',
16
- 'id' => 'wcj_admin_tools_module_options',
17
  ),
18
  array(
19
  'title' => __( 'Show Booster Menus Only to Admin', 'woocommerce-jetpack' ),
 
 
20
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
21
  'id' => 'wcj_admin_tools_show_menus_to_admin_only',
22
  'default' => 'no',
@@ -40,84 +42,66 @@ return array(
40
  'type' => 'checkbox',
41
  ),
42
  array(
43
- 'title' => __( 'PHP Memory Limit', 'woocommerce-jetpack' ),
44
- 'desc' => __( 'megabytes.', 'woocommerce-jetpack' ),
45
- 'desc_tip' => __( 'Set zero to disable.', 'woocommerce-jetpack' ) . $this->current_php_memory_limit,
46
- 'id' => 'wcj_admin_tools_php_memory_limit',
47
- 'default' => 0,
48
- 'type' => 'number',
49
- 'custom_attributes' => array( 'min' => 0 ),
50
  ),
51
  array(
52
- 'title' => __( 'PHP Time Limit', 'woocommerce-jetpack' ),
53
- 'desc' => __( 'seconds.', 'woocommerce-jetpack' ),
54
- 'desc_tip' => __( 'Set zero to disable.', 'woocommerce-jetpack' ) . $this->current_php_time_limit,
55
- 'id' => 'wcj_admin_tools_php_time_limit',
56
- 'default' => 0,
57
- 'type' => 'number',
58
- 'custom_attributes' => array( 'min' => 0 ),
59
  ),
60
  array(
61
  'title' => __( 'Show Order Meta', 'woocommerce-jetpack' ),
 
62
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
63
  'id' => 'wcj_admin_tools_show_order_meta_enabled',
64
  'default' => 'no',
65
  'type' => 'checkbox',
66
  ),
67
- array(
68
- 'title' => __( 'Show Product Meta', 'woocommerce-jetpack' ),
69
- 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
70
- 'id' => 'wcj_admin_tools_show_product_meta_enabled',
71
- 'default' => 'no',
72
- 'type' => 'checkbox',
73
- ),
74
- array(
75
- 'title' => __( 'Show Variable Product Pricing Table', 'woocommerce-jetpack' ),
76
- 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
77
- 'id' => 'wcj_admin_tools_variable_product_pricing_table_enabled',
78
- 'default' => 'no',
79
- 'type' => 'checkbox',
80
- ),
81
  array(
82
  'type' => 'sectionend',
83
- 'id' => 'wcj_admin_tools_module_options',
84
  ),
85
  array(
86
- 'title' => __( 'Debug Tools Options', 'woocommerce-jetpack' ),
87
  'type' => 'title',
88
- 'id' => 'wcj_debug_tools_options',
89
  ),
90
  array(
91
- 'title' => __( 'Log', 'woocommerce-jetpack' ),
 
92
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
93
- 'id' => 'wcj_logging_enabled',
94
  'default' => 'no',
95
  'type' => 'checkbox',
96
  ),
97
  array(
98
- 'title' => __( 'WooCommerce Log', 'woocommerce-jetpack' ),
 
99
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
100
- 'id' => 'wcj_wc_logging_enabled',
101
  'default' => 'no',
102
  'type' => 'checkbox',
103
  ),
104
  array(
105
- 'title' => __( 'Debug', 'woocommerce-jetpack' ),
 
106
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
107
- 'id' => 'wcj_debuging_enabled',
108
  'default' => 'no',
109
  'type' => 'checkbox',
110
  ),
111
  array(
112
- 'title' => __( 'System Info', 'woocommerce-jetpack' ),
113
- 'id' => 'wcj_admin_tools_system_info',
114
- 'default' => '',
115
- 'type' => 'custom_link',
116
- 'link' => '<pre>' . wcj_get_table_html( $this->get_system_info_table_array(),
117
- array( 'columns_styles' => array( 'padding:0;', 'padding:0;' ), 'table_heading_type' => 'vertical' ) ) . '</pre>',
 
118
  ),
119
  array(
120
  'type' => 'sectionend',
121
- 'id' => 'wcj_debug_tools_options',
122
  ),
123
  );
2
  /**
3
  * Booster for WooCommerce - Settings - Admin Tools
4
  *
5
+ * @version 4.1.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
13
  array(
14
  'title' => __( 'Admin Tools Options', 'woocommerce-jetpack' ),
15
  'type' => 'title',
16
+ 'id' => 'wcj_admin_tools_general_options',
17
  ),
18
  array(
19
  'title' => __( 'Show Booster Menus Only to Admin', 'woocommerce-jetpack' ),
20
+ 'desc_tip' => sprintf( __( 'Will require %s capability to see Booster menus (instead of %s capability).', 'woocommerce-jetpack' ),
21
+ '<code>manage_options</code>', '<code>manage_woocommerce</code>' ),
22
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
23
  'id' => 'wcj_admin_tools_show_menus_to_admin_only',
24
  'default' => 'no',
42
  'type' => 'checkbox',
43
  ),
44
  array(
45
+ 'type' => 'sectionend',
46
+ 'id' => 'wcj_admin_tools_general_options',
 
 
 
 
 
47
  ),
48
  array(
49
+ 'title' => __( 'Orders Options', 'woocommerce-jetpack' ),
50
+ 'type' => 'title',
51
+ 'id' => 'wcj_admin_tools_orders_options',
 
 
 
 
52
  ),
53
  array(
54
  'title' => __( 'Show Order Meta', 'woocommerce-jetpack' ),
55
+ 'desc_tip' => __( 'Will show order meta table in meta box.', 'woocommerce-jetpack' ),
56
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
57
  'id' => 'wcj_admin_tools_show_order_meta_enabled',
58
  'default' => 'no',
59
  'type' => 'checkbox',
60
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
  array(
62
  'type' => 'sectionend',
63
+ 'id' => 'wcj_admin_tools_orders_options',
64
  ),
65
  array(
66
+ 'title' => __( 'Products Options', 'woocommerce-jetpack' ),
67
  'type' => 'title',
68
+ 'id' => 'wcj_admin_tools_products_options',
69
  ),
70
  array(
71
+ 'title' => __( 'Show Product Meta', 'woocommerce-jetpack' ),
72
+ 'desc_tip' => __( 'Will show product meta table in meta box.', 'woocommerce-jetpack' ),
73
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
74
+ 'id' => 'wcj_admin_tools_show_product_meta_enabled',
75
  'default' => 'no',
76
  'type' => 'checkbox',
77
  ),
78
  array(
79
+ 'title' => __( 'Show Variable Product Pricing Table', 'woocommerce-jetpack' ),
80
+ 'desc_tip' => __( 'Will allow to set all variations prices in single meta box.', 'woocommerce-jetpack' ),
81
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
82
+ 'id' => 'wcj_admin_tools_variable_product_pricing_table_enabled',
83
  'default' => 'no',
84
  'type' => 'checkbox',
85
  ),
86
  array(
87
+ 'title' => __( 'Product Revisions', 'woocommerce-jetpack' ),
88
+ 'desc_tip' => __( 'Will enable product revisions.', 'woocommerce-jetpack' ),
89
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
90
+ 'id' => 'wcj_product_revisions_enabled',
91
  'default' => 'no',
92
  'type' => 'checkbox',
93
  ),
94
  array(
95
+ 'title' => __( 'JSON Product Search Limit', 'woocommerce-jetpack' ),
96
+ 'desc_tip' => __( 'This will set the maximum number of products to return on JSON search (e.g. when setting Upsells and Cross-sells on product edit page).', 'woocommerce-jetpack' ) . ' ' .
97
+ __( 'Ignored if set to zero.', 'woocommerce-jetpack' ),
98
+ 'id' => 'wcj_product_json_search_limit',
99
+ 'default' => 0,
100
+ 'type' => 'number',
101
+ 'custom_attributes' => array( 'min' => 0 ),
102
  ),
103
  array(
104
  'type' => 'sectionend',
105
+ 'id' => 'wcj_admin_tools_products_options',
106
  ),
107
  );
includes/settings/wcj-settings-checkout-custom-info.php CHANGED
@@ -5,6 +5,7 @@
5
  * @version 3.3.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
 
8
  */
9
 
10
  if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
5
  * @version 3.3.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
+ * @todo [dev] clean up
9
  */
10
 
11
  if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
includes/settings/wcj-settings-checkout-customization.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Checkout Customization
4
  *
5
- * @version 3.8.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -186,4 +186,54 @@ return array(
186
  'type' => 'sectionend',
187
  'id' => 'wcj_checkout_customization_checkout_login_message_options',
188
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
189
  );
2
  /**
3
  * Booster for WooCommerce - Settings - Checkout Customization
4
  *
5
+ * @version 4.1.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
186
  'type' => 'sectionend',
187
  'id' => 'wcj_checkout_customization_checkout_login_message_options',
188
  ),
189
+ array(
190
+ 'title' => __( 'Recalculate Checkout', 'woocommerce-jetpack' ),
191
+ 'desc' => __( 'Recalculate checkout right after the default calculation has been requested.', 'woocommerce-jetpack' ),
192
+ 'type' => 'title',
193
+ 'id' => 'wcj_checkout_recalculate_checkout_update_options',
194
+ ),
195
+ array(
196
+ 'title' => __( 'Recalculate Checkout', 'woocommerce-jetpack' ),
197
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
198
+ 'id' => 'wcj_checkout_recalculate_checkout_update_enable',
199
+ 'default' => 'no',
200
+ 'type' => 'checkbox',
201
+ ),
202
+ array(
203
+ 'title' => __( 'Fields', 'woocommerce-jetpack' ),
204
+ 'desc' => __( 'Required fields that need to be changed in order to recalculate checkout.', 'woocommerce-jetpack' ),
205
+ 'desc_tip' => __( 'Use CSS selector syntax.', 'woocommerce-jetpack' ),
206
+ 'id' => 'wcj_checkout_recalculate_checkout_update_fields',
207
+ 'default' => '#billing_country, #shipping_country',
208
+ 'type' => 'text',
209
+ ),
210
+ array(
211
+ 'type' => 'sectionend',
212
+ 'id' => 'wcj_checkout_recalculate_checkout_update_options',
213
+ ),
214
+ array(
215
+ 'title' => __( 'Force Checkout Update', 'woocommerce-jetpack' ),
216
+ 'desc' => __( 'Update checkout when some field have its value changed.', 'woocommerce-jetpack' ),
217
+ 'type' => 'title',
218
+ 'id' => 'wcj_checkout_force_checkout_update_options',
219
+ ),
220
+ array(
221
+ 'title' => __( 'Force Checkout Update', 'woocommerce-jetpack' ),
222
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
223
+ 'id' => 'wcj_checkout_force_checkout_update_enable',
224
+ 'default' => 'no',
225
+ 'type' => 'checkbox',
226
+ ),
227
+ array(
228
+ 'title' => __( 'Fields', 'woocommerce-jetpack' ),
229
+ 'desc' => __( 'Fields that need to be changed in order to update checkout.', 'woocommerce-jetpack' ),
230
+ 'desc_tip' => __( 'Use CSS selector syntax.', 'woocommerce-jetpack' ),
231
+ 'id' => 'wcj_checkout_force_checkout_update_fields',
232
+ 'default' => '',
233
+ 'type' => 'text',
234
+ ),
235
+ array(
236
+ 'type' => 'sectionend',
237
+ 'id' => 'wcj_checkout_force_checkout_update_options',
238
+ ),
239
  );
includes/settings/wcj-settings-debug-tools.php ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Booster for WooCommerce - Settings - Debug Tools
4
+ *
5
+ * @version 4.1.0
6
+ * @since 4.1.0
7
+ * @author Algoritmika Ltd.
8
+ */
9
+
10
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
11
+
12
+ return array(
13
+ array(
14
+ 'title' => __( 'Debug Tools Options', 'woocommerce-jetpack' ),
15
+ 'type' => 'title',
16
+ 'id' => 'wcj_debug_tools_options',
17
+ ),
18
+ array(
19
+ 'title' => __( 'Log', 'woocommerce-jetpack' ),
20
+ 'desc_tip' => __( 'Enables logging to Booster log.', 'woocommerce-jetpack' ),
21
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
22
+ 'id' => 'wcj_logging_enabled',
23
+ 'default' => 'no',
24
+ 'type' => 'checkbox',
25
+ ),
26
+ array(
27
+ 'title' => __( 'WooCommerce Log', 'woocommerce-jetpack' ),
28
+ 'desc_tip' => __( 'Enables logging to WooCommerce log.', 'woocommerce-jetpack' ),
29
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
30
+ 'id' => 'wcj_wc_logging_enabled',
31
+ 'default' => 'no',
32
+ 'type' => 'checkbox',
33
+ ),
34
+ array(
35
+ 'title' => __( 'Debug', 'woocommerce-jetpack' ),
36
+ 'desc_tip' => __( 'Enables debug mode.', 'woocommerce-jetpack' ),
37
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
38
+ 'id' => 'wcj_debuging_enabled',
39
+ 'default' => 'no',
40
+ 'type' => 'checkbox',
41
+ ),
42
+ array(
43
+ 'title' => __( 'System Info', 'woocommerce-jetpack' ),
44
+ 'id' => 'wcj_debug_tools_system_info',
45
+ 'default' => '',
46
+ 'type' => 'custom_link',
47
+ 'link' => '<a href="' . add_query_arg( 'wcj_debug', true ) . '">' . __( 'Show extended info', 'woocommerce-jetpack' ) . '</a>' .
48
+ '<pre style="background-color: white; padding: 5px;">' . wcj_get_table_html( $this->get_system_info_table_array(),
49
+ array( 'columns_styles' => array( 'padding:0;', 'padding:0;' ), 'table_heading_type' => 'vertical' ) ) . '</pre>',
50
+ ),
51
+ array(
52
+ 'type' => 'sectionend',
53
+ 'id' => 'wcj_debug_tools_options',
54
+ ),
55
+ );
includes/settings/wcj-settings-general.php CHANGED
@@ -2,10 +2,9 @@
2
  /**
3
  * Booster for WooCommerce - Settings - General
4
  *
5
- * @version 3.8.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
- * @todo add link to Booster's shortcodes list
9
  */
10
 
11
  if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
@@ -17,7 +16,7 @@ $settings = array(
17
  'id' => 'wcj_general_shortcodes_options',
18
  ),
19
  array(
20
- 'title' => __( 'Enable All Shortcodes in WordPress Text Widgets', 'woocommerce-jetpack' ),
21
  'desc_tip' => __( 'This will enable all (including non Booster\'s) shortcodes in WordPress text widgets.', 'woocommerce-jetpack' ),
22
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
23
  'id' => 'wcj_general_shortcodes_in_text_widgets_enabled',
@@ -25,8 +24,9 @@ $settings = array(
25
  'type' => 'checkbox',
26
  ),
27
  array(
28
- 'title' => __( 'Disable Booster\'s Shortcodes', 'woocommerce-jetpack' ),
29
- 'desc_tip' => __( 'Disable all Booster\'s shortcodes (for memory saving).', 'woocommerce-jetpack' ),
 
30
  'desc' => __( 'Disable', 'woocommerce-jetpack' ),
31
  'id' => 'wcj_general_shortcodes_disable_booster_shortcodes',
32
  'default' => 'no',
@@ -36,29 +36,15 @@ $settings = array(
36
  'type' => 'sectionend',
37
  'id' => 'wcj_general_shortcodes_options',
38
  ),
39
- array(
40
- 'title' => __( 'Product Revisions', 'woocommerce-jetpack' ),
41
- 'type' => 'title',
42
- 'id' => 'wcj_product_revisions_options',
43
- ),
44
- array(
45
- 'title' => __( 'Product Revisions', 'woocommerce-jetpack' ),
46
- 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
47
- 'id' => 'wcj_product_revisions_enabled',
48
- 'default' => 'no',
49
- 'type' => 'checkbox',
50
- ),
51
- array(
52
- 'type' => 'sectionend',
53
- 'id' => 'wcj_product_revisions_options',
54
- ),
55
  array(
56
  'title' => __( 'Advanced Options', 'woocommerce-jetpack' ),
57
  'type' => 'title',
58
  'id' => 'wcj_general_advanced_options',
59
  ),
60
  array(
61
- 'title' => __( 'Recalculate Cart Totals on Every Page Load', 'woocommerce-jetpack' ),
 
 
62
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
63
  'id' => 'wcj_general_advanced_recalculate_cart_totals',
64
  'default' => 'no',
@@ -75,35 +61,39 @@ $settings = array(
75
  ),
76
  ),
77
  array(
78
- 'title' => __( 'Disable Loading Datepicker/Weekpicker CSS', 'woocommerce-jetpack' ),
 
79
  'desc' => __( 'Disable', 'woocommerce-jetpack' ),
80
  'id' => 'wcj_general_advanced_disable_datepicker_css',
81
  'default' => 'no',
82
  'type' => 'checkbox',
83
  ),
84
  array(
85
- 'title' => __( 'Datepicker/Weekpicker CSS', 'woocommerce-jetpack' ),
86
  'id' => 'wcj_general_advanced_datepicker_css',
87
  'default' => '//ajax.googleapis.com/ajax/libs/jqueryui/1.9.0/themes/base/jquery-ui.css',
88
  'type' => 'text',
89
  'css' => 'width:66%;min-width:300px;',
90
  ),
91
  array(
92
- 'title' => __( 'Disable Loading Datepicker/Weekpicker JavaScript', 'woocommerce-jetpack' ),
 
93
  'desc' => __( 'Disable', 'woocommerce-jetpack' ),
94
  'id' => 'wcj_general_advanced_disable_datepicker_js',
95
  'default' => 'no',
96
  'type' => 'checkbox',
97
  ),
98
  array(
99
- 'title' => __( 'Disable Loading Timepicker CSS', 'woocommerce-jetpack' ),
 
100
  'desc' => __( 'Disable', 'woocommerce-jetpack' ),
101
  'id' => 'wcj_general_advanced_disable_timepicker_css',
102
  'default' => 'no',
103
  'type' => 'checkbox',
104
  ),
105
  array(
106
- 'title' => __( 'Disable Loading Timepicker JavaScript', 'woocommerce-jetpack' ),
 
107
  'desc' => __( 'Disable', 'woocommerce-jetpack' ),
108
  'id' => 'wcj_general_advanced_disable_timepicker_js',
109
  'default' => 'no',
@@ -190,5 +180,32 @@ $settings = array(
190
  'type' => 'sectionend',
191
  'id' => 'wcj_general_user_role_changer_options',
192
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
193
  );
194
  return $settings;
2
  /**
3
  * Booster for WooCommerce - Settings - General
4
  *
5
+ * @version 4.1.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
 
8
  */
9
 
10
  if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
16
  'id' => 'wcj_general_shortcodes_options',
17
  ),
18
  array(
19
+ 'title' => __( 'Shortcodes in WordPress Text Widgets', 'woocommerce-jetpack' ),
20
  'desc_tip' => __( 'This will enable all (including non Booster\'s) shortcodes in WordPress text widgets.', 'woocommerce-jetpack' ),
21
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
22
  'id' => 'wcj_general_shortcodes_in_text_widgets_enabled',
24
  'type' => 'checkbox',
25
  ),
26
  array(
27
+ 'title' => __( 'Booster\'s Shortcodes', 'woocommerce-jetpack' ),
28
+ 'desc_tip' => sprintf( __( 'Disable all <a href="%s" target="_blank">Booster\'s shortcodes</a> (for memory saving).', 'woocommerce-jetpack' ),
29
+ 'https://booster.io/shortcodes/' ),
30
  'desc' => __( 'Disable', 'woocommerce-jetpack' ),
31
  'id' => 'wcj_general_shortcodes_disable_booster_shortcodes',
32
  'default' => 'no',
36
  'type' => 'sectionend',
37
  'id' => 'wcj_general_shortcodes_options',
38
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  array(
40
  'title' => __( 'Advanced Options', 'woocommerce-jetpack' ),
41
  'type' => 'title',
42
  'id' => 'wcj_general_advanced_options',
43
  ),
44
  array(
45
+ 'title' => __( 'Recalculate Cart Totals', 'woocommerce-jetpack' ),
46
+ 'desc_tip' => __( 'Will recalculate cart totals on every page load.', 'woocommerce-jetpack' ) . ' ' .
47
+ __( 'This may solve multicurrency issues with wrong currency symbol in mini-cart.', 'woocommerce-jetpack' ),
48
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
49
  'id' => 'wcj_general_advanced_recalculate_cart_totals',
50
  'default' => 'no',
61
  ),
62
  ),
63
  array(
64
+ 'title' => __( 'Datepicker/Weekpicker CSS Loading', 'woocommerce-jetpack' ),
65
+ 'desc_tip' => __( 'Disables datepicker/weekpicker CSS loading.', 'woocommerce-jetpack' ),
66
  'desc' => __( 'Disable', 'woocommerce-jetpack' ),
67
  'id' => 'wcj_general_advanced_disable_datepicker_css',
68
  'default' => 'no',
69
  'type' => 'checkbox',
70
  ),
71
  array(
72
+ 'title' => __( 'Datepicker/Weekpicker CSS Source', 'woocommerce-jetpack' ),
73
  'id' => 'wcj_general_advanced_datepicker_css',
74
  'default' => '//ajax.googleapis.com/ajax/libs/jqueryui/1.9.0/themes/base/jquery-ui.css',
75
  'type' => 'text',
76
  'css' => 'width:66%;min-width:300px;',
77
  ),
78
  array(
79
+ 'title' => __( 'Datepicker/Weekpicker JavaScript Loading', 'woocommerce-jetpack' ),
80
+ 'desc_tip' => __( 'Disables datepicker/weekpicker JavaScript loading.', 'woocommerce-jetpack' ),
81
  'desc' => __( 'Disable', 'woocommerce-jetpack' ),
82
  'id' => 'wcj_general_advanced_disable_datepicker_js',
83
  'default' => 'no',
84
  'type' => 'checkbox',
85
  ),
86
  array(
87
+ 'title' => __( 'Timepicker CSS Loading', 'woocommerce-jetpack' ),
88
+ 'desc_tip' => __( 'Disables timepicker CSS loading.', 'woocommerce-jetpack' ),
89
  'desc' => __( 'Disable', 'woocommerce-jetpack' ),
90
  'id' => 'wcj_general_advanced_disable_timepicker_css',
91
  'default' => 'no',
92
  'type' => 'checkbox',
93
  ),
94
  array(
95
+ 'title' => __( 'Timepicker JavaScript Loading', 'woocommerce-jetpack' ),
96
+ 'desc_tip' => __( 'Disables timepicker JavaScript loading.', 'woocommerce-jetpack' ),
97
  'desc' => __( 'Disable', 'woocommerce-jetpack' ),
98
  'id' => 'wcj_general_advanced_disable_timepicker_js',
99
  'default' => 'no',
180
  'type' => 'sectionend',
181
  'id' => 'wcj_general_user_role_changer_options',
182
  ),
183
+ array(
184
+ 'title' => __( 'PHP Options', 'woocommerce-jetpack' ),
185
+ 'type' => 'title',
186
+ 'id' => 'wcj_admin_tools_php_options',
187
+ ),
188
+ array(
189
+ 'title' => __( 'PHP Memory Limit', 'woocommerce-jetpack' ),
190
+ 'desc' => __( 'megabytes.', 'woocommerce-jetpack' ),
191
+ 'desc_tip' => __( 'Set zero to disable.', 'woocommerce-jetpack' ) . $this->current_php_memory_limit,
192
+ 'id' => 'wcj_admin_tools_php_memory_limit',
193
+ 'default' => 0,
194
+ 'type' => 'number',
195
+ 'custom_attributes' => array( 'min' => 0 ),
196
+ ),
197
+ array(
198
+ 'title' => __( 'PHP Time Limit', 'woocommerce-jetpack' ),
199
+ 'desc' => __( 'seconds.', 'woocommerce-jetpack' ),
200
+ 'desc_tip' => __( 'Set zero to disable.', 'woocommerce-jetpack' ) . $this->current_php_time_limit,
201
+ 'id' => 'wcj_admin_tools_php_time_limit',
202
+ 'default' => 0,
203
+ 'type' => 'number',
204
+ 'custom_attributes' => array( 'min' => 0 ),
205
+ ),
206
+ array(
207
+ 'type' => 'sectionend',
208
+ 'id' => 'wcj_admin_tools_php_options',
209
+ ),
210
  );
211
  return $settings;
includes/settings/wcj-settings-max-products-per-user.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Max Products per User
4
  *
5
- * @version 3.5.0
6
  * @since 3.5.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -56,6 +56,17 @@ return array(
56
  'type' => 'title',
57
  'id' => 'wcj_max_products_per_user_general_options',
58
  ),
 
 
 
 
 
 
 
 
 
 
 
59
  array(
60
  'title' => __( 'Customer Message', 'woocommerce-jetpack' ),
61
  'desc' => wcj_message_replaced_values( array( '%max_qty%', '%product_title%', '%qty_already_bought%', '%remaining_qty%' ) ),
2
  /**
3
  * Booster for WooCommerce - Settings - Max Products per User
4
  *
5
+ * @version 4.1.0
6
  * @since 3.5.0
7
  * @author Algoritmika Ltd.
8
  */
56
  'type' => 'title',
57
  'id' => 'wcj_max_products_per_user_general_options',
58
  ),
59
+ array(
60
+ 'title' => __( 'Order Status', 'woocommerce-jetpack' ),
61
+ 'desc_tip' => __( 'This sets when (i.e. on which order status) users\' quantities should be updated.', 'woocommerce-jetpack' ) . ' ' .
62
+ __( 'You can select multiple order status here - quantities will be updated only once, on whichever status is triggered first.', 'woocommerce-jetpack' ) . ' ' .
63
+ __( 'If no status are selected - "Completed" order status is used.', 'woocommerce-jetpack' ),
64
+ 'id' => 'wcj_max_products_per_user_order_status',
65
+ 'default' => array( 'wc-completed' ),
66
+ 'options' => wcj_get_order_statuses( false ),
67
+ 'type' => 'multiselect',
68
+ 'class' => 'chosen_select',
69
+ ),
70
  array(
71
  'title' => __( 'Customer Message', 'woocommerce-jetpack' ),
72
  'desc' => wcj_message_replaced_values( array( '%max_qty%', '%product_title%', '%qty_already_bought%', '%remaining_qty%' ) ),
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 3.8.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -15,118 +15,127 @@ $available_gateways = WC()->payment_gateways->payment_gateways();
15
  foreach ( $available_gateways as $key => $gateway ) {
16
  $settings = array_merge( $settings, array(
17
  array(
18
- 'title' => $gateway->title . ( $gateway->is_available() ? ' &#10003;' : '' ),
19
- 'type' => 'title',
20
- 'id' => "wcj_gateways_fees_options[{$key}]",
21
  ),
22
  array(
23
- 'title' => __( 'Fee (or Discount) Title', 'woocommerce-jetpack' ),
24
- 'desc_tip' => __( 'Fee (or discount) title to show to customer.', 'woocommerce-jetpack' ) . ' ' . __( 'Leave blank to disable.', 'woocommerce-jetpack' ),
25
- 'id' => "wcj_gateways_fees_text[{$key}]",
26
- 'default' => '',
27
- 'type' => 'text',
 
28
  ),
29
  array(
30
- 'title' => __( 'Fee (or Discount) Type', 'woocommerce-jetpack' ),
31
- 'desc_tip' => __( 'Percent or fixed value.', 'woocommerce-jetpack' ),
32
- 'id' => "wcj_gateways_fees_type[{$key}]",
33
- 'default' => 'fixed',
34
- 'type' => 'select',
35
- 'options' => array(
36
  'fixed' => __( 'Fixed', 'woocommerce-jetpack' ),
37
  'percent' => __( 'Percent', 'woocommerce-jetpack' ),
38
  ),
39
  ),
40
  array(
41
- 'title' => __( 'Fee (or Discount) Value', 'woocommerce-jetpack' ),
42
- 'desc_tip' => __( 'The value. For discount enter a negative number.', 'woocommerce-jetpack' ),
43
- 'id' => "wcj_gateways_fees_value[{$key}]",
44
- 'default' => 0,
45
- 'type' => 'number',
46
  'custom_attributes' => array( 'step' => '0.01' ),
47
  ),
48
  array(
49
- 'title' => __( 'Minimum Cart Amount', 'woocommerce-jetpack' ),
50
- 'desc_tip' => __( 'Minimum cart amount for adding the fee (or discount).', 'woocommerce-jetpack' ) . ' ' . __( 'Set 0 to disable.', 'woocommerce-jetpack' ),
51
- 'id' => "wcj_gateways_fees_min_cart_amount[{$key}]",
52
- 'default' => 0,
53
- 'type' => 'number',
54
  'custom_attributes' => array( 'step' => '0.01', 'min' => '0' ),
55
  ),
56
  array(
57
- 'title' => __( 'Maximum Cart Amount', 'woocommerce-jetpack' ),
58
- 'desc_tip' => __( 'Maximum cart amount for adding the fee (or discount).', 'woocommerce-jetpack' ) . ' ' . __( 'Set 0 to disable.', 'woocommerce-jetpack' ),
59
- 'id' => "wcj_gateways_fees_max_cart_amount[{$key}]",
60
- 'default' => 0,
61
- 'type' => 'number',
62
  'custom_attributes' => array( 'step' => '0.01', 'min' => '0' ),
63
  ),
64
  array(
65
- 'title' => __( 'Rounding', 'woocommerce-jetpack' ),
66
- 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
67
- 'desc_tip' => __( 'Round the fee (or discount) value before adding to the cart.', 'woocommerce-jetpack' ),
68
- 'id' => "wcj_gateways_fees_round[{$key}]",
69
- 'default' => 'no',
70
- 'type' => 'checkbox',
71
  ),
72
  array(
73
- 'desc' => __( 'Number of decimals', 'woocommerce-jetpack' ),
74
- 'desc_tip' => __( 'If rounding is enabled, set precision (i.e. number of decimals) here.', 'woocommerce-jetpack' ),
75
- 'id' => "wcj_gateways_fees_round_precision[{$key}]",
76
- 'default' => get_option( 'woocommerce_price_num_decimals', 2 ),
77
- 'type' => 'number',
78
  'custom_attributes' => array( 'step' => '1', 'min' => '0' ),
79
  ),
80
  array(
81
- 'title' => __( 'Taxable', 'woocommerce-jetpack' ),
82
- 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
83
- 'id' => "wcj_gateways_fees_is_taxable[{$key}]",
84
- 'default' => 'no',
85
- 'type' => 'checkbox',
86
  ),
87
  array(
88
- 'desc' => __( 'Tax class', 'woocommerce-jetpack' ),
89
- 'desc_tip' => __( 'If taxing is enabled, set tax class here.', 'woocommerce-jetpack' ),
90
- 'id' => "wcj_gateways_fees_tax_class_id[{$key}]",
91
- 'default' => '',
92
- 'type' => 'select',
93
- 'options' => array_merge( array( __( 'Standard Rate', 'woocommerce-jetpack' ) ), WC_Tax::get_tax_classes() ),
94
  ),
95
  array(
96
- 'title' => __( 'Exclude Shipping when Calculating Total Cart Amount', 'woocommerce-jetpack' ),
97
- 'desc' => __( 'Exclude', 'woocommerce-jetpack' ),
98
- 'desc_tip' => __( 'This affects "Percent" type fees and "Minimum/Maximum Cart Amount" options.', 'woocommerce-jetpack' ),
99
- 'id' => "wcj_gateways_fees_exclude_shipping[{$key}]",
100
- 'default' => 'no',
101
- 'type' => 'checkbox',
102
  ),
103
  array(
104
- 'title' => __( 'Require Products', 'woocommerce-jetpack' ),
105
- 'desc_tip' => __( 'Require at least one of selected products to be in cart for fee to be applied.', 'woocommerce-jetpack' ) . ' ' .
 
 
 
 
 
 
 
 
106
  __( 'Ignored if empty.', 'woocommerce-jetpack' ),
107
- 'id' => "wcj_gateways_fees_include_products[{$key}]",
108
- 'default' => '',
109
- 'type' => 'multiselect',
110
- 'class' => 'chosen_select',
111
- 'options' => $products,
112
- 'desc' => apply_filters( 'booster_message', '', 'desc' ),
113
  'custom_attributes' => apply_filters( 'booster_message', '', 'disabled' ),
114
  ),
115
  array(
116
- 'title' => __( 'Exclude Products', 'woocommerce-jetpack' ),
117
- 'desc_tip' => __( 'Do not apply fee, if at least one of selected products is in cart.', 'woocommerce-jetpack' ) . ' ' .
118
  __( 'Ignored if empty.', 'woocommerce-jetpack' ),
119
- 'id' => "wcj_gateways_fees_exclude_products[{$key}]",
120
- 'default' => '',
121
- 'type' => 'multiselect',
122
- 'class' => 'chosen_select',
123
- 'options' => $products,
124
- 'desc' => apply_filters( 'booster_message', '', 'desc' ),
125
  'custom_attributes' => apply_filters( 'booster_message', '', 'disabled' ),
126
  ),
127
  array(
128
- 'type' => 'sectionend',
129
- 'id' => "wcj_gateways_fees_options[{$key}]",
130
  ),
131
  ) );
132
  }
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
  */
15
  foreach ( $available_gateways as $key => $gateway ) {
16
  $settings = array_merge( $settings, array(
17
  array(
18
+ 'title' => $gateway->title . ( $gateway->is_available() ? ' &#10003;' : '' ),
19
+ 'type' => 'title',
20
+ 'id' => "wcj_gateways_fees_options[{$key}]",
21
  ),
22
  array(
23
+ 'title' => __( 'Fee (or Discount) Title', 'woocommerce-jetpack' ),
24
+ 'desc_tip' => __( 'Fee (or discount) title to show to customer.', 'woocommerce-jetpack' ) . ' ' . __( 'Leave blank to disable.', 'woocommerce-jetpack' ),
25
+ 'id' => "wcj_gateways_fees_text[{$key}]",
26
+ 'default' => '',
27
+ 'type' => 'text',
28
+ 'css' => 'width:100%;',
29
  ),
30
  array(
31
+ 'title' => __( 'Fee (or Discount) Type', 'woocommerce-jetpack' ),
32
+ 'desc_tip' => __( 'Percent or fixed value.', 'woocommerce-jetpack' ),
33
+ 'id' => "wcj_gateways_fees_type[{$key}]",
34
+ 'default' => 'fixed',
35
+ 'type' => 'select',
36
+ 'options' => array(
37
  'fixed' => __( 'Fixed', 'woocommerce-jetpack' ),
38
  'percent' => __( 'Percent', 'woocommerce-jetpack' ),
39
  ),
40
  ),
41
  array(
42
+ 'title' => __( 'Fee (or Discount) Value', 'woocommerce-jetpack' ),
43
+ 'desc_tip' => __( 'The value. For discount enter a negative number.', 'woocommerce-jetpack' ),
44
+ 'id' => "wcj_gateways_fees_value[{$key}]",
45
+ 'default' => 0,
46
+ 'type' => 'number',
47
  'custom_attributes' => array( 'step' => '0.01' ),
48
  ),
49
  array(
50
+ 'title' => __( 'Minimum Cart Amount', 'woocommerce-jetpack' ),
51
+ 'desc_tip' => __( 'Minimum cart amount for adding the fee (or discount).', 'woocommerce-jetpack' ) . ' ' . __( 'Set 0 to disable.', 'woocommerce-jetpack' ),
52
+ 'id' => "wcj_gateways_fees_min_cart_amount[{$key}]",
53
+ 'default' => 0,
54
+ 'type' => 'number',
55
  'custom_attributes' => array( 'step' => '0.01', 'min' => '0' ),
56
  ),
57
  array(
58
+ 'title' => __( 'Maximum Cart Amount', 'woocommerce-jetpack' ),
59
+ 'desc_tip' => __( 'Maximum cart amount for adding the fee (or discount).', 'woocommerce-jetpack' ) . ' ' . __( 'Set 0 to disable.', 'woocommerce-jetpack' ),
60
+ 'id' => "wcj_gateways_fees_max_cart_amount[{$key}]",
61
+ 'default' => 0,
62
+ 'type' => 'number',
63
  'custom_attributes' => array( 'step' => '0.01', 'min' => '0' ),
64
  ),
65
  array(
66
+ 'title' => __( 'Rounding', 'woocommerce-jetpack' ),
67
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
68
+ 'desc_tip' => __( 'Round the fee (or discount) value before adding to the cart.', 'woocommerce-jetpack' ),
69
+ 'id' => "wcj_gateways_fees_round[{$key}]",
70
+ 'default' => 'no',
71
+ 'type' => 'checkbox',
72
  ),
73
  array(
74
+ 'desc' => __( 'Number of decimals', 'woocommerce-jetpack' ),
75
+ 'desc_tip' => __( 'If rounding is enabled, set precision (i.e. number of decimals) here.', 'woocommerce-jetpack' ),
76
+ 'id' => "wcj_gateways_fees_round_precision[{$key}]",
77
+ 'default' => get_option( 'woocommerce_price_num_decimals', 2 ),
78
+ 'type' => 'number',
79
  'custom_attributes' => array( 'step' => '1', 'min' => '0' ),
80
  ),
81
  array(
82
+ 'title' => __( 'Taxable', 'woocommerce-jetpack' ),
83
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
84
+ 'id' => "wcj_gateways_fees_is_taxable[{$key}]",
85
+ 'default' => 'no',
86
+ 'type' => 'checkbox',
87
  ),
88
  array(
89
+ 'desc' => __( 'Tax class', 'woocommerce-jetpack' ),
90
+ 'desc_tip' => __( 'If taxing is enabled, set tax class here.', 'woocommerce-jetpack' ),
91
+ 'id' => "wcj_gateways_fees_tax_class_id[{$key}]",
92
+ 'default' => '',
93
+ 'type' => 'select',
94
+ 'options' => array_merge( array( __( 'Standard Rate', 'woocommerce-jetpack' ) ), WC_Tax::get_tax_classes() ),
95
  ),
96
  array(
97
+ 'title' => __( 'Exclude Shipping when Calculating Total Cart Amount', 'woocommerce-jetpack' ),
98
+ 'desc' => __( 'Exclude', 'woocommerce-jetpack' ),
99
+ 'desc_tip' => __( 'This affects "Percent" type fees and "Minimum/Maximum Cart Amount" options.', 'woocommerce-jetpack' ),
100
+ 'id' => "wcj_gateways_fees_exclude_shipping[{$key}]",
101
+ 'default' => 'no',
102
+ 'type' => 'checkbox',
103
  ),
104
  array(
105
+ 'title' => __( 'Include Taxes', 'woocommerce-jetpack' ),
106
+ 'desc' => __( 'Include taxes when calculating Total Cart Amount', 'woocommerce-jetpack' ),
107
+ 'desc_tip' => __( 'This affects "Percent" type fees and "Minimum/Maximum Cart Amount" options.', 'woocommerce-jetpack' ),
108
+ 'id' => "wcj_gateways_fees_include_taxes[{$key}]",
109
+ 'default' => 'no',
110
+ 'type' => 'checkbox',
111
+ ),
112
+ array(
113
+ 'title' => __( 'Require Products', 'woocommerce-jetpack' ),
114
+ 'desc_tip' => __( 'Require at least one of selected products to be in cart for fee to be applied.', 'woocommerce-jetpack' ) . ' ' .
115
  __( 'Ignored if empty.', 'woocommerce-jetpack' ),
116
+ 'id' => "wcj_gateways_fees_include_products[{$key}]",
117
+ 'default' => '',
118
+ 'type' => 'multiselect',
119
+ 'class' => 'chosen_select',
120
+ 'options' => $products,
121
+ 'desc' => apply_filters( 'booster_message', '', 'desc' ),
122
  'custom_attributes' => apply_filters( 'booster_message', '', 'disabled' ),
123
  ),
124
  array(
125
+ 'title' => __( 'Exclude Products', 'woocommerce-jetpack' ),
126
+ 'desc_tip' => __( 'Do not apply fee, if at least one of selected products is in cart.', 'woocommerce-jetpack' ) . ' ' .
127
  __( 'Ignored if empty.', 'woocommerce-jetpack' ),
128
+ 'id' => "wcj_gateways_fees_exclude_products[{$key}]",
129
+ 'default' => '',
130
+ 'type' => 'multiselect',
131
+ 'class' => 'chosen_select',
132
+ 'options' => $products,
133
+ 'desc' => apply_filters( 'booster_message', '', 'desc' ),
134
  'custom_attributes' => apply_filters( 'booster_message', '', 'disabled' ),
135
  ),
136
  array(
137
+ 'type' => 'sectionend',
138
+ 'id' => "wcj_gateways_fees_options[{$key}]",
139
  ),
140
  ) );
141
  }
includes/settings/wcj-settings-payment-gateways-per-category.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Gateways per Product or Category
4
  *
5
- * @version 3.1.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -11,11 +11,29 @@ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
11
 
12
  $product_cats = wcj_get_terms( 'product_cat' );
13
  $is_multiselect_products = ( 'yes' === get_option( 'wcj_list_for_products', 'yes' ) );
14
- $products = ( $is_multiselect_products ? wcj_get_products() : false );
 
15
  $available_gateways = WC()->payment_gateways->payment_gateways();
16
  $settings = array(
17
  array(
18
- 'title' => __( 'Options', 'woocommerce-jetpack' ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  'type' => 'title',
20
  'id' => 'wcj_gateways_per_category_options',
21
  ),
@@ -51,7 +69,7 @@ foreach ( $available_gateways as $gateway_id => $gateway ) {
51
  wcj_get_settings_as_multiselect_or_text(
52
  array(
53
  'title' => '',
54
- 'desc' => __( 'Products - Include', 'woocommerce-jetpack' ) . '. ' . apply_filters( 'booster_message', '', 'desc' ),
55
  'desc_tip' => __( 'Show gateway only if there is selected products in cart. Leave blank to disable the option.', 'woocommerce-jetpack' ),
56
  'id' => 'wcj_gateways_per_products_' . $gateway_id,
57
  'default' => '',
@@ -64,7 +82,7 @@ foreach ( $available_gateways as $gateway_id => $gateway ) {
64
  wcj_get_settings_as_multiselect_or_text(
65
  array(
66
  'title' => '',
67
- 'desc' => __( 'Products - Exclude', 'woocommerce-jetpack' ) . '. ' . apply_filters( 'booster_message', '', 'desc' ),
68
  'desc_tip' => __( 'Hide gateway if there is selected products in cart. Leave blank to disable the option.', 'woocommerce-jetpack' ),
69
  'id' => 'wcj_gateways_per_products_excl_' . $gateway_id,
70
  'default' => '',
2
  /**
3
  * Booster for WooCommerce - Settings - Gateways per Product or Category
4
  *
5
+ * @version 4.1.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
11
 
12
  $product_cats = wcj_get_terms( 'product_cat' );
13
  $is_multiselect_products = ( 'yes' === get_option( 'wcj_list_for_products', 'yes' ) );
14
+ $do_use_variations = ( 'yes' === get_option( 'wcj_gateways_per_category_use_variations', 'no' ) );
15
+ $products = ( $is_multiselect_products ? wcj_get_products( array(), 'any', 512, $do_use_variations, $do_use_variations ) : false );
16
  $available_gateways = WC()->payment_gateways->payment_gateways();
17
  $settings = array(
18
  array(
19
+ 'title' => __( 'General Options', 'woocommerce-jetpack' ),
20
+ 'type' => 'title',
21
+ 'id' => 'wcj_gateways_per_category_general_options',
22
+ ),
23
+ array(
24
+ 'title' => __( 'Use Variations', 'woocommerce-jetpack' ),
25
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
26
+ 'desc_tip' => __( 'Will use variations instead of main product for variable type products.', 'woocommerce-jetpack' ),
27
+ 'type' => 'checkbox',
28
+ 'id' => 'wcj_gateways_per_category_use_variations',
29
+ 'default' => 'no',
30
+ ),
31
+ array(
32
+ 'type' => 'sectionend',
33
+ 'id' => 'wcj_gateways_per_category_general_options',
34
+ ),
35
+ array(
36
+ 'title' => __( 'Gateways', 'woocommerce-jetpack' ),
37
  'type' => 'title',
38
  'id' => 'wcj_gateways_per_category_options',
39
  ),
69
  wcj_get_settings_as_multiselect_or_text(
70
  array(
71
  'title' => '',
72
+ 'desc' => __( 'Products - Include', 'woocommerce-jetpack' ) . '<br>' . apply_filters( 'booster_message', '', 'desc' ),
73
  'desc_tip' => __( 'Show gateway only if there is selected products in cart. Leave blank to disable the option.', 'woocommerce-jetpack' ),
74
  'id' => 'wcj_gateways_per_products_' . $gateway_id,
75
  'default' => '',
82
  wcj_get_settings_as_multiselect_or_text(
83
  array(
84
  'title' => '',
85
+ 'desc' => __( 'Products - Exclude', 'woocommerce-jetpack' ) . '<br>' . apply_filters( 'booster_message', '', 'desc' ),
86
  'desc_tip' => __( 'Hide gateway if there is selected products in cart. Leave blank to disable the option.', 'woocommerce-jetpack' ),
87
  'id' => 'wcj_gateways_per_products_excl_' . $gateway_id,
88
  'default' => '',
includes/settings/wcj-settings-product-open-pricing.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Product Open Pricing
4
  *
5
- * @version 3.8.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  * @todo set default for "wcj_product_open_price_enable_js_validation" to "yes"
@@ -76,6 +76,7 @@ return array(
76
  ),
77
  array(
78
  'title' => __( 'Message on Price too Small', 'woocommerce-jetpack' ),
 
79
  'id' => 'wcj_product_open_price_messages_to_small',
80
  'default' => __( 'Entered price is too small!', 'woocommerce-jetpack' ),
81
  'type' => 'text',
@@ -83,6 +84,7 @@ return array(
83
  ),
84
  array(
85
  'title' => __( 'Message on Price too Big', 'woocommerce-jetpack' ),
 
86
  'id' => 'wcj_product_open_price_messages_to_big',
87
  'default' => __( 'Entered price is too big!', 'woocommerce-jetpack' ),
88
  'type' => 'text',
2
  /**
3
  * Booster for WooCommerce - Settings - Product Open Pricing
4
  *
5
+ * @version 4.1.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  * @todo set default for "wcj_product_open_price_enable_js_validation" to "yes"
76
  ),
77
  array(
78
  'title' => __( 'Message on Price too Small', 'woocommerce-jetpack' ),
79
+ 'desc' => wcj_message_replaced_values( array( '%price%', '%min_price%' ) ),
80
  'id' => 'wcj_product_open_price_messages_to_small',
81
  'default' => __( 'Entered price is too small!', 'woocommerce-jetpack' ),
82
  'type' => 'text',
84
  ),
85
  array(
86
  'title' => __( 'Message on Price too Big', 'woocommerce-jetpack' ),
87
+ 'desc' => wcj_message_replaced_values( array( '%price%', '%max_price%' ) ),
88
  'id' => 'wcj_product_open_price_messages_to_big',
89
  'default' => __( 'Entered price is too big!', 'woocommerce-jetpack' ),
90
  'type' => 'text',
includes/settings/wcj-settings-product-price-by-formula.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Product Price by Formula
4
  *
5
- * @version 3.9.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -79,6 +79,14 @@ $settings = array_merge( $settings, array(
79
  'default' => 0,
80
  'custom_attributes' => array( 'min' => 0 ),
81
  ),
 
 
 
 
 
 
 
 
82
  array(
83
  'type' => 'sectionend',
84
  'id' => 'wcj_product_price_by_formula_general_options',
2
  /**
3
  * Booster for WooCommerce - Settings - Product Price by Formula
4
  *
5
+ * @version 4.1.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
79
  'default' => 0,
80
  'custom_attributes' => array( 'min' => 0 ),
81
  ),
82
+ array(
83
+ 'title' => __( 'Disable Admin Scope', 'woocommerce-jetpack' ),
84
+ 'desc' => __( 'Disable module on Admin scope.', 'woocommerce-jetpack' ),
85
+ 'desc_tip' => __( "Disable if you want to use ‘Product Price by Formula’ module only on Frontend.", 'woocommerce-jetpack' ) . '<br />' . __( 'For example if you use ‘Cost of Goods’ module the profit will be correctly calculated if you leave the box unticked', 'woocommerce-jetpack' ),
86
+ 'type' => 'checkbox',
87
+ 'id' => 'wcj_product_price_by_formula_admin_scope',
88
+ 'default' => 'yes',
89
+ ),
90
  array(
91
  'type' => 'sectionend',
92
  'id' => 'wcj_product_price_by_formula_general_options',
includes/settings/wcj-settings-related-products.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Related Products
4
  *
5
- * @version 3.9.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -165,6 +165,17 @@ $settings = array_merge( $settings, array(
165
  'standard' => __( 'Standard', 'woocommerce-jetpack' ),
166
  ),
167
  ),
 
 
 
 
 
 
 
 
 
 
 
168
  array(
169
  'type' => 'sectionend',
170
  'id' => 'wcj_product_info_related_products_relate_options',
2
  /**
3
  * Booster for WooCommerce - Settings - Related Products
4
  *
5
+ * @version 4.1.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
165
  'standard' => __( 'Standard', 'woocommerce-jetpack' ),
166
  ),
167
  ),
168
+ array(
169
+ 'desc' => __( 'Default metabox value', 'woocommerce-jetpack' ),
170
+ 'desc_tip' => __( 'If set to "Yes" and no products are selected it will hide related products', 'woocommerce-jetpack' ),
171
+ 'id' => 'wcj_product_info_related_products_per_product_cmb_default',
172
+ 'default' => 'no',
173
+ 'type' => 'select',
174
+ 'options' => array(
175
+ 'yes' => __( 'Yes', 'woocommerce-jetpack' ),
176
+ 'no' => __( 'No', 'woocommerce-jetpack' ),
177
+ ),
178
+ ),
179
  array(
180
  'type' => 'sectionend',
181
  'id' => 'wcj_product_info_related_products_relate_options',
includes/settings/wcj-settings-tax-display.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Tax Display
4
  *
5
- * @version 3.2.4
6
  * @since 3.2.4
7
  * @author Algoritmika Ltd.
8
  */
@@ -119,8 +119,21 @@ if ( '' != ( $display_taxes_by_user_role_roles = get_option( 'wcj_product_listin
119
  foreach ( $display_taxes_by_user_role_roles as $display_taxes_by_user_role_role ) {
120
  $settings = array_merge( $settings, array(
121
  array(
122
- 'title' => sprintf( __( 'Role: %s', 'woocommerce-jetpack' ), $display_taxes_by_user_role_role ),
123
  'id' => 'wcj_product_listings_display_taxes_by_user_role_' . $display_taxes_by_user_role_role,
 
 
 
 
 
 
 
 
 
 
 
 
 
124
  'default' => 'no_changes',
125
  'type' => 'select',
126
  'options' => array(
2
  /**
3
  * Booster for WooCommerce - Settings - Tax Display
4
  *
5
+ * @version 4.1.0
6
  * @since 3.2.4
7
  * @author Algoritmika Ltd.
8
  */
119
  foreach ( $display_taxes_by_user_role_roles as $display_taxes_by_user_role_role ) {
120
  $settings = array_merge( $settings, array(
121
  array(
122
+ 'title' => sprintf( __( 'Role: %s - shop', 'woocommerce-jetpack' ), $display_taxes_by_user_role_role ),
123
  'id' => 'wcj_product_listings_display_taxes_by_user_role_' . $display_taxes_by_user_role_role,
124
+ 'desc_tip' => __( 'Setup how taxes will be applied during in the shop.', 'woocommerce-jetpack' ),
125
+ 'default' => 'no_changes',
126
+ 'type' => 'select',
127
+ 'options' => array(
128
+ 'no_changes' => __( 'Default TAX display (no changes)', 'woocommerce-jetpack' ),
129
+ 'incl' => __( 'Including tax', 'woocommerce-jetpack' ),
130
+ 'excl' => __( 'Excluding tax', 'woocommerce-jetpack' ),
131
+ ),
132
+ ),
133
+ array(
134
+ 'title' => sprintf( __( 'Role: %s - cart', 'woocommerce-jetpack' ), $display_taxes_by_user_role_role ),
135
+ 'id' => 'wcj_product_listings_display_taxes_on_cart_by_user_role_' . $display_taxes_by_user_role_role,
136
+ 'desc_tip' => __( 'Setup how taxes will be applied during cart and checkout.', 'woocommerce-jetpack' ),
137
  'default' => 'no_changes',
138
  'type' => 'select',
139
  'options' => array(
includes/settings/wcj-settings-wholesale-price.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Wholesale Price
4
  *
5
- * @version 3.9.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -121,6 +121,13 @@ $settings = array(
121
  'default' => 'no',
122
  'type' => 'checkbox',
123
  ),
 
 
 
 
 
 
 
124
  array(
125
  'type' => 'sectionend',
126
  'id' => 'wcj_wholesale_price_general_options',
2
  /**
3
  * Booster for WooCommerce - Settings - Wholesale Price
4
  *
5
+ * @version 4.1.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
121
  'default' => 'no',
122
  'type' => 'checkbox',
123
  ),
124
+ array(
125
+ 'title' => __( 'Advanced: Price Filters Priority', 'woocommerce-jetpack' ),
126
+ 'desc_tip' => __( 'Priority for all module\'s price filters. Set to zero to use default priority.' ),
127
+ 'id' => 'wcj_wholesale_price_advanced_price_hooks_priority',
128
+ 'default' => 0,
129
+ 'type' => 'number',
130
+ ),
131
  array(
132
  'type' => 'sectionend',
133
  'id' => 'wcj_wholesale_price_general_options',
includes/shortcodes/class-wcj-shortcodes-general.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Shortcodes - General
4
  *
5
- * @version 4.0.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -15,7 +15,7 @@ class WCJ_General_Shortcodes extends WCJ_Shortcodes {
15
  /**
16
  * Constructor.
17
  *
18
- * @version 3.9.0
19
  */
20
  function __construct() {
21
 
@@ -44,6 +44,7 @@ class WCJ_General_Shortcodes extends WCJ_Shortcodes {
44
  'wcj_get_left_to_free_shipping',
45
  'wcj_get_option',
46
  'wcj_image',
 
47
  'wcj_product_category_count',
48
  'wcj_request_value',
49
  'wcj_selector',
@@ -108,6 +109,21 @@ class WCJ_General_Shortcodes extends WCJ_Shortcodes {
108
 
109
  }
110
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
111
  /**
112
  * wcj_get_option.
113
  *
2
  /**
3
  * Booster for WooCommerce - Shortcodes - General
4
  *
5
+ * @version 4.1.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
15
  /**
16
  * Constructor.
17
  *
18
+ * @version 4.1.0
19
  */
20
  function __construct() {
21
 
44
  'wcj_get_left_to_free_shipping',
45
  'wcj_get_option',
46
  'wcj_image',
47
+ 'wcj_post_meta_sum',
48
  'wcj_product_category_count',
49
  'wcj_request_value',
50
  'wcj_selector',
109
 
110
  }
111
 
112
+ /**
113
+ * wcj_post_meta_sum.
114
+ *
115
+ * @version 4.1.0
116
+ * @since 4.1.0
117
+ */
118
+ function wcj_post_meta_sum( $atts ) {
119
+ if ( '' === $atts['key'] ) {
120
+ return '';
121
+ }
122
+ global $wpdb;
123
+ $sum = $wpdb->get_var( $wpdb->prepare( "SELECT sum(meta_value) FROM $wpdb->postmeta WHERE meta_key = %s", $atts['key'] ) );
124
+ return ( ! empty( $atts['offset'] ) ? $sum + $atts['offset'] : $sum );
125
+ }
126
+
127
  /**
128
  * wcj_get_option.
129
  *
includes/shortcodes/class-wcj-shortcodes-invoices.php CHANGED
@@ -44,7 +44,7 @@ class WCJ_Invoices_Shortcodes extends WCJ_Shortcodes {
44
  );
45
 
46
  parent::__construct();
47
- }
48
 
49
  /**
50
  * init_atts.
@@ -58,18 +58,13 @@ class WCJ_Invoices_Shortcodes extends WCJ_Shortcodes {
58
  }
59
  if ( 'shop_order' !== get_post_type( $atts['order_id'] ) ) return false;
60
 
61
- // Class properties
62
- /*if ( ! in_array( $atts['invoice_type'], wcj_enabled_invoice_types_ids() ) ) return false;
63
- $this->the_invoice = wc_get_invoice( $atts['order_id'], $atts['invoice_type'] );
64
- if ( ! $this->the_invoice ) return false;*/
65
-
66
  return $atts;
67
  }
68
 
69
  /**
70
  * wcj_invoice_date.
71
  */
72
- function wcj_invoice_date( $atts ) {
73
  return wcj_get_invoice_date( $atts['order_id'], $atts['invoice_type'], $atts['days'], $atts['date_format'] );
74
  }
75
 
44
  );
45
 
46
  parent::__construct();
47
+ }
48
 
49
  /**
50
  * init_atts.
58
  }
59
  if ( 'shop_order' !== get_post_type( $atts['order_id'] ) ) return false;
60
 
 
 
 
 
 
61
  return $atts;
62
  }
63
 
64
  /**
65
  * wcj_invoice_date.
66
  */
67
+ function wcj_invoice_date( $atts ) {
68
  return wcj_get_invoice_date( $atts['order_id'], $atts['invoice_type'], $atts['days'], $atts['date_format'] );
69
  }
70
 
includes/shortcodes/class-wcj-shortcodes-orders.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Shortcodes - Orders
4
  *
5
- * @version 3.9.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -97,7 +97,7 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
97
  /**
98
  * add_extra_atts.
99
  *
100
- * @version 3.3.0
101
  */
102
  function add_extra_atts( $atts ) {
103
  $modified_atts = array_merge( array(
@@ -110,8 +110,8 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
110
  'field_id' => '',
111
  'name' => '',
112
  'round_by_line' => 'no',
113
- 'whole' => __( 'Dollars', 'woocommerce-jetpack' ),
114
- 'decimal' => __( 'Cents', 'woocommerce-jetpack' ),
115
  'precision' => get_option( 'woocommerce_price_num_decimals', 2 ),
116
  'lang' => 'EN',
117
  'unique_only' => 'no',
@@ -1276,39 +1276,42 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
1276
  /**
1277
  * wcj_order_total_in_words.
1278
  *
1279
- * @version 2.5.9
1280
  */
1281
  function wcj_order_total_in_words( $atts ) {
1282
 
1283
- $order_total = ( true === $atts['excl_tax'] ) ? $this->the_order->get_total() - $this->the_order->get_total_tax() : $this->the_order->get_total();
1284
- $order_total_whole = intval( $order_total );
1285
- $order_total_decimal = round( ( $order_total - $order_total_whole ) * 100 );
1286
 
1287
- $the_number_in_words = '%s %s';
1288
  $the_number_in_words .= ( 0 != $order_total_decimal ) ? ', %s %s.' : '.';
1289
 
1290
- $dollars = $atts['whole'];
1291
- $cents = $atts['decimal'];
 
 
 
1292
 
1293
  switch ( $atts['lang'] ) {
1294
  case 'LT':
1295
  return sprintf( $the_number_in_words,
1296
  $this->mb_ucfirst( convert_number_to_words_lt( $order_total_whole ) ),
1297
- $dollars,
1298
  $this->mb_ucfirst( convert_number_to_words_lt( $order_total_decimal ) ),
1299
- $cents );
1300
  case 'BG':
1301
  return sprintf( $the_number_in_words,
1302
  $this->mb_ucfirst( trim( convert_number_to_words_bg( $order_total_whole ) ) ),
1303
- $dollars,
1304
  $this->mb_ucfirst( trim( convert_number_to_words_bg( $order_total_decimal ) ) ),
1305
- $cents );
1306
  default: // 'EN'
1307
  return sprintf( $the_number_in_words,
1308
  ucfirst( convert_number_to_words( $order_total_whole ) ),
1309
- $dollars,
1310
  ucfirst( convert_number_to_words( $order_total_decimal ) ),
1311
- $cents );
1312
  }
1313
  }
1314
  }
2
  /**
3
  * Booster for WooCommerce - Shortcodes - Orders
4
  *
5
+ * @version 4.1.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
97
  /**
98
  * add_extra_atts.
99
  *
100
+ * @version 4.1.0
101
  */
102
  function add_extra_atts( $atts ) {
103
  $modified_atts = array_merge( array(
110
  'field_id' => '',
111
  'name' => '',
112
  'round_by_line' => 'no',
113
+ 'whole' => '',
114
+ 'decimal' => '&cent;',
115
  'precision' => get_option( 'woocommerce_price_num_decimals', 2 ),
116
  'lang' => 'EN',
117
  'unique_only' => 'no',
1276
  /**
1277
  * wcj_order_total_in_words.
1278
  *
1279
+ * @version 4.1.0
1280
  */
1281
  function wcj_order_total_in_words( $atts ) {
1282
 
1283
+ $order_total = ( true === $atts['excl_tax'] ) ? $this->the_order->get_total() - $this->the_order->get_total_tax() : $this->the_order->get_total();
1284
+ $order_total_whole = intval( $order_total );
1285
+ $order_total_decimal = round( ( $order_total - $order_total_whole ) * 100 );
1286
 
1287
+ $the_number_in_words = '%s %s';
1288
  $the_number_in_words .= ( 0 != $order_total_decimal ) ? ', %s %s.' : '.';
1289
 
1290
+ $whole = ( '' === $atts['whole'] ?
1291
+ ( isset( $atts['use_currency_symbol'] ) && 'yes' === $atts['use_currency_symbol'] ?
1292
+ get_woocommerce_currency_symbol( $this->the_order->get_currency() ) : $this->the_order->get_currency()
1293
+ ) : $atts['whole'] );
1294
+ $decimal = $atts['decimal'];
1295
 
1296
  switch ( $atts['lang'] ) {
1297
  case 'LT':
1298
  return sprintf( $the_number_in_words,
1299
  $this->mb_ucfirst( convert_number_to_words_lt( $order_total_whole ) ),
1300
+ $whole,
1301
  $this->mb_ucfirst( convert_number_to_words_lt( $order_total_decimal ) ),
1302
+ $decimal );
1303
  case 'BG':
1304
  return sprintf( $the_number_in_words,
1305
  $this->mb_ucfirst( trim( convert_number_to_words_bg( $order_total_whole ) ) ),
1306
+ $whole,
1307
  $this->mb_ucfirst( trim( convert_number_to_words_bg( $order_total_decimal ) ) ),
1308
+ $decimal );
1309
  default: // 'EN'
1310
  return sprintf( $the_number_in_words,
1311
  ucfirst( convert_number_to_words( $order_total_whole ) ),
1312
+ $whole,
1313
  ucfirst( convert_number_to_words( $order_total_decimal ) ),
1314
+ $decimal );
1315
  }
1316
  }
1317
  }
includes/shortcodes/class-wcj-shortcodes-products-crowdfunding.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Shortcodes - Products Crowdfunding
4
  *
5
- * @version 3.3.0
6
  * @since 2.5.4
7
  * @author Algoritmika Ltd.
8
  */
@@ -84,29 +84,21 @@ class WCJ_Products_Crowdfunding_Shortcodes extends WCJ_Shortcodes {
84
  /**
85
  * get_product_orders_data.
86
  *
87
- * @version 2.7.0
88
  * @since 2.2.6
89
  */
90
  function get_product_orders_data( $return_value = 'total_orders', $atts ) {
91
- $product_ids = array();
92
- if ( $this->the_product->is_type( 'grouped' ) ) {
93
- $product_ids = $this->the_product->get_children();
94
- } else {
95
- $product_ids = array( wcj_get_product_id_or_variation_parent_id( $this->the_product ) );
96
- }
97
- global $woocommerce_loop, $post;
98
- $saved_wc_loop = $woocommerce_loop;
99
- $saved_post = $post;
100
- $total_orders = 0;
101
- $total_qty = 0;
102
- $total_sum = 0;
103
- $offset = 0;
104
- $block_size = 256;
105
- $date_query_after = get_post_meta( wcj_get_product_id_or_variation_parent_id( $this->the_product ), '_' . 'wcj_crowdfunding_startdate', true );
106
  while( true ) {
107
  $args = array(
108
  'post_type' => 'shop_order',
109
- 'post_status' => 'wc-completed',
110
  'posts_per_page' => $block_size,
111
  'offset' => $offset,
112
  'orderby' => 'date',
@@ -124,8 +116,8 @@ class WCJ_Products_Crowdfunding_Shortcodes extends WCJ_Shortcodes {
124
  break;
125
  }
126
  foreach ( $loop->posts as $order_id ) {
127
- $the_order = wc_get_order( $order_id );
128
- $the_items = $the_order->get_items();
129
  $item_found = false;
130
  foreach( $the_items as $item ) {
131
  if ( in_array( $item['product_id'], $product_ids ) ) {
@@ -140,10 +132,6 @@ class WCJ_Products_Crowdfunding_Shortcodes extends WCJ_Shortcodes {
140
  }
141
  $offset += $block_size;
142
  }
143
- // wp_reset_postdata();
144
- $woocommerce_loop = $saved_wc_loop;
145
- $post = $saved_post;
146
- setup_postdata( $post );
147
  switch ( $return_value ) {
148
  case 'orders_sum':
149
  $return = $total_sum;
@@ -223,22 +211,19 @@ class WCJ_Products_Crowdfunding_Shortcodes extends WCJ_Shortcodes {
223
  $days_remaining = floor( $seconds_remaining / ( 24 * 60 * 60 ) );
224
  $hours_remaining = floor( $seconds_remaining / ( 60 * 60 ) );
225
  $minutes_remaining = floor( $seconds_remaining / 60 );
226
- if ( $seconds_remaining <= 0 ) return '';
227
- if ( $days_remaining > 0 ) return ( 1 == $days_remaining ) ? $days_remaining . ' day left' : $days_remaining . ' days left';
228
- if ( $hours_remaining > 0 ) return ( 1 == $hours_remaining ) ? $hours_remaining . ' hour left' : $hours_remaining . ' hours left';
229
- if ( $minutes_remaining > 0 ) return ( 1 == $minutes_remaining ) ? $minutes_remaining . ' minute left' : $minutes_remaining . ' minutes left';
230
- return ( 1 == $seconds_remaining ) ? $seconds_remaining . ' second left' : $seconds_remaining . ' seconds left';
231
- /* if ( ( $seconds_remaining = strtotime( $this->wcj_product_crowdfunding_deadline( $atts ) ) - time() ) <= 0 ) return '';
232
- if ( ( $days_remaining = floor( $seconds_remaining / ( 24 * 60 * 60 ) ) ) > 0 ) {
233
- return ( 1 === $days_remaining ) ? $days_remaining . ' day left' : $days_remaining . ' days left';
234
  }
235
- if ( ( $hours_remaining = floor( $seconds_remaining / ( 60 * 60 ) ) ) > 0 ) {
236
- return ( 1 === $hours_remaining ) ? $hours_remaining . ' hour left' : $hours_remaining . ' hours left';
237
  }
238
- if ( ( $minutes_remaining = floor( $seconds_remaining / 60 ) ) > 0 ) {
239
- return ( 1 === $minutes_remaining ) ? $minutes_remaining . ' minute left' : $minutes_remaining . ' minutes left';
240
  }
241
- return ( 1 === $seconds_remaining ) ? $seconds_remaining . ' second left' : $seconds_remaining . ' seconds left'; */
242
  }
243
 
244
  /**
2
  /**
3
  * Booster for WooCommerce - Shortcodes - Products Crowdfunding
4
  *
5
+ * @version 4.1.0
6
  * @since 2.5.4
7
  * @author Algoritmika Ltd.
8
  */
84
  /**
85
  * get_product_orders_data.
86
  *
87
+ * @version 4.1.0
88
  * @since 2.2.6
89
  */
90
  function get_product_orders_data( $return_value = 'total_orders', $atts ) {
91
+ $product_ids = ( $this->the_product->is_type( 'grouped' ) ? $this->the_product->get_children() : array( wcj_get_product_id_or_variation_parent_id( $this->the_product ) ) );
92
+ $total_orders = 0;
93
+ $total_qty = 0;
94
+ $total_sum = 0;
95
+ $offset = 0;
96
+ $block_size = 512;
97
+ $date_query_after = ( isset( $atts['start_date'] ) ? $atts['start_date'] : get_post_meta( wcj_get_product_id_or_variation_parent_id( $this->the_product ), '_' . 'wcj_crowdfunding_startdate', true ) );
 
 
 
 
 
 
 
 
98
  while( true ) {
99
  $args = array(
100
  'post_type' => 'shop_order',
101
+ 'post_status' => ( isset( $atts['order_status'] ) ? array_map( 'trim', explode( ',', $atts['order_status'] ) ) : 'wc-completed' ),
102
  'posts_per_page' => $block_size,
103
  'offset' => $offset,
104
  'orderby' => 'date',
116
  break;
117
  }
118
  foreach ( $loop->posts as $order_id ) {
119
+ $the_order = wc_get_order( $order_id );
120
+ $the_items = $the_order->get_items();
121
  $item_found = false;
122
  foreach( $the_items as $item ) {
123
  if ( in_array( $item['product_id'], $product_ids ) ) {
132
  }
133
  $offset += $block_size;
134
  }
 
 
 
 
135
  switch ( $return_value ) {
136
  case 'orders_sum':
137
  $return = $total_sum;
211
  $days_remaining = floor( $seconds_remaining / ( 24 * 60 * 60 ) );
212
  $hours_remaining = floor( $seconds_remaining / ( 60 * 60 ) );
213
  $minutes_remaining = floor( $seconds_remaining / 60 );
214
+ if ( $seconds_remaining <= 0 ) {
215
+ return '';
216
+ }
217
+ if ( $days_remaining > 0 ) {
218
+ return ( 1 == $days_remaining ) ? $days_remaining . ' day left' : $days_remaining . ' days left';
 
 
 
219
  }
220
+ if ( $hours_remaining > 0 ) {
221
+ return ( 1 == $hours_remaining ) ? $hours_remaining . ' hour left' : $hours_remaining . ' hours left';
222
  }
223
+ if ( $minutes_remaining > 0 ) {
224
+ return ( 1 == $minutes_remaining ) ? $minutes_remaining . ' minute left' : $minutes_remaining . ' minutes left';
225
  }
226
+ return ( 1 == $seconds_remaining ) ? $seconds_remaining . ' second left' : $seconds_remaining . ' seconds left';
227
  }
228
 
229
  /**
includes/shortcodes/class-wcj-shortcodes-products.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Shortcodes - Products
4
  *
5
- * @version 4.0.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -699,7 +699,7 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
699
  * wcj_product_you_save_percent.
700
  *
701
  * @return string
702
- * @version 2.4.0
703
  */
704
  function wcj_product_you_save_percent( $atts ) {
705
  if ( $this->the_product->is_on_sale() ) {
@@ -707,7 +707,10 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
707
  $you_save = ( $this->the_product->get_variation_regular_price( 'max' ) - $this->the_product->get_variation_sale_price( 'max' ) );
708
  $regular_price = $this->the_product->get_variation_regular_price( 'max' );
709
  } else {
710
- $you_save = ( $this->the_product->get_regular_price() - $this->the_product->get_sale_price() );
 
 
 
711
  $regular_price = $this->the_product->get_regular_price();
712
  }
713
  if ( 0 != $regular_price ) {
2
  /**
3
  * Booster for WooCommerce - Shortcodes - Products
4
  *
5
+ * @version 4.1.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
699
  * wcj_product_you_save_percent.
700
  *
701
  * @return string
702
+ * @version 4.1.0
703
  */
704
  function wcj_product_you_save_percent( $atts ) {
705
  if ( $this->the_product->is_on_sale() ) {
707
  $you_save = ( $this->the_product->get_variation_regular_price( 'max' ) - $this->the_product->get_variation_sale_price( 'max' ) );
708
  $regular_price = $this->the_product->get_variation_regular_price( 'max' );
709
  } else {
710
+ $sale_price = $this->the_product->get_sale_price();
711
+ $price = $this->the_product->get_price();
712
+ $final_price = ! empty( $sale_price ) && $sale_price < $price ? $this->the_product->get_sale_price() : $this->the_product->get_price();
713
+ $you_save = ( $this->the_product->get_regular_price() - $final_price );
714
  $regular_price = $this->the_product->get_regular_price();
715
  }
716
  if ( 0 != $regular_price ) {
langs/woocommerce-jetpack.pot CHANGED
@@ -67,8 +67,8 @@ msgstr ""
67
  msgid "Manage Settings"
68
  msgstr ""
69
 
70
- #: includes/class-wcj-admin-bar.php:168 includes/class-wcj-admin-bar.php:478
71
- #: includes/class-wcj-admin-bar.php:578
72
  #: includes/admin/class-wc-settings-jetpack.php:219
73
  #: includes/admin/class-wc-settings-jetpack.php:414
74
  #: includes/core/class-wcj-admin.php:113
@@ -95,7 +95,7 @@ msgid ""
95
  msgstr ""
96
 
97
  #: includes/class-wcj-admin-bar.php:245 includes/class-wcj-admin-bar.php:288
98
- #: includes/class-wcj-admin-bar.php:602
99
  #: includes/classes/class-wcj-module.php:522
100
  #: includes/settings/wcj-settings-wpml.php:74
101
  msgid "Tools"
@@ -112,7 +112,7 @@ msgstr ""
112
  #: includes/class-wcj-admin-bar.php:276
113
  #: includes/class-wcj-checkout-files-upload.php:218
114
  #: includes/class-wcj-eu-vat-number.php:126
115
- #: includes/class-wcj-max-products-per-user.php:115
116
  #: includes/class-wcj-orders.php:124 includes/class-wcj-orders.php:153
117
  #: includes/class-wcj-payment-gateways.php:91
118
  #: includes/class-wcj-track-users.php:163
@@ -170,19 +170,19 @@ msgstr ""
170
  msgid "Year"
171
  msgstr ""
172
 
173
- #: includes/class-wcj-admin-bar.php:356
174
  #: includes/admin/class-wc-settings-jetpack.php:217
175
  #: includes/settings/wcj-settings-emails-verification.php:138
176
  #: includes/settings/wcj-settings-price-by-country.php:168
177
  msgid "WooCommerce"
178
  msgstr ""
179
 
180
- #: includes/class-wcj-admin-bar.php:359
181
  msgid "WooCommerce settings"
182
  msgstr ""
183
 
184
- #: includes/class-wcj-admin-bar.php:363 includes/class-wcj-admin-bar.php:367
185
- #: includes/class-wcj-admin-bar.php:385 includes/class-wcj-my-account.php:32
186
  #: includes/class-wcj-my-account.php:40 includes/class-wcj-orders.php:26
187
  #: includes/reports/wcj-class-reports-sales-gateways.php:153
188
  #: includes/settings/wcj-settings-reports.php:21
@@ -192,29 +192,29 @@ msgstr ""
192
  msgid "Orders"
193
  msgstr ""
194
 
195
- #: includes/class-wcj-admin-bar.php:371
196
  msgid "Add order"
197
  msgstr ""
198
 
199
- #: includes/class-wcj-admin-bar.php:375 includes/class-wcj-admin-bar.php:390
200
  #: includes/settings/wcj-settings-reports.php:135
201
  #: includes/settings/wcj-settings-reports.php:141
202
  msgid "Customers"
203
  msgstr ""
204
 
205
- #: includes/class-wcj-admin-bar.php:381 includes/class-wcj-reports.php:33
206
  msgid "Reports"
207
  msgstr ""
208
 
209
- #: includes/class-wcj-admin-bar.php:394
210
  msgid "Customers vs. guests"
211
  msgstr ""
212
 
213
- #: includes/class-wcj-admin-bar.php:398
214
  msgid "Customer list"
215
  msgstr ""
216
 
217
- #: includes/class-wcj-admin-bar.php:404 includes/class-wcj-stock.php:27
218
  #: includes/reports/wcj-class-reports-stock.php:272
219
  #: includes/settings/wcj-settings-reports.php:156
220
  #: includes/settings/wcj-settings-reports.php:162
@@ -222,35 +222,35 @@ msgstr ""
222
  msgid "Stock"
223
  msgstr ""
224
 
225
- #: includes/class-wcj-admin-bar.php:408
226
  msgid "Low in stock"
227
  msgstr ""
228
 
229
- #: includes/class-wcj-admin-bar.php:412
230
  #: includes/settings/wcj-settings-stock.php:101
231
  #: includes/shortcodes/class-wcj-shortcodes-products.php:565
232
  msgid "Out of stock"
233
  msgstr ""
234
 
235
- #: includes/class-wcj-admin-bar.php:416
236
  msgid "Most Stocked"
237
  msgstr ""
238
 
239
- #: includes/class-wcj-admin-bar.php:422
240
  #: includes/class-wcj-eu-vat-number.php:190
241
  msgid "Taxes"
242
  msgstr ""
243
 
244
- #: includes/class-wcj-admin-bar.php:426
245
  msgid "Taxes by code"
246
  msgstr ""
247
 
248
- #: includes/class-wcj-admin-bar.php:430
249
  msgid "Taxes by date"
250
  msgstr ""
251
 
252
- #: includes/class-wcj-admin-bar.php:438 includes/class-wcj-admin-bar.php:442
253
- #: includes/class-wcj-admin-bar.php:486
254
  #: includes/class-wcj-product-bulk-meta-editor.php:263
255
  #: includes/class-wcj-product-by-user.php:96
256
  #: includes/class-wcj-product-by-user.php:132
@@ -261,11 +261,11 @@ msgstr ""
261
  msgid "Products"
262
  msgstr ""
263
 
264
- #: includes/class-wcj-admin-bar.php:446
265
  msgid "Add product"
266
  msgstr ""
267
 
268
- #: includes/class-wcj-admin-bar.php:450
269
  #: includes/class-wcj-product-bulk-price-converter.php:149
270
  #: includes/class-wcj-sku.php:538
271
  #: includes/export/class-wcj-fields-helper.php:318
@@ -275,7 +275,7 @@ msgstr ""
275
  msgid "Categories"
276
  msgstr ""
277
 
278
- #: includes/class-wcj-admin-bar.php:454
279
  #: includes/export/class-wcj-fields-helper.php:319
280
  #: includes/settings/wcj-settings-product-by-user.php:20
281
  #: includes/shortcodes/class-wcj-shortcodes-products-add-form.php:183
@@ -283,124 +283,124 @@ msgstr ""
283
  msgid "Tags"
284
  msgstr ""
285
 
286
- #: includes/class-wcj-admin-bar.php:458
287
  msgid "Attributes"
288
  msgstr ""
289
 
290
- #: includes/class-wcj-admin-bar.php:464 includes/class-wcj-admin-bar.php:468
291
  msgid "Coupons"
292
  msgstr ""
293
 
294
- #: includes/class-wcj-admin-bar.php:472
295
  msgid "Add coupon"
296
  msgstr ""
297
 
298
- #: includes/class-wcj-admin-bar.php:482 includes/class-wcj-admin-bar.php:490
299
  #: includes/class-wcj-general.php:24 includes/class-wcj-pdf-invoicing.php:24
300
  #: includes/settings/wcj-settings-related-products.php:38
301
  msgid "General"
302
  msgstr ""
303
 
304
- #: includes/class-wcj-admin-bar.php:494
305
  #: includes/settings/wcj-settings-eu-vat-number.php:146
306
  #: includes/settings/wcj-settings-product-msrp.php:25
307
  msgid "Display"
308
  msgstr ""
309
 
310
- #: includes/class-wcj-admin-bar.php:498
311
  msgid "Inventory"
312
  msgstr ""
313
 
314
- #: includes/class-wcj-admin-bar.php:502
315
  msgid "Downloadable products"
316
  msgstr ""
317
 
318
- #: includes/class-wcj-admin-bar.php:508
319
  msgid "Tax"
320
  msgstr ""
321
 
322
- #: includes/class-wcj-admin-bar.php:512
323
  msgid "Tax options"
324
  msgstr ""
325
 
326
- #: includes/class-wcj-admin-bar.php:516
327
  msgid "Standard rates"
328
  msgstr ""
329
 
330
- #: includes/class-wcj-admin-bar.php:522
331
  #: includes/settings/wcj-settings-checkout-custom-fields.php:193
332
- #: includes/settings/wcj-settings-checkout-custom-info.php:56
333
  #: includes/settings/wcj-settings-left-to-free-shipping.php:115
334
  #: includes/settings/wcj-settings-price-by-user-role.php:46
335
  msgid "Shipping"
336
  msgstr ""
337
 
338
- #: includes/class-wcj-admin-bar.php:526
339
  msgid "Shipping zones"
340
  msgstr ""
341
 
342
- #: includes/class-wcj-admin-bar.php:530
343
  msgid "Shipping options"
344
  msgstr ""
345
 
346
- #: includes/class-wcj-admin-bar.php:534
347
  msgid "Shipping classes"
348
  msgstr ""
349
 
350
- #: includes/class-wcj-admin-bar.php:540
351
  msgid "Checkout"
352
  msgstr ""
353
 
354
- #: includes/class-wcj-admin-bar.php:544
355
  msgid "Checkout options"
356
  msgstr ""
357
 
358
- #: includes/class-wcj-admin-bar.php:548
359
  msgid "BACS"
360
  msgstr ""
361
 
362
- #: includes/class-wcj-admin-bar.php:552
363
  msgid "Check payments"
364
  msgstr ""
365
 
366
- #: includes/class-wcj-admin-bar.php:556
367
  msgid "Cash on delivery"
368
  msgstr ""
369
 
370
- #: includes/class-wcj-admin-bar.php:560
371
  msgid "PayPal"
372
  msgstr ""
373
 
374
- #: includes/class-wcj-admin-bar.php:566
375
  #: includes/settings/wcj-settings-checkout-custom-fields.php:195
376
  msgid "Account"
377
  msgstr ""
378
 
379
- #: includes/class-wcj-admin-bar.php:570
380
  msgid "Emails"
381
  msgstr ""
382
 
383
- #: includes/class-wcj-admin-bar.php:574
384
  msgid "API"
385
  msgstr ""
386
 
387
- #: includes/class-wcj-admin-bar.php:582
388
  msgid "Keys/Apps"
389
  msgstr ""
390
 
391
- #: includes/class-wcj-admin-bar.php:586
392
  msgid "Webhooks"
393
  msgstr ""
394
 
395
- #: includes/class-wcj-admin-bar.php:594 includes/class-wcj-admin-bar.php:598
396
  msgid "System status"
397
  msgstr ""
398
 
399
- #: includes/class-wcj-admin-bar.php:606
400
  msgid "Logs"
401
  msgstr ""
402
 
403
- #: includes/class-wcj-admin-bar.php:612
404
  msgid "Extensions"
405
  msgstr ""
406
 
@@ -457,75 +457,65 @@ msgid "Admin Tools"
457
  msgstr ""
458
 
459
  #: includes/class-wcj-admin-tools.php:25
460
- msgid "Booster for WooCommerce debug and log tools."
461
  msgstr ""
462
 
463
  #: includes/class-wcj-admin-tools.php:31
464
- msgid "Debug Log"
465
  msgstr ""
466
 
467
  #: includes/class-wcj-admin-tools.php:32
468
- msgid "Log."
469
- msgstr ""
470
-
471
- #: includes/class-wcj-admin-tools.php:33
472
- #: includes/settings/wcj-settings-admin-tools.php:91
473
- msgid "Log"
474
- msgstr ""
475
-
476
- #: includes/class-wcj-admin-tools.php:44
477
- #, php-format
478
- msgid "Current PHP memory limit: %s."
479
- msgstr ""
480
-
481
- #: includes/class-wcj-admin-tools.php:49
482
- #, php-format
483
- msgid "Current PHP time limit: %s seconds."
484
  msgstr ""
485
 
486
- #: includes/class-wcj-admin-tools.php:110
487
  #: includes/settings/wcj-settings-export.php:157
488
  #: includes/settings/wcj-settings-export.php:236
489
  msgid "Product Meta"
490
  msgstr ""
491
 
492
- #: includes/class-wcj-admin-tools.php:127
493
  #: includes/settings/wcj-settings-export.php:86
494
  #: includes/settings/wcj-settings-export.php:154
495
  msgid "Order Meta"
496
  msgstr ""
497
 
498
- #: includes/class-wcj-admin-tools.php:161
499
  msgid "Order Items Meta"
500
  msgstr ""
501
 
502
- #: includes/class-wcj-admin-tools.php:163
503
  msgid "Item Key"
504
  msgstr ""
505
 
506
- #: includes/class-wcj-admin-tools.php:163
507
  msgid "Item Meta Key"
508
  msgstr ""
509
 
510
- #: includes/class-wcj-admin-tools.php:163
511
  msgid "Item Meta Value"
512
  msgstr ""
513
 
514
- #: includes/class-wcj-admin-tools.php:189
515
- msgid "Delete Log"
516
- msgstr ""
517
-
518
- #: includes/class-wcj-admin-tools.php:192
519
- #, php-format
520
- msgid "Now: %s"
 
 
521
  msgstr ""
522
 
523
- #: includes/class-wcj-admin-tools.php:196
524
- msgid "Log is empty."
 
 
 
525
  msgstr ""
526
 
527
- #: includes/class-wcj-admin-tools.php:227
528
- msgid "NOT DEFINED"
529
  msgstr ""
530
 
531
  #: includes/class-wcj-breadcrumbs.php:28
@@ -607,18 +597,18 @@ msgid ""
607
  "and more."
608
  msgstr ""
609
 
610
- #: includes/class-wcj-checkout-customization.php:99
611
  #: includes/settings/wcj-settings-checkout-customization.php:181
612
  msgid "Returning customer?"
613
  msgstr ""
614
 
615
- #: includes/class-wcj-checkout-customization.php:114
616
  #: includes/settings/wcj-settings-checkout-customization.php:159
617
  msgid "Thank you. Your order has been received."
618
  msgstr ""
619
 
620
- #: includes/class-wcj-checkout-customization.php:139
621
- #: includes/class-wcj-checkout-customization.php:169
622
  #: includes/settings/wcj-settings-checkout-customization.php:116
623
  msgid "This field can not be changed"
624
  msgstr ""
@@ -1047,7 +1037,7 @@ msgid "Custom PHP"
1047
  msgstr ""
1048
 
1049
  #: includes/class-wcj-custom-php.php:28
1050
- msgid "Custom PHP."
1051
  msgstr ""
1052
 
1053
  #: includes/class-wcj-custom-php.php:30
@@ -1066,6 +1056,40 @@ msgstr ""
1066
  msgid "E.g.: %s"
1067
  msgstr ""
1068
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1069
  #: includes/class-wcj-email-options.php:26
1070
  #: includes/pdf-invoices/submodules/class-wcj-pdf-invoicing-emails.php:24
1071
  #: includes/settings/wcj-settings-emails-verification.php:107
@@ -1228,7 +1252,7 @@ msgid "Booster: Send Email: %s"
1228
  msgstr ""
1229
 
1230
  #: includes/class-wcj-empty-cart-button.php:25
1231
- #: includes/shortcodes/class-wcj-shortcodes-general.php:501
1232
  msgid "Empty Cart Button"
1233
  msgstr ""
1234
 
@@ -1411,55 +1435,57 @@ msgid "Free!"
1411
  msgstr ""
1412
 
1413
  #: includes/class-wcj-general.php:25
1414
- msgid "Custom roles tool. Shortcodes in WordPress text widgets."
1415
  msgstr ""
1416
 
1417
  #: includes/class-wcj-general.php:31
1418
- msgid "Products Attributes"
1419
  msgstr ""
1420
 
1421
  #: includes/class-wcj-general.php:32
1422
- msgid "All Products and All Attributes."
1423
  msgstr ""
1424
 
1425
- #: includes/class-wcj-general.php:35
1426
- msgid "Add/Manage Custom Roles"
1427
  msgstr ""
1428
 
1429
- #: includes/class-wcj-general.php:36
1430
- msgid "Custom Roles"
 
1431
  msgstr ""
1432
 
1433
- #: includes/class-wcj-general.php:37
1434
- msgid "Manage Custom Roles."
 
1435
  msgstr ""
1436
 
1437
- #: includes/class-wcj-general.php:110
1438
  msgid "Booster User Role"
1439
  msgstr ""
1440
 
1441
- #: includes/class-wcj-general.php:171
1442
  msgid "All fields are required!"
1443
  msgstr ""
1444
 
1445
- #: includes/class-wcj-general.php:175
1446
  msgid "Role ID must not be numbers only!"
1447
  msgstr ""
1448
 
1449
- #: includes/class-wcj-general.php:184
1450
  msgid "Role successfully added!"
1451
  msgstr ""
1452
 
1453
- #: includes/class-wcj-general.php:186
1454
  msgid "Role already exists!"
1455
  msgstr ""
1456
 
1457
- #: includes/class-wcj-general.php:199
1458
  #, php-format
1459
  msgid "Role %s successfully deleted!"
1460
  msgstr ""
1461
 
1462
- #: includes/class-wcj-general.php:205 includes/class-wcj-general.php:220
1463
  #: includes/class-wcj-sku.php:536
1464
  #: includes/reports/wcj-class-reports-sales.php:196
1465
  #: includes/settings/wcj-settings-cross-sells.php:43
@@ -1471,7 +1497,7 @@ msgstr ""
1471
  msgid "ID"
1472
  msgstr ""
1473
 
1474
- #: includes/class-wcj-general.php:205 includes/class-wcj-general.php:221
1475
  #: includes/class-wcj-offer-price.php:172
1476
  #: includes/export/class-wcj-fields-helper.php:282
1477
  #: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:70
@@ -1479,11 +1505,11 @@ msgstr ""
1479
  msgid "Name"
1480
  msgstr ""
1481
 
1482
- #: includes/class-wcj-general.php:205 includes/class-wcj-general.php:222
1483
  msgid "Capabilities"
1484
  msgstr ""
1485
 
1486
- #: includes/class-wcj-general.php:205
1487
  #: includes/class-wcj-product-by-user.php:197
1488
  #: includes/settings/wcj-settings-pdf-invoicing-advanced.php:100
1489
  #: includes/tools/class-wcj-order-statuses-tool.php:145
@@ -1491,7 +1517,7 @@ msgstr ""
1491
  msgid "Actions"
1492
  msgstr ""
1493
 
1494
- #: includes/class-wcj-general.php:212
1495
  #: includes/class-wcj-payment-gateways.php:117
1496
  #: includes/class-wcj-product-bulk-meta-editor.php:367
1497
  #: includes/class-wcj-product-by-user.php:206
@@ -1502,15 +1528,15 @@ msgstr ""
1502
  msgid "Delete"
1503
  msgstr ""
1504
 
1505
- #: includes/class-wcj-general.php:216
1506
  msgid "Existing Roles"
1507
  msgstr ""
1508
 
1509
- #: includes/class-wcj-general.php:223
1510
  msgid "Add New Role"
1511
  msgstr ""
1512
 
1513
- #: includes/class-wcj-general.php:226
1514
  #: includes/class-wcj-shipping-by-products.php:206
1515
  #: includes/settings/wcj-settings-admin-orders-list.php:134
1516
  #: includes/settings/wcj-settings-checkout-custom-fields.php:22
@@ -1532,7 +1558,7 @@ msgstr ""
1532
  #: includes/settings/wcj-settings-pdf-invoicing-advanced.php:183
1533
  #: includes/settings/wcj-settings-product-by-condition.php:107
1534
  #: includes/settings/wcj-settings-product-by-user.php:114
1535
- #: includes/settings/wcj-settings-product-open-pricing.php:121
1536
  #: includes/settings/wcj-settings-product-tabs.php:247
1537
  #: includes/settings/wcj-settings-purchase-data.php:134
1538
  #: includes/settings/wcj-settings-purchase-data.php:143
@@ -1545,26 +1571,6 @@ msgstr ""
1545
  msgid "Add"
1546
  msgstr ""
1547
 
1548
- #: includes/class-wcj-general.php:289 includes/class-wcj-general.php:331
1549
- #: includes/class-wcj-general.php:340
1550
- #: includes/class-wcj-product-bulk-meta-editor.php:339
1551
- #: includes/class-wcj-product-bulk-price-converter.php:148
1552
- #: includes/class-wcj-sku.php:537
1553
- #: includes/reports/wcj-class-reports-sales.php:197
1554
- #: includes/reports/wcj-class-reports-stock.php:269
1555
- msgid "Product"
1556
- msgstr ""
1557
-
1558
- #: includes/class-wcj-general.php:290 includes/class-wcj-general.php:332
1559
- #: includes/class-wcj-general.php:341
1560
- #: includes/reports/wcj-class-reports-stock.php:270
1561
- msgid "Category"
1562
- msgstr ""
1563
-
1564
- #: includes/class-wcj-general.php:357
1565
- msgid "Total Products:"
1566
- msgstr ""
1567
-
1568
  #: includes/class-wcj-global-discount.php:27
1569
  #: includes/admin/class-wc-settings-jetpack.php:479
1570
  #: includes/settings/wcj-settings-product-addons.php:237
@@ -1595,58 +1601,58 @@ msgstr ""
1595
  msgid "%left_to_free% left to free shipping"
1596
  msgstr ""
1597
 
1598
- #: includes/class-wcj-max-products-per-user.php:28
1599
  msgid "Maximum Products per User"
1600
  msgstr ""
1601
 
1602
- #: includes/class-wcj-max-products-per-user.php:29
1603
  msgid "Limit number of items your (logged) customers can buy."
1604
  msgstr ""
1605
 
1606
- #: includes/class-wcj-max-products-per-user.php:30
1607
  msgid ""
1608
  "Please note, that there is no maximum quantity set for not-logged (i.e. "
1609
  "guest) users. Product quantities are updated, when order status is changed "
1610
- "to completed."
1611
  msgstr ""
1612
 
1613
- #: includes/class-wcj-max-products-per-user.php:62
1614
  msgid "Data re-calculated."
1615
  msgstr ""
1616
 
1617
- #: includes/class-wcj-max-products-per-user.php:63
1618
  #, php-format
1619
  msgid "%s order(s) processed."
1620
  msgstr ""
1621
 
1622
- #: includes/class-wcj-max-products-per-user.php:115
1623
  msgid "Maximum Products per User: Sales Data"
1624
  msgstr ""
1625
 
1626
- #: includes/class-wcj-max-products-per-user.php:132
1627
  msgid "User ID"
1628
  msgstr ""
1629
 
1630
- #: includes/class-wcj-max-products-per-user.php:132
1631
  msgid "User Name"
1632
  msgstr ""
1633
 
1634
- #: includes/class-wcj-max-products-per-user.php:132
1635
  msgid "Qty Bought"
1636
  msgstr ""
1637
 
1638
- #: includes/class-wcj-max-products-per-user.php:135
1639
  #: includes/functions/wcj-functions-users.php:151
1640
  #: includes/functions/wcj-functions-users.php:171
1641
  msgid "Guest"
1642
  msgstr ""
1643
 
1644
- #: includes/class-wcj-max-products-per-user.php:144
1645
  msgid "No data yet."
1646
  msgstr ""
1647
 
1648
- #: includes/class-wcj-max-products-per-user.php:263
1649
- #: includes/settings/wcj-settings-max-products-per-user.php:63
1650
  msgid ""
1651
  "You can only buy maximum %max_qty% pcs. of %product_title% (you already "
1652
  "bought %qty_already_bought% pcs.)."
@@ -2114,35 +2120,35 @@ msgstr ""
2114
  msgid "Set min/max product quantities in WooCommerce order."
2115
  msgstr ""
2116
 
2117
- #: includes/class-wcj-order-quantities.php:120
2118
  #: includes/settings/wcj-settings-order-quantities.php:224
2119
  msgid ""
2120
  "Only one item can be added to the cart. Clear the cart or finish the order, "
2121
  "before adding another item to the cart."
2122
  msgstr ""
2123
 
2124
- #: includes/class-wcj-order-quantities.php:283
2125
  #: includes/settings/wcj-settings-order-quantities.php:96
2126
  msgid ""
2127
  "Maximum allowed order quantity is %max_cart_total_quantity%. Your current "
2128
  "order quantity is %cart_total_quantity%."
2129
  msgstr ""
2130
 
2131
- #: includes/class-wcj-order-quantities.php:291
2132
  #: includes/settings/wcj-settings-order-quantities.php:38
2133
  msgid ""
2134
  "Minimum allowed order quantity is %min_cart_total_quantity%. Your current "
2135
  "order quantity is %cart_total_quantity%."
2136
  msgstr ""
2137
 
2138
- #: includes/class-wcj-order-quantities.php:301
2139
  #: includes/settings/wcj-settings-order-quantities.php:122
2140
  msgid ""
2141
  "Maximum allowed quantity for %product_title% is %max_per_item_quantity%. "
2142
  "Your current item quantity is %item_quantity%."
2143
  msgstr ""
2144
 
2145
- #: includes/class-wcj-order-quantities.php:311
2146
  #: includes/settings/wcj-settings-order-quantities.php:64
2147
  msgid ""
2148
  "Minimum allowed quantity for %product_title% is %min_per_item_quantity%. "
@@ -2260,12 +2266,12 @@ msgstr ""
2260
  msgid "Maximum amount for %gateway_title% is %max_amount%"
2261
  msgstr ""
2262
 
2263
- #: includes/class-wcj-payment-gateways-per-category.php:24
2264
  #: includes/admin/class-wc-settings-jetpack.php:478
2265
  msgid "Gateways per Product or Category"
2266
  msgstr ""
2267
 
2268
- #: includes/class-wcj-payment-gateways-per-category.php:25
2269
  msgid ""
2270
  "Show payment gateway only if there is selected product or product category "
2271
  "in cart."
@@ -2363,19 +2369,19 @@ msgstr ""
2363
  msgid "Booster: %s."
2364
  msgstr ""
2365
 
2366
- #: includes/class-wcj-pdf-invoicing.php:451
2367
  msgid "You are not allowed to view the invoice."
2368
  msgstr ""
2369
 
2370
- #: includes/class-wcj-price-by-country.php:23
2371
  msgid "Prices and Currencies by Country"
2372
  msgstr ""
2373
 
2374
- #: includes/class-wcj-price-by-country.php:24
2375
  msgid "Change product price and currency automatically by customer's country."
2376
  msgstr ""
2377
 
2378
- #: includes/class-wcj-price-by-country.php:92
2379
  msgid "Price filter widget product prices recalculated."
2380
  msgstr ""
2381
 
@@ -2454,17 +2460,15 @@ msgstr ""
2454
  #: includes/settings/wcj-settings-add-to-cart.php:51
2455
  #: includes/settings/wcj-settings-address-formats.php:20
2456
  #: includes/settings/wcj-settings-admin-bar.php:20
2457
- #: includes/settings/wcj-settings-admin-bar.php:27
2458
- #: includes/settings/wcj-settings-admin-bar.php:34
2459
- #: includes/settings/wcj-settings-admin-tools.php:20
2460
- #: includes/settings/wcj-settings-admin-tools.php:27
2461
- #: includes/settings/wcj-settings-admin-tools.php:36
2462
- #: includes/settings/wcj-settings-admin-tools.php:62
2463
- #: includes/settings/wcj-settings-admin-tools.php:69
2464
- #: includes/settings/wcj-settings-admin-tools.php:76
2465
- #: includes/settings/wcj-settings-admin-tools.php:92
2466
- #: includes/settings/wcj-settings-admin-tools.php:99
2467
- #: includes/settings/wcj-settings-admin-tools.php:106
2468
  #: includes/settings/wcj-settings-breadcrumbs.php:20
2469
  #: includes/settings/wcj-settings-call-for-price.php:79
2470
  #: includes/settings/wcj-settings-cart-customization.php:34
@@ -2476,6 +2480,8 @@ msgstr ""
2476
  #: includes/settings/wcj-settings-checkout-customization.php:27
2477
  #: includes/settings/wcj-settings-checkout-customization.php:151
2478
  #: includes/settings/wcj-settings-checkout-customization.php:174
 
 
2479
  #: includes/settings/wcj-settings-checkout-fees.php:41
2480
  #: includes/settings/wcj-settings-checkout-fees.php:71
2481
  #: includes/settings/wcj-settings-checkout-files-upload.php:227
@@ -2496,19 +2502,21 @@ msgstr ""
2496
  #: includes/settings/wcj-settings-currency-per-product.php:104
2497
  #: includes/settings/wcj-settings-currency-per-product.php:258
2498
  #: includes/settings/wcj-settings-custom-css.php:44
 
 
 
2499
  #: includes/settings/wcj-settings-emails-verification.php:28
2500
  #: includes/settings/wcj-settings-emails-verification.php:36
2501
- #: includes/settings/wcj-settings-general.php:22
2502
- #: includes/settings/wcj-settings-general.php:46
2503
- #: includes/settings/wcj-settings-general.php:62
2504
- #: includes/settings/wcj-settings-general.php:123
2505
- #: includes/settings/wcj-settings-general.php:174
2506
  #: includes/settings/wcj-settings-global-discount.php:52
2507
  #: includes/settings/wcj-settings-global-discount.php:181
2508
  #: includes/settings/wcj-settings-left-to-free-shipping.php:28
2509
  #: includes/settings/wcj-settings-left-to-free-shipping.php:57
2510
  #: includes/settings/wcj-settings-left-to-free-shipping.php:91
2511
- #: includes/settings/wcj-settings-max-products-per-user.php:69
2512
  #: includes/settings/wcj-settings-more-button-labels.php:28
2513
  #: includes/settings/wcj-settings-multicurrency-base-price.php:38
2514
  #: includes/settings/wcj-settings-multicurrency-base-price.php:53
@@ -2535,8 +2543,9 @@ msgstr ""
2535
  #: includes/settings/wcj-settings-orders.php:105
2536
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:23
2537
  #: includes/settings/wcj-settings-payment-gateways-currency.php:93
2538
- #: includes/settings/wcj-settings-payment-gateways-fees.php:66
2539
- #: includes/settings/wcj-settings-payment-gateways-fees.php:82
 
2540
  #: includes/settings/wcj-settings-pdf-invoicing-advanced.php:55
2541
  #: includes/settings/wcj-settings-pdf-invoicing-display.php:118
2542
  #: includes/settings/wcj-settings-pdf-invoicing-footer.php:23
@@ -2589,9 +2598,9 @@ msgstr ""
2589
  #: includes/settings/wcj-settings-product-input-fields.php:318
2590
  #: includes/settings/wcj-settings-product-input-fields.php:336
2591
  #: includes/settings/wcj-settings-product-input-fields.php:344
2592
- #: includes/settings/wcj-settings-product-open-pricing.php:100
2593
- #: includes/settings/wcj-settings-product-open-pricing.php:107
2594
- #: includes/settings/wcj-settings-product-open-pricing.php:128
2595
  #: includes/settings/wcj-settings-product-price-by-formula.php:30
2596
  #: includes/settings/wcj-settings-product-tabs.php:43
2597
  #: includes/settings/wcj-settings-product-tabs.php:232
@@ -2640,7 +2649,7 @@ msgstr ""
2640
  #: includes/settings/wcj-settings-wpml.php:45
2641
  #: includes/settings/meta-box/wcj-settings-meta-box-product-add-to-cart.php:68
2642
  #: includes/settings/meta-box/wcj-settings-meta-box-product-addons.php:35
2643
- #: includes/settings/meta-box/wcj-settings-meta-box-related-products.php:18
2644
  #: includes/settings/meta-box/wcj-settings-meta-box-sale-flash.php:14
2645
  msgid "Enable"
2646
  msgstr ""
@@ -2775,7 +2784,7 @@ msgid "\"Date to\" must be after \"Date from\""
2775
  msgstr ""
2776
 
2777
  #: includes/class-wcj-product-bookings.php:148
2778
- #: includes/class-wcj-product-open-pricing.php:225
2779
  #: includes/settings/wcj-settings-add-to-cart.php:140
2780
  #: includes/settings/wcj-settings-add-to-cart.php:167
2781
  #: includes/settings/wcj-settings-add-to-cart.php:202
@@ -3300,7 +3309,6 @@ msgstr ""
3300
  #: includes/settings/wcj-settings-multicurrency-base-price.php:17
3301
  #: includes/settings/wcj-settings-payment-gateways-currency.php:61
3302
  #: includes/settings/wcj-settings-payment-gateways-icons.php:14
3303
- #: includes/settings/wcj-settings-payment-gateways-per-category.php:18
3304
  #: includes/settings/wcj-settings-price-by-user-role.php:14
3305
  #: includes/settings/wcj-settings-product-addons.php:173
3306
  #: includes/settings/wcj-settings-product-bookings.php:86
@@ -3391,7 +3399,7 @@ msgstr ""
3391
 
3392
  #: includes/class-wcj-product-info.php:242
3393
  #: includes/settings/wcj-settings-cart.php:51
3394
- #: includes/settings/wcj-settings-checkout-custom-info.php:47
3395
  #: includes/settings/wcj-settings-checkout-files-upload.php:52
3396
  #: includes/settings/wcj-settings-left-to-free-shipping.php:42
3397
  #: includes/settings/wcj-settings-left-to-free-shipping.php:73
@@ -3493,11 +3501,11 @@ msgstr ""
3493
  msgid "Let your store customers enter price for the product manually."
3494
  msgstr ""
3495
 
3496
- #: includes/class-wcj-product-open-pricing.php:70
3497
  msgid "Open Pricing"
3498
  msgstr ""
3499
 
3500
- #: includes/class-wcj-product-open-pricing.php:186
3501
  msgid ""
3502
  "Booster: Free plugin's version is limited to only one open pricing product "
3503
  "enabled at a time. You will need to get <a href=\"https://booster.io/plus/\" "
@@ -3505,22 +3513,22 @@ msgid ""
3505
  "products."
3506
  msgstr ""
3507
 
3508
- #: includes/class-wcj-product-open-pricing.php:281
3509
  #: includes/settings/wcj-settings-product-open-pricing.php:73
3510
  msgid "Price is required!"
3511
  msgstr ""
3512
 
3513
- #: includes/class-wcj-product-open-pricing.php:285
3514
- #: includes/settings/wcj-settings-product-open-pricing.php:80
3515
  msgid "Entered price is too small!"
3516
  msgstr ""
3517
 
3518
- #: includes/class-wcj-product-open-pricing.php:291
3519
- #: includes/settings/wcj-settings-product-open-pricing.php:87
3520
  msgid "Entered price is too big!"
3521
  msgstr ""
3522
 
3523
- #: includes/class-wcj-product-open-pricing.php:351
3524
  #: includes/settings/wcj-settings-product-open-pricing.php:29
3525
  msgid "Name Your Price"
3526
  msgstr ""
@@ -3533,11 +3541,11 @@ msgstr ""
3533
  msgid "Set formula for automatic product price calculation."
3534
  msgstr ""
3535
 
3536
- #: includes/class-wcj-product-price-by-formula.php:109
3537
  msgid "Error in formula"
3538
  msgstr ""
3539
 
3540
- #: includes/class-wcj-product-price-by-formula.php:201
3541
  msgid ""
3542
  "Booster: Free plugin's version is limited to only one price by formula "
3543
  "product enabled at a time. You will need to get <a href=\"https://booster.io/"
@@ -3545,7 +3553,7 @@ msgid ""
3545
  "by formula products."
3546
  msgstr ""
3547
 
3548
- #: includes/class-wcj-product-price-by-formula.php:233
3549
  msgid "Final Price Preview"
3550
  msgstr ""
3551
 
@@ -3591,7 +3599,7 @@ msgstr ""
3591
  #: includes/settings/wcj-settings-add-to-cart-button-visibility.php:122
3592
  #: includes/settings/wcj-settings-add-to-cart-button-visibility.php:138
3593
  #: includes/settings/wcj-settings-cart.php:44
3594
- #: includes/settings/wcj-settings-checkout-custom-info.php:40
3595
  #: includes/settings/wcj-settings-left-to-free-shipping.php:34
3596
  #: includes/settings/wcj-settings-left-to-free-shipping.php:65
3597
  #: includes/settings/wcj-settings-left-to-free-shipping.php:99
@@ -3626,6 +3634,7 @@ msgstr ""
3626
  #: includes/settings/wcj-settings-admin-orders-list.php:84
3627
  #: includes/settings/wcj-settings-checkout-custom-fields.php:265
3628
  #: includes/settings/wcj-settings-product-addons.php:225
 
3629
  #: includes/settings/meta-box/wcj-settings-meta-box-custom-css.php:20
3630
  #: includes/settings/meta-box/wcj-settings-meta-box-multicurrency.php:60
3631
  #: includes/settings/meta-box/wcj-settings-meta-box-offer-price.php:20
@@ -3638,12 +3647,12 @@ msgstr ""
3638
  #: includes/settings/meta-box/wcj-settings-meta-box-product-addons.php:41
3639
  #: includes/settings/meta-box/wcj-settings-meta-box-product-addons.php:117
3640
  #: includes/settings/meta-box/wcj-settings-meta-box-product-bookings.php:20
3641
- #: includes/settings/meta-box/wcj-settings-meta-box-product-images.php:33
3642
- #: includes/settings/meta-box/wcj-settings-meta-box-product-images.php:43
3643
- #: includes/settings/meta-box/wcj-settings-meta-box-product-images.php:53
3644
  #: includes/settings/meta-box/wcj-settings-meta-box-product-open-pricing.php:20
3645
  #: includes/settings/meta-box/wcj-settings-meta-box-product-price-by-formula.php:19
3646
- #: includes/settings/meta-box/wcj-settings-meta-box-related-products.php:24
3647
  #: includes/settings/meta-box/wcj-settings-meta-box-sale-flash.php:20
3648
  #: includes/settings/meta-box/wcj-settings-meta-box-wholesale-price.php:32
3649
  #: includes/widgets/class-wcj-widget-country-switcher.php:82
@@ -3660,6 +3669,7 @@ msgstr ""
3660
  #: includes/settings/wcj-settings-eu-vat-number.php:111
3661
  #: includes/settings/wcj-settings-eu-vat-number.php:130
3662
  #: includes/settings/wcj-settings-product-addons.php:224
 
3663
  #: includes/settings/meta-box/wcj-settings-meta-box-custom-css.php:19
3664
  #: includes/settings/meta-box/wcj-settings-meta-box-multicurrency.php:61
3665
  #: includes/settings/meta-box/wcj-settings-meta-box-offer-price.php:19
@@ -3672,12 +3682,12 @@ msgstr ""
3672
  #: includes/settings/meta-box/wcj-settings-meta-box-product-addons.php:40
3673
  #: includes/settings/meta-box/wcj-settings-meta-box-product-addons.php:116
3674
  #: includes/settings/meta-box/wcj-settings-meta-box-product-bookings.php:19
3675
- #: includes/settings/meta-box/wcj-settings-meta-box-product-images.php:32
3676
- #: includes/settings/meta-box/wcj-settings-meta-box-product-images.php:42
3677
- #: includes/settings/meta-box/wcj-settings-meta-box-product-images.php:52
3678
  #: includes/settings/meta-box/wcj-settings-meta-box-product-open-pricing.php:19
3679
  #: includes/settings/meta-box/wcj-settings-meta-box-product-price-by-formula.php:18
3680
- #: includes/settings/meta-box/wcj-settings-meta-box-related-products.php:25
3681
  #: includes/settings/meta-box/wcj-settings-meta-box-sale-flash.php:19
3682
  #: includes/settings/meta-box/wcj-settings-meta-box-wholesale-price.php:31
3683
  #: includes/widgets/class-wcj-widget-country-switcher.php:83
@@ -3709,7 +3719,7 @@ msgstr ""
3709
  msgid "Add \"products per page\" selector to WooCommerce."
3710
  msgstr ""
3711
 
3712
- #: includes/class-wcj-products-per-page.php:84
3713
  #: includes/settings/wcj-settings-products-per-page.php:63
3714
  msgid ""
3715
  "Products <strong>%from% - %to%</strong> from <strong>%total%</strong>. "
@@ -3814,7 +3824,7 @@ msgstr ""
3814
  #: includes/class-wcj-related-products.php:38
3815
  #: includes/admin/class-wc-settings-jetpack.php:483
3816
  #: includes/settings/wcj-settings-free-price.php:20
3817
- #: includes/settings/meta-box/wcj-settings-meta-box-related-products.php:29
3818
  msgid "Related Products"
3819
  msgstr ""
3820
 
@@ -3828,10 +3838,10 @@ msgstr ""
3828
  #: includes/class-wcj-related-products.php:42
3829
  #, php-format
3830
  msgid ""
3831
- "You may need to <a class=\"button\" href=\"%s\">clear all products "
3832
- "transients</a> to immediately see results on frontend after changing "
3833
- "module's settings. Alternatively you can just update each product "
3834
- "individually to clear its transients."
3835
  msgstr ""
3836
 
3837
  #: includes/class-wcj-reports.php:34
@@ -4043,7 +4053,7 @@ msgid ""
4043
  msgstr ""
4044
 
4045
  #: includes/class-wcj-shipping-by-time.php:33
4046
- msgid "Time"
4047
  msgstr ""
4048
 
4049
  #: includes/class-wcj-shipping-by-time.php:34
@@ -4815,7 +4825,7 @@ msgid "Unexpected error"
4815
  msgstr ""
4816
 
4817
  #: includes/classes/class-wcj-shortcodes.php:109
4818
- #: includes/shortcodes/class-wcj-shortcodes-general.php:501
4819
  #, php-format
4820
  msgid "\"%s\" module is not enabled!"
4821
  msgstr ""
@@ -4874,22 +4884,22 @@ msgstr ""
4874
  msgid "[{site_title}] Custom Subject - Order ({order_number}) - {order_date}"
4875
  msgstr ""
4876
 
4877
- #: includes/emails/class-wc-email-wcj-custom.php:218
4878
  #, php-format
4879
  msgid "New order (%s)"
4880
  msgstr ""
4881
 
4882
- #: includes/emails/class-wc-email-wcj-custom.php:219
4883
  #, php-format
4884
  msgid "Order status updated to %s"
4885
  msgstr ""
4886
 
4887
- #: includes/emails/class-wc-email-wcj-custom.php:222
4888
  #, php-format
4889
  msgid "Order status %s to %s"
4890
  msgstr ""
4891
 
4892
- #: includes/emails/class-wc-email-wcj-custom.php:229
4893
  #: includes/gateways/class-wc-gateway-wcj-custom.php:48
4894
  #: includes/settings/wcj-settings-admin-products-list.php:19
4895
  #: includes/settings/wcj-settings-admin-products-list.php:75
@@ -4899,15 +4909,15 @@ msgstr ""
4899
  msgid "Enable/Disable"
4900
  msgstr ""
4901
 
4902
- #: includes/emails/class-wc-email-wcj-custom.php:231
4903
  msgid "Enable this email notification"
4904
  msgstr ""
4905
 
4906
- #: includes/emails/class-wc-email-wcj-custom.php:235
4907
  msgid "Trigger(s)"
4908
  msgstr ""
4909
 
4910
- #: includes/emails/class-wc-email-wcj-custom.php:239
4911
  msgid ""
4912
  "Please note, that all new orders in WooCommerce by default are created with "
4913
  "Pending Payment status. If you want to change the default order status - you "
@@ -4915,103 +4925,103 @@ msgid ""
4915
  "Settings > Booster > Shipping & Orders > Order Custom Statuses)."
4916
  msgstr ""
4917
 
4918
- #: includes/emails/class-wc-email-wcj-custom.php:242
4919
  msgid "New order (Any status)"
4920
  msgstr ""
4921
 
4922
- #: includes/emails/class-wc-email-wcj-custom.php:247
4923
  msgid "Reset password notification"
4924
  msgstr ""
4925
 
4926
- #: includes/emails/class-wc-email-wcj-custom.php:248
4927
  msgid "Order fully refunded notification"
4928
  msgstr ""
4929
 
4930
- #: includes/emails/class-wc-email-wcj-custom.php:249
4931
  msgid "Order partially refunded notification"
4932
  msgstr ""
4933
 
4934
- #: includes/emails/class-wc-email-wcj-custom.php:250
4935
  msgid "New customer note notification"
4936
  msgstr ""
4937
 
4938
- #: includes/emails/class-wc-email-wcj-custom.php:251
4939
  msgid "Low stock notification"
4940
  msgstr ""
4941
 
4942
- #: includes/emails/class-wc-email-wcj-custom.php:252
4943
  msgid "No stock notification"
4944
  msgstr ""
4945
 
4946
- #: includes/emails/class-wc-email-wcj-custom.php:253
4947
  msgid "Product on backorder notification"
4948
  msgstr ""
4949
 
4950
- #: includes/emails/class-wc-email-wcj-custom.php:254
4951
  msgid "Created customer notification"
4952
  msgstr ""
4953
 
4954
- #: includes/emails/class-wc-email-wcj-custom.php:261
4955
  msgid "Recipient(s)"
4956
  msgstr ""
4957
 
4958
- #: includes/emails/class-wc-email-wcj-custom.php:263
4959
  #, php-format
4960
  msgid ""
4961
  "Enter recipients (comma separated) for this email. Defaults to <code>%s</"
4962
  "code>."
4963
  msgstr ""
4964
 
4965
- #: includes/emails/class-wc-email-wcj-custom.php:264
4966
  msgid "Or enter <code>%customer%</code> to send to customer billing email."
4967
  msgstr ""
4968
 
4969
- #: includes/emails/class-wc-email-wcj-custom.php:270
4970
  msgid "Subject"
4971
  msgstr ""
4972
 
4973
- #: includes/emails/class-wc-email-wcj-custom.php:272
4974
  #, php-format
4975
  msgid ""
4976
  "This controls the email subject line. Leave blank to use the default "
4977
  "subject: <code>%s</code>."
4978
  msgstr ""
4979
 
4980
- #: includes/emails/class-wc-email-wcj-custom.php:278
4981
  msgid "Email type"
4982
  msgstr ""
4983
 
4984
- #: includes/emails/class-wc-email-wcj-custom.php:280
4985
  msgid "Choose which format of email to send."
4986
  msgstr ""
4987
 
4988
- #: includes/emails/class-wc-email-wcj-custom.php:286
4989
  msgid "Wrap in WC Email Template"
4990
  msgstr ""
4991
 
4992
- #: includes/emails/class-wc-email-wcj-custom.php:292
4993
  msgid ""
4994
  "WC Email Heading. Used only if \"Wrap in WC Email Template\" is enabled and "
4995
  "only for HTML templates."
4996
  msgstr ""
4997
 
4998
- #: includes/emails/class-wc-email-wcj-custom.php:293
4999
  #, php-format
5000
  msgid ""
5001
  "This controls the main heading contained within the email notification. "
5002
  "Leave blank to use the default heading: <code>%s</code>."
5003
  msgstr ""
5004
 
5005
- #: includes/emails/class-wc-email-wcj-custom.php:299
5006
  msgid "HTML template"
5007
  msgstr ""
5008
 
5009
- #: includes/emails/class-wc-email-wcj-custom.php:301
5010
- #: includes/emails/class-wc-email-wcj-custom.php:310
5011
  msgid "You can use shortcodes here. E.g. Booster's order shortcodes."
5012
  msgstr ""
5013
 
5014
- #: includes/emails/class-wc-email-wcj-custom.php:308
5015
  msgid "Plain text template"
5016
  msgstr ""
5017
 
@@ -5171,6 +5181,7 @@ msgstr ""
5171
 
5172
  #: includes/export/class-wcj-fields-helper.php:112
5173
  #: includes/export/class-wcj-fields-helper.php:195
 
5174
  msgid "Order Status"
5175
  msgstr ""
5176
 
@@ -7988,16 +7999,16 @@ msgstr ""
7988
  #: includes/settings/wcj-settings-add-to-cart-button-visibility.php:30
7989
  #: includes/settings/wcj-settings-add-to-cart-button-visibility.php:56
7990
  #: includes/settings/wcj-settings-general.php:30
7991
- #: includes/settings/wcj-settings-general.php:79
7992
- #: includes/settings/wcj-settings-general.php:93
7993
- #: includes/settings/wcj-settings-general.php:100
7994
- #: includes/settings/wcj-settings-general.php:107
7995
  #: includes/settings/wcj-settings-pdf-invoicing-advanced.php:84
7996
  #: includes/settings/wcj-settings-pdf-invoicing-advanced.php:109
7997
  #: includes/settings/wcj-settings-price-by-user-role.php:56
7998
  #: includes/settings/wcj-settings-price-by-user-role.php:96
7999
  #: includes/settings/wcj-settings-product-add-to-cart.php:131
8000
- #: includes/settings/wcj-settings-product-open-pricing.php:93
8001
  #: includes/settings/wcj-settings-sku.php:283
8002
  #: includes/settings/meta-box/wcj-settings-meta-box-product-add-to-cart.php:67
8003
  msgid "Disable"
@@ -8090,7 +8101,7 @@ msgstr ""
8090
  #: includes/settings/wcj-settings-add-to-cart.php:21
8091
  #: includes/settings/wcj-settings-add-to-cart.php:92
8092
  #: includes/settings/wcj-settings-add-to-cart.php:110
8093
- #: includes/settings/wcj-settings-general.php:140
8094
  #: includes/settings/wcj-settings-shipping-calculator.php:69
8095
  #: includes/settings/wcj-settings-sorting.php:20
8096
  #: includes/settings/wcj-settings-sorting.php:99
@@ -8293,11 +8304,19 @@ msgstr ""
8293
  msgid "\"WooCommerce\" Admin Bar"
8294
  msgstr ""
8295
 
8296
- #: includes/settings/wcj-settings-admin-bar.php:26
 
 
 
 
 
 
 
 
8297
  msgid "\"Booster\" Admin Bar"
8298
  msgstr ""
8299
 
8300
- #: includes/settings/wcj-settings-admin-bar.php:33
8301
  msgid "\"Booster: Active\" Admin Bar"
8302
  msgstr ""
8303
 
@@ -8413,8 +8432,8 @@ msgstr ""
8413
  #: includes/settings/wcj-settings-product-images.php:27
8414
  #: includes/settings/wcj-settings-product-images.php:34
8415
  #: includes/settings/wcj-settings-product-images.php:41
8416
- #: includes/settings/wcj-settings-related-products.php:173
8417
- #: includes/settings/wcj-settings-related-products.php:179
8418
  #: includes/settings/wcj-settings-sale-flash.php:35
8419
  #: includes/settings/wcj-settings-sale-flash.php:42
8420
  #: includes/settings/wcj-settings-sale-flash.php:49
@@ -8495,80 +8514,90 @@ msgstr ""
8495
  msgid "Show Booster Menus Only to Admin"
8496
  msgstr ""
8497
 
8498
- #: includes/settings/wcj-settings-admin-tools.php:26
8499
- msgid "Suppress Admin Connect Notice"
 
 
8500
  msgstr ""
8501
 
8502
  #: includes/settings/wcj-settings-admin-tools.php:28
 
 
 
 
8503
  #, php-format
8504
  msgid "Will remove \"%s\" admin notice."
8505
  msgstr ""
8506
 
8507
- #: includes/settings/wcj-settings-admin-tools.php:29
8508
  msgid ""
8509
  "Connect your store to WooCommerce.com to receive extensions updates and "
8510
  "support."
8511
  msgstr ""
8512
 
8513
- #: includes/settings/wcj-settings-admin-tools.php:35
8514
  msgid "Suppress Admin Notices"
8515
  msgstr ""
8516
 
8517
- #: includes/settings/wcj-settings-admin-tools.php:37
8518
  msgid "Will remove admin notices (including the Connect notice)."
8519
  msgstr ""
8520
 
8521
- #: includes/settings/wcj-settings-admin-tools.php:43
8522
- msgid "PHP Memory Limit"
8523
  msgstr ""
8524
 
8525
- #: includes/settings/wcj-settings-admin-tools.php:44
8526
- msgid "megabytes."
8527
- msgstr ""
8528
-
8529
- #: includes/settings/wcj-settings-admin-tools.php:45
8530
  #: includes/settings/wcj-settings-admin-tools.php:54
8531
- #: includes/settings/wcj-settings-offer-price.php:172
8532
- #: includes/settings/wcj-settings-offer-price.php:180
8533
- #: includes/settings/meta-box/wcj-settings-meta-box-offer-price.php:43
8534
- #: includes/settings/meta-box/wcj-settings-meta-box-offer-price.php:52
8535
- msgid "Set zero to disable."
8536
  msgstr ""
8537
 
8538
- #: includes/settings/wcj-settings-admin-tools.php:52
8539
- msgid "PHP Time Limit"
8540
  msgstr ""
8541
 
8542
- #: includes/settings/wcj-settings-admin-tools.php:53
8543
- msgid "seconds."
8544
  msgstr ""
8545
 
8546
- #: includes/settings/wcj-settings-admin-tools.php:61
8547
- msgid "Show Order Meta"
8548
  msgstr ""
8549
 
8550
- #: includes/settings/wcj-settings-admin-tools.php:68
8551
- msgid "Show Product Meta"
8552
  msgstr ""
8553
 
8554
- #: includes/settings/wcj-settings-admin-tools.php:75
8555
  msgid "Show Variable Product Pricing Table"
8556
  msgstr ""
8557
 
8558
- #: includes/settings/wcj-settings-admin-tools.php:86
8559
- msgid "Debug Tools Options"
8560
  msgstr ""
8561
 
8562
- #: includes/settings/wcj-settings-admin-tools.php:98
8563
- msgid "WooCommerce Log"
8564
  msgstr ""
8565
 
8566
- #: includes/settings/wcj-settings-admin-tools.php:105
8567
- msgid "Debug"
8568
  msgstr ""
8569
 
8570
- #: includes/settings/wcj-settings-admin-tools.php:112
8571
- msgid "System Info"
 
 
 
 
 
 
 
 
 
 
 
 
 
8572
  msgstr ""
8573
 
8574
  #: includes/settings/wcj-settings-breadcrumbs.php:19
@@ -8689,7 +8718,7 @@ msgid ""
8689
  msgstr ""
8690
 
8691
  #: includes/settings/wcj-settings-cart.php:24
8692
- #: includes/settings/wcj-settings-checkout-custom-info.php:19
8693
  #: includes/settings/wcj-settings-mini-cart.php:19
8694
  #: includes/settings/wcj-settings-my-account.php:182
8695
  #: includes/settings/wcj-settings-product-custom-info.php:53
@@ -8697,14 +8726,14 @@ msgid "Total Blocks"
8697
  msgstr ""
8698
 
8699
  #: includes/settings/wcj-settings-cart.php:39
8700
- #: includes/settings/wcj-settings-checkout-custom-info.php:35
8701
  #: includes/settings/wcj-settings-mini-cart.php:34
8702
  #: includes/settings/wcj-settings-my-account.php:197
8703
  msgid "Info Block"
8704
  msgstr ""
8705
 
8706
  #: includes/settings/wcj-settings-cart.php:58
8707
- #: includes/settings/wcj-settings-checkout-custom-info.php:84
8708
  #: includes/settings/wcj-settings-mini-cart.php:57
8709
  #: includes/settings/wcj-settings-my-account.php:255
8710
  #: includes/settings/wcj-settings-product-custom-info.php:125
@@ -8736,6 +8765,7 @@ msgstr ""
8736
  #: includes/settings/wcj-settings-payment-gateways-by-country.php:15
8737
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:17
8738
  #: includes/settings/wcj-settings-payment-gateways-min-max.php:15
 
8739
  #: includes/settings/wcj-settings-price-formats.php:15
8740
  #: includes/settings/wcj-settings-product-tabs.php:15
8741
  #: includes/settings/wcj-settings-shipping-by-condition.php:20
@@ -8946,7 +8976,7 @@ msgid "Section"
8946
  msgstr ""
8947
 
8948
  #: includes/settings/wcj-settings-checkout-custom-fields.php:192
8949
- #: includes/settings/wcj-settings-checkout-custom-info.php:55
8950
  #: includes/settings/wcj-settings-left-to-free-shipping.php:114
8951
  msgid "Billing"
8952
  msgstr ""
@@ -8998,12 +9028,6 @@ msgstr ""
8998
  msgid "select2: Number of characters necessary to start a search."
8999
  msgstr ""
9000
 
9001
- #: includes/settings/wcj-settings-checkout-custom-fields.php:240
9002
- #: includes/settings/wcj-settings-checkout-custom-fields.php:249
9003
- #: includes/settings/wcj-settings-order-quantities.php:187
9004
- msgid "Ignored if set to zero."
9005
- msgstr ""
9006
-
9007
  #: includes/settings/wcj-settings-checkout-custom-fields.php:247
9008
  msgid "select2: max input length"
9009
  msgstr ""
@@ -9103,9 +9127,9 @@ msgstr ""
9103
 
9104
  #: includes/settings/wcj-settings-checkout-custom-fields.php:360
9105
  #: includes/settings/wcj-settings-global-discount.php:158
9106
- #: includes/settings/wcj-settings-payment-gateways-fees.php:116
9107
  #: includes/settings/wcj-settings-product-addons.php:149
9108
- #: includes/settings/wcj-settings-related-products.php:233
9109
  msgid "Exclude Products"
9110
  msgstr ""
9111
 
@@ -9115,7 +9139,7 @@ msgstr ""
9115
 
9116
  #: includes/settings/wcj-settings-checkout-custom-fields.php:369
9117
  #: includes/settings/wcj-settings-global-discount.php:147
9118
- #: includes/settings/wcj-settings-related-products.php:222
9119
  msgid "Include Products"
9120
  msgstr ""
9121
 
@@ -9143,50 +9167,50 @@ msgid ""
9143
  "disable."
9144
  msgstr ""
9145
 
9146
- #: includes/settings/wcj-settings-checkout-custom-info.php:14
9147
  msgid "Checkout Custom Info Blocks"
9148
  msgstr ""
9149
 
9150
- #: includes/settings/wcj-settings-checkout-custom-info.php:53
9151
  #: includes/settings/wcj-settings-checkout-files-upload.php:56
9152
  #: includes/settings/wcj-settings-empty-cart.php:68
9153
  #: includes/settings/wcj-settings-left-to-free-shipping.php:112
9154
  msgid "Before checkout form"
9155
  msgstr ""
9156
 
9157
- #: includes/settings/wcj-settings-checkout-custom-info.php:54
9158
  #: includes/settings/wcj-settings-left-to-free-shipping.php:113
9159
  msgid "Before customer details"
9160
  msgstr ""
9161
 
9162
- #: includes/settings/wcj-settings-checkout-custom-info.php:57
9163
  #: includes/settings/wcj-settings-left-to-free-shipping.php:116
9164
  msgid "After customer details"
9165
  msgstr ""
9166
 
9167
- #: includes/settings/wcj-settings-checkout-custom-info.php:58
9168
  #: includes/settings/wcj-settings-left-to-free-shipping.php:117
9169
  msgid "Before order review"
9170
  msgstr ""
9171
 
9172
- #: includes/settings/wcj-settings-checkout-custom-info.php:59
9173
  #: includes/settings/wcj-settings-left-to-free-shipping.php:118
9174
  msgid "Order review"
9175
  msgstr ""
9176
 
9177
- #: includes/settings/wcj-settings-checkout-custom-info.php:60
9178
  #: includes/settings/wcj-settings-left-to-free-shipping.php:121
9179
  msgid "After order review"
9180
  msgstr ""
9181
 
9182
- #: includes/settings/wcj-settings-checkout-custom-info.php:61
9183
  #: includes/settings/wcj-settings-checkout-files-upload.php:57
9184
  #: includes/settings/wcj-settings-empty-cart.php:69
9185
  #: includes/settings/wcj-settings-left-to-free-shipping.php:122
9186
  msgid "After checkout form"
9187
  msgstr ""
9188
 
9189
- #: includes/settings/wcj-settings-checkout-custom-info.php:80
9190
  msgid "Order Received (Thank You) page"
9191
  msgstr ""
9192
 
@@ -9382,6 +9406,44 @@ msgstr ""
9382
  msgid "\"Returning customer?\" Message Options"
9383
  msgstr ""
9384
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9385
  #: includes/settings/wcj-settings-checkout-fees.php:14
9386
  msgid "Fees"
9387
  msgstr ""
@@ -9392,7 +9454,7 @@ msgstr ""
9392
 
9393
  #: includes/settings/wcj-settings-checkout-fees.php:58
9394
  #: includes/settings/wcj-settings-global-discount.php:65
9395
- #: includes/settings/wcj-settings-payment-gateways-fees.php:36
9396
  #: includes/settings/wcj-settings-price-by-user-role.php:32
9397
  #: includes/settings/wcj-settings-purchase-data.php:77
9398
  #: includes/settings/wcj-settings-wholesale-price.php:79
@@ -9402,7 +9464,7 @@ msgstr ""
9402
 
9403
  #: includes/settings/wcj-settings-checkout-fees.php:59
9404
  #: includes/settings/wcj-settings-global-discount.php:64
9405
- #: includes/settings/wcj-settings-payment-gateways-fees.php:37
9406
  #: includes/settings/wcj-settings-purchase-data.php:78
9407
  #: includes/settings/wcj-settings-wholesale-price.php:78
9408
  #: includes/settings/meta-box/wcj-settings-meta-box-wholesale-price.php:18
@@ -9410,7 +9472,7 @@ msgid "Percent"
9410
  msgstr ""
9411
 
9412
  #: includes/settings/wcj-settings-checkout-fees.php:70
9413
- #: includes/settings/wcj-settings-payment-gateways-fees.php:81
9414
  msgid "Taxable"
9415
  msgstr ""
9416
 
@@ -9696,7 +9758,7 @@ msgstr ""
9696
  #: includes/settings/wcj-settings-checkout-files-upload.php:421
9697
  #: includes/settings/wcj-settings-currency-per-product.php:251
9698
  #: includes/settings/wcj-settings-eu-vat-number.php:203
9699
- #: includes/settings/wcj-settings-general.php:56
9700
  #: includes/settings/wcj-settings-payment-gateways.php:49
9701
  #: includes/settings/wcj-settings-pdf-invoicing-advanced.php:43
9702
  #: includes/settings/wcj-settings-product-by-date.php:117
@@ -10008,7 +10070,7 @@ msgstr ""
10008
 
10009
  #: includes/settings/wcj-settings-currency-exchange-rates.php:60
10010
  #: includes/settings/wcj-settings-offer-price.php:157
10011
- #: includes/settings/wcj-settings-payment-gateways-fees.php:73
10012
  #: includes/settings/wcj-settings-product-by-user.php:70
10013
  #: includes/settings/meta-box/wcj-settings-meta-box-offer-price.php:25
10014
  msgid "Number of decimals"
@@ -10325,6 +10387,38 @@ msgstr ""
10325
  msgid "Automatically created file: %s."
10326
  msgstr ""
10327
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10328
  #: includes/settings/wcj-settings-email-options.php:14
10329
  msgid "Product Info in Item Name"
10330
  msgstr ""
@@ -10795,78 +10889,101 @@ msgstr ""
10795
  msgid "Variations"
10796
  msgstr ""
10797
 
10798
- #: includes/settings/wcj-settings-general.php:15
10799
  msgid "Shortcodes Options"
10800
  msgstr ""
10801
 
10802
- #: includes/settings/wcj-settings-general.php:20
10803
- msgid "Enable All Shortcodes in WordPress Text Widgets"
10804
  msgstr ""
10805
 
10806
- #: includes/settings/wcj-settings-general.php:21
10807
  msgid ""
10808
  "This will enable all (including non Booster's) shortcodes in WordPress text "
10809
  "widgets."
10810
  msgstr ""
10811
 
10812
- #: includes/settings/wcj-settings-general.php:28
10813
- msgid "Disable Booster's Shortcodes"
10814
  msgstr ""
10815
 
10816
- #: includes/settings/wcj-settings-general.php:29
10817
- msgid "Disable all Booster's shortcodes (for memory saving)."
 
 
 
10818
  msgstr ""
10819
 
10820
- #: includes/settings/wcj-settings-general.php:40
10821
  #: includes/settings/wcj-settings-general.php:45
10822
- msgid "Product Revisions"
10823
  msgstr ""
10824
 
10825
- #: includes/settings/wcj-settings-general.php:61
10826
- msgid "Recalculate Cart Totals on Every Page Load"
10827
  msgstr ""
10828
 
10829
- #: includes/settings/wcj-settings-general.php:68
 
 
 
 
 
10830
  msgid "Session Type in Booster"
10831
  msgstr ""
10832
 
10833
- #: includes/settings/wcj-settings-general.php:73
10834
  msgid "Standard PHP sessions"
10835
  msgstr ""
10836
 
10837
- #: includes/settings/wcj-settings-general.php:74
10838
  msgid "WC sessions"
10839
  msgstr ""
10840
 
10841
- #: includes/settings/wcj-settings-general.php:78
10842
- msgid "Disable Loading Datepicker/Weekpicker CSS"
 
 
 
 
10843
  msgstr ""
10844
 
10845
- #: includes/settings/wcj-settings-general.php:85
10846
- msgid "Datepicker/Weekpicker CSS"
10847
  msgstr ""
10848
 
10849
- #: includes/settings/wcj-settings-general.php:92
10850
- msgid "Disable Loading Datepicker/Weekpicker JavaScript"
10851
  msgstr ""
10852
 
10853
- #: includes/settings/wcj-settings-general.php:99
10854
- msgid "Disable Loading Timepicker CSS"
10855
  msgstr ""
10856
 
10857
- #: includes/settings/wcj-settings-general.php:106
10858
- msgid "Disable Loading Timepicker JavaScript"
10859
  msgstr ""
10860
 
10861
- #: includes/settings/wcj-settings-general.php:117
 
 
 
 
 
 
 
 
 
 
 
 
10862
  msgid "PayPal Email per Product Options"
10863
  msgstr ""
10864
 
10865
- #: includes/settings/wcj-settings-general.php:122
10866
  msgid "PayPal Email per Product"
10867
  msgstr ""
10868
 
10869
- #: includes/settings/wcj-settings-general.php:124
10870
  #: includes/settings/wcj-settings-max-products-per-user.php:44
10871
  #: includes/settings/wcj-settings-product-by-date.php:54
10872
  #: includes/settings/wcj-settings-product-by-time.php:54
@@ -10874,43 +10991,72 @@ msgstr ""
10874
  msgid "This will add new meta box to each product's edit page."
10875
  msgstr ""
10876
 
10877
- #: includes/settings/wcj-settings-general.php:134
10878
  msgid "Session Expiration Options"
10879
  msgstr ""
10880
 
10881
- #: includes/settings/wcj-settings-general.php:139
10882
- #: includes/settings/wcj-settings-general.php:154
10883
  msgid "Session Expiration"
10884
  msgstr ""
10885
 
10886
- #: includes/settings/wcj-settings-general.php:146
10887
  msgid "Session Expiring"
10888
  msgstr ""
10889
 
10890
- #: includes/settings/wcj-settings-general.php:147
10891
  msgid "In seconds. Default: 47 hours (60 * 60 * 47)"
10892
  msgstr ""
10893
 
10894
- #: includes/settings/wcj-settings-general.php:155
10895
  msgid "In seconds. Default: 48 hours (60 * 60 * 48)"
10896
  msgstr ""
10897
 
10898
- #: includes/settings/wcj-settings-general.php:166
10899
  msgid "Booster User Roles Changer Options"
10900
  msgstr ""
10901
 
10902
- #: includes/settings/wcj-settings-general.php:167
10903
  msgid "This will add user roles changer tool to admin bar."
10904
  msgstr ""
10905
 
10906
- #: includes/settings/wcj-settings-general.php:173
10907
  msgid "Booster User Roles Changer"
10908
  msgstr ""
10909
 
10910
- #: includes/settings/wcj-settings-general.php:182
10911
  msgid "Enabled for"
10912
  msgstr ""
10913
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10914
  #: includes/settings/wcj-settings-global-discount.php:24
10915
  msgid "Total Groups"
10916
  msgstr ""
@@ -10993,7 +11139,7 @@ msgid "Only products that are not on sale"
10993
  msgstr ""
10994
 
10995
  #: includes/settings/wcj-settings-global-discount.php:110
10996
- #: includes/settings/wcj-settings-related-products.php:185
10997
  msgid "Include Product Categories"
10998
  msgstr ""
10999
 
@@ -11004,7 +11150,7 @@ msgid ""
11004
  msgstr ""
11005
 
11006
  #: includes/settings/wcj-settings-global-discount.php:119
11007
- #: includes/settings/wcj-settings-related-products.php:194
11008
  msgid "Exclude Product Categories"
11009
  msgstr ""
11010
 
@@ -11015,7 +11161,7 @@ msgid ""
11015
  msgstr ""
11016
 
11017
  #: includes/settings/wcj-settings-global-discount.php:128
11018
- #: includes/settings/wcj-settings-related-products.php:203
11019
  msgid "Include Product Tags"
11020
  msgstr ""
11021
 
@@ -11026,7 +11172,7 @@ msgid ""
11026
  msgstr ""
11027
 
11028
  #: includes/settings/wcj-settings-global-discount.php:137
11029
- #: includes/settings/wcj-settings-related-products.php:212
11030
  msgid "Exclude Product Tags"
11031
  msgstr ""
11032
 
@@ -11049,7 +11195,7 @@ msgid ""
11049
  msgstr ""
11050
 
11051
  #: includes/settings/wcj-settings-global-discount.php:175
11052
- #: includes/settings/wcj-settings-product-price-by-formula.php:87
11053
  msgid "Advanced Settings"
11054
  msgstr ""
11055
 
@@ -11064,7 +11210,7 @@ msgid ""
11064
  msgstr ""
11065
 
11066
  #: includes/settings/wcj-settings-global-discount.php:188
11067
- #: includes/settings/wcj-settings-product-price-by-formula.php:92
11068
  msgid "Price Filters Priority"
11069
  msgstr ""
11070
 
@@ -11074,7 +11220,8 @@ msgstr ""
11074
  #: includes/settings/wcj-settings-price-by-country.php:157
11075
  #: includes/settings/wcj-settings-price-by-user-role.php:70
11076
  #: includes/settings/wcj-settings-product-addons.php:242
11077
- #: includes/settings/wcj-settings-product-price-by-formula.php:93
 
11078
  msgid ""
11079
  "Priority for all module's price filters. Set to zero to use default priority."
11080
  msgstr ""
@@ -11172,23 +11319,39 @@ msgstr ""
11172
  msgid "Maximum Allowed Each Product's Quantity per User"
11173
  msgstr ""
11174
 
11175
- #: includes/settings/wcj-settings-max-products-per-user.php:60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11176
  #: includes/settings/wcj-settings-offer-price.php:203
11177
  msgid "Customer Message"
11178
  msgstr ""
11179
 
11180
- #: includes/settings/wcj-settings-max-products-per-user.php:68
11181
  msgid "Block Checkout Page"
11182
  msgstr ""
11183
 
11184
- #: includes/settings/wcj-settings-max-products-per-user.php:70
11185
  msgid ""
11186
  "This will stop customer from accessing the checkout page on exceeded "
11187
  "quantities. Customer will be redirected to the cart page."
11188
  msgstr ""
11189
 
11190
- #: includes/settings/wcj-settings-max-products-per-user.php:76
11191
- #: includes/settings/wcj-settings-max-products-per-user.php:82
11192
  msgid "Calculate Data"
11193
  msgstr ""
11194
 
@@ -11260,6 +11423,7 @@ msgstr ""
11260
  #: includes/settings/wcj-settings-price-by-country.php:156
11261
  #: includes/settings/wcj-settings-price-by-user-role.php:69
11262
  #: includes/settings/wcj-settings-product-addons.php:241
 
11263
  msgid "Advanced: Price Filters Priority"
11264
  msgstr ""
11265
 
@@ -11322,7 +11486,7 @@ msgid "Revert on both cart & checkout pages"
11322
  msgstr ""
11323
 
11324
  #: includes/settings/wcj-settings-multicurrency.php:72
11325
- #: includes/settings/wcj-settings-payment-gateways-fees.php:65
11326
  #: includes/settings/wcj-settings-product-price-by-formula.php:64
11327
  msgid "Rounding"
11328
  msgstr ""
@@ -11394,7 +11558,7 @@ msgid "Roles"
11394
  msgstr ""
11395
 
11396
  #: includes/settings/wcj-settings-multicurrency.php:186
11397
- #: includes/settings/wcj-settings-wholesale-price.php:178
11398
  msgid "Save settings after you change this option. Leave blank to disable."
11399
  msgstr ""
11400
 
@@ -11494,8 +11658,8 @@ msgid ""
11494
  msgstr ""
11495
 
11496
  #: includes/settings/wcj-settings-my-account.php:143
11497
- #: includes/settings/wcj-settings-payment-gateways-fees.php:106
11498
- #: includes/settings/wcj-settings-payment-gateways-fees.php:118
11499
  #: includes/settings/wcj-settings-stock.php:42
11500
  #: includes/settings/wcj-settings-stock.php:55
11501
  msgid "Ignored if empty."
@@ -11987,7 +12151,7 @@ msgstr ""
11987
 
11988
  #: includes/settings/wcj-settings-order-min-amount.php:29
11989
  #: includes/settings/wcj-settings-order-min-amount.php:36
11990
- #: includes/settings/wcj-settings-payment-gateways-fees.php:97
11991
  msgid "Exclude"
11992
  msgstr ""
11993
 
@@ -12602,84 +12766,93 @@ msgstr ""
12602
  msgid "Fee (or discount) title to show to customer."
12603
  msgstr ""
12604
 
12605
- #: includes/settings/wcj-settings-payment-gateways-fees.php:30
12606
  msgid "Fee (or Discount) Type"
12607
  msgstr ""
12608
 
12609
- #: includes/settings/wcj-settings-payment-gateways-fees.php:31
12610
  msgid "Percent or fixed value."
12611
  msgstr ""
12612
 
12613
- #: includes/settings/wcj-settings-payment-gateways-fees.php:41
12614
  msgid "Fee (or Discount) Value"
12615
  msgstr ""
12616
 
12617
- #: includes/settings/wcj-settings-payment-gateways-fees.php:42
12618
  msgid "The value. For discount enter a negative number."
12619
  msgstr ""
12620
 
12621
- #: includes/settings/wcj-settings-payment-gateways-fees.php:49
12622
  msgid "Minimum Cart Amount"
12623
  msgstr ""
12624
 
12625
- #: includes/settings/wcj-settings-payment-gateways-fees.php:50
12626
  msgid "Minimum cart amount for adding the fee (or discount)."
12627
  msgstr ""
12628
 
12629
- #: includes/settings/wcj-settings-payment-gateways-fees.php:50
12630
- #: includes/settings/wcj-settings-payment-gateways-fees.php:58
12631
  msgid "Set 0 to disable."
12632
  msgstr ""
12633
 
12634
- #: includes/settings/wcj-settings-payment-gateways-fees.php:57
12635
  msgid "Maximum Cart Amount"
12636
  msgstr ""
12637
 
12638
- #: includes/settings/wcj-settings-payment-gateways-fees.php:58
12639
  msgid "Maximum cart amount for adding the fee (or discount)."
12640
  msgstr ""
12641
 
12642
- #: includes/settings/wcj-settings-payment-gateways-fees.php:67
12643
  msgid "Round the fee (or discount) value before adding to the cart."
12644
  msgstr ""
12645
 
12646
- #: includes/settings/wcj-settings-payment-gateways-fees.php:74
12647
  msgid "If rounding is enabled, set precision (i.e. number of decimals) here."
12648
  msgstr ""
12649
 
12650
- #: includes/settings/wcj-settings-payment-gateways-fees.php:88
12651
  msgid "Tax class"
12652
  msgstr ""
12653
 
12654
- #: includes/settings/wcj-settings-payment-gateways-fees.php:89
12655
  msgid "If taxing is enabled, set tax class here."
12656
  msgstr ""
12657
 
12658
- #: includes/settings/wcj-settings-payment-gateways-fees.php:93
12659
  msgid "Standard Rate"
12660
  msgstr ""
12661
 
12662
- #: includes/settings/wcj-settings-payment-gateways-fees.php:96
12663
  msgid "Exclude Shipping when Calculating Total Cart Amount"
12664
  msgstr ""
12665
 
12666
- #: includes/settings/wcj-settings-payment-gateways-fees.php:98
 
12667
  msgid ""
12668
  "This affects \"Percent\" type fees and \"Minimum/Maximum Cart Amount\" "
12669
  "options."
12670
  msgstr ""
12671
 
12672
- #: includes/settings/wcj-settings-payment-gateways-fees.php:104
 
 
 
 
 
 
 
 
12673
  msgid "Require Products"
12674
  msgstr ""
12675
 
12676
- #: includes/settings/wcj-settings-payment-gateways-fees.php:105
12677
  msgid ""
12678
  "Require at least one of selected products to be in cart for fee to be "
12679
  "applied."
12680
  msgstr ""
12681
 
12682
- #: includes/settings/wcj-settings-payment-gateways-fees.php:117
12683
  msgid "Do not apply fee, if at least one of selected products is in cart."
12684
  msgstr ""
12685
 
@@ -12740,49 +12913,61 @@ msgstr ""
12740
  msgid "Max"
12741
  msgstr ""
12742
 
12743
- #: includes/settings/wcj-settings-payment-gateways-per-category.php:31
 
 
 
 
 
 
 
 
 
 
 
 
12744
  #: includes/settings/wcj-settings-price-labels.php:125
12745
  #: includes/settings/wcj-settings-product-input-fields.php:110
12746
  msgid "Product Categories - Include"
12747
  msgstr ""
12748
 
12749
- #: includes/settings/wcj-settings-payment-gateways-per-category.php:32
12750
  msgid ""
12751
  "Show gateway only if there is product of selected category in cart. Leave "
12752
  "blank to disable the option."
12753
  msgstr ""
12754
 
12755
- #: includes/settings/wcj-settings-payment-gateways-per-category.php:42
12756
  #: includes/settings/wcj-settings-price-labels.php:134
12757
  #: includes/settings/wcj-settings-product-input-fields.php:121
12758
  msgid "Product Categories - Exclude"
12759
  msgstr ""
12760
 
12761
- #: includes/settings/wcj-settings-payment-gateways-per-category.php:43
12762
  msgid ""
12763
  "Hide gateway if there is product of selected category in cart. Leave blank "
12764
  "to disable the option."
12765
  msgstr ""
12766
 
12767
- #: includes/settings/wcj-settings-payment-gateways-per-category.php:54
12768
  #: includes/settings/wcj-settings-price-labels.php:107
12769
  #: includes/settings/wcj-settings-product-input-fields.php:155
12770
  msgid "Products - Include"
12771
  msgstr ""
12772
 
12773
- #: includes/settings/wcj-settings-payment-gateways-per-category.php:55
12774
  msgid ""
12775
  "Show gateway only if there is selected products in cart. Leave blank to "
12776
  "disable the option."
12777
  msgstr ""
12778
 
12779
- #: includes/settings/wcj-settings-payment-gateways-per-category.php:67
12780
  #: includes/settings/wcj-settings-price-labels.php:116
12781
  #: includes/settings/wcj-settings-product-input-fields.php:167
12782
  msgid "Products - Exclude"
12783
  msgstr ""
12784
 
12785
- #: includes/settings/wcj-settings-payment-gateways-per-category.php:68
12786
  msgid ""
12787
  "Hide gateway if there is selected products in cart. Leave blank to disable "
12788
  "the option."
@@ -14152,14 +14337,14 @@ msgstr ""
14152
 
14153
  #: includes/settings/wcj-settings-product-addons.php:248
14154
  #: includes/settings/wcj-settings-product-bookings.php:98
14155
- #: includes/settings/wcj-settings-product-open-pricing.php:127
14156
  msgid "Advanced: Check for Outputted Data"
14157
  msgstr ""
14158
 
14159
  #: includes/settings/wcj-settings-product-addons.php:250
14160
  #: includes/settings/wcj-settings-product-bookings.php:100
14161
  #: includes/settings/wcj-settings-product-input-fields.php:337
14162
- #: includes/settings/wcj-settings-product-open-pricing.php:129
14163
  msgid ""
14164
  "Ensures that data outputted only once. Enable this if you see data outputted "
14165
  "on frontend twice. Disable if you see no data outputted."
@@ -14616,7 +14801,7 @@ msgstr ""
14616
  #: includes/settings/wcj-settings-product-images.php:67
14617
  #: includes/settings/wcj-settings-products-xml.php:111
14618
  #: includes/settings/meta-box/wcj-settings-meta-box-product-images.php:18
14619
- #: includes/settings/meta-box/wcj-settings-meta-box-product-images.php:25
14620
  msgid "You can use shortcodes here."
14621
  msgstr ""
14622
 
@@ -15191,29 +15376,29 @@ msgstr ""
15191
  msgid "Message on Price too Small"
15192
  msgstr ""
15193
 
15194
- #: includes/settings/wcj-settings-product-open-pricing.php:85
15195
  msgid "Message on Price too Big"
15196
  msgstr ""
15197
 
15198
- #: includes/settings/wcj-settings-product-open-pricing.php:92
15199
  msgid "Disable Quantity Input"
15200
  msgstr ""
15201
 
15202
- #: includes/settings/wcj-settings-product-open-pricing.php:99
15203
  msgid "Enable JS Min/Max Validation"
15204
  msgstr ""
15205
 
15206
- #: includes/settings/wcj-settings-product-open-pricing.php:106
15207
  msgid "Display Product Price Info in Archives"
15208
  msgstr ""
15209
 
15210
- #: includes/settings/wcj-settings-product-open-pricing.php:113
15211
  msgid ""
15212
  "Product price info in archives template. Replaceable values: <code>"
15213
  "%default_price%</code>, <code>%min_price%</code>, <code>%max_price%</code>."
15214
  msgstr ""
15215
 
15216
- #: includes/settings/wcj-settings-product-open-pricing.php:120
15217
  msgid "Add \"Open Pricing\" Column to Admin Product List"
15218
  msgstr ""
15219
 
@@ -15253,6 +15438,25 @@ msgstr ""
15253
  msgid "No rounding (disabled)"
15254
  msgstr ""
15255
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15256
  #: includes/settings/wcj-settings-product-tabs.php:20
15257
  msgid "Content Processing"
15258
  msgstr ""
@@ -15862,41 +16066,50 @@ msgstr ""
15862
  msgid "Relate Manually: Select box type"
15863
  msgstr ""
15864
 
15865
- #: includes/settings/wcj-settings-related-products.php:178
 
 
 
 
 
 
 
 
 
15866
  msgid "Hide Related Products"
15867
  msgstr ""
15868
 
15869
- #: includes/settings/wcj-settings-related-products.php:186
15870
  msgid ""
15871
  "Set this field to hide related products on selected product categories only. "
15872
  "Leave blank to hide on all products."
15873
  msgstr ""
15874
 
15875
- #: includes/settings/wcj-settings-related-products.php:195
15876
  msgid ""
15877
  "Set this field to NOT hide related products on selected product categories. "
15878
  "Leave blank to hide on all products."
15879
  msgstr ""
15880
 
15881
- #: includes/settings/wcj-settings-related-products.php:204
15882
  msgid ""
15883
  "Set this field to hide related products on selected product tags only. Leave "
15884
  "blank to hide on all products."
15885
  msgstr ""
15886
 
15887
- #: includes/settings/wcj-settings-related-products.php:213
15888
  msgid ""
15889
  "Set this field to NOT hide related products on selected product tags. Leave "
15890
  "blank to hide on all products."
15891
  msgstr ""
15892
 
15893
- #: includes/settings/wcj-settings-related-products.php:223
15894
  msgid ""
15895
  "Set this field to hide related products on selected products only. Leave "
15896
  "blank to hide on all products."
15897
  msgstr ""
15898
 
15899
- #: includes/settings/wcj-settings-related-products.php:234
15900
  msgid ""
15901
  "Set this field to NOT hide related products on selected products. Leave "
15902
  "blank to hide on all products."
@@ -16857,21 +17070,37 @@ msgstr ""
16857
 
16858
  #: includes/settings/wcj-settings-tax-display.php:122
16859
  #, php-format
16860
- msgid "Role: %s"
16861
  msgstr ""
16862
 
16863
- #: includes/settings/wcj-settings-tax-display.php:127
16864
- msgid "Default TAX display (no changes)"
16865
  msgstr ""
16866
 
16867
  #: includes/settings/wcj-settings-tax-display.php:128
16868
- msgid "Including tax"
 
16869
  msgstr ""
16870
 
16871
  #: includes/settings/wcj-settings-tax-display.php:129
 
 
 
 
 
 
16872
  msgid "Excluding tax"
16873
  msgstr ""
16874
 
 
 
 
 
 
 
 
 
 
16875
  #: includes/settings/wcj-settings-template-editor.php:25
16876
  msgid "Templates to Edit"
16877
  msgstr ""
@@ -17108,46 +17337,46 @@ msgstr ""
17108
  msgid "Disable wholesale pricing for products with \"Price Changes\""
17109
  msgstr ""
17110
 
17111
- #: includes/settings/wcj-settings-wholesale-price.php:129
17112
  msgid "Wholesale Levels Options"
17113
  msgstr ""
17114
 
17115
- #: includes/settings/wcj-settings-wholesale-price.php:134
17116
- #: includes/settings/wcj-settings-wholesale-price.php:191
17117
  msgid "Number of Levels"
17118
  msgstr ""
17119
 
17120
- #: includes/settings/wcj-settings-wholesale-price.php:148
17121
- #: includes/settings/wcj-settings-wholesale-price.php:205
17122
  msgid "Min Quantity"
17123
  msgstr ""
17124
 
17125
- #: includes/settings/wcj-settings-wholesale-price.php:149
17126
- #: includes/settings/wcj-settings-wholesale-price.php:206
17127
  msgid "Minimum quantity to apply discount"
17128
  msgstr ""
17129
 
17130
- #: includes/settings/wcj-settings-wholesale-price.php:156
17131
- #: includes/settings/wcj-settings-wholesale-price.php:157
17132
- #: includes/settings/wcj-settings-wholesale-price.php:213
17133
- #: includes/settings/wcj-settings-wholesale-price.php:214
17134
  #: includes/settings/meta-box/wcj-settings-meta-box-wholesale-price.php:72
17135
  #: includes/settings/meta-box/wcj-settings-meta-box-wholesale-price.php:108
17136
  msgid "Discount"
17137
  msgstr ""
17138
 
17139
- #: includes/settings/wcj-settings-wholesale-price.php:171
17140
  msgid "Additional User Roles Options"
17141
  msgstr ""
17142
 
17143
- #: includes/settings/wcj-settings-wholesale-price.php:173
17144
  msgid ""
17145
  "If you want to set different wholesale pricing options for different user "
17146
  "roles, fill this section. Please note that you can also use Booster's "
17147
  "\"Price based on User Role\" module without filling this section."
17148
  msgstr ""
17149
 
17150
- #: includes/settings/wcj-settings-wholesale-price.php:177
17151
  msgid "User Roles Settings"
17152
  msgstr ""
17153
 
@@ -17368,19 +17597,19 @@ msgstr ""
17368
  msgid "Replace image with custom HTML on single product page"
17369
  msgstr ""
17370
 
17371
- #: includes/settings/meta-box/wcj-settings-meta-box-product-images.php:24
17372
  msgid "Replace image with custom HTML on archives"
17373
  msgstr ""
17374
 
17375
- #: includes/settings/meta-box/wcj-settings-meta-box-product-images.php:35
17376
  msgid "Hide Image on Single"
17377
  msgstr ""
17378
 
17379
- #: includes/settings/meta-box/wcj-settings-meta-box-product-images.php:45
17380
  msgid "Hide Thumbnails on Single"
17381
  msgstr ""
17382
 
17383
- #: includes/settings/meta-box/wcj-settings-meta-box-product-images.php:55
17384
  msgid "Hide Image on Archives"
17385
  msgstr ""
17386
 
@@ -17406,13 +17635,13 @@ msgstr ""
17406
  msgid "Number of Parameters"
17407
  msgstr ""
17408
 
17409
- #: includes/settings/meta-box/wcj-settings-meta-box-related-products.php:19
17410
  msgid ""
17411
  "If enabled and no products selected - will hide related products section on "
17412
  "frontend for current product."
17413
  msgstr ""
17414
 
17415
- #: includes/settings/meta-box/wcj-settings-meta-box-related-products.php:30
17416
  msgid ""
17417
  "Hold Control (Ctrl) key to select multiple products. Ctrl and \"A\" to "
17418
  "select all products."
@@ -17559,11 +17788,11 @@ msgstr ""
17559
  msgid "Enable Custom Shipping"
17560
  msgstr ""
17561
 
17562
- #: includes/shortcodes/class-wcj-shortcodes-general.php:94
17563
  msgid "Tax toggle (incl.)"
17564
  msgstr ""
17565
 
17566
- #: includes/shortcodes/class-wcj-shortcodes-general.php:95
17567
  msgid "Tax toggle (excl.)"
17568
  msgstr ""
17569
 
@@ -17571,14 +17800,6 @@ msgstr ""
17571
  msgid "Attribute \"name\" is required!"
17572
  msgstr ""
17573
 
17574
- #: includes/shortcodes/class-wcj-shortcodes-orders.php:113
17575
- msgid "Dollars"
17576
- msgstr ""
17577
-
17578
- #: includes/shortcodes/class-wcj-shortcodes-orders.php:114
17579
- msgid "Cents"
17580
- msgstr ""
17581
-
17582
  #: includes/shortcodes/class-wcj-shortcodes-products-add-form.php:54
17583
  msgid "Product by User"
17584
  msgstr ""
67
  msgid "Manage Settings"
68
  msgstr ""
69
 
70
+ #: includes/class-wcj-admin-bar.php:168 includes/class-wcj-admin-bar.php:508
71
+ #: includes/class-wcj-admin-bar.php:608
72
  #: includes/admin/class-wc-settings-jetpack.php:219
73
  #: includes/admin/class-wc-settings-jetpack.php:414
74
  #: includes/core/class-wcj-admin.php:113
95
  msgstr ""
96
 
97
  #: includes/class-wcj-admin-bar.php:245 includes/class-wcj-admin-bar.php:288
98
+ #: includes/class-wcj-admin-bar.php:632
99
  #: includes/classes/class-wcj-module.php:522
100
  #: includes/settings/wcj-settings-wpml.php:74
101
  msgid "Tools"
112
  #: includes/class-wcj-admin-bar.php:276
113
  #: includes/class-wcj-checkout-files-upload.php:218
114
  #: includes/class-wcj-eu-vat-number.php:126
115
+ #: includes/class-wcj-max-products-per-user.php:124
116
  #: includes/class-wcj-orders.php:124 includes/class-wcj-orders.php:153
117
  #: includes/class-wcj-payment-gateways.php:91
118
  #: includes/class-wcj-track-users.php:163
170
  msgid "Year"
171
  msgstr ""
172
 
173
+ #: includes/class-wcj-admin-bar.php:384
174
  #: includes/admin/class-wc-settings-jetpack.php:217
175
  #: includes/settings/wcj-settings-emails-verification.php:138
176
  #: includes/settings/wcj-settings-price-by-country.php:168
177
  msgid "WooCommerce"
178
  msgstr ""
179
 
180
+ #: includes/class-wcj-admin-bar.php:387
181
  msgid "WooCommerce settings"
182
  msgstr ""
183
 
184
+ #: includes/class-wcj-admin-bar.php:391 includes/class-wcj-admin-bar.php:395
185
+ #: includes/class-wcj-admin-bar.php:413 includes/class-wcj-my-account.php:32
186
  #: includes/class-wcj-my-account.php:40 includes/class-wcj-orders.php:26
187
  #: includes/reports/wcj-class-reports-sales-gateways.php:153
188
  #: includes/settings/wcj-settings-reports.php:21
192
  msgid "Orders"
193
  msgstr ""
194
 
195
+ #: includes/class-wcj-admin-bar.php:399
196
  msgid "Add order"
197
  msgstr ""
198
 
199
+ #: includes/class-wcj-admin-bar.php:403 includes/class-wcj-admin-bar.php:418
200
  #: includes/settings/wcj-settings-reports.php:135
201
  #: includes/settings/wcj-settings-reports.php:141
202
  msgid "Customers"
203
  msgstr ""
204
 
205
+ #: includes/class-wcj-admin-bar.php:409 includes/class-wcj-reports.php:33
206
  msgid "Reports"
207
  msgstr ""
208
 
209
+ #: includes/class-wcj-admin-bar.php:422
210
  msgid "Customers vs. guests"
211
  msgstr ""
212
 
213
+ #: includes/class-wcj-admin-bar.php:426
214
  msgid "Customer list"
215
  msgstr ""
216
 
217
+ #: includes/class-wcj-admin-bar.php:432 includes/class-wcj-stock.php:27
218
  #: includes/reports/wcj-class-reports-stock.php:272
219
  #: includes/settings/wcj-settings-reports.php:156
220
  #: includes/settings/wcj-settings-reports.php:162
222
  msgid "Stock"
223
  msgstr ""
224
 
225
+ #: includes/class-wcj-admin-bar.php:436
226
  msgid "Low in stock"
227
  msgstr ""
228
 
229
+ #: includes/class-wcj-admin-bar.php:440
230
  #: includes/settings/wcj-settings-stock.php:101
231
  #: includes/shortcodes/class-wcj-shortcodes-products.php:565
232
  msgid "Out of stock"
233
  msgstr ""
234
 
235
+ #: includes/class-wcj-admin-bar.php:444
236
  msgid "Most Stocked"
237
  msgstr ""
238
 
239
+ #: includes/class-wcj-admin-bar.php:450
240
  #: includes/class-wcj-eu-vat-number.php:190
241
  msgid "Taxes"
242
  msgstr ""
243
 
244
+ #: includes/class-wcj-admin-bar.php:454
245
  msgid "Taxes by code"
246
  msgstr ""
247
 
248
+ #: includes/class-wcj-admin-bar.php:458
249
  msgid "Taxes by date"
250
  msgstr ""
251
 
252
+ #: includes/class-wcj-admin-bar.php:466 includes/class-wcj-admin-bar.php:470
253
+ #: includes/class-wcj-admin-bar.php:516
254
  #: includes/class-wcj-product-bulk-meta-editor.php:263
255
  #: includes/class-wcj-product-by-user.php:96
256
  #: includes/class-wcj-product-by-user.php:132
261
  msgid "Products"
262
  msgstr ""
263
 
264
+ #: includes/class-wcj-admin-bar.php:474
265
  msgid "Add product"
266
  msgstr ""
267
 
268
+ #: includes/class-wcj-admin-bar.php:478
269
  #: includes/class-wcj-product-bulk-price-converter.php:149
270
  #: includes/class-wcj-sku.php:538
271
  #: includes/export/class-wcj-fields-helper.php:318
275
  msgid "Categories"
276
  msgstr ""
277
 
278
+ #: includes/class-wcj-admin-bar.php:483
279
  #: includes/export/class-wcj-fields-helper.php:319
280
  #: includes/settings/wcj-settings-product-by-user.php:20
281
  #: includes/shortcodes/class-wcj-shortcodes-products-add-form.php:183
283
  msgid "Tags"
284
  msgstr ""
285
 
286
+ #: includes/class-wcj-admin-bar.php:488
287
  msgid "Attributes"
288
  msgstr ""
289
 
290
+ #: includes/class-wcj-admin-bar.php:494 includes/class-wcj-admin-bar.php:498
291
  msgid "Coupons"
292
  msgstr ""
293
 
294
+ #: includes/class-wcj-admin-bar.php:502
295
  msgid "Add coupon"
296
  msgstr ""
297
 
298
+ #: includes/class-wcj-admin-bar.php:512 includes/class-wcj-admin-bar.php:520
299
  #: includes/class-wcj-general.php:24 includes/class-wcj-pdf-invoicing.php:24
300
  #: includes/settings/wcj-settings-related-products.php:38
301
  msgid "General"
302
  msgstr ""
303
 
304
+ #: includes/class-wcj-admin-bar.php:524
305
  #: includes/settings/wcj-settings-eu-vat-number.php:146
306
  #: includes/settings/wcj-settings-product-msrp.php:25
307
  msgid "Display"
308
  msgstr ""
309
 
310
+ #: includes/class-wcj-admin-bar.php:528
311
  msgid "Inventory"
312
  msgstr ""
313
 
314
+ #: includes/class-wcj-admin-bar.php:532
315
  msgid "Downloadable products"
316
  msgstr ""
317
 
318
+ #: includes/class-wcj-admin-bar.php:538
319
  msgid "Tax"
320
  msgstr ""
321
 
322
+ #: includes/class-wcj-admin-bar.php:542
323
  msgid "Tax options"
324
  msgstr ""
325
 
326
+ #: includes/class-wcj-admin-bar.php:546
327
  msgid "Standard rates"
328
  msgstr ""
329
 
330
+ #: includes/class-wcj-admin-bar.php:552
331
  #: includes/settings/wcj-settings-checkout-custom-fields.php:193
332
+ #: includes/settings/wcj-settings-checkout-custom-info.php:57
333
  #: includes/settings/wcj-settings-left-to-free-shipping.php:115
334
  #: includes/settings/wcj-settings-price-by-user-role.php:46
335
  msgid "Shipping"
336
  msgstr ""
337
 
338
+ #: includes/class-wcj-admin-bar.php:556
339
  msgid "Shipping zones"
340
  msgstr ""
341
 
342
+ #: includes/class-wcj-admin-bar.php:560
343
  msgid "Shipping options"
344
  msgstr ""
345
 
346
+ #: includes/class-wcj-admin-bar.php:564
347
  msgid "Shipping classes"
348
  msgstr ""
349
 
350
+ #: includes/class-wcj-admin-bar.php:570
351
  msgid "Checkout"
352
  msgstr ""
353
 
354
+ #: includes/class-wcj-admin-bar.php:574
355
  msgid "Checkout options"
356
  msgstr ""
357
 
358
+ #: includes/class-wcj-admin-bar.php:578
359
  msgid "BACS"
360
  msgstr ""
361
 
362
+ #: includes/class-wcj-admin-bar.php:582
363
  msgid "Check payments"
364
  msgstr ""
365
 
366
+ #: includes/class-wcj-admin-bar.php:586
367
  msgid "Cash on delivery"
368
  msgstr ""
369
 
370
+ #: includes/class-wcj-admin-bar.php:590
371
  msgid "PayPal"
372
  msgstr ""
373
 
374
+ #: includes/class-wcj-admin-bar.php:596
375
  #: includes/settings/wcj-settings-checkout-custom-fields.php:195
376
  msgid "Account"
377
  msgstr ""
378
 
379
+ #: includes/class-wcj-admin-bar.php:600
380
  msgid "Emails"
381
  msgstr ""
382
 
383
+ #: includes/class-wcj-admin-bar.php:604
384
  msgid "API"
385
  msgstr ""
386
 
387
+ #: includes/class-wcj-admin-bar.php:612
388
  msgid "Keys/Apps"
389
  msgstr ""
390
 
391
+ #: includes/class-wcj-admin-bar.php:616
392
  msgid "Webhooks"
393
  msgstr ""
394
 
395
+ #: includes/class-wcj-admin-bar.php:624 includes/class-wcj-admin-bar.php:628
396
  msgid "System status"
397
  msgstr ""
398
 
399
+ #: includes/class-wcj-admin-bar.php:636
400
  msgid "Logs"
401
  msgstr ""
402
 
403
+ #: includes/class-wcj-admin-bar.php:642
404
  msgid "Extensions"
405
  msgstr ""
406
 
457
  msgstr ""
458
 
459
  #: includes/class-wcj-admin-tools.php:25
460
+ msgid "Booster for WooCommerce general back-end tools."
461
  msgstr ""
462
 
463
  #: includes/class-wcj-admin-tools.php:31
464
+ msgid "Products Attributes"
465
  msgstr ""
466
 
467
  #: includes/class-wcj-admin-tools.php:32
468
+ msgid "All Products and All Attributes."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
469
  msgstr ""
470
 
471
+ #: includes/class-wcj-admin-tools.php:126
472
  #: includes/settings/wcj-settings-export.php:157
473
  #: includes/settings/wcj-settings-export.php:236
474
  msgid "Product Meta"
475
  msgstr ""
476
 
477
+ #: includes/class-wcj-admin-tools.php:143
478
  #: includes/settings/wcj-settings-export.php:86
479
  #: includes/settings/wcj-settings-export.php:154
480
  msgid "Order Meta"
481
  msgstr ""
482
 
483
+ #: includes/class-wcj-admin-tools.php:177
484
  msgid "Order Items Meta"
485
  msgstr ""
486
 
487
+ #: includes/class-wcj-admin-tools.php:179
488
  msgid "Item Key"
489
  msgstr ""
490
 
491
+ #: includes/class-wcj-admin-tools.php:179
492
  msgid "Item Meta Key"
493
  msgstr ""
494
 
495
+ #: includes/class-wcj-admin-tools.php:179
496
  msgid "Item Meta Value"
497
  msgstr ""
498
 
499
+ #: includes/class-wcj-admin-tools.php:214
500
+ #: includes/class-wcj-admin-tools.php:256
501
+ #: includes/class-wcj-admin-tools.php:265
502
+ #: includes/class-wcj-product-bulk-meta-editor.php:339
503
+ #: includes/class-wcj-product-bulk-price-converter.php:148
504
+ #: includes/class-wcj-sku.php:537
505
+ #: includes/reports/wcj-class-reports-sales.php:197
506
+ #: includes/reports/wcj-class-reports-stock.php:269
507
+ msgid "Product"
508
  msgstr ""
509
 
510
+ #: includes/class-wcj-admin-tools.php:215
511
+ #: includes/class-wcj-admin-tools.php:257
512
+ #: includes/class-wcj-admin-tools.php:266
513
+ #: includes/reports/wcj-class-reports-stock.php:270
514
+ msgid "Category"
515
  msgstr ""
516
 
517
+ #: includes/class-wcj-admin-tools.php:282
518
+ msgid "Total Products:"
519
  msgstr ""
520
 
521
  #: includes/class-wcj-breadcrumbs.php:28
597
  "and more."
598
  msgstr ""
599
 
600
+ #: includes/class-wcj-checkout-customization.php:157
601
  #: includes/settings/wcj-settings-checkout-customization.php:181
602
  msgid "Returning customer?"
603
  msgstr ""
604
 
605
+ #: includes/class-wcj-checkout-customization.php:172
606
  #: includes/settings/wcj-settings-checkout-customization.php:159
607
  msgid "Thank you. Your order has been received."
608
  msgstr ""
609
 
610
+ #: includes/class-wcj-checkout-customization.php:197
611
+ #: includes/class-wcj-checkout-customization.php:227
612
  #: includes/settings/wcj-settings-checkout-customization.php:116
613
  msgid "This field can not be changed"
614
  msgstr ""
1037
  msgstr ""
1038
 
1039
  #: includes/class-wcj-custom-php.php:28
1040
+ msgid "Custom PHP tool."
1041
  msgstr ""
1042
 
1043
  #: includes/class-wcj-custom-php.php:30
1056
  msgid "E.g.: %s"
1057
  msgstr ""
1058
 
1059
+ #: includes/class-wcj-debug-tools.php:25
1060
+ msgid "Debug Tools"
1061
+ msgstr ""
1062
+
1063
+ #: includes/class-wcj-debug-tools.php:26
1064
+ msgid "Booster for WooCommerce debug and log tools."
1065
+ msgstr ""
1066
+
1067
+ #: includes/class-wcj-debug-tools.php:32
1068
+ #: includes/settings/wcj-settings-debug-tools.php:19
1069
+ msgid "Log"
1070
+ msgstr ""
1071
+
1072
+ #: includes/class-wcj-debug-tools.php:33
1073
+ msgid "Log."
1074
+ msgstr ""
1075
+
1076
+ #: includes/class-wcj-debug-tools.php:55
1077
+ msgid "Delete Log"
1078
+ msgstr ""
1079
+
1080
+ #: includes/class-wcj-debug-tools.php:58
1081
+ #, php-format
1082
+ msgid "Now: %s"
1083
+ msgstr ""
1084
+
1085
+ #: includes/class-wcj-debug-tools.php:62
1086
+ msgid "Log is empty."
1087
+ msgstr ""
1088
+
1089
+ #: includes/class-wcj-debug-tools.php:93
1090
+ msgid "NOT DEFINED"
1091
+ msgstr ""
1092
+
1093
  #: includes/class-wcj-email-options.php:26
1094
  #: includes/pdf-invoices/submodules/class-wcj-pdf-invoicing-emails.php:24
1095
  #: includes/settings/wcj-settings-emails-verification.php:107
1252
  msgstr ""
1253
 
1254
  #: includes/class-wcj-empty-cart-button.php:25
1255
+ #: includes/shortcodes/class-wcj-shortcodes-general.php:517
1256
  msgid "Empty Cart Button"
1257
  msgstr ""
1258
 
1435
  msgstr ""
1436
 
1437
  #: includes/class-wcj-general.php:25
1438
+ msgid "Booster for WooCommerce general front-end tools."
1439
  msgstr ""
1440
 
1441
  #: includes/class-wcj-general.php:31
1442
+ msgid "Add/Manage Custom Roles"
1443
  msgstr ""
1444
 
1445
  #: includes/class-wcj-general.php:32
1446
+ msgid "Custom Roles"
1447
  msgstr ""
1448
 
1449
+ #: includes/class-wcj-general.php:33
1450
+ msgid "Manage Custom Roles."
1451
  msgstr ""
1452
 
1453
+ #: includes/class-wcj-general.php:46
1454
+ #, php-format
1455
+ msgid "Current PHP memory limit: %s."
1456
  msgstr ""
1457
 
1458
+ #: includes/class-wcj-general.php:52
1459
+ #, php-format
1460
+ msgid "Current PHP time limit: %s seconds."
1461
  msgstr ""
1462
 
1463
+ #: includes/class-wcj-general.php:116
1464
  msgid "Booster User Role"
1465
  msgstr ""
1466
 
1467
+ #: includes/class-wcj-general.php:177
1468
  msgid "All fields are required!"
1469
  msgstr ""
1470
 
1471
+ #: includes/class-wcj-general.php:181
1472
  msgid "Role ID must not be numbers only!"
1473
  msgstr ""
1474
 
1475
+ #: includes/class-wcj-general.php:190
1476
  msgid "Role successfully added!"
1477
  msgstr ""
1478
 
1479
+ #: includes/class-wcj-general.php:192
1480
  msgid "Role already exists!"
1481
  msgstr ""
1482
 
1483
+ #: includes/class-wcj-general.php:205
1484
  #, php-format
1485
  msgid "Role %s successfully deleted!"
1486
  msgstr ""
1487
 
1488
+ #: includes/class-wcj-general.php:211 includes/class-wcj-general.php:226
1489
  #: includes/class-wcj-sku.php:536
1490
  #: includes/reports/wcj-class-reports-sales.php:196
1491
  #: includes/settings/wcj-settings-cross-sells.php:43
1497
  msgid "ID"
1498
  msgstr ""
1499
 
1500
+ #: includes/class-wcj-general.php:211 includes/class-wcj-general.php:227
1501
  #: includes/class-wcj-offer-price.php:172
1502
  #: includes/export/class-wcj-fields-helper.php:282
1503
  #: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:70
1505
  msgid "Name"
1506
  msgstr ""
1507
 
1508
+ #: includes/class-wcj-general.php:211 includes/class-wcj-general.php:228
1509
  msgid "Capabilities"
1510
  msgstr ""
1511
 
1512
+ #: includes/class-wcj-general.php:211
1513
  #: includes/class-wcj-product-by-user.php:197
1514
  #: includes/settings/wcj-settings-pdf-invoicing-advanced.php:100
1515
  #: includes/tools/class-wcj-order-statuses-tool.php:145
1517
  msgid "Actions"
1518
  msgstr ""
1519
 
1520
+ #: includes/class-wcj-general.php:218
1521
  #: includes/class-wcj-payment-gateways.php:117
1522
  #: includes/class-wcj-product-bulk-meta-editor.php:367
1523
  #: includes/class-wcj-product-by-user.php:206
1528
  msgid "Delete"
1529
  msgstr ""
1530
 
1531
+ #: includes/class-wcj-general.php:222
1532
  msgid "Existing Roles"
1533
  msgstr ""
1534
 
1535
+ #: includes/class-wcj-general.php:229
1536
  msgid "Add New Role"
1537
  msgstr ""
1538
 
1539
+ #: includes/class-wcj-general.php:232
1540
  #: includes/class-wcj-shipping-by-products.php:206
1541
  #: includes/settings/wcj-settings-admin-orders-list.php:134
1542
  #: includes/settings/wcj-settings-checkout-custom-fields.php:22
1558
  #: includes/settings/wcj-settings-pdf-invoicing-advanced.php:183
1559
  #: includes/settings/wcj-settings-product-by-condition.php:107
1560
  #: includes/settings/wcj-settings-product-by-user.php:114
1561
+ #: includes/settings/wcj-settings-product-open-pricing.php:123
1562
  #: includes/settings/wcj-settings-product-tabs.php:247
1563
  #: includes/settings/wcj-settings-purchase-data.php:134
1564
  #: includes/settings/wcj-settings-purchase-data.php:143
1571
  msgid "Add"
1572
  msgstr ""
1573
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1574
  #: includes/class-wcj-global-discount.php:27
1575
  #: includes/admin/class-wc-settings-jetpack.php:479
1576
  #: includes/settings/wcj-settings-product-addons.php:237
1601
  msgid "%left_to_free% left to free shipping"
1602
  msgstr ""
1603
 
1604
+ #: includes/class-wcj-max-products-per-user.php:30
1605
  msgid "Maximum Products per User"
1606
  msgstr ""
1607
 
1608
+ #: includes/class-wcj-max-products-per-user.php:31
1609
  msgid "Limit number of items your (logged) customers can buy."
1610
  msgstr ""
1611
 
1612
+ #: includes/class-wcj-max-products-per-user.php:32
1613
  msgid ""
1614
  "Please note, that there is no maximum quantity set for not-logged (i.e. "
1615
  "guest) users. Product quantities are updated, when order status is changed "
1616
+ "to status listed in module's \"Order Status\" option."
1617
  msgstr ""
1618
 
1619
+ #: includes/class-wcj-max-products-per-user.php:71
1620
  msgid "Data re-calculated."
1621
  msgstr ""
1622
 
1623
+ #: includes/class-wcj-max-products-per-user.php:72
1624
  #, php-format
1625
  msgid "%s order(s) processed."
1626
  msgstr ""
1627
 
1628
+ #: includes/class-wcj-max-products-per-user.php:124
1629
  msgid "Maximum Products per User: Sales Data"
1630
  msgstr ""
1631
 
1632
+ #: includes/class-wcj-max-products-per-user.php:141
1633
  msgid "User ID"
1634
  msgstr ""
1635
 
1636
+ #: includes/class-wcj-max-products-per-user.php:141
1637
  msgid "User Name"
1638
  msgstr ""
1639
 
1640
+ #: includes/class-wcj-max-products-per-user.php:141
1641
  msgid "Qty Bought"
1642
  msgstr ""
1643
 
1644
+ #: includes/class-wcj-max-products-per-user.php:144
1645
  #: includes/functions/wcj-functions-users.php:151
1646
  #: includes/functions/wcj-functions-users.php:171
1647
  msgid "Guest"
1648
  msgstr ""
1649
 
1650
+ #: includes/class-wcj-max-products-per-user.php:153
1651
  msgid "No data yet."
1652
  msgstr ""
1653
 
1654
+ #: includes/class-wcj-max-products-per-user.php:271
1655
+ #: includes/settings/wcj-settings-max-products-per-user.php:74
1656
  msgid ""
1657
  "You can only buy maximum %max_qty% pcs. of %product_title% (you already "
1658
  "bought %qty_already_bought% pcs.)."
2120
  msgid "Set min/max product quantities in WooCommerce order."
2121
  msgstr ""
2122
 
2123
+ #: includes/class-wcj-order-quantities.php:180
2124
  #: includes/settings/wcj-settings-order-quantities.php:224
2125
  msgid ""
2126
  "Only one item can be added to the cart. Clear the cart or finish the order, "
2127
  "before adding another item to the cart."
2128
  msgstr ""
2129
 
2130
+ #: includes/class-wcj-order-quantities.php:343
2131
  #: includes/settings/wcj-settings-order-quantities.php:96
2132
  msgid ""
2133
  "Maximum allowed order quantity is %max_cart_total_quantity%. Your current "
2134
  "order quantity is %cart_total_quantity%."
2135
  msgstr ""
2136
 
2137
+ #: includes/class-wcj-order-quantities.php:351
2138
  #: includes/settings/wcj-settings-order-quantities.php:38
2139
  msgid ""
2140
  "Minimum allowed order quantity is %min_cart_total_quantity%. Your current "
2141
  "order quantity is %cart_total_quantity%."
2142
  msgstr ""
2143
 
2144
+ #: includes/class-wcj-order-quantities.php:361
2145
  #: includes/settings/wcj-settings-order-quantities.php:122
2146
  msgid ""
2147
  "Maximum allowed quantity for %product_title% is %max_per_item_quantity%. "
2148
  "Your current item quantity is %item_quantity%."
2149
  msgstr ""
2150
 
2151
+ #: includes/class-wcj-order-quantities.php:371
2152
  #: includes/settings/wcj-settings-order-quantities.php:64
2153
  msgid ""
2154
  "Minimum allowed quantity for %product_title% is %min_per_item_quantity%. "
2266
  msgid "Maximum amount for %gateway_title% is %max_amount%"
2267
  msgstr ""
2268
 
2269
+ #: includes/class-wcj-payment-gateways-per-category.php:26
2270
  #: includes/admin/class-wc-settings-jetpack.php:478
2271
  msgid "Gateways per Product or Category"
2272
  msgstr ""
2273
 
2274
+ #: includes/class-wcj-payment-gateways-per-category.php:27
2275
  msgid ""
2276
  "Show payment gateway only if there is selected product or product category "
2277
  "in cart."
2369
  msgid "Booster: %s."
2370
  msgstr ""
2371
 
2372
+ #: includes/class-wcj-pdf-invoicing.php:452
2373
  msgid "You are not allowed to view the invoice."
2374
  msgstr ""
2375
 
2376
+ #: includes/class-wcj-price-by-country.php:30
2377
  msgid "Prices and Currencies by Country"
2378
  msgstr ""
2379
 
2380
+ #: includes/class-wcj-price-by-country.php:31
2381
  msgid "Change product price and currency automatically by customer's country."
2382
  msgstr ""
2383
 
2384
+ #: includes/class-wcj-price-by-country.php:99
2385
  msgid "Price filter widget product prices recalculated."
2386
  msgstr ""
2387
 
2460
  #: includes/settings/wcj-settings-add-to-cart.php:51
2461
  #: includes/settings/wcj-settings-address-formats.php:20
2462
  #: includes/settings/wcj-settings-admin-bar.php:20
2463
+ #: includes/settings/wcj-settings-admin-bar.php:42
2464
+ #: includes/settings/wcj-settings-admin-bar.php:49
2465
+ #: includes/settings/wcj-settings-admin-tools.php:22
2466
+ #: includes/settings/wcj-settings-admin-tools.php:29
2467
+ #: includes/settings/wcj-settings-admin-tools.php:38
2468
+ #: includes/settings/wcj-settings-admin-tools.php:56
2469
+ #: includes/settings/wcj-settings-admin-tools.php:73
2470
+ #: includes/settings/wcj-settings-admin-tools.php:81
2471
+ #: includes/settings/wcj-settings-admin-tools.php:89
 
 
2472
  #: includes/settings/wcj-settings-breadcrumbs.php:20
2473
  #: includes/settings/wcj-settings-call-for-price.php:79
2474
  #: includes/settings/wcj-settings-cart-customization.php:34
2480
  #: includes/settings/wcj-settings-checkout-customization.php:27
2481
  #: includes/settings/wcj-settings-checkout-customization.php:151
2482
  #: includes/settings/wcj-settings-checkout-customization.php:174
2483
+ #: includes/settings/wcj-settings-checkout-customization.php:197
2484
+ #: includes/settings/wcj-settings-checkout-customization.php:222
2485
  #: includes/settings/wcj-settings-checkout-fees.php:41
2486
  #: includes/settings/wcj-settings-checkout-fees.php:71
2487
  #: includes/settings/wcj-settings-checkout-files-upload.php:227
2502
  #: includes/settings/wcj-settings-currency-per-product.php:104
2503
  #: includes/settings/wcj-settings-currency-per-product.php:258
2504
  #: includes/settings/wcj-settings-custom-css.php:44
2505
+ #: includes/settings/wcj-settings-debug-tools.php:21
2506
+ #: includes/settings/wcj-settings-debug-tools.php:29
2507
+ #: includes/settings/wcj-settings-debug-tools.php:37
2508
  #: includes/settings/wcj-settings-emails-verification.php:28
2509
  #: includes/settings/wcj-settings-emails-verification.php:36
2510
+ #: includes/settings/wcj-settings-general.php:21
2511
+ #: includes/settings/wcj-settings-general.php:48
2512
+ #: includes/settings/wcj-settings-general.php:113
2513
+ #: includes/settings/wcj-settings-general.php:164
 
2514
  #: includes/settings/wcj-settings-global-discount.php:52
2515
  #: includes/settings/wcj-settings-global-discount.php:181
2516
  #: includes/settings/wcj-settings-left-to-free-shipping.php:28
2517
  #: includes/settings/wcj-settings-left-to-free-shipping.php:57
2518
  #: includes/settings/wcj-settings-left-to-free-shipping.php:91
2519
+ #: includes/settings/wcj-settings-max-products-per-user.php:80
2520
  #: includes/settings/wcj-settings-more-button-labels.php:28
2521
  #: includes/settings/wcj-settings-multicurrency-base-price.php:38
2522
  #: includes/settings/wcj-settings-multicurrency-base-price.php:53
2543
  #: includes/settings/wcj-settings-orders.php:105
2544
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:23
2545
  #: includes/settings/wcj-settings-payment-gateways-currency.php:93
2546
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:67
2547
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:83
2548
+ #: includes/settings/wcj-settings-payment-gateways-per-category.php:25
2549
  #: includes/settings/wcj-settings-pdf-invoicing-advanced.php:55
2550
  #: includes/settings/wcj-settings-pdf-invoicing-display.php:118
2551
  #: includes/settings/wcj-settings-pdf-invoicing-footer.php:23
2598
  #: includes/settings/wcj-settings-product-input-fields.php:318
2599
  #: includes/settings/wcj-settings-product-input-fields.php:336
2600
  #: includes/settings/wcj-settings-product-input-fields.php:344
2601
+ #: includes/settings/wcj-settings-product-open-pricing.php:102
2602
+ #: includes/settings/wcj-settings-product-open-pricing.php:109
2603
+ #: includes/settings/wcj-settings-product-open-pricing.php:130
2604
  #: includes/settings/wcj-settings-product-price-by-formula.php:30
2605
  #: includes/settings/wcj-settings-product-tabs.php:43
2606
  #: includes/settings/wcj-settings-product-tabs.php:232
2649
  #: includes/settings/wcj-settings-wpml.php:45
2650
  #: includes/settings/meta-box/wcj-settings-meta-box-product-add-to-cart.php:68
2651
  #: includes/settings/meta-box/wcj-settings-meta-box-product-addons.php:35
2652
+ #: includes/settings/meta-box/wcj-settings-meta-box-related-products.php:19
2653
  #: includes/settings/meta-box/wcj-settings-meta-box-sale-flash.php:14
2654
  msgid "Enable"
2655
  msgstr ""
2784
  msgstr ""
2785
 
2786
  #: includes/class-wcj-product-bookings.php:148
2787
+ #: includes/class-wcj-product-open-pricing.php:237
2788
  #: includes/settings/wcj-settings-add-to-cart.php:140
2789
  #: includes/settings/wcj-settings-add-to-cart.php:167
2790
  #: includes/settings/wcj-settings-add-to-cart.php:202
3309
  #: includes/settings/wcj-settings-multicurrency-base-price.php:17
3310
  #: includes/settings/wcj-settings-payment-gateways-currency.php:61
3311
  #: includes/settings/wcj-settings-payment-gateways-icons.php:14
 
3312
  #: includes/settings/wcj-settings-price-by-user-role.php:14
3313
  #: includes/settings/wcj-settings-product-addons.php:173
3314
  #: includes/settings/wcj-settings-product-bookings.php:86
3399
 
3400
  #: includes/class-wcj-product-info.php:242
3401
  #: includes/settings/wcj-settings-cart.php:51
3402
+ #: includes/settings/wcj-settings-checkout-custom-info.php:48
3403
  #: includes/settings/wcj-settings-checkout-files-upload.php:52
3404
  #: includes/settings/wcj-settings-left-to-free-shipping.php:42
3405
  #: includes/settings/wcj-settings-left-to-free-shipping.php:73
3501
  msgid "Let your store customers enter price for the product manually."
3502
  msgstr ""
3503
 
3504
+ #: includes/class-wcj-product-open-pricing.php:71
3505
  msgid "Open Pricing"
3506
  msgstr ""
3507
 
3508
+ #: includes/class-wcj-product-open-pricing.php:198
3509
  msgid ""
3510
  "Booster: Free plugin's version is limited to only one open pricing product "
3511
  "enabled at a time. You will need to get <a href=\"https://booster.io/plus/\" "
3513
  "products."
3514
  msgstr ""
3515
 
3516
+ #: includes/class-wcj-product-open-pricing.php:300
3517
  #: includes/settings/wcj-settings-product-open-pricing.php:73
3518
  msgid "Price is required!"
3519
  msgstr ""
3520
 
3521
+ #: includes/class-wcj-product-open-pricing.php:306
3522
+ #: includes/settings/wcj-settings-product-open-pricing.php:81
3523
  msgid "Entered price is too small!"
3524
  msgstr ""
3525
 
3526
+ #: includes/class-wcj-product-open-pricing.php:311
3527
+ #: includes/settings/wcj-settings-product-open-pricing.php:89
3528
  msgid "Entered price is too big!"
3529
  msgstr ""
3530
 
3531
+ #: includes/class-wcj-product-open-pricing.php:370
3532
  #: includes/settings/wcj-settings-product-open-pricing.php:29
3533
  msgid "Name Your Price"
3534
  msgstr ""
3541
  msgid "Set formula for automatic product price calculation."
3542
  msgstr ""
3543
 
3544
+ #: includes/class-wcj-product-price-by-formula.php:136
3545
  msgid "Error in formula"
3546
  msgstr ""
3547
 
3548
+ #: includes/class-wcj-product-price-by-formula.php:228
3549
  msgid ""
3550
  "Booster: Free plugin's version is limited to only one price by formula "
3551
  "product enabled at a time. You will need to get <a href=\"https://booster.io/"
3553
  "by formula products."
3554
  msgstr ""
3555
 
3556
+ #: includes/class-wcj-product-price-by-formula.php:260
3557
  msgid "Final Price Preview"
3558
  msgstr ""
3559
 
3599
  #: includes/settings/wcj-settings-add-to-cart-button-visibility.php:122
3600
  #: includes/settings/wcj-settings-add-to-cart-button-visibility.php:138
3601
  #: includes/settings/wcj-settings-cart.php:44
3602
+ #: includes/settings/wcj-settings-checkout-custom-info.php:41
3603
  #: includes/settings/wcj-settings-left-to-free-shipping.php:34
3604
  #: includes/settings/wcj-settings-left-to-free-shipping.php:65
3605
  #: includes/settings/wcj-settings-left-to-free-shipping.php:99
3634
  #: includes/settings/wcj-settings-admin-orders-list.php:84
3635
  #: includes/settings/wcj-settings-checkout-custom-fields.php:265
3636
  #: includes/settings/wcj-settings-product-addons.php:225
3637
+ #: includes/settings/wcj-settings-related-products.php:176
3638
  #: includes/settings/meta-box/wcj-settings-meta-box-custom-css.php:20
3639
  #: includes/settings/meta-box/wcj-settings-meta-box-multicurrency.php:60
3640
  #: includes/settings/meta-box/wcj-settings-meta-box-offer-price.php:20
3647
  #: includes/settings/meta-box/wcj-settings-meta-box-product-addons.php:41
3648
  #: includes/settings/meta-box/wcj-settings-meta-box-product-addons.php:117
3649
  #: includes/settings/meta-box/wcj-settings-meta-box-product-bookings.php:20
3650
+ #: includes/settings/meta-box/wcj-settings-meta-box-product-images.php:35
3651
+ #: includes/settings/meta-box/wcj-settings-meta-box-product-images.php:45
3652
+ #: includes/settings/meta-box/wcj-settings-meta-box-product-images.php:55
3653
  #: includes/settings/meta-box/wcj-settings-meta-box-product-open-pricing.php:20
3654
  #: includes/settings/meta-box/wcj-settings-meta-box-product-price-by-formula.php:19
3655
+ #: includes/settings/meta-box/wcj-settings-meta-box-related-products.php:25
3656
  #: includes/settings/meta-box/wcj-settings-meta-box-sale-flash.php:20
3657
  #: includes/settings/meta-box/wcj-settings-meta-box-wholesale-price.php:32
3658
  #: includes/widgets/class-wcj-widget-country-switcher.php:82
3669
  #: includes/settings/wcj-settings-eu-vat-number.php:111
3670
  #: includes/settings/wcj-settings-eu-vat-number.php:130
3671
  #: includes/settings/wcj-settings-product-addons.php:224
3672
+ #: includes/settings/wcj-settings-related-products.php:175
3673
  #: includes/settings/meta-box/wcj-settings-meta-box-custom-css.php:19
3674
  #: includes/settings/meta-box/wcj-settings-meta-box-multicurrency.php:61
3675
  #: includes/settings/meta-box/wcj-settings-meta-box-offer-price.php:19
3682
  #: includes/settings/meta-box/wcj-settings-meta-box-product-addons.php:40
3683
  #: includes/settings/meta-box/wcj-settings-meta-box-product-addons.php:116
3684
  #: includes/settings/meta-box/wcj-settings-meta-box-product-bookings.php:19
3685
+ #: includes/settings/meta-box/wcj-settings-meta-box-product-images.php:34
3686
+ #: includes/settings/meta-box/wcj-settings-meta-box-product-images.php:44
3687
+ #: includes/settings/meta-box/wcj-settings-meta-box-product-images.php:54
3688
  #: includes/settings/meta-box/wcj-settings-meta-box-product-open-pricing.php:19
3689
  #: includes/settings/meta-box/wcj-settings-meta-box-product-price-by-formula.php:18
3690
+ #: includes/settings/meta-box/wcj-settings-meta-box-related-products.php:26
3691
  #: includes/settings/meta-box/wcj-settings-meta-box-sale-flash.php:19
3692
  #: includes/settings/meta-box/wcj-settings-meta-box-wholesale-price.php:31
3693
  #: includes/widgets/class-wcj-widget-country-switcher.php:83
3719
  msgid "Add \"products per page\" selector to WooCommerce."
3720
  msgstr ""
3721
 
3722
+ #: includes/class-wcj-products-per-page.php:85
3723
  #: includes/settings/wcj-settings-products-per-page.php:63
3724
  msgid ""
3725
  "Products <strong>%from% - %to%</strong> from <strong>%total%</strong>. "
3824
  #: includes/class-wcj-related-products.php:38
3825
  #: includes/admin/class-wc-settings-jetpack.php:483
3826
  #: includes/settings/wcj-settings-free-price.php:20
3827
+ #: includes/settings/meta-box/wcj-settings-meta-box-related-products.php:30
3828
  msgid "Related Products"
3829
  msgstr ""
3830
 
3838
  #: includes/class-wcj-related-products.php:42
3839
  #, php-format
3840
  msgid ""
3841
+ "You may need to <a href=\"%s\">clear all products transients</a> to "
3842
+ "immediately see results on frontend after changing module's settings. "
3843
+ "Alternatively you can just update each product individually to clear its "
3844
+ "transients."
3845
  msgstr ""
3846
 
3847
  #: includes/class-wcj-reports.php:34
4053
  msgstr ""
4054
 
4055
  #: includes/class-wcj-shipping-by-time.php:33
4056
+ msgid "Current Date/Time"
4057
  msgstr ""
4058
 
4059
  #: includes/class-wcj-shipping-by-time.php:34
4825
  msgstr ""
4826
 
4827
  #: includes/classes/class-wcj-shortcodes.php:109
4828
+ #: includes/shortcodes/class-wcj-shortcodes-general.php:517
4829
  #, php-format
4830
  msgid "\"%s\" module is not enabled!"
4831
  msgstr ""
4884
  msgid "[{site_title}] Custom Subject - Order ({order_number}) - {order_date}"
4885
  msgstr ""
4886
 
4887
+ #: includes/emails/class-wc-email-wcj-custom.php:219
4888
  #, php-format
4889
  msgid "New order (%s)"
4890
  msgstr ""
4891
 
4892
+ #: includes/emails/class-wc-email-wcj-custom.php:220
4893
  #, php-format
4894
  msgid "Order status updated to %s"
4895
  msgstr ""
4896
 
4897
+ #: includes/emails/class-wc-email-wcj-custom.php:223
4898
  #, php-format
4899
  msgid "Order status %s to %s"
4900
  msgstr ""
4901
 
4902
+ #: includes/emails/class-wc-email-wcj-custom.php:230
4903
  #: includes/gateways/class-wc-gateway-wcj-custom.php:48
4904
  #: includes/settings/wcj-settings-admin-products-list.php:19
4905
  #: includes/settings/wcj-settings-admin-products-list.php:75
4909
  msgid "Enable/Disable"
4910
  msgstr ""
4911
 
4912
+ #: includes/emails/class-wc-email-wcj-custom.php:232
4913
  msgid "Enable this email notification"
4914
  msgstr ""
4915
 
4916
+ #: includes/emails/class-wc-email-wcj-custom.php:236
4917
  msgid "Trigger(s)"
4918
  msgstr ""
4919
 
4920
+ #: includes/emails/class-wc-email-wcj-custom.php:240
4921
  msgid ""
4922
  "Please note, that all new orders in WooCommerce by default are created with "
4923
  "Pending Payment status. If you want to change the default order status - you "
4925
  "Settings > Booster > Shipping & Orders > Order Custom Statuses)."
4926
  msgstr ""
4927
 
4928
+ #: includes/emails/class-wc-email-wcj-custom.php:243
4929
  msgid "New order (Any status)"
4930
  msgstr ""
4931
 
4932
+ #: includes/emails/class-wc-email-wcj-custom.php:248
4933
  msgid "Reset password notification"
4934
  msgstr ""
4935
 
4936
+ #: includes/emails/class-wc-email-wcj-custom.php:249
4937
  msgid "Order fully refunded notification"
4938
  msgstr ""
4939
 
4940
+ #: includes/emails/class-wc-email-wcj-custom.php:250
4941
  msgid "Order partially refunded notification"
4942
  msgstr ""
4943
 
4944
+ #: includes/emails/class-wc-email-wcj-custom.php:251
4945
  msgid "New customer note notification"
4946
  msgstr ""
4947
 
4948
+ #: includes/emails/class-wc-email-wcj-custom.php:252
4949
  msgid "Low stock notification"
4950
  msgstr ""
4951
 
4952
+ #: includes/emails/class-wc-email-wcj-custom.php:253
4953
  msgid "No stock notification"
4954
  msgstr ""
4955
 
4956
+ #: includes/emails/class-wc-email-wcj-custom.php:254
4957
  msgid "Product on backorder notification"
4958
  msgstr ""
4959
 
4960
+ #: includes/emails/class-wc-email-wcj-custom.php:255
4961
  msgid "Created customer notification"
4962
  msgstr ""
4963
 
4964
+ #: includes/emails/class-wc-email-wcj-custom.php:262
4965
  msgid "Recipient(s)"
4966
  msgstr ""
4967
 
4968
+ #: includes/emails/class-wc-email-wcj-custom.php:264
4969
  #, php-format
4970
  msgid ""
4971
  "Enter recipients (comma separated) for this email. Defaults to <code>%s</"
4972
  "code>."
4973
  msgstr ""
4974
 
4975
+ #: includes/emails/class-wc-email-wcj-custom.php:265
4976
  msgid "Or enter <code>%customer%</code> to send to customer billing email."
4977
  msgstr ""
4978
 
4979
+ #: includes/emails/class-wc-email-wcj-custom.php:271
4980
  msgid "Subject"
4981
  msgstr ""
4982
 
4983
+ #: includes/emails/class-wc-email-wcj-custom.php:273
4984
  #, php-format
4985
  msgid ""
4986
  "This controls the email subject line. Leave blank to use the default "
4987
  "subject: <code>%s</code>."
4988
  msgstr ""
4989
 
4990
+ #: includes/emails/class-wc-email-wcj-custom.php:279
4991
  msgid "Email type"
4992
  msgstr ""
4993
 
4994
+ #: includes/emails/class-wc-email-wcj-custom.php:281
4995
  msgid "Choose which format of email to send."
4996
  msgstr ""
4997
 
4998
+ #: includes/emails/class-wc-email-wcj-custom.php:287
4999
  msgid "Wrap in WC Email Template"
5000
  msgstr ""
5001
 
5002
+ #: includes/emails/class-wc-email-wcj-custom.php:293
5003
  msgid ""
5004
  "WC Email Heading. Used only if \"Wrap in WC Email Template\" is enabled and "
5005
  "only for HTML templates."
5006
  msgstr ""
5007
 
5008
+ #: includes/emails/class-wc-email-wcj-custom.php:294
5009
  #, php-format
5010
  msgid ""
5011
  "This controls the main heading contained within the email notification. "
5012
  "Leave blank to use the default heading: <code>%s</code>."
5013
  msgstr ""
5014
 
5015
+ #: includes/emails/class-wc-email-wcj-custom.php:300
5016
  msgid "HTML template"
5017
  msgstr ""
5018
 
5019
+ #: includes/emails/class-wc-email-wcj-custom.php:302
5020
+ #: includes/emails/class-wc-email-wcj-custom.php:311
5021
  msgid "You can use shortcodes here. E.g. Booster's order shortcodes."
5022
  msgstr ""
5023
 
5024
+ #: includes/emails/class-wc-email-wcj-custom.php:309
5025
  msgid "Plain text template"
5026
  msgstr ""
5027
 
5181
 
5182
  #: includes/export/class-wcj-fields-helper.php:112
5183
  #: includes/export/class-wcj-fields-helper.php:195
5184
+ #: includes/settings/wcj-settings-max-products-per-user.php:60
5185
  msgid "Order Status"
5186
  msgstr ""
5187
 
7999
  #: includes/settings/wcj-settings-add-to-cart-button-visibility.php:30
8000
  #: includes/settings/wcj-settings-add-to-cart-button-visibility.php:56
8001
  #: includes/settings/wcj-settings-general.php:30
8002
+ #: includes/settings/wcj-settings-general.php:66
8003
+ #: includes/settings/wcj-settings-general.php:81
8004
+ #: includes/settings/wcj-settings-general.php:89
8005
+ #: includes/settings/wcj-settings-general.php:97
8006
  #: includes/settings/wcj-settings-pdf-invoicing-advanced.php:84
8007
  #: includes/settings/wcj-settings-pdf-invoicing-advanced.php:109
8008
  #: includes/settings/wcj-settings-price-by-user-role.php:56
8009
  #: includes/settings/wcj-settings-price-by-user-role.php:96
8010
  #: includes/settings/wcj-settings-product-add-to-cart.php:131
8011
+ #: includes/settings/wcj-settings-product-open-pricing.php:95
8012
  #: includes/settings/wcj-settings-sku.php:283
8013
  #: includes/settings/meta-box/wcj-settings-meta-box-product-add-to-cart.php:67
8014
  msgid "Disable"
8101
  #: includes/settings/wcj-settings-add-to-cart.php:21
8102
  #: includes/settings/wcj-settings-add-to-cart.php:92
8103
  #: includes/settings/wcj-settings-add-to-cart.php:110
8104
+ #: includes/settings/wcj-settings-general.php:130
8105
  #: includes/settings/wcj-settings-shipping-calculator.php:69
8106
  #: includes/settings/wcj-settings-sorting.php:20
8107
  #: includes/settings/wcj-settings-sorting.php:99
8304
  msgid "\"WooCommerce\" Admin Bar"
8305
  msgstr ""
8306
 
8307
+ #: includes/settings/wcj-settings-admin-bar.php:27
8308
+ msgid "List product categories in \"WooCommerce > Products > Categories\""
8309
+ msgstr ""
8310
+
8311
+ #: includes/settings/wcj-settings-admin-bar.php:34
8312
+ msgid "List product tags in \"WooCommerce > Products > Tags\""
8313
+ msgstr ""
8314
+
8315
+ #: includes/settings/wcj-settings-admin-bar.php:41
8316
  msgid "\"Booster\" Admin Bar"
8317
  msgstr ""
8318
 
8319
+ #: includes/settings/wcj-settings-admin-bar.php:48
8320
  msgid "\"Booster: Active\" Admin Bar"
8321
  msgstr ""
8322
 
8432
  #: includes/settings/wcj-settings-product-images.php:27
8433
  #: includes/settings/wcj-settings-product-images.php:34
8434
  #: includes/settings/wcj-settings-product-images.php:41
8435
+ #: includes/settings/wcj-settings-related-products.php:184
8436
+ #: includes/settings/wcj-settings-related-products.php:190
8437
  #: includes/settings/wcj-settings-sale-flash.php:35
8438
  #: includes/settings/wcj-settings-sale-flash.php:42
8439
  #: includes/settings/wcj-settings-sale-flash.php:49
8514
  msgid "Show Booster Menus Only to Admin"
8515
  msgstr ""
8516
 
8517
+ #: includes/settings/wcj-settings-admin-tools.php:20
8518
+ #, php-format
8519
+ msgid ""
8520
+ "Will require %s capability to see Booster menus (instead of %s capability)."
8521
  msgstr ""
8522
 
8523
  #: includes/settings/wcj-settings-admin-tools.php:28
8524
+ msgid "Suppress Admin Connect Notice"
8525
+ msgstr ""
8526
+
8527
+ #: includes/settings/wcj-settings-admin-tools.php:30
8528
  #, php-format
8529
  msgid "Will remove \"%s\" admin notice."
8530
  msgstr ""
8531
 
8532
+ #: includes/settings/wcj-settings-admin-tools.php:31
8533
  msgid ""
8534
  "Connect your store to WooCommerce.com to receive extensions updates and "
8535
  "support."
8536
  msgstr ""
8537
 
8538
+ #: includes/settings/wcj-settings-admin-tools.php:37
8539
  msgid "Suppress Admin Notices"
8540
  msgstr ""
8541
 
8542
+ #: includes/settings/wcj-settings-admin-tools.php:39
8543
  msgid "Will remove admin notices (including the Connect notice)."
8544
  msgstr ""
8545
 
8546
+ #: includes/settings/wcj-settings-admin-tools.php:49
8547
+ msgid "Orders Options"
8548
  msgstr ""
8549
 
 
 
 
 
 
8550
  #: includes/settings/wcj-settings-admin-tools.php:54
8551
+ msgid "Show Order Meta"
 
 
 
 
8552
  msgstr ""
8553
 
8554
+ #: includes/settings/wcj-settings-admin-tools.php:55
8555
+ msgid "Will show order meta table in meta box."
8556
  msgstr ""
8557
 
8558
+ #: includes/settings/wcj-settings-admin-tools.php:66
8559
+ msgid "Products Options"
8560
  msgstr ""
8561
 
8562
+ #: includes/settings/wcj-settings-admin-tools.php:71
8563
+ msgid "Show Product Meta"
8564
  msgstr ""
8565
 
8566
+ #: includes/settings/wcj-settings-admin-tools.php:72
8567
+ msgid "Will show product meta table in meta box."
8568
  msgstr ""
8569
 
8570
+ #: includes/settings/wcj-settings-admin-tools.php:79
8571
  msgid "Show Variable Product Pricing Table"
8572
  msgstr ""
8573
 
8574
+ #: includes/settings/wcj-settings-admin-tools.php:80
8575
+ msgid "Will allow to set all variations prices in single meta box."
8576
  msgstr ""
8577
 
8578
+ #: includes/settings/wcj-settings-admin-tools.php:87
8579
+ msgid "Product Revisions"
8580
  msgstr ""
8581
 
8582
+ #: includes/settings/wcj-settings-admin-tools.php:88
8583
+ msgid "Will enable product revisions."
8584
  msgstr ""
8585
 
8586
+ #: includes/settings/wcj-settings-admin-tools.php:95
8587
+ msgid "JSON Product Search Limit"
8588
+ msgstr ""
8589
+
8590
+ #: includes/settings/wcj-settings-admin-tools.php:96
8591
+ msgid ""
8592
+ "This will set the maximum number of products to return on JSON search (e.g. "
8593
+ "when setting Upsells and Cross-sells on product edit page)."
8594
+ msgstr ""
8595
+
8596
+ #: includes/settings/wcj-settings-admin-tools.php:97
8597
+ #: includes/settings/wcj-settings-checkout-custom-fields.php:240
8598
+ #: includes/settings/wcj-settings-checkout-custom-fields.php:249
8599
+ #: includes/settings/wcj-settings-order-quantities.php:187
8600
+ msgid "Ignored if set to zero."
8601
  msgstr ""
8602
 
8603
  #: includes/settings/wcj-settings-breadcrumbs.php:19
8718
  msgstr ""
8719
 
8720
  #: includes/settings/wcj-settings-cart.php:24
8721
+ #: includes/settings/wcj-settings-checkout-custom-info.php:20
8722
  #: includes/settings/wcj-settings-mini-cart.php:19
8723
  #: includes/settings/wcj-settings-my-account.php:182
8724
  #: includes/settings/wcj-settings-product-custom-info.php:53
8726
  msgstr ""
8727
 
8728
  #: includes/settings/wcj-settings-cart.php:39
8729
+ #: includes/settings/wcj-settings-checkout-custom-info.php:36
8730
  #: includes/settings/wcj-settings-mini-cart.php:34
8731
  #: includes/settings/wcj-settings-my-account.php:197
8732
  msgid "Info Block"
8733
  msgstr ""
8734
 
8735
  #: includes/settings/wcj-settings-cart.php:58
8736
+ #: includes/settings/wcj-settings-checkout-custom-info.php:85
8737
  #: includes/settings/wcj-settings-mini-cart.php:57
8738
  #: includes/settings/wcj-settings-my-account.php:255
8739
  #: includes/settings/wcj-settings-product-custom-info.php:125
8765
  #: includes/settings/wcj-settings-payment-gateways-by-country.php:15
8766
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:17
8767
  #: includes/settings/wcj-settings-payment-gateways-min-max.php:15
8768
+ #: includes/settings/wcj-settings-payment-gateways-per-category.php:19
8769
  #: includes/settings/wcj-settings-price-formats.php:15
8770
  #: includes/settings/wcj-settings-product-tabs.php:15
8771
  #: includes/settings/wcj-settings-shipping-by-condition.php:20
8976
  msgstr ""
8977
 
8978
  #: includes/settings/wcj-settings-checkout-custom-fields.php:192
8979
+ #: includes/settings/wcj-settings-checkout-custom-info.php:56
8980
  #: includes/settings/wcj-settings-left-to-free-shipping.php:114
8981
  msgid "Billing"
8982
  msgstr ""
9028
  msgid "select2: Number of characters necessary to start a search."
9029
  msgstr ""
9030
 
 
 
 
 
 
 
9031
  #: includes/settings/wcj-settings-checkout-custom-fields.php:247
9032
  msgid "select2: max input length"
9033
  msgstr ""
9127
 
9128
  #: includes/settings/wcj-settings-checkout-custom-fields.php:360
9129
  #: includes/settings/wcj-settings-global-discount.php:158
9130
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:125
9131
  #: includes/settings/wcj-settings-product-addons.php:149
9132
+ #: includes/settings/wcj-settings-related-products.php:244
9133
  msgid "Exclude Products"
9134
  msgstr ""
9135
 
9139
 
9140
  #: includes/settings/wcj-settings-checkout-custom-fields.php:369
9141
  #: includes/settings/wcj-settings-global-discount.php:147
9142
+ #: includes/settings/wcj-settings-related-products.php:233
9143
  msgid "Include Products"
9144
  msgstr ""
9145
 
9167
  "disable."
9168
  msgstr ""
9169
 
9170
+ #: includes/settings/wcj-settings-checkout-custom-info.php:15
9171
  msgid "Checkout Custom Info Blocks"
9172
  msgstr ""
9173
 
9174
+ #: includes/settings/wcj-settings-checkout-custom-info.php:54
9175
  #: includes/settings/wcj-settings-checkout-files-upload.php:56
9176
  #: includes/settings/wcj-settings-empty-cart.php:68
9177
  #: includes/settings/wcj-settings-left-to-free-shipping.php:112
9178
  msgid "Before checkout form"
9179
  msgstr ""
9180
 
9181
+ #: includes/settings/wcj-settings-checkout-custom-info.php:55
9182
  #: includes/settings/wcj-settings-left-to-free-shipping.php:113
9183
  msgid "Before customer details"
9184
  msgstr ""
9185
 
9186
+ #: includes/settings/wcj-settings-checkout-custom-info.php:58
9187
  #: includes/settings/wcj-settings-left-to-free-shipping.php:116
9188
  msgid "After customer details"
9189
  msgstr ""
9190
 
9191
+ #: includes/settings/wcj-settings-checkout-custom-info.php:59
9192
  #: includes/settings/wcj-settings-left-to-free-shipping.php:117
9193
  msgid "Before order review"
9194
  msgstr ""
9195
 
9196
+ #: includes/settings/wcj-settings-checkout-custom-info.php:60
9197
  #: includes/settings/wcj-settings-left-to-free-shipping.php:118
9198
  msgid "Order review"
9199
  msgstr ""
9200
 
9201
+ #: includes/settings/wcj-settings-checkout-custom-info.php:61
9202
  #: includes/settings/wcj-settings-left-to-free-shipping.php:121
9203
  msgid "After order review"
9204
  msgstr ""
9205
 
9206
+ #: includes/settings/wcj-settings-checkout-custom-info.php:62
9207
  #: includes/settings/wcj-settings-checkout-files-upload.php:57
9208
  #: includes/settings/wcj-settings-empty-cart.php:69
9209
  #: includes/settings/wcj-settings-left-to-free-shipping.php:122
9210
  msgid "After checkout form"
9211
  msgstr ""
9212
 
9213
+ #: includes/settings/wcj-settings-checkout-custom-info.php:81
9214
  msgid "Order Received (Thank You) page"
9215
  msgstr ""
9216
 
9406
  msgid "\"Returning customer?\" Message Options"
9407
  msgstr ""
9408
 
9409
+ #: includes/settings/wcj-settings-checkout-customization.php:190
9410
+ #: includes/settings/wcj-settings-checkout-customization.php:196
9411
+ msgid "Recalculate Checkout"
9412
+ msgstr ""
9413
+
9414
+ #: includes/settings/wcj-settings-checkout-customization.php:191
9415
+ msgid ""
9416
+ "Recalculate checkout right after the default calculation has been requested."
9417
+ msgstr ""
9418
+
9419
+ #: includes/settings/wcj-settings-checkout-customization.php:203
9420
+ #: includes/settings/wcj-settings-checkout-customization.php:228
9421
+ msgid "Fields"
9422
+ msgstr ""
9423
+
9424
+ #: includes/settings/wcj-settings-checkout-customization.php:204
9425
+ msgid ""
9426
+ "Required fields that need to be changed in order to recalculate checkout."
9427
+ msgstr ""
9428
+
9429
+ #: includes/settings/wcj-settings-checkout-customization.php:205
9430
+ #: includes/settings/wcj-settings-checkout-customization.php:230
9431
+ msgid "Use CSS selector syntax."
9432
+ msgstr ""
9433
+
9434
+ #: includes/settings/wcj-settings-checkout-customization.php:215
9435
+ #: includes/settings/wcj-settings-checkout-customization.php:221
9436
+ msgid "Force Checkout Update"
9437
+ msgstr ""
9438
+
9439
+ #: includes/settings/wcj-settings-checkout-customization.php:216
9440
+ msgid "Update checkout when some field have its value changed."
9441
+ msgstr ""
9442
+
9443
+ #: includes/settings/wcj-settings-checkout-customization.php:229
9444
+ msgid "Fields that need to be changed in order to update checkout."
9445
+ msgstr ""
9446
+
9447
  #: includes/settings/wcj-settings-checkout-fees.php:14
9448
  msgid "Fees"
9449
  msgstr ""
9454
 
9455
  #: includes/settings/wcj-settings-checkout-fees.php:58
9456
  #: includes/settings/wcj-settings-global-discount.php:65
9457
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:37
9458
  #: includes/settings/wcj-settings-price-by-user-role.php:32
9459
  #: includes/settings/wcj-settings-purchase-data.php:77
9460
  #: includes/settings/wcj-settings-wholesale-price.php:79
9464
 
9465
  #: includes/settings/wcj-settings-checkout-fees.php:59
9466
  #: includes/settings/wcj-settings-global-discount.php:64
9467
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:38
9468
  #: includes/settings/wcj-settings-purchase-data.php:78
9469
  #: includes/settings/wcj-settings-wholesale-price.php:78
9470
  #: includes/settings/meta-box/wcj-settings-meta-box-wholesale-price.php:18
9472
  msgstr ""
9473
 
9474
  #: includes/settings/wcj-settings-checkout-fees.php:70
9475
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:82
9476
  msgid "Taxable"
9477
  msgstr ""
9478
 
9758
  #: includes/settings/wcj-settings-checkout-files-upload.php:421
9759
  #: includes/settings/wcj-settings-currency-per-product.php:251
9760
  #: includes/settings/wcj-settings-eu-vat-number.php:203
9761
+ #: includes/settings/wcj-settings-general.php:40
9762
  #: includes/settings/wcj-settings-payment-gateways.php:49
9763
  #: includes/settings/wcj-settings-pdf-invoicing-advanced.php:43
9764
  #: includes/settings/wcj-settings-product-by-date.php:117
10070
 
10071
  #: includes/settings/wcj-settings-currency-exchange-rates.php:60
10072
  #: includes/settings/wcj-settings-offer-price.php:157
10073
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:74
10074
  #: includes/settings/wcj-settings-product-by-user.php:70
10075
  #: includes/settings/meta-box/wcj-settings-meta-box-offer-price.php:25
10076
  msgid "Number of decimals"
10387
  msgid "Automatically created file: %s."
10388
  msgstr ""
10389
 
10390
+ #: includes/settings/wcj-settings-debug-tools.php:14
10391
+ msgid "Debug Tools Options"
10392
+ msgstr ""
10393
+
10394
+ #: includes/settings/wcj-settings-debug-tools.php:20
10395
+ msgid "Enables logging to Booster log."
10396
+ msgstr ""
10397
+
10398
+ #: includes/settings/wcj-settings-debug-tools.php:27
10399
+ msgid "WooCommerce Log"
10400
+ msgstr ""
10401
+
10402
+ #: includes/settings/wcj-settings-debug-tools.php:28
10403
+ msgid "Enables logging to WooCommerce log."
10404
+ msgstr ""
10405
+
10406
+ #: includes/settings/wcj-settings-debug-tools.php:35
10407
+ msgid "Debug"
10408
+ msgstr ""
10409
+
10410
+ #: includes/settings/wcj-settings-debug-tools.php:36
10411
+ msgid "Enables debug mode."
10412
+ msgstr ""
10413
+
10414
+ #: includes/settings/wcj-settings-debug-tools.php:43
10415
+ msgid "System Info"
10416
+ msgstr ""
10417
+
10418
+ #: includes/settings/wcj-settings-debug-tools.php:47
10419
+ msgid "Show extended info"
10420
+ msgstr ""
10421
+
10422
  #: includes/settings/wcj-settings-email-options.php:14
10423
  msgid "Product Info in Item Name"
10424
  msgstr ""
10889
  msgid "Variations"
10890
  msgstr ""
10891
 
10892
+ #: includes/settings/wcj-settings-general.php:14
10893
  msgid "Shortcodes Options"
10894
  msgstr ""
10895
 
10896
+ #: includes/settings/wcj-settings-general.php:19
10897
+ msgid "Shortcodes in WordPress Text Widgets"
10898
  msgstr ""
10899
 
10900
+ #: includes/settings/wcj-settings-general.php:20
10901
  msgid ""
10902
  "This will enable all (including non Booster's) shortcodes in WordPress text "
10903
  "widgets."
10904
  msgstr ""
10905
 
10906
+ #: includes/settings/wcj-settings-general.php:27
10907
+ msgid "Booster's Shortcodes"
10908
  msgstr ""
10909
 
10910
+ #: includes/settings/wcj-settings-general.php:28
10911
+ #, php-format
10912
+ msgid ""
10913
+ "Disable all <a href=\"%s\" target=\"_blank\">Booster's shortcodes</a> (for "
10914
+ "memory saving)."
10915
  msgstr ""
10916
 
 
10917
  #: includes/settings/wcj-settings-general.php:45
10918
+ msgid "Recalculate Cart Totals"
10919
  msgstr ""
10920
 
10921
+ #: includes/settings/wcj-settings-general.php:46
10922
+ msgid "Will recalculate cart totals on every page load."
10923
  msgstr ""
10924
 
10925
+ #: includes/settings/wcj-settings-general.php:47
10926
+ msgid ""
10927
+ "This may solve multicurrency issues with wrong currency symbol in mini-cart."
10928
+ msgstr ""
10929
+
10930
+ #: includes/settings/wcj-settings-general.php:54
10931
  msgid "Session Type in Booster"
10932
  msgstr ""
10933
 
10934
+ #: includes/settings/wcj-settings-general.php:59
10935
  msgid "Standard PHP sessions"
10936
  msgstr ""
10937
 
10938
+ #: includes/settings/wcj-settings-general.php:60
10939
  msgid "WC sessions"
10940
  msgstr ""
10941
 
10942
+ #: includes/settings/wcj-settings-general.php:64
10943
+ msgid "Datepicker/Weekpicker CSS Loading"
10944
+ msgstr ""
10945
+
10946
+ #: includes/settings/wcj-settings-general.php:65
10947
+ msgid "Disables datepicker/weekpicker CSS loading."
10948
  msgstr ""
10949
 
10950
+ #: includes/settings/wcj-settings-general.php:72
10951
+ msgid "Datepicker/Weekpicker CSS Source"
10952
  msgstr ""
10953
 
10954
+ #: includes/settings/wcj-settings-general.php:79
10955
+ msgid "Datepicker/Weekpicker JavaScript Loading"
10956
  msgstr ""
10957
 
10958
+ #: includes/settings/wcj-settings-general.php:80
10959
+ msgid "Disables datepicker/weekpicker JavaScript loading."
10960
  msgstr ""
10961
 
10962
+ #: includes/settings/wcj-settings-general.php:87
10963
+ msgid "Timepicker CSS Loading"
10964
  msgstr ""
10965
 
10966
+ #: includes/settings/wcj-settings-general.php:88
10967
+ msgid "Disables timepicker CSS loading."
10968
+ msgstr ""
10969
+
10970
+ #: includes/settings/wcj-settings-general.php:95
10971
+ msgid "Timepicker JavaScript Loading"
10972
+ msgstr ""
10973
+
10974
+ #: includes/settings/wcj-settings-general.php:96
10975
+ msgid "Disables timepicker JavaScript loading."
10976
+ msgstr ""
10977
+
10978
+ #: includes/settings/wcj-settings-general.php:107
10979
  msgid "PayPal Email per Product Options"
10980
  msgstr ""
10981
 
10982
+ #: includes/settings/wcj-settings-general.php:112
10983
  msgid "PayPal Email per Product"
10984
  msgstr ""
10985
 
10986
+ #: includes/settings/wcj-settings-general.php:114
10987
  #: includes/settings/wcj-settings-max-products-per-user.php:44
10988
  #: includes/settings/wcj-settings-product-by-date.php:54
10989
  #: includes/settings/wcj-settings-product-by-time.php:54
10991
  msgid "This will add new meta box to each product's edit page."
10992
  msgstr ""
10993
 
10994
+ #: includes/settings/wcj-settings-general.php:124
10995
  msgid "Session Expiration Options"
10996
  msgstr ""
10997
 
10998
+ #: includes/settings/wcj-settings-general.php:129
10999
+ #: includes/settings/wcj-settings-general.php:144
11000
  msgid "Session Expiration"
11001
  msgstr ""
11002
 
11003
+ #: includes/settings/wcj-settings-general.php:136
11004
  msgid "Session Expiring"
11005
  msgstr ""
11006
 
11007
+ #: includes/settings/wcj-settings-general.php:137
11008
  msgid "In seconds. Default: 47 hours (60 * 60 * 47)"
11009
  msgstr ""
11010
 
11011
+ #: includes/settings/wcj-settings-general.php:145
11012
  msgid "In seconds. Default: 48 hours (60 * 60 * 48)"
11013
  msgstr ""
11014
 
11015
+ #: includes/settings/wcj-settings-general.php:156
11016
  msgid "Booster User Roles Changer Options"
11017
  msgstr ""
11018
 
11019
+ #: includes/settings/wcj-settings-general.php:157
11020
  msgid "This will add user roles changer tool to admin bar."
11021
  msgstr ""
11022
 
11023
+ #: includes/settings/wcj-settings-general.php:163
11024
  msgid "Booster User Roles Changer"
11025
  msgstr ""
11026
 
11027
+ #: includes/settings/wcj-settings-general.php:172
11028
  msgid "Enabled for"
11029
  msgstr ""
11030
 
11031
+ #: includes/settings/wcj-settings-general.php:184
11032
+ msgid "PHP Options"
11033
+ msgstr ""
11034
+
11035
+ #: includes/settings/wcj-settings-general.php:189
11036
+ msgid "PHP Memory Limit"
11037
+ msgstr ""
11038
+
11039
+ #: includes/settings/wcj-settings-general.php:190
11040
+ msgid "megabytes."
11041
+ msgstr ""
11042
+
11043
+ #: includes/settings/wcj-settings-general.php:191
11044
+ #: includes/settings/wcj-settings-general.php:200
11045
+ #: includes/settings/wcj-settings-offer-price.php:172
11046
+ #: includes/settings/wcj-settings-offer-price.php:180
11047
+ #: includes/settings/meta-box/wcj-settings-meta-box-offer-price.php:43
11048
+ #: includes/settings/meta-box/wcj-settings-meta-box-offer-price.php:52
11049
+ msgid "Set zero to disable."
11050
+ msgstr ""
11051
+
11052
+ #: includes/settings/wcj-settings-general.php:198
11053
+ msgid "PHP Time Limit"
11054
+ msgstr ""
11055
+
11056
+ #: includes/settings/wcj-settings-general.php:199
11057
+ msgid "seconds."
11058
+ msgstr ""
11059
+
11060
  #: includes/settings/wcj-settings-global-discount.php:24
11061
  msgid "Total Groups"
11062
  msgstr ""
11139
  msgstr ""
11140
 
11141
  #: includes/settings/wcj-settings-global-discount.php:110
11142
+ #: includes/settings/wcj-settings-related-products.php:196
11143
  msgid "Include Product Categories"
11144
  msgstr ""
11145
 
11150
  msgstr ""
11151
 
11152
  #: includes/settings/wcj-settings-global-discount.php:119
11153
+ #: includes/settings/wcj-settings-related-products.php:205
11154
  msgid "Exclude Product Categories"
11155
  msgstr ""
11156
 
11161
  msgstr ""
11162
 
11163
  #: includes/settings/wcj-settings-global-discount.php:128
11164
+ #: includes/settings/wcj-settings-related-products.php:214
11165
  msgid "Include Product Tags"
11166
  msgstr ""
11167
 
11172
  msgstr ""
11173
 
11174
  #: includes/settings/wcj-settings-global-discount.php:137
11175
+ #: includes/settings/wcj-settings-related-products.php:223
11176
  msgid "Exclude Product Tags"
11177
  msgstr ""
11178
 
11195
  msgstr ""
11196
 
11197
  #: includes/settings/wcj-settings-global-discount.php:175
11198
+ #: includes/settings/wcj-settings-product-price-by-formula.php:95
11199
  msgid "Advanced Settings"
11200
  msgstr ""
11201
 
11210
  msgstr ""
11211
 
11212
  #: includes/settings/wcj-settings-global-discount.php:188
11213
+ #: includes/settings/wcj-settings-product-price-by-formula.php:100
11214
  msgid "Price Filters Priority"
11215
  msgstr ""
11216
 
11220
  #: includes/settings/wcj-settings-price-by-country.php:157
11221
  #: includes/settings/wcj-settings-price-by-user-role.php:70
11222
  #: includes/settings/wcj-settings-product-addons.php:242
11223
+ #: includes/settings/wcj-settings-product-price-by-formula.php:101
11224
+ #: includes/settings/wcj-settings-wholesale-price.php:126
11225
  msgid ""
11226
  "Priority for all module's price filters. Set to zero to use default priority."
11227
  msgstr ""
11319
  msgid "Maximum Allowed Each Product's Quantity per User"
11320
  msgstr ""
11321
 
11322
+ #: includes/settings/wcj-settings-max-products-per-user.php:61
11323
+ msgid ""
11324
+ "This sets when (i.e. on which order status) users' quantities should be "
11325
+ "updated."
11326
+ msgstr ""
11327
+
11328
+ #: includes/settings/wcj-settings-max-products-per-user.php:62
11329
+ msgid ""
11330
+ "You can select multiple order status here - quantities will be updated only "
11331
+ "once, on whichever status is triggered first."
11332
+ msgstr ""
11333
+
11334
+ #: includes/settings/wcj-settings-max-products-per-user.php:63
11335
+ msgid "If no status are selected - \"Completed\" order status is used."
11336
+ msgstr ""
11337
+
11338
+ #: includes/settings/wcj-settings-max-products-per-user.php:71
11339
  #: includes/settings/wcj-settings-offer-price.php:203
11340
  msgid "Customer Message"
11341
  msgstr ""
11342
 
11343
+ #: includes/settings/wcj-settings-max-products-per-user.php:79
11344
  msgid "Block Checkout Page"
11345
  msgstr ""
11346
 
11347
+ #: includes/settings/wcj-settings-max-products-per-user.php:81
11348
  msgid ""
11349
  "This will stop customer from accessing the checkout page on exceeded "
11350
  "quantities. Customer will be redirected to the cart page."
11351
  msgstr ""
11352
 
11353
+ #: includes/settings/wcj-settings-max-products-per-user.php:87
11354
+ #: includes/settings/wcj-settings-max-products-per-user.php:93
11355
  msgid "Calculate Data"
11356
  msgstr ""
11357
 
11423
  #: includes/settings/wcj-settings-price-by-country.php:156
11424
  #: includes/settings/wcj-settings-price-by-user-role.php:69
11425
  #: includes/settings/wcj-settings-product-addons.php:241
11426
+ #: includes/settings/wcj-settings-wholesale-price.php:125
11427
  msgid "Advanced: Price Filters Priority"
11428
  msgstr ""
11429
 
11486
  msgstr ""
11487
 
11488
  #: includes/settings/wcj-settings-multicurrency.php:72
11489
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:66
11490
  #: includes/settings/wcj-settings-product-price-by-formula.php:64
11491
  msgid "Rounding"
11492
  msgstr ""
11558
  msgstr ""
11559
 
11560
  #: includes/settings/wcj-settings-multicurrency.php:186
11561
+ #: includes/settings/wcj-settings-wholesale-price.php:185
11562
  msgid "Save settings after you change this option. Leave blank to disable."
11563
  msgstr ""
11564
 
11658
  msgstr ""
11659
 
11660
  #: includes/settings/wcj-settings-my-account.php:143
11661
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:115
11662
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:127
11663
  #: includes/settings/wcj-settings-stock.php:42
11664
  #: includes/settings/wcj-settings-stock.php:55
11665
  msgid "Ignored if empty."
12151
 
12152
  #: includes/settings/wcj-settings-order-min-amount.php:29
12153
  #: includes/settings/wcj-settings-order-min-amount.php:36
12154
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:98
12155
  msgid "Exclude"
12156
  msgstr ""
12157
 
12766
  msgid "Fee (or discount) title to show to customer."
12767
  msgstr ""
12768
 
12769
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:31
12770
  msgid "Fee (or Discount) Type"
12771
  msgstr ""
12772
 
12773
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:32
12774
  msgid "Percent or fixed value."
12775
  msgstr ""
12776
 
12777
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:42
12778
  msgid "Fee (or Discount) Value"
12779
  msgstr ""
12780
 
12781
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:43
12782
  msgid "The value. For discount enter a negative number."
12783
  msgstr ""
12784
 
12785
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:50
12786
  msgid "Minimum Cart Amount"
12787
  msgstr ""
12788
 
12789
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:51
12790
  msgid "Minimum cart amount for adding the fee (or discount)."
12791
  msgstr ""
12792
 
12793
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:51
12794
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:59
12795
  msgid "Set 0 to disable."
12796
  msgstr ""
12797
 
12798
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:58
12799
  msgid "Maximum Cart Amount"
12800
  msgstr ""
12801
 
12802
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:59
12803
  msgid "Maximum cart amount for adding the fee (or discount)."
12804
  msgstr ""
12805
 
12806
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:68
12807
  msgid "Round the fee (or discount) value before adding to the cart."
12808
  msgstr ""
12809
 
12810
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:75
12811
  msgid "If rounding is enabled, set precision (i.e. number of decimals) here."
12812
  msgstr ""
12813
 
12814
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:89
12815
  msgid "Tax class"
12816
  msgstr ""
12817
 
12818
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:90
12819
  msgid "If taxing is enabled, set tax class here."
12820
  msgstr ""
12821
 
12822
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:94
12823
  msgid "Standard Rate"
12824
  msgstr ""
12825
 
12826
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:97
12827
  msgid "Exclude Shipping when Calculating Total Cart Amount"
12828
  msgstr ""
12829
 
12830
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:99
12831
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:107
12832
  msgid ""
12833
  "This affects \"Percent\" type fees and \"Minimum/Maximum Cart Amount\" "
12834
  "options."
12835
  msgstr ""
12836
 
12837
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:105
12838
+ msgid "Include Taxes"
12839
+ msgstr ""
12840
+
12841
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:106
12842
+ msgid "Include taxes when calculating Total Cart Amount"
12843
+ msgstr ""
12844
+
12845
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:113
12846
  msgid "Require Products"
12847
  msgstr ""
12848
 
12849
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:114
12850
  msgid ""
12851
  "Require at least one of selected products to be in cart for fee to be "
12852
  "applied."
12853
  msgstr ""
12854
 
12855
+ #: includes/settings/wcj-settings-payment-gateways-fees.php:126
12856
  msgid "Do not apply fee, if at least one of selected products is in cart."
12857
  msgstr ""
12858
 
12913
  msgid "Max"
12914
  msgstr ""
12915
 
12916
+ #: includes/settings/wcj-settings-payment-gateways-per-category.php:24
12917
+ msgid "Use Variations"
12918
+ msgstr ""
12919
+
12920
+ #: includes/settings/wcj-settings-payment-gateways-per-category.php:26
12921
+ msgid "Will use variations instead of main product for variable type products."
12922
+ msgstr ""
12923
+
12924
+ #: includes/settings/wcj-settings-payment-gateways-per-category.php:36
12925
+ msgid "Gateways"
12926
+ msgstr ""
12927
+
12928
+ #: includes/settings/wcj-settings-payment-gateways-per-category.php:49
12929
  #: includes/settings/wcj-settings-price-labels.php:125
12930
  #: includes/settings/wcj-settings-product-input-fields.php:110
12931
  msgid "Product Categories - Include"
12932
  msgstr ""
12933
 
12934
+ #: includes/settings/wcj-settings-payment-gateways-per-category.php:50
12935
  msgid ""
12936
  "Show gateway only if there is product of selected category in cart. Leave "
12937
  "blank to disable the option."
12938
  msgstr ""
12939
 
12940
+ #: includes/settings/wcj-settings-payment-gateways-per-category.php:60
12941
  #: includes/settings/wcj-settings-price-labels.php:134
12942
  #: includes/settings/wcj-settings-product-input-fields.php:121
12943
  msgid "Product Categories - Exclude"
12944
  msgstr ""
12945
 
12946
+ #: includes/settings/wcj-settings-payment-gateways-per-category.php:61
12947
  msgid ""
12948
  "Hide gateway if there is product of selected category in cart. Leave blank "
12949
  "to disable the option."
12950
  msgstr ""
12951
 
12952
+ #: includes/settings/wcj-settings-payment-gateways-per-category.php:72
12953
  #: includes/settings/wcj-settings-price-labels.php:107
12954
  #: includes/settings/wcj-settings-product-input-fields.php:155
12955
  msgid "Products - Include"
12956
  msgstr ""
12957
 
12958
+ #: includes/settings/wcj-settings-payment-gateways-per-category.php:73
12959
  msgid ""
12960
  "Show gateway only if there is selected products in cart. Leave blank to "
12961
  "disable the option."
12962
  msgstr ""
12963
 
12964
+ #: includes/settings/wcj-settings-payment-gateways-per-category.php:85
12965
  #: includes/settings/wcj-settings-price-labels.php:116
12966
  #: includes/settings/wcj-settings-product-input-fields.php:167
12967
  msgid "Products - Exclude"
12968
  msgstr ""
12969
 
12970
+ #: includes/settings/wcj-settings-payment-gateways-per-category.php:86
12971
  msgid ""
12972
  "Hide gateway if there is selected products in cart. Leave blank to disable "
12973
  "the option."
14337
 
14338
  #: includes/settings/wcj-settings-product-addons.php:248
14339
  #: includes/settings/wcj-settings-product-bookings.php:98
14340
+ #: includes/settings/wcj-settings-product-open-pricing.php:129
14341
  msgid "Advanced: Check for Outputted Data"
14342
  msgstr ""
14343
 
14344
  #: includes/settings/wcj-settings-product-addons.php:250
14345
  #: includes/settings/wcj-settings-product-bookings.php:100
14346
  #: includes/settings/wcj-settings-product-input-fields.php:337
14347
+ #: includes/settings/wcj-settings-product-open-pricing.php:131
14348
  msgid ""
14349
  "Ensures that data outputted only once. Enable this if you see data outputted "
14350
  "on frontend twice. Disable if you see no data outputted."
14801
  #: includes/settings/wcj-settings-product-images.php:67
14802
  #: includes/settings/wcj-settings-products-xml.php:111
14803
  #: includes/settings/meta-box/wcj-settings-meta-box-product-images.php:18
14804
+ #: includes/settings/meta-box/wcj-settings-meta-box-product-images.php:26
14805
  msgid "You can use shortcodes here."
14806
  msgstr ""
14807
 
15376
  msgid "Message on Price too Small"
15377
  msgstr ""
15378
 
15379
+ #: includes/settings/wcj-settings-product-open-pricing.php:86
15380
  msgid "Message on Price too Big"
15381
  msgstr ""
15382
 
15383
+ #: includes/settings/wcj-settings-product-open-pricing.php:94
15384
  msgid "Disable Quantity Input"
15385
  msgstr ""
15386
 
15387
+ #: includes/settings/wcj-settings-product-open-pricing.php:101
15388
  msgid "Enable JS Min/Max Validation"
15389
  msgstr ""
15390
 
15391
+ #: includes/settings/wcj-settings-product-open-pricing.php:108
15392
  msgid "Display Product Price Info in Archives"
15393
  msgstr ""
15394
 
15395
+ #: includes/settings/wcj-settings-product-open-pricing.php:115
15396
  msgid ""
15397
  "Product price info in archives template. Replaceable values: <code>"
15398
  "%default_price%</code>, <code>%min_price%</code>, <code>%max_price%</code>."
15399
  msgstr ""
15400
 
15401
+ #: includes/settings/wcj-settings-product-open-pricing.php:122
15402
  msgid "Add \"Open Pricing\" Column to Admin Product List"
15403
  msgstr ""
15404
 
15438
  msgid "No rounding (disabled)"
15439
  msgstr ""
15440
 
15441
+ #: includes/settings/wcj-settings-product-price-by-formula.php:83
15442
+ msgid "Disable Admin Scope"
15443
+ msgstr ""
15444
+
15445
+ #: includes/settings/wcj-settings-product-price-by-formula.php:84
15446
+ msgid "Disable module on Admin scope."
15447
+ msgstr ""
15448
+
15449
+ #: includes/settings/wcj-settings-product-price-by-formula.php:85
15450
+ msgid ""
15451
+ "Disable if you want to use Product Price by Formula module only on Frontend."
15452
+ msgstr ""
15453
+
15454
+ #: includes/settings/wcj-settings-product-price-by-formula.php:85
15455
+ msgid ""
15456
+ "For example if you use Cost of Goods module the profit will be correctly "
15457
+ "calculated if you leave the box unticked"
15458
+ msgstr ""
15459
+
15460
  #: includes/settings/wcj-settings-product-tabs.php:20
15461
  msgid "Content Processing"
15462
  msgstr ""
16066
  msgid "Relate Manually: Select box type"
16067
  msgstr ""
16068
 
16069
+ #: includes/settings/wcj-settings-related-products.php:169
16070
+ msgid "Default metabox value"
16071
+ msgstr ""
16072
+
16073
+ #: includes/settings/wcj-settings-related-products.php:170
16074
+ msgid ""
16075
+ "If set to \"Yes\" and no products are selected it will hide related products"
16076
+ msgstr ""
16077
+
16078
+ #: includes/settings/wcj-settings-related-products.php:189
16079
  msgid "Hide Related Products"
16080
  msgstr ""
16081
 
16082
+ #: includes/settings/wcj-settings-related-products.php:197
16083
  msgid ""
16084
  "Set this field to hide related products on selected product categories only. "
16085
  "Leave blank to hide on all products."
16086
  msgstr ""
16087
 
16088
+ #: includes/settings/wcj-settings-related-products.php:206
16089
  msgid ""
16090
  "Set this field to NOT hide related products on selected product categories. "
16091
  "Leave blank to hide on all products."
16092
  msgstr ""
16093
 
16094
+ #: includes/settings/wcj-settings-related-products.php:215
16095
  msgid ""
16096
  "Set this field to hide related products on selected product tags only. Leave "
16097
  "blank to hide on all products."
16098
  msgstr ""
16099
 
16100
+ #: includes/settings/wcj-settings-related-products.php:224
16101
  msgid ""
16102
  "Set this field to NOT hide related products on selected product tags. Leave "
16103
  "blank to hide on all products."
16104
  msgstr ""
16105
 
16106
+ #: includes/settings/wcj-settings-related-products.php:234
16107
  msgid ""
16108
  "Set this field to hide related products on selected products only. Leave "
16109
  "blank to hide on all products."
16110
  msgstr ""
16111
 
16112
+ #: includes/settings/wcj-settings-related-products.php:245
16113
  msgid ""
16114
  "Set this field to NOT hide related products on selected products. Leave "
16115
  "blank to hide on all products."
17070
 
17071
  #: includes/settings/wcj-settings-tax-display.php:122
17072
  #, php-format
17073
+ msgid "Role: %s - shop"
17074
  msgstr ""
17075
 
17076
+ #: includes/settings/wcj-settings-tax-display.php:124
17077
+ msgid "Setup how taxes will be applied during in the shop."
17078
  msgstr ""
17079
 
17080
  #: includes/settings/wcj-settings-tax-display.php:128
17081
+ #: includes/settings/wcj-settings-tax-display.php:140
17082
+ msgid "Default TAX display (no changes)"
17083
  msgstr ""
17084
 
17085
  #: includes/settings/wcj-settings-tax-display.php:129
17086
+ #: includes/settings/wcj-settings-tax-display.php:141
17087
+ msgid "Including tax"
17088
+ msgstr ""
17089
+
17090
+ #: includes/settings/wcj-settings-tax-display.php:130
17091
+ #: includes/settings/wcj-settings-tax-display.php:142
17092
  msgid "Excluding tax"
17093
  msgstr ""
17094
 
17095
+ #: includes/settings/wcj-settings-tax-display.php:134
17096
+ #, php-format
17097
+ msgid "Role: %s - cart"
17098
+ msgstr ""
17099
+
17100
+ #: includes/settings/wcj-settings-tax-display.php:136
17101
+ msgid "Setup how taxes will be applied during cart and checkout."
17102
+ msgstr ""
17103
+
17104
  #: includes/settings/wcj-settings-template-editor.php:25
17105
  msgid "Templates to Edit"
17106
  msgstr ""
17337
  msgid "Disable wholesale pricing for products with \"Price Changes\""
17338
  msgstr ""
17339
 
17340
+ #: includes/settings/wcj-settings-wholesale-price.php:136
17341
  msgid "Wholesale Levels Options"
17342
  msgstr ""
17343
 
17344
+ #: includes/settings/wcj-settings-wholesale-price.php:141
17345
+ #: includes/settings/wcj-settings-wholesale-price.php:198
17346
  msgid "Number of Levels"
17347
  msgstr ""
17348
 
17349
+ #: includes/settings/wcj-settings-wholesale-price.php:155
17350
+ #: includes/settings/wcj-settings-wholesale-price.php:212
17351
  msgid "Min Quantity"
17352
  msgstr ""
17353
 
17354
+ #: includes/settings/wcj-settings-wholesale-price.php:156
17355
+ #: includes/settings/wcj-settings-wholesale-price.php:213
17356
  msgid "Minimum quantity to apply discount"
17357
  msgstr ""
17358
 
17359
+ #: includes/settings/wcj-settings-wholesale-price.php:163
17360
+ #: includes/settings/wcj-settings-wholesale-price.php:164
17361
+ #: includes/settings/wcj-settings-wholesale-price.php:220
17362
+ #: includes/settings/wcj-settings-wholesale-price.php:221
17363
  #: includes/settings/meta-box/wcj-settings-meta-box-wholesale-price.php:72
17364
  #: includes/settings/meta-box/wcj-settings-meta-box-wholesale-price.php:108
17365
  msgid "Discount"
17366
  msgstr ""
17367
 
17368
+ #: includes/settings/wcj-settings-wholesale-price.php:178
17369
  msgid "Additional User Roles Options"
17370
  msgstr ""
17371
 
17372
+ #: includes/settings/wcj-settings-wholesale-price.php:180
17373
  msgid ""
17374
  "If you want to set different wholesale pricing options for different user "
17375
  "roles, fill this section. Please note that you can also use Booster's "
17376
  "\"Price based on User Role\" module without filling this section."
17377
  msgstr ""
17378
 
17379
+ #: includes/settings/wcj-settings-wholesale-price.php:184
17380
  msgid "User Roles Settings"
17381
  msgstr ""
17382
 
17597
  msgid "Replace image with custom HTML on single product page"
17598
  msgstr ""
17599
 
17600
+ #: includes/settings/meta-box/wcj-settings-meta-box-product-images.php:25
17601
  msgid "Replace image with custom HTML on archives"
17602
  msgstr ""
17603
 
17604
+ #: includes/settings/meta-box/wcj-settings-meta-box-product-images.php:37
17605
  msgid "Hide Image on Single"
17606
  msgstr ""
17607
 
17608
+ #: includes/settings/meta-box/wcj-settings-meta-box-product-images.php:47
17609
  msgid "Hide Thumbnails on Single"
17610
  msgstr ""
17611
 
17612
+ #: includes/settings/meta-box/wcj-settings-meta-box-product-images.php:57
17613
  msgid "Hide Image on Archives"
17614
  msgstr ""
17615
 
17635
  msgid "Number of Parameters"
17636
  msgstr ""
17637
 
17638
+ #: includes/settings/meta-box/wcj-settings-meta-box-related-products.php:20
17639
  msgid ""
17640
  "If enabled and no products selected - will hide related products section on "
17641
  "frontend for current product."
17642
  msgstr ""
17643
 
17644
+ #: includes/settings/meta-box/wcj-settings-meta-box-related-products.php:31
17645
  msgid ""
17646
  "Hold Control (Ctrl) key to select multiple products. Ctrl and \"A\" to "
17647
  "select all products."
17788
  msgid "Enable Custom Shipping"
17789
  msgstr ""
17790
 
17791
+ #: includes/shortcodes/class-wcj-shortcodes-general.php:95
17792
  msgid "Tax toggle (incl.)"
17793
  msgstr ""
17794
 
17795
+ #: includes/shortcodes/class-wcj-shortcodes-general.php:96
17796
  msgid "Tax toggle (excl.)"
17797
  msgstr ""
17798
 
17800
  msgid "Attribute \"name\" is required!"
17801
  msgstr ""
17802
 
 
 
 
 
 
 
 
 
17803
  #: includes/shortcodes/class-wcj-shortcodes-products-add-form.php:54
17804
  msgid "Product by User"
17805
  msgstr ""
readme.txt CHANGED
@@ -1,9 +1,9 @@
1
  === Booster for WooCommerce ===
2
- Contributors: algoritmika, anbinder, debugeris
3
  Tags: woocommerce, booster for woocommerce, woocommerce jetpack
4
  Requires at least: 4.4
5
- Tested up to: 4.9
6
- Stable tag: 4.0.1
7
  License: GNU General Public License v3.0
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
@@ -134,17 +134,18 @@ Booster for WooCommerce is a WordPress WooCommerce plugin that supercharges your
134
  **Emails & Misc.**
135
 
136
  * *Admin Bar* - WooCommerce admin bar.
137
- * *Admin Tools* - Booster for WooCommerce debug and log tools.
138
  * *Booster WPML* - Booster for WooCommerce basic WPML support.
139
  * *Breadcrumbs* - Customize WooCommerce breadcrumbs.
140
  * *Custom CSS* - Separate custom CSS for front and back end. Per product CSS.
141
  * *Custom Emails* - Add custom emails to WooCommerce.
142
  * *Custom JS* - Separate custom JS for front and back end.
143
  * *Custom PHP* - Custom PHP tool.
 
144
  * *Email Options* - WooCommerce email options. E.g.: add another email recipient(s) to all WooCommerce emails.
145
  * *Email Verification* - Add WooCommerce email verification.
146
  * *Export* - WooCommerce export tools.
147
- * *General* - Custom roles tool. Shortcodes in WordPress text widgets.
148
  * *Modules By User Roles* - Enable/disable Booster for WooCommerce modules by user roles.
149
  * *My Account* - WooCommerce "My Account" page customization.
150
  * *Old Slugs* - Remove old products slugs.
@@ -191,6 +192,53 @@ You can see the differences between versions in this [table](https://booster.io/
191
 
192
  == Changelog ==
193
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
194
  = 4.0.1 - 12/10/2018 =
195
  * Fix - SHIPPING & ORDERS - Shipping Methods by Current Date/Time - Admin settings section title fixed.
196
  * Dev - EMAILS & MISC. - Custom PHP - Module description updated.
1
  === Booster for WooCommerce ===
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.0
6
+ Stable tag: 4.1.0
7
  License: GNU General Public License v3.0
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
134
  **Emails & Misc.**
135
 
136
  * *Admin Bar* - WooCommerce admin bar.
137
+ * *Admin Tools* - Booster for WooCommerce general back-end tools.
138
  * *Booster WPML* - Booster for WooCommerce basic WPML support.
139
  * *Breadcrumbs* - Customize WooCommerce breadcrumbs.
140
  * *Custom CSS* - Separate custom CSS for front and back end. Per product CSS.
141
  * *Custom Emails* - Add custom emails to WooCommerce.
142
  * *Custom JS* - Separate custom JS for front and back end.
143
  * *Custom PHP* - Custom PHP tool.
144
+ * *Debug Tools* - Booster for WooCommerce debug and log tools.
145
  * *Email Options* - WooCommerce email options. E.g.: add another email recipient(s) to all WooCommerce emails.
146
  * *Email Verification* - Add WooCommerce email verification.
147
  * *Export* - WooCommerce export tools.
148
+ * *General* - Booster for WooCommerce general front-end tools.
149
  * *Modules By User Roles* - Enable/disable Booster for WooCommerce modules by user roles.
150
  * *My Account* - WooCommerce "My Account" page customization.
151
  * *Old Slugs* - Remove old products slugs.
192
 
193
  == Changelog ==
194
 
195
+ = 4.1.0 - 12/12/2018 =
196
+ * Feature - CART & CHECKOUT - Checkout Customization - Add option to recalculate checkout.
197
+ * Feature - CART & CHECKOUT - Checkout Customization - Add option to update checkout when some field have its value changed.
198
+ * Feature - PAYMENT GATEWAYS - Gateways per Product or Category - "Use Variations" option added.
199
+ * Feature - SHIPPING & ORDERS - Maximum Products per User - "Order Status" option added.
200
+ * Feature - EMAILS & MISC. - Admin Tools - Products Options - "JSON Product Search Limit" option added.
201
+ * Feature - Shortcodes - General - `[wcj_post_meta_sum]` shortcode added.
202
+ * Fix - PRICES & CURRENCIES - Price Formats - Current currency issue fixed (e.g. price format on admin order edit page).
203
+ * Fix - PRICES & CURRENCIES - Product Price by Formula - Fix shortcodes as parameters miscalculating price on cart by adding `product_id` attribute on shortcodes.
204
+ * Fix - PRICES & CURRENCIES - Product Open Pricing (Name Your Price) - Empty price issue fixed.
205
+ * Fix - PRICES & CURRENCIES - Product Open Pricing (Name Your Price) - "Multicurrency (Currency Switcher)" module support added.
206
+ * Fix - PRODUCTS - Product Images - `product_images_hide_on_archive()` - Issue with replacing single product's image with custom HTML on archives fixed.
207
+ * Fix - PRODUCTS - Product Input Fields - Fix multiple uploads generating a single file by renaming them uniquely.
208
+ * Fix - PRODUCTS - Product MSRP - Comma decimal separator issue fixed.
209
+ * Fix - PRODUCTS - Related Products - Relate Manually - Fix warning if there aren't any products selected.
210
+ * Fix - CART & CHECKOUT - Checkout Custom Fields - Hidden fields are not added to order meta now (i.e. not showing hidden fields on thank you page and in emails now).
211
+ * Fix - PAYMENT GATEWAYS - Gateways Fees and Discounts - `init_options()` is now initialized on `init` hook for better translation and performance.
212
+ * Fix - SHIPPING & ORDERS - Order Min/Max Quantities - Fix quantity attribute of add to cart button on loop pages.
213
+ * Fix - SHIPPING & ORDERS - Order Minimum Amount - Add compatibility with Price by country module.
214
+ * Fix - PDF INVOICING & PACKING SLIPS - Bulk actions - "Undefined variable: sendback" PHP notice fixed.
215
+ * Fix - PDF INVOICING & PACKING SLIPS - Possible deprecated `each()` PHP notice fixed (compatibility with PHP v7.2.0).
216
+ * Fix - EMAILS & MISC. - Admin Bar - Page reload added after "Enable Module" checkbox is enabled (so admin bar is shown at once).
217
+ * Fix - EMAILS & MISC. - Custom Emails - `$_GET['order_id']` param added (fixes the issue with bulk status update emails on some servers).
218
+ * Dev - PRICES & CURRENCIES - Product Open Pricing (Name Your Price) - Message on Price too Small / too Big - `%price%`, `%min_price%` and `%max_price%` replaced values added.
219
+ * Dev - PRICES & CURRENCIES - Wholesale Price - "Advanced: Price Filters Priority" option added.
220
+ * Dev - PRICES & CURRENCIES - Product Price by Formula - Add option to use the module on admin scope.
221
+ * Dev - PRODUCTS - Product Images - `wcj_product_images_loop_product_thumbnail_filter`, `wcj_product_images_loop_product_thumbnail_filter_priority`, `wcj_product_images_single_product_images_filter` and `wcj_product_images_single_product_images_filter_priority` filters added.
222
+ * Dev - PRODUCTS - Tax Display - Add shop scope on display by user role option.
223
+ * Dev - PRODUCTS - Products per Page - Add compatibility with DIVI theme.
224
+ * Dev - PRODUCTS - Related Products - Relate Manually - Add new option to set the related products metabox value by default.
225
+ * Dev - PAYMENT GATEWAYS - Gateways Fees and Discounts - Shortcodes are now processed in fee titles.
226
+ * Dev - PAYMENT GATEWAYS - Gateways Fees and Discounts - Add new option to include taxes when calculating total cart amount.
227
+ * Dev - SHIPPING & ORDERS - Order Min/Max Quantities - Sync quantity button with add to cart button quantity.
228
+ * Dev - SHIPPING & ORDERS - Order Min/Max Quantities - Prevent add to cart button on shop pages from being clicked if input requirements haven't been met.
229
+ * Dev - EMAILS & MISC. - Admin Bar - "WooCommerce" Admin Bar - "List product categories" and "List product tags" options added.
230
+ * Dev - EMAILS & MISC. - Admin Tools - "Products Attributes" tool and "Product Revisions" option moved from "General" module.
231
+ * Dev - EMAILS & MISC. - Admin Tools - Module description updated. Admin settings restyled and descriptions updated. "Show extended info" link added.
232
+ * Dev - EMAILS & MISC. - Debug Tools - Initial module release (tools moved from "Admin Tools" module). Admin settings descriptions updated. Log restyled.
233
+ * Dev - EMAILS & MISC. - General - "PHP Options" options moved from "Admin Tools" module.
234
+ * Dev - EMAILS & MISC. - General - Module description updated. Admin settings descriptions updated.
235
+ * Dev - Functions - Products - `wcj_get_products()` - Code optimized.
236
+ * Dev - Shortcodes - Orders - `[wcj_order_total_in_words]` - `whole` attribute now automatically gets order currency symbol or currency code (set by `use_currency_symbol` attribute) (instead of `Dollars`). `decimal` attribute set to `&cent;` (instead of `Cents`).
237
+ * Dev - Shortcodes - Products - `[wcj_product_you_save_percent]` - Add compatibility with "Dynamic Pricing" plugin.
238
+ * Dev - Shortcodes - Products Crowdfunding - `get_product_orders_data()` - `start_date` and `order_status` optional attributes added.
239
+ * Dev - Shortcodes - Products Crowdfunding - `get_product_orders_data()` - Code cleaned up.
240
+ * Dev - Classes - `WCJ_Module_Product_By_Condition` - `pre_get_posts` - WP_Query optimized (`post__not_in` added).
241
+
242
  = 4.0.1 - 12/10/2018 =
243
  * Fix - SHIPPING & ORDERS - Shipping Methods by Current Date/Time - Admin settings section title fixed.
244
  * Dev - EMAILS & MISC. - Custom PHP - Module description updated.
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.0.1
7
  Author: Algoritmika Ltd
8
  Author URI: https://booster.io
9
  Text Domain: woocommerce-jetpack
10
  Domain Path: /langs
11
  Copyright: © 2018 Algoritmika Ltd.
12
- WC tested up to: 3.4
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.0.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.1.0
7
  Author: Algoritmika Ltd
8
  Author URI: https://booster.io
9
  Text Domain: woocommerce-jetpack
10
  Domain Path: /langs
11
  Copyright: © 2018 Algoritmika Ltd.
12
+ WC tested up to: 3.5
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.1.0';
61
 
62
  /**
63
  * @var WC_Jetpack The single instance of the class