Booster for WooCommerce - Version 5.6.3

Version Description

31/08/2022 =

  • NEW FEATURE - PDF INVOICING & PACKING SLIPS - PDF Invoicing - Added a new shortcode for refund total with inc./ex. tax. [wcj_order_item_total_refunded excl_tax="yes" ]
  • FIXED - SHIPPING & ORDERS - Order Custom Statuses - Fixed custom status not displaying in order bulk action selection.
  • FIXED - PRODUCTS - Product Tabs - Fixed issue with HTML tags.
  • FIXED - PRODUCTS - Product Tabs - Fixed issue in some cases Jquery syntax was being shown.
  • FIXED - PRODUCTS - Product Visibility by User Role - Fixed allowed user role selection on the single product edit page.
  • FIXED - PRODUCTS - Product Visibility by Country - Fixed allowed country selection on the single product edit page.
  • FIXED - PRODUCTS - Cost of Goods - Fixed bugs related to reporting, profit, and other bugs.
  • FIXED - CART & CHECKOUT - Mini Cart Custom Info - Fixed Custom Info is not shown on the Wocommarce mini cart.
  • FIXED - BUTTON & PRICE LABELS - Free Price Labels - Fixed free price Label does not show when the product price is '0'.
  • FIXED - CART & CHECKOUT - Checkout Files Upload - Escaped the html content from the "File Upload Fields" value.
  • FIXED - EMAILS & MISC. - Modules By User Roles - Fixed Enable/disable modules by user roles.
  • FIXED - PRODUCTS - Product Addons - Fixed add-ons were not being saved with per product add-on.
  • FIXED - PRODUCTS - Product Input Fields - Fixed issue with input type radio for per product input field.
  • FIXED - PDF INVOICING & PACKING SLIPS - PDF Invoicing - Fixed Invoice report tool was showing an error while choosing the CSV option.
  • FIXED - EMAILS & MISC. - My Account - Added restriction for Cross browser scripting.
  • FIXED - PHP Warning: Undefined Variable "$exclude_item_subtotal" in /includes/shortcodes/class-wcj-shortcodes-orders.php ...
  • WooCommerce 6.8.2 tested
  • WordPress 6.0.1 Tested
Download this release

Release Info

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

Code changes from version 5.6.2 to 5.6.3

includes/class-wcj-checkout-files-upload.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Checkout Files Upload
4
  *
5
- * @version 5.6.2
6
  * @since 2.4.5
7
  * @author Pluggabl LLC.
8
  * @package Booster_For_WooCommerce/includes
@@ -61,6 +61,9 @@ if ( ! class_exists( 'WCJ_Checkout_Files_Upload' ) ) :
61
  add_action( 'woocommerce_order_details_after_order_table', array( $this, 'add_files_to_order_display' ), PHP_INT_MAX );
62
  add_action( 'woocommerce_email_after_order_table', array( $this, 'add_files_to_order_display' ), PHP_INT_MAX );
63
  add_filter( 'woocommerce_email_attachments', array( $this, 'add_files_to_email_attachments' ), PHP_INT_MAX, 3 );
 
 
 
64
  }
65
  }
66
 
@@ -173,7 +176,7 @@ if ( ! class_exists( 'WCJ_Checkout_Files_Upload' ) ) :
173
  }
174
  }
175
  if ( '' !== $html ) {
176
- echo $template_before . $html . $template_after; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
177
  }
178
  }
179
 
@@ -305,7 +308,7 @@ if ( ! class_exists( 'WCJ_Checkout_Files_Upload' ) ) :
305
  $html .= '<p><a style="color:#a00;" href="' . add_query_arg( 'wcj_download_checkout_file_admin_delete_all', $order_id ) . '"' . wcj_get_js_confirmation() . '>' .
306
  __( 'Delete all files', 'woocommerce-jetpack' ) . '</a></p>';
307
  }
308
- echo $html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
309
  }
310
 
311
  /**
@@ -340,6 +343,10 @@ if ( ! class_exists( 'WCJ_Checkout_Files_Upload' ) ) :
340
  * @param string $posted defines the posted.
341
  */
342
  public function add_files_to_order( $order_id, $posted ) {
 
 
 
 
343
  $upload_dir = wcj_get_wcj_uploads_dir( 'checkout_files_upload' );
344
  if ( ! file_exists( $upload_dir ) ) {
345
  mkdir( $upload_dir, 0755, true );
@@ -353,9 +360,9 @@ if ( ! class_exists( 'WCJ_Checkout_Files_Upload' ) ) :
353
  $download_file_name = $order_id . '_' . $i . '.' . $ext;
354
  $file_path = $upload_dir . '/' . $download_file_name;
355
  $tmp_file_name = $session_data['tmp_name'];
356
- $file_data = file_get_contents( $tmp_file_name ); // phpcs:ignore
357
  if ( ! $this->is_extension_blocked( $ext ) ) { // should already be validated earlier, but just in case...
358
- file_put_contents( $file_path, $file_data ); // phpcs:ignore
359
  }
360
  unlink( $tmp_file_name );
361
  wcj_session_set( 'wcj_checkout_files_upload_' . $i, null );
@@ -420,9 +427,13 @@ if ( ! class_exists( 'WCJ_Checkout_Files_Upload' ) ) :
420
  wcj_session_maybe_start();
421
  $admin_email = wcj_get_option( 'admin_email' );
422
  $admin_email_subject = __( 'Booster for WooCommerce: Checkout Files Upload: %action%', 'woocommerce-jetpack' );
423
- /* translators: %s: search term */
424
- $admin_email_content = __( 'Order ID: %order_id%; File name: %file_name%', 'woocommerce-jetpack' ); // phpcs:ignore
425
- $total_number = apply_filters( 'booster_option', 1, wcj_get_option( 'wcj_checkout_files_upload_total_number', 1 ) );
 
 
 
 
426
  // Remove file.
427
  for ( $i = 1; $i <= $total_number; $i++ ) {
428
  if ( isset( $_POST[ 'wcj_remove_checkout_file_' . $i ] ) ) {
@@ -597,14 +608,7 @@ if ( ! class_exists( 'WCJ_Checkout_Files_Upload' ) ) :
597
  if ( isset( $_GET['post'] ) && isset( $_GET['wcj_checkout_file_number'] ) ) {
598
  $file_name = get_post_meta( sanitize_text_field( wp_unslash( $_GET['post'] ) ), '_wcj_checkout_files_upload_real_name_' . sanitize_text_field( wp_unslash( $_GET['wcj_checkout_file_number'] ) ), true );
599
  if ( wcj_is_user_role( 'administrator' ) || is_shop_manager() ) {
600
- header( 'Expires: 0' );
601
- header( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' );
602
- header( 'Cache-Control: private', false );
603
- header( 'Content-disposition: attachment; filename=' . $file_name );
604
- header( 'Content-Transfer-Encoding: binary' );
605
- header( 'Content-Length: ' . filesize( $tmp_file_name ) );
606
- readfile( $tmp_file_name ); // phpcs:ignore
607
- exit();
608
  }
609
  }
610
  }
@@ -652,14 +656,7 @@ if ( ! class_exists( 'WCJ_Checkout_Files_Upload' ) ) :
652
  $tmp_file_name = $session_data['tmp_name'];
653
  $file_name = $session_data['name'];
654
  }
655
- header( 'Expires: 0' );
656
- header( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' );
657
- header( 'Cache-Control: private', false );
658
- header( 'Content-disposition: attachment; filename=' . $file_name );
659
- header( 'Content-Transfer-Encoding: binary' );
660
- header( 'Content-Length: ' . filesize( $tmp_file_name ) );
661
- readfile( $tmp_file_name );// phpcs:ignore
662
- exit();
663
  }
664
  }
665
 
@@ -837,23 +834,24 @@ if ( ! class_exists( 'WCJ_Checkout_Files_Upload' ) ) :
837
  /**
838
  * Maybe_get_image.
839
  *
840
- * @version 5.6.2
841
  * @since 3.7.0
842
  * @param string $link defines the link.
843
  * @param int $i defines the value of i.
844
  * @param int $order_id defines the order_id.
845
  */
846
  public function maybe_get_image( $link, $i, $order_id = 0 ) {
 
847
  if ( 'yes' === wcj_get_option( 'wcj_checkout_files_upload_form_template_field_show_images', 'no' ) ) {
848
  $order = wc_get_order( $order_id );
849
- if ( 0 > $order_id && isset( $_GET['key'] ) && ( $order ) && $order->key_is_valid( sanitize_text_field( wp_unslash( $_GET['key'] ) ) ) ) { // phpcs:ignore WordPress.Security.NonceVerification
850
  $order_file_name = get_post_meta( $order_id, '_wcj_checkout_files_upload_' . $i, true );
851
  $tmp_file_name = wcj_get_wcj_uploads_dir( 'checkout_files_upload' ) . '/' . $order_file_name;
852
  } else {
853
  $session_data = wcj_session_get( 'wcj_checkout_files_upload_' . $i );
854
  $tmp_file_name = $session_data['tmp_name'];
855
  }
856
- if ( @is_array( getimagesize( $tmp_file_name ) ) ) {// phpcs:ignore
857
  return '<img style="' . wcj_get_option( 'wcj_checkout_files_upload_form_template_field_image_style', 'width:64px;' ) . '" src="' . $link . '"> ';
858
  }
859
  }
@@ -953,7 +951,7 @@ if ( ! class_exists( 'WCJ_Checkout_Files_Upload' ) ) :
953
  }
954
  }
955
  }
956
- echo $html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
957
  }
958
 
959
  /**
@@ -992,7 +990,19 @@ if ( ! class_exists( 'WCJ_Checkout_Files_Upload' ) ) :
992
  $html .= $this->get_the_form( $i, $file_name );
993
  }
994
  }
995
- echo $html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
 
 
 
 
 
 
 
 
 
 
 
 
996
  }
997
 
998
  }
2
  /**
3
  * Booster for WooCommerce - Module - Checkout Files Upload
4
  *
5
+ * @version 5.6.3
6
  * @since 2.4.5
7
  * @author Pluggabl LLC.
8
  * @package Booster_For_WooCommerce/includes
61
  add_action( 'woocommerce_order_details_after_order_table', array( $this, 'add_files_to_order_display' ), PHP_INT_MAX );
62
  add_action( 'woocommerce_email_after_order_table', array( $this, 'add_files_to_order_display' ), PHP_INT_MAX );
63
  add_filter( 'woocommerce_email_attachments', array( $this, 'add_files_to_email_attachments' ), PHP_INT_MAX, 3 );
64
+
65
+ add_filter( 'woocommerce_get_return_url', array( $this, 'wcj_customize_get_return_url' ), PHP_INT_MAX, 2 );
66
+ add_filter( 'woocommerce_get_checkout_order_received_url', array( $this, 'wcj_customize_get_return_url' ), PHP_INT_MAX, 2 );
67
  }
68
  }
69
 
176
  }
177
  }
178
  if ( '' !== $html ) {
179
+ echo wp_kses_post( $template_before . $html . $template_after );
180
  }
181
  }
182
 
308
  $html .= '<p><a style="color:#a00;" href="' . add_query_arg( 'wcj_download_checkout_file_admin_delete_all', $order_id ) . '"' . wcj_get_js_confirmation() . '>' .
309
  __( 'Delete all files', 'woocommerce-jetpack' ) . '</a></p>';
310
  }
311
+ echo wp_kses_post( $html );
312
  }
313
 
314
  /**
343
  * @param string $posted defines the posted.
344
  */
