Booster for WooCommerce - Version 5.4.9

Version Description

30/11/2021 =

  • Fix - PRICES & CURRENCIES- Currency per Product - Fixed shipping price convert issue with exchange rate change wcj_get_option to get_option.
  • Fix - SHIPPING & ORDERS - Fixed nulled circle exception showing when shipping module not found.
  • Fix - PRODUCTS -Cross-sells- Fixed product is not in stock error on cart page.
  • Fix - PDF INVOICING & PACKING SLIPS- Fixed XSS reflected injection on fields without sanitization.
  • Fix - PRODUCTS -Products XML Feeds- Fixed XSS reflected injection on fields without sanitization.
  • Fix - EMAILS & MISC-General- Fixed XSS reflected injection on fields without sanitization.
Download this release

Release Info

Developer ronyp
Plugin Icon 128x128 Booster for WooCommerce
Version 5.4.9
Comparing to
See all releases

Code changes from version 5.4.8 to 5.4.9

includes/class-wcj-cross-sells.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Cross-sells
4
  *
5
- * @version 5.2.0
6
  * @since 3.5.3
7
  * @author Pluggabl LLC.
8
  */
@@ -135,14 +135,14 @@ class WCJ_Cross_Sells extends WCJ_Module {
135
  /**
136
  * cross_sells_exclude_not_in_stock.
137
  *
138
- * @version 3.9.0
139
  * @since 3.9.0
140
  */
141
  function cross_sells_exclude_not_in_stock( $ids, $_product ) {
142
- foreach ( $ids as $key => $product_id ) {
143
- $product = wc_get_product( $product_id );
144
- if ( ! $product->is_in_stock() ) {
145
- unset( $ids[ $key ] );
146
  }
147
  }
148
  return $ids;
2
  /**
3
  * Booster for WooCommerce - Module - Cross-sells
4
  *
5
+ * @version 5.4.9
6
  * @since 3.5.3
7
  * @author Pluggabl LLC.
8
  */
135
  /**
136
  * cross_sells_exclude_not_in_stock.
137
  *
138
+ * @version 5.4.9
139
  * @since 3.9.0
140
  */
141
  function cross_sells_exclude_not_in_stock( $ids, $_product ) {
142
+ foreach ($ids as $key => $product_id) {
143
+ $product = wc_get_product($product_id);
144
+ if (!$product->managing_stock() && !$product->is_in_stock()) {
145
+ unset($ids[$key]);
146
  }
147
  }
148
  return $ids;
includes/class-wcj-currency-per-product.php CHANGED
@@ -3,7 +3,7 @@
3
  /**
4
  * Booster for WooCommerce - Module - Currency per Product
5
  *
6
- * @version 5.4.8
7
  * @since 2.5.2
8
  * @author Pluggabl LLC.
9
  */
@@ -18,7 +18,7 @@ if (!class_exists('WCJ_Currency_Per_Product')) :
18
  /**
19
  * Constructor.
20
  *
21
- * @version 5.4.8
22
  * @since 2.5.2
23
  * @todo (maybe) add `$this->price_hooks_priority`
24
  */
@@ -34,9 +34,9 @@ if (!class_exists('WCJ_Currency_Per_Product')) :
34
 
35
  if ($this->is_enabled()) {
36
 
37
- $this->do_save_converted_prices = ('yes' === wcj_get_option('wcj_currency_per_product_save_prices', 'no'));
38
 
39
- $this->is_currency_per_product_by_product_enabled = ('yes' === wcj_get_option('wcj_currency_per_product_per_product', 'yes'));
40
  if ($this->is_currency_per_product_by_product_enabled) {
41
  add_action('add_meta_boxes', array($this, 'add_meta_box'));
42
  add_action('save_post_product', array($this, 'save_meta_box'), PHP_INT_MAX, 2);
@@ -66,7 +66,7 @@ if (!class_exists('WCJ_Currency_Per_Product')) :
66
  /**
67
  * change_shipping_price.
68
  *
69
- * @version 3.2.0
70
  * @since 2.7.0
71
  */
72
  function change_shipping_price($package_rates, $package)
@@ -75,13 +75,13 @@ if (!class_exists('WCJ_Currency_Per_Product')) :
75
  if (WC()->cart->is_empty()) {
76
  return $package_rates;
77
  }
78
- $cart_checkout_behaviour = wcj_get_option('wcj_currency_per_product_cart_checkout', 'convert_shop_default');
79
  switch ($cart_checkout_behaviour) {
80
  case 'leave_one_product':
81
  case 'leave_same_currency':
82
  case 'convert_first_product':
83
  case 'convert_last_product':
84
- $shop_currency = wcj_get_option('woocommerce_currency');
85
  if (false != ($_currency = $this->get_cart_checkout_currency()) && $_currency != $shop_currency) {
86
  $currency_exchange_rate = $this->get_currency_exchange_rate($_currency);
87
  if (0 != $currency_exchange_rate && 1 != $currency_exchange_rate) {
@@ -103,17 +103,17 @@ if (!class_exists('WCJ_Currency_Per_Product')) :
103
  /**
104
  * get_product_currency.
105
  *
106
- * @version 3.7.0
107
  * @since 2.9.0
108
- * @todo (maybe) return empty string or false, if it's shop default currency: `return ( wcj_get_option( 'woocommerce_currency' ) != ( $return = get_post_meta( $product_id, '_' . 'wcj_currency_per_product_currency', true ) ) ? $return : false );`
109
  */
110
  function get_product_currency($product_id)
111
  {
112
  // By users or user roles
113
- $do_check_by_users = ('yes' === wcj_get_option('wcj_currency_per_product_by_users_enabled', 'no'));
114
- $do_check_by_user_roles = ('yes' === wcj_get_option('wcj_currency_per_product_by_user_roles_enabled', 'no'));
115
- $do_check_by_product_cats = ('yes' === wcj_get_option('wcj_currency_per_product_by_product_cats_enabled', 'no'));
116
- $do_check_by_product_tags = ('yes' === wcj_get_option('wcj_currency_per_product_by_product_tags_enabled', 'no'));
117
  if ($do_check_by_users || $do_check_by_user_roles || $do_check_by_product_cats || $do_check_by_product_tags) {
118
  if ($do_check_by_users || $do_check_by_user_roles) {
119
  $product_author_id = get_post_field('post_author', $product_id);
@@ -124,35 +124,35 @@ if (!class_exists('WCJ_Currency_Per_Product')) :
124
  if ($do_check_by_product_tags) {
125
  $_product_tags = wcj_get_the_terms($product_id, 'product_tag');
126
  }
127
- $total_number = apply_filters('booster_option', 1, wcj_get_option('wcj_currency_per_product_total_number', 1));
128
  for ($i = 1; $i <= $total_number; $i++) {
129
  if ($do_check_by_users) {
130
- $users = wcj_get_option('wcj_currency_per_product_users_' . $i, '');
131
  if (!empty($users) && in_array($product_author_id, $users)) {
132
- return wcj_get_option('wcj_currency_per_product_currency_' . $i);
133
  }
134
  }
135
  if ($do_check_by_user_roles) {
136
- $user_roles = wcj_get_option('wcj_currency_per_product_user_roles_' . $i, '');
137
  if (!empty($user_roles) && wcj_is_user_role($user_roles, $product_author_id)) {
138
- return wcj_get_option('wcj_currency_per_product_currency_' . $i);
139
  }
140
  }
141
  if ($do_check_by_product_cats) {
142
- $product_cats = wcj_get_option('wcj_currency_per_product_product_cats_' . $i, '');
143
  if (!empty($_product_cats) && !empty($product_cats)) {
144
  $_intersect = array_intersect($_product_cats, $product_cats);
145
  if (!empty($_intersect)) {
146
- return wcj_get_option('wcj_currency_per_product_currency_' . $i);
147
  }
148
  }
149
  }
150
  if ($do_check_by_product_tags) {
151
- $product_tags = wcj_get_option('wcj_currency_per_product_product_tags_' . $i, '');
152
  if (!empty($_product_tags) && !empty($product_tags)) {
153
  $_intersect = array_intersect($_product_tags, $product_tags);
154
  if (!empty($_intersect)) {
155
- return wcj_get_option('wcj_currency_per_product_currency_' . $i);
156
  }
157
  }
158
  }
@@ -165,16 +165,16 @@ if (!class_exists('WCJ_Currency_Per_Product')) :
165
  /**
166
  * validate_on_add_to_cart.
167
  *
168
- * @version 2.9.0
169
  * @since 2.7.0
170
  */
171
  function validate_on_add_to_cart($passed, $product_id)
172
  {
173
- $cart_checkout_behaviour = wcj_get_option('wcj_currency_per_product_cart_checkout', 'convert_shop_default');
174
  if ('leave_one_product' === $cart_checkout_behaviour) {
175
  foreach (WC()->cart->get_cart() as $cart_item) {
176
  if ($cart_item['product_id'] != $product_id) {
177
- wc_add_notice(wcj_get_option(
178
  'wcj_currency_per_product_cart_checkout_leave_one_product',
179
  __('Only one product can be added to the cart. Clear the cart or finish the order, before adding another product to the cart.', 'woocommerce-jetpack')
180
  ), 'error');
@@ -182,7 +182,7 @@ if (!class_exists('WCJ_Currency_Per_Product')) :
182
  }
183
  }
184
  } elseif ('leave_same_currency' === $cart_checkout_behaviour) {
185
- $shop_currency = wcj_get_option('woocommerce_currency');
186
  $product_currency = $this->get_product_currency($product_id);
187
  if ('' == $product_currency) {
188
  $product_currency = $shop_currency;
@@ -191,7 +191,7 @@ if (!class_exists('WCJ_Currency_Per_Product')) :
191
  $cart_product_currency = (isset($cart_item['wcj_currency_per_product']) && '' != $cart_item['wcj_currency_per_product']) ?
192
  $cart_item['wcj_currency_per_product'] : $shop_currency;
193
  if ($cart_product_currency != $product_currency) {
194
- wc_add_notice(wcj_get_option(
195
  'wcj_currency_per_product_cart_checkout_leave_same_currency',
196
  __('Only products with same currency can be added to the cart. Clear the cart or finish the order, before adding products with another currency to the cart.', 'woocommerce-jetpack')
197
  ), 'error');
@@ -246,15 +246,15 @@ if (!class_exists('WCJ_Currency_Per_Product')) :
246
  /**
247
  * get_currency_exchange_rate.
248
  *
249
- * @version 3.6.0
250
  * @since 2.5.2
251
  */
252
  function get_currency_exchange_rate($currency_code)
253
  {
254
- $total_number = apply_filters('booster_option', 1, wcj_get_option('wcj_currency_per_product_total_number', 1));
255
  for ($i = 1; $i <= $total_number; $i++) {
256
- if ($currency_code === wcj_get_option('wcj_currency_per_product_currency_' . $i)) {
257
- return (0 != ($rate = wcj_get_option('wcj_currency_per_product_exchange_rate_' . $i, 1)) ? (1 / $rate) : 1);
258
  }
259
  }
260
  return 1;
@@ -295,20 +295,20 @@ if (!class_exists('WCJ_Currency_Per_Product')) :
295
  /**
296
  * change_price.
297
  *
298
- * @version 3.3.0
299
  * @since 2.5.2
300
  */
301
  function change_price($price, $_product)
302
  {
303
  if (isset($_product->wcj_currency_per_product)) {
304
- $cart_checkout_behaviour = wcj_get_option('wcj_currency_per_product_cart_checkout', 'convert_shop_default');
305
  switch ($cart_checkout_behaviour) {
306
  case 'leave_one_product':
307
  case 'leave_same_currency':
308
  return $price;
309
  case 'convert_first_product':
310
  case 'convert_last_product':
311
- $shop_currency = wcj_get_option('woocommerce_currency');
312
  if (false != ($_currency = $this->get_cart_checkout_currency()) && $_currency != $shop_currency) {
313
  if ($_product->wcj_currency_per_product === $_currency) {
314
  return $price;
@@ -331,7 +331,7 @@ if (!class_exists('WCJ_Currency_Per_Product')) :
331
  return $this->maybe_save_converted_price($price * $exchange_rate, $_product, $shop_currency);
332
  }
333
  default: // case 'convert_shop_default':
334
- $shop_currency = wcj_get_option('woocommerce_currency');
335
  if (false !== ($saved_price = $this->maybe_return_saved_converted_price($_product, $shop_currency))) {
336
  return $saved_price;
337
  }
@@ -431,12 +431,12 @@ if (!class_exists('WCJ_Currency_Per_Product')) :
431
  /**
432
  * get_cart_checkout_currency.
433
  *
434
- * @version 3.7.0
435
  * @since 2.7.0
436
  */
437
  function get_cart_checkout_currency()
438
  {
439
- $cart_checkout_behaviour = wcj_get_option('wcj_currency_per_product_cart_checkout', 'convert_shop_default');
440
  if (false !== ($value = apply_filters('wcj_currency_per_product_cart_checkout_currency', false, $cart_checkout_behaviour))) {
441
  return $value;
442
  }
3
  /**
4
  * Booster for WooCommerce - Module - Currency per Product
5
  *
6
+ * @version 5.4.9
7
  * @since 2.5.2
8
  * @author Pluggabl LLC.
9
  */
18
  /**
19
  * Constructor.
20
  *
21
+ * @version 5.4.9
22
  * @since 2.5.2
23
  * @todo (maybe) add `$this->price_hooks_priority`
24
  */
34
 
35
  if ($this->is_enabled()) {
36
 
37
+ $this->do_save_converted_prices = ('yes' === get_option('wcj_currency_per_product_save_prices', 'no'));
38
 
39
+ $this->is_currency_per_product_by_product_enabled = ('yes' === get_option('wcj_currency_per_product_per_product', 'yes'));
40
  if ($this->is_currency_per_product_by_product_enabled) {
41
  add_action('add_meta_boxes', array($this, 'add_meta_box'));
42
  add_action('save_post_product', array($this, 'save_meta_box'), PHP_INT_MAX, 2);
66
  /**
67
  * change_shipping_price.
68
  *
69
+ * @version 5.4.9
70
  * @since 2.7.0
71
  */
72
  function change_shipping_price($package_rates, $package)
75
  if (WC()->cart->is_empty()) {
76
  return $package_rates;
77
  }
78
+ $cart_checkout_behaviour = get_option('wcj_currency_per_product_cart_checkout', 'convert_shop_default');
79
  switch ($cart_checkout_behaviour) {
80
  case 'leave_one_product':
81
  case 'leave_same_currency':
82
  case 'convert_first_product':
83
  case 'convert_last_product':
84
+ $shop_currency = get_option('woocommerce_currency');
85
  if (false != ($_currency = $this->get_cart_checkout_currency()) && $_currency != $shop_currency) {
86
  $currency_exchange_rate = $this->get_currency_exchange_rate($_currency);
87
  if (0 != $currency_exchange_rate && 1 != $currency_exchange_rate) {
103
  /**
104
  * get_product_currency.
105
  *
106
+ * @version 5.4.9
107
  * @since 2.9.0
108
+ * @todo (maybe) return empty string or false, if it's shop default currency: `return ( get_option( 'woocommerce_currency' ) != ( $return = get_post_meta( $product_id, '_' . 'wcj_currency_per_product_currency', true ) ) ? $return : false );`
109
  */
110
  function get_product_currency($product_id)
111
  {
112
  // By users or user roles
113
+ $do_check_by_users = ('yes' === get_option('wcj_currency_per_product_by_users_enabled', 'no'));
114
+ $do_check_by_user_roles = ('yes' === get_option('wcj_currency_per_product_by_user_roles_enabled', 'no'));
115
+ $do_check_by_product_cats = ('yes' === get_option('wcj_currency_per_product_by_product_cats_enabled', 'no'));
116
+ $do_check_by_product_tags = ('yes' === get_option('wcj_currency_per_product_by_product_tags_enabled', 'no'));
117
  if ($do_check_by_users || $do_check_by_user_roles || $do_check_by_product_cats || $do_check_by_product_tags) {
118
  if ($do_check_by_users || $do_check_by_user_roles) {
119
  $product_author_id = get_post_field('post_author', $product_id);
124
  if ($do_check_by_product_tags) {
125
  $_product_tags = wcj_get_the_terms($product_id, 'product_tag');
126
  }
127
+ $total_number = apply_filters('booster_option', 1, get_option('wcj_currency_per_product_total_number', 1));
128
  for ($i = 1; $i <= $total_number; $i++) {
129
  if ($do_check_by_users) {
130
+ $users = get_option('wcj_currency_per_product_users_' . $i, '');
131
  if (!empty($users) && in_array($product_author_id, $users)) {
132
+ return get_option('wcj_currency_per_product_currency_' . $i);
133
  }
134
  }
135
  if ($do_check_by_user_roles) {
136
+ $user_roles = get_option('wcj_currency_per_product_user_roles_' . $i, '');
137
  if (!empty($user_roles) && wcj_is_user_role($user_roles, $product_author_id)) {
138
+ return get_option('wcj_currency_per_product_currency_' . $i);
139
  }
140
  }
141
  if ($do_check_by_product_cats) {
142
+ $product_cats = get_option('wcj_currency_per_product_product_cats_' . $i, '');
143
  if (!empty($_product_cats) && !empty($product_cats)) {
144
  $_intersect = array_intersect($_product_cats, $product_cats);
145
  if (!empty($_intersect)) {
146
+ return get_option('wcj_currency_per_product_currency_' . $i);
147
  }
148
  }
149
  }
150
  if ($do_check_by_product_tags) {
151
+ $product_tags = get_option('wcj_currency_per_product_product_tags_' . $i, '');
152
  if (!empty($_product_tags) && !empty($product_tags)) {
153
  $_intersect = array_intersect($_product_tags, $product_tags);
154
  if (!empty($_intersect)) {
155
+ return get_option('wcj_currency_per_product_currency_' . $i);
156
  }
157
  }
158
  }
165
  /**
166
  * validate_on_add_to_cart.
167
  *
168
+ * @version 5.4.9
169
  * @since 2.7.0
170
  */
171
  function validate_on_add_to_cart($passed, $product_id)
172
  {
173
+ $cart_checkout_behaviour = get_option('wcj_currency_per_product_cart_checkout', 'convert_shop_default');
174
  if ('leave_one_product' === $cart_checkout_behaviour) {
175
  foreach (WC()->cart->get_cart() as $cart_item) {
176
  if ($cart_item['product_id'] != $product_id) {
177
+ wc_add_notice(get_option(
178
  'wcj_currency_per_product_cart_checkout_leave_one_product',
179
  __('Only one product can be added to the cart. Clear the cart or finish the order, before adding another product to the cart.', 'woocommerce-jetpack')
180
  ), 'error');
182
  }
183
  }
184
  } elseif ('leave_same_currency' === $cart_checkout_behaviour) {
185
+ $shop_currency = get_option('woocommerce_currency');
186
  $product_currency = $this->get_product_currency($product_id);
187
  if ('' == $product_currency) {
188
  $product_currency = $shop_currency;
191
  $cart_product_currency = (isset($cart_item['wcj_currency_per_product']) && '' != $cart_item['wcj_currency_per_product']) ?
192
  $cart_item['wcj_currency_per_product'] : $shop_currency;
193
  if ($cart_product_currency != $product_currency) {
194
+ wc_add_notice(get_option(
195
  'wcj_currency_per_product_cart_checkout_leave_same_currency',
196
  __('Only products with same currency can be added to the cart. Clear the cart or finish the order, before adding products with another currency to the cart.', 'woocommerce-jetpack')
197
  ), 'error');
246
  /**
247
  * get_currency_exchange_rate.
248
  *
249
+ * @version 5.4.9
250
  * @since 2.5.2
251
  */
252
  function get_currency_exchange_rate($currency_code)
253
  {
254
+ $total_number = apply_filters('booster_option', 1, get_option('wcj_currency_per_product_total_number', 1));
255
  for ($i = 1; $i <= $total_number; $i++) {
256
+ if ($currency_code === get_option('wcj_currency_per_product_currency_' . $i)) {
257
+ return (0 != ($rate = get_option('wcj_currency_per_product_exchange_rate_' . $i, 1)) ? (1 / $rate) : 1);
258
  }
259
  }
260
  return 1;
295
  /**
296
  * change_price.
297
  *
298
+ * @version 5.4.9
299
  * @since 2.5.2
300
  */
301
  function change_price($price, $_product)
302
  {
303
  if (isset($_product->wcj_currency_per_product)) {
304
+ $cart_checkout_behaviour = get_option('wcj_currency_per_product_cart_checkout', 'convert_shop_default');
305
  switch ($cart_checkout_behaviour) {
306
  case 'leave_one_product':
307
  case 'leave_same_currency':
308
  return $price;
309
  case 'convert_first_product':
310
  case 'convert_last_product':
311
+ $shop_currency = get_option('woocommerce_currency');
312
  if (false != ($_currency = $this->get_cart_checkout_currency()) && $_currency != $shop_currency) {
313
  if ($_product->wcj_currency_per_product === $_currency) {
314
  return $price;
331
  return $this->maybe_save_converted_price($price * $exchange_rate, $_product, $shop_currency);
332
  }
333
  default: // case 'convert_shop_default':
334
+ $shop_currency = get_option('woocommerce_currency');
335
  if (false !== ($saved_price = $this->maybe_return_saved_converted_price($_product, $shop_currency))) {
336
  return $saved_price;
337
  }
431
  /**
432
  * get_cart_checkout_currency.
433
  *
434
+ * @version 5.4.9
435
  * @since 2.7.0
436
  */
437
  function get_cart_checkout_currency()
438
  {
439
+ $cart_checkout_behaviour = get_option('wcj_currency_per_product_cart_checkout', 'convert_shop_default');
440
  if (false !== ($value = apply_filters('wcj_currency_per_product_cart_checkout_currency', false, $cart_checkout_behaviour))) {
441
  return $value;
442
  }
includes/class-wcj-general.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - General
4
  *
5
- * @version 4.5.0
6
  * @author Pluggabl LLC.
7
  */
8
 
@@ -175,7 +175,7 @@ class WCJ_General extends WCJ_Module {
175
  /**
176
  * create_custom_roles_tool.
177
  *
178
- * @version 4.0.0
179
  * @since 2.5.3
180
  */
181
  function create_custom_roles_tool() {
@@ -209,7 +209,7 @@ class WCJ_General extends WCJ_Module {
209
  unset( $custom_roles[ $_GET['wcj_delete_role'] ] );
210
  update_option( 'wcj_custom_roles', $custom_roles );
211
  }
212
- echo '<p style="color:green;font-weight:bold;">' . sprintf( __( 'Role %s successfully deleted!', 'woocommerce-jetpack'), $_GET['wcj_delete_role'] ) . '</p>';
213
  }
214
 
215
  echo $this->get_tool_header_html( 'custom_roles' );
2
  /**
3
  * Booster for WooCommerce - Module - General
4
  *
5
+ * @version 5.4.9
6
  * @author Pluggabl LLC.
7
  */
8
 
175
  /**
176
  * create_custom_roles_tool.
177
  *
178
+ * @version 5.4.9
179
  * @since 2.5.3
180
  */
181
  function create_custom_roles_tool() {
209
  unset( $custom_roles[ $_GET['wcj_delete_role'] ] );
210
  update_option( 'wcj_custom_roles', $custom_roles );
211
  }
212
+ echo '<p style="color:green;font-weight:bold;">' . sprintf( __( 'Role %s successfully deleted!', 'woocommerce-jetpack'), sanitize_text_field($_GET['wcj_delete_role'] )) . '</p>';
213
  }
214
 
215
  echo $this->get_tool_header_html( 'custom_roles' );
includes/class-wcj-pdf-invoicing.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - PDF Invoicing
4
  *
5
- * @version 5.2.0
6
  * @author Pluggabl LLC.
7
  */
8
 
@@ -108,7 +108,7 @@ class WCJ_PDF_Invoicing extends WCJ_Module {
108
  /**
109
  * bulk_actions_pdfs_notices.
110
  *
111
- * @version 3.5.2
112
  * @since 2.5.7
113
  */
114
  function bulk_actions_pdfs_notices() {
@@ -143,7 +143,7 @@ class WCJ_PDF_Invoicing extends WCJ_Module {
143
  break;
144
  default:
145
  echo '<div class="notice notice-error"><p>' .
146
- sprintf( __( 'Booster: %s.', 'woocommerce-jetpack' ), '<code>' . $_GET['wcj_notice'] . '</code>' ) .
147
  '</p></div>';
148
  break;
149
  }
2
  /**
3
  * Booster for WooCommerce - Module - PDF Invoicing
4
  *
5
+ * @version 5.4.9
6
  * @author Pluggabl LLC.
7
  */
8
 
108
  /**
109
  * bulk_actions_pdfs_notices.
110
  *
111
+ * @version 5.4.9
112
  * @since 2.5.7
113
  */
114
  function bulk_actions_pdfs_notices() {
143
  break;
144
  default:
145
  echo '<div class="notice notice-error"><p>' .
146
+ sprintf( __( 'Booster: %s.', 'woocommerce-jetpack' ), '<code>' . sanitize_text_field($_GET['wcj_notice']) . '</code>' ) .
147
  '</p></div>';
148
  break;
149
  }
includes/class-wcj-products-xml.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Products XML
4
  *
5
- * @version 5.2.0
6
  * @since 2.5.7
7
  * @author Pluggabl LLC.
8
  * @todo create all files at once (manually and synchronize update)
@@ -105,7 +105,7 @@ class WCJ_Products_XML extends WCJ_Module {
105
  /**
106
  * admin_notices.
107
  *
108
- * @version 3.3.0
109
  * @since 2.5.7
110
  */
111
  function admin_notices() {
@@ -115,7 +115,7 @@ class WCJ_Products_XML extends WCJ_Module {
115
  $message = __( 'An error has occurred while creating products XML file.', 'woocommerce-jetpack' );
116
  } else {
117
  $class = 'notice notice-success is-dismissible';
118
- $message = sprintf( __( 'Products XML file #%s created successfully.', 'woocommerce-jetpack' ), $_GET['wcj_create_products_xml_result'] );
119
  }
120
  echo '<div class="' . $class . '"><p>' . $message . '</p></div>';
121
  }
2
  /**
3
  * Booster for WooCommerce - Module - Products XML
4
  *
5
+ * @version 5.4.9
6
  * @since 2.5.7
7
  * @author Pluggabl LLC.
8
  * @todo create all files at once (manually and synchronize update)
105
  /**
106
  * admin_notices.
107
  *
108
+ * @version 5.4.9
109
  * @since 2.5.7
110
  */
111
  function admin_notices() {
115
  $message = __( 'An error has occurred while creating products XML file.', 'woocommerce-jetpack' );
116
  } else {
117
  $class = 'notice notice-success is-dismissible';
118
+ $message = sprintf( __( 'Products XML file #%s created successfully.', 'woocommerce-jetpack' ), sanitize_text_field($_GET['wcj_create_products_xml_result'] ));
119
  }
120
  echo '<div class="' . $class . '"><p>' . $message . '</p></div>';
121
  }
includes/js/wcj-admin.js CHANGED
@@ -1,7 +1,7 @@
1
  /**
2
  * wcj-admin.
3
  *
4
- * @version 5.4.3
5
  * @since 5.4.2
6
  */
7
 
@@ -9,7 +9,7 @@ jQuery(document).ready(function () {
9
  /* Quick Links Footer - Popup */
10
  let circleBadge = document.querySelector('.circle-badge'),
11
  subCircles = document.querySelectorAll('.subCircles > div');
12
- if(circleBadge !== null){
13
  circleBadge.addEventListener('click', showCircles);
14
  function showCircles() {
15
  subCircles.forEach(circle => {
1
  /**
2
  * wcj-admin.
3
  *
4
+ * @version 5.4.9-dev
5
  * @since 5.4.2
6
  */
7
 
9
  /* Quick Links Footer - Popup */
10
  let circleBadge = document.querySelector('.circle-badge'),
11
  subCircles = document.querySelectorAll('.subCircles > div');
12
+ if (null !== circleBadge) { // ADDED THIS
13
  circleBadge.addEventListener('click', showCircles);
14
  function showCircles() {
15
  subCircles.forEach(circle => {
readme.txt CHANGED
@@ -4,7 +4,7 @@ Tags: woocommerce customization, woocommerce bundle, woocommerce product addon,
4
  Requires at least: 4.4
5
  Tested up to: 5.8
6
  Requires PHP: 5.6
7
- Stable tag: 5.4.8
8
  License: GNU General Public License v3.0
9
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
10
 
@@ -167,7 +167,7 @@ To unlock all Booster for WooCommerce features, please install additional paid B
167
  * *Tax Display* - Customize WooCommerce tax display.
168
  * *Upsells* - Customize upsells products display. Global upsells (Available in paid Booster bundles).
169
  * *User Products* - Let users add new products from the frontend. Image additional field (Available in paid Booster bundles). Custom Taxonomies (1 allowed in free version).
170
-
171
  **Cart & Checkout**
172
 
173
  * *Cart Custom Info* - Add custom info to the cart page (1 cart block allowed in free version).
@@ -265,6 +265,15 @@ To unlock all Booster for WooCommerce features, please install additional paid B
265
 
266
  == Changelog ==
267
 
 
 
 
 
 
 
 
 
 
268
  = 5.4.8 27/10/2021 =
269
 
270
  * Feature - PRODUCTS - Product Visibility by Country - Added shortcode to display product visibility by country. Use [wcj_product_visibility_by_country] to apply.
4
  Requires at least: 4.4
5
  Tested up to: 5.8
6
  Requires PHP: 5.6
7
+ Stable tag: 5.4.9
8
  License: GNU General Public License v3.0
9
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
10
 
167
  * *Tax Display* - Customize WooCommerce tax display.
168
  * *Upsells* - Customize upsells products display. Global upsells (Available in paid Booster bundles).
169
  * *User Products* - Let users add new products from the frontend. Image additional field (Available in paid Booster bundles). Custom Taxonomies (1 allowed in free version).
170
+ * *Product Variation Swatches* - Let users choose product variant from frontend.(Available in paid Booster bundles)
171
  **Cart & Checkout**
172
 
173
  * *Cart Custom Info* - Add custom info to the cart page (1 cart block allowed in free version).
265
 
266
  == Changelog ==
267
 
268
+ = 5.4.9 30/11/2021 =
269
+
270
+ * Fix - PRICES & CURRENCIES- Currency per Product - Fixed shipping price convert issue with exchange rate change wcj_get_option to get_option.
271
+ * Fix - SHIPPING & ORDERS - Fixed nulled circle exception showing when shipping module not found.
272
+ * Fix - PRODUCTS -Cross-sells- Fixed product is not in stock error on cart page.
273
+ * Fix - PDF INVOICING & PACKING SLIPS- Fixed XSS reflected injection on fields without sanitization.
274
+ * Fix - PRODUCTS -Products XML Feeds- Fixed XSS reflected injection on fields without sanitization.
275
+ * Fix - EMAILS & MISC-General- Fixed XSS reflected injection on fields without sanitization.
276
+
277
  = 5.4.8 27/10/2021 =
278
 
279
  * Feature - PRODUCTS - Product Visibility by Country - Added shortcode to display product visibility by country. Use [wcj_product_visibility_by_country] to apply.
woocommerce-jetpack.php CHANGED
@@ -3,13 +3,13 @@
3
  Plugin Name: Booster for WooCommerce
4
  Plugin URI: https://booster.io
5
  Description: Supercharge your WooCommerce site with these awesome powerful features. More than 100 modules. All in one WooCommerce plugin.
6
- Version: 5.4.8
7
  Author: Pluggabl LLC
8
  Author URI: https://booster.io
9
  Text Domain: woocommerce-jetpack
10
  Domain Path: /langs
11
  Copyright: © 2020 Pluggabl LLC.
12
- WC tested up to: 5.8.0
13
  License: GNU General Public License v3.0
14
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
15
  */
@@ -58,7 +58,7 @@ if (!class_exists('WC_Jetpack')) :
58
  * @var string
59
  * @since 2.4.7
60
  */
61
- public $version = '5.4.8';
62
 
63
  /**
64
  * @var WC_Jetpack The single instance of the class
3
  Plugin Name: Booster for WooCommerce
4
  Plugin URI: https://booster.io
5
  Description: Supercharge your WooCommerce site with these awesome powerful features. More than 100 modules. All in one WooCommerce plugin.
6
+ Version: 5.4.9
7
  Author: Pluggabl LLC
8
  Author URI: https://booster.io
9
  Text Domain: woocommerce-jetpack
10
  Domain Path: /langs
11
  Copyright: © 2020 Pluggabl LLC.
12
+ WC tested up to: 5.9.0
13
  License: GNU General Public License v3.0
14
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
15
  */
58
  * @var string
59
  * @since 2.4.7
60
  */
61
+ public $version = '5.4.9-dev';
62
 
63
  /**
64
  * @var WC_Jetpack The single instance of the class