Booster for WooCommerce - Version 2.7.0

Version Description

  • 12/04/2017 =
  • Dev - WooCommerce v3.x.x compatibility - wcj_get_order_item_meta_info() - get_meta_data() instead of has_meta().
  • Dev - WooCommerce v3.x.x compatibility - Shortcodes - Orders - [wcj_order_items_table] - wcj_get_order_currency(). get_short_description(). wcj_get_order_item_meta_info().
  • Dev - WooCommerce v3.x.x compatibility - Shortcodes - Orders - get_customer_id(). wcj_get_order_currency(). wcj_get_order_id(). get_customer_note(). get_billing_phone(). wc_get_order_item_meta().
  • Dev - WooCommerce v3.x.x compatibility - Shortcodes - Orders - [wcj_order_date] and [wcj_order_time] - get_date_created().
  • Dev - WooCommerce v3.x.x compatibility - Shortcodes - Products Crowdfunding - wcj_get_product_id_or_variation_parent_id().
  • Dev - WooCommerce v3.x.x compatibility - Shortcodes - Products - wc_get_price_including_tax(). wc_get_price_excluding_tax(). wc_display_product_attributes(). wc_get_product_tag_list(). get_short_description(). get_gallery_image_ids().
  • Dev - WooCommerce v3.x.x compatibility - Shortcodes - Products - [wcj_product_image_url] - wcj_get_product_id_or_variation_parent_id().
  • Dev - WooCommerce v3.x.x compatibility - Shortcodes - Products - [wcj_product_categories_urls] - wcj_get_product_id_or_variation_parent_id().
  • Dev - WooCommerce v3.x.x compatibility - Shortcodes - Products - [wcj_product_categories_names] - wcj_get_product_id_or_variation_parent_id().
  • Dev - WooCommerce v3.x.x compatibility - Shortcodes - Products - [wcj_product_total_sales] - wcj_get_product_id_or_variation_parent_id().
  • Dev - WooCommerce v3.x.x compatibility - Shortcodes - Products - [wcj_product_wholesale_price_table] - get_price filters replaced. Get parent product ID replaced with get_parent_id().
  • Dev - WooCommerce v3.x.x compatibility - Shortcodes - Products - [wcj_product_categories] - wc_get_product_category_list().
  • Dev - WooCommerce v3.x.x compatibility - PRICES & CURRENCIES - Currency for External Products - product_type property replaced with is_type() function.
  • Dev - WooCommerce v3.x.x compatibility - PRICES & CURRENCIES - Currency per Product - WCJ_PRODUCT_GET_PRICE_FILTER.
  • Dev - WooCommerce v3.x.x compatibility - PRICES & CURRENCIES - Global Discount - get_price filters replaced. wcj_get_product_id_or_variation_parent_id().
  • Dev - WooCommerce v3.x.x compatibility - PRICES & CURRENCIES - Multicurrency (Currency Switcher) - get_price filters replaced. Get product ID replaced with get_id(). wc_get_formatted_variation() used.
  • Dev - WooCommerce v3.x.x compatibility - PRICES & CURRENCIES - Multicurrency Product Base Price - get_price filters replaced. Get parent product ID replaced with get_parent_id().
  • Dev - WooCommerce v3.x.x compatibility - PRICES & CURRENCIES - Price by User Role - get_price filters replaced. Get product ID replaced with get_id(). wc_get_formatted_variation() used. Get parent product ID replaced with get_parent_id().
  • Dev - WooCommerce v3.x.x compatibility - PRICES & CURRENCIES - Prices and Currencies by Country - get_price filters; wcj_get_product_id(). woocommerce_clean().
  • Dev - WooCommerce v3.x.x compatibility - PRICES & CURRENCIES - Product Open Pricing (Name Your Price) - WCJ_PRODUCT_GET_PRICE_FILTER. wcj_get_product_id_or_variation_parent_id(). wcj_get_product_status().
  • Dev - WooCommerce v3.x.x compatibility - PRICES & CURRENCIES - Product Price by Formula - get_price filters; wcj_get_product_id_or_variation_parent_id().
  • Dev - WooCommerce v3.x.x compatibility - PRICES & CURRENCIES - Wholesale Price - get_price filters replaced. Get parent product ID replaced with get_parent_id().
  • Dev - WooCommerce v3.x.x compatibility - BUTTON & PRICE LABELS - Add to Cart Labels - wcj_get_product_id_or_variation_parent_id(); product_type -> get_type().
  • Dev - WooCommerce v3.x.x compatibility - BUTTON & PRICE LABELS - Call for Price - woocommerce_get_price -> woocommerce_product_get_price.
  • Dev - WooCommerce v3.x.x compatibility - BUTTON & PRICE LABELS - Custom Price Labels - wcj_get_product_id_or_variation_parent_id(); wcj_get_product_id(); product_type -> get_type(). woocommerce_price_html filter changed.
  • Dev - WooCommerce v3.x.x compatibility - BUTTON & PRICE LABELS - Free Price Labels - wcj_get_product_id_or_variation_parent_id(); "free price" filters;
  • Dev - WooCommerce v3.x.x compatibility - PRODUCTS - Bookings - WCJ_PRODUCT_GET_PRICE_FILTER; wcj_get_product_id_or_variation_parent_id().
  • Dev - WooCommerce v3.x.x compatibility - PRODUCTS - Crowdfunding - wcj_get_product_id_or_variation_parent_id().
  • Dev - WooCommerce v3.x.x compatibility - PRODUCTS - Product Add to Cart - wcj_get_product_id_or_variation_parent_id().
  • Dev - WooCommerce v3.x.x compatibility - PRODUCTS - Product Addons - WCJ_PRODUCT_GET_PRICE_FILTER. wcj_get_product_id_or_variation_parent_id(). wcj_get_product_display_price().
  • Dev - WooCommerce v3.x.x compatibility - PRODUCTS - Product Cost Price - get_prices_include_tax(). wcj_get_product_formatted_variation(). wcj_get_product_id_or_variation_parent_id().
  • Dev - WooCommerce v3.x.x compatibility - PRODUCTS - Product Images - wcj_get_product_id_or_variation_parent_id().
  • Dev - WooCommerce v3.x.x compatibility - PRODUCTS - Product Input Fields - wcj_get_product_id_or_variation_parent_id().
  • Dev - WooCommerce v3.x.x compatibility - PRODUCTS - Product Listings - "Hide Empty" option for "Shop Page Display Options" and "Category Display Options" (removed from woocommerce_product_subcategories_args hook).
  • Dev - WooCommerce v3.x.x compatibility - PRODUCTS - Product Tabs - wcj_get_product_id_or_variation_parent_id().
  • Dev - WooCommerce v3.x.x compatibility - PRODUCTS - Product Visibility by User Role - wcj_get_product_id_or_variation_parent_id().
  • Dev - WooCommerce v3.x.x compatibility - PRODUCTS - SKU - get_child().
  • Dev - WooCommerce v3.x.x compatibility - PRODUCTS - Sorting - woocommerce_clean().
  • Dev - WooCommerce v3.x.x compatibility - CART & CHECKOUT - Checkout Custom Fields - wcj_get_order_id().
  • Dev - WooCommerce v3.x.x compatibility - CART & CHECKOUT - Checkout Files Upload - wcj_get_order_id().
  • Dev - WooCommerce v3.x.x compatibility - CART & CHECKOUT - EU VAT Number - get_customer_ip_address(). wcj_get_order_id().
  • Dev - WooCommerce v3.x.x compatibility - PAYMENT GATEWAYS - Gateways by Country or State - get_country() and get_state().
  • Dev - WooCommerce v3.x.x compatibility - PAYMENT GATEWAYS - Gateways Currency - WCJ_PRODUCT_GET_PRICE_FILTER.
  • Dev - WooCommerce v3.x.x compatibility - SHIPPING & ORDERS - Order Custom Statuses - wcj_get_order_id().
  • Dev - WooCommerce v3.x.x compatibility - SHIPPING & ORDERS - Order Numbers - wcj_get_order_id(); get_date_created().
  • Dev - WooCommerce v3.x.x compatibility - SHIPPING & ORDERS - Orders - wcj_get_order_id(); woocommerce_order_get_currency; wcj_get_order_currency(); get_billing_country().
  • Dev - WooCommerce v3.x.x compatibility - PDF INVOICING & PACKING SLIPS - get_billing_country().
  • Dev - WooCommerce v3.x.x compatibility - PDF INVOICING & PACKING SLIPS - Display & Misc. - wcj_get_order_id().
  • Dev - WooCommerce v3.x.x compatibility - PDF INVOICING & PACKING SLIPS - Emails - wcj_get_order_id().
  • Dev - WooCommerce v3.x.x compatibility - EMAILS & MISC. - Admin Tools - Order Meta - Additional check "if $item_meta_value is array" added.
  • Dev - WooCommerce v3.x.x compatibility - EMAILS & MISC. - Export - Export Customers from Orders - Functions instead of accessing order properties directly.
  • Dev - WooCommerce v3.x.x compatibility - EMAILS & MISC. - Export - Export Orders - Functions instead of accessing order properties directly. wcj_get_order_currency().
  • Dev - WooCommerce v3.x.x compatibility - EMAILS & MISC. - Export - Export Products - Functions instead of accessing order properties directly. wcj_get_product_total_stock(). wc_get_price_to_display() and more.
  • Dev - WooCommerce v3.x.x compatibility - EMAILS & MISC. - General - Products Attributes - wc_get_product_category_list().
  • Dev - WooCommerce v3.x.x compatibility - EMAILS & MISC. - Reports - Custom Ranges - wp_create_nonce added.
  • Dev - WooCommerce v3.x.x compatibility - EMAILS & MISC. - Reports - Orders - Monthly Sales - wcj_get_order_currency().
  • Dev - WooCommerce v3.x.x compatibility - EMAILS & MISC. - Reports - Stock - wcj_get_product_total_stock(). wc_get_product_category_list().
  • Dev - Code refactoring - wcj-price-currency-functions.php and wcj-user-roles-functions.php added.
  • Dev - Mini-dashboards added to modules categories (instead of displaying the default category module). Modules categories descriptions added.
  • Dev - Shortcodes - on_empty attribute added to all shortcodes.
  • Dev - Shortcodes - wcj_shortcode_result filter added to all shortcodes.
  • Dev - Shortcodes - Products - [wcj_product_gallery_image_url] shortcode added.
  • Dev - Shortcodes - General - [wcj_cart_items_total_quantity] shortcode added.
  • Dev - Shortcodes - Orders - [wcj_order_status_label] shortcode added.
  • Dev - Shortcodes - Orders - [wcj_order_items_table] - wcj_pdf_invoicing_cell_data filter added.
  • Dev - BUTTON & PRICE LABELS - Custom Price Labels - "Migrate from Custom Price Labels (Pro)" tool removed.
  • Dev - BUTTON & PRICE LABELS - Custom Price Labels - Global Custom Price Labels - textarea replaced with custom_textarea.
  • Dev - BUTTON & PRICE LABELS - Custom Price Labels - Global Custom Price Labels - "Instead of the price" option added.
  • Dev - BUTTON & PRICE LABELS - More Button Labels - Hook priority changed. Default value for get_option() added.
  • Dev - PRICES & CURRENCIES - Currency Exchange Rates - "Always Use cURL" option added.
  • Dev - PRICES & CURRENCIES - Currency Exchange Rates - "Calculate with Inversion" option added.
  • Dev - PRICES & CURRENCIES - Currency Exchange Rates - Code refactoring. Exchange rates functions moved to separate file. JS "Grab rate" button now works even if module is disabled.
  • Dev - PRICES & CURRENCIES - Currency per Product - "Cart and Checkout Behaviour Options" settings section added.
  • Dev - PRICES & CURRENCIES - Currency per Product - "WooCommerce Bookings" plugin support added.
  • Fix - PRICES & CURRENCIES - Multicurrency Product Base Price - Empty sale price issue fixed.
  • Fix - PRICES & CURRENCIES - Price by User Role - woocommerce_variation_prices_regular_price hook.
  • Fix - PRICES & CURRENCIES - Prices and Currencies by Country - wcj_price_by_country() - Additional check `0 !
Download this release

Release Info

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

Code changes from version 2.6.0 to 2.7.0

Files changed (114) hide show
  1. includes/add-to-cart/class-wcj-add-to-cart-per-product-type.php +5 -3
  2. includes/add-to-cart/class-wcj-add-to-cart-per-product.php +4 -2
  3. includes/admin/class-wc-settings-jetpack.php +67 -23
  4. includes/admin/wcj-modules-cats.php +16 -12
  5. includes/class-wcj-address-formats.php +50 -55
  6. includes/class-wcj-admin-tools.php +9 -5
  7. includes/class-wcj-call-for-price.php +18 -17
  8. includes/class-wcj-cart-customization.php +94 -0
  9. includes/class-wcj-checkout-core-fields.php +1 -1
  10. includes/class-wcj-checkout-custom-fields.php +6 -6
  11. includes/class-wcj-checkout-custom-info.php +21 -20
  12. includes/class-wcj-checkout-customization.php +103 -0
  13. includes/class-wcj-checkout-files-upload.php +6 -6
  14. includes/class-wcj-crowdfunding.php +28 -23
  15. includes/class-wcj-currency-exchange-rates.php +91 -72
  16. includes/class-wcj-currency-external-products.php +12 -12
  17. includes/class-wcj-currency-per-product.php +237 -65
  18. includes/class-wcj-custom-css.php +103 -0
  19. includes/class-wcj-emails.php +48 -3
  20. includes/class-wcj-empty-cart-button.php +2 -2
  21. includes/class-wcj-eu-vat-number.php +9 -9
  22. includes/class-wcj-free-price.php +78 -37
  23. includes/class-wcj-general.php +38 -97
  24. includes/class-wcj-global-discount.php +23 -13
  25. includes/class-wcj-left-to-free-shipping.php +1 -23
  26. includes/class-wcj-mini-cart.php +5 -5
  27. includes/class-wcj-more-button-labels.php +9 -7
  28. includes/class-wcj-multicurrency-product-base-price.php +15 -51
  29. includes/class-wcj-multicurrency.php +35 -47
  30. includes/class-wcj-old-slugs.php +7 -4
  31. includes/class-wcj-order-custom-statuses.php +12 -12
  32. includes/class-wcj-order-min-amount.php +13 -33
  33. includes/class-wcj-order-numbers.php +35 -22
  34. includes/class-wcj-orders.php +19 -36
  35. includes/class-wcj-payment-gateways-by-country.php +74 -84
  36. includes/class-wcj-payment-gateways-by-shipping.php +206 -0
  37. includes/class-wcj-payment-gateways-by-user-role.php +43 -59
  38. includes/class-wcj-payment-gateways-currency.php +16 -31
  39. includes/class-wcj-payment-gateways-fees.php +53 -75
  40. includes/class-wcj-payment-gateways-min-max.php +39 -50
  41. includes/class-wcj-payment-gateways-per-category.php +92 -88
  42. includes/class-wcj-pdf-invoicing.php +45 -48
  43. includes/class-wcj-price-by-country.php +15 -3
  44. includes/class-wcj-price-by-user-role.php +24 -70
  45. includes/class-wcj-price-formats.php +1 -22
  46. includes/class-wcj-price-labels.php +48 -155
  47. includes/class-wcj-product-add-to-cart.php +14 -7
  48. includes/class-wcj-product-addons.php +18 -17
  49. includes/class-wcj-product-bookings.php +13 -13
  50. includes/class-wcj-product-bulk-price-converter.php +1 -0
  51. includes/class-wcj-product-by-user-role.php +13 -24
  52. includes/class-wcj-product-by-user.php +1 -1
  53. includes/class-wcj-product-custom-info.php +2 -18
  54. includes/class-wcj-product-images.php +6 -4
  55. includes/class-wcj-product-info.php +5 -5
  56. includes/class-wcj-product-input-fields.php +3 -3
  57. includes/class-wcj-product-listings.php +56 -52
  58. includes/class-wcj-product-open-pricing.php +16 -13
  59. includes/class-wcj-product-price-by-formula.php +23 -35
  60. includes/class-wcj-product-tabs.php +10 -8
  61. includes/class-wcj-products-per-page.php +5 -25
  62. includes/class-wcj-products-xml.php +2 -2
  63. includes/class-wcj-purchase-data.php +8 -7
  64. includes/class-wcj-related-products.php +1 -1
  65. includes/class-wcj-reports.php +90 -82
  66. includes/class-wcj-shipping-calculator.php +4 -4
  67. includes/class-wcj-shipping.php +2 -23
  68. includes/class-wcj-sku.php +45 -27
  69. includes/class-wcj-sorting.php +6 -3
  70. includes/class-wcj-wholesale-price.php +14 -33
  71. includes/class-wcj-wpml.php +3 -2
  72. includes/classes/class-wcj-module.php +14 -4
  73. includes/classes/class-wcj-pdf-invoice.php +105 -3
  74. includes/constants/wcj-constants.php +37 -0
  75. includes/exchange-rates/class-wcj-exchange-rates-crons.php +4 -173
  76. includes/exchange-rates/class-wcj-exchange-rates.php +3 -1
  77. includes/export/class-wcj-exporter-customers.php +17 -16
  78. includes/export/class-wcj-exporter-orders.php +25 -25
  79. includes/export/class-wcj-exporter-products.php +23 -23
  80. includes/export/class-wcj-fields-helper.php +3 -2
  81. includes/functions/wcj-exchange-rates-functions.php +199 -0
  82. includes/functions/wcj-functions.php +133 -519
  83. includes/functions/wcj-invoicing-functions.php +47 -36
  84. includes/functions/wcj-price-currency-functions.php +447 -0
  85. includes/functions/wcj-user-roles-functions.php +112 -0
  86. includes/input-fields/class-wcj-product-input-fields-abstract.php +79 -133
  87. includes/input-fields/class-wcj-product-input-fields-global.php +2 -40
  88. includes/js/eu-vat-number.js +15 -12
  89. includes/js/wcj-bookings.js +9 -6
  90. includes/js/wcj-product-addons.js +5 -3
  91. includes/js/wcj-timepicker.js +9 -1
  92. includes/lib/tcpdf_min/config/tcpdf_config.php +9 -0
  93. includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php +3 -3
  94. includes/pdf-invoices/settings/class-wcj-pdf-invoicing-display.php +9 -9
  95. includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php +4 -2
  96. includes/pdf-invoices/settings/class-wcj-pdf-invoicing-templates.php +13 -3
  97. includes/price-by-country/class-wcj-price-by-country-core.php +31 -39
  98. includes/price-by-country/class-wcj-price-by-country-local.php +17 -19
  99. includes/reports/wcj-class-reports-monthly-sales.php +8 -8
  100. includes/reports/wcj-class-reports-sales.php +4 -4
  101. includes/reports/wcj-class-reports-stock.php +4 -4
  102. includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php +2 -2
  103. includes/shipping/class-wc-shipping-wcj-custom.php +2 -2
  104. includes/shortcodes/class-wcj-general-shortcodes.php +18 -2
  105. includes/shortcodes/class-wcj-invoices-shortcodes.php +44 -4
  106. includes/shortcodes/class-wcj-order-items-shortcodes.php +63 -51
  107. includes/shortcodes/class-wcj-orders-shortcodes.php +70 -40
  108. includes/shortcodes/class-wcj-products-crowdfunding-shortcodes.php +22 -22
  109. includes/shortcodes/class-wcj-products-shortcodes.php +71 -41
  110. includes/shortcodes/class-wcj-shortcodes.php +5 -4
  111. includes/templates/wcj-add-to-cart-variable.php +2 -2
  112. langs/woocommerce-jetpack.pot +3369 -2350
  113. readme.txt +155 -8
  114. woocommerce-jetpack.php +18 -8
includes/add-to-cart/class-wcj-add-to-cart-per-product-type.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Add to Cart per Product Type class.
6
  *
7
- * @version 2.2.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -28,6 +28,8 @@ class WCJ_Add_To_Cart_Per_Product_Type {
28
 
29
  /**
30
  * custom_add_to_cart_button_text.
 
 
31
  */
32
  public function custom_add_to_cart_button_text( $add_to_cart_text ) {
33
 
@@ -36,7 +38,7 @@ class WCJ_Add_To_Cart_Per_Product_Type {
36
  if ( ! $product )
37
  return $add_to_cart_text;
38
 
39
- $product_type = $product->product_type;
40
 
41
  if ( ! in_array( $product_type, array( 'external', 'grouped', 'simple', 'variable' ) ) )
42
  $product_type = 'other';
@@ -51,7 +53,7 @@ class WCJ_Add_To_Cart_Per_Product_Type {
51
  if ( '' != get_option( 'wcj_add_to_cart_text_on_' . $single_or_archive . '_in_cart_' . $product_type, '' ) ) {
52
  foreach( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
53
  $_product = $values['data'];
54
- if( get_the_ID() == $_product->id )
55
  return get_option( 'wcj_add_to_cart_text_on_' . $single_or_archive . '_in_cart_' . $product_type );
56
  }
57
  }
4
  *
5
  * The WooCommerce Jetpack Add to Cart per Product Type class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
28
 
29
  /**
30
  * custom_add_to_cart_button_text.
31
+ *
32
+ * @version 2.7.0
33
  */
34
  public function custom_add_to_cart_button_text( $add_to_cart_text ) {
35
 
38
  if ( ! $product )
39
  return $add_to_cart_text;
40
 
41
+ $product_type = ( WCJ_IS_WC_VERSION_BELOW_3 ? $product->product_type : $product->get_type() );
42
 
43
  if ( ! in_array( $product_type, array( 'external', 'grouped', 'simple', 'variable' ) ) )
44
  $product_type = 'other';
53
  if ( '' != get_option( 'wcj_add_to_cart_text_on_' . $single_or_archive . '_in_cart_' . $product_type, '' ) ) {
54
  foreach( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
55
  $_product = $values['data'];
56
+ if( get_the_ID() == wcj_get_product_id_or_variation_parent_id( $_product ) )
57
  return get_option( 'wcj_add_to_cart_text_on_' . $single_or_archive . '_in_cart_' . $product_type );
58
  }
59
  }
includes/add-to-cart/class-wcj-add-to-cart-per-product.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Add to Cart per Product class.
6
  *
7
- * @version 2.4.8
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -42,6 +42,8 @@ class WCJ_Add_To_Cart_Per_Product {
42
 
43
  /**
44
  * change_add_to_cart_button_text.
 
 
45
  */
46
  public function change_add_to_cart_button_text( $add_to_cart_text, $single_or_archive ) {
47
  global $product;
@@ -49,7 +51,7 @@ class WCJ_Add_To_Cart_Per_Product {
49
  return $add_to_cart_text;
50
  }
51
  $local_custom_add_to_cart_option_id = 'wcj_custom_add_to_cart_local_' . $single_or_archive;
52
- $local_custom_add_to_cart_option_value = get_post_meta( $product->id, '_' . $local_custom_add_to_cart_option_id, true );
53
  if ( '' != $local_custom_add_to_cart_option_value ) {
54
  return $local_custom_add_to_cart_option_value;
55
  }
4
  *
5
  * The WooCommerce Jetpack Add to Cart per Product class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
42
 
43
  /**
44
  * change_add_to_cart_button_text.
45
+ *
46
+ * @version 2.7.0
47
  */
48
  public function change_add_to_cart_button_text( $add_to_cart_text, $single_or_archive ) {
49
  global $product;
51
  return $add_to_cart_text;
52
  }
53
  $local_custom_add_to_cart_option_id = 'wcj_custom_add_to_cart_local_' . $single_or_archive;
54
+ $local_custom_add_to_cart_option_value = get_post_meta( wcj_get_product_id_or_variation_parent_id( $product ), '_' . $local_custom_add_to_cart_option_id, true );
55
  if ( '' != $local_custom_add_to_cart_option_value ) {
56
  return $local_custom_add_to_cart_option_value;
57
  }
includes/admin/class-wc-settings-jetpack.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Settings class.
6
  *
7
- * @version 2.6.0
8
  * @since 1.0.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -102,13 +102,14 @@ class WC_Settings_Jetpack extends WC_Settings_Page {
102
  /**
103
  * output_module_tools.
104
  *
105
- * @version 2.2.3
106
  * @since 2.2.3
107
  */
108
  function output_module_tools( $value ) {
109
  ?><tr valign="top">
110
  <th scope="row" class="titledesc">
111
  <label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?></label>
 
112
  </th>
113
  <td class="forminp forminp-<?php echo sanitize_title( $value['type'] ) ?>">
114
  <?php if ( isset( $_GET['section'] ) ) do_action( 'wcj_module_tools_' . $_GET['section'] ); ?>
@@ -119,13 +120,14 @@ class WC_Settings_Jetpack extends WC_Settings_Page {
119
  /**
120
  * output_custom_link.
121
  *
122
- * @version 2.2.8
123
  * @since 2.2.8
124
  */
125
  function output_custom_link( $value ) {
 
126
  ?><tr valign="top">
127
  <th scope="row" class="titledesc">
128
- <label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?></label>
129
  </th>
130
  <td class="forminp forminp-<?php echo sanitize_title( $value['type'] ) ?>">
131
  <?php echo $value['link']; ?>
@@ -178,7 +180,7 @@ class WC_Settings_Jetpack extends WC_Settings_Page {
178
  /**
179
  * Output cats
180
  *
181
- * @version 2.3.9
182
  */
183
  function output_cats_submenu() {
184
  $current_cat = empty( $_REQUEST['wcj-cat'] ) ? 'dashboard' : sanitize_title( $_REQUEST['wcj-cat'] );
@@ -188,7 +190,7 @@ class WC_Settings_Jetpack extends WC_Settings_Page {
188
  echo '<ul class="subsubsub" style="text-transform: uppercase !important; font-weight: bold; margin-bottom: 10px !important;">';
189
  $array_keys = array_keys( $this->cats );
190
  foreach ( $this->cats as $id => $label_info ) {
191
- echo '<li><a href="' . admin_url( 'admin.php?page=wc-settings&tab=' . $this->id . '&wcj-cat=' . sanitize_title( $id ) ) . '&section=' . $label_info['default_cat_id'] . '" class="' . ( $current_cat == $id ? 'current' : '' ) . '">' . $label_info['label'] . '</a> ' . ( end( $array_keys ) == $id ? '' : '|' ) . ' </li>';
192
  }
193
  echo '</ul>' . '<br class="clear" />';
194
  }
@@ -196,16 +198,29 @@ class WC_Settings_Jetpack extends WC_Settings_Page {
196
  /**
197
  * Output sections (modules) sub menu
198
  *
199
- * @version 2.5.2
200
  */
201
  function output_sections_submenu() {
202
  global $current_section;
203
  $sections = $this->get_sections();
204
  $current_cat = empty( $_REQUEST['wcj-cat'] ) ? 'dashboard' : sanitize_title( $_REQUEST['wcj-cat'] );
205
  if ( 'dashboard' === $current_cat ) {
206
- $sections['alphabetically'] = __( 'Alphabetically', 'woocommerce-jetpack' );
207
- $sections['by_category'] = __( 'By Category', 'woocommerce-jetpack' );
208
- $sections['active'] = __( 'Active', 'woocommerce-jetpack' );
 
 
 
 
 
 
 
 
 
 
 
 
 
209
  $sections['manager'] = __( 'Manage Settings', 'woocommerce-jetpack' );
210
  if ( '' == $current_section ) {
211
  $current_section = 'by_category';
@@ -263,7 +278,7 @@ class WC_Settings_Jetpack extends WC_Settings_Page {
263
  /**
264
  * Output the settings.
265
  *
266
- * @version 2.5.3
267
  */
268
  function output() {
269
 
@@ -361,6 +376,9 @@ class WC_Settings_Jetpack extends WC_Settings_Page {
361
  break;
362
  }
363
  }
 
 
 
364
  //$breadcrumbs_html .= $settings[0]['title'];
365
  if ( ! $is_dashboard ) {
366
  $breadcrumbs_html .= ' > ';
@@ -385,7 +403,7 @@ class WC_Settings_Jetpack extends WC_Settings_Page {
385
  /**
386
  * output_dashboard.
387
  *
388
- * @version 2.6.0
389
  */
390
  function output_dashboard( $current_section ) {
391
 
@@ -407,8 +425,16 @@ class WC_Settings_Jetpack extends WC_Settings_Page {
407
  $this->output_dashboard_modules( $the_settings );
408
  } elseif ( 'by_category' === $current_section ) {
409
  foreach ( $this->cats as $cat_id => $cat_label_info ) {
410
- if ( 'dashboard' === $cat_id ) continue;
411
- echo '<h4>' . $cat_label_info['label'] . '</h4>';
 
 
 
 
 
 
 
 
412
  $readme_html .= PHP_EOL . '**' . $cat_label_info['label'] . '**' . PHP_EOL . PHP_EOL;
413
  $readme_html .= $this->output_dashboard_modules( $the_settings, $cat_id );
414
  }
@@ -507,7 +533,7 @@ class WC_Settings_Jetpack extends WC_Settings_Page {
507
  $html .= '<input type="checkbox" name="' . $the_feature['id'] . '" value="1" id="' . $the_feature['id'] . '" ' . checked( get_option( $the_feature['id'] ), 'yes', false ) . '>';
508
  $html .= '</th>';
509
 
510
- $html .= '<td class="plugin-title"><strong>' . $the_feature['title'] . '</strong>';
511
  $html .= '<div class="row-actions visible">';
512
 
513
  $html .= '<span class="0"><a href="' . admin_url() . 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=' . $this->get_cat_by_section( $section ) . '&section=' . $section . '">' . __( 'Settings', 'woocommerce' ) . '</a></span>';
@@ -543,7 +569,7 @@ class WC_Settings_Jetpack extends WC_Settings_Page {
543
  global $current_section;
544
  $settings = $this->get_settings( $current_section );
545
  WC_Admin_Settings::save_fields( $settings );
546
- echo apply_filters('booster_get_message', '', 'global' );
547
  do_action( 'woojetpack_after_settings_save', $this->get_sections(), $current_section );
548
  }
549
 
@@ -567,7 +593,7 @@ class WC_Settings_Jetpack extends WC_Settings_Page {
567
  /**
568
  * Get settings array
569
  *
570
- * @version 2.6.0
571
  * @return array
572
  */
573
  function get_settings( $current_section = '' ) {
@@ -576,15 +602,33 @@ class WC_Settings_Jetpack extends WC_Settings_Page {
576
  } elseif ( 'manager' === $current_section ) {
577
  return array( $this->get_autoload_settings() );
578
  } else {
 
579
  $settings[] = array(
580
- 'title' => __( 'Booster for WooCommerce - Dashboard', 'woocommerce-jetpack' ),
581
  'type' => 'title',
582
- 'desc' => __( 'This dashboard lets you enable/disable any Booster\'s module. Each checkbox comes with short module\'s description. Please visit <a href="http://booster.io" target="_blank">http://booster.io</a> for detailed info on each feature.', 'woocommerce-jetpack' ),
583
- 'id' => 'wcj_options'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
584
  );
585
- //$settings = apply_filters( 'wcj_features_status', $settings );
586
- $settings = array_merge( $settings, $this->module_statuses );
587
- $settings[] = array( 'type' => 'sectionend', 'id' => 'wcj_options', 'title' => '', 'desc' => '', );
588
  return $settings;
589
  }
590
  }
4
  *
5
  * The WooCommerce Jetpack Settings class.
6
  *
7
+ * @version 2.7.0
8
  * @since 1.0.0
9
  * @author Algoritmika Ltd.
10
  */
102
  /**
103
  * output_module_tools.
104
  *
105
+ * @version 2.7.0
106
  * @since 2.2.3
107
  */
108
  function output_module_tools( $value ) {
109
  ?><tr valign="top">
110
  <th scope="row" class="titledesc">
111
  <label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?></label>
112
+ <span class="woocommerce-help-tip" data-tip="<?php echo __( 'To use tools, module must be enabled.', 'woocommerce-jetpack' ); ?>"></span>
113
  </th>
114
  <td class="forminp forminp-<?php echo sanitize_title( $value['type'] ) ?>">
115
  <?php if ( isset( $_GET['section'] ) ) do_action( 'wcj_module_tools_' . $_GET['section'] ); ?>
120
  /**
121
  * output_custom_link.
122
  *
123
+ * @version 2.7.0
124
  * @since 2.2.8
125
  */
126
  function output_custom_link( $value ) {
127
+ $tooltip_html = ( isset( $value['desc_tip'] ) && '' != $value['desc_tip'] ) ? '<span class="woocommerce-help-tip" data-tip="' . $value['desc_tip'] . '"></span>' : '';
128
  ?><tr valign="top">
129
  <th scope="row" class="titledesc">
130
+ <label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?></label><?php echo $tooltip_html; ?>
131
  </th>
132
  <td class="forminp forminp-<?php echo sanitize_title( $value['type'] ) ?>">
133
  <?php echo $value['link']; ?>
180
  /**
181
  * Output cats
182
  *
183
+ * @version 2.7.0
184
  */
185
  function output_cats_submenu() {
186
  $current_cat = empty( $_REQUEST['wcj-cat'] ) ? 'dashboard' : sanitize_title( $_REQUEST['wcj-cat'] );
190
  echo '<ul class="subsubsub" style="text-transform: uppercase !important; font-weight: bold; margin-bottom: 10px !important;">';
191
  $array_keys = array_keys( $this->cats );
192
  foreach ( $this->cats as $id => $label_info ) {
193
+ echo '<li><a href="' . admin_url( 'admin.php?page=wc-settings&tab=' . $this->id . '&wcj-cat=' . sanitize_title( $id ) ) . '" class="' . ( $current_cat == $id ? 'current' : '' ) . '">' . $label_info['label'] . '</a> ' . ( end( $array_keys ) == $id ? '' : '|' ) . ' </li>';
194
  }
195
  echo '</ul>' . '<br class="clear" />';
196
  }
198
  /**
199
  * Output sections (modules) sub menu
200
  *
201
+ * @version 2.7.0
202
  */
203
  function output_sections_submenu() {
204
  global $current_section;
205
  $sections = $this->get_sections();
206
  $current_cat = empty( $_REQUEST['wcj-cat'] ) ? 'dashboard' : sanitize_title( $_REQUEST['wcj-cat'] );
207
  if ( 'dashboard' === $current_cat ) {
208
+
209
+ // Counting modules
210
+ $all = 0;
211
+ $active = 0;
212
+ foreach ( $this->module_statuses as $module_status ) {
213
+ if ( isset( $module_status['id'] ) && isset( $module_status['default'] ) ) {
214
+ if ( 'yes' === get_option( $module_status['id'], $module_status['default'] ) ) {
215
+ $active++;
216
+ }
217
+ $all++;
218
+ }
219
+ }
220
+
221
+ $sections['alphabetically'] = __( 'Alphabetically', 'woocommerce-jetpack' ) . ' <span class="count">(' . $all . ')</span>';
222
+ $sections['by_category'] = __( 'By Category', 'woocommerce-jetpack' ) . ' <span class="count">(' . $all . ')</span>';
223
+ $sections['active'] = __( 'Active', 'woocommerce-jetpack' ) . ' <span class="count">(' . $active . ')</span>';
224
  $sections['manager'] = __( 'Manage Settings', 'woocommerce-jetpack' );
225
  if ( '' == $current_section ) {
226
  $current_section = 'by_category';
278
  /**
279
  * Output the settings.
280
  *
281
+ * @version 2.7.0
282
  */
283
  function output() {
284
 
376
  break;
377
  }
378
  }
379
+ if ( $is_dashboard && isset( $_GET['wcj-cat'] ) && 'dashboard' != $_GET['wcj-cat'] ) {
380
+ $breadcrumbs_html .= $this->cats[ $_GET['wcj-cat'] ]['label'];
381
+ }
382
  //$breadcrumbs_html .= $settings[0]['title'];
383
  if ( ! $is_dashboard ) {
384
  $breadcrumbs_html .= ' > ';
403
  /**
404
  * output_dashboard.
405
  *
406
+ * @version 2.7.0
407
  */
408
  function output_dashboard( $current_section ) {
409
 
425
  $this->output_dashboard_modules( $the_settings );
426
  } elseif ( 'by_category' === $current_section ) {
427
  foreach ( $this->cats as $cat_id => $cat_label_info ) {
428
+ if ( 'dashboard' === $cat_id ) {
429
+ continue;
430
+ }
431
+ if ( isset( $_GET['wcj-cat'] ) && 'dashboard' != $_GET['wcj-cat'] ) {
432
+ if ( $cat_id != $_GET['wcj-cat'] ) {
433
+ continue;
434
+ }
435
+ } else {
436
+ echo '<h4>' . $cat_label_info['label'] . '</h4>';
437
+ }
438
  $readme_html .= PHP_EOL . '**' . $cat_label_info['label'] . '**' . PHP_EOL . PHP_EOL;
439
  $readme_html .= $this->output_dashboard_modules( $the_settings, $cat_id );
440
  }
533
  $html .= '<input type="checkbox" name="' . $the_feature['id'] . '" value="1" id="' . $the_feature['id'] . '" ' . checked( get_option( $the_feature['id'] ), 'yes', false ) . '>';
534
  $html .= '</th>';
535
 
536
+ $html .= '<td class="plugin-title">' . '<strong>' . $the_feature['title'] . '</strong>';
537
  $html .= '<div class="row-actions visible">';
538
 
539
  $html .= '<span class="0"><a href="' . admin_url() . 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=' . $this->get_cat_by_section( $section ) . '&section=' . $section . '">' . __( 'Settings', 'woocommerce' ) . '</a></span>';
569
  global $current_section;
570
  $settings = $this->get_settings( $current_section );
571
  WC_Admin_Settings::save_fields( $settings );
572
+ echo apply_filters( 'booster_get_message', '', 'global' );
573
  do_action( 'woojetpack_after_settings_save', $this->get_sections(), $current_section );
574
  }
575
 
593
  /**
594
  * Get settings array
595
  *
596
+ * @version 2.7.0
597
  * @return array
598
  */
599
  function get_settings( $current_section = '' ) {
602
  } elseif ( 'manager' === $current_section ) {
603
  return array( $this->get_autoload_settings() );
604
  } else {
605
+ $cat_id = ( isset( $_GET['wcj-cat'] ) && '' != $_GET['wcj-cat'] ) ? $_GET['wcj-cat'] : 'dashboard';
606
  $settings[] = array(
607
+ 'title' => __( 'Booster for WooCommerce', 'woocommerce-jetpack' ) . ' - ' . $this->cats[ $cat_id ]['label'],
608
  'type' => 'title',
609
+ 'desc' => $this->cats[ $cat_id ]['desc'],
610
+ 'id' => 'wcj_' . $cat_id . '_options',
611
+ );
612
+ // $settings = apply_filters( 'wcj_features_status', $settings );
613
+ if ( 'dashboard' === $cat_id ) {
614
+ $settings = array_merge( $settings, $this->module_statuses );
615
+ } else {
616
+ $cat_module_statuses = array();
617
+ foreach ( $this->module_statuses as $module_status ) {
618
+ $section = $module_status['id'];
619
+ $section = str_replace( 'wcj_', '', $section );
620
+ $section = str_replace( '_enabled', '', $section );
621
+ if ( $cat_id === $this->get_cat_by_section( $section ) ) {
622
+ $cat_module_statuses[] = $module_status;
623
+ }
624
+ }
625
+ $settings = array_merge( $settings, $cat_module_statuses );
626
+ }
627
+ $settings[] = array(
628
+ 'type' => 'sectionend',
629
+ 'id' => 'wcj_' . $cat_id . '_options',
630
+ 'title' => '', // for usort
631
  );
 
 
 
632
  return $settings;
633
  }
634
  }
includes/admin/wcj-modules-cats.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Modules Array.
6
  *
7
- * @version 2.6.0
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -13,7 +13,7 @@ return array(
13
 
14
  'dashboard' => array(
15
  'label' => __( 'Dashboard', 'woocommerce-jetpack' ),
16
- 'default_cat_id' => 'by_category',
17
  'all_cat_ids' => array(
18
  'alphabetically',
19
  'by_category',
@@ -24,7 +24,7 @@ return array(
24
 
25
  'prices_and_currencies' => array(
26
  'label' => __( 'Prices & Currencies', 'woocommerce-jetpack' ),
27
- 'default_cat_id' => 'price_by_country',
28
  'all_cat_ids' => array(
29
  'price_by_country',
30
  'multicurrency',
@@ -45,7 +45,7 @@ return array(
45
 
46
  'labels' => array(
47
  'label' => __( 'Button & Price Labels', 'woocommerce-jetpack' ),
48
- 'default_cat_id' => 'price_labels',
49
  'all_cat_ids' => array(
50
  'price_labels',
51
  'call_for_price',
@@ -57,7 +57,7 @@ return array(
57
 
58
  'products' => array(
59
  'label' => __( 'Products', 'woocommerce-jetpack' ),
60
- 'default_cat_id' => 'product_listings',
61
  'all_cat_ids' => array(
62
  'product_listings',
63
  'products_per_page',
@@ -76,26 +76,30 @@ return array(
76
  'product_by_country',
77
  'product_by_user_role',
78
  'product_by_user',
 
79
  ),
80
  ),
81
 
82
  'cart_and_checkout' => array(
83
  'label' => __( 'Cart & Checkout', 'woocommerce-jetpack' ),
84
- 'default_cat_id' => 'cart',
85
  'all_cat_ids' => array(
86
  'cart',
 
87
  'empty_cart',
88
  'mini_cart',
89
  'checkout_core_fields',
90
  'checkout_custom_fields',
91
  'checkout_files_upload',
92
  'checkout_custom_info',
 
 
93
  ),
94
  ),
95
 
96
  'payment_gateways' => array(
97
  'label' => __( 'Payment Gateways', 'woocommerce-jetpack' ),
98
- 'default_cat_id' => 'payment_gateways',
99
  'all_cat_ids' => array(
100
  'payment_gateways',
101
  'payment_gateways_icons',
@@ -105,12 +109,13 @@ return array(
105
  'payment_gateways_min_max',
106
  'payment_gateways_by_country',
107
  'payment_gateways_by_user_role',
 
108
  ),
109
  ),
110
 
111
  'shipping_and_orders' => array(
112
  'label' => __( 'Shipping & Orders', 'woocommerce-jetpack' ),
113
- 'default_cat_id' => 'shipping',
114
  'all_cat_ids' => array(
115
  'shipping',
116
  'left_to_free_shipping',
@@ -125,7 +130,7 @@ return array(
125
 
126
  'pdf_invoicing' => array(
127
  'label' => __( 'PDF Invoicing & Packing Slips', 'woocommerce-jetpack' ),
128
- 'default_cat_id' => 'pdf_invoicing',
129
  'all_cat_ids' => array(
130
  'pdf_invoicing',
131
  'pdf_invoicing_numbering',
@@ -141,18 +146,17 @@ return array(
141
 
142
  'emails_and_misc' => array(
143
  'label' => __( 'Emails & Misc.', 'woocommerce-jetpack' ),
144
- 'default_cat_id' => 'general',
145
  'all_cat_ids' => array(
146
  'general',
147
- 'products_xml',
148
  'export',
149
  // 'shortcodes',
150
- 'eu_vat_number',
151
  'old_slugs',
152
  'reports',
153
  'admin_tools',
154
  'emails',
155
  'wpml',
 
156
  // 'pdf_invoices',
157
  'product_info',
158
  ),
4
  *
5
  * The WooCommerce Modules Array.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
13
 
14
  'dashboard' => array(
15
  'label' => __( 'Dashboard', 'woocommerce-jetpack' ),
16
+ 'desc' => __( 'This dashboard lets you enable/disable any Booster\'s module. Each checkbox comes with short module\'s description. Please visit <a href="http://booster.io" target="_blank">http://booster.io</a> for detailed info on each feature.', 'woocommerce-jetpack' ),
17
  'all_cat_ids' => array(
18
  'alphabetically',
19
  'by_category',
24
 
25
  'prices_and_currencies' => array(
26
  'label' => __( 'Prices & Currencies', 'woocommerce-jetpack' ),
27
+ 'desc' => __( 'Multicurrency, Price Converter, Wholesale Pricing, Name You Price, Price by User Role and more.', 'woocommerce-jetpack' ),
28
  'all_cat_ids' => array(
29
  'price_by_country',
30
  'multicurrency',
45
 
46
  'labels' => array(
47
  'label' => __( 'Button & Price Labels', 'woocommerce-jetpack' ),
48
+ 'desc' => __( 'Add to Cart Labels, Call for Price, Custom Price Labels and more.', 'woocommerce-jetpack' ),
49
  'all_cat_ids' => array(
50
  'price_labels',
51
  'call_for_price',
57
 
58
  'products' => array(
59
  'label' => __( 'Products', 'woocommerce-jetpack' ),
60
+ 'desc' => __( 'Bookings, Crowdfunding Products, Product Addons and Input Fields, Product Listings, Product Tabs and more.', 'woocommerce-jetpack' ),
61
  'all_cat_ids' => array(
62
  'product_listings',
63
  'products_per_page',
76
  'product_by_country',
77
  'product_by_user_role',
78
  'product_by_user',
79
+ 'products_xml',
80
  ),
81
  ),
82
 
83
  'cart_and_checkout' => array(
84
  'label' => __( 'Cart & Checkout', 'woocommerce-jetpack' ),
85
+ 'desc' => __( 'Cart and Checkout Customization, Empty Cart Button, Mini Cart and more.', 'woocommerce-jetpack' ),
86
  'all_cat_ids' => array(
87
  'cart',
88
+ 'cart_customization',
89
  'empty_cart',
90
  'mini_cart',
91
  'checkout_core_fields',
92
  'checkout_custom_fields',
93
  'checkout_files_upload',
94
  'checkout_custom_info',
95
+ 'checkout_customization',
96
+ 'eu_vat_number',
97
  ),
98
  ),
99
 
100
  'payment_gateways' => array(
101
  'label' => __( 'Payment Gateways', 'woocommerce-jetpack' ),
102
+ 'desc' => __( 'Custom Payment Gateways, Gateways Currency, Gateways Fees and Discounts and more.', 'woocommerce-jetpack' ),
103
  'all_cat_ids' => array(
104
  'payment_gateways',
105
  'payment_gateways_icons',
109
  'payment_gateways_min_max',
110
  'payment_gateways_by_country',
111
  'payment_gateways_by_user_role',
112
+ 'payment_gateways_by_shipping',
113
  ),
114
  ),
115
 
116
  'shipping_and_orders' => array(
117
  'label' => __( 'Shipping & Orders', 'woocommerce-jetpack' ),
118
+ 'desc' => __( 'Order Custom Statuses, Order Minimum Amount, Order Numbers, Custom Shipping Methods and more.', 'woocommerce-jetpack' ),
119
  'all_cat_ids' => array(
120
  'shipping',
121
  'left_to_free_shipping',
130
 
131
  'pdf_invoicing' => array(
132
  'label' => __( 'PDF Invoicing & Packing Slips', 'woocommerce-jetpack' ),
133
+ 'desc' => __( 'PDF Documents', 'woocommerce-jetpack' ),
134
  'all_cat_ids' => array(
135
  'pdf_invoicing',
136
  'pdf_invoicing_numbering',
146
 
147
  'emails_and_misc' => array(
148
  'label' => __( 'Emails & Misc.', 'woocommerce-jetpack' ),
149
+ 'desc' => __( 'Emails, Reports, Export, Admin Tools, General Options and more.', 'woocommerce-jetpack' ),
150
  'all_cat_ids' => array(
151
  'general',
 
152
  'export',
153
  // 'shortcodes',
 
154
  'old_slugs',
155
  'reports',
156
  'admin_tools',
157
  'emails',
158
  'wpml',
159
+ 'custom_css',
160
  // 'pdf_invoices',
161
  'product_info',
162
  ),
includes/class-wcj-address-formats.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Address Formats class.
6
  *
7
- * @version 2.4.8
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -29,26 +29,24 @@ class WCJ_Address_Formats extends WCJ_Module {
29
  parent::__construct();
30
 
31
  if ( $this->is_enabled() ) {
32
- add_filter( 'woocommerce_localisation_address_formats', array( $this, 'customize_address_formats' ), PHP_INT_MAX );
33
  add_filter( 'woocommerce_formatted_address_force_country_display', array( $this, 'customize_force_country_display' ), PHP_INT_MAX );
34
  }
35
  }
36
 
37
  /**
38
  * customize_force_country_display.
 
 
39
  */
40
  function customize_force_country_display( $display ) {
41
- if ( '' != ( $customized_display = get_option( 'wcj_address_formats_force_country_display', '' ) ) ) {
42
- return ( 'yes' === $customized_display ) ? true : false;
43
- }
44
- return $display;
45
  }
46
 
47
  /**
48
  * customize_address_formats.
49
  */
50
  function customize_address_formats( $formats ) {
51
- //$formats['LT'] = "{name}\n{company}\n{address_1}\n{address_2}\n{city} {postcode}\n{state}\n{country}";
52
  $modified_formats = array();
53
  $default_formats = $this->get_default_address_formats();
54
  foreach ( $default_formats as $country_code => $format ) {
@@ -61,14 +59,13 @@ class WCJ_Address_Formats extends WCJ_Module {
61
 
62
  /**
63
  * Get country address formats
 
64
  * @return array
65
  */
66
- public function get_default_address_formats() {
67
-
68
  // Common formats
69
  $postcode_before_city = "{company}\n{name}\n{address_1}\n{address_2}\n{postcode} {city}\n{country}";
70
  $default = "{name}\n{company}\n{address_1}\n{address_2}\n{city}\n{state}\n{postcode}\n{country}";
71
-
72
  // Define address formats
73
  $formats = array(
74
  'default' => $default,
@@ -105,68 +102,66 @@ class WCJ_Address_Formats extends WCJ_Module {
105
  'US' => "{name}\n{company}\n{address_1}\n{address_2}\n{city}, {state_code} {postcode}\n{country}",
106
  'VN' => "{name}\n{company}\n{address_1}\n{city}\n{country}",
107
  );
108
-
109
  $all_countries = wcj_get_countries();
110
  foreach ( $all_countries as $country_code => $country_name ) {
111
- if ( ! isset( $formats[ $country_code ] ) ) $formats[ $country_code ] = $default;
 
 
112
  }
113
-
114
  ksort( $formats );
115
-
116
  return $formats;
117
  }
118
 
119
  /**
120
  * get_settings.
121
  *
122
- * @version 2.4.8
123
  */
124
  function get_settings() {
125
-
126
- $settings = array();
127
-
128
- // Force country display
129
- $settings[] = array(
130
- 'title' => __( 'Force Base Country Display', 'woocommerce-jetpack' ),
131
- 'type' => 'title',
132
- 'desc' => __( 'Force Base Country Display Options.', 'woocommerce-jetpack' ),
133
- 'id' => 'wcj_address_formats_force_country_display_options'
134
- );
135
- $settings[] = array(
136
- 'title' => __( 'Force Base Country Display', 'woocommerce-jetpack' ),
137
- 'id' => 'wcj_address_formats_force_country_display',
138
- 'default' => 'no',
139
- 'type' => 'checkbox',
140
- );
141
- $settings[] = array(
142
- 'type' => 'sectionend',
143
- 'id' => 'wcj_address_formats_force_country_display_options'
 
 
 
 
 
144
  );
145
-
146
- // Formats by Country
147
- $settings[] = array(
148
- 'title' => __( 'Address Formats by Country', 'woocommerce-jetpack' ),
149
- 'type' => 'title',
150
- 'desc' => __( 'Address Formats by Country Options.', 'woocommerce-jetpack' ),
151
- 'id' => 'wcj_address_formats_country_options'
152
- );
153
- // $formats = apply_filters( 'wcj_get_address_formats_filter', array() );
154
  // $formats = WC()->countries->get_address_formats();
155
  $formats = $this->get_default_address_formats();
156
  foreach ( $formats as $country_code => $format ) {
157
- $settings[] = array(
158
- 'title' => ( 'default' === $country_code ) ? $country_code : $country_code . ' - ' . wcj_get_country_name_by_code( $country_code ),
159
- 'id' => 'wcj_address_formats_country_' . $country_code,
160
- 'default' => $format,
161
- 'type' => 'textarea',
162
- 'css' => 'width:300px;height:200px;',
163
- );
 
 
164
  }
165
- $settings[] = array(
166
- 'type' => 'sectionend',
167
- 'id' => 'wcj_address_formats_country_options'
168
- );
169
-
 
170
  return $this->add_standard_settings( $settings );
171
  }
172
  }
4
  *
5
  * The WooCommerce Jetpack Address Formats class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
29
  parent::__construct();
30
 
31
  if ( $this->is_enabled() ) {
32
+ add_filter( 'woocommerce_localisation_address_formats', array( $this, 'customize_address_formats' ), PHP_INT_MAX );
33
  add_filter( 'woocommerce_formatted_address_force_country_display', array( $this, 'customize_force_country_display' ), PHP_INT_MAX );
34
  }
35
  }
36
 
37
  /**
38
  * customize_force_country_display.
39
+ *
40
+ * @version 2.7.0
41
  */
42
  function customize_force_country_display( $display ) {
43
+ return ( 'yes' === get_option( 'wcj_address_formats_force_country_display', 'no' ) );
 
 
 
44
  }
45
 
46
  /**
47
  * customize_address_formats.
48
  */
49
  function customize_address_formats( $formats ) {
 
50
  $modified_formats = array();
51
  $default_formats = $this->get_default_address_formats();
52
  foreach ( $default_formats as $country_code => $format ) {
59
 
60
  /**
61
  * Get country address formats
62
+ *
63
  * @return array
64
  */
65
+ function get_default_address_formats() {
 
66
  // Common formats
67
  $postcode_before_city = "{company}\n{name}\n{address_1}\n{address_2}\n{postcode} {city}\n{country}";
68
  $default = "{name}\n{company}\n{address_1}\n{address_2}\n{city}\n{state}\n{postcode}\n{country}";
 
69
  // Define address formats
70
  $formats = array(
71
  'default' => $default,
102
  'US' => "{name}\n{company}\n{address_1}\n{address_2}\n{city}, {state_code} {postcode}\n{country}",
103
  'VN' => "{name}\n{company}\n{address_1}\n{city}\n{country}",
104
  );
 
105
  $all_countries = wcj_get_countries();
106
  foreach ( $all_countries as $country_code => $country_name ) {
107
+ if ( ! isset( $formats[ $country_code ] ) ) {
108
+ $formats[ $country_code ] = $default;
109
+ }
110
  }
 
111
  ksort( $formats );
 
112
  return $formats;
113
  }
114
 
115
  /**
116
  * get_settings.
117
  *
118
+ * @version 2.7.0
119
  */
120
  function get_settings() {
121
+ $settings = array(
122
+ // Force country display
123
+ array(
124
+ 'title' => __( 'Force Base Country Display', 'woocommerce-jetpack' ),
125
+ 'type' => 'title',
126
+ 'id' => 'wcj_address_formats_force_country_display_options',
127
+ ),
128
+ array(
129
+ 'title' => __( 'Force Base Country Display', 'woocommerce-jetpack' ),
130
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
131
+ 'id' => 'wcj_address_formats_force_country_display',
132
+ 'default' => 'no',
133
+ 'type' => 'checkbox',
134
+ ),
135
+ array(
136
+ 'type' => 'sectionend',
137
+ 'id' => 'wcj_address_formats_force_country_display_options',
138
+ ),
139
+ // Formats by Country
140
+ array(
141
+ 'title' => __( 'Address Formats by Country', 'woocommerce-jetpack' ),
142
+ 'type' => 'title',
143
+ 'id' => 'wcj_address_formats_country_options',
144
+ ),
145
  );
 
 
 
 
 
 
 
 
 
146
  // $formats = WC()->countries->get_address_formats();
147
  $formats = $this->get_default_address_formats();
148
  foreach ( $formats as $country_code => $format ) {
149
+ $settings = array_merge( $settings, array(
150
+ array(
151
+ 'title' => ( 'default' === $country_code ) ? $country_code : $country_code . ' - ' . wcj_get_country_name_by_code( $country_code ),
152
+ 'id' => 'wcj_address_formats_country_' . $country_code,
153
+ 'default' => $format,
154
+ 'type' => 'textarea',
155
+ 'css' => 'width:300px;height:200px;',
156
+ ),
157
+ ) );
158
  }
159
+ $settings = array_merge( $settings, array(
160
+ array(
161
+ 'type' => 'sectionend',
162
+ 'id' => 'wcj_address_formats_country_options',
163
+ ),
164
+ ) );
165
  return $this->add_standard_settings( $settings );
166
  }
167
  }
includes/class-wcj-admin-tools.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Admin Tools class.
6
  *
7
- * @version 2.6.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -100,7 +100,7 @@ class WCJ_Admin_Tools extends WCJ_Module {
100
  /**
101
  * create_meta_meta_box.
102
  *
103
- * @version 2.5.8
104
  * @since 2.5.8
105
  */
106
  function create_meta_meta_box( $post ) {
@@ -119,7 +119,10 @@ class WCJ_Admin_Tools extends WCJ_Module {
119
  $table_data = array();
120
  foreach ( $_order->get_items() as $item_key => $item ) {
121
  foreach ( $item['item_meta'] as $item_meta_key => $item_meta_value ) {
122
- $table_data[] = array( $item_key, $item_meta_key, implode( ', ', $item_meta_value ) );
 
 
 
123
  }
124
  }
125
  $html .= '<h3>' . __( 'Order Items Meta', 'woocommerce-jetpack' ) . '</h3>';
@@ -134,7 +137,7 @@ class WCJ_Admin_Tools extends WCJ_Module {
134
  *
135
  * @version 2.5.7
136
  */
137
- public function create_admin_tools_tool() {
138
 
139
  $the_notice = '';
140
  if ( isset( $_GET['wcj_delete_log'] ) && wcj_is_user_role( 'administrator' ) ) {
@@ -159,7 +162,7 @@ class WCJ_Admin_Tools extends WCJ_Module {
159
  /**
160
  * get_system_info_table_array.
161
  *
162
- * @version 2.5.7
163
  * @since 2.5.7
164
  */
165
  function get_system_info_table_array() {
@@ -177,6 +180,7 @@ class WCJ_Admin_Tools extends WCJ_Module {
177
  'ABSPATH',
178
  'DISABLE_WP_CRON',
179
  'WP_CRON_LOCK_TIMEOUT',
 
180
  );
181
  foreach ( $constants_array as $the_constant ) {
182
  $system_info[] = array( $the_constant, ( defined( $the_constant ) ? constant( $the_constant ) : __( 'NOT DEFINED', 'woocommerce-jetpack' ) ) );
4
  *
5
  * The WooCommerce Jetpack Admin Tools class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
100
  /**
101
  * create_meta_meta_box.
102
  *
103
+ * @version 2.7.0
104
  * @since 2.5.8
105
  */
106
  function create_meta_meta_box( $post ) {
119
  $table_data = array();
120
  foreach ( $_order->get_items() as $item_key => $item ) {
121
  foreach ( $item['item_meta'] as $item_meta_key => $item_meta_value ) {
122
+ if ( is_array( $item_meta_value ) ) {
123
+ $item_meta_value = implode( ', ', $item_meta_value );
124
+ }
125
+ $table_data[] = array( $item_key, $item_meta_key, $item_meta_value );
126
  }
127
  }
128
  $html .= '<h3>' . __( 'Order Items Meta', 'woocommerce-jetpack' ) . '</h3>';
137
  *
138
  * @version 2.5.7
139
  */
140
+ function create_admin_tools_tool() {
141
 
142
  $the_notice = '';
143
  if ( isset( $_GET['wcj_delete_log'] ) && wcj_is_user_role( 'administrator' ) ) {
162
  /**
163
  * get_system_info_table_array.
164
  *
165
+ * @version 2.7.0
166
  * @since 2.5.7
167
  */
168
  function get_system_info_table_array() {
180
  'ABSPATH',
181
  'DISABLE_WP_CRON',
182
  'WP_CRON_LOCK_TIMEOUT',
183
+ 'WCJ_WC_VERSION',
184
  );
185
  foreach ( $constants_array as $the_constant ) {
186
  $system_info[] = array( $the_constant, ( defined( $the_constant ) ? constant( $the_constant ) : __( 'NOT DEFINED', 'woocommerce-jetpack' ) ) );
includes/class-wcj-call-for-price.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Call for Price class.
6
  *
7
- * @version 2.5.7
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -17,9 +17,9 @@ class WCJ_Call_For_Price extends WCJ_module {
17
  /**
18
  * Constructor.
19
  *
20
- * @version 2.5.7
21
  */
22
- public function __construct() {
23
 
24
  $this->id = 'call_for_price';
25
  $this->short_desc = __( 'Call for Price', 'woocommerce-jetpack' );
@@ -35,7 +35,7 @@ class WCJ_Call_For_Price extends WCJ_module {
35
  add_filter( 'woocommerce_sale_flash', array( $this, 'hide_sales_flash' ), 100, 3 );
36
 
37
  if ( 'yes' === get_option( 'wcj_call_for_price_make_all_empty', 'no' ) ) {
38
- add_filter( 'woocommerce_get_price', array( $this, 'make_empty_price' ), PHP_INT_MAX, 2 );
39
  }
40
  }
41
  }
@@ -53,14 +53,14 @@ class WCJ_Call_For_Price extends WCJ_module {
53
  /**
54
  * add_hook.
55
  */
56
- public function add_hook() {
57
  add_filter( 'woocommerce_empty_price_html', array( $this, 'on_empty_price' ), PHP_INT_MAX );
58
  }
59
 
60
  /**
61
  * Hide "sales" icon for empty price products.
62
  */
63
- public function hide_sales_flash( $onsale_html, $post, $product ) {
64
  if ( get_option('wcj_call_for_price_hide_sale_sign') === 'yes' ) {
65
  if ( $product->get_price() === '' ) {
66
  return '';
@@ -72,18 +72,18 @@ class WCJ_Call_For_Price extends WCJ_module {
72
  /**
73
  * On empty price filter - return the label.
74
  */
75
- public function on_empty_price( $price ) {
76
- if ( ( get_option('wcj_call_for_price_text') !== '' ) && is_single( get_the_ID() ) ) {
77
- return do_shortcode( apply_filters( 'booster_get_option', $this->default_empty_price_text, get_option('wcj_call_for_price_text') ) );
78
  }
79
- if ( ( get_option('wcj_call_for_price_text_on_related') !== '' ) && ( is_single() ) && ( ! is_single( get_the_ID() ) ) ) {
80
- return do_shortcode( apply_filters( 'booster_get_option', $this->default_empty_price_text, get_option('wcj_call_for_price_text_on_related') ) );
81
  }
82
- if ( ( get_option('wcj_call_for_price_text_on_archive') !== '' ) && is_archive() ) {
83
- return do_shortcode( apply_filters( 'booster_get_option', $this->default_empty_price_text, get_option('wcj_call_for_price_text_on_archive') ) );
84
  }
85
- if ( ( get_option('wcj_call_for_price_text_on_home') !== '' ) && is_front_page() ) {
86
- return do_shortcode( apply_filters( 'booster_get_option', $this->default_empty_price_text, get_option('wcj_call_for_price_text_on_home') ) );
87
  }
88
 
89
  // No changes
@@ -93,14 +93,15 @@ class WCJ_Call_For_Price extends WCJ_module {
93
  /**
94
  * Get settings array.
95
  *
96
- * @version 2.5.7
97
  */
98
  function get_settings() {
99
  $settings = array(
100
  array(
101
  'title' => __( 'Call for Price Options', 'woocommerce-jetpack' ),
102
  'type' => 'title',
103
- 'desc' => __( 'Leave price empty when adding or editing products. Then set the options here.', 'woocommerce-jetpack' ),
 
104
  'id' => 'wcj_call_for_price_options',
105
  ),
106
  array(
4
  *
5
  * The WooCommerce Jetpack Call for Price class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
17
  /**
18
  * Constructor.
19
  *
20
+ * @version 2.7.0
21
  */
22
+ function __construct() {
23
 
24
  $this->id = 'call_for_price';
25
  $this->short_desc = __( 'Call for Price', 'woocommerce-jetpack' );
35
  add_filter( 'woocommerce_sale_flash', array( $this, 'hide_sales_flash' ), 100, 3 );
36
 
37
  if ( 'yes' === get_option( 'wcj_call_for_price_make_all_empty', 'no' ) ) {
38
+ add_filter( WCJ_PRODUCT_GET_PRICE_FILTER, array( $this, 'make_empty_price' ), PHP_INT_MAX, 2 );
39
  }
40
  }
41
  }
53
  /**
54
  * add_hook.
55
  */
56
+ function add_hook() {
57
  add_filter( 'woocommerce_empty_price_html', array( $this, 'on_empty_price' ), PHP_INT_MAX );
58
  }
59
 
60
  /**
61
  * Hide "sales" icon for empty price products.
62
  */
63
+ function hide_sales_flash( $onsale_html, $post, $product ) {
64
  if ( get_option('wcj_call_for_price_hide_sale_sign') === 'yes' ) {
65
  if ( $product->get_price() === '' ) {
66
  return '';
72
  /**
73
  * On empty price filter - return the label.
74
  */
75
+ function on_empty_price( $price ) {
76
+ if ( ( get_option( 'wcj_call_for_price_text' ) !== '' ) && is_single( get_the_ID() ) ) {
77
+ return do_shortcode( apply_filters( 'booster_get_option', $this->default_empty_price_text, get_option( 'wcj_call_for_price_text' ) ) );
78
  }
79
+ if ( ( get_option( 'wcj_call_for_price_text_on_related' ) !== '' ) && ( is_single() ) && ( ! is_single( get_the_ID() ) ) ) {
80
+ return do_shortcode( apply_filters( 'booster_get_option', $this->default_empty_price_text, get_option( 'wcj_call_for_price_text_on_related' ) ) );
81
  }
82
+ if ( ( get_option( 'wcj_call_for_price_text_on_archive' ) !== '' ) && is_archive() ) {
83
+ return do_shortcode( apply_filters( 'booster_get_option', $this->default_empty_price_text, get_option( 'wcj_call_for_price_text_on_archive' ) ) );
84
  }
85
+ if ( ( get_option( 'wcj_call_for_price_text_on_home' ) !== '' ) && is_front_page() ) {
86
+ return do_shortcode( apply_filters( 'booster_get_option', $this->default_empty_price_text, get_option( 'wcj_call_for_price_text_on_home' ) ) );
87
  }
88
 
89
  // No changes
93
  /**
94
  * Get settings array.
95
  *
96
+ * @version 2.7.0
97
  */
98
  function get_settings() {
99
  $settings = array(
100
  array(
101
  'title' => __( 'Call for Price Options', 'woocommerce-jetpack' ),
102
  'type' => 'title',
103
+ 'desc' => __( 'Leave price empty when adding or editing products. Then set the options here.', 'woocommerce-jetpack' ) .
104
+ ' ' . __( 'You can use shortcodes in options.', 'woocommerce-jetpack' ),
105
  'id' => 'wcj_call_for_price_options',
106
  ),
107
  array(
includes/class-wcj-cart-customization.php ADDED
@@ -0,0 +1,94 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WooCommerce Jetpack Cart Customization
4
+ *
5
+ * The WooCommerce Jetpack Cart Customization class.
6
+ *
7
+ * @version 2.7.0
8
+ * @since 2.7.0
9
+ * @author Algoritmika Ltd.
10
+ */
11
+
12
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
13
+
14
+ if ( ! class_exists( 'WCJ_Cart_Customization' ) ) :
15
+
16
+ class WCJ_Cart_Customization extends WCJ_Module {
17
+
18
+ /**
19
+ * Constructor.
20
+ *
21
+ * @version 2.7.0
22
+ * @since 2.7.0
23
+ */
24
+ function __construct() {
25
+
26
+ $this->id = 'cart_customization';
27
+ $this->short_desc = __( 'Cart Customization', 'woocommerce-jetpack' );
28
+ $this->desc = __( 'Customize WooCommerce cart - hide coupon field; item remove link.', 'woocommerce-jetpack' );
29
+ $this->link = 'http://booster.io/features/woocommerce-cart-customization/';
30
+ parent::__construct();
31
+
32
+ add_action( 'init', array( $this, 'add_settings_hook' ) );
33
+
34
+ if ( $this->is_enabled() ) {
35
+ // Hide coupon
36
+ if ( 'yes' === get_option( 'wcj_cart_hide_coupon', 'no' ) ) {
37
+ add_filter( 'woocommerce_coupons_enabled', array( $this, 'hide_coupon_field_on_cart' ), PHP_INT_MAX );
38
+ }
39
+ // Hide item remove link
40
+ if ( 'yes' === get_option( 'wcj_cart_hide_item_remove_link', 'no' ) ) {
41
+ add_filter( 'woocommerce_cart_item_remove_link', '__return_empty_string', PHP_INT_MAX );
42
+ }
43
+ }
44
+ }
45
+
46
+ /**
47
+ * hide_coupon_field_on_cart.
48
+ *
49
+ * @version 2.6.0
50
+ * @since 2.6.0
51
+ */
52
+ function hide_coupon_field_on_cart( $enabled ) {
53
+ return ( is_cart() ) ? false : $enabled;
54
+ }
55
+
56
+ /*
57
+ * add_settings.
58
+ *
59
+ * @version 2.7.0
60
+ * @since 2.7.0
61
+ */
62
+ function add_settings() {
63
+ return array(
64
+ array(
65
+ 'title' => __( 'Options', 'woocommerce-jetpack' ),
66
+ 'type' => 'title',
67
+ 'id' => 'wcj_cart_customization_options',
68
+ ),
69
+ array(
70
+ 'title' => __( 'Hide Coupon on Cart Page', 'woocommerce-jetpack' ),
71
+ 'desc' => __( 'Hide', 'woocommerce-jetpack' ),
72
+ 'id' => 'wcj_cart_hide_coupon',
73
+ 'default' => 'no',
74
+ 'type' => 'checkbox',
75
+ ),
76
+ array(
77
+ 'title' => __( 'Hide Item Remove Link', 'woocommerce-jetpack' ),
78
+ 'desc' => __( 'Hide', 'woocommerce-jetpack' ),
79
+ 'id' => 'wcj_cart_hide_item_remove_link',
80
+ 'default' => 'no',
81
+ 'type' => 'checkbox',
82
+ ),
83
+ array(
84
+ 'type' => 'sectionend',
85
+ 'id' => 'wcj_cart_customization_options',
86
+ ),
87
+ );
88
+ }
89
+
90
+ }
91
+
92
+ endif;
93
+
94
+ return new WCJ_Cart_Customization();
includes/class-wcj-checkout-core-fields.php CHANGED
@@ -19,7 +19,7 @@ class WCJ_Checkout_Core_Fields extends WCJ_Module {
19
  *
20
  * @version 2.5.0
21
  */
22
- public function __construct() {
23
 
24
  $this->id = 'checkout_core_fields';
25
  $this->short_desc = __( 'Checkout Core Fields', 'woocommerce-jetpack' );
19
  *
20
  * @version 2.5.0
21
  */
22
+ function __construct() {
23
 
24
  $this->id = 'checkout_core_fields';
25
  $this->short_desc = __( 'Checkout Core Fields', 'woocommerce-jetpack' );
includes/class-wcj-checkout-custom-fields.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Checkout Custom Fields class.
6
  *
7
- * @version 2.6.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -249,7 +249,7 @@ class WCJ_Checkout_Custom_Fields extends WCJ_Module {
249
  $the_section = get_option( 'wcj_checkout_custom_field_section_' . $i );
250
  if ( 'shipping' === $the_section ) {
251
  $option_name = $the_section . '_' . 'wcj_checkout_field_' . $i;
252
- $fields[ $option_name ] = get_post_meta( $order->id, '_' . $option_name, true );
253
  }
254
  //}
255
  }
@@ -296,11 +296,11 @@ class WCJ_Checkout_Custom_Fields extends WCJ_Module {
296
  /**
297
  * add_custom_fields_to_order_display.
298
  *
299
- * @version 2.5.0
300
  * @since 2.3.0
301
  */
302
  function add_custom_fields_to_order_display( $order, $section = '', $add_styling = false ) {
303
- $post_meta = get_post_meta( $order->id );
304
  $final_output = '';
305
  foreach( $post_meta as $key => $values ) {
306
 
@@ -610,7 +610,7 @@ class WCJ_Checkout_Custom_Fields extends WCJ_Module {
610
  /**
611
  * get_settings.
612
  *
613
- * @version 2.5.0
614
  */
615
  public function get_settings() {
616
 
@@ -654,7 +654,7 @@ class WCJ_Checkout_Custom_Fields extends WCJ_Module {
654
  ),
655
  array(
656
  'title' => __( 'Custom Fields Number', 'woocommerce-jetpack' ),
657
- 'desc_tip' => __( 'Click "Save changes" after you change this number.', 'woocommerce-jetpack' ),
658
  'id' => 'wcj_checkout_custom_fields_total_number',
659
  'default' => 1,
660
  'type' => 'custom_number',
4
  *
5
  * The WooCommerce Jetpack Checkout Custom Fields class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
249
  $the_section = get_option( 'wcj_checkout_custom_field_section_' . $i );
250
  if ( 'shipping' === $the_section ) {
251
  $option_name = $the_section . '_' . 'wcj_checkout_field_' . $i;
252
+ $fields[ $option_name ] = get_post_meta( wcj_get_order_id( $order ), '_' . $option_name, true );
253
  }
254
  //}
255
  }
296
  /**
297
  * add_custom_fields_to_order_display.
298
  *
299
+ * @version 2.7.0
300
  * @since 2.3.0
301
  */
302
  function add_custom_fields_to_order_display( $order, $section = '', $add_styling = false ) {
303
+ $post_meta = get_post_meta( wcj_get_order_id( $order ) );
304
  $final_output = '';
305
  foreach( $post_meta as $key => $values ) {
306
 
610
  /**
611
  * get_settings.
612
  *
613
+ * @version 2.7.0
614
  */
615
  public function get_settings() {
616
 
654
  ),
655
  array(
656
  'title' => __( 'Custom Fields Number', 'woocommerce-jetpack' ),
657
+ 'desc_tip' => __( 'Click Save changes after you change this number.', 'woocommerce-jetpack' ),
658
  'id' => 'wcj_checkout_custom_fields_total_number',
659
  'default' => 1,
660
  'type' => 'custom_number',
includes/class-wcj-checkout-custom-info.php CHANGED
@@ -20,7 +20,7 @@ class WCJ_Checkout_Custom_Info extends WCJ_Module {
20
  *
21
  * @version 2.4.7
22
  */
23
- public function __construct() {
24
 
25
  $this->id = 'checkout_custom_info';
26
  $this->short_desc = __( 'Checkout Custom Info', 'woocommerce-jetpack' );
@@ -45,10 +45,10 @@ class WCJ_Checkout_Custom_Info extends WCJ_Module {
45
  * @version 2.4.7
46
  */
47
  function add_checkout_custom_info() {
48
- $current_filter = current_filter();
49
  $current_filter_priority = wcj_current_filter_priority();
50
  $total_number = apply_filters( 'booster_get_option', 1, get_option( 'wcj_checkout_custom_info_total_number', 1 ) );
51
- for ( $i = 1; $i <= $total_number; $i++) {
52
  if (
53
  '' != get_option( 'wcj_checkout_custom_info_content_' . $i ) &&
54
  $current_filter === get_option( 'wcj_checkout_custom_info_hook_' . $i ) &&
@@ -65,23 +65,24 @@ class WCJ_Checkout_Custom_Info extends WCJ_Module {
65
  * @version 2.6.0
66
  */
67
  function get_settings() {
68
- $settings = array();
69
- $settings[] = array(
70
- 'title' => __( 'Checkout Custom Info Blocks', 'woocommerce-jetpack' ),
71
- 'type' => 'title',
72
- 'id' => 'wcj_checkout_custom_info_blocks_options',
73
- );
74
- $settings[] = array(
75
- 'title' => __( 'Total Blocks', 'woocommerce-jetpack' ),
76
- 'id' => 'wcj_checkout_custom_info_total_number',
77
- 'default' => 1,
78
- 'type' => 'custom_number',
79
- 'desc' => apply_filters( 'booster_get_message', '', 'desc' ),
80
- 'custom_attributes' => apply_filters( 'booster_get_message', '', 'readonly' ),
81
- );
82
- $settings[] = array(
83
- 'type' => 'sectionend',
84
- 'id' => 'wcj_checkout_custom_info_blocks_options',
 
85
  );
86
  $total_number = apply_filters( 'booster_get_option', 1, get_option( 'wcj_checkout_custom_info_total_number', 1 ) );
87
  for ( $i = 1; $i <= $total_number; $i++) {
20
  *
21
  * @version 2.4.7
22
  */
23
+ function __construct() {
24
 
25
  $this->id = 'checkout_custom_info';
26
  $this->short_desc = __( 'Checkout Custom Info', 'woocommerce-jetpack' );
45
  * @version 2.4.7
46
  */
47
  function add_checkout_custom_info() {
48
+ $current_filter = current_filter();
49
  $current_filter_priority = wcj_current_filter_priority();
50
  $total_number = apply_filters( 'booster_get_option', 1, get_option( 'wcj_checkout_custom_info_total_number', 1 ) );
51
+ for ( $i = 1; $i <= $total_number; $i++ ) {
52
  if (
53
  '' != get_option( 'wcj_checkout_custom_info_content_' . $i ) &&
54
  $current_filter === get_option( 'wcj_checkout_custom_info_hook_' . $i ) &&
65
  * @version 2.6.0
66
  */
67
  function get_settings() {
68
+ $settings = array(
69
+ array(
70
+ 'title' => __( 'Checkout Custom Info Blocks', 'woocommerce-jetpack' ),
71
+ 'type' => 'title',
72
+ 'id' => 'wcj_checkout_custom_info_blocks_options',
73
+ ),
74
+ array(
75
+ 'title' => __( 'Total Blocks', 'woocommerce-jetpack' ),
76
+ 'id' => 'wcj_checkout_custom_info_total_number',
77
+ 'default' => 1,
78
+ 'type' => 'custom_number',
79
+ 'desc' => apply_filters( 'booster_get_message', '', 'desc' ),
80
+ 'custom_attributes' => apply_filters( 'booster_get_message', '', 'readonly' ),
81
+ ),
82
+ array(
83
+ 'type' => 'sectionend',
84
+ 'id' => 'wcj_checkout_custom_info_blocks_options',
85
+ ),
86
  );
87
  $total_number = apply_filters( 'booster_get_option', 1, get_option( 'wcj_checkout_custom_info_total_number', 1 ) );
88
  for ( $i = 1; $i <= $total_number; $i++) {
includes/class-wcj-checkout-customization.php ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WooCommerce Jetpack Checkout Customization
4
+ *
5
+ * The WooCommerce Jetpack Checkout Customization class.
6
+ *
7
+ * @version 2.7.0
8
+ * @since 2.7.0
9
+ * @author Algoritmika Ltd.
10
+ */
11
+
12
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
13
+
14
+ if ( ! class_exists( 'WCJ_Checkout_Customization' ) ) :
15
+
16
+ class WCJ_Checkout_Customization extends WCJ_Module {
17
+
18
+ /**
19
+ * Constructor.
20
+ *
21
+ * @version 2.7.0
22
+ * @since 2.7.0
23
+ */
24
+ function __construct() {
25
+
26
+ $this->id = 'checkout_customization';
27
+ $this->short_desc = __( 'Checkout Customization', 'woocommerce-jetpack' );
28
+ $this->desc = __( 'Customize WooCommerce checkout - hide "Order Again" button etc.', 'woocommerce-jetpack' );
29
+ $this->link = 'http://booster.io/features/woocommerce-checkout-customization/';
30
+ parent::__construct();
31
+
32
+ add_action( 'init', array( $this, 'add_settings_hook' ) );
33
+
34
+ if ( $this->is_enabled() ) {
35
+ // "Create an account?" Checkbox
36
+ if ( 'default' != ( $create_account_default = get_option( 'wcj_checkout_create_account_default_checked', 'default' ) ) ) {
37
+ if ( 'checked' === $create_account_default ) {
38
+ add_filter( 'woocommerce_create_account_default_checked', '__return_true' );
39
+ } elseif ( 'not_checked' === $create_account_default ) {
40
+ add_filter( 'woocommerce_create_account_default_checked', '__return_false' );
41
+ }
42
+ }
43
+ // Hide "Order Again" button
44
+ if ( 'yes' === get_option( 'wcj_checkout_hide_order_again', 'no' ) ) {
45
+ add_action( 'init', array( $this, 'checkout_hide_order_again' ), PHP_INT_MAX );
46
+ }
47
+ }
48
+ }
49
+
50
+ /**
51
+ * checkout_hide_order_again.
52
+ *
53
+ * @version 2.6.0
54
+ * @since 2.6.0
55
+ */
56
+ function checkout_hide_order_again() {
57
+ remove_action( 'woocommerce_order_details_after_order_table', 'woocommerce_order_again_button' );
58
+ }
59
+
60
+ /*
61
+ * add_settings.
62
+ *
63
+ * @version 2.7.0
64
+ * @since 2.7.0
65
+ */
66
+ function add_settings() {
67
+ return array(
68
+ array(
69
+ 'title' => __( 'Options', 'woocommerce-jetpack' ),
70
+ 'type' => 'title',
71
+ 'id' => 'wcj_checkout_customization_options',
72
+ ),
73
+ array(
74
+ 'title' => __( '"Create an account?" Checkbox', 'woocommerce-jetpack' ),
75
+ 'desc_tip' => __( '"Create an account?" checkbox default value', 'woocommerce-jetpack' ),
76
+ 'id' => 'wcj_checkout_create_account_default_checked',
77
+ 'default' => 'default',
78
+ 'type' => 'select',
79
+ 'options' => array(
80
+ 'default' => __( 'WooCommerce default', 'woocommerce-jetpack' ),
81
+ 'checked' => __( 'Checked', 'woocommerce-jetpack' ),
82
+ 'not_checked' => __( 'Not checked', 'woocommerce-jetpack' ),
83
+ ),
84
+ ),
85
+ array(
86
+ 'title' => __( 'Hide "Order Again" Button on "View Order" Page', 'woocommerce-jetpack' ),
87
+ 'desc' => __( 'Hide', 'woocommerce-jetpack' ),
88
+ 'id' => 'wcj_checkout_hide_order_again',
89
+ 'default' => 'no',
90
+ 'type' => 'checkbox',
91
+ ),
92
+ array(
93
+ 'type' => 'sectionend',
94
+ 'id' => 'wcj_checkout_customization_options',
95
+ ),
96
+ );
97
+ }
98
+
99
+ }
100
+
101
+ endif;
102
+
103
+ return new WCJ_Checkout_Customization();
includes/class-wcj-checkout-files-upload.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Checkout Files Upload class.
6
  *
7
- * @version 2.5.8
8
  * @since 2.4.5
9
  * @author Algoritmika Ltd.
10
  * @todo styling options;
@@ -56,7 +56,7 @@ class WCJ_Checkout_Files_Upload extends WCJ_Module {
56
  /**
57
  * add_files_to_email_attachments.
58
  *
59
- * @version 2.5.5
60
  * @since 2.5.5
61
  */
62
  function add_files_to_email_attachments( $attachments, $status, $order ) {
@@ -64,9 +64,9 @@ class WCJ_Checkout_Files_Upload extends WCJ_Module {
64
  ( 'new_order' === $status && 'yes' === get_option( 'wcj_checkout_files_upload_attach_to_admin_new_order', 'yes' ) ) ||
65
  ( 'customer_processing_order' === $status && 'yes' === get_option( 'wcj_checkout_files_upload_attach_to_customer_processing_order', 'yes' ) )
66
  ) {
67
- $total_files = get_post_meta( $order->id, '_' . 'wcj_checkout_files_total_files', true );
68
  for ( $i = 1; $i <= $total_files; $i++ ) {
69
- $attachments[] = wcj_get_wcj_uploads_dir( 'checkout_files_upload' ) . '/' . get_post_meta( $order->id, '_' . 'wcj_checkout_files_upload_' . $i, true );
70
  }
71
  }
72
  return $attachments;
@@ -75,11 +75,11 @@ class WCJ_Checkout_Files_Upload extends WCJ_Module {
75
  /**
76
  * add_files_to_order_display.
77
  *
78
- * @version 2.4.7
79
  * @since 2.4.7
80
  */
81
  function add_files_to_order_display( $order ) {
82
- $order_id = $order->id;
83
  $html = '';
84
  $total_files = get_post_meta( $order_id, '_' . 'wcj_checkout_files_total_files', true );
85
  for ( $i = 1; $i <= $total_files; $i++ ) {
4
  *
5
  * The WooCommerce Jetpack Checkout Files Upload class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.4.5
9
  * @author Algoritmika Ltd.
10
  * @todo styling options;
56
  /**
57
  * add_files_to_email_attachments.
58
  *
59
+ * @version 2.7.0
60
  * @since 2.5.5
61
  */
62
  function add_files_to_email_attachments( $attachments, $status, $order ) {
64
  ( 'new_order' === $status && 'yes' === get_option( 'wcj_checkout_files_upload_attach_to_admin_new_order', 'yes' ) ) ||
65
  ( 'customer_processing_order' === $status && 'yes' === get_option( 'wcj_checkout_files_upload_attach_to_customer_processing_order', 'yes' ) )
66
  ) {
67
+ $total_files = get_post_meta( wcj_get_order_id( $order ), '_' . 'wcj_checkout_files_total_files', true );
68
  for ( $i = 1; $i <= $total_files; $i++ ) {
69
+ $attachments[] = wcj_get_wcj_uploads_dir( 'checkout_files_upload' ) . '/' . get_post_meta( wcj_get_order_id( $order ), '_' . 'wcj_checkout_files_upload_' . $i, true );
70
  }
71
  }
72
  return $attachments;
75
  /**
76
  * add_files_to_order_display.
77
  *
78
+ * @version 2.7.0
79
  * @since 2.4.7
80
  */
81
  function add_files_to_order_display( $order ) {
82
+ $order_id = wcj_get_order_id( $order );
83
  $html = '';
84
  $total_files = get_post_meta( $order_id, '_' . 'wcj_checkout_files_total_files', true );
85
  for ( $i = 1; $i <= $total_files; $i++ ) {
includes/class-wcj-crowdfunding.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Crowdfunding class.
6
  *
7
- * @version 2.5.0
8
  * @since 2.2.6
9
  * @author Algoritmika Ltd.
10
  */
@@ -40,17 +40,22 @@ class WCJ_Crowdfunding extends WCJ_Module {
40
  /**
41
  * check_dates.
42
  *
43
- * @version 2.3.0
44
  */
45
  function check_dates( $purchasable, $_product ) {
46
- $goal = get_post_meta( $_product->id, '_' . 'wcj_crowdfunding_goal_sum', true );
 
47
  if ( 0 != $goal ) {
48
- $start_date_str = get_post_meta( $_product->id, '_' . 'wcj_crowdfunding_startdate', true );
49
- $end_date_str = get_post_meta( $_product->id, '_' . 'wcj_crowdfunding_deadline', true );
50
- $start_date = ( '' != $start_date_str ) ? strtotime( $start_date_str ) : 0;
51
- $end_date = ( '' != $end_date_str ) ? strtotime( $end_date_str ) : 0;
52
- if ( $start_date > 0 && ( $start_date - current_time( 'timestamp' ) ) > 0 ) $purchasable = false;
53
- if ( $end_date > 0 && ( $end_date - current_time( 'timestamp' ) ) < 0 ) $purchasable = false;
 
 
 
 
54
  }
55
  return $purchasable;
56
  }
@@ -84,22 +89,22 @@ class WCJ_Crowdfunding extends WCJ_Module {
84
  /**
85
  * get_settings.
86
  *
87
- * @version 2.5.0
88
  */
89
  function get_settings() {
90
- $module_desc = __( 'When enabled, module will add Crowdfunding metabox to product edit.', 'woocommerce-jetpack' )
91
- . '<br>'
92
- . __( 'To add crowdfunding info to the product, use these shortcodes:', 'woocommerce-jetpack' )
93
- . '<br>'
94
- . '[wcj_product_total_orders], [wcj_product_total_orders_sum],'
95
- . '<br>'
96
- . '[wcj_product_crowdfunding_goal], [wcj_product_crowdfunding_goal_remaining],'
97
- . '<br>'
98
- . '[wcj_product_crowdfunding_startdate], [wcj_product_crowdfunding_deadline], [wcj_product_crowdfunding_time_remaining].'
99
- . '<br>'
100
- . __( 'Shortcodes could be used in "Product Info" module.', 'woocommerce-jetpack' )
101
- . '<br>'
102
- . __( 'To change add to cart button labels use "Add to Cart Labels" module.', 'woocommerce-jetpack' );
103
  return $this->add_standard_settings( array(), $module_desc );
104
  }
105
  }
4
  *
5
  * The WooCommerce Jetpack Crowdfunding class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.2.6
9
  * @author Algoritmika Ltd.
10
  */
40
  /**
41
  * check_dates.
42
  *
43
+ * @version 2.7.0
44
  */
45
  function check_dates( $purchasable, $_product ) {
46
+ $_product_id = wcj_get_product_id_or_variation_parent_id( $_product );
47
+ $goal = get_post_meta( $_product_id, '_' . 'wcj_crowdfunding_goal_sum', true );
48
  if ( 0 != $goal ) {
49
+ $start_date_str = get_post_meta( $_product_id, '_' . 'wcj_crowdfunding_startdate', true );
50
+ $end_date_str = get_post_meta( $_product_id, '_' . 'wcj_crowdfunding_deadline', true );
51
+ $start_date = ( '' != $start_date_str ) ? strtotime( $start_date_str ) : 0;
52
+ $end_date = ( '' != $end_date_str ) ? strtotime( $end_date_str ) : 0;
53
+ if ( $start_date > 0 && ( $start_date - current_time( 'timestamp' ) ) > 0 ) {
54
+ $purchasable = false;
55
+ }
56
+ if ( $end_date > 0 && ( $end_date - current_time( 'timestamp' ) ) < 0 ) {
57
+ $purchasable = false;
58
+ }
59
  }
60
  return $purchasable;
61
  }
89
  /**
90
  * get_settings.
91
  *
92
+ * @version 2.7.0
93
  */
94
  function get_settings() {
95
+ $module_desc = __( 'When enabled, module will add Crowdfunding metabox to product edit.', 'woocommerce-jetpack' ) . '<br>' .
96
+ sprintf(
97
+ __( 'To add crowdfunding info to the product, use <a href="%s" target="_blank">Booster\'s crowdfunding shortcodes</a>.', 'woocommerce-jetpack' ),
98
+ 'http://booster.io/category/shortcodes/products-crowdfunding/'
99
+ ) . ' ' .
100
+ sprintf(
101
+ __( 'Shortcodes could be used for example in <a href="%s">Product Info module</a>.', 'woocommerce-jetpack' ),
102
+ admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=products&section=product_custom_info' )
103
+ ) . '<br>' .
104
+ sprintf(
105
+ __( 'To change add to cart button labels use <a href="%s">Add to Cart Labels module</a>.', 'woocommerce-jetpack' ),
106
+ admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=labels&section=add_to_cart' )
107
+ );
108
  return $this->add_standard_settings( array(), $module_desc );
109
  }
110
  }
includes/class-wcj-currency-exchange-rates.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Currency Exchange Rates class.
6
  *
7
- * @version 2.6.0
8
  * @since 2.3.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -18,7 +18,7 @@ class WCJ_Currency_Exchange_Rates extends WCJ_Module {
18
  /**
19
  * Constructor.
20
  *
21
- * @version 2.5.0
22
  */
23
  function __construct() {
24
 
@@ -30,12 +30,26 @@ class WCJ_Currency_Exchange_Rates extends WCJ_Module {
30
 
31
  add_filter( 'init', array( $this, 'add_hooks' ) );
32
 
 
 
 
33
  if ( $this->is_enabled() ) {
34
  include_once( 'exchange-rates/class-wcj-exchange-rates-crons.php' );
35
  }
36
  include_once( 'exchange-rates/class-wcj-exchange-rates.php' );
37
  }
38
 
 
 
 
 
 
 
 
 
 
 
 
39
  /**
40
  * get_settings.
41
  *
@@ -87,12 +101,9 @@ class WCJ_Currency_Exchange_Rates extends WCJ_Module {
87
  /**
88
  * add_currency_exchange_rates_settings.
89
  *
90
- * @version 2.6.0
91
  */
92
  function add_currency_exchange_rates_settings() {
93
-
94
- $settings = array();
95
-
96
  $desc = '';
97
  if ( $this->is_enabled() ) {
98
  if ( '' != get_option( 'wcj_currency_exchange_rate_cron_time', '' ) ) {
@@ -104,57 +115,68 @@ class WCJ_Currency_Exchange_Rates extends WCJ_Module {
104
  }
105
  }
106
  }
107
-
108
- $settings[] = array(
109
- 'title' => __( 'Exchange Rates', 'woocommerce-jetpack' ),
110
- 'type' => 'title',
111
- 'desc' => __( 'All currencies from all <strong>enabled</strong> modules (with "Exchange Rates Updates" set to "Automatically via Currency Exchange Rates module") will be automatically added to the list.', 'woocommerce-jetpack' ) . $desc,
112
- 'id' => 'wcj_currency_exchange_rates_options',
113
- );
114
-
115
- $settings[] = array(
116
- 'title' => __( 'Exchange Rates Updates', 'woocommerce-jetpack' ),
117
- 'id' => 'wcj_currency_exchange_rates_auto',
118
- 'default' => 'daily',
119
- 'type' => 'select',
120
- 'options' => array(
121
- // 'manual' => __( 'Enter Rates Manually', 'woocommerce-jetpack' ),
122
- 'minutely' => __( 'Update Every Minute', 'woocommerce-jetpack' ),
123
- 'hourly' => __( 'Update Hourly', 'woocommerce-jetpack' ),
124
- 'twicedaily' => __( 'Update Twice Daily', 'woocommerce-jetpack' ),
125
- 'daily' => __( 'Update Daily', 'woocommerce-jetpack' ),
126
- 'weekly' => __( 'Update Weekly', 'woocommerce-jetpack' ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
  ),
128
  );
129
-
130
- $settings[] = array(
131
- 'title' => __( 'Exchange Rates Server', 'woocommerce-jetpack' ),
132
- 'id' => 'wcj_currency_exchange_rates_server',
133
- 'default' => 'yahoo',
134
- 'type' => 'select',
135
- 'options' => wcj_get_currency_exchange_rate_servers(),
136
- );
137
-
138
- $settings[] = array(
139
- 'title' => __( 'Exchange Rates Offset - Percent', 'woocommerce-jetpack' ),
140
- 'desc_tip' => __( 'If both percent and fixed offsets are set - percent offset is applied first and fixed offset after that.', 'woocommerce-jetpack' ),
141
- 'id' => 'wcj_currency_exchange_rates_offset_percent',
142
- 'default' => 0,
143
- 'type' => 'number',
144
- 'custom_attributes' => array( 'step' => '0.001' ),
145
- );
146
-
147
- $settings[] = array(
148
- 'title' => __( 'Exchange Rates Offset - Fixed', 'woocommerce-jetpack' ),
149
- 'desc_tip' => __( 'If both percent and fixed offsets are set - percent offset is applied first and fixed offset after that.', 'woocommerce-jetpack' ),
150
- 'id' => 'wcj_currency_exchange_rates_offset_fixed',
151
- 'default' => 0,
152
- 'type' => 'number',
153
- 'custom_attributes' => array( 'step' => '0.000001' ),
154
- );
155
-
156
  $currency_from = get_option( 'woocommerce_currency' );
157
-
158
  if ( wcj_is_module_enabled( 'price_by_country' ) ) {
159
  // Currency Pairs - Price by Country
160
  if ( 'manual' != apply_filters( 'booster_get_option', 'manual', get_option( 'wcj_price_by_country_auto_exchange_rates', 'manual' ) ) ) {
@@ -164,7 +186,6 @@ class WCJ_Currency_Exchange_Rates extends WCJ_Module {
164
  }
165
  }
166
  }
167
-
168
  if ( wcj_is_module_enabled( 'multicurrency' ) ) {
169
  // Currency Pairs - Multicurrency
170
  if ( 'manual' != apply_filters( 'booster_get_option', 'manual', get_option( 'wcj_multicurrency_exchange_rate_update_auto', 'manual' ) ) ) {
@@ -174,7 +195,6 @@ class WCJ_Currency_Exchange_Rates extends WCJ_Module {
174
  }
175
  }
176
  }
177
-
178
  if ( wcj_is_module_enabled( 'multicurrency_base_price' ) ) {
179
  // Currency Pairs - Multicurrency Product Base Price
180
  if ( 'manual' != apply_filters( 'booster_get_option', 'manual', get_option( 'wcj_multicurrency_base_price_exchange_rate_update', 'manual' ) ) ) {
@@ -184,7 +204,6 @@ class WCJ_Currency_Exchange_Rates extends WCJ_Module {
184
  }
185
  }
186
  }
187
-
188
  if ( wcj_is_module_enabled( 'currency_per_product' ) ) {
189
  // Currency Pairs - Currency per Product
190
  if ( 'manual' != apply_filters( 'booster_get_option', 'manual', get_option( 'wcj_currency_per_product_exchange_rate_update', 'manual' ) ) ) {
@@ -194,7 +213,6 @@ class WCJ_Currency_Exchange_Rates extends WCJ_Module {
194
  }
195
  }
196
  }
197
-
198
  if ( wcj_is_module_enabled( 'payment_gateways_currency' ) ) {
199
  if ( 'manual' != apply_filters( 'booster_get_option', 'manual', get_option( 'wcj_gateways_currency_exchange_rate_update_auto', 'manual' ) ) ) {
200
  // Currency Pairs - Gateway Currency
@@ -208,20 +226,21 @@ class WCJ_Currency_Exchange_Rates extends WCJ_Module {
208
  }
209
  }
210
  }
211
-
212
- /* $settings[] = array(
213
- 'title' => __( 'Logging', 'woocommerce-jetpack' ),
214
- 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
215
- 'id' => 'wcj_currency_exchange_logging_enabled',
216
- 'default' => 'no',
217
- 'type' => 'checkbox',
218
- ); */
219
-
220
- $settings[] = array(
221
- 'type' => 'sectionend',
222
- 'id' => 'wcj_currency_exchange_rates_options',
223
- );
224
-
 
225
  return $settings;
226
  }
227
  }
4
  *
5
  * The WooCommerce Jetpack Currency Exchange Rates class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.3.0
9
  * @author Algoritmika Ltd.
10
  */
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 2.7.0
22
  */
23
  function __construct() {
24
 
30
 
31
  add_filter( 'init', array( $this, 'add_hooks' ) );
32
 
33
+ add_action( 'wp_ajax_' . 'wcj_ajax_get_exchange_rates', array( $this, 'wcj_ajax_get_exchange_rates' ) );
34
+ add_action( 'wp_ajax_nopriv_' . 'wcj_ajax_get_exchange_rates', array( $this, 'wcj_ajax_get_exchange_rates' ) );
35
+
36
  if ( $this->is_enabled() ) {
37
  include_once( 'exchange-rates/class-wcj-exchange-rates-crons.php' );
38
  }
39
  include_once( 'exchange-rates/class-wcj-exchange-rates.php' );
40
  }
41
 
42
+ /**
43
+ * wcj_ajax_get_exchange_rates.
44
+ *
45
+ * @version 2.7.0
46
+ * @since 2.6.0
47
+ */
48
+ function wcj_ajax_get_exchange_rates() {
49
+ echo alg_get_exchange_rate( $_POST['wcj_currency_from'], $_POST['wcj_currency_to'] );
50
+ die();
51
+ }
52
+
53
  /**
54
  * get_settings.
55
  *
101
  /**
102
  * add_currency_exchange_rates_settings.
103
  *
104
+ * @version 2.7.0
105
  */
106
  function add_currency_exchange_rates_settings() {
 
 
 
107
  $desc = '';
108
  if ( $this->is_enabled() ) {
109
  if ( '' != get_option( 'wcj_currency_exchange_rate_cron_time', '' ) ) {
115
  }
116
  }
117
  }
118
+ $settings = array(
119
+ array(
120
+ 'title' => __( 'Exchange Rates', 'woocommerce-jetpack' ),
121
+ 'type' => 'title',
122
+ 'desc' => __( 'All currencies from all <strong>enabled</strong> modules (with "Exchange Rates Updates" set to "Automatically via Currency Exchange Rates module") will be automatically added to the list.', 'woocommerce-jetpack' ) . $desc,
123
+ 'id' => 'wcj_currency_exchange_rates_options',
124
+ ),
125
+ array(
126
+ 'title' => __( 'Exchange Rates Updates', 'woocommerce-jetpack' ),
127
+ 'id' => 'wcj_currency_exchange_rates_auto',
128
+ 'default' => 'daily',
129
+ 'type' => 'select',
130
+ 'options' => array(
131
+ // 'manual' => __( 'Enter Rates Manually', 'woocommerce-jetpack' ),
132
+ 'minutely' => __( 'Update Every Minute', 'woocommerce-jetpack' ),
133
+ 'hourly' => __( 'Update Hourly', 'woocommerce-jetpack' ),
134
+ 'twicedaily' => __( 'Update Twice Daily', 'woocommerce-jetpack' ),
135
+ 'daily' => __( 'Update Daily', 'woocommerce-jetpack' ),
136
+ 'weekly' => __( 'Update Weekly', 'woocommerce-jetpack' ),
137
+ ),
138
+ ),
139
+ array(
140
+ 'title' => __( 'Exchange Rates Server', 'woocommerce-jetpack' ),
141
+ 'id' => 'wcj_currency_exchange_rates_server',
142
+ 'default' => 'yahoo',
143
+ 'type' => 'select',
144
+ 'options' => wcj_get_currency_exchange_rate_servers(),
145
+ ),
146
+ array(
147
+ 'title' => __( 'Exchange Rates Offset - Percent', 'woocommerce-jetpack' ),
148
+ 'desc_tip' => __( 'If both percent and fixed offsets are set - percent offset is applied first and fixed offset after that.', 'woocommerce-jetpack' ),
149
+ 'id' => 'wcj_currency_exchange_rates_offset_percent',
150
+ 'default' => 0,
151
+ 'type' => 'number',
152
+ 'custom_attributes' => array( 'step' => '0.001' ),
153
+ ),
154
+ array(
155
+ 'title' => __( 'Exchange Rates Offset - Fixed', 'woocommerce-jetpack' ),
156
+ 'desc_tip' => __( 'If both percent and fixed offsets are set - percent offset is applied first and fixed offset after that.', 'woocommerce-jetpack' ),
157
+ 'id' => 'wcj_currency_exchange_rates_offset_fixed',
158
+ 'default' => 0,
159
+ 'type' => 'number',
160
+ 'custom_attributes' => array( 'step' => '0.000001' ),
161
+ ),
162
+ array(
163
+ 'title' => __( 'Calculate with Inversion', 'woocommerce-jetpack' ),
164
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
165
+ 'desc_tip' => __( 'If your currency pair have very small exchange rate, you may want to invert currencies before calculating the rate.', 'woocommerce-jetpack' ),
166
+ 'id' => 'wcj_currency_exchange_rates_calculate_by_invert',
167
+ 'default' => 'no',
168
+ 'type' => 'checkbox',
169
+ ),
170
+ array(
171
+ 'title' => __( 'Always Use cURL', 'woocommerce-jetpack' ),
172
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
173
+ 'desc_tip' => __( 'If for some reason currency exchange rates are not updating, try enabling this option.', 'woocommerce-jetpack' ),
174
+ 'id' => 'wcj_currency_exchange_rates_always_curl',
175
+ 'default' => 'no',
176
+ 'type' => 'checkbox',
177
  ),
178
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
179
  $currency_from = get_option( 'woocommerce_currency' );
 
180
  if ( wcj_is_module_enabled( 'price_by_country' ) ) {
181
  // Currency Pairs - Price by Country
182
  if ( 'manual' != apply_filters( 'booster_get_option', 'manual', get_option( 'wcj_price_by_country_auto_exchange_rates', 'manual' ) ) ) {
186
  }
187
  }
188
  }
 
189
  if ( wcj_is_module_enabled( 'multicurrency' ) ) {
190
  // Currency Pairs - Multicurrency
191
  if ( 'manual' != apply_filters( 'booster_get_option', 'manual', get_option( 'wcj_multicurrency_exchange_rate_update_auto', 'manual' ) ) ) {
195
  }
196
  }
197
  }
 
198
  if ( wcj_is_module_enabled( 'multicurrency_base_price' ) ) {
199
  // Currency Pairs - Multicurrency Product Base Price
200
  if ( 'manual' != apply_filters( 'booster_get_option', 'manual', get_option( 'wcj_multicurrency_base_price_exchange_rate_update', 'manual' ) ) ) {
204
  }
205
  }
206
  }
 
207
  if ( wcj_is_module_enabled( 'currency_per_product' ) ) {
208
  // Currency Pairs - Currency per Product
209
  if ( 'manual' != apply_filters( 'booster_get_option', 'manual', get_option( 'wcj_currency_per_product_exchange_rate_update', 'manual' ) ) ) {
213
  }
214
  }
215
  }
 
216
  if ( wcj_is_module_enabled( 'payment_gateways_currency' ) ) {
217
  if ( 'manual' != apply_filters( 'booster_get_option', 'manual', get_option( 'wcj_gateways_currency_exchange_rate_update_auto', 'manual' ) ) ) {
218
  // Currency Pairs - Gateway Currency
226
  }
227
  }
228
  }
229
+ $settings = array_merge( $settings, array(
230
+ /*
231
+ array(
232
+ 'title' => __( 'Logging', 'woocommerce-jetpack' ),
233
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
234
+ 'id' => 'wcj_currency_exchange_logging_enabled',
235
+ 'default' => 'no',
236
+ 'type' => 'checkbox',
237
+ ),
238
+ */
239
+ array(
240
+ 'type' => 'sectionend',
241
+ 'id' => 'wcj_currency_exchange_rates_options',
242
+ ),
243
+ ) );
244
  return $settings;
245
  }
246
  }
includes/class-wcj-currency-external-products.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Currency for External Products class.
6
  *
7
- * @version 2.5.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -17,9 +17,9 @@ class WCJ_Currency_External_Products extends WCJ_Module {
17
  /**
18
  * Constructor.
19
  *
20
- * @version 2.5.0
21
  */
22
- public function __construct() {
23
 
24
  $this->id = 'currency_external_products';
25
  $this->short_desc = __( 'Currency for External Products', 'woocommerce-jetpack' );
@@ -28,7 +28,7 @@ class WCJ_Currency_External_Products extends WCJ_Module {
28
  parent::__construct();
29
 
30
  if ( $this->is_enabled() ) {
31
- if ( '' != get_option( 'wcj_currency_external_products_symbol' ) ) {
32
  add_filter( 'woocommerce_currency_symbol', array( $this, 'change_currency_symbol' ), PHP_INT_MAX, 2 );
33
  add_filter( 'woocommerce_currency', array( $this, 'change_currency_code' ), PHP_INT_MAX, 1 );
34
  }
@@ -38,13 +38,13 @@ class WCJ_Currency_External_Products extends WCJ_Module {
38
  /**
39
  * change_currency_code.
40
  *
41
- * @version 2.4.4
42
  * @since 2.4.4
43
  */
44
- public function change_currency_code( $currency ) {
45
  global $product;
46
- if ( is_object( $product ) && isset( $product->product_type ) && 'external' === $product->product_type ) {
47
- return get_option( 'wcj_currency_external_products_symbol' );
48
  }
49
  return $currency;
50
  }
@@ -52,12 +52,12 @@ class WCJ_Currency_External_Products extends WCJ_Module {
52
  /**
53
  * change_currency_symbol.
54
  *
55
- * @version 2.4.4
56
  */
57
- public function change_currency_symbol( $currency_symbol, $currency ) {
58
  global $product;
59
- if ( is_object( $product ) && isset( $product->product_type ) && 'external' === $product->product_type ) {
60
- return wcj_get_currency_symbol( get_option( 'wcj_currency_external_products_symbol' ) );
61
  }
62
  return $currency_symbol;
63
  }
4
  *
5
  * The WooCommerce Jetpack Currency for External Products class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
17
  /**
18
  * Constructor.
19
  *
20
+ * @version 2.7.0
21
  */
22
+ function __construct() {
23
 
24
  $this->id = 'currency_external_products';
25
  $this->short_desc = __( 'Currency for External Products', 'woocommerce-jetpack' );
28
  parent::__construct();
29
 
30
  if ( $this->is_enabled() ) {
31
+ if ( '' != get_option( 'wcj_currency_external_products_symbol', 'EUR' ) ) {
32
  add_filter( 'woocommerce_currency_symbol', array( $this, 'change_currency_symbol' ), PHP_INT_MAX, 2 );
33
  add_filter( 'woocommerce_currency', array( $this, 'change_currency_code' ), PHP_INT_MAX, 1 );
34
  }
38
  /**
39
  * change_currency_code.
40
  *
41
+ * @version 2.7.0
42
  * @since 2.4.4
43
  */
44
+ function change_currency_code( $currency ) {
45
  global $product;
46
+ if ( is_object( $product ) && $product->is_type( 'external' ) ) {
47
+ return get_option( 'wcj_currency_external_products_symbol', 'EUR' );
48
  }
49
  return $currency;
50
  }
52
  /**
53
  * change_currency_symbol.
54
  *
55
+ * @version 2.7.0
56
  */
57
+ function change_currency_symbol( $currency_symbol, $currency ) {
58
  global $product;
59
+ if ( is_object( $product ) && $product->is_type( 'external' ) ) {
60
+ return wcj_get_currency_symbol( get_option( 'wcj_currency_external_products_symbol', 'EUR' ) );
61
  }
62
  return $currency_symbol;
63
  }
includes/class-wcj-currency-per-product.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Currency per Product class.
6
  *
7
- * @version 2.6.0
8
  * @since 2.5.2
9
  * @author Algoritmika Ltd.
10
  */
@@ -18,7 +18,7 @@ class WCJ_Currency_Per_Product extends WCJ_Module {
18
  /**
19
  * Constructor.
20
  *
21
- * @version 2.5.2
22
  * @since 2.5.2
23
  */
24
  function __construct() {
@@ -46,38 +46,124 @@ class WCJ_Currency_Per_Product extends WCJ_Module {
46
  add_filter( 'woocommerce_add_cart_item_data', array( $this, 'add_cart_item_data' ), PHP_INT_MAX, 3 );
47
  add_filter( 'woocommerce_add_cart_item', array( $this, 'add_cart_item' ), PHP_INT_MAX, 2 );
48
  add_filter( 'woocommerce_get_cart_item_from_session', array( $this, 'get_cart_item_from_session' ), PHP_INT_MAX, 3 );
 
49
 
50
  // Price
51
- add_filter( 'woocommerce_get_price', array( $this, 'change_price' ), PHP_INT_MAX, 2 );
 
52
 
53
  // Grouped
54
  add_filter( 'woocommerce_grouped_price_html', array( $this, 'grouped_price_html' ), PHP_INT_MAX, 2 );
55
 
 
 
 
56
  //}
57
  }
58
  }
59
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  /**
61
  * grouped_price_html.
62
  *
63
- * @version 2.5.2
64
  * @since 2.5.2
65
  */
66
  function grouped_price_html( $price_html, $_product ) {
67
- $tax_display_mode = get_option( 'woocommerce_tax_display_shop' );
68
- $child_prices = array();
69
-
70
- foreach ( $_product->get_children() as $child_id )
71
  $child_prices[ $child_id ] = get_post_meta( $child_id, '_price', true );
72
-
73
- // $child_prices = array_unique( $child_prices );
74
- $get_price_method = 'get_price_' . $tax_display_mode . 'uding_tax';
75
-
76
  if ( ! empty( $child_prices ) ) {
77
- /* $min_price = min( $child_prices );
 
78
  $max_price = max( $child_prices );
79
  $min_price_id = min( array_keys( $child_prices, min( $child_prices ) ) );
80
- $max_price_id = max( array_keys( $child_prices, max( $child_prices ) ) ); */
 
81
  asort( $child_prices );
82
  $min_price = current( $child_prices );
83
  $min_price_id = key( $child_prices );
@@ -93,15 +179,13 @@ class WCJ_Currency_Per_Product extends WCJ_Module {
93
 
94
  if ( $min_price ) {
95
  if ( $min_price == $max_price && $min_currency_per_product_currency === $max_currency_per_product_currency ) {
96
- $display_price = wc_price( $_product->$get_price_method( 1, $min_price ), array( 'currency' => $min_currency_per_product_currency ) );
97
  } else {
98
- $from = wc_price( $_product->$get_price_method( 1, $min_price ), array( 'currency' => $min_currency_per_product_currency ) );
99
- $to = wc_price( $_product->$get_price_method( 1, $max_price ), array( 'currency' => $max_currency_per_product_currency ) );
100
  $display_price = sprintf( _x( '%1$s&ndash;%2$s', 'Price range: from-to', 'woocommerce' ), $from, $to );
101
  }
102
-
103
  $new_price_html = $display_price . $_product->get_price_suffix();
104
-
105
  return $new_price_html;
106
  }
107
 
@@ -129,13 +213,38 @@ class WCJ_Currency_Per_Product extends WCJ_Module {
129
  /**
130
  * change_price.
131
  *
132
- * @version 2.5.2
133
  * @since 2.5.2
134
  */
135
  function change_price( $price, $_product ) {
136
  if ( isset( $_product->wcj_currency_per_product ) ) {
137
- $exchange_rate = $this->get_currency_exchange_rate( $_product->wcj_currency_per_product );
138
- return $price * $exchange_rate;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
139
  }
140
  return $price;
141
  }
@@ -181,41 +290,88 @@ class WCJ_Currency_Per_Product extends WCJ_Module {
181
  }
182
 
183
  /**
184
- * change_currency_code.
185
  *
186
- * @version 2.6.0
187
- * @since 2.5.2
188
  */
189
- public function change_currency_code( $currency ) {
190
  $the_ID = get_the_ID();
191
  if ( 0 == $the_ID && isset( $_REQUEST['product_id'] ) ) {
192
  $the_ID = $_REQUEST['product_id'];
193
  }
 
 
 
 
 
194
  if ( 0 != $the_ID && 'product' === get_post_type( $the_ID ) ) {
195
  $currency_per_product_currency = get_post_meta( $the_ID, '_' . 'wcj_currency_per_product_currency', true );
196
- if ( '' != $currency_per_product_currency ) {
197
- return $currency_per_product_currency;
198
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
199
  }
200
- return $currency;
201
  }
202
 
203
  /**
204
  * change_currency_symbol.
205
  *
206
- * @version 2.6.0
207
  * @since 2.5.2
208
  */
209
  function change_currency_symbol( $currency_symbol, $currency ) {
210
- $the_ID = get_the_ID();
211
- if ( 0 == $the_ID && isset( $_REQUEST['product_id'] ) ) {
212
- $the_ID = $_REQUEST['product_id'];
213
- }
214
- if ( 0 != $the_ID && 'product' === get_post_type( $the_ID ) ) {
215
- $currency_per_product_currency = get_post_meta( $the_ID, '_' . 'wcj_currency_per_product_currency', true );
216
- if ( '' != $currency_per_product_currency ) {
217
- return wcj_get_currency_symbol( $currency_per_product_currency );
218
- }
219
  }
220
  return $currency_symbol;
221
  }
@@ -247,31 +403,10 @@ class WCJ_Currency_Per_Product extends WCJ_Module {
247
  return $options;
248
  }
249
 
250
- /**
251
- * add_settings_hook.
252
- *
253
- * @version 2.5.2
254
- * @since 2.5.2
255
- */
256
- function add_settings_hook() {
257
- add_filter( 'wcj_currency_per_product_settings', array( $this, 'add_settings' ) );
258
- }
259
-
260
- /**
261
- * get_settings.
262
- *
263
- * @version 2.5.2
264
- * @since 2.5.2
265
- */
266
- function get_settings() {
267
- $settings = apply_filters( 'wcj_currency_per_product_settings', array() );
268
- return $this->add_standard_settings( $settings );
269
- }
270
-
271
  /**
272
  * add_settings.
273
  *
274
- * @version 2.6.0
275
  * @since 2.5.2
276
  */
277
  function add_settings() {
@@ -284,9 +419,45 @@ class WCJ_Currency_Per_Product extends WCJ_Module {
284
  } */
285
  $settings = array(
286
  array(
287
- 'title' => __( 'Options', 'woocommerce-jetpack' ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
288
  'type' => 'title',
289
- 'id' => 'wcj_currency_per_product_options',
290
  ),
291
  array(
292
  'title' => __( 'Exchange Rates Updates', 'woocommerce-jetpack' ),
@@ -305,10 +476,11 @@ class WCJ_Currency_Per_Product extends WCJ_Module {
305
  ),
306
  array(
307
  'type' => 'sectionend',
308
- 'id' => 'wcj_currency_per_product_options',
309
  ),
310
  array(
311
  'title' => __( 'Currencies Options', 'woocommerce-jetpack' ),
 
312
  'type' => 'title',
313
  'id' => 'wcj_currency_per_product_currencies_options',
314
  ),
4
  *
5
  * The WooCommerce Jetpack Currency per Product class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.5.2
9
  * @author Algoritmika Ltd.
10
  */
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 2.7.0
22
  * @since 2.5.2
23
  */
24
  function __construct() {
46
  add_filter( 'woocommerce_add_cart_item_data', array( $this, 'add_cart_item_data' ), PHP_INT_MAX, 3 );
47
  add_filter( 'woocommerce_add_cart_item', array( $this, 'add_cart_item' ), PHP_INT_MAX, 2 );
48
  add_filter( 'woocommerce_get_cart_item_from_session', array( $this, 'get_cart_item_from_session' ), PHP_INT_MAX, 3 );
49
+ add_filter( 'woocommerce_add_to_cart_validation', array( $this, 'validate_on_add_to_cart' ), PHP_INT_MAX, 2 );
50
 
51
  // Price
52
+ add_filter( WCJ_PRODUCT_GET_PRICE_FILTER, array( $this, 'change_price' ), PHP_INT_MAX, 2 );
53
+ add_filter( 'woocommerce_product_variation_get_price', array( $this, 'change_price' ), PHP_INT_MAX, 2 );
54
 
55
  // Grouped
56
  add_filter( 'woocommerce_grouped_price_html', array( $this, 'grouped_price_html' ), PHP_INT_MAX, 2 );
57
 
58
+ // Shipping
59
+ add_filter( 'woocommerce_package_rates', array( $this, 'change_shipping_price' ), PHP_INT_MAX, 2 );
60
+
61
  //}
62
  }
63
  }
64
 
65
+ /**
66
+ * change_shipping_price.
67
+ *
68
+ * @version 2.7.0
69
+ * @since 2.7.0
70
+ */
71
+ function change_shipping_price( $package_rates, $package ) {
72
+ if ( $this->is_cart_or_checkout_or_ajax() ) {
73
+ if ( WC()->cart->is_empty() ) {
74
+ return $package_rates;
75
+ }
76
+ $cart_checkout_behaviour = get_option( 'wcj_currency_per_product_cart_checkout', 'convert_shop_default' );
77
+ switch ( $cart_checkout_behaviour ) {
78
+ case 'leave_one_product':
79
+ case 'leave_same_currency':
80
+ case 'convert_first_product':
81
+ case 'convert_last_product':
82
+ $shop_currency = get_option( 'woocommerce_currency' );
83
+ if ( false != ( $_currency = $this->get_cart_checkout_currency() ) && $_currency != $shop_currency ) {
84
+ $currency_exchange_rate = $this->get_currency_exchange_rate( $_currency );
85
+ if ( 0 != $currency_exchange_rate && 1 != $currency_exchange_rate ) {
86
+ $currency_exchange_rate = 1 / $currency_exchange_rate;
87
+ $modified_package_rates = array();
88
+ foreach ( $package_rates as $id => $package_rate ) {
89
+ if ( isset( $package_rate->cost ) ) {
90
+ $package_rate->cost = $package_rate->cost * $currency_exchange_rate;
91
+ if ( isset( $package_rate->taxes ) && ! empty( $package_rate->taxes ) ) {
92
+ foreach ( $package_rate->taxes as $tax_id => $tax ) {
93
+ $package_rate->taxes[ $tax_id ] = $package_rate->taxes[ $tax_id ] * $currency_exchange_rate;
94
+ }
95
+ }
96
+ }
97
+ $modified_package_rates[ $id ] = $package_rate;
98
+ }
99
+ return $modified_package_rates;
100
+ } else {
101
+ return $package_rates;
102
+ }
103
+ } else {
104
+ return $package_rates;
105
+ }
106
+ default: // case 'convert_shop_default':
107
+ return $package_rates;
108
+ }
109
+ }
110
+ return $package_rates;
111
+ }
112
+
113
+ /**
114
+ * validate_on_add_to_cart.
115
+ *
116
+ * @version 2.7.0
117
+ * @since 2.7.0
118
+ */
119
+ function validate_on_add_to_cart( $passed, $product_id ) {
120
+ $cart_checkout_behaviour = get_option( 'wcj_currency_per_product_cart_checkout', 'convert_shop_default' );
121
+ if ( 'leave_one_product' === $cart_checkout_behaviour ) {
122
+ foreach ( WC()->cart->get_cart() as $cart_item ) {
123
+ if ( $cart_item['product_id'] != $product_id ) {
124
+ wc_add_notice( get_option( 'wcj_currency_per_product_cart_checkout_leave_one_product',
125
+ __( 'Only one product can be added to the cart. Clear the cart or finish the order, before adding another product to the cart.', 'woocommerce-jetpack' ) ), 'error' );
126
+ return false;
127
+ }
128
+ }
129
+ } elseif ( 'leave_same_currency' === $cart_checkout_behaviour ) {
130
+ $shop_currency = get_option( 'woocommerce_currency' );
131
+ $product_currency = get_post_meta( $product_id, '_' . 'wcj_currency_per_product_currency', true );
132
+ if ( '' == $product_currency ) {
133
+ $product_currency = $shop_currency;
134
+ }
135
+ foreach ( WC()->cart->get_cart() as $cart_item ) {
136
+ $cart_product_currency = ( isset( $cart_item['wcj_currency_per_product'] ) && '' != $cart_item['wcj_currency_per_product'] ) ?
137
+ $cart_item['wcj_currency_per_product'] : $shop_currency;
138
+ if ( $cart_product_currency != $product_currency ) {
139
+ wc_add_notice( get_option( 'wcj_currency_per_product_cart_checkout_leave_same_currency',
140
+ __( 'Only products with same currency can be added to the cart. Clear the cart or finish the order, before adding products with another currency to the cart.', 'woocommerce-jetpack' ) ), 'error' );
141
+ return false;
142
+ }
143
+ }
144
+ }
145
+ return $passed;
146
+ }
147
+
148
  /**
149
  * grouped_price_html.
150
  *
151
+ * @version 2.7.0
152
  * @since 2.5.2
153
  */
154
  function grouped_price_html( $price_html, $_product ) {
155
+ $child_prices = array();
156
+ foreach ( $_product->get_children() as $child_id ) {
 
 
157
  $child_prices[ $child_id ] = get_post_meta( $child_id, '_price', true );
158
+ }
159
+ // $child_prices = array_unique( $child_prices );
 
 
160
  if ( ! empty( $child_prices ) ) {
161
+ /*
162
+ $min_price = min( $child_prices );
163
  $max_price = max( $child_prices );
164
  $min_price_id = min( array_keys( $child_prices, min( $child_prices ) ) );
165
+ $max_price_id = max( array_keys( $child_prices, max( $child_prices ) ) );
166
+ */
167
  asort( $child_prices );
168
  $min_price = current( $child_prices );
169
  $min_price_id = key( $child_prices );
179
 
180
  if ( $min_price ) {
181
  if ( $min_price == $max_price && $min_currency_per_product_currency === $max_currency_per_product_currency ) {
182
+ $display_price = wc_price( wcj_get_product_display_price( $_product, $min_price, 1 ), array( 'currency' => $min_currency_per_product_currency ) );
183
  } else {
184
+ $from = wc_price( wcj_get_product_display_price( $_product, $min_price, 1 ), array( 'currency' => $min_currency_per_product_currency ) );
185
+ $to = wc_price( wcj_get_product_display_price( $_product, $max_price, 1 ), array( 'currency' => $max_currency_per_product_currency ) );
186
  $display_price = sprintf( _x( '%1$s&ndash;%2$s', 'Price range: from-to', 'woocommerce' ), $from, $to );
187
  }
 
188
  $new_price_html = $display_price . $_product->get_price_suffix();
 
189
  return $new_price_html;
190
  }
191
 
213
  /**
214
  * change_price.
215
  *
216
+ * @version 2.7.0
217
  * @since 2.5.2
218
  */
219
  function change_price( $price, $_product ) {
220
  if ( isset( $_product->wcj_currency_per_product ) ) {
221
+ $cart_checkout_behaviour = get_option( 'wcj_currency_per_product_cart_checkout', 'convert_shop_default' );
222
+ switch ( $cart_checkout_behaviour ) {
223
+ case 'leave_one_product':
224
+ case 'leave_same_currency':
225
+ return $price;
226
+ case 'convert_first_product':
227
+ case 'convert_last_product':
228
+ $shop_currency = get_option('woocommerce_currency');
229
+ if ( false != ( $_currency = $this->get_cart_checkout_currency() ) && $_currency != $shop_currency ) {
230
+ if ( $_product->wcj_currency_per_product === $_currency ) {
231
+ return $price;
232
+ } else {
233
+ $exchange_rate_product = $this->get_currency_exchange_rate( $_product->wcj_currency_per_product );
234
+ $exchange_rate_cart_checkout = $this->get_currency_exchange_rate( $_currency );
235
+ $exchange_rate = $exchange_rate_product / $exchange_rate_cart_checkout;
236
+ return $price * $exchange_rate;
237
+ }
238
+ } elseif ( $_product->wcj_currency_per_product === $shop_currency ) {
239
+ return $price;
240
+ } else {
241
+ $exchange_rate = $this->get_currency_exchange_rate( $_product->wcj_currency_per_product );
242
+ return $price * $exchange_rate;
243
+ }
244
+ default: // case 'convert_shop_default':
245
+ $exchange_rate = $this->get_currency_exchange_rate( $_product->wcj_currency_per_product );
246
+ return $price * $exchange_rate;
247
+ }
248
  }
249
  return $price;
250
  }
290
  }
291
 
292
  /**
293
+ * get_current_product_id_and_currency.
294
  *
295
+ * @version 2.7.0
296
+ * @since 2.7.0
297
  */
298
+ function get_current_product_id_and_currency() {
299
  $the_ID = get_the_ID();
300
  if ( 0 == $the_ID && isset( $_REQUEST['product_id'] ) ) {
301
  $the_ID = $_REQUEST['product_id'];
302
  }
303
+ if ( 0 == $the_ID && isset( $_POST['form'] ) ) { // WooCommerce Bookings plugin
304
+ $posted = array();
305
+ parse_str( $_POST['form'], $posted );
306
+ $the_ID = isset( $posted['add-to-cart'] ) ? $posted['add-to-cart'] : 0;
307
+ }
308
  if ( 0 != $the_ID && 'product' === get_post_type( $the_ID ) ) {
309
  $currency_per_product_currency = get_post_meta( $the_ID, '_' . 'wcj_currency_per_product_currency', true );
310
+ return ( '' != $currency_per_product_currency ) ? $currency_per_product_currency : false;
311
+ }
312
+ return false;
313
+ }
314
+
315
+ /**
316
+ * get_cart_checkout_currency.
317
+ *
318
+ * @version 2.7.0
319
+ * @since 2.7.0
320
+ */
321
+ function get_cart_checkout_currency() {
322
+ if ( WC()->cart->is_empty() ) {
323
+ return false;
324
+ }
325
+ $cart_checkout_behaviour = get_option( 'wcj_currency_per_product_cart_checkout', 'convert_shop_default' );
326
+ if ( 'convert_shop_default' === $cart_checkout_behaviour ) {
327
+ return false;
328
+ }
329
+ $cart_items = WC()->cart->get_cart();
330
+ if ( 'convert_last_product' === $cart_checkout_behaviour ) {
331
+ $cart_items = array_reverse( $cart_items );
332
+ }
333
+ foreach ( $cart_items as $cart_item ) {
334
+ return ( isset( $cart_item['wcj_currency_per_product'] ) ) ? $cart_item['wcj_currency_per_product'] : false;
335
+ }
336
+ }
337
+
338
+ /**
339
+ * is_cart_or_checkout_or_ajax.
340
+ *
341
+ * @version 2.7.0
342
+ * @since 2.7.0
343
+ * @todo fix AJAX issue (for minicart)
344
+ */
345
+ function is_cart_or_checkout_or_ajax() {
346
+ return ( ( function_exists( 'is_cart' ) && is_cart() ) || ( function_exists( 'is_checkout' ) && is_checkout() ) /* || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) */ );
347
+ }
348
+
349
+ /**
350
+ * change_currency_code.
351
+ *
352
+ * @version 2.7.0
353
+ * @since 2.5.2
354
+ */
355
+ function change_currency_code( $currency ) {
356
+ if ( false != ( $_currency = $this->get_current_product_id_and_currency() ) ) {
357
+ return $_currency;
358
+ } elseif ( $this->is_cart_or_checkout_or_ajax() ) {
359
+ return ( false != ( $_currency = $this->get_cart_checkout_currency() ) ) ? $_currency : $currency;
360
  }
361
+ return $currency;
362
  }
363
 
364
  /**
365
  * change_currency_symbol.
366
  *
367
+ * @version 2.7.0
368
  * @since 2.5.2
369
  */
370
  function change_currency_symbol( $currency_symbol, $currency ) {
371
+ if ( false != ( $_currency = $this->get_current_product_id_and_currency() ) ) {
372
+ return wcj_get_currency_symbol( $_currency );
373
+ } elseif ( $this->is_cart_or_checkout_or_ajax() ) {
374
+ return ( false != ( $_currency = $this->get_cart_checkout_currency() ) ) ? wcj_get_currency_symbol( $_currency ) : $currency_symbol;
 
 
 
 
 
375
  }
376
  return $currency_symbol;
377
  }
403
  return $options;
404
  }
405
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
406
  /**
407
  * add_settings.
408
  *
409
+ * @version 2.7.0
410
  * @since 2.5.2
411
  */
412
  function add_settings() {
419
  } */
420
  $settings = array(
421
  array(
422
+ 'title' => __( 'Cart and Checkout Behaviour Options', 'woocommerce-jetpack' ),
423
+ 'type' => 'title',
424
+ 'id' => 'wcj_currency_per_product_cart_options',
425
+ ),
426
+ array(
427
+ 'title' => __( 'Cart and Checkout Behaviour', 'woocommerce-jetpack' ),
428
+ 'id' => 'wcj_currency_per_product_cart_checkout',
429
+ 'default' => 'convert_shop_default',
430
+ 'type' => 'select',
431
+ 'options' => array(
432
+ 'convert_shop_default' => __( 'Convert to shop default currency', 'woocommerce-jetpack' ),
433
+ 'leave_one_product' => __( 'Leave product currency (allow only one product to be added to cart)', 'woocommerce-jetpack' ),
434
+ 'leave_same_currency' => __( 'Leave product currency (allow only same currency products to be added to cart)', 'woocommerce-jetpack' ),
435
+ 'convert_last_product' => __( 'Convert to currency of last product in cart', 'woocommerce-jetpack' ),
436
+ 'convert_first_product' => __( 'Convert to currency of first product in cart', 'woocommerce-jetpack' ),
437
+ ),
438
+ ),
439
+ array(
440
+ 'title' => __( 'Message', 'woocommerce-jetpack' ) . ': ' . __( 'Leave product currency (allow only one product to be added to cart)', 'woocommerce-jetpack' ),
441
+ 'id' => 'wcj_currency_per_product_cart_checkout_leave_one_product',
442
+ 'default' => __( 'Only one product can be added to the cart. Clear the cart or finish the order, before adding another product to the cart.', 'woocommerce-jetpack' ),
443
+ 'type' => 'textarea',
444
+ 'css' => 'min-width:300px;width:66%',
445
+ ),
446
+ array(
447
+ 'title' => __( 'Message', 'woocommerce-jetpack' ) . ': ' . __( 'Leave product currency (allow only same currency products to be added to cart)', 'woocommerce-jetpack' ),
448
+ 'id' => 'wcj_currency_per_product_cart_checkout_leave_same_currency',
449
+ 'default' => __( 'Only products with same currency can be added to the cart. Clear the cart or finish the order, before adding products with another currency to the cart.', 'woocommerce-jetpack' ),
450
+ 'type' => 'textarea',
451
+ 'css' => 'min-width:300px;width:66%',
452
+ ),
453
+ array(
454
+ 'type' => 'sectionend',
455
+ 'id' => 'wcj_currency_per_product_cart_options',
456
+ ),
457
+ array(
458
+ 'title' => __( 'Exchange Rates Updates Options', 'woocommerce-jetpack' ),
459
  'type' => 'title',
460
+ 'id' => 'wcj_currency_per_product_exchange_rate_update_options',
461
  ),
462
  array(
463
  'title' => __( 'Exchange Rates Updates', 'woocommerce-jetpack' ),
476
  ),
477
  array(
478
  'type' => 'sectionend',
479
+ 'id' => 'wcj_currency_per_product_exchange_rate_update_options',
480
  ),
481
  array(
482
  'title' => __( 'Currencies Options', 'woocommerce-jetpack' ),
483
+ 'desc' => __( 'Exchange rates for currencies won\'t be used if "Cart and Checkout Behaviour" is set to one of "Leave product currency ..." options.', 'woocommerce-jetpack' ),
484
  'type' => 'title',
485
  'id' => 'wcj_currency_per_product_currencies_options',
486
  ),
includes/class-wcj-custom-css.php ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WooCommerce Jetpack Custom CSS
4
+ *
5
+ * The WooCommerce Jetpack Custom CSS class.
6
+ *
7
+ * @version 2.7.0
8
+ * @since 2.7.0
9
+ * @author Algoritmika Ltd.
10
+ */
11
+
12
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
13
+
14
+ if ( ! class_exists( 'WCJ_Custom_CSS' ) ) :
15
+
16
+ class WCJ_Custom_CSS extends WCJ_Module {
17
+
18
+ /**
19
+ * Constructor.
20
+ *
21
+ * @version 2.7.0
22
+ * @since 2.7.0
23
+ * @todo wp_safe_redirect after saving settings
24
+ * @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
25
+ * @todo (maybe) set `add_action` `priority` to `PHP_INT_MAX`
26
+ */
27
+ function __construct() {
28
+
29
+ $this->id = 'custom_css';
30
+ $this->short_desc = __( 'Custom CSS', 'woocommerce-jetpack' );
31
+ $this->desc = __( 'Another custom CSS, if you need one.', 'woocommerce-jetpack' );
32
+ $this->link = 'http://booster.io/features/woocommerce-booster-custom-css/';
33
+ parent::__construct();
34
+
35
+ add_action( 'init', array( $this, 'add_settings_hook' ) );
36
+
37
+ if ( $this->is_enabled() ) {
38
+ if ( '' != get_option( 'wcj_general_custom_css', '' ) ) {
39
+ add_action( 'wp_head', array( $this, 'hook_custom_css' ) );
40
+ }
41
+ if ( '' != get_option( 'wcj_general_custom_admin_css', '' ) ) {
42
+ add_action( 'admin_head', array( $this, 'hook_custom_admin_css' ) );
43
+ }
44
+ }
45
+ }
46
+
47
+ /**
48
+ * hook_custom_css.
49
+ *
50
+ * @version 2.7.0
51
+ */
52
+ function hook_custom_css() {
53
+ echo '<style>' . get_option( 'wcj_general_custom_css', '' ) . '</style>';
54
+ }
55
+
56
+ /**
57
+ * hook_custom_admin_css.
58
+ *
59
+ * @version 2.7.0
60
+ */
61
+ function hook_custom_admin_css() {
62
+ echo '<style>' . get_option( 'wcj_general_custom_admin_css', '' ) . '</style>';
63
+ }
64
+
65
+ /*
66
+ * add_settings.
67
+ *
68
+ * @version 2.7.0
69
+ * @since 2.7.0
70
+ */
71
+ function add_settings() {
72
+ return array(
73
+ array(
74
+ 'title' => __( 'Options', 'woocommerce-jetpack' ),
75
+ 'type' => 'title',
76
+ 'id' => 'wcj_custom_css_options',
77
+ ),
78
+ array(
79
+ 'title' => __( 'Custom CSS - Front end (Customers)', 'woocommerce-jetpack' ),
80
+ 'id' => 'wcj_general_custom_css',
81
+ 'default' => '',
82
+ 'type' => 'custom_textarea',
83
+ 'css' => 'width:66%;min-width:300px;min-height:300px;',
84
+ ),
85
+ array(
86
+ 'title' => __( 'Custom CSS - Back end (Admin)', 'woocommerce-jetpack' ),
87
+ 'id' => 'wcj_general_custom_admin_css',
88
+ 'default' => '',
89
+ 'type' => 'custom_textarea',
90
+ 'css' => 'width:66%;min-width:300px;min-height:300px;',
91
+ ),
92
+ array(
93
+ 'type' => 'sectionend',
94
+ 'id' => 'wcj_custom_css_options',
95
+ ),
96
+ );
97
+ }
98
+
99
+ }
100
+
101
+ endif;
102
+
103
+ return new WCJ_Custom_CSS();
includes/class-wcj-emails.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Emails class.
6
  *
7
- * @version 2.5.5
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -17,7 +17,7 @@ class WCJ_Emails extends WCJ_Module {
17
  /**
18
  * Constructor.
19
  *
20
- * @version 2.5.0
21
  */
22
  public function __construct() {
23
 
@@ -37,12 +37,33 @@ class WCJ_Emails extends WCJ_Module {
37
  if ( '' != get_option( 'wcj_emails_cc_email' ) ) {
38
  add_filter( 'woocommerce_email_headers', array( $this, 'add_cc_email' ) );
39
  }
 
 
 
 
40
  // add_action( 'woocommerce_email_after_order_table', array( $this, 'add_payment_method_to_new_order_email' ), 15, 2 );
41
  // Settings
42
  add_filter( 'woocommerce_email_settings', array( $this, 'add_email_forwarding_fields_to_wc_standard_settings' ), 100 );
43
  }
44
  }
45
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  /**
47
  * get_order_statuses.
48
  *
@@ -180,7 +201,7 @@ class WCJ_Emails extends WCJ_Module {
180
  /**
181
  * get_settings.
182
  *
183
- * @version 2.4.8
184
  */
185
  function get_settings() {
186
  $settings = array(
@@ -213,6 +234,30 @@ class WCJ_Emails extends WCJ_Module {
213
  'type' => 'sectionend',
214
  'id' => 'wcj_emails_custom_emails_options',
215
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
216
  ) );
217
  $settings = array_merge( $settings, $this->get_emails_forwarding_settings() );
218
  return $this->add_standard_settings( $settings );
4
  *
5
  * The WooCommerce Jetpack Emails class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
17
  /**
18
  * Constructor.
19
  *
20
+ * @version 2.7.0
21
  */
22
  public function __construct() {
23
 
37
  if ( '' != get_option( 'wcj_emails_cc_email' ) ) {
38
  add_filter( 'woocommerce_email_headers', array( $this, 'add_cc_email' ) );
39
  }
40
+ // Product Info
41
+ if ( 'yes' === get_option( 'wcj_product_info_in_email_order_item_name_enabled', 'no' ) ) {
42
+ add_filter( 'woocommerce_order_item_name', array( $this, 'add_product_info_to_email_order_item_name' ), PHP_INT_MAX, 2 );
43
+ }
44
  // add_action( 'woocommerce_email_after_order_table', array( $this, 'add_payment_method_to_new_order_email' ), 15, 2 );
45
  // Settings
46
  add_filter( 'woocommerce_email_settings', array( $this, 'add_email_forwarding_fields_to_wc_standard_settings' ), 100 );
47
  }
48
  }
49
 
50
+ /**
51
+ * add_product_info_to_email_order_item_name.
52
+ *
53
+ * @version 2.7.0
54
+ * @since 2.7.0
55
+ */
56
+ function add_product_info_to_email_order_item_name( $item_name, $item ) {
57
+ if ( $item['product_id'] ) {
58
+ global $post;
59
+ $post = get_post( $item['product_id'] );
60
+ setup_postdata( $post );
61
+ $item_name .= do_shortcode( get_option( 'wcj_product_info_in_email_order_item_name', '[wcj_product_categories strip_tags="yes" before="<hr><em>" after="</em>"]' ) );
62
+ wp_reset_postdata();
63
+ }
64
+ return $item_name;
65
+ }
66
+
67
  /**
68
  * get_order_statuses.
69
  *
201
  /**
202
  * get_settings.
203
  *
204
+ * @version 2.7.0
205
  */
206
  function get_settings() {
207
  $settings = array(
234
  'type' => 'sectionend',
235
  'id' => 'wcj_emails_custom_emails_options',
236
  ),
237
+ array(
238
+ 'title' => __( 'Product Info in Item Name', 'woocommerce-jetpack' ),
239
+ 'type' => 'title',
240
+ 'id' => 'wcj_product_info_in_email_order_item_name_options',
241
+ ),
242
+ array(
243
+ 'title' => __( 'Add Product Info to Item Name', 'woocommerce-jetpack' ),
244
+ 'desc' => __( 'Add', 'woocommerce-jetpack' ),
245
+ 'type' => 'checkbox',
246
+ 'id' => 'wcj_product_info_in_email_order_item_name_enabled',
247
+ 'default' => 'no',
248
+ ),
249
+ array(
250
+ 'title' => __( 'Info', 'woocommerce-jetpack' ),
251
+ 'desc' => sprintf( __( 'You can use <a target="_blank" href="%s">Booster\'s products shortcodes</a> here.', 'woocommerce-jetpack' ), 'http://booster.io/category/shortcodes/products-shortcodes/' ),
252
+ 'type' => 'custom_textarea',
253
+ 'id' => 'wcj_product_info_in_email_order_item_name',
254
+ 'default' => '[wcj_product_categories strip_tags="yes" before="<hr><em>" after="</em>"]',
255
+ 'css' => 'width:66%;min-width:300px;height:150px;',
256
+ ),
257
+ array(
258
+ 'type' => 'sectionend',
259
+ 'id' => 'wcj_product_info_in_email_order_item_name_options',
260
+ ),
261
  ) );
262
  $settings = array_merge( $settings, $this->get_emails_forwarding_settings() );
263
  return $this->add_standard_settings( $settings );
includes/class-wcj-empty-cart-button.php CHANGED
@@ -48,7 +48,7 @@ class WCJ_Empty_Cart_Button extends WCJ_Module {
48
  *
49
  * @version 2.5.0
50
  */
51
- public function add_empty_cart_link() {
52
  $confirmation_html = ( 'confirm_with_pop_up_box' == get_option( 'wcj_empty_cart_confirmation', 'no_confirmation' ) ) ? ' onclick="return confirm(\'' . get_option( 'wcj_empty_cart_confirmation_text' ) . '\')"' : '';
53
  echo '<div style="' . get_option( 'wcj_empty_cart_div_style', 'float: right;' ) . '"><form action="" method="post"><input type="submit" class="button" name="empty_cart" value="' . apply_filters( 'booster_get_option', 'Empty Cart', get_option( 'wcj_empty_cart_text' ) ) . '"' . $confirmation_html . '></form></div>';
54
  }
@@ -56,7 +56,7 @@ class WCJ_Empty_Cart_Button extends WCJ_Module {
56
  /**
57
  * empty_cart.
58
  */
59
- public function empty_cart() {
60
  if ( isset( $_POST['empty_cart'] ) ) {
61
  global $woocommerce;
62
  $woocommerce->cart->empty_cart();
48
  *
49
  * @version 2.5.0
50
  */
51
+ function add_empty_cart_link() {
52
  $confirmation_html = ( 'confirm_with_pop_up_box' == get_option( 'wcj_empty_cart_confirmation', 'no_confirmation' ) ) ? ' onclick="return confirm(\'' . get_option( 'wcj_empty_cart_confirmation_text' ) . '\')"' : '';
53
  echo '<div style="' . get_option( 'wcj_empty_cart_div_style', 'float: right;' ) . '"><form action="" method="post"><input type="submit" class="button" name="empty_cart" value="' . apply_filters( 'booster_get_option', 'Empty Cart', get_option( 'wcj_empty_cart_text' ) ) . '"' . $confirmation_html . '></form></div>';
54
  }
56
  /**
57
  * empty_cart.
58
  */
59
+ function empty_cart() {
60
  if ( isset( $_POST['empty_cart'] ) ) {
61
  global $woocommerce;
62
  $woocommerce->cart->empty_cart();
includes/class-wcj-eu-vat-number.php CHANGED
@@ -4,10 +4,9 @@
4
  *
5
  * The WooCommerce Jetpack EU VAT Number class.
6
  *
7
- * @version 2.6.0
8
  * @since 2.3.9
9
  * @author Algoritmika Ltd.
10
- * @todo (maybe) move to "CART & CHECKOUT" category
11
  */
12
 
13
  if ( ! defined( 'ABSPATH' ) ) exit;
@@ -97,17 +96,18 @@ class WCJ_EU_VAT_Number extends WCJ_Module {
97
  /**
98
  * create_meta_box.
99
  *
100
- * @version 2.6.0
101
  * @since 2.6.0
102
  */
103
  function create_meta_box() {
104
  $order_id = get_the_ID();
105
  $_order = wc_get_order( $order_id );
 
106
 
107
  // Country by IP
108
  if ( class_exists( 'WC_Geolocation' ) ) {
109
  // Get the country by IP
110
- $location = WC_Geolocation::geolocate_ip( $_order->customer_ip_address );
111
  // Base fallback
112
  if ( empty( $location['country'] ) ) {
113
  $location = wc_format_country_state_string( apply_filters( 'woocommerce_customer_default_location', get_option( 'woocommerce_default_country' ) ) );
@@ -138,7 +138,7 @@ class WCJ_EU_VAT_Number extends WCJ_Module {
138
  $table_data = array(
139
  array(
140
  __( 'Customer IP', 'woocommerce-jetpack' ),
141
- $_order->customer_ip_address
142
  ),
143
  array(
144
  __( 'Country by IP', 'woocommerce-jetpack' ),
@@ -205,23 +205,23 @@ class WCJ_EU_VAT_Number extends WCJ_Module {
205
  /**
206
  * add_eu_vat_number_to_order_billing_address.
207
  *
208
- * @version 2.5.2
209
  * @since 2.5.2
210
  */
211
  function add_eu_vat_number_to_order_billing_address( $fields, $_order ) {
212
  $field_name = 'billing_' . $this->id;
213
- $fields[ $field_name ] = get_post_meta( $_order->id, '_' . $field_name, true );
214
  return $fields;
215
  }
216
 
217
  /**
218
  * add_eu_vat_number_to_order_display.
219
  *
220
- * @version 2.4.7
221
  * @since 2.4.7
222
  */
223
  function add_eu_vat_number_to_order_display( $order ) {
224
- $order_id = $order->id;
225
  $html = '';
226
  $option_name = '_billing_' . $this->id;
227
  $the_eu_vat_number = get_post_meta( $order_id, $option_name, true );
4
  *
5
  * The WooCommerce Jetpack EU VAT Number class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.3.9
9
  * @author Algoritmika Ltd.
 
10
  */
11
 
12
  if ( ! defined( 'ABSPATH' ) ) exit;
96
  /**
97
  * create_meta_box.
98
  *
99
+ * @version 2.7.0
100
  * @since 2.6.0
101
  */
102
  function create_meta_box() {
103
  $order_id = get_the_ID();
104
  $_order = wc_get_order( $order_id );
105
+ $_customer_ip_address = ( WCJ_IS_WC_VERSION_BELOW_3 ? $_order->customer_ip_address : $_order->get_customer_ip_address() );
106
 
107
  // Country by IP
108
  if ( class_exists( 'WC_Geolocation' ) ) {
109
  // Get the country by IP
110
+ $location = WC_Geolocation::geolocate_ip( $_customer_ip_address );
111
  // Base fallback
112
  if ( empty( $location['country'] ) ) {
113
  $location = wc_format_country_state_string( apply_filters( 'woocommerce_customer_default_location', get_option( 'woocommerce_default_country' ) ) );
138
  $table_data = array(
139
  array(
140
  __( 'Customer IP', 'woocommerce-jetpack' ),
141
+ $_customer_ip_address
142
  ),
143
  array(
144
  __( 'Country by IP', 'woocommerce-jetpack' ),
205
  /**
206
  * add_eu_vat_number_to_order_billing_address.
207
  *
208
+ * @version 2.7.0
209
  * @since 2.5.2
210
  */
211
  function add_eu_vat_number_to_order_billing_address( $fields, $_order ) {
212
  $field_name = 'billing_' . $this->id;
213
+ $fields[ $field_name ] = get_post_meta( wcj_get_order_id( $_order ), '_' . $field_name, true );
214
  return $fields;
215
  }
216
 
217
  /**
218
  * add_eu_vat_number_to_order_display.
219
  *
220
+ * @version 2.7.0
221
  * @since 2.4.7
222
  */
223
  function add_eu_vat_number_to_order_display( $order ) {
224
+ $order_id = wcj_get_order_id( $order );
225
  $html = '';
226
  $option_name = '_billing_' . $this->id;
227
  $the_eu_vat_number = get_post_meta( $order_id, $option_name, true );
includes/class-wcj-free-price.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Free Price class.
6
  *
7
- * @version 2.6.0
8
  * @since 2.5.9
9
  * @author Algoritmika Ltd.
10
  */
@@ -18,7 +18,7 @@ class WCJ_Free_Price extends WCJ_Module {
18
  /**
19
  * Constructor.
20
  *
21
- * @version 2.6.0
22
  * @since 2.5.9
23
  * @todo single in grouped is treated as "related"
24
  */
@@ -33,13 +33,76 @@ class WCJ_Free_Price extends WCJ_Module {
33
  add_action( 'init', array( $this, 'add_settings_hook' ) );
34
 
35
  if ( $this->is_enabled() ) {
36
- add_filter( 'woocommerce_free_price_html', array( $this, 'modify_free_price_simple_external_custom' ), PHP_INT_MAX, 2 );
37
- add_filter( 'woocommerce_grouped_free_price_html', array( $this, 'modify_free_price_grouped' ), PHP_INT_MAX, 2 );
38
- add_filter( 'woocommerce_variable_free_price_html', array( $this, 'modify_free_price_variable' ), PHP_INT_MAX, 2 );
39
- add_filter( 'woocommerce_variation_free_price_html', array( $this, 'modify_free_price_variation' ), PHP_INT_MAX, 2 );
 
 
 
 
40
  }
41
  }
42
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  /**
44
  * get_view_id
45
  *
@@ -65,34 +128,34 @@ class WCJ_Free_Price extends WCJ_Module {
65
  /**
66
  * modify_free_price_simple_external_custom.
67
  *
68
- * @version 2.5.9
69
  * @since 2.5.9
70
  */
71
  function modify_free_price_simple_external_custom( $price, $_product ) {
72
  $default = '<span class="amount">' . __( 'Free!', 'woocommerce' ) . '</span>';
73
  return ( $_product->is_type( 'external' ) ) ?
74
- do_shortcode( get_option( 'wcj_free_price_external_' . $this->get_view_id( $_product->id ), $default ) ) :
75
- do_shortcode( get_option( 'wcj_free_price_simple_' . $this->get_view_id( $_product->id ), $default ) );
76
  }
77
 
78
  /**
79
  * modify_free_price_grouped.
80
  *
81
- * @version 2.5.9
82
  * @since 2.5.9
83
  */
84
  function modify_free_price_grouped( $price, $_product ) {
85
- return do_shortcode( get_option( 'wcj_free_price_grouped_' . $this->get_view_id( $_product->id ), __( 'Free!', 'woocommerce' ) ) );
86
  }
87
 
88
  /**
89
  * modify_free_price_variable.
90
  *
91
- * @version 2.5.9
92
  * @since 2.5.9
93
  */
94
  function modify_free_price_variable( $price, $_product ) {
95
- return do_shortcode( apply_filters( 'booster_get_option', __( 'Free!', 'woocommerce' ), get_option( 'wcj_free_price_variable_' . $this->get_view_id( $_product->id ), __( 'Free!', 'woocommerce' ) ) ) );
96
  }
97
 
98
  /**
@@ -105,32 +168,10 @@ class WCJ_Free_Price extends WCJ_Module {
105
  return do_shortcode( apply_filters( 'booster_get_option', __( 'Free!', 'woocommerce' ), get_option( 'wcj_free_price_variable_variation', __( 'Free!', 'woocommerce' ) ) ) );
106
  }
107
 
108
- /**
109
- * add_settings_hook.
110
- *
111
- * @version 2.5.9
112
- * @since 2.5.9
113
- */
114
- function add_settings_hook() {
115
- add_filter( 'wcj_' . $this->id . '_settings', array( $this, 'add_settings' ) );
116
- }
117
-
118
- /**
119
- * get_settings.
120
- *
121
- * @version 2.5.9
122
- * @since 2.5.9
123
- */
124
- function get_settings() {
125
- $settings = array();
126
- $settings = apply_filters( 'wcj_' . $this->id . '_settings', $settings );
127
- return $this->add_standard_settings( $settings, __( 'Labels can contain shortcodes.', 'woocommerce-jetpack' ) );
128
- }
129
-
130
  /**
131
  * add_settings.
132
  *
133
- * @version 2.5.9
134
  * @since 2.5.9
135
  */
136
  function add_settings( $settings ) {
@@ -153,6 +194,7 @@ class WCJ_Free_Price extends WCJ_Module {
153
  $settings = array_merge( $settings, array(
154
  array(
155
  'title' => $product_type_desc,
 
156
  'type' => 'title',
157
  'id' => 'wcj_free_price_' . $product_type . 'options',
158
  ),
@@ -171,7 +213,6 @@ class WCJ_Free_Price extends WCJ_Module {
171
  'css' => 'width:30%;min-width:300px;min-height:50px;',
172
  'desc' => ( 'variable' === $product_type ) ? apply_filters( 'booster_get_message', '', 'desc' ) : '',
173
  'custom_attributes' => ( 'variable' === $product_type ) ? apply_filters( 'booster_get_message', '', 'readonly' ) : '',
174
-
175
  ),
176
  ) );
177
  }
4
  *
5
  * The WooCommerce Jetpack Free Price class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.5.9
9
  * @author Algoritmika Ltd.
10
  */
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 2.7.0
22
  * @since 2.5.9
23
  * @todo single in grouped is treated as "related"
24
  */
33
  add_action( 'init', array( $this, 'add_settings_hook' ) );
34
 
35
  if ( $this->is_enabled() ) {
36
+ if ( WCJ_IS_WC_VERSION_BELOW_3 ) {
37
+ add_filter( 'woocommerce_free_price_html', array( $this, 'modify_free_price_simple_external_custom' ), PHP_INT_MAX, 2 );
38
+ add_filter( 'woocommerce_grouped_free_price_html', array( $this, 'modify_free_price_grouped' ), PHP_INT_MAX, 2 );
39
+ add_filter( 'woocommerce_variable_free_price_html', array( $this, 'modify_free_price_variable' ), PHP_INT_MAX, 2 );
40
+ add_filter( 'woocommerce_variation_free_price_html', array( $this, 'modify_free_price_variation' ), PHP_INT_MAX, 2 );
41
+ } else {
42
+ add_filter( 'woocommerce_get_price_html', array( $this, 'maybe_modify_price' ), PHP_INT_MAX, 2 );
43
+ }
44
  }
45
  }
46
 
47
+ /**
48
+ * are_all_prices_free
49
+ *
50
+ * @version 2.7.0
51
+ * @since 2.7.0
52
+ */
53
+ function are_all_prices_free( $_product, $type ) {
54
+ if ( 'variable' === $type ) {
55
+ $prices = $_product->get_variation_prices( true );
56
+ $min_price = current( $prices['price'] );
57
+ $max_price = end( $prices['price'] );
58
+ if ( '' !== $min_price && '' !== $max_price ) {
59
+ return ( 0 == $min_price && 0 == $max_price );
60
+ }
61
+ } elseif ( 'variable' === $type ) {
62
+ $child_prices = array();
63
+ foreach ( $_product->get_children() as $child_id ) {
64
+ $child = wc_get_product( $child_id );
65
+ if ( '' !== $child->get_price() ) {
66
+ $child_prices[] = wcj_get_product_display_price( $child );
67
+ }
68
+ }
69
+ if ( ! empty( $child_prices ) ) {
70
+ $min_price = min( $child_prices );
71
+ $max_price = max( $child_prices );
72
+ } else {
73
+ $min_price = '';
74
+ $max_price = '';
75
+ }
76
+ if ( '' !== $min_price && '' !== $max_price ) {
77
+ return ( 0 == $min_price && 0 == $max_price );
78
+ }
79
+ }
80
+ return false;
81
+ }
82
+
83
+ /**
84
+ * maybe_modify_price
85
+ *
86
+ * @version 2.7.0
87
+ * @since 2.7.0
88
+ */
89
+ function maybe_modify_price( $price, $_product ) {
90
+ if ( '' !== $price ) {
91
+ if ( 0 == $_product->get_price() ) {
92
+ if ( $_product->is_type( 'grouped' ) ) {
93
+ return ( $this->are_all_prices_free( $_product, 'grouped' ) ) ? $this->modify_free_price_grouped( $price, $_product ) : $price;
94
+ } elseif ( $_product->is_type( 'variable' ) ) {
95
+ return ( $this->are_all_prices_free( $_product, 'variable' ) ) ? $this->modify_free_price_variable( $price, $_product ) : $price;
96
+ } elseif ( $_product->is_type( 'variation' ) ) {
97
+ return $this->modify_free_price_variation( $price, $_product );
98
+ } else {
99
+ return $this->modify_free_price_simple_external_custom( $price, $_product );
100
+ }
101
+ }
102
+ }
103
+ return $price;
104
+ }
105
+
106
  /**
107
  * get_view_id
108
  *
128
  /**
129
  * modify_free_price_simple_external_custom.
130
  *
131
+ * @version 2.7.0
132
  * @since 2.5.9
133
  */
134
  function modify_free_price_simple_external_custom( $price, $_product ) {
135
  $default = '<span class="amount">' . __( 'Free!', 'woocommerce' ) . '</span>';
136
  return ( $_product->is_type( 'external' ) ) ?
137
+ do_shortcode( get_option( 'wcj_free_price_external_' . $this->get_view_id( wcj_get_product_id_or_variation_parent_id( $_product ) ), $default ) ) :
138
+ do_shortcode( get_option( 'wcj_free_price_simple_' . $this->get_view_id( wcj_get_product_id_or_variation_parent_id( $_product ) ), $default ) );
139
  }
140
 
141
  /**
142
  * modify_free_price_grouped.
143
  *
144
+ * @version 2.7.0
145
  * @since 2.5.9
146
  */
147
  function modify_free_price_grouped( $price, $_product ) {
148
+ return do_shortcode( get_option( 'wcj_free_price_grouped_' . $this->get_view_id( wcj_get_product_id_or_variation_parent_id( $_product ) ), __( 'Free!', 'woocommerce' ) ) );
149
  }
150
 
151
  /**
152
  * modify_free_price_variable.
153
  *
154
+ * @version 2.7.0
155
  * @since 2.5.9
156
  */
157
  function modify_free_price_variable( $price, $_product ) {
158
+ return do_shortcode( apply_filters( 'booster_get_option', __( 'Free!', 'woocommerce' ), get_option( 'wcj_free_price_variable_' . $this->get_view_id( wcj_get_product_id_or_variation_parent_id( $_product ) ), __( 'Free!', 'woocommerce' ) ) ) );
159
  }
160
 
161
  /**
168
  return do_shortcode( apply_filters( 'booster_get_option', __( 'Free!', 'woocommerce' ), get_option( 'wcj_free_price_variable_variation', __( 'Free!', 'woocommerce' ) ) ) );
169
  }
170
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
171
  /**
172
  * add_settings.
173
  *
174
+ * @version 2.7.0
175
  * @since 2.5.9
176
  */
177
  function add_settings( $settings ) {
194
  $settings = array_merge( $settings, array(
195
  array(
196
  'title' => $product_type_desc,
197
+ 'desc' => __( 'Labels can contain shortcodes.', 'woocommerce-jetpack' ),
198
  'type' => 'title',
199
  'id' => 'wcj_free_price_' . $product_type . 'options',
200
  ),
213
  'css' => 'width:30%;min-width:300px;min-height:50px;',
214
  'desc' => ( 'variable' === $product_type ) ? apply_filters( 'booster_get_message', '', 'desc' ) : '',
215
  'custom_attributes' => ( 'variable' === $product_type ) ? apply_filters( 'booster_get_message', '', 'readonly' ) : '',
 
216
  ),
217
  ) );
218
  }
includes/class-wcj-general.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack General class.
6
  *
7
- * @version 2.6.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -17,9 +17,9 @@ class WCJ_General extends WCJ_Module {
17
  /**
18
  * Constructor.
19
  *
20
- * @version 2.6.0
21
  */
22
- public function __construct() {
23
 
24
  $this->id = 'general';
25
  $this->short_desc = __( 'General', 'woocommerce-jetpack' );
@@ -29,7 +29,7 @@ class WCJ_General extends WCJ_Module {
29
 
30
  $this->add_tools( array(
31
  'products_atts' => array(
32
- 'title' => __( 'Products Atts', 'woocommerce-jetpack' ),
33
  'desc' => __( 'All Products and All Attributes.', 'woocommerce-jetpack' ),
34
  ),
35
  'custom_roles' => array(
@@ -49,13 +49,6 @@ class WCJ_General extends WCJ_Module {
49
  add_filter( 'widget_text', 'do_shortcode' );
50
  }
51
 
52
- if ( '' != get_option( 'wcj_general_custom_css' ) ) {
53
- add_action( 'wp_head', array( $this, 'hook_custom_css' ) );
54
- }
55
- if ( '' != get_option( 'wcj_general_custom_admin_css' ) ) {
56
- add_action( 'admin_head', array( $this, 'hook_custom_admin_css' ) );
57
- }
58
-
59
  if ( 'yes' === get_option( 'wcj_paypal_email_per_product_enabled', 'no' ) ) {
60
 
61
  add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
@@ -69,36 +62,31 @@ class WCJ_General extends WCJ_Module {
69
  add_filter( 'wc_session_expiration', array( $this, 'change_session_expiration' ), PHP_INT_MAX );
70
  }
71
 
72
- // General Cart options - Hide coupon
73
- if ( 'yes' === get_option( 'wcj_cart_hide_coupon', 'no' ) ) {
74
- add_filter( 'woocommerce_coupons_enabled', array( $this, 'hide_coupon_field_on_cart' ), PHP_INT_MAX );
75
  }
76
 
77
- // General Checkout options - Hide "Order Again" button
78
- if ( 'yes' === get_option( 'wcj_checkout_hide_order_again', 'no' ) ) {
79
- add_action( 'init', array( $this, 'checkout_hide_order_again' ), PHP_INT_MAX );
80
- }
81
  }
82
  }
83
 
84
  /**
85
- * checkout_hide_order_again.
86
- *
87
- * @version 2.6.0
88
- * @since 2.6.0
89
- */
90
- function checkout_hide_order_again() {
91
- remove_action( 'woocommerce_order_details_after_order_table', 'woocommerce_order_again_button' );
92
- }
93
-
94
- /**
95
- * hide_coupon_field_on_cart.
96
  *
97
- * @version 2.6.0
98
- * @since 2.6.0
 
 
 
99
  */
100
- function hide_coupon_field_on_cart( $enabled ) {
101
- return ( is_cart() ) ? false : $enabled;
 
 
 
 
 
 
102
  }
103
 
104
  /**
@@ -246,7 +234,7 @@ class WCJ_General extends WCJ_Module {
246
  /*
247
  * get_products_atts.
248
  *
249
- * @version 2.3.9
250
  * @since 2.3.9
251
  */
252
  function get_products_atts() {
@@ -279,7 +267,7 @@ class WCJ_General extends WCJ_Module {
279
  $the_product = wc_get_product( $product_id );
280
 
281
  $products_attributes[ $product_id ]['wcj_title'] = '<a href="' . get_permalink( $product_id ) . '">' . $the_product->get_title() . '</a>';
282
- $products_attributes[ $product_id ]['wcj_category'] = $the_product->get_categories();
283
 
284
  foreach ( $the_product->get_attributes() as $attribute ) {
285
  $products_attributes[ $product_id ][ $attribute['name'] ] = $the_product->get_attribute( $attribute['name'] );
@@ -321,28 +309,11 @@ class WCJ_General extends WCJ_Module {
321
  return '<p>' . __( 'Total Products:', 'woocommerce-jetpack' ) . ' ' . $total_products . '</p>' . wcj_get_table_html( $table_data, array( 'table_class' => 'widefat striped' ) );
322
  }
323
 
324
- /**
325
- * hook_custom_css.
326
- */
327
- public function hook_custom_css() {
328
- $output = '<style>' . get_option( 'wcj_general_custom_css' ) . '</style>';
329
- echo $output;
330
- }
331
-
332
- /**
333
- * hook_custom_admin_css.
334
- */
335
- public function hook_custom_admin_css() {
336
- $output = '<style>' . get_option( 'wcj_general_custom_admin_css' ) . '</style>';
337
- echo $output;
338
- }
339
-
340
  /**
341
  * get_settings.
342
  *
343
- * @version 2.6.0
344
  * @todo add link to Booster's shortcodes list
345
- * @todo move "General Cart Options" and "General Checkout Options" to separate modules
346
  */
347
  function get_settings() {
348
  /* $links_html = '';
@@ -388,30 +359,6 @@ class WCJ_General extends WCJ_Module {
388
  'type' => 'sectionend',
389
  'id' => 'wcj_general_shortcodes_options',
390
  ),
391
- array(
392
- 'title' => __( 'Custom CSS Options', 'woocommerce-jetpack' ),
393
- 'type' => 'title',
394
- 'desc' => __( 'Another custom CSS, if you need one.', 'woocommerce-jetpack' ),
395
- 'id' => 'wcj_general_custom_css_options',
396
- ),
397
- array(
398
- 'title' => __( 'Custom CSS - Front end (Customers)', 'woocommerce-jetpack' ),
399
- 'id' => 'wcj_general_custom_css',
400
- 'default' => '',
401
- 'type' => 'custom_textarea',
402
- 'css' => 'width:66%;min-width:300px;min-height:300px;',
403
- ),
404
- array(
405
- 'title' => __( 'Custom CSS - Back end (Admin)', 'woocommerce-jetpack' ),
406
- 'id' => 'wcj_general_custom_admin_css',
407
- 'default' => '',
408
- 'type' => 'custom_textarea',
409
- 'css' => 'width:66%;min-width:300px;min-height:300px;',
410
- ),
411
- array(
412
- 'type' => 'sectionend',
413
- 'id' => 'wcj_general_custom_css_options',
414
- ),
415
  array(
416
  'title' => __( 'Product Revisions', 'woocommerce-jetpack' ),
417
  'type' => 'title',
@@ -536,36 +483,30 @@ class WCJ_General extends WCJ_Module {
536
  'id' => 'wcj_session_expiration_options',
537
  ),
538
  array(
539
- 'title' => __( 'General Cart Options', 'woocommerce-jetpack' ),
 
 
540
  'type' => 'title',
541
- 'id' => 'wcj_general_cart_options',
542
  ),
543
  array(
544
- 'title' => __( 'Hide Coupon on Cart Page', 'woocommerce-jetpack' ),
545
- 'desc' => __( 'Hide', 'woocommerce-jetpack' ),
546
- 'id' => 'wcj_cart_hide_coupon',
 
547
  'default' => 'no',
548
  'type' => 'checkbox',
549
  ),
550
  array(
551
- 'type' => 'sectionend',
552
- 'id' => 'wcj_general_cart_options',
553
- ),
554
- array(
555
- 'title' => __( 'General Checkout Options', 'woocommerce-jetpack' ),
556
- 'type' => 'title',
557
- 'id' => 'wcj_general_checkout_options',
558
- ),
559
- array(
560
- 'title' => __( 'Hide "Order Again" Button on "View Order" Page', 'woocommerce-jetpack' ),
561
- 'desc' => __( 'Hide', 'woocommerce-jetpack' ),
562
- 'id' => 'wcj_checkout_hide_order_again',
563
- 'default' => 'no',
564
- 'type' => 'checkbox',
565
  ),
566
  array(
567
  'type' => 'sectionend',
568
- 'id' => 'wcj_general_checkout_options',
569
  ),
570
  /* array(
571
  'title' => __( 'WooCommerce Templates Editor Links', 'woocommerce-jetpack' ),
4
  *
5
  * The WooCommerce Jetpack General class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
17
  /**
18
  * Constructor.
19
  *
20
+ * @version 2.7.0
21
  */
22
+ function __construct() {
23
 
24
  $this->id = 'general';
25
  $this->short_desc = __( 'General', 'woocommerce-jetpack' );
29
 
30
  $this->add_tools( array(
31
  'products_atts' => array(
32
+ 'title' => __( 'Products Attributes', 'woocommerce-jetpack' ),
33
  'desc' => __( 'All Products and All Attributes.', 'woocommerce-jetpack' ),
34
  ),
35
  'custom_roles' => array(
49
  add_filter( 'widget_text', 'do_shortcode' );
50
  }
51
 
 
 
 
 
 
 
 
52
  if ( 'yes' === get_option( 'wcj_paypal_email_per_product_enabled', 'no' ) ) {
53
 
54
  add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
62
  add_filter( 'wc_session_expiration', array( $this, 'change_session_expiration' ), PHP_INT_MAX );
63
  }
64
 
65
+ // URL Coupons
66
+ if ( 'yes' === get_option( 'wcj_url_coupons_enabled', 'no' ) ) {
67
+ add_action( 'wp_loaded', array( $this, 'maybe_apply_url_coupon' ), PHP_INT_MAX );
68
  }
69
 
 
 
 
 
70
  }
71
  }
72
 
73
  /**
74
+ * maybe_apply_url_coupon.
 
 
 
 
 
 
 
 
 
 
75
  *
76
+ * @version 2.7.0
77
+ * @since 2.7.0
78
+ * @todo (maybe) predefined $arg_key
79
+ * @todo (maybe) additional $_GET['coupon_code']
80
+ * @todo (maybe) if ( ! WC()->cart->has_discount( $coupon_code ) ) {}
81
  */
82
+ function maybe_apply_url_coupon() {
83
+ $arg_key = get_option( 'wcj_url_coupons_key', 'wcj_apply_coupon' );
84
+ if ( isset( $_GET[ $arg_key ] ) && '' != $_GET[ $arg_key ] ) {
85
+ $coupon_code = sanitize_text_field( $_GET[ $arg_key ] );
86
+ WC()->cart->add_discount( $coupon_code );
87
+ wp_safe_redirect( remove_query_arg( $arg_key ) );
88
+ exit;
89
+ }
90
  }
91
 
92
  /**
234
  /*
235
  * get_products_atts.
236
  *
237
+ * @version 2.7.0
238
  * @since 2.3.9
239
  */
240
  function get_products_atts() {
267
  $the_product = wc_get_product( $product_id );
268
 
269
  $products_attributes[ $product_id ]['wcj_title'] = '<a href="' . get_permalink( $product_id ) . '">' . $the_product->get_title() . '</a>';
270
+ $products_attributes[ $product_id ]['wcj_category'] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $the_product->get_categories() : wc_get_product_category_list( $product_id ) );
271
 
272
  foreach ( $the_product->get_attributes() as $attribute ) {
273
  $products_attributes[ $product_id ][ $attribute['name'] ] = $the_product->get_attribute( $attribute['name'] );
309
  return '<p>' . __( 'Total Products:', 'woocommerce-jetpack' ) . ' ' . $total_products . '</p>' . wcj_get_table_html( $table_data, array( 'table_class' => 'widefat striped' ) );
310
  }
311
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
312
  /**
313
  * get_settings.
314
  *
315
+ * @version 2.7.0
316
  * @todo add link to Booster's shortcodes list
 
317
  */
318
  function get_settings() {
319
  /* $links_html = '';
359
  'type' => 'sectionend',
360
  'id' => 'wcj_general_shortcodes_options',
361
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
362
  array(
363
  'title' => __( 'Product Revisions', 'woocommerce-jetpack' ),
364
  'type' => 'title',
483
  'id' => 'wcj_session_expiration_options',
484
  ),
485
  array(
486
+ 'title' => __( 'URL Coupons Options', 'woocommerce-jetpack' ),
487
+ 'desc' => sprintf( __( 'Additionally you can hide standard coupon field on cart page in Booster\'s <a href="%s">Cart Customization</a> module.', 'woocommerce-jetpack' ),
488
+ admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=cart_and_checkout&section=cart_customization' ) ),
489
  'type' => 'title',
490
+ 'id' => 'wcj_url_coupons_options',
491
  ),
492
  array(
493
+ 'title' => __( 'URL Coupons', 'woocommerce-jetpack' ),
494
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
495
+ 'desc_tip' => __( 'When enabled, your users can apply shop\'s standard coupons, by visiting URL. E.g.: http://yoursite.com/?wcj_apply_coupon=couponcode.', 'woocommerce-jetpack' ),
496
+ 'id' => 'wcj_url_coupons_enabled',
497
  'default' => 'no',
498
  'type' => 'checkbox',
499
  ),
500
  array(
501
+ 'title' => __( 'URL Coupons Key', 'woocommerce-jetpack' ),
502
+ 'desc_tip' => __( 'URL key. If you change this, make sure it\'s unique and is not used anywhere on your site (e.g. by another plugin).', 'woocommerce-jetpack' ),
503
+ 'id' => 'wcj_url_coupons_key',
504
+ 'default' => 'wcj_apply_coupon',
505
+ 'type' => 'text',
 
 
 
 
 
 
 
 
 
506
  ),
507
  array(
508
  'type' => 'sectionend',
509
+ 'id' => 'wcj_url_coupons_options',
510
  ),
511
  /* array(
512
  'title' => __( 'WooCommerce Templates Editor Links', 'woocommerce-jetpack' ),
includes/class-wcj-global-discount.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Global Discount class.
6
  *
7
- * @version 2.6.0
8
  * @since 2.5.7
9
  * @author Algoritmika Ltd.
10
  * @todo products and cats/tags to include/exclude (cats to include - done); regular price coefficient; fee instead of discount;
@@ -19,7 +19,7 @@ class WCJ_Global_Discount extends WCJ_Module {
19
  /**
20
  * Constructor.
21
  *
22
- * @version 2.5.7
23
  * @since 2.5.7
24
  */
25
  function __construct() {
@@ -33,9 +33,9 @@ class WCJ_Global_Discount extends WCJ_Module {
33
  if ( $this->is_enabled() ) {
34
  if ( ! is_admin() || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
35
  // Prices
36
- add_filter( 'woocommerce_get_price', array( $this, 'add_global_discount_price' ), PHP_INT_MAX, 2 );
37
- add_filter( 'woocommerce_get_sale_price', array( $this, 'add_global_discount_sale_price' ), PHP_INT_MAX, 2 );
38
- // add_filter( 'woocommerce_get_regular_price', array( $this, 'add_global_discount_regular_price' ), PHP_INT_MAX, 2 );
39
  // Variations
40
  add_filter( 'woocommerce_variation_prices_price', array( $this, 'add_global_discount_price' ), PHP_INT_MAX, 2 );
41
  add_filter( 'woocommerce_variation_prices_sale_price', array( $this, 'add_global_discount_sale_price' ), PHP_INT_MAX, 2 );
@@ -44,6 +44,11 @@ class WCJ_Global_Discount extends WCJ_Module {
44
  // Grouped products
45
  add_filter( 'woocommerce_get_price_including_tax', array( $this, 'add_global_discount_grouped' ), PHP_INT_MAX, 3 );
46
  add_filter( 'woocommerce_get_price_excluding_tax', array( $this, 'add_global_discount_grouped' ), PHP_INT_MAX, 3 );
 
 
 
 
 
47
  }
48
  }
49
  }
@@ -51,16 +56,15 @@ class WCJ_Global_Discount extends WCJ_Module {
51
  /**
52
  * add_global_discount_grouped.
53
  *
54
- * @version 2.5.7
55
  * @since 2.5.7
56
  */
57
  function add_global_discount_grouped( $price, $qty, $_product ) {
58
  if ( $_product->is_type( 'grouped' ) ) {
59
- $get_price_method = 'get_price_' . get_option( 'woocommerce_tax_display_shop' ) . 'uding_tax';
60
  foreach ( $_product->get_children() as $child_id ) {
61
  $the_price = get_post_meta( $child_id, '_price', true );
62
  $the_product = wc_get_product( $child_id );
63
- $the_price = $the_product->$get_price_method( 1, $the_price );
64
  if ( $the_price == $price ) {
65
  return $this->add_global_discount_price( $price, $the_product );
66
  }
@@ -96,7 +100,7 @@ class WCJ_Global_Discount extends WCJ_Module {
96
  /**
97
  * check_product_categories.
98
  *
99
- * @version 2.5.7
100
  * @since 2.5.7
101
  * @return bool
102
  */
@@ -104,7 +108,7 @@ class WCJ_Global_Discount extends WCJ_Module {
104
  // Check product category - include
105
  $categories_in = get_option( 'wcj_global_discount_sale_categories_incl_' . $group, '' );
106
  if ( ! empty( $categories_in ) ) {
107
- $product_categories = get_the_terms( $_product->id, 'product_cat' );
108
  if ( empty( $product_categories ) ) {
109
  return false; // option set to some categories, but product has no categories
110
  }
@@ -121,7 +125,7 @@ class WCJ_Global_Discount extends WCJ_Module {
121
  /**
122
  * add_global_discount_any_price.
123
  *
124
- * @version 2.6.0
125
  * @since 2.5.7
126
  */
127
  function add_global_discount_any_price( $price_type, $price, $_product ) {
@@ -147,15 +151,21 @@ class WCJ_Global_Discount extends WCJ_Module {
147
  }
148
  }
149
  } else { // if ( 'price' === $price_type )
150
- remove_filter( 'woocommerce_get_sale_price', array( $this, 'add_global_discount_sale_price' ), PHP_INT_MAX, 2 );
151
  remove_filter( 'woocommerce_variation_prices_sale_price', array( $this, 'add_global_discount_sale_price' ), PHP_INT_MAX, 2 );
 
 
 
152
  if ( 'only_on_sale' === get_option( 'wcj_global_discount_sale_product_scope_' . $i, 'all' ) && 0 == $_product->get_sale_price() ) {
153
  continue; // no changes by current discount group
154
  } elseif ( 'only_not_on_sale' === get_option( 'wcj_global_discount_sale_product_scope_' . $i, 'all' ) && 0 != $_product->get_sale_price() ) {
155
  continue; // no changes by current discount group
156
  }
157
- add_filter( 'woocommerce_get_sale_price', array( $this, 'add_global_discount_sale_price' ), PHP_INT_MAX, 2 );
158
  add_filter( 'woocommerce_variation_prices_sale_price', array( $this, 'add_global_discount_sale_price' ), PHP_INT_MAX, 2 );
 
 
 
159
  }
160
  return $this->calculate_price( $price, $coefficient, $i ); // discount applied
161
  }
4
  *
5
  * The WooCommerce Jetpack Global Discount class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.5.7
9
  * @author Algoritmika Ltd.
10
  * @todo products and cats/tags to include/exclude (cats to include - done); regular price coefficient; fee instead of discount;
19
  /**
20
  * Constructor.
21
  *
22
+ * @version 2.7.0
23
  * @since 2.5.7
24
  */
25
  function __construct() {
33
  if ( $this->is_enabled() ) {
34
  if ( ! is_admin() || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
35
  // Prices
36
+ add_filter( WCJ_PRODUCT_GET_PRICE_FILTER, array( $this, 'add_global_discount_price' ), PHP_INT_MAX, 2 );
37
+ add_filter( WCJ_PRODUCT_GET_SALE_PRICE_FILTER, array( $this, 'add_global_discount_sale_price' ), PHP_INT_MAX, 2 );
38
+ // add_filter( WCJ_PRODUCT_GET_REGULAR_PRICE_FILTER, array( $this, 'add_global_discount_regular_price' ), PHP_INT_MAX, 2 );
39
  // Variations
40
  add_filter( 'woocommerce_variation_prices_price', array( $this, 'add_global_discount_price' ), PHP_INT_MAX, 2 );
41
  add_filter( 'woocommerce_variation_prices_sale_price', array( $this, 'add_global_discount_sale_price' ), PHP_INT_MAX, 2 );
44
  // Grouped products
45
  add_filter( 'woocommerce_get_price_including_tax', array( $this, 'add_global_discount_grouped' ), PHP_INT_MAX, 3 );
46
  add_filter( 'woocommerce_get_price_excluding_tax', array( $this, 'add_global_discount_grouped' ), PHP_INT_MAX, 3 );
47
+ if ( ! WCJ_IS_WC_VERSION_BELOW_3 ) {
48
+ add_filter( 'woocommerce_product_variation_get_price', array( $this, 'add_global_discount_price' ), PHP_INT_MAX, 2 );
49
+ add_filter( 'woocommerce_product_variation_get_sale_price', array( $this, 'add_global_discount_sale_price' ), PHP_INT_MAX, 2 );
50
+ // add_filter( 'woocommerce_product_variation_get_regular_price', array( $this, 'add_global_discount_regular_price' ), PHP_INT_MAX, 2 );
51
+ }
52
  }
53
  }
54
  }
56
  /**
57
  * add_global_discount_grouped.
58
  *
59
+ * @version 2.7.0
60
  * @since 2.5.7
61
  */
62
  function add_global_discount_grouped( $price, $qty, $_product ) {
63
  if ( $_product->is_type( 'grouped' ) ) {
 
64
  foreach ( $_product->get_children() as $child_id ) {
65
  $the_price = get_post_meta( $child_id, '_price', true );
66
  $the_product = wc_get_product( $child_id );
67
+ $the_price = wcj_get_product_display_price( $the_product, $the_price, 1 );
68
  if ( $the_price == $price ) {
69
  return $this->add_global_discount_price( $price, $the_product );
70
  }
100
  /**
101
  * check_product_categories.
102
  *
103
+ * @version 2.7.0
104
  * @since 2.5.7
105
  * @return bool
106
  */
108
  // Check product category - include
109
  $categories_in = get_option( 'wcj_global_discount_sale_categories_incl_' . $group, '' );
110
  if ( ! empty( $categories_in ) ) {
111
+ $product_categories = get_the_terms( wcj_get_product_id_or_variation_parent_id( $_product ), 'product_cat' );
112
  if ( empty( $product_categories ) ) {
113
  return false; // option set to some categories, but product has no categories
114
  }
125
  /**
126
  * add_global_discount_any_price.
127
  *
128
+ * @version 2.7.0
129
  * @since 2.5.7
130
  */
131
  function add_global_discount_any_price( $price_type, $price, $_product ) {
151
  }
152
  }
153
  } else { // if ( 'price' === $price_type )
154
+ remove_filter( WCJ_PRODUCT_GET_SALE_PRICE_FILTER, array( $this, 'add_global_discount_sale_price' ), PHP_INT_MAX, 2 );
155
  remove_filter( 'woocommerce_variation_prices_sale_price', array( $this, 'add_global_discount_sale_price' ), PHP_INT_MAX, 2 );
156
+ if ( ! WCJ_IS_WC_VERSION_BELOW_3 ) {
157
+ remove_filter( 'woocommerce_product_variation_get_sale_price', array( $this, 'add_global_discount_sale_price' ), PHP_INT_MAX, 2 );
158
+ }
159
  if ( 'only_on_sale' === get_option( 'wcj_global_discount_sale_product_scope_' . $i, 'all' ) && 0 == $_product->get_sale_price() ) {
160
  continue; // no changes by current discount group
161
  } elseif ( 'only_not_on_sale' === get_option( 'wcj_global_discount_sale_product_scope_' . $i, 'all' ) && 0 != $_product->get_sale_price() ) {
162
  continue; // no changes by current discount group
163
  }
164
+ add_filter( WCJ_PRODUCT_GET_SALE_PRICE_FILTER, array( $this, 'add_global_discount_sale_price' ), PHP_INT_MAX, 2 );
165
  add_filter( 'woocommerce_variation_prices_sale_price', array( $this, 'add_global_discount_sale_price' ), PHP_INT_MAX, 2 );
166
+ if ( ! WCJ_IS_WC_VERSION_BELOW_3 ) {
167
+ add_filter( 'woocommerce_product_variation_get_sale_price', array( $this, 'add_global_discount_sale_price' ), PHP_INT_MAX, 2 );
168
+ }
169
  }
170
  return $this->calculate_price( $price, $coefficient, $i ); // discount applied
171
  }
includes/class-wcj-left-to-free-shipping.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Left to Free Shipping class.
6
  *
7
- * @version 2.6.0
8
  * @since 2.5.8
9
  * @author Algoritmika Ltd.
10
  */
@@ -96,28 +96,6 @@ class WCJ_Left_To_Free_Shipping extends WCJ_Module {
96
  echo wcj_get_left_to_free_shipping( $content );
97
  }
98
 
99
- /**
100
- * add_settings_hook.
101
- *
102
- * @version 2.5.8
103
- * @since 2.5.8
104
- */
105
- function add_settings_hook() {
106
- add_filter( 'wcj_' . $this->id . '_settings', array( $this, 'add_settings' ) );
107
- }
108
-
109
- /**
110
- * get_settings.
111
- *
112
- * @version 2.5.8
113
- * @since 2.5.8
114
- */
115
- function get_settings() {
116
- $settings = array();
117
- $settings = apply_filters( 'wcj_' . $this->id . '_settings', $settings );
118
- return $this->add_standard_settings( $settings );
119
- }
120
-
121
  /**
122
  * add_settings.
123
  *
4
  *
5
  * The WooCommerce Jetpack Left to Free Shipping class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.5.8
9
  * @author Algoritmika Ltd.
10
  */
96
  echo wcj_get_left_to_free_shipping( $content );
97
  }
98
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99
  /**
100
  * add_settings.
101
  *
includes/class-wcj-mini-cart.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Mini Cart class.
6
  *
7
- * @version 2.4.6
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -18,13 +18,13 @@ class WCJ_Mini_Cart extends WCJ_Module {
18
  /**
19
  * Constructor.
20
  *
21
- * @version 2.4.6
22
  */
23
- public function __construct() {
24
 
25
  $this->id = 'mini_cart';
26
- $this->short_desc = __( 'Mini Cart', 'woocommerce-jetpack' );
27
- $this->desc = __( 'Customize WooCommerce mini cart widget.', 'woocommerce-jetpack' );
28
  $this->link = 'http://booster.io/features/woocommerce-mini-cart/';
29
  parent::__construct();
30
 
4
  *
5
  * The WooCommerce Jetpack Mini Cart class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 2.7.0
22
  */
23
+ function __construct() {
24
 
25
  $this->id = 'mini_cart';
26
+ $this->short_desc = __( 'Mini Cart Custom Info', 'woocommerce-jetpack' );
27
+ $this->desc = __( 'Add custom info to WooCommerce mini cart widget.', 'woocommerce-jetpack' );
28
  $this->link = 'http://booster.io/features/woocommerce-mini-cart/';
29
  parent::__construct();
30
 
includes/class-wcj-more-button-labels.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack More Button Labels class.
6
  *
7
- * @version 2.4.8
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -18,9 +18,9 @@ class WCJ_More_Button_Labels extends WCJ_Module {
18
  /**
19
  * Constructor.
20
  *
21
- * @version 2.4.8
22
  */
23
- public function __construct() {
24
 
25
  $this->id = 'more_button_labels';
26
  $this->short_desc = __( 'More Button Labels', 'woocommerce-jetpack' );
@@ -29,15 +29,17 @@ class WCJ_More_Button_Labels extends WCJ_Module {
29
  parent::__construct();
30
 
31
  if ( $this->is_enabled() ) {
32
- add_filter( 'woocommerce_order_button_text', array( $this, 'set_order_button_text' ) );
33
  }
34
  }
35
 
36
  /**
37
  * set_order_button_text.
 
 
38
  */
39
- public function set_order_button_text( $current_text ) {
40
- $new_text = get_option( 'wcj_checkout_place_order_button_text' );
41
  return ( '' != $new_text ) ? $new_text : $current_text;
42
  }
43
 
@@ -56,7 +58,7 @@ class WCJ_More_Button_Labels extends WCJ_Module {
56
  ),
57
  array(
58
  'title' => __( 'Text', 'woocommerce-jetpack' ),
59
- 'desc' => __( 'leave blank for WooCommerce default', 'woocommerce-jetpack' ),
60
  'desc_tip' => __( 'Button on the checkout page.', 'woocommerce-jetpack' ),
61
  'id' => 'wcj_checkout_place_order_button_text',
62
  'default' => '',
4
  *
5
  * The WooCommerce Jetpack More Button Labels class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 2.7.0
22
  */
23
+ function __construct() {
24
 
25
  $this->id = 'more_button_labels';
26
  $this->short_desc = __( 'More Button Labels', 'woocommerce-jetpack' );
29
  parent::__construct();
30
 
31
  if ( $this->is_enabled() ) {
32
+ add_filter( 'woocommerce_order_button_text', array( $this, 'set_order_button_text' ), PHP_INT_MAX );
33
  }
34
  }
35
 
36
  /**
37
  * set_order_button_text.
38
+ *
39
+ * @version 2.7.0
40
  */
41
+ function set_order_button_text( $current_text ) {
42
+ $new_text = get_option( 'wcj_checkout_place_order_button_text', '' );
43
  return ( '' != $new_text ) ? $new_text : $current_text;
44
  }
45
 
58
  ),
59
  array(
60
  'title' => __( 'Text', 'woocommerce-jetpack' ),
61
+ 'desc' => __( 'Leave blank for WooCommerce default.', 'woocommerce-jetpack' ),
62
  'desc_tip' => __( 'Button on the checkout page.', 'woocommerce-jetpack' ),
63
  'id' => 'wcj_checkout_place_order_button_text',
64
  'default' => '',
includes/class-wcj-multicurrency-product-base-price.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Multicurrency Product Base Price class.
6
  *
7
- * @version 2.6.0
8
  * @since 2.4.8
9
  * @author Algoritmika Ltd.
10
  */
@@ -18,7 +18,7 @@ class WCJ_Multicurrency_Base_Price extends WCJ_Module {
18
  /**
19
  * Constructor.
20
  *
21
- * @version 2.5.2
22
  * @since 2.4.8
23
  */
24
  function __construct() {
@@ -39,18 +39,7 @@ class WCJ_Multicurrency_Base_Price extends WCJ_Module {
39
  add_filter( 'woocommerce_currency_symbol', array( $this, 'change_currency_symbol_on_product_edit' ), PHP_INT_MAX, 2 );
40
 
41
  if ( ! is_admin() || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
42
- // Prices
43
- add_filter( 'woocommerce_get_price', array( $this, 'change_price_by_currency' ), PHP_INT_MAX - 10, 2 );
44
- add_filter( 'woocommerce_get_sale_price', array( $this, 'change_price_by_currency' ), PHP_INT_MAX - 10, 2 );
45
- add_filter( 'woocommerce_get_regular_price', array( $this, 'change_price_by_currency' ), PHP_INT_MAX - 10, 2 );
46
- // Variations
47
- add_filter( 'woocommerce_variation_prices_price', array( $this, 'change_price_by_currency' ), PHP_INT_MAX - 10, 2 );
48
- add_filter( 'woocommerce_variation_prices_regular_price', array( $this, 'change_price_by_currency' ), PHP_INT_MAX - 10, 2 );
49
- add_filter( 'woocommerce_variation_prices_sale_price', array( $this, 'change_price_by_currency' ), PHP_INT_MAX - 10, 2 );
50
- add_filter( 'woocommerce_get_variation_prices_hash', array( $this, 'get_variation_prices_hash' ), PHP_INT_MAX - 10, 3 );
51
- // Grouped products
52
- add_filter( 'woocommerce_get_price_including_tax', array( $this, 'change_price_by_currency_grouped' ), PHP_INT_MAX - 10, 3 );
53
- add_filter( 'woocommerce_get_price_excluding_tax', array( $this, 'change_price_by_currency_grouped' ), PHP_INT_MAX - 10, 3 );
54
  }
55
 
56
  /* if ( is_admin() ) {
@@ -80,20 +69,19 @@ class WCJ_Multicurrency_Base_Price extends WCJ_Module {
80
  }
81
 
82
  /**
83
- * change_price_by_currency_grouped.
84
  *
85
- * @version 2.5.0
86
  * @since 2.5.0
87
  */
88
- function change_price_by_currency_grouped( $price, $qty, $_product ) {
89
  if ( $_product->is_type( 'grouped' ) ) {
90
- $get_price_method = 'get_price_' . get_option( 'woocommerce_tax_display_shop' ) . 'uding_tax';
91
  foreach ( $_product->get_children() as $child_id ) {
92
  $the_price = get_post_meta( $child_id, '_price', true );
93
  $the_product = wc_get_product( $child_id );
94
- $the_price = $the_product->$get_price_method( 1, $the_price );
95
  if ( $the_price == $price ) {
96
- return $this->change_price_by_currency( $price, $the_product );
97
  }
98
  }
99
  }
@@ -101,30 +89,21 @@ class WCJ_Multicurrency_Base_Price extends WCJ_Module {
101
  }
102
 
103
  /**
104
- * change_price_by_currency.
105
  *
106
- * @version 2.5.6
107
  */
108
- function change_price_by_currency( $price, $_product ) {
109
- /*
110
- $multicurrency_base_price_currency = get_post_meta( $_product->id, '_' . 'wcj_multicurrency_base_price_currency', true );
111
- if ( '' != $multicurrency_base_price_currency ) {
112
- if ( 1 != ( $currency_exchange_rate = $this->get_currency_exchange_rate( $multicurrency_base_price_currency ) ) ) {
113
- return $price / $currency_exchange_rate;
114
- }
115
- }
116
- return $price;
117
- */
118
- return wcj_price_by_product_base_currency( $price, $_product->id );
119
  }
120
 
121
  /**
122
  * get_variation_prices_hash.
123
  *
124
- * @version 2.5.0
125
  */
126
  function get_variation_prices_hash( $price_hash, $_product, $display ) {
127
- $multicurrency_base_price_currency = get_post_meta( $_product->id, '_' . 'wcj_multicurrency_base_price_currency', true );
128
  $currency_exchange_rate = $this->get_currency_exchange_rate( $multicurrency_base_price_currency );
129
  $price_hash['wcj_base_currency'] = array(
130
  $multicurrency_base_price_currency,
@@ -145,7 +124,7 @@ class WCJ_Multicurrency_Base_Price extends WCJ_Module {
145
  $available_variations = $_product->get_available_variations();
146
  foreach ( $available_variations as $variation ) {
147
  $variation_product = wc_get_product( $variation['variation_id'] );
148
- $products[ $variation['variation_id'] ] = ' (' . $variation_product->get_formatted_variation_attributes( true ) . ')';
149
  }
150
  } else {
151
  $products[ $main_product_id ] = '';
@@ -205,21 +184,6 @@ class WCJ_Multicurrency_Base_Price extends WCJ_Module {
205
  return $currency_symbol;
206
  }
207
 
208
- /**
209
- * add_settings_hook.
210
- */
211
- function add_settings_hook() {
212
- add_filter( 'wcj_multicurrency_base_price_settings', array( $this, 'add_settings' ) );
213
- }
214
-
215
- /**
216
- * get_settings.
217
- */
218
- function get_settings() {
219
- $settings = apply_filters( 'wcj_multicurrency_base_price_settings', array() );
220
- return $this->add_standard_settings( $settings );
221
- }
222
-
223
  /**
224
  * add_settings.
225
  *
4
  *
5
  * The WooCommerce Jetpack Multicurrency Product Base Price class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.4.8
9
  * @author Algoritmika Ltd.
10
  */
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 2.7.0
22
  * @since 2.4.8
23
  */
24
  function __construct() {
39
  add_filter( 'woocommerce_currency_symbol', array( $this, 'change_currency_symbol_on_product_edit' ), PHP_INT_MAX, 2 );
40
 
41
  if ( ! is_admin() || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
42
+ wcj_add_change_price_hooks( $this, PHP_INT_MAX - 10, false );
 
 
 
 
 
 
 
 
 
 
 
43
  }
44
 
45
  /* if ( is_admin() ) {
69
  }
70
 
71
  /**
72
+ * change_price_grouped.
73
  *
74
+ * @version 2.7.0
75
  * @since 2.5.0
76
  */
77
+ function change_price_grouped( $price, $qty, $_product ) {
78
  if ( $_product->is_type( 'grouped' ) ) {
 
79
  foreach ( $_product->get_children() as $child_id ) {
80
  $the_price = get_post_meta( $child_id, '_price', true );
81
  $the_product = wc_get_product( $child_id );
82
+ $the_price = wcj_get_product_display_price( $the_product, $the_price, 1 );
83
  if ( $the_price == $price ) {
84
+ return $this->change_price( $price, $the_product );
85
  }
86
  }
87
  }
89
  }
90
 
91
  /**
92
+ * change_price.
93
  *
94
+ * @version 2.7.0
95
  */
96
+ function change_price( $price, $_product ) {
97
+ return wcj_price_by_product_base_currency( $price, wcj_get_product_id_or_variation_parent_id( $_product ) );
 
 
 
 
 
 
 
 
 
98
  }
99
 
100
  /**
101
  * get_variation_prices_hash.
102
  *
103
+ * @version 2.7.0
104
  */
105
  function get_variation_prices_hash( $price_hash, $_product, $display ) {
106
+ $multicurrency_base_price_currency = get_post_meta( wcj_get_product_id_or_variation_parent_id( $_product, true ), '_' . 'wcj_multicurrency_base_price_currency', true );
107
  $currency_exchange_rate = $this->get_currency_exchange_rate( $multicurrency_base_price_currency );
108
  $price_hash['wcj_base_currency'] = array(
109
  $multicurrency_base_price_currency,
124
  $available_variations = $_product->get_available_variations();
125
  foreach ( $available_variations as $variation ) {
126
  $variation_product = wc_get_product( $variation['variation_id'] );
127
+ $products[ $variation['variation_id'] ] = ' (' . wcj_get_product_formatted_variation( $variation_product, true ) . ')';
128
  }
129
  } else {
130
  $products[ $main_product_id ] = '';
184
  return $currency_symbol;
185
  }
186
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
187
  /**
188
  * add_settings.
189
  *
includes/class-wcj-multicurrency.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Multicurrency class.
6
  *
7
- * @version 2.6.0
8
  * @since 2.4.3
9
  * @author Algoritmika Ltd.
10
  */
@@ -48,7 +48,7 @@ class WCJ_Multicurrency extends WCJ_Module {
48
  /**
49
  * get_meta_box_options.
50
  *
51
- * @version 2.4.3
52
  */
53
  function get_meta_box_options() {
54
  $main_product_id = get_the_ID();
@@ -58,7 +58,7 @@ class WCJ_Multicurrency extends WCJ_Module {
58
  $available_variations = $_product->get_available_variations();
59
  foreach ( $available_variations as $variation ) {
60
  $variation_product = wc_get_product( $variation['variation_id'] );
61
- $products[ $variation['variation_id'] ] = ' (' . $variation_product->get_formatted_variation_attributes( true ) . ')';
62
  }
63
  } else {
64
  $products[ $main_product_id ] = '';
@@ -96,7 +96,7 @@ class WCJ_Multicurrency extends WCJ_Module {
96
  /**
97
  * add_hooks.
98
  *
99
- * @version 2.5.7
100
  */
101
  function add_hooks() {
102
  // Session
@@ -113,66 +113,55 @@ class WCJ_Multicurrency extends WCJ_Module {
113
  // add_filter( 'woocommerce_tm_epo_price_per_currency_diff', array( $this, 'change_price_by_currency_tm_extra_product_options_plugin_cart' ), PHP_INT_MAX - 1, 1 );
114
  // add_filter( 'woocommerce_tm_epo_price_add_on_cart', array( $this, 'change_price_by_currency_tm_extra_product_options_plugin_cart' ), PHP_INT_MAX - 1, 1 );
115
  // add_filter( 'wc_aelia_cs_enabled_currencies', array( $this, 'add_currency' ), PHP_INT_MAX - 1, 1 );
116
- // Prices
117
- add_filter( 'woocommerce_get_price', array( $this, 'change_price_by_currency' ), PHP_INT_MAX - 1, 2 );
118
- add_filter( 'woocommerce_get_sale_price', array( $this, 'change_price_by_currency' ), PHP_INT_MAX - 1, 2 );
119
- add_filter( 'woocommerce_get_regular_price', array( $this, 'change_price_by_currency' ), PHP_INT_MAX - 1, 2 );
120
  // Currency hooks
121
  add_filter( 'woocommerce_currency_symbol', array( $this, 'change_currency_symbol' ), PHP_INT_MAX - 1, 2 );
122
  add_filter( 'woocommerce_currency', array( $this, 'change_currency_code' ), PHP_INT_MAX - 1, 1 );
123
- // Shipping
124
- add_filter( 'woocommerce_package_rates', array( $this, 'change_shipping_price_by_currency' ), PHP_INT_MAX - 1, 2 );
125
- // Variations
126
- add_filter( 'woocommerce_variation_prices_price', array( $this, 'change_price_by_currency' ), PHP_INT_MAX - 1, 2 );
127
- add_filter( 'woocommerce_variation_prices_regular_price', array( $this, 'change_price_by_currency' ), PHP_INT_MAX - 1, 2 );
128
- add_filter( 'woocommerce_variation_prices_sale_price', array( $this, 'change_price_by_currency' ), PHP_INT_MAX - 1, 2 );
129
- add_filter( 'woocommerce_get_variation_prices_hash', array( $this, 'get_variation_prices_hash' ), PHP_INT_MAX - 1, 3 );
130
- // Grouped products
131
- add_filter( 'woocommerce_get_price_including_tax', array( $this, 'change_price_by_currency_grouped' ), PHP_INT_MAX - 1, 3 );
132
- add_filter( 'woocommerce_get_price_excluding_tax', array( $this, 'change_price_by_currency_grouped' ), PHP_INT_MAX - 1, 3 );
133
  }
134
  }
135
 
136
  /**
137
  * change_price_by_currency_tm_extra_product_options_plugin_cart.
138
  *
139
- * @version 2.5.7
140
  * @since 2.5.7
141
  */
142
  function change_price_by_currency_tm_extra_product_options_plugin_cart( $price ) {
143
- return $this->change_price_by_currency( $price, null );
144
  }
145
 
146
  /**
147
  * change_price_by_currency_tm_extra_product_options_plugin.
148
  *
149
- * @version 2.5.7
150
  * @since 2.5.7
151
  */
152
  function change_price_by_currency_tm_extra_product_options_plugin( $price, $type, $post_id ) {
153
- return $this->change_price_by_currency( $price, null );
154
  }
155
 
156
  /**
157
- * change_price_by_currency_grouped.
158
  *
159
- * @version 2.5.0
160
  * @since 2.5.0
161
  */
162
- function change_price_by_currency_grouped( $price, $qty, $_product ) {
163
  if ( $_product->is_type( 'grouped' ) ) {
164
  if ( 'yes' === get_option( 'wcj_multicurrency_per_product_enabled' , 'yes' ) ) {
165
- $get_price_method = 'get_price_' . get_option( 'woocommerce_tax_display_shop' ) . 'uding_tax';
166
  foreach ( $_product->get_children() as $child_id ) {
167
  $the_price = get_post_meta( $child_id, '_price', true );
168
  $the_product = wc_get_product( $child_id );
169
- $the_price = $the_product->$get_price_method( 1, $the_price );
170
  if ( $the_price == $price ) {
171
- return $this->change_price_by_currency( $price, $the_product );
172
  }
173
  }
174
  } else {
175
- return $this->change_price_by_currency( $price, null );
176
  }
177
  }
178
  return $price;
@@ -222,11 +211,11 @@ class WCJ_Multicurrency extends WCJ_Module {
222
  }
223
 
224
  /**
225
- * change_price_by_currency.
226
  *
227
- * @version 2.6.0
228
  */
229
- function change_price_by_currency( $price, $_product ) {
230
 
231
  if ( '' === $price ) {
232
  return $price;
@@ -238,22 +227,21 @@ class WCJ_Multicurrency extends WCJ_Module {
238
 
239
  // Per product
240
  if ( 'yes' === get_option( 'wcj_multicurrency_per_product_enabled' , 'yes' ) && null != $_product ) {
241
- $the_product_id = ( isset( $_product->variation_id ) ) ? $_product->variation_id : $_product->id;
242
- if ( '' != ( $regular_price_per_product = get_post_meta( $the_product_id, '_' . 'wcj_multicurrency_per_product_regular_price_' . $this->get_current_currency_code(), true ) ) ) {
243
- $the_current_filter = current_filter();
244
- if ( 'woocommerce_get_price_including_tax' == $the_current_filter || 'woocommerce_get_price_excluding_tax' == $the_current_filter ) {
245
- $get_price_method = 'get_price_' . get_option( 'woocommerce_tax_display_shop' ) . 'uding_tax';
246
- return $_product->$get_price_method();
247
-
248
- } elseif ( 'woocommerce_get_price' == $the_current_filter || 'woocommerce_variation_prices_price' == $the_current_filter ) {
249
- $sale_price_per_product = get_post_meta( $the_product_id, '_' . 'wcj_multicurrency_per_product_sale_price_' . $this->get_current_currency_code(), true );
250
  return ( '' != $sale_price_per_product && $sale_price_per_product < $regular_price_per_product ) ? $sale_price_per_product : $regular_price_per_product;
251
 
252
- } elseif ( 'woocommerce_get_regular_price' == $the_current_filter || 'woocommerce_variation_prices_regular_price' == $the_current_filter ) {
253
  return $regular_price_per_product;
254
 
255
- } elseif ( 'woocommerce_get_sale_price' == $the_current_filter || 'woocommerce_variation_prices_sale_price' == $the_current_filter ) {
256
- $sale_price_per_product = get_post_meta( $the_product_id, '_' . 'wcj_multicurrency_per_product_sale_price_' . $this->get_current_currency_code(), true );
257
  return ( '' != $sale_price_per_product ) ? $sale_price_per_product : $price;
258
  }
259
  }
@@ -328,11 +316,11 @@ class WCJ_Multicurrency extends WCJ_Module {
328
  }
329
 
330
  /**
331
- * change_shipping_price_by_currency.
332
  *
333
- * @version 2.5.0
334
  */
335
- function change_shipping_price_by_currency( $package_rates, $package ) {
336
  if ( $this->do_revert() ) {
337
  return $package_rates;
338
  }
4
  *
5
  * The WooCommerce Jetpack Multicurrency class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.4.3
9
  * @author Algoritmika Ltd.
10
  */
48
  /**
49
  * get_meta_box_options.
50
  *
51
+ * @version 2.7.0
52
  */
53
  function get_meta_box_options() {
54
  $main_product_id = get_the_ID();
58
  $available_variations = $_product->get_available_variations();
59
  foreach ( $available_variations as $variation ) {
60
  $variation_product = wc_get_product( $variation['variation_id'] );
61
+ $products[ $variation['variation_id'] ] = ' (' . wcj_get_product_formatted_variation( $variation_product, true ) . ')';
62
  }
63
  } else {
64
  $products[ $main_product_id ] = '';
96
  /**
97
  * add_hooks.
98
  *
99
+ * @version 2.7.0
100
  */
101
  function add_hooks() {
102
  // Session
113
  // add_filter( 'woocommerce_tm_epo_price_per_currency_diff', array( $this, 'change_price_by_currency_tm_extra_product_options_plugin_cart' ), PHP_INT_MAX - 1, 1 );
114
  // add_filter( 'woocommerce_tm_epo_price_add_on_cart', array( $this, 'change_price_by_currency_tm_extra_product_options_plugin_cart' ), PHP_INT_MAX - 1, 1 );
115
  // add_filter( 'wc_aelia_cs_enabled_currencies', array( $this, 'add_currency' ), PHP_INT_MAX - 1, 1 );
116
+
 
 
 
117
  // Currency hooks
118
  add_filter( 'woocommerce_currency_symbol', array( $this, 'change_currency_symbol' ), PHP_INT_MAX - 1, 2 );
119
  add_filter( 'woocommerce_currency', array( $this, 'change_currency_code' ), PHP_INT_MAX - 1, 1 );
120
+
121
+ // Add "Change Price" hooks
122
+ wcj_add_change_price_hooks( $this, PHP_INT_MAX - 1 );
 
 
 
 
 
 
 
123
  }
124
  }
125
 
126
  /**
127
  * change_price_by_currency_tm_extra_product_options_plugin_cart.
128
  *
129
+ * @version 2.7.0
130
  * @since 2.5.7
131
  */
132
  function change_price_by_currency_tm_extra_product_options_plugin_cart( $price ) {
133
+ return $this->change_price( $price, null );
134
  }
135
 
136
  /**
137
  * change_price_by_currency_tm_extra_product_options_plugin.
138
  *
139
+ * @version 2.7.0
140
  * @since 2.5.7
141
  */
142
  function change_price_by_currency_tm_extra_product_options_plugin( $price, $type, $post_id ) {
143
+ return $this->change_price( $price, null );
144
  }
145
 
146
  /**
147
+ * change_price_grouped.
148
  *
149
+ * @version 2.7.0
150
  * @since 2.5.0
151
  */
152
+ function change_price_grouped( $price, $qty, $_product ) {
153
  if ( $_product->is_type( 'grouped' ) ) {
154
  if ( 'yes' === get_option( 'wcj_multicurrency_per_product_enabled' , 'yes' ) ) {
 
155
  foreach ( $_product->get_children() as $child_id ) {
156
  $the_price = get_post_meta( $child_id, '_price', true );
157
  $the_product = wc_get_product( $child_id );
158
+ $the_price = wcj_get_product_display_price( $the_product, $the_price, 1 );
159
  if ( $the_price == $price ) {
160
+ return $this->change_price( $price, $the_product );
161
  }
162
  }
163
  } else {
164
+ return $this->change_price( $price, null );
165
  }
166
  }
167
  return $price;
211
  }
212
 
213
  /**
214
+ * change_price.
215
  *
216
+ * @version 2.7.0
217
  */
218
+ function change_price( $price, $_product ) {
219
 
220
  if ( '' === $price ) {
221
  return $price;
227
 
228
  // Per product
229
  if ( 'yes' === get_option( 'wcj_multicurrency_per_product_enabled' , 'yes' ) && null != $_product ) {
230
+ $_product_id = wcj_get_product_id( $_product );
231
+ if ( '' != ( $regular_price_per_product = get_post_meta( $_product_id, '_' . 'wcj_multicurrency_per_product_regular_price_' . $this->get_current_currency_code(), true ) ) ) {
232
+ $_current_filter = current_filter();
233
+ if ( 'woocommerce_get_price_including_tax' == $_current_filter || 'woocommerce_get_price_excluding_tax' == $_current_filter ) {
234
+ return wcj_get_product_display_price( $_product );
235
+
236
+ } elseif ( WCJ_PRODUCT_GET_PRICE_FILTER == $_current_filter || 'woocommerce_variation_prices_price' == $_current_filter || 'woocommerce_product_variation_get_price' == $_current_filter ) {
237
+ $sale_price_per_product = get_post_meta( $_product_id, '_' . 'wcj_multicurrency_per_product_sale_price_' . $this->get_current_currency_code(), true );
 
238
  return ( '' != $sale_price_per_product && $sale_price_per_product < $regular_price_per_product ) ? $sale_price_per_product : $regular_price_per_product;
239
 
240
+ } elseif ( WCJ_PRODUCT_GET_REGULAR_PRICE_FILTER == $_current_filter || 'woocommerce_variation_prices_regular_price' == $_current_filter || 'woocommerce_product_variation_get_regular_price' == $_current_filter ) {
241
  return $regular_price_per_product;
242
 
243
+ } elseif ( WCJ_PRODUCT_GET_SALE_PRICE_FILTER == $_current_filter || 'woocommerce_variation_prices_sale_price' == $_current_filter || 'woocommerce_product_variation_get_sale_price' == $_current_filter ) {
244
+ $sale_price_per_product = get_post_meta( $_product_id, '_' . 'wcj_multicurrency_per_product_sale_price_' . $this->get_current_currency_code(), true );
245
  return ( '' != $sale_price_per_product ) ? $sale_price_per_product : $price;
246
  }
247
  }
316
  }
317
 
318
  /**
319
+ * change_price_shipping.
320
  *
321
+ * @version 2.7.0
322
  */
323
+ function change_price_shipping( $package_rates, $package ) {
324
  if ( $this->do_revert() ) {
325
  return $package_rates;
326
  }
includes/class-wcj-old-slugs.php CHANGED
@@ -19,7 +19,7 @@ class WCJ_Old_Slugs extends WCJ_Module {
19
  *
20
  * @version 2.5.0
21
  */
22
- public function __construct() {
23
 
24
  $this->id = 'old_slugs';
25
  $this->short_desc = __( 'Old Slugs', 'woocommerce-jetpack' );
@@ -72,8 +72,11 @@ class WCJ_Old_Slugs extends WCJ_Module {
72
 
73
  if ( ( isset( $_POST['remove_old_products_slugs'] ) ) || ( isset( $_POST['remove_old_none_products_slugs'] ) ) ) {
74
 
75
- if ( isset( $_POST['remove_old_products_slugs'] ) ) $post_ids_to_delete = join( ',', $posts_ids['products'] );
76
- else if ( isset( $_POST['remove_old_none_products_slugs'] ) ) $post_ids_to_delete = join( ',', $posts_ids['none_products'] );
 
 
 
77
 
78
  $the_delete_query = "DELETE FROM $wp_postmeta_table WHERE meta_key = '_wp_old_slug' AND post_id IN ($post_ids_to_delete)";
79
 
@@ -81,7 +84,7 @@ class WCJ_Old_Slugs extends WCJ_Module {
81
 
82
  $recheck_result = $wpdb->get_results("SELECT * FROM $wp_postmeta_table WHERE meta_key = '_wp_old_slug'");
83
  $recheck_result_count = count( $recheck_result );
84
- $remove_result_html = '<div class="updated"><p><strong>Removing old slugs from database finished! ' . ($num_old_slugs-$recheck_result_count) . ' old slug(s) deleted. Please <a href="">refresh</a> the page.</strong></p></div>';
85
  }
86
  }
87
 
19
  *
20
  * @version 2.5.0
21
  */
22
+ function __construct() {
23
 
24
  $this->id = 'old_slugs';
25
  $this->short_desc = __( 'Old Slugs', 'woocommerce-jetpack' );
72
 
73
  if ( ( isset( $_POST['remove_old_products_slugs'] ) ) || ( isset( $_POST['remove_old_none_products_slugs'] ) ) ) {
74
 
75
+ if ( isset( $_POST['remove_old_products_slugs'] ) ) {
76
+ $post_ids_to_delete = join( ',', $posts_ids['products'] );
77
+ } elseif ( isset( $_POST['remove_old_none_products_slugs'] ) ) {
78
+ $post_ids_to_delete = join( ',', $posts_ids['none_products'] );
79
+ }
80
 
81
  $the_delete_query = "DELETE FROM $wp_postmeta_table WHERE meta_key = '_wp_old_slug' AND post_id IN ($post_ids_to_delete)";
82
 
84
 
85
  $recheck_result = $wpdb->get_results("SELECT * FROM $wp_postmeta_table WHERE meta_key = '_wp_old_slug'");
86
  $recheck_result_count = count( $recheck_result );
87
+ $remove_result_html = '<div class="updated"><p><strong>Removing old slugs from database finished! ' . ($num_old_slugs - $recheck_result_count) . ' old slug(s) deleted. Please <a href="">refresh</a> the page.</strong></p></div>';
88
  }
89
  }
90
 
includes/class-wcj-order-custom-statuses.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Order Custom Statuses class.
6
  *
7
- * @version 2.6.0
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -20,7 +20,7 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
20
  *
21
  * @version 2.6.0
22
  */
23
- public function __construct() {
24
 
25
  $this->id = 'order_custom_statuses';
26
  $this->short_desc = __( 'Order Custom Statuses', 'woocommerce-jetpack' );
@@ -61,7 +61,7 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
61
  /**
62
  * add_custom_status_actions_buttons.
63
  *
64
- * @version 2.6.0
65
  * @since 2.6.0
66
  */
67
  function add_custom_status_actions_buttons( $actions, $_order ) {
@@ -71,7 +71,7 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
71
  $custom_order_status = substr( $slug, 3 );
72
  if ( ! $_order->has_status( array( $custom_order_status ) ) ) { // if order status is not $custom_order_status
73
  $actions[ $custom_order_status ] = array(
74
- 'url' => wp_nonce_url( admin_url( 'admin-ajax.php?action=woocommerce_mark_order_status&status=' . $custom_order_status . '&order_id=' . $_order->id ), 'woocommerce-mark-order-status' ),
75
  'name' => $label,
76
  'action' => "view " . $custom_order_status, // setting "view" for proper button CSS
77
  );
@@ -128,7 +128,7 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
128
  *
129
  * @version 2.3.8
130
  */
131
- public function add_custom_order_statuses_to_reports( $order_statuses ) {
132
  if ( is_array( $order_statuses ) && in_array( 'completed', $order_statuses ) ) {
133
  $custom_order_statuses = get_option( 'wcj_orders_custom_statuses_array' );
134
  if ( ! empty( $custom_order_statuses ) && is_array( $custom_order_statuses ) ) {
@@ -143,14 +143,14 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
143
  /**
144
  * set_default_order_status.
145
  */
146
- public function set_default_order_status() {
147
  return get_option( 'wcj_orders_custom_statuses_default_status', 'pending' );
148
  }
149
 
150
  /**
151
  * register_custom_post_statuses.
152
  */
153
- public function register_custom_post_statuses() {
154
  $wcj_orders_custom_statuses_array = ( '' == get_option( 'wcj_orders_custom_statuses_array' ) ) ? array() : get_option( 'wcj_orders_custom_statuses_array' );
155
  foreach ( $wcj_orders_custom_statuses_array as $slug => $label )
156
  register_post_status( $slug, array(
@@ -167,7 +167,7 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
167
  /**
168
  * add_custom_statuses_to_filter.
169
  */
170
- public function add_custom_statuses_to_filter( $order_statuses ) {
171
  $wcj_orders_custom_statuses_array = ( '' == get_option( 'wcj_orders_custom_statuses_array' ) ) ? array() : get_option( 'wcj_orders_custom_statuses_array' );
172
  $order_statuses = ( '' == $order_statuses ) ? array() : $order_statuses;
173
  return array_merge( $order_statuses, $wcj_orders_custom_statuses_array );
@@ -178,7 +178,7 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
178
  *
179
  * @verison 2.5.6
180
  */
181
- public function hook_statuses_icons_css() {
182
  $output = '<style>';
183
  $statuses = function_exists( 'wc_get_order_statuses' ) ? wc_get_order_statuses() : array();
184
  $default_statuses = $this->get_default_order_statuses();
@@ -205,7 +205,7 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
205
  *
206
  * @version 2.6.0
207
  */
208
- public function add_custom_status( $new_status, $new_status_label, $new_status_icon_content, $new_status_icon_color ) {
209
 
210
  // Checking function arguments
211
  if ( ! isset( $new_status ) || '' == $new_status ) {
@@ -251,7 +251,7 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
251
  * @todo (from Custom Order Status for WooCommerce plugin) delete: option to change fallback status from 'on-hold' to any other status
252
  * @todo (from Custom Order Status for WooCommerce plugin) delete: delete icon data
253
  */
254
- public function create_custom_statuses_tool() {
255
  $result_message = '';
256
  if ( isset( $_POST['add_custom_status'] ) ) {
257
  $result_message = $this->add_custom_status( $_POST['new_status'], $_POST['new_status_label'], $_POST['new_status_icon_content'], $_POST['new_status_icon_color'] );
@@ -367,7 +367,7 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
367
  * @version 2.2.7
368
  * @since 2.2.7
369
  */
370
- public function bulk_admin_footer() {
371
  global $post_type;
372
  if ( 'shop_order' == $post_type ) {
373
  ?><script type="text/javascript"><?php
4
  *
5
  * The WooCommerce Jetpack Order Custom Statuses class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
20
  *
21
  * @version 2.6.0
22
  */
23
+ function __construct() {
24
 
25
  $this->id = 'order_custom_statuses';
26
  $this->short_desc = __( 'Order Custom Statuses', 'woocommerce-jetpack' );
61
  /**
62
  * add_custom_status_actions_buttons.
63
  *
64
+ * @version 2.7.0
65
  * @since 2.6.0
66
  */
67
  function add_custom_status_actions_buttons( $actions, $_order ) {
71
  $custom_order_status = substr( $slug, 3 );
72
  if ( ! $_order->has_status( array( $custom_order_status ) ) ) { // if order status is not $custom_order_status
73
  $actions[ $custom_order_status ] = array(
74
+ 'url' => wp_nonce_url( admin_url( 'admin-ajax.php?action=woocommerce_mark_order_status&status=' . $custom_order_status . '&order_id=' . wcj_get_order_id( $_order ) ), 'woocommerce-mark-order-status' ),
75
  'name' => $label,
76
  'action' => "view " . $custom_order_status, // setting "view" for proper button CSS
77
  );
128
  *
129
  * @version 2.3.8
130
  */
131
+ function add_custom_order_statuses_to_reports( $order_statuses ) {
132
  if ( is_array( $order_statuses ) && in_array( 'completed', $order_statuses ) ) {
133
  $custom_order_statuses = get_option( 'wcj_orders_custom_statuses_array' );
134
  if ( ! empty( $custom_order_statuses ) && is_array( $custom_order_statuses ) ) {
143
  /**
144
  * set_default_order_status.
145
  */
146
+ function set_default_order_status() {
147
  return get_option( 'wcj_orders_custom_statuses_default_status', 'pending' );
148
  }
149
 
150
  /**
151
  * register_custom_post_statuses.
152
  */
153
+ function register_custom_post_statuses() {
154
  $wcj_orders_custom_statuses_array = ( '' == get_option( 'wcj_orders_custom_statuses_array' ) ) ? array() : get_option( 'wcj_orders_custom_statuses_array' );
155
  foreach ( $wcj_orders_custom_statuses_array as $slug => $label )
156
  register_post_status( $slug, array(
167
  /**
168
  * add_custom_statuses_to_filter.
169
  */
170
+ function add_custom_statuses_to_filter( $order_statuses ) {
171
  $wcj_orders_custom_statuses_array = ( '' == get_option( 'wcj_orders_custom_statuses_array' ) ) ? array() : get_option( 'wcj_orders_custom_statuses_array' );
172
  $order_statuses = ( '' == $order_statuses ) ? array() : $order_statuses;
173
  return array_merge( $order_statuses, $wcj_orders_custom_statuses_array );
178
  *
179
  * @verison 2.5.6
180
  */
181
+ function hook_statuses_icons_css() {
182
  $output = '<style>';
183
  $statuses = function_exists( 'wc_get_order_statuses' ) ? wc_get_order_statuses() : array();
184
  $default_statuses = $this->get_default_order_statuses();
205
  *
206
  * @version 2.6.0
207
  */
208
+ function add_custom_status( $new_status, $new_status_label, $new_status_icon_content, $new_status_icon_color ) {
209
 
210
  // Checking function arguments
211
  if ( ! isset( $new_status ) || '' == $new_status ) {
251
  * @todo (from Custom Order Status for WooCommerce plugin) delete: option to change fallback status from 'on-hold' to any other status
252
  * @todo (from Custom Order Status for WooCommerce plugin) delete: delete icon data
253
  */
254
+ function create_custom_statuses_tool() {
255
  $result_message = '';
256
  if ( isset( $_POST['add_custom_status'] ) ) {
257
  $result_message = $this->add_custom_status( $_POST['new_status'], $_POST['new_status_label'], $_POST['new_status_icon_content'], $_POST['new_status_icon_color'] );
367
  * @version 2.2.7
368
  * @since 2.2.7
369
  */
370
+ function bulk_admin_footer() {
371
  global $post_type;
372
  if ( 'shop_order' == $post_type ) {
373
  ?><script type="text/javascript"><?php
includes/class-wcj-order-min-amount.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Order Minimum Amount class.
6
  *
7
- * @version 2.6.0
8
  * @since 2.5.7
9
  * @author Algoritmika Ltd.
10
  */
@@ -21,7 +21,7 @@ class WCJ_Order_Min_Amount extends WCJ_Module {
21
  * @version 2.5.7
22
  * @since 2.5.7
23
  */
24
- public function __construct() {
25
 
26
  $this->id = 'order_min_amount';
27
  $this->short_desc = __( 'Order Minimum Amount', 'woocommerce-jetpack' );
@@ -67,7 +67,7 @@ class WCJ_Order_Min_Amount extends WCJ_Module {
67
  /**
68
  * get_order_minimum_amount_with_user_roles.
69
  *
70
- * @version 2.6.0
71
  * @since 2.5.3
72
  */
73
  function get_order_minimum_amount_with_user_roles() {
@@ -84,7 +84,7 @@ class WCJ_Order_Min_Amount extends WCJ_Module {
84
  }
85
  // Multicurrency (Currency Switcher) module
86
  if ( WCJ()->modules['multicurrency']->is_enabled() ) {
87
- $minimum = WCJ()->modules['multicurrency']->change_price_by_currency( $minimum, null );
88
  }
89
  return $minimum;
90
  }
@@ -109,10 +109,10 @@ class WCJ_Order_Min_Amount extends WCJ_Module {
109
  /**
110
  * order_minimum_amount.
111
  *
112
- * @version 2.6.0
113
  * @todo wc_print_notice or wc_add_notice?
114
  */
115
- public function order_minimum_amount() {
116
  $minimum = $this->get_order_minimum_amount_with_user_roles();
117
  if ( 0 == $minimum ) {
118
  return;
@@ -123,8 +123,8 @@ class WCJ_Order_Min_Amount extends WCJ_Module {
123
  if ( 'yes' === get_option( 'wcj_order_minimum_amount_cart_notice_enabled', 'no' ) ) {
124
  wc_print_notice(
125
  sprintf( apply_filters( 'booster_get_option', 'You must have an order with a minimum of %s to place your order, your current order total is %s.', get_option( 'wcj_order_minimum_amount_cart_notice_message' ) ),
126
- woocommerce_price( $minimum ),
127
- woocommerce_price( $cart_total )
128
  ),
129
  'notice'
130
  );
@@ -132,8 +132,8 @@ class WCJ_Order_Min_Amount extends WCJ_Module {
132
  } else {
133
  wc_add_notice(
134
  sprintf( apply_filters( 'booster_get_option', 'You must have an order with a minimum of %s to place your order, your current order total is %s.', get_option( 'wcj_order_minimum_amount_error_message' ) ),
135
- woocommerce_price( $minimum ),
136
- woocommerce_price( $cart_total )
137
  ),
138
  'error'
139
  );
@@ -144,9 +144,9 @@ class WCJ_Order_Min_Amount extends WCJ_Module {
144
  /**
145
  * stop_from_seeing_checkout.
146
  *
147
- * @version 2.5.5
148
  */
149
- public function stop_from_seeing_checkout( $wp ) {
150
  // if ( is_admin() ) return;
151
  global $woocommerce;
152
  if ( ! isset( $woocommerce ) || ! is_object( $woocommerce ) ) {
@@ -168,30 +168,10 @@ class WCJ_Order_Min_Amount extends WCJ_Module {
168
  }
169
  if ( $the_cart_total < $minimum ) {
170
  wp_safe_redirect( $woocommerce->cart->get_cart_url() );
 
171
  }
172
  }
173
 
174
- /**
175
- * add_settings_hook.
176
- *
177
- * @version 2.5.7
178
- * @since 2.5.7
179
- */
180
- function add_settings_hook() {
181
- add_filter( 'wcj_order_min_amount_settings', array( $this, 'add_settings' ) );
182
- }
183
-
184
- /**
185
- * get_settings.
186
- *
187
- * @version 2.5.7
188
- * @since 2.5.7
189
- */
190
- function get_settings() {
191
- $settings = apply_filters( 'wcj_order_min_amount_settings', array() );
192
- return $this->add_standard_settings( $settings );
193
- }
194
-
195
  /**
196
  * add_settings.
197
  *
4
  *
5
  * The WooCommerce Jetpack Order Minimum Amount class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.5.7
9
  * @author Algoritmika Ltd.
10
  */
21
  * @version 2.5.7
22
  * @since 2.5.7
23
  */
24
+ function __construct() {
25
 
26
  $this->id = 'order_min_amount';
27
  $this->short_desc = __( 'Order Minimum Amount', 'woocommerce-jetpack' );
67
  /**
68
  * get_order_minimum_amount_with_user_roles.
69
  *
70
+ * @version 2.7.0
71
  * @since 2.5.3
72
  */
73
  function get_order_minimum_amount_with_user_roles() {
84
  }
85
  // Multicurrency (Currency Switcher) module
86
  if ( WCJ()->modules['multicurrency']->is_enabled() ) {
87
+ $minimum = WCJ()->modules['multicurrency']->change_price( $minimum, null );
88
  }
89
  return $minimum;
90
  }
109
  /**
110
  * order_minimum_amount.
111
  *
112
+ * @version 2.7.0
113
  * @todo wc_print_notice or wc_add_notice?
114
  */
115
+ function order_minimum_amount() {
116
  $minimum = $this->get_order_minimum_amount_with_user_roles();
117
  if ( 0 == $minimum ) {
118
  return;
123
  if ( 'yes' === get_option( 'wcj_order_minimum_amount_cart_notice_enabled', 'no' ) ) {
124
  wc_print_notice(
125
  sprintf( apply_filters( 'booster_get_option', 'You must have an order with a minimum of %s to place your order, your current order total is %s.', get_option( 'wcj_order_minimum_amount_cart_notice_message' ) ),
126
+ wc_price( $minimum ),
127
+ wc_price( $cart_total )
128
  ),
129
  'notice'
130
  );
132
  } else {
133
  wc_add_notice(
134
  sprintf( apply_filters( 'booster_get_option', 'You must have an order with a minimum of %s to place your order, your current order total is %s.', get_option( 'wcj_order_minimum_amount_error_message' ) ),
135
+ wc_price( $minimum ),
136
+ wc_price( $cart_total )
137
  ),
138
  'error'
139
  );
144
  /**
145
  * stop_from_seeing_checkout.
146
  *
147
+ * @version 2.7.0
148
  */
149
+ function stop_from_seeing_checkout( $wp ) {
150
  // if ( is_admin() ) return;
151
  global $woocommerce;
152
  if ( ! isset( $woocommerce ) || ! is_object( $woocommerce ) ) {
168
  }
169
  if ( $the_cart_total < $minimum ) {
170
  wp_safe_redirect( $woocommerce->cart->get_cart_url() );
171
+ exit;
172
  }
173
  }
174
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
175
  /**
176
  * add_settings.
177
  *
includes/class-wcj-order-numbers.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Order Numbers class.
6
  *
7
- * @version 2.6.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -19,7 +19,7 @@ class WCJ_Order_Numbers extends WCJ_Module {
19
  *
20
  * @version 2.6.0
21
  */
22
- public function __construct() {
23
 
24
  $this->id = 'order_numbers';
25
  $this->short_desc = __( 'Order Numbers', 'woocommerce-jetpack' );
@@ -54,6 +54,7 @@ class WCJ_Order_Numbers extends WCJ_Module {
54
  * @version 2.6.0
55
  * @since 2.6.0
56
  * @see https://github.com/pablo-pacheco/wc-booster-search-order-by-custom-number-fix
 
57
  */
58
  function search_by_custom_number( $query ) {
59
  if (
@@ -79,6 +80,7 @@ class WCJ_Order_Numbers extends WCJ_Module {
79
  *
80
  * @version 2.5.2
81
  * @since 2.5.2
 
82
  */
83
  function add_order_number_to_tracking( $order_number ) {
84
  $offset = 0;
@@ -110,17 +112,18 @@ class WCJ_Order_Numbers extends WCJ_Module {
110
  /**
111
  * Display order number.
112
  *
113
- * @version 2.2.7
114
  */
115
- public function display_order_number( $order_number, $order ) {
116
- $order_number_meta = get_post_meta( $order->id, '_wcj_order_number', true );
117
- if ( '' == $order_number_meta || 'no' === get_option( 'wcj_order_number_sequential_enabled' ) ) {
118
- $order_number_meta = $order->id;
 
119
  }
120
- $order_timestamp = strtotime( $order->post->post_date );
121
  $order_number = apply_filters( 'booster_get_option',
122
- sprintf( '%s%d', do_shortcode( get_option( 'wcj_order_number_prefix', '' ) ), $order_number_meta ),
123
- sprintf( '%s%s%0' . get_option( 'wcj_order_number_min_width', 0 ) . 'd%s%s',
124
  do_shortcode( get_option( 'wcj_order_number_prefix', '' ) ),
125
  date_i18n( get_option( 'wcj_order_number_date_prefix', '' ), $order_timestamp ),
126
  $order_number_meta,
@@ -136,7 +139,7 @@ class WCJ_Order_Numbers extends WCJ_Module {
136
  *
137
  * @version 2.4.4
138
  */
139
- public function create_renumerate_orders_tool() {
140
  $result_message = '';
141
  if ( isset( $_POST['renumerate_orders'] ) ) {
142
  $this->renumerate_orders();
@@ -155,21 +158,21 @@ class WCJ_Order_Numbers extends WCJ_Module {
155
  /**
156
  * add_new_order_number.
157
  */
158
- public function add_new_order_number( $order_id ) {
159
  $this->add_order_number_meta( $order_id, false );
160
  }
161
 
162
  /**
163
  * Add/update order_number meta to order.
164
  *
165
- * @version 2.5.5
166
  */
167
- public function add_order_number_meta( $order_id, $do_overwrite ) {
168
  if ( 'shop_order' !== get_post_type( $order_id ) ) {
169
  return;
170
  }
171
  if ( true === $do_overwrite || 0 == get_post_meta( $order_id, '_wcj_order_number', true ) ) {
172
- if ( 'yes' === get_option( 'wcj_order_number_use_mysql_transaction_enabled', 'yes' ) ) {
173
  global $wpdb;
174
  $wpdb->query( 'START TRANSACTION' );
175
  $wp_options_table = $wpdb->prefix . 'options';
@@ -187,8 +190,12 @@ class WCJ_Order_Numbers extends WCJ_Module {
187
  $wpdb->query( 'ROLLBACK' ); // something went wrong, Rollback
188
  }
189
  } else {
190
- $current_order_number = get_option( 'wcj_order_number_counter' );
191
- update_option( 'wcj_order_number_counter', ( $current_order_number + 1 ) );
 
 
 
 
192
  update_post_meta( $order_id, '_wcj_order_number', $current_order_number );
193
  }
194
  }
@@ -198,8 +205,10 @@ class WCJ_Order_Numbers extends WCJ_Module {
198
  * Renumerate orders function.
199
  *
200
  * @version 2.5.0
 
 
201
  */
202
- public function renumerate_orders() {
203
  $offset = 0;
204
  $block_size = 96;
205
  while( true ) {
@@ -224,7 +233,7 @@ class WCJ_Order_Numbers extends WCJ_Module {
224
  /**
225
  * get_settings.
226
  *
227
- * @version 2.6.0
228
  */
229
  function get_settings() {
230
  $settings = array(
@@ -235,11 +244,15 @@ class WCJ_Order_Numbers extends WCJ_Module {
235
  'id' => 'wcj_order_numbers_options',
236
  ),
237
  array(
238
- 'title' => __( 'Make Order Numbers Sequential', 'woocommerce-jetpack' ),
239
- 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
240
  'id' => 'wcj_order_number_sequential_enabled',
241
  'default' => 'yes',
242
- 'type' => 'checkbox',
 
 
 
 
 
243
  ),
244
  array(
245
  'title' => __( 'Next Order Number', 'woocommerce-jetpack' ),
4
  *
5
  * The WooCommerce Jetpack Order Numbers class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
19
  *
20
  * @version 2.6.0
21
  */
22
+ function __construct() {
23
 
24
  $this->id = 'order_numbers';
25
  $this->short_desc = __( 'Order Numbers', 'woocommerce-jetpack' );
54
  * @version 2.6.0
55
  * @since 2.6.0
56
  * @see https://github.com/pablo-pacheco/wc-booster-search-order-by-custom-number-fix
57
+ * @todo `_wcj_order_number` is used for `sequential` and `hash` only
58
  */
59
  function search_by_custom_number( $query ) {
60
  if (
80
  *
81
  * @version 2.5.2
82
  * @since 2.5.2
83
+ * @todo optimize WP_Query to return only `ids` for `fields`
84
  */
85
  function add_order_number_to_tracking( $order_number ) {
86
  $offset = 0;
112
  /**
113
  * Display order number.
114
  *
115
+ * @version 2.7.0
116
  */
117
+ function display_order_number( $order_number, $order ) {
118
+ $order_id = wcj_get_order_id( $order );
119
+ $order_number_meta = get_post_meta( $order_id , '_wcj_order_number', true );
120
+ if ( '' == $order_number_meta || 'no' === get_option( 'wcj_order_number_sequential_enabled', 'yes' ) ) {
121
+ $order_number_meta = $order_id;
122
  }
123
+ $order_timestamp = strtotime( ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->post->post_date : $order->get_date_created() ) );
124
  $order_number = apply_filters( 'booster_get_option',
125
+ sprintf( '%s%s', do_shortcode( get_option( 'wcj_order_number_prefix', '' ) ), $order_number_meta ),
126
+ sprintf( '%s%s%0' . get_option( 'wcj_order_number_min_width', 0 ) . 's%s%s',
127
  do_shortcode( get_option( 'wcj_order_number_prefix', '' ) ),
128
  date_i18n( get_option( 'wcj_order_number_date_prefix', '' ), $order_timestamp ),
129
  $order_number_meta,
139
  *
140
  * @version 2.4.4
141
  */
142
+ function create_renumerate_orders_tool() {
143
  $result_message = '';
144
  if ( isset( $_POST['renumerate_orders'] ) ) {
145
  $this->renumerate_orders();
158
  /**
159
  * add_new_order_number.
160
  */
161
+ function add_new_order_number( $order_id ) {
162
  $this->add_order_number_meta( $order_id, false );
163
  }
164
 
165
  /**
166
  * Add/update order_number meta to order.
167
  *
168
+ * @version 2.7.0
169
  */
170
+ function add_order_number_meta( $order_id, $do_overwrite ) {
171
  if ( 'shop_order' !== get_post_type( $order_id ) ) {
172
  return;
173
  }
174
  if ( true === $do_overwrite || 0 == get_post_meta( $order_id, '_wcj_order_number', true ) ) {
175
+ if ( 'yes' === get_option( 'wcj_order_number_sequential_enabled', 'yes' ) && 'yes' === get_option( 'wcj_order_number_use_mysql_transaction_enabled', 'yes' ) ) {
176
  global $wpdb;
177
  $wpdb->query( 'START TRANSACTION' );
178
  $wp_options_table = $wpdb->prefix . 'options';
190
  $wpdb->query( 'ROLLBACK' ); // something went wrong, Rollback
191
  }
192
  } else {
193
+ if ( 'hash_crc32' === get_option( 'wcj_order_number_sequential_enabled', 'yes' ) ) {
194
+ $current_order_number = sprintf( "%u", crc32( $order_id ) );
195
+ } else { // sequential
196
+ $current_order_number = get_option( 'wcj_order_number_counter', 1 );
197
+ update_option( 'wcj_order_number_counter', ( $current_order_number + 1 ) );
198
+ }
199
  update_post_meta( $order_id, '_wcj_order_number', $current_order_number );
200
  }
201
  }
205
  * Renumerate orders function.
206
  *
207
  * @version 2.5.0
208
+ * @todo renumerate in date range only
209
+ * @todo optimize WP_Query to return only `ids` for `fields`
210
  */
211
+ function renumerate_orders() {
212
  $offset = 0;
213
  $block_size = 96;
214
  while( true ) {
233
  /**
234
  * get_settings.
235
  *
236
+ * @version 2.7.0
237
  */
238
  function get_settings() {
239
  $settings = array(
244
  'id' => 'wcj_order_numbers_options',
245
  ),
246
  array(
247
+ 'title' => __( 'Number Generation', 'woocommerce-jetpack' ),
 
248
  'id' => 'wcj_order_number_sequential_enabled',
249
  'default' => 'yes',
250
+ 'type' => 'select',
251
+ 'options' => array(
252
+ 'yes' => __( 'Sequential', 'woocommerce-jetpack' ),
253
+ 'no' => __( 'Order ID', 'woocommerce-jetpack' ),
254
+ 'hash_crc32' => __( 'Pseudorandom - Hash (max 10 digits)', 'woocommerce-jetpack' ),
255
+ ),
256
  ),
257
  array(
258
  'title' => __( 'Next Order Number', 'woocommerce-jetpack' ),
includes/class-wcj-orders.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Orders class.
6
  *
7
- * @version 2.6.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -17,7 +17,7 @@ class WCJ_Orders extends WCJ_Module {
17
  /**
18
  * Constructor.
19
  *
20
- * @version 2.6.0
21
  */
22
  public function __construct() {
23
 
@@ -32,8 +32,9 @@ class WCJ_Orders extends WCJ_Module {
32
  if ( $this->is_enabled() ) {
33
 
34
  // Order auto complete
35
- if ( 'yes' === get_option( 'wcj_order_auto_complete_enabled' ) ) {
36
- add_action( 'woocommerce_thankyou', array( $this, 'auto_complete_order' ) );
 
37
  }
38
 
39
  // Custom columns
@@ -51,7 +52,8 @@ class WCJ_Orders extends WCJ_Module {
51
  add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
52
  add_action( 'save_post_shop_order', array( $this, 'save_meta_box' ), PHP_INT_MAX, 2 );
53
  if ( 'filter' === get_option( 'wcj_order_admin_currency_method', 'filter' ) ) {
54
- add_filter( 'woocommerce_get_order_currency', array( $this, 'change_order_currency' ), PHP_INT_MAX, 2 );
 
55
  }
56
  }
57
 
@@ -210,17 +212,17 @@ class WCJ_Orders extends WCJ_Module {
210
  /**
211
  * change_order_currency.
212
  *
213
- * @version 2.5.6
214
  * @since 2.5.6
215
  */
216
  function change_order_currency( $order_currency, $_order ) {
217
- return ( '' != ( $wcj_order_currency = get_post_meta( $_order->id, '_' . 'wcj_order_currency', true ) ) ) ? $wcj_order_currency : $order_currency;
218
  }
219
 
220
  /**
221
  * get_meta_box_options.
222
  *
223
- * @version 2.5.6
224
  * @since 2.5.6
225
  */
226
  function get_meta_box_options() {
@@ -229,7 +231,7 @@ class WCJ_Orders extends WCJ_Module {
229
  $options = array(
230
  array(
231
  'name' => ( 'filter' === get_option( 'wcj_order_admin_currency_method', 'filter' ) ? 'wcj_order_currency' : 'order_currency' ),
232
- 'default' => $_order->get_order_currency(),
233
  'type' => 'select',
234
  'options' => wcj_get_currencies_names_and_symbols( 'names' ),
235
  'title' => __( 'Order Currency', 'woocommerce-jetpack' ),
@@ -314,14 +316,14 @@ class WCJ_Orders extends WCJ_Module {
314
  /**
315
  * Output custom columns for orders
316
  *
317
- * @version 2.6.0
318
  * @param string $column
319
  */
320
- public function render_order_columns( $column ) {
321
  if ( 'country' === $column && 'yes' === get_option( 'wcj_orders_list_custom_columns_country', 'no' ) ) {
322
  $order = wc_get_order( get_the_ID() );
323
  // $country_code = wcj_get_customer_country( $order->customer_user );
324
- $country_code = $order->billing_country;
325
  echo ( 2 == strlen( $country_code ) )
326
  ? wcj_get_country_flag_by_code( $country_code ) . ' ' . wcj_get_country_name_by_code( $country_code )
327
  : wcj_get_country_name_by_code( $country_code );
@@ -338,36 +340,17 @@ class WCJ_Orders extends WCJ_Module {
338
 
339
  /**
340
  * Auto Complete all WooCommerce orders.
 
 
341
  */
342
- public function auto_complete_order( $order_id ) {
343
- global $woocommerce;
344
- if ( !$order_id ) {
345
  return;
346
  }
347
- $order = new WC_Order( $order_id );
348
  $order->update_status( 'completed' );
349
  }
350
 
351
- /**
352
- * add_settings_hook.
353
- *
354
- * @version 2.5.3
355
- * @since 2.5.3
356
- */
357
- function add_settings_hook() {
358
- add_filter( 'wcj_orders_settings', array( $this, 'add_settings' ) );
359
- }
360
-
361
- /**
362
- * get_settings.
363
- *
364
- * @version 2.5.3
365
- */
366
- function get_settings() {
367
- $settings = apply_filters( 'wcj_orders_settings', array() );
368
- return $this->add_standard_settings( $settings );
369
- }
370
-
371
  /**
372
  * add_settings.
373
  *
4
  *
5
  * The WooCommerce Jetpack Orders class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
17
  /**
18
  * Constructor.
19
  *
20
+ * @version 2.7.0
21
  */
22
  public function __construct() {
23
 
32
  if ( $this->is_enabled() ) {
33
 
34
  // Order auto complete
35
+ if ( 'yes' === get_option( 'wcj_order_auto_complete_enabled', 'no' ) ) {
36
+ add_action( 'woocommerce_thankyou', array( $this, 'auto_complete_order' ), PHP_INT_MAX );
37
+ add_action( 'woocommerce_payment_complete', array( $this, 'auto_complete_order' ), PHP_INT_MAX );
38
  }
39
 
40
  // Custom columns
52
  add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
53
  add_action( 'save_post_shop_order', array( $this, 'save_meta_box' ), PHP_INT_MAX, 2 );
54
  if ( 'filter' === get_option( 'wcj_order_admin_currency_method', 'filter' ) ) {
55
+ $woocommerce_get_order_currency_filter = ( WCJ_IS_WC_VERSION_BELOW_3 ? 'woocommerce_get_order_currency' : 'woocommerce_order_get_currency' );
56
+ add_filter( $woocommerce_get_order_currency_filter, array( $this, 'change_order_currency' ), PHP_INT_MAX, 2 );
57
  }
58
  }
59
 
212
  /**
213
  * change_order_currency.
214
  *
215
+ * @version 2.7.0
216
  * @since 2.5.6
217
  */
218
  function change_order_currency( $order_currency, $_order ) {
219
+ return ( '' != ( $wcj_order_currency = get_post_meta( wcj_get_order_id( $_order ), '_' . 'wcj_order_currency', true ) ) ) ? $wcj_order_currency : $order_currency;
220
  }
221
 
222
  /**
223
  * get_meta_box_options.
224
  *
225
+ * @version 2.7.0
226
  * @since 2.5.6
227
  */
228
  function get_meta_box_options() {
231
  $options = array(
232
  array(
233
  'name' => ( 'filter' === get_option( 'wcj_order_admin_currency_method', 'filter' ) ? 'wcj_order_currency' : 'order_currency' ),
234
+ 'default' => wcj_get_order_currency( $_order ),
235
  'type' => 'select',
236
  'options' => wcj_get_currencies_names_and_symbols( 'names' ),
237
  'title' => __( 'Order Currency', 'woocommerce-jetpack' ),
316
  /**
317
  * Output custom columns for orders
318
  *
319
+ * @version 2.7.0
320
  * @param string $column
321
  */
322
+ function render_order_columns( $column ) {
323
  if ( 'country' === $column && 'yes' === get_option( 'wcj_orders_list_custom_columns_country', 'no' ) ) {
324
  $order = wc_get_order( get_the_ID() );
325
  // $country_code = wcj_get_customer_country( $order->customer_user );
326
+ $country_code = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->billing_country : $order->get_billing_country() );
327
  echo ( 2 == strlen( $country_code ) )
328
  ? wcj_get_country_flag_by_code( $country_code ) . ' ' . wcj_get_country_name_by_code( $country_code )
329
  : wcj_get_country_name_by_code( $country_code );
340
 
341
  /**
342
  * Auto Complete all WooCommerce orders.
343
+ *
344
+ * @version 2.7.0
345
  */
346
+ function auto_complete_order( $order_id ) {
347
+ if ( ! $order_id ) {
 
348
  return;
349
  }
350
+ $order = wc_get_order( $order_id );
351
  $order->update_status( 'completed' );
352
  }
353
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
354
  /**
355
  * add_settings.
356
  *
includes/class-wcj-payment-gateways-by-country.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Payment Gateways by Country class.
6
  *
7
- * @version 2.5.6
8
  * @since 2.4.1
9
  * @author Algoritmika Ltd.
10
  */
@@ -18,7 +18,7 @@ class WCJ_Payment_Gateways_By_Country extends WCJ_Module {
18
  /**
19
  * Constructor.
20
  *
21
- * @version 2.5.0
22
  */
23
  function __construct() {
24
 
@@ -28,7 +28,7 @@ class WCJ_Payment_Gateways_By_Country extends WCJ_Module {
28
  $this->link = 'http://booster.io/features/woocommerce-payment-gateways-by-country-or-state/';
29
  parent::__construct();
30
 
31
- add_filter( 'init', array( $this, 'add_hooks' ) );
32
 
33
  if ( $this->is_enabled() ) {
34
  add_filter( 'woocommerce_available_payment_gateways', array( $this, 'available_payment_gateways' ), PHP_INT_MAX, 1 );
@@ -38,11 +38,11 @@ class WCJ_Payment_Gateways_By_Country extends WCJ_Module {
38
  /**
39
  * available_payment_gateways.
40
  *
41
- * @version 2.5.6
42
  */
43
  function available_payment_gateways( $_available_gateways ) {
44
  if ( isset( WC()->customer ) ) {
45
- $customer_country = WC()->customer->get_country();
46
  foreach ( $_available_gateways as $key => $gateway ) {
47
  $include_countries = get_option( 'wcj_gateways_countries_include_' . $key, '' );
48
  if ( ! empty( $include_countries ) && ! in_array( $customer_country, $include_countries ) ) {
@@ -54,7 +54,7 @@ class WCJ_Payment_Gateways_By_Country extends WCJ_Module {
54
  unset( $_available_gateways[ $key ] );
55
  continue;
56
  }
57
- $customer_state = WC()->customer->get_state();
58
  $include_states = get_option( 'wcj_gateways_states_include_' . $key, '' );
59
  if ( ! empty( $include_states ) && ! in_array( $customer_state, $include_states ) ) {
60
  unset( $_available_gateways[ $key ] );
@@ -71,28 +71,22 @@ class WCJ_Payment_Gateways_By_Country extends WCJ_Module {
71
  }
72
 
73
  /**
74
- * add_hooks.
75
- */
76
- function add_hooks() {
77
- add_filter( 'wcj_payment_gateways_by_country_settings', array( $this, 'add_countries_settings' ) );
78
- }
79
-
80
- /**
81
- * add_countries_settings.
82
  *
83
- * @version 2.4.4
84
  */
85
- function add_countries_settings( $settings ) {
86
- $settings = array();
87
- $settings[] = array(
88
- 'title' => __( 'Payment Gateways', 'woocommerce-jetpack' ),
89
- 'type' => 'title',
90
- 'desc' => __( 'Leave empty to disable.', 'woocommerce-jetpack' ),
91
- 'id' => 'wcj_payment_gateways_by_country_gateways_options',
 
92
  );
93
  $countries = wcj_get_countries();
94
- $states = wcj_get_states();
95
- $gateways = WC()->payment_gateways->payment_gateways();
96
  foreach ( $gateways as $key => $gateway ) {
97
  $default_gateways = array( 'bacs' );
98
  if ( ! empty( $default_gateways ) && ! in_array( $key, $default_gateways ) ) {
@@ -105,70 +99,66 @@ class WCJ_Payment_Gateways_By_Country extends WCJ_Module {
105
  $custom_attributes = array();
106
  $desc_tip = '';
107
  }
108
- $settings[] = array(
109
- 'title' => $gateway->title,
110
- 'desc_tip' => $desc_tip,
111
- 'desc' => __( 'Include Countries', 'woocommerce-jetpack' ),
112
- 'id' => 'wcj_gateways_countries_include_' . $key,
113
- 'default' => '',
114
- 'type' => 'multiselect',
115
- 'class' => 'chosen_select',
116
- 'css' => 'width: 450px;',
117
- 'options' => $countries,
118
- 'custom_attributes' => $custom_attributes,
119
- );
120
- $settings[] = array(
121
- 'title' => '',
122
- 'desc_tip' => $desc_tip,
123
- 'desc' => __( 'Exclude Countries', 'woocommerce-jetpack' ),
124
- 'id' => 'wcj_gateways_countries_exclude_' . $key,
125
- 'default' => '',
126
- 'type' => 'multiselect',
127
- 'class' => 'chosen_select',
128
- 'css' => 'width: 450px;',
129
- 'options' => $countries,
130
- 'custom_attributes' => $custom_attributes,
131
- );
132
- $settings[] = array(
133
- 'title' => '',
134
- 'desc_tip' => $desc_tip,
135
- 'desc' => __( 'Include States (Base Country)', 'woocommerce-jetpack' ),
136
- 'id' => 'wcj_gateways_states_include_' . $key,
137
- 'default' => '',
138
- 'type' => 'multiselect',
139
- 'class' => 'chosen_select',
140
- 'css' => 'width: 450px;',
141
- 'options' => $states,
142
- 'custom_attributes' => $custom_attributes,
143
- );
144
- $settings[] = array(
145
- 'title' => '',
146
- 'desc_tip' => $desc_tip,
147
- 'desc' => __( 'Exclude States (Base Country)', 'woocommerce-jetpack' ),
148
- 'id' => 'wcj_gateways_states_exclude_' . $key,
149
- 'default' => '',
150
- 'type' => 'multiselect',
151
- 'class' => 'chosen_select',
152
- 'css' => 'width: 450px;',
153
- 'options' => $states,
154
- 'custom_attributes' => $custom_attributes,
155
- );
 
 
156
  }
157
- $settings[] = array(
158
- 'type' => 'sectionend',
159
- 'id' => 'wcj_payment_gateways_by_country_gateways_options',
160
- );
 
 
161
  return $settings;
162
  }
163
 
164
- /**
165
- * get_settings.
166
- */
167
- function get_settings() {
168
- $settings = array();
169
- $settings = apply_filters( 'wcj_payment_gateways_by_country_settings', $settings );
170
- return $this->add_standard_settings( $settings );
171
- }
172
  }
173
 
174
  endif;
4
  *
5
  * The WooCommerce Jetpack Payment Gateways by Country class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.4.1
9
  * @author Algoritmika Ltd.
10
  */
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 2.7.0
22
  */
23
  function __construct() {
24
 
28
  $this->link = 'http://booster.io/features/woocommerce-payment-gateways-by-country-or-state/';
29
  parent::__construct();
30
 
31
+ add_filter( 'init', array( $this, 'add_settings_hook' ) );
32
 
33
  if ( $this->is_enabled() ) {
34
  add_filter( 'woocommerce_available_payment_gateways', array( $this, 'available_payment_gateways' ), PHP_INT_MAX, 1 );
38
  /**
39
  * available_payment_gateways.
40
  *
41
+ * @version 2.7.0
42
  */
43
  function available_payment_gateways( $_available_gateways ) {
44
  if ( isset( WC()->customer ) ) {
45
+ $customer_country = ( WCJ_IS_WC_VERSION_BELOW_3 ) ? WC()->customer->get_country() : WC()->customer->get_billing_country();
46
  foreach ( $_available_gateways as $key => $gateway ) {
47
  $include_countries = get_option( 'wcj_gateways_countries_include_' . $key, '' );
48
  if ( ! empty( $include_countries ) && ! in_array( $customer_country, $include_countries ) ) {
54
  unset( $_available_gateways[ $key ] );
55
  continue;
56
  }
57
+ $customer_state = ( WCJ_IS_WC_VERSION_BELOW_3 ) ? WC()->customer->get_state() : WC()->customer->get_billing_state();
58
  $include_states = get_option( 'wcj_gateways_states_include_' . $key, '' );
59
  if ( ! empty( $include_states ) && ! in_array( $customer_state, $include_states ) ) {
60
  unset( $_available_gateways[ $key ] );
71
  }
72
 
73
  /**
74
+ * add_settings.
 
 
 
 
 
 
 
75
  *
76
+ * @version 2.7.0
77
  */
78
+ function add_settings() {
79
+ $settings = array(
80
+ array(
81
+ 'title' => __( 'Payment Gateways', 'woocommerce-jetpack' ),
82
+ 'type' => 'title',
83
+ 'desc' => __( 'Leave empty to disable.', 'woocommerce-jetpack' ),
84
+ 'id' => 'wcj_payment_gateways_by_country_gateways_options',
85
+ ),
86
  );
87
  $countries = wcj_get_countries();
88
+ $states = wcj_get_states();
89
+ $gateways = WC()->payment_gateways->payment_gateways();
90
  foreach ( $gateways as $key => $gateway ) {
91
  $default_gateways = array( 'bacs' );
92
  if ( ! empty( $default_gateways ) && ! in_array( $key, $default_gateways ) ) {
99
  $custom_attributes = array();
100
  $desc_tip = '';
101
  }
102
+ $settings = array_merge( $settings, array(
103
+ array(
104
+ 'title' => $gateway->title,
105
+ 'desc_tip' => $desc_tip,
106
+ 'desc' => __( 'Include Countries', 'woocommerce-jetpack' ),
107
+ 'id' => 'wcj_gateways_countries_include_' . $key,
108
+ 'default' => '',
109
+ 'type' => 'multiselect',
110
+ 'class' => 'chosen_select',
111
+ 'css' => 'width: 450px;',
112
+ 'options' => $countries,
113
+ 'custom_attributes' => $custom_attributes,
114
+ ),
115
+ array(
116
+ 'title' => '',
117
+ 'desc_tip' => $desc_tip,
118
+ 'desc' => __( 'Exclude Countries', 'woocommerce-jetpack' ),
119
+ 'id' => 'wcj_gateways_countries_exclude_' . $key,
120
+ 'default' => '',
121
+ 'type' => 'multiselect',
122
+ 'class' => 'chosen_select',
123
+ 'css' => 'width: 450px;',
124
+ 'options' => $countries,
125
+ 'custom_attributes' => $custom_attributes,
126
+ ),
127
+ array(
128
+ 'title' => '',
129
+ 'desc_tip' => $desc_tip,
130
+ 'desc' => __( 'Include States (Base Country)', 'woocommerce-jetpack' ),
131
+ 'id' => 'wcj_gateways_states_include_' . $key,
132
+ 'default' => '',
133
+ 'type' => 'multiselect',
134
+ 'class' => 'chosen_select',
135
+ 'css' => 'width: 450px;',
136
+ 'options' => $states,
137
+ 'custom_attributes' => $custom_attributes,
138
+ ),
139
+ array(
140
+ 'title' => '',
141
+ 'desc_tip' => $desc_tip,
142
+ 'desc' => __( 'Exclude States (Base Country)', 'woocommerce-jetpack' ),
143
+ 'id' => 'wcj_gateways_states_exclude_' . $key,
144
+ 'default' => '',
145
+ 'type' => 'multiselect',
146
+ 'class' => 'chosen_select',
147
+ 'css' => 'width: 450px;',
148
+ 'options' => $states,
149
+ 'custom_attributes' => $custom_attributes,
150
+ ),
151
+ ) );
152
  }
153
+ $settings = array_merge( $settings, array(
154
+ array(
155
+ 'type' => 'sectionend',
156
+ 'id' => 'wcj_payment_gateways_by_country_gateways_options',
157
+ ),
158
+ ) );
159
  return $settings;
160
  }
161
 
 
 
 
 
 
 
 
 
162
  }
163
 
164
  endif;
includes/class-wcj-payment-gateways-by-shipping.php ADDED
@@ -0,0 +1,206 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WooCommerce Jetpack Payment Gateways by Shipping
4
+ *
5
+ * The WooCommerce Jetpack Payment Gateways by Shipping class.
6
+ *
7
+ * @version 2.7.0
8
+ * @since 2.7.0
9
+ * @author Algoritmika Ltd.
10
+ */
11
+
12
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
13
+
14
+ if ( ! class_exists( 'WCJ_Payment_Gateways_By_Shipping' ) ) :
15
+
16
+ class WCJ_Payment_Gateways_By_Shipping extends WCJ_Module {
17
+
18
+ /**
19
+ * Constructor.
20
+ *
21
+ * @version 2.7.0
22
+ * @since 2.7.0
23
+ */
24
+ function __construct() {
25
+
26
+ $this->id = 'payment_gateways_by_shipping';
27
+ $this->short_desc = __( 'Gateways by Shipping', 'woocommerce-jetpack' );
28
+ $this->desc = __( 'Set "enable for shipping methods" for WooCommerce payment gateways.', 'woocommerce-jetpack' );
29
+ $this->link = 'http://booster.io/features/woocommerce-payment-gateways-by-shipping/';
30
+ parent::__construct();
31
+
32
+ add_filter( 'init', array( $this, 'add_settings_hook' ) );
33
+
34
+ if ( $this->is_enabled() ) {
35
+ add_filter( 'woocommerce_available_payment_gateways', array( $this, 'available_payment_gateways' ), PHP_INT_MAX, 1 );
36
+ }
37
+ }
38
+
39
+ /**
40
+ * check_if_enabled_for_methods.
41
+ *
42
+ * @version 2.7.0
43
+ * @since 2.7.0
44
+ * @see `is_available()` function in WooCommerce `WC_Gateway_COD` class
45
+ * @todo virtual orders (`enable_for_virtual`)
46
+ */
47
+ function check_if_enabled_for_methods( $gateway_key, $enable_for_methods ) {
48
+
49
+ $order = null;
50
+ $needs_shipping = false;
51
+
52
+ // Test if shipping is needed first
53
+ if ( WC()->cart && WC()->cart->needs_shipping() ) {
54
+ $needs_shipping = true;
55
+ } elseif ( is_page( wc_get_page_id( 'checkout' ) ) && 0 < get_query_var( 'order-pay' ) ) {
56
+ $order_id = absint( get_query_var( 'order-pay' ) );
57
+ $order = wc_get_order( $order_id );
58
+
59
+ // Test if order needs shipping.
60
+ if ( 0 < sizeof( $order->get_items() ) ) {
61
+ foreach ( $order->get_items() as $item ) {
62
+ $_product = $order->get_product_from_item( $item );
63
+ if ( $_product && $_product->needs_shipping() ) {
64
+ $needs_shipping = true;
65
+ break;
66
+ }
67
+ }
68
+ }
69
+ }
70
+
71
+ $needs_shipping = apply_filters( 'woocommerce_cart_needs_shipping', $needs_shipping );
72
+
73
+ // Virtual order, with virtual disabled
74
+ /*
75
+ if ( ! $this->enable_for_virtual && ! $needs_shipping ) {
76
+ return false;
77
+ }
78
+ */
79
+
80
+ // Check methods
81
+ if ( ! empty( $enable_for_methods ) && $needs_shipping ) {
82
+
83
+ // Only apply if all packages are being shipped via chosen methods, or order is virtual
84
+ $chosen_shipping_methods_session = WC()->session->get( 'chosen_shipping_methods' );
85
+
86
+ if ( isset( $chosen_shipping_methods_session ) ) {
87
+ $chosen_shipping_methods = array_unique( $chosen_shipping_methods_session );
88
+ } else {
89
+ $chosen_shipping_methods = array();
90
+ }
91
+
92
+ $check_method = false;
93
+
94
+ if ( is_object( $order ) ) {
95
+ if ( $order->shipping_method ) {
96
+ $check_method = $order->shipping_method;
97
+ }
98
+
99
+ } elseif ( empty( $chosen_shipping_methods ) || sizeof( $chosen_shipping_methods ) > 1 ) {
100
+ $check_method = false;
101
+ } elseif ( sizeof( $chosen_shipping_methods ) == 1 ) {
102
+ $check_method = $chosen_shipping_methods[0];
103
+ }
104
+
105
+ if ( ! $check_method ) {
106
+ return false;
107
+ }
108
+
109
+ $found = false;
110
+
111
+ foreach ( $enable_for_methods as $method_id ) {
112
+ if ( strpos( $check_method, $method_id ) === 0 ) {
113
+ $found = true;
114
+ break;
115
+ }
116
+ }
117
+
118
+ if ( ! $found ) {
119
+ return false;
120
+ }
121
+ }
122
+
123
+ return true;
124
+ }
125
+
126
+ /**
127
+ * available_payment_gateways.
128
+ *
129
+ * @version 2.7.0
130
+ * @since 2.7.0
131
+ */
132
+ function available_payment_gateways( $_available_gateways ) {
133
+ foreach ( $_available_gateways as $key => $gateway ) {
134
+ $enable_for_methods = get_option( 'wcj_gateways_by_shipping_enable_' . $key, '' );
135
+ if ( ! empty( $enable_for_methods ) && ! $this->check_if_enabled_for_methods( $key, $enable_for_methods ) ) {
136
+ unset( $_available_gateways[ $key ] );
137
+ continue;
138
+ }
139
+ }
140
+ return $_available_gateways;
141
+ }
142
+
143
+ /**
144
+ * add_settings.
145
+ *
146
+ * @version 2.7.0
147
+ * @version 2.7.0
148
+ * @todo (maybe) remove COD, Custom Booster Payment Gateways (and maybe other payment gateways) that already have `enable_for_methods` option
149
+ */
150
+ function add_settings( $settings ) {
151
+ $shipping_methods = array();
152
+ if ( is_admin() ) {
153
+ foreach ( WC()->shipping()->load_shipping_methods() as $method ) {
154
+ $shipping_methods[ $method->id ] = $method->get_method_title();
155
+ }
156
+ }
157
+ $settings = array(
158
+ array(
159
+ 'title' => __( 'Payment Gateways', 'woocommerce-jetpack' ),
160
+ 'type' => 'title',
161
+ 'desc' => __( 'If payment gateway is only available for certain methods, set it up here. Leave blank to enable for all methods.', 'woocommerce-jetpack' ),
162
+ 'id' => 'wcj_payment_gateways_by_shipping_options',
163
+ ),
164
+ );
165
+ $gateways = WC()->payment_gateways->payment_gateways();
166
+ foreach ( $gateways as $key => $gateway ) {
167
+ $default_gateways = array( 'bacs', 'cod' );
168
+ if ( ! empty( $default_gateways ) && ! in_array( $key, $default_gateways ) ) {
169
+ $custom_attributes = apply_filters( 'booster_get_message', '', 'disabled' );
170
+ if ( '' == $custom_attributes ) {
171
+ $custom_attributes = array();
172
+ }
173
+ $desc_tip = apply_filters( 'booster_get_message', '', 'desc_no_link' );
174
+ } else {
175
+ $custom_attributes = array();
176
+ $desc_tip = '';
177
+ }
178
+ $settings = array_merge( $settings, array(
179
+ array(
180
+ 'title' => $gateway->title,
181
+ 'desc_tip' => $desc_tip,
182
+ 'desc' => __( 'Enable for shipping methods', 'woocommerce' ),
183
+ 'id' => 'wcj_gateways_by_shipping_enable_' . $key,
184
+ 'default' => '',
185
+ 'type' => 'multiselect',
186
+ 'class' => 'chosen_select',
187
+ 'css' => 'width: 450px;',
188
+ 'options' => $shipping_methods,
189
+ 'custom_attributes' => array_merge( array( 'data-placeholder' => __( 'Select shipping methods', 'woocommerce' ) ), $custom_attributes ),
190
+ ),
191
+ ) );
192
+ }
193
+ $settings = array_merge( $settings, array(
194
+ array(
195
+ 'type' => 'sectionend',
196
+ 'id' => 'wcj_payment_gateways_by_shipping_options',
197
+ ),
198
+ ) );
199
+ return $settings;
200
+ }
201
+
202
+ }
203
+
204
+ endif;
205
+
206
+ return new WCJ_Payment_Gateways_By_Shipping();
includes/class-wcj-payment-gateways-by-user-role.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Payment Gateways by User Role class.
6
  *
7
- * @version 2.5.3
8
  * @since 2.5.3
9
  * @author Algoritmika Ltd.
10
  */
@@ -59,31 +59,22 @@ class WCJ_Payment_Gateways_By_User_Role extends WCJ_Module {
59
  return $_available_gateways;
60
  }
61
 
62
- /**
63
- * add_settings_hook.
64
- *
65
- * @version 2.5.3
66
- * @since 2.5.3
67
- */
68
- function add_settings_hook() {
69
- add_filter( 'wcj_payment_gateways_by_user_role_settings', array( $this, 'add_settings' ) );
70
- }
71
-
72
  /**
73
  * add_settings.
74
  *
75
- * @version 2.5.3
76
  * @since 2.5.3
77
  */
78
  function add_settings( $settings ) {
79
- $settings = array();
80
- $settings[] = array(
81
- 'title' => __( 'Payment Gateways', 'woocommerce-jetpack' ),
82
- 'type' => 'title',
83
- 'desc' => __( 'Leave empty to disable.', 'woocommerce-jetpack' ) . ' ' .
84
- sprintf( __( 'Custom roles can be added via "Add/Manage Custom Roles" tool in Booster\'s <a href="%s">General</a> module', 'woocommerce-jetpack' ),
85
- admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=emails_and_misc&section=general' ) ),
86
- 'id' => 'wcj_payment_gateways_by_user_role_gateways_options',
 
87
  );
88
  $user_roles = wcj_get_user_roles_options();
89
  $gateways = WC()->payment_gateways->payment_gateways();
@@ -99,49 +90,42 @@ class WCJ_Payment_Gateways_By_User_Role extends WCJ_Module {
99
  $custom_attributes = array();
100
  $desc_tip = '';
101
  }
102
- $settings[] = array(
103
- 'title' => $gateway->title,
104
- 'desc_tip' => $desc_tip,
105
- 'desc' => __( 'Include User Roles', 'woocommerce-jetpack' ),
106
- 'id' => 'wcj_gateways_user_roles_include_' . $key,
107
- 'default' => '',
108
- 'type' => 'multiselect',
109
- 'class' => 'chosen_select',
110
- 'css' => 'width: 450px;',
111
- 'options' => $user_roles,
112
- 'custom_attributes' => $custom_attributes,
113
- );
114
- $settings[] = array(
115
- 'title' => '',
116
- 'desc_tip' => $desc_tip,
117
- 'desc' => __( 'Exclude User Roles', 'woocommerce-jetpack' ),
118
- 'id' => 'wcj_gateways_user_roles_exclude_' . $key,
119
- 'default' => '',
120
- 'type' => 'multiselect',
121
- 'class' => 'chosen_select',
122
- 'css' => 'width: 450px;',
123
- 'options' => $user_roles,
124
- 'custom_attributes' => $custom_attributes,
125
- );
 
 
126
  }
127
- $settings[] = array(
128
- 'type' => 'sectionend',
129
- 'id' => 'wcj_payment_gateways_by_user_role_gateways_options',
130
- );
 
 
131
  return $settings;
132
  }
133
 
134
- /**
135
- * get_settings.
136
- *
137
- * @version 2.5.3
138
- * @since 2.5.3
139
- */
140
- function get_settings() {
141
- $settings = array();
142
- $settings = apply_filters( 'wcj_payment_gateways_by_user_role_settings', $settings );
143
- return $this->add_standard_settings( $settings );
144
- }
145
  }
146
 
147
  endif;
4
  *
5
  * The WooCommerce Jetpack Payment Gateways by User Role class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.5.3
9
  * @author Algoritmika Ltd.
10
  */
59
  return $_available_gateways;
60
  }
61
 
 
 
 
 
 
 
 
 
 
 
62
  /**
63
  * add_settings.
64
  *
65
+ * @version 2.7.0
66
  * @since 2.5.3
67
  */
68
  function add_settings( $settings ) {
69
+ $settings = array(
70
+ array(
71
+ 'title' => __( 'Payment Gateways', 'woocommerce-jetpack' ),
72
+ 'type' => 'title',
73
+ 'desc' => __( 'Leave empty to disable.', 'woocommerce-jetpack' ) . ' ' .
74
+ sprintf( __( 'Custom roles can be added via "Add/Manage Custom Roles" tool in Booster\'s <a href="%s">General</a> module', 'woocommerce-jetpack' ),
75
+ admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=emails_and_misc&section=general' ) ),
76
+ 'id' => 'wcj_payment_gateways_by_user_role_gateways_options',
77
+ ),
78
  );
79
  $user_roles = wcj_get_user_roles_options();
80
  $gateways = WC()->payment_gateways->payment_gateways();
90
  $custom_attributes = array();
91
  $desc_tip = '';
92
  }
93
+ $settings = array_merge( $settings, array(
94
+ array(
95
+ 'title' => $gateway->title,
96
+ 'desc_tip' => $desc_tip,
97
+ 'desc' => __( 'Include User Roles', 'woocommerce-jetpack' ),
98
+ 'id' => 'wcj_gateways_user_roles_include_' . $key,
99
+ 'default' => '',
100
+ 'type' => 'multiselect',
101
+ 'class' => 'chosen_select',
102
+ 'css' => 'width: 450px;',
103
+ 'options' => $user_roles,
104
+ 'custom_attributes' => $custom_attributes,
105
+ ),
106
+ $settings[] = array(
107
+ 'title' => '',
108
+ 'desc_tip' => $desc_tip,
109
+ 'desc' => __( 'Exclude User Roles', 'woocommerce-jetpack' ),
110
+ 'id' => 'wcj_gateways_user_roles_exclude_' . $key,
111
+ 'default' => '',
112
+ 'type' => 'multiselect',
113
+ 'class' => 'chosen_select',
114
+ 'css' => 'width: 450px;',
115
+ 'options' => $user_roles,
116
+ 'custom_attributes' => $custom_attributes,
117
+ ),
118
+ ) );
119
  }
120
+ $settings = array_merge( $settings, array(
121
+ array(
122
+ 'type' => 'sectionend',
123
+ 'id' => 'wcj_payment_gateways_by_user_role_gateways_options',
124
+ ),
125
+ ) );
126
  return $settings;
127
  }
128
 
 
 
 
 
 
 
 
 
 
 
 
129
  }
130
 
131
  endif;
includes/class-wcj-payment-gateways-currency.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Payment Gateways Currency class.
6
  *
7
- * @version 2.6.0
8
  * @since 2.3.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -42,7 +42,7 @@ class WCJ_Payment_Gateways_Currency extends WCJ_Module {
42
  /**
43
  * add_hooks.
44
  *
45
- * @version 2.4.8
46
  * @since 2.3.2
47
  */
48
  function add_hooks() {
@@ -51,7 +51,8 @@ class WCJ_Payment_Gateways_Currency extends WCJ_Module {
51
 
52
  add_filter( 'woocommerce_paypal_supported_currencies', array( $this, 'extend_paypal_supported_currencies' ), PHP_INT_MAX, 1 );
53
 
54
- add_filter( 'woocommerce_get_price', array( $this, 'change_price_by_gateway' ), PHP_INT_MAX, 2 );
 
55
 
56
  add_filter( 'woocommerce_package_rates', array( $this, 'change_shipping_price_by_gateway' ), PHP_INT_MAX, 2 );
57
 
@@ -97,7 +98,9 @@ class WCJ_Payment_Gateways_Currency extends WCJ_Module {
97
  function is_cart_or_checkout() {
98
  //if ( wcj_is_frontend() ) {
99
  if ( ! is_admin() ) {
100
- if ( is_cart() || is_checkout() ) return true;
 
 
101
  }
102
  return false;
103
  }
@@ -141,7 +144,7 @@ class WCJ_Payment_Gateways_Currency extends WCJ_Module {
141
  *
142
  * @version 2.4.0
143
  */
144
- public function change_currency_symbol( $currency_symbol, $currency ) {
145
  if ( $this->is_cart_or_checkout() ) {
146
  global $woocommerce;
147
  $current_gateway = $woocommerce->session->chosen_payment_method;
@@ -160,7 +163,7 @@ class WCJ_Payment_Gateways_Currency extends WCJ_Module {
160
  *
161
  * @version 2.4.0
162
  */
163
- public function change_currency_code( $currency ) {
164
  if ( $this->is_cart_or_checkout() ) {
165
  global $woocommerce;
166
  $current_gateway = $woocommerce->session->chosen_payment_method;
@@ -182,47 +185,29 @@ class WCJ_Payment_Gateways_Currency extends WCJ_Module {
182
  return $currency;
183
  }
184
 
185
- /**
186
- * get_settings.
187
- *
188
- * @version 2.4.3
189
- */
190
- function get_settings() {
191
- $settings = apply_filters( 'wcj_payment_gateways_currency_settings', array() );
192
- return $this->add_standard_settings( $settings );
193
- }
194
-
195
- /**
196
- * add_settings_hook.
197
- *
198
- * @version 2.3.2
199
- */
200
- function add_settings_hook() {
201
- add_filter( 'wcj_payment_gateways_currency_settings', array( $this, 'add_currency_settings' ) );
202
- }
203
-
204
  /**
205
  * register_script.
206
  */
207
- public function register_script() {
208
  wp_register_script( 'wcj-payment-gateways-checkout', trailingslashit( plugin_dir_url( __FILE__ ) ) . 'js/checkout.js', array( 'jquery' ), false, true );
209
  }
210
 
211
  /**
212
  * enqueue_checkout_script.
213
  */
214
- public function enqueue_checkout_script() {
215
- if( ! is_checkout() )
216
  return;
 
217
  wp_enqueue_script( 'wcj-payment-gateways-checkout' );
218
  }
219
 
220
  /**
221
- * add_currency_settings.
222
  *
223
- * @version 2.6.0
224
  */
225
- function add_currency_settings( $settings ) {
226
 
227
  $settings[] = array(
228
  'title' => __( 'Payment Gateways Currency Options', 'woocommerce-jetpack' ),
4
  *
5
  * The WooCommerce Jetpack Payment Gateways Currency class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.3.0
9
  * @author Algoritmika Ltd.
10
  */
42
  /**
43
  * add_hooks.
44
  *
45
+ * @version 2.7.0
46
  * @since 2.3.2
47
  */
48
  function add_hooks() {
51
 
52
  add_filter( 'woocommerce_paypal_supported_currencies', array( $this, 'extend_paypal_supported_currencies' ), PHP_INT_MAX, 1 );
53
 
54
+ add_filter( WCJ_PRODUCT_GET_PRICE_FILTER, array( $this, 'change_price_by_gateway' ), PHP_INT_MAX, 2 );
55
+ add_filter( 'woocommerce_product_variation_get_price', array( $this, 'change_price_by_gateway' ), PHP_INT_MAX, 2 );
56
 
57
  add_filter( 'woocommerce_package_rates', array( $this, 'change_shipping_price_by_gateway' ), PHP_INT_MAX, 2 );
58
 
98
  function is_cart_or_checkout() {
99
  //if ( wcj_is_frontend() ) {
100
  if ( ! is_admin() ) {
101
+ if ( is_cart() || is_checkout() ) {
102
+ return true;
103
+ }
104
  }
105
  return false;
106
  }
144
  *
145
  * @version 2.4.0
146
  */
147
+ function change_currency_symbol( $currency_symbol, $currency ) {
148
  if ( $this->is_cart_or_checkout() ) {
149
  global $woocommerce;
150
  $current_gateway = $woocommerce->session->chosen_payment_method;
163
  *
164
  * @version 2.4.0
165
  */
166
+ function change_currency_code( $currency ) {
167
  if ( $this->is_cart_or_checkout() ) {
168
  global $woocommerce;
169
  $current_gateway = $woocommerce->session->chosen_payment_method;
185
  return $currency;
186
  }
187
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
188
  /**
189
  * register_script.
190
  */
191
+ function register_script() {
192
  wp_register_script( 'wcj-payment-gateways-checkout', trailingslashit( plugin_dir_url( __FILE__ ) ) . 'js/checkout.js', array( 'jquery' ), false, true );
193
  }
194
 
195
  /**
196
  * enqueue_checkout_script.
197
  */
198
+ function enqueue_checkout_script() {
199
+ if( ! is_checkout() ) {
200
  return;
201
+ }
202
  wp_enqueue_script( 'wcj-payment-gateways-checkout' );
203
  }
204
 
205
  /**
206
+ * add_settings.
207
  *
208
+ * @version 2.7.0
209
  */
210
+ function add_settings( $settings ) {
211
 
212
  $settings[] = array(
213
  'title' => __( 'Payment Gateways Currency Options', 'woocommerce-jetpack' ),
includes/class-wcj-payment-gateways-fees.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Payment Gateways Fees class.
6
  *
7
- * @version 2.5.0
8
  * @since 2.2.2
9
  * @author Algoritmika Ltd.
10
  */
@@ -18,7 +18,7 @@ class WCJ_Payment_Gateways_Fees extends WCJ_Module {
18
  /**
19
  * Constructor.
20
  *
21
- * @version 2.5.0
22
  */
23
  function __construct() {
24
 
@@ -28,55 +28,30 @@ class WCJ_Payment_Gateways_Fees extends WCJ_Module {
28
  $this->link = 'http://booster.io/features/woocommerce-payment-gateways-fees-and-discounts/';
29
  parent::__construct();
30
 
31
- add_filter( 'init', array( $this, 'add_hooks' ) );
32
 
33
  if ( $this->is_enabled() ) {
34
  add_action( 'woocommerce_cart_calculate_fees', array( $this, 'gateways_fees' ) );
35
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_checkout_script' ) );
36
- // add_filter( 'woocommerce_payment_gateways_settings', array( $this, 'add_fees_settings' ), 100 );
37
- add_action( 'init', array( $this, 'register_script' ) );
38
  }
39
  }
40
 
41
- /**
42
- * get_settings.
43
- *
44
- * @version 2.5.0
45
- */
46
- function get_settings() {
47
- $settings = array();
48
- $settings = apply_filters( 'wcj_payment_gateways_fees_settings', $settings );
49
- return $this->add_standard_settings( $settings );
50
- }
51
-
52
- /**
53
- * add_hooks.
54
- */
55
- function add_hooks() {
56
- add_filter( 'wcj_payment_gateways_fees_settings', array( $this, 'add_fees_settings' ) );
57
- }
58
-
59
- /**
60
- * register_script.
61
- */
62
- public function register_script() {
63
- wp_register_script( 'wcj-payment-gateways-checkout', trailingslashit( plugin_dir_url( __FILE__ ) ) . 'js/checkout.js', array( 'jquery' ), false, true );
64
- }
65
-
66
  /**
67
  * enqueue_checkout_script.
 
 
68
  */
69
- public function enqueue_checkout_script() {
70
  if( ! is_checkout() ) {
71
  return;
72
  }
73
- wp_enqueue_script( 'wcj-payment-gateways-checkout' );
74
  }
75
 
76
  /**
77
  * gateways_fees.
78
  *
79
- * @version 2.5.0
80
  */
81
  function gateways_fees() {
82
  global $woocommerce;
@@ -98,6 +73,11 @@ class WCJ_Payment_Gateways_Fees extends WCJ_Module {
98
  $fee_text = get_option( 'wcj_gateways_fees_text_' . $current_gateway );
99
  $min_cart_amount = get_option( 'wcj_gateways_fees_min_cart_amount_' . $current_gateway );
100
  $max_cart_amount = get_option( 'wcj_gateways_fees_max_cart_amount_' . $current_gateway );
 
 
 
 
 
101
  $total_in_cart = $woocommerce->cart->cart_contents_total + $woocommerce->cart->shipping_total;
102
  if ( '' != $fee_text && $total_in_cart >= $min_cart_amount && ( 0 == $max_cart_amount || $total_in_cart <= $max_cart_amount ) ) {
103
  $fee_value = get_option( 'wcj_gateways_fees_value_' . $current_gateway );
@@ -105,6 +85,10 @@ class WCJ_Payment_Gateways_Fees extends WCJ_Module {
105
  $final_fee_to_add = 0;
106
  switch ( $fee_type ) {
107
  case 'fixed':
 
 
 
 
108
  $final_fee_to_add = $fee_value;
109
  break;
110
  case 'percent':
@@ -114,7 +98,7 @@ class WCJ_Payment_Gateways_Fees extends WCJ_Module {
114
  }
115
  break;
116
  }
117
- if ( '' != $fee_text && 0 != $final_fee_to_add ) {
118
  $taxable = ( 'yes' === get_option( 'wcj_gateways_fees_is_taxable_' . $current_gateway ) ) ? true : false;
119
  $tax_class_name = '';
120
  if ( $taxable ) {
@@ -129,34 +113,31 @@ class WCJ_Payment_Gateways_Fees extends WCJ_Module {
129
  }
130
 
131
  /**
132
- * add_fees_settings.
133
  *
134
- * @version 2.3.0
135
  */
136
- function add_fees_settings( $settings ) {
137
- $settings[] = array(
138
- 'title' => __( 'Payment Gateways Fees and Discounts Options', 'woocommerce-jetpack' ),
139
- 'type' => 'title',
140
- 'desc' => __( 'This section lets you set extra fees for payment gateways.', 'woocommerce-jetpack' ),
141
- 'id' => 'wcj_payment_gateways_fees_options',
142
- );
143
- // $available_gateways = WC()->payment_gateways->payment_gateways();
144
- global $woocommerce;
145
- $available_gateways = $woocommerce->payment_gateways->payment_gateways();
146
  foreach ( $available_gateways as $key => $gateway ) {
147
  $settings = array_merge( $settings, array(
148
  array(
149
- 'title' => $gateway->title, // . ' [' . ( $gateway->is_available() ? __( 'Available', 'woocommerce-jetpack' ) : __( 'Not available', 'woocommerce-jetpack' ) ) . ']',
150
- 'desc' => __( 'Fee (or discount) title to show to customer.', 'woocommerce-jetpack' ),
151
- 'desc_tip' => __( 'Leave blank to disable.', 'woocommerce-jetpack' ),
 
 
 
 
 
 
152
  'id' => 'wcj_gateways_fees_text_' . $key,
153
  'default' => '',
154
  'type' => 'text',
155
  ),
156
  array(
157
- 'title' => '',
158
- 'desc' => __( 'Fee (or discount) type.', 'woocommerce-jetpack' ),
159
- 'desc_tip' => __( 'Percent or fixed value.', 'woocommerce-jetpack' )/* . ' ' . apply_filters( 'booster_get_message', '', 'desc_no_link' ) */,
160
  'id' => 'wcj_gateways_fees_type_' . $key,
161
  'default' => 'fixed',
162
  'type' => 'select',
@@ -166,8 +147,7 @@ class WCJ_Payment_Gateways_Fees extends WCJ_Module {
166
  ),
167
  ),
168
  array(
169
- 'title' => '',
170
- 'desc' => __( 'Fee (or discount) value.', 'woocommerce-jetpack' ),
171
  'desc_tip' => __( 'The value. For discount enter a negative number.', 'woocommerce-jetpack' ),
172
  'id' => 'wcj_gateways_fees_value_' . $key,
173
  'default' => 0,
@@ -177,9 +157,9 @@ class WCJ_Payment_Gateways_Fees extends WCJ_Module {
177
  ),
178
  ),
179
  array(
180
- 'title' => '',
181
- 'desc' => __( 'Minimum cart amount for adding the fee (or discount).', 'woocommerce-jetpack' ),
182
- 'desc_tip' => __( 'Set 0 to disable.', 'woocommerce-jetpack' ),
183
  'id' => 'wcj_gateways_fees_min_cart_amount_' . $key,
184
  'default' => 0,
185
  'type' => 'number',
@@ -189,9 +169,9 @@ class WCJ_Payment_Gateways_Fees extends WCJ_Module {
189
  ),
190
  ),
191
  array(
192
- 'title' => '',
193
- 'desc' => __( 'Maximum cart amount for adding the fee (or discount).', 'woocommerce-jetpack' ),
194
- 'desc_tip' => __( 'Set 0 to disable.', 'woocommerce-jetpack' ),
195
  'id' => 'wcj_gateways_fees_max_cart_amount_' . $key,
196
  'default' => 0,
197
  'type' => 'number',
@@ -201,17 +181,15 @@ class WCJ_Payment_Gateways_Fees extends WCJ_Module {
201
  ),
202
  ),
203
  array(
204
- 'title' => '',
205
- 'desc' => __( 'Round the fee (or discount) value before adding to the cart.', 'woocommerce-jetpack' ),
206
- // 'desc_tip' => __( 'Set 0 to disable.', 'woocommerce-jetpack' ),
207
  'id' => 'wcj_gateways_fees_round_' . $key,
208
  'default' => 'no',
209
  'type' => 'checkbox',
210
  ),
211
  array(
212
- 'title' => '',
213
- 'desc' => __( 'If rounding is enabled, set precision here.', 'woocommerce-jetpack' ),
214
- // 'desc_tip' => __( 'Set 0 to disable.', 'woocommerce-jetpack' ),
215
  'id' => 'wcj_gateways_fees_round_precision_' . $key,
216
  'default' => 0,
217
  'type' => 'number',
@@ -221,26 +199,26 @@ class WCJ_Payment_Gateways_Fees extends WCJ_Module {
221
  ),
222
  ),
223
  array(
224
- 'title' => '',
225
- 'desc' => __( 'Is taxable?', 'woocommerce-jetpack' ),
226
  'id' => 'wcj_gateways_fees_is_taxable_' . $key,
227
  'default' => 'no',
228
  'type' => 'checkbox',
229
  ),
230
  array(
231
- 'title' => '',
232
- 'desc' => __( 'Tax Class (only if Taxable selected).', 'woocommerce-jetpack' ),
233
  'id' => 'wcj_gateways_fees_tax_class_id_' . $key,
234
  'default' => '',
235
  'type' => 'select',
236
  'options' => array_merge( array( __( 'Standard Rate', 'woocommerce-jetpack' ) ), WC_Tax::get_tax_classes() ),
237
  ),
 
 
 
 
238
  ) );
239
  }
240
- $settings[] = array(
241
- 'type' => 'sectionend',
242
- 'id' => 'wcj_payment_gateways_fees_options',
243
- );
244
  return $settings;
245
  }
246
  }
4
  *
5
  * The WooCommerce Jetpack Payment Gateways Fees class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.2.2
9
  * @author Algoritmika Ltd.
10
  */
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 2.7.0
22
  */
23
  function __construct() {
24
 
28
  $this->link = 'http://booster.io/features/woocommerce-payment-gateways-fees-and-discounts/';
29
  parent::__construct();
30
 
31
+ add_filter( 'init', array( $this, 'add_settings_hook' ) );
32
 
33
  if ( $this->is_enabled() ) {
34
  add_action( 'woocommerce_cart_calculate_fees', array( $this, 'gateways_fees' ) );
35
+ add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_checkout_script' ) );
 
 
36
  }
37
  }
38
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  /**
40
  * enqueue_checkout_script.
41
+ *
42
+ * @version 2.7.0
43
  */
44
+ function enqueue_checkout_script() {
45
  if( ! is_checkout() ) {
46
  return;
47
  }
48
+ wp_enqueue_script( 'wcj-payment-gateways-checkout', trailingslashit( plugin_dir_url( __FILE__ ) ) . 'js/checkout.js', array( 'jquery' ), WCJ()->version, true );
49
  }
50
 
51
  /**
52
  * gateways_fees.
53
  *
54
+ * @version 2.7.0
55
  */
56
  function gateways_fees() {
57
  global $woocommerce;
73
  $fee_text = get_option( 'wcj_gateways_fees_text_' . $current_gateway );
74
  $min_cart_amount = get_option( 'wcj_gateways_fees_min_cart_amount_' . $current_gateway );
75
  $max_cart_amount = get_option( 'wcj_gateways_fees_max_cart_amount_' . $current_gateway );
76
+ // Multicurrency (Currency Switcher) module
77
+ if ( WCJ()->modules['multicurrency']->is_enabled() ) {
78
+ $min_cart_amount = WCJ()->modules['multicurrency']->change_price( $min_cart_amount, null );
79
+ $max_cart_amount = WCJ()->modules['multicurrency']->change_price( $max_cart_amount, null );
80
+ }
81
  $total_in_cart = $woocommerce->cart->cart_contents_total + $woocommerce->cart->shipping_total;
82
  if ( '' != $fee_text && $total_in_cart >= $min_cart_amount && ( 0 == $max_cart_amount || $total_in_cart <= $max_cart_amount ) ) {
83
  $fee_value = get_option( 'wcj_gateways_fees_value_' . $current_gateway );
85
  $final_fee_to_add = 0;
86
  switch ( $fee_type ) {
87
  case 'fixed':
88
+ // Multicurrency (Currency Switcher) module
89
+ if ( WCJ()->modules['multicurrency']->is_enabled() ) {
90
+ $fee_value = WCJ()->modules['multicurrency']->change_price( $fee_value, null );
91
+ }
92
  $final_fee_to_add = $fee_value;
93
  break;
94
  case 'percent':
98
  }
99
  break;
100
  }
101
+ if ( 0 != $final_fee_to_add ) {
102
  $taxable = ( 'yes' === get_option( 'wcj_gateways_fees_is_taxable_' . $current_gateway ) ) ? true : false;
103
  $tax_class_name = '';
104
  if ( $taxable ) {
113
  }
114
 
115
  /**
116
+ * add_settings.
117
  *
118
+ * @version 2.7.0
119
  */
120
+ function add_settings( $settings ) {
121
+ $available_gateways = WC()->payment_gateways->payment_gateways();
 
 
 
 
 
 
 
 
122
  foreach ( $available_gateways as $key => $gateway ) {
123
  $settings = array_merge( $settings, array(
124
  array(
125
+ 'title' => $gateway->title,
126
+ 'type' => 'title',
127
+ // 'desc' => ( $gateway->is_available() ? __( 'Available', 'woocommerce-jetpack' ) : __( 'Not available', 'woocommerce-jetpack' ) ),
128
+ 'id' => 'wcj_gateways_fees_options_' . $key,
129
+ ),
130
+ array(
131
+ 'title' => __( 'Fee (or Discount) Title', 'woocommerce-jetpack' ),
132
+ 'desc_tip' => __( 'Fee (or discount) title to show to customer.', 'woocommerce-jetpack' ),
133
+ 'desc' => __( 'Leave blank to disable', 'woocommerce-jetpack' ),
134
  'id' => 'wcj_gateways_fees_text_' . $key,
135
  'default' => '',
136
  'type' => 'text',
137
  ),
138
  array(
139
+ 'title' => __( 'Fee (or Discount) Type', 'woocommerce-jetpack' ),
140
+ 'desc_tip' => __( 'Percent or fixed value.', 'woocommerce-jetpack' ),
 
141
  'id' => 'wcj_gateways_fees_type_' . $key,
142
  'default' => 'fixed',
143
  'type' => 'select',
147
  ),
148
  ),
149
  array(
150
+ 'title' => __( 'Fee (or Discount) Value', 'woocommerce-jetpack' ),
 
151
  'desc_tip' => __( 'The value. For discount enter a negative number.', 'woocommerce-jetpack' ),
152
  'id' => 'wcj_gateways_fees_value_' . $key,
153
  'default' => 0,
157
  ),
158
  ),
159
  array(
160
+ 'title' => __( 'Minimum Cart Amount', 'woocommerce-jetpack' ),
161
+ 'desc_tip' => __( 'Minimum cart amount for adding the fee (or discount).', 'woocommerce-jetpack' ),
162
+ 'desc' => __( 'Set 0 to disable', 'woocommerce-jetpack' ),
163
  'id' => 'wcj_gateways_fees_min_cart_amount_' . $key,
164
  'default' => 0,
165
  'type' => 'number',
169
  ),
170
  ),
171
  array(
172
+ 'title' => __( 'Maximum Cart Amount', 'woocommerce-jetpack' ),
173
+ 'desc_tip' => __( 'Maximum cart amount for adding the fee (or discount).', 'woocommerce-jetpack' ),
174
+ 'desc' => __( 'Set 0 to disable', 'woocommerce-jetpack' ),
175
  'id' => 'wcj_gateways_fees_max_cart_amount_' . $key,
176
  'default' => 0,
177
  'type' => 'number',
181
  ),
182
  ),
183
  array(
184
+ 'title' => __( 'Rounding', 'woocommerce-jetpack' ),
185
+ 'desc' => __( 'Round the fee (or discount) value before adding to the cart', 'woocommerce-jetpack' ),
 
186
  'id' => 'wcj_gateways_fees_round_' . $key,
187
  'default' => 'no',
188
  'type' => 'checkbox',
189
  ),
190
  array(
191
+ 'title' => __( 'Rounding Precision', 'woocommerce-jetpack' ),
192
+ 'desc_tip' => __( 'If Rounding is enabled, set precision here.', 'woocommerce-jetpack' ),
 
193
  'id' => 'wcj_gateways_fees_round_precision_' . $key,
194
  'default' => 0,
195
  'type' => 'number',
199
  ),
200
  ),
201
  array(
202
+ 'title' => __( 'Taxing', 'woocommerce-jetpack' ),
203
+ 'desc' => __( 'Taxable', 'woocommerce-jetpack' ),
204
  'id' => 'wcj_gateways_fees_is_taxable_' . $key,
205
  'default' => 'no',
206
  'type' => 'checkbox',
207
  ),
208
  array(
209
+ 'title' => __( 'Tax Class', 'woocommerce-jetpack' ),
210
+ 'desc_tip' => __( 'If Taxing is enabled, set tax class here.', 'woocommerce-jetpack' ),
211
  'id' => 'wcj_gateways_fees_tax_class_id_' . $key,
212
  'default' => '',
213
  'type' => 'select',
214
  'options' => array_merge( array( __( 'Standard Rate', 'woocommerce-jetpack' ) ), WC_Tax::get_tax_classes() ),
215
  ),
216
+ array(
217
+ 'type' => 'sectionend',
218
+ 'id' => 'wcj_gateways_fees_options_' . $key,
219
+ ),
220
  ) );
221
  }
 
 
 
 
222
  return $settings;
223
  }
224
  }
includes/class-wcj-payment-gateways-min-max.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Payment Gateways Min Max class.
6
  *
7
- * @version 2.6.0
8
  * @since 2.4.1
9
  * @author Algoritmika Ltd.
10
  */
@@ -18,7 +18,7 @@ class WCJ_Payment_Gateways_Min_Max extends WCJ_Module {
18
  /**
19
  * Constructor.
20
  *
21
- * @version 2.6.0
22
  */
23
  function __construct() {
24
 
@@ -28,7 +28,7 @@ class WCJ_Payment_Gateways_Min_Max extends WCJ_Module {
28
  $this->link = 'http://booster.io/features/woocommerce-payment-gateways-min-max/';
29
  parent::__construct();
30
 
31
- add_filter( 'init', array( $this, 'add_hooks' ) );
32
 
33
  if ( $this->is_enabled() ) {
34
  add_filter( 'woocommerce_available_payment_gateways', array( $this, 'available_payment_gateways' ), PHP_INT_MAX, 1 );
@@ -74,19 +74,12 @@ class WCJ_Payment_Gateways_Min_Max extends WCJ_Module {
74
  }
75
 
76
  /**
77
- * add_hooks.
78
- */
79
- function add_hooks() {
80
- add_filter( 'wcj_payment_gateways_min_max_settings', array( $this, 'add_min_max_settings' ) );
81
- }
82
-
83
- /**
84
- * add_min_max_settings.
85
  *
86
- * @version 2.6.0
87
- * @todo checkout notices - add %diff_amount% replaced values (wc_has_notice won't work then, probably will need to use wc_clear_notices)
88
  */
89
- function add_min_max_settings( $settings ) {
90
  $settings = array(
91
  array(
92
  'title' => __( 'General Options', 'woocommerce-jetpack' ),
@@ -138,12 +131,12 @@ class WCJ_Payment_Gateways_Min_Max extends WCJ_Module {
138
  'type' => 'sectionend',
139
  'id' => 'wcj_payment_gateways_min_max_general_options',
140
  ),
141
- );
142
- $settings[] = array(
143
- 'title' => __( 'Payment Gateways', 'woocommerce-jetpack' ),
144
- 'type' => 'title',
145
- 'desc' => __( 'Leave zero to disable.', 'woocommerce-jetpack' ),
146
- 'id' => 'wcj_payment_gateways_min_max_gateways_options',
147
  );
148
  $gateways = WC()->payment_gateways->payment_gateways();
149
  foreach ( $gateways as $key => $gateway ) {
@@ -158,40 +151,36 @@ class WCJ_Payment_Gateways_Min_Max extends WCJ_Module {
158
  $custom_attributes = array();
159
  $desc_tip = '';
160
  }
161
- $settings[] = array(
162
- 'title' => $gateway->title,
163
- 'desc_tip' => $desc_tip,
164
- 'desc' => __( 'Min', 'woocommerce-jetpack' ),
165
- 'id' => 'wcj_payment_gateways_min_' . $key,
166
- 'default' => 0,
167
- 'type' => 'number',
168
- 'custom_attributes' => array_merge( array( 'step' => '0.000001', 'min' => '0', ), $custom_attributes ),
169
- );
170
- $settings[] = array(
171
- 'title' => '',
172
- 'desc_tip' => $desc_tip,
173
- 'desc' => __( 'Max', 'woocommerce-jetpack' ),
174
- 'id' => 'wcj_payment_gateways_max_' . $key,
175
- 'default' => 0,
176
- 'type' => 'number',
177
- 'custom_attributes' => array_merge( array( 'step' => '0.000001', 'min' => '0', ), $custom_attributes ),
178
- );
 
 
179
  }
180
- $settings[] = array(
181
- 'type' => 'sectionend',
182
- 'id' => 'wcj_payment_gateways_min_max_gateways_options',
183
- );
 
 
184
  return $settings;
185
  }
186
 
187
- /**
188
- * get_settings.
189
- */
190
- function get_settings() {
191
- $settings = array();
192
- $settings = apply_filters( 'wcj_payment_gateways_min_max_settings', $settings );
193
- return $this->add_standard_settings( $settings );
194
- }
195
  }
196
 
197
  endif;
4
  *
5
  * The WooCommerce Jetpack Payment Gateways Min Max class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.4.1
9
  * @author Algoritmika Ltd.
10
  */
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 2.7.0
22
  */
23
  function __construct() {
24
 
28
  $this->link = 'http://booster.io/features/woocommerce-payment-gateways-min-max/';
29
  parent::__construct();
30
 
31
+ add_filter( 'init', array( $this, 'add_settings_hook' ) );
32
 
33
  if ( $this->is_enabled() ) {
34
  add_filter( 'woocommerce_available_payment_gateways', array( $this, 'available_payment_gateways' ), PHP_INT_MAX, 1 );
74
  }
75
 
76
  /**
77
+ * add_settings.
 
 
 
 
 
 
 
78
  *
79
+ * @version 2.7.0
80
+ * @todo checkout notices - add %diff_amount% and %total_in_cart% replaced values (wc_has_notice won't work then?, probably will need to use wc_clear_notices)
81
  */
82
+ function add_settings( $settings ) {
83
  $settings = array(
84
  array(
85
  'title' => __( 'General Options', 'woocommerce-jetpack' ),
131
  'type' => 'sectionend',
132
  'id' => 'wcj_payment_gateways_min_max_general_options',
133
  ),
134
+ array(
135
+ 'title' => __( 'Payment Gateways', 'woocommerce-jetpack' ),
136
+ 'type' => 'title',
137
+ 'desc' => __( 'Leave zero to disable.', 'woocommerce-jetpack' ),
138
+ 'id' => 'wcj_payment_gateways_min_max_gateways_options',
139
+ ),
140
  );
141
  $gateways = WC()->payment_gateways->payment_gateways();
142
  foreach ( $gateways as $key => $gateway ) {
151
  $custom_attributes = array();
152
  $desc_tip = '';
153
  }
154
+ $settings = array_merge( $settings, array(
155
+ array(
156
+ 'title' => $gateway->title,
157
+ 'desc_tip' => $desc_tip,
158
+ 'desc' => __( 'Min', 'woocommerce-jetpack' ),
159
+ 'id' => 'wcj_payment_gateways_min_' . $key,
160
+ 'default' => 0,
161
+ 'type' => 'number',
162
+ 'custom_attributes' => array_merge( array( 'step' => '0.000001', 'min' => '0', ), $custom_attributes ),
163
+ ),
164
+ array(
165
+ 'title' => '',
166
+ 'desc_tip' => $desc_tip,
167
+ 'desc' => __( 'Max', 'woocommerce-jetpack' ),
168
+ 'id' => 'wcj_payment_gateways_max_' . $key,
169
+ 'default' => 0,
170
+ 'type' => 'number',
171
+ 'custom_attributes' => array_merge( array( 'step' => '0.000001', 'min' => '0', ), $custom_attributes ),
172
+ ),
173
+ ) );
174
  }
175
+ $settings = array_merge( $settings, array(
176
+ array(
177
+ 'type' => 'sectionend',
178
+ 'id' => 'wcj_payment_gateways_min_max_gateways_options',
179
+ ),
180
+ ) );
181
  return $settings;
182
  }
183
 
 
 
 
 
 
 
 
 
184
  }
185
 
186
  endif;
includes/class-wcj-payment-gateways-per-category.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Payment Gateways per Category class.
6
  *
7
- * @version 2.5.0
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -18,7 +18,7 @@ class WCJ_Payment_Gateways_Per_Category extends WCJ_Module {
18
  /**
19
  * Constructor.
20
  *
21
- * @version 2.4.7
22
  */
23
  function __construct() {
24
 
@@ -28,7 +28,7 @@ class WCJ_Payment_Gateways_Per_Category extends WCJ_Module {
28
  $this->link = 'http://booster.io/features/woocommerce-gateways-per-product-or-category/';
29
  parent::__construct();
30
 
31
- add_filter( 'init', array( $this, 'add_hooks' ) );
32
 
33
  if ( $this->is_enabled() ) {
34
  // add_filter( 'woocommerce_payment_gateways_settings', array( $this, 'add_per_category_settings' ), 100 );
@@ -36,34 +36,18 @@ class WCJ_Payment_Gateways_Per_Category extends WCJ_Module {
36
  }
37
  }
38
 
39
- /**
40
- * get_settings.
41
- *
42
- * @version 2.4.7
43
- */
44
- function get_settings() {
45
- $settings = array();
46
- $settings = apply_filters( 'wcj_payment_gateways_per_category_settings', $settings );
47
- return $this->add_standard_settings( $settings );
48
- }
49
-
50
- /**
51
- * add_hooks.
52
- */
53
- function add_hooks() {
54
- add_filter( 'wcj_payment_gateways_per_category_settings', array( $this, 'add_per_category_settings' ) );
55
- }
56
-
57
  /**
58
  * filter_available_payment_gateways_per_category.
59
  *
60
- * @version 2.4.7
61
  */
62
  function filter_available_payment_gateways_per_category( $available_gateways ) {
63
 
64
  // if ( ! is_checkout() ) return $available_gateways;
65
 
66
- if ( ! isset( WC()->cart ) ) return $available_gateways;
 
 
67
 
68
  foreach ( $available_gateways as $gateway_id => $gateway ) {
69
 
@@ -73,7 +57,9 @@ class WCJ_Payment_Gateways_Per_Category extends WCJ_Module {
73
  $do_skip = true;
74
  foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
75
  $product_categories = get_the_terms( $values['product_id'], 'product_cat' );
76
- if ( empty( $product_categories ) ) continue; // ... to next product in the cart
 
 
77
  foreach( $product_categories as $product_category ) {
78
  if ( in_array( $product_category->term_id, $categories_in ) ) {
79
  // Current gateway is OK, breaking to check next gateway (no need to check other categories of the product)
@@ -88,7 +74,9 @@ class WCJ_Payment_Gateways_Per_Category extends WCJ_Module {
88
  }
89
  if ( $do_skip ) {
90
  // Skip (i.e. hide/unset) current gateway - no products of needed categories found in the cart
91
- if ( isset( $available_gateways[ $gateway_id ] ) ) unset( $available_gateways[ $gateway_id ] );
 
 
92
  continue; // ... to next gateway
93
  }
94
  }
@@ -99,16 +87,22 @@ class WCJ_Payment_Gateways_Per_Category extends WCJ_Module {
99
  $do_skip = false;
100
  foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
101
  $product_categories = get_the_terms( $values['product_id'], 'product_cat' );
102
- if ( empty( $product_categories ) ) continue; // ... to next product in the cart
 
 
103
  foreach( $product_categories as $product_category ) {
104
  if ( in_array( $product_category->term_id, $categories_excl ) ) {
105
  // Skip (i.e. hide/unset) current gateway
106
- if ( isset( $available_gateways[ $gateway_id ] ) ) unset( $available_gateways[ $gateway_id ] );
 
 
107
  $do_skip = true;
108
  break;
109
  }
110
  }
111
- if ( $do_skip ) break;
 
 
112
  }
113
  if ( $do_skip ) {
114
  continue; // ... to next gateway
@@ -128,7 +122,9 @@ class WCJ_Payment_Gateways_Per_Category extends WCJ_Module {
128
  }
129
  if ( $do_skip ) {
130
  // Skip (i.e. hide/unset) current gateway
131
- if ( isset( $available_gateways[ $gateway_id ] ) ) unset( $available_gateways[ $gateway_id ] );
 
 
132
  continue; // ... to next gateway
133
  }
134
  }
@@ -140,7 +136,9 @@ class WCJ_Payment_Gateways_Per_Category extends WCJ_Module {
140
  foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
141
  if ( in_array( $values['product_id'], $products_excl ) ) {
142
  // Skip (i.e. hide/unset) current gateway
143
- if ( isset( $available_gateways[ $gateway_id ] ) ) unset( $available_gateways[ $gateway_id ] );
 
 
144
  $do_skip = true;
145
  break;
146
  }
@@ -156,16 +154,18 @@ class WCJ_Payment_Gateways_Per_Category extends WCJ_Module {
156
  }
157
 
158
  /**
159
- * add_per_category_settings.
160
  *
161
- * @version 2.5.0
162
  */
163
- function add_per_category_settings( $settings ) {
164
-
165
- $settings[] = array(
166
- 'title' => __( 'Options', 'woocommerce-jetpack' ),
167
- 'type' => 'title',
168
- 'id' => 'wcj_gateways_per_category_options',
 
 
169
  );
170
 
171
  $product_cats = array();
@@ -179,58 +179,62 @@ class WCJ_Payment_Gateways_Per_Category extends WCJ_Module {
179
  global $woocommerce;
180
  $available_gateways = $woocommerce->payment_gateways->payment_gateways();
181
  foreach ( $available_gateways as $gateway_id => $gateway ) {
182
- $settings[] = array(
183
- 'title' => $gateway->title,
184
- 'desc' => __( 'Product Categories - Include', 'woocommerce-jetpack' ),
185
- 'desc_tip' => __( 'Show gateway only if there is product of selected category in cart. Leave blank to disable the option.', 'woocommerce-jetpack' ),
186
- 'id' => 'wcj_gateways_per_category_' . $gateway_id,
187
- 'default' => '',
188
- 'type' => 'multiselect',
189
- 'class' => 'chosen_select',
190
- 'css' => 'width: 450px;',
191
- 'options' => $product_cats,
192
- );
193
- $settings[] = array(
194
- 'title' => '',
195
- 'desc' => __( 'Product Categories - Exclude', 'woocommerce-jetpack' ),
196
- 'desc_tip' => __( 'Hide gateway if there is product of selected category in cart. Leave blank to disable the option.', 'woocommerce-jetpack' ),
197
- 'id' => 'wcj_gateways_per_category_excl_' . $gateway_id,
198
- 'default' => '',
199
- 'type' => 'multiselect',
200
- 'class' => 'chosen_select',
201
- 'css' => 'width: 450px;',
202
- 'options' => $product_cats,
203
- );
204
- $settings[] = array(
205
- 'title' => '',
206
- 'desc' => __( 'Products - Include', 'woocommerce-jetpack' ) . '. ' . apply_filters( 'booster_get_message', '', 'desc' ),
207
- 'desc_tip' => __( 'Show gateway only if there is selected products in cart. Leave blank to disable the option.', 'woocommerce-jetpack' ),
208
- 'id' => 'wcj_gateways_per_products_' . $gateway_id,
209
- 'default' => '',
210
- 'type' => 'multiselect',
211
- 'class' => 'chosen_select',
212
- 'css' => 'width: 450px;',
213
- 'options' => $products,
214
- 'custom_attributes' => apply_filters( 'booster_get_message', '', 'disabled' ),
215
- );
216
- $settings[] = array(
217
- 'title' => '',
218
- 'desc' => __( 'Products - Exclude', 'woocommerce-jetpack' ) . '. ' . apply_filters( 'booster_get_message', '', 'desc' ),
219
- 'desc_tip' => __( 'Hide gateway if there is selected products in cart. Leave blank to disable the option.', 'woocommerce-jetpack' ),
220
- 'id' => 'wcj_gateways_per_products_excl_' . $gateway_id,
221
- 'default' => '',
222
- 'type' => 'multiselect',
223
- 'class' => 'chosen_select',
224
- 'css' => 'width: 450px;',
225
- 'options' => $products,
226
- 'custom_attributes' => apply_filters( 'booster_get_message', '', 'disabled' ),
227
- );
 
 
228
  }
229
 
230
- $settings[] = array(
231
- 'type' => 'sectionend',
232
- 'id' => 'wcj_gateways_per_category_options',
233
- );
 
 
234
 
235
  return $settings;
236
  }
4
  *
5
  * The WooCommerce Jetpack Payment Gateways per Category class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 2.7.0
22
  */
23
  function __construct() {
24
 
28
  $this->link = 'http://booster.io/features/woocommerce-gateways-per-product-or-category/';
29
  parent::__construct();
30
 
31
+ add_filter( 'init', array( $this, 'add_settings_hook' ) );
32
 
33
  if ( $this->is_enabled() ) {
34
  // add_filter( 'woocommerce_payment_gateways_settings', array( $this, 'add_per_category_settings' ), 100 );
36
  }
37
  }
38
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  /**
40
  * filter_available_payment_gateways_per_category.
41
  *
42
+ * @version 2.7.0
43
  */
44
  function filter_available_payment_gateways_per_category( $available_gateways ) {
45
 
46
  // if ( ! is_checkout() ) return $available_gateways;
47
 
48
+ if ( ! isset( WC()->cart ) ) {
49
+ return $available_gateways;
50
+ }
51
 
52
  foreach ( $available_gateways as $gateway_id => $gateway ) {
53
 
57
  $do_skip = true;
58
  foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
59
  $product_categories = get_the_terms( $values['product_id'], 'product_cat' );
60
+ if ( empty( $product_categories ) ) {
61
+ continue; // ... to next product in the cart
62
+ }
63
  foreach( $product_categories as $product_category ) {
64
  if ( in_array( $product_category->term_id, $categories_in ) ) {
65
  // Current gateway is OK, breaking to check next gateway (no need to check other categories of the product)
74
  }
75
  if ( $do_skip ) {
76
  // Skip (i.e. hide/unset) current gateway - no products of needed categories found in the cart
77
+ if ( isset( $available_gateways[ $gateway_id ] ) ) {
78
+ unset( $available_gateways[ $gateway_id ] );
79
+ }
80
  continue; // ... to next gateway
81
  }
82
  }
87
  $do_skip = false;
88
  foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
89
  $product_categories = get_the_terms( $values['product_id'], 'product_cat' );
90
+ if ( empty( $product_categories ) ) {
91
+ continue; // ... to next product in the cart
92
+ }
93
  foreach( $product_categories as $product_category ) {
94
  if ( in_array( $product_category->term_id, $categories_excl ) ) {
95
  // Skip (i.e. hide/unset) current gateway
96
+ if ( isset( $available_gateways[ $gateway_id ] ) ) {
97
+ unset( $available_gateways[ $gateway_id ] );
98
+ }
99
  $do_skip = true;
100
  break;
101
  }
102
  }
103
+ if ( $do_skip ) {
104
+ break;
105
+ }
106
  }
107
  if ( $do_skip ) {
108
  continue; // ... to next gateway
122
  }
123
  if ( $do_skip ) {
124
  // Skip (i.e. hide/unset) current gateway
125
+ if ( isset( $available_gateways[ $gateway_id ] ) ) {
126
+ unset( $available_gateways[ $gateway_id ] );
127
+ }
128
  continue; // ... to next gateway
129
  }
130
  }
136
  foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
137
  if ( in_array( $values['product_id'], $products_excl ) ) {
138
  // Skip (i.e. hide/unset) current gateway
139
+ if ( isset( $available_gateways[ $gateway_id ] ) ) {
140
+ unset( $available_gateways[ $gateway_id ] );
141
+ }
142
  $do_skip = true;
143
  break;
144
  }
154
  }
155
 
156
  /**
157
+ * add_settings.
158
  *
159
+ * @version 2.7.0
160
  */
161
+ function add_settings( $settings ) {
162
+
163
+ $settings = array(
164
+ array(
165
+ 'title' => __( 'Options', 'woocommerce-jetpack' ),
166
+ 'type' => 'title',
167
+ 'id' => 'wcj_gateways_per_category_options',
168
+ ),
169
  );
170
 
171
  $product_cats = array();
179
  global $woocommerce;
180
  $available_gateways = $woocommerce->payment_gateways->payment_gateways();
181
  foreach ( $available_gateways as $gateway_id => $gateway ) {
182
+ $settings = array_merge( $settings, array(
183
+ array(
184
+ 'title' => $gateway->title,
185
+ 'desc' => __( 'Product Categories - Include', 'woocommerce-jetpack' ),
186
+ 'desc_tip' => __( 'Show gateway only if there is product of selected category in cart. Leave blank to disable the option.', 'woocommerce-jetpack' ),
187
+ 'id' => 'wcj_gateways_per_category_' . $gateway_id,
188
+ 'default' => '',
189
+ 'type' => 'multiselect',
190
+ 'class' => 'chosen_select',
191
+ 'css' => 'width: 450px;',
192
+ 'options' => $product_cats,
193
+ ),
194
+ array(
195
+ 'title' => '',
196
+ 'desc' => __( 'Product Categories - Exclude', 'woocommerce-jetpack' ),
197
+ 'desc_tip' => __( 'Hide gateway if there is product of selected category in cart. Leave blank to disable the option.', 'woocommerce-jetpack' ),
198
+ 'id' => 'wcj_gateways_per_category_excl_' . $gateway_id,
199
+ 'default' => '',
200
+ 'type' => 'multiselect',
201
+ 'class' => 'chosen_select',
202
+ 'css' => 'width: 450px;',
203
+ 'options' => $product_cats,
204
+ ),
205
+ array(
206
+ 'title' => '',
207
+ 'desc' => __( 'Products - Include', 'woocommerce-jetpack' ) . '. ' . apply_filters( 'booster_get_message', '', 'desc' ),
208
+ 'desc_tip' => __( 'Show gateway only if there is selected products in cart. Leave blank to disable the option.', 'woocommerce-jetpack' ),
209
+ 'id' => 'wcj_gateways_per_products_' . $gateway_id,
210
+ 'default' => '',
211
+ 'type' => 'multiselect',
212
+ 'class' => 'chosen_select',
213
+ 'css' => 'width: 450px;',
214
+ 'options' => $products,
215
+ 'custom_attributes' => apply_filters( 'booster_get_message', '', 'disabled' ),
216
+ ),
217
+ array(
218
+ 'title' => '',
219
+ 'desc' => __( 'Products - Exclude', 'woocommerce-jetpack' ) . '. ' . apply_filters( 'booster_get_message', '', 'desc' ),
220
+ 'desc_tip' => __( 'Hide gateway if there is selected products in cart. Leave blank to disable the option.', 'woocommerce-jetpack' ),
221
+ 'id' => 'wcj_gateways_per_products_excl_' . $gateway_id,
222
+ 'default' => '',
223
+ 'type' => 'multiselect',
224
+ 'class' => 'chosen_select',
225
+ 'css' => 'width: 450px;',
226
+ 'options' => $products,
227
+ 'custom_attributes' => apply_filters( 'booster_get_message', '', 'disabled' ),
228
+ ),
229
+ ) );
230
  }
231
 
232
+ $settings = array_merge( $settings, array(
233
+ array(
234
+ 'type' => 'sectionend',
235
+ 'id' => 'wcj_gateways_per_category_options',
236
+ ),
237
+ ) );
238
 
239
  return $settings;
240
  }
includes/class-wcj-pdf-invoicing.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack PDF Invoicing class.
6
  *
7
- * @version 2.5.9
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -17,7 +17,7 @@ class WCJ_PDF_Invoicing extends WCJ_Module {
17
  /**
18
  * Constructor.
19
  *
20
- * @version 2.5.7
21
  */
22
  public function __construct() {
23
 
@@ -55,12 +55,12 @@ class WCJ_PDF_Invoicing extends WCJ_Module {
55
  foreach ( $invoice_types as $invoice_type ) {
56
  $the_hook = get_option( 'wcj_invoicing_' . $invoice_type['id'] . '_create_on', 'woocommerce_new_order' );
57
  if ( 'disabled' != $the_hook && 'manual' != $the_hook && '' != $the_hook ) {
58
- add_action( $the_hook, array( $this, 'create_' . $invoice_type['id'] ) );
59
  if ( 'woocommerce_new_order' === $the_hook ) {
60
- add_action( 'woocommerce_api_create_order', array( $this, 'create_' . $invoice_type['id'] ) );
61
- add_action( 'woocommerce_cli_create_order', array( $this, 'create_' . $invoice_type['id'] ) );
62
- add_action( 'kco_before_confirm_order', array( $this, 'create_' . $invoice_type['id'] ) );
63
- add_action( 'woocommerce_checkout_order_processed', array( $this, 'create_' . $invoice_type['id'] ) );
64
  }
65
  }
66
  }
@@ -244,41 +244,25 @@ class WCJ_PDF_Invoicing extends WCJ_Module {
244
  }
245
 
246
  /**
247
- * create_invoice.
248
- */
249
- function create_invoice( $order_id ) {
250
- return $this->create_document( $order_id, 'invoice' );
251
- }
252
-
253
- /**
254
- * create_proforma_invoice.
255
- */
256
- function create_proforma_invoice( $order_id ) {
257
- return $this->create_document( $order_id, 'proforma_invoice' );
258
- }
259
-
260
- /**
261
- * create_packing_slip.
262
- */
263
- function create_packing_slip( $order_id ) {
264
- return $this->create_document( $order_id, 'packing_slip' );
265
- }
266
-
267
- /**
268
- * create_credit_note.
269
- */
270
- function create_credit_note( $order_id ) {
271
- return $this->create_document( $order_id, 'credit_note' );
272
- }
273
-
274
- /**
275
- * create_custom_doc.
276
  *
277
- * @version 2.2.7
278
- * @since 2.2.7
279
  */
280
- function create_custom_doc( $order_id ) {
281
- return $this->create_document( $order_id, 'custom_doc' );
 
 
 
 
 
 
 
 
 
 
 
 
282
  }
283
 
284
  /**
@@ -351,7 +335,7 @@ class WCJ_PDF_Invoicing extends WCJ_Module {
351
  /**
352
  * get_settings.
353
  *
354
- * @version 2.5.9
355
  */
356
  function get_settings() {
357
 
@@ -376,6 +360,18 @@ class WCJ_PDF_Invoicing extends WCJ_Module {
376
  // Settings
377
  $invoice_types = wcj_get_invoice_types();
378
  foreach ( $invoice_types as $k => $invoice_type ) {
 
 
 
 
 
 
 
 
 
 
 
 
379
  $settings[] = array(
380
  'title' => $invoice_type['title'],
381
  'id' => 'wcj_invoicing_' . $invoice_type['id'] . '_create_on',
@@ -386,6 +382,7 @@ class WCJ_PDF_Invoicing extends WCJ_Module {
386
  'desc' => ( 0 === $k ) ? '' : apply_filters( 'booster_get_message', '', 'desc' ),
387
  'custom_attributes' => ( 0 === $k ) ? '' : apply_filters( 'booster_get_message', '', 'disabled' ),
388
  );
 
389
  $settings[] = array(
390
  'id' => 'wcj_invoicing_' . $invoice_type['id'] . '_skip_zero_total',
391
  'default' => 'no',
@@ -396,16 +393,16 @@ class WCJ_PDF_Invoicing extends WCJ_Module {
396
  }
397
 
398
  $settings[] = array(
399
- 'title' => __( 'Hide Disabled Docs Settings', 'woocommerce-jetpack' ),
400
- 'desc' => __( 'Hide', 'woocommerce-jetpack' ),
401
- 'id' => 'wcj_invoicing_hide_disabled_docs_settings',
402
- 'default' => 'no',
403
- 'type' => 'checkbox',
404
  );
405
 
406
  $settings[] = array(
407
- 'type' => 'sectionend',
408
- 'id' => 'wcj_pdf_invoicing_options',
409
  );
410
 
411
  return $this->add_standard_settings( $settings );
4
  *
5
  * The WooCommerce Jetpack PDF Invoicing class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
17
  /**
18
  * Constructor.
19
  *
20
+ * @version 2.7.0
21
  */
22
  public function __construct() {
23
 
55
  foreach ( $invoice_types as $invoice_type ) {
56
  $the_hook = get_option( 'wcj_invoicing_' . $invoice_type['id'] . '_create_on', 'woocommerce_new_order' );
57
  if ( 'disabled' != $the_hook && 'manual' != $the_hook && '' != $the_hook ) {
58
+ add_action( $the_hook, array( $this, 'create_document_hook' ) );
59
  if ( 'woocommerce_new_order' === $the_hook ) {
60
+ add_action( 'woocommerce_api_create_order', array( $this, 'create_document_hook' ) );
61
+ add_action( 'woocommerce_cli_create_order', array( $this, 'create_document_hook' ) );
62
+ add_action( 'kco_before_confirm_order', array( $this, 'create_document_hook' ) );
63
+ add_action( 'woocommerce_checkout_order_processed', array( $this, 'create_document_hook' ) );
64
  }
65
  }
66
  }
244
  }
245
 
246
  /**
247
+ * create_document_hook.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
248
  *
249
+ * @version 2.7.0
250
+ * @since 2.7.0
251
  */
252
+ function create_document_hook( $order_id ) {
253
+ $current_filter = current_filter();
254
+ if ( in_array( $current_filter, array( 'woocommerce_api_create_order', 'woocommerce_cli_create_order', 'kco_before_confirm_order', 'woocommerce_checkout_order_processed', ) ) ) {
255
+ $current_filter = 'woocommerce_new_order';
256
+ }
257
+ $invoice_types = wcj_get_enabled_invoice_types();
258
+ foreach ( $invoice_types as $invoice_type ) {
259
+ $the_hook = get_option( 'wcj_invoicing_' . $invoice_type['id'] . '_create_on', 'woocommerce_new_order' );
260
+ if ( 'disabled' != $the_hook && 'manual' != $the_hook && '' != $the_hook ) {
261
+ if ( $current_filter === $the_hook ) {
262
+ $this->create_document( $order_id, $invoice_type['id'] );
263
+ }
264
+ }
265
+ }
266
  }
267
 
268
  /**
335
  /**
336
  * get_settings.
337
  *
338
+ * @version 2.7.0
339
  */
340
  function get_settings() {
341
 
360
  // Settings
361
  $invoice_types = wcj_get_invoice_types();
362
  foreach ( $invoice_types as $k => $invoice_type ) {
363
+
364
+ if ( 'custom_doc' === $invoice_type['id'] ) {
365
+ $settings[] = array(
366
+ 'title' => __( 'Number of Custom Documents', 'woocommerce-jetpack' ),
367
+ 'desc_tip' => __( 'Save changes after setting this number.', 'woocommerce-jetpack' ),
368
+ 'id' => 'wcj_invoicing_custom_doc_total_number',
369
+ 'default' => 1,
370
+ 'type' => 'custom_number',
371
+ 'custom_attributes' => array( 'min' => '1' ),
372
+ );
373
+ }
374
+
375
  $settings[] = array(
376
  'title' => $invoice_type['title'],
377
  'id' => 'wcj_invoicing_' . $invoice_type['id'] . '_create_on',
382
  'desc' => ( 0 === $k ) ? '' : apply_filters( 'booster_get_message', '', 'desc' ),
383
  'custom_attributes' => ( 0 === $k ) ? '' : apply_filters( 'booster_get_message', '', 'disabled' ),
384
  );
385
+
386
  $settings[] = array(
387
  'id' => 'wcj_invoicing_' . $invoice_type['id'] . '_skip_zero_total',
388
  'default' => 'no',
393
  }
394
 
395
  $settings[] = array(
396
+ 'title' => __( 'Hide Disabled Docs Settings', 'woocommerce-jetpack' ),
397
+ 'desc' => __( 'Hide', 'woocommerce-jetpack' ),
398
+ 'id' => 'wcj_invoicing_hide_disabled_docs_settings',
399
+ 'default' => 'no',
400
+ 'type' => 'checkbox',
401
  );
402
 
403
  $settings[] = array(
404
+ 'type' => 'sectionend',
405
+ 'id' => 'wcj_pdf_invoicing_options',
406
  );
407
 
408
  return $this->add_standard_settings( $settings );
includes/class-wcj-price-by-country.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Price by Country class.
6
  *
7
- * @version 2.6.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -19,7 +19,7 @@ class WCJ_Price_By_Country extends WCJ_Module {
19
  *
20
  * @version 2.6.0
21
  */
22
- public function __construct() {
23
 
24
  $this->id = 'price_by_country';
25
  $this->short_desc = __( 'Prices and Currencies by Country', 'woocommerce-jetpack' );
@@ -128,7 +128,7 @@ class WCJ_Price_By_Country extends WCJ_Module {
128
  /**
129
  * get_settings.
130
  *
131
- * @version 2.6.0
132
  */
133
  function get_settings() {
134
 
@@ -180,6 +180,18 @@ class WCJ_Price_By_Country extends WCJ_Module {
180
  ),
181
  ),
182
 
 
 
 
 
 
 
 
 
 
 
 
 
183
  array(
184
  'title' => __( 'Revert Currency to Default on Checkout', 'woocommerce-jetpack' ),
185
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
4
  *
5
  * The WooCommerce Jetpack Price by Country class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
19
  *
20
  * @version 2.6.0
21
  */
22
+ function __construct() {
23
 
24
  $this->id = 'price_by_country';
25
  $this->short_desc = __( 'Prices and Currencies by Country', 'woocommerce-jetpack' );
128
  /**
129
  * get_settings.
130
  *
131
+ * @version 2.7.0
132
  */
133
  function get_settings() {
134
 
180
  ),
181
  ),
182
 
183
+ array(
184
+ 'desc' => __( 'Override Scope', 'woocommerce-jetpack' ),
185
+ 'id' => 'wcj_price_by_country_override_scope',
186
+ 'default' => 'all',
187
+ 'type' => 'select',
188
+ 'options' => array(
189
+ 'all' => __( 'All site', 'woocommerce-jetpack' ),
190
+ // 'cart_and_checkout' => __( 'Cart and checkout only', 'woocommerce-jetpack' ),
191
+ 'checkout' => __( 'Checkout only', 'woocommerce-jetpack' ),
192
+ ),
193
+ ),
194
+
195
  array(
196
  'title' => __( 'Revert Currency to Default on Checkout', 'woocommerce-jetpack' ),
197
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
includes/class-wcj-price-by-user-role.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Price by User Role class.
6
  *
7
- * @version 2.5.7
8
  * @since 2.5.0
9
  * @author Algoritmika Ltd.
10
  * @todo Fix "Make Empty Price" option for variable products
@@ -19,7 +19,7 @@ class WCJ_Price_By_User_Role extends WCJ_Module {
19
  /**
20
  * Constructor.
21
  *
22
- * @version 2.5.7
23
  * @since 2.5.0
24
  */
25
  function __construct() {
@@ -39,7 +39,7 @@ class WCJ_Price_By_User_Role extends WCJ_Module {
39
  }
40
  if ( ! is_admin() || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
41
  if ( 'no' === get_option( 'wcj_price_by_user_role_for_bots_disabled', 'no' ) || ! wcj_is_bot() ) {
42
- $this->add_hooks();
43
  }
44
  }
45
  add_filter( 'wcj_save_meta_box_value', array( $this, 'save_meta_box_value' ), PHP_INT_MAX, 3 );
@@ -110,7 +110,7 @@ class WCJ_Price_By_User_Role extends WCJ_Module {
110
  /**
111
  * get_meta_box_options.
112
  *
113
- * @version 2.5.5
114
  * @since 2.5.0
115
  */
116
  function get_meta_box_options() {
@@ -121,7 +121,7 @@ class WCJ_Price_By_User_Role extends WCJ_Module {
121
  $available_variations = $_product->get_available_variations();
122
  foreach ( $available_variations as $variation ) {
123
  $variation_product = wc_get_product( $variation['variation_id'] );
124
- $products[ $variation['variation_id'] ] = ' (' . $variation_product->get_formatted_variation_attributes( true ) . ')';
125
  }
126
  } else {
127
  $products[ $main_product_id ] = '';
@@ -142,7 +142,7 @@ class WCJ_Price_By_User_Role extends WCJ_Module {
142
  'title' => __( 'Enabled', 'woocommerce-jetpack' ),
143
  ),
144
  );
145
- if ( 'yes' === get_post_meta( $_product->id, '_' . 'wcj_price_by_user_role_per_product_settings_enabled', true ) ) {
146
  $visible_roles = get_option( 'wcj_price_by_user_role_per_product_show_roles', '' );
147
  foreach ( $products as $product_id => $desc ) {
148
  foreach ( wcj_get_user_roles() as $role_key => $role_data ) {
@@ -195,35 +195,12 @@ class WCJ_Price_By_User_Role extends WCJ_Module {
195
  }
196
 
197
  /**
198
- * add_hooks.
199
  *
200
- * @version 2.5.0
201
  * @since 2.5.0
202
  */
203
- function add_hooks() {
204
- // Prices
205
- add_filter( 'woocommerce_get_price', array( $this, 'change_price_by_role' ), PHP_INT_MAX - 200, 2 );
206
- add_filter( 'woocommerce_get_sale_price', array( $this, 'change_price_by_role' ), PHP_INT_MAX - 200, 2 );
207
- add_filter( 'woocommerce_get_regular_price', array( $this, 'change_price_by_role' ), PHP_INT_MAX - 200, 2 );
208
- // Variations
209
- add_filter( 'woocommerce_variation_prices_price', array( $this, 'change_price_by_role' ), PHP_INT_MAX - 200, 2 );
210
- add_filter( 'woocommerce_variation_prices_regular_price', array( $this, 'change_price_by_role' ), PHP_INT_MAX - 200, 2 );
211
- add_filter( 'woocommerce_variation_prices_sale_price', array( $this, 'change_price_by_role' ), PHP_INT_MAX - 200, 2 );
212
- add_filter( 'woocommerce_get_variation_prices_hash', array( $this, 'get_variation_prices_hash' ), PHP_INT_MAX - 200, 3 );
213
- // Shipping
214
- add_filter( 'woocommerce_package_rates', array( $this, 'change_price_by_role_shipping' ), PHP_INT_MAX - 200, 2 );
215
- // Grouped products
216
- add_filter( 'woocommerce_get_price_including_tax', array( $this, 'change_price_by_role_grouped' ), PHP_INT_MAX - 200, 3 );
217
- add_filter( 'woocommerce_get_price_excluding_tax', array( $this, 'change_price_by_role_grouped' ), PHP_INT_MAX - 200, 3 );
218
- }
219
-
220
- /**
221
- * change_price_by_role_shipping.
222
- *
223
- * @version 2.5.3
224
- * @since 2.5.0
225
- */
226
- function change_price_by_role_shipping( $package_rates, $package ) {
227
  if ( 'yes' === get_option( 'wcj_price_by_user_role_shipping_enabled', 'no' ) ) {
228
  $current_user_role = wcj_get_current_user_first_role();
229
  $koef = get_option( 'wcj_price_by_user_role_' . $current_user_role, 1 );
@@ -245,59 +222,57 @@ class WCJ_Price_By_User_Role extends WCJ_Module {
245
  }
246
 
247
  /**
248
- * change_price_by_role_grouped.
249
  *
250
- * @version 2.5.0
251
  * @since 2.5.0
252
  */
253
- function change_price_by_role_grouped( $price, $qty, $_product ) {
254
  if ( $_product->is_type( 'grouped' ) ) {
255
  if ( 'yes' === get_option( 'wcj_price_by_user_role_per_product_enabled', 'yes' ) ) {
256
- $get_price_method = 'get_price_' . get_option( 'woocommerce_tax_display_shop' ) . 'uding_tax';
257
  foreach ( $_product->get_children() as $child_id ) {
258
  $the_price = get_post_meta( $child_id, '_price', true );
259
  $the_product = wc_get_product( $child_id );
260
- $the_price = $the_product->$get_price_method( 1, $the_price );
261
  if ( $the_price == $price ) {
262
- return $this->change_price_by_role( $price, $the_product );
263
  }
264
  }
265
  } else {
266
- return $this->change_price_by_role( $price, null );
267
  }
268
  }
269
  return $price;
270
  }
271
 
272
  /**
273
- * change_price_by_role.
274
  *
275
- * @version 2.5.7
276
  * @since 2.5.0
277
  */
278
- function change_price_by_role( $price, $_product ) {
279
 
280
  $current_user_role = wcj_get_current_user_first_role();
281
 
282
  // Per product
283
  if ( 'yes' === get_option( 'wcj_price_by_user_role_per_product_enabled', 'yes' ) ) {
284
- if ( 'yes' === get_post_meta( $_product->id, '_' . 'wcj_price_by_user_role_per_product_settings_enabled', true ) ) {
285
- $the_product_id = ( isset( $_product->variation_id ) ) ? $_product->variation_id : $_product->id;
286
  if ( 'yes' === get_post_meta( $the_product_id, '_' . 'wcj_price_by_user_role_empty_price_' . $current_user_role, true ) ) {
287
  return '';
288
  }
289
  if ( '' != ( $regular_price_per_product = get_post_meta( $the_product_id, '_' . 'wcj_price_by_user_role_regular_price_' . $current_user_role, true ) ) ) {
290
  $the_current_filter = current_filter();
291
  if ( 'woocommerce_get_price_including_tax' == $the_current_filter || 'woocommerce_get_price_excluding_tax' == $the_current_filter ) {
292
- $get_price_method = 'get_price_' . get_option( 'woocommerce_tax_display_shop' ) . 'uding_tax';
293
- return $_product->$get_price_method();
294
- } elseif ( 'woocommerce_get_price' == $the_current_filter || 'woocommerce_variation_prices_price' == $the_current_filter ) {
295
  $sale_price_per_product = get_post_meta( $the_product_id, '_' . 'wcj_price_by_user_role_sale_price_' . $current_user_role, true );
296
  $return = ( '' != $sale_price_per_product && $sale_price_per_product < $regular_price_per_product ) ? $sale_price_per_product : $regular_price_per_product;
297
  return apply_filters( 'wcj_price_by_user_role_get_price', $return, $_product );
298
- } elseif ( 'woocommerce_get_regular_price' == $the_current_filter || 'wcj_price_by_user_role_regular_price_' == $the_current_filter ) {
299
  return $regular_price_per_product;
300
- } elseif ( 'woocommerce_get_sale_price' == $the_current_filter || 'woocommerce_variation_prices_sale_price' == $the_current_filter ) {
301
  $sale_price_per_product = get_post_meta( $the_product_id, '_' . 'wcj_price_by_user_role_sale_price_' . $current_user_role, true );
302
  return ( '' != $sale_price_per_product ) ? $sale_price_per_product : $price;
303
  }
@@ -336,27 +311,6 @@ class WCJ_Price_By_User_Role extends WCJ_Module {
336
  return $price_hash;
337
  }
338
 
339
- /**
340
- * add_settings_hook.
341
- *
342
- * @version 2.5.0
343
- * @since 2.5.0
344
- */
345
- function add_settings_hook() {
346
- add_filter( 'wcj_price_by_user_role_settings', array( $this, 'add_settings' ) );
347
- }
348
-
349
- /**
350
- * get_settings.
351
- *
352
- * @version 2.5.0
353
- * @since 2.5.0
354
- */
355
- function get_settings() {
356
- $settings = apply_filters( 'wcj_price_by_user_role_settings', array() );
357
- return $this->add_standard_settings( $settings );
358
- }
359
-
360
  /**
361
  * add_settings.
362
  *
4
  *
5
  * The WooCommerce Jetpack Price by User Role class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.5.0
9
  * @author Algoritmika Ltd.
10
  * @todo Fix "Make Empty Price" option for variable products
19
  /**
20
  * Constructor.
21
  *
22
+ * @version 2.7.0
23
  * @since 2.5.0
24
  */
25
  function __construct() {
39
  }
40
  if ( ! is_admin() || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
41
  if ( 'no' === get_option( 'wcj_price_by_user_role_for_bots_disabled', 'no' ) || ! wcj_is_bot() ) {
42
+ wcj_add_change_price_hooks( $this, PHP_INT_MAX - 200 );
43
  }
44
  }
45
  add_filter( 'wcj_save_meta_box_value', array( $this, 'save_meta_box_value' ), PHP_INT_MAX, 3 );
110
  /**
111
  * get_meta_box_options.
112
  *
113
+ * @version 2.7.0
114
  * @since 2.5.0
115
  */
116
  function get_meta_box_options() {
121
  $available_variations = $_product->get_available_variations();
122
  foreach ( $available_variations as $variation ) {
123
  $variation_product = wc_get_product( $variation['variation_id'] );
124
+ $products[ $variation['variation_id'] ] = ' (' . wcj_get_product_formatted_variation( $variation_product, true ) . ')';
125
  }
126
  } else {
127
  $products[ $main_product_id ] = '';
142
  'title' => __( 'Enabled', 'woocommerce-jetpack' ),
143
  ),
144
  );
145
+ if ( 'yes' === get_post_meta( wcj_get_product_id( $_product ), '_' . 'wcj_price_by_user_role_per_product_settings_enabled', true ) ) {
146
  $visible_roles = get_option( 'wcj_price_by_user_role_per_product_show_roles', '' );
147
  foreach ( $products as $product_id => $desc ) {
148
  foreach ( wcj_get_user_roles() as $role_key => $role_data ) {
195
  }
196
 
197
  /**
198
+ * change_price_shipping.
199
  *
200
+ * @version 2.7.0
201
  * @since 2.5.0
202
  */
203
+ function change_price_shipping( $package_rates, $package ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
204
  if ( 'yes' === get_option( 'wcj_price_by_user_role_shipping_enabled', 'no' ) ) {
205
  $current_user_role = wcj_get_current_user_first_role();
206
  $koef = get_option( 'wcj_price_by_user_role_' . $current_user_role, 1 );
222
  }
223
 
224
  /**
225
+ * change_price_grouped.
226
  *
227
+ * @version 2.7.0
228
  * @since 2.5.0
229
  */
230
+ function change_price_grouped( $price, $qty, $_product ) {
231
  if ( $_product->is_type( 'grouped' ) ) {
232
  if ( 'yes' === get_option( 'wcj_price_by_user_role_per_product_enabled', 'yes' ) ) {
 
233
  foreach ( $_product->get_children() as $child_id ) {
234
  $the_price = get_post_meta( $child_id, '_price', true );
235
  $the_product = wc_get_product( $child_id );
236
+ $the_price = wcj_get_product_display_price( $the_product, $the_price, 1 );
237
  if ( $the_price == $price ) {
238
+ return $this->change_price( $price, $the_product );
239
  }
240
  }
241
  } else {
242
+ return $this->change_price( $price, null );
243
  }
244
  }
245
  return $price;
246
  }
247
 
248
  /**
249
+ * change_price.
250
  *
251
+ * @version 2.7.0
252
  * @since 2.5.0
253
  */
254
+ function change_price( $price, $_product ) {
255
 
256
  $current_user_role = wcj_get_current_user_first_role();
257
 
258
  // Per product
259
  if ( 'yes' === get_option( 'wcj_price_by_user_role_per_product_enabled', 'yes' ) ) {
260
+ if ( 'yes' === get_post_meta( wcj_get_product_id_or_variation_parent_id( $_product ), '_' . 'wcj_price_by_user_role_per_product_settings_enabled', true ) ) {
261
+ $the_product_id = wcj_get_product_id( $_product );
262
  if ( 'yes' === get_post_meta( $the_product_id, '_' . 'wcj_price_by_user_role_empty_price_' . $current_user_role, true ) ) {
263
  return '';
264
  }
265
  if ( '' != ( $regular_price_per_product = get_post_meta( $the_product_id, '_' . 'wcj_price_by_user_role_regular_price_' . $current_user_role, true ) ) ) {
266
  $the_current_filter = current_filter();
267
  if ( 'woocommerce_get_price_including_tax' == $the_current_filter || 'woocommerce_get_price_excluding_tax' == $the_current_filter ) {
268
+ return wcj_get_product_display_price( $_product );
269
+ } elseif ( WCJ_PRODUCT_GET_PRICE_FILTER == $the_current_filter || 'woocommerce_variation_prices_price' == $the_current_filter || 'woocommerce_product_variation_get_price' == $the_current_filter ) {
 
270
  $sale_price_per_product = get_post_meta( $the_product_id, '_' . 'wcj_price_by_user_role_sale_price_' . $current_user_role, true );
271
  $return = ( '' != $sale_price_per_product && $sale_price_per_product < $regular_price_per_product ) ? $sale_price_per_product : $regular_price_per_product;
272
  return apply_filters( 'wcj_price_by_user_role_get_price', $return, $_product );
273
+ } elseif ( WCJ_PRODUCT_GET_REGULAR_PRICE_FILTER == $the_current_filter || 'woocommerce_variation_prices_regular_price' == $the_current_filter || 'woocommerce_product_variation_get_regular_price' == $the_current_filter ) {
274
  return $regular_price_per_product;
275
+ } elseif ( WCJ_PRODUCT_GET_SALE_PRICE_FILTER == $the_current_filter || 'woocommerce_variation_prices_sale_price' == $the_current_filter || 'woocommerce_product_variation_get_sale_price' == $the_current_filter ) {
276
  $sale_price_per_product = get_post_meta( $the_product_id, '_' . 'wcj_price_by_user_role_sale_price_' . $current_user_role, true );
277
  return ( '' != $sale_price_per_product ) ? $sale_price_per_product : $price;
278
  }
311
  return $price_hash;
312
  }
313
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
314
  /**
315
  * add_settings.
316
  *
includes/class-wcj-price-formats.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Price Formats class.
6
  *
7
- * @version 2.5.8
8
  * @since 2.5.2
9
  * @author Algoritmika Ltd.
10
  */
@@ -88,27 +88,6 @@ class WCJ_Price_Formats extends WCJ_Module {
88
  return apply_filters( 'woocommerce_price_format', $format, $currency_pos );
89
  }
90
 
91
- /**
92
- * add_settings_hook.
93
- *
94
- * @version 2.5.2
95
- * @since 2.5.2
96
- */
97
- function add_settings_hook() {
98
- add_filter( 'wcj_price_formats_settings', array( $this, 'add_settings' ) );
99
- }
100
-
101
- /**
102
- * get_settings.
103
- *
104
- * @version 2.5.2
105
- * @since 2.5.2
106
- */
107
- function get_settings() {
108
- $settings = apply_filters( 'wcj_price_formats_settings', array() );
109
- return $this->add_standard_settings( $settings );
110
- }
111
-
112
  /**
113
  * add_settings.
114
  *
4
  *
5
  * The WooCommerce Jetpack Price Formats class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.5.2
9
  * @author Algoritmika Ltd.
10
  */
88
  return apply_filters( 'woocommerce_price_format', $format, $currency_pos );
89
  }
90
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  /**
92
  * add_settings.
93
  *
includes/class-wcj-price-labels.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Price Labels class.
6
  *
7
- * @version 2.5.8
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -17,9 +17,9 @@ class WCJ_Price_Labels extends WCJ_Module {
17
  /**
18
  * Constructor.
19
  *
20
- * @version 2.5.0
21
  */
22
- public function __construct() {
23
 
24
  $this->id = 'price_labels';
25
  $this->short_desc = __( 'Custom Price Labels', 'woocommerce-jetpack' );
@@ -27,15 +27,6 @@ class WCJ_Price_Labels extends WCJ_Module {
27
  $this->link = 'http://booster.io/features/woocommerce-custom-price-labels/';
28
  parent::__construct();
29
 
30
- $this->add_tools( array(
31
- 'migrate_from_custom_price_labels' => array(
32
- 'title' => __( 'Migrate from Custom Price Labels (Pro)', 'woocommerce-jetpack' ),
33
- 'desc' => __( 'Tool lets you copy all the data (that is labels) from Custom Price labels (Pro) plugin to Booster.', 'woocommerce-jetpack' ),
34
- // 'tab_title' => __( 'Migrate from Custom Price Labels (Pro)', 'woocommerce-jetpack' ),
35
- 'deprecated' => true,
36
- ),
37
- ), array( 'tools_dashboard_hook_priority' => PHP_INT_MAX ) );
38
-
39
  // Custom Price Labels - fields array
40
  $this->custom_tab_group_name = 'wcj_price_labels';// for compatibility with Custom Price Label Pro plugin should use 'simple_is_custom_pricing_label'
41
  $this->custom_tab_sections = array( '_instead', '_before', '_between', '_after', );
@@ -105,133 +96,16 @@ class WCJ_Price_Labels extends WCJ_Module {
105
  'woocommerce_subscriptions_product_price_string',
106
  'woocommerce_variable_subscription_price_html',
107
  );
108
- foreach ( $this->prices_filters as $the_filter )
109
  add_filter( $the_filter, array( $this, 'custom_price' ), 100, 2 );
 
110
  }
111
  }
112
 
113
- /**
114
- * get_migration_new_meta_name.
115
- */
116
- /* public function get_migration_new_meta_name( $old_meta_name ) {
117
- $new_meta_name = str_replace( 'simple_is_custom_pricing_label', 'wcj_price_labels', $old_meta_name );
118
- return $new_meta_name;
119
- } */
120
-
121
- /**
122
- * create_migrate_from_custom_price_labels_tool.
123
- *
124
- * @version 2.5.0
125
- */
126
- public function create_migrate_from_custom_price_labels_tool() {
127
-
128
- echo '<h2>' . __( 'Booster - Migrate from Custom Price Labels (Pro)', 'woocommerce-jetpack' ) . '</h2>';
129
-
130
- $migrate = isset( $_POST['migrate'] ) ? true : false;
131
-
132
- $migration_data = array(
133
- '_simple_is_custom_pricing_label' => '_wcj_price_labels_instead_enabled',
134
- '_simple_is_custom_pricing_label_home' => '_wcj_price_labels_instead_home',
135
- '_simple_is_custom_pricing_label_products' => '_wcj_price_labels_instead_products',
136
- '_simple_is_custom_pricing_label_single' => '_wcj_price_labels_instead_single',
137
- '_simple_is_custom_pricing_label_text' => '_wcj_price_labels_instead_text',
138
-
139
- '_simple_is_custom_pricing_label_before' => '_wcj_price_labels_before_enabled',
140
- '_simple_is_custom_pricing_label_before_home' => '_wcj_price_labels_before_home',
141
- '_simple_is_custom_pricing_label_before_products' => '_wcj_price_labels_before_products',
142
- '_simple_is_custom_pricing_label_before_single' => '_wcj_price_labels_before_single',
143
- '_simple_is_custom_pricing_label_text_before' => '_wcj_price_labels_before_text',
144
-
145
- '_simple_is_custom_pricing_label_between' => '_wcj_price_labels_between_enabled',
146
- '_simple_is_custom_pricing_label_between_home' => '_wcj_price_labels_between_home',
147
- '_simple_is_custom_pricing_label_between_products' => '_wcj_price_labels_between_products',
148
- '_simple_is_custom_pricing_label_between_single' => '_wcj_price_labels_between_single',
149
- '_simple_is_custom_pricing_label_text_between' => '_wcj_price_labels_between_text',
150
-
151
- '_simple_is_custom_pricing_label_after' => '_wcj_price_labels_after_enabled',
152
- '_simple_is_custom_pricing_label_after_home' => '_wcj_price_labels_after_home',
153
- '_simple_is_custom_pricing_label_after_products' => '_wcj_price_labels_after_products',
154
- '_simple_is_custom_pricing_label_after_single' => '_wcj_price_labels_after_single',
155
- '_simple_is_custom_pricing_label_text_after' => '_wcj_price_labels_after_text',
156
- );
157
- $offset = 0;
158
- $block_size = 96;
159
- $html = '<pre><ul>';
160
- while( true ) {
161
- $args = array(
162
- 'post_type' => 'product',
163
- 'posts_per_page' => $block_size,
164
- 'offset' => $offset,
165
- );
166
- $loop = new WP_Query( $args );
167
- if ( ! $loop->have_posts() ) break;
168
- while ( $loop->have_posts() ) : $loop->the_post();
169
- $the_product_id = get_the_ID();
170
- foreach ( $migration_data as $old_meta_name => $new_meta_name ) {
171
- $old_meta_value = get_post_meta( $the_product_id, $old_meta_name, true );
172
- if ( '' != $old_meta_value ) {
173
- // Found Old (Custom Price Labels Plugin) meta to migrate from
174
- $new_meta_value = get_post_meta( $the_product_id, $new_meta_name, true );
175
- if ( $new_meta_value !== $old_meta_value ) {
176
- // Found Old (Custom Price Labels Plugin) meta to migrate to
177
- if ( true === $migrate ) {
178
- // Migrating
179
- $html .= '<li>' . __( 'Migrating (product ID ', 'woocommerce-jetpack' ) . $the_product_id . '): ' . $old_meta_name . '[' . $old_meta_value . ']' . ' -> ' . $new_meta_name . '[' . $new_meta_value . ']. ';// . '</li>';
180
- $html .= __( 'Result: ', 'woocommerce-jetpack' ) . update_post_meta( $the_product_id, $new_meta_name, $old_meta_value );
181
- $html .= '</li>';
182
-
183
- //wp_update_post( array( 'ID' => $the_product_id ) );
184
-
185
- // Fill all data with defaults
186
- foreach ( $this->custom_tab_sections as $custom_tab_section ) {
187
- foreach ( $this->custom_tab_section_variations as $custom_tab_section_variation ) {
188
- $option_name = $this->custom_tab_group_name . $custom_tab_section . $custom_tab_section_variation;
189
- if ( '' == get_post_meta( $the_product_id, '_' . $option_name, true ) ) {
190
- if ( '_text' === $custom_tab_section_variation )
191
- update_post_meta( $the_product_id, '_' . $option_name, '' );
192
- else
193
- update_post_meta( $the_product_id, '_' . $option_name, 'off' );
194
-
195
- //$html .= '<li>' . __( 'Setting defaults for: ', 'woocommerce-jetpack' ) . '_' . $option_name . '</li>';
196
- }
197
- }
198
- }
199
- }
200
- else {
201
- // Info only
202
- $html .= '<li>' . __( 'Found data to migrate (product ID ', 'woocommerce-jetpack' ) . $the_product_id . '): ' . $old_meta_name . '[' . $old_meta_value . ']' . ' -> ' . $new_meta_name . '[' . $new_meta_value . ']' . '</li>';
203
- }
204
- /*if ( true === $do_delete_old ) {
205
- // Delete Old (Custom Price Labels Plugin) meta
206
- $html .= '<li>' . __( 'Deleting: ', 'woocommerce-jetpack' ) . $old_meta_name . '[' . $old_meta_value . ']. ';// . '</li>';
207
- $html .= __( ' Result: ', 'woocommerce-jetpack' ) . delete_post_meta( $the_product_id, $old_meta_name, $old_meta_value );
208
- $html .= '</li>';
209
- }*/
210
- }
211
- //wp_update_post( array( 'ID' => $the_product_id ) );
212
- }
213
- }
214
- endwhile;
215
- $offset += $block_size;
216
- }
217
- if ( '<pre><ul>' == $html )
218
- $html = __( 'No data to migrate found', 'woocommerce-jetpack' );
219
- else
220
- $html .= '</ul></pre>';
221
- wp_reset_postdata();
222
-
223
- $form_html = '<form method="post" action="">';
224
- $form_html .= '<p>' . __( 'Press button below to copy all labels from Custom Price Labels (Pro) plugin. Old labels will NOT be deleted. New labels will be overwritten.', 'woocommerce-jetpack' ) . '</p>';
225
- $form_html .= '<p><input type="submit" class="button-primary" name="migrate" value="' . __( 'Migrate data', 'woocommerce-jetpack' ) . '" /></p>';
226
- $form_html .= '</form>';
227
-
228
- echo $form_html . $html;
229
- }
230
-
231
  /**
232
  * save_custom_price_labels.
233
  */
234
- public function save_custom_price_labels( $post_id, $post ) {
235
 
236
  // $product = get_product( $post );TODO - do I need it?
237
 
@@ -265,7 +139,7 @@ class WCJ_Price_Labels extends WCJ_Module {
265
  *
266
  * @version 2.4.8
267
  */
268
- public function add_price_label_meta_box() {
269
  add_meta_box(
270
  'wc-jetpack-price-labels',
271
  __( 'Booster: Custom Price Labels', 'woocommerce-jetpack' ),
@@ -281,7 +155,7 @@ class WCJ_Price_Labels extends WCJ_Module {
281
  *
282
  * @version 2.4.8
283
  */
284
- public function create_price_label_meta_box() {
285
 
286
  $current_post_id = get_the_ID();
287
  echo '<table style="width:100%;">';
@@ -376,7 +250,7 @@ class WCJ_Price_Labels extends WCJ_Module {
376
  /*
377
  * customize_price
378
  */
379
- public function customize_price( $price, $custom_tab_section, $custom_label ) {
380
 
381
  switch ( $custom_tab_section ) {
382
 
@@ -403,9 +277,9 @@ class WCJ_Price_Labels extends WCJ_Module {
403
  /*
404
  * custom_price - front end.
405
  *
406
- * @version 2.5.8
407
  */
408
- public function custom_price( $price, $product ) {
409
 
410
  if ( ! wcj_is_frontend() ) return $price;
411
 
@@ -415,31 +289,38 @@ class WCJ_Price_Labels extends WCJ_Module {
415
  $product = $product['data'];
416
  }
417
 
418
- if ( 'woocommerce_get_price_html' === $current_filter_name && ! in_array( $product->product_type, apply_filters( 'wcj_price_labels_woocommerce_get_price_html_allowed_post_types', array( 'booking' ), $product->product_type ) ) ) {
 
 
 
 
 
 
 
419
  return $price;
420
  }
421
 
422
- if ( 'subscription' === $product->product_type && 'woocommerce_subscriptions_product_price_string' !== $current_filter_name ) {
423
  return $price;
424
  }
425
 
426
- if ( 'variable-subscription' === $product->product_type && 'woocommerce_variable_subscription_price_html' !== $current_filter_name ) {
427
  return $price;
428
  }
429
 
430
- if ( 'subscription_variation' === $product->product_type && 'woocommerce_subscriptions_product_price_string' !== $current_filter_name ) {
431
  return $price;
432
  }
433
- if ( 'subscription_variation' === $product->product_type && 'woocommerce_subscriptions_product_price_string' === $current_filter_name ) {
434
  $current_filter_name = 'woocommerce_variation_subscription_price_html';
435
  }
436
 
437
  $do_apply_global = true;
438
  $products_incl = get_option( 'wcj_global_price_labels_products_incl', array() );
439
- if ( ! empty( $products_incl ) ) $do_apply_global = ( in_array( $product->id, $products_incl ) ) ? true : false;
440
  $products_excl = get_option( 'wcj_global_price_labels_products_excl', array() );
441
- if ( ! empty( $products_excl ) ) $do_apply_global = ( in_array( $product->id, $products_excl ) ) ? false : true;
442
- $product_categories = get_the_terms( $product->id, 'product_cat' );
443
  $product_categories_incl = get_option( 'wcj_global_price_labels_product_cats_incl', array() );
444
  if ( ! empty( $product_categories_incl ) ) {
445
  $do_apply_global = false;
@@ -507,6 +388,10 @@ class WCJ_Price_Labels extends WCJ_Module {
507
  $text_to_replace_with = apply_filters( 'booster_get_option', '', get_option( 'wcj_global_price_labels_replace_with_text' ) );
508
  if ( '' != $text_to_replace && '' != $text_to_replace_with )
509
  $price = str_replace( $text_to_replace, $text_to_replace_with, $price );
 
 
 
 
510
  }
511
 
512
  // Per product
@@ -520,7 +405,7 @@ class WCJ_Price_Labels extends WCJ_Module {
520
 
521
  //$option_name = $this->custom_tab_group_name;
522
  $option_name = $this->custom_tab_group_name . $custom_tab_section . $custom_tab_section_variation;
523
- $labels_array[ 'variation' . $custom_tab_section_variation ] = get_post_meta( $product->post->ID, '_' . $option_name, true );
524
 
525
  /* if ( $custom_tab_section_variation == '_text' ) {
526
 
@@ -580,9 +465,9 @@ class WCJ_Price_Labels extends WCJ_Module {
580
  }
581
  }
582
 
583
- // return do_shortcode( $price . $current_filter_name . $product->product_type . $labels_array['variation_variable'] . $labels_array['variation_variation'] );
584
  global $wcj_product_id_for_shortcode;
585
- $wcj_product_id_for_shortcode = ( isset( $product->variation_id ) ) ? $product->variation_id : $product->id;
586
  $result = do_shortcode( $price );
587
  $wcj_product_id_for_shortcode = 0;
588
  return $result;
@@ -612,7 +497,7 @@ class WCJ_Price_Labels extends WCJ_Module {
612
  /*
613
  * add_settings.
614
  *
615
- * @version 2.5.5
616
  * @since 2.3.7
617
  */
618
  function add_settings() {
@@ -637,7 +522,7 @@ class WCJ_Price_Labels extends WCJ_Module {
637
  'desc_tip' => __( 'Enter text to add before all products prices. Leave blank to disable.', 'woocommerce-jetpack' ),
638
  'id' => 'wcj_global_price_labels_add_before_text',
639
  'default' => '',
640
- 'type' => 'textarea',
641
  'desc' => apply_filters( 'booster_get_message', '', 'desc' ),
642
  'custom_attributes' => apply_filters( 'booster_get_message', '', 'readonly' ),
643
  'css' => 'width:30%;min-width:300px;',
@@ -647,7 +532,7 @@ class WCJ_Price_Labels extends WCJ_Module {
647
  'desc_tip' => __( 'Enter text to add after all products prices. Leave blank to disable.', 'woocommerce-jetpack' ),
648
  'id' => 'wcj_global_price_labels_add_after_text',
649
  'default' => '',
650
- 'type' => 'textarea',
651
  'css' => 'width:30%;min-width:300px;',
652
  ),
653
  array(
@@ -655,7 +540,7 @@ class WCJ_Price_Labels extends WCJ_Module {
655
  'desc_tip' => __( 'Enter text to add between regular and sale prices. Leave blank to disable.', 'woocommerce-jetpack' ),
656
  'id' => 'wcj_global_price_labels_between_regular_and_sale_text',
657
  'default' => '',
658
- 'type' => 'textarea',
659
  'desc' => apply_filters( 'booster_get_message', '', 'desc' ),
660
  'custom_attributes' => apply_filters( 'booster_get_message', '', 'readonly' ),
661
  'css' => 'width:30%;min-width:300px;',
@@ -666,7 +551,7 @@ class WCJ_Price_Labels extends WCJ_Module {
666
  'desc_tip' => __( 'Enter text to remove from all products prices. Leave blank to disable.', 'woocommerce-jetpack' ),
667
  'id' => 'wcj_global_price_labels_remove_text',
668
  'default' => '',
669
- 'type' => 'textarea',
670
  'desc' => apply_filters( 'booster_get_message', '', 'desc' ),
671
  'custom_attributes' => apply_filters( 'booster_get_message', '', 'readonly' ),
672
  'css' => 'width:30%;min-width:300px;',
@@ -676,7 +561,7 @@ class WCJ_Price_Labels extends WCJ_Module {
676
  'desc_tip' => __( 'Enter text to replace in all products prices. Leave blank to disable.', 'woocommerce-jetpack' ),
677
  'id' => 'wcj_global_price_labels_replace_text',
678
  'default' => '',
679
- 'type' => 'textarea',
680
  'desc' => apply_filters( 'booster_get_message', '', 'desc' ),
681
  'custom_attributes'
682
  => apply_filters( 'booster_get_message', '', 'readonly' ),
@@ -687,11 +572,19 @@ class WCJ_Price_Labels extends WCJ_Module {
687
  'desc_tip' => __( 'Enter text to replace with. Leave blank to disable.', 'woocommerce-jetpack' ),
688
  'id' => 'wcj_global_price_labels_replace_with_text',
689
  'default' => '',
690
- 'type' => 'textarea',
691
  'desc' => apply_filters( 'booster_get_message', '', 'desc' ),
692
  'custom_attributes' => apply_filters( 'booster_get_message', '', 'readonly' ),
693
  'css' => 'width:30%;min-width:300px;',
694
  ),
 
 
 
 
 
 
 
 
695
  array(
696
  'title' => __( 'Products - Include', 'woocommerce-jetpack' ),
697
  'desc_tip' => __( 'Apply global price labels only for selected products. Leave blank to disable the option.', 'woocommerce-jetpack' ),
4
  *
5
  * The WooCommerce Jetpack Price Labels class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
17
  /**
18
  * Constructor.
19
  *
20
+ * @version 2.7.0
21
  */
22
+ function __construct() {
23
 
24
  $this->id = 'price_labels';
25
  $this->short_desc = __( 'Custom Price Labels', 'woocommerce-jetpack' );
27
  $this->link = 'http://booster.io/features/woocommerce-custom-price-labels/';
28
  parent::__construct();
29
 
 
 
 
 
 
 
 
 
 
30
  // Custom Price Labels - fields array
31
  $this->custom_tab_group_name = 'wcj_price_labels';// for compatibility with Custom Price Label Pro plugin should use 'simple_is_custom_pricing_label'
32
  $this->custom_tab_sections = array( '_instead', '_before', '_between', '_after', );
96
  'woocommerce_subscriptions_product_price_string',
97
  'woocommerce_variable_subscription_price_html',
98
  );
99
+ foreach ( $this->prices_filters as $the_filter ) {
100
  add_filter( $the_filter, array( $this, 'custom_price' ), 100, 2 );
101
+ }
102
  }
103
  }
104
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
105
  /**
106
  * save_custom_price_labels.
107
  */
108
+ function save_custom_price_labels( $post_id, $post ) {
109
 
110
  // $product = get_product( $post );TODO - do I need it?
111
 
139
  *
140
  * @version 2.4.8
141
  */
142
+ function add_price_label_meta_box() {
143
  add_meta_box(
144
  'wc-jetpack-price-labels',
145
  __( 'Booster: Custom Price Labels', 'woocommerce-jetpack' ),
155
  *
156
  * @version 2.4.8
157
  */
158
+ function create_price_label_meta_box() {
159
 
160
  $current_post_id = get_the_ID();
161
  echo '<table style="width:100%;">';
250
  /*
251
  * customize_price
252
  */
253
+ function customize_price( $price, $custom_tab_section, $custom_label ) {
254
 
255
  switch ( $custom_tab_section ) {
256
 
277
  /*
278
  * custom_price - front end.
279
  *
280
+ * @version 2.7.0
281
  */
282
+ function custom_price( $price, $product ) {
283
 
284
  if ( ! wcj_is_frontend() ) return $price;
285
 
289
  $product = $product['data'];
290
  }
291
 
292
+ $_product_id = wcj_get_product_id_or_variation_parent_id( $product );
293
+ $_product_type = ( WCJ_IS_WC_VERSION_BELOW_3 ? $product->product_type : $product->get_type() );
294
+
295
+ if ( WCJ_IS_WC_VERSION_BELOW_3 && 'woocommerce_get_price_html' === $current_filter_name && ! in_array( $_product_type, apply_filters( 'wcj_price_labels_woocommerce_get_price_html_allowed_post_types', array( 'booking' ), $_product_type ) ) ) {
296
+ return $price;
297
+ }
298
+
299
+ if ( ! WCJ_IS_WC_VERSION_BELOW_3 && 'woocommerce_variable_price_html' === $current_filter_name ) {
300
  return $price;
301
  }
302
 
303
+ if ( 'subscription' === $_product_type && 'woocommerce_subscriptions_product_price_string' !== $current_filter_name ) {
304
  return $price;
305
  }
306
 
307
+ if ( 'variable-subscription' === $_product_type && 'woocommerce_variable_subscription_price_html' !== $current_filter_name ) {
308
  return $price;
309
  }
310
 
311
+ if ( 'subscription_variation' === $_product_type && 'woocommerce_subscriptions_product_price_string' !== $current_filter_name ) {
312
  return $price;
313
  }
314
+ if ( 'subscription_variation' === $_product_type && 'woocommerce_subscriptions_product_price_string' === $current_filter_name ) {
315
  $current_filter_name = 'woocommerce_variation_subscription_price_html';
316
  }
317
 
318
  $do_apply_global = true;
319
  $products_incl = get_option( 'wcj_global_price_labels_products_incl', array() );
320
+ if ( ! empty( $products_incl ) ) $do_apply_global = ( in_array( $_product_id, $products_incl ) ) ? true : false;
321
  $products_excl = get_option( 'wcj_global_price_labels_products_excl', array() );
322
+ if ( ! empty( $products_excl ) ) $do_apply_global = ( in_array( $_product_id, $products_excl ) ) ? false : true;
323
+ $product_categories = get_the_terms( $_product_id, 'product_cat' );
324
  $product_categories_incl = get_option( 'wcj_global_price_labels_product_cats_incl', array() );
325
  if ( ! empty( $product_categories_incl ) ) {
326
  $do_apply_global = false;
388
  $text_to_replace_with = apply_filters( 'booster_get_option', '', get_option( 'wcj_global_price_labels_replace_with_text' ) );
389
  if ( '' != $text_to_replace && '' != $text_to_replace_with )
390
  $price = str_replace( $text_to_replace, $text_to_replace_with, $price );
391
+ // Global price labels - Instead of the price
392
+ if ( '' != ( $text_instead = get_option( 'wcj_global_price_labels_instead_text', '' ) ) ) {
393
+ $price = $text_instead;
394
+ }
395
  }
396
 
397
  // Per product
405
 
406
  //$option_name = $this->custom_tab_group_name;
407
  $option_name = $this->custom_tab_group_name . $custom_tab_section . $custom_tab_section_variation;
408
+ $labels_array[ 'variation' . $custom_tab_section_variation ] = get_post_meta( $_product_id, '_' . $option_name, true );
409
 
410
  /* if ( $custom_tab_section_variation == '_text' ) {
411
 
465
  }
466
  }
467
 
468
+ // return do_shortcode( $price . $current_filter_name . ( WCJ_IS_WC_VERSION_BELOW_3 ? $product->product_type : $product->get_type() ) . $labels_array['variation_variable'] . $labels_array['variation_variation'] );
469
  global $wcj_product_id_for_shortcode;
470
+ $wcj_product_id_for_shortcode = wcj_get_product_id( $product );
471
  $result = do_shortcode( $price );
472
  $wcj_product_id_for_shortcode = 0;
473
  return $result;
497
  /*
498
  * add_settings.
499
  *
500
+ * @version 2.7.0
501
  * @since 2.3.7
502
  */
503
  function add_settings() {
522
  'desc_tip' => __( 'Enter text to add before all products prices. Leave blank to disable.', 'woocommerce-jetpack' ),
523
  'id' => 'wcj_global_price_labels_add_before_text',
524
  'default' => '',
525
+ 'type' => 'custom_textarea',
526
  'desc' => apply_filters( 'booster_get_message', '', 'desc' ),
527
  'custom_attributes' => apply_filters( 'booster_get_message', '', 'readonly' ),
528
  'css' => 'width:30%;min-width:300px;',
532
  'desc_tip' => __( 'Enter text to add after all products prices. Leave blank to disable.', 'woocommerce-jetpack' ),
533
  'id' => 'wcj_global_price_labels_add_after_text',
534
  'default' => '',
535
+ 'type' => 'custom_textarea',
536
  'css' => 'width:30%;min-width:300px;',
537
  ),
538
  array(
540
  'desc_tip' => __( 'Enter text to add between regular and sale prices. Leave blank to disable.', 'woocommerce-jetpack' ),
541
  'id' => 'wcj_global_price_labels_between_regular_and_sale_text',
542
  'default' => '',
543
+ 'type' => 'custom_textarea',
544
  'desc' => apply_filters( 'booster_get_message', '', 'desc' ),
545
  'custom_attributes' => apply_filters( 'booster_get_message', '', 'readonly' ),
546
  'css' => 'width:30%;min-width:300px;',
551
  'desc_tip' => __( 'Enter text to remove from all products prices. Leave blank to disable.', 'woocommerce-jetpack' ),
552
  'id' => 'wcj_global_price_labels_remove_text',
553
  'default' => '',
554
+ 'type' => 'custom_textarea',
555
  'desc' => apply_filters( 'booster_get_message', '', 'desc' ),
556
  'custom_attributes' => apply_filters( 'booster_get_message', '', 'readonly' ),
557
  'css' => 'width:30%;min-width:300px;',
561
  'desc_tip' => __( 'Enter text to replace in all products prices. Leave blank to disable.', 'woocommerce-jetpack' ),
562
  'id' => 'wcj_global_price_labels_replace_text',
563
  'default' => '',
564
+ 'type' => 'custom_textarea',
565
  'desc' => apply_filters( 'booster_get_message', '', 'desc' ),
566
  'custom_attributes'
567
  => apply_filters( 'booster_get_message', '', 'readonly' ),
572
  'desc_tip' => __( 'Enter text to replace with. Leave blank to disable.', 'woocommerce-jetpack' ),
573
  'id' => 'wcj_global_price_labels_replace_with_text',
574
  'default' => '',
575
+ 'type' => 'custom_textarea',
576
  'desc' => apply_filters( 'booster_get_message', '', 'desc' ),
577
  'custom_attributes' => apply_filters( 'booster_get_message', '', 'readonly' ),
578
  'css' => 'width:30%;min-width:300px;',
579
  ),
580
+ array(
581
+ 'title' => __( 'Instead of the price', 'woocommerce-jetpack' ),
582
+ 'desc_tip' => __( 'Enter text to display instead of the price. Leave blank to disable.', 'woocommerce-jetpack' ),
583
+ 'id' => 'wcj_global_price_labels_instead_text',
584
+ 'default' => '',
585
+ 'type' => 'custom_textarea',
586
+ 'css' => 'width:30%;min-width:300px;',
587
+ ),
588
  array(
589
  'title' => __( 'Products - Include', 'woocommerce-jetpack' ),
590
  'desc_tip' => __( 'Apply global price labels only for selected products. Leave blank to disable the option.', 'woocommerce-jetpack' ),
includes/class-wcj-product-add-to-cart.php CHANGED
@@ -20,7 +20,7 @@ class WCJ_Product_Add_To_Cart extends WCJ_Module {
20
  *
21
  * @version 2.6.0
22
  */
23
- public function __construct() {
24
 
25
  $this->id = 'product_add_to_cart';
26
  $this->short_desc = __( 'Product Add to Cart', 'woocommerce-jetpack' );
@@ -339,6 +339,7 @@ class WCJ_Product_Add_To_Cart extends WCJ_Module {
339
  *
340
  * @version 2.5.2
341
  * @since 2.5.2
 
342
  */
343
  function enqueue_disable_quantity_add_to_cart_script() {
344
  if (
@@ -364,6 +365,7 @@ class WCJ_Product_Add_To_Cart extends WCJ_Module {
364
  *
365
  * @version 2.4.8
366
  * @since 2.4.8
 
367
  */
368
  function change_variable_add_to_cart_template( $located, $template_name, $args, $template_path, $default_path ) {
369
  if ( 'single-product/add-to-cart/variable.php' == $template_name ) {
@@ -371,6 +373,7 @@ class WCJ_Product_Add_To_Cart extends WCJ_Module {
371
  }
372
  return $located;
373
  }
 
374
  /*
375
  * redirect_to_url.
376
  */
@@ -386,7 +389,7 @@ class WCJ_Product_Add_To_Cart extends WCJ_Module {
386
  /*
387
  * Add item to cart on visit.
388
  *
389
- * @version 2.6.0
390
  */
391
  function add_to_cart_on_visit() {
392
  if ( ! is_admin() && ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) && is_product() && ( $product_id = get_the_ID() ) ) {
@@ -401,7 +404,7 @@ class WCJ_Product_Add_To_Cart extends WCJ_Module {
401
  if ( sizeof( WC()->cart->get_cart() ) > 0 ) {
402
  foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
403
  $_product = $values['data'];
404
- if ( $_product->id == $product_id ) {
405
  // Product found - do not add it
406
  return;
407
  }
@@ -419,7 +422,7 @@ class WCJ_Product_Add_To_Cart extends WCJ_Module {
419
  /**
420
  * get_settings.
421
  *
422
- * @version 2.6.0
423
  */
424
  function get_settings() {
425
  $settings = array(
@@ -439,7 +442,11 @@ class WCJ_Product_Add_To_Cart extends WCJ_Module {
439
  array(
440
  'title' => __( 'Local Redirect URL', 'woocommerce-jetpack' ),
441
  'desc_tip' => __( 'Performs a safe (local) redirect, using wp_redirect().', 'woocommerce-jetpack' ),
442
- 'desc' => __( 'Local redirect URL. Leave empty to redirect to checkout.', 'woocommerce-jetpack' ),
 
 
 
 
443
  'id' => 'wcj_add_to_cart_redirect_url',
444
  'default' => '',
445
  'type' => 'text',
@@ -463,8 +470,8 @@ class WCJ_Product_Add_To_Cart extends WCJ_Module {
463
  'type' => 'select',
464
  'options' => array(
465
  'no' => __( 'Disabled', 'woocommerce-jetpack' ),
466
- 'yes' => __( 'All Products', 'woocommerce-jetpack' ),
467
- 'per_product' => __( 'Per Product', 'woocommerce-jetpack' ),
468
  ),
469
  ),
470
  array(
20
  *
21
  * @version 2.6.0
22
  */
23
+ function __construct() {
24
 
25
  $this->id = 'product_add_to_cart';
26
  $this->short_desc = __( 'Product Add to Cart', 'woocommerce-jetpack' );
339
  *
340
  * @version 2.5.2
341
  * @since 2.5.2
342
+ * @todo add "hide" (not just disable) option
343
  */
344
  function enqueue_disable_quantity_add_to_cart_script() {
345
  if (
365
  *
366
  * @version 2.4.8
367
  * @since 2.4.8
368
+ * @todo fix - variations images to changing (maybe check Crowdfunding plugin)
369
  */
370
  function change_variable_add_to_cart_template( $located, $template_name, $args, $template_path, $default_path ) {
371
  if ( 'single-product/add-to-cart/variable.php' == $template_name ) {
373
  }
374
  return $located;
375
  }
376
+
377
  /*
378
  * redirect_to_url.
379
  */
389
  /*
390
  * Add item to cart on visit.
391
  *
392
+ * @version 2.7.0
393
  */
394
  function add_to_cart_on_visit() {
395
  if ( ! is_admin() && ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) && is_product() && ( $product_id = get_the_ID() ) ) {
404
  if ( sizeof( WC()->cart->get_cart() ) > 0 ) {
405
  foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
406
  $_product = $values['data'];
407
+ if ( wcj_get_product_id_or_variation_parent_id( $_product ) == $product_id ) {
408
  // Product found - do not add it
409
  return;
410
  }
422
  /**
423
  * get_settings.
424
  *
425
+ * @version 2.7.0
426
  */
427
  function get_settings() {
428
  $settings = array(
442
  array(
443
  'title' => __( 'Local Redirect URL', 'woocommerce-jetpack' ),
444
  'desc_tip' => __( 'Performs a safe (local) redirect, using wp_redirect().', 'woocommerce-jetpack' ),
445
+ 'desc' => __( 'Local redirect URL. Leave empty to redirect to checkout.', 'woocommerce-jetpack' ) .
446
+ ' ' . sprintf(
447
+ __( 'For archives - "Enable AJAX add to cart buttons on archives" checkbox in <a href="%s">WooCommerce > Settings > Products > Display</a> must be disabled.', 'woocommerce-jetpack' ),
448
+ admin_url( 'admin.php?page=wc-settings&tab=products&section=display' )
449
+ ),
450
  'id' => 'wcj_add_to_cart_redirect_url',
451
  'default' => '',
452
  'type' => 'text',
470
  'type' => 'select',
471
  'options' => array(
472
  'no' => __( 'Disabled', 'woocommerce-jetpack' ),
473
+ 'yes' => __( 'All products', 'woocommerce-jetpack' ),
474
+ 'per_product' => __( 'Per product', 'woocommerce-jetpack' ),
475
  ),
476
  ),
477
  array(
includes/class-wcj-product-addons.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Product Addons class.
6
  *
7
- * @version 2.5.6
8
  * @since 2.5.3
9
  * @author Algoritmika Ltd.
10
  * @todo admin order view (names);
@@ -19,7 +19,7 @@ class WCJ_Product_Addons extends WCJ_Module {
19
  /**
20
  * Constructor.
21
  *
22
- * @version 2.5.6
23
  * @since 2.5.3
24
  */
25
  function __construct() {
@@ -53,7 +53,8 @@ class WCJ_Product_Addons extends WCJ_Module {
53
  add_filter( 'woocommerce_get_cart_item_from_session', array( $this, 'get_cart_item_addons_price_from_session' ), PHP_INT_MAX, 3 );
54
  add_filter( 'woocommerce_add_to_cart_validation', array( $this, 'validate_on_add_to_cart' ), PHP_INT_MAX, 2 );
55
  // Prices
56
- add_filter( 'woocommerce_get_price', array( $this, 'change_price' ), PHP_INT_MAX - 100, 2 );
 
57
  // Show details at cart, order details, emails
58
  add_filter( 'woocommerce_cart_item_name', array( $this, 'add_info_to_cart_item_name' ), PHP_INT_MAX, 3 );
59
  add_filter( 'woocommerce_order_item_name', array( $this, 'add_info_to_order_item_name' ), PHP_INT_MAX, 2 );
@@ -117,7 +118,7 @@ class WCJ_Product_Addons extends WCJ_Module {
117
  /**
118
  * price_change_ajax.
119
  *
120
- * @version 2.5.6
121
  * @since 2.5.3
122
  */
123
  function price_change_ajax( $param ) {
@@ -145,7 +146,7 @@ class WCJ_Product_Addons extends WCJ_Module {
145
  }
146
  if ( 0 != $the_addons_price ) {
147
  $the_price = $the_product->get_price();
148
- $the_display_price = $the_product->get_display_price( $the_price + $the_addons_price );
149
  echo wc_price( $the_display_price );
150
  } else {
151
  echo $the_product->get_price_html();
@@ -156,15 +157,15 @@ class WCJ_Product_Addons extends WCJ_Module {
156
  /**
157
  * enqueue_scripts.
158
  *
159
- * @version 2.5.3
160
  * @since 2.5.3
161
  */
162
  function enqueue_scripts() {
163
  if ( is_product() ) {
164
  $the_product = wc_get_product();
165
- $addons = $this->get_product_addons( $the_product->id );
166
  if ( ! empty( $addons ) ) {
167
- wp_enqueue_script( 'wcj-product-addons', wcj_plugin_url() . '/includes/js/wcj-product-addons.js', array(), false, true );
168
  wp_localize_script( 'wcj-product-addons', 'ajax_object', array(
169
  'ajax_url' => admin_url( 'admin-ajax.php' ),
170
  'product_id' => get_the_ID(),
@@ -247,7 +248,7 @@ class WCJ_Product_Addons extends WCJ_Module {
247
  /**
248
  * Adds info to order details (and emails).
249
  *
250
- * @version 2.5.6
251
  * @since 2.5.3
252
  */
253
  function add_info_to_order_item_name( $name, $item, $is_cart = false ) {
@@ -267,7 +268,7 @@ class WCJ_Product_Addons extends WCJ_Module {
267
  if ( isset( $item[ $addon['price_key'] ] ) ) {
268
  $name .= str_replace(
269
  array( '%addon_label%', '%addon_price%' ),
270
- array( $item[ $addon['label_key'] ], wc_price( $_product->get_display_price( $item[ $addon['price_key'] ] ) ) ),
271
  $item_format
272
  );
273
  }
@@ -289,11 +290,11 @@ class WCJ_Product_Addons extends WCJ_Module {
289
  /**
290
  * change_price.
291
  *
292
- * @version 2.5.6
293
  * @since 2.5.3
294
  */
295
  function change_price( $price, $_product ) {
296
- $addons = $this->get_product_addons( $_product->id );
297
  foreach ( $addons as $addon ) {
298
  if ( isset( $_product->{$addon['price_key']} ) ) {
299
  $price += $_product->{$addon['price_key']};
@@ -305,11 +306,11 @@ class WCJ_Product_Addons extends WCJ_Module {
305
  /**
306
  * add_addons_price_to_cart_item.
307
  *
308
- * @version 2.5.6
309
  * @since 2.5.3
310
  */
311
  function add_addons_price_to_cart_item( $cart_item_data, $cart_item_key ) {
312
- $addons = $this->get_product_addons( $cart_item_data['data']->product_id );
313
  foreach ( $addons as $addon ) {
314
  if ( isset( $cart_item_data[ $addon['price_key'] ] ) ) {
315
  $cart_item_data['data']->{$addon['price_key']} = $cart_item_data[ $addon['price_key'] ];
@@ -368,7 +369,7 @@ class WCJ_Product_Addons extends WCJ_Module {
368
  /**
369
  * add_addons_to_frontend.
370
  *
371
- * @version 2.5.6
372
  * @since 2.5.3
373
  */
374
  function add_addons_to_frontend() {
@@ -389,7 +390,7 @@ class WCJ_Product_Addons extends WCJ_Module {
389
  '';
390
  $html .= '<p>' .
391
  '<input type="checkbox" id="' . $addon['checkbox_key'] . '" name="' . $addon['checkbox_key'] . '"' . $is_checked . $is_required . '>' . ' ' .
392
- '<label for="' . $addon['checkbox_key'] . '">' . $addon['label_value'] . ' ('. wc_price( $_product->get_display_price( $addon['price_value'] ) ) . ')' . '</label>' .
393
  $maybe_tooltip .
394
  '</p>';
395
  } elseif ( 'radio' === $addon['type'] ) {
@@ -410,7 +411,7 @@ class WCJ_Product_Addons extends WCJ_Module {
410
  '';
411
  $html .= '<p>' .
412
  '<input type="radio" id="' . $addon['checkbox_key'] . '-' . $label . '" name="' . $addon['checkbox_key'] . '" value="' . $label . '"' . $is_checked . $is_required . '>' . ' ' .
413
- '<label for="' . $addon['checkbox_key'] . '-' . $label . '">' . $labels[ $i ] . ' ('. wc_price( $_product->get_display_price( $prices[ $i ] ) ) . ')' . '</label>' .
414
  $maybe_tooltip .
415
  '</p>';
416
  }
4
  *
5
  * The WooCommerce Jetpack Product Addons class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.5.3
9
  * @author Algoritmika Ltd.
10
  * @todo admin order view (names);
19
  /**
20
  * Constructor.
21
  *
22
+ * @version 2.7.0
23
  * @since 2.5.3
24
  */
25
  function __construct() {
53
  add_filter( 'woocommerce_get_cart_item_from_session', array( $this, 'get_cart_item_addons_price_from_session' ), PHP_INT_MAX, 3 );
54
  add_filter( 'woocommerce_add_to_cart_validation', array( $this, 'validate_on_add_to_cart' ), PHP_INT_MAX, 2 );
55
  // Prices
56
+ add_filter( WCJ_PRODUCT_GET_PRICE_FILTER, array( $this, 'change_price' ), PHP_INT_MAX - 100, 2 );
57
+ add_filter( 'woocommerce_product_variation_get_price', array( $this, 'change_price' ), PHP_INT_MAX - 100, 2 );
58
  // Show details at cart, order details, emails
59
  add_filter( 'woocommerce_cart_item_name', array( $this, 'add_info_to_cart_item_name' ), PHP_INT_MAX, 3 );
60
  add_filter( 'woocommerce_order_item_name', array( $this, 'add_info_to_order_item_name' ), PHP_INT_MAX, 2 );
118
  /**
119
  * price_change_ajax.
120
  *
121
+ * @version 2.7.0
122
  * @since 2.5.3
123
  */
124
  function price_change_ajax( $param ) {
146
  }
147
  if ( 0 != $the_addons_price ) {
148
  $the_price = $the_product->get_price();
149
+ $the_display_price = wcj_get_product_display_price( $the_product, ( $the_price + $the_addons_price ) );
150
  echo wc_price( $the_display_price );
151
  } else {
152
  echo $the_product->get_price_html();
157
  /**
158
  * enqueue_scripts.
159
  *
160
+ * @version 2.7.0
161
  * @since 2.5.3
162
  */
163
  function enqueue_scripts() {
164
  if ( is_product() ) {
165
  $the_product = wc_get_product();
166
+ $addons = $this->get_product_addons( wcj_get_product_id_or_variation_parent_id( $the_product ) );
167
  if ( ! empty( $addons ) ) {
168
+ wp_enqueue_script( 'wcj-product-addons', wcj_plugin_url() . '/includes/js/wcj-product-addons.js', array(), WCJ()->version, true );
169
  wp_localize_script( 'wcj-product-addons', 'ajax_object', array(
170
  'ajax_url' => admin_url( 'admin-ajax.php' ),
171
  'product_id' => get_the_ID(),
248
  /**
249
  * Adds info to order details (and emails).
250
  *
251
+ * @version 2.7.0
252
  * @since 2.5.3
253
  */
254
  function add_info_to_order_item_name( $name, $item, $is_cart = false ) {
268
  if ( isset( $item[ $addon['price_key'] ] ) ) {
269
  $name .= str_replace(
270
  array( '%addon_label%', '%addon_price%' ),
271
+ array( $item[ $addon['label_key'] ], wc_price( wcj_get_product_display_price( $_product, $item[ $addon['price_key'] ] ) ) ),
272
  $item_format
273
  );
274
  }
290
  /**
291
  * change_price.
292
  *
293
+ * @version 2.7.0
294
  * @since 2.5.3
295
  */
296
  function change_price( $price, $_product ) {
297
+ $addons = $this->get_product_addons( wcj_get_product_id_or_variation_parent_id( $_product ) );
298
  foreach ( $addons as $addon ) {
299
  if ( isset( $_product->{$addon['price_key']} ) ) {
300
  $price += $_product->{$addon['price_key']};
306
  /**
307
  * add_addons_price_to_cart_item.
308
  *
309
+ * @version 2.7.0
310
  * @since 2.5.3
311
  */
312
  function add_addons_price_to_cart_item( $cart_item_data, $cart_item_key ) {
313
+ $addons = $this->get_product_addons( ( WCJ_IS_WC_VERSION_BELOW_3 ? $cart_item_data['data']->product_id : $cart_item_data['data']->get_id() ) );
314
  foreach ( $addons as $addon ) {
315
  if ( isset( $cart_item_data[ $addon['price_key'] ] ) ) {
316
  $cart_item_data['data']->{$addon['price_key']} = $cart_item_data[ $addon['price_key'] ];
369
  /**
370
  * add_addons_to_frontend.
371
  *
372
+ * @version 2.7.0
373
  * @since 2.5.3
374
  */
375
  function add_addons_to_frontend() {
390
  '';
391
  $html .= '<p>' .
392
  '<input type="checkbox" id="' . $addon['checkbox_key'] . '" name="' . $addon['checkbox_key'] . '"' . $is_checked . $is_required . '>' . ' ' .
393
+ '<label for="' . $addon['checkbox_key'] . '">' . $addon['label_value'] . ' ('. wc_price( wcj_get_product_display_price( $_product, $addon['price_value'] ) ) . ')' . '</label>' .
394
  $maybe_tooltip .
395
  '</p>';
396
  } elseif ( 'radio' === $addon['type'] ) {
411
  '';
412
  $html .= '<p>' .
413
  '<input type="radio" id="' . $addon['checkbox_key'] . '-' . $label . '" name="' . $addon['checkbox_key'] . '" value="' . $label . '"' . $is_checked . $is_required . '>' . ' ' .
414
+ '<label for="' . $addon['checkbox_key'] . '-' . $label . '">' . $labels[ $i ] . ' ('. wc_price( wcj_get_product_display_price( $_product, $prices[ $i ] ) ) . ')' . '</label>' .
415
  $maybe_tooltip .
416
  '</p>';
417
  }
includes/class-wcj-product-bookings.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Product Bookings class.
6
  *
7
- * @version 2.5.3
8
  * @since 2.5.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -18,7 +18,7 @@ class WCJ_Product_Bookings extends WCJ_Module {
18
  /**
19
  * Constructor.
20
  *
21
- * @version 2.5.3
22
  * @since 2.5.0
23
  */
24
  function __construct() {
@@ -39,7 +39,8 @@ class WCJ_Product_Bookings extends WCJ_Module {
39
  add_action( 'wp_ajax_price_change', array( $this, 'price_change_ajax' ) );
40
  add_action( 'wp_ajax_nopriv_price_change', array( $this, 'price_change_ajax' ) );
41
  // Prices
42
- add_filter( 'woocommerce_get_price', array( $this, 'change_price' ), PHP_INT_MAX - 100, 2 );
 
43
  // Single Page
44
  add_action( 'woocommerce_before_add_to_cart_button', array( $this, 'add_input_fields_to_frontend' ), PHP_INT_MAX );
45
  // Add to cart
@@ -96,18 +97,17 @@ class WCJ_Product_Bookings extends WCJ_Module {
96
  /**
97
  * price_change_ajax.
98
  *
99
- * @version 2.5.0
100
  * @since 2.5.0
101
  */
102
  function price_change_ajax( $param ) {
103
- if ( isset( $_POST['date_from'] ) && '' != $_POST['date_from'] && isset( $_POST['date_to'] ) && '' != $_POST['date_to'] ) {
104
  $date_to = strtotime( $_POST['date_to'] );
105
  $date_from = strtotime( $_POST['date_from'] );
106
  $seconds_diff = $date_to - $date_from;
107
  $days_diff = ( $seconds_diff / 60 / 60 / 24 );
108
  $the_product = wc_get_product( $_POST['product_id'] );
109
- $get_price_method = 'get_price_' . get_option( 'woocommerce_tax_display_shop' ) . 'uding_tax';
110
- $price_per_day = $the_product->$get_price_method();
111
  $the_price = $days_diff * $price_per_day;
112
  echo wc_price( $the_price );
113
  }
@@ -117,14 +117,14 @@ class WCJ_Product_Bookings extends WCJ_Module {
117
  /**
118
  * enqueue_scripts.
119
  *
120
- * @version 2.5.2
121
  * @since 2.5.0
122
  */
123
  function enqueue_scripts() {
124
  if ( is_product() ) {
125
  $the_product = wc_get_product();
126
  if ( $this->is_bookings_product( $the_product ) ) {
127
- wp_enqueue_script( 'wcj-bookings', wcj_plugin_url() . '/includes/js/wcj-bookings.js', array(), false, true );
128
  wp_localize_script( 'wcj-bookings', 'ajax_object', array(
129
  'ajax_url' => admin_url( 'admin-ajax.php' ),
130
  'product_id' => get_the_ID(),
@@ -148,11 +148,11 @@ class WCJ_Product_Bookings extends WCJ_Module {
148
  /**
149
  * add_to_cart_url.
150
  *
151
- * @version 2.5.0
152
  * @since 2.5.0
153
  */
154
  function add_to_cart_url( $url, $_product ) {
155
- return ( $this->is_bookings_product( $_product ) ) ? get_permalink( $_product->id ) : $url;
156
  }
157
 
158
  /**
@@ -391,11 +391,11 @@ class WCJ_Product_Bookings extends WCJ_Module {
391
  /**
392
  * is_bookings_product.
393
  *
394
- * @version 2.5.0
395
  * @since 2.5.0
396
  */
397
  function is_bookings_product( $_product ) {
398
- return ( 'yes' === get_post_meta( $_product->id, '_' . 'wcj_product_bookings_enabled', true ) ) ? true : false;
399
  }
400
 
401
  /**
4
  *
5
  * The WooCommerce Jetpack Product Bookings class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.5.0
9
  * @author Algoritmika Ltd.
10
  */
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 2.7.0
22
  * @since 2.5.0
23
  */
24
  function __construct() {
39
  add_action( 'wp_ajax_price_change', array( $this, 'price_change_ajax' ) );
40
  add_action( 'wp_ajax_nopriv_price_change', array( $this, 'price_change_ajax' ) );
41
  // Prices
42
+ add_filter( WCJ_PRODUCT_GET_PRICE_FILTER, array( $this, 'change_price' ), PHP_INT_MAX - 100, 2 );
43
+ add_filter( 'woocommerce_product_variation_get_price', array( $this, 'change_price' ), PHP_INT_MAX - 100, 2 );
44
  // Single Page
45
  add_action( 'woocommerce_before_add_to_cart_button', array( $this, 'add_input_fields_to_frontend' ), PHP_INT_MAX );
46
  // Add to cart
97
  /**
98
  * price_change_ajax.
99
  *
100
+ * @version 2.7.0
101
  * @since 2.5.0
102
  */
103
  function price_change_ajax( $param ) {
104
+ if ( isset( $_POST['date_from'] ) && '' != $_POST['date_from'] && isset( $_POST['date_to'] ) && '' != $_POST['date_to'] && isset( $_POST['product_id'] ) && '' != $_POST['product_id'] ) {
105
  $date_to = strtotime( $_POST['date_to'] );
106
  $date_from = strtotime( $_POST['date_from'] );
107
  $seconds_diff = $date_to - $date_from;
108
  $days_diff = ( $seconds_diff / 60 / 60 / 24 );
109
  $the_product = wc_get_product( $_POST['product_id'] );
110
+ $price_per_day = wcj_get_product_display_price( $the_product );
 
111
  $the_price = $days_diff * $price_per_day;
112
  echo wc_price( $the_price );
113
  }
117
  /**
118
  * enqueue_scripts.
119
  *
120
+ * @version 2.7.0
121
  * @since 2.5.0
122
  */
123
  function enqueue_scripts() {
124
  if ( is_product() ) {
125
  $the_product = wc_get_product();
126
  if ( $this->is_bookings_product( $the_product ) ) {
127
+ wp_enqueue_script( 'wcj-bookings', wcj_plugin_url() . '/includes/js/wcj-bookings.js', array(), WCJ()->version, true );
128
  wp_localize_script( 'wcj-bookings', 'ajax_object', array(
129
  'ajax_url' => admin_url( 'admin-ajax.php' ),
130
  'product_id' => get_the_ID(),
148
  /**
149
  * add_to_cart_url.
150
  *
151
+ * @version 2.7.0
152
  * @since 2.5.0
153
  */
154
  function add_to_cart_url( $url, $_product ) {
155
+ return ( $this->is_bookings_product( $_product ) ) ? get_permalink( wcj_get_product_id_or_variation_parent_id( $_product ) ) : $url;
156
  }
157
 
158
  /**
391
  /**
392
  * is_bookings_product.
393
  *
394
+ * @version 2.7.0
395
  * @since 2.5.0
396
  */
397
  function is_bookings_product( $_product ) {
398
+ return ( 'yes' === get_post_meta( wcj_get_product_id_or_variation_parent_id( $_product ), '_' . 'wcj_product_bookings_enabled', true ) ) ? true : false;
399
  }
400
 
401
  /**
includes/class-wcj-product-bulk-price-converter.php CHANGED
@@ -6,6 +6,7 @@
6
  *
7
  * @version 2.5.0
8
  * @author Algoritmika Ltd.
 
9
  */
10
 
11
  if ( ! defined( 'ABSPATH' ) ) exit;
6
  *
7
  * @version 2.5.0
8
  * @author Algoritmika Ltd.
9
+ * @todo clear products transients after converting prices
10
  */
11
 
12
  if ( ! defined( 'ABSPATH' ) ) exit;
includes/class-wcj-product-by-user-role.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Product by User Role class.
6
  *
7
- * @version 2.6.0
8
  * @since 2.5.5
9
  * @author Algoritmika Ltd.
10
  */
@@ -49,39 +49,28 @@ class WCJ_Product_By_User_Role extends WCJ_Module {
49
  /**
50
  * product_by_user_role_pre_get_posts.
51
  *
52
- * @version 2.6.0
53
  * @since 2.6.0
 
54
  */
55
  function product_by_user_role_pre_get_posts( $query ) {
56
-
57
  if ( is_admin() ) {
58
  return;
59
  }
60
-
61
  remove_action( 'pre_get_posts', array( $this, 'product_by_user_role_pre_get_posts' ) );
62
  $current_user_roles = wcj_get_current_user_all_roles();
63
  $post__not_in = array();
64
  $args = $query->query;
65
- $offset = 0;
66
- $block_size = 256;
67
- while( true ) {
68
- $args['posts_per_page'] = $block_size;
69
- $args['offset'] = $offset;
70
- $args['fields'] = 'ids';
71
- $loop = new WP_Query( $args );
72
- if ( ! $loop->have_posts() ) {
73
- break;
74
- }
75
- foreach ( $loop->posts as $product_id ) {
76
- $visible_user_roles = get_post_meta( $product_id, '_' . 'wcj_product_by_user_role_visible', true );
77
- if ( is_array( $visible_user_roles ) && ! empty( $visible_user_roles ) ) {
78
- $the_intersect = array_intersect( $visible_user_roles, $current_user_roles );
79
- if ( empty( $the_intersect ) ) {
80
- $post__not_in[] = $product_id;
81
- }
82
  }
83
  }
84
- $offset += $block_size;
85
  }
86
  $query->set( 'post__not_in', $post__not_in );
87
  add_action( 'pre_get_posts', array( $this, 'product_by_user_role_pre_get_posts' ) );
@@ -90,11 +79,11 @@ class WCJ_Product_By_User_Role extends WCJ_Module {
90
  /**
91
  * product_by_user_role_purchasable.
92
  *
93
- * @version 2.6.0
94
  * @since 2.6.0
95
  */
96
  function product_by_user_role_purchasable( $purchasable, $_product ) {
97
- return $this->product_by_user_role_visibility( $purchasable, $_product->id );
98
  }
99
 
100
  /**
4
  *
5
  * The WooCommerce Jetpack Product by User Role class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.5.5
9
  * @author Algoritmika Ltd.
10
  */
49
  /**
50
  * product_by_user_role_pre_get_posts.
51
  *
52
+ * @version 2.7.0
53
  * @since 2.6.0
54
+ * @todo add same option to all "Product Visibility" modules (e.g. "Product Visibility by Country")
55
  */
56
  function product_by_user_role_pre_get_posts( $query ) {
 
57
  if ( is_admin() ) {
58
  return;
59
  }
 
60
  remove_action( 'pre_get_posts', array( $this, 'product_by_user_role_pre_get_posts' ) );
61
  $current_user_roles = wcj_get_current_user_all_roles();
62
  $post__not_in = array();
63
  $args = $query->query;
64
+ $args['fields'] = 'ids';
65
+ $loop = new WP_Query( $args );
66
+ foreach ( $loop->posts as $product_id ) {
67
+ $visible_user_roles = get_post_meta( $product_id, '_' . 'wcj_product_by_user_role_visible', true );
68
+ if ( is_array( $visible_user_roles ) && ! empty( $visible_user_roles ) ) {
69
+ $the_intersect = array_intersect( $visible_user_roles, $current_user_roles );
70
+ if ( empty( $the_intersect ) ) {
71
+ $post__not_in[] = $product_id;
 
 
 
 
 
 
 
 
 
72
  }
73
  }
 
74
  }
75
  $query->set( 'post__not_in', $post__not_in );
76
  add_action( 'pre_get_posts', array( $this, 'product_by_user_role_pre_get_posts' ) );
79
  /**
80
  * product_by_user_role_purchasable.
81
  *
82
+ * @version 2.7.0
83
  * @since 2.6.0
84
  */
85
  function product_by_user_role_purchasable( $purchasable, $_product ) {
86
+ return $this->product_by_user_role_visibility( $purchasable, wcj_get_product_id_or_variation_parent_id( $_product ) );
87
  }
88
 
89
  /**
includes/class-wcj-product-by-user.php CHANGED
@@ -21,7 +21,7 @@ class WCJ_Product_By_User extends WCJ_Module {
21
  * @version 2.5.7
22
  * @since 2.5.2
23
  */
24
- public function __construct() {
25
 
26
  $this->id = 'product_by_user';
27
  $this->short_desc = __( 'User Products', 'woocommerce-jetpack' );
21
  * @version 2.5.7
22
  * @since 2.5.2
23
  */
24
+ function __construct() {
25
 
26
  $this->id = 'product_by_user';
27
  $this->short_desc = __( 'User Products', 'woocommerce-jetpack' );
includes/class-wcj-product-custom-info.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Product Custom Info class.
6
  *
7
- * @version 2.6.0
8
  * @since 2.4.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -20,7 +20,7 @@ class WCJ_Product_Custom_info extends WCJ_Module {
20
  *
21
  * @version 2.5.3
22
  */
23
- public function __construct() {
24
 
25
  $this->id = 'product_custom_info';
26
  $this->short_desc = __( 'Product Info', 'woocommerce-jetpack' );
@@ -76,22 +76,6 @@ class WCJ_Product_Custom_info extends WCJ_Module {
76
  }
77
  }
78
 
79
- /**
80
- * get_settings.
81
- */
82
- function get_settings() {
83
- $settings = array();
84
- $settings = apply_filters( 'wcj_product_custom_info_settings', $settings );
85
- return $this->add_standard_settings( $settings );
86
- }
87
-
88
- /*
89
- * add_settings_hook.
90
- */
91
- function add_settings_hook() {
92
- add_filter( 'wcj_product_custom_info_settings', array( $this, 'add_settings' ) );
93
- }
94
-
95
  /**
96
  * add_settings.
97
  *
4
  *
5
  * The WooCommerce Jetpack Product Custom Info class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.4.0
9
  * @author Algoritmika Ltd.
10
  */
20
  *
21
  * @version 2.5.3
22
  */
23
+ function __construct() {
24
 
25
  $this->id = 'product_custom_info';
26
  $this->short_desc = __( 'Product Info', 'woocommerce-jetpack' );
76
  }
77
  }
78
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  /**
80
  * add_settings.
81
  *
includes/class-wcj-product-images.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Product Images class.
6
  *
7
- * @version 2.5.2
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -18,7 +18,7 @@ class WCJ_Product_Images extends WCJ_Module {
18
  /**
19
  * Constructor.
20
  *
21
- * @version 2.5.2
22
  */
23
  function __construct() {
24
 
@@ -48,7 +48,7 @@ class WCJ_Product_Images extends WCJ_Module {
48
  add_action( 'woocommerce_before_shop_loop_item_title', array( $this, 'hide_per_product_image_on_archives_end' ), PHP_INT_MAX );
49
 
50
  // Single Product Thumbnails Columns Number
51
- add_filter( 'woocommerce_product_thumbnails_columns', array( $this, 'change_product_thumbnails_columns_number' ) );
52
 
53
  // Per product options
54
  add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
@@ -169,13 +169,15 @@ class WCJ_Product_Images extends WCJ_Module {
169
 
170
  /**
171
  * customize_sale_flash.
 
 
172
  */
173
  function customize_sale_flash( $sale_flash_html, $post, $product ) {
174
  // Hiding
175
  if ( 'yes' === get_option( 'wcj_product_images_sale_flash_hide_on_archives', 'no' ) && is_archive() ) {
176
  return '';
177
  }
178
- if ( 'yes' === get_option( 'wcj_product_images_sale_flash_hide_on_single', 'no' ) && is_single() && get_the_ID() === $product->id ) {
179
  return '';
180
  }
181
  // Content
4
  *
5
  * The WooCommerce Jetpack Product Images class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 2.7.0
22
  */
23
  function __construct() {
24
 
48
  add_action( 'woocommerce_before_shop_loop_item_title', array( $this, 'hide_per_product_image_on_archives_end' ), PHP_INT_MAX );
49
 
50
  // Single Product Thumbnails Columns Number
51
+ add_filter( 'woocommerce_product_thumbnails_columns', array( $this, 'change_product_thumbnails_columns_number' ), PHP_INT_MAX );
52
 
53
  // Per product options
54
  add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
169
 
170
  /**
171
  * customize_sale_flash.
172
+ *
173
+ * @version 2.7.0
174
  */
175
  function customize_sale_flash( $sale_flash_html, $post, $product ) {
176
  // Hiding
177
  if ( 'yes' === get_option( 'wcj_product_images_sale_flash_hide_on_archives', 'no' ) && is_archive() ) {
178
  return '';
179
  }
180
+ if ( 'yes' === get_option( 'wcj_product_images_sale_flash_hide_on_single', 'no' ) && is_single() && get_the_ID() === wcj_get_product_id_or_variation_parent_id( $product ) ) {
181
  return '';
182
  }
183
  // Content
includes/class-wcj-product-info.php CHANGED
@@ -146,7 +146,7 @@ class WCJ_Product_Info extends WCJ_Module {
146
  /**
147
  * add_product_info_filters.
148
  */
149
- public function add_product_info_filters( $single_or_archive ) {
150
  // Product Info
151
  if ( ( 'yes' === get_option( 'wcj_product_info_on_' . $single_or_archive . '_enabled' ) ) &&
152
  ( '' != get_option( 'wcj_product_info_on_' . $single_or_archive ) ) &&
@@ -164,7 +164,7 @@ class WCJ_Product_Info extends WCJ_Module {
164
  *
165
  * @version 2.4.0
166
  */
167
- public function product_info() {
168
  $the_action_name = current_filter();
169
  if ( array_key_exists( $the_action_name, $this->product_info_on_archive_filters_array ) ) {
170
  $the_product_info = get_option( 'wcj_product_info_on_archive' );
@@ -181,7 +181,7 @@ class WCJ_Product_Info extends WCJ_Module {
181
  /**
182
  * more_product_info.
183
  */
184
- public function more_product_info() {
185
  $the_action_name = current_filter();
186
  if ( array_key_exists( $the_action_name, $this->product_info_on_archive_filters_array ) )
187
  $this->add_more_product_info( 'archive' );
@@ -194,7 +194,7 @@ class WCJ_Product_Info extends WCJ_Module {
194
  *
195
  * @version 2.4.0
196
  */
197
- public function add_more_product_info( $single_or_archive ) {
198
  //$single_or_archive = 'archive';
199
  for ( $i = 1; $i <= apply_filters( 'booster_get_option', 4, get_option( 'wcj_more_product_info_on_' . $single_or_archive . '_fields_total', 4 ) ); $i++ ) {
200
  $field_id = 'wcj_more_product_info_on_' . $single_or_archive . '_' . $i ;
@@ -209,7 +209,7 @@ class WCJ_Product_Info extends WCJ_Module {
209
  *
210
  * @version 2.4.0
211
  */
212
- public function apply_product_info_short_codes( $the_product_info, $remove_on_empty ) {
213
 
214
  $product_ids_to_exclude = get_option( 'wcj_product_info_products_to_exclude', '' );
215
  if ( '' != $product_ids_to_exclude ) {
146
  /**
147
  * add_product_info_filters.
148
  */
149
+ function add_product_info_filters( $single_or_archive ) {
150
  // Product Info
151
  if ( ( 'yes' === get_option( 'wcj_product_info_on_' . $single_or_archive . '_enabled' ) ) &&
152
  ( '' != get_option( 'wcj_product_info_on_' . $single_or_archive ) ) &&
164
  *
165
  * @version 2.4.0
166
  */
167
+ function product_info() {
168
  $the_action_name = current_filter();
169
  if ( array_key_exists( $the_action_name, $this->product_info_on_archive_filters_array ) ) {
170
  $the_product_info = get_option( 'wcj_product_info_on_archive' );
181
  /**
182
  * more_product_info.
183
  */
184
+ function more_product_info() {
185
  $the_action_name = current_filter();
186
  if ( array_key_exists( $the_action_name, $this->product_info_on_archive_filters_array ) )
187
  $this->add_more_product_info( 'archive' );
194
  *
195
  * @version 2.4.0
196
  */
197
+ function add_more_product_info( $single_or_archive ) {
198
  //$single_or_archive = 'archive';
199
  for ( $i = 1; $i <= apply_filters( 'booster_get_option', 4, get_option( 'wcj_more_product_info_on_' . $single_or_archive . '_fields_total', 4 ) ); $i++ ) {
200
  $field_id = 'wcj_more_product_info_on_' . $single_or_archive . '_' . $i ;
209
  *
210
  * @version 2.4.0
211
  */
212
+ function apply_product_info_short_codes( $the_product_info, $remove_on_empty ) {
213
 
214
  $product_ids_to_exclude = get_option( 'wcj_product_info_products_to_exclude', '' );
215
  if ( '' != $product_ids_to_exclude ) {
includes/class-wcj-product-input-fields.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Product Input Fields class.
6
  *
7
- * @version 2.5.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -114,7 +114,7 @@ class WCJ_Product_Input_Fields extends WCJ_Module {
114
  /**
115
  * get_settings.
116
  *
117
- * @version 2.5.0
118
  */
119
  function get_settings() {
120
 
@@ -176,7 +176,7 @@ class WCJ_Product_Input_Fields extends WCJ_Module {
176
 
177
  array(
178
  'title' => __( 'Product Input Fields Number', 'woocommerce-jetpack' ),
179
- 'desc_tip' => __( 'Click "Save changes" after you change this number.', 'woocommerce-jetpack' ),
180
  'id' => 'wcj_product_input_fields_global_total_number',
181
  'default' => 1,
182
  'type' => 'custom_number',
4
  *
5
  * The WooCommerce Jetpack Product Input Fields class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
114
  /**
115
  * get_settings.
116
  *
117
+ * @version 2.7.0
118
  */
119
  function get_settings() {
120
 
176
 
177
  array(
178
  'title' => __( 'Product Input Fields Number', 'woocommerce-jetpack' ),
179
+ 'desc_tip' => __( 'Click Save changes after you change this number.', 'woocommerce-jetpack' ),
180
  'id' => 'wcj_product_input_fields_global_total_number',
181
  'default' => 1,
182
  'type' => 'custom_number',
includes/class-wcj-product-listings.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Product Listings class.
6
  *
7
- * @version 2.6.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -17,12 +17,12 @@ class WCJ_Product_Listings extends WCJ_Module {
17
  /**
18
  * Constructor.
19
  *
20
- * @version 2.6.0
21
  */
22
- public function __construct() {
23
  $this->id = 'product_listings';
24
  $this->short_desc = __( 'Product Listings', 'woocommerce-jetpack' );
25
- $this->desc = __( 'Change WooCommerce display options for shop and category pages: show/hide categories count, exclude categories, show/hide empty categories. Add "products per page" selector.', 'woocommerce-jetpack' );
26
  $this->link = 'http://booster.io/features/woocommerce-product-listings/';
27
  parent::__construct();
28
 
@@ -32,7 +32,7 @@ class WCJ_Product_Listings extends WCJ_Module {
32
 
33
  // Exclude and Hide Empty
34
  add_filter( 'woocommerce_product_subcategories_args', array( $this, 'filter_subcategories' ), 100 );
35
- add_filter( 'woocommerce_product_subcategories_hide_empty', array( $this, 'filter_subcategories_show_empty' ), 100 );
36
 
37
  // Hide Count
38
  if ( 'yes' === get_option( 'wcj_product_listings_hide_cats_count_on_shop' ) || 'yes' === get_option( 'wcj_product_listings_hide_cats_count_on_archive' ) ) {
@@ -97,7 +97,7 @@ class WCJ_Product_Listings extends WCJ_Module {
97
  /**
98
  * remove_subcategory_count.
99
  */
100
- public function remove_subcategory_count( $count_html ) {
101
  if (
102
  ( is_shop() && 'yes' === get_option( 'wcj_product_listings_hide_cats_count_on_shop' ) ) ||
103
  ( ! is_shop() && 'yes' === apply_filters( 'booster_get_option', 'wcj', get_option( 'wcj_product_listings_hide_cats_count_on_archive' ) ) )
@@ -109,22 +109,20 @@ class WCJ_Product_Listings extends WCJ_Module {
109
 
110
  /**
111
  * filter_subcategories.
 
 
112
  */
113
- public function filter_subcategories( $args ) {
114
- if ( is_shop() ) {
115
- $args['exclude'] = get_option( 'wcj_product_listings_exclude_cats_on_shop' );
116
- $args['hide_empty'] = ( 'yes' === get_option( 'wcj_product_listings_hide_empty_cats_on_shop' ) ) ? 1 : 0; // deprecated?
117
- } else {
118
- $args['exclude'] = get_option( 'wcj_product_listings_exclude_cats_on_archives' );
119
- $args['hide_empty'] = ( 'yes' === get_option( 'wcj_product_listings_hide_empty_cats_on_archives' ) ) ? 1 : 0; // deprecated?
120
- }
121
  return $args;
122
  }
123
 
124
  /**
125
  * hide_products_by_disabling_loop.
126
  */
127
- public function hide_products_by_disabling_loop() {
128
  // If we are hiding products disable the loop and pagination
129
  global $wp_query;
130
  if (
@@ -146,63 +144,62 @@ class WCJ_Product_Listings extends WCJ_Module {
146
  }
147
 
148
  /**
149
- * filter_subcategories_show_empty.
 
 
150
  */
151
- public function filter_subcategories_show_empty() {
152
 
153
  // Not the best solution, but it's the only place I found to put it...
154
  $this->hide_products_by_disabling_loop();
155
 
156
- $show_empty = false;
157
- if ( is_shop() ) {
158
- $show_empty = ( 'yes' === get_option( 'wcj_product_listings_hide_empty_cats_on_shop' ) ) ? false : true;
159
- } else {
160
- $show_empty = ( 'yes' === get_option( 'wcj_product_listings_hide_empty_cats_on_archives' ) ) ? false : true;
161
- }
162
-
163
- return $show_empty;
164
- }
165
-
166
- /**
167
- * get_settings.
168
- *
169
- * @version 2.6.0
170
- */
171
- function get_settings() {
172
- return $this->add_standard_settings( apply_filters( 'wcj_product_listings_settings', array() ) );
173
- }
174
 
175
- /*
176
- * add_settings_hook.
177
- *
178
- * @version 2.5.5
179
- * @since 2.5.5
180
- */
181
- function add_settings_hook() {
182
- add_filter( 'wcj_product_listings_settings', array( $this, 'add_settings' ) );
183
  }
184
 
185
  /*
186
  * add_settings.
187
  *
188
- * @version 2.6.0
189
  * @since 2.5.5
190
  */
191
  function add_settings() {
192
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
193
  $product_cats = array();
194
  $product_categories = get_terms( 'product_cat', 'orderby=name&hide_empty=0' );
195
  foreach ( $product_categories as $product_category ) {
196
  $product_cats[ $product_category->term_id ] = $product_category->name;
197
  }
198
 
 
199
  $products = wcj_get_products();
200
 
 
201
  $settings = array(
202
  array(
203
  'title' => __( 'Shop Page Display Options', 'woocommerce-jetpack' ),
204
  'type' => 'title',
205
- 'desc' => __( 'This will work only when "Shop Page Display" in "WooCommerce > Settings > Products > Product Listings" is set to "Show subcategories" or "Show both".', 'woocommerce-jetpack' ),
 
 
 
206
  'id' => 'wcj_product_listings_shop_page_options',
207
  ),
208
  array(
@@ -214,11 +211,13 @@ class WCJ_Product_Listings extends WCJ_Module {
214
  ),
215
  array(
216
  'title' => __( 'Exclude Categories', 'woocommerce-jetpack' ),
217
- 'desc_tip' => __(' Excludes one or more categories from the shop page. This parameter takes a comma-separated list of categories by unique ID, in ascending order. Leave blank to disable.', 'woocommerce-jetpack' ),
218
  'id' => 'wcj_product_listings_exclude_cats_on_shop',
219
  'default' => '',
220
- 'type' => 'text',
221
- 'css' => 'width:50%;min-width:300px;',
 
 
222
  ),
223
  array(
224
  'title' => __( 'Hide Empty', 'woocommerce-jetpack' ),
@@ -241,7 +240,10 @@ class WCJ_Product_Listings extends WCJ_Module {
241
  array(
242
  'title' => __( 'Category Display Options', 'woocommerce-jetpack' ),
243
  'type' => 'title',
244
- 'desc' => __( 'This will work only when "Default Category Display" in "WooCommerce > Settings > Products > Product Listings" is set to "Show subcategories" or "Show both".', 'woocommerce-jetpack' ),
 
 
 
245
  'id' => 'wcj_product_listings_archive_pages_options',
246
  ),
247
  array(
@@ -255,11 +257,13 @@ class WCJ_Product_Listings extends WCJ_Module {
255
  ),
256
  array(
257
  'title' => __( 'Exclude Subcategories', 'woocommerce-jetpack' ),
258
- 'desc_tip' => __(' Excludes one or more categories from the category (archive) pages. This parameter takes a comma-separated list of categories by unique ID, in ascending order. Leave blank to disable.', 'woocommerce-jetpack' ),
259
  'id' => 'wcj_product_listings_exclude_cats_on_archives',
260
  'default' => '',
261
- 'type' => 'text',
262
- 'css' => 'width:50%;min-width:300px;',
 
 
263
  ),
264
  array(
265
  'title' => __( 'Hide Empty', 'woocommerce-jetpack' ),
4
  *
5
  * The WooCommerce Jetpack Product Listings class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
17
  /**
18
  * Constructor.
19
  *
20
+ * @version 2.7.0
21
  */
22
+ function __construct() {
23
  $this->id = 'product_listings';
24
  $this->short_desc = __( 'Product Listings', 'woocommerce-jetpack' );
25
+ $this->desc = __( 'Change WooCommerce display options for shop and category pages: show/hide categories count, exclude categories, show/hide empty categories.', 'woocommerce-jetpack' );
26
  $this->link = 'http://booster.io/features/woocommerce-product-listings/';
27
  parent::__construct();
28
 
32
 
33
  // Exclude and Hide Empty
34
  add_filter( 'woocommerce_product_subcategories_args', array( $this, 'filter_subcategories' ), 100 );
35
+ add_filter( 'woocommerce_product_subcategories_hide_empty', array( $this, 'filter_subcategories_hide_empty' ), 100 );
36
 
37
  // Hide Count
38
  if ( 'yes' === get_option( 'wcj_product_listings_hide_cats_count_on_shop' ) || 'yes' === get_option( 'wcj_product_listings_hide_cats_count_on_archive' ) ) {
97
  /**
98
  * remove_subcategory_count.
99
  */
100
+ function remove_subcategory_count( $count_html ) {
101
  if (
102
  ( is_shop() && 'yes' === get_option( 'wcj_product_listings_hide_cats_count_on_shop' ) ) ||
103
  ( ! is_shop() && 'yes' === apply_filters( 'booster_get_option', 'wcj', get_option( 'wcj_product_listings_hide_cats_count_on_archive' ) ) )
109
 
110
  /**
111
  * filter_subcategories.
112
+ *
113
+ * @version 2.7.0
114
  */
115
+ function filter_subcategories( $args ) {
116
+ $args['exclude'] = ( is_shop() ) ?
117
+ get_option( 'wcj_product_listings_exclude_cats_on_shop', '' ) :
118
+ get_option( 'wcj_product_listings_exclude_cats_on_archives', '' );
 
 
 
 
119
  return $args;
120
  }
121
 
122
  /**
123
  * hide_products_by_disabling_loop.
124
  */
125
+ function hide_products_by_disabling_loop() {
126
  // If we are hiding products disable the loop and pagination
127
  global $wp_query;
128
  if (
144
  }
145
 
146
  /**
147
+ * filter_subcategories_hide_empty.
148
+ *
149
+ * @version 2.7.0
150
  */
151
+ function filter_subcategories_hide_empty() {
152
 
153
  // Not the best solution, but it's the only place I found to put it...
154
  $this->hide_products_by_disabling_loop();
155
 
156
+ $hide_empty = ( is_shop() ) ?
157
+ ( 'yes' === get_option( 'wcj_product_listings_hide_empty_cats_on_shop', 'yes' ) ) :
158
+ ( 'yes' === get_option( 'wcj_product_listings_hide_empty_cats_on_archives', 'yes' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
159
 
160
+ return $hide_empty;
 
 
 
 
 
 
 
161
  }
162
 
163
  /*
164
  * add_settings.
165
  *
166
+ * @version 2.7.0
167
  * @since 2.5.5
168
  */
169
  function add_settings() {
170
 
171
+ // Handle deprecated option types
172
+ $options = array(
173
+ 'wcj_product_listings_exclude_cats_on_shop',
174
+ 'wcj_product_listings_exclude_cats_on_archives',
175
+ );
176
+ foreach ( $options as $option ) {
177
+ $value = get_option( $option, '' );
178
+ if ( ! is_array( $value ) ) {
179
+ $value = explode( ',', str_replace( ' ', '', $value ) );
180
+ update_option( $option, $value );
181
+ }
182
+ }
183
+
184
+ // Prepare categories
185
  $product_cats = array();
186
  $product_categories = get_terms( 'product_cat', 'orderby=name&hide_empty=0' );
187
  foreach ( $product_categories as $product_category ) {
188
  $product_cats[ $product_category->term_id ] = $product_category->name;
189
  }
190
 
191
+ // Prepare products
192
  $products = wcj_get_products();
193
 
194
+ // Settings
195
  $settings = array(
196
  array(
197
  'title' => __( 'Shop Page Display Options', 'woocommerce-jetpack' ),
198
  'type' => 'title',
199
+ 'desc' => sprintf(
200
+ __( 'You can control what is shown on the product archive in <a href="%s">WooCommerce > Settings > Products > Display > Shop page display</a>.', 'woocommerce-jetpack' ),
201
+ admin_url( 'admin.php?page=wc-settings&tab=products&section=display' )
202
+ ),
203
  'id' => 'wcj_product_listings_shop_page_options',
204
  ),
205
  array(
211
  ),
212
  array(
213
  'title' => __( 'Exclude Categories', 'woocommerce-jetpack' ),
214
+ 'desc_tip' => __(' Excludes one or more categories from the shop page. Leave blank to disable.', 'woocommerce-jetpack' ),
215
  'id' => 'wcj_product_listings_exclude_cats_on_shop',
216
  'default' => '',
217
+ 'type' => 'multiselect',
218
+ 'class' => 'chosen_select',
219
+ 'css' => 'width: 450px;',
220
+ 'options' => $product_cats,
221
  ),
222
  array(
223
  'title' => __( 'Hide Empty', 'woocommerce-jetpack' ),
240
  array(
241
  'title' => __( 'Category Display Options', 'woocommerce-jetpack' ),
242
  'type' => 'title',
243
+ 'desc' => sprintf(
244
+ __( 'You can control what is shown on category archives in <a href="%s">WooCommerce > Settings > Products > Display > Default category display</a>.', 'woocommerce-jetpack' ),
245
+ admin_url( 'admin.php?page=wc-settings&tab=products&section=display' )
246
+ ),
247
  'id' => 'wcj_product_listings_archive_pages_options',
248
  ),
249
  array(
257
  ),
258
  array(
259
  'title' => __( 'Exclude Subcategories', 'woocommerce-jetpack' ),
260
+ 'desc_tip' => __(' Excludes one or more categories from the category (archive) pages. Leave blank to disable.', 'woocommerce-jetpack' ),
261
  'id' => 'wcj_product_listings_exclude_cats_on_archives',
262
  'default' => '',
263
+ 'type' => 'multiselect',
264
+ 'class' => 'chosen_select',
265
+ 'css' => 'width: 450px;',
266
+ 'options' => $product_cats,
267
  ),
268
  array(
269
  'title' => __( 'Hide Empty', 'woocommerce-jetpack' ),
includes/class-wcj-product-open-pricing.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Product Open Pricing class.
6
  *
7
- * @version 2.6.0
8
  * @since 2.4.8
9
  * @author Algoritmika Ltd.
10
  */
@@ -18,7 +18,7 @@ class WCJ_Product_Open_Pricing extends WCJ_Module {
18
  /**
19
  * Constructor.
20
  *
21
- * @version 2.5.0
22
  * @since 2.4.8
23
  */
24
  function __construct() {
@@ -32,7 +32,8 @@ class WCJ_Product_Open_Pricing extends WCJ_Module {
32
  if ( $this->is_enabled() ) {
33
  add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
34
  add_action( 'save_post_product', array( $this, 'save_meta_box' ), PHP_INT_MAX, 2 );
35
- add_filter( 'woocommerce_get_price', array( $this, 'get_open_price' ), PHP_INT_MAX, 2 );
 
36
  add_filter( 'woocommerce_get_price_html', array( $this, 'hide_original_price' ), PHP_INT_MAX, 2 );
37
  add_filter( 'woocommerce_get_variation_price_html', array( $this, 'hide_original_price' ), PHP_INT_MAX, 2 );
38
  add_filter( 'woocommerce_is_sold_individually', array( $this, 'hide_quantity_input_field' ), PHP_INT_MAX, 2 );
@@ -53,11 +54,11 @@ class WCJ_Product_Open_Pricing extends WCJ_Module {
53
  /**
54
  * is_open_price_product.
55
  *
56
- * @version 2.4.8
57
  * @since 2.4.8
58
  */
59
  function is_open_price_product( $_product ) {
60
- return ( 'yes' === get_post_meta( $_product->id, '_' . 'wcj_product_open_price_enabled', true ) ) ? true : false;
61
  }
62
 
63
  /**
@@ -136,8 +137,9 @@ class WCJ_Product_Open_Pricing extends WCJ_Module {
136
  /**
137
  * is_purchasable.
138
  *
139
- * @version 2.4.8
140
  * @since 2.4.8
 
141
  */
142
  function is_purchasable( $purchasable, $_product ) {
143
  if ( $this->is_open_price_product( $_product ) ) {
@@ -152,7 +154,7 @@ class WCJ_Product_Open_Pricing extends WCJ_Module {
152
  $purchasable = false; */
153
 
154
  // Check the product is published
155
- } elseif ( $_product->post->post_status !== 'publish' && ! current_user_can( 'edit_post', $_product->id ) ) {
156
  $purchasable = false;
157
  }
158
  }
@@ -215,11 +217,11 @@ class WCJ_Product_Open_Pricing extends WCJ_Module {
215
  /**
216
  * add_to_cart_url.
217
  *
218
- * @version 2.4.8
219
  * @since 2.4.8
220
  */
221
  function add_to_cart_url( $url, $_product ) {
222
- return ( $this->is_open_price_product( $_product ) ) ? get_permalink( $_product->id ) : $url;
223
  }
224
 
225
  /**
@@ -325,7 +327,7 @@ class WCJ_Product_Open_Pricing extends WCJ_Module {
325
  /**
326
  * add_open_price_input_field_to_frontend.
327
  *
328
- * @version 2.6.0
329
  * @since 2.4.8
330
  */
331
  function add_open_price_input_field_to_frontend() {
@@ -334,9 +336,10 @@ class WCJ_Product_Open_Pricing extends WCJ_Module {
334
  // Title
335
  $title = get_option( 'wcj_product_open_price_label_frontend', __( 'Name Your Price', 'woocommerce-jetpack' ) );
336
  // Prices
337
- $min_price = get_post_meta( $the_product->id, '_' . 'wcj_product_open_price_min_price', true );
338
- $max_price = get_post_meta( $the_product->id, '_' . 'wcj_product_open_price_max_price', true );
339
- $default_price = get_post_meta( $the_product->id, '_' . 'wcj_product_open_price_default_price', true );
 
340
  // Input field
341
  $value = ( isset( $_POST['wcj_open_price'] ) ) ? $_POST['wcj_open_price'] : $default_price;
342
  $default_price_step = 1 / pow( 10, absint( get_option( 'woocommerce_price_num_decimals', 2 ) ) );
4
  *
5
  * The WooCommerce Jetpack Product Open Pricing class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.4.8
9
  * @author Algoritmika Ltd.
10
  */
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 2.7.0
22
  * @since 2.4.8
23
  */
24
  function __construct() {
32
  if ( $this->is_enabled() ) {
33
  add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
34
  add_action( 'save_post_product', array( $this, 'save_meta_box' ), PHP_INT_MAX, 2 );
35
+ add_filter( WCJ_PRODUCT_GET_PRICE_FILTER, array( $this, 'get_open_price' ), PHP_INT_MAX, 2 );
36
+ add_filter( 'woocommerce_product_variation_get_price',array( $this, 'get_open_price' ), PHP_INT_MAX, 2 );
37
  add_filter( 'woocommerce_get_price_html', array( $this, 'hide_original_price' ), PHP_INT_MAX, 2 );
38
  add_filter( 'woocommerce_get_variation_price_html', array( $this, 'hide_original_price' ), PHP_INT_MAX, 2 );
39
  add_filter( 'woocommerce_is_sold_individually', array( $this, 'hide_quantity_input_field' ), PHP_INT_MAX, 2 );
54
  /**
55
  * is_open_price_product.
56
  *
57
+ * @version 2.7.0
58
  * @since 2.4.8
59
  */
60
  function is_open_price_product( $_product ) {
61
+ return ( 'yes' === get_post_meta( wcj_get_product_id_or_variation_parent_id( $_product ), '_' . 'wcj_product_open_price_enabled', true ) ) ? true : false;
62
  }
63
 
64
  /**
137
  /**
138
  * is_purchasable.
139
  *
140
+ * @version 2.7.0
141
  * @since 2.4.8
142
+ * @todo maybe `wcj_get_product_id()` instead of `wcj_get_product_id_or_variation_parent_id()` - check `is_purchasable()` in `WC_Product` class.
143
  */
144
  function is_purchasable( $purchasable, $_product ) {
145
  if ( $this->is_open_price_product( $_product ) ) {
154
  $purchasable = false; */
155
 
156
  // Check the product is published
157
+ } elseif ( wcj_get_product_status( $_product ) !== 'publish' && ! current_user_can( 'edit_post', wcj_get_product_id_or_variation_parent_id( $_product ) ) ) {
158
  $purchasable = false;
159
  }
160
  }
217
  /**
218
  * add_to_cart_url.
219
  *
220
+ * @version 2.7.0
221
  * @since 2.4.8
222
  */
223
  function add_to_cart_url( $url, $_product ) {
224
+ return ( $this->is_open_price_product( $_product ) ) ? get_permalink( wcj_get_product_id_or_variation_parent_id( $_product ) ) : $url;
225
  }
226
 
227
  /**
327
  /**
328
  * add_open_price_input_field_to_frontend.
329
  *
330
+ * @version 2.7.0
331
  * @since 2.4.8
332
  */
333
  function add_open_price_input_field_to_frontend() {
336
  // Title
337
  $title = get_option( 'wcj_product_open_price_label_frontend', __( 'Name Your Price', 'woocommerce-jetpack' ) );
338
  // Prices
339
+ $_product_id = wcj_get_product_id_or_variation_parent_id( $the_product );
340
+ $min_price = get_post_meta( $_product_id, '_' . 'wcj_product_open_price_min_price', true );
341
+ $max_price = get_post_meta( $_product_id, '_' . 'wcj_product_open_price_max_price', true );
342
+ $default_price = get_post_meta( $_product_id, '_' . 'wcj_product_open_price_default_price', true );
343
  // Input field
344
  $value = ( isset( $_POST['wcj_open_price'] ) ) ? $_POST['wcj_open_price'] : $default_price;
345
  $default_price_step = 1 / pow( 10, absint( get_option( 'woocommerce_price_num_decimals', 2 ) ) );
includes/class-wcj-product-price-by-formula.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Product Price by Formula class.
6
  *
7
- * @version 2.6.0
8
  * @since 2.5.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -18,7 +18,7 @@ class WCJ_Product_Price_by_Formula extends WCJ_Module {
18
  /**
19
  * Constructor.
20
  *
21
- * @version 2.5.0
22
  * @since 2.5.0
23
  */
24
  function __construct() {
@@ -36,18 +36,7 @@ class WCJ_Product_Price_by_Formula extends WCJ_Module {
36
  add_action( 'save_post_product', array( $this, 'save_meta_box' ), PHP_INT_MAX, 2 );
37
 
38
  if ( ! is_admin() || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
39
- // Prices
40
- add_filter( 'woocommerce_get_price', array( $this, 'change_price_by_formula' ), PHP_INT_MAX - 100, 2 );
41
- add_filter( 'woocommerce_get_sale_price', array( $this, 'change_price_by_formula' ), PHP_INT_MAX - 100, 2 );
42
- add_filter( 'woocommerce_get_regular_price', array( $this, 'change_price_by_formula' ), PHP_INT_MAX - 100, 2 );
43
- // Variations
44
- add_filter( 'woocommerce_variation_prices_price', array( $this, 'change_price_by_formula' ), PHP_INT_MAX - 100, 2 );
45
- add_filter( 'woocommerce_variation_prices_regular_price', array( $this, 'change_price_by_formula' ), PHP_INT_MAX - 100, 2 );
46
- add_filter( 'woocommerce_variation_prices_sale_price', array( $this, 'change_price_by_formula' ), PHP_INT_MAX - 100, 2 );
47
- add_filter( 'woocommerce_get_variation_prices_hash', array( $this, 'get_variation_prices_hash' ), PHP_INT_MAX - 100, 3 );
48
- // Grouped products
49
- add_filter( 'woocommerce_get_price_including_tax', array( $this, 'change_price_by_formula_grouped' ), PHP_INT_MAX - 100, 3 );
50
- add_filter( 'woocommerce_get_price_excluding_tax', array( $this, 'change_price_by_formula_grouped' ), PHP_INT_MAX - 100, 3 );
51
  }
52
 
53
  add_filter( 'wcj_save_meta_box_value', array( $this, 'save_meta_box_value' ), PHP_INT_MAX, 3 );
@@ -56,20 +45,19 @@ class WCJ_Product_Price_by_Formula extends WCJ_Module {
56
  }
57
 
58
  /**
59
- * change_price_by_formula_grouped.
60
  *
61
- * @version 2.5.0
62
  * @since 2.5.0
63
  */
64
- function change_price_by_formula_grouped( $price, $qty, $_product ) {
65
  if ( $_product->is_type( 'grouped' ) ) {
66
- $get_price_method = 'get_price_' . get_option( 'woocommerce_tax_display_shop' ) . 'uding_tax';
67
  foreach ( $_product->get_children() as $child_id ) {
68
  $the_price = get_post_meta( $child_id, '_price', true );
69
  $the_product = wc_get_product( $child_id );
70
- $the_price = $the_product->$get_price_method( 1, $the_price );
71
  if ( $the_price == $price ) {
72
- return $this->change_price_by_formula( $price, $the_product );
73
  }
74
  }
75
  }
@@ -77,33 +65,33 @@ class WCJ_Product_Price_by_Formula extends WCJ_Module {
77
  }
78
 
79
  /**
80
- * change_price_by_formula.
81
  *
82
- * @version 2.5.5
83
  * @since 2.5.0
84
  */
85
- function change_price_by_formula( $price, $_product, $output_errors = false ) {
86
  if ( $this->is_price_by_formula_product( $_product ) && '' != $price ) {
87
- $is_per_product = ( 'per_product' === get_post_meta( $_product->id, '_' . 'wcj_product_price_by_formula_calculation', true ) ) ? true : false;
 
88
  $the_formula = ( $is_per_product )
89
- ? get_post_meta( $_product->id, '_' . 'wcj_product_price_by_formula_eval', true )
90
  : get_option( 'wcj_product_price_by_formula_eval', '' );
91
  $the_formula = do_shortcode( $the_formula );
92
  if ( '' != $the_formula ) {
93
  $total_params = ( $is_per_product )
94
- ? get_post_meta( $_product->id, '_' . 'wcj_product_price_by_formula_total_params', true )
95
  : get_option( 'wcj_product_price_by_formula_total_params', 1 );
96
  if ( $total_params > 0 ) {
97
  $the_current_filter = current_filter();
98
  if ( 'woocommerce_get_price_including_tax' == $the_current_filter || 'woocommerce_get_price_excluding_tax' == $the_current_filter ) {
99
- $get_price_method = 'get_price_' . get_option( 'woocommerce_tax_display_shop' ) . 'uding_tax';
100
- return $_product->$get_price_method();
101
  }
102
  $math = new /* PHPMathParser\ */Alg_Math();
103
  $math->registerVariable( 'x', $price );
104
  for ( $i = 1; $i <= $total_params; $i++ ) {
105
  $the_param = ( $is_per_product )
106
- ? get_post_meta( $_product->id, '_' . 'wcj_product_price_by_formula_param_' . $i, true )
107
  : get_option( 'wcj_product_price_by_formula_param_' . $i, '' );
108
  $the_param = do_shortcode( $the_param );
109
  if ( '' != $the_param ) {
@@ -128,13 +116,13 @@ class WCJ_Product_Price_by_Formula extends WCJ_Module {
128
  /**
129
  * get_variation_prices_hash.
130
  *
131
- * @version 2.5.0
132
  * @since 2.5.0
133
  */
134
  function get_variation_prices_hash( $price_hash, $_product, $display ) {
135
  if ( $this->is_price_by_formula_product( $_product ) ) {
136
  $the_formula = get_option( 'wcj_product_price_by_formula_eval', '' );
137
- $total_params = get_post_meta( $_product->id, '_' . 'wcj_product_price_by_formula_total_params', true );
138
  $the_params = array();
139
  for ( $i = 1; $i <= $total_params; $i++ ) {
140
  $the_params[] = get_option( 'wcj_product_price_by_formula_param_' . $i, '' );
@@ -211,13 +199,13 @@ class WCJ_Product_Price_by_Formula extends WCJ_Module {
211
  /**
212
  * is_price_by_formula_product.
213
  *
214
- * @version 2.6.0
215
  * @since 2.5.0
216
  */
217
  function is_price_by_formula_product( $_product ) {
218
  return (
219
  'yes' === apply_filters( 'booster_get_option', 'no', get_option( 'wcj_product_price_by_formula_enable_for_all_products', 'no' ) ) ||
220
- 'yes' === get_post_meta( $_product->id, '_' . 'wcj_product_price_by_formula_enabled', true )
221
  );
222
  }
223
 
@@ -283,7 +271,7 @@ class WCJ_Product_Price_by_Formula extends WCJ_Module {
283
  /**
284
  * create_meta_box.
285
  *
286
- * @version 2.5.0
287
  * @since 2.5.0
288
  */
289
  function create_meta_box() {
@@ -293,7 +281,7 @@ class WCJ_Product_Price_by_Formula extends WCJ_Module {
293
  $the_product = wc_get_product();
294
  if ( $this->is_price_by_formula_product( $the_product ) ) {
295
  $the_price = $the_product->get_price();
296
- $the_price = $this->change_price_by_formula( $the_price, $the_product, true );
297
  echo '<h4>' . __( 'Final Price Preview', 'woocommerce-jetpack' ) . '</h4>';
298
  echo wc_price( $the_price );
299
  }
4
  *
5
  * The WooCommerce Jetpack Product Price by Formula class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.5.0
9
  * @author Algoritmika Ltd.
10
  */
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 2.7.0
22
  * @since 2.5.0
23
  */
24
  function __construct() {
36
  add_action( 'save_post_product', array( $this, 'save_meta_box' ), PHP_INT_MAX, 2 );
37
 
38
  if ( ! is_admin() || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
39
+ wcj_add_change_price_hooks( $this, PHP_INT_MAX - 100, false );
 
 
 
 
 
 
 
 
 
 
 
40
  }
41
 
42
  add_filter( 'wcj_save_meta_box_value', array( $this, 'save_meta_box_value' ), PHP_INT_MAX, 3 );
45
  }
46
 
47
  /**
48
+ * change_price_grouped.
49
  *
50
+ * @version 2.7.0
51
  * @since 2.5.0
52
  */
53
+ function change_price_grouped( $price, $qty, $_product ) {
54
  if ( $_product->is_type( 'grouped' ) ) {
 
55
  foreach ( $_product->get_children() as $child_id ) {
56
  $the_price = get_post_meta( $child_id, '_price', true );
57
  $the_product = wc_get_product( $child_id );
58
+ $the_price = wcj_get_product_display_price( $the_product, $the_price, 1 );
59
  if ( $the_price == $price ) {
60
+ return $this->change_price( $price, $the_product );
61
  }
62
  }
63
  }
65
  }
66
 
67
  /**
68
+ * change_price.
69
  *
70
+ * @version 2.7.0
71
  * @since 2.5.0
72
  */
73
+ function change_price( $price, $_product, $output_errors = false ) {
74
  if ( $this->is_price_by_formula_product( $_product ) && '' != $price ) {
75
+ $_product_id = wcj_get_product_id_or_variation_parent_id( $_product );
76
+ $is_per_product = ( 'per_product' === get_post_meta( $_product_id, '_' . 'wcj_product_price_by_formula_calculation', true ) ) ? true : false;
77
  $the_formula = ( $is_per_product )
78
+ ? get_post_meta( $_product_id, '_' . 'wcj_product_price_by_formula_eval', true )
79
  : get_option( 'wcj_product_price_by_formula_eval', '' );
80
  $the_formula = do_shortcode( $the_formula );
81
  if ( '' != $the_formula ) {
82
  $total_params = ( $is_per_product )
83
+ ? get_post_meta( $_product_id, '_' . 'wcj_product_price_by_formula_total_params', true )
84
  : get_option( 'wcj_product_price_by_formula_total_params', 1 );
85
  if ( $total_params > 0 ) {
86
  $the_current_filter = current_filter();
87
  if ( 'woocommerce_get_price_including_tax' == $the_current_filter || 'woocommerce_get_price_excluding_tax' == $the_current_filter ) {
88
+ return wcj_get_product_display_price( $_product );
 
89
  }
90
  $math = new /* PHPMathParser\ */Alg_Math();
91
  $math->registerVariable( 'x', $price );
92
  for ( $i = 1; $i <= $total_params; $i++ ) {
93
  $the_param = ( $is_per_product )
94
+ ? get_post_meta( $_product_id, '_' . 'wcj_product_price_by_formula_param_' . $i, true )
95
  : get_option( 'wcj_product_price_by_formula_param_' . $i, '' );
96
  $the_param = do_shortcode( $the_param );
97
  if ( '' != $the_param ) {
116
  /**
117
  * get_variation_prices_hash.
118
  *
119
+ * @version 2.7.0
120
  * @since 2.5.0
121
  */
122
  function get_variation_prices_hash( $price_hash, $_product, $display ) {
123
  if ( $this->is_price_by_formula_product( $_product ) ) {
124
  $the_formula = get_option( 'wcj_product_price_by_formula_eval', '' );
125
+ $total_params = get_post_meta( wcj_get_product_id_or_variation_parent_id( $_product ), '_' . 'wcj_product_price_by_formula_total_params', true );
126
  $the_params = array();
127
  for ( $i = 1; $i <= $total_params; $i++ ) {
128
  $the_params[] = get_option( 'wcj_product_price_by_formula_param_' . $i, '' );
199
  /**
200
  * is_price_by_formula_product.
201
  *
202
+ * @version 2.7.0
203
  * @since 2.5.0
204
  */
205
  function is_price_by_formula_product( $_product ) {
206
  return (
207
  'yes' === apply_filters( 'booster_get_option', 'no', get_option( 'wcj_product_price_by_formula_enable_for_all_products', 'no' ) ) ||
208
+ 'yes' === get_post_meta( wcj_get_product_id_or_variation_parent_id( $_product ), '_' . 'wcj_product_price_by_formula_enabled', true )
209
  );
210
  }
211
 
271
  /**
272
  * create_meta_box.
273
  *
274
+ * @version 2.7.0
275
  * @since 2.5.0
276
  */
277
  function create_meta_box() {
281
  $the_product = wc_get_product();
282
  if ( $this->is_price_by_formula_product( $the_product ) ) {
283
  $the_price = $the_product->get_price();
284
+ $the_price = $this->change_price( $the_price, $the_product, true );
285
  echo '<h4>' . __( 'Final Price Preview', 'woocommerce-jetpack' ) . '</h4>';
286
  echo wc_price( $the_price );
287
  }
includes/class-wcj-product-tabs.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Product Tabs class.
6
  *
7
- * @version 2.5.2
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -39,7 +39,7 @@ class WCJ_Product_Tabs extends WCJ_Module {
39
  /**
40
  * Customize the product tabs.
41
  *
42
- * @version 2.5.2
43
  */
44
  function customize_product_tabs( $tabs ) {
45
 
@@ -77,6 +77,8 @@ class WCJ_Product_Tabs extends WCJ_Module {
77
  $key = 'global_' . $i;
78
  if ( '' != get_option( 'wcj_custom_product_tabs_title_' . $key, '' ) && '' != get_option( 'wcj_custom_product_tabs_content_' . $key, '' ) ) {
79
 
 
 
80
  // Exclude by product id
81
  $array_to_exclude = get_option( 'wcj_custom_product_tabs_global_hide_in_products_' . $i );
82
  if ( '' == $array_to_exclude || empty( $array_to_exclude ) ) {
@@ -86,7 +88,7 @@ class WCJ_Product_Tabs extends WCJ_Module {
86
  }
87
  }
88
  if ( '' != $array_to_exclude && ! empty( $array_to_exclude ) ) {
89
- if ( $product && $array_to_exclude && in_array( $product->id, $array_to_exclude ) ) {
90
  continue;
91
  }
92
  }
@@ -101,7 +103,7 @@ class WCJ_Product_Tabs extends WCJ_Module {
101
  }
102
  if ( '' != $array_to_exclude && ! empty( $array_to_exclude ) ) {
103
  $do_exclude = false;
104
- $product_categories_objects = get_the_terms( $product->id, 'product_cat' );
105
  if ( $product_categories_objects && ! empty( $product_categories_objects ) ) {
106
  foreach ( $product_categories_objects as $product_categories_object ) {
107
  if ( $product && $array_to_exclude && in_array( $product_categories_object->term_id, $array_to_exclude ) ) {
@@ -119,7 +121,7 @@ class WCJ_Product_Tabs extends WCJ_Module {
119
  $array_to_exclude = get_option( 'wcj_custom_product_tabs_global_hide_in_tags_' . $i );
120
  if ( '' != $array_to_exclude && ! empty( $array_to_exclude ) ) {
121
  $do_exclude = false;
122
- $product_tags_objects = get_the_terms( $product->id, 'product_tag' );
123
  if ( $product_tags_objects && ! empty( $product_tags_objects ) ) {
124
  foreach ( $product_tags_objects as $product_tags_object ) {
125
  if ( $product && $array_to_exclude && in_array( $product_tags_object->term_id, $array_to_exclude ) ) {
@@ -143,7 +145,7 @@ class WCJ_Product_Tabs extends WCJ_Module {
143
  }
144
  if ( '' != $array_to_include && ! empty( $array_to_include ) ) {
145
  // If NOT in array then hide this tab for this product
146
- if ( $product && $array_to_include && ! in_array( $product->id, $array_to_include ) ) {
147
  continue;
148
  }
149
  }
@@ -158,7 +160,7 @@ class WCJ_Product_Tabs extends WCJ_Module {
158
  }
159
  if ( '' != $array_to_include && ! empty( $array_to_include ) ) {
160
  $do_include = false;
161
- $product_categories_objects = get_the_terms( $product->id, 'product_cat' );
162
  if ( $product_categories_objects && ! empty( $product_categories_objects ) ) {
163
  foreach ( $product_categories_objects as $product_categories_object ) {
164
  if ( $product && $array_to_include && in_array( $product_categories_object->term_id, $array_to_include ) ) {
@@ -176,7 +178,7 @@ class WCJ_Product_Tabs extends WCJ_Module {
176
  $array_to_include = get_option( 'wcj_custom_product_tabs_global_show_in_tags_' . $i );
177
  if ( '' != $array_to_include && ! empty( $array_to_include ) ) {
178
  $do_include = false;
179
- $product_tags_objects = get_the_terms( $product->id, 'product_tag' );
180
  if ( $product_tags_objects && ! empty( $product_tags_objects ) ) {
181
  foreach ( $product_tags_objects as $product_tags_object ) {
182
  if ( $product && $array_to_include && in_array( $product_tags_object->term_id, $array_to_include ) ) {
4
  *
5
  * The WooCommerce Jetpack Product Tabs class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
39
  /**
40
  * Customize the product tabs.
41
  *
42
+ * @version 2.7.0
43
  */
44
  function customize_product_tabs( $tabs ) {
45
 
77
  $key = 'global_' . $i;
78
  if ( '' != get_option( 'wcj_custom_product_tabs_title_' . $key, '' ) && '' != get_option( 'wcj_custom_product_tabs_content_' . $key, '' ) ) {
79
 
80
+ $_product_id = wcj_get_product_id_or_variation_parent_id( $product );
81
+
82
  // Exclude by product id
83
  $array_to_exclude = get_option( 'wcj_custom_product_tabs_global_hide_in_products_' . $i );
84
  if ( '' == $array_to_exclude || empty( $array_to_exclude ) ) {
88
  }
89
  }
90
  if ( '' != $array_to_exclude && ! empty( $array_to_exclude ) ) {
91
+ if ( $product && $array_to_exclude && in_array( $_product_id, $array_to_exclude ) ) {
92
  continue;
93
  }
94
  }
103
  }
104
  if ( '' != $array_to_exclude && ! empty( $array_to_exclude ) ) {
105
  $do_exclude = false;
106
+ $product_categories_objects = get_the_terms( $_product_id, 'product_cat' );
107
  if ( $product_categories_objects && ! empty( $product_categories_objects ) ) {
108
  foreach ( $product_categories_objects as $product_categories_object ) {
109
  if ( $product && $array_to_exclude && in_array( $product_categories_object->term_id, $array_to_exclude ) ) {
121
  $array_to_exclude = get_option( 'wcj_custom_product_tabs_global_hide_in_tags_' . $i );
122
  if ( '' != $array_to_exclude && ! empty( $array_to_exclude ) ) {
123
  $do_exclude = false;
124
+ $product_tags_objects = get_the_terms( $_product_id, 'product_tag' );
125
  if ( $product_tags_objects && ! empty( $product_tags_objects ) ) {
126
  foreach ( $product_tags_objects as $product_tags_object ) {
127
  if ( $product && $array_to_exclude && in_array( $product_tags_object->term_id, $array_to_exclude ) ) {
145
  }
146
  if ( '' != $array_to_include && ! empty( $array_to_include ) ) {
147
  // If NOT in array then hide this tab for this product
148
+ if ( $product && $array_to_include && ! in_array( $_product_id, $array_to_include ) ) {
149
  continue;
150
  }
151
  }
160
  }
161
  if ( '' != $array_to_include && ! empty( $array_to_include ) ) {
162
  $do_include = false;
163
+ $product_categories_objects = get_the_terms( $_product_id, 'product_cat' );
164
  if ( $product_categories_objects && ! empty( $product_categories_objects ) ) {
165
  foreach ( $product_categories_objects as $product_categories_object ) {
166
  if ( $product && $array_to_include && in_array( $product_categories_object->term_id, $array_to_include ) ) {
178
  $array_to_include = get_option( 'wcj_custom_product_tabs_global_show_in_tags_' . $i );
179
  if ( '' != $array_to_include && ! empty( $array_to_include ) ) {
180
  $do_include = false;
181
+ $product_tags_objects = get_the_terms( $_product_id, 'product_tag' );
182
  if ( $product_tags_objects && ! empty( $product_tags_objects ) ) {
183
  foreach ( $product_tags_objects as $product_tags_object ) {
184
  if ( $product && $array_to_include && in_array( $product_tags_object->term_id, $array_to_include ) ) {
includes/class-wcj-products-per-page.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Products per Page class.
6
  *
7
- * @version 2.6.0
8
  * @since 2.6.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -18,7 +18,7 @@ class WCJ_Products_Per_Page extends WCJ_Module {
18
  /**
19
  * Constructor.
20
  *
21
- * @version 2.6.0
22
  * @since 2.6.0
23
  * @todo position priority for every hook
24
  * @todo post or get
@@ -27,7 +27,7 @@ class WCJ_Products_Per_Page extends WCJ_Module {
27
 
28
  $this->id = 'products_per_page';
29
  $this->short_desc = __( 'Products per Page', 'woocommerce-jetpack' );
30
- $this->desc = __( 'WooCommerce products per page.', 'woocommerce-jetpack' );
31
  $this->link = 'http://booster.io/features/woocommerce-products-per-page/';
32
  parent::__construct();
33
 
@@ -83,8 +83,8 @@ class WCJ_Products_Per_Page extends WCJ_Module {
83
  if ( 2 === count( $the_option ) ) {
84
  $sort_id = $the_option[1];
85
  $sort_name = $the_option[0];
86
- $sort_id = str_replace( "\n", '', $sort_id );
87
- $sort_id = str_replace( "\r", '', $sort_id );
88
  $sort_name = str_replace( "\n", '', $sort_name );
89
  $sort_name = str_replace( "\r", '', $sort_name );
90
  $html .= '<option value="' . $sort_id . '" ' . selected( $products_per_page, $sort_id, false ) . ' >' . $sort_name . '</option>';
@@ -115,26 +115,6 @@ class WCJ_Products_Per_Page extends WCJ_Module {
115
  return $the_number;
116
  }
117
 
118
- /**
119
- * get_settings.
120
- *
121
- * @version 2.6.0
122
- * @since 2.6.0
123
- */
124
- function get_settings() {
125
- return $this->add_standard_settings( apply_filters( 'wcj_products_per_page_settings', array() ) );
126
- }
127
-
128
- /*
129
- * add_settings_hook.
130
- *
131
- * @version 2.6.0
132
- * @since 2.6.0
133
- */
134
- function add_settings_hook() {
135
- add_filter( 'wcj_products_per_page_settings', array( $this, 'add_settings' ) );
136
- }
137
-
138
  /*
139
  * add_settings.
140
  *
4
  *
5
  * The WooCommerce Jetpack Products per Page class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.6.0
9
  * @author Algoritmika Ltd.
10
  */
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 2.7.0
22
  * @since 2.6.0
23
  * @todo position priority for every hook
24
  * @todo post or get
27
 
28
  $this->id = 'products_per_page';
29
  $this->short_desc = __( 'Products per Page', 'woocommerce-jetpack' );
30
+ $this->desc = __( 'Add "products per page" selector to WooCommerce.', 'woocommerce-jetpack' );
31
  $this->link = 'http://booster.io/features/woocommerce-products-per-page/';
32
  parent::__construct();
33
 
83
  if ( 2 === count( $the_option ) ) {
84
  $sort_id = $the_option[1];
85
  $sort_name = $the_option[0];
86
+ $sort_id = str_replace( "\n", '', $sort_id );
87
+ $sort_id = str_replace( "\r", '', $sort_id );
88
  $sort_name = str_replace( "\n", '', $sort_name );
89
  $sort_name = str_replace( "\r", '', $sort_name );
90
  $html .= '<option value="' . $sort_id . '" ' . selected( $products_per_page, $sort_id, false ) . ' >' . $sort_name . '</option>';
115
  return $the_number;
116
  }
117
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
118
  /*
119
  * add_settings.
120
  *
includes/class-wcj-products-xml.php CHANGED
@@ -7,7 +7,7 @@
7
  * @version 2.6.0
8
  * @since 2.5.7
9
  * @author Algoritmika Ltd.
10
- * @todo create all files at once (manually and synchronize update); move (maybe) to "PRODUCTS" category;
11
  */
12
 
13
  if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
@@ -22,7 +22,7 @@ class WCJ_Products_XML extends WCJ_Module {
22
  * @version 2.5.7
23
  * @since 2.5.7
24
  */
25
- public function __construct() {
26
 
27
  $this->id = 'products_xml';
28
  $this->short_desc = __( 'Products XML', 'woocommerce-jetpack' );
7
  * @version 2.6.0
8
  * @since 2.5.7
9
  * @author Algoritmika Ltd.
10
+ * @todo create all files at once (manually and synchronize update)
11
  */
12
 
13
  if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
22
  * @version 2.5.7
23
  * @since 2.5.7
24
  */
25
+ function __construct() {
26
 
27
  $this->id = 'products_xml';
28
  $this->short_desc = __( 'Products XML', 'woocommerce-jetpack' );
includes/class-wcj-purchase-data.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Purchase Data class.
6
  *
7
- * @version 2.6.0
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -60,7 +60,7 @@ class WCJ_Purchase_Data extends WCJ_Module {
60
  * Output custom columns for orders
61
  *
62
  * @param string $column
63
- * @version 2.6.0
64
  * @since 2.2.4
65
  * @todo forecasted profit
66
  */
@@ -78,7 +78,8 @@ class WCJ_Purchase_Data extends WCJ_Module {
78
  if ( 0 != ( $purchase_price = wc_get_product_purchase_price( $product_id ) ) ) {
79
  if ( 'profit' === $column ) {
80
  // $line_total = ( 'yes' === get_option('woocommerce_prices_include_tax') ) ? ( $item['line_total'] + $item['line_tax'] ) : $item['line_total'];
81
- $line_total = ( $the_order->prices_include_tax ) ? ( $item['line_total'] + $item['line_tax'] ) : $item['line_total'];
 
82
  $value = $line_total - $purchase_price * $item['qty'];
83
  } else { // if ( 'purchase_cost' === $column )
84
  $value = $purchase_price * $item['qty'];
@@ -101,7 +102,7 @@ class WCJ_Purchase_Data extends WCJ_Module {
101
  /**
102
  * get_meta_box_options.
103
  *
104
- * @version 2.6.0
105
  * @since 2.4.5
106
  * @todo wcj_purchase_price_currency
107
  */
@@ -113,7 +114,7 @@ class WCJ_Purchase_Data extends WCJ_Module {
113
  $available_variations = $_product->get_available_variations();
114
  foreach ( $available_variations as $variation ) {
115
  $variation_product = wc_get_product( $variation['variation_id'] );
116
- $products[ $variation['variation_id'] ] = ' (' . $variation_product->get_formatted_variation_attributes( true ) . ')';
117
  }
118
  } else {
119
  $products[ $main_product_id ] = '';
@@ -213,7 +214,7 @@ class WCJ_Purchase_Data extends WCJ_Module {
213
  /**
214
  * create_meta_box.
215
  *
216
- * @version 2.6.0
217
  * @since 2.4.5
218
  * @todo min_profit
219
  */
@@ -229,7 +230,7 @@ class WCJ_Purchase_Data extends WCJ_Module {
229
  $available_variations = $_product->get_available_variations();
230
  foreach ( $available_variations as $variation ) {
231
  $variation_product = wc_get_product( $variation['variation_id'] );
232
- $products[ $variation['variation_id'] ] = ' (' . $variation_product->get_formatted_variation_attributes( true ) . ')';
233
  }
234
  } else {
235
  $products[ $main_product_id ] = '';
4
  *
5
  * The WooCommerce Jetpack Purchase Data class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
60
  * Output custom columns for orders
61
  *
62
  * @param string $column
63
+ * @version 2.7.0
64
  * @since 2.2.4
65
  * @todo forecasted profit
66
  */
78
  if ( 0 != ( $purchase_price = wc_get_product_purchase_price( $product_id ) ) ) {
79
  if ( 'profit' === $column ) {
80
  // $line_total = ( 'yes' === get_option('woocommerce_prices_include_tax') ) ? ( $item['line_total'] + $item['line_tax'] ) : $item['line_total'];
81
+ $_order_prices_include_tax = ( WCJ_IS_WC_VERSION_BELOW_3 ? $the_order->prices_include_tax : $the_order->get_prices_include_tax() );
82
+ $line_total = ( $_order_prices_include_tax ) ? ( $item['line_total'] + $item['line_tax'] ) : $item['line_total'];
83
  $value = $line_total - $purchase_price * $item['qty'];
84
  } else { // if ( 'purchase_cost' === $column )
85
  $value = $purchase_price * $item['qty'];
102
  /**
103
  * get_meta_box_options.
104
  *
105
+ * @version 2.7.0
106
  * @since 2.4.5
107
  * @todo wcj_purchase_price_currency
108
  */
114
  $available_variations = $_product->get_available_variations();
115
  foreach ( $available_variations as $variation ) {
116
  $variation_product = wc_get_product( $variation['variation_id'] );
117
+ $products[ $variation['variation_id'] ] = ' (' . wcj_get_product_formatted_variation( $variation_product, true ) . ')';
118
  }
119
  } else {
120
  $products[ $main_product_id ] = '';
214
  /**
215
  * create_meta_box.
216
  *
217
+ * @version 2.7.0
218
  * @since 2.4.5
219
  * @todo min_profit
220
  */
230
  $available_variations = $_product->get_available_variations();
231
  foreach ( $available_variations as $variation ) {
232
  $variation_product = wc_get_product( $variation['variation_id'] );
233
+ $products[ $variation['variation_id'] ] = ' (' . wcj_get_product_formatted_variation( $variation_product, true ) . ')';
234
  }
235
  } else {
236
  $products[ $main_product_id ] = '';
includes/class-wcj-related-products.php CHANGED
@@ -34,7 +34,7 @@ class WCJ_Related_Products extends WCJ_Module {
34
  *
35
  * @version 2.6.0
36
  */
37
- public function __construct() {
38
 
39
  $this->id = 'related_products';
40
  $this->short_desc = __( 'Related Products', 'woocommerce-jetpack' );
34
  *
35
  * @version 2.6.0
36
  */
37
+ function __construct() {
38
 
39
  $this->id = 'related_products';
40
  $this->short_desc = __( 'Related Products', 'woocommerce-jetpack' );
includes/class-wcj-reports.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Reports class.
6
  *
7
- * @version 2.6.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -28,7 +28,7 @@ class WCJ_Reports extends WCJ_Module {
28
  *
29
  * @version 2.5.0
30
  */
31
- public function __construct() {
32
 
33
  $this->id = 'reports';
34
  $this->short_desc = __( 'Reports', 'woocommerce-jetpack' );
@@ -58,24 +58,25 @@ class WCJ_Reports extends WCJ_Module {
58
  /**
59
  * add_custom_order_reports_ranges_by_month_to_admin_bar.
60
  *
61
- * @version 2.2.4
62
  * @since 2.2.4
63
  */
64
- public function add_custom_order_reports_ranges_by_month_to_admin_bar( $wp_admin_bar ) {
65
- $is_reports = ( isset( $_GET['page'] ) && 'wc-reports' === $_GET['page'] ) ? true : false;
66
- $is_orders_reports = ( isset( $_GET['tab'] ) && 'orders' === $_GET['tab'] || ! isset( $_GET['tab'] ) ) ? true : false;
67
  if ( $is_reports && $is_orders_reports ) {
68
 
69
  $parent = 'reports_orders_more_ranges_months';
70
  $args = array(
71
  'parent' => false,
72
- 'id' => $parent,
73
- 'title' => __( 'Booster: More Ranges - Months', 'woocommerce-jetpack' ),
74
- 'href' => false,
75
- 'meta' => array( 'title' => __( 'Select Range', 'woocommerce-jetpack' ), ),
76
  );
77
  $wp_admin_bar->add_node( $args );
78
 
 
79
  for ( $i = 1; $i <= 12; $i++ ) {
80
  $month_start_date = date( 'Y-m-01' ) . "-$i months";
81
  $month_num = date( 'm', strtotime( $month_start_date ) );
@@ -86,7 +87,12 @@ class WCJ_Reports extends WCJ_Module {
86
  'parent' => $parent,
87
  'id' => $parent . '_' . $month_num,
88
  'title' => $month_name,
89
- 'href' => add_query_arg( array( 'range' => 'custom', 'start_date' => $start_date, 'end_date' => $end_date ) ),
 
 
 
 
 
90
  'meta' => array( 'title' => $month_name ),
91
  );
92
  $wp_admin_bar->add_node( $node );
@@ -96,88 +102,90 @@ class WCJ_Reports extends WCJ_Module {
96
 
97
  /**
98
  * add_custom_order_reports_ranges_to_admin_bar.
 
 
99
  */
100
- public function add_custom_order_reports_ranges_to_admin_bar( $wp_admin_bar ) {
101
- $is_reports = ( isset( $_GET['page'] ) && 'wc-reports' === $_GET['page'] ) ? true : false;
102
- $is_orders_reports = ( isset( $_GET['tab'] ) && 'orders' === $_GET['tab'] || ! isset( $_GET['tab'] ) ) ? true : false;
103
  if ( $is_reports && $is_orders_reports ) {
104
 
105
  $parent = 'reports_orders_more_ranges';
106
  $args = array(
107
  'parent' => false,
108
- 'id' => $parent,
109
- 'title' => __( 'Booster: More Ranges', 'woocommerce-jetpack' ),
110
- 'href' => false,
111
- 'meta' => array( 'title' => __( 'Select Range', 'woocommerce-jetpack' ), ),
112
  );
113
  $wp_admin_bar->add_node( $args );
114
 
115
- $nodes = array(
116
- array(
117
- 'parent' => $parent,
118
- 'id' => $parent . '_' . 'last_14_days',
119
- 'title' => __( 'Last 14 Days', 'woocommerce-jetpack' ),
120
- 'href' => add_query_arg( array( 'range' => 'custom', 'start_date' => date( 'Y-m-d', strtotime( '-14 days' ) ), 'end_date' => date( 'Y-m-d' ), ) ),
121
- 'meta' => array( 'title' => __( 'Last 14 Days', 'woocommerce-jetpack' ), ),
122
  ),
123
- array(
124
- 'parent' => $parent,
125
- 'id' => $parent . '_' . 'last_30_days',
126
- 'title' => __( 'Last 30 Days', 'woocommerce-jetpack' ),
127
- 'href' => add_query_arg( array( 'range' => 'custom', 'start_date' => date( 'Y-m-d', strtotime( '-30 days' ) ), 'end_date' => date( 'Y-m-d' ), ) ),
128
- 'meta' => array( 'title' => __( 'Last 30 Days', 'woocommerce-jetpack' ), ),
129
  ),
130
- array(
131
- 'parent' => $parent,
132
- 'id' => $parent . '_' . 'last_3_months',
133
- 'title' => __( 'Last 3 Months', 'woocommerce-jetpack' ),
134
- 'href' => add_query_arg( array( 'range' => 'custom', 'start_date' => date( 'Y-m-d', strtotime( '-3 months' ) ), 'end_date' => date( 'Y-m-d' ), ) ),
135
- 'meta' => array( 'title' => __( 'Last 3 Months', 'woocommerce-jetpack' ), ),
136
  ),
137
- array(
138
- 'parent' => $parent,
139
- 'id' => $parent . '_' . 'last_6_months',
140
- 'title' => __( 'Last 6 Months', 'woocommerce-jetpack' ),
141
- 'href' => add_query_arg( array( 'range' => 'custom', 'start_date' => date( 'Y-m-d', strtotime( '-6 months' ) ), 'end_date' => date( 'Y-m-d' ), ) ),
142
- 'meta' => array( 'title' => __( 'Last 6 Months', 'woocommerce-jetpack' ), ),
143
  ),
144
- array(
145
- 'parent' => $parent,
146
- 'id' => $parent . '_' . 'last_12_months',
147
- 'title' => __( 'Last 12 Months', 'woocommerce-jetpack' ),
148
- 'href' => add_query_arg( array( 'range' => 'custom', 'start_date' => date( 'Y-m-d', strtotime( '-12 months' ) ), 'end_date' => date( 'Y-m-d' ), ) ),
149
- 'meta' => array( 'title' => __( 'Last 12 Months', 'woocommerce-jetpack' ), ),
150
  ),
151
- array(
152
- 'parent' => $parent,
153
- 'id' => $parent . '_' . 'last_24_months',
154
- 'title' => __( 'Last 24 Months', 'woocommerce-jetpack' ),
155
- 'href' => add_query_arg( array( 'range' => 'custom', 'start_date' => date( 'Y-m-d', strtotime( '-24 months' ) ), 'end_date' => date( 'Y-m-d' ), ) ),
156
- 'meta' => array( 'title' => __( 'Last 24 Months', 'woocommerce-jetpack' ), ),
157
  ),
158
- array(
159
- 'parent' => $parent,
160
- 'id' => $parent . '_' . 'same_days_last_month',
161
- 'title' => __( 'Same Days Last Month', 'woocommerce-jetpack' ),
162
- 'href' => add_query_arg( array( 'range' => 'custom', 'start_date' => date( 'Y-m-01', strtotime( '-1 month' ) ), 'end_date' => date( 'Y-m-d', strtotime( '-1 month' ) ), ) ),
163
- 'meta' => array( 'title' => __( 'Same Days Last Month', 'woocommerce-jetpack' ), ),
164
  ),
165
- /* array(
166
- 'parent' => $parent,
167
- 'id' => $parent . '_' . 'last_week',
168
- 'title' => __( 'Last Week', 'woocommerce-jetpack' ),
169
- 'href' => add_query_arg( array( 'range' => 'custom', 'start_date' => date( 'Y-m-d', strtotime( 'last monday' ) ), 'end_date' => date( 'Y-m-d', strtotime( 'last sunday' ) ), ) ),
170
- 'meta' => array( 'title' => __( 'Last Week', 'woocommerce-jetpack' ), ),
171
- ), */
172
- array(
173
- 'parent' => $parent,
174
- 'id' => $parent . '_' . 'last_year',
175
- 'title' => __( 'Last Year', 'woocommerce-jetpack' ),
176
- 'href' => add_query_arg( array( 'range' => 'custom', 'start_date' => date( 'Y-01-01', strtotime( '-1 year' ) ), 'end_date' => date( 'Y-12-31', strtotime( '-1 year' ) ), ) ),
177
- 'meta' => array( 'title' => __( 'Last Year', 'woocommerce-jetpack' ), ),
178
  ),
 
 
 
 
 
179
  );
180
- foreach ( $nodes as $node ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
181
  $wp_admin_bar->add_node( $node );
182
  }
183
  }
@@ -186,7 +194,7 @@ class WCJ_Reports extends WCJ_Module {
186
  /**
187
  * catch_arguments.
188
  */
189
- public function catch_arguments() {
190
  $this->report_id = isset( $_GET['report'] ) ? $_GET['report'] : 'on_stock';
191
  $this->range_days = isset( $_GET['period'] ) ? $_GET['period'] : 30;
192
  $this->group_countries = ( 'customers_by_country_sets' === $this->report_id ) ? 'yes' : 'no';
@@ -195,7 +203,7 @@ class WCJ_Reports extends WCJ_Module {
195
  /**
196
  * get_report_sales.
197
  */
198
- public function get_report_sales() {
199
  $report = new WCJ_Reports_Sales();
200
  echo $report->get_report();
201
  }
@@ -213,7 +221,7 @@ class WCJ_Reports extends WCJ_Module {
213
  /**
214
  * get_report_stock.
215
  */
216
- public function get_report_stock() {
217
  $report = new WCJ_Reports_Stock( array (
218
  'report_id' => $this->report_id,
219
  'range_days' => $this->range_days,
@@ -224,7 +232,7 @@ class WCJ_Reports extends WCJ_Module {
224
  /**
225
  * get_report_customers.
226
  */
227
- public function get_report_customers() {
228
  $report = new WCJ_Reports_Customers( array ( 'group_countries' => $this->group_countries ) );
229
  echo $report->get_report();
230
  }
@@ -235,7 +243,7 @@ class WCJ_Reports extends WCJ_Module {
235
  * @version 2.5.3
236
  * @since 2.3.0
237
  */
238
- public function add_sales_reports( $reports ) {
239
 
240
  $reports['orders']['reports']['booster_products_sales'] = array(
241
  'title' => __( 'Booster: Product Sales', 'woocommerce-jetpack' ),
@@ -257,7 +265,7 @@ class WCJ_Reports extends WCJ_Module {
257
  /**
258
  * Add reports to WooCommerce > Reports > Stock
259
  */
260
- public function add_stock_reports( $reports ) {
261
 
262
  $reports['stock']['reports']['on_stock'] = array(
263
  'title' => __( 'Booster: All in stock', 'woocommerce-jetpack' ),
@@ -286,7 +294,7 @@ class WCJ_Reports extends WCJ_Module {
286
  /**
287
  * Add reports to WooCommerce > Reports > Customers
288
  */
289
- public function add_customers_by_country_report( $reports ) {
290
 
291
  $reports['customers']['reports']['customers_by_country'] = array(
292
  'title' => __( 'Booster: Customers by Country', 'woocommerce-jetpack' ),
4
  *
5
  * The WooCommerce Jetpack Reports class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
28
  *
29
  * @version 2.5.0
30
  */
31
+ function __construct() {
32
 
33
  $this->id = 'reports';
34
  $this->short_desc = __( 'Reports', 'woocommerce-jetpack' );
58
  /**
59
  * add_custom_order_reports_ranges_by_month_to_admin_bar.
60
  *
61
+ * @version 2.7.0
62
  * @since 2.2.4
63
  */
64
+ function add_custom_order_reports_ranges_by_month_to_admin_bar( $wp_admin_bar ) {
65
+ $is_reports = ( isset( $_GET['page'] ) && 'wc-reports' === $_GET['page'] );
66
+ $is_orders_reports = ( isset( $_GET['tab'] ) && 'orders' === $_GET['tab'] || ! isset( $_GET['tab'] ) );
67
  if ( $is_reports && $is_orders_reports ) {
68
 
69
  $parent = 'reports_orders_more_ranges_months';
70
  $args = array(
71
  'parent' => false,
72
+ 'id' => $parent,
73
+ 'title' => __( 'Booster: More Ranges - Months', 'woocommerce-jetpack' ),
74
+ 'href' => false,
75
+ 'meta' => array( 'title' => __( 'Select Range', 'woocommerce-jetpack' ) ),
76
  );
77
  $wp_admin_bar->add_node( $args );
78
 
79
+ $custom_range_nonce = wp_create_nonce( 'custom_range' );
80
  for ( $i = 1; $i <= 12; $i++ ) {
81
  $month_start_date = date( 'Y-m-01' ) . "-$i months";
82
  $month_num = date( 'm', strtotime( $month_start_date ) );
87
  'parent' => $parent,
88
  'id' => $parent . '_' . $month_num,
89
  'title' => $month_name,
90
+ 'href' => add_query_arg( array(
91
+ 'range' => 'custom',
92
+ 'start_date' => $start_date,
93
+ 'end_date' => $end_date,
94
+ 'wc_reports_nonce' => $custom_range_nonce,
95
+ ) ),
96
  'meta' => array( 'title' => $month_name ),
97
  );
98
  $wp_admin_bar->add_node( $node );
102
 
103
  /**
104
  * add_custom_order_reports_ranges_to_admin_bar.
105
+ *
106
+ * @version 2.7.0
107
  */
108
+ function add_custom_order_reports_ranges_to_admin_bar( $wp_admin_bar ) {
109
+ $is_reports = ( isset( $_GET['page'] ) && 'wc-reports' === $_GET['page'] );
110
+ $is_orders_reports = ( isset( $_GET['tab'] ) && 'orders' === $_GET['tab'] || ! isset( $_GET['tab'] ) );
111
  if ( $is_reports && $is_orders_reports ) {
112
 
113
  $parent = 'reports_orders_more_ranges';
114
  $args = array(
115
  'parent' => false,
116
+ 'id' => $parent,
117
+ 'title' => __( 'Booster: More Ranges', 'woocommerce-jetpack' ),
118
+ 'href' => false,
119
+ 'meta' => array( 'title' => __( 'Select Range', 'woocommerce-jetpack' ) ),
120
  );
121
  $wp_admin_bar->add_node( $args );
122
 
123
+ $custom_ranges = array(
124
+ 'last_14_days' => array(
125
+ 'title' => __( 'Last 14 Days', 'woocommerce-jetpack' ),
126
+ 'start_date' => date( 'Y-m-d', strtotime( '-14 days' ) ),
127
+ 'end_date' => date( 'Y-m-d' ),
 
 
128
  ),
129
+ 'last_30_days' => array(
130
+ 'title' => __( 'Last 30 Days', 'woocommerce-jetpack' ),
131
+ 'start_date' => date( 'Y-m-d', strtotime( '-30 days' ) ),
132
+ 'end_date' => date( 'Y-m-d' ),
 
 
133
  ),
134
+ 'last_3_months' => array(
135
+ 'title' => __( 'Last 3 Months', 'woocommerce-jetpack' ),
136
+ 'start_date' => date( 'Y-m-d', strtotime( '-3 months' ) ),
137
+ 'end_date' => date( 'Y-m-d' ),
 
 
138
  ),
139
+ 'last_6_months' => array(
140
+ 'title' => __( 'Last 6 Months', 'woocommerce-jetpack' ),
141
+ 'start_date' => date( 'Y-m-d', strtotime( '-6 months' ) ),
142
+ 'end_date' => date( 'Y-m-d' ),
 
 
143
  ),
144
+ 'last_12_months' => array(
145
+ 'title' => __( 'Last 12 Months', 'woocommerce-jetpack' ),
146
+ 'start_date' => date( 'Y-m-d', strtotime( '-12 months' ) ),
147
+ 'end_date' => date( 'Y-m-d' ),
 
 
148
  ),
149
+ 'last_24_months' => array(
150
+ 'title' => __( 'Last 24 Months', 'woocommerce-jetpack' ),
151
+ 'start_date' => date( 'Y-m-d', strtotime( '-24 months' ) ),
152
+ 'end_date' => date( 'Y-m-d' ),
 
 
153
  ),
154
+ 'same_days_last_month' => array(
155
+ 'title' => __( 'Same Days Last Month', 'woocommerce-jetpack' ),
156
+ 'start_date' => date( 'Y-m-01', strtotime( '-1 month' ) ),
157
+ 'end_date' => date( 'Y-m-d', strtotime( '-1 month' ) ),
 
 
158
  ),
159
+ 'same_days_last_year' => array(
160
+ 'title' => __( 'Same Days Last Year', 'woocommerce-jetpack' ),
161
+ 'start_date' => date( 'Y-m-01', strtotime( '-1 year' ) ),
162
+ 'end_date' => date( 'Y-m-d', strtotime( '-1 year' ) ),
163
+ ),
164
+ 'last_year' => array(
165
+ 'title' => __( 'Last Year', 'woocommerce-jetpack' ),
166
+ 'start_date' => date( 'Y-01-01', strtotime( '-1 year' ) ),
167
+ 'end_date' => date( 'Y-12-31', strtotime( '-1 year' ) ),
 
 
 
 
168
  ),
169
+ /* 'last_week' => array(
170
+ 'title' => __( 'Last Week', 'woocommerce-jetpack' ),
171
+ 'start_date' => date( 'Y-m-d', strtotime( 'last monday' ) ),
172
+ 'end_date' => date( 'Y-m-d', strtotime( 'last sunday' ) ),
173
+ ), */
174
  );
175
+ $custom_range_nonce = wp_create_nonce( 'custom_range' );
176
+ foreach ( $custom_ranges as $custom_range_id => $custom_range ) {
177
+ $node = array(
178
+ 'parent' => $parent,
179
+ 'id' => $parent . '_' . $custom_range_id,
180
+ 'title' => $custom_range['title'],
181
+ 'href' => add_query_arg( array(
182
+ 'range' => 'custom',
183
+ 'start_date' => $custom_range['start_date'],
184
+ 'end_date' => $custom_range['end_date'],
185
+ 'wc_reports_nonce' => $custom_range_nonce,
186
+ ) ),
187
+ 'meta' => array( 'title' => $custom_range['title'] ),
188
+ );
189
  $wp_admin_bar->add_node( $node );
190
  }
191
  }
194
  /**
195
  * catch_arguments.
196
  */
197
+ function catch_arguments() {
198
  $this->report_id = isset( $_GET['report'] ) ? $_GET['report'] : 'on_stock';
199
  $this->range_days = isset( $_GET['period'] ) ? $_GET['period'] : 30;
200
  $this->group_countries = ( 'customers_by_country_sets' === $this->report_id ) ? 'yes' : 'no';
203
  /**
204
  * get_report_sales.
205
  */
206
+ function get_report_sales() {
207
  $report = new WCJ_Reports_Sales();
208
  echo $report->get_report();
209
  }
221
  /**
222
  * get_report_stock.
223
  */
224
+ function get_report_stock() {
225
  $report = new WCJ_Reports_Stock( array (
226
  'report_id' => $this->report_id,
227
  'range_days' => $this->range_days,
232
  /**
233
  * get_report_customers.
234
  */
235
+ function get_report_customers() {
236
  $report = new WCJ_Reports_Customers( array ( 'group_countries' => $this->group_countries ) );
237
  echo $report->get_report();
238
  }
243
  * @version 2.5.3
244
  * @since 2.3.0
245
  */
246
+ function add_sales_reports( $reports ) {
247
 
248
  $reports['orders']['reports']['booster_products_sales'] = array(
249
  'title' => __( 'Booster: Product Sales', 'woocommerce-jetpack' ),
265
  /**
266
  * Add reports to WooCommerce > Reports > Stock
267
  */
268
+ function add_stock_reports( $reports ) {
269
 
270
  $reports['stock']['reports']['on_stock'] = array(
271
  'title' => __( 'Booster: All in stock', 'woocommerce-jetpack' ),
294
  /**
295
  * Add reports to WooCommerce > Reports > Customers
296
  */
297
+ function add_customers_by_country_report( $reports ) {
298
 
299
  $reports['customers']['reports']['customers_by_country'] = array(
300
  'title' => __( 'Booster: Customers by Country', 'woocommerce-jetpack' ),
includes/class-wcj-shipping-calculator.php CHANGED
@@ -19,7 +19,7 @@ class WCJ_Shipping_Calculator extends WCJ_Module {
19
  *
20
  * @version 2.5.7
21
  */
22
- public function __construct() {
23
 
24
  $this->id = 'shipping_calculator';
25
  $this->short_desc = __( 'Shipping Calculator', 'woocommerce-jetpack' );
@@ -80,7 +80,7 @@ class WCJ_Shipping_Calculator extends WCJ_Module {
80
  /**
81
  * add_custom_styles.
82
  */
83
- public function add_custom_styles() {
84
 
85
  $html = '<style type="text/css">';
86
 
@@ -106,14 +106,14 @@ class WCJ_Shipping_Calculator extends WCJ_Module {
106
  /**
107
  * enable_city.
108
  */
109
- public function enable_city() {
110
  return ( 'yes' === get_option( 'wcj_shipping_calculator_enable_city' ) ) ? true : false;
111
  }
112
 
113
  /**
114
  * enable_postcode.
115
  */
116
- public function enable_postcode() {
117
  return ( 'yes' === get_option( 'wcj_shipping_calculator_enable_postcode' ) ) ? true : false;
118
  }
119
 
19
  *
20
  * @version 2.5.7
21
  */
22
+ function __construct() {
23
 
24
  $this->id = 'shipping_calculator';
25
  $this->short_desc = __( 'Shipping Calculator', 'woocommerce-jetpack' );
80
  /**
81
  * add_custom_styles.
82
  */
83
+ function add_custom_styles() {
84
 
85
  $html = '<style type="text/css">';
86
 
106
  /**
107
  * enable_city.
108
  */
109
+ function enable_city() {
110
  return ( 'yes' === get_option( 'wcj_shipping_calculator_enable_city' ) ) ? true : false;
111
  }
112
 
113
  /**
114
  * enable_postcode.
115
  */
116
+ function enable_postcode() {
117
  return ( 'yes' === get_option( 'wcj_shipping_calculator_enable_postcode' ) ) ? true : false;
118
  }
119
 
includes/class-wcj-shipping.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Shipping class.
6
  *
7
- * @version 2.6.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -17,7 +17,7 @@ class WCJ_Shipping extends WCJ_Module {
17
  /**
18
  * Constructor.
19
  *
20
- * @version 2.6.0
21
  */
22
  function __construct() {
23
 
@@ -185,27 +185,6 @@ class WCJ_Shipping extends WCJ_Module {
185
  return $updated_settings;
186
  }
187
 
188
- /**
189
- * add_settings_hook.
190
- *
191
- * @version 2.5.6
192
- * @since 2.5.6
193
- */
194
- function add_settings_hook() {
195
- add_filter( 'wcj_' . $this->id . '_settings', array( $this, 'add_settings' ) );
196
- }
197
-
198
- /**
199
- * get_settings.
200
- *
201
- * @version 2.5.6
202
- */
203
- function get_settings() {
204
- $settings = array();
205
- $settings = apply_filters( 'wcj_' . $this->id . '_settings', $settings );
206
- return $this->add_standard_settings( $settings );
207
- }
208
-
209
  /**
210
  * add_settings.
211
  *
4
  *
5
  * The WooCommerce Jetpack Shipping class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
17
  /**
18
  * Constructor.
19
  *
20
+ * @version 2.7.0
21
  */
22
  function __construct() {
23
 
185
  return $updated_settings;
186
  }
187
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
188
  /**
189
  * add_settings.
190
  *
includes/class-wcj-sku.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack SKU class.
6
  *
7
- * @version 2.5.5
8
  * @author Algoritmika Ltd.
9
  * @todo add "random number" option
10
  */
@@ -65,13 +65,13 @@ class WCJ_SKU extends WCJ_Module {
65
  /**
66
  * get_available_variations.
67
  *
68
- * @version 2.4.8
69
  * @since 2.4.8
70
  */
71
  function get_all_variations( $_product ) {
72
  $all_variations = array();
73
  foreach ( $_product->get_children() as $child_id ) {
74
- $variation = $_product->get_child( $child_id );
75
  $all_variations[] = $_product->get_available_variation( $variation );
76
  }
77
  return $all_variations;
@@ -80,7 +80,8 @@ class WCJ_SKU extends WCJ_Module {
80
  /**
81
  * set_sku_with_variable.
82
  *
83
- * @version 2.5.2
 
84
  * @todo Handle cases with more than 26 variations
85
  */
86
  function set_sku_with_variable( $product_id, $is_preview ) {
@@ -95,16 +96,17 @@ class WCJ_SKU extends WCJ_Module {
95
  $sku_number = $product_id;
96
  }
97
 
98
- $this->set_sku( $product_id, $sku_number, '', $is_preview, $product_id );
 
 
99
 
100
  // Handling variable products
101
  $variation_handling = apply_filters( 'booster_get_option', 'as_variable', get_option( 'wcj_sku_variations_handling', 'as_variable' ) );
102
- $product = wc_get_product( $product_id );
103
  if ( $product->is_type( 'variable' ) ) {
104
  $variations = $this->get_all_variations( $product );
105
  if ( 'as_variable' === $variation_handling ) {
106
  foreach ( $variations as $variation ) {
107
- $this->set_sku( $variation['variation_id'], $sku_number, '', $is_preview, $product_id );
108
  }
109
  }
110
  else if ( 'as_variation' === $variation_handling ) {
@@ -115,14 +117,14 @@ class WCJ_SKU extends WCJ_Module {
115
  } else { // if 'product_id'
116
  $sku_number = $variation['variation_id'];
117
  }
118
- $this->set_sku( $variation['variation_id'], $sku_number, '', $is_preview, $product_id );
119
  }
120
  }
121
  else if ( 'as_variable_with_suffix' === $variation_handling ) {
122
  $variation_suffixes = 'abcdefghijklmnopqrstuvwxyz';
123
  $abc = 0;
124
  foreach ( $variations as $variation ) {
125
- $this->set_sku( $variation['variation_id'], $sku_number, $variation_suffixes[ $abc++ ], $is_preview, $product_id );
126
  if ( 26 == $abc ) {
127
  $abc = 0;
128
  }
@@ -134,9 +136,12 @@ class WCJ_SKU extends WCJ_Module {
134
  /**
135
  * set_sku.
136
  *
137
- * @version 2.4.0
138
  */
139
- function set_sku( $product_id, $sku_number, $variation_suffix, $is_preview, $parent_product_id ) {
 
 
 
140
 
141
  $category_prefix = '';
142
  $category_suffix = '';
@@ -151,24 +156,26 @@ class WCJ_SKU extends WCJ_Module {
151
  }
152
  }
153
 
154
- $the_sku = sprintf( '%s%s%0' . get_option( 'wcj_sku_minimum_number_length', 0 ) . 'd%s%s%s',
155
  apply_filters( 'booster_get_option', '', $category_prefix ),
156
  get_option( 'wcj_sku_prefix', '' ),
157
  $sku_number,
158
  get_option( 'wcj_sku_suffix', '' ),
159
  $variation_suffix,
160
  $category_suffix
161
- );
162
 
163
  if ( $is_preview ) {
164
  echo '<tr>' .
165
- '<td>' . $this->product_counter++ . '</td>' .
166
- '<td>' . get_the_title( $product_id ) . ' (' . __( 'ID', 'woocommerce-jetpack' ) . ':' . $product_id . ')' . '</td>' .
167
- '<td>' . $product_cat . '</td>' .
168
- '<td>' . $the_sku . '</td>' .
 
 
169
  '</tr>';
170
  }
171
- else {
172
  update_post_meta( $product_id, '_' . 'sku', $the_sku );
173
  }
174
  }
@@ -176,13 +183,13 @@ class WCJ_SKU extends WCJ_Module {
176
  /**
177
  * set_all_products_skus.
178
  *
179
- * @version 2.5.2
180
  */
181
  function set_all_products_skus( $is_preview ) {
182
  if ( 'sequential' === apply_filters( 'booster_get_option', 'product_id', get_option( 'wcj_sku_number_generation', 'product_id' ) ) ) {
183
  $this->sequential_counter = apply_filters( 'booster_get_option', 1, get_option( 'wcj_sku_number_generation_sequential', 1 ) );
184
  }
185
- $limit = 96;
186
  $offset = 0;
187
  while ( TRUE ) {
188
  $posts = new WP_Query( array(
@@ -192,11 +199,13 @@ class WCJ_SKU extends WCJ_Module {
192
  'post_status' => 'any',
193
  'order' => 'ASC',
194
  'orderby' => 'date',
 
195
  ));
196
- if ( ! $posts->have_posts() ) break;
197
- while ( $posts->have_posts() ) {
198
- $posts->the_post();
199
- $this->set_sku_with_variable( $posts->post->ID, $is_preview );
 
200
  }
201
  $offset += $limit;
202
  }
@@ -229,7 +238,7 @@ class WCJ_SKU extends WCJ_Module {
229
  /**
230
  * create_sku_tool
231
  *
232
- * @version 2.4.0
233
  */
234
  function create_sku_tool() {
235
  $result_message = '';
@@ -240,9 +249,11 @@ class WCJ_SKU extends WCJ_Module {
240
  $preview_html .=
241
  '<tr>' .
242
  '<th></th>' .
 
243
  '<th>' . __( 'Product', 'woocommerce-jetpack' ) . '</th>' .
244
  '<th>' . __( 'Categories', 'woocommerce-jetpack' ) . '</th>' .
245
  '<th>' . __( 'SKU', 'woocommerce-jetpack' ) . '</th>' .
 
246
  '</tr>';
247
  ob_start();
248
  $this->set_all_products_skus( $is_preview );
@@ -264,7 +275,7 @@ class WCJ_SKU extends WCJ_Module {
264
  /**
265
  * get_settings.
266
  *
267
- * @version 2.5.5
268
  */
269
  function get_settings() {
270
  $settings = array(
@@ -383,7 +394,7 @@ class WCJ_SKU extends WCJ_Module {
383
  array(
384
  'title' => __( 'Automatically Generate SKU for New Products', 'woocommerce-jetpack' ),
385
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
386
- 'desc_tip' => __( 'If disabled you can use Autogenerate SKUs tool.', 'woocommerce-jetpack' ),
387
  'id' => 'wcj_sku_new_products_generate_enabled',
388
  'default' => 'yes',
389
  'type' => 'checkbox',
@@ -395,6 +406,13 @@ class WCJ_SKU extends WCJ_Module {
395
  'default' => 'no',
396
  'type' => 'checkbox',
397
  ),
 
 
 
 
 
 
 
398
  array(
399
  'title' => __( 'Add SKU to Customer Emails', 'woocommerce-jetpack' ),
400
  'desc' => __( 'Add', 'woocommerce-jetpack' ),
4
  *
5
  * The WooCommerce Jetpack SKU class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  * @todo add "random number" option
10
  */
65
  /**
66
  * get_available_variations.
67
  *
68
+ * @version 2.7.0
69
  * @since 2.4.8
70
  */
71
  function get_all_variations( $_product ) {
72
  $all_variations = array();
73
  foreach ( $_product->get_children() as $child_id ) {
74
+ $variation = ( WCJ_IS_WC_VERSION_BELOW_3 ? $_product->get_child( $child_id ) : wc_get_product( $child_id ) );
75
  $all_variations[] = $_product->get_available_variation( $variation );
76
  }
77
  return $all_variations;
80
  /**
81
  * set_sku_with_variable.
82
  *
83
+ * @version 2.7.0
84
+ * @todo add "pseudorandom" option (check "Order Numbers" module)
85
  * @todo Handle cases with more than 26 variations
86
  */
87
  function set_sku_with_variable( $product_id, $is_preview ) {
96
  $sku_number = $product_id;
97
  }
98
 
99
+ $product = wc_get_product( $product_id );
100
+
101
+ $this->set_sku( $product_id, $sku_number, '', $is_preview, $product_id, $product );
102
 
103
  // Handling variable products
104
  $variation_handling = apply_filters( 'booster_get_option', 'as_variable', get_option( 'wcj_sku_variations_handling', 'as_variable' ) );
 
105
  if ( $product->is_type( 'variable' ) ) {
106
  $variations = $this->get_all_variations( $product );
107
  if ( 'as_variable' === $variation_handling ) {
108
  foreach ( $variations as $variation ) {
109
+ $this->set_sku( $variation['variation_id'], $sku_number, '', $is_preview, $product_id, $product );
110
  }
111
  }
112
  else if ( 'as_variation' === $variation_handling ) {
117
  } else { // if 'product_id'
118
  $sku_number = $variation['variation_id'];
119
  }
120
+ $this->set_sku( $variation['variation_id'], $sku_number, '', $is_preview, $product_id, $product );
121
  }
122
  }
123
  else if ( 'as_variable_with_suffix' === $variation_handling ) {
124
  $variation_suffixes = 'abcdefghijklmnopqrstuvwxyz';
125
  $abc = 0;
126
  foreach ( $variations as $variation ) {
127
+ $this->set_sku( $variation['variation_id'], $sku_number, $variation_suffixes[ $abc++ ], $is_preview, $product_id, $product );
128
  if ( 26 == $abc ) {
129
  $abc = 0;
130
  }
136
  /**
137
  * set_sku.
138
  *
139
+ * @version 2.7.0
140
  */
141
+ function set_sku( $product_id, $sku_number, $variation_suffix, $is_preview, $parent_product_id, $_product ) {
142
+
143
+ $old_sku = $_product->get_sku();
144
+ $do_generate_new_sku = ( 'no' === get_option( 'wcj_sku_generate_only_for_empty_sku', 'no' ) || '' === $old_sku );
145
 
146
  $category_prefix = '';
147
  $category_suffix = '';
156
  }
157
  }
158
 
159
+ $the_sku = ( $do_generate_new_sku ) ? sprintf( '%s%s%0' . get_option( 'wcj_sku_minimum_number_length', 0 ) . 'd%s%s%s',
160
  apply_filters( 'booster_get_option', '', $category_prefix ),
161
  get_option( 'wcj_sku_prefix', '' ),
162
  $sku_number,
163
  get_option( 'wcj_sku_suffix', '' ),
164
  $variation_suffix,
165
  $category_suffix
166
+ ) : $old_sku;
167
 
168
  if ( $is_preview ) {
169
  echo '<tr>' .
170
+ '<td>' . $this->product_counter++ . '</td>' .
171
+ '<td>' . $product_id . '</td>' .
172
+ '<td>' . $_product->get_title() . '</td>' .
173
+ '<td>' . $product_cat . '</td>' .
174
+ '<td>' . $the_sku . '</td>' .
175
+ '<td>' . $old_sku . '</td>' .
176
  '</tr>';
177
  }
178
+ elseif ( $do_generate_new_sku ) {
179
  update_post_meta( $product_id, '_' . 'sku', $the_sku );
180
  }
181
  }
183
  /**
184
  * set_all_products_skus.
185
  *
186
+ * @version 2.7.0
187
  */
188
  function set_all_products_skus( $is_preview ) {
189
  if ( 'sequential' === apply_filters( 'booster_get_option', 'product_id', get_option( 'wcj_sku_number_generation', 'product_id' ) ) ) {
190
  $this->sequential_counter = apply_filters( 'booster_get_option', 1, get_option( 'wcj_sku_number_generation_sequential', 1 ) );
191
  }
192
+ $limit = 256;
193
  $offset = 0;
194
  while ( TRUE ) {
195
  $posts = new WP_Query( array(
199
  'post_status' => 'any',
200
  'order' => 'ASC',
201
  'orderby' => 'date',
202
+ 'fields' => 'ids',
203
  ));
204
+ if ( ! $posts->have_posts() ) {
205
+ break;
206
+ }
207
+ foreach ( $posts->posts as $post_id ) {
208
+ $this->set_sku_with_variable( $post_id, $is_preview );
209
  }
210
  $offset += $limit;
211
  }
238
  /**
239
  * create_sku_tool
240
  *
241
+ * @version 2.7.0
242
  */
243
  function create_sku_tool() {
244
  $result_message = '';
249
  $preview_html .=
250
  '<tr>' .
251
  '<th></th>' .
252
+ '<th>' . __( 'ID', 'woocommerce-jetpack' ) . '</th>' .
253
  '<th>' . __( 'Product', 'woocommerce-jetpack' ) . '</th>' .
254
  '<th>' . __( 'Categories', 'woocommerce-jetpack' ) . '</th>' .
255
  '<th>' . __( 'SKU', 'woocommerce-jetpack' ) . '</th>' .
256
+ '<th>' . __( 'Old SKU', 'woocommerce-jetpack' ) . '</th>' .
257
  '</tr>';
258
  ob_start();
259
  $this->set_all_products_skus( $is_preview );
275
  /**
276
  * get_settings.
277
  *
278
+ * @version 2.7.0
279
  */
280
  function get_settings() {
281
  $settings = array(
394
  array(
395
  'title' => __( 'Automatically Generate SKU for New Products', 'woocommerce-jetpack' ),
396
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
397
+ 'desc_tip' => __( 'Alternatively you can use Autogenerate SKUs tool.', 'woocommerce-jetpack' ),
398
  'id' => 'wcj_sku_new_products_generate_enabled',
399
  'default' => 'yes',
400
  'type' => 'checkbox',
406
  'default' => 'no',
407
  'type' => 'checkbox',
408
  ),
409
+ array(
410
+ 'title' => __( 'Generate SKUs Only for Products with Empty SKU', 'woocommerce-jetpack' ),
411
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
412
+ 'id' => 'wcj_sku_generate_only_for_empty_sku',
413
+ 'default' => 'no',
414
+ 'type' => 'checkbox',
415
+ ),
416
  array(
417
  'title' => __( 'Add SKU to Customer Emails', 'woocommerce-jetpack' ),
418
  'desc' => __( 'Add', 'woocommerce-jetpack' ),
includes/class-wcj-sorting.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Sorting class.
6
  *
7
- * @version 2.6.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -216,12 +216,15 @@ class WCJ_Sorting extends WCJ_Module {
216
  /*
217
  * Add new sorting options to WooCommerce sorting.
218
  *
219
- * @version 2.5.6
220
  */
221
  function custom_woocommerce_get_catalog_ordering_args( $args ) {
222
 
223
  // Get ordering from query string
224
- $orderby_value = isset( $_GET['orderby'] ) ? woocommerce_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
 
 
 
225
  // Get orderby arg from string
226
  $orderby_value = explode( '-', $orderby_value );
227
  $orderby = esc_attr( $orderby_value[0] );
4
  *
5
  * The WooCommerce Jetpack Sorting class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
216
  /*
217
  * Add new sorting options to WooCommerce sorting.
218
  *
219
+ * @version 2.7.0
220
  */
221
  function custom_woocommerce_get_catalog_ordering_args( $args ) {
222
 
223
  // Get ordering from query string
224
+ $orderby_value = ( WCJ_IS_WC_VERSION_BELOW_3 ?
225
+ ( isset( $_GET['orderby'] ) ? woocommerce_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) ) ) :
226
+ ( isset( $_GET['orderby'] ) ? wc_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) ) )
227
+ );
228
  // Get orderby arg from string
229
  $orderby_value = explode( '-', $orderby_value );
230
  $orderby = esc_attr( $orderby_value[0] );
includes/class-wcj-wholesale-price.php CHANGED
@@ -4,10 +4,10 @@
4
  *
5
  * The WooCommerce Jetpack Wholesale Price class.
6
  *
7
- * @version 2.5.7
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
- * @todo per variation;
11
  */
12
 
13
  if ( ! defined( 'ABSPATH' ) ) exit;
@@ -19,7 +19,7 @@ class WCJ_Wholesale_Price extends WCJ_Module {
19
  /**
20
  * Constructor.
21
  *
22
- * @version 2.5.5
23
  */
24
  function __construct() {
25
 
@@ -40,7 +40,10 @@ class WCJ_Wholesale_Price extends WCJ_Module {
40
 
41
  add_action( 'woocommerce_cart_loaded_from_session', array( $this, 'cart_loaded_from_session' ), PHP_INT_MAX, 1 );
42
  add_action( 'woocommerce_before_calculate_totals', array( $this, 'calculate_totals' ), PHP_INT_MAX, 1 );
43
- add_filter( 'woocommerce_get_price', array( $this, 'wholesale_price' ), PHP_INT_MAX, 2 );
 
 
 
44
 
45
  if ( 'yes' === get_option( 'wcj_wholesale_price_show_info_on_cart', 'no' ) ) {
46
  add_filter( 'woocommerce_cart_item_price', array( $this, 'add_discount_info_to_cart_page' ), PHP_INT_MAX, 3 );
@@ -168,7 +171,7 @@ class WCJ_Wholesale_Price extends WCJ_Module {
168
  /**
169
  * calculate_totals.
170
  *
171
- * @version 2.5.5
172
  * @since 2.5.0
173
  */
174
  function calculate_totals( $cart ) {
@@ -186,20 +189,18 @@ class WCJ_Wholesale_Price extends WCJ_Module {
186
  }
187
 
188
  $_product = wc_get_product( $item['product_id'] );
189
- if ( ! wcj_is_product_wholesale_enabled( $_product->id ) ) {
190
  continue;
191
  }
192
 
193
  // Prices
194
- $tax_display_mode = get_option( 'woocommerce_tax_display_shop' );
195
- $get_price_method = 'get_price_' . $tax_display_mode . 'uding_tax';
196
  if ( 0 != ( $variation_id = WC()->cart->cart_contents[ $item_key ]['variation_id'] ) ) {
197
  $variation = wc_get_product( $variation_id );
198
  $price = $variation->get_price();
199
- $price_old = $variation->$get_price_method(); // used for display only
200
  } else {
201
  $price = $_product->get_price();
202
- $price_old = $_product->$get_price_method(); // used for display only
203
  }
204
 
205
  // If other discount was applied in cart...
@@ -214,7 +215,7 @@ class WCJ_Wholesale_Price extends WCJ_Module {
214
  ? $cart->cart_contents_count
215
  : $item['quantity'];
216
  if ( $the_quantity > 1 ) {
217
- $wholesale_price = $this->get_wholesale_price( $price, $the_quantity, $_product->id );
218
  if ( $wholesale_price != $price ) {
219
  // Setting wholesale price
220
  $precision = get_option( 'woocommerce_price_num_decimals', 2 );
@@ -231,10 +232,10 @@ class WCJ_Wholesale_Price extends WCJ_Module {
231
  /**
232
  * wholesale_price.
233
  *
234
- * @version 2.5.0
235
  */
236
  function wholesale_price( $price, $_product ) {
237
- return ( wcj_is_product_wholesale_enabled( $_product->id ) && isset( $_product->wcj_wholesale_price ) ) ? $_product->wcj_wholesale_price : $price;
238
  }
239
 
240
  /**
@@ -344,26 +345,6 @@ class WCJ_Wholesale_Price extends WCJ_Module {
344
  return $options;
345
  }
346
 
347
- /**
348
- * add_settings_hook.
349
- *
350
- * @version 2.5.5
351
- * @since 2.5.5
352
- */
353
- function add_settings_hook() {
354
- add_filter( 'wcj_wholesale_price_settings', array( $this, 'add_settings' ) );
355
- }
356
-
357
- /**
358
- * get_settings.
359
- *
360
- * @version 2.5.5
361
- */
362
- function get_settings() {
363
- $settings = apply_filters( 'wcj_wholesale_price_settings', array() );
364
- return $this->add_standard_settings( $settings );
365
- }
366
-
367
  /**
368
  * add_settings.
369
  *
4
  *
5
  * The WooCommerce Jetpack Wholesale Price class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
+ * @todo per variation
11
  */
12
 
13
  if ( ! defined( 'ABSPATH' ) ) exit;
19
  /**
20
  * Constructor.
21
  *
22
+ * @version 2.7.0
23
  */
24
  function __construct() {
25
 
40
 
41
  add_action( 'woocommerce_cart_loaded_from_session', array( $this, 'cart_loaded_from_session' ), PHP_INT_MAX, 1 );
42
  add_action( 'woocommerce_before_calculate_totals', array( $this, 'calculate_totals' ), PHP_INT_MAX, 1 );
43
+ add_filter( WCJ_PRODUCT_GET_PRICE_FILTER, array( $this, 'wholesale_price' ), PHP_INT_MAX, 2 );
44
+ if ( ! WCJ_IS_WC_VERSION_BELOW_3 ) {
45
+ add_filter( 'woocommerce_product_variation_get_price', array( $this, 'wholesale_price' ), PHP_INT_MAX, 2 );
46
+ }
47
 
48
  if ( 'yes' === get_option( 'wcj_wholesale_price_show_info_on_cart', 'no' ) ) {
49
  add_filter( 'woocommerce_cart_item_price', array( $this, 'add_discount_info_to_cart_page' ), PHP_INT_MAX, 3 );
171
  /**
172
  * calculate_totals.
173
  *
174
+ * @version 2.7.0
175
  * @since 2.5.0
176
  */
177
  function calculate_totals( $cart ) {
189
  }
190
 
191
  $_product = wc_get_product( $item['product_id'] );
192
+ if ( ! wcj_is_product_wholesale_enabled( wcj_get_product_id_or_variation_parent_id( $_product ) ) ) {
193
  continue;
194
  }
195
 
196
  // Prices
 
 
197
  if ( 0 != ( $variation_id = WC()->cart->cart_contents[ $item_key ]['variation_id'] ) ) {
198
  $variation = wc_get_product( $variation_id );
199
  $price = $variation->get_price();
200
+ $price_old = wcj_get_product_display_price( $variation ); // used for display only
201
  } else {
202
  $price = $_product->get_price();
203
+ $price_old = wcj_get_product_display_price( $_product ); // used for display only
204
  }
205
 
206
  // If other discount was applied in cart...
215
  ? $cart->cart_contents_count
216
  : $item['quantity'];
217
  if ( $the_quantity > 1 ) {
218
+ $wholesale_price = $this->get_wholesale_price( $price, $the_quantity, wcj_get_product_id_or_variation_parent_id( $_product ) );
219
  if ( $wholesale_price != $price ) {
220
  // Setting wholesale price
221
  $precision = get_option( 'woocommerce_price_num_decimals', 2 );
232
  /**
233
  * wholesale_price.
234
  *
235
+ * @version 2.7.0
236
  */
237
  function wholesale_price( $price, $_product ) {
238
+ return ( wcj_is_product_wholesale_enabled( wcj_get_product_id_or_variation_parent_id( $_product ) ) && isset( $_product->wcj_wholesale_price ) ) ? $_product->wcj_wholesale_price : $price;
239
  }
240
 
241
  /**
345
  return $options;
346
  }
347
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
348
  /**
349
  * add_settings.
350
  *
includes/class-wcj-wpml.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack WPML class.
6
  *
7
- * @version 2.5.0
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -41,7 +41,7 @@ class WCJ_WPML extends WCJ_Module {
41
  /**
42
  * get_settings.
43
  *
44
- * @version 2.4.4
45
  */
46
  function get_settings() {
47
  $settings = array(
@@ -69,6 +69,7 @@ class WCJ_WPML extends WCJ_Module {
69
  ),
70
  array(
71
  'title' => __( 'Module Tools', 'woocommerce-jetpack' ),
 
72
  'id' => 'wcj_' . $this->id . '_module_tools',
73
  'type' => 'custom_link',
74
  'link' => ( $this->is_enabled() ) ?
4
  *
5
  * The WooCommerce Jetpack WPML class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
41
  /**
42
  * get_settings.
43
  *
44
+ * @version 2.7.0
45
  */
46
  function get_settings() {
47
  $settings = array(
69
  ),
70
  array(
71
  'title' => __( 'Module Tools', 'woocommerce-jetpack' ),
72
+ 'desc_tip' => __( 'To use tools, module must be enabled.', 'woocommerce-jetpack' ),
73
  'id' => 'wcj_' . $this->id . '_module_tools',
74
  'type' => 'custom_link',
75
  'link' => ( $this->is_enabled() ) ?
includes/classes/class-wcj-module.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Module class.
6
  *
7
- * @version 2.6.0
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -27,7 +27,7 @@ if ( ! class_exists( 'WCJ_Module' ) ) :
27
  *
28
  * @version 2.4.3
29
  */
30
- public function __construct( $type = 'module' ) {
31
  add_filter( 'wcj_settings_sections', array( $this, 'settings_section' ) );
32
  add_filter( 'wcj_settings_' . $this->id, array( $this, 'get_settings' ), 100 );
33
  $this->type = $type;
@@ -37,6 +37,16 @@ if ( ! class_exists( 'WCJ_Module' ) ) :
37
  add_action( 'init', array( $this, 'reset_settings' ), PHP_INT_MAX );
38
  }
39
 
 
 
 
 
 
 
 
 
 
 
40
  /**
41
  * save_meta_box_value.
42
  *
@@ -127,11 +137,11 @@ if ( ! class_exists( 'WCJ_Module' ) ) :
127
  /**
128
  * get_settings.
129
  *
130
- * @version 2.4.0
131
  * @since 2.2.6
132
  */
133
  function get_settings() {
134
- return $this->add_standard_settings();
135
  }
136
 
137
  /**
4
  *
5
  * The WooCommerce Jetpack Module class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
27
  *
28
  * @version 2.4.3
29
  */
30
+ function __construct( $type = 'module' ) {
31
  add_filter( 'wcj_settings_sections', array( $this, 'settings_section' ) );
32
  add_filter( 'wcj_settings_' . $this->id, array( $this, 'get_settings' ), 100 );
33
  $this->type = $type;
37
  add_action( 'init', array( $this, 'reset_settings' ), PHP_INT_MAX );
38
  }
39
 
40
+ /*
41
+ * add_settings_hook.
42
+ *
43
+ * @version 2.7.0
44
+ * @since 2.7.0
45
+ */
46
+ function add_settings_hook() {
47
+ add_filter( 'wcj_' . $this->id . '_settings', array( $this, 'add_settings' ) );
48
+ }
49
+
50
  /**
51
  * save_meta_box_value.
52
  *
137
  /**
138
  * get_settings.
139
  *
140
+ * @version 2.7.0
141
  * @since 2.2.6
142
  */
143
  function get_settings() {
144
+ return $this->add_standard_settings( apply_filters( 'wcj_' . $this->id . '_settings', array() ) );
145
  }
146
 
147
  /**
includes/classes/class-wcj-pdf-invoice.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack PDF Invoice class.
6
  *
7
- * @version 2.5.2
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -21,6 +21,106 @@ class WCJ_PDF_Invoice extends WCJ_Invoice {
21
  parent::__construct( $order_id, $invoice_type );
22
  }
23
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  /**
25
  * prepare_pdf.
26
  *
@@ -28,6 +128,8 @@ class WCJ_PDF_Invoice extends WCJ_Invoice {
28
  */
29
  function prepare_pdf() {
30
 
 
 
31
  $invoice_type = $this->invoice_type;
32
 
33
  // Create new PDF document
@@ -145,14 +247,14 @@ class WCJ_PDF_Invoice extends WCJ_Invoice {
145
  /**
146
  * get_pdf.
147
  *
148
- * @version 2.4.8
149
  */
150
  function get_pdf( $dest ) {
151
 
152
  // Get invoice content HTML
153
  $_GET['order_id'] = $this->order_id;
154
  $the_order = wc_get_order( $this->order_id );
155
- if ( ! isset( $_GET['billing_country'] ) ) $_GET['billing_country'] = $the_order->billing_country;
156
  $html = do_shortcode( get_option( 'wcj_invoicing_' . $this->invoice_type . '_template' ) );
157
  $html = force_balance_tags( $html );
158
  //$html = apply_filters( 'the_content', get_option( 'wcj_invoicing_' . $this->invoice_type . '_template' ) );
4
  *
5
  * The WooCommerce Jetpack PDF Invoice class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
21
  parent::__construct( $order_id, $invoice_type );
22
  }
23
 
24
+ /**
25
+ * check_tcpdf_fonts.
26
+ *
27
+ * @version 2.7.0
28
+ * @since 2.7.0
29
+ * @todo use function - search for `check_tcpdf_fonts`
30
+ * @todo optional "do not download" (then default fonts directory with basic fonts)
31
+ * @todo check file size > 0 (not only if file exists in directory)
32
+ * @todo check if it works ok with https://booster.io
33
+ * @todo use `download_url()` instead of `file_get_contents()` or `curl` (in all Booster files)
34
+ */
35
+ /* function check_tcpdf_fonts() {
36
+ $tcpdf_fonts_dir = wcj_get_wcj_uploads_dir( 'tcpdf_fonts' ) . '/';
37
+ if ( ! file_exists( $tcpdf_fonts_dir ) ) {
38
+ mkdir( $tcpdf_fonts_dir );
39
+ }
40
+ $tcpdf_fonts_dir_files = scandir( $tcpdf_fonts_dir );
41
+ $tcpdf_fonts_files = array(
42
+ 'angsanaupc.ctg.z',
43
+ 'angsanaupc.php',
44
+ 'angsanaupc.z',
45
+ 'angsanaupcb.ctg.z',
46
+ 'angsanaupcb.php',
47
+ 'angsanaupcb.z',
48
+ 'angsanaupcbi.ctg.z',
49
+ 'angsanaupcbi.php',
50
+ 'angsanaupcbi.z',
51
+ 'angsanaupci.ctg.z',
52
+ 'angsanaupci.php',
53
+ 'angsanaupci.z',
54
+ 'cordiaupc.ctg.z',
55
+ 'cordiaupc.php',
56
+ 'cordiaupc.z',
57
+ 'cordiaupcb.ctg.z',
58
+ 'cordiaupcb.php',
59
+ 'cordiaupcb.z',
60
+ 'cordiaupcbi.ctg.z',
61
+ 'cordiaupcbi.php',
62
+ 'cordiaupcbi.z',
63
+ 'cordiaupci.ctg.z',
64
+ 'cordiaupci.php',
65
+ 'cordiaupci.z',
66
+ 'courier.php',
67
+ 'courierb.php',
68
+ 'courierbi.php',
69
+ 'courieri.php',
70
+ 'dejavusans.ctg.z',
71
+ 'dejavusans.php',
72
+ 'dejavusans.z',
73
+ 'dejavusansb.ctg.z',
74
+ 'dejavusansb.php',
75
+ 'dejavusansb.z',
76
+ 'dejavusansbi.ctg.z',
77
+ 'dejavusansbi.php',
78
+ 'dejavusansbi.z',
79
+ 'droidsansfallback.ctg.z',
80
+ 'droidsansfallback.php',
81
+ 'droidsansfallback.z',
82
+ 'helvetica.php',
83
+ 'helveticab.php',
84
+ 'helveticabi.php',
85
+ 'helveticai.php',
86
+ 'symbol.php',
87
+ 'thsarabun.ctg.z',
88
+ 'thsarabun.php',
89
+ 'thsarabun.z',
90
+ 'thsarabunb.ctg.z',
91
+ 'thsarabunb.php',
92
+ 'thsarabunb.z',
93
+ 'thsarabunbi.ctg.z',
94
+ 'thsarabunbi.php',
95
+ 'thsarabunbi.z',
96
+ 'thsarabuni.ctg.z',
97
+ 'thsarabuni.php',
98
+ 'thsarabuni.z',
99
+ 'times.php',
100
+ 'timesb.php',
101
+ 'timesbi.php',
102
+ 'timesi.php',
103
+ 'zapfdingbats.php',
104
+ );
105
+ require_once( ABSPATH . 'wp-admin/includes/file.php' );
106
+ foreach ( $tcpdf_fonts_files as $tcpdf_fonts_file ) {
107
+ if ( ! in_array( $tcpdf_fonts_file, $tcpdf_fonts_dir_files ) ) {
108
+ $url = 'http://booster.io/tcpdf_fonts/' . $tcpdf_fonts_file;
109
+ if ( '.php' === substr( $tcpdf_fonts_file, -4 ) ) {
110
+ $url .= '.data';
111
+ }
112
+ $response_file_name = download_url( $url );
113
+ if ( ! is_wp_error( $response_file_name ) ) {
114
+ $response = file_get_contents( $response_file_name );
115
+ if ( $response ) {
116
+ file_put_contents( $tcpdf_fonts_dir . $tcpdf_fonts_file, $response );
117
+ }
118
+ unlink( $response_file_name );
119
+ }
120
+ }
121
+ }
122
+ } */
123
+
124
  /**
125
  * prepare_pdf.
126
  *
128
  */
129
  function prepare_pdf() {
130
 
131
+ // $this->check_tcpdf_fonts();
132
+
133
  $invoice_type = $this->invoice_type;
134
 
135
  // Create new PDF document
247
  /**
248
  * get_pdf.
249
  *
250
+ * @version 2.7.0
251
  */
252
  function get_pdf( $dest ) {
253
 
254
  // Get invoice content HTML
255
  $_GET['order_id'] = $this->order_id;
256
  $the_order = wc_get_order( $this->order_id );
257
+ if ( ! isset( $_GET['billing_country'] ) ) $_GET['billing_country'] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $the_order->billing_country : $the_order->get_billing_country() );
258
  $html = do_shortcode( get_option( 'wcj_invoicing_' . $this->invoice_type . '_template' ) );
259
  $html = force_balance_tags( $html );
260
  //$html = apply_filters( 'the_content', get_option( 'wcj_invoicing_' . $this->invoice_type . '_template' ) );
includes/constants/wcj-constants.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WooCommerce Jetpack Constants
4
+ *
5
+ * @version 2.7.0
6
+ * @since 2.7.0
7
+ * @author Algoritmika Ltd.
8
+ */
9
+
10
+ if ( ! defined( 'ABSPATH' ) ) exit;
11
+
12
+ // WooCommerce version
13
+
14
+ if ( ! defined( 'WCJ_WC_VERSION' ) ) {
15
+ define( 'WCJ_WC_VERSION', get_option( 'woocommerce_version', null ) );
16
+ }
17
+
18
+ if ( ! defined( 'WCJ_IS_WC_VERSION_BELOW_3' ) ) {
19
+ define( 'WCJ_IS_WC_VERSION_BELOW_3', version_compare( WCJ_WC_VERSION, '3.0.0', '<' ) );
20
+ }
21
+
22
+ // Price filters
23
+
24
+ if ( ! defined( 'WCJ_PRODUCT_GET_PRICE_FILTER' ) ) {
25
+ $filter = ( WCJ_IS_WC_VERSION_BELOW_3 ) ? 'woocommerce_get_price' : 'woocommerce_product_get_price';
26
+ define( 'WCJ_PRODUCT_GET_PRICE_FILTER', $filter );
27
+ }
28
+
29
+ if ( ! defined( 'WCJ_PRODUCT_GET_SALE_PRICE_FILTER' ) ) {
30
+ $filter = ( WCJ_IS_WC_VERSION_BELOW_3 ) ? 'woocommerce_get_sale_price' : 'woocommerce_product_get_sale_price';
31
+ define( 'WCJ_PRODUCT_GET_SALE_PRICE_FILTER', $filter );
32
+ }
33
+
34
+ if ( ! defined( 'WCJ_PRODUCT_GET_REGULAR_PRICE_FILTER' ) ) {
35
+ $filter = ( WCJ_IS_WC_VERSION_BELOW_3 ) ? 'woocommerce_get_regular_price' : 'woocommerce_product_get_regular_price';
36
+ define( 'WCJ_PRODUCT_GET_REGULAR_PRICE_FILTER', $filter );
37
+ }
includes/exchange-rates/class-wcj-exchange-rates-crons.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Exchange Rates Crons class.
6
  *
7
- * @version 2.6.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -17,7 +17,7 @@ class WCJ_Exchange_Rates_Crons {
17
  /**
18
  * Constructor.
19
  *
20
- * @version 2.6.0
21
  */
22
  public function __construct() {
23
  $this->update_intervals = array(
@@ -31,21 +31,6 @@ class WCJ_Exchange_Rates_Crons {
31
  add_action( 'admin_init', array( $this, 'schedule_the_events' ) );
32
  add_action( 'auto_update_exchange_rates_hook', array( $this, 'update_the_exchange_rates' ) );
33
  add_filter( 'cron_schedules', array( $this, 'cron_add_custom_intervals' ) );
34
-
35
- add_action( 'wp_ajax_' . 'wcj_ajax_get_exchange_rates', array( $this, 'wcj_ajax_get_exchange_rates' ) );
36
- add_action( 'wp_ajax_nopriv_' . 'wcj_ajax_get_exchange_rates', array( $this, 'wcj_ajax_get_exchange_rates' ) );
37
- }
38
-
39
- /**
40
- * wcj_ajax_get_exchange_rates.
41
- *
42
- * @version 2.6.0
43
- * @since 2.6.0
44
- * @todo this shouldn't be in crons
45
- */
46
- function wcj_ajax_get_exchange_rates() {
47
- echo $this->get_exchange_rate( $_POST['wcj_currency_from'], $_POST['wcj_currency_to'] );
48
- die();
49
  }
50
 
51
  /**
@@ -69,160 +54,6 @@ class WCJ_Exchange_Rates_Crons {
69
  }
70
  }
71
 
72
- /*
73
- * get_exchange_rate.
74
- *
75
- * @version 2.6.0
76
- * @since 2.6.0
77
- */
78
- function get_exchange_rate( $currency_from, $currency_to ) {
79
- $exchange_rates_server = get_option( 'wcj_currency_exchange_rates_server', 'yahoo' );
80
- switch ( $exchange_rates_server ) {
81
- case 'tcmb':
82
- return $this->tcmb_get_exchange_rate( $currency_from, $currency_to );
83
- case 'ecb':
84
- return $this->ecb_get_exchange_rate( $currency_from, $currency_to );
85
- default: // 'yahoo'
86
- return $this->yahoo_get_exchange_rate( $currency_from, $currency_to );
87
- }
88
- }
89
-
90
- /*
91
- * ecb_get_exchange_rate.
92
- *
93
- * @version 2.6.0
94
- * @since 2.6.0
95
- */
96
- function ecb_get_exchange_rate( $currency_from, $currency_to ) {
97
- $final_rate = false;
98
- if ( function_exists( 'simplexml_load_file' ) ) {
99
- $xml = simplexml_load_file( 'http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml' );
100
- if ( isset( $xml->Cube->Cube->Cube ) ) {
101
- if ( 'EUR' === $currency_from ) {
102
- $EUR_currency_from_rate = 1;
103
- }
104
- if ( 'EUR' === $currency_to ) {
105
- $EUR_currency_to_rate = 1;
106
- }
107
- foreach ( $xml->Cube->Cube->Cube as $currency_rate ) {
108
- $currency_rate = $currency_rate->attributes();
109
- if ( ! isset( $EUR_currency_from_rate ) && $currency_from == $currency_rate->currency ) {
110
- $EUR_currency_from_rate = (float) $currency_rate->rate;
111
- }
112
- if ( ! isset( $EUR_currency_to_rate ) && $currency_to == $currency_rate->currency ) {
113
- $EUR_currency_to_rate = (float) $currency_rate->rate;
114
- }
115
- }
116
- if ( isset( $EUR_currency_from_rate ) && isset( $EUR_currency_to_rate ) && 0 != $EUR_currency_from_rate ) {
117
- $final_rate = round( $EUR_currency_to_rate / $EUR_currency_from_rate, 6 );
118
- } else {
119
- $final_rate = false;
120
- }
121
- }
122
- }
123
- return $final_rate;
124
- }
125
-
126
- /*
127
- * tcmb_get_exchange_rate_TRY.
128
- *
129
- * @version 2.6.0
130
- * @since 2.6.0
131
- */
132
- function tcmb_get_exchange_rate_TRY( $currency_from ) {
133
- if ( 'TRY' === $currency_from ) {
134
- return 1;
135
- }
136
- $xml = simplexml_load_file( 'http://www.tcmb.gov.tr/kurlar/today.xml' );
137
- if ( isset( $xml->Currency ) ) {
138
- foreach ( $xml->Currency as $the_rate ) {
139
- $attributes = $the_rate->attributes();
140
- if ( isset( $attributes['CurrencyCode'] ) ) {
141
- $currency_code = (string) $attributes['CurrencyCode'];
142
- if ( $currency_code === $currency_from ) {
143
- // Possible values: ForexSelling, ForexBuying, BanknoteSelling, BanknoteBuying. Not used: CrossRateUSD, CrossRateOther.
144
- if ( '' != ( $property_to_check = apply_filters( 'wcj_currency_exchange_rates_tcmb_property_to_check', '' ) ) ) {
145
- if ( isset( $the_rate->{$property_to_check} ) ) {
146
- $rate = (float) $the_rate->{$property_to_check};
147
- } else {
148
- continue;
149
- }
150
- } else {
151
- if ( isset( $the_rate->ForexSelling ) ) {
152
- $rate = (float) $the_rate->ForexSelling;
153
- } elseif ( isset( $the_rate->ForexBuying ) ) {
154
- $rate = (float) $the_rate->ForexBuying;
155
- } elseif ( isset( $the_rate->BanknoteSelling ) ) {
156
- $rate = (float) $the_rate->BanknoteSelling;
157
- } elseif ( isset( $the_rate->BanknoteBuying ) ) {
158
- $rate = (float) $the_rate->BanknoteBuying;
159
- } else {
160
- continue;
161
- }
162
- }
163
- $unit = ( isset( $the_rate->Unit ) ) ? (float) $the_rate->Unit : 1;
164
- return ( $rate / $unit );
165
- }
166
- }
167
- }
168
- }
169
- return false;
170
- }
171
-
172
- /*
173
- * tcmb_get_exchange_rate.
174
- *
175
- * @version 2.6.0
176
- * @since 2.6.0
177
- */
178
- function tcmb_get_exchange_rate( $currency_from, $currency_to ) {
179
- $currency_from_TRY = $this->tcmb_get_exchange_rate_TRY( strtoupper( $currency_from ) );
180
- if ( false == $currency_from_TRY ) {
181
- return false;
182
- }
183
- $currency_to_TRY = $this->tcmb_get_exchange_rate_TRY( strtoupper( $currency_to ) );
184
- if ( false == $currency_to_TRY ) {
185
- return false;
186
- }
187
- if ( 1 == $currency_to_TRY ) {
188
- return round( $currency_from_TRY, 6 );
189
- }
190
- return round( ( $currency_from_TRY / $currency_to_TRY ), 6 );
191
- }
192
-
193
- /*
194
- * yahoo_get_exchange_rate.
195
- *
196
- * @version 2.6.0
197
- * @return float rate on success, else 0
198
- */
199
- function yahoo_get_exchange_rate( $currency_from, $currency_to ) {
200
-
201
- $url = "http://query.yahooapis.com/v1/public/yql?q=select%20rate%2Cname%20from%20csv%20where%20url%3D'http%3A%2F%2Fdownload.finance.yahoo.com%2Fd%2Fquotes%3Fs%3D" . $currency_from . $currency_to . "%253DX%26f%3Dl1n'%20and%20columns%3D'rate%2Cname'&format=json";
202
- // $url = 'http://rate-exchange.appspot.com/currency?from=' . $currency_from . '&to=' . $currency_to;
203
-
204
- ob_start();
205
- $max_execution_time = ini_get( 'max_execution_time' );
206
- set_time_limit( 5 );
207
-
208
- $response = '';
209
- if ( ini_get( 'allow_url_fopen' ) ) {
210
- $response = file_get_contents( $url );
211
- } elseif ( function_exists( 'curl_version' ) ) {
212
- $curl = curl_init( $url );
213
- curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );
214
- $response = curl_exec( $curl );
215
- curl_close( $curl );
216
- }
217
- $exchange_rate = json_decode( $response );
218
-
219
- set_time_limit( $max_execution_time );
220
- ob_end_clean();
221
-
222
- return ( isset( $exchange_rate->query->results->row->rate ) ) ? floatval( $exchange_rate->query->results->row->rate ) : 0;
223
- // return ( isset( $exchange_rate->rate ) ) ? $exchange_rate->rate : 0;
224
- }
225
-
226
  /**
227
  * get_currency_pair.
228
  *
@@ -248,7 +79,7 @@ class WCJ_Exchange_Rates_Crons {
248
  /**
249
  * On the scheduled action hook, run a function.
250
  *
251
- * @version 2.6.0
252
  */
253
  function update_the_exchange_rates( $interval ) {
254
 
@@ -317,7 +148,7 @@ class WCJ_Exchange_Rates_Crons {
317
  foreach ( $currency_pairs as $currency_pair ) {
318
  $currency_from = $currency_pair['currency_from'];
319
  $currency_to = $currency_pair['currency_to'];
320
- $the_rate = $this->get_exchange_rate( $currency_from, $currency_to );
321
  if ( 0 != $the_rate ) {
322
  if ( 0 != $rate_offset_percent ) {
323
  $the_rate = round( $the_rate * $rate_offset_percent, 6 );
4
  *
5
  * The WooCommerce Jetpack Exchange Rates Crons class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
17
  /**
18
  * Constructor.
19
  *
20
+ * @version 2.7.0
21
  */
22
  public function __construct() {
23
  $this->update_intervals = array(
31
  add_action( 'admin_init', array( $this, 'schedule_the_events' ) );
32
  add_action( 'auto_update_exchange_rates_hook', array( $this, 'update_the_exchange_rates' ) );
33
  add_filter( 'cron_schedules', array( $this, 'cron_add_custom_intervals' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  }
35
 
36
  /**
54
  }
55
  }
56
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  /**
58
  * get_currency_pair.
59
  *
79
  /**
80
  * On the scheduled action hook, run a function.
81
  *
82
+ * @version 2.7.0
83
  */
84
  function update_the_exchange_rates( $interval ) {
85
 
148
  foreach ( $currency_pairs as $currency_pair ) {
149
  $currency_from = $currency_pair['currency_from'];
150
  $currency_to = $currency_pair['currency_to'];
151
+ $the_rate = alg_get_exchange_rate( $currency_from, $currency_to );
152
  if ( 0 != $the_rate ) {
153
  if ( 0 != $rate_offset_percent ) {
154
  $the_rate = round( $the_rate * $rate_offset_percent, 6 );
includes/exchange-rates/class-wcj-exchange-rates.php CHANGED
@@ -74,6 +74,7 @@ class WCJ_Exchange_Rates {
74
  * output_settings_button.
75
  *
76
  * @version 2.6.0
 
77
  */
78
  function output_settings_button( $value ) {
79
 
@@ -83,7 +84,8 @@ class WCJ_Exchange_Rates {
83
 
84
  // Custom attribute handling
85
  $custom_attributes = array();
86
- // $value['custom_attributes'] = array( 'step' => '0.000001', 'min' => '0' );
 
87
  if ( ! empty( $value['custom_attributes'] ) && is_array( $value['custom_attributes'] ) ) {
88
  foreach ( $value['custom_attributes'] as $attribute => $attribute_value ) {
89
  $custom_attributes[] = esc_attr( $attribute ) . '="' . esc_attr( $attribute_value ) . '"';
74
  * output_settings_button.
75
  *
76
  * @version 2.6.0
77
+ * @todo (maybe) wcj_currency_exchange_rates_precision
78
  */
79
  function output_settings_button( $value ) {
80
 
84
 
85
  // Custom attribute handling
86
  $custom_attributes = array();
87
+ // $step = sprintf( "%f", ( 1 / pow( 10, absint( get_option( 'wcj_currency_exchange_rates_precision', 6 ) ) ) ) );
88
+ // $value['custom_attributes'] = array( 'step' => $step, 'min' => '0' );
89
  if ( ! empty( $value['custom_attributes'] ) && is_array( $value['custom_attributes'] ) ) {
90
  foreach ( $value['custom_attributes'] as $attribute => $attribute_value ) {
91
  $custom_attributes[] = esc_attr( $attribute ) . '="' . esc_attr( $attribute_value ) . '"';
includes/export/class-wcj-exporter-customers.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Exporter Customers class.
6
  *
7
- * @version 2.5.9
8
  * @since 2.5.9
9
  * @author Algoritmika Ltd.
10
  */
@@ -89,7 +89,7 @@ class WCJ_Exporter_Customers {
89
  /**
90
  * export_customers_from_orders.
91
  *
92
- * @version 2.5.9
93
  * @since 2.4.8
94
  * @todo (maybe) add more order fields (shipping)
95
  */
@@ -126,9 +126,10 @@ class WCJ_Exporter_Customers {
126
  }
127
  foreach ( $loop_orders->posts as $order_id ) {
128
  $order = wc_get_order( $order_id );
129
- if ( isset( $order->billing_email ) && '' != $order->billing_email && ! in_array( $order->billing_email, $orders ) ) {
 
130
  $emails_to_skip = array(); // `emails_to_skip` is not really used...
131
- if ( ! in_array( $order->billing_email, $emails_to_skip ) ) {
132
  $total_customers++;
133
  $row = array();
134
  foreach( $fields_ids as $field_id ) {
@@ -137,37 +138,37 @@ class WCJ_Exporter_Customers {
137
  $row[] = $total_customers;
138
  break;
139
  case 'customer-billing-email':
140
- $row[] = $order->billing_email;
141
  break;
142
  case 'customer-billing-first-name':
143
- $row[] = $order->billing_first_name;
144
  break;
145
  case 'customer-billing-last-name':
146
- $row[] = $order->billing_last_name;
147
  break;
148
  case 'customer-billing-company':
149
- $row[] = $order->billing_company;
150
  break;
151
  case 'customer-billing-address-1':
152
- $row[] = $order->billing_address_1;
153
  break;
154
  case 'customer-billing-address-2':
155
- $row[] = $order->billing_address_2;
156
  break;
157
  case 'customer-billing-city':
158
- $row[] = $order->billing_city;
159
  break;
160
  case 'customer-billing-state':
161
- $row[] = $order->billing_state;
162
  break;
163
  case 'customer-billing-postcode':
164
- $row[] = $order->billing_postcode;
165
  break;
166
  case 'customer-billing-country':
167
- $row[] = $order->billing_country;
168
  break;
169
  case 'customer-billing-phone':
170
- $row[] = $order->billing_phone;
171
  break;
172
  case 'customer-last-order-date':
173
  $row[] = get_the_date( get_option( 'date_format' ), $order_id );
@@ -175,7 +176,7 @@ class WCJ_Exporter_Customers {
175
  }
176
  }
177
  $data[] = $row;
178
- $orders[] = $order->billing_email;
179
  }
180
  }
181
  }
4
  *
5
  * The WooCommerce Jetpack Exporter Customers class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.5.9
9
  * @author Algoritmika Ltd.
10
  */
89
  /**
90
  * export_customers_from_orders.
91
  *
92
+ * @version 2.7.0
93
  * @since 2.4.8
94
  * @todo (maybe) add more order fields (shipping)
95
  */
126
  }
127
  foreach ( $loop_orders->posts as $order_id ) {
128
  $order = wc_get_order( $order_id );
129
+ $_billing_email = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->billing_email : $order->get_billing_email() );
130
+ if ( isset( $_billing_email ) && '' != $_billing_email && ! in_array( $_billing_email, $orders ) ) {
131
  $emails_to_skip = array(); // `emails_to_skip` is not really used...
132
+ if ( ! in_array( $_billing_email, $emails_to_skip ) ) {
133
  $total_customers++;
134
  $row = array();
135
  foreach( $fields_ids as $field_id ) {
138
  $row[] = $total_customers;
139
  break;
140
  case 'customer-billing-email':
141
+ $row[] = $_billing_email;
142
  break;
143
  case 'customer-billing-first-name':
144
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->billing_first_name : $order->get_billing_first_name() );
145
  break;
146
  case 'customer-billing-last-name':
147
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->billing_last_name : $order->get_billing_last_name() );
148
  break;
149
  case 'customer-billing-company':
150
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->billing_company : $order->get_billing_company() );
151
  break;
152
  case 'customer-billing-address-1':
153
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->billing_address_1 : $order->get_billing_address_1() );
154
  break;
155
  case 'customer-billing-address-2':
156
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->billing_address_2 : $order->get_billing_address_2() );
157
  break;
158
  case 'customer-billing-city':
159
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->billing_city : $order->get_billing_city() );
160
  break;
161
  case 'customer-billing-state':
162
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->billing_state : $order->get_billing_state() );
163
  break;
164
  case 'customer-billing-postcode':
165
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->billing_postcode : $order->get_billing_postcode() );
166
  break;
167
  case 'customer-billing-country':
168
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->billing_country : $order->get_billing_country() );
169
  break;
170
  case 'customer-billing-phone':
171
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->billing_phone : $order->get_billing_phone() );
172
  break;
173
  case 'customer-last-order-date':
174
  $row[] = get_the_date( get_option( 'date_format' ), $order_id );
176
  }
177
  }
178
  $data[] = $row;
179
+ $orders[] = $_billing_email;
180
  }
181
  }
182
  }
includes/export/class-wcj-exporter-orders.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Exporter Orders class.
6
  *
7
- * @version 2.6.0
8
  * @since 2.5.9
9
  * @author Algoritmika Ltd.
10
  * @todo filter export by date
@@ -29,7 +29,7 @@ class WCJ_Exporter_Orders {
29
  /**
30
  * get_export_orders_row.
31
  *
32
- * @version 2.5.9
33
  * @since 2.5.9
34
  */
35
  function get_export_orders_row( $fields_ids, $order_id, $order, $items, $items_product_input_fields, $item, $item_id ) {
@@ -106,7 +106,7 @@ class WCJ_Exporter_Orders {
106
  $row[] = $items_product_input_fields;
107
  break;
108
  case 'order-currency':
109
- $row[] = $order->get_order_currency();
110
  break;
111
  case 'order-total':
112
  $row[] = $order->get_total();
@@ -115,70 +115,70 @@ class WCJ_Exporter_Orders {
115
  $row[] = $order->get_total_tax();
116
  break;
117
  case 'order-payment-method':
118
- $row[] = $order->payment_method_title;
119
  break;
120
  case 'order-notes':
121
- $row[] = $order->customer_note;
122
  break;
123
  case 'billing-first-name':
124
- $row[] = $order->billing_first_name;
125
  break;
126
  case 'billing-last-name':
127
- $row[] = $order->billing_last_name;
128
  break;
129
  case 'billing-company':
130
- $row[] = $order->billing_company;
131
  break;
132
  case 'billing-address-1':
133
- $row[] = $order->billing_address_1;
134
  break;
135
  case 'billing-address-2':
136
- $row[] = $order->billing_address_2;
137
  break;
138
  case 'billing-city':
139
- $row[] = $order->billing_city;
140
  break;
141
  case 'billing-state':
142
- $row[] = $order->billing_state;
143
  break;
144
  case 'billing-postcode':
145
- $row[] = $order->billing_postcode;
146
  break;
147
  case 'billing-country':
148
- $row[] = $order->billing_country;
149
  break;
150
  case 'billing-phone':
151
- $row[] = $order->billing_phone;
152
  break;
153
  case 'billing-email':
154
- $row[] = $order->billing_email;
155
  break;
156
  case 'shipping-first-name':
157
- $row[] = $order->shipping_first_name;
158
  break;
159
  case 'shipping-last-name':
160
- $row[] = $order->shipping_last_name;
161
  break;
162
  case 'shipping-company':
163
- $row[] = $order->shipping_company;
164
  break;
165
  case 'shipping-address-1':
166
- $row[] = $order->shipping_address_1;
167
  break;
168
  case 'shipping-address-2':
169
- $row[] = $order->shipping_address_2;
170
  break;
171
  case 'shipping-city':
172
- $row[] = $order->shipping_city;
173
  break;
174
  case 'shipping-state':
175
- $row[] = $order->shipping_state;
176
  break;
177
  case 'shipping-postcode':
178
- $row[] = $order->shipping_postcode;
179
  break;
180
  case 'shipping-country':
181
- $row[] = $order->shipping_country;
182
  break;
183
  }
184
  }
4
  *
5
  * The WooCommerce Jetpack Exporter Orders class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.5.9
9
  * @author Algoritmika Ltd.
10
  * @todo filter export by date
29
  /**
30
  * get_export_orders_row.
31
  *
32
+ * @version 2.7.0
33
  * @since 2.5.9
34
  */
35
  function get_export_orders_row( $fields_ids, $order_id, $order, $items, $items_product_input_fields, $item, $item_id ) {
106
  $row[] = $items_product_input_fields;
107
  break;
108
  case 'order-currency':
109
+ $row[] = wcj_get_order_currency( $order );
110
  break;
111
  case 'order-total':
112
  $row[] = $order->get_total();
115
  $row[] = $order->get_total_tax();
116
  break;
117
  case 'order-payment-method':
118
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->payment_method_title : $order->get_payment_method_title() );
119
  break;
120
  case 'order-notes':
121
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->customer_note : $order->get_customer_note() );
122
  break;
123
  case 'billing-first-name':
124
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->billing_first_name : $order->get_billing_first_name() );
125
  break;
126
  case 'billing-last-name':
127
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->billing_last_name : $order->get_billing_last_name() );
128
  break;
129
  case 'billing-company':
130
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->billing_company : $order->get_billing_company() );
131
  break;
132
  case 'billing-address-1':
133
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->billing_address_1 : $order->get_billing_address_1() );
134
  break;
135
  case 'billing-address-2':
136
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->billing_address_2 : $order->get_billing_address_2() );
137
  break;
138
  case 'billing-city':
139
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->billing_city : $order->get_billing_city() );
140
  break;
141
  case 'billing-state':
142
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->billing_state : $order->get_billing_state() );
143
  break;
144
  case 'billing-postcode':
145
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->billing_postcode : $order->get_billing_postcode() );
146
  break;
147
  case 'billing-country':
148
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->billing_country : $order->get_billing_country() );
149
  break;
150
  case 'billing-phone':
151
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->billing_phone : $order->get_billing_phone() );
152
  break;
153
  case 'billing-email':
154
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->billing_email : $order->get_billing_email() );
155
  break;
156
  case 'shipping-first-name':
157
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->shipping_first_name : $order->get_shipping_first_name() );
158
  break;
159
  case 'shipping-last-name':
160
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->shipping_last_name : $order->get_shipping_last_name() );
161
  break;
162
  case 'shipping-company':
163
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->shipping_company : $order->get_shipping_company() );
164
  break;
165
  case 'shipping-address-1':
166
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->shipping_address_1 : $order->get_shipping_address_1() );
167
  break;
168
  case 'shipping-address-2':
169
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->shipping_address_2 : $order->get_shipping_address_2() );
170
  break;
171
  case 'shipping-city':
172
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->shipping_city : $order->get_shipping_city() );
173
  break;
174
  case 'shipping-state':
175
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->shipping_state : $order->get_shipping_state() );
176
  break;
177
  case 'shipping-postcode':
178
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->shipping_postcode : $order->get_shipping_postcode() );
179
  break;
180
  case 'shipping-country':
181
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $order->shipping_country : $order->get_shipping_country() );
182
  break;
183
  }
184
  }
includes/export/class-wcj-exporter-products.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Exporter Products class.
6
  *
7
- * @version 2.6.0
8
  * @since 2.5.9
9
  * @author Algoritmika Ltd.
10
  */
@@ -28,13 +28,13 @@ class WCJ_Exporter_Products {
28
  /**
29
  * get_variable_or_grouped_product_info.
30
  *
31
- * @version 2.5.7
32
  * @since 2.5.7
33
  */
34
  function get_variable_or_grouped_product_info( $_product, $which_info ) {
35
  $all_variations_data = array();
36
  foreach ( $_product->get_children() as $child_id ) {
37
- $variation = $_product->get_child( $child_id );
38
  switch ( $which_info ) {
39
  case 'price':
40
  $all_variations_data[] = ( '' === $variation->get_price() ) ? '-' : $variation->get_price();
@@ -46,7 +46,7 @@ class WCJ_Exporter_Products {
46
  $all_variations_data[] = ( '' === $variation->get_sale_price() ) ? '-' : $variation->get_sale_price();
47
  break;
48
  case 'total_stock':
49
- $all_variations_data[] = ( null === $variation->get_total_stock() ) ? '-' : $variation->get_total_stock();
50
  break;
51
  case 'stock_quantity':
52
  $all_variations_data[] = ( null === $variation->get_stock_quantity() ) ? '-' : $variation->get_stock_quantity();
@@ -59,7 +59,7 @@ class WCJ_Exporter_Products {
59
  /**
60
  * export_products.
61
  *
62
- * @version 2.6.0
63
  * @since 2.5.3
64
  * @todo product attributes
65
  */
@@ -137,7 +137,7 @@ class WCJ_Exporter_Products {
137
  break;
138
  case 'product-stock':
139
  $row[] = ( $_product->is_type( 'variable' ) || $_product->is_type( 'grouped' ) ?
140
- $this->get_variable_or_grouped_product_info( $_product, 'total_stock' ) : $_product->get_total_stock() );
141
  break;
142
  case 'product-regular-price':
143
  $row[] = ( $_product->is_type( 'variable' ) || $_product->is_type( 'grouped' ) ?
@@ -161,13 +161,13 @@ class WCJ_Exporter_Products {
161
  $row[] = wcj_get_product_image_url( $product_id, 'full' );
162
  break;
163
  case 'product-short-description':
164
- $row[] = $_product->post->post_excerpt;
165
  break;
166
  case 'product-description':
167
- $row[] = $_product->post->post_content;
168
  break;
169
  case 'product-status':
170
- $row[] = $_product->post->post_status;
171
  break;
172
  case 'product-url':
173
  $row[] = $_product->get_permalink();
@@ -191,13 +191,13 @@ class WCJ_Exporter_Products {
191
  $row[] = $_product->get_weight();
192
  break;
193
  case 'product-downloadable':
194
- $row[] = $_product->downloadable;
195
  break;
196
  case 'product-virtual':
197
- $row[] = $_product->virtual;
198
  break;
199
  case 'product-sold-individually':
200
- $row[] = $_product->sold_individually;
201
  break;
202
  case 'product-tax-status':
203
  $row[] = $_product->get_tax_status();
@@ -206,28 +206,28 @@ class WCJ_Exporter_Products {
206
  $row[] = $_product->get_tax_class();
207
  break;
208
  case 'product-manage-stock':
209
- $row[] = $_product->manage_stock;
210
  break;
211
  case 'product-stock-status':
212
- $row[] = $_product->stock_status;
213
  break;
214
  case 'product-backorders':
215
- $row[] = $_product->backorders;
216
  break;
217
  case 'product-featured':
218
- $row[] = $_product->featured;
219
  break;
220
  case 'product-visibility':
221
- $row[] = $_product->visibility;
222
  break;
223
  case 'product-price-including-tax':
224
- $row[] = $_product->get_price_including_tax();
225
  break;
226
  case 'product-price-excluding-tax':
227
- $row[] = $_product->get_price_excluding_tax();
228
  break;
229
  case 'product-display-price':
230
- $row[] = $_product->get_display_price();
231
  break;
232
  case 'product-average-rating':
233
  $row[] = $_product->get_average_rating();
@@ -239,13 +239,13 @@ class WCJ_Exporter_Products {
239
  $row[] = $_product->get_review_count();
240
  break;
241
  case 'product-categories':
242
- $row[] = $_product->get_categories();
243
  break;
244
  case 'product-tags':
245
- $row[] = $_product->get_tags();
246
  break;
247
  case 'product-dimensions':
248
- $row[] = $_product->get_dimensions();
249
  break;
250
  case 'product-formatted-name':
251
  $row[] = $_product->get_formatted_name();
4
  *
5
  * The WooCommerce Jetpack Exporter Products class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.5.9
9
  * @author Algoritmika Ltd.
10
  */
28
  /**
29
  * get_variable_or_grouped_product_info.
30
  *
31
+ * @version 2.7.0
32
  * @since 2.5.7
33
  */
34
  function get_variable_or_grouped_product_info( $_product, $which_info ) {
35
  $all_variations_data = array();
36
  foreach ( $_product->get_children() as $child_id ) {
37
+ $variation = ( WCJ_IS_WC_VERSION_BELOW_3 ? $_product->get_child( $child_id ) : wc_get_product( $child_id ) );
38
  switch ( $which_info ) {
39
  case 'price':
40
  $all_variations_data[] = ( '' === $variation->get_price() ) ? '-' : $variation->get_price();
46
  $all_variations_data[] = ( '' === $variation->get_sale_price() ) ? '-' : $variation->get_sale_price();
47
  break;
48
  case 'total_stock':
49
+ $all_variations_data[] = ( null === wcj_get_product_total_stock( $variation ) ) ? '-' : wcj_get_product_total_stock( $variation );
50
  break;
51
  case 'stock_quantity':
52
  $all_variations_data[] = ( null === $variation->get_stock_quantity() ) ? '-' : $variation->get_stock_quantity();
59
  /**
60
  * export_products.
61
  *
62
+ * @version 2.7.0
63
  * @since 2.5.3
64
  * @todo product attributes
65
  */
137
  break;
138
  case 'product-stock':
139
  $row[] = ( $_product->is_type( 'variable' ) || $_product->is_type( 'grouped' ) ?
140
+ $this->get_variable_or_grouped_product_info( $_product, 'total_stock' ) : wcj_get_product_total_stock( $_product ) );
141
  break;
142
  case 'product-regular-price':
143
  $row[] = ( $_product->is_type( 'variable' ) || $_product->is_type( 'grouped' ) ?
161
  $row[] = wcj_get_product_image_url( $product_id, 'full' );
162
  break;
163
  case 'product-short-description':
164
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $_product->post->post_excerpt : $_product->get_short_description() );
165
  break;
166
  case 'product-description':
167
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $_product->post->post_content : $_product->get_description() );
168
  break;
169
  case 'product-status':
170
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $_product->post->post_status : $_product->get_status() );
171
  break;
172
  case 'product-url':
173
  $row[] = $_product->get_permalink();
191
  $row[] = $_product->get_weight();
192
  break;
193
  case 'product-downloadable':
194
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $_product->downloadable : $_product->get_downloadable() );
195
  break;
196
  case 'product-virtual':
197
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $_product->virtual : $_product->get_virtual() );
198
  break;
199
  case 'product-sold-individually':
200
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $_product->sold_individually : $_product->get_sold_individually() );
201
  break;
202
  case 'product-tax-status':
203
  $row[] = $_product->get_tax_status();
206
  $row[] = $_product->get_tax_class();
207
  break;
208
  case 'product-manage-stock':
209
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $_product->manage_stock : $_product->get_manage_stock() );
210
  break;
211
  case 'product-stock-status':
212
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $_product->stock_status : $_product->get_stock_status() );
213
  break;
214
  case 'product-backorders':
215
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $_product->backorders : $_product->get_backorders() );
216
  break;
217
  case 'product-featured':
218
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $_product->featured : $_product->get_featured() );
219
  break;
220
  case 'product-visibility':
221
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $_product->visibility : $_product->get_catalog_visibility() );
222
  break;
223
  case 'product-price-including-tax':
224
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $_product->get_price_including_tax() : wc_get_price_including_tax( $_product ) );
225
  break;
226
  case 'product-price-excluding-tax':
227
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $_product->get_price_excluding_tax() : wc_get_price_excluding_tax( $_product ) );
228
  break;
229
  case 'product-display-price':
230
+ $row[] = wcj_get_product_display_price( $_product );
231
  break;
232
  case 'product-average-rating':
233
  $row[] = $_product->get_average_rating();
239
  $row[] = $_product->get_review_count();
240
  break;
241
  case 'product-categories':
242
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $_product->get_categories() : wc_get_product_category_list( $product_id ) );
243
  break;
244
  case 'product-tags':
245
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $_product->get_tags() : wc_get_product_tag_list( $product_id ) );
246
  break;
247
  case 'product-dimensions':
248
+ $row[] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $_product->get_dimensions() : wc_format_dimensions( $_product->get_dimensions( false ) ) );
249
  break;
250
  case 'product-formatted-name':
251
  $row[] = $_product->get_formatted_name();
includes/export/class-wcj-fields-helper.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Export Fields Helper class.
6
  *
7
- * @version 2.6.0
8
  * @since 2.5.9
9
  * @author Algoritmika Ltd.
10
  */
@@ -18,10 +18,11 @@ class WCJ_Export_Fields_Helper {
18
  /**
19
  * Constructor.
20
  *
21
- * @version 2.5.9
22
  * @since 2.5.9
23
  */
24
  function __construct() {
 
25
  }
26
 
27
  /**
4
  *
5
  * The WooCommerce Jetpack Export Fields Helper class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.5.9
9
  * @author Algoritmika Ltd.
10
  */
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 2.7.0
22
  * @since 2.5.9
23
  */
24
  function __construct() {
25
+ return true;
26
  }
27
 
28
  /**
includes/functions/wcj-exchange-rates-functions.php ADDED
@@ -0,0 +1,199 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WooCommerce Jetpack Exchange Rates Functions
4
+ *
5
+ * @version 2.7.0
6
+ * @since 2.7.0
7
+ * @author Algoritmika Ltd.
8
+ */
9
+
10
+ if ( ! defined( 'ABSPATH' ) ) exit;
11
+
12
+ if ( ! function_exists( 'wcj_get_currency_exchange_rate_servers' ) ) {
13
+ /**
14
+ * wcj_get_currency_exchange_rate_servers.
15
+ *
16
+ * @version 2.6.0
17
+ * @since 2.6.0
18
+ */
19
+ function wcj_get_currency_exchange_rate_servers() {
20
+ return array(
21
+ 'yahoo' => __( 'Yahoo', 'woocommerce-jetpack' ),
22
+ 'ecb' => __( 'European Central Bank (ECB)', 'woocommerce-jetpack' ),
23
+ 'tcmb' => __( 'TCMB', 'woocommerce-jetpack' ),
24
+ );
25
+ }
26
+ }
27
+
28
+ if ( ! function_exists( 'alg_get_exchange_rate' ) ) {
29
+ /*
30
+ * alg_get_exchange_rate.
31
+ *
32
+ * @version 2.7.0
33
+ * @since 2.6.0
34
+ */
35
+ function alg_get_exchange_rate( $currency_from, $currency_to ) {
36
+ if ( 'yes' === ( $calculate_by_invert = get_option( 'wcj_currency_exchange_rates_calculate_by_invert', 'no' ) ) ) {
37
+ $_currency_to = $currency_to;
38
+ $currency_to = $currency_from;
39
+ $currency_from = $_currency_to;
40
+ }
41
+ $exchange_rates_server = get_option( 'wcj_currency_exchange_rates_server', 'yahoo' );
42
+ switch ( $exchange_rates_server ) {
43
+ case 'tcmb':
44
+ $return = alg_tcmb_get_exchange_rate( $currency_from, $currency_to );
45
+ break;
46
+ case 'ecb':
47
+ $return = alg_ecb_get_exchange_rate( $currency_from, $currency_to );
48
+ break;
49
+ default: // 'yahoo'
50
+ $return = alg_yahoo_get_exchange_rate( $currency_from, $currency_to );
51
+ break;
52
+ }
53
+ return ( 'yes' === $calculate_by_invert ) ? round( ( 1 / $return ), 6 ) : $return;
54
+ }
55
+ }
56
+
57
+ if ( ! function_exists( 'alg_ecb_get_exchange_rate' ) ) {
58
+ /*
59
+ * alg_ecb_get_exchange_rate.
60
+ *
61
+ * @version 2.7.0
62
+ * @since 2.6.0
63
+ */
64
+ function alg_ecb_get_exchange_rate( $currency_from, $currency_to ) {
65
+ $final_rate = false;
66
+ if ( function_exists( 'simplexml_load_file' ) ) {
67
+ $xml = simplexml_load_file( 'http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml' );
68
+ if ( isset( $xml->Cube->Cube->Cube ) ) {
69
+ if ( 'EUR' === $currency_from ) {
70
+ $EUR_currency_from_rate = 1;
71
+ }
72
+ if ( 'EUR' === $currency_to ) {
73
+ $EUR_currency_to_rate = 1;
74
+ }
75
+ foreach ( $xml->Cube->Cube->Cube as $currency_rate ) {
76
+ $currency_rate = $currency_rate->attributes();
77
+ if ( ! isset( $EUR_currency_from_rate ) && $currency_from == $currency_rate->currency ) {
78
+ $EUR_currency_from_rate = (float) $currency_rate->rate;
79
+ }
80
+ if ( ! isset( $EUR_currency_to_rate ) && $currency_to == $currency_rate->currency ) {
81
+ $EUR_currency_to_rate = (float) $currency_rate->rate;
82
+ }
83
+ }
84
+ if ( isset( $EUR_currency_from_rate ) && isset( $EUR_currency_to_rate ) && 0 != $EUR_currency_from_rate ) {
85
+ $final_rate = round( $EUR_currency_to_rate / $EUR_currency_from_rate, 6 );
86
+ } else {
87
+ $final_rate = false;
88
+ }
89
+ }
90
+ }
91
+ return $final_rate;
92
+ }
93
+ }
94
+
95
+ if ( ! function_exists( 'alg_tcmb_get_exchange_rate_TRY' ) ) {
96
+ /*
97
+ * alg_tcmb_get_exchange_rate_TRY.
98
+ *
99
+ * @version 2.7.0
100
+ * @since 2.6.0
101
+ */
102
+ function alg_tcmb_get_exchange_rate_TRY( $currency_from ) {
103
+ if ( 'TRY' === $currency_from ) {
104
+ return 1;
105
+ }
106
+ $xml = simplexml_load_file( 'http://www.tcmb.gov.tr/kurlar/today.xml' );
107
+ if ( isset( $xml->Currency ) ) {
108
+ foreach ( $xml->Currency as $the_rate ) {
109
+ $attributes = $the_rate->attributes();
110
+ if ( isset( $attributes['CurrencyCode'] ) ) {
111
+ $currency_code = (string) $attributes['CurrencyCode'];
112
+ if ( $currency_code === $currency_from ) {
113
+ // Possible values: ForexSelling, ForexBuying, BanknoteSelling, BanknoteBuying. Not used: CrossRateUSD, CrossRateOther.
114
+ if ( '' != ( $property_to_check = apply_filters( 'wcj_currency_exchange_rates_tcmb_property_to_check', '' ) ) ) {
115
+ if ( isset( $the_rate->{$property_to_check} ) ) {
116
+ $rate = (float) $the_rate->{$property_to_check};
117
+ } else {
118
+ continue;
119
+ }
120
+ } else {
121
+ if ( isset( $the_rate->ForexSelling ) ) {
122
+ $rate = (float) $the_rate->ForexSelling;
123
+ } elseif ( isset( $the_rate->ForexBuying ) ) {
124
+ $rate = (float) $the_rate->ForexBuying;
125
+ } elseif ( isset( $the_rate->BanknoteSelling ) ) {
126
+ $rate = (float) $the_rate->BanknoteSelling;
127
+ } elseif ( isset( $the_rate->BanknoteBuying ) ) {
128
+ $rate = (float) $the_rate->BanknoteBuying;
129
+ } else {
130
+ continue;
131
+ }
132
+ }
133
+ $unit = ( isset( $the_rate->Unit ) ) ? (float) $the_rate->Unit : 1;
134
+ return ( $rate / $unit );
135
+ }
136
+ }
137
+ }
138
+ }
139
+ return false;
140
+ }
141
+ }
142
+
143
+ if ( ! function_exists( 'alg_tcmb_get_exchange_rate' ) ) {
144
+ /*
145
+ * alg_tcmb_get_exchange_rate.
146
+ *
147
+ * @version 2.7.0
148
+ * @since 2.6.0
149
+ */
150
+ function alg_tcmb_get_exchange_rate( $currency_from, $currency_to ) {
151
+ $currency_from_TRY = alg_tcmb_get_exchange_rate_TRY( strtoupper( $currency_from ) );
152
+ if ( false == $currency_from_TRY ) {
153
+ return false;
154
+ }
155
+ $currency_to_TRY = alg_tcmb_get_exchange_rate_TRY( strtoupper( $currency_to ) );
156
+ if ( false == $currency_to_TRY ) {
157
+ return false;
158
+ }
159
+ if ( 1 == $currency_to_TRY ) {
160
+ return round( $currency_from_TRY, 6 );
161
+ }
162
+ return round( ( $currency_from_TRY / $currency_to_TRY ), 6 );
163
+ }
164
+ }
165
+
166
+ if ( ! function_exists( 'alg_yahoo_get_exchange_rate' ) ) {
167
+ /*
168
+ * alg_yahoo_get_exchange_rate.
169
+ *
170
+ * @version 2.7.0
171
+ * @return float rate on success, else 0
172
+ */
173
+ function alg_yahoo_get_exchange_rate( $currency_from, $currency_to ) {
174
+
175
+ $url = "http://query.yahooapis.com/v1/public/yql?q=select%20rate%2Cname%20from%20csv%20where%20url%3D'http%3A%2F%2Fdownload.finance.yahoo.com%2Fd%2Fquotes%3Fs%3D" . $currency_from . $currency_to . "%253DX%26f%3Dl1n'%20and%20columns%3D'rate%2Cname'&format=json";
176
+ // $url = 'http://rate-exchange.appspot.com/currency?from=' . $currency_from . '&to=' . $currency_to;
177
+
178
+ ob_start();
179
+ $max_execution_time = ini_get( 'max_execution_time' );
180
+ set_time_limit( 5 );
181
+
182
+ $response = '';
183
+ if ( 'no' === get_option( 'wcj_currency_exchange_rates_always_curl', 'no' ) && ini_get( 'allow_url_fopen' ) ) {
184
+ $response = file_get_contents( $url );
185
+ } elseif ( function_exists( 'curl_version' ) ) {
186
+ $curl = curl_init( $url );
187
+ curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );
188
+ $response = curl_exec( $curl );
189
+ curl_close( $curl );
190
+ }
191
+ $exchange_rate = json_decode( $response );
192
+
193
+ set_time_limit( $max_execution_time );
194
+ ob_end_clean();
195
+
196
+ return ( isset( $exchange_rate->query->results->row->rate ) ) ? floatval( $exchange_rate->query->results->row->rate ) : 0;
197
+ // return ( isset( $exchange_rate->rate ) ) ? $exchange_rate->rate : 0;
198
+ }
199
+ }
includes/functions/wcj-functions.php CHANGED
@@ -4,23 +4,130 @@
4
  *
5
  * The WooCommerce Jetpack Functions.
6
  *
7
- * @version 2.6.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
11
- if ( ! function_exists( 'wcj_get_currency_exchange_rate_servers' ) ) {
 
 
12
  /**
13
- * wcj_get_currency_exchange_rate_servers.
14
  *
15
- * @version 2.6.0
16
- * @since 2.6.0
17
  */
18
- function wcj_get_currency_exchange_rate_servers() {
19
- return array(
20
- 'yahoo' => __( 'Yahoo', 'woocommerce-jetpack' ),
21
- 'ecb' => __( 'European Central Bank (ECB)', 'woocommerce-jetpack' ),
22
- 'tcmb' => __( 'TCMB', 'woocommerce-jetpack' ),
23
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  }
25
  }
26
 
@@ -30,17 +137,21 @@ if ( ! function_exists( 'wcj_get_order_item_meta_info' ) ) {
30
  *
31
  * from woocommerce\includes\admin\meta-boxes\views\html-order-item-meta.php
32
  *
33
- * @version 2.5.9
34
  * @since 2.5.9
35
  */
36
  function wcj_get_order_item_meta_info( $item_id, $item, $_order, $exclude_wcj_meta = false, $_product = null ) {
37
  $meta_info = '';
38
- if ( $metadata = $_order->has_meta( $item_id ) ) {
 
39
  $meta_info = array();
40
  foreach ( $metadata as $meta ) {
41
 
 
 
 
42
  // Skip hidden core fields
43
- if ( in_array( $meta['meta_key'], apply_filters( 'woocommerce_hidden_order_itemmeta', array(
44
  '_qty',
45
  '_tax_class',
46
  '_product_id',
@@ -55,20 +166,20 @@ if ( ! function_exists( 'wcj_get_order_item_meta_info' ) ) {
55
  continue;
56
  }
57
 
58
- if ( $exclude_wcj_meta && ( 'wcj' === substr( $meta['meta_key'], 0, 3 ) || '_wcj' === substr( $meta['meta_key'], 0, 4 ) ) ) {
59
  continue;
60
  }
61
 
62
  // Skip serialised meta
63
- if ( is_serialized( $meta['meta_value'] ) ) {
64
  continue;
65
  }
66
 
67
  // Get attribute data
68
- if ( taxonomy_exists( wc_sanitize_taxonomy_name( $meta['meta_key'] ) ) ) {
69
- $term = get_term_by( 'slug', $meta['meta_value'], wc_sanitize_taxonomy_name( $meta['meta_key'] ) );
70
- $meta['meta_key'] = wc_attribute_label( wc_sanitize_taxonomy_name( $meta['meta_key'] ) );
71
- $meta['meta_value'] = isset( $term->name ) ? $term->name : $meta['meta_value'];
72
  } else {
73
  $the_product = null;
74
  if ( is_object( $_product ) ) {
@@ -76,9 +187,9 @@ if ( ! function_exists( 'wcj_get_order_item_meta_info' ) ) {
76
  } elseif ( is_object( $item ) ) {
77
  $the_product = $_order->get_product_from_item( $item );
78
  }
79
- $meta['meta_key'] = ( is_object( $the_product ) ) ? wc_attribute_label( $meta['meta_key'], $the_product ) : $meta['meta_key'];
80
  }
81
- $meta_info[] = wp_kses_post( rawurldecode( $meta['meta_key'] ) ) . ': ' . wp_kses_post( rawurldecode( $meta['meta_value'] ) );
82
  }
83
  $meta_info = implode( ', ', $meta_info );
84
  }
@@ -118,233 +229,6 @@ if ( ! function_exists( 'wcj_is_bot' ) ) {
118
  }
119
  }
120
 
121
- if ( ! function_exists( 'wcj_get_currency_exchange_rate_product_base_currency' ) ) {
122
- /**
123
- * wcj_get_currency_exchange_rate_product_base_currency.
124
- *
125
- * @version 2.5.6
126
- * @since 2.5.6
127
- */
128
- function wcj_get_currency_exchange_rate_product_base_currency( $currency_code ) {
129
- $currency_exchange_rate = 1;
130
- $total_number = apply_filters( 'booster_get_option', 1, get_option( 'wcj_multicurrency_base_price_total_number', 1 ) );
131
- for ( $i = 1; $i <= $total_number; $i++ ) {
132
- if ( $currency_code === get_option( 'wcj_multicurrency_base_price_currency_' . $i ) ) {
133
- $currency_exchange_rate = get_option( 'wcj_multicurrency_base_price_exchange_rate_' . $i );
134
- break;
135
- }
136
- }
137
- return $currency_exchange_rate;
138
- }
139
- }
140
-
141
- if ( ! function_exists( 'wcj_price_by_product_base_currency' ) ) {
142
- /**
143
- * wcj_price_by_product_base_currency.
144
- *
145
- * @version 2.5.6
146
- * @since 2.5.6
147
- */
148
- function wcj_price_by_product_base_currency( $price, $product_id ) {
149
- $multicurrency_base_price_currency = get_post_meta( $product_id, '_' . 'wcj_multicurrency_base_price_currency', true );
150
- if ( '' != $multicurrency_base_price_currency ) {
151
- if ( 1 != ( $currency_exchange_rate = wcj_get_currency_exchange_rate_product_base_currency( $multicurrency_base_price_currency ) ) ) {
152
- return $price / $currency_exchange_rate;
153
- }
154
- }
155
- return $price;
156
- }
157
- }
158
-
159
- if ( ! function_exists( 'wcj_price_by_country' ) ) {
160
- /**
161
- * wcj_price_by_country.
162
- *
163
- * @version 2.6.0
164
- * @since 2.5.3
165
- */
166
- function wcj_price_by_country( $price, $product, $group_id, $the_current_filter = '' ) {
167
-
168
- $is_price_modified = false;
169
-
170
- if ( 'yes' === get_option( 'wcj_price_by_country_local_enabled', 'yes' ) ) {
171
- // Per product
172
- $meta_box_id = 'price_by_country';
173
- $scope = 'local';
174
-
175
- if ( is_numeric( $product ) ) {
176
- $the_product_id = $product;
177
- } else {
178
- $the_product_id = ( isset( $product->variation_id ) ) ? $product->variation_id : $product->id;
179
- }
180
-
181
- $meta_id = '_' . 'wcj_' . $meta_box_id . '_make_empty_price_' . $scope . '_' . $group_id;
182
- if ( 'on' === get_post_meta( $the_product_id, $meta_id, true ) ) {
183
- return '';
184
- }
185
-
186
- $price_by_country = '';
187
- if ( '' == $the_current_filter ) {
188
- $the_current_filter = current_filter();
189
- }
190
- if ( 'woocommerce_get_price_including_tax' == $the_current_filter || 'woocommerce_get_price_excluding_tax' == $the_current_filter ) {
191
- $_product = wc_get_product( $the_product_id );
192
- $get_price_method = 'get_price_' . get_option( 'woocommerce_tax_display_shop' ) . 'uding_tax';
193
- return $_product->$get_price_method();
194
-
195
- } elseif ( 'woocommerce_get_price' == $the_current_filter || 'woocommerce_variation_prices_price' == $the_current_filter ) {
196
-
197
- $regular_or_sale = '_regular_price_';
198
- $meta_id = '_' . 'wcj_' . $meta_box_id . $regular_or_sale . $scope . '_' . $group_id;
199
- $regular_price = get_post_meta( $the_product_id, $meta_id, true );
200
-
201
- $regular_or_sale = '_sale_price_';
202
- $meta_id = '_' . 'wcj_' . $meta_box_id . $regular_or_sale . $scope . '_' . $group_id;
203
- $sale_price = get_post_meta( $the_product_id, $meta_id, true );
204
-
205
- if ( ! empty( $sale_price ) && $sale_price < $regular_price ) {
206
- $price_by_country = $sale_price;
207
- } else {
208
- $price_by_country = $regular_price;
209
- }
210
-
211
- }
212
- elseif (
213
- 'woocommerce_get_regular_price' == $the_current_filter ||
214
- 'woocommerce_get_sale_price' == $the_current_filter ||
215
- 'woocommerce_variation_prices_regular_price' == $the_current_filter ||
216
- 'woocommerce_variation_prices_sale_price' == $the_current_filter
217
- ) {
218
- $regular_or_sale = (
219
- 'woocommerce_get_regular_price' == $the_current_filter || 'woocommerce_variation_prices_regular_price' == $the_current_filter
220
- ) ? '_regular_price_' : '_sale_price_';
221
- $meta_id = '_' . 'wcj_' . $meta_box_id . $regular_or_sale . $scope . '_' . $group_id;
222
- $price_by_country = get_post_meta( $the_product_id, $meta_id, true );
223
- }
224
-
225
- if ( '' != $price_by_country ) {
226
- $modified_price = $price_by_country;
227
- $is_price_modified = true;
228
- }
229
- }
230
-
231
- if ( ! $is_price_modified ) {
232
- if ( 'yes' === get_option( 'wcj_price_by_country_make_empty_price_group_' . $group_id, 1 ) || '' === $price ) {
233
- return '';
234
- }
235
- }
236
-
237
- if ( ! $is_price_modified ) {
238
- // Globally
239
- $country_exchange_rate = get_option( 'wcj_price_by_country_exchange_rate_group_' . $group_id, 1 );
240
- // if ( 1 != $country_exchange_rate ) {
241
- $modified_price = $price * $country_exchange_rate;
242
- $rounding = get_option( 'wcj_price_by_country_rounding', 'none' );
243
- $precision = get_option( 'woocommerce_price_num_decimals', 2 );
244
- switch ( $rounding ) {
245
- case 'round':
246
- $modified_price = round( $modified_price );
247
- break;
248
- case 'floor':
249
- $modified_price = floor( $modified_price );
250
- break;
251
- case 'ceil':
252
- $modified_price = ceil( $modified_price );
253
- break;
254
- default: // case 'none':
255
- $modified_price = round( $modified_price, $precision ); // $modified_price
256
- break;
257
- }
258
- $is_price_modified = true;
259
- // }
260
- if ( 'yes' === get_option( 'wcj_price_by_country_make_pretty', 'no' ) && $modified_price >= 0.5 && $precision > 0 ) {
261
- $modified_price = round( $modified_price ) - ( get_option( 'wcj_price_by_country_make_pretty_min_amount_multiplier', 1 ) / pow( 10, $precision ) );
262
- }
263
- }
264
-
265
- return ( $is_price_modified ) ? $modified_price : $price;
266
- }
267
- }
268
-
269
- if ( ! function_exists( 'wcj_update_products_price_by_country_for_single_product' ) ) {
270
- /**
271
- * wcj_update_products_price_by_country_for_single_product.
272
- *
273
- * @version 2.5.6
274
- * @since 2.5.3
275
- */
276
- function wcj_update_products_price_by_country_for_single_product( $product_id ) {
277
- $_product = wc_get_product( $product_id );
278
- if ( $_product->is_type( 'variable' ) ) {
279
- $available_variations = $_product->get_available_variations();
280
- for ( $i = 1; $i <= apply_filters( 'booster_get_option', 1, get_option( 'wcj_price_by_country_total_groups_number', 1 ) ); $i++ ) {
281
- $min_variation_price = PHP_INT_MAX;
282
- $max_variation_price = 0;
283
- foreach ( $available_variations as $variation ) {
284
- $variation_product_id = $variation['variation_id'];
285
- $_old_variation_price = get_post_meta( $variation_product_id, '_price', true );
286
- if ( wcj_is_module_enabled( 'multicurrency_base_price' ) ) {
287
- $_old_variation_price = wcj_price_by_product_base_currency( $_old_variation_price, $product_id );
288
- }
289
- $price_by_country = wcj_price_by_country( $_old_variation_price, $variation_product_id, $i, 'woocommerce_get_price' );
290
- update_post_meta( $variation_product_id, '_' . 'wcj_price_by_country_' . $i, $price_by_country );
291
- if ( '' != $price_by_country && $price_by_country < $min_variation_price ) {
292
- $min_variation_price = $price_by_country;
293
- }
294
- if ( $price_by_country > $max_variation_price ) {
295
- $max_variation_price = $price_by_country;
296
- }
297
- }
298
- delete_post_meta( $product_id, '_' . 'wcj_price_by_country_' . $i );
299
- add_post_meta( $product_id, '_' . 'wcj_price_by_country_' . $i, $min_variation_price );
300
- if ( $min_variation_price != $max_variation_price ) {
301
- add_post_meta( $product_id, '_' . 'wcj_price_by_country_' . $i, $max_variation_price );
302
- }
303
- }
304
- } else {
305
- $_old_price = get_post_meta( $product_id, '_price', true );
306
- if ( wcj_is_module_enabled( 'multicurrency_base_price' ) ) {
307
- $_old_price = wcj_price_by_product_base_currency( $_old_price, $product_id );
308
- }
309
- for ( $i = 1; $i <= apply_filters( 'booster_get_option', 1, get_option( 'wcj_price_by_country_total_groups_number', 1 ) ); $i++ ) {
310
- $price_by_country = wcj_price_by_country( $_old_price, $product_id, $i, 'woocommerce_get_price' );
311
- update_post_meta( $product_id, '_' . 'wcj_price_by_country_' . $i, $price_by_country );
312
- }
313
- }
314
- }
315
- }
316
-
317
- if ( ! function_exists( 'wcj_update_products_price_by_country' ) ) {
318
- /**
319
- * wcj_update_products_price_by_country - all products.
320
- *
321
- * @version 2.5.3
322
- * @since 2.5.3
323
- */
324
- function wcj_update_products_price_by_country() {
325
- $offset = 0;
326
- $block_size = 96;
327
- while( true ) {
328
- $args = array(
329
- 'post_type' => 'product',
330
- 'post_status' => 'any',
331
- 'posts_per_page' => $block_size,
332
- 'offset' => $offset,
333
- 'orderby' => 'title',
334
- 'order' => 'ASC',
335
- );
336
- $loop = new WP_Query( $args );
337
- if ( ! $loop->have_posts() ) break;
338
- while ( $loop->have_posts() ) : $loop->the_post();
339
- $product_id = $loop->post->ID;
340
- wcj_update_products_price_by_country_for_single_product( $product_id );
341
- endwhile;
342
- $offset += $block_size;
343
- }
344
- wp_reset_postdata();
345
- }
346
- }
347
-
348
  if ( ! function_exists( 'wcj_get_rocket_icon' ) ) {
349
  /**
350
  * wcj_get_rocket_icon.
@@ -381,80 +265,6 @@ if ( ! function_exists( 'wcj_add_files_upload_form_to_checkout_frontend' ) ) {
381
  }
382
  }
383
 
384
- if ( ! function_exists( 'wcj_get_current_currency_code' ) ) {
385
- /**
386
- * wcj_get_current_currency_code.
387
- *
388
- * @version 2.5.0
389
- * @since 2.5.0
390
- */
391
- function wcj_get_current_currency_code( $module ) {
392
- $current_currency_code = get_woocommerce_currency();
393
- if ( wcj_is_module_enabled( $module ) ) {
394
- if ( 'multicurrency' === $module ) {
395
- $current_currency_code = ( isset( $_SESSION['wcj-currency'] ) ) ? $_SESSION['wcj-currency'] : $current_currency_code;
396
- }
397
- }
398
- return $current_currency_code;
399
- }
400
- }
401
-
402
- if ( ! function_exists( 'wcj_get_currency_by_country' ) ) {
403
- /**
404
- * wcj_get_currency_by_country.
405
- *
406
- * @version 2.5.4
407
- * @since 2.5.4
408
- */
409
- function wcj_get_currency_by_country( $country_code ) {
410
- $currency_code = '';
411
- for ( $i = 1; $i <= apply_filters( 'booster_get_option', 1, get_option( 'wcj_price_by_country_total_groups_number', 1 ) ); $i++ ) {
412
- switch ( get_option( 'wcj_price_by_country_selection', 'comma_list' ) ) {
413
- case 'comma_list':
414
- $country_exchange_rate_group = get_option( 'wcj_price_by_country_exchange_rate_countries_group_' . $i );
415
- $country_exchange_rate_group = str_replace( ' ', '', $country_exchange_rate_group );
416
- $country_exchange_rate_group = explode( ',', $country_exchange_rate_group );
417
- break;
418
- case 'multiselect':
419
- $country_exchange_rate_group = get_option( 'wcj_price_by_country_countries_group_' . $i );
420
- break;
421
- case 'chosen_select':
422
- $country_exchange_rate_group = get_option( 'wcj_price_by_country_countries_group_chosen_select_' . $i );
423
- break;
424
- }
425
- if ( in_array( $country_code, $country_exchange_rate_group ) ) {
426
- $currency_code = get_option( 'wcj_price_by_country_exchange_rate_currency_group_' . $i );
427
- break;
428
- }
429
- }
430
- return ( '' == $currency_code ) ? get_option( 'woocommerce_currency' ) : $currency_code;
431
- }
432
- }
433
-
434
- if ( ! function_exists( 'wcj_get_currency_exchange_rate' ) ) {
435
- /**
436
- * wcj_get_currency_exchange_rate.
437
- *
438
- * @version 2.5.0
439
- * @since 2.5.0
440
- */
441
- function wcj_get_currency_exchange_rate( $module, $currency_code ) {
442
- $currency_exchange_rate = 1;
443
- if ( wcj_is_module_enabled( $module ) ) {
444
- if ( 'multicurrency' === $module ) {
445
- $total_number = apply_filters( 'booster_get_option', 2, get_option( 'wcj_multicurrency_total_number', 2 ) );
446
- for ( $i = 1; $i <= $total_number; $i++ ) {
447
- if ( $currency_code === get_option( 'wcj_multicurrency_currency_' . $i ) ) {
448
- $currency_exchange_rate = get_option( 'wcj_multicurrency_exchange_rate_' . $i );
449
- break;
450
- }
451
- }
452
- }
453
- }
454
- return $currency_exchange_rate;
455
- }
456
- }
457
-
458
  if ( ! function_exists( 'wcj_variation_radio_button' ) ) {
459
  /**
460
  * wcj_variation_radio_button.
@@ -855,115 +665,6 @@ if ( ! function_exists( 'wcj_get_product' ) ) {
855
  }
856
  }
857
 
858
- /**
859
- * wc_get_product_purchase_price.
860
- */
861
- if ( ! function_exists( 'wc_get_product_purchase_price' ) ) {
862
- function wc_get_product_purchase_price( $product_id = 0 ) {
863
- $the_product = wcj_get_product( $product_id );
864
- return $the_product->get_purchase_price();
865
- }
866
- }
867
-
868
- /**
869
- * is_shop_manager.
870
- *
871
- * @return bool
872
- */
873
- if ( ! function_exists( 'is_shop_manager' ) ) {
874
- function is_shop_manager( $user_id = 0 ) {
875
- $the_user = ( 0 == $user_id ) ? wp_get_current_user() : get_user_by( 'id', $user_id );
876
- //if ( isset( $the_user['roles'][0] ) && 'shop_manager' === $the_user['roles'][0] ) {
877
- return ( isset( $the_user->roles[0] ) && 'shop_manager' === $the_user->roles[0] ) ? true : false;
878
- }
879
- }
880
-
881
- /**
882
- * wcj_get_current_user_all_roles.
883
- *
884
- * @version 2.5.6
885
- * @since 2.5.6
886
- */
887
- if ( ! function_exists( 'wcj_get_current_user_all_roles' ) ) {
888
- function wcj_get_current_user_all_roles() {
889
- $current_user = wp_get_current_user();
890
- return ( ! empty( $current_user->roles ) ) ? $current_user->roles : array( 'guest' );
891
- }
892
- }
893
-
894
- /**
895
- * wcj_get_current_user_first_role.
896
- *
897
- * @version 2.5.3
898
- * @since 2.5.3
899
- */
900
- if ( ! function_exists( 'wcj_get_current_user_first_role' ) ) {
901
- function wcj_get_current_user_first_role() {
902
- $current_user = wp_get_current_user();
903
- return ( isset( $current_user->roles[0] ) && '' != $current_user->roles[0] ) ? $current_user->roles[0] : 'guest';
904
- }
905
- }
906
-
907
- /**
908
- * wcj_get_user_roles.
909
- *
910
- * @version 2.5.3
911
- * @since 2.5.3
912
- */
913
- if ( ! function_exists( 'wcj_get_user_roles' ) ) {
914
- function wcj_get_user_roles() {
915
- global $wp_roles;
916
- $all_roles = ( isset( $wp_roles ) && is_object( $wp_roles ) ) ? $wp_roles->roles : array();
917
- $all_roles = apply_filters( 'editable_roles', $all_roles );
918
- $all_roles = array_merge( array(
919
- 'guest' => array(
920
- 'name' => __( 'Guest', 'woocommerce-jetpack' ),
921
- 'capabilities' => array(),
922
- ) ), $all_roles );
923
- return $all_roles;
924
- }
925
- }
926
- /**
927
- * wcj_get_user_roles_options.
928
- *
929
- * @version 2.5.3
930
- * @since 2.5.3
931
- */
932
- if ( ! function_exists( 'wcj_get_user_roles_options' ) ) {
933
- function wcj_get_user_roles_options() {
934
- global $wp_roles;
935
- $all_roles = ( isset( $wp_roles ) && is_object( $wp_roles ) ) ? $wp_roles->roles : array();
936
- $all_roles = apply_filters( 'editable_roles', $all_roles );
937
- $all_roles = array_merge( array(
938
- 'guest' => array(
939
- 'name' => __( 'Guest', 'woocommerce-jetpack' ),
940
- 'capabilities' => array(),
941
- ) ), $all_roles );
942
- $all_roles_options = array();
943
- foreach ( $all_roles as $_role_key => $_role ) {
944
- $all_roles_options[ $_role_key ] = $_role['name'];
945
- }
946
- return $all_roles_options;
947
- }
948
- }
949
-
950
- /**
951
- * wcj_is_user_role.
952
- *
953
- * @version 2.5.2
954
- * @since 2.5.0
955
- * @return bool
956
- */
957
- if ( ! function_exists( 'wcj_is_user_role' ) ) {
958
- function wcj_is_user_role( $user_role, $user_id = 0 ) {
959
- $the_user = ( 0 == $user_id ) ? wp_get_current_user() : get_user_by( 'id', $user_id );
960
- if ( ! isset( $the_user->roles ) || empty( $the_user->roles ) ) {
961
- $the_user->roles = array( 'guest' );
962
- }
963
- return ( isset( $the_user->roles ) && is_array( $the_user->roles ) && in_array( $user_role, $the_user->roles ) ) ? true : false;
964
- }
965
- }
966
-
967
  /**
968
  * validate_vat_no_soap.
969
  *
@@ -1201,90 +902,3 @@ if ( ! function_exists( 'wcj_get_order_statuses' ) ) {
1201
  return $order_statuses;
1202
  }
1203
  }
1204
-
1205
- /**
1206
- * wcj_get_currencies_names_and_symbols.
1207
- *
1208
- * @version 2.4.4
1209
- */
1210
- if ( ! function_exists( 'wcj_get_currencies_names_and_symbols' ) ) {
1211
- function wcj_get_currencies_names_and_symbols( $result = 'names_and_symbols', $scope = 'all' ) {
1212
- $currency_names_and_symbols = array();
1213
- /* if ( ! wcj_is_module_enabled( 'currency' ) ) {
1214
- return $currency_names_and_symbols;
1215
- } */
1216
- if ( 'all' === $scope || 'no_custom' === $scope ) {
1217
- // $currencies = include( wcj_plugin_path() . '/includes/currencies/wcj-currencies.php' );
1218
- // include( wcj_plugin_path() . '/includes/currencies/wcj-currencies.php' );
1219
- $currencies = wcj_get_currencies_array();
1220
- foreach( $currencies as $data ) {
1221
- switch ( $result ) {
1222
- case 'names_and_symbols':
1223
- $currency_names_and_symbols[ $data['code'] ] = $data['name'] . ' (' . $data['symbol'] . ')';
1224
- break;
1225
- case 'names':
1226
- $currency_names_and_symbols[ $data['code'] ] = $data['name'];
1227
- break;
1228
- case 'symbols':
1229
- $currency_names_and_symbols[ $data['code'] ] = $data['symbol'];
1230
- break;
1231
- }
1232
- }
1233
- }
1234
- if ( wcj_is_module_enabled( 'currency' ) && ( 'all' === $scope || 'custom_only' === $scope ) ) {
1235
- // Custom currencies
1236
- $custom_currency_total_number = apply_filters( 'booster_get_option', 1, get_option( 'wcj_currency_custom_currency_total_number', 1 ) );
1237
- for ( $i = 1; $i <= $custom_currency_total_number; $i++) {
1238
- $custom_currency_code = get_option( 'wcj_currency_custom_currency_code_' . $i );
1239
- $custom_currency_name = get_option( 'wcj_currency_custom_currency_name_' . $i );
1240
- $custom_currency_symbol = get_option( 'wcj_currency_custom_currency_symbol_' . $i );
1241
- if ( '' != $custom_currency_code && '' != $custom_currency_name /* && '' != $custom_currency_symbol */ ) {
1242
- switch ( $result ) {
1243
- case 'names_and_symbols':
1244
- $currency_names_and_symbols[ $custom_currency_code ] = $custom_currency_name . ' (' . $custom_currency_symbol . ')';
1245
- break;
1246
- case 'names':
1247
- $currency_names_and_symbols[ $custom_currency_code ] = $custom_currency_name;
1248
- break;
1249
- case 'symbols':
1250
- $currency_names_and_symbols[ $custom_currency_code ] = $custom_currency_symbol;
1251
- break;
1252
- }
1253
- }
1254
- }
1255
- }
1256
- return $currency_names_and_symbols;
1257
- }
1258
- }
1259
-
1260
- /**
1261
- * wcj_get_currency_symbol.
1262
- *
1263
- * @version 2.4.4
1264
- */
1265
- if ( ! function_exists( 'wcj_get_currency_symbol' ) ) {
1266
- function wcj_get_currency_symbol( $currency_code ) {
1267
- $return = '';
1268
- $currencies = wcj_get_currencies_names_and_symbols( 'symbols', 'no_custom' );
1269
- if ( isset( $currencies[ $currency_code ] ) ) {
1270
- if ( wcj_is_module_enabled( 'currency' ) ) {
1271
- $return = apply_filters( 'booster_get_option', $currencies[ $currency_code ], get_option( 'wcj_currency_' . $currency_code, $currencies[ $currency_code ] ) );
1272
- } else {
1273
- $return = $currencies[ $currency_code ];
1274
- }
1275
- } else {
1276
- $currencies = wcj_get_currencies_names_and_symbols( 'symbols', 'custom_only' );
1277
- $return = isset( $currencies[ $currency_code ] ) ? $currencies[ $currency_code ] : '';
1278
- }
1279
- return ( '' != $return ) ? $return : false;
1280
- }
1281
- }
1282
-
1283
- /**
1284
- * wcj_price.
1285
- */
1286
- if ( ! function_exists( 'wcj_price' ) ) {
1287
- function wcj_price( $price, $currency, $hide_currency ) {
1288
- return ( 'yes' === $hide_currency ) ? wc_price( $price, array( 'currency' => 'DISABLED' ) ) : wc_price( $price, array( 'currency' => $currency ) );
1289
- }
1290
- }
4
  *
5
  * The WooCommerce Jetpack Functions.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
11
+ if ( ! defined( 'ABSPATH' ) ) exit;
12
+
13
+ if ( ! function_exists( 'wcj_get_product_id' ) ) {
14
  /**
15
+ * wcj_get_product_id.
16
  *
17
+ * @version 2.7.0
18
+ * @since 2.7.0
19
  */
20
+ function wcj_get_product_id( $_product ) {
21
+ if ( WCJ_IS_WC_VERSION_BELOW_3 ) {
22
+ return ( isset( $_product->variation_id ) ) ? $_product->variation_id : $_product->id;
23
+ } else {
24
+ return $_product->get_id();
25
+ }
26
+ }
27
+ }
28
+
29
+ if ( ! function_exists( 'wcj_get_product_id_or_variation_parent_id' ) ) {
30
+ /**
31
+ * wcj_get_product_id_or_variation_parent_id.
32
+ *
33
+ * @version 2.7.0
34
+ * @since 2.7.0
35
+ */
36
+ function wcj_get_product_id_or_variation_parent_id( $_product ) {
37
+ if ( WCJ_IS_WC_VERSION_BELOW_3 ) {
38
+ return $_product->id;
39
+ } else {
40
+ return ( $_product->is_type( 'variation' ) ) ? $_product->get_parent_id() : $_product->get_id();
41
+ }
42
+ }
43
+ }
44
+
45
+ if ( ! function_exists( 'wcj_get_product_status' ) ) {
46
+ /**
47
+ * wcj_get_product_status.
48
+ *
49
+ * @version 2.7.0
50
+ * @since 2.7.0
51
+ */
52
+ function wcj_get_product_status( $_product ) {
53
+ return ( WCJ_IS_WC_VERSION_BELOW_3 ) ? $_product->post->post_status : $_product->get_status();
54
+ }
55
+ }
56
+
57
+ if ( ! function_exists( 'wcj_get_product_total_stock' ) ) {
58
+ /**
59
+ * wcj_get_product_total_stock.
60
+ *
61
+ * @version 2.7.0
62
+ * @since 2.7.0
63
+ */
64
+ function wcj_get_product_total_stock( $_product ) {
65
+ if ( WCJ_IS_WC_VERSION_BELOW_3 ) {
66
+ return $_product->get_total_stock();
67
+ } else {
68
+ if ( $_product->is_type( array( 'variable', 'grouped' ) ) ) {
69
+ $total_stock = 0;
70
+ foreach ( $_product->get_children() as $child_id ) {
71
+ $child = wc_get_product( $child_id );
72
+ $total_stock += $child->get_stock_quantity();
73
+ }
74
+ return $total_stock;
75
+ } else {
76
+ return $_product->get_stock_quantity();
77
+ }
78
+ }
79
+ }
80
+ }
81
+
82
+ if ( ! function_exists( 'wcj_get_product_display_price' ) ) {
83
+ /**
84
+ * wcj_get_product_display_price.
85
+ *
86
+ * @version 2.7.0
87
+ * @since 2.7.0
88
+ */
89
+ function wcj_get_product_display_price( $_product, $price = '', $qty = 1 ) {
90
+ return ( WCJ_IS_WC_VERSION_BELOW_3 ) ? $_product->get_display_price( $price, $qty ) : wc_get_price_to_display( $_product, array( 'price' => $price, 'qty' => $qty ) );
91
+ }
92
+ }
93
+
94
+ if ( ! function_exists( 'wcj_get_product_formatted_variation' ) ) {
95
+ /**
96
+ * wcj_get_product_formatted_variation.
97
+ *
98
+ * @version 2.7.0
99
+ * @since 2.7.0
100
+ */
101
+ function wcj_get_product_formatted_variation( $variation, $flat = false, $include_names = true ) {
102
+ if ( WCJ_IS_WC_VERSION_BELOW_3 ) {
103
+ return $variation->get_formatted_variation_attributes( $flat );
104
+ } else {
105
+ return wc_get_formatted_variation( $variation, $flat, $include_names );
106
+ }
107
+ }
108
+ }
109
+
110
+ if ( ! function_exists( 'wcj_get_order_id' ) ) {
111
+ /**
112
+ * wcj_get_order_id.
113
+ *
114
+ * @version 2.7.0
115
+ * @since 2.7.0
116
+ */
117
+ function wcj_get_order_id( $_order ) {
118
+ return ( WCJ_IS_WC_VERSION_BELOW_3 ) ? $_order->id : $_order->get_id();
119
+ }
120
+ }
121
+
122
+ if ( ! function_exists( 'wcj_get_order_currency' ) ) {
123
+ /**
124
+ * wcj_get_order_currency.
125
+ *
126
+ * @version 2.7.0
127
+ * @since 2.7.0
128
+ */
129
+ function wcj_get_order_currency( $_order ) {
130
+ return ( WCJ_IS_WC_VERSION_BELOW_3 ? $_order->get_order_currency() : $_order->get_currency() );
131
  }
132
  }
133
 
137
  *
138
  * from woocommerce\includes\admin\meta-boxes\views\html-order-item-meta.php
139
  *
140
+ * @version 2.7.0
141
  * @since 2.5.9
142
  */
143
  function wcj_get_order_item_meta_info( $item_id, $item, $_order, $exclude_wcj_meta = false, $_product = null ) {
144
  $meta_info = '';
145
+ $metadata = ( WCJ_IS_WC_VERSION_BELOW_3 ? $_order->has_meta( $item_id ) : $item->get_meta_data() );
146
+ if ( $metadata ) {
147
  $meta_info = array();
148
  foreach ( $metadata as $meta ) {
149
 
150
+ $_meta_key = ( WCJ_IS_WC_VERSION_BELOW_3 ? $meta['meta_key'] : $meta->key );
151
+ $_meta_value = ( WCJ_IS_WC_VERSION_BELOW_3 ? $meta['meta_value'] : $meta->value );
152
+
153
  // Skip hidden core fields
154
+ if ( in_array( $_meta_key, apply_filters( 'woocommerce_hidden_order_itemmeta', array(
155
  '_qty',
156
  '_tax_class',
157
  '_product_id',
166
  continue;
167
  }
168
 
169
+ if ( $exclude_wcj_meta && ( 'wcj' === substr( $_meta_key, 0, 3 ) || '_wcj' === substr( $_meta_key, 0, 4 ) ) ) {
170
  continue;
171
  }
172
 
173
  // Skip serialised meta
174
+ if ( is_serialized( $_meta_value ) || is_array( $_meta_value ) ) {
175
  continue;
176
  }
177
 
178
  // Get attribute data
179
+ if ( taxonomy_exists( wc_sanitize_taxonomy_name( $_meta_key ) ) ) {
180
+ $term = get_term_by( 'slug', $_meta_value, wc_sanitize_taxonomy_name( $_meta_key ) );
181
+ $_meta_key = wc_attribute_label( wc_sanitize_taxonomy_name( $_meta_key ) );
182
+ $_meta_value = isset( $term->name ) ? $term->name : $_meta_value;
183
  } else {
184
  $the_product = null;
185
  if ( is_object( $_product ) ) {
187
  } elseif ( is_object( $item ) ) {
188
  $the_product = $_order->get_product_from_item( $item );
189
  }
190
+ $_meta_key = ( is_object( $the_product ) ) ? wc_attribute_label( $_meta_key, $the_product ) : $_meta_key;
191
  }
192
+ $meta_info[] = wp_kses_post( rawurldecode( $_meta_key ) ) . ': ' . wp_kses_post( rawurldecode( $_meta_value ) );
193
  }
194
  $meta_info = implode( ', ', $meta_info );
195
  }
229
  }
230
  }
231
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
232
  if ( ! function_exists( 'wcj_get_rocket_icon' ) ) {
233
  /**
234
  * wcj_get_rocket_icon.
265
  }
266
  }
267
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
268
  if ( ! function_exists( 'wcj_variation_radio_button' ) ) {
269
  /**
270
  * wcj_variation_radio_button.
665
  }
666
  }
667
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
668
  /**
669
  * validate_vat_no_soap.
670
  *
902
  return $order_statuses;
903
  }
904
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/functions/wcj-invoicing-functions.php CHANGED
@@ -2,16 +2,16 @@
2
  /**
3
  * WooCommerce Jetpack Invoicing Functions
4
  *
5
- * @version 2.5.2
6
  * @author Algoritmika Ltd.
7
  */
8
 
9
- /*
10
- * wcj_get_invoice_types.
11
- *
12
- * @version 2.5.2
13
- */
14
  if ( ! function_exists( 'wcj_get_invoice_types' ) ) {
 
 
 
 
 
15
  function wcj_get_invoice_types() {
16
  $invoice_types = array(
17
  array(
@@ -46,22 +46,33 @@ if ( ! function_exists( 'wcj_get_invoice_types' ) ) {
46
  // 'icon' => '\e019',
47
  ),
48
 
49
- array(
50
  'id' => 'custom_doc',
51
  'title' => __( 'Custom Document', 'woocommerce-jetpack' ),
52
  'desc' => __( 'Custom Documents', 'woocommerce-jetpack' ),
53
  'defaults' => array( 'init' => 'disabled', ),
54
  // 'icon' => '\e019',
55
- ),
56
  );
 
 
 
 
 
 
 
 
 
 
 
57
  return $invoice_types;
58
  }
59
  }
60
 
61
- /*
62
- * wcj_get_enabled_invoice_types.
63
- */
64
  if ( ! function_exists( 'wcj_get_enabled_invoice_types' ) ) {
 
 
 
65
  function wcj_get_enabled_invoice_types() {
66
  $invoice_types = wcj_get_invoice_types();
67
  $enabled_invoice_types = array();
@@ -75,10 +86,10 @@ if ( ! function_exists( 'wcj_get_enabled_invoice_types' ) ) {
75
  }
76
  }
77
 
78
- /*
79
- * wcj_get_enabled_invoice_types_ids.
80
- */
81
- if ( ! function_exists( 'wcj_get_enabled_invoice_types_ids' ) ) {
82
  function wcj_get_enabled_invoice_types_ids() {
83
  $invoice_types = wcj_get_enabled_invoice_types();
84
  $invoice_types_ids = array();
@@ -89,30 +100,30 @@ if ( ! function_exists( 'wcj_get_enabled_invoice_types' ) ) {
89
  }
90
  }
91
 
92
- /*
93
- * wcj_get_pdf_invoice.
94
- */
95
  if ( ! function_exists( 'wcj_get_pdf_invoice' ) ) {
 
 
 
96
  function wcj_get_pdf_invoice( $order_id, $invoice_type_id ) {
97
  $the_invoice = new WCJ_PDF_Invoice( $order_id, $invoice_type_id );
98
  return $the_invoice;
99
  }
100
  }
101
 
102
- /*
103
- * wcj_get_invoice.
104
- */
105
  if ( ! function_exists( 'wcj_get_invoice' ) ) {
 
 
 
106
  function wcj_get_invoice( $order_id, $invoice_type_id ) {
107
  $the_invoice = new WCJ_Invoice( $order_id, $invoice_type_id );
108
  return $the_invoice;
109
  }
110
  }
111
 
112
- /*
113
- * wcj_get_invoice_date.
114
- */
115
  if ( ! function_exists( 'wcj_get_invoice_date' ) ) {
 
 
 
116
  function wcj_get_invoice_date( $order_id, $invoice_type_id, $extra_days, $date_format ) {
117
  $the_invoice = wcj_get_invoice( $order_id, $invoice_type_id );
118
  $extra_days_in_sec = $extra_days * 24 * 60 * 60;
@@ -120,40 +131,40 @@ if ( ! function_exists( 'wcj_get_invoice_date' ) ) {
120
  }
121
  }
122
 
123
- /*
124
- * wcj_get_invoice_number.
125
- */
126
  if ( ! function_exists( 'wcj_get_invoice_number' ) ) {
 
 
 
127
  function wcj_get_invoice_number( $order_id, $invoice_type_id ) {
128
  $the_invoice = wcj_get_invoice( $order_id, $invoice_type_id );
129
  return $the_invoice->get_invoice_number();
130
  }
131
  }
132
 
133
- /*
134
- * wcj_delete_invoice.
135
- */
136
  if ( ! function_exists( 'wcj_delete_invoice' ) ) {
 
 
 
137
  function wcj_delete_invoice( $order_id, $invoice_type_id ) {
138
  $the_invoice = wcj_get_invoice( $order_id, $invoice_type_id );
139
  $the_invoice->delete();
140
  }
141
  }
142
 
143
- /*
144
- * wcj_create_invoice.
145
- */
146
  if ( ! function_exists( 'wcj_create_invoice' ) ) {
 
 
 
147
  function wcj_create_invoice( $order_id, $invoice_type_id, $date = '' ) {
148
  $the_invoice = wcj_get_invoice( $order_id, $invoice_type_id );
149
  $the_invoice->create( $date );
150
  }
151
  }
152
 
153
- /*
154
- * wcj_is_invoice_created.
155
- */
156
  if ( ! function_exists( 'wcj_is_invoice_created' ) ) {
 
 
 
157
  function wcj_is_invoice_created( $order_id, $invoice_type_id ) {
158
  $the_invoice = wcj_get_invoice( $order_id, $invoice_type_id );
159
  return $the_invoice->is_created();
2
  /**
3
  * WooCommerce Jetpack Invoicing Functions
4
  *
5
+ * @version 2.7.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
 
 
 
 
 
9
  if ( ! function_exists( 'wcj_get_invoice_types' ) ) {
10
+ /*
11
+ * wcj_get_invoice_types.
12
+ *
13
+ * @version 2.7.0
14
+ */
15
  function wcj_get_invoice_types() {
16
  $invoice_types = array(
17
  array(
46
  // 'icon' => '\e019',
47
  ),
48
 
49
+ /* array(
50
  'id' => 'custom_doc',
51
  'title' => __( 'Custom Document', 'woocommerce-jetpack' ),
52
  'desc' => __( 'Custom Documents', 'woocommerce-jetpack' ),
53
  'defaults' => array( 'init' => 'disabled', ),
54
  // 'icon' => '\e019',
55
+ ), */
56
  );
57
+
58
+ $total_custom_docs = get_option( 'wcj_invoicing_custom_doc_total_number', 1 );
59
+ for ( $i = 1; $i <= $total_custom_docs; $i++ ) {
60
+ $invoice_types[] = array(
61
+ 'id' => ( 1 == $i ? 'custom_doc' : 'custom_doc' . '_' . $i ),
62
+ 'title' => __( 'Custom Document', 'woocommerce-jetpack' ) . ' #' . $i,
63
+ 'desc' => __( 'Custom Documents', 'woocommerce-jetpack' ) . ' #' . $i,
64
+ 'defaults' => array( 'init' => 'disabled', ),
65
+ );
66
+ }
67
+
68
  return $invoice_types;
69
  }
70
  }
71
 
 
 
 
72
  if ( ! function_exists( 'wcj_get_enabled_invoice_types' ) ) {
73
+ /*
74
+ * wcj_get_enabled_invoice_types.
75
+ */
76
  function wcj_get_enabled_invoice_types() {
77
  $invoice_types = wcj_get_invoice_types();
78
  $enabled_invoice_types = array();
86
  }
87
  }
88
 
89
+ if ( ! function_exists( 'wcj_get_enabled_invoice_types_ids' ) ) {
90
+ /*
91
+ * wcj_get_enabled_invoice_types_ids.
92
+ */
93
  function wcj_get_enabled_invoice_types_ids() {
94
  $invoice_types = wcj_get_enabled_invoice_types();
95
  $invoice_types_ids = array();
100
  }
101
  }
102
 
 
 
 
103
  if ( ! function_exists( 'wcj_get_pdf_invoice' ) ) {
104
+ /*
105
+ * wcj_get_pdf_invoice.
106
+ */
107
  function wcj_get_pdf_invoice( $order_id, $invoice_type_id ) {
108
  $the_invoice = new WCJ_PDF_Invoice( $order_id, $invoice_type_id );
109
  return $the_invoice;
110
  }
111
  }
112
 
 
 
 
113
  if ( ! function_exists( 'wcj_get_invoice' ) ) {
114
+ /*
115
+ * wcj_get_invoice.
116
+ */
117
  function wcj_get_invoice( $order_id, $invoice_type_id ) {
118
  $the_invoice = new WCJ_Invoice( $order_id, $invoice_type_id );
119
  return $the_invoice;
120
  }
121
  }
122
 
 
 
 
123
  if ( ! function_exists( 'wcj_get_invoice_date' ) ) {
124
+ /*
125
+ * wcj_get_invoice_date.
126
+ */
127
  function wcj_get_invoice_date( $order_id, $invoice_type_id, $extra_days, $date_format ) {
128
  $the_invoice = wcj_get_invoice( $order_id, $invoice_type_id );
129
  $extra_days_in_sec = $extra_days * 24 * 60 * 60;
131
  }
132
  }
133
 
 
 
 
134
  if ( ! function_exists( 'wcj_get_invoice_number' ) ) {
135
+ /*
136
+ * wcj_get_invoice_number.
137
+ */
138
  function wcj_get_invoice_number( $order_id, $invoice_type_id ) {
139
  $the_invoice = wcj_get_invoice( $order_id, $invoice_type_id );
140
  return $the_invoice->get_invoice_number();
141
  }
142
  }
143
 
 
 
 
144
  if ( ! function_exists( 'wcj_delete_invoice' ) ) {
145
+ /*
146
+ * wcj_delete_invoice.
147
+ */
148
  function wcj_delete_invoice( $order_id, $invoice_type_id ) {
149
  $the_invoice = wcj_get_invoice( $order_id, $invoice_type_id );
150
  $the_invoice->delete();
151
  }
152
  }
153
 
 
 
 
154
  if ( ! function_exists( 'wcj_create_invoice' ) ) {
155
+ /*
156
+ * wcj_create_invoice.
157
+ */
158
  function wcj_create_invoice( $order_id, $invoice_type_id, $date = '' ) {
159
  $the_invoice = wcj_get_invoice( $order_id, $invoice_type_id );
160
  $the_invoice->create( $date );
161
  }
162
  }
163
 
 
 
 
164
  if ( ! function_exists( 'wcj_is_invoice_created' ) ) {
165
+ /*
166
+ * wcj_is_invoice_created.
167
+ */
168
  function wcj_is_invoice_created( $order_id, $invoice_type_id ) {
169
  $the_invoice = wcj_get_invoice( $order_id, $invoice_type_id );
170
  return $the_invoice->is_created();
includes/functions/wcj-price-currency-functions.php ADDED
@@ -0,0 +1,447 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WooCommerce Jetpack Price and Currency Functions
4
+ *
5
+ * The WooCommerce Jetpack Price and Currency functions.
6
+ *
7
+ * @version 2.7.0
8
+ * @since 2.7.0
9
+ * @author Algoritmika Ltd.
10
+ */
11
+
12
+ if ( ! defined( 'ABSPATH' ) ) exit;
13
+
14
+ if ( ! function_exists( 'wcj_add_change_price_hooks' ) ) {
15
+ /**
16
+ * wcj_add_change_price_hooks.
17
+ *
18
+ * @version 2.7.0
19
+ * @since 2.7.0
20
+ */
21
+ function wcj_add_change_price_hooks( $module_object, $priority, $include_shipping = true ) {
22
+ // Prices
23
+ add_filter( WCJ_PRODUCT_GET_PRICE_FILTER, array( $module_object, 'change_price' ), $priority, 2 );
24
+ add_filter( WCJ_PRODUCT_GET_SALE_PRICE_FILTER, array( $module_object, 'change_price' ), $priority, 2 );
25
+ add_filter( WCJ_PRODUCT_GET_REGULAR_PRICE_FILTER, array( $module_object, 'change_price' ), $priority, 2 );
26
+ // Variations
27
+ add_filter( 'woocommerce_variation_prices_price', array( $module_object, 'change_price' ), $priority, 2 );
28
+ add_filter( 'woocommerce_variation_prices_regular_price', array( $module_object, 'change_price' ), $priority, 2 );
29
+ add_filter( 'woocommerce_variation_prices_sale_price', array( $module_object, 'change_price' ), $priority, 2 );
30
+ add_filter( 'woocommerce_get_variation_prices_hash', array( $module_object, 'get_variation_prices_hash' ), $priority, 3 );
31
+ if ( ! WCJ_IS_WC_VERSION_BELOW_3 ) {
32
+ add_filter( 'woocommerce_product_variation_get_price', array( $module_object, 'change_price' ), $priority, 2 );
33
+ add_filter( 'woocommerce_product_variation_get_regular_price', array( $module_object, 'change_price' ), $priority, 2 );
34
+ add_filter( 'woocommerce_product_variation_get_sale_price', array( $module_object, 'change_price' ), $priority, 2 );
35
+ }
36
+ // Shipping
37
+ if ( $include_shipping ) {
38
+ add_filter( 'woocommerce_package_rates', array( $module_object, 'change_price_shipping' ), $priority, 2 );
39
+ }
40
+ // Grouped products
41
+ add_filter( 'woocommerce_get_price_including_tax', array( $module_object, 'change_price_grouped' ), $priority, 3 );
42
+ add_filter( 'woocommerce_get_price_excluding_tax', array( $module_object, 'change_price_grouped' ), $priority, 3 );
43
+ }
44
+ }
45
+
46
+ if ( ! function_exists( 'wcj_get_currency_exchange_rate_product_base_currency' ) ) {
47
+ /**
48
+ * wcj_get_currency_exchange_rate_product_base_currency.
49
+ *
50
+ * @version 2.5.6
51
+ * @since 2.5.6
52
+ */
53
+ function wcj_get_currency_exchange_rate_product_base_currency( $currency_code ) {
54
+ $currency_exchange_rate = 1;
55
+ $total_number = apply_filters( 'booster_get_option', 1, get_option( 'wcj_multicurrency_base_price_total_number', 1 ) );
56
+ for ( $i = 1; $i <= $total_number; $i++ ) {
57
+ if ( $currency_code === get_option( 'wcj_multicurrency_base_price_currency_' . $i ) ) {
58
+ $currency_exchange_rate = get_option( 'wcj_multicurrency_base_price_exchange_rate_' . $i );
59
+ break;
60
+ }
61
+ }
62
+ return $currency_exchange_rate;
63
+ }
64
+ }
65
+
66
+ if ( ! function_exists( 'wcj_price_by_product_base_currency' ) ) {
67
+ /**
68
+ * wcj_price_by_product_base_currency.
69
+ *
70
+ * @version 2.7.0
71
+ * @since 2.5.6
72
+ */
73
+ function wcj_price_by_product_base_currency( $price, $product_id ) {
74
+ if ( '' == $price ) {
75
+ return $price;
76
+ }
77
+ $multicurrency_base_price_currency = get_post_meta( $product_id, '_' . 'wcj_multicurrency_base_price_currency', true );
78
+ if ( '' != $multicurrency_base_price_currency ) {
79
+ if ( 1 != ( $currency_exchange_rate = wcj_get_currency_exchange_rate_product_base_currency( $multicurrency_base_price_currency ) ) ) {
80
+ return $price / $currency_exchange_rate;
81
+ }
82
+ }
83
+ return $price;
84
+ }
85
+ }
86
+
87
+ if ( ! function_exists( 'wcj_price_by_country' ) ) {
88
+ /**
89
+ * wcj_price_by_country.
90
+ *
91
+ * @version 2.7.0
92
+ * @since 2.5.3
93
+ */
94
+ function wcj_price_by_country( $price, $product, $group_id, $the_current_filter = '' ) {
95
+
96
+ $is_price_modified = false;
97
+
98
+ if ( 'yes' === get_option( 'wcj_price_by_country_local_enabled', 'yes' ) ) {
99
+ // Per product
100
+ $meta_box_id = 'price_by_country';
101
+ $scope = 'local';
102
+
103
+ if ( is_numeric( $product ) ) {
104
+ $the_product_id = $product;
105
+ } else {
106
+ $the_product_id = wcj_get_product_id( $product );
107
+ }
108
+
109
+ $meta_id = '_' . 'wcj_' . $meta_box_id . '_make_empty_price_' . $scope . '_' . $group_id;
110
+ if ( 'on' === get_post_meta( $the_product_id, $meta_id, true ) ) {
111
+ return '';
112
+ }
113
+
114
+ $price_by_country = '';
115
+ if ( '' == $the_current_filter ) {
116
+ $the_current_filter = current_filter();
117
+ }
118
+ if ( 'woocommerce_get_price_including_tax' == $the_current_filter || 'woocommerce_get_price_excluding_tax' == $the_current_filter ) {
119
+ $_product = wc_get_product( $the_product_id );
120
+ return wcj_get_product_display_price( $_product );
121
+
122
+ } elseif ( WCJ_PRODUCT_GET_PRICE_FILTER == $the_current_filter || 'woocommerce_variation_prices_price' == $the_current_filter || 'woocommerce_product_variation_get_price' == $the_current_filter ) {
123
+
124
+ $regular_or_sale = '_regular_price_';
125
+ $meta_id = '_' . 'wcj_' . $meta_box_id . $regular_or_sale . $scope . '_' . $group_id;
126
+ $regular_price = get_post_meta( $the_product_id, $meta_id, true );
127
+
128
+ $regular_or_sale = '_sale_price_';
129
+ $meta_id = '_' . 'wcj_' . $meta_box_id . $regular_or_sale . $scope . '_' . $group_id;
130
+ $sale_price = get_post_meta( $the_product_id, $meta_id, true );
131
+
132
+ if ( ! empty( $sale_price ) && $sale_price < $regular_price ) {
133
+ $price_by_country = $sale_price;
134
+ } else {
135
+ $price_by_country = $regular_price;
136
+ }
137
+
138
+ }
139
+ elseif (
140
+ WCJ_PRODUCT_GET_REGULAR_PRICE_FILTER == $the_current_filter ||
141
+ WCJ_PRODUCT_GET_SALE_PRICE_FILTER == $the_current_filter ||
142
+ 'woocommerce_variation_prices_regular_price' == $the_current_filter ||
143
+ 'woocommerce_variation_prices_sale_price' == $the_current_filter ||
144
+ 'woocommerce_product_variation_get_regular_price' == $the_current_filter ||
145
+ 'woocommerce_product_variation_get_sale_price' == $the_current_filter
146
+ ) {
147
+ $regular_or_sale = (
148
+ WCJ_PRODUCT_GET_REGULAR_PRICE_FILTER == $the_current_filter || 'woocommerce_variation_prices_regular_price' == $the_current_filter || 'woocommerce_product_variation_get_regular_price' == $the_current_filter
149
+ ) ? '_regular_price_' : '_sale_price_';
150
+ $meta_id = '_' . 'wcj_' . $meta_box_id . $regular_or_sale . $scope . '_' . $group_id;
151
+ $price_by_country = get_post_meta( $the_product_id, $meta_id, true );
152
+ }
153
+
154
+ if ( '' != $price_by_country ) {
155
+ $modified_price = $price_by_country;
156
+ $is_price_modified = true;
157
+ }
158
+ }
159
+
160
+ if ( ! $is_price_modified ) {
161
+ if ( 'yes' === get_option( 'wcj_price_by_country_make_empty_price_group_' . $group_id, 1 ) || '' === $price ) {
162
+ return '';
163
+ }
164
+ }
165
+
166
+ if ( ! $is_price_modified ) {
167
+ // Globally
168
+ $country_exchange_rate = get_option( 'wcj_price_by_country_exchange_rate_group_' . $group_id, 1 );
169
+ // if ( 1 != $country_exchange_rate ) {
170
+ $modified_price = $price * $country_exchange_rate;
171
+ $rounding = get_option( 'wcj_price_by_country_rounding', 'none' );
172
+ $precision = get_option( 'woocommerce_price_num_decimals', 2 );
173
+ switch ( $rounding ) {
174
+ case 'round':
175
+ $modified_price = round( $modified_price );
176
+ break;
177
+ case 'floor':
178
+ $modified_price = floor( $modified_price );
179
+ break;
180
+ case 'ceil':
181
+ $modified_price = ceil( $modified_price );
182
+ break;
183
+ default: // case 'none':
184
+ $modified_price = round( $modified_price, $precision ); // $modified_price
185
+ break;
186
+ }
187
+ $is_price_modified = true;
188
+ // }
189
+ if ( 'yes' === get_option( 'wcj_price_by_country_make_pretty', 'no' ) && $modified_price >= 0.5 && $precision > 0 ) {
190
+ $modified_price = round( $modified_price ) - ( get_option( 'wcj_price_by_country_make_pretty_min_amount_multiplier', 1 ) / pow( 10, $precision ) );
191
+ }
192
+ }
193
+
194
+ return ( $is_price_modified ) ? $modified_price : $price;
195
+ }
196
+ }
197
+
198
+ if ( ! function_exists( 'wcj_update_products_price_by_country_for_single_product' ) ) {
199
+ /**
200
+ * wcj_update_products_price_by_country_for_single_product.
201
+ *
202
+ * @version 2.7.0
203
+ * @since 2.5.3
204
+ */
205
+ function wcj_update_products_price_by_country_for_single_product( $product_id ) {
206
+ $_product = wc_get_product( $product_id );
207
+ if ( $_product->is_type( 'variable' ) ) {
208
+ $available_variations = $_product->get_available_variations();
209
+ for ( $i = 1; $i <= apply_filters( 'booster_get_option', 1, get_option( 'wcj_price_by_country_total_groups_number', 1 ) ); $i++ ) {
210
+ $min_variation_price = PHP_INT_MAX;
211
+ $max_variation_price = 0;
212
+ foreach ( $available_variations as $variation ) {
213
+ $variation_product_id = $variation['variation_id'];
214
+ $_old_variation_price = get_post_meta( $variation_product_id, '_price', true );
215
+ if ( wcj_is_module_enabled( 'multicurrency_base_price' ) ) {
216
+ $_old_variation_price = wcj_price_by_product_base_currency( $_old_variation_price, $product_id );
217
+ }
218
+ $price_by_country = wcj_price_by_country( $_old_variation_price, $variation_product_id, $i, WCJ_PRODUCT_GET_PRICE_FILTER );
219
+ update_post_meta( $variation_product_id, '_' . 'wcj_price_by_country_' . $i, $price_by_country );
220
+ if ( '' != $price_by_country && $price_by_country < $min_variation_price ) {
221
+ $min_variation_price = $price_by_country;
222
+ }
223
+ if ( $price_by_country > $max_variation_price ) {
224
+ $max_variation_price = $price_by_country;
225
+ }
226
+ }
227
+ delete_post_meta( $product_id, '_' . 'wcj_price_by_country_' . $i );
228
+ add_post_meta( $product_id, '_' . 'wcj_price_by_country_' . $i, $min_variation_price );
229
+ if ( $min_variation_price != $max_variation_price ) {
230
+ add_post_meta( $product_id, '_' . 'wcj_price_by_country_' . $i, $max_variation_price );
231
+ }
232
+ }
233
+ } else {
234
+ $_old_price = get_post_meta( $product_id, '_price', true );
235
+ if ( wcj_is_module_enabled( 'multicurrency_base_price' ) ) {
236
+ $_old_price = wcj_price_by_product_base_currency( $_old_price, $product_id );
237
+ }
238
+ for ( $i = 1; $i <= apply_filters( 'booster_get_option', 1, get_option( 'wcj_price_by_country_total_groups_number', 1 ) ); $i++ ) {
239
+ $price_by_country = wcj_price_by_country( $_old_price, $product_id, $i, WCJ_PRODUCT_GET_PRICE_FILTER );
240
+ update_post_meta( $product_id, '_' . 'wcj_price_by_country_' . $i, $price_by_country );
241
+ }
242
+ }
243
+ }
244
+ }
245
+
246
+ if ( ! function_exists( 'wcj_update_products_price_by_country' ) ) {
247
+ /**
248
+ * wcj_update_products_price_by_country - all products.
249
+ *
250
+ * @version 2.5.3
251
+ * @since 2.5.3
252
+ */
253
+ function wcj_update_products_price_by_country() {
254
+ $offset = 0;
255
+ $block_size = 96;
256
+ while( true ) {
257
+ $args = array(
258
+ 'post_type' => 'product',
259
+ 'post_status' => 'any',
260
+ 'posts_per_page' => $block_size,
261
+ 'offset' => $offset,
262
+ 'orderby' => 'title',
263
+ 'order' => 'ASC',
264
+ );
265
+ $loop = new WP_Query( $args );
266
+ if ( ! $loop->have_posts() ) break;
267
+ while ( $loop->have_posts() ) : $loop->the_post();
268
+ $product_id = $loop->post->ID;
269
+ wcj_update_products_price_by_country_for_single_product( $product_id );
270
+ endwhile;
271
+ $offset += $block_size;
272
+ }
273
+ wp_reset_postdata();
274
+ }
275
+ }
276
+
277
+ if ( ! function_exists( 'wcj_get_current_currency_code' ) ) {
278
+ /**
279
+ * wcj_get_current_currency_code.
280
+ *
281
+ * @version 2.5.0
282
+ * @since 2.5.0
283
+ */
284
+ function wcj_get_current_currency_code( $module ) {
285
+ $current_currency_code = get_woocommerce_currency();
286
+ if ( wcj_is_module_enabled( $module ) ) {
287
+ if ( 'multicurrency' === $module ) {
288
+ $current_currency_code = ( isset( $_SESSION['wcj-currency'] ) ) ? $_SESSION['wcj-currency'] : $current_currency_code;
289
+ }
290
+ }
291
+ return $current_currency_code;
292
+ }
293
+ }
294
+
295
+ if ( ! function_exists( 'wcj_get_currency_by_country' ) ) {
296
+ /**
297
+ * wcj_get_currency_by_country.
298
+ *
299
+ * @version 2.5.4
300
+ * @since 2.5.4
301
+ */
302
+ function wcj_get_currency_by_country( $country_code ) {
303
+ $currency_code = '';
304
+ for ( $i = 1; $i <= apply_filters( 'booster_get_option', 1, get_option( 'wcj_price_by_country_total_groups_number', 1 ) ); $i++ ) {
305
+ switch ( get_option( 'wcj_price_by_country_selection', 'comma_list' ) ) {
306
+ case 'comma_list':
307
+ $country_exchange_rate_group = get_option( 'wcj_price_by_country_exchange_rate_countries_group_' . $i );
308
+ $country_exchange_rate_group = str_replace( ' ', '', $country_exchange_rate_group );
309
+ $country_exchange_rate_group = explode( ',', $country_exchange_rate_group );
310
+ break;
311
+ case 'multiselect':
312
+ $country_exchange_rate_group = get_option( 'wcj_price_by_country_countries_group_' . $i );
313
+ break;
314
+ case 'chosen_select':
315
+ $country_exchange_rate_group = get_option( 'wcj_price_by_country_countries_group_chosen_select_' . $i );
316
+ break;
317
+ }
318
+ if ( in_array( $country_code, $country_exchange_rate_group ) ) {
319
+ $currency_code = get_option( 'wcj_price_by_country_exchange_rate_currency_group_' . $i );
320
+ break;
321
+ }
322
+ }
323
+ return ( '' == $currency_code ) ? get_option( 'woocommerce_currency' ) : $currency_code;
324
+ }
325
+ }
326
+
327
+ if ( ! function_exists( 'wcj_get_currency_exchange_rate' ) ) {
328
+ /**
329
+ * wcj_get_currency_exchange_rate.
330
+ *
331
+ * @version 2.5.0
332
+ * @since 2.5.0
333
+ */
334
+ function wcj_get_currency_exchange_rate( $module, $currency_code ) {
335
+ $currency_exchange_rate = 1;
336
+ if ( wcj_is_module_enabled( $module ) ) {
337
+ if ( 'multicurrency' === $module ) {
338
+ $total_number = apply_filters( 'booster_get_option', 2, get_option( 'wcj_multicurrency_total_number', 2 ) );
339
+ for ( $i = 1; $i <= $total_number; $i++ ) {
340
+ if ( $currency_code === get_option( 'wcj_multicurrency_currency_' . $i ) ) {
341
+ $currency_exchange_rate = get_option( 'wcj_multicurrency_exchange_rate_' . $i );
342
+ break;
343
+ }
344
+ }
345
+ }
346
+ }
347
+ return $currency_exchange_rate;
348
+ }
349
+ }
350
+
351
+ if ( ! function_exists( 'wc_get_product_purchase_price' ) ) {
352
+ /**
353
+ * wc_get_product_purchase_price.
354
+ */
355
+ function wc_get_product_purchase_price( $product_id = 0 ) {
356
+ $the_product = wcj_get_product( $product_id );
357
+ return $the_product->get_purchase_price();
358
+ }
359
+ }
360
+
361
+ if ( ! function_exists( 'wcj_get_currencies_names_and_symbols' ) ) {
362
+ /**
363
+ * wcj_get_currencies_names_and_symbols.
364
+ *
365
+ * @version 2.4.4
366
+ */
367
+ function wcj_get_currencies_names_and_symbols( $result = 'names_and_symbols', $scope = 'all' ) {
368
+ $currency_names_and_symbols = array();
369
+ /* if ( ! wcj_is_module_enabled( 'currency' ) ) {
370
+ return $currency_names_and_symbols;
371
+ } */
372
+ if ( 'all' === $scope || 'no_custom' === $scope ) {
373
+ // $currencies = include( wcj_plugin_path() . '/includes/currencies/wcj-currencies.php' );
374
+ // include( wcj_plugin_path() . '/includes/currencies/wcj-currencies.php' );
375
+ $currencies = wcj_get_currencies_array();
376
+ foreach( $currencies as $data ) {
377
+ switch ( $result ) {
378
+ case 'names_and_symbols':
379
+ $currency_names_and_symbols[ $data['code'] ] = $data['name'] . ' (' . $data['symbol'] . ')';
380
+ break;
381
+ case 'names':
382
+ $currency_names_and_symbols[ $data['code'] ] = $data['name'];
383
+ break;
384
+ case 'symbols':
385
+ $currency_names_and_symbols[ $data['code'] ] = $data['symbol'];
386
+ break;
387
+ }
388
+ }
389
+ }
390
+ if ( wcj_is_module_enabled( 'currency' ) && ( 'all' === $scope || 'custom_only' === $scope ) ) {
391
+ // Custom currencies
392
+ $custom_currency_total_number = apply_filters( 'booster_get_option', 1, get_option( 'wcj_currency_custom_currency_total_number', 1 ) );
393
+ for ( $i = 1; $i <= $custom_currency_total_number; $i++) {
394
+ $custom_currency_code = get_option( 'wcj_currency_custom_currency_code_' . $i );
395
+ $custom_currency_name = get_option( 'wcj_currency_custom_currency_name_' . $i );
396
+ $custom_currency_symbol = get_option( 'wcj_currency_custom_currency_symbol_' . $i );
397
+ if ( '' != $custom_currency_code && '' != $custom_currency_name /* && '' != $custom_currency_symbol */ ) {
398
+ switch ( $result ) {
399
+ case 'names_and_symbols':
400
+ $currency_names_and_symbols[ $custom_currency_code ] = $custom_currency_name . ' (' . $custom_currency_symbol . ')';
401
+ break;
402
+ case 'names':
403
+ $currency_names_and_symbols[ $custom_currency_code ] = $custom_currency_name;
404
+ break;
405
+ case 'symbols':
406
+ $currency_names_and_symbols[ $custom_currency_code ] = $custom_currency_symbol;
407
+ break;
408
+ }
409
+ }
410
+ }
411
+ }
412
+ return $currency_names_and_symbols;
413
+ }
414
+ }
415
+
416
+ if ( ! function_exists( 'wcj_get_currency_symbol' ) ) {
417
+ /**
418
+ * wcj_get_currency_symbol.
419
+ *
420
+ * @version 2.4.4
421
+ */
422
+ function wcj_get_currency_symbol( $currency_code ) {
423
+ $return = '';
424
+ $currencies = wcj_get_currencies_names_and_symbols( 'symbols', 'no_custom' );
425
+ if ( isset( $currencies[ $currency_code ] ) ) {
426
+ if ( wcj_is_module_enabled( 'currency' ) ) {
427
+ $return = apply_filters( 'booster_get_option', $currencies[ $currency_code ], get_option( 'wcj_currency_' . $currency_code, $currencies[ $currency_code ] ) );
428
+ } else {
429
+ $return = $currencies[ $currency_code ];
430
+ }
431
+ } else {
432
+ $currencies = wcj_get_currencies_names_and_symbols( 'symbols', 'custom_only' );
433
+ $return = isset( $currencies[ $currency_code ] ) ? $currencies[ $currency_code ] : '';
434
+ }
435
+ return ( '' != $return ) ? $return : false;
436
+ }
437
+ }
438
+
439
+ if ( ! function_exists( 'wcj_price' ) ) {
440
+ /**
441
+ * wcj_price.
442
+ */
443
+ function wcj_price( $price, $currency, $hide_currency ) {
444
+ return ( 'yes' === $hide_currency ) ? wc_price( $price, array( 'currency' => 'DISABLED' ) ) : wc_price( $price, array( 'currency' => $currency ) );
445
+ }
446
+ }
447
+
includes/functions/wcj-user-roles-functions.php ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WooCommerce Jetpack User Roles Functions
4
+ *
5
+ * The WooCommerce Jetpack User Roles functions.
6
+ *
7
+ * @version 2.7.0
8
+ * @since 2.7.0
9
+ * @author Algoritmika Ltd.
10
+ */
11
+
12
+ if ( ! defined( 'ABSPATH' ) ) exit;
13
+
14
+ if ( ! function_exists( 'is_shop_manager' ) ) {
15
+ /**
16
+ * is_shop_manager.
17
+ *
18
+ * @return bool
19
+ */
20
+ function is_shop_manager( $user_id = 0 ) {
21
+ $the_user = ( 0 == $user_id ) ? wp_get_current_user() : get_user_by( 'id', $user_id );
22
+ // if ( isset( $the_user['roles'][0] ) && 'shop_manager' === $the_user['roles'][0] ) {
23
+ return ( isset( $the_user->roles[0] ) && 'shop_manager' === $the_user->roles[0] ) ? true : false;
24
+ }
25
+ }
26
+
27
+ if ( ! function_exists( 'wcj_get_current_user_all_roles' ) ) {
28
+ /**
29
+ * wcj_get_current_user_all_roles.
30
+ *
31
+ * @version 2.5.6
32
+ * @since 2.5.6
33
+ */
34
+ function wcj_get_current_user_all_roles() {
35
+ $current_user = wp_get_current_user();
36
+ return ( ! empty( $current_user->roles ) ) ? $current_user->roles : array( 'guest' );
37
+ }
38
+ }
39
+
40
+ if ( ! function_exists( 'wcj_get_current_user_first_role' ) ) {
41
+ /**
42
+ * wcj_get_current_user_first_role.
43
+ *
44
+ * @version 2.5.3
45
+ * @since 2.5.3
46
+ */
47
+ function wcj_get_current_user_first_role() {
48
+ $current_user = wp_get_current_user();
49
+ return ( isset( $current_user->roles[0] ) && '' != $current_user->roles[0] ) ? $current_user->roles[0] : 'guest';
50
+ }
51
+ }
52
+
53
+ if ( ! function_exists( 'wcj_get_user_roles' ) ) {
54
+ /**
55
+ * wcj_get_user_roles.
56
+ *
57
+ * @version 2.5.3
58
+ * @since 2.5.3
59
+ */
60
+ function wcj_get_user_roles() {
61
+ global $wp_roles;
62
+ $all_roles = ( isset( $wp_roles ) && is_object( $wp_roles ) ) ? $wp_roles->roles : array();
63
+ $all_roles = apply_filters( 'editable_roles', $all_roles );
64
+ $all_roles = array_merge( array(
65
+ 'guest' => array(
66
+ 'name' => __( 'Guest', 'woocommerce-jetpack' ),
67
+ 'capabilities' => array(),
68
+ ) ), $all_roles );
69
+ return $all_roles;
70
+ }
71
+ }
72
+
73
+ if ( ! function_exists( 'wcj_get_user_roles_options' ) ) {
74
+ /**
75
+ * wcj_get_user_roles_options.
76
+ *
77
+ * @version 2.5.3
78
+ * @since 2.5.3
79
+ */
80
+ function wcj_get_user_roles_options() {
81
+ global $wp_roles;
82
+ $all_roles = ( isset( $wp_roles ) && is_object( $wp_roles ) ) ? $wp_roles->roles : array();
83
+ $all_roles = apply_filters( 'editable_roles', $all_roles );
84
+ $all_roles = array_merge( array(
85
+ 'guest' => array(
86
+ 'name' => __( 'Guest', 'woocommerce-jetpack' ),
87
+ 'capabilities' => array(),
88
+ ) ), $all_roles );
89
+ $all_roles_options = array();
90
+ foreach ( $all_roles as $_role_key => $_role ) {
91
+ $all_roles_options[ $_role_key ] = $_role['name'];
92
+ }
93
+ return $all_roles_options;
94
+ }
95
+ }
96
+
97
+ if ( ! function_exists( 'wcj_is_user_role' ) ) {
98
+ /**
99
+ * wcj_is_user_role.
100
+ *
101
+ * @version 2.5.2
102
+ * @since 2.5.0
103
+ * @return bool
104
+ */
105
+ function wcj_is_user_role( $user_role, $user_id = 0 ) {
106
+ $the_user = ( 0 == $user_id ) ? wp_get_current_user() : get_user_by( 'id', $user_id );
107
+ if ( ! isset( $the_user->roles ) || empty( $the_user->roles ) ) {
108
+ $the_user->roles = array( 'guest' );
109
+ }
110
+ return ( isset( $the_user->roles ) && is_array( $the_user->roles ) && in_array( $user_role, $the_user->roles ) ) ? true : false;
111
+ }
112
+ }
includes/input-fields/class-wcj-product-input-fields-abstract.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Product Input Fields abstract class.
6
  *
7
- * @version 2.5.5
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -27,7 +27,7 @@ class WCJ_Product_Input_Fields_Abstract {
27
  /**
28
  * get_options.
29
  *
30
- * @version 2.5.2
31
  */
32
  public function get_options() {
33
  $options = array(
@@ -102,10 +102,10 @@ class WCJ_Product_Input_Fields_Abstract {
102
  ),
103
  ),
104
 
105
- // TODO http://www.w3schools.com/tags/att_input_accept.asp
106
  array(
107
  'id' => 'wcj_product_input_fields_type_file_accept_' . $this->scope . '_',
108
- 'title' => __( 'If file is selected, set accepted file types here. E.g.: ".jpg,.jpeg,.png". Leave blank to accept all files', 'woocommerce-jetpack' ),
 
109
  'short_title' => __( 'File: Accepted types', 'woocommerce-jetpack' ),
110
  'type' => 'text',
111
  'default' => __( '.jpg,.jpeg,.png', 'woocommerce-jetpack' ),
@@ -121,7 +121,7 @@ class WCJ_Product_Input_Fields_Abstract {
121
 
122
  array(
123
  'id' => 'wcj_product_input_fields_type_datepicker_format_' . $this->scope . '_',
124
- 'title' => __( 'If datepicker/weekpicker is selected, set date format here. Visit <a href="https://codex.wordpress.org/Formatting_Date_and_Time" target="_blank">documentation on date and time formatting</a> for valid date formats.', 'woocommerce-jetpack' ),
125
  'desc_tip' => __( 'Leave blank to use your current WordPress format', 'woocommerce-jetpack' ) . ': ' . get_option( 'date_format' ),
126
  'short_title' => __( 'Datepicker/Weekpicker: Date format', 'woocommerce-jetpack' ),
127
  'type' => 'text',
@@ -180,12 +180,28 @@ class WCJ_Product_Input_Fields_Abstract {
180
 
181
  array(
182
  'id' => 'wcj_product_input_fields_type_timepicker_format_' . $this->scope . '_',
183
- 'title' => __( 'If timepicker is selected, set time format here. Visit <a href="http://timepicker.co/options/" target="_blank">timepicker options page</a> for valid time formats.', 'woocommerce-jetpack' ),
184
  'short_title' => __( 'Timepicker: Time format', 'woocommerce-jetpack' ),
185
  'type' => 'text',
186
  'default' => 'hh:mm p',
187
  ),
188
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
189
  array(
190
  'id' => 'wcj_product_input_fields_type_timepicker_interval_' . $this->scope . '_',
191
  'title' => __( 'If timepicker is selected, set interval (in minutes) here', 'woocommerce-jetpack' ),
@@ -265,7 +281,8 @@ class WCJ_Product_Input_Fields_Abstract {
265
 
266
  /**
267
  * hide_custom_input_fields_default_output_in_admin_order.
268
- * @todo Get actual (max) number of fields in case of local scape.
 
269
  */
270
  function hide_custom_input_fields_default_output_in_admin_order( $hidden_metas ) {
271
  $total_number = 0;
@@ -273,7 +290,7 @@ class WCJ_Product_Input_Fields_Abstract {
273
  $total_number = apply_filters( 'booster_get_option', 1, $this->get_value( 'wcj_' . 'product_input_fields' . '_' . $this->scope . '_total_number', 0, 1 ) );
274
  } else {
275
  $max_number_of_fields_for_local = 100;
276
- $total_number = $max_number_of_fields_for_local; // TODO: not the best solution!
277
  }
278
 
279
  for ( $i = 1; $i <= $total_number; $i++ ) {
@@ -285,7 +302,7 @@ class WCJ_Product_Input_Fields_Abstract {
285
  /**
286
  * output_custom_input_fields_in_admin_order.
287
  *
288
- * @version 2.5.3
289
  */
290
  function output_custom_input_fields_in_admin_order( $item_id, $item, $_product ) {
291
  if ( null === $_product ) {
@@ -293,15 +310,16 @@ class WCJ_Product_Input_Fields_Abstract {
293
  return;
294
  }
295
  echo '<table cellspacing="0" class="display_meta">';
296
- $total_number = apply_filters( 'booster_get_option', 1, $this->get_value( 'wcj_' . 'product_input_fields' . '_' . $this->scope . '_total_number', $_product->id, 1 ) );
 
297
  for ( $i = 1; $i <= $total_number; $i++ ) {
298
 
299
- $the_nice_name = $this->get_value( 'wcj_product_input_fields_title_' . $this->scope . '_' . $i, $_product->id, '' );
300
  if ( '' == $the_nice_name ) $the_nice_name = __( 'Product Input Field', 'woocommerce-jetpack' ) . ' (' . $this->scope . ') #' . $i;
301
 
302
  $the_value = isset( $item[ 'wcj_product_input_fields_' . $this->scope . '_' . $i ] ) ? $item[ 'wcj_product_input_fields_' . $this->scope . '_' . $i ] : '';
303
 
304
- $type = $this->get_value( 'wcj_product_input_fields_type_' . $this->scope . '_' . $i, $_product->id, '' );
305
  if ( 'file' === $type ) {
306
  /* $file_name = $the_value;
307
  $upload_dir = wp_upload_dir();
@@ -326,111 +344,24 @@ class WCJ_Product_Input_Fields_Abstract {
326
  echo '</table>';
327
  }
328
 
329
- /**
330
- * starts_with.
331
- *
332
- function starts_with( $haystack, $needle ) {
333
- // search backwards starting from haystack length characters from the end
334
- //return ( '' === $needle ) || ( strpos( $haystack, $needle, strlen( $haystack ) ) !== false );
335
- return $needle === substr( $haystack, 0, strlen( $needle ) );
336
- //return substr( $haystack, 0, strlen( $needle ) );
337
- //return strpos( $haystack, $needle ) !== false;
338
- }
339
-
340
- /**
341
- * change_woocommerce_attribute_label.
342
- *
343
- function change_woocommerce_attribute_label( $label, $name ) {
344
-
345
- if ( $this->starts_with( $label, '_wcj_product_input_fields_global_' ) ) {
346
- $title_option_id = trim( $label, '_' );
347
- $title_option_id = str_replace( 'wcj_product_input_fields_global_', 'wcj_product_input_fields_title_global_', $title_option_id );
348
- //$the_nice_name = $this->get_value( $label, 0, '' );
349
- $title = get_option( $title_option_id, '' );
350
-
351
- $label = ( '' == $title ) ?
352
- str_replace(
353
- '_wcj_product_input_fields_' . $this->scope . '_',
354
- __( 'Product Input Field', 'woocommerce-jetpack' ) . ' (' . $this->scope . ') #',
355
- $label ) :
356
- $title;
357
-
358
- } elseif ( $this->starts_with( $label, '_wcj_product_input_fields_local_' ) ) {
359
-
360
- $title = '';//$label;
361
-
362
- $label = ( '' == $title ) ?
363
- str_replace(
364
- '_wcj_product_input_fields_' . $this->scope . '_',
365
- __( 'Product Input Field', 'woocommerce-jetpack' ) . ' (' . $this->scope . ') #',
366
- $label ) :
367
- $title;
368
- }
369
-
370
- return $label;
371
- }
372
-
373
- /**
374
- * finish_making_nicer_name_for_product_input_fields.
375
- *
376
- public function finish_making_nicer_name_for_product_input_fields( $item_id, $item, $_product ) {
377
- $buffer = ob_get_clean();
378
- $the_ugly_name = '_wcj_product_input_fields_' . $this->scope . '_';
379
- $the_nice_name = $this->get_value( 'wcj_product_input_fields_title_' . $this->scope . '_' . '1', $_product->id, '' );
380
- if ( '' == $the_nice_name ) $the_nice_name = __( 'Product Input Field', 'woocommerce-jetpack' ) . ' (' . $this->scope . ') #';
381
- $buffer = str_replace(
382
- $the_ugly_name,
383
- $the_nice_name,
384
- $buffer
385
- );
386
- echo $buffer;
387
- }
388
-
389
- /**
390
- * make_nicer_name.
391
- *
392
- public function make_nicer_name( $buffer ) {
393
- $the_ugly_name = '_wcj_product_input_fields_' . $this->scope . '_';
394
- $the_nice_name = () ? : __( 'Product Input Field', 'woocommerce-jetpack' ) . ' (' . $this->scope . ') #';
395
- return str_replace(
396
- $the_ugly_name,
397
- $the_nice_name,
398
- $buffer
399
- );
400
- }
401
-
402
- /**
403
- * start_making_nicer_name_for_product_input_fields.
404
- *
405
- public function start_making_nicer_name_for_product_input_fields( $item_id, $item, $_product ) {
406
- ob_start( array( $this, 'make_nicer_name' ) );
407
- }
408
-
409
- /**
410
- * finish_making_nicer_name_for_product_input_fields.
411
- *
412
- public function finish_making_nicer_name_for_product_input_fields( $item_id, $item, $_product ) {
413
- ob_end_flush();
414
- }
415
-
416
  /**
417
  * get_value.
418
  */
419
- public function get_value( $option_name, $product_id, $default ) {
420
  return false;
421
  }
422
 
423
  /**
424
  * validate_product_input_fields_on_add_to_cart.
425
  *
426
- * @version 2.5.2
427
  */
428
- public function validate_product_input_fields_on_add_to_cart( $passed, $product_id ) {
429
  $total_number = apply_filters( 'booster_get_option', 1, $this->get_value( 'wcj_' . 'product_input_fields' . '_' . $this->scope . '_total_number', $product_id, 1 ) );
430
  for ( $i = 1; $i <= $total_number; $i++ ) {
431
 
432
- $is_enabled = $this->get_value( 'wcj_product_input_fields_enabled_' . $this->scope . '_' . $i, $product_id, 'no' );
433
- if ( ! $is_enabled ) {
434
  continue;
435
  }
436
 
@@ -486,41 +417,50 @@ class WCJ_Product_Input_Fields_Abstract {
486
  /**
487
  * add_product_input_fields_to_frontend.
488
  *
489
- * @version 2.5.5
490
  */
491
- public function add_product_input_fields_to_frontend() {
492
  global $product;
 
493
  //if ( ! $product ) // return;
494
- $total_number = apply_filters( 'booster_get_option', 1, $this->get_value( 'wcj_' . 'product_input_fields' . '_' . $this->scope . '_total_number', $product->id, 1 ) );
495
 
496
  for ( $i = 1; $i <= $total_number; $i++ ) {
497
 
498
- $type = $this->get_value( 'wcj_product_input_fields_type_' . $this->scope . '_' . $i, $product->id, 'text' );
499
- $is_enabled = $this->get_value( 'wcj_product_input_fields_enabled_' . $this->scope . '_' . $i, $product->id, 'no' );
500
- $is_required = $this->get_value( 'wcj_product_input_fields_required_' . $this->scope . '_' . $i, $product->id, 'no' );
501
- $title = $this->get_value( 'wcj_product_input_fields_title_' . $this->scope . '_' . $i, $product->id, '' );
502
- $placeholder = $this->get_value( 'wcj_product_input_fields_placeholder_' . $this->scope . '_' . $i, $product->id, '' );
503
 
504
- $datepicker_format = $this->get_value( 'wcj_product_input_fields_type_datepicker_format_' . $this->scope . '_' . $i, $product->id, '' );
505
  if ( '' == $datepicker_format ) {
506
  $datepicker_format = get_option( 'date_format' );
507
  }
508
  $datepicker_format = wcj_date_format_php_to_js_v2( $datepicker_format );
509
- $datepicker_mindate = $this->get_value( 'wcj_product_input_fields_type_datepicker_mindate_' . $this->scope . '_' . $i, $product->id, -365 );
510
- $datepicker_maxdate = $this->get_value( 'wcj_product_input_fields_type_datepicker_maxdate_' . $this->scope . '_' . $i, $product->id, 365 );
511
- $datepicker_firstday = $this->get_value( 'wcj_product_input_fields_type_datepicker_firstday_' . $this->scope . '_' . $i, $product->id, 0 );
512
- $datepicker_changeyear = $this->get_value( 'wcj_product_input_fields_type_datepicker_changeyear_' . $this->scope . '_' . $i, $product->id, 'no' );
513
- $datepicker_yearrange = $this->get_value( 'wcj_product_input_fields_type_datepicker_yearrange_' . $this->scope . '_' . $i, $product->id, 'c-10:c+10' );
514
  if ( 'on' === $datepicker_changeyear || 'yes' === $datepicker_changeyear ) {
515
  $datepicker_year = 'changeyear="1" yearRange="' . $datepicker_yearrange . '" ';
516
  } else {
517
  $datepicker_year = '';
518
  }
519
 
520
- $timepicker_format = $this->get_value( 'wcj_product_input_fields_type_timepicker_format_' . $this->scope . '_' . $i, $product->id, 'hh:mm p' );
521
- $timepicker_interval = $this->get_value( 'wcj_product_input_fields_type_timepicker_interval_' . $this->scope . '_' . $i, $product->id, 15 );
 
 
 
 
 
 
 
 
522
 
523
- $file_accept = $this->get_value( 'wcj_product_input_fields_type_file_accept_' . $this->scope . '_' . $i, $product->id, '' );
524
  $custom_attributes = ( 'file' === $type ) ? ' accept="' . $file_accept . '"' : '';
525
  $field_name = 'wcj_product_input_fields_' . $this->scope . '_' . $i;
526
 
@@ -544,7 +484,7 @@ class WCJ_Product_Input_Fields_Abstract {
544
  case 'checkbox':
545
 
546
  $checked = checked(
547
- $this->get_value( 'wcj_product_input_fields_type_checkbox_default_' . $this->scope . '_' . $i, $product->id, 'no' ),
548
  'yes',
549
  false
550
  );
@@ -563,7 +503,7 @@ class WCJ_Product_Input_Fields_Abstract {
563
 
564
  case 'timepicker':
565
 
566
- echo '<p>' . $title . '<input interval="' . $timepicker_interval . '" timeformat="' . $timepicker_format . '" type="' . $type . '" display="time" name="' . $field_name . '" placeholder="' . $placeholder . '"' . $custom_attributes . '>' . '</p>';
567
  break;
568
 
569
  case 'textarea':
@@ -573,7 +513,7 @@ class WCJ_Product_Input_Fields_Abstract {
573
 
574
  case 'select':
575
 
576
- $select_options_raw = $this->get_value( 'wcj_product_input_fields_type_select_options_' . $this->scope . '_' . $i, $product->id, '' );
577
  $select_options = wcj_get_select_options( $select_options_raw, false );
578
  if ( '' != $placeholder ) {
579
  $select_options = array_merge( array( '' => $placeholder ), $select_options );
@@ -593,7 +533,7 @@ class WCJ_Product_Input_Fields_Abstract {
593
 
594
  case 'radio':
595
 
596
- $select_options_raw = $this->get_value( 'wcj_product_input_fields_type_select_options_' . $this->scope . '_' . $i, $product->id, '' );
597
  $select_options = wcj_get_select_options( $select_options_raw, false );
598
  $select_options_html = '';
599
  //$label_id = current( array_keys( $args['options'] ) );
@@ -663,10 +603,16 @@ class WCJ_Product_Input_Fields_Abstract {
663
 
664
  /**
665
  * add_product_input_fields_to_cart_item_data - from $_POST to $cart_item_data
 
 
666
  */
667
- public function add_product_input_fields_to_cart_item_data( $cart_item_data, $product_id, $variation_id ) {
668
  $total_number = apply_filters( 'booster_get_option', 1, $this->get_value( 'wcj_' . 'product_input_fields' . '_' . $this->scope . '_total_number', $product_id, 1 ) );
669
  for ( $i = 1; $i <= $total_number; $i++ ) {
 
 
 
 
670
  $type = $this->get_value( 'wcj_product_input_fields_type_' . $this->scope . '_' . $i, $product_id, '' );
671
  $value_name = 'wcj_product_input_fields_' . $this->scope . '_' . $i;
672
  if ( 'file' === $type ) {
@@ -688,7 +634,7 @@ class WCJ_Product_Input_Fields_Abstract {
688
  /**
689
  * get_cart_item_product_input_fields_from_session.
690
  */
691
- public function get_cart_item_product_input_fields_from_session( $item, $values, $key ) {
692
  $total_number = apply_filters( 'booster_get_option', 1, $this->get_value( 'wcj_' . 'product_input_fields' . '_' . $this->scope . '_total_number', $item['product_id'], 1 ) );
693
  for ( $i = 1; $i <= $total_number; $i++ ) {
694
  if ( array_key_exists( 'wcj_product_input_fields_' . $this->scope . '_' . $i, $values ) )
@@ -700,9 +646,9 @@ class WCJ_Product_Input_Fields_Abstract {
700
  /**
701
  * Adds product input values to order details (and emails).
702
  *
703
- * @version 2.4.7
704
  */
705
- public function add_product_input_fields_to_order_item_name( $name, $item, $is_cart = false ) {
706
 
707
  $total_number = apply_filters( 'booster_get_option', 1, $this->get_value( 'wcj_' . 'product_input_fields' . '_' . $this->scope . '_total_number', $item['product_id'], 1 ) );
708
  if ( $total_number < 1 ) {
@@ -714,8 +660,8 @@ class WCJ_Product_Input_Fields_Abstract {
714
  }
715
  for ( $i = 1; $i <= $total_number; $i++ ) {
716
 
717
- $is_enabled = $this->get_value( 'wcj_product_input_fields_enabled_' . $this->scope . '_' . $i, $item['product_id'], 'no' );
718
- if ( ! $is_enabled ) {
719
  continue;
720
  }
721
 
@@ -772,7 +718,7 @@ class WCJ_Product_Input_Fields_Abstract {
772
  *
773
  * @version 2.4.0
774
  */
775
- public function add_product_input_fields_to_cart_item_name( $name, $cart_item, $cart_item_key ) {
776
  return $this->add_product_input_fields_to_order_item_name( $name, $cart_item, true );
777
  }
778
 
@@ -781,7 +727,7 @@ class WCJ_Product_Input_Fields_Abstract {
781
  *
782
  * @version 2.5.0
783
  */
784
- public function add_product_input_fields_to_order_item_meta( $item_id, $values, $cart_item_key ) {
785
  $total_number = apply_filters( 'booster_get_option', 1, $this->get_value( 'wcj_' . 'product_input_fields' . '_' . $this->scope . '_total_number', $values['product_id'], 1 ) );
786
  for ( $i = 1; $i <= $total_number; $i++ ) {
787
  if ( array_key_exists( 'wcj_product_input_fields_' . $this->scope . '_' . $i , $values ) ) {
4
  *
5
  * The WooCommerce Jetpack Product Input Fields abstract class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
27
  /**
28
  * get_options.
29
  *
30
+ * @version 2.7.0
31
  */
32
  public function get_options() {
33
  $options = array(
102
  ),
103
  ),
104
 
 
105
  array(
106
  'id' => 'wcj_product_input_fields_type_file_accept_' . $this->scope . '_',
107
+ 'title' => __( 'If file is selected, set accepted file types here. E.g.: ".jpg,.jpeg,.png". Leave blank to accept all files', 'woocommerce-jetpack' )
108
+ . '. ' . __( 'Visit <a href="https://www.w3schools.com/tags/att_input_accept.asp" target="_blank">documentation on input accept attribute</a> for valid option formats', 'woocommerce-jetpack' ),
109
  'short_title' => __( 'File: Accepted types', 'woocommerce-jetpack' ),
110
  'type' => 'text',
111
  'default' => __( '.jpg,.jpeg,.png', 'woocommerce-jetpack' ),
121
 
122
  array(
123
  'id' => 'wcj_product_input_fields_type_datepicker_format_' . $this->scope . '_',
124
+ 'title' => __( 'If datepicker/weekpicker is selected, set date format here. Visit <a href="https://codex.wordpress.org/Formatting_Date_and_Time" target="_blank">documentation on date and time formatting</a> for valid date formats', 'woocommerce-jetpack' ),
125
  'desc_tip' => __( 'Leave blank to use your current WordPress format', 'woocommerce-jetpack' ) . ': ' . get_option( 'date_format' ),
126
  'short_title' => __( 'Datepicker/Weekpicker: Date format', 'woocommerce-jetpack' ),
127
  'type' => 'text',
180
 
181
  array(
182
  'id' => 'wcj_product_input_fields_type_timepicker_format_' . $this->scope . '_',
183
+ 'title' => __( 'If timepicker is selected, set time format here. Visit <a href="http://timepicker.co/options/" target="_blank">timepicker options page</a> for valid time formats', 'woocommerce-jetpack' ),
184
  'short_title' => __( 'Timepicker: Time format', 'woocommerce-jetpack' ),
185
  'type' => 'text',
186
  'default' => 'hh:mm p',
187
  ),
188
 
189
+ array(
190
+ 'id' => 'wcj_product_input_fields_type_timepicker_mintime_' . $this->scope . '_',
191
+ 'title' => __( 'If timepicker is selected, set min time here. Visit <a href="http://timepicker.co/options/" target="_blank">timepicker options page</a> for valid option formats', 'woocommerce-jetpack' ),
192
+ 'short_title' => __( 'Timepicker: Min Time', 'woocommerce-jetpack' ),
193
+ 'type' => 'text',
194
+ 'default' => '',
195
+ ),
196
+
197
+ array(
198
+ 'id' => 'wcj_product_input_fields_type_timepicker_maxtime_' . $this->scope . '_',
199
+ 'title' => __( 'If timepicker is selected, set max time here. Visit <a href="http://timepicker.co/options/" target="_blank">timepicker options page</a> for valid option formats', 'woocommerce-jetpack' ),
200
+ 'short_title' => __( 'Timepicker: Max Time', 'woocommerce-jetpack' ),
201
+ 'type' => 'text',
202
+ 'default' => '',
203
+ ),
204
+
205
  array(
206
  'id' => 'wcj_product_input_fields_type_timepicker_interval_' . $this->scope . '_',
207
  'title' => __( 'If timepicker is selected, set interval (in minutes) here', 'woocommerce-jetpack' ),
281
 
282
  /**
283
  * hide_custom_input_fields_default_output_in_admin_order.
284
+ *
285
+ * @todo Get actual (max) number of fields in case of local scope.
286
  */
287
  function hide_custom_input_fields_default_output_in_admin_order( $hidden_metas ) {
288
  $total_number = 0;
290
  $total_number = apply_filters( 'booster_get_option', 1, $this->get_value( 'wcj_' . 'product_input_fields' . '_' . $this->scope . '_total_number', 0, 1 ) );
291
  } else {
292
  $max_number_of_fields_for_local = 100;
293
+ $total_number = $max_number_of_fields_for_local;
294
  }
295
 
296
  for ( $i = 1; $i <= $total_number; $i++ ) {
302
  /**
303
  * output_custom_input_fields_in_admin_order.
304
  *
305
+ * @version 2.7.0
306
  */
307
  function output_custom_input_fields_in_admin_order( $item_id, $item, $_product ) {
308
  if ( null === $_product ) {
310
  return;
311
  }
312
  echo '<table cellspacing="0" class="display_meta">';
313
+ $_product_id = wcj_get_product_id_or_variation_parent_id( $_product );
314
+ $total_number = apply_filters( 'booster_get_option', 1, $this->get_value( 'wcj_' . 'product_input_fields' . '_' . $this->scope . '_total_number', $_product_id, 1 ) );
315
  for ( $i = 1; $i <= $total_number; $i++ ) {
316
 
317
+ $the_nice_name = $this->get_value( 'wcj_product_input_fields_title_' . $this->scope . '_' . $i, $_product_id, '' );
318
  if ( '' == $the_nice_name ) $the_nice_name = __( 'Product Input Field', 'woocommerce-jetpack' ) . ' (' . $this->scope . ') #' . $i;
319
 
320
  $the_value = isset( $item[ 'wcj_product_input_fields_' . $this->scope . '_' . $i ] ) ? $item[ 'wcj_product_input_fields_' . $this->scope . '_' . $i ] : '';
321
 
322
+ $type = $this->get_value( 'wcj_product_input_fields_type_' . $this->scope . '_' . $i, $_product_id, '' );
323
  if ( 'file' === $type ) {
324
  /* $file_name = $the_value;
325
  $upload_dir = wp_upload_dir();
344
  echo '</table>';
345
  }
346
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
347
  /**
348
  * get_value.
349
  */
350
+ function get_value( $option_name, $product_id, $default ) {
351
  return false;
352
  }
353
 
354
  /**
355
  * validate_product_input_fields_on_add_to_cart.
356
  *
357
+ * @version 2.7.0
358
  */
359
+ function validate_product_input_fields_on_add_to_cart( $passed, $product_id ) {
360
  $total_number = apply_filters( 'booster_get_option', 1, $this->get_value( 'wcj_' . 'product_input_fields' . '_' . $this->scope . '_total_number', $product_id, 1 ) );
361
  for ( $i = 1; $i <= $total_number; $i++ ) {
362
 
363
+ $is_enabled = $this->get_value( 'wcj_product_input_fields_enabled_' . $this->scope . '_' . $i, $product_id, 'no' );
364
+ if ( ! ( 'on' === $is_enabled || 'yes' === $is_enabled ) ) {
365
  continue;
366
  }
367
 
417
  /**
418
  * add_product_input_fields_to_frontend.
419
  *
420
+ * @version 2.7.0
421
  */
422
+ function add_product_input_fields_to_frontend() {
423
  global $product;
424
+ $_product_id = wcj_get_product_id_or_variation_parent_id( $product );
425
  //if ( ! $product ) // return;
426
+ $total_number = apply_filters( 'booster_get_option', 1, $this->get_value( 'wcj_' . 'product_input_fields' . '_' . $this->scope . '_total_number', $_product_id, 1 ) );
427
 
428
  for ( $i = 1; $i <= $total_number; $i++ ) {
429
 
430
+ $type = $this->get_value( 'wcj_product_input_fields_type_' . $this->scope . '_' . $i, $_product_id, 'text' );
431
+ $is_enabled = $this->get_value( 'wcj_product_input_fields_enabled_' . $this->scope . '_' . $i, $_product_id, 'no' );
432
+ $is_required = $this->get_value( 'wcj_product_input_fields_required_' . $this->scope . '_' . $i, $_product_id, 'no' );
433
+ $title = $this->get_value( 'wcj_product_input_fields_title_' . $this->scope . '_' . $i, $_product_id, '' );
434
+ $placeholder = $this->get_value( 'wcj_product_input_fields_placeholder_' . $this->scope . '_' . $i, $_product_id, '' );
435
 
436
+ $datepicker_format = $this->get_value( 'wcj_product_input_fields_type_datepicker_format_' . $this->scope . '_' . $i, $_product_id, '' );
437
  if ( '' == $datepicker_format ) {
438
  $datepicker_format = get_option( 'date_format' );
439
  }
440
  $datepicker_format = wcj_date_format_php_to_js_v2( $datepicker_format );
441
+ $datepicker_mindate = $this->get_value( 'wcj_product_input_fields_type_datepicker_mindate_' . $this->scope . '_' . $i, $_product_id, -365 );
442
+ $datepicker_maxdate = $this->get_value( 'wcj_product_input_fields_type_datepicker_maxdate_' . $this->scope . '_' . $i, $_product_id, 365 );
443
+ $datepicker_firstday = $this->get_value( 'wcj_product_input_fields_type_datepicker_firstday_' . $this->scope . '_' . $i, $_product_id, 0 );
444
+ $datepicker_changeyear = $this->get_value( 'wcj_product_input_fields_type_datepicker_changeyear_' . $this->scope . '_' . $i, $_product_id, 'no' );
445
+ $datepicker_yearrange = $this->get_value( 'wcj_product_input_fields_type_datepicker_yearrange_' . $this->scope . '_' . $i, $_product_id, 'c-10:c+10' );
446
  if ( 'on' === $datepicker_changeyear || 'yes' === $datepicker_changeyear ) {
447
  $datepicker_year = 'changeyear="1" yearRange="' . $datepicker_yearrange . '" ';
448
  } else {
449
  $datepicker_year = '';
450
  }
451
 
452
+ $timepicker_format = $this->get_value( 'wcj_product_input_fields_type_timepicker_format_' . $this->scope . '_' . $i, $_product_id, 'hh:mm p' );
453
+ $timepicker_interval = $this->get_value( 'wcj_product_input_fields_type_timepicker_interval_' . $this->scope . '_' . $i, $_product_id, 15 );
454
+ $timepicker_mintime = $this->get_value( 'wcj_product_input_fields_type_timepicker_mintime_' . $this->scope . '_' . $i, $_product_id, '' );
455
+ $timepicker_maxtime = $this->get_value( 'wcj_product_input_fields_type_timepicker_maxtime_' . $this->scope . '_' . $i, $_product_id, '' );
456
+ if ( '' != $timepicker_mintime ) {
457
+ $timepicker_mintime = ' mintime="' . $timepicker_mintime . '"';
458
+ }
459
+ if ( '' != $timepicker_maxtime ) {
460
+ $timepicker_maxtime = ' maxtime="' . $timepicker_maxtime . '"';
461
+ }
462
 
463
+ $file_accept = $this->get_value( 'wcj_product_input_fields_type_file_accept_' . $this->scope . '_' . $i, $_product_id, '' );
464
  $custom_attributes = ( 'file' === $type ) ? ' accept="' . $file_accept . '"' : '';
465
  $field_name = 'wcj_product_input_fields_' . $this->scope . '_' . $i;
466
 
484
  case 'checkbox':
485
 
486
  $checked = checked(
487
+ $this->get_value( 'wcj_product_input_fields_type_checkbox_default_' . $this->scope . '_' . $i, $_product_id, 'no' ),
488
  'yes',
489
  false
490
  );
503
 
504
  case 'timepicker':
505
 
506
+ echo '<p>' . $title . '<input' . $timepicker_mintime . $timepicker_maxtime . ' interval="' . $timepicker_interval . '" timeformat="' . $timepicker_format . '" type="' . $type . '" display="time" name="' . $field_name . '" placeholder="' . $placeholder . '"' . $custom_attributes . '>' . '</p>';
507
  break;
508
 
509
  case 'textarea':
513
 
514
  case 'select':
515
 
516
+ $select_options_raw = $this->get_value( 'wcj_product_input_fields_type_select_options_' . $this->scope . '_' . $i, $_product_id, '' );
517
  $select_options = wcj_get_select_options( $select_options_raw, false );
518
  if ( '' != $placeholder ) {
519
  $select_options = array_merge( array( '' => $placeholder ), $select_options );
533
 
534
  case 'radio':
535
 
536
+ $select_options_raw = $this->get_value( 'wcj_product_input_fields_type_select_options_' . $this->scope . '_' . $i, $_product_id, '' );
537
  $select_options = wcj_get_select_options( $select_options_raw, false );
538
  $select_options_html = '';
539
  //$label_id = current( array_keys( $args['options'] ) );
603
 
604
  /**
605
  * add_product_input_fields_to_cart_item_data - from $_POST to $cart_item_data
606
+ *
607
+ * @version 2.7.0
608
  */
609
+ function add_product_input_fields_to_cart_item_data( $cart_item_data, $product_id, $variation_id ) {
610
  $total_number = apply_filters( 'booster_get_option', 1, $this->get_value( 'wcj_' . 'product_input_fields' . '_' . $this->scope . '_total_number', $product_id, 1 ) );
611
  for ( $i = 1; $i <= $total_number; $i++ ) {
612
+ $is_enabled = $this->get_value( 'wcj_product_input_fields_enabled_' . $this->scope . '_' . $i, $product_id, 'no' );
613
+ if ( ! ( 'on' === $is_enabled || 'yes' === $is_enabled ) ) {
614
+ continue;
615
+ }
616
  $type = $this->get_value( 'wcj_product_input_fields_type_' . $this->scope . '_' . $i, $product_id, '' );
617
  $value_name = 'wcj_product_input_fields_' . $this->scope . '_' . $i;
618
  if ( 'file' === $type ) {
634
  /**
635
  * get_cart_item_product_input_fields_from_session.
636
  */
637
+ function get_cart_item_product_input_fields_from_session( $item, $values, $key ) {
638
  $total_number = apply_filters( 'booster_get_option', 1, $this->get_value( 'wcj_' . 'product_input_fields' . '_' . $this->scope . '_total_number', $item['product_id'], 1 ) );
639
  for ( $i = 1; $i <= $total_number; $i++ ) {
640
  if ( array_key_exists( 'wcj_product_input_fields_' . $this->scope . '_' . $i, $values ) )
646
  /**
647
  * Adds product input values to order details (and emails).
648
  *
649
+ * @version 2.7.0
650
  */
651
+ function add_product_input_fields_to_order_item_name( $name, $item, $is_cart = false ) {
652
 
653
  $total_number = apply_filters( 'booster_get_option', 1, $this->get_value( 'wcj_' . 'product_input_fields' . '_' . $this->scope . '_total_number', $item['product_id'], 1 ) );
654
  if ( $total_number < 1 ) {
660
  }
661
  for ( $i = 1; $i <= $total_number; $i++ ) {
662
 
663
+ $is_enabled = $this->get_value( 'wcj_product_input_fields_enabled_' . $this->scope . '_' . $i, $item['product_id'], 'no' );
664
+ if ( ! ( 'on' === $is_enabled || 'yes' === $is_enabled ) ) {
665
  continue;
666
  }
667
 
718
  *
719
  * @version 2.4.0
720
  */
721
+ function add_product_input_fields_to_cart_item_name( $name, $cart_item, $cart_item_key ) {
722
  return $this->add_product_input_fields_to_order_item_name( $name, $cart_item, true );
723
  }
724
 
727
  *
728
  * @version 2.5.0
729
  */
730
+ function add_product_input_fields_to_order_item_meta( $item_id, $values, $cart_item_key ) {
731
  $total_number = apply_filters( 'booster_get_option', 1, $this->get_value( 'wcj_' . 'product_input_fields' . '_' . $this->scope . '_total_number', $values['product_id'], 1 ) );
732
  for ( $i = 1; $i <= $total_number; $i++ ) {
733
  if ( array_key_exists( 'wcj_product_input_fields_' . $this->scope . '_' . $i , $values ) ) {
includes/input-fields/class-wcj-product-input-fields-global.php CHANGED
@@ -19,7 +19,7 @@ class WCJ_Product_Input_Fields_Global extends WCJ_Product_Input_Fields_Abstract
19
  *
20
  * @version 2.5.0
21
  */
22
- public function __construct() {
23
 
24
  $this->scope = 'global';
25
 
@@ -61,48 +61,10 @@ class WCJ_Product_Input_Fields_Global extends WCJ_Product_Input_Fields_Abstract
61
  }
62
  }
63
 
64
- /**
65
- * replace_loop_add_to_cart_button.
66
- *
67
- public function replace_loop_add_to_cart_button( $button, $product ) {
68
- $html .= '<form class="cart" method="post" enctype=\'multipart/form-data\'>';
69
- $html .= '<input type="hidden" name="add-to-cart" value="' . esc_attr( $product->id ) . '" />';
70
- $html .= '<button type="submit" class="button add_to_cart_button product_type_simple">' . $product->single_add_to_cart_text() . '</button>';
71
- $html .= $button;
72
- $html .= '</form>';
73
- return $html;
74
- }
75
-
76
- /**
77
- * ajax_add_to_cart.
78
- *
79
- public function ajax_add_to_cart() {
80
-
81
- $message = date( 'l jS \of F Y h:i:s A' ) . ' ' . print_r( $_POST, true );
82
- update_option( 'wcj_log', $message );
83
-
84
-
85
- // check if logo_text has been defined by the client
86
- //if ( isset( $_POST['logo_text'] ) ) {
87
- // do something
88
- //}
89
- }
90
-
91
- /**
92
- * init.
93
- *
94
- public function init() {
95
-
96
- print_r( get_option( 'wcj_log', 'N/A' ) );
97
-
98
- //remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 ); // remove that ajaxified Add To Cart button that automatically adds 1 item to the cart.
99
- //add_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_single_add_to_cart', 30 ); // replace it with the Add To Cart Button, complete with QTY field.. the same one that is used on the Single Product page.
100
- }
101
-
102
  /**
103
  * get_value.
104
  */
105
- public function get_value( $option_name, $product_id, $default ) {
106
  return get_option( $option_name, $default );
107
  }
108
 
19
  *
20
  * @version 2.5.0
21
  */
22
+ function __construct() {
23
 
24
  $this->scope = 'global';
25
 
61
  }
62
  }
63
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  /**
65
  * get_value.
66
  */
67
+ function get_value( $option_name, $product_id, $default ) {
68
  return get_option( $option_name, $default );
69
  }
70
 
includes/js/eu-vat-number.js CHANGED
@@ -1,8 +1,11 @@
1
  /**
2
  * eu-vat-number.
3
  *
4
- * @version 2.6.0
5
  */
 
 
 
6
  jQuery( function( $ ) {
7
 
8
  // Setup before functions
@@ -12,7 +15,7 @@ jQuery( function( $ ) {
12
  var $vatParagraph = $('p[id="billing_eu_vat_number_field"]');
13
 
14
  // Add progress text
15
- if ('yes'==ajax_object.add_progress_text) {
16
  $vatParagraph.append('<div id="wcj_eu_vat_number_progress"></div>');
17
  var $progressText = $('div[id="wcj_eu_vat_number_progress"]');
18
  }
@@ -33,8 +36,8 @@ jQuery( function( $ ) {
33
  var vatNumberToCheck = $vatInput.val();
34
  if (''!=vatNumberToCheck) {
35
  // Validating EU VAT Number through AJAX call
36
- if ('yes'==ajax_object.add_progress_text) {
37
- $progressText.text(ajax_object.progress_text_validating);
38
  }
39
  var data = {
40
  'action': 'wcj_validate_eu_vat_number',
@@ -42,23 +45,23 @@ jQuery( function( $ ) {
42
  };
43
  $.ajax({
44
  type: "POST",
45
- url: ajax_object.ajax_url,
46
  data: data,
47
  success: function(response) {
48
  if ('1'==response) {
49
  $vatParagraph.addClass('woocommerce-validated');
50
- if ('yes'==ajax_object.add_progress_text) {
51
- $progressText.text(ajax_object.progress_text_valid);
52
  }
53
  } else if ('0'==response) {
54
  $vatParagraph.addClass('woocommerce-invalid');
55
- if ('yes'==ajax_object.add_progress_text) {
56
- $progressText.text(ajax_object.progress_text_not_valid);
57
  }
58
  } else {
59
  $vatParagraph.addClass('woocommerce-invalid');
60
- if ('yes'==ajax_object.add_progress_text) {
61
- $progressText.text(ajax_object.progress_text_validation_failed);
62
  }
63
  }
64
  $('body').trigger('update_checkout');
@@ -66,7 +69,7 @@ jQuery( function( $ ) {
66
  });
67
  } else {
68
  // VAT input is empty
69
- if ('yes'==ajax_object.add_progress_text) {
70
  $progressText.text('');
71
  }
72
  if ($vatParagraph.hasClass('validate-required')) {
1
  /**
2
  * eu-vat-number.
3
  *
4
+ * @version 2.7.0
5
  */
6
+
7
+ var _ajax_object = ajax_object;
8
+
9
  jQuery( function( $ ) {
10
 
11
  // Setup before functions
15
  var $vatParagraph = $('p[id="billing_eu_vat_number_field"]');
16
 
17
  // Add progress text
18
+ if ('yes'==_ajax_object.add_progress_text) {
19
  $vatParagraph.append('<div id="wcj_eu_vat_number_progress"></div>');
20
  var $progressText = $('div[id="wcj_eu_vat_number_progress"]');
21
  }
36
  var vatNumberToCheck = $vatInput.val();
37
  if (''!=vatNumberToCheck) {
38
  // Validating EU VAT Number through AJAX call
39
+ if ('yes'==_ajax_object.add_progress_text) {
40
+ $progressText.text(_ajax_object.progress_text_validating);
41
  }
42
  var data = {
43
  'action': 'wcj_validate_eu_vat_number',
45
  };
46
  $.ajax({
47
  type: "POST",
48
+ url: _ajax_object.ajax_url,
49
  data: data,
50
  success: function(response) {
51
  if ('1'==response) {
52
  $vatParagraph.addClass('woocommerce-validated');
53
+ if ('yes'==_ajax_object.add_progress_text) {
54
+ $progressText.text(_ajax_object.progress_text_valid);
55
  }
56
  } else if ('0'==response) {
57
  $vatParagraph.addClass('woocommerce-invalid');
58
+ if ('yes'==_ajax_object.add_progress_text) {
59
+ $progressText.text(_ajax_object.progress_text_not_valid);
60
  }
61
  } else {
62
  $vatParagraph.addClass('woocommerce-invalid');
63
+ if ('yes'==_ajax_object.add_progress_text) {
64
+ $progressText.text(_ajax_object.progress_text_validation_failed);
65
  }
66
  }
67
  $('body').trigger('update_checkout');
69
  });
70
  } else {
71
  // VAT input is empty
72
+ if ('yes'==_ajax_object.add_progress_text) {
73
  $progressText.text('');
74
  }
75
  if ($vatParagraph.hasClass('validate-required')) {
includes/js/wcj-bookings.js CHANGED
@@ -1,9 +1,12 @@
1
  /**
2
  * wcj-bookings.
3
  *
4
- * version 2.5.0
5
  * since 2.5.0
6
  */
 
 
 
7
  var decodeEntities = (function () {
8
  //create a new html document (doesn't execute script tags in child elements)
9
  var doc = document.implementation.createHTMLDocument("");
@@ -46,7 +49,7 @@ function change_price() {
46
  if ( t2 > t1 ) {
47
  var product_id = jQuery("input[type='hidden'][name='variation_id']").val();
48
  if ( ! product_id ) {
49
- product_id = ajax_object.product_id;
50
  }
51
  var data = {
52
  'action': 'price_change',
@@ -54,7 +57,7 @@ function change_price() {
54
  'date_from': date_from,
55
  'date_to': date_to
56
  };
57
- jQuery.post(ajax_object.ajax_url, data, function(response) {
58
  if ( '' != response ) {
59
  jQuery("p[class='price']").text(decodeEntities(response));
60
  }
@@ -63,11 +66,11 @@ function change_price() {
63
  jQuery("div[name='wcj_bookings_message'] p").text('');
64
  } else {
65
  jQuery("div[name='wcj_bookings_message']").css("display", "block");
66
- jQuery("div[name='wcj_bookings_message'] p").text(ajax_object.wrong_dates_message);
67
- jQuery("p[class='price']").text(decodeEntities(ajax_object.original_price_html));
68
  }
69
  } else {
70
- jQuery("p[class='price']").text(decodeEntities(ajax_object.original_price_html));
71
  }
72
  }
73
 
1
  /**
2
  * wcj-bookings.
3
  *
4
+ * version 2.7.0
5
  * since 2.5.0
6
  */
7
+
8
+ var _ajax_object = ajax_object;
9
+
10
  var decodeEntities = (function () {
11
  //create a new html document (doesn't execute script tags in child elements)
12
  var doc = document.implementation.createHTMLDocument("");
49
  if ( t2 > t1 ) {
50
  var product_id = jQuery("input[type='hidden'][name='variation_id']").val();
51
  if ( ! product_id ) {
52
+ product_id = _ajax_object.product_id;
53
  }
54
  var data = {
55
  'action': 'price_change',
57
  'date_from': date_from,
58
  'date_to': date_to
59
  };
60
+ jQuery.post(_ajax_object.ajax_url, data, function(response) {
61
  if ( '' != response ) {
62
  jQuery("p[class='price']").text(decodeEntities(response));
63
  }
66
  jQuery("div[name='wcj_bookings_message'] p").text('');
67
  } else {
68
  jQuery("div[name='wcj_bookings_message']").css("display", "block");
69
+ jQuery("div[name='wcj_bookings_message'] p").text(_ajax_object.wrong_dates_message);
70
+ jQuery("p[class='price']").text(decodeEntities(_ajax_object.original_price_html));
71
  }
72
  } else {
73
+ jQuery("p[class='price']").text(decodeEntities(_ajax_object.original_price_html));
74
  }
75
  }
76
 
includes/js/wcj-product-addons.js CHANGED
@@ -1,10 +1,12 @@
1
  /**
2
  * wcj-product-addons.
3
  *
4
- * version 2.5.5
5
  * since 2.5.3
6
  */
7
 
 
 
8
  function change_price() {
9
  var is_variation_ok = true;
10
  if ( jQuery(".variations select").length ) {
@@ -17,7 +19,7 @@ function change_price() {
17
  var is_variable;
18
  if ( ! product_id ) {
19
  is_variable = false;
20
- product_id = ajax_object.product_id;
21
  } else {
22
  is_variable = true;
23
  }
@@ -35,7 +37,7 @@ function change_price() {
35
  data[jQuery(this).attr('name')] = jQuery(this).val();
36
  }
37
  });
38
- jQuery.post(ajax_object.ajax_url, data, function(response) {
39
  if ( '' != response ) {
40
  if ( ! is_variable ) {
41
  jQuery("p[class='price']").html(response);
1
  /**
2
  * wcj-product-addons.
3
  *
4
+ * version 2.7.0
5
  * since 2.5.3
6
  */
7
 
8
+ var _ajax_object = ajax_object;
9
+
10
  function change_price() {
11
  var is_variation_ok = true;
12
  if ( jQuery(".variations select").length ) {
19
  var is_variable;
20
  if ( ! product_id ) {
21
  is_variable = false;
22
+ product_id = _ajax_object.product_id;
23
  } else {
24
  is_variable = true;
25
  }
37
  data[jQuery(this).attr('name')] = jQuery(this).val();
38
  }
39
  });
40
+ jQuery.post(_ajax_object.ajax_url, data, function(response) {
41
  if ( '' != response ) {
42
  if ( ! is_variable ) {
43
  jQuery("p[class='price']").html(response);
includes/js/wcj-timepicker.js CHANGED
@@ -1,8 +1,16 @@
 
 
 
 
 
 
1
  jQuery(document).ready(function() {
2
  jQuery("input[display='time']").each( function () {
3
  jQuery(this).timepicker({
4
  timeFormat : jQuery(this).attr("timeformat"),
5
- interval : jQuery(this).attr("interval")
 
 
6
  });
7
  });
8
  });
1
+ /**
2
+ * WooCommerce Jetpack - Timepicker JS
3
+ *
4
+ * @version 2.7.0
5
+ * @author Algoritmika Ltd.
6
+ */
7
  jQuery(document).ready(function() {
8
  jQuery("input[display='time']").each( function () {
9
  jQuery(this).timepicker({
10
  timeFormat : jQuery(this).attr("timeformat"),
11
+ interval : jQuery(this).attr("interval"),
12
+ minTime: jQuery(this).attr("mintime"),
13
+ maxTime: jQuery(this).attr("maxtime")
14
  });
15
  });
16
  });
includes/lib/tcpdf_min/config/tcpdf_config.php CHANGED
@@ -58,6 +58,15 @@
58
  * By default it is automatically set but you can also set it as a fixed string to improve performances.
59
  */
60
  //define ('K_PATH_FONTS', K_PATH_MAIN.'fonts/');
 
 
 
 
 
 
 
 
 
61
 
62
  /**
63
  * Default images directory.
58
  * By default it is automatically set but you can also set it as a fixed string to improve performances.
59
  */
60
  //define ('K_PATH_FONTS', K_PATH_MAIN.'fonts/');
61
+ ////////////////////////////////////////////
62
+ // Algoritmika - Booster version 2.7.0
63
+ // TODO - search for `check_tcpdf_fonts`
64
+ /*
65
+ $tcpdf_fonts_dir = wp_upload_dir();
66
+ $tcpdf_fonts_dir = $tcpdf_fonts_dir['basedir'] . '/woocommerce_uploads/wcj_uploads/tcpdf_fonts/';
67
+ define ('K_PATH_FONTS', $tcpdf_fonts_dir );
68
+ */
69
+ ////////////////////////////////////////////
70
 
71
  /**
72
  * Default images directory.
includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack PDF Invoices Report Tool class.
6
  *
7
- * @version 2.5.7
8
  * @since 2.2.1
9
  * @author Algoritmika Ltd.
10
  */
@@ -243,7 +243,7 @@ class WCJ_PDF_Invoicing_Report_Tool {
243
  /**
244
  * Invoices Report Data function.
245
  *
246
- * @version 2.5.7
247
  * @since 2.5.7
248
  */
249
  function get_invoices_report_data( $year, $month, $invoice_type_id ) {
@@ -335,7 +335,7 @@ class WCJ_PDF_Invoicing_Report_Tool {
335
  sprintf( '%.2f', $order_total_exlc_tax ),
336
  $order_tax_html,
337
  sprintf( '%.2f', $order_total ),
338
- $the_order->get_order_currency(),
339
  $the_order->get_total_refunded(),
340
  //'<pre>' . print_r( get_post_meta( $order_id ), true ) . '</pre>',
341
  );
4
  *
5
  * The WooCommerce Jetpack PDF Invoices Report Tool class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.2.1
9
  * @author Algoritmika Ltd.
10
  */
243
  /**
244
  * Invoices Report Data function.
245
  *
246
+ * @version 2.7.0
247
  * @since 2.5.7
248
  */
249
  function get_invoices_report_data( $year, $month, $invoice_type_id ) {
335
  sprintf( '%.2f', $order_total_exlc_tax ),
336
  $order_tax_html,
337
  sprintf( '%.2f', $order_total ),
338
+ wcj_get_order_currency( $the_order ),
339
  $the_order->get_total_refunded(),
340
  //'<pre>' . print_r( get_post_meta( $order_id ), true ) . '</pre>',
341
  );
includes/pdf-invoices/settings/class-wcj-pdf-invoicing-display.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack PDF Invoicing Display class.
6
  *
7
- * @version 2.5.8
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -125,16 +125,16 @@ class WCJ_PDF_Invoicing_Display extends WCJ_Module {
125
  /**
126
  * add_pdf_invoices_admin_actions.
127
  *
128
- * @version 2.5.2
129
  * @since 2.4.7
130
  */
131
  function add_pdf_invoices_admin_actions( $actions, $the_order ) {
132
  $invoice_types = wcj_get_enabled_invoice_types();
133
  foreach ( $invoice_types as $invoice_type ) {
134
- if ( wcj_is_invoice_created( $the_order->id, $invoice_type['id'] ) ) {
135
  if ( 'yes' === get_option( 'wcj_invoicing_' . $invoice_type['id'] . '_admin_orders_view_btn', 'no' ) ) {
136
  // Document (View) button
137
- $query_args = array( 'order_id' => $the_order->id, 'invoice_type_id' => $invoice_type['id'], 'get_invoice' => '1', );
138
  if ( 'yes' === get_option( 'wcj_invoicing_' . $invoice_type['id'] . '_save_as_enabled', 'no' ) ) {
139
  $query_args['save_pdf_invoice'] = '1';
140
  }
@@ -146,7 +146,7 @@ class WCJ_PDF_Invoicing_Display extends WCJ_Module {
146
  }
147
  if ( 'yes' === get_option( 'wcj_invoicing_' . $invoice_type['id'] . '_admin_orders_delete_btn', 'yes' ) ) {
148
  // Delete button
149
- $query_args = array( 'delete_invoice_for_order_id' => $the_order->id, 'invoice_type_id' => $invoice_type['id'] );
150
  $the_url = add_query_arg( $query_args, remove_query_arg( 'create_invoice_for_order_id' ) );
151
  $the_name = __( 'Delete', 'woocommerce-jetpack' ) . ' ' . $invoice_type['title'];
152
  $the_action = 'view ' . $invoice_type['id'] . '_' . 'delete' . ( ( 'yes' === get_option( 'wcj_invoicing_' . $invoice_type['id'] . '_admin_orders_delete_btn_confirm', 'yes' ) ) ? ' wcj_need_confirmation' : '' );
@@ -156,7 +156,7 @@ class WCJ_PDF_Invoicing_Display extends WCJ_Module {
156
  } else {
157
  if ( 'yes' === get_option( 'wcj_invoicing_' . $invoice_type['id'] . '_admin_orders_create_btn', 'yes' ) ) {
158
  // Create button
159
- $query_args = array( 'create_invoice_for_order_id' => $the_order->id, 'invoice_type_id' => $invoice_type['id'] );
160
  $the_url = add_query_arg( $query_args, remove_query_arg( 'delete_invoice_for_order_id' ) );
161
  $the_name = __( 'Create', 'woocommerce-jetpack' ) . ' ' . $invoice_type['title'];
162
  $the_action = 'view ' . $invoice_type['id'] . '_' . 'create' . ( ( 'yes' === get_option( 'wcj_invoicing_' . $invoice_type['id'] . '_admin_orders_create_btn_confirm', 'yes' ) ) ? ' wcj_need_confirmation' : '' );
@@ -240,19 +240,19 @@ class WCJ_PDF_Invoicing_Display extends WCJ_Module {
240
  /**
241
  * add_pdf_invoices_action_links.
242
  *
243
- * @version 2.3.7
244
  */
245
  function add_pdf_invoices_action_links( $actions, $the_order ) {
246
  $invoice_types = wcj_get_enabled_invoice_types();
247
  foreach ( $invoice_types as $invoice_type ) {
248
- if ( ! wcj_is_invoice_created( $the_order->id, $invoice_type['id'] ) )
249
  continue;
250
  $my_account_option_name = 'wcj_invoicing_' . $invoice_type['id'] . '_enabled_for_customers';
251
  if ( 'yes' === get_option( $my_account_option_name, 'no' ) ) {
252
 
253
  $the_action_id = $invoice_type['id'];
254
 
255
- $query_args = array( 'order_id' => $the_order->id, 'invoice_type_id' => $invoice_type['id'], 'get_invoice' => '1', );
256
  if ( 'yes' === get_option( 'wcj_invoicing_' . $invoice_type['id'] . '_save_as_enabled', 'no' ) ) {
257
  $query_args['save_pdf_invoice'] = '1';
258
  }
4
  *
5
  * The WooCommerce Jetpack PDF Invoicing Display class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
125
  /**
126
  * add_pdf_invoices_admin_actions.
127
  *
128
+ * @version 2.7.0
129
  * @since 2.4.7
130
  */
131
  function add_pdf_invoices_admin_actions( $actions, $the_order ) {
132
  $invoice_types = wcj_get_enabled_invoice_types();
133
  foreach ( $invoice_types as $invoice_type ) {
134
+ if ( wcj_is_invoice_created( wcj_get_order_id( $the_order ), $invoice_type['id'] ) ) {
135
  if ( 'yes' === get_option( 'wcj_invoicing_' . $invoice_type['id'] . '_admin_orders_view_btn', 'no' ) ) {
136
  // Document (View) button
137
+ $query_args = array( 'order_id' => wcj_get_order_id( $the_order ), 'invoice_type_id' => $invoice_type['id'], 'get_invoice' => '1', );
138
  if ( 'yes' === get_option( 'wcj_invoicing_' . $invoice_type['id'] . '_save_as_enabled', 'no' ) ) {
139
  $query_args['save_pdf_invoice'] = '1';
140
  }
146
  }
147
  if ( 'yes' === get_option( 'wcj_invoicing_' . $invoice_type['id'] . '_admin_orders_delete_btn', 'yes' ) ) {
148
  // Delete button
149
+ $query_args = array( 'delete_invoice_for_order_id' => wcj_get_order_id( $the_order ), 'invoice_type_id' => $invoice_type['id'] );
150
  $the_url = add_query_arg( $query_args, remove_query_arg( 'create_invoice_for_order_id' ) );
151
  $the_name = __( 'Delete', 'woocommerce-jetpack' ) . ' ' . $invoice_type['title'];
152
  $the_action = 'view ' . $invoice_type['id'] . '_' . 'delete' . ( ( 'yes' === get_option( 'wcj_invoicing_' . $invoice_type['id'] . '_admin_orders_delete_btn_confirm', 'yes' ) ) ? ' wcj_need_confirmation' : '' );
156
  } else {
157
  if ( 'yes' === get_option( 'wcj_invoicing_' . $invoice_type['id'] . '_admin_orders_create_btn', 'yes' ) ) {
158
  // Create button
159
+ $query_args = array( 'create_invoice_for_order_id' => wcj_get_order_id( $the_order ), 'invoice_type_id' => $invoice_type['id'] );
160
  $the_url = add_query_arg( $query_args, remove_query_arg( 'delete_invoice_for_order_id' ) );
161
  $the_name = __( 'Create', 'woocommerce-jetpack' ) . ' ' . $invoice_type['title'];
162
  $the_action = 'view ' . $invoice_type['id'] . '_' . 'create' . ( ( 'yes' === get_option( 'wcj_invoicing_' . $invoice_type['id'] . '_admin_orders_create_btn_confirm', 'yes' ) ) ? ' wcj_need_confirmation' : '' );
240
  /**
241
  * add_pdf_invoices_action_links.
242
  *
243
+ * @version 2.7.0
244
  */
245
  function add_pdf_invoices_action_links( $actions, $the_order ) {
246
  $invoice_types = wcj_get_enabled_invoice_types();
247
  foreach ( $invoice_types as $invoice_type ) {
248
+ if ( ! wcj_is_invoice_created( wcj_get_order_id( $the_order ), $invoice_type['id'] ) )
249
  continue;
250
  $my_account_option_name = 'wcj_invoicing_' . $invoice_type['id'] . '_enabled_for_customers';
251
  if ( 'yes' === get_option( $my_account_option_name, 'no' ) ) {
252
 
253
  $the_action_id = $invoice_type['id'];
254
 
255
+ $query_args = array( 'order_id' => wcj_get_order_id( $the_order ), 'invoice_type_id' => $invoice_type['id'], 'get_invoice' => '1', );
256
  if ( 'yes' === get_option( 'wcj_invoicing_' . $invoice_type['id'] . '_save_as_enabled', 'no' ) ) {
257
  $query_args['save_pdf_invoice'] = '1';
258
  }
includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack PDF Invoicing Emails class.
6
  *
7
- * @version 2.5.8
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -54,6 +54,8 @@ class WCJ_PDF_Invoicing_Emails extends WCJ_Module {
54
 
55
  /**
56
  * add_pdf_invoice_email_attachment.
 
 
57
  */
58
  function add_pdf_invoice_email_attachment( $attachments, $status, $order ) {
59
  $invoice_types_ids = wcj_get_enabled_invoice_types_ids();
@@ -64,7 +66,7 @@ class WCJ_PDF_Invoicing_Emails extends WCJ_Module {
64
  $send_on_statuses = get_option( 'wcj_invoicing_' . $invoice_type_id . '_attach_to_emails', array() );
65
  if ( '' == $send_on_statuses ) $send_on_statuses = array();
66
  if ( in_array( $status, $send_on_statuses ) ) {
67
- $the_invoice = wcj_get_pdf_invoice( $order->id, $invoice_type_id );
68
  $file_name = $the_invoice->get_pdf( 'F' );
69
  if ( '' != $file_name ) {
70
  $attachments[] = $file_name;
4
  *
5
  * The WooCommerce Jetpack PDF Invoicing Emails class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
54
 
55
  /**
56
  * add_pdf_invoice_email_attachment.
57
+ *
58
+ * @version 2.7.0
59
  */
60
  function add_pdf_invoice_email_attachment( $attachments, $status, $order ) {
61
  $invoice_types_ids = wcj_get_enabled_invoice_types_ids();
66
  $send_on_statuses = get_option( 'wcj_invoicing_' . $invoice_type_id . '_attach_to_emails', array() );
67
  if ( '' == $send_on_statuses ) $send_on_statuses = array();
68
  if ( in_array( $status, $send_on_statuses ) ) {
69
+ $the_invoice = wcj_get_pdf_invoice( wcj_get_order_id( $order ), $invoice_type_id );
70
  $file_name = $the_invoice->get_pdf( 'F' );
71
  if ( '' != $file_name ) {
72
  $attachments[] = $file_name;
includes/pdf-invoices/settings/class-wcj-pdf-invoicing-templates.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack PDF Invoices Templates class.
6
  *
7
- * @version 2.5.2
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -30,7 +30,7 @@ class WCJ_PDF_Invoicing_Templates extends WCJ_Module {
30
  /**
31
  * get_settings.
32
  *
33
- * @version 2.5.2
34
  */
35
  function get_settings() {
36
 
@@ -40,9 +40,19 @@ class WCJ_PDF_Invoicing_Templates extends WCJ_Module {
40
  foreach ( $invoice_types as $invoice_type ) {
41
 
42
  ob_start();
43
- include( 'defaults/wcj-content-template-' . $invoice_type['id'] . '.php' );
 
 
 
 
44
  $default_template = ob_get_clean();
45
 
 
 
 
 
 
 
46
  $settings = array_merge( $settings, array(
47
  array(
48
  'title' => strtoupper( $invoice_type['desc'] ),
4
  *
5
  * The WooCommerce Jetpack PDF Invoices Templates class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
30
  /**
31
  * get_settings.
32
  *
33
+ * @version 2.7.0
34
  */
35
  function get_settings() {
36
 
40
  foreach ( $invoice_types as $invoice_type ) {
41
 
42
  ob_start();
43
+ if ( false === strpos( $invoice_type['id'], 'custom_doc_' ) ) {
44
+ include( 'defaults/wcj-content-template-' . $invoice_type['id'] . '.php' );
45
+ } else {
46
+ include( 'defaults/wcj-content-template-' . 'custom_doc' . '.php' );
47
+ }
48
  $default_template = ob_get_clean();
49
 
50
+ if ( false !== strpos( $invoice_type['id'], 'custom_doc' ) ) {
51
+ $custom_doc_nr = ( 'custom_doc' === $invoice_type['id'] ) ? '1' : str_replace( 'custom_doc_', '', $invoice_type['id'] );
52
+ $default_template = str_replace( '[wcj_custom_doc_number]', '[wcj_custom_doc_number doc_nr="' . $custom_doc_nr . '"]', $default_template );
53
+ $default_template = str_replace( '[wcj_custom_doc_date]', '[wcj_custom_doc_date doc_nr="' . $custom_doc_nr . '"]', $default_template );
54
+ }
55
+
56
  $settings = array_merge( $settings, array(
57
  array(
58
  'title' => strtoupper( $invoice_type['desc'] ),
includes/price-by-country/class-wcj-price-by-country-core.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Price by Country Core class.
6
  *
7
- * @version 2.6.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -19,7 +19,7 @@ class WCJ_Price_by_Country_Core {
19
  *
20
  * @version 2.5.7
21
  */
22
- public function __construct() {
23
  $this->customer_country_group_id = null;
24
  if ( 'no' === get_option( 'wcj_price_by_country_for_bots_disabled', 'no' ) || ! wcj_is_bot() ) {
25
  // `add_hooks()` moved to `init` hook, so in case we need to call `get_customer_country_by_ip()` `WC_Geolocation` class is ready
@@ -30,7 +30,7 @@ class WCJ_Price_by_Country_Core {
30
  /**
31
  * add_hooks.
32
  *
33
- * @version 2.5.6
34
  */
35
  function add_hooks() {
36
 
@@ -57,27 +57,12 @@ class WCJ_Price_by_Country_Core {
57
  }
58
 
59
  // Price hooks
60
- add_filter( 'woocommerce_get_price', array( $this, 'change_price_by_country' ), PHP_INT_MAX - 1, 2 );
61
- add_filter( 'woocommerce_get_sale_price', array( $this, 'change_price_by_country' ), PHP_INT_MAX - 1, 2 );
62
- add_filter( 'woocommerce_get_regular_price', array( $this, 'change_price_by_country' ), PHP_INT_MAX - 1, 2 );
63
-
64
- // Variable products
65
- add_filter( 'woocommerce_variation_prices_price', array( $this, 'change_price_by_country' ), PHP_INT_MAX - 1, 2 );
66
- add_filter( 'woocommerce_variation_prices_regular_price', array( $this, 'change_price_by_country' ), PHP_INT_MAX - 1, 2 );
67
- add_filter( 'woocommerce_variation_prices_sale_price', array( $this, 'change_price_by_country' ), PHP_INT_MAX - 1, 2 );
68
- add_filter( 'woocommerce_get_variation_prices_hash', array( $this, 'get_variation_prices_hash' ), PHP_INT_MAX - 1, 3 );
69
-
70
- // Grouped products
71
- add_filter( 'woocommerce_get_price_including_tax', array( $this, 'change_price_by_country_grouped' ), PHP_INT_MAX - 1, 3 );
72
- add_filter( 'woocommerce_get_price_excluding_tax', array( $this, 'change_price_by_country_grouped' ), PHP_INT_MAX - 1, 3 );
73
 
74
  // Currency hooks
75
  add_filter( 'woocommerce_currency_symbol', array( $this, 'change_currency_symbol' ), PHP_INT_MAX - 1, 2 );
76
  add_filter( 'woocommerce_currency', array( $this, 'change_currency_code' ), PHP_INT_MAX - 1, 1 );
77
 
78
- // Shipping
79
- add_filter( 'woocommerce_package_rates', array( $this, 'change_shipping_price_by_country' ), PHP_INT_MAX - 1, 2 );
80
-
81
  // Price Filter Widget
82
  if ( 'yes' === get_option( 'wcj_price_by_country_price_filter_widget_support_enabled', 'no' ) ) {
83
  add_filter( 'woocommerce_price_filter_meta_keys', array( $this, 'price_filter_meta_keys' ), PHP_INT_MAX, 1 );
@@ -101,13 +86,16 @@ class WCJ_Price_by_Country_Core {
101
  /*
102
  * sorting_by_price_fix.
103
  *
104
- * @version 2.5.6
105
  * @since 2.5.6
106
  */
107
  function sorting_by_price_fix( $args ) {
108
  if ( null != ( $group_id = $this->get_customer_country_group_id() ) ) {
109
  // Get ordering from query string
110
- $orderby_value = isset( $_GET['orderby'] ) ? woocommerce_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
 
 
 
111
  // Get orderby arg from string
112
  $orderby_value = explode( '-', $orderby_value );
113
  $orderby = esc_attr( $orderby_value[0] );
@@ -150,25 +138,24 @@ class WCJ_Price_by_Country_Core {
150
  }
151
 
152
  /**
153
- * change_price_by_country_grouped.
154
  *
155
- * @version 2.6.0
156
  * @since 2.5.0
157
  */
158
- function change_price_by_country_grouped( $price, $qty, $_product ) {
159
  if ( $_product->is_type( 'grouped' ) ) {
160
  if ( 'yes' === get_option( 'wcj_price_by_country_local_enabled', 'yes' ) ) {
161
- $get_price_method = 'get_price_' . get_option( 'woocommerce_tax_display_shop' ) . 'uding_tax';
162
  foreach ( $_product->get_children() as $child_id ) {
163
  $the_price = get_post_meta( $child_id, '_price', true );
164
  $the_product = wc_get_product( $child_id );
165
- $the_price = $the_product->$get_price_method( 1, $the_price );
166
  if ( $the_price == $price ) {
167
- return $this->change_price_by_country( $price, $child_id );
168
  }
169
  }
170
  } else {
171
- return $this->change_price_by_country( $price, 0 );
172
  }
173
  }
174
  return $price;
@@ -195,11 +182,11 @@ class WCJ_Price_by_Country_Core {
195
  }
196
 
197
  /**
198
- * change_shipping_price_by_country.
199
  *
200
- * @version 2.4.4
201
  */
202
- function change_shipping_price_by_country( $package_rates, $package ) {
203
  if ( null != ( $group_id = $this->get_customer_country_group_id() ) ) {
204
  $country_exchange_rate = get_option( 'wcj_price_by_country_exchange_rate_group_' . $group_id, 1 );
205
  $modified_package_rates = array();
@@ -223,9 +210,10 @@ class WCJ_Price_by_Country_Core {
223
  /**
224
  * get_customer_country_group_id.
225
  *
226
- * @version 2.5.6
 
227
  */
228
- public function get_customer_country_group_id() {
229
 
230
  if ( 'yes' === get_option( 'wcj_price_by_country_revert', 'no' ) && is_checkout() ) {
231
  $this->customer_country_group_id = -1;
@@ -241,7 +229,11 @@ class WCJ_Price_by_Country_Core {
241
  if ( isset( $_GET['country'] ) && '' != $_GET['country'] && wcj_is_user_role( 'administrator' ) ) {
242
  $country = $_GET['country'];
243
  } elseif ( 'no' != ( $override_option = get_option( 'wcj_price_by_country_override_on_checkout_with_billing_country', 'no' ) )
244
- /* && is_checkout() */
 
 
 
 
245
  && isset( WC()->customer )
246
  && ( ( 'yes' === $override_option && '' != WC()->customer->get_country() ) || ( 'shipping_country' === $override_option && '' != WC()->customer->get_shipping_country() ) )
247
  ) {
@@ -292,7 +284,7 @@ class WCJ_Price_by_Country_Core {
292
  /**
293
  * change_currency_symbol.
294
  */
295
- public function change_currency_symbol( $currency_symbol, $currency ) {
296
  if ( null != ( $group_id = $this->get_customer_country_group_id() ) ) {
297
  $country_currency_code = get_option( 'wcj_price_by_country_exchange_rate_currency_group_' . $group_id );
298
  if ( '' != $country_currency_code ) {
@@ -305,7 +297,7 @@ class WCJ_Price_by_Country_Core {
305
  /**
306
  * change_currency_code.
307
  */
308
- public function change_currency_code( $currency ) {
309
  if ( null != ( $group_id = $this->get_customer_country_group_id() ) ) {
310
  $country_currency_code = get_option( 'wcj_price_by_country_exchange_rate_currency_group_' . $group_id );
311
  if ( '' != $country_currency_code ) {
@@ -343,11 +335,11 @@ class WCJ_Price_by_Country_Core {
343
  }
344
 
345
  /**
346
- * change_price_by_country.
347
  *
348
- * @version 2.5.3
349
  */
350
- function change_price_by_country( $price, $product ) {
351
  if ( null != ( $group_id = $this->get_customer_country_group_id() ) ) {
352
  return wcj_price_by_country( $price, $product, $group_id );
353
  }
4
  *
5
  * The WooCommerce Jetpack Price by Country Core class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
19
  *
20
  * @version 2.5.7
21
  */
22
+ function __construct() {
23
  $this->customer_country_group_id = null;
24
  if ( 'no' === get_option( 'wcj_price_by_country_for_bots_disabled', 'no' ) || ! wcj_is_bot() ) {
25
  // `add_hooks()` moved to `init` hook, so in case we need to call `get_customer_country_by_ip()` `WC_Geolocation` class is ready
30
  /**
31
  * add_hooks.
32
  *
33
+ * @version 2.7.0
34
  */
35
  function add_hooks() {
36
 
57
  }
58
 
59
  // Price hooks
60
+ wcj_add_change_price_hooks( $this, PHP_INT_MAX - 1 );
 
 
 
 
 
 
 
 
 
 
 
 
61
 
62
  // Currency hooks
63
  add_filter( 'woocommerce_currency_symbol', array( $this, 'change_currency_symbol' ), PHP_INT_MAX - 1, 2 );
64
  add_filter( 'woocommerce_currency', array( $this, 'change_currency_code' ), PHP_INT_MAX - 1, 1 );
65
 
 
 
 
66
  // Price Filter Widget
67
  if ( 'yes' === get_option( 'wcj_price_by_country_price_filter_widget_support_enabled', 'no' ) ) {
68
  add_filter( 'woocommerce_price_filter_meta_keys', array( $this, 'price_filter_meta_keys' ), PHP_INT_MAX, 1 );
86
  /*
87
  * sorting_by_price_fix.
88
  *
89
+ * @version 2.7.0
90
  * @since 2.5.6
91
  */
92
  function sorting_by_price_fix( $args ) {
93
  if ( null != ( $group_id = $this->get_customer_country_group_id() ) ) {
94
  // Get ordering from query string
95
+ $orderby_value = ( WCJ_IS_WC_VERSION_BELOW_3 ?
96
+ ( isset( $_GET['orderby'] ) ? woocommerce_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) ) ) :
97
+ ( isset( $_GET['orderby'] ) ? wc_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) ) )
98
+ );
99
  // Get orderby arg from string
100
  $orderby_value = explode( '-', $orderby_value );
101
  $orderby = esc_attr( $orderby_value[0] );
138
  }
139
 
140
  /**
141
+ * change_price_grouped.
142
  *
143
+ * @version 2.7.0
144
  * @since 2.5.0
145
  */
146
+ function change_price_grouped( $price, $qty, $_product ) {
147
  if ( $_product->is_type( 'grouped' ) ) {
148
  if ( 'yes' === get_option( 'wcj_price_by_country_local_enabled', 'yes' ) ) {
 
149
  foreach ( $_product->get_children() as $child_id ) {
150
  $the_price = get_post_meta( $child_id, '_price', true );
151
  $the_product = wc_get_product( $child_id );
152
+ $the_price = wcj_get_product_display_price( $the_product, $the_price, 1 );
153
  if ( $the_price == $price ) {
154
+ return $this->change_price( $price, $child_id );
155
  }
156
  }
157
  } else {
158
+ return $this->change_price( $price, 0 );
159
  }
160
  }
161
  return $price;
182
  }
183
 
184
  /**
185
+ * change_price_shipping.
186
  *
187
+ * @version 2.7.0
188
  */
189
+ function change_price_shipping( $package_rates, $package ) {
190
  if ( null != ( $group_id = $this->get_customer_country_group_id() ) ) {
191
  $country_exchange_rate = get_option( 'wcj_price_by_country_exchange_rate_group_' . $group_id, 1 );
192
  $modified_package_rates = array();
210
  /**
211
  * get_customer_country_group_id.
212
  *
213
+ * @version 2.7.0
214
+ * @todo (maybe) add `cart_and_checkout` override option
215
  */
216
+ function get_customer_country_group_id() {
217
 
218
  if ( 'yes' === get_option( 'wcj_price_by_country_revert', 'no' ) && is_checkout() ) {
219
  $this->customer_country_group_id = -1;
229
  if ( isset( $_GET['country'] ) && '' != $_GET['country'] && wcj_is_user_role( 'administrator' ) ) {
230
  $country = $_GET['country'];
231
  } elseif ( 'no' != ( $override_option = get_option( 'wcj_price_by_country_override_on_checkout_with_billing_country', 'no' ) )
232
+ && (
233
+ ( 'all' === get_option( 'wcj_price_by_country_override_scope', 'all' ) ) ||
234
+ // ( 'cart_and_checkout' === get_option( 'wcj_price_by_country_override_scope', 'all' ) && ( is_cart() || is_checkout() ) ) ||
235
+ ( 'checkout' === get_option( 'wcj_price_by_country_override_scope', 'all' ) && is_checkout() )
236
+ )
237
  && isset( WC()->customer )
238
  && ( ( 'yes' === $override_option && '' != WC()->customer->get_country() ) || ( 'shipping_country' === $override_option && '' != WC()->customer->get_shipping_country() ) )
239
  ) {
284
  /**
285
  * change_currency_symbol.
286
  */
287
+ function change_currency_symbol( $currency_symbol, $currency ) {
288
  if ( null != ( $group_id = $this->get_customer_country_group_id() ) ) {
289
  $country_currency_code = get_option( 'wcj_price_by_country_exchange_rate_currency_group_' . $group_id );
290
  if ( '' != $country_currency_code ) {
297
  /**
298
  * change_currency_code.
299
  */
300
+ function change_currency_code( $currency ) {
301
  if ( null != ( $group_id = $this->get_customer_country_group_id() ) ) {
302
  $country_currency_code = get_option( 'wcj_price_by_country_exchange_rate_currency_group_' . $group_id );
303
  if ( '' != $country_currency_code ) {
335
  }
336
 
337
  /**
338
+ * change_price.
339
  *
340
+ * @version 2.7.0
341
  */
342
+ function change_price( $price, $product ) {
343
  if ( null != ( $group_id = $this->get_customer_country_group_id() ) ) {
344
  return wcj_price_by_country( $price, $product, $group_id );
345
  }
includes/price-by-country/class-wcj-price-by-country-local.php CHANGED
@@ -19,7 +19,7 @@ class WCJ_Price_by_Country_Local {
19
  *
20
  * @version 2.3.9
21
  */
22
- public function __construct() {
23
  // add_action( 'add_meta_boxes', array( $this, 'add_custom_meta_box_to_product_edit' ) );
24
  add_action( 'woocommerce_ajax_save_product_variations', array( $this, 'save_custom_meta_box_on_product_edit_ajax' ), PHP_INT_MAX, 1 );
25
  add_action( 'save_post_product', array( $this, 'save_custom_meta_box_on_product_edit' ), PHP_INT_MAX, 2 );
@@ -60,8 +60,7 @@ class WCJ_Price_by_Country_Local {
60
  /**
61
  * create_custom_meta_box.
62
  */
63
- //public function create_custom_meta_box() {
64
- public function create_custom_meta_box( $simple_or_variable, $product_id = 0 ) {
65
 
66
  $current_post_id = ( $product_id == 0) ? get_the_ID() : $product_id;
67
  $the_product = wc_get_product( $current_post_id );
@@ -125,24 +124,24 @@ class WCJ_Price_by_Country_Local {
125
  $options = array(
126
 
127
  array(
128
- 'id' => 'wcj_' . $meta_box_id . '_regular_price_' . $this->scope . '_',
129
- 'title' => __( 'Regular Price', 'woocommerce' ),
130
- 'type' => 'text',
131
- 'default' => 0,
132
  ),
133
 
134
  array(
135
- 'id' => 'wcj_' . $meta_box_id . '_sale_price_' . $this->scope . '_',
136
- 'title' => __( 'Sale Price', 'woocommerce' ),
137
- 'type' => 'text',
138
- 'default' => 0,
139
  ),
140
 
141
  array(
142
- 'id' => 'wcj_' . $meta_box_id . '_make_empty_price_' . $this->scope . '_',
143
- 'title' => __( 'Make empty price', 'woocommerce' ),
144
- 'type' => 'checkbox',
145
- 'default' => 'off',
146
  ),
147
 
148
  );
@@ -153,7 +152,6 @@ class WCJ_Price_by_Country_Local {
153
  * Save options.
154
  */
155
  function save_options( $post_id, $total_options_groups, $variation_id_addon = '' ) {
156
-
157
  $options = $this->get_prices_options();
158
  for ( $i = 1; $i <= $total_options_groups; $i++ ) {
159
  foreach ( $options as $option ) {
@@ -172,14 +170,14 @@ class WCJ_Price_by_Country_Local {
172
  * @version 2.3.9
173
  * @since 2.3.9
174
  */
175
- public function save_custom_meta_box_on_product_edit_ajax( $product_id ) {
176
  return $this->save_custom_meta_box_on_product_edit( $product_id, /* 'ajax' */ null );
177
  }
178
 
179
  /**
180
  * Save Custom Meta Box on Product Edit.
181
  */
182
- public function save_custom_meta_box_on_product_edit( $post_id, $post ) {
183
 
184
  $meta_box_id = 'price_by_country';
185
 
@@ -235,7 +233,7 @@ class WCJ_Price_by_Country_Local {
235
  *
236
  * @version 2.4.4
237
  */
238
- public function get_all_options_html( $simple_or_variable, $current_post_id, $total_number, $variation_id_addon = '' ) {
239
  $html = '';
240
  $options = $this->get_prices_options();
241
  for ( $i = 1; $i <= $total_number; $i++ ) {
19
  *
20
  * @version 2.3.9
21
  */
22
+ function __construct() {
23
  // add_action( 'add_meta_boxes', array( $this, 'add_custom_meta_box_to_product_edit' ) );
24
  add_action( 'woocommerce_ajax_save_product_variations', array( $this, 'save_custom_meta_box_on_product_edit_ajax' ), PHP_INT_MAX, 1 );
25
  add_action( 'save_post_product', array( $this, 'save_custom_meta_box_on_product_edit' ), PHP_INT_MAX, 2 );
60
  /**
61
  * create_custom_meta_box.
62
  */
63
+ function create_custom_meta_box( $simple_or_variable, $product_id = 0 ) {
 
64
 
65
  $current_post_id = ( $product_id == 0) ? get_the_ID() : $product_id;
66
  $the_product = wc_get_product( $current_post_id );
124
  $options = array(
125
 
126
  array(
127
+ 'id' => 'wcj_' . $meta_box_id . '_regular_price_' . $this->scope . '_',
128
+ 'title' => __( 'Regular Price', 'woocommerce' ),
129
+ 'type' => 'text',
130
+ 'default' => 0,
131
  ),
132
 
133
  array(
134
+ 'id' => 'wcj_' . $meta_box_id . '_sale_price_' . $this->scope . '_',
135
+ 'title' => __( 'Sale Price', 'woocommerce' ),
136
+ 'type' => 'text',
137
+ 'default' => 0,
138
  ),
139
 
140
  array(
141
+ 'id' => 'wcj_' . $meta_box_id . '_make_empty_price_' . $this->scope . '_',
142
+ 'title' => __( 'Make empty price', 'woocommerce' ),
143
+ 'type' => 'checkbox',
144
+ 'default' => 'off',
145
  ),
146
 
147
  );
152
  * Save options.
153
  */
154
  function save_options( $post_id, $total_options_groups, $variation_id_addon = '' ) {
 
155
  $options = $this->get_prices_options();
156
  for ( $i = 1; $i <= $total_options_groups; $i++ ) {
157
  foreach ( $options as $option ) {
170
  * @version 2.3.9
171
  * @since 2.3.9
172
  */
173
+ function save_custom_meta_box_on_product_edit_ajax( $product_id ) {
174
  return $this->save_custom_meta_box_on_product_edit( $product_id, /* 'ajax' */ null );
175
  }
176
 
177
  /**
178
  * Save Custom Meta Box on Product Edit.
179
  */
180
+ function save_custom_meta_box_on_product_edit( $post_id, $post ) {
181
 
182
  $meta_box_id = 'price_by_country';
183
 
233
  *
234
  * @version 2.4.4
235
  */
236
+ function get_all_options_html( $simple_or_variable, $current_post_id, $total_number, $variation_id_addon = '' ) {
237
  $html = '';
238
  $options = $this->get_prices_options();
239
  for ( $i = 1; $i <= $total_number; $i++ ) {
includes/reports/wcj-class-reports-monthly-sales.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Mothly Sales Reports class.
6
  *
7
- * @version 2.5.3
8
  * @since 2.4.7
9
  * @author Algoritmika Ltd.
10
  */
@@ -18,11 +18,11 @@ class WCJ_Reports_Monthly_Sales {
18
  /**
19
  * Constructor.
20
  *
21
- * @version 2.4.7
22
  * @since 2.4.7
23
  */
24
- public function __construct( $args = null ) {
25
-
26
  }
27
 
28
  /**
@@ -31,7 +31,7 @@ class WCJ_Reports_Monthly_Sales {
31
  * @version 2.5.3
32
  * @since 2.4.7
33
  */
34
- public function get_report() {
35
  $html = '';
36
  $this->year = isset( $_GET['year'] ) ? $_GET['year'] : date( 'Y' );
37
  if ( isset( $_POST['wcj_reset_currency_rates'] ) ) {
@@ -125,9 +125,9 @@ class WCJ_Reports_Monthly_Sales {
125
  /*
126
  * get_monthly_sales_report.
127
  *
128
- * @version 2.5.3
129
  * @since 2.4.7
130
- * @todo take not monthly average, but "Close" of closest day; forecast for current month; $order_currencies_array;
131
  */
132
  function get_monthly_sales_report() {
133
 
@@ -198,7 +198,7 @@ class WCJ_Reports_Monthly_Sales {
198
  while ( $loop_orders->have_posts() ) : $loop_orders->the_post();
199
  $order_id = $loop_orders->post->ID;
200
  $order = new WC_Order( $order_id );
201
- $order_currency = $order->get_order_currency();
202
  if ( ! isset( $order_currencies_array[ $order_currency ] ) ) {
203
  $order_currencies_array[ $order_currency ] = 0;
204
  }
4
  *
5
  * The WooCommerce Jetpack Mothly Sales Reports class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.4.7
9
  * @author Algoritmika Ltd.
10
  */
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 2.7.0
22
  * @since 2.4.7
23
  */
24
+ function __construct( $args = null ) {
25
+ return true;
26
  }
27
 
28
  /**
31
  * @version 2.5.3
32
  * @since 2.4.7
33
  */
34
+ function get_report() {
35
  $html = '';
36
  $this->year = isset( $_GET['year'] ) ? $_GET['year'] : date( 'Y' );
37
  if ( isset( $_POST['wcj_reset_currency_rates'] ) ) {
125
  /*
126
  * get_monthly_sales_report.
127
  *
128
+ * @version 2.7.0
129
  * @since 2.4.7
130
+ * @todo take not monthly average, but "Close" of closest day; forecast for current month; $order_currencies_array;
131
  */
132
  function get_monthly_sales_report() {
133
 
198
  while ( $loop_orders->have_posts() ) : $loop_orders->the_post();
199
  $order_id = $loop_orders->post->ID;
200
  $order = new WC_Order( $order_id );
201
+ $order_currency = wcj_get_order_currency( $order );
202
  if ( ! isset( $order_currencies_array[ $order_currency ] ) ) {
203
  $order_currencies_array[ $order_currency ] = 0;
204
  }
includes/reports/wcj-class-reports-sales.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Sales Reports class.
6
  *
7
- * @version 2.6.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -71,7 +71,7 @@ class WCJ_Reports_Sales {
71
  /*
72
  * get_products_sales.
73
  *
74
- * @version 2.6.0
75
  * @since 2.3.0
76
  * @todo (maybe) currency conversion
77
  * @todo fix when variable and variations are all (wrongfully) counted in total sums
@@ -120,7 +120,7 @@ class WCJ_Reports_Sales {
120
  if ( is_object( $_product ) ) {
121
  $products_data[ $product_id ][ 'title' ] .= $_product->get_title(); // get_the_title( $product_id );
122
  if ( 'WC_Product_Variation' === get_class( $_product ) && is_object( $_product->parent ) ) {
123
- $products_data[ $product_id ][ 'title' ] .= '<br><em>' . $_product->get_formatted_variation_attributes( true ) . '</em>';
124
  } elseif ( 'WC_Product_Variation' === get_class( $_product ) ) {
125
  // $products_data[ $product_id ][ 'title' ] .= ' [PARENT PRODUCT DELETED]'; // todo
126
  $products_data[ $product_id ][ 'title' ] .= $item['name'] . '<br><em>' . __( 'Variation', 'woocommerce-jetpack' ) . '</em>'; // get_the_title( $product_id );
@@ -345,7 +345,7 @@ class WCJ_Reports_Sales {
345
  $filter_form .= '<input type="hidden" name="page" value="' . $_GET['page'] . '" />';
346
  $filter_form .= '<input type="hidden" name="tab" value="' . $_GET['tab'] . '" />';
347
  $filter_form .= '<input type="hidden" name="report" value="' . $_GET['report'] . '" />';
348
- $filter_form .= '<input type="hidden" name="year" value="' . $_GET['year'] . '" />';
349
  $filter_form .= '<input type="text" name="product_title" title="" value="' . $this->product_title . '" /><input type="submit" value="' . __( 'Filter products', 'woocommerce-jetpack' ) . '" />';
350
  $filter_form .= '</form>';
351
 
4
  *
5
  * The WooCommerce Jetpack Sales Reports class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
71
  /*
72
  * get_products_sales.
73
  *
74
+ * @version 2.7.0
75
  * @since 2.3.0
76
  * @todo (maybe) currency conversion
77
  * @todo fix when variable and variations are all (wrongfully) counted in total sums
120
  if ( is_object( $_product ) ) {
121
  $products_data[ $product_id ][ 'title' ] .= $_product->get_title(); // get_the_title( $product_id );
122
  if ( 'WC_Product_Variation' === get_class( $_product ) && is_object( $_product->parent ) ) {
123
+ $products_data[ $product_id ][ 'title' ] .= '<br><em>' . wcj_get_product_formatted_variation( $_product, true ) . '</em>';
124
  } elseif ( 'WC_Product_Variation' === get_class( $_product ) ) {
125
  // $products_data[ $product_id ][ 'title' ] .= ' [PARENT PRODUCT DELETED]'; // todo
126
  $products_data[ $product_id ][ 'title' ] .= $item['name'] . '<br><em>' . __( 'Variation', 'woocommerce-jetpack' ) . '</em>'; // get_the_title( $product_id );
345
  $filter_form .= '<input type="hidden" name="page" value="' . $_GET['page'] . '" />';
346
  $filter_form .= '<input type="hidden" name="tab" value="' . $_GET['tab'] . '" />';
347
  $filter_form .= '<input type="hidden" name="report" value="' . $_GET['report'] . '" />';
348
+ $filter_form .= '<input type="hidden" name="year" value="' . $this->year . '" />';
349
  $filter_form .= '<input type="text" name="product_title" title="" value="' . $this->product_title . '" /><input type="submit" value="' . __( 'Filter products', 'woocommerce-jetpack' ) . '" />';
350
  $filter_form .= '</form>';
351
 
includes/reports/wcj-class-reports-stock.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Stock Reports class.
6
  *
7
- * @version 2.5.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -94,7 +94,7 @@ class WCJ_Reports_Stock {
94
  /*
95
  * gather_products_data.
96
  *
97
- * @version 2.5.0
98
  * @todo variable products?
99
  */
100
  public function gather_products_data( &$products_info ) {
@@ -114,11 +114,11 @@ class WCJ_Reports_Stock {
114
  $the_ID = get_the_ID();
115
  $the_product = wc_get_product( $the_ID );
116
  $the_price = $the_product->get_price();
117
- $the_stock = $the_product->get_total_stock();
118
  //if ( 0 == $the_stock )
119
  //$the_stock = get_post_meta( $the_ID, '_stock', true );
120
  $the_title = get_the_title();
121
- $the_categories = $the_product->get_categories();
122
  $the_date = get_the_date();
123
  $the_permalink = get_the_permalink();
124
 
4
  *
5
  * The WooCommerce Jetpack Stock Reports class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
94
  /*
95
  * gather_products_data.
96
  *
97
+ * @version 2.7.0
98
  * @todo variable products?
99
  */
100
  public function gather_products_data( &$products_info ) {
114
  $the_ID = get_the_ID();
115
  $the_product = wc_get_product( $the_ID );
116
  $the_price = $the_product->get_price();
117
+ $the_stock = wcj_get_product_total_stock( $the_product );
118
  //if ( 0 == $the_stock )
119
  //$the_stock = get_post_meta( $the_ID, '_stock', true );
120
  $the_title = get_the_title();
121
+ $the_categories = ( WCJ_IS_WC_VERSION_BELOW_3 ? $the_product->get_categories() : wc_get_product_category_list( $the_ID ) );
122
  $the_date = get_the_date();
123
  $the_permalink = get_the_permalink();
124
 
includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php CHANGED
@@ -4,12 +4,12 @@
4
  *
5
  * The WooCommerce Jetpack Custom Shipping with Shipping Zones class.
6
  *
7
- * @version 2.6.0
8
  * @since 2.5.6
9
  * @author Algoritmika Ltd.
10
  */
11
 
12
- add_action( 'woocommerce_shipping_init', 'init_wc_shipping_wcj_custom_w_zones_class' );
13
 
14
  if ( ! function_exists( 'init_wc_shipping_wcj_custom_w_zones_class' ) ) {
15
 
4
  *
5
  * The WooCommerce Jetpack Custom Shipping with Shipping Zones class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.5.6
9
  * @author Algoritmika Ltd.
10
  */
11
 
12
+ add_action( 'init', 'init_wc_shipping_wcj_custom_w_zones_class' );
13
 
14
  if ( ! function_exists( 'init_wc_shipping_wcj_custom_w_zones_class' ) ) {
15
 
includes/shipping/class-wc-shipping-wcj-custom.php CHANGED
@@ -4,12 +4,12 @@
4
  *
5
  * The WooCommerce Jetpack Custom Shipping class.
6
  *
7
- * @version 2.5.6
8
  * @since 2.4.8
9
  * @author Algoritmika Ltd.
10
  */
11
 
12
- add_action( 'woocommerce_shipping_init', 'init_wc_shipping_wcj_custom_class' );
13
 
14
  if ( ! function_exists( 'init_wc_shipping_wcj_custom_class' ) ) {
15
 
4
  *
5
  * The WooCommerce Jetpack Custom Shipping class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.4.8
9
  * @author Algoritmika Ltd.
10
  */
11
 
12
+ add_action( 'init', 'init_wc_shipping_wcj_custom_class' );
13
 
14
  if ( ! function_exists( 'init_wc_shipping_wcj_custom_class' ) ) {
15
 
includes/shortcodes/class-wcj-general-shortcodes.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack General Shortcodes class.
6
  *
7
- * @version 2.6.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -17,7 +17,7 @@ class WCJ_General_Shortcodes extends WCJ_Shortcodes {
17
  /**
18
  * Constructor.
19
  *
20
- * @version 2.6.0
21
  */
22
  public function __construct() {
23
 
@@ -28,6 +28,7 @@ class WCJ_General_Shortcodes extends WCJ_Shortcodes {
28
  'wcj_current_timestamp',
29
  // 'wcj_image',
30
  'wcj_cart_items_total_weight',
 
31
  'wcj_wpml',
32
  'wcj_wpml_translate',
33
  'wcj_country_select_drop_down_list',
@@ -474,6 +475,21 @@ class WCJ_General_Shortcodes extends WCJ_Shortcodes {
474
  return $this->wcj_wpml( $atts, $content );
475
  }
476
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
477
  /**
478
  * wcj_cart_items_total_weight.
479
  */
4
  *
5
  * The WooCommerce Jetpack General Shortcodes class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
17
  /**
18
  * Constructor.
19
  *
20
+ * @version 2.7.0
21
  */
22
  public function __construct() {
23
 
28
  'wcj_current_timestamp',
29
  // 'wcj_image',
30
  'wcj_cart_items_total_weight',
31
+ 'wcj_cart_items_total_quantity',
32
  'wcj_wpml',
33
  'wcj_wpml_translate',
34
  'wcj_country_select_drop_down_list',
475
  return $this->wcj_wpml( $atts, $content );
476
  }
477
 
478
+ /**
479
+ * wcj_cart_items_total_quantity.
480
+ *
481
+ * @version 2.7.0
482
+ * @since 2.7.0
483
+ */
484
+ function wcj_cart_items_total_quantity( $atts ) {
485
+ $total_quantity = 0;
486
+ $_items = WC()->cart->get_cart();
487
+ foreach( $_items as $_item ) {
488
+ $total_quantity += $_item['quantity'];
489
+ }
490
+ return $total_quantity;
491
+ }
492
+
493
  /**
494
  * wcj_cart_items_total_weight.
495
  */
includes/shortcodes/class-wcj-invoices-shortcodes.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Invoices Shortcodes class.
6
  *
7
- * @version 2.2.7
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -17,7 +17,7 @@ class WCJ_Invoices_Shortcodes extends WCJ_Shortcodes {
17
  /**
18
  * Constructor.
19
  *
20
- * @version 2.2.7
21
  */
22
  public function __construct() {
23
 
@@ -42,6 +42,7 @@ class WCJ_Invoices_Shortcodes extends WCJ_Shortcodes {
42
  'date_format' => get_option( 'date_format' ),
43
  'days' => 0,
44
  'invoice_type' => 'invoice',
 
45
  );
46
 
47
  parent::__construct();
@@ -73,17 +74,36 @@ class WCJ_Invoices_Shortcodes extends WCJ_Shortcodes {
73
  function wcj_invoice_date( $atts ) {
74
  return wcj_get_invoice_date( $atts['order_id'], $atts['invoice_type'], $atts['days'], $atts['date_format'] );
75
  }
 
 
 
 
76
  function wcj_proforma_invoice_date( $atts ) {
77
  return wcj_get_invoice_date( $atts['order_id'], 'proforma_invoice', $atts['days'], $atts['date_format'] );
78
  }
 
 
 
 
79
  function wcj_packing_slip_date( $atts ) {
80
  return wcj_get_invoice_date( $atts['order_id'], 'packing_slip', $atts['days'], $atts['date_format'] );
81
  }
 
 
 
 
82
  function wcj_credit_note_date( $atts ) {
83
  return wcj_get_invoice_date( $atts['order_id'], 'credit_note', $atts['days'], $atts['date_format'] );
84
  }
 
 
 
 
 
 
85
  function wcj_custom_doc_date( $atts ) {
86
- return wcj_get_invoice_date( $atts['order_id'], 'custom_doc', $atts['days'], $atts['date_format'] );
 
87
  }
88
 
89
  /**
@@ -92,18 +112,38 @@ class WCJ_Invoices_Shortcodes extends WCJ_Shortcodes {
92
  function wcj_invoice_number( $atts ) {
93
  return wcj_get_invoice_number( $atts['order_id'], $atts['invoice_type'] );
94
  }
 
 
 
 
95
  function wcj_proforma_invoice_number( $atts ) {
96
  return wcj_get_invoice_number( $atts['order_id'], 'proforma_invoice' );
97
  }
 
 
 
 
98
  function wcj_packing_slip_number( $atts ) {
99
  return wcj_get_invoice_number( $atts['order_id'], 'packing_slip' );
100
  }
 
 
 
 
101
  function wcj_credit_note_number( $atts ) {
102
  return wcj_get_invoice_number( $atts['order_id'], 'credit_note' );
103
  }
 
 
 
 
 
 
104
  function wcj_custom_doc_number( $atts ) {
105
- return wcj_get_invoice_number( $atts['order_id'], 'custom_doc' );
 
106
  }
 
107
  }
108
 
109
  endif;
4
  *
5
  * The WooCommerce Jetpack Invoices Shortcodes class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
17
  /**
18
  * Constructor.
19
  *
20
+ * @version 2.7.0
21
  */
22
  public function __construct() {
23
 
42
  'date_format' => get_option( 'date_format' ),
43
  'days' => 0,
44
  'invoice_type' => 'invoice',
45
+ 'doc_nr' => 1,
46
  );
47
 
48
  parent::__construct();
74
  function wcj_invoice_date( $atts ) {
75
  return wcj_get_invoice_date( $atts['order_id'], $atts['invoice_type'], $atts['days'], $atts['date_format'] );
76
  }
77
+
78
+ /**
79
+ * wcj_proforma_invoice_date.
80
+ */
81
  function wcj_proforma_invoice_date( $atts ) {
82
  return wcj_get_invoice_date( $atts['order_id'], 'proforma_invoice', $atts['days'], $atts['date_format'] );
83
  }
84
+
85
+ /**
86
+ * wcj_packing_slip_date.
87
+ */
88
  function wcj_packing_slip_date( $atts ) {
89
  return wcj_get_invoice_date( $atts['order_id'], 'packing_slip', $atts['days'], $atts['date_format'] );
90
  }
91
+
92
+ /**
93
+ * wcj_credit_note_date.
94
+ */
95
  function wcj_credit_note_date( $atts ) {
96
  return wcj_get_invoice_date( $atts['order_id'], 'credit_note', $atts['days'], $atts['date_format'] );
97
  }
98
+
99
+ /**
100
+ * wcj_custom_doc_date.
101
+ *
102
+ * @version 2.7.0
103
+ */
104
  function wcj_custom_doc_date( $atts ) {
105
+ $invoice_type_id = ( 1 == $atts['doc_nr'] ) ? 'custom_doc' : 'custom_doc' . '_' . $atts['doc_nr'];
106
+ return wcj_get_invoice_date( $atts['order_id'], $invoice_type_id, $atts['days'], $atts['date_format'] );
107
  }
108
 
109
  /**
112
  function wcj_invoice_number( $atts ) {
113
  return wcj_get_invoice_number( $atts['order_id'], $atts['invoice_type'] );
114
  }
115
+
116
+ /**
117
+ * wcj_proforma_invoice_number.
118
+ */
119
  function wcj_proforma_invoice_number( $atts ) {
120
  return wcj_get_invoice_number( $atts['order_id'], 'proforma_invoice' );
121
  }
122
+
123
+ /**
124
+ * wcj_packing_slip_number.
125
+ */
126
  function wcj_packing_slip_number( $atts ) {
127
  return wcj_get_invoice_number( $atts['order_id'], 'packing_slip' );
128
  }
129
+
130
+ /**
131
+ * wcj_credit_note_number.
132
+ */
133
  function wcj_credit_note_number( $atts ) {
134
  return wcj_get_invoice_number( $atts['order_id'], 'credit_note' );
135
  }
136
+
137
+ /**
138
+ * wcj_custom_doc_number.
139
+ *
140
+ * @version 2.7.0
141
+ */
142
  function wcj_custom_doc_number( $atts ) {
143
+ $invoice_type_id = ( 1 == $atts['doc_nr'] ) ? 'custom_doc' : 'custom_doc' . '_' . $atts['doc_nr'];
144
+ return wcj_get_invoice_number( $atts['order_id'], $invoice_type_id );
145
  }
146
+
147
  }
148
 
149
  endif;
includes/shortcodes/class-wcj-order-items-shortcodes.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Order Items Shortcodes class.
6
  *
7
- * @version 2.6.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -96,9 +96,11 @@ class WCJ_Order_Items_Shortcodes extends WCJ_Shortcodes {
96
 
97
  /**
98
  * wcj_price_shortcode.
 
 
99
  */
100
  private function wcj_price_shortcode( $raw_price, $atts ) {
101
- return wcj_price( $atts['price_prefix'] . $raw_price, $this->the_order->get_order_currency(), $atts['hide_currency'] );
102
  }
103
 
104
  /**
@@ -232,7 +234,7 @@ class WCJ_Order_Items_Shortcodes extends WCJ_Shortcodes {
232
  /**
233
  * wcj_order_items_table.
234
  *
235
- * @version 2.6.0
236
  */
237
  function wcj_order_items_table( $atts, $content = '' ) {
238
 
@@ -292,54 +294,56 @@ class WCJ_Order_Items_Shortcodes extends WCJ_Shortcodes {
292
  $item_counter++;
293
  // Columns
294
  foreach( $columns as $column ) {
 
295
  if ( false !== ( $pos = strpos( $column, '=' ) ) ) {
296
  $column_param = substr( $column, $pos + 1 );
297
  $column = substr( $column, 0, $pos );
298
  }
 
299
  switch ( $column ) {
300
  case 'item_debug':
301
  case 'debug':
302
- $data[ $item_counter ][] = print_r( $item, true );
303
  break;
304
  case 'item_regular_price':
305
  case 'product_regular_price':
306
- $data[ $item_counter ][] = ( is_object( $the_product ) ) ? $this->wcj_price_shortcode( $the_product->get_regular_price(), $atts ) : '';
307
  break;
308
  case 'item_sale_price':
309
  case 'product_sale_price':
310
- $data[ $item_counter ][] = ( is_object( $the_product ) ) ? $this->wcj_price_shortcode( $the_product->get_sale_price(), $atts ) : '';
311
  break;
312
  case 'item_regular_price_multiply_qty':
313
  case 'product_regular_price_multiply_qty':
314
- $data[ $item_counter ][] = ( is_object( $the_product ) ) ? $this->wcj_price_shortcode( $the_product->get_regular_price() * $item['qty'], $atts ) : '';
315
  break;
316
  case 'item_sale_price_multiply_qty':
317
  case 'product_sale_price_multiply_qty':
318
- $data[ $item_counter ][] = ( is_object( $the_product ) ) ? $this->wcj_price_shortcode( $the_product->get_sale_price() * $item['qty'], $atts ) : '';
319
  break;
320
  case 'item_tax_class':
321
  case 'tax_class':
322
- $data[ $item_counter ][] = ( isset( $item['tax_class'] ) ) ? $this->get_tax_class_name( $item['tax_class'] ) : '';
323
  break;
324
  case 'item_number':
325
- $data[ $item_counter ][] = $item_counter;
326
  break;
327
  case 'item_meta':
328
- $data[ $item_counter ][] = wcj_get_order_item_meta_info( $item_id, null, $this->the_order, false, $the_product );
329
  break;
330
  case 'item_name':
331
  case 'product_name': // "product_" because of possible variation
332
  if ( true === $item['is_custom'] ) {
333
- $data[ $item_counter ][] = $item['name'];
334
  } else {
335
  $the_item_title = $item['name'];
336
  // Variation (if needed)
337
  if ( 0 != $item['variation_id'] && ! in_array( 'item_variation', $columns ) ) {
338
  $the_item_title .= '<div style="' . $atts['style_item_name_variation'] . '">';
339
  if ( 'yes' === $atts['variation_as_metadata'] ) {
340
- $the_item_title .= wcj_get_order_item_meta_info( $item_id, null, $this->the_order, true, $the_product );
341
  } elseif ( is_object( $the_product ) && $the_product->is_type( 'variation' ) ) {
342
- $the_item_title .= str_replace( 'pa_', '', urldecode( $the_product->get_formatted_variation_attributes( true ) ) ); // todo - do we need pa_ replacement?
343
  }
344
  $the_item_title .= '</div>';
345
  }
@@ -348,7 +352,7 @@ class WCJ_Order_Items_Shortcodes extends WCJ_Shortcodes {
348
  if ( isset( $item['tmcartepo_data'] ) ) {
349
  $options = unserialize( $item['tmcartepo_data'] );
350
  $options_prices = array();
351
- // $order_currency = $the_order->get_order_currency();
352
  foreach ( $options as $option ) {
353
  /* if ( isset( $option['price_per_currency'][ $order_currency ] ) ) {
354
  $options_prices[] = $this->wcj_price_shortcode( $option['price_per_currency'][ $order_currency ], $atts );
@@ -369,153 +373,161 @@ class WCJ_Order_Items_Shortcodes extends WCJ_Shortcodes {
369
  }
370
  $the_item_title .= '<div style="' . $atts['style_item_name_variation'] . '">' . implode( '<br>', $options_prices ) . '</div>';
371
  }
372
- $data[ $item_counter ][] = $the_item_title;
373
  }
374
  break;
375
  case 'item_product_input_fields':
376
- $data[ $item_counter ][] = wcj_get_product_input_fields( $item );
377
  break;
378
  case 'item_key':
379
  if ( isset( $column_param ) && '' != $column_param && isset( $item[ $column_param ] ) ) {
380
  $maybe_unserialized_value = maybe_unserialize( $item[ $column_param ] );
381
  if ( is_array( $maybe_unserialized_value ) ) {
382
- $data[ $item_counter ][] = isset( $maybe_unserialized_value['name'] ) ? $maybe_unserialized_value['name'] : '';
383
  } else {
384
- $data[ $item_counter ][] = $maybe_unserialized_value;
385
  }
386
  } else {
387
- $data[ $item_counter ][] = '';
388
  }
389
  break;
390
  case 'item_attribute':
391
  case 'product_attribute':
392
  if ( isset( $column_param ) && '' != $column_param && is_object( $the_product ) ) {
393
- $data[ $item_counter ][] = $the_product->get_attribute( $column_param );
394
  } else {
395
- $data[ $item_counter ][] = '';
396
  }
397
  break;
398
  case 'item_excerpt':
399
  case 'product_excerpt':
400
  if ( true === $item['is_custom'] ) {
401
- $data[ $item_counter ][] = '';
402
  } else {
403
  global $post;
404
  $post = get_post( $item['product_id'] );
405
  setup_postdata( $post );
406
  $the_excerpt = get_the_excerpt();
407
  wp_reset_postdata();
408
- $data[ $item_counter ][] = $the_excerpt;
409
  }
410
  break;
411
  case 'item_short_description':
412
  case 'product_short_description':
413
- $data[ $item_counter ][] = ( true === $item['is_custom'] ) ? '' : $this->the_product->post->post_excerpt;
414
  break;
415
  case 'item_variation':
416
  case 'product_variation':
417
  if ( 0 != $item['variation_id'] ) {
418
  if ( 'yes' === $atts['variation_as_metadata'] ) {
419
- $data[ $item_counter ][] = wcj_get_order_item_meta_info( $item_id, null, $this->the_order, true, $the_product );
420
  } elseif ( is_object( $the_product ) && $the_product->is_type( 'variation' ) ) {
421
- $data[ $item_counter ][] = str_replace( 'pa_', '', urldecode( $the_product->get_formatted_variation_attributes( true ) ) ); // todo - do we need pa_ replacement?
422
  }
423
  } else {
424
- $data[ $item_counter ][] = '';
425
  }
426
  break;
427
  case 'item_thumbnail':
428
  case 'product_thumbnail':
429
- // $data[ $item_counter ][] = $the_product->get_image();
430
  $image_id = ( true === $item['is_custom'] || ! is_object( $the_product ) ) ? 0 : $the_product->get_image_id();
431
  $image_src = ( 0 != $image_id ) ? wp_get_attachment_image_src( $image_id ) : wc_placeholder_img_src();
432
  if ( is_array( $image_src ) ) $image_src = $image_src[0];
433
  $maybe_width = ( 0 != $atts['product_image_width'] ) ? ' width="' . $atts['product_image_width'] . '"' : '';
434
  $maybe_height = ( 0 != $atts['product_image_height'] ) ? ' height="' . $atts['product_image_height'] . '"' : '';
435
- $data[ $item_counter ][] = '<img src="' . $image_src . '"' . $maybe_width . $maybe_height . '>';
436
  break;
437
  case 'item_sku':
438
  case 'product_sku':
439
- $data[ $item_counter ][] = ( true === $item['is_custom'] || ! is_object( $the_product ) ) ? '' : $the_product->get_sku();
440
  break;
441
  case 'item_quantity':
442
- $data[ $item_counter ][] = $atts['quantity_prefix'] . $item['qty'];
443
  break;
444
  case 'item_total_tax_excl':
445
- $data[ $item_counter ][] = $this->wcj_price_shortcode( $the_order->get_item_total( $item, false, true ), $atts );
446
  break;
447
  case 'item_total_tax_incl':
448
- $data[ $item_counter ][] = $this->wcj_price_shortcode( $the_order->get_item_total( $item, true, true ), $atts );
449
  break;
450
  case 'item_subtotal_tax_excl':
451
- $data[ $item_counter ][] = $this->wcj_price_shortcode( $the_order->get_item_subtotal( $item, false, true ), $atts );
452
  break;
453
  case 'item_subtotal_tax_incl':
454
- $data[ $item_counter ][] = $this->wcj_price_shortcode( $the_order->get_item_subtotal( $item, true, true ), $atts );
455
  break;
456
  case 'item_tax':
457
- $data[ $item_counter ][] = $this->wcj_price_shortcode( $the_order->get_item_tax( $item, true ), $atts );
458
  break;
459
  case 'line_total_tax_excl':
460
  $line_total_tax_excl = $the_order->get_line_total( $item, false, true );
461
  $line_total_tax_excl = apply_filters( 'wcj_line_total_tax_excl', $line_total_tax_excl, $the_order );
462
- $data[ $item_counter ][] = $this->wcj_price_shortcode( $line_total_tax_excl, $atts );
463
  break;
464
  case 'line_total_tax_incl':
465
- $data[ $item_counter ][] = $this->wcj_price_shortcode( $the_order->get_line_total( $item, true, true ), $atts );
466
  break;
467
  case 'line_subtotal_tax_excl':
468
- $data[ $item_counter ][] = $this->wcj_price_shortcode( $the_order->get_line_subtotal( $item, false, true ), $atts );
469
  break;
470
  case 'line_subtotal_tax_incl':
471
- $data[ $item_counter ][] = $this->wcj_price_shortcode( $the_order->get_line_subtotal( $item, true, true ), $atts );
472
  break;
473
  case 'line_tax':
474
  $line_tax = $the_order->get_line_tax( $item );
475
  $line_tax = apply_filters( 'wcj_line_tax', $line_tax, $the_order );
476
- $data[ $item_counter ][] = $this->wcj_price_shortcode( $line_tax, $atts );
477
  break;
478
  case 'line_subtax':
479
  $line_subtax = $the_order->get_line_subtotal( $item, true, false ) - $the_order->get_line_subtotal( $item, false, false );
480
- $data[ $item_counter ][] = $this->wcj_price_shortcode( $line_subtax, $atts );
481
  break;
482
  case 'item_tax_percent':
483
  case 'line_tax_percent':
484
  $item_total = $the_order->get_item_total( $item, false, /* true */ false );
485
  $item_tax_percent = ( 0 != $item_total ) ? $the_order->get_item_tax( $item, false ) / $item_total * 100 : 0;
486
  $item_tax_percent = apply_filters( 'wcj_line_tax_percent', $item_tax_percent, $the_order );
487
- $data[ $item_counter ][] = sprintf( $atts['tax_percent_format'], $item_tax_percent );
488
  /* $tax_labels = array();
489
  foreach ( $the_order->get_taxes() as $the_tax ) {
490
  $tax_labels[] = $the_tax['label'];
491
  }
492
- $data[ $item_counter ][] = implode( ', ', $tax_labels ); */
493
  break;
494
  /* case 'line_tax_percent':
495
  $line_total = $the_order->get_line_total( $item, false, true );
496
  $line_tax_percent = ( 0 != $line_total ) ? $the_order->get_line_tax( $item ) / $line_total * 100 : 0;
497
  $line_tax_percent = apply_filters( 'wcj_line_tax_percent', $line_tax_percent, $the_order );
498
- $data[ $item_counter ][] = sprintf( $atts['tax_percent_format'], $line_tax_percent );
499
  break; */
500
  case 'item_weight':
501
  case 'product_weight':
502
- $data[ $item_counter ][] = ( true === $item['is_custom'] || ! is_object( $the_product ) ) ? '' : $the_product->get_weight();
503
  break;
504
  case 'item_width':
505
  case 'product_width':
506
- $data[ $item_counter ][] = ( true === $item['is_custom'] || ! is_object( $the_product ) ) ? '' : $the_product->get_width();
507
  break;
508
  case 'item_height':
509
  case 'product_height':
510
- $data[ $item_counter ][] = ( true === $item['is_custom'] || ! is_object( $the_product ) ) ? '' : $the_product->get_height();
511
  break;
512
  case 'item_length':
513
  case 'product_length':
514
- $data[ $item_counter ][] = ( true === $item['is_custom'] || ! is_object( $the_product ) ) ? '' : $the_product->get_length();
515
  break;
516
  default:
517
- $data[ $item_counter ][] = ''; // $column;
518
  }
 
 
 
 
 
 
 
 
519
  }
520
  }
521
 
4
  *
5
  * The WooCommerce Jetpack Order Items Shortcodes class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
96
 
97
  /**
98
  * wcj_price_shortcode.
99
+ *
100
+ * @version 2.7.0
101
  */
102
  private function wcj_price_shortcode( $raw_price, $atts ) {
103
+ return wcj_price( $atts['price_prefix'] . $raw_price, wcj_get_order_currency( $this->the_order ), $atts['hide_currency'] );
104
  }
105
 
106
  /**
234
  /**
235
  * wcj_order_items_table.
236
  *
237
+ * @version 2.7.0
238
  */
239
  function wcj_order_items_table( $atts, $content = '' ) {
240
 
294
  $item_counter++;
295
  // Columns
296
  foreach( $columns as $column ) {
297
+ $column_param = '';
298
  if ( false !== ( $pos = strpos( $column, '=' ) ) ) {
299
  $column_param = substr( $column, $pos + 1 );
300
  $column = substr( $column, 0, $pos );
301
  }
302
+ $cell_data = '';
303
  switch ( $column ) {
304
  case 'item_debug':
305
  case 'debug':
306
+ $cell_data = print_r( $item, true );
307
  break;
308
  case 'item_regular_price':
309
  case 'product_regular_price':
310
+ $cell_data = ( is_object( $the_product ) ) ? $this->wcj_price_shortcode( $the_product->get_regular_price(), $atts ) : '';
311
  break;
312
  case 'item_sale_price':
313
  case 'product_sale_price':
314
+ $cell_data = ( is_object( $the_product ) ) ? $this->wcj_price_shortcode( $the_product->get_sale_price(), $atts ) : '';
315
  break;
316
  case 'item_regular_price_multiply_qty':
317
  case 'product_regular_price_multiply_qty':
318
+ $cell_data = ( is_object( $the_product ) ) ? $this->wcj_price_shortcode( $the_product->get_regular_price() * $item['qty'], $atts ) : '';
319
  break;
320
  case 'item_sale_price_multiply_qty':
321
  case 'product_sale_price_multiply_qty':
322
+ $cell_data = ( is_object( $the_product ) ) ? $this->wcj_price_shortcode( $the_product->get_sale_price() * $item['qty'], $atts ) : '';
323
  break;
324
  case 'item_tax_class':
325
  case 'tax_class':
326
+ $cell_data = ( isset( $item['tax_class'] ) ) ? $this->get_tax_class_name( $item['tax_class'] ) : '';
327
  break;
328
  case 'item_number':
329
+ $cell_data = $item_counter;
330
  break;
331
  case 'item_meta':
332
+ $cell_data = wcj_get_order_item_meta_info( $item_id, $item, $this->the_order, false, $the_product );
333
  break;
334
  case 'item_name':
335
  case 'product_name': // "product_" because of possible variation
336
  if ( true === $item['is_custom'] ) {
337
+ $cell_data = $item['name'];
338
  } else {
339
  $the_item_title = $item['name'];
340
  // Variation (if needed)
341
  if ( 0 != $item['variation_id'] && ! in_array( 'item_variation', $columns ) ) {
342
  $the_item_title .= '<div style="' . $atts['style_item_name_variation'] . '">';
343
  if ( 'yes' === $atts['variation_as_metadata'] ) {
344
+ $the_item_title .= wcj_get_order_item_meta_info( $item_id, $item, $this->the_order, true, $the_product );
345
  } elseif ( is_object( $the_product ) && $the_product->is_type( 'variation' ) ) {
346
+ $the_item_title .= str_replace( 'pa_', '', urldecode( wcj_get_product_formatted_variation( $the_product, true ) ) ); // todo - do we need pa_ replacement?
347
  }
348
  $the_item_title .= '</div>';
349
  }
352
  if ( isset( $item['tmcartepo_data'] ) ) {
353
  $options = unserialize( $item['tmcartepo_data'] );
354
  $options_prices = array();
355
+ // $order_currency = wcj_get_order_currency( $the_order );
356
  foreach ( $options as $option ) {
357
  /* if ( isset( $option['price_per_currency'][ $order_currency ] ) ) {
358
  $options_prices[] = $this->wcj_price_shortcode( $option['price_per_currency'][ $order_currency ], $atts );
373
  }
374
  $the_item_title .= '<div style="' . $atts['style_item_name_variation'] . '">' . implode( '<br>', $options_prices ) . '</div>';
375
  }
376
+ $cell_data = $the_item_title;
377
  }
378
  break;
379
  case 'item_product_input_fields':
380
+ $cell_data = wcj_get_product_input_fields( $item );
381
  break;
382
  case 'item_key':
383
  if ( isset( $column_param ) && '' != $column_param && isset( $item[ $column_param ] ) ) {
384
  $maybe_unserialized_value = maybe_unserialize( $item[ $column_param ] );
385
  if ( is_array( $maybe_unserialized_value ) ) {
386
+ $cell_data = isset( $maybe_unserialized_value['name'] ) ? $maybe_unserialized_value['name'] : '';
387
  } else {
388
+ $cell_data = $maybe_unserialized_value;
389
  }
390
  } else {
391
+ $cell_data = '';
392
  }
393
  break;
394
  case 'item_attribute':
395
  case 'product_attribute':
396
  if ( isset( $column_param ) && '' != $column_param && is_object( $the_product ) ) {
397
+ $cell_data = $the_product->get_attribute( $column_param );
398
  } else {
399
+ $cell_data = '';
400
  }
401
  break;
402
  case 'item_excerpt':
403
  case 'product_excerpt':
404
  if ( true === $item['is_custom'] ) {
405
+ $cell_data = '';
406
  } else {
407
  global $post;
408
  $post = get_post( $item['product_id'] );
409
  setup_postdata( $post );
410
  $the_excerpt = get_the_excerpt();
411
  wp_reset_postdata();
412
+ $cell_data = $the_excerpt;
413
  }
414
  break;
415
  case 'item_short_description':
416
  case 'product_short_description':
417
+ $cell_data = ( true === $item['is_custom'] ) ? '' : ( WCJ_IS_WC_VERSION_BELOW_3 ? $the_product->post->post_excerpt : $the_product->get_short_description() );
418
  break;
419
  case 'item_variation':
420
  case 'product_variation':
421
  if ( 0 != $item['variation_id'] ) {
422
  if ( 'yes' === $atts['variation_as_metadata'] ) {
423
+ $cell_data = wcj_get_order_item_meta_info( $item_id, $item, $this->the_order, true, $the_product );
424
  } elseif ( is_object( $the_product ) && $the_product->is_type( 'variation' ) ) {
425
+ $cell_data = str_replace( 'pa_', '', urldecode( wcj_get_product_formatted_variation( $the_product, true ) ) ); // todo - do we need pa_ replacement?
426
  }
427
  } else {
428
+ $cell_data = '';
429
  }
430
  break;
431
  case 'item_thumbnail':
432
  case 'product_thumbnail':
433
+ // $cell_data = $the_product->get_image();
434
  $image_id = ( true === $item['is_custom'] || ! is_object( $the_product ) ) ? 0 : $the_product->get_image_id();
435
  $image_src = ( 0 != $image_id ) ? wp_get_attachment_image_src( $image_id ) : wc_placeholder_img_src();
436
  if ( is_array( $image_src ) ) $image_src = $image_src[0];
437
  $maybe_width = ( 0 != $atts['product_image_width'] ) ? ' width="' . $atts['product_image_width'] . '"' : '';
438
  $maybe_height = ( 0 != $atts['product_image_height'] ) ? ' height="' . $atts['product_image_height'] . '"' : '';
439
+ $cell_data = '<img src="' . $image_src . '"' . $maybe_width . $maybe_height . '>';
440
  break;
441
  case 'item_sku':
442
  case 'product_sku':
443
+ $cell_data = ( true === $item['is_custom'] || ! is_object( $the_product ) ) ? '' : $the_product->get_sku();
444
  break;
445
  case 'item_quantity':
446
+ $cell_data = $atts['quantity_prefix'] . $item['qty'];
447
  break;
448
  case 'item_total_tax_excl':
449
+ $cell_data = $this->wcj_price_shortcode( $the_order->get_item_total( $item, false, true ), $atts );
450
  break;
451
  case 'item_total_tax_incl':
452
+ $cell_data = $this->wcj_price_shortcode( $the_order->get_item_total( $item, true, true ), $atts );
453
  break;
454
  case 'item_subtotal_tax_excl':
455
+ $cell_data = $this->wcj_price_shortcode( $the_order->get_item_subtotal( $item, false, true ), $atts );
456
  break;
457
  case 'item_subtotal_tax_incl':
458
+ $cell_data = $this->wcj_price_shortcode( $the_order->get_item_subtotal( $item, true, true ), $atts );
459
  break;
460
  case 'item_tax':
461
+ $cell_data = $this->wcj_price_shortcode( $the_order->get_item_tax( $item, true ), $atts );
462
  break;
463
  case 'line_total_tax_excl':
464
  $line_total_tax_excl = $the_order->get_line_total( $item, false, true );
465
  $line_total_tax_excl = apply_filters( 'wcj_line_total_tax_excl', $line_total_tax_excl, $the_order );
466
+ $cell_data = $this->wcj_price_shortcode( $line_total_tax_excl, $atts );
467
  break;
468
  case 'line_total_tax_incl':
469
+ $cell_data = $this->wcj_price_shortcode( $the_order->get_line_total( $item, true, true ), $atts );
470
  break;
471
  case 'line_subtotal_tax_excl':
472
+ $cell_data = $this->wcj_price_shortcode( $the_order->get_line_subtotal( $item, false, true ), $atts );
473
  break;
474
  case 'line_subtotal_tax_incl':
475
+ $cell_data = $this->wcj_price_shortcode( $the_order->get_line_subtotal( $item, true, true ), $atts );
476
  break;
477
  case 'line_tax':
478
  $line_tax = $the_order->get_line_tax( $item );
479
  $line_tax = apply_filters( 'wcj_line_tax', $line_tax, $the_order );
480
+ $cell_data = $this->wcj_price_shortcode( $line_tax, $atts );
481
  break;
482
  case 'line_subtax':
483
  $line_subtax = $the_order->get_line_subtotal( $item, true, false ) - $the_order->get_line_subtotal( $item, false, false );
484
+ $cell_data = $this->wcj_price_shortcode( $line_subtax, $atts );
485
  break;
486
  case 'item_tax_percent':
487
  case 'line_tax_percent':
488
  $item_total = $the_order->get_item_total( $item, false, /* true */ false );
489
  $item_tax_percent = ( 0 != $item_total ) ? $the_order->get_item_tax( $item, false ) / $item_total * 100 : 0;
490
  $item_tax_percent = apply_filters( 'wcj_line_tax_percent', $item_tax_percent, $the_order );
491
+ $cell_data = sprintf( $atts['tax_percent_format'], $item_tax_percent );
492
  /* $tax_labels = array();
493
  foreach ( $the_order->get_taxes() as $the_tax ) {
494
  $tax_labels[] = $the_tax['label'];
495
  }
496
+ $cell_data = implode( ', ', $tax_labels ); */
497
  break;
498
  /* case 'line_tax_percent':
499
  $line_total = $the_order->get_line_total( $item, false, true );
500
  $line_tax_percent = ( 0 != $line_total ) ? $the_order->get_line_tax( $item ) / $line_total * 100 : 0;
501
  $line_tax_percent = apply_filters( 'wcj_line_tax_percent', $line_tax_percent, $the_order );
502
+ $cell_data = sprintf( $atts['tax_percent_format'], $line_tax_percent );
503
  break; */
504
  case 'item_weight':
505
  case 'product_weight':
506
+ $cell_data = ( true === $item['is_custom'] || ! is_object( $the_product ) ) ? '' : $the_product->get_weight();
507
  break;
508
  case 'item_width':
509
  case 'product_width':
510
+ $cell_data = ( true === $item['is_custom'] || ! is_object( $the_product ) ) ? '' : $the_product->get_width();
511
  break;
512
  case 'item_height':
513
  case 'product_height':
514
+ $cell_data = ( true === $item['is_custom'] || ! is_object( $the_product ) ) ? '' : $the_product->get_height();
515
  break;
516
  case 'item_length':
517
  case 'product_length':
518
+ $cell_data = ( true === $item['is_custom'] || ! is_object( $the_product ) ) ? '' : $the_product->get_length();
519
  break;
520
  default:
521
+ $cell_data = ''; // $column;
522
  }
523
+ $data[ $item_counter ][] = apply_filters( 'wcj_pdf_invoicing_cell_data', $cell_data, array(
524
+ 'column' => $column,
525
+ 'column_param' => $column_param,
526
+ 'item' => $item,
527
+ 'item_id' => $item_id,
528
+ 'item_counter' => $item_counter,
529
+ 'product' => $the_product,
530
+ ) );
531
  }
532
  }
533
 
includes/shortcodes/class-wcj-orders-shortcodes.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Orders Shortcodes class.
6
  *
7
- * @version 2.6.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -17,12 +17,13 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
17
  /**
18
  * Constructor.
19
  *
20
- * @version 2.6.0
21
  */
22
  public function __construct() {
23
 
24
  $this->the_shortcodes = array(
25
  'wcj_order_status',
 
26
  'wcj_order_date',
27
  'wcj_order_time',
28
  'wcj_order_number',
@@ -82,29 +83,31 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
82
  /**
83
  * add_extra_atts.
84
  *
85
- * @version 2.6.0
86
  */
87
  function add_extra_atts( $atts ) {
88
  $modified_atts = array_merge( array(
89
- 'order_id' => 0,
90
- 'hide_currency' => 'no',
91
- 'excl_tax' => 'no',
92
- 'date_format' => get_option( 'date_format' ),
93
- 'time_format' => get_option( 'time_format' ),
94
- 'hide_if_zero' => 'no',
95
- 'field_id' => '',
96
- 'name' => '',
97
- 'round_by_line' => 'no',
98
- 'whole' => __( 'Dollars', 'woocommerce-jetpack' ),
99
- 'decimal' => __( 'Cents', 'woocommerce-jetpack' ),
100
- 'precision' => get_option( 'woocommerce_price_num_decimals', 2 ),
101
- 'lang' => 'EN',
102
- 'unique_only' => 'no',
103
- 'function_name' => '',
104
- 'sep' => ', ',
105
- 'item_number' => 'all',
106
- 'field' => 'name',
107
- 'order_user_roles' => '',
 
 
108
  ), $atts );
109
 
110
  return $modified_atts;
@@ -133,12 +136,12 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
133
  /**
134
  * extra_check.
135
  *
136
- * @version 2.6.0
137
  * @since 2.6.0
138
  */
139
  function extra_check( $atts ) {
140
  if ( '' != $atts['order_user_roles'] ) {
141
- $user_info = get_userdata( $this->the_order->customer_user );
142
  $user_roles = $user_info->roles;
143
  $user_roles_to_check = explode( ',', $atts['order_user_roles'] );
144
  foreach ( $user_roles_to_check as $user_role_to_check ) {
@@ -153,30 +156,32 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
153
 
154
  /**
155
  * wcj_price_shortcode.
 
 
156
  */
157
  private function wcj_price_shortcode( $raw_price, $atts ) {
158
- return ( 'yes' === $atts['hide_if_zero'] && 0 == $raw_price ) ? '' : wcj_price( $raw_price, $this->the_order->get_order_currency(), $atts['hide_currency'] );
159
  }
160
 
161
  /**
162
  * wcj_order_customer_user_roles.
163
  *
164
- * @version 2.6.0
165
  * @since 2.6.0
166
  */
167
  function wcj_order_customer_user_roles( $atts ) {
168
- $user_info = get_userdata( $this->the_order->customer_user );
169
  return implode( ', ', $user_info->roles );
170
  }
171
 
172
  /**
173
  * wcj_order_customer_user.
174
  *
175
- * @version 2.6.0
176
  * @since 2.6.0
177
  */
178
  function wcj_order_customer_user( $atts ) {
179
- return $this->the_order->customer_user;
180
  }
181
 
182
  /**
@@ -317,10 +322,11 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
317
 
318
  /**
319
  * wcj_order_payment_method.
 
 
320
  */
321
  function wcj_order_payment_method( $atts ) {
322
- //return $this->the_order->payment_method_title;
323
- return get_post_meta( $this->the_order->id, '_payment_method_title', true );
324
  }
325
 
326
  /**
@@ -436,16 +442,20 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
436
 
437
  /**
438
  * wcj_order_customer_note.
 
 
439
  */
440
  function wcj_order_customer_note( $atts ) {
441
- return $this->the_order->customer_note;
442
  }
443
 
444
  /**
445
  * wcj_order_billing_phone.
 
 
446
  */
447
  function wcj_order_billing_phone( $atts ) {
448
- return $this->the_order->billing_phone;
449
  }
450
 
451
  /**
@@ -493,14 +503,17 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
493
  /**
494
  * wcj_order_items_meta.
495
  *
496
- * @version 2.5.5
497
  * @since 2.5.3
498
  */
499
  function wcj_order_items_meta( $atts ) {
 
 
 
500
  $items_metas = array();
501
  $the_items = $this->the_order->get_items();
502
  foreach ( $the_items as $item_id => $item ) {
503
- $the_meta = $this->the_order->get_item_meta( $item_id, $atts['meta_key'], true );
504
  if ( '' != $the_meta ) {
505
  $items_metas[] = $the_meta;
506
  }
@@ -519,11 +532,11 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
519
  /**
520
  * wcj_order_meta.
521
  *
522
- * @version 2.2.9
523
  * @since 2.2.9
524
  */
525
  function wcj_order_meta( $atts ) {
526
- return get_post_meta( $this->the_order->id, $atts['meta_key'], true );
527
  }
528
 
529
  /**
@@ -571,18 +584,33 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
571
  return $this->the_order->get_status();
572
  }
573
 
 
 
 
 
 
 
 
 
 
 
 
574
  /**
575
  * wcj_order_date.
 
 
576
  */
577
  function wcj_order_date( $atts ) {
578
- return date_i18n( $atts['date_format'], strtotime( $this->the_order->order_date ) );
579
  }
580
 
581
  /**
582
  * wcj_order_time.
 
 
583
  */
584
  function wcj_order_time( $atts ) {
585
- return date_i18n( $atts['time_format'], strtotime( $this->the_order->order_date ) );
586
  }
587
 
588
  /**
@@ -817,9 +845,11 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
817
 
818
  /**
819
  * wcj_order_currency.
 
 
820
  */
821
  function wcj_order_currency( $atts ) {
822
- return $this->the_order->get_order_currency();
823
  }
824
 
825
  /**
4
  *
5
  * The WooCommerce Jetpack Orders Shortcodes class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
17
  /**
18
  * Constructor.
19
  *
20
+ * @version 2.7.0
21
  */
22
  public function __construct() {
23
 
24
  $this->the_shortcodes = array(
25
  'wcj_order_status',
26
+ 'wcj_order_status_label',
27
  'wcj_order_date',
28
  'wcj_order_time',
29
  'wcj_order_number',
83
  /**
84
  * add_extra_atts.
85
  *
86
+ * @version 2.7.0
87
  */
88
  function add_extra_atts( $atts ) {
89
  $modified_atts = array_merge( array(
90
+ 'order_id' => 0,
91
+ 'hide_currency' => 'no',
92
+ 'excl_tax' => 'no',
93
+ 'date_format' => get_option( 'date_format' ),
94
+ 'time_format' => get_option( 'time_format' ),
95
+ 'hide_if_zero' => 'no',
96
+ 'field_id' => '',
97
+ 'name' => '',
98
+ 'round_by_line' => 'no',
99
+ 'whole' => __( 'Dollars', 'woocommerce-jetpack' ),
100
+ 'decimal' => __( 'Cents', 'woocommerce-jetpack' ),
101
+ 'precision' => get_option( 'woocommerce_price_num_decimals', 2 ),
102
+ 'lang' => 'EN',
103
+ 'unique_only' => 'no',
104
+ 'function_name' => '',
105
+ 'sep' => ', ',
106
+ 'item_number' => 'all',
107
+ 'field' => 'name',
108
+ 'order_user_roles' => '',
109
+ 'meta_key' => '',
110
+ 'tax_class' => '',
111
  ), $atts );
112
 
113
  return $modified_atts;
136
  /**
137
  * extra_check.
138
  *
139
+ * @version 2.7.0
140
  * @since 2.6.0
141
  */
142
  function extra_check( $atts ) {
143
  if ( '' != $atts['order_user_roles'] ) {
144
+ $user_info = get_userdata( ( WCJ_IS_WC_VERSION_BELOW_3 ? $this->the_order->customer_user : $this->the_order->get_customer_id() ) );
145
  $user_roles = $user_info->roles;
146
  $user_roles_to_check = explode( ',', $atts['order_user_roles'] );
147
  foreach ( $user_roles_to_check as $user_role_to_check ) {
156
 
157
  /**
158
  * wcj_price_shortcode.
159
+ *
160
+ * @version 2.7.0
161
  */
162
  private function wcj_price_shortcode( $raw_price, $atts ) {
163
+ return ( 'yes' === $atts['hide_if_zero'] && 0 == $raw_price ) ? '' : wcj_price( $raw_price, wcj_get_order_currency( $this->the_order ), $atts['hide_currency'] );
164
  }
165
 
166
  /**
167
  * wcj_order_customer_user_roles.
168
  *
169
+ * @version 2.7.0
170
  * @since 2.6.0
171
  */
172
  function wcj_order_customer_user_roles( $atts ) {
173
+ $user_info = get_userdata( ( WCJ_IS_WC_VERSION_BELOW_3 ? $this->the_order->customer_user : $this->the_order->get_customer_id() ) );
174
  return implode( ', ', $user_info->roles );
175
  }
176
 
177
  /**
178
  * wcj_order_customer_user.
179
  *
180
+ * @version 2.7.0
181
  * @since 2.6.0
182
  */
183
  function wcj_order_customer_user( $atts ) {
184
+ return ( WCJ_IS_WC_VERSION_BELOW_3 ? $this->the_order->customer_user : $this->the_order->get_customer_id() );
185
  }
186
 
187
  /**
322
 
323
  /**
324
  * wcj_order_payment_method.
325
+ *
326
+ * @version 2.7.0
327
  */
328
  function wcj_order_payment_method( $atts ) {
329
+ return get_post_meta( wcj_get_order_id( $this->the_order ), '_payment_method_title', true );
 
330
  }
331
 
332
  /**
442
 
443
  /**
444
  * wcj_order_customer_note.
445
+ *
446
+ * @version 2.7.0
447
  */
448
  function wcj_order_customer_note( $atts ) {
449
+ return ( WCJ_IS_WC_VERSION_BELOW_3 ? $this->the_order->customer_note : $this->the_order->get_customer_note() );
450
  }
451
 
452
  /**
453
  * wcj_order_billing_phone.
454
+ *
455
+ * @version 2.7.0
456
  */
457
  function wcj_order_billing_phone( $atts ) {
458
+ return ( WCJ_IS_WC_VERSION_BELOW_3 ? $this->the_order->billing_phone : $this->the_order->get_billing_phone() );
459
  }
460
 
461
  /**
503
  /**
504
  * wcj_order_items_meta.
505
  *
506
+ * @version 2.7.0
507
  * @since 2.5.3
508
  */
509
  function wcj_order_items_meta( $atts ) {
510
+ if ( '' === $atts['meta_key'] ) {
511
+ return '';
512
+ }
513
  $items_metas = array();
514
  $the_items = $this->the_order->get_items();
515
  foreach ( $the_items as $item_id => $item ) {
516
+ $the_meta = ( WCJ_IS_WC_VERSION_BELOW_3 ? $this->the_order->get_item_meta( $item_id, $atts['meta_key'], true ) : wc_get_order_item_meta( $item_id, $atts['meta_key'], true ) );
517
  if ( '' != $the_meta ) {
518
  $items_metas[] = $the_meta;
519
  }
532
  /**
533
  * wcj_order_meta.
534
  *
535
+ * @version 2.7.0
536
  * @since 2.2.9
537
  */
538
  function wcj_order_meta( $atts ) {
539
+ return ( '' != $atts['meta_key'] ? get_post_meta( wcj_get_order_id( $this->the_order ), $atts['meta_key'], true ) : '' );
540
  }
541
 
542
  /**
584
  return $this->the_order->get_status();
585
  }
586
 
587
+ /**
588
+ * wcj_order_status_label.
589
+ *
590
+ * @version 2.7.0
591
+ * @since 2.7.0
592
+ */
593
+ function wcj_order_status_label( $atts ) {
594
+ $status_object = get_post_status_object( 'wc-' . $this->the_order->get_status() );
595
+ return ( isset( $status_object->label ) ) ? $status_object->label : '';
596
+ }
597
+
598
  /**
599
  * wcj_order_date.
600
+ *
601
+ * @version 2.7.0
602
  */
603
  function wcj_order_date( $atts ) {
604
+ return date_i18n( $atts['date_format'], strtotime( ( WCJ_IS_WC_VERSION_BELOW_3 ? $this->the_order->order_date : $this->the_order->get_date_created() ) ) );
605
  }
606
 
607
  /**
608
  * wcj_order_time.
609
+ *
610
+ * @version 2.7.0
611
  */
612
  function wcj_order_time( $atts ) {
613
+ return date_i18n( $atts['time_format'], strtotime( ( WCJ_IS_WC_VERSION_BELOW_3 ? $this->the_order->order_date : $this->the_order->get_date_created() ) ) );
614
  }
615
 
616
  /**
845
 
846
  /**
847
  * wcj_order_currency.
848
+ *
849
+ * @version 2.7.0
850
  */
851
  function wcj_order_currency( $atts ) {
852
+ return wcj_get_order_currency( $this->the_order );
853
  }
854
 
855
  /**
includes/shortcodes/class-wcj-products-crowdfunding-shortcodes.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Products Crowdfunding Shortcodes class.
6
  *
7
- * @version 2.5.6
8
  * @since 2.5.4
9
  * @author Algoritmika Ltd.
10
  */
@@ -78,7 +78,7 @@ class WCJ_Products_Crowdfunding_Shortcodes extends WCJ_Shortcodes {
78
  /**
79
  * get_product_orders_data.
80
  *
81
- * @version 2.5.6
82
  * @since 2.2.6
83
  */
84
  function get_product_orders_data( $return_value = 'total_orders', $atts ) {
@@ -86,17 +86,17 @@ class WCJ_Products_Crowdfunding_Shortcodes extends WCJ_Shortcodes {
86
  if ( $this->the_product->is_type( 'grouped' ) ) {
87
  $product_ids = $this->the_product->get_children();
88
  } else {
89
- $product_ids = array( $this->the_product->id );
90
  }
91
  global $woocommerce_loop, $post;
92
  $saved_wc_loop = $woocommerce_loop;
93
  $saved_post = $post;
94
- $total_orders = 0;
95
- $total_qty = 0;
96
- $total_sum = 0;
97
- $offset = 0;
98
- $block_size = 256;
99
- $date_query_after = get_post_meta( $this->the_product->id, '_' . 'wcj_crowdfunding_startdate', true );
100
  while( true ) {
101
  $args = array(
102
  'post_type' => 'shop_order',
@@ -189,21 +189,21 @@ class WCJ_Products_Crowdfunding_Shortcodes extends WCJ_Shortcodes {
189
  /**
190
  * wcj_product_crowdfunding_startdate.
191
  *
192
- * @version 2.5.0
193
  * @since 2.2.6
194
  */
195
  function wcj_product_crowdfunding_startdate( $atts ) {
196
- return date_i18n( get_option( 'date_format' ), strtotime( get_post_meta( $this->the_product->id, '_' . 'wcj_crowdfunding_startdate', true ) ) );
197
  }
198
 
199
  /**
200
  * wcj_product_crowdfunding_deadline.
201
  *
202
- * @version 2.5.0
203
  * @since 2.2.6
204
  */
205
  function wcj_product_crowdfunding_deadline( $atts ) {
206
- return date_i18n( get_option( 'date_format' ), strtotime( get_post_meta( $this->the_product->id, '_' . 'wcj_crowdfunding_deadline', true ) ) );
207
  }
208
 
209
  /**
@@ -238,12 +238,12 @@ class WCJ_Products_Crowdfunding_Shortcodes extends WCJ_Shortcodes {
238
  /**
239
  * wcj_product_crowdfunding_time_remaining_progress_bar.
240
  *
241
- * @version 2.5.4
242
  * @since 2.5.0
243
  */
244
  function wcj_product_crowdfunding_time_remaining_progress_bar( $atts ) {
245
- $deadline_seconds = strtotime( get_post_meta( $this->the_product->id, '_' . 'wcj_crowdfunding_deadline', true ) );
246
- $startdate_seconds = strtotime( get_post_meta( $this->the_product->id, '_' . 'wcj_crowdfunding_startdate', true ) );
247
 
248
  $seconds_remaining = $deadline_seconds - current_time( 'timestamp' );
249
  $seconds_total = $deadline_seconds - $startdate_seconds;
@@ -256,22 +256,22 @@ class WCJ_Products_Crowdfunding_Shortcodes extends WCJ_Shortcodes {
256
  /**
257
  * wcj_product_crowdfunding_goal.
258
  *
259
- * @version 2.5.4
260
  * @since 2.2.6
261
  */
262
  function wcj_product_crowdfunding_goal( $atts ) {
263
- $goal = get_post_meta( $this->the_product->id, '_' . 'wcj_crowdfunding_goal_sum', true );
264
  return ( 'yes' === $atts['hide_currency'] ) ? $goal : wc_price( $goal );
265
  }
266
 
267
  /**
268
  * wcj_product_crowdfunding_goal_remaining.
269
  *
270
- * @version 2.5.4
271
  * @since 2.2.6
272
  */
273
  function wcj_product_crowdfunding_goal_remaining( $atts ) {
274
- $goal = get_post_meta( $this->the_product->id, '_' . 'wcj_crowdfunding_goal_sum', true );
275
  $total_orders_sum = $this->get_product_orders_data( 'orders_sum', $atts );
276
  $goal_remaining = $goal - $total_orders_sum;
277
  return ( 'yes' === $atts['hide_currency'] ) ? $goal_remaining : wc_price( $goal_remaining );
@@ -280,12 +280,12 @@ class WCJ_Products_Crowdfunding_Shortcodes extends WCJ_Shortcodes {
280
  /**
281
  * wcj_product_crowdfunding_goal_remaining_progress_bar.
282
  *
283
- * @version 2.5.4
284
  * @since 2.5.0
285
  */
286
  function wcj_product_crowdfunding_goal_remaining_progress_bar( $atts ) {
287
  $current_value = $this->get_product_orders_data( 'orders_sum', $atts );
288
- $max_value = get_post_meta( $this->the_product->id, '_' . 'wcj_crowdfunding_goal_sum', true );
289
  return '<progress value="' . $current_value . '" max="' . $max_value . '"></progress>';
290
  }
291
 
4
  *
5
  * The WooCommerce Jetpack Products Crowdfunding Shortcodes class.
6
  *
7
+ * @version 2.7.0
8
  * @since 2.5.4
9
  * @author Algoritmika Ltd.
10
  */
78
  /**
79
  * get_product_orders_data.
80
  *
81
+ * @version 2.7.0
82
  * @since 2.2.6
83
  */
84
  function get_product_orders_data( $return_value = 'total_orders', $atts ) {
86
  if ( $this->the_product->is_type( 'grouped' ) ) {
87
  $product_ids = $this->the_product->get_children();
88
  } else {
89
+ $product_ids = array( wcj_get_product_id_or_variation_parent_id( $this->the_product ) );
90
  }
91
  global $woocommerce_loop, $post;
92
  $saved_wc_loop = $woocommerce_loop;
93
  $saved_post = $post;
94
+ $total_orders = 0;
95
+ $total_qty = 0;
96
+ $total_sum = 0;
97
+ $offset = 0;
98
+ $block_size = 256;
99
+ $date_query_after = get_post_meta( wcj_get_product_id_or_variation_parent_id( $this->the_product ), '_' . 'wcj_crowdfunding_startdate', true );
100
  while( true ) {
101
  $args = array(
102
  'post_type' => 'shop_order',
189
  /**
190
  * wcj_product_crowdfunding_startdate.
191
  *
192
+ * @version 2.7.0
193
  * @since 2.2.6
194
  */
195
  function wcj_product_crowdfunding_startdate( $atts ) {
196
+ return date_i18n( get_option( 'date_format' ), strtotime( get_post_meta( wcj_get_product_id_or_variation_parent_id( $this->the_product ), '_' . 'wcj_crowdfunding_startdate', true ) ) );
197
  }
198
 
199
  /**
200
  * wcj_product_crowdfunding_deadline.
201
  *
202
+ * @version 2.7.0
203
  * @since 2.2.6
204
  */
205
  function wcj_product_crowdfunding_deadline( $atts ) {
206
+ return date_i18n( get_option( 'date_format' ), strtotime( get_post_meta( wcj_get_product_id_or_variation_parent_id( $this->the_product ), '_' . 'wcj_crowdfunding_deadline', true ) ) );
207
  }
208
 
209
  /**
238
  /**
239
  * wcj_product_crowdfunding_time_remaining_progress_bar.
240
  *
241
+ * @version 2.7.0
242
  * @since 2.5.0
243
  */
244
  function wcj_product_crowdfunding_time_remaining_progress_bar( $atts ) {
245
+ $deadline_seconds = strtotime( get_post_meta( wcj_get_product_id_or_variation_parent_id( $this->the_product ), '_' . 'wcj_crowdfunding_deadline', true ) );
246
+ $startdate_seconds = strtotime( get_post_meta( wcj_get_product_id_or_variation_parent_id( $this->the_product ), '_' . 'wcj_crowdfunding_startdate', true ) );
247
 
248
  $seconds_remaining = $deadline_seconds - current_time( 'timestamp' );
249
  $seconds_total = $deadline_seconds - $startdate_seconds;
256
  /**
257
  * wcj_product_crowdfunding_goal.
258
  *
259
+ * @version 2.7.0
260
  * @since 2.2.6
261
  */
262
  function wcj_product_crowdfunding_goal( $atts ) {
263
+ $goal = get_post_meta( wcj_get_product_id_or_variation_parent_id( $this->the_product ), '_' . 'wcj_crowdfunding_goal_sum', true );
264
  return ( 'yes' === $atts['hide_currency'] ) ? $goal : wc_price( $goal );
265
  }
266
 
267
  /**
268
  * wcj_product_crowdfunding_goal_remaining.
269
  *
270
+ * @version 2.7.0
271
  * @since 2.2.6
272
  */
273
  function wcj_product_crowdfunding_goal_remaining( $atts ) {
274
+ $goal = get_post_meta( wcj_get_product_id_or_variation_parent_id( $this->the_product ), '_' . 'wcj_crowdfunding_goal_sum', true );
275
  $total_orders_sum = $this->get_product_orders_data( 'orders_sum', $atts );
276
  $goal_remaining = $goal - $total_orders_sum;
277
  return ( 'yes' === $atts['hide_currency'] ) ? $goal_remaining : wc_price( $goal_remaining );
280
  /**
281
  * wcj_product_crowdfunding_goal_remaining_progress_bar.
282
  *
283
+ * @version 2.7.0
284
  * @since 2.5.0
285
  */
286
  function wcj_product_crowdfunding_goal_remaining_progress_bar( $atts ) {
287
  $current_value = $this->get_product_orders_data( 'orders_sum', $atts );
288
+ $max_value = get_post_meta( wcj_get_product_id_or_variation_parent_id( $this->the_product ), '_' . 'wcj_crowdfunding_goal_sum', true );
289
  return '<progress value="' . $current_value . '" max="' . $max_value . '"></progress>';
290
  }
291
 
includes/shortcodes/class-wcj-products-shortcodes.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Products Shortcodes class.
6
  *
7
- * @version 2.6.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -17,7 +17,7 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
17
  /**
18
  * Constructor.
19
  *
20
- * @version 2.6.0
21
  */
22
  public function __construct() {
23
 
@@ -28,6 +28,7 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
28
  'wcj_product_author_link_all_posts',
29
  'wcj_product_image',
30
  'wcj_product_image_url',
 
31
  'wcj_product_url',
32
  'wcj_product_price',
33
  'wcj_product_wholesale_price_table', // WooCommerce Wholesale Price
@@ -69,6 +70,7 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
69
  $this->the_atts = array(
70
  'product_id' => 0,
71
  'image_size' => 'shop_thumbnail',
 
72
  'multiply_by' => '',
73
  'hide_currency' => 'no',
74
  'excerpt_length' => 0, // deprecated
@@ -310,7 +312,7 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
310
  /**
311
  * get_product_price_including_or_excluding_tax.
312
  *
313
- * @version 2.5.7
314
  * @since 2.5.7
315
  */
316
  function get_product_price_including_or_excluding_tax( $atts, $including_or_excluding ) {
@@ -324,11 +326,11 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
324
  $min_variation_product = wc_get_product( $min_product_id );
325
  $max_variation_product = wc_get_product( $max_product_id );
326
  if ( 'including' === $including_or_excluding ) {
327
- $min = $min_variation_product->get_price_including_tax();
328
- $max = $max_variation_product->get_price_including_tax();
329
  } else { // 'excluding'
330
- $min = $min_variation_product->get_price_excluding_tax();
331
- $max = $max_variation_product->get_price_excluding_tax();
332
  }
333
  if ( 0 != $atts['multiply_by'] && is_numeric( $atts['multiply_by'] ) ) {
334
  $min = $min * $atts['multiply_by'];
@@ -343,9 +345,9 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
343
  } else {
344
  // Simple etc.
345
  if ( 'including' === $including_or_excluding ) {
346
- $the_price = $this->the_product->get_price_including_tax();
347
  } else { // 'excluding'
348
- $the_price = $this->the_product->get_price_excluding_tax();
349
  }
350
  if ( 0 != $atts['multiply_by'] && is_numeric( $atts['multiply_by'] ) ) {
351
  $the_price = $the_price * $atts['multiply_by'];
@@ -395,13 +397,17 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
395
  /**
396
  * wcj_product_list_attributes.
397
  *
398
- * @version 2.5.4
399
  * @since 2.4.0
400
  */
401
  function wcj_product_list_attributes( $atts ) {
402
  if ( $this->the_product->has_attributes() ) {
403
  ob_start();
404
- $this->the_product->list_attributes();
 
 
 
 
405
  return ob_get_clean();
406
  }
407
  return '';
@@ -441,11 +447,12 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
441
  /**
442
  * wcj_product_categories.
443
  *
444
- * @version 2.4.0
445
  * @since 2.4.0
446
  */
447
  function wcj_product_categories( $atts ) {
448
- return $this->the_product->get_categories();
 
449
  }
450
 
451
  /**
@@ -500,11 +507,11 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
500
  /**
501
  * wcj_product_total_sales.
502
  *
503
- * @version 2.5.4
504
  * @since 2.2.6
505
  */
506
  function wcj_product_total_sales( $atts ) {
507
- $product_custom_fields = get_post_custom( $this->the_product->id );
508
  $total_sales = ( isset( $product_custom_fields['total_sales'][0] ) ) ? $product_custom_fields['total_sales'][0] : '';
509
  if ( 0 != $atts['offset'] ) {
510
  $total_sales += $atts['offset'];
@@ -515,22 +522,25 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
515
  /**
516
  * wcj_product_purchase_price.
517
  *
518
- * @return string
 
 
519
  */
520
  function wcj_product_purchase_price( $atts ) {
521
- $purchase_price = wc_get_product_purchase_price( $the_product->id );
522
  return wc_price( $purchase_price );
523
  }
524
 
525
  /**
526
  * wcj_product_tags.
527
  *
528
- * @return string
 
529
  */
530
  function wcj_product_tags( $atts ) {
531
 
532
  if ( 'yes' === $atts['add_links'] ) {
533
- return $this->the_product->get_tags( $atts['sep'] );
534
  }
535
 
536
  $product_tags = get_the_terms( $atts['product_id'], 'product_tag' );
@@ -589,11 +599,14 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
589
  /**
590
  * Get product meta.
591
  *
592
- * @version 2.5.7
593
  * @since 2.5.7
594
  * @return string
595
  */
596
  function wcj_product_meta( $atts ) {
 
 
 
597
  return get_post_meta( $atts['product_id'], $atts['name'], true );
598
  }
599
 
@@ -640,11 +653,13 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
640
  /**
641
  * wcj_product_wholesale_price_table.
642
  *
643
- * @version 2.5.7
644
  */
645
  function wcj_product_wholesale_price_table( $atts ) {
646
 
647
- if ( ! wcj_is_product_wholesale_enabled( $this->the_product->id ) ) return '';
 
 
648
 
649
  // Check for user role options
650
  $role_option_name_addon = '';
@@ -660,10 +675,10 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
660
  }
661
 
662
  $wholesale_price_levels = array();
663
- if ( wcj_is_product_wholesale_enabled_per_product( $this->the_product->id ) ) {
664
- for ( $i = 1; $i <= apply_filters( 'booster_get_option', 1, get_post_meta( $this->the_product->id, '_' . 'wcj_wholesale_price_levels_number' . $role_option_name_addon, true ) ); $i++ ) {
665
- $level_qty = get_post_meta( $this->the_product->id, '_' . 'wcj_wholesale_price_level_min_qty' . $role_option_name_addon . '_' . $i, true );
666
- $discount = get_post_meta( $this->the_product->id, '_' . 'wcj_wholesale_price_level_discount' . $role_option_name_addon . '_' . $i, true );
667
  $wholesale_price_levels[] = array( 'quantity' => $level_qty, 'discount' => $discount, );
668
  }
669
  } else {
@@ -674,8 +689,8 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
674
  }
675
  }
676
 
677
- $discount_type = ( wcj_is_product_wholesale_enabled_per_product( $this->the_product->id ) )
678
- ? get_post_meta( $this->the_product->id, '_' . 'wcj_wholesale_price_discount_type', true )
679
  : get_option( 'wcj_wholesale_price_discount_type', 'percent' );
680
 
681
  $data_qty = array();
@@ -699,9 +714,8 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
699
  $max_key = key( $prices['price'] );
700
  $min_product = wc_get_product( $min_key );
701
  $max_product = wc_get_product( $max_key );
702
- $get_price_method = 'get_price_' . get_option( 'woocommerce_tax_display_shop' ) . 'uding_tax';
703
- $min = $min_product->$get_price_method();
704
- $max = $max_product->$get_price_method();
705
  $min_original = $min;
706
  $max_original = $max;
707
  if ( 'fixed' === $discount_type ) {
@@ -722,8 +736,7 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
722
  $the_price_original = ( $min_original != $max_original ) ? sprintf( '%s-%s', $min_original, $max_original ) : $min_original;
723
  } else {
724
  // Simple etc.
725
- $get_price_method = 'get_price_' . get_option( 'woocommerce_tax_display_shop' ) . 'uding_tax';
726
- $the_price = $this->the_product->$get_price_method();
727
  $the_price = apply_filters( 'wcj_product_wholesale_price_table_price_before', $the_price, $this->the_product );
728
  $the_price_original = $the_price;
729
  if ( 'price_directly' === $discount_type ) {
@@ -793,12 +806,12 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
793
  /**
794
  * Get product short description.
795
  *
796
- * @version 2.5.7
797
  * @since 2.5.7
798
  * @return string
799
  */
800
  function wcj_product_short_description( $atts ) {
801
- $short_description = $this->the_product->post->post_excerpt;
802
  if ( 'yes' === $atts['apply_filters'] ) {
803
  apply_filters( 'woocommerce_short_description', $short_description );
804
  }
@@ -880,11 +893,28 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
880
  /**
881
  * wcj_product_image_url.
882
  *
883
- * @version 2.5.7
884
  * @since 2.5.7
885
  */
886
  function wcj_product_image_url( $atts ) {
887
- return wcj_get_product_image_url( $this->the_product->id, $atts['image_size'] );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
888
  }
889
 
890
  /**
@@ -900,11 +930,11 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
900
  /**
901
  * wcj_product_categories_names.
902
  *
903
- * @version 2.5.7
904
  * @since 2.5.7
905
  */
906
  function wcj_product_categories_names( $atts ) {
907
- $product_cats = get_the_terms( $this->the_product->id, 'product_cat' );
908
  $cats = array();
909
  if ( ! empty( $product_cats ) && is_array( $product_cats ) ) {
910
  foreach ( $product_cats as $product_cat ) {
@@ -917,11 +947,11 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
917
  /**
918
  * wcj_product_categories_urls.
919
  *
920
- * @version 2.5.7
921
  * @since 2.5.7
922
  */
923
  function wcj_product_categories_urls( $atts ) {
924
- $product_cats = get_the_terms( $this->the_product->id, 'product_cat' );
925
  $cats = array();
926
  if ( ! empty( $product_cats ) && is_array( $product_cats ) ) {
927
  foreach ( $product_cats as $product_cat ) {
4
  *
5
  * The WooCommerce Jetpack Products Shortcodes class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
17
  /**
18
  * Constructor.
19
  *
20
+ * @version 2.7.0
21
  */
22
  public function __construct() {
23
 
28
  'wcj_product_author_link_all_posts',
29
  'wcj_product_image',
30
  'wcj_product_image_url',
31
+ 'wcj_product_gallery_image_url',
32
  'wcj_product_url',
33
  'wcj_product_price',
34
  'wcj_product_wholesale_price_table', // WooCommerce Wholesale Price
70
  $this->the_atts = array(
71
  'product_id' => 0,
72
  'image_size' => 'shop_thumbnail',
73
+ 'image_nr' => 1,
74
  'multiply_by' => '',
75
  'hide_currency' => 'no',
76
  'excerpt_length' => 0, // deprecated
312
  /**
313
  * get_product_price_including_or_excluding_tax.
314
  *
315
+ * @version 2.7.0
316
  * @since 2.5.7
317
  */
318
  function get_product_price_including_or_excluding_tax( $atts, $including_or_excluding ) {
326
  $min_variation_product = wc_get_product( $min_product_id );
327
  $max_variation_product = wc_get_product( $max_product_id );
328
  if ( 'including' === $including_or_excluding ) {
329
+ $min = ( WCJ_IS_WC_VERSION_BELOW_3 ? $min_variation_product->get_price_including_tax() : wc_get_price_including_tax( $min_variation_product ) );
330
+ $max = ( WCJ_IS_WC_VERSION_BELOW_3 ? $max_variation_product->get_price_including_tax() : wc_get_price_including_tax( $max_variation_product ) );
331
  } else { // 'excluding'
332
+ $min = ( WCJ_IS_WC_VERSION_BELOW_3 ? $min_variation_product->get_price_excluding_tax() : wc_get_price_excluding_tax( $min_variation_product ) );
333
+ $max = ( WCJ_IS_WC_VERSION_BELOW_3 ? $max_variation_product->get_price_excluding_tax() : wc_get_price_excluding_tax( $max_variation_product ) );
334
  }
335
  if ( 0 != $atts['multiply_by'] && is_numeric( $atts['multiply_by'] ) ) {
336
  $min = $min * $atts['multiply_by'];
345
  } else {
346
  // Simple etc.
347
  if ( 'including' === $including_or_excluding ) {
348
+ $the_price = ( WCJ_IS_WC_VERSION_BELOW_3 ? $this->the_product->get_price_including_tax() : wc_get_price_including_tax( $this->the_product ) );
349
  } else { // 'excluding'
350
+ $the_price = ( WCJ_IS_WC_VERSION_BELOW_3 ? $this->the_product->get_price_excluding_tax() : wc_get_price_excluding_tax( $this->the_product ) );
351
  }
352
  if ( 0 != $atts['multiply_by'] && is_numeric( $atts['multiply_by'] ) ) {
353
  $the_price = $the_price * $atts['multiply_by'];
397
  /**
398
  * wcj_product_list_attributes.
399
  *
400
+ * @version 2.7.0
401
  * @since 2.4.0
402
  */
403
  function wcj_product_list_attributes( $atts ) {
404
  if ( $this->the_product->has_attributes() ) {
405
  ob_start();
406
+ if ( WCJ_IS_WC_VERSION_BELOW_3 ) {
407
+ $this->the_product->list_attributes();
408
+ } else {
409
+ wc_display_product_attributes( $this->the_product );
410
+ }
411
  return ob_get_clean();
412
  }
413
  return '';
447
  /**
448
  * wcj_product_categories.
449
  *
450
+ * @version 2.7.0
451
  * @since 2.4.0
452
  */
453
  function wcj_product_categories( $atts ) {
454
+ $return = ( WCJ_IS_WC_VERSION_BELOW_3 ) ? $this->the_product->get_categories() : wc_get_product_category_list( $atts['product_id'] );
455
+ return ( false === $return ) ? '' : $return;
456
  }
457
 
458
  /**
507
  /**
508
  * wcj_product_total_sales.
509
  *
510
+ * @version 2.7.0
511
  * @since 2.2.6
512
  */
513
  function wcj_product_total_sales( $atts ) {
514
+ $product_custom_fields = get_post_custom( wcj_get_product_id_or_variation_parent_id( $this->the_product ) );
515
  $total_sales = ( isset( $product_custom_fields['total_sales'][0] ) ) ? $product_custom_fields['total_sales'][0] : '';
516
  if ( 0 != $atts['offset'] ) {
517
  $total_sales += $atts['offset'];
522
  /**
523
  * wcj_product_purchase_price.
524
  *
525
+ * @version 2.7.0
526
+ * @return string
527
+ * @todo maybe just `wcj_get_product_id` instead of `wcj_get_product_id_or_variation_parent_id`
528
  */
529
  function wcj_product_purchase_price( $atts ) {
530
+ $purchase_price = wc_get_product_purchase_price( wcj_get_product_id_or_variation_parent_id( $this->the_product ) );
531
  return wc_price( $purchase_price );
532
  }
533
 
534
  /**
535
  * wcj_product_tags.
536
  *
537
+ * @version 2.7.0
538
+ * @return string
539
  */
540
  function wcj_product_tags( $atts ) {
541
 
542
  if ( 'yes' === $atts['add_links'] ) {
543
+ return ( WCJ_IS_WC_VERSION_BELOW_3 ? $this->the_product->get_tags( $atts['sep'] ) : wc_get_product_tag_list( $atts['product_id'], $atts['sep'] ) );
544
  }
545
 
546
  $product_tags = get_the_terms( $atts['product_id'], 'product_tag' );
599
  /**
600
  * Get product meta.
601
  *
602
+ * @version 2.7.0
603
  * @since 2.5.7
604
  * @return string
605
  */
606
  function wcj_product_meta( $atts ) {
607
+ if ( '' == $atts['name'] ) {
608
+ return '';
609
+ }
610
  return get_post_meta( $atts['product_id'], $atts['name'], true );
611
  }
612
 
653
  /**
654
  * wcj_product_wholesale_price_table.
655
  *
656
+ * @version 2.7.0
657
  */
658
  function wcj_product_wholesale_price_table( $atts ) {
659
 
660
+ $product_id = wcj_get_product_id_or_variation_parent_id( $this->the_product );
661
+
662
+ if ( ! wcj_is_product_wholesale_enabled( $product_id ) ) return '';
663
 
664
  // Check for user role options
665
  $role_option_name_addon = '';
675
  }
676
 
677
  $wholesale_price_levels = array();
678
+ if ( wcj_is_product_wholesale_enabled_per_product( $product_id ) ) {
679
+ for ( $i = 1; $i <= apply_filters( 'booster_get_option', 1, get_post_meta( $product_id, '_' . 'wcj_wholesale_price_levels_number' . $role_option_name_addon, true ) ); $i++ ) {
680
+ $level_qty = get_post_meta( $product_id, '_' . 'wcj_wholesale_price_level_min_qty' . $role_option_name_addon . '_' . $i, true );
681
+ $discount = get_post_meta( $product_id, '_' . 'wcj_wholesale_price_level_discount' . $role_option_name_addon . '_' . $i, true );
682
  $wholesale_price_levels[] = array( 'quantity' => $level_qty, 'discount' => $discount, );
683
  }
684
  } else {
689
  }
690
  }
691
 
692
+ $discount_type = ( wcj_is_product_wholesale_enabled_per_product( $product_id ) )
693
+ ? get_post_meta( $product_id, '_' . 'wcj_wholesale_price_discount_type', true )
694
  : get_option( 'wcj_wholesale_price_discount_type', 'percent' );
695
 
696
  $data_qty = array();
714
  $max_key = key( $prices['price'] );
715
  $min_product = wc_get_product( $min_key );
716
  $max_product = wc_get_product( $max_key );
717
+ $min = wcj_get_product_display_price( $min_product );
718
+ $max = wcj_get_product_display_price( $max_product );
 
719
  $min_original = $min;
720
  $max_original = $max;
721
  if ( 'fixed' === $discount_type ) {
736
  $the_price_original = ( $min_original != $max_original ) ? sprintf( '%s-%s', $min_original, $max_original ) : $min_original;
737
  } else {
738
  // Simple etc.
739
+ $the_price = wcj_get_product_display_price( $this->the_product );
 
740
  $the_price = apply_filters( 'wcj_product_wholesale_price_table_price_before', $the_price, $this->the_product );
741
  $the_price_original = $the_price;
742
  if ( 'price_directly' === $discount_type ) {
806
  /**
807
  * Get product short description.
808
  *
809
+ * @version 2.7.0
810
  * @since 2.5.7
811
  * @return string
812
  */
813
  function wcj_product_short_description( $atts ) {
814
+ $short_description = ( WCJ_IS_WC_VERSION_BELOW_3 ? $this->the_product->post->post_excerpt : $this->the_product->get_short_description() );
815
  if ( 'yes' === $atts['apply_filters'] ) {
816
  apply_filters( 'woocommerce_short_description', $short_description );
817
  }
893
  /**
894
  * wcj_product_image_url.
895
  *
896
+ * @version 2.7.0
897
  * @since 2.5.7
898
  */
899
  function wcj_product_image_url( $atts ) {
900
+ return wcj_get_product_image_url( wcj_get_product_id_or_variation_parent_id( $this->the_product ), $atts['image_size'] );
901
+ }
902
+
903
+ /**
904
+ * wcj_product_gallery_image_url.
905
+ *
906
+ * @version 2.7.0
907
+ * @since 2.7.0
908
+ */
909
+ function wcj_product_gallery_image_url( $atts ) {
910
+ $attachment_ids = ( WCJ_IS_WC_VERSION_BELOW_3 ? $this->the_product->get_gallery_attachment_ids() : $this->the_product->get_gallery_image_ids() );
911
+ if ( $attachment_ids && isset( $attachment_ids[ ( $atts['image_nr'] - 1 ) ] ) ) {
912
+ $props = wc_get_product_attachment_props( $attachment_ids[ ( $atts['image_nr'] - 1 ) ] );
913
+ if ( isset( $props['url'] ) ) {
914
+ return $props['url'];
915
+ }
916
+ }
917
+ return '';
918
  }
919
 
920
  /**
930
  /**
931
  * wcj_product_categories_names.
932
  *
933
+ * @version 2.7.0
934
  * @since 2.5.7
935
  */
936
  function wcj_product_categories_names( $atts ) {
937
+ $product_cats = get_the_terms( wcj_get_product_id_or_variation_parent_id( $this->the_product ), 'product_cat' );
938
  $cats = array();
939
  if ( ! empty( $product_cats ) && is_array( $product_cats ) ) {
940
  foreach ( $product_cats as $product_cat ) {
947
  /**
948
  * wcj_product_categories_urls.
949
  *
950
+ * @version 2.7.0
951
  * @since 2.5.7
952
  */
953
  function wcj_product_categories_urls( $atts ) {
954
+ $product_cats = get_the_terms( wcj_get_product_id_or_variation_parent_id( $this->the_product ), 'product_cat' );
955
  $cats = array();
956
  if ( ! empty( $product_cats ) && is_array( $product_cats ) ) {
957
  foreach ( $product_cats as $product_cat ) {
includes/shortcodes/class-wcj-shortcodes.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Shortcodes class.
6
  *
7
- * @version 2.6.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -59,7 +59,7 @@ class WCJ_Shortcodes {
59
  /**
60
  * wcj_shortcode.
61
  *
62
- * @version 2.6.0
63
  */
64
  function wcj_shortcode( $atts, $content, $shortcode ) {
65
 
@@ -86,6 +86,7 @@ class WCJ_Shortcodes {
86
  'find' => '',
87
  'replace' => '',
88
  'strip_tags' => 'no',
 
89
  );
90
  $atts = array_merge( $global_defaults, $atts );
91
 
@@ -191,9 +192,9 @@ class WCJ_Shortcodes {
191
  if ( 'yes' === $atts['strip_tags'] ) {
192
  $result = strip_tags( $result );
193
  }
194
- return $atts['before'] . $result . $atts['after'];
195
  }
196
- return '';
197
  }
198
 
199
  /**
4
  *
5
  * The WooCommerce Jetpack Shortcodes class.
6
  *
7
+ * @version 2.7.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
59
  /**
60
  * wcj_shortcode.
61
  *
62
+ * @version 2.7.0
63
  */
64
  function wcj_shortcode( $atts, $content, $shortcode ) {
65
 
86
  'find' => '',
87
  'replace' => '',
88
  'strip_tags' => 'no',
89
+ 'on_empty' => '',
90
  );
91
  $atts = array_merge( $global_defaults, $atts );
92
 
192
  if ( 'yes' === $atts['strip_tags'] ) {
193
  $result = strip_tags( $result );
194
  }
195
+ return $atts['before'] . apply_filters( 'wcj_shortcode_result', $result, $atts, $content, $shortcode ) . $atts['after'];
196
  }
197
+ return $atts['on_empty'];
198
  }
199
 
200
  /**
includes/templates/wcj-add-to-cart-variable.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Variable product add to cart - radio inputs
4
  *
5
- * @version 2.4.8
6
  * @since 2.4.8
7
  * @author Algoritmika Ltd.
8
  */
@@ -17,7 +17,7 @@ $attribute_keys = array_keys( $attributes );
17
 
18
  do_action( 'woocommerce_before_add_to_cart_form' ); ?>
19
 
20
- <form class="variations_form cart" method="post" enctype='multipart/form-data' data-product_id="<?php echo absint( $product->id ); ?>" data-product_variations="<?php echo esc_attr( json_encode( $available_variations ) ) ?>">
21
  <?php do_action( 'woocommerce_before_variations_form' ); ?>
22
 
23
  <?php if ( empty( $available_variations ) && false !== $available_variations ) : ?>
2
  /**
3
  * Variable product add to cart - radio inputs
4
  *
5
+ * @version 2.7.0
6
  * @since 2.4.8
7
  * @author Algoritmika Ltd.
8
  */
17
 
18
  do_action( 'woocommerce_before_add_to_cart_form' ); ?>
19
 
20
+ <form class="variations_form cart" method="post" enctype='multipart/form-data' data-product_id="<?php echo absint( wcj_get_product_id_or_variation_parent_id( $product ) ); ?>" data-product_variations="<?php echo esc_attr( json_encode( $available_variations ) ) ?>">
21
  <?php do_action( 'woocommerce_before_variations_form' ); ?>
22
 
23
  <?php if ( empty( $available_variations ) && false !== $available_variations ) : ?>
langs/woocommerce-jetpack.pot CHANGED
@@ -1,229 +1,98 @@
1
- # Copyright (C) 2016 Booster for WooCommerce
2
- # This file is distributed under the same license as the Booster for WooCommerce package.
3
- msgid ""
4
- msgstr ""
5
- "Project-Id-Version: Booster for WooCommerce 2.5.9\n"
6
- "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/woocommerce-"
7
- "jetpack\n"
8
- "POT-Creation-Date: 2016-12-19 20:17:07+00:00\n"
9
- "MIME-Version: 1.0\n"
10
- "Content-Type: text/plain; charset=UTF-8\n"
11
- "Content-Transfer-Encoding: 8bit\n"
12
- "PO-Revision-Date: 2016-MO-DA HO:MI+ZONE\n"
13
- "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
- "Language-Team: LANGUAGE <LL@li.org>\n"
15
-
16
- #: includes/add-to-cart/class-wcj-add-to-cart-per-product.php:79
17
- msgid "Booster: Custom Add to Cart"
18
- msgstr ""
19
-
20
- #: includes/add-to-cart/class-wcj-add-to-cart-per-product.php:90
21
- msgid "Single product view"
22
- msgstr ""
23
-
24
- #: includes/add-to-cart/class-wcj-add-to-cart-per-product.php:91
25
- msgid "Product category (archive) view"
26
- msgstr ""
27
-
28
- #: includes/admin/class-wc-settings-jetpack.php:26
29
- #: includes/admin/class-wc-settings-jetpack.php:358
30
- #: includes/class-wcj-checkout-files-upload.php:140
31
- #: includes/class-wcj-payment-gateways.php:55
32
- #: includes/classes/class-wcj-module.php:174
33
- #: includes/classes/class-wcj-module.php:363
34
- msgid "Booster"
35
- msgstr ""
36
-
37
- #: includes/admin/class-wc-settings-jetpack.php:150
38
- msgid "Save changes"
39
- msgstr ""
40
-
41
- #: includes/admin/class-wc-settings-jetpack.php:208
42
- msgid "Alphabetically"
43
- msgstr ""
44
-
45
- #: includes/admin/class-wc-settings-jetpack.php:209
46
- msgid "By Category"
47
- msgstr ""
48
-
49
- #: includes/admin/class-wc-settings-jetpack.php:210
50
- msgid "Active"
51
- msgstr ""
52
-
53
- #: includes/admin/class-wc-settings-jetpack.php:211
54
- msgid "Manage Settings"
55
- msgstr ""
56
-
57
- #: includes/admin/class-wc-settings-jetpack.php:253
58
- #: includes/admin/wcj-modules-cats.php:15
59
- msgid "Dashboard"
60
- msgstr ""
61
-
62
- #: includes/admin/class-wc-settings-jetpack.php:283
63
- #: includes/class-wcj-product-custom-info.php:26
64
- msgid "Product Info"
65
- msgstr ""
66
-
67
- #: includes/admin/class-wc-settings-jetpack.php:289
68
- msgid ""
69
- "Please note that current <em>%s</em> module is deprecated and will be "
70
- "removed in future updates. Please use <em>%s</em> module instead."
71
- msgstr ""
72
-
73
- #: includes/admin/class-wc-settings-jetpack.php:354
74
- msgid "WooCommerce"
75
- msgstr ""
76
-
77
- #: includes/admin/class-wc-settings-jetpack.php:356
78
- #: includes/admin/class-wc-settings-jetpack.php:495
79
- #: woocommerce-jetpack.php:398
80
- msgid "Settings"
81
- msgstr ""
82
-
83
- #: includes/admin/class-wc-settings-jetpack.php:402
84
  msgid ""
85
- "This section lets you export, import or reset all Booster's modules settings."
86
- msgstr ""
87
-
88
- #: includes/admin/class-wc-settings-jetpack.php:420
89
- #: includes/class-wcj-export-import.php:28
90
- msgid "Export"
91
- msgstr ""
92
-
93
- #: includes/admin/class-wc-settings-jetpack.php:421
94
- msgid "Import"
95
  msgstr ""
96
 
97
- #: includes/admin/class-wc-settings-jetpack.php:423
 
98
  msgid ""
99
- "This will reset settings to defaults for all Booster modules. Are you sure?"
100
- msgstr ""
101
-
102
- #: includes/admin/class-wc-settings-jetpack.php:423
103
- msgid "Reset"
104
- msgstr ""
105
-
106
- #: includes/admin/class-wc-settings-jetpack.php:426
107
- msgid "Version"
108
- msgstr ""
109
-
110
- #: includes/admin/class-wc-settings-jetpack.php:450
111
- #: includes/admin/class-wc-settings-jetpack.php:457
112
- msgid "Select All"
113
  msgstr ""
114
 
115
- #: includes/admin/class-wc-settings-jetpack.php:451
116
- #: includes/admin/class-wc-settings-jetpack.php:458
117
- #: includes/admin/class-wcj-tools.php:74
118
- msgid "Module"
119
  msgstr ""
120
 
121
- #: includes/admin/class-wc-settings-jetpack.php:452
122
- #: includes/admin/class-wc-settings-jetpack.php:459
123
- #: includes/admin/class-wcj-tools.php:75
124
- #: includes/class-wcj-eu-vat-number.php:377
125
- #: includes/class-wcj-product-by-user.php:202
126
- #: includes/export/class-wcj-fields-helper.php:293
127
- #: includes/gateways/class-wc-gateway-wcj-custom.php:76
128
- #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:151
129
- #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:266
130
- msgid "Description"
131
  msgstr ""
132
 
133
- #: includes/admin/class-wc-settings-jetpack.php:497
134
- #: includes/classes/class-wcj-module.php:497
135
- msgid "Documentation"
 
136
  msgstr ""
137
 
138
- #: includes/admin/class-wc-settings-jetpack.php:512
139
- msgid "No active modules found."
140
  msgstr ""
141
 
142
- #: includes/admin/class-wc-settings-jetpack.php:515
143
- msgid "Total Modules:"
144
  msgstr ""
145
 
146
- #: includes/admin/class-wc-settings-jetpack.php:544
147
- msgid "Booster for WooCommerce - Dashboard"
148
  msgstr ""
149
 
150
- #: includes/admin/class-wc-settings-jetpack.php:546
 
151
  msgid ""
152
- "This dashboard lets you enable/disable any Booster's module. Each checkbox "
153
- "comes with short module's description. Please visit <a href=\"http://booster."
154
- "io\" target=\"_blank\">http://booster.io</a> for detailed info on each "
155
- "feature."
156
- msgstr ""
157
-
158
- #: includes/admin/class-wcj-tools.php:34
159
- msgid "Booster for WooCommerce Tools"
160
- msgstr ""
161
-
162
- #: includes/admin/class-wcj-tools.php:35
163
- msgid "Booster Tools"
164
  msgstr ""
165
 
166
- #: includes/admin/class-wcj-tools.php:53
167
- msgid "Tools Dashboard"
168
  msgstr ""
169
 
170
- #: includes/admin/class-wcj-tools.php:67
171
- msgid "Booster for WooCommerce Tools - Dashboard"
172
  msgstr ""
173
 
174
- #: includes/admin/class-wcj-tools.php:68
175
  msgid ""
176
- "This dashboard lets you check statuses and short descriptions of all "
177
- "available Booster for WooCommerce tools. Tools can be enabled through "
178
- "WooCommerce > Settings > Booster. Enabled tools will appear in the tabs menu "
179
- "above."
180
- msgstr ""
181
-
182
- #: includes/admin/class-wcj-tools.php:73
183
- msgid "Tool"
184
- msgstr ""
185
-
186
- #: includes/admin/class-wcj-tools.php:76
187
- #: includes/class-wcj-product-by-user.php:156
188
- #: includes/export/class-wcj-fields-helper.php:294
189
- msgid "Status"
190
- msgstr ""
191
-
192
- #: includes/admin/wcj-modules-cats.php:26
193
- msgid "Prices & Currencies"
194
  msgstr ""
195
 
196
- #: includes/admin/wcj-modules-cats.php:47
197
- msgid "Button & Price Labels"
 
 
198
  msgstr ""
199
 
200
- #: includes/admin/wcj-modules-cats.php:59
201
- #: includes/class-wcj-product-by-user.php:57
202
- #: includes/class-wcj-product-by-user.php:93
203
- msgid "Products"
204
  msgstr ""
205
 
206
- #: includes/admin/wcj-modules-cats.php:82
207
- msgid "Cart & Checkout"
208
  msgstr ""
209
 
210
- #: includes/admin/wcj-modules-cats.php:96
211
- #: includes/class-wcj-payment-gateways-by-country.php:88
212
- #: includes/class-wcj-payment-gateways-by-user-role.php:81
213
- #: includes/class-wcj-payment-gateways-min-max.php:90
214
- msgid "Payment Gateways"
215
  msgstr ""
216
 
217
- #: includes/admin/wcj-modules-cats.php:111
218
- msgid "Shipping & Orders"
219
  msgstr ""
220
 
221
- #: includes/admin/wcj-modules-cats.php:126
222
- msgid "PDF Invoicing & Packing Slips"
 
223
  msgstr ""
224
 
225
- #: includes/admin/wcj-modules-cats.php:142
226
- msgid "Emails & Misc."
 
227
  msgstr ""
228
 
229
  #: includes/class-wcj-add-to-cart.php:25
@@ -247,11 +116,13 @@ msgstr ""
247
 
248
  #: includes/class-wcj-add-to-cart.php:48
249
  #: includes/class-wcj-add-to-cart.php:187
250
- #: includes/class-wcj-add-to-cart.php:212 includes/class-wcj-general.php:482
251
- #: includes/class-wcj-product-images.php:252
252
- #: includes/class-wcj-product-images.php:326
253
  #: includes/class-wcj-shipping-calculator.php:183
254
- #: includes/class-wcj-shipping.php:266 includes/class-wcj-shipping.php:298
 
 
255
  msgid "Enable Section"
256
  msgstr ""
257
 
@@ -283,17 +154,16 @@ msgstr ""
283
  #: includes/class-wcj-add-to-cart.php:101
284
  #: includes/class-wcj-add-to-cart.php:147
285
  #: includes/class-wcj-add-to-cart.php:160
286
- #: includes/class-wcj-payment-gateways-fees.php:151
287
  msgid "Leave blank to disable."
288
  msgstr ""
289
 
290
  #: includes/class-wcj-add-to-cart.php:90
291
  #: includes/class-wcj-add-to-cart.php:101
292
  #: includes/class-wcj-add-to-cart.php:149
293
- #: includes/class-wcj-add-to-cart.php:162 includes/class-wcj-sorting.php:196
294
- #: includes/class-wcj-sorting.php:205 includes/class-wcj-sorting.php:214
295
- #: includes/class-wcj-sorting.php:223 includes/class-wcj-sorting.php:241
296
- #: includes/class-wcj-sorting.php:250
297
  msgid "Default: "
298
  msgstr ""
299
 
@@ -355,7 +225,7 @@ msgid "Already in cart. Product category (archive) view."
355
  msgstr ""
356
 
357
  #: includes/class-wcj-add-to-cart.php:180
358
- #: includes/class-wcj-product-addons.php:528
359
  msgid "Per Product Options"
360
  msgstr ""
361
 
@@ -383,58 +253,61 @@ msgid "Category Groups Number"
383
  msgstr ""
384
 
385
  #: includes/class-wcj-add-to-cart.php:221
386
- #: includes/class-wcj-checkout-custom-fields.php:637
387
- #: includes/class-wcj-product-input-fields.php:179
388
- #: includes/class-wcj-product-tabs.php:504
389
  msgid "Click \"Save changes\" after you change this number."
390
  msgstr ""
391
 
392
  #: includes/class-wcj-add-to-cart.php:257
393
- #: includes/class-wcj-price-by-country.php:303
394
- #: includes/class-wcj-price-by-country.php:314
395
- #: includes/class-wcj-price-by-country.php:325
396
- #: includes/class-wcj-price-by-country.php:379
397
  msgid "Group"
398
  msgstr ""
399
 
400
  #: includes/class-wcj-add-to-cart.php:258
401
- #: includes/class-wcj-admin-tools.php:194
402
- #: includes/class-wcj-admin-tools.php:201
403
- #: includes/class-wcj-admin-tools.php:232
404
- #: includes/class-wcj-admin-tools.php:239
405
- #: includes/class-wcj-call-for-price.php:159
406
- #: includes/class-wcj-general.php:343 includes/class-wcj-general.php:391
407
- #: includes/class-wcj-general.php:407 includes/class-wcj-general.php:465
408
- #: includes/class-wcj-global-discount.php:244
409
- #: includes/class-wcj-left-to-free-shipping.php:139
410
- #: includes/class-wcj-left-to-free-shipping.php:171
411
- #: includes/class-wcj-left-to-free-shipping.php:209
412
- #: includes/class-wcj-multicurrency.php:406
413
- #: includes/class-wcj-multicurrency.php:414
414
- #: includes/class-wcj-order-numbers.php:210
415
- #: includes/class-wcj-order-numbers.php:273
416
- #: includes/class-wcj-order-numbers.php:281 includes/class-wcj-orders.php:394
417
- #: includes/class-wcj-orders.php:423 includes/class-wcj-orders.php:531
418
- #: includes/class-wcj-price-by-country.php:185
419
- #: includes/class-wcj-price-by-country.php:207
420
- #: includes/class-wcj-price-by-country.php:216
421
- #: includes/class-wcj-price-by-country.php:226
422
- #: includes/class-wcj-price-by-user-role.php:376
423
- #: includes/class-wcj-price-by-user-role.php:393
424
- #: includes/class-wcj-price-labels.php:51
425
- #: includes/class-wcj-price-labels.php:755
426
- #: includes/class-wcj-product-add-to-cart.php:248
427
- #: includes/class-wcj-product-add-to-cart.php:348
428
- #: includes/class-wcj-product-add-to-cart.php:374
429
- #: includes/class-wcj-product-add-to-cart.php:390
430
- #: includes/class-wcj-product-add-to-cart.php:432
431
- #: includes/class-wcj-product-add-to-cart.php:449
432
- #: includes/class-wcj-product-add-to-cart.php:466
433
- #: includes/class-wcj-product-addons.php:456
434
- #: includes/class-wcj-product-addons.php:534
435
- #: includes/class-wcj-product-addons.php:553
436
- #: includes/class-wcj-product-addons.php:577
437
- #: includes/class-wcj-product-addons.php:648
 
 
 
 
 
438
  #: includes/class-wcj-product-by-user.php:275
439
  #: includes/class-wcj-product-info.php:256
440
  #: includes/class-wcj-product-info.php:351
@@ -442,34 +315,47 @@ msgstr ""
442
  #: includes/class-wcj-product-input-fields.php:133
443
  #: includes/class-wcj-product-input-fields.php:170
444
  #: includes/class-wcj-product-input-fields.php:283
445
- #: includes/class-wcj-product-listings.php:448
446
- #: includes/class-wcj-product-tabs.php:678
447
- #: includes/class-wcj-product-tabs.php:686
448
- #: includes/class-wcj-products-xml.php:237
449
- #: includes/class-wcj-purchase-data.php:279
450
- #: includes/class-wcj-purchase-data.php:286
451
- #: includes/class-wcj-purchase-data.php:293
452
- #: includes/class-wcj-purchase-data.php:360
453
- #: includes/class-wcj-purchase-data.php:367
454
- #: includes/class-wcj-purchase-data.php:374
 
 
 
 
 
 
 
455
  #: includes/class-wcj-shipping-calculator.php:134
456
  #: includes/class-wcj-shipping-calculator.php:141
457
  #: includes/class-wcj-shipping-calculator.php:148
458
  #: includes/class-wcj-shipping-calculator.php:155
459
- #: includes/class-wcj-shipping.php:179 includes/class-wcj-sku.php:385
460
- #: includes/class-wcj-sku.php:393 includes/class-wcj-sorting.php:189
461
- #: includes/class-wcj-wholesale-price.php:384
462
- #: includes/class-wcj-wholesale-price.php:391
463
- #: includes/class-wcj-wholesale-price.php:398
464
  #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-display.php:379
465
  msgid "Enable"
466
  msgstr ""
467
 
468
  #: includes/class-wcj-add-to-cart.php:274
469
- #: includes/class-wcj-checkout-custom-fields.php:866
470
  msgid "categories"
471
  msgstr ""
472
 
 
 
 
 
 
 
473
  #: includes/class-wcj-add-to-cart.php:285
474
  msgid "Button text - single product view"
475
  msgstr ""
@@ -488,23 +374,15 @@ msgid ""
488
  "country display."
489
  msgstr ""
490
 
491
- #: includes/class-wcj-address-formats.php:130
492
- #: includes/class-wcj-address-formats.php:136
493
  msgid "Force Base Country Display"
494
  msgstr ""
495
 
496
- #: includes/class-wcj-address-formats.php:132
497
- msgid "Force Base Country Display Options."
498
- msgstr ""
499
-
500
- #: includes/class-wcj-address-formats.php:148
501
  msgid "Address Formats by Country"
502
  msgstr ""
503
 
504
- #: includes/class-wcj-address-formats.php:150
505
- msgid "Address Formats by Country Options."
506
- msgstr ""
507
-
508
  #: includes/class-wcj-admin-tools.php:25 includes/class-wcj-admin-tools.php:32
509
  msgid "Admin Tools"
510
  msgstr ""
@@ -521,71 +399,86 @@ msgstr ""
521
  msgid "Log"
522
  msgstr ""
523
 
524
- #: includes/class-wcj-admin-tools.php:45
 
525
  msgid "Current PHP memory limit: %s."
526
  msgstr ""
527
 
528
- #: includes/class-wcj-admin-tools.php:68
529
- #: includes/class-wcj-export-import.php:444
530
- #: includes/class-wcj-export-import.php:512
 
 
 
 
 
531
  msgid "Product Meta"
532
  msgstr ""
533
 
534
- #: includes/class-wcj-admin-tools.php:85
535
- #: includes/class-wcj-export-import.php:374
536
- #: includes/class-wcj-export-import.php:442
537
  msgid "Order Meta"
538
  msgstr ""
539
 
540
- #: includes/class-wcj-admin-tools.php:118
541
  msgid "Order Items Meta"
542
  msgstr ""
543
 
544
- #: includes/class-wcj-admin-tools.php:135
545
  msgid "Log deleted successfully."
546
  msgstr ""
547
 
548
- #: includes/class-wcj-admin-tools.php:140
549
  msgid "Delete Log"
550
  msgstr ""
551
 
552
- #: includes/class-wcj-admin-tools.php:175
553
  msgid "NOT DEFINED"
554
  msgstr ""
555
 
556
- #: includes/class-wcj-admin-tools.php:188
557
  msgid "Admin Tools Options"
558
  msgstr ""
559
 
560
- #: includes/class-wcj-admin-tools.php:193
561
  msgid "Logging"
562
  msgstr ""
563
 
564
- #: includes/class-wcj-admin-tools.php:200
565
  msgid "Debug"
566
  msgstr ""
567
 
568
- #: includes/class-wcj-admin-tools.php:207
569
  msgid "PHP Memory Limit"
570
  msgstr ""
571
 
572
- #: includes/class-wcj-admin-tools.php:208
573
  msgid "megabytes."
574
  msgstr ""
575
 
576
- #: includes/class-wcj-admin-tools.php:209
 
577
  msgid "Set zero to disable."
578
  msgstr ""
579
 
580
- #: includes/class-wcj-admin-tools.php:224
 
 
 
 
 
 
 
 
581
  msgid "System Info"
582
  msgstr ""
583
 
584
- #: includes/class-wcj-admin-tools.php:231
585
  msgid "Show Order Meta"
586
  msgstr ""
587
 
588
- #: includes/class-wcj-admin-tools.php:238
589
  msgid "Show Product Meta"
590
  msgstr ""
591
 
@@ -607,49 +500,108 @@ msgid ""
607
  "Leave price empty when adding or editing products. Then set the options here."
608
  msgstr ""
609
 
610
- #: includes/class-wcj-call-for-price.php:107
611
- msgid "Label to Show on Single"
612
  msgstr ""
613
 
614
  #: includes/class-wcj-call-for-price.php:108
615
- #: includes/class-wcj-call-for-price.php:119
616
- #: includes/class-wcj-call-for-price.php:130
617
- #: includes/class-wcj-call-for-price.php:141
 
 
 
 
618
  msgid "This sets the html to output on empty price. Leave blank to disable."
619
  msgstr ""
620
 
621
- #: includes/class-wcj-call-for-price.php:118
622
  msgid "Label to Show on Archives"
623
  msgstr ""
624
 
625
- #: includes/class-wcj-call-for-price.php:129
626
  msgid "Label to Show on Homepage"
627
  msgstr ""
628
 
629
- #: includes/class-wcj-call-for-price.php:140
630
  msgid "Label to Show on Related"
631
  msgstr ""
632
 
633
- #: includes/class-wcj-call-for-price.php:151
634
  msgid "Hide Sale! Tag"
635
  msgstr ""
636
 
637
- #: includes/class-wcj-call-for-price.php:152
638
  msgid "Hide the tag"
639
  msgstr ""
640
 
641
- #: includes/class-wcj-call-for-price.php:158
642
  msgid "Make All Products Call for Price"
643
  msgstr ""
644
 
645
- #: includes/class-wcj-call-for-price.php:160
646
  msgid ""
647
  "Enable this to make all products (except variable) prices empty. When "
648
  "checkbox disabled, all prices go back to normal."
649
  msgstr ""
650
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
651
  #: includes/class-wcj-cart.php:25
652
- msgid "Cart"
653
  msgstr ""
654
 
655
  #: includes/class-wcj-cart.php:26
@@ -681,48 +633,48 @@ msgstr ""
681
  #: includes/class-wcj-cart.php:132
682
  #: includes/class-wcj-checkout-custom-info.php:75
683
  #: includes/class-wcj-mini-cart.php:80
684
- #: includes/class-wcj-product-custom-info.php:115
685
  msgid "Total Blocks"
686
  msgstr ""
687
 
688
  #: includes/class-wcj-cart.php:153
689
- #: includes/class-wcj-checkout-custom-info.php:90
690
  #: includes/class-wcj-mini-cart.php:100
691
- #: includes/class-wcj-product-custom-info.php:130
692
  msgid "Info Block"
693
  msgstr ""
694
 
695
  #: includes/class-wcj-cart.php:159
696
- #: includes/class-wcj-checkout-custom-info.php:95
697
- #: includes/class-wcj-left-to-free-shipping.php:146
698
- #: includes/class-wcj-left-to-free-shipping.php:180
699
- #: includes/class-wcj-left-to-free-shipping.php:218
700
  #: includes/class-wcj-mini-cart.php:106
701
- #: includes/class-wcj-product-custom-info.php:135
702
- #: includes/class-wcj-product-tabs.php:431
703
- #: includes/class-wcj-product-tabs.php:557
704
  msgid "Content"
705
  msgstr ""
706
 
707
  #: includes/class-wcj-cart.php:167
708
- #: includes/class-wcj-checkout-custom-info.php:102
709
  #: includes/class-wcj-checkout-files-upload.php:641
710
- #: includes/class-wcj-left-to-free-shipping.php:154
711
- #: includes/class-wcj-left-to-free-shipping.php:188
712
- #: includes/class-wcj-left-to-free-shipping.php:226
713
  #: includes/class-wcj-mini-cart.php:114
714
- #: includes/class-wcj-product-custom-info.php:142
715
  #: includes/class-wcj-product-info.php:263
716
  #: includes/class-wcj-product-info.php:366
717
  #: includes/class-wcj-product-info.php:399
718
- #: includes/class-wcj-product-listings.php:471
719
  msgid "Position"
720
  msgstr ""
721
 
722
  #: includes/class-wcj-cart.php:176
723
- #: includes/class-wcj-checkout-custom-info.php:139
724
  #: includes/class-wcj-mini-cart.php:127
725
- #: includes/class-wcj-product-custom-info.php:168
726
  msgid "Position Order (i.e. Priority)"
727
  msgstr ""
728
 
@@ -754,50 +706,51 @@ msgid "Checkout Core Fields Options"
754
  msgstr ""
755
 
756
  #: includes/class-wcj-checkout-core-fields.php:225
757
- #: includes/classes/class-wcj-module.php:415
758
  msgid "enabled"
759
  msgstr ""
760
 
761
  #: includes/class-wcj-checkout-core-fields.php:230
762
  #: includes/class-wcj-checkout-core-fields.php:244
763
  #: includes/class-wcj-checkout-core-fields.php:278
764
- #: includes/class-wcj-product-listings.php:464
765
  msgid "Default"
766
  msgstr ""
767
 
768
  #: includes/class-wcj-checkout-core-fields.php:231
769
- #: includes/class-wcj-checkout-custom-fields.php:668
770
  #: includes/class-wcj-checkout-files-upload.php:629
771
- #: includes/class-wcj-export-import.php:358
772
- #: includes/class-wcj-export-import.php:426
773
- #: includes/class-wcj-export-import.php:496
774
- #: includes/class-wcj-global-discount.php:243
775
- #: includes/class-wcj-orders.php:463
776
  #: includes/class-wcj-price-by-user-role.php:142
777
- #: includes/class-wcj-product-addons.php:442
778
  #: includes/class-wcj-product-bookings.php:417
779
- #: includes/class-wcj-product-open-pricing.php:178
780
- #: includes/class-wcj-product-price-by-formula.php:237
781
- #: includes/class-wcj-products-xml.php:236
782
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:37
783
  msgid "Enabled"
784
  msgstr ""
785
 
786
  #: includes/class-wcj-checkout-core-fields.php:232
787
- #: includes/class-wcj-pdf-invoicing.php:368
788
- #: includes/class-wcj-product-tabs.php:440
 
789
  msgid "Disabled"
790
  msgstr ""
791
 
792
  #: includes/class-wcj-checkout-core-fields.php:239
793
- #: includes/class-wcj-checkout-custom-fields.php:807
794
  msgid "required"
795
  msgstr ""
796
 
797
  #: includes/class-wcj-checkout-core-fields.php:245
798
  #: includes/class-wcj-checkout-files-upload.php:635
799
- #: includes/class-wcj-eu-vat-number.php:390
800
- #: includes/input-fields/class-wcj-product-input-fields-abstract.php:207
801
  msgid "Required"
802
  msgstr ""
803
 
@@ -806,7 +759,7 @@ msgid "Not Required"
806
  msgstr ""
807
 
808
  #: includes/class-wcj-checkout-core-fields.php:253
809
- #: includes/class-wcj-checkout-custom-fields.php:815
810
  msgid "label"
811
  msgstr ""
812
 
@@ -816,12 +769,12 @@ msgid "Leave blank for WooCommerce defaults."
816
  msgstr ""
817
 
818
  #: includes/class-wcj-checkout-core-fields.php:263
819
- #: includes/class-wcj-checkout-custom-fields.php:823
820
  msgid "placeholder"
821
  msgstr ""
822
 
823
  #: includes/class-wcj-checkout-core-fields.php:273
824
- #: includes/class-wcj-checkout-custom-fields.php:845
825
  msgid "class"
826
  msgstr ""
827
 
@@ -845,245 +798,258 @@ msgstr ""
845
  msgid "Add custom fields to WooCommerce checkout page."
846
  msgstr ""
847
 
848
- #: includes/class-wcj-checkout-custom-fields.php:599
849
  msgid "Checkout Custom Fields Options"
850
  msgstr ""
851
 
852
- #: includes/class-wcj-checkout-custom-fields.php:605
853
  msgid "Add All Fields to Admin Emails"
854
  msgstr ""
855
 
856
- #: includes/class-wcj-checkout-custom-fields.php:606
857
- #: includes/class-wcj-checkout-custom-fields.php:613
858
- #: includes/class-wcj-checkout-custom-fields.php:620
859
- #: includes/class-wcj-export-import.php:315 includes/class-wcj-general.php:147
860
- #: includes/class-wcj-order-custom-statuses.php:251
861
- #: includes/class-wcj-order-custom-statuses.php:326
862
- #: includes/class-wcj-order-custom-statuses.php:333
863
- #: includes/class-wcj-order-min-amount.php:233
864
- #: includes/class-wcj-orders.php:441 includes/class-wcj-orders.php:515
 
 
 
865
  #: includes/class-wcj-product-by-user.php:282
866
- #: includes/class-wcj-purchase-data.php:391 includes/class-wcj-sku.php:400
 
867
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:359
868
  msgid "Add"
869
  msgstr ""
870
 
871
- #: includes/class-wcj-checkout-custom-fields.php:612
872
  msgid "Add All Fields to Customers Emails"
873
  msgstr ""
874
 
875
- #: includes/class-wcj-checkout-custom-fields.php:619
876
  msgid "Add All Fields to \"Order Received\" Page"
877
  msgstr ""
878
 
879
- #: includes/class-wcj-checkout-custom-fields.php:631
880
  msgid "The Fields"
881
  msgstr ""
882
 
883
- #: includes/class-wcj-checkout-custom-fields.php:636
884
  msgid "Custom Fields Number"
885
  msgstr ""
886
 
887
- #: includes/class-wcj-checkout-custom-fields.php:667
 
 
 
 
 
888
  msgid "Custom Field"
889
  msgstr ""
890
 
891
- #: includes/class-wcj-checkout-custom-fields.php:678
892
  msgid "type"
893
  msgstr ""
894
 
895
- #: includes/class-wcj-checkout-custom-fields.php:683
896
- #: includes/class-wcj-more-button-labels.php:58
897
- #: includes/class-wcj-product-listings.php:489
898
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:48
899
  msgid "Text"
900
  msgstr ""
901
 
902
- #: includes/class-wcj-checkout-custom-fields.php:684
903
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:49
904
  msgid "Textarea"
905
  msgstr ""
906
 
907
- #: includes/class-wcj-checkout-custom-fields.php:685
908
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:50
909
  msgid "Number"
910
  msgstr ""
911
 
912
- #: includes/class-wcj-checkout-custom-fields.php:686
913
- #: includes/class-wcj-product-addons.php:471
914
- #: includes/class-wcj-product-addons.php:589
915
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:51
916
  msgid "Checkbox"
917
  msgstr ""
918
 
919
- #: includes/class-wcj-checkout-custom-fields.php:688
920
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:53
921
  msgid "Datepicker"
922
  msgstr ""
923
 
924
- #: includes/class-wcj-checkout-custom-fields.php:689
925
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:54
926
  msgid "Weekpicker"
927
  msgstr ""
928
 
929
- #: includes/class-wcj-checkout-custom-fields.php:690
930
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:55
931
  msgid "Timepicker"
932
  msgstr ""
933
 
934
- #: includes/class-wcj-checkout-custom-fields.php:691
935
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:56
936
  msgid "Select"
937
  msgstr ""
938
 
939
- #: includes/class-wcj-checkout-custom-fields.php:692
940
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:57
941
  msgid "Radio"
942
  msgstr ""
943
 
944
- #: includes/class-wcj-checkout-custom-fields.php:693
945
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:58
946
  msgid "Password"
947
  msgstr ""
948
 
949
- #: includes/class-wcj-checkout-custom-fields.php:694
950
- #: includes/class-wcj-orders.php:303 includes/class-wcj-orders.php:440
951
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:59
952
  #: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:90
953
  #: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:104
954
  msgid "Country"
955
  msgstr ""
956
 
957
- #: includes/class-wcj-checkout-custom-fields.php:695
958
  msgid "State"
959
  msgstr ""
960
 
961
- #: includes/class-wcj-checkout-custom-fields.php:696
962
- #: includes/export/class-wcj-fields-helper.php:76
963
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:61
964
  #: includes/reports/wcj-class-reports-customers.php:92
965
  msgid "Email"
966
  msgstr ""
967
 
968
- #: includes/class-wcj-checkout-custom-fields.php:697
969
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:62
970
  msgid "Phone"
971
  msgstr ""
972
 
973
- #: includes/class-wcj-checkout-custom-fields.php:703
974
  msgid ""
975
  "options (only if \"select\" or \"radio\" type is selected). One option per "
976
  "line"
977
  msgstr ""
978
 
979
- #: includes/class-wcj-checkout-custom-fields.php:712
980
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:79
981
  msgid "If checkbox is selected, set value for ON here"
982
  msgstr ""
983
 
984
- #: includes/class-wcj-checkout-custom-fields.php:714
985
- #: includes/class-wcj-eu-vat-number.php:391
986
- #: includes/class-wcj-eu-vat-number.php:398
987
- #: includes/class-wcj-eu-vat-number.php:416
988
- #: includes/class-wcj-eu-vat-number.php:431
989
- #: includes/class-wcj-eu-vat-number.php:438
990
- #: includes/class-wcj-eu-vat-number.php:456
991
  #: includes/class-wcj-price-by-user-role.php:139
992
  #: includes/class-wcj-price-by-user-role.php:182
993
- #: includes/class-wcj-product-add-to-cart.php:212
994
- #: includes/class-wcj-product-add-to-cart.php:222
995
- #: includes/class-wcj-product-addons.php:439
996
- #: includes/class-wcj-product-addons.php:461
997
- #: includes/class-wcj-product-addons.php:509
 
998
  #: includes/class-wcj-product-bookings.php:414
999
- #: includes/class-wcj-product-images.php:210
1000
- #: includes/class-wcj-product-images.php:220
1001
- #: includes/class-wcj-product-images.php:230
1002
- #: includes/class-wcj-product-open-pricing.php:175
1003
- #: includes/class-wcj-product-price-by-formula.php:234
1004
- #: includes/class-wcj-wholesale-price.php:263
 
1005
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:82
1006
  #: includes/widgets/class-wcj-widget-country-switcher.php:91
1007
  msgid "Yes"
1008
  msgstr ""
1009
 
1010
- #: includes/class-wcj-checkout-custom-fields.php:720
1011
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:87
1012
  msgid "If checkbox is selected, set value for OFF here"
1013
  msgstr ""
1014
 
1015
- #: includes/class-wcj-checkout-custom-fields.php:722
1016
  #: includes/class-wcj-price-by-user-role.php:140
1017
  #: includes/class-wcj-price-by-user-role.php:183
1018
- #: includes/class-wcj-product-add-to-cart.php:213
1019
- #: includes/class-wcj-product-add-to-cart.php:223
1020
- #: includes/class-wcj-product-addons.php:440
1021
- #: includes/class-wcj-product-addons.php:462
1022
- #: includes/class-wcj-product-addons.php:510
 
1023
  #: includes/class-wcj-product-bookings.php:415
1024
- #: includes/class-wcj-product-images.php:211
1025
- #: includes/class-wcj-product-images.php:221
1026
- #: includes/class-wcj-product-images.php:231
1027
- #: includes/class-wcj-product-open-pricing.php:176
1028
- #: includes/class-wcj-product-price-by-formula.php:235
1029
- #: includes/class-wcj-wholesale-price.php:264
 
1030
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:90
1031
  #: includes/widgets/class-wcj-widget-country-switcher.php:90
1032
  msgid "No"
1033
  msgstr ""
1034
 
1035
- #: includes/class-wcj-checkout-custom-fields.php:728
1036
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:95
1037
  msgid "If checkbox is selected, set default value here"
1038
  msgstr ""
1039
 
1040
- #: includes/class-wcj-checkout-custom-fields.php:732
1041
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:100
1042
  msgid "Not Checked"
1043
  msgstr ""
1044
 
1045
- #: includes/class-wcj-checkout-custom-fields.php:733
 
1046
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:101
1047
  msgid "Checked"
1048
  msgstr ""
1049
 
1050
- #: includes/class-wcj-checkout-custom-fields.php:739
1051
- #: includes/input-fields/class-wcj-product-input-fields-abstract.php:124
1052
  msgid ""
1053
  "If datepicker/weekpicker is selected, set date format here. Visit <a href="
1054
  "\"https://codex.wordpress.org/Formatting_Date_and_Time\" target=\"_blank"
1055
  "\">documentation on date and time formatting</a> for valid date formats."
1056
  msgstr ""
1057
 
1058
- #: includes/class-wcj-checkout-custom-fields.php:740
1059
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:125
1060
  msgid "Leave blank to use your current WordPress format"
1061
  msgstr ""
1062
 
1063
- #: includes/class-wcj-checkout-custom-fields.php:747
1064
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:133
1065
  msgid "If datepicker/weekpicker is selected, set min date (in days) here"
1066
  msgstr ""
1067
 
1068
- #: includes/class-wcj-checkout-custom-fields.php:754
1069
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:141
1070
  msgid "If datepicker/weekpicker is selected, set max date (in days) here"
1071
  msgstr ""
1072
 
1073
- #: includes/class-wcj-checkout-custom-fields.php:761
1074
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:149
1075
  msgid ""
1076
  "If datepicker/weekpicker is selected, set if you want to add year selector"
1077
  msgstr ""
1078
 
1079
- #: includes/class-wcj-checkout-custom-fields.php:768
1080
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:157
1081
  msgid ""
1082
  "If datepicker/weekpicker is selected, and year selector is enabled, set year "
1083
  "range here"
1084
  msgstr ""
1085
 
1086
- #: includes/class-wcj-checkout-custom-fields.php:769
1087
  msgid ""
1088
  "The range of years displayed in the year drop-down: either relative to "
1089
  "today's year (\"-nn:+nn\"), relative to the currently selected year (\"c-nn:c"
@@ -1092,118 +1058,117 @@ msgid ""
1092
  "restrict which dates may be selected use the minDate and/or maxDate options."
1093
  msgstr ""
1094
 
1095
- #: includes/class-wcj-checkout-custom-fields.php:776
1096
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:166
1097
  msgid "If datepicker/weekpicker is selected, set first week day here"
1098
  msgstr ""
1099
 
1100
- #: includes/class-wcj-checkout-custom-fields.php:781
1101
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:171
1102
  msgid "Sunday"
1103
  msgstr ""
1104
 
1105
- #: includes/class-wcj-checkout-custom-fields.php:782
1106
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:172
1107
  msgid "Monday"
1108
  msgstr ""
1109
 
1110
- #: includes/class-wcj-checkout-custom-fields.php:783
1111
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:173
1112
  msgid "Tuesday"
1113
  msgstr ""
1114
 
1115
- #: includes/class-wcj-checkout-custom-fields.php:784
1116
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:174
1117
  msgid "Wednesday"
1118
  msgstr ""
1119
 
1120
- #: includes/class-wcj-checkout-custom-fields.php:785
1121
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:175
1122
  msgid "Thursday"
1123
  msgstr ""
1124
 
1125
- #: includes/class-wcj-checkout-custom-fields.php:786
1126
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:176
1127
  msgid "Friday"
1128
  msgstr ""
1129
 
1130
- #: includes/class-wcj-checkout-custom-fields.php:787
1131
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:177
1132
  msgid "Saturday"
1133
  msgstr ""
1134
 
1135
- #: includes/class-wcj-checkout-custom-fields.php:792
1136
- #: includes/input-fields/class-wcj-product-input-fields-abstract.php:183
1137
  msgid ""
1138
  "If timepicker is selected, set time format here. Visit <a href=\"http://"
1139
  "timepicker.co/options/\" target=\"_blank\">timepicker options page</a> for "
1140
  "valid time formats."
1141
  msgstr ""
1142
 
1143
- #: includes/class-wcj-checkout-custom-fields.php:800
1144
- #: includes/input-fields/class-wcj-product-input-fields-abstract.php:191
1145
  msgid "If timepicker is selected, set interval (in minutes) here"
1146
  msgstr ""
1147
 
1148
- #: includes/class-wcj-checkout-custom-fields.php:831
1149
  msgid "section"
1150
  msgstr ""
1151
 
1152
- #: includes/class-wcj-checkout-custom-fields.php:836
1153
- #: includes/class-wcj-checkout-custom-info.php:110
1154
  #: includes/class-wcj-empty-cart-button.php:117
1155
- #: includes/class-wcj-left-to-free-shipping.php:233
1156
  msgid "Billing"
1157
  msgstr ""
1158
 
1159
- #: includes/class-wcj-checkout-custom-fields.php:837
1160
- #: includes/class-wcj-checkout-custom-info.php:111
1161
  #: includes/class-wcj-empty-cart-button.php:118
1162
- #: includes/class-wcj-left-to-free-shipping.php:234
1163
- #: includes/class-wcj-price-by-user-role.php:392
1164
  #: includes/class-wcj-shipping.php:25
1165
  msgid "Shipping"
1166
  msgstr ""
1167
 
1168
- #: includes/class-wcj-checkout-custom-fields.php:838
1169
- #: includes/export/class-wcj-fields-helper.php:121
1170
- #: includes/export/class-wcj-fields-helper.php:206
1171
  msgid "Order Notes"
1172
  msgstr ""
1173
 
1174
- #: includes/class-wcj-checkout-custom-fields.php:839
1175
  msgid "Account"
1176
  msgstr ""
1177
 
1178
- #: includes/class-wcj-checkout-custom-fields.php:850
1179
- #: includes/class-wcj-eu-vat-number.php:409
1180
  msgid "Wide"
1181
  msgstr ""
1182
 
1183
- #: includes/class-wcj-checkout-custom-fields.php:851
1184
- #: includes/class-wcj-eu-vat-number.php:410
1185
  msgid "First"
1186
  msgstr ""
1187
 
1188
- #: includes/class-wcj-checkout-custom-fields.php:852
1189
- #: includes/class-wcj-eu-vat-number.php:411
1190
  msgid "Last"
1191
  msgstr ""
1192
 
1193
- #: includes/class-wcj-checkout-custom-fields.php:858
1194
  msgid "clear"
1195
  msgstr ""
1196
 
1197
- #: includes/class-wcj-checkout-custom-fields.php:867
1198
  msgid ""
1199
  "Show this field only if there is a product of selected category in cart."
1200
  msgstr ""
1201
 
1202
- #: includes/class-wcj-checkout-custom-fields.php:877
1203
  msgid "products"
1204
  msgstr ""
1205
 
1206
- #: includes/class-wcj-checkout-custom-fields.php:878
1207
  msgid "Show this field only if there is a selected product in cart."
1208
  msgstr ""
1209
 
@@ -1219,50 +1184,82 @@ msgstr ""
1219
  msgid "Checkout Custom Info Blocks"
1220
  msgstr ""
1221
 
1222
- #: includes/class-wcj-checkout-custom-info.php:108
1223
  #: includes/class-wcj-checkout-files-upload.php:645
1224
  #: includes/class-wcj-empty-cart-button.php:115
1225
- #: includes/class-wcj-left-to-free-shipping.php:231
1226
  msgid "Before checkout form"
1227
  msgstr ""
1228
 
1229
- #: includes/class-wcj-checkout-custom-info.php:109
1230
  #: includes/class-wcj-empty-cart-button.php:116
1231
- #: includes/class-wcj-left-to-free-shipping.php:232
1232
  msgid "Before customer details"
1233
  msgstr ""
1234
 
1235
- #: includes/class-wcj-checkout-custom-info.php:112
1236
  #: includes/class-wcj-empty-cart-button.php:119
1237
- #: includes/class-wcj-left-to-free-shipping.php:235
1238
  msgid "After customer details"
1239
  msgstr ""
1240
 
1241
- #: includes/class-wcj-checkout-custom-info.php:113
1242
  #: includes/class-wcj-empty-cart-button.php:120
1243
- #: includes/class-wcj-left-to-free-shipping.php:236
1244
  msgid "Before order review"
1245
  msgstr ""
1246
 
1247
- #: includes/class-wcj-checkout-custom-info.php:114
1248
  #: includes/class-wcj-empty-cart-button.php:121
1249
- #: includes/class-wcj-left-to-free-shipping.php:237
1250
  msgid "Order review"
1251
  msgstr ""
1252
 
1253
- #: includes/class-wcj-checkout-custom-info.php:115
1254
  #: includes/class-wcj-empty-cart-button.php:122
1255
- #: includes/class-wcj-left-to-free-shipping.php:238
1256
  msgid "After order review"
1257
  msgstr ""
1258
 
1259
- #: includes/class-wcj-checkout-custom-info.php:116
1260
  #: includes/class-wcj-checkout-files-upload.php:646
1261
  #: includes/class-wcj-empty-cart-button.php:123
1262
- #: includes/class-wcj-left-to-free-shipping.php:239
1263
  msgid "After checkout form"
1264
  msgstr ""
1265
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1266
  #: includes/class-wcj-checkout-files-upload.php:28
1267
  msgid "Checkout Files Upload"
1268
  msgstr ""
@@ -1285,9 +1282,20 @@ msgstr ""
1285
  #: includes/class-wcj-checkout-files-upload.php:120
1286
  #: includes/class-wcj-checkout-files-upload.php:257
1287
  #: includes/class-wcj-checkout-files-upload.php:705
 
1288
  msgid "Wrong file type: \"%s\"!"
1289
  msgstr ""
1290
 
 
 
 
 
 
 
 
 
 
 
1291
  #: includes/class-wcj-checkout-files-upload.php:140
1292
  msgid "Uploaded Files"
1293
  msgstr ""
@@ -1299,11 +1307,13 @@ msgstr ""
1299
  #: includes/class-wcj-checkout-files-upload.php:229
1300
  #: includes/class-wcj-checkout-files-upload.php:237
1301
  #: includes/class-wcj-checkout-files-upload.php:735
 
1302
  msgid "File \"%s\" was successfully removed."
1303
  msgstr ""
1304
 
1305
  #: includes/class-wcj-checkout-files-upload.php:269
1306
  #: includes/class-wcj-checkout-files-upload.php:720
 
1307
  msgid "File \"%s\" was successfully uploaded."
1308
  msgstr ""
1309
 
@@ -1321,29 +1331,12 @@ msgstr ""
1321
  #: includes/class-wcj-checkout-files-upload.php:500
1322
  #: includes/class-wcj-checkout-files-upload.php:501
1323
  #: includes/class-wcj-checkout-files-upload.php:697
 
1324
  msgid "Remove"
1325
  msgstr ""
1326
 
1327
- #: includes/class-wcj-checkout-files-upload.php:606
1328
- #: includes/class-wcj-currency-per-product.php:281
1329
- #: includes/class-wcj-eu-vat-number.php:358
1330
- #: includes/class-wcj-global-discount.php:215
1331
- #: includes/class-wcj-multicurrency-product-base-price.php:236
1332
- #: includes/class-wcj-multicurrency.php:385
1333
- #: includes/class-wcj-payment-gateways-icons.php:95
1334
- #: includes/class-wcj-payment-gateways-per-category.php:166
1335
- #: includes/class-wcj-price-by-user-role.php:370
1336
- #: includes/class-wcj-product-addons.php:642
1337
- #: includes/class-wcj-product-bookings.php:490
1338
- #: includes/class-wcj-product-by-user.php:247
1339
- #: includes/class-wcj-products-xml.php:197
1340
- #: includes/class-wcj-related-products.php:98
1341
- #: includes/class-wcj-wholesale-price.php:377
1342
- msgid "Options"
1343
- msgstr ""
1344
-
1345
  #: includes/class-wcj-checkout-files-upload.php:611
1346
- #: includes/class-wcj-products-xml.php:202
1347
  msgid "Total Files"
1348
  msgstr ""
1349
 
@@ -1365,9 +1358,9 @@ msgstr ""
1365
 
1366
  #: includes/class-wcj-checkout-files-upload.php:672
1367
  #: includes/class-wcj-checkout-files-upload.php:846
1368
- #: includes/class-wcj-order-custom-statuses.php:217
1369
- #: includes/class-wcj-order-custom-statuses.php:256
1370
- #: includes/class-wcj-orders.php:469
1371
  msgid "Label"
1372
  msgstr ""
1373
 
@@ -1404,6 +1397,7 @@ msgstr ""
1404
  #: includes/class-wcj-checkout-files-upload.php:703
1405
  #: includes/class-wcj-checkout-files-upload.php:718
1406
  #: includes/class-wcj-checkout-files-upload.php:733
 
1407
  msgid "%s will be replaced with file name"
1408
  msgstr ""
1409
 
@@ -1510,8 +1504,8 @@ msgid "Form Template Options"
1510
  msgstr ""
1511
 
1512
  #: includes/class-wcj-checkout-files-upload.php:839
1513
- #: includes/class-wcj-product-addons.php:655
1514
- #: includes/class-wcj-product-addons.php:678
1515
  msgid "Before"
1516
  msgstr ""
1517
 
@@ -1520,9 +1514,9 @@ msgid "Replaced values: %field_id%, %field_label%, %required_html%."
1520
  msgstr ""
1521
 
1522
  #: includes/class-wcj-checkout-files-upload.php:854
1523
- #: includes/class-wcj-export-import.php:356
1524
- #: includes/class-wcj-export-import.php:424
1525
- #: includes/class-wcj-export-import.php:494
1526
  msgid "Field"
1527
  msgstr ""
1528
 
@@ -1531,8 +1525,8 @@ msgid "Replaced values: %field_html%, %button_html%."
1531
  msgstr ""
1532
 
1533
  #: includes/class-wcj-checkout-files-upload.php:862
1534
- #: includes/class-wcj-product-addons.php:670
1535
- #: includes/class-wcj-product-addons.php:693
1536
  msgid "After"
1537
  msgstr ""
1538
 
@@ -1544,33 +1538,42 @@ msgstr ""
1544
  msgid "Add crowdfunding products to WooCommerce."
1545
  msgstr ""
1546
 
1547
- #: includes/class-wcj-crowdfunding.php:67
1548
  msgid "Goal"
1549
  msgstr ""
1550
 
1551
- #: includes/class-wcj-crowdfunding.php:73
1552
  #: includes/pdf-invoices/class-wcj-pdf-invoicing-renumerate-tool.php:71
1553
  msgid "Start Date"
1554
  msgstr ""
1555
 
1556
- #: includes/class-wcj-crowdfunding.php:79
1557
  msgid "Deadline"
1558
  msgstr ""
1559
 
1560
- #: includes/class-wcj-crowdfunding.php:90
1561
  msgid "When enabled, module will add Crowdfunding metabox to product edit."
1562
  msgstr ""
1563
 
1564
- #: includes/class-wcj-crowdfunding.php:92
1565
- msgid "To add crowdfunding info to the product, use these shortcodes:"
 
 
 
1566
  msgstr ""
1567
 
1568
- #: includes/class-wcj-crowdfunding.php:100
1569
- msgid "Shortcodes could be used in \"Product Info\" module."
 
 
 
1570
  msgstr ""
1571
 
1572
- #: includes/class-wcj-crowdfunding.php:102
1573
- msgid "To change add to cart button labels use \"Add to Cart Labels\" module."
 
 
 
1574
  msgstr ""
1575
 
1576
  #: includes/class-wcj-currencies.php:25
@@ -1598,18 +1601,6 @@ msgstr ""
1598
  msgid "Hide Currency Symbol"
1599
  msgstr ""
1600
 
1601
- #: includes/class-wcj-currencies.php:106 includes/class-wcj-orders.php:508
1602
- #: includes/class-wcj-pdf-invoicing.php:400
1603
- #: includes/class-wcj-product-bookings.php:496
1604
- #: includes/class-wcj-product-images.php:259
1605
- #: includes/class-wcj-product-images.php:266
1606
- #: includes/class-wcj-product-images.php:273
1607
- #: includes/class-wcj-product-images.php:280
1608
- #: includes/class-wcj-related-products.php:151
1609
- #: includes/class-wcj-shipping-calculator.php:168
1610
- msgid "Hide"
1611
- msgstr ""
1612
-
1613
  #: includes/class-wcj-currencies.php:107
1614
  msgid "Default: no."
1615
  msgstr ""
@@ -1646,70 +1637,107 @@ msgstr ""
1646
  msgid "Automatic currency exchange rates for WooCommerce."
1647
  msgstr ""
1648
 
1649
- #: includes/class-wcj-currency-exchange-rates.php:80
1650
- #: includes/class-wcj-currency-per-product.php:350
1651
- #: includes/class-wcj-multicurrency-product-base-price.php:305
1652
- #: includes/class-wcj-multicurrency.php:491
1653
- #: includes/class-wcj-payment-gateways-currency.php:275
1654
- #: includes/class-wcj-price-by-country.php:388
1655
- msgid "Grab %s rate from Yahoo.com"
1656
  msgstr ""
1657
 
1658
- #: includes/class-wcj-currency-exchange-rates.php:100
1659
- #: includes/class-wcj-products-xml.php:223
 
1660
  msgid "%s seconds till next update."
1661
  msgstr ""
1662
 
1663
- #: includes/class-wcj-currency-exchange-rates.php:106
1664
- #: includes/class-wcj-price-by-country.php:348
1665
  msgid "Exchange Rates"
1666
  msgstr ""
1667
 
1668
- #: includes/class-wcj-currency-exchange-rates.php:108
1669
  msgid ""
1670
- "All currencies from all <strong>enabled</strong> modules will be "
1671
- "automatically added to the list."
 
1672
  msgstr ""
1673
 
1674
- #: includes/class-wcj-currency-exchange-rates.php:113
1675
- #: includes/class-wcj-currency-per-product.php:286
1676
- #: includes/class-wcj-multicurrency-product-base-price.php:241
1677
- #: includes/class-wcj-multicurrency.php:390
1678
- #: includes/class-wcj-payment-gateways-currency.php:282
1679
- #: includes/class-wcj-price-by-country.php:351
1680
  msgid "Exchange Rates Updates"
1681
  msgstr ""
1682
 
1683
- #: includes/class-wcj-currency-exchange-rates.php:119
1684
- #: includes/class-wcj-products-xml.php:291
1685
  #: includes/exchange-rates/class-wcj-exchange-rates-crons.php:24
1686
  msgid "Update Every Minute"
1687
  msgstr ""
1688
 
1689
- #: includes/class-wcj-currency-exchange-rates.php:120
1690
- #: includes/class-wcj-products-xml.php:292
1691
  #: includes/exchange-rates/class-wcj-exchange-rates-crons.php:25
1692
  msgid "Update Hourly"
1693
  msgstr ""
1694
 
1695
- #: includes/class-wcj-currency-exchange-rates.php:121
1696
- #: includes/class-wcj-products-xml.php:293
1697
  #: includes/exchange-rates/class-wcj-exchange-rates-crons.php:26
1698
  msgid "Update Twice Daily"
1699
  msgstr ""
1700
 
1701
- #: includes/class-wcj-currency-exchange-rates.php:122
1702
- #: includes/class-wcj-products-xml.php:294
1703
  #: includes/exchange-rates/class-wcj-exchange-rates-crons.php:27
1704
  msgid "Update Daily"
1705
  msgstr ""
1706
 
1707
- #: includes/class-wcj-currency-exchange-rates.php:123
1708
- #: includes/class-wcj-products-xml.php:295
1709
  #: includes/exchange-rates/class-wcj-exchange-rates-crons.php:28
1710
  msgid "Update Weekly"
1711
  msgstr ""
1712
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1713
  #: includes/class-wcj-currency-external-products.php:25
1714
  msgid "Currency for External Products"
1715
  msgstr ""
@@ -1723,11 +1751,11 @@ msgid "Currency for External Products Options"
1723
  msgstr ""
1724
 
1725
  #: includes/class-wcj-currency-external-products.php:79
1726
- #: includes/class-wcj-currency-per-product.php:334
1727
- #: includes/class-wcj-multicurrency-product-base-price.php:289
1728
- #: includes/class-wcj-multicurrency.php:475
1729
- #: includes/class-wcj-price-by-country.php:338
1730
- #: includes/class-wcj-price-formats.php:142
1731
  msgid "Currency"
1732
  msgstr ""
1733
 
@@ -1743,64 +1771,142 @@ msgstr ""
1743
  msgid "Display prices for WooCommerce products in different currencies."
1744
  msgstr ""
1745
 
1746
- #: includes/class-wcj-currency-per-product.php:100
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1747
  msgctxt "Price range: from-to"
1748
  msgid "%1$s&ndash;%2$s"
1749
  msgstr ""
1750
 
1751
- #: includes/class-wcj-currency-per-product.php:236
1752
- #: includes/class-wcj-multicurrency-product-base-price.php:185
1753
  msgid "Product Currency"
1754
  msgstr ""
1755
 
1756
- #: includes/class-wcj-currency-per-product.php:238
1757
  msgid "Update product after you change this field's value."
1758
  msgstr ""
1759
 
1760
- #: includes/class-wcj-currency-per-product.php:291
1761
- #: includes/class-wcj-multicurrency-product-base-price.php:246
1762
- #: includes/class-wcj-multicurrency.php:395
1763
- #: includes/class-wcj-payment-gateways-currency.php:287
1764
- #: includes/class-wcj-price-by-country.php:356
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1765
  msgid "Enter Rates Manually"
1766
  msgstr ""
1767
 
1768
- #: includes/class-wcj-currency-per-product.php:292
1769
- #: includes/class-wcj-multicurrency-product-base-price.php:247
1770
- #: includes/class-wcj-multicurrency.php:396
1771
- #: includes/class-wcj-payment-gateways-currency.php:288
1772
- #: includes/class-wcj-price-by-country.php:357
1773
  msgid "Automatically via Currency Exchange Rates module"
1774
  msgstr ""
1775
 
1776
- #: includes/class-wcj-currency-per-product.php:295
1777
- #: includes/class-wcj-multicurrency-product-base-price.php:250
1778
- #: includes/class-wcj-multicurrency.php:399
1779
- #: includes/class-wcj-payment-gateways-currency.php:291
1780
- #: includes/class-wcj-price-by-country.php:360
1781
  msgid "Visit"
1782
  msgstr ""
1783
 
1784
- #: includes/class-wcj-currency-per-product.php:295
1785
- #: includes/class-wcj-multicurrency-product-base-price.php:250
1786
- #: includes/class-wcj-multicurrency.php:399
1787
- #: includes/class-wcj-payment-gateways-currency.php:291
1788
- #: includes/class-wcj-price-by-country.php:360
1789
  msgid "Currency Exchange Rates module"
1790
  msgstr ""
1791
 
1792
- #: includes/class-wcj-currency-per-product.php:305
1793
- #: includes/class-wcj-multicurrency-product-base-price.php:260
1794
- #: includes/class-wcj-multicurrency.php:445
1795
  msgid "Currencies Options"
1796
  msgstr ""
1797
 
1798
- #: includes/class-wcj-currency-per-product.php:310
1799
- #: includes/class-wcj-multicurrency-product-base-price.php:265
1800
- #: includes/class-wcj-multicurrency.php:451
 
 
 
 
 
 
1801
  msgid "Total Currencies"
1802
  msgstr ""
1803
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1804
  #: includes/class-wcj-emails.php:25
1805
  msgid "Emails"
1806
  msgstr ""
@@ -1810,76 +1916,88 @@ msgid ""
1810
  "Add custom emails. Add another email recipient(s) to all WooCommerce emails."
1811
  msgstr ""
1812
 
1813
- #: includes/class-wcj-emails.php:137
1814
  msgid "Booster: Email Forwarding Options"
1815
  msgstr ""
1816
 
1817
- #: includes/class-wcj-emails.php:138
1818
  msgid "Email Forwarding Options"
1819
  msgstr ""
1820
 
1821
- #: includes/class-wcj-emails.php:140
1822
  msgid ""
1823
  "This section lets you add another email recipient(s) to all WooCommerce "
1824
  "emails. Leave blank to disable."
1825
  msgstr ""
1826
 
1827
- #: includes/class-wcj-emails.php:144
1828
  msgid "Cc Email"
1829
  msgstr ""
1830
 
1831
- #: includes/class-wcj-emails.php:145
1832
  msgid "Cc to email, e.g. youremail@yourdomain.com. Leave blank to disable."
1833
  msgstr ""
1834
 
1835
- #: includes/class-wcj-emails.php:151
1836
  msgid "Bcc Email"
1837
  msgstr ""
1838
 
1839
- #: includes/class-wcj-emails.php:152
1840
  msgid "Bcc to email, e.g. youremail@yourdomain.com. Leave blank to disable."
1841
  msgstr ""
1842
 
1843
- #: includes/class-wcj-emails.php:188
1844
  msgid "Custom Emails"
1845
  msgstr ""
1846
 
1847
- #: includes/class-wcj-emails.php:191
1848
  msgid ""
1849
  "This section lets you set number of custom emails to add. After setting the "
1850
  "number, visit \"WooCommerce > Settings > Emails\" to set each email options."
1851
  msgstr ""
1852
 
1853
- #: includes/class-wcj-emails.php:194
1854
  msgid "Custom Emails Number"
1855
  msgstr ""
1856
 
1857
- #: includes/class-wcj-emails.php:205
1858
  msgid "Admin Title Custom Email"
1859
  msgstr ""
1860
 
1861
- #: includes/class-wcj-emails.php:207 includes/class-wcj-shipping.php:219
1862
  #: includes/emails/class-wc-email-wcj-custom.php:30
1863
- #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:133
1864
  #: includes/shipping/class-wc-shipping-wcj-custom.php:44
1865
  msgid "Custom"
1866
  msgstr ""
1867
 
1868
- #: includes/class-wcj-empty-cart-button.php:26
1869
- msgid "Empty Cart Button"
1870
  msgstr ""
1871
 
1872
- #: includes/class-wcj-empty-cart-button.php:27
1873
- msgid "Add and customize \"Empty Cart\" button to WooCommerce cart page."
1874
  msgstr ""
1875
 
1876
- #: includes/class-wcj-empty-cart-button.php:74
1877
- msgid "Empty Cart Options"
 
 
 
 
 
 
 
 
 
 
 
1878
  msgstr ""
1879
 
1880
- #: includes/class-wcj-empty-cart-button.php:76
1881
  msgid ""
1882
- "This section lets you add and customize \"Empty Cart\" button to cart page."
 
1883
  msgstr ""
1884
 
1885
  #: includes/class-wcj-empty-cart-button.php:80
@@ -1919,7 +2037,7 @@ msgid "Button position on the Checkout page"
1919
  msgstr ""
1920
 
1921
  #: includes/class-wcj-empty-cart-button.php:114
1922
- #: includes/class-wcj-orders.php:501
1923
  msgid "Do not add"
1924
  msgstr ""
1925
 
@@ -1940,88 +2058,171 @@ msgid "Confirmation Text (if enabled)"
1940
  msgstr ""
1941
 
1942
  #: includes/class-wcj-empty-cart-button.php:141
 
1943
  #: includes/class-wcj-product-by-user.php:165
1944
- #: includes/classes/class-wcj-module.php:472
1945
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:285
1946
  msgid "Are you sure?"
1947
  msgstr ""
1948
 
1949
- #: includes/class-wcj-eu-vat-number.php:27
1950
- #: includes/class-wcj-eu-vat-number.php:137
1951
- #: includes/class-wcj-eu-vat-number.php:365
1952
- #: includes/class-wcj-eu-vat-number.php:372
1953
  msgid "EU VAT Number"
1954
  msgstr ""
1955
 
1956
- #: includes/class-wcj-eu-vat-number.php:28
1957
  msgid ""
1958
  "Collect and validate EU VAT numbers on WooCommerce checkout. Automatically "
1959
  "disable VAT for valid numbers. Add all EU countries VAT standard rates to "
1960
  "WooCommerce."
1961
  msgstr ""
1962
 
1963
- #: includes/class-wcj-eu-vat-number.php:34
1964
  msgid "EU Countries VAT Rates"
1965
  msgstr ""
1966
 
1967
- #: includes/class-wcj-eu-vat-number.php:35
1968
  msgid "Add all EU countries VAT standard rates to WooCommerce."
1969
  msgstr ""
1970
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1971
  #: includes/class-wcj-eu-vat-number.php:301
1972
- #: includes/class-wcj-eu-vat-number.php:425
 
 
 
 
 
 
 
 
 
 
1973
  msgid "<strong>EU VAT Number</strong> is not valid."
1974
  msgstr ""
1975
 
1976
- #: includes/class-wcj-eu-vat-number.php:363
1977
  msgid "Field Label"
1978
  msgstr ""
1979
 
1980
- #: includes/class-wcj-eu-vat-number.php:370
1981
- #: includes/input-fields/class-wcj-product-input-fields-abstract.php:221
1982
  msgid "Placeholder"
1983
  msgstr ""
1984
 
1985
- #: includes/class-wcj-eu-vat-number.php:397
 
 
 
 
 
 
 
 
 
 
 
 
 
1986
  msgid "Clear"
1987
  msgstr ""
1988
 
1989
- #: includes/class-wcj-eu-vat-number.php:404
1990
  msgid "Class"
1991
  msgstr ""
1992
 
1993
- #: includes/class-wcj-eu-vat-number.php:415
1994
  msgid "Validate"
1995
  msgstr ""
1996
 
1997
- #: includes/class-wcj-eu-vat-number.php:423
1998
  msgid "Message on not valid"
1999
  msgstr ""
2000
 
2001
- #: includes/class-wcj-eu-vat-number.php:430
2002
  msgid "Exempt VAT for Valid Numbers"
2003
  msgstr ""
2004
 
2005
- #: includes/class-wcj-eu-vat-number.php:437
2006
  msgid "Preserve VAT in Base Country"
2007
  msgstr ""
2008
 
2009
- #: includes/class-wcj-eu-vat-number.php:455
2010
  msgid "Check for IP Location Country"
2011
  msgstr ""
2012
 
2013
- #: includes/class-wcj-eu-vat-number.php:473
2014
  msgid "Display"
2015
  msgstr ""
2016
 
2017
- #: includes/class-wcj-eu-vat-number.php:478
2018
  msgid "After order table"
2019
  msgstr ""
2020
 
2021
- #: includes/class-wcj-eu-vat-number.php:479
2022
  msgid "In billing address"
2023
  msgstr ""
2024
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2025
  #: includes/class-wcj-export-import.php:29
2026
  msgid "WooCommerce export tools."
2027
  msgstr ""
@@ -2070,183 +2271,201 @@ msgstr ""
2070
  msgid "Export Products."
2071
  msgstr ""
2072
 
2073
- #: includes/class-wcj-export-import.php:194
2074
- #: includes/class-wcj-export-import.php:200
2075
  msgid "Filter by Billing Country"
2076
  msgstr ""
2077
 
2078
- #: includes/class-wcj-export-import.php:195
2079
  msgid "Filter by Product Title"
2080
  msgstr ""
2081
 
2082
- #: includes/class-wcj-export-import.php:214 includes/class-wcj-orders.php:407
2083
  msgid "Filter"
2084
  msgstr ""
2085
 
2086
- #: includes/class-wcj-export-import.php:233
2087
  msgid "Download CSV"
2088
  msgstr ""
2089
 
2090
- #: includes/class-wcj-export-import.php:235
2091
  msgid "Download XML"
2092
  msgstr ""
2093
 
2094
- #: includes/class-wcj-export-import.php:236
2095
  msgid "Filter by All Fields"
2096
  msgstr ""
2097
 
2098
- #: includes/class-wcj-export-import.php:303
2099
  msgid "Export Options"
2100
  msgstr ""
2101
 
2102
- #: includes/class-wcj-export-import.php:308
2103
  msgid "CSV Separator"
2104
  msgstr ""
2105
 
2106
- #: includes/class-wcj-export-import.php:314
2107
  msgid "UTF-8 BOM"
2108
  msgstr ""
2109
 
2110
- #: includes/class-wcj-export-import.php:316
2111
  msgid "Add UTF-8 BOM sequence"
2112
  msgstr ""
2113
 
2114
- #: includes/class-wcj-export-import.php:326
2115
  msgid "Export Orders Options"
2116
  msgstr ""
2117
 
2118
- #: includes/class-wcj-export-import.php:331
2119
  msgid "Export Orders Fields"
2120
  msgstr ""
2121
 
2122
- #: includes/class-wcj-export-import.php:332
2123
- #: includes/class-wcj-export-import.php:400
2124
- #: includes/class-wcj-export-import.php:470
2125
- #: includes/class-wcj-export-import.php:538
2126
- #: includes/class-wcj-export-import.php:556
2127
  msgid "Hold \"Control\" key to select multiple fields."
2128
  msgstr ""
2129
 
2130
- #: includes/class-wcj-export-import.php:340
2131
  msgid "Additional Export Orders Fields"
2132
  msgstr ""
2133
 
2134
- #: includes/class-wcj-export-import.php:363
2135
- #: includes/class-wcj-export-import.php:431
2136
- #: includes/class-wcj-export-import.php:501
2137
  #: includes/class-wcj-product-by-user.php:156
2138
- #: includes/class-wcj-product-tabs.php:421
2139
- #: includes/class-wcj-product-tabs.php:542
2140
- #: includes/class-wcj-purchase-data.php:323
2141
- #: includes/class-wcj-related-products.php:123
2142
  #: includes/gateways/class-wc-gateway-wcj-custom.php:68
2143
- #: includes/input-fields/class-wcj-product-input-fields-abstract.php:214
2144
- #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:113
2145
  #: includes/shipping/class-wc-shipping-wcj-custom.php:82
2146
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:259
2147
  msgid "Title"
2148
  msgstr ""
2149
 
2150
- #: includes/class-wcj-export-import.php:369
2151
- #: includes/class-wcj-export-import.php:437
2152
- #: includes/class-wcj-export-import.php:507
2153
- #: includes/class-wcj-global-discount.php:250
2154
- #: includes/class-wcj-product-addons.php:466
2155
- #: includes/class-wcj-product-addons.php:583
2156
- #: includes/class-wcj-purchase-data.php:330
2157
- #: includes/export/class-wcj-fields-helper.php:289
 
2158
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:44
2159
- #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:120
2160
  #: includes/shipping/class-wc-shipping-wcj-custom.php:89
2161
  msgid "Type"
2162
  msgstr ""
2163
 
2164
- #: includes/class-wcj-export-import.php:375
2165
- #: includes/class-wcj-export-import.php:443
2166
  msgid "Order Shortcode"
2167
  msgstr ""
2168
 
2169
- #: includes/class-wcj-export-import.php:379
2170
- #: includes/class-wcj-export-import.php:449
2171
- #: includes/class-wcj-export-import.php:517
2172
- #: includes/class-wcj-global-discount.php:260
2173
- #: includes/class-wcj-orders.php:476
2174
  msgid "Value"
2175
  msgstr ""
2176
 
2177
- #: includes/class-wcj-export-import.php:380
2178
  msgid ""
2179
  "If field's \"Type\" is set to \"Meta\", enter order meta key to retrieve "
2180
  "(can be custom field name)."
2181
  msgstr ""
2182
 
2183
- #: includes/class-wcj-export-import.php:381
2184
  msgid "If it's set to \"Shortcode\", use Booster's Orders shortcodes here."
2185
  msgstr ""
2186
 
2187
- #: includes/class-wcj-export-import.php:394
2188
  msgid "Export Orders Items Options"
2189
  msgstr ""
2190
 
2191
- #: includes/class-wcj-export-import.php:399
2192
  msgid "Export Orders Items Fields"
2193
  msgstr ""
2194
 
2195
- #: includes/class-wcj-export-import.php:408
2196
  msgid "Additional Export Orders Items Fields"
2197
  msgstr ""
2198
 
2199
- #: includes/class-wcj-export-import.php:445
2200
- #: includes/class-wcj-export-import.php:513
2201
  msgid "Product Shortcode"
2202
  msgstr ""
2203
 
2204
- #: includes/class-wcj-export-import.php:450
2205
  msgid ""
2206
  "If field's \"Type\" is set to \"Meta\", enter order/product meta key to "
2207
  "retrieve (can be custom field name)."
2208
  msgstr ""
2209
 
2210
- #: includes/class-wcj-export-import.php:451
2211
  msgid ""
2212
  "If it's set to \"Shortcode\", use Booster's Orders/Products shortcodes here."
2213
  msgstr ""
2214
 
2215
- #: includes/class-wcj-export-import.php:464
2216
  msgid "Export Products Options"
2217
  msgstr ""
2218
 
2219
- #: includes/class-wcj-export-import.php:469
2220
  msgid "Export Products Fields"
2221
  msgstr ""
2222
 
2223
- #: includes/class-wcj-export-import.php:478
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2224
  msgid "Additional Export Products Fields"
2225
  msgstr ""
2226
 
2227
- #: includes/class-wcj-export-import.php:518
2228
  msgid ""
2229
  "If field's \"Type\" is set to \"Meta\", enter product meta key to retrieve "
2230
  "(can be custom field name)."
2231
  msgstr ""
2232
 
2233
- #: includes/class-wcj-export-import.php:519
2234
  msgid "If it's set to \"Shortcode\", use Booster's Products shortcodes here."
2235
  msgstr ""
2236
 
2237
- #: includes/class-wcj-export-import.php:532
2238
  msgid "Export Customers Options"
2239
  msgstr ""
2240
 
2241
- #: includes/class-wcj-export-import.php:537
2242
  msgid "Export Customers Fields"
2243
  msgstr ""
2244
 
2245
- #: includes/class-wcj-export-import.php:550
2246
  msgid "Export Customers from Orders Options"
2247
  msgstr ""
2248
 
2249
- #: includes/class-wcj-export-import.php:555
2250
  msgid "Export Customers from Orders Fields"
2251
  msgstr ""
2252
 
@@ -2258,59 +2477,57 @@ msgstr ""
2258
  msgid "WooCommerce free price labels."
2259
  msgstr ""
2260
 
2261
- #: includes/class-wcj-free-price.php:72 includes/class-wcj-free-price.php:85
2262
- #: includes/class-wcj-free-price.php:95 includes/class-wcj-free-price.php:105
2263
- #: includes/class-wcj-free-price.php:152
2264
  msgid "Free!"
2265
  msgstr ""
2266
 
2267
- #: includes/class-wcj-free-price.php:127
2268
- msgid "Labels can contain shortcodes."
2269
- msgstr ""
2270
-
2271
- #: includes/class-wcj-free-price.php:138
2272
  msgid "Simple and Custom Products"
2273
  msgstr ""
2274
 
2275
- #: includes/class-wcj-free-price.php:139
2276
- msgid "Variable Products"
2277
- msgstr ""
2278
-
2279
- #: includes/class-wcj-free-price.php:140
2280
  msgid "Grouped Products"
2281
  msgstr ""
2282
 
2283
- #: includes/class-wcj-free-price.php:141
2284
- #: includes/class-wcj-product-add-to-cart.php:477
2285
  msgid "External Products"
2286
  msgstr ""
2287
 
2288
- #: includes/class-wcj-free-price.php:144
2289
  msgid "Single Product Page"
2290
  msgstr ""
2291
 
2292
- #: includes/class-wcj-free-price.php:145
2293
- #: includes/class-wcj-related-products.php:25
 
2294
  msgid "Related Products"
2295
  msgstr ""
2296
 
2297
- #: includes/class-wcj-free-price.php:146
2298
  msgid "Homepage"
2299
  msgstr ""
2300
 
2301
- #: includes/class-wcj-free-price.php:147
2302
  msgid "Pages (e.g. Shortcodes)"
2303
  msgstr ""
2304
 
2305
- #: includes/class-wcj-free-price.php:148
2306
  msgid "Archives (Product Categories)"
2307
  msgstr ""
2308
 
2309
- #: includes/class-wcj-free-price.php:162
 
 
 
 
2310
  msgid "Variations"
2311
  msgstr ""
2312
 
2313
  #: includes/class-wcj-general.php:25 includes/class-wcj-pdf-invoicing.php:26
 
2314
  msgid "General"
2315
  msgstr ""
2316
 
@@ -2321,7 +2538,7 @@ msgid ""
2321
  msgstr ""
2322
 
2323
  #: includes/class-wcj-general.php:32
2324
- msgid "Products Atts"
2325
  msgstr ""
2326
 
2327
  #: includes/class-wcj-general.php:33
@@ -2340,195 +2557,212 @@ msgstr ""
2340
  msgid "Manage Custom Roles."
2341
  msgstr ""
2342
 
2343
- #: includes/class-wcj-general.php:106
2344
  msgid "Both fields are required!"
2345
  msgstr ""
2346
 
2347
- #: includes/class-wcj-general.php:109
2348
  msgid "Role ID must not be numbers only!"
2349
  msgstr ""
2350
 
2351
- #: includes/class-wcj-general.php:113
2352
  msgid "Role successfully added!"
2353
  msgstr ""
2354
 
2355
- #: includes/class-wcj-general.php:115
2356
  msgid "Role already exists!"
2357
  msgstr ""
2358
 
2359
- #: includes/class-wcj-general.php:123
 
2360
  msgid "Role %s successfully deleted!"
2361
  msgstr ""
2362
 
2363
- #: includes/class-wcj-general.php:129 includes/class-wcj-general.php:142
2364
- #: includes/class-wcj-sku.php:166
2365
- #: includes/reports/wcj-class-reports-sales.php:170
2366
  msgid "ID"
2367
  msgstr ""
2368
 
2369
- #: includes/class-wcj-general.php:129 includes/class-wcj-general.php:143
2370
- #: includes/export/class-wcj-fields-helper.php:282
2371
  #: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:72
2372
  #: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:106
2373
  msgid "Name"
2374
  msgstr ""
2375
 
2376
- #: includes/class-wcj-general.php:129
 
2377
  #: includes/class-wcj-product-by-user.php:156
2378
  msgid "Actions"
2379
  msgstr ""
2380
 
2381
- #: includes/class-wcj-general.php:135
2382
- #: includes/class-wcj-order-custom-statuses.php:220
2383
- #: includes/class-wcj-order-custom-statuses.php:242
2384
  #: includes/class-wcj-product-by-user.php:165
2385
  #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-display.php:151
2386
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:285
2387
  msgid "Delete"
2388
  msgstr ""
2389
 
2390
- #: includes/class-wcj-general.php:138
2391
  msgid "Existing Roles"
2392
  msgstr ""
2393
 
2394
- #: includes/class-wcj-general.php:144
2395
  msgid "Add New Role"
2396
  msgstr ""
2397
 
2398
- #: includes/class-wcj-general.php:163
2399
  msgid "PayPal Email"
2400
  msgstr ""
2401
 
2402
- #: includes/class-wcj-general.php:228 includes/class-wcj-general.php:270
2403
- #: includes/class-wcj-product-bulk-price-converter.php:149
2404
- #: includes/class-wcj-sku.php:243
2405
- #: includes/reports/wcj-class-reports-sales.php:171
2406
- #: includes/reports/wcj-class-reports-stock.php:319
2407
  msgid "Product"
2408
  msgstr ""
2409
 
2410
- #: includes/class-wcj-general.php:229 includes/class-wcj-general.php:271
2411
- #: includes/reports/wcj-class-reports-stock.php:320
2412
  msgid "Category"
2413
  msgstr ""
2414
 
2415
- #: includes/class-wcj-general.php:291
2416
  msgid "Total Products:"
2417
  msgstr ""
2418
 
2419
- #: includes/class-wcj-general.php:336
2420
  msgid "Shortcodes Options"
2421
  msgstr ""
2422
 
2423
- #: includes/class-wcj-general.php:341
2424
  msgid "Enable All Shortcodes in WordPress Text Widgets"
2425
  msgstr ""
2426
 
2427
- #: includes/class-wcj-general.php:342
2428
  msgid ""
2429
  "This will enable all (including non Booster's) shortcodes in WordPress text "
2430
  "widgets."
2431
  msgstr ""
2432
 
2433
- #: includes/class-wcj-general.php:349
2434
  msgid "Disable Booster's Shortcodes"
2435
  msgstr ""
2436
 
2437
- #: includes/class-wcj-general.php:350
2438
  msgid "Disable all Booster's shortcodes (for memory saving)."
2439
  msgstr ""
2440
 
2441
- #: includes/class-wcj-general.php:351 includes/class-wcj-general.php:414
2442
- #: includes/class-wcj-general.php:428 includes/class-wcj-general.php:435
2443
- #: includes/class-wcj-general.php:442 includes/class-wcj-general.php:449
2444
- #: includes/class-wcj-product-add-to-cart.php:247
 
2445
  msgid "Disable"
2446
  msgstr ""
2447
 
2448
- #: includes/class-wcj-general.php:361
2449
- msgid "Custom CSS Options"
2450
- msgstr ""
2451
-
2452
- #: includes/class-wcj-general.php:363
2453
- msgid "Another custom CSS, if you need one."
2454
- msgstr ""
2455
-
2456
- #: includes/class-wcj-general.php:367
2457
- msgid "Custom CSS - Front end (Customers)"
2458
- msgstr ""
2459
-
2460
- #: includes/class-wcj-general.php:374
2461
- msgid "Custom CSS - Back end (Admin)"
2462
- msgstr ""
2463
-
2464
- #: includes/class-wcj-general.php:385 includes/class-wcj-general.php:390
2465
  msgid "Product Revisions"
2466
  msgstr ""
2467
 
2468
- #: includes/class-wcj-general.php:401
2469
  msgid "Advanced Options"
2470
  msgstr ""
2471
 
2472
- #: includes/class-wcj-general.php:406
2473
  msgid "Recalculate Cart Totals on Every Page Load"
2474
  msgstr ""
2475
 
2476
- #: includes/class-wcj-general.php:413
2477
  msgid "Disable Loading Datepicker/Weekpicker CSS"
2478
  msgstr ""
2479
 
2480
- #: includes/class-wcj-general.php:420
2481
  msgid "Datepicker/Weekpicker CSS"
2482
  msgstr ""
2483
 
2484
- #: includes/class-wcj-general.php:427
2485
  msgid "Disable Loading Datepicker/Weekpicker JavaScript"
2486
  msgstr ""
2487
 
2488
- #: includes/class-wcj-general.php:434
2489
  msgid "Disable Loading Timepicker CSS"
2490
  msgstr ""
2491
 
2492
- #: includes/class-wcj-general.php:441
2493
  msgid "Disable Loading Timepicker JavaScript"
2494
  msgstr ""
2495
 
2496
- #: includes/class-wcj-general.php:448
2497
  msgid "Disable Saving PDFs in PHP directory for temporary files"
2498
  msgstr ""
2499
 
2500
- #: includes/class-wcj-general.php:459
2501
  msgid "PayPal Email per Product Options"
2502
  msgstr ""
2503
 
2504
- #: includes/class-wcj-general.php:464
2505
  msgid "PayPal Email per Product"
2506
  msgstr ""
2507
 
2508
- #: includes/class-wcj-general.php:466
2509
  msgid "This will add new meta box to each product's edit page."
2510
  msgstr ""
2511
 
2512
- #: includes/class-wcj-general.php:476
2513
  msgid "Session Expiration Options"
2514
  msgstr ""
2515
 
2516
- #: includes/class-wcj-general.php:481 includes/class-wcj-general.php:496
2517
  msgid "Session Expiration"
2518
  msgstr ""
2519
 
2520
- #: includes/class-wcj-general.php:488
2521
  msgid "Session Expiring"
2522
  msgstr ""
2523
 
2524
- #: includes/class-wcj-general.php:489
2525
  msgid "In seconds. Default: 47 hours (60 * 60 * 47)"
2526
  msgstr ""
2527
 
2528
- #: includes/class-wcj-general.php:497
2529
  msgid "In seconds. Default: 48 hours (60 * 60 * 48)"
2530
  msgstr ""
2531
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2532
  #: includes/class-wcj-global-discount.php:28
2533
  msgid "Global Discount"
2534
  msgstr ""
@@ -2537,57 +2771,64 @@ msgstr ""
2537
  msgid "Add global discount to all WooCommerce products."
2538
  msgstr ""
2539
 
2540
- #: includes/class-wcj-global-discount.php:220
2541
  msgid "Total Groups"
2542
  msgstr ""
2543
 
2544
- #: includes/class-wcj-global-discount.php:224
2545
- #: includes/class-wcj-products-xml.php:206
2546
  #: includes/shipping/class-wc-shipping-wcj-custom.php:112
2547
  msgid "Press Save changes after you change this number."
2548
  msgstr ""
2549
 
2550
- #: includes/class-wcj-global-discount.php:238
2551
  msgid "Discount Group"
2552
  msgstr ""
2553
 
2554
- #: includes/class-wcj-global-discount.php:255
2555
- #: includes/class-wcj-payment-gateways-fees.php:165
2556
- #: includes/class-wcj-purchase-data.php:335
2557
- #: includes/class-wcj-wholesale-price.php:250
2558
- #: includes/class-wcj-wholesale-price.php:424
2559
  msgid "Percent"
2560
  msgstr ""
2561
 
2562
- #: includes/class-wcj-global-discount.php:256
2563
- #: includes/class-wcj-payment-gateways-fees.php:164
2564
- #: includes/class-wcj-purchase-data.php:334
2565
- #: includes/class-wcj-wholesale-price.php:251
2566
- #: includes/class-wcj-wholesale-price.php:425
2567
  msgid "Fixed"
2568
  msgstr ""
2569
 
2570
- #: includes/class-wcj-global-discount.php:261
2571
  msgid "Must be negative number."
2572
  msgstr ""
2573
 
2574
- #: includes/class-wcj-global-discount.php:268
2575
  msgid "Product Scope"
2576
  msgstr ""
2577
 
2578
- #: includes/class-wcj-global-discount.php:273
 
 
2579
  msgid "All products"
2580
  msgstr ""
2581
 
2582
- #: includes/class-wcj-global-discount.php:274
2583
  msgid "Only products that are already on sale"
2584
  msgstr ""
2585
 
2586
- #: includes/class-wcj-global-discount.php:278
 
 
 
 
 
2587
  msgid "Include Product Categories"
2588
  msgstr ""
2589
 
2590
- #: includes/class-wcj-global-discount.php:279
2591
  msgid ""
2592
  "Set this field to apply discount to selected categories only. Leave blank to "
2593
  "apply to all categories."
@@ -2605,88 +2846,96 @@ msgstr ""
2605
  #: includes/class-wcj-left-to-free-shipping.php:66
2606
  #: includes/class-wcj-left-to-free-shipping.php:76
2607
  #: includes/class-wcj-left-to-free-shipping.php:86
2608
- #: includes/class-wcj-left-to-free-shipping.php:148
2609
- #: includes/class-wcj-left-to-free-shipping.php:182
2610
- #: includes/class-wcj-left-to-free-shipping.php:220
2611
- #: includes/functions/wcj-functions.php:548
2612
  #: includes/widgets/class-wcj-widget-left-to-free-shipping.php:53
 
2613
  msgid "%left_to_free% left to free shipping"
2614
  msgstr ""
2615
 
2616
- #: includes/class-wcj-left-to-free-shipping.php:130
2617
  msgid "Left to Free Shipping Info Options"
2618
  msgstr ""
2619
 
2620
- #: includes/class-wcj-left-to-free-shipping.php:132
2621
  msgid ""
2622
  "This section lets you enable info on cart, mini cart and checkout pages."
2623
  msgstr ""
2624
 
2625
- #: includes/class-wcj-left-to-free-shipping.php:133
2626
  msgid ""
2627
  "You can also use <em>Booster - Left to Free Shipping</em> widget, <em>"
2628
  "[wcj_get_left_to_free_shipping content=\"\"]</em> shortcode or "
2629
  "<em>wcj_get_left_to_free_shipping( $content );</em> function."
2630
  msgstr ""
2631
 
2632
- #: includes/class-wcj-left-to-free-shipping.php:134
2633
  msgid ""
2634
  "In content you can use: <em>%left_to_free%</em> and <em>"
2635
  "%free_shipping_min_amount%</em> shortcodes."
2636
  msgstr ""
2637
 
2638
- #: includes/class-wcj-left-to-free-shipping.php:138
2639
  msgid "Info on Cart"
2640
  msgstr ""
2641
 
2642
- #: includes/class-wcj-left-to-free-shipping.php:163
2643
- #: includes/class-wcj-left-to-free-shipping.php:201
2644
- #: includes/class-wcj-left-to-free-shipping.php:245
 
 
 
 
 
 
 
2645
  msgid "Position Order (Priority)"
2646
  msgstr ""
2647
 
2648
- #: includes/class-wcj-left-to-free-shipping.php:170
2649
  msgid "Info on Mini Cart"
2650
  msgstr ""
2651
 
2652
- #: includes/class-wcj-left-to-free-shipping.php:193
2653
  #: includes/class-wcj-mini-cart.php:119
2654
  msgid "Before mini cart"
2655
  msgstr ""
2656
 
2657
- #: includes/class-wcj-left-to-free-shipping.php:194
2658
  #: includes/class-wcj-mini-cart.php:120
2659
  msgid "Before buttons"
2660
  msgstr ""
2661
 
2662
- #: includes/class-wcj-left-to-free-shipping.php:195
2663
  #: includes/class-wcj-mini-cart.php:121
2664
  msgid "After mini cart"
2665
  msgstr ""
2666
 
2667
- #: includes/class-wcj-left-to-free-shipping.php:208
2668
  msgid "Info on Checkout"
2669
  msgstr ""
2670
 
2671
- #: includes/class-wcj-left-to-free-shipping.php:252
2672
  msgid "Message on Free Shipping Reached"
2673
  msgstr ""
2674
 
2675
- #: includes/class-wcj-left-to-free-shipping.php:253
2676
- msgid "You can set it empty"
2677
  msgstr ""
2678
 
2679
- #: includes/class-wcj-left-to-free-shipping.php:255
2680
- #: includes/functions/wcj-functions.php:588
2681
  msgid "You have Free delivery"
2682
  msgstr ""
2683
 
2684
  #: includes/class-wcj-mini-cart.php:26
2685
- msgid "Mini Cart"
2686
  msgstr ""
2687
 
2688
  #: includes/class-wcj-mini-cart.php:27
2689
- msgid "Customize WooCommerce mini cart widget."
2690
  msgstr ""
2691
 
2692
  #: includes/class-wcj-mini-cart.php:74
@@ -2701,15 +2950,15 @@ msgstr ""
2701
  msgid "Set WooCommerce \"Place order\" button label."
2702
  msgstr ""
2703
 
2704
- #: includes/class-wcj-more-button-labels.php:52
2705
  msgid "Place order (Order now) Button"
2706
  msgstr ""
2707
 
2708
- #: includes/class-wcj-more-button-labels.php:59
2709
- msgid "leave blank for WooCommerce default"
2710
  msgstr ""
2711
 
2712
- #: includes/class-wcj-more-button-labels.php:60
2713
  msgid "Button on the checkout page."
2714
  msgstr ""
2715
 
@@ -2732,8 +2981,8 @@ msgstr ""
2732
  #: includes/class-wcj-multicurrency.php:76
2733
  #: includes/class-wcj-price-by-user-role.php:163
2734
  #: includes/class-wcj-product-by-user.php:205
2735
- #: includes/export/class-wcj-fields-helper.php:286
2736
- #: includes/price-by-country/class-wcj-price-by-country-local.php:129
2737
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:154
2738
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:298
2739
  msgid "Regular Price"
@@ -2742,14 +2991,14 @@ msgstr ""
2742
  #: includes/class-wcj-multicurrency.php:85
2743
  #: includes/class-wcj-price-by-user-role.php:172
2744
  #: includes/class-wcj-product-by-user.php:206
2745
- #: includes/export/class-wcj-fields-helper.php:287
2746
- #: includes/price-by-country/class-wcj-price-by-country-local.php:136
2747
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:155
2748
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:306
2749
  msgid "Sale Price"
2750
  msgstr ""
2751
 
2752
- #: includes/class-wcj-multicurrency.php:371
2753
  msgid ""
2754
  "After setting currencies in the Currencies Options below, use <em>Booster - "
2755
  "Multicurrency Switcher</em> widget, or <em>"
@@ -2758,83 +3007,86 @@ msgid ""
2758
  "( '[wcj_currency_select_drop_down_list]' );</em>"
2759
  msgstr ""
2760
 
2761
- #: includes/class-wcj-multicurrency.php:405
2762
  msgid "Multicurrency on per Product Basis"
2763
  msgstr ""
2764
 
2765
- #: includes/class-wcj-multicurrency.php:407
2766
  msgid "This will add meta boxes in product edit."
2767
  msgstr ""
2768
 
2769
- #: includes/class-wcj-multicurrency.php:413
2770
- #: includes/class-wcj-price-by-country.php:184
2771
  msgid "Revert Currency to Default on Checkout"
2772
  msgstr ""
2773
 
2774
- #: includes/class-wcj-multicurrency.php:420
 
2775
  msgid "Rounding"
2776
  msgstr ""
2777
 
2778
- #: includes/class-wcj-multicurrency.php:421
2779
  msgid "If using exchange rates, choose rounding here."
2780
  msgstr ""
2781
 
2782
- #: includes/class-wcj-multicurrency.php:426
2783
- #: includes/class-wcj-price-by-country.php:198
2784
  msgid "No rounding"
2785
  msgstr ""
2786
 
2787
- #: includes/class-wcj-multicurrency.php:427
2788
- #: includes/class-wcj-price-by-country.php:199
2789
  msgid "Round"
2790
  msgstr ""
2791
 
2792
- #: includes/class-wcj-multicurrency.php:428
2793
- #: includes/class-wcj-price-by-country.php:201
2794
  msgid "Round up"
2795
  msgstr ""
2796
 
2797
- #: includes/class-wcj-multicurrency.php:429
2798
- #: includes/class-wcj-price-by-country.php:200
2799
  msgid "Round down"
2800
  msgstr ""
2801
 
2802
- #: includes/class-wcj-multicurrency.php:433
 
2803
  msgid "Rounding Precision"
2804
  msgstr ""
2805
 
2806
- #: includes/class-wcj-multicurrency.php:434
2807
  msgid "If rounding enabled, set precision here."
2808
  msgstr ""
2809
 
2810
- #: includes/class-wcj-multicurrency.php:447
2811
  msgid ""
2812
  "One currency probably should be set to current (original) shop currency with "
2813
  "an exchange rate of 1."
2814
  msgstr ""
2815
 
2816
- #: includes/class-wcj-multicurrency.php:503
2817
  msgid "Role Defaults"
2818
  msgstr ""
2819
 
2820
- #: includes/class-wcj-multicurrency.php:505
2821
- #: includes/class-wcj-order-min-amount.php:263
2822
- #: includes/class-wcj-price-by-user-role.php:414
 
2823
  msgid ""
2824
  "Custom roles can be added via \"Add/Manage Custom Roles\" tool in Booster's "
2825
  "<a href=\"%s\">General</a> module."
2826
  msgstr ""
2827
 
2828
- #: includes/class-wcj-multicurrency.php:510
2829
  msgid "Roles"
2830
  msgstr ""
2831
 
2832
- #: includes/class-wcj-multicurrency.php:511
2833
- #: includes/class-wcj-wholesale-price.php:497
2834
  msgid "Save settings after you change this option. Leave blank to disable."
2835
  msgstr ""
2836
 
2837
- #: includes/class-wcj-multicurrency.php:534
2838
  msgid "No default currency"
2839
  msgstr ""
2840
 
@@ -2850,23 +3102,23 @@ msgstr ""
2850
  msgid "Remove Old Slugs"
2851
  msgstr ""
2852
 
2853
- #: includes/class-wcj-old-slugs.php:33 includes/class-wcj-old-slugs.php:90
2854
  msgid "Tool removes old slugs/permalinks from database."
2855
  msgstr ""
2856
 
2857
- #: includes/class-wcj-old-slugs.php:89
2858
  msgid "Booster - Remove Old Product Slugs"
2859
  msgstr ""
2860
 
2861
- #: includes/class-wcj-old-slugs.php:95
2862
  msgid "Old products slugs found:"
2863
  msgstr ""
2864
 
2865
- #: includes/class-wcj-old-slugs.php:103
2866
  msgid "None-products slugs found:"
2867
  msgstr ""
2868
 
2869
- #: includes/class-wcj-old-slugs.php:110
2870
  msgid "No old slugs found."
2871
  msgstr ""
2872
 
@@ -2879,7 +3131,7 @@ msgid "Custom statuses for WooCommerce orders."
2879
  msgstr ""
2880
 
2881
  #: includes/class-wcj-order-custom-statuses.php:33
2882
- #: includes/class-wcj-order-custom-statuses.php:311
2883
  msgid "Custom Statuses"
2884
  msgstr ""
2885
 
@@ -2887,151 +3139,198 @@ msgstr ""
2887
  msgid "Tool lets you add or delete any custom status for WooCommerce orders."
2888
  msgstr ""
2889
 
2890
- #: includes/class-wcj-order-custom-statuses.php:64
2891
  msgctxt "Order status"
2892
  msgid "Pending payment"
2893
  msgstr ""
2894
 
2895
- #: includes/class-wcj-order-custom-statuses.php:65
2896
- #: includes/functions/wcj-functions.php:1160
2897
  msgctxt "Order status"
2898
  msgid "Processing"
2899
  msgstr ""
2900
 
2901
- #: includes/class-wcj-order-custom-statuses.php:66
2902
  msgctxt "Order status"
2903
  msgid "On hold"
2904
  msgstr ""
2905
 
2906
- #: includes/class-wcj-order-custom-statuses.php:67
2907
- #: includes/functions/wcj-functions.php:1162
2908
  msgctxt "Order status"
2909
  msgid "Completed"
2910
  msgstr ""
2911
 
2912
- #: includes/class-wcj-order-custom-statuses.php:68
2913
- #: includes/functions/wcj-functions.php:1163
2914
  msgctxt "Order status"
2915
  msgid "Cancelled"
2916
  msgstr ""
2917
 
2918
- #: includes/class-wcj-order-custom-statuses.php:69
2919
- #: includes/functions/wcj-functions.php:1164
2920
  msgctxt "Order status"
2921
  msgid "Refunded"
2922
  msgstr ""
2923
 
2924
- #: includes/class-wcj-order-custom-statuses.php:70
2925
- #: includes/functions/wcj-functions.php:1165
2926
  msgctxt "Order status"
2927
  msgid "Failed"
2928
  msgstr ""
2929
 
2930
- #: includes/class-wcj-order-custom-statuses.php:160
 
 
 
 
 
 
 
2931
  msgid "Status slug is empty. Status was not added!"
2932
  msgstr ""
2933
 
2934
- #: includes/class-wcj-order-custom-statuses.php:163
2935
  msgid ""
2936
  "The length of status slug must be 17 or less characters. Status was not "
2937
  "added!"
2938
  msgstr ""
2939
 
2940
- #: includes/class-wcj-order-custom-statuses.php:166
2941
  msgid "Status label is empty. Status was not added!"
2942
  msgstr ""
2943
 
2944
- #: includes/class-wcj-order-custom-statuses.php:173
2945
  msgid "Duplicate slug. Status was not added!"
2946
  msgstr ""
2947
 
2948
- #: includes/class-wcj-order-custom-statuses.php:183
 
 
 
 
2949
  msgid "New status has been successfully added!"
2950
  msgstr ""
2951
 
2952
- #: includes/class-wcj-order-custom-statuses.php:185
2953
  msgid "Status was not added."
2954
  msgstr ""
2955
 
2956
- #: includes/class-wcj-order-custom-statuses.php:203
 
 
 
 
 
 
 
 
 
 
 
 
2957
  msgid "Status has been successfully deleted."
2958
  msgstr ""
2959
 
2960
- #: includes/class-wcj-order-custom-statuses.php:205
2961
  msgid "Delete failed."
2962
  msgstr ""
2963
 
2964
- #: includes/class-wcj-order-custom-statuses.php:210
2965
  msgid "Booster - Custom Statuses"
2966
  msgstr ""
2967
 
2968
- #: includes/class-wcj-order-custom-statuses.php:211
2969
  msgid ""
2970
  "The tool lets you add or delete any custom status for WooCommerce orders."
2971
  msgstr ""
2972
 
2973
- #: includes/class-wcj-order-custom-statuses.php:213
2974
  msgid "Statuses"
2975
  msgstr ""
2976
 
2977
- #: includes/class-wcj-order-custom-statuses.php:216
2978
  msgid "Slug"
2979
  msgstr ""
2980
 
2981
- #: includes/class-wcj-order-custom-statuses.php:218
2982
- #: includes/class-wcj-order-custom-statuses.php:257
2983
  msgid "Icon Code"
2984
  msgstr ""
2985
 
2986
- #: includes/class-wcj-order-custom-statuses.php:219
2987
- #: includes/class-wcj-order-custom-statuses.php:259
2988
  msgid "Icon Color"
2989
  msgstr ""
2990
 
2991
- #: includes/class-wcj-order-custom-statuses.php:255
 
 
 
 
 
 
 
 
 
 
 
2992
  msgid "Slug (without wc- prefix)"
2993
  msgstr ""
2994
 
2995
- #: includes/class-wcj-order-custom-statuses.php:258
 
2996
  msgid "You can check icon codes <a target=\"_blank\" href=\"%s\">here</a>."
2997
  msgstr ""
2998
 
2999
- #: includes/class-wcj-order-custom-statuses.php:261
 
 
 
 
3000
  msgid "Add new custom status"
3001
  msgstr ""
3002
 
3003
- #: includes/class-wcj-order-custom-statuses.php:283
3004
- #: includes/class-wcj-order-custom-statuses.php:284
3005
  msgid "Mark"
3006
  msgstr ""
3007
 
3008
- #: includes/class-wcj-order-custom-statuses.php:316
3009
  #: includes/gateways/class-wc-gateway-wcj-custom.php:138
3010
  msgid "Default Order Status"
3011
  msgstr ""
3012
 
3013
- #: includes/class-wcj-order-custom-statuses.php:317
3014
  #: includes/gateways/class-wc-gateway-wcj-custom.php:139
3015
  msgid "Enable Custom Statuses feature to add custom statuses to the list."
3016
  msgstr ""
3017
 
3018
- #: includes/class-wcj-order-custom-statuses.php:318
3019
  msgid ""
3020
  "You can change the default order status here. However payment gateways can "
3021
  "change this status immediatelly on order creation. E.g. BACS gateway will "
3022
  "change status to On-hold."
3023
  msgstr ""
3024
 
3025
- #: includes/class-wcj-order-custom-statuses.php:325
3026
  msgid "Add All Statuses to Admin Order Bulk Actions"
3027
  msgstr ""
3028
 
3029
- #: includes/class-wcj-order-custom-statuses.php:332
3030
  msgid "Add Custom Statuses to Admin Reports"
3031
  msgstr ""
3032
 
 
 
 
 
 
 
 
 
3033
  #: includes/class-wcj-order-min-amount.php:27
3034
- #: includes/class-wcj-order-min-amount.php:198
3035
  msgid "Order Minimum Amount"
3036
  msgstr ""
3037
 
@@ -3039,61 +3338,62 @@ msgstr ""
3039
  msgid "Minimum WooCommerce order amount (optionally by user role)."
3040
  msgstr ""
3041
 
3042
- #: includes/class-wcj-order-min-amount.php:200
3043
  msgid "This section lets you set minimum order amount."
3044
  msgstr ""
3045
 
3046
- #: includes/class-wcj-order-min-amount.php:204
3047
  msgid "Amount"
3048
  msgstr ""
3049
 
3050
- #: includes/class-wcj-order-min-amount.php:205
3051
  msgid "Minimum order amount. Set to 0 to disable."
3052
  msgstr ""
3053
 
3054
- #: includes/class-wcj-order-min-amount.php:215
3055
  msgid "Exclude Shipping from Cart Total"
3056
  msgstr ""
3057
 
3058
- #: includes/class-wcj-order-min-amount.php:216
3059
  msgid "Exclude"
3060
  msgstr ""
3061
 
3062
- #: includes/class-wcj-order-min-amount.php:222
3063
  msgid "Error message"
3064
  msgstr ""
3065
 
3066
- #: includes/class-wcj-order-min-amount.php:224
3067
- #: includes/class-wcj-order-min-amount.php:241
 
3068
  msgid ""
3069
  "Message to customer if order is below minimum amount. Default: You must have "
3070
  "an order with a minimum of %s to place your order, your current order total "
3071
  "is %s."
3072
  msgstr ""
3073
 
3074
- #: includes/class-wcj-order-min-amount.php:232
3075
  msgid "Add notice to cart page also"
3076
  msgstr ""
3077
 
3078
- #: includes/class-wcj-order-min-amount.php:239
3079
  msgid "Message on cart page"
3080
  msgstr ""
3081
 
3082
- #: includes/class-wcj-order-min-amount.php:249
3083
  msgid ""
3084
  "Stop customer from seeing the Checkout page if minimum amount not reached."
3085
  msgstr ""
3086
 
3087
- #: includes/class-wcj-order-min-amount.php:250
3088
  msgid "Redirect back to Cart page"
3089
  msgstr ""
3090
 
3091
- #: includes/class-wcj-order-min-amount.php:260
3092
  msgid "Order Minimum Amount by User Role"
3093
  msgstr ""
3094
 
3095
  #: includes/class-wcj-order-numbers.php:25
3096
- #: includes/class-wcj-order-numbers.php:203
3097
  msgid "Order Numbers"
3098
  msgstr ""
3099
 
@@ -3111,61 +3411,77 @@ msgstr ""
3111
  msgid "Tool renumerates all orders."
3112
  msgstr ""
3113
 
3114
- #: includes/class-wcj-order-numbers.php:114
3115
  msgid "Orders successfully renumerated!"
3116
  msgstr ""
3117
 
3118
- #: includes/class-wcj-order-numbers.php:118
3119
  msgid ""
3120
  "Press the button below to renumerate all existing orders starting from order "
3121
  "counter settings in WooCommerce > Settings > Booster > Order Numbers."
3122
  msgstr ""
3123
 
3124
- #: includes/class-wcj-order-numbers.php:121
3125
  msgid "Renumerate orders"
3126
  msgstr ""
3127
 
3128
- #: includes/class-wcj-order-numbers.php:205
3129
  msgid ""
3130
  "This section lets you enable sequential order numbering, set custom number "
3131
  "prefix, suffix and width."
3132
  msgstr ""
3133
 
3134
- #: includes/class-wcj-order-numbers.php:209
3135
- msgid "Make Order Numbers Sequential"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3136
  msgstr ""
3137
 
3138
- #: includes/class-wcj-order-numbers.php:216
3139
  msgid "Next Order Number"
3140
  msgstr ""
3141
 
3142
- #: includes/class-wcj-order-numbers.php:217
3143
  msgid "Next new order will be given this number."
3144
  msgstr ""
3145
 
3146
- #: includes/class-wcj-order-numbers.php:217
3147
  msgid "Use Renumerate Orders tool for existing orders."
3148
  msgstr ""
3149
 
3150
- #: includes/class-wcj-order-numbers.php:218
3151
  msgid "This will be ignored if sequential order numbering is disabled."
3152
  msgstr ""
3153
 
3154
- #: includes/class-wcj-order-numbers.php:224
3155
  msgid "Order Number Custom Prefix"
3156
  msgstr ""
3157
 
3158
- #: includes/class-wcj-order-numbers.php:225
3159
  msgid ""
3160
  "Prefix before order number (optional). This will change the prefixes for all "
3161
  "existing orders."
3162
  msgstr ""
3163
 
3164
- #: includes/class-wcj-order-numbers.php:232
3165
  msgid "Order Number Date Prefix"
3166
  msgstr ""
3167
 
3168
- #: includes/class-wcj-order-numbers.php:234
3169
  msgid ""
3170
  "Date prefix before order number (optional). This will change the prefixes "
3171
  "for all existing orders. Value is passed directly to PHP `date` function, so "
@@ -3174,11 +3490,11 @@ msgid ""
3174
  "d- or mdy."
3175
  msgstr ""
3176
 
3177
- #: includes/class-wcj-order-numbers.php:242
3178
  msgid "Order Number Width"
3179
  msgstr ""
3180
 
3181
- #: includes/class-wcj-order-numbers.php:244
3182
  msgid ""
3183
  "Minimum width of number without prefix (zeros will be added to the left "
3184
  "side). This will change the minimum width of order number for all existing "
@@ -3186,21 +3502,21 @@ msgid ""
3186
  "Leave zero to disable."
3187
  msgstr ""
3188
 
3189
- #: includes/class-wcj-order-numbers.php:252
3190
  msgid "Order Number Custom Suffix"
3191
  msgstr ""
3192
 
3193
- #: includes/class-wcj-order-numbers.php:254
3194
  msgid ""
3195
  "Suffix after order number (optional). This will change the suffixes for all "
3196
  "existing orders."
3197
  msgstr ""
3198
 
3199
- #: includes/class-wcj-order-numbers.php:262
3200
  msgid "Order Number Date Suffix"
3201
  msgstr ""
3202
 
3203
- #: includes/class-wcj-order-numbers.php:264
3204
  msgid ""
3205
  "Date suffix after order number (optional). This will change the suffixes for "
3206
  "all existing orders. Value is passed directly to PHP `date` function, so "
@@ -3209,20 +3525,24 @@ msgid ""
3209
  "d- or mdy."
3210
  msgstr ""
3211
 
3212
- #: includes/class-wcj-order-numbers.php:272
3213
  msgid "Use MySQL Transaction"
3214
  msgstr ""
3215
 
3216
- #: includes/class-wcj-order-numbers.php:274
3217
  msgid ""
3218
  "This should be enabled if you have a lot of simultaneous orders in your shop "
3219
  "- to prevent duplicate order numbers (sequential)."
3220
  msgstr ""
3221
 
3222
- #: includes/class-wcj-order-numbers.php:280
3223
  msgid "Enable Order Tracking by Custom Number"
3224
  msgstr ""
3225
 
 
 
 
 
3226
  #: includes/class-wcj-orders.php:25
3227
  msgid "Orders"
3228
  msgstr ""
@@ -3233,40 +3553,40 @@ msgid ""
3233
  "Admin order list multiple status filtering."
3234
  msgstr ""
3235
 
3236
- #: includes/class-wcj-orders.php:129
3237
  msgid "Not Completed"
3238
  msgstr ""
3239
 
3240
- #: includes/class-wcj-orders.php:235
3241
- #: includes/export/class-wcj-fields-helper.php:117
3242
- #: includes/export/class-wcj-fields-helper.php:202
3243
  #: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:261
3244
  msgid "Order Currency"
3245
  msgstr ""
3246
 
3247
- #: includes/class-wcj-orders.php:236
3248
  msgid "Save order after you change this field."
3249
  msgstr ""
3250
 
3251
- #: includes/class-wcj-orders.php:264
3252
  msgid "All countries"
3253
  msgstr ""
3254
 
3255
- #: includes/class-wcj-orders.php:388 includes/class-wcj-orders.php:393
3256
  msgid "Admin Order Currency"
3257
  msgstr ""
3258
 
3259
- #: includes/class-wcj-orders.php:395
3260
  msgid ""
3261
  "When enabled this will add \"Booster: Orders\" metabox to each order's edit "
3262
  "page."
3263
  msgstr ""
3264
 
3265
- #: includes/class-wcj-orders.php:401
3266
  msgid "Admin Order Currency Method"
3267
  msgstr ""
3268
 
3269
- #: includes/class-wcj-orders.php:402
3270
  msgid ""
3271
  "Choose if you want changed order currency to be saved directly to DB, or if "
3272
  "you want to use filter. When using <em>filter</em> method, changes will be "
@@ -3275,81 +3595,83 @@ msgid ""
3275
  "Booster plugin is removed."
3276
  msgstr ""
3277
 
3278
- #: includes/class-wcj-orders.php:408
3279
  msgid "Directly to DB"
3280
  msgstr ""
3281
 
3282
- #: includes/class-wcj-orders.php:416
3283
  msgid "Orders Auto-Complete"
3284
  msgstr ""
3285
 
3286
- #: includes/class-wcj-orders.php:418
3287
  msgid "This section lets you enable orders auto-complete function."
3288
  msgstr ""
3289
 
3290
- #: includes/class-wcj-orders.php:422
3291
  msgid "Auto-complete all WooCommerce orders"
3292
  msgstr ""
3293
 
3294
- #: includes/class-wcj-orders.php:424
3295
  msgid ""
3296
  "E.g. if you sell digital products then you are not shipping anything and you "
3297
  "may want auto-complete all your orders."
3298
  msgstr ""
3299
 
3300
- #: includes/class-wcj-orders.php:434
3301
  msgid "Admin Orders List Custom Columns"
3302
  msgstr ""
3303
 
3304
- #: includes/class-wcj-orders.php:436 includes/class-wcj-purchase-data.php:386
3305
  msgid "This section lets you add custom columns to WooCommerce orders list."
3306
  msgstr ""
3307
 
3308
- #: includes/class-wcj-orders.php:447
3309
  msgid "Custom Columns Total Number"
3310
  msgstr ""
3311
 
3312
- #: includes/class-wcj-orders.php:462
3313
  msgid "Custom Column"
3314
  msgstr ""
3315
 
3316
- #: includes/class-wcj-orders.php:477
 
 
3317
  msgid "You can use shortcodes here."
3318
  msgstr ""
3319
 
3320
- #: includes/class-wcj-orders.php:491
3321
  msgid "Admin Orders List Multiple Status"
3322
  msgstr ""
3323
 
3324
- #: includes/class-wcj-orders.php:496
3325
  msgid "Multiple Status Filtering"
3326
  msgstr ""
3327
 
3328
- #: includes/class-wcj-orders.php:502
3329
  msgid "Add as multiple select"
3330
  msgstr ""
3331
 
3332
- #: includes/class-wcj-orders.php:503
3333
  msgid "Add as checkboxes"
3334
  msgstr ""
3335
 
3336
- #: includes/class-wcj-orders.php:507
3337
  msgid "Hide Default Statuses Menu"
3338
  msgstr ""
3339
 
3340
- #: includes/class-wcj-orders.php:514
3341
  msgid "Add \"Not Completed\" Status Link to Default Statuses Menu"
3342
  msgstr ""
3343
 
3344
- #: includes/class-wcj-orders.php:525
3345
  msgid "Admin Orders List Columns Order"
3346
  msgstr ""
3347
 
3348
- #: includes/class-wcj-orders.php:530
3349
  msgid "Columns Order"
3350
  msgstr ""
3351
 
3352
- #: includes/class-wcj-orders.php:538
3353
  msgid "Default columns order"
3354
  msgstr ""
3355
 
@@ -3363,27 +3685,59 @@ msgid ""
3363
  "to show up."
3364
  msgstr ""
3365
 
3366
- #: includes/class-wcj-payment-gateways-by-country.php:90
3367
- #: includes/class-wcj-payment-gateways-by-user-role.php:83
 
 
 
 
 
 
 
 
3368
  msgid "Leave empty to disable."
3369
  msgstr ""
3370
 
3371
- #: includes/class-wcj-payment-gateways-by-country.php:111
3372
  msgid "Include Countries"
3373
  msgstr ""
3374
 
3375
- #: includes/class-wcj-payment-gateways-by-country.php:123
3376
  msgid "Exclude Countries"
3377
  msgstr ""
3378
 
3379
- #: includes/class-wcj-payment-gateways-by-country.php:135
3380
  msgid "Include States (Base Country)"
3381
  msgstr ""
3382
 
3383
- #: includes/class-wcj-payment-gateways-by-country.php:147
3384
  msgid "Exclude States (Base Country)"
3385
  msgstr ""
3386
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3387
  #: includes/class-wcj-payment-gateways-by-user-role.php:27
3388
  msgid "Gateways by User Role"
3389
  msgstr ""
@@ -3394,18 +3748,19 @@ msgid ""
3394
  "up."
3395
  msgstr ""
3396
 
3397
- #: includes/class-wcj-payment-gateways-by-user-role.php:84
3398
  #: includes/class-wcj-product-by-user.php:258
 
3399
  msgid ""
3400
  "Custom roles can be added via \"Add/Manage Custom Roles\" tool in Booster's "
3401
  "<a href=\"%s\">General</a> module"
3402
  msgstr ""
3403
 
3404
- #: includes/class-wcj-payment-gateways-by-user-role.php:105
3405
  msgid "Include User Roles"
3406
  msgstr ""
3407
 
3408
- #: includes/class-wcj-payment-gateways-by-user-role.php:117
3409
  msgid "Exclude User Roles"
3410
  msgstr ""
3411
 
@@ -3417,15 +3772,15 @@ msgstr ""
3417
  msgid "Currency per WooCommerce payment gateway."
3418
  msgstr ""
3419
 
3420
- #: includes/class-wcj-payment-gateways-currency.php:228
3421
  msgid "Payment Gateways Currency Options"
3422
  msgstr ""
3423
 
3424
- #: includes/class-wcj-payment-gateways-currency.php:230
3425
  msgid "This section lets you set different currency for each payment gateway."
3426
  msgstr ""
3427
 
3428
- #: includes/class-wcj-payment-gateways-currency.php:262
3429
  msgid "No changes"
3430
  msgstr ""
3431
 
@@ -3437,64 +3792,83 @@ msgstr ""
3437
  msgid "Enable extra fees or discounts for WooCommerce payment gateways."
3438
  msgstr ""
3439
 
3440
- #: includes/class-wcj-payment-gateways-fees.php:138
3441
- msgid "Payment Gateways Fees and Discounts Options"
3442
  msgstr ""
3443
 
3444
- #: includes/class-wcj-payment-gateways-fees.php:140
3445
- msgid "This section lets you set extra fees for payment gateways."
3446
  msgstr ""
3447
 
3448
- #: includes/class-wcj-payment-gateways-fees.php:150
3449
- msgid "Fee (or discount) title to show to customer."
 
 
3450
  msgstr ""
3451
 
3452
- #: includes/class-wcj-payment-gateways-fees.php:158
3453
- msgid "Fee (or discount) type."
3454
  msgstr ""
3455
 
3456
- #: includes/class-wcj-payment-gateways-fees.php:159
3457
  msgid "Percent or fixed value."
3458
  msgstr ""
3459
 
3460
- #: includes/class-wcj-payment-gateways-fees.php:170
3461
- msgid "Fee (or discount) value."
3462
  msgstr ""
3463
 
3464
- #: includes/class-wcj-payment-gateways-fees.php:171
3465
  msgid "The value. For discount enter a negative number."
3466
  msgstr ""
3467
 
3468
- #: includes/class-wcj-payment-gateways-fees.php:181
 
 
 
 
3469
  msgid "Minimum cart amount for adding the fee (or discount)."
3470
  msgstr ""
3471
 
3472
- #: includes/class-wcj-payment-gateways-fees.php:182
3473
- #: includes/class-wcj-payment-gateways-fees.php:194
3474
- msgid "Set 0 to disable."
 
 
 
 
3475
  msgstr ""
3476
 
3477
- #: includes/class-wcj-payment-gateways-fees.php:193
3478
  msgid "Maximum cart amount for adding the fee (or discount)."
3479
  msgstr ""
3480
 
3481
- #: includes/class-wcj-payment-gateways-fees.php:205
3482
- msgid "Round the fee (or discount) value before adding to the cart."
 
 
 
 
 
 
 
 
3483
  msgstr ""
3484
 
3485
- #: includes/class-wcj-payment-gateways-fees.php:213
3486
- msgid "If rounding is enabled, set precision here."
3487
  msgstr ""
3488
 
3489
- #: includes/class-wcj-payment-gateways-fees.php:225
3490
- msgid "Is taxable?"
 
3491
  msgstr ""
3492
 
3493
- #: includes/class-wcj-payment-gateways-fees.php:232
3494
- msgid "Tax Class (only if Taxable selected)."
3495
  msgstr ""
3496
 
3497
- #: includes/class-wcj-payment-gateways-fees.php:236
3498
  msgid "Standard Rate"
3499
  msgstr ""
3500
 
@@ -3524,35 +3898,85 @@ msgid "Remove Icon"
3524
  msgstr ""
3525
 
3526
  #: includes/class-wcj-payment-gateways-min-max.php:26
3527
- msgid "Gateways Min/Max"
3528
  msgstr ""
3529
 
3530
  #: includes/class-wcj-payment-gateways-min-max.php:27
3531
  msgid "Add min/max amounts for WooCommerce payment gateways to show up."
3532
  msgstr ""
3533
 
3534
- #: includes/class-wcj-payment-gateways-min-max.php:73
 
 
 
 
 
 
 
 
 
 
3535
  msgid "General Options"
3536
  msgstr ""
3537
 
3538
- #: includes/class-wcj-payment-gateways-min-max.php:78
3539
  msgid "Exclude Shipping"
3540
  msgstr ""
3541
 
3542
- #: includes/class-wcj-payment-gateways-min-max.php:79
3543
  msgid ""
3544
  "Exclude shipping from total cart sum, when comparing with min/max amounts."
3545
  msgstr ""
3546
 
3547
- #: includes/class-wcj-payment-gateways-min-max.php:92
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3548
  msgid "Leave zero to disable."
3549
  msgstr ""
3550
 
3551
- #: includes/class-wcj-payment-gateways-min-max.php:111
3552
  msgid "Min"
3553
  msgstr ""
3554
 
3555
- #: includes/class-wcj-payment-gateways-min-max.php:120
3556
  msgid "Max"
3557
  msgstr ""
3558
 
@@ -3566,45 +3990,45 @@ msgid ""
3566
  "category in cart."
3567
  msgstr ""
3568
 
3569
- #: includes/class-wcj-payment-gateways-per-category.php:184
3570
- #: includes/class-wcj-price-labels.php:716
3571
  msgid "Product Categories - Include"
3572
  msgstr ""
3573
 
3574
- #: includes/class-wcj-payment-gateways-per-category.php:185
3575
  msgid ""
3576
  "Show gateway only if there is product of selected category in cart. Leave "
3577
  "blank to disable the option."
3578
  msgstr ""
3579
 
3580
- #: includes/class-wcj-payment-gateways-per-category.php:195
3581
- #: includes/class-wcj-price-labels.php:726
3582
  msgid "Product Categories - Exclude"
3583
  msgstr ""
3584
 
3585
- #: includes/class-wcj-payment-gateways-per-category.php:196
3586
  msgid ""
3587
  "Hide gateway if there is product of selected category in cart. Leave blank "
3588
  "to disable the option."
3589
  msgstr ""
3590
 
3591
- #: includes/class-wcj-payment-gateways-per-category.php:206
3592
- #: includes/class-wcj-price-labels.php:696
3593
  msgid "Products - Include"
3594
  msgstr ""
3595
 
3596
- #: includes/class-wcj-payment-gateways-per-category.php:207
3597
  msgid ""
3598
  "Show gateway only if there is selected products in cart. Leave blank to "
3599
  "disable the option."
3600
  msgstr ""
3601
 
3602
- #: includes/class-wcj-payment-gateways-per-category.php:218
3603
- #: includes/class-wcj-price-labels.php:706
3604
  msgid "Products - Exclude"
3605
  msgstr ""
3606
 
3607
- #: includes/class-wcj-payment-gateways-per-category.php:219
3608
  msgid ""
3609
  "Hide gateway if there is selected products in cart. Leave blank to disable "
3610
  "the option."
@@ -3619,6 +4043,7 @@ msgid "Add multiple custom payment gateways to WooCommerce."
3619
  msgstr ""
3620
 
3621
  #: includes/class-wcj-payment-gateways.php:55
 
3622
  msgid "%s Fields"
3623
  msgstr ""
3624
 
@@ -3635,6 +4060,7 @@ msgid "This section lets you set number of custom payment gateways to add."
3635
  msgstr ""
3636
 
3637
  #: includes/class-wcj-payment-gateways.php:123
 
3638
  msgid "After setting the number, visit %s to set each gateway options."
3639
  msgstr ""
3640
 
@@ -3686,9 +4112,9 @@ msgstr ""
3686
 
3687
  #: includes/class-wcj-pdf-invoicing.php:89
3688
  #: includes/class-wcj-pdf-invoicing.php:90
3689
- #: includes/class-wcj-price-by-country.php:270
3690
- #: includes/class-wcj-price-by-country.php:275
3691
- #: includes/class-wcj-price-by-country.php:280
3692
  msgid "Generate"
3693
  msgstr ""
3694
 
@@ -3698,38 +4124,47 @@ msgid "Download"
3698
  msgstr ""
3699
 
3700
  #: includes/class-wcj-pdf-invoicing.php:114
 
3701
  msgid "Document generated."
3702
  msgid_plural "%s documents generated."
3703
  msgstr[0] ""
3704
  msgstr[1] ""
3705
 
3706
  #: includes/class-wcj-pdf-invoicing.php:220
3707
- #: includes/classes/class-wcj-pdf-invoice.php:266
3708
  #: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:195
3709
  msgid "Unexpected error"
3710
  msgstr ""
3711
 
3712
- #: includes/class-wcj-pdf-invoicing.php:360
3713
  msgid "PDF Invoicing General Options"
3714
  msgstr ""
3715
 
3716
- #: includes/class-wcj-pdf-invoicing.php:369
3717
  msgid "Create on New Order"
3718
  msgstr ""
3719
 
3720
- #: includes/class-wcj-pdf-invoicing.php:372
3721
  msgid "Create on Order Status"
3722
  msgstr ""
3723
 
3724
- #: includes/class-wcj-pdf-invoicing.php:374
3725
  msgid "Manual Only"
3726
  msgstr ""
3727
 
3728
- #: includes/class-wcj-pdf-invoicing.php:393
 
 
 
 
 
 
 
 
3729
  msgid "Do not create if order total equals zero"
3730
  msgstr ""
3731
 
3732
- #: includes/class-wcj-pdf-invoicing.php:399
3733
  msgid "Hide Disabled Docs Settings"
3734
  msgstr ""
3735
 
@@ -3795,106 +4230,141 @@ msgstr ""
3795
  msgid "Override Country with Customer's Checkout Shipping Country"
3796
  msgstr ""
3797
 
3798
- #: includes/class-wcj-price-by-country.php:192
 
 
 
 
 
 
 
 
 
 
 
 
3799
  msgid "Price Rounding"
3800
  msgstr ""
3801
 
3802
- #: includes/class-wcj-price-by-country.php:193
3803
  msgid "If you choose to multiply price, set rounding options here."
3804
  msgstr ""
3805
 
3806
- #: includes/class-wcj-price-by-country.php:206
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3807
  msgid "Price by Country on per Product Basis"
3808
  msgstr ""
3809
 
3810
- #: includes/class-wcj-price-by-country.php:208
3811
  msgid "This will add product data fields in product edit."
3812
  msgstr ""
3813
 
3814
- #: includes/class-wcj-price-by-country.php:215
3815
  msgid "Price Filter Widget and Sorting by Price Support"
3816
  msgstr ""
3817
 
3818
- #: includes/class-wcj-price-by-country.php:218
3819
  msgid "Recalculate price filter widget and sorting by price product prices"
3820
  msgstr ""
3821
 
3822
- #: includes/class-wcj-price-by-country.php:225
3823
  msgid "Add Countries Flags Images to Select Drop-Down Box"
3824
  msgstr ""
3825
 
3826
- #: includes/class-wcj-price-by-country.php:227
3827
  msgid ""
3828
  "If you are using [wcj_country_select_drop_down_list] shortcode or \"Booster: "
3829
  "Country Switcher\" widget, this will add country flags to these select boxes."
3830
  msgstr ""
3831
 
3832
- #: includes/class-wcj-price-by-country.php:234
3833
- #: includes/class-wcj-price-by-user-role.php:400
3834
  msgid "Search Engine Bots"
3835
  msgstr ""
3836
 
3837
- #: includes/class-wcj-price-by-country.php:235
3838
  msgid "Disable Price by Country for Bots"
3839
  msgstr ""
3840
 
3841
- #: includes/class-wcj-price-by-country.php:244
3842
  msgid "Country Groups"
3843
  msgstr ""
3844
 
3845
- #: includes/class-wcj-price-by-country.php:250
3846
  msgid "Countries Selection"
3847
  msgstr ""
3848
 
3849
- #: includes/class-wcj-price-by-country.php:251
3850
  msgid "Choose how do you want to enter countries groups in admin."
3851
  msgstr ""
3852
 
3853
- #: includes/class-wcj-price-by-country.php:256
3854
  msgid "Comma separated list"
3855
  msgstr ""
3856
 
3857
- #: includes/class-wcj-price-by-country.php:257
3858
  msgid "Multiselect"
3859
  msgstr ""
3860
 
3861
- #: includes/class-wcj-price-by-country.php:258
3862
  msgid "Chosen select"
3863
  msgstr ""
3864
 
3865
- #: includes/class-wcj-price-by-country.php:263
3866
  msgid "Autogenerate Groups"
3867
  msgstr ""
3868
 
3869
- #: includes/class-wcj-price-by-country.php:268
3870
  msgid "Currencies supported in both PayPal and Yahoo Exchange Rates:"
3871
  msgstr ""
3872
 
3873
- #: includes/class-wcj-price-by-country.php:273
3874
  msgid "Currencies supported in Yahoo Exchange Rates:"
3875
  msgstr ""
3876
 
3877
- #: includes/class-wcj-price-by-country.php:278
3878
  msgid "All Countries and Currencies:"
3879
  msgstr ""
3880
 
3881
- #: includes/class-wcj-price-by-country.php:285
3882
  msgid "Groups Number"
3883
  msgstr ""
3884
 
3885
- #: includes/class-wcj-price-by-country.php:304
3886
  msgid ""
3887
  "Countries. List of comma separated country codes.<br>For country codes and "
3888
- "predifined sets visit <a href=\"http://booster.io/features/prices-and-"
3889
- "currencies-by-customers-country\" target=\"_blank\">http://booster.io</a>"
3890
  msgstr ""
3891
 
3892
- #: includes/class-wcj-price-by-country.php:380
3893
  msgid "Multiply Price by"
3894
  msgstr ""
3895
 
3896
- #: includes/class-wcj-price-by-country.php:403
3897
- #: includes/price-by-country/class-wcj-price-by-country-local.php:143
3898
  msgid "Make empty price"
3899
  msgstr ""
3900
 
@@ -3919,40 +4389,40 @@ msgid "Per Product Settings (press Update after changing)"
3919
  msgstr ""
3920
 
3921
  #: includes/class-wcj-price-by-user-role.php:185
3922
- #: includes/class-wcj-price-by-user-role.php:428
3923
  msgid "Make Empty Price"
3924
  msgstr ""
3925
 
3926
- #: includes/class-wcj-price-by-user-role.php:375
3927
  msgid "Enable per Product Settings"
3928
  msgstr ""
3929
 
3930
- #: includes/class-wcj-price-by-user-role.php:377
3931
  msgid ""
3932
  "When enabled, this will add new \"Booster: Price by User Role\" meta box to "
3933
  "each product's edit page."
3934
  msgstr ""
3935
 
3936
- #: includes/class-wcj-price-by-user-role.php:383
3937
  msgid "Show Roles on per Product Settings"
3938
  msgstr ""
3939
 
3940
- #: includes/class-wcj-price-by-user-role.php:384
3941
  msgid ""
3942
  "If per product settings is enabled, you can choose which roles to show on "
3943
  "product's edit page. Leave blank to show all roles."
3944
  msgstr ""
3945
 
3946
- #: includes/class-wcj-price-by-user-role.php:394
3947
  msgid ""
3948
  "When enabled, this will apply user role multipliers to shipping calculations."
3949
  msgstr ""
3950
 
3951
- #: includes/class-wcj-price-by-user-role.php:401
3952
  msgid "Disable Price by User Role for Bots"
3953
  msgstr ""
3954
 
3955
- #: includes/class-wcj-price-by-user-role.php:412
3956
  msgid "Roles & Multipliers"
3957
  msgstr ""
3958
 
@@ -3964,55 +4434,55 @@ msgstr ""
3964
  msgid "Set different WooCommerce price formats for different currencies."
3965
  msgstr ""
3966
 
3967
- #: includes/class-wcj-price-formats.php:121
3968
  msgid "Formats"
3969
  msgstr ""
3970
 
3971
- #: includes/class-wcj-price-formats.php:126
3972
  msgid "Total Number"
3973
  msgstr ""
3974
 
3975
- #: includes/class-wcj-price-formats.php:141
3976
  msgid "Format"
3977
  msgstr ""
3978
 
3979
- #: includes/class-wcj-price-formats.php:150
3980
  msgid "Currency Position"
3981
  msgstr ""
3982
 
3983
- #: includes/class-wcj-price-formats.php:155
3984
  msgid "Left"
3985
  msgstr ""
3986
 
3987
- #: includes/class-wcj-price-formats.php:156
3988
  msgid "Right"
3989
  msgstr ""
3990
 
3991
- #: includes/class-wcj-price-formats.php:157
3992
  msgid "Left with space"
3993
  msgstr ""
3994
 
3995
- #: includes/class-wcj-price-formats.php:158
3996
  msgid "Right with space"
3997
  msgstr ""
3998
 
3999
- #: includes/class-wcj-price-formats.php:163
4000
  msgid "Thousand Separator"
4001
  msgstr ""
4002
 
4003
- #: includes/class-wcj-price-formats.php:170
4004
  msgid "Decimal Separator"
4005
  msgstr ""
4006
 
4007
- #: includes/class-wcj-price-formats.php:177
4008
  msgid "Number of Decimals"
4009
  msgstr ""
4010
 
4011
- #: includes/class-wcj-price-formats.php:188
4012
  msgid "WPML Language Code"
4013
  msgstr ""
4014
 
4015
- #: includes/class-wcj-price-formats.php:189
4016
  msgid ""
4017
  "Option to set different price formats for different WPML languages. Can be "
4018
  "comma separated list. Leave empty to disable."
@@ -4026,190 +4496,155 @@ msgstr ""
4026
  msgid "Create any custom price label for any WooCommerce product."
4027
  msgstr ""
4028
 
4029
- #: includes/class-wcj-price-labels.php:32
4030
- msgid "Migrate from Custom Price Labels (Pro)"
 
4031
  msgstr ""
4032
 
4033
- #: includes/class-wcj-price-labels.php:33
4034
- msgid ""
4035
- "Tool lets you copy all the data (that is labels) from Custom Price labels "
4036
- "(Pro) plugin to Booster."
4037
  msgstr ""
4038
 
4039
- #: includes/class-wcj-price-labels.php:43
4040
- msgid "Instead of the price"
4041
- msgstr ""
4042
-
4043
- #: includes/class-wcj-price-labels.php:44
4044
- msgid "Before the price"
4045
- msgstr ""
4046
-
4047
- #: includes/class-wcj-price-labels.php:45
4048
  msgid "Between regular and sale prices"
4049
  msgstr ""
4050
 
4051
- #: includes/class-wcj-price-labels.php:46
4052
  msgid "After the price"
4053
  msgstr ""
4054
 
4055
- #: includes/class-wcj-price-labels.php:52
4056
  msgid "Hide on home page"
4057
  msgstr ""
4058
 
4059
- #: includes/class-wcj-price-labels.php:53
4060
  msgid "Hide on products page"
4061
  msgstr ""
4062
 
4063
- #: includes/class-wcj-price-labels.php:54
4064
  msgid "Hide on single"
4065
  msgstr ""
4066
 
4067
- #: includes/class-wcj-price-labels.php:55
4068
  msgid "Hide on all pages"
4069
  msgstr ""
4070
 
4071
- #: includes/class-wcj-price-labels.php:56
4072
  msgid "Hide on cart page only"
4073
  msgstr ""
4074
 
4075
- #: includes/class-wcj-price-labels.php:58
4076
  msgid "Hide for main price"
4077
  msgstr ""
4078
 
4079
- #: includes/class-wcj-price-labels.php:59
4080
  msgid "Hide for all variations"
4081
  msgstr ""
4082
 
4083
- #: includes/class-wcj-price-labels.php:128
4084
- msgid "Booster - Migrate from Custom Price Labels (Pro)"
4085
- msgstr ""
4086
-
4087
- #: includes/class-wcj-price-labels.php:179
4088
- msgid "Migrating (product ID "
4089
- msgstr ""
4090
-
4091
- #: includes/class-wcj-price-labels.php:180
4092
- msgid "Result: "
4093
- msgstr ""
4094
-
4095
- #: includes/class-wcj-price-labels.php:202
4096
- msgid "Found data to migrate (product ID "
4097
- msgstr ""
4098
-
4099
- #: includes/class-wcj-price-labels.php:218
4100
- msgid "No data to migrate found"
4101
- msgstr ""
4102
-
4103
- #: includes/class-wcj-price-labels.php:224
4104
- msgid ""
4105
- "Press button below to copy all labels from Custom Price Labels (Pro) plugin. "
4106
- "Old labels will NOT be deleted. New labels will be overwritten."
4107
- msgstr ""
4108
-
4109
- #: includes/class-wcj-price-labels.php:225
4110
- msgid "Migrate data"
4111
- msgstr ""
4112
-
4113
- #: includes/class-wcj-price-labels.php:271
4114
  msgid "Booster: Custom Price Labels"
4115
  msgstr ""
4116
 
4117
- #: includes/class-wcj-price-labels.php:630
4118
  msgid "Custom Price Labels - Globally"
4119
  msgstr ""
4120
 
4121
- #: includes/class-wcj-price-labels.php:632
4122
  msgid "This section lets you set price labels for all products globally."
4123
  msgstr ""
4124
 
4125
- #: includes/class-wcj-price-labels.php:636
4126
  msgid "Add before the price"
4127
  msgstr ""
4128
 
4129
- #: includes/class-wcj-price-labels.php:637
4130
  msgid "Enter text to add before all products prices. Leave blank to disable."
4131
  msgstr ""
4132
 
4133
- #: includes/class-wcj-price-labels.php:646
4134
  msgid "Add after the price"
4135
  msgstr ""
4136
 
4137
- #: includes/class-wcj-price-labels.php:647
4138
  msgid "Enter text to add after all products prices. Leave blank to disable."
4139
  msgstr ""
4140
 
4141
- #: includes/class-wcj-price-labels.php:654
4142
  msgid "Add between regular and sale prices"
4143
  msgstr ""
4144
 
4145
- #: includes/class-wcj-price-labels.php:655
4146
  msgid ""
4147
  "Enter text to add between regular and sale prices. Leave blank to disable."
4148
  msgstr ""
4149
 
4150
- #: includes/class-wcj-price-labels.php:664
4151
  msgid "Remove from price"
4152
  msgstr ""
4153
 
4154
- #: includes/class-wcj-price-labels.php:666
4155
  msgid "Enter text to remove from all products prices. Leave blank to disable."
4156
  msgstr ""
4157
 
4158
- #: includes/class-wcj-price-labels.php:675
4159
  msgid "Replace in price"
4160
  msgstr ""
4161
 
4162
- #: includes/class-wcj-price-labels.php:676
4163
  msgid "Enter text to replace in all products prices. Leave blank to disable."
4164
  msgstr ""
4165
 
4166
- #: includes/class-wcj-price-labels.php:687
4167
  msgid "Enter text to replace with. Leave blank to disable."
4168
  msgstr ""
4169
 
4170
- #: includes/class-wcj-price-labels.php:697
 
 
 
 
4171
  msgid ""
4172
  "Apply global price labels only for selected products. Leave blank to disable "
4173
  "the option."
4174
  msgstr ""
4175
 
4176
- #: includes/class-wcj-price-labels.php:707
4177
  msgid ""
4178
  "Do not apply global price labels only for selected products. Leave blank to "
4179
  "disable the option."
4180
  msgstr ""
4181
 
4182
- #: includes/class-wcj-price-labels.php:717
4183
  msgid ""
4184
  "Apply global price labels only for selected product categories. Leave blank "
4185
  "to disable the option."
4186
  msgstr ""
4187
 
4188
- #: includes/class-wcj-price-labels.php:727
4189
  msgid ""
4190
  "Do not apply global price labels only for selected product categories. Leave "
4191
  "blank to disable the option."
4192
  msgstr ""
4193
 
4194
- #: includes/class-wcj-price-labels.php:736
4195
  msgid "Product Types - Include"
4196
  msgstr ""
4197
 
4198
- #: includes/class-wcj-price-labels.php:737
4199
  msgid ""
4200
  "Apply global price labels only for selected product types. Leave blank to "
4201
  "disable the option."
4202
  msgstr ""
4203
 
4204
- #: includes/class-wcj-price-labels.php:743
4205
  msgid "Variable product's variation"
4206
  msgstr ""
4207
 
4208
- #: includes/class-wcj-price-labels.php:750
4209
  msgid "Custom Price Labels - Per Product"
4210
  msgstr ""
4211
 
4212
- #: includes/class-wcj-price-labels.php:756
4213
  msgid "This will add metaboxes to each product's admin edit page."
4214
  msgstr ""
4215
 
@@ -4241,128 +4676,178 @@ msgstr ""
4241
  msgid "Open external products on add to cart in new window."
4242
  msgstr ""
4243
 
4244
- #: includes/class-wcj-product-add-to-cart.php:215
 
 
 
 
 
 
 
 
 
 
 
4245
  msgid "Disable Add to Cart Button (Single Product Page)"
4246
  msgstr ""
4247
 
4248
- #: includes/class-wcj-product-add-to-cart.php:225
4249
  msgid "Disable Add to Cart Button (Category/Archives)"
4250
  msgstr ""
4251
 
4252
- #: includes/class-wcj-product-add-to-cart.php:235
4253
  msgid "Custom Add to Cart Button URL (Category/Archives)"
4254
  msgstr ""
4255
 
4256
- #: includes/class-wcj-product-add-to-cart.php:246
4257
  msgid "As shop default (no changes)"
4258
  msgstr ""
4259
 
4260
- #: includes/class-wcj-product-add-to-cart.php:250
4261
  msgid "Disable Add to Cart Button AJAX"
4262
  msgstr ""
4263
 
4264
- #: includes/class-wcj-product-add-to-cart.php:341
4265
  msgid "Add to Cart Local Redirect Options"
4266
  msgstr ""
4267
 
4268
- #: includes/class-wcj-product-add-to-cart.php:343
4269
  msgid ""
4270
  "This section lets you set any local URL to redirect to after successfully "
4271
  "adding product to cart. Leave empty to redirect to checkout page (skipping "
4272
  "the cart page)."
4273
  msgstr ""
4274
 
4275
- #: includes/class-wcj-product-add-to-cart.php:347
4276
  msgid "Local Redirect"
4277
  msgstr ""
4278
 
4279
- #: includes/class-wcj-product-add-to-cart.php:354
4280
  msgid "Local Redirect URL"
4281
  msgstr ""
4282
 
4283
- #: includes/class-wcj-product-add-to-cart.php:355
4284
  msgid "Performs a safe (local) redirect, using wp_redirect()."
4285
  msgstr ""
4286
 
4287
- #: includes/class-wcj-product-add-to-cart.php:356
4288
  msgid "Local redirect URL. Leave empty to redirect to checkout."
4289
  msgstr ""
4290
 
4291
- #: includes/class-wcj-product-add-to-cart.php:367
4292
- #: includes/class-wcj-product-add-to-cart.php:373
4293
- msgid "Add to Cart on Visit"
 
 
 
4294
  msgstr ""
4295
 
4296
- #: includes/class-wcj-product-add-to-cart.php:369
4297
  msgid ""
4298
  "This section lets you enable automatically adding product to cart on "
4299
  "visiting the product page. Product is only added once, so if it is already "
4300
  "in cart - duplicate product is not added. "
4301
  msgstr ""
4302
 
4303
- #: includes/class-wcj-product-add-to-cart.php:384
 
 
 
 
 
 
 
 
 
 
4304
  msgid "Add to Cart Variable Product"
4305
  msgstr ""
4306
 
4307
- #: includes/class-wcj-product-add-to-cart.php:389
4308
  msgid "Display Radio Buttons Instead of Drop Box"
4309
  msgstr ""
4310
 
4311
- #: includes/class-wcj-product-add-to-cart.php:402
 
 
 
 
 
 
 
 
 
 
 
 
 
4312
  msgid "Add to Cart Quantity"
4313
  msgstr ""
4314
 
4315
- #: includes/class-wcj-product-add-to-cart.php:407
4316
  msgid "Disable Quantity Field for All Products"
4317
  msgstr ""
4318
 
4319
- #: includes/class-wcj-product-add-to-cart.php:408
4320
  msgid "Disable on Single Product Page"
4321
  msgstr ""
4322
 
4323
- #: includes/class-wcj-product-add-to-cart.php:415
4324
  msgid "Disable on Cart Page"
4325
  msgstr ""
4326
 
4327
- #: includes/class-wcj-product-add-to-cart.php:426
4328
  msgid "Add to Cart Button Disabling"
4329
  msgstr ""
4330
 
4331
- #: includes/class-wcj-product-add-to-cart.php:431
4332
  msgid "Disable Add to Cart Buttons on per Product Basis"
4333
  msgstr ""
4334
 
4335
- #: includes/class-wcj-product-add-to-cart.php:433
4336
- #: includes/class-wcj-product-add-to-cart.php:450
4337
- #: includes/class-wcj-product-add-to-cart.php:467
4338
  msgid "This will add meta box to each product's edit page"
4339
  msgstr ""
4340
 
4341
- #: includes/class-wcj-product-add-to-cart.php:443
 
 
 
 
 
 
 
 
 
 
 
 
 
4342
  msgid "Add to Cart Button Custom URL"
4343
  msgstr ""
4344
 
4345
- #: includes/class-wcj-product-add-to-cart.php:448
4346
  msgid "Custom Add to Cart Buttons URL on Archives on per Product Basis"
4347
  msgstr ""
4348
 
4349
- #: includes/class-wcj-product-add-to-cart.php:460
4350
  msgid "Add to Cart Button AJAX"
4351
  msgstr ""
4352
 
4353
- #: includes/class-wcj-product-add-to-cart.php:465
4354
  msgid "Disable/Enable Add to Cart Button AJAX on per Product Basis"
4355
  msgstr ""
4356
 
4357
- #: includes/class-wcj-product-add-to-cart.php:482
4358
  msgid "Open External Products on Add to Cart in New Window"
4359
  msgstr ""
4360
 
4361
- #: includes/class-wcj-product-add-to-cart.php:483
4362
  msgid "Enable on Single Product Pages"
4363
  msgstr ""
4364
 
4365
- #: includes/class-wcj-product-add-to-cart.php:490
4366
  msgid "Enable on Category/Archive Pages"
4367
  msgstr ""
4368
 
@@ -4374,11 +4859,11 @@ msgstr ""
4374
  msgid "Add (paid/free/discount) addons to WooCommerce products."
4375
  msgstr ""
4376
 
4377
- #: includes/class-wcj-product-addons.php:99
4378
  msgid "Some of the required addons are not selected!"
4379
  msgstr ""
4380
 
4381
- #: includes/class-wcj-product-addons.php:114
4382
  msgid ""
4383
  "Booster: Free plugin's version is limited to only three products with per "
4384
  "product addons enabled at a time. You will need to get <a href=\"http://"
@@ -4386,126 +4871,126 @@ msgid ""
4386
  "number of products with per product addons."
4387
  msgstr ""
4388
 
4389
- #: includes/class-wcj-product-addons.php:446
4390
- #: includes/class-wcj-wholesale-price.php:281
4391
- #: includes/class-wcj-wholesale-price.php:316
4392
  msgid "Save product after you change this number."
4393
  msgstr ""
4394
 
4395
- #: includes/class-wcj-product-addons.php:449
4396
- #: includes/class-wcj-product-addons.php:560
4397
  msgid "Product Addons Total Number"
4398
  msgstr ""
4399
 
4400
- #: includes/class-wcj-product-addons.php:456
4401
- #: includes/class-wcj-product-addons.php:576
4402
  msgid "Product Addon"
4403
  msgstr ""
4404
 
4405
- #: includes/class-wcj-product-addons.php:472
4406
- #: includes/class-wcj-product-addons.php:590
4407
  msgid "Radio Buttons"
4408
  msgstr ""
4409
 
4410
- #: includes/class-wcj-product-addons.php:476
4411
- #: includes/class-wcj-product-addons.php:594
4412
  msgid "Label(s)"
4413
  msgstr ""
4414
 
4415
- #: includes/class-wcj-product-addons.php:477
4416
- #: includes/class-wcj-product-addons.php:484
4417
- #: includes/class-wcj-product-addons.php:491
4418
- #: includes/class-wcj-product-addons.php:595
4419
- #: includes/class-wcj-product-addons.php:603
4420
- #: includes/class-wcj-product-addons.php:612
4421
  msgid "For radio enter one value per line."
4422
  msgstr ""
4423
 
4424
- #: includes/class-wcj-product-addons.php:483
4425
- #: includes/class-wcj-product-addons.php:602
4426
  msgid "Price(s)"
4427
  msgstr ""
4428
 
4429
- #: includes/class-wcj-product-addons.php:490
4430
- #: includes/class-wcj-product-addons.php:611
4431
  msgid "Tooltip(s)"
4432
  msgstr ""
4433
 
4434
- #: includes/class-wcj-product-addons.php:497
4435
- #: includes/class-wcj-product-addons.php:619
4436
- #: includes/class-wcj-purchase-data.php:340
4437
  msgid "Default Value"
4438
  msgstr ""
4439
 
4440
- #: includes/class-wcj-product-addons.php:498
4441
- #: includes/class-wcj-product-addons.php:620
4442
  msgid ""
4443
  "For checkbox use 'checked'; for radio enter default label. Leave blank for "
4444
  "no default value."
4445
  msgstr ""
4446
 
4447
- #: includes/class-wcj-product-addons.php:504
4448
  msgid "Is required"
4449
  msgstr ""
4450
 
4451
- #: includes/class-wcj-product-addons.php:533
4452
  msgid "Enable per Product Addons"
4453
  msgstr ""
4454
 
4455
- #: includes/class-wcj-product-addons.php:535
4456
  msgid ""
4457
  "When enabled, this will add new \"Booster: Product Addons\" meta box to each "
4458
  "product's edit page."
4459
  msgstr ""
4460
 
4461
- #: includes/class-wcj-product-addons.php:547
4462
  msgid "All Product Options"
4463
  msgstr ""
4464
 
4465
- #: includes/class-wcj-product-addons.php:552
4466
  msgid "Enable All Products Addons"
4467
  msgstr ""
4468
 
4469
- #: includes/class-wcj-product-addons.php:554
4470
  msgid "When enabled, this will add addons below to all products."
4471
  msgstr ""
4472
 
4473
- #: includes/class-wcj-product-addons.php:561
4474
  msgid "Save changes after you change this number."
4475
  msgstr ""
4476
 
4477
- #: includes/class-wcj-product-addons.php:627
4478
  #: includes/class-wcj-product-by-user.php:233
4479
  msgid "Is Required"
4480
  msgstr ""
4481
 
4482
- #: includes/class-wcj-product-addons.php:647
4483
  msgid "Enable AJAX on Single Product Page"
4484
  msgstr ""
4485
 
4486
- #: includes/class-wcj-product-addons.php:654
4487
  msgid "Addon in Cart Format"
4488
  msgstr ""
4489
 
4490
- #: includes/class-wcj-product-addons.php:662
4491
- #: includes/class-wcj-product-addons.php:685
4492
  msgid "Each Addon"
4493
  msgstr ""
4494
 
4495
- #: includes/class-wcj-product-addons.php:663
4496
- #: includes/class-wcj-product-addons.php:686
4497
  msgid "You can use %addon_label% and %addon_price%."
4498
  msgstr ""
4499
 
4500
- #: includes/class-wcj-product-addons.php:677
4501
  msgid "Addon in Order Details Table Format"
4502
  msgstr ""
4503
 
4504
- #: includes/class-wcj-product-addons.php:700
4505
  msgid "Admin Order Page"
4506
  msgstr ""
4507
 
4508
- #: includes/class-wcj-product-addons.php:701
4509
  msgid "Hide all addons"
4510
  msgstr ""
4511
 
@@ -4524,7 +5009,7 @@ msgid "\"Date to\" must be after \"Date from\""
4524
  msgstr ""
4525
 
4526
  #: includes/class-wcj-product-bookings.php:145
4527
- #: includes/class-wcj-product-open-pricing.php:209
4528
  msgid "Read more"
4529
  msgstr ""
4530
 
@@ -4567,7 +5052,6 @@ msgid ""
4567
  msgstr ""
4568
 
4569
  #: includes/class-wcj-product-bookings.php:432
4570
- #: includes/class-wcj-product-open-pricing.php:369
4571
  msgid "Labels and Messages"
4572
  msgstr ""
4573
 
@@ -4606,93 +5090,93 @@ msgid ""
4606
  "product's edit page."
4607
  msgstr ""
4608
 
4609
- #: includes/class-wcj-product-bulk-price-converter.php:25
4610
- #: includes/class-wcj-product-bulk-price-converter.php:32
4611
  msgid "Bulk Price Converter"
4612
  msgstr ""
4613
 
4614
- #: includes/class-wcj-product-bulk-price-converter.php:26
4615
  msgid "Multiply all WooCommerce products prices by set value."
4616
  msgstr ""
4617
 
4618
- #: includes/class-wcj-product-bulk-price-converter.php:33
4619
  msgid "Bulk Price Converter Tool."
4620
  msgstr ""
4621
 
4622
- #: includes/class-wcj-product-bulk-price-converter.php:150
4623
- #: includes/class-wcj-product-by-user.php:207 includes/class-wcj-sku.php:244
4624
- #: includes/export/class-wcj-fields-helper.php:318
4625
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:156
4626
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:329
4627
  msgid "Categories"
4628
  msgstr ""
4629
 
4630
- #: includes/class-wcj-product-bulk-price-converter.php:151
4631
  msgid "Price Type"
4632
  msgstr ""
4633
 
4634
- #: includes/class-wcj-product-bulk-price-converter.php:152
4635
  msgid "Original Price"
4636
  msgstr ""
4637
 
4638
- #: includes/class-wcj-product-bulk-price-converter.php:153
4639
  msgid "Modified Price"
4640
  msgstr ""
4641
 
4642
- #: includes/class-wcj-product-bulk-price-converter.php:206
4643
  msgid "Multiply value must be above zero."
4644
  msgstr ""
4645
 
4646
- #: includes/class-wcj-product-bulk-price-converter.php:213
4647
  msgid "Prices changed successfully!"
4648
  msgstr ""
4649
 
4650
- #: includes/class-wcj-product-bulk-price-converter.php:238
4651
  msgid "Multiply all product prices by"
4652
  msgstr ""
4653
 
4654
- #: includes/class-wcj-product-bulk-price-converter.php:246
4655
  msgid "Price type to modify"
4656
  msgstr ""
4657
 
4658
- #: includes/class-wcj-product-bulk-price-converter.php:248
4659
  msgid "Both"
4660
  msgstr ""
4661
 
4662
- #: includes/class-wcj-product-bulk-price-converter.php:250
4663
  msgid "Sale prices only"
4664
  msgstr ""
4665
 
4666
- #: includes/class-wcj-product-bulk-price-converter.php:252
4667
  msgid "Regular prices only"
4668
  msgstr ""
4669
 
4670
- #: includes/class-wcj-product-bulk-price-converter.php:259
4671
  msgid "Products category"
4672
  msgstr ""
4673
 
4674
- #: includes/class-wcj-product-bulk-price-converter.php:261
4675
- #: includes/shortcodes/class-wcj-products-shortcodes.php:232
4676
  msgid "Any"
4677
  msgstr ""
4678
 
4679
- #: includes/class-wcj-product-bulk-price-converter.php:263
4680
  msgid "None"
4681
  msgstr ""
4682
 
4683
- #: includes/class-wcj-product-bulk-price-converter.php:270
4684
  msgid "\"Pretty prices\" threshold"
4685
  msgstr ""
4686
 
4687
- #: includes/class-wcj-product-bulk-price-converter.php:274
4688
  msgid "Leave zero to disable"
4689
  msgstr ""
4690
 
4691
- #: includes/class-wcj-product-bulk-price-converter.php:279
4692
  msgid "Preview Prices"
4693
  msgstr ""
4694
 
4695
- #: includes/class-wcj-product-bulk-price-converter.php:286
4696
  msgid "Change Prices"
4697
  msgstr ""
4698
 
@@ -4722,15 +5206,28 @@ msgstr ""
4722
  msgid "Display WooCommerce products by customer's user role."
4723
  msgstr ""
4724
 
4725
- #: includes/class-wcj-product-by-user-role.php:73
4726
  msgid "Visible for User Roles"
4727
  msgstr ""
4728
 
4729
- #: includes/class-wcj-product-by-user-role.php:74
4730
  msgid "Hold Control (Ctrl) key to select multiple roles."
4731
  msgstr ""
4732
 
4733
- #: includes/class-wcj-product-by-user-role.php:88
 
 
 
 
 
 
 
 
 
 
 
 
 
4734
  msgid ""
4735
  "When enabled, module will add new \"Booster: Product Visibility by User Role"
4736
  "\" meta box to each product's edit page."
@@ -4744,15 +5241,22 @@ msgstr ""
4744
  msgid "Let users add new WooCommerce products from frontend."
4745
  msgstr ""
4746
 
 
 
 
 
 
 
4747
  #: includes/class-wcj-product-by-user.php:115
4748
  #: includes/class-wcj-product-by-user.php:124
4749
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:238
4750
  msgid "Wrong user ID!"
4751
  msgstr ""
4752
 
4753
- #: includes/class-wcj-product-by-user.php:164
4754
- #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:359
4755
- msgid "Edit"
 
4756
  msgstr ""
4757
 
4758
  #: includes/class-wcj-product-by-user.php:190
@@ -4760,7 +5264,7 @@ msgid "Use [wcj_product_add_new] shortcode."
4760
  msgstr ""
4761
 
4762
  #: includes/class-wcj-product-by-user.php:203
4763
- #: includes/export/class-wcj-fields-helper.php:292
4764
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:152
4765
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:274
4766
  msgid "Short Description"
@@ -4773,7 +5277,7 @@ msgid "Image"
4773
  msgstr ""
4774
 
4775
  #: includes/class-wcj-product-by-user.php:208
4776
- #: includes/export/class-wcj-fields-helper.php:319
4777
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:157
4778
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:352
4779
  msgid "Tags"
@@ -4821,96 +5325,103 @@ msgstr ""
4821
  msgid "\"%product_title%\" successfully edited!"
4822
  msgstr ""
4823
 
 
 
 
 
 
4824
  #: includes/class-wcj-product-custom-info.php:27
4825
  #: includes/class-wcj-product-info.php:104
4826
  msgid "Add additional info to WooCommerce category and single product pages."
4827
  msgstr ""
4828
 
4829
- #: includes/class-wcj-product-custom-info.php:107
4830
  msgid "Single"
4831
  msgstr ""
4832
 
4833
- #: includes/class-wcj-product-custom-info.php:107
4834
  msgid "Archive"
4835
  msgstr ""
4836
 
4837
- #: includes/class-wcj-product-custom-info.php:110
4838
  msgid "Product Custom Info Blocks"
4839
  msgstr ""
4840
 
4841
- #: includes/class-wcj-product-custom-info.php:148
4842
  msgid "Before single product"
4843
  msgstr ""
4844
 
4845
- #: includes/class-wcj-product-custom-info.php:149
4846
  #: includes/class-wcj-product-info.php:141
4847
  msgid "Before single product summary"
4848
  msgstr ""
4849
 
4850
- #: includes/class-wcj-product-custom-info.php:150
4851
  #: includes/class-wcj-product-info.php:140
4852
  msgid "Inside single product summary"
4853
  msgstr ""
4854
 
4855
- #: includes/class-wcj-product-custom-info.php:151
4856
  #: includes/class-wcj-product-info.php:142
4857
  msgid "After single product summary"
4858
  msgstr ""
4859
 
4860
- #: includes/class-wcj-product-custom-info.php:152
4861
  msgid "After single product"
4862
  msgstr ""
4863
 
4864
- #: includes/class-wcj-product-custom-info.php:153
4865
  msgid "Before add to cart form"
4866
  msgstr ""
4867
 
4868
- #: includes/class-wcj-product-custom-info.php:154
4869
  msgid "Before add to cart button"
4870
  msgstr ""
4871
 
4872
- #: includes/class-wcj-product-custom-info.php:155
4873
  msgid "After add to cart button"
4874
  msgstr ""
4875
 
4876
- #: includes/class-wcj-product-custom-info.php:156
4877
  msgid "After add to cart form"
4878
  msgstr ""
4879
 
4880
- #: includes/class-wcj-product-custom-info.php:159
4881
  #: includes/class-wcj-product-info.php:125
4882
  msgid "Before product"
4883
  msgstr ""
4884
 
4885
- #: includes/class-wcj-product-custom-info.php:160
4886
  #: includes/class-wcj-product-info.php:126
4887
  msgid "Before product title"
4888
  msgstr ""
4889
 
4890
- #: includes/class-wcj-product-custom-info.php:161
4891
  msgid "Inside product title"
4892
  msgstr ""
4893
 
4894
- #: includes/class-wcj-product-custom-info.php:162
4895
  #: includes/class-wcj-product-info.php:128
4896
  msgid "After product title"
4897
  msgstr ""
4898
 
4899
- #: includes/class-wcj-product-custom-info.php:163
4900
  #: includes/class-wcj-product-info.php:127
4901
  msgid "After product"
4902
  msgstr ""
4903
 
4904
- #: includes/class-wcj-product-custom-info.php:175
 
4905
  msgid "Products to Include"
4906
  msgstr ""
4907
 
4908
- #: includes/class-wcj-product-custom-info.php:176
4909
- #: includes/class-wcj-product-custom-info.php:186
4910
  msgid "Leave blank to disable the option."
4911
  msgstr ""
4912
 
4913
- #: includes/class-wcj-product-custom-info.php:185
 
4914
  msgid "Products to Exclude"
4915
  msgstr ""
4916
 
@@ -4922,97 +5433,97 @@ msgstr ""
4922
  msgid "Customize WooCommerce products images, thumbnails and sale flashes."
4923
  msgstr ""
4924
 
4925
- #: includes/class-wcj-product-images.php:182
4926
- #: includes/class-wcj-product-images.php:334
4927
  msgid "Sale!"
4928
  msgstr ""
4929
 
4930
- #: includes/class-wcj-product-images.php:197
4931
  msgid "Replace image with custom HTML on single product page"
4932
  msgstr ""
4933
 
4934
- #: includes/class-wcj-product-images.php:203
4935
  msgid "Replace image with custom HTML on archives"
4936
  msgstr ""
4937
 
4938
- #: includes/class-wcj-product-images.php:213
4939
  msgid "Hide Image on Single"
4940
  msgstr ""
4941
 
4942
- #: includes/class-wcj-product-images.php:223
4943
  msgid "Hide Thumbnails on Single"
4944
  msgstr ""
4945
 
4946
- #: includes/class-wcj-product-images.php:233
4947
  msgid "Hide Image on Archives"
4948
  msgstr ""
4949
 
4950
- #: includes/class-wcj-product-images.php:247
4951
  msgid "Product Image and Thumbnails"
4952
  msgstr ""
4953
 
4954
- #: includes/class-wcj-product-images.php:258
4955
  msgid "Image and Thumbnails on Single"
4956
  msgstr ""
4957
 
4958
- #: includes/class-wcj-product-images.php:265
4959
  msgid "Image on Single"
4960
  msgstr ""
4961
 
4962
- #: includes/class-wcj-product-images.php:272
4963
  msgid "Thumbnails on Single"
4964
  msgstr ""
4965
 
4966
- #: includes/class-wcj-product-images.php:279
4967
  msgid "Image on Archives"
4968
  msgstr ""
4969
 
4970
- #: includes/class-wcj-product-images.php:286
4971
  msgid "Replace Image on Single"
4972
  msgstr ""
4973
 
4974
- #: includes/class-wcj-product-images.php:287
4975
  msgid ""
4976
  "Replace image on single product page with custom HTML. Leave blank to "
4977
  "disable."
4978
  msgstr ""
4979
 
4980
- #: includes/class-wcj-product-images.php:294
4981
  msgid "Replace Thumbnails on Single"
4982
  msgstr ""
4983
 
4984
- #: includes/class-wcj-product-images.php:295
4985
  msgid ""
4986
  "Replace thumbnails on single product page with custom HTML. Leave blank to "
4987
  "disable."
4988
  msgstr ""
4989
 
4990
- #: includes/class-wcj-product-images.php:302
4991
  msgid "Replace Image on Archive"
4992
  msgstr ""
4993
 
4994
- #: includes/class-wcj-product-images.php:303
4995
  msgid ""
4996
  "Replace image on archive pages with custom HTML. Leave blank to disable."
4997
  msgstr ""
4998
 
4999
- #: includes/class-wcj-product-images.php:310
5000
  msgid "Single Product Thumbnails Columns"
5001
  msgstr ""
5002
 
5003
- #: includes/class-wcj-product-images.php:321
5004
  msgid "Product Images Sale Flash"
5005
  msgstr ""
5006
 
5007
- #: includes/class-wcj-product-images.php:332
5008
  msgid "HTML"
5009
  msgstr ""
5010
 
5011
- #: includes/class-wcj-product-images.php:339
5012
  msgid "Hide on Archives (Categories)"
5013
  msgstr ""
5014
 
5015
- #: includes/class-wcj-product-images.php:345
5016
  msgid "Hide on Single"
5017
  msgstr ""
5018
 
@@ -5023,7 +5534,7 @@ msgstr ""
5023
  #: includes/class-wcj-product-info.php:274
5024
  #: includes/class-wcj-product-info.php:377
5025
  #: includes/class-wcj-product-info.php:410
5026
- #: includes/class-wcj-product-tabs.php:550
5027
  msgid "Priority (i.e. Order)"
5028
  msgstr ""
5029
 
@@ -5153,7 +5664,7 @@ msgid "Product Input Fields Number"
5153
  msgstr ""
5154
 
5155
  #: includes/class-wcj-product-input-fields.php:198
5156
- #: includes/input-fields/class-wcj-product-input-fields-abstract.php:300
5157
  #: includes/input-fields/class-wcj-product-input-fields-per-product.php:164
5158
  msgid "Product Input Field"
5159
  msgstr ""
@@ -5182,177 +5693,139 @@ msgstr ""
5182
  msgid "Replace Field ID with Field Label"
5183
  msgstr ""
5184
 
5185
- #: includes/class-wcj-product-listings.php:25
5186
  msgid "Product Listings"
5187
  msgstr ""
5188
 
5189
- #: includes/class-wcj-product-listings.php:26
5190
  msgid ""
5191
  "Change WooCommerce display options for shop and category pages: show/hide "
5192
- "categories count, exclude categories, show/hide empty categories. Add "
5193
- "\"products per page\" selector."
5194
- msgstr ""
5195
-
5196
- #: includes/class-wcj-product-listings.php:141
5197
- #: includes/class-wcj-product-listings.php:491
5198
- msgid ""
5199
- "Products <strong>%from% - %to%</strong> from <strong>%total%</strong>. "
5200
- "Products on page %select_form%"
5201
  msgstr ""
5202
 
5203
- #: includes/class-wcj-product-listings.php:362
5204
  msgid "Shop Page Display Options"
5205
  msgstr ""
5206
 
5207
- #: includes/class-wcj-product-listings.php:364
 
5208
  msgid ""
5209
- "This will work only when \"Shop Page Display\" in \"WooCommerce > Settings > "
5210
- "Products > Product Listings\" is set to \"Show subcategories\" or \"Show both"
5211
- "\"."
5212
  msgstr ""
5213
 
5214
- #: includes/class-wcj-product-listings.php:368
5215
  msgid "Categories Count"
5216
  msgstr ""
5217
 
5218
- #: includes/class-wcj-product-listings.php:369
5219
  msgid "Hide categories count on shop page"
5220
  msgstr ""
5221
 
5222
- #: includes/class-wcj-product-listings.php:375
5223
  msgid "Exclude Categories"
5224
  msgstr ""
5225
 
5226
- #: includes/class-wcj-product-listings.php:376
5227
  msgid ""
5228
- " Excludes one or more categories from the shop page. This parameter takes a "
5229
- "comma-separated list of categories by unique ID, in ascending order. Leave "
5230
- "blank to disable."
5231
  msgstr ""
5232
 
5233
- #: includes/class-wcj-product-listings.php:383
5234
- #: includes/class-wcj-product-listings.php:424
5235
  msgid "Hide Empty"
5236
  msgstr ""
5237
 
5238
- #: includes/class-wcj-product-listings.php:384
5239
  msgid "Hide empty categories on shop page"
5240
  msgstr ""
5241
 
5242
- #: includes/class-wcj-product-listings.php:390
5243
- #: includes/class-wcj-product-listings.php:431
5244
  msgid "Show Products"
5245
  msgstr ""
5246
 
5247
- #: includes/class-wcj-product-listings.php:391
5248
  msgid "Show products if no categories are displayed on shop page"
5249
  msgstr ""
5250
 
5251
- #: includes/class-wcj-product-listings.php:401
5252
  msgid "Category Display Options"
5253
  msgstr ""
5254
 
5255
- #: includes/class-wcj-product-listings.php:403
 
5256
  msgid ""
5257
- "This will work only when \"Default Category Display\" in \"WooCommerce > "
5258
- "Settings > Products > Product Listings\" is set to \"Show subcategories\" or "
5259
- "\"Show both\"."
5260
  msgstr ""
5261
 
5262
- #: includes/class-wcj-product-listings.php:407
5263
  msgid "Subcategories Count"
5264
  msgstr ""
5265
 
5266
- #: includes/class-wcj-product-listings.php:408
5267
  msgid "Hide subcategories count on category pages"
5268
  msgstr ""
5269
 
5270
- #: includes/class-wcj-product-listings.php:416
5271
  msgid "Exclude Subcategories"
5272
  msgstr ""
5273
 
5274
- #: includes/class-wcj-product-listings.php:417
5275
  msgid ""
5276
- " Excludes one or more categories from the category (archive) pages. This "
5277
- "parameter takes a comma-separated list of categories by unique ID, in "
5278
- "ascending order. Leave blank to disable."
5279
  msgstr ""
5280
 
5281
- #: includes/class-wcj-product-listings.php:425
5282
  msgid "Hide empty subcategories on category pages"
5283
  msgstr ""
5284
 
5285
- #: includes/class-wcj-product-listings.php:432
5286
  msgid "Show products if no categories are displayed on category page"
5287
  msgstr ""
5288
 
5289
- #: includes/class-wcj-product-listings.php:442
5290
- msgid "Products per Page Options"
5291
- msgstr ""
5292
-
5293
- #: includes/class-wcj-product-listings.php:447
5294
- msgid "Enable Products per Page"
5295
- msgstr ""
5296
-
5297
- #: includes/class-wcj-product-listings.php:454
5298
- msgid "Select Options"
5299
- msgstr ""
5300
-
5301
- #: includes/class-wcj-product-listings.php:455
5302
- msgid "Name|Number; one per line; -1 for all products"
5303
- msgstr ""
5304
-
5305
- #: includes/class-wcj-product-listings.php:477
5306
- msgid "Before shop loop"
5307
- msgstr ""
5308
-
5309
- #: includes/class-wcj-product-listings.php:478
5310
- msgid "After shop loop"
5311
- msgstr ""
5312
-
5313
- #: includes/class-wcj-product-listings.php:482
5314
- msgid "Position Priority"
5315
- msgstr ""
5316
-
5317
- #: includes/class-wcj-product-listings.php:500
5318
  msgid "TAX Display Prices in the Shop"
5319
  msgstr ""
5320
 
5321
- #: includes/class-wcj-product-listings.php:502
5322
  msgid ""
5323
  "If you want to display part of your products including TAX and another part "
5324
  "excluding TAX, you can set it here."
5325
  msgstr ""
5326
 
5327
- #: includes/class-wcj-product-listings.php:506
5328
  msgid "Products - Including TAX"
5329
  msgstr ""
5330
 
5331
- #: includes/class-wcj-product-listings.php:508
5332
  msgid "Select products to display including TAX."
5333
  msgstr ""
5334
 
5335
- #: includes/class-wcj-product-listings.php:516
5336
  msgid "Products - Excluding TAX"
5337
  msgstr ""
5338
 
5339
- #: includes/class-wcj-product-listings.php:518
5340
  msgid "Select products to display excluding TAX."
5341
  msgstr ""
5342
 
5343
- #: includes/class-wcj-product-listings.php:526
5344
  msgid "Product Categories - Including TAX"
5345
  msgstr ""
5346
 
5347
- #: includes/class-wcj-product-listings.php:528
5348
  msgid "Select product categories to display including TAX."
5349
  msgstr ""
5350
 
5351
- #: includes/class-wcj-product-listings.php:536
5352
  msgid "Product Categories - Excluding TAX"
5353
  msgstr ""
5354
 
5355
- #: includes/class-wcj-product-listings.php:538
5356
  msgid "Select product categories to display excluding TAX."
5357
  msgstr ""
5358
 
@@ -5365,7 +5838,7 @@ msgid ""
5365
  "Let your WooCommerce store customers enter price for the product manually."
5366
  msgstr ""
5367
 
5368
- #: includes/class-wcj-product-open-pricing.php:131
5369
  msgid ""
5370
  "Booster: Free plugin's version is limited to only one open pricing product "
5371
  "enabled at a time. You will need to get <a href=\"http://booster.io/plus/\" "
@@ -5373,60 +5846,76 @@ msgid ""
5373
  "products."
5374
  msgstr ""
5375
 
5376
- #: includes/class-wcj-product-open-pricing.php:184
5377
  msgid "Default Price"
5378
  msgstr ""
5379
 
5380
- #: includes/class-wcj-product-open-pricing.php:190
5381
  msgid "Min Price"
5382
  msgstr ""
5383
 
5384
- #: includes/class-wcj-product-open-pricing.php:196
5385
  msgid "Max Price"
5386
  msgstr ""
5387
 
5388
- #: includes/class-wcj-product-open-pricing.php:265
5389
- #: includes/class-wcj-product-open-pricing.php:391
5390
  msgid "Price is required!"
5391
  msgstr ""
5392
 
5393
- #: includes/class-wcj-product-open-pricing.php:269
5394
- #: includes/class-wcj-product-open-pricing.php:398
5395
- msgid "Entered price is to small!"
5396
  msgstr ""
5397
 
5398
- #: includes/class-wcj-product-open-pricing.php:275
5399
- #: includes/class-wcj-product-open-pricing.php:405
5400
- msgid "Entered price is to big!"
5401
  msgstr ""
5402
 
5403
- #: includes/class-wcj-product-open-pricing.php:332
5404
- #: includes/class-wcj-product-open-pricing.php:376
5405
  msgid "Name Your Price"
5406
  msgstr ""
5407
 
5408
- #: includes/class-wcj-product-open-pricing.php:374
5409
  msgid "Frontend Label"
5410
  msgstr ""
5411
 
5412
- #: includes/class-wcj-product-open-pricing.php:381
5413
  msgid "Frontend Template"
5414
  msgstr ""
5415
 
5416
- #: includes/class-wcj-product-open-pricing.php:382
5417
  msgid "Here you can use"
5418
  msgstr ""
5419
 
5420
- #: includes/class-wcj-product-open-pricing.php:389
 
 
 
 
 
 
 
 
 
 
 
 
5421
  msgid "Message on Empty Price"
5422
  msgstr ""
5423
 
5424
- #: includes/class-wcj-product-open-pricing.php:396
5425
- msgid "Message on Price to Small"
 
 
 
 
5426
  msgstr ""
5427
 
5428
- #: includes/class-wcj-product-open-pricing.php:403
5429
- msgid "Message on Price to Big"
5430
  msgstr ""
5431
 
5432
  #: includes/class-wcj-product-price-by-formula.php:27
@@ -5437,11 +5926,11 @@ msgstr ""
5437
  msgid "Set formula for automatic WooCommerce product price calculation."
5438
  msgstr ""
5439
 
5440
- #: includes/class-wcj-product-price-by-formula.php:119
5441
  msgid "Error in formula"
5442
  msgstr ""
5443
 
5444
- #: includes/class-wcj-product-price-by-formula.php:206
5445
  msgid ""
5446
  "Booster: Free plugin's version is limited to only one price by formula "
5447
  "product enabled at a time. You will need to get <a href=\"http://booster.io/"
@@ -5449,46 +5938,56 @@ msgid ""
5449
  "by formula products."
5450
  msgstr ""
5451
 
5452
- #: includes/class-wcj-product-price-by-formula.php:244
 
 
 
 
 
 
5453
  msgid "Use values below"
5454
  msgstr ""
5455
 
5456
- #: includes/class-wcj-product-price-by-formula.php:245
5457
  msgid "Use default values"
5458
  msgstr ""
5459
 
5460
- #: includes/class-wcj-product-price-by-formula.php:247
5461
  msgid "Calculation"
5462
  msgstr ""
5463
 
5464
- #: includes/class-wcj-product-price-by-formula.php:253
5465
- #: includes/class-wcj-product-price-by-formula.php:313
5466
  msgid "Formula"
5467
  msgstr ""
5468
 
5469
- #: includes/class-wcj-product-price-by-formula.php:259
5470
  msgid "Number of Parameters"
5471
  msgstr ""
5472
 
5473
- #: includes/class-wcj-product-price-by-formula.php:293
5474
  msgid "Final Price Preview"
5475
  msgstr ""
5476
 
5477
- #: includes/class-wcj-product-price-by-formula.php:307
5478
  msgid "Default Settings"
5479
  msgstr ""
5480
 
5481
- #: includes/class-wcj-product-price-by-formula.php:309
5482
  msgid ""
5483
  "You can set default settings here. All settings can later be changed in "
5484
  "individual product's edit page."
5485
  msgstr ""
5486
 
5487
- #: includes/class-wcj-product-price-by-formula.php:314
5488
  msgid "Use \"x\" variable for product's base price. For example: x+p1*p2"
5489
  msgstr ""
5490
 
5491
- #: includes/class-wcj-product-price-by-formula.php:320
 
 
 
 
5492
  msgid "Total Params"
5493
  msgstr ""
5494
 
@@ -5502,227 +6001,263 @@ msgid ""
5502
  "remove WooCommerce default product tabs."
5503
  msgstr ""
5504
 
5505
- #: includes/class-wcj-product-tabs.php:288
5506
  msgid "Booster: Custom Tabs"
5507
  msgstr ""
5508
 
5509
- #: includes/class-wcj-product-tabs.php:405
5510
  msgid "Total number of custom tabs"
5511
  msgstr ""
5512
 
5513
- #: includes/class-wcj-product-tabs.php:411
5514
  #: includes/input-fields/class-wcj-product-input-fields-per-product.php:153
5515
  msgid "Click \"Update\" product after you change this number."
5516
  msgstr ""
5517
 
5518
- #: includes/class-wcj-product-tabs.php:426
5519
- #: includes/class-wcj-related-products.php:127
 
5520
  msgid "Order"
5521
  msgstr ""
5522
 
5523
- #: includes/class-wcj-product-tabs.php:443
5524
- #: includes/class-wcj-product-tabs.php:541
5525
- #: includes/class-wcj-product-tabs.php:710
5526
  msgid "Custom Product Tab"
5527
  msgstr ""
5528
 
5529
- #: includes/class-wcj-product-tabs.php:497
5530
  msgid "Custom Product Tabs Options"
5531
  msgstr ""
5532
 
5533
- #: includes/class-wcj-product-tabs.php:499
5534
  msgid "This section lets you add custom single product tabs."
5535
  msgstr ""
5536
 
5537
- #: includes/class-wcj-product-tabs.php:503
5538
  msgid "Custom Product Tabs Number"
5539
  msgstr ""
5540
 
5541
- #: includes/class-wcj-product-tabs.php:558
5542
- #: includes/class-wcj-product-tabs.php:727
5543
  msgid "You can use shortcodes here..."
5544
  msgstr ""
5545
 
5546
- #: includes/class-wcj-product-tabs.php:566
5547
- #: includes/class-wcj-product-tabs.php:735
5548
  msgid "PRODUCTS to HIDE this tab"
5549
  msgstr ""
5550
 
5551
- #: includes/class-wcj-product-tabs.php:567
5552
- #: includes/class-wcj-product-tabs.php:736
5553
  msgid "To hide this tab from some products, enter products here."
5554
  msgstr ""
5555
 
5556
- #: includes/class-wcj-product-tabs.php:576
5557
- #: includes/class-wcj-product-tabs.php:745
5558
  msgid "PRODUCTS to SHOW this tab"
5559
  msgstr ""
5560
 
5561
- #: includes/class-wcj-product-tabs.php:577
5562
- #: includes/class-wcj-product-tabs.php:746
5563
  msgid "To show this tab only for some products, enter products here."
5564
  msgstr ""
5565
 
5566
- #: includes/class-wcj-product-tabs.php:586
5567
- #: includes/class-wcj-product-tabs.php:755
5568
  msgid "CATEGORIES to HIDE this tab"
5569
  msgstr ""
5570
 
5571
- #: includes/class-wcj-product-tabs.php:587
5572
- #: includes/class-wcj-product-tabs.php:756
5573
  msgid "To hide this tab from some categories, enter categories here."
5574
  msgstr ""
5575
 
5576
- #: includes/class-wcj-product-tabs.php:596
5577
- #: includes/class-wcj-product-tabs.php:765
5578
  msgid "CATEGORIES to SHOW this tab"
5579
  msgstr ""
5580
 
5581
- #: includes/class-wcj-product-tabs.php:597
5582
- #: includes/class-wcj-product-tabs.php:766
5583
  msgid "To show this tab only for some categories, enter categories here."
5584
  msgstr ""
5585
 
5586
- #: includes/class-wcj-product-tabs.php:606
5587
- #: includes/class-wcj-product-tabs.php:775
5588
  msgid "TAGS to HIDE this tab"
5589
  msgstr ""
5590
 
5591
- #: includes/class-wcj-product-tabs.php:607
5592
- #: includes/class-wcj-product-tabs.php:776
5593
  msgid "To hide this tab from some tags, enter tags here."
5594
  msgstr ""
5595
 
5596
- #: includes/class-wcj-product-tabs.php:616
5597
- #: includes/class-wcj-product-tabs.php:785
5598
  msgid "TAGS to SHOW this tab"
5599
  msgstr ""
5600
 
5601
- #: includes/class-wcj-product-tabs.php:617
5602
- #: includes/class-wcj-product-tabs.php:786
5603
  msgid "To show this tab only for some tags, enter tags here."
5604
  msgstr ""
5605
 
5606
- #: includes/class-wcj-product-tabs.php:626
5607
  msgid "Comma separated PRODUCT IDs to HIDE this tab"
5608
  msgstr ""
5609
 
5610
- #: includes/class-wcj-product-tabs.php:626
5611
- #: includes/class-wcj-product-tabs.php:635
5612
- #: includes/class-wcj-product-tabs.php:644
5613
- #: includes/class-wcj-product-tabs.php:653
5614
- #: includes/classes/class-wcj-module.php:424
5615
  msgid "Deprecated"
5616
  msgstr ""
5617
 
5618
- #: includes/class-wcj-product-tabs.php:627
5619
  msgid "To hide this tab from some products, enter product IDs here."
5620
  msgstr ""
5621
 
5622
- #: includes/class-wcj-product-tabs.php:635
5623
  msgid "Comma separated PRODUCT IDs to SHOW this tab"
5624
  msgstr ""
5625
 
5626
- #: includes/class-wcj-product-tabs.php:636
5627
  msgid "To show this tab only for some products, enter product IDs here."
5628
  msgstr ""
5629
 
5630
- #: includes/class-wcj-product-tabs.php:644
5631
  msgid "Comma separated CATEGORY IDs to HIDE this tab"
5632
  msgstr ""
5633
 
5634
- #: includes/class-wcj-product-tabs.php:645
5635
  msgid "To hide this tab from some categories, enter category IDs here."
5636
  msgstr ""
5637
 
5638
- #: includes/class-wcj-product-tabs.php:653
5639
  msgid "Comma separated CATEGORY IDs to SHOW this tab"
5640
  msgstr ""
5641
 
5642
- #: includes/class-wcj-product-tabs.php:654
5643
  msgid "To show this tab only for some categories, enter category IDs here."
5644
  msgstr ""
5645
 
5646
- #: includes/class-wcj-product-tabs.php:671
5647
  msgid "Custom Product Tabs - Per Product"
5648
  msgstr ""
5649
 
5650
- #: includes/class-wcj-product-tabs.php:673
5651
  msgid "This section lets you set defaults for per product custom tabs."
5652
  msgstr ""
5653
 
5654
- #: includes/class-wcj-product-tabs.php:677
5655
  msgid "Enable Per Product Custom Product Tabs"
5656
  msgstr ""
5657
 
5658
- #: includes/class-wcj-product-tabs.php:679
5659
  msgid "This will add meta boxes to each product's edit page."
5660
  msgstr ""
5661
 
5662
- #: includes/class-wcj-product-tabs.php:685
5663
  msgid "Use Visual Editor"
5664
  msgstr ""
5665
 
5666
- #: includes/class-wcj-product-tabs.php:692
5667
  msgid "Default Per Product Custom Product Tabs Number"
5668
  msgstr ""
5669
 
5670
- #: includes/class-wcj-product-tabs.php:711
5671
  msgid "Default Title"
5672
  msgstr ""
5673
 
5674
- #: includes/class-wcj-product-tabs.php:719
5675
  msgid "Default Priority (i.e. Order)"
5676
  msgstr ""
5677
 
5678
- #: includes/class-wcj-product-tabs.php:726
5679
  msgid "Default Content"
5680
  msgstr ""
5681
 
5682
- #: includes/class-wcj-product-tabs.php:803
5683
  msgid "WooCommerce Standard Product Tabs Options"
5684
  msgstr ""
5685
 
5686
- #: includes/class-wcj-product-tabs.php:805
5687
  msgid "This section lets you customize single product tabs."
5688
  msgstr ""
5689
 
5690
- #: includes/class-wcj-product-tabs.php:809
5691
  msgid "Description Tab"
5692
  msgstr ""
5693
 
5694
- #: includes/class-wcj-product-tabs.php:810
5695
- #: includes/class-wcj-product-tabs.php:833
5696
- #: includes/class-wcj-product-tabs.php:856
5697
  msgid "Remove tab from product page"
5698
  msgstr ""
5699
 
5700
- #: includes/class-wcj-product-tabs.php:817
5701
- #: includes/class-wcj-product-tabs.php:840
5702
- #: includes/class-wcj-product-tabs.php:863
5703
  msgid "Title."
5704
  msgstr ""
5705
 
5706
- #: includes/class-wcj-product-tabs.php:818
5707
- #: includes/class-wcj-product-tabs.php:841
5708
- #: includes/class-wcj-product-tabs.php:864
5709
  msgid "Leave blank for WooCommerce defaults"
5710
  msgstr ""
5711
 
5712
- #: includes/class-wcj-product-tabs.php:828
5713
- #: includes/class-wcj-product-tabs.php:851
5714
- #: includes/class-wcj-product-tabs.php:874
5715
  msgid "Priority (i.e. Order)."
5716
  msgstr ""
5717
 
5718
- #: includes/class-wcj-product-tabs.php:832
5719
  msgid "Additional Information Tab"
5720
  msgstr ""
5721
 
5722
- #: includes/class-wcj-product-tabs.php:855
5723
  msgid "Reviews Tab"
5724
  msgstr ""
5725
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5726
  #: includes/class-wcj-products-xml.php:28
5727
  msgid "Products XML"
5728
  msgstr ""
@@ -5732,12 +6267,12 @@ msgid "WooCommerce products XML feed."
5732
  msgstr ""
5733
 
5734
  #: includes/class-wcj-products-xml.php:96
5735
- #: includes/exchange-rates/class-wcj-exchange-rates-crons.php:203
5736
  msgid "Once Weekly"
5737
  msgstr ""
5738
 
5739
  #: includes/class-wcj-products-xml.php:100
5740
- #: includes/exchange-rates/class-wcj-exchange-rates-crons.php:207
5741
  msgid "Once a Minute"
5742
  msgstr ""
5743
 
@@ -5749,200 +6284,384 @@ msgstr ""
5749
  msgid "An error has occurred while creating products XML file."
5750
  msgstr ""
5751
 
5752
- #: includes/class-wcj-products-xml.php:226
 
 
 
 
 
 
 
 
 
 
5753
  msgid "Create Now"
5754
  msgstr ""
5755
 
5756
- #: includes/class-wcj-products-xml.php:231
 
 
 
 
 
5757
  msgid "XML File"
5758
  msgstr ""
5759
 
5760
- #: includes/class-wcj-products-xml.php:243
5761
  msgid "XML Header"
5762
  msgstr ""
5763
 
5764
- #: includes/class-wcj-products-xml.php:250
 
 
 
 
5765
  msgid "XML Item"
5766
  msgstr ""
5767
 
5768
- #: includes/class-wcj-products-xml.php:252
 
5769
  msgid ""
5770
  "You can use shortcodes here. Please take a look at <a target=\"_blank\" href="
5771
  "\"%s\">Booster's products shortcodes</a>."
5772
  msgstr ""
5773
 
5774
- #: includes/class-wcj-products-xml.php:269
5775
  msgid "XML Footer"
5776
  msgstr ""
5777
 
5778
- #: includes/class-wcj-products-xml.php:276
5779
  msgid "XML File Path and Name"
5780
  msgstr ""
5781
 
5782
- #: includes/class-wcj-products-xml.php:277
5783
  msgid "Path on server:"
5784
  msgstr ""
5785
 
5786
- #: includes/class-wcj-products-xml.php:278
5787
  msgid "URL:"
5788
  msgstr ""
5789
 
5790
- #: includes/class-wcj-products-xml.php:285
5791
  msgid "Update Period"
5792
  msgstr ""
5793
 
5794
- #: includes/class-wcj-products-xml.php:297
5795
  msgid ""
5796
  "Possible update periods are: every minute, hourly, twice daily, daily and "
5797
  "weekly."
5798
  msgstr ""
5799
 
5800
- #: includes/class-wcj-purchase-data.php:26
5801
- msgid "Product Cost Price"
 
 
5802
  msgstr ""
5803
 
5804
- #: includes/class-wcj-purchase-data.php:27
5805
- msgid "Save WooCommerce product purchase costs data for admin reports."
 
 
5806
  msgstr ""
5807
 
5808
- #: includes/class-wcj-purchase-data.php:49
5809
- #: includes/class-wcj-purchase-data.php:235
5810
- #: includes/class-wcj-purchase-data.php:390
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5811
  msgid "Profit"
5812
  msgstr ""
5813
 
5814
- #: includes/class-wcj-purchase-data.php:116
5815
- #: includes/class-wcj-purchase-data.php:278
 
 
 
 
 
5816
  msgid "Product cost (purchase) price"
5817
  msgstr ""
5818
 
5819
- #: includes/class-wcj-purchase-data.php:126
5820
- #: includes/class-wcj-purchase-data.php:285
5821
  msgid "Extra expenses (shipping etc.)"
5822
  msgstr ""
5823
 
5824
- #: includes/class-wcj-purchase-data.php:136
5825
- #: includes/class-wcj-purchase-data.php:292
5826
  msgid "Affiliate commission"
5827
  msgstr ""
5828
 
5829
- #: includes/class-wcj-purchase-data.php:168
5830
- #: includes/class-wcj-purchase-data.php:359
5831
  msgid "(Last) Purchase date"
5832
  msgstr ""
5833
 
5834
- #: includes/class-wcj-purchase-data.php:178
5835
- #: includes/class-wcj-purchase-data.php:366
5836
  msgid "Seller"
5837
  msgstr ""
5838
 
5839
- #: includes/class-wcj-purchase-data.php:188
5840
- #: includes/class-wcj-purchase-data.php:373
5841
  msgid "Purchase info"
5842
  msgstr ""
5843
 
5844
- #: includes/class-wcj-purchase-data.php:233
5845
  msgid "Selling"
5846
  msgstr ""
5847
 
5848
- #: includes/class-wcj-purchase-data.php:234
5849
  msgid "Buying"
5850
  msgstr ""
5851
 
5852
- #: includes/class-wcj-purchase-data.php:243
5853
  msgid "Report"
5854
  msgstr ""
5855
 
5856
- #: includes/class-wcj-purchase-data.php:272
5857
  msgid "Price Fields"
5858
  msgstr ""
5859
 
5860
- #: includes/class-wcj-purchase-data.php:274
5861
- #: includes/class-wcj-purchase-data.php:305
5862
  msgid ""
5863
  "This fields will be added to product's edit page and will be included in "
5864
  "product's purchase cost calculation."
5865
  msgstr ""
5866
 
5867
- #: includes/class-wcj-purchase-data.php:303
5868
  msgid "Custom Price Fields"
5869
  msgstr ""
5870
 
5871
- #: includes/class-wcj-purchase-data.php:309
5872
  msgid "Total Custom Price Fields"
5873
  msgstr ""
5874
 
5875
- #: includes/class-wcj-purchase-data.php:321
5876
  msgid "Custom Price Field"
5877
  msgstr ""
5878
 
5879
- #: includes/class-wcj-purchase-data.php:324
5880
- #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-header.php:58
5881
- msgid "Leave blank to disable"
5882
- msgstr ""
5883
-
5884
- #: includes/class-wcj-purchase-data.php:353
5885
  msgid "Info Fields"
5886
  msgstr ""
5887
 
5888
- #: includes/class-wcj-purchase-data.php:355
5889
  msgid "This fields will be added to product's edit page."
5890
  msgstr ""
5891
 
5892
- #: includes/class-wcj-purchase-data.php:384
5893
- msgid "Orders List Custom Columns"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5894
  msgstr ""
5895
 
5896
- #: includes/class-wcj-related-products.php:26
5897
  msgid ""
5898
- "Change displayed WooCommerce related products number, columns, order, relate "
5899
- "by tag and/or category, or hide related products completely."
 
 
 
 
5900
  msgstr ""
5901
 
5902
- #: includes/class-wcj-related-products.php:104
5903
  msgid "Related Products Number"
5904
  msgstr ""
5905
 
5906
- #: includes/class-wcj-related-products.php:110
5907
  msgid "Related Products Columns"
5908
  msgstr ""
5909
 
5910
- #: includes/class-wcj-related-products.php:116
5911
  msgid "Order by"
5912
  msgstr ""
5913
 
5914
- #: includes/class-wcj-related-products.php:121
5915
  msgid "Random"
5916
  msgstr ""
5917
 
5918
- #: includes/class-wcj-related-products.php:122
5919
  msgid "Date"
5920
  msgstr ""
5921
 
5922
- #: includes/class-wcj-related-products.php:128
5923
- msgid "Ignored if order by \"Random\" is selected above."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5924
  msgstr ""
5925
 
5926
- #: includes/class-wcj-related-products.php:133
5927
  msgid "Ascending"
5928
  msgstr ""
5929
 
5930
- #: includes/class-wcj-related-products.php:134
5931
  msgid "Descending"
5932
  msgstr ""
5933
 
5934
- #: includes/class-wcj-related-products.php:138
 
 
 
 
5935
  msgid "Relate by Category"
5936
  msgstr ""
5937
 
5938
- #: includes/class-wcj-related-products.php:144
5939
  msgid "Relate by Tag"
5940
  msgstr ""
5941
 
5942
- #: includes/class-wcj-related-products.php:150
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5943
  msgid "Hide Related Products"
5944
  msgstr ""
5945
 
 
 
 
 
 
 
 
 
 
5946
  #: includes/class-wcj-reports.php:34
5947
  msgid "Reports"
5948
  msgstr ""
@@ -5955,111 +6674,131 @@ msgstr ""
5955
  msgid "Booster: More Ranges - Months"
5956
  msgstr ""
5957
 
5958
- #: includes/class-wcj-reports.php:75 includes/class-wcj-reports.php:111
5959
  msgid "Select Range"
5960
  msgstr ""
5961
 
5962
- #: includes/class-wcj-reports.php:109
5963
  msgid "Booster: More Ranges"
5964
  msgstr ""
5965
 
5966
- #: includes/class-wcj-reports.php:119 includes/class-wcj-reports.php:121
5967
  msgid "Last 14 Days"
5968
  msgstr ""
5969
 
5970
- #: includes/class-wcj-reports.php:126 includes/class-wcj-reports.php:128
5971
  msgid "Last 30 Days"
5972
  msgstr ""
5973
 
5974
- #: includes/class-wcj-reports.php:133 includes/class-wcj-reports.php:135
5975
  msgid "Last 3 Months"
5976
  msgstr ""
5977
 
5978
- #: includes/class-wcj-reports.php:140 includes/class-wcj-reports.php:142
5979
  msgid "Last 6 Months"
5980
  msgstr ""
5981
 
5982
- #: includes/class-wcj-reports.php:147 includes/class-wcj-reports.php:149
5983
  msgid "Last 12 Months"
5984
  msgstr ""
5985
 
5986
- #: includes/class-wcj-reports.php:154 includes/class-wcj-reports.php:156
5987
  msgid "Last 24 Months"
5988
  msgstr ""
5989
 
5990
- #: includes/class-wcj-reports.php:161 includes/class-wcj-reports.php:163
5991
  msgid "Same Days Last Month"
5992
  msgstr ""
5993
 
5994
- #: includes/class-wcj-reports.php:175 includes/class-wcj-reports.php:177
 
 
 
 
5995
  msgid "Last Year"
5996
  msgstr ""
5997
 
5998
- #: includes/class-wcj-reports.php:241
5999
  msgid "Booster: Product Sales"
6000
  msgstr ""
6001
 
6002
- #: includes/class-wcj-reports.php:248
6003
  msgid "Booster: Monthly Sales"
6004
  msgstr ""
6005
 
6006
- #: includes/class-wcj-reports.php:263
6007
  msgid "Booster: All in stock"
6008
  msgstr ""
6009
 
6010
- #: includes/class-wcj-reports.php:270
6011
  msgid "Booster: Understocked"
6012
  msgstr ""
6013
 
6014
- #: includes/class-wcj-reports.php:277
6015
  msgid "Booster: Overstocked"
6016
  msgstr ""
6017
 
6018
- #: includes/class-wcj-reports.php:292
6019
  msgid "Booster: Customers by Country"
6020
  msgstr ""
6021
 
6022
- #: includes/class-wcj-reports.php:299
6023
  msgid "Booster: Customers by Country Sets"
6024
  msgstr ""
6025
 
6026
- #: includes/class-wcj-reports.php:316
6027
  msgid "Product Sales"
6028
  msgstr ""
6029
 
6030
- #: includes/class-wcj-reports.php:323
6031
- msgid "Count variations in product sales report"
 
 
 
 
6032
  msgstr ""
6033
 
6034
- #: includes/class-wcj-reports.php:328
 
 
 
 
 
 
 
 
 
 
 
 
6035
  msgid "Monthly Sales (with currency conversions)"
6036
  msgstr ""
6037
 
6038
- #: includes/class-wcj-reports.php:334
6039
  msgid "Customers by Country"
6040
  msgstr ""
6041
 
6042
- #: includes/class-wcj-reports.php:340
6043
  msgid "Customers by Country Sets"
6044
  msgstr ""
6045
 
6046
- #: includes/class-wcj-reports.php:346
6047
  msgid "All in Stock with sales data"
6048
  msgstr ""
6049
 
6050
- #: includes/class-wcj-reports.php:352
6051
  msgid "Understocked products (calculated by sales data)"
6052
  msgstr ""
6053
 
6054
- #: includes/class-wcj-reports.php:358
6055
  msgid "Overstocked products (calculated by sales data)"
6056
  msgstr ""
6057
 
6058
- #: includes/class-wcj-reports.php:366
6059
  msgid "Available Reports"
6060
  msgstr ""
6061
 
6062
- #: includes/class-wcj-reports.php:383
6063
  msgid "View report"
6064
  msgstr ""
6065
 
@@ -6141,125 +6880,178 @@ msgstr ""
6141
  msgid "Hide WooCommerce shipping when free is available."
6142
  msgstr ""
6143
 
6144
- #: includes/class-wcj-shipping.php:127
6145
  msgid "Booster: Hide shipping"
6146
  msgstr ""
6147
 
6148
- #: includes/class-wcj-shipping.php:128 includes/class-wcj-shipping.php:246
6149
  msgid "Hide all when free is available"
6150
  msgstr ""
6151
 
6152
- #: includes/class-wcj-shipping.php:168
6153
  msgid "WooCommerce > Settings > Shipping"
6154
  msgstr ""
6155
 
6156
- #: includes/class-wcj-shipping.php:171 includes/class-wcj-shipping.php:178
6157
- #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:116
6158
  #: includes/shipping/class-wc-shipping-wcj-custom.php:85
6159
  msgid "Custom Shipping"
6160
  msgstr ""
6161
 
6162
- #: includes/class-wcj-shipping.php:174
6163
  msgid "This section lets you add custom shipping method."
6164
  msgstr ""
6165
 
6166
- #: includes/class-wcj-shipping.php:175
 
6167
  msgid "Visit %s to set method's options."
6168
  msgstr ""
6169
 
6170
- #: includes/class-wcj-shipping.php:185
6171
  msgid "Admin Title"
6172
  msgstr ""
6173
 
6174
- #: includes/class-wcj-shipping.php:187
6175
  #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:51
6176
  msgid "Booster: Custom Shipping"
6177
  msgstr ""
6178
 
6179
- #: includes/class-wcj-shipping.php:198
6180
  msgid "Custom Shipping (Legacy - without Shipping Zones)"
6181
  msgstr ""
6182
 
6183
- #: includes/class-wcj-shipping.php:201
6184
  msgid "This section lets you set number of custom shipping methods to add."
6185
  msgstr ""
6186
 
6187
- #: includes/class-wcj-shipping.php:202
 
6188
  msgid "After setting the number, visit %s to set each method options."
6189
  msgstr ""
6190
 
6191
- #: includes/class-wcj-shipping.php:205
6192
  msgid "Custom Shipping Methods Number"
6193
  msgstr ""
6194
 
6195
- #: includes/class-wcj-shipping.php:217
6196
  msgid "Admin Title Custom Shipping"
6197
  msgstr ""
6198
 
6199
- #: includes/class-wcj-shipping.php:231
6200
  msgid "Hide if Free is Available"
6201
  msgstr ""
6202
 
6203
- #: includes/class-wcj-shipping.php:233
6204
  msgid ""
6205
  "This section lets you hide other shipping options when free shipping is "
6206
  "available on shop frontend."
6207
  msgstr ""
6208
 
6209
- #: includes/class-wcj-shipping.php:245
6210
  msgid "Hide shipping"
6211
  msgstr ""
6212
 
6213
- #: includes/class-wcj-shipping.php:259 includes/class-wcj-shipping.php:265
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6214
  msgid "Shipping Descriptions"
6215
  msgstr ""
6216
 
6217
- #: includes/class-wcj-shipping.php:261
 
6218
  msgid ""
6219
  "This section will allow you to add any text (e.g. description) for shipping "
6220
  "method. Text will be visible on cart and checkout pages. You can add HTML "
6221
  "tags here, e.g. try \"%s\""
6222
  msgstr ""
6223
 
6224
- #: includes/class-wcj-shipping.php:291 includes/class-wcj-shipping.php:297
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6225
  msgid "Shipping Icons"
6226
  msgstr ""
6227
 
6228
- #: includes/class-wcj-shipping.php:293
6229
  msgid ""
6230
  "This section will allow you to add icons for shipping method. Icons will be "
6231
  "visible on cart and checkout pages."
6232
  msgstr ""
6233
 
6234
- #: includes/class-wcj-shipping.php:304
6235
  msgid "Icon Position"
6236
  msgstr ""
6237
 
6238
- #: includes/class-wcj-shipping.php:309
6239
  msgid "Before label"
6240
  msgstr ""
6241
 
6242
- #: includes/class-wcj-shipping.php:310
6243
  msgid "After label"
6244
  msgstr ""
6245
 
6246
- #: includes/class-wcj-shipping.php:314
 
 
 
 
6247
  msgid "Icon Style"
6248
  msgstr ""
6249
 
6250
- #: includes/class-wcj-shipping.php:315
6251
  msgid ""
6252
  "You can also style icons with CSS class \"wcj_shipping_icon\", or id "
6253
  "\"wcj_shipping_icon_method_id\""
6254
  msgstr ""
6255
 
6256
- #: includes/class-wcj-shipping.php:326
6257
- #: includes/export/class-wcj-fields-helper.php:291
6258
  msgid "Image URL"
6259
  msgstr ""
6260
 
6261
- #: includes/class-wcj-sku.php:26 includes/class-wcj-sku.php:245
6262
- #: includes/export/class-wcj-fields-helper.php:283
6263
  msgid "SKU"
6264
  msgstr ""
6265
 
@@ -6275,105 +7067,100 @@ msgstr ""
6275
  msgid "The tool generates and sets product SKUs for existing products."
6276
  msgstr ""
6277
 
6278
- #: includes/class-wcj-sku.php:251
 
 
 
 
6279
  msgid "SKUs generated and set successfully!"
6280
  msgstr ""
6281
 
6282
- #: includes/class-wcj-sku.php:257
6283
  msgid "Preview SKUs"
6284
  msgstr ""
6285
 
6286
- #: includes/class-wcj-sku.php:258
6287
  msgid "Set SKUs"
6288
  msgstr ""
6289
 
6290
- #: includes/class-wcj-sku.php:272
6291
  msgid "SKU Format Options"
6292
  msgstr ""
6293
 
6294
- #: includes/class-wcj-sku.php:277
6295
- msgid "Number Generation"
6296
- msgstr ""
6297
-
6298
- #: includes/class-wcj-sku.php:282
6299
  msgid "From product ID"
6300
  msgstr ""
6301
 
6302
- #: includes/class-wcj-sku.php:283
6303
- #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-numbering.php:45
6304
- msgid "Sequential"
6305
- msgstr ""
6306
-
6307
- #: includes/class-wcj-sku.php:290
6308
  msgid "Sequential Number Generation Counter"
6309
  msgstr ""
6310
 
6311
- #: includes/class-wcj-sku.php:301 includes/class-wcj-sku.php:352
6312
  #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-numbering.php:63
6313
  msgid "Prefix"
6314
  msgstr ""
6315
 
6316
- #: includes/class-wcj-sku.php:307
6317
  msgid "Minimum Number Length"
6318
  msgstr ""
6319
 
6320
- #: includes/class-wcj-sku.php:313 includes/class-wcj-sku.php:361
6321
  #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-numbering.php:70
6322
  msgid "Suffix"
6323
  msgstr ""
6324
 
6325
- #: includes/class-wcj-sku.php:321
6326
  msgid "Variable Products Variations"
6327
  msgstr ""
6328
 
6329
- #: includes/class-wcj-sku.php:322
6330
  msgid ""
6331
  "Please note, that on new variable product creation, variations will get same "
6332
  "SKUs as parent product, and if you want variations to have different SKUs, "
6333
  "you will need to run \"Autogenerate SKUs\" tool manually."
6334
  msgstr ""
6335
 
6336
- #: includes/class-wcj-sku.php:327
6337
  msgid "SKU same as parent's product"
6338
  msgstr ""
6339
 
6340
- #: includes/class-wcj-sku.php:328
6341
  msgid "Generate different SKU for each variation"
6342
  msgstr ""
6343
 
6344
- #: includes/class-wcj-sku.php:329
6345
  msgid "SKU same as parent's product + variation letter suffix"
6346
  msgstr ""
6347
 
6348
- #: includes/class-wcj-sku.php:341
6349
  msgid "Categories Options"
6350
  msgstr ""
6351
 
6352
- #: includes/class-wcj-sku.php:379
6353
- msgid "More Options"
6354
- msgstr ""
6355
-
6356
- #: includes/class-wcj-sku.php:384
6357
  msgid "Automatically Generate SKU for New Products"
6358
  msgstr ""
6359
 
6360
- #: includes/class-wcj-sku.php:386
6361
- msgid "If disabled you can use Autogenerate SKUs tool."
6362
  msgstr ""
6363
 
6364
- #: includes/class-wcj-sku.php:392
6365
  msgid "Allow Duplicate SKUs"
6366
  msgstr ""
6367
 
6368
- #: includes/class-wcj-sku.php:399
 
 
 
 
6369
  msgid "Add SKU to Customer Emails"
6370
  msgstr ""
6371
 
6372
- #: includes/class-wcj-sku.php:412
6373
  msgid "When enabled - all new products will be given (autogenerated) SKU."
6374
  msgstr ""
6375
 
6376
- #: includes/class-wcj-sku.php:413
6377
  msgid ""
6378
  "If you wish to set SKUs for existing products, use \"Autogenerate SKUs\" "
6379
  "Tool."
@@ -6385,75 +7172,113 @@ msgstr ""
6385
 
6386
  #: includes/class-wcj-sorting.php:27
6387
  msgid ""
6388
- "Add more WooCommerce sorting options or remove all sorting including default."
 
6389
  msgstr ""
6390
 
6391
- #: includes/class-wcj-sorting.php:67
6392
- msgid "WooJetpack: Remove All Sorting"
6393
  msgstr ""
6394
 
6395
- #: includes/class-wcj-sorting.php:71
6396
- msgid "Completely remove sorting from the shop front end"
6397
  msgstr ""
6398
 
6399
- #: includes/class-wcj-sorting.php:165 includes/class-wcj-sorting.php:170
6400
- msgid "Remove All Sorting"
 
 
 
 
6401
  msgstr ""
6402
 
6403
  #: includes/class-wcj-sorting.php:171
6404
- msgid "Remove all sorting (including WooCommerce default)"
6405
  msgstr ""
6406
 
6407
- #: includes/class-wcj-sorting.php:183 includes/class-wcj-sorting.php:188
 
 
 
 
 
 
 
 
6408
  msgid "Add More Sorting"
6409
  msgstr ""
6410
 
6411
- #: includes/class-wcj-sorting.php:195
6412
  msgid "Sort by Name"
6413
  msgstr ""
6414
 
6415
- #: includes/class-wcj-sorting.php:196 includes/class-wcj-sorting.php:199
6416
  msgid "Sort by title: A to Z"
6417
  msgstr ""
6418
 
6419
- #: includes/class-wcj-sorting.php:197 includes/class-wcj-sorting.php:206
6420
- #: includes/class-wcj-sorting.php:215 includes/class-wcj-sorting.php:224
6421
- #: includes/class-wcj-sorting.php:242 includes/class-wcj-sorting.php:251
6422
  msgid "Text to show on frontend. Leave blank to disable."
6423
  msgstr ""
6424
 
6425
- #: includes/class-wcj-sorting.php:205 includes/class-wcj-sorting.php:208
6426
  msgid "Sort by title: Z to A"
6427
  msgstr ""
6428
 
6429
- #: includes/class-wcj-sorting.php:213
6430
  msgid "Sort by SKU"
6431
  msgstr ""
6432
 
6433
- #: includes/class-wcj-sorting.php:214 includes/class-wcj-sorting.php:217
6434
  msgid "Sort by SKU: low to high"
6435
  msgstr ""
6436
 
6437
- #: includes/class-wcj-sorting.php:223 includes/class-wcj-sorting.php:226
6438
  msgid "Sort by SKU: high to low"
6439
  msgstr ""
6440
 
6441
- #: includes/class-wcj-sorting.php:232
6442
  msgid "Sort SKUs as numbers instead of as texts"
6443
  msgstr ""
6444
 
6445
- #: includes/class-wcj-sorting.php:240
6446
  msgid "Sort by stock quantity"
6447
  msgstr ""
6448
 
6449
- #: includes/class-wcj-sorting.php:241 includes/class-wcj-sorting.php:244
6450
  msgid "Sort by stock quantity: low to high"
6451
  msgstr ""
6452
 
6453
- #: includes/class-wcj-sorting.php:250 includes/class-wcj-sorting.php:253
6454
  msgid "Sort by stock quantity: high to low"
6455
  msgstr ""
6456
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6457
  #: includes/class-wcj-wholesale-price.php:27
6458
  msgid "Wholesale Price"
6459
  msgstr ""
@@ -6464,129 +7289,129 @@ msgid ""
6464
  "more pay less)."
6465
  msgstr ""
6466
 
6467
- #: includes/class-wcj-wholesale-price.php:252
6468
  msgid "Price directly"
6469
  msgstr ""
6470
 
6471
- #: includes/class-wcj-wholesale-price.php:266
6472
  msgid "Enable per Product Levels"
6473
  msgstr ""
6474
 
6475
- #: includes/class-wcj-wholesale-price.php:273
6476
- #: includes/class-wcj-wholesale-price.php:419
6477
  msgid "Discount Type"
6478
  msgstr ""
6479
 
6480
- #: includes/class-wcj-wholesale-price.php:280
6481
- #: includes/class-wcj-wholesale-price.php:315
6482
- #: includes/class-wcj-wholesale-price.php:455
6483
- #: includes/class-wcj-wholesale-price.php:510
6484
  msgid "Number of levels"
6485
  msgstr ""
6486
 
6487
- #: includes/class-wcj-wholesale-price.php:281
6488
- #: includes/class-wcj-wholesale-price.php:316
6489
  msgid ""
6490
  "Free Booster's version is limited to one level maximum. Please visit http://"
6491
  "booster.io to get full version."
6492
  msgstr ""
6493
 
6494
- #: includes/class-wcj-wholesale-price.php:295
6495
- #: includes/class-wcj-wholesale-price.php:302
6496
- #: includes/class-wcj-wholesale-price.php:330
6497
- #: includes/class-wcj-wholesale-price.php:337
6498
  msgid "Level"
6499
  msgstr ""
6500
 
6501
- #: includes/class-wcj-wholesale-price.php:295
6502
- #: includes/class-wcj-wholesale-price.php:330
6503
- #: includes/class-wcj-wholesale-price.php:468
6504
- #: includes/class-wcj-wholesale-price.php:524
6505
  msgid "Min quantity"
6506
  msgstr ""
6507
 
6508
- #: includes/class-wcj-wholesale-price.php:302
6509
- #: includes/export/class-wcj-fields-helper.php:288
6510
- #: includes/reports/wcj-class-reports-stock.php:321
6511
  msgid "Price"
6512
  msgstr ""
6513
 
6514
- #: includes/class-wcj-wholesale-price.php:302
6515
- #: includes/class-wcj-wholesale-price.php:337
6516
- #: includes/class-wcj-wholesale-price.php:476
6517
- #: includes/class-wcj-wholesale-price.php:477
6518
- #: includes/class-wcj-wholesale-price.php:532
6519
- #: includes/class-wcj-wholesale-price.php:533
6520
  msgid "Discount"
6521
  msgstr ""
6522
 
6523
- #: includes/class-wcj-wholesale-price.php:379
6524
  msgid ""
6525
  "Wholesale Price Levels Options. If you want to display prices table on "
6526
  "frontend, use [wcj_product_wholesale_price_table] shortcode."
6527
  msgstr ""
6528
 
6529
- #: includes/class-wcj-wholesale-price.php:383
6530
  msgid "Enable per Product"
6531
  msgstr ""
6532
 
6533
- #: includes/class-wcj-wholesale-price.php:390
6534
  msgid "Use total cart quantity instead of product quantity"
6535
  msgstr ""
6536
 
6537
- #: includes/class-wcj-wholesale-price.php:397
6538
  msgid "Apply wholesale discount only if no other cart discounts were applied"
6539
  msgstr ""
6540
 
6541
- #: includes/class-wcj-wholesale-price.php:404
6542
  msgid "Show discount info on cart page"
6543
  msgstr ""
6544
 
6545
- #: includes/class-wcj-wholesale-price.php:405
6546
  msgid "Show"
6547
  msgstr ""
6548
 
6549
- #: includes/class-wcj-wholesale-price.php:411
6550
  msgid "If show discount info on cart page is enabled, set format here"
6551
  msgstr ""
6552
 
6553
- #: includes/class-wcj-wholesale-price.php:412
6554
  msgid "Replaced values: %old_price%, %price%, %discount_value%."
6555
  msgstr ""
6556
 
6557
- #: includes/class-wcj-wholesale-price.php:429
6558
  msgid "Products to include"
6559
  msgstr ""
6560
 
6561
- #: includes/class-wcj-wholesale-price.php:430
6562
  msgid "Leave blank to include all products."
6563
  msgstr ""
6564
 
6565
- #: includes/class-wcj-wholesale-price.php:438
6566
  msgid "Products to exclude"
6567
  msgstr ""
6568
 
6569
- #: includes/class-wcj-wholesale-price.php:450
6570
  msgid "Wholesale Levels Options"
6571
  msgstr ""
6572
 
6573
- #: includes/class-wcj-wholesale-price.php:469
6574
- #: includes/class-wcj-wholesale-price.php:525
6575
  msgid "Minimum quantity to apply discount"
6576
  msgstr ""
6577
 
6578
- #: includes/class-wcj-wholesale-price.php:490
6579
  msgid "Additional User Roles Options"
6580
  msgstr ""
6581
 
6582
- #: includes/class-wcj-wholesale-price.php:492
6583
  msgid ""
6584
  "If you want to set different wholesale pricing options for different user "
6585
  "roles, fill this section. Please note that you can also use Booster's "
6586
  "\"Price by User Role\" module without filling this section."
6587
  msgstr ""
6588
 
6589
- #: includes/class-wcj-wholesale-price.php:496
6590
  msgid "User Roles Settings"
6591
  msgstr ""
6592
 
@@ -6598,84 +7423,306 @@ msgstr ""
6598
  msgid "Booster for WooCommerce basic WPML support."
6599
  msgstr ""
6600
 
6601
- #: includes/class-wcj-wpml.php:66 includes/classes/class-wcj-module.php:336
6602
  msgid "Tools"
6603
  msgstr ""
6604
 
6605
- #: includes/class-wcj-wpml.php:71 includes/classes/class-wcj-module.php:342
6606
  msgid "Module Tools"
6607
  msgstr ""
6608
 
6609
- #: includes/class-wcj-wpml.php:76 includes/class-wcj-wpml.php:79
 
 
 
 
 
6610
  msgid "Regenerate wpml-config.xml file"
6611
  msgstr ""
6612
 
6613
- #: includes/class-wcj-wpml.php:104
6614
  msgid "File wpml-config.xml successfully regenerated!"
6615
  msgstr ""
6616
 
6617
- #: includes/classes/class-wcj-module.php:324
6618
- msgid "Back to Module Settings"
6619
  msgstr ""
6620
 
6621
- #: includes/classes/class-wcj-module.php:416
6622
- msgid "disabled"
6623
  msgstr ""
6624
 
6625
- #: includes/classes/class-wcj-module.php:462
6626
- msgid "Reset Settings"
6627
  msgstr ""
6628
 
6629
- #: includes/classes/class-wcj-module.php:468
6630
- msgid "Reset Module to Default Settings"
6631
  msgstr ""
6632
 
6633
- #: includes/classes/class-wcj-module.php:469
6634
- msgid "Reset Submodule to Default Settings"
6635
  msgstr ""
6636
 
6637
- #: includes/classes/class-wcj-module.php:473
6638
- msgid "Reset settings"
6639
  msgstr ""
6640
 
6641
- #: includes/classes/class-wcj-module.php:501
6642
- msgid "Module Options"
6643
  msgstr ""
6644
 
6645
- #: includes/classes/class-wcj-module.php:508
6646
- msgid "Enable Module"
6647
  msgstr ""
6648
 
6649
- #: includes/currencies/wcj-currencies.php:14
6650
- msgid "United Arab Emirates Dirham"
 
6651
  msgstr ""
6652
 
6653
- #: includes/currencies/wcj-currencies.php:15
6654
- msgid "Afghan afghani"
 
 
 
6655
  msgstr ""
6656
 
6657
- #: includes/currencies/wcj-currencies.php:16
6658
- msgid "Albanian lek"
6659
  msgstr ""
6660
 
6661
- #: includes/currencies/wcj-currencies.php:17
6662
- msgid "Armenian dram"
 
6663
  msgstr ""
6664
 
6665
- #: includes/currencies/wcj-currencies.php:18
6666
- msgid "Netherlands Antillean gulden"
6667
  msgstr ""
6668
 
6669
- #: includes/currencies/wcj-currencies.php:19
6670
- msgid "Angolan kwanza"
6671
  msgstr ""
6672
 
6673
- #: includes/currencies/wcj-currencies.php:20
6674
- msgid "Argentine Peso"
6675
  msgstr ""
6676
 
6677
- #: includes/currencies/wcj-currencies.php:21
6678
- msgid "Australian Dollars"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6679
  msgstr ""
6680
 
6681
  #: includes/currencies/wcj-currencies.php:22
@@ -7112,7 +8159,7 @@ msgid "Polish Zloty"
7112
  msgstr ""
7113
 
7114
  #: includes/currencies/wcj-currencies.php:130
7115
- msgid "Paraguayan Guaraní"
7116
  msgstr ""
7117
 
7118
  #: includes/currencies/wcj-currencies.php:131
@@ -7310,14 +8357,17 @@ msgid "[{site_title}] Custom Subject - Order ({order_number}) - {order_date}"
7310
  msgstr ""
7311
 
7312
  #: includes/emails/class-wc-email-wcj-custom.php:251
 
7313
  msgid "New order (%s)"
7314
  msgstr ""
7315
 
7316
  #: includes/emails/class-wc-email-wcj-custom.php:252
 
7317
  msgid "Order status updated to %s"
7318
  msgstr ""
7319
 
7320
  #: includes/emails/class-wc-email-wcj-custom.php:255
 
7321
  msgid "Order status %s to %s"
7322
  msgstr ""
7323
 
@@ -7384,6 +8434,7 @@ msgid "Recipient(s)"
7384
  msgstr ""
7385
 
7386
  #: includes/emails/class-wc-email-wcj-custom.php:297
 
7387
  msgid ""
7388
  "Enter recipients (comma separated) for this email. Defaults to <code>%s</"
7389
  "code>."
@@ -7398,6 +8449,7 @@ msgid "Subject"
7398
  msgstr ""
7399
 
7400
  #: includes/emails/class-wc-email-wcj-custom.php:304
 
7401
  msgid ""
7402
  "This controls the email subject line. Leave blank to use the default "
7403
  "subject: <code>%s</code>."
@@ -7408,6 +8460,7 @@ msgid "Email Heading"
7408
  msgstr ""
7409
 
7410
  #: includes/emails/class-wc-email-wcj-custom.php:311
 
7411
  msgid ""
7412
  "This controls the main heading contained within the email notification. "
7413
  "Leave blank to use the default heading: <code>%s</code>."
@@ -7434,1466 +8487,1468 @@ msgstr ""
7434
  msgid "Plain text template"
7435
  msgstr ""
7436
 
7437
- #: includes/exchange-rates/class-wcj-exchange-rates-crons.php:178
7438
  msgid "Cron job: exchange rates successfully updated"
7439
  msgstr ""
7440
 
7441
- #: includes/exchange-rates/class-wcj-exchange-rates-crons.php:180
7442
  msgid "Cron job: exchange rates not updated, as currency_from == currency_to"
7443
  msgstr ""
7444
 
7445
- #: includes/exchange-rates/class-wcj-exchange-rates-crons.php:183
7446
  msgid "Cron job: exchange rates update failed"
7447
  msgstr ""
7448
 
7449
- #: includes/export/class-wcj-fields-helper.php:35
7450
- msgid "Customer Nr."
 
7451
  msgstr ""
7452
 
7453
  #: includes/export/class-wcj-fields-helper.php:36
7454
- #: includes/export/class-wcj-fields-helper.php:132
7455
- #: includes/export/class-wcj-fields-helper.php:217
7456
- msgid "Billing Email"
7457
  msgstr ""
7458
 
7459
  #: includes/export/class-wcj-fields-helper.php:37
7460
- #: includes/export/class-wcj-fields-helper.php:122
7461
- #: includes/export/class-wcj-fields-helper.php:207
7462
- msgid "Billing First Name"
7463
  msgstr ""
7464
 
7465
  #: includes/export/class-wcj-fields-helper.php:38
7466
  #: includes/export/class-wcj-fields-helper.php:123
7467
  #: includes/export/class-wcj-fields-helper.php:208
7468
- msgid "Billing Last Name"
7469
  msgstr ""
7470
 
7471
  #: includes/export/class-wcj-fields-helper.php:39
7472
  #: includes/export/class-wcj-fields-helper.php:124
7473
  #: includes/export/class-wcj-fields-helper.php:209
7474
- msgid "Billing Company"
7475
  msgstr ""
7476
 
7477
  #: includes/export/class-wcj-fields-helper.php:40
7478
  #: includes/export/class-wcj-fields-helper.php:125
7479
  #: includes/export/class-wcj-fields-helper.php:210
7480
- msgid "Billing Address 1"
7481
  msgstr ""
7482
 
7483
  #: includes/export/class-wcj-fields-helper.php:41
7484
  #: includes/export/class-wcj-fields-helper.php:126
7485
  #: includes/export/class-wcj-fields-helper.php:211
7486
- msgid "Billing Address 2"
7487
  msgstr ""
7488
 
7489
  #: includes/export/class-wcj-fields-helper.php:42
7490
  #: includes/export/class-wcj-fields-helper.php:127
7491
  #: includes/export/class-wcj-fields-helper.php:212
7492
- msgid "Billing City"
7493
  msgstr ""
7494
 
7495
  #: includes/export/class-wcj-fields-helper.php:43
7496
  #: includes/export/class-wcj-fields-helper.php:128
7497
  #: includes/export/class-wcj-fields-helper.php:213
7498
- msgid "Billing State"
7499
  msgstr ""
7500
 
7501
  #: includes/export/class-wcj-fields-helper.php:44
7502
  #: includes/export/class-wcj-fields-helper.php:129
7503
  #: includes/export/class-wcj-fields-helper.php:214
7504
- msgid "Billing Postcode"
7505
  msgstr ""
7506
 
7507
  #: includes/export/class-wcj-fields-helper.php:45
7508
  #: includes/export/class-wcj-fields-helper.php:130
7509
  #: includes/export/class-wcj-fields-helper.php:215
7510
- msgid "Billing Country"
7511
  msgstr ""
7512
 
7513
  #: includes/export/class-wcj-fields-helper.php:46
7514
  #: includes/export/class-wcj-fields-helper.php:131
7515
  #: includes/export/class-wcj-fields-helper.php:216
7516
- msgid "Billing Phone"
7517
  msgstr ""
7518
 
7519
  #: includes/export/class-wcj-fields-helper.php:47
 
 
 
 
 
 
7520
  msgid "Last Order Date"
7521
  msgstr ""
7522
 
7523
- #: includes/export/class-wcj-fields-helper.php:75
7524
  msgid "Customer ID"
7525
  msgstr ""
7526
 
7527
- #: includes/export/class-wcj-fields-helper.php:77
7528
  msgid "First Name"
7529
  msgstr ""
7530
 
7531
- #: includes/export/class-wcj-fields-helper.php:78
7532
  msgid "Last Name"
7533
  msgstr ""
7534
 
7535
- #: includes/export/class-wcj-fields-helper.php:79
7536
  msgid "Login"
7537
  msgstr ""
7538
 
7539
- #: includes/export/class-wcj-fields-helper.php:80
7540
  msgid "Nicename"
7541
  msgstr ""
7542
 
7543
- #: includes/export/class-wcj-fields-helper.php:81
7544
- #: includes/export/class-wcj-fields-helper.php:295
7545
  #: includes/gateways/class-wc-gateway-wcj-custom.php:163
7546
  msgid "URL"
7547
  msgstr ""
7548
 
7549
- #: includes/export/class-wcj-fields-helper.php:82
7550
  #: includes/reports/wcj-class-reports-customers.php:94
7551
  msgid "Registered"
7552
  msgstr ""
7553
 
7554
- #: includes/export/class-wcj-fields-helper.php:83
7555
  msgid "Display Name"
7556
  msgstr ""
7557
 
7558
- #: includes/export/class-wcj-fields-helper.php:111
7559
- #: includes/export/class-wcj-fields-helper.php:194
7560
- #: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:254
7561
- msgid "Order ID"
7562
- msgstr ""
7563
-
7564
- #: includes/export/class-wcj-fields-helper.php:112
7565
- #: includes/export/class-wcj-fields-helper.php:195
7566
- msgid "Order Number"
7567
- msgstr ""
7568
-
7569
  #: includes/export/class-wcj-fields-helper.php:113
7570
  #: includes/export/class-wcj-fields-helper.php:196
7571
- msgid "Order Status"
7572
  msgstr ""
7573
 
7574
  #: includes/export/class-wcj-fields-helper.php:114
7575
  #: includes/export/class-wcj-fields-helper.php:197
7576
- msgid "Order Date"
7577
  msgstr ""
7578
 
7579
  #: includes/export/class-wcj-fields-helper.php:115
7580
  #: includes/export/class-wcj-fields-helper.php:198
7581
- msgid "Order Time"
7582
  msgstr ""
7583
 
7584
  #: includes/export/class-wcj-fields-helper.php:116
7585
  #: includes/export/class-wcj-fields-helper.php:199
7586
- msgid "Order Item Count"
7587
  msgstr ""
7588
 
7589
- #: includes/export/class-wcj-fields-helper.php:118
7590
- #: includes/export/class-wcj-fields-helper.php:203
7591
- #: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:260
7592
- msgid "Order Total"
7593
  msgstr ""
7594
 
7595
  #: includes/export/class-wcj-fields-helper.php:119
7596
  #: includes/export/class-wcj-fields-helper.php:204
7597
- msgid "Order Total Tax"
 
7598
  msgstr ""
7599
 
7600
  #: includes/export/class-wcj-fields-helper.php:120
7601
  #: includes/export/class-wcj-fields-helper.php:205
7602
- msgid "Order Payment Method"
7603
  msgstr ""
7604
 
7605
- #: includes/export/class-wcj-fields-helper.php:133
7606
- #: includes/export/class-wcj-fields-helper.php:218
7607
- msgid "Shipping First Name"
7608
  msgstr ""
7609
 
7610
  #: includes/export/class-wcj-fields-helper.php:134
7611
  #: includes/export/class-wcj-fields-helper.php:219
7612
- msgid "Shipping Last Name"
7613
  msgstr ""
7614
 
7615
  #: includes/export/class-wcj-fields-helper.php:135
7616
  #: includes/export/class-wcj-fields-helper.php:220
7617
- msgid "Shipping Company"
7618
  msgstr ""
7619
 
7620
  #: includes/export/class-wcj-fields-helper.php:136
7621
  #: includes/export/class-wcj-fields-helper.php:221
7622
- msgid "Shipping Address 1"
7623
  msgstr ""
7624
 
7625
  #: includes/export/class-wcj-fields-helper.php:137
7626
  #: includes/export/class-wcj-fields-helper.php:222
7627
- msgid "Shipping Address 2"
7628
  msgstr ""
7629
 
7630
  #: includes/export/class-wcj-fields-helper.php:138
7631
  #: includes/export/class-wcj-fields-helper.php:223
7632
- msgid "Shipping City"
7633
  msgstr ""
7634
 
7635
  #: includes/export/class-wcj-fields-helper.php:139
7636
  #: includes/export/class-wcj-fields-helper.php:224
7637
- msgid "Shipping State"
7638
  msgstr ""
7639
 
7640
  #: includes/export/class-wcj-fields-helper.php:140
7641
  #: includes/export/class-wcj-fields-helper.php:225
7642
- msgid "Shipping Postcode"
7643
  msgstr ""
7644
 
7645
  #: includes/export/class-wcj-fields-helper.php:141
7646
  #: includes/export/class-wcj-fields-helper.php:226
 
 
 
 
 
7647
  msgid "Shipping Country"
7648
  msgstr ""
7649
 
7650
- #: includes/export/class-wcj-fields-helper.php:143
7651
  msgid "Item Name"
7652
  msgstr ""
7653
 
7654
- #: includes/export/class-wcj-fields-helper.php:144
7655
  msgid "Item Meta"
7656
  msgstr ""
7657
 
7658
- #: includes/export/class-wcj-fields-helper.php:145
7659
  msgid "Item Variation Meta"
7660
  msgstr ""
7661
 
7662
- #: includes/export/class-wcj-fields-helper.php:146
7663
  msgid "Item Quantity"
7664
  msgstr ""
7665
 
7666
- #: includes/export/class-wcj-fields-helper.php:147
7667
  msgid "Item Tax Class"
7668
  msgstr ""
7669
 
7670
- #: includes/export/class-wcj-fields-helper.php:148
7671
  msgid "Item Product ID"
7672
  msgstr ""
7673
 
7674
- #: includes/export/class-wcj-fields-helper.php:149
7675
  msgid "Item Variation ID"
7676
  msgstr ""
7677
 
7678
- #: includes/export/class-wcj-fields-helper.php:150
7679
  msgid "Item Line Subtotal"
7680
  msgstr ""
7681
 
7682
- #: includes/export/class-wcj-fields-helper.php:151
7683
  msgid "Item Line Total"
7684
  msgstr ""
7685
 
7686
- #: includes/export/class-wcj-fields-helper.php:152
7687
  msgid "Item Line Subtotal Tax"
7688
  msgstr ""
7689
 
7690
- #: includes/export/class-wcj-fields-helper.php:153
7691
  msgid "Item Line Tax"
7692
  msgstr ""
7693
 
7694
- #: includes/export/class-wcj-fields-helper.php:154
7695
  msgid "Item Line Subtotal Plus Tax"
7696
  msgstr ""
7697
 
7698
- #: includes/export/class-wcj-fields-helper.php:155
7699
  msgid "Item Line Total Plus Tax"
7700
  msgstr ""
7701
 
7702
- #: includes/export/class-wcj-fields-helper.php:156
7703
  msgid "Item Product Input Fields"
7704
  msgstr ""
7705
 
7706
- #: includes/export/class-wcj-fields-helper.php:200
7707
  msgid "Order Items"
7708
  msgstr ""
7709
 
7710
- #: includes/export/class-wcj-fields-helper.php:201
7711
  msgid "Order Items Product Input Fields"
7712
  msgstr ""
7713
 
7714
- #: includes/export/class-wcj-fields-helper.php:281
7715
  msgid "Product ID"
7716
  msgstr ""
7717
 
7718
- #: includes/export/class-wcj-fields-helper.php:284
 
 
 
 
7719
  msgid "Total Stock"
7720
  msgstr ""
7721
 
7722
- #: includes/export/class-wcj-fields-helper.php:285
7723
  msgid "Stock Quantity"
7724
  msgstr ""
7725
 
7726
- #: includes/export/class-wcj-fields-helper.php:296
7727
  msgid "Shipping Class"
7728
  msgstr ""
7729
 
7730
- #: includes/export/class-wcj-fields-helper.php:297
7731
  msgid "Shipping Class ID"
7732
  msgstr ""
7733
 
7734
- #: includes/export/class-wcj-fields-helper.php:298
7735
  msgid "Width"
7736
  msgstr ""
7737
 
7738
- #: includes/export/class-wcj-fields-helper.php:299
7739
  msgid "Length"
7740
  msgstr ""
7741
 
7742
- #: includes/export/class-wcj-fields-helper.php:300
7743
  msgid "Height"
7744
  msgstr ""
7745
 
7746
- #: includes/export/class-wcj-fields-helper.php:301
7747
  msgid "Weight"
7748
  msgstr ""
7749
 
7750
- #: includes/export/class-wcj-fields-helper.php:302
7751
  msgid "Downloadable"
7752
  msgstr ""
7753
 
7754
- #: includes/export/class-wcj-fields-helper.php:303
7755
  msgid "Virtual"
7756
  msgstr ""
7757
 
7758
- #: includes/export/class-wcj-fields-helper.php:304
7759
  msgid "Sold Individually"
7760
  msgstr ""
7761
 
7762
- #: includes/export/class-wcj-fields-helper.php:305
7763
  msgid "Tax Status"
7764
  msgstr ""
7765
 
7766
- #: includes/export/class-wcj-fields-helper.php:306
7767
- msgid "Tax Class"
7768
- msgstr ""
7769
-
7770
- #: includes/export/class-wcj-fields-helper.php:307
7771
  msgid "Manage Stock"
7772
  msgstr ""
7773
 
7774
- #: includes/export/class-wcj-fields-helper.php:308
7775
  msgid "Stock Status"
7776
  msgstr ""
7777
 
7778
- #: includes/export/class-wcj-fields-helper.php:309
7779
  msgid "Backorders"
7780
  msgstr ""
7781
 
7782
- #: includes/export/class-wcj-fields-helper.php:310
7783
  msgid "Featured"
7784
  msgstr ""
7785
 
7786
- #: includes/export/class-wcj-fields-helper.php:311
7787
- msgid "Visibility"
7788
- msgstr ""
7789
-
7790
- #: includes/export/class-wcj-fields-helper.php:312
7791
  msgid "Price Including Tax"
7792
  msgstr ""
7793
 
7794
- #: includes/export/class-wcj-fields-helper.php:313
7795
  msgid "Price Excluding Tax"
7796
  msgstr ""
7797
 
7798
- #: includes/export/class-wcj-fields-helper.php:314
7799
  msgid "Display Price"
7800
  msgstr ""
7801
 
7802
- #: includes/export/class-wcj-fields-helper.php:315
7803
  msgid "Average Rating"
7804
  msgstr ""
7805
 
7806
- #: includes/export/class-wcj-fields-helper.php:316
7807
  msgid "Rating Count"
7808
  msgstr ""
7809
 
7810
- #: includes/export/class-wcj-fields-helper.php:317
7811
  msgid "Review Count"
7812
  msgstr ""
7813
 
7814
- #: includes/export/class-wcj-fields-helper.php:320
7815
  msgid "Dimensions"
7816
  msgstr ""
7817
 
7818
- #: includes/export/class-wcj-fields-helper.php:321
7819
  msgid "Formatted Name"
7820
  msgstr ""
7821
 
7822
- #: includes/export/class-wcj-fields-helper.php:322
7823
  msgid "Availability"
7824
  msgstr ""
7825
 
7826
- #: includes/export/class-wcj-fields-helper.php:323
7827
  msgid "Availability Class"
7828
  msgstr ""
7829
 
7830
- #: includes/functions/wcj-country-functions.php:113
7831
  msgid "Afghanistan"
7832
  msgstr ""
7833
 
7834
- #: includes/functions/wcj-country-functions.php:114
7835
  msgid "&#197;land Islands"
7836
  msgstr ""
7837
 
7838
- #: includes/functions/wcj-country-functions.php:115
7839
  msgid "Albania"
7840
  msgstr ""
7841
 
7842
- #: includes/functions/wcj-country-functions.php:116
7843
  msgid "Algeria"
7844
  msgstr ""
7845
 
7846
- #: includes/functions/wcj-country-functions.php:117
7847
  msgid "Andorra"
7848
  msgstr ""
7849
 
7850
- #: includes/functions/wcj-country-functions.php:118
7851
  msgid "Angola"
7852
  msgstr ""
7853
 
7854
- #: includes/functions/wcj-country-functions.php:119
7855
  msgid "Anguilla"
7856
  msgstr ""
7857
 
7858
- #: includes/functions/wcj-country-functions.php:120
7859
  msgid "Antarctica"
7860
  msgstr ""
7861
 
7862
- #: includes/functions/wcj-country-functions.php:121
7863
  msgid "Antigua and Barbuda"
7864
  msgstr ""
7865
 
7866
- #: includes/functions/wcj-country-functions.php:122
7867
  msgid "Argentina"
7868
  msgstr ""
7869
 
7870
- #: includes/functions/wcj-country-functions.php:123
7871
  msgid "Armenia"
7872
  msgstr ""
7873
 
7874
- #: includes/functions/wcj-country-functions.php:124
7875
  msgid "Aruba"
7876
  msgstr ""
7877
 
7878
- #: includes/functions/wcj-country-functions.php:125
7879
  msgid "Australia"
7880
  msgstr ""
7881
 
7882
- #: includes/functions/wcj-country-functions.php:126
7883
  msgid "Austria"
7884
  msgstr ""
7885
 
7886
- #: includes/functions/wcj-country-functions.php:127
7887
  msgid "Azerbaijan"
7888
  msgstr ""
7889
 
7890
- #: includes/functions/wcj-country-functions.php:128
7891
  msgid "Bahamas"
7892
  msgstr ""
7893
 
7894
- #: includes/functions/wcj-country-functions.php:129
7895
  msgid "Bahrain"
7896
  msgstr ""
7897
 
7898
- #: includes/functions/wcj-country-functions.php:130
7899
  msgid "Bangladesh"
7900
  msgstr ""
7901
 
7902
- #: includes/functions/wcj-country-functions.php:131
7903
  msgid "Barbados"
7904
  msgstr ""
7905
 
7906
- #: includes/functions/wcj-country-functions.php:132
7907
  msgid "Belarus"
7908
  msgstr ""
7909
 
7910
- #: includes/functions/wcj-country-functions.php:133
7911
  msgid "Belgium"
7912
  msgstr ""
7913
 
7914
- #: includes/functions/wcj-country-functions.php:134
7915
  msgid "Belau"
7916
  msgstr ""
7917
 
7918
- #: includes/functions/wcj-country-functions.php:135
7919
  msgid "Belize"
7920
  msgstr ""
7921
 
7922
- #: includes/functions/wcj-country-functions.php:136
7923
  msgid "Benin"
7924
  msgstr ""
7925
 
7926
- #: includes/functions/wcj-country-functions.php:137
7927
  msgid "Bermuda"
7928
  msgstr ""
7929
 
7930
- #: includes/functions/wcj-country-functions.php:138
7931
  msgid "Bhutan"
7932
  msgstr ""
7933
 
7934
- #: includes/functions/wcj-country-functions.php:139
7935
  msgid "Bolivia"
7936
  msgstr ""
7937
 
7938
- #: includes/functions/wcj-country-functions.php:140
7939
  msgid "Bonaire, Saint Eustatius and Saba"
7940
  msgstr ""
7941
 
7942
- #: includes/functions/wcj-country-functions.php:141
7943
  msgid "Bosnia and Herzegovina"
7944
  msgstr ""
7945
 
7946
- #: includes/functions/wcj-country-functions.php:142
7947
  msgid "Botswana"
7948
  msgstr ""
7949
 
7950
- #: includes/functions/wcj-country-functions.php:143
7951
  msgid "Bouvet Island"
7952
  msgstr ""
7953
 
7954
- #: includes/functions/wcj-country-functions.php:144
7955
  msgid "Brazil"
7956
  msgstr ""
7957
 
7958
- #: includes/functions/wcj-country-functions.php:145
7959
  msgid "British Indian Ocean Territory"
7960
  msgstr ""
7961
 
7962
- #: includes/functions/wcj-country-functions.php:146
7963
  msgid "British Virgin Islands"
7964
  msgstr ""
7965
 
7966
- #: includes/functions/wcj-country-functions.php:147
7967
  msgid "Brunei"
7968
  msgstr ""
7969
 
7970
- #: includes/functions/wcj-country-functions.php:148
7971
  msgid "Bulgaria"
7972
  msgstr ""
7973
 
7974
- #: includes/functions/wcj-country-functions.php:149
7975
  msgid "Burkina Faso"
7976
  msgstr ""
7977
 
7978
- #: includes/functions/wcj-country-functions.php:150
7979
  msgid "Burundi"
7980
  msgstr ""
7981
 
7982
- #: includes/functions/wcj-country-functions.php:151
7983
  msgid "Cambodia"
7984
  msgstr ""
7985
 
7986
- #: includes/functions/wcj-country-functions.php:152
7987
  msgid "Cameroon"
7988
  msgstr ""
7989
 
7990
- #: includes/functions/wcj-country-functions.php:153
7991
  msgid "Canada"
7992
  msgstr ""
7993
 
7994
- #: includes/functions/wcj-country-functions.php:154
7995
  msgid "Cape Verde"
7996
  msgstr ""
7997
 
7998
- #: includes/functions/wcj-country-functions.php:155
7999
  msgid "Cayman Islands"
8000
  msgstr ""
8001
 
8002
- #: includes/functions/wcj-country-functions.php:156
8003
  msgid "Central African Republic"
8004
  msgstr ""
8005
 
8006
- #: includes/functions/wcj-country-functions.php:157
8007
  msgid "Chad"
8008
  msgstr ""
8009
 
8010
- #: includes/functions/wcj-country-functions.php:158
8011
  msgid "Chile"
8012
  msgstr ""
8013
 
8014
- #: includes/functions/wcj-country-functions.php:159
8015
  msgid "China"
8016
  msgstr ""
8017
 
8018
- #: includes/functions/wcj-country-functions.php:160
8019
  msgid "Christmas Island"
8020
  msgstr ""
8021
 
8022
- #: includes/functions/wcj-country-functions.php:161
8023
  msgid "Cocos (Keeling) Islands"
8024
  msgstr ""
8025
 
8026
- #: includes/functions/wcj-country-functions.php:162
8027
  msgid "Colombia"
8028
  msgstr ""
8029
 
8030
- #: includes/functions/wcj-country-functions.php:163
8031
  msgid "Comoros"
8032
  msgstr ""
8033
 
8034
- #: includes/functions/wcj-country-functions.php:164
8035
  msgid "Congo (Brazzaville)"
8036
  msgstr ""
8037
 
8038
- #: includes/functions/wcj-country-functions.php:165
8039
  msgid "Congo (Kinshasa)"
8040
  msgstr ""
8041
 
8042
- #: includes/functions/wcj-country-functions.php:166
8043
  msgid "Cook Islands"
8044
  msgstr ""
8045
 
8046
- #: includes/functions/wcj-country-functions.php:167
8047
  msgid "Costa Rica"
8048
  msgstr ""
8049
 
8050
- #: includes/functions/wcj-country-functions.php:168
8051
  msgid "Croatia"
8052
  msgstr ""
8053
 
8054
- #: includes/functions/wcj-country-functions.php:169
8055
  msgid "Cuba"
8056
  msgstr ""
8057
 
8058
- #: includes/functions/wcj-country-functions.php:170
8059
  msgid "Cura&Ccedil;ao"
8060
  msgstr ""
8061
 
8062
- #: includes/functions/wcj-country-functions.php:171
8063
  msgid "Cyprus"
8064
  msgstr ""
8065
 
8066
- #: includes/functions/wcj-country-functions.php:172
8067
  msgid "Czech Republic"
8068
  msgstr ""
8069
 
8070
- #: includes/functions/wcj-country-functions.php:173
8071
  msgid "Denmark"
8072
  msgstr ""
8073
 
8074
- #: includes/functions/wcj-country-functions.php:174
8075
  msgid "Djibouti"
8076
  msgstr ""
8077
 
8078
- #: includes/functions/wcj-country-functions.php:175
8079
  msgid "Dominica"
8080
  msgstr ""
8081
 
8082
- #: includes/functions/wcj-country-functions.php:176
8083
  msgid "Dominican Republic"
8084
  msgstr ""
8085
 
8086
- #: includes/functions/wcj-country-functions.php:177
8087
  msgid "Ecuador"
8088
  msgstr ""
8089
 
8090
- #: includes/functions/wcj-country-functions.php:178
8091
  msgid "Egypt"
8092
  msgstr ""
8093
 
8094
- #: includes/functions/wcj-country-functions.php:179
8095
  msgid "El Salvador"
8096
  msgstr ""
8097
 
8098
- #: includes/functions/wcj-country-functions.php:180
8099
  msgid "Equatorial Guinea"
8100
  msgstr ""
8101
 
8102
- #: includes/functions/wcj-country-functions.php:181
8103
  msgid "Eritrea"
8104
  msgstr ""
8105
 
8106
- #: includes/functions/wcj-country-functions.php:182
8107
  msgid "Estonia"
8108
  msgstr ""
8109
 
8110
- #: includes/functions/wcj-country-functions.php:183
8111
  msgid "Ethiopia"
8112
  msgstr ""
8113
 
8114
- #: includes/functions/wcj-country-functions.php:184
8115
  msgid "Falkland Islands"
8116
  msgstr ""
8117
 
8118
- #: includes/functions/wcj-country-functions.php:185
8119
  msgid "Faroe Islands"
8120
  msgstr ""
8121
 
8122
- #: includes/functions/wcj-country-functions.php:186
8123
  msgid "Fiji"
8124
  msgstr ""
8125
 
8126
- #: includes/functions/wcj-country-functions.php:187
8127
  msgid "Finland"
8128
  msgstr ""
8129
 
8130
- #: includes/functions/wcj-country-functions.php:188
8131
  msgid "France"
8132
  msgstr ""
8133
 
8134
- #: includes/functions/wcj-country-functions.php:189
8135
  msgid "French Guiana"
8136
  msgstr ""
8137
 
8138
- #: includes/functions/wcj-country-functions.php:190
8139
  msgid "French Polynesia"
8140
  msgstr ""
8141
 
8142
- #: includes/functions/wcj-country-functions.php:191
8143
  msgid "French Southern Territories"
8144
  msgstr ""
8145
 
8146
- #: includes/functions/wcj-country-functions.php:192
8147
  msgid "Gabon"
8148
  msgstr ""
8149
 
8150
- #: includes/functions/wcj-country-functions.php:193
8151
  msgid "Gambia"
8152
  msgstr ""
8153
 
8154
- #: includes/functions/wcj-country-functions.php:194
8155
  msgid "Georgia"
8156
  msgstr ""
8157
 
8158
- #: includes/functions/wcj-country-functions.php:195
8159
  msgid "Germany"
8160
  msgstr ""
8161
 
8162
- #: includes/functions/wcj-country-functions.php:196
8163
  msgid "Ghana"
8164
  msgstr ""
8165
 
8166
- #: includes/functions/wcj-country-functions.php:197
8167
  msgid "Gibraltar"
8168
  msgstr ""
8169
 
8170
- #: includes/functions/wcj-country-functions.php:198
8171
  msgid "Greece"
8172
  msgstr ""
8173
 
8174
- #: includes/functions/wcj-country-functions.php:199
8175
  msgid "Greenland"
8176
  msgstr ""
8177
 
8178
- #: includes/functions/wcj-country-functions.php:200
8179
  msgid "Grenada"
8180
  msgstr ""
8181
 
8182
- #: includes/functions/wcj-country-functions.php:201
8183
  msgid "Guadeloupe"
8184
  msgstr ""
8185
 
8186
- #: includes/functions/wcj-country-functions.php:202
8187
  msgid "Guatemala"
8188
  msgstr ""
8189
 
8190
- #: includes/functions/wcj-country-functions.php:203
8191
  msgid "Guernsey"
8192
  msgstr ""
8193
 
8194
- #: includes/functions/wcj-country-functions.php:204
8195
  msgid "Guinea"
8196
  msgstr ""
8197
 
8198
- #: includes/functions/wcj-country-functions.php:205
8199
  msgid "Guinea-Bissau"
8200
  msgstr ""
8201
 
8202
- #: includes/functions/wcj-country-functions.php:206
8203
  msgid "Guyana"
8204
  msgstr ""
8205
 
8206
- #: includes/functions/wcj-country-functions.php:207
8207
  msgid "Haiti"
8208
  msgstr ""
8209
 
8210
- #: includes/functions/wcj-country-functions.php:208
8211
  msgid "Heard Island and McDonald Islands"
8212
  msgstr ""
8213
 
8214
- #: includes/functions/wcj-country-functions.php:209
8215
  msgid "Honduras"
8216
  msgstr ""
8217
 
8218
- #: includes/functions/wcj-country-functions.php:210
8219
  msgid "Hong Kong"
8220
  msgstr ""
8221
 
8222
- #: includes/functions/wcj-country-functions.php:211
8223
  msgid "Hungary"
8224
  msgstr ""
8225
 
8226
- #: includes/functions/wcj-country-functions.php:212
8227
  msgid "Iceland"
8228
  msgstr ""
8229
 
8230
- #: includes/functions/wcj-country-functions.php:213
8231
  msgid "India"
8232
  msgstr ""
8233
 
8234
- #: includes/functions/wcj-country-functions.php:214
8235
  msgid "Indonesia"
8236
  msgstr ""
8237
 
8238
- #: includes/functions/wcj-country-functions.php:215
8239
  msgid "Iran"
8240
  msgstr ""
8241
 
8242
- #: includes/functions/wcj-country-functions.php:216
8243
  msgid "Iraq"
8244
  msgstr ""
8245
 
8246
- #: includes/functions/wcj-country-functions.php:217
8247
  msgid "Republic of Ireland"
8248
  msgstr ""
8249
 
8250
- #: includes/functions/wcj-country-functions.php:218
8251
  msgid "Isle of Man"
8252
  msgstr ""
8253
 
8254
- #: includes/functions/wcj-country-functions.php:219
8255
  msgid "Israel"
8256
  msgstr ""
8257
 
8258
- #: includes/functions/wcj-country-functions.php:220
8259
  msgid "Italy"
8260
  msgstr ""
8261
 
8262
- #: includes/functions/wcj-country-functions.php:221
8263
  msgid "Ivory Coast"
8264
  msgstr ""
8265
 
8266
- #: includes/functions/wcj-country-functions.php:222
8267
  msgid "Jamaica"
8268
  msgstr ""
8269
 
8270
- #: includes/functions/wcj-country-functions.php:223
8271
  msgid "Japan"
8272
  msgstr ""
8273
 
8274
- #: includes/functions/wcj-country-functions.php:224
8275
  msgid "Jersey"
8276
  msgstr ""
8277
 
8278
- #: includes/functions/wcj-country-functions.php:225
8279
  msgid "Jordan"
8280
  msgstr ""
8281
 
8282
- #: includes/functions/wcj-country-functions.php:226
8283
  msgid "Kazakhstan"
8284
  msgstr ""
8285
 
8286
- #: includes/functions/wcj-country-functions.php:227
8287
  msgid "Kenya"
8288
  msgstr ""
8289
 
8290
- #: includes/functions/wcj-country-functions.php:228
8291
  msgid "Kiribati"
8292
  msgstr ""
8293
 
8294
- #: includes/functions/wcj-country-functions.php:229
8295
  msgid "Kuwait"
8296
  msgstr ""
8297
 
8298
- #: includes/functions/wcj-country-functions.php:230
8299
  msgid "Kyrgyzstan"
8300
  msgstr ""
8301
 
8302
- #: includes/functions/wcj-country-functions.php:231
8303
  msgid "Laos"
8304
  msgstr ""
8305
 
8306
- #: includes/functions/wcj-country-functions.php:232
8307
  msgid "Latvia"
8308
  msgstr ""
8309
 
8310
- #: includes/functions/wcj-country-functions.php:233
8311
  msgid "Lebanon"
8312
  msgstr ""
8313
 
8314
- #: includes/functions/wcj-country-functions.php:234
8315
  msgid "Lesotho"
8316
  msgstr ""
8317
 
8318
- #: includes/functions/wcj-country-functions.php:235
8319
  msgid "Liberia"
8320
  msgstr ""
8321
 
8322
- #: includes/functions/wcj-country-functions.php:236
8323
  msgid "Libya"
8324
  msgstr ""
8325
 
8326
- #: includes/functions/wcj-country-functions.php:237
8327
  msgid "Liechtenstein"
8328
  msgstr ""
8329
 
8330
- #: includes/functions/wcj-country-functions.php:238
8331
  msgid "Lithuania"
8332
  msgstr ""
8333
 
8334
- #: includes/functions/wcj-country-functions.php:239
8335
  msgid "Luxembourg"
8336
  msgstr ""
8337
 
8338
- #: includes/functions/wcj-country-functions.php:240
8339
  msgid "Macao S.A.R., China"
8340
  msgstr ""
8341
 
8342
- #: includes/functions/wcj-country-functions.php:241
8343
  msgid "Macedonia"
8344
  msgstr ""
8345
 
8346
- #: includes/functions/wcj-country-functions.php:242
8347
  msgid "Madagascar"
8348
  msgstr ""
8349
 
8350
- #: includes/functions/wcj-country-functions.php:243
8351
  msgid "Malawi"
8352
  msgstr ""
8353
 
8354
- #: includes/functions/wcj-country-functions.php:244
8355
  msgid "Malaysia"
8356
  msgstr ""
8357
 
8358
- #: includes/functions/wcj-country-functions.php:245
8359
  msgid "Maldives"
8360
  msgstr ""
8361
 
8362
- #: includes/functions/wcj-country-functions.php:246
8363
  msgid "Mali"
8364
  msgstr ""
8365
 
8366
- #: includes/functions/wcj-country-functions.php:247
8367
  msgid "Malta"
8368
  msgstr ""
8369
 
8370
- #: includes/functions/wcj-country-functions.php:248
8371
  msgid "Marshall Islands"
8372
  msgstr ""
8373
 
8374
- #: includes/functions/wcj-country-functions.php:249
8375
  msgid "Martinique"
8376
  msgstr ""
8377
 
8378
- #: includes/functions/wcj-country-functions.php:250
8379
  msgid "Mauritania"
8380
  msgstr ""
8381
 
8382
- #: includes/functions/wcj-country-functions.php:251
8383
  msgid "Mauritius"
8384
  msgstr ""
8385
 
8386
- #: includes/functions/wcj-country-functions.php:252
8387
  msgid "Mayotte"
8388
  msgstr ""
8389
 
8390
- #: includes/functions/wcj-country-functions.php:253
8391
  msgid "Mexico"
8392
  msgstr ""
8393
 
8394
- #: includes/functions/wcj-country-functions.php:254
8395
  msgid "Micronesia"
8396
  msgstr ""
8397
 
8398
- #: includes/functions/wcj-country-functions.php:255
8399
  msgid "Moldova"
8400
  msgstr ""
8401
 
8402
- #: includes/functions/wcj-country-functions.php:256
8403
  msgid "Monaco"
8404
  msgstr ""
8405
 
8406
- #: includes/functions/wcj-country-functions.php:257
8407
  msgid "Mongolia"
8408
  msgstr ""
8409
 
8410
- #: includes/functions/wcj-country-functions.php:258
8411
  msgid "Montenegro"
8412
  msgstr ""
8413
 
8414
- #: includes/functions/wcj-country-functions.php:259
8415
  msgid "Montserrat"
8416
  msgstr ""
8417
 
8418
- #: includes/functions/wcj-country-functions.php:260
8419
  msgid "Morocco"
8420
  msgstr ""
8421
 
8422
- #: includes/functions/wcj-country-functions.php:261
8423
  msgid "Mozambique"
8424
  msgstr ""
8425
 
8426
- #: includes/functions/wcj-country-functions.php:262
8427
  msgid "Myanmar"
8428
  msgstr ""
8429
 
8430
- #: includes/functions/wcj-country-functions.php:263
8431
  msgid "Namibia"
8432
  msgstr ""
8433
 
8434
- #: includes/functions/wcj-country-functions.php:264
8435
  msgid "Nauru"
8436
  msgstr ""
8437
 
8438
- #: includes/functions/wcj-country-functions.php:265
8439
  msgid "Nepal"
8440
  msgstr ""
8441
 
8442
- #: includes/functions/wcj-country-functions.php:266
8443
  msgid "Netherlands"
8444
  msgstr ""
8445
 
8446
- #: includes/functions/wcj-country-functions.php:267
8447
  msgid "Netherlands Antilles"
8448
  msgstr ""
8449
 
8450
- #: includes/functions/wcj-country-functions.php:268
8451
  msgid "New Caledonia"
8452
  msgstr ""
8453
 
8454
- #: includes/functions/wcj-country-functions.php:269
8455
  msgid "New Zealand"
8456
  msgstr ""
8457
 
8458
- #: includes/functions/wcj-country-functions.php:270
8459
  msgid "Nicaragua"
8460
  msgstr ""
8461
 
8462
- #: includes/functions/wcj-country-functions.php:271
8463
  msgid "Niger"
8464
  msgstr ""
8465
 
8466
- #: includes/functions/wcj-country-functions.php:272
8467
  msgid "Nigeria"
8468
  msgstr ""
8469
 
8470
- #: includes/functions/wcj-country-functions.php:273
8471
  msgid "Niue"
8472
  msgstr ""
8473
 
8474
- #: includes/functions/wcj-country-functions.php:274
8475
  msgid "Norfolk Island"
8476
  msgstr ""
8477
 
8478
- #: includes/functions/wcj-country-functions.php:275
8479
  msgid "North Korea"
8480
  msgstr ""
8481
 
8482
- #: includes/functions/wcj-country-functions.php:276
8483
  msgid "Norway"
8484
  msgstr ""
8485
 
8486
- #: includes/functions/wcj-country-functions.php:277
8487
  msgid "Oman"
8488
  msgstr ""
8489
 
8490
- #: includes/functions/wcj-country-functions.php:278
8491
  msgid "Pakistan"
8492
  msgstr ""
8493
 
8494
- #: includes/functions/wcj-country-functions.php:279
8495
  msgid "Palestinian Territory"
8496
  msgstr ""
8497
 
8498
- #: includes/functions/wcj-country-functions.php:280
8499
  msgid "Panama"
8500
  msgstr ""
8501
 
8502
- #: includes/functions/wcj-country-functions.php:281
8503
  msgid "Papua New Guinea"
8504
  msgstr ""
8505
 
8506
- #: includes/functions/wcj-country-functions.php:282
8507
  msgid "Paraguay"
8508
  msgstr ""
8509
 
8510
- #: includes/functions/wcj-country-functions.php:283
8511
  msgid "Peru"
8512
  msgstr ""
8513
 
8514
- #: includes/functions/wcj-country-functions.php:284
8515
  msgid "Philippines"
8516
  msgstr ""
8517
 
8518
- #: includes/functions/wcj-country-functions.php:285
8519
  msgid "Pitcairn"
8520
  msgstr ""
8521
 
8522
- #: includes/functions/wcj-country-functions.php:286
8523
  msgid "Poland"
8524
  msgstr ""
8525
 
8526
- #: includes/functions/wcj-country-functions.php:287
8527
  msgid "Portugal"
8528
  msgstr ""
8529
 
8530
- #: includes/functions/wcj-country-functions.php:288
8531
  msgid "Qatar"
8532
  msgstr ""
8533
 
8534
- #: includes/functions/wcj-country-functions.php:289
8535
  msgid "Reunion"
8536
  msgstr ""
8537
 
8538
- #: includes/functions/wcj-country-functions.php:290
8539
  msgid "Romania"
8540
  msgstr ""
8541
 
8542
- #: includes/functions/wcj-country-functions.php:291
8543
  msgid "Russia"
8544
  msgstr ""
8545
 
8546
- #: includes/functions/wcj-country-functions.php:292
8547
  msgid "Rwanda"
8548
  msgstr ""
8549
 
8550
- #: includes/functions/wcj-country-functions.php:293
8551
  msgid "Saint Barth&eacute;lemy"
8552
  msgstr ""
8553
 
8554
- #: includes/functions/wcj-country-functions.php:294
8555
  msgid "Saint Helena"
8556
  msgstr ""
8557
 
8558
- #: includes/functions/wcj-country-functions.php:295
8559
  msgid "Saint Kitts and Nevis"
8560
  msgstr ""
8561
 
8562
- #: includes/functions/wcj-country-functions.php:296
8563
  msgid "Saint Lucia"
8564
  msgstr ""
8565
 
8566
- #: includes/functions/wcj-country-functions.php:297
8567
  msgid "Saint Martin (French part)"
8568
  msgstr ""
8569
 
8570
- #: includes/functions/wcj-country-functions.php:298
8571
  msgid "Saint Martin (Dutch part)"
8572
  msgstr ""
8573
 
8574
- #: includes/functions/wcj-country-functions.php:299
8575
  msgid "Saint Pierre and Miquelon"
8576
  msgstr ""
8577
 
8578
- #: includes/functions/wcj-country-functions.php:300
8579
  msgid "Saint Vincent and the Grenadines"
8580
  msgstr ""
8581
 
8582
- #: includes/functions/wcj-country-functions.php:301
8583
  msgid "San Marino"
8584
  msgstr ""
8585
 
8586
- #: includes/functions/wcj-country-functions.php:302
8587
  msgid "S&atilde;o Tom&eacute; and Pr&iacute;ncipe"
8588
  msgstr ""
8589
 
8590
- #: includes/functions/wcj-country-functions.php:303
8591
  msgid "Saudi Arabia"
8592
  msgstr ""
8593
 
8594
- #: includes/functions/wcj-country-functions.php:304
8595
  msgid "Senegal"
8596
  msgstr ""
8597
 
8598
- #: includes/functions/wcj-country-functions.php:305
8599
  msgid "Serbia"
8600
  msgstr ""
8601
 
8602
- #: includes/functions/wcj-country-functions.php:306
8603
  msgid "Seychelles"
8604
  msgstr ""
8605
 
8606
- #: includes/functions/wcj-country-functions.php:307
8607
  msgid "Sierra Leone"
8608
  msgstr ""
8609
 
8610
- #: includes/functions/wcj-country-functions.php:308
8611
  msgid "Singapore"
8612
  msgstr ""
8613
 
8614
- #: includes/functions/wcj-country-functions.php:309
8615
  msgid "Slovakia"
8616
  msgstr ""
8617
 
8618
- #: includes/functions/wcj-country-functions.php:310
8619
  msgid "Slovenia"
8620
  msgstr ""
8621
 
8622
- #: includes/functions/wcj-country-functions.php:311
8623
  msgid "Solomon Islands"
8624
  msgstr ""
8625
 
8626
- #: includes/functions/wcj-country-functions.php:312
8627
  msgid "Somalia"
8628
  msgstr ""
8629
 
8630
- #: includes/functions/wcj-country-functions.php:313
8631
  msgid "South Africa"
8632
  msgstr ""
8633
 
8634
- #: includes/functions/wcj-country-functions.php:314
8635
  msgid "South Georgia/Sandwich Islands"
8636
  msgstr ""
8637
 
8638
- #: includes/functions/wcj-country-functions.php:315
8639
  msgid "South Korea"
8640
  msgstr ""
8641
 
8642
- #: includes/functions/wcj-country-functions.php:316
8643
  msgid "South Sudan"
8644
  msgstr ""
8645
 
8646
- #: includes/functions/wcj-country-functions.php:317
8647
  msgid "Spain"
8648
  msgstr ""
8649
 
8650
- #: includes/functions/wcj-country-functions.php:318
8651
  msgid "Sri Lanka"
8652
  msgstr ""
8653
 
8654
- #: includes/functions/wcj-country-functions.php:319
8655
  msgid "Sudan"
8656
  msgstr ""
8657
 
8658
- #: includes/functions/wcj-country-functions.php:320
8659
  msgid "Suriname"
8660
  msgstr ""
8661
 
8662
- #: includes/functions/wcj-country-functions.php:321
8663
  msgid "Svalbard and Jan Mayen"
8664
  msgstr ""
8665
 
8666
- #: includes/functions/wcj-country-functions.php:322
8667
  msgid "Swaziland"
8668
  msgstr ""
8669
 
8670
- #: includes/functions/wcj-country-functions.php:323
8671
  msgid "Sweden"
8672
  msgstr ""
8673
 
8674
- #: includes/functions/wcj-country-functions.php:324
8675
  msgid "Switzerland"
8676
  msgstr ""
8677
 
8678
- #: includes/functions/wcj-country-functions.php:325
8679
  msgid "Syria"
8680
  msgstr ""
8681
 
8682
- #: includes/functions/wcj-country-functions.php:326
8683
  msgid "Taiwan"
8684
  msgstr ""
8685
 
8686
- #: includes/functions/wcj-country-functions.php:327
8687
  msgid "Tajikistan"
8688
  msgstr ""
8689
 
8690
- #: includes/functions/wcj-country-functions.php:328
8691
  msgid "Tanzania"
8692
  msgstr ""
8693
 
8694
- #: includes/functions/wcj-country-functions.php:329
8695
  msgid "Thailand"
8696
  msgstr ""
8697
 
8698
- #: includes/functions/wcj-country-functions.php:330
8699
  msgid "Timor-Leste"
8700
  msgstr ""
8701
 
8702
- #: includes/functions/wcj-country-functions.php:331
8703
  msgid "Togo"
8704
  msgstr ""
8705
 
8706
- #: includes/functions/wcj-country-functions.php:332
8707
  msgid "Tokelau"
8708
  msgstr ""
8709
 
8710
- #: includes/functions/wcj-country-functions.php:333
8711
  msgid "Tonga"
8712
  msgstr ""
8713
 
8714
- #: includes/functions/wcj-country-functions.php:334
8715
  msgid "Trinidad and Tobago"
8716
  msgstr ""
8717
 
8718
- #: includes/functions/wcj-country-functions.php:335
8719
  msgid "Tunisia"
8720
  msgstr ""
8721
 
8722
- #: includes/functions/wcj-country-functions.php:336
8723
  msgid "Turkey"
8724
  msgstr ""
8725
 
8726
- #: includes/functions/wcj-country-functions.php:337
8727
  msgid "Turkmenistan"
8728
  msgstr ""
8729
 
8730
- #: includes/functions/wcj-country-functions.php:338
8731
  msgid "Turks and Caicos Islands"
8732
  msgstr ""
8733
 
8734
- #: includes/functions/wcj-country-functions.php:339
8735
  msgid "Tuvalu"
8736
  msgstr ""
8737
 
8738
- #: includes/functions/wcj-country-functions.php:340
8739
  msgid "Uganda"
8740
  msgstr ""
8741
 
8742
- #: includes/functions/wcj-country-functions.php:341
8743
  msgid "Ukraine"
8744
  msgstr ""
8745
 
8746
- #: includes/functions/wcj-country-functions.php:342
8747
  msgid "United Arab Emirates"
8748
  msgstr ""
8749
 
8750
- #: includes/functions/wcj-country-functions.php:343
8751
  msgid "United Kingdom (UK)"
8752
  msgstr ""
8753
 
8754
- #: includes/functions/wcj-country-functions.php:344
8755
  msgid "United States (US)"
8756
  msgstr ""
8757
 
8758
- #: includes/functions/wcj-country-functions.php:345
8759
  msgid "Uruguay"
8760
  msgstr ""
8761
 
8762
- #: includes/functions/wcj-country-functions.php:346
8763
  msgid "Uzbekistan"
8764
  msgstr ""
8765
 
8766
- #: includes/functions/wcj-country-functions.php:347
8767
  msgid "Vanuatu"
8768
  msgstr ""
8769
 
8770
- #: includes/functions/wcj-country-functions.php:348
8771
  msgid "Vatican"
8772
  msgstr ""
8773
 
8774
- #: includes/functions/wcj-country-functions.php:349
8775
  msgid "Venezuela"
8776
  msgstr ""
8777
 
8778
- #: includes/functions/wcj-country-functions.php:350
8779
  msgid "Vietnam"
8780
  msgstr ""
8781
 
8782
- #: includes/functions/wcj-country-functions.php:351
8783
  msgid "Wallis and Futuna"
8784
  msgstr ""
8785
 
8786
- #: includes/functions/wcj-country-functions.php:352
8787
  msgid "Western Sahara"
8788
  msgstr ""
8789
 
8790
- #: includes/functions/wcj-country-functions.php:353
8791
  msgid "Western Samoa"
8792
  msgstr ""
8793
 
8794
- #: includes/functions/wcj-country-functions.php:354
8795
  msgid "Yemen"
8796
  msgstr ""
8797
 
8798
- #: includes/functions/wcj-country-functions.php:355
8799
  msgid "Zambia"
8800
  msgstr ""
8801
 
8802
- #: includes/functions/wcj-country-functions.php:356
8803
  msgid "Zimbabwe"
8804
  msgstr ""
8805
 
8806
- #: includes/functions/wcj-functions.php:609
 
 
 
 
 
 
 
 
 
 
 
 
8807
  msgid "Before cart"
8808
  msgstr ""
8809
 
8810
- #: includes/functions/wcj-functions.php:610
8811
  msgid "Before cart table"
8812
  msgstr ""
8813
 
8814
- #: includes/functions/wcj-functions.php:611
8815
  msgid "Before cart contents"
8816
  msgstr ""
8817
 
8818
- #: includes/functions/wcj-functions.php:612
8819
  msgid "Cart contents"
8820
  msgstr ""
8821
 
8822
- #: includes/functions/wcj-functions.php:613
8823
  msgid "Cart coupon"
8824
  msgstr ""
8825
 
8826
- #: includes/functions/wcj-functions.php:614
8827
  msgid "Cart actions"
8828
  msgstr ""
8829
 
8830
- #: includes/functions/wcj-functions.php:615
8831
  msgid "After cart contents"
8832
  msgstr ""
8833
 
8834
- #: includes/functions/wcj-functions.php:616
8835
  msgid "After cart table"
8836
  msgstr ""
8837
 
8838
- #: includes/functions/wcj-functions.php:617
8839
  msgid "Cart collaterals"
8840
  msgstr ""
8841
 
8842
- #: includes/functions/wcj-functions.php:618
8843
  msgid "After cart"
8844
  msgstr ""
8845
 
8846
- #: includes/functions/wcj-functions.php:620
8847
  msgid "Before cart totals"
8848
  msgstr ""
8849
 
8850
- #: includes/functions/wcj-functions.php:621
8851
  msgid "Cart totals: Before shipping"
8852
  msgstr ""
8853
 
8854
- #: includes/functions/wcj-functions.php:622
8855
  msgid "Cart totals: After shipping"
8856
  msgstr ""
8857
 
8858
- #: includes/functions/wcj-functions.php:623
8859
  msgid "Cart totals: Before order total"
8860
  msgstr ""
8861
 
8862
- #: includes/functions/wcj-functions.php:624
8863
  msgid "Cart totals: After order total"
8864
  msgstr ""
8865
 
8866
- #: includes/functions/wcj-functions.php:625
8867
  msgid "Proceed to checkout"
8868
  msgstr ""
8869
 
8870
- #: includes/functions/wcj-functions.php:626
8871
  msgid "After cart totals"
8872
  msgstr ""
8873
 
8874
- #: includes/functions/wcj-functions.php:628
8875
  msgid "Before shipping calculator"
8876
  msgstr ""
8877
 
8878
- #: includes/functions/wcj-functions.php:629
8879
  msgid "After shipping calculator"
8880
  msgstr ""
8881
 
8882
- #: includes/functions/wcj-functions.php:631
8883
  msgid "If cart is empty"
8884
  msgstr ""
8885
 
8886
- #: includes/functions/wcj-functions.php:898
8887
- #: includes/functions/wcj-functions.php:917
8888
- msgid "Guest"
8889
- msgstr ""
8890
-
8891
- #: includes/functions/wcj-functions.php:1159
8892
  msgctxt "Order status"
8893
  msgid "Pending Payment"
8894
  msgstr ""
8895
 
8896
- #: includes/functions/wcj-functions.php:1161
8897
  msgctxt "Order status"
8898
  msgid "On Hold"
8899
  msgstr ""
@@ -8930,20 +9985,25 @@ msgstr ""
8930
  msgid "Credit Notes"
8931
  msgstr ""
8932
 
8933
- #: includes/functions/wcj-invoicing-functions.php:51
8934
  msgid "Custom Document"
8935
  msgstr ""
8936
 
8937
- #: includes/functions/wcj-invoicing-functions.php:52
8938
  msgid "Custom Documents"
8939
  msgstr ""
8940
 
 
 
 
 
 
8941
  #: includes/gateways/class-wc-gateway-wcj-custom.php:63
8942
  msgid "Enable Custom Payment"
8943
  msgstr ""
8944
 
8945
  #: includes/gateways/class-wc-gateway-wcj-custom.php:70
8946
- #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:115
8947
  #: includes/shipping/class-wc-shipping-wcj-custom.php:84
8948
  msgid "This controls the title which the user sees during checkout."
8949
  msgstr ""
@@ -8994,20 +10054,12 @@ msgid ""
8994
  "gateway on frontend, enter a number here. Set to 0 to disable."
8995
  msgstr ""
8996
 
8997
- #: includes/gateways/class-wc-gateway-wcj-custom.php:119
8998
- msgid "Enable for shipping methods"
8999
- msgstr ""
9000
-
9001
  #: includes/gateways/class-wc-gateway-wcj-custom.php:124
9002
  msgid ""
9003
  "If gateway is only available for certain shipping methods, set it up here. "
9004
  "Leave blank to enable for all methods."
9005
  msgstr ""
9006
 
9007
- #: includes/gateways/class-wc-gateway-wcj-custom.php:127
9008
- msgid "Select shipping methods"
9009
- msgstr ""
9010
-
9011
  #: includes/gateways/class-wc-gateway-wcj-custom.php:131
9012
  msgid "Enable for virtual orders"
9013
  msgstr ""
@@ -9062,12 +10114,19 @@ msgstr ""
9062
  msgid "Checkbox: Default"
9063
  msgstr ""
9064
 
9065
- #: includes/input-fields/class-wcj-product-input-fields-abstract.php:108
9066
  msgid ""
9067
  "If file is selected, set accepted file types here. E.g.: \".jpg,.jpeg,.png"
9068
  "\". Leave blank to accept all files"
9069
  msgstr ""
9070
 
 
 
 
 
 
 
 
9071
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:109
9072
  msgid "File: Accepted types"
9073
  msgstr ""
@@ -9085,6 +10144,13 @@ msgstr ""
9085
  msgid "File: Max size"
9086
  msgstr ""
9087
 
 
 
 
 
 
 
 
9088
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:126
9089
  msgid "Datepicker/Weekpicker: Date format"
9090
  msgstr ""
@@ -9109,35 +10175,64 @@ msgstr ""
9109
  msgid "Datepicker/Weekpicker: First week day"
9110
  msgstr ""
9111
 
 
 
 
 
 
 
 
9112
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:184
9113
  msgid "Timepicker: Time format"
9114
  msgstr ""
9115
 
 
 
 
 
 
 
 
9116
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:192
9117
- msgid "Timepicker: Interval"
9118
  msgstr ""
9119
 
9120
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:199
9121
- msgid "If select/radio is selected, set options here. One option per line"
 
 
 
9122
  msgstr ""
9123
 
9124
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:200
 
 
 
 
 
 
 
 
 
 
 
 
9125
  msgid "Select/Radio: Options"
9126
  msgstr ""
9127
 
9128
- #: includes/input-fields/class-wcj-product-input-fields-abstract.php:228
9129
  msgid "Message on required"
9130
  msgstr ""
9131
 
9132
- #: includes/input-fields/class-wcj-product-input-fields-abstract.php:468
9133
  msgid "Wrong file type!"
9134
  msgstr ""
9135
 
9136
- #: includes/input-fields/class-wcj-product-input-fields-abstract.php:477
9137
  msgid "File is too big!"
9138
  msgstr ""
9139
 
9140
- #: includes/input-fields/class-wcj-product-input-fields-abstract.php:619
9141
  msgid "Select a country&hellip;"
9142
  msgstr ""
9143
 
@@ -9215,10 +10310,12 @@ msgid "Results"
9215
  msgstr ""
9216
 
9217
  #: includes/pdf-invoices/class-wcj-pdf-invoicing-renumerate-tool.php:206
 
9218
  msgid "Total documents created: %d"
9219
  msgstr ""
9220
 
9221
  #: includes/pdf-invoices/class-wcj-pdf-invoicing-renumerate-tool.php:207
 
9222
  msgid "Total documents deleted: %d"
9223
  msgstr ""
9224
 
@@ -9358,67 +10455,72 @@ msgstr ""
9358
  msgid "PDF File Name"
9359
  msgstr ""
9360
 
 
 
 
 
 
9361
  #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:26
9362
  msgid "Email Options"
9363
  msgstr ""
9364
 
9365
- #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:87
9366
  msgid "Payment gateways to include"
9367
  msgstr ""
9368
 
9369
- #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:94
9370
  msgid "Select some gateways. Leave blank to include all."
9371
  msgstr ""
9372
 
9373
- #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:119
9374
  msgid "Admin - New Order"
9375
  msgstr ""
9376
 
9377
- #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:120
9378
  msgid "Admin - Cancelled Order"
9379
  msgstr ""
9380
 
9381
- #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:121
9382
  msgid "Admin - Failed Order"
9383
  msgstr ""
9384
 
9385
- #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:122
9386
  msgid "Customer - Processing Order"
9387
  msgstr ""
9388
 
9389
- #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:123
9390
  msgid "Customer - On-Hold Order"
9391
  msgstr ""
9392
 
9393
- #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:124
9394
  msgid "Customer - Completed Order"
9395
  msgstr ""
9396
 
9397
- #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:125
9398
  msgid "Customer - Invoice"
9399
  msgstr ""
9400
 
9401
- #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:126
9402
  msgid "Customer - Refunded Order"
9403
  msgstr ""
9404
 
9405
- #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:127
9406
  msgid "Customer - Note"
9407
  msgstr ""
9408
 
9409
- #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:128
9410
  msgid "Customer - New Account"
9411
  msgstr ""
9412
 
9413
- #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:129
9414
  msgid "Customer - Reset Password"
9415
  msgstr ""
9416
 
9417
- #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:137
9418
  msgid "Attach PDF to emails"
9419
  msgstr ""
9420
 
9421
- #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:144
9422
  msgid "Select some emails"
9423
  msgstr ""
9424
 
@@ -9602,15 +10704,16 @@ msgstr ""
9602
  msgid "Templates"
9603
  msgstr ""
9604
 
9605
- #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-templates.php:53
9606
  msgid "HTML Template"
9607
  msgstr ""
9608
 
9609
- #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-templates.php:68
9610
  msgid "Available Shortcodes"
9611
  msgstr ""
9612
 
9613
- #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-templates.php:71
 
9614
  msgid "For the list of available shortcodes, please visit %s."
9615
  msgstr ""
9616
 
@@ -9623,6 +10726,7 @@ msgid "Create All Country Groups Failed. Wrong parameter."
9623
  msgstr ""
9624
 
9625
  #: includes/price-by-country/class-wcj-price-by-country-group-generator.php:95
 
9626
  msgid ""
9627
  "All existing country groups will be deleted and %s new groups will be "
9628
  "created. Are you sure?"
@@ -9636,7 +10740,7 @@ msgstr ""
9636
  msgid "Country Groups Generated."
9637
  msgstr ""
9638
 
9639
- #: includes/price-by-country/class-wcj-price-by-country-local.php:250
9640
  msgid "Country Group Nr."
9641
  msgstr ""
9642
 
@@ -9698,7 +10802,7 @@ msgid "Orders Average / Day"
9698
  msgstr ""
9699
 
9700
  #: includes/reports/wcj-class-reports-monthly-sales.php:140
9701
- #: includes/reports/wcj-class-reports-sales.php:174
9702
  msgid "Total Sum"
9703
  msgstr ""
9704
 
@@ -9719,6 +10823,7 @@ msgid "Currency Rates"
9719
  msgstr ""
9720
 
9721
  #: includes/reports/wcj-class-reports-monthly-sales.php:219
 
9722
  msgid "Error getting currency rate for %s"
9723
  msgstr ""
9724
 
@@ -9731,6 +10836,7 @@ msgid "Report currency"
9731
  msgstr ""
9732
 
9733
  #: includes/reports/wcj-class-reports-monthly-sales.php:326
 
9734
  msgid "Report generated in: %s s"
9735
  msgstr ""
9736
 
@@ -9738,23 +10844,35 @@ msgstr ""
9738
  msgid "Reset Currency Rates"
9739
  msgstr ""
9740
 
9741
- #: includes/reports/wcj-class-reports-sales.php:141
9742
  msgid "Variation"
9743
  msgstr ""
9744
 
9745
- #: includes/reports/wcj-class-reports-sales.php:172
9746
  msgid "Last Sale"
9747
  msgstr ""
9748
 
9749
- #: includes/reports/wcj-class-reports-sales.php:173
9750
- msgid "Total Sales"
 
 
 
 
 
 
 
 
 
 
 
 
9751
  msgstr ""
9752
 
9753
- #: includes/reports/wcj-class-reports-sales.php:227
9754
  msgid "Filter products"
9755
  msgstr ""
9756
 
9757
- #: includes/reports/wcj-class-reports-sales.php:232
9758
  msgid "No sales data for current period."
9759
  msgstr ""
9760
 
@@ -9793,71 +10911,72 @@ msgid ""
9793
  "accounted."
9794
  msgstr ""
9795
 
9796
- #: includes/reports/wcj-class-reports-stock.php:213
9797
  msgid "deleted"
9798
  msgstr ""
9799
 
9800
- #: includes/reports/wcj-class-reports-stock.php:322
9801
  msgid "Stock"
9802
  msgstr ""
9803
 
9804
- #: includes/reports/wcj-class-reports-stock.php:323
9805
  msgid "Stock price"
9806
  msgstr ""
9807
 
9808
- #: includes/reports/wcj-class-reports-stock.php:324
9809
  msgid "Total stock price"
9810
  msgstr ""
9811
 
9812
- #: includes/reports/wcj-class-reports-stock.php:326
9813
  msgid "Last sale"
9814
  msgstr ""
9815
 
9816
- #: includes/reports/wcj-class-reports-stock.php:327
 
9817
  msgid "Sales in last %s days"
9818
  msgstr ""
9819
 
9820
- #: includes/reports/wcj-class-reports-stock.php:328
9821
  msgid "Total sales"
9822
  msgstr ""
9823
 
9824
- #: includes/reports/wcj-class-reports-stock.php:331
9825
  msgid "Stock to minimum"
9826
  msgstr ""
9827
 
9828
- #: includes/reports/wcj-class-reports-stock.php:364
9829
  msgid "purchase price:"
9830
  msgstr ""
9831
 
9832
- #: includes/reports/wcj-class-reports-stock.php:369
9833
  msgid "stock purchase price:"
9834
  msgstr ""
9835
 
9836
- #: includes/reports/wcj-class-reports-stock.php:375
9837
  msgid "No sales yet"
9838
  msgstr ""
9839
 
9840
- #: includes/reports/wcj-class-reports-stock.php:380
9841
  msgid "profit:"
9842
  msgstr ""
9843
 
9844
- #: includes/reports/wcj-class-reports-stock.php:404
9845
  msgid "Total current stock value"
9846
  msgstr ""
9847
 
9848
- #: includes/reports/wcj-class-reports-stock.php:405
9849
  msgid "Total stock value"
9850
  msgstr ""
9851
 
9852
- #: includes/reports/wcj-class-reports-stock.php:406
9853
  msgid "Product stock value average"
9854
  msgstr ""
9855
 
9856
- #: includes/reports/wcj-class-reports-stock.php:407
9857
  msgid "Product stock average"
9858
  msgstr ""
9859
 
9860
- #: includes/reports/wcj-class-reports-stock.php:411
9861
  msgid "Report was generated in: "
9862
  msgstr ""
9863
 
@@ -9866,69 +10985,69 @@ msgstr ""
9866
  msgid "Booster: Custom Shipping Method"
9867
  msgstr ""
9868
 
9869
- #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:122
 
 
 
 
 
 
 
 
 
 
 
 
 
9870
  #: includes/shipping/class-wc-shipping-wcj-custom.php:91
9871
  msgid "Cost calculation type."
9872
  msgstr ""
9873
 
9874
- #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:126
9875
  #: includes/shipping/class-wc-shipping-wcj-custom.php:95
9876
  msgid "Flat Rate"
9877
  msgstr ""
9878
 
9879
- #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:127
9880
  #: includes/shipping/class-wc-shipping-wcj-custom.php:96
9881
  msgid "By Total Cart Weight"
9882
  msgstr ""
9883
 
9884
- #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:128
9885
  #: includes/shipping/class-wc-shipping-wcj-custom.php:97
9886
  msgid "By Total Cart Weight Table"
9887
  msgstr ""
9888
 
9889
- #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:129
9890
  #: includes/shipping/class-wc-shipping-wcj-custom.php:98
9891
  msgid "By Total Cart Quantity"
9892
  msgstr ""
9893
 
9894
- #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:133
9895
- #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:175
9896
- #: includes/shipping/class-wc-shipping-wcj-custom.php:102
9897
- #: includes/shipping/class-wc-shipping-wcj-custom.php:128
9898
- msgid "Cost"
9899
- msgstr ""
9900
-
9901
- #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:135
9902
  #: includes/shipping/class-wc-shipping-wcj-custom.php:104
9903
  msgid ""
9904
  "Cost. If calculating by weight - then cost per one weight unit. If "
9905
  "calculating by quantity - then cost per one piece."
9906
  msgstr ""
9907
 
9908
- #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:141
9909
  msgid "Min Weight"
9910
  msgstr ""
9911
 
9912
- #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:143
9913
  msgid "Minimum total cart weight. Set zero to disable."
9914
  msgstr ""
9915
 
9916
- #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:149
9917
- #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:168
9918
- #: includes/shipping/class-wc-shipping-wcj-custom.php:121
9919
- msgid "Max Weight"
9920
- msgstr ""
9921
-
9922
- #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:151
9923
  msgid "Maximum total cart weight. Set zero to disable."
9924
  msgstr ""
9925
 
9926
- #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:157
9927
  #: includes/shipping/class-wc-shipping-wcj-custom.php:110
9928
  msgid "Weight Table Total Rows"
9929
  msgstr ""
9930
 
9931
- #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:159
9932
  msgid ""
9933
  "Press \"Save changes\" and reload the page after you change this number."
9934
  msgstr ""
@@ -9941,15 +11060,15 @@ msgstr ""
9941
  msgid "Attribute \"name\" is required!"
9942
  msgstr ""
9943
 
9944
- #: includes/shortcodes/class-wcj-order-items-shortcodes.php:151
9945
  msgid "Standard"
9946
  msgstr ""
9947
 
9948
- #: includes/shortcodes/class-wcj-orders-shortcodes.php:96
9949
  msgid "Dollars"
9950
  msgstr ""
9951
 
9952
- #: includes/shortcodes/class-wcj-orders-shortcodes.php:97
9953
  msgid "Cents"
9954
  msgstr ""
9955
 
@@ -9966,6 +11085,7 @@ msgid "Product exists!"
9966
  msgstr ""
9967
 
9968
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:168
 
9969
  msgid "%s is required!"
9970
  msgstr ""
9971
 
@@ -9985,19 +11105,21 @@ msgstr ""
9985
  msgid "Edit Product"
9986
  msgstr ""
9987
 
9988
- #: includes/shortcodes/class-wcj-products-shortcodes.php:200
 
9989
  msgid "%s ago"
9990
  msgstr ""
9991
 
9992
- #: includes/shortcodes/class-wcj-products-shortcodes.php:216
9993
  msgid "No sales yet."
9994
  msgstr ""
9995
 
9996
- #: includes/shortcodes/class-wcj-shortcodes.php:96
 
9997
  msgid "%s module not enabled!"
9998
  msgstr ""
9999
 
10000
- #: includes/shortcodes/class-wcj-shortcodes.php:120
10001
  msgid "Wrong user role!"
10002
  msgstr ""
10003
 
@@ -10100,106 +11222,3 @@ msgstr ""
10100
  #: includes/widgets/class-wcj-widget-multicurrency.php:80
10101
  msgid "Link list"
10102
  msgstr ""
10103
-
10104
- #: woocommerce-jetpack.php:346
10105
- msgid ""
10106
- "Please upgrade <strong>Booster Plus for WooCommerce</strong> plugin to "
10107
- "version %s. Please visit <a href=\"%s\">your account</a> on booster.io to "
10108
- "download the latest Booster Plus version."
10109
- msgstr ""
10110
-
10111
- #: woocommerce-jetpack.php:366
10112
- msgid ""
10113
- "If you like <strong>Booster for WooCommerce</strong> please leave us a %s "
10114
- "rating. Thank you, we couldn't have done it without you!"
10115
- msgstr ""
10116
-
10117
- #. #-#-#-#-# plugin.pot (Booster for WooCommerce 2.5.9) #-#-#-#-#
10118
- #. Plugin Name of the plugin/theme
10119
- #: woocommerce-jetpack.php:382
10120
- msgid "Booster for WooCommerce"
10121
- msgstr ""
10122
-
10123
- #: woocommerce-jetpack.php:383
10124
- msgid "Booster Settings"
10125
- msgstr ""
10126
-
10127
- #: woocommerce-jetpack.php:399
10128
- msgid "Docs"
10129
- msgstr ""
10130
-
10131
- #: woocommerce-jetpack.php:402
10132
- msgid "Unlock all"
10133
- msgstr ""
10134
-
10135
- #: woocommerce-jetpack.php:418
10136
- msgid "Install Booster Plus to unlock all features"
10137
- msgstr ""
10138
-
10139
- #: woocommerce-jetpack.php:419
10140
- msgid ""
10141
- "Some settings fields are locked and you will need %s to modify all locked "
10142
- "fields."
10143
- msgstr ""
10144
-
10145
- #: woocommerce-jetpack.php:420
10146
- msgid "Buy now"
10147
- msgstr ""
10148
-
10149
- #: woocommerce-jetpack.php:420
10150
- msgid "Visit Booster Site"
10151
- msgstr ""
10152
-
10153
- #: woocommerce-jetpack.php:424
10154
- msgid ""
10155
- "Get <a href=\"http://booster.io/plus/\" target=\"_blank\">Booster Plus</a> "
10156
- "to change value."
10157
- msgstr ""
10158
-
10159
- #: woocommerce-jetpack.php:427
10160
- msgid ""
10161
- "Get <a href=\"http://booster.io/plus/\" target=\"_blank\">Booster Plus</a> "
10162
- "to change values below."
10163
- msgstr ""
10164
-
10165
- #: woocommerce-jetpack.php:430
10166
- msgid ""
10167
- "Get <a href=\"http://booster.io/plus/\" target=\"_blank\">Booster Plus</a> "
10168
- "to change values above."
10169
- msgstr ""
10170
-
10171
- #: woocommerce-jetpack.php:433
10172
- msgid "Get Booster Plus to change value."
10173
- msgstr ""
10174
-
10175
- #: woocommerce-jetpack.php:686
10176
- msgid "Please upload a file to import!"
10177
- msgstr ""
10178
-
10179
- #: woocommerce-jetpack.php:694 woocommerce-jetpack.php:699
10180
- msgid "Wrong file format!"
10181
- msgstr ""
10182
-
10183
- #: woocommerce-jetpack.php:706
10184
- msgid "%d options successfully imported."
10185
- msgstr ""
10186
-
10187
- #: woocommerce-jetpack.php:771
10188
- msgid "%d options successfully deleted."
10189
- msgstr ""
10190
-
10191
- #. Plugin URI of the plugin/theme
10192
- msgid "http://booster.io"
10193
- msgstr ""
10194
-
10195
- #. Description of the plugin/theme
10196
- msgid "Supercharge your WooCommerce site with these awesome powerful features."
10197
- msgstr ""
10198
-
10199
- #. Author of the plugin/theme
10200
- msgid "Algoritmika Ltd"
10201
- msgstr ""
10202
-
10203
- #. Author URI of the plugin/theme
10204
- msgid "http://www.algoritmika.com"
10205
- msgstr ""
1
+ #: woocommerce-jetpack.php:357
2
+ #, php-format
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  msgid ""
4
+ "Please upgrade <strong>Booster Plus for WooCommerce</strong> plugin to "
5
+ "version %s. Please visit <a href=\"%s\">your account</a> on booster.io to "
6
+ "download the latest Booster Plus version."
 
 
 
 
 
 
 
7
  msgstr ""
8
 
9
+ #: woocommerce-jetpack.php:377
10
+ #, php-format
11
  msgid ""
12
+ "If you like <strong>Booster for WooCommerce</strong> please leave us a %s "
13
+ "rating. Thank you, we couldn't have done it without you!"
 
 
 
 
 
 
 
 
 
 
 
 
14
  msgstr ""
15
 
16
+ #: woocommerce-jetpack.php:393
17
+ #: includes/admin/class-wc-settings-jetpack.php:607
18
+ msgid "Booster for WooCommerce"
 
19
  msgstr ""
20
 
21
+ #: woocommerce-jetpack.php:394
22
+ msgid "Booster Settings"
 
 
 
 
 
 
 
 
23
  msgstr ""
24
 
25
+ #: woocommerce-jetpack.php:409
26
+ #: includes/admin/class-wc-settings-jetpack.php:369
27
+ #: includes/admin/class-wc-settings-jetpack.php:539
28
+ msgid "Settings"
29
  msgstr ""
30
 
31
+ #: woocommerce-jetpack.php:410
32
+ msgid "Docs"
33
  msgstr ""
34
 
35
+ #: woocommerce-jetpack.php:413
36
+ msgid "Unlock all"
37
  msgstr ""
38
 
39
+ #: woocommerce-jetpack.php:429
40
+ msgid "Install Booster Plus to unlock all features"
41
  msgstr ""
42
 
43
+ #: woocommerce-jetpack.php:430
44
+ #, php-format
45
  msgid ""
46
+ "Some settings fields are locked and you will need %s to modify all locked "
47
+ "fields."
 
 
 
 
 
 
 
 
 
 
48
  msgstr ""
49
 
50
+ #: woocommerce-jetpack.php:431
51
+ msgid "Buy now"
52
  msgstr ""
53
 
54
+ #: woocommerce-jetpack.php:431
55
+ msgid "Visit Booster Site"
56
  msgstr ""
57
 
58
+ #: woocommerce-jetpack.php:435
59
  msgid ""
60
+ "Get <a href=\"http://booster.io/plus/\" target=\"_blank\">Booster Plus</a> "
61
+ "to change value."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  msgstr ""
63
 
64
+ #: woocommerce-jetpack.php:438
65
+ msgid ""
66
+ "Get <a href=\"http://booster.io/plus/\" target=\"_blank\">Booster Plus</a> "
67
+ "to change values below."
68
  msgstr ""
69
 
70
+ #: woocommerce-jetpack.php:441
71
+ msgid ""
72
+ "Get <a href=\"http://booster.io/plus/\" target=\"_blank\">Booster Plus</a> "
73
+ "to change values above."
74
  msgstr ""
75
 
76
+ #: woocommerce-jetpack.php:444
77
+ msgid "Get Booster Plus to change value."
78
  msgstr ""
79
 
80
+ #: woocommerce-jetpack.php:697
81
+ msgid "Please upload a file to import!"
 
 
 
82
  msgstr ""
83
 
84
+ #: woocommerce-jetpack.php:705 woocommerce-jetpack.php:710
85
+ msgid "Wrong file format!"
86
  msgstr ""
87
 
88
+ #: woocommerce-jetpack.php:717
89
+ #, php-format
90
+ msgid "%d options successfully imported."
91
  msgstr ""
92
 
93
+ #: woocommerce-jetpack.php:782
94
+ #, php-format
95
+ msgid "%d options successfully deleted."
96
  msgstr ""
97
 
98
  #: includes/class-wcj-add-to-cart.php:25
116
 
117
  #: includes/class-wcj-add-to-cart.php:48
118
  #: includes/class-wcj-add-to-cart.php:187
119
+ #: includes/class-wcj-add-to-cart.php:212 includes/class-wcj-general.php:460
120
+ #: includes/class-wcj-product-images.php:254
121
+ #: includes/class-wcj-product-images.php:328
122
  #: includes/class-wcj-shipping-calculator.php:183
123
+ #: includes/class-wcj-shipping.php:334 includes/class-wcj-shipping.php:380
124
+ #: includes/class-wcj-sorting.php:282 includes/class-wcj-sorting.php:361
125
+ #: includes/class-wcj-sorting.php:385
126
  msgid "Enable Section"
127
  msgstr ""
128
 
154
  #: includes/class-wcj-add-to-cart.php:101
155
  #: includes/class-wcj-add-to-cart.php:147
156
  #: includes/class-wcj-add-to-cart.php:160
 
157
  msgid "Leave blank to disable."
158
  msgstr ""
159
 
160
  #: includes/class-wcj-add-to-cart.php:90
161
  #: includes/class-wcj-add-to-cart.php:101
162
  #: includes/class-wcj-add-to-cart.php:149
163
+ #: includes/class-wcj-add-to-cart.php:162 includes/class-wcj-sorting.php:289
164
+ #: includes/class-wcj-sorting.php:298 includes/class-wcj-sorting.php:307
165
+ #: includes/class-wcj-sorting.php:316 includes/class-wcj-sorting.php:334
166
+ #: includes/class-wcj-sorting.php:343
167
  msgid "Default: "
168
  msgstr ""
169
 
225
  msgstr ""
226
 
227
  #: includes/class-wcj-add-to-cart.php:180
228
+ #: includes/class-wcj-product-addons.php:529
229
  msgid "Per Product Options"
230
  msgstr ""
231
 
253
  msgstr ""
254
 
255
  #: includes/class-wcj-add-to-cart.php:221
256
+ #: includes/class-wcj-product-tabs.php:506
 
 
257
  msgid "Click \"Save changes\" after you change this number."
258
  msgstr ""
259
 
260
  #: includes/class-wcj-add-to-cart.php:257
261
+ #: includes/class-wcj-price-by-country.php:333
262
+ #: includes/class-wcj-price-by-country.php:344
263
+ #: includes/class-wcj-price-by-country.php:355
264
+ #: includes/class-wcj-price-by-country.php:409
265
  msgid "Group"
266
  msgstr ""
267
 
268
  #: includes/class-wcj-add-to-cart.php:258
269
+ #: includes/class-wcj-address-formats.php:130
270
+ #: includes/class-wcj-admin-tools.php:205
271
+ #: includes/class-wcj-admin-tools.php:212
272
+ #: includes/class-wcj-admin-tools.php:252
273
+ #: includes/class-wcj-admin-tools.php:259
274
+ #: includes/class-wcj-call-for-price.php:160
275
+ #: includes/class-wcj-currency-exchange-rates.php:164
276
+ #: includes/class-wcj-currency-exchange-rates.php:172
277
+ #: includes/class-wcj-general.php:345 includes/class-wcj-general.php:369
278
+ #: includes/class-wcj-general.php:385 includes/class-wcj-general.php:443
279
+ #: includes/class-wcj-general.php:494
280
+ #: includes/class-wcj-global-discount.php:265
281
+ #: includes/class-wcj-left-to-free-shipping.php:117
282
+ #: includes/class-wcj-left-to-free-shipping.php:150
283
+ #: includes/class-wcj-left-to-free-shipping.php:189
284
+ #: includes/class-wcj-multicurrency.php:394
285
+ #: includes/class-wcj-multicurrency.php:402
286
+ #: includes/class-wcj-order-numbers.php:315
287
+ #: includes/class-wcj-order-numbers.php:323
288
+ #: includes/class-wcj-order-numbers.php:330 includes/class-wcj-orders.php:369
289
+ #: includes/class-wcj-orders.php:398 includes/class-wcj-orders.php:506
290
+ #: includes/class-wcj-price-by-country.php:197
291
+ #: includes/class-wcj-price-by-country.php:219
292
+ #: includes/class-wcj-price-by-country.php:237
293
+ #: includes/class-wcj-price-by-country.php:246
294
+ #: includes/class-wcj-price-by-country.php:256
295
+ #: includes/class-wcj-price-by-user-role.php:330
296
+ #: includes/class-wcj-price-by-user-role.php:347
297
+ #: includes/class-wcj-price-labels.php:42
298
+ #: includes/class-wcj-price-labels.php:648
299
+ #: includes/class-wcj-product-add-to-cart.php:328
300
+ #: includes/class-wcj-product-add-to-cart.php:437
301
+ #: includes/class-wcj-product-add-to-cart.php:488
302
+ #: includes/class-wcj-product-add-to-cart.php:511
303
+ #: includes/class-wcj-product-add-to-cart.php:550
304
+ #: includes/class-wcj-product-add-to-cart.php:581
305
+ #: includes/class-wcj-product-add-to-cart.php:598
306
+ #: includes/class-wcj-product-addons.php:457
307
+ #: includes/class-wcj-product-addons.php:535
308
+ #: includes/class-wcj-product-addons.php:554
309
+ #: includes/class-wcj-product-addons.php:578
310
+ #: includes/class-wcj-product-addons.php:649
311
  #: includes/class-wcj-product-by-user.php:275
312
  #: includes/class-wcj-product-info.php:256
313
  #: includes/class-wcj-product-info.php:351
315
  #: includes/class-wcj-product-input-fields.php:133
316
  #: includes/class-wcj-product-input-fields.php:170
317
  #: includes/class-wcj-product-input-fields.php:283
318
+ #: includes/class-wcj-product-open-pricing.php:456
319
+ #: includes/class-wcj-product-price-by-formula.php:313
320
+ #: includes/class-wcj-product-tabs.php:680
321
+ #: includes/class-wcj-product-tabs.php:688
322
+ #: includes/class-wcj-products-xml.php:353
323
+ #: includes/class-wcj-purchase-data.php:292
324
+ #: includes/class-wcj-purchase-data.php:299
325
+ #: includes/class-wcj-purchase-data.php:306
326
+ #: includes/class-wcj-purchase-data.php:373
327
+ #: includes/class-wcj-purchase-data.php:380
328
+ #: includes/class-wcj-purchase-data.php:387
329
+ #: includes/class-wcj-purchase-data.php:427
330
+ #: includes/class-wcj-related-products.php:138
331
+ #: includes/class-wcj-related-products.php:337
332
+ #: includes/class-wcj-related-products.php:344
333
+ #: includes/class-wcj-related-products.php:351
334
+ #: includes/class-wcj-related-products.php:381
335
  #: includes/class-wcj-shipping-calculator.php:134
336
  #: includes/class-wcj-shipping-calculator.php:141
337
  #: includes/class-wcj-shipping-calculator.php:148
338
  #: includes/class-wcj-shipping-calculator.php:155
339
+ #: includes/class-wcj-shipping.php:207 includes/class-wcj-shipping.php:294
340
+ #: includes/class-wcj-sku.php:396 includes/class-wcj-sku.php:404
341
+ #: includes/class-wcj-sku.php:411 includes/class-wcj-wholesale-price.php:365
342
+ #: includes/class-wcj-wholesale-price.php:372
343
+ #: includes/class-wcj-wholesale-price.php:379
344
  #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-display.php:379
345
  msgid "Enable"
346
  msgstr ""
347
 
348
  #: includes/class-wcj-add-to-cart.php:274
349
+ #: includes/class-wcj-checkout-custom-fields.php:886
350
  msgid "categories"
351
  msgstr ""
352
 
353
+ #: includes/class-wcj-add-to-cart.php:275
354
+ #: includes/class-wcj-shipping-calculator.php:161
355
+ #: includes/reports/wcj-class-reports-stock.php:45
356
+ msgid ""
357
+ msgstr ""
358
+
359
  #: includes/class-wcj-add-to-cart.php:285
360
  msgid "Button text - single product view"
361
  msgstr ""
374
  "country display."
375
  msgstr ""
376
 
377
+ #: includes/class-wcj-address-formats.php:124
378
+ #: includes/class-wcj-address-formats.php:129
379
  msgid "Force Base Country Display"
380
  msgstr ""
381
 
382
+ #: includes/class-wcj-address-formats.php:141
 
 
 
 
383
  msgid "Address Formats by Country"
384
  msgstr ""
385
 
 
 
 
 
386
  #: includes/class-wcj-admin-tools.php:25 includes/class-wcj-admin-tools.php:32
387
  msgid "Admin Tools"
388
  msgstr ""
399
  msgid "Log"
400
  msgstr ""
401
 
402
+ #: includes/class-wcj-admin-tools.php:46
403
+ #, php-format
404
  msgid "Current PHP memory limit: %s."
405
  msgstr ""
406
 
407
+ #: includes/class-wcj-admin-tools.php:52
408
+ #, php-format
409
+ msgid "Current PHP time limit: %s seconds."
410
+ msgstr ""
411
+
412
+ #: includes/class-wcj-admin-tools.php:75
413
+ #: includes/class-wcj-export-import.php:445
414
+ #: includes/class-wcj-export-import.php:524
415
  msgid "Product Meta"
416
  msgstr ""
417
 
418
+ #: includes/class-wcj-admin-tools.php:92
419
+ #: includes/class-wcj-export-import.php:375
420
+ #: includes/class-wcj-export-import.php:443
421
  msgid "Order Meta"
422
  msgstr ""
423
 
424
+ #: includes/class-wcj-admin-tools.php:128
425
  msgid "Order Items Meta"
426
  msgstr ""
427
 
428
+ #: includes/class-wcj-admin-tools.php:145
429
  msgid "Log deleted successfully."
430
  msgstr ""
431
 
432
+ #: includes/class-wcj-admin-tools.php:150
433
  msgid "Delete Log"
434
  msgstr ""
435
 
436
+ #: includes/class-wcj-admin-tools.php:186
437
  msgid "NOT DEFINED"
438
  msgstr ""
439
 
440
+ #: includes/class-wcj-admin-tools.php:199
441
  msgid "Admin Tools Options"
442
  msgstr ""
443
 
444
+ #: includes/class-wcj-admin-tools.php:204
445
  msgid "Logging"
446
  msgstr ""
447
 
448
+ #: includes/class-wcj-admin-tools.php:211
449
  msgid "Debug"
450
  msgstr ""
451
 
452
+ #: includes/class-wcj-admin-tools.php:218
453
  msgid "PHP Memory Limit"
454
  msgstr ""
455
 
456
+ #: includes/class-wcj-admin-tools.php:219
457
  msgid "megabytes."
458
  msgstr ""
459
 
460
+ #: includes/class-wcj-admin-tools.php:220
461
+ #: includes/class-wcj-admin-tools.php:229
462
  msgid "Set zero to disable."
463
  msgstr ""
464
 
465
+ #: includes/class-wcj-admin-tools.php:227
466
+ msgid "PHP Time Limit"
467
+ msgstr ""
468
+
469
+ #: includes/class-wcj-admin-tools.php:228
470
+ msgid "seconds."
471
+ msgstr ""
472
+
473
+ #: includes/class-wcj-admin-tools.php:244
474
  msgid "System Info"
475
  msgstr ""
476
 
477
+ #: includes/class-wcj-admin-tools.php:251
478
  msgid "Show Order Meta"
479
  msgstr ""
480
 
481
+ #: includes/class-wcj-admin-tools.php:258
482
  msgid "Show Product Meta"
483
  msgstr ""
484
 
500
  "Leave price empty when adding or editing products. Then set the options here."
501
  msgstr ""
502
 
503
+ #: includes/class-wcj-call-for-price.php:104
504
+ msgid "You can use shortcodes in options."
505
  msgstr ""
506
 
507
  #: includes/class-wcj-call-for-price.php:108
508
+ msgid "Label to Show on Single"
509
+ msgstr ""
510
+
511
+ #: includes/class-wcj-call-for-price.php:109
512
+ #: includes/class-wcj-call-for-price.php:120
513
+ #: includes/class-wcj-call-for-price.php:131
514
+ #: includes/class-wcj-call-for-price.php:142
515
  msgid "This sets the html to output on empty price. Leave blank to disable."
516
  msgstr ""
517
 
518
+ #: includes/class-wcj-call-for-price.php:119
519
  msgid "Label to Show on Archives"
520
  msgstr ""
521
 
522
+ #: includes/class-wcj-call-for-price.php:130
523
  msgid "Label to Show on Homepage"
524
  msgstr ""
525
 
526
+ #: includes/class-wcj-call-for-price.php:141
527
  msgid "Label to Show on Related"
528
  msgstr ""
529
 
530
+ #: includes/class-wcj-call-for-price.php:152
531
  msgid "Hide Sale! Tag"
532
  msgstr ""
533
 
534
+ #: includes/class-wcj-call-for-price.php:153
535
  msgid "Hide the tag"
536
  msgstr ""
537
 
538
+ #: includes/class-wcj-call-for-price.php:159
539
  msgid "Make All Products Call for Price"
540
  msgstr ""
541
 
542
+ #: includes/class-wcj-call-for-price.php:161
543
  msgid ""
544
  "Enable this to make all products (except variable) prices empty. When "
545
  "checkbox disabled, all prices go back to normal."
546
  msgstr ""
547
 
548
+ #: includes/class-wcj-cart-customization.php:27
549
+ msgid "Cart Customization"
550
+ msgstr ""
551
+
552
+ #: includes/class-wcj-cart-customization.php:28
553
+ msgid "Customize WooCommerce cart - hide coupon field; item remove link."
554
+ msgstr ""
555
+
556
+ #: includes/class-wcj-cart-customization.php:65
557
+ #: includes/class-wcj-checkout-customization.php:69
558
+ #: includes/class-wcj-checkout-files-upload.php:606
559
+ #: includes/class-wcj-custom-css.php:74
560
+ #: includes/class-wcj-empty-cart-button.php:74
561
+ #: includes/class-wcj-eu-vat-number.php:464
562
+ #: includes/class-wcj-global-discount.php:236
563
+ #: includes/class-wcj-multicurrency-product-base-price.php:202
564
+ #: includes/class-wcj-multicurrency.php:373
565
+ #: includes/class-wcj-payment-gateways-icons.php:95
566
+ #: includes/class-wcj-payment-gateways-per-category.php:165
567
+ #: includes/class-wcj-price-by-user-role.php:324
568
+ #: includes/class-wcj-product-addons.php:643
569
+ #: includes/class-wcj-product-bookings.php:490
570
+ #: includes/class-wcj-product-by-user-role.php:137
571
+ #: includes/class-wcj-product-by-user.php:247
572
+ #: includes/class-wcj-product-open-pricing.php:392
573
+ #: includes/class-wcj-products-per-page.php:127
574
+ #: includes/class-wcj-products-xml.php:297
575
+ #: includes/class-wcj-wholesale-price.php:358
576
+ msgid "Options"
577
+ msgstr ""
578
+
579
+ #: includes/class-wcj-cart-customization.php:70
580
+ msgid "Hide Coupon on Cart Page"
581
+ msgstr ""
582
+
583
+ #: includes/class-wcj-cart-customization.php:71
584
+ #: includes/class-wcj-cart-customization.php:78
585
+ #: includes/class-wcj-checkout-customization.php:87
586
+ #: includes/class-wcj-currencies.php:106 includes/class-wcj-orders.php:483
587
+ #: includes/class-wcj-pdf-invoicing.php:397
588
+ #: includes/class-wcj-product-bookings.php:496
589
+ #: includes/class-wcj-product-images.php:261
590
+ #: includes/class-wcj-product-images.php:268
591
+ #: includes/class-wcj-product-images.php:275
592
+ #: includes/class-wcj-product-images.php:282
593
+ #: includes/class-wcj-related-products.php:395
594
+ #: includes/class-wcj-related-products.php:401
595
+ #: includes/class-wcj-shipping-calculator.php:168
596
+ msgid "Hide"
597
+ msgstr ""
598
+
599
+ #: includes/class-wcj-cart-customization.php:77
600
+ msgid "Hide Item Remove Link"
601
+ msgstr ""
602
+
603
  #: includes/class-wcj-cart.php:25
604
+ msgid "Cart Custom Info"
605
  msgstr ""
606
 
607
  #: includes/class-wcj-cart.php:26
633
  #: includes/class-wcj-cart.php:132
634
  #: includes/class-wcj-checkout-custom-info.php:75
635
  #: includes/class-wcj-mini-cart.php:80
636
+ #: includes/class-wcj-product-custom-info.php:99
637
  msgid "Total Blocks"
638
  msgstr ""
639
 
640
  #: includes/class-wcj-cart.php:153
641
+ #: includes/class-wcj-checkout-custom-info.php:91
642
  #: includes/class-wcj-mini-cart.php:100
643
+ #: includes/class-wcj-product-custom-info.php:114
644
  msgid "Info Block"
645
  msgstr ""
646
 
647
  #: includes/class-wcj-cart.php:159
648
+ #: includes/class-wcj-checkout-custom-info.php:96
649
+ #: includes/class-wcj-left-to-free-shipping.php:124
650
+ #: includes/class-wcj-left-to-free-shipping.php:159
651
+ #: includes/class-wcj-left-to-free-shipping.php:198
652
  #: includes/class-wcj-mini-cart.php:106
653
+ #: includes/class-wcj-product-custom-info.php:119
654
+ #: includes/class-wcj-product-tabs.php:433
655
+ #: includes/class-wcj-product-tabs.php:559
656
  msgid "Content"
657
  msgstr ""
658
 
659
  #: includes/class-wcj-cart.php:167
660
+ #: includes/class-wcj-checkout-custom-info.php:103
661
  #: includes/class-wcj-checkout-files-upload.php:641
662
+ #: includes/class-wcj-left-to-free-shipping.php:133
663
+ #: includes/class-wcj-left-to-free-shipping.php:168
664
+ #: includes/class-wcj-left-to-free-shipping.php:207
665
  #: includes/class-wcj-mini-cart.php:114
666
+ #: includes/class-wcj-product-custom-info.php:127
667
  #: includes/class-wcj-product-info.php:263
668
  #: includes/class-wcj-product-info.php:366
669
  #: includes/class-wcj-product-info.php:399
670
+ #: includes/class-wcj-products-per-page.php:149
671
  msgid "Position"
672
  msgstr ""
673
 
674
  #: includes/class-wcj-cart.php:176
675
+ #: includes/class-wcj-checkout-custom-info.php:141
676
  #: includes/class-wcj-mini-cart.php:127
677
+ #: includes/class-wcj-product-custom-info.php:153
678
  msgid "Position Order (i.e. Priority)"
679
  msgstr ""
680
 
706
  msgstr ""
707
 
708
  #: includes/class-wcj-checkout-core-fields.php:225
709
+ #: includes/classes/class-wcj-module.php:430
710
  msgid "enabled"
711
  msgstr ""
712
 
713
  #: includes/class-wcj-checkout-core-fields.php:230
714
  #: includes/class-wcj-checkout-core-fields.php:244
715
  #: includes/class-wcj-checkout-core-fields.php:278
716
+ #: includes/class-wcj-products-per-page.php:142
717
  msgid "Default"
718
  msgstr ""
719
 
720
  #: includes/class-wcj-checkout-core-fields.php:231
721
+ #: includes/class-wcj-checkout-custom-fields.php:688
722
  #: includes/class-wcj-checkout-files-upload.php:629
723
+ #: includes/class-wcj-export-import.php:359
724
+ #: includes/class-wcj-export-import.php:427
725
+ #: includes/class-wcj-export-import.php:508
726
+ #: includes/class-wcj-global-discount.php:264
727
+ #: includes/class-wcj-orders.php:438
728
  #: includes/class-wcj-price-by-user-role.php:142
729
+ #: includes/class-wcj-product-addons.php:443
730
  #: includes/class-wcj-product-bookings.php:417
731
+ #: includes/class-wcj-product-open-pricing.php:180
732
+ #: includes/class-wcj-product-price-by-formula.php:228
733
+ #: includes/class-wcj-products-xml.php:352
734
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:37
735
  msgid "Enabled"
736
  msgstr ""
737
 
738
  #: includes/class-wcj-checkout-core-fields.php:232
739
+ #: includes/class-wcj-pdf-invoicing.php:352
740
+ #: includes/class-wcj-product-add-to-cart.php:472
741
+ #: includes/class-wcj-product-tabs.php:442
742
  msgid "Disabled"
743
  msgstr ""
744
 
745
  #: includes/class-wcj-checkout-core-fields.php:239
746
+ #: includes/class-wcj-checkout-custom-fields.php:827
747
  msgid "required"
748
  msgstr ""
749
 
750
  #: includes/class-wcj-checkout-core-fields.php:245
751
  #: includes/class-wcj-checkout-files-upload.php:635
752
+ #: includes/class-wcj-eu-vat-number.php:496
753
+ #: includes/input-fields/class-wcj-product-input-fields-abstract.php:223
754
  msgid "Required"
755
  msgstr ""
756
 
759
  msgstr ""
760
 
761
  #: includes/class-wcj-checkout-core-fields.php:253
762
+ #: includes/class-wcj-checkout-custom-fields.php:835
763
  msgid "label"
764
  msgstr ""
765
 
769
  msgstr ""
770
 
771
  #: includes/class-wcj-checkout-core-fields.php:263
772
+ #: includes/class-wcj-checkout-custom-fields.php:843
773
  msgid "placeholder"
774
  msgstr ""
775
 
776
  #: includes/class-wcj-checkout-core-fields.php:273
777
+ #: includes/class-wcj-checkout-custom-fields.php:865
778
  msgid "class"
779
  msgstr ""
780
 
798
  msgid "Add custom fields to WooCommerce checkout page."
799
  msgstr ""
800
 
801
+ #: includes/class-wcj-checkout-custom-fields.php:619
802
  msgid "Checkout Custom Fields Options"
803
  msgstr ""
804
 
805
+ #: includes/class-wcj-checkout-custom-fields.php:625
806
  msgid "Add All Fields to Admin Emails"
807
  msgstr ""
808
 
809
+ #: includes/class-wcj-checkout-custom-fields.php:626
810
+ #: includes/class-wcj-checkout-custom-fields.php:633
811
+ #: includes/class-wcj-checkout-custom-fields.php:640
812
+ #: includes/class-wcj-emails.php:244 includes/class-wcj-eu-vat-number.php:590
813
+ #: includes/class-wcj-eu-vat-number.php:626
814
+ #: includes/class-wcj-export-import.php:316 includes/class-wcj-general.php:165
815
+ #: includes/class-wcj-order-custom-statuses.php:344
816
+ #: includes/class-wcj-order-custom-statuses.php:420
817
+ #: includes/class-wcj-order-custom-statuses.php:427
818
+ #: includes/class-wcj-order-custom-statuses.php:434
819
+ #: includes/class-wcj-order-min-amount.php:219
820
+ #: includes/class-wcj-orders.php:416 includes/class-wcj-orders.php:490
821
  #: includes/class-wcj-product-by-user.php:282
822
+ #: includes/class-wcj-purchase-data.php:404
823
+ #: includes/class-wcj-purchase-data.php:411 includes/class-wcj-sku.php:418
824
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:359
825
  msgid "Add"
826
  msgstr ""
827
 
828
+ #: includes/class-wcj-checkout-custom-fields.php:632
829
  msgid "Add All Fields to Customers Emails"
830
  msgstr ""
831
 
832
+ #: includes/class-wcj-checkout-custom-fields.php:639
833
  msgid "Add All Fields to \"Order Received\" Page"
834
  msgstr ""
835
 
836
+ #: includes/class-wcj-checkout-custom-fields.php:651
837
  msgid "The Fields"
838
  msgstr ""
839
 
840
+ #: includes/class-wcj-checkout-custom-fields.php:656
841
  msgid "Custom Fields Number"
842
  msgstr ""
843
 
844
+ #: includes/class-wcj-checkout-custom-fields.php:657
845
+ #: includes/class-wcj-product-input-fields.php:179
846
+ msgid "Click Save changes after you change this number."
847
+ msgstr ""
848
+
849
+ #: includes/class-wcj-checkout-custom-fields.php:687
850
  msgid "Custom Field"
851
  msgstr ""
852
 
853
+ #: includes/class-wcj-checkout-custom-fields.php:698
854
  msgid "type"
855
  msgstr ""
856
 
857
+ #: includes/class-wcj-checkout-custom-fields.php:703
858
+ #: includes/class-wcj-more-button-labels.php:60
859
+ #: includes/class-wcj-products-per-page.php:167
860
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:48
861
  msgid "Text"
862
  msgstr ""
863
 
864
+ #: includes/class-wcj-checkout-custom-fields.php:704
865
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:49
866
  msgid "Textarea"
867
  msgstr ""
868
 
869
+ #: includes/class-wcj-checkout-custom-fields.php:705
870
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:50
871
  msgid "Number"
872
  msgstr ""
873
 
874
+ #: includes/class-wcj-checkout-custom-fields.php:706
875
+ #: includes/class-wcj-product-addons.php:472
876
+ #: includes/class-wcj-product-addons.php:590
877
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:51
878
  msgid "Checkbox"
879
  msgstr ""
880
 
881
+ #: includes/class-wcj-checkout-custom-fields.php:708
882
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:53
883
  msgid "Datepicker"
884
  msgstr ""
885
 
886
+ #: includes/class-wcj-checkout-custom-fields.php:709
887
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:54
888
  msgid "Weekpicker"
889
  msgstr ""
890
 
891
+ #: includes/class-wcj-checkout-custom-fields.php:710
892
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:55
893
  msgid "Timepicker"
894
  msgstr ""
895
 
896
+ #: includes/class-wcj-checkout-custom-fields.php:711
897
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:56
898
  msgid "Select"
899
  msgstr ""
900
 
901
+ #: includes/class-wcj-checkout-custom-fields.php:712
902
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:57
903
  msgid "Radio"
904
  msgstr ""
905
 
906
+ #: includes/class-wcj-checkout-custom-fields.php:713
907
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:58
908
  msgid "Password"
909
  msgstr ""
910
 
911
+ #: includes/class-wcj-checkout-custom-fields.php:714
912
+ #: includes/class-wcj-orders.php:305 includes/class-wcj-orders.php:415
913
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:59
914
  #: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:90
915
  #: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:104
916
  msgid "Country"
917
  msgstr ""
918
 
919
+ #: includes/class-wcj-checkout-custom-fields.php:715
920
  msgid "State"
921
  msgstr ""
922
 
923
+ #: includes/class-wcj-checkout-custom-fields.php:716
924
+ #: includes/export/class-wcj-fields-helper.php:77
925
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:61
926
  #: includes/reports/wcj-class-reports-customers.php:92
927
  msgid "Email"
928
  msgstr ""
929
 
930
+ #: includes/class-wcj-checkout-custom-fields.php:717
931
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:62
932
  msgid "Phone"
933
  msgstr ""
934
 
935
+ #: includes/class-wcj-checkout-custom-fields.php:723
936
  msgid ""
937
  "options (only if \"select\" or \"radio\" type is selected). One option per "
938
  "line"
939
  msgstr ""
940
 
941
+ #: includes/class-wcj-checkout-custom-fields.php:732
942
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:79
943
  msgid "If checkbox is selected, set value for ON here"
944
  msgstr ""
945
 
946
+ #: includes/class-wcj-checkout-custom-fields.php:734
947
+ #: includes/class-wcj-eu-vat-number.php:497
948
+ #: includes/class-wcj-eu-vat-number.php:504
949
+ #: includes/class-wcj-eu-vat-number.php:522
950
+ #: includes/class-wcj-eu-vat-number.php:537
951
+ #: includes/class-wcj-eu-vat-number.php:544
952
+ #: includes/class-wcj-eu-vat-number.php:562
953
  #: includes/class-wcj-price-by-user-role.php:139
954
  #: includes/class-wcj-price-by-user-role.php:182
955
+ #: includes/class-wcj-product-add-to-cart.php:278
956
+ #: includes/class-wcj-product-add-to-cart.php:292
957
+ #: includes/class-wcj-product-add-to-cart.php:302
958
+ #: includes/class-wcj-product-addons.php:440
959
+ #: includes/class-wcj-product-addons.php:462
960
+ #: includes/class-wcj-product-addons.php:510
961
  #: includes/class-wcj-product-bookings.php:414
962
+ #: includes/class-wcj-product-images.php:212
963
+ #: includes/class-wcj-product-images.php:222
964
+ #: includes/class-wcj-product-images.php:232
965
+ #: includes/class-wcj-product-open-pricing.php:177
966
+ #: includes/class-wcj-product-price-by-formula.php:225
967
+ #: includes/class-wcj-related-products.php:136
968
+ #: includes/class-wcj-wholesale-price.php:264
969
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:82
970
  #: includes/widgets/class-wcj-widget-country-switcher.php:91
971
  msgid "Yes"
972
  msgstr ""
973
 
974
+ #: includes/class-wcj-checkout-custom-fields.php:740
975
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:87
976
  msgid "If checkbox is selected, set value for OFF here"
977
  msgstr ""
978
 
979
+ #: includes/class-wcj-checkout-custom-fields.php:742
980
  #: includes/class-wcj-price-by-user-role.php:140
981
  #: includes/class-wcj-price-by-user-role.php:183
982
+ #: includes/class-wcj-product-add-to-cart.php:279
983
+ #: includes/class-wcj-product-add-to-cart.php:293
984
+ #: includes/class-wcj-product-add-to-cart.php:303
985
+ #: includes/class-wcj-product-addons.php:441
986
+ #: includes/class-wcj-product-addons.php:463
987
+ #: includes/class-wcj-product-addons.php:511
988
  #: includes/class-wcj-product-bookings.php:415
989
+ #: includes/class-wcj-product-images.php:213
990
+ #: includes/class-wcj-product-images.php:223
991
+ #: includes/class-wcj-product-images.php:233
992
+ #: includes/class-wcj-product-open-pricing.php:178
993
+ #: includes/class-wcj-product-price-by-formula.php:226
994
+ #: includes/class-wcj-related-products.php:135
995
+ #: includes/class-wcj-wholesale-price.php:265
996
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:90
997
  #: includes/widgets/class-wcj-widget-country-switcher.php:90
998
  msgid "No"
999
  msgstr ""
1000
 
1001
+ #: includes/class-wcj-checkout-custom-fields.php:748
1002
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:95
1003
  msgid "If checkbox is selected, set default value here"
1004
  msgstr ""
1005
 
1006
+ #: includes/class-wcj-checkout-custom-fields.php:752
1007
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:100
1008
  msgid "Not Checked"
1009
  msgstr ""
1010
 
1011
+ #: includes/class-wcj-checkout-custom-fields.php:753
1012
+ #: includes/class-wcj-checkout-customization.php:81
1013
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:101
1014
  msgid "Checked"
1015
  msgstr ""
1016
 
1017
+ #: includes/class-wcj-checkout-custom-fields.php:759
 
1018
  msgid ""
1019
  "If datepicker/weekpicker is selected, set date format here. Visit <a href="
1020
  "\"https://codex.wordpress.org/Formatting_Date_and_Time\" target=\"_blank"
1021
  "\">documentation on date and time formatting</a> for valid date formats."
1022
  msgstr ""
1023
 
1024
+ #: includes/class-wcj-checkout-custom-fields.php:760
1025
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:125
1026
  msgid "Leave blank to use your current WordPress format"
1027
  msgstr ""
1028
 
1029
+ #: includes/class-wcj-checkout-custom-fields.php:767
1030
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:133
1031
  msgid "If datepicker/weekpicker is selected, set min date (in days) here"
1032
  msgstr ""
1033
 
1034
+ #: includes/class-wcj-checkout-custom-fields.php:774
1035
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:141
1036
  msgid "If datepicker/weekpicker is selected, set max date (in days) here"
1037
  msgstr ""
1038
 
1039
+ #: includes/class-wcj-checkout-custom-fields.php:781
1040
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:149
1041
  msgid ""
1042
  "If datepicker/weekpicker is selected, set if you want to add year selector"
1043
  msgstr ""
1044
 
1045
+ #: includes/class-wcj-checkout-custom-fields.php:788
1046
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:157
1047
  msgid ""
1048
  "If datepicker/weekpicker is selected, and year selector is enabled, set year "
1049
  "range here"
1050
  msgstr ""
1051
 
1052
+ #: includes/class-wcj-checkout-custom-fields.php:789
1053
  msgid ""
1054
  "The range of years displayed in the year drop-down: either relative to "
1055
  "today's year (\"-nn:+nn\"), relative to the currently selected year (\"c-nn:c"
1058
  "restrict which dates may be selected use the minDate and/or maxDate options."
1059
  msgstr ""
1060
 
1061
+ #: includes/class-wcj-checkout-custom-fields.php:796
1062
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:166
1063
  msgid "If datepicker/weekpicker is selected, set first week day here"
1064
  msgstr ""
1065
 
1066
+ #: includes/class-wcj-checkout-custom-fields.php:801
1067
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:171
1068
  msgid "Sunday"
1069
  msgstr ""
1070
 
1071
+ #: includes/class-wcj-checkout-custom-fields.php:802
1072
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:172
1073
  msgid "Monday"
1074
  msgstr ""
1075
 
1076
+ #: includes/class-wcj-checkout-custom-fields.php:803
1077
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:173
1078
  msgid "Tuesday"
1079
  msgstr ""
1080
 
1081
+ #: includes/class-wcj-checkout-custom-fields.php:804
1082
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:174
1083
  msgid "Wednesday"
1084
  msgstr ""
1085
 
1086
+ #: includes/class-wcj-checkout-custom-fields.php:805
1087
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:175
1088
  msgid "Thursday"
1089
  msgstr ""
1090
 
1091
+ #: includes/class-wcj-checkout-custom-fields.php:806
1092
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:176
1093
  msgid "Friday"
1094
  msgstr ""
1095
 
1096
+ #: includes/class-wcj-checkout-custom-fields.php:807
1097
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:177
1098
  msgid "Saturday"
1099
  msgstr ""
1100
 
1101
+ #: includes/class-wcj-checkout-custom-fields.php:812
 
1102
  msgid ""
1103
  "If timepicker is selected, set time format here. Visit <a href=\"http://"
1104
  "timepicker.co/options/\" target=\"_blank\">timepicker options page</a> for "
1105
  "valid time formats."
1106
  msgstr ""
1107
 
1108
+ #: includes/class-wcj-checkout-custom-fields.php:820
1109
+ #: includes/input-fields/class-wcj-product-input-fields-abstract.php:207
1110
  msgid "If timepicker is selected, set interval (in minutes) here"
1111
  msgstr ""
1112
 
1113
+ #: includes/class-wcj-checkout-custom-fields.php:851
1114
  msgid "section"
1115
  msgstr ""
1116
 
1117
+ #: includes/class-wcj-checkout-custom-fields.php:856
1118
+ #: includes/class-wcj-checkout-custom-info.php:111
1119
  #: includes/class-wcj-empty-cart-button.php:117
1120
+ #: includes/class-wcj-left-to-free-shipping.php:214
1121
  msgid "Billing"
1122
  msgstr ""
1123
 
1124
+ #: includes/class-wcj-checkout-custom-fields.php:857
1125
+ #: includes/class-wcj-checkout-custom-info.php:112
1126
  #: includes/class-wcj-empty-cart-button.php:118
1127
+ #: includes/class-wcj-left-to-free-shipping.php:215
1128
+ #: includes/class-wcj-price-by-user-role.php:346
1129
  #: includes/class-wcj-shipping.php:25
1130
  msgid "Shipping"
1131
  msgstr ""
1132
 
1133
+ #: includes/class-wcj-checkout-custom-fields.php:858
1134
+ #: includes/export/class-wcj-fields-helper.php:122
1135
+ #: includes/export/class-wcj-fields-helper.php:207
1136
  msgid "Order Notes"
1137
  msgstr ""
1138
 
1139
+ #: includes/class-wcj-checkout-custom-fields.php:859
1140
  msgid "Account"
1141
  msgstr ""
1142
 
1143
+ #: includes/class-wcj-checkout-custom-fields.php:870
1144
+ #: includes/class-wcj-eu-vat-number.php:515
1145
  msgid "Wide"
1146
  msgstr ""
1147
 
1148
+ #: includes/class-wcj-checkout-custom-fields.php:871
1149
+ #: includes/class-wcj-eu-vat-number.php:516
1150
  msgid "First"
1151
  msgstr ""
1152
 
1153
+ #: includes/class-wcj-checkout-custom-fields.php:872
1154
+ #: includes/class-wcj-eu-vat-number.php:517
1155
  msgid "Last"
1156
  msgstr ""
1157
 
1158
+ #: includes/class-wcj-checkout-custom-fields.php:878
1159
  msgid "clear"
1160
  msgstr ""
1161
 
1162
+ #: includes/class-wcj-checkout-custom-fields.php:887
1163
  msgid ""
1164
  "Show this field only if there is a product of selected category in cart."
1165
  msgstr ""
1166
 
1167
+ #: includes/class-wcj-checkout-custom-fields.php:897
1168
  msgid "products"
1169
  msgstr ""
1170
 
1171
+ #: includes/class-wcj-checkout-custom-fields.php:898
1172
  msgid "Show this field only if there is a selected product in cart."
1173
  msgstr ""
1174
 
1184
  msgid "Checkout Custom Info Blocks"
1185
  msgstr ""
1186
 
1187
+ #: includes/class-wcj-checkout-custom-info.php:109
1188
  #: includes/class-wcj-checkout-files-upload.php:645
1189
  #: includes/class-wcj-empty-cart-button.php:115
1190
+ #: includes/class-wcj-left-to-free-shipping.php:212
1191
  msgid "Before checkout form"
1192
  msgstr ""
1193
 
1194
+ #: includes/class-wcj-checkout-custom-info.php:110
1195
  #: includes/class-wcj-empty-cart-button.php:116
1196
+ #: includes/class-wcj-left-to-free-shipping.php:213
1197
  msgid "Before customer details"
1198
  msgstr ""
1199
 
1200
+ #: includes/class-wcj-checkout-custom-info.php:113
1201
  #: includes/class-wcj-empty-cart-button.php:119
1202
+ #: includes/class-wcj-left-to-free-shipping.php:216
1203
  msgid "After customer details"
1204
  msgstr ""
1205
 
1206
+ #: includes/class-wcj-checkout-custom-info.php:114
1207
  #: includes/class-wcj-empty-cart-button.php:120
1208
+ #: includes/class-wcj-left-to-free-shipping.php:217
1209
  msgid "Before order review"
1210
  msgstr ""
1211
 
1212
+ #: includes/class-wcj-checkout-custom-info.php:115
1213
  #: includes/class-wcj-empty-cart-button.php:121
1214
+ #: includes/class-wcj-left-to-free-shipping.php:218
1215
  msgid "Order review"
1216
  msgstr ""
1217
 
1218
+ #: includes/class-wcj-checkout-custom-info.php:116
1219
  #: includes/class-wcj-empty-cart-button.php:122
1220
+ #: includes/class-wcj-left-to-free-shipping.php:219
1221
  msgid "After order review"
1222
  msgstr ""
1223
 
1224
+ #: includes/class-wcj-checkout-custom-info.php:117
1225
  #: includes/class-wcj-checkout-files-upload.php:646
1226
  #: includes/class-wcj-empty-cart-button.php:123
1227
+ #: includes/class-wcj-left-to-free-shipping.php:220
1228
  msgid "After checkout form"
1229
  msgstr ""
1230
 
1231
+ #: includes/class-wcj-checkout-custom-info.php:136
1232
+ msgid "Order Received (Thank You) page"
1233
+ msgstr ""
1234
+
1235
+ #: includes/class-wcj-checkout-customization.php:27
1236
+ msgid "Checkout Customization"
1237
+ msgstr ""
1238
+
1239
+ #: includes/class-wcj-checkout-customization.php:28
1240
+ msgid "Customize WooCommerce checkout - hide \"Order Again\" button etc."
1241
+ msgstr ""
1242
+
1243
+ #: includes/class-wcj-checkout-customization.php:74
1244
+ msgid "\"Create an account?\" Checkbox"
1245
+ msgstr ""
1246
+
1247
+ #: includes/class-wcj-checkout-customization.php:75
1248
+ msgid "\"Create an account?\" checkbox default value"
1249
+ msgstr ""
1250
+
1251
+ #: includes/class-wcj-checkout-customization.php:80
1252
+ msgid "WooCommerce default"
1253
+ msgstr ""
1254
+
1255
+ #: includes/class-wcj-checkout-customization.php:82
1256
+ msgid "Not checked"
1257
+ msgstr ""
1258
+
1259
+ #: includes/class-wcj-checkout-customization.php:86
1260
+ msgid "Hide \"Order Again\" Button on \"View Order\" Page"
1261
+ msgstr ""
1262
+
1263
  #: includes/class-wcj-checkout-files-upload.php:28
1264
  msgid "Checkout Files Upload"
1265
  msgstr ""
1282
  #: includes/class-wcj-checkout-files-upload.php:120
1283
  #: includes/class-wcj-checkout-files-upload.php:257
1284
  #: includes/class-wcj-checkout-files-upload.php:705
1285
+ #, php-format
1286
  msgid "Wrong file type: \"%s\"!"
1287
  msgstr ""
1288
 
1289
+ #: includes/class-wcj-checkout-files-upload.php:140
1290
+ #: includes/class-wcj-eu-vat-number.php:88
1291
+ #: includes/class-wcj-payment-gateways.php:55
1292
+ #: includes/admin/class-wc-settings-jetpack.php:26
1293
+ #: includes/admin/class-wc-settings-jetpack.php:371
1294
+ #: includes/classes/class-wcj-module.php:184
1295
+ #: includes/classes/class-wcj-module.php:378
1296
+ msgid "Booster"
1297
+ msgstr ""
1298
+
1299
  #: includes/class-wcj-checkout-files-upload.php:140
1300
  msgid "Uploaded Files"
1301
  msgstr ""
1307
  #: includes/class-wcj-checkout-files-upload.php:229
1308
  #: includes/class-wcj-checkout-files-upload.php:237
1309
  #: includes/class-wcj-checkout-files-upload.php:735
1310
+ #, php-format
1311
  msgid "File \"%s\" was successfully removed."
1312
  msgstr ""
1313
 
1314
  #: includes/class-wcj-checkout-files-upload.php:269
1315
  #: includes/class-wcj-checkout-files-upload.php:720
1316
+ #, php-format
1317
  msgid "File \"%s\" was successfully uploaded."
1318
  msgstr ""
1319
 
1331
  #: includes/class-wcj-checkout-files-upload.php:500
1332
  #: includes/class-wcj-checkout-files-upload.php:501
1333
  #: includes/class-wcj-checkout-files-upload.php:697
1334
+ #: includes/class-wcj-sorting.php:406
1335
  msgid "Remove"
1336
  msgstr ""
1337
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1338
  #: includes/class-wcj-checkout-files-upload.php:611
1339
+ #: includes/class-wcj-products-xml.php:302
1340
  msgid "Total Files"
1341
  msgstr ""
1342
 
1358
 
1359
  #: includes/class-wcj-checkout-files-upload.php:672
1360
  #: includes/class-wcj-checkout-files-upload.php:846
1361
+ #: includes/class-wcj-order-custom-statuses.php:294
1362
+ #: includes/class-wcj-order-custom-statuses.php:349
1363
+ #: includes/class-wcj-orders.php:444
1364
  msgid "Label"
1365
  msgstr ""
1366
 
1397
  #: includes/class-wcj-checkout-files-upload.php:703
1398
  #: includes/class-wcj-checkout-files-upload.php:718
1399
  #: includes/class-wcj-checkout-files-upload.php:733
1400
+ #, php-format
1401
  msgid "%s will be replaced with file name"
1402
  msgstr ""
1403
 
1504
  msgstr ""
1505
 
1506
  #: includes/class-wcj-checkout-files-upload.php:839
1507
+ #: includes/class-wcj-product-addons.php:656
1508
+ #: includes/class-wcj-product-addons.php:679
1509
  msgid "Before"
1510
  msgstr ""
1511
 
1514
  msgstr ""
1515
 
1516
  #: includes/class-wcj-checkout-files-upload.php:854
1517
+ #: includes/class-wcj-export-import.php:357
1518
+ #: includes/class-wcj-export-import.php:425
1519
+ #: includes/class-wcj-export-import.php:506
1520
  msgid "Field"
1521
  msgstr ""
1522
 
1525
  msgstr ""
1526
 
1527
  #: includes/class-wcj-checkout-files-upload.php:862
1528
+ #: includes/class-wcj-product-addons.php:671
1529
+ #: includes/class-wcj-product-addons.php:694
1530
  msgid "After"
1531
  msgstr ""
1532
 
1538
  msgid "Add crowdfunding products to WooCommerce."
1539
  msgstr ""
1540
 
1541
+ #: includes/class-wcj-crowdfunding.php:72
1542
  msgid "Goal"
1543
  msgstr ""
1544
 
1545
+ #: includes/class-wcj-crowdfunding.php:78
1546
  #: includes/pdf-invoices/class-wcj-pdf-invoicing-renumerate-tool.php:71
1547
  msgid "Start Date"
1548
  msgstr ""
1549
 
1550
+ #: includes/class-wcj-crowdfunding.php:84
1551
  msgid "Deadline"
1552
  msgstr ""
1553
 
1554
+ #: includes/class-wcj-crowdfunding.php:95
1555
  msgid "When enabled, module will add Crowdfunding metabox to product edit."
1556
  msgstr ""
1557
 
1558
+ #: includes/class-wcj-crowdfunding.php:97
1559
+ #, php-format
1560
+ msgid ""
1561
+ "To add crowdfunding info to the product, use <a href=\"%s\" target=\"_blank"
1562
+ "\">Booster's crowdfunding shortcodes</a>."
1563
  msgstr ""
1564
 
1565
+ #: includes/class-wcj-crowdfunding.php:101
1566
+ #, php-format
1567
+ msgid ""
1568
+ "Shortcodes could be used for example in <a href=\"%s\">Product Info module</"
1569
+ "a>."
1570
  msgstr ""
1571
 
1572
+ #: includes/class-wcj-crowdfunding.php:105
1573
+ #, php-format
1574
+ msgid ""
1575
+ "To change add to cart button labels use <a href=\"%s\">Add to Cart Labels "
1576
+ "module</a>."
1577
  msgstr ""
1578
 
1579
  #: includes/class-wcj-currencies.php:25
1601
  msgid "Hide Currency Symbol"
1602
  msgstr ""
1603
 
 
 
 
 
 
 
 
 
 
 
 
 
1604
  #: includes/class-wcj-currencies.php:107
1605
  msgid "Default: no."
1606
  msgstr ""
1637
  msgid "Automatic currency exchange rates for WooCommerce."
1638
  msgstr ""
1639
 
1640
+ #: includes/class-wcj-currency-exchange-rates.php:112
1641
+ #, php-format
1642
+ msgid "%s till next update."
 
 
 
 
1643
  msgstr ""
1644
 
1645
+ #: includes/class-wcj-currency-exchange-rates.php:114
1646
+ #: includes/class-wcj-products-xml.php:331
1647
+ #, php-format
1648
  msgid "%s seconds till next update."
1649
  msgstr ""
1650
 
1651
+ #: includes/class-wcj-currency-exchange-rates.php:120
1652
+ #: includes/class-wcj-price-by-country.php:378
1653
  msgid "Exchange Rates"
1654
  msgstr ""
1655
 
1656
+ #: includes/class-wcj-currency-exchange-rates.php:122
1657
  msgid ""
1658
+ "All currencies from all <strong>enabled</strong> modules (with \"Exchange "
1659
+ "Rates Updates\" set to \"Automatically via Currency Exchange Rates module\") "
1660
+ "will be automatically added to the list."
1661
  msgstr ""
1662
 
1663
+ #: includes/class-wcj-currency-exchange-rates.php:126
1664
+ #: includes/class-wcj-currency-per-product.php:463
1665
+ #: includes/class-wcj-multicurrency-product-base-price.php:207
1666
+ #: includes/class-wcj-multicurrency.php:378
1667
+ #: includes/class-wcj-payment-gateways-currency.php:266
1668
+ #: includes/class-wcj-price-by-country.php:381
1669
  msgid "Exchange Rates Updates"
1670
  msgstr ""
1671
 
1672
+ #: includes/class-wcj-currency-exchange-rates.php:132
1673
+ #: includes/class-wcj-products-xml.php:409
1674
  #: includes/exchange-rates/class-wcj-exchange-rates-crons.php:24
1675
  msgid "Update Every Minute"
1676
  msgstr ""
1677
 
1678
+ #: includes/class-wcj-currency-exchange-rates.php:133
1679
+ #: includes/class-wcj-products-xml.php:410
1680
  #: includes/exchange-rates/class-wcj-exchange-rates-crons.php:25
1681
  msgid "Update Hourly"
1682
  msgstr ""
1683
 
1684
+ #: includes/class-wcj-currency-exchange-rates.php:134
1685
+ #: includes/class-wcj-products-xml.php:411
1686
  #: includes/exchange-rates/class-wcj-exchange-rates-crons.php:26
1687
  msgid "Update Twice Daily"
1688
  msgstr ""
1689
 
1690
+ #: includes/class-wcj-currency-exchange-rates.php:135
1691
+ #: includes/class-wcj-products-xml.php:412
1692
  #: includes/exchange-rates/class-wcj-exchange-rates-crons.php:27
1693
  msgid "Update Daily"
1694
  msgstr ""
1695
 
1696
+ #: includes/class-wcj-currency-exchange-rates.php:136
1697
+ #: includes/class-wcj-products-xml.php:413
1698
  #: includes/exchange-rates/class-wcj-exchange-rates-crons.php:28
1699
  msgid "Update Weekly"
1700
  msgstr ""
1701
 
1702
+ #: includes/class-wcj-currency-exchange-rates.php:140
1703
+ msgid "Exchange Rates Server"
1704
+ msgstr ""
1705
+
1706
+ #: includes/class-wcj-currency-exchange-rates.php:147
1707
+ msgid "Exchange Rates Offset - Percent"
1708
+ msgstr ""
1709
+
1710
+ #: includes/class-wcj-currency-exchange-rates.php:148
1711
+ #: includes/class-wcj-currency-exchange-rates.php:156
1712
+ msgid ""
1713
+ "If both percent and fixed offsets are set - percent offset is applied first "
1714
+ "and fixed offset after that."
1715
+ msgstr ""
1716
+
1717
+ #: includes/class-wcj-currency-exchange-rates.php:155
1718
+ msgid "Exchange Rates Offset - Fixed"
1719
+ msgstr ""
1720
+
1721
+ #: includes/class-wcj-currency-exchange-rates.php:163
1722
+ msgid "Calculate with Inversion"
1723
+ msgstr ""
1724
+
1725
+ #: includes/class-wcj-currency-exchange-rates.php:165
1726
+ msgid ""
1727
+ "If your currency pair have very small exchange rate, you may want to invert "
1728
+ "currencies before calculating the rate."
1729
+ msgstr ""
1730
+
1731
+ #: includes/class-wcj-currency-exchange-rates.php:171
1732
+ msgid "Always Use cURL"
1733
+ msgstr ""
1734
+
1735
+ #: includes/class-wcj-currency-exchange-rates.php:173
1736
+ msgid ""
1737
+ "If for some reason currency exchange rates are not updating, try enabling "
1738
+ "this option."
1739
+ msgstr ""
1740
+
1741
  #: includes/class-wcj-currency-external-products.php:25
1742
  msgid "Currency for External Products"
1743
  msgstr ""
1751
  msgstr ""
1752
 
1753
  #: includes/class-wcj-currency-external-products.php:79
1754
+ #: includes/class-wcj-currency-per-product.php:512
1755
+ #: includes/class-wcj-multicurrency-product-base-price.php:255
1756
+ #: includes/class-wcj-multicurrency.php:463
1757
+ #: includes/class-wcj-price-by-country.php:368
1758
+ #: includes/class-wcj-price-formats.php:121
1759
  msgid "Currency"
1760
  msgstr ""
1761
 
1771
  msgid "Display prices for WooCommerce products in different currencies."
1772
  msgstr ""
1773
 
1774
+ #: includes/class-wcj-currency-per-product.php:125
1775
+ #: includes/class-wcj-currency-per-product.php:442
1776
+ msgid ""
1777
+ "Only one product can be added to the cart. Clear the cart or finish the "
1778
+ "order, before adding another product to the cart."
1779
+ msgstr ""
1780
+
1781
+ #: includes/class-wcj-currency-per-product.php:140
1782
+ #: includes/class-wcj-currency-per-product.php:449
1783
+ msgid ""
1784
+ "Only products with same currency can be added to the cart. Clear the cart or "
1785
+ "finish the order, before adding products with another currency to the cart."
1786
+ msgstr ""
1787
+
1788
+ #: includes/class-wcj-currency-per-product.php:186
1789
+ #, php-format
1790
  msgctxt "Price range: from-to"
1791
  msgid "%1$s&ndash;%2$s"
1792
  msgstr ""
1793
 
1794
+ #: includes/class-wcj-currency-per-product.php:398
1795
+ #: includes/class-wcj-multicurrency-product-base-price.php:164
1796
  msgid "Product Currency"
1797
  msgstr ""
1798
 
1799
+ #: includes/class-wcj-currency-per-product.php:400
1800
  msgid "Update product after you change this field's value."
1801
  msgstr ""
1802
 
1803
+ #: includes/class-wcj-currency-per-product.php:422
1804
+ msgid "Cart and Checkout Behaviour Options"
1805
+ msgstr ""
1806
+
1807
+ #: includes/class-wcj-currency-per-product.php:427
1808
+ msgid "Cart and Checkout Behaviour"
1809
+ msgstr ""
1810
+
1811
+ #: includes/class-wcj-currency-per-product.php:432
1812
+ msgid "Convert to shop default currency"
1813
+ msgstr ""
1814
+
1815
+ #: includes/class-wcj-currency-per-product.php:433
1816
+ #: includes/class-wcj-currency-per-product.php:440
1817
+ msgid "Leave product currency (allow only one product to be added to cart)"
1818
+ msgstr ""
1819
+
1820
+ #: includes/class-wcj-currency-per-product.php:434
1821
+ #: includes/class-wcj-currency-per-product.php:447
1822
+ msgid ""
1823
+ "Leave product currency (allow only same currency products to be added to "
1824
+ "cart)"
1825
+ msgstr ""
1826
+
1827
+ #: includes/class-wcj-currency-per-product.php:435
1828
+ msgid "Convert to currency of last product in cart"
1829
+ msgstr ""
1830
+
1831
+ #: includes/class-wcj-currency-per-product.php:436
1832
+ msgid "Convert to currency of first product in cart"
1833
+ msgstr ""
1834
+
1835
+ #: includes/class-wcj-currency-per-product.php:440
1836
+ #: includes/class-wcj-currency-per-product.php:447
1837
+ msgid "Message"
1838
+ msgstr ""
1839
+
1840
+ #: includes/class-wcj-currency-per-product.php:458
1841
+ msgid "Exchange Rates Updates Options"
1842
+ msgstr ""
1843
+
1844
+ #: includes/class-wcj-currency-per-product.php:468
1845
+ #: includes/class-wcj-multicurrency-product-base-price.php:212
1846
+ #: includes/class-wcj-multicurrency.php:383
1847
+ #: includes/class-wcj-payment-gateways-currency.php:271
1848
+ #: includes/class-wcj-price-by-country.php:386
1849
  msgid "Enter Rates Manually"
1850
  msgstr ""
1851
 
1852
+ #: includes/class-wcj-currency-per-product.php:469
1853
+ #: includes/class-wcj-multicurrency-product-base-price.php:213
1854
+ #: includes/class-wcj-multicurrency.php:384
1855
+ #: includes/class-wcj-payment-gateways-currency.php:272
1856
+ #: includes/class-wcj-price-by-country.php:387
1857
  msgid "Automatically via Currency Exchange Rates module"
1858
  msgstr ""
1859
 
1860
+ #: includes/class-wcj-currency-per-product.php:472
1861
+ #: includes/class-wcj-multicurrency-product-base-price.php:216
1862
+ #: includes/class-wcj-multicurrency.php:387
1863
+ #: includes/class-wcj-payment-gateways-currency.php:275
1864
+ #: includes/class-wcj-price-by-country.php:390
1865
  msgid "Visit"
1866
  msgstr ""
1867
 
1868
+ #: includes/class-wcj-currency-per-product.php:472
1869
+ #: includes/class-wcj-multicurrency-product-base-price.php:216
1870
+ #: includes/class-wcj-multicurrency.php:387
1871
+ #: includes/class-wcj-payment-gateways-currency.php:275
1872
+ #: includes/class-wcj-price-by-country.php:390
1873
  msgid "Currency Exchange Rates module"
1874
  msgstr ""
1875
 
1876
+ #: includes/class-wcj-currency-per-product.php:482
1877
+ #: includes/class-wcj-multicurrency-product-base-price.php:226
1878
+ #: includes/class-wcj-multicurrency.php:433
1879
  msgid "Currencies Options"
1880
  msgstr ""
1881
 
1882
+ #: includes/class-wcj-currency-per-product.php:483
1883
+ msgid ""
1884
+ "Exchange rates for currencies won't be used if \"Cart and Checkout Behaviour"
1885
+ "\" is set to one of \"Leave product currency ...\" options."
1886
+ msgstr ""
1887
+
1888
+ #: includes/class-wcj-currency-per-product.php:488
1889
+ #: includes/class-wcj-multicurrency-product-base-price.php:231
1890
+ #: includes/class-wcj-multicurrency.php:439
1891
  msgid "Total Currencies"
1892
  msgstr ""
1893
 
1894
+ #: includes/class-wcj-custom-css.php:30
1895
+ msgid "Custom CSS"
1896
+ msgstr ""
1897
+
1898
+ #: includes/class-wcj-custom-css.php:31
1899
+ msgid "Another custom CSS, if you need one."
1900
+ msgstr ""
1901
+
1902
+ #: includes/class-wcj-custom-css.php:79
1903
+ msgid "Custom CSS - Front end (Customers)"
1904
+ msgstr ""
1905
+
1906
+ #: includes/class-wcj-custom-css.php:86
1907
+ msgid "Custom CSS - Back end (Admin)"
1908
+ msgstr ""
1909
+
1910
  #: includes/class-wcj-emails.php:25
1911
  msgid "Emails"
1912
  msgstr ""
1916
  "Add custom emails. Add another email recipient(s) to all WooCommerce emails."
1917
  msgstr ""
1918
 
1919
+ #: includes/class-wcj-emails.php:158
1920
  msgid "Booster: Email Forwarding Options"
1921
  msgstr ""
1922
 
1923
+ #: includes/class-wcj-emails.php:159
1924
  msgid "Email Forwarding Options"
1925
  msgstr ""
1926
 
1927
+ #: includes/class-wcj-emails.php:161
1928
  msgid ""
1929
  "This section lets you add another email recipient(s) to all WooCommerce "
1930
  "emails. Leave blank to disable."
1931
  msgstr ""
1932
 
1933
+ #: includes/class-wcj-emails.php:165
1934
  msgid "Cc Email"
1935
  msgstr ""
1936
 
1937
+ #: includes/class-wcj-emails.php:166
1938
  msgid "Cc to email, e.g. youremail@yourdomain.com. Leave blank to disable."
1939
  msgstr ""
1940
 
1941
+ #: includes/class-wcj-emails.php:172
1942
  msgid "Bcc Email"
1943
  msgstr ""
1944
 
1945
+ #: includes/class-wcj-emails.php:173
1946
  msgid "Bcc to email, e.g. youremail@yourdomain.com. Leave blank to disable."
1947
  msgstr ""
1948
 
1949
+ #: includes/class-wcj-emails.php:209
1950
  msgid "Custom Emails"
1951
  msgstr ""
1952
 
1953
+ #: includes/class-wcj-emails.php:212
1954
  msgid ""
1955
  "This section lets you set number of custom emails to add. After setting the "
1956
  "number, visit \"WooCommerce > Settings > Emails\" to set each email options."
1957
  msgstr ""
1958
 
1959
+ #: includes/class-wcj-emails.php:215
1960
  msgid "Custom Emails Number"
1961
  msgstr ""
1962
 
1963
+ #: includes/class-wcj-emails.php:226
1964
  msgid "Admin Title Custom Email"
1965
  msgstr ""
1966
 
1967
+ #: includes/class-wcj-emails.php:228 includes/class-wcj-shipping.php:247
1968
  #: includes/emails/class-wc-email-wcj-custom.php:30
1969
+ #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:135
1970
  #: includes/shipping/class-wc-shipping-wcj-custom.php:44
1971
  msgid "Custom"
1972
  msgstr ""
1973
 
1974
+ #: includes/class-wcj-emails.php:238
1975
+ msgid "Product Info in Item Name"
1976
  msgstr ""
1977
 
1978
+ #: includes/class-wcj-emails.php:243
1979
+ msgid "Add Product Info to Item Name"
1980
  msgstr ""
1981
 
1982
+ #: includes/class-wcj-emails.php:250
1983
+ msgid "Info"
1984
+ msgstr ""
1985
+
1986
+ #: includes/class-wcj-emails.php:251
1987
+ #, php-format
1988
+ msgid ""
1989
+ "You can use <a target=\"_blank\" href=\"%s\">Booster's products shortcodes</"
1990
+ "a> here."
1991
+ msgstr ""
1992
+
1993
+ #: includes/class-wcj-empty-cart-button.php:26
1994
+ msgid "Empty Cart Button"
1995
  msgstr ""
1996
 
1997
+ #: includes/class-wcj-empty-cart-button.php:27
1998
  msgid ""
1999
+ "Add (and customize) \"Empty Cart\" button to WooCommerce cart and checkout "
2000
+ "pages."
2001
  msgstr ""
2002
 
2003
  #: includes/class-wcj-empty-cart-button.php:80
2037
  msgstr ""
2038
 
2039
  #: includes/class-wcj-empty-cart-button.php:114
2040
+ #: includes/class-wcj-orders.php:476
2041
  msgid "Do not add"
2042
  msgstr ""
2043
 
2058
  msgstr ""
2059
 
2060
  #: includes/class-wcj-empty-cart-button.php:141
2061
+ #: includes/class-wcj-order-custom-statuses.php:319
2062
  #: includes/class-wcj-product-by-user.php:165
2063
+ #: includes/classes/class-wcj-module.php:487
2064
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:285
2065
  msgid "Are you sure?"
2066
  msgstr ""
2067
 
2068
+ #: includes/class-wcj-eu-vat-number.php:26
2069
+ #: includes/class-wcj-eu-vat-number.php:229
2070
+ #: includes/class-wcj-eu-vat-number.php:471
2071
+ #: includes/class-wcj-eu-vat-number.php:478
2072
  msgid "EU VAT Number"
2073
  msgstr ""
2074
 
2075
+ #: includes/class-wcj-eu-vat-number.php:27
2076
  msgid ""
2077
  "Collect and validate EU VAT numbers on WooCommerce checkout. Automatically "
2078
  "disable VAT for valid numbers. Add all EU countries VAT standard rates to "
2079
  "WooCommerce."
2080
  msgstr ""
2081
 
2082
+ #: includes/class-wcj-eu-vat-number.php:33
2083
  msgid "EU Countries VAT Rates"
2084
  msgstr ""
2085
 
2086
+ #: includes/class-wcj-eu-vat-number.php:34
2087
  msgid "Add all EU countries VAT standard rates to WooCommerce."
2088
  msgstr ""
2089
 
2090
+ #: includes/class-wcj-eu-vat-number.php:140
2091
+ msgid "Customer IP"
2092
+ msgstr ""
2093
+
2094
+ #: includes/class-wcj-eu-vat-number.php:144
2095
+ msgid "Country by IP"
2096
+ msgstr ""
2097
+
2098
+ #: includes/class-wcj-eu-vat-number.php:148
2099
+ msgid "Customer EU VAT Number"
2100
+ msgstr ""
2101
+
2102
+ #: includes/class-wcj-eu-vat-number.php:152
2103
+ msgid "Taxes"
2104
+ msgstr ""
2105
+
2106
+ #: includes/class-wcj-eu-vat-number.php:299
2107
+ #: includes/class-wcj-eu-vat-number.php:598
2108
+ msgid "Validating VAT. Please wait..."
2109
+ msgstr ""
2110
+
2111
+ #: includes/class-wcj-eu-vat-number.php:300
2112
+ #: includes/class-wcj-eu-vat-number.php:605
2113
+ msgid "VAT is valid."
2114
+ msgstr ""
2115
+
2116
  #: includes/class-wcj-eu-vat-number.php:301
2117
+ #: includes/class-wcj-eu-vat-number.php:612
2118
+ msgid "VAT is not valid."
2119
+ msgstr ""
2120
+
2121
+ #: includes/class-wcj-eu-vat-number.php:302
2122
+ #: includes/class-wcj-eu-vat-number.php:620
2123
+ msgid "Validation failed. Please try again."
2124
+ msgstr ""
2125
+
2126
+ #: includes/class-wcj-eu-vat-number.php:406
2127
+ #: includes/class-wcj-eu-vat-number.php:531
2128
  msgid "<strong>EU VAT Number</strong> is not valid."
2129
  msgstr ""
2130
 
2131
+ #: includes/class-wcj-eu-vat-number.php:469
2132
  msgid "Field Label"
2133
  msgstr ""
2134
 
2135
+ #: includes/class-wcj-eu-vat-number.php:476
2136
+ #: includes/input-fields/class-wcj-product-input-fields-abstract.php:237
2137
  msgid "Placeholder"
2138
  msgstr ""
2139
 
2140
+ #: includes/class-wcj-eu-vat-number.php:483
2141
+ #: includes/class-wcj-product-by-user.php:202
2142
+ #: includes/admin/class-wc-settings-jetpack.php:496
2143
+ #: includes/admin/class-wc-settings-jetpack.php:503
2144
+ #: includes/admin/class-wcj-tools.php:75
2145
+ #: includes/export/class-wcj-fields-helper.php:295
2146
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:76
2147
+ #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:151
2148
+ #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:266
2149
+ msgid "Description"
2150
+ msgstr ""
2151
+
2152
+ #: includes/class-wcj-eu-vat-number.php:503
2153
+ #: includes/class-wcj-order-custom-statuses.php:355
2154
  msgid "Clear"
2155
  msgstr ""
2156
 
2157
+ #: includes/class-wcj-eu-vat-number.php:510
2158
  msgid "Class"
2159
  msgstr ""
2160
 
2161
+ #: includes/class-wcj-eu-vat-number.php:521
2162
  msgid "Validate"
2163
  msgstr ""
2164
 
2165
+ #: includes/class-wcj-eu-vat-number.php:529
2166
  msgid "Message on not valid"
2167
  msgstr ""
2168
 
2169
+ #: includes/class-wcj-eu-vat-number.php:536
2170
  msgid "Exempt VAT for Valid Numbers"
2171
  msgstr ""
2172
 
2173
+ #: includes/class-wcj-eu-vat-number.php:543
2174
  msgid "Preserve VAT in Base Country"
2175
  msgstr ""
2176
 
2177
+ #: includes/class-wcj-eu-vat-number.php:561
2178
  msgid "Check for IP Location Country"
2179
  msgstr ""
2180
 
2181
+ #: includes/class-wcj-eu-vat-number.php:579
2182
  msgid "Display"
2183
  msgstr ""
2184
 
2185
+ #: includes/class-wcj-eu-vat-number.php:584
2186
  msgid "After order table"
2187
  msgstr ""
2188
 
2189
+ #: includes/class-wcj-eu-vat-number.php:585
2190
  msgid "In billing address"
2191
  msgstr ""
2192
 
2193
+ #: includes/class-wcj-eu-vat-number.php:589
2194
+ msgid "Add Progress Messages"
2195
+ msgstr ""
2196
+
2197
+ #: includes/class-wcj-eu-vat-number.php:596
2198
+ msgid "Progress Message: Validating"
2199
+ msgstr ""
2200
+
2201
+ #: includes/class-wcj-eu-vat-number.php:603
2202
+ msgid "Progress Message: Valid"
2203
+ msgstr ""
2204
+
2205
+ #: includes/class-wcj-eu-vat-number.php:610
2206
+ msgid "Progress Message: Not Valid"
2207
+ msgstr ""
2208
+
2209
+ #: includes/class-wcj-eu-vat-number.php:617
2210
+ msgid "Progress Message: Validation Failed"
2211
+ msgstr ""
2212
+
2213
+ #: includes/class-wcj-eu-vat-number.php:618
2214
+ msgid "Message on VAT validation server timeout etc."
2215
+ msgstr ""
2216
+
2217
+ #: includes/class-wcj-eu-vat-number.php:625
2218
+ msgid "Add EU VAT Number Summary Metabox to Order Edit Page"
2219
+ msgstr ""
2220
+
2221
+ #: includes/class-wcj-export-import.php:28
2222
+ #: includes/admin/class-wc-settings-jetpack.php:447
2223
+ msgid "Export"
2224
+ msgstr ""
2225
+
2226
  #: includes/class-wcj-export-import.php:29
2227
  msgid "WooCommerce export tools."
2228
  msgstr ""
2271
  msgid "Export Products."
2272
  msgstr ""
2273
 
2274
+ #: includes/class-wcj-export-import.php:195
2275
+ #: includes/class-wcj-export-import.php:201
2276
  msgid "Filter by Billing Country"
2277
  msgstr ""
2278
 
2279
+ #: includes/class-wcj-export-import.php:196
2280
  msgid "Filter by Product Title"
2281
  msgstr ""
2282
 
2283
+ #: includes/class-wcj-export-import.php:215 includes/class-wcj-orders.php:382
2284
  msgid "Filter"
2285
  msgstr ""
2286
 
2287
+ #: includes/class-wcj-export-import.php:234
2288
  msgid "Download CSV"
2289
  msgstr ""
2290
 
2291
+ #: includes/class-wcj-export-import.php:236
2292
  msgid "Download XML"
2293
  msgstr ""
2294
 
2295
+ #: includes/class-wcj-export-import.php:237
2296
  msgid "Filter by All Fields"
2297
  msgstr ""
2298
 
2299
+ #: includes/class-wcj-export-import.php:304
2300
  msgid "Export Options"
2301
  msgstr ""
2302
 
2303
+ #: includes/class-wcj-export-import.php:309
2304
  msgid "CSV Separator"
2305
  msgstr ""
2306
 
2307
+ #: includes/class-wcj-export-import.php:315
2308
  msgid "UTF-8 BOM"
2309
  msgstr ""
2310
 
2311
+ #: includes/class-wcj-export-import.php:317
2312
  msgid "Add UTF-8 BOM sequence"
2313
  msgstr ""
2314
 
2315
+ #: includes/class-wcj-export-import.php:327
2316
  msgid "Export Orders Options"
2317
  msgstr ""
2318
 
2319
+ #: includes/class-wcj-export-import.php:332
2320
  msgid "Export Orders Fields"
2321
  msgstr ""
2322
 
2323
+ #: includes/class-wcj-export-import.php:333
2324
+ #: includes/class-wcj-export-import.php:401
2325
+ #: includes/class-wcj-export-import.php:471
2326
+ #: includes/class-wcj-export-import.php:550
2327
+ #: includes/class-wcj-export-import.php:568
2328
  msgid "Hold \"Control\" key to select multiple fields."
2329
  msgstr ""
2330
 
2331
+ #: includes/class-wcj-export-import.php:341
2332
  msgid "Additional Export Orders Fields"
2333
  msgstr ""
2334
 
2335
+ #: includes/class-wcj-export-import.php:364
2336
+ #: includes/class-wcj-export-import.php:432
2337
+ #: includes/class-wcj-export-import.php:513
2338
  #: includes/class-wcj-product-by-user.php:156
2339
+ #: includes/class-wcj-product-tabs.php:423
2340
+ #: includes/class-wcj-product-tabs.php:544
2341
+ #: includes/class-wcj-purchase-data.php:336
2342
+ #: includes/class-wcj-related-products.php:303
2343
  #: includes/gateways/class-wc-gateway-wcj-custom.php:68
2344
+ #: includes/input-fields/class-wcj-product-input-fields-abstract.php:230
2345
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:150
2346
  #: includes/shipping/class-wc-shipping-wcj-custom.php:82
2347
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:259
2348
  msgid "Title"
2349
  msgstr ""
2350
 
2351
+ #: includes/class-wcj-export-import.php:370
2352
+ #: includes/class-wcj-export-import.php:438
2353
+ #: includes/class-wcj-export-import.php:519
2354
+ #: includes/class-wcj-global-discount.php:271
2355
+ #: includes/class-wcj-product-addons.php:467
2356
+ #: includes/class-wcj-product-addons.php:584
2357
+ #: includes/class-wcj-purchase-data.php:343
2358
+ #: includes/class-wcj-shipping.php:308
2359
+ #: includes/export/class-wcj-fields-helper.php:291
2360
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:44
2361
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:157
2362
  #: includes/shipping/class-wc-shipping-wcj-custom.php:89
2363
  msgid "Type"
2364
  msgstr ""
2365
 
2366
+ #: includes/class-wcj-export-import.php:376
2367
+ #: includes/class-wcj-export-import.php:444
2368
  msgid "Order Shortcode"
2369
  msgstr ""
2370
 
2371
+ #: includes/class-wcj-export-import.php:380
2372
+ #: includes/class-wcj-export-import.php:450
2373
+ #: includes/class-wcj-export-import.php:529
2374
+ #: includes/class-wcj-global-discount.php:281
2375
+ #: includes/class-wcj-orders.php:451
2376
  msgid "Value"
2377
  msgstr ""
2378
 
2379
+ #: includes/class-wcj-export-import.php:381
2380
  msgid ""
2381
  "If field's \"Type\" is set to \"Meta\", enter order meta key to retrieve "
2382
  "(can be custom field name)."
2383
  msgstr ""
2384
 
2385
+ #: includes/class-wcj-export-import.php:382
2386
  msgid "If it's set to \"Shortcode\", use Booster's Orders shortcodes here."
2387
  msgstr ""
2388
 
2389
+ #: includes/class-wcj-export-import.php:395
2390
  msgid "Export Orders Items Options"
2391
  msgstr ""
2392
 
2393
+ #: includes/class-wcj-export-import.php:400
2394
  msgid "Export Orders Items Fields"
2395
  msgstr ""
2396
 
2397
+ #: includes/class-wcj-export-import.php:409
2398
  msgid "Additional Export Orders Items Fields"
2399
  msgstr ""
2400
 
2401
+ #: includes/class-wcj-export-import.php:446
2402
+ #: includes/class-wcj-export-import.php:525
2403
  msgid "Product Shortcode"
2404
  msgstr ""
2405
 
2406
+ #: includes/class-wcj-export-import.php:451
2407
  msgid ""
2408
  "If field's \"Type\" is set to \"Meta\", enter order/product meta key to "
2409
  "retrieve (can be custom field name)."
2410
  msgstr ""
2411
 
2412
+ #: includes/class-wcj-export-import.php:452
2413
  msgid ""
2414
  "If it's set to \"Shortcode\", use Booster's Orders/Products shortcodes here."
2415
  msgstr ""
2416
 
2417
+ #: includes/class-wcj-export-import.php:465
2418
  msgid "Export Products Options"
2419
  msgstr ""
2420
 
2421
+ #: includes/class-wcj-export-import.php:470
2422
  msgid "Export Products Fields"
2423
  msgstr ""
2424
 
2425
+ #: includes/class-wcj-export-import.php:479
2426
+ #: includes/class-wcj-free-price.php:180
2427
+ msgid "Variable Products"
2428
+ msgstr ""
2429
+
2430
+ #: includes/class-wcj-export-import.php:484
2431
+ msgid "Export variable (main) product only"
2432
+ msgstr ""
2433
+
2434
+ #: includes/class-wcj-export-import.php:485
2435
+ msgid "Export variation products only"
2436
+ msgstr ""
2437
+
2438
+ #: includes/class-wcj-export-import.php:486
2439
+ msgid "Export variable (main) and variation products"
2440
+ msgstr ""
2441
+
2442
+ #: includes/class-wcj-export-import.php:490
2443
  msgid "Additional Export Products Fields"
2444
  msgstr ""
2445
 
2446
+ #: includes/class-wcj-export-import.php:530
2447
  msgid ""
2448
  "If field's \"Type\" is set to \"Meta\", enter product meta key to retrieve "
2449
  "(can be custom field name)."
2450
  msgstr ""
2451
 
2452
+ #: includes/class-wcj-export-import.php:531
2453
  msgid "If it's set to \"Shortcode\", use Booster's Products shortcodes here."
2454
  msgstr ""
2455
 
2456
+ #: includes/class-wcj-export-import.php:544
2457
  msgid "Export Customers Options"
2458
  msgstr ""
2459
 
2460
+ #: includes/class-wcj-export-import.php:549
2461
  msgid "Export Customers Fields"
2462
  msgstr ""
2463
 
2464
+ #: includes/class-wcj-export-import.php:562
2465
  msgid "Export Customers from Orders Options"
2466
  msgstr ""
2467
 
2468
+ #: includes/class-wcj-export-import.php:567
2469
  msgid "Export Customers from Orders Fields"
2470
  msgstr ""
2471
 
2477
  msgid "WooCommerce free price labels."
2478
  msgstr ""
2479
 
2480
+ #: includes/class-wcj-free-price.php:135 includes/class-wcj-free-price.php:148
2481
+ #: includes/class-wcj-free-price.php:158 includes/class-wcj-free-price.php:168
2482
+ #: includes/class-wcj-free-price.php:193
2483
  msgid "Free!"
2484
  msgstr ""
2485
 
2486
+ #: includes/class-wcj-free-price.php:179
 
 
 
 
2487
  msgid "Simple and Custom Products"
2488
  msgstr ""
2489
 
2490
+ #: includes/class-wcj-free-price.php:181
 
 
 
 
2491
  msgid "Grouped Products"
2492
  msgstr ""
2493
 
2494
+ #: includes/class-wcj-free-price.php:182
2495
+ #: includes/class-wcj-product-add-to-cart.php:609
2496
  msgid "External Products"
2497
  msgstr ""
2498
 
2499
+ #: includes/class-wcj-free-price.php:185
2500
  msgid "Single Product Page"
2501
  msgstr ""
2502
 
2503
+ #: includes/class-wcj-free-price.php:186
2504
+ #: includes/class-wcj-related-products.php:40
2505
+ #: includes/class-wcj-related-products.php:146
2506
  msgid "Related Products"
2507
  msgstr ""
2508
 
2509
+ #: includes/class-wcj-free-price.php:187
2510
  msgid "Homepage"
2511
  msgstr ""
2512
 
2513
+ #: includes/class-wcj-free-price.php:188
2514
  msgid "Pages (e.g. Shortcodes)"
2515
  msgstr ""
2516
 
2517
+ #: includes/class-wcj-free-price.php:189
2518
  msgid "Archives (Product Categories)"
2519
  msgstr ""
2520
 
2521
+ #: includes/class-wcj-free-price.php:197
2522
+ msgid "Labels can contain shortcodes."
2523
+ msgstr ""
2524
+
2525
+ #: includes/class-wcj-free-price.php:204
2526
  msgid "Variations"
2527
  msgstr ""
2528
 
2529
  #: includes/class-wcj-general.php:25 includes/class-wcj-pdf-invoicing.php:26
2530
+ #: includes/class-wcj-related-products.php:270
2531
  msgid "General"
2532
  msgstr ""
2533
 
2538
  msgstr ""
2539
 
2540
  #: includes/class-wcj-general.php:32
2541
+ msgid "Products Attributes"
2542
  msgstr ""
2543
 
2544
  #: includes/class-wcj-general.php:33
2557
  msgid "Manage Custom Roles."
2558
  msgstr ""
2559
 
2560
+ #: includes/class-wcj-general.php:124
2561
  msgid "Both fields are required!"
2562
  msgstr ""
2563
 
2564
+ #: includes/class-wcj-general.php:127
2565
  msgid "Role ID must not be numbers only!"
2566
  msgstr ""
2567
 
2568
+ #: includes/class-wcj-general.php:131
2569
  msgid "Role successfully added!"
2570
  msgstr ""
2571
 
2572
+ #: includes/class-wcj-general.php:133
2573
  msgid "Role already exists!"
2574
  msgstr ""
2575
 
2576
+ #: includes/class-wcj-general.php:141
2577
+ #, php-format
2578
  msgid "Role %s successfully deleted!"
2579
  msgstr ""
2580
 
2581
+ #: includes/class-wcj-general.php:147 includes/class-wcj-general.php:160
2582
+ #: includes/class-wcj-sku.php:252
2583
+ #: includes/reports/wcj-class-reports-sales.php:193
2584
  msgid "ID"
2585
  msgstr ""
2586
 
2587
+ #: includes/class-wcj-general.php:147 includes/class-wcj-general.php:161
2588
+ #: includes/export/class-wcj-fields-helper.php:284
2589
  #: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:72
2590
  #: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:106
2591
  msgid "Name"
2592
  msgstr ""
2593
 
2594
+ #: includes/class-wcj-general.php:147
2595
+ #: includes/class-wcj-order-custom-statuses.php:297
2596
  #: includes/class-wcj-product-by-user.php:156
2597
  msgid "Actions"
2598
  msgstr ""
2599
 
2600
+ #: includes/class-wcj-general.php:153
2601
+ #: includes/class-wcj-order-custom-statuses.php:319
 
2602
  #: includes/class-wcj-product-by-user.php:165
2603
  #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-display.php:151
2604
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:285
2605
  msgid "Delete"
2606
  msgstr ""
2607
 
2608
+ #: includes/class-wcj-general.php:156
2609
  msgid "Existing Roles"
2610
  msgstr ""
2611
 
2612
+ #: includes/class-wcj-general.php:162
2613
  msgid "Add New Role"
2614
  msgstr ""
2615
 
2616
+ #: includes/class-wcj-general.php:181
2617
  msgid "PayPal Email"
2618
  msgstr ""
2619
 
2620
+ #: includes/class-wcj-general.php:246 includes/class-wcj-general.php:288
2621
+ #: includes/class-wcj-product-bulk-price-converter.php:150
2622
+ #: includes/class-wcj-sku.php:253
2623
+ #: includes/reports/wcj-class-reports-sales.php:194
2624
+ #: includes/reports/wcj-class-reports-stock.php:320
2625
  msgid "Product"
2626
  msgstr ""
2627
 
2628
+ #: includes/class-wcj-general.php:247 includes/class-wcj-general.php:289
2629
+ #: includes/reports/wcj-class-reports-stock.php:321
2630
  msgid "Category"
2631
  msgstr ""
2632
 
2633
+ #: includes/class-wcj-general.php:309
2634
  msgid "Total Products:"
2635
  msgstr ""
2636
 
2637
+ #: includes/class-wcj-general.php:338
2638
  msgid "Shortcodes Options"
2639
  msgstr ""
2640
 
2641
+ #: includes/class-wcj-general.php:343
2642
  msgid "Enable All Shortcodes in WordPress Text Widgets"
2643
  msgstr ""
2644
 
2645
+ #: includes/class-wcj-general.php:344
2646
  msgid ""
2647
  "This will enable all (including non Booster's) shortcodes in WordPress text "
2648
  "widgets."
2649
  msgstr ""
2650
 
2651
+ #: includes/class-wcj-general.php:351
2652
  msgid "Disable Booster's Shortcodes"
2653
  msgstr ""
2654
 
2655
+ #: includes/class-wcj-general.php:352
2656
  msgid "Disable all Booster's shortcodes (for memory saving)."
2657
  msgstr ""
2658
 
2659
+ #: includes/class-wcj-general.php:353 includes/class-wcj-general.php:392
2660
+ #: includes/class-wcj-general.php:406 includes/class-wcj-general.php:413
2661
+ #: includes/class-wcj-general.php:420 includes/class-wcj-general.php:427
2662
+ #: includes/class-wcj-product-add-to-cart.php:327
2663
+ #: includes/class-wcj-product-add-to-cart.php:510
2664
  msgid "Disable"
2665
  msgstr ""
2666
 
2667
+ #: includes/class-wcj-general.php:363 includes/class-wcj-general.php:368
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2668
  msgid "Product Revisions"
2669
  msgstr ""
2670
 
2671
+ #: includes/class-wcj-general.php:379
2672
  msgid "Advanced Options"
2673
  msgstr ""
2674
 
2675
+ #: includes/class-wcj-general.php:384
2676
  msgid "Recalculate Cart Totals on Every Page Load"
2677
  msgstr ""
2678
 
2679
+ #: includes/class-wcj-general.php:391
2680
  msgid "Disable Loading Datepicker/Weekpicker CSS"
2681
  msgstr ""
2682
 
2683
+ #: includes/class-wcj-general.php:398
2684
  msgid "Datepicker/Weekpicker CSS"
2685
  msgstr ""
2686
 
2687
+ #: includes/class-wcj-general.php:405
2688
  msgid "Disable Loading Datepicker/Weekpicker JavaScript"
2689
  msgstr ""
2690
 
2691
+ #: includes/class-wcj-general.php:412
2692
  msgid "Disable Loading Timepicker CSS"
2693
  msgstr ""
2694
 
2695
+ #: includes/class-wcj-general.php:419
2696
  msgid "Disable Loading Timepicker JavaScript"
2697
  msgstr ""
2698
 
2699
+ #: includes/class-wcj-general.php:426
2700
  msgid "Disable Saving PDFs in PHP directory for temporary files"
2701
  msgstr ""
2702
 
2703
+ #: includes/class-wcj-general.php:437
2704
  msgid "PayPal Email per Product Options"
2705
  msgstr ""
2706
 
2707
+ #: includes/class-wcj-general.php:442
2708
  msgid "PayPal Email per Product"
2709
  msgstr ""
2710
 
2711
+ #: includes/class-wcj-general.php:444
2712
  msgid "This will add new meta box to each product's edit page."
2713
  msgstr ""
2714
 
2715
+ #: includes/class-wcj-general.php:454
2716
  msgid "Session Expiration Options"
2717
  msgstr ""
2718
 
2719
+ #: includes/class-wcj-general.php:459 includes/class-wcj-general.php:474
2720
  msgid "Session Expiration"
2721
  msgstr ""
2722
 
2723
+ #: includes/class-wcj-general.php:466
2724
  msgid "Session Expiring"
2725
  msgstr ""
2726
 
2727
+ #: includes/class-wcj-general.php:467
2728
  msgid "In seconds. Default: 47 hours (60 * 60 * 47)"
2729
  msgstr ""
2730
 
2731
+ #: includes/class-wcj-general.php:475
2732
  msgid "In seconds. Default: 48 hours (60 * 60 * 48)"
2733
  msgstr ""
2734
 
2735
+ #: includes/class-wcj-general.php:486
2736
+ msgid "URL Coupons Options"
2737
+ msgstr ""
2738
+
2739
+ #: includes/class-wcj-general.php:487
2740
+ #, php-format
2741
+ msgid ""
2742
+ "Additionally you can hide standard coupon field on cart page in Booster's <a "
2743
+ "href=\"%s\">Cart Customization</a> module."
2744
+ msgstr ""
2745
+
2746
+ #: includes/class-wcj-general.php:493
2747
+ msgid "URL Coupons"
2748
+ msgstr ""
2749
+
2750
+ #: includes/class-wcj-general.php:495
2751
+ msgid ""
2752
+ "When enabled, your users can apply shop's standard coupons, by visiting URL. "
2753
+ "E.g.: http://yoursite.com/?wcj_apply_coupon=couponcode."
2754
+ msgstr ""
2755
+
2756
+ #: includes/class-wcj-general.php:501
2757
+ msgid "URL Coupons Key"
2758
+ msgstr ""
2759
+
2760
+ #: includes/class-wcj-general.php:502
2761
+ msgid ""
2762
+ "URL key. If you change this, make sure it's unique and is not used anywhere "
2763
+ "on your site (e.g. by another plugin)."
2764
+ msgstr ""
2765
+
2766
  #: includes/class-wcj-global-discount.php:28
2767
  msgid "Global Discount"
2768
  msgstr ""
2771
  msgid "Add global discount to all WooCommerce products."
2772
  msgstr ""
2773
 
2774
+ #: includes/class-wcj-global-discount.php:241
2775
  msgid "Total Groups"
2776
  msgstr ""
2777
 
2778
+ #: includes/class-wcj-global-discount.php:245
2779
+ #: includes/class-wcj-products-xml.php:306
2780
  #: includes/shipping/class-wc-shipping-wcj-custom.php:112
2781
  msgid "Press Save changes after you change this number."
2782
  msgstr ""
2783
 
2784
+ #: includes/class-wcj-global-discount.php:259
2785
  msgid "Discount Group"
2786
  msgstr ""
2787
 
2788
+ #: includes/class-wcj-global-discount.php:276
2789
+ #: includes/class-wcj-payment-gateways-fees.php:146
2790
+ #: includes/class-wcj-purchase-data.php:348
2791
+ #: includes/class-wcj-wholesale-price.php:251
2792
+ #: includes/class-wcj-wholesale-price.php:405
2793
  msgid "Percent"
2794
  msgstr ""
2795
 
2796
+ #: includes/class-wcj-global-discount.php:277
2797
+ #: includes/class-wcj-payment-gateways-fees.php:145
2798
+ #: includes/class-wcj-purchase-data.php:347
2799
+ #: includes/class-wcj-wholesale-price.php:252
2800
+ #: includes/class-wcj-wholesale-price.php:406
2801
  msgid "Fixed"
2802
  msgstr ""
2803
 
2804
+ #: includes/class-wcj-global-discount.php:282
2805
  msgid "Must be negative number."
2806
  msgstr ""
2807
 
2808
+ #: includes/class-wcj-global-discount.php:289
2809
  msgid "Product Scope"
2810
  msgstr ""
2811
 
2812
+ #: includes/class-wcj-global-discount.php:294
2813
+ #: includes/class-wcj-product-add-to-cart.php:473
2814
+ #: includes/class-wcj-products-xml.php:478
2815
  msgid "All products"
2816
  msgstr ""
2817
 
2818
+ #: includes/class-wcj-global-discount.php:295
2819
  msgid "Only products that are already on sale"
2820
  msgstr ""
2821
 
2822
+ #: includes/class-wcj-global-discount.php:296
2823
+ #: includes/class-wcj-products-xml.php:480
2824
+ msgid "Only products that are not on sale"
2825
+ msgstr ""
2826
+
2827
+ #: includes/class-wcj-global-discount.php:300
2828
  msgid "Include Product Categories"
2829
  msgstr ""
2830
 
2831
+ #: includes/class-wcj-global-discount.php:301
2832
  msgid ""
2833
  "Set this field to apply discount to selected categories only. Leave blank to "
2834
  "apply to all categories."
2846
  #: includes/class-wcj-left-to-free-shipping.php:66
2847
  #: includes/class-wcj-left-to-free-shipping.php:76
2848
  #: includes/class-wcj-left-to-free-shipping.php:86
2849
+ #: includes/class-wcj-left-to-free-shipping.php:127
2850
+ #: includes/class-wcj-left-to-free-shipping.php:162
2851
+ #: includes/class-wcj-left-to-free-shipping.php:201
2852
+ #: includes/functions/wcj-functions.php:377
2853
  #: includes/widgets/class-wcj-widget-left-to-free-shipping.php:53
2854
+ #, php-format
2855
  msgid "%left_to_free% left to free shipping"
2856
  msgstr ""
2857
 
2858
+ #: includes/class-wcj-left-to-free-shipping.php:108
2859
  msgid "Left to Free Shipping Info Options"
2860
  msgstr ""
2861
 
2862
+ #: includes/class-wcj-left-to-free-shipping.php:110
2863
  msgid ""
2864
  "This section lets you enable info on cart, mini cart and checkout pages."
2865
  msgstr ""
2866
 
2867
+ #: includes/class-wcj-left-to-free-shipping.php:111
2868
  msgid ""
2869
  "You can also use <em>Booster - Left to Free Shipping</em> widget, <em>"
2870
  "[wcj_get_left_to_free_shipping content=\"\"]</em> shortcode or "
2871
  "<em>wcj_get_left_to_free_shipping( $content );</em> function."
2872
  msgstr ""
2873
 
2874
+ #: includes/class-wcj-left-to-free-shipping.php:112
2875
  msgid ""
2876
  "In content you can use: <em>%left_to_free%</em> and <em>"
2877
  "%free_shipping_min_amount%</em> shortcodes."
2878
  msgstr ""
2879
 
2880
+ #: includes/class-wcj-left-to-free-shipping.php:116
2881
  msgid "Info on Cart"
2882
  msgstr ""
2883
 
2884
+ #: includes/class-wcj-left-to-free-shipping.php:125
2885
+ #: includes/class-wcj-left-to-free-shipping.php:160
2886
+ #: includes/class-wcj-left-to-free-shipping.php:199
2887
+ #: includes/class-wcj-left-to-free-shipping.php:234
2888
+ msgid "You can use HTML and/or shortcodes (e.g. [wcj_wpml]) here."
2889
+ msgstr ""
2890
+
2891
+ #: includes/class-wcj-left-to-free-shipping.php:142
2892
+ #: includes/class-wcj-left-to-free-shipping.php:181
2893
+ #: includes/class-wcj-left-to-free-shipping.php:226
2894
  msgid "Position Order (Priority)"
2895
  msgstr ""
2896
 
2897
+ #: includes/class-wcj-left-to-free-shipping.php:149
2898
  msgid "Info on Mini Cart"
2899
  msgstr ""
2900
 
2901
+ #: includes/class-wcj-left-to-free-shipping.php:173
2902
  #: includes/class-wcj-mini-cart.php:119
2903
  msgid "Before mini cart"
2904
  msgstr ""
2905
 
2906
+ #: includes/class-wcj-left-to-free-shipping.php:174
2907
  #: includes/class-wcj-mini-cart.php:120
2908
  msgid "Before buttons"
2909
  msgstr ""
2910
 
2911
+ #: includes/class-wcj-left-to-free-shipping.php:175
2912
  #: includes/class-wcj-mini-cart.php:121
2913
  msgid "After mini cart"
2914
  msgstr ""
2915
 
2916
+ #: includes/class-wcj-left-to-free-shipping.php:188
2917
  msgid "Info on Checkout"
2918
  msgstr ""
2919
 
2920
+ #: includes/class-wcj-left-to-free-shipping.php:233
2921
  msgid "Message on Free Shipping Reached"
2922
  msgstr ""
2923
 
2924
+ #: includes/class-wcj-left-to-free-shipping.php:235
2925
+ msgid "Set empty to disable."
2926
  msgstr ""
2927
 
2928
+ #: includes/class-wcj-left-to-free-shipping.php:237
2929
+ #: includes/functions/wcj-functions.php:417
2930
  msgid "You have Free delivery"
2931
  msgstr ""
2932
 
2933
  #: includes/class-wcj-mini-cart.php:26
2934
+ msgid "Mini Cart Custom Info"
2935
  msgstr ""
2936
 
2937
  #: includes/class-wcj-mini-cart.php:27
2938
+ msgid "Add custom info to WooCommerce mini cart widget."
2939
  msgstr ""
2940
 
2941
  #: includes/class-wcj-mini-cart.php:74
2950
  msgid "Set WooCommerce \"Place order\" button label."
2951
  msgstr ""
2952
 
2953
+ #: includes/class-wcj-more-button-labels.php:54
2954
  msgid "Place order (Order now) Button"
2955
  msgstr ""
2956
 
2957
+ #: includes/class-wcj-more-button-labels.php:61
2958
+ msgid "Leave blank for WooCommerce default."
2959
  msgstr ""
2960
 
2961
+ #: includes/class-wcj-more-button-labels.php:62
2962
  msgid "Button on the checkout page."
2963
  msgstr ""
2964
 
2981
  #: includes/class-wcj-multicurrency.php:76
2982
  #: includes/class-wcj-price-by-user-role.php:163
2983
  #: includes/class-wcj-product-by-user.php:205
2984
+ #: includes/export/class-wcj-fields-helper.php:288
2985
+ #: includes/price-by-country/class-wcj-price-by-country-local.php:128
2986
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:154
2987
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:298
2988
  msgid "Regular Price"
2991
  #: includes/class-wcj-multicurrency.php:85
2992
  #: includes/class-wcj-price-by-user-role.php:172
2993
  #: includes/class-wcj-product-by-user.php:206
2994
+ #: includes/export/class-wcj-fields-helper.php:289
2995
+ #: includes/price-by-country/class-wcj-price-by-country-local.php:135
2996
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:155
2997
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:306
2998
  msgid "Sale Price"
2999
  msgstr ""
3000
 
3001
+ #: includes/class-wcj-multicurrency.php:359
3002
  msgid ""
3003
  "After setting currencies in the Currencies Options below, use <em>Booster - "
3004
  "Multicurrency Switcher</em> widget, or <em>"
3007
  "( '[wcj_currency_select_drop_down_list]' );</em>"
3008
  msgstr ""
3009
 
3010
+ #: includes/class-wcj-multicurrency.php:393
3011
  msgid "Multicurrency on per Product Basis"
3012
  msgstr ""
3013
 
3014
+ #: includes/class-wcj-multicurrency.php:395
3015
  msgid "This will add meta boxes in product edit."
3016
  msgstr ""
3017
 
3018
+ #: includes/class-wcj-multicurrency.php:401
3019
+ #: includes/class-wcj-price-by-country.php:196
3020
  msgid "Revert Currency to Default on Checkout"
3021
  msgstr ""
3022
 
3023
+ #: includes/class-wcj-multicurrency.php:408
3024
+ #: includes/class-wcj-payment-gateways-fees.php:184
3025
  msgid "Rounding"
3026
  msgstr ""
3027
 
3028
+ #: includes/class-wcj-multicurrency.php:409
3029
  msgid "If using exchange rates, choose rounding here."
3030
  msgstr ""
3031
 
3032
+ #: includes/class-wcj-multicurrency.php:414
3033
+ #: includes/class-wcj-price-by-country.php:210
3034
  msgid "No rounding"
3035
  msgstr ""
3036
 
3037
+ #: includes/class-wcj-multicurrency.php:415
3038
+ #: includes/class-wcj-price-by-country.php:211
3039
  msgid "Round"
3040
  msgstr ""
3041
 
3042
+ #: includes/class-wcj-multicurrency.php:416
3043
+ #: includes/class-wcj-price-by-country.php:213
3044
  msgid "Round up"
3045
  msgstr ""
3046
 
3047
+ #: includes/class-wcj-multicurrency.php:417
3048
+ #: includes/class-wcj-price-by-country.php:212
3049
  msgid "Round down"
3050
  msgstr ""
3051
 
3052
+ #: includes/class-wcj-multicurrency.php:421
3053
+ #: includes/class-wcj-payment-gateways-fees.php:191
3054
  msgid "Rounding Precision"
3055
  msgstr ""
3056
 
3057
+ #: includes/class-wcj-multicurrency.php:422
3058
  msgid "If rounding enabled, set precision here."
3059
  msgstr ""
3060
 
3061
+ #: includes/class-wcj-multicurrency.php:435
3062
  msgid ""
3063
  "One currency probably should be set to current (original) shop currency with "
3064
  "an exchange rate of 1."
3065
  msgstr ""
3066
 
3067
+ #: includes/class-wcj-multicurrency.php:490
3068
  msgid "Role Defaults"
3069
  msgstr ""
3070
 
3071
+ #: includes/class-wcj-multicurrency.php:492
3072
+ #: includes/class-wcj-order-min-amount.php:249
3073
+ #: includes/class-wcj-price-by-user-role.php:368
3074
+ #, php-format
3075
  msgid ""
3076
  "Custom roles can be added via \"Add/Manage Custom Roles\" tool in Booster's "
3077
  "<a href=\"%s\">General</a> module."
3078
  msgstr ""
3079
 
3080
+ #: includes/class-wcj-multicurrency.php:497
3081
  msgid "Roles"
3082
  msgstr ""
3083
 
3084
+ #: includes/class-wcj-multicurrency.php:498
3085
+ #: includes/class-wcj-wholesale-price.php:478
3086
  msgid "Save settings after you change this option. Leave blank to disable."
3087
  msgstr ""
3088
 
3089
+ #: includes/class-wcj-multicurrency.php:521
3090
  msgid "No default currency"
3091
  msgstr ""
3092
 
3102
  msgid "Remove Old Slugs"
3103
  msgstr ""
3104
 
3105
+ #: includes/class-wcj-old-slugs.php:33 includes/class-wcj-old-slugs.php:93
3106
  msgid "Tool removes old slugs/permalinks from database."
3107
  msgstr ""
3108
 
3109
+ #: includes/class-wcj-old-slugs.php:92
3110
  msgid "Booster - Remove Old Product Slugs"
3111
  msgstr ""
3112
 
3113
+ #: includes/class-wcj-old-slugs.php:98
3114
  msgid "Old products slugs found:"
3115
  msgstr ""
3116
 
3117
+ #: includes/class-wcj-old-slugs.php:106
3118
  msgid "None-products slugs found:"
3119
  msgstr ""
3120
 
3121
+ #: includes/class-wcj-old-slugs.php:113
3122
  msgid "No old slugs found."
3123
  msgstr ""
3124
 
3131
  msgstr ""
3132
 
3133
  #: includes/class-wcj-order-custom-statuses.php:33
3134
+ #: includes/class-wcj-order-custom-statuses.php:405
3135
  msgid "Custom Statuses"
3136
  msgstr ""
3137
 
3139
  msgid "Tool lets you add or delete any custom status for WooCommerce orders."
3140
  msgstr ""
3141
 
3142
+ #: includes/class-wcj-order-custom-statuses.php:116
3143
  msgctxt "Order status"
3144
  msgid "Pending payment"
3145
  msgstr ""
3146
 
3147
+ #: includes/class-wcj-order-custom-statuses.php:117
3148
+ #: includes/functions/wcj-functions.php:887
3149
  msgctxt "Order status"
3150
  msgid "Processing"
3151
  msgstr ""
3152
 
3153
+ #: includes/class-wcj-order-custom-statuses.php:118
3154
  msgctxt "Order status"
3155
  msgid "On hold"
3156
  msgstr ""
3157
 
3158
+ #: includes/class-wcj-order-custom-statuses.php:119
3159
+ #: includes/functions/wcj-functions.php:889
3160
  msgctxt "Order status"
3161
  msgid "Completed"
3162
  msgstr ""
3163
 
3164
+ #: includes/class-wcj-order-custom-statuses.php:120
3165
+ #: includes/functions/wcj-functions.php:890
3166
  msgctxt "Order status"
3167
  msgid "Cancelled"
3168
  msgstr ""
3169
 
3170
+ #: includes/class-wcj-order-custom-statuses.php:121
3171
+ #: includes/functions/wcj-functions.php:891
3172
  msgctxt "Order status"
3173
  msgid "Refunded"
3174
  msgstr ""
3175
 
3176
+ #: includes/class-wcj-order-custom-statuses.php:122
3177
+ #: includes/functions/wcj-functions.php:892
3178
  msgctxt "Order status"
3179
  msgid "Failed"
3180
  msgstr ""
3181
 
3182
+ #: includes/class-wcj-order-custom-statuses.php:162
3183
+ #, php-format
3184
+ msgid " <span class=\"count\">(%s)</span>"
3185
+ msgid_plural " <span class=\"count\">(%s)</span>"
3186
+ msgstr[0] ""
3187
+ msgstr[1] ""
3188
+
3189
+ #: includes/class-wcj-order-custom-statuses.php:212
3190
  msgid "Status slug is empty. Status was not added!"
3191
  msgstr ""
3192
 
3193
+ #: includes/class-wcj-order-custom-statuses.php:215
3194
  msgid ""
3195
  "The length of status slug must be 17 or less characters. Status was not "
3196
  "added!"
3197
  msgstr ""
3198
 
3199
+ #: includes/class-wcj-order-custom-statuses.php:218
3200
  msgid "Status label is empty. Status was not added!"
3201
  msgstr ""
3202
 
3203
+ #: includes/class-wcj-order-custom-statuses.php:225
3204
  msgid "Duplicate slug. Status was not added!"
3205
  msgstr ""
3206
 
3207
+ #: includes/class-wcj-order-custom-statuses.php:229
3208
+ msgid "Duplicate slug (default WooCommerce status). Status was not added!"
3209
+ msgstr ""
3210
+
3211
+ #: includes/class-wcj-order-custom-statuses.php:240
3212
  msgid "New status has been successfully added!"
3213
  msgstr ""
3214
 
3215
+ #: includes/class-wcj-order-custom-statuses.php:242
3216
  msgid "Status was not added."
3217
  msgstr ""
3218
 
3219
+ #: includes/class-wcj-order-custom-statuses.php:260
3220
+ msgid "Status label is empty. Status was not edited!"
3221
+ msgstr ""
3222
+
3223
+ #: includes/class-wcj-order-custom-statuses.php:270
3224
+ msgid "Status has been successfully edited!"
3225
+ msgstr ""
3226
+
3227
+ #: includes/class-wcj-order-custom-statuses.php:272
3228
+ msgid "Status was not edited."
3229
+ msgstr ""
3230
+
3231
+ #: includes/class-wcj-order-custom-statuses.php:280
3232
  msgid "Status has been successfully deleted."
3233
  msgstr ""
3234
 
3235
+ #: includes/class-wcj-order-custom-statuses.php:282
3236
  msgid "Delete failed."
3237
  msgstr ""
3238
 
3239
+ #: includes/class-wcj-order-custom-statuses.php:287
3240
  msgid "Booster - Custom Statuses"
3241
  msgstr ""
3242
 
3243
+ #: includes/class-wcj-order-custom-statuses.php:288
3244
  msgid ""
3245
  "The tool lets you add or delete any custom status for WooCommerce orders."
3246
  msgstr ""
3247
 
3248
+ #: includes/class-wcj-order-custom-statuses.php:290
3249
  msgid "Statuses"
3250
  msgstr ""
3251
 
3252
+ #: includes/class-wcj-order-custom-statuses.php:293
3253
  msgid "Slug"
3254
  msgstr ""
3255
 
3256
+ #: includes/class-wcj-order-custom-statuses.php:295
3257
+ #: includes/class-wcj-order-custom-statuses.php:350
3258
  msgid "Icon Code"
3259
  msgstr ""
3260
 
3261
+ #: includes/class-wcj-order-custom-statuses.php:296
3262
+ #: includes/class-wcj-order-custom-statuses.php:352
3263
  msgid "Icon Color"
3264
  msgstr ""
3265
 
3266
+ #: includes/class-wcj-order-custom-statuses.php:320
3267
+ msgid "Get Booster Plus to enable."
3268
+ msgstr ""
3269
+
3270
+ #: includes/class-wcj-order-custom-statuses.php:320
3271
+ #: includes/class-wcj-order-custom-statuses.php:344
3272
+ #: includes/class-wcj-product-by-user.php:164
3273
+ #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:359
3274
+ msgid "Edit"
3275
+ msgstr ""
3276
+
3277
+ #: includes/class-wcj-order-custom-statuses.php:348
3278
  msgid "Slug (without wc- prefix)"
3279
  msgstr ""
3280
 
3281
+ #: includes/class-wcj-order-custom-statuses.php:351
3282
+ #, php-format
3283
  msgid "You can check icon codes <a target=\"_blank\" href=\"%s\">here</a>."
3284
  msgstr ""
3285
 
3286
+ #: includes/class-wcj-order-custom-statuses.php:354
3287
+ msgid "Edit custom status"
3288
+ msgstr ""
3289
+
3290
+ #: includes/class-wcj-order-custom-statuses.php:354
3291
  msgid "Add new custom status"
3292
  msgstr ""
3293
 
3294
+ #: includes/class-wcj-order-custom-statuses.php:377
3295
+ #: includes/class-wcj-order-custom-statuses.php:378
3296
  msgid "Mark"
3297
  msgstr ""
3298
 
3299
+ #: includes/class-wcj-order-custom-statuses.php:410
3300
  #: includes/gateways/class-wc-gateway-wcj-custom.php:138
3301
  msgid "Default Order Status"
3302
  msgstr ""
3303
 
3304
+ #: includes/class-wcj-order-custom-statuses.php:411
3305
  #: includes/gateways/class-wc-gateway-wcj-custom.php:139
3306
  msgid "Enable Custom Statuses feature to add custom statuses to the list."
3307
  msgstr ""
3308
 
3309
+ #: includes/class-wcj-order-custom-statuses.php:412
3310
  msgid ""
3311
  "You can change the default order status here. However payment gateways can "
3312
  "change this status immediatelly on order creation. E.g. BACS gateway will "
3313
  "change status to On-hold."
3314
  msgstr ""
3315
 
3316
+ #: includes/class-wcj-order-custom-statuses.php:419
3317
  msgid "Add All Statuses to Admin Order Bulk Actions"
3318
  msgstr ""
3319
 
3320
+ #: includes/class-wcj-order-custom-statuses.php:426
3321
  msgid "Add Custom Statuses to Admin Reports"
3322
  msgstr ""
3323
 
3324
+ #: includes/class-wcj-order-custom-statuses.php:433
3325
+ msgid "Add Custom Statuses to Admin Order List Action Buttons"
3326
+ msgstr ""
3327
+
3328
+ #: includes/class-wcj-order-custom-statuses.php:442
3329
+ msgid "Enable Colors"
3330
+ msgstr ""
3331
+
3332
  #: includes/class-wcj-order-min-amount.php:27
3333
+ #: includes/class-wcj-order-min-amount.php:184
3334
  msgid "Order Minimum Amount"
3335
  msgstr ""
3336
 
3338
  msgid "Minimum WooCommerce order amount (optionally by user role)."
3339
  msgstr ""
3340
 
3341
+ #: includes/class-wcj-order-min-amount.php:186
3342
  msgid "This section lets you set minimum order amount."
3343
  msgstr ""
3344
 
3345
+ #: includes/class-wcj-order-min-amount.php:190
3346
  msgid "Amount"
3347
  msgstr ""
3348
 
3349
+ #: includes/class-wcj-order-min-amount.php:191
3350
  msgid "Minimum order amount. Set to 0 to disable."
3351
  msgstr ""
3352
 
3353
+ #: includes/class-wcj-order-min-amount.php:201
3354
  msgid "Exclude Shipping from Cart Total"
3355
  msgstr ""
3356
 
3357
+ #: includes/class-wcj-order-min-amount.php:202
3358
  msgid "Exclude"
3359
  msgstr ""
3360
 
3361
+ #: includes/class-wcj-order-min-amount.php:208
3362
  msgid "Error message"
3363
  msgstr ""
3364
 
3365
+ #: includes/class-wcj-order-min-amount.php:210
3366
+ #: includes/class-wcj-order-min-amount.php:227
3367
+ #, php-format
3368
  msgid ""
3369
  "Message to customer if order is below minimum amount. Default: You must have "
3370
  "an order with a minimum of %s to place your order, your current order total "
3371
  "is %s."
3372
  msgstr ""
3373
 
3374
+ #: includes/class-wcj-order-min-amount.php:218
3375
  msgid "Add notice to cart page also"
3376
  msgstr ""
3377
 
3378
+ #: includes/class-wcj-order-min-amount.php:225
3379
  msgid "Message on cart page"
3380
  msgstr ""
3381
 
3382
+ #: includes/class-wcj-order-min-amount.php:235
3383
  msgid ""
3384
  "Stop customer from seeing the Checkout page if minimum amount not reached."
3385
  msgstr ""
3386
 
3387
+ #: includes/class-wcj-order-min-amount.php:236
3388
  msgid "Redirect back to Cart page"
3389
  msgstr ""
3390
 
3391
+ #: includes/class-wcj-order-min-amount.php:246
3392
  msgid "Order Minimum Amount by User Role"
3393
  msgstr ""
3394
 
3395
  #: includes/class-wcj-order-numbers.php:25
3396
+ #: includes/class-wcj-order-numbers.php:241
3397
  msgid "Order Numbers"
3398
  msgstr ""
3399
 
3411
  msgid "Tool renumerates all orders."
3412
  msgstr ""
3413
 
3414
+ #: includes/class-wcj-order-numbers.php:146
3415
  msgid "Orders successfully renumerated!"
3416
  msgstr ""
3417
 
3418
+ #: includes/class-wcj-order-numbers.php:150
3419
  msgid ""
3420
  "Press the button below to renumerate all existing orders starting from order "
3421
  "counter settings in WooCommerce > Settings > Booster > Order Numbers."
3422
  msgstr ""
3423
 
3424
+ #: includes/class-wcj-order-numbers.php:153
3425
  msgid "Renumerate orders"
3426
  msgstr ""
3427
 
3428
+ #: includes/class-wcj-order-numbers.php:243
3429
  msgid ""
3430
  "This section lets you enable sequential order numbering, set custom number "
3431
  "prefix, suffix and width."
3432
  msgstr ""
3433
 
3434
+ #: includes/class-wcj-order-numbers.php:247 includes/class-wcj-sku.php:288
3435
+ msgid "Number Generation"
3436
+ msgstr ""
3437
+
3438
+ #: includes/class-wcj-order-numbers.php:252 includes/class-wcj-sku.php:294
3439
+ #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-numbering.php:45
3440
+ msgid "Sequential"
3441
+ msgstr ""
3442
+
3443
+ #: includes/class-wcj-order-numbers.php:253
3444
+ #: includes/export/class-wcj-fields-helper.php:112
3445
+ #: includes/export/class-wcj-fields-helper.php:195
3446
+ #: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:254
3447
+ msgid "Order ID"
3448
+ msgstr ""
3449
+
3450
+ #: includes/class-wcj-order-numbers.php:254
3451
+ msgid "Pseudorandom - Hash (max 10 digits)"
3452
  msgstr ""
3453
 
3454
+ #: includes/class-wcj-order-numbers.php:258
3455
  msgid "Next Order Number"
3456
  msgstr ""
3457
 
3458
+ #: includes/class-wcj-order-numbers.php:259
3459
  msgid "Next new order will be given this number."
3460
  msgstr ""
3461
 
3462
+ #: includes/class-wcj-order-numbers.php:259
3463
  msgid "Use Renumerate Orders tool for existing orders."
3464
  msgstr ""
3465
 
3466
+ #: includes/class-wcj-order-numbers.php:260
3467
  msgid "This will be ignored if sequential order numbering is disabled."
3468
  msgstr ""
3469
 
3470
+ #: includes/class-wcj-order-numbers.php:266
3471
  msgid "Order Number Custom Prefix"
3472
  msgstr ""
3473
 
3474
+ #: includes/class-wcj-order-numbers.php:267
3475
  msgid ""
3476
  "Prefix before order number (optional). This will change the prefixes for all "
3477
  "existing orders."
3478
  msgstr ""
3479
 
3480
+ #: includes/class-wcj-order-numbers.php:274
3481
  msgid "Order Number Date Prefix"
3482
  msgstr ""
3483
 
3484
+ #: includes/class-wcj-order-numbers.php:276
3485
  msgid ""
3486
  "Date prefix before order number (optional). This will change the prefixes "
3487
  "for all existing orders. Value is passed directly to PHP `date` function, so "
3490
  "d- or mdy."
3491
  msgstr ""
3492
 
3493
+ #: includes/class-wcj-order-numbers.php:284
3494
  msgid "Order Number Width"
3495
  msgstr ""
3496
 
3497
+ #: includes/class-wcj-order-numbers.php:286
3498
  msgid ""
3499
  "Minimum width of number without prefix (zeros will be added to the left "
3500
  "side). This will change the minimum width of order number for all existing "
3502
  "Leave zero to disable."
3503
  msgstr ""
3504
 
3505
+ #: includes/class-wcj-order-numbers.php:294
3506
  msgid "Order Number Custom Suffix"
3507
  msgstr ""
3508
 
3509
+ #: includes/class-wcj-order-numbers.php:296
3510
  msgid ""
3511
  "Suffix after order number (optional). This will change the suffixes for all "
3512
  "existing orders."
3513
  msgstr ""
3514
 
3515
+ #: includes/class-wcj-order-numbers.php:304
3516
  msgid "Order Number Date Suffix"
3517
  msgstr ""
3518
 
3519
+ #: includes/class-wcj-order-numbers.php:306
3520
  msgid ""
3521
  "Date suffix after order number (optional). This will change the suffixes for "
3522
  "all existing orders. Value is passed directly to PHP `date` function, so "
3525
  "d- or mdy."
3526
  msgstr ""
3527
 
3528
+ #: includes/class-wcj-order-numbers.php:314
3529
  msgid "Use MySQL Transaction"
3530
  msgstr ""
3531
 
3532
+ #: includes/class-wcj-order-numbers.php:316
3533
  msgid ""
3534
  "This should be enabled if you have a lot of simultaneous orders in your shop "
3535
  "- to prevent duplicate order numbers (sequential)."
3536
  msgstr ""
3537
 
3538
+ #: includes/class-wcj-order-numbers.php:322
3539
  msgid "Enable Order Tracking by Custom Number"
3540
  msgstr ""
3541
 
3542
+ #: includes/class-wcj-order-numbers.php:329
3543
+ msgid "Enable Order Admin Search by Custom Number"
3544
+ msgstr ""
3545
+
3546
  #: includes/class-wcj-orders.php:25
3547
  msgid "Orders"
3548
  msgstr ""
3553
  "Admin order list multiple status filtering."
3554
  msgstr ""
3555
 
3556
+ #: includes/class-wcj-orders.php:131
3557
  msgid "Not Completed"
3558
  msgstr ""
3559
 
3560
+ #: includes/class-wcj-orders.php:237
3561
+ #: includes/export/class-wcj-fields-helper.php:118
3562
+ #: includes/export/class-wcj-fields-helper.php:203
3563
  #: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:261
3564
  msgid "Order Currency"
3565
  msgstr ""
3566
 
3567
+ #: includes/class-wcj-orders.php:238
3568
  msgid "Save order after you change this field."
3569
  msgstr ""
3570
 
3571
+ #: includes/class-wcj-orders.php:266
3572
  msgid "All countries"
3573
  msgstr ""
3574
 
3575
+ #: includes/class-wcj-orders.php:363 includes/class-wcj-orders.php:368
3576
  msgid "Admin Order Currency"
3577
  msgstr ""
3578
 
3579
+ #: includes/class-wcj-orders.php:370
3580
  msgid ""
3581
  "When enabled this will add \"Booster: Orders\" metabox to each order's edit "
3582
  "page."
3583
  msgstr ""
3584
 
3585
+ #: includes/class-wcj-orders.php:376
3586
  msgid "Admin Order Currency Method"
3587
  msgstr ""
3588
 
3589
+ #: includes/class-wcj-orders.php:377
3590
  msgid ""
3591
  "Choose if you want changed order currency to be saved directly to DB, or if "
3592
  "you want to use filter. When using <em>filter</em> method, changes will be "
3595
  "Booster plugin is removed."
3596
  msgstr ""
3597
 
3598
+ #: includes/class-wcj-orders.php:383
3599
  msgid "Directly to DB"
3600
  msgstr ""
3601
 
3602
+ #: includes/class-wcj-orders.php:391
3603
  msgid "Orders Auto-Complete"
3604
  msgstr ""
3605
 
3606
+ #: includes/class-wcj-orders.php:393
3607
  msgid "This section lets you enable orders auto-complete function."
3608
  msgstr ""
3609
 
3610
+ #: includes/class-wcj-orders.php:397
3611
  msgid "Auto-complete all WooCommerce orders"
3612
  msgstr ""
3613
 
3614
+ #: includes/class-wcj-orders.php:399
3615
  msgid ""
3616
  "E.g. if you sell digital products then you are not shipping anything and you "
3617
  "may want auto-complete all your orders."
3618
  msgstr ""
3619
 
3620
+ #: includes/class-wcj-orders.php:409 includes/class-wcj-purchase-data.php:397
3621
  msgid "Admin Orders List Custom Columns"
3622
  msgstr ""
3623
 
3624
+ #: includes/class-wcj-orders.php:411
3625
  msgid "This section lets you add custom columns to WooCommerce orders list."
3626
  msgstr ""
3627
 
3628
+ #: includes/class-wcj-orders.php:422
3629
  msgid "Custom Columns Total Number"
3630
  msgstr ""
3631
 
3632
+ #: includes/class-wcj-orders.php:437
3633
  msgid "Custom Column"
3634
  msgstr ""
3635
 
3636
+ #: includes/class-wcj-orders.php:452
3637
+ #: includes/class-wcj-product-custom-info.php:123
3638
+ #: includes/class-wcj-products-xml.php:387
3639
  msgid "You can use shortcodes here."
3640
  msgstr ""
3641
 
3642
+ #: includes/class-wcj-orders.php:466
3643
  msgid "Admin Orders List Multiple Status"
3644
  msgstr ""
3645
 
3646
+ #: includes/class-wcj-orders.php:471
3647
  msgid "Multiple Status Filtering"
3648
  msgstr ""
3649
 
3650
+ #: includes/class-wcj-orders.php:477
3651
  msgid "Add as multiple select"
3652
  msgstr ""
3653
 
3654
+ #: includes/class-wcj-orders.php:478
3655
  msgid "Add as checkboxes"
3656
  msgstr ""
3657
 
3658
+ #: includes/class-wcj-orders.php:482
3659
  msgid "Hide Default Statuses Menu"
3660
  msgstr ""
3661
 
3662
+ #: includes/class-wcj-orders.php:489
3663
  msgid "Add \"Not Completed\" Status Link to Default Statuses Menu"
3664
  msgstr ""
3665
 
3666
+ #: includes/class-wcj-orders.php:500
3667
  msgid "Admin Orders List Columns Order"
3668
  msgstr ""
3669
 
3670
+ #: includes/class-wcj-orders.php:505
3671
  msgid "Columns Order"
3672
  msgstr ""
3673
 
3674
+ #: includes/class-wcj-orders.php:513
3675
  msgid "Default columns order"
3676
  msgstr ""
3677
 
3685
  "to show up."
3686
  msgstr ""
3687
 
3688
+ #: includes/class-wcj-payment-gateways-by-country.php:81
3689
+ #: includes/class-wcj-payment-gateways-by-shipping.php:159
3690
+ #: includes/class-wcj-payment-gateways-by-user-role.php:71
3691
+ #: includes/class-wcj-payment-gateways-min-max.php:135
3692
+ #: includes/admin/wcj-modules-cats.php:101
3693
+ msgid "Payment Gateways"
3694
+ msgstr ""
3695
+
3696
+ #: includes/class-wcj-payment-gateways-by-country.php:83
3697
+ #: includes/class-wcj-payment-gateways-by-user-role.php:73
3698
  msgid "Leave empty to disable."
3699
  msgstr ""
3700
 
3701
+ #: includes/class-wcj-payment-gateways-by-country.php:106
3702
  msgid "Include Countries"
3703
  msgstr ""
3704
 
3705
+ #: includes/class-wcj-payment-gateways-by-country.php:118
3706
  msgid "Exclude Countries"
3707
  msgstr ""
3708
 
3709
+ #: includes/class-wcj-payment-gateways-by-country.php:130
3710
  msgid "Include States (Base Country)"
3711
  msgstr ""
3712
 
3713
+ #: includes/class-wcj-payment-gateways-by-country.php:142
3714
  msgid "Exclude States (Base Country)"
3715
  msgstr ""
3716
 
3717
+ #: includes/class-wcj-payment-gateways-by-shipping.php:27
3718
+ msgid "Gateways by Shipping"
3719
+ msgstr ""
3720
+
3721
+ #: includes/class-wcj-payment-gateways-by-shipping.php:28
3722
+ msgid "Set \"enable for shipping methods\" for WooCommerce payment gateways."
3723
+ msgstr ""
3724
+
3725
+ #: includes/class-wcj-payment-gateways-by-shipping.php:161
3726
+ msgid ""
3727
+ "If payment gateway is only available for certain methods, set it up here. "
3728
+ "Leave blank to enable for all methods."
3729
+ msgstr ""
3730
+
3731
+ #: includes/class-wcj-payment-gateways-by-shipping.php:182
3732
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:119
3733
+ msgid "Enable for shipping methods"
3734
+ msgstr ""
3735
+
3736
+ #: includes/class-wcj-payment-gateways-by-shipping.php:189
3737
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:127
3738
+ msgid "Select shipping methods"
3739
+ msgstr ""
3740
+
3741
  #: includes/class-wcj-payment-gateways-by-user-role.php:27
3742
  msgid "Gateways by User Role"
3743
  msgstr ""
3748
  "up."
3749
  msgstr ""
3750
 
3751
+ #: includes/class-wcj-payment-gateways-by-user-role.php:74
3752
  #: includes/class-wcj-product-by-user.php:258
3753
+ #, php-format
3754
  msgid ""
3755
  "Custom roles can be added via \"Add/Manage Custom Roles\" tool in Booster's "
3756
  "<a href=\"%s\">General</a> module"
3757
  msgstr ""
3758
 
3759
+ #: includes/class-wcj-payment-gateways-by-user-role.php:97
3760
  msgid "Include User Roles"
3761
  msgstr ""
3762
 
3763
+ #: includes/class-wcj-payment-gateways-by-user-role.php:109
3764
  msgid "Exclude User Roles"
3765
  msgstr ""
3766
 
3772
  msgid "Currency per WooCommerce payment gateway."
3773
  msgstr ""
3774
 
3775
+ #: includes/class-wcj-payment-gateways-currency.php:213
3776
  msgid "Payment Gateways Currency Options"
3777
  msgstr ""
3778
 
3779
+ #: includes/class-wcj-payment-gateways-currency.php:215
3780
  msgid "This section lets you set different currency for each payment gateway."
3781
  msgstr ""
3782
 
3783
+ #: includes/class-wcj-payment-gateways-currency.php:247
3784
  msgid "No changes"
3785
  msgstr ""
3786
 
3792
  msgid "Enable extra fees or discounts for WooCommerce payment gateways."
3793
  msgstr ""
3794
 
3795
+ #: includes/class-wcj-payment-gateways-fees.php:131
3796
+ msgid "Fee (or Discount) Title"
3797
  msgstr ""
3798
 
3799
+ #: includes/class-wcj-payment-gateways-fees.php:132
3800
+ msgid "Fee (or discount) title to show to customer."
3801
  msgstr ""
3802
 
3803
+ #: includes/class-wcj-payment-gateways-fees.php:133
3804
+ #: includes/class-wcj-purchase-data.php:337
3805
+ #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-header.php:58
3806
+ msgid "Leave blank to disable"
3807
  msgstr ""
3808
 
3809
+ #: includes/class-wcj-payment-gateways-fees.php:139
3810
+ msgid "Fee (or Discount) Type"
3811
  msgstr ""
3812
 
3813
+ #: includes/class-wcj-payment-gateways-fees.php:140
3814
  msgid "Percent or fixed value."
3815
  msgstr ""
3816
 
3817
+ #: includes/class-wcj-payment-gateways-fees.php:150
3818
+ msgid "Fee (or Discount) Value"
3819
  msgstr ""
3820
 
3821
+ #: includes/class-wcj-payment-gateways-fees.php:151
3822
  msgid "The value. For discount enter a negative number."
3823
  msgstr ""
3824
 
3825
+ #: includes/class-wcj-payment-gateways-fees.php:160
3826
+ msgid "Minimum Cart Amount"
3827
+ msgstr ""
3828
+
3829
+ #: includes/class-wcj-payment-gateways-fees.php:161
3830
  msgid "Minimum cart amount for adding the fee (or discount)."
3831
  msgstr ""
3832
 
3833
+ #: includes/class-wcj-payment-gateways-fees.php:162
3834
+ #: includes/class-wcj-payment-gateways-fees.php:174
3835
+ msgid "Set 0 to disable"
3836
+ msgstr ""
3837
+
3838
+ #: includes/class-wcj-payment-gateways-fees.php:172
3839
+ msgid "Maximum Cart Amount"
3840
  msgstr ""
3841
 
3842
+ #: includes/class-wcj-payment-gateways-fees.php:173
3843
  msgid "Maximum cart amount for adding the fee (or discount)."
3844
  msgstr ""
3845
 
3846
+ #: includes/class-wcj-payment-gateways-fees.php:185
3847
+ msgid "Round the fee (or discount) value before adding to the cart"
3848
+ msgstr ""
3849
+
3850
+ #: includes/class-wcj-payment-gateways-fees.php:192
3851
+ msgid "If Rounding is enabled, set precision here."
3852
+ msgstr ""
3853
+
3854
+ #: includes/class-wcj-payment-gateways-fees.php:202
3855
+ msgid "Taxing"
3856
  msgstr ""
3857
 
3858
+ #: includes/class-wcj-payment-gateways-fees.php:203
3859
+ msgid "Taxable"
3860
  msgstr ""
3861
 
3862
+ #: includes/class-wcj-payment-gateways-fees.php:209
3863
+ #: includes/export/class-wcj-fields-helper.php:308
3864
+ msgid "Tax Class"
3865
  msgstr ""
3866
 
3867
+ #: includes/class-wcj-payment-gateways-fees.php:210
3868
+ msgid "If Taxing is enabled, set tax class here."
3869
  msgstr ""
3870
 
3871
+ #: includes/class-wcj-payment-gateways-fees.php:214
3872
  msgid "Standard Rate"
3873
  msgstr ""
3874
 
3898
  msgstr ""
3899
 
3900
  #: includes/class-wcj-payment-gateways-min-max.php:26
3901
+ msgid "Gateways Min/Max Amounts"
3902
  msgstr ""
3903
 
3904
  #: includes/class-wcj-payment-gateways-min-max.php:27
3905
  msgid "Add min/max amounts for WooCommerce payment gateways to show up."
3906
  msgstr ""
3907
 
3908
+ #: includes/class-wcj-payment-gateways-min-max.php:45
3909
+ #: includes/class-wcj-payment-gateways-min-max.php:107
3910
+ msgid "Minimum amount for %gateway_title% is %min_amount%"
3911
+ msgstr ""
3912
+
3913
+ #: includes/class-wcj-payment-gateways-min-max.php:46
3914
+ #: includes/class-wcj-payment-gateways-min-max.php:115
3915
+ msgid "Maximum amount for %gateway_title% is %max_amount%"
3916
+ msgstr ""
3917
+
3918
+ #: includes/class-wcj-payment-gateways-min-max.php:85
3919
  msgid "General Options"
3920
  msgstr ""
3921
 
3922
+ #: includes/class-wcj-payment-gateways-min-max.php:90
3923
  msgid "Exclude Shipping"
3924
  msgstr ""
3925
 
3926
+ #: includes/class-wcj-payment-gateways-min-max.php:91
3927
  msgid ""
3928
  "Exclude shipping from total cart sum, when comparing with min/max amounts."
3929
  msgstr ""
3930
 
3931
+ #: includes/class-wcj-payment-gateways-min-max.php:97
3932
+ msgid "Notices on Checkout"
3933
+ msgstr ""
3934
+
3935
+ #: includes/class-wcj-payment-gateways-min-max.php:98
3936
+ msgid "Enable Notices"
3937
+ msgstr ""
3938
+
3939
+ #: includes/class-wcj-payment-gateways-min-max.php:104
3940
+ msgid "Notice Template (Minimum Amount)"
3941
+ msgstr ""
3942
+
3943
+ #: includes/class-wcj-payment-gateways-min-max.php:105
3944
+ msgid "Replaced values: %gateway_title%, %min_amount%."
3945
+ msgstr ""
3946
+
3947
+ #: includes/class-wcj-payment-gateways-min-max.php:112
3948
+ msgid "Notice Template (Maximum Amount)"
3949
+ msgstr ""
3950
+
3951
+ #: includes/class-wcj-payment-gateways-min-max.php:113
3952
+ msgid "Replaced values: %gateway_title%, %max_amount%."
3953
+ msgstr ""
3954
+
3955
+ #: includes/class-wcj-payment-gateways-min-max.php:120
3956
+ msgid "Notice Styling"
3957
+ msgstr ""
3958
+
3959
+ #: includes/class-wcj-payment-gateways-min-max.php:125
3960
+ msgid "Notice"
3961
+ msgstr ""
3962
+
3963
+ #: includes/class-wcj-payment-gateways-min-max.php:126
3964
+ msgid "Error"
3965
+ msgstr ""
3966
+
3967
+ #: includes/class-wcj-payment-gateways-min-max.php:127
3968
+ msgid "Success"
3969
+ msgstr ""
3970
+
3971
+ #: includes/class-wcj-payment-gateways-min-max.php:137
3972
  msgid "Leave zero to disable."
3973
  msgstr ""
3974
 
3975
+ #: includes/class-wcj-payment-gateways-min-max.php:158
3976
  msgid "Min"
3977
  msgstr ""
3978
 
3979
+ #: includes/class-wcj-payment-gateways-min-max.php:167
3980
  msgid "Max"
3981
  msgstr ""
3982
 
3990
  "category in cart."
3991
  msgstr ""
3992
 
3993
+ #: includes/class-wcj-payment-gateways-per-category.php:185
3994
+ #: includes/class-wcj-price-labels.php:609
3995
  msgid "Product Categories - Include"
3996
  msgstr ""
3997
 
3998
+ #: includes/class-wcj-payment-gateways-per-category.php:186
3999
  msgid ""
4000
  "Show gateway only if there is product of selected category in cart. Leave "
4001
  "blank to disable the option."
4002
  msgstr ""
4003
 
4004
+ #: includes/class-wcj-payment-gateways-per-category.php:196
4005
+ #: includes/class-wcj-price-labels.php:619
4006
  msgid "Product Categories - Exclude"
4007
  msgstr ""
4008
 
4009
+ #: includes/class-wcj-payment-gateways-per-category.php:197
4010
  msgid ""
4011
  "Hide gateway if there is product of selected category in cart. Leave blank "
4012
  "to disable the option."
4013
  msgstr ""
4014
 
4015
+ #: includes/class-wcj-payment-gateways-per-category.php:207
4016
+ #: includes/class-wcj-price-labels.php:589
4017
  msgid "Products - Include"
4018
  msgstr ""
4019
 
4020
+ #: includes/class-wcj-payment-gateways-per-category.php:208
4021
  msgid ""
4022
  "Show gateway only if there is selected products in cart. Leave blank to "
4023
  "disable the option."
4024
  msgstr ""
4025
 
4026
+ #: includes/class-wcj-payment-gateways-per-category.php:219
4027
+ #: includes/class-wcj-price-labels.php:599
4028
  msgid "Products - Exclude"
4029
  msgstr ""
4030
 
4031
+ #: includes/class-wcj-payment-gateways-per-category.php:220
4032
  msgid ""
4033
  "Hide gateway if there is selected products in cart. Leave blank to disable "
4034
  "the option."
4043
  msgstr ""
4044
 
4045
  #: includes/class-wcj-payment-gateways.php:55
4046
+ #, php-format
4047
  msgid "%s Fields"
4048
  msgstr ""
4049
 
4060
  msgstr ""
4061
 
4062
  #: includes/class-wcj-payment-gateways.php:123
4063
+ #, php-format
4064
  msgid "After setting the number, visit %s to set each gateway options."
4065
  msgstr ""
4066
 
4112
 
4113
  #: includes/class-wcj-pdf-invoicing.php:89
4114
  #: includes/class-wcj-pdf-invoicing.php:90
4115
+ #: includes/class-wcj-price-by-country.php:300
4116
+ #: includes/class-wcj-price-by-country.php:305
4117
+ #: includes/class-wcj-price-by-country.php:310
4118
  msgid "Generate"
4119
  msgstr ""
4120
 
4124
  msgstr ""
4125
 
4126
  #: includes/class-wcj-pdf-invoicing.php:114
4127
+ #, php-format
4128
  msgid "Document generated."
4129
  msgid_plural "%s documents generated."
4130
  msgstr[0] ""
4131
  msgstr[1] ""
4132
 
4133
  #: includes/class-wcj-pdf-invoicing.php:220
4134
+ #: includes/classes/class-wcj-pdf-invoice.php:368
4135
  #: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:195
4136
  msgid "Unexpected error"
4137
  msgstr ""
4138
 
4139
+ #: includes/class-wcj-pdf-invoicing.php:344
4140
  msgid "PDF Invoicing General Options"
4141
  msgstr ""
4142
 
4143
+ #: includes/class-wcj-pdf-invoicing.php:353
4144
  msgid "Create on New Order"
4145
  msgstr ""
4146
 
4147
+ #: includes/class-wcj-pdf-invoicing.php:356
4148
  msgid "Create on Order Status"
4149
  msgstr ""
4150
 
4151
+ #: includes/class-wcj-pdf-invoicing.php:358
4152
  msgid "Manual Only"
4153
  msgstr ""
4154
 
4155
+ #: includes/class-wcj-pdf-invoicing.php:366
4156
+ msgid "Number of Custom Documents"
4157
+ msgstr ""
4158
+
4159
+ #: includes/class-wcj-pdf-invoicing.php:367
4160
+ msgid "Save changes after setting this number."
4161
+ msgstr ""
4162
+
4163
+ #: includes/class-wcj-pdf-invoicing.php:390
4164
  msgid "Do not create if order total equals zero"
4165
  msgstr ""
4166
 
4167
+ #: includes/class-wcj-pdf-invoicing.php:396
4168
  msgid "Hide Disabled Docs Settings"
4169
  msgstr ""
4170
 
4230
  msgid "Override Country with Customer's Checkout Shipping Country"
4231
  msgstr ""
4232
 
4233
+ #: includes/class-wcj-price-by-country.php:184
4234
+ msgid "Override Scope"
4235
+ msgstr ""
4236
+
4237
+ #: includes/class-wcj-price-by-country.php:189
4238
+ msgid "All site"
4239
+ msgstr ""
4240
+
4241
+ #: includes/class-wcj-price-by-country.php:191
4242
+ msgid "Checkout only"
4243
+ msgstr ""
4244
+
4245
+ #: includes/class-wcj-price-by-country.php:204
4246
  msgid "Price Rounding"
4247
  msgstr ""
4248
 
4249
+ #: includes/class-wcj-price-by-country.php:205
4250
  msgid "If you choose to multiply price, set rounding options here."
4251
  msgstr ""
4252
 
4253
+ #: includes/class-wcj-price-by-country.php:218
4254
+ msgid "Make Pretty Price"
4255
+ msgstr ""
4256
+
4257
+ #: includes/class-wcj-price-by-country.php:220
4258
+ msgid ""
4259
+ "If enabled, this will be applied if exchange rates are used. Final converted "
4260
+ "price will be rounded, then decreased by smallest possible value. For "
4261
+ "example: $9,75 -> $10,00 -> $9,99. Please note that as smallest possible "
4262
+ "value is calculated from shop's \"Precision\" option, this option must be "
4263
+ "above zero."
4264
+ msgstr ""
4265
+
4266
+ #: includes/class-wcj-price-by-country.php:227
4267
+ msgid "Discount Min Amount Multiplier"
4268
+ msgstr ""
4269
+
4270
+ #: includes/class-wcj-price-by-country.php:228
4271
+ msgid ""
4272
+ "If \"Make Pretty Price\" is enabled, here you can set by how many smallest "
4273
+ "possible values (e.g. cents) final price should be decreased."
4274
+ msgstr ""
4275
+
4276
+ #: includes/class-wcj-price-by-country.php:236
4277
  msgid "Price by Country on per Product Basis"
4278
  msgstr ""
4279
 
4280
+ #: includes/class-wcj-price-by-country.php:238
4281
  msgid "This will add product data fields in product edit."
4282
  msgstr ""
4283
 
4284
+ #: includes/class-wcj-price-by-country.php:245
4285
  msgid "Price Filter Widget and Sorting by Price Support"
4286
  msgstr ""
4287
 
4288
+ #: includes/class-wcj-price-by-country.php:248
4289
  msgid "Recalculate price filter widget and sorting by price product prices"
4290
  msgstr ""
4291
 
4292
+ #: includes/class-wcj-price-by-country.php:255
4293
  msgid "Add Countries Flags Images to Select Drop-Down Box"
4294
  msgstr ""
4295
 
4296
+ #: includes/class-wcj-price-by-country.php:257
4297
  msgid ""
4298
  "If you are using [wcj_country_select_drop_down_list] shortcode or \"Booster: "
4299
  "Country Switcher\" widget, this will add country flags to these select boxes."
4300
  msgstr ""
4301
 
4302
+ #: includes/class-wcj-price-by-country.php:264
4303
+ #: includes/class-wcj-price-by-user-role.php:354
4304
  msgid "Search Engine Bots"
4305
  msgstr ""
4306
 
4307
+ #: includes/class-wcj-price-by-country.php:265
4308
  msgid "Disable Price by Country for Bots"
4309
  msgstr ""
4310
 
4311
+ #: includes/class-wcj-price-by-country.php:274
4312
  msgid "Country Groups"
4313
  msgstr ""
4314
 
4315
+ #: includes/class-wcj-price-by-country.php:280
4316
  msgid "Countries Selection"
4317
  msgstr ""
4318
 
4319
+ #: includes/class-wcj-price-by-country.php:281
4320
  msgid "Choose how do you want to enter countries groups in admin."
4321
  msgstr ""
4322
 
4323
+ #: includes/class-wcj-price-by-country.php:286
4324
  msgid "Comma separated list"
4325
  msgstr ""
4326
 
4327
+ #: includes/class-wcj-price-by-country.php:287
4328
  msgid "Multiselect"
4329
  msgstr ""
4330
 
4331
+ #: includes/class-wcj-price-by-country.php:288
4332
  msgid "Chosen select"
4333
  msgstr ""
4334
 
4335
+ #: includes/class-wcj-price-by-country.php:293
4336
  msgid "Autogenerate Groups"
4337
  msgstr ""
4338
 
4339
+ #: includes/class-wcj-price-by-country.php:298
4340
  msgid "Currencies supported in both PayPal and Yahoo Exchange Rates:"
4341
  msgstr ""
4342
 
4343
+ #: includes/class-wcj-price-by-country.php:303
4344
  msgid "Currencies supported in Yahoo Exchange Rates:"
4345
  msgstr ""
4346
 
4347
+ #: includes/class-wcj-price-by-country.php:308
4348
  msgid "All Countries and Currencies:"
4349
  msgstr ""
4350
 
4351
+ #: includes/class-wcj-price-by-country.php:315
4352
  msgid "Groups Number"
4353
  msgstr ""
4354
 
4355
+ #: includes/class-wcj-price-by-country.php:334
4356
  msgid ""
4357
  "Countries. List of comma separated country codes.<br>For country codes and "
4358
+ "predifined sets visit <a href=\"http://booster.io/country-codes/\" target="
4359
+ "\"_blank\">http://booster.io/country-codes/</a>"
4360
  msgstr ""
4361
 
4362
+ #: includes/class-wcj-price-by-country.php:410
4363
  msgid "Multiply Price by"
4364
  msgstr ""
4365
 
4366
+ #: includes/class-wcj-price-by-country.php:431
4367
+ #: includes/price-by-country/class-wcj-price-by-country-local.php:142
4368
  msgid "Make empty price"
4369
  msgstr ""
4370
 
4389
  msgstr ""
4390
 
4391
  #: includes/class-wcj-price-by-user-role.php:185
4392
+ #: includes/class-wcj-price-by-user-role.php:382
4393
  msgid "Make Empty Price"
4394
  msgstr ""
4395
 
4396
+ #: includes/class-wcj-price-by-user-role.php:329
4397
  msgid "Enable per Product Settings"
4398
  msgstr ""
4399
 
4400
+ #: includes/class-wcj-price-by-user-role.php:331
4401
  msgid ""
4402
  "When enabled, this will add new \"Booster: Price by User Role\" meta box to "
4403
  "each product's edit page."
4404
  msgstr ""
4405
 
4406
+ #: includes/class-wcj-price-by-user-role.php:337
4407
  msgid "Show Roles on per Product Settings"
4408
  msgstr ""
4409
 
4410
+ #: includes/class-wcj-price-by-user-role.php:338
4411
  msgid ""
4412
  "If per product settings is enabled, you can choose which roles to show on "
4413
  "product's edit page. Leave blank to show all roles."
4414
  msgstr ""
4415
 
4416
+ #: includes/class-wcj-price-by-user-role.php:348
4417
  msgid ""
4418
  "When enabled, this will apply user role multipliers to shipping calculations."
4419
  msgstr ""
4420
 
4421
+ #: includes/class-wcj-price-by-user-role.php:355
4422
  msgid "Disable Price by User Role for Bots"
4423
  msgstr ""
4424
 
4425
+ #: includes/class-wcj-price-by-user-role.php:366
4426
  msgid "Roles & Multipliers"
4427
  msgstr ""
4428
 
4434
  msgid "Set different WooCommerce price formats for different currencies."
4435
  msgstr ""
4436
 
4437
+ #: includes/class-wcj-price-formats.php:100
4438
  msgid "Formats"
4439
  msgstr ""
4440
 
4441
+ #: includes/class-wcj-price-formats.php:105
4442
  msgid "Total Number"
4443
  msgstr ""
4444
 
4445
+ #: includes/class-wcj-price-formats.php:120
4446
  msgid "Format"
4447
  msgstr ""
4448
 
4449
+ #: includes/class-wcj-price-formats.php:129
4450
  msgid "Currency Position"
4451
  msgstr ""
4452
 
4453
+ #: includes/class-wcj-price-formats.php:134
4454
  msgid "Left"
4455
  msgstr ""
4456
 
4457
+ #: includes/class-wcj-price-formats.php:135
4458
  msgid "Right"
4459
  msgstr ""
4460
 
4461
+ #: includes/class-wcj-price-formats.php:136
4462
  msgid "Left with space"
4463
  msgstr ""
4464
 
4465
+ #: includes/class-wcj-price-formats.php:137
4466
  msgid "Right with space"
4467
  msgstr ""
4468
 
4469
+ #: includes/class-wcj-price-formats.php:142
4470
  msgid "Thousand Separator"
4471
  msgstr ""
4472
 
4473
+ #: includes/class-wcj-price-formats.php:149
4474
  msgid "Decimal Separator"
4475
  msgstr ""
4476
 
4477
+ #: includes/class-wcj-price-formats.php:156
4478
  msgid "Number of Decimals"
4479
  msgstr ""
4480
 
4481
+ #: includes/class-wcj-price-formats.php:167
4482
  msgid "WPML Language Code"
4483
  msgstr ""
4484
 
4485
+ #: includes/class-wcj-price-formats.php:168
4486
  msgid ""
4487
  "Option to set different price formats for different WPML languages. Can be "
4488
  "comma separated list. Leave empty to disable."
4496
  msgid "Create any custom price label for any WooCommerce product."
4497
  msgstr ""
4498
 
4499
+ #: includes/class-wcj-price-labels.php:34
4500
+ #: includes/class-wcj-price-labels.php:581
4501
+ msgid "Instead of the price"
4502
  msgstr ""
4503
 
4504
+ #: includes/class-wcj-price-labels.php:35
4505
+ msgid "Before the price"
 
 
4506
  msgstr ""
4507
 
4508
+ #: includes/class-wcj-price-labels.php:36
 
 
 
 
 
 
 
 
4509
  msgid "Between regular and sale prices"
4510
  msgstr ""
4511
 
4512
+ #: includes/class-wcj-price-labels.php:37
4513
  msgid "After the price"
4514
  msgstr ""
4515
 
4516
+ #: includes/class-wcj-price-labels.php:43
4517
  msgid "Hide on home page"
4518
  msgstr ""
4519
 
4520
+ #: includes/class-wcj-price-labels.php:44
4521
  msgid "Hide on products page"
4522
  msgstr ""
4523
 
4524
+ #: includes/class-wcj-price-labels.php:45
4525
  msgid "Hide on single"
4526
  msgstr ""
4527
 
4528
+ #: includes/class-wcj-price-labels.php:46
4529
  msgid "Hide on all pages"
4530
  msgstr ""
4531
 
4532
+ #: includes/class-wcj-price-labels.php:47
4533
  msgid "Hide on cart page only"
4534
  msgstr ""
4535
 
4536
+ #: includes/class-wcj-price-labels.php:49
4537
  msgid "Hide for main price"
4538
  msgstr ""
4539
 
4540
+ #: includes/class-wcj-price-labels.php:50
4541
  msgid "Hide for all variations"
4542
  msgstr ""
4543
 
4544
+ #: includes/class-wcj-price-labels.php:145
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4545
  msgid "Booster: Custom Price Labels"
4546
  msgstr ""
4547
 
4548
+ #: includes/class-wcj-price-labels.php:515
4549
  msgid "Custom Price Labels - Globally"
4550
  msgstr ""
4551
 
4552
+ #: includes/class-wcj-price-labels.php:517
4553
  msgid "This section lets you set price labels for all products globally."
4554
  msgstr ""
4555
 
4556
+ #: includes/class-wcj-price-labels.php:521
4557
  msgid "Add before the price"
4558
  msgstr ""
4559
 
4560
+ #: includes/class-wcj-price-labels.php:522
4561
  msgid "Enter text to add before all products prices. Leave blank to disable."
4562
  msgstr ""
4563
 
4564
+ #: includes/class-wcj-price-labels.php:531
4565
  msgid "Add after the price"
4566
  msgstr ""
4567
 
4568
+ #: includes/class-wcj-price-labels.php:532
4569
  msgid "Enter text to add after all products prices. Leave blank to disable."
4570
  msgstr ""
4571
 
4572
+ #: includes/class-wcj-price-labels.php:539
4573
  msgid "Add between regular and sale prices"
4574
  msgstr ""
4575
 
4576
+ #: includes/class-wcj-price-labels.php:540
4577
  msgid ""
4578
  "Enter text to add between regular and sale prices. Leave blank to disable."
4579
  msgstr ""
4580
 
4581
+ #: includes/class-wcj-price-labels.php:549
4582
  msgid "Remove from price"
4583
  msgstr ""
4584
 
4585
+ #: includes/class-wcj-price-labels.php:551
4586
  msgid "Enter text to remove from all products prices. Leave blank to disable."
4587
  msgstr ""
4588
 
4589
+ #: includes/class-wcj-price-labels.php:560
4590
  msgid "Replace in price"
4591
  msgstr ""
4592
 
4593
+ #: includes/class-wcj-price-labels.php:561
4594
  msgid "Enter text to replace in all products prices. Leave blank to disable."
4595
  msgstr ""
4596
 
4597
+ #: includes/class-wcj-price-labels.php:572
4598
  msgid "Enter text to replace with. Leave blank to disable."
4599
  msgstr ""
4600
 
4601
+ #: includes/class-wcj-price-labels.php:582
4602
+ msgid "Enter text to display instead of the price. Leave blank to disable."
4603
+ msgstr ""
4604
+
4605
+ #: includes/class-wcj-price-labels.php:590
4606
  msgid ""
4607
  "Apply global price labels only for selected products. Leave blank to disable "
4608
  "the option."
4609
  msgstr ""
4610
 
4611
+ #: includes/class-wcj-price-labels.php:600
4612
  msgid ""
4613
  "Do not apply global price labels only for selected products. Leave blank to "
4614
  "disable the option."
4615
  msgstr ""
4616
 
4617
+ #: includes/class-wcj-price-labels.php:610
4618
  msgid ""
4619
  "Apply global price labels only for selected product categories. Leave blank "
4620
  "to disable the option."
4621
  msgstr ""
4622
 
4623
+ #: includes/class-wcj-price-labels.php:620
4624
  msgid ""
4625
  "Do not apply global price labels only for selected product categories. Leave "
4626
  "blank to disable the option."
4627
  msgstr ""
4628
 
4629
+ #: includes/class-wcj-price-labels.php:629
4630
  msgid "Product Types - Include"
4631
  msgstr ""
4632
 
4633
+ #: includes/class-wcj-price-labels.php:630
4634
  msgid ""
4635
  "Apply global price labels only for selected product types. Leave blank to "
4636
  "disable the option."
4637
  msgstr ""
4638
 
4639
+ #: includes/class-wcj-price-labels.php:636
4640
  msgid "Variable product's variation"
4641
  msgstr ""
4642
 
4643
+ #: includes/class-wcj-price-labels.php:643
4644
  msgid "Custom Price Labels - Per Product"
4645
  msgstr ""
4646
 
4647
+ #: includes/class-wcj-price-labels.php:649
4648
  msgid "This will add metaboxes to each product's admin edit page."
4649
  msgstr ""
4650
 
4676
  msgid "Open external products on add to cart in new window."
4677
  msgstr ""
4678
 
4679
+ #: includes/class-wcj-product-add-to-cart.php:33
4680
+ msgid ""
4681
+ "Replace Add to Cart button on archives with button from single product pages."
4682
+ msgstr ""
4683
+
4684
+ #: includes/class-wcj-product-add-to-cart.php:281
4685
+ #: includes/class-wcj-product-add-to-cart.php:460
4686
+ #: includes/class-wcj-product-add-to-cart.php:466
4687
+ msgid "Add to Cart on Visit"
4688
+ msgstr ""
4689
+
4690
+ #: includes/class-wcj-product-add-to-cart.php:295
4691
  msgid "Disable Add to Cart Button (Single Product Page)"
4692
  msgstr ""
4693
 
4694
+ #: includes/class-wcj-product-add-to-cart.php:305
4695
  msgid "Disable Add to Cart Button (Category/Archives)"
4696
  msgstr ""
4697
 
4698
+ #: includes/class-wcj-product-add-to-cart.php:315
4699
  msgid "Custom Add to Cart Button URL (Category/Archives)"
4700
  msgstr ""
4701
 
4702
+ #: includes/class-wcj-product-add-to-cart.php:326
4703
  msgid "As shop default (no changes)"
4704
  msgstr ""
4705
 
4706
+ #: includes/class-wcj-product-add-to-cart.php:330
4707
  msgid "Disable Add to Cart Button AJAX"
4708
  msgstr ""
4709
 
4710
+ #: includes/class-wcj-product-add-to-cart.php:430
4711
  msgid "Add to Cart Local Redirect Options"
4712
  msgstr ""
4713
 
4714
+ #: includes/class-wcj-product-add-to-cart.php:432
4715
  msgid ""
4716
  "This section lets you set any local URL to redirect to after successfully "
4717
  "adding product to cart. Leave empty to redirect to checkout page (skipping "
4718
  "the cart page)."
4719
  msgstr ""
4720
 
4721
+ #: includes/class-wcj-product-add-to-cart.php:436
4722
  msgid "Local Redirect"
4723
  msgstr ""
4724
 
4725
+ #: includes/class-wcj-product-add-to-cart.php:443
4726
  msgid "Local Redirect URL"
4727
  msgstr ""
4728
 
4729
+ #: includes/class-wcj-product-add-to-cart.php:444
4730
  msgid "Performs a safe (local) redirect, using wp_redirect()."
4731
  msgstr ""
4732
 
4733
+ #: includes/class-wcj-product-add-to-cart.php:445
4734
  msgid "Local redirect URL. Leave empty to redirect to checkout."
4735
  msgstr ""
4736
 
4737
+ #: includes/class-wcj-product-add-to-cart.php:447
4738
+ #, php-format
4739
+ msgid ""
4740
+ "For archives - \"Enable AJAX add to cart buttons on archives\" checkbox in "
4741
+ "<a href=\"%s\">WooCommerce > Settings > Products > Display</a> must be "
4742
+ "disabled."
4743
  msgstr ""
4744
 
4745
+ #: includes/class-wcj-product-add-to-cart.php:462
4746
  msgid ""
4747
  "This section lets you enable automatically adding product to cart on "
4748
  "visiting the product page. Product is only added once, so if it is already "
4749
  "in cart - duplicate product is not added. "
4750
  msgstr ""
4751
 
4752
+ #: includes/class-wcj-product-add-to-cart.php:467
4753
+ msgid ""
4754
+ "If \"Per Product\" is selected - meta box will be added to each product's "
4755
+ "edit page."
4756
+ msgstr ""
4757
+
4758
+ #: includes/class-wcj-product-add-to-cart.php:474
4759
+ msgid "Per product"
4760
+ msgstr ""
4761
+
4762
+ #: includes/class-wcj-product-add-to-cart.php:482
4763
  msgid "Add to Cart Variable Product"
4764
  msgstr ""
4765
 
4766
+ #: includes/class-wcj-product-add-to-cart.php:487
4767
  msgid "Display Radio Buttons Instead of Drop Box"
4768
  msgstr ""
4769
 
4770
+ #: includes/class-wcj-product-add-to-cart.php:500
4771
+ msgid "Replace Add to Cart Button on Archives with Single"
4772
+ msgstr ""
4773
+
4774
+ #: includes/class-wcj-product-add-to-cart.php:505
4775
+ msgid ""
4776
+ "Replace Add to Cart Button on Archives with Button from Single Product Pages"
4777
+ msgstr ""
4778
+
4779
+ #: includes/class-wcj-product-add-to-cart.php:512
4780
+ msgid "Variable products only"
4781
+ msgstr ""
4782
+
4783
+ #: includes/class-wcj-product-add-to-cart.php:520
4784
  msgid "Add to Cart Quantity"
4785
  msgstr ""
4786
 
4787
+ #: includes/class-wcj-product-add-to-cart.php:525
4788
  msgid "Disable Quantity Field for All Products"
4789
  msgstr ""
4790
 
4791
+ #: includes/class-wcj-product-add-to-cart.php:526
4792
  msgid "Disable on Single Product Page"
4793
  msgstr ""
4794
 
4795
+ #: includes/class-wcj-product-add-to-cart.php:533
4796
  msgid "Disable on Cart Page"
4797
  msgstr ""
4798
 
4799
+ #: includes/class-wcj-product-add-to-cart.php:544
4800
  msgid "Add to Cart Button Disabling"
4801
  msgstr ""
4802
 
4803
+ #: includes/class-wcj-product-add-to-cart.php:549
4804
  msgid "Disable Add to Cart Buttons on per Product Basis"
4805
  msgstr ""
4806
 
4807
+ #: includes/class-wcj-product-add-to-cart.php:551
4808
+ #: includes/class-wcj-product-add-to-cart.php:582
4809
+ #: includes/class-wcj-product-add-to-cart.php:599
4810
  msgid "This will add meta box to each product's edit page"
4811
  msgstr ""
4812
 
4813
+ #: includes/class-wcj-product-add-to-cart.php:557
4814
+ msgid "Disable Add to Cart Buttons on All Category/Archives Pages"
4815
+ msgstr ""
4816
+
4817
+ #: includes/class-wcj-product-add-to-cart.php:558
4818
+ #: includes/class-wcj-product-add-to-cart.php:565
4819
+ msgid "Disable Buttons"
4820
+ msgstr ""
4821
+
4822
+ #: includes/class-wcj-product-add-to-cart.php:564
4823
+ msgid "Disable Add to Cart Buttons on All Single Product Pages"
4824
+ msgstr ""
4825
+
4826
+ #: includes/class-wcj-product-add-to-cart.php:575
4827
  msgid "Add to Cart Button Custom URL"
4828
  msgstr ""
4829
 
4830
+ #: includes/class-wcj-product-add-to-cart.php:580
4831
  msgid "Custom Add to Cart Buttons URL on Archives on per Product Basis"
4832
  msgstr ""
4833
 
4834
+ #: includes/class-wcj-product-add-to-cart.php:592
4835
  msgid "Add to Cart Button AJAX"
4836
  msgstr ""
4837
 
4838
+ #: includes/class-wcj-product-add-to-cart.php:597
4839
  msgid "Disable/Enable Add to Cart Button AJAX on per Product Basis"
4840
  msgstr ""
4841
 
4842
+ #: includes/class-wcj-product-add-to-cart.php:614
4843
  msgid "Open External Products on Add to Cart in New Window"
4844
  msgstr ""
4845
 
4846
+ #: includes/class-wcj-product-add-to-cart.php:615
4847
  msgid "Enable on Single Product Pages"
4848
  msgstr ""
4849
 
4850
+ #: includes/class-wcj-product-add-to-cart.php:622
4851
  msgid "Enable on Category/Archive Pages"
4852
  msgstr ""
4853
 
4859
  msgid "Add (paid/free/discount) addons to WooCommerce products."
4860
  msgstr ""
4861
 
4862
+ #: includes/class-wcj-product-addons.php:100
4863
  msgid "Some of the required addons are not selected!"
4864
  msgstr ""
4865
 
4866
+ #: includes/class-wcj-product-addons.php:115
4867
  msgid ""
4868
  "Booster: Free plugin's version is limited to only three products with per "
4869
  "product addons enabled at a time. You will need to get <a href=\"http://"
4871
  "number of products with per product addons."
4872
  msgstr ""
4873
 
4874
+ #: includes/class-wcj-product-addons.php:447
4875
+ #: includes/class-wcj-wholesale-price.php:282
4876
+ #: includes/class-wcj-wholesale-price.php:317
4877
  msgid "Save product after you change this number."
4878
  msgstr ""
4879
 
4880
+ #: includes/class-wcj-product-addons.php:450
4881
+ #: includes/class-wcj-product-addons.php:561
4882
  msgid "Product Addons Total Number"
4883
  msgstr ""
4884
 
4885
+ #: includes/class-wcj-product-addons.php:457
4886
+ #: includes/class-wcj-product-addons.php:577
4887
  msgid "Product Addon"
4888
  msgstr ""
4889
 
4890
+ #: includes/class-wcj-product-addons.php:473
4891
+ #: includes/class-wcj-product-addons.php:591
4892
  msgid "Radio Buttons"
4893
  msgstr ""
4894
 
4895
+ #: includes/class-wcj-product-addons.php:477
4896
+ #: includes/class-wcj-product-addons.php:595
4897
  msgid "Label(s)"
4898
  msgstr ""
4899
 
4900
+ #: includes/class-wcj-product-addons.php:478
4901
+ #: includes/class-wcj-product-addons.php:485
4902
+ #: includes/class-wcj-product-addons.php:492
4903
+ #: includes/class-wcj-product-addons.php:596
4904
+ #: includes/class-wcj-product-addons.php:604
4905
+ #: includes/class-wcj-product-addons.php:613
4906
  msgid "For radio enter one value per line."
4907
  msgstr ""
4908
 
4909
+ #: includes/class-wcj-product-addons.php:484
4910
+ #: includes/class-wcj-product-addons.php:603
4911
  msgid "Price(s)"
4912
  msgstr ""
4913
 
4914
+ #: includes/class-wcj-product-addons.php:491
4915
+ #: includes/class-wcj-product-addons.php:612
4916
  msgid "Tooltip(s)"
4917
  msgstr ""
4918
 
4919
+ #: includes/class-wcj-product-addons.php:498
4920
+ #: includes/class-wcj-product-addons.php:620
4921
+ #: includes/class-wcj-purchase-data.php:353
4922
  msgid "Default Value"
4923
  msgstr ""
4924
 
4925
+ #: includes/class-wcj-product-addons.php:499
4926
+ #: includes/class-wcj-product-addons.php:621
4927
  msgid ""
4928
  "For checkbox use 'checked'; for radio enter default label. Leave blank for "
4929
  "no default value."
4930
  msgstr ""
4931
 
4932
+ #: includes/class-wcj-product-addons.php:505
4933
  msgid "Is required"
4934
  msgstr ""
4935
 
4936
+ #: includes/class-wcj-product-addons.php:534
4937
  msgid "Enable per Product Addons"
4938
  msgstr ""
4939
 
4940
+ #: includes/class-wcj-product-addons.php:536
4941
  msgid ""
4942
  "When enabled, this will add new \"Booster: Product Addons\" meta box to each "
4943
  "product's edit page."
4944
  msgstr ""
4945
 
4946
+ #: includes/class-wcj-product-addons.php:548
4947
  msgid "All Product Options"
4948
  msgstr ""
4949
 
4950
+ #: includes/class-wcj-product-addons.php:553
4951
  msgid "Enable All Products Addons"
4952
  msgstr ""
4953
 
4954
+ #: includes/class-wcj-product-addons.php:555
4955
  msgid "When enabled, this will add addons below to all products."
4956
  msgstr ""
4957
 
4958
+ #: includes/class-wcj-product-addons.php:562
4959
  msgid "Save changes after you change this number."
4960
  msgstr ""
4961
 
4962
+ #: includes/class-wcj-product-addons.php:628
4963
  #: includes/class-wcj-product-by-user.php:233
4964
  msgid "Is Required"
4965
  msgstr ""
4966
 
4967
+ #: includes/class-wcj-product-addons.php:648
4968
  msgid "Enable AJAX on Single Product Page"
4969
  msgstr ""
4970
 
4971
+ #: includes/class-wcj-product-addons.php:655
4972
  msgid "Addon in Cart Format"
4973
  msgstr ""
4974
 
4975
+ #: includes/class-wcj-product-addons.php:663
4976
+ #: includes/class-wcj-product-addons.php:686
4977
  msgid "Each Addon"
4978
  msgstr ""
4979
 
4980
+ #: includes/class-wcj-product-addons.php:664
4981
+ #: includes/class-wcj-product-addons.php:687
4982
  msgid "You can use %addon_label% and %addon_price%."
4983
  msgstr ""
4984
 
4985
+ #: includes/class-wcj-product-addons.php:678
4986
  msgid "Addon in Order Details Table Format"
4987
  msgstr ""
4988
 
4989
+ #: includes/class-wcj-product-addons.php:701
4990
  msgid "Admin Order Page"
4991
  msgstr ""
4992
 
4993
+ #: includes/class-wcj-product-addons.php:702
4994
  msgid "Hide all addons"
4995
  msgstr ""
4996
 
5009
  msgstr ""
5010
 
5011
  #: includes/class-wcj-product-bookings.php:145
5012
+ #: includes/class-wcj-product-open-pricing.php:214
5013
  msgid "Read more"
5014
  msgstr ""
5015
 
5052
  msgstr ""
5053
 
5054
  #: includes/class-wcj-product-bookings.php:432
 
5055
  msgid "Labels and Messages"
5056
  msgstr ""
5057
 
5090
  "product's edit page."
5091
  msgstr ""
5092
 
5093
+ #: includes/class-wcj-product-bulk-price-converter.php:26
5094
+ #: includes/class-wcj-product-bulk-price-converter.php:33
5095
  msgid "Bulk Price Converter"
5096
  msgstr ""
5097
 
5098
+ #: includes/class-wcj-product-bulk-price-converter.php:27
5099
  msgid "Multiply all WooCommerce products prices by set value."
5100
  msgstr ""
5101
 
5102
+ #: includes/class-wcj-product-bulk-price-converter.php:34
5103
  msgid "Bulk Price Converter Tool."
5104
  msgstr ""
5105
 
5106
+ #: includes/class-wcj-product-bulk-price-converter.php:151
5107
+ #: includes/class-wcj-product-by-user.php:207 includes/class-wcj-sku.php:254
5108
+ #: includes/export/class-wcj-fields-helper.php:320
5109
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:156
5110
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:329
5111
  msgid "Categories"
5112
  msgstr ""
5113
 
5114
+ #: includes/class-wcj-product-bulk-price-converter.php:152
5115
  msgid "Price Type"
5116
  msgstr ""
5117
 
5118
+ #: includes/class-wcj-product-bulk-price-converter.php:153
5119
  msgid "Original Price"
5120
  msgstr ""
5121
 
5122
+ #: includes/class-wcj-product-bulk-price-converter.php:154
5123
  msgid "Modified Price"
5124
  msgstr ""
5125
 
5126
+ #: includes/class-wcj-product-bulk-price-converter.php:207
5127
  msgid "Multiply value must be above zero."
5128
  msgstr ""
5129
 
5130
+ #: includes/class-wcj-product-bulk-price-converter.php:214
5131
  msgid "Prices changed successfully!"
5132
  msgstr ""
5133
 
5134
+ #: includes/class-wcj-product-bulk-price-converter.php:239
5135
  msgid "Multiply all product prices by"
5136
  msgstr ""
5137
 
5138
+ #: includes/class-wcj-product-bulk-price-converter.php:247
5139
  msgid "Price type to modify"
5140
  msgstr ""
5141
 
5142
+ #: includes/class-wcj-product-bulk-price-converter.php:249
5143
  msgid "Both"
5144
  msgstr ""
5145
 
5146
+ #: includes/class-wcj-product-bulk-price-converter.php:251
5147
  msgid "Sale prices only"
5148
  msgstr ""
5149
 
5150
+ #: includes/class-wcj-product-bulk-price-converter.php:253
5151
  msgid "Regular prices only"
5152
  msgstr ""
5153
 
5154
+ #: includes/class-wcj-product-bulk-price-converter.php:260
5155
  msgid "Products category"
5156
  msgstr ""
5157
 
5158
+ #: includes/class-wcj-product-bulk-price-converter.php:262
5159
+ #: includes/shortcodes/class-wcj-products-shortcodes.php:281
5160
  msgid "Any"
5161
  msgstr ""
5162
 
5163
+ #: includes/class-wcj-product-bulk-price-converter.php:264
5164
  msgid "None"
5165
  msgstr ""
5166
 
5167
+ #: includes/class-wcj-product-bulk-price-converter.php:271
5168
  msgid "\"Pretty prices\" threshold"
5169
  msgstr ""
5170
 
5171
+ #: includes/class-wcj-product-bulk-price-converter.php:275
5172
  msgid "Leave zero to disable"
5173
  msgstr ""
5174
 
5175
+ #: includes/class-wcj-product-bulk-price-converter.php:280
5176
  msgid "Preview Prices"
5177
  msgstr ""
5178
 
5179
+ #: includes/class-wcj-product-bulk-price-converter.php:287
5180
  msgid "Change Prices"
5181
  msgstr ""
5182
 
5206
  msgid "Display WooCommerce products by customer's user role."
5207
  msgstr ""
5208
 
5209
+ #: includes/class-wcj-product-by-user-role.php:121
5210
  msgid "Visible for User Roles"
5211
  msgstr ""
5212
 
5213
+ #: includes/class-wcj-product-by-user-role.php:122
5214
  msgid "Hold Control (Ctrl) key to select multiple roles."
5215
  msgstr ""
5216
 
5217
+ #: includes/class-wcj-product-by-user-role.php:142
5218
+ #: includes/export/class-wcj-fields-helper.php:313
5219
+ msgid "Visibility"
5220
+ msgstr ""
5221
+
5222
+ #: includes/class-wcj-product-by-user-role.php:148
5223
+ msgid "Purchasable"
5224
+ msgstr ""
5225
+
5226
+ #: includes/class-wcj-product-by-user-role.php:154
5227
+ msgid "Query"
5228
+ msgstr ""
5229
+
5230
+ #: includes/class-wcj-product-by-user-role.php:164
5231
  msgid ""
5232
  "When enabled, module will add new \"Booster: Product Visibility by User Role"
5233
  "\" meta box to each product's edit page."
5241
  msgid "Let users add new WooCommerce products from frontend."
5242
  msgstr ""
5243
 
5244
+ #: includes/class-wcj-product-by-user.php:57
5245
+ #: includes/class-wcj-product-by-user.php:93
5246
+ #: includes/class-wcj-shipping.php:300 includes/admin/wcj-modules-cats.php:59
5247
+ msgid "Products"
5248
+ msgstr ""
5249
+
5250
  #: includes/class-wcj-product-by-user.php:115
5251
  #: includes/class-wcj-product-by-user.php:124
5252
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:238
5253
  msgid "Wrong user ID!"
5254
  msgstr ""
5255
 
5256
+ #: includes/class-wcj-product-by-user.php:156
5257
+ #: includes/admin/class-wcj-tools.php:76
5258
+ #: includes/export/class-wcj-fields-helper.php:296
5259
+ msgid "Status"
5260
  msgstr ""
5261
 
5262
  #: includes/class-wcj-product-by-user.php:190
5264
  msgstr ""
5265
 
5266
  #: includes/class-wcj-product-by-user.php:203
5267
+ #: includes/export/class-wcj-fields-helper.php:294
5268
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:152
5269
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:274
5270
  msgid "Short Description"
5277
  msgstr ""
5278
 
5279
  #: includes/class-wcj-product-by-user.php:208
5280
+ #: includes/export/class-wcj-fields-helper.php:321
5281
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:157
5282
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:352
5283
  msgid "Tags"
5325
  msgid "\"%product_title%\" successfully edited!"
5326
  msgstr ""
5327
 
5328
+ #: includes/class-wcj-product-custom-info.php:26
5329
+ #: includes/admin/class-wc-settings-jetpack.php:296
5330
+ msgid "Product Info"
5331
+ msgstr ""
5332
+
5333
  #: includes/class-wcj-product-custom-info.php:27
5334
  #: includes/class-wcj-product-info.php:104
5335
  msgid "Add additional info to WooCommerce category and single product pages."
5336
  msgstr ""
5337
 
5338
+ #: includes/class-wcj-product-custom-info.php:91
5339
  msgid "Single"
5340
  msgstr ""
5341
 
5342
+ #: includes/class-wcj-product-custom-info.php:91
5343
  msgid "Archive"
5344
  msgstr ""
5345
 
5346
+ #: includes/class-wcj-product-custom-info.php:94
5347
  msgid "Product Custom Info Blocks"
5348
  msgstr ""
5349
 
5350
+ #: includes/class-wcj-product-custom-info.php:133
5351
  msgid "Before single product"
5352
  msgstr ""
5353
 
5354
+ #: includes/class-wcj-product-custom-info.php:134
5355
  #: includes/class-wcj-product-info.php:141
5356
  msgid "Before single product summary"
5357
  msgstr ""
5358
 
5359
+ #: includes/class-wcj-product-custom-info.php:135
5360
  #: includes/class-wcj-product-info.php:140
5361
  msgid "Inside single product summary"
5362
  msgstr ""
5363
 
5364
+ #: includes/class-wcj-product-custom-info.php:136
5365
  #: includes/class-wcj-product-info.php:142
5366
  msgid "After single product summary"
5367
  msgstr ""
5368
 
5369
+ #: includes/class-wcj-product-custom-info.php:137
5370
  msgid "After single product"
5371
  msgstr ""
5372
 
5373
+ #: includes/class-wcj-product-custom-info.php:138
5374
  msgid "Before add to cart form"
5375
  msgstr ""
5376
 
5377
+ #: includes/class-wcj-product-custom-info.php:139
5378
  msgid "Before add to cart button"
5379
  msgstr ""
5380
 
5381
+ #: includes/class-wcj-product-custom-info.php:140
5382
  msgid "After add to cart button"
5383
  msgstr ""
5384
 
5385
+ #: includes/class-wcj-product-custom-info.php:141
5386
  msgid "After add to cart form"
5387
  msgstr ""
5388
 
5389
+ #: includes/class-wcj-product-custom-info.php:144
5390
  #: includes/class-wcj-product-info.php:125
5391
  msgid "Before product"
5392
  msgstr ""
5393
 
5394
+ #: includes/class-wcj-product-custom-info.php:145
5395
  #: includes/class-wcj-product-info.php:126
5396
  msgid "Before product title"
5397
  msgstr ""
5398
 
5399
+ #: includes/class-wcj-product-custom-info.php:146
5400
  msgid "Inside product title"
5401
  msgstr ""
5402
 
5403
+ #: includes/class-wcj-product-custom-info.php:147
5404
  #: includes/class-wcj-product-info.php:128
5405
  msgid "After product title"
5406
  msgstr ""
5407
 
5408
+ #: includes/class-wcj-product-custom-info.php:148
5409
  #: includes/class-wcj-product-info.php:127
5410
  msgid "After product"
5411
  msgstr ""
5412
 
5413
+ #: includes/class-wcj-product-custom-info.php:160
5414
+ #: includes/class-wcj-products-xml.php:419
5415
  msgid "Products to Include"
5416
  msgstr ""
5417
 
5418
+ #: includes/class-wcj-product-custom-info.php:161
5419
+ #: includes/class-wcj-product-custom-info.php:171
5420
  msgid "Leave blank to disable the option."
5421
  msgstr ""
5422
 
5423
+ #: includes/class-wcj-product-custom-info.php:170
5424
+ #: includes/class-wcj-products-xml.php:428
5425
  msgid "Products to Exclude"
5426
  msgstr ""
5427
 
5433
  msgid "Customize WooCommerce products images, thumbnails and sale flashes."
5434
  msgstr ""
5435
 
5436
+ #: includes/class-wcj-product-images.php:184
5437
+ #: includes/class-wcj-product-images.php:336
5438
  msgid "Sale!"
5439
  msgstr ""
5440
 
5441
+ #: includes/class-wcj-product-images.php:199
5442
  msgid "Replace image with custom HTML on single product page"
5443
  msgstr ""
5444
 
5445
+ #: includes/class-wcj-product-images.php:205
5446
  msgid "Replace image with custom HTML on archives"
5447
  msgstr ""
5448
 
5449
+ #: includes/class-wcj-product-images.php:215
5450
  msgid "Hide Image on Single"
5451
  msgstr ""
5452
 
5453
+ #: includes/class-wcj-product-images.php:225
5454
  msgid "Hide Thumbnails on Single"
5455
  msgstr ""
5456
 
5457
+ #: includes/class-wcj-product-images.php:235
5458
  msgid "Hide Image on Archives"
5459
  msgstr ""
5460
 
5461
+ #: includes/class-wcj-product-images.php:249
5462
  msgid "Product Image and Thumbnails"
5463
  msgstr ""
5464
 
5465
+ #: includes/class-wcj-product-images.php:260
5466
  msgid "Image and Thumbnails on Single"
5467
  msgstr ""
5468
 
5469
+ #: includes/class-wcj-product-images.php:267
5470
  msgid "Image on Single"
5471
  msgstr ""
5472
 
5473
+ #: includes/class-wcj-product-images.php:274
5474
  msgid "Thumbnails on Single"
5475
  msgstr ""
5476
 
5477
+ #: includes/class-wcj-product-images.php:281
5478
  msgid "Image on Archives"
5479
  msgstr ""
5480
 
5481
+ #: includes/class-wcj-product-images.php:288
5482
  msgid "Replace Image on Single"
5483
  msgstr ""
5484
 
5485
+ #: includes/class-wcj-product-images.php:289
5486
  msgid ""
5487
  "Replace image on single product page with custom HTML. Leave blank to "
5488
  "disable."
5489
  msgstr ""
5490
 
5491
+ #: includes/class-wcj-product-images.php:296
5492
  msgid "Replace Thumbnails on Single"
5493
  msgstr ""
5494
 
5495
+ #: includes/class-wcj-product-images.php:297
5496
  msgid ""
5497
  "Replace thumbnails on single product page with custom HTML. Leave blank to "
5498
  "disable."
5499
  msgstr ""
5500
 
5501
+ #: includes/class-wcj-product-images.php:304
5502
  msgid "Replace Image on Archive"
5503
  msgstr ""
5504
 
5505
+ #: includes/class-wcj-product-images.php:305
5506
  msgid ""
5507
  "Replace image on archive pages with custom HTML. Leave blank to disable."
5508
  msgstr ""
5509
 
5510
+ #: includes/class-wcj-product-images.php:312
5511
  msgid "Single Product Thumbnails Columns"
5512
  msgstr ""
5513
 
5514
+ #: includes/class-wcj-product-images.php:323
5515
  msgid "Product Images Sale Flash"
5516
  msgstr ""
5517
 
5518
+ #: includes/class-wcj-product-images.php:334
5519
  msgid "HTML"
5520
  msgstr ""
5521
 
5522
+ #: includes/class-wcj-product-images.php:341
5523
  msgid "Hide on Archives (Categories)"
5524
  msgstr ""
5525
 
5526
+ #: includes/class-wcj-product-images.php:347
5527
  msgid "Hide on Single"
5528
  msgstr ""
5529
 
5534
  #: includes/class-wcj-product-info.php:274
5535
  #: includes/class-wcj-product-info.php:377
5536
  #: includes/class-wcj-product-info.php:410
5537
+ #: includes/class-wcj-product-tabs.php:552
5538
  msgid "Priority (i.e. Order)"
5539
  msgstr ""
5540
 
5664
  msgstr ""
5665
 
5666
  #: includes/class-wcj-product-input-fields.php:198
5667
+ #: includes/input-fields/class-wcj-product-input-fields-abstract.php:318
5668
  #: includes/input-fields/class-wcj-product-input-fields-per-product.php:164
5669
  msgid "Product Input Field"
5670
  msgstr ""
5693
  msgid "Replace Field ID with Field Label"
5694
  msgstr ""
5695
 
5696
+ #: includes/class-wcj-product-listings.php:24
5697
  msgid "Product Listings"
5698
  msgstr ""
5699
 
5700
+ #: includes/class-wcj-product-listings.php:25
5701
  msgid ""
5702
  "Change WooCommerce display options for shop and category pages: show/hide "
5703
+ "categories count, exclude categories, show/hide empty categories."
 
 
 
 
 
 
 
 
5704
  msgstr ""
5705
 
5706
+ #: includes/class-wcj-product-listings.php:197
5707
  msgid "Shop Page Display Options"
5708
  msgstr ""
5709
 
5710
+ #: includes/class-wcj-product-listings.php:200
5711
+ #, php-format
5712
  msgid ""
5713
+ "You can control what is shown on the product archive in <a href=\"%s"
5714
+ "\">WooCommerce > Settings > Products > Display > Shop page display</a>."
 
5715
  msgstr ""
5716
 
5717
+ #: includes/class-wcj-product-listings.php:206
5718
  msgid "Categories Count"
5719
  msgstr ""
5720
 
5721
+ #: includes/class-wcj-product-listings.php:207
5722
  msgid "Hide categories count on shop page"
5723
  msgstr ""
5724
 
5725
+ #: includes/class-wcj-product-listings.php:213
5726
  msgid "Exclude Categories"
5727
  msgstr ""
5728
 
5729
+ #: includes/class-wcj-product-listings.php:214
5730
  msgid ""
5731
+ " Excludes one or more categories from the shop page. Leave blank to disable."
 
 
5732
  msgstr ""
5733
 
5734
+ #: includes/class-wcj-product-listings.php:223
5735
+ #: includes/class-wcj-product-listings.php:269
5736
  msgid "Hide Empty"
5737
  msgstr ""
5738
 
5739
+ #: includes/class-wcj-product-listings.php:224
5740
  msgid "Hide empty categories on shop page"
5741
  msgstr ""
5742
 
5743
+ #: includes/class-wcj-product-listings.php:230
5744
+ #: includes/class-wcj-product-listings.php:276
5745
  msgid "Show Products"
5746
  msgstr ""
5747
 
5748
+ #: includes/class-wcj-product-listings.php:231
5749
  msgid "Show products if no categories are displayed on shop page"
5750
  msgstr ""
5751
 
5752
+ #: includes/class-wcj-product-listings.php:241
5753
  msgid "Category Display Options"
5754
  msgstr ""
5755
 
5756
+ #: includes/class-wcj-product-listings.php:244
5757
+ #, php-format
5758
  msgid ""
5759
+ "You can control what is shown on category archives in <a href=\"%s"
5760
+ "\">WooCommerce > Settings > Products > Display > Default category display</"
5761
+ "a>."
5762
  msgstr ""
5763
 
5764
+ #: includes/class-wcj-product-listings.php:250
5765
  msgid "Subcategories Count"
5766
  msgstr ""
5767
 
5768
+ #: includes/class-wcj-product-listings.php:251
5769
  msgid "Hide subcategories count on category pages"
5770
  msgstr ""
5771
 
5772
+ #: includes/class-wcj-product-listings.php:259
5773
  msgid "Exclude Subcategories"
5774
  msgstr ""
5775
 
5776
+ #: includes/class-wcj-product-listings.php:260
5777
  msgid ""
5778
+ " Excludes one or more categories from the category (archive) pages. Leave "
5779
+ "blank to disable."
 
5780
  msgstr ""
5781
 
5782
+ #: includes/class-wcj-product-listings.php:270
5783
  msgid "Hide empty subcategories on category pages"
5784
  msgstr ""
5785
 
5786
+ #: includes/class-wcj-product-listings.php:277
5787
  msgid "Show products if no categories are displayed on category page"
5788
  msgstr ""
5789
 
5790
+ #: includes/class-wcj-product-listings.php:287
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5791
  msgid "TAX Display Prices in the Shop"
5792
  msgstr ""
5793
 
5794
+ #: includes/class-wcj-product-listings.php:289
5795
  msgid ""
5796
  "If you want to display part of your products including TAX and another part "
5797
  "excluding TAX, you can set it here."
5798
  msgstr ""
5799
 
5800
+ #: includes/class-wcj-product-listings.php:293
5801
  msgid "Products - Including TAX"
5802
  msgstr ""
5803
 
5804
+ #: includes/class-wcj-product-listings.php:295
5805
  msgid "Select products to display including TAX."
5806
  msgstr ""
5807
 
5808
+ #: includes/class-wcj-product-listings.php:303
5809
  msgid "Products - Excluding TAX"
5810
  msgstr ""
5811
 
5812
+ #: includes/class-wcj-product-listings.php:305
5813
  msgid "Select products to display excluding TAX."
5814
  msgstr ""
5815
 
5816
+ #: includes/class-wcj-product-listings.php:313
5817
  msgid "Product Categories - Including TAX"
5818
  msgstr ""
5819
 
5820
+ #: includes/class-wcj-product-listings.php:315
5821
  msgid "Select product categories to display including TAX."
5822
  msgstr ""
5823
 
5824
+ #: includes/class-wcj-product-listings.php:323
5825
  msgid "Product Categories - Excluding TAX"
5826
  msgstr ""
5827
 
5828
+ #: includes/class-wcj-product-listings.php:325
5829
  msgid "Select product categories to display excluding TAX."
5830
  msgstr ""
5831
 
5838
  "Let your WooCommerce store customers enter price for the product manually."
5839
  msgstr ""
5840
 
5841
+ #: includes/class-wcj-product-open-pricing.php:132
5842
  msgid ""
5843
  "Booster: Free plugin's version is limited to only one open pricing product "
5844
  "enabled at a time. You will need to get <a href=\"http://booster.io/plus/\" "
5846
  "products."
5847
  msgstr ""
5848
 
5849
+ #: includes/class-wcj-product-open-pricing.php:186
5850
  msgid "Default Price"
5851
  msgstr ""
5852
 
5853
+ #: includes/class-wcj-product-open-pricing.php:193
5854
  msgid "Min Price"
5855
  msgstr ""
5856
 
5857
+ #: includes/class-wcj-product-open-pricing.php:200
5858
  msgid "Max Price"
5859
  msgstr ""
5860
 
5861
+ #: includes/class-wcj-product-open-pricing.php:270
5862
+ #: includes/class-wcj-product-open-pricing.php:436
5863
  msgid "Price is required!"
5864
  msgstr ""
5865
 
5866
+ #: includes/class-wcj-product-open-pricing.php:274
5867
+ #: includes/class-wcj-product-open-pricing.php:443
5868
+ msgid "Entered price is too small!"
5869
  msgstr ""
5870
 
5871
+ #: includes/class-wcj-product-open-pricing.php:280
5872
+ #: includes/class-wcj-product-open-pricing.php:450
5873
+ msgid "Entered price is too big!"
5874
  msgstr ""
5875
 
5876
+ #: includes/class-wcj-product-open-pricing.php:337
5877
+ #: includes/class-wcj-product-open-pricing.php:399
5878
  msgid "Name Your Price"
5879
  msgstr ""
5880
 
5881
+ #: includes/class-wcj-product-open-pricing.php:397
5882
  msgid "Frontend Label"
5883
  msgstr ""
5884
 
5885
+ #: includes/class-wcj-product-open-pricing.php:404
5886
  msgid "Frontend Template"
5887
  msgstr ""
5888
 
5889
+ #: includes/class-wcj-product-open-pricing.php:405
5890
  msgid "Here you can use"
5891
  msgstr ""
5892
 
5893
+ #: includes/class-wcj-product-open-pricing.php:413
5894
+ msgid "Frontend Input Style"
5895
+ msgstr ""
5896
+
5897
+ #: includes/class-wcj-product-open-pricing.php:420
5898
+ msgid "Frontend Input Placeholder"
5899
+ msgstr ""
5900
+
5901
+ #: includes/class-wcj-product-open-pricing.php:427
5902
+ msgid "Frontend Input Price Step"
5903
+ msgstr ""
5904
+
5905
+ #: includes/class-wcj-product-open-pricing.php:434
5906
  msgid "Message on Empty Price"
5907
  msgstr ""
5908
 
5909
+ #: includes/class-wcj-product-open-pricing.php:441
5910
+ msgid "Message on Price too Small"
5911
+ msgstr ""
5912
+
5913
+ #: includes/class-wcj-product-open-pricing.php:448
5914
+ msgid "Message on Price too Big"
5915
  msgstr ""
5916
 
5917
+ #: includes/class-wcj-product-open-pricing.php:455
5918
+ msgid "Enable JS Min/Max Validation"
5919
  msgstr ""
5920
 
5921
  #: includes/class-wcj-product-price-by-formula.php:27
5926
  msgid "Set formula for automatic WooCommerce product price calculation."
5927
  msgstr ""
5928
 
5929
+ #: includes/class-wcj-product-price-by-formula.php:107
5930
  msgid "Error in formula"
5931
  msgstr ""
5932
 
5933
+ #: includes/class-wcj-product-price-by-formula.php:194
5934
  msgid ""
5935
  "Booster: Free plugin's version is limited to only one price by formula "
5936
  "product enabled at a time. You will need to get <a href=\"http://booster.io/"
5938
  "by formula products."
5939
  msgstr ""
5940
 
5941
+ #: includes/class-wcj-product-price-by-formula.php:229
5942
+ msgid ""
5943
+ "'Enabled' option is ignored if 'Enable Price Calculation By Formula For All "
5944
+ "Products' option is checked in module's settings."
5945
+ msgstr ""
5946
+
5947
+ #: includes/class-wcj-product-price-by-formula.php:236
5948
  msgid "Use values below"
5949
  msgstr ""
5950
 
5951
+ #: includes/class-wcj-product-price-by-formula.php:237
5952
  msgid "Use default values"
5953
  msgstr ""
5954
 
5955
+ #: includes/class-wcj-product-price-by-formula.php:239
5956
  msgid "Calculation"
5957
  msgstr ""
5958
 
5959
+ #: includes/class-wcj-product-price-by-formula.php:245
5960
+ #: includes/class-wcj-product-price-by-formula.php:305
5961
  msgid "Formula"
5962
  msgstr ""
5963
 
5964
+ #: includes/class-wcj-product-price-by-formula.php:251
5965
  msgid "Number of Parameters"
5966
  msgstr ""
5967
 
5968
+ #: includes/class-wcj-product-price-by-formula.php:285
5969
  msgid "Final Price Preview"
5970
  msgstr ""
5971
 
5972
+ #: includes/class-wcj-product-price-by-formula.php:299
5973
  msgid "Default Settings"
5974
  msgstr ""
5975
 
5976
+ #: includes/class-wcj-product-price-by-formula.php:301
5977
  msgid ""
5978
  "You can set default settings here. All settings can later be changed in "
5979
  "individual product's edit page."
5980
  msgstr ""
5981
 
5982
+ #: includes/class-wcj-product-price-by-formula.php:306
5983
  msgid "Use \"x\" variable for product's base price. For example: x+p1*p2"
5984
  msgstr ""
5985
 
5986
+ #: includes/class-wcj-product-price-by-formula.php:312
5987
+ msgid "Enable Price Calculation By Formula For All Products"
5988
+ msgstr ""
5989
+
5990
+ #: includes/class-wcj-product-price-by-formula.php:321
5991
  msgid "Total Params"
5992
  msgstr ""
5993
 
6001
  "remove WooCommerce default product tabs."
6002
  msgstr ""
6003
 
6004
+ #: includes/class-wcj-product-tabs.php:290
6005
  msgid "Booster: Custom Tabs"
6006
  msgstr ""
6007
 
6008
+ #: includes/class-wcj-product-tabs.php:407
6009
  msgid "Total number of custom tabs"
6010
  msgstr ""
6011
 
6012
+ #: includes/class-wcj-product-tabs.php:413
6013
  #: includes/input-fields/class-wcj-product-input-fields-per-product.php:153
6014
  msgid "Click \"Update\" product after you change this number."
6015
  msgstr ""
6016
 
6017
+ #: includes/class-wcj-product-tabs.php:428
6018
+ #: includes/class-wcj-related-products.php:291
6019
+ #: includes/class-wcj-related-products.php:316
6020
  msgid "Order"
6021
  msgstr ""
6022
 
6023
+ #: includes/class-wcj-product-tabs.php:445
6024
+ #: includes/class-wcj-product-tabs.php:543
6025
+ #: includes/class-wcj-product-tabs.php:712
6026
  msgid "Custom Product Tab"
6027
  msgstr ""
6028
 
6029
+ #: includes/class-wcj-product-tabs.php:499
6030
  msgid "Custom Product Tabs Options"
6031
  msgstr ""
6032
 
6033
+ #: includes/class-wcj-product-tabs.php:501
6034
  msgid "This section lets you add custom single product tabs."
6035
  msgstr ""
6036
 
6037
+ #: includes/class-wcj-product-tabs.php:505
6038
  msgid "Custom Product Tabs Number"
6039
  msgstr ""
6040
 
6041
+ #: includes/class-wcj-product-tabs.php:560
6042
+ #: includes/class-wcj-product-tabs.php:729
6043
  msgid "You can use shortcodes here..."
6044
  msgstr ""
6045
 
6046
+ #: includes/class-wcj-product-tabs.php:568
6047
+ #: includes/class-wcj-product-tabs.php:737
6048
  msgid "PRODUCTS to HIDE this tab"
6049
  msgstr ""
6050
 
6051
+ #: includes/class-wcj-product-tabs.php:569
6052
+ #: includes/class-wcj-product-tabs.php:738
6053
  msgid "To hide this tab from some products, enter products here."
6054
  msgstr ""
6055
 
6056
+ #: includes/class-wcj-product-tabs.php:578
6057
+ #: includes/class-wcj-product-tabs.php:747
6058
  msgid "PRODUCTS to SHOW this tab"
6059
  msgstr ""
6060
 
6061
+ #: includes/class-wcj-product-tabs.php:579
6062
+ #: includes/class-wcj-product-tabs.php:748
6063
  msgid "To show this tab only for some products, enter products here."
6064
  msgstr ""
6065
 
6066
+ #: includes/class-wcj-product-tabs.php:588
6067
+ #: includes/class-wcj-product-tabs.php:757
6068
  msgid "CATEGORIES to HIDE this tab"
6069
  msgstr ""
6070
 
6071
+ #: includes/class-wcj-product-tabs.php:589
6072
+ #: includes/class-wcj-product-tabs.php:758
6073
  msgid "To hide this tab from some categories, enter categories here."
6074
  msgstr ""
6075
 
6076
+ #: includes/class-wcj-product-tabs.php:598
6077
+ #: includes/class-wcj-product-tabs.php:767
6078
  msgid "CATEGORIES to SHOW this tab"
6079
  msgstr ""
6080
 
6081
+ #: includes/class-wcj-product-tabs.php:599
6082
+ #: includes/class-wcj-product-tabs.php:768
6083
  msgid "To show this tab only for some categories, enter categories here."
6084
  msgstr ""
6085
 
6086
+ #: includes/class-wcj-product-tabs.php:608
6087
+ #: includes/class-wcj-product-tabs.php:777
6088
  msgid "TAGS to HIDE this tab"
6089
  msgstr ""
6090
 
6091
+ #: includes/class-wcj-product-tabs.php:609
6092
+ #: includes/class-wcj-product-tabs.php:778
6093
  msgid "To hide this tab from some tags, enter tags here."
6094
  msgstr ""
6095
 
6096
+ #: includes/class-wcj-product-tabs.php:618
6097
+ #: includes/class-wcj-product-tabs.php:787
6098
  msgid "TAGS to SHOW this tab"
6099
  msgstr ""
6100
 
6101
+ #: includes/class-wcj-product-tabs.php:619
6102
+ #: includes/class-wcj-product-tabs.php:788
6103
  msgid "To show this tab only for some tags, enter tags here."
6104
  msgstr ""
6105
 
6106
+ #: includes/class-wcj-product-tabs.php:628
6107
  msgid "Comma separated PRODUCT IDs to HIDE this tab"
6108
  msgstr ""
6109
 
6110
+ #: includes/class-wcj-product-tabs.php:628
6111
+ #: includes/class-wcj-product-tabs.php:637
6112
+ #: includes/class-wcj-product-tabs.php:646
6113
+ #: includes/class-wcj-product-tabs.php:655
6114
+ #: includes/classes/class-wcj-module.php:439
6115
  msgid "Deprecated"
6116
  msgstr ""
6117
 
6118
+ #: includes/class-wcj-product-tabs.php:629
6119
  msgid "To hide this tab from some products, enter product IDs here."
6120
  msgstr ""
6121
 
6122
+ #: includes/class-wcj-product-tabs.php:637
6123
  msgid "Comma separated PRODUCT IDs to SHOW this tab"
6124
  msgstr ""
6125
 
6126
+ #: includes/class-wcj-product-tabs.php:638
6127
  msgid "To show this tab only for some products, enter product IDs here."
6128
  msgstr ""
6129
 
6130
+ #: includes/class-wcj-product-tabs.php:646
6131
  msgid "Comma separated CATEGORY IDs to HIDE this tab"
6132
  msgstr ""
6133
 
6134
+ #: includes/class-wcj-product-tabs.php:647
6135
  msgid "To hide this tab from some categories, enter category IDs here."
6136
  msgstr ""
6137
 
6138
+ #: includes/class-wcj-product-tabs.php:655
6139
  msgid "Comma separated CATEGORY IDs to SHOW this tab"
6140
  msgstr ""
6141
 
6142
+ #: includes/class-wcj-product-tabs.php:656
6143
  msgid "To show this tab only for some categories, enter category IDs here."
6144
  msgstr ""
6145
 
6146
+ #: includes/class-wcj-product-tabs.php:673
6147
  msgid "Custom Product Tabs - Per Product"
6148
  msgstr ""
6149
 
6150
+ #: includes/class-wcj-product-tabs.php:675
6151
  msgid "This section lets you set defaults for per product custom tabs."
6152
  msgstr ""
6153
 
6154
+ #: includes/class-wcj-product-tabs.php:679
6155
  msgid "Enable Per Product Custom Product Tabs"
6156
  msgstr ""
6157
 
6158
+ #: includes/class-wcj-product-tabs.php:681
6159
  msgid "This will add meta boxes to each product's edit page."
6160
  msgstr ""
6161
 
6162
+ #: includes/class-wcj-product-tabs.php:687
6163
  msgid "Use Visual Editor"
6164
  msgstr ""
6165
 
6166
+ #: includes/class-wcj-product-tabs.php:694
6167
  msgid "Default Per Product Custom Product Tabs Number"
6168
  msgstr ""
6169
 
6170
+ #: includes/class-wcj-product-tabs.php:713
6171
  msgid "Default Title"
6172
  msgstr ""
6173
 
6174
+ #: includes/class-wcj-product-tabs.php:721
6175
  msgid "Default Priority (i.e. Order)"
6176
  msgstr ""
6177
 
6178
+ #: includes/class-wcj-product-tabs.php:728
6179
  msgid "Default Content"
6180
  msgstr ""
6181
 
6182
+ #: includes/class-wcj-product-tabs.php:805
6183
  msgid "WooCommerce Standard Product Tabs Options"
6184
  msgstr ""
6185
 
6186
+ #: includes/class-wcj-product-tabs.php:807
6187
  msgid "This section lets you customize single product tabs."
6188
  msgstr ""
6189
 
6190
+ #: includes/class-wcj-product-tabs.php:811
6191
  msgid "Description Tab"
6192
  msgstr ""
6193
 
6194
+ #: includes/class-wcj-product-tabs.php:812
6195
+ #: includes/class-wcj-product-tabs.php:835
6196
+ #: includes/class-wcj-product-tabs.php:858
6197
  msgid "Remove tab from product page"
6198
  msgstr ""
6199
 
6200
+ #: includes/class-wcj-product-tabs.php:819
6201
+ #: includes/class-wcj-product-tabs.php:842
6202
+ #: includes/class-wcj-product-tabs.php:865
6203
  msgid "Title."
6204
  msgstr ""
6205
 
6206
+ #: includes/class-wcj-product-tabs.php:820
6207
+ #: includes/class-wcj-product-tabs.php:843
6208
+ #: includes/class-wcj-product-tabs.php:866
6209
  msgid "Leave blank for WooCommerce defaults"
6210
  msgstr ""
6211
 
6212
+ #: includes/class-wcj-product-tabs.php:830
6213
+ #: includes/class-wcj-product-tabs.php:853
6214
+ #: includes/class-wcj-product-tabs.php:876
6215
  msgid "Priority (i.e. Order)."
6216
  msgstr ""
6217
 
6218
+ #: includes/class-wcj-product-tabs.php:834
6219
  msgid "Additional Information Tab"
6220
  msgstr ""
6221
 
6222
+ #: includes/class-wcj-product-tabs.php:857
6223
  msgid "Reviews Tab"
6224
  msgstr ""
6225
 
6226
+ #: includes/class-wcj-products-per-page.php:29
6227
+ msgid "Products per Page"
6228
+ msgstr ""
6229
+
6230
+ #: includes/class-wcj-products-per-page.php:30
6231
+ msgid "Add \"products per page\" selector to WooCommerce."
6232
+ msgstr ""
6233
+
6234
+ #: includes/class-wcj-products-per-page.php:76
6235
+ #: includes/class-wcj-products-per-page.php:169
6236
+ msgid ""
6237
+ "Products <strong>%from% - %to%</strong> from <strong>%total%</strong>. "
6238
+ "Products on page %select_form%"
6239
+ msgstr ""
6240
+
6241
+ #: includes/class-wcj-products-per-page.php:132
6242
+ msgid "Select Options"
6243
+ msgstr ""
6244
+
6245
+ #: includes/class-wcj-products-per-page.php:133
6246
+ msgid "Name|Number; one per line; -1 for all products"
6247
+ msgstr ""
6248
+
6249
+ #: includes/class-wcj-products-per-page.php:155
6250
+ msgid "Before shop loop"
6251
+ msgstr ""
6252
+
6253
+ #: includes/class-wcj-products-per-page.php:156
6254
+ msgid "After shop loop"
6255
+ msgstr ""
6256
+
6257
+ #: includes/class-wcj-products-per-page.php:160
6258
+ msgid "Position Priority"
6259
+ msgstr ""
6260
+
6261
  #: includes/class-wcj-products-xml.php:28
6262
  msgid "Products XML"
6263
  msgstr ""
6267
  msgstr ""
6268
 
6269
  #: includes/class-wcj-products-xml.php:96
6270
+ #: includes/exchange-rates/class-wcj-exchange-rates-crons.php:190
6271
  msgid "Once Weekly"
6272
  msgstr ""
6273
 
6274
  #: includes/class-wcj-products-xml.php:100
6275
+ #: includes/exchange-rates/class-wcj-exchange-rates-crons.php:194
6276
  msgid "Once a Minute"
6277
  msgstr ""
6278
 
6284
  msgid "An error has occurred while creating products XML file."
6285
  msgstr ""
6286
 
6287
+ #: includes/class-wcj-products-xml.php:312
6288
+ msgid "Advanced: Block Size"
6289
+ msgstr ""
6290
+
6291
+ #: includes/class-wcj-products-xml.php:313
6292
+ msgid ""
6293
+ "If you have large number of products you may want to modify block size for "
6294
+ "WP_Query call. Leave default value if not sure."
6295
+ msgstr ""
6296
+
6297
+ #: includes/class-wcj-products-xml.php:334
6298
  msgid "Create Now"
6299
  msgstr ""
6300
 
6301
+ #: includes/class-wcj-products-xml.php:339
6302
+ #, php-format
6303
+ msgid "Recent file was created on %s"
6304
+ msgstr ""
6305
+
6306
+ #: includes/class-wcj-products-xml.php:346
6307
  msgid "XML File"
6308
  msgstr ""
6309
 
6310
+ #: includes/class-wcj-products-xml.php:359
6311
  msgid "XML Header"
6312
  msgstr ""
6313
 
6314
+ #: includes/class-wcj-products-xml.php:360
6315
+ msgid "You can use shortcodes here. For example [wcj_current_datetime]."
6316
+ msgstr ""
6317
+
6318
+ #: includes/class-wcj-products-xml.php:367
6319
  msgid "XML Item"
6320
  msgstr ""
6321
 
6322
+ #: includes/class-wcj-products-xml.php:369
6323
+ #, php-format
6324
  msgid ""
6325
  "You can use shortcodes here. Please take a look at <a target=\"_blank\" href="
6326
  "\"%s\">Booster's products shortcodes</a>."
6327
  msgstr ""
6328
 
6329
+ #: includes/class-wcj-products-xml.php:386
6330
  msgid "XML Footer"
6331
  msgstr ""
6332
 
6333
+ #: includes/class-wcj-products-xml.php:394
6334
  msgid "XML File Path and Name"
6335
  msgstr ""
6336
 
6337
+ #: includes/class-wcj-products-xml.php:395
6338
  msgid "Path on server:"
6339
  msgstr ""
6340
 
6341
+ #: includes/class-wcj-products-xml.php:396
6342
  msgid "URL:"
6343
  msgstr ""
6344
 
6345
+ #: includes/class-wcj-products-xml.php:403
6346
  msgid "Update Period"
6347
  msgstr ""
6348
 
6349
+ #: includes/class-wcj-products-xml.php:415
6350
  msgid ""
6351
  "Possible update periods are: every minute, hourly, twice daily, daily and "
6352
  "weekly."
6353
  msgstr ""
6354
 
6355
+ #: includes/class-wcj-products-xml.php:420
6356
+ msgid ""
6357
+ "To include selected products only, enter products here. Leave blank to "
6358
+ "include all products."
6359
  msgstr ""
6360
 
6361
+ #: includes/class-wcj-products-xml.php:429
6362
+ msgid ""
6363
+ "To exclude selected products, enter products here. Leave blank to include "
6364
+ "all products."
6365
  msgstr ""
6366
 
6367
+ #: includes/class-wcj-products-xml.php:437
6368
+ msgid "Categories to Include"
6369
+ msgstr ""
6370
+
6371
+ #: includes/class-wcj-products-xml.php:438
6372
+ msgid ""
6373
+ "To include products from selected categories only, enter categories here. "
6374
+ "Leave blank to include all products."
6375
+ msgstr ""
6376
+
6377
+ #: includes/class-wcj-products-xml.php:446
6378
+ msgid "Categories to Exclude"
6379
+ msgstr ""
6380
+
6381
+ #: includes/class-wcj-products-xml.php:447
6382
+ msgid ""
6383
+ "To exclude products from selected categories, enter categories here. Leave "
6384
+ "blank to include all products."
6385
+ msgstr ""
6386
+
6387
+ #: includes/class-wcj-products-xml.php:455
6388
+ msgid "Tags to Include"
6389
+ msgstr ""
6390
+
6391
+ #: includes/class-wcj-products-xml.php:456
6392
+ msgid ""
6393
+ "To include products from selected tags only, enter tags here. Leave blank to "
6394
+ "include all products."
6395
+ msgstr ""
6396
+
6397
+ #: includes/class-wcj-products-xml.php:464
6398
+ msgid "Tags to Exclude"
6399
+ msgstr ""
6400
+
6401
+ #: includes/class-wcj-products-xml.php:465
6402
+ msgid ""
6403
+ "To exclude products from selected tags, enter tags here. Leave blank to "
6404
+ "include all products."
6405
+ msgstr ""
6406
+
6407
+ #: includes/class-wcj-products-xml.php:473
6408
+ msgid "Products Scope"
6409
+ msgstr ""
6410
+
6411
+ #: includes/class-wcj-products-xml.php:479
6412
+ msgid "Only products that are on sale"
6413
+ msgstr ""
6414
+
6415
+ #: includes/class-wcj-products-xml.php:481
6416
+ msgid "Only products that are featured"
6417
+ msgstr ""
6418
+
6419
+ #: includes/class-wcj-products-xml.php:482
6420
+ msgid "Only products that are not featured"
6421
+ msgstr ""
6422
+
6423
+ #: includes/class-wcj-purchase-data.php:26
6424
+ msgid "Product Cost Price"
6425
+ msgstr ""
6426
+
6427
+ #: includes/class-wcj-purchase-data.php:27
6428
+ msgid "Save WooCommerce product purchase costs data for admin reports."
6429
+ msgstr ""
6430
+
6431
+ #: includes/class-wcj-purchase-data.php:51
6432
+ #: includes/class-wcj-purchase-data.php:248
6433
+ #: includes/class-wcj-purchase-data.php:403
6434
  msgid "Profit"
6435
  msgstr ""
6436
 
6437
+ #: includes/class-wcj-purchase-data.php:54
6438
+ #: includes/class-wcj-purchase-data.php:410
6439
+ msgid "Purchase Cost"
6440
+ msgstr ""
6441
+
6442
+ #: includes/class-wcj-purchase-data.php:129
6443
+ #: includes/class-wcj-purchase-data.php:291
6444
  msgid "Product cost (purchase) price"
6445
  msgstr ""
6446
 
6447
+ #: includes/class-wcj-purchase-data.php:139
6448
+ #: includes/class-wcj-purchase-data.php:298
6449
  msgid "Extra expenses (shipping etc.)"
6450
  msgstr ""
6451
 
6452
+ #: includes/class-wcj-purchase-data.php:149
6453
+ #: includes/class-wcj-purchase-data.php:305
6454
  msgid "Affiliate commission"
6455
  msgstr ""
6456
 
6457
+ #: includes/class-wcj-purchase-data.php:181
6458
+ #: includes/class-wcj-purchase-data.php:372
6459
  msgid "(Last) Purchase date"
6460
  msgstr ""
6461
 
6462
+ #: includes/class-wcj-purchase-data.php:191
6463
+ #: includes/class-wcj-purchase-data.php:379
6464
  msgid "Seller"
6465
  msgstr ""
6466
 
6467
+ #: includes/class-wcj-purchase-data.php:201
6468
+ #: includes/class-wcj-purchase-data.php:386
6469
  msgid "Purchase info"
6470
  msgstr ""
6471
 
6472
+ #: includes/class-wcj-purchase-data.php:246
6473
  msgid "Selling"
6474
  msgstr ""
6475
 
6476
+ #: includes/class-wcj-purchase-data.php:247
6477
  msgid "Buying"
6478
  msgstr ""
6479
 
6480
+ #: includes/class-wcj-purchase-data.php:256
6481
  msgid "Report"
6482
  msgstr ""
6483
 
6484
+ #: includes/class-wcj-purchase-data.php:285
6485
  msgid "Price Fields"
6486
  msgstr ""
6487
 
6488
+ #: includes/class-wcj-purchase-data.php:287
6489
+ #: includes/class-wcj-purchase-data.php:318
6490
  msgid ""
6491
  "This fields will be added to product's edit page and will be included in "
6492
  "product's purchase cost calculation."
6493
  msgstr ""
6494
 
6495
+ #: includes/class-wcj-purchase-data.php:316
6496
  msgid "Custom Price Fields"
6497
  msgstr ""
6498
 
6499
+ #: includes/class-wcj-purchase-data.php:322
6500
  msgid "Total Custom Price Fields"
6501
  msgstr ""
6502
 
6503
+ #: includes/class-wcj-purchase-data.php:334
6504
  msgid "Custom Price Field"
6505
  msgstr ""
6506
 
6507
+ #: includes/class-wcj-purchase-data.php:366
 
 
 
 
 
6508
  msgid "Info Fields"
6509
  msgstr ""
6510
 
6511
+ #: includes/class-wcj-purchase-data.php:368
6512
  msgid "This fields will be added to product's edit page."
6513
  msgstr ""
6514
 
6515
+ #: includes/class-wcj-purchase-data.php:399
6516
+ msgid ""
6517
+ "This section lets you add custom columns to WooCommerce admin orders list."
6518
+ msgstr ""
6519
+
6520
+ #: includes/class-wcj-purchase-data.php:421 includes/class-wcj-sku.php:390
6521
+ msgid "More Options"
6522
+ msgstr ""
6523
+
6524
+ #: includes/class-wcj-purchase-data.php:426
6525
+ msgid "Treat Variable Products as Simple Products"
6526
+ msgstr ""
6527
+
6528
+ #: includes/class-wcj-related-products.php:41
6529
+ msgid ""
6530
+ "Change displayed WooCommerce related products number, columns, order; relate "
6531
+ "by tag, category, product attribute or manually on per product basis. Hide "
6532
+ "related products completely."
6533
  msgstr ""
6534
 
6535
+ #: includes/class-wcj-related-products.php:139
6536
  msgid ""
6537
+ "If enabled and no products selected - will hide related products section on "
6538
+ "frontend for current product."
6539
+ msgstr ""
6540
+
6541
+ #: includes/class-wcj-related-products.php:148
6542
+ msgid "Hold Control (Ctrl) key to select multiple products."
6543
  msgstr ""
6544
 
6545
+ #: includes/class-wcj-related-products.php:275
6546
  msgid "Related Products Number"
6547
  msgstr ""
6548
 
6549
+ #: includes/class-wcj-related-products.php:281
6550
  msgid "Related Products Columns"
6551
  msgstr ""
6552
 
6553
+ #: includes/class-wcj-related-products.php:296
6554
  msgid "Order by"
6555
  msgstr ""
6556
 
6557
+ #: includes/class-wcj-related-products.php:301
6558
  msgid "Random"
6559
  msgstr ""
6560
 
6561
+ #: includes/class-wcj-related-products.php:302
6562
  msgid "Date"
6563
  msgstr ""
6564
 
6565
+ #: includes/class-wcj-related-products.php:304
6566
+ msgid "Meta Value"
6567
+ msgstr ""
6568
+
6569
+ #: includes/class-wcj-related-products.php:305
6570
+ msgid "Meta Value (Numeric)"
6571
+ msgstr ""
6572
+
6573
+ #: includes/class-wcj-related-products.php:309
6574
+ msgid "Meta Key"
6575
+ msgstr ""
6576
+
6577
+ #: includes/class-wcj-related-products.php:310
6578
+ msgid ""
6579
+ "Used only if order by \"Meta Value\" or \"Meta Value (Numeric)\" is selected "
6580
+ "in \"Order by\"."
6581
+ msgstr ""
6582
+
6583
+ #: includes/class-wcj-related-products.php:317
6584
+ msgid "Ignored if order by \"Random\" is selected in \"Order by\"."
6585
  msgstr ""
6586
 
6587
+ #: includes/class-wcj-related-products.php:322
6588
  msgid "Ascending"
6589
  msgstr ""
6590
 
6591
+ #: includes/class-wcj-related-products.php:323
6592
  msgid "Descending"
6593
  msgstr ""
6594
 
6595
+ #: includes/class-wcj-related-products.php:331
6596
+ msgid "Relate"
6597
+ msgstr ""
6598
+
6599
+ #: includes/class-wcj-related-products.php:336
6600
  msgid "Relate by Category"
6601
  msgstr ""
6602
 
6603
+ #: includes/class-wcj-related-products.php:343
6604
  msgid "Relate by Tag"
6605
  msgstr ""
6606
 
6607
+ #: includes/class-wcj-related-products.php:350
6608
+ msgid "Relate by Product Attribute"
6609
+ msgstr ""
6610
+
6611
+ #: includes/class-wcj-related-products.php:357
6612
+ msgid "Attribute Type"
6613
+ msgstr ""
6614
+
6615
+ #: includes/class-wcj-related-products.php:358
6616
+ msgid ""
6617
+ "If using \"Global Attribute\" enter attribute's <em>slug</em> in \"Attribute "
6618
+ "Name\""
6619
+ msgstr ""
6620
+
6621
+ #: includes/class-wcj-related-products.php:363
6622
+ msgid "Global Attribute"
6623
+ msgstr ""
6624
+
6625
+ #: includes/class-wcj-related-products.php:364
6626
+ msgid "Local Attribute"
6627
+ msgstr ""
6628
+
6629
+ #: includes/class-wcj-related-products.php:368
6630
+ msgid "Attribute Name"
6631
+ msgstr ""
6632
+
6633
+ #: includes/class-wcj-related-products.php:374
6634
+ msgid "Attribute Value"
6635
+ msgstr ""
6636
+
6637
+ #: includes/class-wcj-related-products.php:380
6638
+ msgid "Relate Manually"
6639
+ msgstr ""
6640
+
6641
+ #: includes/class-wcj-related-products.php:382
6642
+ msgid "This will add metabox to each product's edit page."
6643
+ msgstr ""
6644
+
6645
+ #: includes/class-wcj-related-products.php:383
6646
+ msgid ""
6647
+ "You will be able to select related products manually for each product "
6648
+ "individually. There is also an option to remove related products on per "
6649
+ "product basis."
6650
+ msgstr ""
6651
+
6652
+ #: includes/class-wcj-related-products.php:400
6653
  msgid "Hide Related Products"
6654
  msgstr ""
6655
 
6656
+ #: includes/class-wcj-related-products.php:412
6657
+ #, php-format
6658
+ msgid ""
6659
+ "You may need to <a class=\"button\" href=\"%s\">clear all products "
6660
+ "transients</a> to immediately see results on frontend after changing "
6661
+ "module's settings. Alternatively you can just update each product "
6662
+ "individually to clear its transients."
6663
+ msgstr ""
6664
+
6665
  #: includes/class-wcj-reports.php:34
6666
  msgid "Reports"
6667
  msgstr ""
6674
  msgid "Booster: More Ranges - Months"
6675
  msgstr ""
6676
 
6677
+ #: includes/class-wcj-reports.php:75 includes/class-wcj-reports.php:119
6678
  msgid "Select Range"
6679
  msgstr ""
6680
 
6681
+ #: includes/class-wcj-reports.php:117
6682
  msgid "Booster: More Ranges"
6683
  msgstr ""
6684
 
6685
+ #: includes/class-wcj-reports.php:125
6686
  msgid "Last 14 Days"
6687
  msgstr ""
6688
 
6689
+ #: includes/class-wcj-reports.php:130
6690
  msgid "Last 30 Days"
6691
  msgstr ""
6692
 
6693
+ #: includes/class-wcj-reports.php:135
6694
  msgid "Last 3 Months"
6695
  msgstr ""
6696
 
6697
+ #: includes/class-wcj-reports.php:140
6698
  msgid "Last 6 Months"
6699
  msgstr ""
6700
 
6701
+ #: includes/class-wcj-reports.php:145
6702
  msgid "Last 12 Months"
6703
  msgstr ""
6704
 
6705
+ #: includes/class-wcj-reports.php:150
6706
  msgid "Last 24 Months"
6707
  msgstr ""
6708
 
6709
+ #: includes/class-wcj-reports.php:155
6710
  msgid "Same Days Last Month"
6711
  msgstr ""
6712
 
6713
+ #: includes/class-wcj-reports.php:160
6714
+ msgid "Same Days Last Year"
6715
+ msgstr ""
6716
+
6717
+ #: includes/class-wcj-reports.php:165
6718
  msgid "Last Year"
6719
  msgstr ""
6720
 
6721
+ #: includes/class-wcj-reports.php:249
6722
  msgid "Booster: Product Sales"
6723
  msgstr ""
6724
 
6725
+ #: includes/class-wcj-reports.php:256
6726
  msgid "Booster: Monthly Sales"
6727
  msgstr ""
6728
 
6729
+ #: includes/class-wcj-reports.php:271
6730
  msgid "Booster: All in stock"
6731
  msgstr ""
6732
 
6733
+ #: includes/class-wcj-reports.php:278
6734
  msgid "Booster: Understocked"
6735
  msgstr ""
6736
 
6737
+ #: includes/class-wcj-reports.php:285
6738
  msgid "Booster: Overstocked"
6739
  msgstr ""
6740
 
6741
+ #: includes/class-wcj-reports.php:300
6742
  msgid "Booster: Customers by Country"
6743
  msgstr ""
6744
 
6745
+ #: includes/class-wcj-reports.php:307
6746
  msgid "Booster: Customers by Country Sets"
6747
  msgstr ""
6748
 
6749
+ #: includes/class-wcj-reports.php:324
6750
  msgid "Product Sales"
6751
  msgstr ""
6752
 
6753
+ #: includes/class-wcj-reports.php:331
6754
+ msgid "Display item sales"
6755
+ msgstr ""
6756
+
6757
+ #: includes/class-wcj-reports.php:338
6758
+ msgid "Display sales sum"
6759
  msgstr ""
6760
 
6761
+ #: includes/class-wcj-reports.php:345
6762
+ msgid "Display profit"
6763
+ msgstr ""
6764
+
6765
+ #: includes/class-wcj-reports.php:352
6766
+ msgid "Include taxes"
6767
+ msgstr ""
6768
+
6769
+ #: includes/class-wcj-reports.php:359
6770
+ msgid "Count variations for variable products"
6771
+ msgstr ""
6772
+
6773
+ #: includes/class-wcj-reports.php:365
6774
  msgid "Monthly Sales (with currency conversions)"
6775
  msgstr ""
6776
 
6777
+ #: includes/class-wcj-reports.php:371
6778
  msgid "Customers by Country"
6779
  msgstr ""
6780
 
6781
+ #: includes/class-wcj-reports.php:377
6782
  msgid "Customers by Country Sets"
6783
  msgstr ""
6784
 
6785
+ #: includes/class-wcj-reports.php:383
6786
  msgid "All in Stock with sales data"
6787
  msgstr ""
6788
 
6789
+ #: includes/class-wcj-reports.php:389
6790
  msgid "Understocked products (calculated by sales data)"
6791
  msgstr ""
6792
 
6793
+ #: includes/class-wcj-reports.php:395
6794
  msgid "Overstocked products (calculated by sales data)"
6795
  msgstr ""
6796
 
6797
+ #: includes/class-wcj-reports.php:403
6798
  msgid "Available Reports"
6799
  msgstr ""
6800
 
6801
+ #: includes/class-wcj-reports.php:420
6802
  msgid "View report"
6803
  msgstr ""
6804
 
6880
  msgid "Hide WooCommerce shipping when free is available."
6881
  msgstr ""
6882
 
6883
+ #: includes/class-wcj-shipping.php:176
6884
  msgid "Booster: Hide shipping"
6885
  msgstr ""
6886
 
6887
+ #: includes/class-wcj-shipping.php:177 includes/class-wcj-shipping.php:274
6888
  msgid "Hide all when free is available"
6889
  msgstr ""
6890
 
6891
+ #: includes/class-wcj-shipping.php:196
6892
  msgid "WooCommerce > Settings > Shipping"
6893
  msgstr ""
6894
 
6895
+ #: includes/class-wcj-shipping.php:199 includes/class-wcj-shipping.php:206
6896
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:153
6897
  #: includes/shipping/class-wc-shipping-wcj-custom.php:85
6898
  msgid "Custom Shipping"
6899
  msgstr ""
6900
 
6901
+ #: includes/class-wcj-shipping.php:202
6902
  msgid "This section lets you add custom shipping method."
6903
  msgstr ""
6904
 
6905
+ #: includes/class-wcj-shipping.php:203
6906
+ #, php-format
6907
  msgid "Visit %s to set method's options."
6908
  msgstr ""
6909
 
6910
+ #: includes/class-wcj-shipping.php:213
6911
  msgid "Admin Title"
6912
  msgstr ""
6913
 
6914
+ #: includes/class-wcj-shipping.php:215
6915
  #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:51
6916
  msgid "Booster: Custom Shipping"
6917
  msgstr ""
6918
 
6919
+ #: includes/class-wcj-shipping.php:226
6920
  msgid "Custom Shipping (Legacy - without Shipping Zones)"
6921
  msgstr ""
6922
 
6923
+ #: includes/class-wcj-shipping.php:229
6924
  msgid "This section lets you set number of custom shipping methods to add."
6925
  msgstr ""
6926
 
6927
+ #: includes/class-wcj-shipping.php:230
6928
+ #, php-format
6929
  msgid "After setting the number, visit %s to set each method options."
6930
  msgstr ""
6931
 
6932
+ #: includes/class-wcj-shipping.php:233
6933
  msgid "Custom Shipping Methods Number"
6934
  msgstr ""
6935
 
6936
+ #: includes/class-wcj-shipping.php:245
6937
  msgid "Admin Title Custom Shipping"
6938
  msgstr ""
6939
 
6940
+ #: includes/class-wcj-shipping.php:259
6941
  msgid "Hide if Free is Available"
6942
  msgstr ""
6943
 
6944
+ #: includes/class-wcj-shipping.php:261
6945
  msgid ""
6946
  "This section lets you hide other shipping options when free shipping is "
6947
  "available on shop frontend."
6948
  msgstr ""
6949
 
6950
+ #: includes/class-wcj-shipping.php:273
6951
  msgid "Hide shipping"
6952
  msgstr ""
6953
 
6954
+ #: includes/class-wcj-shipping.php:287 includes/class-wcj-shipping.php:293
6955
+ msgid "Free Shipping by Product"
6956
+ msgstr ""
6957
+
6958
+ #: includes/class-wcj-shipping.php:288
6959
+ msgid ""
6960
+ "In this section you can select products which grant free shipping when added "
6961
+ "to cart."
6962
+ msgstr ""
6963
+
6964
+ #: includes/class-wcj-shipping.php:309
6965
+ msgid ""
6966
+ "Select either <strong>all products</strong> or <strong>at least one product</"
6967
+ "strong> in cart must grant free shipping."
6968
+ msgstr ""
6969
+
6970
+ #: includes/class-wcj-shipping.php:314
6971
+ msgid "All products in cart must grant free shipping"
6972
+ msgstr ""
6973
+
6974
+ #: includes/class-wcj-shipping.php:315
6975
+ msgid "At least one product in cart must grant free shipping"
6976
+ msgstr ""
6977
+
6978
+ #: includes/class-wcj-shipping.php:327 includes/class-wcj-shipping.php:333
6979
  msgid "Shipping Descriptions"
6980
  msgstr ""
6981
 
6982
+ #: includes/class-wcj-shipping.php:329
6983
+ #, php-format
6984
  msgid ""
6985
  "This section will allow you to add any text (e.g. description) for shipping "
6986
  "method. Text will be visible on cart and checkout pages. You can add HTML "
6987
  "tags here, e.g. try \"%s\""
6988
  msgstr ""
6989
 
6990
+ #: includes/class-wcj-shipping.php:340
6991
+ msgid "Description Visibility"
6992
+ msgstr ""
6993
+
6994
+ #: includes/class-wcj-shipping.php:345 includes/class-wcj-shipping.php:401
6995
+ msgid "On both cart and checkout pages"
6996
+ msgstr ""
6997
+
6998
+ #: includes/class-wcj-shipping.php:346 includes/class-wcj-shipping.php:402
6999
+ msgid "Only on cart page"
7000
+ msgstr ""
7001
+
7002
+ #: includes/class-wcj-shipping.php:347 includes/class-wcj-shipping.php:403
7003
+ msgid "Only on checkout page"
7004
+ msgstr ""
7005
+
7006
+ #: includes/class-wcj-shipping.php:349 includes/class-wcj-shipping.php:405
7007
+ msgid ""
7008
+ "Possible values: on both cart and checkout pages; only on cart page; only on "
7009
+ "checkout page"
7010
+ msgstr ""
7011
+
7012
+ #: includes/class-wcj-shipping.php:373 includes/class-wcj-shipping.php:379
7013
  msgid "Shipping Icons"
7014
  msgstr ""
7015
 
7016
+ #: includes/class-wcj-shipping.php:375
7017
  msgid ""
7018
  "This section will allow you to add icons for shipping method. Icons will be "
7019
  "visible on cart and checkout pages."
7020
  msgstr ""
7021
 
7022
+ #: includes/class-wcj-shipping.php:386
7023
  msgid "Icon Position"
7024
  msgstr ""
7025
 
7026
+ #: includes/class-wcj-shipping.php:391
7027
  msgid "Before label"
7028
  msgstr ""
7029
 
7030
+ #: includes/class-wcj-shipping.php:392
7031
  msgid "After label"
7032
  msgstr ""
7033
 
7034
+ #: includes/class-wcj-shipping.php:396
7035
+ msgid "Icon Visibility"
7036
+ msgstr ""
7037
+
7038
+ #: includes/class-wcj-shipping.php:410
7039
  msgid "Icon Style"
7040
  msgstr ""
7041
 
7042
+ #: includes/class-wcj-shipping.php:411
7043
  msgid ""
7044
  "You can also style icons with CSS class \"wcj_shipping_icon\", or id "
7045
  "\"wcj_shipping_icon_method_id\""
7046
  msgstr ""
7047
 
7048
+ #: includes/class-wcj-shipping.php:422
7049
+ #: includes/export/class-wcj-fields-helper.php:293
7050
  msgid "Image URL"
7051
  msgstr ""
7052
 
7053
+ #: includes/class-wcj-sku.php:26 includes/class-wcj-sku.php:255
7054
+ #: includes/export/class-wcj-fields-helper.php:285
7055
  msgid "SKU"
7056
  msgstr ""
7057
 
7067
  msgid "The tool generates and sets product SKUs for existing products."
7068
  msgstr ""
7069
 
7070
+ #: includes/class-wcj-sku.php:256
7071
+ msgid "Old SKU"
7072
+ msgstr ""
7073
+
7074
+ #: includes/class-wcj-sku.php:262
7075
  msgid "SKUs generated and set successfully!"
7076
  msgstr ""
7077
 
7078
+ #: includes/class-wcj-sku.php:268
7079
  msgid "Preview SKUs"
7080
  msgstr ""
7081
 
7082
+ #: includes/class-wcj-sku.php:269
7083
  msgid "Set SKUs"
7084
  msgstr ""
7085
 
7086
+ #: includes/class-wcj-sku.php:283
7087
  msgid "SKU Format Options"
7088
  msgstr ""
7089
 
7090
+ #: includes/class-wcj-sku.php:293
 
 
 
 
7091
  msgid "From product ID"
7092
  msgstr ""
7093
 
7094
+ #: includes/class-wcj-sku.php:301
 
 
 
 
 
7095
  msgid "Sequential Number Generation Counter"
7096
  msgstr ""
7097
 
7098
+ #: includes/class-wcj-sku.php:312 includes/class-wcj-sku.php:363
7099
  #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-numbering.php:63
7100
  msgid "Prefix"
7101
  msgstr ""
7102
 
7103
+ #: includes/class-wcj-sku.php:318
7104
  msgid "Minimum Number Length"
7105
  msgstr ""
7106
 
7107
+ #: includes/class-wcj-sku.php:324 includes/class-wcj-sku.php:372
7108
  #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-numbering.php:70
7109
  msgid "Suffix"
7110
  msgstr ""
7111
 
7112
+ #: includes/class-wcj-sku.php:332
7113
  msgid "Variable Products Variations"
7114
  msgstr ""
7115
 
7116
+ #: includes/class-wcj-sku.php:333
7117
  msgid ""
7118
  "Please note, that on new variable product creation, variations will get same "
7119
  "SKUs as parent product, and if you want variations to have different SKUs, "
7120
  "you will need to run \"Autogenerate SKUs\" tool manually."
7121
  msgstr ""
7122
 
7123
+ #: includes/class-wcj-sku.php:338
7124
  msgid "SKU same as parent's product"
7125
  msgstr ""
7126
 
7127
+ #: includes/class-wcj-sku.php:339
7128
  msgid "Generate different SKU for each variation"
7129
  msgstr ""
7130
 
7131
+ #: includes/class-wcj-sku.php:340
7132
  msgid "SKU same as parent's product + variation letter suffix"
7133
  msgstr ""
7134
 
7135
+ #: includes/class-wcj-sku.php:352
7136
  msgid "Categories Options"
7137
  msgstr ""
7138
 
7139
+ #: includes/class-wcj-sku.php:395
 
 
 
 
7140
  msgid "Automatically Generate SKU for New Products"
7141
  msgstr ""
7142
 
7143
+ #: includes/class-wcj-sku.php:397
7144
+ msgid "Alternatively you can use Autogenerate SKUs tool."
7145
  msgstr ""
7146
 
7147
+ #: includes/class-wcj-sku.php:403
7148
  msgid "Allow Duplicate SKUs"
7149
  msgstr ""
7150
 
7151
+ #: includes/class-wcj-sku.php:410
7152
+ msgid "Generate SKUs Only for Products with Empty SKU"
7153
+ msgstr ""
7154
+
7155
+ #: includes/class-wcj-sku.php:417
7156
  msgid "Add SKU to Customer Emails"
7157
  msgstr ""
7158
 
7159
+ #: includes/class-wcj-sku.php:430
7160
  msgid "When enabled - all new products will be given (autogenerated) SKU."
7161
  msgstr ""
7162
 
7163
+ #: includes/class-wcj-sku.php:431
7164
  msgid ""
7165
  "If you wish to set SKUs for existing products, use \"Autogenerate SKUs\" "
7166
  "Tool."
7172
 
7173
  #: includes/class-wcj-sorting.php:27
7174
  msgid ""
7175
+ "Add more WooCommerce sorting options; rename or remove default sorting "
7176
+ "options; rearrange sorting options on frontend."
7177
  msgstr ""
7178
 
7179
+ #: includes/class-wcj-sorting.php:167
7180
+ msgid "Default sorting"
7181
  msgstr ""
7182
 
7183
+ #: includes/class-wcj-sorting.php:168
7184
+ msgid "Sort by popularity"
7185
  msgstr ""
7186
 
7187
+ #: includes/class-wcj-sorting.php:169
7188
+ msgid "Sort by average rating"
7189
+ msgstr ""
7190
+
7191
+ #: includes/class-wcj-sorting.php:170
7192
+ msgid "Sort by newness"
7193
  msgstr ""
7194
 
7195
  #: includes/class-wcj-sorting.php:171
7196
+ msgid "Sort by price: low to high"
7197
  msgstr ""
7198
 
7199
+ #: includes/class-wcj-sorting.php:172
7200
+ msgid "Sort by price: high to low"
7201
+ msgstr ""
7202
+
7203
+ #: includes/class-wcj-sorting.php:276
7204
+ msgid "Add Custom Sorting"
7205
+ msgstr ""
7206
+
7207
+ #: includes/class-wcj-sorting.php:281
7208
  msgid "Add More Sorting"
7209
  msgstr ""
7210
 
7211
+ #: includes/class-wcj-sorting.php:288
7212
  msgid "Sort by Name"
7213
  msgstr ""
7214
 
7215
+ #: includes/class-wcj-sorting.php:289 includes/class-wcj-sorting.php:292
7216
  msgid "Sort by title: A to Z"
7217
  msgstr ""
7218
 
7219
+ #: includes/class-wcj-sorting.php:290 includes/class-wcj-sorting.php:299
7220
+ #: includes/class-wcj-sorting.php:308 includes/class-wcj-sorting.php:317
7221
+ #: includes/class-wcj-sorting.php:335 includes/class-wcj-sorting.php:344
7222
  msgid "Text to show on frontend. Leave blank to disable."
7223
  msgstr ""
7224
 
7225
+ #: includes/class-wcj-sorting.php:298 includes/class-wcj-sorting.php:301
7226
  msgid "Sort by title: Z to A"
7227
  msgstr ""
7228
 
7229
+ #: includes/class-wcj-sorting.php:306
7230
  msgid "Sort by SKU"
7231
  msgstr ""
7232
 
7233
+ #: includes/class-wcj-sorting.php:307 includes/class-wcj-sorting.php:310
7234
  msgid "Sort by SKU: low to high"
7235
  msgstr ""
7236
 
7237
+ #: includes/class-wcj-sorting.php:316 includes/class-wcj-sorting.php:319
7238
  msgid "Sort by SKU: high to low"
7239
  msgstr ""
7240
 
7241
+ #: includes/class-wcj-sorting.php:325
7242
  msgid "Sort SKUs as numbers instead of as texts"
7243
  msgstr ""
7244
 
7245
+ #: includes/class-wcj-sorting.php:333
7246
  msgid "Sort by stock quantity"
7247
  msgstr ""
7248
 
7249
+ #: includes/class-wcj-sorting.php:334 includes/class-wcj-sorting.php:337
7250
  msgid "Sort by stock quantity: low to high"
7251
  msgstr ""
7252
 
7253
+ #: includes/class-wcj-sorting.php:343 includes/class-wcj-sorting.php:346
7254
  msgid "Sort by stock quantity: high to low"
7255
  msgstr ""
7256
 
7257
+ #: includes/class-wcj-sorting.php:355 includes/class-wcj-sorting.php:360
7258
+ #: includes/class-wcj-sorting.php:367
7259
+ msgid "Rearrange Sorting"
7260
+ msgstr ""
7261
+
7262
+ #: includes/class-wcj-sorting.php:369
7263
+ msgid "Default:"
7264
+ msgstr ""
7265
+
7266
+ #: includes/class-wcj-sorting.php:379
7267
+ msgid "Default WooCommerce Sorting"
7268
+ msgstr ""
7269
+
7270
+ #: includes/class-wcj-sorting.php:384
7271
+ msgid "Default Sorting Options"
7272
+ msgstr ""
7273
+
7274
+ #: includes/class-wcj-sorting.php:418 includes/class-wcj-sorting.php:423
7275
+ msgid "Remove All Sorting"
7276
+ msgstr ""
7277
+
7278
+ #: includes/class-wcj-sorting.php:424
7279
+ msgid "Remove all sorting (including WooCommerce default) from shop's frontend"
7280
+ msgstr ""
7281
+
7282
  #: includes/class-wcj-wholesale-price.php:27
7283
  msgid "Wholesale Price"
7284
  msgstr ""
7289
  "more pay less)."
7290
  msgstr ""
7291
 
7292
+ #: includes/class-wcj-wholesale-price.php:253
7293
  msgid "Price directly"
7294
  msgstr ""
7295
 
7296
+ #: includes/class-wcj-wholesale-price.php:267
7297
  msgid "Enable per Product Levels"
7298
  msgstr ""
7299
 
7300
+ #: includes/class-wcj-wholesale-price.php:274
7301
+ #: includes/class-wcj-wholesale-price.php:400
7302
  msgid "Discount Type"
7303
  msgstr ""
7304
 
7305
+ #: includes/class-wcj-wholesale-price.php:281
7306
+ #: includes/class-wcj-wholesale-price.php:316
7307
+ #: includes/class-wcj-wholesale-price.php:436
7308
+ #: includes/class-wcj-wholesale-price.php:491
7309
  msgid "Number of levels"
7310
  msgstr ""
7311
 
7312
+ #: includes/class-wcj-wholesale-price.php:282
7313
+ #: includes/class-wcj-wholesale-price.php:317
7314
  msgid ""
7315
  "Free Booster's version is limited to one level maximum. Please visit http://"
7316
  "booster.io to get full version."
7317
  msgstr ""
7318
 
7319
+ #: includes/class-wcj-wholesale-price.php:296
7320
+ #: includes/class-wcj-wholesale-price.php:303
7321
+ #: includes/class-wcj-wholesale-price.php:331
7322
+ #: includes/class-wcj-wholesale-price.php:338
7323
  msgid "Level"
7324
  msgstr ""
7325
 
7326
+ #: includes/class-wcj-wholesale-price.php:296
7327
+ #: includes/class-wcj-wholesale-price.php:331
7328
+ #: includes/class-wcj-wholesale-price.php:449
7329
+ #: includes/class-wcj-wholesale-price.php:505
7330
  msgid "Min quantity"
7331
  msgstr ""
7332
 
7333
+ #: includes/class-wcj-wholesale-price.php:303
7334
+ #: includes/export/class-wcj-fields-helper.php:290
7335
+ #: includes/reports/wcj-class-reports-stock.php:322
7336
  msgid "Price"
7337
  msgstr ""
7338
 
7339
+ #: includes/class-wcj-wholesale-price.php:303
7340
+ #: includes/class-wcj-wholesale-price.php:338
7341
+ #: includes/class-wcj-wholesale-price.php:457
7342
+ #: includes/class-wcj-wholesale-price.php:458
7343
+ #: includes/class-wcj-wholesale-price.php:513
7344
+ #: includes/class-wcj-wholesale-price.php:514
7345
  msgid "Discount"
7346
  msgstr ""
7347
 
7348
+ #: includes/class-wcj-wholesale-price.php:360
7349
  msgid ""
7350
  "Wholesale Price Levels Options. If you want to display prices table on "
7351
  "frontend, use [wcj_product_wholesale_price_table] shortcode."
7352
  msgstr ""
7353
 
7354
+ #: includes/class-wcj-wholesale-price.php:364
7355
  msgid "Enable per Product"
7356
  msgstr ""
7357
 
7358
+ #: includes/class-wcj-wholesale-price.php:371
7359
  msgid "Use total cart quantity instead of product quantity"
7360
  msgstr ""
7361
 
7362
+ #: includes/class-wcj-wholesale-price.php:378
7363
  msgid "Apply wholesale discount only if no other cart discounts were applied"
7364
  msgstr ""
7365
 
7366
+ #: includes/class-wcj-wholesale-price.php:385
7367
  msgid "Show discount info on cart page"
7368
  msgstr ""
7369
 
7370
+ #: includes/class-wcj-wholesale-price.php:386
7371
  msgid "Show"
7372
  msgstr ""
7373
 
7374
+ #: includes/class-wcj-wholesale-price.php:392
7375
  msgid "If show discount info on cart page is enabled, set format here"
7376
  msgstr ""
7377
 
7378
+ #: includes/class-wcj-wholesale-price.php:393
7379
  msgid "Replaced values: %old_price%, %price%, %discount_value%."
7380
  msgstr ""
7381
 
7382
+ #: includes/class-wcj-wholesale-price.php:410
7383
  msgid "Products to include"
7384
  msgstr ""
7385
 
7386
+ #: includes/class-wcj-wholesale-price.php:411
7387
  msgid "Leave blank to include all products."
7388
  msgstr ""
7389
 
7390
+ #: includes/class-wcj-wholesale-price.php:419
7391
  msgid "Products to exclude"
7392
  msgstr ""
7393
 
7394
+ #: includes/class-wcj-wholesale-price.php:431
7395
  msgid "Wholesale Levels Options"
7396
  msgstr ""
7397
 
7398
+ #: includes/class-wcj-wholesale-price.php:450
7399
+ #: includes/class-wcj-wholesale-price.php:506
7400
  msgid "Minimum quantity to apply discount"
7401
  msgstr ""
7402
 
7403
+ #: includes/class-wcj-wholesale-price.php:471
7404
  msgid "Additional User Roles Options"
7405
  msgstr ""
7406
 
7407
+ #: includes/class-wcj-wholesale-price.php:473
7408
  msgid ""
7409
  "If you want to set different wholesale pricing options for different user "
7410
  "roles, fill this section. Please note that you can also use Booster's "
7411
  "\"Price by User Role\" module without filling this section."
7412
  msgstr ""
7413
 
7414
+ #: includes/class-wcj-wholesale-price.php:477
7415
  msgid "User Roles Settings"
7416
  msgstr ""
7417
 
7423
  msgid "Booster for WooCommerce basic WPML support."
7424
  msgstr ""
7425
 
7426
+ #: includes/class-wcj-wpml.php:66 includes/classes/class-wcj-module.php:351
7427
  msgid "Tools"
7428
  msgstr ""
7429
 
7430
+ #: includes/class-wcj-wpml.php:71 includes/classes/class-wcj-module.php:357
7431
  msgid "Module Tools"
7432
  msgstr ""
7433
 
7434
+ #: includes/class-wcj-wpml.php:72
7435
+ #: includes/admin/class-wc-settings-jetpack.php:112
7436
+ msgid "To use tools, module must be enabled."
7437
+ msgstr ""
7438
+
7439
+ #: includes/class-wcj-wpml.php:77 includes/class-wcj-wpml.php:80
7440
  msgid "Regenerate wpml-config.xml file"
7441
  msgstr ""
7442
 
7443
+ #: includes/class-wcj-wpml.php:105
7444
  msgid "File wpml-config.xml successfully regenerated!"
7445
  msgstr ""
7446
 
7447
+ #: includes/add-to-cart/class-wcj-add-to-cart-per-product.php:81
7448
+ msgid "Booster: Custom Add to Cart"
7449
  msgstr ""
7450
 
7451
+ #: includes/add-to-cart/class-wcj-add-to-cart-per-product.php:92
7452
+ msgid "Single product view"
7453
  msgstr ""
7454
 
7455
+ #: includes/add-to-cart/class-wcj-add-to-cart-per-product.php:93
7456
+ msgid "Product category (archive) view"
7457
  msgstr ""
7458
 
7459
+ #: includes/admin/class-wc-settings-jetpack.php:150
7460
+ msgid "Save changes"
7461
  msgstr ""
7462
 
7463
+ #: includes/admin/class-wc-settings-jetpack.php:221
7464
+ msgid "Alphabetically"
7465
  msgstr ""
7466
 
7467
+ #: includes/admin/class-wc-settings-jetpack.php:222
7468
+ msgid "By Category"
7469
  msgstr ""
7470
 
7471
+ #: includes/admin/class-wc-settings-jetpack.php:223
7472
+ msgid "Active"
7473
  msgstr ""
7474
 
7475
+ #: includes/admin/class-wc-settings-jetpack.php:224
7476
+ msgid "Manage Settings"
7477
  msgstr ""
7478
 
7479
+ #: includes/admin/class-wc-settings-jetpack.php:266
7480
+ #: includes/admin/wcj-modules-cats.php:15
7481
+ msgid "Dashboard"
7482
  msgstr ""
7483
 
7484
+ #: includes/admin/class-wc-settings-jetpack.php:302
7485
+ #, php-format
7486
+ msgid ""
7487
+ "Please note that current <em>%s</em> module is deprecated and will be "
7488
+ "removed in future updates. Please use <em>%s</em> module instead."
7489
  msgstr ""
7490
 
7491
+ #: includes/admin/class-wc-settings-jetpack.php:367
7492
+ msgid "WooCommerce"
7493
  msgstr ""
7494
 
7495
+ #: includes/admin/class-wc-settings-jetpack.php:418
7496
+ msgid ""
7497
+ "This section lets you export, import or reset all Booster's modules settings."
7498
  msgstr ""
7499
 
7500
+ #: includes/admin/class-wc-settings-jetpack.php:448
7501
+ msgid "Export all Booster's options to a file."
7502
  msgstr ""
7503
 
7504
+ #: includes/admin/class-wc-settings-jetpack.php:451
7505
+ msgid "Import"
7506
  msgstr ""
7507
 
7508
+ #: includes/admin/class-wc-settings-jetpack.php:453
7509
+ msgid "Import all Booster's options from a file."
7510
  msgstr ""
7511
 
7512
+ #: includes/admin/class-wc-settings-jetpack.php:456
7513
+ msgid ""
7514
+ "This will reset settings to defaults for all Booster modules. Are you sure?"
7515
+ msgstr ""
7516
+
7517
+ #: includes/admin/class-wc-settings-jetpack.php:456
7518
+ msgid "Reset"
7519
+ msgstr ""
7520
+
7521
+ #: includes/admin/class-wc-settings-jetpack.php:457
7522
+ msgid "Reset all Booster's options."
7523
+ msgstr ""
7524
+
7525
+ #: includes/admin/class-wc-settings-jetpack.php:470
7526
+ msgid "Version"
7527
+ msgstr ""
7528
+
7529
+ #: includes/admin/class-wc-settings-jetpack.php:494
7530
+ #: includes/admin/class-wc-settings-jetpack.php:501
7531
+ msgid "Select All"
7532
+ msgstr ""
7533
+
7534
+ #: includes/admin/class-wc-settings-jetpack.php:495
7535
+ #: includes/admin/class-wc-settings-jetpack.php:502
7536
+ #: includes/admin/class-wcj-tools.php:74
7537
+ msgid "Module"
7538
+ msgstr ""
7539
+
7540
+ #: includes/admin/class-wc-settings-jetpack.php:541
7541
+ #: includes/classes/class-wcj-module.php:512
7542
+ msgid "Documentation"
7543
+ msgstr ""
7544
+
7545
+ #: includes/admin/class-wc-settings-jetpack.php:556
7546
+ msgid "No active modules found."
7547
+ msgstr ""
7548
+
7549
+ #: includes/admin/class-wc-settings-jetpack.php:559
7550
+ msgid "Total Modules:"
7551
+ msgstr ""
7552
+
7553
+ #: includes/admin/class-wc-settings-jetpack.php:585
7554
+ msgid "Autoload Booster's Options"
7555
+ msgstr ""
7556
+
7557
+ #: includes/admin/class-wc-settings-jetpack.php:587
7558
+ msgid ""
7559
+ "Choose if you want Booster's options to be autoloaded when calling "
7560
+ "add_option. After saving this option, you need to Reset all Booster's "
7561
+ "settings. Leave default value (i.e. Enabled) if not sure."
7562
+ msgstr ""
7563
+
7564
+ #: includes/admin/class-wcj-tools.php:34
7565
+ msgid "Booster for WooCommerce Tools"
7566
+ msgstr ""
7567
+
7568
+ #: includes/admin/class-wcj-tools.php:35
7569
+ msgid "Booster Tools"
7570
+ msgstr ""
7571
+
7572
+ #: includes/admin/class-wcj-tools.php:53
7573
+ msgid "Tools Dashboard"
7574
+ msgstr ""
7575
+
7576
+ #: includes/admin/class-wcj-tools.php:67
7577
+ msgid "Booster for WooCommerce Tools - Dashboard"
7578
+ msgstr ""
7579
+
7580
+ #: includes/admin/class-wcj-tools.php:68
7581
+ msgid ""
7582
+ "This dashboard lets you check statuses and short descriptions of all "
7583
+ "available Booster for WooCommerce tools. Tools can be enabled through "
7584
+ "WooCommerce > Settings > Booster. Enabled tools will appear in the tabs menu "
7585
+ "above."
7586
+ msgstr ""
7587
+
7588
+ #: includes/admin/class-wcj-tools.php:73
7589
+ msgid "Tool"
7590
+ msgstr ""
7591
+
7592
+ #: includes/admin/wcj-modules-cats.php:16
7593
+ msgid ""
7594
+ "This dashboard lets you enable/disable any Booster's module. Each checkbox "
7595
+ "comes with short module's description. Please visit <a href=\"http://booster."
7596
+ "io\" target=\"_blank\">http://booster.io</a> for detailed info on each "
7597
+ "feature."
7598
+ msgstr ""
7599
+
7600
+ #: includes/admin/wcj-modules-cats.php:26
7601
+ msgid "Prices & Currencies"
7602
+ msgstr ""
7603
+
7604
+ #: includes/admin/wcj-modules-cats.php:27
7605
+ msgid ""
7606
+ "Multicurrency, Price Converter, Wholesale Pricing, Name You Price, Price by "
7607
+ "User Role and more."
7608
+ msgstr ""
7609
+
7610
+ #: includes/admin/wcj-modules-cats.php:47
7611
+ msgid "Button & Price Labels"
7612
+ msgstr ""
7613
+
7614
+ #: includes/admin/wcj-modules-cats.php:48
7615
+ msgid "Add to Cart Labels, Call for Price, Custom Price Labels and more."
7616
+ msgstr ""
7617
+
7618
+ #: includes/admin/wcj-modules-cats.php:60
7619
+ msgid ""
7620
+ "Bookings, Crowdfunding Products, Product Addons and Input Fields, Product "
7621
+ "Listings, Product Tabs and more."
7622
+ msgstr ""
7623
+
7624
+ #: includes/admin/wcj-modules-cats.php:84
7625
+ msgid "Cart & Checkout"
7626
+ msgstr ""
7627
+
7628
+ #: includes/admin/wcj-modules-cats.php:85
7629
+ msgid "Cart and Checkout Customization, Empty Cart Button, Mini Cart and more."
7630
+ msgstr ""
7631
+
7632
+ #: includes/admin/wcj-modules-cats.php:102
7633
+ msgid ""
7634
+ "Custom Payment Gateways, Gateways Currency, Gateways Fees and Discounts and "
7635
+ "more."
7636
+ msgstr ""
7637
+
7638
+ #: includes/admin/wcj-modules-cats.php:117
7639
+ msgid "Shipping & Orders"
7640
+ msgstr ""
7641
+
7642
+ #: includes/admin/wcj-modules-cats.php:118
7643
+ msgid ""
7644
+ "Order Custom Statuses, Order Minimum Amount, Order Numbers, Custom Shipping "
7645
+ "Methods and more."
7646
+ msgstr ""
7647
+
7648
+ #: includes/admin/wcj-modules-cats.php:132
7649
+ msgid "PDF Invoicing & Packing Slips"
7650
+ msgstr ""
7651
+
7652
+ #: includes/admin/wcj-modules-cats.php:133
7653
+ msgid "PDF Documents"
7654
+ msgstr ""
7655
+
7656
+ #: includes/admin/wcj-modules-cats.php:148
7657
+ msgid "Emails & Misc."
7658
+ msgstr ""
7659
+
7660
+ #: includes/admin/wcj-modules-cats.php:149
7661
+ msgid "Emails, Reports, Export, Admin Tools, General Options and more."
7662
+ msgstr ""
7663
+
7664
+ #: includes/classes/class-wcj-module.php:339
7665
+ msgid "Back to Module Settings"
7666
+ msgstr ""
7667
+
7668
+ #: includes/classes/class-wcj-module.php:431
7669
+ msgid "disabled"
7670
+ msgstr ""
7671
+
7672
+ #: includes/classes/class-wcj-module.php:477
7673
+ msgid "Reset Settings"
7674
+ msgstr ""
7675
+
7676
+ #: includes/classes/class-wcj-module.php:483
7677
+ msgid "Reset Module to Default Settings"
7678
+ msgstr ""
7679
+
7680
+ #: includes/classes/class-wcj-module.php:484
7681
+ msgid "Reset Submodule to Default Settings"
7682
+ msgstr ""
7683
+
7684
+ #: includes/classes/class-wcj-module.php:488
7685
+ msgid "Reset settings"
7686
+ msgstr ""
7687
+
7688
+ #: includes/classes/class-wcj-module.php:516
7689
+ msgid "Module Options"
7690
+ msgstr ""
7691
+
7692
+ #: includes/classes/class-wcj-module.php:523
7693
+ msgid "Enable Module"
7694
+ msgstr ""
7695
+
7696
+ #: includes/currencies/wcj-currencies.php:14
7697
+ msgid "United Arab Emirates Dirham"
7698
+ msgstr ""
7699
+
7700
+ #: includes/currencies/wcj-currencies.php:15
7701
+ msgid "Afghan afghani"
7702
+ msgstr ""
7703
+
7704
+ #: includes/currencies/wcj-currencies.php:16
7705
+ msgid "Albanian lek"
7706
+ msgstr ""
7707
+
7708
+ #: includes/currencies/wcj-currencies.php:17
7709
+ msgid "Armenian dram"
7710
+ msgstr ""
7711
+
7712
+ #: includes/currencies/wcj-currencies.php:18
7713
+ msgid "Netherlands Antillean gulden"
7714
+ msgstr ""
7715
+
7716
+ #: includes/currencies/wcj-currencies.php:19
7717
+ msgid "Angolan kwanza"
7718
+ msgstr ""
7719
+
7720
+ #: includes/currencies/wcj-currencies.php:20
7721
+ msgid "Argentine Peso"
7722
+ msgstr ""
7723
+
7724
+ #: includes/currencies/wcj-currencies.php:21
7725
+ msgid "Australian Dollars"
7726
  msgstr ""
7727
 
7728
  #: includes/currencies/wcj-currencies.php:22
8159
  msgstr ""
8160
 
8161
  #: includes/currencies/wcj-currencies.php:130
8162
+ msgid "Paraguayan Guaran"
8163
  msgstr ""
8164
 
8165
  #: includes/currencies/wcj-currencies.php:131
8357
  msgstr ""
8358
 
8359
  #: includes/emails/class-wc-email-wcj-custom.php:251
8360
+ #, php-format
8361
  msgid "New order (%s)"
8362
  msgstr ""
8363
 
8364
  #: includes/emails/class-wc-email-wcj-custom.php:252
8365
+ #, php-format
8366
  msgid "Order status updated to %s"
8367
  msgstr ""
8368
 
8369
  #: includes/emails/class-wc-email-wcj-custom.php:255
8370
+ #, php-format
8371
  msgid "Order status %s to %s"
8372
  msgstr ""
8373
 
8434
  msgstr ""
8435
 
8436
  #: includes/emails/class-wc-email-wcj-custom.php:297
8437
+ #, php-format
8438
  msgid ""
8439
  "Enter recipients (comma separated) for this email. Defaults to <code>%s</"
8440
  "code>."
8449
  msgstr ""
8450
 
8451
  #: includes/emails/class-wc-email-wcj-custom.php:304
8452
+ #, php-format
8453
  msgid ""
8454
  "This controls the email subject line. Leave blank to use the default "
8455
  "subject: <code>%s</code>."
8460
  msgstr ""
8461
 
8462
  #: includes/emails/class-wc-email-wcj-custom.php:311
8463
+ #, php-format
8464
  msgid ""
8465
  "This controls the main heading contained within the email notification. "
8466
  "Leave blank to use the default heading: <code>%s</code>."
8487
  msgid "Plain text template"
8488
  msgstr ""
8489
 
8490
+ #: includes/exchange-rates/class-wcj-exchange-rates-crons.php:165
8491
  msgid "Cron job: exchange rates successfully updated"
8492
  msgstr ""
8493
 
8494
+ #: includes/exchange-rates/class-wcj-exchange-rates-crons.php:167
8495
  msgid "Cron job: exchange rates not updated, as currency_from == currency_to"
8496
  msgstr ""
8497
 
8498
+ #: includes/exchange-rates/class-wcj-exchange-rates-crons.php:170
8499
  msgid "Cron job: exchange rates update failed"
8500
  msgstr ""
8501
 
8502
+ #: includes/exchange-rates/class-wcj-exchange-rates.php:104
8503
+ #, php-format
8504
+ msgid "Grab %s rate from %s"
8505
  msgstr ""
8506
 
8507
  #: includes/export/class-wcj-fields-helper.php:36
8508
+ msgid "Customer Nr."
 
 
8509
  msgstr ""
8510
 
8511
  #: includes/export/class-wcj-fields-helper.php:37
8512
+ #: includes/export/class-wcj-fields-helper.php:133
8513
+ #: includes/export/class-wcj-fields-helper.php:218
8514
+ msgid "Billing Email"
8515
  msgstr ""
8516
 
8517
  #: includes/export/class-wcj-fields-helper.php:38
8518
  #: includes/export/class-wcj-fields-helper.php:123
8519
  #: includes/export/class-wcj-fields-helper.php:208
8520
+ msgid "Billing First Name"
8521
  msgstr ""
8522
 
8523
  #: includes/export/class-wcj-fields-helper.php:39
8524
  #: includes/export/class-wcj-fields-helper.php:124
8525
  #: includes/export/class-wcj-fields-helper.php:209
8526
+ msgid "Billing Last Name"
8527
  msgstr ""
8528
 
8529
  #: includes/export/class-wcj-fields-helper.php:40
8530
  #: includes/export/class-wcj-fields-helper.php:125
8531
  #: includes/export/class-wcj-fields-helper.php:210
8532
+ msgid "Billing Company"
8533
  msgstr ""
8534
 
8535
  #: includes/export/class-wcj-fields-helper.php:41
8536
  #: includes/export/class-wcj-fields-helper.php:126
8537
  #: includes/export/class-wcj-fields-helper.php:211
8538
+ msgid "Billing Address 1"
8539
  msgstr ""
8540
 
8541
  #: includes/export/class-wcj-fields-helper.php:42
8542
  #: includes/export/class-wcj-fields-helper.php:127
8543
  #: includes/export/class-wcj-fields-helper.php:212
8544
+ msgid "Billing Address 2"
8545
  msgstr ""
8546
 
8547
  #: includes/export/class-wcj-fields-helper.php:43
8548
  #: includes/export/class-wcj-fields-helper.php:128
8549
  #: includes/export/class-wcj-fields-helper.php:213
8550
+ msgid "Billing City"
8551
  msgstr ""
8552
 
8553
  #: includes/export/class-wcj-fields-helper.php:44
8554
  #: includes/export/class-wcj-fields-helper.php:129
8555
  #: includes/export/class-wcj-fields-helper.php:214
8556
+ msgid "Billing State"
8557
  msgstr ""
8558
 
8559
  #: includes/export/class-wcj-fields-helper.php:45
8560
  #: includes/export/class-wcj-fields-helper.php:130
8561
  #: includes/export/class-wcj-fields-helper.php:215
8562
+ msgid "Billing Postcode"
8563
  msgstr ""
8564
 
8565
  #: includes/export/class-wcj-fields-helper.php:46
8566
  #: includes/export/class-wcj-fields-helper.php:131
8567
  #: includes/export/class-wcj-fields-helper.php:216
8568
+ msgid "Billing Country"
8569
  msgstr ""
8570
 
8571
  #: includes/export/class-wcj-fields-helper.php:47
8572
+ #: includes/export/class-wcj-fields-helper.php:132
8573
+ #: includes/export/class-wcj-fields-helper.php:217
8574
+ msgid "Billing Phone"
8575
+ msgstr ""
8576
+
8577
+ #: includes/export/class-wcj-fields-helper.php:48
8578
  msgid "Last Order Date"
8579
  msgstr ""
8580
 
8581
+ #: includes/export/class-wcj-fields-helper.php:76
8582
  msgid "Customer ID"
8583
  msgstr ""
8584
 
8585
+ #: includes/export/class-wcj-fields-helper.php:78
8586
  msgid "First Name"
8587
  msgstr ""
8588
 
8589
+ #: includes/export/class-wcj-fields-helper.php:79
8590
  msgid "Last Name"
8591
  msgstr ""
8592
 
8593
+ #: includes/export/class-wcj-fields-helper.php:80
8594
  msgid "Login"
8595
  msgstr ""
8596
 
8597
+ #: includes/export/class-wcj-fields-helper.php:81
8598
  msgid "Nicename"
8599
  msgstr ""
8600
 
8601
+ #: includes/export/class-wcj-fields-helper.php:82
8602
+ #: includes/export/class-wcj-fields-helper.php:297
8603
  #: includes/gateways/class-wc-gateway-wcj-custom.php:163
8604
  msgid "URL"
8605
  msgstr ""
8606
 
8607
+ #: includes/export/class-wcj-fields-helper.php:83
8608
  #: includes/reports/wcj-class-reports-customers.php:94
8609
  msgid "Registered"
8610
  msgstr ""
8611
 
8612
+ #: includes/export/class-wcj-fields-helper.php:84
8613
  msgid "Display Name"
8614
  msgstr ""
8615
 
 
 
 
 
 
 
 
 
 
 
 
8616
  #: includes/export/class-wcj-fields-helper.php:113
8617
  #: includes/export/class-wcj-fields-helper.php:196
8618
+ msgid "Order Number"
8619
  msgstr ""
8620
 
8621
  #: includes/export/class-wcj-fields-helper.php:114
8622
  #: includes/export/class-wcj-fields-helper.php:197
8623
+ msgid "Order Status"
8624
  msgstr ""
8625
 
8626
  #: includes/export/class-wcj-fields-helper.php:115
8627
  #: includes/export/class-wcj-fields-helper.php:198
8628
+ msgid "Order Date"
8629
  msgstr ""
8630
 
8631
  #: includes/export/class-wcj-fields-helper.php:116
8632
  #: includes/export/class-wcj-fields-helper.php:199
8633
+ msgid "Order Time"
8634
  msgstr ""
8635
 
8636
+ #: includes/export/class-wcj-fields-helper.php:117
8637
+ #: includes/export/class-wcj-fields-helper.php:200
8638
+ msgid "Order Item Count"
 
8639
  msgstr ""
8640
 
8641
  #: includes/export/class-wcj-fields-helper.php:119
8642
  #: includes/export/class-wcj-fields-helper.php:204
8643
+ #: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:260
8644
+ msgid "Order Total"
8645
  msgstr ""
8646
 
8647
  #: includes/export/class-wcj-fields-helper.php:120
8648
  #: includes/export/class-wcj-fields-helper.php:205
8649
+ msgid "Order Total Tax"
8650
  msgstr ""
8651
 
8652
+ #: includes/export/class-wcj-fields-helper.php:121
8653
+ #: includes/export/class-wcj-fields-helper.php:206
8654
+ msgid "Order Payment Method"
8655
  msgstr ""
8656
 
8657
  #: includes/export/class-wcj-fields-helper.php:134
8658
  #: includes/export/class-wcj-fields-helper.php:219
8659
+ msgid "Shipping First Name"
8660
  msgstr ""
8661
 
8662
  #: includes/export/class-wcj-fields-helper.php:135
8663
  #: includes/export/class-wcj-fields-helper.php:220
8664
+ msgid "Shipping Last Name"
8665
  msgstr ""
8666
 
8667
  #: includes/export/class-wcj-fields-helper.php:136
8668
  #: includes/export/class-wcj-fields-helper.php:221
8669
+ msgid "Shipping Company"
8670
  msgstr ""
8671
 
8672
  #: includes/export/class-wcj-fields-helper.php:137
8673
  #: includes/export/class-wcj-fields-helper.php:222
8674
+ msgid "Shipping Address 1"
8675
  msgstr ""
8676
 
8677
  #: includes/export/class-wcj-fields-helper.php:138
8678
  #: includes/export/class-wcj-fields-helper.php:223
8679
+ msgid "Shipping Address 2"
8680
  msgstr ""
8681
 
8682
  #: includes/export/class-wcj-fields-helper.php:139
8683
  #: includes/export/class-wcj-fields-helper.php:224
8684
+ msgid "Shipping City"
8685
  msgstr ""
8686
 
8687
  #: includes/export/class-wcj-fields-helper.php:140
8688
  #: includes/export/class-wcj-fields-helper.php:225
8689
+ msgid "Shipping State"
8690
  msgstr ""
8691
 
8692
  #: includes/export/class-wcj-fields-helper.php:141
8693
  #: includes/export/class-wcj-fields-helper.php:226
8694
+ msgid "Shipping Postcode"
8695
+ msgstr ""
8696
+
8697
+ #: includes/export/class-wcj-fields-helper.php:142
8698
+ #: includes/export/class-wcj-fields-helper.php:227
8699
  msgid "Shipping Country"
8700
  msgstr ""
8701
 
8702
+ #: includes/export/class-wcj-fields-helper.php:144
8703
  msgid "Item Name"
8704
  msgstr ""
8705
 
8706
+ #: includes/export/class-wcj-fields-helper.php:145
8707
  msgid "Item Meta"
8708
  msgstr ""
8709
 
8710
+ #: includes/export/class-wcj-fields-helper.php:146
8711
  msgid "Item Variation Meta"
8712
  msgstr ""
8713
 
8714
+ #: includes/export/class-wcj-fields-helper.php:147
8715
  msgid "Item Quantity"
8716
  msgstr ""
8717
 
8718
+ #: includes/export/class-wcj-fields-helper.php:148
8719
  msgid "Item Tax Class"
8720
  msgstr ""
8721
 
8722
+ #: includes/export/class-wcj-fields-helper.php:149
8723
  msgid "Item Product ID"
8724
  msgstr ""
8725
 
8726
+ #: includes/export/class-wcj-fields-helper.php:150
8727
  msgid "Item Variation ID"
8728
  msgstr ""
8729
 
8730
+ #: includes/export/class-wcj-fields-helper.php:151
8731
  msgid "Item Line Subtotal"
8732
  msgstr ""
8733
 
8734
+ #: includes/export/class-wcj-fields-helper.php:152
8735
  msgid "Item Line Total"
8736
  msgstr ""
8737
 
8738
+ #: includes/export/class-wcj-fields-helper.php:153
8739
  msgid "Item Line Subtotal Tax"
8740
  msgstr ""
8741
 
8742
+ #: includes/export/class-wcj-fields-helper.php:154
8743
  msgid "Item Line Tax"
8744
  msgstr ""
8745
 
8746
+ #: includes/export/class-wcj-fields-helper.php:155
8747
  msgid "Item Line Subtotal Plus Tax"
8748
  msgstr ""
8749
 
8750
+ #: includes/export/class-wcj-fields-helper.php:156
8751
  msgid "Item Line Total Plus Tax"
8752
  msgstr ""
8753
 
8754
+ #: includes/export/class-wcj-fields-helper.php:157
8755
  msgid "Item Product Input Fields"
8756
  msgstr ""
8757
 
8758
+ #: includes/export/class-wcj-fields-helper.php:201
8759
  msgid "Order Items"
8760
  msgstr ""
8761
 
8762
+ #: includes/export/class-wcj-fields-helper.php:202
8763
  msgid "Order Items Product Input Fields"
8764
  msgstr ""
8765
 
8766
+ #: includes/export/class-wcj-fields-helper.php:282
8767
  msgid "Product ID"
8768
  msgstr ""
8769
 
8770
+ #: includes/export/class-wcj-fields-helper.php:283
8771
+ msgid "Parent Product ID"
8772
+ msgstr ""
8773
+
8774
+ #: includes/export/class-wcj-fields-helper.php:286
8775
  msgid "Total Stock"
8776
  msgstr ""
8777
 
8778
+ #: includes/export/class-wcj-fields-helper.php:287
8779
  msgid "Stock Quantity"
8780
  msgstr ""
8781
 
8782
+ #: includes/export/class-wcj-fields-helper.php:298
8783
  msgid "Shipping Class"
8784
  msgstr ""
8785
 
8786
+ #: includes/export/class-wcj-fields-helper.php:299
8787
  msgid "Shipping Class ID"
8788
  msgstr ""
8789
 
8790
+ #: includes/export/class-wcj-fields-helper.php:300
8791
  msgid "Width"
8792
  msgstr ""
8793
 
8794
+ #: includes/export/class-wcj-fields-helper.php:301
8795
  msgid "Length"
8796
  msgstr ""
8797
 
8798
+ #: includes/export/class-wcj-fields-helper.php:302
8799
  msgid "Height"
8800
  msgstr ""
8801
 
8802
+ #: includes/export/class-wcj-fields-helper.php:303
8803
  msgid "Weight"
8804
  msgstr ""
8805
 
8806
+ #: includes/export/class-wcj-fields-helper.php:304
8807
  msgid "Downloadable"
8808
  msgstr ""
8809
 
8810
+ #: includes/export/class-wcj-fields-helper.php:305
8811
  msgid "Virtual"
8812
  msgstr ""
8813
 
8814
+ #: includes/export/class-wcj-fields-helper.php:306
8815
  msgid "Sold Individually"
8816
  msgstr ""
8817
 
8818
+ #: includes/export/class-wcj-fields-helper.php:307
8819
  msgid "Tax Status"
8820
  msgstr ""
8821
 
8822
+ #: includes/export/class-wcj-fields-helper.php:309
 
 
 
 
8823
  msgid "Manage Stock"
8824
  msgstr ""
8825
 
8826
+ #: includes/export/class-wcj-fields-helper.php:310
8827
  msgid "Stock Status"
8828
  msgstr ""
8829
 
8830
+ #: includes/export/class-wcj-fields-helper.php:311
8831
  msgid "Backorders"
8832
  msgstr ""
8833
 
8834
+ #: includes/export/class-wcj-fields-helper.php:312
8835
  msgid "Featured"
8836
  msgstr ""
8837
 
8838
+ #: includes/export/class-wcj-fields-helper.php:314
 
 
 
 
8839
  msgid "Price Including Tax"
8840
  msgstr ""
8841
 
8842
+ #: includes/export/class-wcj-fields-helper.php:315
8843
  msgid "Price Excluding Tax"
8844
  msgstr ""
8845
 
8846
+ #: includes/export/class-wcj-fields-helper.php:316
8847
  msgid "Display Price"
8848
  msgstr ""
8849
 
8850
+ #: includes/export/class-wcj-fields-helper.php:317
8851
  msgid "Average Rating"
8852
  msgstr ""
8853
 
8854
+ #: includes/export/class-wcj-fields-helper.php:318
8855
  msgid "Rating Count"
8856
  msgstr ""
8857
 
8858
+ #: includes/export/class-wcj-fields-helper.php:319
8859
  msgid "Review Count"
8860
  msgstr ""
8861
 
8862
+ #: includes/export/class-wcj-fields-helper.php:322
8863
  msgid "Dimensions"
8864
  msgstr ""
8865
 
8866
+ #: includes/export/class-wcj-fields-helper.php:323
8867
  msgid "Formatted Name"
8868
  msgstr ""
8869
 
8870
+ #: includes/export/class-wcj-fields-helper.php:324
8871
  msgid "Availability"
8872
  msgstr ""
8873
 
8874
+ #: includes/export/class-wcj-fields-helper.php:325
8875
  msgid "Availability Class"
8876
  msgstr ""
8877
 
8878
+ #: includes/functions/wcj-country-functions.php:125
8879
  msgid "Afghanistan"
8880
  msgstr ""
8881
 
8882
+ #: includes/functions/wcj-country-functions.php:126
8883
  msgid "&#197;land Islands"
8884
  msgstr ""
8885
 
8886
+ #: includes/functions/wcj-country-functions.php:127
8887
  msgid "Albania"
8888
  msgstr ""
8889
 
8890
+ #: includes/functions/wcj-country-functions.php:128
8891
  msgid "Algeria"
8892
  msgstr ""
8893
 
8894
+ #: includes/functions/wcj-country-functions.php:129
8895
  msgid "Andorra"
8896
  msgstr ""
8897
 
8898
+ #: includes/functions/wcj-country-functions.php:130
8899
  msgid "Angola"
8900
  msgstr ""
8901
 
8902
+ #: includes/functions/wcj-country-functions.php:131
8903
  msgid "Anguilla"
8904
  msgstr ""
8905
 
8906
+ #: includes/functions/wcj-country-functions.php:132
8907
  msgid "Antarctica"
8908
  msgstr ""
8909
 
8910
+ #: includes/functions/wcj-country-functions.php:133
8911
  msgid "Antigua and Barbuda"
8912
  msgstr ""
8913
 
8914
+ #: includes/functions/wcj-country-functions.php:134
8915
  msgid "Argentina"
8916
  msgstr ""
8917
 
8918
+ #: includes/functions/wcj-country-functions.php:135
8919
  msgid "Armenia"
8920
  msgstr ""
8921
 
8922
+ #: includes/functions/wcj-country-functions.php:136
8923
  msgid "Aruba"
8924
  msgstr ""
8925
 
8926
+ #: includes/functions/wcj-country-functions.php:137
8927
  msgid "Australia"
8928
  msgstr ""
8929
 
8930
+ #: includes/functions/wcj-country-functions.php:138
8931
  msgid "Austria"
8932
  msgstr ""
8933
 
8934
+ #: includes/functions/wcj-country-functions.php:139
8935
  msgid "Azerbaijan"
8936
  msgstr ""
8937
 
8938
+ #: includes/functions/wcj-country-functions.php:140
8939
  msgid "Bahamas"
8940
  msgstr ""
8941
 
8942
+ #: includes/functions/wcj-country-functions.php:141
8943
  msgid "Bahrain"
8944
  msgstr ""
8945
 
8946
+ #: includes/functions/wcj-country-functions.php:142
8947
  msgid "Bangladesh"
8948
  msgstr ""
8949
 
8950
+ #: includes/functions/wcj-country-functions.php:143
8951
  msgid "Barbados"
8952
  msgstr ""
8953
 
8954
+ #: includes/functions/wcj-country-functions.php:144
8955
  msgid "Belarus"
8956
  msgstr ""
8957
 
8958
+ #: includes/functions/wcj-country-functions.php:145
8959
  msgid "Belgium"
8960
  msgstr ""
8961
 
8962
+ #: includes/functions/wcj-country-functions.php:146
8963
  msgid "Belau"
8964
  msgstr ""
8965
 
8966
+ #: includes/functions/wcj-country-functions.php:147
8967
  msgid "Belize"
8968
  msgstr ""
8969
 
8970
+ #: includes/functions/wcj-country-functions.php:148
8971
  msgid "Benin"
8972
  msgstr ""
8973
 
8974
+ #: includes/functions/wcj-country-functions.php:149
8975
  msgid "Bermuda"
8976
  msgstr ""
8977
 
8978
+ #: includes/functions/wcj-country-functions.php:150
8979
  msgid "Bhutan"
8980
  msgstr ""
8981
 
8982
+ #: includes/functions/wcj-country-functions.php:151
8983
  msgid "Bolivia"
8984
  msgstr ""
8985
 
8986
+ #: includes/functions/wcj-country-functions.php:152
8987
  msgid "Bonaire, Saint Eustatius and Saba"
8988
  msgstr ""
8989
 
8990
+ #: includes/functions/wcj-country-functions.php:153
8991
  msgid "Bosnia and Herzegovina"
8992
  msgstr ""
8993
 
8994
+ #: includes/functions/wcj-country-functions.php:154
8995
  msgid "Botswana"
8996
  msgstr ""
8997
 
8998
+ #: includes/functions/wcj-country-functions.php:155
8999
  msgid "Bouvet Island"
9000
  msgstr ""
9001
 
9002
+ #: includes/functions/wcj-country-functions.php:156
9003
  msgid "Brazil"
9004
  msgstr ""
9005
 
9006
+ #: includes/functions/wcj-country-functions.php:157
9007
  msgid "British Indian Ocean Territory"
9008
  msgstr ""
9009
 
9010
+ #: includes/functions/wcj-country-functions.php:158
9011
  msgid "British Virgin Islands"
9012
  msgstr ""
9013
 
9014
+ #: includes/functions/wcj-country-functions.php:159
9015
  msgid "Brunei"
9016
  msgstr ""
9017
 
9018
+ #: includes/functions/wcj-country-functions.php:160
9019
  msgid "Bulgaria"
9020
  msgstr ""
9021
 
9022
+ #: includes/functions/wcj-country-functions.php:161
9023
  msgid "Burkina Faso"
9024
  msgstr ""
9025
 
9026
+ #: includes/functions/wcj-country-functions.php:162
9027
  msgid "Burundi"
9028
  msgstr ""
9029
 
9030
+ #: includes/functions/wcj-country-functions.php:163
9031
  msgid "Cambodia"
9032
  msgstr ""
9033
 
9034
+ #: includes/functions/wcj-country-functions.php:164
9035
  msgid "Cameroon"
9036
  msgstr ""
9037
 
9038
+ #: includes/functions/wcj-country-functions.php:165
9039
  msgid "Canada"
9040
  msgstr ""
9041
 
9042
+ #: includes/functions/wcj-country-functions.php:166
9043
  msgid "Cape Verde"
9044
  msgstr ""
9045
 
9046
+ #: includes/functions/wcj-country-functions.php:167
9047
  msgid "Cayman Islands"
9048
  msgstr ""
9049
 
9050
+ #: includes/functions/wcj-country-functions.php:168
9051
  msgid "Central African Republic"
9052
  msgstr ""
9053
 
9054
+ #: includes/functions/wcj-country-functions.php:169
9055
  msgid "Chad"
9056
  msgstr ""
9057
 
9058
+ #: includes/functions/wcj-country-functions.php:170
9059
  msgid "Chile"
9060
  msgstr ""
9061
 
9062
+ #: includes/functions/wcj-country-functions.php:171
9063
  msgid "China"
9064
  msgstr ""
9065
 
9066
+ #: includes/functions/wcj-country-functions.php:172
9067
  msgid "Christmas Island"
9068
  msgstr ""
9069
 
9070
+ #: includes/functions/wcj-country-functions.php:173
9071
  msgid "Cocos (Keeling) Islands"
9072
  msgstr ""
9073
 
9074
+ #: includes/functions/wcj-country-functions.php:174
9075
  msgid "Colombia"
9076
  msgstr ""
9077
 
9078
+ #: includes/functions/wcj-country-functions.php:175
9079
  msgid "Comoros"
9080
  msgstr ""
9081
 
9082
+ #: includes/functions/wcj-country-functions.php:176
9083
  msgid "Congo (Brazzaville)"
9084
  msgstr ""
9085
 
9086
+ #: includes/functions/wcj-country-functions.php:177
9087
  msgid "Congo (Kinshasa)"
9088
  msgstr ""
9089
 
9090
+ #: includes/functions/wcj-country-functions.php:178
9091
  msgid "Cook Islands"
9092
  msgstr ""
9093
 
9094
+ #: includes/functions/wcj-country-functions.php:179
9095
  msgid "Costa Rica"
9096
  msgstr ""
9097
 
9098
+ #: includes/functions/wcj-country-functions.php:180
9099
  msgid "Croatia"
9100
  msgstr ""
9101
 
9102
+ #: includes/functions/wcj-country-functions.php:181
9103
  msgid "Cuba"
9104
  msgstr ""
9105
 
9106
+ #: includes/functions/wcj-country-functions.php:182
9107
  msgid "Cura&Ccedil;ao"
9108
  msgstr ""
9109
 
9110
+ #: includes/functions/wcj-country-functions.php:183
9111
  msgid "Cyprus"
9112
  msgstr ""
9113
 
9114
+ #: includes/functions/wcj-country-functions.php:184
9115
  msgid "Czech Republic"
9116
  msgstr ""
9117
 
9118
+ #: includes/functions/wcj-country-functions.php:185
9119
  msgid "Denmark"
9120
  msgstr ""
9121
 
9122
+ #: includes/functions/wcj-country-functions.php:186
9123
  msgid "Djibouti"
9124
  msgstr ""
9125
 
9126
+ #: includes/functions/wcj-country-functions.php:187
9127
  msgid "Dominica"
9128
  msgstr ""
9129
 
9130
+ #: includes/functions/wcj-country-functions.php:188
9131
  msgid "Dominican Republic"
9132
  msgstr ""
9133
 
9134
+ #: includes/functions/wcj-country-functions.php:189
9135
  msgid "Ecuador"
9136
  msgstr ""
9137
 
9138
+ #: includes/functions/wcj-country-functions.php:190
9139
  msgid "Egypt"
9140
  msgstr ""
9141
 
9142
+ #: includes/functions/wcj-country-functions.php:191
9143
  msgid "El Salvador"
9144
  msgstr ""
9145
 
9146
+ #: includes/functions/wcj-country-functions.php:192
9147
  msgid "Equatorial Guinea"
9148
  msgstr ""
9149
 
9150
+ #: includes/functions/wcj-country-functions.php:193
9151
  msgid "Eritrea"
9152
  msgstr ""
9153
 
9154
+ #: includes/functions/wcj-country-functions.php:194
9155
  msgid "Estonia"
9156
  msgstr ""
9157
 
9158
+ #: includes/functions/wcj-country-functions.php:195
9159
  msgid "Ethiopia"
9160
  msgstr ""
9161
 
9162
+ #: includes/functions/wcj-country-functions.php:196
9163
  msgid "Falkland Islands"
9164
  msgstr ""
9165
 
9166
+ #: includes/functions/wcj-country-functions.php:197
9167
  msgid "Faroe Islands"
9168
  msgstr ""
9169
 
9170
+ #: includes/functions/wcj-country-functions.php:198
9171
  msgid "Fiji"
9172
  msgstr ""
9173
 
9174
+ #: includes/functions/wcj-country-functions.php:199
9175
  msgid "Finland"
9176
  msgstr ""
9177
 
9178
+ #: includes/functions/wcj-country-functions.php:200
9179
  msgid "France"
9180
  msgstr ""
9181
 
9182
+ #: includes/functions/wcj-country-functions.php:201
9183
  msgid "French Guiana"
9184
  msgstr ""
9185
 
9186
+ #: includes/functions/wcj-country-functions.php:202
9187
  msgid "French Polynesia"
9188
  msgstr ""
9189
 
9190
+ #: includes/functions/wcj-country-functions.php:203
9191
  msgid "French Southern Territories"
9192
  msgstr ""
9193
 
9194
+ #: includes/functions/wcj-country-functions.php:204
9195
  msgid "Gabon"
9196
  msgstr ""
9197
 
9198
+ #: includes/functions/wcj-country-functions.php:205
9199
  msgid "Gambia"
9200
  msgstr ""
9201
 
9202
+ #: includes/functions/wcj-country-functions.php:206
9203
  msgid "Georgia"
9204
  msgstr ""
9205
 
9206
+ #: includes/functions/wcj-country-functions.php:207
9207
  msgid "Germany"
9208
  msgstr ""
9209
 
9210
+ #: includes/functions/wcj-country-functions.php:208
9211
  msgid "Ghana"
9212
  msgstr ""
9213
 
9214
+ #: includes/functions/wcj-country-functions.php:209
9215
  msgid "Gibraltar"
9216
  msgstr ""
9217
 
9218
+ #: includes/functions/wcj-country-functions.php:210
9219
  msgid "Greece"
9220
  msgstr ""
9221
 
9222
+ #: includes/functions/wcj-country-functions.php:211
9223
  msgid "Greenland"
9224
  msgstr ""
9225
 
9226
+ #: includes/functions/wcj-country-functions.php:212
9227
  msgid "Grenada"
9228
  msgstr ""
9229
 
9230
+ #: includes/functions/wcj-country-functions.php:213
9231
  msgid "Guadeloupe"
9232
  msgstr ""
9233
 
9234
+ #: includes/functions/wcj-country-functions.php:214
9235
  msgid "Guatemala"
9236
  msgstr ""
9237
 
9238
+ #: includes/functions/wcj-country-functions.php:215
9239
  msgid "Guernsey"
9240
  msgstr ""
9241
 
9242
+ #: includes/functions/wcj-country-functions.php:216
9243
  msgid "Guinea"
9244
  msgstr ""
9245
 
9246
+ #: includes/functions/wcj-country-functions.php:217
9247
  msgid "Guinea-Bissau"
9248
  msgstr ""
9249
 
9250
+ #: includes/functions/wcj-country-functions.php:218
9251
  msgid "Guyana"
9252
  msgstr ""
9253
 
9254
+ #: includes/functions/wcj-country-functions.php:219
9255
  msgid "Haiti"
9256
  msgstr ""
9257
 
9258
+ #: includes/functions/wcj-country-functions.php:220
9259
  msgid "Heard Island and McDonald Islands"
9260
  msgstr ""
9261
 
9262
+ #: includes/functions/wcj-country-functions.php:221
9263
  msgid "Honduras"
9264
  msgstr ""
9265
 
9266
+ #: includes/functions/wcj-country-functions.php:222
9267
  msgid "Hong Kong"
9268
  msgstr ""
9269
 
9270
+ #: includes/functions/wcj-country-functions.php:223
9271
  msgid "Hungary"
9272
  msgstr ""
9273
 
9274
+ #: includes/functions/wcj-country-functions.php:224
9275
  msgid "Iceland"
9276
  msgstr ""
9277
 
9278
+ #: includes/functions/wcj-country-functions.php:225
9279
  msgid "India"
9280
  msgstr ""
9281
 
9282
+ #: includes/functions/wcj-country-functions.php:226
9283
  msgid "Indonesia"
9284
  msgstr ""
9285
 
9286
+ #: includes/functions/wcj-country-functions.php:227
9287
  msgid "Iran"
9288
  msgstr ""
9289
 
9290
+ #: includes/functions/wcj-country-functions.php:228
9291
  msgid "Iraq"
9292
  msgstr ""
9293
 
9294
+ #: includes/functions/wcj-country-functions.php:229
9295
  msgid "Republic of Ireland"
9296
  msgstr ""
9297
 
9298
+ #: includes/functions/wcj-country-functions.php:230
9299
  msgid "Isle of Man"
9300
  msgstr ""
9301
 
9302
+ #: includes/functions/wcj-country-functions.php:231
9303
  msgid "Israel"
9304
  msgstr ""
9305
 
9306
+ #: includes/functions/wcj-country-functions.php:232
9307
  msgid "Italy"
9308
  msgstr ""
9309
 
9310
+ #: includes/functions/wcj-country-functions.php:233
9311
  msgid "Ivory Coast"
9312
  msgstr ""
9313
 
9314
+ #: includes/functions/wcj-country-functions.php:234
9315
  msgid "Jamaica"
9316
  msgstr ""
9317
 
9318
+ #: includes/functions/wcj-country-functions.php:235
9319
  msgid "Japan"
9320
  msgstr ""
9321
 
9322
+ #: includes/functions/wcj-country-functions.php:236
9323
  msgid "Jersey"
9324
  msgstr ""
9325
 
9326
+ #: includes/functions/wcj-country-functions.php:237
9327
  msgid "Jordan"
9328
  msgstr ""
9329
 
9330
+ #: includes/functions/wcj-country-functions.php:238
9331
  msgid "Kazakhstan"
9332
  msgstr ""
9333
 
9334
+ #: includes/functions/wcj-country-functions.php:239
9335
  msgid "Kenya"
9336
  msgstr ""
9337
 
9338
+ #: includes/functions/wcj-country-functions.php:240
9339
  msgid "Kiribati"
9340
  msgstr ""
9341
 
9342
+ #: includes/functions/wcj-country-functions.php:241
9343
  msgid "Kuwait"
9344
  msgstr ""
9345
 
9346
+ #: includes/functions/wcj-country-functions.php:242
9347
  msgid "Kyrgyzstan"
9348
  msgstr ""
9349
 
9350
+ #: includes/functions/wcj-country-functions.php:243
9351
  msgid "Laos"
9352
  msgstr ""
9353
 
9354
+ #: includes/functions/wcj-country-functions.php:244
9355
  msgid "Latvia"
9356
  msgstr ""
9357
 
9358
+ #: includes/functions/wcj-country-functions.php:245
9359
  msgid "Lebanon"
9360
  msgstr ""
9361
 
9362
+ #: includes/functions/wcj-country-functions.php:246
9363
  msgid "Lesotho"
9364
  msgstr ""
9365
 
9366
+ #: includes/functions/wcj-country-functions.php:247
9367
  msgid "Liberia"
9368
  msgstr ""
9369
 
9370
+ #: includes/functions/wcj-country-functions.php:248
9371
  msgid "Libya"
9372
  msgstr ""
9373
 
9374
+ #: includes/functions/wcj-country-functions.php:249
9375
  msgid "Liechtenstein"
9376
  msgstr ""
9377
 
9378
+ #: includes/functions/wcj-country-functions.php:250
9379
  msgid "Lithuania"
9380
  msgstr ""
9381
 
9382
+ #: includes/functions/wcj-country-functions.php:251
9383
  msgid "Luxembourg"
9384
  msgstr ""
9385
 
9386
+ #: includes/functions/wcj-country-functions.php:252
9387
  msgid "Macao S.A.R., China"
9388
  msgstr ""
9389
 
9390
+ #: includes/functions/wcj-country-functions.php:253
9391
  msgid "Macedonia"
9392
  msgstr ""
9393
 
9394
+ #: includes/functions/wcj-country-functions.php:254
9395
  msgid "Madagascar"
9396
  msgstr ""
9397
 
9398
+ #: includes/functions/wcj-country-functions.php:255
9399
  msgid "Malawi"
9400
  msgstr ""
9401
 
9402
+ #: includes/functions/wcj-country-functions.php:256
9403
  msgid "Malaysia"
9404
  msgstr ""
9405
 
9406
+ #: includes/functions/wcj-country-functions.php:257
9407
  msgid "Maldives"
9408
  msgstr ""
9409
 
9410
+ #: includes/functions/wcj-country-functions.php:258
9411
  msgid "Mali"
9412
  msgstr ""
9413
 
9414
+ #: includes/functions/wcj-country-functions.php:259
9415
  msgid "Malta"
9416
  msgstr ""
9417
 
9418
+ #: includes/functions/wcj-country-functions.php:260
9419
  msgid "Marshall Islands"
9420
  msgstr ""
9421
 
9422
+ #: includes/functions/wcj-country-functions.php:261
9423
  msgid "Martinique"
9424
  msgstr ""
9425
 
9426
+ #: includes/functions/wcj-country-functions.php:262
9427
  msgid "Mauritania"
9428
  msgstr ""
9429
 
9430
+ #: includes/functions/wcj-country-functions.php:263
9431
  msgid "Mauritius"
9432
  msgstr ""
9433
 
9434
+ #: includes/functions/wcj-country-functions.php:264
9435
  msgid "Mayotte"
9436
  msgstr ""
9437
 
9438
+ #: includes/functions/wcj-country-functions.php:265
9439
  msgid "Mexico"
9440
  msgstr ""
9441
 
9442
+ #: includes/functions/wcj-country-functions.php:266
9443
  msgid "Micronesia"
9444
  msgstr ""
9445
 
9446
+ #: includes/functions/wcj-country-functions.php:267
9447
  msgid "Moldova"
9448
  msgstr ""
9449
 
9450
+ #: includes/functions/wcj-country-functions.php:268
9451
  msgid "Monaco"
9452
  msgstr ""
9453
 
9454
+ #: includes/functions/wcj-country-functions.php:269
9455
  msgid "Mongolia"
9456
  msgstr ""
9457
 
9458
+ #: includes/functions/wcj-country-functions.php:270
9459
  msgid "Montenegro"
9460
  msgstr ""
9461
 
9462
+ #: includes/functions/wcj-country-functions.php:271
9463
  msgid "Montserrat"
9464
  msgstr ""
9465
 
9466
+ #: includes/functions/wcj-country-functions.php:272
9467
  msgid "Morocco"
9468
  msgstr ""
9469
 
9470
+ #: includes/functions/wcj-country-functions.php:273
9471
  msgid "Mozambique"
9472
  msgstr ""
9473
 
9474
+ #: includes/functions/wcj-country-functions.php:274
9475
  msgid "Myanmar"
9476
  msgstr ""
9477
 
9478
+ #: includes/functions/wcj-country-functions.php:275
9479
  msgid "Namibia"
9480
  msgstr ""
9481
 
9482
+ #: includes/functions/wcj-country-functions.php:276
9483
  msgid "Nauru"
9484
  msgstr ""
9485
 
9486
+ #: includes/functions/wcj-country-functions.php:277
9487
  msgid "Nepal"
9488
  msgstr ""
9489
 
9490
+ #: includes/functions/wcj-country-functions.php:278
9491
  msgid "Netherlands"
9492
  msgstr ""
9493
 
9494
+ #: includes/functions/wcj-country-functions.php:279
9495
  msgid "Netherlands Antilles"
9496
  msgstr ""
9497
 
9498
+ #: includes/functions/wcj-country-functions.php:280
9499
  msgid "New Caledonia"
9500
  msgstr ""
9501
 
9502
+ #: includes/functions/wcj-country-functions.php:281
9503
  msgid "New Zealand"
9504
  msgstr ""
9505
 
9506
+ #: includes/functions/wcj-country-functions.php:282
9507
  msgid "Nicaragua"
9508
  msgstr ""
9509
 
9510
+ #: includes/functions/wcj-country-functions.php:283
9511
  msgid "Niger"
9512
  msgstr ""
9513
 
9514
+ #: includes/functions/wcj-country-functions.php:284
9515
  msgid "Nigeria"
9516
  msgstr ""
9517
 
9518
+ #: includes/functions/wcj-country-functions.php:285
9519
  msgid "Niue"
9520
  msgstr ""
9521
 
9522
+ #: includes/functions/wcj-country-functions.php:286
9523
  msgid "Norfolk Island"
9524
  msgstr ""
9525
 
9526
+ #: includes/functions/wcj-country-functions.php:287
9527
  msgid "North Korea"
9528
  msgstr ""
9529
 
9530
+ #: includes/functions/wcj-country-functions.php:288
9531
  msgid "Norway"
9532
  msgstr ""
9533
 
9534
+ #: includes/functions/wcj-country-functions.php:289
9535
  msgid "Oman"
9536
  msgstr ""
9537
 
9538
+ #: includes/functions/wcj-country-functions.php:290
9539
  msgid "Pakistan"
9540
  msgstr ""
9541
 
9542
+ #: includes/functions/wcj-country-functions.php:291
9543
  msgid "Palestinian Territory"
9544
  msgstr ""
9545
 
9546
+ #: includes/functions/wcj-country-functions.php:292
9547
  msgid "Panama"
9548
  msgstr ""
9549
 
9550
+ #: includes/functions/wcj-country-functions.php:293
9551
  msgid "Papua New Guinea"
9552
  msgstr ""
9553
 
9554
+ #: includes/functions/wcj-country-functions.php:294
9555
  msgid "Paraguay"
9556
  msgstr ""
9557
 
9558
+ #: includes/functions/wcj-country-functions.php:295
9559
  msgid "Peru"
9560
  msgstr ""
9561
 
9562
+ #: includes/functions/wcj-country-functions.php:296
9563
  msgid "Philippines"
9564
  msgstr ""
9565
 
9566
+ #: includes/functions/wcj-country-functions.php:297
9567
  msgid "Pitcairn"
9568
  msgstr ""
9569
 
9570
+ #: includes/functions/wcj-country-functions.php:298
9571
  msgid "Poland"
9572
  msgstr ""
9573
 
9574
+ #: includes/functions/wcj-country-functions.php:299
9575
  msgid "Portugal"
9576
  msgstr ""
9577
 
9578
+ #: includes/functions/wcj-country-functions.php:300
9579
  msgid "Qatar"
9580
  msgstr ""
9581
 
9582
+ #: includes/functions/wcj-country-functions.php:301
9583
  msgid "Reunion"
9584
  msgstr ""
9585
 
9586
+ #: includes/functions/wcj-country-functions.php:302
9587
  msgid "Romania"
9588
  msgstr ""
9589
 
9590
+ #: includes/functions/wcj-country-functions.php:303
9591
  msgid "Russia"
9592
  msgstr ""
9593
 
9594
+ #: includes/functions/wcj-country-functions.php:304
9595
  msgid "Rwanda"
9596
  msgstr ""
9597
 
9598
+ #: includes/functions/wcj-country-functions.php:305
9599
  msgid "Saint Barth&eacute;lemy"
9600
  msgstr ""
9601
 
9602
+ #: includes/functions/wcj-country-functions.php:306
9603
  msgid "Saint Helena"
9604
  msgstr ""
9605
 
9606
+ #: includes/functions/wcj-country-functions.php:307
9607
  msgid "Saint Kitts and Nevis"
9608
  msgstr ""
9609
 
9610
+ #: includes/functions/wcj-country-functions.php:308
9611
  msgid "Saint Lucia"
9612
  msgstr ""
9613
 
9614
+ #: includes/functions/wcj-country-functions.php:309
9615
  msgid "Saint Martin (French part)"
9616
  msgstr ""
9617
 
9618
+ #: includes/functions/wcj-country-functions.php:310
9619
  msgid "Saint Martin (Dutch part)"
9620
  msgstr ""
9621
 
9622
+ #: includes/functions/wcj-country-functions.php:311
9623
  msgid "Saint Pierre and Miquelon"
9624
  msgstr ""
9625
 
9626
+ #: includes/functions/wcj-country-functions.php:312
9627
  msgid "Saint Vincent and the Grenadines"
9628
  msgstr ""
9629
 
9630
+ #: includes/functions/wcj-country-functions.php:313
9631
  msgid "San Marino"
9632
  msgstr ""
9633
 
9634
+ #: includes/functions/wcj-country-functions.php:314
9635
  msgid "S&atilde;o Tom&eacute; and Pr&iacute;ncipe"
9636
  msgstr ""
9637
 
9638
+ #: includes/functions/wcj-country-functions.php:315
9639
  msgid "Saudi Arabia"
9640
  msgstr ""
9641
 
9642
+ #: includes/functions/wcj-country-functions.php:316
9643
  msgid "Senegal"
9644
  msgstr ""
9645
 
9646
+ #: includes/functions/wcj-country-functions.php:317
9647
  msgid "Serbia"
9648
  msgstr ""
9649
 
9650
+ #: includes/functions/wcj-country-functions.php:318
9651
  msgid "Seychelles"
9652
  msgstr ""
9653
 
9654
+ #: includes/functions/wcj-country-functions.php:319
9655
  msgid "Sierra Leone"
9656
  msgstr ""
9657
 
9658
+ #: includes/functions/wcj-country-functions.php:320
9659
  msgid "Singapore"
9660
  msgstr ""
9661
 
9662
+ #: includes/functions/wcj-country-functions.php:321
9663
  msgid "Slovakia"
9664
  msgstr ""
9665
 
9666
+ #: includes/functions/wcj-country-functions.php:322
9667
  msgid "Slovenia"
9668
  msgstr ""
9669
 
9670
+ #: includes/functions/wcj-country-functions.php:323
9671
  msgid "Solomon Islands"
9672
  msgstr ""
9673
 
9674
+ #: includes/functions/wcj-country-functions.php:324
9675
  msgid "Somalia"
9676
  msgstr ""
9677
 
9678
+ #: includes/functions/wcj-country-functions.php:325
9679
  msgid "South Africa"
9680
  msgstr ""
9681
 
9682
+ #: includes/functions/wcj-country-functions.php:326
9683
  msgid "South Georgia/Sandwich Islands"
9684
  msgstr ""
9685
 
9686
+ #: includes/functions/wcj-country-functions.php:327
9687
  msgid "South Korea"
9688
  msgstr ""
9689
 
9690
+ #: includes/functions/wcj-country-functions.php:328
9691
  msgid "South Sudan"
9692
  msgstr ""
9693
 
9694
+ #: includes/functions/wcj-country-functions.php:329
9695
  msgid "Spain"
9696
  msgstr ""
9697
 
9698
+ #: includes/functions/wcj-country-functions.php:330
9699
  msgid "Sri Lanka"
9700
  msgstr ""
9701
 
9702
+ #: includes/functions/wcj-country-functions.php:331
9703
  msgid "Sudan"
9704
  msgstr ""
9705
 
9706
+ #: includes/functions/wcj-country-functions.php:332
9707
  msgid "Suriname"
9708
  msgstr ""
9709
 
9710
+ #: includes/functions/wcj-country-functions.php:333
9711
  msgid "Svalbard and Jan Mayen"
9712
  msgstr ""
9713
 
9714
+ #: includes/functions/wcj-country-functions.php:334
9715
  msgid "Swaziland"
9716
  msgstr ""
9717
 
9718
+ #: includes/functions/wcj-country-functions.php:335
9719
  msgid "Sweden"
9720
  msgstr ""
9721
 
9722
+ #: includes/functions/wcj-country-functions.php:336
9723
  msgid "Switzerland"
9724
  msgstr ""
9725
 
9726
+ #: includes/functions/wcj-country-functions.php:337
9727
  msgid "Syria"
9728
  msgstr ""
9729
 
9730
+ #: includes/functions/wcj-country-functions.php:338
9731
  msgid "Taiwan"
9732
  msgstr ""
9733
 
9734
+ #: includes/functions/wcj-country-functions.php:339
9735
  msgid "Tajikistan"
9736
  msgstr ""
9737
 
9738
+ #: includes/functions/wcj-country-functions.php:340
9739
  msgid "Tanzania"
9740
  msgstr ""
9741
 
9742
+ #: includes/functions/wcj-country-functions.php:341
9743
  msgid "Thailand"
9744
  msgstr ""
9745
 
9746
+ #: includes/functions/wcj-country-functions.php:342
9747
  msgid "Timor-Leste"
9748
  msgstr ""
9749
 
9750
+ #: includes/functions/wcj-country-functions.php:343
9751
  msgid "Togo"
9752
  msgstr ""
9753
 
9754
+ #: includes/functions/wcj-country-functions.php:344
9755
  msgid "Tokelau"
9756
  msgstr ""
9757
 
9758
+ #: includes/functions/wcj-country-functions.php:345
9759
  msgid "Tonga"
9760
  msgstr ""
9761
 
9762
+ #: includes/functions/wcj-country-functions.php:346
9763
  msgid "Trinidad and Tobago"
9764
  msgstr ""
9765
 
9766
+ #: includes/functions/wcj-country-functions.php:347
9767
  msgid "Tunisia"
9768
  msgstr ""
9769
 
9770
+ #: includes/functions/wcj-country-functions.php:348
9771
  msgid "Turkey"
9772
  msgstr ""
9773
 
9774
+ #: includes/functions/wcj-country-functions.php:349
9775
  msgid "Turkmenistan"
9776
  msgstr ""
9777
 
9778
+ #: includes/functions/wcj-country-functions.php:350
9779
  msgid "Turks and Caicos Islands"
9780
  msgstr ""
9781
 
9782
+ #: includes/functions/wcj-country-functions.php:351
9783
  msgid "Tuvalu"
9784
  msgstr ""
9785
 
9786
+ #: includes/functions/wcj-country-functions.php:352
9787
  msgid "Uganda"
9788
  msgstr ""
9789
 
9790
+ #: includes/functions/wcj-country-functions.php:353
9791
  msgid "Ukraine"
9792
  msgstr ""
9793
 
9794
+ #: includes/functions/wcj-country-functions.php:354
9795
  msgid "United Arab Emirates"
9796
  msgstr ""
9797
 
9798
+ #: includes/functions/wcj-country-functions.php:355
9799
  msgid "United Kingdom (UK)"
9800
  msgstr ""
9801
 
9802
+ #: includes/functions/wcj-country-functions.php:356
9803
  msgid "United States (US)"
9804
  msgstr ""
9805
 
9806
+ #: includes/functions/wcj-country-functions.php:357
9807
  msgid "Uruguay"
9808
  msgstr ""
9809
 
9810
+ #: includes/functions/wcj-country-functions.php:358
9811
  msgid "Uzbekistan"
9812
  msgstr ""
9813
 
9814
+ #: includes/functions/wcj-country-functions.php:359
9815
  msgid "Vanuatu"
9816
  msgstr ""
9817
 
9818
+ #: includes/functions/wcj-country-functions.php:360
9819
  msgid "Vatican"
9820
  msgstr ""
9821
 
9822
+ #: includes/functions/wcj-country-functions.php:361
9823
  msgid "Venezuela"
9824
  msgstr ""
9825
 
9826
+ #: includes/functions/wcj-country-functions.php:362
9827
  msgid "Vietnam"
9828
  msgstr ""
9829
 
9830
+ #: includes/functions/wcj-country-functions.php:363
9831
  msgid "Wallis and Futuna"
9832
  msgstr ""
9833
 
9834
+ #: includes/functions/wcj-country-functions.php:364
9835
  msgid "Western Sahara"
9836
  msgstr ""
9837
 
9838
+ #: includes/functions/wcj-country-functions.php:365
9839
  msgid "Western Samoa"
9840
  msgstr ""
9841
 
9842
+ #: includes/functions/wcj-country-functions.php:366
9843
  msgid "Yemen"
9844
  msgstr ""
9845
 
9846
+ #: includes/functions/wcj-country-functions.php:367
9847
  msgid "Zambia"
9848
  msgstr ""
9849
 
9850
+ #: includes/functions/wcj-country-functions.php:368
9851
  msgid "Zimbabwe"
9852
  msgstr ""
9853
 
9854
+ #: includes/functions/wcj-exchange-rates-functions.php:21
9855
+ msgid "Yahoo"
9856
+ msgstr ""
9857
+
9858
+ #: includes/functions/wcj-exchange-rates-functions.php:22
9859
+ msgid "European Central Bank (ECB)"
9860
+ msgstr ""
9861
+
9862
+ #: includes/functions/wcj-exchange-rates-functions.php:23
9863
+ msgid "TCMB"
9864
+ msgstr ""
9865
+
9866
+ #: includes/functions/wcj-functions.php:438
9867
  msgid "Before cart"
9868
  msgstr ""
9869
 
9870
+ #: includes/functions/wcj-functions.php:439
9871
  msgid "Before cart table"
9872
  msgstr ""
9873
 
9874
+ #: includes/functions/wcj-functions.php:440
9875
  msgid "Before cart contents"
9876
  msgstr ""
9877
 
9878
+ #: includes/functions/wcj-functions.php:441
9879
  msgid "Cart contents"
9880
  msgstr ""
9881
 
9882
+ #: includes/functions/wcj-functions.php:442
9883
  msgid "Cart coupon"
9884
  msgstr ""
9885
 
9886
+ #: includes/functions/wcj-functions.php:443
9887
  msgid "Cart actions"
9888
  msgstr ""
9889
 
9890
+ #: includes/functions/wcj-functions.php:444
9891
  msgid "After cart contents"
9892
  msgstr ""
9893
 
9894
+ #: includes/functions/wcj-functions.php:445
9895
  msgid "After cart table"
9896
  msgstr ""
9897
 
9898
+ #: includes/functions/wcj-functions.php:446
9899
  msgid "Cart collaterals"
9900
  msgstr ""
9901
 
9902
+ #: includes/functions/wcj-functions.php:447
9903
  msgid "After cart"
9904
  msgstr ""
9905
 
9906
+ #: includes/functions/wcj-functions.php:449
9907
  msgid "Before cart totals"
9908
  msgstr ""
9909
 
9910
+ #: includes/functions/wcj-functions.php:450
9911
  msgid "Cart totals: Before shipping"
9912
  msgstr ""
9913
 
9914
+ #: includes/functions/wcj-functions.php:451
9915
  msgid "Cart totals: After shipping"
9916
  msgstr ""
9917
 
9918
+ #: includes/functions/wcj-functions.php:452
9919
  msgid "Cart totals: Before order total"
9920
  msgstr ""
9921
 
9922
+ #: includes/functions/wcj-functions.php:453
9923
  msgid "Cart totals: After order total"
9924
  msgstr ""
9925
 
9926
+ #: includes/functions/wcj-functions.php:454
9927
  msgid "Proceed to checkout"
9928
  msgstr ""
9929
 
9930
+ #: includes/functions/wcj-functions.php:455
9931
  msgid "After cart totals"
9932
  msgstr ""
9933
 
9934
+ #: includes/functions/wcj-functions.php:457
9935
  msgid "Before shipping calculator"
9936
  msgstr ""
9937
 
9938
+ #: includes/functions/wcj-functions.php:458
9939
  msgid "After shipping calculator"
9940
  msgstr ""
9941
 
9942
+ #: includes/functions/wcj-functions.php:460
9943
  msgid "If cart is empty"
9944
  msgstr ""
9945
 
9946
+ #: includes/functions/wcj-functions.php:886
 
 
 
 
 
9947
  msgctxt "Order status"
9948
  msgid "Pending Payment"
9949
  msgstr ""
9950
 
9951
+ #: includes/functions/wcj-functions.php:888
9952
  msgctxt "Order status"
9953
  msgid "On Hold"
9954
  msgstr ""
9985
  msgid "Credit Notes"
9986
  msgstr ""
9987
 
9988
+ #: includes/functions/wcj-invoicing-functions.php:62
9989
  msgid "Custom Document"
9990
  msgstr ""
9991
 
9992
+ #: includes/functions/wcj-invoicing-functions.php:63
9993
  msgid "Custom Documents"
9994
  msgstr ""
9995
 
9996
+ #: includes/functions/wcj-user-roles-functions.php:66
9997
+ #: includes/functions/wcj-user-roles-functions.php:86
9998
+ msgid "Guest"
9999
+ msgstr ""
10000
+
10001
  #: includes/gateways/class-wc-gateway-wcj-custom.php:63
10002
  msgid "Enable Custom Payment"
10003
  msgstr ""
10004
 
10005
  #: includes/gateways/class-wc-gateway-wcj-custom.php:70
10006
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:152
10007
  #: includes/shipping/class-wc-shipping-wcj-custom.php:84
10008
  msgid "This controls the title which the user sees during checkout."
10009
  msgstr ""
10054
  "gateway on frontend, enter a number here. Set to 0 to disable."
10055
  msgstr ""
10056
 
 
 
 
 
10057
  #: includes/gateways/class-wc-gateway-wcj-custom.php:124
10058
  msgid ""
10059
  "If gateway is only available for certain shipping methods, set it up here. "
10060
  "Leave blank to enable for all methods."
10061
  msgstr ""
10062
 
 
 
 
 
10063
  #: includes/gateways/class-wc-gateway-wcj-custom.php:131
10064
  msgid "Enable for virtual orders"
10065
  msgstr ""
10114
  msgid "Checkbox: Default"
10115
  msgstr ""
10116
 
10117
+ #: includes/input-fields/class-wcj-product-input-fields-abstract.php:107
10118
  msgid ""
10119
  "If file is selected, set accepted file types here. E.g.: \".jpg,.jpeg,.png"
10120
  "\". Leave blank to accept all files"
10121
  msgstr ""
10122
 
10123
+ #: includes/input-fields/class-wcj-product-input-fields-abstract.php:108
10124
+ msgid ""
10125
+ "Visit <a href=\"https://www.w3schools.com/tags/att_input_accept.asp\" target="
10126
+ "\"_blank\">documentation on input accept attribute</a> for valid option "
10127
+ "formats"
10128
+ msgstr ""
10129
+
10130
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:109
10131
  msgid "File: Accepted types"
10132
  msgstr ""
10144
  msgid "File: Max size"
10145
  msgstr ""
10146
 
10147
+ #: includes/input-fields/class-wcj-product-input-fields-abstract.php:124
10148
+ msgid ""
10149
+ "If datepicker/weekpicker is selected, set date format here. Visit <a href="
10150
+ "\"https://codex.wordpress.org/Formatting_Date_and_Time\" target=\"_blank"
10151
+ "\">documentation on date and time formatting</a> for valid date formats"
10152
+ msgstr ""
10153
+
10154
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:126
10155
  msgid "Datepicker/Weekpicker: Date format"
10156
  msgstr ""
10175
  msgid "Datepicker/Weekpicker: First week day"
10176
  msgstr ""
10177
 
10178
+ #: includes/input-fields/class-wcj-product-input-fields-abstract.php:183
10179
+ msgid ""
10180
+ "If timepicker is selected, set time format here. Visit <a href=\"http://"
10181
+ "timepicker.co/options/\" target=\"_blank\">timepicker options page</a> for "
10182
+ "valid time formats"
10183
+ msgstr ""
10184
+
10185
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:184
10186
  msgid "Timepicker: Time format"
10187
  msgstr ""
10188
 
10189
+ #: includes/input-fields/class-wcj-product-input-fields-abstract.php:191
10190
+ msgid ""
10191
+ "If timepicker is selected, set min time here. Visit <a href=\"http://"
10192
+ "timepicker.co/options/\" target=\"_blank\">timepicker options page</a> for "
10193
+ "valid option formats"
10194
+ msgstr ""
10195
+
10196
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:192
10197
+ msgid "Timepicker: Min Time"
10198
  msgstr ""
10199
 
10200
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:199
10201
+ msgid ""
10202
+ "If timepicker is selected, set max time here. Visit <a href=\"http://"
10203
+ "timepicker.co/options/\" target=\"_blank\">timepicker options page</a> for "
10204
+ "valid option formats"
10205
  msgstr ""
10206
 
10207
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:200
10208
+ msgid "Timepicker: Max Time"
10209
+ msgstr ""
10210
+
10211
+ #: includes/input-fields/class-wcj-product-input-fields-abstract.php:208
10212
+ msgid "Timepicker: Interval"
10213
+ msgstr ""
10214
+
10215
+ #: includes/input-fields/class-wcj-product-input-fields-abstract.php:215
10216
+ msgid "If select/radio is selected, set options here. One option per line"
10217
+ msgstr ""
10218
+
10219
+ #: includes/input-fields/class-wcj-product-input-fields-abstract.php:216
10220
  msgid "Select/Radio: Options"
10221
  msgstr ""
10222
 
10223
+ #: includes/input-fields/class-wcj-product-input-fields-abstract.php:244
10224
  msgid "Message on required"
10225
  msgstr ""
10226
 
10227
+ #: includes/input-fields/class-wcj-product-input-fields-abstract.php:399
10228
  msgid "Wrong file type!"
10229
  msgstr ""
10230
 
10231
+ #: includes/input-fields/class-wcj-product-input-fields-abstract.php:408
10232
  msgid "File is too big!"
10233
  msgstr ""
10234
 
10235
+ #: includes/input-fields/class-wcj-product-input-fields-abstract.php:559
10236
  msgid "Select a country&hellip;"
10237
  msgstr ""
10238
 
10310
  msgstr ""
10311
 
10312
  #: includes/pdf-invoices/class-wcj-pdf-invoicing-renumerate-tool.php:206
10313
+ #, php-format
10314
  msgid "Total documents created: %d"
10315
  msgstr ""
10316
 
10317
  #: includes/pdf-invoices/class-wcj-pdf-invoicing-renumerate-tool.php:207
10318
+ #, php-format
10319
  msgid "Total documents deleted: %d"
10320
  msgstr ""
10321
 
10455
  msgid "PDF File Name"
10456
  msgstr ""
10457
 
10458
+ #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-display.php:388
10459
+ msgid ""
10460
+ "Enter file name for PDF documents. You can use shortcodes here, e.g. [wcj_"
10461
+ msgstr ""
10462
+
10463
  #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:26
10464
  msgid "Email Options"
10465
  msgstr ""
10466
 
10467
+ #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:89
10468
  msgid "Payment gateways to include"
10469
  msgstr ""
10470
 
10471
+ #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:96
10472
  msgid "Select some gateways. Leave blank to include all."
10473
  msgstr ""
10474
 
10475
+ #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:121
10476
  msgid "Admin - New Order"
10477
  msgstr ""
10478
 
10479
+ #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:122
10480
  msgid "Admin - Cancelled Order"
10481
  msgstr ""
10482
 
10483
+ #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:123
10484
  msgid "Admin - Failed Order"
10485
  msgstr ""
10486
 
10487
+ #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:124
10488
  msgid "Customer - Processing Order"
10489
  msgstr ""
10490
 
10491
+ #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:125
10492
  msgid "Customer - On-Hold Order"
10493
  msgstr ""
10494
 
10495
+ #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:126
10496
  msgid "Customer - Completed Order"
10497
  msgstr ""
10498
 
10499
+ #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:127
10500
  msgid "Customer - Invoice"
10501
  msgstr ""
10502
 
10503
+ #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:128
10504
  msgid "Customer - Refunded Order"
10505
  msgstr ""
10506
 
10507
+ #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:129
10508
  msgid "Customer - Note"
10509
  msgstr ""
10510
 
10511
+ #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:130
10512
  msgid "Customer - New Account"
10513
  msgstr ""
10514
 
10515
+ #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:131
10516
  msgid "Customer - Reset Password"
10517
  msgstr ""
10518
 
10519
+ #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:139
10520
  msgid "Attach PDF to emails"
10521
  msgstr ""
10522
 
10523
+ #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:146
10524
  msgid "Select some emails"
10525
  msgstr ""
10526
 
10704
  msgid "Templates"
10705
  msgstr ""
10706
 
10707
+ #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-templates.php:63
10708
  msgid "HTML Template"
10709
  msgstr ""
10710
 
10711
+ #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-templates.php:78
10712
  msgid "Available Shortcodes"
10713
  msgstr ""
10714
 
10715
+ #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-templates.php:81
10716
+ #, php-format
10717
  msgid "For the list of available shortcodes, please visit %s."
10718
  msgstr ""
10719
 
10726
  msgstr ""
10727
 
10728
  #: includes/price-by-country/class-wcj-price-by-country-group-generator.php:95
10729
+ #, php-format
10730
  msgid ""
10731
  "All existing country groups will be deleted and %s new groups will be "
10732
  "created. Are you sure?"
10740
  msgid "Country Groups Generated."
10741
  msgstr ""
10742
 
10743
+ #: includes/price-by-country/class-wcj-price-by-country-local.php:248
10744
  msgid "Country Group Nr."
10745
  msgstr ""
10746
 
10802
  msgstr ""
10803
 
10804
  #: includes/reports/wcj-class-reports-monthly-sales.php:140
10805
+ #: includes/reports/wcj-class-reports-sales.php:327
10806
  msgid "Total Sum"
10807
  msgstr ""
10808
 
10823
  msgstr ""
10824
 
10825
  #: includes/reports/wcj-class-reports-monthly-sales.php:219
10826
+ #, php-format
10827
  msgid "Error getting currency rate for %s"
10828
  msgstr ""
10829
 
10836
  msgstr ""
10837
 
10838
  #: includes/reports/wcj-class-reports-monthly-sales.php:326
10839
+ #, php-format
10840
  msgid "Report generated in: %s s"
10841
  msgstr ""
10842
 
10844
  msgid "Reset Currency Rates"
10845
  msgstr ""
10846
 
10847
+ #: includes/reports/wcj-class-reports-sales.php:126
10848
  msgid "Variation"
10849
  msgstr ""
10850
 
10851
+ #: includes/reports/wcj-class-reports-sales.php:195
10852
  msgid "Last Sale"
10853
  msgstr ""
10854
 
10855
+ #: includes/reports/wcj-class-reports-sales.php:196
10856
+ msgid "Total"
10857
+ msgstr ""
10858
+
10859
+ #: includes/reports/wcj-class-reports-sales.php:324
10860
+ msgid "Total Items"
10861
+ msgstr ""
10862
+
10863
+ #: includes/reports/wcj-class-reports-sales.php:330
10864
+ msgid "Total Profit"
10865
+ msgstr ""
10866
+
10867
+ #: includes/reports/wcj-class-reports-sales.php:333
10868
+ msgid "Reports Settings"
10869
  msgstr ""
10870
 
10871
+ #: includes/reports/wcj-class-reports-sales.php:349
10872
  msgid "Filter products"
10873
  msgstr ""
10874
 
10875
+ #: includes/reports/wcj-class-reports-sales.php:354
10876
  msgid "No sales data for current period."
10877
  msgstr ""
10878
 
10911
  "accounted."
10912
  msgstr ""
10913
 
10914
+ #: includes/reports/wcj-class-reports-stock.php:214
10915
  msgid "deleted"
10916
  msgstr ""
10917
 
10918
+ #: includes/reports/wcj-class-reports-stock.php:323
10919
  msgid "Stock"
10920
  msgstr ""
10921
 
10922
+ #: includes/reports/wcj-class-reports-stock.php:324
10923
  msgid "Stock price"
10924
  msgstr ""
10925
 
10926
+ #: includes/reports/wcj-class-reports-stock.php:325
10927
  msgid "Total stock price"
10928
  msgstr ""
10929
 
10930
+ #: includes/reports/wcj-class-reports-stock.php:327
10931
  msgid "Last sale"
10932
  msgstr ""
10933
 
10934
+ #: includes/reports/wcj-class-reports-stock.php:328
10935
+ #, php-format
10936
  msgid "Sales in last %s days"
10937
  msgstr ""
10938
 
10939
+ #: includes/reports/wcj-class-reports-stock.php:329
10940
  msgid "Total sales"
10941
  msgstr ""
10942
 
10943
+ #: includes/reports/wcj-class-reports-stock.php:332
10944
  msgid "Stock to minimum"
10945
  msgstr ""
10946
 
10947
+ #: includes/reports/wcj-class-reports-stock.php:365
10948
  msgid "purchase price:"
10949
  msgstr ""
10950
 
10951
+ #: includes/reports/wcj-class-reports-stock.php:370
10952
  msgid "stock purchase price:"
10953
  msgstr ""
10954
 
10955
+ #: includes/reports/wcj-class-reports-stock.php:376
10956
  msgid "No sales yet"
10957
  msgstr ""
10958
 
10959
+ #: includes/reports/wcj-class-reports-stock.php:381
10960
  msgid "profit:"
10961
  msgstr ""
10962
 
10963
+ #: includes/reports/wcj-class-reports-stock.php:405
10964
  msgid "Total current stock value"
10965
  msgstr ""
10966
 
10967
+ #: includes/reports/wcj-class-reports-stock.php:406
10968
  msgid "Total stock value"
10969
  msgstr ""
10970
 
10971
+ #: includes/reports/wcj-class-reports-stock.php:407
10972
  msgid "Product stock value average"
10973
  msgstr ""
10974
 
10975
+ #: includes/reports/wcj-class-reports-stock.php:408
10976
  msgid "Product stock average"
10977
  msgstr ""
10978
 
10979
+ #: includes/reports/wcj-class-reports-stock.php:412
10980
  msgid "Report was generated in: "
10981
  msgstr ""
10982
 
10985
  msgid "Booster: Custom Shipping Method"
10986
  msgstr ""
10987
 
10988
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:100
10989
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:186
10990
+ #: includes/shipping/class-wc-shipping-wcj-custom.php:121
10991
+ msgid "Max Weight"
10992
+ msgstr ""
10993
+
10994
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:107
10995
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:170
10996
+ #: includes/shipping/class-wc-shipping-wcj-custom.php:102
10997
+ #: includes/shipping/class-wc-shipping-wcj-custom.php:128
10998
+ msgid "Cost"
10999
+ msgstr ""
11000
+
11001
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:159
11002
  #: includes/shipping/class-wc-shipping-wcj-custom.php:91
11003
  msgid "Cost calculation type."
11004
  msgstr ""
11005
 
11006
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:163
11007
  #: includes/shipping/class-wc-shipping-wcj-custom.php:95
11008
  msgid "Flat Rate"
11009
  msgstr ""
11010
 
11011
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:164
11012
  #: includes/shipping/class-wc-shipping-wcj-custom.php:96
11013
  msgid "By Total Cart Weight"
11014
  msgstr ""
11015
 
11016
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:165
11017
  #: includes/shipping/class-wc-shipping-wcj-custom.php:97
11018
  msgid "By Total Cart Weight Table"
11019
  msgstr ""
11020
 
11021
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:166
11022
  #: includes/shipping/class-wc-shipping-wcj-custom.php:98
11023
  msgid "By Total Cart Quantity"
11024
  msgstr ""
11025
 
11026
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:172
 
 
 
 
 
 
 
11027
  #: includes/shipping/class-wc-shipping-wcj-custom.php:104
11028
  msgid ""
11029
  "Cost. If calculating by weight - then cost per one weight unit. If "
11030
  "calculating by quantity - then cost per one piece."
11031
  msgstr ""
11032
 
11033
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:178
11034
  msgid "Min Weight"
11035
  msgstr ""
11036
 
11037
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:180
11038
  msgid "Minimum total cart weight. Set zero to disable."
11039
  msgstr ""
11040
 
11041
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:188
 
 
 
 
 
 
11042
  msgid "Maximum total cart weight. Set zero to disable."
11043
  msgstr ""
11044
 
11045
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:194
11046
  #: includes/shipping/class-wc-shipping-wcj-custom.php:110
11047
  msgid "Weight Table Total Rows"
11048
  msgstr ""
11049
 
11050
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:196
11051
  msgid ""
11052
  "Press \"Save changes\" and reload the page after you change this number."
11053
  msgstr ""
11060
  msgid "Attribute \"name\" is required!"
11061
  msgstr ""
11062
 
11063
+ #: includes/shortcodes/class-wcj-order-items-shortcodes.php:175
11064
  msgid "Standard"
11065
  msgstr ""
11066
 
11067
+ #: includes/shortcodes/class-wcj-orders-shortcodes.php:99
11068
  msgid "Dollars"
11069
  msgstr ""
11070
 
11071
+ #: includes/shortcodes/class-wcj-orders-shortcodes.php:100
11072
  msgid "Cents"
11073
  msgstr ""
11074
 
11085
  msgstr ""
11086
 
11087
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:168
11088
+ #, php-format
11089
  msgid "%s is required!"
11090
  msgstr ""
11091
 
11105
  msgid "Edit Product"
11106
  msgstr ""
11107
 
11108
+ #: includes/shortcodes/class-wcj-products-shortcodes.php:249
11109
+ #, php-format
11110
  msgid "%s ago"
11111
  msgstr ""
11112
 
11113
+ #: includes/shortcodes/class-wcj-products-shortcodes.php:265
11114
  msgid "No sales yet."
11115
  msgstr ""
11116
 
11117
+ #: includes/shortcodes/class-wcj-shortcodes.php:98
11118
+ #, php-format
11119
  msgid "%s module not enabled!"
11120
  msgstr ""
11121
 
11122
+ #: includes/shortcodes/class-wcj-shortcodes.php:122
11123
  msgid "Wrong user role!"
11124
  msgstr ""
11125
 
11222
  #: includes/widgets/class-wcj-widget-multicurrency.php:80
11223
  msgid "Link list"
11224
  msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: algoritmika,anbinder
3
  Tags: woocommerce,booster for woocommerce,woocommerce jetpack
4
  Requires at least: 4.4
5
  Tested up to: 4.7
6
- Stable tag: 2.6.0
7
  License: GNU General Public License v3.0
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
@@ -50,11 +50,12 @@ Booster for WooCommerce is a WordPress plugin that supercharges your site with a
50
  * *Product Images* - Customize WooCommerce products images, thumbnails and sale flashes.
51
  * *Product Info* - Add additional info to WooCommerce category and single product pages.
52
  * *Product Input Fields* - WooCommerce product input fields.
53
- * *Product Listings* - Change WooCommerce display options for shop and category pages: show/hide categories count, exclude categories, show/hide empty categories. Add "products per page" selector.
54
  * *Product Tabs* - Add custom product tabs - globally or per product. Customize or completely remove WooCommerce default product tabs.
55
  * *Product Visibility by Country* - Display WooCommerce products by customer's country.
56
  * *Product Visibility by User Role* - Display WooCommerce products by customer's user role.
57
- * *Products per Page* - WooCommerce products per page.
 
58
  * *Related Products* - Change displayed WooCommerce related products number, columns, order; relate by tag, category, product attribute or manually on per product basis. Hide related products completely.
59
  * *SKU* - Generate WooCommerce SKUs automatically.
60
  * *Sorting* - Add more WooCommerce sorting options; rename or remove default sorting options; rearrange sorting options on frontend.
@@ -62,13 +63,16 @@ Booster for WooCommerce is a WordPress plugin that supercharges your site with a
62
 
63
  **Cart & Checkout**
64
 
65
- * *Cart* - Add custom info to WooCommerce cart page.
 
66
  * *Checkout Core Fields* - Customize WooCommerce core checkout fields. Disable/enable fields, set required, change labels and/or placeholders.
67
  * *Checkout Custom Fields* - Add custom fields to WooCommerce checkout page.
68
  * *Checkout Custom Info* - Add custom info to WooCommerce checkout page.
 
69
  * *Checkout Files Upload* - Let customers upload files on (or after) WooCommerce checkout.
 
70
  * *Empty Cart Button* - Add (and customize) "Empty Cart" button to WooCommerce cart and checkout pages.
71
- * *Mini Cart* - Customize WooCommerce mini cart widget.
72
 
73
  **Payment Gateways**
74
 
@@ -78,6 +82,7 @@ Booster for WooCommerce is a WordPress plugin that supercharges your site with a
78
  * *Gateways Icons* - Change or completely remove icons (images) for any (default or custom) WooCommerce payment gateway.
79
  * *Gateways Min/Max Amounts* - Add min/max amounts for WooCommerce payment gateways to show up.
80
  * *Gateways by Country or State* - Set countries or states to include/exclude for WooCommerce payment gateways to show up.
 
81
  * *Gateways by User Role* - Set user roles to include/exclude for WooCommerce payment gateways to show up.
82
  * *Gateways per Product or Category* - Show WooCommerce gateway only if there is selected product or product category in cart.
83
 
@@ -100,12 +105,11 @@ Booster for WooCommerce is a WordPress plugin that supercharges your site with a
100
 
101
  * *Admin Tools* - Booster for WooCommerce debug and log tools.
102
  * *Booster WPML* - Booster for WooCommerce basic WPML support.
103
- * *EU VAT Number* - Collect and validate EU VAT numbers on WooCommerce checkout. Automatically disable VAT for valid numbers. Add all EU countries VAT standard rates to WooCommerce.
104
  * *Emails* - Add custom emails. Add another email recipient(s) to all WooCommerce emails.
105
  * *Export* - WooCommerce export tools.
106
  * *General* - Separate custom CSS for front and back end. Shortcodes in WordPress text widgets. Custom roles tool.
107
  * *Old Slugs* - Remove old WooCommerce products slugs.
108
- * *Products XML* - WooCommerce products XML feed.
109
  * *Reports* - WooCommerce stock, sales, customers etc. reports.
110
 
111
  = Feedback =
@@ -140,6 +144,149 @@ You can see the differences between versions in this [table](http://booster.io/b
140
 
141
  == Changelog ==
142
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
143
  = 2.6.0 - 02/03/2017 =
144
  * Dev - Dashboard - Manage Settings - Restyled.
145
  * Dev - Dashboard - Manage Settings - "Autoload Booster's Options" option added.
@@ -1158,7 +1305,7 @@ You can see the differences between versions in this [table](http://booster.io/b
1158
  * Dev - PRICES & CURRENCIES - Wholesale Price - "Use total cart quantity instead of product quantity" option added.
1159
  * Dev - PRODUCTS - Product Input Fields - "File upload" field type added.
1160
  * Dev - CART & CHECKOUT - Custom Payment Gateways - Limit raised from 10 to unlimited custom gateways.
1161
- * Dev - CART & CHECKOUT - Payment Gateways Fees - "Is taxable" and "Tax class" options addded.
1162
  * Dev - CART & CHECKOUT - Payment Gateways - Code refactoring, new modules created:
1163
  Custom Payment Gateways, Payment Gateways Icons, Payment Gateways Fees, Payment Gateways per Category.
1164
  Attaching PDF Invoice V1 to emails - code moved to PDF Invoice V1 module.
3
  Tags: woocommerce,booster for woocommerce,woocommerce jetpack
4
  Requires at least: 4.4
5
  Tested up to: 4.7
6
+ Stable tag: 2.7.0
7
  License: GNU General Public License v3.0
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
50
  * *Product Images* - Customize WooCommerce products images, thumbnails and sale flashes.
51
  * *Product Info* - Add additional info to WooCommerce category and single product pages.
52
  * *Product Input Fields* - WooCommerce product input fields.
53
+ * *Product Listings* - Change WooCommerce display options for shop and category pages: show/hide categories count, exclude categories, show/hide empty categories.
54
  * *Product Tabs* - Add custom product tabs - globally or per product. Customize or completely remove WooCommerce default product tabs.
55
  * *Product Visibility by Country* - Display WooCommerce products by customer's country.
56
  * *Product Visibility by User Role* - Display WooCommerce products by customer's user role.
57
+ * *Products XML* - WooCommerce products XML feed.
58
+ * *Products per Page* - Add "products per page" selector to WooCommerce.
59
  * *Related Products* - Change displayed WooCommerce related products number, columns, order; relate by tag, category, product attribute or manually on per product basis. Hide related products completely.
60
  * *SKU* - Generate WooCommerce SKUs automatically.
61
  * *Sorting* - Add more WooCommerce sorting options; rename or remove default sorting options; rearrange sorting options on frontend.
63
 
64
  **Cart & Checkout**
65
 
66
+ * *Cart Custom Info* - Add custom info to WooCommerce cart page.
67
+ * *Cart Customization* - Customize WooCommerce cart - hide coupon field; item remove link.
68
  * *Checkout Core Fields* - Customize WooCommerce core checkout fields. Disable/enable fields, set required, change labels and/or placeholders.
69
  * *Checkout Custom Fields* - Add custom fields to WooCommerce checkout page.
70
  * *Checkout Custom Info* - Add custom info to WooCommerce checkout page.
71
+ * *Checkout Customization* - Customize WooCommerce checkout - hide "Order Again" button etc.
72
  * *Checkout Files Upload* - Let customers upload files on (or after) WooCommerce checkout.
73
+ * *EU VAT Number* - Collect and validate EU VAT numbers on WooCommerce checkout. Automatically disable VAT for valid numbers. Add all EU countries VAT standard rates to WooCommerce.
74
  * *Empty Cart Button* - Add (and customize) "Empty Cart" button to WooCommerce cart and checkout pages.
75
+ * *Mini Cart Custom Info* - Add custom info to WooCommerce mini cart widget.
76
 
77
  **Payment Gateways**
78
 
82
  * *Gateways Icons* - Change or completely remove icons (images) for any (default or custom) WooCommerce payment gateway.
83
  * *Gateways Min/Max Amounts* - Add min/max amounts for WooCommerce payment gateways to show up.
84
  * *Gateways by Country or State* - Set countries or states to include/exclude for WooCommerce payment gateways to show up.
85
+ * *Gateways by Shipping* - Set "enable for shipping methods" for WooCommerce payment gateways.
86
  * *Gateways by User Role* - Set user roles to include/exclude for WooCommerce payment gateways to show up.
87
  * *Gateways per Product or Category* - Show WooCommerce gateway only if there is selected product or product category in cart.
88
 
105
 
106
  * *Admin Tools* - Booster for WooCommerce debug and log tools.
107
  * *Booster WPML* - Booster for WooCommerce basic WPML support.
108
+ * *Custom CSS* - Another custom CSS, if you need one.
109
  * *Emails* - Add custom emails. Add another email recipient(s) to all WooCommerce emails.
110
  * *Export* - WooCommerce export tools.
111
  * *General* - Separate custom CSS for front and back end. Shortcodes in WordPress text widgets. Custom roles tool.
112
  * *Old Slugs* - Remove old WooCommerce products slugs.
 
113
  * *Reports* - WooCommerce stock, sales, customers etc. reports.
114
 
115
  = Feedback =
144
 
145
  == Changelog ==
146
 
147
+ = 2.7.0 - 12/04/2017 =
148
+ * Dev - WooCommerce v3.x.x compatibility - `wcj_get_order_item_meta_info()` - `get_meta_data()` instead of `has_meta()`.
149
+ * Dev - WooCommerce v3.x.x compatibility - Shortcodes - Orders - `[wcj_order_items_table]` - `wcj_get_order_currency()`. `get_short_description()`. `wcj_get_order_item_meta_info()`.
150
+ * Dev - WooCommerce v3.x.x compatibility - Shortcodes - Orders - `get_customer_id()`. `wcj_get_order_currency()`. `wcj_get_order_id()`. `get_customer_note()`. `get_billing_phone()`. `wc_get_order_item_meta()`.
151
+ * Dev - WooCommerce v3.x.x compatibility - Shortcodes - Orders - `[wcj_order_date]` and `[wcj_order_time]` - `get_date_created()`.
152
+ * Dev - WooCommerce v3.x.x compatibility - Shortcodes - Products Crowdfunding - `wcj_get_product_id_or_variation_parent_id()`.
153
+ * Dev - WooCommerce v3.x.x compatibility - Shortcodes - Products - `wc_get_price_including_tax()`. `wc_get_price_excluding_tax()`. `wc_display_product_attributes()`. `wc_get_product_tag_list()`. `get_short_description()`. `get_gallery_image_ids()`.
154
+ * Dev - WooCommerce v3.x.x compatibility - Shortcodes - Products - `[wcj_product_image_url]` - `wcj_get_product_id_or_variation_parent_id()`.
155
+ * Dev - WooCommerce v3.x.x compatibility - Shortcodes - Products - `[wcj_product_categories_urls]` - `wcj_get_product_id_or_variation_parent_id()`.
156
+ * Dev - WooCommerce v3.x.x compatibility - Shortcodes - Products - `[wcj_product_categories_names]` - `wcj_get_product_id_or_variation_parent_id()`.
157
+ * Dev - WooCommerce v3.x.x compatibility - Shortcodes - Products - `[wcj_product_total_sales]` - `wcj_get_product_id_or_variation_parent_id()`.
158
+ * Dev - WooCommerce v3.x.x compatibility - Shortcodes - Products - `[wcj_product_wholesale_price_table]` - `get_price` filters replaced. Get parent product ID replaced with `get_parent_id()`.
159
+ * Dev - WooCommerce v3.x.x compatibility - Shortcodes - Products - `[wcj_product_categories]` - `wc_get_product_category_list()`.
160
+ * Dev - WooCommerce v3.x.x compatibility - PRICES & CURRENCIES - Currency for External Products - `product_type` property replaced with `is_type()` function.
161
+ * Dev - WooCommerce v3.x.x compatibility - PRICES & CURRENCIES - Currency per Product - `WCJ_PRODUCT_GET_PRICE_FILTER`.
162
+ * Dev - WooCommerce v3.x.x compatibility - PRICES & CURRENCIES - Global Discount - `get_price` filters replaced. `wcj_get_product_id_or_variation_parent_id()`.
163
+ * Dev - WooCommerce v3.x.x compatibility - PRICES & CURRENCIES - Multicurrency (Currency Switcher) - `get_price` filters replaced. Get product ID replaced with `get_id()`. `wc_get_formatted_variation()` used.
164
+ * Dev - WooCommerce v3.x.x compatibility - PRICES & CURRENCIES - Multicurrency Product Base Price - `get_price` filters replaced. Get parent product ID replaced with `get_parent_id()`.
165
+ * Dev - WooCommerce v3.x.x compatibility - PRICES & CURRENCIES - Price by User Role - `get_price` filters replaced. Get product ID replaced with `get_id()`. `wc_get_formatted_variation()` used. Get parent product ID replaced with `get_parent_id()`.
166
+ * Dev - WooCommerce v3.x.x compatibility - PRICES & CURRENCIES - Prices and Currencies by Country - `get_price` filters; `wcj_get_product_id()`. `woocommerce_clean()`.
167
+ * Dev - WooCommerce v3.x.x compatibility - PRICES & CURRENCIES - Product Open Pricing (Name Your Price) - `WCJ_PRODUCT_GET_PRICE_FILTER`. `wcj_get_product_id_or_variation_parent_id()`. `wcj_get_product_status()`.
168
+ * Dev - WooCommerce v3.x.x compatibility - PRICES & CURRENCIES - Product Price by Formula - `get_price` filters; `wcj_get_product_id_or_variation_parent_id()`.
169
+ * Dev - WooCommerce v3.x.x compatibility - PRICES & CURRENCIES - Wholesale Price - `get_price` filters replaced. Get parent product ID replaced with `get_parent_id()`.
170
+ * Dev - WooCommerce v3.x.x compatibility - BUTTON & PRICE LABELS - Add to Cart Labels - `wcj_get_product_id_or_variation_parent_id()`; `product_type` -> `get_type()`.
171
+ * Dev - WooCommerce v3.x.x compatibility - BUTTON & PRICE LABELS - Call for Price - `woocommerce_get_price` -> `woocommerce_product_get_price`.
172
+ * Dev - WooCommerce v3.x.x compatibility - BUTTON & PRICE LABELS - Custom Price Labels - `wcj_get_product_id_or_variation_parent_id()`; `wcj_get_product_id()`; `product_type` -> `get_type()`. `woocommerce_price_html` filter changed.
173
+ * Dev - WooCommerce v3.x.x compatibility - BUTTON & PRICE LABELS - Free Price Labels - `wcj_get_product_id_or_variation_parent_id()`; "free price" filters;
174
+ * Dev - WooCommerce v3.x.x compatibility - PRODUCTS - Bookings - `WCJ_PRODUCT_GET_PRICE_FILTER`; `wcj_get_product_id_or_variation_parent_id()`.
175
+ * Dev - WooCommerce v3.x.x compatibility - PRODUCTS - Crowdfunding - `wcj_get_product_id_or_variation_parent_id()`.
176
+ * Dev - WooCommerce v3.x.x compatibility - PRODUCTS - Product Add to Cart - `wcj_get_product_id_or_variation_parent_id()`.
177
+ * Dev - WooCommerce v3.x.x compatibility - PRODUCTS - Product Addons - `WCJ_PRODUCT_GET_PRICE_FILTER`. `wcj_get_product_id_or_variation_parent_id()`. `wcj_get_product_display_price()`.
178
+ * Dev - WooCommerce v3.x.x compatibility - PRODUCTS - Product Cost Price - `get_prices_include_tax()`. `wcj_get_product_formatted_variation()`. `wcj_get_product_id_or_variation_parent_id()`.
179
+ * Dev - WooCommerce v3.x.x compatibility - PRODUCTS - Product Images - `wcj_get_product_id_or_variation_parent_id()`.
180
+ * Dev - WooCommerce v3.x.x compatibility - PRODUCTS - Product Input Fields - `wcj_get_product_id_or_variation_parent_id()`.
181
+ * Dev - WooCommerce v3.x.x compatibility - PRODUCTS - Product Listings - "Hide Empty" option for "Shop Page Display Options" and "Category Display Options" (removed from `woocommerce_product_subcategories_args` hook).
182
+ * Dev - WooCommerce v3.x.x compatibility - PRODUCTS - Product Tabs - `wcj_get_product_id_or_variation_parent_id()`.
183
+ * Dev - WooCommerce v3.x.x compatibility - PRODUCTS - Product Visibility by User Role - `wcj_get_product_id_or_variation_parent_id()`.
184
+ * Dev - WooCommerce v3.x.x compatibility - PRODUCTS - SKU - `get_child()`.
185
+ * Dev - WooCommerce v3.x.x compatibility - PRODUCTS - Sorting - `woocommerce_clean()`.
186
+ * Dev - WooCommerce v3.x.x compatibility - CART & CHECKOUT - Checkout Custom Fields - `wcj_get_order_id()`.
187
+ * Dev - WooCommerce v3.x.x compatibility - CART & CHECKOUT - Checkout Files Upload - `wcj_get_order_id()`.
188
+ * Dev - WooCommerce v3.x.x compatibility - CART & CHECKOUT - EU VAT Number - `get_customer_ip_address()`. `wcj_get_order_id()`.
189
+ * Dev - WooCommerce v3.x.x compatibility - PAYMENT GATEWAYS - Gateways by Country or State - `get_country()` and `get_state()`.
190
+ * Dev - WooCommerce v3.x.x compatibility - PAYMENT GATEWAYS - Gateways Currency - `WCJ_PRODUCT_GET_PRICE_FILTER`.
191
+ * Dev - WooCommerce v3.x.x compatibility - SHIPPING & ORDERS - Order Custom Statuses - `wcj_get_order_id()`.
192
+ * Dev - WooCommerce v3.x.x compatibility - SHIPPING & ORDERS - Order Numbers - `wcj_get_order_id()`; `get_date_created()`.
193
+ * Dev - WooCommerce v3.x.x compatibility - SHIPPING & ORDERS - Orders - `wcj_get_order_id()`; `woocommerce_order_get_currency`; `wcj_get_order_currency()`; `get_billing_country()`.
194
+ * Dev - WooCommerce v3.x.x compatibility - PDF INVOICING & PACKING SLIPS - `get_billing_country()`.
195
+ * Dev - WooCommerce v3.x.x compatibility - PDF INVOICING & PACKING SLIPS - Display & Misc. - `wcj_get_order_id()`.
196
+ * Dev - WooCommerce v3.x.x compatibility - PDF INVOICING & PACKING SLIPS - Emails - `wcj_get_order_id()`.
197
+ * Dev - WooCommerce v3.x.x compatibility - EMAILS & MISC. - Admin Tools - Order Meta - Additional check "if `$item_meta_value` is array" added.
198
+ * Dev - WooCommerce v3.x.x compatibility - EMAILS & MISC. - Export - Export Customers from Orders - Functions instead of accessing order properties directly.
199
+ * Dev - WooCommerce v3.x.x compatibility - EMAILS & MISC. - Export - Export Orders - Functions instead of accessing order properties directly. `wcj_get_order_currency()`.
200
+ * Dev - WooCommerce v3.x.x compatibility - EMAILS & MISC. - Export - Export Products - Functions instead of accessing order properties directly. `wcj_get_product_total_stock()`. `wc_get_price_to_display()` and more.
201
+ * Dev - WooCommerce v3.x.x compatibility - EMAILS & MISC. - General - Products Attributes - `wc_get_product_category_list()`.
202
+ * Dev - WooCommerce v3.x.x compatibility - EMAILS & MISC. - Reports - Custom Ranges - `wp_create_nonce` added.
203
+ * Dev - WooCommerce v3.x.x compatibility - EMAILS & MISC. - Reports - Orders - Monthly Sales - `wcj_get_order_currency()`.
204
+ * Dev - WooCommerce v3.x.x compatibility - EMAILS & MISC. - Reports - Stock - `wcj_get_product_total_stock()`. `wc_get_product_category_list()`.
205
+ * Dev - Code refactoring - `wcj-price-currency-functions.php` and `wcj-user-roles-functions.php` added.
206
+ * Dev - Mini-dashboards added to modules categories (instead of displaying the default category module). Modules categories descriptions added.
207
+ * Dev - Shortcodes - `on_empty` attribute added to all shortcodes.
208
+ * Dev - Shortcodes - `wcj_shortcode_result` filter added to all shortcodes.
209
+ * Dev - Shortcodes - Products - `[wcj_product_gallery_image_url]` shortcode added.
210
+ * Dev - Shortcodes - General - `[wcj_cart_items_total_quantity]` shortcode added.
211
+ * Dev - Shortcodes - Orders - `[wcj_order_status_label]` shortcode added.
212
+ * Dev - Shortcodes - Orders - `[wcj_order_items_table]` - `wcj_pdf_invoicing_cell_data` filter added.
213
+ * Dev - BUTTON & PRICE LABELS - Custom Price Labels - "Migrate from Custom Price Labels (Pro)" tool removed.
214
+ * Dev - BUTTON & PRICE LABELS - Custom Price Labels - Global Custom Price Labels - `textarea` replaced with `custom_textarea`.
215
+ * Dev - BUTTON & PRICE LABELS - Custom Price Labels - Global Custom Price Labels - "Instead of the price" option added.
216
+ * Dev - BUTTON & PRICE LABELS - More Button Labels - Hook priority changed. Default value for `get_option()` added.
217
+ * Dev - PRICES & CURRENCIES - Currency Exchange Rates - "Always Use cURL" option added.
218
+ * Dev - PRICES & CURRENCIES - Currency Exchange Rates - "Calculate with Inversion" option added.
219
+ * Dev - PRICES & CURRENCIES - Currency Exchange Rates - Code refactoring. Exchange rates functions moved to separate file. JS "Grab rate" button now works even if module is disabled.
220
+ * Dev - PRICES & CURRENCIES - Currency per Product - "Cart and Checkout Behaviour Options" settings section added.
221
+ * Dev - PRICES & CURRENCIES - Currency per Product - "WooCommerce Bookings" plugin support added.
222
+ * Fix - PRICES & CURRENCIES - Multicurrency Product Base Price - Empty sale price issue fixed.
223
+ * Fix - PRICES & CURRENCIES - Price by User Role - `woocommerce_variation_prices_regular_price` hook.
224
+ * Fix - PRICES & CURRENCIES - Prices and Currencies by Country - `wcj_price_by_country()` - Additional check `0 != $product->variation_id` added.
225
+ * Dev - PRICES & CURRENCIES - Prices and Currencies by Country - Override Country Options - "Override Scope" option added.
226
+ * Fix - PRODUCTS - Bookings - `wcj-bookings.js` - `_ajax_object`.
227
+ * Fix - PRODUCTS - Product Addons - `wcj-product-addons.js` - `_ajax_object`.
228
+ * Dev - PRODUCTS - Product Images - "Single Product Thumbnails Columns" - Filter priority changed.
229
+ * Dev - PRODUCTS - Product Input Fields - Timepicker - "Min time" and "Max time" options added.
230
+ * Dev - PRODUCTS - Product Input Fields - Check for enabled fields added in `add_product_input_fields_to_cart_item_data()`.
231
+ * Fix - PRODUCTS - Product Input Fields - Check for enabled fields fixed (in `validate_product_input_fields_on_add_to_cart()` and `add_product_input_fields_to_order_item_name()`.
232
+ * Fix - PRODUCTS - Product Input Fields - Product Input Fields Global Options - Product Input Fields Number - Tooltip fixed.
233
+ * Fix - PRODUCTS - Product Listings - "Hide Empty" option for "Shop Page Display Options" and "Category Display Options" fixed (was giving reverse results).
234
+ * Dev - PRODUCTS - Product Listings - "Exclude Categories" option for "Shop Page Display Options" and "Category Display Options" changed from comma separated string to multiselect.
235
+ * Fix - PRODUCTS - Product Visibility by User Role - Query - Fixed (`offset` and `posts_per_page` removed).
236
+ * Dev - PRODUCTS - SKU - `WP_Query` optimized to return `ids` only.
237
+ * Dev - PRODUCTS - SKU - "Generate SKUs Only for Products with Empty SKU" option added.
238
+ * Dev - CART & CHECKOUT - Cart Customization - Initial module release. And "Hide Coupon on Cart Page" option moved from "General" module.
239
+ * Fix - CART & CHECKOUT - Checkout Custom Fields - Custom Fields Number - Tooltip fixed.
240
+ * Dev - CART & CHECKOUT - Checkout Customization - Initial module release. And "Hide "Order Again" Button on "View Order" Page" option moved from "General" module.
241
+ * Fix - CART & CHECKOUT - EU VAT Number - `eu-vat-number.js` - `_ajax_object`.
242
+ * Dev - PAYMENT GATEWAYS - Gateways by Shipping - Initial module release.
243
+ * Dev - PAYMENT GATEWAYS - Gateways Fees and Discounts - Code refactoring.
244
+ * Dev - PAYMENT GATEWAYS - Gateways Fees and Discounts - "Multicurrency (Currency Switcher)" module support added.
245
+ * Dev - SHIPPING & ORDERS - Order Numbers - "Number Generation" selection added (and "Pseudorandom - Hash (max 10 digits)" option).
246
+ * Dev - SHIPPING & ORDERS - Order Numbers - Default values added to all `get_option()` calls. Code cleaned up.
247
+ * Dev - SHIPPING & ORDERS - Orders - Orders Auto-Complete - `woocommerce_payment_complete` hook added.
248
+ * Fix - SHIPPING & ORDERS - Shipping - Custom Shipping (legacy and with zones) - `woocommerce_shipping_init` hook replaced with `init` hook.
249
+ * Dev - PDF INVOICING & PACKING SLIPS - Multiple custom documents added.
250
+ * Dev - EMAILS & MISC. - Custom CSS - Initial module release. CSS options moved from "General" module.
251
+ * Dev - EMAILS & MISC. - Emails - "Product Info in Item Name" options added.
252
+ * Dev - EMAILS & MISC. - General - "URL Coupons" options added.
253
+ * Fix - EMAILS & MISC. - Reports - Orders - Product Sales - "year not set" notice fixed.
254
+ * Dev - EMAILS & MISC. - Reports - Booster: More Ranges - "Same Days Last Year" option added.
255
+ * Dev - `WCJ_Module` class code refactoring - `add_settings_hook()` function added.
256
+ * Dev - Code refactoring - `add_settings_hook()` - PRICES & CURRENCIES - Currency per Product.
257
+ * Dev - Code refactoring - `add_settings_hook()` - PRICES & CURRENCIES - Multicurrency Product Base Price.
258
+ * Dev - Code refactoring - `add_settings_hook()` - PRICES & CURRENCIES - Price by User Role.
259
+ * Dev - Code refactoring - `add_settings_hook()` - PRICES & CURRENCIES - Price Formats.
260
+ * Dev - Code refactoring - `add_settings_hook()` - PRICES & CURRENCIES - Wholesale Price.
261
+ * Dev - Code refactoring - `add_settings_hook()` - BUTTON & PRICE LABELS - Free Price Labels.
262
+ * Dev - Code refactoring - `add_settings_hook()` - PRODUCTS - Product Info.
263
+ * Dev - Code refactoring - `add_settings_hook()` - PRODUCTS - Product Listings.
264
+ * Dev - Code refactoring - `add_settings_hook()` - PRODUCTS - Products per Page.
265
+ * Dev - Code refactoring - `add_settings_hook()` - PAYMENT GATEWAYS - Gateways Currency.
266
+ * Dev - Code refactoring - `add_settings_hook()` - PAYMENT GATEWAYS - Gateways by User Role.
267
+ * Dev - Code refactoring - `add_settings_hook()` - PAYMENT GATEWAYS - Gateways by Country or State.
268
+ * Dev - Code refactoring - `add_settings_hook()` - PAYMENT GATEWAYS - Gateways Min/Max Amounts.
269
+ * Dev - Code refactoring - `add_settings_hook()` - PAYMENT GATEWAYS - Gateways per Product or Category.
270
+ * Dev - Code refactoring - `add_settings_hook()` - SHIPPING & ORDERS - Left to Free Shipping.
271
+ * Dev - Code refactoring - `add_settings_hook()` - SHIPPING & ORDERS - Order Minimum Amount.
272
+ * Dev - Code refactoring - `add_settings_hook()` - SHIPPING & ORDERS - Orders.
273
+ * Dev - Code refactoring - `add_settings_hook()` - SHIPPING & ORDERS - Shipping.
274
+ * Dev - Code refactoring - `wcj_add_change_price_hooks()` function added.
275
+ * Dev - Code refactoring - `wcj_add_change_price_hooks()` - PRICES & CURRENCIES - Multicurrency (Currency Switcher).
276
+ * Dev - Code refactoring - `wcj_add_change_price_hooks()` - PRICES & CURRENCIES - Multicurrency Product Base Price.
277
+ * Dev - Code refactoring - `wcj_add_change_price_hooks()` - PRICES & CURRENCIES - Price by User Role.
278
+ * Dev - Code refactoring - `wcj_add_change_price_hooks()` - PRICES & CURRENCIES - Prices and Currencies by Country.
279
+ * Dev - Code refactoring - `wcj_add_change_price_hooks()` - PRICES & CURRENCIES - Product Price by Formula.
280
+ * Tweak - Dashboard - Modules count (all and active) added.
281
+ * Tweak - Tooltip for admin added to all "Module Tools" sections.
282
+ * Tweak - Language (POT) file updated.
283
+ * Tweak - PRODUCTS - Crowdfunding - Module description updated.
284
+ * Tweak - PRODUCTS - Product Listings - Description updated.
285
+ * Tweak - PRODUCTS - Products per Page - Description updated.
286
+ * Tweak - CART & CHECKOUT - Mini Cart - Module renamed to "Mini Cart Custom Info". Description updated.
287
+ * Tweak - EMAILS & MISC. - EU VAT Number - Moved to "CART & CHECKOUT" category.
288
+ * Tweak - EMAILS & MISC. - Products XML - Moved to "PRODUCTS" category.
289
+
290
  = 2.6.0 - 02/03/2017 =
291
  * Dev - Dashboard - Manage Settings - Restyled.
292
  * Dev - Dashboard - Manage Settings - "Autoload Booster's Options" option added.
1305
  * Dev - PRICES & CURRENCIES - Wholesale Price - "Use total cart quantity instead of product quantity" option added.
1306
  * Dev - PRODUCTS - Product Input Fields - "File upload" field type added.
1307
  * Dev - CART & CHECKOUT - Custom Payment Gateways - Limit raised from 10 to unlimited custom gateways.
1308
+ * Dev - CART & CHECKOUT - Payment Gateways Fees - "Is taxable" and "Tax class" options added.
1309
  * Dev - CART & CHECKOUT - Payment Gateways - Code refactoring, new modules created:
1310
  Custom Payment Gateways, Payment Gateways Icons, Payment Gateways Fees, Payment Gateways per Category.
1311
  Attaching PDF Invoice V1 to emails - code moved to PDF Invoice V1 module.
woocommerce-jetpack.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Booster for WooCommerce
4
  Plugin URI: http://booster.io
5
  Description: Supercharge your WooCommerce site with these awesome powerful features.
6
- Version: 2.6.0
7
  Author: Algoritmika Ltd
8
  Author URI: http://www.algoritmika.com
9
  Text Domain: woocommerce-jetpack
@@ -22,13 +22,16 @@ if (
22
  ! ( is_multisite() && array_key_exists( $plugin, get_site_option( 'active_sitewide_plugins', array() ) ) )
23
  ) return;
24
 
 
 
 
25
  if ( ! class_exists( 'WC_Jetpack' ) ) :
26
 
27
  /**
28
  * Main WC_Jetpack Class
29
  *
30
  * @class WC_Jetpack
31
- * @version 2.6.0
32
  */
33
 
34
  final class WC_Jetpack {
@@ -39,7 +42,7 @@ final class WC_Jetpack {
39
  * @var string
40
  * @since 2.4.7
41
  */
42
- public $version = '2.6.0';
43
 
44
  /**
45
  * @var WC_Jetpack The single instance of the class
@@ -276,7 +279,7 @@ final class WC_Jetpack {
276
  /**
277
  * maybe_enqueue_timepicker_scripts.
278
  *
279
- * @version 2.4.0
280
  * @since 2.4.0
281
  */
282
  function maybe_enqueue_timepicker_scripts() {
@@ -284,11 +287,11 @@ final class WC_Jetpack {
284
  wp_enqueue_script( 'jquery-ui-timepicker',
285
  wcj_plugin_url() . '/includes/js/jquery.timepicker.min.js',
286
  array( 'jquery' ),
287
- false,
288
  true );
289
  wp_enqueue_script( 'wcj-timepicker', wcj_plugin_url() . '/includes/js/wcj-timepicker.js',
290
  array( 'jquery' ),
291
- false,
292
  true );
293
  }
294
  }
@@ -493,11 +496,14 @@ final class WC_Jetpack {
493
  /**
494
  * include_functions.
495
  *
496
- * @version 2.5.9
497
  */
498
  private function include_functions() {
499
  include_once( 'includes/functions/wcj-debug-functions.php' );
500
  include_once( 'includes/functions/wcj-functions.php' );
 
 
 
501
  include_once( 'includes/functions/wcj-functions-number-to-words.php' );
502
  include_once( 'includes/functions/wcj-functions-number-to-words-bg.php' );
503
  include_once( 'includes/functions/wcj-functions-number-to-words-lt.php' );
@@ -530,7 +536,7 @@ final class WC_Jetpack {
530
  /**
531
  * Include modules and submodules
532
  *
533
- * @version 2.6.0
534
  */
535
  function include_modules() {
536
  $modules_files = array(
@@ -565,12 +571,14 @@ final class WC_Jetpack {
565
  'includes/class-wcj-add-to-cart.php',
566
  'includes/class-wcj-more-button-labels.php',
567
  'includes/class-wcj-cart.php',
 
568
  'includes/class-wcj-empty-cart-button.php',
569
  'includes/class-wcj-mini-cart.php',
570
  'includes/class-wcj-checkout-core-fields.php',
571
  'includes/class-wcj-checkout-custom-fields.php',
572
  'includes/class-wcj-checkout-files-upload.php',
573
  'includes/class-wcj-checkout-custom-info.php',
 
574
  'includes/class-wcj-payment-gateways.php',
575
  'includes/class-wcj-payment-gateways-icons.php',
576
  'includes/class-wcj-payment-gateways-fees.php',
@@ -579,6 +587,7 @@ final class WC_Jetpack {
579
  'includes/class-wcj-payment-gateways-min-max.php',
580
  'includes/class-wcj-payment-gateways-by-country.php',
581
  'includes/class-wcj-payment-gateways-by-user-role.php',
 
582
  'includes/class-wcj-shipping.php',
583
  'includes/class-wcj-left-to-free-shipping.php',
584
  'includes/class-wcj-shipping-calculator.php',
@@ -599,6 +608,7 @@ final class WC_Jetpack {
599
  'includes/class-wcj-currency-exchange-rates.php',
600
  'includes/class-wcj-price-formats.php',
601
  'includes/class-wcj-general.php',
 
602
  'includes/class-wcj-products-xml.php',
603
  'includes/class-wcj-export-import.php',
604
  // 'includes/class-wcj-shortcodes-module.php',
3
  Plugin Name: Booster for WooCommerce
4
  Plugin URI: http://booster.io
5
  Description: Supercharge your WooCommerce site with these awesome powerful features.
6
+ Version: 2.7.0
7
  Author: Algoritmika Ltd
8
  Author URI: http://www.algoritmika.com
9
  Text Domain: woocommerce-jetpack
22
  ! ( is_multisite() && array_key_exists( $plugin, get_site_option( 'active_sitewide_plugins', array() ) ) )
23
  ) return;
24
 
25
+ // Constants
26
+ require_once( 'includes/constants/wcj-constants.php' );
27
+
28
  if ( ! class_exists( 'WC_Jetpack' ) ) :
29
 
30
  /**
31
  * Main WC_Jetpack Class
32
  *
33
  * @class WC_Jetpack
34
+ * @version 2.7.0
35
  */
36
 
37
  final class WC_Jetpack {
42
  * @var string
43
  * @since 2.4.7
44
  */
45
+ public $version = '2.7.0';
46
 
47
  /**
48
  * @var WC_Jetpack The single instance of the class
279
  /**
280
  * maybe_enqueue_timepicker_scripts.
281
  *
282
+ * @version 2.7.0
283
  * @since 2.4.0
284
  */
285
  function maybe_enqueue_timepicker_scripts() {
287
  wp_enqueue_script( 'jquery-ui-timepicker',
288
  wcj_plugin_url() . '/includes/js/jquery.timepicker.min.js',
289
  array( 'jquery' ),
290
+ $this->version,
291
  true );
292
  wp_enqueue_script( 'wcj-timepicker', wcj_plugin_url() . '/includes/js/wcj-timepicker.js',
293
  array( 'jquery' ),
294
+ $this->version,
295
  true );
296
  }
297
  }
496
  /**
497
  * include_functions.
498
  *
499
+ * @version 2.7.0
500
  */
501
  private function include_functions() {
502
  include_once( 'includes/functions/wcj-debug-functions.php' );
503
  include_once( 'includes/functions/wcj-functions.php' );
504
+ include_once( 'includes/functions/wcj-price-currency-functions.php' );
505
+ include_once( 'includes/functions/wcj-user-roles-functions.php' );
506
+ include_once( 'includes/functions/wcj-exchange-rates-functions.php' );
507
  include_once( 'includes/functions/wcj-functions-number-to-words.php' );
508
  include_once( 'includes/functions/wcj-functions-number-to-words-bg.php' );
509
  include_once( 'includes/functions/wcj-functions-number-to-words-lt.php' );
536
  /**
537
  * Include modules and submodules
538
  *
539
+ * @version 2.7.0
540
  */
541
  function include_modules() {
542
  $modules_files = array(
571
  'includes/class-wcj-add-to-cart.php',
572
  'includes/class-wcj-more-button-labels.php',
573
  'includes/class-wcj-cart.php',
574
+ 'includes/class-wcj-cart-customization.php',
575
  'includes/class-wcj-empty-cart-button.php',
576
  'includes/class-wcj-mini-cart.php',
577
  'includes/class-wcj-checkout-core-fields.php',
578
  'includes/class-wcj-checkout-custom-fields.php',
579
  'includes/class-wcj-checkout-files-upload.php',
580
  'includes/class-wcj-checkout-custom-info.php',
581
+ 'includes/class-wcj-checkout-customization.php',
582
  'includes/class-wcj-payment-gateways.php',
583
  'includes/class-wcj-payment-gateways-icons.php',
584
  'includes/class-wcj-payment-gateways-fees.php',
587
  'includes/class-wcj-payment-gateways-min-max.php',
588
  'includes/class-wcj-payment-gateways-by-country.php',
589
  'includes/class-wcj-payment-gateways-by-user-role.php',
590
+ 'includes/class-wcj-payment-gateways-by-shipping.php',
591
  'includes/class-wcj-shipping.php',
592
  'includes/class-wcj-left-to-free-shipping.php',
593
  'includes/class-wcj-shipping-calculator.php',
608
  'includes/class-wcj-currency-exchange-rates.php',
609
  'includes/class-wcj-price-formats.php',
610
  'includes/class-wcj-general.php',
611
+ 'includes/class-wcj-custom-css.php',
612
  'includes/class-wcj-products-xml.php',
613
  'includes/class-wcj-export-import.php',
614
  // 'includes/class-wcj-shortcodes-module.php',