345
  public function add_files_to_order( $order_id, $posted ) {
346
+ require_once ABSPATH . '/wp-admin/includes/file.php';
347
+ global $wp_filesystem;
348
+ WP_Filesystem();
349
+
350
  $upload_dir = wcj_get_wcj_uploads_dir( 'checkout_files_upload' );
351
  if ( ! file_exists( $upload_dir ) ) {
352
  mkdir( $upload_dir, 0755, true );
360
  $download_file_name = $order_id . '_' . $i . '.' . $ext;
361
  $file_path = $upload_dir . '/' . $download_file_name;
362
  $tmp_file_name = $session_data['tmp_name'];
363
+ $file_data = $wp_filesystem->get_contents( $tmp_file_name );
364
  if ( ! $this->is_extension_blocked( $ext ) ) { // should already be validated earlier, but just in case...
365
+ $wp_filesystem->put_contents( $file_path, $file_data, FS_CHMOD_FILE );
366
  }
367
  unlink( $tmp_file_name );
368
  wcj_session_set( 'wcj_checkout_files_upload_' . $i, null );
427
  wcj_session_maybe_start();
428
  $admin_email = wcj_get_option( 'admin_email' );
429
  $admin_email_subject = __( 'Booster for WooCommerce: Checkout Files Upload: %action%', 'woocommerce-jetpack' );
430
+ $admin_email_content = sprintf(
431
+ /* translators: %s: search term */
432
+ __( 'Order ID: %1$s; File name: %2$s', 'woocommerce-jetpack' ),
433
+ '%order_id%',
434
+ '%file_name%',
435
+ );
436
+ $total_number = apply_filters( 'booster_option', 1, wcj_get_option( 'wcj_checkout_files_upload_total_number', 1 ) );
437
  // Remove file.
438
  for ( $i = 1; $i <= $total_number; $i++ ) {
439
  if ( isset( $_POST[ 'wcj_remove_checkout_file_' . $i ] ) ) {
608
  if ( isset( $_GET['post'] ) && isset( $_GET['wcj_checkout_file_number'] ) ) {
609
  $file_name = get_post_meta( sanitize_text_field( wp_unslash( $_GET['post'] ) ), '_wcj_checkout_files_upload_real_name_' . sanitize_text_field( wp_unslash( $_GET['wcj_checkout_file_number'] ) ), true );
610
  if ( wcj_is_user_role( 'administrator' ) || is_shop_manager() ) {
611
+ WC_Download_Handler::download_file_force( $tmp_file_name, $file_name );
 
 
 
 
 
 
 
612
  }
613
  }
614
  }
656
  $tmp_file_name = $session_data['tmp_name'];
657
  $file_name = $session_data['name'];
658
  }
659
+ WC_Download_Handler::download_file_force( $tmp_file_name, $file_name );
 
 
 
 
 
 
 
660
  }
661
  }
662
 
834
  /**
835
  * Maybe_get_image.
836
  *
837
+ * @version 5.6.3
838
  * @since 3.7.0
839
  * @param string $link defines the link.
840
  * @param int $i defines the value of i.
841
  * @param int $order_id defines the order_id.
842
  */
843
  public function maybe_get_image( $link, $i, $order_id = 0 ) {
844
+ $wpnonce = isset( $_REQUEST['wcj-checkout-files-upload-nonce'] ) ? wp_verify_nonce( sanitize_key( isset( $_REQUEST['wcj-checkout-files-upload-nonce'] ) ? $_REQUEST['wcj-checkout-files-upload-nonce'] : '' ), 'wcj-checkout-files-upload-nonce' ) : false;
845
  if ( 'yes' === wcj_get_option( 'wcj_checkout_files_upload_form_template_field_show_images', 'no' ) ) {
846
  $order = wc_get_order( $order_id );
847
+ if ( $wpnonce && 0 !== $order_id && isset( $_GET['key'] ) && ( $order ) && $order->key_is_valid( sanitize_text_field( wp_unslash( $_GET['key'] ) ) ) ) {
848
  $order_file_name = get_post_meta( $order_id, '_wcj_checkout_files_upload_' . $i, true );
849
  $tmp_file_name = wcj_get_wcj_uploads_dir( 'checkout_files_upload' ) . '/' . $order_file_name;
850
  } else {
851
  $session_data = wcj_session_get( 'wcj_checkout_files_upload_' . $i );
852
  $tmp_file_name = $session_data['tmp_name'];
853
  }
854
+ if ( file_exists( $tmp_file_name ) && is_array( getimagesize( $tmp_file_name ) ) ) {
855
  return '<img style="' . wcj_get_option( 'wcj_checkout_files_upload_form_template_field_image_style', 'width:64px;' ) . '" src="' . $link . '"> ';
856
  }
857
  }
951
  }
952
  }
953
  }
954
+ echo wp_kses_post( $html );
955
  }
956
 
957
  /**
990
  $html .= $this->get_the_form( $i, $file_name );
991
  }
992
  }
993
+ echo wp_kses_post( $html );
994
+ }
995
+
996
+ /**
997
+ * Wcj_customize_get_return_url.
998
+ *
999
+ * @version 5.6.2
1000
+ * @since 5.6.2
1001
+ * @param string $return_url return url for the order.
1002
+ * @param object $order check the is_direct_call.
1003
+ */
1004
+ public function wcj_customize_get_return_url( $return_url, $order ) {
1005
+ return add_query_arg( 'wcj-checkout-files-upload-nonce', wp_create_nonce( 'wcj-checkout-files-upload-nonce' ), $return_url );
1006
  }
1007
 
1008
  }
includes/class-wcj-free-price.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Free Price
4
  *
5
- * @version 5.2.0
6
  * @since 2.5.9
7
  * @author Pluggabl LLC.
8
  * @package Booster_For_WooCommerce/includes
@@ -87,14 +87,14 @@ if ( ! class_exists( 'WCJ_Free_Price' ) ) :
87
  /**
88
  * Maybe_modify_price
89
  *
90
- * @version 2.7.0
91
  * @since 2.7.0
92
  * @param int $price defines the price.
93
  * @param string | array $_product defines the _product.
94
  */
