Booster for WooCommerce - Version 4.0.0

Version Description

  • 11/10/2018 =
  • Feature - PRICES & CURRENCIES - Multicurrency (Currency Switcher) - Widget - "Form Method", "Class" and "Style" options added.
  • Feature - PRODUCTS - Product Addons - Frontend Templates - "Each Addon - Type: Select Box (Each Option)" option added.
  • Feature - SHIPPING & ORDERS - Order Custom Statuses - "Add Custom Statuses Buttons to Admin Order Preview Actions" option added.
  • Feature - SHIPPING & ORDERS - Orders - "Editable Orders" options added.
  • Feature - SHIPPING & ORDERS - Shipping Methods by City or Postcode - "Shipping Methods by Postcodes" subsection added.
  • Feature - SHIPPING & ORDERS - Shipping Methods by Current Date/Time - Initial module release.
  • Feature - EMAILS & MISC. - Admin Tools - "Suppress Admin Connect Notice" and "Suppress Admin Notices" options added.
  • Feature - EMAILS & MISC. - Custom CSS - "Code Position" option added.
  • Feature - EMAILS & MISC. - Custom JS - "Code Position" option added.
  • Feature - EMAILS & MISC. - Custom PHP - Initial module release.
  • Feature - EMAILS & MISC. - General - Add/Manage Custom Roles tool - "Capabilities" option added.
  • Fix - PRICES & CURRENCIES - Prices and Currencies by Country - Default values for options and empty string checks added.
  • Fix - CART & CHECKOUT - EU VAT Number - Possible "Undefined index: wcj_eu_vat_number_to_check..." PHP notice fixed.
  • Fix - PAYMENT GATEWAYS - Gateways by Shipping - Use Shipping Instances - Trying to extract shipping instance number from form with underscore symbol (e.g. "Flexible Shipping" plugin).
  • Fix - SHIPPING & ORDERS - Order Min/Max Quantities - isEmptyObject check added in wcj-order-quantities.js.
  • Fix - PDF INVOICING & PACKING SLIPS - Invoices Report tool - "Disable Saving PDFs in PHP directory for temporary files..." notice fixed.
  • Fix - EMAILS & MISC. - General - Add/Manage Custom Roles tool - sanitize_key() added for role ID (when adding new role).
  • Fix - EMAILS & MISC. - General - Products Attributes tool - Column titles fixed.
  • Fix - EMAILS & MISC. - Template Editor - Checking for modified template file to exist before replacing the original template.
  • Fix - Shortcodes - Products - [wcj_product_time_since_last_sale] - date_query fixed.
  • Fix - Functions - General - wcj_is_frontend() - AJAX part improved (woocommerce_load_variations backend action added).
  • Dev - PRICES & CURRENCIES - Global Discount - "Global Discount in Admin" option added.
  • Dev - PRICES & CURRENCIES - Multicurrency (Currency Switcher) - Module description updated.
  • Dev - PRODUCTS - Sale Flash - Code refactoring - "Per Category" and "Per Tag" options are stored in arrays now.
  • Dev - PAYMENT GATEWAYS - Gateways by Country, State or Postcode - Code refactoring.
  • Dev - PAYMENT GATEWAYS - Gateways Currency Converter - "Show Converted Prices" option added.
  • Dev - PAYMENT GATEWAYS - Gateways Currency Converter - Admin settings minor restyling.
  • Dev - SHIPPING & ORDERS - Order Custom Statuses - Code refactoring.
  • Dev - SHIPPING & ORDERS - Order Numbers - wcj_order_number_meta filter added.
  • Dev - EMAILS & MISC. - Admin Tools - Admin settings restyled ("Debug Tools Options" subsection added, "Debug Log" tool renamed).
  • Dev - EMAILS & MISC. - General - Add/Manage Custom Roles tool - Restyled; JS confirmation added etc.
  • Dev - EMAILS & MISC. - Template Editor - Admin settings minor restyling.
  • Dev - Shortcodes - General - [wcj_country_select_drop_down_list] - Code refactoring.
  • Dev - Shortcodes - Products - [wcj_product_available_variations] - param attribute added.
  • Dev - Shortcodes - Products - [wcj_product_time_since_last_sale] - Code refactoring.
  • Dev - Shortcodes - Products - [wcj_product_wholesale_price_table] - user_role attribute added.
  • Dev - Functions - Price and Currency - wcj_update_products_price_by_country() - WP_Query optimized to return ids only.
  • Dev - Classes - WCJ_Module - Modules' "extra description" restyled.
  • Dev - Code clean up.
Download this release

Release Info

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

Code changes from version 3.9.1 to 4.0.0

Files changed (65) hide show
  1. assets/images/flag-icons/bitcoin-cash.png +0 -0
  2. assets/images/flag-icons/bitcoin.png +0 -0
  3. assets/images/flag-icons/ethereum.png +0 -0
  4. assets/images/flag-icons/global.png +0 -0
  5. assets/images/flag-icons/litecoin.png +0 -0
  6. includes/admin/wcj-modules-cats.php +3 -1
  7. includes/class-wcj-admin-tools.php +10 -3
  8. includes/class-wcj-cart-customization.php +3 -3
  9. includes/class-wcj-crowdfunding.php +2 -0
  10. includes/class-wcj-custom-css.php +10 -9
  11. includes/class-wcj-custom-js.php +6 -7
  12. includes/class-wcj-custom-php.php +90 -0
  13. includes/class-wcj-eu-vat-number.php +4 -31
  14. includes/class-wcj-export-import.php +16 -15
  15. includes/class-wcj-general.php +34 -18
  16. includes/class-wcj-global-discount.php +3 -3
  17. includes/class-wcj-multicurrency.php +15 -6
  18. includes/class-wcj-order-custom-statuses.php +92 -24
  19. includes/class-wcj-order-numbers.php +4 -4
  20. includes/class-wcj-orders.php +17 -2
  21. includes/class-wcj-payment-gateways-by-country.php +4 -34
  22. includes/class-wcj-payment-gateways-by-shipping.php +12 -6
  23. includes/class-wcj-payment-gateways-currency.php +22 -5
  24. includes/class-wcj-price-labels.php +8 -11
  25. includes/class-wcj-product-addons.php +7 -3
  26. includes/class-wcj-sale-flash.php +39 -8
  27. includes/class-wcj-shipping-by-cities.php +20 -6
  28. includes/class-wcj-shipping-by-time.php +125 -0
  29. includes/class-wcj-tax-display.php +3 -3
  30. includes/class-wcj-template-editor.php +7 -4
  31. includes/classes/class-wcj-module-shipping-by-condition.php +11 -2
  32. includes/classes/class-wcj-module.php +6 -15
  33. includes/classes/class-wcj-pdf-invoice.php +13 -19
  34. includes/core/wcj-modules.php +3 -1
  35. includes/functions/wcj-functions-general.php +46 -4
  36. includes/functions/wcj-functions-html.php +20 -1
  37. includes/functions/wcj-functions-price-currency.php +19 -12
  38. includes/functions/wcj-functions-users.php +0 -9
  39. includes/gateways/class-wc-gateway-wcj-custom.php +15 -23
  40. includes/js/wcj-order-quantities.js +54 -43
  41. includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php +4 -4
  42. includes/price-by-country/class-wcj-price-by-country-core.php +8 -15
  43. includes/price-by-country/class-wcj-price-by-country-local.php +5 -5
  44. includes/reports/countries/wcj-country-sets.php +1 -4
  45. includes/settings/meta-box/wcj-settings-meta-box-price-by-country.php +3 -3
  46. includes/settings/wcj-settings-admin-tools.php +46 -27
  47. includes/settings/wcj-settings-custom-css.php +11 -1
  48. includes/settings/wcj-settings-custom-js.php +11 -1
  49. includes/settings/wcj-settings-custom-php.php +35 -0
  50. includes/settings/wcj-settings-global-discount.php +9 -1
  51. includes/settings/wcj-settings-order-custom-statuses.php +11 -1
  52. includes/settings/wcj-settings-orders.php +27 -1
  53. includes/settings/wcj-settings-payment-gateways-currency.php +22 -3
  54. includes/settings/wcj-settings-product-addons.php +9 -1
  55. includes/settings/wcj-settings-product-input-fields.php +1 -1
  56. includes/settings/wcj-settings-sale-flash.php +15 -6
  57. includes/settings/wcj-settings-shipping-by-condition.php +8 -5
  58. includes/settings/wcj-settings-template-editor.php +2 -2
  59. includes/shortcodes/class-wcj-shortcodes-general.php +18 -55
  60. includes/shortcodes/class-wcj-shortcodes-orders.php +2 -2
  61. includes/shortcodes/class-wcj-shortcodes-products.php +22 -25
  62. includes/widgets/class-wcj-widget-multicurrency.php +39 -5
  63. langs/woocommerce-jetpack.pot +636 -372
  64. readme.txt +46 -3
  65. woocommerce-jetpack.php +8 -4
assets/images/flag-icons/bitcoin-cash.png ADDED
Binary file
assets/images/flag-icons/bitcoin.png ADDED
Binary file
assets/images/flag-icons/ethereum.png ADDED
Binary file
assets/images/flag-icons/global.png ADDED
Binary file
assets/images/flag-icons/litecoin.png ADDED
Binary file
includes/admin/wcj-modules-cats.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Modules Array
4
  *
5
- * @version 3.9.0
6
  * @since 2.2.0
7
  * @author Algoritmika Ltd.
8
  * @todo (maybe) split "Shipping & Orders", "Cart & Checkout", "Products", "Prices & Currencies" etc.
@@ -144,6 +144,7 @@ return apply_filters( 'wcj_modules', array(
144
  'shipping_by_user_role',
145
  'shipping_by_products',
146
  'shipping_by_cities',
 
147
  'shipping_by_order_amount',
148
  'address_formats',
149
  'orders',
@@ -191,6 +192,7 @@ return apply_filters( 'wcj_modules', array(
191
  'wpml',
192
  'custom_css',
193
  'custom_js',
 
194
  'track_users',
195
  'modules_by_user_roles',
196
  'template_editor',
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.
144
  'shipping_by_user_role',
145
  'shipping_by_products',
146
  'shipping_by_cities',
147
+ 'shipping_by_time',
148
  'shipping_by_order_amount',
149
  'address_formats',
150
  'orders',
192
  'wpml',
193
  'custom_css',
194
  'custom_js',
195
+ 'custom_php',
196
  'track_users',
197
  'modules_by_user_roles',
198
  'template_editor',
includes/class-wcj-admin-tools.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Admin Tools
4
  *
5
- * @version 3.4.3
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -15,7 +15,7 @@ class WCJ_Admin_Tools extends WCJ_Module {
15
  /**
16
  * Constructor.
17
  *
18
- * @version 3.3.0
19
  * @todo (maybe) add editable (product and order) metas
20
  */
21
  function __construct() {
@@ -28,7 +28,7 @@ class WCJ_Admin_Tools extends WCJ_Module {
28
 
29
  $this->add_tools( array(
30
  'admin_tools' => array(
31
- 'title' => __( 'Admin Tools', 'woocommerce-jetpack' ),
32
  'desc' => __( 'Log.', 'woocommerce-jetpack' ),
33
  'tab_title' => __( 'Log', 'woocommerce-jetpack' ),
34
  ),
@@ -61,6 +61,13 @@ 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
  }
65
  }
66
 
2
  /**
3
  * Booster for WooCommerce - Module - Admin Tools
4
  *
5
+ * @version 4.0.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
15
  /**
16
  * Constructor.
17
  *
18
+ * @version 4.0.0
19
  * @todo (maybe) add editable (product and order) metas
20
  */
21
  function __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
  ),
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' );
67
+ }
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
 
includes/class-wcj-cart-customization.php CHANGED
@@ -67,7 +67,7 @@ class WCJ_Cart_Customization extends WCJ_Module {
67
  *
68
  * @version 3.1.0
69
  * @since 3.1.0
70
- * @todo fix folder structure in /templates
71
  */
72
  function replace_empty_cart_template( $located, $template_name, $args, $template_path, $default_path ) {
73
  if ( 'cart/cart-empty.php' == $template_name ) {
@@ -81,7 +81,7 @@ class WCJ_Cart_Customization extends WCJ_Module {
81
  *
82
  * @version 3.0.1
83
  * @since 3.0.1
84
- * @todo (maybe) check if link is not empty
85
  */
86
  function change_empty_cart_return_to_shop_link( $link ) {
87
  return ( is_cart() ? get_option( 'wcj_cart_customization_return_to_shop_button_link', '' ) : $link );
@@ -92,7 +92,7 @@ class WCJ_Cart_Customization extends WCJ_Module {
92
  *
93
  * @version 2.8.0
94
  * @since 2.8.0
95
- * @todo maybe check `is_cart()`
96
  */
97
  function enqueue_scripts() {
98
  wp_enqueue_script( 'wcj-cart-customization', wcj_plugin_url() . '/includes/js/wcj-cart-customization.js', array( 'jquery' ), WCJ()->version, false );
67
  *
68
  * @version 3.1.0
69
  * @since 3.1.0
70
+ * @todo [dev] fix folder structure in `/templates`
71
  */
72
  function replace_empty_cart_template( $located, $template_name, $args, $template_path, $default_path ) {
73
  if ( 'cart/cart-empty.php' == $template_name ) {
81
  *
82
  * @version 3.0.1
83
  * @since 3.0.1
84
+ * @todo [dev] (maybe) check if link is not empty
85
  */
86
  function change_empty_cart_return_to_shop_link( $link ) {
87
  return ( is_cart() ? get_option( 'wcj_cart_customization_return_to_shop_button_link', '' ) : $link );
92
  *
93
  * @version 2.8.0
94
  * @since 2.8.0
95
+ * @todo [dev] maybe check `is_cart()`
96
  */
97
  function enqueue_scripts() {
98
  wp_enqueue_script( 'wcj-cart-customization', wcj_plugin_url() . '/includes/js/wcj-cart-customization.js', array( 'jquery' ), WCJ()->version, false );
includes/class-wcj-crowdfunding.php CHANGED
@@ -17,6 +17,7 @@ class WCJ_Crowdfunding extends WCJ_Module {
17
  * Constructor.
18
  *
19
  * @version 2.8.0
 
20
  */
21
  function __construct() {
22
 
@@ -52,6 +53,7 @@ class WCJ_Crowdfunding extends WCJ_Module {
52
  * check_dates.
53
  *
54
  * @version 2.7.0
 
55
  */
56
  function check_dates( $purchasable, $_product ) {
57
  $_product_id = wcj_get_product_id_or_variation_parent_id( $_product );
17
  * Constructor.
18
  *
19
  * @version 2.8.0
20
+ * @since 2.2.6
21
  */
22
  function __construct() {
23
 
53
  * check_dates.
54
  *
55
  * @version 2.7.0
56
+ * @since 2.2.6
57
  */
58
  function check_dates( $purchasable, $_product ) {
59
  $_product_id = wcj_get_product_id_or_variation_parent_id( $_product );
includes/class-wcj-custom-css.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Custom CSS
4
  *
5
- * @version 2.8.0
6
  * @since 2.7.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -16,33 +16,32 @@ class WCJ_Custom_CSS extends WCJ_Module {
16
  /**
17
  * Constructor.
18
  *
19
- * @version 2.8.0
20
  * @since 2.7.0
21
- * @todo wp_safe_redirect after saving settings
22
- * @todo automatically enable the module if v <= 2.6.0 and General module enabled and `wcj_general_custom_css` or `wcj_general_custom_admin_css` are not empty
23
- * @todo (maybe) set `add_action` `priority` to `PHP_INT_MAX`
24
  */
25
  function __construct() {
26
 
27
  $this->id = 'custom_css';
28
  $this->short_desc = __( 'Custom CSS', 'woocommerce-jetpack' );
29
  $this->desc = __( 'Separate custom CSS for front and back end. Per product CSS.', 'woocommerce-jetpack' );
30
- // $this->desc = __( 'Another custom CSS, if you need one.', 'woocommerce-jetpack' );
31
  $this->link_slug = 'woocommerce-booster-custom-css';
32
  parent::__construct();
33
 
34
  if ( $this->is_enabled() ) {
35
  // Frontend
36
  if ( '' != get_option( 'wcj_general_custom_css', '' ) ) {
37
- add_action( 'wp_head', array( $this, 'hook_custom_css' ) );
38
  }
39
  // Admin
40
  if ( '' != get_option( 'wcj_general_custom_admin_css', '' ) ) {
41
- add_action( 'admin_head', array( $this, 'hook_custom_admin_css' ) );
42
  }
43
  // Per product
44
  if ( 'yes' === get_option( 'wcj_custom_css_per_product', 'no' ) ) {
45
- add_action( 'wp_head', array( $this, 'maybe_add_per_product_css' ) );
46
  // Settings
47
  add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
48
  add_action( 'save_post_product', array( $this, 'save_meta_box' ), PHP_INT_MAX, 2 );
@@ -69,6 +68,7 @@ class WCJ_Custom_CSS extends WCJ_Module {
69
  * hook_custom_css.
70
  *
71
  * @version 2.7.0
 
72
  */
73
  function hook_custom_css() {
74
  echo '<style>' . get_option( 'wcj_general_custom_css', '' ) . '</style>';
@@ -78,6 +78,7 @@ class WCJ_Custom_CSS extends WCJ_Module {
78
  * hook_custom_admin_css.
79
  *
80
  * @version 2.7.0
 
81
  */
82
  function hook_custom_admin_css() {
83
  echo '<style>' . get_option( 'wcj_general_custom_admin_css', '' ) . '</style>';
2
  /**
3
  * Booster for WooCommerce - Module - Custom CSS
4
  *
5
+ * @version 4.0.0
6
  * @since 2.7.0
7
  * @author Algoritmika Ltd.
8
  */
16
  /**
17
  * Constructor.
18
  *
19
+ * @version 4.0.0
20
  * @since 2.7.0
21
+ * @todo [dev] `do_shortcode()`
22
+ * @todo [dev] wp_safe_redirect after saving settings
23
+ * @todo [dev] (maybe) set `add_action` `priority` to `PHP_INT_MAX`
24
  */
25
  function __construct() {
26
 
27
  $this->id = 'custom_css';
28
  $this->short_desc = __( 'Custom CSS', 'woocommerce-jetpack' );
29
  $this->desc = __( 'Separate custom CSS for front and back end. Per product CSS.', 'woocommerce-jetpack' );
 
30
  $this->link_slug = 'woocommerce-booster-custom-css';
31
  parent::__construct();
32
 
33
  if ( $this->is_enabled() ) {
34
  // Frontend
35
  if ( '' != get_option( 'wcj_general_custom_css', '' ) ) {
36
+ add_action( 'wp_' . get_option( 'wcj_custom_css_hook', 'head' ), array( $this, 'hook_custom_css' ) );
37
  }
38
  // Admin
39
  if ( '' != get_option( 'wcj_general_custom_admin_css', '' ) ) {
40
+ add_action( 'admin_' . get_option( 'wcj_custom_css_hook', 'head' ), array( $this, 'hook_custom_admin_css' ) );
41
  }
42
  // Per product
43
  if ( 'yes' === get_option( 'wcj_custom_css_per_product', 'no' ) ) {
44
+ add_action( 'wp_' . get_option( 'wcj_custom_css_hook', 'head' ), array( $this, 'maybe_add_per_product_css' ) );
45
  // Settings
46
  add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
47
  add_action( 'save_post_product', array( $this, 'save_meta_box' ), PHP_INT_MAX, 2 );
68
  * hook_custom_css.
69
  *
70
  * @version 2.7.0
71
+ * @since 2.7.0
72
  */
73
  function hook_custom_css() {
74
  echo '<style>' . get_option( 'wcj_general_custom_css', '' ) . '</style>';
78
  * hook_custom_admin_css.
79
  *
80
  * @version 2.7.0
81
+ * @since 2.7.0
82
  */
83
  function hook_custom_admin_css() {
84
  echo '<style>' . get_option( 'wcj_general_custom_admin_css', '' ) . '</style>';
includes/class-wcj-custom-js.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Custom JS
4
  *
5
- * @version 2.9.1
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -16,11 +16,10 @@ class WCJ_Custom_JS extends WCJ_Module {
16
  /**
17
  * Constructor.
18
  *
19
- * @version 2.8.0
20
  * @since 2.8.0
21
- * @todo footer or head
22
- * @todo (maybe) wp_safe_redirect after saving settings
23
- * @todo (maybe) set `add_action` `priority` to `PHP_INT_MAX`
24
  */
25
  function __construct() {
26
 
@@ -32,10 +31,10 @@ class WCJ_Custom_JS extends WCJ_Module {
32
 
33
  if ( $this->is_enabled() ) {
34
  if ( '' != get_option( 'wcj_custom_js_frontend', '' ) ) {
35
- add_action( 'wp_head', array( $this, 'custom_frontend_js' ) );
36
  }
37
  if ( '' != get_option( 'wcj_custom_js_backend', '' ) ) {
38
- add_action( 'admin_head', array( $this, 'custom_backend_js' ) );
39
  }
40
  }
41
  }
2
  /**
3
  * Booster for WooCommerce - Module - Custom JS
4
  *
5
+ * @version 4.0.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
16
  /**
17
  * Constructor.
18
  *
19
+ * @version 4.0.0
20
  * @since 2.8.0
21
+ * @todo [dev] wp_safe_redirect after saving settings
22
+ * @todo [dev] (maybe) set `add_action` `priority` to `PHP_INT_MAX`
 
23
  */
24
  function __construct() {
25
 
31
 
32
  if ( $this->is_enabled() ) {
33
  if ( '' != get_option( 'wcj_custom_js_frontend', '' ) ) {
34
+ add_action( 'wp_' . get_option( 'wcj_custom_js_hook', 'head' ), array( $this, 'custom_frontend_js' ) );
35
  }
36
  if ( '' != get_option( 'wcj_custom_js_backend', '' ) ) {
37
+ add_action( 'admin_' . get_option( 'wcj_custom_js_hook', 'head' ), array( $this, 'custom_backend_js' ) );
38
  }
39
  }
40
  }
includes/class-wcj-custom-php.php ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Booster for WooCommerce - Module - Custom PHP
4
+ *
5
+ * @version 4.0.0
6
+ * @since 4.0.0
7
+ * @author Algoritmika Ltd.
8
+ */
9
+
10
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
11
+
12
+ if ( ! class_exists( 'WCJ_Custom_PHP' ) ) :
13
+
14
+ class WCJ_Custom_PHP extends WCJ_Module {
15
+
16
+ /**
17
+ * Constructor.
18
+ *
19
+ * @version 4.0.0
20
+ * @since 4.0.0
21
+ * @todo [dev] maybe remove `wcj_disable_custom_php` from URL on settings save
22
+ * @todo [dev] allow tab in content (i.e. settings (textarea))
23
+ */
24
+ function __construct() {
25
+
26
+ $this->id = 'custom_php';
27
+ $this->short_desc = __( 'Custom PHP', 'woocommerce-jetpack' );
28
+ $this->desc = __( 'Custom PHP.', 'woocommerce-jetpack' );
29
+ $this->extra_desc = sprintf(
30
+ __( 'Please note that if you enable the module and enter non-valid PHP code here, your site will become unavailable. To fix this you will have to add %s attribute to the URL (you must be logged as shop manager or admin (for this reason custom PHP code is not executed on %s page)).', 'woocommerce-jetpack' ),
31
+ '<code>wcj_disable_custom_php</code>', '<strong>wp-login.php</strong>' ) . ' ' .
32
+ sprintf( __( 'E.g.: %s', 'woocommerce-jetpack' ),
33
+ '<a href="' . admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=emails_and_misc&section=custom_php&wcj_disable_custom_php' ) . '">' .
34
+ admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=emails_and_misc&section=custom_php&wcj_disable_custom_php' ) . '</a>' );
35
+ $this->link_slug = 'woocommerce-booster-custom-php';
36
+ parent::__construct();
37
+
38
+ add_action( 'woojetpack_after_settings_save', array( $this, 'create_php_file' ), PHP_INT_MAX, 2 );
39
+
40
+ if ( $this->is_enabled() ) {
41
+ if ( isset( $_GET['wcj_disable_custom_php'] ) ) {
42
+ if ( wcj_current_user_can( 'manage_woocommerce' ) ) {
43
+ // Stop custom PHP execution
44
+ return;
45
+ } elseif ( ! wcj_is_user_logged_in() ) {
46
+ // Redirect to login page
47
+ wp_redirect( wp_login_url( add_query_arg( '', '' ) ) );
48
+ exit;
49
+ }
50
+ }
51
+ if ( $GLOBALS['pagenow'] === 'wp-login.php' ) {
52
+ // Stop custom PHP execution if it's the login page
53
+ return;
54
+ }
55
+ // Executing custom PHP code
56
+ $file_path = wcj_get_wcj_uploads_dir( 'custom_php', false ) . DIRECTORY_SEPARATOR . 'booster.php';
57
+ if ( file_exists( $file_path ) ) {
58
+ include_once( $file_path );
59
+ }
60
+ }
61
+ }
62
+
63
+ /**
64
+ * create_php_file.
65
+ *
66
+ * @version 4.0.0
67
+ * @since 4.0.0
68
+ * @todo [dev] `unlink` and `rmdir` on settings reset
69
+ * @todo [dev] on empty content - delete dir also (`rmdir`)
70
+ */
71
+ function create_php_file( $sections, $current_section ) {
72
+ if ( $this->id === $current_section ) {
73
+ $file_content = get_option( 'wcj_custom_php', '' );
74
+ if ( '' !== $file_content ) {
75
+ $file_path = wcj_get_wcj_uploads_dir( 'custom_php' ) . DIRECTORY_SEPARATOR . 'booster.php';
76
+ file_put_contents( $file_path, '<?php' . PHP_EOL . $file_content );
77
+ } else {
78
+ $file_path = wcj_get_wcj_uploads_dir( 'custom_php', false ) . DIRECTORY_SEPARATOR . 'booster.php';
79
+ if ( file_exists( $file_path ) ) {
80
+ unlink( $file_path );
81
+ }
82
+ }
83
+ }
84
+ }
85
+
86
+ }
87
+
88
+ endif;
89
+
90
+ return new WCJ_Custom_PHP();
includes/class-wcj-eu-vat-number.php CHANGED
@@ -2,10 +2,9 @@
2
  /**
3
  * Booster for WooCommerce - Module - EU VAT Number
4
  *
5
- * @version 3.9.0
6
  * @since 2.3.9
7
  * @author Algoritmika Ltd.
8
- * @todo clean up
9
  */
10
 
11
  if ( ! defined( 'ABSPATH' ) ) exit;
@@ -18,6 +17,7 @@ class WCJ_EU_VAT_Number extends WCJ_Module {
18
  * Constructor.
19
  *
20
  * @version 3.3.0
 
21
  */
22
  function __construct() {
23
 
@@ -41,9 +41,6 @@ class WCJ_EU_VAT_Number extends WCJ_Module {
41
  add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
42
  add_action( 'wp_ajax_wcj_validate_eu_vat_number', array( $this, 'wcj_validate_eu_vat_number' ) );
43
  add_action( 'wp_ajax_nopriv_wcj_validate_eu_vat_number', array( $this, 'wcj_validate_eu_vat_number' ) );
44
- // add_filter( 'woocommerce_form_field_text', array( $this, 'add_eu_vat_verify_button' ), PHP_INT_MAX, 4 );
45
- // add_action( 'init', array( $this, 'wcj_validate_eu_vat_number' ) );
46
- // add_filter( 'woocommerce_find_rates', array( $this, 'maybe_exclude_vat' ), PHP_INT_MAX, 2 );
47
  add_filter( 'init', array( $this, 'maybe_exclude_vat' ), PHP_INT_MAX );
48
  add_action( 'woocommerce_after_checkout_validation', array( $this, 'checkout_validate_vat' ), PHP_INT_MAX );
49
  add_filter( 'woocommerce_customer_meta_fields', array( $this, 'add_eu_vat_number_customer_meta_field' ) );
@@ -193,11 +190,6 @@ class WCJ_EU_VAT_Number extends WCJ_Module {
193
  __( 'Taxes', 'woocommerce-jetpack' ),
194
  $taxes,
195
  ),
196
- /* array(
197
- __( 'Customer Meta', 'woocommerce-jetpack' ),
198
- // '<pre>' . print_r( get_user_meta( $_order->customer_user ), true ). '</pre>',
199
- '<pre>' . print_r( get_user_by( 'ID', $_order->customer_user ), true ). '</pre>',
200
- ), */
201
  );
202
  echo wcj_get_table_html( $table_data, array( 'table_class' => 'widefat striped', 'table_heading_type' => 'vertical' ) );
203
  echo '<p>' . '<a href="' . add_query_arg( 'validate_vat_and_maybe_remove_taxes', $order_id ) . '">' .
@@ -352,10 +344,9 @@ class WCJ_EU_VAT_Number extends WCJ_Module {
352
  /**
353
  * wcj_validate_eu_vat_number.
354
  *
355
- * @version 3.4.0
356
  */
357
  function wcj_validate_eu_vat_number( $param ) {
358
- // if ( ! isset( $_GET['wcj_validate_eu_vat_number'] ) ) return;
359
  if ( isset( $_POST['wcj_eu_vat_number_to_check'] ) && '' != $_POST['wcj_eu_vat_number_to_check'] ) {
360
  $eu_vat_number_to_check = substr( $_POST['wcj_eu_vat_number_to_check'], 2 );
361
  $eu_vat_number_country_to_check = substr( $_POST['wcj_eu_vat_number_to_check'], 0, 2 );
@@ -374,7 +365,7 @@ class WCJ_EU_VAT_Number extends WCJ_Module {
374
  $is_valid = null;
375
  }
376
  wcj_session_set( 'wcj_is_eu_vat_number_valid', $is_valid );
377
- wcj_session_set( 'wcj_eu_vat_number_to_check', $_POST['wcj_eu_vat_number_to_check'] );
378
  if ( false === $is_valid ) {
379
  echo '0';
380
  } elseif ( true === $is_valid ) {
@@ -392,7 +383,6 @@ class WCJ_EU_VAT_Number extends WCJ_Module {
392
  *
393
  * @version 3.4.0
394
  */
395
- // function maybe_exclude_vat( $matched_tax_rates, $args ) {
396
  function maybe_exclude_vat() {
397
  if (
398
  ( is_checkout() || is_cart() || defined( 'WOOCOMMERCE_CHECKOUT' ) || defined( 'WOOCOMMERCE_CART' ) || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) &&
@@ -414,12 +404,6 @@ class WCJ_EU_VAT_Number extends WCJ_Module {
414
  $preserve_base_country_check_passed = ( strtoupper( $location['country'] ) !== strtoupper( $selected_country ) );
415
  }
416
  if ( $preserve_base_country_check_passed ) {
417
- /* $modified_matched_tax_rates = array();
418
- foreach ( $matched_tax_rates as $i => $matched_tax_rate ) {
419
- $matched_tax_rate['rate'] = 0;
420
- $modified_matched_tax_rates[ $i ] = $matched_tax_rate;
421
- }
422
- return $modified_matched_tax_rates; */
423
  WC()->customer->set_is_vat_exempt( true );
424
  } else {
425
  WC()->customer->set_is_vat_exempt( false );
@@ -429,7 +413,6 @@ class WCJ_EU_VAT_Number extends WCJ_Module {
429
  WC()->customer->set_is_vat_exempt( false );
430
  }
431
  }
432
- // return $matched_tax_rates;
433
  }
434
 
435
  /**
@@ -469,15 +452,6 @@ class WCJ_EU_VAT_Number extends WCJ_Module {
469
  return $fields;
470
  }
471
 
472
- /**
473
- * add_eu_vat_verify_button.
474
- *
475
- function add_eu_vat_verify_button( $field, $key, $args, $value ) {
476
- return ( 'billing_eu_vat_number' === $key ) ?
477
- $field . '<span style="font-size:smaller !important;">' . '[<a name="billing_eu_vat_number_verify" href="">' . __( 'Verify', 'woocommerce-jetpack' ) . '</a>]' . '</span>' :
478
- $field;
479
- }
480
-
481
  /**
482
  * add_eu_vat_number_checkout_field_to_frontend.
483
  *
@@ -486,7 +460,6 @@ class WCJ_EU_VAT_Number extends WCJ_Module {
486
  function add_eu_vat_number_checkout_field_to_frontend( $fields ) {
487
  $fields['billing'][ 'billing_' . $this->id ] = array(
488
  'type' => 'text',
489
- // 'default' => ( null !== ( $eu_vat_number_to_check = wcj_session_get( 'wcj_eu_vat_number_to_check' ) ) ? $eu_vat_number_to_check : '' ),
490
  'label' => get_option( 'wcj_eu_vat_number_field_label' ),
491
  'description' => get_option( 'wcj_eu_vat_number_field_description' ),
492
  'placeholder' => get_option( 'wcj_eu_vat_number_field_placeholder' ),
2
  /**
3
  * Booster for WooCommerce - Module - EU VAT Number
4
  *
5
+ * @version 4.0.0
6
  * @since 2.3.9
7
  * @author Algoritmika Ltd.
 
8
  */
9
 
10
  if ( ! defined( 'ABSPATH' ) ) exit;
17
  * Constructor.
18
  *
19
  * @version 3.3.0
20
+ * @todo [feature] add option to add "Verify" button to frontend
21
  */
22
  function __construct() {
23
 
41
  add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
42
  add_action( 'wp_ajax_wcj_validate_eu_vat_number', array( $this, 'wcj_validate_eu_vat_number' ) );
43
  add_action( 'wp_ajax_nopriv_wcj_validate_eu_vat_number', array( $this, 'wcj_validate_eu_vat_number' ) );
 
 
 
44
  add_filter( 'init', array( $this, 'maybe_exclude_vat' ), PHP_INT_MAX );
45
  add_action( 'woocommerce_after_checkout_validation', array( $this, 'checkout_validate_vat' ), PHP_INT_MAX );
46
  add_filter( 'woocommerce_customer_meta_fields', array( $this, 'add_eu_vat_number_customer_meta_field' ) );
190
  __( 'Taxes', 'woocommerce-jetpack' ),
191
  $taxes,
192
  ),
 
 
 
 
 
193
  );
194
  echo wcj_get_table_html( $table_data, array( 'table_class' => 'widefat striped', 'table_heading_type' => 'vertical' ) );
195
  echo '<p>' . '<a href="' . add_query_arg( 'validate_vat_and_maybe_remove_taxes', $order_id ) . '">' .
344
  /**
345
  * wcj_validate_eu_vat_number.
346
  *
347
+ * @version 4.0.0
348
  */
349
  function wcj_validate_eu_vat_number( $param ) {
 
350
  if ( isset( $_POST['wcj_eu_vat_number_to_check'] ) && '' != $_POST['wcj_eu_vat_number_to_check'] ) {
351
  $eu_vat_number_to_check = substr( $_POST['wcj_eu_vat_number_to_check'], 2 );
352
  $eu_vat_number_country_to_check = substr( $_POST['wcj_eu_vat_number_to_check'], 0, 2 );
365
  $is_valid = null;
366
  }
367
  wcj_session_set( 'wcj_is_eu_vat_number_valid', $is_valid );
368
+ wcj_session_set( 'wcj_eu_vat_number_to_check', ( isset( $_POST['wcj_eu_vat_number_to_check'] ) ? $_POST['wcj_eu_vat_number_to_check'] : '' ) );
369
  if ( false === $is_valid ) {
370
  echo '0';
371
  } elseif ( true === $is_valid ) {
383
  *
384
  * @version 3.4.0
385
  */
 
386
  function maybe_exclude_vat() {
387
  if (
388
  ( is_checkout() || is_cart() || defined( 'WOOCOMMERCE_CHECKOUT' ) || defined( 'WOOCOMMERCE_CART' ) || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) &&
404
  $preserve_base_country_check_passed = ( strtoupper( $location['country'] ) !== strtoupper( $selected_country ) );
405
  }
406
  if ( $preserve_base_country_check_passed ) {
 
 
 
 
 
 
407
  WC()->customer->set_is_vat_exempt( true );
408
  } else {
409
  WC()->customer->set_is_vat_exempt( false );
413
  WC()->customer->set_is_vat_exempt( false );
414
  }
415
  }
 
416
  }
417
 
418
  /**
452
  return $fields;
453
  }
454
 
 
 
 
 
 
 
 
 
 
455
  /**
456
  * add_eu_vat_number_checkout_field_to_frontend.
457
  *
460
  function add_eu_vat_number_checkout_field_to_frontend( $fields ) {
461
  $fields['billing'][ 'billing_' . $this->id ] = array(
462
  'type' => 'text',
 
463
  'label' => get_option( 'wcj_eu_vat_number_field_label' ),
464
  'description' => get_option( 'wcj_eu_vat_number_field_description' ),
465
  'placeholder' => get_option( 'wcj_eu_vat_number_field_placeholder' ),
includes/class-wcj-export-import.php CHANGED
@@ -5,7 +5,6 @@
5
  * @version 3.0.0
6
  * @since 2.5.4
7
  * @author Algoritmika Ltd.
8
- * @todo import products, customers and (maybe) orders
9
  */
10
 
11
  if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
@@ -19,6 +18,7 @@ class WCJ_Export_Import extends WCJ_Module {
19
  *
20
  * @version 2.8.0
21
  * @since 2.5.4
 
22
  */
23
  function __construct() {
24
 
@@ -35,7 +35,8 @@ class WCJ_Export_Import extends WCJ_Module {
35
  ),
36
  'export_customers_from_orders' => array(
37
  'title' => __( 'Export Customers from Orders', 'woocommerce-jetpack' ),
38
- 'desc' => __( 'Export Customers (extracted from orders).', 'woocommerce-jetpack' ) . ' ' . __( 'Customers are identified by billing email.', 'woocommerce-jetpack' ),
 
39
  ),
40
  'export_orders' => array(
41
  'title' => __( 'Export Orders', 'woocommerce-jetpack' ),
@@ -64,8 +65,8 @@ class WCJ_Export_Import extends WCJ_Module {
64
  *
65
  * @version 2.5.9
66
  * @since 2.4.8
67
- * @todo when filtering now using strpos, but other options would be stripos (case-insensitive) or strict equality
68
- * @todo (maybe) do filtering directly in WP_Query
69
  */
70
  function export( $tool_id ) {
71
  $data = array();
@@ -108,9 +109,6 @@ class WCJ_Export_Import extends WCJ_Module {
108
  }
109
  }
110
  }
111
- /* if ( 1 == count( $data ) ) {
112
- return '<em>' . __( 'No results found.', 'woocommerce-jetpack' ) . '</em>';
113
- } */
114
  return $data;
115
  }
116
 
@@ -119,8 +117,8 @@ class WCJ_Export_Import extends WCJ_Module {
119
  *
120
  * @version 2.5.9
121
  * @since 2.5.9
122
- * @todo templates for xml_start, xml_end, xml_item.
123
- * @todo strip_tags (same to Export WooCommerce plugin)
124
  */
125
  function export_xml() {
126
  if ( isset( $_POST['wcj_export_xml'] ) ) {
@@ -184,7 +182,7 @@ class WCJ_Export_Import extends WCJ_Module {
184
  *
185
  * @version 2.5.9
186
  * @since 2.5.5
187
- * @todo filter each field separately
188
  */
189
  function export_filter_fields( $tool_id ) {
190
  $fields = array();
@@ -214,7 +212,7 @@ class WCJ_Export_Import extends WCJ_Module {
214
  '<button class="button-primary" type="submit" name="wcj_export_filter" value="' . $tool_id . '">' . __( 'Filter', 'woocommerce-jetpack' ) . '</button>',
215
  '',
216
  );
217
- return wcj_get_table_html( $data, array( 'table_class' => 'widefat', 'table_style' => 'width:50%;min-width:300px;', 'table_heading_type' => 'vertical', ) );
218
  }
219
  }
220
 
@@ -223,7 +221,7 @@ class WCJ_Export_Import extends WCJ_Module {
223
  *
224
  * @version 3.0.0
225
  * @since 3.0.0
226
- * @todo mark current (i.e. active) link (if exists)
227
  */
228
  function export_date_fields( $tool_id ) {
229
  $current_start_date = ( isset( $_GET['start_date'] ) ? $_GET['start_date'] : '' );
@@ -270,9 +268,12 @@ class WCJ_Export_Import extends WCJ_Module {
270
  echo '<p>';
271
  echo '<button class="button-primary" type="submit" name="wcj_export" value="' . $tool_id . '">' . __( 'Download CSV', 'woocommerce-jetpack' ) . '</button>';
272
  echo ' ';
273
- echo '<button class="button-primary" type="submit" name="wcj_export_xml" value="' . $tool_id . '">' . __( 'Download XML', 'woocommerce-jetpack' ) . '</button>';
274
- echo '<button style="float:right;margin-right:10px;" class="button-primary" type="submit" name="wcj_export_filter" value="' . $tool_id . '">' . __( 'Filter by All Fields', 'woocommerce-jetpack' ) . '</button>';
275
- echo '<input style="float:right;margin-right:10px;" type="text" name="wcj_export_filter_all_columns" value="' . ( isset( $_POST['wcj_export_filter_all_columns'] ) ? $_POST['wcj_export_filter_all_columns'] : '' ) . '">';
 
 
 
276
  echo '</p>';
277
  echo '</form>';
278
  $data = $this->export( $tool_id );
5
  * @version 3.0.0
6
  * @since 2.5.4
7
  * @author Algoritmika Ltd.
 
8
  */
9
 
10
  if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
18
  *
19
  * @version 2.8.0
20
  * @since 2.5.4
21
+ * @todo [feature] import products, customers and (maybe) orders
22
  */
23
  function __construct() {
24
 
35
  ),
36
  'export_customers_from_orders' => array(
37
  'title' => __( 'Export Customers from Orders', 'woocommerce-jetpack' ),
38
+ 'desc' => __( 'Export Customers (extracted from orders).', 'woocommerce-jetpack' ) . ' ' .
39
+ __( 'Customers are identified by billing email.', 'woocommerce-jetpack' ),
40
  ),
41
  'export_orders' => array(
42
  'title' => __( 'Export Orders', 'woocommerce-jetpack' ),
65
  *
66
  * @version 2.5.9
67
  * @since 2.4.8
68
+ * @todo [dev] when filtering now using `strpos`, but other options would be `stripos` (case-insensitive) or strict equality
69
+ * @todo [dev] (maybe) do filtering directly in WP_Query
70
  */
71
  function export( $tool_id ) {
72
  $data = array();
109
  }
110
  }
111
  }
 
 
 
112
  return $data;
113
  }
114
 
117
  *
118
  * @version 2.5.9
119
  * @since 2.5.9
120
+ * @todo [dev] templates for xml_start, xml_end, xml_item.
121
+ * @todo [dev] `strip_tags`
122
  */
123
  function export_xml() {
124
  if ( isset( $_POST['wcj_export_xml'] ) ) {
182
  *
183
  * @version 2.5.9
184
  * @since 2.5.5
185
+ * @todo [dev] filter each field separately
186
  */
187
  function export_filter_fields( $tool_id ) {
188
  $fields = array();
212
  '<button class="button-primary" type="submit" name="wcj_export_filter" value="' . $tool_id . '">' . __( 'Filter', 'woocommerce-jetpack' ) . '</button>',
213
  '',
214
  );
215
+ return wcj_get_table_html( $data, array( 'table_class' => 'widefat', 'table_style' => 'width:50%;min-width:300px;', 'table_heading_type' => 'vertical' ) );
216
  }
217
  }
218
 
221
  *
222
  * @version 3.0.0
223
  * @since 3.0.0
224
+ * @todo [dev] mark current (i.e. active) link (if exists)
225
  */
226
  function export_date_fields( $tool_id ) {
227
  $current_start_date = ( isset( $_GET['start_date'] ) ? $_GET['start_date'] : '' );
268
  echo '<p>';
269
  echo '<button class="button-primary" type="submit" name="wcj_export" value="' . $tool_id . '">' . __( 'Download CSV', 'woocommerce-jetpack' ) . '</button>';
270
  echo ' ';
271
+ echo '<button class="button-primary" type="submit" name="wcj_export_xml" value="' . $tool_id . '">' .
272
+ __( 'Download XML', 'woocommerce-jetpack' ) . '</button>';
273
+ echo '<button style="float:right;margin-right:10px;" class="button-primary" type="submit" name="wcj_export_filter" value="' . $tool_id . '">' .
274
+ __( 'Filter by All Fields', 'woocommerce-jetpack' ) . '</button>';
275
+ echo '<input style="float:right;margin-right:10px;" type="text" name="wcj_export_filter_all_columns" value="' .
276
+ ( isset( $_POST['wcj_export_filter_all_columns'] ) ? $_POST['wcj_export_filter_all_columns'] : '' ) . '">';
277
  echo '</p>';
278
  echo '</form>';
279
  $data = $this->export( $tool_id );
includes/class-wcj-general.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - General
4
  *
5
- * @version 3.2.3
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -162,22 +162,25 @@ class WCJ_General extends WCJ_Module {
162
  /**
163
  * create_custom_roles_tool.
164
  *
165
- * @version 2.5.3
166
  * @since 2.5.3
167
  */
168
  function create_custom_roles_tool() {
169
  if ( isset( $_POST['wcj_add_new_role'] ) ) {
170
- if (
171
- ! isset( $_POST['wcj_custom_role_id'] ) || '' == $_POST['wcj_custom_role_id'] ||
172
- ! isset( $_POST['wcj_custom_role_name'] ) || '' == $_POST['wcj_custom_role_name']
173
- ) {
174
- echo '<p style="color:red;font-weight:bold;">' . __( 'Both fields are required!', 'woocommerce-jetpack') . '</p>';
175
  } else {
176
- if ( is_numeric( $_POST['wcj_custom_role_id'] ) ) {
 
177
  echo '<p style="color:red;font-weight:bold;">' . __( 'Role ID must not be numbers only!', 'woocommerce-jetpack') . '</p>';
178
  } else {
179
- $result = add_role( $_POST['wcj_custom_role_id'], $_POST['wcj_custom_role_name'] );
 
 
180
  if ( null !== $result ) {
 
 
 
181
  echo '<p style="color:green;font-weight:bold;">' . __( 'Role successfully added!', 'woocommerce-jetpack') . '</p>';
182
  } else {
183
  echo '<p style="color:red;font-weight:bold;">' . __( 'Role already exists!', 'woocommerce-jetpack') . '</p>';
@@ -188,27 +191,35 @@ class WCJ_General extends WCJ_Module {
188
 
189
  if ( isset( $_GET['wcj_delete_role'] ) && '' != $_GET['wcj_delete_role'] ) {
190
  remove_role( $_GET['wcj_delete_role'] );
 
 
 
 
 
191
  echo '<p style="color:green;font-weight:bold;">' . sprintf( __( 'Role %s successfully deleted!', 'woocommerce-jetpack'), $_GET['wcj_delete_role'] ) . '</p>';
192
  }
193
 
194
  echo $this->get_tool_header_html( 'custom_roles' );
195
 
196
  $table_data = array();
197
- $table_data[] = array( __( 'ID', 'woocommerce-jetpack'), __( 'Name', 'woocommerce-jetpack'), __( 'Actions', 'woocommerce-jetpack'), );
198
  $existing_roles = wcj_get_user_roles();
199
- $default_wp_wc_roles = array( 'guest', 'administrator', 'editor', 'author', 'contributor', 'subscriber', 'customer', 'shop_manager', );
 
200
  foreach ( $existing_roles as $role_key => $role_data ) {
201
  $delete_html = ( in_array( $role_key, $default_wp_wc_roles ) )
202
  ? ''
203
- : '<a href="' . add_query_arg( 'wcj_delete_role', $role_key ). '">' . __( 'Delete', 'woocommerce-jetpack') . '</a>';
204
- $table_data[] = array( $role_key, $role_data['name'], $delete_html );
 
205
  }
206
  echo '<h3>' . __( 'Existing Roles', 'woocommerce-jetpack') . '</h3>';
207
  echo wcj_get_table_html( $table_data, array( 'table_class' => 'widefat striped' ) );
208
 
209
  $table_data = array();
210
- $table_data[] = array( __( 'ID', 'woocommerce-jetpack'), '<input type="text" name="wcj_custom_role_id">' );
211
- $table_data[] = array( __( 'Name', 'woocommerce-jetpack'), '<input type="text" name="wcj_custom_role_name">' );
 
212
  echo '<h3>' . __( 'Add New Role', 'woocommerce-jetpack') . '</h3>';
213
  echo '<form method="post" action="' . remove_query_arg( 'wcj_delete_role' ) . '">' .
214
  wcj_get_table_html( $table_data, array( 'table_class' => 'widefat', 'table_heading_type' => 'vertical', 'table_style' => 'width:20%;min-width:300px;', ) )
@@ -266,7 +277,7 @@ class WCJ_General extends WCJ_Module {
266
  /*
267
  * get_products_atts.
268
  *
269
- * @version 2.7.0
270
  * @since 2.3.9
271
  */
272
  function get_products_atts() {
@@ -322,8 +333,13 @@ class WCJ_General extends WCJ_Module {
322
  $_GET['wcj_attribute'],
323
  );
324
  } else {
325
- // $table_data[] = array_values( $attributes_names );
326
- $table_data[] = array_keys( $attributes_names );
 
 
 
 
 
327
  }
328
  foreach ( $attributes_names as $attributes_name => $attribute_title ) {
329
 
2
  /**
3
  * Booster for WooCommerce - Module - General
4
  *
5
+ * @version 4.0.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
162
  /**
163
  * create_custom_roles_tool.
164
  *
165
+ * @version 4.0.0
166
  * @since 2.5.3
167
  */
168
  function create_custom_roles_tool() {
169
  if ( isset( $_POST['wcj_add_new_role'] ) ) {
170
+ if ( empty( $_POST['wcj_custom_role_id'] ) || empty( $_POST['wcj_custom_role_name'] ) || empty( $_POST['wcj_custom_role_caps'] ) ) {
171
+ echo '<p style="color:red;font-weight:bold;">' . __( 'All fields are required!', 'woocommerce-jetpack') . '</p>';
 
 
 
172
  } else {
173
+ $role_id = sanitize_key( $_POST['wcj_custom_role_id'] );
174
+ if ( is_numeric( $role_id ) ) {
175
  echo '<p style="color:red;font-weight:bold;">' . __( 'Role ID must not be numbers only!', 'woocommerce-jetpack') . '</p>';
176
  } else {
177
+ $caps_role = get_role( $_POST['wcj_custom_role_caps'] );
178
+ $caps = ( ! empty( $caps_role->capabilities ) && is_array( $caps_role->capabilities ) ? $caps_role->capabilities : array() );
179
+ $result = add_role( $role_id, $_POST['wcj_custom_role_name'], $caps );
180
  if ( null !== $result ) {
181
+ $custom_roles = get_option( 'wcj_custom_roles', array() ); // `wcj_custom_roles` option added since Booster v4.0.0
182
+ $custom_roles[ $role_id ] = array( 'display_name' => $_POST['wcj_custom_role_name'], 'caps_role' => $_POST['wcj_custom_role_caps'] );
183
+ update_option( 'wcj_custom_roles', $custom_roles );
184
  echo '<p style="color:green;font-weight:bold;">' . __( 'Role successfully added!', 'woocommerce-jetpack') . '</p>';
185
  } else {
186
  echo '<p style="color:red;font-weight:bold;">' . __( 'Role already exists!', 'woocommerce-jetpack') . '</p>';
191
 
192
  if ( isset( $_GET['wcj_delete_role'] ) && '' != $_GET['wcj_delete_role'] ) {
193
  remove_role( $_GET['wcj_delete_role'] );
194
+ $custom_roles = get_option( 'wcj_custom_roles', array() );
195
+ if ( isset( $custom_roles[ $_GET['wcj_delete_role'] ] ) ) {
196
+ unset( $custom_roles[ $_GET['wcj_delete_role'] ] );
197
+ update_option( 'wcj_custom_roles', $custom_roles );
198
+ }
199
  echo '<p style="color:green;font-weight:bold;">' . sprintf( __( 'Role %s successfully deleted!', 'woocommerce-jetpack'), $_GET['wcj_delete_role'] ) . '</p>';
200
  }
201
 
202
  echo $this->get_tool_header_html( 'custom_roles' );
203
 
204
  $table_data = array();
205
+ $table_data[] = array( __( 'ID', 'woocommerce-jetpack'), __( 'Name', 'woocommerce-jetpack'), __( 'Capabilities', 'woocommerce-jetpack'), __( 'Actions', 'woocommerce-jetpack') );
206
  $existing_roles = wcj_get_user_roles();
207
+ $default_wp_wc_roles = array( 'guest', 'administrator', 'editor', 'author', 'contributor', 'subscriber', 'customer', 'shop_manager' );
208
+ $custom_roles = get_option( 'wcj_custom_roles', array() );
209
  foreach ( $existing_roles as $role_key => $role_data ) {
210
  $delete_html = ( in_array( $role_key, $default_wp_wc_roles ) )
211
  ? ''
212
+ : '<a href="' . add_query_arg( 'wcj_delete_role', $role_key ). '"' . wcj_get_js_confirmation() . '>' . __( 'Delete', 'woocommerce-jetpack') . '</a>';
213
+ $caps = ( ! empty( $custom_roles[ $role_key ]['caps_role'] ) ? $custom_roles[ $role_key ]['caps_role'] : $role_key );
214
+ $table_data[] = array( $role_key, $role_data['name'], $caps, $delete_html );
215
  }
216
  echo '<h3>' . __( 'Existing Roles', 'woocommerce-jetpack') . '</h3>';
217
  echo wcj_get_table_html( $table_data, array( 'table_class' => 'widefat striped' ) );
218
 
219
  $table_data = array();
220
+ $table_data[] = array( __( 'ID', 'woocommerce-jetpack'), '<input style="width:100%" required type="text" name="wcj_custom_role_id">' );
221
+ $table_data[] = array( __( 'Name', 'woocommerce-jetpack'), '<input style="width:100%" required type="text" name="wcj_custom_role_name">' );
222
+ $table_data[] = array( __( 'Capabilities', 'woocommerce-jetpack'), wcj_get_select_html( 'wcj_custom_role_caps', wcj_get_user_roles_options(), 'width:100%' ) );
223
  echo '<h3>' . __( 'Add New Role', 'woocommerce-jetpack') . '</h3>';
224
  echo '<form method="post" action="' . remove_query_arg( 'wcj_delete_role' ) . '">' .
225
  wcj_get_table_html( $table_data, array( 'table_class' => 'widefat', 'table_heading_type' => 'vertical', 'table_style' => 'width:20%;min-width:300px;', ) )
277
  /*
278
  * get_products_atts.
279
  *
280
+ * @version 4.0.0
281
  * @since 2.3.9
282
  */
283
  function get_products_atts() {
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
 
includes/class-wcj-global-discount.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Global Discount
4
  *
5
- * @version 3.9.0
6
  * @since 2.5.7
7
  * @author Algoritmika Ltd.
8
  */
@@ -16,7 +16,7 @@ class WCJ_Global_Discount extends WCJ_Module {
16
  /**
17
  * Constructor.
18
  *
19
- * @version 3.9.0
20
  * @since 2.5.7
21
  * @todo fee instead of discount
22
  * @todo regular price coefficient
@@ -31,7 +31,7 @@ class WCJ_Global_Discount extends WCJ_Module {
31
 
32
  if ( $this->is_enabled() ) {
33
  $this->price_hooks_priority = wcj_get_module_price_hooks_priority( 'global_discount' );
34
- if ( wcj_is_frontend() ) {
35
  wcj_add_change_price_hooks( $this, $this->price_hooks_priority, false );
36
  }
37
  }
2
  /**
3
  * Booster for WooCommerce - Module - Global Discount
4
  *
5
+ * @version 4.0.0
6
  * @since 2.5.7
7
  * @author Algoritmika Ltd.
8
  */
16
  /**
17
  * Constructor.
18
  *
19
+ * @version 4.0.0
20
  * @since 2.5.7
21
  * @todo fee instead of discount
22
  * @todo regular price coefficient
31
 
32
  if ( $this->is_enabled() ) {
33
  $this->price_hooks_priority = wcj_get_module_price_hooks_priority( 'global_discount' );
34
+ if ( 'yes' === get_option( 'wcj_global_discount_enabled_in_admin', 'no' ) || wcj_is_frontend() ) {
35
  wcj_add_change_price_hooks( $this, $this->price_hooks_priority, false );
36
  }
37
  }
includes/class-wcj-multicurrency.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Multicurrency (Currency Switcher)
4
  *
5
- * @version 3.9.0
6
  * @since 2.4.3
7
  * @author Algoritmika Ltd.
8
  */
@@ -16,7 +16,7 @@ class WCJ_Multicurrency extends WCJ_Module {
16
  /**
17
  * Constructor.
18
  *
19
- * @version 3.4.5
20
  * @todo check if we can just always execute `init()` on `init` hook
21
  */
22
  function __construct() {
@@ -25,10 +25,19 @@ class WCJ_Multicurrency extends WCJ_Module {
25
  $this->short_desc = __( 'Multicurrency (Currency Switcher)', 'woocommerce-jetpack' );
26
  $this->desc = __( 'Add multiple currencies (currency switcher) to WooCommerce.', 'woocommerce-jetpack' );
27
  $this->link_slug = 'woocommerce-multicurrency-currency-switcher';
28
- $this->extra_desc = sprintf( __( 'After setting currencies in the Currencies Options section below, use %s <strong>widget</strong>, or %s <strong>shortcode</strong>. If you want to insert switcher in your <strong>PHP code</strong>, just use %s code.', 'woocommerce-jetpack' ),
29
- '<em>' . __( 'Booster - Multicurrency Switcher', 'woocommerce-jetpack' ) . '</em>',
30
- '<code>[wcj_currency_select_drop_down_list]</code>',
31
- '<code>echo&nbsp;do_shortcode(&nbsp;\'[wcj_currency_select_drop_down_list]\'&nbsp;);</code>' );
 
 
 
 
 
 
 
 
 
32
  parent::__construct();
33
 
34
  if ( $this->is_enabled() ) {
2
  /**
3
  * Booster for WooCommerce - Module - Multicurrency (Currency Switcher)
4
  *
5
+ * @version 4.0.0
6
  * @since 2.4.3
7
  * @author Algoritmika Ltd.
8
  */
16
  /**
17
  * Constructor.
18
  *
19
+ * @version 4.0.0
20
  * @todo check if we can just always execute `init()` on `init` hook
21
  */
22
  function __construct() {
25
  $this->short_desc = __( 'Multicurrency (Currency Switcher)', 'woocommerce-jetpack' );
26
  $this->desc = __( 'Add multiple currencies (currency switcher) to WooCommerce.', 'woocommerce-jetpack' );
27
  $this->link_slug = 'woocommerce-multicurrency-currency-switcher';
28
+ $this->extra_desc = sprintf( __( 'After setting currencies in the Currencies Options section below, you can add switcher to the frontend with: %s', 'woocommerce-jetpack' ),
29
+ '<ol>' .
30
+ '<li>' . sprintf( __( '<strong>Widget:</strong> "%s"', 'woocommerce-jetpack' ),
31
+ __( 'Booster - Multicurrency Switcher', 'woocommerce-jetpack' ) ) .
32
+ '</li>' .
33
+ '<li>' . sprintf( __( '<strong>Shortcodes:</strong> %s', 'woocommerce-jetpack' ),
34
+ '<code>[wcj_currency_select_drop_down_list]</code>, <code>[wcj_currency_select_radio_list]</code>, <code>[wcj_currency_select_link_list]</code>' ) .
35
+ '</li>' .
36
+ '<li>' . sprintf( __( '<strong>PHP code:</strong> by using %s function, e.g.: %s', 'woocommerce-jetpack' ),
37
+ '<code>do_shortcode()</code>',
38
+ '<code>echo&nbsp;do_shortcode(&nbsp;\'[wcj_currency_select_drop_down_list]\'&nbsp;);</code>' ) .
39
+ '</li>' .
40
+ '</ol>' );
41
  parent::__construct();
42
 
43
  if ( $this->is_enabled() ) {
includes/class-wcj-order-custom-statuses.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Order Custom Statuses
4
  *
5
- * @version 3.6.0
6
  * @since 2.2.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -16,11 +16,9 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
16
  /**
17
  * Constructor.
18
  *
19
- * @version 3.6.0
20
- * @todo check all changes from Custom Order Status plugin
21
- * @todo `wcj_orders_custom_statuses_processing_and_completed_actions` to Custom Order Status plugin
22
- * @todo (maybe) add options to change icon and icon's color for all statuses (i.e. not only custom)
23
- * @todo (maybe) rename module to "Custom Order Statuses"
24
  */
25
  function __construct() {
26
 
@@ -39,28 +37,41 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
39
 
40
  if ( $this->is_enabled() ) {
41
 
 
42
  add_filter( 'wc_order_statuses', array( $this, 'add_custom_statuses_to_filter' ), PHP_INT_MAX );
43
  add_action( 'init', array( $this, 'register_custom_post_statuses' ) );
 
 
44
  add_action( 'admin_head', array( $this, 'hook_statuses_icons_css' ) );
45
  if ( 'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_orders_custom_statuses_column_colored', 'no' ) ) ) {
46
  add_action( 'admin_head', array( $this, 'hook_statuses_column_css' ) );
47
  }
48
 
 
49
  add_filter( 'woocommerce_default_order_status', array( $this, 'set_default_order_status' ), PHP_INT_MAX );
50
 
 
51
  if ( 'yes' === get_option( 'wcj_orders_custom_statuses_add_to_reports' ) ) {
52
  add_filter( 'woocommerce_reports_order_statuses', array( $this, 'add_custom_order_statuses_to_reports' ), PHP_INT_MAX );
53
  }
54
 
 
55
  if ( 'yes' === get_option( 'wcj_orders_custom_statuses_add_to_bulk_actions' ) ) {
56
  add_action( 'admin_footer', array( $this, 'bulk_admin_footer' ), 11 );
57
  }
58
 
 
59
  if ( 'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_orders_custom_statuses_add_to_order_list_actions', 'no' ) ) ) {
60
  add_filter( 'woocommerce_admin_order_actions', array( $this, 'add_custom_status_actions_buttons' ), PHP_INT_MAX, 2 );
61
  add_action( 'admin_head', array( $this, 'add_custom_status_actions_buttons_css' ) );
62
  }
63
 
 
 
 
 
 
 
64
  if ( 'hide' != apply_filters( 'booster_option', 'hide', get_option( 'wcj_orders_custom_statuses_processing_and_completed_actions', 'hide' ) ) ) {
65
  add_filter( 'woocommerce_admin_order_actions', array( $this, 'add_custom_status_to_processing_and_completed_actions' ), PHP_INT_MAX, 2 );
66
  }
@@ -100,6 +111,68 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
100
  }
101
  }
102
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
  /**
104
  * add_custom_order_statuses_to_order_editable.
105
  *
@@ -113,7 +186,7 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
113
  /**
114
  * add_custom_status_to_processing_and_completed_actions.
115
  *
116
- * @version 3.2.2
117
  * @since 2.8.0
118
  */
119
  function add_custom_status_to_processing_and_completed_actions( $actions, $_order ) {
@@ -131,8 +204,7 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
131
  $_order->has_status( array_merge( array( 'pending', 'on-hold' ), $custom_order_statuses_without_wc_prefix ) )
132
  ) {
133
  $default_actions['processing'] = array(
134
- 'url' => wp_nonce_url( admin_url( 'admin-ajax.php?action=woocommerce_mark_order_status&status=processing&order_id=' . $post->ID ),
135
- 'woocommerce-mark-order-status' ),
136
  'name' => __( 'Processing', 'woocommerce' ),
137
  'action' => "processing",
138
  );
@@ -142,8 +214,7 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
142
  $_order->has_status( array_merge( array( 'pending', 'on-hold', 'processing' ), $custom_order_statuses_without_wc_prefix ) )
143
  ) {
144
  $default_actions['complete'] = array(
145
- 'url' => wp_nonce_url( admin_url( 'admin-ajax.php?action=woocommerce_mark_order_status&status=completed&order_id=' . $post->ID ),
146
- 'woocommerce-mark-order-status' ),
147
  'name' => __( 'Complete', 'woocommerce' ),
148
  'action' => "complete",
149
  );
@@ -156,22 +227,19 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
156
  /**
157
  * add_custom_status_actions_buttons.
158
  *
159
- * @version 3.2.2
160
  * @since 2.6.0
161
  */
162
  function add_custom_status_actions_buttons( $actions, $_order ) {
163
- $custom_order_statuses = $this->get_custom_order_statuses();
164
- if ( ! empty( $custom_order_statuses ) && is_array( $custom_order_statuses ) ) {
165
- foreach ( $custom_order_statuses as $slug => $label ) {
166
- $custom_order_status = substr( $slug, 3 );
167
- if ( ! $_order->has_status( array( $custom_order_status ) ) ) { // if order status is not $custom_order_status
168
- $actions[ $custom_order_status ] = array(
169
- 'url' => wp_nonce_url( admin_url( 'admin-ajax.php?action=woocommerce_mark_order_status&status=' . $custom_order_status . '&order_id=' .
170
- wcj_get_order_id( $_order ) ), 'woocommerce-mark-order-status' ),
171
- 'name' => $label,
172
- 'action' => "view " . $custom_order_status, // setting "view" for proper button CSS
173
- );
174
- }
175
  }
176
  }
177
  return $actions;
2
  /**
3
  * Booster for WooCommerce - Module - Order Custom Statuses
4
  *
5
+ * @version 4.0.0
6
  * @since 2.2.0
7
  * @author Algoritmika Ltd.
8
  */
16
  /**
17
  * Constructor.
18
  *
19
+ * @version 4.0.0
20
+ * @todo [feature] add options to change icon and icon's color for all statuses (i.e. not only custom)
21
+ * @todo [dev] maybe rename module to "Custom Order Statuses"
 
 
22
  */
23
  function __construct() {
24
 
37
 
38
  if ( $this->is_enabled() ) {
39
 
40
+ // Core
41
  add_filter( 'wc_order_statuses', array( $this, 'add_custom_statuses_to_filter' ), PHP_INT_MAX );
42
  add_action( 'init', array( $this, 'register_custom_post_statuses' ) );
43
+
44
+ // CSS
45
  add_action( 'admin_head', array( $this, 'hook_statuses_icons_css' ) );
46
  if ( 'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_orders_custom_statuses_column_colored', 'no' ) ) ) {
47
  add_action( 'admin_head', array( $this, 'hook_statuses_column_css' ) );
48
  }
49
 
50
+ // Default order status
51
  add_filter( 'woocommerce_default_order_status', array( $this, 'set_default_order_status' ), PHP_INT_MAX );
52
 
53
+ // Add custom statuses to admin reports
54
  if ( 'yes' === get_option( 'wcj_orders_custom_statuses_add_to_reports' ) ) {
55
  add_filter( 'woocommerce_reports_order_statuses', array( $this, 'add_custom_order_statuses_to_reports' ), PHP_INT_MAX );
56
  }
57
 
58
+ // Add all statuses to admin order bulk actions
59
  if ( 'yes' === get_option( 'wcj_orders_custom_statuses_add_to_bulk_actions' ) ) {
60
  add_action( 'admin_footer', array( $this, 'bulk_admin_footer' ), 11 );
61
  }
62
 
63
+ // Order list actions
64
  if ( 'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_orders_custom_statuses_add_to_order_list_actions', 'no' ) ) ) {
65
  add_filter( 'woocommerce_admin_order_actions', array( $this, 'add_custom_status_actions_buttons' ), PHP_INT_MAX, 2 );
66
  add_action( 'admin_head', array( $this, 'add_custom_status_actions_buttons_css' ) );
67
  }
68
 
69
+ // Order preview actions
70
+ if ( 'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_orders_custom_statuses_add_to_order_preview_actions', 'no' ) ) ) {
71
+ add_filter( 'woocommerce_admin_order_preview_actions', array( $this, 'add_custom_order_statuses_order_preview_actions' ), PHP_INT_MAX, 2 );
72
+ }
73
+
74
+ // "Processing" and "Complete" action buttons
75
  if ( 'hide' != apply_filters( 'booster_option', 'hide', get_option( 'wcj_orders_custom_statuses_processing_and_completed_actions', 'hide' ) ) ) {
76
  add_filter( 'woocommerce_admin_order_actions', array( $this, 'add_custom_status_to_processing_and_completed_actions' ), PHP_INT_MAX, 2 );
77
  }
111
  }
112
  }
113
 
114
+ /**
115
+ * get_custom_order_statuses_actions.
116
+ *
117
+ * @version 4.0.0
118
+ * @since 4.0.0
119
+ */
120
+ function get_custom_order_statuses_actions( $_order ) {
121
+ $status_actions = array();
122
+ $custom_order_statuses = $this->get_custom_order_statuses( true );
123
+ if ( ! empty( $custom_order_statuses ) && is_array( $custom_order_statuses ) ) {
124
+ foreach ( $custom_order_statuses as $custom_order_status => $label ) {
125
+ if ( ! $_order->has_status( array( $custom_order_status ) ) ) { // if order status is not $custom_order_status
126
+ $status_actions[ $custom_order_status ] = $label;
127
+ }
128
+ }
129
+ }
130
+ return $status_actions;
131
+ }
132
+
133
+ /**
134
+ * get_custom_order_statuses_action_url.
135
+ *
136
+ * @version 4.0.0
137
+ * @since 4.0.0
138
+ */
139
+ function get_custom_order_statuses_action_url( $status, $order_id ) {
140
+ return wp_nonce_url( admin_url( 'admin-ajax.php?action=woocommerce_mark_order_status&status=' . $status . '&order_id=' . $order_id ), 'woocommerce-mark-order-status' );
141
+ }
142
+
143
+ /**
144
+ * add_custom_order_statuses_order_preview_actions.
145
+ *
146
+ * @version 4.0.0
147
+ * @since 4.0.0
148
+ */
149
+ function add_custom_order_statuses_order_preview_actions( $actions, $_order ) {
150
+ $status_actions = array();
151
+ $_status_actions = $this->get_custom_order_statuses_actions( $_order );
152
+ if ( ! empty( $_status_actions ) ) {
153
+ $order_id = wcj_get_order_id( $_order );
154
+ foreach ( $_status_actions as $custom_order_status => $label ) {
155
+ $status_actions[ $custom_order_status ] = array(
156
+ 'url' => $this->get_custom_order_statuses_action_url( $custom_order_status, $order_id ),
157
+ 'name' => $label,
158
+ 'title' => sprintf( __( 'Change order status to %s', 'woocommerce-jetpack' ), $custom_order_status ),
159
+ 'action' => $custom_order_status,
160
+ );
161
+ }
162
+ }
163
+ if ( $status_actions ) {
164
+ if ( ! empty( $actions['status']['actions'] ) && is_array( $actions['status']['actions'] ) ) {
165
+ $actions['status']['actions'] = array_merge( $actions['status']['actions'], $status_actions );
166
+ } else {
167
+ $actions['status'] = array(
168
+ 'group' => __( 'Change status: ', 'woocommerce' ),
169
+ 'actions' => $status_actions,
170
+ );
171
+ }
172
+ }
173
+ return $actions;
174
+ }
175
+
176
  /**
177
  * add_custom_order_statuses_to_order_editable.
178
  *
186
  /**
187
  * add_custom_status_to_processing_and_completed_actions.
188
  *
189
+ * @version 4.0.0
190
  * @since 2.8.0
191
  */
192
  function add_custom_status_to_processing_and_completed_actions( $actions, $_order ) {
204
  $_order->has_status( array_merge( array( 'pending', 'on-hold' ), $custom_order_statuses_without_wc_prefix ) )
205
  ) {
206
  $default_actions['processing'] = array(
207
+ 'url' => $this->get_custom_order_statuses_action_url( 'processing', $post->ID ),
 
208
  'name' => __( 'Processing', 'woocommerce' ),
209
  'action' => "processing",
210
  );
214
  $_order->has_status( array_merge( array( 'pending', 'on-hold', 'processing' ), $custom_order_statuses_without_wc_prefix ) )
215
  ) {
216
  $default_actions['complete'] = array(
217
+ 'url' => $this->get_custom_order_statuses_action_url( 'completed', $post->ID ),
 
218
  'name' => __( 'Complete', 'woocommerce' ),
219
  'action' => "complete",
220
  );
227
  /**
228
  * add_custom_status_actions_buttons.
229
  *
230
+ * @version 4.0.0
231
  * @since 2.6.0
232
  */
233
  function add_custom_status_actions_buttons( $actions, $_order ) {
234
+ $_status_actions = $this->get_custom_order_statuses_actions( $_order );
235
+ if ( ! empty( $_status_actions ) ) {
236
+ $order_id = wcj_get_order_id( $_order );
237
+ foreach ( $_status_actions as $custom_order_status => $label ) {
238
+ $actions[ $custom_order_status ] = array(
239
+ 'url' => $this->get_custom_order_statuses_action_url( $custom_order_status, $order_id ),
240
+ 'name' => $label,
241
+ 'action' => "view " . $custom_order_status, // setting "view" for proper button CSS
242
+ );
 
 
 
243
  }
244
  }
245
  return $actions;
includes/class-wcj-order-numbers.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Order Numbers
4
  *
5
- * @version 3.5.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -279,7 +279,7 @@ class WCJ_Order_Numbers extends WCJ_Module {
279
  /**
280
  * Add/update order_number meta to order.
281
  *
282
- * @version 3.5.0
283
  * @todo (maybe) save order ID instead of `$current_order_number = ''` (if `'no' === get_option( 'wcj_order_number_sequential_enabled', 'yes' )`)
284
  */
285
  function add_order_number_meta( $order_id, $do_overwrite ) {
@@ -300,7 +300,7 @@ class WCJ_Order_Numbers extends WCJ_Module {
300
  $result_update = $wpdb->update( $wp_options_table, array( 'option_value' => ( $current_order_number + 1 ) ), array( 'option_name' => 'wcj_order_number_counter' ) );
301
  if ( NULL != $result_update || $result_select->option_value == ( $current_order_number + 1 ) ) {
302
  $wpdb->query( 'COMMIT' ); // all ok
303
- update_post_meta( $order_id, '_wcj_order_number', $current_order_number );
304
  } else {
305
  $wpdb->query( 'ROLLBACK' ); // something went wrong, Rollback
306
  }
@@ -316,7 +316,7 @@ class WCJ_Order_Numbers extends WCJ_Module {
316
  } else { // 'no' === get_option( 'wcj_order_number_sequential_enabled', 'yes' ) // order ID
317
  $current_order_number = '';
318
  }
319
- update_post_meta( $order_id, '_wcj_order_number', $current_order_number );
320
  }
321
  }
322
  }
2
  /**
3
  * Booster for WooCommerce - Module - Order Numbers
4
  *
5
+ * @version 4.0.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
279
  /**
280
  * Add/update order_number meta to order.
281
  *
282
+ * @version 4.0.0
283
  * @todo (maybe) save order ID instead of `$current_order_number = ''` (if `'no' === get_option( 'wcj_order_number_sequential_enabled', 'yes' )`)
284
  */
285
  function add_order_number_meta( $order_id, $do_overwrite ) {
300
  $result_update = $wpdb->update( $wp_options_table, array( 'option_value' => ( $current_order_number + 1 ) ), array( 'option_name' => 'wcj_order_number_counter' ) );
301
  if ( NULL != $result_update || $result_select->option_value == ( $current_order_number + 1 ) ) {
302
  $wpdb->query( 'COMMIT' ); // all ok
303
+ update_post_meta( $order_id, '_wcj_order_number', apply_filters( 'wcj_order_number_meta', $current_order_number, $order_id ) );
304
  } else {
305
  $wpdb->query( 'ROLLBACK' ); // something went wrong, Rollback
306
  }
316
  } else { // 'no' === get_option( 'wcj_order_number_sequential_enabled', 'yes' ) // order ID
317
  $current_order_number = '';
318
  }
319
+ update_post_meta( $order_id, '_wcj_order_number', apply_filters( 'wcj_order_number_meta', $current_order_number, $order_id ) );
320
  }
321
  }
322
  }
includes/class-wcj-orders.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Orders
4
  *
5
- * @version 3.7.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -15,7 +15,7 @@ class WCJ_Orders extends WCJ_Module {
15
  /**
16
  * Constructor.
17
  *
18
- * @version 3.4.0
19
  * @todo Bulk Regenerate Download Permissions - copy "cron" to plugin
20
  * @todo Bulk Regenerate Download Permissions - maybe move "bulk actions" to free
21
  * @todo Bulk Regenerate Download Permissions - maybe as new module
@@ -78,9 +78,24 @@ class WCJ_Orders extends WCJ_Module {
78
  add_action( 'admin_init', array( $this, 'handle_orders_navigation' ) );
79
  }
80
 
 
 
 
 
 
81
  }
82
  }
83
 
 
 
 
 
 
 
 
 
 
 
84
  /**
85
  * handle_orders_navigation.
86
  *
2
  /**
3
  * Booster for WooCommerce - Module - Orders
4
  *
5
+ * @version 4.0.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
15
  /**
16
  * Constructor.
17
  *
18
+ * @version 4.0.0
19
  * @todo Bulk Regenerate Download Permissions - copy "cron" to plugin
20
  * @todo Bulk Regenerate Download Permissions - maybe move "bulk actions" to free
21
  * @todo Bulk Regenerate Download Permissions - maybe as new module
78
  add_action( 'admin_init', array( $this, 'handle_orders_navigation' ) );
79
  }
80
 
81
+ // Editable orders
82
+ if ( 'yes' === get_option( 'wcj_orders_editable_status_enabled', 'no' ) ) {
83
+ add_filter( 'wc_order_is_editable', array( $this, 'editable_status' ), PHP_INT_MAX, 2 );
84
+ }
85
+
86
  }
87
  }
88
 
89
+ /**
90
+ * editable_status.
91
+ *
92
+ * @version 4.0.0
93
+ * @since 4.0.0
94
+ */
95
+ function editable_status( $is_editable, $order ) {
96
+ return in_array( $order->get_status(), get_option( 'wcj_orders_editable_status', array( 'pending', 'on-hold', 'auto-draft' ) ), true );
97
+ }
98
+
99
  /**
100
  * handle_orders_navigation.
101
  *
includes/class-wcj-payment-gateways-by-country.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Payment Gateways by Country
4
  *
5
- * @version 3.9.0
6
  * @since 2.4.1
7
  * @author Algoritmika Ltd.
8
  */
@@ -69,40 +69,10 @@ class WCJ_Payment_Gateways_By_Country extends WCJ_Module {
69
  }
70
  }
71
 
72
- /**
73
- * range_match.
74
- *
75
- * @version 3.4.0
76
- * @since 3.4.0
77
- */
78
- function range_match( $postcode_range, $postcode_to_check ) {
79
- $postcode_range = explode( '...', $postcode_range );
80
- return ( 2 === count( $postcode_range ) && $postcode_to_check >= $postcode_range[0] && $postcode_to_check <= $postcode_range[1] );
81
- }
82
-
83
- /**
84
- * check_postcode.
85
- *
86
- * @version 3.4.0
87
- * @since 3.4.0
88
- */
89
- function check_postcode( $postcode_to_check, $postcodes ) {
90
- foreach ( $postcodes as $postcode ) {
91
- if (
92
- ( false !== strpos( $postcode, '*' ) && fnmatch( $postcode, $postcode_to_check ) ) ||
93
- ( false !== strpos( $postcode, '...' ) && $this->range_match( $postcode, $postcode_to_check ) ) ||
94
- ( $postcode === $postcode_to_check )
95
- ) {
96
- return true;
97
- }
98
- }
99
- return false;
100
- }
101
-
102
  /**
103
  * available_payment_gateways.
104
  *
105
- * @version 3.6.0
106
  * @todo (maybe) rename module to "Payment Gateways by (Customer's) Location"
107
  * @todo (maybe) check naming, should be `wcj_gateways_by_location_` (however it's too long...)
108
  * @todo (maybe) code refactoring
@@ -142,7 +112,7 @@ class WCJ_Payment_Gateways_By_Country extends WCJ_Module {
142
  $include_postcodes = get_option( 'wcj_gateways_postcodes_include_' . $key, '' );
143
  if ( ! empty( $include_postcodes ) ) {
144
  $include_postcodes = array_filter( array_map( 'strtoupper', array_map( 'wc_clean', explode( "\n", $include_postcodes ) ) ) );
145
- if ( ! $this->check_postcode( $postcode, $include_postcodes ) ) {
146
  unset( $_available_gateways[ $key ] );
147
  continue;
148
  }
@@ -150,7 +120,7 @@ class WCJ_Payment_Gateways_By_Country extends WCJ_Module {
150
  $exclude_postcodes = get_option( 'wcj_gateways_postcodes_exclude_' . $key, '' );
151
  if ( ! empty( $exclude_postcodes ) ) {
152
  $exclude_postcodes = array_filter( array_map( 'strtoupper', array_map( 'wc_clean', explode( "\n", $exclude_postcodes ) ) ) );
153
- if ( $this->check_postcode( $postcode, $exclude_postcodes ) ) {
154
  unset( $_available_gateways[ $key ] );
155
  continue;
156
  }
2
  /**
3
  * Booster for WooCommerce - Module - Payment Gateways by Country
4
  *
5
+ * @version 4.0.0
6
  * @since 2.4.1
7
  * @author Algoritmika Ltd.
8
  */
69
  }
70
  }
71
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
  /**
73
  * available_payment_gateways.
74
  *
75
+ * @version 4.0.0
76
  * @todo (maybe) rename module to "Payment Gateways by (Customer's) Location"
77
  * @todo (maybe) check naming, should be `wcj_gateways_by_location_` (however it's too long...)
78
  * @todo (maybe) code refactoring
112
  $include_postcodes = get_option( 'wcj_gateways_postcodes_include_' . $key, '' );
113
  if ( ! empty( $include_postcodes ) ) {
114
  $include_postcodes = array_filter( array_map( 'strtoupper', array_map( 'wc_clean', explode( "\n", $include_postcodes ) ) ) );
115
+ if ( ! wcj_check_postcode( $postcode, $include_postcodes ) ) {
116
  unset( $_available_gateways[ $key ] );
117
  continue;
118
  }
120
  $exclude_postcodes = get_option( 'wcj_gateways_postcodes_exclude_' . $key, '' );
121
  if ( ! empty( $exclude_postcodes ) ) {
122
  $exclude_postcodes = array_filter( array_map( 'strtoupper', array_map( 'wc_clean', explode( "\n", $exclude_postcodes ) ) ) );
123
+ if ( wcj_check_postcode( $postcode, $exclude_postcodes ) ) {
124
  unset( $_available_gateways[ $key ] );
125
  continue;
126
  }
includes/class-wcj-payment-gateways-by-shipping.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Payment Gateways by Shipping
4
  *
5
- * @version 3.5.0
6
  * @since 2.7.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -37,7 +37,7 @@ class WCJ_Payment_Gateways_By_Shipping extends WCJ_Module {
37
  /**
38
  * check_if_enabled_for_methods.
39
  *
40
- * @version 3.5.0
41
  * @since 2.7.0
42
  * @see `is_available()` function in WooCommerce `WC_Gateway_COD` class
43
  * @todo (maybe) virtual orders (`enable_for_virtual`)
@@ -108,11 +108,17 @@ class WCJ_Payment_Gateways_By_Shipping extends WCJ_Module {
108
 
109
  // Shipping method instance
110
  if ( $this->use_shipping_instance ) {
111
- $check_method = explode( ':', $check_method, 2 );
112
- if ( ! isset( $check_method[1] ) || ! is_numeric( $check_method[1] ) ) {
113
- return false;
 
 
 
 
 
 
114
  } else {
115
- $check_method = $check_method[1];
116
  }
117
  }
118
 
2
  /**
3
  * Booster for WooCommerce - Module - Payment Gateways by Shipping
4
  *
5
+ * @version 4.0.0
6
  * @since 2.7.0
7
  * @author Algoritmika Ltd.
8
  */
37
  /**
38
  * check_if_enabled_for_methods.
39
  *
40
+ * @version 4.0.0
41
  * @since 2.7.0
42
  * @see `is_available()` function in WooCommerce `WC_Gateway_COD` class
43
  * @todo (maybe) virtual orders (`enable_for_virtual`)
108
 
109
  // Shipping method instance
110
  if ( $this->use_shipping_instance ) {
111
+ $_check_method = explode( ':', $check_method, 2 );
112
+ if ( ! isset( $_check_method[1] ) || ! is_numeric( $_check_method[1] ) ) {
113
+ // "Flexible Shipping" plugin (e.g. `flexible_shipping_13_2`)
114
+ $_check_method = explode( '_', strrev( $check_method ), 3 );
115
+ if ( ! isset( $_check_method[1] ) || ! is_numeric( $_check_method[1] ) ) {
116
+ return false;
117
+ } else {
118
+ $check_method = strrev( $_check_method[1] );
119
+ }
120
  } else {
121
+ $check_method = $_check_method[1];
122
  }
123
  }
124
 
includes/class-wcj-payment-gateways-currency.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Gateways Currency Converter
4
  *
5
- * @version 3.9.0
6
  * @since 2.3.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -16,7 +16,8 @@ class WCJ_Payment_Gateways_Currency extends WCJ_Module {
16
  /**
17
  * Constructor.
18
  *
19
- * @version 3.9.0
 
20
  */
21
  function __construct() {
22
 
@@ -27,6 +28,7 @@ class WCJ_Payment_Gateways_Currency extends WCJ_Module {
27
  parent::__construct();
28
 
29
  if ( $this->is_enabled() ) {
 
30
  $this->add_hooks();
31
  if ( is_admin() ) {
32
  include_once( 'reports/class-wcj-currency-reports.php' );
@@ -106,12 +108,20 @@ class WCJ_Payment_Gateways_Currency extends WCJ_Module {
106
  /**
107
  * is_cart_or_checkout.
108
  *
109
- * @version 2.3.5
 
 
110
  */
111
  function is_cart_or_checkout() {
112
  if ( ! is_admin() ) {
113
- if ( is_cart() || is_checkout() ) {
114
- return true;
 
 
 
 
 
 
115
  }
116
  }
117
  return false;
@@ -121,6 +131,7 @@ class WCJ_Payment_Gateways_Currency extends WCJ_Module {
121
  * change_price_by_gateway.
122
  *
123
  * @version 3.9.0
 
124
  */
125
  function change_price_by_gateway( $price, $product ) {
126
  if ( $this->is_cart_or_checkout() ) {
@@ -137,6 +148,7 @@ class WCJ_Payment_Gateways_Currency extends WCJ_Module {
137
  * extend_paypal_supported_currencies.
138
  *
139
  * @version 3.9.0
 
140
  */
141
  function extend_paypal_supported_currencies( $supported_currencies ) {
142
  if ( $this->is_cart_or_checkout() ) {
@@ -155,6 +167,7 @@ class WCJ_Payment_Gateways_Currency extends WCJ_Module {
155
  * change_currency_code.
156
  *
157
  * @version 3.9.0
 
158
  */
159
  function change_currency_code( $currency ) {
160
  if ( $this->is_cart_or_checkout() ) {
@@ -173,6 +186,7 @@ class WCJ_Payment_Gateways_Currency extends WCJ_Module {
173
  * register_script.
174
  *
175
  * @version 2.9.0
 
176
  */
177
  function register_script() {
178
  wp_register_script( 'wcj-payment-gateways-checkout', trailingslashit( plugin_dir_url( __FILE__ ) ) . 'js/wcj-checkout.js', array( 'jquery' ), WCJ()->version, true );
@@ -180,6 +194,9 @@ class WCJ_Payment_Gateways_Currency extends WCJ_Module {
180
 
181
  /**
182
  * enqueue_checkout_script.
 
 
 
183
  */
184
  function enqueue_checkout_script() {
185
  if( ! is_checkout() ) {
2
  /**
3
  * Booster for WooCommerce - Module - Gateways Currency Converter
4
  *
5
+ * @version 4.0.0
6
  * @since 2.3.0
7
  * @author Algoritmika Ltd.
8
  */
16
  /**
17
  * Constructor.
18
  *
19
+ * @version 4.0.0
20
+ * @since 2.3.0
21
  */
22
  function __construct() {
23
 
28
  parent::__construct();
29
 
30
  if ( $this->is_enabled() ) {
31
+ $this->page_scope = get_option( 'wcj_gateways_currency_page_scope', 'cart_and_checkout' );
32
  $this->add_hooks();
33
  if ( is_admin() ) {
34
  include_once( 'reports/class-wcj-currency-reports.php' );
108
  /**
109
  * is_cart_or_checkout.
110
  *
111
+ * @version 4.0.0
112
+ * @since 2.3.0
113
+ * @todo [dev] rename function to `do_apply_by_page_scope()`
114
  */
115
  function is_cart_or_checkout() {
116
  if ( ! is_admin() ) {
117
+ if ( 'cart_and_checkout' === $this->page_scope ) {
118
+ if ( is_cart() || is_checkout() ) {
119
+ return true;
120
+ }
121
+ } elseif ( 'checkout_only' === $this->page_scope ) {
122
+ if ( is_checkout() ) {
123
+ return true;
124
+ }
125
  }
126
  }
127
  return false;
131
  * change_price_by_gateway.
132
  *
133
  * @version 3.9.0
134
+ * @since 2.3.0
135
  */
136
  function change_price_by_gateway( $price, $product ) {
137
  if ( $this->is_cart_or_checkout() ) {
148
  * extend_paypal_supported_currencies.
149
  *
150
  * @version 3.9.0
151
+ * @since 2.3.0
152
  */
153
  function extend_paypal_supported_currencies( $supported_currencies ) {
154
  if ( $this->is_cart_or_checkout() ) {
167
  * change_currency_code.
168
  *
169
  * @version 3.9.0
170
+ * @since 2.3.0
171
  */
172
  function change_currency_code( $currency ) {
173
  if ( $this->is_cart_or_checkout() ) {
186
  * register_script.
187
  *
188
  * @version 2.9.0
189
+ * @since 2.3.0
190
  */
191
  function register_script() {
192
  wp_register_script( 'wcj-payment-gateways-checkout', trailingslashit( plugin_dir_url( __FILE__ ) ) . 'js/wcj-checkout.js', array( 'jquery' ), WCJ()->version, true );
194
 
195
  /**
196
  * enqueue_checkout_script.
197
+ *
198
+ * @version 2.3.0
199
+ * @since 2.3.0
200
  */
201
  function enqueue_checkout_script() {
202
  if( ! is_checkout() ) {
includes/class-wcj-price-labels.php CHANGED
@@ -4,7 +4,6 @@
4
  *
5
  * @version 3.9.0
6
  * @author Algoritmika Ltd.
7
- * @todo clean up
8
  */
9
 
10
  if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
@@ -27,34 +26,32 @@ class WCJ_Price_Labels extends WCJ_Module {
27
  parent::__construct();
28
 
29
  // Custom Price Labels - fields array
30
- $this->custom_tab_group_name = 'wcj_price_labels'; // for compatibility with Custom Price Label Pro plugin should use 'simple_is_custom_pricing_label'
31
- $this->custom_tab_sections = array( '_instead', '_before', '_between', '_after', );
32
- $this->custom_tab_sections_titles = array(
33
- '_instead' => __( 'Instead of the price', 'woocommerce-jetpack' ), // for compatibility with Custom Price Label Pro plugin should use ''
34
  '_before' => __( 'Before the price', 'woocommerce-jetpack' ),
35
  '_between' => __( 'Between regular and sale prices', 'woocommerce-jetpack' ),
36
  '_after' => __( 'After the price', 'woocommerce-jetpack' ),
37
  );
38
- $this->custom_tab_section_variations = array( '_text', '_enabled', '_home', '_products', '_single', '_page', '_cart', /*'_simple',*/ '_variable', '_variation', /*'_grouped',*/ );
39
- $this->custom_tab_section_variations_titles = array(
40
  '_text' => '', // 'The label',
41
- '_enabled' => __( 'Enable', 'woocommerce-jetpack' ), // for compatibility with Custom Price Label Pro plugin should use ''
42
  '_home' => __( 'Hide on home page', 'woocommerce-jetpack' ),
43
  '_products' => __( 'Hide on products page', 'woocommerce-jetpack' ),
44
  '_single' => __( 'Hide on single', 'woocommerce-jetpack' ),
45
  '_page' => __( 'Hide on all pages', 'woocommerce-jetpack' ),
46
  '_cart' => __( 'Hide on cart page only', 'woocommerce-jetpack' ),
47
- // '_simple' => __( 'Hide for simple product', 'woocommerce-jetpack' ),
48
  '_variable' => __( 'Hide for main price', 'woocommerce-jetpack' ),
49
  '_variation' => __( 'Hide for all variations', 'woocommerce-jetpack' ),
50
- // '_grouped' => __( 'Hide for grouped product', 'woocommerce-jetpack' ),
51
  );
52
 
53
  if ( $this->is_enabled() ) {
54
 
55
  if ( 'yes' === get_option( 'wcj_local_price_labels_enabled', 'yes' ) ) {
56
  // Meta box (admin)
57
- add_action( 'add_meta_boxes', array( $this, 'add_price_label_meta_box' ) );
58
  add_action( 'save_post_product', array( $this, 'save_custom_price_labels' ), 999, 2 );
59
  }
60
 
4
  *
5
  * @version 3.9.0
6
  * @author Algoritmika Ltd.
 
7
  */
8
 
9
  if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
26
  parent::__construct();
27
 
28
  // Custom Price Labels - fields array
29
+ $this->custom_tab_group_name = 'wcj_price_labels';
30
+ $this->custom_tab_sections = array( '_instead', '_before', '_between', '_after', );
31
+ $this->custom_tab_sections_titles = array(
32
+ '_instead' => __( 'Instead of the price', 'woocommerce-jetpack' ),
33
  '_before' => __( 'Before the price', 'woocommerce-jetpack' ),
34
  '_between' => __( 'Between regular and sale prices', 'woocommerce-jetpack' ),
35
  '_after' => __( 'After the price', 'woocommerce-jetpack' ),
36
  );
37
+ $this->custom_tab_section_variations = array( '_text', '_enabled', '_home', '_products', '_single', '_page', '_cart', '_variable', '_variation' );
38
+ $this->custom_tab_section_variations_titles = array(
39
  '_text' => '', // 'The label',
40
+ '_enabled' => __( 'Enable', 'woocommerce-jetpack' ),
41
  '_home' => __( 'Hide on home page', 'woocommerce-jetpack' ),
42
  '_products' => __( 'Hide on products page', 'woocommerce-jetpack' ),
43
  '_single' => __( 'Hide on single', 'woocommerce-jetpack' ),
44
  '_page' => __( 'Hide on all pages', 'woocommerce-jetpack' ),
45
  '_cart' => __( 'Hide on cart page only', 'woocommerce-jetpack' ),
 
46
  '_variable' => __( 'Hide for main price', 'woocommerce-jetpack' ),
47
  '_variation' => __( 'Hide for all variations', 'woocommerce-jetpack' ),
 
48
  );
49
 
50
  if ( $this->is_enabled() ) {
51
 
52
  if ( 'yes' === get_option( 'wcj_local_price_labels_enabled', 'yes' ) ) {
53
  // Meta box (admin)
54
+ add_action( 'add_meta_boxes', array( $this, 'add_price_label_meta_box' ) );
55
  add_action( 'save_post_product', array( $this, 'save_custom_price_labels' ), 999, 2 );
56
  }
57
 
includes/class-wcj-product-addons.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Product Addons
4
  *
5
- * @version 3.9.0
6
  * @since 2.5.3
7
  * @author Algoritmika Ltd.
8
  * @todo admin order view (names)
@@ -536,7 +536,7 @@ class WCJ_Product_Addons extends WCJ_Module {
536
  /**
537
  * add_addons_to_frontend.
538
  *
539
- * @version 3.8.0
540
  * @since 2.5.3
541
  */
542
  function add_addons_to_frontend() {
@@ -617,7 +617,11 @@ class WCJ_Product_Addons extends WCJ_Module {
617
  ), get_option( 'wcj_product_addons_template_type_radio',
618
  '<p>%addon_input% <label for="%addon_id%">%addon_label% (%addon_price%)</label>%addon_tooltip%</p>' ) );
619
  } else {
620
- $select_options .= '<option value="' . $label . '"' . $is_checked . '>' . $labels[ $i ] . ' ('. wc_price( wcj_get_product_display_price( $_product, $this->maybe_convert_currency( $prices[ $i ], $_product ) ) ) . ')' . '</option>';
 
 
 
 
621
  }
622
  }
623
  if ( 'select' === $addon['type'] ) {
2
  /**
3
  * Booster for WooCommerce - Module - Product Addons
4
  *
5
+ * @version 4.0.0
6
  * @since 2.5.3
7
  * @author Algoritmika Ltd.
8
  * @todo admin order view (names)
536
  /**
537
  * add_addons_to_frontend.
538
  *
539
+ * @version 4.0.0
540
  * @since 2.5.3
541
  */
542
  function add_addons_to_frontend() {
617
  ), get_option( 'wcj_product_addons_template_type_radio',
618
  '<p>%addon_input% <label for="%addon_id%">%addon_label% (%addon_price%)</label>%addon_tooltip%</p>' ) );
619
  } else {
620
+ $select_option = wcj_handle_replacements( array(
621
+ '%addon_label%' => $labels[ $i ],
622
+ '%addon_price%' => wc_price( wcj_get_product_display_price( $_product, $this->maybe_convert_currency( $prices[ $i ], $_product ) ) ),
623
+ ), get_option( 'wcj_product_addons_template_type_select_option', '%addon_label% (%addon_price%)' ) );
624
+ $select_options .= '<option value="' . $label . '"' . $is_checked . '>' . $select_option . '</option>';
625
  }
626
  }
627
  if ( 'select' === $addon['type'] ) {
includes/class-wcj-sale-flash.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Sale Flash
4
  *
5
- * @version 3.2.4
6
  * @since 3.2.4
7
  * @author Algoritmika Ltd.
8
  */
@@ -16,7 +16,7 @@ class WCJ_Sale_Flash extends WCJ_Module {
16
  /**
17
  * Constructor.
18
  *
19
- * @version 3.2.4
20
  * @since 3.2.4
21
  * @todo add predefined styles
22
  * @todo (maybe) per product/category/tag: separate "loop" and "single" options
@@ -35,6 +35,14 @@ class WCJ_Sale_Flash extends WCJ_Module {
35
  $this->per_product_enabled = ( 'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_sale_flash_per_product_enabled', 'no' ) ) );
36
  $this->per_category_enabled = ( 'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_sale_flash_per_' . 'product_cat' . '_enabled', 'no' ) ) );
37
  $this->per_tag_enabled = ( 'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_sale_flash_per_' . 'product_tag' . '_enabled', 'no' ) ) );
 
 
 
 
 
 
 
 
38
  add_filter( 'woocommerce_sale_flash', array( $this, 'customize_sale_flash' ), PHP_INT_MAX, 3 );
39
  if ( $this->per_product_enabled ) {
40
  add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
@@ -43,18 +51,41 @@ class WCJ_Sale_Flash extends WCJ_Module {
43
  }
44
  }
45
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  /**
47
  * get_taxonomy_sale_flash.
48
  *
49
- * @version 3.2.4
50
  */
51
  function get_taxonomy_sale_flash( $product_id, $taxonomy ) {
52
  $product_terms = get_the_terms( $product_id, $taxonomy );
53
- return ( ! empty( $product_terms ) && isset( $product_terms[0]->term_id ) ?
54
- do_shortcode( get_option( 'wcj_sale_flash_per_' . $taxonomy . '_' . $product_terms[0]->term_id . '_html',
55
- '<span class="onsale">' . __( 'Sale!', 'woocommerce' ) . '</span>' ) ) :
56
- false
57
- );
 
 
 
 
 
58
  }
59
 
60
  /**
2
  /**
3
  * Booster for WooCommerce - Module - Sale Flash
4
  *
5
+ * @version 4.0.0
6
  * @since 3.2.4
7
  * @author Algoritmika Ltd.
8
  */
16
  /**
17
  * Constructor.
18
  *
19
+ * @version 4.0.0
20
  * @since 3.2.4
21
  * @todo add predefined styles
22
  * @todo (maybe) per product/category/tag: separate "loop" and "single" options
35
  $this->per_product_enabled = ( 'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_sale_flash_per_product_enabled', 'no' ) ) );
36
  $this->per_category_enabled = ( 'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_sale_flash_per_' . 'product_cat' . '_enabled', 'no' ) ) );
37
  $this->per_tag_enabled = ( 'yes' === apply_filters( 'booster_option', 'no', get_option( 'wcj_sale_flash_per_' . 'product_tag' . '_enabled', 'no' ) ) );
38
+ if ( $this->per_category_enabled ) {
39
+ $this->sale_flash_per_taxonomy['product_cat']['terms'] = get_option( 'wcj_sale_flash_per_product_cat_terms', array() );
40
+ $this->sale_flash_per_taxonomy['product_cat']['html'] = get_option( 'wcj_sale_flash_per_product_cat', array() );
41
+ }
42
+ if ( $this->per_tag_enabled ) {
43
+ $this->sale_flash_per_taxonomy['product_tag']['terms'] = get_option( 'wcj_sale_flash_per_product_tag_terms', array() );
44
+ $this->sale_flash_per_taxonomy['product_tag']['html'] = get_option( 'wcj_sale_flash_per_product_tag', array() );
45
+ }
46
  add_filter( 'woocommerce_sale_flash', array( $this, 'customize_sale_flash' ), PHP_INT_MAX, 3 );
47
  if ( $this->per_product_enabled ) {
48
  add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
51
  }
52
  }
53
 
54
+ /**
55
+ * get_deprecated_options.
56
+ *
57
+ * @version 4.0.0
58
+ * @since 4.0.0
59
+ */
60
+ function get_deprecated_options() {
61
+ $deprecated_options = array();
62
+ $product_terms['product_cat'] = wcj_get_terms( 'product_cat' );
63
+ $product_terms['product_tag'] = wcj_get_terms( 'product_tag' );
64
+ foreach ( $product_terms as $id => $_product_terms ) {
65
+ foreach ( $_product_terms as $term_id => $term_desc ) {
66
+ $deprecated_options[ 'wcj_sale_flash_per_' . $id ][ $term_id ] = 'wcj_sale_flash_per_' . $id . '_' . $term_id . '_html';
67
+ }
68
+ }
69
+ return $deprecated_options;
70
+ }
71
+
72
  /**
73
  * get_taxonomy_sale_flash.
74
  *
75
+ * @version 4.0.0
76
  */
77
  function get_taxonomy_sale_flash( $product_id, $taxonomy ) {
78
  $product_terms = get_the_terms( $product_id, $taxonomy );
79
+ if ( ! empty( $product_terms ) && isset( $product_terms[0]->term_id ) ) {
80
+ $term_id = $product_terms[0]->term_id;
81
+ if ( in_array( $term_id, $this->sale_flash_per_taxonomy[ $taxonomy ]['terms'] ) ) {
82
+ return ( isset( $this->sale_flash_per_taxonomy[ $taxonomy ]['html'][ $term_id ] ) ?
83
+ do_shortcode( $this->sale_flash_per_taxonomy[ $taxonomy ]['html'][ $term_id ] ) :
84
+ '<span class="onsale">' . __( 'Sale!', 'woocommerce' ) . '</span>'
85
+ );
86
+ }
87
+ }
88
+ return false;
89
  }
90
 
91
  /**
includes/class-wcj-shipping-by-cities.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Shipping by Cities
4
  *
5
- * @version 3.6.0
6
  * @since 3.6.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -16,14 +16,14 @@ class WCJ_Shipping_By_Cities extends WCJ_Module_Shipping_By_Condition {
16
  /**
17
  * Constructor.
18
  *
19
- * @version 3.6.0
20
  * @since 3.6.0
21
  */
22
  function __construct() {
23
 
24
  $this->id = 'shipping_by_cities';
25
- $this->short_desc = __( 'Shipping Methods by Cities', 'woocommerce-jetpack' );
26
- $this->desc = __( 'Set cities to include/exclude for shipping methods to show up.', 'woocommerce-jetpack' );
27
  $this->link_slug = 'woocommerce-shipping-methods-by-cities';
28
 
29
  $this->condition_options = array(
@@ -34,6 +34,14 @@ class WCJ_Shipping_By_Cities extends WCJ_Module_Shipping_By_Condition {
34
  'class' => '',
35
  'css' => 'height:200px;',
36
  ),
 
 
 
 
 
 
 
 
37
  );
38
 
39
  parent::__construct();
@@ -43,7 +51,7 @@ class WCJ_Shipping_By_Cities extends WCJ_Module_Shipping_By_Condition {
43
  /**
44
  * check.
45
  *
46
- * @version 3.6.0
47
  * @since 3.6.0
48
  * @todo `$_REQUEST['city']` (i.e. billing city)
49
  * @todo `get_base_city()` - do we really need this?
@@ -54,19 +62,25 @@ class WCJ_Shipping_By_Cities extends WCJ_Module_Shipping_By_Condition {
54
  $customer_city = strtoupper( isset( $_REQUEST['s_city'] ) ? $_REQUEST['s_city'] : WC()->countries->get_base_city() );
55
  $values = array_map( 'strtoupper', array_map( 'trim', explode( PHP_EOL, $values ) ) );
56
  return in_array( $customer_city, $values );
 
 
 
 
57
  }
58
  }
59
 
60
  /**
61
  * get_condition_options.
62
  *
63
- * @version 3.6.0
64
  * @since 3.6.0
65
  */
66
  function get_condition_options( $options_id ) {
67
  switch( $options_id ) {
68
  case 'cities':
69
  return '';
 
 
70
  }
71
  }
72
 
2
  /**
3
  * Booster for WooCommerce - Module - Shipping by Cities
4
  *
5
+ * @version 4.0.0
6
  * @since 3.6.0
7
  * @author Algoritmika Ltd.
8
  */
16
  /**
17
  * Constructor.
18
  *
19
+ * @version 4.0.0
20
  * @since 3.6.0
21
  */
22
  function __construct() {
23
 
24
  $this->id = 'shipping_by_cities';
25
+ $this->short_desc = __( 'Shipping Methods by City or Postcode', 'woocommerce-jetpack' );
26
+ $this->desc = __( 'Set shipping cities or postcodes to include/exclude for shipping methods to show up.', 'woocommerce-jetpack' );
27
  $this->link_slug = 'woocommerce-shipping-methods-by-cities';
28
 
29
  $this->condition_options = array(
34
  'class' => '',
35
  'css' => 'height:200px;',
36
  ),
37
+ 'postcodes' => array(
38
+ 'title' => __( 'Postcodes', 'woocommerce-jetpack' ),
39
+ 'desc' => __( 'Otherwise enter postcodes one per line.', 'woocommerce-jetpack' ) . '<br>' .
40
+ '<em>' . __( 'Postcodes containing wildcards (e.g. CB23*) and fully numeric ranges (e.g. <code>90210...99000</code>) are also supported.', 'woocommerce' ) . '</em>',
41
+ 'type' => 'textarea',
42
+ 'class' => '',
43
+ 'css' => 'height:200px;',
44
+ ),
45
  );
46
 
47
  parent::__construct();
51
  /**
52
  * check.
53
  *
54
+ * @version 4.0.0
55
  * @since 3.6.0
56
  * @todo `$_REQUEST['city']` (i.e. billing city)
57
  * @todo `get_base_city()` - do we really need this?
62
  $customer_city = strtoupper( isset( $_REQUEST['s_city'] ) ? $_REQUEST['s_city'] : WC()->countries->get_base_city() );
63
  $values = array_map( 'strtoupper', array_map( 'trim', explode( PHP_EOL, $values ) ) );
64
  return in_array( $customer_city, $values );
65
+ case 'postcodes':
66
+ $customer_postcode = strtoupper( isset( $_REQUEST['s_postcode'] ) ? $_REQUEST['s_postcode'] : WC()->countries->get_base_postcode() );
67
+ $postcodes = array_map( 'strtoupper', array_map( 'trim', explode( PHP_EOL, $values ) ) );
68
+ return wcj_check_postcode( $customer_postcode, $postcodes );
69
  }
70
  }
71
 
72
  /**
73
  * get_condition_options.
74
  *
75
+ * @version 4.0.0
76
  * @since 3.6.0
77
  */
78
  function get_condition_options( $options_id ) {
79
  switch( $options_id ) {
80
  case 'cities':
81
  return '';
82
+ case 'postcodes':
83
+ return '';
84
  }
85
  }
86
 
includes/class-wcj-shipping-by-time.php ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Booster for WooCommerce - Module - Shipping by Time
4
+ *
5
+ * @version 4.0.0
6
+ * @since 4.0.0
7
+ * @author Algoritmika Ltd.
8
+ */
9
+
10
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
11
+
12
+ if ( ! class_exists( 'WCJ_Shipping_By_Time' ) ) :
13
+
14
+ class WCJ_Shipping_By_Time extends WCJ_Module_Shipping_By_Condition {
15
+
16
+ /**
17
+ * Constructor.
18
+ *
19
+ * @version 4.0.0
20
+ * @since 4.0.0
21
+ * @todo [dev] add more "Valid time input" examples
22
+ * @todo [feature] multiple time values (i.e. `__( 'Otherwise enter time one per line.', 'woocommerce-jetpack' )`)
23
+ */
24
+ function __construct() {
25
+
26
+ $this->id = 'shipping_by_time';
27
+ $this->short_desc = __( 'Shipping Methods by Current Date/Time', 'woocommerce-jetpack' );
28
+ $this->desc = __( 'Set date and/or time to include/exclude for shipping methods to show up.', 'woocommerce-jetpack' );
29
+ $this->link_slug = 'woocommerce-shipping-methods-by-current-date-time';
30
+
31
+ $this->condition_options = array(
32
+ 'time' => array(
33
+ 'title' => __( 'Time', 'woocommerce-jetpack' ),
34
+ 'desc' => '<br>' . sprintf( __( 'Current time: %s.', 'woocommerce-jetpack' ), '<code>' . current_time( 'Y-m-d H:i:s' ) . '</code>' ) . '<br>' .
35
+ sprintf( __( 'Time <em>from</em> and time <em>to</em> must be separated with %s symbol.', 'woocommerce-jetpack' ), '<code>~</code>' ) . ' ' .
36
+ sprintf( __( 'Each time input must be set in format that is parsable by PHP %s function.', 'woocommerce-jetpack' ),
37
+ '<a href="http://php.net/manual/en/function.strtotime.php" target="_blank"><code>strtotime()</code></a>' ) . ' ' .
38
+ sprintf( __( 'Valid time input examples are: %s', 'woocommerce-jetpack' ), '<ul><li><code>' . implode( '</code></li><li><code>', array(
39
+ 'this week Thursday 4:30pm ~ this week Friday 4:30pm',
40
+ 'this year September 1 ~ this year September 30',
41
+ ) ) . '</code></li></ul>' ),
42
+ 'type' => 'text',
43
+ 'class' => '',
44
+ 'css' => 'width:100%',
45
+ ),
46
+ );
47
+
48
+ parent::__construct();
49
+
50
+ }
51
+
52
+ /**
53
+ * parse_time.
54
+ *
55
+ * @version 4.0.0
56
+ * @since 4.0.0
57
+ */
58
+ function parse_time( $value ) {
59
+ $value = explode( '~', $value );
60
+ if ( 2 != count( $value ) ) {
61
+ return false;
62
+ }
63
+ if ( false === ( $time_from = strtotime( $value[0] ) ) ) {
64
+ return false;
65
+ }
66
+ if ( false === ( $time_to = strtotime( $value[1] ) ) ) {
67
+ return false;
68
+ }
69
+ return array( 'time_from' => $time_from, 'time_to' => $time_to );
70
+ }
71
+
72
+ /**
73
+ * check.
74
+ *
75
+ * @version 4.0.0
76
+ * @since 4.0.0
77
+ */
78
+ function check( $options_id, $values, $include_or_exclude, $package ) {
79
+ switch( $options_id ) {
80
+ case 'time':
81
+ if ( $parsed_time = $this->parse_time( $values ) ) {
82
+ $current_time = (int) current_time( 'timestamp' );
83
+ return ( $current_time >= $parsed_time['time_from'] && $current_time <= $parsed_time['time_to'] );
84
+ }
85
+ return ( 'include' == $include_or_exclude ); // not parsable time input - leaving shipping method enabled
86
+ }
87
+ }
88
+
89
+ /**
90
+ * get_condition_options.
91
+ *
92
+ * @version 4.0.0
93
+ * @since 4.0.0
94
+ */
95
+ function get_condition_options( $options_id ) {
96
+ switch( $options_id ) {
97
+ case 'time':
98
+ return '';
99
+ }
100
+ }
101
+
102
+ /**
103
+ * get_extra_option_desc.
104
+ *
105
+ * @version 4.0.0
106
+ * @since 4.0.0
107
+ */
108
+ function get_extra_option_desc( $option_id ) {
109
+ $values = get_option( $option_id, '' );
110
+ if ( ! empty( $values ) ) {
111
+ if ( $parsed_time = $this->parse_time( $values ) ) {
112
+ return '. ' . sprintf( __( 'According to current time, your time input will be parsed as: from %s to %s.', 'woocommerce-jetpack' ),
113
+ '<code>' . date( 'Y-m-d H:i:s', $parsed_time['time_from'] ) . '</code>', '<code>' . date( 'Y-m-d H:i:s', $parsed_time['time_to'] ) . '</code>' );
114
+ } else {
115
+ return '. <strong>' . sprintf( __( 'Error: %s', 'woocommerce-jetpack' ), __( 'Time input is not parsable!', 'woocommerce-jetpack' ) ) . '</strong>';
116
+ }
117
+ }
118
+ return '';
119
+ }
120
+
121
+ }
122
+
123
+ endif;
124
+
125
+ return new WCJ_Shipping_By_Time();
includes/class-wcj-tax-display.php CHANGED
@@ -67,9 +67,9 @@ class WCJ_Tax_Display extends WCJ_Module {
67
  *
68
  * @version 3.2.4
69
  * @since 3.2.4
70
- * @todo widget
71
- * @todo (maybe) floating button or at least give CSS instructions ($)
72
- * @todo (maybe) position near the price or at least give "Product Info" instructions
73
  */
74
  function tax_display_toggle( $value ) {
75
  if ( ! wcj_is_frontend() ) {
67
  *
68
  * @version 3.2.4
69
  * @since 3.2.4
70
+ * @todo [dev] widget
71
+ * @todo [dev] (maybe) floating button or at least give CSS instructions ($)
72
+ * @todo [dev] (maybe) position near the price or at least give "Product Info" instructions
73
  */
74
  function tax_display_toggle( $value ) {
75
  if ( ! wcj_is_frontend() ) {
includes/class-wcj-template-editor.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Template Editor
4
  *
5
- * @version 3.9.0
6
  * @since 3.9.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -62,12 +62,15 @@ class WCJ_Template_Editor extends WCJ_Module {
62
  /**
63
  * replace_template.
64
  *
65
- * @version 3.9.0
66
  * @since 3.9.0
67
- * @todo [dev] (maybe) check for template to exist before returning (just to be sure...)
68
  */
69
  function replace_template( $located, $template_name, $args, $template_path, $default_path ) {
70
- return ( in_array( $template_name, $this->templates_to_edit ) ? wcj_get_wcj_uploads_dir( 'templates', false ) . DIRECTORY_SEPARATOR . $template_name : $located );
 
 
 
 
71
  }
72
 
73
  /**
2
  /**
3
  * Booster for WooCommerce - Module - Template Editor
4
  *
5
+ * @version 4.0.0
6
  * @since 3.9.0
7
  * @author Algoritmika Ltd.
8
  */
62
  /**
63
  * replace_template.
64
  *
65
+ * @version 4.0.0
66
  * @since 3.9.0
 
67
  */
68
  function replace_template( $located, $template_name, $args, $template_path, $default_path ) {
69
+ if ( in_array( $template_name, $this->templates_to_edit ) ) {
70
+ $modified_template = wcj_get_wcj_uploads_dir( 'templates', false ) . DIRECTORY_SEPARATOR . $template_name;
71
+ return ( file_exists( $modified_template ) ? $modified_template : $located );
72
+ }
73
+ return $located;
74
  }
75
 
76
  /**
includes/classes/class-wcj-module-shipping-by-condition.php CHANGED
@@ -2,10 +2,9 @@
2
  /**
3
  * Booster for WooCommerce - Module - Shipping by Condition
4
  *
5
- * @version 3.6.0
6
  * @since 3.2.0
7
  * @author Algoritmika Ltd.
8
- * @todo (maybe) add "Shipping Methods by Date/Time" module
9
  */
10
 
11
  if ( ! defined( 'ABSPATH' ) ) exit;
@@ -98,6 +97,16 @@ abstract class WCJ_Module_Shipping_By_Condition extends WCJ_Module {
98
  return array();
99
  }
100
 
 
 
 
 
 
 
 
 
 
 
101
  }
102
 
103
  endif;
2
  /**
3
  * Booster for WooCommerce - Module - Shipping by Condition
4
  *
5
+ * @version 4.0.0
6
  * @since 3.2.0
7
  * @author Algoritmika Ltd.
 
8
  */
9
 
10
  if ( ! defined( 'ABSPATH' ) ) exit;
97
  return array();
98
  }
99
 
100
+ /**
101
+ * get_extra_option_desc.
102
+ *
103
+ * @version 4.0.0
104
+ * @since 4.0.0
105
+ */
106
+ function get_extra_option_desc( $option_id ) {
107
+ return '';
108
+ }
109
+
110
  }
111
 
112
  endif;
includes/classes/class-wcj-module.php CHANGED
@@ -2,16 +2,17 @@
2
  /**
3
  * Booster for WooCommerce Module
4
  *
5
- * @version 3.9.0
6
  * @since 2.2.0
7
  * @author Algoritmika Ltd.
 
8
  */
9
 
10
  if ( ! defined( 'ABSPATH' ) ) exit;
11
 
12
  if ( ! class_exists( 'WCJ_Module' ) ) :
13
 
14
- /* abstract */ class WCJ_Module {
15
 
16
  public $id;
17
  public $short_desc;
@@ -468,16 +469,6 @@ if ( ! class_exists( 'WCJ_Module' ) ) :
468
  return wcj_is_module_enabled( ( 'module' === $this->type ? $this->id : $this->parent_id ) );
469
  }
470
 
471
- /**
472
- * add_enabled_option.
473
- * only for `module`
474
- *
475
- function add_enabled_option( $settings ) {
476
- $all_settings = $this->get_settings();
477
- $settings[] = $all_settings[1];
478
- return $settings;
479
- }
480
-
481
  /**
482
  * settings_section.
483
  *
@@ -528,7 +519,7 @@ if ( ! class_exists( 'WCJ_Module' ) ) :
528
  function add_tools_list( $settings ) {
529
  return array_merge( $settings, array(
530
  array(
531
- 'title' => /* $this->short_desc . ' ' . */__( 'Tools', 'woocommerce-jetpack' ),
532
  'type' => 'title',
533
  'desc' => '',
534
  'id' => 'wcj_' . $this->id . '_tools_options'
@@ -679,14 +670,14 @@ if ( ! class_exists( 'WCJ_Module' ) ) :
679
  * settings_section.
680
  * only for `module`
681
  *
682
- * @version 2.8.0
683
  */
684
  function add_enable_module_setting( $settings, $module_desc = '' ) {
685
  if ( 'module' != $this->type ) {
686
  return $settings;
687
  }
688
  if ( '' === $module_desc && isset( $this->extra_desc ) ) {
689
- $module_desc = $this->extra_desc;
690
  }
691
  if ( ! isset( $this->link ) && isset( $this->link_slug ) && '' != $this->link_slug ) {
692
  $this->link = 'https://booster.io/features/' . $this->link_slug . '/';
2
  /**
3
  * Booster for WooCommerce Module
4
  *
5
+ * @version 4.0.0
6
  * @since 2.2.0
7
  * @author Algoritmika Ltd.
8
+ * @todo [dev] maybe should be `abstract` ?
9
  */
10
 
11
  if ( ! defined( 'ABSPATH' ) ) exit;
12
 
13
  if ( ! class_exists( 'WCJ_Module' ) ) :
14
 
15
+ class WCJ_Module {
16
 
17
  public $id;
18
  public $short_desc;
469
  return wcj_is_module_enabled( ( 'module' === $this->type ? $this->id : $this->parent_id ) );
470
  }
471
 
 
 
 
 
 
 
 
 
 
 
472
  /**
473
  * settings_section.
474
  *
519
  function add_tools_list( $settings ) {
520
  return array_merge( $settings, array(
521
  array(
522
+ 'title' => __( 'Tools', 'woocommerce-jetpack' ),
523
  'type' => 'title',
524
  'desc' => '',
525
  'id' => 'wcj_' . $this->id . '_tools_options'
670
  * settings_section.
671
  * only for `module`
672
  *
673
+ * @version 4.0.0
674
  */
675
  function add_enable_module_setting( $settings, $module_desc = '' ) {
676
  if ( 'module' != $this->type ) {
677
  return $settings;
678
  }
679
  if ( '' === $module_desc && isset( $this->extra_desc ) ) {
680
+ $module_desc = '<div style="padding: 15px; background-color: #ffffff; color: #000000;">' . $this->extra_desc . '</div>';
681
  }
682
  if ( ! isset( $this->link ) && isset( $this->link_slug ) && '' != $this->link_slug ) {
683
  $this->link = 'https://booster.io/features/' . $this->link_slug . '/';
includes/classes/class-wcj-pdf-invoice.php CHANGED
@@ -23,9 +23,10 @@ class WCJ_PDF_Invoice extends WCJ_Invoice {
23
  * prepare_pdf.
24
  *
25
  * @version 3.4.3
26
- * @todo check `addTTFfont()`
27
- * @todo clean up
28
- * @todo (maybe) option to set different font in footer (and maybe also header)
 
29
  */
30
  function prepare_pdf() {
31
 
@@ -56,9 +57,8 @@ class WCJ_PDF_Invoice extends WCJ_Invoice {
56
 
57
  // Set document information
58
  $pdf->SetCreator( PDF_CREATOR );
59
- // $pdf->SetAuthor( 'Booster for WooCommerce' );
60
  $invoice_title = $invoice_type;
61
- $invoice_types = /* ( 'yes' === get_option( 'wcj_invoicing_hide_disabled_docs_settings', 'no' ) ) ? wcj_get_enabled_invoice_types() : */ wcj_get_invoice_types();
62
  foreach ( $invoice_types as $invoice_type_data ) {
63
  if ( $invoice_type === $invoice_type_data['id'] ) {
64
  $invoice_title = $invoice_type_data['title'];
@@ -85,9 +85,9 @@ class WCJ_PDF_Invoice extends WCJ_Invoice {
85
  $the_logo,
86
  $the_logo_width_mm,
87
  do_shortcode( get_option( 'wcj_invoicing_' . $invoice_type . '_header_title_text', $invoice_title ) ),
88
- do_shortcode( get_option( 'wcj_invoicing_' . $invoice_type . '_header_text', __( 'Company Name', 'woocommerce-jetpack' ) ) ),
89
- wcj_hex2rgb( get_option( 'wcj_invoicing_' . $invoice_type . '_header_text_color', '#cccccc' ) ),
90
- wcj_hex2rgb( get_option( 'wcj_invoicing_' . $invoice_type . '_header_line_color', '#cccccc' ) ) );
91
  } else {
92
  $pdf->SetPrintHeader( false );
93
  }
@@ -105,8 +105,8 @@ class WCJ_PDF_Invoice extends WCJ_Invoice {
105
  $tcpdf_font = wcj_get_tcpdf_font( $invoice_type );
106
 
107
  // Set Header and Footer fonts
108
- $pdf->setHeaderFont( array( /* PDF_FONT_NAME_MAIN */ $tcpdf_font, '', PDF_FONT_SIZE_MAIN ) );
109
- $pdf->setFooterFont( array( /* PDF_FONT_NAME_DATA */ $tcpdf_font, '', PDF_FONT_SIZE_DATA ) );
110
 
111
  // Set default monospaced font
112
  $pdf->SetDefaultMonospacedFont( PDF_FONT_MONOSPACED );
@@ -126,12 +126,6 @@ class WCJ_PDF_Invoice extends WCJ_Invoice {
126
  // Set image scale factor
127
  $pdf->setImageScale( PDF_IMAGE_SCALE_RATIO );
128
 
129
- /*// Set some language-dependent strings (optional)
130
- if (@file_exists(dirname(__FILE__).'/lang/eng.php')) {
131
- require_once(dirname(__FILE__).'/lang/eng.php');
132
- $pdf->setLanguageArray($l);
133
- }*/
134
-
135
  // Set default font subsetting mode
136
  $pdf->setFontSubsetting( true );
137
 
@@ -184,8 +178,8 @@ class WCJ_PDF_Invoice extends WCJ_Invoice {
184
  *
185
  * @version 3.6.0
186
  * @since 3.5.0
187
- * @todo pass other params (billing_country, payment_method) as global (same as user_id) instead of $_GET
188
- * @todo `force_balance_tags()` - there are some bugs and performance issues, see http://wordpress.stackexchange.com/questions/89121/why-doesnt-default-wordpress-page-view-use-force-balance-tags
189
  */
190
  function get_html( $order_id, $pdf ) {
191
  $_GET['order_id'] = $order_id;
@@ -210,7 +204,7 @@ class WCJ_PDF_Invoice extends WCJ_Invoice {
210
  * get_pdf.
211
  *
212
  * @version 3.8.0
213
- * @todo (maybe) `die()` on success
214
  */
215
  function get_pdf( $dest ) {
216
  $pdf = $this->prepare_pdf();
23
  * prepare_pdf.
24
  *
25
  * @version 3.4.3
26
+ * @todo [dev] check `addTTFfont()`
27
+ * @todo [dev] maybe `$pdf->SetAuthor( 'Booster for WooCommerce' )`
28
+ * @todo [dev] maybe `$pdf->setLanguageArray( $l )`
29
+ * @todo [feature] (maybe) option to set different font in footer (and maybe also header)
30
  */
31
  function prepare_pdf() {
32
 
57
 
58
  // Set document information
59
  $pdf->SetCreator( PDF_CREATOR );
 
60
  $invoice_title = $invoice_type;
61
+ $invoice_types = wcj_get_invoice_types();
62
  foreach ( $invoice_types as $invoice_type_data ) {
63
  if ( $invoice_type === $invoice_type_data['id'] ) {
64
  $invoice_title = $invoice_type_data['title'];
85
  $the_logo,
86
  $the_logo_width_mm,
87
  do_shortcode( get_option( 'wcj_invoicing_' . $invoice_type . '_header_title_text', $invoice_title ) ),
88
+ do_shortcode( get_option( 'wcj_invoicing_' . $invoice_type . '_header_text' , __( 'Company Name', 'woocommerce-jetpack' ) ) ),
89
+ wcj_hex2rgb( get_option( 'wcj_invoicing_' . $invoice_type . '_header_text_color', '#cccccc' ) ),
90
+ wcj_hex2rgb( get_option( 'wcj_invoicing_' . $invoice_type . '_header_line_color', '#cccccc' ) ) );
91
  } else {
92
  $pdf->SetPrintHeader( false );
93
  }
105
  $tcpdf_font = wcj_get_tcpdf_font( $invoice_type );
106
 
107
  // Set Header and Footer fonts
108
+ $pdf->setHeaderFont( array( $tcpdf_font, '', PDF_FONT_SIZE_MAIN ) );
109
+ $pdf->setFooterFont( array( $tcpdf_font, '', PDF_FONT_SIZE_DATA ) );
110
 
111
  // Set default monospaced font
112
  $pdf->SetDefaultMonospacedFont( PDF_FONT_MONOSPACED );
126
  // Set image scale factor
127
  $pdf->setImageScale( PDF_IMAGE_SCALE_RATIO );
128
 
 
 
 
 
 
 
129
  // Set default font subsetting mode
130
  $pdf->setFontSubsetting( true );
131
 
178
  *
179
  * @version 3.6.0
180
  * @since 3.5.0
181
+ * @todo [dev] pass other params (billing_country, payment_method) as global (same as user_id) instead of $_GET
182
+ * @todo [fix] `force_balance_tags()` - there are some bugs and performance issues, see http://wordpress.stackexchange.com/questions/89121/why-doesnt-default-wordpress-page-view-use-force-balance-tags
183
  */
184
  function get_html( $order_id, $pdf ) {
185
  $_GET['order_id'] = $order_id;
204
  * get_pdf.
205
  *
206
  * @version 3.8.0
207
+ * @todo [dev] (maybe) `die()` on success
208
  */
209
  function get_pdf( $dest ) {
210
  $pdf = $this->prepare_pdf();
includes/core/wcj-modules.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Modules
4
  *
5
- * @version 3.9.0
6
  * @since 3.2.4
7
  * @author Algoritmika Ltd.
8
  */
@@ -83,6 +83,7 @@ $wcj_module_files = array(
83
  'class-wcj-shipping-by-user-role.php',
84
  'class-wcj-shipping-by-products.php',
85
  'class-wcj-shipping-by-cities.php',
 
86
  'class-wcj-shipping-by-order-amount.php',
87
  'class-wcj-address-formats.php',
88
  'class-wcj-orders.php',
@@ -114,6 +115,7 @@ $wcj_module_files = array(
114
  'class-wcj-my-account.php',
115
  'class-wcj-custom-css.php',
116
  'class-wcj-custom-js.php',
 
117
  'class-wcj-products-xml.php',
118
  'class-wcj-export-import.php',
119
  'class-wcj-eu-vat-number.php',
2
  /**
3
  * Booster for WooCommerce - Modules
4
  *
5
+ * @version 4.0.0
6
  * @since 3.2.4
7
  * @author Algoritmika Ltd.
8
  */
83
  'class-wcj-shipping-by-user-role.php',
84
  'class-wcj-shipping-by-products.php',
85
  'class-wcj-shipping-by-cities.php',
86
+ 'class-wcj-shipping-by-time.php',
87
  'class-wcj-shipping-by-order-amount.php',
88
  'class-wcj-address-formats.php',
89
  'class-wcj-orders.php',
115
  'class-wcj-my-account.php',
116
  'class-wcj-custom-css.php',
117
  'class-wcj-custom-js.php',
118
+ 'class-wcj-custom-php.php',
119
  'class-wcj-products-xml.php',
120
  'class-wcj-export-import.php',
121
  'class-wcj-eu-vat-number.php',
includes/functions/wcj-functions-general.php CHANGED
@@ -2,13 +2,47 @@
2
  /**
3
  * Booster for WooCommerce - Functions - General
4
  *
5
- * @version 3.9.0
6
  * @author Algoritmika Ltd.
7
  * @todo add `wcj_add_actions()` and `wcj_add_filters()`
8
  */
9
 
10
  if ( ! defined( 'ABSPATH' ) ) exit;
11
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  if ( ! function_exists( 'wcj_help_tip' ) ) {
13
  /**
14
  * wcj_help_tip.
@@ -702,13 +736,21 @@ if ( ! function_exists( 'wcj_get_select_options' ) ) {
702
 
703
  if ( ! function_exists( 'wcj_is_frontend' ) ) {
704
  /*
705
- * is_frontend()
706
  *
707
- * @since 2.2.6
708
  * @return boolean
709
  */
710
  function wcj_is_frontend() {
711
- return ( ! is_admin() || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) );
 
 
 
 
 
 
 
 
712
  }
713
  }
714
 
2
  /**
3
  * Booster for WooCommerce - Functions - General
4
  *
5
+ * @version 4.0.0
6
  * @author Algoritmika Ltd.
7
  * @todo add `wcj_add_actions()` and `wcj_add_filters()`
8
  */
9
 
10
  if ( ! defined( 'ABSPATH' ) ) exit;
11
 
12
+ if ( ! function_exists( 'wcj_range_match' ) ) {
13
+ /**
14
+ * wcj_range_match.
15
+ *
16
+ * @version 4.0.0
17
+ * @since 3.4.0
18
+ */
19
+ function wcj_range_match( $postcode_range, $postcode_to_check ) {
20
+ $postcode_range = explode( '...', $postcode_range );
21
+ return ( 2 === count( $postcode_range ) && $postcode_to_check >= $postcode_range[0] && $postcode_to_check <= $postcode_range[1] );
22
+ }
23
+ }
24
+
25
+ if ( ! function_exists( 'wcj_check_postcode' ) ) {
26
+ /**
27
+ * wcj_check_postcode.
28
+ *
29
+ * @version 4.0.0
30
+ * @since 3.4.0
31
+ */
32
+ function wcj_check_postcode( $postcode_to_check, $postcodes ) {
33
+ foreach ( $postcodes as $postcode ) {
34
+ if (
35
+ ( $postcode === $postcode_to_check ) ||
36
+ ( false !== strpos( $postcode, '*' ) && fnmatch( $postcode, $postcode_to_check ) ) ||
37
+ ( false !== strpos( $postcode, '...' ) && wcj_range_match( $postcode, $postcode_to_check ) )
38
+ ) {
39
+ return true;
40
+ }
41
+ }
42
+ return false;
43
+ }
44
+ }
45
+
46
  if ( ! function_exists( 'wcj_help_tip' ) ) {
47
  /**
48
  * wcj_help_tip.
736
 
737
  if ( ! function_exists( 'wcj_is_frontend' ) ) {
738
  /*
739
+ * wcj_is_frontend()
740
  *
741
+ * @since 4.0.0
742
  * @return boolean
743
  */
744
  function wcj_is_frontend() {
745
+ if ( ! is_admin() ) {
746
+ return true;
747
+ } elseif ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
748
+ return ( ! isset( $_REQUEST['action'] ) || ! is_string( $_REQUEST['action'] ) || ! in_array( $_REQUEST['action'], array(
749
+ 'woocommerce_load_variations',
750
+ ) ) );
751
+ } else {
752
+ return false;
753
+ }
754
  }
755
  }
756
 
includes/functions/wcj-functions-html.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Functions - HTML Functions
4
  *
5
- * @version 3.7.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -50,6 +50,25 @@ if ( ! function_exists( 'wcj_get_table_html' ) ) {
50
  }
51
  }
52
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  if ( ! function_exists( 'wcj_get_option_html' ) ) {
54
  /**
55
  * wcj_get_option_html.
2
  /**
3
  * Booster for WooCommerce - Functions - HTML Functions
4
  *
5
+ * @version 4.0.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
50
  }
51
  }
52
 
53
+ if ( ! function_exists( 'wcj_get_select_html' ) ) {
54
+ /**
55
+ * wcj_get_select_html.
56
+ *
57
+ * @version 4.0.0
58
+ * @since 4.0.0
59
+ * @todo [dev] `selected`, `class`
60
+ */
61
+ function wcj_get_select_html( $id, $options, $style = '' ) {
62
+ $html = '';
63
+ $html .= '<select id="' . $id . '" name="' . $id . '" style="' . $style . '">';
64
+ foreach ( $options as $option_id => $option_title ) {
65
+ $html .= '<option value="' . $option_id . '">' . $option_title . '</option>';
66
+ }
67
+ $html .= '</select>';
68
+ return $html;
69
+ }
70
+ }
71
+
72
  if ( ! function_exists( 'wcj_get_option_html' ) ) {
73
  /**
74
  * wcj_get_option_html.
includes/functions/wcj-functions-price-currency.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Functions - Price and Currency
4
  *
5
- * @version 3.9.0
6
  * @since 2.7.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -362,12 +362,12 @@ if ( ! function_exists( 'wcj_update_products_price_by_country' ) ) {
362
  /**
363
  * wcj_update_products_price_by_country - all products.
364
  *
365
- * @version 2.5.3
366
  * @since 2.5.3
367
  */
368
  function wcj_update_products_price_by_country() {
369
- $offset = 0;
370
- $block_size = 96;
371
  while( true ) {
372
  $args = array(
373
  'post_type' => 'product',
@@ -376,16 +376,17 @@ if ( ! function_exists( 'wcj_update_products_price_by_country' ) ) {
376
  'offset' => $offset,
377
  'orderby' => 'title',
378
  'order' => 'ASC',
 
379
  );
380
  $loop = new WP_Query( $args );
381
- if ( ! $loop->have_posts() ) break;
382
- while ( $loop->have_posts() ) : $loop->the_post();
383
- $product_id = $loop->post->ID;
 
384
  wcj_update_products_price_by_country_for_single_product( $product_id );
385
- endwhile;
386
  $offset += $block_size;
387
  }
388
- wp_reset_postdata();
389
  }
390
  }
391
 
@@ -411,7 +412,7 @@ if ( ! function_exists( 'wcj_get_currency_by_country' ) ) {
411
  /**
412
  * wcj_get_currency_by_country.
413
  *
414
- * @version 2.5.4
415
  * @since 2.5.4
416
  */
417
  function wcj_get_currency_by_country( $country_code ) {
@@ -424,10 +425,16 @@ if ( ! function_exists( 'wcj_get_currency_by_country' ) ) {
424
  $country_exchange_rate_group = explode( ',', $country_exchange_rate_group );
425
  break;
426
  case 'multiselect':
427
- $country_exchange_rate_group = get_option( 'wcj_price_by_country_countries_group_' . $i );
 
 
 
428
  break;
429
  case 'chosen_select':
430
- $country_exchange_rate_group = get_option( 'wcj_price_by_country_countries_group_chosen_select_' . $i );
 
 
 
431
  break;
432
  }
433
  if ( in_array( $country_code, $country_exchange_rate_group ) ) {
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
  */
362
  /**
363
  * wcj_update_products_price_by_country - all products.
364
  *
365
+ * @version 4.0.0
366
  * @since 2.5.3
367
  */
368
  function wcj_update_products_price_by_country() {
369
+ $offset = 0;
370
+ $block_size = 512;
371
  while( true ) {
372
  $args = array(
373
  'post_type' => 'product',
376
  'offset' => $offset,
377
  'orderby' => 'title',
378
  'order' => 'ASC',
379
+ 'fields' => 'ids',
380
  );
381
  $loop = new WP_Query( $args );
382
+ if ( ! $loop->have_posts() ) {
383
+ break;
384
+ }
385
+ foreach ( $loop->posts as $product_id ) {
386
  wcj_update_products_price_by_country_for_single_product( $product_id );
387
+ }
388
  $offset += $block_size;
389
  }
 
390
  }
391
  }
392
 
412
  /**
413
  * wcj_get_currency_by_country.
414
  *
415
+ * @version 4.0.0
416
  * @since 2.5.4
417
  */
418
  function wcj_get_currency_by_country( $country_code ) {
425
  $country_exchange_rate_group = explode( ',', $country_exchange_rate_group );
426
  break;
427
  case 'multiselect':
428
+ $country_exchange_rate_group = get_option( 'wcj_price_by_country_countries_group_' . $i, '' );
429
+ if ( '' === $country_exchange_rate_group ) {
430
+ $country_exchange_rate_group = array();
431
+ }
432
  break;
433
  case 'chosen_select':
434
+ $country_exchange_rate_group = get_option( 'wcj_price_by_country_countries_group_chosen_select_' . $i, '' );
435
+ if ( '' === $country_exchange_rate_group ) {
436
+ $country_exchange_rate_group = array();
437
+ }
438
  break;
439
  }
440
  if ( in_array( $country_code, $country_exchange_rate_group ) ) {
includes/functions/wcj-functions-users.php CHANGED
@@ -186,7 +186,6 @@ if ( ! function_exists( 'wcj_is_user_role' ) ) {
186
  * @version 3.7.0
187
  * @since 2.5.0
188
  * @return bool
189
- * @todo clean up
190
  */
191
  function wcj_is_user_role( $user_role, $user_id = 0 ) {
192
  if ( ! function_exists( 'wp_get_current_user' ) ) {
@@ -212,13 +211,5 @@ if ( ! function_exists( 'wcj_is_user_role' ) ) {
212
  return ( in_array( $user_role, $_user->roles ) );
213
  }
214
  }
215
- /* if ( ! is_array( $user_role ) ) {
216
- $user_role = array( $user_role );
217
- }
218
- if ( in_array( 'administrator', $user_role ) ) {
219
- $user_role[] = 'super_admin';
220
- }
221
- $_intersect = array_intersect( $user_role, $_user->roles );
222
- return ( ! empty( $_intersect ) ); */
223
  }
224
  }
186
  * @version 3.7.0
187
  * @since 2.5.0
188
  * @return bool
 
189
  */
190
  function wcj_is_user_role( $user_role, $user_id = 0 ) {
191
  if ( ! function_exists( 'wp_get_current_user' ) ) {
211
  return ( in_array( $user_role, $_user->roles ) );
212
  }
213
  }
 
 
 
 
 
 
 
 
214
  }
215
  }
includes/gateways/class-wc-gateway-wcj-custom.php CHANGED
@@ -21,16 +21,6 @@ if ( ! function_exists( 'init_wc_gateway_wcj_custom_class' ) ) {
21
  */
22
  class WC_Gateway_WCJ_Custom_Template extends WC_Payment_Gateway {
23
 
24
- /**
25
- * set_icon
26
- */
27
- /* function set_icon() {
28
- $icon_url = get_option( 'wcj_payment_gateways_icons_woocommerce_wcj_custom_icon', '' );
29
- if ( $icon_url === '' )
30
- return $this->get_option( 'icon', '' );
31
- return $icon_url;
32
- } */
33
-
34
  /**
35
  * Initialise Gateway Settings Form Fields
36
  *
@@ -48,9 +38,8 @@ if ( ! function_exists( 'init_wc_gateway_wcj_custom_class' ) ) {
48
  }
49
 
50
  $desc = '';
51
- $icon_url = $this->get_option( 'icon', '' );//apply_filters( 'woocommerce_wcj_custom_icon', $this->get_option( 'icon', '' ) );
52
  if ( $icon_url !== '' ) {
53
- //$desc = '<img src="' . $icon_url . '" alt="WooJetpack Custom" title="WooJetpack Custom" />';
54
  $desc = '<img src="' . $icon_url . '" alt="' . $this->title . '" title="' . $this->title . '" />';
55
  }
56
 
@@ -143,13 +132,11 @@ if ( ! function_exists( 'init_wc_gateway_wcj_custom_class' ) ) {
143
  'send_email_to_admin' => array(
144
  'title' => __( 'Send Additional Emails', 'woocommerce-jetpack' ),
145
  'label' => __( 'Send to Admin', 'woocommerce-jetpack' ),
146
- // 'description' => __( 'This may help if you are using pending or custom default status and not getting new order emails.', 'woocommerce-jetpack' ),
147
  'default' => 'no',
148
  'type' => 'checkbox',
149
  ),
150
 
151
  'send_email_to_customer' => array(
152
- 'title' => '',//__( 'Send Additional Email to Customer', 'woocommerce-jetpack' ),
153
  'label' => __( 'Send to Customer', 'woocommerce-jetpack' ),
154
  'description' => __( 'This may help if you are using pending or custom default status and not getting new order emails.', 'woocommerce-jetpack' ),
155
  'default' => 'no',
@@ -285,8 +272,9 @@ if ( ! function_exists( 'init_wc_gateway_wcj_custom_class' ) ) {
285
  * Output for the order received page.
286
  */
287
  function thankyou_page() {
288
- if ( $this->instructions )
289
  echo do_shortcode( wpautop( wptexturize( $this->instructions ) ) );
 
290
  }
291
 
292
  /**
@@ -299,7 +287,10 @@ if ( ! function_exists( 'init_wc_gateway_wcj_custom_class' ) ) {
299
  * @param bool $plain_text
300
  */
301
  function email_instructions( $order, $sent_to_admin, $plain_text = false ) {
302
- if ( $this->instructions_in_email && ! $sent_to_admin && $this->id === wcj_order_get_payment_method( $order ) && $this->default_order_status === ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->status : $order->get_status() ) ) {
 
 
 
303
  echo do_shortcode( wpautop( wptexturize( $this->instructions_in_email ) ) . PHP_EOL );
304
  }
305
  }
@@ -347,12 +338,12 @@ if ( ! function_exists( 'init_wc_gateway_wcj_custom_class' ) ) {
347
  * init.
348
  *
349
  * @version 3.9.0
350
- * @todo clean up
351
  */
352
  function init( $id_count ) {
353
  $this->id = ( 1 === $id_count ) ? 'jetpack_custom_gateway' : 'jetpack_custom_gateway_' . $id_count;
354
  $this->has_fields = false;
355
- $this->method_title = get_option( 'wcj_custom_payment_gateways_admin_title_' . $id_count, __( 'Custom Gateway', 'woocommerce-jetpack' ) . ' #' . $id_count );
 
356
  $this->method_description = __( 'Booster for WooCommerce: Custom Payment Gateway', 'woocommerce-jetpack' ) . ' #' . $id_count;
357
  $this->id_count = $id_count;
358
  // Load the settings.
@@ -360,10 +351,11 @@ if ( ! function_exists( 'init_wc_gateway_wcj_custom_class' ) ) {
360
  $this->init_settings();
361
  // Define user set variables
362
  $this->title = $this->get_option( 'title' );
363
- $this->description = do_shortcode( str_replace( '[wcj_input_field', '[wcj_input_field attach_to="' . $this->id . '"', $this->get_option( 'description' ) ) );
364
- $this->instructions = $this->get_option( 'instructions', '' );//$this->description );
 
365
  $this->instructions_in_email = $this->get_option( 'instructions_in_email', '' );
366
- $this->icon = $this->get_option( 'icon', '' );//apply_filters( 'woocommerce_wcj_custom_icon', $this->get_option( 'icon', '' ) );
367
  $this->min_amount = $this->get_option( 'min_amount', 0 );
368
  $this->enable_for_methods = $this->get_option( 'enable_for_methods', array() );
369
  $this->enable_for_virtual = $this->get_option( 'enable_for_virtual', 'yes' ) === 'yes';
@@ -373,8 +365,8 @@ if ( ! function_exists( 'init_wc_gateway_wcj_custom_class' ) ) {
373
  $this->custom_return_url = $this->get_option( 'custom_return_url', '' );
374
  // Actions
375
  add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'process_admin_options' ) );
376
- add_action( 'woocommerce_thankyou_' . $this->id, array( $this, 'thankyou_page' ) );
377
- add_action( 'woocommerce_email_before_order_table', array( $this, 'email_instructions' ), 10, 3 ); // Customer Emails
378
  }
379
 
380
  /**
21
  */
22
  class WC_Gateway_WCJ_Custom_Template extends WC_Payment_Gateway {
23
 
 
 
 
 
 
 
 
 
 
 
24
  /**
25
  * Initialise Gateway Settings Form Fields
26
  *
38
  }
39
 
40
  $desc = '';
41
+ $icon_url = $this->get_option( 'icon', '' );
42
  if ( $icon_url !== '' ) {
 
43
  $desc = '<img src="' . $icon_url . '" alt="' . $this->title . '" title="' . $this->title . '" />';
44
  }
45
 
132
  'send_email_to_admin' => array(
133
  'title' => __( 'Send Additional Emails', 'woocommerce-jetpack' ),
134
  'label' => __( 'Send to Admin', 'woocommerce-jetpack' ),
 
135
  'default' => 'no',
136
  'type' => 'checkbox',
137
  ),
138
 
139
  'send_email_to_customer' => array(
 
140
  'label' => __( 'Send to Customer', 'woocommerce-jetpack' ),
141
  'description' => __( 'This may help if you are using pending or custom default status and not getting new order emails.', 'woocommerce-jetpack' ),
142
  'default' => 'no',
272
  * Output for the order received page.
273
  */
274
  function thankyou_page() {
275
+ if ( $this->instructions ) {
276
  echo do_shortcode( wpautop( wptexturize( $this->instructions ) ) );
277
+ }
278
  }
279
 
280
  /**
287
  * @param bool $plain_text
288
  */
289
  function email_instructions( $order, $sent_to_admin, $plain_text = false ) {
290
+ if (
291
+ $this->instructions_in_email && ! $sent_to_admin && $this->id === wcj_order_get_payment_method( $order ) &&
292
+ $this->default_order_status === ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->status : $order->get_status() )
293
+ ) {
294
  echo do_shortcode( wpautop( wptexturize( $this->instructions_in_email ) ) . PHP_EOL );
295
  }
296
  }
338
  * init.
339
  *
340
  * @version 3.9.0
 
341
  */
342
  function init( $id_count ) {
343
  $this->id = ( 1 === $id_count ) ? 'jetpack_custom_gateway' : 'jetpack_custom_gateway_' . $id_count;
344
  $this->has_fields = false;
345
+ $this->method_title = get_option( 'wcj_custom_payment_gateways_admin_title_' . $id_count,
346
+ __( 'Custom Gateway', 'woocommerce-jetpack' ) . ' #' . $id_count );
347
  $this->method_description = __( 'Booster for WooCommerce: Custom Payment Gateway', 'woocommerce-jetpack' ) . ' #' . $id_count;
348
  $this->id_count = $id_count;
349
  // Load the settings.
351
  $this->init_settings();
352
  // Define user set variables
353
  $this->title = $this->get_option( 'title' );
354
+ $this->description = do_shortcode( str_replace( '[wcj_input_field', '[wcj_input_field attach_to="' . $this->id . '"',
355
+ $this->get_option( 'description' ) ) );
356
+ $this->instructions = $this->get_option( 'instructions', '' );
357
  $this->instructions_in_email = $this->get_option( 'instructions_in_email', '' );
358
+ $this->icon = $this->get_option( 'icon', '' );
359
  $this->min_amount = $this->get_option( 'min_amount', 0 );
360
  $this->enable_for_methods = $this->get_option( 'enable_for_methods', array() );
361
  $this->enable_for_virtual = $this->get_option( 'enable_for_virtual', 'yes' ) === 'yes';
365
  $this->custom_return_url = $this->get_option( 'custom_return_url', '' );
366
  // Actions
367
  add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'process_admin_options' ) );
368
+ add_action( 'woocommerce_thankyou_' . $this->id, array( $this, 'thankyou_page' ) );
369
+ add_action( 'woocommerce_email_before_order_table', array( $this, 'email_instructions' ), 10, 3 ); // Customer Emails
370
  }
371
 
372
  /**
includes/js/wcj-order-quantities.js CHANGED
@@ -1,43 +1,54 @@
1
- /**
2
- * wcj-order-quantities.js
3
- *
4
- * @version 3.2.3
5
- * @since 3.2.2
6
- */
7
-
8
- function check_qty(){
9
- var variation_id = jQuery('[name=variation_id]').val();
10
- if (0 == variation_id) {
11
- return;
12
- }
13
- var current_qty = jQuery('[name=quantity]').val();
14
- if (quantities_options['reset_to_min']){
15
- jQuery('[name=quantity]').val(product_quantities[variation_id]['min_qty']);
16
- } else if (quantities_options['reset_to_max']){
17
- jQuery('[name=quantity]').val(product_quantities[variation_id]['max_qty']);
18
- } else if (current_qty < parseInt(product_quantities[variation_id]['min_qty'])){
19
- jQuery('[name=quantity]').val(product_quantities[variation_id]['min_qty']);
20
- } else if (current_qty > parseInt(product_quantities[variation_id]['max_qty'])){
21
- jQuery('[name=quantity]').val(product_quantities[variation_id]['max_qty']);
22
- }
23
- }
24
-
25
- function check_qty_no_reset(){
26
- var variation_id = jQuery('[name=variation_id]').val();
27
- if (0 == variation_id) {
28
- return;
29
- }
30
- var current_qty = jQuery('[name=quantity]').val();
31
- if (current_qty < parseInt(product_quantities[variation_id]['min_qty'])){
32
- jQuery('[name=quantity]').val(product_quantities[variation_id]['min_qty']);
33
- } else if (current_qty > parseInt(product_quantities[variation_id]['max_qty'])){
34
- jQuery('[name=quantity]').val(product_quantities[variation_id]['max_qty']);
35
- }
36
- }
37
-
38
- jQuery(document).ready(function(){
39
- jQuery('[name=variation_id]').on('change',check_qty);
40
- if (quantities_options['force_on_add_to_cart']){
41
- jQuery('.single_add_to_cart_button').on('click',check_qty_no_reset);
42
- }
43
- });
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * wcj-order-quantities.js
3
+ *
4
+ * @version 4.0.0
5
+ * @since 3.2.2
6
+ * @todo [dev] maybe `jQuery('[name=quantity]').val('0')` on `jQuery.isEmptyObject(product_quantities[variation_id])` (instead of `return`)
7
+ */
8
+
9
+ function check_qty(){
10
+ var variation_id = jQuery('[name=variation_id]').val();
11
+ if (0 == variation_id) {
12
+ return;
13
+ }
14
+ var current_qty = jQuery('[name=quantity]').val();
15
+
16
+ if (jQuery.isEmptyObject(product_quantities[variation_id])){
17
+ return;
18
+ }
19
+
20
+ if (quantities_options['reset_to_min']){
21
+ jQuery('[name=quantity]').val(product_quantities[variation_id]['min_qty']);
22
+ } else if (quantities_options['reset_to_max']){
23
+ jQuery('[name=quantity]').val(product_quantities[variation_id]['max_qty']);
24
+ } else if (current_qty < parseInt(product_quantities[variation_id]['min_qty'])){
25
+ jQuery('[name=quantity]').val(product_quantities[variation_id]['min_qty']);
26
+ } else if (current_qty > parseInt(product_quantities[variation_id]['max_qty'])){
27
+ jQuery('[name=quantity]').val(product_quantities[variation_id]['max_qty']);
28
+ }
29
+ }
30
+
31
+ function check_qty_no_reset(){
32
+ var variation_id = jQuery('[name=variation_id]').val();
33
+ if (0 == variation_id) {
34
+ return;
35
+ }
36
+ var current_qty = jQuery('[name=quantity]').val();
37
+
38
+ if (jQuery.isEmptyObject(product_quantities[variation_id])){
39
+ return;
40
+ }
41
+
42
+ if (current_qty < parseInt(product_quantities[variation_id]['min_qty'])){
43
+ jQuery('[name=quantity]').val(product_quantities[variation_id]['min_qty']);
44
+ } else if (current_qty > parseInt(product_quantities[variation_id]['max_qty'])){
45
+ jQuery('[name=quantity]').val(product_quantities[variation_id]['max_qty']);
46
+ }
47
+ }
48
+
49
+ jQuery(document).ready(function(){
50
+ jQuery('[name=variation_id]').on('change',check_qty);
51
+ if (quantities_options['force_on_add_to_cart']){
52
+ jQuery('.single_add_to_cart_button').on('click',check_qty_no_reset);
53
+ }
54
+ });
includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - PDF Invoicing - Report Tool
4
  *
5
- * @version 3.8.0
6
  * @since 2.2.1
7
  * @author Algoritmika Ltd.
8
  */
@@ -59,15 +59,15 @@ class WCJ_PDF_Invoicing_Report_Tool {
59
  /**
60
  * generate_report_zip.
61
  *
62
- * @version 3.8.0
63
  * @since 2.3.10
64
  */
65
  function generate_report_zip() {
66
  if ( isset( $_POST['get_invoices_report_zip'] ) ) {
67
  if ( 'yes' === get_option( 'wcj_general_advanced_disable_save_sys_temp_dir', 'no' ) ) {
68
  $this->notice = '<div class="error"><p><strong>' . sprintf(
69
- __( 'This option is disabled with "Disable Saving PDFs in PHP directory for temporary files" checkbox in <a href="%s" target="_blank">WooCommerce > Settings > Booster > Emails & Misc. > General > Advanced Options</a>.', 'woocommerce-jetpack' ),
70
- admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=emails_and_misc&section=general' ) ) .
71
  '</strong></p></div>';
72
  } else {
73
  $_year = ( ! empty( $_POST['report_year'] ) ) ? $_POST['report_year'] : date( 'Y' );
2
  /**
3
  * Booster for WooCommerce - PDF Invoicing - Report Tool
4
  *
5
+ * @version 4.0.0
6
  * @since 2.2.1
7
  * @author Algoritmika Ltd.
8
  */
59
  /**
60
  * generate_report_zip.
61
  *
62
+ * @version 4.0.0
63
  * @since 2.3.10
64
  */
65
  function generate_report_zip() {
66
  if ( isset( $_POST['get_invoices_report_zip'] ) ) {
67
  if ( 'yes' === get_option( 'wcj_general_advanced_disable_save_sys_temp_dir', 'no' ) ) {
68
  $this->notice = '<div class="error"><p><strong>' . sprintf(
69
+ __( 'This option is disabled with "Disable Saving PDFs in PHP directory for temporary files" checkbox in <a href="%s" target="_blank">WooCommerce > Settings > Booster > PDF Invoicing & Packing Slips > Advanced</a>.', 'woocommerce-jetpack' ),
70
+ admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=pdf_invoicing&section=pdf_invoicing_advanced' ) ) .
71
  '</strong></p></div>';
72
  } else {
73
  $_year = ( ! empty( $_POST['report_year'] ) ) ? $_POST['report_year'] : date( 'Y' );
includes/price-by-country/class-wcj-price-by-country-core.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Price by Country - Core
4
  *
5
- * @version 3.9.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -16,7 +16,7 @@ class WCJ_Price_by_Country_Core {
16
  * Constructor.
17
  *
18
  * @version 3.6.0
19
- * @todo check if we can just always execute `init()` on `init` hook
20
  */
21
  function __construct() {
22
  $this->customer_country_group_id = null;
@@ -228,8 +228,8 @@ class WCJ_Price_by_Country_Core {
228
  /**
229
  * get_customer_country_group_id.
230
  *
231
- * @version 3.8.0
232
- * @todo (maybe) clean up - add `cart_and_checkout` override option
233
  */
234
  function get_customer_country_group_id() {
235
 
@@ -249,7 +249,6 @@ class WCJ_Price_by_Country_Core {
249
  } elseif ( 'no' != ( $override_option = get_option( 'wcj_price_by_country_override_on_checkout_with_billing_country', 'no' ) )
250
  && (
251
  ( 'all' === get_option( 'wcj_price_by_country_override_scope', 'all' ) ) ||
252
- // ( 'cart_and_checkout' === get_option( 'wcj_price_by_country_override_scope', 'all' ) && ( is_cart() || is_checkout() ) ) ||
253
  ( 'checkout' === get_option( 'wcj_price_by_country_override_scope', 'all' ) && is_checkout() )
254
  )
255
  && isset( WC()->customer )
@@ -282,10 +281,10 @@ class WCJ_Price_by_Country_Core {
282
  $country_exchange_rate_group = explode( ',', $country_exchange_rate_group );
283
  break;
284
  case 'multiselect':
285
- $country_exchange_rate_group = get_option( 'wcj_price_by_country_countries_group_' . $i );
286
  break;
287
  case 'chosen_select':
288
- $country_exchange_rate_group = get_option( 'wcj_price_by_country_countries_group_chosen_select_' . $i );
289
  break;
290
  }
291
  if ( is_array( $country_exchange_rate_group ) && in_array( $country, $country_exchange_rate_group ) ) {
@@ -315,9 +314,8 @@ class WCJ_Price_by_Country_Core {
315
  /**
316
  * get_variation_prices_hash.
317
  *
318
- * @version 2.6.0
319
  * @since 2.4.3
320
- * @todo clean up
321
  */
322
  function get_variation_prices_hash( $price_hash, $_product, $display ) {
323
  $group_id = $this->get_customer_country_group_id();
@@ -328,12 +326,7 @@ class WCJ_Price_by_Country_Core {
328
  get_option( 'wcj_price_by_country_make_pretty_min_amount_multiplier', 1 ),
329
  get_option( 'woocommerce_price_num_decimals', 2 ),
330
  get_option( 'wcj_price_by_country_local_enabled', 'yes' ),
331
- // get_option( 'wcj_price_by_country_selection' ),
332
- // get_option( 'wcj_price_by_country_total_groups_number' ),
333
- // get_option( 'wcj_price_by_country_exchange_rate_countries_group_' . $group_id ),
334
- // get_option( 'wcj_price_by_country_countries_group_' . $group_id ),
335
- // get_option( 'wcj_price_by_country_countries_group_chosen_select_' . $group_id ),
336
- get_option( 'wcj_price_by_country_exchange_rate_currency_group_' . $group_id ),
337
  get_option( 'wcj_price_by_country_exchange_rate_group_' . $group_id, 1 ),
338
  get_option( 'wcj_price_by_country_make_empty_price_group_' . $group_id, 'no' ),
339
  );
2
  /**
3
  * Booster for WooCommerce - Price by Country - Core
4
  *
5
+ * @version 4.0.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
16
  * Constructor.
17
  *
18
  * @version 3.6.0
19
+ * @todo [dev] check if we can just always execute `init()` on `init` hook
20
  */
21
  function __construct() {
22
  $this->customer_country_group_id = null;
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() {
235
 
249
  } elseif ( 'no' != ( $override_option = get_option( 'wcj_price_by_country_override_on_checkout_with_billing_country', 'no' ) )
250
  && (
251
  ( 'all' === get_option( 'wcj_price_by_country_override_scope', 'all' ) ) ||
 
252
  ( 'checkout' === get_option( 'wcj_price_by_country_override_scope', 'all' ) && is_checkout() )
253
  )
254
  && isset( WC()->customer )
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 ) ) {
314
  /**
315
  * get_variation_prices_hash.
316
  *
317
+ * @version 4.0.0
318
  * @since 2.4.3
 
319
  */
320
  function get_variation_prices_hash( $price_hash, $_product, $display ) {
321
  $group_id = $this->get_customer_country_group_id();
326
  get_option( 'wcj_price_by_country_make_pretty_min_amount_multiplier', 1 ),
327
  get_option( 'woocommerce_price_num_decimals', 2 ),
328
  get_option( 'wcj_price_by_country_local_enabled', 'yes' ),
329
+ get_option( 'wcj_price_by_country_exchange_rate_currency_group_' . $group_id, 'EUR' ),
 
 
 
 
 
330
  get_option( 'wcj_price_by_country_exchange_rate_group_' . $group_id, 1 ),
331
  get_option( 'wcj_price_by_country_make_empty_price_group_' . $group_id, 'no' ),
332
  );
includes/price-by-country/class-wcj-price-by-country-local.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Price by Country - Local
4
  *
5
- * @version 3.9.0
6
  * @author Algoritmika Ltd.
7
  * @todo (maybe) remove this and leave only standard meta box option (i.e. only `'meta_box' === get_option( 'wcj_price_by_country_local_options_style', 'inline' )`)
8
  */
@@ -189,7 +189,7 @@ class WCJ_Price_by_Country_Local {
189
  /**
190
  * get_all_options_html.
191
  *
192
- * @version 3.9.0
193
  */
194
  function get_all_options_html( $simple_or_variable, $current_post_id, $total_number, $variation_id_addon = '' ) {
195
  $html = '';
@@ -203,13 +203,13 @@ class WCJ_Price_by_Country_Local {
203
  $countries = '';
204
  switch ( get_option( 'wcj_price_by_country_selection', 'comma_list' ) ) {
205
  case 'comma_list':
206
- $countries .= get_option( 'wcj_price_by_country_exchange_rate_countries_group_' . $i );
207
  break;
208
  case 'multiselect':
209
- $countries .= implode( ',', get_option( 'wcj_price_by_country_countries_group_' . $i ) );
210
  break;
211
  case 'chosen_select':
212
- $countries .= implode( ',', get_option( 'wcj_price_by_country_countries_group_chosen_select_' . $i ) );
213
  break;
214
  }
215
  $admin_title = get_option( 'wcj_price_by_country_countries_group_admin_title_' . $i, __( 'Group', 'woocommerce-jetpack' ) . ' #' . $i );
2
  /**
3
  * Booster for WooCommerce - Price by Country - Local
4
  *
5
+ * @version 4.0.0
6
  * @author Algoritmika Ltd.
7
  * @todo (maybe) remove this and leave only standard meta box option (i.e. only `'meta_box' === get_option( 'wcj_price_by_country_local_options_style', 'inline' )`)
8
  */
189
  /**
190
  * get_all_options_html.
191
  *
192
+ * @version 4.0.0
193
  */
194
  function get_all_options_html( $simple_or_variable, $current_post_id, $total_number, $variation_id_addon = '' ) {
195
  $html = '';
203
  $countries = '';
204
  switch ( get_option( 'wcj_price_by_country_selection', 'comma_list' ) ) {
205
  case 'comma_list':
206
+ $countries .= get_option( 'wcj_price_by_country_exchange_rate_countries_group_' . $i, '' );
207
  break;
208
  case 'multiselect':
209
+ $countries .= ( '' != ( $group = get_option( 'wcj_price_by_country_countries_group_' . $i, '' ) ) ? implode( ',', $group ) : '' );
210
  break;
211
  case 'chosen_select':
212
+ $countries .= ( '' != ( $group = get_option( 'wcj_price_by_country_countries_group_chosen_select_' . $i, '' ) ) ? implode( ',', $group ) : '' );
213
  break;
214
  }
215
  $admin_title = get_option( 'wcj_price_by_country_countries_group_admin_title_' . $i, __( 'Group', 'woocommerce-jetpack' ) . ' #' . $i );
includes/reports/countries/wcj-country-sets.php CHANGED
@@ -8,7 +8,6 @@
8
  * @todo move to `wcj-functions-country.php`
9
  * @todo use in "Price by Country" module for automatic group creation
10
  * @todo add translations (`__`)
11
- * @todo clean up
12
  */
13
 
14
  return array(
@@ -24,12 +23,10 @@ return array(
24
  'European Union' => array(
25
  'AT', 'BE', 'BG', 'CY', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FI', 'FR', 'GB', 'GR', 'HU', 'HR', 'IE', 'IT', 'LT', 'LU', 'LV', 'MT', 'NL', 'PL', 'PT', 'RO', 'SE', 'SI', 'SK',
26
  ),
 
27
  'Europe' => array(
28
  'AD', 'AL', 'AT', 'AX', 'BA', 'BE', 'BG', 'BY', 'CH', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FI', 'FO', 'FR', 'FX', 'GB', 'GG', 'GI', 'GR', 'HR', 'HU', 'IE', 'IM', 'IS', 'IT', 'JE', 'LI', 'LT', 'LU', 'LV', 'MC', 'MD', 'ME', 'MK', 'MT', 'NL', 'NO', 'PL', 'PT', 'RO', 'RS', 'RU', 'SE', 'SI', 'SJ', 'SK', 'SM', 'TR', 'UA', 'VA',
29
  ),
30
- /*'Europe excl EU' => array(
31
- 'AD', 'AL', 'AX', 'BA', 'BY', 'CH', 'FO', 'FX', 'GG', 'GI', 'IM', 'IS', 'JE', 'LI', 'MC', 'MD', 'ME', 'MK', 'NO', 'RS', 'RU', 'SJ', 'SM', 'TR', 'UA', 'VA',
32
- ),*/
33
 
34
  'Central America' => array(
35
  'AG', 'AI', 'AN', 'AW', 'BB', 'BL', 'BM', 'BS', 'BZ', 'CR', 'CU', 'DM', 'DO', 'GD', 'GL', 'GP', 'GT', 'HN', 'HT', 'JM', 'KY', 'KN', 'LC', 'MF', 'MQ', 'MS', 'NI', 'PA', 'PM', 'PR', 'SV', 'TC', 'TT', 'VC', 'VG', 'VI',
8
  * @todo move to `wcj-functions-country.php`
9
  * @todo use in "Price by Country" module for automatic group creation
10
  * @todo add translations (`__`)
 
11
  */
12
 
13
  return array(
23
  'European Union' => array(
24
  'AT', 'BE', 'BG', 'CY', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FI', 'FR', 'GB', 'GR', 'HU', 'HR', 'IE', 'IT', 'LT', 'LU', 'LV', 'MT', 'NL', 'PL', 'PT', 'RO', 'SE', 'SI', 'SK',
25
  ),
26
+
27
  'Europe' => array(
28
  'AD', 'AL', 'AT', 'AX', 'BA', 'BE', 'BG', 'BY', 'CH', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FI', 'FO', 'FR', 'FX', 'GB', 'GG', 'GI', 'GR', 'HR', 'HU', 'IE', 'IM', 'IS', 'IT', 'JE', 'LI', 'LT', 'LU', 'LV', 'MC', 'MD', 'ME', 'MK', 'MT', 'NL', 'NO', 'PL', 'PT', 'RO', 'RS', 'RU', 'SE', 'SI', 'SJ', 'SK', 'SM', 'TR', 'UA', 'VA',
29
  ),
 
 
 
30
 
31
  'Central America' => array(
32
  'AG', 'AI', 'AN', 'AW', 'BB', 'BL', 'BM', 'BS', 'BZ', 'CR', 'CU', 'DM', 'DO', 'GD', 'GL', 'GP', 'GT', 'HN', 'HT', 'JM', 'KY', 'KN', 'LC', 'MF', 'MQ', 'MS', 'NI', 'PA', 'PM', 'PR', 'SV', 'TC', 'TT', 'VC', 'VG', 'VI',
includes/settings/meta-box/wcj-settings-meta-box-price-by-country.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings Meta Box - Price by Country
4
  *
5
- * @version 3.3.0
6
  * @since 3.3.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -21,10 +21,10 @@ for ( $i = 1; $i <= $total_number; $i++ ) {
21
  $countries .= get_option( 'wcj_price_by_country_exchange_rate_countries_group_' . $i );
22
  break;
23
  case 'multiselect':
24
- $countries .= implode( ',', get_option( 'wcj_price_by_country_countries_group_' . $i ) );
25
  break;
26
  case 'chosen_select':
27
- $countries .= implode( ',', get_option( 'wcj_price_by_country_countries_group_chosen_select_' . $i ) );
28
  break;
29
  }
30
  $admin_title = '<details>' . '<summary>' . $admin_title . ' [' . $group_currency_code . ']' . '</summary>' .
2
  /**
3
  * Booster for WooCommerce - Settings Meta Box - Price by Country
4
  *
5
+ * @version 4.0.0
6
  * @since 3.3.0
7
  * @author Algoritmika Ltd.
8
  */
21
  $countries .= get_option( 'wcj_price_by_country_exchange_rate_countries_group_' . $i );
22
  break;
23
  case 'multiselect':
24
+ $countries .= ( '' != ( $group = get_option( 'wcj_price_by_country_countries_group_' . $i, '' ) ) ? implode( ',', $group ) : '' );
25
  break;
26
  case 'chosen_select':
27
+ $countries .= ( '' != ( $group = get_option( 'wcj_price_by_country_countries_group_chosen_select_' . $i, '' ) ) ? implode( ',', $group ) : '' );
28
  break;
29
  }
30
  $admin_title = '<details>' . '<summary>' . $admin_title . ' [' . $group_currency_code . ']' . '</summary>' .
includes/settings/wcj-settings-admin-tools.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Admin Tools
4
  *
5
- * @version 3.5.3
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -23,23 +23,19 @@ return array(
23
  'type' => 'checkbox',
24
  ),
25
  array(
26
- 'title' => __( 'Log', 'woocommerce-jetpack' ),
27
- 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
28
- 'id' => 'wcj_logging_enabled',
29
- 'default' => 'no',
30
- 'type' => 'checkbox',
31
- ),
32
- array(
33
- 'title' => __( 'WooCommerce Log', 'woocommerce-jetpack' ),
34
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
35
- 'id' => 'wcj_wc_logging_enabled',
 
 
36
  'default' => 'no',
37
  'type' => 'checkbox',
38
  ),
39
  array(
40
- 'title' => __( 'Debug', 'woocommerce-jetpack' ),
41
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
42
- 'id' => 'wcj_debuging_enabled',
 
43
  'default' => 'no',
44
  'type' => 'checkbox',
45
  ),
@@ -61,21 +57,6 @@ return array(
61
  'type' => 'number',
62
  'custom_attributes' => array( 'min' => 0 ),
63
  ),
64
- /*
65
- array(
66
- 'title' => __( 'Custom Shortcode', 'woocommerce-jetpack' ),
67
- 'id' => 'wcj_custom_shortcode_1',
68
- 'default' => '',
69
- 'type' => 'textarea',
70
- ),
71
- */
72
- array(
73
- 'title' => __( 'System Info', 'woocommerce-jetpack' ),
74
- 'id' => 'wcj_admin_tools_system_info',
75
- 'default' => '',
76
- 'type' => 'custom_link',
77
- 'link' => '<pre>' . wcj_get_table_html( $this->get_system_info_table_array(), array( 'columns_styles' => array( 'padding:0;', 'padding:0;' ), 'table_heading_type' => 'vertical' ) ) . '</pre>',
78
- ),
79
  array(
80
  'title' => __( 'Show Order Meta', 'woocommerce-jetpack' ),
81
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
@@ -101,4 +82,42 @@ return array(
101
  'type' => 'sectionend',
102
  'id' => 'wcj_admin_tools_module_options',
103
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
  );
2
  /**
3
  * Booster for WooCommerce - Settings - Admin Tools
4
  *
5
+ * @version 4.0.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
23
  'type' => 'checkbox',
24
  ),
25
  array(
26
+ 'title' => __( 'Suppress Admin Connect Notice', 'woocommerce-jetpack' ),
 
 
 
 
 
 
 
27
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
28
+ 'desc_tip' => sprintf( __( 'Will remove "%s" admin notice.', 'woocommerce-jetpack' ),
29
+ __( 'Connect your store to WooCommerce.com to receive extensions updates and support.', 'woocommerce-jetpack' ) ),
30
+ 'id' => 'wcj_admin_tools_suppress_connect_notice',
31
  'default' => 'no',
32
  'type' => 'checkbox',
33
  ),
34
  array(
35
+ 'title' => __( 'Suppress Admin Notices', 'woocommerce-jetpack' ),
36
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
37
+ 'desc_tip' => __( 'Will remove admin notices (including the Connect notice).', 'woocommerce-jetpack' ),
38
+ 'id' => 'wcj_admin_tools_suppress_admin_notices',
39
  'default' => 'no',
40
  'type' => 'checkbox',
41
  ),
57
  'type' => 'number',
58
  'custom_attributes' => array( 'min' => 0 ),
59
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  array(
61
  'title' => __( 'Show Order Meta', 'woocommerce-jetpack' ),
62
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
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
  );
includes/settings/wcj-settings-custom-css.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce Settings - Custom CSS
4
  *
5
- * @version 3.4.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -15,6 +15,16 @@ return array(
15
  'type' => 'title',
16
  'id' => 'wcj_custom_css_options',
17
  ),
 
 
 
 
 
 
 
 
 
 
18
  array(
19
  'title' => __( 'Custom CSS - Front end (Customers)', 'woocommerce-jetpack' ),
20
  'id' => 'wcj_general_custom_css',
2
  /**
3
  * Booster for WooCommerce Settings - Custom CSS
4
  *
5
+ * @version 4.0.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
15
  'type' => 'title',
16
  'id' => 'wcj_custom_css_options',
17
  ),
18
+ array(
19
+ 'title' => __( 'Code Position', 'woocommerce-jetpack' ),
20
+ 'id' => 'wcj_custom_css_hook',
21
+ 'default' => 'head',
22
+ 'type' => 'select',
23
+ 'options' => array(
24
+ 'head' => __( 'Header', 'woocommerce-jetpack' ),
25
+ 'footer' => __( 'Footer', 'woocommerce-jetpack' ),
26
+ ),
27
+ ),
28
  array(
29
  'title' => __( 'Custom CSS - Front end (Customers)', 'woocommerce-jetpack' ),
30
  'id' => 'wcj_general_custom_css',
includes/settings/wcj-settings-custom-js.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce Settings - Custom JS
4
  *
5
- * @version 3.4.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -15,6 +15,16 @@ return array(
15
  'type' => 'title',
16
  'id' => 'wcj_custom_js_options',
17
  ),
 
 
 
 
 
 
 
 
 
 
18
  array(
19
  'title' => __( 'Custom JS - Front end (Customers)', 'woocommerce-jetpack' ),
20
  'id' => 'wcj_custom_js_frontend',
2
  /**
3
  * Booster for WooCommerce Settings - Custom JS
4
  *
5
+ * @version 4.0.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
15
  'type' => 'title',
16
  'id' => 'wcj_custom_js_options',
17
  ),
18
+ array(
19
+ 'title' => __( 'Code Position', 'woocommerce-jetpack' ),
20
+ 'id' => 'wcj_custom_js_hook',
21
+ 'default' => 'head',
22
+ 'type' => 'select',
23
+ 'options' => array(
24
+ 'head' => __( 'Header', 'woocommerce-jetpack' ),
25
+ 'footer' => __( 'Footer', 'woocommerce-jetpack' ),
26
+ ),
27
+ ),
28
  array(
29
  'title' => __( 'Custom JS - Front end (Customers)', 'woocommerce-jetpack' ),
30
  'id' => 'wcj_custom_js_frontend',
includes/settings/wcj-settings-custom-php.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Booster for WooCommerce Settings - Custom PHP
4
+ *
5
+ * @version 4.0.0
6
+ * @since 4.0.0
7
+ * @author Algoritmika Ltd.
8
+ */
9
+
10
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
11
+
12
+ $file_path = wcj_get_wcj_uploads_dir( 'custom_php', false ) . DIRECTORY_SEPARATOR . 'booster.php';
13
+
14
+ return array(
15
+ array(
16
+ 'title' => __( 'Options', 'woocommerce-jetpack' ),
17
+ 'type' => 'title',
18
+ 'id' => 'wcj_custom_php_options',
19
+ ),
20
+ array(
21
+ 'title' => __( 'Custom PHP', 'woocommerce-jetpack' ),
22
+ 'id' => 'wcj_custom_php',
23
+ 'default' => '',
24
+ 'type' => 'textarea',
25
+ 'css' => 'width:100%;height:500px;font-family:monospace;',
26
+ 'wcj_raw' => true,
27
+ 'desc' => sprintf( __( 'Without the %s tag.', 'woocommerce-jetpack' ), '<code>' . esc_html( '<?php' ) . '</code>' ) .
28
+ ( file_exists( $file_path ) ? '<br>' . sprintf(
29
+ __( 'Automatically created file: %s.', 'woocommerce-jetpack' ), '<code>' . $file_path . '</code>' ) : '' ),
30
+ ),
31
+ array(
32
+ 'type' => 'sectionend',
33
+ 'id' => 'wcj_custom_php_options',
34
+ ),
35
+ );
includes/settings/wcj-settings-global-discount.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Global Discount
4
  *
5
- * @version 3.9.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -176,6 +176,14 @@ $settings = array_merge( $settings, array(
176
  'type' => 'title',
177
  'id' => 'wcj_global_discount_advanced_options',
178
  ),
 
 
 
 
 
 
 
 
179
  array(
180
  'title' => __( 'Price Filters Priority', 'woocommerce-jetpack' ),
181
  'desc_tip' => __( 'Priority for all module\'s price filters. Set to zero to use default priority.' ),
2
  /**
3
  * Booster for WooCommerce - Settings - Global Discount
4
  *
5
+ * @version 4.0.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
176
  'type' => 'title',
177
  'id' => 'wcj_global_discount_advanced_options',
178
  ),
179
+ array(
180
+ 'title' => __( 'Global Discount in Admin', 'woocommerce-jetpack' ),
181
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
182
+ 'desc_tip' => __( 'This will enable "global discount" product pricing in backend. It will also affect some modules, e.g.: "Products XML Feeds" module.', 'woocommerce-jetpack' ),
183
+ 'id' => 'wcj_global_discount_enabled_in_admin',
184
+ 'default' => 'no',
185
+ 'type' => 'checkbox',
186
+ ),
187
  array(
188
  'title' => __( 'Price Filters Priority', 'woocommerce-jetpack' ),
189
  'desc_tip' => __( 'Priority for all module\'s price filters. Set to zero to use default priority.' ),
includes/settings/wcj-settings-order-custom-statuses.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce Settings - Order Custom Statuses
4
  *
5
- * @version 3.6.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -92,6 +92,16 @@ return array(
92
  'type' => 'checkbox',
93
  'custom_attributes' => apply_filters( 'booster_message', '', 'disabled' ),
94
  ),
 
 
 
 
 
 
 
 
 
 
95
  array(
96
  'type' => 'sectionend',
97
  'id' => 'wcj_orders_custom_statuses_options',
2
  /**
3
  * Booster for WooCommerce Settings - Order Custom Statuses
4
  *
5
+ * @version 4.0.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
92
  'type' => 'checkbox',
93
  'custom_attributes' => apply_filters( 'booster_message', '', 'disabled' ),
94
  ),
95
+ array(
96
+ 'title' => __( 'Add Custom Statuses Buttons to Admin Order Preview Actions', 'woocommerce-jetpack' ),
97
+ 'desc' => __( 'Add', 'woocommerce-jetpack' ),
98
+ 'desc_tip' => __( 'If you wish to add custom statuses buttons to the admin orders preview page, enable the checkbox here.', 'woocommerce-jetpack' ) . ' ' .
99
+ apply_filters( 'booster_message', '', 'desc' ),
100
+ 'id' => 'wcj_orders_custom_statuses_add_to_order_preview_actions',
101
+ 'default' => 'no',
102
+ 'type' => 'checkbox',
103
+ 'custom_attributes' => apply_filters( 'booster_message', '', 'disabled' ),
104
+ ),
105
  array(
106
  'type' => 'sectionend',
107
  'id' => 'wcj_orders_custom_statuses_options',
includes/settings/wcj-settings-orders.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce Settings - Orders
4
  *
5
- * @version 3.7.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -68,6 +68,32 @@ $settings = array(
68
  'type' => 'sectionend',
69
  'id' => 'wcj_orders_navigation_options',
70
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
  array(
72
  'title' => __( 'Orders Auto-Complete', 'woocommerce-jetpack' ),
73
  'type' => 'title',
2
  /**
3
  * Booster for WooCommerce Settings - Orders
4
  *
5
+ * @version 4.0.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
68
  'type' => 'sectionend',
69
  'id' => 'wcj_orders_navigation_options',
70
  ),
71
+ array(
72
+ 'title' => __( 'Editable Orders', 'woocommerce-jetpack' ),
73
+ 'desc' => __( 'This section allows you to set which order statuses are editable.', 'woocommerce-jetpack' ),
74
+ 'type' => 'title',
75
+ 'id' => 'wcj_orders_editable_status_options',
76
+ ),
77
+ array(
78
+ 'title' => __( 'Editable Orders Statuses', 'woocommerce-jetpack' ),
79
+ 'desc_tip' => apply_filters( 'booster_message', '', 'desc' ),
80
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
81
+ 'id' => 'wcj_orders_editable_status_enabled',
82
+ 'default' => 'no',
83
+ 'type' => 'checkbox',
84
+ 'custom_attributes' => apply_filters( 'booster_message', '', 'disabled' ),
85
+ ),
86
+ array(
87
+ 'id' => 'wcj_orders_editable_status',
88
+ 'default' => array( 'pending', 'on-hold', 'auto-draft' ),
89
+ 'type' => 'multiselect',
90
+ 'class' => 'chosen_select',
91
+ 'options' => array_merge( wcj_get_order_statuses(), array( 'auto-draft' => __( 'Auto-draft', 'woocommerce-jetpack' ) ) ),
92
+ ),
93
+ array(
94
+ 'type' => 'sectionend',
95
+ 'id' => 'wcj_orders_editable_status_options',
96
+ ),
97
  array(
98
  'title' => __( 'Orders Auto-Complete', 'woocommerce-jetpack' ),
99
  'type' => 'title',
includes/settings/wcj-settings-payment-gateways-currency.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Gateways Currency Converter
4
  *
5
- * @version 3.9.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  * @todo [dev] maybe make "Advanced: Fix Chosen Payment Method" option enabled by default (or even remove option completely and always perform `$this->fix_chosen_payment_method()`)
@@ -12,7 +12,7 @@ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
12
 
13
  $settings = array(
14
  array(
15
- 'title' => __( 'Payment Gateways Currency Options', 'woocommerce-jetpack' ),
16
  'type' => 'title',
17
  'desc' => __( 'This section lets you set different currency for each payment gateway.', 'woocommerce-jetpack' ),
18
  'id' => 'wcj_payment_gateways_currency_options',
@@ -53,6 +53,15 @@ foreach ( $available_gateways as $key => $gateway ) {
53
  ) );
54
  }
55
  $settings = array_merge( $settings, array(
 
 
 
 
 
 
 
 
 
56
  array(
57
  'title' => __( 'Exchange Rates Updates', 'woocommerce-jetpack' ),
58
  'id' => 'wcj_gateways_currency_exchange_rate_update_auto',
@@ -69,6 +78,16 @@ $settings = array_merge( $settings, array(
69
  : apply_filters( 'booster_message', '', 'desc' ),
70
  'custom_attributes' => apply_filters( 'booster_message', '', 'disabled' ),
71
  ),
 
 
 
 
 
 
 
 
 
 
72
  array(
73
  'title' => __( 'Advanced: Fix "Chosen Payment Method"', 'woocommerce-jetpack' ),
74
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
@@ -79,7 +98,7 @@ $settings = array_merge( $settings, array(
79
  ),
80
  array(
81
  'type' => 'sectionend',
82
- 'id' => 'wcj_payment_gateways_currency_options',
83
  ),
84
  ) );
85
  return $settings;
2
  /**
3
  * Booster for WooCommerce - Settings - Gateways Currency Converter
4
  *
5
+ * @version 4.0.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  * @todo [dev] maybe make "Advanced: Fix Chosen Payment Method" option enabled by default (or even remove option completely and always perform `$this->fix_chosen_payment_method()`)
12
 
13
  $settings = array(
14
  array(
15
+ 'title' => __( 'Payment Gateways', 'woocommerce-jetpack' ),
16
  'type' => 'title',
17
  'desc' => __( 'This section lets you set different currency for each payment gateway.', 'woocommerce-jetpack' ),
18
  'id' => 'wcj_payment_gateways_currency_options',
53
  ) );
54
  }
55
  $settings = array_merge( $settings, array(
56
+ array(
57
+ 'type' => 'sectionend',
58
+ 'id' => 'wcj_payment_gateways_currency_options',
59
+ ),
60
+ array(
61
+ 'title' => __( 'Options', 'woocommerce-jetpack' ),
62
+ 'type' => 'title',
63
+ 'id' => 'wcj_payment_gateways_currency_general_options',
64
+ ),
65
  array(
66
  'title' => __( 'Exchange Rates Updates', 'woocommerce-jetpack' ),
67
  'id' => 'wcj_gateways_currency_exchange_rate_update_auto',
78
  : apply_filters( 'booster_message', '', 'desc' ),
79
  'custom_attributes' => apply_filters( 'booster_message', '', 'disabled' ),
80
  ),
81
+ array(
82
+ 'title' => __( 'Show Converted Prices', 'woocommerce-jetpack' ),
83
+ 'id' => 'wcj_gateways_currency_page_scope',
84
+ 'default' => 'cart_and_checkout',
85
+ 'type' => 'select',
86
+ 'options' => array(
87
+ 'cart_and_checkout' => __( 'On both cart and checkout pages', 'woocommerce-jetpack' ),
88
+ 'checkout_only' => __( 'On checkout page only', 'woocommerce-jetpack' ),
89
+ ),
90
+ ),
91
  array(
92
  'title' => __( 'Advanced: Fix "Chosen Payment Method"', 'woocommerce-jetpack' ),
93
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
98
  ),
99
  array(
100
  'type' => 'sectionend',
101
+ 'id' => 'wcj_payment_gateways_currency_general_options',
102
  ),
103
  ) );
104
  return $settings;
includes/settings/wcj-settings-product-addons.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Product Addons
4
  *
5
- * @version 3.9.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  * @todo (maybe) add `woocommerce_payment_complete` to `$qty_triggers` (also maybe add this trigger to "PDF Invoicing" module)
@@ -293,6 +293,14 @@ $settings = array_merge( $settings, array(
293
  'type' => 'textarea',
294
  'css' => 'width:100%;',
295
  ),
 
 
 
 
 
 
 
 
296
  array(
297
  'title' => __( 'Each Addon - Type: Radio Button (Each)', 'woocommerce-jetpack' ),
298
  'desc' => wcj_message_replaced_values( array( '%addon_input%', '%addon_id%', '%addon_label%', '%addon_price%', '%addon_tooltip%' ) ),
2
  /**
3
  * Booster for WooCommerce - Settings - Product Addons
4
  *
5
+ * @version 4.0.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  * @todo (maybe) add `woocommerce_payment_complete` to `$qty_triggers` (also maybe add this trigger to "PDF Invoicing" module)
293
  'type' => 'textarea',
294
  'css' => 'width:100%;',
295
  ),
296
+ array(
297
+ 'title' => __( 'Each Addon - Type: Select Box (Each Option)', 'woocommerce-jetpack' ),
298
+ 'desc' => wcj_message_replaced_values( array( '%addon_label%', '%addon_price%' ) ),
299
+ 'id' => 'wcj_product_addons_template_type_select_option',
300
+ 'default' => '%addon_label% (%addon_price%)',
301
+ 'type' => 'textarea',
302
+ 'css' => 'width:100%;',
303
+ ),
304
  array(
305
  'title' => __( 'Each Addon - Type: Radio Button (Each)', 'woocommerce-jetpack' ),
306
  'desc' => wcj_message_replaced_values( array( '%addon_input%', '%addon_id%', '%addon_label%', '%addon_price%', '%addon_tooltip%' ) ),
includes/settings/wcj-settings-product-input-fields.php CHANGED
@@ -340,7 +340,7 @@ $settings = array_merge( $settings, array(
340
  'type' => 'checkbox',
341
  ),
342
  array(
343
- 'title' => __( 'Strip slashes', 'woocommerce-jetpack' ),
344
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
345
  'desc_tip' => sprintf( __( 'Enable this if you have single quotes %s converted to %s.', 'woocommerce-jetpack' ), '<code>\'</code>', '<code>\\\'</code>' ),
346
  'id' => 'wcj_product_input_fields_stripslashes',
340
  'type' => 'checkbox',
341
  ),
342
  array(
343
+ 'title' => __( 'Strip Slashes', 'woocommerce-jetpack' ),
344
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
345
  'desc_tip' => sprintf( __( 'Enable this if you have single quotes %s converted to %s.', 'woocommerce-jetpack' ), '<code>\'</code>', '<code>\\\'</code>' ),
346
  'id' => 'wcj_product_input_fields_stripslashes',
includes/settings/wcj-settings-sale-flash.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Sale Flash
4
  *
5
- * @version 3.2.4
6
  * @since 3.2.4
7
  * @author Algoritmika Ltd.
8
  */
@@ -63,7 +63,7 @@ $settings = array(
63
  array(
64
  'title' => __( 'Per Product', 'woocommerce-jetpack' ),
65
  'desc' => '<strong>' . __( 'Enable section', 'woocommerce-jetpack' ) . '</strong>',
66
- 'desc_tip' => __( 'This will add meta box to each product\'s edit page.', 'woocommerce-jetpack' ) . ' ' . apply_filters( 'booster_message', '', 'desc' ),
67
  'id' => 'wcj_sale_flash_per_product_enabled',
68
  'default' => 'no',
69
  'type' => 'checkbox',
@@ -77,7 +77,7 @@ $settings = array(
77
 
78
  $product_terms['product_cat'] = wcj_get_terms( 'product_cat' );
79
  $product_terms['product_tag'] = wcj_get_terms( 'product_tag' );
80
- foreach ( $product_terms as $id => $product_term ) {
81
  $title = ( 'product_cat' === $id ? __( 'Per Category', 'woocommerce-jetpack' ) : __( 'Per Tag', 'woocommerce-jetpack' ) );
82
  $settings = array_merge( $settings, array(
83
  array(
@@ -94,13 +94,22 @@ foreach ( $product_terms as $id => $product_term ) {
94
  'type' => 'checkbox',
95
  'custom_attributes' => apply_filters( 'booster_message', '', 'disabled' ),
96
  ),
 
 
 
 
 
 
 
 
 
97
  ) );
98
- foreach ( $product_term as $term_id => $term_desc ) {
99
  $settings = array_merge( $settings, array(
100
  array(
101
- 'title' => $term_desc,
102
  'desc_tip' => __( 'You can use HTML and/or shortcodes here.', 'woocommerce-jetpack' ),
103
- 'id' => 'wcj_sale_flash_per_' . $id . '_' . $term_id . '_html',
104
  'default' => '<span class="onsale">' . __( 'Sale!', 'woocommerce' ) . '</span>',
105
  'type' => 'textarea',
106
  'css' => 'width:100%;',
2
  /**
3
  * Booster for WooCommerce - Settings - Sale Flash
4
  *
5
+ * @version 4.0.0
6
  * @since 3.2.4
7
  * @author Algoritmika Ltd.
8
  */
63
  array(
64
  'title' => __( 'Per Product', 'woocommerce-jetpack' ),
65
  'desc' => '<strong>' . __( 'Enable section', 'woocommerce-jetpack' ) . '</strong>',
66
+ 'desc_tip' => __( 'This will add meta box to each product\'s edit page.', 'woocommerce-jetpack' ) . '<br>' . apply_filters( 'booster_message', '', 'desc' ),
67
  'id' => 'wcj_sale_flash_per_product_enabled',
68
  'default' => 'no',
69
  'type' => 'checkbox',
77
 
78
  $product_terms['product_cat'] = wcj_get_terms( 'product_cat' );
79
  $product_terms['product_tag'] = wcj_get_terms( 'product_tag' );
80
+ foreach ( $product_terms as $id => $_product_terms ) {
81
  $title = ( 'product_cat' === $id ? __( 'Per Category', 'woocommerce-jetpack' ) : __( 'Per Tag', 'woocommerce-jetpack' ) );
82
  $settings = array_merge( $settings, array(
83
  array(
94
  'type' => 'checkbox',
95
  'custom_attributes' => apply_filters( 'booster_message', '', 'disabled' ),
96
  ),
97
+ array(
98
+ 'desc_tip' => __( 'Terms to Modify', 'woocommerce-jetpack' ),
99
+ 'desc_tip' => __( 'Save changes to see new option fields.', 'woocommerce-jetpack' ),
100
+ 'id' => 'wcj_sale_flash_per_' . $id . '_terms',
101
+ 'default' => array(),
102
+ 'type' => 'multiselect',
103
+ 'class' => 'chosen_select',
104
+ 'options' => $_product_terms,
105
+ ),
106
  ) );
107
+ foreach ( get_option( 'wcj_sale_flash_per_' . $id . '_terms', array() ) as $term_id ) {
108
  $settings = array_merge( $settings, array(
109
  array(
110
+ 'title' => ( isset( $_product_terms[ $term_id ] ) ? $_product_terms[ $term_id ] : sprintf( __( 'Term #%s', 'woocommerce-jetpack' ), $term_id ) ),
111
  'desc_tip' => __( 'You can use HTML and/or shortcodes here.', 'woocommerce-jetpack' ),
112
+ 'id' => "wcj_sale_flash_per_{$id}[{$term_id}]",
113
  'default' => '<span class="onsale">' . __( 'Sale!', 'woocommerce' ) . '</span>',
114
  'type' => 'textarea',
115
  'css' => 'width:100%;',
includes/settings/wcj-settings-shipping-by-condition.php CHANGED
@@ -2,9 +2,10 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Shipping by Condition
4
  *
5
- * @version 3.9.0
6
  * @since 3.2.1
7
  * @author Algoritmika Ltd.
 
8
  */
9
 
10
  if ( ! defined( 'ABSPATH' ) ) {
@@ -67,12 +68,14 @@ foreach ( $this->condition_options as $options_id => $options_data ) {
67
  $custom_attributes = array();
68
  $desc_tip = '';
69
  }
 
 
70
  $settings = array_merge( $settings, array(
71
  array(
72
  'title' => ( $use_shipping_instances ? $method['zone_name'] . ': ' . $method['shipping_method_title'] : $method->get_method_title() ),
73
  'desc_tip' => $desc_tip,
74
- 'desc' => '<br>' . sprintf( __( 'Include %s', 'woocommerce-jetpack' ), $options_data['title'] ),
75
- 'id' => 'wcj_shipping_' . $options_id . '_include_' . ( $use_shipping_instances ? 'instance_' . $method['shipping_method_instance_id'] : $method->id ),
76
  'default' => '',
77
  'type' => $type,
78
  'class' => $class,
@@ -82,8 +85,8 @@ foreach ( $this->condition_options as $options_id => $options_data ) {
82
  ),
83
  array(
84
  'desc_tip' => $desc_tip,
85
- 'desc' => '<br>' . sprintf( __( 'Exclude %s', 'woocommerce-jetpack' ), $options_data['title'] ),
86
- 'id' => 'wcj_shipping_' . $options_id . '_exclude_' . ( $use_shipping_instances ? 'instance_' . $method['shipping_method_instance_id'] : $method->id ),
87
  'default' => '',
88
  'type' => $type,
89
  'class' => $class,
2
  /**
3
  * Booster for WooCommerce - Settings - Shipping by Condition
4
  *
5
+ * @version 4.0.0
6
  * @since 3.2.1
7
  * @author Algoritmika Ltd.
8
+ * @todo [dev] hide settings for the disabled subsection
9
  */
10
 
11
  if ( ! defined( 'ABSPATH' ) ) {
68
  $custom_attributes = array();
69
  $desc_tip = '';
70
  }
71
+ $include_id = 'wcj_shipping_' . $options_id . '_include_' . ( $use_shipping_instances ? 'instance_' . $method['shipping_method_instance_id'] : $method->id );
72
+ $exclude_id = 'wcj_shipping_' . $options_id . '_exclude_' . ( $use_shipping_instances ? 'instance_' . $method['shipping_method_instance_id'] : $method->id );
73
  $settings = array_merge( $settings, array(
74
  array(
75
  'title' => ( $use_shipping_instances ? $method['zone_name'] . ': ' . $method['shipping_method_title'] : $method->get_method_title() ),
76
  'desc_tip' => $desc_tip,
77
+ 'desc' => '<br>' . sprintf( __( 'Include %s', 'woocommerce-jetpack' ), $options_data['title'] ) . $this->get_extra_option_desc( $include_id ),
78
+ 'id' => $include_id,
79
  'default' => '',
80
  'type' => $type,
81
  'class' => $class,
85
  ),
86
  array(
87
  'desc_tip' => $desc_tip,
88
+ 'desc' => '<br>' . sprintf( __( 'Exclude %s', 'woocommerce-jetpack' ), $options_data['title'] ) . $this->get_extra_option_desc( $exclude_id ),
89
+ 'id' => $exclude_id,
90
  'default' => '',
91
  'type' => $type,
92
  'class' => $class,
includes/settings/wcj-settings-template-editor.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Template Editor
4
  *
5
- * @version 3.9.0
6
  * @since 3.9.0
7
  * @author Algoritmika Ltd.
8
  * @todo [dev] (maybe) always use `DIRECTORY_SEPARATOR` (instead of '\\' and '/')
@@ -49,7 +49,7 @@ foreach ( get_option( 'wcj_template_editor_templates_to_edit', array() ) as $tem
49
  'id' => "wcj_template_editor_templates_content[{$template}]",
50
  'type' => 'textarea',
51
  'default' => file_get_contents( $default_template_path ),
52
- 'css' => 'width:100%;height:500px;',
53
  'wcj_raw' => true,
54
  ),
55
  ) );
2
  /**
3
  * Booster for WooCommerce - Settings - Template Editor
4
  *
5
+ * @version 4.0.0
6
  * @since 3.9.0
7
  * @author Algoritmika Ltd.
8
  * @todo [dev] (maybe) always use `DIRECTORY_SEPARATOR` (instead of '\\' and '/')
49
  'id' => "wcj_template_editor_templates_content[{$template}]",
50
  'type' => 'textarea',
51
  'default' => file_get_contents( $default_template_path ),
52
+ 'css' => 'width:100%;height:500px;font-family:monospace;',
53
  'wcj_raw' => true,
54
  ),
55
  ) );
includes/shortcodes/class-wcj-shortcodes-general.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Shortcodes - General
4
  *
5
- * @version 3.9.1
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -793,10 +793,10 @@ class WCJ_General_Shortcodes extends WCJ_Shortcodes {
793
  */
794
  private function get_currency_selector( $atts, $content, $type = 'select' ) {
795
  // Start
 
 
 
796
  $html = '';
797
- $form_method = $atts['form_method'];
798
- $class = $atts['class'];
799
- $style = $atts['style'];
800
  $html .= '<form action="" method="' . $form_method . '">';
801
  if ( 'select' === $type ) {
802
  $html .= '<select name="wcj-currency" id="wcj-currency-select" style="' . $style . '" class="' . $class . '" onchange="this.form.submit()">';
@@ -870,75 +870,38 @@ class WCJ_General_Shortcodes extends WCJ_Shortcodes {
870
  /**
871
  * wcj_country_select_drop_down_list.
872
  *
873
- * @version 3.9.0
874
  */
875
  function wcj_country_select_drop_down_list( $atts, $content ) {
876
-
877
- $html = '';
878
-
879
- $form_method = $atts['form_method']; // get_option( 'wcj_price_by_country_country_selection_box_method', 'get' );
880
- $select_class = $atts['class']; // get_option( 'wcj_price_by_country_country_selection_box_class', '' );
881
- $select_style = $atts['style']; // get_option( 'wcj_price_by_country_country_selection_box_style', '' );
882
-
883
- $html .= '<form action="" method="' . $form_method . '">';
884
-
885
- $html .= '<select name="wcj-country" id="wcj-country" style="' . $select_style . '" class="' . $select_class . '" onchange="this.form.submit()">';
886
- $countries = wcj_get_countries();
887
-
888
- /* $shortcode_countries = get_option( 'wcj_price_by_country_shortcode_countries', array() );
889
- if ( '' == $shortcode_countries ) $shortcode_countries = array(); */
890
- $shortcode_countries = $atts['countries'];
891
- if ( '' == $shortcode_countries ) {
892
- $shortcode_countries = array();
893
- } else {
894
- $shortcode_countries = str_replace( ' ', '', $shortcode_countries );
895
- $shortcode_countries = trim( $shortcode_countries, ',' );
896
- $shortcode_countries = explode( ',', $shortcode_countries );
897
- }
898
-
899
- /* if ( 'get' == $form_method ) {
900
- $selected_country = ( isset( $_GET[ 'wcj-country' ] ) ) ? $_GET[ 'wcj-country' ] : '';
901
- } else {
902
- $selected_country = ( isset( $_POST[ 'wcj-country' ] ) ) ? $_POST[ 'wcj-country' ] : '';
903
- } */
904
- $selected_country = ( null !== ( $session_value = wcj_session_get( 'wcj-country' ) ) ? $session_value : '' );
905
-
906
  if ( 'yes' === $atts['replace_with_currency'] ) {
907
  $currencies_names_and_symbols = wcj_get_woocommerce_currencies_and_symbols();
908
  }
909
-
 
 
910
  if ( empty( $shortcode_countries ) ) {
911
  foreach ( $countries as $country_code => $country_name ) {
912
-
913
- $data_icon = '';
914
- if ( 'yes' === get_option( 'wcj_price_by_country_jquery_wselect_enabled', 'no' ) ) {
915
- $data_icon = ' data-icon="' . wcj_plugin_url() . '/assets/images/flag-icons/' . strtolower( $country_code ) . '.png"';
916
- }
917
-
918
  $option_label = ( 'yes' === $atts['replace_with_currency'] ) ? $currencies_names_and_symbols[ wcj_get_currency_by_country( $country_code ) ] : $country_name;
919
-
920
- $html .= '<option' . $data_icon . ' value="' . $country_code . '" ' . selected( $country_code, $selected_country, false ) . '>' . $option_label . '</option>';
921
  }
922
  } else {
923
  foreach ( $shortcode_countries as $country_code ) {
924
  if ( isset( $countries[ $country_code ] ) ) {
925
-
926
- $data_icon = '';
927
- if ( 'yes' === get_option( 'wcj_price_by_country_jquery_wselect_enabled', 'no' ) ) {
928
- $data_icon = ' data-icon="' . wcj_plugin_url() . '/assets/images/flag-icons/' . strtolower( $country_code ) . '.png"';
929
- }
930
-
931
  $option_label = ( 'yes' === $atts['replace_with_currency'] ) ? $currencies_names_and_symbols[ wcj_get_currency_by_country( $country_code ) ] : $countries[ $country_code ];
932
-
933
- $html .= '<option' . $data_icon . ' value="' . $country_code . '" ' . selected( $country_code, $selected_country, false ) . '>' . $option_label . '</option>';
934
  }
935
  }
936
  }
937
-
938
  $html .= '</select>';
939
-
940
  $html .= '</form>';
941
-
942
  return $html;
943
  }
944
 
2
  /**
3
  * Booster for WooCommerce - Shortcodes - General
4
  *
5
+ * @version 4.0.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
793
  */
794
  private function get_currency_selector( $atts, $content, $type = 'select' ) {
795
  // Start
796
+ $form_method = $atts['form_method'];
797
+ $class = $atts['class'];
798
+ $style = $atts['style'];
799
  $html = '';
 
 
 
800
  $html .= '<form action="" method="' . $form_method . '">';
801
  if ( 'select' === $type ) {
802
  $html .= '<select name="wcj-currency" id="wcj-currency-select" style="' . $style . '" class="' . $class . '" onchange="this.form.submit()">';
870
  /**
871
  * wcj_country_select_drop_down_list.
872
  *
873
+ * @version 4.0.0
874
  */
875
  function wcj_country_select_drop_down_list( $atts, $content ) {
876
+ $form_method = $atts['form_method'];
877
+ $select_class = $atts['class'];
878
+ $select_style = $atts['style'];
879
+ $countries = wcj_get_countries();
880
+ $shortcode_countries = ( empty( $atts['countries'] ) ? array() : array_map( 'trim', explode( ',', $atts['countries'] ) ) );
881
+ $selected_country = ( null !== ( $session_value = wcj_session_get( 'wcj-country' ) ) ? $session_value : '' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
882
  if ( 'yes' === $atts['replace_with_currency'] ) {
883
  $currencies_names_and_symbols = wcj_get_woocommerce_currencies_and_symbols();
884
  }
885
+ $html = '';
886
+ $html .= '<form action="" method="' . $form_method . '">';
887
+ $html .= '<select name="wcj-country" id="wcj-country" style="' . $select_style . '" class="' . $select_class . '" onchange="this.form.submit()">';
888
  if ( empty( $shortcode_countries ) ) {
889
  foreach ( $countries as $country_code => $country_name ) {
890
+ $data_icon = ( 'yes' === get_option( 'wcj_price_by_country_jquery_wselect_enabled', 'no' ) ? ' data-icon="' . wcj_plugin_url() . '/assets/images/flag-icons/' . strtolower( $country_code ) . '.png"' : '' );
 
 
 
 
 
891
  $option_label = ( 'yes' === $atts['replace_with_currency'] ) ? $currencies_names_and_symbols[ wcj_get_currency_by_country( $country_code ) ] : $country_name;
892
+ $html .= '<option' . $data_icon . ' value="' . $country_code . '" ' . selected( $country_code, $selected_country, false ) . '>' . $option_label . '</option>';
 
893
  }
894
  } else {
895
  foreach ( $shortcode_countries as $country_code ) {
896
  if ( isset( $countries[ $country_code ] ) ) {
897
+ $data_icon = ( 'yes' === get_option( 'wcj_price_by_country_jquery_wselect_enabled', 'no' ) ? ' data-icon="' . wcj_plugin_url() . '/assets/images/flag-icons/' . strtolower( $country_code ) . '.png"' : '' );
 
 
 
 
 
898
  $option_label = ( 'yes' === $atts['replace_with_currency'] ) ? $currencies_names_and_symbols[ wcj_get_currency_by_country( $country_code ) ] : $countries[ $country_code ];
899
+ $html .= '<option' . $data_icon . ' value="' . $country_code . '" ' . selected( $country_code, $selected_country, false ) . '>' . $option_label . '</option>';
 
900
  }
901
  }
902
  }
 
903
  $html .= '</select>';
 
904
  $html .= '</form>';
 
905
  return $html;
906
  }
907
 
includes/shortcodes/class-wcj-shortcodes-orders.php CHANGED
@@ -691,7 +691,7 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
691
  /**
692
  * wcj_order_items_total_weight.
693
  *
694
- * @version 2.5.7
695
  * @deprecated 2.5.7
696
  */
697
  function wcj_order_items_total_weight( $atts ) {
@@ -732,7 +732,7 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
732
  *
733
  * @version 3.5.0
734
  * @since 3.4.0
735
- * @todo (maybe) run `strip_tags` on `comment_content`
736
  */
737
  function wcj_order_notes( $atts ) {
738
  $notes = array();
691
  /**
692
  * wcj_order_items_total_weight.
693
  *
694
+ * @version 2.5.7
695
  * @deprecated 2.5.7
696
  */
697
  function wcj_order_items_total_weight( $atts ) {
732
  *
733
  * @version 3.5.0
734
  * @since 3.4.0
735
+ * @todo [dev] (maybe) run `strip_tags` on `comment_content`
736
  */
737
  function wcj_order_notes( $atts ) {
738
  $notes = array();
includes/shortcodes/class-wcj-shortcodes-products.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Shortcodes - Products
4
  *
5
- * @version 3.9.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -294,15 +294,12 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
294
  /**
295
  * wcj_product_time_since_last_sale.
296
  *
297
- * @version 2.5.4
298
  * @since 2.4.0
299
  */
300
  function wcj_product_time_since_last_sale( $atts ) {
301
- global $woocommerce_loop, $post;
302
- $saved_wc_loop = $woocommerce_loop;
303
- $saved_post = $post;
304
- $offset = 0;
305
- $block_size = 96;
306
  while( true ) {
307
  // Create args for new query
308
  $args = array(
@@ -312,7 +309,8 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
312
  'offset' => $offset,
313
  'orderby' => 'date',
314
  'order' => 'DESC',
315
- 'date_query' => array( array( 'after' => strtotime( '-' . $atts['days_to_cover'] . ' days' ) ) ),
 
316
  );
317
  // Run new query
318
  $loop = new WP_Query( $args );
@@ -320,28 +318,19 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
320
  break;
321
  }
322
  // Analyze the results, i.e. orders
323
- while ( $loop->have_posts() ) : $loop->the_post();
324
- $order = new WC_Order( $loop->post->ID );
325
  $items = $order->get_items();
326
  foreach ( $items as $item ) {
327
  // Run through all order's items
328
  if ( $item['product_id'] == $atts['product_id'] ) {
329
  // Found sale!
330
- $result = sprintf( __( '%s ago', 'woocommerce-jetpack' ), human_time_diff( get_the_time( 'U' ), current_time( 'timestamp' ) ) );
331
- // wp_reset_postdata();
332
- $woocommerce_loop = $saved_wc_loop;
333
- $post = $saved_post;
334
- setup_postdata( $post );
335
- return $result;
336
  }
337
  }
338
- endwhile;
339
  $offset += $block_size;
340
  }
341
- // wp_reset_postdata();
342
- $woocommerce_loop = $saved_wc_loop;
343
- $post = $saved_post;
344
- setup_postdata( $post );
345
  // No sales found
346
  return ( 'yes' === $atts['hide_if_no_sales'] ? '' : __( 'No sales yet.', 'woocommerce-jetpack' ) );
347
  }
@@ -349,20 +338,24 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
349
  /**
350
  * wcj_product_available_variations.
351
  *
352
- * @version 2.4.0
353
  * @since 2.4.0
 
354
  */
355
  function wcj_product_available_variations( $atts ) {
356
  $return_html = '';
 
357
  if ( $this->the_product->is_type( 'variable' ) ) {
358
  $return_html .= '<table>';
359
  foreach ( $this->the_product->get_available_variations() as $variation ) {
360
  $return_html .= '<tr>';
361
  foreach ( $variation['attributes'] as $attribute_slug => $attribute_name ) {
362
- if ( '' == $attribute_name ) $attribute_name = __( 'Any', 'woocommerce-jetpack' );
 
 
363
  $return_html .= '<td>' . $attribute_name . '</td>';
364
  }
365
- $return_html .= '<td>' . $variation['price_html'] . '</td>';
366
  $return_html .= '</tr>';
367
  }
368
  $return_html .= '</table>';
@@ -833,7 +826,7 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
833
  /**
834
  * wcj_product_wholesale_price_table.
835
  *
836
- * @version 3.7.0
837
  * @todo (maybe) `if ( 'yes' === $atts['add_percent_row'] )` for 'fixed' or 'price_directly'; `if ( 'yes' === $atts['add_discount_row'] )` for 'percent' or 'price_directly'
838
  */
839
  function wcj_product_wholesale_price_table( $atts ) {
@@ -857,6 +850,10 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
857
  }
858
  }
859
 
 
 
 
 
860
  $wholesale_price_levels = array();
861
  if ( wcj_is_product_wholesale_enabled_per_product( $product_id ) ) {
862
  for ( $i = 1; $i <= apply_filters( 'booster_option', 1, get_post_meta( $product_id, '_' . 'wcj_wholesale_price_levels_number' . $role_option_name_addon, true ) ); $i++ ) {
2
  /**
3
  * Booster for WooCommerce - Shortcodes - Products
4
  *
5
+ * @version 4.0.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
294
  /**
295
  * wcj_product_time_since_last_sale.
296
  *
297
+ * @version 4.0.0
298
  * @since 2.4.0
299
  */
300
  function wcj_product_time_since_last_sale( $atts ) {
301
+ $offset = 0;
302
+ $block_size = 512;
 
 
 
303
  while( true ) {
304
  // Create args for new query
305
  $args = array(
309
  'offset' => $offset,
310
  'orderby' => 'date',
311
  'order' => 'DESC',
312
+ 'date_query' => array( 'after' => '-' . $atts['days_to_cover'] . ' days' ),
313
+ 'fields' => 'ids',
314
  );
315
  // Run new query
316
  $loop = new WP_Query( $args );
318
  break;
319
  }
320
  // Analyze the results, i.e. orders
321
+ foreach ( $loop->posts as $order_id ) {
322
+ $order = wc_get_order( $order_id );
323
  $items = $order->get_items();
324
  foreach ( $items as $item ) {
325
  // Run through all order's items
326
  if ( $item['product_id'] == $atts['product_id'] ) {
327
  // Found sale!
328
+ return sprintf( __( '%s ago', 'woocommerce-jetpack' ), human_time_diff( get_the_time( 'U', $order_id ), current_time( 'timestamp' ) ) );
 
 
 
 
 
329
  }
330
  }
331
+ }
332
  $offset += $block_size;
333
  }
 
 
 
 
334
  // No sales found
335
  return ( 'yes' === $atts['hide_if_no_sales'] ? '' : __( 'No sales yet.', 'woocommerce-jetpack' ) );
336
  }
338
  /**
339
  * wcj_product_available_variations.
340
  *
341
+ * @version 4.0.0
342
  * @since 2.4.0
343
+ * @todo [dev] re-check `$attribute_name`
344
  */
345
  function wcj_product_available_variations( $atts ) {
346
  $return_html = '';
347
+ $param = ( isset( $atts['param'] ) ? $atts['param'] : 'price_html' );
348
  if ( $this->the_product->is_type( 'variable' ) ) {
349
  $return_html .= '<table>';
350
  foreach ( $this->the_product->get_available_variations() as $variation ) {
351
  $return_html .= '<tr>';
352
  foreach ( $variation['attributes'] as $attribute_slug => $attribute_name ) {
353
+ if ( '' == $attribute_name ) {
354
+ $attribute_name = __( 'Any', 'woocommerce-jetpack' );
355
+ }
356
  $return_html .= '<td>' . $attribute_name . '</td>';
357
  }
358
+ $return_html .= '<td>' . $variation[ $param ] . '</td>';
359
  $return_html .= '</tr>';
360
  }
361
  $return_html .= '</table>';
826
  /**
827
  * wcj_product_wholesale_price_table.
828
  *
829
+ * @version 4.0.0
830
  * @todo (maybe) `if ( 'yes' === $atts['add_percent_row'] )` for 'fixed' or 'price_directly'; `if ( 'yes' === $atts['add_discount_row'] )` for 'percent' or 'price_directly'
831
  */
832
  function wcj_product_wholesale_price_table( $atts ) {
850
  }
851
  }
852
 
853
+ if ( isset( $atts['user_role'] ) ) {
854
+ $role_option_name_addon = '_' . $atts['user_role'];
855
+ }
856
+
857
  $wholesale_price_levels = array();
858
  if ( wcj_is_product_wholesale_enabled_per_product( $product_id ) ) {
859
  for ( $i = 1; $i <= apply_filters( 'booster_option', 1, get_post_meta( $product_id, '_' . 'wcj_wholesale_price_levels_number' . $role_option_name_addon, true ) ); $i++ ) {
includes/widgets/class-wcj-widget-multicurrency.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Widget - Multicurrency
4
  *
5
- * @version 3.1.0
6
  * @since 2.4.3
7
  * @author Algoritmika Ltd.
8
  */
@@ -33,7 +33,7 @@ class WCJ_Widget_Multicurrency extends WCJ_Widget {
33
  /**
34
  * get_content.
35
  *
36
- * @version 3.1.0
37
  * @since 3.1.0
38
  */
39
  function get_content( $instance ) {
@@ -44,9 +44,15 @@ class WCJ_Widget_Multicurrency extends WCJ_Widget {
44
  case 'link_list':
45
  return do_shortcode( '[wcj_currency_select_link_list]' );
46
  case 'radio_list':
47
- return do_shortcode( '[wcj_currency_select_radio_list]' );
 
 
48
  default: // 'drop_down'
49
- return do_shortcode( '[wcj_currency_select_drop_down_list]' );
 
 
 
 
50
  }
51
  }
52
  }
@@ -54,7 +60,7 @@ class WCJ_Widget_Multicurrency extends WCJ_Widget {
54
  /**
55
  * get_options.
56
  *
57
- * @version 3.1.0
58
  * @since 3.1.0
59
  */
60
  function get_options() {
@@ -78,6 +84,34 @@ class WCJ_Widget_Multicurrency extends WCJ_Widget {
78
  ),
79
  'class' => 'widefat',
80
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
  );
82
  }
83
 
2
  /**
3
  * Booster for WooCommerce - Widget - Multicurrency
4
  *
5
+ * @version 4.0.0
6
  * @since 2.4.3
7
  * @author Algoritmika Ltd.
8
  */
33
  /**
34
  * get_content.
35
  *
36
+ * @version 4.0.0
37
  * @since 3.1.0
38
  */
39
  function get_content( $instance ) {
44
  case 'link_list':
45
  return do_shortcode( '[wcj_currency_select_link_list]' );
46
  case 'radio_list':
47
+ return do_shortcode( '[wcj_currency_select_radio_list' .
48
+ ' form_method="' . ( ! empty( $instance['form_method'] ) ? $instance['form_method'] : 'post' ) . '"' .
49
+ ']' );
50
  default: // 'drop_down'
51
+ return do_shortcode( '[wcj_currency_select_drop_down_list' .
52
+ ' form_method="' . ( ! empty( $instance['form_method'] ) ? $instance['form_method'] : 'post' ) . '"' .
53
+ ' class="' . ( ! empty( $instance['class'] ) ? $instance['class'] : '' ) . '"' .
54
+ ' style="' . ( ! empty( $instance['style'] ) ? $instance['style'] : '' ) . '"' .
55
+ ']' );
56
  }
57
  }
58
  }
60
  /**
61
  * get_options.
62
  *
63
+ * @version 4.0.0
64
  * @since 3.1.0
65
  */
66
  function get_options() {
84
  ),
85
  'class' => 'widefat',
86
  ),
87
+ array(
88
+ 'title' => __( 'Form Method', 'woocommerce-jetpack' ),
89
+ 'desc' => '* ' . __( 'HTML form method for "Drop down" and "Radio list" types.', 'woocommerce-jetpack' ),
90
+ 'id' => 'form_method',
91
+ 'default' => 'post',
92
+ 'type' => 'select',
93
+ 'options' => array(
94
+ 'post' => __( 'Post', 'woocommerce-jetpack' ),
95
+ 'get' => __( 'Get', 'woocommerce-jetpack' ),
96
+ ),
97
+ 'class' => 'widefat',
98
+ ),
99
+ array(
100
+ 'title' => __( 'Class', 'woocommerce-jetpack' ),
101
+ 'desc' => '* ' . __( 'HTML class for "Drop down" type.', 'woocommerce-jetpack' ),
102
+ 'id' => 'class',
103
+ 'default' => '',
104
+ 'type' => 'text',
105
+ 'class' => 'widefat',
106
+ ),
107
+ array(
108
+ 'title' => __( 'Style', 'woocommerce-jetpack' ),
109
+ 'desc' => '* ' . __( 'HTML style for "Drop down" type.', 'woocommerce-jetpack' ),
110
+ 'id' => 'style',
111
+ 'default' => '',
112
+ 'type' => 'text',
113
+ 'class' => 'widefat',
114
+ ),
115
  );
116
  }
117
 
langs/woocommerce-jetpack.pot CHANGED
@@ -77,7 +77,7 @@ msgstr ""
77
 
78
  #: includes/class-wcj-admin-bar.php:172
79
  #: includes/admin/class-wc-settings-jetpack.php:416
80
- #: includes/classes/class-wcj-module.php:698
81
  msgid "Documentation"
82
  msgstr ""
83
 
@@ -96,7 +96,7 @@ 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:531
100
  #: includes/settings/wcj-settings-wpml.php:74
101
  msgid "Tools"
102
  msgstr ""
@@ -111,16 +111,16 @@ msgstr ""
111
 
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:129
115
  #: includes/class-wcj-max-products-per-user.php:115
116
- #: includes/class-wcj-orders.php:109 includes/class-wcj-orders.php:138
117
  #: includes/class-wcj-payment-gateways.php:91
118
  #: includes/class-wcj-track-users.php:163
119
  #: includes/class-wcj-track-users.php:251
120
  #: includes/admin/class-wc-settings-jetpack.php:24
121
  #: includes/admin/class-wc-settings-jetpack.php:221
122
- #: includes/classes/class-wcj-module.php:348
123
- #: includes/classes/class-wcj-module.php:558
124
  #: includes/settings/wcj-settings-price-by-country.php:169
125
  msgid "Booster"
126
  msgstr ""
@@ -228,7 +228,7 @@ 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:572
232
  msgid "Out of stock"
233
  msgstr ""
234
 
@@ -237,7 +237,7 @@ msgid "Most Stocked"
237
  msgstr ""
238
 
239
  #: includes/class-wcj-admin-bar.php:422
240
- #: includes/class-wcj-eu-vat-number.php:193
241
  msgid "Taxes"
242
  msgstr ""
243
 
@@ -452,7 +452,7 @@ msgstr ""
452
  msgid "Customize admin products list."
453
  msgstr ""
454
 
455
- #: includes/class-wcj-admin-tools.php:24 includes/class-wcj-admin-tools.php:31
456
  msgid "Admin Tools"
457
  msgstr ""
458
 
@@ -460,12 +460,16 @@ msgstr ""
460
  msgid "Booster for WooCommerce debug and log tools."
461
  msgstr ""
462
 
 
 
 
 
463
  #: includes/class-wcj-admin-tools.php:32
464
  msgid "Log."
465
  msgstr ""
466
 
467
  #: includes/class-wcj-admin-tools.php:33
468
- #: includes/settings/wcj-settings-admin-tools.php:26
469
  msgid "Log"
470
  msgstr ""
471
 
@@ -479,48 +483,48 @@ msgstr ""
479
  msgid "Current PHP time limit: %s seconds."
480
  msgstr ""
481
 
482
- #: includes/class-wcj-admin-tools.php:103
483
  #: includes/settings/wcj-settings-export.php:157
484
  #: includes/settings/wcj-settings-export.php:236
485
  msgid "Product Meta"
486
  msgstr ""
487
 
488
- #: includes/class-wcj-admin-tools.php:120
489
  #: includes/settings/wcj-settings-export.php:86
490
  #: includes/settings/wcj-settings-export.php:154
491
  msgid "Order Meta"
492
  msgstr ""
493
 
494
- #: includes/class-wcj-admin-tools.php:154
495
  msgid "Order Items Meta"
496
  msgstr ""
497
 
498
- #: includes/class-wcj-admin-tools.php:156
499
  msgid "Item Key"
500
  msgstr ""
501
 
502
- #: includes/class-wcj-admin-tools.php:156
503
  msgid "Item Meta Key"
504
  msgstr ""
505
 
506
- #: includes/class-wcj-admin-tools.php:156
507
  msgid "Item Meta Value"
508
  msgstr ""
509
 
510
- #: includes/class-wcj-admin-tools.php:182
511
  msgid "Delete Log"
512
  msgstr ""
513
 
514
- #: includes/class-wcj-admin-tools.php:185
515
  #, php-format
516
  msgid "Now: %s"
517
  msgstr ""
518
 
519
- #: includes/class-wcj-admin-tools.php:189
520
  msgid "Log is empty."
521
  msgstr ""
522
 
523
- #: includes/class-wcj-admin-tools.php:220
524
  msgid "NOT DEFINED"
525
  msgstr ""
526
 
@@ -774,33 +778,33 @@ msgstr ""
774
  msgid "Customize cross-sells products display."
775
  msgstr ""
776
 
777
- #: includes/class-wcj-crowdfunding.php:24
778
  msgid "Crowdfunding"
779
  msgstr ""
780
 
781
- #: includes/class-wcj-crowdfunding.php:25
782
  msgid "Add crowdfunding products to WooCommerce."
783
  msgstr ""
784
 
785
- #: includes/class-wcj-crowdfunding.php:27
786
  msgid "When enabled, module will add Crowdfunding metabox to product edit."
787
  msgstr ""
788
 
789
- #: includes/class-wcj-crowdfunding.php:29
790
  #, php-format
791
  msgid ""
792
  "To add crowdfunding info to the product, use <a href=\"%s\" target=\"_blank"
793
  "\">Booster's crowdfunding shortcodes</a>."
794
  msgstr ""
795
 
796
- #: includes/class-wcj-crowdfunding.php:33
797
  #, php-format
798
  msgid ""
799
  "Shortcodes could be used for example in <a href=\"%s\">Product Info module</"
800
  "a>."
801
  msgstr ""
802
 
803
- #: includes/class-wcj-crowdfunding.php:37
804
  #, php-format
805
  msgid ""
806
  "To change add to cart button labels use <a href=\"%s\">Add to Cart Labels "
@@ -1029,14 +1033,39 @@ msgstr ""
1029
  msgid "Separate custom CSS for front and back end. Per product CSS."
1030
  msgstr ""
1031
 
1032
- #: includes/class-wcj-custom-js.php:28
1033
  msgid "Custom JS"
1034
  msgstr ""
1035
 
1036
- #: includes/class-wcj-custom-js.php:29
1037
  msgid "Separate custom JS for front and back end."
1038
  msgstr ""
1039
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1040
  #: includes/class-wcj-email-options.php:26
1041
  #: includes/pdf-invoices/submodules/class-wcj-pdf-invoicing-emails.php:24
1042
  #: includes/settings/wcj-settings-emails-verification.php:107
@@ -1199,7 +1228,7 @@ msgid "Booster: Send Email: %s"
1199
  msgstr ""
1200
 
1201
  #: includes/class-wcj-empty-cart-button.php:25
1202
- #: includes/shortcodes/class-wcj-shortcodes-general.php:495
1203
  msgid "Empty Cart Button"
1204
  msgstr ""
1205
 
@@ -1209,7 +1238,7 @@ msgid ""
1209
  msgstr ""
1210
 
1211
  #: includes/class-wcj-eu-vat-number.php:25
1212
- #: includes/class-wcj-eu-vat-number.php:272
1213
  #: includes/settings/wcj-settings-eu-vat-number.php:22
1214
  #: includes/settings/wcj-settings-eu-vat-number.php:29
1215
  msgid "EU VAT Number"
@@ -1230,45 +1259,45 @@ msgstr ""
1230
  msgid "Add all EU countries VAT standard rates to WooCommerce."
1231
  msgstr ""
1232
 
1233
- #: includes/class-wcj-eu-vat-number.php:181
1234
  msgid "Customer IP"
1235
  msgstr ""
1236
 
1237
- #: includes/class-wcj-eu-vat-number.php:185 includes/class-wcj-orders.php:138
1238
- #: includes/settings/wcj-settings-orders.php:100
1239
  #: includes/settings/wcj-settings-payment-gateways-by-country.php:27
1240
  msgid "Country by IP"
1241
  msgstr ""
1242
 
1243
- #: includes/class-wcj-eu-vat-number.php:189
1244
  msgid "Customer EU VAT Number"
1245
  msgstr ""
1246
 
1247
- #: includes/class-wcj-eu-vat-number.php:204
1248
  msgid "Validate VAT and remove taxes"
1249
  msgstr ""
1250
 
1251
- #: includes/class-wcj-eu-vat-number.php:344
1252
  #: includes/settings/wcj-settings-eu-vat-number.php:165
1253
  msgid "Validating VAT. Please wait..."
1254
  msgstr ""
1255
 
1256
- #: includes/class-wcj-eu-vat-number.php:345
1257
  #: includes/settings/wcj-settings-eu-vat-number.php:172
1258
  msgid "VAT is valid."
1259
  msgstr ""
1260
 
1261
- #: includes/class-wcj-eu-vat-number.php:346
1262
  #: includes/settings/wcj-settings-eu-vat-number.php:179
1263
  msgid "VAT is not valid."
1264
  msgstr ""
1265
 
1266
- #: includes/class-wcj-eu-vat-number.php:347
1267
  #: includes/settings/wcj-settings-eu-vat-number.php:187
1268
  msgid "Validation failed. Please try again."
1269
  msgstr ""
1270
 
1271
- #: includes/class-wcj-eu-vat-number.php:453
1272
  #: includes/settings/wcj-settings-eu-vat-number.php:83
1273
  msgid "<strong>EU VAT Number</strong> is not valid."
1274
  msgstr ""
@@ -1298,68 +1327,68 @@ msgstr ""
1298
  msgid "Export Customers (extracted from orders)."
1299
  msgstr ""
1300
 
1301
- #: includes/class-wcj-export-import.php:38
1302
  msgid "Customers are identified by billing email."
1303
  msgstr ""
1304
 
1305
- #: includes/class-wcj-export-import.php:41
1306
  msgid "Export Orders"
1307
  msgstr ""
1308
 
1309
- #: includes/class-wcj-export-import.php:42
1310
  msgid "Export Orders."
1311
  msgstr ""
1312
 
1313
- #: includes/class-wcj-export-import.php:45
1314
  msgid "Export Orders Items"
1315
  msgstr ""
1316
 
1317
- #: includes/class-wcj-export-import.php:46
1318
  msgid "Export Orders Items."
1319
  msgstr ""
1320
 
1321
- #: includes/class-wcj-export-import.php:49
1322
  msgid "Export Products"
1323
  msgstr ""
1324
 
1325
- #: includes/class-wcj-export-import.php:50
1326
  msgid "Export Products."
1327
  msgstr ""
1328
 
1329
- #: includes/class-wcj-export-import.php:194
1330
- #: includes/class-wcj-export-import.php:200
1331
  msgid "Filter by Billing Country"
1332
  msgstr ""
1333
 
1334
- #: includes/class-wcj-export-import.php:195
1335
  msgid "Filter by Product Title"
1336
  msgstr ""
1337
 
1338
- #: includes/class-wcj-export-import.php:214
1339
  #: includes/reports/wcj-class-reports-sales-daily.php:189
1340
  #: includes/reports/wcj-class-reports-sales-gateways.php:137
1341
  #: includes/settings/wcj-settings-orders.php:45
1342
  msgid "Filter"
1343
  msgstr ""
1344
 
1345
- #: includes/class-wcj-export-import.php:233
1346
  #: includes/class-wcj-track-users.php:36
1347
  msgid "All time"
1348
  msgstr ""
1349
 
1350
- #: includes/class-wcj-export-import.php:246
1351
  msgid "Custom:"
1352
  msgstr ""
1353
 
1354
- #: includes/class-wcj-export-import.php:251
1355
  msgid "Go"
1356
  msgstr ""
1357
 
1358
- #: includes/class-wcj-export-import.php:271
1359
  msgid "Download CSV"
1360
  msgstr ""
1361
 
1362
- #: includes/class-wcj-export-import.php:273
1363
  msgid "Download XML"
1364
  msgstr ""
1365
 
@@ -1409,28 +1438,28 @@ msgstr ""
1409
  msgid "Booster User Role"
1410
  msgstr ""
1411
 
1412
- #: includes/class-wcj-general.php:174
1413
- msgid "Both fields are required!"
1414
  msgstr ""
1415
 
1416
- #: includes/class-wcj-general.php:177
1417
  msgid "Role ID must not be numbers only!"
1418
  msgstr ""
1419
 
1420
- #: includes/class-wcj-general.php:181
1421
  msgid "Role successfully added!"
1422
  msgstr ""
1423
 
1424
- #: includes/class-wcj-general.php:183
1425
  msgid "Role already exists!"
1426
  msgstr ""
1427
 
1428
- #: includes/class-wcj-general.php:191
1429
  #, php-format
1430
  msgid "Role %s successfully deleted!"
1431
  msgstr ""
1432
 
1433
- #: includes/class-wcj-general.php:197 includes/class-wcj-general.php:210
1434
  #: includes/class-wcj-sku.php:536
1435
  #: includes/reports/wcj-class-reports-sales.php:196
1436
  #: includes/settings/wcj-settings-cross-sells.php:43
@@ -1442,7 +1471,7 @@ msgstr ""
1442
  msgid "ID"
1443
  msgstr ""
1444
 
1445
- #: includes/class-wcj-general.php:197 includes/class-wcj-general.php:211
1446
  #: includes/class-wcj-offer-price.php:172
1447
  #: includes/export/class-wcj-fields-helper.php:282
1448
  #: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:70
@@ -1450,7 +1479,11 @@ msgstr ""
1450
  msgid "Name"
1451
  msgstr ""
1452
 
1453
- #: includes/class-wcj-general.php:197
 
 
 
 
1454
  #: includes/class-wcj-product-by-user.php:197
1455
  #: includes/settings/wcj-settings-pdf-invoicing-advanced.php:100
1456
  #: includes/tools/class-wcj-order-statuses-tool.php:145
@@ -1458,7 +1491,7 @@ msgstr ""
1458
  msgid "Actions"
1459
  msgstr ""
1460
 
1461
- #: includes/class-wcj-general.php:203
1462
  #: includes/class-wcj-payment-gateways.php:117
1463
  #: includes/class-wcj-product-bulk-meta-editor.php:367
1464
  #: includes/class-wcj-product-by-user.php:206
@@ -1469,15 +1502,15 @@ msgstr ""
1469
  msgid "Delete"
1470
  msgstr ""
1471
 
1472
- #: includes/class-wcj-general.php:206
1473
  msgid "Existing Roles"
1474
  msgstr ""
1475
 
1476
- #: includes/class-wcj-general.php:212
1477
  msgid "Add New Role"
1478
  msgstr ""
1479
 
1480
- #: includes/class-wcj-general.php:215
1481
  #: includes/class-wcj-shipping-by-products.php:206
1482
  #: includes/settings/wcj-settings-admin-orders-list.php:134
1483
  #: includes/settings/wcj-settings-checkout-custom-fields.php:22
@@ -1491,9 +1524,10 @@ msgstr ""
1491
  #: includes/settings/wcj-settings-order-custom-statuses.php:29
1492
  #: includes/settings/wcj-settings-order-custom-statuses.php:37
1493
  #: includes/settings/wcj-settings-order-custom-statuses.php:70
 
1494
  #: includes/settings/wcj-settings-order-min-amount.php:53
1495
- #: includes/settings/wcj-settings-orders.php:106
1496
- #: includes/settings/wcj-settings-orders.php:133
1497
  #: includes/settings/wcj-settings-pdf-invoicing-advanced.php:125
1498
  #: includes/settings/wcj-settings-pdf-invoicing-advanced.php:183
1499
  #: includes/settings/wcj-settings-product-by-condition.php:107
@@ -1511,7 +1545,8 @@ msgstr ""
1511
  msgid "Add"
1512
  msgstr ""
1513
 
1514
- #: includes/class-wcj-general.php:278 includes/class-wcj-general.php:320
 
1515
  #: includes/class-wcj-product-bulk-meta-editor.php:339
1516
  #: includes/class-wcj-product-bulk-price-converter.php:148
1517
  #: includes/class-wcj-sku.php:537
@@ -1520,12 +1555,13 @@ msgstr ""
1520
  msgid "Product"
1521
  msgstr ""
1522
 
1523
- #: includes/class-wcj-general.php:279 includes/class-wcj-general.php:321
 
1524
  #: includes/reports/wcj-class-reports-stock.php:270
1525
  msgid "Category"
1526
  msgstr ""
1527
 
1528
- #: includes/class-wcj-general.php:341
1529
  msgid "Total Products:"
1530
  msgstr ""
1531
 
@@ -1657,16 +1693,30 @@ msgstr ""
1657
  #: includes/class-wcj-multicurrency.php:28
1658
  #, php-format
1659
  msgid ""
1660
- "After setting currencies in the Currencies Options section below, use %s "
1661
- "<strong>widget</strong>, or %s <strong>shortcode</strong>. If you want to "
1662
- "insert switcher in your <strong>PHP code</strong>, just use %s code."
 
 
 
 
1663
  msgstr ""
1664
 
1665
- #: includes/class-wcj-multicurrency.php:29
1666
  #: includes/widgets/class-wcj-widget-multicurrency.php:27
1667
  msgid "Booster - Multicurrency Switcher"
1668
  msgstr ""
1669
 
 
 
 
 
 
 
 
 
 
 
1670
  #: includes/class-wcj-my-account.php:25
1671
  msgid "My Account"
1672
  msgstr ""
@@ -1684,7 +1734,7 @@ msgid "Addresses"
1684
  msgstr ""
1685
 
1686
  #: includes/class-wcj-my-account.php:35 includes/class-wcj-my-account.php:45
1687
- #: includes/settings/wcj-settings-orders.php:86
1688
  msgid "Payment methods"
1689
  msgstr ""
1690
 
@@ -1731,9 +1781,9 @@ msgstr ""
1731
  #: includes/class-wcj-product-by-user.php:206
1732
  #: includes/class-wcj-purchase-data.php:94
1733
  #: includes/class-wcj-track-users.php:334
1734
- #: includes/classes/class-wcj-module.php:667
1735
- #: includes/functions/wcj-functions-general.php:155
1736
- #: includes/functions/wcj-functions-html.php:96
1737
  #: includes/reports/wcj-class-reports-monthly-sales.php:351
1738
  #: includes/settings/wcj-settings-empty-cart.php:85
1739
  #: includes/shortcodes/class-wcj-shortcodes-products-add-form.php:364
@@ -1961,41 +2011,50 @@ msgstr ""
1961
  msgid "No old slugs found."
1962
  msgstr ""
1963
 
1964
- #: includes/class-wcj-order-custom-statuses.php:28
1965
  msgid "Order Custom Statuses"
1966
  msgstr ""
1967
 
1968
- #: includes/class-wcj-order-custom-statuses.php:29
1969
  msgid "Custom statuses for WooCommerce orders."
1970
  msgstr ""
1971
 
1972
- #: includes/class-wcj-order-custom-statuses.php:35
1973
  #: includes/settings/wcj-settings-order-custom-statuses.php:14
1974
  msgid "Custom Statuses"
1975
  msgstr ""
1976
 
1977
- #: includes/class-wcj-order-custom-statuses.php:36
1978
  msgid ""
1979
  "Tool lets you add, edit or delete any custom status for WooCommerce orders."
1980
  msgstr ""
1981
 
1982
- #: includes/class-wcj-order-custom-statuses.php:136
 
 
 
 
 
 
 
 
 
1983
  msgid "Processing"
1984
  msgstr ""
1985
 
1986
- #: includes/class-wcj-order-custom-statuses.php:147
1987
  msgid "Complete"
1988
  msgstr ""
1989
 
1990
- #: includes/class-wcj-order-custom-statuses.php:255
1991
  #, php-format
1992
  msgid " <span class=\"count\">(%s)</span>"
1993
  msgid_plural " <span class=\"count\">(%s)</span>"
1994
  msgstr[0] ""
1995
  msgstr[1] ""
1996
 
1997
- #: includes/class-wcj-order-custom-statuses.php:329
1998
- #: includes/class-wcj-order-custom-statuses.php:331
1999
  msgid "Mark"
2000
  msgstr ""
2001
 
@@ -2096,27 +2155,27 @@ msgid ""
2096
  "regenerate download permissions for orders."
2097
  msgstr ""
2098
 
2099
- #: includes/class-wcj-orders.php:109
2100
  msgid "Order Navigation"
2101
  msgstr ""
2102
 
2103
- #: includes/class-wcj-orders.php:125
2104
  msgid "Previous order"
2105
  msgstr ""
2106
 
2107
- #: includes/class-wcj-orders.php:126
2108
  msgid "Next order"
2109
  msgstr ""
2110
 
2111
- #: includes/class-wcj-orders.php:165
2112
  msgid "No data."
2113
  msgstr ""
2114
 
2115
- #: includes/class-wcj-orders.php:210
2116
  msgid "Regenerate download permissions"
2117
  msgstr ""
2118
 
2119
- #: includes/class-wcj-orders.php:224
2120
  #, php-format
2121
  msgid "Download permissions regenerated for %s order."
2122
  msgid_plural "Download permissions regenerated for %s orders."
@@ -2157,11 +2216,11 @@ msgstr ""
2157
  msgid "Set user roles to include/exclude for payment gateways to show up."
2158
  msgstr ""
2159
 
2160
- #: includes/class-wcj-payment-gateways-currency.php:24
2161
  msgid "Gateways Currency Converter"
2162
  msgstr ""
2163
 
2164
- #: includes/class-wcj-payment-gateways-currency.php:25
2165
  msgid "Currency converter for payment gateways."
2166
  msgstr ""
2167
 
@@ -2363,32 +2422,32 @@ msgid ""
2363
  "format options."
2364
  msgstr ""
2365
 
2366
- #: includes/class-wcj-price-labels.php:24
2367
  msgid "Custom Price Labels"
2368
  msgstr ""
2369
 
2370
- #: includes/class-wcj-price-labels.php:25
2371
  msgid "Create any custom price label for any product."
2372
  msgstr ""
2373
 
2374
- #: includes/class-wcj-price-labels.php:33
2375
  #: includes/settings/wcj-settings-price-labels.php:99
2376
  msgid "Instead of the price"
2377
  msgstr ""
2378
 
2379
- #: includes/class-wcj-price-labels.php:34
2380
  msgid "Before the price"
2381
  msgstr ""
2382
 
2383
- #: includes/class-wcj-price-labels.php:35
2384
  msgid "Between regular and sale prices"
2385
  msgstr ""
2386
 
2387
- #: includes/class-wcj-price-labels.php:36
2388
  msgid "After the price"
2389
  msgstr ""
2390
 
2391
- #: includes/class-wcj-price-labels.php:41
2392
  #: includes/class-wcj-product-info.php:235
2393
  #: includes/class-wcj-shipping-by-products.php:195
2394
  #: includes/class-wcj-shipping-options.php:121
@@ -2399,11 +2458,13 @@ msgstr ""
2399
  #: includes/settings/wcj-settings-admin-bar.php:34
2400
  #: includes/settings/wcj-settings-admin-tools.php:20
2401
  #: includes/settings/wcj-settings-admin-tools.php:27
2402
- #: includes/settings/wcj-settings-admin-tools.php:34
2403
- #: includes/settings/wcj-settings-admin-tools.php:41
2404
- #: includes/settings/wcj-settings-admin-tools.php:81
2405
- #: includes/settings/wcj-settings-admin-tools.php:88
2406
- #: includes/settings/wcj-settings-admin-tools.php:95
 
 
2407
  #: includes/settings/wcj-settings-breadcrumbs.php:20
2408
  #: includes/settings/wcj-settings-call-for-price.php:79
2409
  #: includes/settings/wcj-settings-cart-customization.php:34
@@ -2434,7 +2495,7 @@ msgstr ""
2434
  #: includes/settings/wcj-settings-currency-per-product.php:97
2435
  #: includes/settings/wcj-settings-currency-per-product.php:104
2436
  #: includes/settings/wcj-settings-currency-per-product.php:258
2437
- #: includes/settings/wcj-settings-custom-css.php:34
2438
  #: includes/settings/wcj-settings-emails-verification.php:28
2439
  #: includes/settings/wcj-settings-emails-verification.php:36
2440
  #: includes/settings/wcj-settings-general.php:22
@@ -2443,6 +2504,7 @@ msgstr ""
2443
  #: includes/settings/wcj-settings-general.php:123
2444
  #: includes/settings/wcj-settings-general.php:174
2445
  #: includes/settings/wcj-settings-global-discount.php:52
 
2446
  #: includes/settings/wcj-settings-left-to-free-shipping.php:28
2447
  #: includes/settings/wcj-settings-left-to-free-shipping.php:57
2448
  #: includes/settings/wcj-settings-left-to-free-shipping.php:91
@@ -2469,9 +2531,10 @@ msgstr ""
2469
  #: includes/settings/wcj-settings-order-quantities.php:195
2470
  #: includes/settings/wcj-settings-orders.php:32
2471
  #: includes/settings/wcj-settings-orders.php:60
2472
- #: includes/settings/wcj-settings-orders.php:79
 
2473
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:23
2474
- #: includes/settings/wcj-settings-payment-gateways-currency.php:74
2475
  #: includes/settings/wcj-settings-payment-gateways-fees.php:66
2476
  #: includes/settings/wcj-settings-payment-gateways-fees.php:82
2477
  #: includes/settings/wcj-settings-pdf-invoicing-advanced.php:55
@@ -2521,10 +2584,11 @@ msgstr ""
2521
  #: includes/settings/wcj-settings-product-by-user.php:107
2522
  #: includes/settings/wcj-settings-product-info.php:35
2523
  #: includes/settings/wcj-settings-product-info.php:68
2524
- #: includes/settings/wcj-settings-product-input-fields.php:22
2525
- #: includes/settings/wcj-settings-product-input-fields.php:52
2526
- #: includes/settings/wcj-settings-product-input-fields.php:317
2527
- #: includes/settings/wcj-settings-product-input-fields.php:335
 
2528
  #: includes/settings/wcj-settings-product-open-pricing.php:100
2529
  #: includes/settings/wcj-settings-product-open-pricing.php:107
2530
  #: includes/settings/wcj-settings-product-open-pricing.php:128
@@ -2544,7 +2608,7 @@ msgstr ""
2544
  #: includes/settings/wcj-settings-related-products.php:112
2545
  #: includes/settings/wcj-settings-related-products.php:119
2546
  #: includes/settings/wcj-settings-related-products.php:149
2547
- #: includes/settings/wcj-settings-shipping-by-condition.php:25
2548
  #: includes/settings/wcj-settings-shipping-by-order-amount.php:21
2549
  #: includes/settings/wcj-settings-shipping-calculator.php:20
2550
  #: includes/settings/wcj-settings-shipping-calculator.php:27
@@ -2581,35 +2645,35 @@ msgstr ""
2581
  msgid "Enable"
2582
  msgstr ""
2583
 
2584
- #: includes/class-wcj-price-labels.php:42
2585
  msgid "Hide on home page"
2586
  msgstr ""
2587
 
2588
- #: includes/class-wcj-price-labels.php:43
2589
  msgid "Hide on products page"
2590
  msgstr ""
2591
 
2592
- #: includes/class-wcj-price-labels.php:44
2593
  msgid "Hide on single"
2594
  msgstr ""
2595
 
2596
- #: includes/class-wcj-price-labels.php:45
2597
  msgid "Hide on all pages"
2598
  msgstr ""
2599
 
2600
- #: includes/class-wcj-price-labels.php:46
2601
  msgid "Hide on cart page only"
2602
  msgstr ""
2603
 
2604
- #: includes/class-wcj-price-labels.php:48
2605
  msgid "Hide for main price"
2606
  msgstr ""
2607
 
2608
- #: includes/class-wcj-price-labels.php:49
2609
  msgid "Hide for all variations"
2610
  msgstr ""
2611
 
2612
- #: includes/class-wcj-price-labels.php:137
2613
  msgid "Booster: Custom Price Labels"
2614
  msgstr ""
2615
 
@@ -2923,7 +2987,7 @@ msgid "Products category"
2923
  msgstr ""
2924
 
2925
  #: includes/class-wcj-product-bulk-price-converter.php:262
2926
- #: includes/shortcodes/class-wcj-shortcodes-products.php:362
2927
  msgid "Any"
2928
  msgstr ""
2929
 
@@ -3140,7 +3204,7 @@ msgstr ""
3140
 
3141
  #: includes/class-wcj-product-by-user.php:197
3142
  #: includes/class-wcj-product-tabs.php:591
3143
- #: includes/gateways/class-wc-gateway-wcj-custom.php:66
3144
  #: includes/input-fields/wcj-product-input-fields-options.php:51
3145
  #: includes/settings/wcj-settings-admin-orders-list.php:172
3146
  #: includes/settings/wcj-settings-checkout-fees.php:47
@@ -3165,7 +3229,7 @@ msgstr ""
3165
  #: includes/shortcodes/class-wcj-shortcodes-products-add-form.php:334
3166
  #: includes/widgets/class-wcj-widget-country-switcher.php:62
3167
  #: includes/widgets/class-wcj-widget-left-to-free-shipping.php:52
3168
- #: includes/widgets/class-wcj-widget-multicurrency.php:63
3169
  #: includes/widgets/class-wcj-widget-selector.php:52
3170
  msgid "Title"
3171
  msgstr ""
@@ -3181,7 +3245,7 @@ msgstr ""
3181
  #: includes/admin/class-wc-settings-jetpack.php:480
3182
  #: includes/admin/class-wc-settings-jetpack.php:492
3183
  #: includes/admin/class-wc-settings-jetpack.php:501
3184
- #: includes/functions/wcj-functions-general.php:414
3185
  msgid "Product Info"
3186
  msgstr ""
3187
 
@@ -3229,10 +3293,12 @@ msgstr ""
3229
  #: includes/settings/wcj-settings-cross-sells.php:14
3230
  #: includes/settings/wcj-settings-custom-css.php:14
3231
  #: includes/settings/wcj-settings-custom-js.php:14
 
3232
  #: includes/settings/wcj-settings-empty-cart.php:14
3233
  #: includes/settings/wcj-settings-eu-vat-number.php:15
3234
  #: includes/settings/wcj-settings-global-discount.php:19
3235
  #: includes/settings/wcj-settings-multicurrency-base-price.php:17
 
3236
  #: includes/settings/wcj-settings-payment-gateways-icons.php:14
3237
  #: includes/settings/wcj-settings-payment-gateways-per-category.php:18
3238
  #: includes/settings/wcj-settings-price-by-user-role.php:14
@@ -3622,7 +3688,7 @@ msgstr ""
3622
  #: includes/settings/wcj-settings-checkout-core-fields.php:71
3623
  #: includes/settings/wcj-settings-currency-exchange-rates.php:142
3624
  #: includes/settings/wcj-settings-order-numbers.php:46
3625
- #: includes/settings/wcj-settings-orders.php:154
3626
  #: includes/settings/wcj-settings-product-add-to-cart.php:64
3627
  #: includes/settings/meta-box/wcj-settings-meta-box-product-by-date.php:22
3628
  #: includes/settings/meta-box/wcj-settings-meta-box-product-by-time.php:19
@@ -3829,19 +3895,21 @@ msgstr ""
3829
  msgid "Customize products sale flash."
3830
  msgstr ""
3831
 
3832
- #: includes/class-wcj-sale-flash.php:55 includes/class-wcj-sale-flash.php:89
3833
  #: includes/settings/wcj-settings-sale-flash.php:29
3834
- #: includes/settings/wcj-settings-sale-flash.php:104
3835
  #: includes/settings/meta-box/wcj-settings-meta-box-sale-flash.php:26
3836
  msgid "Sale!"
3837
  msgstr ""
3838
 
3839
  #: includes/class-wcj-shipping-by-cities.php:25
3840
- msgid "Shipping Methods by Cities"
3841
  msgstr ""
3842
 
3843
  #: includes/class-wcj-shipping-by-cities.php:26
3844
- msgid "Set cities to include/exclude for shipping methods to show up."
 
 
3845
  msgstr ""
3846
 
3847
  #: includes/class-wcj-shipping-by-cities.php:31
@@ -3852,6 +3920,22 @@ msgstr ""
3852
  msgid "Otherwise enter cities one per line."
3853
  msgstr ""
3854
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3855
  #: includes/class-wcj-shipping-by-order-amount.php:26
3856
  #: includes/settings/wcj-settings-shipping-by-order-amount.php:33
3857
  msgid "Shipping Methods by Min/Max Order Amount"
@@ -3940,7 +4024,7 @@ msgstr ""
3940
 
3941
  #: includes/class-wcj-shipping-by-products.php:205
3942
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:25
3943
- #: includes/settings/wcj-settings-shipping-by-condition.php:27
3944
  #: includes/settings/wcj-settings-shipping-by-order-amount.php:23
3945
  #: includes/settings/wcj-settings-shipping-description.php:61
3946
  #: includes/settings/wcj-settings-shipping-icons.php:63
@@ -3949,6 +4033,56 @@ msgstr ""
3949
  msgid "Save changes after enabling this option."
3950
  msgstr ""
3951
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3952
  #: includes/class-wcj-shipping-by-user-role.php:25
3953
  msgid "Shipping Methods by Users"
3954
  msgstr ""
@@ -4379,7 +4513,7 @@ msgstr ""
4379
  #: includes/admin/class-wc-settings-jetpack.php:380
4380
  #: includes/admin/class-wcj-tools.php:73
4381
  #: includes/export/class-wcj-fields-helper.php:293
4382
- #: includes/gateways/class-wc-gateway-wcj-custom.php:74
4383
  #: includes/settings/wcj-settings-checkout-custom-fields.php:172
4384
  #: includes/settings/wcj-settings-eu-vat-number.php:34
4385
  #: includes/settings/wcj-settings-product-by-user.php:13
@@ -4553,6 +4687,7 @@ msgstr ""
4553
  #: includes/settings/wcj-settings-payment-gateways-by-currency.php:14
4554
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:37
4555
  #: includes/settings/wcj-settings-payment-gateways-by-user-role.php:14
 
4556
  #: includes/settings/wcj-settings-payment-gateways-min-max.php:65
4557
  #: includes/settings/wcj-settings-reports.php:118
4558
  msgid "Payment Gateways"
@@ -4574,19 +4709,19 @@ msgid ""
4574
  "Methods and more."
4575
  msgstr ""
4576
 
4577
- #: includes/admin/wcj-modules-cats.php:160
4578
  msgid "PDF Invoicing & Packing Slips"
4579
  msgstr ""
4580
 
4581
- #: includes/admin/wcj-modules-cats.php:161
4582
  msgid "PDF Documents"
4583
  msgstr ""
4584
 
4585
- #: includes/admin/wcj-modules-cats.php:177
4586
  msgid "Emails & Misc."
4587
  msgstr ""
4588
 
4589
- #: includes/admin/wcj-modules-cats.php:178
4590
  msgid "Emails, Reports, Export, Admin Tools, General Options and more."
4591
  msgstr ""
4592
 
@@ -4604,7 +4739,7 @@ msgstr ""
4604
  msgid "Invisible"
4605
  msgstr ""
4606
 
4607
- #: includes/classes/class-wcj-module.php:125
4608
  #, php-format
4609
  msgid ""
4610
  "Booster: Free plugin's version is limited to only one \"%1$s\" product with "
@@ -4613,30 +4748,30 @@ msgid ""
4613
  "\"%1$s\" products."
4614
  msgstr ""
4615
 
4616
- #: includes/classes/class-wcj-module.php:440
4617
  #, php-format
4618
  msgid "Selected: %s."
4619
  msgstr ""
4620
 
4621
- #: includes/classes/class-wcj-module.php:519
4622
  msgid "Back to Module Settings"
4623
  msgstr ""
4624
 
4625
- #: includes/classes/class-wcj-module.php:537
4626
  #: includes/settings/wcj-settings-wpml.php:79
4627
  msgid "Module Tools"
4628
  msgstr ""
4629
 
4630
- #: includes/classes/class-wcj-module.php:610
4631
  #: includes/settings/wcj-settings-checkout-core-fields.php:64
4632
  msgid "enabled"
4633
  msgstr ""
4634
 
4635
- #: includes/classes/class-wcj-module.php:611
4636
  msgid "disabled"
4637
  msgstr ""
4638
 
4639
- #: includes/classes/class-wcj-module.php:619
4640
  #: includes/settings/wcj-settings-product-tabs.php:172
4641
  #: includes/settings/wcj-settings-product-tabs.php:184
4642
  #: includes/settings/wcj-settings-product-tabs.php:196
@@ -4644,27 +4779,27 @@ msgstr ""
4644
  msgid "Deprecated"
4645
  msgstr ""
4646
 
4647
- #: includes/classes/class-wcj-module.php:657
4648
  msgid "Reset Settings"
4649
  msgstr ""
4650
 
4651
- #: includes/classes/class-wcj-module.php:663
4652
  msgid "Reset Module to Default Settings"
4653
  msgstr ""
4654
 
4655
- #: includes/classes/class-wcj-module.php:664
4656
  msgid "Reset Submodule to Default Settings"
4657
  msgstr ""
4658
 
4659
- #: includes/classes/class-wcj-module.php:668
4660
  msgid "Reset settings"
4661
  msgstr ""
4662
 
4663
- #: includes/classes/class-wcj-module.php:702
4664
  msgid "Module Options"
4665
  msgstr ""
4666
 
4667
- #: includes/classes/class-wcj-module.php:709
4668
  msgid "Enable Module"
4669
  msgstr ""
4670
 
@@ -4673,14 +4808,14 @@ msgstr ""
4673
  msgid "Company Name"
4674
  msgstr ""
4675
 
4676
- #: includes/classes/class-wcj-pdf-invoice.php:257
4677
- #: includes/functions/wcj-functions-general.php:111
4678
  #: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:245
4679
  msgid "Unexpected error"
4680
  msgstr ""
4681
 
4682
  #: includes/classes/class-wcj-shortcodes.php:109
4683
- #: includes/shortcodes/class-wcj-shortcodes-general.php:495
4684
  #, php-format
4685
  msgid "\"%s\" module is not enabled!"
4686
  msgstr ""
@@ -4755,7 +4890,7 @@ msgid "Order status %s to %s"
4755
  msgstr ""
4756
 
4757
  #: includes/emails/class-wc-email-wcj-custom.php:229
4758
- #: includes/gateways/class-wc-gateway-wcj-custom.php:59
4759
  #: includes/settings/wcj-settings-admin-products-list.php:19
4760
  #: includes/settings/wcj-settings-admin-products-list.php:75
4761
  #: includes/settings/wcj-settings-checkout-custom-fields.php:121
@@ -5008,7 +5143,7 @@ msgstr ""
5008
 
5009
  #: includes/export/class-wcj-fields-helper.php:80
5010
  #: includes/export/class-wcj-fields-helper.php:295
5011
- #: includes/gateways/class-wc-gateway-wcj-custom.php:161
5012
  msgid "URL"
5013
  msgstr ""
5014
 
@@ -5240,7 +5375,7 @@ msgstr ""
5240
  #: includes/settings/meta-box/wcj-settings-meta-box-product-addons.php:45
5241
  #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:152
5242
  #: includes/shipping/class-wc-shipping-wcj-custom.php:114
5243
- #: includes/widgets/class-wcj-widget-multicurrency.php:70
5244
  msgid "Type"
5245
  msgstr ""
5246
 
@@ -6519,92 +6654,92 @@ msgstr ""
6519
  msgid "CoinMarketCap"
6520
  msgstr ""
6521
 
6522
- #: includes/functions/wcj-functions-general.php:617
6523
  #: includes/settings/wcj-settings-cross-sells.php:73
6524
  #: includes/settings/wcj-settings-empty-cart.php:47
6525
  msgid "Before cart"
6526
  msgstr ""
6527
 
6528
- #: includes/functions/wcj-functions-general.php:618
6529
  msgid "Before cart table"
6530
  msgstr ""
6531
 
6532
- #: includes/functions/wcj-functions-general.php:619
6533
  msgid "Before cart contents"
6534
  msgstr ""
6535
 
6536
- #: includes/functions/wcj-functions-general.php:620
6537
  msgid "Cart contents"
6538
  msgstr ""
6539
 
6540
- #: includes/functions/wcj-functions-general.php:621
6541
  msgid "Cart coupon"
6542
  msgstr ""
6543
 
6544
- #: includes/functions/wcj-functions-general.php:622
6545
  msgid "Cart actions"
6546
  msgstr ""
6547
 
6548
- #: includes/functions/wcj-functions-general.php:623
6549
  msgid "After cart contents"
6550
  msgstr ""
6551
 
6552
- #: includes/functions/wcj-functions-general.php:624
6553
  msgid "After cart table"
6554
  msgstr ""
6555
 
6556
- #: includes/functions/wcj-functions-general.php:625
6557
  #: includes/settings/wcj-settings-cross-sells.php:74
6558
  msgid "Cart collaterals"
6559
  msgstr ""
6560
 
6561
- #: includes/functions/wcj-functions-general.php:626
6562
  #: includes/settings/wcj-settings-cross-sells.php:75
6563
  #: includes/settings/wcj-settings-empty-cart.php:56
6564
  msgid "After cart"
6565
  msgstr ""
6566
 
6567
- #: includes/functions/wcj-functions-general.php:628
6568
  msgid "Before cart totals"
6569
  msgstr ""
6570
 
6571
- #: includes/functions/wcj-functions-general.php:629
6572
  #: includes/settings/wcj-settings-empty-cart.php:49
6573
  msgid "Cart totals: Before shipping"
6574
  msgstr ""
6575
 
6576
- #: includes/functions/wcj-functions-general.php:630
6577
  #: includes/settings/wcj-settings-empty-cart.php:50
6578
  msgid "Cart totals: After shipping"
6579
  msgstr ""
6580
 
6581
- #: includes/functions/wcj-functions-general.php:631
6582
  #: includes/settings/wcj-settings-empty-cart.php:51
6583
  msgid "Cart totals: Before order total"
6584
  msgstr ""
6585
 
6586
- #: includes/functions/wcj-functions-general.php:632
6587
  #: includes/settings/wcj-settings-empty-cart.php:52
6588
  msgid "Cart totals: After order total"
6589
  msgstr ""
6590
 
6591
- #: includes/functions/wcj-functions-general.php:633
6592
  msgid "Proceed to checkout"
6593
  msgstr ""
6594
 
6595
- #: includes/functions/wcj-functions-general.php:634
6596
  msgid "After cart totals"
6597
  msgstr ""
6598
 
6599
- #: includes/functions/wcj-functions-general.php:636
6600
  msgid "Before shipping calculator"
6601
  msgstr ""
6602
 
6603
- #: includes/functions/wcj-functions-general.php:637
6604
  msgid "After shipping calculator"
6605
  msgstr ""
6606
 
6607
- #: includes/functions/wcj-functions-general.php:639
6608
  msgid "If cart is empty"
6609
  msgstr ""
6610
 
@@ -6726,139 +6861,139 @@ msgstr ""
6726
  msgid "You have Free delivery"
6727
  msgstr ""
6728
 
6729
- #: includes/gateways/class-wc-gateway-wcj-custom.php:61
6730
  msgid "Enable Custom Payment"
6731
  msgstr ""
6732
 
6733
- #: includes/gateways/class-wc-gateway-wcj-custom.php:68
6734
  #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:146
6735
  #: includes/shipping/class-wc-shipping-wcj-custom.php:109
6736
  msgid "This controls the title which the user sees during checkout."
6737
  msgstr ""
6738
 
6739
- #: includes/gateways/class-wc-gateway-wcj-custom.php:69
6740
  msgid "Custom Payment"
6741
  msgstr ""
6742
 
6743
- #: includes/gateways/class-wc-gateway-wcj-custom.php:76
6744
  msgid "Payment method description that the customer will see on your checkout."
6745
  msgstr ""
6746
 
6747
- #: includes/gateways/class-wc-gateway-wcj-custom.php:77
6748
  msgid "You can add input fields with [wcj_input_field] shortcode."
6749
  msgstr ""
6750
 
6751
- #: includes/gateways/class-wc-gateway-wcj-custom.php:78
6752
  msgid "Custom Payment Description."
6753
  msgstr ""
6754
 
6755
- #: includes/gateways/class-wc-gateway-wcj-custom.php:83
6756
  msgid "Instructions"
6757
  msgstr ""
6758
 
6759
- #: includes/gateways/class-wc-gateway-wcj-custom.php:85
6760
  msgid "Instructions that will be added to the thank you page."
6761
  msgstr ""
6762
 
6763
- #: includes/gateways/class-wc-gateway-wcj-custom.php:91
6764
  msgid "Email Instructions"
6765
  msgstr ""
6766
 
6767
- #: includes/gateways/class-wc-gateway-wcj-custom.php:93
6768
  msgid "Instructions that will be added to the emails."
6769
  msgstr ""
6770
 
6771
- #: includes/gateways/class-wc-gateway-wcj-custom.php:99
6772
  msgid "Icon"
6773
  msgstr ""
6774
 
6775
- #: includes/gateways/class-wc-gateway-wcj-custom.php:101
6776
  #: includes/settings/wcj-settings-payment-gateways-icons.php:16
6777
  msgid ""
6778
  "If you want to show an image next to the gateway's name on the frontend, "
6779
  "enter a URL to an image."
6780
  msgstr ""
6781
 
6782
- #: includes/gateways/class-wc-gateway-wcj-custom.php:108
6783
  #: includes/settings/wcj-settings-shipping-by-order-amount.php:57
6784
  msgid "Minimum order amount"
6785
  msgstr ""
6786
 
6787
- #: includes/gateways/class-wc-gateway-wcj-custom.php:110
6788
  msgid ""
6789
  "If you want to set minimum order amount (excluding fees) to show this "
6790
  "gateway on frontend, enter a number here. Set to 0 to disable."
6791
  msgstr ""
6792
 
6793
- #: includes/gateways/class-wc-gateway-wcj-custom.php:117
6794
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:59
6795
  msgid "Enable for shipping methods"
6796
  msgstr ""
6797
 
6798
- #: includes/gateways/class-wc-gateway-wcj-custom.php:122
6799
  msgid ""
6800
  "If gateway is only available for certain shipping methods, set it up here. "
6801
  "Leave blank to enable for all methods."
6802
  msgstr ""
6803
 
6804
- #: includes/gateways/class-wc-gateway-wcj-custom.php:125
6805
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:66
6806
  msgid "Select shipping methods"
6807
  msgstr ""
6808
 
6809
- #: includes/gateways/class-wc-gateway-wcj-custom.php:129
6810
  msgid "Enable for virtual orders"
6811
  msgstr ""
6812
 
6813
- #: includes/gateways/class-wc-gateway-wcj-custom.php:130
6814
  msgid "Enable gateway if the order is virtual"
6815
  msgstr ""
6816
 
6817
- #: includes/gateways/class-wc-gateway-wcj-custom.php:136
6818
  #: includes/settings/wcj-settings-order-custom-statuses.php:19
6819
  msgid "Default Order Status"
6820
  msgstr ""
6821
 
6822
- #: includes/gateways/class-wc-gateway-wcj-custom.php:137
6823
  msgid "Enable Custom Statuses feature to add custom statuses to the list."
6824
  msgstr ""
6825
 
6826
- #: includes/gateways/class-wc-gateway-wcj-custom.php:144
6827
  msgid "Send Additional Emails"
6828
  msgstr ""
6829
 
6830
- #: includes/gateways/class-wc-gateway-wcj-custom.php:145
6831
  msgid "Send to Admin"
6832
  msgstr ""
6833
 
6834
- #: includes/gateways/class-wc-gateway-wcj-custom.php:153
6835
  msgid "Send to Customer"
6836
  msgstr ""
6837
 
6838
- #: includes/gateways/class-wc-gateway-wcj-custom.php:154
6839
  msgid ""
6840
  "This may help if you are using pending or custom default status and not "
6841
  "getting new order emails."
6842
  msgstr ""
6843
 
6844
- #: includes/gateways/class-wc-gateway-wcj-custom.php:160
6845
  msgid "Custom Return URL (Thank You Page)"
6846
  msgstr ""
6847
 
6848
- #: includes/gateways/class-wc-gateway-wcj-custom.php:162
6849
  msgid "Enter full URL with http(s)."
6850
  msgstr ""
6851
 
6852
- #: includes/gateways/class-wc-gateway-wcj-custom.php:163
6853
  msgid "Optional. Leave blank to use default URL."
6854
  msgstr ""
6855
 
6856
- #: includes/gateways/class-wc-gateway-wcj-custom.php:355
6857
  #: includes/settings/wcj-settings-payment-gateways.php:38
6858
  msgid "Custom Gateway"
6859
  msgstr ""
6860
 
6861
- #: includes/gateways/class-wc-gateway-wcj-custom.php:356
6862
  msgid "Booster for WooCommerce: Custom Payment Gateway"
6863
  msgstr ""
6864
 
@@ -6872,7 +7007,7 @@ msgstr ""
6872
 
6873
  #: includes/input-fields/class-wcj-product-input-fields-core.php:167
6874
  #: includes/input-fields/class-wcj-product-input-fields-core.php:322
6875
- #: includes/settings/wcj-settings-product-input-fields.php:83
6876
  msgid "Product Input Field"
6877
  msgstr ""
6878
 
@@ -6884,7 +7019,7 @@ msgstr ""
6884
  msgid "File is too big!"
6885
  msgstr ""
6886
 
6887
- #: includes/input-fields/class-wcj-product-input-fields-core.php:632
6888
  msgid "Select a country&hellip;"
6889
  msgstr ""
6890
 
@@ -7302,7 +7437,7 @@ msgstr ""
7302
  msgid ""
7303
  "This option is disabled with \"Disable Saving PDFs in PHP directory for "
7304
  "temporary files\" checkbox in <a href=\"%s\" target=\"_blank\">WooCommerce > "
7305
- "Settings > Booster > Emails & Misc. > General > Advanced Options</a>."
7306
  msgstr ""
7307
 
7308
  #: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:80
@@ -7446,10 +7581,14 @@ msgid ""
7446
  msgstr ""
7447
 
7448
  #: includes/pdf-invoices/submodules/class-wcj-pdf-invoicing-footer.php:21
 
 
7449
  msgid "Footer"
7450
  msgstr ""
7451
 
7452
  #: includes/pdf-invoices/submodules/class-wcj-pdf-invoicing-header.php:23
 
 
7453
  msgid "Header"
7454
  msgstr ""
7455
 
@@ -7822,14 +7961,14 @@ msgstr ""
7822
  #: includes/settings/wcj-settings-order-quantities.php:79
7823
  #: includes/settings/wcj-settings-order-quantities.php:180
7824
  #: includes/settings/wcj-settings-order-quantities.php:213
7825
- #: includes/settings/wcj-settings-orders.php:124
7826
  #: includes/settings/wcj-settings-price-formats.php:37
7827
  #: includes/settings/wcj-settings-product-add-to-cart.php:273
7828
  #: includes/settings/wcj-settings-product-listings.php:138
7829
  #: includes/settings/wcj-settings-sale-flash.php:20
7830
  #: includes/settings/wcj-settings-sale-flash.php:65
7831
  #: includes/settings/wcj-settings-sale-flash.php:90
7832
- #: includes/settings/wcj-settings-shipping-by-condition.php:47
7833
  #: includes/settings/wcj-settings-shipping-options.php:21
7834
  #: includes/settings/wcj-settings-stock.php:20
7835
  #: includes/settings/wcj-settings-stock.php:87
@@ -8356,24 +8495,39 @@ msgstr ""
8356
  msgid "Show Booster Menus Only to Admin"
8357
  msgstr ""
8358
 
8359
- #: includes/settings/wcj-settings-admin-tools.php:33
8360
- msgid "WooCommerce Log"
8361
  msgstr ""
8362
 
8363
- #: includes/settings/wcj-settings-admin-tools.php:40
8364
- msgid "Debug"
 
 
 
 
 
 
 
 
 
 
 
8365
  msgstr ""
8366
 
8367
- #: includes/settings/wcj-settings-admin-tools.php:47
 
 
 
 
8368
  msgid "PHP Memory Limit"
8369
  msgstr ""
8370
 
8371
- #: includes/settings/wcj-settings-admin-tools.php:48
8372
  msgid "megabytes."
8373
  msgstr ""
8374
 
8375
- #: includes/settings/wcj-settings-admin-tools.php:49
8376
- #: includes/settings/wcj-settings-admin-tools.php:58
8377
  #: includes/settings/wcj-settings-offer-price.php:172
8378
  #: includes/settings/wcj-settings-offer-price.php:180
8379
  #: includes/settings/meta-box/wcj-settings-meta-box-offer-price.php:43
@@ -8381,30 +8535,42 @@ msgstr ""
8381
  msgid "Set zero to disable."
8382
  msgstr ""
8383
 
8384
- #: includes/settings/wcj-settings-admin-tools.php:56
8385
  msgid "PHP Time Limit"
8386
  msgstr ""
8387
 
8388
- #: includes/settings/wcj-settings-admin-tools.php:57
8389
  msgid "seconds."
8390
  msgstr ""
8391
 
8392
- #: includes/settings/wcj-settings-admin-tools.php:73
8393
- msgid "System Info"
8394
- msgstr ""
8395
-
8396
- #: includes/settings/wcj-settings-admin-tools.php:80
8397
  msgid "Show Order Meta"
8398
  msgstr ""
8399
 
8400
- #: includes/settings/wcj-settings-admin-tools.php:87
8401
  msgid "Show Product Meta"
8402
  msgstr ""
8403
 
8404
- #: includes/settings/wcj-settings-admin-tools.php:94
8405
  msgid "Show Variable Product Pricing Table"
8406
  msgstr ""
8407
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8408
  #: includes/settings/wcj-settings-breadcrumbs.php:19
8409
  msgid "Change Breadcrumbs Home URL"
8410
  msgstr ""
@@ -8572,7 +8738,7 @@ msgstr ""
8572
  #: includes/settings/wcj-settings-payment-gateways-min-max.php:15
8573
  #: includes/settings/wcj-settings-price-formats.php:15
8574
  #: includes/settings/wcj-settings-product-tabs.php:15
8575
- #: includes/settings/wcj-settings-shipping-by-condition.php:19
8576
  #: includes/settings/wcj-settings-shipping-by-order-amount.php:15
8577
  #: includes/settings/wcj-settings-shipping-time.php:25
8578
  #: includes/settings/wcj-settings-wpml.php:22
@@ -8758,7 +8924,7 @@ msgid "Custom Fields Number"
8758
  msgstr ""
8759
 
8760
  #: includes/settings/wcj-settings-checkout-custom-fields.php:96
8761
- #: includes/settings/wcj-settings-product-input-fields.php:60
8762
  msgid "Click Save changes after you change this number."
8763
  msgstr ""
8764
 
@@ -8787,6 +8953,7 @@ msgstr ""
8787
 
8788
  #: includes/settings/wcj-settings-checkout-custom-fields.php:199
8789
  #: includes/settings/wcj-settings-eu-vat-number.php:63
 
8790
  msgid "Class"
8791
  msgstr ""
8792
 
@@ -9205,7 +9372,7 @@ msgstr ""
9205
  #: includes/settings/wcj-settings-my-account.php:143
9206
  #: includes/settings/wcj-settings-my-account.php:203
9207
  #: includes/settings/wcj-settings-sale-flash.php:27
9208
- #: includes/settings/wcj-settings-sale-flash.php:102
9209
  #: includes/settings/meta-box/wcj-settings-meta-box-add-to-cart-button-visibility.php:30
9210
  #: includes/settings/meta-box/wcj-settings-meta-box-add-to-cart-button-visibility.php:49
9211
  msgid "You can use HTML and/or shortcodes here."
@@ -9421,24 +9588,24 @@ msgid "Add notice"
9421
  msgstr ""
9422
 
9423
  #: includes/settings/wcj-settings-checkout-files-upload.php:250
9424
- #: includes/settings/wcj-settings-product-input-fields.php:286
9425
  msgid "Emails Options"
9426
  msgstr ""
9427
 
9428
  #: includes/settings/wcj-settings-checkout-files-upload.php:255
9429
- #: includes/settings/wcj-settings-product-input-fields.php:291
9430
  msgid "Attach Files to Admin's New Order Emails"
9431
  msgstr ""
9432
 
9433
  #: includes/settings/wcj-settings-checkout-files-upload.php:256
9434
  #: includes/settings/wcj-settings-checkout-files-upload.php:263
9435
- #: includes/settings/wcj-settings-product-input-fields.php:292
9436
- #: includes/settings/wcj-settings-product-input-fields.php:299
9437
  msgid "Attach"
9438
  msgstr ""
9439
 
9440
  #: includes/settings/wcj-settings-checkout-files-upload.php:262
9441
- #: includes/settings/wcj-settings-product-input-fields.php:298
9442
  msgid "Attach Files to Customer's Processing Order Emails"
9443
  msgstr ""
9444
 
@@ -9470,8 +9637,8 @@ msgstr ""
9470
  #: includes/settings/wcj-settings-checkout-files-upload.php:298
9471
  #: includes/settings/wcj-settings-checkout-files-upload.php:352
9472
  #: includes/settings/wcj-settings-checkout-files-upload.php:393
9473
- #: includes/settings/wcj-settings-product-addons.php:322
9474
- #: includes/settings/wcj-settings-product-addons.php:353
9475
  msgid "Before"
9476
  msgstr ""
9477
 
@@ -9493,8 +9660,8 @@ msgstr ""
9493
  #: includes/settings/wcj-settings-checkout-files-upload.php:321
9494
  #: includes/settings/wcj-settings-checkout-files-upload.php:367
9495
  #: includes/settings/wcj-settings-checkout-files-upload.php:408
9496
- #: includes/settings/wcj-settings-product-addons.php:337
9497
- #: includes/settings/wcj-settings-product-addons.php:368
9498
  msgid "After"
9499
  msgstr ""
9500
 
@@ -9534,8 +9701,8 @@ msgstr ""
9534
  #: includes/settings/wcj-settings-pdf-invoicing-advanced.php:43
9535
  #: includes/settings/wcj-settings-product-by-date.php:117
9536
  #: includes/settings/wcj-settings-product-custom-info.php:186
9537
- #: includes/settings/wcj-settings-product-input-fields.php:329
9538
- #: includes/settings/wcj-settings-shipping-by-condition.php:105
9539
  msgid "Advanced Options"
9540
  msgstr ""
9541
 
@@ -9747,7 +9914,7 @@ msgid "No changes (default)"
9747
  msgstr ""
9748
 
9749
  #: includes/settings/wcj-settings-cross-sells.php:79
9750
- #: includes/settings/wcj-settings-product-input-fields.php:199
9751
  #: includes/settings/wcj-settings-upsells.php:66
9752
  msgid "Position priority"
9753
  msgstr ""
@@ -9826,7 +9993,7 @@ msgstr ""
9826
  #: includes/settings/wcj-settings-currency-per-product.php:119
9827
  #: includes/settings/wcj-settings-multicurrency-base-price.php:22
9828
  #: includes/settings/wcj-settings-multicurrency.php:22
9829
- #: includes/settings/wcj-settings-payment-gateways-currency.php:57
9830
  #: includes/settings/wcj-settings-price-by-country.php:282
9831
  msgid "Exchange Rates Updates"
9832
  msgstr ""
@@ -10005,7 +10172,7 @@ msgstr ""
10005
  #: includes/settings/wcj-settings-currency-per-product.php:124
10006
  #: includes/settings/wcj-settings-multicurrency-base-price.php:27
10007
  #: includes/settings/wcj-settings-multicurrency.php:28
10008
- #: includes/settings/wcj-settings-payment-gateways-currency.php:62
10009
  #: includes/settings/wcj-settings-price-by-country.php:287
10010
  msgid "Enter Rates Manually"
10011
  msgstr ""
@@ -10013,7 +10180,7 @@ msgstr ""
10013
  #: includes/settings/wcj-settings-currency-per-product.php:125
10014
  #: includes/settings/wcj-settings-multicurrency-base-price.php:28
10015
  #: includes/settings/wcj-settings-multicurrency.php:29
10016
- #: includes/settings/wcj-settings-payment-gateways-currency.php:63
10017
  #: includes/settings/wcj-settings-price-by-country.php:288
10018
  msgid "Automatically via Currency Exchange Rates module"
10019
  msgstr ""
@@ -10021,7 +10188,7 @@ msgstr ""
10021
  #: includes/settings/wcj-settings-currency-per-product.php:128
10022
  #: includes/settings/wcj-settings-multicurrency-base-price.php:31
10023
  #: includes/settings/wcj-settings-multicurrency.php:32
10024
- #: includes/settings/wcj-settings-payment-gateways-currency.php:66
10025
  #: includes/settings/wcj-settings-price-by-country.php:291
10026
  msgid "Visit"
10027
  msgstr ""
@@ -10029,7 +10196,7 @@ msgstr ""
10029
  #: includes/settings/wcj-settings-currency-per-product.php:128
10030
  #: includes/settings/wcj-settings-multicurrency-base-price.php:31
10031
  #: includes/settings/wcj-settings-multicurrency.php:32
10032
- #: includes/settings/wcj-settings-payment-gateways-currency.php:68
10033
  #: includes/settings/wcj-settings-price-by-country.php:291
10034
  msgid "Currency Exchange Rates module"
10035
  msgstr ""
@@ -10107,23 +10274,28 @@ msgid "Currency Symbol"
10107
  msgstr ""
10108
 
10109
  #: includes/settings/wcj-settings-custom-css.php:19
 
 
 
 
 
10110
  msgid "Custom CSS - Front end (Customers)"
10111
  msgstr ""
10112
 
10113
- #: includes/settings/wcj-settings-custom-css.php:26
10114
  msgid "Custom CSS - Back end (Admin)"
10115
  msgstr ""
10116
 
10117
- #: includes/settings/wcj-settings-custom-css.php:33
10118
  msgid "Custom CSS on per Product Basis"
10119
  msgstr ""
10120
 
10121
- #: includes/settings/wcj-settings-custom-css.php:35
10122
  msgid ""
10123
  "Set product specific CSS to be loaded only on specific product's single page."
10124
  msgstr ""
10125
 
10126
- #: includes/settings/wcj-settings-custom-css.php:36
10127
  #: includes/settings/wcj-settings-order-quantities.php:54
10128
  #: includes/settings/wcj-settings-order-quantities.php:112
10129
  #: includes/settings/wcj-settings-order-quantities.php:196
@@ -10131,18 +10303,28 @@ msgstr ""
10131
  msgid "This will add meta box to each product's edit page."
10132
  msgstr ""
10133
 
10134
- #: includes/settings/wcj-settings-custom-css.php:42
10135
  msgid "Custom CSS on per Product Basis - Default Field Value"
10136
  msgstr ""
10137
 
10138
- #: includes/settings/wcj-settings-custom-js.php:19
10139
  msgid "Custom JS - Front end (Customers)"
10140
  msgstr ""
10141
 
10142
- #: includes/settings/wcj-settings-custom-js.php:26
10143
  msgid "Custom JS - Back end (Admin)"
10144
  msgstr ""
10145
 
 
 
 
 
 
 
 
 
 
 
10146
  #: includes/settings/wcj-settings-email-options.php:14
10147
  msgid "Product Info in Item Name"
10148
  msgstr ""
@@ -10872,11 +11054,21 @@ msgid "Advanced Settings"
10872
  msgstr ""
10873
 
10874
  #: includes/settings/wcj-settings-global-discount.php:180
 
 
 
 
 
 
 
 
 
 
10875
  #: includes/settings/wcj-settings-product-price-by-formula.php:92
10876
  msgid "Price Filters Priority"
10877
  msgstr ""
10878
 
10879
- #: includes/settings/wcj-settings-global-discount.php:181
10880
  #: includes/settings/wcj-settings-multicurrency-base-price.php:68
10881
  #: includes/settings/wcj-settings-multicurrency.php:112
10882
  #: includes/settings/wcj-settings-price-by-country.php:157
@@ -11181,12 +11373,6 @@ msgid ""
11181
  "Add additional price filters here. One per line. Leave blank if not sure."
11182
  msgstr ""
11183
 
11184
- #: includes/settings/wcj-settings-multicurrency.php:104
11185
- #: includes/settings/wcj-settings-offer-price.php:73
11186
- #, php-format
11187
- msgid "E.g.: %s"
11188
- msgstr ""
11189
-
11190
  #: includes/settings/wcj-settings-multicurrency.php:124
11191
  msgid ""
11192
  "One currency probably should be set to current (original) shop currency with "
@@ -11773,6 +11959,16 @@ msgstr ""
11773
  msgid "Enable this if you want the statuses in Status column to have colors."
11774
  msgstr ""
11775
 
 
 
 
 
 
 
 
 
 
 
11776
  #: includes/settings/wcj-settings-order-min-amount.php:16
11777
  msgid "This section lets you set minimum order amount."
11778
  msgstr ""
@@ -12180,76 +12376,92 @@ msgid "Metabox will contain \"Previous order\" and \"Next order\" links."
12180
  msgstr ""
12181
 
12182
  #: includes/settings/wcj-settings-orders.php:72
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12183
  msgid "Orders Auto-Complete"
12184
  msgstr ""
12185
 
12186
- #: includes/settings/wcj-settings-orders.php:74
12187
  msgid "This section lets you enable orders auto-complete function."
12188
  msgstr ""
12189
 
12190
- #: includes/settings/wcj-settings-orders.php:78
12191
  msgid "Auto-complete all WooCommerce orders"
12192
  msgstr ""
12193
 
12194
- #: includes/settings/wcj-settings-orders.php:80
12195
  msgid ""
12196
  "E.g. if you sell digital products then you are not shipping anything and you "
12197
  "may want auto-complete all your orders."
12198
  msgstr ""
12199
 
12200
- #: includes/settings/wcj-settings-orders.php:87
12201
  msgid ""
12202
  "Fill this, if you want orders to be auto-completed for selected payment "
12203
  "methods only. Leave blank to auto-complete all orders."
12204
  msgstr ""
12205
 
12206
- #: includes/settings/wcj-settings-orders.php:105
12207
  msgid "Add Country by IP Meta Box"
12208
  msgstr ""
12209
 
12210
- #: includes/settings/wcj-settings-orders.php:107
12211
  msgid ""
12212
  "When enabled this will add \"Booster: Country by IP\" metabox to each "
12213
  "order's edit page."
12214
  msgstr ""
12215
 
12216
- #: includes/settings/wcj-settings-orders.php:117
12217
  msgid "Bulk Regenerate Download Permissions for Orders"
12218
  msgstr ""
12219
 
12220
- #: includes/settings/wcj-settings-orders.php:122
12221
  msgid "Bulk Regenerate Download Permissions"
12222
  msgstr ""
12223
 
12224
- #: includes/settings/wcj-settings-orders.php:131
12225
  msgid "Bulk Actions"
12226
  msgstr ""
12227
 
12228
- #: includes/settings/wcj-settings-orders.php:132
12229
  msgid ""
12230
  "When enabled this will add \"Regenerate download permissions\" action to "
12231
  "\"Bulk Actions\" select box on admin orders page."
12232
  msgstr ""
12233
 
12234
- #: includes/settings/wcj-settings-orders.php:140
12235
  msgid "All Orders - Now"
12236
  msgstr ""
12237
 
12238
- #: includes/settings/wcj-settings-orders.php:141
12239
  msgid ""
12240
  "Check this box and press \"Save changes\" button to start regeneration. "
12241
  "Please note that both module and current section must be enabled before that."
12242
  msgstr ""
12243
 
12244
- #: includes/settings/wcj-settings-orders.php:142
12245
  msgid "Regenerate now"
12246
  msgstr ""
12247
 
12248
- #: includes/settings/wcj-settings-orders.php:149
12249
  msgid "All Orders - Periodically"
12250
  msgstr ""
12251
 
12252
- #: includes/settings/wcj-settings-orders.php:155
12253
  msgid "Regenerate"
12254
  msgstr ""
12255
 
@@ -12289,20 +12501,13 @@ msgstr ""
12289
  msgid "Include Postcodes (one per line)"
12290
  msgstr ""
12291
 
12292
- #: includes/settings/wcj-settings-payment-gateways-by-country.php:121
12293
- #: includes/settings/wcj-settings-payment-gateways-by-country.php:131
12294
- msgid ""
12295
- "Postcodes containing wildcards (e.g. CB23*) and fully numeric ranges (e.g. "
12296
- "<code>90210...99000</code>) are also supported."
12297
- msgstr ""
12298
-
12299
  #: includes/settings/wcj-settings-payment-gateways-by-country.php:130
12300
  msgid "Exclude Postcodes (one per line)"
12301
  msgstr ""
12302
 
12303
  #: includes/settings/wcj-settings-payment-gateways-by-currency.php:16
12304
  #: includes/settings/wcj-settings-payment-gateways-by-user-role.php:16
12305
- #: includes/settings/wcj-settings-shipping-by-condition.php:42
12306
  msgid "Leave empty to disable."
12307
  msgstr ""
12308
 
@@ -12320,7 +12525,7 @@ msgid "Denied Currencies"
12320
  msgstr ""
12321
 
12322
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:22
12323
- #: includes/settings/wcj-settings-shipping-by-condition.php:24
12324
  #: includes/settings/wcj-settings-shipping-by-order-amount.php:20
12325
  #: includes/settings/wcj-settings-shipping-description.php:58
12326
  #: includes/settings/wcj-settings-shipping-icons.php:60
@@ -12329,7 +12534,7 @@ msgid "Use Shipping Instances"
12329
  msgstr ""
12330
 
12331
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:24
12332
- #: includes/settings/wcj-settings-shipping-by-condition.php:26
12333
  #: includes/settings/wcj-settings-shipping-by-order-amount.php:22
12334
  #: includes/settings/wcj-settings-shipping-description.php:60
12335
  #: includes/settings/wcj-settings-shipping-icons.php:62
@@ -12361,19 +12566,29 @@ msgstr ""
12361
  msgid "Exclude User Roles"
12362
  msgstr ""
12363
 
12364
- #: includes/settings/wcj-settings-payment-gateways-currency.php:15
12365
- msgid "Payment Gateways Currency Options"
12366
- msgstr ""
12367
-
12368
  #: includes/settings/wcj-settings-payment-gateways-currency.php:17
12369
  msgid "This section lets you set different currency for each payment gateway."
12370
  msgstr ""
12371
 
12372
- #: includes/settings/wcj-settings-payment-gateways-currency.php:73
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12373
  msgid "Advanced: Fix \"Chosen Payment Method\""
12374
  msgstr ""
12375
 
12376
- #: includes/settings/wcj-settings-payment-gateways-currency.php:75
12377
  msgid ""
12378
  "Enable this if you are having compatibility issues with some other plugins "
12379
  "or modules."
@@ -12527,7 +12742,7 @@ msgstr ""
12527
 
12528
  #: includes/settings/wcj-settings-payment-gateways-per-category.php:31
12529
  #: includes/settings/wcj-settings-price-labels.php:125
12530
- #: includes/settings/wcj-settings-product-input-fields.php:109
12531
  msgid "Product Categories - Include"
12532
  msgstr ""
12533
 
@@ -12539,7 +12754,7 @@ msgstr ""
12539
 
12540
  #: includes/settings/wcj-settings-payment-gateways-per-category.php:42
12541
  #: includes/settings/wcj-settings-price-labels.php:134
12542
- #: includes/settings/wcj-settings-product-input-fields.php:120
12543
  msgid "Product Categories - Exclude"
12544
  msgstr ""
12545
 
@@ -12551,7 +12766,7 @@ msgstr ""
12551
 
12552
  #: includes/settings/wcj-settings-payment-gateways-per-category.php:54
12553
  #: includes/settings/wcj-settings-price-labels.php:107
12554
- #: includes/settings/wcj-settings-product-input-fields.php:154
12555
  msgid "Products - Include"
12556
  msgstr ""
12557
 
@@ -12563,7 +12778,7 @@ msgstr ""
12563
 
12564
  #: includes/settings/wcj-settings-payment-gateways-per-category.php:67
12565
  #: includes/settings/wcj-settings-price-labels.php:116
12566
- #: includes/settings/wcj-settings-product-input-fields.php:166
12567
  msgid "Products - Exclude"
12568
  msgstr ""
12569
 
@@ -13898,14 +14113,14 @@ msgstr ""
13898
 
13899
  #: includes/settings/wcj-settings-product-addons.php:206
13900
  #: includes/settings/wcj-settings-product-custom-info.php:109
13901
- #: includes/settings/wcj-settings-product-input-fields.php:194
13902
  #: includes/settings/wcj-settings-product-open-pricing.php:17
13903
  msgid "Before add to cart button"
13904
  msgstr ""
13905
 
13906
  #: includes/settings/wcj-settings-product-addons.php:207
13907
  #: includes/settings/wcj-settings-product-custom-info.php:110
13908
- #: includes/settings/wcj-settings-product-input-fields.php:195
13909
  #: includes/settings/wcj-settings-product-open-pricing.php:18
13910
  msgid "After add to cart button"
13911
  msgstr ""
@@ -13915,7 +14130,7 @@ msgid "Position Priority on Frontend"
13915
  msgstr ""
13916
 
13917
  #: includes/settings/wcj-settings-product-addons.php:212
13918
- #: includes/settings/wcj-settings-shipping-by-condition.php:111
13919
  #: includes/settings/wcj-settings-shipping-options.php:41
13920
  msgid "Set to zero to use the default priority."
13921
  msgstr ""
@@ -13943,7 +14158,7 @@ msgstr ""
13943
 
13944
  #: includes/settings/wcj-settings-product-addons.php:250
13945
  #: includes/settings/wcj-settings-product-bookings.php:100
13946
- #: includes/settings/wcj-settings-product-input-fields.php:336
13947
  #: includes/settings/wcj-settings-product-open-pricing.php:129
13948
  msgid ""
13949
  "Ensures that data outputted only once. Enable this if you see data outputted "
@@ -13971,23 +14186,27 @@ msgid "Each Addon - Type: Select Box"
13971
  msgstr ""
13972
 
13973
  #: includes/settings/wcj-settings-product-addons.php:297
13974
- msgid "Each Addon - Type: Radio Button (Each)"
13975
  msgstr ""
13976
 
13977
  #: includes/settings/wcj-settings-product-addons.php:305
 
 
 
 
13978
  msgid "All Addons - Final"
13979
  msgstr ""
13980
 
13981
- #: includes/settings/wcj-settings-product-addons.php:317
13982
  msgid "Cart Template"
13983
  msgstr ""
13984
 
13985
- #: includes/settings/wcj-settings-product-addons.php:329
13986
- #: includes/settings/wcj-settings-product-addons.php:360
13987
  msgid "Each Addon"
13988
  msgstr ""
13989
 
13990
- #: includes/settings/wcj-settings-product-addons.php:348
13991
  msgid "Order Details Table Template"
13992
  msgstr ""
13993
 
@@ -14578,178 +14797,187 @@ msgstr ""
14578
  msgid "Comma separated list of product IDs to exclude from product info."
14579
  msgstr ""
14580
 
14581
- #: includes/settings/wcj-settings-product-input-fields.php:14
14582
  msgid "Product Input Fields per Product Options"
14583
  msgstr ""
14584
 
14585
- #: includes/settings/wcj-settings-product-input-fields.php:16
14586
- #: includes/settings/wcj-settings-product-input-fields.php:47
14587
  msgid ""
14588
  "Add custom input fields to product's single page for customer to fill before "
14589
  "adding product to cart."
14590
  msgstr ""
14591
 
14592
- #: includes/settings/wcj-settings-product-input-fields.php:17
14593
  msgid ""
14594
  "When enabled this module will add \"Product Input Fields\" tab to each "
14595
  "product's \"Edit\" page."
14596
  msgstr ""
14597
 
14598
- #: includes/settings/wcj-settings-product-input-fields.php:21
14599
  msgid "Product Input Fields - per Product"
14600
  msgstr ""
14601
 
14602
- #: includes/settings/wcj-settings-product-input-fields.php:23
14603
  msgid "Add custom input field on per product basis."
14604
  msgstr ""
14605
 
14606
- #: includes/settings/wcj-settings-product-input-fields.php:29
14607
  msgid "Default Number of Product Input Fields per Product"
14608
  msgstr ""
14609
 
14610
- #: includes/settings/wcj-settings-product-input-fields.php:31
14611
  msgid ""
14612
  "You will be able to change this number later as well as define the fields, "
14613
  "for each product individually, in product's \"Edit\"."
14614
  msgstr ""
14615
 
14616
- #: includes/settings/wcj-settings-product-input-fields.php:45
14617
  msgid "Product Input Fields Global Options"
14618
  msgstr ""
14619
 
14620
- #: includes/settings/wcj-settings-product-input-fields.php:51
14621
  msgid "Product Input Fields - All Products"
14622
  msgstr ""
14623
 
14624
- #: includes/settings/wcj-settings-product-input-fields.php:53
14625
  msgid "Add custom input fields to all products."
14626
  msgstr ""
14627
 
14628
- #: includes/settings/wcj-settings-product-input-fields.php:59
14629
  msgid "Product Input Fields Number"
14630
  msgstr ""
14631
 
14632
- #: includes/settings/wcj-settings-product-input-fields.php:110
14633
  msgid "Product categories to include."
14634
  msgstr ""
14635
 
14636
- #: includes/settings/wcj-settings-product-input-fields.php:111
14637
- #: includes/settings/wcj-settings-product-input-fields.php:122
14638
- #: includes/settings/wcj-settings-product-input-fields.php:133
14639
- #: includes/settings/wcj-settings-product-input-fields.php:144
14640
- #: includes/settings/wcj-settings-product-input-fields.php:156
14641
- #: includes/settings/wcj-settings-product-input-fields.php:168
14642
  #: includes/settings/wcj-settings-wholesale-price.php:84
14643
  #: includes/settings/wcj-settings-wholesale-price.php:101
14644
  msgid "Leave blank to include all products."
14645
  msgstr ""
14646
 
14647
- #: includes/settings/wcj-settings-product-input-fields.php:121
14648
  msgid "Product categories to exclude."
14649
  msgstr ""
14650
 
14651
- #: includes/settings/wcj-settings-product-input-fields.php:131
14652
  msgid "Product Tags - Include"
14653
  msgstr ""
14654
 
14655
- #: includes/settings/wcj-settings-product-input-fields.php:132
14656
  msgid "Product tags to include."
14657
  msgstr ""
14658
 
14659
- #: includes/settings/wcj-settings-product-input-fields.php:142
14660
  msgid "Product Tags - Exclude"
14661
  msgstr ""
14662
 
14663
- #: includes/settings/wcj-settings-product-input-fields.php:143
14664
  msgid "Product tags to exclude."
14665
  msgstr ""
14666
 
14667
- #: includes/settings/wcj-settings-product-input-fields.php:155
14668
  msgid "Products to include."
14669
  msgstr ""
14670
 
14671
- #: includes/settings/wcj-settings-product-input-fields.php:167
14672
  msgid "Products to exclude."
14673
  msgstr ""
14674
 
14675
- #: includes/settings/wcj-settings-product-input-fields.php:184
14676
  msgid "Frontend View Options"
14677
  msgstr ""
14678
 
14679
- #: includes/settings/wcj-settings-product-input-fields.php:189
14680
  msgid "Position on Single Product Page"
14681
  msgstr ""
14682
 
14683
- #: includes/settings/wcj-settings-product-input-fields.php:205
14684
  msgid "HTML Template - Start"
14685
  msgstr ""
14686
 
14687
- #: includes/settings/wcj-settings-product-input-fields.php:212
14688
  msgid "HTML Template - Each Field"
14689
  msgstr ""
14690
 
14691
- #: includes/settings/wcj-settings-product-input-fields.php:219
14692
  msgid "HTML Template - End"
14693
  msgstr ""
14694
 
14695
- #: includes/settings/wcj-settings-product-input-fields.php:226
14696
  msgid "HTML Template - Radio Field"
14697
  msgstr ""
14698
 
14699
- #: includes/settings/wcj-settings-product-input-fields.php:233
14700
  msgid "HTML to add after required field title"
14701
  msgstr ""
14702
 
14703
- #: includes/settings/wcj-settings-product-input-fields.php:240
14704
  msgid "Cart Display Options"
14705
  msgstr ""
14706
 
14707
- #: includes/settings/wcj-settings-product-input-fields.php:241
14708
  msgid ""
14709
  "When \"Add to cart item data\" is selected, \"Cart HTML Template\" options "
14710
  "below will be ignored."
14711
  msgstr ""
14712
 
14713
- #: includes/settings/wcj-settings-product-input-fields.php:246
14714
  msgid "Add to cart item name"
14715
  msgstr ""
14716
 
14717
- #: includes/settings/wcj-settings-product-input-fields.php:247
14718
  msgid "Add to cart item data"
14719
  msgstr ""
14720
 
14721
- #: includes/settings/wcj-settings-product-input-fields.php:251
14722
  msgid "Cart HTML Template - Start"
14723
  msgstr ""
14724
 
14725
- #: includes/settings/wcj-settings-product-input-fields.php:258
14726
  msgid "Cart HTML Template - Each Field"
14727
  msgstr ""
14728
 
14729
- #: includes/settings/wcj-settings-product-input-fields.php:265
14730
  msgid "Cart HTML Template - End"
14731
  msgstr ""
14732
 
14733
- #: includes/settings/wcj-settings-product-input-fields.php:272
14734
  msgid "Order Table Template - Each Field"
14735
  msgstr ""
14736
 
14737
- #: includes/settings/wcj-settings-product-input-fields.php:273
14738
  msgid "Affects Order received page, Emails and Admin Orders View"
14739
  msgstr ""
14740
 
14741
- #: includes/settings/wcj-settings-product-input-fields.php:311
14742
  msgid "Admin Order View Options"
14743
  msgstr ""
14744
 
14745
- #: includes/settings/wcj-settings-product-input-fields.php:316
14746
  msgid "Replace Field ID with Field Label"
14747
  msgstr ""
14748
 
14749
- #: includes/settings/wcj-settings-product-input-fields.php:334
14750
  msgid "Check for Outputted Data"
14751
  msgstr ""
14752
 
 
 
 
 
 
 
 
 
 
14753
  #: includes/settings/wcj-settings-product-listings.php:31
14754
  msgid "Shop Page Display Options"
14755
  msgstr ""
@@ -15809,23 +16037,36 @@ msgstr ""
15809
  msgid "Per Tag"
15810
  msgstr ""
15811
 
15812
- #: includes/settings/wcj-settings-shipping-by-condition.php:40
15813
- #: includes/settings/wcj-settings-shipping-by-condition.php:46
 
 
 
 
 
 
 
 
 
 
 
 
 
15814
  #, php-format
15815
  msgid "Shipping Methods by %s"
15816
  msgstr ""
15817
 
15818
- #: includes/settings/wcj-settings-shipping-by-condition.php:74
15819
  #, php-format
15820
  msgid "Include %s"
15821
  msgstr ""
15822
 
15823
- #: includes/settings/wcj-settings-shipping-by-condition.php:85
15824
  #, php-format
15825
  msgid "Exclude %s"
15826
  msgstr ""
15827
 
15828
- #: includes/settings/wcj-settings-shipping-by-condition.php:110
15829
  msgid "Filter Priority"
15830
  msgstr ""
15831
 
@@ -15903,11 +16144,6 @@ msgstr ""
15903
  msgid "Description Visibility"
15904
  msgstr ""
15905
 
15906
- #: includes/settings/wcj-settings-shipping-description.php:26
15907
- #: includes/settings/wcj-settings-shipping-icons.php:35
15908
- msgid "On both cart and checkout pages"
15909
- msgstr ""
15910
-
15911
  #: includes/settings/wcj-settings-shipping-description.php:27
15912
  #: includes/settings/wcj-settings-shipping-icons.php:36
15913
  msgid "Only on cart page"
@@ -17381,16 +17617,16 @@ msgstr ""
17381
  msgid "Edit Product"
17382
  msgstr ""
17383
 
17384
- #: includes/shortcodes/class-wcj-shortcodes-products.php:330
17385
  #, php-format
17386
  msgid "%s ago"
17387
  msgstr ""
17388
 
17389
- #: includes/shortcodes/class-wcj-shortcodes-products.php:346
17390
  msgid "No sales yet."
17391
  msgstr ""
17392
 
17393
- #: includes/shortcodes/class-wcj-shortcodes-products.php:569
17394
  msgid "In stock"
17395
  msgstr ""
17396
 
@@ -17552,18 +17788,46 @@ msgstr ""
17552
  msgid "Multicurrency module not enabled!"
17553
  msgstr ""
17554
 
17555
- #: includes/widgets/class-wcj-widget-multicurrency.php:75
17556
  msgid "Drop down"
17557
  msgstr ""
17558
 
17559
- #: includes/widgets/class-wcj-widget-multicurrency.php:76
17560
  msgid "Radio list"
17561
  msgstr ""
17562
 
17563
- #: includes/widgets/class-wcj-widget-multicurrency.php:77
17564
  msgid "Link list"
17565
  msgstr ""
17566
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17567
  #: includes/widgets/class-wcj-widget-selector.php:29
17568
  msgid "Booster: Selector Widget"
17569
  msgstr ""
77
 
78
  #: includes/class-wcj-admin-bar.php:172
79
  #: includes/admin/class-wc-settings-jetpack.php:416
80
+ #: includes/classes/class-wcj-module.php:689
81
  msgid "Documentation"
82
  msgstr ""
83
 
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"
102
  msgstr ""
111
 
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
119
  #: includes/class-wcj-track-users.php:251
120
  #: includes/admin/class-wc-settings-jetpack.php:24
121
  #: includes/admin/class-wc-settings-jetpack.php:221
122
+ #: includes/classes/class-wcj-module.php:349
123
+ #: includes/classes/class-wcj-module.php:549
124
  #: includes/settings/wcj-settings-price-by-country.php:169
125
  msgid "Booster"
126
  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
 
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
 
452
  msgid "Customize admin products list."
453
  msgstr ""
454
 
455
+ #: includes/class-wcj-admin-tools.php:24
456
  msgid "Admin Tools"
457
  msgstr ""
458
 
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
 
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
 
778
  msgid "Customize cross-sells products display."
779
  msgstr ""
780
 
781
+ #: includes/class-wcj-crowdfunding.php:25
782
  msgid "Crowdfunding"
783
  msgstr ""
784
 
785
+ #: includes/class-wcj-crowdfunding.php:26
786
  msgid "Add crowdfunding products to WooCommerce."
787
  msgstr ""
788
 
789
+ #: includes/class-wcj-crowdfunding.php:28
790
  msgid "When enabled, module will add Crowdfunding metabox to product edit."
791
  msgstr ""
792
 
793
+ #: includes/class-wcj-crowdfunding.php:30
794
  #, php-format
795
  msgid ""
796
  "To add crowdfunding info to the product, use <a href=\"%s\" target=\"_blank"
797
  "\">Booster's crowdfunding shortcodes</a>."
798
  msgstr ""
799
 
800
+ #: includes/class-wcj-crowdfunding.php:34
801
  #, php-format
802
  msgid ""
803
  "Shortcodes could be used for example in <a href=\"%s\">Product Info module</"
804
  "a>."
805
  msgstr ""
806
 
807
+ #: includes/class-wcj-crowdfunding.php:38
808
  #, php-format
809
  msgid ""
810
  "To change add to cart button labels use <a href=\"%s\">Add to Cart Labels "
1033
  msgid "Separate custom CSS for front and back end. Per product CSS."
1034
  msgstr ""
1035
 
1036
+ #: includes/class-wcj-custom-js.php:27
1037
  msgid "Custom JS"
1038
  msgstr ""
1039
 
1040
+ #: includes/class-wcj-custom-js.php:28
1041
  msgid "Separate custom JS for front and back end."
1042
  msgstr ""
1043
 
1044
+ #: includes/class-wcj-custom-php.php:27
1045
+ #: includes/settings/wcj-settings-custom-php.php:21
1046
+ 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
1054
+ #, php-format
1055
+ msgid ""
1056
+ "Please note that if you enable the module and enter non-valid PHP code here, "
1057
+ "your site will become unavailable. To fix this you will have to add %s "
1058
+ "attribute to the URL (you must be logged as shop manager or admin (for this "
1059
+ "reason custom PHP code is not executed on %s page))."
1060
+ msgstr ""
1061
+
1062
+ #: includes/class-wcj-custom-php.php:32
1063
+ #: includes/settings/wcj-settings-multicurrency.php:104
1064
+ #: includes/settings/wcj-settings-offer-price.php:73
1065
+ #, php-format
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
  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
 
1238
  msgstr ""
1239
 
1240
  #: includes/class-wcj-eu-vat-number.php:25
1241
+ #: includes/class-wcj-eu-vat-number.php:264
1242
  #: includes/settings/wcj-settings-eu-vat-number.php:22
1243
  #: includes/settings/wcj-settings-eu-vat-number.php:29
1244
  msgid "EU VAT Number"
1259
  msgid "Add all EU countries VAT standard rates to WooCommerce."
1260
  msgstr ""
1261
 
1262
+ #: includes/class-wcj-eu-vat-number.php:178
1263
  msgid "Customer IP"
1264
  msgstr ""
1265
 
1266
+ #: includes/class-wcj-eu-vat-number.php:182 includes/class-wcj-orders.php:153
1267
+ #: includes/settings/wcj-settings-orders.php:126
1268
  #: includes/settings/wcj-settings-payment-gateways-by-country.php:27
1269
  msgid "Country by IP"
1270
  msgstr ""
1271
 
1272
+ #: includes/class-wcj-eu-vat-number.php:186
1273
  msgid "Customer EU VAT Number"
1274
  msgstr ""
1275
 
1276
+ #: includes/class-wcj-eu-vat-number.php:196
1277
  msgid "Validate VAT and remove taxes"
1278
  msgstr ""
1279
 
1280
+ #: includes/class-wcj-eu-vat-number.php:336
1281
  #: includes/settings/wcj-settings-eu-vat-number.php:165
1282
  msgid "Validating VAT. Please wait..."
1283
  msgstr ""
1284
 
1285
+ #: includes/class-wcj-eu-vat-number.php:337
1286
  #: includes/settings/wcj-settings-eu-vat-number.php:172
1287
  msgid "VAT is valid."
1288
  msgstr ""
1289
 
1290
+ #: includes/class-wcj-eu-vat-number.php:338
1291
  #: includes/settings/wcj-settings-eu-vat-number.php:179
1292
  msgid "VAT is not valid."
1293
  msgstr ""
1294
 
1295
+ #: includes/class-wcj-eu-vat-number.php:339
1296
  #: includes/settings/wcj-settings-eu-vat-number.php:187
1297
  msgid "Validation failed. Please try again."
1298
  msgstr ""
1299
 
1300
+ #: includes/class-wcj-eu-vat-number.php:436
1301
  #: includes/settings/wcj-settings-eu-vat-number.php:83
1302
  msgid "<strong>EU VAT Number</strong> is not valid."
1303
  msgstr ""
1327
  msgid "Export Customers (extracted from orders)."
1328
  msgstr ""
1329
 
1330
+ #: includes/class-wcj-export-import.php:39
1331
  msgid "Customers are identified by billing email."
1332
  msgstr ""
1333
 
1334
+ #: includes/class-wcj-export-import.php:42
1335
  msgid "Export Orders"
1336
  msgstr ""
1337
 
1338
+ #: includes/class-wcj-export-import.php:43
1339
  msgid "Export Orders."
1340
  msgstr ""
1341
 
1342
+ #: includes/class-wcj-export-import.php:46
1343
  msgid "Export Orders Items"
1344
  msgstr ""
1345
 
1346
+ #: includes/class-wcj-export-import.php:47
1347
  msgid "Export Orders Items."
1348
  msgstr ""
1349
 
1350
+ #: includes/class-wcj-export-import.php:50
1351
  msgid "Export Products"
1352
  msgstr ""
1353
 
1354
+ #: includes/class-wcj-export-import.php:51
1355
  msgid "Export Products."
1356
  msgstr ""
1357
 
1358
+ #: includes/class-wcj-export-import.php:192
1359
+ #: includes/class-wcj-export-import.php:198
1360
  msgid "Filter by Billing Country"
1361
  msgstr ""
1362
 
1363
+ #: includes/class-wcj-export-import.php:193
1364
  msgid "Filter by Product Title"
1365
  msgstr ""
1366
 
1367
+ #: includes/class-wcj-export-import.php:212
1368
  #: includes/reports/wcj-class-reports-sales-daily.php:189
1369
  #: includes/reports/wcj-class-reports-sales-gateways.php:137
1370
  #: includes/settings/wcj-settings-orders.php:45
1371
  msgid "Filter"
1372
  msgstr ""
1373
 
1374
+ #: includes/class-wcj-export-import.php:231
1375
  #: includes/class-wcj-track-users.php:36
1376
  msgid "All time"
1377
  msgstr ""
1378
 
1379
+ #: includes/class-wcj-export-import.php:244
1380
  msgid "Custom:"
1381
  msgstr ""
1382
 
1383
+ #: includes/class-wcj-export-import.php:249
1384
  msgid "Go"
1385
  msgstr ""
1386
 
1387
+ #: includes/class-wcj-export-import.php:269
1388
  msgid "Download CSV"
1389
  msgstr ""
1390
 
1391
+ #: includes/class-wcj-export-import.php:272
1392
  msgid "Download XML"
1393
  msgstr ""
1394
 
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
  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
  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
  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
  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
1524
  #: includes/settings/wcj-settings-order-custom-statuses.php:29
1525
  #: includes/settings/wcj-settings-order-custom-statuses.php:37
1526
  #: includes/settings/wcj-settings-order-custom-statuses.php:70
1527
+ #: includes/settings/wcj-settings-order-custom-statuses.php:97
1528
  #: includes/settings/wcj-settings-order-min-amount.php:53
1529
+ #: includes/settings/wcj-settings-orders.php:132
1530
+ #: includes/settings/wcj-settings-orders.php:159
1531
  #: includes/settings/wcj-settings-pdf-invoicing-advanced.php:125
1532
  #: includes/settings/wcj-settings-pdf-invoicing-advanced.php:183
1533
  #: includes/settings/wcj-settings-product-by-condition.php:107
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
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
 
1693
  #: includes/class-wcj-multicurrency.php:28
1694
  #, php-format
1695
  msgid ""
1696
+ "After setting currencies in the Currencies Options section below, you can "
1697
+ "add switcher to the frontend with: %s"
1698
+ msgstr ""
1699
+
1700
+ #: includes/class-wcj-multicurrency.php:30
1701
+ #, php-format
1702
+ msgid "<strong>Widget:</strong> \"%s\""
1703
  msgstr ""
1704
 
1705
+ #: includes/class-wcj-multicurrency.php:31
1706
  #: includes/widgets/class-wcj-widget-multicurrency.php:27
1707
  msgid "Booster - Multicurrency Switcher"
1708
  msgstr ""
1709
 
1710
+ #: includes/class-wcj-multicurrency.php:33
1711
+ #, php-format
1712
+ msgid "<strong>Shortcodes:</strong> %s"
1713
+ msgstr ""
1714
+
1715
+ #: includes/class-wcj-multicurrency.php:36
1716
+ #, php-format
1717
+ msgid "<strong>PHP code:</strong> by using %s function, e.g.: %s"
1718
+ msgstr ""
1719
+
1720
  #: includes/class-wcj-my-account.php:25
1721
  msgid "My Account"
1722
  msgstr ""
1734
  msgstr ""
1735
 
1736
  #: includes/class-wcj-my-account.php:35 includes/class-wcj-my-account.php:45
1737
+ #: includes/settings/wcj-settings-orders.php:112
1738
  msgid "Payment methods"
1739
  msgstr ""
1740
 
1781
  #: includes/class-wcj-product-by-user.php:206
1782
  #: includes/class-wcj-purchase-data.php:94
1783
  #: includes/class-wcj-track-users.php:334
1784
+ #: includes/classes/class-wcj-module.php:658
1785
+ #: includes/functions/wcj-functions-general.php:189
1786
+ #: includes/functions/wcj-functions-html.php:115
1787
  #: includes/reports/wcj-class-reports-monthly-sales.php:351
1788
  #: includes/settings/wcj-settings-empty-cart.php:85
1789
  #: includes/shortcodes/class-wcj-shortcodes-products-add-form.php:364
2011
  msgid "No old slugs found."
2012
  msgstr ""
2013
 
2014
+ #: includes/class-wcj-order-custom-statuses.php:26
2015
  msgid "Order Custom Statuses"
2016
  msgstr ""
2017
 
2018
+ #: includes/class-wcj-order-custom-statuses.php:27
2019
  msgid "Custom statuses for WooCommerce orders."
2020
  msgstr ""
2021
 
2022
+ #: includes/class-wcj-order-custom-statuses.php:33
2023
  #: includes/settings/wcj-settings-order-custom-statuses.php:14
2024
  msgid "Custom Statuses"
2025
  msgstr ""
2026
 
2027
+ #: includes/class-wcj-order-custom-statuses.php:34
2028
  msgid ""
2029
  "Tool lets you add, edit or delete any custom status for WooCommerce orders."
2030
  msgstr ""
2031
 
2032
+ #: includes/class-wcj-order-custom-statuses.php:158
2033
+ #, php-format
2034
+ msgid "Change order status to %s"
2035
+ msgstr ""
2036
+
2037
+ #: includes/class-wcj-order-custom-statuses.php:168
2038
+ msgid "Change status: "
2039
+ msgstr ""
2040
+
2041
+ #: includes/class-wcj-order-custom-statuses.php:208
2042
  msgid "Processing"
2043
  msgstr ""
2044
 
2045
+ #: includes/class-wcj-order-custom-statuses.php:218
2046
  msgid "Complete"
2047
  msgstr ""
2048
 
2049
+ #: includes/class-wcj-order-custom-statuses.php:323
2050
  #, php-format
2051
  msgid " <span class=\"count\">(%s)</span>"
2052
  msgid_plural " <span class=\"count\">(%s)</span>"
2053
  msgstr[0] ""
2054
  msgstr[1] ""
2055
 
2056
+ #: includes/class-wcj-order-custom-statuses.php:397
2057
+ #: includes/class-wcj-order-custom-statuses.php:399
2058
  msgid "Mark"
2059
  msgstr ""
2060
 
2155
  "regenerate download permissions for orders."
2156
  msgstr ""
2157
 
2158
+ #: includes/class-wcj-orders.php:124
2159
  msgid "Order Navigation"
2160
  msgstr ""
2161
 
2162
+ #: includes/class-wcj-orders.php:140
2163
  msgid "Previous order"
2164
  msgstr ""
2165
 
2166
+ #: includes/class-wcj-orders.php:141
2167
  msgid "Next order"
2168
  msgstr ""
2169
 
2170
+ #: includes/class-wcj-orders.php:180
2171
  msgid "No data."
2172
  msgstr ""
2173
 
2174
+ #: includes/class-wcj-orders.php:225
2175
  msgid "Regenerate download permissions"
2176
  msgstr ""
2177
 
2178
+ #: includes/class-wcj-orders.php:239
2179
  #, php-format
2180
  msgid "Download permissions regenerated for %s order."
2181
  msgid_plural "Download permissions regenerated for %s orders."
2216
  msgid "Set user roles to include/exclude for payment gateways to show up."
2217
  msgstr ""
2218
 
2219
+ #: includes/class-wcj-payment-gateways-currency.php:25
2220
  msgid "Gateways Currency Converter"
2221
  msgstr ""
2222
 
2223
+ #: includes/class-wcj-payment-gateways-currency.php:26
2224
  msgid "Currency converter for payment gateways."
2225
  msgstr ""
2226
 
2422
  "format options."
2423
  msgstr ""
2424
 
2425
+ #: includes/class-wcj-price-labels.php:23
2426
  msgid "Custom Price Labels"
2427
  msgstr ""
2428
 
2429
+ #: includes/class-wcj-price-labels.php:24
2430
  msgid "Create any custom price label for any product."
2431
  msgstr ""
2432
 
2433
+ #: includes/class-wcj-price-labels.php:32
2434
  #: includes/settings/wcj-settings-price-labels.php:99
2435
  msgid "Instead of the price"
2436
  msgstr ""
2437
 
2438
+ #: includes/class-wcj-price-labels.php:33
2439
  msgid "Before the price"
2440
  msgstr ""
2441
 
2442
+ #: includes/class-wcj-price-labels.php:34
2443
  msgid "Between regular and sale prices"
2444
  msgstr ""
2445
 
2446
+ #: includes/class-wcj-price-labels.php:35
2447
  msgid "After the price"
2448
  msgstr ""
2449
 
2450
+ #: includes/class-wcj-price-labels.php:40
2451
  #: includes/class-wcj-product-info.php:235
2452
  #: includes/class-wcj-shipping-by-products.php:195
2453
  #: includes/class-wcj-shipping-options.php:121
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
2495
  #: includes/settings/wcj-settings-currency-per-product.php:97
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
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
2531
  #: includes/settings/wcj-settings-order-quantities.php:195
2532
  #: includes/settings/wcj-settings-orders.php:32
2533
  #: includes/settings/wcj-settings-orders.php:60
2534
+ #: includes/settings/wcj-settings-orders.php:80
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
2584
  #: includes/settings/wcj-settings-product-by-user.php:107
2585
  #: includes/settings/wcj-settings-product-info.php:35
2586
  #: includes/settings/wcj-settings-product-info.php:68
2587
+ #: includes/settings/wcj-settings-product-input-fields.php:23
2588
+ #: includes/settings/wcj-settings-product-input-fields.php:53
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
2608
  #: includes/settings/wcj-settings-related-products.php:112
2609
  #: includes/settings/wcj-settings-related-products.php:119
2610
  #: includes/settings/wcj-settings-related-products.php:149
2611
+ #: includes/settings/wcj-settings-shipping-by-condition.php:26
2612
  #: includes/settings/wcj-settings-shipping-by-order-amount.php:21
2613
  #: includes/settings/wcj-settings-shipping-calculator.php:20
2614
  #: includes/settings/wcj-settings-shipping-calculator.php:27
2645
  msgid "Enable"
2646
  msgstr ""
2647
 
2648
+ #: includes/class-wcj-price-labels.php:41
2649
  msgid "Hide on home page"
2650
  msgstr ""
2651
 
2652
+ #: includes/class-wcj-price-labels.php:42
2653
  msgid "Hide on products page"
2654
  msgstr ""
2655
 
2656
+ #: includes/class-wcj-price-labels.php:43
2657
  msgid "Hide on single"
2658
  msgstr ""
2659
 
2660
+ #: includes/class-wcj-price-labels.php:44
2661
  msgid "Hide on all pages"
2662
  msgstr ""
2663
 
2664
+ #: includes/class-wcj-price-labels.php:45
2665
  msgid "Hide on cart page only"
2666
  msgstr ""
2667
 
2668
+ #: includes/class-wcj-price-labels.php:46
2669
  msgid "Hide for main price"
2670
  msgstr ""
2671
 
2672
+ #: includes/class-wcj-price-labels.php:47
2673
  msgid "Hide for all variations"
2674
  msgstr ""
2675
 
2676
+ #: includes/class-wcj-price-labels.php:134
2677
  msgid "Booster: Custom Price Labels"
2678
  msgstr ""
2679
 
2987
  msgstr ""
2988
 
2989
  #: includes/class-wcj-product-bulk-price-converter.php:262
2990
+ #: includes/shortcodes/class-wcj-shortcodes-products.php:354
2991
  msgid "Any"
2992
  msgstr ""
2993
 
3204
 
3205
  #: includes/class-wcj-product-by-user.php:197
3206
  #: includes/class-wcj-product-tabs.php:591
3207
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:55
3208
  #: includes/input-fields/wcj-product-input-fields-options.php:51
3209
  #: includes/settings/wcj-settings-admin-orders-list.php:172
3210
  #: includes/settings/wcj-settings-checkout-fees.php:47
3229
  #: includes/shortcodes/class-wcj-shortcodes-products-add-form.php:334
3230
  #: includes/widgets/class-wcj-widget-country-switcher.php:62
3231
  #: includes/widgets/class-wcj-widget-left-to-free-shipping.php:52
3232
+ #: includes/widgets/class-wcj-widget-multicurrency.php:69
3233
  #: includes/widgets/class-wcj-widget-selector.php:52
3234
  msgid "Title"
3235
  msgstr ""
3245
  #: includes/admin/class-wc-settings-jetpack.php:480
3246
  #: includes/admin/class-wc-settings-jetpack.php:492
3247
  #: includes/admin/class-wc-settings-jetpack.php:501
3248
+ #: includes/functions/wcj-functions-general.php:448
3249
  msgid "Product Info"
3250
  msgstr ""
3251
 
3293
  #: includes/settings/wcj-settings-cross-sells.php:14
3294
  #: includes/settings/wcj-settings-custom-css.php:14
3295
  #: includes/settings/wcj-settings-custom-js.php:14
3296
+ #: includes/settings/wcj-settings-custom-php.php:16
3297
  #: includes/settings/wcj-settings-empty-cart.php:14
3298
  #: includes/settings/wcj-settings-eu-vat-number.php:15
3299
  #: includes/settings/wcj-settings-global-discount.php:19
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
3688
  #: includes/settings/wcj-settings-checkout-core-fields.php:71
3689
  #: includes/settings/wcj-settings-currency-exchange-rates.php:142
3690
  #: includes/settings/wcj-settings-order-numbers.php:46
3691
+ #: includes/settings/wcj-settings-orders.php:180
3692
  #: includes/settings/wcj-settings-product-add-to-cart.php:64
3693
  #: includes/settings/meta-box/wcj-settings-meta-box-product-by-date.php:22
3694
  #: includes/settings/meta-box/wcj-settings-meta-box-product-by-time.php:19
3895
  msgid "Customize products sale flash."
3896
  msgstr ""
3897
 
3898
+ #: includes/class-wcj-sale-flash.php:84 includes/class-wcj-sale-flash.php:120
3899
  #: includes/settings/wcj-settings-sale-flash.php:29
3900
+ #: includes/settings/wcj-settings-sale-flash.php:113
3901
  #: includes/settings/meta-box/wcj-settings-meta-box-sale-flash.php:26
3902
  msgid "Sale!"
3903
  msgstr ""
3904
 
3905
  #: includes/class-wcj-shipping-by-cities.php:25
3906
+ msgid "Shipping Methods by City or Postcode"
3907
  msgstr ""
3908
 
3909
  #: includes/class-wcj-shipping-by-cities.php:26
3910
+ msgid ""
3911
+ "Set shipping cities or postcodes to include/exclude for shipping methods to "
3912
+ "show up."
3913
  msgstr ""
3914
 
3915
  #: includes/class-wcj-shipping-by-cities.php:31
3920
  msgid "Otherwise enter cities one per line."
3921
  msgstr ""
3922
 
3923
+ #: includes/class-wcj-shipping-by-cities.php:38
3924
+ msgid "Postcodes"
3925
+ msgstr ""
3926
+
3927
+ #: includes/class-wcj-shipping-by-cities.php:39
3928
+ msgid "Otherwise enter postcodes one per line."
3929
+ msgstr ""
3930
+
3931
+ #: includes/class-wcj-shipping-by-cities.php:40
3932
+ #: includes/settings/wcj-settings-payment-gateways-by-country.php:121
3933
+ #: includes/settings/wcj-settings-payment-gateways-by-country.php:131
3934
+ msgid ""
3935
+ "Postcodes containing wildcards (e.g. CB23*) and fully numeric ranges (e.g. "
3936
+ "<code>90210...99000</code>) are also supported."
3937
+ msgstr ""
3938
+
3939
  #: includes/class-wcj-shipping-by-order-amount.php:26
3940
  #: includes/settings/wcj-settings-shipping-by-order-amount.php:33
3941
  msgid "Shipping Methods by Min/Max Order Amount"
4024
 
4025
  #: includes/class-wcj-shipping-by-products.php:205
4026
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:25
4027
+ #: includes/settings/wcj-settings-shipping-by-condition.php:28
4028
  #: includes/settings/wcj-settings-shipping-by-order-amount.php:23
4029
  #: includes/settings/wcj-settings-shipping-description.php:61
4030
  #: includes/settings/wcj-settings-shipping-icons.php:63
4033
  msgid "Save changes after enabling this option."
4034
  msgstr ""
4035
 
4036
+ #: includes/class-wcj-shipping-by-time.php:27
4037
+ msgid "Shipping Methods by Current Date/Time"
4038
+ msgstr ""
4039
+
4040
+ #: includes/class-wcj-shipping-by-time.php:28
4041
+ msgid ""
4042
+ "Set date and/or time to include/exclude for shipping methods to show up."
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
4050
+ #, php-format
4051
+ msgid "Current time: %s."
4052
+ msgstr ""
4053
+
4054
+ #: includes/class-wcj-shipping-by-time.php:35
4055
+ #, php-format
4056
+ msgid ""
4057
+ "Time <em>from</em> and time <em>to</em> must be separated with %s symbol."
4058
+ msgstr ""
4059
+
4060
+ #: includes/class-wcj-shipping-by-time.php:36
4061
+ #, php-format
4062
+ msgid ""
4063
+ "Each time input must be set in format that is parsable by PHP %s function."
4064
+ msgstr ""
4065
+
4066
+ #: includes/class-wcj-shipping-by-time.php:38
4067
+ #, php-format
4068
+ msgid "Valid time input examples are: %s"
4069
+ msgstr ""
4070
+
4071
+ #: includes/class-wcj-shipping-by-time.php:112
4072
+ #, php-format
4073
+ msgid ""
4074
+ "According to current time, your time input will be parsed as: from %s to %s."
4075
+ msgstr ""
4076
+
4077
+ #: includes/class-wcj-shipping-by-time.php:115
4078
+ #, php-format
4079
+ msgid "Error: %s"
4080
+ msgstr ""
4081
+
4082
+ #: includes/class-wcj-shipping-by-time.php:115
4083
+ msgid "Time input is not parsable!"
4084
+ msgstr ""
4085
+
4086
  #: includes/class-wcj-shipping-by-user-role.php:25
4087
  msgid "Shipping Methods by Users"
4088
  msgstr ""
4513
  #: includes/admin/class-wc-settings-jetpack.php:380
4514
  #: includes/admin/class-wcj-tools.php:73
4515
  #: includes/export/class-wcj-fields-helper.php:293
4516
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:63
4517
  #: includes/settings/wcj-settings-checkout-custom-fields.php:172
4518
  #: includes/settings/wcj-settings-eu-vat-number.php:34
4519
  #: includes/settings/wcj-settings-product-by-user.php:13
4687
  #: includes/settings/wcj-settings-payment-gateways-by-currency.php:14
4688
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:37
4689
  #: includes/settings/wcj-settings-payment-gateways-by-user-role.php:14
4690
+ #: includes/settings/wcj-settings-payment-gateways-currency.php:15
4691
  #: includes/settings/wcj-settings-payment-gateways-min-max.php:65
4692
  #: includes/settings/wcj-settings-reports.php:118
4693
  msgid "Payment Gateways"
4709
  "Methods and more."
4710
  msgstr ""
4711
 
4712
+ #: includes/admin/wcj-modules-cats.php:161
4713
  msgid "PDF Invoicing & Packing Slips"
4714
  msgstr ""
4715
 
4716
+ #: includes/admin/wcj-modules-cats.php:162
4717
  msgid "PDF Documents"
4718
  msgstr ""
4719
 
4720
+ #: includes/admin/wcj-modules-cats.php:178
4721
  msgid "Emails & Misc."
4722
  msgstr ""
4723
 
4724
+ #: includes/admin/wcj-modules-cats.php:179
4725
  msgid "Emails, Reports, Export, Admin Tools, General Options and more."
4726
  msgstr ""
4727
 
4739
  msgid "Invisible"
4740
  msgstr ""
4741
 
4742
+ #: includes/classes/class-wcj-module.php:126
4743
  #, php-format
4744
  msgid ""
4745
  "Booster: Free plugin's version is limited to only one \"%1$s\" product with "
4748
  "\"%1$s\" products."
4749
  msgstr ""
4750
 
4751
+ #: includes/classes/class-wcj-module.php:441
4752
  #, php-format
4753
  msgid "Selected: %s."
4754
  msgstr ""
4755
 
4756
+ #: includes/classes/class-wcj-module.php:510
4757
  msgid "Back to Module Settings"
4758
  msgstr ""
4759
 
4760
+ #: includes/classes/class-wcj-module.php:528
4761
  #: includes/settings/wcj-settings-wpml.php:79
4762
  msgid "Module Tools"
4763
  msgstr ""
4764
 
4765
+ #: includes/classes/class-wcj-module.php:601
4766
  #: includes/settings/wcj-settings-checkout-core-fields.php:64
4767
  msgid "enabled"
4768
  msgstr ""
4769
 
4770
+ #: includes/classes/class-wcj-module.php:602
4771
  msgid "disabled"
4772
  msgstr ""
4773
 
4774
+ #: includes/classes/class-wcj-module.php:610
4775
  #: includes/settings/wcj-settings-product-tabs.php:172
4776
  #: includes/settings/wcj-settings-product-tabs.php:184
4777
  #: includes/settings/wcj-settings-product-tabs.php:196
4779
  msgid "Deprecated"
4780
  msgstr ""
4781
 
4782
+ #: includes/classes/class-wcj-module.php:648
4783
  msgid "Reset Settings"
4784
  msgstr ""
4785
 
4786
+ #: includes/classes/class-wcj-module.php:654
4787
  msgid "Reset Module to Default Settings"
4788
  msgstr ""
4789
 
4790
+ #: includes/classes/class-wcj-module.php:655
4791
  msgid "Reset Submodule to Default Settings"
4792
  msgstr ""
4793
 
4794
+ #: includes/classes/class-wcj-module.php:659
4795
  msgid "Reset settings"
4796
  msgstr ""
4797
 
4798
+ #: includes/classes/class-wcj-module.php:693
4799
  msgid "Module Options"
4800
  msgstr ""
4801
 
4802
+ #: includes/classes/class-wcj-module.php:700
4803
  msgid "Enable Module"
4804
  msgstr ""
4805
 
4808
  msgid "Company Name"
4809
  msgstr ""
4810
 
4811
+ #: includes/classes/class-wcj-pdf-invoice.php:251
4812
+ #: includes/functions/wcj-functions-general.php:145
4813
  #: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:245
4814
  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 ""
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
4896
  #: includes/settings/wcj-settings-checkout-custom-fields.php:121
5143
 
5144
  #: includes/export/class-wcj-fields-helper.php:80
5145
  #: includes/export/class-wcj-fields-helper.php:295
5146
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:148
5147
  msgid "URL"
5148
  msgstr ""
5149
 
5375
  #: includes/settings/meta-box/wcj-settings-meta-box-product-addons.php:45
5376
  #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:152
5377
  #: includes/shipping/class-wc-shipping-wcj-custom.php:114
5378
+ #: includes/widgets/class-wcj-widget-multicurrency.php:76
5379
  msgid "Type"
5380
  msgstr ""
5381
 
6654
  msgid "CoinMarketCap"
6655
  msgstr ""
6656
 
6657
+ #: includes/functions/wcj-functions-general.php:651
6658
  #: includes/settings/wcj-settings-cross-sells.php:73
6659
  #: includes/settings/wcj-settings-empty-cart.php:47
6660
  msgid "Before cart"
6661
  msgstr ""
6662
 
6663
+ #: includes/functions/wcj-functions-general.php:652
6664
  msgid "Before cart table"
6665
  msgstr ""
6666
 
6667
+ #: includes/functions/wcj-functions-general.php:653
6668
  msgid "Before cart contents"
6669
  msgstr ""
6670
 
6671
+ #: includes/functions/wcj-functions-general.php:654
6672
  msgid "Cart contents"
6673
  msgstr ""
6674
 
6675
+ #: includes/functions/wcj-functions-general.php:655
6676
  msgid "Cart coupon"
6677
  msgstr ""
6678
 
6679
+ #: includes/functions/wcj-functions-general.php:656
6680
  msgid "Cart actions"
6681
  msgstr ""
6682
 
6683
+ #: includes/functions/wcj-functions-general.php:657
6684
  msgid "After cart contents"
6685
  msgstr ""
6686
 
6687
+ #: includes/functions/wcj-functions-general.php:658
6688
  msgid "After cart table"
6689
  msgstr ""
6690
 
6691
+ #: includes/functions/wcj-functions-general.php:659
6692
  #: includes/settings/wcj-settings-cross-sells.php:74
6693
  msgid "Cart collaterals"
6694
  msgstr ""
6695
 
6696
+ #: includes/functions/wcj-functions-general.php:660
6697
  #: includes/settings/wcj-settings-cross-sells.php:75
6698
  #: includes/settings/wcj-settings-empty-cart.php:56
6699
  msgid "After cart"
6700
  msgstr ""
6701
 
6702
+ #: includes/functions/wcj-functions-general.php:662
6703
  msgid "Before cart totals"
6704
  msgstr ""
6705
 
6706
+ #: includes/functions/wcj-functions-general.php:663
6707
  #: includes/settings/wcj-settings-empty-cart.php:49
6708
  msgid "Cart totals: Before shipping"
6709
  msgstr ""
6710
 
6711
+ #: includes/functions/wcj-functions-general.php:664
6712
  #: includes/settings/wcj-settings-empty-cart.php:50
6713
  msgid "Cart totals: After shipping"
6714
  msgstr ""
6715
 
6716
+ #: includes/functions/wcj-functions-general.php:665
6717
  #: includes/settings/wcj-settings-empty-cart.php:51
6718
  msgid "Cart totals: Before order total"
6719
  msgstr ""
6720
 
6721
+ #: includes/functions/wcj-functions-general.php:666
6722
  #: includes/settings/wcj-settings-empty-cart.php:52
6723
  msgid "Cart totals: After order total"
6724
  msgstr ""
6725
 
6726
+ #: includes/functions/wcj-functions-general.php:667
6727
  msgid "Proceed to checkout"
6728
  msgstr ""
6729
 
6730
+ #: includes/functions/wcj-functions-general.php:668
6731
  msgid "After cart totals"
6732
  msgstr ""
6733
 
6734
+ #: includes/functions/wcj-functions-general.php:670
6735
  msgid "Before shipping calculator"
6736
  msgstr ""
6737
 
6738
+ #: includes/functions/wcj-functions-general.php:671
6739
  msgid "After shipping calculator"
6740
  msgstr ""
6741
 
6742
+ #: includes/functions/wcj-functions-general.php:673
6743
  msgid "If cart is empty"
6744
  msgstr ""
6745
 
6861
  msgid "You have Free delivery"
6862
  msgstr ""
6863
 
6864
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:50
6865
  msgid "Enable Custom Payment"
6866
  msgstr ""
6867
 
6868
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:57
6869
  #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:146
6870
  #: includes/shipping/class-wc-shipping-wcj-custom.php:109
6871
  msgid "This controls the title which the user sees during checkout."
6872
  msgstr ""
6873
 
6874
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:58
6875
  msgid "Custom Payment"
6876
  msgstr ""
6877
 
6878
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:65
6879
  msgid "Payment method description that the customer will see on your checkout."
6880
  msgstr ""
6881
 
6882
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:66
6883
  msgid "You can add input fields with [wcj_input_field] shortcode."
6884
  msgstr ""
6885
 
6886
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:67
6887
  msgid "Custom Payment Description."
6888
  msgstr ""
6889
 
6890
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:72
6891
  msgid "Instructions"
6892
  msgstr ""
6893
 
6894
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:74
6895
  msgid "Instructions that will be added to the thank you page."
6896
  msgstr ""
6897
 
6898
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:80
6899
  msgid "Email Instructions"
6900
  msgstr ""
6901
 
6902
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:82
6903
  msgid "Instructions that will be added to the emails."
6904
  msgstr ""
6905
 
6906
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:88
6907
  msgid "Icon"
6908
  msgstr ""
6909
 
6910
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:90
6911
  #: includes/settings/wcj-settings-payment-gateways-icons.php:16
6912
  msgid ""
6913
  "If you want to show an image next to the gateway's name on the frontend, "
6914
  "enter a URL to an image."
6915
  msgstr ""
6916
 
6917
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:97
6918
  #: includes/settings/wcj-settings-shipping-by-order-amount.php:57
6919
  msgid "Minimum order amount"
6920
  msgstr ""
6921
 
6922
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:99
6923
  msgid ""
6924
  "If you want to set minimum order amount (excluding fees) to show this "
6925
  "gateway on frontend, enter a number here. Set to 0 to disable."
6926
  msgstr ""
6927
 
6928
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:106
6929
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:59
6930
  msgid "Enable for shipping methods"
6931
  msgstr ""
6932
 
6933
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:111
6934
  msgid ""
6935
  "If gateway is only available for certain shipping methods, set it up here. "
6936
  "Leave blank to enable for all methods."
6937
  msgstr ""
6938
 
6939
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:114
6940
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:66
6941
  msgid "Select shipping methods"
6942
  msgstr ""
6943
 
6944
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:118
6945
  msgid "Enable for virtual orders"
6946
  msgstr ""
6947
 
6948
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:119
6949
  msgid "Enable gateway if the order is virtual"
6950
  msgstr ""
6951
 
6952
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:125
6953
  #: includes/settings/wcj-settings-order-custom-statuses.php:19
6954
  msgid "Default Order Status"
6955
  msgstr ""
6956
 
6957
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:126
6958
  msgid "Enable Custom Statuses feature to add custom statuses to the list."
6959
  msgstr ""
6960
 
6961
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:133
6962
  msgid "Send Additional Emails"
6963
  msgstr ""
6964
 
6965
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:134
6966
  msgid "Send to Admin"
6967
  msgstr ""
6968
 
6969
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:140
6970
  msgid "Send to Customer"
6971
  msgstr ""
6972
 
6973
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:141
6974
  msgid ""
6975
  "This may help if you are using pending or custom default status and not "
6976
  "getting new order emails."
6977
  msgstr ""
6978
 
6979
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:147
6980
  msgid "Custom Return URL (Thank You Page)"
6981
  msgstr ""
6982
 
6983
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:149
6984
  msgid "Enter full URL with http(s)."
6985
  msgstr ""
6986
 
6987
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:150
6988
  msgid "Optional. Leave blank to use default URL."
6989
  msgstr ""
6990
 
6991
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:346
6992
  #: includes/settings/wcj-settings-payment-gateways.php:38
6993
  msgid "Custom Gateway"
6994
  msgstr ""
6995
 
6996
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:347
6997
  msgid "Booster for WooCommerce: Custom Payment Gateway"
6998
  msgstr ""
6999
 
7007
 
7008
  #: includes/input-fields/class-wcj-product-input-fields-core.php:167
7009
  #: includes/input-fields/class-wcj-product-input-fields-core.php:322
7010
+ #: includes/settings/wcj-settings-product-input-fields.php:84
7011
  msgid "Product Input Field"
7012
  msgstr ""
7013
 
7019
  msgid "File is too big!"
7020
  msgstr ""
7021
 
7022
+ #: includes/input-fields/class-wcj-product-input-fields-core.php:642
7023
  msgid "Select a country&hellip;"
7024
  msgstr ""
7025
 
7437
  msgid ""
7438
  "This option is disabled with \"Disable Saving PDFs in PHP directory for "
7439
  "temporary files\" checkbox in <a href=\"%s\" target=\"_blank\">WooCommerce > "
7440
+ "Settings > Booster > PDF Invoicing & Packing Slips > Advanced</a>."
7441
  msgstr ""
7442
 
7443
  #: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:80
7581
  msgstr ""
7582
 
7583
  #: includes/pdf-invoices/submodules/class-wcj-pdf-invoicing-footer.php:21
7584
+ #: includes/settings/wcj-settings-custom-css.php:25
7585
+ #: includes/settings/wcj-settings-custom-js.php:25
7586
  msgid "Footer"
7587
  msgstr ""
7588
 
7589
  #: includes/pdf-invoices/submodules/class-wcj-pdf-invoicing-header.php:23
7590
+ #: includes/settings/wcj-settings-custom-css.php:24
7591
+ #: includes/settings/wcj-settings-custom-js.php:24
7592
  msgid "Header"
7593
  msgstr ""
7594
 
7961
  #: includes/settings/wcj-settings-order-quantities.php:79
7962
  #: includes/settings/wcj-settings-order-quantities.php:180
7963
  #: includes/settings/wcj-settings-order-quantities.php:213
7964
+ #: includes/settings/wcj-settings-orders.php:150
7965
  #: includes/settings/wcj-settings-price-formats.php:37
7966
  #: includes/settings/wcj-settings-product-add-to-cart.php:273
7967
  #: includes/settings/wcj-settings-product-listings.php:138
7968
  #: includes/settings/wcj-settings-sale-flash.php:20
7969
  #: includes/settings/wcj-settings-sale-flash.php:65
7970
  #: includes/settings/wcj-settings-sale-flash.php:90
7971
+ #: includes/settings/wcj-settings-shipping-by-condition.php:48
7972
  #: includes/settings/wcj-settings-shipping-options.php:21
7973
  #: includes/settings/wcj-settings-stock.php:20
7974
  #: includes/settings/wcj-settings-stock.php:87
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
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
8575
  msgid "Change Breadcrumbs Home URL"
8576
  msgstr ""
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
8742
  #: includes/settings/wcj-settings-shipping-by-order-amount.php:15
8743
  #: includes/settings/wcj-settings-shipping-time.php:25
8744
  #: includes/settings/wcj-settings-wpml.php:22
8924
  msgstr ""
8925
 
8926
  #: includes/settings/wcj-settings-checkout-custom-fields.php:96
8927
+ #: includes/settings/wcj-settings-product-input-fields.php:61
8928
  msgid "Click Save changes after you change this number."
8929
  msgstr ""
8930
 
8953
 
8954
  #: includes/settings/wcj-settings-checkout-custom-fields.php:199
8955
  #: includes/settings/wcj-settings-eu-vat-number.php:63
8956
+ #: includes/widgets/class-wcj-widget-multicurrency.php:100
8957
  msgid "Class"
8958
  msgstr ""
8959
 
9372
  #: includes/settings/wcj-settings-my-account.php:143
9373
  #: includes/settings/wcj-settings-my-account.php:203
9374
  #: includes/settings/wcj-settings-sale-flash.php:27
9375
+ #: includes/settings/wcj-settings-sale-flash.php:111
9376
  #: includes/settings/meta-box/wcj-settings-meta-box-add-to-cart-button-visibility.php:30
9377
  #: includes/settings/meta-box/wcj-settings-meta-box-add-to-cart-button-visibility.php:49
9378
  msgid "You can use HTML and/or shortcodes here."
9588
  msgstr ""
9589
 
9590
  #: includes/settings/wcj-settings-checkout-files-upload.php:250
9591
+ #: includes/settings/wcj-settings-product-input-fields.php:287
9592
  msgid "Emails Options"
9593
  msgstr ""
9594
 
9595
  #: includes/settings/wcj-settings-checkout-files-upload.php:255
9596
+ #: includes/settings/wcj-settings-product-input-fields.php:292
9597
  msgid "Attach Files to Admin's New Order Emails"
9598
  msgstr ""
9599
 
9600
  #: includes/settings/wcj-settings-checkout-files-upload.php:256
9601
  #: includes/settings/wcj-settings-checkout-files-upload.php:263
9602
+ #: includes/settings/wcj-settings-product-input-fields.php:293
9603
+ #: includes/settings/wcj-settings-product-input-fields.php:300
9604
  msgid "Attach"
9605
  msgstr ""
9606
 
9607
  #: includes/settings/wcj-settings-checkout-files-upload.php:262
9608
+ #: includes/settings/wcj-settings-product-input-fields.php:299
9609
  msgid "Attach Files to Customer's Processing Order Emails"
9610
  msgstr ""
9611
 
9637
  #: includes/settings/wcj-settings-checkout-files-upload.php:298
9638
  #: includes/settings/wcj-settings-checkout-files-upload.php:352
9639
  #: includes/settings/wcj-settings-checkout-files-upload.php:393
9640
+ #: includes/settings/wcj-settings-product-addons.php:330
9641
+ #: includes/settings/wcj-settings-product-addons.php:361
9642
  msgid "Before"
9643
  msgstr ""
9644
 
9660
  #: includes/settings/wcj-settings-checkout-files-upload.php:321
9661
  #: includes/settings/wcj-settings-checkout-files-upload.php:367
9662
  #: includes/settings/wcj-settings-checkout-files-upload.php:408
9663
+ #: includes/settings/wcj-settings-product-addons.php:345
9664
+ #: includes/settings/wcj-settings-product-addons.php:376
9665
  msgid "After"
9666
  msgstr ""
9667
 
9701
  #: includes/settings/wcj-settings-pdf-invoicing-advanced.php:43
9702
  #: includes/settings/wcj-settings-product-by-date.php:117
9703
  #: includes/settings/wcj-settings-product-custom-info.php:186
9704
+ #: includes/settings/wcj-settings-product-input-fields.php:330
9705
+ #: includes/settings/wcj-settings-shipping-by-condition.php:108
9706
  msgid "Advanced Options"
9707
  msgstr ""
9708
 
9914
  msgstr ""
9915
 
9916
  #: includes/settings/wcj-settings-cross-sells.php:79
9917
+ #: includes/settings/wcj-settings-product-input-fields.php:200
9918
  #: includes/settings/wcj-settings-upsells.php:66
9919
  msgid "Position priority"
9920
  msgstr ""
9993
  #: includes/settings/wcj-settings-currency-per-product.php:119
9994
  #: includes/settings/wcj-settings-multicurrency-base-price.php:22
9995
  #: includes/settings/wcj-settings-multicurrency.php:22
9996
+ #: includes/settings/wcj-settings-payment-gateways-currency.php:66
9997
  #: includes/settings/wcj-settings-price-by-country.php:282
9998
  msgid "Exchange Rates Updates"
9999
  msgstr ""
10172
  #: includes/settings/wcj-settings-currency-per-product.php:124
10173
  #: includes/settings/wcj-settings-multicurrency-base-price.php:27
10174
  #: includes/settings/wcj-settings-multicurrency.php:28
10175
+ #: includes/settings/wcj-settings-payment-gateways-currency.php:71
10176
  #: includes/settings/wcj-settings-price-by-country.php:287
10177
  msgid "Enter Rates Manually"
10178
  msgstr ""
10180
  #: includes/settings/wcj-settings-currency-per-product.php:125
10181
  #: includes/settings/wcj-settings-multicurrency-base-price.php:28
10182
  #: includes/settings/wcj-settings-multicurrency.php:29
10183
+ #: includes/settings/wcj-settings-payment-gateways-currency.php:72
10184
  #: includes/settings/wcj-settings-price-by-country.php:288
10185
  msgid "Automatically via Currency Exchange Rates module"
10186
  msgstr ""
10188
  #: includes/settings/wcj-settings-currency-per-product.php:128
10189
  #: includes/settings/wcj-settings-multicurrency-base-price.php:31
10190
  #: includes/settings/wcj-settings-multicurrency.php:32
10191
+ #: includes/settings/wcj-settings-payment-gateways-currency.php:75
10192
  #: includes/settings/wcj-settings-price-by-country.php:291
10193
  msgid "Visit"
10194
  msgstr ""
10196
  #: includes/settings/wcj-settings-currency-per-product.php:128
10197
  #: includes/settings/wcj-settings-multicurrency-base-price.php:31
10198
  #: includes/settings/wcj-settings-multicurrency.php:32
10199
+ #: includes/settings/wcj-settings-payment-gateways-currency.php:77
10200
  #: includes/settings/wcj-settings-price-by-country.php:291
10201
  msgid "Currency Exchange Rates module"
10202
  msgstr ""
10274
  msgstr ""
10275
 
10276
  #: includes/settings/wcj-settings-custom-css.php:19
10277
+ #: includes/settings/wcj-settings-custom-js.php:19
10278
+ msgid "Code Position"
10279
+ msgstr ""
10280
+
10281
+ #: includes/settings/wcj-settings-custom-css.php:29
10282
  msgid "Custom CSS - Front end (Customers)"
10283
  msgstr ""
10284
 
10285
+ #: includes/settings/wcj-settings-custom-css.php:36
10286
  msgid "Custom CSS - Back end (Admin)"
10287
  msgstr ""
10288
 
10289
+ #: includes/settings/wcj-settings-custom-css.php:43
10290
  msgid "Custom CSS on per Product Basis"
10291
  msgstr ""
10292
 
10293
+ #: includes/settings/wcj-settings-custom-css.php:45
10294
  msgid ""
10295
  "Set product specific CSS to be loaded only on specific product's single page."
10296
  msgstr ""
10297
 
10298
+ #: includes/settings/wcj-settings-custom-css.php:46
10299
  #: includes/settings/wcj-settings-order-quantities.php:54
10300
  #: includes/settings/wcj-settings-order-quantities.php:112
10301
  #: includes/settings/wcj-settings-order-quantities.php:196
10303
  msgid "This will add meta box to each product's edit page."
10304
  msgstr ""
10305
 
10306
+ #: includes/settings/wcj-settings-custom-css.php:52
10307
  msgid "Custom CSS on per Product Basis - Default Field Value"
10308
  msgstr ""
10309
 
10310
+ #: includes/settings/wcj-settings-custom-js.php:29
10311
  msgid "Custom JS - Front end (Customers)"
10312
  msgstr ""
10313
 
10314
+ #: includes/settings/wcj-settings-custom-js.php:36
10315
  msgid "Custom JS - Back end (Admin)"
10316
  msgstr ""
10317
 
10318
+ #: includes/settings/wcj-settings-custom-php.php:27
10319
+ #, php-format
10320
+ msgid "Without the %s tag."
10321
+ msgstr ""
10322
+
10323
+ #: includes/settings/wcj-settings-custom-php.php:29
10324
+ #, php-format
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 ""
11054
  msgstr ""
11055
 
11056
  #: includes/settings/wcj-settings-global-discount.php:180
11057
+ msgid "Global Discount in Admin"
11058
+ msgstr ""
11059
+
11060
+ #: includes/settings/wcj-settings-global-discount.php:182
11061
+ msgid ""
11062
+ "This will enable \"global discount\" product pricing in backend. It will "
11063
+ "also affect some modules, e.g.: \"Products XML Feeds\" module."
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
 
11071
+ #: includes/settings/wcj-settings-global-discount.php:189
11072
  #: includes/settings/wcj-settings-multicurrency-base-price.php:68
11073
  #: includes/settings/wcj-settings-multicurrency.php:112
11074
  #: includes/settings/wcj-settings-price-by-country.php:157
11373
  "Add additional price filters here. One per line. Leave blank if not sure."
11374
  msgstr ""
11375
 
 
 
 
 
 
 
11376
  #: includes/settings/wcj-settings-multicurrency.php:124
11377
  msgid ""
11378
  "One currency probably should be set to current (original) shop currency with "
11959
  msgid "Enable this if you want the statuses in Status column to have colors."
11960
  msgstr ""
11961
 
11962
+ #: includes/settings/wcj-settings-order-custom-statuses.php:96
11963
+ msgid "Add Custom Statuses Buttons to Admin Order Preview Actions"
11964
+ msgstr ""
11965
+
11966
+ #: includes/settings/wcj-settings-order-custom-statuses.php:98
11967
+ msgid ""
11968
+ "If you wish to add custom statuses buttons to the admin orders preview page, "
11969
+ "enable the checkbox here."
11970
+ msgstr ""
11971
+
11972
  #: includes/settings/wcj-settings-order-min-amount.php:16
11973
  msgid "This section lets you set minimum order amount."
11974
  msgstr ""
12376
  msgstr ""
12377
 
12378
  #: includes/settings/wcj-settings-orders.php:72
12379
+ msgid "Editable Orders"
12380
+ msgstr ""
12381
+
12382
+ #: includes/settings/wcj-settings-orders.php:73
12383
+ msgid "This section allows you to set which order statuses are editable."
12384
+ msgstr ""
12385
+
12386
+ #: includes/settings/wcj-settings-orders.php:78
12387
+ msgid "Editable Orders Statuses"
12388
+ msgstr ""
12389
+
12390
+ #: includes/settings/wcj-settings-orders.php:91
12391
+ msgid "Auto-draft"
12392
+ msgstr ""
12393
+
12394
+ #: includes/settings/wcj-settings-orders.php:98
12395
  msgid "Orders Auto-Complete"
12396
  msgstr ""
12397
 
12398
+ #: includes/settings/wcj-settings-orders.php:100
12399
  msgid "This section lets you enable orders auto-complete function."
12400
  msgstr ""
12401
 
12402
+ #: includes/settings/wcj-settings-orders.php:104
12403
  msgid "Auto-complete all WooCommerce orders"
12404
  msgstr ""
12405
 
12406
+ #: includes/settings/wcj-settings-orders.php:106
12407
  msgid ""
12408
  "E.g. if you sell digital products then you are not shipping anything and you "
12409
  "may want auto-complete all your orders."
12410
  msgstr ""
12411
 
12412
+ #: includes/settings/wcj-settings-orders.php:113
12413
  msgid ""
12414
  "Fill this, if you want orders to be auto-completed for selected payment "
12415
  "methods only. Leave blank to auto-complete all orders."
12416
  msgstr ""
12417
 
12418
+ #: includes/settings/wcj-settings-orders.php:131
12419
  msgid "Add Country by IP Meta Box"
12420
  msgstr ""
12421
 
12422
+ #: includes/settings/wcj-settings-orders.php:133
12423
  msgid ""
12424
  "When enabled this will add \"Booster: Country by IP\" metabox to each "
12425
  "order's edit page."
12426
  msgstr ""
12427
 
12428
+ #: includes/settings/wcj-settings-orders.php:143
12429
  msgid "Bulk Regenerate Download Permissions for Orders"
12430
  msgstr ""
12431
 
12432
+ #: includes/settings/wcj-settings-orders.php:148
12433
  msgid "Bulk Regenerate Download Permissions"
12434
  msgstr ""
12435
 
12436
+ #: includes/settings/wcj-settings-orders.php:157
12437
  msgid "Bulk Actions"
12438
  msgstr ""
12439
 
12440
+ #: includes/settings/wcj-settings-orders.php:158
12441
  msgid ""
12442
  "When enabled this will add \"Regenerate download permissions\" action to "
12443
  "\"Bulk Actions\" select box on admin orders page."
12444
  msgstr ""
12445
 
12446
+ #: includes/settings/wcj-settings-orders.php:166
12447
  msgid "All Orders - Now"
12448
  msgstr ""
12449
 
12450
+ #: includes/settings/wcj-settings-orders.php:167
12451
  msgid ""
12452
  "Check this box and press \"Save changes\" button to start regeneration. "
12453
  "Please note that both module and current section must be enabled before that."
12454
  msgstr ""
12455
 
12456
+ #: includes/settings/wcj-settings-orders.php:168
12457
  msgid "Regenerate now"
12458
  msgstr ""
12459
 
12460
+ #: includes/settings/wcj-settings-orders.php:175
12461
  msgid "All Orders - Periodically"
12462
  msgstr ""
12463
 
12464
+ #: includes/settings/wcj-settings-orders.php:181
12465
  msgid "Regenerate"
12466
  msgstr ""
12467
 
12501
  msgid "Include Postcodes (one per line)"
12502
  msgstr ""
12503
 
 
 
 
 
 
 
 
12504
  #: includes/settings/wcj-settings-payment-gateways-by-country.php:130
12505
  msgid "Exclude Postcodes (one per line)"
12506
  msgstr ""
12507
 
12508
  #: includes/settings/wcj-settings-payment-gateways-by-currency.php:16
12509
  #: includes/settings/wcj-settings-payment-gateways-by-user-role.php:16
12510
+ #: includes/settings/wcj-settings-shipping-by-condition.php:43
12511
  msgid "Leave empty to disable."
12512
  msgstr ""
12513
 
12525
  msgstr ""
12526
 
12527
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:22
12528
+ #: includes/settings/wcj-settings-shipping-by-condition.php:25
12529
  #: includes/settings/wcj-settings-shipping-by-order-amount.php:20
12530
  #: includes/settings/wcj-settings-shipping-description.php:58
12531
  #: includes/settings/wcj-settings-shipping-icons.php:60
12534
  msgstr ""
12535
 
12536
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:24
12537
+ #: includes/settings/wcj-settings-shipping-by-condition.php:27
12538
  #: includes/settings/wcj-settings-shipping-by-order-amount.php:22
12539
  #: includes/settings/wcj-settings-shipping-description.php:60
12540
  #: includes/settings/wcj-settings-shipping-icons.php:62
12566
  msgid "Exclude User Roles"
12567
  msgstr ""
12568
 
 
 
 
 
12569
  #: includes/settings/wcj-settings-payment-gateways-currency.php:17
12570
  msgid "This section lets you set different currency for each payment gateway."
12571
  msgstr ""
12572
 
12573
+ #: includes/settings/wcj-settings-payment-gateways-currency.php:82
12574
+ msgid "Show Converted Prices"
12575
+ msgstr ""
12576
+
12577
+ #: includes/settings/wcj-settings-payment-gateways-currency.php:87
12578
+ #: includes/settings/wcj-settings-shipping-description.php:26
12579
+ #: includes/settings/wcj-settings-shipping-icons.php:35
12580
+ msgid "On both cart and checkout pages"
12581
+ msgstr ""
12582
+
12583
+ #: includes/settings/wcj-settings-payment-gateways-currency.php:88
12584
+ msgid "On checkout page only"
12585
+ msgstr ""
12586
+
12587
+ #: includes/settings/wcj-settings-payment-gateways-currency.php:92
12588
  msgid "Advanced: Fix \"Chosen Payment Method\""
12589
  msgstr ""
12590
 
12591
+ #: includes/settings/wcj-settings-payment-gateways-currency.php:94
12592
  msgid ""
12593
  "Enable this if you are having compatibility issues with some other plugins "
12594
  "or modules."
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
 
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
 
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
 
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
 
14113
 
14114
  #: includes/settings/wcj-settings-product-addons.php:206
14115
  #: includes/settings/wcj-settings-product-custom-info.php:109
14116
+ #: includes/settings/wcj-settings-product-input-fields.php:195
14117
  #: includes/settings/wcj-settings-product-open-pricing.php:17
14118
  msgid "Before add to cart button"
14119
  msgstr ""
14120
 
14121
  #: includes/settings/wcj-settings-product-addons.php:207
14122
  #: includes/settings/wcj-settings-product-custom-info.php:110
14123
+ #: includes/settings/wcj-settings-product-input-fields.php:196
14124
  #: includes/settings/wcj-settings-product-open-pricing.php:18
14125
  msgid "After add to cart button"
14126
  msgstr ""
14130
  msgstr ""
14131
 
14132
  #: includes/settings/wcj-settings-product-addons.php:212
14133
+ #: includes/settings/wcj-settings-shipping-by-condition.php:114
14134
  #: includes/settings/wcj-settings-shipping-options.php:41
14135
  msgid "Set to zero to use the default priority."
14136
  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 "
14186
  msgstr ""
14187
 
14188
  #: includes/settings/wcj-settings-product-addons.php:297
14189
+ msgid "Each Addon - Type: Select Box (Each Option)"
14190
  msgstr ""
14191
 
14192
  #: includes/settings/wcj-settings-product-addons.php:305
14193
+ msgid "Each Addon - Type: Radio Button (Each)"
14194
+ msgstr ""
14195
+
14196
+ #: includes/settings/wcj-settings-product-addons.php:313
14197
  msgid "All Addons - Final"
14198
  msgstr ""
14199
 
14200
+ #: includes/settings/wcj-settings-product-addons.php:325
14201
  msgid "Cart Template"
14202
  msgstr ""
14203
 
14204
+ #: includes/settings/wcj-settings-product-addons.php:337
14205
+ #: includes/settings/wcj-settings-product-addons.php:368
14206
  msgid "Each Addon"
14207
  msgstr ""
14208
 
14209
+ #: includes/settings/wcj-settings-product-addons.php:356
14210
  msgid "Order Details Table Template"
14211
  msgstr ""
14212
 
14797
  msgid "Comma separated list of product IDs to exclude from product info."
14798
  msgstr ""
14799
 
14800
+ #: includes/settings/wcj-settings-product-input-fields.php:15
14801
  msgid "Product Input Fields per Product Options"
14802
  msgstr ""
14803
 
14804
+ #: includes/settings/wcj-settings-product-input-fields.php:17
14805
+ #: includes/settings/wcj-settings-product-input-fields.php:48
14806
  msgid ""
14807
  "Add custom input fields to product's single page for customer to fill before "
14808
  "adding product to cart."
14809
  msgstr ""
14810
 
14811
+ #: includes/settings/wcj-settings-product-input-fields.php:18
14812
  msgid ""
14813
  "When enabled this module will add \"Product Input Fields\" tab to each "
14814
  "product's \"Edit\" page."
14815
  msgstr ""
14816
 
14817
+ #: includes/settings/wcj-settings-product-input-fields.php:22
14818
  msgid "Product Input Fields - per Product"
14819
  msgstr ""
14820
 
14821
+ #: includes/settings/wcj-settings-product-input-fields.php:24
14822
  msgid "Add custom input field on per product basis."
14823
  msgstr ""
14824
 
14825
+ #: includes/settings/wcj-settings-product-input-fields.php:30
14826
  msgid "Default Number of Product Input Fields per Product"
14827
  msgstr ""
14828
 
14829
+ #: includes/settings/wcj-settings-product-input-fields.php:32
14830
  msgid ""
14831
  "You will be able to change this number later as well as define the fields, "
14832
  "for each product individually, in product's \"Edit\"."
14833
  msgstr ""
14834
 
14835
+ #: includes/settings/wcj-settings-product-input-fields.php:46
14836
  msgid "Product Input Fields Global Options"
14837
  msgstr ""
14838
 
14839
+ #: includes/settings/wcj-settings-product-input-fields.php:52
14840
  msgid "Product Input Fields - All Products"
14841
  msgstr ""
14842
 
14843
+ #: includes/settings/wcj-settings-product-input-fields.php:54
14844
  msgid "Add custom input fields to all products."
14845
  msgstr ""
14846
 
14847
+ #: includes/settings/wcj-settings-product-input-fields.php:60
14848
  msgid "Product Input Fields Number"
14849
  msgstr ""
14850
 
14851
+ #: includes/settings/wcj-settings-product-input-fields.php:111
14852
  msgid "Product categories to include."
14853
  msgstr ""
14854
 
14855
+ #: includes/settings/wcj-settings-product-input-fields.php:112
14856
+ #: includes/settings/wcj-settings-product-input-fields.php:123
14857
+ #: includes/settings/wcj-settings-product-input-fields.php:134
14858
+ #: includes/settings/wcj-settings-product-input-fields.php:145
14859
+ #: includes/settings/wcj-settings-product-input-fields.php:157
14860
+ #: includes/settings/wcj-settings-product-input-fields.php:169
14861
  #: includes/settings/wcj-settings-wholesale-price.php:84
14862
  #: includes/settings/wcj-settings-wholesale-price.php:101
14863
  msgid "Leave blank to include all products."
14864
  msgstr ""
14865
 
14866
+ #: includes/settings/wcj-settings-product-input-fields.php:122
14867
  msgid "Product categories to exclude."
14868
  msgstr ""
14869
 
14870
+ #: includes/settings/wcj-settings-product-input-fields.php:132
14871
  msgid "Product Tags - Include"
14872
  msgstr ""
14873
 
14874
+ #: includes/settings/wcj-settings-product-input-fields.php:133
14875
  msgid "Product tags to include."
14876
  msgstr ""
14877
 
14878
+ #: includes/settings/wcj-settings-product-input-fields.php:143
14879
  msgid "Product Tags - Exclude"
14880
  msgstr ""
14881
 
14882
+ #: includes/settings/wcj-settings-product-input-fields.php:144
14883
  msgid "Product tags to exclude."
14884
  msgstr ""
14885
 
14886
+ #: includes/settings/wcj-settings-product-input-fields.php:156
14887
  msgid "Products to include."
14888
  msgstr ""
14889
 
14890
+ #: includes/settings/wcj-settings-product-input-fields.php:168
14891
  msgid "Products to exclude."
14892
  msgstr ""
14893
 
14894
+ #: includes/settings/wcj-settings-product-input-fields.php:185
14895
  msgid "Frontend View Options"
14896
  msgstr ""
14897
 
14898
+ #: includes/settings/wcj-settings-product-input-fields.php:190
14899
  msgid "Position on Single Product Page"
14900
  msgstr ""
14901
 
14902
+ #: includes/settings/wcj-settings-product-input-fields.php:206
14903
  msgid "HTML Template - Start"
14904
  msgstr ""
14905
 
14906
+ #: includes/settings/wcj-settings-product-input-fields.php:213
14907
  msgid "HTML Template - Each Field"
14908
  msgstr ""
14909
 
14910
+ #: includes/settings/wcj-settings-product-input-fields.php:220
14911
  msgid "HTML Template - End"
14912
  msgstr ""
14913
 
14914
+ #: includes/settings/wcj-settings-product-input-fields.php:227
14915
  msgid "HTML Template - Radio Field"
14916
  msgstr ""
14917
 
14918
+ #: includes/settings/wcj-settings-product-input-fields.php:234
14919
  msgid "HTML to add after required field title"
14920
  msgstr ""
14921
 
14922
+ #: includes/settings/wcj-settings-product-input-fields.php:241
14923
  msgid "Cart Display Options"
14924
  msgstr ""
14925
 
14926
+ #: includes/settings/wcj-settings-product-input-fields.php:242
14927
  msgid ""
14928
  "When \"Add to cart item data\" is selected, \"Cart HTML Template\" options "
14929
  "below will be ignored."
14930
  msgstr ""
14931
 
14932
+ #: includes/settings/wcj-settings-product-input-fields.php:247
14933
  msgid "Add to cart item name"
14934
  msgstr ""
14935
 
14936
+ #: includes/settings/wcj-settings-product-input-fields.php:248
14937
  msgid "Add to cart item data"
14938
  msgstr ""
14939
 
14940
+ #: includes/settings/wcj-settings-product-input-fields.php:252
14941
  msgid "Cart HTML Template - Start"
14942
  msgstr ""
14943
 
14944
+ #: includes/settings/wcj-settings-product-input-fields.php:259
14945
  msgid "Cart HTML Template - Each Field"
14946
  msgstr ""
14947
 
14948
+ #: includes/settings/wcj-settings-product-input-fields.php:266
14949
  msgid "Cart HTML Template - End"
14950
  msgstr ""
14951
 
14952
+ #: includes/settings/wcj-settings-product-input-fields.php:273
14953
  msgid "Order Table Template - Each Field"
14954
  msgstr ""
14955
 
14956
+ #: includes/settings/wcj-settings-product-input-fields.php:274
14957
  msgid "Affects Order received page, Emails and Admin Orders View"
14958
  msgstr ""
14959
 
14960
+ #: includes/settings/wcj-settings-product-input-fields.php:312
14961
  msgid "Admin Order View Options"
14962
  msgstr ""
14963
 
14964
+ #: includes/settings/wcj-settings-product-input-fields.php:317
14965
  msgid "Replace Field ID with Field Label"
14966
  msgstr ""
14967
 
14968
+ #: includes/settings/wcj-settings-product-input-fields.php:335
14969
  msgid "Check for Outputted Data"
14970
  msgstr ""
14971
 
14972
+ #: includes/settings/wcj-settings-product-input-fields.php:343
14973
+ msgid "Strip Slashes"
14974
+ msgstr ""
14975
+
14976
+ #: includes/settings/wcj-settings-product-input-fields.php:345
14977
+ #, php-format
14978
+ msgid "Enable this if you have single quotes %s converted to %s."
14979
+ msgstr ""
14980
+
14981
  #: includes/settings/wcj-settings-product-listings.php:31
14982
  msgid "Shop Page Display Options"
14983
  msgstr ""
16037
  msgid "Per Tag"
16038
  msgstr ""
16039
 
16040
+ #: includes/settings/wcj-settings-sale-flash.php:98
16041
+ msgid "Terms to Modify"
16042
+ msgstr ""
16043
+
16044
+ #: includes/settings/wcj-settings-sale-flash.php:99
16045
+ msgid "Save changes to see new option fields."
16046
+ msgstr ""
16047
+
16048
+ #: includes/settings/wcj-settings-sale-flash.php:110
16049
+ #, php-format
16050
+ msgid "Term #%s"
16051
+ msgstr ""
16052
+
16053
+ #: includes/settings/wcj-settings-shipping-by-condition.php:41
16054
+ #: includes/settings/wcj-settings-shipping-by-condition.php:47
16055
  #, php-format
16056
  msgid "Shipping Methods by %s"
16057
  msgstr ""
16058
 
16059
+ #: includes/settings/wcj-settings-shipping-by-condition.php:77
16060
  #, php-format
16061
  msgid "Include %s"
16062
  msgstr ""
16063
 
16064
+ #: includes/settings/wcj-settings-shipping-by-condition.php:88
16065
  #, php-format
16066
  msgid "Exclude %s"
16067
  msgstr ""
16068
 
16069
+ #: includes/settings/wcj-settings-shipping-by-condition.php:113
16070
  msgid "Filter Priority"
16071
  msgstr ""
16072
 
16144
  msgid "Description Visibility"
16145
  msgstr ""
16146
 
 
 
 
 
 
16147
  #: includes/settings/wcj-settings-shipping-description.php:27
16148
  #: includes/settings/wcj-settings-shipping-icons.php:36
16149
  msgid "Only on cart page"
17617
  msgid "Edit Product"
17618
  msgstr ""
17619
 
17620
+ #: includes/shortcodes/class-wcj-shortcodes-products.php:328
17621
  #, php-format
17622
  msgid "%s ago"
17623
  msgstr ""
17624
 
17625
+ #: includes/shortcodes/class-wcj-shortcodes-products.php:335
17626
  msgid "No sales yet."
17627
  msgstr ""
17628
 
17629
+ #: includes/shortcodes/class-wcj-shortcodes-products.php:562
17630
  msgid "In stock"
17631
  msgstr ""
17632
 
17788
  msgid "Multicurrency module not enabled!"
17789
  msgstr ""
17790
 
17791
+ #: includes/widgets/class-wcj-widget-multicurrency.php:81
17792
  msgid "Drop down"
17793
  msgstr ""
17794
 
17795
+ #: includes/widgets/class-wcj-widget-multicurrency.php:82
17796
  msgid "Radio list"
17797
  msgstr ""
17798
 
17799
+ #: includes/widgets/class-wcj-widget-multicurrency.php:83
17800
  msgid "Link list"
17801
  msgstr ""
17802
 
17803
+ #: includes/widgets/class-wcj-widget-multicurrency.php:88
17804
+ msgid "Form Method"
17805
+ msgstr ""
17806
+
17807
+ #: includes/widgets/class-wcj-widget-multicurrency.php:89
17808
+ msgid "HTML form method for \"Drop down\" and \"Radio list\" types."
17809
+ msgstr ""
17810
+
17811
+ #: includes/widgets/class-wcj-widget-multicurrency.php:94
17812
+ msgid "Post"
17813
+ msgstr ""
17814
+
17815
+ #: includes/widgets/class-wcj-widget-multicurrency.php:95
17816
+ msgid "Get"
17817
+ msgstr ""
17818
+
17819
+ #: includes/widgets/class-wcj-widget-multicurrency.php:101
17820
+ msgid "HTML class for \"Drop down\" type."
17821
+ msgstr ""
17822
+
17823
+ #: includes/widgets/class-wcj-widget-multicurrency.php:108
17824
+ msgid "Style"
17825
+ msgstr ""
17826
+
17827
+ #: includes/widgets/class-wcj-widget-multicurrency.php:109
17828
+ msgid "HTML style for \"Drop down\" type."
17829
+ msgstr ""
17830
+
17831
  #: includes/widgets/class-wcj-widget-selector.php:29
17832
  msgid "Booster: Selector Widget"
17833
  msgstr ""
readme.txt CHANGED
@@ -3,7 +3,7 @@ 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: 3.9.1
7
  License: GNU General Public License v3.0
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
@@ -119,7 +119,8 @@ Booster for WooCommerce is a WordPress WooCommerce plugin that supercharges your
119
  * *Shipping Calculator* - Customize WooCommerce shipping calculator on cart page.
120
  * *Shipping Descriptions* - Add descriptions to shipping methods on frontend.
121
  * *Shipping Icons* - Add icons to shipping methods on frontend.
122
- * *Shipping Methods by Cities* - Set cities to include/exclude for shipping methods to show up.
 
123
  * *Shipping Methods by Min/Max Order Amount* - Set minimum and/or maximum order amount for shipping methods to show up.
124
  * *Shipping Methods by Products* - Set products, product categories, tags or shipping classes to include/exclude for shipping methods to show up.
125
  * *Shipping Methods by Users* - Set user roles, users or membership plans to include/exclude for shipping methods to show up.
@@ -139,6 +140,7 @@ Booster for WooCommerce is a WordPress WooCommerce plugin that supercharges your
139
  * *Custom CSS* - Separate custom CSS for front and back end. Per product CSS.
140
  * *Custom Emails* - Add custom emails to WooCommerce.
141
  * *Custom JS* - Separate custom JS for front and back end.
 
142
  * *Email Options* - WooCommerce email options. E.g.: add another email recipient(s) to all WooCommerce emails.
143
  * *Email Verification* - Add WooCommerce email verification.
144
  * *Export* - WooCommerce export tools.
@@ -189,10 +191,51 @@ You can see the differences between versions in this [table](https://booster.io/
189
 
190
  == Changelog ==
191
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
192
  = 3.9.1 - 06/09/2018 =
193
  * Fix - Shortcodes - General - `[wcj_cross_sell_display]` - Returning the result instead of echoing.
194
  * Fix - Shortcodes - General - `[wcj_cross_sell_display]` - Additional checks added for `WC()->cart` to exist before executing the shortcode's code.
195
- * Dev - PRODUCTS - Product Input Fields - "Strip slashes" option added.
196
  * Dev - Translations - Files updated: `az`, `es_ES`, `fr_FR`, `is_IS`, `it_IT`, `ja`, `nl_NL`, `pt_BR`, `ro_RO`, `ru_RU`, `sv_SE`.
197
  * Dev - Translations - New files added: `cs_CZ`, `el`.
198
 
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.0
7
  License: GNU General Public License v3.0
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
119
  * *Shipping Calculator* - Customize WooCommerce shipping calculator on cart page.
120
  * *Shipping Descriptions* - Add descriptions to shipping methods on frontend.
121
  * *Shipping Icons* - Add icons to shipping methods on frontend.
122
+ * *Shipping Methods by City or Postcode* - Set shipping cities or postcodes to include/exclude for shipping methods to show up.
123
+ * *Shipping Methods by Current Date/Time* - Set date and/or time to include/exclude for shipping methods to show up.
124
  * *Shipping Methods by Min/Max Order Amount* - Set minimum and/or maximum order amount for shipping methods to show up.
125
  * *Shipping Methods by Products* - Set products, product categories, tags or shipping classes to include/exclude for shipping methods to show up.
126
  * *Shipping Methods by Users* - Set user roles, users or membership plans to include/exclude for shipping methods to show up.
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.
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.
191
 
192
  == Changelog ==
193
 
194
+ = 4.0.0 - 11/10/2018 =
195
+ * Feature - PRICES & CURRENCIES - Multicurrency (Currency Switcher) - Widget - "Form Method", "Class" and "Style" options added.
196
+ * Feature - PRODUCTS - Product Addons - Frontend Templates - "Each Addon - Type: Select Box (Each Option)" option added.
197
+ * Feature - SHIPPING & ORDERS - Order Custom Statuses - "Add Custom Statuses Buttons to Admin Order Preview Actions" option added.
198
+ * Feature - SHIPPING & ORDERS - Orders - "Editable Orders" options added.
199
+ * Feature - SHIPPING & ORDERS - Shipping Methods by City or Postcode - "Shipping Methods by Postcodes" subsection added.
200
+ * Feature - SHIPPING & ORDERS - Shipping Methods by Current Date/Time - Initial module release.
201
+ * Feature - EMAILS & MISC. - Admin Tools - "Suppress Admin Connect Notice" and "Suppress Admin Notices" options added.
202
+ * Feature - EMAILS & MISC. - Custom CSS - "Code Position" option added.
203
+ * Feature - EMAILS & MISC. - Custom JS - "Code Position" option added.
204
+ * Feature - EMAILS & MISC. - Custom PHP - Initial module release.
205
+ * Feature - EMAILS & MISC. - General - Add/Manage Custom Roles tool - "Capabilities" option added.
206
+ * Fix - PRICES & CURRENCIES - Prices and Currencies by Country - Default values for options and empty string checks added.
207
+ * Fix - CART & CHECKOUT - EU VAT Number - Possible "Undefined index: wcj_eu_vat_number_to_check..." PHP notice fixed.
208
+ * Fix - PAYMENT GATEWAYS - Gateways by Shipping - Use Shipping Instances - Trying to extract shipping instance number from form with underscore symbol (e.g. "Flexible Shipping" plugin).
209
+ * Fix - SHIPPING & ORDERS - Order Min/Max Quantities - `isEmptyObject` check added in `wcj-order-quantities.js`.
210
+ * Fix - PDF INVOICING & PACKING SLIPS - Invoices Report tool - "Disable Saving PDFs in PHP directory for temporary files..." notice fixed.
211
+ * Fix - EMAILS & MISC. - General - Add/Manage Custom Roles tool - `sanitize_key()` added for role ID (when adding new role).
212
+ * Fix - EMAILS & MISC. - General - Products Attributes tool - Column titles fixed.
213
+ * Fix - EMAILS & MISC. - Template Editor - Checking for modified template file to exist before replacing the original template.
214
+ * Fix - Shortcodes - Products - `[wcj_product_time_since_last_sale]` - `date_query` fixed.
215
+ * Fix - Functions - General - `wcj_is_frontend()` - AJAX part improved (`woocommerce_load_variations` backend `action` added).
216
+ * Dev - PRICES & CURRENCIES - Global Discount - "Global Discount in Admin" option added.
217
+ * Dev - PRICES & CURRENCIES - Multicurrency (Currency Switcher) - Module description updated.
218
+ * Dev - PRODUCTS - Sale Flash - Code refactoring - "Per Category" and "Per Tag" options are stored in arrays now.
219
+ * Dev - PAYMENT GATEWAYS - Gateways by Country, State or Postcode - Code refactoring.
220
+ * Dev - PAYMENT GATEWAYS - Gateways Currency Converter - "Show Converted Prices" option added.
221
+ * Dev - PAYMENT GATEWAYS - Gateways Currency Converter - Admin settings minor restyling.
222
+ * Dev - SHIPPING & ORDERS - Order Custom Statuses - Code refactoring.
223
+ * Dev - SHIPPING & ORDERS - Order Numbers - `wcj_order_number_meta` filter added.
224
+ * Dev - EMAILS & MISC. - Admin Tools - Admin settings restyled ("Debug Tools Options" subsection added, "Debug Log" tool renamed).
225
+ * Dev - EMAILS & MISC. - General - Add/Manage Custom Roles tool - Restyled; JS confirmation added etc.
226
+ * Dev - EMAILS & MISC. - Template Editor - Admin settings minor restyling.
227
+ * Dev - Shortcodes - General - `[wcj_country_select_drop_down_list]` - Code refactoring.
228
+ * Dev - Shortcodes - Products - `[wcj_product_available_variations]` - `param` attribute added.
229
+ * Dev - Shortcodes - Products - `[wcj_product_time_since_last_sale]` - Code refactoring.
230
+ * Dev - Shortcodes - Products - `[wcj_product_wholesale_price_table]` - `user_role` attribute added.
231
+ * Dev - Functions - Price and Currency - `wcj_update_products_price_by_country()` - `WP_Query` optimized to return `ids` only.
232
+ * Dev - Classes - `WCJ_Module` - Modules' "extra description" restyled.
233
+ * Dev - Code clean up.
234
+
235
  = 3.9.1 - 06/09/2018 =
236
  * Fix - Shortcodes - General - `[wcj_cross_sell_display]` - Returning the result instead of echoing.
237
  * Fix - Shortcodes - General - `[wcj_cross_sell_display]` - Additional checks added for `WC()->cart` to exist before executing the shortcode's code.
238
+ * Dev - PRODUCTS - Product Input Fields - "Strip Slashes" option added.
239
  * Dev - Translations - Files updated: `az`, `es_ES`, `fr_FR`, `is_IS`, `it_IT`, `ja`, `nl_NL`, `pt_BR`, `ro_RO`, `ru_RU`, `sv_SE`.
240
  * Dev - Translations - New files added: `cs_CZ`, `el`.
241
 
woocommerce-jetpack.php CHANGED
@@ -3,7 +3,7 @@
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: 3.9.1
7
  Author: Algoritmika Ltd
8
  Author URI: https://booster.io
9
  Text Domain: woocommerce-jetpack
@@ -35,7 +35,6 @@ if ( ! defined( 'WCJ_PLUGIN_FILE' ) ) {
35
  /**
36
  * WCJ_PLUGIN_FILE.
37
  *
38
- * @version 3.2.4
39
  * @since 3.2.4
40
  */
41
  define( 'WCJ_PLUGIN_FILE', __FILE__ );
@@ -48,6 +47,7 @@ if ( ! class_exists( 'WC_Jetpack' ) ) :
48
  *
49
  * @class WC_Jetpack
50
  * @version 3.2.4
 
51
  */
52
  final class WC_Jetpack {
53
 
@@ -57,7 +57,7 @@ final class WC_Jetpack {
57
  * @var string
58
  * @since 2.4.7
59
  */
60
- public $version = '3.9.1';
61
 
62
  /**
63
  * @var WC_Jetpack The single instance of the class
@@ -65,10 +65,12 @@ final class WC_Jetpack {
65
  protected static $_instance = null;
66
 
67
  /**
68
- * Main WC_Jetpack Instance
69
  *
70
  * Ensures only one instance of WC_Jetpack is loaded or can be loaded.
71
  *
 
 
72
  * @static
73
  * @see WCJ()
74
  * @return WC_Jetpack - Main instance
@@ -84,6 +86,7 @@ final class WC_Jetpack {
84
  * WC_Jetpack Constructor.
85
  *
86
  * @version 3.2.4
 
87
  * @access public
88
  */
89
  function __construct() {
@@ -99,6 +102,7 @@ if ( ! function_exists( 'WCJ' ) ) {
99
  * Returns the main instance of WC_Jetpack to prevent the need to use globals.
100
  *
101
  * @version 2.5.7
 
102
  * @return WC_Jetpack
103
  */
104
  function WCJ() {
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.0
7
  Author: Algoritmika Ltd
8
  Author URI: https://booster.io
9
  Text Domain: woocommerce-jetpack
35
  /**
36
  * WCJ_PLUGIN_FILE.
37
  *
 
38
  * @since 3.2.4
39
  */
40
  define( 'WCJ_PLUGIN_FILE', __FILE__ );
47
  *
48
  * @class WC_Jetpack
49
  * @version 3.2.4
50
+ * @since 1.0.0
51
  */
52
  final class WC_Jetpack {
53
 
57
  * @var string
58
  * @since 2.4.7
59
  */
60
+ public $version = '4.0.0';
61
 
62
  /**
63
  * @var WC_Jetpack The single instance of the class
65
  protected static $_instance = null;
66
 
67
  /**
68
+ * Main WC_Jetpack Instance.
69
  *
70
  * Ensures only one instance of WC_Jetpack is loaded or can be loaded.
71
  *
72
+ * @version 1.0.0
73
+ * @since 1.0.0
74
  * @static
75
  * @see WCJ()
76
  * @return WC_Jetpack - Main instance
86
  * WC_Jetpack Constructor.
87
  *
88
  * @version 3.2.4
89
+ * @since 1.0.0
90
  * @access public
91
  */
92
  function __construct() {
102
  * Returns the main instance of WC_Jetpack to prevent the need to use globals.
103
  *
104
  * @version 2.5.7
105
+ * @since 1.0.0
106
  * @return WC_Jetpack
107
  */
108
  function WCJ() {