Booster for WooCommerce - Version 2.5.7

Version Description

  • 27/11/2016 =
  • Fix - load_plugin_textdomain moved from init hook to constructor (fixes the issue with module titles, descriptions not translating).
  • Fix - class-wcj-currency-reports.php - filter_reports is now applied on wc-reports page only.
  • Dev - unclean_custom_textarea() added.
  • Dev - Made "Booster Tools" accessible to shop manager.
  • Dev - Shortcodes - find and replace attributes added to all shortcodes.
  • Dev - Shortcodes - General - [wcj_wholesale_price_table] - %level_max_qty% replace value added to heading_format attribute. %level_qty% marked as deprecated (%level_min_qty% should be used instead).
  • Dev - Shortcodes - Orders - [wcj_order_items_total_weight] replaced with [wcj_order_total_weight].
  • Dev - Shortcodes - Orders - [wcj_order_total_width], [wcj_order_total_height] and [wcj_order_total_length] shortcodes added.
  • Dev - Shortcodes - Orders - [wcj_order_items] shortcode added.
  • Dev - Shortcodes - Orders - [wcj_order_items_table] - item_image_width and item_image_height replaced with product_image_width and product_image_height.
  • Dev - Shortcodes - Orders - [wcj_order_items_table] - columns - Added to all appropriate item_ columns: product_name, product_attribute, product_excerpt, product_short_description, product_variation, product_thumbnail, product_sku, product_weight.
  • Dev - Shortcodes - Orders - [wcj_order_items_table] - columns - product_length, product_width and product_height columns added.
  • Dev - Shortcodes - Orders - [wcj_order_items_table] - item_short_description - now displays item's short description (may be different from item_excerpt). item_description attribute removed.
  • Dev - Shortcodes - Orders - [wcj_order_items_table] - columns - product_regular_price and product_sale_price columns added.
  • Dev - Shortcodes - Orders - [wcj_order_items_table] - columns - item_tax_class column added.
  • Dev - Shortcodes - Products - [wcj_product_price_excluding_tax] and [wcj_product_price_including_tax] - multiply_by attribute added. And both functions code refactored.
  • Fix - Shortcodes - Products - [wcj_product_excerpt] - Manually checking for short description first (so length can be applied).
  • Dev - Shortcodes - Products - [wcj_product_excerpt] - excerpt_length attribute deprecated (replaced with length).
  • Dev - Shortcodes - Products - [wcj_product_short_description] shortcode added.
  • Dev - Shortcodes - Products - [wcj_product_url] shortcode added.
  • Dev - Shortcodes - Products - [wcj_product_image_url] shortcode added.
  • Dev - Shortcodes - Products - [wcj_product_categories_names] shortcode added.
  • Dev - Shortcodes - Products - [wcj_product_categories_urls] shortcode added.
  • Dev - Shortcodes - Products - [wcj_product_meta] shortcode added.
  • Dev - Shortcodes - Products - [wcj_product_wholesale_price_table] - %level_max_qty% replace value added to heading_format attribute. %level_qty% marked as deprecated (%level_min_qty% should be used instead).
  • Dev - PRICES & CURRENCIES - Global Discount - Initial module release.
  • Dev - PRICES & CURRENCIES - Multicurrency (Currency Switcher) - Compatibility - "WooCommerce TM Extra Product Options" plugin.
  • Dev - PRICES & CURRENCIES - Price by User Role - "Search Engine Bots" option added.
  • Dev - PRICES & CURRENCIES - Wholesale Price - Global settings discount now can be negative.
  • Dev - PRICES & CURRENCIES - Wholesale Price - Per product - "Price directly" option added (for non variable products only).
  • Dev - BUTTON & PRICE LABELS - Call for Price - "Make All Products Call for Price" option added.
  • Fix - PRODUCTS - User Products - "My Account > Products" fixed.
  • Fix - PAYMENT GATEWAYS - Custom Gateways - Enable for shipping methods - Empty method title bug fixed.
  • Fix - SHIPPING & ORDERS - Order Custom Statuses - Custom Statuses tool - Empty array passed on apply wc_order_statuses filter (produced PHP warning).
  • Dev - SHIPPING & ORDERS - Order Minimum Amount - Initial module release (moved from Orders module).
  • Dev - SHIPPING & ORDERS - Orders - "Admin Orders List Columns Order" section added. Priorities in all Booster's added manage_edit-shop_order_columns filters changed.
  • Dev - SHIPPING & ORDERS - Orders - "Admin Orders List Multiple Status" section added.
  • Dev - SHIPPING & ORDERS - Shipping - Custom Shipping with Zones - "Min Weight" and "Max Weight" options added.
  • Dev - SHIPPING & ORDERS - Shipping Calculator - "Labels" settings section added.
  • Dev - PDF INVOICING & PACKING SLIPS - "Generate" and "Download" bulk actions added to admin orders list.
  • Dev - PDF INVOICING & PACKING SLIPS - Invoices Report tool - get_invoices_report_data() - WP_Query optimized to return ids only.
  • Dev - PDF INVOICING & PACKING SLIPS - Invoices Report tool - "Download monthly documents CSV" added.
  • Dev - EMAILS & MISC. - Admin Tools - "System Info" table added.
  • Dev - EMAILS & MISC. - Admin Tools - "PHP Memory Limit" option added.
  • Fix - EMAILS & MISC. - EU VAT Number - Preserve VAT in Base Country - EL replaced with GR for Greece when checking location.
  • Dev - EMAILS & MISC. - EU VAT Number - Validate VAT without SOAP fallback added (validate_vat_no_soap function).
  • Dev - EMAILS & MISC. - Export - "UTF-8 BOM" option added.
  • Fix - EMAILS & MISC. - Export - Export Orders - "Order Date" column fixed.
  • Dev - EMAILS & MISC. - Export - Export Orders - "Order Time" column added.
  • Dev - EMAILS & MISC. - Export - Export Products - Stock - get_stock_quantity() replaced with get_total_stock(). Separate "Stock Quantity" export field added.
  • Dev - EMAILS & MISC. - Export - Export Products - Variable and grouped products price, regular price, sale price, stock quantity and total stock for each variation added.
  • Dev - EMAILS & MISC. - Export - Export Products - "Additional Export Products Fields" section added.
  • Dev - EMAILS & MISC. - Export - Export Products - "Export Products Fields" option added.
  • Dev - EMAILS & MISC. - Export - Export Products - "Image URL", "Short Description", "Description", "Status", "URL", "Shipping Class", "Shipping Class Id", "Width", "Length", "Height", "Weight", "Downloadable", "Virtual", "Sold Individually", "Tax Status", "Tax Class", "Manage Stock", "Stock Status", "Backorders", "Featured" and "Visibility" export fields added.
  • Dev - EMAILS & MISC. - Export - Export Products - WP_Query optimized to return ids only.
  • Dev - EMAILS & MISC. - General - "Session Expiration Options" section added.
  • Dev - EMAILS & MISC. - Products XML - Initial module release.
  • Dev - EMAILS & MISC. - Reports - Booster: Product Sales - Variations added in report.
  • Tweak - Deprecated typo fixed.
  • Tweak - WCJ_Module - create_meta_box() - wcj_get_meta_box_options_type_price_step filter added.
  • Tweak - wcj_get_table_html() - "row_styles" parameter added.
  • Tweak - Language (POT) file updated.
  • Tweak - Shortcodes - Products - [wcj_product_excerpt] - Using product_excerpt_length object property instead of global variable.
  • Tweak - Shortcodes - Products - [wcj_product_wholesale_price_table] - wcj_product_wholesale_price_table_price_before and wcj_product_wholesale_price_table_price_after filters added.
  • Tweak - PRICES & CURRENCIES - Price by User Role - change_price_by_role() - wcj_price_by_user_role_get_price filter added.
  • Tweak - PRICES & CURRENCIES - Wholesale Price - get_wholesale_price() - price_directly - wcj_get_wholesale_price filter added.
  • Tweak - CART & CHECKOUT - Empty Cart Button - Description updated.
  • Tweak - SHIPPING & ORDERS - Order Custom Statuses - Custom Statuses tool - User messages updated.
  • Tweak - SHIPPING & ORDERS - Order Custom Statuses - Custom Statuses tool - "Add new custom status" button label added to translation.
  • Tweak - SHIPPING & ORDERS - Shipping - Custom Shipping - "Weight Table Total Rows" option description updated.
  • Tweak - PDF INVOICING & PACKING SLIPS - Invoices Report tool - get_invoices_report_zip() - Headers cleaned up.
  • Tweak - PDF INVOICING & PACKING SLIPS - Invoices Report tool - Calling get_tool_header_html() instead of directly outputting header.
  • Tweak - EMAILS & MISC. - Export - Tool header added to all export tools.
  • Tweak - EMAILS & MISC. - Export - Headers cleaned up.
  • Tweak - EMAILS & MISC. - Reports - Button restyled in admin settings.
Download this release

Release Info

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

Code changes from version 2.5.6 to 2.5.7

Files changed (48) hide show
  1. includes/admin/class-wc-settings-jetpack.php +17 -6
  2. includes/admin/class-wcj-tools.php +3 -3
  3. includes/admin/wcj-modules-cats.php +4 -1
  4. includes/class-wcj-add-to-cart.php +4 -4
  5. includes/class-wcj-admin-tools.php +70 -24
  6. includes/class-wcj-call-for-price.php +37 -10
  7. includes/class-wcj-empty-cart-button.php +3 -3
  8. includes/class-wcj-eu-vat-number.php +6 -2
  9. includes/class-wcj-export-import.php +360 -54
  10. includes/class-wcj-general.php +60 -3
  11. includes/class-wcj-global-discount.php +298 -0
  12. includes/class-wcj-multicurrency.php +25 -2
  13. includes/class-wcj-order-custom-statuses.php +14 -14
  14. includes/class-wcj-order-min-amount.php +296 -0
  15. includes/class-wcj-orders.php +238 -232
  16. includes/class-wcj-payment-gateways-icons.php +3 -3
  17. includes/class-wcj-pdf-invoicing.php +166 -2
  18. includes/class-wcj-price-by-user-role.php +16 -6
  19. includes/class-wcj-price-labels.php +1 -1
  20. includes/class-wcj-product-by-user.php +54 -11
  21. includes/class-wcj-product-info.php +8 -8
  22. includes/class-wcj-product-listings.php +2 -2
  23. includes/class-wcj-product-tabs.php +4 -4
  24. includes/class-wcj-products-xml.php +312 -0
  25. includes/class-wcj-purchase-data.php +3 -3
  26. includes/class-wcj-reports.php +27 -18
  27. includes/class-wcj-shipping-calculator.php +50 -10
  28. includes/class-wcj-wholesale-price.php +30 -18
  29. includes/classes/class-wcj-module.php +5 -5
  30. includes/css/wcj-shipping-calculator.css +9 -0
  31. includes/functions/wcj-functions.php +72 -14
  32. includes/functions/wcj-html-functions.php +12 -8
  33. includes/gateways/class-wc-gateway-wcj-custom.php +4 -4
  34. includes/js/wcj-shipping-calculator.js +19 -0
  35. includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php +65 -23
  36. includes/pdf-invoices/settings/class-wcj-pdf-invoicing-display.php +3 -3
  37. includes/price-by-country/class-wcj-price-by-country-core.php +3 -13
  38. includes/reports/class-wcj-currency-reports.php +14 -10
  39. includes/reports/wcj-class-reports-sales.php +58 -22
  40. includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php +46 -7
  41. includes/shortcodes/class-wcj-general-shortcodes.php +14 -5
  42. includes/shortcodes/class-wcj-order-items-shortcodes.php +85 -21
  43. includes/shortcodes/class-wcj-orders-shortcodes.php +131 -12
  44. includes/shortcodes/class-wcj-products-shortcodes.php +175 -56
  45. includes/shortcodes/class-wcj-shortcodes.php +9 -3
  46. langs/woocommerce-jetpack.pot +890 -612
  47. readme.txt +105 -20
  48. woocommerce-jetpack.php +74 -12
includes/admin/class-wc-settings-jetpack.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Settings class.
6
  *
7
- * @version 2.5.5
8
  * @since 1.0.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -18,7 +18,7 @@ class WC_Settings_Jetpack extends WC_Settings_Page {
18
  /**
19
  * Constructor.
20
  *
21
- * @version 2.2.8
22
  */
23
  function __construct() {
24
 
@@ -38,6 +38,17 @@ class WC_Settings_Jetpack extends WC_Settings_Page {
38
  add_action( 'woocommerce_admin_field_custom_link', array( $this, 'output_custom_link' ) );
39
  add_action( 'woocommerce_admin_field_module_tools', array( $this, 'output_module_tools' ) );
40
  add_action( 'woocommerce_admin_field_custom_textarea', array( $this, 'output_custom_textarea' ) );
 
 
 
 
 
 
 
 
 
 
 
41
  }
42
 
43
  /**
@@ -267,15 +278,15 @@ class WC_Settings_Jetpack extends WC_Settings_Page {
267
  $is_dashboard = ( '' != $current_section && 'alphabetically' != $current_section && 'by_category' != $current_section && 'active' != $current_section && 'manager' != $current_section )
268
  ? false : true;
269
 
270
- // Depreciated message
271
- $depreciated_modules_and_links = array(
272
  'product_info' => '<a href="' . admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=products&section=product_custom_info' ) . '">' . __( 'Product Info', 'woocommerce-jetpack' ) . '</a>',
273
  );
274
- if ( array_key_exists( $current_section, $depreciated_modules_and_links ) ) {
275
  echo '<div id="wcj_message" class="error">';
276
  echo '<p>';
277
  echo '<strong>';
278
- echo sprintf( __( 'Please note that current <em>%s</em> module is depreciated and will be removed in future updates. Please use <em>%s</em> module instead.', 'woocommerce-jetpack' ), WCJ()->modules[ $current_section ]->short_desc, $depreciated_modules_and_links[ $current_section ] );
279
  echo '</strong>';
280
  echo '</p>';
281
  echo '</div>';
4
  *
5
  * The WooCommerce Jetpack Settings class.
6
  *
7
+ * @version 2.5.7
8
  * @since 1.0.0
9
  * @author Algoritmika Ltd.
10
  */
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 2.5.7
22
  */
23
  function __construct() {
24
 
38
  add_action( 'woocommerce_admin_field_custom_link', array( $this, 'output_custom_link' ) );
39
  add_action( 'woocommerce_admin_field_module_tools', array( $this, 'output_module_tools' ) );
40
  add_action( 'woocommerce_admin_field_custom_textarea', array( $this, 'output_custom_textarea' ) );
41
+ add_filter( 'woocommerce_admin_settings_sanitize_option', array( $this, 'unclean_custom_textarea' ), PHP_INT_MAX, 3 );
42
+ }
43
+
44
+ /**
45
+ * unclean_custom_textarea.
46
+ *
47
+ * @version 2.5.7
48
+ * @since 2.5.7
49
+ */
50
+ function unclean_custom_textarea( $value, $option, $raw_value ) {
51
+ return ( 'custom_textarea' === $option['type'] ) ? $raw_value : $value;
52
  }
53
 
54
  /**
278
  $is_dashboard = ( '' != $current_section && 'alphabetically' != $current_section && 'by_category' != $current_section && 'active' != $current_section && 'manager' != $current_section )
279
  ? false : true;
280
 
281
+ // Deprecated message
282
+ $deprecated_modules_and_links = array(
283
  'product_info' => '<a href="' . admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=products&section=product_custom_info' ) . '">' . __( 'Product Info', 'woocommerce-jetpack' ) . '</a>',
284
  );
285
+ if ( array_key_exists( $current_section, $deprecated_modules_and_links ) ) {
286
  echo '<div id="wcj_message" class="error">';
287
  echo '<p>';
288
  echo '<strong>';
289
+ echo sprintf( __( 'Please note that current <em>%s</em> module is deprecated and will be removed in future updates. Please use <em>%s</em> module instead.', 'woocommerce-jetpack' ), WCJ()->modules[ $current_section ]->short_desc, $deprecated_modules_and_links[ $current_section ] );
290
  echo '</strong>';
291
  echo '</p>';
292
  echo '</div>';
includes/admin/class-wcj-tools.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Tools class.
6
  *
7
- * @version 2.3.10
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -26,14 +26,14 @@ class WCJ_Tools {
26
  /**
27
  * add_wcj_tools.
28
  *
29
- * @version 2.2.4
30
  */
31
  function add_wcj_tools() {
32
  add_submenu_page(
33
  'woocommerce',
34
  __( 'Booster for WooCommerce Tools', 'woocommerce-jetpack' ),
35
  __( 'Booster Tools', 'woocommerce-jetpack' ),
36
- 'manage_options',
37
  'wcj-tools',
38
  array( $this, 'create_tools_page' )
39
  );
4
  *
5
  * The WooCommerce Jetpack Tools class.
6
  *
7
+ * @version 2.5.7
8
  * @author Algoritmika Ltd.
9
  */
10
 
26
  /**
27
  * add_wcj_tools.
28
  *
29
+ * @version 2.5.7
30
  */
31
  function add_wcj_tools() {
32
  add_submenu_page(
33
  'woocommerce',
34
  __( 'Booster for WooCommerce Tools', 'woocommerce-jetpack' ),
35
  __( 'Booster Tools', 'woocommerce-jetpack' ),
36
+ 'manage_woocommerce',
37
  'wcj-tools',
38
  array( $this, 'create_tools_page' )
39
  );
includes/admin/wcj-modules-cats.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Modules Array.
6
  *
7
- * @version 2.5.5
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -37,6 +37,7 @@ return array(
37
  'product_open_pricing',
38
  'price_by_user_role',
39
  'product_price_by_formula',
 
40
  'currency_exchange_rates',
41
  'price_formats',
42
  ),
@@ -113,6 +114,7 @@ return array(
113
  'shipping_calculator',
114
  'address_formats',
115
  'orders',
 
116
  'order_numbers',
117
  'order_custom_statuses',
118
  ),
@@ -139,6 +141,7 @@ return array(
139
  'default_cat_id' => 'general',
140
  'all_cat_ids' => array(
141
  'general',
 
142
  'export',
143
  // 'shortcodes',
144
  'eu_vat_number',
4
  *
5
  * The WooCommerce Modules Array.
6
  *
7
+ * @version 2.5.7
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
37
  'product_open_pricing',
38
  'price_by_user_role',
39
  'product_price_by_formula',
40
+ 'global_discount',
41
  'currency_exchange_rates',
42
  'price_formats',
43
  ),
114
  'shipping_calculator',
115
  'address_formats',
116
  'orders',
117
+ 'order_min_amount',
118
  'order_numbers',
119
  'order_custom_statuses',
120
  ),
141
  'default_cat_id' => 'general',
142
  'all_cat_ids' => array(
143
  'general',
144
+ 'products_xml',
145
  'export',
146
  // 'shortcodes',
147
  'eu_vat_number',
includes/class-wcj-add-to-cart.php CHANGED
@@ -244,10 +244,10 @@ class WCJ_Add_To_Cart extends WCJ_Module {
244
 
245
  for ( $i = 1; $i <= apply_filters( 'wcj_get_option_filter', 1, get_option( 'wcj_add_to_cart_per_category_total_groups_number', 1 ) ); $i++ ) {
246
 
247
- /* $depreciated = get_option( 'wcj_add_to_cart_per_category_group_' . $i );
248
- if ( false !== $depreciated ) {
249
- if ( '' != $depreciated ) {
250
- update_option( 'wcj_add_to_cart_per_category_ids_group_' . $i, explode( ',', str_replace( ' ', '', $depreciated ) ) );
251
  }
252
  //delete_option( 'wcj_add_to_cart_per_category_group_' . $i );
253
  } */
244
 
245
  for ( $i = 1; $i <= apply_filters( 'wcj_get_option_filter', 1, get_option( 'wcj_add_to_cart_per_category_total_groups_number', 1 ) ); $i++ ) {
246
 
247
+ /* $deprecated = get_option( 'wcj_add_to_cart_per_category_group_' . $i );
248
+ if ( false !== $deprecated ) {
249
+ if ( '' != $deprecated ) {
250
+ update_option( 'wcj_add_to_cart_per_category_ids_group_' . $i, explode( ',', str_replace( ' ', '', $deprecated ) ) );
251
  }
252
  //delete_option( 'wcj_add_to_cart_per_category_group_' . $i );
253
  } */
includes/class-wcj-admin-tools.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Admin Tools class.
6
  *
7
- * @version 2.5.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -17,7 +17,7 @@ class WCJ_Admin_Tools extends WCJ_Module {
17
  /**
18
  * Constructor.
19
  *
20
- * @version 2.5.0
21
  */
22
  public function __construct() {
23
 
@@ -29,17 +29,25 @@ class WCJ_Admin_Tools extends WCJ_Module {
29
 
30
  $this->add_tools( array(
31
  'admin_tools' => array(
32
- 'title' => __( 'Admin Tools', 'woocommerce-jetpack' ),
33
- 'desc' => __( 'Log.', 'woocommerce-jetpack' ),
34
  'tab_title' => __( 'Log', 'woocommerce-jetpack' ),
35
  ),
36
  ) );
 
 
 
 
 
 
 
 
37
  }
38
 
39
  /**
40
  * create_tool.
41
  *
42
- * @version 2.5.0
43
  */
44
  public function create_admin_tools_tool() {
45
 
@@ -50,35 +58,59 @@ class WCJ_Admin_Tools extends WCJ_Module {
50
  }
51
 
52
  $the_tools = '';
53
- $the_tools .= $this->get_back_to_settings_link_html();
54
- $the_tools .= '<br>';
55
- $the_tools .= '<a href="' . add_query_arg( 'wcj_delete_log', '1' ) . '">' . __( 'Delete Log', 'woocommerce-jetpack' ) . '</a>';
56
 
57
  $the_log = '';
58
- // if ( isset( $_GET['wcj_view_log'] ) ) {
59
- $the_log .= '<pre>' . get_option( 'wcj_log', '' ) . '</pre>';
60
- // }
 
 
 
 
 
61
 
62
- echo '<p>' . $the_tools . '</p>';
63
- echo '<p>' . $the_notice . '</p>';
64
- echo '<p>' . $the_log . '</p>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  }
66
 
67
  /**
68
  * get_settings.
69
  *
70
- * @version 2.3.10
71
  */
72
  function get_settings() {
73
-
74
  $settings = array(
75
-
76
  array(
77
  'title' => __( 'Admin Tools Options', 'woocommerce-jetpack' ),
78
  'type' => 'title',
79
  'id' => 'wcj_admin_tools_module_options',
80
  ),
81
-
82
  array(
83
  'title' => __( 'Logging', 'woocommerce-jetpack' ),
84
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
@@ -86,7 +118,6 @@ class WCJ_Admin_Tools extends WCJ_Module {
86
  'default' => 'no',
87
  'type' => 'checkbox',
88
  ),
89
-
90
  array(
91
  'title' => __( 'Debug', 'woocommerce-jetpack' ),
92
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
@@ -94,20 +125,35 @@ class WCJ_Admin_Tools extends WCJ_Module {
94
  'default' => 'no',
95
  'type' => 'checkbox',
96
  ),
97
-
98
- /* array(
 
 
 
 
 
 
 
 
 
99
  'title' => __( 'Custom Shortcode', 'woocommerce-jetpack' ),
100
  'id' => 'wcj_custom_shortcode_1',
101
  'default' => '',
102
  'type' => 'textarea',
103
- ), */
104
-
 
 
 
 
 
 
 
105
  array(
106
  'type' => 'sectionend',
107
  'id' => 'wcj_admin_tools_module_options',
108
  ),
109
  );
110
-
111
  return $this->add_standard_settings( $settings );
112
  }
113
  }
4
  *
5
  * The WooCommerce Jetpack Admin Tools class.
6
  *
7
+ * @version 2.5.7
8
  * @author Algoritmika Ltd.
9
  */
10
 
17
  /**
18
  * Constructor.
19
  *
20
+ * @version 2.5.7
21
  */
22
  public function __construct() {
23
 
29
 
30
  $this->add_tools( array(
31
  'admin_tools' => array(
32
+ 'title' => __( 'Admin Tools', 'woocommerce-jetpack' ),
33
+ 'desc' => __( 'Log.', 'woocommerce-jetpack' ),
34
  'tab_title' => __( 'Log', 'woocommerce-jetpack' ),
35
  ),
36
  ) );
37
+
38
+ $this->current_php_memory_limit = '';
39
+ if ( $this->is_enabled() ) {
40
+ if ( 0 != ( $php_memory_limit = get_option( 'wcj_admin_tools_php_memory_limit', 0 ) ) ) {
41
+ ini_set( 'memory_limit', $php_memory_limit . 'M' );
42
+ }
43
+ $this->current_php_memory_limit = sprintf( ' ' . __( 'Current PHP memory limit: %s.', 'woocommerce-jetpack' ), ini_get( 'memory_limit' ) );
44
+ }
45
  }
46
 
47
  /**
48
  * create_tool.
49
  *
50
+ * @version 2.5.7
51
  */
52
  public function create_admin_tools_tool() {
53
 
58
  }
59
 
60
  $the_tools = '';
61
+ $the_tools .= $this->get_tool_header_html( 'admin_tools' );
62
+ $the_tools .= '<p><a href="' . add_query_arg( 'wcj_delete_log', '1' ) . '">' . __( 'Delete Log', 'woocommerce-jetpack' ) . '</a></p>';
 
63
 
64
  $the_log = '';
65
+ $the_log .= '<pre>' . get_option( 'wcj_log', '' ) . '</pre>';
66
+
67
+ $html = '';
68
+ $html .= '<p>' . $the_tools . '</p>';
69
+ $html .= '<p>' . $the_notice . '</p>';
70
+ $html .= '<p>' . $the_log . '</p>';
71
+ echo $html;
72
+ }
73
 
74
+ /**
75
+ * get_system_info_table_array.
76
+ *
77
+ * @version 2.5.7
78
+ * @since 2.5.7
79
+ */
80
+ function get_system_info_table_array() {
81
+ $system_info = array();
82
+ $constants_array = array(
83
+ 'WP_MEMORY_LIMIT',
84
+ 'WP_MAX_MEMORY_LIMIT',
85
+ // 'DB_NAME',
86
+ // 'DB_USER',
87
+ // 'DB_PASSWORD',
88
+ // 'DB_HOST',
89
+ // 'DB_CHARSET',
90
+ // 'DB_COLLATE',
91
+ 'WP_DEBUG',
92
+ 'ABSPATH',
93
+ 'DISABLE_WP_CRON',
94
+ 'WP_CRON_LOCK_TIMEOUT',
95
+ );
96
+ foreach ( $constants_array as $the_constant ) {
97
+ $system_info[] = array( $the_constant, ( defined( $the_constant ) ? constant( $the_constant ) : __( 'NOT DEFINED', 'woocommerce-jetpack' ) ) );
98
+ }
99
+ return $system_info;
100
  }
101
 
102
  /**
103
  * get_settings.
104
  *
105
+ * @version 2.5.7
106
  */
107
  function get_settings() {
 
108
  $settings = array(
 
109
  array(
110
  'title' => __( 'Admin Tools Options', 'woocommerce-jetpack' ),
111
  'type' => 'title',
112
  'id' => 'wcj_admin_tools_module_options',
113
  ),
 
114
  array(
115
  'title' => __( 'Logging', 'woocommerce-jetpack' ),
116
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
118
  'default' => 'no',
119
  'type' => 'checkbox',
120
  ),
 
121
  array(
122
  'title' => __( 'Debug', 'woocommerce-jetpack' ),
123
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
125
  'default' => 'no',
126
  'type' => 'checkbox',
127
  ),
128
+ array(
129
+ 'title' => __( 'PHP Memory Limit', 'woocommerce-jetpack' ),
130
+ 'desc' => __( 'megabytes.', 'woocommerce-jetpack' ),
131
+ 'desc_tip' => __( 'Set zero to disable.', 'woocommerce-jetpack' ) . $this->current_php_memory_limit,
132
+ 'id' => 'wcj_admin_tools_php_memory_limit',
133
+ 'default' => 0,
134
+ 'type' => 'number',
135
+ 'custom_attributes' => array( 'min' => 0 ),
136
+ ),
137
+ /*
138
+ array(
139
  'title' => __( 'Custom Shortcode', 'woocommerce-jetpack' ),
140
  'id' => 'wcj_custom_shortcode_1',
141
  'default' => '',
142
  'type' => 'textarea',
143
+ ),
144
+ */
145
+ array(
146
+ 'title' => __( 'System Info', 'woocommerce-jetpack' ),
147
+ 'id' => 'wcj_admin_tools_system_info',
148
+ 'default' => '',
149
+ 'type' => 'custom_link',
150
+ 'link' => '<pre>' . wcj_get_table_html( $this->get_system_info_table_array(), array( 'columns_styles' => array( 'padding:0;', 'padding:0;' ), 'table_heading_type' => 'vertical' ) ) . '</pre>',
151
+ ),
152
  array(
153
  'type' => 'sectionend',
154
  'id' => 'wcj_admin_tools_module_options',
155
  ),
156
  );
 
157
  return $this->add_standard_settings( $settings );
158
  }
159
  }
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.4.6
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -17,7 +17,7 @@ class WCJ_Call_For_Price extends WCJ_module {
17
  /**
18
  * Constructor.
19
  *
20
- * @version 2.4.6
21
  */
22
  public function __construct() {
23
 
@@ -32,11 +32,24 @@ class WCJ_Call_For_Price extends WCJ_module {
32
 
33
  if ( $this->is_enabled() ) {
34
  add_action( 'init', array( $this, 'add_hook' ), PHP_INT_MAX );
35
- // add_filter( 'woocommerce_empty_price_html', array( $this, 'on_empty_price' ), PHP_INT_MAX );
36
  add_filter( 'woocommerce_sale_flash', array( $this, 'hide_sales_flash' ), 100, 3 );
 
 
 
 
37
  }
38
  }
39
 
 
 
 
 
 
 
 
 
 
 
40
  /**
41
  * add_hook.
42
  */
@@ -48,9 +61,11 @@ class WCJ_Call_For_Price extends WCJ_module {
48
  * Hide "sales" icon for empty price products.
49
  */
50
  public function hide_sales_flash( $onsale_html, $post, $product ) {
51
- if ( get_option('wcj_call_for_price_hide_sale_sign') === 'yes' )
52
- if ( $product->get_price() === '' )
53
  return '';
 
 
54
  return $onsale_html;
55
  }
56
 
@@ -58,14 +73,18 @@ class WCJ_Call_For_Price extends WCJ_module {
58
  * On empty price filter - return the label.
59
  */
60
  public function on_empty_price( $price ) {
61
- if ( ( get_option('wcj_call_for_price_text') !== '' ) && is_single( get_the_ID() ) )
62
  return do_shortcode( apply_filters( 'wcj_get_option_filter', $this->default_empty_price_text, get_option('wcj_call_for_price_text') ) );
63
- if ( ( get_option('wcj_call_for_price_text_on_related') !== '' ) && ( is_single() ) && ( ! is_single( get_the_ID() ) ) )
 
64
  return do_shortcode( apply_filters( 'wcj_get_option_filter', $this->default_empty_price_text, get_option('wcj_call_for_price_text_on_related') ) );
65
- if ( ( get_option('wcj_call_for_price_text_on_archive') !== '' ) && is_archive() )
 
66
  return do_shortcode( apply_filters( 'wcj_get_option_filter', $this->default_empty_price_text, get_option('wcj_call_for_price_text_on_archive') ) );
67
- if ( ( get_option('wcj_call_for_price_text_on_home') !== '' ) && is_front_page() )
 
68
  return do_shortcode( apply_filters( 'wcj_get_option_filter', $this->default_empty_price_text, get_option('wcj_call_for_price_text_on_home') ) );
 
69
 
70
  // No changes
71
  return $price;
@@ -74,7 +93,7 @@ class WCJ_Call_For_Price extends WCJ_module {
74
  /**
75
  * Get settings array.
76
  *
77
- * @version 2.4.6
78
  */
79
  function get_settings() {
80
  $settings = array(
@@ -135,6 +154,14 @@ class WCJ_Call_For_Price extends WCJ_module {
135
  'default' => 'yes',
136
  'type' => 'checkbox',
137
  ),
 
 
 
 
 
 
 
 
138
  array(
139
  'type' => 'sectionend',
140
  'id' => 'wcj_call_for_price_options',
4
  *
5
  * The WooCommerce Jetpack Call for Price class.
6
  *
7
+ * @version 2.5.7
8
  * @author Algoritmika Ltd.
9
  */
10
 
17
  /**
18
  * Constructor.
19
  *
20
+ * @version 2.5.7
21
  */
22
  public function __construct() {
23
 
32
 
33
  if ( $this->is_enabled() ) {
34
  add_action( 'init', array( $this, 'add_hook' ), PHP_INT_MAX );
 
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
  }
42
 
43
+ /**
44
+ * make_empty_price.
45
+ *
46
+ * @version 2.5.7
47
+ * @since 2.5.7
48
+ */
49
+ function make_empty_price( $price, $_product ) {
50
+ return ( ! $_product->is_type( array( 'variable', 'variation' ) ) ) ? '' : $price;
51
+ }
52
+
53
  /**
54
  * add_hook.
55
  */
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 '';
67
+ }
68
+ }
69
  return $onsale_html;
70
  }
71
 
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( 'wcj_get_option_filter', $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( 'wcj_get_option_filter', $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( 'wcj_get_option_filter', $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( 'wcj_get_option_filter', $this->default_empty_price_text, get_option('wcj_call_for_price_text_on_home') ) );
87
+ }
88
 
89
  // No changes
90
  return $price;
93
  /**
94
  * Get settings array.
95
  *
96
+ * @version 2.5.7
97
  */
98
  function get_settings() {
99
  $settings = array(
154
  'default' => 'yes',
155
  'type' => 'checkbox',
156
  ),
157
+ array(
158
+ 'title' => __( 'Make All Products Call for Price', 'woocommerce-jetpack' ),
159
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
160
+ 'desc_tip' => __( 'Enable this to make all products (except variable) prices empty. When checkbox disabled, all prices go back to normal.', 'woocommerce-jetpack' ),
161
+ 'id' => 'wcj_call_for_price_make_all_empty',
162
+ 'default' => 'no',
163
+ 'type' => 'checkbox',
164
+ ),
165
  array(
166
  'type' => 'sectionend',
167
  'id' => 'wcj_call_for_price_options',
includes/class-wcj-empty-cart-button.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Empty Cart Button class.
6
  *
7
- * @version 2.5.0
8
  * @since 2.2.1
9
  * @author Algoritmika Ltd.
10
  */
@@ -18,13 +18,13 @@ class WCJ_Empty_Cart_Button extends WCJ_Module {
18
  /**
19
  * Constructor.
20
  *
21
- * @version 2.5.0
22
  */
23
  function __construct() {
24
 
25
  $this->id = 'empty_cart';
26
  $this->short_desc = __( 'Empty Cart Button', 'woocommerce-jetpack' );
27
- $this->desc = __( 'Add and customize "Empty Cart" button to cart page.', 'woocommerce-jetpack' );
28
  $this->link = 'http://booster.io/features/woocommerce-empty-cart-button/';
29
  parent::__construct();
30
 
4
  *
5
  * The WooCommerce Jetpack Empty Cart Button class.
6
  *
7
+ * @version 2.5.7
8
  * @since 2.2.1
9
  * @author Algoritmika Ltd.
10
  */
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 2.5.7
22
  */
23
  function __construct() {
24
 
25
  $this->id = 'empty_cart';
26
  $this->short_desc = __( 'Empty Cart Button', 'woocommerce-jetpack' );
27
+ $this->desc = __( 'Add and customize "Empty Cart" button to WooCommerce cart page.', 'woocommerce-jetpack' );
28
  $this->link = 'http://booster.io/features/woocommerce-empty-cart-button/';
29
  parent::__construct();
30
 
includes/class-wcj-eu-vat-number.php CHANGED
@@ -4,9 +4,10 @@
4
  *
5
  * The WooCommerce Jetpack EU VAT Number class.
6
  *
7
- * @version 2.5.4
8
  * @since 2.3.9
9
  * @author Algoritmika Ltd.
 
10
  */
11
 
12
  if ( ! defined( 'ABSPATH' ) ) exit;
@@ -239,7 +240,7 @@ class WCJ_EU_VAT_Number extends WCJ_Module {
239
  /**
240
  * maybe_exclude_vat.
241
  *
242
- * @version 2.5.4
243
  */
244
  // function maybe_exclude_vat( $matched_tax_rates, $args ) {
245
  function maybe_exclude_vat() {
@@ -257,6 +258,9 @@ class WCJ_EU_VAT_Number extends WCJ_Module {
257
  $location = wc_format_country_state_string( apply_filters( 'woocommerce_customer_default_location', get_option( 'woocommerce_default_country' ) ) );
258
  }
259
  $selected_country = substr( $_SESSION['wcj_eu_vat_number_to_check'], 0, 2 );
 
 
 
260
  $preserve_base_country_check_passed = ( $location['country'] !== $selected_country ) ? true : false;
261
  }
262
  if ( $preserve_base_country_check_passed ) {
4
  *
5
  * The WooCommerce Jetpack EU VAT Number class.
6
  *
7
+ * @version 2.5.7
8
  * @since 2.3.9
9
  * @author Algoritmika Ltd.
10
+ * @todo Move (maybe) to "CART & CHECKOUT" category;
11
  */
12
 
13
  if ( ! defined( 'ABSPATH' ) ) exit;
240
  /**
241
  * maybe_exclude_vat.
242
  *
243
+ * @version 2.5.7
244
  */
245
  // function maybe_exclude_vat( $matched_tax_rates, $args ) {
246
  function maybe_exclude_vat() {
258
  $location = wc_format_country_state_string( apply_filters( 'woocommerce_customer_default_location', get_option( 'woocommerce_default_country' ) ) );
259
  }
260
  $selected_country = substr( $_SESSION['wcj_eu_vat_number_to_check'], 0, 2 );
261
+ if ( 'EL' === $selected_country ) {
262
+ $selected_country = 'GR';
263
+ }
264
  $preserve_base_country_check_passed = ( $location['country'] !== $selected_country ) ? true : false;
265
  }
266
  if ( $preserve_base_country_check_passed ) {
includes/class-wcj-export-import.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Export Import class.
6
  *
7
- * @version 2.5.6
8
  * @since 2.5.4
9
  * @author Algoritmika Ltd.
10
  * @todo import products (maybe orders, customers) tool(s);
@@ -82,7 +82,7 @@ class WCJ_Export_Import extends WCJ_Module {
82
  /**
83
  * export_csv.
84
  *
85
- * @version 2.5.5
86
  * @since 2.4.8
87
  */
88
  function export_csv() {
@@ -92,10 +92,11 @@ class WCJ_Export_Import extends WCJ_Module {
92
  foreach ( $data as $row ) {
93
  $csv .= implode( get_option( 'wcj_export_csv_separator', ',' ), $row ) . PHP_EOL;
94
  }
95
- header( "Content-Type: application/octet-stream" );
 
 
96
  header( "Content-Disposition: attachment; filename=" . $_POST['wcj_export'] . ".csv" );
97
- header( "Content-Type: application/octet-stream" );
98
- header( "Content-Type: application/download" );
99
  header( "Content-Description: File Transfer" );
100
  header( "Content-Length: " . strlen( $csv ) );
101
  echo $csv;
@@ -139,7 +140,7 @@ class WCJ_Export_Import extends WCJ_Module {
139
  /**
140
  * get_order_export_fields.
141
  *
142
- * @version 2.5.6
143
  * @since 2.5.6
144
  */
145
  function get_order_export_fields() {
@@ -148,6 +149,7 @@ class WCJ_Export_Import extends WCJ_Module {
148
  'order-number' => __( 'Order Number', 'woocommerce-jetpack' ),
149
  'order-status' => __( 'Order Status', 'woocommerce-jetpack' ),
150
  'order-date' => __( 'Order Date', 'woocommerce-jetpack' ),
 
151
  'order-item-count' => __( 'Order Item Count', 'woocommerce-jetpack' ),
152
  'order-items' => __( 'Order Items', 'woocommerce-jetpack' ),
153
  'order-items-product-input-fields' => __( 'Order Items Product Input Fields', 'woocommerce-jetpack' ),
@@ -182,7 +184,7 @@ class WCJ_Export_Import extends WCJ_Module {
182
  /**
183
  * get_order_export_default_fields_ids.
184
  *
185
- * @version 2.5.6
186
  * @since 2.5.6
187
  */
188
  function get_order_export_default_fields_ids() {
@@ -191,6 +193,7 @@ class WCJ_Export_Import extends WCJ_Module {
191
  'order-number',
192
  'order-status',
193
  'order-date',
 
194
  'order-item-count',
195
  'order-items',
196
  'order-currency',
@@ -221,14 +224,80 @@ class WCJ_Export_Import extends WCJ_Module {
221
  );
222
  }
223
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
224
  /**
225
  * create_export_tool.
226
  *
227
- * @version 2.5.6
228
  * @since 2.4.8
229
  */
230
  function create_export_tool( $tool_id ) {
231
  $data = $this->export( $tool_id );
 
232
  echo '<form method="post" action="">';
233
  echo '<p>' . $this->export_filter_fields( $tool_id ) . '</p>';
234
  echo '<p><button class="button-primary" type="submit" name="wcj_export" value="' . $tool_id . '">' . __( 'Download CSV', 'woocommerce-jetpack' ) . '</button></p>';
@@ -300,7 +369,7 @@ class WCJ_Export_Import extends WCJ_Module {
300
  /**
301
  * export_orders.
302
  *
303
- * @version 2.5.6
304
  * @since 2.4.8
305
  */
306
  function export_orders() {
@@ -373,7 +442,10 @@ class WCJ_Export_Import extends WCJ_Module {
373
  $row[] = $order->get_status();
374
  break;
375
  case 'order-date':
376
- $row[] = get_the_date( 'Y/m/d' );
 
 
 
377
  break;
378
  case 'order-item-count':
379
  $row[] = $order->get_item_count();
@@ -468,27 +540,66 @@ class WCJ_Export_Import extends WCJ_Module {
468
  return $data;
469
  }
470
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
471
  /**
472
  * export_products.
473
  *
474
- * @version 2.5.3
475
  * @since 2.5.3
 
476
  */
477
  function export_products() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
478
  $data = array();
479
- $data[] = array(
480
- __( 'Product ID', 'woocommerce-jetpack' ),
481
- __( 'Name', 'woocommerce-jetpack' ),
482
- __( 'SKU', 'woocommerce-jetpack' ),
483
- __( 'Stock', 'woocommerce-jetpack' ),
484
- __( 'Regular Price', 'woocommerce-jetpack' ),
485
- __( 'Sale Price', 'woocommerce-jetpack' ),
486
- __( 'Price', 'woocommerce-jetpack' ),
487
- __( 'Type', 'woocommerce-jetpack' ),
488
- // __( 'Attributes', 'woocommerce-jetpack' ),
489
- );
490
  $offset = 0;
491
- $block_size = 96;
492
  while( true ) {
493
  $args = array(
494
  'post_type' => 'product',
@@ -497,24 +608,154 @@ class WCJ_Export_Import extends WCJ_Module {
497
  'orderby' => 'date',
498
  'order' => 'DESC',
499
  'offset' => $offset,
 
500
  );
501
  $loop = new WP_Query( $args );
502
- if ( ! $loop->have_posts() ) break;
503
- while ( $loop->have_posts() ) : $loop->the_post();
504
- $product_id = $loop->post->ID;
 
505
  $_product = wc_get_product( $product_id );
506
- $data[] = array(
507
- $product_id,
508
- $_product->get_title(),
509
- $_product->get_sku(),
510
- $_product->/* get_total_stock() */get_stock_quantity(),
511
- $_product->get_regular_price(),
512
- $_product->get_sale_price(),
513
- ( $_product->is_type( 'variable' ) || $_product->is_type( 'grouped' ) ? '' : $_product->get_price() ),
514
- $_product->get_type(),
515
- // ( ! empty( $_product->get_attributes() ) ? serialize( $_product->get_attributes() ) : '' ),
516
- );
517
- endwhile;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
518
  $offset += $block_size;
519
  }
520
  return $data;
@@ -570,35 +811,100 @@ class WCJ_Export_Import extends WCJ_Module {
570
  /**
571
  * get_settings.
572
  *
573
- * @version 2.5.6
574
  * @since 2.5.4
575
  */
576
  function get_settings() {
577
  $settings = array(
578
  array(
579
- 'title' => __( 'Export Options', 'woocommerce-jetpack' ),
580
- 'type' => 'title',
581
- 'id' => 'wcj_export_options'
 
 
 
 
 
 
582
  ),
583
  array(
584
- 'title' => __( 'CSV Separator', 'woocommerce-jetpack' ),
585
- 'id' => 'wcj_export_csv_separator',
586
- 'default' => ',',
587
- 'type' => 'text',
 
 
588
  ),
589
  array(
590
- 'title' => __( 'Export Orders Fields', 'woocommerce-jetpack' ),
591
- 'id' => 'wcj_export_orders_fields',
592
- 'default' => $this->get_order_export_default_fields_ids(),
593
- 'type' => 'multiselect',
594
- 'options' => $this->get_order_export_fields(),
595
- 'css' => 'height:300px;',
596
  ),
597
  array(
598
- 'type' => 'sectionend',
599
- 'id' => 'wcj_export_options'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
600
  ),
601
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
602
  return $this->add_standard_settings( $settings );
603
  }
604
  }
4
  *
5
  * The WooCommerce Jetpack Export Import class.
6
  *
7
+ * @version 2.5.7
8
  * @since 2.5.4
9
  * @author Algoritmika Ltd.
10
  * @todo import products (maybe orders, customers) tool(s);
82
  /**
83
  * export_csv.
84
  *
85
+ * @version 2.5.7
86
  * @since 2.4.8
87
  */
88
  function export_csv() {
92
  foreach ( $data as $row ) {
93
  $csv .= implode( get_option( 'wcj_export_csv_separator', ',' ), $row ) . PHP_EOL;
94
  }
95
+ if ( 'yes' === get_option( 'wcj_export_csv_add_utf_8_bom', 'yes' ) ) {
96
+ $csv = "\xEF\xBB\xBF" . $csv; // UTF-8 BOM
97
+ }
98
  header( "Content-Disposition: attachment; filename=" . $_POST['wcj_export'] . ".csv" );
99
+ header( "Content-Type: Content-Type: text/html; charset=utf-8" );
 
100
  header( "Content-Description: File Transfer" );
101
  header( "Content-Length: " . strlen( $csv ) );
102
  echo $csv;
140
  /**
141
  * get_order_export_fields.
142
  *
143
+ * @version 2.5.7
144
  * @since 2.5.6
145
  */
146
  function get_order_export_fields() {
149
  'order-number' => __( 'Order Number', 'woocommerce-jetpack' ),
150
  'order-status' => __( 'Order Status', 'woocommerce-jetpack' ),
151
  'order-date' => __( 'Order Date', 'woocommerce-jetpack' ),
152
+ 'order-time' => __( 'Order Time', 'woocommerce-jetpack' ),
153
  'order-item-count' => __( 'Order Item Count', 'woocommerce-jetpack' ),
154
  'order-items' => __( 'Order Items', 'woocommerce-jetpack' ),
155
  'order-items-product-input-fields' => __( 'Order Items Product Input Fields', 'woocommerce-jetpack' ),
184
  /**
185
  * get_order_export_default_fields_ids.
186
  *
187
+ * @version 2.5.7
188
  * @since 2.5.6
189
  */
190
  function get_order_export_default_fields_ids() {
193
  'order-number',
194
  'order-status',
195
  'order-date',
196
+ 'order-time',
197
  'order-item-count',
198
  'order-items',
199
  'order-currency',
224
  );
225
  }
226
 
227
+ /**
228
+ * get_product_export_fields.
229
+ *
230
+ * @version 2.5.7
231
+ * @since 2.5.7
232
+ */
233
+ function get_product_export_fields() {
234
+ return array(
235
+ 'product-id' => __( 'Product ID', 'woocommerce-jetpack' ),
236
+ 'product-name' => __( 'Name', 'woocommerce-jetpack' ),
237
+ 'product-sku' => __( 'SKU', 'woocommerce-jetpack' ),
238
+ 'product-stock' => __( 'Total Stock', 'woocommerce-jetpack' ),
239
+ 'product-stock-quantity' => __( 'Stock Quantity', 'woocommerce-jetpack' ),
240
+ 'product-regular-price' => __( 'Regular Price', 'woocommerce-jetpack' ),
241
+ 'product-sale-price' => __( 'Sale Price', 'woocommerce-jetpack' ),
242
+ 'product-price' => __( 'Price', 'woocommerce-jetpack' ),
243
+ 'product-type' => __( 'Type', 'woocommerce-jetpack' ),
244
+ // 'product-attributes' => __( 'Attributes', 'woocommerce-jetpack' ),
245
+ 'product-image-url' => __( 'Image URL', 'woocommerce-jetpack' ),
246
+ 'product-short-description' => __( 'Short Description', 'woocommerce-jetpack' ),
247
+ 'product-description' => __( 'Description', 'woocommerce-jetpack' ),
248
+ 'product-status' => __( 'Status', 'woocommerce-jetpack' ),
249
+ 'product-url' => __( 'URL', 'woocommerce-jetpack' ),
250
+ 'product-shipping-class' => __( 'Shipping Class', 'woocommerce-jetpack' ),
251
+ 'product-shipping-class-id' => __( 'Shipping Class ID', 'woocommerce-jetpack' ),
252
+ 'product-width' => __( 'Width', 'woocommerce-jetpack' ),
253
+ 'product-length' => __( 'Length', 'woocommerce-jetpack' ),
254
+ 'product-height' => __( 'Height', 'woocommerce-jetpack' ),
255
+ 'product-weight' => __( 'Weight', 'woocommerce-jetpack' ),
256
+ 'product-downloadable' => __( 'Downloadable', 'woocommerce-jetpack' ),
257
+ 'product-virtual' => __( 'Virtual', 'woocommerce-jetpack' ),
258
+ 'product-sold-individually' => __( 'Sold Individually', 'woocommerce-jetpack' ),
259
+ 'product-tax-status' => __( 'Tax Status', 'woocommerce-jetpack' ),
260
+ 'product-tax-class' => __( 'Tax Class', 'woocommerce-jetpack' ),
261
+ 'product-manage-stock' => __( 'Manage Stock', 'woocommerce-jetpack' ),
262
+ 'product-stock-status' => __( 'Stock Status', 'woocommerce-jetpack' ),
263
+ 'product-backorders' => __( 'Backorders', 'woocommerce-jetpack' ),
264
+ 'product-featured' => __( 'Featured', 'woocommerce-jetpack' ),
265
+ 'product-visibility' => __( 'Visibility', 'woocommerce-jetpack' ),
266
+ );
267
+ }
268
+
269
+ /**
270
+ * get_product_export_default_fields_ids.
271
+ *
272
+ * @version 2.5.7
273
+ * @since 2.5.7
274
+ */
275
+ function get_product_export_default_fields_ids() {
276
+ return array(
277
+ 'product-id',
278
+ 'product-name',
279
+ 'product-sku',
280
+ 'product-stock',
281
+ 'product-regular-price',
282
+ 'product-sale-price',
283
+ 'product-price',
284
+ 'product-type',
285
+ 'product-image-url',
286
+ 'product-short-description',
287
+ 'product-status',
288
+ 'product-url',
289
+ );
290
+ }
291
+
292
  /**
293
  * create_export_tool.
294
  *
295
+ * @version 2.5.7
296
  * @since 2.4.8
297
  */
298
  function create_export_tool( $tool_id ) {
299
  $data = $this->export( $tool_id );
300
+ echo $this->get_tool_header_html( 'export_' . $tool_id );
301
  echo '<form method="post" action="">';
302
  echo '<p>' . $this->export_filter_fields( $tool_id ) . '</p>';
303
  echo '<p><button class="button-primary" type="submit" name="wcj_export" value="' . $tool_id . '">' . __( 'Download CSV', 'woocommerce-jetpack' ) . '</button></p>';
369
  /**
370
  * export_orders.
371
  *
372
+ * @version 2.5.7
373
  * @since 2.4.8
374
  */
375
  function export_orders() {
442
  $row[] = $order->get_status();
443
  break;
444
  case 'order-date':
445
+ $row[] = get_the_date( get_option( 'date_format' ), $order_id );
446
+ break;
447
+ case 'order-time':
448
+ $row[] = get_the_time( get_option( 'time_format' ), $order_id );
449
  break;
450
  case 'order-item-count':
451
  $row[] = $order->get_item_count();
540
  return $data;
541
  }
542
 
543
+ /**
544
+ * get_variable_or_grouped_product_info.
545
+ *
546
+ * @version 2.5.7
547
+ * @since 2.5.7
548
+ */
549
+ function get_variable_or_grouped_product_info( $_product, $which_info ) {
550
+ $all_variations_data = array();
551
+ foreach ( $_product->get_children() as $child_id ) {
552
+ $variation = $_product->get_child( $child_id );
553
+ switch ( $which_info ) {
554
+ case 'price':
555
+ $all_variations_data[] = ( '' === $variation->get_price() ) ? '-' : $variation->get_price();
556
+ break;
557
+ case 'regular_price':
558
+ $all_variations_data[] = ( '' === $variation->get_regular_price() ) ? '-' : $variation->get_regular_price();
559
+ break;
560
+ case 'sale_price':
561
+ $all_variations_data[] = ( '' === $variation->get_sale_price() ) ? '-' : $variation->get_sale_price();
562
+ break;
563
+ case 'total_stock':
564
+ $all_variations_data[] = ( null === $variation->get_total_stock() ) ? '-' : $variation->get_total_stock();
565
+ break;
566
+ case 'stock_quantity':
567
+ $all_variations_data[] = ( null === $variation->get_stock_quantity() ) ? '-' : $variation->get_stock_quantity();
568
+ break;
569
+ }
570
+ }
571
+ return implode( '/', $all_variations_data );
572
+ }
573
+
574
  /**
575
  * export_products.
576
  *
577
+ * @version 2.5.7
578
  * @since 2.5.3
579
+ * @todo export variations; product attributes; get_price_including_tax, get_price_excluding_tax, get_display_price, get_average_rating, get_rating_count, get_review_count, get_categories, get_tags, get_dimensions, get_formatted_name, get_availability;
580
  */
581
  function export_products() {
582
+
583
+ // Standard Fields
584
+ $all_fields = $this->get_product_export_fields();
585
+ $fields_ids = get_option( 'wcj_export_products_fields', $this->get_product_export_default_fields_ids() );
586
+ $titles = array();
587
+ foreach( $fields_ids as $field_id ) {
588
+ $titles[] = $all_fields[ $field_id ];
589
+ }
590
+
591
+ // Additional Fields
592
+ $total_number = apply_filters( 'wcj_get_option_filter', 1, get_option( 'wcj_export_products_fields_additional_total_number', 1 ) );
593
+ for ( $i = 1; $i <= $total_number; $i++ ) {
594
+ if ( 'yes' === get_option( 'wcj_export_products_fields_additional_enabled_' . $i, 'no' ) ) {
595
+ $titles[] = get_option( 'wcj_export_products_fields_additional_title_' . $i, '' );
596
+ }
597
+ }
598
+
599
  $data = array();
600
+ $data[] = $titles;
 
 
 
 
 
 
 
 
 
 
601
  $offset = 0;
602
+ $block_size = 1024;
603
  while( true ) {
604
  $args = array(
605
  'post_type' => 'product',
608
  'orderby' => 'date',
609
  'order' => 'DESC',
610
  'offset' => $offset,
611
+ 'fields' => 'ids',
612
  );
613
  $loop = new WP_Query( $args );
614
+ if ( ! $loop->have_posts() ) {
615
+ break;
616
+ }
617
+ foreach ( $loop->posts as $product_id ) {
618
  $_product = wc_get_product( $product_id );
619
+ $row = array();
620
+ foreach( $fields_ids as $field_id ) {
621
+ switch ( $field_id ) {
622
+ case 'product-id':
623
+ $row[] = $product_id;
624
+ break;
625
+ case 'product-name':
626
+ $row[] = $_product->get_title();
627
+ break;
628
+ case 'product-sku':
629
+ $row[] = $_product->get_sku();
630
+ break;
631
+ case 'product-stock-quantity':
632
+ $row[] = ( $_product->is_type( 'variable' ) || $_product->is_type( 'grouped' ) ?
633
+ $this->get_variable_or_grouped_product_info( $_product, 'stock_quantity' ) : $_product->get_stock_quantity() );
634
+ break;
635
+ case 'product-stock':
636
+ $row[] = ( $_product->is_type( 'variable' ) || $_product->is_type( 'grouped' ) ?
637
+ $this->get_variable_or_grouped_product_info( $_product, 'total_stock' ) : $_product->get_total_stock() );
638
+ break;
639
+ case 'product-regular-price':
640
+ $row[] = ( $_product->is_type( 'variable' ) || $_product->is_type( 'grouped' ) ?
641
+ $this->get_variable_or_grouped_product_info( $_product, 'regular_price' ) : $_product->get_regular_price() );
642
+ break;
643
+ case 'product-sale-price':
644
+ $row[] = ( $_product->is_type( 'variable' ) || $_product->is_type( 'grouped' ) ?
645
+ $this->get_variable_or_grouped_product_info( $_product, 'sale_price' ) : $_product->get_sale_price() );
646
+ break;
647
+ case 'product-price':
648
+ $row[] = ( $_product->is_type( 'variable' ) || $_product->is_type( 'grouped' ) ?
649
+ $this->get_variable_or_grouped_product_info( $_product, 'price' ) : $_product->get_price() );
650
+ break;
651
+ case 'product-type':
652
+ $row[] = $_product->get_type();
653
+ break;
654
+ /* todo
655
+ case 'product-attributes':
656
+ $row[] = ( ! empty( $_product->get_attributes() ) ? serialize( $_product->get_attributes() ) : '' );
657
+ break;
658
+ */
659
+ case 'product-image-url':
660
+ $row[] = wcj_get_product_image_url( $product_id, 'full' );
661
+ break;
662
+ case 'product-short-description':
663
+ $row[] = $_product->post->post_excerpt;
664
+ break;
665
+ case 'product-description':
666
+ $row[] = $_product->post->post_content;
667
+ break;
668
+ case 'product-status':
669
+ $row[] = $_product->post->post_status;
670
+ break;
671
+ case 'product-url':
672
+ $row[] = $_product->get_permalink();
673
+ break;
674
+ case 'product-shipping-class':
675
+ $row[] = $_product->get_shipping_class();
676
+ break;
677
+ case 'product-shipping-class-id':
678
+ $row[] = $_product->get_shipping_class_id();
679
+ break;
680
+ case 'product-width':
681
+ $row[] = $_product->get_width();
682
+ break;
683
+ case 'product-length':
684
+ $row[] = $_product->get_length();
685
+ break;
686
+ case 'product-height':
687
+ $row[] = $_product->get_height();
688
+ break;
689
+ case 'product-weight':
690
+ $row[] = $_product->get_weight();
691
+ break;
692
+ case 'product-downloadable':
693
+ $row[] = $_product->downloadable;
694
+ break;
695
+ case 'product-virtual':
696
+ $row[] = $_product->virtual;
697
+ break;
698
+ case 'product-sold-individually':
699
+ $row[] = $_product->sold_individually;
700
+ break;
701
+ case 'product-tax-status':
702
+ $row[] = $_product->get_tax_status();
703
+ break;
704
+ case 'product-tax-class':
705
+ $row[] = $_product->get_tax_class();
706
+ break;
707
+ case 'product-manage-stock':
708
+ $row[] = $_product->manage_stock;
709
+ break;
710
+ case 'product-stock-status':
711
+ $row[] = $_product->stock_status;
712
+ break;
713
+ case 'product-backorders':
714
+ $row[] = $_product->backorders;
715
+ break;
716
+ case 'product-featured':
717
+ $row[] = $_product->featured;
718
+ break;
719
+ case 'product-visibility':
720
+ $row[] = $_product->visibility;
721
+ break;
722
+ // todo
723
+ // get_price_including_tax
724
+ // get_price_excluding_tax
725
+ // get_display_price
726
+ // get_average_rating
727
+ // get_rating_count
728
+ // get_review_count
729
+ // get_categories
730
+ // get_tags
731
+ // get_dimensions
732
+ // get_formatted_name
733
+ // get_availability
734
+ }
735
+ }
736
+
737
+ // Additional Fields
738
+ $total_number = apply_filters( 'wcj_get_option_filter', 1, get_option( 'wcj_export_products_fields_additional_total_number', 1 ) );
739
+ for ( $i = 1; $i <= $total_number; $i++ ) {
740
+ if ( 'yes' === get_option( 'wcj_export_products_fields_additional_enabled_' . $i, 'no' ) ) {
741
+ if ( '' != $additional_field_value = get_option( 'wcj_export_products_fields_additional_value_' . $i, '' ) ) {
742
+ if ( 'meta' === get_option( 'wcj_export_products_fields_additional_type_' . $i, 'meta' ) ) {
743
+ $row[] = get_post_meta( $product_id, $additional_field_value, true );
744
+ } else {
745
+ global $post;
746
+ $post = get_post( $product_id );
747
+ setup_postdata( $post );
748
+ $row[] = do_shortcode( $additional_field_value );
749
+ wp_reset_postdata();
750
+ }
751
+ } else {
752
+ $row[] = '';
753
+ }
754
+ }
755
+ }
756
+
757
+ $data[] = $row;
758
+ }
759
  $offset += $block_size;
760
  }
761
  return $data;
811
  /**
812
  * get_settings.
813
  *
814
+ * @version 2.5.7
815
  * @since 2.5.4
816
  */
817
  function get_settings() {
818
  $settings = array(
819
  array(
820
+ 'title' => __( 'Export Options', 'woocommerce-jetpack' ),
821
+ 'type' => 'title',
822
+ 'id' => 'wcj_export_options',
823
+ ),
824
+ array(
825
+ 'title' => __( 'CSV Separator', 'woocommerce-jetpack' ),
826
+ 'id' => 'wcj_export_csv_separator',
827
+ 'default' => ',',
828
+ 'type' => 'text',
829
  ),
830
  array(
831
+ 'title' => __( 'UTF-8 BOM', 'woocommerce-jetpack' ),
832
+ 'desc' => __( 'Add', 'woocommerce-jetpack' ),
833
+ 'desc_tip' => __( 'Add UTF-8 BOM sequence', 'woocommerce-jetpack' ),
834
+ 'id' => 'wcj_export_csv_add_utf_8_bom',
835
+ 'default' => 'yes',
836
+ 'type' => 'checkbox',
837
  ),
838
  array(
839
+ 'title' => __( 'Export Orders Fields', 'woocommerce-jetpack' ),
840
+ 'id' => 'wcj_export_orders_fields',
841
+ 'default' => $this->get_order_export_default_fields_ids(),
842
+ 'type' => 'multiselect',
843
+ 'options' => $this->get_order_export_fields(),
844
+ 'css' => 'height:300px;',
845
  ),
846
  array(
847
+ 'title' => __( 'Export Products Fields', 'woocommerce-jetpack' ),
848
+ 'id' => 'wcj_export_products_fields',
849
+ 'default' => $this->get_product_export_default_fields_ids(),
850
+ 'type' => 'multiselect',
851
+ 'options' => $this->get_product_export_fields(),
852
+ 'css' => 'height:300px;',
853
+ ),
854
+ array(
855
+ 'title' => __( 'Additional Export Products Fields', 'woocommerce-jetpack' ),
856
+ 'id' => 'wcj_export_products_fields_additional_total_number',
857
+ 'default' => 1,
858
+ 'type' => 'custom_number',
859
+ 'desc' => apply_filters( 'get_wc_jetpack_plus_message', '', 'desc' ),
860
+ 'custom_attributes' => array_merge(
861
+ is_array( apply_filters( 'get_wc_jetpack_plus_message', '', 'readonly' ) ) ?
862
+ apply_filters( 'get_wc_jetpack_plus_message', '', 'readonly' ) : array(),
863
+ array( 'step' => '1', 'min' => '0', )
864
+ ),
865
  ),
866
  );
867
+ $total_number = apply_filters( 'wcj_get_option_filter', 1, get_option( 'wcj_export_products_fields_additional_total_number', 1 ) );
868
+ for ( $i = 1; $i <= $total_number; $i++ ) {
869
+ $settings = array_merge( $settings, array(
870
+ array(
871
+ 'title' => __( 'Field', 'woocommerce-jetpack' ) . ' #' . $i,
872
+ 'id' => 'wcj_export_products_fields_additional_enabled_' . $i,
873
+ 'desc' => __( 'Enabled', 'woocommerce-jetpack' ),
874
+ 'type' => 'checkbox',
875
+ 'default' => 'no',
876
+ ),
877
+ array(
878
+ 'desc' => __( 'Title', 'woocommerce-jetpack' ),
879
+ 'id' => 'wcj_export_products_fields_additional_title_' . $i,
880
+ 'type' => 'text',
881
+ 'default' => '',
882
+ ),
883
+ array(
884
+ 'desc' => __( 'Type', 'woocommerce-jetpack' ),
885
+ 'id' => 'wcj_export_products_fields_additional_type_' . $i,
886
+ 'type' => 'select',
887
+ 'default' => 'meta',
888
+ 'options' => array(
889
+ 'meta' => __( 'Meta', 'woocommerce-jetpack' ),
890
+ 'shortcode' => __( 'Shortcode', 'woocommerce-jetpack' ),
891
+ ),
892
+ ),
893
+ array(
894
+ 'desc' => __( 'Value', 'woocommerce-jetpack' ),
895
+ 'desc_tip' => __( 'If field\'s "Type" is set to "Meta", enter product meta key to retrieve (can be custom field name).', 'woocommerce-jetpack' ),
896
+ 'id' => 'wcj_export_products_fields_additional_value_' . $i,
897
+ 'type' => 'text',
898
+ 'default' => '',
899
+ ),
900
+ ) );
901
+ }
902
+ $settings = array_merge( $settings, array(
903
+ array(
904
+ 'type' => 'sectionend',
905
+ 'id' => 'wcj_export_options',
906
+ ),
907
+ ) );
908
  return $this->add_standard_settings( $settings );
909
  }
910
  }
includes/class-wcj-general.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack General class.
6
  *
7
- * @version 2.5.4
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -17,7 +17,7 @@ class WCJ_General extends WCJ_Module {
17
  /**
18
  * Constructor.
19
  *
20
- * @version 2.5.4
21
  */
22
  public function __construct() {
23
 
@@ -63,9 +63,34 @@ class WCJ_General extends WCJ_Module {
63
 
64
  add_filter( 'woocommerce_payment_gateways', array( $this, 'maybe_change_paypal_email' ) );
65
  }
 
 
 
 
 
66
  }
67
  }
68
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
  /**
70
  * create_custom_roles_tool.
71
  *
@@ -285,7 +310,7 @@ class WCJ_General extends WCJ_Module {
285
  /**
286
  * get_settings.
287
  *
288
- * @version 2.5.2
289
  * @todo add link to Booster's shortcodes list
290
  */
291
  function get_settings() {
@@ -447,6 +472,38 @@ class WCJ_General extends WCJ_Module {
447
  'type' => 'sectionend',
448
  'id' => 'wcj_paypal_email_per_product_options',
449
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
450
  /* array(
451
  'title' => __( 'WooCommerce Templates Editor Links', 'woocommerce-jetpack' ),
452
  'type' => 'title',
4
  *
5
  * The WooCommerce Jetpack General class.
6
  *
7
+ * @version 2.5.7
8
  * @author Algoritmika Ltd.
9
  */
10
 
17
  /**
18
  * Constructor.
19
  *
20
+ * @version 2.5.7
21
  */
22
  public function __construct() {
23
 
63
 
64
  add_filter( 'woocommerce_payment_gateways', array( $this, 'maybe_change_paypal_email' ) );
65
  }
66
+
67
+ if ( 'yes' === get_option( 'wcj_session_expiration_section_enabled', 'no' ) ) {
68
+ add_filter( 'wc_session_expiring', array( $this, 'change_session_expiring' ), PHP_INT_MAX );
69
+ add_filter( 'wc_session_expiration', array( $this, 'change_session_expiration' ), PHP_INT_MAX );
70
+ }
71
  }
72
  }
73
 
74
+ /**
75
+ * change_session_expiring.
76
+ *
77
+ * @version 2.5.7
78
+ * @since 2.5.7
79
+ */
80
+ function change_session_expiring( $the_time ) {
81
+ return get_option( 'wcj_session_expiring', 47 * 60 * 60 );
82
+ }
83
+
84
+ /**
85
+ * change_session_expiration.
86
+ *
87
+ * @version 2.5.7
88
+ * @since 2.5.7
89
+ */
90
+ function change_session_expiration( $the_time ) {
91
+ return get_option( 'wcj_session_expiration', 48 * 60 * 60 );
92
+ }
93
+
94
  /**
95
  * create_custom_roles_tool.
96
  *
310
  /**
311
  * get_settings.
312
  *
313
+ * @version 2.5.7
314
  * @todo add link to Booster's shortcodes list
315
  */
316
  function get_settings() {
472
  'type' => 'sectionend',
473
  'id' => 'wcj_paypal_email_per_product_options',
474
  ),
475
+ array(
476
+ 'title' => __( 'Session Expiration Options', 'woocommerce-jetpack' ),
477
+ 'type' => 'title',
478
+ 'id' => 'wcj_session_expiration_options',
479
+ ),
480
+ array(
481
+ 'title' => __( 'Session Expiration', 'woocommerce-jetpack' ),
482
+ 'desc' => __( 'Enable Section', 'woocommerce-jetpack' ),
483
+ 'id' => 'wcj_session_expiration_section_enabled',
484
+ 'default' => 'no',
485
+ 'type' => 'checkbox',
486
+ ),
487
+ array(
488
+ 'title' => __( 'Session Expiring', 'woocommerce-jetpack' ),
489
+ 'desc' => __( 'In seconds. Default: 47 hours (60 * 60 * 47)', 'woocommerce-jetpack' ),
490
+ 'id' => 'wcj_session_expiring',
491
+ 'default' => 47 * 60 * 60,
492
+ 'type' => 'number',
493
+ 'custom_attributes' => array( 'min' => 0 ),
494
+ ),
495
+ array(
496
+ 'title' => __( 'Session Expiration', 'woocommerce-jetpack' ),
497
+ 'desc' => __( 'In seconds. Default: 48 hours (60 * 60 * 48)', 'woocommerce-jetpack' ),
498
+ 'id' => 'wcj_session_expiration',
499
+ 'default' => 48 * 60 * 60,
500
+ 'type' => 'number',
501
+ 'custom_attributes' => array( 'min' => 0 ),
502
+ ),
503
+ array(
504
+ 'type' => 'sectionend',
505
+ 'id' => 'wcj_session_expiration_options',
506
+ ),
507
  /* array(
508
  'title' => __( 'WooCommerce Templates Editor Links', 'woocommerce-jetpack' ),
509
  'type' => 'title',
includes/class-wcj-global-discount.php ADDED
@@ -0,0 +1,298 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WooCommerce Jetpack Global Discount
4
+ *
5
+ * The WooCommerce Jetpack Global Discount class.
6
+ *
7
+ * @version 2.5.7
8
+ * @since 2.5.7
9
+ * @author Algoritmika Ltd.
10
+ * @todo products and cats/tags to include/exclude (cats to include - done); (maybe) product scope - apply only to products that are NOT on sale; regular price coefficient; fee instead of discount;
11
+ */
12
+
13
+ if ( ! defined( 'ABSPATH' ) ) exit;
14
+
15
+ if ( ! class_exists( 'WCJ_Global_Discount' ) ) :
16
+
17
+ class WCJ_Global_Discount extends WCJ_Module {
18
+
19
+ /**
20
+ * Constructor.
21
+ *
22
+ * @version 2.5.7
23
+ * @since 2.5.7
24
+ */
25
+ function __construct() {
26
+
27
+ $this->id = 'global_discount';
28
+ $this->short_desc = __( 'Global Discount', 'woocommerce-jetpack' );
29
+ $this->desc = __( 'Add global discount to all WooCommerce products.', 'woocommerce-jetpack' );
30
+ $this->link = 'http://booster.io/features/woocommerce-shop-global-discount/';
31
+ parent::__construct();
32
+
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 );
42
+ // add_filter( 'woocommerce_variation_prices_regular_price', array( $this, 'add_global_discount_regular_price' ), PHP_INT_MAX, 2 );
43
+ add_filter( 'woocommerce_get_variation_prices_hash', array( $this, 'get_variation_prices_hash' ), PHP_INT_MAX, 3 );
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
+ }
50
+
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
+ }
67
+ }
68
+ }
69
+ return $price;
70
+ }
71
+
72
+ /**
73
+ * calculate_price.
74
+ *
75
+ * @version 2.5.7
76
+ * @since 2.5.7
77
+ */
78
+ function calculate_price( $price, $coefficient, $group ) {
79
+ $return_price = ( 'percent' === get_option( 'wcj_global_discount_sale_coefficient_type_' . $group, 'percent' ) ) ?
80
+ ( $price + $price * ( $coefficient / 100 ) ) :
81
+ ( $price + $coefficient );
82
+ return ( $return_price >= 0 ) ? $return_price : 0;
83
+ }
84
+
85
+ /**
86
+ * check_if_applicable.
87
+ *
88
+ * @version 2.5.7
89
+ * @since 2.5.7
90
+ * @return bool
91
+ */
92
+ function check_if_applicable( $_product, $group ) {
93
+ return ( 'yes' === get_option( 'wcj_global_discount_sale_enabled_' . $group, 'yes' ) && $this->check_product_categories( $_product, $group ) );
94
+ }
95
+
96
+ /**
97
+ * check_product_categories.
98
+ *
99
+ * @version 2.5.7
100
+ * @since 2.5.7
101
+ * @return bool
102
+ */
103
+ function check_product_categories( $_product, $group ) {
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
+ }
111
+ foreach( $product_categories as $product_category ) {
112
+ if ( in_array( $product_category->term_id, $categories_in ) ) {
113
+ return true; // category found
114
+ }
115
+ }
116
+ return false; // no categories found
117
+ }
118
+ return true; // option not set (i.e. left blank)
119
+ }
120
+
121
+ /**
122
+ * add_global_discount_any_price.
123
+ *
124
+ * @version 2.5.7
125
+ * @since 2.5.7
126
+ */
127
+ function add_global_discount_any_price( $price_type, $price, $_product ) {
128
+ $total_number = apply_filters( 'wcj_get_option_filter', 1, get_option( 'wcj_global_discount_groups_total_number', 1 ) );
129
+ for ( $i = 1; $i <= $total_number; $i++ ) {
130
+ if ( ! $this->check_if_applicable( $_product, $i ) ) {
131
+ continue; // no changes by current discount group
132
+ }
133
+ $coefficient = get_option( 'wcj_global_discount_sale_coefficient_' . $i, 0 );
134
+ if ( 0 != $coefficient ) {
135
+ if ( 'sale_price' === $price_type ) {
136
+ if ( 0 == $price ) {
137
+ // The product is currently not on sale
138
+ if ( 'only_on_sale' === get_option( 'wcj_global_discount_sale_product_scope_' . $i, 'all' ) ) {
139
+ continue; // no changes by current discount group
140
+ } else {
141
+ $price = $_product->get_regular_price();
142
+ }
143
+ }
144
+ } else { // if ( 'price' === $price_type )
145
+ if ( 'only_on_sale' === get_option( 'wcj_global_discount_sale_product_scope_' . $i, 'all' ) && 0 == $_product->get_sale_price() ) {
146
+ continue; // no changes by current discount group
147
+ }
148
+ }
149
+ return $this->calculate_price( $price, $coefficient, $i ); // discount applied
150
+ }
151
+ }
152
+ return $price; // no changes
153
+ }
154
+
155
+ /**
156
+ * add_global_discount_sale_price.
157
+ *
158
+ * @version 2.5.7
159
+ * @since 2.5.7
160
+ */
161
+ function add_global_discount_sale_price( $price, $_product ) {
162
+ return $this->add_global_discount_any_price( 'sale_price', $price, $_product );
163
+ }
164
+
165
+ /**
166
+ * add_global_discount_price.
167
+ *
168
+ * @version 2.5.7
169
+ * @since 2.5.7
170
+ */
171
+ function add_global_discount_price( $price, $_product ) {
172
+ if ( '' === $price ) {
173
+ return $price; // no changes
174
+ }
175
+ return $this->add_global_discount_any_price( 'price', $price, $_product );
176
+ }
177
+
178
+ /**
179
+ * get_variation_prices_hash.
180
+ *
181
+ * @version 2.5.7
182
+ * @since 2.5.7
183
+ */
184
+ function get_variation_prices_hash( $price_hash, $_product, $display ) {
185
+ $wcj_global_discount_price_hash = array();
186
+ $total_number = apply_filters( 'wcj_get_option_filter', 1, get_option( 'wcj_global_discount_groups_total_number', 1 ) );
187
+ $wcj_global_discount_price_hash['total_number'] = $total_number;
188
+ for ( $i = 1; $i <= $total_number; $i++ ) {
189
+ $wcj_global_discount_price_hash[ 'enabled_' . $i ] = get_option( 'wcj_global_discount_sale_enabled_' . $i, 'yes' );
190
+ $wcj_global_discount_price_hash[ 'type_' . $i ] = get_option( 'wcj_global_discount_sale_coefficient_type_' . $i, 'percent' );
191
+ $wcj_global_discount_price_hash[ 'value_' . $i ] = get_option( 'wcj_global_discount_sale_coefficient_' . $i, 0 );
192
+ $wcj_global_discount_price_hash[ 'scope_' . $i ] = get_option( 'wcj_global_discount_sale_product_scope_' . $i, 'all' );
193
+ $wcj_global_discount_price_hash[ 'cats_in_' . $i ] = get_option( 'wcj_global_discount_sale_categories_incl_' . $i, '' );
194
+ }
195
+ $price_hash['wcj_global_discount_price_hash'] = $wcj_global_discount_price_hash;
196
+ return $price_hash;
197
+ }
198
+
199
+ /**
200
+ * get_settings.
201
+ *
202
+ * @version 2.5.7
203
+ * @since 2.5.7
204
+ */
205
+ function get_settings() {
206
+ $product_cats_options = array();
207
+ $product_cats = get_terms( 'product_cat', 'orderby=name&hide_empty=0' );
208
+ if ( ! empty( $product_cats ) && ! is_wp_error( $product_cats ) ){
209
+ foreach ( $product_cats as $product_cat ) {
210
+ $product_cats_options[ $product_cat->term_id ] = $product_cat->name;
211
+ }
212
+ }
213
+ $settings = array(
214
+ array(
215
+ 'title' => __( 'Options', 'woocommerce-jetpack' ),
216
+ 'type' => 'title',
217
+ 'id' => 'wcj_global_discount_options',
218
+ ),
219
+ array(
220
+ 'title' => __( 'Total Groups', 'woocommerce-jetpack' ),
221
+ 'id' => 'wcj_global_discount_groups_total_number',
222
+ 'default' => 1,
223
+ 'type' => 'custom_number',
224
+ 'desc_tip' => __( 'Press Save changes after you change this number.', 'woocommerce-jetpack' ),
225
+ 'desc' => apply_filters( 'get_wc_jetpack_plus_message', '', 'desc' ),
226
+ 'custom_attributes' => is_array( apply_filters( 'get_wc_jetpack_plus_message', '', 'readonly' ) ) ?
227
+ apply_filters( 'get_wc_jetpack_plus_message', '', 'readonly' ) : array( 'step' => '1', 'min' => '1', ),
228
+ ),
229
+ array(
230
+ 'type' => 'sectionend',
231
+ 'id' => 'wcj_global_discount_options',
232
+ ),
233
+ );
234
+ $total_number = apply_filters( 'wcj_get_option_filter', 1, get_option( 'wcj_global_discount_groups_total_number', 1 ) );
235
+ for ( $i = 1; $i <= $total_number; $i++ ) {
236
+ $settings = array_merge( $settings, array(
237
+ array(
238
+ 'title' => __( 'Discount Group', 'woocommerce-jetpack' ) . ' #' . $i,
239
+ 'type' => 'title',
240
+ 'id' => 'wcj_global_discount_options_' . $i,
241
+ ),
242
+ array(
243
+ 'title' => __( 'Enabled', 'woocommerce-jetpack' ),
244
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
245
+ 'id' => 'wcj_global_discount_sale_enabled_' . $i,
246
+ 'default' => 'yes',
247
+ 'type' => 'checkbox',
248
+ ),
249
+ array(
250
+ 'title' => __( 'Type', 'woocommerce-jetpack' ),
251
+ 'id' => 'wcj_global_discount_sale_coefficient_type_' . $i,
252
+ 'default' => 'percent',
253
+ 'type' => 'select',
254
+ 'options' => array(
255
+ 'percent' => __( 'Percent', 'woocommerce-jetpack' ),
256
+ 'fixed' => __( 'Fixed', 'woocommerce-jetpack' ),
257
+ ),
258
+ ),
259
+ array(
260
+ 'title' => __( 'Value', 'woocommerce-jetpack' ),
261
+ 'desc_tip' => __( 'Must be negative number.', 'woocommerce-jetpack' ),
262
+ 'id' => 'wcj_global_discount_sale_coefficient_' . $i,
263
+ 'default' => 0,
264
+ 'type' => 'number',
265
+ 'custom_attributes' => array( /* 'min' => 0, */ 'max' => 0, 'step' => 0.0001 ), // todo
266
+ ),
267
+ array(
268
+ 'title' => __( 'Product Scope', 'woocommerce-jetpack' ),
269
+ 'id' => 'wcj_global_discount_sale_product_scope_' . $i,
270
+ 'default' => 'all',
271
+ 'type' => 'select',
272
+ 'options' => array(
273
+ 'all' => __( 'All products', 'woocommerce-jetpack' ),
274
+ 'only_on_sale' => __( 'Only products that are already on sale', 'woocommerce-jetpack' ),
275
+ ),
276
+ ),
277
+ array(
278
+ 'title' => __( 'Include Product Categories', 'woocommerce-jetpack' ),
279
+ 'desc_tip' => __( 'Set this field to apply discount to selected categories only. Leave blank to apply to all categories.', 'woocommerce-jetpack' ),
280
+ 'id' => 'wcj_global_discount_sale_categories_incl_' . $i,
281
+ 'default' => '',
282
+ 'class' => 'chosen_select',
283
+ 'type' => 'multiselect',
284
+ 'options' => $product_cats_options,
285
+ ),
286
+ array(
287
+ 'type' => 'sectionend',
288
+ 'id' => 'wcj_global_discount_options_' . $i,
289
+ ),
290
+ ) );
291
+ }
292
+ return $this->add_standard_settings( $settings );
293
+ }
294
+ }
295
+
296
+ endif;
297
+
298
+ return new WCJ_Global_Discount();
includes/class-wcj-multicurrency.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Multicurrency class.
6
  *
7
- * @version 2.5.5
8
  * @since 2.4.3
9
  * @author Algoritmika Ltd.
10
  */
@@ -96,7 +96,7 @@ class WCJ_Multicurrency extends WCJ_Module {
96
  /**
97
  * add_hooks.
98
  *
99
- * @version 2.5.0
100
  */
101
  function add_hooks() {
102
  // Session
@@ -107,6 +107,9 @@ class WCJ_Multicurrency extends WCJ_Module {
107
  $_SESSION['wcj-currency'] = $_REQUEST['wcj-currency'];
108
  }
109
  if ( ! is_admin() || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
 
 
 
110
  // Prices
111
  add_filter( 'woocommerce_get_price', array( $this, 'change_price_by_currency' ), PHP_INT_MAX - 1, 2 );
112
  add_filter( 'woocommerce_get_sale_price', array( $this, 'change_price_by_currency' ), PHP_INT_MAX - 1, 2 );
@@ -127,6 +130,26 @@ class WCJ_Multicurrency extends WCJ_Module {
127
  }
128
  }
129
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
130
  /**
131
  * change_price_by_currency_grouped.
132
  *
4
  *
5
  * The WooCommerce Jetpack Multicurrency class.
6
  *
7
+ * @version 2.5.7
8
  * @since 2.4.3
9
  * @author Algoritmika Ltd.
10
  */
96
  /**
97
  * add_hooks.
98
  *
99
+ * @version 2.5.7
100
  */
101
  function add_hooks() {
102
  // Session
107
  $_SESSION['wcj-currency'] = $_REQUEST['wcj-currency'];
108
  }
109
  if ( ! is_admin() || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
110
+ // Prices - Compatibility - "WooCommerce TM Extra Product Options" plugin
111
+ add_filter( 'woocommerce_tm_epo_price_on_cart', array( $this, 'change_price_by_currency_tm_extra_product_options_plugin_cart' ), PHP_INT_MAX - 1, 1 );
112
+ add_filter( 'wc_epo_price', array( $this, 'change_price_by_currency_tm_extra_product_options_plugin' ), PHP_INT_MAX - 1, 3 );
113
  // Prices
114
  add_filter( 'woocommerce_get_price', array( $this, 'change_price_by_currency' ), PHP_INT_MAX - 1, 2 );
115
  add_filter( 'woocommerce_get_sale_price', array( $this, 'change_price_by_currency' ), PHP_INT_MAX - 1, 2 );
130
  }
131
  }
132
 
133
+ /**
134
+ * change_price_by_currency_tm_extra_product_options_plugin_cart.
135
+ *
136
+ * @version 2.5.7
137
+ * @since 2.5.7
138
+ */
139
+ function change_price_by_currency_tm_extra_product_options_plugin_cart( $price ) {
140
+ return $this->change_price_by_currency( $price, null );
141
+ }
142
+
143
+ /**
144
+ * change_price_by_currency_tm_extra_product_options_plugin.
145
+ *
146
+ * @version 2.5.7
147
+ * @since 2.5.7
148
+ */
149
+ function change_price_by_currency_tm_extra_product_options_plugin( $price, $type, $post_id ) {
150
+ return $this->change_price_by_currency( $price, null );
151
+ }
152
+
153
  /**
154
  * change_price_by_currency_grouped.
155
  *
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.5.6
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -151,26 +151,26 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
151
  /**
152
  * Add new custom status to wcj_orders_custom_statuses_array.
153
  *
154
- * @version 2.5.2
155
  */
156
  public function add_custom_status( $new_status, $new_status_label, $new_status_icon_content, $new_status_icon_color ) {
157
 
158
  // Checking function arguments
159
  if ( ! isset( $new_status ) || '' == $new_status ) {
160
- return '<div class="error"><p>' . __( 'Status slug is empty. Status not added.', 'woocommerce-jetpack' ) . '</p></div>';
161
  }
162
  if ( strlen( $new_status ) > 17 ) {
163
- return '<div class="error"><p>' . __( 'The length of status slug must be 17 or less characters.', 'woocommerce-jetpack' ) . '</p></div>';
164
  }
165
  if ( ! isset( $new_status_label ) || '' == $new_status_label ) {
166
- return '<div class="error"><p>' . __( 'Status label is empty. Status not added.', 'woocommerce-jetpack' ) . '</p></div>';
167
  }
168
 
169
  // Checking status
170
  $statuses_updated = ( '' == get_option( 'wcj_orders_custom_statuses_array' ) ) ? array() : get_option( 'wcj_orders_custom_statuses_array' );
171
  $new_key = 'wc-' . $_POST['new_status'];
172
  if ( isset( $statuses_updated[ $new_key ] ) )
173
- return '<div class="error"><p>' . __( 'Duplicate slug. Status not added.', 'woocommerce-jetpack' ) . '</p></div>';
174
  $statuses_updated[ $new_key ] = $_POST['new_status_label'];
175
 
176
  // Adding custom status
@@ -180,7 +180,7 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
180
  'color' => $new_status_icon_color,
181
  ) );
182
  if ( true === $result ) {
183
- return '<div class="updated"><p>' . __( 'New status have been successfully added!', 'woocommerce-jetpack' ) . '</p></div>';
184
  } else {
185
  return '<div class="error"><p>' . __( 'Status was not added.', 'woocommerce-jetpack' ) . '</p></div>';
186
  }
@@ -189,18 +189,18 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
189
  /**
190
  * create_custom_statuses_tool.
191
  *
192
- * @version 2.5.6
193
  */
194
  public function create_custom_statuses_tool() {
195
  $result_message = '';
196
  if ( isset( $_POST['add_custom_status'] ) ) {
197
  $result_message = $this->add_custom_status( $_POST['new_status'], $_POST['new_status_label'], $_POST['new_status_icon_content'], $_POST['new_status_icon_color'] );
198
  } elseif ( isset( $_GET['delete'] ) && ( '' != $_GET['delete'] ) ) {
199
- $statuses_updated = apply_filters( 'wc_order_statuses', $statuses_updated );
200
  unset( $statuses_updated[ $_GET['delete'] ] );
201
  $result = update_option( 'wcj_orders_custom_statuses_array', $statuses_updated );
202
  if ( true === $result ) {
203
- $result_message = '<div class="updated"><p>' . __( 'Status have been successfully deleted.', 'woocommerce-jetpack' ) . '</p></div>';
204
  } else {
205
  $result_message = '<div class="error"><p>' . __( 'Delete failed.', 'woocommerce-jetpack' ) . '</p></div>';
206
  }
@@ -254,11 +254,11 @@ class WCJ_Order_Custom_Statuses extends WCJ_Module {
254
  <ul>
255
  <li><?php _e( 'Slug (without wc- prefix)', 'woocommerce-jetpack' ); ?> <input type="text" name="new_status" style="width:100%;"></li>
256
  <li><?php _e( 'Label', 'woocommerce-jetpack' ); ?> <input type="text" name="new_status_label" style="width:100%;"></li>
257
- <li><?php _e( 'Icon Code', 'woocommerce-jetpack' ); ?> <input type="text" name="new_status_icon_content" value="e011"></li>
258
- <li><?php _e( 'Icon Color', 'woocommerce-jetpack' ); ?> <input type="color" name="new_status_icon_color" value="#999999"><br><?php
259
- echo sprintf( __( 'You can check icon codes <a target="_blank" href="%s">here</a>.', 'woocommerce-jetpack' ), 'https://rawgit.com/woothemes/woocommerce-icons/master/demo.html' ); ?></li>
260
  </ul>
261
- <input class="button-primary" type="submit" name="add_custom_status" value="Add new custom status">
262
  </form>
263
  </div>
264
  </div>
4
  *
5
  * The WooCommerce Jetpack Order Custom Statuses class.
6
  *
7
+ * @version 2.5.7
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
151
  /**
152
  * Add new custom status to wcj_orders_custom_statuses_array.
153
  *
154
+ * @version 2.5.7
155
  */
156
  public function add_custom_status( $new_status, $new_status_label, $new_status_icon_content, $new_status_icon_color ) {
157
 
158
  // Checking function arguments
159
  if ( ! isset( $new_status ) || '' == $new_status ) {
160
+ return '<div class="error"><p>' . __( 'Status slug is empty. Status was not added!', 'woocommerce-jetpack' ) . '</p></div>';
161
  }
162
  if ( strlen( $new_status ) > 17 ) {
163
+ return '<div class="error"><p>' . __( 'The length of status slug must be 17 or less characters. Status was not added!', 'woocommerce-jetpack' ) . '</p></div>';
164
  }
165
  if ( ! isset( $new_status_label ) || '' == $new_status_label ) {
166
+ return '<div class="error"><p>' . __( 'Status label is empty. Status was not added!', 'woocommerce-jetpack' ) . '</p></div>';
167
  }
168
 
169
  // Checking status
170
  $statuses_updated = ( '' == get_option( 'wcj_orders_custom_statuses_array' ) ) ? array() : get_option( 'wcj_orders_custom_statuses_array' );
171
  $new_key = 'wc-' . $_POST['new_status'];
172
  if ( isset( $statuses_updated[ $new_key ] ) )
173
+ return '<div class="error"><p>' . __( 'Duplicate slug. Status was not added!', 'woocommerce-jetpack' ) . '</p></div>';
174
  $statuses_updated[ $new_key ] = $_POST['new_status_label'];
175
 
176
  // Adding custom status
180
  'color' => $new_status_icon_color,
181
  ) );
182
  if ( true === $result ) {
183
+ return '<div class="updated"><p>' . __( 'New status has been successfully added!', 'woocommerce-jetpack' ) . '</p></div>';
184
  } else {
185
  return '<div class="error"><p>' . __( 'Status was not added.', 'woocommerce-jetpack' ) . '</p></div>';
186
  }
189
  /**
190
  * create_custom_statuses_tool.
191
  *
192
+ * @version 2.5.7
193
  */
194
  public function create_custom_statuses_tool() {
195
  $result_message = '';
196
  if ( isset( $_POST['add_custom_status'] ) ) {
197
  $result_message = $this->add_custom_status( $_POST['new_status'], $_POST['new_status_label'], $_POST['new_status_icon_content'], $_POST['new_status_icon_color'] );
198
  } elseif ( isset( $_GET['delete'] ) && ( '' != $_GET['delete'] ) ) {
199
+ $statuses_updated = apply_filters( 'wc_order_statuses', array() );
200
  unset( $statuses_updated[ $_GET['delete'] ] );
201
  $result = update_option( 'wcj_orders_custom_statuses_array', $statuses_updated );
202
  if ( true === $result ) {
203
+ $result_message = '<div class="updated"><p>' . __( 'Status has been successfully deleted.', 'woocommerce-jetpack' ) . '</p></div>';
204
  } else {
205
  $result_message = '<div class="error"><p>' . __( 'Delete failed.', 'woocommerce-jetpack' ) . '</p></div>';
206
  }
254
  <ul>
255
  <li><?php _e( 'Slug (without wc- prefix)', 'woocommerce-jetpack' ); ?> <input type="text" name="new_status" style="width:100%;"></li>
256
  <li><?php _e( 'Label', 'woocommerce-jetpack' ); ?> <input type="text" name="new_status_label" style="width:100%;"></li>
257
+ <li><?php _e( 'Icon Code', 'woocommerce-jetpack' ); ?> <input type="text" name="new_status_icon_content" value="e011"><br><?php
258
+ echo '<em>' . sprintf( __( 'You can check icon codes <a target="_blank" href="%s">here</a>.', 'woocommerce-jetpack' ), 'https://rawgit.com/woothemes/woocommerce-icons/master/demo.html' ) . '</em>'; ?></li>
259
+ <li><?php _e( 'Icon Color', 'woocommerce-jetpack' ); ?> <input type="color" name="new_status_icon_color" value="#999999"></li>
260
  </ul>
261
+ <input class="button-primary" type="submit" name="add_custom_status" value="<?php echo __( 'Add new custom status', 'woocommerce-jetpack' ); ?>">
262
  </form>
263
  </div>
264
  </div>
includes/class-wcj-order-min-amount.php ADDED
@@ -0,0 +1,296 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WooCommerce Jetpack Orders
4
+ *
5
+ * The WooCommerce Jetpack Orders class.
6
+ *
7
+ * @version 2.5.7
8
+ * @since 2.5.7
9
+ * @author Algoritmika Ltd.
10
+ */
11
+
12
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
13
+
14
+ if ( ! class_exists( 'WCJ_Order_Min_Amount' ) ) :
15
+
16
+ class WCJ_Order_Min_Amount extends WCJ_Module {
17
+
18
+ /**
19
+ * Constructor.
20
+ *
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' );
28
+ $this->desc = __( 'Minimum WooCommerce order amount (optionally by user role).', 'woocommerce-jetpack' );
29
+ $this->link = 'http://booster.io/features/woocommerce-order-minimum-amount/';
30
+ parent::__construct();
31
+
32
+ add_action( 'init', array( $this, 'add_settings_hook' ) );
33
+
34
+ if ( $this->is_enabled() ) {
35
+ add_action( 'init', array( $this, 'add_order_minimum_amount_hooks' ) );
36
+ }
37
+ }
38
+
39
+ /**
40
+ * add_order_minimum_amount_hooks.
41
+ *
42
+ * @version 2.5.3
43
+ * @since 2.5.3
44
+ */
45
+ function add_order_minimum_amount_hooks() {
46
+ $is_order_minimum_amount_enabled = false;
47
+ if ( get_option( 'wcj_order_minimum_amount', 0 ) > 0 ) {
48
+ $is_order_minimum_amount_enabled = true;
49
+ } else {
50
+ foreach ( wcj_get_user_roles() as $role_key => $role_data ) {
51
+ if ( get_option( 'wcj_order_minimum_amount_by_user_role_' . $role_key, 0 ) > 0 ) {
52
+ $is_order_minimum_amount_enabled = true;
53
+ break;
54
+ }
55
+ }
56
+ }
57
+ if ( $is_order_minimum_amount_enabled ) {
58
+ add_action( 'woocommerce_checkout_process', array( $this, 'order_minimum_amount' ) );
59
+ add_action( 'woocommerce_before_cart', array( $this, 'order_minimum_amount' ) );
60
+ if ( 'yes' === get_option( 'wcj_order_minimum_amount_stop_from_seeing_checkout' ) ) {
61
+ add_action( 'wp', array( $this, 'stop_from_seeing_checkout' ), 100 );
62
+ // add_action( 'template_redirect', array( $this, 'stop_from_seeing_checkout' ), 100 );
63
+ }
64
+ }
65
+ }
66
+
67
+ /**
68
+ * get_order_minimum_amount_with_user_roles.
69
+ *
70
+ * @version 2.5.3
71
+ * @since 2.5.3
72
+ */
73
+ function get_order_minimum_amount_with_user_roles() {
74
+ $minimum = get_option( 'wcj_order_minimum_amount' );
75
+ $current_user_role = wcj_get_current_user_first_role();
76
+ foreach ( wcj_get_user_roles() as $role_key => $role_data ) {
77
+ if ( $role_key === $current_user_role ) {
78
+ $order_minimum_amount_by_user_role = get_option( 'wcj_order_minimum_amount_by_user_role_' . $role_key, 0 );
79
+ if ( $order_minimum_amount_by_user_role > /* $minimum */ 0 ) {
80
+ $minimum = $order_minimum_amount_by_user_role;
81
+ }
82
+ break;
83
+ }
84
+ }
85
+ return $minimum;
86
+ }
87
+
88
+ /**
89
+ * get_cart_total_for_minimal_order_amount.
90
+ *
91
+ * @version 2.5.5
92
+ * @since 2.5.5
93
+ */
94
+ private function get_cart_total_for_minimal_order_amount() {
95
+ $cart_total = WC()->cart->total;
96
+ if ( 'yes' === get_option( 'wcj_order_minimum_amount_exclude_shipping', 'no' ) ) {
97
+ $shipping_total = isset( WC()->cart->shipping_total ) ? WC()->cart->shipping_total : 0;
98
+ $shipping_tax_total = isset( WC()->cart->shipping_tax_total ) ? WC()->cart->shipping_tax_total : 0;
99
+ $cart_total -= ( $shipping_total + $shipping_tax_total );
100
+ }
101
+ return $cart_total;
102
+ }
103
+
104
+ /**
105
+ * order_minimum_amount.
106
+ *
107
+ * @version 2.5.5
108
+ */
109
+ public function order_minimum_amount() {
110
+ $minimum = $this->get_order_minimum_amount_with_user_roles();
111
+ if ( 0 == $minimum ) {
112
+ return;
113
+ }
114
+ $cart_total = $this->get_cart_total_for_minimal_order_amount();
115
+ if ( $cart_total < $minimum ) {
116
+ if( is_cart() ) {
117
+ if ( 'yes' === get_option( 'wcj_order_minimum_amount_cart_notice_enabled' ) ) {
118
+ wc_print_notice(
119
+ sprintf( apply_filters( 'wcj_get_option_filter', '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' ) ),
120
+ woocommerce_price( $minimum ),
121
+ woocommerce_price( $cart_total )
122
+ ),
123
+ 'notice'
124
+ );
125
+ }
126
+ } else {
127
+ wc_add_notice(
128
+ sprintf( apply_filters( 'wcj_get_option_filter', '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' ) ),
129
+ woocommerce_price( $minimum ),
130
+ woocommerce_price( $cart_total )
131
+ ),
132
+ 'error'
133
+ );
134
+ }
135
+ }
136
+ }
137
+
138
+ /**
139
+ * stop_from_seeing_checkout.
140
+ *
141
+ * @version 2.5.5
142
+ */
143
+ public function stop_from_seeing_checkout( $wp ) {
144
+ // if ( is_admin() ) return;
145
+ global $woocommerce;
146
+ if ( ! isset( $woocommerce ) || ! is_object( $woocommerce ) ) {
147
+ return;
148
+ }
149
+ if ( ! isset( $woocommerce->cart ) || ! is_object( $woocommerce->cart ) ) {
150
+ return;
151
+ }
152
+ if ( ! is_checkout() ) {
153
+ return;
154
+ }
155
+ $minimum = $this->get_order_minimum_amount_with_user_roles();
156
+ if ( 0 == $minimum ) {
157
+ return;
158
+ }
159
+ $the_cart_total = $this->get_cart_total_for_minimal_order_amount();
160
+ if ( 0 == $the_cart_total ) {
161
+ return;
162
+ }
163
+ if ( $the_cart_total < $minimum ) {
164
+ wp_safe_redirect( $woocommerce->cart->get_cart_url() );
165
+ }
166
+ }
167
+
168
+ /**
169
+ * add_settings_hook.
170
+ *
171
+ * @version 2.5.7
172
+ * @since 2.5.7
173
+ */
174
+ function add_settings_hook() {
175
+ add_filter( 'wcj_order_min_amount_settings', array( $this, 'add_settings' ) );
176
+ }
177
+
178
+ /**
179
+ * get_settings.
180
+ *
181
+ * @version 2.5.7
182
+ * @since 2.5.7
183
+ */
184
+ function get_settings() {
185
+ $settings = apply_filters( 'wcj_order_min_amount_settings', array() );
186
+ return $this->add_standard_settings( $settings );
187
+ }
188
+
189
+ /**
190
+ * add_settings.
191
+ *
192
+ * @version 2.5.7
193
+ * @since 2.5.7
194
+ */
195
+ function add_settings() {
196
+ $settings = array(
197
+ array(
198
+ 'title' => __( 'Order Minimum Amount', 'woocommerce-jetpack' ),
199
+ 'type' => 'title',
200
+ 'desc' => __( 'This section lets you set minimum order amount.', 'woocommerce-jetpack' ),
201
+ 'id' => 'wcj_order_minimum_amount_options',
202
+ ),
203
+ array(
204
+ 'title' => __( 'Amount', 'woocommerce-jetpack' ),
205
+ 'desc' => __( 'Minimum order amount. Set to 0 to disable.', 'woocommerce-jetpack' ),
206
+ 'id' => 'wcj_order_minimum_amount',
207
+ 'default' => 0,
208
+ 'type' => 'number',
209
+ 'custom_attributes' => array(
210
+ 'step' => '0.0001',
211
+ 'min' => '0',
212
+ ),
213
+ ),
214
+ array(
215
+ 'title' => __( 'Exclude Shipping from Cart Total', 'woocommerce-jetpack' ),
216
+ 'desc' => __( 'Exclude', 'woocommerce-jetpack' ),
217
+ 'id' => 'wcj_order_minimum_amount_exclude_shipping',
218
+ 'default' => 'no',
219
+ 'type' => 'checkbox',
220
+ ),
221
+ array(
222
+ 'title' => __( 'Error message', 'woocommerce-jetpack' ),
223
+ 'desc' => apply_filters( 'get_wc_jetpack_plus_message', '', 'desc' ),
224
+ 'desc_tip' => __( 'Message to customer if order is below minimum amount. Default: You must have an order with a minimum of %s to place your order, your current order total is %s.', 'woocommerce-jetpack' ),
225
+ 'id' => 'wcj_order_minimum_amount_error_message',
226
+ 'default' => 'You must have an order with a minimum of %s to place your order, your current order total is %s.',
227
+ 'type' => 'textarea',
228
+ 'custom_attributes' => apply_filters( 'get_wc_jetpack_plus_message', '', 'readonly' ),
229
+ 'css' => 'width:50%;min-width:300px;',
230
+ ),
231
+ array(
232
+ 'title' => __( 'Add notice to cart page also', 'woocommerce-jetpack' ),
233
+ 'desc' => __( 'Add', 'woocommerce-jetpack' ),
234
+ 'id' => 'wcj_order_minimum_amount_cart_notice_enabled',
235
+ 'default' => 'no',
236
+ 'type' => 'checkbox',
237
+ ),
238
+ array(
239
+ 'title' => __( 'Message on cart page', 'woocommerce-jetpack' ),
240
+ 'desc' => apply_filters( 'get_wc_jetpack_plus_message', '', 'desc' ),
241
+ 'desc_tip' => __( 'Message to customer if order is below minimum amount. Default: You must have an order with a minimum of %s to place your order, your current order total is %s.', 'woocommerce-jetpack' ),
242
+ 'id' => 'wcj_order_minimum_amount_cart_notice_message',
243
+ 'default' => 'You must have an order with a minimum of %s to place your order, your current order total is %s.',
244
+ 'type' => 'textarea',
245
+ 'custom_attributes' => apply_filters( 'get_wc_jetpack_plus_message', '', 'readonly' ),
246
+ 'css' => 'width:50%;min-width:300px;',
247
+ ),
248
+ array(
249
+ 'title' => __( 'Stop customer from seeing the Checkout page if minimum amount not reached.', 'woocommerce-jetpack' ),
250
+ 'desc' => __( 'Redirect back to Cart page', 'woocommerce-jetpack' ),
251
+ 'id' => 'wcj_order_minimum_amount_stop_from_seeing_checkout',
252
+ 'default' => 'no',
253
+ 'type' => 'checkbox',
254
+ ),
255
+ array(
256
+ 'type' => 'sectionend',
257
+ 'id' => 'wcj_order_minimum_amount_options',
258
+ ),
259
+ array(
260
+ 'title' => __( 'Order Minimum Amount by User Role', 'woocommerce-jetpack' ),
261
+ 'type' => 'title',
262
+ 'id' => 'wcj_order_minimum_amount_by_ser_role_options',
263
+ 'desc' => sprintf( __( 'Custom roles can be added via "Add/Manage Custom Roles" tool in Booster\'s <a href="%s">General</a> module.', 'woocommerce-jetpack' ),
264
+ admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=emails_and_misc&section=general' ) ),
265
+ ),
266
+ );
267
+ $c = array( 'guest', 'administrator', 'customer' );
268
+ $is_r = apply_filters( 'get_wc_jetpack_plus_message', '', 'readonly' );
269
+ if ( '' == $is_r ) {
270
+ $is_r = array();
271
+ }
272
+ foreach ( wcj_get_user_roles() as $role_key => $role_data ) {
273
+ $settings = array_merge( $settings, array(
274
+ array(
275
+ 'title' => $role_data['name'],
276
+ 'id' => 'wcj_order_minimum_amount_by_user_role_' . $role_key,
277
+ 'default' => 0,
278
+ 'type' => 'number',
279
+ 'custom_attributes' => ( ! in_array( $role_key, $c ) ? array_merge( array( 'step' => '0.0001', 'min' => '0', ), $is_r ) : array( 'step' => '0.0001', 'min' => '0', ) ),
280
+ 'desc_tip' => ( ! in_array( $role_key, $c ) ? apply_filters( 'get_wc_jetpack_plus_message', '', 'desc_no_link' ) : '' ),
281
+ ),
282
+ ) );
283
+ }
284
+ $settings = array_merge( $settings, array(
285
+ array(
286
+ 'type' => 'sectionend',
287
+ 'id' => 'wcj_order_minimum_amount_by_ser_role_options',
288
+ ),
289
+ ) );
290
+ return $settings;
291
+ }
292
+ }
293
+
294
+ endif;
295
+
296
+ return new WCJ_Order_Min_Amount();
includes/class-wcj-orders.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Orders class.
6
  *
7
- * @version 2.5.6
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -17,13 +17,13 @@ class WCJ_Orders extends WCJ_Module {
17
  /**
18
  * Constructor.
19
  *
20
- * @version 2.5.6
21
  */
22
  public function __construct() {
23
 
24
  $this->id = 'orders';
25
  $this->short_desc = __( 'Orders', 'woocommerce-jetpack' );
26
- $this->desc = __( 'Minimum WooCommerce order amount (optionally by user role); orders auto-complete; custom admin order list columns; admin order currency.', 'woocommerce-jetpack' );
27
  $this->link = 'http://booster.io/features/woocommerce-orders/';
28
  parent::__construct();
29
 
@@ -31,16 +31,13 @@ class WCJ_Orders extends WCJ_Module {
31
 
32
  if ( $this->is_enabled() ) {
33
 
34
- // Order minimum amount
35
- add_action( 'init', array( $this, 'add_order_minimum_amount_hooks' ) );
36
-
37
  // Order auto complete
38
  if ( 'yes' === get_option( 'wcj_order_auto_complete_enabled' ) ) {
39
  add_action( 'woocommerce_thankyou', array( $this, 'auto_complete_order' ) );
40
  }
41
 
42
  // Custom columns
43
- add_filter( 'manage_edit-shop_order_columns', array( $this, 'add_order_column' ), PHP_INT_MAX );
44
  add_action( 'manage_shop_order_posts_custom_column', array( $this, 'render_order_columns' ), PHP_INT_MAX );
45
  if ( 'yes' === get_option( 'wcj_orders_list_custom_columns_country', 'no' ) ) {
46
  // Country filtering
@@ -48,7 +45,7 @@ class WCJ_Orders extends WCJ_Module {
48
  add_filter( 'parse_query', array( $this, 'orders_by_country_admin_filter_query' ) );
49
  }
50
 
51
- // Order Currency
52
  if ( 'yes' === get_option( 'wcj_order_admin_currency', 'no' ) ) {
53
  $this->meta_box_screen = 'shop_order';
54
  add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
@@ -57,6 +54,156 @@ class WCJ_Orders extends WCJ_Module {
57
  add_filter( 'woocommerce_get_order_currency', array( $this, 'change_order_currency' ), PHP_INT_MAX, 2 );
58
  }
59
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  }
61
  }
62
 
@@ -92,34 +239,6 @@ class WCJ_Orders extends WCJ_Module {
92
  return $options;
93
  }
94
 
95
- /**
96
- * add_order_minimum_amount_hooks.
97
- *
98
- * @version 2.5.3
99
- * @since 2.5.3
100
- */
101
- function add_order_minimum_amount_hooks() {
102
- $is_order_minimum_amount_enabled = false;
103
- if ( get_option( 'wcj_order_minimum_amount', 0 ) > 0 ) {
104
- $is_order_minimum_amount_enabled = true;
105
- } else {
106
- foreach ( wcj_get_user_roles() as $role_key => $role_data ) {
107
- if ( get_option( 'wcj_order_minimum_amount_by_user_role_' . $role_key, 0 ) > 0 ) {
108
- $is_order_minimum_amount_enabled = true;
109
- break;
110
- }
111
- }
112
- }
113
- if ( $is_order_minimum_amount_enabled ) {
114
- add_action( 'woocommerce_checkout_process', array( $this, 'order_minimum_amount' ) );
115
- add_action( 'woocommerce_before_cart', array( $this, 'order_minimum_amount' ) );
116
- if ( 'yes' === get_option( 'wcj_order_minimum_amount_stop_from_seeing_checkout' ) ) {
117
- add_action( 'wp', array( $this, 'stop_from_seeing_checkout' ), 100 );
118
- // add_action( 'template_redirect', array( $this, 'stop_from_seeing_checkout' ), 100 );
119
- }
120
- }
121
- }
122
-
123
  /**
124
  * Filter the orders in admin based on options
125
  *
@@ -151,6 +270,29 @@ class WCJ_Orders extends WCJ_Module {
151
  }
152
  }
153
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
154
  /**
155
  * add_order_column.
156
  *
@@ -214,107 +356,6 @@ class WCJ_Orders extends WCJ_Module {
214
  $order->update_status( 'completed' );
215
  }
216
 
217
- /**
218
- * get_order_minimum_amount_with_user_roles.
219
- *
220
- * @version 2.5.3
221
- * @since 2.5.3
222
- */
223
- function get_order_minimum_amount_with_user_roles() {
224
- $minimum = get_option( 'wcj_order_minimum_amount' );
225
- $current_user_role = wcj_get_current_user_first_role();
226
- foreach ( wcj_get_user_roles() as $role_key => $role_data ) {
227
- if ( $role_key === $current_user_role ) {
228
- $order_minimum_amount_by_user_role = get_option( 'wcj_order_minimum_amount_by_user_role_' . $role_key, 0 );
229
- if ( $order_minimum_amount_by_user_role > /* $minimum */ 0 ) {
230
- $minimum = $order_minimum_amount_by_user_role;
231
- }
232
- break;
233
- }
234
- }
235
- return $minimum;
236
- }
237
-
238
- /**
239
- * get_cart_total_for_minimal_order_amount.
240
- *
241
- * @version 2.5.5
242
- * @since 2.5.5
243
- */
244
- private function get_cart_total_for_minimal_order_amount() {
245
- $cart_total = WC()->cart->total;
246
- if ( 'yes' === get_option( 'wcj_order_minimum_amount_exclude_shipping', 'no' ) ) {
247
- $shipping_total = isset( WC()->cart->shipping_total ) ? WC()->cart->shipping_total : 0;
248
- $shipping_tax_total = isset( WC()->cart->shipping_tax_total ) ? WC()->cart->shipping_tax_total : 0;
249
- $cart_total -= ( $shipping_total + $shipping_tax_total );
250
- }
251
- return $cart_total;
252
- }
253
-
254
- /**
255
- * order_minimum_amount.
256
- *
257
- * @version 2.5.5
258
- */
259
- public function order_minimum_amount() {
260
- $minimum = $this->get_order_minimum_amount_with_user_roles();
261
- if ( 0 == $minimum ) {
262
- return;
263
- }
264
- $cart_total = $this->get_cart_total_for_minimal_order_amount();
265
- if ( $cart_total < $minimum ) {
266
- if( is_cart() ) {
267
- if ( 'yes' === get_option( 'wcj_order_minimum_amount_cart_notice_enabled' ) ) {
268
- wc_print_notice(
269
- sprintf( apply_filters( 'wcj_get_option_filter', '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' ) ),
270
- woocommerce_price( $minimum ),
271
- woocommerce_price( $cart_total )
272
- ),
273
- 'notice'
274
- );
275
- }
276
- } else {
277
- wc_add_notice(
278
- sprintf( apply_filters( 'wcj_get_option_filter', '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' ) ),
279
- woocommerce_price( $minimum ),
280
- woocommerce_price( $cart_total )
281
- ),
282
- 'error'
283
- );
284
- }
285
- }
286
- }
287
-
288
- /**
289
- * stop_from_seeing_checkout.
290
- *
291
- * @version 2.5.5
292
- */
293
- public function stop_from_seeing_checkout( $wp ) {
294
- // if ( is_admin() ) return;
295
- global $woocommerce;
296
- if ( ! isset( $woocommerce ) || ! is_object( $woocommerce ) ) {
297
- return;
298
- }
299
- if ( ! isset( $woocommerce->cart ) || ! is_object( $woocommerce->cart ) ) {
300
- return;
301
- }
302
- if ( ! is_checkout() ) {
303
- return;
304
- }
305
- $minimum = $this->get_order_minimum_amount_with_user_roles();
306
- if ( 0 == $minimum ) {
307
- return;
308
- }
309
- $the_cart_total = $this->get_cart_total_for_minimal_order_amount();
310
- if ( 0 == $the_cart_total ) {
311
- return;
312
- }
313
- if ( $the_cart_total < $minimum ) {
314
- wp_safe_redirect( $woocommerce->cart->get_cart_url() );
315
- }
316
- }
317
-
318
  /**
319
  * add_settings_hook.
320
  *
@@ -338,7 +379,7 @@ class WCJ_Orders extends WCJ_Module {
338
  /**
339
  * add_settings.
340
  *
341
- * @version 2.5.6
342
  * @since 2.5.3
343
  */
344
  function add_settings() {
@@ -371,98 +412,6 @@ class WCJ_Orders extends WCJ_Module {
371
  'type' => 'sectionend',
372
  'id' => 'wcj_order_admin_currency_options',
373
  ),
374
- array(
375
- 'title' => __( 'Order Minimum Amount', 'woocommerce-jetpack' ),
376
- 'type' => 'title',
377
- 'desc' => __( 'This section lets you set minimum order amount.', 'woocommerce-jetpack' ),
378
- 'id' => 'wcj_order_minimum_amount_options',
379
- ),
380
- array(
381
- 'title' => __( 'Amount', 'woocommerce-jetpack' ),
382
- 'desc' => __( 'Minimum order amount. Set to 0 to disable.', 'woocommerce-jetpack' ),
383
- 'id' => 'wcj_order_minimum_amount',
384
- 'default' => 0,
385
- 'type' => 'number',
386
- 'custom_attributes' => array(
387
- 'step' => '0.0001',
388
- 'min' => '0',
389
- ),
390
- ),
391
- array(
392
- 'title' => __( 'Exclude Shipping from Cart Total', 'woocommerce-jetpack' ),
393
- 'desc' => __( 'Exclude', 'woocommerce-jetpack' ),
394
- 'id' => 'wcj_order_minimum_amount_exclude_shipping',
395
- 'default' => 'no',
396
- 'type' => 'checkbox',
397
- ),
398
- array(
399
- 'title' => __( 'Error message', 'woocommerce-jetpack' ),
400
- 'desc' => apply_filters( 'get_wc_jetpack_plus_message', '', 'desc' ),
401
- 'desc_tip' => __( 'Message to customer if order is below minimum amount. Default: You must have an order with a minimum of %s to place your order, your current order total is %s.', 'woocommerce-jetpack' ),
402
- 'id' => 'wcj_order_minimum_amount_error_message',
403
- 'default' => 'You must have an order with a minimum of %s to place your order, your current order total is %s.',
404
- 'type' => 'textarea',
405
- 'custom_attributes' => apply_filters( 'get_wc_jetpack_plus_message', '', 'readonly' ),
406
- 'css' => 'width:50%;min-width:300px;',
407
- ),
408
- array(
409
- 'title' => __( 'Add notice to cart page also', 'woocommerce-jetpack' ),
410
- 'desc' => __( 'Add', 'woocommerce-jetpack' ),
411
- 'id' => 'wcj_order_minimum_amount_cart_notice_enabled',
412
- 'default' => 'no',
413
- 'type' => 'checkbox',
414
- ),
415
- array(
416
- 'title' => __( 'Message on cart page', 'woocommerce-jetpack' ),
417
- 'desc' => apply_filters( 'get_wc_jetpack_plus_message', '', 'desc' ),
418
- 'desc_tip' => __( 'Message to customer if order is below minimum amount. Default: You must have an order with a minimum of %s to place your order, your current order total is %s.', 'woocommerce-jetpack' ),
419
- 'id' => 'wcj_order_minimum_amount_cart_notice_message',
420
- 'default' => 'You must have an order with a minimum of %s to place your order, your current order total is %s.',
421
- 'type' => 'textarea',
422
- 'custom_attributes' => apply_filters( 'get_wc_jetpack_plus_message', '', 'readonly' ),
423
- 'css' => 'width:50%;min-width:300px;',
424
- ),
425
- array(
426
- 'title' => __( 'Stop customer from seeing the Checkout page if minimum amount not reached.', 'woocommerce-jetpack' ),
427
- 'desc' => __( 'Redirect back to Cart page', 'woocommerce-jetpack' ),
428
- 'id' => 'wcj_order_minimum_amount_stop_from_seeing_checkout',
429
- 'default' => 'no',
430
- 'type' => 'checkbox',
431
- ),
432
- array(
433
- 'type' => 'sectionend',
434
- 'id' => 'wcj_order_minimum_amount_options',
435
- ),
436
- array(
437
- 'title' => __( 'Order Minimum Amount by User Role', 'woocommerce-jetpack' ),
438
- 'type' => 'title',
439
- 'id' => 'wcj_order_minimum_amount_by_ser_role_options',
440
- 'desc' => sprintf( __( 'Custom roles can be added via "Add/Manage Custom Roles" tool in Booster\'s <a href="%s">General</a> module.', 'woocommerce-jetpack' ),
441
- admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=emails_and_misc&section=general' ) ),
442
- ),
443
- );
444
- $c = array( 'guest', 'administrator', 'customer' );
445
- $is_r = apply_filters( 'get_wc_jetpack_plus_message', '', 'readonly' );
446
- if ( '' == $is_r ) {
447
- $is_r = array();
448
- }
449
- foreach ( wcj_get_user_roles() as $role_key => $role_data ) {
450
- $settings = array_merge( $settings, array(
451
- array(
452
- 'title' => $role_data['name'],
453
- 'id' => 'wcj_order_minimum_amount_by_user_role_' . $role_key,
454
- 'default' => 0,
455
- 'type' => 'number',
456
- 'custom_attributes' => ( ! in_array( $role_key, $c ) ? array_merge( array( 'step' => '0.0001', 'min' => '0', ), $is_r ) : array( 'step' => '0.0001', 'min' => '0', ) ),
457
- 'desc_tip' => ( ! in_array( $role_key, $c ) ? apply_filters( 'get_wc_jetpack_plus_message', '', 'desc_no_link' ) : '' ),
458
- ),
459
- ) );
460
- }
461
- $settings = array_merge( $settings, array(
462
- array(
463
- 'type' => 'sectionend',
464
- 'id' => 'wcj_order_minimum_amount_by_ser_role_options',
465
- ),
466
  array(
467
  'title' => __( 'Orders Auto-Complete', 'woocommerce-jetpack' ),
468
  'type' => 'title',
@@ -482,7 +431,7 @@ class WCJ_Orders extends WCJ_Module {
482
  'id' => 'wcj_order_auto_complete_options',
483
  ),
484
  array(
485
- 'title' => __( 'Orders List Custom Columns', 'woocommerce-jetpack' ),
486
  'type' => 'title',
487
  'desc' => __( 'This section lets you add custom columns to WooCommerce orders list.', 'woocommerce-jetpack' ),
488
  'id' => 'wcj_orders_list_custom_columns_options',
@@ -505,7 +454,7 @@ class WCJ_Orders extends WCJ_Module {
505
  array( 'step' => '1', 'min' => '0', )
506
  ),
507
  ),
508
- ) );
509
  $total_number = apply_filters( 'wcj_get_option_filter', 1, get_option( 'wcj_orders_list_custom_columns_total_number', 1 ) );
510
  for ( $i = 1; $i <= $total_number; $i++ ) {
511
  $settings = array_merge( $settings, array(
@@ -538,6 +487,63 @@ class WCJ_Orders extends WCJ_Module {
538
  'type' => 'sectionend',
539
  'id' => 'wcj_orders_list_custom_columns_options',
540
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
541
  ) );
542
  return $settings;
543
  }
4
  *
5
  * The WooCommerce Jetpack Orders class.
6
  *
7
+ * @version 2.5.7
8
  * @author Algoritmika Ltd.
9
  */
10
 
17
  /**
18
  * Constructor.
19
  *
20
+ * @version 2.5.7
21
  */
22
  public function __construct() {
23
 
24
  $this->id = 'orders';
25
  $this->short_desc = __( 'Orders', 'woocommerce-jetpack' );
26
+ $this->desc = __( 'Orders auto-complete. Custom admin order list columns. Admin order currency. Admin order list multiple status filtering.', 'woocommerce-jetpack' );
27
  $this->link = 'http://booster.io/features/woocommerce-orders/';
28
  parent::__construct();
29
 
31
 
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
40
+ add_filter( 'manage_edit-shop_order_columns', array( $this, 'add_order_column' ), PHP_INT_MAX - 1 );
41
  add_action( 'manage_shop_order_posts_custom_column', array( $this, 'render_order_columns' ), PHP_INT_MAX );
42
  if ( 'yes' === get_option( 'wcj_orders_list_custom_columns_country', 'no' ) ) {
43
  // Country filtering
45
  add_filter( 'parse_query', array( $this, 'orders_by_country_admin_filter_query' ) );
46
  }
47
 
48
+ // Order currency
49
  if ( 'yes' === get_option( 'wcj_order_admin_currency', 'no' ) ) {
50
  $this->meta_box_screen = 'shop_order';
51
  add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
54
  add_filter( 'woocommerce_get_order_currency', array( $this, 'change_order_currency' ), PHP_INT_MAX, 2 );
55
  }
56
  }
57
+
58
+ // Multiple status
59
+ if ( 'yes' === get_option( 'wcj_order_admin_list_multiple_status_not_completed_link', 'no' ) ) {
60
+ add_filter( 'views_edit-shop_order', array( $this, 'add_shop_order_multiple_statuses_not_completed_link' ) );
61
+ add_action( 'pre_get_posts', array( $this, 'filter_shop_order_multiple_statuses_not_completed_link' ), PHP_INT_MAX, 1 );
62
+ }
63
+ if ( 'no' != get_option( 'wcj_order_admin_list_multiple_status_filter', 'no' ) ) {
64
+ add_action( 'restrict_manage_posts', array( $this, 'add_shop_order_multiple_statuses' ), PHP_INT_MAX, 2 );
65
+ add_action( 'pre_get_posts', array( $this, 'filter_shop_order_multiple_statuses' ), PHP_INT_MAX, 1 );
66
+ }
67
+ if ( 'yes' === get_option( 'wcj_order_admin_list_hide_default_statuses_menu', 'no' ) ) {
68
+ add_action( 'admin_head', array( $this, 'hide_default_statuses_menu' ), PHP_INT_MAX );
69
+ }
70
+
71
+ // Columns Order
72
+ if ( 'yes' === get_option( 'wcj_order_admin_list_columns_order_enabled', 'no' ) ) {
73
+ add_filter( 'manage_edit-shop_order_columns', array( $this, 'rearange_order_columns' ), PHP_INT_MAX );
74
+ }
75
+ }
76
+ }
77
+
78
+ /**
79
+ * hide_default_statuses_menu.
80
+ *
81
+ * @version 2.5.7
82
+ * @since 2.5.7
83
+ */
84
+ function hide_default_statuses_menu() {
85
+ echo '<style>body.post-type-shop_order ul.subsubsub {display: none !important;}</style>';
86
+ }
87
+
88
+ /**
89
+ * get_orders_default_columns_in_order.
90
+ *
91
+ * @version 2.5.7
92
+ * @since 2.5.7
93
+ */
94
+ function get_orders_default_columns_in_order() {
95
+ $columns = array(
96
+ 'cb',
97
+ 'order_status',
98
+ 'order_title',
99
+ 'order_items',
100
+ 'billing_address',
101
+ 'shipping_address',
102
+ 'customer_message',
103
+ 'order_notes',
104
+ 'order_date',
105
+ 'order_total',
106
+ 'order_actions',
107
+ );
108
+ return implode( PHP_EOL, $columns );
109
+ }
110
+
111
+ /**
112
+ * add_shop_order_multiple_statuses_not_completed_link.
113
+ *
114
+ * @version 2.5.7
115
+ * @since 2.5.7
116
+ */
117
+ function add_shop_order_multiple_statuses_not_completed_link( $views ) {
118
+ global $wp_query;
119
+ if ( ! current_user_can( 'edit_others_pages' ) ) {
120
+ return $views;
121
+ }
122
+ $all_not_completed_statuses = wc_get_order_statuses();
123
+ unset( $all_not_completed_statuses['wc-completed'] );
124
+ $all_not_completed_statuses = array_keys( $all_not_completed_statuses );
125
+ $all_not_completed_statuses_param = urlencode( implode( ',', $all_not_completed_statuses ) );
126
+ $class = ( isset( $wp_query->query['post_status'] ) && is_array( $wp_query->query['post_status'] ) && $all_not_completed_statuses === $wp_query->query['post_status'] ) ? 'current' : '';
127
+ $query_string = remove_query_arg( array( 'post_status', 'wcj_admin_filter_statuses' ) );
128
+ $query_string = add_query_arg( 'post_status', $all_not_completed_statuses_param, $query_string );
129
+ $views['wcj_statuses_not_completed'] = '<a href="' . esc_url( $query_string ) . '" class="' . esc_attr( $class ) . '">' . __( 'Not Completed', 'woocommerce-jetpack' ) . '</a>';
130
+ return $views;
131
+ }
132
+
133
+ /**
134
+ * filter_shop_order_multiple_statuses_not_completed_link.
135
+ *
136
+ * @version 2.5.7
137
+ * @since 2.5.7
138
+ */
139
+ function filter_shop_order_multiple_statuses_not_completed_link( $query ) {
140
+ if ( false !== strpos( $_SERVER['REQUEST_URI'], '/wp-admin/edit.php' ) && isset( $_GET['post_type'] ) && 'shop_order' === $_GET['post_type'] ) {
141
+ if ( current_user_can( 'edit_others_pages' ) ) {
142
+ if ( isset( $_GET['post_status'] ) && false !== strpos( $_GET['post_status'], ',' ) ) {
143
+ $post_statuses = explode( ',', $_GET['post_status'] );
144
+ // $query->set( 'post_status', $post_statuses );
145
+ $query->query['post_status'] = $post_statuses;
146
+ $query->query_vars['post_status'] = $post_statuses;
147
+ }
148
+ }
149
+ }
150
+ }
151
+
152
+ /**
153
+ * multiple_shop_order_statuses.
154
+ *
155
+ * @version 2.5.7
156
+ * @since 2.5.7
157
+ */
158
+ function multiple_shop_order_statuses( $type ) {
159
+ $checked_post_statuses = isset( $_GET['wcj_admin_filter_statuses'] ) ? $_GET['wcj_admin_filter_statuses'] : array();
160
+ $html = '';
161
+ $html .= ( 'checkboxes' === $type ) ?
162
+ '<span id="wcj_admin_filter_shop_order_statuses">' :
163
+ '<select multiple name="wcj_admin_filter_statuses[]" id="wcj_admin_filter_shop_order_statuses">';
164
+ $num_posts = wp_count_posts( 'shop_order', 'readable' );
165
+ foreach ( wc_get_order_statuses() as $status_id => $status_title ) {
166
+ $total_number = ( isset( $num_posts->{$status_id} ) ) ? $num_posts->{$status_id} : 0;
167
+ if ( $total_number > 0 ) {
168
+ $html .= ( 'checkboxes' === $type ) ?
169
+ '<input type="checkbox" name="wcj_admin_filter_statuses[]" value="' . $status_id . '"' . checked( in_array( $status_id, $checked_post_statuses ), true, false ) . '>' . $status_title . ' (' . $total_number . ') ' :
170
+ '<option value="' . $status_id . '"' . selected( in_array( $status_id, $checked_post_statuses ), true, false ) . '>' . $status_title . ' (' . $total_number . ') ' . '</option>';
171
+ }
172
+ }
173
+ $html .= ( 'checkboxes' === $type ) ?
174
+ '</span>' :
175
+ '</select>';
176
+ return $html;
177
+ }
178
+
179
+ /**
180
+ * add_shop_order_multiple_statuses.
181
+ *
182
+ * @version 2.5.7
183
+ * @since 2.5.7
184
+ */
185
+ function add_shop_order_multiple_statuses( $post_type, $which ) {
186
+ if ( 'shop_order' === $post_type ) {
187
+ echo $this->multiple_shop_order_statuses( get_option( 'wcj_order_admin_list_multiple_status_filter', 'no' ) );
188
+ }
189
+ }
190
+
191
+ /**
192
+ * filter_shop_order_multiple_statuses.
193
+ *
194
+ * @version 2.5.7
195
+ * @since 2.5.7
196
+ */
197
+ function filter_shop_order_multiple_statuses( $query ) {
198
+ if ( false !== strpos( $_SERVER['REQUEST_URI'], '/wp-admin/edit.php' ) && isset( $_GET['post_type'] ) && 'shop_order' === $_GET['post_type'] ) {
199
+ if ( current_user_can( 'edit_others_pages' ) ) {
200
+ if ( isset( $_GET['wcj_admin_filter_statuses'] ) ) {
201
+ $post_statuses = $_GET['wcj_admin_filter_statuses'];
202
+ // $query->set( 'post_status', $post_statuses );
203
+ $query->query['post_status'] = $post_statuses;
204
+ $query->query_vars['post_status'] = $post_statuses;
205
+ }
206
+ }
207
  }
208
  }
209
 
239
  return $options;
240
  }
241
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
242
  /**
243
  * Filter the orders in admin based on options
244
  *
270
  }
271
  }
272
 
273
+ /**
274
+ * rearange_order_columns.
275
+ *
276
+ * @version 2.5.7
277
+ * @version 2.5.7
278
+ */
279
+ function rearange_order_columns( $columns ) {
280
+ $reordered_columns = get_option( 'wcj_order_admin_list_columns_order', $this->get_orders_default_columns_in_order() );
281
+ $reordered_columns = explode( PHP_EOL, $reordered_columns );
282
+ $reordered_columns_result = array();
283
+ if ( ! empty( $reordered_columns ) ) {
284
+ foreach ( $reordered_columns as $column_id ) {
285
+ $column_id = str_replace( "\n", '', $column_id );
286
+ $column_id = str_replace( "\r", '', $column_id );
287
+ if ( '' != $column_id && isset( $columns[ $column_id ] ) ) {
288
+ $reordered_columns_result[ $column_id ] = $columns[ $column_id ];
289
+ unset( $columns[ $column_id ] );
290
+ }
291
+ }
292
+ }
293
+ return array_merge( $reordered_columns_result, $columns );
294
+ }
295
+
296
  /**
297
  * add_order_column.
298
  *
356
  $order->update_status( 'completed' );
357
  }
358
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
359
  /**
360
  * add_settings_hook.
361
  *
379
  /**
380
  * add_settings.
381
  *
382
+ * @version 2.5.7
383
  * @since 2.5.3
384
  */
385
  function add_settings() {
412
  'type' => 'sectionend',
413
  'id' => 'wcj_order_admin_currency_options',
414
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
415
  array(
416
  'title' => __( 'Orders Auto-Complete', 'woocommerce-jetpack' ),
417
  'type' => 'title',
431
  'id' => 'wcj_order_auto_complete_options',
432
  ),
433
  array(
434
+ 'title' => __( 'Admin Orders List Custom Columns', 'woocommerce-jetpack' ),
435
  'type' => 'title',
436
  'desc' => __( 'This section lets you add custom columns to WooCommerce orders list.', 'woocommerce-jetpack' ),
437
  'id' => 'wcj_orders_list_custom_columns_options',
454
  array( 'step' => '1', 'min' => '0', )
455
  ),
456
  ),
457
+ );
458
  $total_number = apply_filters( 'wcj_get_option_filter', 1, get_option( 'wcj_orders_list_custom_columns_total_number', 1 ) );
459
  for ( $i = 1; $i <= $total_number; $i++ ) {
460
  $settings = array_merge( $settings, array(
487
  'type' => 'sectionend',
488
  'id' => 'wcj_orders_list_custom_columns_options',
489
  ),
490
+ array(
491
+ 'title' => __( 'Admin Orders List Multiple Status', 'woocommerce-jetpack' ),
492
+ 'type' => 'title',
493
+ 'id' => 'wcj_order_admin_list_multiple_status_options',
494
+ ),
495
+ array(
496
+ 'title' => __( 'Multiple Status Filtering', 'woocommerce-jetpack' ),
497
+ 'id' => 'wcj_order_admin_list_multiple_status_filter',
498
+ 'default' => 'no',
499
+ 'type' => 'select',
500
+ 'options' => array(
501
+ 'no' => __( 'Do not add', 'woocommerce-jetpack' ),
502
+ 'multiple_select' => __( 'Add as multiple select', 'woocommerce-jetpack' ),
503
+ 'checkboxes' => __( 'Add as checkboxes', 'woocommerce-jetpack' ),
504
+ ),
505
+ ),
506
+ array(
507
+ 'title' => __( 'Hide Default Statuses Menu', 'woocommerce-jetpack' ),
508
+ 'desc' => __( 'Hide', 'woocommerce-jetpack' ),
509
+ 'id' => 'wcj_order_admin_list_hide_default_statuses_menu',
510
+ 'default' => 'no',
511
+ 'type' => 'checkbox',
512
+ ),
513
+ array(
514
+ 'title' => __( 'Add "Not Completed" Status Link to Default Statuses Menu', 'woocommerce-jetpack' ),
515
+ 'desc' => __( 'Add', 'woocommerce-jetpack' ),
516
+ 'id' => 'wcj_order_admin_list_multiple_status_not_completed_link',
517
+ 'default' => 'no',
518
+ 'type' => 'checkbox',
519
+ ),
520
+ array(
521
+ 'type' => 'sectionend',
522
+ 'id' => 'wcj_order_admin_list_multiple_status_options',
523
+ ),
524
+ array(
525
+ 'title' => __( 'Admin Orders List Columns Order', 'woocommerce-jetpack' ),
526
+ 'type' => 'title',
527
+ 'id' => 'wcj_order_admin_list_columns_order_options',
528
+ ),
529
+ array(
530
+ 'title' => __( 'Columns Order', 'woocommerce-jetpack' ),
531
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
532
+ 'id' => 'wcj_order_admin_list_columns_order_enabled',
533
+ 'default' => 'no',
534
+ 'type' => 'checkbox',
535
+ ),
536
+ array(
537
+ 'id' => 'wcj_order_admin_list_columns_order',
538
+ 'desc_tip' => __( 'Default columns order', 'woocommerce-jetpack' ) . ':<br>' . str_replace( PHP_EOL, '<br>', $this->get_orders_default_columns_in_order() ),
539
+ 'default' => $this->get_orders_default_columns_in_order(),
540
+ 'type' => 'textarea',
541
+ 'css' => 'height:300px;',
542
+ ),
543
+ array(
544
+ 'type' => 'sectionend',
545
+ 'id' => 'wcj_order_admin_list_columns_order_options',
546
+ ),
547
  ) );
548
  return $settings;
549
  }
includes/class-wcj-payment-gateways-icons.php CHANGED
@@ -36,9 +36,9 @@ class WCJ_Payment_Gateways_Icons extends WCJ_Module {
36
  // compatibility with 2.3.0 or below
37
  $default_gateways = array( 'cod', 'cheque', 'bacs', 'mijireh_checkout', 'paypal' );
38
  foreach ( $default_gateways as $key ) {
39
- $depreciated_option = get_option( 'wcj_payment_gateways_icons_' . 'woocommerce_' . $key . '_icon', '' );
40
- if ( '' != $depreciated_option ) {
41
- update_option( 'wcj_gateways_icons_' . $key . '_icon', $depreciated_option );
42
  delete_option( 'wcj_payment_gateways_icons_' . 'woocommerce_' . $key . '_icon' );
43
  }
44
  }
36
  // compatibility with 2.3.0 or below
37
  $default_gateways = array( 'cod', 'cheque', 'bacs', 'mijireh_checkout', 'paypal' );
38
  foreach ( $default_gateways as $key ) {
39
+ $deprecated_option = get_option( 'wcj_payment_gateways_icons_' . 'woocommerce_' . $key . '_icon', '' );
40
+ if ( '' != $deprecated_option ) {
41
+ update_option( 'wcj_gateways_icons_' . $key . '_icon', $deprecated_option );
42
  delete_option( 'wcj_payment_gateways_icons_' . 'woocommerce_' . $key . '_icon' );
43
  }
44
  }
includes/class-wcj-pdf-invoicing.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack PDF Invoicing class.
6
  *
7
- * @version 2.5.6
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.6
21
  */
22
  public function __construct() {
23
 
@@ -44,6 +44,11 @@ class WCJ_PDF_Invoicing extends WCJ_Module {
44
  add_action( 'init', array( $this, 'catch_args' ) );
45
  add_action( 'init', array( $this, 'generate_pdf_on_init' ) );
46
 
 
 
 
 
 
47
  $this->the_pdf_invoicing_report_tool = include_once( 'pdf-invoices/class-wcj-pdf-invoicing-report-tool.php' );
48
 
49
  $invoice_types = wcj_get_enabled_invoice_types();
@@ -62,6 +67,161 @@ class WCJ_PDF_Invoicing extends WCJ_Module {
62
  }
63
  }
64
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  /**
66
  * create_invoices_report_tool.
67
  *
@@ -123,11 +283,15 @@ class WCJ_PDF_Invoicing extends WCJ_Module {
123
 
124
  /**
125
  * create_document.
 
 
126
  */
127
  function create_document( $order_id, $invoice_type ) {
128
  if ( false == wcj_is_invoice_created( $order_id, $invoice_type ) ) {
129
  wcj_create_invoice( $order_id, $invoice_type );
 
130
  }
 
131
  }
132
 
133
  /**
4
  *
5
  * The WooCommerce Jetpack PDF Invoicing class.
6
  *
7
+ * @version 2.5.7
8
  * @author Algoritmika Ltd.
9
  */
10
 
17
  /**
18
  * Constructor.
19
  *
20
+ * @version 2.5.7
21
  */
22
  public function __construct() {
23
 
44
  add_action( 'init', array( $this, 'catch_args' ) );
45
  add_action( 'init', array( $this, 'generate_pdf_on_init' ) );
46
 
47
+ // Bulk actions
48
+ add_action( 'admin_footer-edit.php', array( $this, 'bulk_actions_pdfs_admin_footer' ) );
49
+ add_action( 'load-edit.php', array( $this, 'bulk_actions_pdfs' ) );
50
+ add_action( 'admin_notices', array( $this, 'bulk_actions_pdfs_notices' ) );
51
+
52
  $this->the_pdf_invoicing_report_tool = include_once( 'pdf-invoices/class-wcj-pdf-invoicing-report-tool.php' );
53
 
54
  $invoice_types = wcj_get_enabled_invoice_types();
67
  }
68
  }
69
 
70
+ /**
71
+ * Add extra bulk action options to generate/download documents
72
+ *
73
+ * Using Javascript until WordPress core fixes: http://core.trac.wordpress.org/ticket/16031
74
+ *
75
+ * @todo add "print" action
76
+ * @see https://www.skyverge.com/blog/add-custom-bulk-action/
77
+ * @version 2.5.7
78
+ * @since 2.5.7
79
+ */
80
+ function bulk_actions_pdfs_admin_footer() {
81
+ global $post_type;
82
+ if ( 'shop_order' == $post_type ) {
83
+ ?><script type="text/javascript"><?php
84
+ $invoice_types = wcj_get_enabled_invoice_types();
85
+ foreach ( $invoice_types as $invoice_type ) {
86
+ $key = $invoice_type['id'];
87
+ $title = $invoice_type['title'];
88
+ ?>jQuery(function() {
89
+ jQuery('<option>').val('generate_<?php echo $key; ?>').text('<?php echo __( 'Generate', 'woocommerce-jetpack' ) . ' ' . $title; ?>').appendTo('select[name="action"]');
90
+ jQuery('<option>').val('generate_<?php echo $key; ?>').text('<?php echo __( 'Generate', 'woocommerce-jetpack' ) . ' ' . $title; ?>').appendTo('select[name="action2"]');
91
+ });<?php
92
+ }
93
+ foreach ( $invoice_types as $invoice_type ) {
94
+ $key = $invoice_type['id'];
95
+ $title = $invoice_type['title'];
96
+ ?>jQuery(function() {
97
+ jQuery('<option>').val('download_<?php echo $key; ?>').text('<?php echo __( 'Download', 'woocommerce-jetpack' ) . ' ' . $title; ?>').appendTo('select[name="action"]');
98
+ jQuery('<option>').val('download_<?php echo $key; ?>').text('<?php echo __( 'Download', 'woocommerce-jetpack' ) . ' ' . $title; ?>').appendTo('select[name="action2"]');
99
+ });<?php
100
+ }
101
+ ?></script><?php
102
+ }
103
+ }
104
+
105
+ /**
106
+ * bulk_actions_pdfs_notices.
107
+ *
108
+ * @version 2.5.7
109
+ * @since 2.5.7
110
+ */
111
+ function bulk_actions_pdfs_notices() {
112
+ global $post_type, $pagenow;
113
+ if ( $pagenow == 'edit.php' && 'shop_order' == $post_type && isset( $_REQUEST['generated'] ) && (int) $_REQUEST['generated'] ) {
114
+ $message = sprintf( _n( 'Document generated.', '%s documents generated.', $_REQUEST['generated'] ), number_format_i18n( $_REQUEST['generated'] ) );
115
+ echo "<div class='updated'><p>{$message}</p></div>";
116
+ }
117
+ }
118
+
119
+ /**
120
+ * bulk_actions_pdfs.
121
+ *
122
+ * @version 2.5.7
123
+ * @since 2.5.7
124
+ */
125
+ function bulk_actions_pdfs() {
126
+
127
+ // Get the action
128
+ $wp_list_table = _get_list_table( 'WP_Posts_List_Table' );
129
+ $action = $wp_list_table->current_action();
130
+
131
+ // TODO: Security check
132
+ // check_admin_referer('bulk-posts');
133
+
134
+ // Validate the action
135
+ $action_exploded = explode( '_', $action, 2 );
136
+ if ( empty( $action_exploded ) || ! is_array( $action_exploded ) || 2 !== count( $action_exploded ) || ! in_array( $action_exploded[0], array( 'generate', 'download' ) ) ) {
137
+ return;
138
+ }
139
+ // Perform the action
140
+ $post_ids = $_GET['post'];
141
+ $the_action = $action_exploded[0];
142
+ $the_type = $action_exploded[1];
143
+ switch( $the_action ) {
144
+ case 'generate':
145
+ // TODO: Validate user permissions/capabilities
146
+ // if ( ! current_user_can( $post_type_object->cap->export_post, $post_id ) ) {
147
+ // wp_die( __( 'You are not allowed to export this post.' ) );
148
+ // }
149
+ $generated = 0;
150
+ foreach( $post_ids as $post_id ) {
151
+ if ( $this->create_document( $post_id, $the_type ) ) {
152
+ $generated++;
153
+ }
154
+ }
155
+ // Build the redirect url
156
+ $sendback = add_query_arg(
157
+ array(
158
+ 'post_type' => 'shop_order',
159
+ 'generated' => $generated,
160
+ 'generated_type' => $the_type,
161
+ 'generated_' . $the_type => 1,
162
+ 'ids' => join( ',', $post_ids ),
163
+ 'post_status' => $_GET['post_status'],
164
+ ),
165
+ $sendback
166
+ );
167
+ break;
168
+ case 'download':
169
+ $this->get_invoices_zip( $the_type, $post_ids );
170
+ exit();
171
+ default:
172
+ return;
173
+ }
174
+
175
+ // Redirect client
176
+ wp_redirect( esc_url_raw( $sendback ) );
177
+ exit();
178
+ }
179
+
180
+ /**
181
+ * get_invoices_zip.
182
+ *
183
+ * @version 2.5.7
184
+ * @since 2.5.7
185
+ */
186
+ function get_invoices_zip( $invoice_type_id, $post_ids ) {
187
+
188
+ $zip = new ZipArchive();
189
+ $zip_file_name = $invoice_type_id . '.zip';
190
+ $zip_file_path = sys_get_temp_dir() . '/' . $zip_file_name;
191
+ if ( file_exists( $zip_file_path ) ) {
192
+ unlink ( $zip_file_path );
193
+ }
194
+ if ( $zip->open( $zip_file_path, ZipArchive::CREATE ) !== TRUE ) {
195
+ return false;
196
+ }
197
+ foreach( $post_ids as $post_id ) {
198
+ if ( wcj_is_invoice_created( $post_id, $invoice_type_id ) ) {
199
+ $the_invoice = wcj_get_pdf_invoice( $post_id, $invoice_type_id );
200
+ $file_name = $the_invoice->get_pdf( 'F' );
201
+ $zip->addFile( $file_name, $the_invoice->get_file_name() );
202
+ }
203
+ }
204
+ $zip->close();
205
+
206
+ header( "Content-Type: application/octet-stream" );
207
+ header( "Content-Disposition: attachment; filename=" . urlencode( $zip_file_name ) );
208
+ header( "Content-Type: application/octet-stream" );
209
+ header( "Content-Type: application/download" );
210
+ header( "Content-Description: File Transfer" );
211
+ header( "Content-Length: " . filesize( $zip_file_path ) );
212
+ flush(); // this doesn't really matter.
213
+ if ( false !== ( $fp = fopen( $zip_file_path, "r" ) ) ) {
214
+ while ( ! feof( $fp ) ) {
215
+ echo fread( $fp, 65536 );
216
+ flush(); // this is essential for large downloads
217
+ }
218
+ fclose( $fp );
219
+ } else {
220
+ die( __( 'Unexpected error', 'woocommerce-jetpack' ) );
221
+ }
222
+ return true;
223
+ }
224
+
225
  /**
226
  * create_invoices_report_tool.
227
  *
283
 
284
  /**
285
  * create_document.
286
+ *
287
+ * @version 2.5.7
288
  */
289
  function create_document( $order_id, $invoice_type ) {
290
  if ( false == wcj_is_invoice_created( $order_id, $invoice_type ) ) {
291
  wcj_create_invoice( $order_id, $invoice_type );
292
+ return true;
293
  }
294
+ return false;
295
  }
296
 
297
  /**
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.5
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.3
23
  * @since 2.5.0
24
  */
25
  function __construct() {
@@ -38,7 +38,9 @@ class WCJ_Price_By_User_Role extends WCJ_Module {
38
  add_action( 'save_post_product', array( $this, 'save_meta_box' ), PHP_INT_MAX, 2 );
39
  }
40
  if ( ! is_admin() || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
41
- $this->add_hooks();
 
 
42
  }
43
  add_filter( 'wcj_save_meta_box_value', array( $this, 'save_meta_box_value' ), PHP_INT_MAX, 3 );
44
  add_action( 'admin_notices', array( $this, 'admin_notices' ) );
@@ -270,7 +272,7 @@ class WCJ_Price_By_User_Role extends WCJ_Module {
270
  /**
271
  * change_price_by_role.
272
  *
273
- * @version 2.5.3
274
  * @since 2.5.0
275
  */
276
  function change_price_by_role( $price, $_product ) {
@@ -291,7 +293,8 @@ class WCJ_Price_By_User_Role extends WCJ_Module {
291
  return $_product->$get_price_method();
292
  } elseif ( 'woocommerce_get_price' == $the_current_filter || 'woocommerce_variation_prices_price' == $the_current_filter ) {
293
  $sale_price_per_product = get_post_meta( $the_product_id, '_' . 'wcj_price_by_user_role_sale_price_' . $current_user_role, true );
294
- return ( '' != $sale_price_per_product && $sale_price_per_product < $regular_price_per_product ) ? $sale_price_per_product : $regular_price_per_product;
 
295
  } elseif ( 'woocommerce_get_regular_price' == $the_current_filter || 'wcj_price_by_user_role_regular_price_' == $the_current_filter ) {
296
  return $regular_price_per_product;
297
  } elseif ( 'woocommerce_get_sale_price' == $the_current_filter || 'woocommerce_variation_prices_sale_price' == $the_current_filter ) {
@@ -357,7 +360,7 @@ class WCJ_Price_By_User_Role extends WCJ_Module {
357
  /**
358
  * add_settings.
359
  *
360
- * @version 2.5.5
361
  * @since 2.5.0
362
  */
363
  function add_settings() {
@@ -393,6 +396,13 @@ class WCJ_Price_By_User_Role extends WCJ_Module {
393
  'id' => 'wcj_price_by_user_role_shipping_enabled',
394
  'default' => 'no',
395
  ),
 
 
 
 
 
 
 
396
  array(
397
  'type' => 'sectionend',
398
  'id' => 'wcj_price_by_user_role_options',
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
  /**
20
  * Constructor.
21
  *
22
+ * @version 2.5.7
23
  * @since 2.5.0
24
  */
25
  function __construct() {
38
  add_action( 'save_post_product', array( $this, 'save_meta_box' ), PHP_INT_MAX, 2 );
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 );
46
  add_action( 'admin_notices', array( $this, 'admin_notices' ) );
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 ) {
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 ) {
360
  /**
361
  * add_settings.
362
  *
363
+ * @version 2.5.7
364
  * @since 2.5.0
365
  */
366
  function add_settings() {
396
  'id' => 'wcj_price_by_user_role_shipping_enabled',
397
  'default' => 'no',
398
  ),
399
+ array(
400
+ 'title' => __( 'Search Engine Bots', 'woocommerce-jetpack' ),
401
+ 'desc' => __( 'Disable Price by User Role for Bots', 'woocommerce-jetpack' ),
402
+ 'id' => 'wcj_price_by_user_role_for_bots_disabled',
403
+ 'default' => 'no',
404
+ 'type' => 'checkbox',
405
+ ),
406
  array(
407
  'type' => 'sectionend',
408
  'id' => 'wcj_price_by_user_role_options',
includes/class-wcj-price-labels.php CHANGED
@@ -32,7 +32,7 @@ class WCJ_Price_Labels extends WCJ_Module {
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
- 'depreciated' => true,
36
  ),
37
  ), array( 'tools_dashboard_hook_priority' => PHP_INT_MAX ) );
38
 
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
 
includes/class-wcj-product-by-user.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Product by User class.
6
  *
7
- * @version 2.5.5
8
  * @since 2.5.2
9
  * @author Algoritmika Ltd.
10
  */
@@ -18,7 +18,7 @@ class WCJ_Product_By_User extends WCJ_Module {
18
  /**
19
  * Constructor.
20
  *
21
- * @version 2.5.5
22
  * @since 2.5.2
23
  */
24
  public function __construct() {
@@ -33,34 +33,77 @@ class WCJ_Product_By_User extends WCJ_Module {
33
 
34
  if ( $this->is_enabled() ) {
35
  if ( 'yes' === get_option( 'wcj_product_by_user_add_to_my_account', 'yes' ) ) {
36
- add_filter( 'woocommerce_account_menu_items', array( $this, 'add_my_products_tab_my_account_page' ) );
37
- add_action( 'woocommerce_account_content', array( $this, 'add_my_products_content_my_account_page' ) );
 
38
  }
39
  }
40
  }
41
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  /**
43
  * add_my_products_tab_my_account_page.
44
  *
45
- * @version 2.5.2
46
  * @since 2.5.2
47
  * @todo check if any user's products exist
48
  */
49
  function add_my_products_tab_my_account_page( $items ) {
50
- $items['wcj-my-products'] = __( 'My Products', 'woocommerce-jetpack' );
51
- return $items;
 
52
  }
53
 
54
  /**
55
  * add_my_products_content_my_account_page.
56
  *
57
- * @version 2.5.2
58
  * @since 2.5.2
59
  */
60
  function add_my_products_content_my_account_page() {
61
- if ( ! isset( $_GET['wcj-my-products'] ) ) {
62
  return;
63
- }
64
  $user_ID = get_current_user_id();
65
  if ( 0 == $user_ID ) {
66
  return;
@@ -108,7 +151,7 @@ class WCJ_Product_By_User extends WCJ_Module {
108
  }
109
  wp_reset_postdata();
110
  if ( 0 != count( $products ) ) {
111
- echo '<h2>' . __( 'My Products', 'woocommerce-jetpack' ) . '</h2>';
112
  $table_data = array();
113
  $table_data[] = array( '', __( 'Status', 'woocommerce-jetpack' ), __( 'Title', 'woocommerce-jetpack' ), __( 'Actions', 'woocommerce-jetpack' ) );
114
  $i = 0;
4
  *
5
  * The WooCommerce Jetpack Product by User class.
6
  *
7
+ * @version 2.5.7
8
  * @since 2.5.2
9
  * @author Algoritmika Ltd.
10
  */
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 2.5.7
22
  * @since 2.5.2
23
  */
24
  public function __construct() {
33
 
34
  if ( $this->is_enabled() ) {
35
  if ( 'yes' === get_option( 'wcj_product_by_user_add_to_my_account', 'yes' ) ) {
36
+ add_filter( 'woocommerce_account_menu_items', array( $this, 'add_my_products_tab_my_account_page' ) );
37
+ add_action( 'woocommerce_account_wcj-my-products_endpoint', array( $this, 'add_my_products_content_my_account_page' ) );
38
+ add_filter( 'the_title', array( $this, 'change_my_products_endpoint_title' ) );
39
  }
40
  }
41
  }
42
 
43
+ /*
44
+ * Change endpoint title.
45
+ *
46
+ * @version 2.5.7
47
+ * @since 2.5.7
48
+ * @param string $title
49
+ * @return string
50
+ * @see https://github.com/woocommerce/woocommerce/wiki/2.6-Tabbed-My-Account-page
51
+ */
52
+ function change_my_products_endpoint_title( $title ) {
53
+ global $wp_query;
54
+ $is_endpoint = isset( $wp_query->query_vars['wcj-my-products'] );
55
+ if ( $is_endpoint && ! is_admin() && is_main_query() && in_the_loop() && is_account_page() ) {
56
+ // New page title.
57
+ $title = __( 'Products', 'woocommerce-jetpack' );
58
+ remove_filter( 'the_title', array( $this, 'change_my_products_endpoint_title' ) );
59
+ }
60
+ return $title;
61
+ }
62
+
63
+ /**
64
+ * Custom help to add new items into an array after a selected item.
65
+ *
66
+ * @version 2.5.7
67
+ * @since 2.5.7
68
+ * @param array $items
69
+ * @param array $new_items
70
+ * @param string $after
71
+ * @return array
72
+ * @see https://github.com/woocommerce/woocommerce/wiki/2.6-Tabbed-My-Account-page
73
+ */
74
+ function insert_after_helper( $items, $new_items, $after ) {
75
+ // Search for the item position and +1 since is after the selected item key.
76
+ $position = array_search( $after, array_keys( $items ) ) + 1;
77
+ // Insert the new item.
78
+ $array = array_slice( $items, 0, $position, true );
79
+ $array += $new_items;
80
+ $array += array_slice( $items, $position, count( $items ) - $position, true );
81
+ return $array;
82
+ }
83
+
84
  /**
85
  * add_my_products_tab_my_account_page.
86
  *
87
+ * @version 2.5.7
88
  * @since 2.5.2
89
  * @todo check if any user's products exist
90
  */
91
  function add_my_products_tab_my_account_page( $items ) {
92
+ // $items['wcj-my-products'] = __( 'My Products', 'woocommerce-jetpack' );
93
+ $new_items = array( 'wcj-my-products' => __( 'Products', 'woocommerce-jetpack' ) );
94
+ return $this->insert_after_helper( $items, $new_items, 'orders' );
95
  }
96
 
97
  /**
98
  * add_my_products_content_my_account_page.
99
  *
100
+ * @version 2.5.7
101
  * @since 2.5.2
102
  */
103
  function add_my_products_content_my_account_page() {
104
+ /* if ( ! isset( $_GET['wcj-my-products'] ) ) {
105
  return;
106
+ } */
107
  $user_ID = get_current_user_id();
108
  if ( 0 == $user_ID ) {
109
  return;
151
  }
152
  wp_reset_postdata();
153
  if ( 0 != count( $products ) ) {
154
+ // echo '<h2>' . __( 'My Products', 'woocommerce-jetpack' ) . '</h2>';
155
  $table_data = array();
156
  $table_data[] = array( '', __( 'Status', 'woocommerce-jetpack' ), __( 'Title', 'woocommerce-jetpack' ), __( 'Actions', 'woocommerce-jetpack' ) );
157
  $i = 0;
includes/class-wcj-product-info.php CHANGED
@@ -15,13 +15,13 @@ if ( ! class_exists( 'WCJ_Product_Info' ) ) :
15
  class WCJ_Product_Info extends WCJ_Module {
16
 
17
  /**
18
- * search_and_replace_depreciated_shortcodes.
19
  *
20
  * @version 2.4.0
21
  * @since 2.4.0
22
  */
23
- private function search_and_replace_depreciated_shortcodes( $data ) {
24
- $search_and_replace_depreciated_shortcodes_array = array(
25
  '%sku%' => '[wcj_product_sku]',
26
  'wcj_sku' => 'wcj_product_sku',
27
  '%title%' => '[wcj_product_title]',
@@ -86,8 +86,8 @@ class WCJ_Product_Info extends WCJ_Module {
86
  'wcj_available_variations' => 'wcj_product_available_variations',
87
  );
88
  return str_replace(
89
- array_keys( $search_and_replace_depreciated_shortcodes_array ),
90
- array_values( $search_and_replace_depreciated_shortcodes_array ),
91
  $data
92
  );
93
  }
@@ -168,12 +168,12 @@ class WCJ_Product_Info extends WCJ_Module {
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' );
171
- $the_product_info = $this->search_and_replace_depreciated_shortcodes( $the_product_info );
172
  $this->apply_product_info_short_codes( $the_product_info, false );
173
  }
174
  else if ( array_key_exists( $the_action_name, $this->product_info_on_single_filters_array ) ) {
175
  $the_product_info = get_option( 'wcj_product_info_on_single' );
176
- $the_product_info = $this->search_and_replace_depreciated_shortcodes( $the_product_info );
177
  $this->apply_product_info_short_codes( $the_product_info, false );
178
  }
179
  }
@@ -199,7 +199,7 @@ class WCJ_Product_Info extends WCJ_Module {
199
  for ( $i = 1; $i <= apply_filters( 'wcj_get_option_filter', 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 ;
201
  $the_product_info = get_option( $field_id );
202
- $the_product_info = $this->search_and_replace_depreciated_shortcodes( $the_product_info );
203
  $this->apply_product_info_short_codes( $the_product_info, true );
204
  }
205
  }
15
  class WCJ_Product_Info extends WCJ_Module {
16
 
17
  /**
18
+ * search_and_replace_deprecated_shortcodes.
19
  *
20
  * @version 2.4.0
21
  * @since 2.4.0
22
  */
23
+ private function search_and_replace_deprecated_shortcodes( $data ) {
24
+ $search_and_replace_deprecated_shortcodes_array = array(
25
  '%sku%' => '[wcj_product_sku]',
26
  'wcj_sku' => 'wcj_product_sku',
27
  '%title%' => '[wcj_product_title]',
86
  'wcj_available_variations' => 'wcj_product_available_variations',
87
  );
88
  return str_replace(
89
+ array_keys( $search_and_replace_deprecated_shortcodes_array ),
90
+ array_values( $search_and_replace_deprecated_shortcodes_array ),
91
  $data
92
  );
93
  }
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' );
171
+ $the_product_info = $this->search_and_replace_deprecated_shortcodes( $the_product_info );
172
  $this->apply_product_info_short_codes( $the_product_info, false );
173
  }
174
  else if ( array_key_exists( $the_action_name, $this->product_info_on_single_filters_array ) ) {
175
  $the_product_info = get_option( 'wcj_product_info_on_single' );
176
+ $the_product_info = $this->search_and_replace_deprecated_shortcodes( $the_product_info );
177
  $this->apply_product_info_short_codes( $the_product_info, false );
178
  }
179
  }
199
  for ( $i = 1; $i <= apply_filters( 'wcj_get_option_filter', 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 ;
201
  $the_product_info = get_option( $field_id );
202
+ $the_product_info = $this->search_and_replace_deprecated_shortcodes( $the_product_info );
203
  $this->apply_product_info_short_codes( $the_product_info, true );
204
  }
205
  }
includes/class-wcj-product-listings.php CHANGED
@@ -195,10 +195,10 @@ class WCJ_Product_Listings extends WCJ_Module {
195
  public function filter_subcategories( $args ) {
196
  if ( is_shop() ) {
197
  $args['exclude'] = get_option( 'wcj_product_listings_exclude_cats_on_shop' );
198
- $args['hide_empty'] = ( 'yes' === get_option( 'wcj_product_listings_hide_empty_cats_on_shop' ) ) ? 1 : 0; // depreciated?
199
  } else {
200
  $args['exclude'] = get_option( 'wcj_product_listings_exclude_cats_on_archives' );
201
- $args['hide_empty'] = ( 'yes' === get_option( 'wcj_product_listings_hide_empty_cats_on_archives' ) ) ? 1 : 0; // depreciated?
202
  }
203
  return $args;
204
  }
195
  public function filter_subcategories( $args ) {
196
  if ( is_shop() ) {
197
  $args['exclude'] = get_option( 'wcj_product_listings_exclude_cats_on_shop' );
198
+ $args['hide_empty'] = ( 'yes' === get_option( 'wcj_product_listings_hide_empty_cats_on_shop' ) ) ? 1 : 0; // deprecated?
199
  } else {
200
  $args['exclude'] = get_option( 'wcj_product_listings_exclude_cats_on_archives' );
201
+ $args['hide_empty'] = ( 'yes' === get_option( 'wcj_product_listings_hide_empty_cats_on_archives' ) ) ? 1 : 0; // deprecated?
202
  }
203
  return $args;
204
  }
includes/class-wcj-product-tabs.php CHANGED
@@ -623,7 +623,7 @@ class WCJ_Product_Tabs extends WCJ_Module {
623
  ),
624
  array(
625
  'title' => '',
626
- 'desc' => __( 'Comma separated PRODUCT IDs to HIDE this tab', 'woocommerce-jetpack' ) . '. <strong><em>' . __( 'Depreciated', 'woocommerce-jetpack' ) . '!</em></strong>',
627
  'desc_tip' => __( 'To hide this tab from some products, enter product IDs here.', 'woocommerce-jetpack' ),
628
  'id' => 'wcj_custom_product_tabs_title_global_hide_in_product_ids_' . $i,
629
  'default' => '',
@@ -632,7 +632,7 @@ class WCJ_Product_Tabs extends WCJ_Module {
632
  ),
633
  array(
634
  'title' => '',
635
- 'desc' => __( 'Comma separated PRODUCT IDs to SHOW this tab', 'woocommerce-jetpack' ) . '. <strong><em>' . __( 'Depreciated', 'woocommerce-jetpack' ) . '!</em></strong>',
636
  'desc_tip' => __( 'To show this tab only for some products, enter product IDs here.', 'woocommerce-jetpack' ),
637
  'id' => 'wcj_custom_product_tabs_title_global_show_in_product_ids_' . $i,
638
  'default' => '',
@@ -641,7 +641,7 @@ class WCJ_Product_Tabs extends WCJ_Module {
641
  ),
642
  array(
643
  'title' => '',
644
- 'desc' => __( 'Comma separated CATEGORY IDs to HIDE this tab', 'woocommerce-jetpack' ) . '. <strong><em>' . __( 'Depreciated', 'woocommerce-jetpack' ) . '!</em></strong>',
645
  'desc_tip' => __( 'To hide this tab from some categories, enter category IDs here.', 'woocommerce-jetpack' ),
646
  'id' => 'wcj_custom_product_tabs_title_global_hide_in_cats_ids_' . $i,
647
  'default' => '',
@@ -650,7 +650,7 @@ class WCJ_Product_Tabs extends WCJ_Module {
650
  ),
651
  array(
652
  'title' => '',
653
- 'desc' => __( 'Comma separated CATEGORY IDs to SHOW this tab', 'woocommerce-jetpack' ) . '. <strong><em>' . __( 'Depreciated', 'woocommerce-jetpack' ) . '!</em></strong>',
654
  'desc_tip' => __( 'To show this tab only for some categories, enter category IDs here.', 'woocommerce-jetpack' ),
655
  'id' => 'wcj_custom_product_tabs_title_global_show_in_cats_ids_' . $i,
656
  'default' => '',
623
  ),
624
  array(
625
  'title' => '',
626
+ 'desc' => __( 'Comma separated PRODUCT IDs to HIDE this tab', 'woocommerce-jetpack' ) . '. <strong><em>' . __( 'Deprecated', 'woocommerce-jetpack' ) . '!</em></strong>',
627
  'desc_tip' => __( 'To hide this tab from some products, enter product IDs here.', 'woocommerce-jetpack' ),
628
  'id' => 'wcj_custom_product_tabs_title_global_hide_in_product_ids_' . $i,
629
  'default' => '',
632
  ),
633
  array(
634
  'title' => '',
635
+ 'desc' => __( 'Comma separated PRODUCT IDs to SHOW this tab', 'woocommerce-jetpack' ) . '. <strong><em>' . __( 'Deprecated', 'woocommerce-jetpack' ) . '!</em></strong>',
636
  'desc_tip' => __( 'To show this tab only for some products, enter product IDs here.', 'woocommerce-jetpack' ),
637
  'id' => 'wcj_custom_product_tabs_title_global_show_in_product_ids_' . $i,
638
  'default' => '',
641
  ),
642
  array(
643
  'title' => '',
644
+ 'desc' => __( 'Comma separated CATEGORY IDs to HIDE this tab', 'woocommerce-jetpack' ) . '. <strong><em>' . __( 'Deprecated', 'woocommerce-jetpack' ) . '!</em></strong>',
645
  'desc_tip' => __( 'To hide this tab from some categories, enter category IDs here.', 'woocommerce-jetpack' ),
646
  'id' => 'wcj_custom_product_tabs_title_global_hide_in_cats_ids_' . $i,
647
  'default' => '',
650
  ),
651
  array(
652
  'title' => '',
653
+ 'desc' => __( 'Comma separated CATEGORY IDs to SHOW this tab', 'woocommerce-jetpack' ) . '. <strong><em>' . __( 'Deprecated', 'woocommerce-jetpack' ) . '!</em></strong>',
654
  'desc_tip' => __( 'To show this tab only for some categories, enter category IDs here.', 'woocommerce-jetpack' ),
655
  'id' => 'wcj_custom_product_tabs_title_global_show_in_cats_ids_' . $i,
656
  'default' => '',
includes/class-wcj-products-xml.php ADDED
@@ -0,0 +1,312 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WooCommerce Jetpack Products XML
4
+ *
5
+ * The WooCommerce Jetpack Products XML class.
6
+ *
7
+ * @version 2.5.7
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
14
+
15
+ if ( ! class_exists( 'WCJ_Products_XML' ) ) :
16
+
17
+ class WCJ_Products_XML extends WCJ_Module {
18
+
19
+ /**
20
+ * Constructor.
21
+ *
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' );
29
+ $this->desc = __( 'WooCommerce products XML feed.', 'woocommerce-jetpack' );
30
+ $this->link = 'http://booster.io/features/woocommerce-products-xml-feed/';
31
+ parent::__construct();
32
+
33
+ if ( $this->is_enabled() ) {
34
+ add_action( 'init', array( $this, 'schedule_the_events' ) );
35
+ add_action( 'admin_init', array( $this, 'schedule_the_events' ) );
36
+ add_action( 'admin_init', array( $this, 'wcj_create_products_xml' ) );
37
+ add_filter( 'cron_schedules', array( $this, 'cron_add_custom_intervals' ) );
38
+ $total_number = apply_filters( 'wcj_get_option_filter', 1, get_option( 'wcj_products_xml_total_files', 1 ) );
39
+ for ( $i = 1; $i <= $total_number; $i++ ) {
40
+ add_action( 'wcj_create_products_xml_hook_' . $i, array( $this, 'create_products_xml_cron' ), PHP_INT_MAX, 2 );
41
+ }
42
+ }
43
+ }
44
+
45
+ /**
46
+ * On an early action hook, check if the hook is scheduled - if not, schedule it.
47
+ *
48
+ * @version 2.5.7
49
+ * @since 2.5.7
50
+ */
51
+ function schedule_the_events() {
52
+ $update_intervals = array(
53
+ 'minutely',
54
+ 'hourly',
55
+ 'twicedaily',
56
+ 'daily',
57
+ 'weekly',
58
+ );
59
+ $total_number = apply_filters( 'wcj_get_option_filter', 1, get_option( 'wcj_products_xml_total_files', 1 ) );
60
+ for ( $i = 1; $i <= $total_number; $i++ ) {
61
+ $event_hook = 'wcj_create_products_xml_hook_' . $i;
62
+ if ( 'yes' === get_option( 'wcj_products_xml_enabled_' . $i, 'yes' ) ) {
63
+ $selected_interval = apply_filters( 'wcj_get_option_filter', 'weekly', get_option( 'wcj_create_products_xml_period_' . $i, 'weekly' ) );
64
+ foreach ( $update_intervals as $interval ) {
65
+ $event_timestamp = wp_next_scheduled( $event_hook, array( $interval, $i ) );
66
+ if ( $selected_interval === $interval ) {
67
+ update_option( 'wcj_create_products_xml_cron_time_' . $i, $event_timestamp );
68
+ }
69
+ if ( ! $event_timestamp && $selected_interval === $interval ) {
70
+ wp_schedule_event( time(), $selected_interval, $event_hook, array( $selected_interval, $i ) );
71
+ } elseif ( $event_timestamp && $selected_interval !== $interval ) {
72
+ wp_unschedule_event( $event_timestamp, $event_hook, array( $interval, $i ) );
73
+ }
74
+ }
75
+ } else { // unschedule all events
76
+ update_option( 'wcj_create_products_xml_cron_time_' . $i, '' );
77
+ foreach ( $update_intervals as $interval ) {
78
+ $event_timestamp = wp_next_scheduled( $event_hook, array( $interval, $i ) );
79
+ if ( $event_timestamp ) {
80
+ wp_unschedule_event( $event_timestamp, $event_hook, array( $interval, $i ) );
81
+ }
82
+ }
83
+ }
84
+ }
85
+ }
86
+
87
+ /**
88
+ * cron_add_custom_intervals.
89
+ *
90
+ * @version 2.5.7
91
+ * @since 2.5.7
92
+ */
93
+ function cron_add_custom_intervals( $schedules ) {
94
+ $schedules['weekly'] = array(
95
+ 'interval' => 604800,
96
+ 'display' => __( 'Once Weekly', 'woocommerce-jetpack' )
97
+ );
98
+ $schedules['minutely'] = array(
99
+ 'interval' => 60,
100
+ 'display' => __( 'Once a Minute', 'woocommerce-jetpack' )
101
+ );
102
+ return $schedules;
103
+ }
104
+
105
+ /**
106
+ * admin_notice__success.
107
+ *
108
+ * @version 2.5.7
109
+ * @since 2.5.7
110
+ */
111
+ function admin_notice__success() {
112
+ echo '<div class="notice notice-success is-dismissible"><p>' . __( 'Products XML file created successfully.', 'woocommerce-jetpack' ) . '</p></div>';
113
+ }
114
+
115
+ /**
116
+ * admin_notice__error.
117
+ *
118
+ * @version 2.5.7
119
+ * @since 2.5.7
120
+ */
121
+ function admin_notice__error() {
122
+ echo '<div class="notice notice-error"><p>' . __( 'An error has occurred while creating products XML file.', 'woocommerce-jetpack' ) . '</p></div>';
123
+ }
124
+
125
+ /**
126
+ * wcj_create_products_xml.
127
+ *
128
+ * @version 2.5.7
129
+ * @since 2.5.7
130
+ */
131
+ function wcj_create_products_xml() {
132
+ if ( isset( $_GET['wcj_create_products_xml'] ) ) {
133
+ $result = $this->create_products_xml( $_GET['wcj_create_products_xml'] );
134
+ add_action( 'admin_notices', array( $this, ( ( false !== $result ) ? 'admin_notice__success' : 'admin_notice__error' ) ) );
135
+ }
136
+ }
137
+
138
+ /**
139
+ * create_products_xml_cron.
140
+ *
141
+ * @version 2.5.7
142
+ * @since 2.5.7
143
+ */
144
+ function create_products_xml_cron( $interval, $file_num ) {
145
+ $this->create_products_xml( $file_num );
146
+ die();
147
+ }
148
+
149
+ /**
150
+ * create_products_xml.
151
+ *
152
+ * @version 2.5.7
153
+ * @since 2.5.7
154
+ */
155
+ function create_products_xml( $file_num ) {
156
+ $xml_items = '';
157
+ $xml_header_template = get_option( 'wcj_products_xml_header_' . $file_num, '' );
158
+ $xml_footer_template = get_option( 'wcj_products_xml_footer_' . $file_num, '' );
159
+ $xml_item_template = get_option( 'wcj_products_xml_item_' . $file_num, '' );
160
+ $offset = 0;
161
+ $block_size = 256;
162
+ while( true ) {
163
+ $args = array(
164
+ 'post_type' => 'product',
165
+ 'post_status' => 'publish',
166
+ 'posts_per_page' => $block_size,
167
+ 'orderby' => 'date',
168
+ 'order' => 'DESC',
169
+ 'offset' => $offset,
170
+ );
171
+ $loop = new WP_Query( $args );
172
+ if ( ! $loop->have_posts() ) {
173
+ break;
174
+ }
175
+ while ( $loop->have_posts() ) {
176
+ $loop->the_post();
177
+ $xml_items .= str_replace( '&', '&amp;', html_entity_decode( do_shortcode( $xml_item_template ) ) ); // todo
178
+ }
179
+ $offset += $block_size;
180
+ }
181
+ wp_reset_postdata();
182
+ return file_put_contents(
183
+ ABSPATH . get_option( 'wcj_products_xml_file_path_' . $file_num, ( ( 1 == $file_num ) ? 'products.xml' : 'products_' . $file_num . '.xml' ) ),
184
+ $xml_header_template . $xml_items . $xml_footer_template
185
+ );
186
+ }
187
+
188
+ /**
189
+ * get_settings.
190
+ *
191
+ * @version 2.5.7
192
+ * @since 2.5.7
193
+ */
194
+ function get_settings() {
195
+ $settings = array(
196
+ array(
197
+ 'title' => __( 'Options', 'woocommerce-jetpack' ),
198
+ 'type' => 'title',
199
+ 'id' => 'wcj_products_xml_options',
200
+ ),
201
+ array(
202
+ 'title' => __( 'Total Files', 'woocommerce-jetpack' ),
203
+ 'id' => 'wcj_products_xml_total_files',
204
+ 'default' => 1,
205
+ 'type' => 'custom_number',
206
+ 'desc_tip' => __( 'Press Save changes after you change this number.', 'woocommerce-jetpack' ),
207
+ 'desc' => apply_filters( 'get_wc_jetpack_plus_message', '', 'desc' ),
208
+ 'custom_attributes' => is_array( apply_filters( 'get_wc_jetpack_plus_message', '', 'readonly' ) ) ?
209
+ apply_filters( 'get_wc_jetpack_plus_message', '', 'readonly' ) : array( 'step' => '1', 'min' => '1', ),
210
+ ),
211
+ array(
212
+ 'type' => 'sectionend',
213
+ 'id' => 'wcj_products_xml_options',
214
+ ),
215
+ );
216
+ $total_number = apply_filters( 'wcj_get_option_filter', 1, get_option( 'wcj_products_xml_total_files', 1 ) );
217
+ for ( $i = 1; $i <= $total_number; $i++ ) {
218
+ $products_xml_cron_desc = '';
219
+ if ( $this->is_enabled() ) {
220
+ if ( '' != get_option( 'wcj_create_products_xml_cron_time_' . $i, '' ) ) {
221
+ $scheduled_time_diff = get_option( 'wcj_create_products_xml_cron_time_' . $i, '' ) - time();
222
+ if ( $scheduled_time_diff > 0 ) {
223
+ $products_xml_cron_desc = '<em>' . sprintf( __( '%s seconds till next update.', 'woocommerce-jetpack' ), $scheduled_time_diff ) . '</em>';
224
+ }
225
+ }
226
+ $products_xml_cron_desc .= '<br><a href="' . add_query_arg( 'wcj_create_products_xml', $i ) . '">' . __( 'Create Now', 'woocommerce-jetpack' ) . '</a>';
227
+ }
228
+ $default_file_name = ( ( 1 == $i ) ? 'products.xml' : 'products_' . $i . '.xml' );
229
+ $settings = array_merge( $settings, array(
230
+ array(
231
+ 'title' => __( 'XML File', 'woocommerce-jetpack' ) . ' #' . $i,
232
+ 'type' => 'title',
233
+ 'id' => 'wcj_products_xml_options_' . $i,
234
+ ),
235
+ array(
236
+ 'title' => __( 'Enabled', 'woocommerce-jetpack' ),
237
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
238
+ 'id' => 'wcj_products_xml_enabled_' . $i,
239
+ 'default' => 'yes',
240
+ 'type' => 'checkbox',
241
+ ),
242
+ array(
243
+ 'title' => __( 'XML Header', 'woocommerce-jetpack' ),
244
+ 'id' => 'wcj_products_xml_header_' . $i,
245
+ 'default' => '<?xml version = "1.0" encoding = "utf-8" ?>' . PHP_EOL . '<root>' . PHP_EOL,
246
+ 'type' => 'custom_textarea',
247
+ 'css' => 'width:66%;min-width:300px;min-height:150px;',
248
+ ),
249
+ array(
250
+ 'title' => __( 'XML Item', 'woocommerce-jetpack' ),
251
+ 'desc' => sprintf(
252
+ __( 'You can use shortcodes here. Please take a look at <a target="_blank" href="%s">Booster\'s products shortcodes</a>.', 'woocommerce-jetpack' ),
253
+ 'http://booster.io/category/shortcodes/products-shortcodes/'
254
+ ),
255
+ 'id' => 'wcj_products_xml_item_' . $i,
256
+ 'default' =>
257
+ '<item>' . PHP_EOL .
258
+ "\t" . '<name>[wcj_product_title]</name>' . PHP_EOL .
259
+ "\t" . '<link>[wcj_product_url]</link>' . PHP_EOL .
260
+ "\t" . '<price>[wcj_product_price hide_currency="yes"]</price>' . PHP_EOL .
261
+ "\t" . '<image>[wcj_product_image_url image_size="full"]</image>' . PHP_EOL .
262
+ "\t" . '<category_full>[wcj_product_categories_names]</category_full>' . PHP_EOL .
263
+ "\t" . '<category_link>[wcj_product_categories_urls]</category_link>' . PHP_EOL .
264
+ '</item>' . PHP_EOL,
265
+ 'type' => 'custom_textarea',
266
+ 'css' => 'width:66%;min-width:300px;min-height:300px;',
267
+ ),
268
+ array(
269
+ 'title' => __( 'XML Footer', 'woocommerce-jetpack' ),
270
+ 'id' => 'wcj_products_xml_footer_' . $i,
271
+ 'default' => '</root>',
272
+ 'type' => 'custom_textarea',
273
+ 'css' => 'width:66%;min-width:300px;min-height:150px;',
274
+ ),
275
+ array(
276
+ 'title' => __( 'XML File Path and Name', 'woocommerce-jetpack' ),
277
+ 'desc_tip' => __( 'Path on server:', 'woocommerce-jetpack' ) . ' ' . ABSPATH . get_option( 'wcj_products_xml_file_path_' . $i, $default_file_name ),
278
+ 'desc' => __( 'URL:', 'woocommerce-jetpack' ) . ' ' . '<a target="_blank" href="' . site_url() . '/' . get_option( 'wcj_products_xml_file_path_' . $i, $default_file_name ) . '">' . site_url() . '/' . get_option( 'wcj_products_xml_file_path_' . $i, $default_file_name ) . '</a>', // todo
279
+ 'id' => 'wcj_products_xml_file_path_' . $i,
280
+ 'default' => $default_file_name,
281
+ 'type' => 'text',
282
+ 'css' => 'width:66%;min-width:300px;',
283
+ ),
284
+ array(
285
+ 'title' => __( 'Update Period', 'woocommerce-jetpack' ),
286
+ 'desc' => $products_xml_cron_desc,
287
+ 'id' => 'wcj_create_products_xml_period_' . $i,
288
+ 'default' => 'weekly',
289
+ 'type' => 'select',
290
+ 'options' => array(
291
+ 'minutely' => __( 'Update Every Minute', 'woocommerce-jetpack' ),
292
+ 'hourly' => __( 'Update Hourly', 'woocommerce-jetpack' ),
293
+ 'twicedaily' => __( 'Update Twice Daily', 'woocommerce-jetpack' ),
294
+ 'daily' => __( 'Update Daily', 'woocommerce-jetpack' ),
295
+ 'weekly' => __( 'Update Weekly', 'woocommerce-jetpack' ),
296
+ ),
297
+ 'desc_tip' => __( 'Possible update periods are: every minute, hourly, twice daily, daily and weekly.', 'woocommerce-jetpack' ) . ' ' . apply_filters( 'get_wc_jetpack_plus_message', '', 'desc_no_link' ),
298
+ 'custom_attributes' => apply_filters( 'get_wc_jetpack_plus_message', '', 'disabled' ),
299
+ ),
300
+ array(
301
+ 'type' => 'sectionend',
302
+ 'id' => 'wcj_products_xml_options_' . $i,
303
+ ),
304
+ ) );
305
+ }
306
+ return $this->add_standard_settings( $settings );
307
+ }
308
+ }
309
+
310
+ endif;
311
+
312
+ return new WCJ_Products_XML();
includes/class-wcj-purchase-data.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Purchase Data class.
6
  *
7
- * @version 2.5.6
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -18,7 +18,7 @@ class WCJ_Purchase_Data extends WCJ_Module {
18
  /**
19
  * Constructor.
20
  *
21
- * @version 2.4.8
22
  */
23
  function __construct() {
24
 
@@ -34,7 +34,7 @@ class WCJ_Purchase_Data extends WCJ_Module {
34
  add_action( 'save_post_product', array( $this, 'save_meta_box' ), PHP_INT_MAX, 2 );
35
 
36
  if ( 'yes' === get_option( 'wcj_purchase_data_custom_columns_profit', 'no' ) ) {
37
- add_filter( 'manage_edit-shop_order_columns', array( $this, 'add_order_columns' ), PHP_INT_MAX );
38
  add_action( 'manage_shop_order_posts_custom_column', array( $this, 'render_order_columns' ), PHP_INT_MAX );
39
  }
40
  }
4
  *
5
  * The WooCommerce Jetpack Purchase Data class.
6
  *
7
+ * @version 2.5.7
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 2.5.7
22
  */
23
  function __construct() {
24
 
34
  add_action( 'save_post_product', array( $this, 'save_meta_box' ), PHP_INT_MAX, 2 );
35
 
36
  if ( 'yes' === get_option( 'wcj_purchase_data_custom_columns_profit', 'no' ) ) {
37
+ add_filter( 'manage_edit-shop_order_columns', array( $this, 'add_order_columns' ), PHP_INT_MAX - 2 );
38
  add_action( 'manage_shop_order_posts_custom_column', array( $this, 'render_order_columns' ), PHP_INT_MAX );
39
  }
40
  }
includes/class-wcj-reports.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Reports class.
6
  *
7
- * @version 2.5.3
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -308,16 +308,22 @@ class WCJ_Reports extends WCJ_Module {
308
  /*
309
  * Add the settings.
310
  *
311
- * @version 2.4.7
312
  */
313
  function get_settings() {
314
- $reports = array(
315
  array(
316
  'title' => __( 'Product Sales', 'woocommerce-jetpack' ),
317
  'tab' => 'orders',
318
  'tab_title' => 'Orders',
319
  'report' => 'booster_products_sales',
320
  ),
 
 
 
 
 
 
321
  array(
322
  'title' => __( 'Monthly Sales (with currency conversions)', 'woocommerce-jetpack' ),
323
  'tab' => 'orders',
@@ -362,21 +368,24 @@ class WCJ_Reports extends WCJ_Module {
362
  'id' => 'wcj_reports_more_options'
363
  ),
364
  );
365
- // $button_style = "background: red; border-color: red; box-shadow: 0 1px 0 red; text-shadow: 0 -1px 1px #a00,1px 0 1px #a00,0 1px 1px #a00,-1px 0 1px #a00;";
366
- $button_style = '';
367
- foreach ( $reports as $report ) {
368
- $settings = array_merge( $settings, array(
369
- array(
370
- // 'title' => 'WooCommerce > Reports > ' . $report['tab_title'] . ' > ' . $report['title'],
371
- 'title' => '[' . $report['tab_title'] . '] ' . $report['title'],
372
- 'id' => 'wcj_' . $report['report'] . '_link',
373
- 'type' => 'custom_link',
374
- 'link' => '<a class="button-primary" '
375
- . 'style="' . $button_style . '" '
376
- . 'href="' . get_admin_url() . 'admin.php?page=wc-reports&tab=' . $report['tab'] . '&report=' . $report['report'] . '">'
377
- . __( 'View report', 'woocommerce-jetpack' ) . '</a>',
378
- ),
379
- ) );
 
 
 
380
  }
381
  $settings = array_merge( $settings, array(
382
  array(
4
  *
5
  * The WooCommerce Jetpack Reports class.
6
  *
7
+ * @version 2.5.7
8
  * @author Algoritmika Ltd.
9
  */
10
 
308
  /*
309
  * Add the settings.
310
  *
311
+ * @version 2.5.7
312
  */
313
  function get_settings() {
314
+ $reports_and_settings = array(
315
  array(
316
  'title' => __( 'Product Sales', 'woocommerce-jetpack' ),
317
  'tab' => 'orders',
318
  'tab_title' => 'Orders',
319
  'report' => 'booster_products_sales',
320
  ),
321
+ array(
322
+ 'id' => 'wcj_reports_products_sales_count_variations',
323
+ 'desc' => __( 'Count variations in product sales report', 'woocommerce-jetpack' ),
324
+ 'type' => 'checkbox',
325
+ 'default' => 'no',
326
+ ),
327
  array(
328
  'title' => __( 'Monthly Sales (with currency conversions)', 'woocommerce-jetpack' ),
329
  'tab' => 'orders',
368
  'id' => 'wcj_reports_more_options'
369
  ),
370
  );
371
+ $button_style = "background: orange; border-color: orange; box-shadow: 0 1px 0 orange; text-shadow: 0 -1px 1px orange,1px 0 1px orange,0 1px 1px orange,-1px 0 1px orange;";
372
+ foreach ( $reports_and_settings as $report ) {
373
+ if ( isset( $report['report'] ) ) {
374
+ $settings = array_merge( $settings, array(
375
+ array(
376
+ // 'title' => 'WooCommerce > Reports > ' . $report['tab_title'] . ' > ' . $report['title'],
377
+ 'title' => '[' . $report['tab_title'] . '] ' . $report['title'],
378
+ 'id' => 'wcj_' . $report['report'] . '_link',
379
+ 'type' => 'custom_link',
380
+ 'link' => '<a class="button-primary" '
381
+ . 'style="' . $button_style . '" '
382
+ . 'href="' . get_admin_url() . 'admin.php?page=wc-reports&tab=' . $report['tab'] . '&report=' . $report['report'] . '">'
383
+ . __( 'View report', 'woocommerce-jetpack' ) . '</a>',
384
+ ),
385
+ ) );
386
+ } else {
387
+ $settings = array_merge( $settings, array ( $report ) );
388
+ }
389
  }
390
  $settings = array_merge( $settings, array(
391
  array(
includes/class-wcj-shipping-calculator.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Shipping Calculator class.
6
  *
7
- * @version 2.4.6
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -17,7 +17,7 @@ class WCJ_Shipping_Calculator extends WCJ_Module {
17
  /**
18
  * Constructor.
19
  *
20
- * @version 2.4.6
21
  */
22
  public function __construct() {
23
 
@@ -32,9 +32,29 @@ class WCJ_Shipping_Calculator extends WCJ_Module {
32
  add_filter( 'woocommerce_shipping_calculator_enable_postcode', array( $this, 'enable_postcode' ) );
33
  add_action( 'wp_head', array( $this, 'add_custom_styles' ) );
34
  // add_filter( 'gettext', array( $this, 'change_labels' ), 20, 3 );
 
 
 
35
  }
36
  }
37
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  /**
39
  * change_labels.
40
  */
@@ -100,12 +120,10 @@ class WCJ_Shipping_Calculator extends WCJ_Module {
100
  /**
101
  * get_settings.
102
  *
103
- * @version 2.4.6
104
  */
105
  function get_settings() {
106
-
107
  $settings = array(
108
-
109
  array(
110
  'title' => __( 'Shipping Calculator Options', 'woocommerce-jetpack' ),
111
  'type' => 'title',
@@ -151,21 +169,43 @@ class WCJ_Shipping_Calculator extends WCJ_Module {
151
  'noclick' => __( 'Make non clickable', 'woocommerce-jetpack' ),
152
  ),
153
  ),
154
- /*array(
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
  'title' => __( 'Label for Calculate Shipping', 'woocommerce-jetpack' ),
156
  'id' => 'wcj_shipping_calculator_label_calculate_shipping',
157
- 'default' => '',
158
  'type' => 'text',
 
 
159
  ),
160
  array(
161
  'title' => __( 'Label for Update Totals', 'woocommerce-jetpack' ),
162
  'id' => 'wcj_shipping_calculator_label_update_totals',
163
- 'default' => '',
164
  'type' => 'text',
165
- ),*/
 
 
166
  array(
167
  'type' => 'sectionend',
168
- 'id' => 'wcj_shipping_calculator_options',
169
  ),
170
  );
171
  return $this->add_standard_settings( $settings );
4
  *
5
  * The WooCommerce Jetpack Shipping Calculator class.
6
  *
7
+ * @version 2.5.7
8
  * @author Algoritmika Ltd.
9
  */
10
 
17
  /**
18
  * Constructor.
19
  *
20
+ * @version 2.5.7
21
  */
22
  public function __construct() {
23
 
32
  add_filter( 'woocommerce_shipping_calculator_enable_postcode', array( $this, 'enable_postcode' ) );
33
  add_action( 'wp_head', array( $this, 'add_custom_styles' ) );
34
  // add_filter( 'gettext', array( $this, 'change_labels' ), 20, 3 );
35
+ if ( 'yes' === apply_filters( 'wcj_get_option_filter', 'no', get_option( 'wcj_shipping_calculator_labels_enabled', 'no' ) ) ) {
36
+ add_action( 'wp_enqueue_scripts', array( $this, 'change_labels' ) );
37
+ }
38
  }
39
  }
40
 
41
+ /**
42
+ * change_labels.
43
+ *
44
+ * @version 2.5.7
45
+ * @since 2.5.7
46
+ */
47
+ function change_labels() {
48
+ if ( function_exists( 'is_cart' ) && is_cart() ) {
49
+ wp_enqueue_style( 'wcj-shipping-calculator', wcj_plugin_url() . '/includes/css/wcj-shipping-calculator.css', array(), WCJ()->version );
50
+ wp_enqueue_script( 'wcj-shipping-calculator-js', wcj_plugin_url() . '/includes/js/wcj-shipping-calculator.js', array( 'jquery' ), WCJ()->version, true );
51
+ wp_localize_script( 'wcj-shipping-calculator-js', 'alg_object', array(
52
+ 'calculate_shipping_label' => get_option( 'wcj_shipping_calculator_label_calculate_shipping', '' ),
53
+ 'update_totals_label' => get_option( 'wcj_shipping_calculator_label_update_totals', '' ),
54
+ ) );
55
+ }
56
+ }
57
+
58
  /**
59
  * change_labels.
60
  */
120
  /**
121
  * get_settings.
122
  *
123
+ * @version 2.5.7
124
  */
125
  function get_settings() {
 
126
  $settings = array(
 
127
  array(
128
  'title' => __( 'Shipping Calculator Options', 'woocommerce-jetpack' ),
129
  'type' => 'title',
169
  'noclick' => __( 'Make non clickable', 'woocommerce-jetpack' ),
170
  ),
171
  ),
172
+ array(
173
+ 'type' => 'sectionend',
174
+ 'id' => 'wcj_shipping_calculator_options',
175
+ ),
176
+ array(
177
+ 'title' => __( 'Labels Options', 'woocommerce-jetpack' ),
178
+ 'type' => 'title',
179
+ 'id' => 'wcj_shipping_calculator_labels_options',
180
+ ),
181
+ array(
182
+ 'title' => __( 'Labels', 'woocommerce-jetpack' ),
183
+ 'desc' => __( 'Enable Section', 'woocommerce-jetpack' ),
184
+ 'id' => 'wcj_shipping_calculator_labels_enabled',
185
+ 'default' => 'no',
186
+ 'type' => 'checkbox',
187
+ 'desc_tip' => apply_filters( 'get_wc_jetpack_plus_message', '', 'desc' ),
188
+ 'custom_attributes' => apply_filters( 'get_wc_jetpack_plus_message', '', 'disabled' ),
189
+ ),
190
+ array(
191
  'title' => __( 'Label for Calculate Shipping', 'woocommerce-jetpack' ),
192
  'id' => 'wcj_shipping_calculator_label_calculate_shipping',
193
+ 'default' => __( 'Calculate Shipping', 'woocommerce-jetpack' ),
194
  'type' => 'text',
195
+ 'desc_tip' => apply_filters( 'get_wc_jetpack_plus_message', '', 'desc_no_link' ),
196
+ 'custom_attributes' => apply_filters( 'get_wc_jetpack_plus_message', '', 'readonly' ),
197
  ),
198
  array(
199
  'title' => __( 'Label for Update Totals', 'woocommerce-jetpack' ),
200
  'id' => 'wcj_shipping_calculator_label_update_totals',
201
+ 'default' => __( 'Update Totals', 'woocommerce-jetpack' ),
202
  'type' => 'text',
203
+ 'desc_tip' => apply_filters( 'get_wc_jetpack_plus_message', '', 'desc_no_link' ),
204
+ 'custom_attributes' => apply_filters( 'get_wc_jetpack_plus_message', '', 'readonly' ),
205
+ ),
206
  array(
207
  'type' => 'sectionend',
208
+ 'id' => 'wcj_shipping_calculator_labels_options',
209
  ),
210
  );
211
  return $this->add_standard_settings( $settings );
includes/class-wcj-wholesale-price.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Wholesale Price class.
6
  *
7
- * @version 2.5.6
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  * @todo per variation;
@@ -51,7 +51,7 @@ class WCJ_Wholesale_Price extends WCJ_Module {
51
  /**
52
  * add_discount_info_to_cart_page.
53
  *
54
- * @version 2.5.0
55
  */
56
  function add_discount_info_to_cart_page( $price_html, $cart_item, $cart_item_key ) {
57
 
@@ -59,12 +59,16 @@ class WCJ_Wholesale_Price extends WCJ_Module {
59
  $the_quantity = ( 'yes' === get_option( 'wcj_wholesale_price_use_total_cart_quantity', 'no' ) )
60
  ? WC()->cart->cart_contents_count
61
  : $cart_item['quantity'];
62
- $discount = $this->get_discount_by_quantity( $the_quantity, $cart_item['product_id'] );
63
  if ( 0 != $discount ) {
64
  $discount_type = ( wcj_is_product_wholesale_enabled_per_product( $cart_item['product_id'] ) )
65
  ? get_post_meta( $cart_item['product_id'], '_' . 'wcj_wholesale_price_discount_type', true )
66
  : get_option( 'wcj_wholesale_price_discount_type', 'percent' );
67
- if ( 'fixed' === $discount_type ) {
 
 
 
 
68
  $discount = wc_price( $discount );
69
  } else {
70
  $discount = $discount . '%';
@@ -72,7 +76,7 @@ class WCJ_Wholesale_Price extends WCJ_Module {
72
  $old_price_html = wc_price( $cart_item['wcj_wholesale_price_old'] );
73
  $wholesale_price_html = get_option( 'wcj_wholesale_price_show_info_on_cart_format' );
74
  $wholesale_price_html = str_replace(
75
- array( '%old_price%', '%price%', '%discount_value%', '%discount_percent%' ), // '%discount_percent%' is depreciated
76
  array( $old_price_html, $price_html, $discount, $discount ),
77
  $wholesale_price_html
78
  );
@@ -130,16 +134,17 @@ class WCJ_Wholesale_Price extends WCJ_Module {
130
  /**
131
  * get_wholesale_price.
132
  *
133
- * @version 2.5.0
134
  */
135
  private function get_wholesale_price( $price, $quantity, $product_id ) {
136
  $discount = $this->get_discount_by_quantity( $quantity, $product_id );
137
  $discount_type = ( wcj_is_product_wholesale_enabled_per_product( $product_id ) )
138
  ? get_post_meta( $product_id, '_' . 'wcj_wholesale_price_discount_type', true )
139
  : get_option( 'wcj_wholesale_price_discount_type', 'percent' );
140
- if ( 'percent' === $discount_type ) {
141
- $discount_koef = 1.0 - ( $discount / 100.0 );
142
- return $price * $discount_koef;
 
143
  } else {
144
  $discounted_price = $price - $discount;
145
  return ( $discounted_price >= 0 ) ? $discounted_price : 0;
@@ -235,11 +240,20 @@ class WCJ_Wholesale_Price extends WCJ_Module {
235
  /**
236
  * get_meta_box_options.
237
  *
238
- * @version 2.5.5
239
  * @since 2.5.0
240
  */
241
  function get_meta_box_options() {
242
  $product_id = get_the_ID();
 
 
 
 
 
 
 
 
 
243
  $options = array(
244
  array(
245
  'name' => 'wcj_wholesale_price_per_product_enabled',
@@ -255,11 +269,9 @@ class WCJ_Wholesale_Price extends WCJ_Module {
255
  'name' => 'wcj_wholesale_price_discount_type',
256
  'default' => 'percent',
257
  'type' => 'select',
258
- 'options' => array(
259
- 'percent' => __( 'Percent', 'woocommerce-jetpack' ),
260
- 'fixed' => __( 'Fixed', 'woocommerce-jetpack' ),
261
- ),
262
  'title' => __( 'Discount Type', 'woocommerce-jetpack' ),
 
263
  ),
264
  array(
265
  'name' => 'wcj_wholesale_price_levels_number',
@@ -287,7 +299,7 @@ class WCJ_Wholesale_Price extends WCJ_Module {
287
  'name' => 'wcj_wholesale_price_level_discount_' . $i,
288
  'default' => 0,
289
  'type' => 'price',
290
- 'title' => __( 'Level', 'woocommerce-jetpack' ) . ' #' . $i . ' ' . __( 'Discount', 'woocommerce-jetpack' ),
291
  ),
292
  ) );
293
  }
@@ -355,7 +367,7 @@ class WCJ_Wholesale_Price extends WCJ_Module {
355
  /**
356
  * add_settings.
357
  *
358
- * @version 2.5.6
359
  * @since 2.5.5
360
  */
361
  function add_settings() {
@@ -466,7 +478,7 @@ class WCJ_Wholesale_Price extends WCJ_Module {
466
  'id' => 'wcj_wholesale_price_level_discount_percent_' . $i, // mislabeled - should be 'wcj_wholesale_price_level_discount_'
467
  'default' => 0,
468
  'type' => 'number',
469
- 'custom_attributes' => array('step' => '0.0001', 'min' => '0', ),
470
  );
471
  }
472
  $settings[] = array(
@@ -522,7 +534,7 @@ class WCJ_Wholesale_Price extends WCJ_Module {
522
  'id' => 'wcj_wholesale_price_level_discount_percent_' . $user_role_key . '_' . $i, // mislabeled - should be 'wcj_wholesale_price_level_discount_'
523
  'default' => 0,
524
  'type' => 'number',
525
- 'custom_attributes' => array('step' => '0.0001', 'min' => '0', ),
526
  ),
527
  ) );
528
  }
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;
51
  /**
52
  * add_discount_info_to_cart_page.
53
  *
54
+ * @version 2.5.7
55
  */
56
  function add_discount_info_to_cart_page( $price_html, $cart_item, $cart_item_key ) {
57
 
59
  $the_quantity = ( 'yes' === get_option( 'wcj_wholesale_price_use_total_cart_quantity', 'no' ) )
60
  ? WC()->cart->cart_contents_count
61
  : $cart_item['quantity'];
62
+ $discount = $this->get_discount_by_quantity( $the_quantity, $cart_item['product_id'] );
63
  if ( 0 != $discount ) {
64
  $discount_type = ( wcj_is_product_wholesale_enabled_per_product( $cart_item['product_id'] ) )
65
  ? get_post_meta( $cart_item['product_id'], '_' . 'wcj_wholesale_price_discount_type', true )
66
  : get_option( 'wcj_wholesale_price_discount_type', 'percent' );
67
+ if ( 'price_directly' === $discount_type ) {
68
+ $_product = wc_get_product( $cart_item['product_id'] );
69
+ $discount = wc_price( $_product->get_price() - $discount );
70
+ }
71
+ elseif ( 'fixed' === $discount_type ) {
72
  $discount = wc_price( $discount );
73
  } else {
74
  $discount = $discount . '%';
76
  $old_price_html = wc_price( $cart_item['wcj_wholesale_price_old'] );
77
  $wholesale_price_html = get_option( 'wcj_wholesale_price_show_info_on_cart_format' );
78
  $wholesale_price_html = str_replace(
79
+ array( '%old_price%', '%price%', '%discount_value%', '%discount_percent%' ), // '%discount_percent%' is deprecated
80
  array( $old_price_html, $price_html, $discount, $discount ),
81
  $wholesale_price_html
82
  );
134
  /**
135
  * get_wholesale_price.
136
  *
137
+ * @version 2.5.7
138
  */
139
  private function get_wholesale_price( $price, $quantity, $product_id ) {
140
  $discount = $this->get_discount_by_quantity( $quantity, $product_id );
141
  $discount_type = ( wcj_is_product_wholesale_enabled_per_product( $product_id ) )
142
  ? get_post_meta( $product_id, '_' . 'wcj_wholesale_price_discount_type', true )
143
  : get_option( 'wcj_wholesale_price_discount_type', 'percent' );
144
+ if ( 'price_directly' === $discount_type ) {
145
+ return ( 0 != $discount ) ? apply_filters( 'wcj_get_wholesale_price', $discount, $product_id ) : $price;
146
+ } elseif ( 'percent' === $discount_type ) {
147
+ return $price * ( 1.0 - ( $discount / 100.0 ) );
148
  } else {
149
  $discounted_price = $price - $discount;
150
  return ( $discounted_price >= 0 ) ? $discounted_price : 0;
240
  /**
241
  * get_meta_box_options.
242
  *
243
+ * @version 2.5.7
244
  * @since 2.5.0
245
  */
246
  function get_meta_box_options() {
247
  $product_id = get_the_ID();
248
+ $_product = wc_get_product( $product_id );
249
+ $discount_type_options = array(
250
+ 'percent' => __( 'Percent', 'woocommerce-jetpack' ),
251
+ 'fixed' => __( 'Fixed', 'woocommerce-jetpack' ),
252
+ 'price_directly' => __( 'Price directly', 'woocommerce-jetpack' ),
253
+ );
254
+ if ( $_product->is_type( 'variable' ) ) {
255
+ unset( $discount_type_options['price_directly'] );
256
+ }
257
  $options = array(
258
  array(
259
  'name' => 'wcj_wholesale_price_per_product_enabled',
269
  'name' => 'wcj_wholesale_price_discount_type',
270
  'default' => 'percent',
271
  'type' => 'select',
272
+ 'options' => $discount_type_options,
 
 
 
273
  'title' => __( 'Discount Type', 'woocommerce-jetpack' ),
274
+ // 'tooltip' => __( '\'Price directly\' option is only available for simple (i.e. non variable) product type.', 'woocommerce-jetpack' ),
275
  ),
276
  array(
277
  'name' => 'wcj_wholesale_price_levels_number',
299
  'name' => 'wcj_wholesale_price_level_discount_' . $i,
300
  'default' => 0,
301
  'type' => 'price',
302
+ 'title' => __( 'Level', 'woocommerce-jetpack' ) . ' #' . $i . ' ' . ( 'price_directly' === get_post_meta( $product_id, '_' . 'wcj_wholesale_price_discount_type', true ) ? __( 'Price', 'woocommerce-jetpack' ) : __( 'Discount', 'woocommerce-jetpack' ) ),
303
  ),
304
  ) );
305
  }
367
  /**
368
  * add_settings.
369
  *
370
+ * @version 2.5.7
371
  * @since 2.5.5
372
  */
373
  function add_settings() {
478
  'id' => 'wcj_wholesale_price_level_discount_percent_' . $i, // mislabeled - should be 'wcj_wholesale_price_level_discount_'
479
  'default' => 0,
480
  'type' => 'number',
481
+ 'custom_attributes' => array('step' => '0.0001', /* 'min' => '0', */ ),
482
  );
483
  }
484
  $settings[] = array(
534
  'id' => 'wcj_wholesale_price_level_discount_percent_' . $user_role_key . '_' . $i, // mislabeled - should be 'wcj_wholesale_price_level_discount_'
535
  'default' => 0,
536
  'type' => 'number',
537
+ 'custom_attributes' => array('step' => '0.0001', /* 'min' => '0', */ ),
538
  ),
539
  ) );
540
  }
includes/classes/class-wcj-module.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Module class.
6
  *
7
- * @version 2.5.5
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -190,7 +190,7 @@ if ( ! class_exists( 'WCJ_Module' ) ) :
190
  /**
191
  * create_meta_box.
192
  *
193
- * @since 2.5.5
194
  */
195
  function create_meta_box() {
196
  $current_post_id = get_the_ID();
@@ -240,7 +240,7 @@ if ( ! class_exists( 'WCJ_Module' ) ) :
240
  }
241
  switch ( $option['type'] ) {
242
  case 'price':
243
- $field_html = '<input class="short wc_input_price" type="number" step="0.0001"' . $input_ending;
244
  break;
245
  case 'date':
246
  $field_html = '<input class="input-text" display="date" type="text"' . $input_ending;
@@ -427,9 +427,9 @@ if ( ! class_exists( 'WCJ_Module' ) ) :
427
  $tool_desc = $tool_data['desc'];
428
  $additional_style_html = '';
429
  $additional_info_html = '';
430
- if ( isset( $tool_data['depreciated'] ) && true === $tool_data['depreciated'] ) {
431
  $additional_style_html = 'color:gray;font-style:italic;';
432
- $additional_info_html = ' - ' . __( 'Depreciated', 'woocommerce-jetpack' );
433
  }
434
  echo '<tr>';
435
  echo '<td style="' . $additional_style_html . '">' . $tool_title . $additional_info_html . '</td>';
4
  *
5
  * The WooCommerce Jetpack Module class.
6
  *
7
+ * @version 2.5.7
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
190
  /**
191
  * create_meta_box.
192
  *
193
+ * @since 2.5.7
194
  */
195
  function create_meta_box() {
196
  $current_post_id = get_the_ID();
240
  }
241
  switch ( $option['type'] ) {
242
  case 'price':
243
+ $field_html = '<input class="short wc_input_price" type="number" step="' . apply_filters( 'wcj_get_meta_box_options_type_price_step', '0.0001' ) . '"' . $input_ending;
244
  break;
245
  case 'date':
246
  $field_html = '<input class="input-text" display="date" type="text"' . $input_ending;
427
  $tool_desc = $tool_data['desc'];
428
  $additional_style_html = '';
429
  $additional_info_html = '';
430
+ if ( isset( $tool_data['deprecated'] ) && true === $tool_data['deprecated'] ) {
431
  $additional_style_html = 'color:gray;font-style:italic;';
432
+ $additional_info_html = ' - ' . __( 'Deprecated', 'woocommerce-jetpack' );
433
  }
434
  echo '<tr>';
435
  echo '<td style="' . $additional_style_html . '">' . $tool_title . $additional_info_html . '</td>';
includes/css/wcj-shipping-calculator.css ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * wcj-shipping-calculator.
3
+ *
4
+ * @version 2.5.7
5
+ * @since 2.5.7
6
+ */
7
+
8
+ a.shipping-calculator-button { visibility: hidden; }
9
+ button[name=calc_shipping] { visibility: hidden; }
includes/functions/wcj-functions.php CHANGED
@@ -4,10 +4,42 @@
4
  *
5
  * The WooCommerce Jetpack Functions.
6
  *
7
- * @version 2.5.6
8
  * @author Algoritmika Ltd.
9
  */
10
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  if ( ! function_exists( 'wcj_get_currency_exchange_rate_product_base_currency' ) ) {
12
  /**
13
  * wcj_get_currency_exchange_rate_product_base_currency.
@@ -842,26 +874,52 @@ if ( ! function_exists( 'wcj_is_user_role' ) ) {
842
  }
843
  }
844
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
845
  /**
846
  * validate_VAT.
847
  *
848
- * @return mixed: bool on successful checking (can be true or false), null otherwise
 
849
  */
850
  if ( ! function_exists( 'validate_VAT' ) ) {
851
  function validate_VAT( $country_code, $vat_number ) {
852
  try {
853
- $client = new SoapClient(
854
- 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl',
855
- array( 'exceptions' => true )
856
- );
857
-
858
- $result = $client->checkVat( array(
859
- 'countryCode' => $country_code,
860
- 'vatNumber' => $vat_number,
861
- ) );
862
-
863
- return ( isset( $result->valid ) ) ? $result->valid : null;
864
-
 
865
  } catch( Exception $exception ) {
866
  return null;
867
  }
4
  *
5
  * The WooCommerce Jetpack Functions.
6
  *
7
+ * @version 2.5.7
8
  * @author Algoritmika Ltd.
9
  */
10
 
11
+ if ( ! function_exists( 'wcj_get_product_image_url' ) ) {
12
+ /**
13
+ * wcj_get_product_image_url.
14
+ *
15
+ * @version 2.5.7
16
+ * @since 2.5.7
17
+ * @todo placeholder
18
+ */
19
+ function wcj_get_product_image_url( $product_id, $image_size = 'shop_thumbnail' ) {
20
+ if ( has_post_thumbnail( $product_id ) ) {
21
+ $image_url = get_the_post_thumbnail_url( $product_id, $image_size );
22
+ } elseif ( ( $parent_id = wp_get_post_parent_id( $product_id ) ) && has_post_thumbnail( $parent_id ) ) {
23
+ $image_url = get_the_post_thumbnail_url( $parent_id, $image_size );
24
+ } else {
25
+ $image_url = '';
26
+ }
27
+ return $image_url;
28
+ }
29
+ }
30
+
31
+ if ( ! function_exists( 'wcj_is_bot' ) ) {
32
+ /**
33
+ * wcj_is_bot.
34
+ *
35
+ * @version 2.5.7
36
+ * @since 2.5.6
37
+ */
38
+ function wcj_is_bot() {
39
+ return ( isset( $_SERVER['HTTP_USER_AGENT'] ) && preg_match( '/Google-Structured-Data-Testing-Tool|bot|crawl|slurp|spider/i', $_SERVER['HTTP_USER_AGENT'] ) ) ? true : false;
40
+ }
41
+ }
42
+
43
  if ( ! function_exists( 'wcj_get_currency_exchange_rate_product_base_currency' ) ) {
44
  /**
45
  * wcj_get_currency_exchange_rate_product_base_currency.
874
  }
875
  }
876
 
877
+ /**
878
+ * validate_vat_no_soap.
879
+ *
880
+ * @version 2.5.7
881
+ * @since 2.5.7
882
+ * @return mixed: bool on successful checking (can be true or false), null otherwise
883
+ */
884
+ if ( ! function_exists( 'validate_vat_no_soap' ) ) {
885
+ function validate_vat_no_soap( $country_code, $vat_number ) {
886
+ $api_url = "http://ec.europa.eu/taxation_customs/vies/viesquer.do?ms=" . $country_code . "&vat=" . $vat_number;
887
+ if ( ini_get( 'allow_url_fopen' ) ) {
888
+ $response = file_get_contents( $api_url );
889
+ } elseif ( function_exists( 'curl_version' ) ) {
890
+ $curl = curl_init( $api_url );
891
+ curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );
892
+ $response = curl_exec( $curl );
893
+ curl_close( $curl );
894
+ } else {
895
+ return null;
896
+ }
897
+ return ( false !== strpos( $response, '="validStyle"' ) ) ? true : false;
898
+ }
899
+ }
900
+
901
  /**
902
  * validate_VAT.
903
  *
904
+ * @version 2.5.7
905
+ * @return mixed: bool on successful checking (can be true or false), null otherwise
906
  */
907
  if ( ! function_exists( 'validate_VAT' ) ) {
908
  function validate_VAT( $country_code, $vat_number ) {
909
  try {
910
+ if ( class_exists( 'SoapClient' ) ) {
911
+ $client = new SoapClient(
912
+ 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl',
913
+ array( 'exceptions' => true )
914
+ );
915
+ $result = $client->checkVat( array(
916
+ 'countryCode' => $country_code,
917
+ 'vatNumber' => $vat_number,
918
+ ) );
919
+ return ( isset( $result->valid ) ) ? $result->valid : null;
920
+ } else {
921
+ return validate_vat_no_soap( $country_code, $vat_number );
922
+ }
923
  } catch( Exception $exception ) {
924
  return null;
925
  }
includes/functions/wcj-html-functions.php CHANGED
@@ -4,20 +4,23 @@
4
  *
5
  * The WooCommerce Jetpack HTML functions.
6
  *
7
- * @version 1.0.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
11
  if ( ! defined( 'ABSPATH' ) ) exit;
12
 
13
- /**
14
- * wcj_get_table_html.
15
- */
16
  if ( ! function_exists( 'wcj_get_table_html' ) ) {
 
 
 
 
 
17
  function wcj_get_table_html( $data, $args = array() ) {
18
  $defaults = array(
19
  'table_class' => '',
20
  'table_style' => '',
 
21
  'table_heading_type' => 'horizontal',
22
  'columns_classes' => array(),
23
  'columns_styles' => array(),
@@ -27,11 +30,12 @@ if ( ! function_exists( 'wcj_get_table_html' ) ) {
27
  extract( $args );
28
  $table_class = ( '' == $table_class ) ? '' : ' class="' . $table_class . '"';
29
  $table_style = ( '' == $table_style ) ? '' : ' style="' . $table_style . '"';
 
30
  $html = '';
31
  $html .= '<table' . $table_class . $table_style . '>';
32
  $html .= '<tbody>';
33
  foreach( $data as $row_number => $row ) {
34
- $html .= '<tr>';
35
  foreach( $row as $column_number => $value ) {
36
  $th_or_td = ( ( 0 === $row_number && 'horizontal' === $table_heading_type ) || ( 0 === $column_number && 'vertical' === $table_heading_type ) ) ? 'th' : 'td';
37
  $column_class = ( ! empty( $columns_classes ) && isset( $columns_classes[ $column_number ] ) ) ? ' class="' . $columns_classes[ $column_number ] . '"' : '';
@@ -49,10 +53,10 @@ if ( ! function_exists( 'wcj_get_table_html' ) ) {
49
  }
50
  }
51
 
52
- /**
53
- * wcj_get_option_html.
54
- */
55
  if ( ! function_exists( 'wcj_get_option_html' ) ) {
 
 
 
56
  function wcj_get_option_html( $option_type, $option_id, $option_value, $option_description, $option_class ) {
57
 
58
  if ( 'checkbox' === $option_type )
4
  *
5
  * The WooCommerce Jetpack HTML functions.
6
  *
7
+ * @version 2.5.7
8
  * @author Algoritmika Ltd.
9
  */
10
 
11
  if ( ! defined( 'ABSPATH' ) ) exit;
12
 
 
 
 
13
  if ( ! function_exists( 'wcj_get_table_html' ) ) {
14
+ /**
15
+ * wcj_get_table_html.
16
+ *
17
+ * @version 2.5.7
18
+ */
19
  function wcj_get_table_html( $data, $args = array() ) {
20
  $defaults = array(
21
  'table_class' => '',
22
  'table_style' => '',
23
+ 'row_styles' => '',
24
  'table_heading_type' => 'horizontal',
25
  'columns_classes' => array(),
26
  'columns_styles' => array(),
30
  extract( $args );
31
  $table_class = ( '' == $table_class ) ? '' : ' class="' . $table_class . '"';
32
  $table_style = ( '' == $table_style ) ? '' : ' style="' . $table_style . '"';
33
+ $row_styles = ( '' == $row_styles ) ? '' : ' style="' . $row_styles . '"';
34
  $html = '';
35
  $html .= '<table' . $table_class . $table_style . '>';
36
  $html .= '<tbody>';
37
  foreach( $data as $row_number => $row ) {
38
+ $html .= '<tr' . $row_styles . '>';
39
  foreach( $row as $column_number => $value ) {
40
  $th_or_td = ( ( 0 === $row_number && 'horizontal' === $table_heading_type ) || ( 0 === $column_number && 'vertical' === $table_heading_type ) ) ? 'th' : 'td';
41
  $column_class = ( ! empty( $columns_classes ) && isset( $columns_classes[ $column_number ] ) ) ? ' class="' . $columns_classes[ $column_number ] . '"' : '';
53
  }
54
  }
55
 
 
 
 
56
  if ( ! function_exists( 'wcj_get_option_html' ) ) {
57
+ /**
58
+ * wcj_get_option_html.
59
+ */
60
  function wcj_get_option_html( $option_type, $option_id, $option_value, $option_description, $option_class ) {
61
 
62
  if ( 'checkbox' === $option_type )
includes/gateways/class-wc-gateway-wcj-custom.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Custom Payment Gateway class.
6
  *
7
- * @version 2.5.6
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -19,7 +19,7 @@ if ( ! function_exists( 'init_wc_gateway_wcj_custom_class' ) ) {
19
  /**
20
  * WC_Gateway_WCJ_Custom_Template class.
21
  *
22
- * @version 2.5.6
23
  */
24
  class WC_Gateway_WCJ_Custom_Template extends WC_Payment_Gateway {
25
 
@@ -36,7 +36,7 @@ if ( ! function_exists( 'init_wc_gateway_wcj_custom_class' ) ) {
36
  /**
37
  * Initialise Gateway Settings Form Fields
38
  *
39
- * @version 2.5.6
40
  */
41
  public function init_form_fields() {
42
  global $woocommerce;
@@ -45,7 +45,7 @@ if ( ! function_exists( 'init_wc_gateway_wcj_custom_class' ) ) {
45
 
46
  if ( is_admin() ) {
47
  foreach ( WC()->shipping->load_shipping_methods() as $method ) {
48
- $shipping_methods[ $method->id ] = $method->get_title();
49
  }
50
  }
51
 
4
  *
5
  * The WooCommerce Jetpack Custom Payment Gateway class.
6
  *
7
+ * @version 2.5.7
8
  * @author Algoritmika Ltd.
9
  */
10
 
19
  /**
20
  * WC_Gateway_WCJ_Custom_Template class.
21
  *
22
+ * @version 2.5.7
23
  */
24
  class WC_Gateway_WCJ_Custom_Template extends WC_Payment_Gateway {
25
 
36
  /**
37
  * Initialise Gateway Settings Form Fields
38
  *
39
+ * @version 2.5.7
40
  */
41
  public function init_form_fields() {
42
  global $woocommerce;
45
 
46
  if ( is_admin() ) {
47
  foreach ( WC()->shipping->load_shipping_methods() as $method ) {
48
+ $shipping_methods[ $method->id ] = $method->get_method_title();
49
  }
50
  }
51
 
includes/js/wcj-shipping-calculator.js ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * wcj-shipping-calculator.
3
+ *
4
+ * @version 2.5.7
5
+ * @since 2.5.7
6
+ */
7
+
8
+ jQuery(document).ready(change_labels);
9
+ jQuery(document).ajaxComplete(change_labels);
10
+ function change_labels() {
11
+ jQuery("a.shipping-calculator-button").each( function () {
12
+ jQuery(this).text( alg_object.calculate_shipping_label );
13
+ jQuery(this).css( "visibility", "visible" );
14
+ });
15
+ jQuery("button[name=calc_shipping]").each( function () {
16
+ jQuery(this).text( alg_object.update_totals_label );
17
+ jQuery(this).css( "visibility", "visible" );
18
+ });
19
+ }
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.3
8
  * @since 2.2.1
9
  * @author Algoritmika Ltd.
10
  */
@@ -18,11 +18,12 @@ class WCJ_PDF_Invoicing_Report_Tool {
18
  /**
19
  * Constructor.
20
  *
21
- * @version 2.3.10
22
  */
23
  public function __construct() {
24
  $this->notice = '';
25
  add_action( 'init', array( $this, 'generate_report_zip' ) );
 
26
  }
27
 
28
  /**
@@ -52,7 +53,7 @@ class WCJ_PDF_Invoicing_Report_Tool {
52
  /**
53
  * Add Invoices Report tool to WooCommerce menu (the content).
54
  *
55
- * @version 2.4.7
56
  */
57
  function create_invoices_report_tool() {
58
  $result_message = '';
@@ -68,8 +69,7 @@ class WCJ_PDF_Invoicing_Report_Tool {
68
  }
69
  }
70
  ?><div>
71
- <h3><?php echo __( 'Booster - Invoices Report', 'woocommerce-jetpack' ); ?></h3>
72
- <p><?php echo __( 'Invoices Monthly Reports.', 'woocommerce-jetpack' ); ?></p>
73
  <?php echo $result_message; ?>
74
  <p><form method="post" action=""><?php
75
 
@@ -107,6 +107,11 @@ class WCJ_PDF_Invoicing_Report_Tool {
107
  '',
108
  '<input class="button-primary" type="submit" name="get_invoices_report_zip" value="' . __( 'Download all monthly documents PDFs in single ZIP file', 'woocommerce-jetpack' ) . '">',
109
  ),
 
 
 
 
 
110
  );
111
  // Print all
112
  echo wcj_get_table_html( $data, array( 'table_heading_type' => 'vertical', ) );
@@ -117,7 +122,7 @@ class WCJ_PDF_Invoicing_Report_Tool {
117
  /**
118
  * get_invoices_report_zip.
119
  *
120
- * @version 2.5.2
121
  * @since 2.3.10
122
  */
123
  function get_invoices_report_zip( $year, $month, $invoice_type_id ) {
@@ -173,9 +178,9 @@ class WCJ_PDF_Invoicing_Report_Tool {
173
  $output .= "status: " . $zip->getStatusString() . "\n"; */
174
  $zip->close();
175
 
176
- header( "Content-Type: application/octet-stream" );
177
  header( "Content-Disposition: attachment; filename=" . urlencode( $zip_file_name ) );
178
- header( "Content-Type: application/octet-stream" );
179
  header( "Content-Type: application/download" );
180
  header( "Content-Description: File Transfer" );
181
  header( "Content-Length: " . filesize( $zip_file_path ) );
@@ -192,15 +197,56 @@ class WCJ_PDF_Invoicing_Report_Tool {
192
  return true;
193
  }
194
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
195
  /**
196
  * Invoices Report function.
197
  *
198
- * @version 2.5.3
199
  */
200
  function get_invoices_report( $year, $month, $invoice_type_id ) {
201
-
202
  $output = '';
 
 
 
 
203
 
 
 
 
 
 
 
 
204
  $data = array();
205
  $data[] = array(
206
  __( 'Document Nr.', 'woocommerce-jetpack' ),
@@ -224,7 +270,7 @@ class WCJ_PDF_Invoicing_Report_Tool {
224
  $last_minute = mktime( 23, 59, 59, $month, date( 't', $first_minute ), $year );
225
 
226
  $offset = 0;
227
- $block_size = 96;
228
  while( true ) {
229
  $args = array(
230
  'post_type' => 'shop_order',
@@ -244,11 +290,13 @@ class WCJ_PDF_Invoicing_Report_Tool {
244
  ),
245
  ),
246
  'offset' => $offset,
 
247
  );
248
  $loop = new WP_Query( $args );
249
- if ( ! $loop->have_posts() ) break;
250
- while ( $loop->have_posts() ) : $loop->the_post();
251
- $order_id = $loop->post->ID;
 
252
 
253
  if ( wcj_is_invoice_created( $order_id, $invoice_type_id ) ) {
254
 
@@ -292,19 +340,13 @@ class WCJ_PDF_Invoicing_Report_Tool {
292
  //'<pre>' . print_r( get_post_meta( $order_id ), true ) . '</pre>',
293
  );
294
  }
295
- endwhile;
296
  $offset += $block_size;
297
  }
298
 
299
- /* $output .= '<h3>' . 'Total Sum Excl. Tax: ' . sprintf( '$ %.2f', $total_sum_excl_tax ) . '</h3>';
300
- $output .= '<h3>' . 'Total Sum: ' . sprintf( '$ %.2f', $total_sum ) . '</h3>';
301
- $output .= '<h3>' . 'Total Tax: ' . sprintf( '$ %.2f', $total_tax ) . '</h3>'; */
302
- $output .= wcj_get_table_html( $data, array( 'table_class' => 'widefat', ) );
303
-
304
- // $output .= date( "Y-m-d H:i:s", $first_minute ) . ' -> ' . date( "Y-m-d H:i:s", $last_minute );
305
-
306
- return $output;
307
  }
 
308
  }
309
 
310
  endif;
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
  */
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 2.5.7
22
  */
23
  public function __construct() {
24
  $this->notice = '';
25
  add_action( 'init', array( $this, 'generate_report_zip' ) );
26
+ add_action( 'init', array( $this, 'export_csv' ) );
27
  }
28
 
29
  /**
53
  /**
54
  * Add Invoices Report tool to WooCommerce menu (the content).
55
  *
56
+ * @version 2.5.7
57
  */
58
  function create_invoices_report_tool() {
59
  $result_message = '';
69
  }
70
  }
71
  ?><div>
72
+ <?php echo WCJ()->modules['pdf_invoicing']->get_tool_header_html( 'invoices_report' ); ?>
 
73
  <?php echo $result_message; ?>
74
  <p><form method="post" action=""><?php
75
 
107
  '',
108
  '<input class="button-primary" type="submit" name="get_invoices_report_zip" value="' . __( 'Download all monthly documents PDFs in single ZIP file', 'woocommerce-jetpack' ) . '">',
109
  ),
110
+ // Get Report CSV Button
111
+ array(
112
+ '',
113
+ '<input class="button-primary" type="submit" name="get_invoices_report_csv" value="' . __( 'Download monthly documents CSV', 'woocommerce-jetpack' ) . '">',
114
+ ),
115
  );
116
  // Print all
117
  echo wcj_get_table_html( $data, array( 'table_heading_type' => 'vertical', ) );
122
  /**
123
  * get_invoices_report_zip.
124
  *
125
+ * @version 2.5.7
126
  * @since 2.3.10
127
  */
128
  function get_invoices_report_zip( $year, $month, $invoice_type_id ) {
178
  $output .= "status: " . $zip->getStatusString() . "\n"; */
179
  $zip->close();
180
 
181
+ // header( "Content-Type: application/octet-stream" );
182
  header( "Content-Disposition: attachment; filename=" . urlencode( $zip_file_name ) );
183
+ // header( "Content-Type: application/octet-stream" );
184
  header( "Content-Type: application/download" );
185
  header( "Content-Description: File Transfer" );
186
  header( "Content-Length: " . filesize( $zip_file_path ) );
197
  return true;
198
  }
199
 
200
+ /**
201
+ * export_csv.
202
+ *
203
+ * @version 2.5.7
204
+ * @since 2.5.7
205
+ */
206
+ function export_csv() {
207
+ $the_year = ( ! empty( $_POST['report_year'] ) ) ? $_POST['report_year'] : date( 'Y' );
208
+ $the_month = ( ! empty( $_POST['report_month'] ) ) ? $_POST['report_month'] : date( 'm' );
209
+ $the_invoice_type = ( ! empty( $_POST['invoice_type'] ) ) ? $_POST['invoice_type'] : 'invoice';
210
+ if ( isset( $_POST['get_invoices_report_csv'] ) ) {
211
+ $data = $this->get_invoices_report_data( $the_year, $the_month, $the_invoice_type );
212
+ $csv = '';
213
+ foreach ( $data as $row ) {
214
+ $row = str_replace( '.', ',', $row );
215
+ // $csv .= implode( get_option( 'wcj_export_csv_separator', ',' ), $row ) . PHP_EOL;
216
+ $csv .= implode( ';', $row ) . PHP_EOL;
217
+ }
218
+ // if ( 'yes' === get_option( 'wcj_export_csv_add_utf_8_bom', 'yes' ) ) {
219
+ $csv = "\xEF\xBB\xBF" . $csv; // UTF-8 BOM
220
+ // }
221
+ $filename = 'report_' . $the_year . '_' . $the_month . '_' . $the_invoice_type;
222
+ header( "Content-Disposition: attachment; filename=" . $filename . ".csv" );
223
+ header( "Content-Type: Content-Type: text/html; charset=utf-8" );
224
+ header( "Content-Description: File Transfer" );
225
+ header( "Content-Length: " . strlen( $csv ) );
226
+ echo $csv;
227
+ die();
228
+ }
229
+ }
230
+
231
  /**
232
  * Invoices Report function.
233
  *
234
+ * @version 2.5.7
235
  */
236
  function get_invoices_report( $year, $month, $invoice_type_id ) {
 
237
  $output = '';
238
+ $data = $this->get_invoices_report_data( $year, $month, $invoice_type_id );
239
+ $output .= wcj_get_table_html( $data, array( 'table_class' => 'widefat', ) );
240
+ return $output;
241
+ }
242
 
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 ) {
250
  $data = array();
251
  $data[] = array(
252
  __( 'Document Nr.', 'woocommerce-jetpack' ),
270
  $last_minute = mktime( 23, 59, 59, $month, date( 't', $first_minute ), $year );
271
 
272
  $offset = 0;
273
+ $block_size = 256;
274
  while( true ) {
275
  $args = array(
276
  'post_type' => 'shop_order',
290
  ),
291
  ),
292
  'offset' => $offset,
293
+ 'fields' => 'ids',
294
  );
295
  $loop = new WP_Query( $args );
296
+ if ( ! $loop->have_posts() ) {
297
+ break;
298
+ }
299
+ foreach ( $loop->posts as $order_id ) {
300
 
301
  if ( wcj_is_invoice_created( $order_id, $invoice_type_id ) ) {
302
 
340
  //'<pre>' . print_r( get_post_meta( $order_id ), true ) . '</pre>',
341
  );
342
  }
343
+ }
344
  $offset += $block_size;
345
  }
346
 
347
+ return $data;
 
 
 
 
 
 
 
348
  }
349
+
350
  }
351
 
352
  endif;
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.6
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -17,7 +17,7 @@ class WCJ_PDF_Invoicing_Display extends WCJ_Module {
17
  /**
18
  * Constructor.
19
  *
20
- * @version 2.5.2
21
  */
22
  function __construct() {
23
 
@@ -29,7 +29,7 @@ class WCJ_PDF_Invoicing_Display extends WCJ_Module {
29
 
30
  if ( $this->is_enabled() ) {
31
  // Columns on Admin's Orders page
32
- add_filter( 'manage_edit-shop_order_columns', array( $this, 'add_order_column' ), PHP_INT_MAX );
33
  add_action( 'manage_shop_order_posts_custom_column', array( $this, 'render_order_columns' ), 2 );
34
  // Action Links on Customer's My Account page
35
  add_filter( 'woocommerce_my_account_my_orders_actions', array( $this, 'add_pdf_invoices_action_links' ), PHP_INT_MAX, 2 );
4
  *
5
  * The WooCommerce Jetpack PDF Invoicing Display class.
6
  *
7
+ * @version 2.5.7
8
  * @author Algoritmika Ltd.
9
  */
10
 
17
  /**
18
  * Constructor.
19
  *
20
+ * @version 2.5.7
21
  */
22
  function __construct() {
23
 
29
 
30
  if ( $this->is_enabled() ) {
31
  // Columns on Admin's Orders page
32
+ add_filter( 'manage_edit-shop_order_columns', array( $this, 'add_order_column' ), PHP_INT_MAX - 3 );
33
  add_action( 'manage_shop_order_posts_custom_column', array( $this, 'render_order_columns' ), 2 );
34
  // Action Links on Customer's My Account page
35
  add_filter( 'woocommerce_my_account_my_orders_actions', array( $this, 'add_pdf_invoices_action_links' ), PHP_INT_MAX, 2 );
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.5.6
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -17,26 +17,16 @@ class WCJ_Price_by_Country_Core {
17
  /**
18
  * Constructor.
19
  *
20
- * @version 2.5.6
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' ) || ! $this->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
26
  add_action( 'init', array( $this, 'add_hooks' ) );
27
  }
28
  }
29
 
30
- /**
31
- * is_bot.
32
- *
33
- * @version 2.5.6
34
- * @since 2.5.6
35
- */
36
- function is_bot() {
37
- return ( isset( $_SERVER['HTTP_USER_AGENT'] ) && preg_match( '/Google-Structured-Data-Testing-Tool|bot|crawl|slurp|spider/i', $_SERVER['HTTP_USER_AGENT'] ) ) ? true : false;
38
- }
39
-
40
  /**
41
  * add_hooks.
42
  *
4
  *
5
  * The WooCommerce Jetpack Price by Country Core class.
6
  *
7
+ * @version 2.5.7
8
  * @author Algoritmika Ltd.
9
  */
10
 
17
  /**
18
  * Constructor.
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
26
  add_action( 'init', array( $this, 'add_hooks' ) );
27
  }
28
  }
29
 
 
 
 
 
 
 
 
 
 
 
30
  /**
31
  * add_hooks.
32
  *
includes/reports/class-wcj-currency-reports.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Currency Reports class.
6
  *
7
- * @version 2.5.2
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -104,18 +104,22 @@ class WCJ_Currency_Reports {
104
 
105
  /**
106
  * filter_reports.
 
 
107
  */
108
  function filter_reports( $args ) {
109
- if ( isset( $_GET['currency'] ) && 'merge' === $_GET['currency'] ) {
110
- return $args;
 
 
 
 
 
 
 
 
 
111
  }
112
- $args['where_meta'] = array(
113
- array(
114
- 'meta_key' => '_order_currency',
115
- 'meta_value' => isset( $_GET['currency'] ) ? $_GET['currency'] : get_woocommerce_currency(),
116
- 'operator' => '=',
117
- ),
118
- );
119
  return $args;
120
  }
121
  }
4
  *
5
  * The WooCommerce Jetpack Currency Reports class.
6
  *
7
+ * @version 2.5.7
8
  * @author Algoritmika Ltd.
9
  */
10
 
104
 
105
  /**
106
  * filter_reports.
107
+ *
108
+ * @version 2.5.7
109
  */
110
  function filter_reports( $args ) {
111
+ if ( isset( $_GET['page'] ) && 'wc-reports' === $_GET['page'] ) {
112
+ if ( isset( $_GET['currency'] ) && 'merge' === $_GET['currency'] ) {
113
+ return $args;
114
+ }
115
+ $args['where_meta'] = array(
116
+ array(
117
+ 'meta_key' => '_order_currency',
118
+ 'meta_value' => isset( $_GET['currency'] ) ? $_GET['currency'] : get_woocommerce_currency(),
119
+ 'operator' => '=',
120
+ ),
121
+ );
122
  }
 
 
 
 
 
 
 
123
  return $args;
124
  }
125
  }
includes/reports/wcj-class-reports-sales.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Sales Reports class.
6
  *
7
- * @version 2.5.6
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -55,10 +55,20 @@ class WCJ_Reports_Sales {
55
  return ( $a['sales'] < $b['sales'] ) ? 1 : -1;
56
  }
57
 
 
 
 
 
 
 
 
 
 
 
58
  /*
59
  * get_products_sales.
60
  *
61
- * @version 2.5.6
62
  * @since 2.3.0
63
  */
64
  function get_products_sales() {
@@ -92,32 +102,58 @@ class WCJ_Reports_Sales {
92
  $order = wc_get_order( $order_id );
93
  $items = $order->get_items();
94
  foreach ( $items as $item ) {
95
- if ( ! isset( $products_data[ $item['product_id'] ][ 'sales' ] ) ) {
96
- $products_data[ $item['product_id'] ][ 'sales' ] = 0;
97
- }
98
- $products_data[ $item['product_id'] ][ 'sales' ] += $item['qty'];
99
- $month = date( 'n', get_the_time( 'U', $order_id ) );
100
- $year = date( 'Y', get_the_time( 'U', $order_id ) );
101
- $years[ $year ] = true;
102
- if ( ! isset( $products_data[ $item['product_id'] ][ 'sales_by_month' ][ $year ][ $month ] ) ) {
103
- $products_data[ $item['product_id'] ][ 'sales_by_month' ][ $year ][ $month ] = 0;
104
- }
105
- $products_data[ $item['product_id'] ][ 'sales_by_month' ][ $year ][ $month ] += $item['qty'];
106
- if ( ! isset( $products_data[ $item['product_id'] ][ 'title' ] ) ) {
107
- $products_data[ $item['product_id'] ][ 'title' ] = get_the_title( $item['product_id'] );
108
  }
109
- if ( ! isset( $products_data[ $item['product_id'] ][ 'last_sale' ] ) ) {
110
- $products_data[ $item['product_id'] ][ 'last_sale' ] = date( 'Y-m-d H:i:s', get_the_time( 'U', $order_id ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
111
  }
112
  }
113
  $total_orders++;
114
  }
115
  $offset += $block_size;
116
  }
117
- usort( $products_data, array( $this, 'sort_by_total_sales' ) );
 
118
 
119
  $table_data = array();
120
- $the_header = array( __( 'Product', 'woocommerce-jetpack' ), );
121
  foreach ( $years as $year => $value ) {
122
  if ( $year != $this->year ) continue;
123
  for ( $i = 12; $i >= 1; $i-- ) {
@@ -125,9 +161,9 @@ class WCJ_Reports_Sales {
125
  }
126
  }
127
  $table_data[] = $the_header;
128
- foreach ( $products_data as $product_id => $the_data ) {
129
  if ( '' == $this->product_title || false !== stripos( $the_data['title'], $this->product_title ) ) {
130
- $the_row = array( $the_data['title'] . ' (' . $the_data['sales'] . ')', );
131
  foreach ( $years as $year => $value ) {
132
  if ( $year != $this->year ) continue;
133
  for ( $i = 12; $i >= 1; $i-- ) {
@@ -165,7 +201,7 @@ class WCJ_Reports_Sales {
165
  $filter_form .= '<input type="text" name="product_title" title="" value="' . $this->product_title . '" /><input type="submit" value="' . __( 'Filter', 'woocommerce' ) . '" />';
166
  $filter_form .= '</form>';
167
 
168
- return '<p>' . $menu . '</p>' . '<p>' . $filter_form . '</p>' . wcj_get_table_html( $table_data, array( 'table_class' => 'widefat' ) );
169
  }
170
  }
171
 
4
  *
5
  * The WooCommerce Jetpack Sales Reports class.
6
  *
7
+ * @version 2.5.7
8
  * @author Algoritmika Ltd.
9
  */
10
 
55
  return ( $a['sales'] < $b['sales'] ) ? 1 : -1;
56
  }
57
 
58
+ /*
59
+ * sort_by_title.
60
+ *
61
+ * @version 2.5.7
62
+ * @since 2.5.7
63
+ */
64
+ function sort_by_title( $a, $b ) {
65
+ return strcmp( strip_tags( $a['title'] ), strip_tags( $b['title'] ) );
66
+ }
67
+
68
  /*
69
  * get_products_sales.
70
  *
71
+ * @version 2.5.7
72
  * @since 2.3.0
73
  */
74
  function get_products_sales() {
102
  $order = wc_get_order( $order_id );
103
  $items = $order->get_items();
104
  foreach ( $items as $item ) {
105
+ $product_ids = array( $item['product_id'] );
106
+ if ( 0 != $item['variation_id'] && 'yes' === get_option( 'wcj_reports_products_sales_count_variations', 'no' ) ) {
107
+ $product_ids[] = $item['variation_id'];
 
 
 
 
 
 
 
 
 
 
108
  }
109
+ foreach ( $product_ids as $product_id ) {
110
+ if ( ! isset( $products_data[ $product_id ][ 'sales' ] ) ) {
111
+ $products_data[ $product_id ][ 'sales' ] = 0;
112
+ }
113
+ $products_data[ $product_id ][ 'sales' ] += $item['qty'];
114
+ $month = date( 'n', get_the_time( 'U', $order_id ) );
115
+ $year = date( 'Y', get_the_time( 'U', $order_id ) );
116
+ $years[ $year ] = true;
117
+ if ( ! isset( $products_data[ $product_id ][ 'sales_by_month' ][ $year ][ $month ] ) ) {
118
+ $products_data[ $product_id ][ 'sales_by_month' ][ $year ][ $month ] = 0;
119
+ }
120
+ $products_data[ $product_id ][ 'sales_by_month' ][ $year ][ $month ] += $item['qty'];
121
+ if ( ! isset( $products_data[ $product_id ][ 'title' ] ) ) {
122
+ $products_data[ $product_id ][ 'title' ] = '';
123
+ $_product = wc_get_product( $product_id );
124
+ if ( is_object( $_product ) ) {
125
+ $products_data[ $product_id ][ 'title' ] .= $_product->get_title(); // get_the_title( $product_id );
126
+ if ( 'WC_Product_Variation' === get_class( $_product ) && is_object( $_product->parent ) ) {
127
+ $products_data[ $product_id ][ 'title' ] .= '<br><em>' . $_product->get_formatted_variation_attributes( true ) . '</em>';
128
+ } elseif ( 'WC_Product_Variation' === get_class( $_product ) ) {
129
+ // $products_data[ $product_id ][ 'title' ] .= ' [PARENT PRODUCT DELETED]'; // todo
130
+ $products_data[ $product_id ][ 'title' ] .= $item['name'] . '<br><em>' . __( 'Variation', 'woocommerce-jetpack' ) . '</em>'; // get_the_title( $product_id );
131
+ $products_data[ $product_id ][ 'title' ] = '<del>' . $products_data[ $product_id ][ 'title' ] . '</del>';
132
+ }
133
+ } else {
134
+ // $products_data[ $product_id ][ 'title' ] .= $item['name'] . ' [PRODUCT DELETED]'; // todo
135
+ $products_data[ $product_id ][ 'title' ] .= $item['name'];
136
+ $products_data[ $product_id ][ 'title' ] = '<del>' . $products_data[ $product_id ][ 'title' ] . '</del>';
137
+ }
138
+ // $products_data[ $product_id ][ 'title' ] .= ' [ID: ' . $product_id . ']';
139
+ }
140
+ if ( ! isset( $products_data[ $product_id ][ 'last_sale' ] ) ) {
141
+ $products_data[ $product_id ][ 'last_sale' ] = date( 'Y-m-d H:i:s', get_the_time( 'U', $order_id ) );
142
+ }
143
+ if ( ! isset( $products_data[ $product_id ][ 'product_id' ] ) ) {
144
+ $products_data[ $product_id ][ 'product_id' ] = $product_id;
145
+ }
146
  }
147
  }
148
  $total_orders++;
149
  }
150
  $offset += $block_size;
151
  }
152
+ // usort( $products_data, array( $this, 'sort_by_total_sales' ) );
153
+ usort( $products_data, array( $this, 'sort_by_title' ) );
154
 
155
  $table_data = array();
156
+ $the_header = array( __( 'ID', 'woocommerce-jetpack' ), __( 'Product', 'woocommerce-jetpack' ), __( 'Total Sales', 'woocommerce-jetpack' ) );
157
  foreach ( $years as $year => $value ) {
158
  if ( $year != $this->year ) continue;
159
  for ( $i = 12; $i >= 1; $i-- ) {
161
  }
162
  }
163
  $table_data[] = $the_header;
164
+ foreach ( $products_data as /* $product_id => */ $the_data ) {
165
  if ( '' == $this->product_title || false !== stripos( $the_data['title'], $this->product_title ) ) {
166
+ $the_row = array( $the_data['product_id'], $the_data['title'], $the_data['sales'] );
167
  foreach ( $years as $year => $value ) {
168
  if ( $year != $this->year ) continue;
169
  for ( $i = 12; $i >= 1; $i-- ) {
201
  $filter_form .= '<input type="text" name="product_title" title="" value="' . $this->product_title . '" /><input type="submit" value="' . __( 'Filter', 'woocommerce' ) . '" />';
202
  $filter_form .= '</form>';
203
 
204
+ return '<p>' . $menu . '</p>' . '<p>' . $filter_form . '</p>' . wcj_get_table_html( $table_data, array( 'table_class' => 'widefat striped' ) );
205
  }
206
  }
207
 
includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Custom Shipping with Shipping Zones class.
6
  *
7
- * @version 2.5.6
8
  * @since 2.5.6
9
  * @author Algoritmika Ltd.
10
  */
@@ -40,7 +40,7 @@ if ( ! function_exists( 'init_wc_shipping_wcj_custom_w_zones_class' ) ) {
40
  /**
41
  * Init settings
42
  *
43
- * @version 2.5.6
44
  * @since 2.5.6
45
  * @access public
46
  * @return void
@@ -63,9 +63,11 @@ if ( ! function_exists( 'init_wc_shipping_wcj_custom_w_zones_class' ) ) {
63
  // $this->init_settings();
64
 
65
  // Define user set variables
66
- $this->title = $this->get_option( 'title' );
67
- $this->cost = $this->get_option( 'cost' );
68
- $this->type = $this->get_option( 'type' );
 
 
69
  $this->weight_table_total_rows = $this->get_option( 'weight_table_total_rows' );
70
  for ( $i = 1; $i <= $this->weight_table_total_rows; $i++ ) {
71
  $option_name = 'weight_table_weight_row_' . $i;
@@ -78,10 +80,31 @@ if ( ! function_exists( 'init_wc_shipping_wcj_custom_w_zones_class' ) ) {
78
  add_action( 'woocommerce_update_options_shipping_' . $this->id, array( $this, 'process_admin_options' ) );
79
  }
80
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
  /**
82
  * Initialise Settings Form Fields
83
  *
84
- * @version 2.5.6
85
  * @since 2.5.6
86
  */
87
  function init_instance_form_fields() {
@@ -114,10 +137,26 @@ if ( ! function_exists( 'init_wc_shipping_wcj_custom_w_zones_class' ) ) {
114
  'desc_tip' => true,
115
  'custom_attributes' => array( 'step' => '0.000001', 'min' => '0', ),
116
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
117
  'weight_table_total_rows' => array(
118
  'title' => __( 'Weight Table Total Rows', 'woocommerce' ),
119
  'type' => 'number',
120
- 'description' => __( 'Press Save changes after you change this number.', 'woocommerce-jetpack' ),
121
  'default' => 0,
122
  'desc_tip' => true,
123
  'custom_attributes' => array( 'min' => '0', ),
4
  *
5
  * The WooCommerce Jetpack Custom Shipping with Shipping Zones class.
6
  *
7
+ * @version 2.5.7
8
  * @since 2.5.6
9
  * @author Algoritmika Ltd.
10
  */
40
  /**
41
  * Init settings
42
  *
43
+ * @version 2.5.7
44
  * @since 2.5.6
45
  * @access public
46
  * @return void
63
  // $this->init_settings();
64
 
65
  // Define user set variables
66
+ $this->title = $this->get_option( 'title' );
67
+ $this->cost = $this->get_option( 'cost' );
68
+ $this->min_weight = $this->get_option( 'min_weight' );
69
+ $this->max_weight = $this->get_option( 'max_weight' );
70
+ $this->type = $this->get_option( 'type' );
71
  $this->weight_table_total_rows = $this->get_option( 'weight_table_total_rows' );
72
  for ( $i = 1; $i <= $this->weight_table_total_rows; $i++ ) {
73
  $option_name = 'weight_table_weight_row_' . $i;
80
  add_action( 'woocommerce_update_options_shipping_' . $this->id, array( $this, 'process_admin_options' ) );
81
  }
82
 
83
+ /**
84
+ * Is this method available?
85
+ *
86
+ * @version 2.5.7
87
+ * @since 2.5.7
88
+ * @param array $package
89
+ * @return bool
90
+ */
91
+ public function is_available( $package ) {
92
+ $available = parent::is_available( $package );
93
+ if ( $available ) {
94
+ $total_weight = WC()->cart->get_cart_contents_weight();
95
+ if ( 0 != $this->min_weight && $total_weight < $this->min_weight ) {
96
+ $available = false;
97
+ } elseif ( 0 != $this->max_weight && $total_weight > $this->max_weight ) {
98
+ $available = false;
99
+ }
100
+ }
101
+ return $available;
102
+ }
103
+
104
  /**
105
  * Initialise Settings Form Fields
106
  *
107
+ * @version 2.5.7
108
  * @since 2.5.6
109
  */
110
  function init_instance_form_fields() {
137
  'desc_tip' => true,
138
  'custom_attributes' => array( 'step' => '0.000001', 'min' => '0', ),
139
  ),
140
+ 'min_weight' => array(
141
+ 'title' => __( 'Min Weight', 'woocommerce' ),
142
+ 'type' => 'number',
143
+ 'description' => __( 'Minimum total cart weight. Set zero to disable.', 'woocommerce-jetpack' ),
144
+ 'default' => 0,
145
+ 'desc_tip' => true,
146
+ 'custom_attributes' => array( 'step' => '0.000001', 'min' => '0', ),
147
+ ),
148
+ 'max_weight' => array(
149
+ 'title' => __( 'Max Weight', 'woocommerce' ),
150
+ 'type' => 'number',
151
+ 'description' => __( 'Maximum total cart weight. Set zero to disable.', 'woocommerce-jetpack' ),
152
+ 'default' => 0,
153
+ 'desc_tip' => true,
154
+ 'custom_attributes' => array( 'step' => '0.000001', 'min' => '0', ),
155
+ ),
156
  'weight_table_total_rows' => array(
157
  'title' => __( 'Weight Table Total Rows', 'woocommerce' ),
158
  'type' => 'number',
159
+ 'description' => __( 'Press "Save changes" and reload the page after you change this number.', 'woocommerce-jetpack' ),
160
  'default' => 0,
161
  'desc_tip' => true,
162
  'custom_attributes' => array( 'min' => '0', ),
includes/shortcodes/class-wcj-general-shortcodes.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack General Shortcodes class.
6
  *
7
- * @version 2.5.6
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -17,7 +17,7 @@ class WCJ_General_Shortcodes extends WCJ_Shortcodes {
17
  /**
18
  * Constructor.
19
  *
20
- * @version 2.5.6
21
  */
22
  public function __construct() {
23
 
@@ -46,7 +46,9 @@ class WCJ_General_Shortcodes extends WCJ_Shortcodes {
46
  'countries' => '',
47
  'currencies' => '',
48
  'content' => '',
49
- 'heading_format' => 'from %level_qty% pcs.',
 
 
50
  'replace_with_currency' => 'no',
51
  'hide_if_zero_quantity' => 'no',
52
  'table_format' => 'horizontal',
@@ -84,7 +86,7 @@ class WCJ_General_Shortcodes extends WCJ_Shortcodes {
84
  /**
85
  * wcj_wholesale_price_table (global only).
86
  *
87
- * @version 2.5.6
88
  * @since 2.4.8
89
  */
90
  function wcj_wholesale_price_table( $atts ) {
@@ -116,11 +118,18 @@ class WCJ_General_Shortcodes extends WCJ_Shortcodes {
116
  $data_qty = array();
117
  $data_discount = array();
118
  $columns_styles = array();
 
119
  foreach ( $wholesale_price_levels as $wholesale_price_level ) {
 
120
  if ( 0 == $wholesale_price_level['quantity'] && 'yes' === $atts['hide_if_zero_quantity'] ) {
121
  continue;
122
  }
123
- $data_qty[] = str_replace( '%level_qty%', $wholesale_price_level['quantity'], $atts['heading_format'] ) ;
 
 
 
 
 
124
  $data_discount[] = ( 'fixed' === get_option( 'wcj_wholesale_price_discount_type', 'percent' ) )
125
  ? '-' . wc_price( $wholesale_price_level['discount'] ) : '-' . $wholesale_price_level['discount'] . '%';
126
  $columns_styles[] = 'text-align: center;';
4
  *
5
  * The WooCommerce Jetpack General Shortcodes class.
6
  *
7
+ * @version 2.5.7
8
  * @author Algoritmika Ltd.
9
  */
10
 
17
  /**
18
  * Constructor.
19
  *
20
+ * @version 2.5.7
21
  */
22
  public function __construct() {
23
 
46
  'countries' => '',
47
  'currencies' => '',
48
  'content' => '',
49
+ 'heading_format' => 'from %level_min_qty% pcs.',
50
+ 'before_level_max_qty' => '-',
51
+ 'last_level_max_qty' => '+',
52
  'replace_with_currency' => 'no',
53
  'hide_if_zero_quantity' => 'no',
54
  'table_format' => 'horizontal',
86
  /**
87
  * wcj_wholesale_price_table (global only).
88
  *
89
+ * @version 2.5.7
90
  * @since 2.4.8
91
  */
92
  function wcj_wholesale_price_table( $atts ) {
118
  $data_qty = array();
119
  $data_discount = array();
120
  $columns_styles = array();
121
+ $i = -1;
122
  foreach ( $wholesale_price_levels as $wholesale_price_level ) {
123
+ $i++;
124
  if ( 0 == $wholesale_price_level['quantity'] && 'yes' === $atts['hide_if_zero_quantity'] ) {
125
  continue;
126
  }
127
+ $level_max_qty = ( isset( $wholesale_price_levels[ $i + 1 ]['quantity'] ) ) ? $atts['before_level_max_qty'] . ( $wholesale_price_levels[ $i + 1 ]['quantity'] - 1 ) : $atts['last_level_max_qty'];
128
+ $data_qty[] = str_replace(
129
+ array( '%level_qty%', '%level_min_qty%', '%level_max_qty%' ), // %level_qty% is deprecated
130
+ array( $wholesale_price_level['quantity'], $wholesale_price_level['quantity'], $level_max_qty ),
131
+ $atts['heading_format']
132
+ );
133
  $data_discount[] = ( 'fixed' === get_option( 'wcj_wholesale_price_discount_type', 'percent' ) )
134
  ? '-' . wc_price( $wholesale_price_level['discount'] ) : '-' . $wholesale_price_level['discount'] . '%';
135
  $columns_styles[] = 'text-align: center;';
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.5.5
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -29,22 +29,24 @@ class WCJ_Order_Items_Shortcodes extends WCJ_Shortcodes {
29
  /**
30
  * add_extra_atts.
31
  *
32
- * @version 2.5.0
33
  */
34
  function add_extra_atts( $atts ) {
35
  $modified_atts = array_merge( array(
36
- 'order_id' => ( isset( $_GET['order_id'] ) ) ? $_GET['order_id'] : get_the_ID(),
37
- 'hide_currency' => 'no',
38
- 'table_class' => '',
39
- 'shipping_as_item' => '',//__( 'Shipping', 'woocommerce-jetpack' ),
40
- 'discount_as_item' => '',//__( 'Discount', 'woocommerce-jetpack' ),
41
- 'columns' => '',
42
- 'columns_titles' => '',
43
- 'columns_styles' => '',
44
- 'tax_percent_format' => '%.2f %%',
45
- 'item_image_width' => 0,
46
- 'item_image_height' => 0,
47
- 'price_prefix' => '',
 
 
48
  'style_item_name_variation' => 'font-size:smaller;',
49
  ), $atts );
50
  return $modified_atts;
@@ -52,10 +54,18 @@ class WCJ_Order_Items_Shortcodes extends WCJ_Shortcodes {
52
 
53
  /**
54
  * init_atts.
 
 
55
  */
56
  function init_atts( $atts ) {
57
  $this->the_order = ( 'shop_order' === get_post_type( $atts['order_id'] ) ) ? wc_get_order( $atts['order_id'] ) : null;
58
  if ( ! $this->the_order ) return false;
 
 
 
 
 
 
59
  return $atts;
60
  }
61
 
@@ -126,10 +136,28 @@ class WCJ_Order_Items_Shortcodes extends WCJ_Shortcodes {
126
  return false;
127
  } */
128
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
129
  /**
130
  * wcj_order_items_table.
131
  *
132
- * @version 2.5.5
133
  */
134
  function wcj_order_items_table( $atts, $content = '' ) {
135
 
@@ -143,7 +171,9 @@ class WCJ_Order_Items_Shortcodes extends WCJ_Shortcodes {
143
  // Check all possible args
144
  $columns_titles = ( '' == $atts['columns_titles'] ) ? array() : explode( '|', $atts['columns_titles'] );
145
  $columns_styles = ( '' == $atts['columns_styles'] ) ? array() : explode( '|', $atts['columns_styles'] );
146
- //if ( ! ( $columns_total_number === count( $columns_titles ) === count( $columns_styles ) ) ) return '';
 
 
147
 
148
  // The Items
149
  $the_items = $the_order->get_items();
@@ -192,13 +222,27 @@ class WCJ_Order_Items_Shortcodes extends WCJ_Shortcodes {
192
  $column = substr( $column, 0, $pos );
193
  }
194
  switch ( $column ) {
 
195
  case 'debug':
196
  $data[ $item_counter ][] = print_r( $item, true );
197
  break;
 
 
 
 
 
 
 
 
 
 
 
 
198
  case 'item_number':
199
  $data[ $item_counter ][] = $item_counter;
200
  break;
201
  case 'item_name':
 
202
  //$data[ $item_counter ][] = ( true === $item['is_custom'] ) ? $item['name'] : $the_product->get_title();
203
  if ( true === $item['is_custom'] ) {
204
  $data[ $item_counter ][] = $item['name'];
@@ -229,6 +273,7 @@ class WCJ_Order_Items_Shortcodes extends WCJ_Shortcodes {
229
  }
230
  break;
231
  case 'item_attribute':
 
232
  if ( isset( $column_param ) && '' != $column_param && is_object( $the_product ) ) {
233
  $data[ $item_counter ][] = $the_product->get_attribute( $column_param );
234
  } else {
@@ -236,8 +281,7 @@ class WCJ_Order_Items_Shortcodes extends WCJ_Shortcodes {
236
  }
237
  break;
238
  case 'item_excerpt':
239
- case 'item_description':
240
- case 'item_short_description':
241
  if ( true === $item['is_custom'] ) {
242
  $data[ $item_counter ][] = '';
243
  } else {
@@ -249,20 +293,27 @@ class WCJ_Order_Items_Shortcodes extends WCJ_Shortcodes {
249
  $data[ $item_counter ][] = $the_excerpt;
250
  }
251
  break;
 
 
 
 
252
  case 'item_variation':
 
253
  $data[ $item_counter ][] = ( is_object( $the_product ) && $the_product->is_type( 'variation' ) )
254
  ? str_replace( 'pa_', '', urldecode( wc_get_formatted_variation( $the_product->variation_data, true ) ) ) : '';
255
  break;
256
  case 'item_thumbnail':
 
257
  //$data[ $item_counter ][] = $the_product->get_image();
258
  $image_id = ( true === $item['is_custom'] || ! is_object( $the_product ) ) ? 0 : $the_product->get_image_id();
259
  $image_src = ( 0 != $image_id ) ? wp_get_attachment_image_src( $image_id ) : wc_placeholder_img_src();
260
  if ( is_array( $image_src ) ) $image_src = $image_src[0];
261
- $maybe_width = ( 0 != $atts['item_image_width'] ) ? ' width="' . $atts['item_image_width'] . '"' : '';
262
- $maybe_height = ( 0 != $atts['item_image_height'] ) ? ' height="' . $atts['item_image_height'] . '"' : '';
263
  $data[ $item_counter ][] = '<img src="' . $image_src . '"' . $maybe_width . $maybe_height . '>';
264
  break;
265
  case 'item_sku':
 
266
  $data[ $item_counter ][] = ( true === $item['is_custom'] || ! is_object( $the_product ) ) ? '' : $the_product->get_sku();
267
  break;
268
  case 'item_quantity':
@@ -325,10 +376,23 @@ class WCJ_Order_Items_Shortcodes extends WCJ_Shortcodes {
325
  $data[ $item_counter ][] = sprintf( $atts['tax_percent_format'], $line_tax_percent );
326
  break; */
327
  case 'item_weight':
 
328
  $data[ $item_counter ][] = ( true === $item['is_custom'] || ! is_object( $the_product ) ) ? '' : $the_product->get_weight();
329
  break;
 
 
 
 
 
 
 
 
 
 
 
 
330
  default:
331
- $data[ $item_counter ][] = ''; //$column;
332
  }
333
  }
334
  }
4
  *
5
  * The WooCommerce Jetpack Order Items Shortcodes class.
6
  *
7
+ * @version 2.5.7
8
  * @author Algoritmika Ltd.
9
  */
10
 
29
  /**
30
  * add_extra_atts.
31
  *
32
+ * @version 2.5.7
33
  */
34
  function add_extra_atts( $atts ) {
35
  $modified_atts = array_merge( array(
36
+ 'order_id' => ( isset( $_GET['order_id'] ) ) ? $_GET['order_id'] : get_the_ID(),
37
+ 'hide_currency' => 'no',
38
+ 'table_class' => '',
39
+ 'shipping_as_item' => '', //__( 'Shipping', 'woocommerce-jetpack' ),
40
+ 'discount_as_item' => '', //__( 'Discount', 'woocommerce-jetpack' ),
41
+ 'columns' => '',
42
+ 'columns_titles' => '',
43
+ 'columns_styles' => '',
44
+ 'tax_percent_format' => '%.2f %%',
45
+ 'item_image_width' => 0, // deprecated
46
+ 'item_image_height' => 0, // deprecated
47
+ 'product_image_width' => 0,
48
+ 'product_image_height' => 0,
49
+ 'price_prefix' => '',
50
  'style_item_name_variation' => 'font-size:smaller;',
51
  ), $atts );
52
  return $modified_atts;
54
 
55
  /**
56
  * init_atts.
57
+ *
58
+ * @version 2.5.7
59
  */
60
  function init_atts( $atts ) {
61
  $this->the_order = ( 'shop_order' === get_post_type( $atts['order_id'] ) ) ? wc_get_order( $atts['order_id'] ) : null;
62
  if ( ! $this->the_order ) return false;
63
+ if ( 0 != $atts['item_image_width'] ) {
64
+ $atts['product_image_width'] = $atts['item_image_width'];
65
+ }
66
+ if ( 0 != $atts['item_image_height'] ) {
67
+ $atts['product_image_height'] = $atts['item_image_height'];
68
+ }
69
  return $atts;
70
  }
71
 
136
  return false;
137
  } */
138
 
139
+ /**
140
+ * get_tax_class_name.
141
+ *
142
+ * @version 2.5.7
143
+ * @since 2.5.7
144
+ */
145
+ function get_tax_class_name( $tax_class ) {
146
+ $tax_classes = WC_Tax::get_tax_classes();
147
+ $classes_names = array();
148
+ $classes_names[''] = __( 'Standard', 'woocommerce' );
149
+ if ( ! empty( $tax_classes ) ) {
150
+ foreach ( $tax_classes as $class ) {
151
+ $classes_names[ sanitize_title( $class ) ] = esc_html( $class );
152
+ }
153
+ }
154
+ return ( isset( $classes_names[ $tax_class ] ) ) ? $classes_names[ $tax_class ] : '';
155
+ }
156
+
157
  /**
158
  * wcj_order_items_table.
159
  *
160
+ * @version 2.5.7
161
  */
162
  function wcj_order_items_table( $atts, $content = '' ) {
163
 
171
  // Check all possible args
172
  $columns_titles = ( '' == $atts['columns_titles'] ) ? array() : explode( '|', $atts['columns_titles'] );
173
  $columns_styles = ( '' == $atts['columns_styles'] ) ? array() : explode( '|', $atts['columns_styles'] );
174
+ /* if ( $columns_total_number !== count( $columns_titles ) || $columns_total_number !== count( $columns_styles ) ) {
175
+ return __( 'Please recheck that there is the same number of columns in "columns", "columns_titles" and "columns_styles" attributes.', 'woocommerce-jetpack' );
176
+ } */
177
 
178
  // The Items
179
  $the_items = $the_order->get_items();
222
  $column = substr( $column, 0, $pos );
223
  }
224
  switch ( $column ) {
225
+ case 'item_debug':
226
  case 'debug':
227
  $data[ $item_counter ][] = print_r( $item, true );
228
  break;
229
+ case 'item_regular_price':
230
+ case 'product_regular_price':
231
+ $data[ $item_counter ][] = ( is_object( $the_product ) ) ? $this->wcj_price_shortcode( $the_product->get_regular_price(), $atts ) : '';
232
+ break;
233
+ case 'item_sale_price':
234
+ case 'product_sale_price':
235
+ $data[ $item_counter ][] = ( is_object( $the_product ) ) ? $this->wcj_price_shortcode( $the_product->get_sale_price(), $atts ) : '';
236
+ break;
237
+ case 'item_tax_class':
238
+ case 'tax_class':
239
+ $data[ $item_counter ][] = ( isset( $item['tax_class'] ) ) ? $this->get_tax_class_name( $item['tax_class'] ) : '';
240
+ break;
241
  case 'item_number':
242
  $data[ $item_counter ][] = $item_counter;
243
  break;
244
  case 'item_name':
245
+ case 'product_name': // because of possible variation
246
  //$data[ $item_counter ][] = ( true === $item['is_custom'] ) ? $item['name'] : $the_product->get_title();
247
  if ( true === $item['is_custom'] ) {
248
  $data[ $item_counter ][] = $item['name'];
273
  }
274
  break;
275
  case 'item_attribute':
276
+ case 'product_attribute':
277
  if ( isset( $column_param ) && '' != $column_param && is_object( $the_product ) ) {
278
  $data[ $item_counter ][] = $the_product->get_attribute( $column_param );
279
  } else {
281
  }
282
  break;
283
  case 'item_excerpt':
284
+ case 'product_excerpt':
 
285
  if ( true === $item['is_custom'] ) {
286
  $data[ $item_counter ][] = '';
287
  } else {
293
  $data[ $item_counter ][] = $the_excerpt;
294
  }
295
  break;
296
+ case 'item_short_description':
297
+ case 'product_short_description':
298
+ $data[ $item_counter ][] = ( true === $item['is_custom'] ) ? '' : $this->the_product->post->post_excerpt;
299
+ break;
300
  case 'item_variation':
301
+ case 'product_variation':
302
  $data[ $item_counter ][] = ( is_object( $the_product ) && $the_product->is_type( 'variation' ) )
303
  ? str_replace( 'pa_', '', urldecode( wc_get_formatted_variation( $the_product->variation_data, true ) ) ) : '';
304
  break;
305
  case 'item_thumbnail':
306
+ case 'product_thumbnail':
307
  //$data[ $item_counter ][] = $the_product->get_image();
308
  $image_id = ( true === $item['is_custom'] || ! is_object( $the_product ) ) ? 0 : $the_product->get_image_id();
309
  $image_src = ( 0 != $image_id ) ? wp_get_attachment_image_src( $image_id ) : wc_placeholder_img_src();
310
  if ( is_array( $image_src ) ) $image_src = $image_src[0];
311
+ $maybe_width = ( 0 != $atts['product_image_width'] ) ? ' width="' . $atts['product_image_width'] . '"' : '';
312
+ $maybe_height = ( 0 != $atts['product_image_height'] ) ? ' height="' . $atts['product_image_height'] . '"' : '';
313
  $data[ $item_counter ][] = '<img src="' . $image_src . '"' . $maybe_width . $maybe_height . '>';
314
  break;
315
  case 'item_sku':
316
+ case 'product_sku':
317
  $data[ $item_counter ][] = ( true === $item['is_custom'] || ! is_object( $the_product ) ) ? '' : $the_product->get_sku();
318
  break;
319
  case 'item_quantity':
376
  $data[ $item_counter ][] = sprintf( $atts['tax_percent_format'], $line_tax_percent );
377
  break; */
378
  case 'item_weight':
379
+ case 'product_weight':
380
  $data[ $item_counter ][] = ( true === $item['is_custom'] || ! is_object( $the_product ) ) ? '' : $the_product->get_weight();
381
  break;
382
+ case 'item_width':
383
+ case 'product_width':
384
+ $data[ $item_counter ][] = ( true === $item['is_custom'] || ! is_object( $the_product ) ) ? '' : $the_product->get_width();
385
+ break;
386
+ case 'item_height':
387
+ case 'product_height':
388
+ $data[ $item_counter ][] = ( true === $item['is_custom'] || ! is_object( $the_product ) ) ? '' : $the_product->get_height();
389
+ break;
390
+ case 'item_length':
391
+ case 'product_length':
392
+ $data[ $item_counter ][] = ( true === $item['is_custom'] || ! is_object( $the_product ) ) ? '' : $the_product->get_length();
393
+ break;
394
  default:
395
+ $data[ $item_counter ][] = ''; // $column;
396
  }
397
  }
398
  }
includes/shortcodes/class-wcj-orders-shortcodes.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Orders Shortcodes class.
6
  *
7
- * @version 2.5.6
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -17,7 +17,7 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
17
  /**
18
  * Constructor.
19
  *
20
- * @version 2.5.6
21
  */
22
  public function __construct() {
23
 
@@ -36,6 +36,7 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
36
  'wcj_order_custom_meta_field',
37
  'wcj_order_meta',
38
  'wcj_order_items_meta',
 
39
  'wcj_order_subtotal',
40
  'wcj_order_subtotal_plus_shipping',
41
  'wcj_order_total_discount',
@@ -62,10 +63,14 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
62
  'wcj_order_payment_method',
63
  'wcj_order_payment_method_transaction_id',
64
  'wcj_order_shipping_method',
65
- 'wcj_order_items_total_weight',
66
  'wcj_order_items_total_quantity',
67
  'wcj_order_items_total_number',
68
  'wcj_order_function',
 
 
 
 
69
  );
70
 
71
  parent::__construct();
@@ -74,7 +79,7 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
74
  /**
75
  * add_extra_atts.
76
  *
77
- * @version 2.5.6
78
  */
79
  function add_extra_atts( $atts ) {
80
  $modified_atts = array_merge( array(
@@ -93,6 +98,9 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
93
  'lang' => 'EN',
94
  'unique_only' => 'no',
95
  'function_name' => '',
 
 
 
96
  ), $atts );
97
 
98
  return $modified_atts;
@@ -258,16 +266,85 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
258
  }
259
 
260
  /**
261
- * wcj_order_items_total_weight.
 
 
 
262
  */
263
- function wcj_order_items_total_weight( $atts ) {
264
- $total_weight = 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
265
  $the_items = $this->the_order->get_items();
266
- foreach( $the_items as $the_item ) {
267
- $the_product = wc_get_product( $the_item['product_id'] );
268
- $total_weight += $the_item['qty'] * $the_product->get_weight();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
269
  }
270
- return ( 0 == $total_weight && 'yes' === $atts['hide_if_zero'] ) ? '' : $total_weight;
 
 
 
 
 
 
 
 
 
 
271
  }
272
 
273
  /**
@@ -313,6 +390,48 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
313
  return $this->the_order->billing_phone;
314
  }
315
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
316
  /**
317
  * wcj_order_items_meta.
318
  *
@@ -354,7 +473,7 @@ class WCJ_Orders_Shortcodes extends WCJ_Shortcodes {
354
  *
355
  * @version 2.3.0
356
  * @since 2.2.9
357
- * @depreciated
358
  */
359
  function wcj_order_custom_meta_field( $atts ) {
360
  return $this->wcj_order_checkout_field( $atts );
4
  *
5
  * The WooCommerce Jetpack Orders Shortcodes class.
6
  *
7
+ * @version 2.5.7
8
  * @author Algoritmika Ltd.
9
  */
10
 
17
  /**
18
  * Constructor.
19
  *
20
+ * @version 2.5.7
21
  */
22
  public function __construct() {
23
 
36
  'wcj_order_custom_meta_field',
37
  'wcj_order_meta',
38
  'wcj_order_items_meta',
39
+ 'wcj_order_items',
40
  'wcj_order_subtotal',
41
  'wcj_order_subtotal_plus_shipping',
42
  'wcj_order_total_discount',
63
  'wcj_order_payment_method',
64
  'wcj_order_payment_method_transaction_id',
65
  'wcj_order_shipping_method',
66
+ 'wcj_order_items_total_weight', // deprecated - use 'wcj_order_total_weight' instead
67
  'wcj_order_items_total_quantity',
68
  'wcj_order_items_total_number',
69
  'wcj_order_function',
70
+ 'wcj_order_total_width',
71
+ 'wcj_order_total_height',
72
+ 'wcj_order_total_length',
73
+ 'wcj_order_total_weight',
74
  );
75
 
76
  parent::__construct();
79
  /**
80
  * add_extra_atts.
81
  *
82
+ * @version 2.5.7
83
  */
84
  function add_extra_atts( $atts ) {
85
  $modified_atts = array_merge( array(
98
  'lang' => 'EN',
99
  'unique_only' => 'no',
100
  'function_name' => '',
101
+ 'sep' => ', ',
102
+ 'item_number' => 'all',
103
+ 'field' => 'name',
104
  ), $atts );
105
 
106
  return $modified_atts;
266
  }
267
 
268
  /**
269
+ * wcj_order_total_width
270
+ *
271
+ * @version 2.5.7
272
+ * @since 2.5.7
273
  */
274
+ function wcj_order_total_width( $atts ) {
275
+ return $this->get_order_total( $atts, 'width' );
276
+ }
277
+
278
+ /**
279
+ * wcj_order_total_height
280
+ *
281
+ * @version 2.5.7
282
+ * @since 2.5.7
283
+ */
284
+ function wcj_order_total_height( $atts ) {
285
+ return $this->get_order_total( $atts, 'height' );
286
+ }
287
+
288
+ /**
289
+ * wcj_order_total_length
290
+ *
291
+ * @version 2.5.7
292
+ * @since 2.5.7
293
+ */
294
+ function wcj_order_total_length( $atts ) {
295
+ return $this->get_order_total( $atts, 'length' );
296
+ }
297
+
298
+ /**
299
+ * wcj_order_total_weight
300
+ *
301
+ * @version 2.5.7
302
+ * @since 2.5.7
303
+ */
304
+ function wcj_order_total_weight( $atts ) {
305
+ return $this->get_order_total( $atts, 'weight' );
306
+ }
307
+
308
+ /**
309
+ * get_order_total
310
+ *
311
+ * @version 2.5.7
312
+ * @since 2.5.7
313
+ */
314
+ function get_order_total( $atts, $param ) {
315
+ $total = 0;
316
  $the_items = $this->the_order->get_items();
317
+ foreach ( $the_items as $item_id => $item ) {
318
+ $product_id = ( 0 != $item['variation_id'] ) ? $item['variation_id'] : $item['product_id'];
319
+ $_product = wc_get_product( $product_id );
320
+ if ( $_product ) {
321
+ switch ( $param ) {
322
+ case 'width':
323
+ $total += ( $item['qty'] * $_product->get_width() );
324
+ break;
325
+ case 'height':
326
+ $total += ( $item['qty'] * $_product->get_height() );
327
+ break;
328
+ case 'length':
329
+ $total += ( $item['qty'] * $_product->get_length() );
330
+ break;
331
+ case 'weight':
332
+ $total += ( $item['qty'] * $_product->get_weight() );
333
+ break;
334
+ }
335
+ }
336
  }
337
+ return ( 0 == $total && 'yes' === $atts['hide_if_zero'] ) ? '' : $total;
338
+ }
339
+
340
+ /**
341
+ * wcj_order_items_total_weight.
342
+ *
343
+ * @version 2.5.7
344
+ * @deprecated 2.5.7
345
+ */
346
+ function wcj_order_items_total_weight( $atts ) {
347
+ return $this->get_order_total( $atts, 'weight' );
348
  }
349
 
350
  /**
390
  return $this->the_order->billing_phone;
391
  }
392
 
393
+ /**
394
+ * wcj_order_items
395
+ *
396
+ * @version 2.5.7
397
+ * @since 2.5.7
398
+ */
399
+ function wcj_order_items( $atts ) {
400
+ $items = array();
401
+ $the_items = $this->the_order->get_items();
402
+ foreach ( $the_items as $item_id => $item ) {
403
+ switch ( $atts['field'] ) {
404
+ case 'debug':
405
+ $items[] = '<pre>' . print_r( $item, true ) . '</pre>';
406
+ break;
407
+ default: // case 'name' etc.
408
+ $items[] = ( isset( $item[ $atts['field'] ] ) ) ? $item[ $atts['field'] ] : '';
409
+ break;
410
+ }
411
+ }
412
+ if ( empty( $items ) ) {
413
+ return '';
414
+ }
415
+ if ( 'all' === $atts['item_number'] ) {
416
+ return implode( $atts['sep'], $items );
417
+ } else {
418
+ switch ( $atts['item_number'] ) {
419
+ case 'first':
420
+ return current( $items );
421
+ case 'last':
422
+ return end( $items );
423
+ default:
424
+ $item_number = intval( $atts['item_number'] ) - 1;
425
+ if ( $item_number < 0 ) {
426
+ $item_number = 0;
427
+ } elseif ( $item_number >= count( $items ) ) {
428
+ $item_number = count( $items ) - 1;
429
+ }
430
+ return $items[ $item_number ];
431
+ }
432
+ }
433
+ }
434
+
435
  /**
436
  * wcj_order_items_meta.
437
  *
473
  *
474
  * @version 2.3.0
475
  * @since 2.2.9
476
+ * @deprecated
477
  */
478
  function wcj_order_custom_meta_field( $atts ) {
479
  return $this->wcj_order_checkout_field( $atts );
includes/shortcodes/class-wcj-products-shortcodes.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Products Shortcodes class.
6
  *
7
- * @version 2.5.6
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -17,19 +17,23 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
17
  /**
18
  * Constructor.
19
  *
20
- * @version 2.5.6
21
  */
22
  public function __construct() {
23
 
24
  $this->the_shortcodes = array(
25
  'wcj_product_image',
 
 
26
  'wcj_product_price',
27
  'wcj_product_wholesale_price_table', // WooCommerce Wholesale Price
28
  'wcj_product_sku',
29
  'wcj_product_title',
30
  'wcj_product_weight',
31
  'wcj_product_excerpt',
 
32
  'wcj_product_custom_field',
 
33
  'wcj_product_you_save',
34
  'wcj_product_you_save_percent',
35
  'wcj_product_tags',
@@ -45,6 +49,8 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
45
  'wcj_product_tax_class',
46
  'wcj_product_average_rating',
47
  'wcj_product_categories',
 
 
48
  'wcj_product_list_attributes',
49
  'wcj_product_list_attribute',
50
  'wcj_product_stock_quantity',
@@ -61,9 +67,13 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
61
  'image_size' => 'shop_thumbnail',
62
  'multiply_by' => '',
63
  'hide_currency' => 'no',
64
- 'excerpt_length' => 0,
 
 
65
  'name' => '',
66
- 'heading_format' => 'from %level_qty% pcs.',
 
 
67
  'price_row_format' => '<del>%old_price%</del> %price%',
68
  'sep' => ', ',
69
  'add_links' => 'yes',
@@ -233,41 +243,30 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
233
  /**
234
  * wcj_product_price_excluding_tax.
235
  *
236
- * @version 2.4.8
237
  * @since 2.4.0
238
  */
239
  function wcj_product_price_excluding_tax( $atts ) {
240
- if ( $this->the_product->is_type( 'variable' ) ) {
241
- // Variable
242
- $prices = $this->the_product->get_variation_prices( false );
243
- $min_product_id = key( $prices['price'] );
244
- end( $prices['price'] );
245
- $max_product_id = key( $prices['price'] );
246
- if ( 0 != $min_product_id && 0 != $max_product_id ) {
247
- $min_variation_product = wc_get_product( $min_product_id );
248
- $max_variation_product = wc_get_product( $max_product_id );
249
- $min = $min_variation_product->get_price_excluding_tax();
250
- $max = $max_variation_product->get_price_excluding_tax();
251
- if ( 'yes' !== $atts['hide_currency'] ) {
252
- $min = wc_price( $min );
253
- $max = wc_price( $max );
254
- }
255
- return ( $min != $max ) ? sprintf( '%s-%s', $min, $max ) : $min;
256
- }
257
- } else {
258
- // Simple etc.
259
- $the_price = $this->the_product->get_price_excluding_tax();
260
- return ( 'yes' === $atts['hide_currency'] ) ? $the_price : wc_price( $the_price );
261
- }
262
  }
263
 
264
  /**
265
  * wcj_product_price_including_tax.
266
  *
267
- * @version 2.4.8
268
  * @since 2.4.0
269
  */
270
  function wcj_product_price_including_tax( $atts ) {
 
 
 
 
 
 
 
 
 
 
271
  if ( $this->the_product->is_type( 'variable' ) ) {
272
  // Variable
273
  $prices = $this->the_product->get_variation_prices( false );
@@ -277,8 +276,17 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
277
  if ( 0 != $min_product_id && 0 != $max_product_id ) {
278
  $min_variation_product = wc_get_product( $min_product_id );
279
  $max_variation_product = wc_get_product( $max_product_id );
280
- $min = $min_variation_product->get_price_including_tax();
281
- $max = $max_variation_product->get_price_including_tax();
 
 
 
 
 
 
 
 
 
282
  if ( 'yes' !== $atts['hide_currency'] ) {
283
  $min = wc_price( $min );
284
  $max = wc_price( $max );
@@ -287,7 +295,14 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
287
  }
288
  } else {
289
  // Simple etc.
290
- $the_price = $this->the_product->get_price_including_tax();
 
 
 
 
 
 
 
291
  return ( 'yes' === $atts['hide_currency'] ) ? $the_price : wc_price( $the_price );
292
  }
293
  }
@@ -524,6 +539,17 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
524
  }
525
  }
526
 
 
 
 
 
 
 
 
 
 
 
 
527
  /**
528
  * Get product custom field.
529
  *
@@ -532,7 +558,6 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
532
  function wcj_product_custom_field( $atts ) {
533
  $product_custom_fields = get_post_custom( $atts['product_id'] );
534
  return ( isset( $product_custom_fields[ $atts['name'] ][0] ) ) ? $product_custom_fields[ $atts['name'] ][0] : '';
535
- //return get_post_meta( $atts['product_id'], $atts['name'], true );
536
  }
537
 
538
  /**
@@ -568,7 +593,7 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
568
  /**
569
  * wcj_product_wholesale_price_table.
570
  *
571
- * @version 2.5.6
572
  */
573
  function wcj_product_wholesale_price_table( $atts ) {
574
 
@@ -610,8 +635,9 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
610
  $data_price = array();
611
  $data_discount = array();
612
  $columns_styles = array();
 
613
  foreach ( $wholesale_price_levels as $wholesale_price_level ) {
614
-
615
  if ( 0 == $wholesale_price_level['quantity'] && 'yes' === $atts['hide_if_zero_quantity'] ) {
616
  continue;
617
  }
@@ -651,34 +677,44 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
651
  // Simple etc.
652
  $get_price_method = 'get_price_' . get_option( 'woocommerce_tax_display_shop' ) . 'uding_tax';
653
  $the_price = $this->the_product->$get_price_method();
 
654
  $the_price_original = $the_price;
655
- if ( 'fixed' === $discount_type ) {
 
 
656
  $the_price = $the_price - $wholesale_price_level['discount'];
657
- } else {
658
  $coefficient = 1.0 - ( $wholesale_price_level['discount'] / 100.0 );
659
  $the_price = $the_price * $coefficient;
660
  }
 
 
661
  if ( 'yes' !== $atts['hide_currency'] ) {
662
  $the_price = wc_price( $the_price );
663
  $the_price_original = wc_price( $the_price_original );
664
  }
665
  }
666
 
667
- $data_qty[] = str_replace( '%level_qty%', $wholesale_price_level['quantity'], $atts['heading_format'] ) ;
 
 
 
 
 
668
  if ( 'yes' === $atts['add_price_row'] ) {
669
  $data_price[] = str_replace( array( '%old_price%', '%price%' ), array( $the_price_original, $the_price ), $atts['price_row_format'] );
670
  }
671
  if ( 'yes' === $atts['add_percent_row'] ) {
672
- if ( 'fixed' === $discount_type ) {
673
- // todo (maybe)
674
- } else {
675
  $data_discount[] = '-' . $wholesale_price_level['discount'] . '%';
 
 
676
  }
677
  }
678
  if ( 'yes' === $atts['add_discount_row'] ) {
679
  if ( 'fixed' === $discount_type ) {
680
  $data_discount[] = '-' . wc_price( $wholesale_price_level['discount'] );
681
- } else {
682
  // todo (maybe)
683
  }
684
  }
@@ -707,30 +743,59 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
707
  return wcj_get_table_html( $table_rows, array( 'table_class' => 'wcj_product_wholesale_price_table', 'columns_styles' => $columns_styles, 'table_heading_type' => $atts['table_format'] ) );
708
  }
709
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
710
  /**
711
  * For wcj_product_excerpt function.
 
 
712
  */
713
- /* private */ function custom_excerpt_length( $length ) {
714
- global $product_excerpt_length;
715
- return $product_excerpt_length;
716
  }
 
717
  /**
718
  * Get product excerpt.
719
  *
720
- * @return string
 
721
  */
722
  function wcj_product_excerpt( $atts ) {
723
- global $post;
724
- global $product_excerpt_length;
725
- $post = get_post( $atts['product_id'] );
726
- setup_postdata( $post );
727
-
728
- $product_excerpt_length = $atts['excerpt_length'];
729
- if ( 0 != $atts['excerpt_length'] ) add_filter( 'excerpt_length', array( $this, 'custom_excerpt_length' ), PHP_INT_MAX );
730
- $the_excerpt = get_the_excerpt();
731
- if ( 0 != $atts['excerpt_length'] ) remove_filter( 'excerpt_length', array( $this, 'custom_excerpt_length' ), PHP_INT_MAX );
732
-
733
- wp_reset_postdata();
 
 
 
 
 
 
 
734
  return $the_excerpt;
735
  }
736
 
@@ -768,6 +833,60 @@ class WCJ_Products_Shortcodes extends WCJ_Shortcodes {
768
  function wcj_product_image( $atts ) {
769
  return $this->the_product->get_image( $atts['image_size'] );
770
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
771
  }
772
 
773
  endif;
4
  *
5
  * The WooCommerce Jetpack Products Shortcodes class.
6
  *
7
+ * @version 2.5.7
8
  * @author Algoritmika Ltd.
9
  */
10
 
17
  /**
18
  * Constructor.
19
  *
20
+ * @version 2.5.7
21
  */
22
  public function __construct() {
23
 
24
  $this->the_shortcodes = array(
25
  'wcj_product_image',
26
+ 'wcj_product_image_url',
27
+ 'wcj_product_url',
28
  'wcj_product_price',
29
  'wcj_product_wholesale_price_table', // WooCommerce Wholesale Price
30
  'wcj_product_sku',
31
  'wcj_product_title',
32
  'wcj_product_weight',
33
  'wcj_product_excerpt',
34
+ 'wcj_product_short_description',
35
  'wcj_product_custom_field',
36
+ 'wcj_product_meta',
37
  'wcj_product_you_save',
38
  'wcj_product_you_save_percent',
39
  'wcj_product_tags',
49
  'wcj_product_tax_class',
50
  'wcj_product_average_rating',
51
  'wcj_product_categories',
52
+ 'wcj_product_categories_names',
53
+ 'wcj_product_categories_urls',
54
  'wcj_product_list_attributes',
55
  'wcj_product_list_attribute',
56
  'wcj_product_stock_quantity',
67
  'image_size' => 'shop_thumbnail',
68
  'multiply_by' => '',
69
  'hide_currency' => 'no',
70
+ 'excerpt_length' => 0, // deprecated
71
+ 'length' => 0,
72
+ 'apply_filters' => 'no',
73
  'name' => '',
74
+ 'heading_format' => 'from %level_min_qty% pcs.',
75
+ 'before_level_max_qty' => '-',
76
+ 'last_level_max_qty' => '+',
77
  'price_row_format' => '<del>%old_price%</del> %price%',
78
  'sep' => ', ',
79
  'add_links' => 'yes',
243
  /**
244
  * wcj_product_price_excluding_tax.
245
  *
246
+ * @version 2.5.7
247
  * @since 2.4.0
248
  */
249
  function wcj_product_price_excluding_tax( $atts ) {
250
+ return $this->get_product_price_including_or_excluding_tax( $atts, 'excluding' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
251
  }
252
 
253
  /**
254
  * wcj_product_price_including_tax.
255
  *
256
+ * @version 2.5.7
257
  * @since 2.4.0
258
  */
259
  function wcj_product_price_including_tax( $atts ) {
260
+ return $this->get_product_price_including_or_excluding_tax( $atts, 'including' );
261
+ }
262
+
263
+ /**
264
+ * get_product_price_including_or_excluding_tax.
265
+ *
266
+ * @version 2.5.7
267
+ * @since 2.5.7
268
+ */
269
+ function get_product_price_including_or_excluding_tax( $atts, $including_or_excluding ) {
270
  if ( $this->the_product->is_type( 'variable' ) ) {
271
  // Variable
272
  $prices = $this->the_product->get_variation_prices( false );
276
  if ( 0 != $min_product_id && 0 != $max_product_id ) {
277
  $min_variation_product = wc_get_product( $min_product_id );
278
  $max_variation_product = wc_get_product( $max_product_id );
279
+ if ( 'including' === $including_or_excluding ) {
280
+ $min = $min_variation_product->get_price_including_tax();
281
+ $max = $max_variation_product->get_price_including_tax();
282
+ } else { // 'excluding'
283
+ $min = $min_variation_product->get_price_excluding_tax();
284
+ $max = $max_variation_product->get_price_excluding_tax();
285
+ }
286
+ if ( 0 != $atts['multiply_by'] && is_numeric( $atts['multiply_by'] ) ) {
287
+ $min = $min * $atts['multiply_by'];
288
+ $max = $max * $atts['multiply_by'];
289
+ }
290
  if ( 'yes' !== $atts['hide_currency'] ) {
291
  $min = wc_price( $min );
292
  $max = wc_price( $max );
295
  }
296
  } else {
297
  // Simple etc.
298
+ if ( 'including' === $including_or_excluding ) {
299
+ $the_price = $this->the_product->get_price_including_tax();
300
+ } else { // 'excluding'
301
+ $the_price = $this->the_product->get_price_excluding_tax();
302
+ }
303
+ if ( 0 != $atts['multiply_by'] && is_numeric( $atts['multiply_by'] ) ) {
304
+ $the_price = $the_price * $atts['multiply_by'];
305
+ }
306
  return ( 'yes' === $atts['hide_currency'] ) ? $the_price : wc_price( $the_price );
307
  }
308
  }
539
  }
540
  }
541
 
542
+ /**
543
+ * Get product meta.
544
+ *
545
+ * @version 2.5.7
546
+ * @since 2.5.7
547
+ * @return string
548
+ */
549
+ function wcj_product_meta( $atts ) {
550
+ return get_post_meta( $atts['product_id'], $atts['name'], true );
551
+ }
552
+
553
  /**
554
  * Get product custom field.
555
  *
558
  function wcj_product_custom_field( $atts ) {
559
  $product_custom_fields = get_post_custom( $atts['product_id'] );
560
  return ( isset( $product_custom_fields[ $atts['name'] ][0] ) ) ? $product_custom_fields[ $atts['name'] ][0] : '';
 
561
  }
562
 
563
  /**
593
  /**
594
  * wcj_product_wholesale_price_table.
595
  *
596
+ * @version 2.5.7
597
  */
598
  function wcj_product_wholesale_price_table( $atts ) {
599
 
635
  $data_price = array();
636
  $data_discount = array();
637
  $columns_styles = array();
638
+ $i = -1;
639
  foreach ( $wholesale_price_levels as $wholesale_price_level ) {
640
+ $i++;
641
  if ( 0 == $wholesale_price_level['quantity'] && 'yes' === $atts['hide_if_zero_quantity'] ) {
642
  continue;
643
  }
677
  // Simple etc.
678
  $get_price_method = 'get_price_' . get_option( 'woocommerce_tax_display_shop' ) . 'uding_tax';
679
  $the_price = $this->the_product->$get_price_method();
680
+ $the_price = apply_filters( 'wcj_product_wholesale_price_table_price_before', $the_price, $this->the_product );
681
  $the_price_original = $the_price;
682
+ if ( 'price_directly' === $discount_type ) {
683
+ $the_price = $wholesale_price_level['discount'];
684
+ } elseif ( 'fixed' === $discount_type ) {
685
  $the_price = $the_price - $wholesale_price_level['discount'];
686
+ } else { // 'percent'
687
  $coefficient = 1.0 - ( $wholesale_price_level['discount'] / 100.0 );
688
  $the_price = $the_price * $coefficient;
689
  }
690
+ $the_price_original = apply_filters( 'wcj_product_wholesale_price_table_price_after', $the_price_original, $this->the_product );
691
+ $the_price = apply_filters( 'wcj_product_wholesale_price_table_price_after', $the_price, $this->the_product );
692
  if ( 'yes' !== $atts['hide_currency'] ) {
693
  $the_price = wc_price( $the_price );
694
  $the_price_original = wc_price( $the_price_original );
695
  }
696
  }
697
 
698
+ $level_max_qty = ( isset( $wholesale_price_levels[ $i + 1 ]['quantity'] ) ) ? $atts['before_level_max_qty'] . ( $wholesale_price_levels[ $i + 1 ]['quantity'] - 1 ) : $atts['last_level_max_qty'];
699
+ $data_qty[] = str_replace(
700
+ array( '%level_qty%', '%level_min_qty%', '%level_max_qty%' ), // %level_qty% is deprecated
701
+ array( $wholesale_price_level['quantity'], $wholesale_price_level['quantity'], $level_max_qty ),
702
+ $atts['heading_format']
703
+ );
704
  if ( 'yes' === $atts['add_price_row'] ) {
705
  $data_price[] = str_replace( array( '%old_price%', '%price%' ), array( $the_price_original, $the_price ), $atts['price_row_format'] );
706
  }
707
  if ( 'yes' === $atts['add_percent_row'] ) {
708
+ if ( 'percent' === $discount_type ) {
 
 
709
  $data_discount[] = '-' . $wholesale_price_level['discount'] . '%';
710
+ } else { // 'fixed' or 'price_directly'
711
+ // todo (maybe)
712
  }
713
  }
714
  if ( 'yes' === $atts['add_discount_row'] ) {
715
  if ( 'fixed' === $discount_type ) {
716
  $data_discount[] = '-' . wc_price( $wholesale_price_level['discount'] );
717
+ } else { // 'percent' or 'price_directly'
718
  // todo (maybe)
719
  }
720
  }
743
  return wcj_get_table_html( $table_rows, array( 'table_class' => 'wcj_product_wholesale_price_table', 'columns_styles' => $columns_styles, 'table_heading_type' => $atts['table_format'] ) );
744
  }
745
 
746
+ /**
747
+ * Get product short description.
748
+ *
749
+ * @version 2.5.7
750
+ * @since 2.5.7
751
+ * @return string
752
+ */
753
+ function wcj_product_short_description( $atts ) {
754
+ $short_description = $this->the_product->post->post_excerpt;
755
+ if ( 'yes' === $atts['apply_filters'] ) {
756
+ apply_filters( 'woocommerce_short_description', $short_description );
757
+ }
758
+ if ( 0 != $atts['length'] ) {
759
+ $excerpt_more = apply_filters( 'excerpt_more', ' ' . '[&hellip;]' );
760
+ $short_description = wp_trim_words( $short_description, $atts['length'], $excerpt_more );
761
+ }
762
+ return $short_description;
763
+ }
764
+
765
  /**
766
  * For wcj_product_excerpt function.
767
+ *
768
+ * @version 2.5.7
769
  */
770
+ function custom_excerpt_length( $length ) {
771
+ return $this->product_excerpt_length;
 
772
  }
773
+
774
  /**
775
  * Get product excerpt.
776
  *
777
+ * @version 2.5.7
778
+ * @return string
779
  */
780
  function wcj_product_excerpt( $atts ) {
781
+ if ( 0 != $atts['excerpt_length'] ) {
782
+ $atts['length'] = $atts['excerpt_length'];
783
+ }
784
+ $the_excerpt = $this->wcj_product_short_description( $atts );
785
+ if ( '' === $the_excerpt ) {
786
+ global $post;
787
+ $post = get_post( $atts['product_id'] );
788
+ setup_postdata( $post );
789
+ $this->product_excerpt_length = $atts['length'];
790
+ if ( 0 != $atts['length'] ) {
791
+ add_filter( 'excerpt_length', array( $this, 'custom_excerpt_length' ), PHP_INT_MAX );
792
+ $the_excerpt = get_the_excerpt();
793
+ remove_filter( 'excerpt_length', array( $this, 'custom_excerpt_length' ), PHP_INT_MAX );
794
+ } else {
795
+ $the_excerpt = get_the_excerpt();
796
+ }
797
+ wp_reset_postdata();
798
+ }
799
  return $the_excerpt;
800
  }
801
 
833
  function wcj_product_image( $atts ) {
834
  return $this->the_product->get_image( $atts['image_size'] );
835
  }
836
+
837
+ /**
838
+ * wcj_product_image_url.
839
+ *
840
+ * @version 2.5.7
841
+ * @since 2.5.7
842
+ */
843
+ function wcj_product_image_url( $atts ) {
844
+ return wcj_get_product_image_url( $this->the_product->id, $atts['image_size'] );
845
+ }
846
+
847
+ /**
848
+ * wcj_product_url.
849
+ *
850
+ * @version 2.5.7
851
+ * @since 2.5.7
852
+ */
853
+ function wcj_product_url( $atts ) {
854
+ return $this->the_product->get_permalink();
855
+ }
856
+
857
+ /**
858
+ * wcj_product_categories_names.
859
+ *
860
+ * @version 2.5.7
861
+ * @since 2.5.7
862
+ */
863
+ function wcj_product_categories_names( $atts ) {
864
+ $product_cats = get_the_terms( $this->the_product->id, 'product_cat' );
865
+ $cats = array();
866
+ if ( ! empty( $product_cats ) && is_array( $product_cats ) ) {
867
+ foreach ( $product_cats as $product_cat ) {
868
+ $cats[] = $product_cat->name;
869
+ }
870
+ }
871
+ return implode( $atts['sep'], $cats );
872
+ }
873
+
874
+ /**
875
+ * wcj_product_categories_urls.
876
+ *
877
+ * @version 2.5.7
878
+ * @since 2.5.7
879
+ */
880
+ function wcj_product_categories_urls( $atts ) {
881
+ $product_cats = get_the_terms( $this->the_product->id, 'product_cat' );
882
+ $cats = array();
883
+ if ( ! empty( $product_cats ) && is_array( $product_cats ) ) {
884
+ foreach ( $product_cats as $product_cat ) {
885
+ $cats[] = get_term_link( $product_cat );
886
+ }
887
+ }
888
+ return implode( $atts['sep'], $cats );
889
+ }
890
  }
891
 
892
  endif;
includes/shortcodes/class-wcj-shortcodes.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Shortcodes class.
6
  *
7
- * @version 2.5.5
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -59,7 +59,7 @@ class WCJ_Shortcodes {
59
  /**
60
  * wcj_shortcode.
61
  *
62
- * @version 2.5.5
63
  */
64
  function wcj_shortcode( $atts, $content, $shortcode ) {
65
 
@@ -83,6 +83,8 @@ class WCJ_Shortcodes {
83
  'billing_country' => '',
84
  'not_billing_country' => '',
85
  'module' => '',
 
 
86
  );
87
  $atts = array_merge( $global_defaults, $atts );
88
 
@@ -168,8 +170,12 @@ class WCJ_Shortcodes {
168
 
169
  // Run the shortcode function
170
  $shortcode_function = $shortcode;
171
- if ( '' !== ( $result = $this->$shortcode_function( $atts, $content ) ) )
 
 
 
172
  return $atts['before'] . $result . $atts['after'];
 
173
  return '';
174
  }
175
 
4
  *
5
  * The WooCommerce Jetpack Shortcodes class.
6
  *
7
+ * @version 2.5.7
8
  * @author Algoritmika Ltd.
9
  */
10
 
59
  /**
60
  * wcj_shortcode.
61
  *
62
+ * @version 2.5.7
63
  */
64
  function wcj_shortcode( $atts, $content, $shortcode ) {
65
 
83
  'billing_country' => '',
84
  'not_billing_country' => '',
85
  'module' => '',
86
+ 'find' => '',
87
+ 'replace' => '',
88
  );
89
  $atts = array_merge( $global_defaults, $atts );
90
 
170
 
171
  // Run the shortcode function
172
  $shortcode_function = $shortcode;
173
+ if ( '' !== ( $result = $this->$shortcode_function( $atts, $content ) ) ) {
174
+ if ( '' != $atts['find'] ) {
175
+ $result = str_replace( $atts['find'], $atts['replace'], $result );
176
+ }
177
  return $atts['before'] . $result . $atts['after'];
178
+ }
179
  return '';
180
  }
181
 
langs/woocommerce-jetpack.pot CHANGED
@@ -2,10 +2,10 @@
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.5\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/woocommerce-"
7
  "jetpack\n"
8
- "POT-Creation-Date: 2016-08-23 08:04:26+00:00\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
@@ -29,8 +29,8 @@ msgstr ""
29
  #: includes/admin/class-wc-settings-jetpack.php:347
30
  #: includes/class-wcj-checkout-files-upload.php:140
31
  #: includes/class-wcj-payment-gateways.php:55
32
- #: includes/classes/class-wcj-module.php:180
33
- #: includes/classes/class-wcj-module.php:369
34
  msgid "Booster"
35
  msgstr ""
36
 
@@ -123,14 +123,14 @@ msgstr ""
123
  #: includes/admin/class-wcj-tools.php:75
124
  #: includes/class-wcj-eu-vat-number.php:373
125
  #: includes/class-wcj-product-by-user.php:159
126
- #: includes/gateways/class-wc-gateway-wcj-custom.php:71
127
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:151
128
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:266
129
  msgid "Description"
130
  msgstr ""
131
 
132
  #: includes/admin/class-wc-settings-jetpack.php:486
133
- #: includes/classes/class-wcj-module.php:508
134
  msgid "Documentation"
135
  msgstr ""
136
 
@@ -204,7 +204,7 @@ msgid "Cart & Checkout"
204
  msgstr ""
205
 
206
  #: includes/admin/wcj-modules-cats.php:94
207
- #: includes/class-wcj-payment-gateways-by-country.php:86
208
  #: includes/class-wcj-payment-gateways-by-user-role.php:81
209
  #: includes/class-wcj-payment-gateways-min-max.php:90
210
  msgid "Payment Gateways"
@@ -246,6 +246,7 @@ msgstr ""
246
  #: includes/class-wcj-add-to-cart.php:212
247
  #: includes/class-wcj-product-images.php:252
248
  #: includes/class-wcj-product-images.php:326
 
249
  msgid "Enable Section"
250
  msgstr ""
251
 
@@ -284,10 +285,10 @@ msgstr ""
284
  #: includes/class-wcj-add-to-cart.php:90
285
  #: includes/class-wcj-add-to-cart.php:101
286
  #: includes/class-wcj-add-to-cart.php:149
287
- #: includes/class-wcj-add-to-cart.php:162 includes/class-wcj-sorting.php:198
288
- #: includes/class-wcj-sorting.php:207 includes/class-wcj-sorting.php:216
289
- #: includes/class-wcj-sorting.php:225 includes/class-wcj-sorting.php:243
290
- #: includes/class-wcj-sorting.php:252
291
  msgid "Default: "
292
  msgstr ""
293
 
@@ -349,7 +350,7 @@ msgid "Already in cart. Product category (archive) view."
349
  msgstr ""
350
 
351
  #: includes/class-wcj-add-to-cart.php:180
352
- #: includes/class-wcj-product-addons.php:499
353
  msgid "Per Product Options"
354
  msgstr ""
355
 
@@ -384,10 +385,10 @@ msgid "Click \"Save changes\" after you change this number."
384
  msgstr ""
385
 
386
  #: includes/class-wcj-add-to-cart.php:257
387
- #: includes/class-wcj-price-by-country.php:272
388
- #: includes/class-wcj-price-by-country.php:283
389
- #: includes/class-wcj-price-by-country.php:294
390
- #: includes/class-wcj-price-by-country.php:348
391
  msgid "Group"
392
  msgstr ""
393
 
@@ -399,25 +400,28 @@ msgstr ""
399
  #: includes/class-wcj-multicurrency.php:375
400
  #: includes/class-wcj-order-numbers.php:210
401
  #: includes/class-wcj-order-numbers.php:273
402
- #: includes/class-wcj-order-numbers.php:281 includes/class-wcj-orders.php:404
403
- #: includes/class-wcj-price-by-country.php:157
404
- #: includes/class-wcj-price-by-country.php:164
405
- #: includes/class-wcj-price-by-country.php:186
406
- #: includes/class-wcj-price-by-country.php:195
407
- #: includes/class-wcj-price-by-country.php:203
408
  #: includes/class-wcj-price-by-user-role.php:373
409
  #: includes/class-wcj-price-by-user-role.php:390
410
  #: includes/class-wcj-price-labels.php:51
411
  #: includes/class-wcj-price-labels.php:749
412
- #: includes/class-wcj-product-add-to-cart.php:280
413
- #: includes/class-wcj-product-add-to-cart.php:306
414
- #: includes/class-wcj-product-add-to-cart.php:322
415
- #: includes/class-wcj-product-add-to-cart.php:364
416
- #: includes/class-wcj-product-addons.php:427
417
- #: includes/class-wcj-product-addons.php:505
418
- #: includes/class-wcj-product-addons.php:524
419
- #: includes/class-wcj-product-addons.php:548
420
- #: includes/class-wcj-product-addons.php:619
 
 
 
421
  #: includes/class-wcj-product-by-user.php:232
422
  #: includes/class-wcj-product-info.php:256
423
  #: includes/class-wcj-product-info.php:351
@@ -438,9 +442,10 @@ msgstr ""
438
  #: includes/class-wcj-shipping-calculator.php:123
439
  #: includes/class-wcj-shipping-calculator.php:130
440
  #: includes/class-wcj-shipping-calculator.php:137
441
- #: includes/class-wcj-shipping.php:241 includes/class-wcj-shipping.php:273
442
- #: includes/class-wcj-shipping.php:311 includes/class-wcj-sku.php:385
443
- #: includes/class-wcj-sku.php:393 includes/class-wcj-sorting.php:191
 
444
  #: includes/class-wcj-wholesale-price.php:372
445
  #: includes/class-wcj-wholesale-price.php:379
446
  #: includes/class-wcj-wholesale-price.php:386
@@ -622,22 +627,22 @@ msgstr ""
622
  #: includes/class-wcj-mini-cart.php:106
623
  #: includes/class-wcj-product-custom-info.php:135
624
  #: includes/class-wcj-product-tabs.php:431
625
- #: includes/class-wcj-product-tabs.php:557 includes/class-wcj-shipping.php:248
626
- #: includes/class-wcj-shipping.php:282 includes/class-wcj-shipping.php:320
627
  msgid "Content"
628
  msgstr ""
629
 
630
  #: includes/class-wcj-cart.php:167
631
  #: includes/class-wcj-checkout-custom-info.php:102
632
- #: includes/class-wcj-checkout-files-upload.php:573
633
  #: includes/class-wcj-mini-cart.php:114
634
  #: includes/class-wcj-product-custom-info.php:142
635
  #: includes/class-wcj-product-info.php:263
636
  #: includes/class-wcj-product-info.php:366
637
  #: includes/class-wcj-product-info.php:399
638
  #: includes/class-wcj-product-listings.php:471
639
- #: includes/class-wcj-shipping.php:256 includes/class-wcj-shipping.php:290
640
- #: includes/class-wcj-shipping.php:328
641
  msgid "Position"
642
  msgstr ""
643
 
@@ -676,7 +681,7 @@ msgid "Checkout Core Fields Options"
676
  msgstr ""
677
 
678
  #: includes/class-wcj-checkout-core-fields.php:225
679
- #: includes/classes/class-wcj-module.php:421
680
  msgid "enabled"
681
  msgstr ""
682
 
@@ -689,10 +694,10 @@ msgstr ""
689
 
690
  #: includes/class-wcj-checkout-core-fields.php:231
691
  #: includes/class-wcj-checkout-custom-fields.php:668
692
- #: includes/class-wcj-checkout-files-upload.php:561
693
- #: includes/class-wcj-orders.php:444
694
  #: includes/class-wcj-price-by-user-role.php:140
695
- #: includes/class-wcj-product-addons.php:413
696
  #: includes/class-wcj-product-bookings.php:417
697
  #: includes/class-wcj-product-open-pricing.php:178
698
  #: includes/class-wcj-product-price-by-formula.php:237
@@ -701,7 +706,7 @@ msgid "Enabled"
701
  msgstr ""
702
 
703
  #: includes/class-wcj-checkout-core-fields.php:232
704
- #: includes/class-wcj-pdf-invoicing.php:198
705
  #: includes/class-wcj-product-tabs.php:440
706
  msgid "Disabled"
707
  msgstr ""
@@ -712,7 +717,7 @@ msgid "required"
712
  msgstr ""
713
 
714
  #: includes/class-wcj-checkout-core-fields.php:245
715
- #: includes/class-wcj-checkout-files-upload.php:567
716
  #: includes/class-wcj-eu-vat-number.php:386
717
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:207
718
  msgid "Required"
@@ -774,10 +779,10 @@ msgstr ""
774
  #: includes/class-wcj-checkout-custom-fields.php:613
775
  #: includes/class-wcj-checkout-custom-fields.php:620
776
  #: includes/class-wcj-general.php:122
777
- #: includes/class-wcj-order-custom-statuses.php:241
778
- #: includes/class-wcj-order-custom-statuses.php:316
779
- #: includes/class-wcj-order-custom-statuses.php:323
780
- #: includes/class-wcj-orders.php:340 includes/class-wcj-orders.php:422
781
  #: includes/class-wcj-product-by-user.php:239
782
  #: includes/class-wcj-purchase-data.php:389 includes/class-wcj-sku.php:400
783
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:359
@@ -826,8 +831,8 @@ msgid "Number"
826
  msgstr ""
827
 
828
  #: includes/class-wcj-checkout-custom-fields.php:686
829
- #: includes/class-wcj-product-addons.php:442
830
- #: includes/class-wcj-product-addons.php:560
831
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:51
832
  msgid "Checkbox"
833
  msgstr ""
@@ -863,7 +868,7 @@ msgid "Password"
863
  msgstr ""
864
 
865
  #: includes/class-wcj-checkout-custom-fields.php:694
866
- #: includes/class-wcj-orders.php:119 includes/class-wcj-orders.php:421
867
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:59
868
  #: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:90
869
  #: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:104
@@ -875,7 +880,7 @@ msgid "State"
875
  msgstr ""
876
 
877
  #: includes/class-wcj-checkout-custom-fields.php:696
878
- #: includes/class-wcj-export-import.php:399
879
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:61
880
  #: includes/reports/wcj-class-reports-customers.php:92
881
  msgid "Email"
@@ -906,11 +911,11 @@ msgstr ""
906
  #: includes/class-wcj-eu-vat-number.php:452
907
  #: includes/class-wcj-price-by-user-role.php:137
908
  #: includes/class-wcj-price-by-user-role.php:180
909
- #: includes/class-wcj-product-add-to-cart.php:170
910
- #: includes/class-wcj-product-add-to-cart.php:180
911
- #: includes/class-wcj-product-addons.php:410
912
- #: includes/class-wcj-product-addons.php:432
913
- #: includes/class-wcj-product-addons.php:480
914
  #: includes/class-wcj-product-bookings.php:414
915
  #: includes/class-wcj-product-images.php:210
916
  #: includes/class-wcj-product-images.php:220
@@ -932,11 +937,11 @@ msgstr ""
932
  #: includes/class-wcj-checkout-custom-fields.php:722
933
  #: includes/class-wcj-price-by-user-role.php:138
934
  #: includes/class-wcj-price-by-user-role.php:181
935
- #: includes/class-wcj-product-add-to-cart.php:171
936
- #: includes/class-wcj-product-add-to-cart.php:181
937
- #: includes/class-wcj-product-addons.php:411
938
- #: includes/class-wcj-product-addons.php:433
939
- #: includes/class-wcj-product-addons.php:481
940
  #: includes/class-wcj-product-bookings.php:415
941
  #: includes/class-wcj-product-images.php:211
942
  #: includes/class-wcj-product-images.php:221
@@ -1070,7 +1075,7 @@ msgstr ""
1070
  #: includes/class-wcj-checkout-custom-fields.php:836
1071
  #: includes/class-wcj-checkout-custom-info.php:110
1072
  #: includes/class-wcj-empty-cart-button.php:117
1073
- #: includes/class-wcj-shipping.php:335
1074
  msgid "Billing"
1075
  msgstr ""
1076
 
@@ -1078,12 +1083,12 @@ msgstr ""
1078
  #: includes/class-wcj-checkout-custom-info.php:111
1079
  #: includes/class-wcj-empty-cart-button.php:118
1080
  #: includes/class-wcj-price-by-user-role.php:389
1081
- #: includes/class-wcj-shipping.php:26 includes/class-wcj-shipping.php:336
1082
  msgid "Shipping"
1083
  msgstr ""
1084
 
1085
  #: includes/class-wcj-checkout-custom-fields.php:838
1086
- #: includes/class-wcj-export-import.php:234
1087
  msgid "Order Notes"
1088
  msgstr ""
1089
 
@@ -1136,46 +1141,46 @@ msgid "Checkout Custom Info Blocks"
1136
  msgstr ""
1137
 
1138
  #: includes/class-wcj-checkout-custom-info.php:108
1139
- #: includes/class-wcj-checkout-files-upload.php:577
1140
  #: includes/class-wcj-empty-cart-button.php:115
1141
- #: includes/class-wcj-shipping.php:333
1142
  msgid "Before checkout form"
1143
  msgstr ""
1144
 
1145
  #: includes/class-wcj-checkout-custom-info.php:109
1146
  #: includes/class-wcj-empty-cart-button.php:116
1147
- #: includes/class-wcj-shipping.php:334
1148
  msgid "Before customer details"
1149
  msgstr ""
1150
 
1151
  #: includes/class-wcj-checkout-custom-info.php:112
1152
  #: includes/class-wcj-empty-cart-button.php:119
1153
- #: includes/class-wcj-shipping.php:337
1154
  msgid "After customer details"
1155
  msgstr ""
1156
 
1157
  #: includes/class-wcj-checkout-custom-info.php:113
1158
  #: includes/class-wcj-empty-cart-button.php:120
1159
- #: includes/class-wcj-shipping.php:338
1160
  msgid "Before order review"
1161
  msgstr ""
1162
 
1163
  #: includes/class-wcj-checkout-custom-info.php:114
1164
  #: includes/class-wcj-empty-cart-button.php:121
1165
- #: includes/class-wcj-shipping.php:339
1166
  msgid "Order review"
1167
  msgstr ""
1168
 
1169
  #: includes/class-wcj-checkout-custom-info.php:115
1170
  #: includes/class-wcj-empty-cart-button.php:122
1171
- #: includes/class-wcj-shipping.php:340
1172
  msgid "After order review"
1173
  msgstr ""
1174
 
1175
  #: includes/class-wcj-checkout-custom-info.php:116
1176
- #: includes/class-wcj-checkout-files-upload.php:578
1177
  #: includes/class-wcj-empty-cart-button.php:123
1178
- #: includes/class-wcj-shipping.php:341
1179
  msgid "After checkout form"
1180
  msgstr ""
1181
 
@@ -1188,19 +1193,19 @@ msgid "Let customers upload files on (or after) WooCommerce checkout."
1188
  msgstr ""
1189
 
1190
  #: includes/class-wcj-checkout-files-upload.php:88
1191
- #: includes/class-wcj-checkout-files-upload.php:559
1192
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:52
1193
  msgid "File"
1194
  msgstr ""
1195
 
1196
  #: includes/class-wcj-checkout-files-upload.php:110
1197
- #: includes/class-wcj-checkout-files-upload.php:644
1198
  msgid "File is required!"
1199
  msgstr ""
1200
 
1201
  #: includes/class-wcj-checkout-files-upload.php:120
1202
- #: includes/class-wcj-checkout-files-upload.php:252
1203
- #: includes/class-wcj-checkout-files-upload.php:637
1204
  msgid "Wrong file type: \"%s\"!"
1205
  msgstr ""
1206
 
@@ -1208,43 +1213,47 @@ msgstr ""
1208
  msgid "Uploaded Files"
1209
  msgstr ""
1210
 
1211
- #: includes/class-wcj-checkout-files-upload.php:224
1212
- #: includes/class-wcj-checkout-files-upload.php:232
1213
- #: includes/class-wcj-checkout-files-upload.php:667
 
 
 
 
1214
  msgid "File \"%s\" was successfully removed."
1215
  msgstr ""
1216
 
1217
- #: includes/class-wcj-checkout-files-upload.php:264
1218
- #: includes/class-wcj-checkout-files-upload.php:652
1219
  msgid "File \"%s\" was successfully uploaded."
1220
  msgstr ""
1221
 
1222
- #: includes/class-wcj-checkout-files-upload.php:272
1223
- #: includes/class-wcj-checkout-files-upload.php:659
1224
  msgid "Please select file to upload!"
1225
  msgstr ""
1226
 
1227
- #: includes/class-wcj-checkout-files-upload.php:428
1228
- #: includes/class-wcj-checkout-files-upload.php:429
1229
- #: includes/class-wcj-checkout-files-upload.php:622
1230
  msgid "Upload"
1231
  msgstr ""
1232
 
1233
- #: includes/class-wcj-checkout-files-upload.php:443
1234
- #: includes/class-wcj-checkout-files-upload.php:444
1235
- #: includes/class-wcj-checkout-files-upload.php:629
1236
  msgid "Remove"
1237
  msgstr ""
1238
 
1239
- #: includes/class-wcj-checkout-files-upload.php:538
1240
- #: includes/class-wcj-currency-per-product.php:279
1241
  #: includes/class-wcj-eu-vat-number.php:354
1242
- #: includes/class-wcj-multicurrency-product-base-price.php:226
1243
  #: includes/class-wcj-multicurrency.php:346
1244
  #: includes/class-wcj-payment-gateways-icons.php:95
1245
  #: includes/class-wcj-payment-gateways-per-category.php:166
1246
  #: includes/class-wcj-price-by-user-role.php:367
1247
- #: includes/class-wcj-product-addons.php:613
1248
  #: includes/class-wcj-product-bookings.php:490
1249
  #: includes/class-wcj-product-by-user.php:204
1250
  #: includes/class-wcj-related-products.php:98
@@ -1252,137 +1261,166 @@ msgstr ""
1252
  msgid "Options"
1253
  msgstr ""
1254
 
1255
- #: includes/class-wcj-checkout-files-upload.php:543
1256
  msgid "Total Files"
1257
  msgstr ""
1258
 
1259
- #: includes/class-wcj-checkout-files-upload.php:579
1260
  msgid "Do not add on checkout"
1261
  msgstr ""
1262
 
1263
- #: includes/class-wcj-checkout-files-upload.php:584
1264
  msgid "Position order"
1265
  msgstr ""
1266
 
1267
- #: includes/class-wcj-checkout-files-upload.php:593
1268
  msgid "Add to Thank You page"
1269
  msgstr ""
1270
 
1271
- #: includes/class-wcj-checkout-files-upload.php:599
1272
  msgid "Add to My Account page"
1273
  msgstr ""
1274
 
1275
- #: includes/class-wcj-checkout-files-upload.php:604
1276
- #: includes/class-wcj-order-custom-statuses.php:208
1277
- #: includes/class-wcj-order-custom-statuses.php:246
1278
- #: includes/class-wcj-orders.php:450
 
1279
  msgid "Label"
1280
  msgstr ""
1281
 
1282
- #: includes/class-wcj-checkout-files-upload.php:605
1283
  msgid "Leave blank to disable label"
1284
  msgstr ""
1285
 
1286
- #: includes/class-wcj-checkout-files-upload.php:607
1287
  msgid "Please select file to upload"
1288
  msgstr ""
1289
 
1290
- #: includes/class-wcj-checkout-files-upload.php:612
1291
  msgid "Accepted file types"
1292
  msgstr ""
1293
 
1294
- #: includes/class-wcj-checkout-files-upload.php:613
1295
  msgid ""
1296
  "Accepted file types. E.g.: \".jpg,.jpeg,.png\". Leave blank to accept all "
1297
  "files"
1298
  msgstr ""
1299
 
1300
- #: includes/class-wcj-checkout-files-upload.php:620
1301
  msgid "Label: Upload button"
1302
  msgstr ""
1303
 
1304
- #: includes/class-wcj-checkout-files-upload.php:627
1305
  msgid "Label: Remove button"
1306
  msgstr ""
1307
 
1308
- #: includes/class-wcj-checkout-files-upload.php:634
1309
  msgid "Notice: Wrong file type"
1310
  msgstr ""
1311
 
1312
- #: includes/class-wcj-checkout-files-upload.php:635
1313
- #: includes/class-wcj-checkout-files-upload.php:650
1314
- #: includes/class-wcj-checkout-files-upload.php:665
1315
  msgid "%s will be replaced with file name"
1316
  msgstr ""
1317
 
1318
- #: includes/class-wcj-checkout-files-upload.php:642
1319
  msgid "Notice: File is required"
1320
  msgstr ""
1321
 
1322
- #: includes/class-wcj-checkout-files-upload.php:649
1323
  msgid "Notice: File was successfully uploaded"
1324
  msgstr ""
1325
 
1326
- #: includes/class-wcj-checkout-files-upload.php:657
1327
  msgid "Notice: No file selected"
1328
  msgstr ""
1329
 
1330
- #: includes/class-wcj-checkout-files-upload.php:664
1331
  msgid "Notice: File was successfully removed"
1332
  msgstr ""
1333
 
1334
- #: includes/class-wcj-checkout-files-upload.php:673
1335
  msgid "PRODUCTS to show this field"
1336
  msgstr ""
1337
 
1338
- #: includes/class-wcj-checkout-files-upload.php:674
1339
  msgid ""
1340
  "To show this field only if at least one selected product is in cart, enter "
1341
  "products here. Leave blank to show for all products."
1342
  msgstr ""
1343
 
1344
- #: includes/class-wcj-checkout-files-upload.php:683
1345
  msgid "CATEGORIES to show this field"
1346
  msgstr ""
1347
 
1348
- #: includes/class-wcj-checkout-files-upload.php:684
1349
  msgid ""
1350
  "To show this field only if at least one product of selected category is in "
1351
  "cart, enter categories here. Leave blank to show for all products."
1352
  msgstr ""
1353
 
1354
- #: includes/class-wcj-checkout-files-upload.php:693
1355
  msgid "TAGS to show this field"
1356
  msgstr ""
1357
 
1358
- #: includes/class-wcj-checkout-files-upload.php:694
1359
  msgid ""
1360
  "To show this field only if at least one product of selected tag is in cart, "
1361
  "enter tags here. Leave blank to show for all products."
1362
  msgstr ""
1363
 
1364
- #: includes/class-wcj-checkout-files-upload.php:711
1365
  #: includes/class-wcj-product-input-fields.php:247
1366
  msgid "Emails Options"
1367
  msgstr ""
1368
 
1369
- #: includes/class-wcj-checkout-files-upload.php:716
1370
  #: includes/class-wcj-product-input-fields.php:253
1371
  msgid "Attach Files to Admin's New Order Emails"
1372
  msgstr ""
1373
 
1374
- #: includes/class-wcj-checkout-files-upload.php:717
1375
- #: includes/class-wcj-checkout-files-upload.php:724
1376
  #: includes/class-wcj-product-input-fields.php:254
1377
  #: includes/class-wcj-product-input-fields.php:262
1378
  msgid "Attach"
1379
  msgstr ""
1380
 
1381
- #: includes/class-wcj-checkout-files-upload.php:723
1382
  #: includes/class-wcj-product-input-fields.php:261
1383
  msgid "Attach Files to Customer's Processing Order Emails"
1384
  msgstr ""
1385
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1386
  #: includes/class-wcj-crowdfunding.php:26
1387
  msgid "Crowdfunding"
1388
  msgstr ""
@@ -1446,7 +1484,7 @@ msgid "Hide Currency Symbol"
1446
  msgstr ""
1447
 
1448
  #: includes/class-wcj-currencies.php:106
1449
- #: includes/class-wcj-pdf-invoicing.php:223
1450
  #: includes/class-wcj-product-bookings.php:496
1451
  #: includes/class-wcj-product-images.php:259
1452
  #: includes/class-wcj-product-images.php:266
@@ -1494,11 +1532,11 @@ msgid "Automatic currency exchange rates for WooCommerce."
1494
  msgstr ""
1495
 
1496
  #: includes/class-wcj-currency-exchange-rates.php:80
1497
- #: includes/class-wcj-currency-per-product.php:348
1498
- #: includes/class-wcj-multicurrency-product-base-price.php:295
1499
  #: includes/class-wcj-multicurrency.php:431
1500
  #: includes/class-wcj-payment-gateways-currency.php:275
1501
- #: includes/class-wcj-price-by-country.php:357
1502
  msgid "Grab %s rate from Yahoo.com"
1503
  msgstr ""
1504
 
@@ -1507,7 +1545,7 @@ msgid "%s seconds till next update."
1507
  msgstr ""
1508
 
1509
  #: includes/class-wcj-currency-exchange-rates.php:106
1510
- #: includes/class-wcj-price-by-country.php:317
1511
  msgid "Exchange Rates"
1512
  msgstr ""
1513
 
@@ -1518,11 +1556,11 @@ msgid ""
1518
  msgstr ""
1519
 
1520
  #: includes/class-wcj-currency-exchange-rates.php:113
1521
- #: includes/class-wcj-currency-per-product.php:284
1522
- #: includes/class-wcj-multicurrency-product-base-price.php:231
1523
  #: includes/class-wcj-multicurrency.php:351
1524
  #: includes/class-wcj-payment-gateways-currency.php:282
1525
- #: includes/class-wcj-price-by-country.php:320
1526
  msgid "Exchange Rates Updates"
1527
  msgstr ""
1528
 
@@ -1564,10 +1602,10 @@ msgid "Currency for External Products Options"
1564
  msgstr ""
1565
 
1566
  #: includes/class-wcj-currency-external-products.php:79
1567
- #: includes/class-wcj-currency-per-product.php:332
1568
- #: includes/class-wcj-multicurrency-product-base-price.php:279
1569
  #: includes/class-wcj-multicurrency.php:415
1570
- #: includes/class-wcj-price-by-country.php:307
1571
  #: includes/class-wcj-price-formats.php:135
1572
  msgid "Currency"
1573
  msgstr ""
@@ -1589,51 +1627,55 @@ msgctxt "Price range: from-to"
1589
  msgid "%1$s&ndash;%2$s"
1590
  msgstr ""
1591
 
1592
- #: includes/class-wcj-currency-per-product.php:235
1593
- #: includes/class-wcj-multicurrency-product-base-price.php:175
1594
  msgid "Product Currency"
1595
  msgstr ""
1596
 
1597
- #: includes/class-wcj-currency-per-product.php:289
1598
- #: includes/class-wcj-multicurrency-product-base-price.php:236
 
 
 
 
1599
  #: includes/class-wcj-multicurrency.php:356
1600
  #: includes/class-wcj-payment-gateways-currency.php:287
1601
- #: includes/class-wcj-price-by-country.php:325
1602
  msgid "Enter Rates Manually"
1603
  msgstr ""
1604
 
1605
- #: includes/class-wcj-currency-per-product.php:290
1606
- #: includes/class-wcj-multicurrency-product-base-price.php:237
1607
  #: includes/class-wcj-multicurrency.php:357
1608
  #: includes/class-wcj-payment-gateways-currency.php:288
1609
- #: includes/class-wcj-price-by-country.php:326
1610
  msgid "Automatically via Currency Exchange Rates module"
1611
  msgstr ""
1612
 
1613
- #: includes/class-wcj-currency-per-product.php:293
1614
- #: includes/class-wcj-multicurrency-product-base-price.php:240
1615
  #: includes/class-wcj-multicurrency.php:360
1616
  #: includes/class-wcj-payment-gateways-currency.php:291
1617
- #: includes/class-wcj-price-by-country.php:329
1618
  msgid "Visit"
1619
  msgstr ""
1620
 
1621
- #: includes/class-wcj-currency-per-product.php:293
1622
- #: includes/class-wcj-multicurrency-product-base-price.php:240
1623
  #: includes/class-wcj-multicurrency.php:360
1624
  #: includes/class-wcj-payment-gateways-currency.php:291
1625
- #: includes/class-wcj-price-by-country.php:329
1626
  msgid "Currency Exchange Rates module"
1627
  msgstr ""
1628
 
1629
- #: includes/class-wcj-currency-per-product.php:303
1630
- #: includes/class-wcj-multicurrency-product-base-price.php:250
1631
  #: includes/class-wcj-multicurrency.php:385
1632
  msgid "Currencies Options"
1633
  msgstr ""
1634
 
1635
- #: includes/class-wcj-currency-per-product.php:308
1636
- #: includes/class-wcj-multicurrency-product-base-price.php:255
1637
  #: includes/class-wcj-multicurrency.php:391
1638
  msgid "Total Currencies"
1639
  msgstr ""
@@ -1695,10 +1737,10 @@ msgstr ""
1695
  msgid "Admin Title Custom Email"
1696
  msgstr ""
1697
 
1698
- #: includes/class-wcj-emails.php:207 includes/class-wcj-shipping.php:194
1699
  #: includes/emails/class-wc-email-wcj-custom.php:30
1700
  #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:127
1701
- #: includes/shipping/class-wc-shipping-wcj-custom.php:41
1702
  msgid "Custom"
1703
  msgstr ""
1704
 
@@ -1901,176 +1943,180 @@ msgstr ""
1901
  msgid "Filter by Product Title"
1902
  msgstr ""
1903
 
1904
- #: includes/class-wcj-export-import.php:132
1905
- #: includes/class-wcj-wholesale-price.php:393
1906
- msgid "Show"
1907
- msgstr ""
1908
-
1909
- #: includes/class-wcj-export-import.php:149
1910
- msgid "Download CSV"
1911
- msgstr ""
1912
-
1913
- #: includes/class-wcj-export-import.php:203
1914
- msgid "Customer ID"
1915
- msgstr ""
1916
-
1917
- #: includes/class-wcj-export-import.php:204
1918
- msgid "Customer Email"
1919
- msgstr ""
1920
-
1921
- #: includes/class-wcj-export-import.php:205
1922
- msgid "Customer First Name"
1923
- msgstr ""
1924
-
1925
- #: includes/class-wcj-export-import.php:206
1926
- msgid "Customer Last Name"
1927
  msgstr ""
1928
 
1929
- #: includes/class-wcj-export-import.php:224
1930
  #: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:208
1931
  msgid "Order ID"
1932
  msgstr ""
1933
 
1934
- #: includes/class-wcj-export-import.php:225
1935
  msgid "Order Number"
1936
  msgstr ""
1937
 
1938
- #: includes/class-wcj-export-import.php:226
1939
  msgid "Order Status"
1940
  msgstr ""
1941
 
1942
- #: includes/class-wcj-export-import.php:227
1943
  msgid "Order Date"
1944
  msgstr ""
1945
 
1946
- #: includes/class-wcj-export-import.php:228
1947
  msgid "Order Item Count"
1948
  msgstr ""
1949
 
1950
- #: includes/class-wcj-export-import.php:229
1951
  msgid "Order Items"
1952
  msgstr ""
1953
 
1954
- #: includes/class-wcj-export-import.php:230
 
 
 
 
1955
  #: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:215
1956
  msgid "Order Currency"
1957
  msgstr ""
1958
 
1959
- #: includes/class-wcj-export-import.php:231
1960
  #: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:214
1961
  msgid "Order Total"
1962
  msgstr ""
1963
 
1964
- #: includes/class-wcj-export-import.php:232
1965
  msgid "Order Total Tax"
1966
  msgstr ""
1967
 
1968
- #: includes/class-wcj-export-import.php:233
1969
  msgid "Order Payment Method"
1970
  msgstr ""
1971
 
1972
- #: includes/class-wcj-export-import.php:235
1973
  msgid "Billing First Name"
1974
  msgstr ""
1975
 
1976
- #: includes/class-wcj-export-import.php:236
1977
  msgid "Billing Last Name"
1978
  msgstr ""
1979
 
1980
- #: includes/class-wcj-export-import.php:237
1981
  msgid "Billing Company"
1982
  msgstr ""
1983
 
1984
- #: includes/class-wcj-export-import.php:238
1985
  msgid "Billing Address 1"
1986
  msgstr ""
1987
 
1988
- #: includes/class-wcj-export-import.php:239
1989
  msgid "Billing Address 2"
1990
  msgstr ""
1991
 
1992
- #: includes/class-wcj-export-import.php:240
1993
  msgid "Billing City"
1994
  msgstr ""
1995
 
1996
- #: includes/class-wcj-export-import.php:241
1997
  msgid "Billing State"
1998
  msgstr ""
1999
 
2000
- #: includes/class-wcj-export-import.php:242
2001
  msgid "Billing Postcode"
2002
  msgstr ""
2003
 
2004
- #: includes/class-wcj-export-import.php:243
2005
  msgid "Billing Country"
2006
  msgstr ""
2007
 
2008
- #: includes/class-wcj-export-import.php:244
2009
  msgid "Billing Phone"
2010
  msgstr ""
2011
 
2012
- #: includes/class-wcj-export-import.php:245
2013
  msgid "Billing Email"
2014
  msgstr ""
2015
 
2016
- #: includes/class-wcj-export-import.php:246
2017
  msgid "Shipping First Name"
2018
  msgstr ""
2019
 
2020
- #: includes/class-wcj-export-import.php:247
2021
  msgid "Shipping Last Name"
2022
  msgstr ""
2023
 
2024
- #: includes/class-wcj-export-import.php:248
2025
  msgid "Shipping Company"
2026
  msgstr ""
2027
 
2028
- #: includes/class-wcj-export-import.php:249
2029
  msgid "Shipping Address 1"
2030
  msgstr ""
2031
 
2032
- #: includes/class-wcj-export-import.php:250
2033
  msgid "Shipping Address 2"
2034
  msgstr ""
2035
 
2036
- #: includes/class-wcj-export-import.php:251
2037
  msgid "Shipping City"
2038
  msgstr ""
2039
 
2040
- #: includes/class-wcj-export-import.php:252
2041
  msgid "Shipping State"
2042
  msgstr ""
2043
 
2044
- #: includes/class-wcj-export-import.php:253
2045
  msgid "Shipping Postcode"
2046
  msgstr ""
2047
 
2048
- #: includes/class-wcj-export-import.php:254
2049
  msgid "Shipping Country"
2050
  msgstr ""
2051
 
2052
- #: includes/class-wcj-export-import.php:346
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2053
  msgid "Product ID"
2054
  msgstr ""
2055
 
2056
- #: includes/class-wcj-export-import.php:347 includes/class-wcj-general.php:104
2057
  #: includes/class-wcj-general.php:118
2058
  #: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:72
2059
  #: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:106
2060
  msgid "Name"
2061
  msgstr ""
2062
 
2063
- #: includes/class-wcj-export-import.php:348 includes/class-wcj-sku.php:26
2064
  #: includes/class-wcj-sku.php:245
2065
  msgid "SKU"
2066
  msgstr ""
2067
 
2068
- #: includes/class-wcj-export-import.php:349
2069
  #: includes/reports/wcj-class-reports-stock.php:322
2070
  msgid "Stock"
2071
  msgstr ""
2072
 
2073
- #: includes/class-wcj-export-import.php:350
2074
  #: includes/class-wcj-multicurrency.php:76
2075
  #: includes/class-wcj-price-by-user-role.php:161
2076
  #: includes/class-wcj-product-by-user.php:162
@@ -2080,7 +2126,7 @@ msgstr ""
2080
  msgid "Regular Price"
2081
  msgstr ""
2082
 
2083
- #: includes/class-wcj-export-import.php:351
2084
  #: includes/class-wcj-multicurrency.php:85
2085
  #: includes/class-wcj-price-by-user-role.php:170
2086
  #: includes/class-wcj-product-by-user.php:163
@@ -2090,44 +2136,49 @@ msgstr ""
2090
  msgid "Sale Price"
2091
  msgstr ""
2092
 
2093
- #: includes/class-wcj-export-import.php:352
2094
  #: includes/reports/wcj-class-reports-stock.php:321
2095
  msgid "Price"
2096
  msgstr ""
2097
 
2098
- #: includes/class-wcj-export-import.php:353
2099
- #: includes/class-wcj-product-addons.php:437
2100
- #: includes/class-wcj-product-addons.php:554
2101
  #: includes/class-wcj-purchase-data.php:328
2102
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:44
2103
- #: includes/shipping/class-wc-shipping-wcj-custom.php:86
 
2104
  msgid "Type"
2105
  msgstr ""
2106
 
2107
- #: includes/class-wcj-export-import.php:398
2108
  msgid "Nr."
2109
  msgstr ""
2110
 
2111
- #: includes/class-wcj-export-import.php:400
2112
  msgid "First Name"
2113
  msgstr ""
2114
 
2115
- #: includes/class-wcj-export-import.php:401
2116
  msgid "Last Name"
2117
  msgstr ""
2118
 
2119
- #: includes/class-wcj-export-import.php:402
2120
  msgid "Last Order Date"
2121
  msgstr ""
2122
 
2123
- #: includes/class-wcj-export-import.php:445
2124
  msgid "Export Options"
2125
  msgstr ""
2126
 
2127
- #: includes/class-wcj-export-import.php:450
2128
  msgid "CSV Separator"
2129
  msgstr ""
2130
 
 
 
 
 
2131
  #: includes/class-wcj-general.php:25 includes/class-wcj-pdf-invoicing.php:26
2132
  msgid "General"
2133
  msgstr ""
@@ -2189,8 +2240,8 @@ msgid "Actions"
2189
  msgstr ""
2190
 
2191
  #: includes/class-wcj-general.php:110
2192
- #: includes/class-wcj-order-custom-statuses.php:211
2193
- #: includes/class-wcj-order-custom-statuses.php:232
2194
  #: includes/class-wcj-product-by-user.php:122
2195
  #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-display.php:116
2196
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:285
@@ -2212,7 +2263,7 @@ msgstr ""
2212
  #: includes/class-wcj-general.php:203 includes/class-wcj-general.php:245
2213
  #: includes/class-wcj-product-bulk-price-converter.php:149
2214
  #: includes/class-wcj-sku.php:243
2215
- #: includes/reports/wcj-class-reports-sales.php:132
2216
  #: includes/reports/wcj-class-reports-stock.php:319
2217
  msgid "Product"
2218
  msgstr ""
@@ -2251,6 +2302,7 @@ msgstr ""
2251
  #: includes/class-wcj-general.php:326 includes/class-wcj-general.php:389
2252
  #: includes/class-wcj-general.php:403 includes/class-wcj-general.php:410
2253
  #: includes/class-wcj-general.php:417 includes/class-wcj-general.php:424
 
2254
  msgid "Disable"
2255
  msgstr ""
2256
 
@@ -2330,15 +2382,15 @@ msgstr ""
2330
  msgid "Mini Cart Custom Info Blocks"
2331
  msgstr ""
2332
 
2333
- #: includes/class-wcj-mini-cart.php:119 includes/class-wcj-shipping.php:295
2334
  msgid "Before mini cart"
2335
  msgstr ""
2336
 
2337
- #: includes/class-wcj-mini-cart.php:120 includes/class-wcj-shipping.php:296
2338
  msgid "Before buttons"
2339
  msgstr ""
2340
 
2341
- #: includes/class-wcj-mini-cart.php:121 includes/class-wcj-shipping.php:297
2342
  msgid "After mini cart"
2343
  msgstr ""
2344
 
@@ -2392,12 +2444,12 @@ msgid "Multicurrency on per Product Basis"
2392
  msgstr ""
2393
 
2394
  #: includes/class-wcj-multicurrency.php:368
2395
- #: includes/class-wcj-price-by-country.php:187
2396
  msgid "This will add meta boxes in product edit."
2397
  msgstr ""
2398
 
2399
  #: includes/class-wcj-multicurrency.php:374
2400
- #: includes/class-wcj-price-by-country.php:163
2401
  msgid "Revert Currency to Default on Checkout"
2402
  msgstr ""
2403
 
@@ -2411,7 +2463,7 @@ msgstr ""
2411
  msgid "Role Defaults"
2412
  msgstr ""
2413
 
2414
- #: includes/class-wcj-multicurrency.php:445 includes/class-wcj-orders.php:370
2415
  #: includes/class-wcj-price-by-user-role.php:404
2416
  msgid ""
2417
  "Custom roles can be added via \"Add/Manage Custom Roles\" tool in Booster's "
@@ -2423,7 +2475,7 @@ msgid "Roles"
2423
  msgstr ""
2424
 
2425
  #: includes/class-wcj-multicurrency.php:451
2426
- #: includes/class-wcj-wholesale-price.php:484
2427
  msgid "Save settings after you change this option. Leave blank to disable."
2428
  msgstr ""
2429
 
@@ -2472,7 +2524,7 @@ msgid "Custom statuses for WooCommerce orders."
2472
  msgstr ""
2473
 
2474
  #: includes/class-wcj-order-custom-statuses.php:33
2475
- #: includes/class-wcj-order-custom-statuses.php:301
2476
  msgid "Custom Statuses"
2477
  msgstr ""
2478
 
@@ -2480,140 +2532,140 @@ msgstr ""
2480
  msgid "Tool lets you add or delete any custom status for WooCommerce orders."
2481
  msgstr ""
2482
 
2483
- #: includes/class-wcj-order-custom-statuses.php:39
2484
  msgctxt "Order status"
2485
  msgid "Pending payment"
2486
  msgstr ""
2487
 
2488
- #: includes/class-wcj-order-custom-statuses.php:40
2489
- #: includes/functions/wcj-functions.php:971
2490
  msgctxt "Order status"
2491
  msgid "Processing"
2492
  msgstr ""
2493
 
2494
- #: includes/class-wcj-order-custom-statuses.php:41
2495
  msgctxt "Order status"
2496
  msgid "On hold"
2497
  msgstr ""
2498
 
2499
- #: includes/class-wcj-order-custom-statuses.php:42
2500
- #: includes/functions/wcj-functions.php:973
2501
  msgctxt "Order status"
2502
  msgid "Completed"
2503
  msgstr ""
2504
 
2505
- #: includes/class-wcj-order-custom-statuses.php:43
2506
- #: includes/functions/wcj-functions.php:974
2507
  msgctxt "Order status"
2508
  msgid "Cancelled"
2509
  msgstr ""
2510
 
2511
- #: includes/class-wcj-order-custom-statuses.php:44
2512
- #: includes/functions/wcj-functions.php:975
2513
  msgctxt "Order status"
2514
  msgid "Refunded"
2515
  msgstr ""
2516
 
2517
- #: includes/class-wcj-order-custom-statuses.php:45
2518
- #: includes/functions/wcj-functions.php:976
2519
  msgctxt "Order status"
2520
  msgid "Failed"
2521
  msgstr ""
2522
 
2523
- #: includes/class-wcj-order-custom-statuses.php:151
2524
  msgid "Status slug is empty. Status not added."
2525
  msgstr ""
2526
 
2527
- #: includes/class-wcj-order-custom-statuses.php:154
2528
  msgid "The length of status slug must be 17 or less characters."
2529
  msgstr ""
2530
 
2531
- #: includes/class-wcj-order-custom-statuses.php:157
2532
  msgid "Status label is empty. Status not added."
2533
  msgstr ""
2534
 
2535
- #: includes/class-wcj-order-custom-statuses.php:164
2536
  msgid "Duplicate slug. Status not added."
2537
  msgstr ""
2538
 
2539
- #: includes/class-wcj-order-custom-statuses.php:174
2540
  msgid "New status have been successfully added!"
2541
  msgstr ""
2542
 
2543
- #: includes/class-wcj-order-custom-statuses.php:176
2544
  msgid "Status was not added."
2545
  msgstr ""
2546
 
2547
- #: includes/class-wcj-order-custom-statuses.php:194
2548
  msgid "Status have been successfully deleted."
2549
  msgstr ""
2550
 
2551
- #: includes/class-wcj-order-custom-statuses.php:196
2552
  msgid "Delete failed."
2553
  msgstr ""
2554
 
2555
- #: includes/class-wcj-order-custom-statuses.php:201
2556
  msgid "Booster - Custom Statuses"
2557
  msgstr ""
2558
 
2559
- #: includes/class-wcj-order-custom-statuses.php:202
2560
  msgid ""
2561
  "The tool lets you add or delete any custom status for WooCommerce orders."
2562
  msgstr ""
2563
 
2564
- #: includes/class-wcj-order-custom-statuses.php:204
2565
  msgid "Statuses"
2566
  msgstr ""
2567
 
2568
- #: includes/class-wcj-order-custom-statuses.php:207
2569
  msgid "Slug"
2570
  msgstr ""
2571
 
2572
- #: includes/class-wcj-order-custom-statuses.php:209
2573
- #: includes/class-wcj-order-custom-statuses.php:247
2574
  msgid "Icon Code"
2575
  msgstr ""
2576
 
2577
- #: includes/class-wcj-order-custom-statuses.php:210
2578
- #: includes/class-wcj-order-custom-statuses.php:248
2579
  msgid "Icon Color"
2580
  msgstr ""
2581
 
2582
- #: includes/class-wcj-order-custom-statuses.php:245
2583
  msgid "Slug (without wc- prefix)"
2584
  msgstr ""
2585
 
2586
- #: includes/class-wcj-order-custom-statuses.php:249
2587
  msgid "You can check icon codes <a target=\"_blank\" href=\"%s\">here</a>."
2588
  msgstr ""
2589
 
2590
- #: includes/class-wcj-order-custom-statuses.php:273
2591
- #: includes/class-wcj-order-custom-statuses.php:274
2592
  msgid "Mark"
2593
  msgstr ""
2594
 
2595
- #: includes/class-wcj-order-custom-statuses.php:306
2596
- #: includes/gateways/class-wc-gateway-wcj-custom.php:133
2597
  msgid "Default Order Status"
2598
  msgstr ""
2599
 
2600
- #: includes/class-wcj-order-custom-statuses.php:307
2601
- #: includes/gateways/class-wc-gateway-wcj-custom.php:134
2602
  msgid "Enable Custom Statuses feature to add custom statuses to the list."
2603
  msgstr ""
2604
 
2605
- #: includes/class-wcj-order-custom-statuses.php:308
2606
  msgid ""
2607
  "You can change the default order status here. However payment gateways can "
2608
  "change this status immediatelly on order creation. E.g. BACS gateway will "
2609
  "change status to On-hold."
2610
  msgstr ""
2611
 
2612
- #: includes/class-wcj-order-custom-statuses.php:315
2613
  msgid "Add All Statuses to Admin Order Bulk Actions"
2614
  msgstr ""
2615
 
2616
- #: includes/class-wcj-order-custom-statuses.php:322
2617
  msgid "Add Custom Statuses to Admin Reports"
2618
  msgstr ""
2619
 
@@ -2755,108 +2807,139 @@ msgstr ""
2755
  #: includes/class-wcj-orders.php:26
2756
  msgid ""
2757
  "Minimum WooCommerce order amount (optionally by user role); orders auto-"
2758
- "complete; custom admin order list columns."
2759
  msgstr ""
2760
 
2761
- #: includes/class-wcj-orders.php:103
 
 
 
 
2762
  msgid "All countries"
2763
  msgstr ""
2764
 
2765
- #: includes/class-wcj-orders.php:305
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2766
  msgid "Order Minimum Amount"
2767
  msgstr ""
2768
 
2769
- #: includes/class-wcj-orders.php:307
2770
  msgid "This section lets you set minimum order amount."
2771
  msgstr ""
2772
 
2773
- #: includes/class-wcj-orders.php:311
2774
  msgid "Amount"
2775
  msgstr ""
2776
 
2777
- #: includes/class-wcj-orders.php:312
2778
  msgid "Minimum order amount. Set to 0 to disable."
2779
  msgstr ""
2780
 
2781
- #: includes/class-wcj-orders.php:322
2782
  msgid "Exclude Shipping from Cart Total"
2783
  msgstr ""
2784
 
2785
- #: includes/class-wcj-orders.php:323
2786
  msgid "Exclude"
2787
  msgstr ""
2788
 
2789
- #: includes/class-wcj-orders.php:329
2790
  msgid "Error message"
2791
  msgstr ""
2792
 
2793
- #: includes/class-wcj-orders.php:331 includes/class-wcj-orders.php:348
2794
  msgid ""
2795
  "Message to customer if order is below minimum amount. Default: You must have "
2796
  "an order with a minimum of %s to place your order, your current order total "
2797
  "is %s."
2798
  msgstr ""
2799
 
2800
- #: includes/class-wcj-orders.php:339
2801
  msgid "Add notice to cart page also"
2802
  msgstr ""
2803
 
2804
- #: includes/class-wcj-orders.php:346
2805
  msgid "Message on cart page"
2806
  msgstr ""
2807
 
2808
- #: includes/class-wcj-orders.php:356
2809
  msgid ""
2810
  "Stop customer from seeing the Checkout page if minimum amount not reached."
2811
  msgstr ""
2812
 
2813
- #: includes/class-wcj-orders.php:357
2814
  msgid "Redirect back to Cart page"
2815
  msgstr ""
2816
 
2817
- #: includes/class-wcj-orders.php:367
2818
  msgid "Order Minimum Amount by User Role"
2819
  msgstr ""
2820
 
2821
- #: includes/class-wcj-orders.php:397
2822
  msgid "Orders Auto-Complete"
2823
  msgstr ""
2824
 
2825
- #: includes/class-wcj-orders.php:399
2826
  msgid "This section lets you enable orders auto-complete function."
2827
  msgstr ""
2828
 
2829
- #: includes/class-wcj-orders.php:403
2830
  msgid "Auto-complete all WooCommerce orders"
2831
  msgstr ""
2832
 
2833
- #: includes/class-wcj-orders.php:405
2834
  msgid ""
2835
  "E.g. if you sell digital products then you are not shipping anything and you "
2836
  "may want auto-complete all your orders."
2837
  msgstr ""
2838
 
2839
- #: includes/class-wcj-orders.php:415 includes/class-wcj-purchase-data.php:382
2840
  msgid "Orders List Custom Columns"
2841
  msgstr ""
2842
 
2843
- #: includes/class-wcj-orders.php:417 includes/class-wcj-purchase-data.php:384
2844
  msgid "This section lets you add custom columns to WooCommerce orders list."
2845
  msgstr ""
2846
 
2847
- #: includes/class-wcj-orders.php:428
2848
  msgid "Custom Columns Total Number"
2849
  msgstr ""
2850
 
2851
- #: includes/class-wcj-orders.php:443
2852
  msgid "Custom Column"
2853
  msgstr ""
2854
 
2855
- #: includes/class-wcj-orders.php:457
2856
  msgid "Value"
2857
  msgstr ""
2858
 
2859
- #: includes/class-wcj-orders.php:458
2860
  msgid "You can use shortcodes here."
2861
  msgstr ""
2862
 
@@ -2870,24 +2953,24 @@ msgid ""
2870
  "to show up."
2871
  msgstr ""
2872
 
2873
- #: includes/class-wcj-payment-gateways-by-country.php:88
2874
  #: includes/class-wcj-payment-gateways-by-user-role.php:83
2875
  msgid "Leave empty to disable."
2876
  msgstr ""
2877
 
2878
- #: includes/class-wcj-payment-gateways-by-country.php:109
2879
  msgid "Include Countries"
2880
  msgstr ""
2881
 
2882
- #: includes/class-wcj-payment-gateways-by-country.php:121
2883
  msgid "Exclude Countries"
2884
  msgstr ""
2885
 
2886
- #: includes/class-wcj-payment-gateways-by-country.php:133
2887
  msgid "Include States (Base Country)"
2888
  msgstr ""
2889
 
2890
- #: includes/class-wcj-payment-gateways-by-country.php:145
2891
  msgid "Exclude States (Base Country)"
2892
  msgstr ""
2893
 
@@ -2967,14 +3050,14 @@ msgstr ""
2967
  #: includes/class-wcj-payment-gateways-fees.php:164
2968
  #: includes/class-wcj-purchase-data.php:332
2969
  #: includes/class-wcj-wholesale-price.php:260
2970
- #: includes/class-wcj-wholesale-price.php:412
2971
  msgid "Fixed"
2972
  msgstr ""
2973
 
2974
  #: includes/class-wcj-payment-gateways-fees.php:165
2975
  #: includes/class-wcj-purchase-data.php:333
2976
  #: includes/class-wcj-wholesale-price.php:259
2977
- #: includes/class-wcj-wholesale-price.php:411
2978
  msgid "Percent"
2979
  msgstr ""
2980
 
@@ -3030,7 +3113,7 @@ msgid ""
3030
  msgstr ""
3031
 
3032
  #: includes/class-wcj-payment-gateways-icons.php:97
3033
- #: includes/gateways/class-wc-gateway-wcj-custom.php:98
3034
  msgid ""
3035
  "If you want to show an image next to the gateway's name on the frontend, "
3036
  "enter a URL to an image."
@@ -3169,12 +3252,12 @@ msgid ""
3169
  "gateway are in WooCommerce > Settings > Checkout."
3170
  msgstr ""
3171
 
3172
- #: includes/class-wcj-payment-gateways.php:141
3173
  msgid "Admin Title Custom Gateway"
3174
  msgstr ""
3175
 
3176
- #: includes/class-wcj-payment-gateways.php:143
3177
- #: includes/gateways/class-wc-gateway-wcj-custom.php:346
3178
  msgid "Custom Gateway"
3179
  msgstr ""
3180
 
@@ -3206,23 +3289,23 @@ msgstr ""
3206
  msgid "Invoices Monthly Reports."
3207
  msgstr ""
3208
 
3209
- #: includes/class-wcj-pdf-invoicing.php:190
3210
  msgid "PDF Invoicing General Options"
3211
  msgstr ""
3212
 
3213
- #: includes/class-wcj-pdf-invoicing.php:199
3214
  msgid "Create on New Order"
3215
  msgstr ""
3216
 
3217
- #: includes/class-wcj-pdf-invoicing.php:202
3218
  msgid "Create on Order Status"
3219
  msgstr ""
3220
 
3221
- #: includes/class-wcj-pdf-invoicing.php:204
3222
  msgid "Manual Only"
3223
  msgstr ""
3224
 
3225
- #: includes/class-wcj-pdf-invoicing.php:222
3226
  msgid "Hide Disabled Docs Settings"
3227
  msgstr ""
3228
 
@@ -3236,146 +3319,174 @@ msgid ""
3236
  "country."
3237
  msgstr ""
3238
 
3239
- #: includes/class-wcj-price-by-country.php:123
 
 
 
 
3240
  msgid "Price by Country Options"
3241
  msgstr ""
3242
 
3243
- #: includes/class-wcj-price-by-country.php:125
3244
  msgid ""
3245
  "Change product's price and currency by customer's country. Customer's "
3246
  "country is detected automatically by IP, or selected by customer manually."
3247
  msgstr ""
3248
 
3249
- #: includes/class-wcj-price-by-country.php:130
3250
  msgid "Customer Country Detection Method"
3251
  msgstr ""
3252
 
3253
- #: includes/class-wcj-price-by-country.php:132
3254
  msgid ""
3255
  "If you choose \"by user selection\", use [wcj_country_select_drop_down_list] "
3256
  "shortcode to display country selection list on frontend."
3257
  msgstr ""
3258
 
3259
- #: includes/class-wcj-price-by-country.php:136
3260
  msgid "by IP"
3261
  msgstr ""
3262
 
3263
- #: includes/class-wcj-price-by-country.php:137
3264
  msgid "by IP, then by user selection"
3265
  msgstr ""
3266
 
3267
- #: includes/class-wcj-price-by-country.php:138
3268
  msgid "by user selection"
3269
  msgstr ""
3270
 
3271
- #: includes/class-wcj-price-by-country.php:155
 
 
 
 
 
 
 
 
3272
  msgid "Override Country with Customer's Checkout Billing Country"
3273
  msgstr ""
3274
 
3275
- #: includes/class-wcj-price-by-country.php:171
 
 
 
 
3276
  msgid "Price Rounding"
3277
  msgstr ""
3278
 
3279
- #: includes/class-wcj-price-by-country.php:172
3280
  msgid "If you choose to multiply price, set rounding options here."
3281
  msgstr ""
3282
 
3283
- #: includes/class-wcj-price-by-country.php:177
3284
  msgid "No rounding"
3285
  msgstr ""
3286
 
3287
- #: includes/class-wcj-price-by-country.php:178
3288
  msgid "Round"
3289
  msgstr ""
3290
 
3291
- #: includes/class-wcj-price-by-country.php:179
3292
  msgid "Round down"
3293
  msgstr ""
3294
 
3295
- #: includes/class-wcj-price-by-country.php:180
3296
  msgid "Round up"
3297
  msgstr ""
3298
 
3299
- #: includes/class-wcj-price-by-country.php:185
3300
  msgid "Price by Country on per Product Basis"
3301
  msgstr ""
3302
 
3303
- #: includes/class-wcj-price-by-country.php:194
3304
- msgid "Price Filter Widget Support"
3305
  msgstr ""
3306
 
3307
- #: includes/class-wcj-price-by-country.php:202
 
 
 
 
3308
  msgid "Add Countries Flags Images to Select Drop-Down Box"
3309
  msgstr ""
3310
 
3311
- #: includes/class-wcj-price-by-country.php:204
3312
  msgid ""
3313
  "If you are using [wcj_country_select_drop_down_list] shortcode or \"Booster: "
3314
  "Country Switcher\" widget, this will add country flags to these select boxes."
3315
  msgstr ""
3316
 
3317
- #: includes/class-wcj-price-by-country.php:213
 
 
 
 
 
 
 
 
3318
  msgid "Country Groups"
3319
  msgstr ""
3320
 
3321
- #: includes/class-wcj-price-by-country.php:219
3322
  msgid "Countries Selection"
3323
  msgstr ""
3324
 
3325
- #: includes/class-wcj-price-by-country.php:220
3326
  msgid "Choose how do you want to enter countries groups in admin."
3327
  msgstr ""
3328
 
3329
- #: includes/class-wcj-price-by-country.php:225
3330
  msgid "Comma separated list"
3331
  msgstr ""
3332
 
3333
- #: includes/class-wcj-price-by-country.php:226
3334
  msgid "Multiselect"
3335
  msgstr ""
3336
 
3337
- #: includes/class-wcj-price-by-country.php:227
3338
  msgid "Chosen select"
3339
  msgstr ""
3340
 
3341
- #: includes/class-wcj-price-by-country.php:232
3342
  msgid "Autogenerate Groups"
3343
  msgstr ""
3344
 
3345
- #: includes/class-wcj-price-by-country.php:237
3346
  msgid "Currencies supported in both PayPal and Yahoo Exchange Rates:"
3347
  msgstr ""
3348
 
3349
- #: includes/class-wcj-price-by-country.php:239
3350
- #: includes/class-wcj-price-by-country.php:244
3351
- #: includes/class-wcj-price-by-country.php:249
3352
  msgid "Generate"
3353
  msgstr ""
3354
 
3355
- #: includes/class-wcj-price-by-country.php:242
3356
  msgid "Currencies supported in Yahoo Exchange Rates:"
3357
  msgstr ""
3358
 
3359
- #: includes/class-wcj-price-by-country.php:247
3360
  msgid "All Countries and Currencies:"
3361
  msgstr ""
3362
 
3363
- #: includes/class-wcj-price-by-country.php:254
3364
  msgid "Groups Number"
3365
  msgstr ""
3366
 
3367
- #: includes/class-wcj-price-by-country.php:273
3368
  msgid ""
3369
  "Countries. List of comma separated country codes.<br>For country codes and "
3370
  "predifined sets visit <a href=\"http://booster.io/features/prices-and-"
3371
  "currencies-by-customers-country\" target=\"_blank\">http://booster.io</a>"
3372
  msgstr ""
3373
 
3374
- #: includes/class-wcj-price-by-country.php:349
3375
  msgid "Multiply Price by"
3376
  msgstr ""
3377
 
3378
- #: includes/class-wcj-price-by-country.php:372
3379
  #: includes/price-by-country/class-wcj-price-by-country-local.php:143
3380
  msgid "Make empty price"
3381
  msgstr ""
@@ -3709,102 +3820,132 @@ msgstr ""
3709
  msgid "Open external products on add to cart in new window."
3710
  msgstr ""
3711
 
3712
- #: includes/class-wcj-product-add-to-cart.php:173
3713
  msgid "Disable Add to Cart Button (Single Product Page)"
3714
  msgstr ""
3715
 
3716
- #: includes/class-wcj-product-add-to-cart.php:183
3717
  msgid "Disable Add to Cart Button (Category/Archives)"
3718
  msgstr ""
3719
 
3720
- #: includes/class-wcj-product-add-to-cart.php:273
 
 
 
 
 
 
 
 
 
 
 
 
3721
  msgid "Add to Cart Local Redirect Options"
3722
  msgstr ""
3723
 
3724
- #: includes/class-wcj-product-add-to-cart.php:275
3725
  msgid ""
3726
  "This section lets you set any local URL to redirect to after successfully "
3727
  "adding product to cart. Leave empty to redirect to checkout page (skipping "
3728
  "the cart page)."
3729
  msgstr ""
3730
 
3731
- #: includes/class-wcj-product-add-to-cart.php:279
3732
  msgid "Local Redirect"
3733
  msgstr ""
3734
 
3735
- #: includes/class-wcj-product-add-to-cart.php:286
3736
  msgid "Local Redirect URL"
3737
  msgstr ""
3738
 
3739
- #: includes/class-wcj-product-add-to-cart.php:287
3740
  msgid "Performs a safe (local) redirect, using wp_redirect()."
3741
  msgstr ""
3742
 
3743
- #: includes/class-wcj-product-add-to-cart.php:288
3744
  msgid "Local redirect URL. Leave empty to redirect to checkout."
3745
  msgstr ""
3746
 
3747
- #: includes/class-wcj-product-add-to-cart.php:299
3748
- #: includes/class-wcj-product-add-to-cart.php:305
3749
  msgid "Add to Cart on Visit"
3750
  msgstr ""
3751
 
3752
- #: includes/class-wcj-product-add-to-cart.php:301
3753
  msgid ""
3754
  "This section lets you enable automatically adding product to cart on "
3755
  "visiting the product page. Product is only added once, so if it is already "
3756
  "in cart - duplicate product is not added. "
3757
  msgstr ""
3758
 
3759
- #: includes/class-wcj-product-add-to-cart.php:316
3760
  msgid "Add to Cart Variable Product"
3761
  msgstr ""
3762
 
3763
- #: includes/class-wcj-product-add-to-cart.php:321
3764
  msgid "Display Radio Buttons Instead of Drop Box"
3765
  msgstr ""
3766
 
3767
- #: includes/class-wcj-product-add-to-cart.php:334
3768
  msgid "Add to Cart Quantity"
3769
  msgstr ""
3770
 
3771
- #: includes/class-wcj-product-add-to-cart.php:339
3772
  msgid "Disable Quantity Field for All Products"
3773
  msgstr ""
3774
 
3775
- #: includes/class-wcj-product-add-to-cart.php:340
3776
  msgid "Disable on Single Product Page"
3777
  msgstr ""
3778
 
3779
- #: includes/class-wcj-product-add-to-cart.php:347
3780
  msgid "Disable on Cart Page"
3781
  msgstr ""
3782
 
3783
- #: includes/class-wcj-product-add-to-cart.php:358
3784
- msgid "Add to Cart Button"
3785
  msgstr ""
3786
 
3787
- #: includes/class-wcj-product-add-to-cart.php:363
3788
- msgid "Enable/Disable Add to Cart Buttons on per Product Basis"
3789
  msgstr ""
3790
 
3791
- #: includes/class-wcj-product-add-to-cart.php:365
 
 
3792
  msgid "This will add meta box to each product's edit page"
3793
  msgstr ""
3794
 
3795
- #: includes/class-wcj-product-add-to-cart.php:375
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3796
  msgid "External Products"
3797
  msgstr ""
3798
 
3799
- #: includes/class-wcj-product-add-to-cart.php:380
3800
  msgid "Open External Products on Add to Cart in New Window"
3801
  msgstr ""
3802
 
3803
- #: includes/class-wcj-product-add-to-cart.php:381
3804
  msgid "Enable on Single Product Pages"
3805
  msgstr ""
3806
 
3807
- #: includes/class-wcj-product-add-to-cart.php:388
3808
  msgid "Enable on Category/Archive Pages"
3809
  msgstr ""
3810
 
@@ -3816,11 +3957,11 @@ msgstr ""
3816
  msgid "Add (paid/free/discount) addons to WooCommerce products."
3817
  msgstr ""
3818
 
3819
- #: includes/class-wcj-product-addons.php:76
3820
  msgid "Some of the required addons are not selected!"
3821
  msgstr ""
3822
 
3823
- #: includes/class-wcj-product-addons.php:91
3824
  msgid ""
3825
  "Booster: Free plugin's version is limited to only three products with per "
3826
  "product addons enabled at a time. You will need to get <a href=\"http://"
@@ -3828,103 +3969,129 @@ msgid ""
3828
  "number of products with per product addons."
3829
  msgstr ""
3830
 
3831
- #: includes/class-wcj-product-addons.php:417
3832
  #: includes/class-wcj-wholesale-price.php:269
3833
  #: includes/class-wcj-wholesale-price.php:304
3834
  msgid "Save product after you change this number."
3835
  msgstr ""
3836
 
3837
- #: includes/class-wcj-product-addons.php:420
3838
- #: includes/class-wcj-product-addons.php:531
3839
  msgid "Product Addons Total Number"
3840
  msgstr ""
3841
 
3842
- #: includes/class-wcj-product-addons.php:427
3843
- #: includes/class-wcj-product-addons.php:547
3844
  msgid "Product Addon"
3845
  msgstr ""
3846
 
3847
- #: includes/class-wcj-product-addons.php:443
3848
- #: includes/class-wcj-product-addons.php:561
3849
  msgid "Radio Buttons"
3850
  msgstr ""
3851
 
3852
- #: includes/class-wcj-product-addons.php:447
3853
- #: includes/class-wcj-product-addons.php:565
3854
  msgid "Label(s)"
3855
  msgstr ""
3856
 
3857
- #: includes/class-wcj-product-addons.php:448
3858
- #: includes/class-wcj-product-addons.php:455
3859
- #: includes/class-wcj-product-addons.php:462
3860
- #: includes/class-wcj-product-addons.php:566
3861
- #: includes/class-wcj-product-addons.php:574
3862
- #: includes/class-wcj-product-addons.php:583
3863
  msgid "For radio enter one value per line."
3864
  msgstr ""
3865
 
3866
- #: includes/class-wcj-product-addons.php:454
3867
- #: includes/class-wcj-product-addons.php:573
3868
  msgid "Price(s)"
3869
  msgstr ""
3870
 
3871
- #: includes/class-wcj-product-addons.php:461
3872
- #: includes/class-wcj-product-addons.php:582
3873
  msgid "Tooltip(s)"
3874
  msgstr ""
3875
 
3876
- #: includes/class-wcj-product-addons.php:468
3877
- #: includes/class-wcj-product-addons.php:590
3878
  #: includes/class-wcj-purchase-data.php:338
3879
  msgid "Default Value"
3880
  msgstr ""
3881
 
3882
- #: includes/class-wcj-product-addons.php:469
3883
- #: includes/class-wcj-product-addons.php:591
3884
  msgid ""
3885
  "For checkbox use 'checked'; for radio enter default label. Leave blank for "
3886
  "no default value."
3887
  msgstr ""
3888
 
3889
- #: includes/class-wcj-product-addons.php:475
3890
  msgid "Is required"
3891
  msgstr ""
3892
 
3893
- #: includes/class-wcj-product-addons.php:504
3894
  msgid "Enable per Product Addons"
3895
  msgstr ""
3896
 
3897
- #: includes/class-wcj-product-addons.php:506
3898
  msgid ""
3899
  "When enabled, this will add new \"Booster: Product Addons\" meta box to each "
3900
  "product's edit page."
3901
  msgstr ""
3902
 
3903
- #: includes/class-wcj-product-addons.php:518
3904
  msgid "All Product Options"
3905
  msgstr ""
3906
 
3907
- #: includes/class-wcj-product-addons.php:523
3908
  msgid "Enable All Products Addons"
3909
  msgstr ""
3910
 
3911
- #: includes/class-wcj-product-addons.php:525
3912
  msgid "When enabled, this will add addons below to all products."
3913
  msgstr ""
3914
 
3915
- #: includes/class-wcj-product-addons.php:532
3916
  msgid "Save changes after you change this number."
3917
  msgstr ""
3918
 
3919
- #: includes/class-wcj-product-addons.php:598
3920
  #: includes/class-wcj-product-by-user.php:190
3921
  msgid "Is Required"
3922
  msgstr ""
3923
 
3924
- #: includes/class-wcj-product-addons.php:618
3925
  msgid "Enable AJAX on Single Product Page"
3926
  msgstr ""
3927
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3928
  #: includes/class-wcj-product-bookings.php:27
3929
  msgid "Bookings"
3930
  msgstr ""
@@ -4087,7 +4254,7 @@ msgid "Products category"
4087
  msgstr ""
4088
 
4089
  #: includes/class-wcj-product-bulk-price-converter.php:261
4090
- #: includes/shortcodes/class-wcj-products-shortcodes.php:220
4091
  msgid "Any"
4092
  msgstr ""
4093
 
@@ -4116,7 +4283,7 @@ msgid "Product Visibility by Country"
4116
  msgstr ""
4117
 
4118
  #: includes/class-wcj-product-by-country.php:28
4119
- msgid "Display WooCommerce products by customers country."
4120
  msgstr ""
4121
 
4122
  #: includes/class-wcj-product-by-country.php:76
@@ -4125,8 +4292,8 @@ msgstr ""
4125
 
4126
  #: includes/class-wcj-product-by-country.php:90
4127
  msgid ""
4128
- "When enabled, module will add new \"Booster: Product by Country\" meta box "
4129
- "to each product's edit page."
4130
  msgstr ""
4131
 
4132
  #: includes/class-wcj-product-by-user-role.php:27
@@ -4134,17 +4301,21 @@ msgid "Product Visibility by User Role"
4134
  msgstr ""
4135
 
4136
  #: includes/class-wcj-product-by-user-role.php:28
4137
- msgid "Display WooCommerce products by customers user role."
4138
  msgstr ""
4139
 
4140
- #: includes/class-wcj-product-by-user-role.php:70
4141
  msgid "Visible for User Roles"
4142
  msgstr ""
4143
 
4144
- #: includes/class-wcj-product-by-user-role.php:84
 
 
 
 
4145
  msgid ""
4146
- "When enabled, module will add new \"Booster: Product by User Role\" meta box "
4147
- "to each product's edit page."
4148
  msgstr ""
4149
 
4150
  #: includes/class-wcj-product-by-user.php:27
@@ -4171,9 +4342,10 @@ msgstr ""
4171
  #: includes/class-wcj-product-tabs.php:542
4172
  #: includes/class-wcj-purchase-data.php:321
4173
  #: includes/class-wcj-related-products.php:123
4174
- #: includes/gateways/class-wc-gateway-wcj-custom.php:63
4175
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:214
4176
- #: includes/shipping/class-wc-shipping-wcj-custom.php:79
 
4177
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:259
4178
  msgid "Title"
4179
  msgstr ""
@@ -5037,7 +5209,7 @@ msgstr ""
5037
  #: includes/class-wcj-product-tabs.php:635
5038
  #: includes/class-wcj-product-tabs.php:644
5039
  #: includes/class-wcj-product-tabs.php:653
5040
- #: includes/classes/class-wcj-module.php:430
5041
  msgid "Depreciated"
5042
  msgstr ""
5043
 
@@ -5453,10 +5625,14 @@ msgstr ""
5453
  msgid "Make non clickable"
5454
  msgstr ""
5455
 
5456
- #: includes/class-wcj-shipping.php:28
5457
  msgid "Add multiple custom shipping methods to WooCommerce."
5458
  msgstr ""
5459
 
 
 
 
 
5460
  #: includes/class-wcj-shipping.php:29
5461
  msgid "Hide WooCommerce shipping when free is available."
5462
  msgstr ""
@@ -5465,113 +5641,182 @@ msgstr ""
5465
  msgid "Display \"left to free shipping\" info."
5466
  msgstr ""
5467
 
5468
- #: includes/class-wcj-shipping.php:77 includes/class-wcj-shipping.php:87
5469
- #: includes/class-wcj-shipping.php:97 includes/class-wcj-shipping.php:250
5470
- #: includes/class-wcj-shipping.php:284 includes/class-wcj-shipping.php:322
5471
- #: includes/functions/wcj-functions.php:398
5472
  #: includes/widgets/class-wcj-widget-left-to-free-shipping.php:53
5473
  msgid "%left_to_free% left to free shipping"
5474
  msgstr ""
5475
 
5476
- #: includes/class-wcj-shipping.php:148
5477
  msgid "Booster: Hide shipping"
5478
  msgstr ""
5479
 
5480
- #: includes/class-wcj-shipping.php:149 includes/class-wcj-shipping.php:221
5481
  msgid "Hide all when free is available"
5482
  msgstr ""
5483
 
5484
- #: includes/class-wcj-shipping.php:167
5485
  msgid "WooCommerce > Settings > Shipping"
5486
  msgstr ""
5487
 
5488
- #: includes/class-wcj-shipping.php:170
5489
- #: includes/shipping/class-wc-shipping-wcj-custom.php:82
 
5490
  msgid "Custom Shipping"
5491
  msgstr ""
5492
 
5493
- #: includes/class-wcj-shipping.php:173
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5494
  msgid "This section lets you set number of custom shipping methods to add."
5495
  msgstr ""
5496
 
5497
- #: includes/class-wcj-shipping.php:174
5498
  msgid "After setting the number, visit %s to set each method options."
5499
  msgstr ""
5500
 
5501
- #: includes/class-wcj-shipping.php:177
5502
  msgid "Custom Shipping Methods Number"
5503
  msgstr ""
5504
 
5505
- #: includes/class-wcj-shipping.php:192
5506
  msgid "Admin Title Custom Shipping"
5507
  msgstr ""
5508
 
5509
- #: includes/class-wcj-shipping.php:206
5510
  msgid "Hide if Free is Available"
5511
  msgstr ""
5512
 
5513
- #: includes/class-wcj-shipping.php:208
5514
  msgid ""
5515
  "This section lets you hide other shipping options when free shipping is "
5516
  "available on shop frontend."
5517
  msgstr ""
5518
 
5519
- #: includes/class-wcj-shipping.php:220
5520
  msgid "Hide shipping"
5521
  msgstr ""
5522
 
5523
- #: includes/class-wcj-shipping.php:232
5524
  msgid "Left to Free Shipping Info Options"
5525
  msgstr ""
5526
 
5527
- #: includes/class-wcj-shipping.php:234
5528
  msgid ""
5529
  "This section lets you enable info on cart, mini cart and checkout pages."
5530
  msgstr ""
5531
 
5532
- #: includes/class-wcj-shipping.php:235
5533
  msgid ""
5534
  "You can also use <em>Booster - Left to Free Shipping</em> widget, <em>"
5535
  "[wcj_get_left_to_free_shipping content=\"\"]</em> shortcode or "
5536
  "<em>wcj_get_left_to_free_shipping( $content );</em> function."
5537
  msgstr ""
5538
 
5539
- #: includes/class-wcj-shipping.php:236
5540
  msgid ""
5541
  "In content you can use: <em>%left_to_free%</em> and <em>"
5542
  "%free_shipping_min_amount%</em> shortcodes."
5543
  msgstr ""
5544
 
5545
- #: includes/class-wcj-shipping.php:240
5546
  msgid "Info on Cart"
5547
  msgstr ""
5548
 
5549
- #: includes/class-wcj-shipping.php:265 includes/class-wcj-shipping.php:303
5550
- #: includes/class-wcj-shipping.php:347
5551
  msgid "Position Order (Priority)"
5552
  msgstr ""
5553
 
5554
- #: includes/class-wcj-shipping.php:272
5555
  msgid "Info on Mini Cart"
5556
  msgstr ""
5557
 
5558
- #: includes/class-wcj-shipping.php:310
5559
  msgid "Info on Checkout"
5560
  msgstr ""
5561
 
5562
- #: includes/class-wcj-shipping.php:354
5563
  msgid "Message on Free Shipping Reached"
5564
  msgstr ""
5565
 
5566
- #: includes/class-wcj-shipping.php:355
5567
  msgid "You can set it empty"
5568
  msgstr ""
5569
 
5570
- #: includes/class-wcj-shipping.php:357
5571
- #: includes/functions/wcj-functions.php:438
5572
  msgid "You have Free delivery"
5573
  msgstr ""
5574
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5575
  #: includes/class-wcj-sku.php:27
5576
  msgid "Generate WooCommerce SKUs automatically."
5577
  msgstr ""
@@ -5688,78 +5933,78 @@ msgid ""
5688
  "Tool."
5689
  msgstr ""
5690
 
5691
- #: includes/class-wcj-sorting.php:27
5692
  msgid "Sorting"
5693
  msgstr ""
5694
 
5695
- #: includes/class-wcj-sorting.php:28
5696
  msgid ""
5697
  "Add more WooCommerce sorting options or remove all sorting including default."
5698
  msgstr ""
5699
 
5700
- #: includes/class-wcj-sorting.php:68
5701
  msgid "WooJetpack: Remove All Sorting"
5702
  msgstr ""
5703
 
5704
- #: includes/class-wcj-sorting.php:72
5705
  msgid "Completely remove sorting from the shop front end"
5706
  msgstr ""
5707
 
5708
- #: includes/class-wcj-sorting.php:167 includes/class-wcj-sorting.php:172
5709
  msgid "Remove All Sorting"
5710
  msgstr ""
5711
 
5712
- #: includes/class-wcj-sorting.php:173
5713
  msgid "Remove all sorting (including WooCommerce default)"
5714
  msgstr ""
5715
 
5716
- #: includes/class-wcj-sorting.php:185 includes/class-wcj-sorting.php:190
5717
  msgid "Add More Sorting"
5718
  msgstr ""
5719
 
5720
- #: includes/class-wcj-sorting.php:197
5721
  msgid "Sort by Name"
5722
  msgstr ""
5723
 
5724
- #: includes/class-wcj-sorting.php:198 includes/class-wcj-sorting.php:201
5725
  msgid "Sort by title: A to Z"
5726
  msgstr ""
5727
 
5728
- #: includes/class-wcj-sorting.php:199 includes/class-wcj-sorting.php:208
5729
- #: includes/class-wcj-sorting.php:217 includes/class-wcj-sorting.php:226
5730
- #: includes/class-wcj-sorting.php:244 includes/class-wcj-sorting.php:253
5731
  msgid "Text to show on frontend. Leave blank to disable."
5732
  msgstr ""
5733
 
5734
- #: includes/class-wcj-sorting.php:207 includes/class-wcj-sorting.php:210
5735
  msgid "Sort by title: Z to A"
5736
  msgstr ""
5737
 
5738
- #: includes/class-wcj-sorting.php:215
5739
  msgid "Sort by SKU"
5740
  msgstr ""
5741
 
5742
- #: includes/class-wcj-sorting.php:216 includes/class-wcj-sorting.php:219
5743
  msgid "Sort by SKU: low to high"
5744
  msgstr ""
5745
 
5746
- #: includes/class-wcj-sorting.php:225 includes/class-wcj-sorting.php:228
5747
  msgid "Sort by SKU: high to low"
5748
  msgstr ""
5749
 
5750
- #: includes/class-wcj-sorting.php:234
5751
  msgid "Sort SKUs as numbers instead of as texts"
5752
  msgstr ""
5753
 
5754
- #: includes/class-wcj-sorting.php:242
5755
  msgid "Sort by stock quantity"
5756
  msgstr ""
5757
 
5758
- #: includes/class-wcj-sorting.php:243 includes/class-wcj-sorting.php:246
5759
  msgid "Sort by stock quantity: low to high"
5760
  msgstr ""
5761
 
5762
- #: includes/class-wcj-sorting.php:252 includes/class-wcj-sorting.php:255
5763
  msgid "Sort by stock quantity: high to low"
5764
  msgstr ""
5765
 
@@ -5778,14 +6023,14 @@ msgid "Enable per Product Levels"
5778
  msgstr ""
5779
 
5780
  #: includes/class-wcj-wholesale-price.php:262
5781
- #: includes/class-wcj-wholesale-price.php:406
5782
  msgid "Discount Type"
5783
  msgstr ""
5784
 
5785
  #: includes/class-wcj-wholesale-price.php:268
5786
  #: includes/class-wcj-wholesale-price.php:303
5787
- #: includes/class-wcj-wholesale-price.php:442
5788
- #: includes/class-wcj-wholesale-price.php:497
5789
  msgid "Number of levels"
5790
  msgstr ""
5791
 
@@ -5805,17 +6050,17 @@ msgstr ""
5805
 
5806
  #: includes/class-wcj-wholesale-price.php:283
5807
  #: includes/class-wcj-wholesale-price.php:318
5808
- #: includes/class-wcj-wholesale-price.php:455
5809
- #: includes/class-wcj-wholesale-price.php:511
5810
  msgid "Min quantity"
5811
  msgstr ""
5812
 
5813
  #: includes/class-wcj-wholesale-price.php:290
5814
  #: includes/class-wcj-wholesale-price.php:325
5815
- #: includes/class-wcj-wholesale-price.php:463
5816
  #: includes/class-wcj-wholesale-price.php:464
5817
- #: includes/class-wcj-wholesale-price.php:519
5818
  #: includes/class-wcj-wholesale-price.php:520
 
5819
  msgid "Discount"
5820
  msgstr ""
5821
 
@@ -5841,43 +6086,51 @@ msgstr ""
5841
  msgid "Show discount info on cart page"
5842
  msgstr ""
5843
 
 
 
 
 
5844
  #: includes/class-wcj-wholesale-price.php:399
5845
  msgid "If show discount info on cart page is enabled, set format here"
5846
  msgstr ""
5847
 
5848
- #: includes/class-wcj-wholesale-price.php:416
5849
- msgid "Products to include"
5850
  msgstr ""
5851
 
5852
  #: includes/class-wcj-wholesale-price.php:417
 
 
 
 
5853
  msgid "Leave blank to include all products."
5854
  msgstr ""
5855
 
5856
- #: includes/class-wcj-wholesale-price.php:425
5857
  msgid "Products to exclude"
5858
  msgstr ""
5859
 
5860
- #: includes/class-wcj-wholesale-price.php:437
5861
  msgid "Wholesale Levels Options"
5862
  msgstr ""
5863
 
5864
- #: includes/class-wcj-wholesale-price.php:456
5865
- #: includes/class-wcj-wholesale-price.php:512
5866
  msgid "Minimum quantity to apply discount"
5867
  msgstr ""
5868
 
5869
- #: includes/class-wcj-wholesale-price.php:477
5870
  msgid "Additional User Roles Options"
5871
  msgstr ""
5872
 
5873
- #: includes/class-wcj-wholesale-price.php:479
5874
  msgid ""
5875
  "If you want to set different wholesale pricing options for different user "
5876
  "roles, fill this section. Please note that you can also use Booster's "
5877
  "\"Price by User Role\" module without filling this section."
5878
  msgstr ""
5879
 
5880
- #: includes/class-wcj-wholesale-price.php:483
5881
  msgid "User Roles Settings"
5882
  msgstr ""
5883
 
@@ -5889,11 +6142,11 @@ msgstr ""
5889
  msgid "Booster for WooCommerce basic WPML support."
5890
  msgstr ""
5891
 
5892
- #: includes/class-wcj-wpml.php:66 includes/classes/class-wcj-module.php:342
5893
  msgid "Tools"
5894
  msgstr ""
5895
 
5896
- #: includes/class-wcj-wpml.php:71 includes/classes/class-wcj-module.php:348
5897
  msgid "Module Tools"
5898
  msgstr ""
5899
 
@@ -5914,35 +6167,35 @@ msgstr ""
5914
  msgid "Settings have been reset to defaults."
5915
  msgstr ""
5916
 
5917
- #: includes/classes/class-wcj-module.php:330
5918
  msgid "Back to Module Settings"
5919
  msgstr ""
5920
 
5921
- #: includes/classes/class-wcj-module.php:422
5922
  msgid "disabled"
5923
  msgstr ""
5924
 
5925
- #: includes/classes/class-wcj-module.php:468
5926
  msgid "Reset Settings"
5927
  msgstr ""
5928
 
5929
- #: includes/classes/class-wcj-module.php:474
5930
  msgid "Reset Module to Default Settings"
5931
  msgstr ""
5932
 
5933
- #: includes/classes/class-wcj-module.php:475
5934
  msgid "Reset Submodule to Default Settings"
5935
  msgstr ""
5936
 
5937
- #: includes/classes/class-wcj-module.php:478
5938
  msgid "Reset settings"
5939
  msgstr ""
5940
 
5941
- #: includes/classes/class-wcj-module.php:512
5942
  msgid "Module Options"
5943
  msgstr ""
5944
 
5945
- #: includes/classes/class-wcj-module.php:519
5946
  msgid "Enable Module"
5947
  msgstr ""
5948
 
@@ -6614,33 +6867,33 @@ msgstr ""
6614
  msgid "[{site_title}] Custom Subject - Order ({order_number}) - {order_date}"
6615
  msgstr ""
6616
 
6617
- #: includes/emails/class-wc-email-wcj-custom.php:216
6618
  msgid "New order (%s)"
6619
  msgstr ""
6620
 
6621
- #: includes/emails/class-wc-email-wcj-custom.php:217
6622
  msgid "Order status updated to %s"
6623
  msgstr ""
6624
 
6625
- #: includes/emails/class-wc-email-wcj-custom.php:220
6626
  msgid "Order status %s to %s"
6627
  msgstr ""
6628
 
6629
- #: includes/emails/class-wc-email-wcj-custom.php:227
6630
- #: includes/gateways/class-wc-gateway-wcj-custom.php:56
6631
- #: includes/shipping/class-wc-shipping-wcj-custom.php:73
6632
  msgid "Enable/Disable"
6633
  msgstr ""
6634
 
6635
- #: includes/emails/class-wc-email-wcj-custom.php:229
6636
  msgid "Enable this email notification"
6637
  msgstr ""
6638
 
6639
- #: includes/emails/class-wc-email-wcj-custom.php:233
6640
  msgid "Trigger(s)"
6641
  msgstr ""
6642
 
6643
- #: includes/emails/class-wc-email-wcj-custom.php:237
6644
  msgid ""
6645
  "Please note, that all new orders in WooCommerce by default are created with "
6646
  "Pending Payment status. If you want to change the default order status - you "
@@ -6648,78 +6901,94 @@ msgid ""
6648
  "Settings > Booster > Shipping & Orders > Order Custom Statuses)."
6649
  msgstr ""
6650
 
6651
- #: includes/emails/class-wc-email-wcj-custom.php:240
6652
  msgid "New order (Any status)"
6653
  msgstr ""
6654
 
6655
- #: includes/emails/class-wc-email-wcj-custom.php:245
6656
  msgid "Reset password notification"
6657
  msgstr ""
6658
 
6659
- #: includes/emails/class-wc-email-wcj-custom.php:246
6660
  msgid "Order fully refunded notification"
6661
  msgstr ""
6662
 
6663
- #: includes/emails/class-wc-email-wcj-custom.php:247
6664
  msgid "Order partially refunded notification"
6665
  msgstr ""
6666
 
6667
- #: includes/emails/class-wc-email-wcj-custom.php:248
6668
  msgid "New customer note notification"
6669
  msgstr ""
6670
 
6671
- #: includes/emails/class-wc-email-wcj-custom.php:256
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6672
  msgid "Recipient(s)"
6673
  msgstr ""
6674
 
6675
- #: includes/emails/class-wc-email-wcj-custom.php:258
6676
  msgid ""
6677
  "Enter recipients (comma separated) for this email. Defaults to <code>%s</"
6678
  "code>."
6679
  msgstr ""
6680
 
6681
- #: includes/emails/class-wc-email-wcj-custom.php:258
6682
  msgid "Or enter <code>%customer%</code> to send to customer billing email."
6683
  msgstr ""
6684
 
6685
- #: includes/emails/class-wc-email-wcj-custom.php:263
6686
  msgid "Subject"
6687
  msgstr ""
6688
 
6689
- #: includes/emails/class-wc-email-wcj-custom.php:265
6690
  msgid ""
6691
  "This controls the email subject line. Leave blank to use the default "
6692
  "subject: <code>%s</code>."
6693
  msgstr ""
6694
 
6695
- #: includes/emails/class-wc-email-wcj-custom.php:270
6696
  msgid "Email Heading"
6697
  msgstr ""
6698
 
6699
- #: includes/emails/class-wc-email-wcj-custom.php:272
6700
  msgid ""
6701
  "This controls the main heading contained within the email notification. "
6702
  "Leave blank to use the default heading: <code>%s</code>."
6703
  msgstr ""
6704
 
6705
- #: includes/emails/class-wc-email-wcj-custom.php:277
6706
  msgid "Email type"
6707
  msgstr ""
6708
 
6709
- #: includes/emails/class-wc-email-wcj-custom.php:279
6710
  msgid "Choose which format of email to send."
6711
  msgstr ""
6712
 
6713
- #: includes/emails/class-wc-email-wcj-custom.php:285
6714
  msgid "HTML template"
6715
  msgstr ""
6716
 
6717
- #: includes/emails/class-wc-email-wcj-custom.php:287
6718
- #: includes/emails/class-wc-email-wcj-custom.php:296
6719
  msgid "You can use shortcodes here. E.g. Booster's order shortcodes."
6720
  msgstr ""
6721
 
6722
- #: includes/emails/class-wc-email-wcj-custom.php:294
6723
  msgid "Plain text template"
6724
  msgstr ""
6725
 
@@ -7719,97 +7988,97 @@ msgstr ""
7719
  msgid "Zimbabwe"
7720
  msgstr ""
7721
 
7722
- #: includes/functions/wcj-functions.php:459
7723
  msgid "Before cart"
7724
  msgstr ""
7725
 
7726
- #: includes/functions/wcj-functions.php:460
7727
  msgid "Before cart table"
7728
  msgstr ""
7729
 
7730
- #: includes/functions/wcj-functions.php:461
7731
  msgid "Before cart contents"
7732
  msgstr ""
7733
 
7734
- #: includes/functions/wcj-functions.php:462
7735
  msgid "Cart contents"
7736
  msgstr ""
7737
 
7738
- #: includes/functions/wcj-functions.php:463
7739
  msgid "Cart coupon"
7740
  msgstr ""
7741
 
7742
- #: includes/functions/wcj-functions.php:464
7743
  msgid "Cart actions"
7744
  msgstr ""
7745
 
7746
- #: includes/functions/wcj-functions.php:465
7747
  msgid "After cart contents"
7748
  msgstr ""
7749
 
7750
- #: includes/functions/wcj-functions.php:466
7751
  msgid "After cart table"
7752
  msgstr ""
7753
 
7754
- #: includes/functions/wcj-functions.php:467
7755
  msgid "Cart collaterals"
7756
  msgstr ""
7757
 
7758
- #: includes/functions/wcj-functions.php:468
7759
  msgid "After cart"
7760
  msgstr ""
7761
 
7762
- #: includes/functions/wcj-functions.php:470
7763
  msgid "Before cart totals"
7764
  msgstr ""
7765
 
7766
- #: includes/functions/wcj-functions.php:471
7767
  msgid "Cart totals: Before shipping"
7768
  msgstr ""
7769
 
7770
- #: includes/functions/wcj-functions.php:472
7771
  msgid "Cart totals: After shipping"
7772
  msgstr ""
7773
 
7774
- #: includes/functions/wcj-functions.php:473
7775
  msgid "Cart totals: Before order total"
7776
  msgstr ""
7777
 
7778
- #: includes/functions/wcj-functions.php:474
7779
  msgid "Cart totals: After order total"
7780
  msgstr ""
7781
 
7782
- #: includes/functions/wcj-functions.php:475
7783
  msgid "Proceed to checkout"
7784
  msgstr ""
7785
 
7786
- #: includes/functions/wcj-functions.php:476
7787
  msgid "After cart totals"
7788
  msgstr ""
7789
 
7790
- #: includes/functions/wcj-functions.php:478
7791
  msgid "Before shipping calculator"
7792
  msgstr ""
7793
 
7794
- #: includes/functions/wcj-functions.php:479
7795
  msgid "After shipping calculator"
7796
  msgstr ""
7797
 
7798
- #: includes/functions/wcj-functions.php:481
7799
  msgid "If cart is empty"
7800
  msgstr ""
7801
 
7802
- #: includes/functions/wcj-functions.php:735
7803
- #: includes/functions/wcj-functions.php:754
7804
  msgid "Guest"
7805
  msgstr ""
7806
 
7807
- #: includes/functions/wcj-functions.php:970
7808
  msgctxt "Order status"
7809
  msgid "Pending Payment"
7810
  msgstr ""
7811
 
7812
- #: includes/functions/wcj-functions.php:972
7813
  msgctxt "Order status"
7814
  msgid "On Hold"
7815
  msgstr ""
@@ -7854,118 +8123,119 @@ msgstr ""
7854
  msgid "Custom Documents"
7855
  msgstr ""
7856
 
7857
- #: includes/gateways/class-wc-gateway-wcj-custom.php:58
7858
  msgid "Enable Custom Payment"
7859
  msgstr ""
7860
 
7861
- #: includes/gateways/class-wc-gateway-wcj-custom.php:65
7862
- #: includes/shipping/class-wc-shipping-wcj-custom.php:81
 
7863
  msgid "This controls the title which the user sees during checkout."
7864
  msgstr ""
7865
 
7866
- #: includes/gateways/class-wc-gateway-wcj-custom.php:66
7867
  msgid "Custom Payment"
7868
  msgstr ""
7869
 
7870
- #: includes/gateways/class-wc-gateway-wcj-custom.php:73
7871
  msgid "Payment method description that the customer will see on your checkout."
7872
  msgstr ""
7873
 
7874
- #: includes/gateways/class-wc-gateway-wcj-custom.php:74
7875
  msgid "You can add input fields with [wcj_input_field] shortcode."
7876
  msgstr ""
7877
 
7878
- #: includes/gateways/class-wc-gateway-wcj-custom.php:75
7879
  msgid "Custom Payment Description."
7880
  msgstr ""
7881
 
7882
- #: includes/gateways/class-wc-gateway-wcj-custom.php:80
7883
  msgid "Instructions"
7884
  msgstr ""
7885
 
7886
- #: includes/gateways/class-wc-gateway-wcj-custom.php:82
7887
  msgid "Instructions that will be added to the thank you page."
7888
  msgstr ""
7889
 
7890
- #: includes/gateways/class-wc-gateway-wcj-custom.php:88
7891
  msgid "Email Instructions"
7892
  msgstr ""
7893
 
7894
- #: includes/gateways/class-wc-gateway-wcj-custom.php:90
7895
  msgid "Instructions that will be added to the emails."
7896
  msgstr ""
7897
 
7898
- #: includes/gateways/class-wc-gateway-wcj-custom.php:96
7899
  msgid "Icon"
7900
  msgstr ""
7901
 
7902
- #: includes/gateways/class-wc-gateway-wcj-custom.php:105
7903
  msgid "Minimum order amount"
7904
  msgstr ""
7905
 
7906
- #: includes/gateways/class-wc-gateway-wcj-custom.php:107
7907
  msgid ""
7908
- "If you want to set minimum order amount to show this gateway on frontend, "
7909
- "enter a number here. Set to 0 to disable."
7910
  msgstr ""
7911
 
7912
- #: includes/gateways/class-wc-gateway-wcj-custom.php:114
7913
  msgid "Enable for shipping methods"
7914
  msgstr ""
7915
 
7916
- #: includes/gateways/class-wc-gateway-wcj-custom.php:119
7917
  msgid ""
7918
  "If gateway is only available for certain shipping methods, set it up here. "
7919
  "Leave blank to enable for all methods."
7920
  msgstr ""
7921
 
7922
- #: includes/gateways/class-wc-gateway-wcj-custom.php:122
7923
  msgid "Select shipping methods"
7924
  msgstr ""
7925
 
7926
- #: includes/gateways/class-wc-gateway-wcj-custom.php:126
7927
  msgid "Enable for virtual orders"
7928
  msgstr ""
7929
 
7930
- #: includes/gateways/class-wc-gateway-wcj-custom.php:127
7931
  msgid "Enable gateway if the order is virtual"
7932
  msgstr ""
7933
 
7934
- #: includes/gateways/class-wc-gateway-wcj-custom.php:141
7935
  msgid "Send Additional Emails"
7936
  msgstr ""
7937
 
7938
- #: includes/gateways/class-wc-gateway-wcj-custom.php:142
7939
  msgid "Send to Admin"
7940
  msgstr ""
7941
 
7942
- #: includes/gateways/class-wc-gateway-wcj-custom.php:150
7943
  msgid "Send to Customer"
7944
  msgstr ""
7945
 
7946
- #: includes/gateways/class-wc-gateway-wcj-custom.php:151
7947
  msgid ""
7948
  "This may help if you are using pending or custom default status and not "
7949
  "getting new order emails."
7950
  msgstr ""
7951
 
7952
- #: includes/gateways/class-wc-gateway-wcj-custom.php:157
7953
  msgid "Custom Return URL (Thank You Page)"
7954
  msgstr ""
7955
 
7956
- #: includes/gateways/class-wc-gateway-wcj-custom.php:158
7957
  msgid "URL"
7958
  msgstr ""
7959
 
7960
- #: includes/gateways/class-wc-gateway-wcj-custom.php:159
7961
  msgid "Enter full URL with http(s)."
7962
  msgstr ""
7963
 
7964
- #: includes/gateways/class-wc-gateway-wcj-custom.php:160
7965
  msgid "Optional. Leave blank to use default URL."
7966
  msgstr ""
7967
 
7968
- #: includes/gateways/class-wc-gateway-wcj-custom.php:347
7969
  msgid "Booster for WooCommerce: Custom Payment Gateway"
7970
  msgstr ""
7971
 
@@ -8640,10 +8910,6 @@ msgstr ""
8640
  msgid "Reset Currency Rates"
8641
  msgstr ""
8642
 
8643
- #: includes/reports/wcj-class-reports-sales.php:177
8644
- msgid "Filter"
8645
- msgstr ""
8646
-
8647
  #: includes/reports/wcj-class-reports-stock.php:30
8648
  msgid "All Products on Stock"
8649
  msgstr ""
@@ -8743,66 +9009,78 @@ msgstr ""
8743
  msgid "Report was generated in: "
8744
  msgstr ""
8745
 
8746
- #: includes/shipping/class-wc-shipping-wcj-custom.php:42
 
8747
  msgid "Booster: Custom Shipping Method"
8748
  msgstr ""
8749
 
8750
- #: includes/shipping/class-wc-shipping-wcj-custom.php:75
8751
- msgid "Enable Custom Shipping"
8752
- msgstr ""
8753
-
8754
- #: includes/shipping/class-wc-shipping-wcj-custom.php:88
8755
  msgid "Cost calculation type."
8756
  msgstr ""
8757
 
8758
- #: includes/shipping/class-wc-shipping-wcj-custom.php:92
 
8759
  msgid "Flat Rate"
8760
  msgstr ""
8761
 
8762
- #: includes/shipping/class-wc-shipping-wcj-custom.php:93
 
8763
  msgid "By Total Cart Weight"
8764
  msgstr ""
8765
 
8766
- #: includes/shipping/class-wc-shipping-wcj-custom.php:94
 
8767
  msgid "By Total Cart Weight Table"
8768
  msgstr ""
8769
 
8770
- #: includes/shipping/class-wc-shipping-wcj-custom.php:95
 
8771
  msgid "By Total Cart Quantity"
8772
  msgstr ""
8773
 
8774
- #: includes/shipping/class-wc-shipping-wcj-custom.php:99
8775
- #: includes/shipping/class-wc-shipping-wcj-custom.php:125
 
 
8776
  msgid "Cost"
8777
  msgstr ""
8778
 
8779
- #: includes/shipping/class-wc-shipping-wcj-custom.php:101
 
8780
  msgid ""
8781
  "Cost. If calculating by weight - then cost per one weight unit. If "
8782
  "calculating by quantity - then cost per one piece."
8783
  msgstr ""
8784
 
8785
- #: includes/shipping/class-wc-shipping-wcj-custom.php:107
 
8786
  msgid "Weight Table Total Rows"
8787
  msgstr ""
8788
 
8789
- #: includes/shipping/class-wc-shipping-wcj-custom.php:109
 
8790
  msgid "Press Save changes after you change this number."
8791
  msgstr ""
8792
 
8793
- #: includes/shipping/class-wc-shipping-wcj-custom.php:118
 
8794
  msgid "Max Weight"
8795
  msgstr ""
8796
 
 
 
 
 
8797
  #: includes/shortcodes/class-wcj-input-field-shortcodes.php:52
8798
  msgid "Attribute \"name\" is required!"
8799
  msgstr ""
8800
 
8801
- #: includes/shortcodes/class-wcj-orders-shortcodes.php:86
8802
  msgid "Dollars"
8803
  msgstr ""
8804
 
8805
- #: includes/shortcodes/class-wcj-orders-shortcodes.php:87
8806
  msgid "Cents"
8807
  msgstr ""
8808
 
@@ -8838,11 +9116,11 @@ msgstr ""
8838
  msgid "Edit Product"
8839
  msgstr ""
8840
 
8841
- #: includes/shortcodes/class-wcj-products-shortcodes.php:188
8842
  msgid "%s ago"
8843
  msgstr ""
8844
 
8845
- #: includes/shortcodes/class-wcj-products-shortcodes.php:204
8846
  msgid "No sales yet."
8847
  msgstr ""
8848
 
@@ -8964,7 +9242,7 @@ msgid ""
8964
  "rating. Thank you, we couldn't have done it without you!"
8965
  msgstr ""
8966
 
8967
- #. #-#-#-#-# plugin.pot (Booster for WooCommerce 2.5.5) #-#-#-#-#
8968
  #. Plugin Name of the plugin/theme
8969
  #: woocommerce-jetpack.php:342
8970
  msgid "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.6\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/woocommerce-"
7
  "jetpack\n"
8
+ "POT-Creation-Date: 2016-11-23 18:32:02+00:00\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
29
  #: includes/admin/class-wc-settings-jetpack.php:347
30
  #: includes/class-wcj-checkout-files-upload.php:140
31
  #: includes/class-wcj-payment-gateways.php:55
32
+ #: includes/classes/class-wcj-module.php:182
33
+ #: includes/classes/class-wcj-module.php:371
34
  msgid "Booster"
35
  msgstr ""
36
 
123
  #: includes/admin/class-wcj-tools.php:75
124
  #: includes/class-wcj-eu-vat-number.php:373
125
  #: includes/class-wcj-product-by-user.php:159
126
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:76
127
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:151
128
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:266
129
  msgid "Description"
130
  msgstr ""
131
 
132
  #: includes/admin/class-wc-settings-jetpack.php:486
133
+ #: includes/classes/class-wcj-module.php:510
134
  msgid "Documentation"
135
  msgstr ""
136
 
204
  msgstr ""
205
 
206
  #: includes/admin/wcj-modules-cats.php:94
207
+ #: includes/class-wcj-payment-gateways-by-country.php:88
208
  #: includes/class-wcj-payment-gateways-by-user-role.php:81
209
  #: includes/class-wcj-payment-gateways-min-max.php:90
210
  msgid "Payment Gateways"
246
  #: includes/class-wcj-add-to-cart.php:212
247
  #: includes/class-wcj-product-images.php:252
248
  #: includes/class-wcj-product-images.php:326
249
+ #: includes/class-wcj-shipping.php:464 includes/class-wcj-shipping.php:496
250
  msgid "Enable Section"
251
  msgstr ""
252
 
285
  #: includes/class-wcj-add-to-cart.php:90
286
  #: includes/class-wcj-add-to-cart.php:101
287
  #: includes/class-wcj-add-to-cart.php:149
288
+ #: includes/class-wcj-add-to-cart.php:162 includes/class-wcj-sorting.php:196
289
+ #: includes/class-wcj-sorting.php:205 includes/class-wcj-sorting.php:214
290
+ #: includes/class-wcj-sorting.php:223 includes/class-wcj-sorting.php:241
291
+ #: includes/class-wcj-sorting.php:250
292
  msgid "Default: "
293
  msgstr ""
294
 
350
  msgstr ""
351
 
352
  #: includes/class-wcj-add-to-cart.php:180
353
+ #: includes/class-wcj-product-addons.php:528
354
  msgid "Per Product Options"
355
  msgstr ""
356
 
385
  msgstr ""
386
 
387
  #: includes/class-wcj-add-to-cart.php:257
388
+ #: includes/class-wcj-price-by-country.php:303
389
+ #: includes/class-wcj-price-by-country.php:314
390
+ #: includes/class-wcj-price-by-country.php:325
391
+ #: includes/class-wcj-price-by-country.php:379
392
  msgid "Group"
393
  msgstr ""
394
 
400
  #: includes/class-wcj-multicurrency.php:375
401
  #: includes/class-wcj-order-numbers.php:210
402
  #: includes/class-wcj-order-numbers.php:273
403
+ #: includes/class-wcj-order-numbers.php:281 includes/class-wcj-orders.php:353
404
+ #: includes/class-wcj-orders.php:474
405
+ #: includes/class-wcj-price-by-country.php:185
406
+ #: includes/class-wcj-price-by-country.php:207
407
+ #: includes/class-wcj-price-by-country.php:216
408
+ #: includes/class-wcj-price-by-country.php:226
409
  #: includes/class-wcj-price-by-user-role.php:373
410
  #: includes/class-wcj-price-by-user-role.php:390
411
  #: includes/class-wcj-price-labels.php:51
412
  #: includes/class-wcj-price-labels.php:749
413
+ #: includes/class-wcj-product-add-to-cart.php:248
414
+ #: includes/class-wcj-product-add-to-cart.php:348
415
+ #: includes/class-wcj-product-add-to-cart.php:374
416
+ #: includes/class-wcj-product-add-to-cart.php:390
417
+ #: includes/class-wcj-product-add-to-cart.php:432
418
+ #: includes/class-wcj-product-add-to-cart.php:449
419
+ #: includes/class-wcj-product-add-to-cart.php:466
420
+ #: includes/class-wcj-product-addons.php:456
421
+ #: includes/class-wcj-product-addons.php:534
422
+ #: includes/class-wcj-product-addons.php:553
423
+ #: includes/class-wcj-product-addons.php:577
424
+ #: includes/class-wcj-product-addons.php:648
425
  #: includes/class-wcj-product-by-user.php:232
426
  #: includes/class-wcj-product-info.php:256
427
  #: includes/class-wcj-product-info.php:351
442
  #: includes/class-wcj-shipping-calculator.php:123
443
  #: includes/class-wcj-shipping-calculator.php:130
444
  #: includes/class-wcj-shipping-calculator.php:137
445
+ #: includes/class-wcj-shipping.php:243 includes/class-wcj-shipping.php:330
446
+ #: includes/class-wcj-shipping.php:362 includes/class-wcj-shipping.php:400
447
+ #: includes/class-wcj-sku.php:385 includes/class-wcj-sku.php:393
448
+ #: includes/class-wcj-sorting.php:189
449
  #: includes/class-wcj-wholesale-price.php:372
450
  #: includes/class-wcj-wholesale-price.php:379
451
  #: includes/class-wcj-wholesale-price.php:386
627
  #: includes/class-wcj-mini-cart.php:106
628
  #: includes/class-wcj-product-custom-info.php:135
629
  #: includes/class-wcj-product-tabs.php:431
630
+ #: includes/class-wcj-product-tabs.php:557 includes/class-wcj-shipping.php:337
631
+ #: includes/class-wcj-shipping.php:371 includes/class-wcj-shipping.php:409
632
  msgid "Content"
633
  msgstr ""
634
 
635
  #: includes/class-wcj-cart.php:167
636
  #: includes/class-wcj-checkout-custom-info.php:102
637
+ #: includes/class-wcj-checkout-files-upload.php:623
638
  #: includes/class-wcj-mini-cart.php:114
639
  #: includes/class-wcj-product-custom-info.php:142
640
  #: includes/class-wcj-product-info.php:263
641
  #: includes/class-wcj-product-info.php:366
642
  #: includes/class-wcj-product-info.php:399
643
  #: includes/class-wcj-product-listings.php:471
644
+ #: includes/class-wcj-shipping.php:345 includes/class-wcj-shipping.php:379
645
+ #: includes/class-wcj-shipping.php:417
646
  msgid "Position"
647
  msgstr ""
648
 
681
  msgstr ""
682
 
683
  #: includes/class-wcj-checkout-core-fields.php:225
684
+ #: includes/classes/class-wcj-module.php:423
685
  msgid "enabled"
686
  msgstr ""
687
 
694
 
695
  #: includes/class-wcj-checkout-core-fields.php:231
696
  #: includes/class-wcj-checkout-custom-fields.php:668
697
+ #: includes/class-wcj-checkout-files-upload.php:611
698
+ #: includes/class-wcj-orders.php:514
699
  #: includes/class-wcj-price-by-user-role.php:140
700
+ #: includes/class-wcj-product-addons.php:442
701
  #: includes/class-wcj-product-bookings.php:417
702
  #: includes/class-wcj-product-open-pricing.php:178
703
  #: includes/class-wcj-product-price-by-formula.php:237
706
  msgstr ""
707
 
708
  #: includes/class-wcj-checkout-core-fields.php:232
709
+ #: includes/class-wcj-pdf-invoicing.php:204
710
  #: includes/class-wcj-product-tabs.php:440
711
  msgid "Disabled"
712
  msgstr ""
717
  msgstr ""
718
 
719
  #: includes/class-wcj-checkout-core-fields.php:245
720
+ #: includes/class-wcj-checkout-files-upload.php:617
721
  #: includes/class-wcj-eu-vat-number.php:386
722
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:207
723
  msgid "Required"
779
  #: includes/class-wcj-checkout-custom-fields.php:613
780
  #: includes/class-wcj-checkout-custom-fields.php:620
781
  #: includes/class-wcj-general.php:122
782
+ #: includes/class-wcj-order-custom-statuses.php:251
783
+ #: includes/class-wcj-order-custom-statuses.php:326
784
+ #: includes/class-wcj-order-custom-statuses.php:333
785
+ #: includes/class-wcj-orders.php:410 includes/class-wcj-orders.php:492
786
  #: includes/class-wcj-product-by-user.php:239
787
  #: includes/class-wcj-purchase-data.php:389 includes/class-wcj-sku.php:400
788
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:359
831
  msgstr ""
832
 
833
  #: includes/class-wcj-checkout-custom-fields.php:686
834
+ #: includes/class-wcj-product-addons.php:471
835
+ #: includes/class-wcj-product-addons.php:589
836
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:51
837
  msgid "Checkbox"
838
  msgstr ""
868
  msgstr ""
869
 
870
  #: includes/class-wcj-checkout-custom-fields.php:694
871
+ #: includes/class-wcj-orders.php:161 includes/class-wcj-orders.php:491
872
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:59
873
  #: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:90
874
  #: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:104
880
  msgstr ""
881
 
882
  #: includes/class-wcj-checkout-custom-fields.php:696
883
+ #: includes/class-wcj-export-import.php:533
884
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:61
885
  #: includes/reports/wcj-class-reports-customers.php:92
886
  msgid "Email"
911
  #: includes/class-wcj-eu-vat-number.php:452
912
  #: includes/class-wcj-price-by-user-role.php:137
913
  #: includes/class-wcj-price-by-user-role.php:180
914
+ #: includes/class-wcj-product-add-to-cart.php:212
915
+ #: includes/class-wcj-product-add-to-cart.php:222
916
+ #: includes/class-wcj-product-addons.php:439
917
+ #: includes/class-wcj-product-addons.php:461
918
+ #: includes/class-wcj-product-addons.php:509
919
  #: includes/class-wcj-product-bookings.php:414
920
  #: includes/class-wcj-product-images.php:210
921
  #: includes/class-wcj-product-images.php:220
937
  #: includes/class-wcj-checkout-custom-fields.php:722
938
  #: includes/class-wcj-price-by-user-role.php:138
939
  #: includes/class-wcj-price-by-user-role.php:181
940
+ #: includes/class-wcj-product-add-to-cart.php:213
941
+ #: includes/class-wcj-product-add-to-cart.php:223
942
+ #: includes/class-wcj-product-addons.php:440
943
+ #: includes/class-wcj-product-addons.php:462
944
+ #: includes/class-wcj-product-addons.php:510
945
  #: includes/class-wcj-product-bookings.php:415
946
  #: includes/class-wcj-product-images.php:211
947
  #: includes/class-wcj-product-images.php:221
1075
  #: includes/class-wcj-checkout-custom-fields.php:836
1076
  #: includes/class-wcj-checkout-custom-info.php:110
1077
  #: includes/class-wcj-empty-cart-button.php:117
1078
+ #: includes/class-wcj-shipping.php:424
1079
  msgid "Billing"
1080
  msgstr ""
1081
 
1083
  #: includes/class-wcj-checkout-custom-info.php:111
1084
  #: includes/class-wcj-empty-cart-button.php:118
1085
  #: includes/class-wcj-price-by-user-role.php:389
1086
+ #: includes/class-wcj-shipping.php:25 includes/class-wcj-shipping.php:425
1087
  msgid "Shipping"
1088
  msgstr ""
1089
 
1090
  #: includes/class-wcj-checkout-custom-fields.php:838
1091
+ #: includes/class-wcj-export-import.php:158
1092
  msgid "Order Notes"
1093
  msgstr ""
1094
 
1141
  msgstr ""
1142
 
1143
  #: includes/class-wcj-checkout-custom-info.php:108
1144
+ #: includes/class-wcj-checkout-files-upload.php:627
1145
  #: includes/class-wcj-empty-cart-button.php:115
1146
+ #: includes/class-wcj-shipping.php:422
1147
  msgid "Before checkout form"
1148
  msgstr ""
1149
 
1150
  #: includes/class-wcj-checkout-custom-info.php:109
1151
  #: includes/class-wcj-empty-cart-button.php:116
1152
+ #: includes/class-wcj-shipping.php:423
1153
  msgid "Before customer details"
1154
  msgstr ""
1155
 
1156
  #: includes/class-wcj-checkout-custom-info.php:112
1157
  #: includes/class-wcj-empty-cart-button.php:119
1158
+ #: includes/class-wcj-shipping.php:426
1159
  msgid "After customer details"
1160
  msgstr ""
1161
 
1162
  #: includes/class-wcj-checkout-custom-info.php:113
1163
  #: includes/class-wcj-empty-cart-button.php:120
1164
+ #: includes/class-wcj-shipping.php:427
1165
  msgid "Before order review"
1166
  msgstr ""
1167
 
1168
  #: includes/class-wcj-checkout-custom-info.php:114
1169
  #: includes/class-wcj-empty-cart-button.php:121
1170
+ #: includes/class-wcj-shipping.php:428
1171
  msgid "Order review"
1172
  msgstr ""
1173
 
1174
  #: includes/class-wcj-checkout-custom-info.php:115
1175
  #: includes/class-wcj-empty-cart-button.php:122
1176
+ #: includes/class-wcj-shipping.php:429
1177
  msgid "After order review"
1178
  msgstr ""
1179
 
1180
  #: includes/class-wcj-checkout-custom-info.php:116
1181
+ #: includes/class-wcj-checkout-files-upload.php:628
1182
  #: includes/class-wcj-empty-cart-button.php:123
1183
+ #: includes/class-wcj-shipping.php:430
1184
  msgid "After checkout form"
1185
  msgstr ""
1186
 
1193
  msgstr ""
1194
 
1195
  #: includes/class-wcj-checkout-files-upload.php:88
1196
+ #: includes/class-wcj-checkout-files-upload.php:609
1197
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:52
1198
  msgid "File"
1199
  msgstr ""
1200
 
1201
  #: includes/class-wcj-checkout-files-upload.php:110
1202
+ #: includes/class-wcj-checkout-files-upload.php:694
1203
  msgid "File is required!"
1204
  msgstr ""
1205
 
1206
  #: includes/class-wcj-checkout-files-upload.php:120
1207
+ #: includes/class-wcj-checkout-files-upload.php:257
1208
+ #: includes/class-wcj-checkout-files-upload.php:687
1209
  msgid "Wrong file type: \"%s\"!"
1210
  msgstr ""
1211
 
1213
  msgid "Uploaded Files"
1214
  msgstr ""
1215
 
1216
+ #: includes/class-wcj-checkout-files-upload.php:172
1217
+ msgid "No files uploaded."
1218
+ msgstr ""
1219
+
1220
+ #: includes/class-wcj-checkout-files-upload.php:229
1221
+ #: includes/class-wcj-checkout-files-upload.php:237
1222
+ #: includes/class-wcj-checkout-files-upload.php:717
1223
  msgid "File \"%s\" was successfully removed."
1224
  msgstr ""
1225
 
1226
+ #: includes/class-wcj-checkout-files-upload.php:269
1227
+ #: includes/class-wcj-checkout-files-upload.php:702
1228
  msgid "File \"%s\" was successfully uploaded."
1229
  msgstr ""
1230
 
1231
+ #: includes/class-wcj-checkout-files-upload.php:277
1232
+ #: includes/class-wcj-checkout-files-upload.php:709
1233
  msgid "Please select file to upload!"
1234
  msgstr ""
1235
 
1236
+ #: includes/class-wcj-checkout-files-upload.php:440
1237
+ #: includes/class-wcj-checkout-files-upload.php:441
1238
+ #: includes/class-wcj-checkout-files-upload.php:672
1239
  msgid "Upload"
1240
  msgstr ""
1241
 
1242
+ #: includes/class-wcj-checkout-files-upload.php:466
1243
+ #: includes/class-wcj-checkout-files-upload.php:467
1244
+ #: includes/class-wcj-checkout-files-upload.php:679
1245
  msgid "Remove"
1246
  msgstr ""
1247
 
1248
+ #: includes/class-wcj-checkout-files-upload.php:588
1249
+ #: includes/class-wcj-currency-per-product.php:281
1250
  #: includes/class-wcj-eu-vat-number.php:354
1251
+ #: includes/class-wcj-multicurrency-product-base-price.php:236
1252
  #: includes/class-wcj-multicurrency.php:346
1253
  #: includes/class-wcj-payment-gateways-icons.php:95
1254
  #: includes/class-wcj-payment-gateways-per-category.php:166
1255
  #: includes/class-wcj-price-by-user-role.php:367
1256
+ #: includes/class-wcj-product-addons.php:642
1257
  #: includes/class-wcj-product-bookings.php:490
1258
  #: includes/class-wcj-product-by-user.php:204
1259
  #: includes/class-wcj-related-products.php:98
1261
  msgid "Options"
1262
  msgstr ""
1263
 
1264
+ #: includes/class-wcj-checkout-files-upload.php:593
1265
  msgid "Total Files"
1266
  msgstr ""
1267
 
1268
+ #: includes/class-wcj-checkout-files-upload.php:629
1269
  msgid "Do not add on checkout"
1270
  msgstr ""
1271
 
1272
+ #: includes/class-wcj-checkout-files-upload.php:634
1273
  msgid "Position order"
1274
  msgstr ""
1275
 
1276
+ #: includes/class-wcj-checkout-files-upload.php:643
1277
  msgid "Add to Thank You page"
1278
  msgstr ""
1279
 
1280
+ #: includes/class-wcj-checkout-files-upload.php:649
1281
  msgid "Add to My Account page"
1282
  msgstr ""
1283
 
1284
+ #: includes/class-wcj-checkout-files-upload.php:654
1285
+ #: includes/class-wcj-checkout-files-upload.php:798
1286
+ #: includes/class-wcj-order-custom-statuses.php:217
1287
+ #: includes/class-wcj-order-custom-statuses.php:256
1288
+ #: includes/class-wcj-orders.php:520
1289
  msgid "Label"
1290
  msgstr ""
1291
 
1292
+ #: includes/class-wcj-checkout-files-upload.php:655
1293
  msgid "Leave blank to disable label"
1294
  msgstr ""
1295
 
1296
+ #: includes/class-wcj-checkout-files-upload.php:657
1297
  msgid "Please select file to upload"
1298
  msgstr ""
1299
 
1300
+ #: includes/class-wcj-checkout-files-upload.php:662
1301
  msgid "Accepted file types"
1302
  msgstr ""
1303
 
1304
+ #: includes/class-wcj-checkout-files-upload.php:663
1305
  msgid ""
1306
  "Accepted file types. E.g.: \".jpg,.jpeg,.png\". Leave blank to accept all "
1307
  "files"
1308
  msgstr ""
1309
 
1310
+ #: includes/class-wcj-checkout-files-upload.php:670
1311
  msgid "Label: Upload button"
1312
  msgstr ""
1313
 
1314
+ #: includes/class-wcj-checkout-files-upload.php:677
1315
  msgid "Label: Remove button"
1316
  msgstr ""
1317
 
1318
+ #: includes/class-wcj-checkout-files-upload.php:684
1319
  msgid "Notice: Wrong file type"
1320
  msgstr ""
1321
 
1322
+ #: includes/class-wcj-checkout-files-upload.php:685
1323
+ #: includes/class-wcj-checkout-files-upload.php:700
1324
+ #: includes/class-wcj-checkout-files-upload.php:715
1325
  msgid "%s will be replaced with file name"
1326
  msgstr ""
1327
 
1328
+ #: includes/class-wcj-checkout-files-upload.php:692
1329
  msgid "Notice: File is required"
1330
  msgstr ""
1331
 
1332
+ #: includes/class-wcj-checkout-files-upload.php:699
1333
  msgid "Notice: File was successfully uploaded"
1334
  msgstr ""
1335
 
1336
+ #: includes/class-wcj-checkout-files-upload.php:707
1337
  msgid "Notice: No file selected"
1338
  msgstr ""
1339
 
1340
+ #: includes/class-wcj-checkout-files-upload.php:714
1341
  msgid "Notice: File was successfully removed"
1342
  msgstr ""
1343
 
1344
+ #: includes/class-wcj-checkout-files-upload.php:723
1345
  msgid "PRODUCTS to show this field"
1346
  msgstr ""
1347
 
1348
+ #: includes/class-wcj-checkout-files-upload.php:724
1349
  msgid ""
1350
  "To show this field only if at least one selected product is in cart, enter "
1351
  "products here. Leave blank to show for all products."
1352
  msgstr ""
1353
 
1354
+ #: includes/class-wcj-checkout-files-upload.php:733
1355
  msgid "CATEGORIES to show this field"
1356
  msgstr ""
1357
 
1358
+ #: includes/class-wcj-checkout-files-upload.php:734
1359
  msgid ""
1360
  "To show this field only if at least one product of selected category is in "
1361
  "cart, enter categories here. Leave blank to show for all products."
1362
  msgstr ""
1363
 
1364
+ #: includes/class-wcj-checkout-files-upload.php:743
1365
  msgid "TAGS to show this field"
1366
  msgstr ""
1367
 
1368
+ #: includes/class-wcj-checkout-files-upload.php:744
1369
  msgid ""
1370
  "To show this field only if at least one product of selected tag is in cart, "
1371
  "enter tags here. Leave blank to show for all products."
1372
  msgstr ""
1373
 
1374
+ #: includes/class-wcj-checkout-files-upload.php:761
1375
  #: includes/class-wcj-product-input-fields.php:247
1376
  msgid "Emails Options"
1377
  msgstr ""
1378
 
1379
+ #: includes/class-wcj-checkout-files-upload.php:766
1380
  #: includes/class-wcj-product-input-fields.php:253
1381
  msgid "Attach Files to Admin's New Order Emails"
1382
  msgstr ""
1383
 
1384
+ #: includes/class-wcj-checkout-files-upload.php:767
1385
+ #: includes/class-wcj-checkout-files-upload.php:774
1386
  #: includes/class-wcj-product-input-fields.php:254
1387
  #: includes/class-wcj-product-input-fields.php:262
1388
  msgid "Attach"
1389
  msgstr ""
1390
 
1391
+ #: includes/class-wcj-checkout-files-upload.php:773
1392
  #: includes/class-wcj-product-input-fields.php:261
1393
  msgid "Attach Files to Customer's Processing Order Emails"
1394
  msgstr ""
1395
 
1396
+ #: includes/class-wcj-checkout-files-upload.php:786
1397
+ msgid "Form Template Options"
1398
+ msgstr ""
1399
+
1400
+ #: includes/class-wcj-checkout-files-upload.php:791
1401
+ #: includes/class-wcj-product-addons.php:655
1402
+ #: includes/class-wcj-product-addons.php:678
1403
+ msgid "Before"
1404
+ msgstr ""
1405
+
1406
+ #: includes/class-wcj-checkout-files-upload.php:799
1407
+ msgid "Replaced values: %field_id%, %field_label%, %required_html%."
1408
+ msgstr ""
1409
+
1410
+ #: includes/class-wcj-checkout-files-upload.php:806
1411
+ msgid "Field"
1412
+ msgstr ""
1413
+
1414
+ #: includes/class-wcj-checkout-files-upload.php:807
1415
+ msgid "Replaced values: %field_html%, %button_html%."
1416
+ msgstr ""
1417
+
1418
+ #: includes/class-wcj-checkout-files-upload.php:814
1419
+ #: includes/class-wcj-product-addons.php:670
1420
+ #: includes/class-wcj-product-addons.php:693
1421
+ msgid "After"
1422
+ msgstr ""
1423
+
1424
  #: includes/class-wcj-crowdfunding.php:26
1425
  msgid "Crowdfunding"
1426
  msgstr ""
1484
  msgstr ""
1485
 
1486
  #: includes/class-wcj-currencies.php:106
1487
+ #: includes/class-wcj-pdf-invoicing.php:229
1488
  #: includes/class-wcj-product-bookings.php:496
1489
  #: includes/class-wcj-product-images.php:259
1490
  #: includes/class-wcj-product-images.php:266
1532
  msgstr ""
1533
 
1534
  #: includes/class-wcj-currency-exchange-rates.php:80
1535
+ #: includes/class-wcj-currency-per-product.php:350
1536
+ #: includes/class-wcj-multicurrency-product-base-price.php:305
1537
  #: includes/class-wcj-multicurrency.php:431
1538
  #: includes/class-wcj-payment-gateways-currency.php:275
1539
+ #: includes/class-wcj-price-by-country.php:388
1540
  msgid "Grab %s rate from Yahoo.com"
1541
  msgstr ""
1542
 
1545
  msgstr ""
1546
 
1547
  #: includes/class-wcj-currency-exchange-rates.php:106
1548
+ #: includes/class-wcj-price-by-country.php:348
1549
  msgid "Exchange Rates"
1550
  msgstr ""
1551
 
1556
  msgstr ""
1557
 
1558
  #: includes/class-wcj-currency-exchange-rates.php:113
1559
+ #: includes/class-wcj-currency-per-product.php:286
1560
+ #: includes/class-wcj-multicurrency-product-base-price.php:241
1561
  #: includes/class-wcj-multicurrency.php:351
1562
  #: includes/class-wcj-payment-gateways-currency.php:282
1563
+ #: includes/class-wcj-price-by-country.php:351
1564
  msgid "Exchange Rates Updates"
1565
  msgstr ""
1566
 
1602
  msgstr ""
1603
 
1604
  #: includes/class-wcj-currency-external-products.php:79
1605
+ #: includes/class-wcj-currency-per-product.php:334
1606
+ #: includes/class-wcj-multicurrency-product-base-price.php:289
1607
  #: includes/class-wcj-multicurrency.php:415
1608
+ #: includes/class-wcj-price-by-country.php:338
1609
  #: includes/class-wcj-price-formats.php:135
1610
  msgid "Currency"
1611
  msgstr ""
1627
  msgid "%1$s&ndash;%2$s"
1628
  msgstr ""
1629
 
1630
+ #: includes/class-wcj-currency-per-product.php:236
1631
+ #: includes/class-wcj-multicurrency-product-base-price.php:185
1632
  msgid "Product Currency"
1633
  msgstr ""
1634
 
1635
+ #: includes/class-wcj-currency-per-product.php:238
1636
+ msgid "Update product after you change this field's value."
1637
+ msgstr ""
1638
+
1639
+ #: includes/class-wcj-currency-per-product.php:291
1640
+ #: includes/class-wcj-multicurrency-product-base-price.php:246
1641
  #: includes/class-wcj-multicurrency.php:356
1642
  #: includes/class-wcj-payment-gateways-currency.php:287
1643
+ #: includes/class-wcj-price-by-country.php:356
1644
  msgid "Enter Rates Manually"
1645
  msgstr ""
1646
 
1647
+ #: includes/class-wcj-currency-per-product.php:292
1648
+ #: includes/class-wcj-multicurrency-product-base-price.php:247
1649
  #: includes/class-wcj-multicurrency.php:357
1650
  #: includes/class-wcj-payment-gateways-currency.php:288
1651
+ #: includes/class-wcj-price-by-country.php:357
1652
  msgid "Automatically via Currency Exchange Rates module"
1653
  msgstr ""
1654
 
1655
+ #: includes/class-wcj-currency-per-product.php:295
1656
+ #: includes/class-wcj-multicurrency-product-base-price.php:250
1657
  #: includes/class-wcj-multicurrency.php:360
1658
  #: includes/class-wcj-payment-gateways-currency.php:291
1659
+ #: includes/class-wcj-price-by-country.php:360
1660
  msgid "Visit"
1661
  msgstr ""
1662
 
1663
+ #: includes/class-wcj-currency-per-product.php:295
1664
+ #: includes/class-wcj-multicurrency-product-base-price.php:250
1665
  #: includes/class-wcj-multicurrency.php:360
1666
  #: includes/class-wcj-payment-gateways-currency.php:291
1667
+ #: includes/class-wcj-price-by-country.php:360
1668
  msgid "Currency Exchange Rates module"
1669
  msgstr ""
1670
 
1671
+ #: includes/class-wcj-currency-per-product.php:305
1672
+ #: includes/class-wcj-multicurrency-product-base-price.php:260
1673
  #: includes/class-wcj-multicurrency.php:385
1674
  msgid "Currencies Options"
1675
  msgstr ""
1676
 
1677
+ #: includes/class-wcj-currency-per-product.php:310
1678
+ #: includes/class-wcj-multicurrency-product-base-price.php:265
1679
  #: includes/class-wcj-multicurrency.php:391
1680
  msgid "Total Currencies"
1681
  msgstr ""
1737
  msgid "Admin Title Custom Email"
1738
  msgstr ""
1739
 
1740
+ #: includes/class-wcj-emails.php:207 includes/class-wcj-shipping.php:283
1741
  #: includes/emails/class-wc-email-wcj-custom.php:30
1742
  #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-emails.php:127
1743
+ #: includes/shipping/class-wc-shipping-wcj-custom.php:44
1744
  msgid "Custom"
1745
  msgstr ""
1746
 
1943
  msgid "Filter by Product Title"
1944
  msgstr ""
1945
 
1946
+ #: includes/class-wcj-export-import.php:132 includes/class-wcj-orders.php:366
1947
+ #: includes/reports/wcj-class-reports-sales.php:165
1948
+ msgid "Filter"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1949
  msgstr ""
1950
 
1951
+ #: includes/class-wcj-export-import.php:147
1952
  #: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:208
1953
  msgid "Order ID"
1954
  msgstr ""
1955
 
1956
+ #: includes/class-wcj-export-import.php:148
1957
  msgid "Order Number"
1958
  msgstr ""
1959
 
1960
+ #: includes/class-wcj-export-import.php:149
1961
  msgid "Order Status"
1962
  msgstr ""
1963
 
1964
+ #: includes/class-wcj-export-import.php:150
1965
  msgid "Order Date"
1966
  msgstr ""
1967
 
1968
+ #: includes/class-wcj-export-import.php:151
1969
  msgid "Order Item Count"
1970
  msgstr ""
1971
 
1972
+ #: includes/class-wcj-export-import.php:152
1973
  msgid "Order Items"
1974
  msgstr ""
1975
 
1976
+ #: includes/class-wcj-export-import.php:153
1977
+ msgid "Order Items Product Input Fields"
1978
+ msgstr ""
1979
+
1980
+ #: includes/class-wcj-export-import.php:154 includes/class-wcj-orders.php:88
1981
  #: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:215
1982
  msgid "Order Currency"
1983
  msgstr ""
1984
 
1985
+ #: includes/class-wcj-export-import.php:155
1986
  #: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:214
1987
  msgid "Order Total"
1988
  msgstr ""
1989
 
1990
+ #: includes/class-wcj-export-import.php:156
1991
  msgid "Order Total Tax"
1992
  msgstr ""
1993
 
1994
+ #: includes/class-wcj-export-import.php:157
1995
  msgid "Order Payment Method"
1996
  msgstr ""
1997
 
1998
+ #: includes/class-wcj-export-import.php:159
1999
  msgid "Billing First Name"
2000
  msgstr ""
2001
 
2002
+ #: includes/class-wcj-export-import.php:160
2003
  msgid "Billing Last Name"
2004
  msgstr ""
2005
 
2006
+ #: includes/class-wcj-export-import.php:161
2007
  msgid "Billing Company"
2008
  msgstr ""
2009
 
2010
+ #: includes/class-wcj-export-import.php:162
2011
  msgid "Billing Address 1"
2012
  msgstr ""
2013
 
2014
+ #: includes/class-wcj-export-import.php:163
2015
  msgid "Billing Address 2"
2016
  msgstr ""
2017
 
2018
+ #: includes/class-wcj-export-import.php:164
2019
  msgid "Billing City"
2020
  msgstr ""
2021
 
2022
+ #: includes/class-wcj-export-import.php:165
2023
  msgid "Billing State"
2024
  msgstr ""
2025
 
2026
+ #: includes/class-wcj-export-import.php:166
2027
  msgid "Billing Postcode"
2028
  msgstr ""
2029
 
2030
+ #: includes/class-wcj-export-import.php:167
2031
  msgid "Billing Country"
2032
  msgstr ""
2033
 
2034
+ #: includes/class-wcj-export-import.php:168
2035
  msgid "Billing Phone"
2036
  msgstr ""
2037
 
2038
+ #: includes/class-wcj-export-import.php:169
2039
  msgid "Billing Email"
2040
  msgstr ""
2041
 
2042
+ #: includes/class-wcj-export-import.php:170
2043
  msgid "Shipping First Name"
2044
  msgstr ""
2045
 
2046
+ #: includes/class-wcj-export-import.php:171
2047
  msgid "Shipping Last Name"
2048
  msgstr ""
2049
 
2050
+ #: includes/class-wcj-export-import.php:172
2051
  msgid "Shipping Company"
2052
  msgstr ""
2053
 
2054
+ #: includes/class-wcj-export-import.php:173
2055
  msgid "Shipping Address 1"
2056
  msgstr ""
2057
 
2058
+ #: includes/class-wcj-export-import.php:174
2059
  msgid "Shipping Address 2"
2060
  msgstr ""
2061
 
2062
+ #: includes/class-wcj-export-import.php:175
2063
  msgid "Shipping City"
2064
  msgstr ""
2065
 
2066
+ #: includes/class-wcj-export-import.php:176
2067
  msgid "Shipping State"
2068
  msgstr ""
2069
 
2070
+ #: includes/class-wcj-export-import.php:177
2071
  msgid "Shipping Postcode"
2072
  msgstr ""
2073
 
2074
+ #: includes/class-wcj-export-import.php:178
2075
  msgid "Shipping Country"
2076
  msgstr ""
2077
 
2078
+ #: includes/class-wcj-export-import.php:234
2079
+ msgid "Download CSV"
2080
+ msgstr ""
2081
+
2082
+ #: includes/class-wcj-export-import.php:288
2083
+ msgid "Customer ID"
2084
+ msgstr ""
2085
+
2086
+ #: includes/class-wcj-export-import.php:289
2087
+ msgid "Customer Email"
2088
+ msgstr ""
2089
+
2090
+ #: includes/class-wcj-export-import.php:290
2091
+ msgid "Customer First Name"
2092
+ msgstr ""
2093
+
2094
+ #: includes/class-wcj-export-import.php:291
2095
+ msgid "Customer Last Name"
2096
+ msgstr ""
2097
+
2098
+ #: includes/class-wcj-export-import.php:480
2099
  msgid "Product ID"
2100
  msgstr ""
2101
 
2102
+ #: includes/class-wcj-export-import.php:481 includes/class-wcj-general.php:104
2103
  #: includes/class-wcj-general.php:118
2104
  #: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:72
2105
  #: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:106
2106
  msgid "Name"
2107
  msgstr ""
2108
 
2109
+ #: includes/class-wcj-export-import.php:482 includes/class-wcj-sku.php:26
2110
  #: includes/class-wcj-sku.php:245
2111
  msgid "SKU"
2112
  msgstr ""
2113
 
2114
+ #: includes/class-wcj-export-import.php:483
2115
  #: includes/reports/wcj-class-reports-stock.php:322
2116
  msgid "Stock"
2117
  msgstr ""
2118
 
2119
+ #: includes/class-wcj-export-import.php:484
2120
  #: includes/class-wcj-multicurrency.php:76
2121
  #: includes/class-wcj-price-by-user-role.php:161
2122
  #: includes/class-wcj-product-by-user.php:162
2126
  msgid "Regular Price"
2127
  msgstr ""
2128
 
2129
+ #: includes/class-wcj-export-import.php:485
2130
  #: includes/class-wcj-multicurrency.php:85
2131
  #: includes/class-wcj-price-by-user-role.php:170
2132
  #: includes/class-wcj-product-by-user.php:163
2136
  msgid "Sale Price"
2137
  msgstr ""
2138
 
2139
+ #: includes/class-wcj-export-import.php:486
2140
  #: includes/reports/wcj-class-reports-stock.php:321
2141
  msgid "Price"
2142
  msgstr ""
2143
 
2144
+ #: includes/class-wcj-export-import.php:487
2145
+ #: includes/class-wcj-product-addons.php:466
2146
+ #: includes/class-wcj-product-addons.php:583
2147
  #: includes/class-wcj-purchase-data.php:328
2148
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:44
2149
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:97
2150
+ #: includes/shipping/class-wc-shipping-wcj-custom.php:89
2151
  msgid "Type"
2152
  msgstr ""
2153
 
2154
+ #: includes/class-wcj-export-import.php:532
2155
  msgid "Nr."
2156
  msgstr ""
2157
 
2158
+ #: includes/class-wcj-export-import.php:534
2159
  msgid "First Name"
2160
  msgstr ""
2161
 
2162
+ #: includes/class-wcj-export-import.php:535
2163
  msgid "Last Name"
2164
  msgstr ""
2165
 
2166
+ #: includes/class-wcj-export-import.php:536
2167
  msgid "Last Order Date"
2168
  msgstr ""
2169
 
2170
+ #: includes/class-wcj-export-import.php:579
2171
  msgid "Export Options"
2172
  msgstr ""
2173
 
2174
+ #: includes/class-wcj-export-import.php:584
2175
  msgid "CSV Separator"
2176
  msgstr ""
2177
 
2178
+ #: includes/class-wcj-export-import.php:590
2179
+ msgid "Export Orders Fields"
2180
+ msgstr ""
2181
+
2182
  #: includes/class-wcj-general.php:25 includes/class-wcj-pdf-invoicing.php:26
2183
  msgid "General"
2184
  msgstr ""
2240
  msgstr ""
2241
 
2242
  #: includes/class-wcj-general.php:110
2243
+ #: includes/class-wcj-order-custom-statuses.php:220
2244
+ #: includes/class-wcj-order-custom-statuses.php:242
2245
  #: includes/class-wcj-product-by-user.php:122
2246
  #: includes/pdf-invoices/settings/class-wcj-pdf-invoicing-display.php:116
2247
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:285
2263
  #: includes/class-wcj-general.php:203 includes/class-wcj-general.php:245
2264
  #: includes/class-wcj-product-bulk-price-converter.php:149
2265
  #: includes/class-wcj-sku.php:243
2266
+ #: includes/reports/wcj-class-reports-sales.php:120
2267
  #: includes/reports/wcj-class-reports-stock.php:319
2268
  msgid "Product"
2269
  msgstr ""
2302
  #: includes/class-wcj-general.php:326 includes/class-wcj-general.php:389
2303
  #: includes/class-wcj-general.php:403 includes/class-wcj-general.php:410
2304
  #: includes/class-wcj-general.php:417 includes/class-wcj-general.php:424
2305
+ #: includes/class-wcj-product-add-to-cart.php:247
2306
  msgid "Disable"
2307
  msgstr ""
2308
 
2382
  msgid "Mini Cart Custom Info Blocks"
2383
  msgstr ""
2384
 
2385
+ #: includes/class-wcj-mini-cart.php:119 includes/class-wcj-shipping.php:384
2386
  msgid "Before mini cart"
2387
  msgstr ""
2388
 
2389
+ #: includes/class-wcj-mini-cart.php:120 includes/class-wcj-shipping.php:385
2390
  msgid "Before buttons"
2391
  msgstr ""
2392
 
2393
+ #: includes/class-wcj-mini-cart.php:121 includes/class-wcj-shipping.php:386
2394
  msgid "After mini cart"
2395
  msgstr ""
2396
 
2444
  msgstr ""
2445
 
2446
  #: includes/class-wcj-multicurrency.php:368
2447
+ #: includes/class-wcj-price-by-country.php:208
2448
  msgid "This will add meta boxes in product edit."
2449
  msgstr ""
2450
 
2451
  #: includes/class-wcj-multicurrency.php:374
2452
+ #: includes/class-wcj-price-by-country.php:184
2453
  msgid "Revert Currency to Default on Checkout"
2454
  msgstr ""
2455
 
2463
  msgid "Role Defaults"
2464
  msgstr ""
2465
 
2466
+ #: includes/class-wcj-multicurrency.php:445 includes/class-wcj-orders.php:440
2467
  #: includes/class-wcj-price-by-user-role.php:404
2468
  msgid ""
2469
  "Custom roles can be added via \"Add/Manage Custom Roles\" tool in Booster's "
2475
  msgstr ""
2476
 
2477
  #: includes/class-wcj-multicurrency.php:451
2478
+ #: includes/class-wcj-wholesale-price.php:485
2479
  msgid "Save settings after you change this option. Leave blank to disable."
2480
  msgstr ""
2481
 
2524
  msgstr ""
2525
 
2526
  #: includes/class-wcj-order-custom-statuses.php:33
2527
+ #: includes/class-wcj-order-custom-statuses.php:311
2528
  msgid "Custom Statuses"
2529
  msgstr ""
2530
 
2532
  msgid "Tool lets you add or delete any custom status for WooCommerce orders."
2533
  msgstr ""
2534
 
2535
+ #: includes/class-wcj-order-custom-statuses.php:64
2536
  msgctxt "Order status"
2537
  msgid "Pending payment"
2538
  msgstr ""
2539
 
2540
+ #: includes/class-wcj-order-custom-statuses.php:65
2541
+ #: includes/functions/wcj-functions.php:1034
2542
  msgctxt "Order status"
2543
  msgid "Processing"
2544
  msgstr ""
2545
 
2546
+ #: includes/class-wcj-order-custom-statuses.php:66
2547
  msgctxt "Order status"
2548
  msgid "On hold"
2549
  msgstr ""
2550
 
2551
+ #: includes/class-wcj-order-custom-statuses.php:67
2552
+ #: includes/functions/wcj-functions.php:1036
2553
  msgctxt "Order status"
2554
  msgid "Completed"
2555
  msgstr ""
2556
 
2557
+ #: includes/class-wcj-order-custom-statuses.php:68
2558
+ #: includes/functions/wcj-functions.php:1037
2559
  msgctxt "Order status"
2560
  msgid "Cancelled"
2561
  msgstr ""
2562
 
2563
+ #: includes/class-wcj-order-custom-statuses.php:69
2564
+ #: includes/functions/wcj-functions.php:1038
2565
  msgctxt "Order status"
2566
  msgid "Refunded"
2567
  msgstr ""
2568
 
2569
+ #: includes/class-wcj-order-custom-statuses.php:70
2570
+ #: includes/functions/wcj-functions.php:1039
2571
  msgctxt "Order status"
2572
  msgid "Failed"
2573
  msgstr ""
2574
 
2575
+ #: includes/class-wcj-order-custom-statuses.php:160
2576
  msgid "Status slug is empty. Status not added."
2577
  msgstr ""
2578
 
2579
+ #: includes/class-wcj-order-custom-statuses.php:163
2580
  msgid "The length of status slug must be 17 or less characters."
2581
  msgstr ""
2582
 
2583
+ #: includes/class-wcj-order-custom-statuses.php:166
2584
  msgid "Status label is empty. Status not added."
2585
  msgstr ""
2586
 
2587
+ #: includes/class-wcj-order-custom-statuses.php:173
2588
  msgid "Duplicate slug. Status not added."
2589
  msgstr ""
2590
 
2591
+ #: includes/class-wcj-order-custom-statuses.php:183
2592
  msgid "New status have been successfully added!"
2593
  msgstr ""
2594
 
2595
+ #: includes/class-wcj-order-custom-statuses.php:185
2596
  msgid "Status was not added."
2597
  msgstr ""
2598
 
2599
+ #: includes/class-wcj-order-custom-statuses.php:203
2600
  msgid "Status have been successfully deleted."
2601
  msgstr ""
2602
 
2603
+ #: includes/class-wcj-order-custom-statuses.php:205
2604
  msgid "Delete failed."
2605
  msgstr ""
2606
 
2607
+ #: includes/class-wcj-order-custom-statuses.php:210
2608
  msgid "Booster - Custom Statuses"
2609
  msgstr ""
2610
 
2611
+ #: includes/class-wcj-order-custom-statuses.php:211
2612
  msgid ""
2613
  "The tool lets you add or delete any custom status for WooCommerce orders."
2614
  msgstr ""
2615
 
2616
+ #: includes/class-wcj-order-custom-statuses.php:213
2617
  msgid "Statuses"
2618
  msgstr ""
2619
 
2620
+ #: includes/class-wcj-order-custom-statuses.php:216
2621
  msgid "Slug"
2622
  msgstr ""
2623
 
2624
+ #: includes/class-wcj-order-custom-statuses.php:218
2625
+ #: includes/class-wcj-order-custom-statuses.php:257
2626
  msgid "Icon Code"
2627
  msgstr ""
2628
 
2629
+ #: includes/class-wcj-order-custom-statuses.php:219
2630
+ #: includes/class-wcj-order-custom-statuses.php:258
2631
  msgid "Icon Color"
2632
  msgstr ""
2633
 
2634
+ #: includes/class-wcj-order-custom-statuses.php:255
2635
  msgid "Slug (without wc- prefix)"
2636
  msgstr ""
2637
 
2638
+ #: includes/class-wcj-order-custom-statuses.php:259
2639
  msgid "You can check icon codes <a target=\"_blank\" href=\"%s\">here</a>."
2640
  msgstr ""
2641
 
2642
+ #: includes/class-wcj-order-custom-statuses.php:283
2643
+ #: includes/class-wcj-order-custom-statuses.php:284
2644
  msgid "Mark"
2645
  msgstr ""
2646
 
2647
+ #: includes/class-wcj-order-custom-statuses.php:316
2648
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:138
2649
  msgid "Default Order Status"
2650
  msgstr ""
2651
 
2652
+ #: includes/class-wcj-order-custom-statuses.php:317
2653
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:139
2654
  msgid "Enable Custom Statuses feature to add custom statuses to the list."
2655
  msgstr ""
2656
 
2657
+ #: includes/class-wcj-order-custom-statuses.php:318
2658
  msgid ""
2659
  "You can change the default order status here. However payment gateways can "
2660
  "change this status immediatelly on order creation. E.g. BACS gateway will "
2661
  "change status to On-hold."
2662
  msgstr ""
2663
 
2664
+ #: includes/class-wcj-order-custom-statuses.php:325
2665
  msgid "Add All Statuses to Admin Order Bulk Actions"
2666
  msgstr ""
2667
 
2668
+ #: includes/class-wcj-order-custom-statuses.php:332
2669
  msgid "Add Custom Statuses to Admin Reports"
2670
  msgstr ""
2671
 
2807
  #: includes/class-wcj-orders.php:26
2808
  msgid ""
2809
  "Minimum WooCommerce order amount (optionally by user role); orders auto-"
2810
+ "complete; custom admin order list columns; admin order currency."
2811
  msgstr ""
2812
 
2813
+ #: includes/class-wcj-orders.php:89
2814
+ msgid "Save order after you change this field."
2815
+ msgstr ""
2816
+
2817
+ #: includes/class-wcj-orders.php:145
2818
  msgid "All countries"
2819
  msgstr ""
2820
 
2821
+ #: includes/class-wcj-orders.php:347 includes/class-wcj-orders.php:352
2822
+ msgid "Admin Order Currency"
2823
+ msgstr ""
2824
+
2825
+ #: includes/class-wcj-orders.php:354
2826
+ msgid ""
2827
+ "When enabled this will add \"Booster: Orders\" metabox to each order's edit "
2828
+ "page."
2829
+ msgstr ""
2830
+
2831
+ #: includes/class-wcj-orders.php:360
2832
+ msgid "Admin Order Currency Method"
2833
+ msgstr ""
2834
+
2835
+ #: includes/class-wcj-orders.php:361
2836
+ msgid ""
2837
+ "Choose if you want changed order currency to be saved directly to DB, or if "
2838
+ "you want to use filter. When using <em>filter</em> method, changes will be "
2839
+ "active only when \"Admin Order Currency\" section is enabled. When using "
2840
+ "<em>directly to DB</em> method, changes will be permanent, that is even if "
2841
+ "Booster plugin is removed."
2842
+ msgstr ""
2843
+
2844
+ #: includes/class-wcj-orders.php:367
2845
+ msgid "Directly to DB"
2846
+ msgstr ""
2847
+
2848
+ #: includes/class-wcj-orders.php:375
2849
  msgid "Order Minimum Amount"
2850
  msgstr ""
2851
 
2852
+ #: includes/class-wcj-orders.php:377
2853
  msgid "This section lets you set minimum order amount."
2854
  msgstr ""
2855
 
2856
+ #: includes/class-wcj-orders.php:381
2857
  msgid "Amount"
2858
  msgstr ""
2859
 
2860
+ #: includes/class-wcj-orders.php:382
2861
  msgid "Minimum order amount. Set to 0 to disable."
2862
  msgstr ""
2863
 
2864
+ #: includes/class-wcj-orders.php:392
2865
  msgid "Exclude Shipping from Cart Total"
2866
  msgstr ""
2867
 
2868
+ #: includes/class-wcj-orders.php:393
2869
  msgid "Exclude"
2870
  msgstr ""
2871
 
2872
+ #: includes/class-wcj-orders.php:399
2873
  msgid "Error message"
2874
  msgstr ""
2875
 
2876
+ #: includes/class-wcj-orders.php:401 includes/class-wcj-orders.php:418
2877
  msgid ""
2878
  "Message to customer if order is below minimum amount. Default: You must have "
2879
  "an order with a minimum of %s to place your order, your current order total "
2880
  "is %s."
2881
  msgstr ""
2882
 
2883
+ #: includes/class-wcj-orders.php:409
2884
  msgid "Add notice to cart page also"
2885
  msgstr ""
2886
 
2887
+ #: includes/class-wcj-orders.php:416
2888
  msgid "Message on cart page"
2889
  msgstr ""
2890
 
2891
+ #: includes/class-wcj-orders.php:426
2892
  msgid ""
2893
  "Stop customer from seeing the Checkout page if minimum amount not reached."
2894
  msgstr ""
2895
 
2896
+ #: includes/class-wcj-orders.php:427
2897
  msgid "Redirect back to Cart page"
2898
  msgstr ""
2899
 
2900
+ #: includes/class-wcj-orders.php:437
2901
  msgid "Order Minimum Amount by User Role"
2902
  msgstr ""
2903
 
2904
+ #: includes/class-wcj-orders.php:467
2905
  msgid "Orders Auto-Complete"
2906
  msgstr ""
2907
 
2908
+ #: includes/class-wcj-orders.php:469
2909
  msgid "This section lets you enable orders auto-complete function."
2910
  msgstr ""
2911
 
2912
+ #: includes/class-wcj-orders.php:473
2913
  msgid "Auto-complete all WooCommerce orders"
2914
  msgstr ""
2915
 
2916
+ #: includes/class-wcj-orders.php:475
2917
  msgid ""
2918
  "E.g. if you sell digital products then you are not shipping anything and you "
2919
  "may want auto-complete all your orders."
2920
  msgstr ""
2921
 
2922
+ #: includes/class-wcj-orders.php:485 includes/class-wcj-purchase-data.php:382
2923
  msgid "Orders List Custom Columns"
2924
  msgstr ""
2925
 
2926
+ #: includes/class-wcj-orders.php:487 includes/class-wcj-purchase-data.php:384
2927
  msgid "This section lets you add custom columns to WooCommerce orders list."
2928
  msgstr ""
2929
 
2930
+ #: includes/class-wcj-orders.php:498
2931
  msgid "Custom Columns Total Number"
2932
  msgstr ""
2933
 
2934
+ #: includes/class-wcj-orders.php:513
2935
  msgid "Custom Column"
2936
  msgstr ""
2937
 
2938
+ #: includes/class-wcj-orders.php:527
2939
  msgid "Value"
2940
  msgstr ""
2941
 
2942
+ #: includes/class-wcj-orders.php:528
2943
  msgid "You can use shortcodes here."
2944
  msgstr ""
2945
 
2953
  "to show up."
2954
  msgstr ""
2955
 
2956
+ #: includes/class-wcj-payment-gateways-by-country.php:90
2957
  #: includes/class-wcj-payment-gateways-by-user-role.php:83
2958
  msgid "Leave empty to disable."
2959
  msgstr ""
2960
 
2961
+ #: includes/class-wcj-payment-gateways-by-country.php:111
2962
  msgid "Include Countries"
2963
  msgstr ""
2964
 
2965
+ #: includes/class-wcj-payment-gateways-by-country.php:123
2966
  msgid "Exclude Countries"
2967
  msgstr ""
2968
 
2969
+ #: includes/class-wcj-payment-gateways-by-country.php:135
2970
  msgid "Include States (Base Country)"
2971
  msgstr ""
2972
 
2973
+ #: includes/class-wcj-payment-gateways-by-country.php:147
2974
  msgid "Exclude States (Base Country)"
2975
  msgstr ""
2976
 
3050
  #: includes/class-wcj-payment-gateways-fees.php:164
3051
  #: includes/class-wcj-purchase-data.php:332
3052
  #: includes/class-wcj-wholesale-price.php:260
3053
+ #: includes/class-wcj-wholesale-price.php:413
3054
  msgid "Fixed"
3055
  msgstr ""
3056
 
3057
  #: includes/class-wcj-payment-gateways-fees.php:165
3058
  #: includes/class-wcj-purchase-data.php:333
3059
  #: includes/class-wcj-wholesale-price.php:259
3060
+ #: includes/class-wcj-wholesale-price.php:412
3061
  msgid "Percent"
3062
  msgstr ""
3063
 
3113
  msgstr ""
3114
 
3115
  #: includes/class-wcj-payment-gateways-icons.php:97
3116
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:103
3117
  msgid ""
3118
  "If you want to show an image next to the gateway's name on the frontend, "
3119
  "enter a URL to an image."
3252
  "gateway are in WooCommerce > Settings > Checkout."
3253
  msgstr ""
3254
 
3255
+ #: includes/class-wcj-payment-gateways.php:139
3256
  msgid "Admin Title Custom Gateway"
3257
  msgstr ""
3258
 
3259
+ #: includes/class-wcj-payment-gateways.php:141
3260
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:353
3261
  msgid "Custom Gateway"
3262
  msgstr ""
3263
 
3289
  msgid "Invoices Monthly Reports."
3290
  msgstr ""
3291
 
3292
+ #: includes/class-wcj-pdf-invoicing.php:196
3293
  msgid "PDF Invoicing General Options"
3294
  msgstr ""
3295
 
3296
+ #: includes/class-wcj-pdf-invoicing.php:205
3297
  msgid "Create on New Order"
3298
  msgstr ""
3299
 
3300
+ #: includes/class-wcj-pdf-invoicing.php:208
3301
  msgid "Create on Order Status"
3302
  msgstr ""
3303
 
3304
+ #: includes/class-wcj-pdf-invoicing.php:210
3305
  msgid "Manual Only"
3306
  msgstr ""
3307
 
3308
+ #: includes/class-wcj-pdf-invoicing.php:228
3309
  msgid "Hide Disabled Docs Settings"
3310
  msgstr ""
3311
 
3319
  "country."
3320
  msgstr ""
3321
 
3322
+ #: includes/class-wcj-price-by-country.php:92
3323
+ msgid "Price filter widget product prices recalculated."
3324
+ msgstr ""
3325
+
3326
+ #: includes/class-wcj-price-by-country.php:140
3327
  msgid "Price by Country Options"
3328
  msgstr ""
3329
 
3330
+ #: includes/class-wcj-price-by-country.php:142
3331
  msgid ""
3332
  "Change product's price and currency by customer's country. Customer's "
3333
  "country is detected automatically by IP, or selected by customer manually."
3334
  msgstr ""
3335
 
3336
+ #: includes/class-wcj-price-by-country.php:147
3337
  msgid "Customer Country Detection Method"
3338
  msgstr ""
3339
 
3340
+ #: includes/class-wcj-price-by-country.php:149
3341
  msgid ""
3342
  "If you choose \"by user selection\", use [wcj_country_select_drop_down_list] "
3343
  "shortcode to display country selection list on frontend."
3344
  msgstr ""
3345
 
3346
+ #: includes/class-wcj-price-by-country.php:153
3347
  msgid "by IP"
3348
  msgstr ""
3349
 
3350
+ #: includes/class-wcj-price-by-country.php:154
3351
  msgid "by IP, then by user selection"
3352
  msgstr ""
3353
 
3354
+ #: includes/class-wcj-price-by-country.php:155
3355
  msgid "by user selection"
3356
  msgstr ""
3357
 
3358
+ #: includes/class-wcj-price-by-country.php:172
3359
+ msgid "Override Country Options"
3360
+ msgstr ""
3361
+
3362
+ #: includes/class-wcj-price-by-country.php:177
3363
+ msgid "No Override"
3364
+ msgstr ""
3365
+
3366
+ #: includes/class-wcj-price-by-country.php:178
3367
  msgid "Override Country with Customer's Checkout Billing Country"
3368
  msgstr ""
3369
 
3370
+ #: includes/class-wcj-price-by-country.php:179
3371
+ msgid "Override Country with Customer's Checkout Shipping Country"
3372
+ msgstr ""
3373
+
3374
+ #: includes/class-wcj-price-by-country.php:192
3375
  msgid "Price Rounding"
3376
  msgstr ""
3377
 
3378
+ #: includes/class-wcj-price-by-country.php:193
3379
  msgid "If you choose to multiply price, set rounding options here."
3380
  msgstr ""
3381
 
3382
+ #: includes/class-wcj-price-by-country.php:198
3383
  msgid "No rounding"
3384
  msgstr ""
3385
 
3386
+ #: includes/class-wcj-price-by-country.php:199
3387
  msgid "Round"
3388
  msgstr ""
3389
 
3390
+ #: includes/class-wcj-price-by-country.php:200
3391
  msgid "Round down"
3392
  msgstr ""
3393
 
3394
+ #: includes/class-wcj-price-by-country.php:201
3395
  msgid "Round up"
3396
  msgstr ""
3397
 
3398
+ #: includes/class-wcj-price-by-country.php:206
3399
  msgid "Price by Country on per Product Basis"
3400
  msgstr ""
3401
 
3402
+ #: includes/class-wcj-price-by-country.php:215
3403
+ msgid "Price Filter Widget and Sorting by Price Support"
3404
  msgstr ""
3405
 
3406
+ #: includes/class-wcj-price-by-country.php:218
3407
+ msgid "Recalculate price filter widget and sorting by price product prices"
3408
+ msgstr ""
3409
+
3410
+ #: includes/class-wcj-price-by-country.php:225
3411
  msgid "Add Countries Flags Images to Select Drop-Down Box"
3412
  msgstr ""
3413
 
3414
+ #: includes/class-wcj-price-by-country.php:227
3415
  msgid ""
3416
  "If you are using [wcj_country_select_drop_down_list] shortcode or \"Booster: "
3417
  "Country Switcher\" widget, this will add country flags to these select boxes."
3418
  msgstr ""
3419
 
3420
+ #: includes/class-wcj-price-by-country.php:234
3421
+ msgid "Search Engine Bots"
3422
+ msgstr ""
3423
+
3424
+ #: includes/class-wcj-price-by-country.php:235
3425
+ msgid "Disable Price by Country for Bots"
3426
+ msgstr ""
3427
+
3428
+ #: includes/class-wcj-price-by-country.php:244
3429
  msgid "Country Groups"
3430
  msgstr ""
3431
 
3432
+ #: includes/class-wcj-price-by-country.php:250
3433
  msgid "Countries Selection"
3434
  msgstr ""
3435
 
3436
+ #: includes/class-wcj-price-by-country.php:251
3437
  msgid "Choose how do you want to enter countries groups in admin."
3438
  msgstr ""
3439
 
3440
+ #: includes/class-wcj-price-by-country.php:256
3441
  msgid "Comma separated list"
3442
  msgstr ""
3443
 
3444
+ #: includes/class-wcj-price-by-country.php:257
3445
  msgid "Multiselect"
3446
  msgstr ""
3447
 
3448
+ #: includes/class-wcj-price-by-country.php:258
3449
  msgid "Chosen select"
3450
  msgstr ""
3451
 
3452
+ #: includes/class-wcj-price-by-country.php:263
3453
  msgid "Autogenerate Groups"
3454
  msgstr ""
3455
 
3456
+ #: includes/class-wcj-price-by-country.php:268
3457
  msgid "Currencies supported in both PayPal and Yahoo Exchange Rates:"
3458
  msgstr ""
3459
 
3460
+ #: includes/class-wcj-price-by-country.php:270
3461
+ #: includes/class-wcj-price-by-country.php:275
3462
+ #: includes/class-wcj-price-by-country.php:280
3463
  msgid "Generate"
3464
  msgstr ""
3465
 
3466
+ #: includes/class-wcj-price-by-country.php:273
3467
  msgid "Currencies supported in Yahoo Exchange Rates:"
3468
  msgstr ""
3469
 
3470
+ #: includes/class-wcj-price-by-country.php:278
3471
  msgid "All Countries and Currencies:"
3472
  msgstr ""
3473
 
3474
+ #: includes/class-wcj-price-by-country.php:285
3475
  msgid "Groups Number"
3476
  msgstr ""
3477
 
3478
+ #: includes/class-wcj-price-by-country.php:304
3479
  msgid ""
3480
  "Countries. List of comma separated country codes.<br>For country codes and "
3481
  "predifined sets visit <a href=\"http://booster.io/features/prices-and-"
3482
  "currencies-by-customers-country\" target=\"_blank\">http://booster.io</a>"
3483
  msgstr ""
3484
 
3485
+ #: includes/class-wcj-price-by-country.php:380
3486
  msgid "Multiply Price by"
3487
  msgstr ""
3488
 
3489
+ #: includes/class-wcj-price-by-country.php:403
3490
  #: includes/price-by-country/class-wcj-price-by-country-local.php:143
3491
  msgid "Make empty price"
3492
  msgstr ""
3820
  msgid "Open external products on add to cart in new window."
3821
  msgstr ""
3822
 
3823
+ #: includes/class-wcj-product-add-to-cart.php:215
3824
  msgid "Disable Add to Cart Button (Single Product Page)"
3825
  msgstr ""
3826
 
3827
+ #: includes/class-wcj-product-add-to-cart.php:225
3828
  msgid "Disable Add to Cart Button (Category/Archives)"
3829
  msgstr ""
3830
 
3831
+ #: includes/class-wcj-product-add-to-cart.php:235
3832
+ msgid "Custom Add to Cart Button URL (Category/Archives)"
3833
+ msgstr ""
3834
+
3835
+ #: includes/class-wcj-product-add-to-cart.php:246
3836
+ msgid "As shop default (no changes)"
3837
+ msgstr ""
3838
+
3839
+ #: includes/class-wcj-product-add-to-cart.php:250
3840
+ msgid "Disable Add to Cart Button AJAX"
3841
+ msgstr ""
3842
+
3843
+ #: includes/class-wcj-product-add-to-cart.php:341
3844
  msgid "Add to Cart Local Redirect Options"
3845
  msgstr ""
3846
 
3847
+ #: includes/class-wcj-product-add-to-cart.php:343
3848
  msgid ""
3849
  "This section lets you set any local URL to redirect to after successfully "
3850
  "adding product to cart. Leave empty to redirect to checkout page (skipping "
3851
  "the cart page)."
3852
  msgstr ""
3853
 
3854
+ #: includes/class-wcj-product-add-to-cart.php:347
3855
  msgid "Local Redirect"
3856
  msgstr ""
3857
 
3858
+ #: includes/class-wcj-product-add-to-cart.php:354
3859
  msgid "Local Redirect URL"
3860
  msgstr ""
3861
 
3862
+ #: includes/class-wcj-product-add-to-cart.php:355
3863
  msgid "Performs a safe (local) redirect, using wp_redirect()."
3864
  msgstr ""
3865
 
3866
+ #: includes/class-wcj-product-add-to-cart.php:356
3867
  msgid "Local redirect URL. Leave empty to redirect to checkout."
3868
  msgstr ""
3869
 
3870
+ #: includes/class-wcj-product-add-to-cart.php:367
3871
+ #: includes/class-wcj-product-add-to-cart.php:373
3872
  msgid "Add to Cart on Visit"
3873
  msgstr ""
3874
 
3875
+ #: includes/class-wcj-product-add-to-cart.php:369
3876
  msgid ""
3877
  "This section lets you enable automatically adding product to cart on "
3878
  "visiting the product page. Product is only added once, so if it is already "
3879
  "in cart - duplicate product is not added. "
3880
  msgstr ""
3881
 
3882
+ #: includes/class-wcj-product-add-to-cart.php:384
3883
  msgid "Add to Cart Variable Product"
3884
  msgstr ""
3885
 
3886
+ #: includes/class-wcj-product-add-to-cart.php:389
3887
  msgid "Display Radio Buttons Instead of Drop Box"
3888
  msgstr ""
3889
 
3890
+ #: includes/class-wcj-product-add-to-cart.php:402
3891
  msgid "Add to Cart Quantity"
3892
  msgstr ""
3893
 
3894
+ #: includes/class-wcj-product-add-to-cart.php:407
3895
  msgid "Disable Quantity Field for All Products"
3896
  msgstr ""
3897
 
3898
+ #: includes/class-wcj-product-add-to-cart.php:408
3899
  msgid "Disable on Single Product Page"
3900
  msgstr ""
3901
 
3902
+ #: includes/class-wcj-product-add-to-cart.php:415
3903
  msgid "Disable on Cart Page"
3904
  msgstr ""
3905
 
3906
+ #: includes/class-wcj-product-add-to-cart.php:426
3907
+ msgid "Add to Cart Button Disabling"
3908
  msgstr ""
3909
 
3910
+ #: includes/class-wcj-product-add-to-cart.php:431
3911
+ msgid "Disable Add to Cart Buttons on per Product Basis"
3912
  msgstr ""
3913
 
3914
+ #: includes/class-wcj-product-add-to-cart.php:433
3915
+ #: includes/class-wcj-product-add-to-cart.php:450
3916
+ #: includes/class-wcj-product-add-to-cart.php:467
3917
  msgid "This will add meta box to each product's edit page"
3918
  msgstr ""
3919
 
3920
+ #: includes/class-wcj-product-add-to-cart.php:443
3921
+ msgid "Add to Cart Button Custom URL"
3922
+ msgstr ""
3923
+
3924
+ #: includes/class-wcj-product-add-to-cart.php:448
3925
+ msgid "Custom Add to Cart Buttons URL on Archives on per Product Basis"
3926
+ msgstr ""
3927
+
3928
+ #: includes/class-wcj-product-add-to-cart.php:460
3929
+ msgid "Add to Cart Button AJAX"
3930
+ msgstr ""
3931
+
3932
+ #: includes/class-wcj-product-add-to-cart.php:465
3933
+ msgid "Disable/Enable Add to Cart Button AJAX on per Product Basis"
3934
+ msgstr ""
3935
+
3936
+ #: includes/class-wcj-product-add-to-cart.php:477
3937
  msgid "External Products"
3938
  msgstr ""
3939
 
3940
+ #: includes/class-wcj-product-add-to-cart.php:482
3941
  msgid "Open External Products on Add to Cart in New Window"
3942
  msgstr ""
3943
 
3944
+ #: includes/class-wcj-product-add-to-cart.php:483
3945
  msgid "Enable on Single Product Pages"
3946
  msgstr ""
3947
 
3948
+ #: includes/class-wcj-product-add-to-cart.php:490
3949
  msgid "Enable on Category/Archive Pages"
3950
  msgstr ""
3951
 
3957
  msgid "Add (paid/free/discount) addons to WooCommerce products."
3958
  msgstr ""
3959
 
3960
+ #: includes/class-wcj-product-addons.php:99
3961
  msgid "Some of the required addons are not selected!"
3962
  msgstr ""
3963
 
3964
+ #: includes/class-wcj-product-addons.php:114
3965
  msgid ""
3966
  "Booster: Free plugin's version is limited to only three products with per "
3967
  "product addons enabled at a time. You will need to get <a href=\"http://"
3969
  "number of products with per product addons."
3970
  msgstr ""
3971
 
3972
+ #: includes/class-wcj-product-addons.php:446
3973
  #: includes/class-wcj-wholesale-price.php:269
3974
  #: includes/class-wcj-wholesale-price.php:304
3975
  msgid "Save product after you change this number."
3976
  msgstr ""
3977
 
3978
+ #: includes/class-wcj-product-addons.php:449
3979
+ #: includes/class-wcj-product-addons.php:560
3980
  msgid "Product Addons Total Number"
3981
  msgstr ""
3982
 
3983
+ #: includes/class-wcj-product-addons.php:456
3984
+ #: includes/class-wcj-product-addons.php:576
3985
  msgid "Product Addon"
3986
  msgstr ""
3987
 
3988
+ #: includes/class-wcj-product-addons.php:472
3989
+ #: includes/class-wcj-product-addons.php:590
3990
  msgid "Radio Buttons"
3991
  msgstr ""
3992
 
3993
+ #: includes/class-wcj-product-addons.php:476
3994
+ #: includes/class-wcj-product-addons.php:594
3995
  msgid "Label(s)"
3996
  msgstr ""
3997
 
3998
+ #: includes/class-wcj-product-addons.php:477
3999
+ #: includes/class-wcj-product-addons.php:484
4000
+ #: includes/class-wcj-product-addons.php:491
4001
+ #: includes/class-wcj-product-addons.php:595
4002
+ #: includes/class-wcj-product-addons.php:603
4003
+ #: includes/class-wcj-product-addons.php:612
4004
  msgid "For radio enter one value per line."
4005
  msgstr ""
4006
 
4007
+ #: includes/class-wcj-product-addons.php:483
4008
+ #: includes/class-wcj-product-addons.php:602
4009
  msgid "Price(s)"
4010
  msgstr ""
4011
 
4012
+ #: includes/class-wcj-product-addons.php:490
4013
+ #: includes/class-wcj-product-addons.php:611
4014
  msgid "Tooltip(s)"
4015
  msgstr ""
4016
 
4017
+ #: includes/class-wcj-product-addons.php:497
4018
+ #: includes/class-wcj-product-addons.php:619
4019
  #: includes/class-wcj-purchase-data.php:338
4020
  msgid "Default Value"
4021
  msgstr ""
4022
 
4023
+ #: includes/class-wcj-product-addons.php:498
4024
+ #: includes/class-wcj-product-addons.php:620
4025
  msgid ""
4026
  "For checkbox use 'checked'; for radio enter default label. Leave blank for "
4027
  "no default value."
4028
  msgstr ""
4029
 
4030
+ #: includes/class-wcj-product-addons.php:504
4031
  msgid "Is required"
4032
  msgstr ""
4033
 
4034
+ #: includes/class-wcj-product-addons.php:533
4035
  msgid "Enable per Product Addons"
4036
  msgstr ""
4037
 
4038
+ #: includes/class-wcj-product-addons.php:535
4039
  msgid ""
4040
  "When enabled, this will add new \"Booster: Product Addons\" meta box to each "
4041
  "product's edit page."
4042
  msgstr ""
4043
 
4044
+ #: includes/class-wcj-product-addons.php:547
4045
  msgid "All Product Options"
4046
  msgstr ""
4047
 
4048
+ #: includes/class-wcj-product-addons.php:552
4049
  msgid "Enable All Products Addons"
4050
  msgstr ""
4051
 
4052
+ #: includes/class-wcj-product-addons.php:554
4053
  msgid "When enabled, this will add addons below to all products."
4054
  msgstr ""
4055
 
4056
+ #: includes/class-wcj-product-addons.php:561
4057
  msgid "Save changes after you change this number."
4058
  msgstr ""
4059
 
4060
+ #: includes/class-wcj-product-addons.php:627
4061
  #: includes/class-wcj-product-by-user.php:190
4062
  msgid "Is Required"
4063
  msgstr ""
4064
 
4065
+ #: includes/class-wcj-product-addons.php:647
4066
  msgid "Enable AJAX on Single Product Page"
4067
  msgstr ""
4068
 
4069
+ #: includes/class-wcj-product-addons.php:654
4070
+ msgid "Addon in Cart Format"
4071
+ msgstr ""
4072
+
4073
+ #: includes/class-wcj-product-addons.php:662
4074
+ #: includes/class-wcj-product-addons.php:685
4075
+ msgid "Each Addon"
4076
+ msgstr ""
4077
+
4078
+ #: includes/class-wcj-product-addons.php:663
4079
+ #: includes/class-wcj-product-addons.php:686
4080
+ msgid "You can use %addon_label% and %addon_price%."
4081
+ msgstr ""
4082
+
4083
+ #: includes/class-wcj-product-addons.php:677
4084
+ msgid "Addon in Order Details Table Format"
4085
+ msgstr ""
4086
+
4087
+ #: includes/class-wcj-product-addons.php:700
4088
+ msgid "Admin Order Page"
4089
+ msgstr ""
4090
+
4091
+ #: includes/class-wcj-product-addons.php:701
4092
+ msgid "Hide all addons"
4093
+ msgstr ""
4094
+
4095
  #: includes/class-wcj-product-bookings.php:27
4096
  msgid "Bookings"
4097
  msgstr ""
4254
  msgstr ""
4255
 
4256
  #: includes/class-wcj-product-bulk-price-converter.php:261
4257
+ #: includes/shortcodes/class-wcj-products-shortcodes.php:222
4258
  msgid "Any"
4259
  msgstr ""
4260
 
4283
  msgstr ""
4284
 
4285
  #: includes/class-wcj-product-by-country.php:28
4286
+ msgid "Display WooCommerce products by customer's country."
4287
  msgstr ""
4288
 
4289
  #: includes/class-wcj-product-by-country.php:76
4292
 
4293
  #: includes/class-wcj-product-by-country.php:90
4294
  msgid ""
4295
+ "When enabled, module will add new \"Booster: Product Visibility by Country\" "
4296
+ "meta box to each product's edit page."
4297
  msgstr ""
4298
 
4299
  #: includes/class-wcj-product-by-user-role.php:27
4301
  msgstr ""
4302
 
4303
  #: includes/class-wcj-product-by-user-role.php:28
4304
+ msgid "Display WooCommerce products by customer's user role."
4305
  msgstr ""
4306
 
4307
+ #: includes/class-wcj-product-by-user-role.php:73
4308
  msgid "Visible for User Roles"
4309
  msgstr ""
4310
 
4311
+ #: includes/class-wcj-product-by-user-role.php:74
4312
+ msgid "Hold Control (Ctrl) key to select multiple roles."
4313
+ msgstr ""
4314
+
4315
+ #: includes/class-wcj-product-by-user-role.php:88
4316
  msgid ""
4317
+ "When enabled, module will add new \"Booster: Product Visibility by User Role"
4318
+ "\" meta box to each product's edit page."
4319
  msgstr ""
4320
 
4321
  #: includes/class-wcj-product-by-user.php:27
4342
  #: includes/class-wcj-product-tabs.php:542
4343
  #: includes/class-wcj-purchase-data.php:321
4344
  #: includes/class-wcj-related-products.php:123
4345
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:68
4346
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:214
4347
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:90
4348
+ #: includes/shipping/class-wc-shipping-wcj-custom.php:82
4349
  #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:259
4350
  msgid "Title"
4351
  msgstr ""
5209
  #: includes/class-wcj-product-tabs.php:635
5210
  #: includes/class-wcj-product-tabs.php:644
5211
  #: includes/class-wcj-product-tabs.php:653
5212
+ #: includes/classes/class-wcj-module.php:432
5213
  msgid "Depreciated"
5214
  msgstr ""
5215
 
5625
  msgid "Make non clickable"
5626
  msgstr ""
5627
 
5628
+ #: includes/class-wcj-shipping.php:27
5629
  msgid "Add multiple custom shipping methods to WooCommerce."
5630
  msgstr ""
5631
 
5632
+ #: includes/class-wcj-shipping.php:28
5633
+ msgid "Add descriptions and icons to shipping methods on frontend."
5634
+ msgstr ""
5635
+
5636
  #: includes/class-wcj-shipping.php:29
5637
  msgid "Hide WooCommerce shipping when free is available."
5638
  msgstr ""
5641
  msgid "Display \"left to free shipping\" info."
5642
  msgstr ""
5643
 
5644
+ #: includes/class-wcj-shipping.php:120 includes/class-wcj-shipping.php:130
5645
+ #: includes/class-wcj-shipping.php:140 includes/class-wcj-shipping.php:339
5646
+ #: includes/class-wcj-shipping.php:373 includes/class-wcj-shipping.php:411
5647
+ #: includes/functions/wcj-functions.php:448
5648
  #: includes/widgets/class-wcj-widget-left-to-free-shipping.php:53
5649
  msgid "%left_to_free% left to free shipping"
5650
  msgstr ""
5651
 
5652
+ #: includes/class-wcj-shipping.php:191
5653
  msgid "Booster: Hide shipping"
5654
  msgstr ""
5655
 
5656
+ #: includes/class-wcj-shipping.php:192 includes/class-wcj-shipping.php:310
5657
  msgid "Hide all when free is available"
5658
  msgstr ""
5659
 
5660
+ #: includes/class-wcj-shipping.php:232
5661
  msgid "WooCommerce > Settings > Shipping"
5662
  msgstr ""
5663
 
5664
+ #: includes/class-wcj-shipping.php:235 includes/class-wcj-shipping.php:242
5665
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:93
5666
+ #: includes/shipping/class-wc-shipping-wcj-custom.php:85
5667
  msgid "Custom Shipping"
5668
  msgstr ""
5669
 
5670
+ #: includes/class-wcj-shipping.php:238
5671
+ msgid "This section lets you add custom shipping method."
5672
+ msgstr ""
5673
+
5674
+ #: includes/class-wcj-shipping.php:239
5675
+ msgid "Visit %s to set method's options."
5676
+ msgstr ""
5677
+
5678
+ #: includes/class-wcj-shipping.php:249
5679
+ msgid "Admin Title"
5680
+ msgstr ""
5681
+
5682
+ #: includes/class-wcj-shipping.php:251
5683
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:51
5684
+ msgid "Booster: Custom Shipping"
5685
+ msgstr ""
5686
+
5687
+ #: includes/class-wcj-shipping.php:262
5688
+ msgid "Custom Shipping (Legacy - without Shipping Zones)"
5689
+ msgstr ""
5690
+
5691
+ #: includes/class-wcj-shipping.php:265
5692
  msgid "This section lets you set number of custom shipping methods to add."
5693
  msgstr ""
5694
 
5695
+ #: includes/class-wcj-shipping.php:266
5696
  msgid "After setting the number, visit %s to set each method options."
5697
  msgstr ""
5698
 
5699
+ #: includes/class-wcj-shipping.php:269
5700
  msgid "Custom Shipping Methods Number"
5701
  msgstr ""
5702
 
5703
+ #: includes/class-wcj-shipping.php:281
5704
  msgid "Admin Title Custom Shipping"
5705
  msgstr ""
5706
 
5707
+ #: includes/class-wcj-shipping.php:295
5708
  msgid "Hide if Free is Available"
5709
  msgstr ""
5710
 
5711
+ #: includes/class-wcj-shipping.php:297
5712
  msgid ""
5713
  "This section lets you hide other shipping options when free shipping is "
5714
  "available on shop frontend."
5715
  msgstr ""
5716
 
5717
+ #: includes/class-wcj-shipping.php:309
5718
  msgid "Hide shipping"
5719
  msgstr ""
5720
 
5721
+ #: includes/class-wcj-shipping.php:321
5722
  msgid "Left to Free Shipping Info Options"
5723
  msgstr ""
5724
 
5725
+ #: includes/class-wcj-shipping.php:323
5726
  msgid ""
5727
  "This section lets you enable info on cart, mini cart and checkout pages."
5728
  msgstr ""
5729
 
5730
+ #: includes/class-wcj-shipping.php:324
5731
  msgid ""
5732
  "You can also use <em>Booster - Left to Free Shipping</em> widget, <em>"
5733
  "[wcj_get_left_to_free_shipping content=\"\"]</em> shortcode or "
5734
  "<em>wcj_get_left_to_free_shipping( $content );</em> function."
5735
  msgstr ""
5736
 
5737
+ #: includes/class-wcj-shipping.php:325
5738
  msgid ""
5739
  "In content you can use: <em>%left_to_free%</em> and <em>"
5740
  "%free_shipping_min_amount%</em> shortcodes."
5741
  msgstr ""
5742
 
5743
+ #: includes/class-wcj-shipping.php:329
5744
  msgid "Info on Cart"
5745
  msgstr ""
5746
 
5747
+ #: includes/class-wcj-shipping.php:354 includes/class-wcj-shipping.php:392
5748
+ #: includes/class-wcj-shipping.php:436
5749
  msgid "Position Order (Priority)"
5750
  msgstr ""
5751
 
5752
+ #: includes/class-wcj-shipping.php:361
5753
  msgid "Info on Mini Cart"
5754
  msgstr ""
5755
 
5756
+ #: includes/class-wcj-shipping.php:399
5757
  msgid "Info on Checkout"
5758
  msgstr ""
5759
 
5760
+ #: includes/class-wcj-shipping.php:443
5761
  msgid "Message on Free Shipping Reached"
5762
  msgstr ""
5763
 
5764
+ #: includes/class-wcj-shipping.php:444
5765
  msgid "You can set it empty"
5766
  msgstr ""
5767
 
5768
+ #: includes/class-wcj-shipping.php:446
5769
+ #: includes/functions/wcj-functions.php:488
5770
  msgid "You have Free delivery"
5771
  msgstr ""
5772
 
5773
+ #: includes/class-wcj-shipping.php:457 includes/class-wcj-shipping.php:463
5774
+ msgid "Shipping Descriptions"
5775
+ msgstr ""
5776
+
5777
+ #: includes/class-wcj-shipping.php:459
5778
+ msgid ""
5779
+ "This section will allow you to add any text (e.g. description) for shipping "
5780
+ "method. Text will be visible on cart and checkout pages. You can add HTML "
5781
+ "tags here, e.g. try \"%s\""
5782
+ msgstr ""
5783
+
5784
+ #: includes/class-wcj-shipping.php:489 includes/class-wcj-shipping.php:495
5785
+ msgid "Shipping Icons"
5786
+ msgstr ""
5787
+
5788
+ #: includes/class-wcj-shipping.php:491
5789
+ msgid ""
5790
+ "This section will allow you to add icons for shipping method. Icons will be "
5791
+ "visible on cart and checkout pages."
5792
+ msgstr ""
5793
+
5794
+ #: includes/class-wcj-shipping.php:502
5795
+ msgid "Icon Position"
5796
+ msgstr ""
5797
+
5798
+ #: includes/class-wcj-shipping.php:507
5799
+ msgid "Before label"
5800
+ msgstr ""
5801
+
5802
+ #: includes/class-wcj-shipping.php:508
5803
+ msgid "After label"
5804
+ msgstr ""
5805
+
5806
+ #: includes/class-wcj-shipping.php:512
5807
+ msgid "Icon Style"
5808
+ msgstr ""
5809
+
5810
+ #: includes/class-wcj-shipping.php:513
5811
+ msgid ""
5812
+ "You can also style icons with CSS class \"wcj_shipping_icon\", or id "
5813
+ "\"wcj_shipping_icon_method_id\""
5814
+ msgstr ""
5815
+
5816
+ #: includes/class-wcj-shipping.php:524
5817
+ msgid "Image URL"
5818
+ msgstr ""
5819
+
5820
  #: includes/class-wcj-sku.php:27
5821
  msgid "Generate WooCommerce SKUs automatically."
5822
  msgstr ""
5933
  "Tool."
5934
  msgstr ""
5935
 
5936
+ #: includes/class-wcj-sorting.php:26
5937
  msgid "Sorting"
5938
  msgstr ""
5939
 
5940
+ #: includes/class-wcj-sorting.php:27
5941
  msgid ""
5942
  "Add more WooCommerce sorting options or remove all sorting including default."
5943
  msgstr ""
5944
 
5945
+ #: includes/class-wcj-sorting.php:67
5946
  msgid "WooJetpack: Remove All Sorting"
5947
  msgstr ""
5948
 
5949
+ #: includes/class-wcj-sorting.php:71
5950
  msgid "Completely remove sorting from the shop front end"
5951
  msgstr ""
5952
 
5953
+ #: includes/class-wcj-sorting.php:165 includes/class-wcj-sorting.php:170
5954
  msgid "Remove All Sorting"
5955
  msgstr ""
5956
 
5957
+ #: includes/class-wcj-sorting.php:171
5958
  msgid "Remove all sorting (including WooCommerce default)"
5959
  msgstr ""
5960
 
5961
+ #: includes/class-wcj-sorting.php:183 includes/class-wcj-sorting.php:188
5962
  msgid "Add More Sorting"
5963
  msgstr ""
5964
 
5965
+ #: includes/class-wcj-sorting.php:195
5966
  msgid "Sort by Name"
5967
  msgstr ""
5968
 
5969
+ #: includes/class-wcj-sorting.php:196 includes/class-wcj-sorting.php:199
5970
  msgid "Sort by title: A to Z"
5971
  msgstr ""
5972
 
5973
+ #: includes/class-wcj-sorting.php:197 includes/class-wcj-sorting.php:206
5974
+ #: includes/class-wcj-sorting.php:215 includes/class-wcj-sorting.php:224
5975
+ #: includes/class-wcj-sorting.php:242 includes/class-wcj-sorting.php:251
5976
  msgid "Text to show on frontend. Leave blank to disable."
5977
  msgstr ""
5978
 
5979
+ #: includes/class-wcj-sorting.php:205 includes/class-wcj-sorting.php:208
5980
  msgid "Sort by title: Z to A"
5981
  msgstr ""
5982
 
5983
+ #: includes/class-wcj-sorting.php:213
5984
  msgid "Sort by SKU"
5985
  msgstr ""
5986
 
5987
+ #: includes/class-wcj-sorting.php:214 includes/class-wcj-sorting.php:217
5988
  msgid "Sort by SKU: low to high"
5989
  msgstr ""
5990
 
5991
+ #: includes/class-wcj-sorting.php:223 includes/class-wcj-sorting.php:226
5992
  msgid "Sort by SKU: high to low"
5993
  msgstr ""
5994
 
5995
+ #: includes/class-wcj-sorting.php:232
5996
  msgid "Sort SKUs as numbers instead of as texts"
5997
  msgstr ""
5998
 
5999
+ #: includes/class-wcj-sorting.php:240
6000
  msgid "Sort by stock quantity"
6001
  msgstr ""
6002
 
6003
+ #: includes/class-wcj-sorting.php:241 includes/class-wcj-sorting.php:244
6004
  msgid "Sort by stock quantity: low to high"
6005
  msgstr ""
6006
 
6007
+ #: includes/class-wcj-sorting.php:250 includes/class-wcj-sorting.php:253
6008
  msgid "Sort by stock quantity: high to low"
6009
  msgstr ""
6010
 
6023
  msgstr ""
6024
 
6025
  #: includes/class-wcj-wholesale-price.php:262
6026
+ #: includes/class-wcj-wholesale-price.php:407
6027
  msgid "Discount Type"
6028
  msgstr ""
6029
 
6030
  #: includes/class-wcj-wholesale-price.php:268
6031
  #: includes/class-wcj-wholesale-price.php:303
6032
+ #: includes/class-wcj-wholesale-price.php:443
6033
+ #: includes/class-wcj-wholesale-price.php:498
6034
  msgid "Number of levels"
6035
  msgstr ""
6036
 
6050
 
6051
  #: includes/class-wcj-wholesale-price.php:283
6052
  #: includes/class-wcj-wholesale-price.php:318
6053
+ #: includes/class-wcj-wholesale-price.php:456
6054
+ #: includes/class-wcj-wholesale-price.php:512
6055
  msgid "Min quantity"
6056
  msgstr ""
6057
 
6058
  #: includes/class-wcj-wholesale-price.php:290
6059
  #: includes/class-wcj-wholesale-price.php:325
 
6060
  #: includes/class-wcj-wholesale-price.php:464
6061
+ #: includes/class-wcj-wholesale-price.php:465
6062
  #: includes/class-wcj-wholesale-price.php:520
6063
+ #: includes/class-wcj-wholesale-price.php:521
6064
  msgid "Discount"
6065
  msgstr ""
6066
 
6086
  msgid "Show discount info on cart page"
6087
  msgstr ""
6088
 
6089
+ #: includes/class-wcj-wholesale-price.php:393
6090
+ msgid "Show"
6091
+ msgstr ""
6092
+
6093
  #: includes/class-wcj-wholesale-price.php:399
6094
  msgid "If show discount info on cart page is enabled, set format here"
6095
  msgstr ""
6096
 
6097
+ #: includes/class-wcj-wholesale-price.php:400
6098
+ msgid "Replaced values: %old_price%, %price%, %discount_value%."
6099
  msgstr ""
6100
 
6101
  #: includes/class-wcj-wholesale-price.php:417
6102
+ msgid "Products to include"
6103
+ msgstr ""
6104
+
6105
+ #: includes/class-wcj-wholesale-price.php:418
6106
  msgid "Leave blank to include all products."
6107
  msgstr ""
6108
 
6109
+ #: includes/class-wcj-wholesale-price.php:426
6110
  msgid "Products to exclude"
6111
  msgstr ""
6112
 
6113
+ #: includes/class-wcj-wholesale-price.php:438
6114
  msgid "Wholesale Levels Options"
6115
  msgstr ""
6116
 
6117
+ #: includes/class-wcj-wholesale-price.php:457
6118
+ #: includes/class-wcj-wholesale-price.php:513
6119
  msgid "Minimum quantity to apply discount"
6120
  msgstr ""
6121
 
6122
+ #: includes/class-wcj-wholesale-price.php:478
6123
  msgid "Additional User Roles Options"
6124
  msgstr ""
6125
 
6126
+ #: includes/class-wcj-wholesale-price.php:480
6127
  msgid ""
6128
  "If you want to set different wholesale pricing options for different user "
6129
  "roles, fill this section. Please note that you can also use Booster's "
6130
  "\"Price by User Role\" module without filling this section."
6131
  msgstr ""
6132
 
6133
+ #: includes/class-wcj-wholesale-price.php:484
6134
  msgid "User Roles Settings"
6135
  msgstr ""
6136
 
6142
  msgid "Booster for WooCommerce basic WPML support."
6143
  msgstr ""
6144
 
6145
+ #: includes/class-wcj-wpml.php:66 includes/classes/class-wcj-module.php:344
6146
  msgid "Tools"
6147
  msgstr ""
6148
 
6149
+ #: includes/class-wcj-wpml.php:71 includes/classes/class-wcj-module.php:350
6150
  msgid "Module Tools"
6151
  msgstr ""
6152
 
6167
  msgid "Settings have been reset to defaults."
6168
  msgstr ""
6169
 
6170
+ #: includes/classes/class-wcj-module.php:332
6171
  msgid "Back to Module Settings"
6172
  msgstr ""
6173
 
6174
+ #: includes/classes/class-wcj-module.php:424
6175
  msgid "disabled"
6176
  msgstr ""
6177
 
6178
+ #: includes/classes/class-wcj-module.php:470
6179
  msgid "Reset Settings"
6180
  msgstr ""
6181
 
6182
+ #: includes/classes/class-wcj-module.php:476
6183
  msgid "Reset Module to Default Settings"
6184
  msgstr ""
6185
 
6186
+ #: includes/classes/class-wcj-module.php:477
6187
  msgid "Reset Submodule to Default Settings"
6188
  msgstr ""
6189
 
6190
+ #: includes/classes/class-wcj-module.php:480
6191
  msgid "Reset settings"
6192
  msgstr ""
6193
 
6194
+ #: includes/classes/class-wcj-module.php:514
6195
  msgid "Module Options"
6196
  msgstr ""
6197
 
6198
+ #: includes/classes/class-wcj-module.php:521
6199
  msgid "Enable Module"
6200
  msgstr ""
6201
 
6867
  msgid "[{site_title}] Custom Subject - Order ({order_number}) - {order_date}"
6868
  msgstr ""
6869
 
6870
+ #: includes/emails/class-wc-email-wcj-custom.php:251
6871
  msgid "New order (%s)"
6872
  msgstr ""
6873
 
6874
+ #: includes/emails/class-wc-email-wcj-custom.php:252
6875
  msgid "Order status updated to %s"
6876
  msgstr ""
6877
 
6878
+ #: includes/emails/class-wc-email-wcj-custom.php:255
6879
  msgid "Order status %s to %s"
6880
  msgstr ""
6881
 
6882
+ #: includes/emails/class-wc-email-wcj-custom.php:262
6883
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:61
6884
+ #: includes/shipping/class-wc-shipping-wcj-custom.php:76
6885
  msgid "Enable/Disable"
6886
  msgstr ""
6887
 
6888
+ #: includes/emails/class-wc-email-wcj-custom.php:264
6889
  msgid "Enable this email notification"
6890
  msgstr ""
6891
 
6892
+ #: includes/emails/class-wc-email-wcj-custom.php:268
6893
  msgid "Trigger(s)"
6894
  msgstr ""
6895
 
6896
+ #: includes/emails/class-wc-email-wcj-custom.php:272
6897
  msgid ""
6898
  "Please note, that all new orders in WooCommerce by default are created with "
6899
  "Pending Payment status. If you want to change the default order status - you "
6901
  "Settings > Booster > Shipping & Orders > Order Custom Statuses)."
6902
  msgstr ""
6903
 
6904
+ #: includes/emails/class-wc-email-wcj-custom.php:275
6905
  msgid "New order (Any status)"
6906
  msgstr ""
6907
 
6908
+ #: includes/emails/class-wc-email-wcj-custom.php:280
6909
  msgid "Reset password notification"
6910
  msgstr ""
6911
 
6912
+ #: includes/emails/class-wc-email-wcj-custom.php:281
6913
  msgid "Order fully refunded notification"
6914
  msgstr ""
6915
 
6916
+ #: includes/emails/class-wc-email-wcj-custom.php:282
6917
  msgid "Order partially refunded notification"
6918
  msgstr ""
6919
 
6920
+ #: includes/emails/class-wc-email-wcj-custom.php:283
6921
  msgid "New customer note notification"
6922
  msgstr ""
6923
 
6924
+ #: includes/emails/class-wc-email-wcj-custom.php:284
6925
+ msgid "Low stock notification"
6926
+ msgstr ""
6927
+
6928
+ #: includes/emails/class-wc-email-wcj-custom.php:285
6929
+ msgid "No stock notification"
6930
+ msgstr ""
6931
+
6932
+ #: includes/emails/class-wc-email-wcj-custom.php:286
6933
+ msgid "Product on backorder notification"
6934
+ msgstr ""
6935
+
6936
+ #: includes/emails/class-wc-email-wcj-custom.php:287
6937
+ msgid "Created customer notification"
6938
+ msgstr ""
6939
+
6940
+ #: includes/emails/class-wc-email-wcj-custom.php:295
6941
  msgid "Recipient(s)"
6942
  msgstr ""
6943
 
6944
+ #: includes/emails/class-wc-email-wcj-custom.php:297
6945
  msgid ""
6946
  "Enter recipients (comma separated) for this email. Defaults to <code>%s</"
6947
  "code>."
6948
  msgstr ""
6949
 
6950
+ #: includes/emails/class-wc-email-wcj-custom.php:297
6951
  msgid "Or enter <code>%customer%</code> to send to customer billing email."
6952
  msgstr ""
6953
 
6954
+ #: includes/emails/class-wc-email-wcj-custom.php:302
6955
  msgid "Subject"
6956
  msgstr ""
6957
 
6958
+ #: includes/emails/class-wc-email-wcj-custom.php:304
6959
  msgid ""
6960
  "This controls the email subject line. Leave blank to use the default "
6961
  "subject: <code>%s</code>."
6962
  msgstr ""
6963
 
6964
+ #: includes/emails/class-wc-email-wcj-custom.php:309
6965
  msgid "Email Heading"
6966
  msgstr ""
6967
 
6968
+ #: includes/emails/class-wc-email-wcj-custom.php:311
6969
  msgid ""
6970
  "This controls the main heading contained within the email notification. "
6971
  "Leave blank to use the default heading: <code>%s</code>."
6972
  msgstr ""
6973
 
6974
+ #: includes/emails/class-wc-email-wcj-custom.php:316
6975
  msgid "Email type"
6976
  msgstr ""
6977
 
6978
+ #: includes/emails/class-wc-email-wcj-custom.php:318
6979
  msgid "Choose which format of email to send."
6980
  msgstr ""
6981
 
6982
+ #: includes/emails/class-wc-email-wcj-custom.php:324
6983
  msgid "HTML template"
6984
  msgstr ""
6985
 
6986
+ #: includes/emails/class-wc-email-wcj-custom.php:326
6987
+ #: includes/emails/class-wc-email-wcj-custom.php:335
6988
  msgid "You can use shortcodes here. E.g. Booster's order shortcodes."
6989
  msgstr ""
6990
 
6991
+ #: includes/emails/class-wc-email-wcj-custom.php:333
6992
  msgid "Plain text template"
6993
  msgstr ""
6994
 
7988
  msgid "Zimbabwe"
7989
  msgstr ""
7990
 
7991
+ #: includes/functions/wcj-functions.php:509
7992
  msgid "Before cart"
7993
  msgstr ""
7994
 
7995
+ #: includes/functions/wcj-functions.php:510
7996
  msgid "Before cart table"
7997
  msgstr ""
7998
 
7999
+ #: includes/functions/wcj-functions.php:511
8000
  msgid "Before cart contents"
8001
  msgstr ""
8002
 
8003
+ #: includes/functions/wcj-functions.php:512
8004
  msgid "Cart contents"
8005
  msgstr ""
8006
 
8007
+ #: includes/functions/wcj-functions.php:513
8008
  msgid "Cart coupon"
8009
  msgstr ""
8010
 
8011
+ #: includes/functions/wcj-functions.php:514
8012
  msgid "Cart actions"
8013
  msgstr ""
8014
 
8015
+ #: includes/functions/wcj-functions.php:515
8016
  msgid "After cart contents"
8017
  msgstr ""
8018
 
8019
+ #: includes/functions/wcj-functions.php:516
8020
  msgid "After cart table"
8021
  msgstr ""
8022
 
8023
+ #: includes/functions/wcj-functions.php:517
8024
  msgid "Cart collaterals"
8025
  msgstr ""
8026
 
8027
+ #: includes/functions/wcj-functions.php:518
8028
  msgid "After cart"
8029
  msgstr ""
8030
 
8031
+ #: includes/functions/wcj-functions.php:520
8032
  msgid "Before cart totals"
8033
  msgstr ""
8034
 
8035
+ #: includes/functions/wcj-functions.php:521
8036
  msgid "Cart totals: Before shipping"
8037
  msgstr ""
8038
 
8039
+ #: includes/functions/wcj-functions.php:522
8040
  msgid "Cart totals: After shipping"
8041
  msgstr ""
8042
 
8043
+ #: includes/functions/wcj-functions.php:523
8044
  msgid "Cart totals: Before order total"
8045
  msgstr ""
8046
 
8047
+ #: includes/functions/wcj-functions.php:524
8048
  msgid "Cart totals: After order total"
8049
  msgstr ""
8050
 
8051
+ #: includes/functions/wcj-functions.php:525
8052
  msgid "Proceed to checkout"
8053
  msgstr ""
8054
 
8055
+ #: includes/functions/wcj-functions.php:526
8056
  msgid "After cart totals"
8057
  msgstr ""
8058
 
8059
+ #: includes/functions/wcj-functions.php:528
8060
  msgid "Before shipping calculator"
8061
  msgstr ""
8062
 
8063
+ #: includes/functions/wcj-functions.php:529
8064
  msgid "After shipping calculator"
8065
  msgstr ""
8066
 
8067
+ #: includes/functions/wcj-functions.php:531
8068
  msgid "If cart is empty"
8069
  msgstr ""
8070
 
8071
+ #: includes/functions/wcj-functions.php:798
8072
+ #: includes/functions/wcj-functions.php:817
8073
  msgid "Guest"
8074
  msgstr ""
8075
 
8076
+ #: includes/functions/wcj-functions.php:1033
8077
  msgctxt "Order status"
8078
  msgid "Pending Payment"
8079
  msgstr ""
8080
 
8081
+ #: includes/functions/wcj-functions.php:1035
8082
  msgctxt "Order status"
8083
  msgid "On Hold"
8084
  msgstr ""
8123
  msgid "Custom Documents"
8124
  msgstr ""
8125
 
8126
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:63
8127
  msgid "Enable Custom Payment"
8128
  msgstr ""
8129
 
8130
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:70
8131
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:92
8132
+ #: includes/shipping/class-wc-shipping-wcj-custom.php:84
8133
  msgid "This controls the title which the user sees during checkout."
8134
  msgstr ""
8135
 
8136
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:71
8137
  msgid "Custom Payment"
8138
  msgstr ""
8139
 
8140
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:78
8141
  msgid "Payment method description that the customer will see on your checkout."
8142
  msgstr ""
8143
 
8144
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:79
8145
  msgid "You can add input fields with [wcj_input_field] shortcode."
8146
  msgstr ""
8147
 
8148
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:80
8149
  msgid "Custom Payment Description."
8150
  msgstr ""
8151
 
8152
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:85
8153
  msgid "Instructions"
8154
  msgstr ""
8155
 
8156
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:87
8157
  msgid "Instructions that will be added to the thank you page."
8158
  msgstr ""
8159
 
8160
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:93
8161
  msgid "Email Instructions"
8162
  msgstr ""
8163
 
8164
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:95
8165
  msgid "Instructions that will be added to the emails."
8166
  msgstr ""
8167
 
8168
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:101
8169
  msgid "Icon"
8170
  msgstr ""
8171
 
8172
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:110
8173
  msgid "Minimum order amount"
8174
  msgstr ""
8175
 
8176
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:112
8177
  msgid ""
8178
+ "If you want to set minimum order amount (excluding fees) to show this "
8179
+ "gateway on frontend, enter a number here. Set to 0 to disable."
8180
  msgstr ""
8181
 
8182
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:119
8183
  msgid "Enable for shipping methods"
8184
  msgstr ""
8185
 
8186
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:124
8187
  msgid ""
8188
  "If gateway is only available for certain shipping methods, set it up here. "
8189
  "Leave blank to enable for all methods."
8190
  msgstr ""
8191
 
8192
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:127
8193
  msgid "Select shipping methods"
8194
  msgstr ""
8195
 
8196
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:131
8197
  msgid "Enable for virtual orders"
8198
  msgstr ""
8199
 
8200
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:132
8201
  msgid "Enable gateway if the order is virtual"
8202
  msgstr ""
8203
 
8204
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:146
8205
  msgid "Send Additional Emails"
8206
  msgstr ""
8207
 
8208
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:147
8209
  msgid "Send to Admin"
8210
  msgstr ""
8211
 
8212
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:155
8213
  msgid "Send to Customer"
8214
  msgstr ""
8215
 
8216
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:156
8217
  msgid ""
8218
  "This may help if you are using pending or custom default status and not "
8219
  "getting new order emails."
8220
  msgstr ""
8221
 
8222
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:162
8223
  msgid "Custom Return URL (Thank You Page)"
8224
  msgstr ""
8225
 
8226
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:163
8227
  msgid "URL"
8228
  msgstr ""
8229
 
8230
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:164
8231
  msgid "Enter full URL with http(s)."
8232
  msgstr ""
8233
 
8234
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:165
8235
  msgid "Optional. Leave blank to use default URL."
8236
  msgstr ""
8237
 
8238
+ #: includes/gateways/class-wc-gateway-wcj-custom.php:354
8239
  msgid "Booster for WooCommerce: Custom Payment Gateway"
8240
  msgstr ""
8241
 
8910
  msgid "Reset Currency Rates"
8911
  msgstr ""
8912
 
 
 
 
 
8913
  #: includes/reports/wcj-class-reports-stock.php:30
8914
  msgid "All Products on Stock"
8915
  msgstr ""
9009
  msgid "Report was generated in: "
9010
  msgstr ""
9011
 
9012
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:52
9013
+ #: includes/shipping/class-wc-shipping-wcj-custom.php:45
9014
  msgid "Booster: Custom Shipping Method"
9015
  msgstr ""
9016
 
9017
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:99
9018
+ #: includes/shipping/class-wc-shipping-wcj-custom.php:91
 
 
 
9019
  msgid "Cost calculation type."
9020
  msgstr ""
9021
 
9022
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:103
9023
+ #: includes/shipping/class-wc-shipping-wcj-custom.php:95
9024
  msgid "Flat Rate"
9025
  msgstr ""
9026
 
9027
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:104
9028
+ #: includes/shipping/class-wc-shipping-wcj-custom.php:96
9029
  msgid "By Total Cart Weight"
9030
  msgstr ""
9031
 
9032
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:105
9033
+ #: includes/shipping/class-wc-shipping-wcj-custom.php:97
9034
  msgid "By Total Cart Weight Table"
9035
  msgstr ""
9036
 
9037
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:106
9038
+ #: includes/shipping/class-wc-shipping-wcj-custom.php:98
9039
  msgid "By Total Cart Quantity"
9040
  msgstr ""
9041
 
9042
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:110
9043
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:136
9044
+ #: includes/shipping/class-wc-shipping-wcj-custom.php:102
9045
+ #: includes/shipping/class-wc-shipping-wcj-custom.php:128
9046
  msgid "Cost"
9047
  msgstr ""
9048
 
9049
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:112
9050
+ #: includes/shipping/class-wc-shipping-wcj-custom.php:104
9051
  msgid ""
9052
  "Cost. If calculating by weight - then cost per one weight unit. If "
9053
  "calculating by quantity - then cost per one piece."
9054
  msgstr ""
9055
 
9056
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:118
9057
+ #: includes/shipping/class-wc-shipping-wcj-custom.php:110
9058
  msgid "Weight Table Total Rows"
9059
  msgstr ""
9060
 
9061
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:120
9062
+ #: includes/shipping/class-wc-shipping-wcj-custom.php:112
9063
  msgid "Press Save changes after you change this number."
9064
  msgstr ""
9065
 
9066
+ #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:129
9067
+ #: includes/shipping/class-wc-shipping-wcj-custom.php:121
9068
  msgid "Max Weight"
9069
  msgstr ""
9070
 
9071
+ #: includes/shipping/class-wc-shipping-wcj-custom.php:78
9072
+ msgid "Enable Custom Shipping"
9073
+ msgstr ""
9074
+
9075
  #: includes/shortcodes/class-wcj-input-field-shortcodes.php:52
9076
  msgid "Attribute \"name\" is required!"
9077
  msgstr ""
9078
 
9079
+ #: includes/shortcodes/class-wcj-orders-shortcodes.php:90
9080
  msgid "Dollars"
9081
  msgstr ""
9082
 
9083
+ #: includes/shortcodes/class-wcj-orders-shortcodes.php:91
9084
  msgid "Cents"
9085
  msgstr ""
9086
 
9116
  msgid "Edit Product"
9117
  msgstr ""
9118
 
9119
+ #: includes/shortcodes/class-wcj-products-shortcodes.php:190
9120
  msgid "%s ago"
9121
  msgstr ""
9122
 
9123
+ #: includes/shortcodes/class-wcj-products-shortcodes.php:206
9124
  msgid "No sales yet."
9125
  msgstr ""
9126
 
9242
  "rating. Thank you, we couldn't have done it without you!"
9243
  msgstr ""
9244
 
9245
+ #. #-#-#-#-# plugin.pot (Booster for WooCommerce 2.5.6) #-#-#-#-#
9246
  #. Plugin Name of the plugin/theme
9247
  #: woocommerce-jetpack.php:342
9248
  msgid "Booster for WooCommerce"
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.6
6
- Stable tag: 2.5.6
7
  License: GNU General Public License v3.0
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
@@ -22,6 +22,7 @@ Booster for WooCommerce is a WordPress plugin that supercharges your site with a
22
  * *Currency Exchange Rates* - Automatic currency exchange rates for WooCommerce.
23
  * *Currency for External Products* - Set different currency for external WooCommerce products.
24
  * *Currency per Product* - Display prices for WooCommerce products in different currencies.
 
25
  * *Multicurrency (Currency Switcher)* - Add multiple currencies (currency switcher) to WooCommerce.
26
  * *Multicurrency Product Base Price* - Enter prices for WooCommerce products in different currencies.
27
  * *Price Formats* - Set different WooCommerce price formats for different currencies.
@@ -64,7 +65,7 @@ Booster for WooCommerce is a WordPress plugin that supercharges your site with a
64
  * *Checkout Custom Fields* - Add custom fields to WooCommerce checkout page.
65
  * *Checkout Custom Info* - Add custom info to WooCommerce checkout page.
66
  * *Checkout Files Upload* - Let customers upload files on (or after) WooCommerce checkout.
67
- * *Empty Cart Button* - Add and customize "Empty Cart" button to cart page.
68
  * *Mini Cart* - Customize WooCommerce mini cart widget.
69
 
70
  **Payment Gateways**
@@ -82,8 +83,9 @@ Booster for WooCommerce is a WordPress plugin that supercharges your site with a
82
 
83
  * *Address Formats* - Set address format in WooCommerce orders on per country basis. Force base country display.
84
  * *Order Custom Statuses* - Custom statuses for WooCommerce orders.
 
85
  * *Order Numbers* - WooCommerce sequential order numbering, custom order number prefix, suffix and number width.
86
- * *Orders* - Minimum WooCommerce order amount (optionally by user role); orders auto-complete; custom admin order list columns; admin order currency.
87
  * *Shipping* - Add multiple custom shipping methods to WooCommerce. Add descriptions and icons to shipping methods on frontend. Hide WooCommerce shipping when free is available. Display "left to free shipping" info.
88
  * *Shipping Calculator* - Customize WooCommerce shipping calculator on cart page.
89
 
@@ -96,10 +98,11 @@ Booster for WooCommerce is a WordPress plugin that supercharges your site with a
96
  * *Admin Tools* - Booster for WooCommerce debug and log tools.
97
  * *Booster WPML* - Booster for WooCommerce basic WPML support.
98
  * *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.
99
- * *Export* - WooCommerce export tools.
100
  * *Emails* - Add custom emails. Add another email recipient(s) to all WooCommerce emails.
 
101
  * *General* - Separate custom CSS for front and back end. Shortcodes in Wordpress text widgets. Custom roles tool.
102
  * *Old Slugs* - Remove old WooCommerce products slugs.
 
103
  * *Reports* - WooCommerce stock, sales, customers etc. reports.
104
 
105
  = Feedback =
@@ -108,13 +111,14 @@ Booster for WooCommerce is a WordPress plugin that supercharges your site with a
108
  * For support visit the [contact page](http://booster.io/contact-us/).
109
 
110
  = More =
111
- * Visit the [Booster for WooCommerce plugin page](http://booster.io/)
 
112
 
113
  == Installation ==
114
 
115
- 1. Upload the entire `woocommerce-jetpack` folder to the `/wp-content/plugins/` directory
116
- 2. Activate the plugin through the 'Plugins' menu in WordPress
117
- 3. Go to WooCommerce > Settings > Booster
118
 
119
  == Frequently Asked Questions ==
120
 
@@ -122,12 +126,93 @@ Booster for WooCommerce is a WordPress plugin that supercharges your site with a
122
 
123
  To unlock all Booster for WooCommerce features, please install additional [Booster for WooCommerce Plus](http://booster.io/plus/) plugin.
124
 
 
 
 
 
125
  == Screenshots ==
126
 
127
  1. Plugin admin area.
128
 
129
  == Changelog ==
130
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
131
  = 2.5.6 - 29/09/2016 =
132
  * Dev - Functions - `wcj_get_product_input_fields()` - `unserialize()` added for serialized values.
133
  * Dev - Shortcodes - General - `[wcj_wholesale_price_table]` - `hide_if_zero_quantity` and `table_format` attributes added.
@@ -291,7 +376,7 @@ To unlock all Booster for WooCommerce features, please install additional [Boost
291
  * Dev - EMAILS & MISC. - Reports - Monthly Sales - Major code refactoring. New data added.
292
  * Tweak - Rating message added.
293
  * Tweak - Module's documentation button on new line.
294
- * Tweak - Depreciated module message updated.
295
  * Tweak - PRODUCTS - Product Add to Cart - Module description updated.
296
  * Tweak - PRODUCTS - Product by User - Module and admin settings descriptions updated.
297
  * Tweak - PRODUCTS - Product Info - Moved to EMAILS & MISC. Renamed to "Product Info V1". "Product Info V2" renamed to "Product Info".
@@ -600,8 +685,8 @@ To unlock all Booster for WooCommerce features, please install additional [Boost
600
  * Fix - PRICES & CURRENCIES - Currency Exchange Rates - `no_changes` currency bug fixed.
601
  * Fix - PRICES & CURRENCIES - Multicurrency and Currency Exchange Rates - Currency pairs added to Currency Exchange Rates module.
602
  * Dev - BUTTON & PRICE LABELS - Custom Price Labels - WooCommerce Subscription products support added.
603
- * Dev - PRODUCTS - Product Tabs - "CATEGORIES to HIDE this tab" and "CATEGORIES to SHOW this tab" options added, instead of depreciated "Comma separated CATEGORY IDs..." options.
604
- * Dev - PRODUCTS - Product Tabs - "PRODUCTS to HIDE this tab" and "PRODUCTS to SHOW this tab" options added, instead of depreciated "Comma separated PRODUCT IDs..." options.
605
  * Dev - PRODUCTS - Product Tabs - "TAGS to HIDE this tab" and "TAGS to SHOW this tab" options added.
606
  * Dev - PRODUCTS - Product Tabs - "Reset settings" button added.
607
  * Dev - PAYMENT GATEWAYS - Gateways by Country or State - "Include States (Base Country)" and "Exclude States (Base Country)" options added.
@@ -643,7 +728,7 @@ To unlock all Booster for WooCommerce features, please install additional [Boost
643
  * Dev - Functions - General - `wcj_is_module_enabled()` function added.
644
  * Dev - Shortcodes - General - `[wcj_country_select_drop_down_list]` - manual sorting when `countries` attribute is used.
645
  * Fix - Shortcodes - Orders - `[wcj_order_total_tax_percent]` fixed. `precision` attribute added.
646
- * Fix - Shortcodes - Orders - `get_cart_discount()` (depreciated since WooCommerce 2.3) removed from `[wcj_order_items_table]` shortcode (affected if `discount_as_item` option was used); removed from `[wcj_order_total_discount]` shortcode; `[wcj_order_cart_discount]` shortcode removed.
647
  * Fix - Shortcodes - Orders - `[wcj_order_total_in_words]` - decimal part rounding bug fixed.
648
  * Dev - Shortcodes - Orders - `[wcj_order_total_in_words]` - `whole` and `decimal` attributes added.
649
  * Dev - Shortcodes - Orders - `[wcj_order_items_table]` - `item_short_description` option added.
@@ -660,7 +745,7 @@ To unlock all Booster for WooCommerce features, please install additional [Boost
660
  * Dev - PRICES & CURRENCIES - Bulk Price Converter - Code refactoring.
661
  * Dev - PRICES & CURRENCIES - Bulk Price Converter - Option to convert prices by *product category* added.
662
  * Dev - PRODUCTS - Product Info - Code refactoring.
663
- * Dev - PRODUCTS - Product Info V2 - Initial module release. Product Info marked as depreciated.
664
  * Dev - PRODUCTS - Product Input Fields - Code refactoring.
665
  * Dev - PRODUCTS - Product Input Fields - Required field sign option added.
666
  * Dev - PRODUCTS - Product Input Fields - "time format", "interval" options for Timepicker added.
@@ -704,7 +789,7 @@ To unlock all Booster for WooCommerce features, please install additional [Boost
704
  * Dev - PDF Invoicing - Display - Admin's "Orders" Page - "Column Title", "Create Button" and "Delete Button" options added.
705
  * Dev - PDF Invoicing - Display - "Misc." menu renamed to "Display & Misc.".
706
  * Dev - PDF Invoicing - Display - Customer's "My Account" Page - "Add link" and "Link text" options unlocked.
707
- * Dev - PDF Invoices (v1) marked as "Depreciated".
708
  * Fix - EMAILS & MISC. - General - Tabs on "Booster Tools" page fixed (caused other module's tools tabs disappear). Info on "Booster Tools Dashboard" page fixed.
709
  * Dev - EMAILS & MISC. - EU VAT Number - "EU Countries VAT Rates" tool added.
710
  * Dev - Donate link removed.
@@ -784,7 +869,7 @@ To unlock all Booster for WooCommerce features, please install additional [Boost
784
  = 2.3.0 - 01/10/2015 =
785
  * Fix - `time` function calls replaced with `current_time` in: crowdfunding module and shortcode, invoicing, stock report.
786
  * Dev - `WCJ_Module` code refactoring.
787
- * Dev - Shortcodes - Orders - `[wcj_order_checkout_field]` shortcode modified. `[wcj_order_custom_meta_field]` depreciated (now duplicates `[wcj_order_checkout_field]`).
788
  * Dev - PAYMENT GATEWAYS category added and modules renamed.
789
  * Dev - PAYMENT GATEWAYS - Gateways Currency - Initial module release.
790
  * Dev - PAYMENT GATEWAYS - Gateways Fees and Discounts - "Fee (or discount) type" option unlocked.
@@ -901,7 +986,7 @@ To unlock all Booster for WooCommerce features, please install additional [Boost
901
  * Dev - Tools (SKU and Admin) moved to each module's settings.
902
 
903
  = 2.2.2 - 24/07/2015 =
904
- * Fix - DASHBOARD - White screen on dashboard issue, fixed. `wcj_features_status` filter depreciated.
905
  * Fix - PRICES & CURRENCIES - Price by Country - Variable onsale old price bug fixed.
906
  * Dev - PRICES & CURRENCIES - Wholesale Price Table Shortcode (`[wcj_product_wholesale_price_table]`) - Discount percent row added to the table.
907
  * Dev - PRICES & CURRENCIES - Wholesale Price - "Show discount info on cart page" and "Discount info on cart page format" options added.
@@ -912,7 +997,7 @@ To unlock all Booster for WooCommerce features, please install additional [Boost
912
  * Dev - CART & CHECKOUT - Payment Gateways - Code refactoring, new modules created:
913
  Custom Payment Gateways, Payment Gateways Icons, Payment Gateways Fees, Payment Gateways per Category.
914
  Attaching PDF Invoice V1 to emails - code moved to PDF Invoice V1 module.
915
- All settings (except depreciated "attaching PDF Invoice V1") moved from WooCommerce Checkout settings to module's settings.
916
  * Fix - SHIPPING & ORDERS - Orders - Step in min order amount changed.
917
  * Fix - PDF Invoicing - Numbering - `[wcj_invoice_date]` in invoice number bug fixed.
918
  * Fix - PDF Invoicing - In TCPDF lib, `symlink` call changed to calling with variable function name to prevent autodeleting tcpdf_fonts.php file from some servers bug.
@@ -996,7 +1081,7 @@ To unlock all Booster for WooCommerce features, please install additional [Boost
996
  * Dev - PDF Invoicing - Option for `item_variation` column added to `[wcj_order_items_table]` shortcode. Suggested by Brad.
997
  * Dev - PDF Invoicing - Shop manager (not only admin) now is also allowed to see the invoices (`is_shop_manager` function). Also added to PDF Invoices (V1).
998
  * Dev - PDF Invoicing - Extra check on `fopen`. Also added to PDF Invoices (V1).
999
- * Dev - EMAILS & MISC. - PDF Invoices (V1) moved to "EMAILS & MISC." submenu and marked as "depreciated".
1000
  * Dev - EMAILS & MISC. - PDF Invoices (V1) - `get_item_total` replaced with `get_item_subtotal`.
1001
  * Dev - EMAILS & MISC. - Reports - Customers by Country - Total spent by country added.
1002
  * Dev - EMAILS & MISC. - WPML - New module added. Support for some options added to wpml-config.xml file.
@@ -1118,7 +1203,7 @@ To unlock all Booster for WooCommerce features, please install additional [Boost
1118
  Fields can be added globally (i.e. for all products), or on per product basis.
1119
  Currently only fields of `text` type are available.
1120
  * Dev - PRODUCTS - **Product Info** - Wordpress shortcodes added for every WooJetpack shortcode.
1121
- WooJetpack shortcodes are now depreciated and will be removed in future releases. See v.1.9.0 changelog for more details.
1122
  This covers Wordpress.org Support Forum thread by dudemcpek - https://wordpress.org/support/topic/not-displaying-shortcodes.
1123
  * Dev - CART - **Add to Cart per Category** - Add to cart button text on *per category* basis (single or category view). Idea by Craig.
1124
  * Dev - CART - **Add to Cart per Product** - Custom add to cart button text on *per product* basis (single or category view). Idea by Craig.
@@ -1167,7 +1252,7 @@ To unlock all Booster for WooCommerce features, please install additional [Boost
1167
  Products with *empty price* only for archives (single view does not contain add to cart button at all, so nothing to cover).
1168
  * Feature Upgraded - **Product Info** - Added `[wcjp_list_attribute]` shortcode.
1169
  Now it is possible to display product's attribute values list (e.g. to list the different colour variations of a product). Idea by Tony.
1170
- This is the right way to display product info, so WooJetpack shortcodes (introduced in v.1.8.2) are depreciated and will be removed in feature releases.
1171
  Shortcode has `visibility` parameter which gives the possibility to show shortcode's product info to admin only.
1172
  * Feature Upgraded - **Product Info** - `%stock_quantity%` WooJetpack Shortcode added.
1173
  * Dev - **Product Info** - `the_content` filter added to result. Now shortcodes will be displayed properly.
3
  Tags: woocommerce,booster for woocommerce,woocommerce jetpack
4
  Requires at least: 4.4
5
  Tested up to: 4.6
6
+ Stable tag: 2.5.7
7
  License: GNU General Public License v3.0
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
22
  * *Currency Exchange Rates* - Automatic currency exchange rates for WooCommerce.
23
  * *Currency for External Products* - Set different currency for external WooCommerce products.
24
  * *Currency per Product* - Display prices for WooCommerce products in different currencies.
25
+ * *Global Discount* - Add global discount to all WooCommerce products.
26
  * *Multicurrency (Currency Switcher)* - Add multiple currencies (currency switcher) to WooCommerce.
27
  * *Multicurrency Product Base Price* - Enter prices for WooCommerce products in different currencies.
28
  * *Price Formats* - Set different WooCommerce price formats for different currencies.
65
  * *Checkout Custom Fields* - Add custom fields to WooCommerce checkout page.
66
  * *Checkout Custom Info* - Add custom info to WooCommerce checkout page.
67
  * *Checkout Files Upload* - Let customers upload files on (or after) WooCommerce checkout.
68
+ * *Empty Cart Button* - Add and customize "Empty Cart" button to WooCommerce cart page.
69
  * *Mini Cart* - Customize WooCommerce mini cart widget.
70
 
71
  **Payment Gateways**
83
 
84
  * *Address Formats* - Set address format in WooCommerce orders on per country basis. Force base country display.
85
  * *Order Custom Statuses* - Custom statuses for WooCommerce orders.
86
+ * *Order Minimum Amount* - Minimum WooCommerce order amount (optionally by user role).
87
  * *Order Numbers* - WooCommerce sequential order numbering, custom order number prefix, suffix and number width.
88
+ * *Orders* - Orders auto-complete. Custom admin order list columns. Admin order currency. Admin order list multiple status filtering.
89
  * *Shipping* - Add multiple custom shipping methods to WooCommerce. Add descriptions and icons to shipping methods on frontend. Hide WooCommerce shipping when free is available. Display "left to free shipping" info.
90
  * *Shipping Calculator* - Customize WooCommerce shipping calculator on cart page.
91
 
98
  * *Admin Tools* - Booster for WooCommerce debug and log tools.
99
  * *Booster WPML* - Booster for WooCommerce basic WPML support.
100
  * *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.
 
101
  * *Emails* - Add custom emails. Add another email recipient(s) to all WooCommerce emails.
102
+ * *Export* - WooCommerce export tools.
103
  * *General* - Separate custom CSS for front and back end. Shortcodes in Wordpress text widgets. Custom roles tool.
104
  * *Old Slugs* - Remove old WooCommerce products slugs.
105
+ * *Products XML* - WooCommerce products XML feed.
106
  * *Reports* - WooCommerce stock, sales, customers etc. reports.
107
 
108
  = Feedback =
111
  * For support visit the [contact page](http://booster.io/contact-us/).
112
 
113
  = More =
114
+ * Visit the [Booster for WooCommerce plugin page](http://booster.io/).
115
+ * [Compare free and Plus version](http://booster.io/booster-woocommerce-free-vs-plus/).
116
 
117
  == Installation ==
118
 
119
+ 1. Upload the entire `woocommerce-jetpack` folder to the `/wp-content/plugins/` directory.
120
+ 2. Activate the plugin through the 'Plugins' menu in WordPress.
121
+ 3. Go to WooCommerce > Settings > Booster.
122
 
123
  == Frequently Asked Questions ==
124
 
126
 
127
  To unlock all Booster for WooCommerce features, please install additional [Booster for WooCommerce Plus](http://booster.io/plus/) plugin.
128
 
129
+ = What features are in free and what are in Plus version? =
130
+
131
+ You can see the differences between version in this [table](http://booster.io/booster-woocommerce-free-vs-plus/).
132
+
133
  == Screenshots ==
134
 
135
  1. Plugin admin area.
136
 
137
  == Changelog ==
138
 
139
+ = 2.5.7 - 27/11/2016 =
140
+ * Fix - `load_plugin_textdomain` moved from `init` hook to constructor (fixes the issue with module titles, descriptions not translating).
141
+ * Fix - `class-wcj-currency-reports.php` - `filter_reports` is now applied on `wc-reports` page only.
142
+ * Dev - `unclean_custom_textarea()` added.
143
+ * Dev - Made "Booster Tools" accessible to shop manager.
144
+ * Dev - Shortcodes - `find` and `replace` attributes added to all shortcodes.
145
+ * Dev - Shortcodes - General - `[wcj_wholesale_price_table]` - `%level_max_qty%` replace value added to `heading_format` attribute. `%level_qty%` marked as deprecated (`%level_min_qty%` should be used instead).
146
+ * Dev - Shortcodes - Orders - `[wcj_order_items_total_weight]` replaced with `[wcj_order_total_weight]`.
147
+ * Dev - Shortcodes - Orders - `[wcj_order_total_width]`, `[wcj_order_total_height]` and `[wcj_order_total_length]` shortcodes added.
148
+ * Dev - Shortcodes - Orders - `[wcj_order_items]` shortcode added.
149
+ * Dev - Shortcodes - Orders - `[wcj_order_items_table]` - `item_image_width` and `item_image_height` replaced with `product_image_width` and `product_image_height`.
150
+ * Dev - Shortcodes - Orders - `[wcj_order_items_table]` - `columns` - Added to all appropriate `item_` columns: `product_name`, `product_attribute`, `product_excerpt`, `product_short_description`, `product_variation`, `product_thumbnail`, `product_sku`, `product_weight`.
151
+ * Dev - Shortcodes - Orders - `[wcj_order_items_table]` - `columns` - `product_length`, `product_width` and `product_height` columns added.
152
+ * Dev - Shortcodes - Orders - `[wcj_order_items_table]` - `item_short_description` - now displays item's short description (may be different from `item_excerpt`). `item_description` attribute removed.
153
+ * Dev - Shortcodes - Orders - `[wcj_order_items_table]` - `columns` - `product_regular_price` and `product_sale_price` columns added.
154
+ * Dev - Shortcodes - Orders - `[wcj_order_items_table]` - `columns` - `item_tax_class` column added.
155
+ * Dev - Shortcodes - Products - `[wcj_product_price_excluding_tax]` and `[wcj_product_price_including_tax]` - `multiply_by` attribute added. And both functions code refactored.
156
+ * Fix - Shortcodes - Products - `[wcj_product_excerpt]` - Manually checking for short description first (so `length` can be applied).
157
+ * Dev - Shortcodes - Products - `[wcj_product_excerpt]` - `excerpt_length` attribute deprecated (replaced with `length`).
158
+ * Dev - Shortcodes - Products - `[wcj_product_short_description]` shortcode added.
159
+ * Dev - Shortcodes - Products - `[wcj_product_url]` shortcode added.
160
+ * Dev - Shortcodes - Products - `[wcj_product_image_url]` shortcode added.
161
+ * Dev - Shortcodes - Products - `[wcj_product_categories_names]` shortcode added.
162
+ * Dev - Shortcodes - Products - `[wcj_product_categories_urls]` shortcode added.
163
+ * Dev - Shortcodes - Products - `[wcj_product_meta]` shortcode added.
164
+ * Dev - Shortcodes - Products - `[wcj_product_wholesale_price_table]` - `%level_max_qty%` replace value added to `heading_format` attribute. `%level_qty%` marked as deprecated (`%level_min_qty%` should be used instead).
165
+ * Dev - PRICES & CURRENCIES - Global Discount - Initial module release.
166
+ * Dev - PRICES & CURRENCIES - Multicurrency (Currency Switcher) - Compatibility - "WooCommerce TM Extra Product Options" plugin.
167
+ * Dev - PRICES & CURRENCIES - Price by User Role - "Search Engine Bots" option added.
168
+ * Dev - PRICES & CURRENCIES - Wholesale Price - Global settings discount now can be negative.
169
+ * Dev - PRICES & CURRENCIES - Wholesale Price - Per product - "Price directly" option added (for non variable products only).
170
+ * Dev - BUTTON & PRICE LABELS - Call for Price - "Make All Products Call for Price" option added.
171
+ * Fix - PRODUCTS - User Products - "My Account > Products" fixed.
172
+ * Fix - PAYMENT GATEWAYS - Custom Gateways - Enable for shipping methods - Empty method title bug fixed.
173
+ * Fix - SHIPPING & ORDERS - Order Custom Statuses - Custom Statuses tool - Empty array passed on apply `wc_order_statuses` filter (produced PHP warning).
174
+ * Dev - SHIPPING & ORDERS - Order Minimum Amount - Initial module release (moved from Orders module).
175
+ * Dev - SHIPPING & ORDERS - Orders - "Admin Orders List Columns Order" section added. Priorities in all Booster's added `manage_edit-shop_order_columns` filters changed.
176
+ * Dev - SHIPPING & ORDERS - Orders - "Admin Orders List Multiple Status" section added.
177
+ * Dev - SHIPPING & ORDERS - Shipping - Custom Shipping with Zones - "Min Weight" and "Max Weight" options added.
178
+ * Dev - SHIPPING & ORDERS - Shipping Calculator - "Labels" settings section added.
179
+ * Dev - PDF INVOICING & PACKING SLIPS - "Generate" and "Download" bulk actions added to admin orders list.
180
+ * Dev - PDF INVOICING & PACKING SLIPS - Invoices Report tool - `get_invoices_report_data()` - `WP_Query` optimized to return `ids` only.
181
+ * Dev - PDF INVOICING & PACKING SLIPS - Invoices Report tool - "Download monthly documents CSV" added.
182
+ * Dev - EMAILS & MISC. - Admin Tools - "System Info" table added.
183
+ * Dev - EMAILS & MISC. - Admin Tools - "PHP Memory Limit" option added.
184
+ * Fix - EMAILS & MISC. - EU VAT Number - Preserve VAT in Base Country - `EL` replaced with `GR` for Greece when checking location.
185
+ * Dev - EMAILS & MISC. - EU VAT Number - Validate VAT without SOAP fallback added (`validate_vat_no_soap` function).
186
+ * Dev - EMAILS & MISC. - Export - "UTF-8 BOM" option added.
187
+ * Fix - EMAILS & MISC. - Export - Export Orders - "Order Date" column fixed.
188
+ * Dev - EMAILS & MISC. - Export - Export Orders - "Order Time" column added.
189
+ * Dev - EMAILS & MISC. - Export - Export Products - Stock - `get_stock_quantity()` replaced with `get_total_stock()`. Separate "Stock Quantity" export field added.
190
+ * Dev - EMAILS & MISC. - Export - Export Products - Variable and grouped products price, regular price, sale price, stock quantity and total stock for each variation added.
191
+ * Dev - EMAILS & MISC. - Export - Export Products - "Additional Export Products Fields" section added.
192
+ * Dev - EMAILS & MISC. - Export - Export Products - "Export Products Fields" option added.
193
+ * Dev - EMAILS & MISC. - Export - Export Products - "Image URL", "Short Description", "Description", "Status", "URL", "Shipping Class", "Shipping Class Id", "Width", "Length", "Height", "Weight", "Downloadable", "Virtual", "Sold Individually", "Tax Status", "Tax Class", "Manage Stock", "Stock Status", "Backorders", "Featured" and "Visibility" export fields added.
194
+ * Dev - EMAILS & MISC. - Export - Export Products - `WP_Query` optimized to return `ids` only.
195
+ * Dev - EMAILS & MISC. - General - "Session Expiration Options" section added.
196
+ * Dev - EMAILS & MISC. - Products XML - Initial module release.
197
+ * Dev - EMAILS & MISC. - Reports - Booster: Product Sales - Variations added in report.
198
+ * Tweak - Deprecated typo fixed.
199
+ * Tweak - `WCJ_Module` - `create_meta_box()` - `wcj_get_meta_box_options_type_price_step` filter added.
200
+ * Tweak - `wcj_get_table_html()` - "row_styles" parameter added.
201
+ * Tweak - Language (POT) file updated.
202
+ * Tweak - Shortcodes - Products - `[wcj_product_excerpt]` - Using `product_excerpt_length` object property instead of global variable.
203
+ * Tweak - Shortcodes - Products - `[wcj_product_wholesale_price_table]` - `wcj_product_wholesale_price_table_price_before` and `wcj_product_wholesale_price_table_price_after` filters added.
204
+ * Tweak - PRICES & CURRENCIES - Price by User Role - `change_price_by_role()` - `wcj_price_by_user_role_get_price` filter added.
205
+ * Tweak - PRICES & CURRENCIES - Wholesale Price - `get_wholesale_price()` - `price_directly` - `wcj_get_wholesale_price` filter added.
206
+ * Tweak - CART & CHECKOUT - Empty Cart Button - Description updated.
207
+ * Tweak - SHIPPING & ORDERS - Order Custom Statuses - Custom Statuses tool - User messages updated.
208
+ * Tweak - SHIPPING & ORDERS - Order Custom Statuses - Custom Statuses tool - "Add new custom status" button label added to translation.
209
+ * Tweak - SHIPPING & ORDERS - Shipping - Custom Shipping - "Weight Table Total Rows" option description updated.
210
+ * Tweak - PDF INVOICING & PACKING SLIPS - Invoices Report tool - `get_invoices_report_zip()` - Headers cleaned up.
211
+ * Tweak - PDF INVOICING & PACKING SLIPS - Invoices Report tool - Calling `get_tool_header_html()` instead of directly outputting header.
212
+ * Tweak - EMAILS & MISC. - Export - Tool header added to all export tools.
213
+ * Tweak - EMAILS & MISC. - Export - Headers cleaned up.
214
+ * Tweak - EMAILS & MISC. - Reports - Button restyled in admin settings.
215
+
216
  = 2.5.6 - 29/09/2016 =
217
  * Dev - Functions - `wcj_get_product_input_fields()` - `unserialize()` added for serialized values.
218
  * Dev - Shortcodes - General - `[wcj_wholesale_price_table]` - `hide_if_zero_quantity` and `table_format` attributes added.
376
  * Dev - EMAILS & MISC. - Reports - Monthly Sales - Major code refactoring. New data added.
377
  * Tweak - Rating message added.
378
  * Tweak - Module's documentation button on new line.
379
+ * Tweak - Deprecated module message updated.
380
  * Tweak - PRODUCTS - Product Add to Cart - Module description updated.
381
  * Tweak - PRODUCTS - Product by User - Module and admin settings descriptions updated.
382
  * Tweak - PRODUCTS - Product Info - Moved to EMAILS & MISC. Renamed to "Product Info V1". "Product Info V2" renamed to "Product Info".
685
  * Fix - PRICES & CURRENCIES - Currency Exchange Rates - `no_changes` currency bug fixed.
686
  * Fix - PRICES & CURRENCIES - Multicurrency and Currency Exchange Rates - Currency pairs added to Currency Exchange Rates module.
687
  * Dev - BUTTON & PRICE LABELS - Custom Price Labels - WooCommerce Subscription products support added.
688
+ * Dev - PRODUCTS - Product Tabs - "CATEGORIES to HIDE this tab" and "CATEGORIES to SHOW this tab" options added, instead of deprecated "Comma separated CATEGORY IDs..." options.
689
+ * Dev - PRODUCTS - Product Tabs - "PRODUCTS to HIDE this tab" and "PRODUCTS to SHOW this tab" options added, instead of deprecated "Comma separated PRODUCT IDs..." options.
690
  * Dev - PRODUCTS - Product Tabs - "TAGS to HIDE this tab" and "TAGS to SHOW this tab" options added.
691
  * Dev - PRODUCTS - Product Tabs - "Reset settings" button added.
692
  * Dev - PAYMENT GATEWAYS - Gateways by Country or State - "Include States (Base Country)" and "Exclude States (Base Country)" options added.
728
  * Dev - Functions - General - `wcj_is_module_enabled()` function added.
729
  * Dev - Shortcodes - General - `[wcj_country_select_drop_down_list]` - manual sorting when `countries` attribute is used.
730
  * Fix - Shortcodes - Orders - `[wcj_order_total_tax_percent]` fixed. `precision` attribute added.
731
+ * Fix - Shortcodes - Orders - `get_cart_discount()` (deprecated since WooCommerce 2.3) removed from `[wcj_order_items_table]` shortcode (affected if `discount_as_item` option was used); removed from `[wcj_order_total_discount]` shortcode; `[wcj_order_cart_discount]` shortcode removed.
732
  * Fix - Shortcodes - Orders - `[wcj_order_total_in_words]` - decimal part rounding bug fixed.
733
  * Dev - Shortcodes - Orders - `[wcj_order_total_in_words]` - `whole` and `decimal` attributes added.
734
  * Dev - Shortcodes - Orders - `[wcj_order_items_table]` - `item_short_description` option added.
745
  * Dev - PRICES & CURRENCIES - Bulk Price Converter - Code refactoring.
746
  * Dev - PRICES & CURRENCIES - Bulk Price Converter - Option to convert prices by *product category* added.
747
  * Dev - PRODUCTS - Product Info - Code refactoring.
748
+ * Dev - PRODUCTS - Product Info V2 - Initial module release. Product Info marked as deprecated.
749
  * Dev - PRODUCTS - Product Input Fields - Code refactoring.
750
  * Dev - PRODUCTS - Product Input Fields - Required field sign option added.
751
  * Dev - PRODUCTS - Product Input Fields - "time format", "interval" options for Timepicker added.
789
  * Dev - PDF Invoicing - Display - Admin's "Orders" Page - "Column Title", "Create Button" and "Delete Button" options added.
790
  * Dev - PDF Invoicing - Display - "Misc." menu renamed to "Display & Misc.".
791
  * Dev - PDF Invoicing - Display - Customer's "My Account" Page - "Add link" and "Link text" options unlocked.
792
+ * Dev - PDF Invoices (v1) marked as "Deprecated".
793
  * Fix - EMAILS & MISC. - General - Tabs on "Booster Tools" page fixed (caused other module's tools tabs disappear). Info on "Booster Tools Dashboard" page fixed.
794
  * Dev - EMAILS & MISC. - EU VAT Number - "EU Countries VAT Rates" tool added.
795
  * Dev - Donate link removed.
869
  = 2.3.0 - 01/10/2015 =
870
  * Fix - `time` function calls replaced with `current_time` in: crowdfunding module and shortcode, invoicing, stock report.
871
  * Dev - `WCJ_Module` code refactoring.
872
+ * Dev - Shortcodes - Orders - `[wcj_order_checkout_field]` shortcode modified. `[wcj_order_custom_meta_field]` deprecated (now duplicates `[wcj_order_checkout_field]`).
873
  * Dev - PAYMENT GATEWAYS category added and modules renamed.
874
  * Dev - PAYMENT GATEWAYS - Gateways Currency - Initial module release.
875
  * Dev - PAYMENT GATEWAYS - Gateways Fees and Discounts - "Fee (or discount) type" option unlocked.
986
  * Dev - Tools (SKU and Admin) moved to each module's settings.
987
 
988
  = 2.2.2 - 24/07/2015 =
989
+ * Fix - DASHBOARD - White screen on dashboard issue, fixed. `wcj_features_status` filter deprecated.
990
  * Fix - PRICES & CURRENCIES - Price by Country - Variable onsale old price bug fixed.
991
  * Dev - PRICES & CURRENCIES - Wholesale Price Table Shortcode (`[wcj_product_wholesale_price_table]`) - Discount percent row added to the table.
992
  * Dev - PRICES & CURRENCIES - Wholesale Price - "Show discount info on cart page" and "Discount info on cart page format" options added.
997
  * Dev - CART & CHECKOUT - Payment Gateways - Code refactoring, new modules created:
998
  Custom Payment Gateways, Payment Gateways Icons, Payment Gateways Fees, Payment Gateways per Category.
999
  Attaching PDF Invoice V1 to emails - code moved to PDF Invoice V1 module.
1000
+ All settings (except deprecated "attaching PDF Invoice V1") moved from WooCommerce Checkout settings to module's settings.
1001
  * Fix - SHIPPING & ORDERS - Orders - Step in min order amount changed.
1002
  * Fix - PDF Invoicing - Numbering - `[wcj_invoice_date]` in invoice number bug fixed.
1003
  * Fix - PDF Invoicing - In TCPDF lib, `symlink` call changed to calling with variable function name to prevent autodeleting tcpdf_fonts.php file from some servers bug.
1081
  * Dev - PDF Invoicing - Option for `item_variation` column added to `[wcj_order_items_table]` shortcode. Suggested by Brad.
1082
  * Dev - PDF Invoicing - Shop manager (not only admin) now is also allowed to see the invoices (`is_shop_manager` function). Also added to PDF Invoices (V1).
1083
  * Dev - PDF Invoicing - Extra check on `fopen`. Also added to PDF Invoices (V1).
1084
+ * Dev - EMAILS & MISC. - PDF Invoices (V1) moved to "EMAILS & MISC." submenu and marked as "deprecated".
1085
  * Dev - EMAILS & MISC. - PDF Invoices (V1) - `get_item_total` replaced with `get_item_subtotal`.
1086
  * Dev - EMAILS & MISC. - Reports - Customers by Country - Total spent by country added.
1087
  * Dev - EMAILS & MISC. - WPML - New module added. Support for some options added to wpml-config.xml file.
1203
  Fields can be added globally (i.e. for all products), or on per product basis.
1204
  Currently only fields of `text` type are available.
1205
  * Dev - PRODUCTS - **Product Info** - Wordpress shortcodes added for every WooJetpack shortcode.
1206
+ WooJetpack shortcodes are now deprecated and will be removed in future releases. See v.1.9.0 changelog for more details.
1207
  This covers Wordpress.org Support Forum thread by dudemcpek - https://wordpress.org/support/topic/not-displaying-shortcodes.
1208
  * Dev - CART - **Add to Cart per Category** - Add to cart button text on *per category* basis (single or category view). Idea by Craig.
1209
  * Dev - CART - **Add to Cart per Product** - Custom add to cart button text on *per product* basis (single or category view). Idea by Craig.
1252
  Products with *empty price* only for archives (single view does not contain add to cart button at all, so nothing to cover).
1253
  * Feature Upgraded - **Product Info** - Added `[wcjp_list_attribute]` shortcode.
1254
  Now it is possible to display product's attribute values list (e.g. to list the different colour variations of a product). Idea by Tony.
1255
+ This is the right way to display product info, so WooJetpack shortcodes (introduced in v.1.8.2) are deprecated and will be removed in feature releases.
1256
  Shortcode has `visibility` parameter which gives the possibility to show shortcode's product info to admin only.
1257
  * Feature Upgraded - **Product Info** - `%stock_quantity%` WooJetpack Shortcode added.
1258
  * Dev - **Product Info** - `the_content` filter added to result. Now shortcodes will be displayed properly.
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.5.6
7
  Author: Algoritmika Ltd
8
  Author URI: http://www.algoritmika.com
9
  Text Domain: woocommerce-jetpack
@@ -28,7 +28,7 @@ if ( ! class_exists( 'WC_Jetpack' ) ) :
28
  * Main WC_Jetpack Class
29
  *
30
  * @class WC_Jetpack
31
- * @version 2.5.5
32
  */
33
 
34
  final class WC_Jetpack {
@@ -39,7 +39,7 @@ final class WC_Jetpack {
39
  * @var string
40
  * @since 2.4.7
41
  */
42
- public $version = '2.5.6';
43
 
44
  /**
45
  * @var WC_Jetpack The single instance of the class
@@ -78,17 +78,25 @@ final class WC_Jetpack {
78
  /**
79
  * WC_Jetpack Constructor.
80
  *
81
- * @version 2.5.3
82
- * @access public
83
  */
84
  public function __construct() {
85
 
 
 
 
86
  // require_once( WP_PLUGIN_DIR . '/woocommerce/woocommerce.php' );
87
 
88
  // Include required files
89
  $this->includes();
90
 
91
- //register_activation_hook( __FILE__, array( $this, 'install' ) );
 
 
 
 
 
92
  // add_action( 'admin_init', array( $this, 'install' ) );
93
  add_action( 'init', array( $this, 'init' ), 0 );
94
 
@@ -132,6 +140,41 @@ final class WC_Jetpack {
132
  do_action( 'wcj_loaded' );
133
  }
134
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
  /**
136
  * enqueue_wcj_backend_scripts.
137
  *
@@ -481,7 +524,7 @@ final class WC_Jetpack {
481
  /**
482
  * Include modules and submodules
483
  *
484
- * @version 2.5.5
485
  */
486
  function include_modules() {
487
  $modules_files = array(
@@ -504,6 +547,7 @@ final class WC_Jetpack {
504
  'includes/class-wcj-wholesale-price.php',
505
  'includes/class-wcj-product-open-pricing.php',
506
  'includes/class-wcj-price-by-user-role.php',
 
507
  'includes/class-wcj-product-price-by-formula.php',
508
  'includes/class-wcj-product-images.php',
509
  'includes/class-wcj-product-by-country.php',
@@ -530,6 +574,7 @@ final class WC_Jetpack {
530
  'includes/class-wcj-shipping-calculator.php',
531
  'includes/class-wcj-address-formats.php',
532
  'includes/class-wcj-orders.php',
 
533
  'includes/class-wcj-order-numbers.php',
534
  'includes/class-wcj-order-custom-statuses.php',
535
  // 'includes/class-wcj-pdf-invoices.php',
@@ -544,6 +589,7 @@ final class WC_Jetpack {
544
  'includes/class-wcj-currency-exchange-rates.php',
545
  'includes/class-wcj-price-formats.php',
546
  'includes/class-wcj-general.php',
 
547
  'includes/class-wcj-export-import.php',
548
  // 'includes/class-wcj-shortcodes-module.php',
549
  'includes/class-wcj-eu-vat-number.php',
@@ -738,12 +784,13 @@ final class WC_Jetpack {
738
 
739
  /**
740
  * Init WC_Jetpack when WordPress initialises.
 
 
741
  */
742
  public function init() {
743
  // Before init action
744
  do_action( 'before_wcj_init' );
745
- // Set up localisation
746
- load_plugin_textdomain( 'woocommerce-jetpack', false, dirname( plugin_basename( __FILE__ ) ) . '/langs/' );
747
  // Init action
748
  do_action( 'wcj_init' );
749
  }
@@ -772,10 +819,25 @@ endif;
772
  /**
773
  * Returns the main instance of WC_Jetpack to prevent the need to use globals.
774
  *
775
- * @return WC_Jetpack
 
776
  */
777
- function WCJ() {
778
- return WC_Jetpack::instance();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
779
  }
780
 
781
  WCJ();
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.5.7
7
  Author: Algoritmika Ltd
8
  Author URI: http://www.algoritmika.com
9
  Text Domain: woocommerce-jetpack
28
  * Main WC_Jetpack Class
29
  *
30
  * @class WC_Jetpack
31
+ * @version 2.5.7
32
  */
33
 
34
  final class WC_Jetpack {
39
  * @var string
40
  * @since 2.4.7
41
  */
42
+ public $version = '2.5.7';
43
 
44
  /**
45
  * @var WC_Jetpack The single instance of the class
78
  /**
79
  * WC_Jetpack Constructor.
80
  *
81
+ * @version 2.5.7
82
+ * @access public
83
  */
84
  public function __construct() {
85
 
86
+ // Set up localisation
87
+ load_plugin_textdomain( 'woocommerce-jetpack', false, dirname( plugin_basename( __FILE__ ) ) . '/langs/' );
88
+
89
  // require_once( WP_PLUGIN_DIR . '/woocommerce/woocommerce.php' );
90
 
91
  // Include required files
92
  $this->includes();
93
 
94
+ register_activation_hook( __FILE__, array( $this, 'add_my_products_endpoint_flush_rewrite_rules' ) );
95
+ register_deactivation_hook( __FILE__, array( $this, 'add_my_products_endpoint_flush_rewrite_rules' ) );
96
+ add_filter( 'query_vars', array( $this, 'add_my_products_endpoint_query_var' ), 0 );
97
+ add_action( 'init', array( $this, 'add_my_products_endpoint' ) );
98
+
99
+ // register_activation_hook( __FILE__, array( $this, 'install' ) );
100
  // add_action( 'admin_init', array( $this, 'install' ) );
101
  add_action( 'init', array( $this, 'init' ), 0 );
102
 
140
  do_action( 'wcj_loaded' );
141
  }
142
 
143
+ /**
144
+ * Flush rewrite rules on plugin activation.
145
+ *
146
+ * @version 2.5.7
147
+ * @since 2.5.7
148
+ */
149
+ function add_my_products_endpoint_flush_rewrite_rules() {
150
+ add_rewrite_endpoint( 'wcj-my-products', EP_ROOT | EP_PAGES );
151
+ flush_rewrite_rules();
152
+ }
153
+
154
+ /**
155
+ * Add new query var.
156
+ *
157
+ * @version 2.5.7
158
+ * @since 2.5.7
159
+ * @param array $vars
160
+ * @return array
161
+ */
162
+ function add_my_products_endpoint_query_var( $vars ) {
163
+ $vars[] = 'wcj-my-products';
164
+ return $vars;
165
+ }
166
+
167
+ /**
168
+ * Register new endpoint to use inside My Account page.
169
+ *
170
+ * @version 2.5.7
171
+ * @since 2.5.7
172
+ * @see https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/
173
+ */
174
+ function add_my_products_endpoint() {
175
+ add_rewrite_endpoint( 'wcj-my-products', EP_ROOT | EP_PAGES );
176
+ }
177
+
178
  /**
179
  * enqueue_wcj_backend_scripts.
180
  *
524
  /**
525
  * Include modules and submodules
526
  *
527
+ * @version 2.5.7
528
  */
529
  function include_modules() {
530
  $modules_files = array(
547
  'includes/class-wcj-wholesale-price.php',
548
  'includes/class-wcj-product-open-pricing.php',
549
  'includes/class-wcj-price-by-user-role.php',
550
+ 'includes/class-wcj-global-discount.php',
551
  'includes/class-wcj-product-price-by-formula.php',
552
  'includes/class-wcj-product-images.php',
553
  'includes/class-wcj-product-by-country.php',
574
  'includes/class-wcj-shipping-calculator.php',
575
  'includes/class-wcj-address-formats.php',
576
  'includes/class-wcj-orders.php',
577
+ 'includes/class-wcj-order-min-amount.php',
578
  'includes/class-wcj-order-numbers.php',
579
  'includes/class-wcj-order-custom-statuses.php',
580
  // 'includes/class-wcj-pdf-invoices.php',
589
  'includes/class-wcj-currency-exchange-rates.php',
590
  'includes/class-wcj-price-formats.php',
591
  'includes/class-wcj-general.php',
592
+ 'includes/class-wcj-products-xml.php',
593
  'includes/class-wcj-export-import.php',
594
  // 'includes/class-wcj-shortcodes-module.php',
595
  'includes/class-wcj-eu-vat-number.php',
784
 
785
  /**
786
  * Init WC_Jetpack when WordPress initialises.
787
+ *
788
+ * @version 2.5.7
789
  */
790
  public function init() {
791
  // Before init action
792
  do_action( 'before_wcj_init' );
793
+
 
794
  // Init action
795
  do_action( 'wcj_init' );
796
  }
819
  /**
820
  * Returns the main instance of WC_Jetpack to prevent the need to use globals.
821
  *
822
+ * @version 2.5.7
823
+ * @return WC_Jetpack
824
  */
825
+ if ( ! function_exists( 'WCJ' ) ) {
826
+ function WCJ() {
827
+ return WC_Jetpack::instance();
828
+ }
829
+ }
830
+
831
+ /**
832
+ * Get the plugin file.
833
+ *
834
+ * @version 2.5.7
835
+ * @since 2.5.7
836
+ */
837
+ if ( ! function_exists( 'wcj_plugin_file' ) ) {
838
+ function wcj_plugin_file() {
839
+ return __FILE__;
840
+ }
841
  }
842
 
843
  WCJ();