Booster for WooCommerce - Version 2.4.1

Version Description

  • 04/03/2016 =
  • Fix - PRICES & CURRENCIES - Wholesale Price - Discount info on cart page bug fixed.
  • Fix - PRICES & CURRENCIES - Price by Country - Wrong currency in emails bug fixed.
  • Dev - PAYMENT GATEWAYS - Gateways by Country - Initial module release.
  • Dev - PAYMENT GATEWAYS - Gateways Min/Max - Initial module release.
  • Fix - EMAILS & MISC. - Emails - "Illegal offset type in isset or empty in ..." warning fixed.
  • Dev - EMAILS & MISC. - WPML - Code refactoring.
Download this release

Release Info

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

Code changes from version 2.4.0 to 2.4.1

includes/admin/wcj-modules-cats.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Modules Array.
6
  *
7
- * @version 2.4.0
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -86,6 +86,8 @@ return array(
86
  'payment_gateways_fees',
87
  'payment_gateways_per_category',
88
  'payment_gateways_currency',
 
 
89
  ),
90
  ),
91
 
4
  *
5
  * The WooCommerce Modules Array.
6
  *
7
+ * @version 2.4.1
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
86
  'payment_gateways_fees',
87
  'payment_gateways_per_category',
88
  'payment_gateways_currency',
89
+ 'payment_gateways_min_max',
90
+ 'payment_gateways_by_country',
91
  ),
92
  ),
93
 
