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 | 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.
|
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
|
139 |
* @since 3.9.0
|
140 |
*/
|
141 |
function cross_sells_exclude_not_in_stock( $ids, $_product ) {
|
142 |
-
foreach (
|
143 |
-
$product = wc_get_product(
|
144 |
-
if (
|
145 |
-
unset(
|
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.
|
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.
|
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' ===
|
38 |
|
39 |
-
$this->is_currency_per_product_by_product_enabled = ('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
|
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 =
|
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 =
|
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
|
107 |
* @since 2.9.0
|
108 |
-
* @todo (maybe) return empty string or false, if it's shop default currency: `return (
|
109 |
*/
|
110 |
function get_product_currency($product_id)
|
111 |
{
|
112 |
// By users or user roles
|
113 |
-
$do_check_by_users = ('yes' ===
|
114 |
-
$do_check_by_user_roles = ('yes' ===
|
115 |
-
$do_check_by_product_cats = ('yes' ===
|
116 |
-
$do_check_by_product_tags = ('yes' ===
|
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,
|
128 |
for ($i = 1; $i <= $total_number; $i++) {
|
129 |
if ($do_check_by_users) {
|
130 |
-
$users =
|
131 |
if (!empty($users) && in_array($product_author_id, $users)) {
|
132 |
-
return
|
133 |
}
|
134 |
}
|
135 |
if ($do_check_by_user_roles) {
|
136 |
-
$user_roles =
|
137 |
if (!empty($user_roles) && wcj_is_user_role($user_roles, $product_author_id)) {
|
138 |
-
return
|
139 |
}
|
140 |
}
|
141 |
if ($do_check_by_product_cats) {
|
142 |
-
$product_cats =
|
143 |
if (!empty($_product_cats) && !empty($product_cats)) {
|
144 |
$_intersect = array_intersect($_product_cats, $product_cats);
|
145 |
if (!empty($_intersect)) {
|
146 |
-
return
|
147 |
}
|
148 |
}
|
149 |
}
|
150 |
if ($do_check_by_product_tags) {
|
151 |
-
$product_tags =
|
152 |
if (!empty($_product_tags) && !empty($product_tags)) {
|
153 |
$_intersect = array_intersect($_product_tags, $product_tags);
|
154 |
if (!empty($_intersect)) {
|
155 |
-
return
|
156 |
}
|
157 |
}
|
158 |
}
|
@@ -165,16 +165,16 @@ if (!class_exists('WCJ_Currency_Per_Product')) :
|
|
165 |
/**
|
166 |
* validate_on_add_to_cart.
|
167 |
*
|
168 |
-
* @version
|
169 |
* @since 2.7.0
|
170 |
*/
|
171 |
function validate_on_add_to_cart($passed, $product_id)
|
172 |
{
|
173 |
-
$cart_checkout_behaviour =
|
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(
|
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 =
|
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(
|
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
|
250 |
* @since 2.5.2
|
251 |
*/
|
252 |
function get_currency_exchange_rate($currency_code)
|
253 |
{
|
254 |
-
$total_number = apply_filters('booster_option', 1,
|
255 |
for ($i = 1; $i <= $total_number; $i++) {
|
256 |
-
if ($currency_code ===
|
257 |
-
return (0 != ($rate =
|
258 |
}
|
259 |
}
|
260 |
return 1;
|
@@ -295,20 +295,20 @@ if (!class_exists('WCJ_Currency_Per_Product')) :
|
|
295 |
/**
|
296 |
* change_price.
|
297 |
*
|
298 |
-
* @version
|
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 =
|
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 =
|
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 =
|
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
|
435 |
* @since 2.7.0
|
436 |
*/
|
437 |
function get_cart_checkout_currency()
|
438 |
{
|
439 |
-
$cart_checkout_behaviour =
|
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.
|
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.
|
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.
|
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
|
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.
|
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
|
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.
|
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(
|
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 |
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.
|
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.
|
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.
|
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
|