95
  public function maybe_modify_price( $price, $_product ) {
96
  if ( '' !== $price ) {
97
- if ( 0 === $_product->get_price() ) {
98
  if ( $_product->is_type( 'grouped' ) ) {
99
  return ( $this->are_all_prices_free( $_product, 'grouped' ) ) ? $this->modify_free_price_grouped( $price, $_product ) : $price;
100
  } elseif ( $_product->is_type( 'variable' ) ) {
2
  /**
3
  * Booster for WooCommerce - Module - Free Price
4
  *
5
+ * @version 5.6.3
6
  * @since 2.5.9
7
  * @author Pluggabl LLC.
8
  * @package Booster_For_WooCommerce/includes
87
  /**
88
  * Maybe_modify_price
89
  *
90
+ * @version 5.6.3
91
  * @since 2.7.0
92
  * @param int $price defines the price.
93
  * @param string | array $_product defines the _product.
94
  */
95
  public function maybe_modify_price( $price, $_product ) {
96
  if ( '' !== $price ) {
97
+ if ( '0' === $_product->get_price() ) {
98
  if ( $_product->is_type( 'grouped' ) ) {
99
  return ( $this->are_all_prices_free( $_product, 'grouped' ) ) ? $this->modify_free_price_grouped( $price, $_product ) : $price;
100
  } elseif ( $_product->is_type( 'variable' ) ) {
includes/class-wcj-mini-cart.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Mini Cart Custom Info
4
  *
5
- * @version 5.2.0
6
  * @since 2.2.0
7
  * @author Pluggabl LLC.
8
  * @package Booster_For_WooCommerce/includes
@@ -47,7 +47,7 @@ if ( ! class_exists( 'WCJ_Mini_Cart' ) ) :
47
  /**
48
  * Add_mini_cart_custom_info.
49
  *
50
- * @version 2.4.6
51
  */
52
  public function add_mini_cart_custom_info() {
53
  $current_filter = current_filter();
@@ -57,7 +57,7 @@ if ( ! class_exists( 'WCJ_Mini_Cart' ) ) :
57
  if (
58
  '' !== wcj_get_option( 'wcj_mini_cart_custom_info_content_' . $i ) &&
59
  wcj_get_option( 'wcj_mini_cart_custom_info_hook_' . $i, 'woocommerce_after_mini_cart' ) === $current_filter &&
60
- wcj_get_option( 'wcj_mini_cart_custom_info_priority_' . $i, 10 ) === $current_filter_priority
61
  ) {
62
  echo do_shortcode( wcj_get_option( 'wcj_mini_cart_custom_info_content_' . $i ) );
63
  }
2
  /**
3
  * Booster for WooCommerce - Module - Mini Cart Custom Info
4
  *
5
+ * @version 5.6.3
6
  * @since 2.2.0
7
  * @author Pluggabl LLC.
8
  * @package Booster_For_WooCommerce/includes
47
  /**
48
  * Add_mini_cart_custom_info.
49
  *
50
+ * @version 5.6.3
51
  */
52
  public function add_mini_cart_custom_info() {
53
  $current_filter = current_filter();
57
  if (
58
  '' !== wcj_get_option( 'wcj_mini_cart_custom_info_content_' . $i ) &&
59
  wcj_get_option( 'wcj_mini_cart_custom_info_hook_' . $i, 'woocommerce_after_mini_cart' ) === $current_filter &&
60
+ wcj_get_option( 'wcj_mini_cart_custom_info_priority_' . $i, 10 ) === (string) $current_filter_priority
61
  ) {
62
  echo do_shortcode( wcj_get_option( 'wcj_mini_cart_custom_info_content_' . $i ) );
63
  }
includes/class-wcj-my-account.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - My Account
4
  *
5
- * @version 5.6.2
6
  * @since 2.9.0
7
  * @author Pluggabl LLC.
8
  * @package Booster_For_WooCommerce/includes
@@ -560,13 +560,15 @@ if ( ! class_exists( 'WCJ_My_Account' ) ) :
560
  /**
561
  * Process_woocommerce_mark_order_status.
562
  *
563
- * @version 5.6.2
564
  * @since 2.9.0
565
  */
566
  public function process_woocommerce_mark_order_status() {
 
567
  if (
568
  isset( $_GET['wcj_action'] ) && 'wcj_woocommerce_mark_order_status' === $_GET['wcj_action'] &&
569
  isset( $_GET['status'] ) &&
 
570
  isset( $_GET['order_id'] ) &&
571
  isset( $_GET['_wpnonce'] )
572
  ) {
2
  /**
3
  * Booster for WooCommerce - Module - My Account
4
  *
5
+ * @version 5.6.3
6
  * @since 2.9.0
7
  * @author Pluggabl LLC.
8
  * @package Booster_For_WooCommerce/includes
560
  /**
561
  * Process_woocommerce_mark_order_status.
562
  *
563
+ * @version 5.6.3
564
  * @since 2.9.0
565
  */
566
  public function process_woocommerce_mark_order_status() {
567
+ $statuses_to_allow = wcj_get_option( 'wcj_my_account_add_order_status_actions', '' );
568
  if (
569
  isset( $_GET['wcj_action'] ) && 'wcj_woocommerce_mark_order_status' === $_GET['wcj_action'] &&
570
  isset( $_GET['status'] ) &&
571
+ in_array( $_GET['status'], $statuses_to_allow, true ) &&
572
  isset( $_GET['order_id'] ) &&
573
  isset( $_GET['_wpnonce'] )
574
  ) {
includes/class-wcj-order-custom-statuses.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Order Custom Statuses
4
  *
5
- * @version 5.6.2
6
  * @since 2.2.0
7
  * @author Pluggabl LLC.
8
  * @package Booster_For_WooCommerce/includes
@@ -463,7 +463,7 @@ if ( ! class_exists( 'WCJ_Order_Custom_Statuses' ) ) :
463
  *
464
  * Using Javascript until WordPress core fixes: http://core.trac.wordpress.org/ticket/16031
465
  *
466
- * @version 5.6.2
467
  * @since 2.2.7
468
  */
469
  public function bulk_admin_footer() {
@@ -477,18 +477,8 @@ if ( ! class_exists( 'WCJ_Order_Custom_Statuses' ) ) :
477
  }
478
  ?>
479
  jQuery(function() {
480
- jQuery('<option>').val('mark_<?php echo wp_kses_post( $key ); ?>').text('
481
- <?php
482
- echo wp_kses_post( 'Mark', 'woocommerce-jetpack' ) . ' ' .
483
- wp_kses_post( $order_status );
484
- ?>
485
- ').appendTo('select[name="action"]');
486
- jQuery('<option>').val('mark_<?php echo wp_kses_post( $key ); ?>').text('
487
- <?php
488
- echo wp_kses_post( 'Mark', 'woocommerce-jetpack' ) . ' ' .
489
- wp_kses_post( $order_status );
490
- ?>
491
- ').appendTo('select[name="action2"]');
492
  });
493
  <?php
494
  }
2
  /**
3
  * Booster for WooCommerce - Module - Order Custom Statuses
4
  *
5
+ * @version 5.6.3
6
  * @since 2.2.0
7
  * @author Pluggabl LLC.
8
  * @package Booster_For_WooCommerce/includes
463
  *
464
  * Using Javascript until WordPress core fixes: http://core.trac.wordpress.org/ticket/16031
465
  *
466
+ * @version 5.6.3
467
  * @since 2.2.7
468
  */
469
  public function bulk_admin_footer() {
477
  }
478
  ?>
479
  jQuery(function() {
480
+ jQuery('<option>').val('mark_<?php echo wp_kses_post( $key ); ?>').text('<?php echo wp_kses_post( 'Mark', 'woocommerce-jetpack' ) . ' ' . wp_kses_post( $order_status ); ?>').appendTo('select[name="action"]');
481
+ jQuery('<option>').val('mark_<?php echo wp_kses_post( $key ); ?>').text('<?php echo wp_kses_post( 'Mark', 'woocommerce-jetpack' ) . ' ' . wp_kses_post( $order_status ); ?>').appendTo('select[name="action2"]');
 
 
 
 
 
 
 
 
 
 
482
  });
483
  <?php
484
  }
includes/class-wcj-price-by-user-role.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Price based on User Role
4
  *
5
- * @version 5.6.2
6
  * @since 2.5.0
7
  * @author Pluggabl LLC.
8
  * @todo Fix "Make Empty Price" option for variable products
@@ -228,13 +228,13 @@ if ( ! class_exists( 'WCJ_Price_By_User_Role' ) ) :
228
  /**
229
  * Add_notice_query_var.
230
  *
231
- * @version 5.5.9
232
  * @since 2.5.0
233
  * @param string $location defines the location.
234
  */
235
  public function add_notice_query_var( $location ) {
236
  remove_filter( 'redirect_post_location', array( $this, 'add_notice_query_var' ), 99 );
237
- return add_query_arg( array( 'wcj_product_price_by_user_role_admin_notice' => true ), $location );
238
  }
239
 
240
  /**
2
  /**
3
  * Booster for WooCommerce - Module - Price based on User Role
4
  *
5
+ * @version 5.6.3
6
  * @since 2.5.0
7
  * @author Pluggabl LLC.
8
  * @todo Fix "Make Empty Price" option for variable products
228
  /**
229
  * Add_notice_query_var.
230
  *
231
+ * @version 5.6.3
232
  * @since 2.5.0
233
  * @param string $location defines the location.
234
  */
235
  public function add_notice_query_var( $location ) {
236
  remove_filter( 'redirect_post_location', array( $this, 'add_notice_query_var' ), 99 );
237
+ return esc_url_raw( add_query_arg( array( 'wcj_product_price_by_user_role_admin_notice' => true ), $location ) );
238
  }
239
 
240
  /**
includes/class-wcj-product-bookings.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Bookings
4
  *
5
- * @version 5.6.2
6
  * @since 2.5.0
7
  * @author Pluggabl LLC.
8
  * @package Booster_For_WooCommerce/includes
@@ -511,13 +511,13 @@ if ( ! class_exists( 'WCJ_Product_Bookings' ) ) :
511
  /**
512
  * Add_notice_query_var.
513
  *
514
- * @version 5.5.9
515
  * @since 2.5.0
516
  * @param string $location defines the location.
517
  */
518
  public function add_notice_query_var( $location ) {
519
  remove_filter( 'redirect_post_location', array( $this, 'add_notice_query_var' ), 99 );
520
- return add_query_arg( array( 'wcj_product_bookings_admin_notice' => true ), $location );
521
  }
522
 
523
  /**
2
  /**
3
  * Booster for WooCommerce - Module - Bookings
4
  *
5
+ * @version 5.6.3
6
  * @since 2.5.0
7
  * @author Pluggabl LLC.
8
  * @package Booster_For_WooCommerce/includes
511
  /**
512
  * Add_notice_query_var.
513
  *
514
+ * @version 5.6.3
515
  * @since 2.5.0
516
  * @param string $location defines the location.
517
  */
518
  public function add_notice_query_var( $location ) {
519
  remove_filter( 'redirect_post_location', array( $this, 'add_notice_query_var' ), 99 );
520
+ return esc_url_raw( add_query_arg( array( 'wcj_product_bookings_admin_notice' => true ), $location ) );
521
  }
522
 
523
  /**
includes/class-wcj-product-open-pricing.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Product Open Pricing
4
  *
5
- * @version 5.6.2
6
  * @since 2.4.8
7
  * @author Pluggabl LLC.
8
  * @package Booster_For_WooCommerce/includes
@@ -221,13 +221,13 @@ if ( ! class_exists( 'WCJ_Product_Open_Pricing' ) ) :
221
  /**
222
  * Add_notice_query_var.
223
  *
224
- * @version 5.5.9
225
  * @since 2.4.8
226
  * @param string $location defines the location.
227
  */
228
  public function add_notice_query_var( $location ) {
229
  remove_filter( 'redirect_post_location', array( $this, 'add_notice_query_var' ), 99 );
230
- return esc_url( add_query_arg( array( 'wcj_product_open_price_admin_notice' => true ), $location ) );
231
  }
232
 
233
  /**
2
  /**
3
  * Booster for WooCommerce - Module - Product Open Pricing
4
  *
5
+ * @version 5.6.3
6
  * @since 2.4.8
7
  * @author Pluggabl LLC.
8
  * @package Booster_For_WooCommerce/includes
221
  /**
222
  * Add_notice_query_var.
223
  *
224
+ * @version 5.6.3
225
  * @since 2.4.8
226
  * @param string $location defines the location.
227
  */
228
  public function add_notice_query_var( $location ) {
229
  remove_filter( 'redirect_post_location', array( $this, 'add_notice_query_var' ), 99 );
230
+ return esc_url_raw( add_query_arg( array( 'wcj_product_open_price_admin_notice' => true ), $location ) );
231
  }
232
 
233
  /**
includes/class-wcj-product-price-by-formula.php CHANGED
@@ -433,7 +433,7 @@ if ( ! class_exists( 'WCJ_Product_Price_By_Formula' ) ) :
433
  */
434
  public function add_notice_query_var( $location ) {
435
  remove_filter( 'redirect_post_location', array( $this, 'add_notice_query_var' ), 99 );
436
- return add_query_arg( array( 'wcj_product_price_by_formula_admin_notice' => true ), $location );
437
  }
438
 
439
  /**
433
  */
434
  public function add_notice_query_var( $location ) {
435
  remove_filter( 'redirect_post_location', array( $this, 'add_notice_query_var' ), 99 );
436
+ return esc_url_raw( add_query_arg( array( 'wcj_product_price_by_formula_admin_notice' => true ), $location ) );
437
  }
438
 
439
  /**
includes/class-wcj-product-tabs.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Product Tabs
4
  *
5
- * @version 5.6.2
6
  * @author Pluggabl LLC.
7
  * @package Booster_For_WooCommerce/includes
8
  */
@@ -567,7 +567,7 @@ if ( ! class_exists( 'WCJ_Product_Tabs' ) ) :
567
  /**
568
  * Save_custom_tabs_meta_box.
569
  *
570
- * @version 5.6.2
571
  * @todo rewrite as standard `WCJ_Module` function
572
  * @param int $post_id defines the post_id.
573
  * @param string | array $post defines the post.
@@ -597,7 +597,7 @@ if ( ! class_exists( 'WCJ_Product_Tabs' ) ) :
597
  if ( $this->is_local_tab_visible( $i, $post_id ) ) {
598
  foreach ( $option_names as $option_name ) {
599
  $sanitized_option_name = $wpnonce && isset( $_POST[ $option_name . $i ] ) ? sanitize_text_field( wp_unslash( $_POST[ $option_name . $i ] ) ) : '';
600
- update_post_meta( $post_id, '_' . $option_name . $i, sanitize_text_field( wp_unslash( $sanitized_option_name ) ) );
601
  }
602
  }
603
  }
2
  /**
3
  * Booster for WooCommerce - Module - Product Tabs
4
  *
5
+ * @version 5.6.3
6
  * @author Pluggabl LLC.
7
  * @package Booster_For_WooCommerce/includes
8
  */
567
  /**
568
  * Save_custom_tabs_meta_box.
569
  *
570
+ * @version 5.6.3
571
  * @todo rewrite as standard `WCJ_Module` function
572
  * @param int $post_id defines the post_id.
573
  * @param string | array $post defines the post.
597
  if ( $this->is_local_tab_visible( $i, $post_id ) ) {
598
  foreach ( $option_names as $option_name ) {
599
  $sanitized_option_name = $wpnonce && isset( $_POST[ $option_name . $i ] ) ? sanitize_text_field( wp_unslash( $_POST[ $option_name . $i ] ) ) : '';
600
+ update_post_meta( $post_id, '_' . $option_name . $i, wp_kses_post( wp_unslash( $_POST[ $option_name . $i ] ) ) );
601
  }
602
  }
603
  }
includes/class-wcj-purchase-data.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Cost of Goods (formerly Product Cost Price)
4
  *
5
- * @version 5.6.2
6
  * @since 2.2.0
7
  * @author Pluggabl LLC.
8
  * @package Booster_For_WooCommerce/includes
@@ -248,7 +248,7 @@ if ( ! class_exists( 'WCJ_Purchase_Data' ) ) :
248
  $product_id = ( isset( $item['variation_id'] ) && 0 !== $item['variation_id'] && 'no' === wcj_get_option( 'wcj_purchase_data_variable_as_simple_enabled', 'no' )
249
  ? $item['variation_id'] : $item['product_id'] );
250
  $purchase_price = wc_get_product_purchase_price( $product_id );
251
- if ( 0 !== ( $purchase_price ) && '0' !== ( $purchase_price ) ) {
252
  if ( 'profit' === $column ) {
253
  $_order_prices_include_tax = ( WCJ_IS_WC_VERSION_BELOW_3 ? $the_order->prices_include_tax : $the_order->get_prices_include_tax() );
254
  $line_total = ( $_order_prices_include_tax ) ? ( $item['line_total'] + $item['line_tax'] ) : $item['line_total'];
@@ -262,7 +262,7 @@ if ( ! class_exists( 'WCJ_Purchase_Data' ) ) :
262
  $total += $value;
263
  }
264
  }
265
- if ( 0 > $total ) {
266
  if ( ! $is_forecasted ) {
267
  echo '<span style="color:green;">';
268
  }
@@ -277,7 +277,7 @@ if ( ! class_exists( 'WCJ_Purchase_Data' ) ) :
277
  /**
278
  * Create_meta_box.
279
  *
280
- * @version 5.6.2
281
  * @since 2.4.5
282
  * @todo (maybe) min_profit
283
  */
@@ -300,10 +300,13 @@ if ( ! class_exists( 'WCJ_Purchase_Data' ) ) :
300
  }
301
  foreach ( $products as $product_id => $desc ) {
302
  $purchase_price = wc_get_product_purchase_price( $product_id );
303
- if ( 0 > $purchase_price ) {
 
 
 
304
  $the_product = wc_get_product( $product_id );
305
  $the_price = $the_product->get_price();
306
- if ( 0 > $the_price ) {
307
  $the_profit = $the_price - $purchase_price;
308
  $table_data = array();
309
  $table_data[] = array( __( 'Selling', 'woocommerce-jetpack' ), wc_price( $the_price ) );
2
  /**
3
  * Booster for WooCommerce - Module - Cost of Goods (formerly Product Cost Price)
4
  *
5
+ * @version 5.6.3
6
  * @since 2.2.0
7
  * @author Pluggabl LLC.
8
  * @package Booster_For_WooCommerce/includes
248
  $product_id = ( isset( $item['variation_id'] ) && 0 !== $item['variation_id'] && 'no' === wcj_get_option( 'wcj_purchase_data_variable_as_simple_enabled', 'no' )
249
  ? $item['variation_id'] : $item['product_id'] );
250
  $purchase_price = wc_get_product_purchase_price( $product_id );
251
+ if ( (float) 0 !== $purchase_price ) {
252
  if ( 'profit' === $column ) {
253
  $_order_prices_include_tax = ( WCJ_IS_WC_VERSION_BELOW_3 ? $the_order->prices_include_tax : $the_order->get_prices_include_tax() );
254
  $line_total = ( $_order_prices_include_tax ) ? ( $item['line_total'] + $item['line_tax'] ) : $item['line_total'];
262
  $total += $value;
263
  }
264
  }
265
+ if ( 0 !== $total ) {
266
  if ( ! $is_forecasted ) {
267
  echo '<span style="color:green;">';
268
  }
277
  /**
278
  * Create_meta_box.
279
  *
280
+ * @version 5.6.3
281
  * @since 2.4.5
282
  * @todo (maybe) min_profit
283
  */
300
  }
301
  foreach ( $products as $product_id => $desc ) {
302
  $purchase_price = wc_get_product_purchase_price( $product_id );
303
+ if ( $purchase_price <= 0 ) {
304
+ $purchase_price = 0;
305
+ }
306
+ if ( 0 !== $purchase_price && '0' !== $purchase_price && '' !== $purchase_price ) {
307
  $the_product = wc_get_product( $product_id );
308
  $the_price = $the_product->get_price();
309
+ if ( 0 !== $the_price && '0' !== $the_price && '' !== $the_price ) {
310
  $the_profit = $the_price - $purchase_price;
311
  $table_data = array();
312
  $table_data[] = array( __( 'Selling', 'woocommerce-jetpack' ), wc_price( $the_price ) );
includes/classes/class-wcj-module.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce Module
4
  *
5
- * @version 5.6.2
6
  * @since 2.2.0
7
  * @author Pluggabl LLC.
8
  * @todo [dev] maybe should be `abstract` ?
@@ -358,13 +358,13 @@ if ( ! class_exists( 'WCJ_Module' ) ) :
358
  /**
359
  * Validate_value_add_notice_query_var.
360
  *
361
- * @version 5.5.9
362
  * @since 2.9.1
363
  * @param String $location Get location.
364
  */
365
  public function validate_value_add_notice_query_var( $location ) {
366
  remove_filter( 'redirect_post_location', array( $this, 'validate_value_add_notice_query_var' ), 99 );
367
- return add_query_arg( array( 'wcj_' . $this->id . '_meta_box_admin_notice' => true ), $location );
368
  }
369
 
370
  /**
@@ -493,13 +493,13 @@ if ( ! class_exists( 'WCJ_Module' ) ) :
493
  /**
494
  * Add_notice_query_var.
495
  *
496
- * @version 5.5.9
497
  * @since 2.5.3
498
  * @param String $location Get location.
499
  */
500
  public function add_notice_query_var( $location ) {
501
  remove_filter( 'redirect_post_location', array( $this, 'add_notice_query_var' ), 99 );
502
- return esc_url( add_query_arg( array( 'wcj_' . $this->id . '_admin_notice' => true ), $location ) );
503
  }
504
 
505
  /**
@@ -635,12 +635,18 @@ if ( ! class_exists( 'WCJ_Module' ) ) :
635
  setup_postdata( $_post );
636
  // Save options.
637
  foreach ( $this->get_meta_box_options() as $option ) {
638
- if ( ! $option || '' === $option || 'title' === $option['type'] ) {
639
  continue;
640
  }
641
  $is_enabled = ( isset( $option['enabled'] ) && 'no' === $option['enabled'] ) ? false : true;
642
  if ( $is_enabled ) {
643
- $option_value = ( isset( $_POST[ $option['name'] ] ) ) ? sanitize_text_field( wp_unslash( $_POST[ $option['name'] ] ) ) : ( isset( $option['default'] ) ? $option['default'] : '' ); // phpcs:ignore WordPress.Security.NonceVerification
 
 
 
 
 
 
644
  $the_post_id = ( isset( $option['product_id'] ) ) ? $option['product_id'] : $post_id;
645
  $the_meta_name = ( isset( $option['meta_name'] ) ) ? $option['meta_name'] : '_' . $option['name'];
646
  if ( isset( $option['convert'] ) && 'from_date_to_timestamp' === $option['convert'] ) {
2
  /**
3
  * Booster for WooCommerce Module
4
  *
5
+ * @version 5.6.3
6
  * @since 2.2.0
7
  * @author Pluggabl LLC.
8
  * @todo [dev] maybe should be `abstract` ?
358
  /**
359
  * Validate_value_add_notice_query_var.
360
  *
361
+ * @version 5.6.3
362
  * @since 2.9.1
363
  * @param String $location Get location.
364
  */
365
  public function validate_value_add_notice_query_var( $location ) {
366
  remove_filter( 'redirect_post_location', array( $this, 'validate_value_add_notice_query_var' ), 99 );
367
+ return esc_url_raw( add_query_arg( array( 'wcj_' . $this->id . '_meta_box_admin_notice' => true ), $location ) );
368
  }
369
 
370
  /**
493
  /**
494
  * Add_notice_query_var.
495
  *
496
+ * @version 5.6.3
497
  * @since 2.5.3
498
  * @param String $location Get location.
499
  */
500
  public function add_notice_query_var( $location ) {
501
  remove_filter( 'redirect_post_location', array( $this, 'add_notice_query_var' ), 99 );
502
+ return esc_url_raw( add_query_arg( array( 'wcj_' . $this->id . '_admin_notice' => true ), $location ) );
503
  }
504
 
505
  /**
635
  setup_postdata( $_post );
636
  // Save options.
637
  foreach ( $this->get_meta_box_options() as $option ) {
638
+ if ( 'title' === $option['type'] ) {
639
  continue;
640
  }
641
  $is_enabled = ( isset( $option['enabled'] ) && 'no' === $option['enabled'] ) ? false : true;
642
  if ( $is_enabled ) {
643
+ $option_value = '';
644
+ $wpnonce = wp_verify_nonce( wp_unslash( isset( $_POST['woocommerce_meta_nonce'] ) ? sanitize_text_field( wp_unslash( $_POST['woocommerce_meta_nonce'] ) ) : '' ), 'woocommerce_save_data' );
645
+ if ( $wpnonce && isset( $_POST[ $option['name'] ] ) ) {
646
+ $option_value = is_array( $_POST[ $option['name'] ] ) ? array_map( 'sanitize_text_field', wp_unslash( $_POST[ $option['name'] ] ) ) : sanitize_text_field( wp_unslash( $_POST[ $option['name'] ] ) );
647
+ } elseif ( isset( $option['default'] ) ) {
648
+ $option_value = $option['default'];
649
+ }
650
  $the_post_id = ( isset( $option['product_id'] ) ) ? $option['product_id'] : $post_id;
651
  $the_meta_name = ( isset( $option['meta_name'] ) ) ? $option['meta_name'] : '_' . $option['name'];
652
  if ( isset( $option['convert'] ) && 'from_date_to_timestamp' === $option['convert'] ) {
includes/functions/wcj-functions-general.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Functions - General
4
  *
5
- * @version 5.6.2
6
  * @author Pluggabl LLC.
7
  * @todo add `wcj_add_actions()` and `wcj_add_filters()`
8
  * @package Booster_For_WooCommerce/functions
@@ -1035,7 +1035,7 @@ if ( ! function_exists( 'wcj_add_allowed_html' ) ) {
1035
  /**
1036
  * Wcj_add_allowed_html.
1037
  *
1038
- * @version 5.6.2
1039
  * @since 5.6.0
1040
  * @param array $allowed_html to get default allowed html.
1041
  * @param string $context to get default context.
@@ -1054,6 +1054,8 @@ if ( ! function_exists( 'wcj_add_allowed_html' ) ) {
1054
  'dateformat' => true,
1055
  'mindate' => true,
1056
  'maxdate' => true,
 
 
1057
  'firstday' => true,
1058
  'display' => true,
1059
  'required' => true,
@@ -1071,6 +1073,8 @@ if ( ! function_exists( 'wcj_add_allowed_html' ) ) {
1071
  'currentday_time_limit' => true,
1072
  'data-blocked_dates_format' => true,
1073
  'onclick' => true,
 
 
1074
  ),
1075
  'textarea' => array(
1076
  'name' => true,
@@ -1133,10 +1137,23 @@ if ( ! function_exists( 'wcj_add_allowed_html' ) ) {
1133
  'style' => true,
1134
  'class' => true,
1135
  'disabled' => true,
 
 
1136
  ),
1137
  'style' => array(
1138
  'type' => true,
1139
  ),
 
 
 
 
 
 
 
 
 
 
 
1140
  'a' => array(
1141
  'onclick' => true,
1142
  'onblur' => true,
@@ -1145,12 +1162,14 @@ if ( ! function_exists( 'wcj_add_allowed_html' ) ) {
1145
  'target' => true,
1146
  'wcj-copy-data' => true,
1147
  ),
1148
- 'button' => array(
1149
- 'wcj_data' => true,
1150
  ),
 
 
1151
  );
1152
  $allowed_merged_html = array_merge_recursive( $allowed_html, $allowed_extra_html );
1153
  return $allowed_merged_html;
1154
  }
1155
- add_filter( 'wp_kses_allowed_html', 'wcj_add_allowed_html', 10, 2 );
1156
  }
2
  /**
3
  * Booster for WooCommerce - Functions - General
4
  *
5
+ * @version 5.6.3
6
  * @author Pluggabl LLC.
7
  * @todo add `wcj_add_actions()` and `wcj_add_filters()`
8
  * @package Booster_For_WooCommerce/functions
1035
  /**
1036
  * Wcj_add_allowed_html.
1037
  *
1038
+ * @version 5.6.3
1039
  * @since 5.6.0
1040
  * @param array $allowed_html to get default allowed html.
1041
  * @param string $context to get default context.
1054
  'dateformat' => true,
1055
  'mindate' => true,
1056
  'maxdate' => true,
1057
+ 'excludemonths' => true,
1058
+ 'excludedays' => true,
1059
  'firstday' => true,
1060
  'display' => true,
1061
  'required' => true,
1073
  'currentday_time_limit' => true,
1074
  'data-blocked_dates_format' => true,
1075
  'onclick' => true,
1076
+ 'accept' => true,
1077
+ 'data-*' => true,
1078
  ),
1079
  'textarea' => array(
1080
  'name' => true,
1137
  'style' => true,
1138
  'class' => true,
1139
  'disabled' => true,
1140
+ 'onclick' => true,
1141
+ 'wcj_data' => true,
1142
  ),
1143
  'style' => array(
1144
  'type' => true,
1145
  ),
1146
+ 'script' => array(
1147
+ 'type' => true,
1148
+ 'async' => true,
1149
+ 'crossorigin' => true,
1150
+ 'defer' => true,
1151
+ 'integrity' => true,
1152
+ 'nomodule' => true,
1153
+ 'referrerpolicy' => true,
1154
+ 'src' => true,
1155
+ 'type' => true,
1156
+ ),
1157
  'a' => array(
1158
  'onclick' => true,
1159
  'onblur' => true,
1162
  'target' => true,
1163
  'wcj-copy-data' => true,
1164
  ),
1165
+ 'details' => array(
1166
+ 'open' => true,
1167
  ),
1168
+ 'bdi' => true,
1169
+ 'em' => true,
1170
  );
1171
  $allowed_merged_html = array_merge_recursive( $allowed_html, $allowed_extra_html );
1172
  return $allowed_merged_html;
1173
  }
1174
+ add_filter( 'wp_kses_allowed_html', 'wcj_add_allowed_html', PHP_INT_MAX, 2 );
1175
  }
includes/input-fields/class-wcj-product-input-fields-core.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Product Input Fields - Core
4
  *
5
- * @version 5.6.2
6
  * @author Pluggabl LLC.
7
  * @package Booster_For_WooCommerce/includes
8
  */
@@ -155,7 +155,7 @@ if ( ! class_exists( 'WCJ_Product_Input_Fields_Core' ) ) :
155
  /**
156
  * Save product input fields on Product Edit.
157
  *
158
- * @version 5.6.2
159
  * @param int $post_id Get post ID.
160
  * @param obj | Array $post Get post.
161
  */
@@ -177,7 +177,7 @@ if ( ! class_exists( 'WCJ_Product_Input_Fields_Core' ) ) :
177
  foreach ( $options as $option ) {
178
  $option_name = str_replace( 'wcj_product_input_fields_', '', $option['id'] . $i );
179
  if ( isset( $_POST[ $option['id'] . $i ] ) ) {
180
- $values[ $option_name ] = isset( $_POST[ $option['id'] . $i ] ) ? sanitize_text_field( wp_unslash( $_POST[ $option['id'] . $i ] ) ) : '';
181
  } elseif ( 'checkbox' === $option['type'] ) {
182
  $values[ $option_name ] = 'off';
183
  }
2
  /**
3
  * Booster for WooCommerce - Product Input Fields - Core
4
  *
5
+ * @version 5.6.3
6
  * @author Pluggabl LLC.
7
  * @package Booster_For_WooCommerce/includes
8
  */
155
  /**
156
  * Save product input fields on Product Edit.
157
  *
158
+ * @version 5.6.3
159
  * @param int $post_id Get post ID.
160
  * @param obj | Array $post Get post.
161
  */
177
  foreach ( $options as $option ) {
178
  $option_name = str_replace( 'wcj_product_input_fields_', '', $option['id'] . $i );
179
  if ( isset( $_POST[ $option['id'] . $i ] ) ) {
180
+ $values[ $option_name ] = isset( $_POST[ $option['id'] . $i ] ) ? wp_kses_post( wp_unslash( $_POST[ $option['id'] . $i ] ) ) : '';
181
  } elseif ( 'checkbox' === $option['type'] ) {
182
  $values[ $option_name ] = 'off';
183
  }
includes/mini-plugin/wcj-mini-plugin.php CHANGED
@@ -2,6 +2,90 @@
2
  /**
3
  * Booster for WooCommerce - Mini plugin customizations
4
  *
 
5
  * @author Pluggabl LLC.
6
  * @package Booster_For_WooCommerce/mini-plugin
7
  */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  /**
3
  * Booster for WooCommerce - Mini plugin customizations
4
  *
5
+ * @version 5.6.3
6
  * @author Pluggabl LLC.
7
  * @package Booster_For_WooCommerce/mini-plugin
8
  */
9
+
10
+ add_filter(
11
+ 'wcj_modules',
12
+ function ( $modules_cats ) {
13
+ $modules_cats = array_filter(
14
+ $modules_cats,
15
+ function ( $item ) {
16
+ return in_array( $item, array( 'emails_and_misc', 'pdf_invoicing', 'shipping_and_orders', 'payment_gateways', 'cart_and_checkout', 'products', 'labels', 'prices_and_currencies', 'labels', 'pdf_invoicing', 'dashboard' ), true );
17
+ },
18
+ ARRAY_FILTER_USE_KEY
19
+ );
20
+ $all_cat_ids1 = array( 'price_by_country', 'multicurrency', 'multicurrency_base_price', 'currency_per_product', 'currency', 'currency_external_products', 'bulk_price_converter', 'wholesale_price', 'product_open_pricing', 'offer_price', 'price_by_user_role', 'product_price_by_formula', 'global_discount', 'currency_exchange_rates', 'price_formats', 'price_labels', 'call_for_price', 'free_price', 'add_to_cart', 'more_button_labels', 'product_listings', 'tax_display', 'admin_products_list', 'products_per_page', 'product_tabs', 'product_custom_info', 'related_products', 'cross_sells', 'upsells', 'sorting', 'sku', 'stock', 'product_input_fields', 'product_add_to_cart', 'add_to_cart_button_visibility', 'purchase_data', 'product_bookings', 'crowdfunding', 'product_addons', 'product_images', 'sale_flash', 'product_by_country', 'product_by_user_role', 'product_custom_visibility', 'product_by_time', 'product_by_date', 'product_by_user', 'products_xml', 'product_bulk_meta_editor', 'product_msrp', 'product_extra_fees', 'cart', 'cart_customization', 'empty_cart', 'mini_cart', 'url_coupons', 'coupon_code_generator', 'coupon_by_user_role', 'checkout_core_fields', 'checkout_custom_fields', 'checkout_files_upload', 'checkout_custom_info', 'checkout_customization', 'checkout_fees', 'eu_vat_number', 'frequently_bought_together', 'one_page_checkout', 'payment_gateways', 'payment_gateways_icons', 'payment_gateways_fees', 'payment_gateways_per_category', 'payment_gateways_currency', 'payment_gateways_by_currency', 'payment_gateways_min_max', 'payment_gateways_by_country', 'payment_gateways_by_user_role', 'payment_gateways_by_shipping', 'shipping', 'shipping_options', 'shipping_icons', 'shipping_description', 'shipping_time', 'left_to_free_shipping', 'shipping_calculator', 'shipping_by_user_role', 'shipping_by_products', 'shipping_by_cities', 'shipping_by_time', 'shipping_by_order_amount', 'shipping_by_order_qty', 'address_formats', 'orders', 'admin_orders_list', 'order_min_amount', 'order_numbers', 'order_custom_statuses', 'order_quantities', 'max_products_per_user', 'pdf_invoicing', 'pdf_invoicing_numbering', 'pdf_invoicing_templates', 'pdf_invoicing_header', 'pdf_invoicing_footer', 'pdf_invoicing_styling', 'pdf_invoicing_page', 'pdf_invoicing_emails', 'pdf_invoicing_paid_stamp', 'pdf_invoicing_display', 'pdf_invoicing_advanced', 'pdf_invoicing_extra_columns', 'general', 'breadcrumbs', 'admin_bar', 'export', 'my_account', 'old_slugs', 'reports', 'admin_tools', 'debug_tools', 'emails', 'email_options', 'emails_verification', 'wpml', 'custom_css', 'custom_js', 'custom_php', 'track_users', 'modules_by_user_roles', 'template_editor', 'product_info' );
21
+ $modules_all_cats = $modules_cats;
22
+
23
+ // ----- Modules By User Roles Module Options Start -----
24
+ if ( ! function_exists( 'wp_get_current_user' ) ) {
25
+ require_once ABSPATH . 'wp-includes/pluggable.php';
26
+ }
27
+ $current_user = wp_get_current_user();
28
+
29
+ $wcj_modules_by_user_roles_data['role'] = ( isset( $current_user->roles ) && is_array( $current_user->roles ) && ! empty( $current_user->roles ) ?
30
+ reset( $current_user->roles ) : 'guest' );
31
+ $wcj_modules_by_user_roles_data['role'] = ( '' !== $wcj_modules_by_user_roles_data['role'] ? $wcj_modules_by_user_roles_data['role'] : 'guest' );
32
+ $wcj_modules_by_user_roles_data['modules_incl'] = wcj_get_option( 'wcj_modules_by_user_roles_incl_' . $wcj_modules_by_user_roles_data['role'], '' );
33
+ $wcj_modules_by_user_roles_data['modules_excl'] = wcj_get_option( 'wcj_modules_by_user_roles_excl_' . $wcj_modules_by_user_roles_data['role'], '' );
34
+
35
+ if ( empty( $wcj_modules_by_user_roles_data['modules_incl'] ) && empty( $wcj_modules_by_user_roles_data['modules_excl'] ) ) {
36
+ $all_cat_ids = $all_cat_ids1;
37
+ } elseif ( ! empty( $wcj_modules_by_user_roles_data['modules_incl'] ) && empty( $wcj_modules_by_user_roles_data['modules_excl'] ) ) {
38
+
39
+ $all_cat_ids = $wcj_modules_by_user_roles_data['modules_incl'];
40
+
41
+ } elseif ( empty( $wcj_modules_by_user_roles_data['modules_incl'] ) && ! empty( $wcj_modules_by_user_roles_data['modules_excl'] ) ) {
42
+ $array = $all_cat_ids1;
43
+
44
+ $value = $wcj_modules_by_user_roles_data['modules_excl'];
45
+ $array = array_diff( $array, $value );
46
+
47
+ $all_cat_ids = $array;
48
+ } elseif ( ! empty( $wcj_modules_by_user_roles_data['modules_incl'] ) && ! empty( $wcj_modules_by_user_roles_data['modules_excl'] ) ) {
49
+
50
+ $all_cat_ids = $wcj_modules_by_user_roles_data['modules_incl'];
51
+ }
52
+ // ----- Modules By User Roles Module Options End -----
53
+
54
+ if ( count( $all_cat_ids ) <= 1 && '' === $all_cat_ids[0] ) {
55
+ foreach ( $modules_cats as $key => $value ) {
56
+ $all_cat_ids = array_merge( $value['all_cat_ids'], $all_cat_ids );
57
+ }
58
+ } else {
59
+ foreach ( $modules_all_cats as $key => $modules_cat ) {
60
+ foreach ( $modules_cat as $cat_keys => $value ) {
61
+ if ( 'dashboard' === $key || 'all_cat_ids' !== $cat_keys ) {
62
+ continue;
63
+ }
64
+ $modules_cats[ $key ]['all_cat_ids'] = array();
65
+ foreach ( $value as $module ) {
66
+
67
+ if ( in_array( $module, $all_cat_ids, true ) ) {
68
+ array_push( $modules_cats[ $key ]['all_cat_ids'], $module );
69
+ }
70
+ }
71
+ }
72
+ }
73
+ }
74
+ add_filter(
75
+ 'wcj_modules_loaded',
76
+ function( $modules ) use ( $all_cat_ids ) {
77
+ $modules = array_filter(
78
+ $modules,
79
+ function ( $item ) use ( $all_cat_ids ) {
80
+ return in_array( $item, $all_cat_ids, true );
81
+ },
82
+ ARRAY_FILTER_USE_KEY
83
+ );
84
+ return $modules;
85
+ },
86
+ 10,
87
+ 2
88
+ );
89
+ return $modules_cats;
90
+ }
91
+ );
includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - PDF Invoicing - Report Tool
4
  *
5
- * @version 5.6.2
6
  * @since 2.2.1
7
  * @author Pluggabl LLC.
8
  * @package Booster_For_WooCommerce/includes
@@ -353,7 +353,7 @@ if ( ! class_exists( 'WCJ_PDF_Invoicing_Report_Tool' ) ) :
353
  /**
354
  * Invoices Report Data function.
355
  *
356
- * @version 5.6.2
357
  * @since 2.5.7
358
  * @param int | string $year Get year.
359
  * @param int | string $month Get month.
@@ -431,8 +431,18 @@ if ( ! class_exists( 'WCJ_PDF_Invoicing_Report_Tool' ) ) :
431
  $order_cart_total_excl_tax += $item->get_total();
432
  }
433
  $order_shipping_total_excl_tax = $the_order->get_shipping_total();
434
- $order_cart_tax_percent = ( 0 === $order_cart_total_excl_tax ? 0 : $order_cart_tax / $order_cart_total_excl_tax );
435
- $order_shipping_tax_percent = ( 0 === $order_shipping_total_excl_tax ? 0 : $order_shipping_tax / $order_shipping_total_excl_tax );
 
 
 
 
 
 
 
 
 
 
436
 
437
  $row = array();
438
  foreach ( $columns as $column ) {
2
  /**
3
  * Booster for WooCommerce - PDF Invoicing - Report Tool
4
  *
5
+ * @version 5.6.3
6
  * @since 2.2.1
7
  * @author Pluggabl LLC.
8
  * @package Booster_For_WooCommerce/includes
353
  /**
354
  * Invoices Report Data function.
355
  *
356
+ * @version 5.6.3
357
  * @since 2.5.7
358
  * @param int | string $year Get year.
359
  * @param int | string $month Get month.
431
  $order_cart_total_excl_tax += $item->get_total();
432
  }
433
  $order_shipping_total_excl_tax = $the_order->get_shipping_total();
434
+
435
+ if ( 0 === $order_cart_total_excl_tax || '0' === $order_cart_tax ) {
436
+ $order_cart_tax_percent = 0;
437
+ } else {
438
+ $order_cart_tax_percent = ( 0 === $order_cart_total_excl_tax ? 0 : $order_cart_tax / $order_cart_total_excl_tax );
439
+ }
440
+
441
+ if ( 0 === $order_shipping_total_excl_tax || '0' === $order_shipping_tax ) {
442
+ $order_shipping_tax_percent = 0;
443
+ } else {
444
+ $order_shipping_tax_percent = ( 0 === $order_shipping_total_excl_tax ? 0 : $order_shipping_tax / $order_shipping_total_excl_tax );
445
+ }
446
 
447
  $row = array();
448
  foreach ( $columns as $column ) {
includes/shortcodes/class-wcj-orders-shortcodes.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Shortcodes - Orders
4
  *
5
- * @version 5.6.2
6
  * @author Pluggabl LLC.
7
  * @package Booster_For_WooCommerce/shortcodes
8
  */
@@ -20,7 +20,7 @@ if ( ! class_exists( 'WCJ_Orders_Shortcodes' ) ) :
20
  /**
21
  * Constructor.
22
  *
23
- * @version 5.4.0
24
  */
25
  public function __construct() {
26
 
@@ -93,6 +93,7 @@ if ( ! class_exists( 'WCJ_Orders_Shortcodes' ) ) :
93
  'wcj_order_total_length',
94
  'wcj_order_total_shipping_refunded',
95
  'wcj_order_total_refunded',
 
96
  'wcj_order_total_tax',
97
  'wcj_order_total_tax_after_refund',
98
  'wcj_order_total_tax_without_html_custom',
@@ -480,7 +481,7 @@ if ( ! class_exists( 'WCJ_Orders_Shortcodes' ) ) :
480
  /**
481
  * Wcj_order_total_refunded.
482
  *
483
- * @version 5.6.2
484
  * @since 2.5.3
485
  * @param array $atts The user defined shortcode attributes.
486
  */
@@ -489,6 +490,26 @@ if ( ! class_exists( 'WCJ_Orders_Shortcodes' ) ) :
489
  return $this->wcj_price_shortcode( $refund_total, $atts );
490
  }
491
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
492
  /**
493
  * Wcj_order_customer_meta.
494
  *
@@ -1489,8 +1510,9 @@ if ( ! class_exists( 'WCJ_Orders_Shortcodes' ) ) :
1489
  $the_subtotal += $this->the_order->get_line_subtotal( $item, false, true );
1490
  }
1491
  } else {
1492
- $the_items = $this->the_order->get_items();
1493
- $exclude_item_total = 0;
 
1494
 
1495
  foreach ( $the_items as $item_id => $item ) {
1496
  $the_product = $item->get_product( $item );
2
  /**
3
  * Booster for WooCommerce - Shortcodes - Orders
4
  *
5
+ * @version 5.6.3
6
  * @author Pluggabl LLC.
7
  * @package Booster_For_WooCommerce/shortcodes
8
  */
20
  /**
21
  * Constructor.
22
  *
23
+ * @version 5.6.3
24
  */
25
  public function __construct() {
26
 
93
  'wcj_order_total_length',
94
  'wcj_order_total_shipping_refunded',
95
  'wcj_order_total_refunded',
96
+ 'wcj_order_item_total_refunded',
97
  'wcj_order_total_tax',
98
  'wcj_order_total_tax_after_refund',
99
  'wcj_order_total_tax_without_html_custom',
481
  /**
482
  * Wcj_order_total_refunded.
483
  *
484
+ * @version 5.6.3
485
  * @since 2.5.3
486
  * @param array $atts The user defined shortcode attributes.
487
  */
490
  return $this->wcj_price_shortcode( $refund_total, $atts );
491
  }
492
 
493
+ /**
494
+ * Wcj_order_item_total_refunded.
495
+ *
496
+ * @version 5.6.3
497
+ * @since 2.5.3
498
+ * @param array $atts The user defined shortcode attributes.
499
+ */
500
+ public function wcj_order_item_total_refunded( $atts ) {
501
+ $refund_item = $this->the_order->get_refunds();
502
+ foreach ( $refund_item as $_refund ) {
503
+
504
+ foreach ( $_refund->get_items() as $_item ) {
505
+ $refund_total = $_item->get_total();
506
+ $refund_total_tax = $_item->get_total_tax();
507
+ }
508
+ }
509
+ $refund_result = ( $atts['excl_tax'] ) ? abs( $refund_total ) : abs( $refund_total ) + abs( $refund_total_tax );
510
+ return $this->wcj_price_shortcode( $refund_result, $atts );
511
+ }
512
+
513
  /**
514
  * Wcj_order_customer_meta.
515
  *
1510
  $the_subtotal += $this->the_order->get_line_subtotal( $item, false, true );
1511
  }
1512
  } else {
1513
+ $the_items = $this->the_order->get_items();
1514
+ $exclude_item_total = 0;
1515
+ $exclude_item_subtotal = 0;
1516
 
1517
  foreach ( $the_items as $item_id => $item ) {
1518
  $the_product = $item->get_product( $item );
langs/woocommerce-jetpack.pot CHANGED
@@ -10,7 +10,7 @@ msgstr ""
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13
- "X-Generator: Poedit 2.3\n"
14
  "X-Poedit-Basepath: ..\n"
15
  "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;"
16
  "_n_noop:1,2;_c;_nc:4c,1,2;_x:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;_ex:1,2c;"
@@ -36,14 +36,14 @@ msgstr ""
36
  #: includes/admin/class-wc-settings-jetpack.php:33
37
  #: includes/admin/class-wc-settings-jetpack.php:400
38
  #: includes/class-wcj-admin-bar.php:299
39
- #: includes/class-wcj-checkout-files-upload.php:270
40
  #: includes/class-wcj-eu-vat-number.php:179
41
  #: includes/class-wcj-max-products-per-user.php:217
42
  #: includes/class-wcj-orders.php:133 includes/class-wcj-orders.php:170
43
  #: includes/class-wcj-payment-gateways.php:102
44
  #: includes/class-wcj-track-users.php:174 includes/class-wcj-track-users.php:265
45
- #: includes/classes/class-wcj-module.php:672
46
- #: includes/classes/class-wcj-module.php:881
47
  #: includes/settings/wcj-settings-price-by-country.php:259
48
  msgid "Booster"
49
  msgstr ""
@@ -206,7 +206,7 @@ msgstr ""
206
  #: includes/admin/class-wc-settings-jetpack.php:631
207
  #: includes/admin/class-wc-settings-jetpack.php:1084
208
  #: includes/class-wcj-admin-bar.php:188
209
- #: includes/classes/class-wcj-module.php:1029
210
  msgid "Documentation"
211
  msgstr ""
212
 
@@ -993,7 +993,7 @@ msgstr ""
993
 
994
  #: includes/class-wcj-admin-bar.php:267 includes/class-wcj-admin-bar.php:311
995
  #: includes/class-wcj-admin-bar.php:659
996
- #: includes/classes/class-wcj-module.php:852
997
  #: includes/settings/wcj-settings-wpml.php:97
998
  msgid "Tools"
999
  msgstr ""
@@ -1574,87 +1574,88 @@ msgstr ""
1574
  msgid "Let customers upload files on (or after) the checkout."
1575
  msgstr ""
1576
 
1577
- #: includes/class-wcj-checkout-files-upload.php:81
1578
- #: includes/class-wcj-checkout-files-upload.php:86
1579
  #: includes/settings/wcj-settings-checkout-files-upload.php:397
1580
  #: includes/settings/wcj-settings-checkout-files-upload.php:446
1581
  #, php-format
1582
  msgid "File: %s"
1583
  msgstr ""
1584
 
1585
- #: includes/class-wcj-checkout-files-upload.php:213
1586
  #: includes/settings/wcj-settings-checkout-files-upload.php:126
1587
  msgid "File is required!"
1588
  msgstr ""
1589
 
1590
- #: includes/class-wcj-checkout-files-upload.php:232
1591
- #: includes/class-wcj-checkout-files-upload.php:247
1592
- #: includes/class-wcj-checkout-files-upload.php:508
1593
- #: includes/class-wcj-checkout-files-upload.php:524
1594
  #: includes/settings/wcj-settings-checkout-files-upload.php:120
1595
  #, php-format
1596
  msgid "Wrong file type: \"%s\"!"
1597
  msgstr ""
1598
 
1599
- #: includes/class-wcj-checkout-files-upload.php:270
1600
  msgid "Uploaded Files"
1601
  msgstr ""
1602
 
1603
- #: includes/class-wcj-checkout-files-upload.php:303
1604
  msgid "No files uploaded."
1605
  msgstr ""
1606
 
1607
- #: includes/class-wcj-checkout-files-upload.php:306
1608
  msgid "Delete all files"
1609
  msgstr ""
1610
 
1611
- #: includes/class-wcj-checkout-files-upload.php:393
1612
  #: includes/settings/wcj-settings-checkout-files-upload.php:260
1613
  msgid "Files were successfully removed."
1614
  msgstr ""
1615
 
1616
- #: includes/class-wcj-checkout-files-upload.php:422
1617
  msgid "Booster for WooCommerce: Checkout Files Upload: %action%"
1618
  msgstr ""
1619
 
1620
- #: includes/class-wcj-checkout-files-upload.php:424
1621
- msgid "Order ID: %order_id%; File name: %file_name%"
 
1622
  msgstr ""
1623
 
1624
- #: includes/class-wcj-checkout-files-upload.php:441
1625
- #: includes/class-wcj-checkout-files-upload.php:478
1626
  #: includes/settings/wcj-settings-checkout-files-upload.php:150
1627
  #, php-format
1628
  msgid "File \"%s\" was successfully removed."
1629
  msgstr ""
1630
 
1631
- #: includes/class-wcj-checkout-files-upload.php:453
1632
  msgid "File Removed"
1633
  msgstr ""
1634
 
1635
- #: includes/class-wcj-checkout-files-upload.php:544
1636
  #: includes/settings/wcj-settings-checkout-files-upload.php:135
1637
  #, php-format
1638
  msgid "File \"%s\" was successfully uploaded."
1639
  msgstr ""
1640
 
1641
- #: includes/class-wcj-checkout-files-upload.php:559
1642
  msgid "File Uploaded"
1643
  msgstr ""
1644
 
1645
- #: includes/class-wcj-checkout-files-upload.php:587
1646
  #: includes/settings/wcj-settings-checkout-files-upload.php:141
1647
  msgid "Please select file to upload!"
1648
  msgstr ""
1649
 
1650
- #: includes/class-wcj-checkout-files-upload.php:898
1651
- #: includes/class-wcj-checkout-files-upload.php:899
1652
  #: includes/settings/wcj-settings-checkout-files-upload.php:105
1653
  msgid "Upload"
1654
  msgstr ""
1655
 
1656
- #: includes/class-wcj-checkout-files-upload.php:914
1657
- #: includes/class-wcj-checkout-files-upload.php:915
1658
  #: includes/settings/wcj-settings-checkout-files-upload.php:111
1659
  #: includes/settings/wcj-settings-price-by-user-role.php:81
1660
  #: includes/settings/wcj-settings-price-by-user-role.php:89
@@ -3982,7 +3983,7 @@ msgstr ""
3982
  #: includes/class-wcj-product-bulk-meta-editor.php:315
3983
  #: includes/class-wcj-product-by-user.php:287
3984
  #: includes/class-wcj-purchase-data.php:125
3985
- #: includes/classes/class-wcj-module.php:994
3986
  #: includes/functions/wcj-functions-general.php:208
3987
  #: includes/functions/wcj-functions-html.php:131
3988
  #: includes/reports/class-wcj-reports-monthly-sales.php:393
@@ -5011,7 +5012,7 @@ msgstr ""
5011
 
5012
  #: includes/class-wcj-purchase-data.php:158
5013
  #: includes/class-wcj-purchase-data.php:223
5014
- #: includes/class-wcj-purchase-data.php:312
5015
  #: includes/functions/wcj-functions-reports.php:31
5016
  #: includes/settings/wcj-settings-purchase-data.php:152
5017
  #: includes/settings/wcj-settings-purchase-data.php:180
@@ -5024,15 +5025,15 @@ msgstr ""
5024
  msgid "Purchase Cost"
5025
  msgstr ""
5026
 
5027
- #: includes/class-wcj-purchase-data.php:309
5028
  msgid "Selling"
5029
  msgstr ""
5030
 
5031
- #: includes/class-wcj-purchase-data.php:310
5032
  msgid "Buying"
5033
  msgstr ""
5034
 
5035
- #: includes/class-wcj-purchase-data.php:326
5036
  msgid "Report"
5037
  msgstr ""
5038
 
@@ -5832,30 +5833,30 @@ msgid ""
5832
  "\" products."
5833
  msgstr ""
5834
 
5835
- #: includes/classes/class-wcj-module.php:766
5836
  #, php-format
5837
  msgid "Selected: %s."
5838
  msgstr ""
5839
 
5840
- #: includes/classes/class-wcj-module.php:837
5841
  msgid "Back to Module Settings"
5842
  msgstr ""
5843
 
5844
- #: includes/classes/class-wcj-module.php:858
5845
  #: includes/settings/wcj-settings-wpml.php:102
5846
  msgid "Module Tools"
5847
  msgstr ""
5848
 
5849
- #: includes/classes/class-wcj-module.php:936
5850
  #: includes/settings/wcj-settings-checkout-core-fields.php:82
5851
  msgid "enabled"
5852
  msgstr ""
5853
 
5854
- #: includes/classes/class-wcj-module.php:937
5855
  msgid "disabled"
5856
  msgstr ""
5857
 
5858
- #: includes/classes/class-wcj-module.php:945
5859
  #: includes/settings/wcj-settings-product-tabs.php:181
5860
  #: includes/settings/wcj-settings-product-tabs.php:196
5861
  #: includes/settings/wcj-settings-product-tabs.php:211
@@ -5863,27 +5864,27 @@ msgstr ""
5863
  msgid "Deprecated"
5864
  msgstr ""
5865
 
5866
- #: includes/classes/class-wcj-module.php:984
5867
  msgid "Reset Settings"
5868
  msgstr ""
5869
 
5870
- #: includes/classes/class-wcj-module.php:990
5871
  msgid "Reset Module to Default Settings"
5872
  msgstr ""
5873
 
5874
- #: includes/classes/class-wcj-module.php:991
5875
  msgid "Reset Submodule to Default Settings"
5876
  msgstr ""
5877
 
5878
- #: includes/classes/class-wcj-module.php:995
5879
  msgid "Reset settings"
5880
  msgstr ""
5881
 
5882
- #: includes/classes/class-wcj-module.php:1033
5883
  msgid "Module Options"
5884
  msgstr ""
5885
 
5886
- #: includes/classes/class-wcj-module.php:1040
5887
  msgid "Enable Module"
5888
  msgstr ""
5889
 
@@ -20604,7 +20605,7 @@ msgstr ""
20604
  msgid "Attribute \"name\" is required!"
20605
  msgstr ""
20606
 
20607
- #: includes/shortcodes/class-wcj-orders-shortcodes.php:394
20608
  #, php-format
20609
  msgid "Refund #%1$s - %2$s"
20610
  msgstr ""
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13
+ "X-Generator: Poedit 2.0.6\n"
14
  "X-Poedit-Basepath: ..\n"
15
  "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;"
16
  "_n_noop:1,2;_c;_nc:4c,1,2;_x:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;_ex:1,2c;"
36
  #: includes/admin/class-wc-settings-jetpack.php:33
37
  #: includes/admin/class-wc-settings-jetpack.php:400
38
  #: includes/class-wcj-admin-bar.php:299
39
+ #: includes/class-wcj-checkout-files-upload.php:273
40
  #: includes/class-wcj-eu-vat-number.php:179
41
  #: includes/class-wcj-max-products-per-user.php:217
42
  #: includes/class-wcj-orders.php:133 includes/class-wcj-orders.php:170
43
  #: includes/class-wcj-payment-gateways.php:102
44
  #: includes/class-wcj-track-users.php:174 includes/class-wcj-track-users.php:265
45
+ #: includes/classes/class-wcj-module.php:678
46
+ #: includes/classes/class-wcj-module.php:887
47
  #: includes/settings/wcj-settings-price-by-country.php:259
48
  msgid "Booster"
49
  msgstr ""
206
  #: includes/admin/class-wc-settings-jetpack.php:631
207
  #: includes/admin/class-wc-settings-jetpack.php:1084
208
  #: includes/class-wcj-admin-bar.php:188
209
+ #: includes/classes/class-wcj-module.php:1035
210
  msgid "Documentation"
211
  msgstr ""
212
 
993
 
994
  #: includes/class-wcj-admin-bar.php:267 includes/class-wcj-admin-bar.php:311
995
  #: includes/class-wcj-admin-bar.php:659
996
+ #: includes/classes/class-wcj-module.php:858
997
  #: includes/settings/wcj-settings-wpml.php:97
998
  msgid "Tools"
999
  msgstr ""
1574
  msgid "Let customers upload files on (or after) the checkout."
1575
  msgstr ""
1576
 
1577
+ #: includes/class-wcj-checkout-files-upload.php:84
1578
+ #: includes/class-wcj-checkout-files-upload.php:89
1579
  #: includes/settings/wcj-settings-checkout-files-upload.php:397
1580
  #: includes/settings/wcj-settings-checkout-files-upload.php:446
1581
  #, php-format
1582
  msgid "File: %s"
1583
  msgstr ""
1584
 
1585
+ #: includes/class-wcj-checkout-files-upload.php:216
1586
  #: includes/settings/wcj-settings-checkout-files-upload.php:126
1587
  msgid "File is required!"
1588
  msgstr ""
1589
 
1590
+ #: includes/class-wcj-checkout-files-upload.php:235
1591
+ #: includes/class-wcj-checkout-files-upload.php:250
1592
+ #: includes/class-wcj-checkout-files-upload.php:519
1593
+ #: includes/class-wcj-checkout-files-upload.php:535
1594
  #: includes/settings/wcj-settings-checkout-files-upload.php:120
1595
  #, php-format
1596
  msgid "Wrong file type: \"%s\"!"
1597
  msgstr ""
1598
 
1599
+ #: includes/class-wcj-checkout-files-upload.php:273
1600
  msgid "Uploaded Files"
1601
  msgstr ""
1602
 
1603
+ #: includes/class-wcj-checkout-files-upload.php:306
1604
  msgid "No files uploaded."
1605
  msgstr ""
1606
 
1607
+ #: includes/class-wcj-checkout-files-upload.php:309
1608
  msgid "Delete all files"
1609
  msgstr ""
1610
 
1611
+ #: includes/class-wcj-checkout-files-upload.php:400
1612
  #: includes/settings/wcj-settings-checkout-files-upload.php:260
1613
  msgid "Files were successfully removed."
1614
  msgstr ""
1615
 
1616
+ #: includes/class-wcj-checkout-files-upload.php:429
1617
  msgid "Booster for WooCommerce: Checkout Files Upload: %action%"
1618
  msgstr ""
1619
 
1620
+ #: includes/class-wcj-checkout-files-upload.php:432
1621
+ #, php-format
1622
+ msgid "Order ID: %1$s; File name: %2$s"
1623
  msgstr ""
1624
 
1625
+ #: includes/class-wcj-checkout-files-upload.php:452
1626
+ #: includes/class-wcj-checkout-files-upload.php:489
1627
  #: includes/settings/wcj-settings-checkout-files-upload.php:150
1628
  #, php-format
1629
  msgid "File \"%s\" was successfully removed."
1630
  msgstr ""
1631
 
1632
+ #: includes/class-wcj-checkout-files-upload.php:464
1633
  msgid "File Removed"
1634
  msgstr ""
1635
 
1636
+ #: includes/class-wcj-checkout-files-upload.php:555
1637
  #: includes/settings/wcj-settings-checkout-files-upload.php:135
1638
  #, php-format
1639
  msgid "File \"%s\" was successfully uploaded."
1640
  msgstr ""
1641
 
1642
+ #: includes/class-wcj-checkout-files-upload.php:570
1643
  msgid "File Uploaded"
1644
  msgstr ""
1645
 
1646
+ #: includes/class-wcj-checkout-files-upload.php:598
1647
  #: includes/settings/wcj-settings-checkout-files-upload.php:141
1648
  msgid "Please select file to upload!"
1649
  msgstr ""
1650
 
1651
+ #: includes/class-wcj-checkout-files-upload.php:896
1652
+ #: includes/class-wcj-checkout-files-upload.php:897
1653
  #: includes/settings/wcj-settings-checkout-files-upload.php:105
1654
  msgid "Upload"
1655
  msgstr ""
1656
 
1657
+ #: includes/class-wcj-checkout-files-upload.php:912
1658
+ #: includes/class-wcj-checkout-files-upload.php:913
1659
  #: includes/settings/wcj-settings-checkout-files-upload.php:111
1660
  #: includes/settings/wcj-settings-price-by-user-role.php:81
1661
  #: includes/settings/wcj-settings-price-by-user-role.php:89
3983
  #: includes/class-wcj-product-bulk-meta-editor.php:315
3984
  #: includes/class-wcj-product-by-user.php:287
3985
  #: includes/class-wcj-purchase-data.php:125
3986
+ #: includes/classes/class-wcj-module.php:1000
3987
  #: includes/functions/wcj-functions-general.php:208
3988
  #: includes/functions/wcj-functions-html.php:131
3989
  #: includes/reports/class-wcj-reports-monthly-sales.php:393
5012
 
5013
  #: includes/class-wcj-purchase-data.php:158
5014
  #: includes/class-wcj-purchase-data.php:223
5015
+ #: includes/class-wcj-purchase-data.php:315
5016
  #: includes/functions/wcj-functions-reports.php:31
5017
  #: includes/settings/wcj-settings-purchase-data.php:152
5018
  #: includes/settings/wcj-settings-purchase-data.php:180
5025
  msgid "Purchase Cost"
5026
  msgstr ""
5027
 
5028
+ #: includes/class-wcj-purchase-data.php:312
5029
  msgid "Selling"
5030
  msgstr ""
5031
 
5032
+ #: includes/class-wcj-purchase-data.php:313
5033
  msgid "Buying"
5034
  msgstr ""
5035
 
5036
+ #: includes/class-wcj-purchase-data.php:329
5037
  msgid "Report"
5038
  msgstr ""
5039
 
5833
  "\" products."
5834
  msgstr ""
5835
 
5836
+ #: includes/classes/class-wcj-module.php:772
5837
  #, php-format
5838
  msgid "Selected: %s."
5839
  msgstr ""
5840
 
5841
+ #: includes/classes/class-wcj-module.php:843
5842
  msgid "Back to Module Settings"
5843
  msgstr ""
5844
 
5845
+ #: includes/classes/class-wcj-module.php:864
5846
  #: includes/settings/wcj-settings-wpml.php:102
5847
  msgid "Module Tools"
5848
  msgstr ""
5849
 
5850
+ #: includes/classes/class-wcj-module.php:942
5851
  #: includes/settings/wcj-settings-checkout-core-fields.php:82
5852
  msgid "enabled"
5853
  msgstr ""
5854
 
5855
+ #: includes/classes/class-wcj-module.php:943
5856
  msgid "disabled"
5857
  msgstr ""
5858
 
5859
+ #: includes/classes/class-wcj-module.php:951
5860
  #: includes/settings/wcj-settings-product-tabs.php:181
5861
  #: includes/settings/wcj-settings-product-tabs.php:196
5862
  #: includes/settings/wcj-settings-product-tabs.php:211
5864
  msgid "Deprecated"
5865
  msgstr ""
5866
 
5867
+ #: includes/classes/class-wcj-module.php:990
5868
  msgid "Reset Settings"
5869
  msgstr ""
5870
 
5871
+ #: includes/classes/class-wcj-module.php:996
5872
  msgid "Reset Module to Default Settings"
5873
  msgstr ""
5874
 
5875
+ #: includes/classes/class-wcj-module.php:997
5876
  msgid "Reset Submodule to Default Settings"
5877
  msgstr ""
5878
 
5879
+ #: includes/classes/class-wcj-module.php:1001
5880
  msgid "Reset settings"
5881
  msgstr ""
5882
 
5883
+ #: includes/classes/class-wcj-module.php:1039
5884
  msgid "Module Options"
5885
  msgstr ""
5886
 
5887
+ #: includes/classes/class-wcj-module.php:1046
5888
  msgid "Enable Module"
5889
  msgstr ""
5890
 
20605
  msgid "Attribute \"name\" is required!"
20606
  msgstr ""
20607
 
20608
+ #: includes/shortcodes/class-wcj-orders-shortcodes.php:395
20609
  #, php-format
20610
  msgid "Refund #%1$s - %2$s"
20611
  msgstr ""
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: 6.0.1
6
  Requires PHP: 5.6
7
- Stable tag: 5.6.2
8
  License: GNU General Public License v3.0
9
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
10
 
@@ -275,6 +275,27 @@ To unlock all Booster for WooCommerce features, please install additional paid B
275
 
276
  == Changelog ==
277
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
278
  = 5.6.2 27/07/2022 =
279
 
280
  * NEW FEATURE - PDF INVOICING & PACKING SLIPS - PDF Invoicing - Added a new shortcode Attribute to exclude tax in order to refund the Total. [wcj_order_shipping_price excl_tax="yes" ]
4
  Requires at least: 4.4
5
  Tested up to: 6.0.1
6
  Requires PHP: 5.6
7
+ Stable tag: 5.6.3
8
  License: GNU General Public License v3.0
9
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
10
 
275
 
276
  == Changelog ==
277
 
278
+ = 5.6.3 31/08/2022 =
279
+
280
+ * NEW FEATURE - PDF INVOICING & PACKING SLIPS - PDF Invoicing - Added a new shortcode for refund total with inc./ex. tax. [wcj_order_item_total_refunded excl_tax="yes" ]
281
+ * FIXED - SHIPPING & ORDERS - Order Custom Statuses - Fixed custom status not displaying in order bulk action selection.
282
+ * FIXED - PRODUCTS - Product Tabs - Fixed issue with HTML tags.
283
+ * FIXED - PRODUCTS - Product Tabs - Fixed issue in some cases Jquery syntax was being shown.
284
+ * FIXED - PRODUCTS - Product Visibility by User Role - Fixed allowed user role selection on the single product edit page.
285
+ * FIXED - PRODUCTS - Product Visibility by Country - Fixed allowed country selection on the single product edit page.
286
+ * FIXED - PRODUCTS - Cost of Goods - Fixed bugs related to reporting, profit, and other bugs.
287
+ * FIXED - CART & CHECKOUT - Mini Cart Custom Info - Fixed Custom Info is not shown on the Wocommarce mini cart.
288
+ * FIXED - BUTTON & PRICE LABELS - Free Price Labels - Fixed free price Label does not show when the product price is '0'.
289
+ * FIXED - CART & CHECKOUT - Checkout Files Upload - Escaped the html content from the "File Upload Fields" value.
290
+ * FIXED - EMAILS & MISC. - Modules By User Roles - Fixed Enable/disable modules by user roles.
291
+ * FIXED - PRODUCTS - Product Addons - Fixed add-ons were not being saved with per product add-on.
292
+ * FIXED - PRODUCTS - Product Input Fields - Fixed issue with input type radio for per product input field.
293
+ * FIXED - PDF INVOICING & PACKING SLIPS - PDF Invoicing - Fixed Invoice report tool was showing an error while choosing the CSV option.
294
+ * FIXED - EMAILS & MISC. - My Account - Added restriction for Cross browser scripting.
295
+ * FIXED - PHP Warning: Undefined Variable "$exclude_item_subtotal" in /includes/shortcodes/class-wcj-shortcodes-orders.php ...
296
+ * WooCommerce 6.8.2 tested
297
+ * WordPress 6.0.1 Tested
298
+
299
  = 5.6.2 27/07/2022 =
300
 
301
  * NEW FEATURE - PDF INVOICING & PACKING SLIPS - PDF Invoicing - Added a new shortcode Attribute to exclude tax in order to refund the Total. [wcj_order_shipping_price excl_tax="yes" ]
version-details.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
- "0" : "= 5.6.2 27/07/2022 =",
3
- "1" : "* NEW FEATURE - PDF INVOICING & PACKING SLIPS - PDF Invoicing - Added a new shortcode Attribute to exclude tax in order to refund the Total. [wcj_order_shipping_price excl_tax=\"yes\" ]",
4
- "2" : "* FIXED - SHIPPING & ORDERS - Maximum Products per User - Remove Max product per user meta from product while duplicating Product",
5
- "3" : "* FIXED - EMAILS & MISC. - Export - Escape the html content from the \"Additional Export Orders Fields\" value. "
6
  }
1
  {
2
+ "0" : "= 5.6.3 31/08/2022 =",
3
+ "1" : "* NEW FEATURE - PDF INVOICING & PACKING SLIPS - PDF Invoicing - Added a new shortcode for refund total with inc./ex. tax. [wcj_order_item_total_refunded excl_tax=\"yes\" ]",
4
+ "2" : "* FIXED - SHIPPING & ORDERS - Order Custom Statuses - Fixed custom status not displaying in order bulk action selection.",
5
+ "3" : "* FIXED - PRODUCTS - Product Tabs - Fixed issue with HTML tags."
6
  }
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.6.2
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: 6.7.0
13
  * License: GNU General Public License v3.0
14
  * php version 5.6
15
  * License URI: http://www.gnu.org/licenses/gpl-3.0.html
@@ -65,7 +65,7 @@ if ( ! class_exists( 'WC_Jetpack' ) ) :
65
  * @var string
66
  * @since 2.4.7
67
  */
68
- public $version = '5.6.2';
69
 
70
  /**
71
  * 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.6.3
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: 6.8.2
13
  * License: GNU General Public License v3.0
14
  * php version 5.6
15
  * License URI: http://www.gnu.org/licenses/gpl-3.0.html
65
  * @var string
66
  * @since 2.4.7
67
  */
68
+ public $version = '5.6.3';
69
 
70
  /**
71
  * The single instance of the class