includes/class-wcj-payment-gateways-by-country.php ADDED
@@ -0,0 +1,131 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WooCommerce Jetpack Payment Gateways by Country
4
+ *
5
+ * The WooCommerce Jetpack Payment Gateways by Country class.
6
+ *
7
+ * @version 2.4.1
8
+ * @since 2.4.1
9
+ * @author Algoritmika Ltd.
10
+ */
11
+
12
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
13
+
14
+ if ( ! class_exists( 'WCJ_Payment_Gateways_By_Country' ) ) :
15
+
16
+ class WCJ_Payment_Gateways_By_Country extends WCJ_Module {
17
+
18
+ /**
19
+ * Constructor.
20
+ */
21
+ function __construct() {
22
+
23
+ $this->id = 'payment_gateways_by_country';
24
+ $this->short_desc = __( 'Gateways by Country', 'woocommerce-jetpack' );
25
+ $this->desc = __( 'Set countries to include/exclude for WooCommerce payment gateways to show up.', 'woocommerce-jetpack' );
26
+ parent::__construct();
27
+
28
+ add_filter( 'init', array( $this, 'add_hooks' ) );
29
+
30
+ if ( $this->is_enabled() ) {
31
+ add_filter( 'woocommerce_available_payment_gateways', array( $this, 'available_payment_gateways' ), PHP_INT_MAX, 1 );
32
+ }
33
+ }
34
+
35
+ /**
36
+ * available_payment_gateways.
37
+ */
38
+ function available_payment_gateways( $_available_gateways ) {
39
+ foreach ( $_available_gateways as $key => $gateway ) {
40
+ $customer_country = WC()->customer->get_country();
41
+ $include_countries = get_option( 'wcj_gateways_countries_include_' . $key, '' );
42
+ if ( ! empty( $include_countries ) && ! in_array( $customer_country, $include_countries ) ) {
43
+ unset( $_available_gateways[ $key ] );
44
+ continue;
45
+ }
46
+ $exclude_countries = get_option( 'wcj_gateways_countries_exclude_' . $key, '' );
47
+ if ( ! empty( $exclude_countries ) && in_array( $customer_country, $exclude_countries ) ) {
48
+ unset( $_available_gateways[ $key ] );
49
+ continue;
50
+ }
51
+ }
52
+ return $_available_gateways;
53
+ }
54
+
55
+ /**
56
+ * add_hooks.
57
+ */
58
+ function add_hooks() {
59
+ add_filter( 'wcj_payment_gateways_by_country_settings', array( $this, 'add_countries_settings' ) );
60
+ }
61
+
62
+ /**
63
+ * add_countries_settings.
64
+ */
65
+ function add_countries_settings( $settings ) {
66
+ $settings = array();
67
+ $settings[] = array(
68
+ 'title' => __( 'Payment Gateways', 'woocommerce-jetpack' ),
69
+ 'type' => 'title',
70
+ 'desc' => __( 'Leave empty to disable.', 'woocommerce-jetpack' ),
71
+ 'id' => 'wcj_payment_gateways_by_country_gateways_options',
72
+ );
73
+ $countries = wcj_get_countries();
74
+ $gateways = WC()->payment_gateways->payment_gateways();
75
+ foreach ( $gateways as $key => $gateway ) {
76
+ $default_gateways = array( 'bacs' );
77
+ if ( ! empty( $default_gateways ) && ! in_array( $key, $default_gateways ) ) {
78
+ $custom_attributes = apply_filters( 'get_wc_jetpack_plus_message', '', 'disabled' );
79
+ if ( '' == $custom_attributes ) {
80
+ $custom_attributes = array();
81
+ }
82
+ $desc_tip = apply_filters( 'get_wc_jetpack_plus_message', '', 'desc_no_link' );
83
+ } else {
84
+ $custom_attributes = array();
85
+ $desc_tip = '';
86
+ }
87
+ $settings[] = array(
88
+ 'title' => $gateway->title,
89
+ 'desc_tip' => $desc_tip,
90
+ 'desc' => __( 'Include', 'woocommerce-jetpack' ),
91
+ 'id' => 'wcj_gateways_countries_include_' . $key,
92
+ 'default' => '',
93
+ 'type' => 'multiselect',
94
+ 'class' => 'chosen_select',
95
+ 'css' => 'width: 450px;',
96
+ 'options' => $countries,
97
+ 'custom_attributes' => $custom_attributes,
98
+ );
99
+ $settings[] = array(
100
+ 'title' => '',
101
+ 'desc_tip' => $desc_tip,
102
+ 'desc' => __( 'Exclude', 'woocommerce-jetpack' ),
103
+ 'id' => 'wcj_gateways_countries_exclude_' . $key,
104
+ 'default' => '',
105
+ 'type' => 'multiselect',
106
+ 'class' => 'chosen_select',
107
+ 'css' => 'width: 450px;',
108
+ 'options' => $countries,
109
+ 'custom_attributes' => $custom_attributes,
110
+ );
111
+ }
112
+ $settings[] = array(
113
+ 'type' => 'sectionend',
114
+ 'id' => 'wcj_payment_gateways_by_country_gateways_options',
115
+ );
116
+ return $settings;
117
+ }
118
+
119
+ /**
120
+ * get_settings.
121
+ */
122
+ function get_settings() {
123
+ $settings = array();
124
+ $settings = apply_filters( 'wcj_payment_gateways_by_country_settings', $settings );
125
+ return $this->add_standard_settings( $settings );
126
+ }
127
+ }
128
+
129
+ endif;
130
+
131
+ return new WCJ_Payment_Gateways_By_Country();
includes/class-wcj-payment-gateways-min-max.php ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WooCommerce Jetpack Payment Gateways Min Max
4
+ *
5
+ * The WooCommerce Jetpack Payment Gateways Min Max class.
6
+ *
7
+ * @version 2.4.1
8
+ * @since 2.4.1
9
+ * @author Algoritmika Ltd.
10
+ */
11
+
12
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
13
+
14
+ if ( ! class_exists( 'WCJ_Payment_Gateways_Min_Max' ) ) :
15
+
16
+ class WCJ_Payment_Gateways_Min_Max extends WCJ_Module {
17
+
18
+ /**
19
+ * Constructor.
20
+ */
21
+ function __construct() {
22
+
23
+ $this->id = 'payment_gateways_min_max';
24
+ $this->short_desc = __( 'Gateways Min/Max', 'woocommerce-jetpack' );
25
+ $this->desc = __( 'Add min/max amounts for WooCommerce payment gateways to show up.', 'woocommerce-jetpack' );
26
+ parent::__construct();
27
+
28
+ add_filter( 'init', array( $this, 'add_hooks' ) );
29
+
30
+ if ( $this->is_enabled() ) {
31
+ add_filter( 'woocommerce_available_payment_gateways', array( $this, 'available_payment_gateways' ), PHP_INT_MAX, 1 );
32
+ }
33
+ }
34
+
35
+ /**
36
+ * available_payment_gateways.
37
+ */
38
+ function available_payment_gateways( $_available_gateways ) {
39
+ foreach ( $_available_gateways as $key => $gateway ) {
40
+ $min = get_option( 'wcj_payment_gateways_min_' . $key, 0 );
41
+ $max = get_option( 'wcj_payment_gateways_max_' . $key, 0 );
42
+ global $woocommerce;
43
+ $total_in_cart = ( 'no' === get_option( 'wcj_payment_gateways_min_max_exclude_shipping', 'no' ) ) ?
44
+ $woocommerce->cart->cart_contents_total + $woocommerce->cart->shipping_total : $woocommerce->cart->cart_contents_total;
45
+ if ( $min != 0 && $total_in_cart < $min ) {
46
+ unset( $_available_gateways[ $key ] );
47
+ continue;
48
+ }
49
+ if ( $max != 0 && $total_in_cart > $max ) {
50
+ unset( $_available_gateways[ $key ] );
51
+ continue;
52
+ }
53
+ }
54
+ return $_available_gateways;
55
+ }
56
+
57
+ /**
58
+ * add_hooks.
59
+ */
60
+ function add_hooks() {
61
+ add_filter( 'wcj_payment_gateways_min_max_settings', array( $this, 'add_min_max_settings' ) );
62
+ }
63
+
64
+ /**
65
+ * add_min_max_settings.
66
+ */
67
+ function add_min_max_settings( $settings ) {
68
+ $settings = array(
69
+ array(
70
+ 'title' => __( 'General Options', 'woocommerce-jetpack' ),
71
+ 'type' => 'title',
72
+ 'id' => 'wcj_payment_gateways_min_max_general_options',
73
+ ),
74
+ array(
75
+ 'title' => __( 'Exclude Shipping', 'alg-woocommerce-fees' ),
76
+ 'desc' => __( 'Exclude shipping from total cart sum, when comparing with min/max amounts.', 'alg-woocommerce-fees' ),
77
+ 'id' => 'wcj_payment_gateways_min_max_exclude_shipping',
78
+ 'default' => 'no',
79
+ 'type' => 'checkbox',
80
+ ),
81
+ array(
82
+ 'type' => 'sectionend',
83
+ 'id' => 'wcj_payment_gateways_min_max_general_options',
84
+ ),
85
+ );
86
+ $settings[] = array(
87
+ 'title' => __( 'Payment Gateways', 'woocommerce-jetpack' ),
88
+ 'type' => 'title',
89
+ 'desc' => __( 'Leave zero to disable.', 'woocommerce-jetpack' ),
90
+ 'id' => 'wcj_payment_gateways_min_max_gateways_options',
91
+ );
92
+ $gateways = WC()->payment_gateways->payment_gateways();
93
+ foreach ( $gateways as $key => $gateway ) {
94
+ $default_gateways = array( 'bacs' );
95
+ if ( ! empty( $default_gateways ) && ! in_array( $key, $default_gateways ) ) {
96
+ $custom_attributes = apply_filters( 'get_wc_jetpack_plus_message', '', 'disabled' );
97
+ if ( '' == $custom_attributes ) {
98
+ $custom_attributes = array();
99
+ }
100
+ $desc_tip = apply_filters( 'get_wc_jetpack_plus_message', '', 'desc_no_link' );
101
+ } else {
102
+ $custom_attributes = array();
103
+ $desc_tip = '';
104
+ }
105
+ $settings[] = array(
106
+ 'title' => $gateway->title,
107
+ 'desc_tip' => $desc_tip,
108
+ 'desc' => __( 'Min', 'woocommerce-jetpack' ),
109
+ 'id' => 'wcj_payment_gateways_min_' . $key,
110
+ 'default' => 0,
111
+ 'type' => 'number',
112
+ 'custom_attributes' => array_merge( array( 'step' => '0.000001', 'min' => '0', ), $custom_attributes ),
113
+ );
114
+ $settings[] = array(
115
+ 'title' => '',
116
+ 'desc_tip' => $desc_tip,
117
+ 'desc' => __( 'Max', 'woocommerce-jetpack' ),
118
+ 'id' => 'wcj_payment_gateways_max_' . $key,
119
+ 'default' => 0,
120
+ 'type' => 'number',
121
+ 'custom_attributes' => array_merge( array( 'step' => '0.000001', 'min' => '0', ), $custom_attributes ),
122
+ );
123
+ }
124
+ $settings[] = array(
125
+ 'type' => 'sectionend',
126
+ 'id' => 'wcj_payment_gateways_min_max_gateways_options',
127
+ );
128
+ return $settings;
129
+ }
130
+
131
+ /**
132
+ * get_settings.
133
+ */
134
+ function get_settings() {
135
+ $settings = array();
136
+ $settings = apply_filters( 'wcj_payment_gateways_min_max_settings', $settings );
137
+ return $this->add_standard_settings( $settings );
138
+ }
139
+ }
140
+
141
+ endif;
142
+
143
+ return new WCJ_Payment_Gateways_Min_Max();
includes/class-wcj-wholesale-price.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack Wholesale Price class.
6
  *
7
- * @version 2.2.7
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -61,18 +61,18 @@ class WCJ_Wholesale_Price extends WCJ_Module {
61
  /**
62
  * add_discount_info_to_cart_page.
63
  *
64
- * @version 2.2.6
65
  */
66
  function add_discount_info_to_cart_page( $price_html, $cart_item, $cart_item_key ) {
67
 
68
  $_product = wc_get_product( $cart_item['product_id'] );
69
 
70
  remove_filter( 'woocommerce_get_price', array( $this, 'wholesale_price' ), PHP_INT_MAX, 2 );
71
- //$old_price_html = $_product->get_price_html();
72
  $old_price_html = wc_price( $_product->get_price() );
73
  add_filter( 'woocommerce_get_price', array( $this, 'wholesale_price' ), PHP_INT_MAX, 2 );
74
 
75
- if ( $old_price_html != $price_html ) {
76
 
77
  $the_quantity = $this->get_wholesale_quantity( $_product );
78
 
@@ -80,13 +80,16 @@ class WCJ_Wholesale_Price extends WCJ_Module {
80
 
81
  if ( 'fixed' === get_option( 'wcj_wholesale_price_discount_type' ) ) $discount = wc_price( $discount );
82
 
83
- $wholesale_price_html = get_option( 'wcj_wholesale_price_show_info_on_cart_format' );
84
- $wholesale_price_html = str_replace( '%old_price%', $old_price_html, $wholesale_price_html );
85
- $wholesale_price_html = str_replace( '%price%', $price_html, $wholesale_price_html );
86
- $wholesale_price_html = str_replace( '%discount_percent%', $discount, $wholesale_price_html ); //depreciated
87
- $wholesale_price_html = str_replace( '%discount_value%', $discount, $wholesale_price_html );
 
 
88
 
89
- return $wholesale_price_html;
 
90
  }
91
 
92
  return $price_html;
4
  *
5
  * The WooCommerce Jetpack Wholesale Price class.
6
  *
7
+ * @version 2.4.1
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
61
  /**
62
  * add_discount_info_to_cart_page.
63
  *
64
+ * @version 2.4.1
65
  */
66
  function add_discount_info_to_cart_page( $price_html, $cart_item, $cart_item_key ) {
67
 
68
  $_product = wc_get_product( $cart_item['product_id'] );
69
 
70
  remove_filter( 'woocommerce_get_price', array( $this, 'wholesale_price' ), PHP_INT_MAX, 2 );
71
+ // $old_price_html = $_product->get_price_html();
72
  $old_price_html = wc_price( $_product->get_price() );
73
  add_filter( 'woocommerce_get_price', array( $this, 'wholesale_price' ), PHP_INT_MAX, 2 );
74
 
75
+ if ( $old_price_html != wc_price( $_product->get_price() ) ) {
76
 
77
  $the_quantity = $this->get_wholesale_quantity( $_product );
78
 
80
 
81
  if ( 'fixed' === get_option( 'wcj_wholesale_price_discount_type' ) ) $discount = wc_price( $discount );
82
 
83
+ if ( 0 != $discount ) {
84
+
85
+ $wholesale_price_html = get_option( 'wcj_wholesale_price_show_info_on_cart_format' );
86
+ $wholesale_price_html = str_replace( '%old_price%', $old_price_html, $wholesale_price_html );
87
+ $wholesale_price_html = str_replace( '%price%', $price_html, $wholesale_price_html );
88
+ $wholesale_price_html = str_replace( '%discount_percent%', $discount, $wholesale_price_html ); //depreciated
89
+ $wholesale_price_html = str_replace( '%discount_value%', $discount, $wholesale_price_html );
90
 
91
+ return $wholesale_price_html;
92
+ }
93
  }
94
 
95
  return $price_html;
includes/class-wcj-wpml.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Jetpack WPML class.
6
  *
7
- * @version 2.2.8
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -18,7 +18,7 @@ class WCJ_WPML extends WCJ_Module {
18
  /**
19
  * Constructor.
20
  *
21
- * @version 2.2.8
22
  */
23
  function __construct() {
24
 
@@ -28,7 +28,10 @@ class WCJ_WPML extends WCJ_Module {
28
  parent::__construct();
29
 
30
  if ( $this->is_enabled() ) {
31
- add_action( 'woocommerce_init', array( $this, 'create_wpml_xml_file' ), PHP_INT_MAX );
 
 
 
32
  }
33
 
34
  $this->notice = '';
@@ -37,61 +40,81 @@ class WCJ_WPML extends WCJ_Module {
37
  /**
38
  * get_settings.
39
  *
40
- * @version 2.2.8
41
  */
42
  function get_settings() {
43
  $settings = array(
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  array(
45
  'title' => $this->short_desc . ' ' . __( 'Tools', 'woocommerce-jetpack' ),
46
  'type' => 'title',
47
- 'desc' => '',
48
- 'id' => 'wcj_' . $this->id . '_tools_options'
49
  ),
50
  array(
51
  'title' => __( 'Module Tools', 'woocommerce-jetpack' ),
52
  'id' => 'wcj_' . $this->id . '_module_tools',
53
  'type' => 'custom_link',
54
- 'link' => '<pre><a href="' . add_query_arg( 'create_wpml_xml_file', '1' ) . '">' . __( 'Regenerate wpml-config.xml file', 'woocommerce-jetpack' ) . '</a></pre>'
55
- . '<pre>' . $this->notice . '</pre>',
 
 
56
  ),
57
  array(
58
  'type' => 'sectionend',
59
- 'id' => 'wcj_' . $this->id . '_tools_options'
60
  ),
61
  );
62
  $this->notice = '';
63
- return $this->add_enable_module_setting( $settings );
64
  }
65
 
66
  /**
67
  * create_wpml_xml_file.
68
  *
69
- * @version 2.2.8
 
70
  */
71
- function create_wpml_xml_file() {
72
-
73
  if ( ! isset( $_GET['create_wpml_xml_file'] ) || ! is_super_admin() ) {
74
  return;
75
  }
76
-
77
  if ( ! isset( $_GET['section'] ) || 'wpml' != $_GET['section'] ) {
78
  return;
79
  }
 
 
 
80
 
 
 
 
 
 
 
81
  $file_path = wcj_plugin_path() . '/wpml-config.xml';
82
  if ( false !== ( $handle = fopen( $file_path, 'w' ) ) ) {
83
-
84
  fwrite( $handle, '<wpml-config>' . PHP_EOL );
85
  fwrite( $handle, "\t" );
86
  fwrite( $handle, '<admin-texts>' . PHP_EOL );
87
-
88
- // $sections = $this->get_sections();
89
  $sections = apply_filters( 'wcj_settings_sections', array() );
90
  foreach ( $sections as $section => $section_title ) {
91
-
92
- // $settings = $this->get_settings( $section );
93
  $settings = apply_filters( 'wcj_settings_' . $section, array() );
94
-
95
  foreach ( $settings as $value ) {
96
  if ( $this->is_wpml_value( $section, $value ) ) {
97
  fwrite( $handle, "\t\t" );
@@ -99,22 +122,17 @@ class WCJ_WPML extends WCJ_Module {
99
  }
100
  }
101
  }
102
-
103
  fwrite( $handle, "\t" );
104
  fwrite( $handle, '</admin-texts>' . PHP_EOL );
105
  fwrite( $handle, '</wpml-config>' . PHP_EOL );
106
-
107
  fclose( $handle );
108
-
109
- $this->notice = __( 'File wpml-config.xml successfully regenerated!', 'woocommerce-jetpack' ) /* . PHP_EOL
110
- . __( 'File path:', 'woocommerce-jetpack' ) . ' ' . $file_path . PHP_EOL */;
111
-
112
  }
113
-
114
  }
115
 
116
  /**
117
  * is_wpml_value.
 
 
118
  */
119
  function is_wpml_value( $section, $value ) {
120
 
@@ -122,33 +140,47 @@ class WCJ_WPML extends WCJ_Module {
122
  $is_type_ok = ( 'textarea' === $value['type'] || 'text' === $value['type'] ) ? true : false;
123
 
124
  // Section
125
- $sections_with_wpml = array(
126
- 'call_for_price',
127
- 'price_labels',
128
- 'add_to_cart',
129
- 'more_button_labels',
130
-
131
- 'product_info',
132
- 'product_tabs',
133
- 'sorting',
134
- 'product_input_fields',
135
-
136
- 'cart',
137
- 'mini_cart',
138
- 'checkout_core_fields',
139
- 'checkout_custom_fields',
140
- 'checkout_custom_info',
141
-
142
- 'orders',
143
-
144
- 'pdf_invoicing_templates',
145
- 'pdf_invoicing_header',
146
- 'pdf_invoicing_footer',
147
- 'pdf_invoicing_display',
148
-
149
- 'pdf_invoices',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
150
  );
151
- $is_section_ok = ( in_array( $section, $sections_with_wpml ) ) ? true : false;
152
 
153
  // ID
154
  $values_to_skip = array(
@@ -161,7 +193,6 @@ class WCJ_WPML extends WCJ_Module {
161
 
162
  'wcj_empty_cart_div_style',
163
  );
164
- // $is_id_ok = ( in_array( $value['id'], $values_to_skip ) ) ? false : true;
165
  $is_id_ok = true;
166
  foreach ( $values_to_skip as $value_to_skip ) {
167
  if ( false !== strpos( $value['id'], $value_to_skip ) ) {
4
  *
5
  * The WooCommerce Jetpack WPML class.
6
  *
7
+ * @version 2.4.1
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 2.4.1
22
  */
23
  function __construct() {
24
 
28
  parent::__construct();
29
 
30
  if ( $this->is_enabled() ) {
31
+ add_action( 'woocommerce_init', array( $this, 'create_wpml_xml_file_tool' ), PHP_INT_MAX );
32
+ /* if ( 'yes' === get_option( 'wcj_' . $this->id . '_auto_regenerate', 'no' ) ) {
33
+ add_action( 'woojetpack_after_settings_save', array( $this, 'create_wpml_xml_file' ) );
34
+ } */
35
  }
36
 
37
  $this->notice = '';
40
  /**
41
  * get_settings.
42
  *
43
+ * @version 2.4.1
44
  */
45
  function get_settings() {
46
  $settings = array(
47
+ /* array(
48
+ 'title' => __( 'General Options', 'woocommerce-jetpack' ),
49
+ 'type' => 'title',
50
+ 'id' => 'wcj_' . $this->id . '_general_options',
51
+ ),
52
+ array(
53
+ 'title' => __( 'Automatically Regenerate wpml-config.xml File', 'woocommerce-jetpack' ),
54
+ 'desc_tip' => __( 'Automatically regenerate wpml-config.xml file when saving any module\'s settings.', 'woocommerce-jetpack' ),
55
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
56
+ 'id' => 'wcj_' . $this->id . '_auto_regenerate',
57
+ 'default' => 'no',
58
+ 'type' => 'checkbox',
59
+ ),
60
+ array(
61
+ 'type' => 'sectionend',
62
+ 'id' => 'wcj_' . $this->id . '_general_options',
63
+ ), */
64
  array(
65
  'title' => $this->short_desc . ' ' . __( 'Tools', 'woocommerce-jetpack' ),
66
  'type' => 'title',
67
+ 'id' => 'wcj_' . $this->id . '_tools_options',
 
68
  ),
69
  array(
70
  'title' => __( 'Module Tools', 'woocommerce-jetpack' ),
71
  'id' => 'wcj_' . $this->id . '_module_tools',
72
  'type' => 'custom_link',
73
+ 'link' => '<pre>' .
74
+ '<a href="' . add_query_arg( 'create_wpml_xml_file', '1' ) . '">' . __( 'Regenerate wpml-config.xml file', 'woocommerce-jetpack' ) . '</a>' .
75
+ '</pre>' .
76
+ '<pre>' . $this->notice . '</pre>',
77
  ),
78
  array(
79
  'type' => 'sectionend',
80
+ 'id' => 'wcj_' . $this->id . '_tools_options',
81
  ),
82
  );
83
  $this->notice = '';
84
+ return $this->add_standard_settings( $settings );
85
  }
86
 
87
  /**
88
  * create_wpml_xml_file.
89
  *
90
+ * @version 2.4.1
91
+ * @since 2.4.1
92
  */
93
+ function create_wpml_xml_file_tool() {
 
94
  if ( ! isset( $_GET['create_wpml_xml_file'] ) || ! is_super_admin() ) {
95
  return;
96
  }
 
97
  if ( ! isset( $_GET['section'] ) || 'wpml' != $_GET['section'] ) {
98
  return;
99
  }
100
+ $this->create_wpml_xml_file();
101
+ $this->notice = __( 'File wpml-config.xml successfully regenerated!', 'woocommerce-jetpack' );
102
+ }
103
 
104
+ /**
105
+ * create_wpml_xml_file.
106
+ *
107
+ * @version 2.4.1
108
+ */
109
+ function create_wpml_xml_file() {
110
  $file_path = wcj_plugin_path() . '/wpml-config.xml';
111
  if ( false !== ( $handle = fopen( $file_path, 'w' ) ) ) {
 
112
  fwrite( $handle, '<wpml-config>' . PHP_EOL );
113
  fwrite( $handle, "\t" );
114
  fwrite( $handle, '<admin-texts>' . PHP_EOL );
 
 
115
  $sections = apply_filters( 'wcj_settings_sections', array() );
116
  foreach ( $sections as $section => $section_title ) {
 
 
117
  $settings = apply_filters( 'wcj_settings_' . $section, array() );
 
118
  foreach ( $settings as $value ) {
119
  if ( $this->is_wpml_value( $section, $value ) ) {
120
  fwrite( $handle, "\t\t" );
122
  }
123
  }
124
  }
 
125
  fwrite( $handle, "\t" );
126
  fwrite( $handle, '</admin-texts>' . PHP_EOL );
127
  fwrite( $handle, '</wpml-config>' . PHP_EOL );
 
128
  fclose( $handle );
 
 
 
 
129
  }
 
130
  }
131
 
132
  /**
133
  * is_wpml_value.
134
+ *
135
+ * @version 2.4.1
136
  */
137
  function is_wpml_value( $section, $value ) {
138
 
140
  $is_type_ok = ( 'textarea' === $value['type'] || 'text' === $value['type'] ) ? true : false;
141
 
142
  // Section
143
+ $sections_to_skip = array(
144
+ 'price_by_country',
145
+ 'currency',
146
+ 'currency_external_products',
147
+ 'bulk_price_converter',
148
+ 'currency_exchange_rates',
149
+
150
+ 'product_listings',
151
+ 'related_products',
152
+ 'sku',
153
+ 'product_add_to_cart',
154
+ 'purchase_data',
155
+ 'crowdfunding',
156
+
157
+ 'payment_gateways',
158
+ 'payment_gateways_icons',
159
+ 'payment_gateways_per_category',
160
+ 'payment_gateways_currency',
161
+ 'payment_gateways_min_max',
162
+ 'payment_gateways_by_country',
163
+
164
+ 'shipping',
165
+ 'shipping_calculator',
166
+ 'address_formats',
167
+ 'order_numbers',
168
+ 'order_custom_statuses',
169
+
170
+ 'pdf_invoicing',
171
+ 'pdf_invoicing_numbering',
172
+ 'pdf_invoicing_styling',
173
+ 'pdf_invoicing_page',
174
+ 'pdf_invoicing_emails',
175
+
176
+ 'general',
177
+ 'old_slugs',
178
+ 'reports',
179
+ 'admin_tools',
180
+ 'emails',
181
+ 'wpml',
182
  );
183
+ $is_section_ok = ( ! in_array( $section, $sections_to_skip ) ) ? true : false;
184
 
185
  // ID
186
  $values_to_skip = array(
193
 
194
  'wcj_empty_cart_div_style',
195
  );
 
196
  $is_id_ok = true;
197
  foreach ( $values_to_skip as $value_to_skip ) {
198
  if ( false !== strpos( $value['id'], $value_to_skip ) ) {
includes/emails/class-wc-email-wcj-custom.php CHANGED
@@ -11,7 +11,7 @@ if ( ! class_exists( 'WC_Email_WCJ_Custom' ) ) :
11
  *
12
  * An email sent to recipient list when selected triggers are called.
13
  *
14
- * @version 2.4.0
15
  * @since 2.3.9
16
  * @author Algoritmika Ltd.
17
  * @extends WC_Email
@@ -56,6 +56,21 @@ class WC_Email_WCJ_Custom extends WC_Email {
56
  }
57
  }
58
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  /**
60
  * Trigger.
61
  *
11
  *
12
  * An email sent to recipient list when selected triggers are called.
13
  *
14
+ * @version 2.4.1
15
  * @since 2.3.9
16
  * @author Algoritmika Ltd.
17
  * @extends WC_Email
56
  }
57
  }
58
 
59
+ /**
60
+ * Proxy to parent's get_option and attempt to localize the result using gettext.
61
+ *
62
+ * @version 2.4.1
63
+ * @since 2.4.1
64
+ * @param string $key
65
+ * @param mixed $empty_value
66
+ * @return mixed
67
+ */
68
+ public function get_option( $key, $empty_value = null ) {
69
+ $grandparent = get_parent_class( 'WC_Email' );
70
+ $value = $grandparent::get_option( $key, $empty_value );
71
+ return ( is_array( $value ) ) ? $value : apply_filters( 'woocommerce_email_get_option', __( $value ), $this, $value, $key, $empty_value );
72
+ }
73
+
74
  /**
75
  * Trigger.
76
  *
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.4.0
8
  * @author Algoritmika Ltd.
9
  */
10
 
@@ -197,7 +197,7 @@ class WCJ_Price_by_Country_Core {
197
  /**
198
  * get_customer_country_group_id.
199
  *
200
- * @version 2.2.6
201
  */
202
  public function get_customer_country_group_id() {
203
 
@@ -214,7 +214,7 @@ class WCJ_Price_by_Country_Core {
214
  $country = $_GET['country'];
215
 
216
  } elseif ( 'yes' === get_option( 'wcj_price_by_country_override_on_checkout_with_billing_country', 'no' )
217
- && is_checkout()
218
  && '' != WC()->customer->get_country()
219
  ) {
220
 
4
  *
5
  * The WooCommerce Jetpack Price by Country Core class.
6
  *
7
+ * @version 2.4.1
8
  * @author Algoritmika Ltd.
9
  */
10
 
197
  /**
198
  * get_customer_country_group_id.
199
  *
200
+ * @version 2.4.1
201
  */
202
  public function get_customer_country_group_id() {
203
 
214
  $country = $_GET['country'];
215
 
216
  } elseif ( 'yes' === get_option( 'wcj_price_by_country_override_on_checkout_with_billing_country', 'no' )
217
+ /* && is_checkout() */
218
  && '' != WC()->customer->get_country()
219
  ) {
220
 
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: algoritmika,anbinder,solovjov
3
  Tags: woocommerce,booster for woocommerce,woocommerce jetpack,custom price labels,call for price,currency symbol,remove sorting,remove old product slugs,add to cart text,order number,sequential order numbering,email pdf invoice,pdf invoice,pdf invoices,already in cart,empty cart,redirect to checkout,minimum order amount,customize checkout fields,checkout fields,email,customize product tabs,product tabs,related products number,empty cart,redirect add to cart,redirect to checkout,product already in cart,custom payment gateway,payment gateway icon,auto-complete all orders,custom order statuses,custom order status,remove text from price,custom css,hide categories count,hide subcategories count,hide category count,hide subcategory count,display total sales,custom product tabs,remove product tab,payment gateway fee,vat
4
  Requires at least: 3.8
5
  Tested up to: 4.4
6
- Stable tag: 2.4.0
7
  License: GNU General Public License v3.0
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
@@ -60,6 +60,8 @@ Booster for WooCommerce is a WordPress plugin that supercharges your site with a
60
  * *Gateways Currency* - Currency per WooCommerce payment gateway.
61
  * *Gateways Fees* - Enable extra fees for WooCommerce payment gateways.
62
  * *Gateways Icons* - Change or completely remove icons (images) for any (default or custom) WooCommerce payment gateway.
 
 
63
  * *Gateways per Category* - Show payment gateway only if there is product of selected category in WooCommerce cart.
64
 
65
  **Shipping & Orders**
@@ -108,7 +110,7 @@ Booster for WooCommerce is a WordPress plugin that supercharges your site with a
108
 
109
  = How to unlock those some features settings that are locked? =
110
 
111
- To unlock all Booster for WooCommerce features, please install additional <a href="http://booster.io/plus/">Booster for WooCommerce Plus</a> plugin.
112
 
113
  == Screenshots ==
114
 
@@ -116,6 +118,14 @@ To unlock all Booster for WooCommerce features, please install additional <a hre
116
 
117
  == Changelog ==
118
 
 
 
 
 
 
 
 
 
119
  = 2.4.0 - 10/02/2016 =
120
  * Fix - Custom attribute handling in `output_custom_number()` fixed.
121
  * Dev - "Reset Module to Default Settings" option added.
3
  Tags: woocommerce,booster for woocommerce,woocommerce jetpack,custom price labels,call for price,currency symbol,remove sorting,remove old product slugs,add to cart text,order number,sequential order numbering,email pdf invoice,pdf invoice,pdf invoices,already in cart,empty cart,redirect to checkout,minimum order amount,customize checkout fields,checkout fields,email,customize product tabs,product tabs,related products number,empty cart,redirect add to cart,redirect to checkout,product already in cart,custom payment gateway,payment gateway icon,auto-complete all orders,custom order statuses,custom order status,remove text from price,custom css,hide categories count,hide subcategories count,hide category count,hide subcategory count,display total sales,custom product tabs,remove product tab,payment gateway fee,vat
4
  Requires at least: 3.8
5
  Tested up to: 4.4
6
+ Stable tag: 2.4.1
7
  License: GNU General Public License v3.0
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
60
  * *Gateways Currency* - Currency per WooCommerce payment gateway.
61
  * *Gateways Fees* - Enable extra fees for WooCommerce payment gateways.
62
  * *Gateways Icons* - Change or completely remove icons (images) for any (default or custom) WooCommerce payment gateway.
63
+ * *Gateways Min/Max* - Add min/max amounts for WooCommerce payment gateways to show up.
64
+ * *Gateways by Country* - Set countries to include/exclude for WooCommerce payment gateways to show up.
65
  * *Gateways per Category* - Show payment gateway only if there is product of selected category in WooCommerce cart.
66
 
67
  **Shipping & Orders**
110
 
111
  = How to unlock those some features settings that are locked? =
112
 
113
+ To unlock all Booster for WooCommerce features, please install additional [Booster for WooCommerce Plus](http://booster.io/plus/) plugin.
114
 
115
  == Screenshots ==
116
 
118
 
119
  == Changelog ==
120
 
121
+ = 2.4.1 - 04/03/2016 =
122
+ * Fix - PRICES & CURRENCIES - Wholesale Price - Discount info on cart page bug fixed.
123
+ * Fix - PRICES & CURRENCIES - Price by Country - Wrong currency in emails bug fixed.
124
+ * Dev - PAYMENT GATEWAYS - Gateways by Country - Initial module release.
125
+ * Dev - PAYMENT GATEWAYS - Gateways Min/Max - Initial module release.
126
+ * Fix - EMAILS & MISC. - Emails - "Illegal offset type in isset or empty in ..." warning fixed.
127
+ * Dev - EMAILS & MISC. - WPML - Code refactoring.
128
+
129
  = 2.4.0 - 10/02/2016 =
130
  * Fix - Custom attribute handling in `output_custom_number()` fixed.
131
  * Dev - "Reset Module to Default Settings" option added.
woocommerce-jetpack.php CHANGED
@@ -3,10 +3,10 @@
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.4.0
7
  Author: Algoritmika Ltd
8
  Author URI: http://www.algoritmika.com
9
- Copyright: © 2015 Algoritmika Ltd.
10
  License: GNU General Public License v3.0
11
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
12
  */
@@ -21,7 +21,7 @@ if ( ! class_exists( 'WC_Jetpack' ) ) :
21
  * Main WC_Jetpack Class
22
  *
23
  * @class WC_Jetpack
24
- * @version 2.4.0
25
  */
26
 
27
  final class WC_Jetpack {
@@ -385,7 +385,7 @@ final class WC_Jetpack {
385
  /**
386
  * Include modules and submodules
387
  *
388
- * @version 2.4.0
389
  */
390
  private function include_modules() {
391
  $settings = array();
@@ -422,6 +422,8 @@ final class WC_Jetpack {
422
  $settings[] = include_once( 'includes/class-wcj-payment-gateways-fees.php' );
423
  $settings[] = include_once( 'includes/class-wcj-payment-gateways-per-category.php' );
424
  $settings[] = include_once( 'includes/class-wcj-payment-gateways-currency.php' );
 
 
425
 
426
  $settings[] = include_once( 'includes/class-wcj-shipping.php' );
427
  $settings[] = include_once( 'includes/class-wcj-shipping-calculator.php' );
3
  Plugin Name: Booster for WooCommerce
4
  Plugin URI: http://booster.io
5
  Description: Supercharge your WooCommerce site with these awesome powerful features.
6
+ Version: 2.4.1
7
  Author: Algoritmika Ltd
8
  Author URI: http://www.algoritmika.com
9
+ Copyright: © 2016 Algoritmika Ltd.
10
  License: GNU General Public License v3.0
11
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
12
  */
21
  * Main WC_Jetpack Class
22
  *
23
  * @class WC_Jetpack
24
+ * @version 2.4.1
25
  */
26
 
27
  final class WC_Jetpack {
385
  /**
386
  * Include modules and submodules
387
  *
388
+ * @version 2.4.1
389
  */
390
  private function include_modules() {
391
  $settings = array();
422
  $settings[] = include_once( 'includes/class-wcj-payment-gateways-fees.php' );
423
  $settings[] = include_once( 'includes/class-wcj-payment-gateways-per-category.php' );
424
  $settings[] = include_once( 'includes/class-wcj-payment-gateways-currency.php' );
425
+ $settings[] = include_once( 'includes/class-wcj-payment-gateways-min-max.php' );
426
+ $settings[] = include_once( 'includes/class-wcj-payment-gateways-by-country.php' );
427
 
428
  $settings[] = include_once( 'includes/class-wcj-shipping.php' );
429
  $settings[] = include_once( 'includes/class-wcj-shipping-calculator.php' );
wpml-config.xml CHANGED
@@ -28,10 +28,19 @@
28
  <key name="wcj_product_input_fields_type_checkbox_yes_global_1" />
29
  <key name="wcj_product_input_fields_type_checkbox_no_global_1" />
30
  <key name="wcj_product_input_fields_type_file_accept_global_1" />
 
 
31
  <key name="wcj_product_input_fields_type_select_options_global_1" />
32
  <key name="wcj_product_input_fields_title_global_1" />
33
  <key name="wcj_product_input_fields_placeholder_global_1" />
34
  <key name="wcj_product_input_fields_required_message_global_1" />
 
 
 
 
 
 
 
35
  <key name="wcj_add_to_cart_per_category_text_single_group_1" />
36
  <key name="wcj_add_to_cart_per_category_text_archive_group_1" />
37
  <key name="wcj_add_to_cart_text_on_single_simple" />
@@ -67,6 +76,8 @@
67
  <key name="wcj_checkout_place_order_button_text" />
68
  <key name="wcj_cart_custom_info_content_1" />
69
  <key name="wcj_cart_custom_info_item" />
 
 
70
  <key name="wcj_mini_cart_custom_info_content_1" />
71
  <key name="wcj_checkout_fields_billing_country_label" />
72
  <key name="wcj_checkout_fields_billing_country_placeholder" />
@@ -115,48 +126,13 @@
115
  <key name="wcj_checkout_custom_field_select_options_1" />
116
  <key name="wcj_checkout_custom_field_checkbox_yes_1" />
117
  <key name="wcj_checkout_custom_field_checkbox_no_1" />
 
 
118
  <key name="wcj_checkout_custom_field_label_1" />
119
  <key name="wcj_checkout_custom_field_placeholder_1" />
120
  <key name="wcj_checkout_custom_info_content_1" />
121
  <key name="wcj_order_minimum_amount_error_message" />
122
  <key name="wcj_order_minimum_amount_cart_notice_message" />
123
- <key name="wcj_pdf_invoices_seller_logo_url" />
124
- <key name="wcj_pdf_invoices_header_text" />
125
- <key name="wcj_pdf_invoices_invoice_number_text" />
126
- <key name="wcj_pdf_invoices_order_date_text" />
127
- <key name="wcj_pdf_invoices_order_time_text" />
128
- <key name="wcj_pdf_invoices_invoice_date_text" />
129
- <key name="wcj_pdf_invoices_invoice_due_date_text" />
130
- <key name="wcj_pdf_invoices_invoice_fulfillment_date_text" />
131
- <key name="wcj_pdf_invoices_additional_header_text" />
132
- <key name="wcj_pdf_invoices_seller_text" />
133
- <key name="wcj_pdf_invoices_seller_info" />
134
- <key name="wcj_pdf_invoices_buyer_text" />
135
- <key name="wcj_pdf_invoices_items_text" />
136
- <key name="wcj_pdf_invoices_display_shipping_as_item_text" />
137
- <key name="wcj_pdf_invoices_display_discount_as_item_text" />
138
- <key name="wcj_pdf_invoices_column_nr_text" />
139
- <key name="wcj_pdf_invoices_column_item_name_text" />
140
- <key name="wcj_pdf_invoices_column_item_name_additional_text" />
141
- <key name="wcj_pdf_invoices_column_qty_text" />
142
- <key name="wcj_pdf_invoices_column_single_price_tax_excl_text" />
143
- <key name="wcj_pdf_invoices_column_single_price_tax_text" />
144
- <key name="wcj_pdf_invoices_column_single_price_tax_incl_text" />
145
- <key name="wcj_pdf_invoices_column_price_tax_excl_text" />
146
- <key name="wcj_pdf_invoices_column_price_tax_percent" />
147
- <key name="wcj_pdf_invoices_column_price_tax_text" />
148
- <key name="wcj_pdf_invoices_column_price_text" />
149
- <key name="wcj_pdf_invoices_order_subtotal_text" />
150
- <key name="wcj_pdf_invoices_order_shipping_text" />
151
- <key name="wcj_pdf_invoices_order_discount_text" />
152
- <key name="wcj_pdf_invoices_order_total_excl_tax_text" />
153
- <key name="wcj_pdf_invoices_order_total_tax_text" />
154
- <key name="wcj_pdf_invoices_order_total_text" />
155
- <key name="wcj_pdf_invoices_order_payment_method_text" />
156
- <key name="wcj_pdf_invoices_order_shipping_method_text" />
157
- <key name="wcj_pdf_invoices_order_shipping_address_text" />
158
- <key name="wcj_pdf_invoices_footer_text" />
159
- <key name="wcj_pdf_invoices_general_css" />
160
  <key name="wcj_invoicing_invoice_template" />
161
  <key name="wcj_invoicing_proforma_invoice_template" />
162
  <key name="wcj_invoicing_packing_slip_template" />
@@ -182,15 +158,34 @@
182
  <key name="wcj_invoicing_packing_slip_footer_text" />
183
  <key name="wcj_invoicing_credit_note_footer_text" />
184
  <key name="wcj_invoicing_custom_doc_footer_text" />
 
 
 
185
  <key name="wcj_invoicing_invoice_link_text" />
186
  <key name="wcj_invoicing_invoice_file_name" />
 
 
 
187
  <key name="wcj_invoicing_proforma_invoice_link_text" />
188
  <key name="wcj_invoicing_proforma_invoice_file_name" />
 
 
 
189
  <key name="wcj_invoicing_packing_slip_link_text" />
190
  <key name="wcj_invoicing_packing_slip_file_name" />
 
 
 
191
  <key name="wcj_invoicing_credit_note_link_text" />
192
  <key name="wcj_invoicing_credit_note_file_name" />
 
 
 
193
  <key name="wcj_invoicing_custom_doc_link_text" />
194
  <key name="wcj_invoicing_custom_doc_file_name" />
 
 
 
 
195
  </admin-texts>
196
  </wpml-config>
28
  <key name="wcj_product_input_fields_type_checkbox_yes_global_1" />
29
  <key name="wcj_product_input_fields_type_checkbox_no_global_1" />
30
  <key name="wcj_product_input_fields_type_file_accept_global_1" />
31
+ <key name="wcj_product_input_fields_type_datepicker_format_global_1" />
32
+ <key name="wcj_product_input_fields_type_timepicker_format_global_1" />
33
  <key name="wcj_product_input_fields_type_select_options_global_1" />
34
  <key name="wcj_product_input_fields_title_global_1" />
35
  <key name="wcj_product_input_fields_placeholder_global_1" />
36
  <key name="wcj_product_input_fields_required_message_global_1" />
37
+ <key name="wcj_product_input_fields_frontend_view_required_html" />
38
+ <key name="wcj_product_input_fields_frontend_view_order_table_format" />
39
+ <key name="wcj_wholesale_price_show_info_on_cart_format" />
40
+ <key name="wcj_product_images_custom_on_single" />
41
+ <key name="wcj_product_images_thumbnails_custom_on_single" />
42
+ <key name="wcj_product_images_custom_on_archives" />
43
+ <key name="wcj_product_images_sale_flash_html" />
44
  <key name="wcj_add_to_cart_per_category_text_single_group_1" />
45
  <key name="wcj_add_to_cart_per_category_text_archive_group_1" />
46
  <key name="wcj_add_to_cart_text_on_single_simple" />
76
  <key name="wcj_checkout_place_order_button_text" />
77
  <key name="wcj_cart_custom_info_content_1" />
78
  <key name="wcj_cart_custom_info_item" />
79
+ <key name="wcj_empty_cart_text" />
80
+ <key name="wcj_empty_cart_confirmation_text" />
81
  <key name="wcj_mini_cart_custom_info_content_1" />
82
  <key name="wcj_checkout_fields_billing_country_label" />
83
  <key name="wcj_checkout_fields_billing_country_placeholder" />
126
  <key name="wcj_checkout_custom_field_select_options_1" />
127
  <key name="wcj_checkout_custom_field_checkbox_yes_1" />
128
  <key name="wcj_checkout_custom_field_checkbox_no_1" />
129
+ <key name="wcj_checkout_custom_field_datepicker_format_1" />
130
+ <key name="wcj_checkout_custom_field_timepicker_format_1" />
131
  <key name="wcj_checkout_custom_field_label_1" />
132
  <key name="wcj_checkout_custom_field_placeholder_1" />
133
  <key name="wcj_checkout_custom_info_content_1" />
134
  <key name="wcj_order_minimum_amount_error_message" />
135
  <key name="wcj_order_minimum_amount_cart_notice_message" />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
136
  <key name="wcj_invoicing_invoice_template" />
137
  <key name="wcj_invoicing_proforma_invoice_template" />
138
  <key name="wcj_invoicing_packing_slip_template" />
158
  <key name="wcj_invoicing_packing_slip_footer_text" />
159
  <key name="wcj_invoicing_credit_note_footer_text" />
160
  <key name="wcj_invoicing_custom_doc_footer_text" />
161
+ <key name="wcj_invoicing_invoice_admin_page_column_text" />
162
+ <key name="wcj_invoicing_invoice_admin_column_create_btn" />
163
+ <key name="wcj_invoicing_invoice_admin_column_delete_btn" />
164
  <key name="wcj_invoicing_invoice_link_text" />
165
  <key name="wcj_invoicing_invoice_file_name" />
166
+ <key name="wcj_invoicing_proforma_invoice_admin_page_column_text" />
167
+ <key name="wcj_invoicing_proforma_invoice_admin_column_create_btn" />
168
+ <key name="wcj_invoicing_proforma_invoice_admin_column_delete_btn" />
169
  <key name="wcj_invoicing_proforma_invoice_link_text" />
170
  <key name="wcj_invoicing_proforma_invoice_file_name" />
171
+ <key name="wcj_invoicing_packing_slip_admin_page_column_text" />
172
+ <key name="wcj_invoicing_packing_slip_admin_column_create_btn" />
173
+ <key name="wcj_invoicing_packing_slip_admin_column_delete_btn" />
174
  <key name="wcj_invoicing_packing_slip_link_text" />
175
  <key name="wcj_invoicing_packing_slip_file_name" />
176
+ <key name="wcj_invoicing_credit_note_admin_page_column_text" />
177
+ <key name="wcj_invoicing_credit_note_admin_column_create_btn" />
178
+ <key name="wcj_invoicing_credit_note_admin_column_delete_btn" />
179
  <key name="wcj_invoicing_credit_note_link_text" />
180
  <key name="wcj_invoicing_credit_note_file_name" />
181
+ <key name="wcj_invoicing_custom_doc_admin_page_column_text" />
182
+ <key name="wcj_invoicing_custom_doc_admin_column_create_btn" />
183
+ <key name="wcj_invoicing_custom_doc_admin_column_delete_btn" />
184
  <key name="wcj_invoicing_custom_doc_link_text" />
185
  <key name="wcj_invoicing_custom_doc_file_name" />
186
+ <key name="wcj_eu_vat_number_field_label" />
187
+ <key name="wcj_eu_vat_number_field_placeholder" />
188
+ <key name="wcj_eu_vat_number_field_description" />
189
+ <key name="wcj_eu_vat_number_not_valid_message" />
190
  </admin-texts>
191
  </wpml-config>