Version Description
30/11/2022 =
- FIXED - PDF INVOICING & PACKING SLIPS - PDF Invoicing - Fixed error PHP Deprecated: Function WC_Order_Item_Product::offsetSet is deprecated since version...
- FIXED - PDF INVOICING & PACKING SLIPS - PDF Invoicing - Fixed calculation issue in wcj_order_item_total_refunded shortcode.
- FIXED - PRICES & CURRENCIES - Currency Exchange Rates - Fixed exchange rate issue for European Central Bank (ECB) exchange rate server response.
- FIXED - PRICES & CURRENCIES - Currency Exchange Rates - "Always Use cURL" option removed.
- FIXED - PRICES & CURRENCIES - Multicurrency (Currency Switcher) - Fixed Default Currency and Role Defaults conflict.
- FIXED - PRICES & CURRENCIES - Product Price by Formula - Fixed verify nonce issue.
- FIXED - EMAILS & MISC. - General - Added missing images for jquery-ui.css
- FIXED - Added Security vulnerability fixes - Multiple CSRF.
- FIXED - Added Security vulnerability fixes.
- WooCommerce 7.1.0 tested
- WordPress 6.1 tested
Download this release
Release Info
Developer | ronyp |
Plugin | Booster for WooCommerce |
Version | 6.0.0 |
Comparing to | |
See all releases |
Code changes from version 5.6.8 to 6.0.0
- includes/admin/class-wcj-settings-custom-fields.php +7 -5
- includes/admin/class-wcj-settings-manager.php +5 -5
- includes/class-wcj-currency-exchange-rates.php +6 -2
- includes/class-wcj-emails-verification.php +12 -10
- includes/class-wcj-export-import.php +12 -9
- includes/class-wcj-multicurrency.php +15 -5
- includes/class-wcj-old-slugs.php +3 -3
- includes/class-wcj-order-custom-statuses.php +3 -3
- includes/class-wcj-pdf-invoicing.php +5 -5
- includes/class-wcj-product-price-by-formula.php +5 -6
- includes/class-wcj-products-xml.php +8 -4
- includes/class-wcj-track-users.php +9 -7
- includes/classes/class-wcj-module-product-by-condition.php +11 -11
- includes/classes/class-wcj-module.php +24 -15
- includes/classes/class-wcj-pdf-invoice.php +12 -18
- includes/classes/class-wcj-shortcodes.php +12 -10
- includes/core/wcj-loader.php +2 -2
- includes/css/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- includes/css/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- includes/css/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- includes/css/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- includes/css/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- includes/css/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- includes/css/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- includes/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- includes/css/images/ui-icons_222222_256x240.png +0 -0
- includes/css/images/ui-icons_2e83ff_256x240.png +0 -0
- includes/css/images/ui-icons_454545_256x240.png +0 -0
- includes/css/images/ui-icons_888888_256x240.png +0 -0
- includes/css/images/ui-icons_cd0a0a_256x240.png +0 -0
- includes/css/wcj-admin.css +30 -1
- includes/emails/class-wc-email-wcj-custom.php +3 -3
- includes/emails/email-html.php +10 -1
- includes/emails/email-plain.php +10 -1
- includes/exchange-rates/class-wcj-exchange-rates.php +24 -15
- includes/export/class-wcj-exporter-customers.php +3 -3
- includes/export/class-wcj-exporter-orders.php +7 -3
- includes/functions/wcj-functions-booster-core.php +3 -3
- includes/functions/wcj-functions-debug.php +6 -4
- includes/functions/wcj-functions-exchange-rates.php +10 -13
- includes/functions/wcj-functions-general.php +24 -57
- includes/functions/wcj-functions-number-to-words-lt.php +3 -3
- includes/functions/wcj-functions-number-to-words.php +3 -3
- includes/functions/wcj-functions-reports.php +3 -3
- includes/js/wcj-ajax-exchange-rates-average.js +2 -1
- includes/pdf-invoices/class-wcj-pdf-invoicing-renumerate-tool.php +10 -8
- includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php +15 -24
- includes/reports/class-wcj-reports-customers.php +6 -5
- includes/reports/class-wcj-reports-monthly-sales.php +13 -17
- includes/reports/class-wcj-reports-product-sales-daily.php +26 -24
- includes/reports/class-wcj-reports-sales-gateways.php +22 -21
- includes/reports/class-wcj-reports-sales.php +12 -15
- includes/reports/class-wcj-reports-stock.php +24 -20
- includes/settings/wcj-settings-currency-exchange-rates.php +1 -9
- includes/shortcodes/class-wcj-general-shortcodes.php +7 -6
- includes/shortcodes/class-wcj-order-items-shortcodes.php +20 -11
- includes/shortcodes/class-wcj-orders-shortcodes.php +3 -3
- includes/templates/wcj-radio-for-variations.php +4 -4
- langs/woocommerce-jetpack.pot +138 -167
- readme.txt +15 -1
- version-details.json +3 -3
- woocommerce-jetpack.php +2 -2
includes/admin/class-wcj-settings-custom-fields.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Settings Custom Fields
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 2.8.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/admin
|
@@ -156,7 +156,7 @@ if ( ! class_exists( 'WCJ_Settings_Custom_Fields' ) ) :
|
|
156 |
/**
|
157 |
* Output_wcj_number_plus_checkbox_start.
|
158 |
*
|
159 |
-
* @version
|
160 |
* @since 2.8.0
|
161 |
* @param Array $value Get values.
|
162 |
*/
|
@@ -170,7 +170,8 @@ if ( ! class_exists( 'WCJ_Settings_Custom_Fields' ) ) :
|
|
170 |
}
|
171 |
// Description handling.
|
172 |
$field_description = WC_Admin_Settings::get_field_description( $value );
|
173 |
-
|
|
|
174 |
// Option value.
|
175 |
$option_value = WC_Admin_Settings::get_option( $value['id'], $value['default'] );
|
176 |
// Output.
|
@@ -198,7 +199,7 @@ if ( ! class_exists( 'WCJ_Settings_Custom_Fields' ) ) :
|
|
198 |
/**
|
199 |
* Output_wcj_number_plus_checkbox_end.
|
200 |
*
|
201 |
-
* @version
|
202 |
* @since 2.8.0
|
203 |
* @param Array $value Get values.
|
204 |
*/
|
@@ -212,7 +213,8 @@ if ( ! class_exists( 'WCJ_Settings_Custom_Fields' ) ) :
|
|
212 |
}
|
213 |
// Description handling.
|
214 |
$field_description = WC_Admin_Settings::get_field_description( $value );
|
215 |
-
|
|
|
216 |
// Option value.
|
217 |
$option_value = WC_Admin_Settings::get_option( $value['id'], $value['default'] );
|
218 |
// Output.
|
2 |
/**
|
3 |
* Booster for WooCommerce - Settings Custom Fields
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @since 2.8.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/admin
|
156 |
/**
|
157 |
* Output_wcj_number_plus_checkbox_start.
|
158 |
*
|
159 |
+
* @version 6.0.0
|
160 |
* @since 2.8.0
|
161 |
* @param Array $value Get values.
|
162 |
*/
|
170 |
}
|
171 |
// Description handling.
|
172 |
$field_description = WC_Admin_Settings::get_field_description( $value );
|
173 |
+
$description = $field_description['description'];
|
174 |
+
$tooltip_html = $field_description['tooltip_html'];
|
175 |
// Option value.
|
176 |
$option_value = WC_Admin_Settings::get_option( $value['id'], $value['default'] );
|
177 |
// Output.
|
199 |
/**
|
200 |
* Output_wcj_number_plus_checkbox_end.
|
201 |
*
|
202 |
+
* @version 6.0.0
|
203 |
* @since 2.8.0
|
204 |
* @param Array $value Get values.
|
205 |
*/
|
213 |
}
|
214 |
// Description handling.
|
215 |
$field_description = WC_Admin_Settings::get_field_description( $value );
|
216 |
+
$description = $field_description['description'];
|
217 |
+
$tooltip_html = $field_description['tooltip_html'];
|
218 |
// Option value.
|
219 |
$option_value = WC_Admin_Settings::get_option( $value['id'], $value['default'] );
|
220 |
// Output.
|
includes/admin/class-wcj-settings-manager.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Settings Manager - Import / Export / Reset Booster's settings
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 2.9.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/admin
|
@@ -150,7 +150,7 @@ if ( ! class_exists( 'WCJ_Settings_Manager' ) ) :
|
|
150 |
/**
|
151 |
* Manage_options_reset_meta.
|
152 |
*
|
153 |
-
* @version
|
154 |
* @since 3.4.0
|
155 |
* @todo order items meta
|
156 |
* @todo `... LIKE 'wcj_%'`
|
@@ -158,7 +158,7 @@ if ( ! class_exists( 'WCJ_Settings_Manager' ) ) :
|
|
158 |
public function manage_options_reset_meta() {
|
159 |
global $wpdb, $wcj_notice;
|
160 |
$delete_counter_meta = 0;
|
161 |
-
$plugin_meta = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta WHERE meta_key LIKE '_wcj_%'" ); //
|
162 |
foreach ( $plugin_meta as $meta ) {
|
163 |
delete_post_meta( $meta->post_id, $meta->meta_key );
|
164 |
$delete_counter_meta++;
|
@@ -170,13 +170,13 @@ if ( ! class_exists( 'WCJ_Settings_Manager' ) ) :
|
|
170 |
/**
|
171 |
* Manage_options_reset.
|
172 |
*
|
173 |
-
* @version
|
174 |
* @since 2.5.2
|
175 |
*/
|
176 |
public function manage_options_reset() {
|
177 |
global $wpdb, $wcj_notice;
|
178 |
$delete_counter_options = 0;
|
179 |
-
$plugin_options = $wpdb->get_results( "SELECT option_name FROM $wpdb->options WHERE option_name LIKE 'wcj_%'" ); //
|
180 |
foreach ( $plugin_options as $option ) {
|
181 |
delete_option( $option->option_name );
|
182 |
delete_site_option( $option->option_name );
|
2 |
/**
|
3 |
* Booster for WooCommerce - Settings Manager - Import / Export / Reset Booster's settings
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @since 2.9.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/admin
|
150 |
/**
|
151 |
* Manage_options_reset_meta.
|
152 |
*
|
153 |
+
* @version 6.0.0
|
154 |
* @since 3.4.0
|
155 |
* @todo order items meta
|
156 |
* @todo `... LIKE 'wcj_%'`
|
158 |
public function manage_options_reset_meta() {
|
159 |
global $wpdb, $wcj_notice;
|
160 |
$delete_counter_meta = 0;
|
161 |
+
$plugin_meta = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta WHERE meta_key LIKE '_wcj_%'" ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
|
162 |
foreach ( $plugin_meta as $meta ) {
|
163 |
delete_post_meta( $meta->post_id, $meta->meta_key );
|
164 |
$delete_counter_meta++;
|
170 |
/**
|
171 |
* Manage_options_reset.
|
172 |
*
|
173 |
+
* @version 6.0.0
|
174 |
* @since 2.5.2
|
175 |
*/
|
176 |
public function manage_options_reset() {
|
177 |
global $wpdb, $wcj_notice;
|
178 |
$delete_counter_options = 0;
|
179 |
+
$plugin_options = $wpdb->get_results( "SELECT option_name FROM $wpdb->options WHERE option_name LIKE 'wcj_%'" ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
|
180 |
foreach ( $plugin_options as $option ) {
|
181 |
delete_option( $option->option_name );
|
182 |
delete_site_option( $option->option_name );
|
includes/class-wcj-currency-exchange-rates.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Module - Currency Exchange Rates
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 2.3.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/includes
|
@@ -21,7 +21,7 @@ if ( ! class_exists( 'WCJ_Currency_Exchange_Rates' ) ) :
|
|
21 |
/**
|
22 |
* Constructor.
|
23 |
*
|
24 |
-
* @version
|
25 |
*/
|
26 |
public function __construct() {
|
27 |
|
@@ -39,6 +39,10 @@ if ( ! class_exists( 'WCJ_Currency_Exchange_Rates' ) ) :
|
|
39 |
include_once 'exchange-rates/class-wcj-exchange-rates-crons.php';
|
40 |
add_action( 'admin_init', array( $this, 'maybe_update_all_rates' ) );
|
41 |
add_filter( 'wcj_currency_exchange_rate', array( $this, 'force_dot_as_exchange_rate_decimal_separator' ) );
|
|
|
|
|
|
|
|
|
42 |
}
|
43 |
include_once 'exchange-rates/class-wcj-exchange-rates.php';
|
44 |
}
|
2 |
/**
|
3 |
* Booster for WooCommerce - Module - Currency Exchange Rates
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @since 2.3.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/includes
|
21 |
/**
|
22 |
* Constructor.
|
23 |
*
|
24 |
+
* @version 6.0.0
|
25 |
*/
|
26 |
public function __construct() {
|
27 |
|
39 |
include_once 'exchange-rates/class-wcj-exchange-rates-crons.php';
|
40 |
add_action( 'admin_init', array( $this, 'maybe_update_all_rates' ) );
|
41 |
add_filter( 'wcj_currency_exchange_rate', array( $this, 'force_dot_as_exchange_rate_decimal_separator' ) );
|
42 |
+
$deprecated_option = wcj_get_option( 'wcj_currency_exchange_rates_always_curl' );
|
43 |
+
if ( $deprecated_option && '' !== $deprecated_option ) {
|
44 |
+
delete_option( 'wcj_currency_exchange_rates_always_curl' );
|
45 |
+
}
|
46 |
}
|
47 |
include_once 'exchange-rates/class-wcj-exchange-rates.php';
|
48 |
}
|
includes/class-wcj-emails-verification.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Module - Email Verification
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 2.8.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/includes
|
@@ -147,13 +147,13 @@ if ( ! class_exists( 'WCJ_Emails_Verification' ) ) :
|
|
147 |
/**
|
148 |
* Prevent_user_login_automatically_after_register.
|
149 |
*
|
150 |
-
* @version
|
151 |
* @since 2.8.0
|
152 |
* @param string $redirect_to defines the redirect_to.
|
153 |
*/
|
154 |
public function prevent_user_login_automatically_after_register( $redirect_to ) {
|
155 |
wp_logout();
|
156 |
-
return
|
157 |
}
|
158 |
|
159 |
/**
|
@@ -191,7 +191,7 @@ if ( ! class_exists( 'WCJ_Emails_Verification' ) ) :
|
|
191 |
/**
|
192 |
* Reset_and_mail_activation_link.
|
193 |
*
|
194 |
-
* @version
|
195 |
* @since 2.8.0
|
196 |
* @todo %site_name% etc. in `wcj_emails_verification_email_subject`
|
197 |
* @param int $user_id defines the user_id.
|
@@ -202,7 +202,7 @@ if ( ! class_exists( 'WCJ_Emails_Verification' ) ) :
|
|
202 |
$url = wp_nonce_url(
|
203 |
add_query_arg(
|
204 |
'wcj_verify_email',
|
205 |
-
base64_encode(
|
206 |
wp_json_encode(
|
207 |
array(
|
208 |
'id' => $user_id,
|
@@ -211,7 +211,8 @@ if ( ! class_exists( 'WCJ_Emails_Verification' ) ) :
|
|
211 |
)
|
212 |
),
|
213 |
wc_get_page_permalink( 'myaccount' )
|
214 |
-
)
|
|
|
215 |
);
|
216 |
$email_content = do_shortcode(
|
217 |
apply_filters(
|
@@ -248,13 +249,14 @@ if ( ! class_exists( 'WCJ_Emails_Verification' ) ) :
|
|
248 |
/**
|
249 |
* Process_email_verification.
|
250 |
*
|
251 |
-
* @version
|
252 |
* @since 2.8.0
|
253 |
*/
|
254 |
public function process_email_verification() {
|
|
|
255 |
if ( isset( $_GET['wcj_verified_email'] ) ) {
|
256 |
if ( function_exists( 'wc_add_notice' ) ) {
|
257 |
-
$data = json_decode( base64_decode(
|
258 |
if ( ! empty( $data['id'] ) && ! empty( $data['code'] ) && get_user_meta( $data['id'], 'wcj_activation_code', true ) === $data['code'] ) {
|
259 |
wc_add_notice(
|
260 |
do_shortcode(
|
@@ -266,8 +268,8 @@ if ( ! class_exists( 'WCJ_Emails_Verification' ) ) :
|
|
266 |
);
|
267 |
}
|
268 |
}
|
269 |
-
} elseif ( isset( $_GET['wcj_verify_email'] ) ) {
|
270 |
-
$data = json_decode( base64_decode( sanitize_text_field( wp_unslash( $_GET['wcj_verify_email'] ) ) ), true );
|
271 |
if ( ! empty( $data['id'] ) && ! empty( $data['code'] ) && get_user_meta( $data['id'], 'wcj_activation_code', true ) === $data['code'] ) {
|
272 |
update_user_meta( $data['id'], 'wcj_is_activated', '1' );
|
273 |
if ( 'yes' === wcj_get_option( 'wcj_emails_verification_redirect_on_success', 'yes' ) ) {
|
2 |
/**
|
3 |
* Booster for WooCommerce - Module - Email Verification
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @since 2.8.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/includes
|
147 |
/**
|
148 |
* Prevent_user_login_automatically_after_register.
|
149 |
*
|
150 |
+
* @version 6.0.0
|
151 |
* @since 2.8.0
|
152 |
* @param string $redirect_to defines the redirect_to.
|
153 |
*/
|
154 |
public function prevent_user_login_automatically_after_register( $redirect_to ) {
|
155 |
wp_logout();
|
156 |
+
return esc_url_raw( add_query_arg( 'wcj_activate_account_message', '', $redirect_to ) );
|
157 |
}
|
158 |
|
159 |
/**
|
191 |
/**
|
192 |
* Reset_and_mail_activation_link.
|
193 |
*
|
194 |
+
* @version 6.0.0
|
195 |
* @since 2.8.0
|
196 |
* @todo %site_name% etc. in `wcj_emails_verification_email_subject`
|
197 |
* @param int $user_id defines the user_id.
|
202 |
$url = wp_nonce_url(
|
203 |
add_query_arg(
|
204 |
'wcj_verify_email',
|
205 |
+
base64_encode( // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode
|
206 |
wp_json_encode(
|
207 |
array(
|
208 |
'id' => $user_id,
|
211 |
)
|
212 |
),
|
213 |
wc_get_page_permalink( 'myaccount' )
|
214 |
+
),
|
215 |
+
'wcj_verify_email'
|
216 |
);
|
217 |
$email_content = do_shortcode(
|
218 |
apply_filters(
|
249 |
/**
|
250 |
* Process_email_verification.
|
251 |
*
|
252 |
+
* @version 6.0.0
|
253 |
* @since 2.8.0
|
254 |
*/
|
255 |
public function process_email_verification() {
|
256 |
+
$wcj_verify_email_wpnonce = isset( $_GET['_wpnonce'] ) ? wp_verify_nonce( sanitize_key( $_GET['_wpnonce'] ), 'wcj_verify_email' ) : false;
|
257 |
if ( isset( $_GET['wcj_verified_email'] ) ) {
|
258 |
if ( function_exists( 'wc_add_notice' ) ) {
|
259 |
+
$data = json_decode( base64_decode( sanitize_text_field( wp_unslash( $_GET['wcj_verified_email'] ) ) ), true ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_decode
|
260 |
if ( ! empty( $data['id'] ) && ! empty( $data['code'] ) && get_user_meta( $data['id'], 'wcj_activation_code', true ) === $data['code'] ) {
|
261 |
wc_add_notice(
|
262 |
do_shortcode(
|
268 |
);
|
269 |
}
|
270 |
}
|
271 |
+
} elseif ( $wcj_verify_email_wpnonce && isset( $_GET['wcj_verify_email'] ) ) {
|
272 |
+
$data = json_decode( base64_decode( sanitize_text_field( wp_unslash( $_GET['wcj_verify_email'] ) ) ), true ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_decode
|
273 |
if ( ! empty( $data['id'] ) && ! empty( $data['code'] ) && get_user_meta( $data['id'], 'wcj_activation_code', true ) === $data['code'] ) {
|
274 |
update_user_meta( $data['id'], 'wcj_is_activated', '1' );
|
275 |
if ( 'yes' === wcj_get_option( 'wcj_emails_verification_redirect_on_success', 'yes' ) ) {
|
includes/class-wcj-export-import.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Module - Export
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 2.5.4
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/includes
|
@@ -126,12 +126,15 @@ if ( ! class_exists( 'WCJ_Export_Import' ) ) :
|
|
126 |
/**
|
127 |
* Export_xml.
|
128 |
*
|
129 |
-
* @version
|
130 |
* @since 2.5.9
|
131 |
* @todo [dev] templates for xml_start, xml_end, xml_item.
|
132 |
* @todo [dev] `strip_tags`
|
133 |
*/
|
134 |
public function export_xml() {
|
|
|
|
|
|
|
135 |
$wpnonce = isset( $_REQUEST['wcj_tools_nonce'] ) ? wp_verify_nonce( sanitize_key( $_REQUEST['wcj_tools_nonce'] ), 'wcj_tools' ) : false;
|
136 |
if ( $wpnonce && isset( $_POST['wcj_export_xml'] ) ) {
|
137 |
$data = $this->export( sanitize_text_field( wp_unslash( $_POST['wcj_export_xml'] ) ) );
|
@@ -152,11 +155,11 @@ if ( ! class_exists( 'WCJ_Export_Import' ) ) :
|
|
152 |
$xml .= '</item>' . PHP_EOL;
|
153 |
}
|
154 |
$xml .= '</root>';
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
die();
|
161 |
}
|
162 |
}
|
@@ -322,7 +325,7 @@ if ( ! class_exists( 'WCJ_Export_Import' ) ) :
|
|
322 |
/**
|
323 |
* Create_export_tool.
|
324 |
*
|
325 |
-
* @version
|
326 |
* @since 2.4.8
|
327 |
* @param int $tool_id defines the tool_id.
|
328 |
*/
|
@@ -353,7 +356,7 @@ if ( ! class_exists( 'WCJ_Export_Import' ) ) :
|
|
353 |
echo '</p>';
|
354 |
echo '</form>';
|
355 |
$data = $this->export( $tool_id );
|
356 |
-
echo is_array( $data ) ? wcj_get_table_html( $data, array( 'table_class' => 'widefat striped' ) ) : ( $data );
|
357 |
echo '</div>';
|
358 |
}
|
359 |
|
2 |
/**
|
3 |
* Booster for WooCommerce - Module - Export
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @since 2.5.4
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/includes
|
126 |
/**
|
127 |
* Export_xml.
|
128 |
*
|
129 |
+
* @version 6.0.0
|
130 |
* @since 2.5.9
|
131 |
* @todo [dev] templates for xml_start, xml_end, xml_item.
|
132 |
* @todo [dev] `strip_tags`
|
133 |
*/
|
134 |
public function export_xml() {
|
135 |
+
global $wp_filesystem;
|
136 |
+
require_once ABSPATH . '/wp-admin/includes/file.php';
|
137 |
+
WP_Filesystem();
|
138 |
$wpnonce = isset( $_REQUEST['wcj_tools_nonce'] ) ? wp_verify_nonce( sanitize_key( $_REQUEST['wcj_tools_nonce'] ), 'wcj_tools' ) : false;
|
139 |
if ( $wpnonce && isset( $_POST['wcj_export_xml'] ) ) {
|
140 |
$data = $this->export( sanitize_text_field( wp_unslash( $_POST['wcj_export_xml'] ) ) );
|
155 |
$xml .= '</item>' . PHP_EOL;
|
156 |
}
|
157 |
$xml .= '</root>';
|
158 |
+
|
159 |
+
$file_name = sanitize_text_field( wp_unslash( $_POST['wcj_export_xml'] ) ) . '.xml';
|
160 |
+
$file_path = wp_tempnam();
|
161 |
+
$wp_filesystem->put_contents( $file_path, $xml, FS_CHMOD_FILE );
|
162 |
+
WC_Download_Handler::download_file_force( $file_path, $file_name );
|
163 |
die();
|
164 |
}
|
165 |
}
|
325 |
/**
|
326 |
* Create_export_tool.
|
327 |
*
|
328 |
+
* @version 6.0.0
|
329 |
* @since 2.4.8
|
330 |
* @param int $tool_id defines the tool_id.
|
331 |
*/
|
356 |
echo '</p>';
|
357 |
echo '</form>';
|
358 |
$data = $this->export( $tool_id );
|
359 |
+
echo is_array( $data ) ? wp_kses_post( wcj_get_table_html( $data, array( 'table_class' => 'widefat striped' ) ) ) : wp_kses_post( $data );
|
360 |
echo '</div>';
|
361 |
}
|
362 |
|
includes/class-wcj-multicurrency.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Module - Multicurrency (Currency Switcher)
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 2.4.3
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/includes
|
@@ -917,7 +917,7 @@ if ( ! class_exists( 'WCJ_Multicurrency' ) ) :
|
|
917 |
/**
|
918 |
* Gets all products, or products with variations containing meta '_wcj_multicurrency_per_product_regular_price_{currency}' or '_wcj_multicurrency_per_product_sale_price_{currency}'.
|
919 |
*
|
920 |
-
* @version
|
921 |
* @since 4.5.0
|
922 |
*
|
923 |
* @param int | string $currency defines the currency.
|
@@ -930,7 +930,7 @@ if ( ! class_exists( 'WCJ_Multicurrency' ) ) :
|
|
930 |
}
|
931 |
|
932 |
global $wpdb;
|
933 |
-
$product_ids = $wpdb->get_col(
|
934 |
$wpdb->prepare(
|
935 |
"SELECT p.ID
|
936 |
FROM {$wpdb->posts} AS p
|
@@ -942,7 +942,7 @@ if ( ! class_exists( 'WCJ_Multicurrency' ) ) :
|
|
942 |
'_wcj_multicurrency_per_product_regular_price_' . esc_html( $currency ),
|
943 |
'_wcj_multicurrency_per_product_sale_price_' . esc_html( $currency )
|
944 |
)
|
945 |
-
);
|
946 |
|
947 |
return $product_ids;
|
948 |
}
|
@@ -1053,12 +1053,22 @@ if ( ! class_exists( 'WCJ_Multicurrency' ) ) :
|
|
1053 |
/**
|
1054 |
* Get_default_currency.
|
1055 |
*
|
1056 |
-
* @version
|
1057 |
* @since 5.3.4
|
1058 |
*
|
1059 |
* @return bool
|
1060 |
*/
|
1061 |
public function get_default_currency() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1062 |
$default_currency_number = wcj_get_option( 'wcj_multicurrency_default_currency', 1 );
|
1063 |
$currency = wcj_get_option( 'wcj_multicurrency_currency_' . $default_currency_number, apply_filters( 'woocommerce_currency', get_option( 'woocommerce_currency' ) ) );
|
1064 |
return $currency;
|
2 |
/**
|
3 |
* Booster for WooCommerce - Module - Multicurrency (Currency Switcher)
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @since 2.4.3
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/includes
|
917 |
/**
|
918 |
* Gets all products, or products with variations containing meta '_wcj_multicurrency_per_product_regular_price_{currency}' or '_wcj_multicurrency_per_product_sale_price_{currency}'.
|
919 |
*
|
920 |
+
* @version 6.0.0
|
921 |
* @since 4.5.0
|
922 |
*
|
923 |
* @param int | string $currency defines the currency.
|
930 |
}
|
931 |
|
932 |
global $wpdb;
|
933 |
+
$product_ids = $wpdb->get_col( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
|
934 |
$wpdb->prepare(
|
935 |
"SELECT p.ID
|
936 |
FROM {$wpdb->posts} AS p
|
942 |
'_wcj_multicurrency_per_product_regular_price_' . esc_html( $currency ),
|
943 |
'_wcj_multicurrency_per_product_sale_price_' . esc_html( $currency )
|
944 |
)
|
945 |
+
);
|
946 |
|
947 |
return $product_ids;
|
948 |
}
|
1053 |
/**
|
1054 |
* Get_default_currency.
|
1055 |
*
|
1056 |
+
* @version 6.0.0
|
1057 |
* @since 5.3.4
|
1058 |
*
|
1059 |
* @return bool
|
1060 |
*/
|
1061 |
public function get_default_currency() {
|
1062 |
+
$module_roles = wcj_get_option( 'wcj_multicurrency_role_defaults_roles', '' );
|
1063 |
+
if ( ! empty( $module_roles ) ) {
|
1064 |
+
$current_user_role = wcj_get_current_user_first_role();
|
1065 |
+
if ( in_array( $current_user_role, $module_roles, true ) ) {
|
1066 |
+
$currency = wcj_get_option( 'wcj_multicurrency_role_defaults_' . $current_user_role, '' );
|
1067 |
+
if ( '' !== $currency && null !== $currency ) {
|
1068 |
+
return $currency;
|
1069 |
+
}
|
1070 |
+
}
|
1071 |
+
}
|
1072 |
$default_currency_number = wcj_get_option( 'wcj_multicurrency_default_currency', 1 );
|
1073 |
$currency = wcj_get_option( 'wcj_multicurrency_currency_' . $default_currency_number, apply_filters( 'woocommerce_currency', get_option( 'woocommerce_currency' ) ) );
|
1074 |
return $currency;
|
includes/class-wcj-old-slugs.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Module - Old Slugs
|
4 |
*
|
5 |
-
* @version
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/includes
|
8 |
*/
|
@@ -43,13 +43,13 @@ if ( ! class_exists( 'WCJ_Old_Slugs' ) ) :
|
|
43 |
/**
|
44 |
* Create_old_slugs_tool.
|
45 |
*
|
46 |
-
* @version
|
47 |
*/
|
48 |
public function create_old_slugs_tool() {
|
49 |
|
50 |
global $wpdb;
|
51 |
$wp_postmeta_table = $wpdb->prefix . 'postmeta';
|
52 |
-
$all_old_slugs = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}postmeta WHERE meta_key = '_wp_old_slug' ORDER BY post_id" ); //
|
53 |
$num_old_slugs = count( $all_old_slugs );
|
54 |
$remove_result_html = '';
|
55 |
$headings = array(
|
2 |
/**
|
3 |
* Booster for WooCommerce - Module - Old Slugs
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/includes
|
8 |
*/
|
43 |
/**
|
44 |
* Create_old_slugs_tool.
|
45 |
*
|
46 |
+
* @version 6.0.0
|
47 |
*/
|
48 |
public function create_old_slugs_tool() {
|
49 |
|
50 |
global $wpdb;
|
51 |
$wp_postmeta_table = $wpdb->prefix . 'postmeta';
|
52 |
+
$all_old_slugs = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}postmeta WHERE meta_key = '_wp_old_slug' ORDER BY post_id" ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
|
53 |
$num_old_slugs = count( $all_old_slugs );
|
54 |
$remove_result_html = '';
|
55 |
$headings = array(
|
includes/class-wcj-order-custom-statuses.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Module - Order Custom Statuses
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 2.2.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/includes
|
@@ -358,7 +358,7 @@ if ( ! class_exists( 'WCJ_Order_Custom_Statuses' ) ) :
|
|
358 |
/**
|
359 |
* Register_custom_post_statuses.
|
360 |
*
|
361 |
-
* @version
|
362 |
*/
|
363 |
public function register_custom_post_statuses() {
|
364 |
$custom_statuses = $this->get_custom_order_statuses( $this->cut_prefix() );
|
@@ -372,7 +372,7 @@ if ( ! class_exists( 'WCJ_Order_Custom_Statuses' ) ) :
|
|
372 |
'show_in_admin_all_list' => true,
|
373 |
'show_in_admin_status_list' => true,
|
374 |
/* translators: %s: translation added */
|
375 |
-
'label_count' => _n_noop( $label . ' <span class="count">(%s)</span>', $label . ' <span class="count">(%s)</span>' ), //phpcs:ignore
|
376 |
)
|
377 |
);
|
378 |
}
|
2 |
/**
|
3 |
* Booster for WooCommerce - Module - Order Custom Statuses
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @since 2.2.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/includes
|
358 |
/**
|
359 |
* Register_custom_post_statuses.
|
360 |
*
|
361 |
+
* @version 6.0.0
|
362 |
*/
|
363 |
public function register_custom_post_statuses() {
|
364 |
$custom_statuses = $this->get_custom_order_statuses( $this->cut_prefix() );
|
372 |
'show_in_admin_all_list' => true,
|
373 |
'show_in_admin_status_list' => true,
|
374 |
/* translators: %s: translation added */
|
375 |
+
'label_count' => _n_noop( $label . ' <span class="count">(%s)</span>', $label . ' <span class="count">(%s)</span>' ), // phpcs:ignore WordPress.WP.I18n
|
376 |
)
|
377 |
);
|
378 |
}
|
includes/class-wcj-pdf-invoicing.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Module - PDF Invoicing
|
4 |
*
|
5 |
-
* @version
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/includes
|
8 |
*/
|
@@ -329,7 +329,7 @@ if ( ! class_exists( 'WCJ_PDF_Invoicing' ) ) :
|
|
329 |
/**
|
330 |
* Get_invoices_zip.
|
331 |
*
|
332 |
-
* @version
|
333 |
* @since 2.5.7
|
334 |
* @todo (maybe) add timestamp to filename
|
335 |
* @todo add `ZipArchive` fallback
|
@@ -362,7 +362,7 @@ if ( ! class_exists( 'WCJ_PDF_Invoicing' ) ) :
|
|
362 |
}
|
363 |
$zip->close();
|
364 |
// Sending Zip.
|
365 |
-
|
366 |
return '';
|
367 |
}
|
368 |
|
@@ -505,7 +505,7 @@ if ( ! class_exists( 'WCJ_PDF_Invoicing' ) ) :
|
|
505 |
/**
|
506 |
* Generate_pdf_on_init.
|
507 |
*
|
508 |
-
* @version
|
509 |
*/
|
510 |
public function generate_pdf_on_init() {
|
511 |
// Check if all is OK.
|
@@ -514,7 +514,7 @@ if ( ! class_exists( 'WCJ_PDF_Invoicing' ) ) :
|
|
514 |
}
|
515 |
// Get PDF.
|
516 |
$the_invoice = wcj_get_pdf_invoice( $this->order_id, $this->invoice_type_id );
|
517 |
-
$dest = (
|
518 |
if ( 'yes' === wcj_get_option( 'wcj_general_advanced_disable_output_buffer', 'no' ) ) {
|
519 |
ob_clean();
|
520 |
ob_flush();
|
2 |
/**
|
3 |
* Booster for WooCommerce - Module - PDF Invoicing
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/includes
|
8 |
*/
|
329 |
/**
|
330 |
* Get_invoices_zip.
|
331 |
*
|
332 |
+
* @version 6.0.0
|
333 |
* @since 2.5.7
|
334 |
* @todo (maybe) add timestamp to filename
|
335 |
* @todo add `ZipArchive` fallback
|
362 |
}
|
363 |
$zip->close();
|
364 |
// Sending Zip.
|
365 |
+
WC_Download_Handler::download_file_force( $zip_file_path, $zip_file_name );
|
366 |
return '';
|
367 |
}
|
368 |
|
505 |
/**
|
506 |
* Generate_pdf_on_init.
|
507 |
*
|
508 |
+
* @version 6.0.0
|
509 |
*/
|
510 |
public function generate_pdf_on_init() {
|
511 |
// Check if all is OK.
|
514 |
}
|
515 |
// Get PDF.
|
516 |
$the_invoice = wcj_get_pdf_invoice( $this->order_id, $this->invoice_type_id );
|
517 |
+
$dest = ( '1' === $this->save_as_pdf ? 'D' : 'I' );
|
518 |
if ( 'yes' === wcj_get_option( 'wcj_general_advanced_disable_output_buffer', 'no' ) ) {
|
519 |
ob_clean();
|
520 |
ob_flush();
|
includes/class-wcj-product-price-by-formula.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Module - Product Price by Formula
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 2.5.1
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/includes
|
@@ -21,7 +21,7 @@ if ( ! class_exists( 'WCJ_Product_Price_By_Formula' ) ) :
|
|
21 |
/**
|
22 |
* Constructor.
|
23 |
*
|
24 |
-
* @version
|
25 |
* @since 2.5.1
|
26 |
* @todo use WC math library instead of `PHPMathParser`
|
27 |
*/
|
@@ -41,10 +41,9 @@ if ( ! class_exists( 'WCJ_Product_Price_By_Formula' ) ) :
|
|
41 |
add_action( 'save_post_product', array( $this, 'save_meta_box' ), PHP_INT_MAX, 2 );
|
42 |
$wpnonce = isset( $_REQUEST['wcj-cat-nonce'] ) ? wp_verify_nonce( sanitize_key( $_REQUEST['wcj-cat-nonce'] ), 'wcj-cat-nonce' ) : false;
|
43 |
if (
|
44 |
-
$wpnonce &&
|
45 |
( wcj_is_frontend() && 'yes' === wcj_get_option( 'wcj_product_price_by_formula_admin_scope', 'yes' ) ) ||
|
46 |
( 'no' === wcj_get_option( 'wcj_product_price_by_formula_admin_scope', 'yes' ) && ( wcj_is_frontend() || is_admin() ) ) ||
|
47 |
-
isset( $_GET['wcj_create_products_xml'] )
|
48 |
) {
|
49 |
wcj_add_change_price_hooks( $this, wcj_get_module_price_hooks_priority( 'product_price_by_formula' ), false );
|
50 |
}
|
@@ -186,7 +185,7 @@ if ( ! class_exists( 'WCJ_Product_Price_By_Formula' ) ) :
|
|
186 |
/**
|
187 |
* Reset_settings.
|
188 |
*
|
189 |
-
* @version
|
190 |
* @since 5.3.0
|
191 |
*/
|
192 |
public function reset_settings() {
|
@@ -201,7 +200,7 @@ if ( ! class_exists( 'WCJ_Product_Price_By_Formula' ) ) :
|
|
201 |
) {
|
202 |
global $wpdb;
|
203 |
$prefix = '_wcj_product_price_by_formula';
|
204 |
-
$wpdb->query( $wpdb->prepare( 'delete from ' . $wpdb->postmeta . ' where meta_key REGEXP %s', $prefix ) )
|
205 |
}
|
206 |
parent::reset_settings(); // TODO: Change the autogenerated stub.
|
207 |
}
|
2 |
/**
|
3 |
* Booster for WooCommerce - Module - Product Price by Formula
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @since 2.5.1
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/includes
|
21 |
/**
|
22 |
* Constructor.
|
23 |
*
|
24 |
+
* @version 6.0.0
|
25 |
* @since 2.5.1
|
26 |
* @todo use WC math library instead of `PHPMathParser`
|
27 |
*/
|
41 |
add_action( 'save_post_product', array( $this, 'save_meta_box' ), PHP_INT_MAX, 2 );
|
42 |
$wpnonce = isset( $_REQUEST['wcj-cat-nonce'] ) ? wp_verify_nonce( sanitize_key( $_REQUEST['wcj-cat-nonce'] ), 'wcj-cat-nonce' ) : false;
|
43 |
if (
|
|
|
44 |
( wcj_is_frontend() && 'yes' === wcj_get_option( 'wcj_product_price_by_formula_admin_scope', 'yes' ) ) ||
|
45 |
( 'no' === wcj_get_option( 'wcj_product_price_by_formula_admin_scope', 'yes' ) && ( wcj_is_frontend() || is_admin() ) ) ||
|
46 |
+
( $wpnonce && isset( $_GET['wcj_create_products_xml'] ) )
|
47 |
) {
|
48 |
wcj_add_change_price_hooks( $this, wcj_get_module_price_hooks_priority( 'product_price_by_formula' ), false );
|
49 |
}
|
185 |
/**
|
186 |
* Reset_settings.
|
187 |
*
|
188 |
+
* @version 6.0.0
|
189 |
* @since 5.3.0
|
190 |
*/
|
191 |
public function reset_settings() {
|
200 |
) {
|
201 |
global $wpdb;
|
202 |
$prefix = '_wcj_product_price_by_formula';
|
203 |
+
$wpdb->query( $wpdb->prepare( 'delete from ' . $wpdb->postmeta . ' where meta_key REGEXP %s', $prefix ) );// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
|
204 |
}
|
205 |
parent::reset_settings(); // TODO: Change the autogenerated stub.
|
206 |
}
|
includes/class-wcj-products-xml.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Module - Products XML
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 2.5.7
|
7 |
* @author Pluggabl LLC.
|
8 |
* @todo create all files at once (manually and synchronize update)
|
@@ -179,11 +179,14 @@ if ( ! class_exists( 'WCJ_Products_XML' ) ) :
|
|
179 |
/**
|
180 |
* Create_products_xml.
|
181 |
*
|
182 |
-
* @version
|
183 |
* @since 2.5.7
|
184 |
* @param int $file_num defines the file_num.
|
185 |
*/
|
186 |
public function create_products_xml( $file_num ) {
|
|
|
|
|
|
|
187 |
$xml_items = '';
|
188 |
$xml_header_template = wcj_get_option( 'wcj_products_xml_header_' . $file_num, '' );
|
189 |
$xml_footer_template = wcj_get_option( 'wcj_products_xml_footer_' . $file_num, '' );
|
@@ -295,9 +298,10 @@ if ( ! class_exists( 'WCJ_Products_XML' ) ) :
|
|
295 |
}
|
296 |
}
|
297 |
wp_reset_postdata();
|
298 |
-
return
|
299 |
ABSPATH . wcj_get_option( 'wcj_products_xml_file_path_' . $file_num, ( ( '1' === $file_num ) ? 'products.xml' : 'products_' . $file_num . '.xml' ) ),
|
300 |
-
$this->process_shortcode( $xml_header_template ) . $xml_items . $this->process_shortcode( $xml_footer_template )
|
|
|
301 |
);
|
302 |
}
|
303 |
|
2 |
/**
|
3 |
* Booster for WooCommerce - Module - Products XML
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @since 2.5.7
|
7 |
* @author Pluggabl LLC.
|
8 |
* @todo create all files at once (manually and synchronize update)
|
179 |
/**
|
180 |
* Create_products_xml.
|
181 |
*
|
182 |
+
* @version 6.0.0
|
183 |
* @since 2.5.7
|
184 |
* @param int $file_num defines the file_num.
|
185 |
*/
|
186 |
public function create_products_xml( $file_num ) {
|
187 |
+
global $wp_filesystem;
|
188 |
+
require_once ABSPATH . '/wp-admin/includes/file.php';
|
189 |
+
WP_Filesystem();
|
190 |
$xml_items = '';
|
191 |
$xml_header_template = wcj_get_option( 'wcj_products_xml_header_' . $file_num, '' );
|
192 |
$xml_footer_template = wcj_get_option( 'wcj_products_xml_footer_' . $file_num, '' );
|
298 |
}
|
299 |
}
|
300 |
wp_reset_postdata();
|
301 |
+
return $wp_filesystem->put_contents(
|
302 |
ABSPATH . wcj_get_option( 'wcj_products_xml_file_path_' . $file_num, ( ( '1' === $file_num ) ? 'products.xml' : 'products_' . $file_num . '.xml' ) ),
|
303 |
+
$this->process_shortcode( $xml_header_template ) . $xml_items . $this->process_shortcode( $xml_footer_template ),
|
304 |
+
FS_CHMOD_FILE
|
305 |
);
|
306 |
}
|
307 |
|
includes/class-wcj-track-users.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Module - User Tracking
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 3.1.3
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/includes
|
@@ -216,7 +216,7 @@ if ( ! class_exists( 'WCJ_Track_Users' ) ) :
|
|
216 |
/**
|
217 |
* Add_http_referer_to_order.
|
218 |
*
|
219 |
-
* @version
|
220 |
* @since 2.9.1
|
221 |
* @todo add "all orders by referer type" stats
|
222 |
* @param int $order_id defines the order_id.
|
@@ -225,13 +225,15 @@ if ( ! class_exists( 'WCJ_Track_Users' ) ) :
|
|
225 |
global $wpdb;
|
226 |
$table_name = $wpdb->prefix . 'wcj_track_users';
|
227 |
$http_referer = 'N/A';
|
228 |
-
|
|
|
229 |
$user_ip = ( class_exists( 'WC_Geolocation' ) ? WC_Geolocation::get_ip_address() : wcj_get_the_ip() );
|
230 |
-
$result = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}wcj_track_users WHERE ip = %s ORDER BY time DESC", $user_ip ) );
|
231 |
if ( $result ) {
|
232 |
$http_referer = $result->referer;
|
233 |
}
|
234 |
}
|
|
|
235 |
update_post_meta( $order_id, '_wcj_track_users_http_referer', $http_referer );
|
236 |
}
|
237 |
|
@@ -412,7 +414,7 @@ if ( ! class_exists( 'WCJ_Track_Users' ) ) :
|
|
412 |
/**
|
413 |
* Track_users.
|
414 |
*
|
415 |
-
* @version
|
416 |
* @since 2.9.1
|
417 |
* @todo (maybe) customizable `$time_expired`
|
418 |
* @todo (maybe) optionally do not track selected user roles (e.g. admin)
|
@@ -455,7 +457,7 @@ if ( ! class_exists( 'WCJ_Track_Users' ) ) :
|
|
455 |
// HTTP referrer.
|
456 |
$http_referer = ( isset( $_POST['wcj_http_referer'] ) ? sanitize_text_field( wp_unslash( $_POST['wcj_http_referer'] ) ) : 'N/A' );
|
457 |
// Add row to DB table.
|
458 |
-
$wpdb->insert(
|
459 |
$table_name,
|
460 |
array(
|
461 |
'time' => current_time( 'mysql' ),
|
@@ -464,7 +466,7 @@ if ( ! class_exists( 'WCJ_Track_Users' ) ) :
|
|
464 |
'ip' => $user_ip,
|
465 |
'referer' => $http_referer,
|
466 |
)
|
467 |
-
)
|
468 |
die();
|
469 |
}
|
470 |
|
2 |
/**
|
3 |
* Booster for WooCommerce - Module - User Tracking
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @since 3.1.3
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/includes
|
216 |
/**
|
217 |
* Add_http_referer_to_order.
|
218 |
*
|
219 |
+
* @version 6.0.0
|
220 |
* @since 2.9.1
|
221 |
* @todo add "all orders by referer type" stats
|
222 |
* @param int $order_id defines the order_id.
|
225 |
global $wpdb;
|
226 |
$table_name = $wpdb->prefix . 'wcj_track_users';
|
227 |
$http_referer = 'N/A';
|
228 |
+
// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
|
229 |
+
if ( $wpdb->get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s', $table_name ) ) === $table_name ) {
|
230 |
$user_ip = ( class_exists( 'WC_Geolocation' ) ? WC_Geolocation::get_ip_address() : wcj_get_the_ip() );
|
231 |
+
$result = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}wcj_track_users WHERE ip = %s ORDER BY time DESC", $user_ip ) );
|
232 |
if ( $result ) {
|
233 |
$http_referer = $result->referer;
|
234 |
}
|
235 |
}
|
236 |
+
// phpcs:enable
|
237 |
update_post_meta( $order_id, '_wcj_track_users_http_referer', $http_referer );
|
238 |
}
|
239 |
|
414 |
/**
|
415 |
* Track_users.
|
416 |
*
|
417 |
+
* @version 6.0.0
|
418 |
* @since 2.9.1
|
419 |
* @todo (maybe) customizable `$time_expired`
|
420 |
* @todo (maybe) optionally do not track selected user roles (e.g. admin)
|
457 |
// HTTP referrer.
|
458 |
$http_referer = ( isset( $_POST['wcj_http_referer'] ) ? sanitize_text_field( wp_unslash( $_POST['wcj_http_referer'] ) ) : 'N/A' );
|
459 |
// Add row to DB table.
|
460 |
+
$wpdb->insert( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
|
461 |
$table_name,
|
462 |
array(
|
463 |
'time' => current_time( 'mysql' ),
|
466 |
'ip' => $user_ip,
|
467 |
'referer' => $http_referer,
|
468 |
)
|
469 |
+
);
|
470 |
die();
|
471 |
}
|
472 |
|
includes/classes/class-wcj-module-product-by-condition.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Module - Product by Condition
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 3.6.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/classes
|
@@ -83,7 +83,7 @@ if ( ! class_exists( 'WCJ_Module_Product_By_Condition' ) ) :
|
|
83 |
/**
|
84 |
* Get_invisible_products_ids.
|
85 |
*
|
86 |
-
* @version
|
87 |
* @since 4.7.1
|
88 |
*
|
89 |
* @param null $params Get params.
|
@@ -100,7 +100,7 @@ if ( ! class_exists( 'WCJ_Module_Product_By_Condition' ) ) :
|
|
100 |
);
|
101 |
$option_to_check = $params['option_to_check'];
|
102 |
$args = $params['invisible_products_query_args'];
|
103 |
-
$transient_name = 'wcj_' . $this->id . '_' . md5(
|
104 |
$invisible_products = get_transient( $transient_name );
|
105 |
if ( false === $invisible_products ) {
|
106 |
$invisible_products = array();
|
@@ -118,7 +118,7 @@ if ( ! class_exists( 'WCJ_Module_Product_By_Condition' ) ) :
|
|
118 |
/**
|
119 |
* Get_invisible_products_query_args.
|
120 |
*
|
121 |
-
* @version
|
122 |
* @since 4.7.1
|
123 |
*
|
124 |
* @return array
|
@@ -146,7 +146,7 @@ if ( ! class_exists( 'WCJ_Module_Product_By_Condition' ) ) :
|
|
146 |
'post_type' => 'product',
|
147 |
'posts_per_page' => - 1,
|
148 |
'fields' => 'ids',
|
149 |
-
'meta_query' => $meta_query, //phpcs:ignore
|
150 |
);
|
151 |
return $args;
|
152 |
}
|
@@ -154,7 +154,7 @@ if ( ! class_exists( 'WCJ_Module_Product_By_Condition' ) ) :
|
|
154 |
/**
|
155 |
* Delete_invisible_products_transient.
|
156 |
*
|
157 |
-
* @version
|
158 |
* @since 4.7.1
|
159 |
*
|
160 |
* @param null $params Get params.
|
@@ -171,11 +171,11 @@ if ( ! class_exists( 'WCJ_Module_Product_By_Condition' ) ) :
|
|
171 |
if ( 'current_user_roles' === $params['remove_method'] ) {
|
172 |
$option_to_check = $params['option_to_check'];
|
173 |
$args = $params['invisible_products_query_args'];
|
174 |
-
$transient_name = 'wcj_' . $this->id . '_' . md5(
|
175 |
delete_transient( $transient_name );
|
176 |
} elseif ( 'all_roles' === $params['remove_method'] ) {
|
177 |
global $wpdb;
|
178 |
-
$wpdb->query( $wpdb->prepare( "delete from {$wpdb->options} where option_name REGEXP %s", '^_transient_wcj_' . $this->id ) ); //
|
179 |
}
|
180 |
}
|
181 |
|
@@ -305,7 +305,7 @@ if ( ! class_exists( 'WCJ_Module_Product_By_Condition' ) ) :
|
|
305 |
/**
|
306 |
* Save_bulk_and_quick_edit_fields.
|
307 |
*
|
308 |
-
* @version
|
309 |
* @since 3.6.0
|
310 |
* @param int $post_id get post id.
|
311 |
* @param obj|Array $post get post.
|
@@ -320,11 +320,11 @@ if ( ! class_exists( 'WCJ_Module_Product_By_Condition' ) ) :
|
|
320 |
return $post_id;
|
321 |
}
|
322 |
// Check nonce.
|
323 |
-
if ( ! isset( $_REQUEST['woocommerce_quick_edit_nonce'] ) || ! wp_verify_nonce( $_REQUEST['woocommerce_quick_edit_nonce'], 'woocommerce_quick_edit_nonce' ) ) {
|
324 |
return $post_id;
|
325 |
}
|
326 |
// Check bulk or quick edit.
|
327 |
-
if ( ! empty( $_REQUEST['woocommerce_quick_edit'] ) ) {
|
328 |
if ( 'no' === wcj_get_option( 'wcj_' . $this->id . '_admin_quick_edit', 'no' ) ) {
|
329 |
return $post_id;
|
330 |
}
|
2 |
/**
|
3 |
* Booster for WooCommerce - Module - Product by Condition
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @since 3.6.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/classes
|
83 |
/**
|
84 |
* Get_invisible_products_ids.
|
85 |
*
|
86 |
+
* @version 6.0.0
|
87 |
* @since 4.7.1
|
88 |
*
|
89 |
* @param null $params Get params.
|
100 |
);
|
101 |
$option_to_check = $params['option_to_check'];
|
102 |
$args = $params['invisible_products_query_args'];
|
103 |
+
$transient_name = 'wcj_' . $this->id . '_' . md5( wp_json_encode( $args ) . '_' . wp_json_encode( $option_to_check ) );
|
104 |
$invisible_products = get_transient( $transient_name );
|
105 |
if ( false === $invisible_products ) {
|
106 |
$invisible_products = array();
|
118 |
/**
|
119 |
* Get_invisible_products_query_args.
|
120 |
*
|
121 |
+
* @version 6.0.0
|
122 |
* @since 4.7.1
|
123 |
*
|
124 |
* @return array
|
146 |
'post_type' => 'product',
|
147 |
'posts_per_page' => - 1,
|
148 |
'fields' => 'ids',
|
149 |
+
'meta_query' => $meta_query, // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query
|
150 |
);
|
151 |
return $args;
|
152 |
}
|
154 |
/**
|
155 |
* Delete_invisible_products_transient.
|
156 |
*
|
157 |
+
* @version 6.0.0
|
158 |
* @since 4.7.1
|
159 |
*
|
160 |
* @param null $params Get params.
|
171 |
if ( 'current_user_roles' === $params['remove_method'] ) {
|
172 |
$option_to_check = $params['option_to_check'];
|
173 |
$args = $params['invisible_products_query_args'];
|
174 |
+
$transient_name = 'wcj_' . $this->id . '_' . md5( wp_json_encode( $args ) . '_' . wp_json_encode( $option_to_check ) );
|
175 |
delete_transient( $transient_name );
|
176 |
} elseif ( 'all_roles' === $params['remove_method'] ) {
|
177 |
global $wpdb;
|
178 |
+
$wpdb->query( $wpdb->prepare( "delete from {$wpdb->options} where option_name REGEXP %s", '^_transient_wcj_' . $this->id ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
|
179 |
}
|
180 |
}
|
181 |
|
305 |
/**
|
306 |
* Save_bulk_and_quick_edit_fields.
|
307 |
*
|
308 |
+
* @version 6.0.0
|
309 |
* @since 3.6.0
|
310 |
* @param int $post_id get post id.
|
311 |
* @param obj|Array $post get post.
|
320 |
return $post_id;
|
321 |
}
|
322 |
// Check nonce.
|
323 |
+
if ( ! isset( $_REQUEST['woocommerce_quick_edit_nonce'] ) || ! wp_verify_nonce( sanitize_key( wp_unslash( $_REQUEST['woocommerce_quick_edit_nonce'] ) ), 'woocommerce_quick_edit_nonce' ) ) {
|
324 |
return $post_id;
|
325 |
}
|
326 |
// Check bulk or quick edit.
|
327 |
+
if ( ! empty( $_REQUEST['woocommerce_quick_edit'] ) ) {
|
328 |
if ( 'no' === wcj_get_option( 'wcj_' . $this->id . '_admin_quick_edit', 'no' ) ) {
|
329 |
return $post_id;
|
330 |
}
|
includes/classes/class-wcj-module.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce Module
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 2.2.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @todo [dev] maybe should be `abstract` ?
|
@@ -323,7 +323,7 @@ if ( ! class_exists( 'WCJ_Module' ) ) :
|
|
323 |
/**
|
324 |
* Save_meta_box_validate_value.
|
325 |
*
|
326 |
-
* @version
|
327 |
* @since 2.9.1
|
328 |
* @param string $option_value Get option value.
|
329 |
* @param string $option_name Get option name.
|
@@ -341,8 +341,8 @@ if ( ! class_exists( 'WCJ_Module' ) ) :
|
|
341 |
'post_type' => 'product',
|
342 |
'post_status' => 'any',
|
343 |
'posts_per_page' => 1,
|
344 |
-
'meta_key' => '_' . $this->meta_box_validate_value, //phpcs:ignore
|
345 |
-
'meta_value' => 'yes', //phpcs:ignore
|
346 |
'post__not_in' => array( get_the_ID() ),
|
347 |
);
|
348 |
$loop = new WP_Query( $args );
|
@@ -358,23 +358,32 @@ if ( ! class_exists( 'WCJ_Module' ) ) :
|
|
358 |
/**
|
359 |
* Validate_value_add_notice_query_var.
|
360 |
*
|
361 |
-
* @version
|
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(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
368 |
}
|
369 |
|
370 |
/**
|
371 |
* Validate_value_admin_notices.
|
372 |
*
|
373 |
-
* @version
|
374 |
* @since 2.9.1
|
375 |
*/
|
376 |
public function validate_value_admin_notices() {
|
377 |
-
|
|
|
378 |
return;
|
379 |
}
|
380 |
echo '<div class="error"><p><div class="message">' .
|
@@ -458,7 +467,7 @@ if ( ! class_exists( 'WCJ_Module' ) ) :
|
|
458 |
/**
|
459 |
* Save_meta_box_value.
|
460 |
*
|
461 |
-
* @version
|
462 |
* @since 2.5.3
|
463 |
* @param string $option_value Get option value.
|
464 |
* @param string $option_name Get option name.
|
@@ -476,8 +485,8 @@ if ( ! class_exists( 'WCJ_Module' ) ) :
|
|
476 |
'post_type' => 'product',
|
477 |
'post_status' => 'any',
|
478 |
'posts_per_page' => 3,
|
479 |
-
'meta_key' => '_' . $this->co, //phpcs:ignore
|
480 |
-
'meta_value' => 'yes', //phpcs:ignore
|
481 |
'post__not_in' => array( get_the_ID() ),
|
482 |
);
|
483 |
$loop = new WP_Query( $args );
|
@@ -505,13 +514,13 @@ if ( ! class_exists( 'WCJ_Module' ) ) :
|
|
505 |
/**
|
506 |
* Admin_notices.
|
507 |
*
|
508 |
-
* @version
|
509 |
* @since 2.5.3
|
510 |
*/
|
511 |
public function admin_notices() {
|
512 |
$_get = array();
|
513 |
parse_str( isset( $_SERVER['QUERY_STRING'] ) ? sanitize_text_field( wp_unslash( $_SERVER['QUERY_STRING'] ) ) : '', $_get );
|
514 |
-
if ( !
|
515 |
return;
|
516 |
}
|
517 |
echo '<div class="error"><p><div class="message">' . wp_kses_post( $this->get_the_notice() ) . '</div></p></div>';
|
@@ -616,7 +625,7 @@ if ( ! class_exists( 'WCJ_Module' ) ) :
|
|
616 |
/**
|
617 |
* Save_meta_box.
|
618 |
*
|
619 |
-
* @version
|
620 |
* @since 2.5.0
|
621 |
* @todo (maybe) also order_id in `$the_post_id = ...`
|
622 |
* @param int $post_id Get post id.
|
@@ -624,7 +633,7 @@ if ( ! class_exists( 'WCJ_Module' ) ) :
|
|
624 |
*/
|
625 |
public function save_meta_box( $post_id, $__post ) {
|
626 |
// Check that we are saving with current metabox displayed.
|
627 |
-
if ( ! isset( $_POST[ 'woojetpack_' . $this->id . '_save_post' ] ) ) {
|
628 |
return;
|
629 |
}
|
630 |
// Setup post (just in case...).
|
2 |
/**
|
3 |
* Booster for WooCommerce Module
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @since 2.2.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @todo [dev] maybe should be `abstract` ?
|
323 |
/**
|
324 |
* Save_meta_box_validate_value.
|
325 |
*
|
326 |
+
* @version 6.0.0
|
327 |
* @since 2.9.1
|
328 |
* @param string $option_value Get option value.
|
329 |
* @param string $option_name Get option name.
|
341 |
'post_type' => 'product',
|
342 |
'post_status' => 'any',
|
343 |
'posts_per_page' => 1,
|
344 |
+
'meta_key' => '_' . $this->meta_box_validate_value, // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key
|
345 |
+
'meta_value' => 'yes', // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_value
|
346 |
'post__not_in' => array( get_the_ID() ),
|
347 |
);
|
348 |
$loop = new WP_Query( $args );
|
358 |
/**
|
359 |
* Validate_value_add_notice_query_var.
|
360 |
*
|
361 |
+
* @version 6.0.0
|
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(
|
368 |
+
add_query_arg(
|
369 |
+
array(
|
370 |
+
'wcj_' . $this->id . '_meta_box_admin_notice' => true,
|
371 |
+
'wcj_' . $this->id . '_meta_box_admin_notice_nonce' => wp_create_nonce( 'wcj_' . $this->id . '_meta_box_admin_notice' ),
|
372 |
+
),
|
373 |
+
$location
|
374 |
+
)
|
375 |
+
);
|
376 |
}
|
377 |
|
378 |
/**
|
379 |
* Validate_value_admin_notices.
|
380 |
*
|
381 |
+
* @version 6.0.0
|
382 |
* @since 2.9.1
|
383 |
*/
|
384 |
public function validate_value_admin_notices() {
|
385 |
+
$wpnonce = isset( $_REQUEST[ 'wcj_' . $this->id . '_meta_box_admin_notice_nonce' ] ) ? wp_verify_nonce( sanitize_key( $_REQUEST[ 'wcj_' . $this->id . '_meta_box_admin_notice_nonce' ] ), 'wcj_' . $this->id . '_meta_box_admin_notice' ) : false;
|
386 |
+
if ( ! $wpnonce || ! isset( $_GET[ 'wcj_' . $this->id . '_meta_box_admin_notice' ] ) ) {
|
387 |
return;
|
388 |
}
|
389 |
echo '<div class="error"><p><div class="message">' .
|
467 |
/**
|
468 |
* Save_meta_box_value.
|
469 |
*
|
470 |
+
* @version 6.0.0
|
471 |
* @since 2.5.3
|
472 |
* @param string $option_value Get option value.
|
473 |
* @param string $option_name Get option name.
|
485 |
'post_type' => 'product',
|
486 |
'post_status' => 'any',
|
487 |
'posts_per_page' => 3,
|
488 |
+
'meta_key' => '_' . $this->co, // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key
|
489 |
+
'meta_value' => 'yes', // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_value
|
490 |
'post__not_in' => array( get_the_ID() ),
|
491 |
);
|
492 |
$loop = new WP_Query( $args );
|
514 |
/**
|
515 |
* Admin_notices.
|
516 |
*
|
517 |
+
* @version 6.0.0
|
518 |
* @since 2.5.3
|
519 |
*/
|
520 |
public function admin_notices() {
|
521 |
$_get = array();
|
522 |
parse_str( isset( $_SERVER['QUERY_STRING'] ) ? sanitize_text_field( wp_unslash( $_SERVER['QUERY_STRING'] ) ) : '', $_get );
|
523 |
+
if ( ! isset( $_get[ 'wcj_' . $this->id . '_admin_notice' ] ) ) {
|
524 |
return;
|
525 |
}
|
526 |
echo '<div class="error"><p><div class="message">' . wp_kses_post( $this->get_the_notice() ) . '</div></p></div>';
|
625 |
/**
|
626 |
* Save_meta_box.
|
627 |
*
|
628 |
+
* @version 6.0.0
|
629 |
* @since 2.5.0
|
630 |
* @todo (maybe) also order_id in `$the_post_id = ...`
|
631 |
* @param int $post_id Get post id.
|
633 |
*/
|
634 |
public function save_meta_box( $post_id, $__post ) {
|
635 |
// Check that we are saving with current metabox displayed.
|
636 |
+
if ( ! isset( $_POST[ 'woojetpack_' . $this->id . '_save_post' ] ) ) {
|
637 |
return;
|
638 |
}
|
639 |
// Setup post (just in case...).
|
includes/classes/class-wcj-pdf-invoice.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce PDF Invoice
|
4 |
*
|
5 |
-
* @version
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/classes
|
8 |
*/
|
@@ -29,7 +29,8 @@ if ( ! class_exists( 'WCJ_PDF_Invoice' ) ) :
|
|
29 |
* @param int $order_id Get order id.
|
30 |
* @param string $invoice_type Get invoice type.
|
31 |
*/
|
32 |
-
public function __construct( $order_id, $invoice_type ) {
|
|
|
33 |
parent::__construct( $order_id, $invoice_type );
|
34 |
}
|
35 |
|
@@ -183,7 +184,7 @@ if ( ! class_exists( 'WCJ_PDF_Invoice' ) ) :
|
|
183 |
/**
|
184 |
* Maybe_replace_tcpdf_method_params.
|
185 |
*
|
186 |
-
* @version
|
187 |
* @since 3.6.0
|
188 |
* @param mixed $html Get pdf html.
|
189 |
* @param mixed $pdf Get pdfs.
|
@@ -197,7 +198,7 @@ if ( ! class_exists( 'WCJ_PDF_Invoice' ) ) :
|
|
197 |
while ( false !== $start ) {
|
198 |
$params_start = $start + $start_str_length;
|
199 |
$params_length = strpos( $html, $end_str ) - $params_start;
|
200 |
-
$params = $pdf->serializeTCPDFtagParameters(
|
201 |
$html = substr_replace( $html, 'params="' . $params . '"', $start, $start_str_length + $params_length + $end_str_length );
|
202 |
}
|
203 |
return $html;
|
@@ -248,11 +249,14 @@ if ( ! class_exists( 'WCJ_PDF_Invoice' ) ) :
|
|
248 |
/**
|
249 |
* Get_pdf.
|
250 |
*
|
251 |
-
* @version
|
252 |
* @todo [dev] (maybe) `die()` on success
|
253 |
* @param string $dest define dest.
|
254 |
*/
|
255 |
public function get_pdf( $dest ) {
|
|
|
|
|
|
|
256 |
$pdf = $this->prepare_pdf();
|
257 |
$html = $this->get_html( $this->order_id, $pdf );
|
258 |
$styling = '<style>' . wcj_get_option(
|
@@ -264,7 +268,7 @@ if ( ! class_exists( 'WCJ_PDF_Invoice' ) ) :
|
|
264 |
$file_name = $this->get_file_name();
|
265 |
if ( 'F' === $dest ) {
|
266 |
$file_path = wcj_get_invoicing_temp_dir() . '/' . $file_name;
|
267 |
-
if ( !
|
268 |
return null;
|
269 |
}
|
270 |
return $file_path;
|
@@ -284,23 +288,13 @@ if ( ! class_exists( 'WCJ_PDF_Invoice' ) ) :
|
|
284 |
echo $result_pdf; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
285 |
} else {
|
286 |
$file_path = wcj_get_invoicing_temp_dir() . '/' . $file_name;
|
287 |
-
if ( !
|
288 |
return null;
|
289 |
}
|
290 |
if ( apply_filters( 'wcj_invoicing_header_content_length', true ) ) {
|
291 |
header( 'Content-Length: ' . filesize( $file_path ) );
|
292 |
}
|
293 |
-
|
294 |
-
$fp = fopen( $file_path, 'r' ); //phpcs:ignore
|
295 |
-
if ( false !== ( $fp ) ) {
|
296 |
-
while ( ! feof( $fp ) ) {
|
297 |
-
echo fread( $fp, 65536 ); //phpcs:ignore
|
298 |
-
flush(); // this is essential for large downloads.
|
299 |
-
}
|
300 |
-
fclose( $fp ); //phpcs:ignore
|
301 |
-
} else {
|
302 |
-
die( esc_html__( 'Unexpected error', 'woocommerce-jetpack' ) );
|
303 |
-
}
|
304 |
}
|
305 |
}
|
306 |
return null;
|
2 |
/**
|
3 |
* Booster for WooCommerce PDF Invoice
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/classes
|
8 |
*/
|
29 |
* @param int $order_id Get order id.
|
30 |
* @param string $invoice_type Get invoice type.
|
31 |
*/
|
32 |
+
public function __construct( $order_id, $invoice_type ) {
|
33 |
+
$this->wcj_invoice_type = $invoice_type;
|
34 |
parent::__construct( $order_id, $invoice_type );
|
35 |
}
|
36 |
|
184 |
/**
|
185 |
* Maybe_replace_tcpdf_method_params.
|
186 |
*
|
187 |
+
* @version 6.0.0
|
188 |
* @since 3.6.0
|
189 |
* @param mixed $html Get pdf html.
|
190 |
* @param mixed $pdf Get pdfs.
|
198 |
while ( false !== $start ) {
|
199 |
$params_start = $start + $start_str_length;
|
200 |
$params_length = strpos( $html, $end_str ) - $params_start;
|
201 |
+
$params = $pdf->serializeTCPDFtagParameters( json_decode( substr( $html, $params_start, $params_length ) ) );
|
202 |
$html = substr_replace( $html, 'params="' . $params . '"', $start, $start_str_length + $params_length + $end_str_length );
|
203 |
}
|
204 |
return $html;
|
249 |
/**
|
250 |
* Get_pdf.
|
251 |
*
|
252 |
+
* @version 6.0.0
|
253 |
* @todo [dev] (maybe) `die()` on success
|
254 |
* @param string $dest define dest.
|
255 |
*/
|
256 |
public function get_pdf( $dest ) {
|
257 |
+
global $wp_filesystem;
|
258 |
+
require_once ABSPATH . '/wp-admin/includes/file.php';
|
259 |
+
WP_Filesystem();
|
260 |
$pdf = $this->prepare_pdf();
|
261 |
$html = $this->get_html( $this->order_id, $pdf );
|
262 |
$styling = '<style>' . wcj_get_option(
|
268 |
$file_name = $this->get_file_name();
|
269 |
if ( 'F' === $dest ) {
|
270 |
$file_path = wcj_get_invoicing_temp_dir() . '/' . $file_name;
|
271 |
+
if ( ! $wp_filesystem->put_contents( $file_path, $result_pdf, FS_CHMOD_FILE ) ) {
|
272 |
return null;
|
273 |
}
|
274 |
return $file_path;
|
288 |
echo $result_pdf; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
289 |
} else {
|
290 |
$file_path = wcj_get_invoicing_temp_dir() . '/' . $file_name;
|
291 |
+
if ( ! $wp_filesystem->put_contents( $file_path, $result_pdf, FS_CHMOD_FILE ) ) {
|
292 |
return null;
|
293 |
}
|
294 |
if ( apply_filters( 'wcj_invoicing_header_content_length', true ) ) {
|
295 |
header( 'Content-Length: ' . filesize( $file_path ) );
|
296 |
}
|
297 |
+
echo $wp_filesystem->get_contents( $file_path ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
298 |
}
|
299 |
}
|
300 |
return null;
|
includes/classes/class-wcj-shortcodes.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Shortcodes
|
4 |
*
|
5 |
-
* @version
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/classes
|
8 |
*/
|
@@ -91,7 +91,7 @@ if ( ! class_exists( 'WCJ_Shortcodes' ) ) :
|
|
91 |
/**
|
92 |
* Wcj_shortcode.
|
93 |
*
|
94 |
-
* @version
|
95 |
* @todo `time` - weekly, e.g. 8:00-19:59;8:00-19:59;8:00-19:59;8:00-19:59;8:00-9:59,12:00-17:59;-;-;
|
96 |
* @todo (maybe) - `return $atts['on_empty'];` everywhere instead of `return '';`
|
97 |
* @todo (maybe) - add `$atts['function']` and `$atts['function_args']` - if set, will be run on shortcode's result
|
@@ -259,11 +259,12 @@ if ( ! class_exists( 'WCJ_Shortcodes' ) ) :
|
|
259 |
}
|
260 |
|
261 |
// Check if billing country by arg is ok.
|
|
|
262 |
if ( '' !== $atts['billing_country'] ) {
|
263 |
-
if ( ! isset( $_GET['order_id'] ) ) {
|
264 |
return '';
|
265 |
}
|
266 |
-
$order_id = sanitize_text_field( wp_unslash( $_GET['order_id'] ) );
|
267 |
$orders = new WC_Order( $order_id );
|
268 |
$billing_contry = $orders->get_billing_country();
|
269 |
if ( ! isset( $billing_contry ) ) {
|
@@ -277,10 +278,10 @@ if ( ! class_exists( 'WCJ_Shortcodes' ) ) :
|
|
277 |
}
|
278 |
// Check if billing country by arg is ok (not in...).
|
279 |
if ( '' !== $atts['not_billing_country'] ) {
|
280 |
-
if ( ! isset( $_GET['order_id'] ) ) {
|
281 |
return '';
|
282 |
}
|
283 |
-
$order_id = sanitize_text_field( wp_unslash( $_GET['order_id'] ) );
|
284 |
$orders = new WC_Order( $order_id );
|
285 |
$billing_contry = $orders->get_billing_country();
|
286 |
if ( isset( $billing_contry ) ) {
|
@@ -293,21 +294,22 @@ if ( ! class_exists( 'WCJ_Shortcodes' ) ) :
|
|
293 |
|
294 |
// Check if payment method by arg is ok.
|
295 |
if ( '' !== $atts['payment_method'] ) {
|
296 |
-
if ( ! isset( $_GET['payment_method'] ) ) {
|
297 |
return '';
|
298 |
}
|
299 |
-
if ( ! in_array( $_GET['payment_method'], $this->custom_explode( $atts['payment_method'] ), true ) ) {
|
300 |
return '';
|
301 |
}
|
302 |
}
|
303 |
// Check if payment method by arg is ok (not in...).
|
304 |
if ( '' !== $atts['not_payment_method'] ) {
|
305 |
-
if ( isset( $_GET['payment_method'] ) ) {
|
306 |
-
if ( in_array( $_GET['payment_method'], $this->custom_explode( $atts['not_payment_method'] ), true ) ) {
|
307 |
return '';
|
308 |
}
|
309 |
}
|
310 |
}
|
|
|
311 |
|
312 |
// Additional (child class specific) checks.
|
313 |
if ( ! $this->extra_check( $atts ) ) {
|
2 |
/**
|
3 |
* Booster for WooCommerce - Shortcodes
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/classes
|
8 |
*/
|
91 |
/**
|
92 |
* Wcj_shortcode.
|
93 |
*
|
94 |
+
* @version 6.0.0
|
95 |
* @todo `time` - weekly, e.g. 8:00-19:59;8:00-19:59;8:00-19:59;8:00-19:59;8:00-9:59,12:00-17:59;-;-;
|
96 |
* @todo (maybe) - `return $atts['on_empty'];` everywhere instead of `return '';`
|
97 |
* @todo (maybe) - add `$atts['function']` and `$atts['function_args']` - if set, will be run on shortcode's result
|
259 |
}
|
260 |
|
261 |
// Check if billing country by arg is ok.
|
262 |
+
// phpcs:disable WordPress.Security.NonceVerification
|
263 |
if ( '' !== $atts['billing_country'] ) {
|
264 |
+
if ( ! isset( $_GET['order_id'] ) ) {
|
265 |
return '';
|
266 |
}
|
267 |
+
$order_id = sanitize_text_field( wp_unslash( $_GET['order_id'] ) );
|
268 |
$orders = new WC_Order( $order_id );
|
269 |
$billing_contry = $orders->get_billing_country();
|
270 |
if ( ! isset( $billing_contry ) ) {
|
278 |
}
|
279 |
// Check if billing country by arg is ok (not in...).
|
280 |
if ( '' !== $atts['not_billing_country'] ) {
|
281 |
+
if ( ! isset( $_GET['order_id'] ) ) {
|
282 |
return '';
|
283 |
}
|
284 |
+
$order_id = sanitize_text_field( wp_unslash( $_GET['order_id'] ) );
|
285 |
$orders = new WC_Order( $order_id );
|
286 |
$billing_contry = $orders->get_billing_country();
|
287 |
if ( isset( $billing_contry ) ) {
|
294 |
|
295 |
// Check if payment method by arg is ok.
|
296 |
if ( '' !== $atts['payment_method'] ) {
|
297 |
+
if ( ! isset( $_GET['payment_method'] ) ) {
|
298 |
return '';
|
299 |
}
|
300 |
+
if ( ! in_array( $_GET['payment_method'], $this->custom_explode( $atts['payment_method'] ), true ) ) {
|
301 |
return '';
|
302 |
}
|
303 |
}
|
304 |
// Check if payment method by arg is ok (not in...).
|
305 |
if ( '' !== $atts['not_payment_method'] ) {
|
306 |
+
if ( isset( $_GET['payment_method'] ) ) {
|
307 |
+
if ( in_array( $_GET['payment_method'], $this->custom_explode( $atts['not_payment_method'] ), true ) ) {
|
308 |
return '';
|
309 |
}
|
310 |
}
|
311 |
}
|
312 |
+
// phpcs:enable WordPress.Security.NonceVerification
|
313 |
|
314 |
// Additional (child class specific) checks.
|
315 |
if ( ! $this->extra_check( $atts ) ) {
|
includes/core/wcj-loader.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Core - Loader
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 3.2.4
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/core
|
@@ -14,7 +14,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
14 |
|
15 |
// Debug Mode.
|
16 |
if ( 'yes' === wcj_get_option( 'wcj_debug_tools_enabled', 'no' ) && 'yes' === wcj_get_option( 'wcj_debuging_enabled', 'no' ) ) {
|
17 |
-
error_reporting( E_ALL ); //phpcs:ignore
|
18 |
}
|
19 |
|
20 |
if ( ! defined( 'WCJ_FREE_PLUGIN_PATH' ) ) {
|
2 |
/**
|
3 |
* Booster for WooCommerce - Core - Loader
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @since 3.2.4
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/core
|
14 |
|
15 |
// Debug Mode.
|
16 |
if ( 'yes' === wcj_get_option( 'wcj_debug_tools_enabled', 'no' ) && 'yes' === wcj_get_option( 'wcj_debuging_enabled', 'no' ) ) {
|
17 |
+
error_reporting( E_ALL ); // phpcs:ignore WordPress.PHP
|
18 |
}
|
19 |
|
20 |
if ( ! defined( 'WCJ_FREE_PLUGIN_PATH' ) ) {
|
includes/css/images/ui-bg_flat_0_aaaaaa_40x100.png
ADDED
Binary file
|
includes/css/images/ui-bg_flat_75_ffffff_40x100.png
ADDED
Binary file
|
includes/css/images/ui-bg_glass_55_fbf9ee_1x400.png
ADDED
Binary file
|
includes/css/images/ui-bg_glass_65_ffffff_1x400.png
ADDED
Binary file
|
includes/css/images/ui-bg_glass_75_dadada_1x400.png
ADDED
Binary file
|
includes/css/images/ui-bg_glass_75_e6e6e6_1x400.png
ADDED
Binary file
|
includes/css/images/ui-bg_glass_95_fef1ec_1x400.png
ADDED
Binary file
|
includes/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png
ADDED
Binary file
|
includes/css/images/ui-icons_222222_256x240.png
ADDED
Binary file
|
includes/css/images/ui-icons_2e83ff_256x240.png
ADDED
Binary file
|
includes/css/images/ui-icons_454545_256x240.png
ADDED
Binary file
|
includes/css/images/ui-icons_888888_256x240.png
ADDED
Binary file
|
includes/css/images/ui-icons_cd0a0a_256x240.png
ADDED
Binary file
|
includes/css/wcj-admin.css
CHANGED
@@ -321,4 +321,33 @@ img.wcj-rocket-icon:hover {
|
|
321 |
|
322 |
.wcj-row td {
|
323 |
line-break: anywhere;
|
324 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
321 |
|
322 |
.wcj-row td {
|
323 |
line-break: anywhere;
|
324 |
+
}
|
325 |
+
|
326 |
+
/* Booster : Reports - Start */
|
327 |
+
.wcj-reports-wide .postbox .stats_range ul li.custom h4 {
|
328 |
+
margin: 0;
|
329 |
+
}
|
330 |
+
.wcj-reports-wide .postbox .stats_range ul li.custom form input.search_product {
|
331 |
+
margin: 0 10px 0 0;
|
332 |
+
background: 0 0 !important;
|
333 |
+
border: 0 !important;
|
334 |
+
color: #777;
|
335 |
+
box-shadow: none;
|
336 |
+
}
|
337 |
+
.wcj-reports-wide .postbox .chart-with-sidebar .chart-sidebar{
|
338 |
+
padding-bottom: 12px;
|
339 |
+
}
|
340 |
+
.wcj-reports-wide .widefat .wcj-row th, .woocommerce-reports-wrap .widefat .wcj-row th{
|
341 |
+
border-bottom: 1px solid #c3c4c7;
|
342 |
+
background: #fff;
|
343 |
+
font-weight: bold;
|
344 |
+
}
|
345 |
+
.wcj-reports-wide .widefat .wcj-row th span.woocommerce-Price-amount.amount{
|
346 |
+
line-height: 1.2em;
|
347 |
+
color: #464646;
|
348 |
+
font-weight: 400;
|
349 |
+
font-family: HelveticaNeue-Light,"Helvetica Neue Light","Helvetica Neue",sans-serif;
|
350 |
+
font-size: 1.618em;
|
351 |
+
}
|
352 |
+
|
353 |
+
/* Booster : Reports - End */
|
includes/emails/class-wc-email-wcj-custom.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
*
|
5 |
* An email sent to recipient list when selected triggers are called.
|
6 |
*
|
7 |
-
* @version
|
8 |
* @since 2.3.9
|
9 |
* @author Pluggabl LLC.
|
10 |
* @extends WC_Email
|
@@ -97,7 +97,7 @@ if ( ! class_exists( 'WC_Email_WCJ_Custom' ) ) :
|
|
97 |
/**
|
98 |
* Proxy to parent's get_option and attempt to localize the result using gettext.
|
99 |
*
|
100 |
-
* @version
|
101 |
* @since 2.4.1
|
102 |
* @param string $key posted key.
|
103 |
* @param mixed $empty_value get empty value.
|
@@ -106,7 +106,7 @@ if ( ! class_exists( 'WC_Email_WCJ_Custom' ) ) :
|
|
106 |
public function get_option( $key, $empty_value = null ) {
|
107 |
$grandparent = get_parent_class( 'WC_Email' );
|
108 |
$value = $grandparent::get_option( $key, $empty_value );
|
109 |
-
return ( is_array( $value ) ) ? $value : apply_filters( 'woocommerce_email_get_option',
|
110 |
}
|
111 |
|
112 |
/**
|
4 |
*
|
5 |
* An email sent to recipient list when selected triggers are called.
|
6 |
*
|
7 |
+
* @version 6.0.0
|
8 |
* @since 2.3.9
|
9 |
* @author Pluggabl LLC.
|
10 |
* @extends WC_Email
|
97 |
/**
|
98 |
* Proxy to parent's get_option and attempt to localize the result using gettext.
|
99 |
*
|
100 |
+
* @version 6.0.0
|
101 |
* @since 2.4.1
|
102 |
* @param string $key posted key.
|
103 |
* @param mixed $empty_value get empty value.
|
106 |
public function get_option( $key, $empty_value = null ) {
|
107 |
$grandparent = get_parent_class( 'WC_Email' );
|
108 |
$value = $grandparent::get_option( $key, $empty_value );
|
109 |
+
return ( is_array( $value ) ) ? $value : apply_filters( 'woocommerce_email_get_option', $value, $this, $value, $key, $empty_value );
|
110 |
}
|
111 |
|
112 |
/**
|
includes/emails/email-html.php
CHANGED
@@ -1,4 +1,13 @@
|
|
1 |
-
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
<h1>Email</h1>
|
3 |
<p>
|
4 |
<table>
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Booster for WooCommerce - Custom Email HTML Template
|
4 |
+
*
|
5 |
+
* @version 6.0.0
|
6 |
+
* @author Pluggabl LLC.
|
7 |
+
* @package Booster_For_WooCommerce/includes/email
|
8 |
+
*/
|
9 |
+
|
10 |
+
?>
|
11 |
<h1>Email</h1>
|
12 |
<p>
|
13 |
<table>
|
includes/emails/email-plain.php
CHANGED
@@ -1,4 +1,13 @@
|
|
1 |
-
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
Order Date: [wcj_order_date]
|
3 |
Order Nr.: [wcj_order_number]
|
4 |
Buyer: [wcj_order_billing_address]
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Booster for WooCommerce - Custom Email Plain Template
|
4 |
+
*
|
5 |
+
* @version 6.0.0
|
6 |
+
* @author Pluggabl LLC.
|
7 |
+
* @package Booster_For_WooCommerce/includes/email
|
8 |
+
*/
|
9 |
+
|
10 |
+
?>
|
11 |
Order Date: [wcj_order_date]
|
12 |
Order Nr.: [wcj_order_number]
|
13 |
Buyer: [wcj_order_billing_address]
|
includes/exchange-rates/class-wcj-exchange-rates.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce Exchange Rates
|
4 |
*
|
5 |
-
* @version
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/includes
|
8 |
*/
|
@@ -37,29 +37,35 @@ if ( ! class_exists( 'WCJ_Exchange_Rates' ) ) :
|
|
37 |
/**
|
38 |
* Wcj_ajax_get_exchange_rates_average.
|
39 |
*
|
40 |
-
* @version
|
41 |
* @since 3.2.2
|
42 |
*/
|
43 |
public function wcj_ajax_get_exchange_rates_average() {
|
44 |
-
$
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
|
|
|
|
|
|
|
|
49 |
die();
|
50 |
}
|
51 |
|
52 |
/**
|
53 |
* Register_script.
|
54 |
*
|
55 |
-
* @version
|
56 |
*/
|
57 |
public function register_script() {
|
|
|
58 |
if (
|
59 |
-
|
|
|
60 |
&&
|
61 |
in_array(
|
62 |
-
$_GET['section'],
|
63 |
array(
|
64 |
'multicurrency',
|
65 |
'multicurrency_base_price',
|
@@ -86,13 +92,15 @@ if ( ! class_exists( 'WCJ_Exchange_Rates' ) ) :
|
|
86 |
/**
|
87 |
* Enqueue_exchange_rates_script.
|
88 |
*
|
89 |
-
* @version
|
90 |
*/
|
91 |
public function enqueue_exchange_rates_script() {
|
|
|
92 |
if (
|
93 |
-
|
|
|
94 |
in_array(
|
95 |
-
$_GET['section'],
|
96 |
array(
|
97 |
'multicurrency',
|
98 |
'multicurrency_base_price',
|
@@ -107,9 +115,9 @@ if ( ! class_exists( 'WCJ_Exchange_Rates' ) ) :
|
|
107 |
wp_enqueue_script( 'wcj-exchange-rates-ajax' );
|
108 |
}
|
109 |
if (
|
110 |
-
isset( $_GET['report'] ) &&
|
111 |
in_array(
|
112 |
-
$_GET['report'],
|
113 |
array(
|
114 |
'booster_monthly_sales',
|
115 |
),
|
@@ -122,6 +130,7 @@ if ( ! class_exists( 'WCJ_Exchange_Rates' ) ) :
|
|
122 |
'ajax_object',
|
123 |
array(
|
124 |
'ajax_url' => admin_url( 'admin-ajax.php' ),
|
|
|
125 |
)
|
126 |
);
|
127 |
}
|
2 |
/**
|
3 |
* Booster for WooCommerce Exchange Rates
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/includes
|
8 |
*/
|
37 |
/**
|
38 |
* Wcj_ajax_get_exchange_rates_average.
|
39 |
*
|
40 |
+
* @version 6.0.0
|
41 |
* @since 3.2.2
|
42 |
*/
|
43 |
public function wcj_ajax_get_exchange_rates_average() {
|
44 |
+
$wpnonce = isset( $_POST['wpnonce'] ) ? wp_verify_nonce( sanitize_key( $_POST['wpnonce'] ), 'ajax-nonce' ) : false;
|
45 |
+
if ( ! $wpnonce ) {
|
46 |
+
die();
|
47 |
+
}
|
48 |
+
$currency_from = isset( $_POST['wcj_currency_from'] ) ? sanitize_text_field( wp_unslash( $_POST['wcj_currency_from'] ) ) : '';
|
49 |
+
$currency_to = isset( $_POST['wcj_currency_to'] ) ? sanitize_text_field( wp_unslash( $_POST['wcj_currency_to'] ) ) : '';
|
50 |
+
$start_date = isset( $_POST['wcj_start_date'] ) ? sanitize_text_field( wp_unslash( $_POST['wcj_start_date'] ) ) : '';
|
51 |
+
$end_date = isset( $_POST['wcj_end_date'] ) ? sanitize_text_field( wp_unslash( $_POST['wcj_end_date'] ) ) : '';
|
52 |
+
echo esc_html( wcj_currencyconverterapi_io_get_exchange_rate_average( $currency_from, $currency_to, $start_date, $end_date ) );
|
53 |
die();
|
54 |
}
|
55 |
|
56 |
/**
|
57 |
* Register_script.
|
58 |
*
|
59 |
+
* @version 6.0.0
|
60 |
*/
|
61 |
public function register_script() {
|
62 |
+
$wpnonce = isset( $_REQUEST['wcj-cat-nonce'] ) ? wp_verify_nonce( sanitize_key( $_REQUEST['wcj-cat-nonce'] ), 'wcj-cat-nonce' ) : false;
|
63 |
if (
|
64 |
+
$wpnonce &&
|
65 |
+
isset( $_GET['section'] )
|
66 |
&&
|
67 |
in_array(
|
68 |
+
$_GET['section'],
|
69 |
array(
|
70 |
'multicurrency',
|
71 |
'multicurrency_base_price',
|
92 |
/**
|
93 |
* Enqueue_exchange_rates_script.
|
94 |
*
|
95 |
+
* @version 6.0.0
|
96 |
*/
|
97 |
public function enqueue_exchange_rates_script() {
|
98 |
+
$wpnonce = isset( $_REQUEST['wcj-cat-nonce'] ) ? wp_verify_nonce( sanitize_key( $_REQUEST['wcj-cat-nonce'] ), 'wcj-cat-nonce' ) : false;
|
99 |
if (
|
100 |
+
$wpnonce &&
|
101 |
+
isset( $_GET['section'] ) &&
|
102 |
in_array(
|
103 |
+
$_GET['section'],
|
104 |
array(
|
105 |
'multicurrency',
|
106 |
'multicurrency_base_price',
|
115 |
wp_enqueue_script( 'wcj-exchange-rates-ajax' );
|
116 |
}
|
117 |
if (
|
118 |
+
isset( $_GET['report'] ) &&
|
119 |
in_array(
|
120 |
+
$_GET['report'],
|
121 |
array(
|
122 |
'booster_monthly_sales',
|
123 |
),
|
130 |
'ajax_object',
|
131 |
array(
|
132 |
'ajax_url' => admin_url( 'admin-ajax.php' ),
|
133 |
+
'wpnonce' => wp_create_nonce( 'ajax-nonce' ),
|
134 |
)
|
135 |
);
|
136 |
}
|
includes/export/class-wcj-exporter-customers.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce Exporter Customers
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 2.5.9
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/includes
|
@@ -34,7 +34,7 @@ if ( ! class_exists( 'WCJ_Exporter_Customers' ) ) :
|
|
34 |
/**
|
35 |
* Export_customers.
|
36 |
*
|
37 |
-
* @version
|
38 |
* @since 2.4.8
|
39 |
* @param array $fields_helper defines the fields.
|
40 |
*/
|
@@ -86,7 +86,7 @@ if ( ! class_exists( 'WCJ_Exporter_Customers' ) ) :
|
|
86 |
$row[] = $customer->last_name;
|
87 |
break;
|
88 |
case 'customer-debug':
|
89 |
-
$row[] =
|
90 |
break;
|
91 |
}
|
92 |
}
|
2 |
/**
|
3 |
* Booster for WooCommerce Exporter Customers
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @since 2.5.9
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/includes
|
34 |
/**
|
35 |
* Export_customers.
|
36 |
*
|
37 |
+
* @version 6.0.0
|
38 |
* @since 2.4.8
|
39 |
* @param array $fields_helper defines the fields.
|
40 |
*/
|
86 |
$row[] = $customer->last_name;
|
87 |
break;
|
88 |
case 'customer-debug':
|
89 |
+
$row[] = wp_json_encode( $customer );
|
90 |
break;
|
91 |
}
|
92 |
}
|
includes/export/class-wcj-exporter-orders.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce Exporter Orders
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 2.5.9
|
7 |
* @author Pluggabl LLC.
|
8 |
* @todo filter export by date
|
@@ -35,7 +35,7 @@ if ( ! class_exists( 'WCJ_Exporter_Orders' ) ) :
|
|
35 |
/**
|
36 |
* Get_export_orders_row.
|
37 |
*
|
38 |
-
* @version
|
39 |
* @since 2.5.9
|
40 |
* @param array $fields_ids defines the order field ids.
|
41 |
* @param int $order_id defines the order id.
|
@@ -70,7 +70,11 @@ if ( ! class_exists( 'WCJ_Exporter_Orders' ) ) :
|
|
70 |
$row[] = wcj_get_product_input_fields( $item );
|
71 |
break;
|
72 |
case 'item-debug':
|
73 |
-
|
|
|
|
|
|
|
|
|
74 |
break;
|
75 |
case 'item-name':
|
76 |
$row[] = $item['name'];
|
2 |
/**
|
3 |
* Booster for WooCommerce Exporter Orders
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @since 2.5.9
|
7 |
* @author Pluggabl LLC.
|
8 |
* @todo filter export by date
|
35 |
/**
|
36 |
* Get_export_orders_row.
|
37 |
*
|
38 |
+
* @version 6.0.0
|
39 |
* @since 2.5.9
|
40 |
* @param array $fields_ids defines the order field ids.
|
41 |
* @param int $order_id defines the order id.
|
70 |
$row[] = wcj_get_product_input_fields( $item );
|
71 |
break;
|
72 |
case 'item-debug':
|
73 |
+
try {
|
74 |
+
$row[] = $item;
|
75 |
+
} catch ( Exception $e ) {
|
76 |
+
$row[] = '';
|
77 |
+
}
|
78 |
break;
|
79 |
case 'item-name':
|
80 |
$row[] = $item['name'];
|
includes/functions/wcj-functions-booster-core.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Functions - Booster Core
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 2.9.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/functions
|
@@ -54,7 +54,7 @@ if ( ! function_exists( 'wcj_is_rest' ) ) {
|
|
54 |
/**
|
55 |
* Checks if the current request is a WP REST API request.
|
56 |
*
|
57 |
-
* @version
|
58 |
* @since 4.3.0
|
59 |
*
|
60 |
* @author matzeeable
|
@@ -65,7 +65,7 @@ if ( ! function_exists( 'wcj_is_rest' ) ) {
|
|
65 |
$prefix = rest_get_url_prefix();
|
66 |
if (
|
67 |
defined( 'REST_REQUEST' ) && REST_REQUEST || // After WP_REST_Request initialisation.
|
68 |
-
isset( $_GET['rest_route'] ) && 0 === strpos( trim( $_GET['rest_route'], '\\/' ), $prefix, 0 ) // phpcs:ignore
|
69 |
// Support "plain" permalink settings.
|
70 |
) {
|
71 |
return true;
|
2 |
/**
|
3 |
* Booster for WooCommerce - Functions - Booster Core
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @since 2.9.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/functions
|
54 |
/**
|
55 |
* Checks if the current request is a WP REST API request.
|
56 |
*
|
57 |
+
* @version 6.0.0
|
58 |
* @since 4.3.0
|
59 |
*
|
60 |
* @author matzeeable
|
65 |
$prefix = rest_get_url_prefix();
|
66 |
if (
|
67 |
defined( 'REST_REQUEST' ) && REST_REQUEST || // After WP_REST_Request initialisation.
|
68 |
+
isset( $_GET['rest_route'] ) && 0 === strpos( trim( wp_unslash( $_GET['rest_route'] ), '\\/' ), $prefix, 0 ) // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.NonceVerification.Recommended
|
69 |
// Support "plain" permalink settings.
|
70 |
) {
|
71 |
return true;
|
includes/functions/wcj-functions-debug.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Functions - Debug
|
4 |
*
|
5 |
-
* @version
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/functions
|
8 |
*/
|
@@ -15,20 +15,21 @@ if ( ! function_exists( 'wcj_log' ) ) {
|
|
15 |
/**
|
16 |
* Wcj_log.
|
17 |
*
|
18 |
-
* @version
|
19 |
* @param null | string $message defines the message.
|
20 |
* @param bool $do_var_dump defines the do_var_dump.
|
21 |
*/
|
22 |
function wcj_log( $message = '', $do_var_dump = false ) {
|
|
|
23 |
if ( ! wcj_is_module_enabled( 'debug_tools' ) || ( 'no' === wcj_get_option( 'wcj_logging_enabled', 'no' ) && 'no' === wcj_get_option( 'wcj_wc_logging_enabled', 'no' ) ) ) {
|
24 |
return;
|
25 |
}
|
26 |
if ( $do_var_dump ) {
|
27 |
ob_start();
|
28 |
-
var_dump( $message );
|
29 |
$message = ob_get_clean();
|
30 |
} elseif ( is_array( $message ) || is_object( $message ) ) {
|
31 |
-
$message = print_r( $message, true );
|
32 |
}
|
33 |
if ( 'yes' === wcj_get_option( 'wcj_logging_enabled', 'no' ) ) {
|
34 |
update_option( 'wcj_log', '<span style="color:red;">' . gmdate( 'Y-m-d H:i:s' ) . ' ' . ! empty( esc_url( sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ) ) ) . '</span> <span style="color:orange;">[</span>' . $message . '<span style="color:orange;">]</span> <br>' . wcj_get_option( 'wcj_log', '' ) );
|
@@ -40,5 +41,6 @@ if ( ! function_exists( 'wcj_log' ) ) {
|
|
40 |
$log->log( 'info', $message, array( 'source' => 'booster_for_woocommerce' ) );
|
41 |
}
|
42 |
}
|
|
|
43 |
}
|
44 |
}
|
2 |
/**
|
3 |
* Booster for WooCommerce - Functions - Debug
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/functions
|
8 |
*/
|
15 |
/**
|
16 |
* Wcj_log.
|
17 |
*
|
18 |
+
* @version 6.0.0
|
19 |
* @param null | string $message defines the message.
|
20 |
* @param bool $do_var_dump defines the do_var_dump.
|
21 |
*/
|
22 |
function wcj_log( $message = '', $do_var_dump = false ) {
|
23 |
+
// phpcs:disable WordPress.PHP.DevelopmentFunctions
|
24 |
if ( ! wcj_is_module_enabled( 'debug_tools' ) || ( 'no' === wcj_get_option( 'wcj_logging_enabled', 'no' ) && 'no' === wcj_get_option( 'wcj_wc_logging_enabled', 'no' ) ) ) {
|
25 |
return;
|
26 |
}
|
27 |
if ( $do_var_dump ) {
|
28 |
ob_start();
|
29 |
+
var_dump( $message );
|
30 |
$message = ob_get_clean();
|
31 |
} elseif ( is_array( $message ) || is_object( $message ) ) {
|
32 |
+
$message = print_r( $message, true );
|
33 |
}
|
34 |
if ( 'yes' === wcj_get_option( 'wcj_logging_enabled', 'no' ) ) {
|
35 |
update_option( 'wcj_log', '<span style="color:red;">' . gmdate( 'Y-m-d H:i:s' ) . ' ' . ! empty( esc_url( sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ) ) ) . '</span> <span style="color:orange;">[</span>' . $message . '<span style="color:orange;">]</span> <br>' . wcj_get_option( 'wcj_log', '' ) );
|
41 |
$log->log( 'info', $message, array( 'source' => 'booster_for_woocommerce' ) );
|
42 |
}
|
43 |
}
|
44 |
+
// phpcs:enable
|
45 |
}
|
46 |
}
|
includes/functions/wcj-functions-exchange-rates.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Functions - Exchange Rates
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 2.7.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/functions
|
@@ -187,7 +187,7 @@ if ( ! function_exists( 'wcj_get_currency_exchange_rates_url_response' ) ) {
|
|
187 |
/**
|
188 |
* Wcj_get_currency_exchange_rates_url_response.
|
189 |
*
|
190 |
-
* @version
|
191 |
* @since 3.2.4
|
192 |
* @todo use where needed
|
193 |
* @param string $url defines the url.
|
@@ -195,12 +195,8 @@ if ( ! function_exists( 'wcj_get_currency_exchange_rates_url_response' ) ) {
|
|
195 |
*/
|
196 |
function wcj_get_currency_exchange_rates_url_response( $url, $do_json_decode = true ) {
|
197 |
$response = '';
|
198 |
-
|
199 |
-
|
200 |
-
} elseif ( function_exists( 'curl_version' ) ) {
|
201 |
-
$response = wp_remote_get( $url );
|
202 |
-
$response = $response['body'];
|
203 |
-
}
|
204 |
return ( '' !== $response ? ( $do_json_decode ? json_decode( $response ) : $response ) : false );
|
205 |
}
|
206 |
}
|
@@ -418,32 +414,33 @@ if ( ! function_exists( 'wcj_ecb_get_exchange_rate' ) ) {
|
|
418 |
/**
|
419 |
* Wcj_ecb_get_exchange_rate.
|
420 |
*
|
421 |
-
* @version
|
422 |
* @since 2.6.0
|
423 |
* @param string | int $currency_from defines the currency_from.
|
424 |
* @param string | int $currency_to defines the currency_to.
|
425 |
*/
|
426 |
function wcj_ecb_get_exchange_rate( $currency_from, $currency_to ) {
|
427 |
$final_rate = false;
|
|
|
428 |
if ( function_exists( 'simplexml_load_file' ) ) {
|
429 |
if ( WP_DEBUG === true ) {
|
430 |
$xml = simplexml_load_file( 'http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml' );
|
431 |
} else {
|
432 |
$xml = simplexml_load_file( 'http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml' );
|
433 |
}
|
434 |
-
if ( isset( $xml
|
435 |
if ( 'EUR' === $currency_from ) {
|
436 |
$eur_currency_from_rate = 1;
|
437 |
}
|
438 |
if ( 'EUR' === $currency_to ) {
|
439 |
$eur_currency_to_rate = 1;
|
440 |
}
|
441 |
-
foreach ( $xml
|
442 |
$currency_rate = $currency_rate->attributes();
|
443 |
-
if ( ! isset( $eur_currency_from_rate ) && $currency_from === $currency_rate->currency ) {
|
444 |
$eur_currency_from_rate = (float) $currency_rate->rate;
|
445 |
}
|
446 |
-
if ( ! isset( $eur_currency_to_rate ) && $currency_to === $currency_rate->currency ) {
|
447 |
$eur_currency_to_rate = (float) $currency_rate->rate;
|
448 |
}
|
449 |
}
|
2 |
/**
|
3 |
* Booster for WooCommerce - Functions - Exchange Rates
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @since 2.7.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/functions
|
187 |
/**
|
188 |
* Wcj_get_currency_exchange_rates_url_response.
|
189 |
*
|
190 |
+
* @version 6.0.0
|
191 |
* @since 3.2.4
|
192 |
* @todo use where needed
|
193 |
* @param string $url defines the url.
|
195 |
*/
|
196 |
function wcj_get_currency_exchange_rates_url_response( $url, $do_json_decode = true ) {
|
197 |
$response = '';
|
198 |
+
$response = wp_remote_get( $url );
|
199 |
+
$response = $response['body'];
|
|
|
|
|
|
|
|
|
200 |
return ( '' !== $response ? ( $do_json_decode ? json_decode( $response ) : $response ) : false );
|
201 |
}
|
202 |
}
|
414 |
/**
|
415 |
* Wcj_ecb_get_exchange_rate.
|
416 |
*
|
417 |
+
* @version 6.0.0
|
418 |
* @since 2.6.0
|
419 |
* @param string | int $currency_from defines the currency_from.
|
420 |
* @param string | int $currency_to defines the currency_to.
|
421 |
*/
|
422 |
function wcj_ecb_get_exchange_rate( $currency_from, $currency_to ) {
|
423 |
$final_rate = false;
|
424 |
+
$cube = 'Cube';
|
425 |
if ( function_exists( 'simplexml_load_file' ) ) {
|
426 |
if ( WP_DEBUG === true ) {
|
427 |
$xml = simplexml_load_file( 'http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml' );
|
428 |
} else {
|
429 |
$xml = simplexml_load_file( 'http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml' );
|
430 |
}
|
431 |
+
if ( isset( $xml->$cube->$cube->$cube ) ) {
|
432 |
if ( 'EUR' === $currency_from ) {
|
433 |
$eur_currency_from_rate = 1;
|
434 |
}
|
435 |
if ( 'EUR' === $currency_to ) {
|
436 |
$eur_currency_to_rate = 1;
|
437 |
}
|
438 |
+
foreach ( $xml->$cube->$cube->$cube as $currency_rate ) {
|
439 |
$currency_rate = $currency_rate->attributes();
|
440 |
+
if ( ! isset( $eur_currency_from_rate ) && $currency_from === (string) $currency_rate->currency ) {
|
441 |
$eur_currency_from_rate = (float) $currency_rate->rate;
|
442 |
}
|
443 |
+
if ( ! isset( $eur_currency_to_rate ) && $currency_to === (string) $currency_rate->currency ) {
|
444 |
$eur_currency_to_rate = (float) $currency_rate->rate;
|
445 |
}
|
446 |
}
|
includes/functions/wcj-functions-general.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Functions - General
|
4 |
*
|
5 |
-
* @version
|
6 |
* @author Pluggabl LLC.
|
7 |
* @todo add `wcj_add_actions()` and `wcj_add_filters()`
|
8 |
* @package Booster_For_WooCommerce/functions
|
@@ -120,48 +120,6 @@ if ( ! function_exists( 'wcj_is_product_in_cart' ) ) {
|
|
120 |
}
|
121 |
}
|
122 |
|
123 |
-
if ( ! function_exists( 'wcj_send_file' ) ) {
|
124 |
-
/**
|
125 |
-
* Wcj_send_file.
|
126 |
-
*
|
127 |
-
* @version 5.6.2
|
128 |
-
* @since 3.5.0
|
129 |
-
* @todo use where needed
|
130 |
-
* @todo add more cases for `$file_type`
|
131 |
-
* @param string $file_name defines the file_name.
|
132 |
-
* @param string $file_path defines the file_path.
|
133 |
-
* @param string $file_type defines the file_type.
|
134 |
-
* @param bool $do_clean_up defines the do_clean_up.
|
135 |
-
*/
|
136 |
-
function wcj_send_file( $file_name, $file_path, $file_type, $do_clean_up = true ) {
|
137 |
-
switch ( $file_type ) {
|
138 |
-
default: // 'zip'
|
139 |
-
header( 'Content-Type: application/octet-stream' );
|
140 |
-
header( 'Content-Disposition: attachment; filename=' . rawurlencode( $file_name ) );
|
141 |
-
header( 'Content-Type: application/octet-stream' );
|
142 |
-
header( 'Content-Type: application/download' );
|
143 |
-
header( 'Content-Description: File Transfer' );
|
144 |
-
header( 'Content-Length: ' . filesize( $file_path ) );
|
145 |
-
break;
|
146 |
-
}
|
147 |
-
flush(); // this doesn't really matter.
|
148 |
-
$fp = fopen( $file_path, 'r' ); //phpcs:ignore
|
149 |
-
if ( false !== ( $fp ) ) {
|
150 |
-
while ( ! feof( $fp ) ) {
|
151 |
-
echo fread( $fp, 65536 ); //phpcs:ignore
|
152 |
-
flush(); // this is essential for large downloads.
|
153 |
-
}
|
154 |
-
fclose( $fp ); //phpcs:ignore
|
155 |
-
if ( $do_clean_up ) {
|
156 |
-
@unlink( $file_path ); //phpcs:ignore
|
157 |
-
}
|
158 |
-
exit();
|
159 |
-
} else {
|
160 |
-
die( wp_kses_post( 'Unexpected error', 'woocommerce-jetpack' ) );
|
161 |
-
}
|
162 |
-
}
|
163 |
-
}
|
164 |
-
|
165 |
if ( ! function_exists( 'wcj_parse_number' ) ) {
|
166 |
/**
|
167 |
* Wcj_parse_number.
|
@@ -215,13 +173,13 @@ if ( ! function_exists( 'wcj_tcpdf_method' ) ) {
|
|
215 |
/**
|
216 |
* Wcj_tcpdf_method.
|
217 |
*
|
218 |
-
* @version
|
219 |
* @since 3.4.0
|
220 |
* @param string $method defines the method.
|
221 |
* @param string $params defines the params.
|
222 |
*/
|
223 |
function wcj_tcpdf_method( $method, $params ) {
|
224 |
-
return '<tcpdf method="' . $method . '" wcj_tcpdf_method_params_start' .
|
225 |
}
|
226 |
}
|
227 |
|
@@ -561,7 +519,7 @@ if ( ! function_exists( 'wcj_variation_radio_button' ) ) {
|
|
561 |
/**
|
562 |
* Wcj_variation_radio_button.
|
563 |
*
|
564 |
-
* @version
|
565 |
* @since 2.4.8
|
566 |
* @todo (maybe) check - maybe we can use `$variation['variation_description']` instead of `get_post_meta( $variation_id, '_variation_description', true )`
|
567 |
* @param array $_product defines the _product.
|
@@ -580,8 +538,10 @@ if ( ! function_exists( 'wcj_variation_radio_button' ) ) {
|
|
580 |
$attribute_name = substr( $attribute_full_name, strlen( $prefix ) );
|
581 |
}
|
582 |
// Checked.
|
583 |
-
|
584 |
-
|
|
|
|
|
585 |
if ( $checked !== $attribute_value ) {
|
586 |
$is_checked = false;
|
587 |
}
|
@@ -672,7 +632,7 @@ if ( ! function_exists( 'wcj_maybe_unserialize_and_implode' ) ) {
|
|
672 |
/**
|
673 |
* Wcj_maybe_unserialize_and_implode.
|
674 |
*
|
675 |
-
* @version
|
676 |
* @since 2.8.0
|
677 |
* @return string
|
678 |
* @todo `if ( ! is_array() )`
|
@@ -681,7 +641,7 @@ if ( ! function_exists( 'wcj_maybe_unserialize_and_implode' ) ) {
|
|
681 |
*/
|
682 |
function wcj_maybe_unserialize_and_implode( $value, $glue = ' ' ) {
|
683 |
if ( is_serialized( $value ) ) {
|
684 |
-
$value = unserialize( $value ); //phpcs:ignore
|
685 |
if ( is_array( $value ) ) {
|
686 |
$value = implode( $glue, $value );
|
687 |
}
|
@@ -732,16 +692,18 @@ if ( ! function_exists( 'wcj_get_rates_for_tax_class' ) ) {
|
|
732 |
* Used by admin settings page.
|
733 |
*
|
734 |
* @return array|null|object
|
735 |
-
* @version
|
736 |
* @since 2.3.10
|
737 |
* @param string $tax_class defines the tax_class.
|
738 |
*/
|
739 |
function wcj_get_rates_for_tax_class( $tax_class ) {
|
740 |
global $wpdb;
|
741 |
|
|
|
742 |
// Get all the rates and locations. Snagging all at once should significantly cut down on the number of queries.
|
743 |
-
$rates = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM `{$wpdb->prefix}woocommerce_tax_rates` WHERE `tax_rate_class` = %s ORDER BY `tax_rate_order`;", sanitize_title( $tax_class ) ) );
|
744 |
-
$locations = $wpdb->get_results( "SELECT * FROM `{$wpdb->prefix}woocommerce_tax_rate_locations`" );
|
|
|
745 |
|
746 |
// Set the rates keys equal to their ids.
|
747 |
$rates = array_combine( wp_list_pluck( $rates, 'tax_rate_id' ), $rates );
|
@@ -791,15 +753,16 @@ if ( ! function_exists( 'wcj_is_frontend' ) ) {
|
|
791 |
/**
|
792 |
* Wcj_is_frontend()
|
793 |
*
|
794 |
-
* @since 5.6.
|
795 |
* @return boolean
|
796 |
*/
|
797 |
function wcj_is_frontend() {
|
|
|
798 |
if ( ! is_admin() ) {
|
799 |
return true;
|
800 |
} elseif ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
|
801 |
-
return ( ! isset( $_REQUEST['action'] ) || ! is_string( $_REQUEST['action'] ) || ! in_array(
|
802 |
-
$_REQUEST['action'],
|
803 |
array(
|
804 |
'woocommerce_load_variations',
|
805 |
),
|
@@ -808,6 +771,7 @@ if ( ! function_exists( 'wcj_is_frontend' ) ) {
|
|
808 |
} else {
|
809 |
return false;
|
810 |
}
|
|
|
811 |
}
|
812 |
}
|
813 |
|
@@ -1032,7 +996,7 @@ if ( ! function_exists( 'wcj_add_allowed_html' ) ) {
|
|
1032 |
/**
|
1033 |
* Wcj_add_allowed_html.
|
1034 |
*
|
1035 |
-
* @version
|
1036 |
* @since 5.6.0
|
1037 |
* @param array $allowed_html to get default allowed html.
|
1038 |
* @param string $context to get default context.
|
@@ -1072,6 +1036,9 @@ if ( ! function_exists( 'wcj_add_allowed_html' ) ) {
|
|
1072 |
'onclick' => true,
|
1073 |
'accept' => true,
|
1074 |
'data-*' => true,
|
|
|
|
|
|
|
1075 |
),
|
1076 |
'textarea' => array(
|
1077 |
'name' => true,
|
2 |
/**
|
3 |
* Booster for WooCommerce - Functions - General
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @author Pluggabl LLC.
|
7 |
* @todo add `wcj_add_actions()` and `wcj_add_filters()`
|
8 |
* @package Booster_For_WooCommerce/functions
|
120 |
}
|
121 |
}
|
122 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
123 |
if ( ! function_exists( 'wcj_parse_number' ) ) {
|
124 |
/**
|
125 |
* Wcj_parse_number.
|
173 |
/**
|
174 |
* Wcj_tcpdf_method.
|
175 |
*
|
176 |
+
* @version 6.0.0
|
177 |
* @since 3.4.0
|
178 |
* @param string $method defines the method.
|
179 |
* @param string $params defines the params.
|
180 |
*/
|
181 |
function wcj_tcpdf_method( $method, $params ) {
|
182 |
+
return '<tcpdf method="' . $method . '" wcj_tcpdf_method_params_start' . wp_json_encode( $params ) . 'wcj_tcpdf_method_params_end />';
|
183 |
}
|
184 |
}
|
185 |
|
519 |
/**
|
520 |
* Wcj_variation_radio_button.
|
521 |
*
|
522 |
+
* @version 6.0.0
|
523 |
* @since 2.4.8
|
524 |
* @todo (maybe) check - maybe we can use `$variation['variation_description']` instead of `get_post_meta( $variation_id, '_variation_description', true )`
|
525 |
* @param array $_product defines the _product.
|
538 |
$attribute_name = substr( $attribute_full_name, strlen( $prefix ) );
|
539 |
}
|
540 |
// Checked.
|
541 |
+
// phpcs:disable WordPress.Security.NonceVerification
|
542 |
+
$checked = ( isset( $_REQUEST[ 'attribute_' . sanitize_title( $attribute_name ) ] ) ) ?
|
543 |
+
wc_clean( sanitize_text_field( wp_unslash( $_REQUEST[ 'attribute_' . sanitize_title( $attribute_name ) ] ) ) ) : $_product->get_variation_default_attribute( $attribute_name );
|
544 |
+
// phpcs:enable
|
545 |
if ( $checked !== $attribute_value ) {
|
546 |
$is_checked = false;
|
547 |
}
|
632 |
/**
|
633 |
* Wcj_maybe_unserialize_and_implode.
|
634 |
*
|
635 |
+
* @version 6.0.0
|
636 |
* @since 2.8.0
|
637 |
* @return string
|
638 |
* @todo `if ( ! is_array() )`
|
641 |
*/
|
642 |
function wcj_maybe_unserialize_and_implode( $value, $glue = ' ' ) {
|
643 |
if ( is_serialized( $value ) ) {
|
644 |
+
$value = unserialize( $value ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions
|
645 |
if ( is_array( $value ) ) {
|
646 |
$value = implode( $glue, $value );
|
647 |
}
|
692 |
* Used by admin settings page.
|
693 |
*
|
694 |
* @return array|null|object
|
695 |
+
* @version 6.0.0
|
696 |
* @since 2.3.10
|
697 |
* @param string $tax_class defines the tax_class.
|
698 |
*/
|
699 |
function wcj_get_rates_for_tax_class( $tax_class ) {
|
700 |
global $wpdb;
|
701 |
|
702 |
+
// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
|
703 |
// Get all the rates and locations. Snagging all at once should significantly cut down on the number of queries.
|
704 |
+
$rates = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM `{$wpdb->prefix}woocommerce_tax_rates` WHERE `tax_rate_class` = %s ORDER BY `tax_rate_order`;", sanitize_title( $tax_class ) ) );
|
705 |
+
$locations = $wpdb->get_results( "SELECT * FROM `{$wpdb->prefix}woocommerce_tax_rate_locations`" );
|
706 |
+
// phpcs:enable
|
707 |
|
708 |
// Set the rates keys equal to their ids.
|
709 |
$rates = array_combine( wp_list_pluck( $rates, 'tax_rate_id' ), $rates );
|
753 |
/**
|
754 |
* Wcj_is_frontend()
|
755 |
*
|
756 |
+
* @since 5.6.9-dev
|
757 |
* @return boolean
|
758 |
*/
|
759 |
function wcj_is_frontend() {
|
760 |
+
// phpcs:disable WordPress.Security.NonceVerification
|
761 |
if ( ! is_admin() ) {
|
762 |
return true;
|
763 |
} elseif ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
|
764 |
+
return ( ! isset( $_REQUEST['action'] ) || ! is_string( $_REQUEST['action'] ) || ! in_array(
|
765 |
+
$_REQUEST['action'],
|
766 |
array(
|
767 |
'woocommerce_load_variations',
|
768 |
),
|
771 |
} else {
|
772 |
return false;
|
773 |
}
|
774 |
+
// phpcs:enable
|
775 |
}
|
776 |
}
|
777 |
|
996 |
/**
|
997 |
* Wcj_add_allowed_html.
|
998 |
*
|
999 |
+
* @version 6.0.0
|
1000 |
* @since 5.6.0
|
1001 |
* @param array $allowed_html to get default allowed html.
|
1002 |
* @param string $context to get default context.
|
1036 |
'onclick' => true,
|
1037 |
'accept' => true,
|
1038 |
'data-*' => true,
|
1039 |
+
'attribute_*' => true,
|
1040 |
+
'variation_id' => true,
|
1041 |
+
'size' => true,
|
1042 |
),
|
1043 |
'textarea' => array(
|
1044 |
'name' => true,
|
includes/functions/wcj-functions-number-to-words-lt.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Functions - Numbers to Words
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 2.5.9
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/functions
|
@@ -12,7 +12,7 @@ if ( ! function_exists( 'convert_number_to_words_lt' ) ) {
|
|
12 |
/**
|
13 |
* Convert_number_to_words_lt.
|
14 |
*
|
15 |
-
* @version
|
16 |
* @since 2.5.9
|
17 |
* @return string
|
18 |
* @param int $number Get Number.
|
@@ -80,7 +80,7 @@ if ( ! function_exists( 'convert_number_to_words_lt' ) ) {
|
|
80 |
|
81 |
if ( ( $number >= 0 && (int) $number < 0 ) || (int) $number < 0 - PHP_INT_MAX ) {
|
82 |
// overflow.
|
83 |
-
trigger_error( //phpcs:ignore
|
84 |
'convert_number_to_words_lt only accepts numbers between -' . PHP_INT_MAX . ' and ' . PHP_INT_MAX, // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
85 |
E_USER_WARNING
|
86 |
);
|
2 |
/**
|
3 |
* Booster for WooCommerce - Functions - Numbers to Words
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @since 2.5.9
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/functions
|
12 |
/**
|
13 |
* Convert_number_to_words_lt.
|
14 |
*
|
15 |
+
* @version 6.0.0
|
16 |
* @since 2.5.9
|
17 |
* @return string
|
18 |
* @param int $number Get Number.
|
80 |
|
81 |
if ( ( $number >= 0 && (int) $number < 0 ) || (int) $number < 0 - PHP_INT_MAX ) {
|
82 |
// overflow.
|
83 |
+
trigger_error( // phpcs:ignore WordPress.PHP.DevelopmentFunctions
|
84 |
'convert_number_to_words_lt only accepts numbers between -' . PHP_INT_MAX . ' and ' . PHP_INT_MAX, // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
85 |
E_USER_WARNING
|
86 |
);
|
includes/functions/wcj-functions-number-to-words.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Functions - Numbers to Words
|
4 |
*
|
5 |
-
* @version
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/functions
|
8 |
*/
|
@@ -16,7 +16,7 @@ if ( ! function_exists( 'convert_number_to_words' ) ) {
|
|
16 |
/**
|
17 |
* Convert_number_to_words.
|
18 |
*
|
19 |
-
* @version
|
20 |
* @since 2.5.0
|
21 |
* @param int $number Get Number.
|
22 |
*/
|
@@ -70,7 +70,7 @@ if ( ! function_exists( 'convert_number_to_words' ) ) {
|
|
70 |
|
71 |
if ( ( $number >= 0 && (int) $number < 0 ) || (int) $number < 0 - PHP_INT_MAX ) {
|
72 |
// overflow.
|
73 |
-
trigger_error( //phpcs:ignore
|
74 |
'convert_number_to_words only accepts numbers between -' . PHP_INT_MAX . ' and ' . PHP_INT_MAX, // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
75 |
E_USER_WARNING
|
76 |
);
|
2 |
/**
|
3 |
* Booster for WooCommerce - Functions - Numbers to Words
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/functions
|
8 |
*/
|
16 |
/**
|
17 |
* Convert_number_to_words.
|
18 |
*
|
19 |
+
* @version 6.0.0
|
20 |
* @since 2.5.0
|
21 |
* @param int $number Get Number.
|
22 |
*/
|
70 |
|
71 |
if ( ( $number >= 0 && (int) $number < 0 ) || (int) $number < 0 - PHP_INT_MAX ) {
|
72 |
// overflow.
|
73 |
+
trigger_error( // phpcs:ignore WordPress.PHP.DevelopmentFunctions
|
74 |
'convert_number_to_words only accepts numbers between -' . PHP_INT_MAX . ' and ' . PHP_INT_MAX, // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
75 |
E_USER_WARNING
|
76 |
);
|
includes/functions/wcj-functions-reports.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Functions - Reports
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 2.9.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/functions
|
@@ -16,12 +16,12 @@ if ( ! function_exists( 'wcj_get_product_sales_daily_report_columns' ) ) {
|
|
16 |
/**
|
17 |
* Wcj_get_product_sales_daily_report_columns.
|
18 |
*
|
19 |
-
* @version
|
20 |
* @since 2.9.0
|
21 |
*/
|
22 |
function wcj_get_product_sales_daily_report_columns() {
|
23 |
return array(
|
24 |
-
'date' => __( '
|
25 |
'daily_total_sum' => __( 'Daily Total Sum', 'woocommerce-jetpack' ),
|
26 |
'daily_total_quantity' => __( 'Daily Total Quantity', 'woocommerce-jetpack' ),
|
27 |
'product_id' => __( 'Product ID', 'woocommerce-jetpack' ),
|
2 |
/**
|
3 |
* Booster for WooCommerce - Functions - Reports
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @since 2.9.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/functions
|
16 |
/**
|
17 |
* Wcj_get_product_sales_daily_report_columns.
|
18 |
*
|
19 |
+
* @version 6.0.0
|
20 |
* @since 2.9.0
|
21 |
*/
|
22 |
function wcj_get_product_sales_daily_report_columns() {
|
23 |
return array(
|
24 |
+
'date' => __( 'Date', 'woocommerce-jetpack' ),
|
25 |
'daily_total_sum' => __( 'Daily Total Sum', 'woocommerce-jetpack' ),
|
26 |
'daily_total_quantity' => __( 'Daily Total Quantity', 'woocommerce-jetpack' ),
|
27 |
'product_id' => __( 'Product ID', 'woocommerce-jetpack' ),
|
includes/js/wcj-ajax-exchange-rates-average.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
/**
|
2 |
* Wcj-ajax-exchange-rates-average.js
|
3 |
*
|
4 |
-
* @version
|
5 |
* @since 3.2.2
|
6 |
*
|
7 |
* @package Booster_For_WooCommerce/includes/JS
|
@@ -18,6 +18,7 @@ jQuery( document ).ready(
|
|
18 |
'wcj_currency_to': this.getAttribute( 'currency_to' ),
|
19 |
'wcj_start_date': this.getAttribute( 'start_date' ),
|
20 |
'wcj_end_date': this.getAttribute( 'end_date' ),
|
|
|
21 |
};
|
22 |
jQuery( input_id ).prop( 'readonly', true );
|
23 |
jQuery.ajax(
|
1 |
/**
|
2 |
* Wcj-ajax-exchange-rates-average.js
|
3 |
*
|
4 |
+
* @version 6.0.0
|
5 |
* @since 3.2.2
|
6 |
*
|
7 |
* @package Booster_For_WooCommerce/includes/JS
|
18 |
'wcj_currency_to': this.getAttribute( 'currency_to' ),
|
19 |
'wcj_start_date': this.getAttribute( 'start_date' ),
|
20 |
'wcj_end_date': this.getAttribute( 'end_date' ),
|
21 |
+
'wpnonce': ajax_object.wpnonce,
|
22 |
};
|
23 |
jQuery( input_id ).prop( 'readonly', true );
|
24 |
jQuery.ajax(
|
includes/pdf-invoices/class-wcj-pdf-invoicing-renumerate-tool.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - PDF Invoicing - Renumerate Tool
|
4 |
*
|
5 |
-
* @version
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/includes
|
8 |
*/
|
@@ -51,7 +51,7 @@ if ( ! class_exists( 'WCJ_PDF_Invoicing_Renumerate_Tool' ) ) :
|
|
51 |
/**
|
52 |
* Add Renumerate Invoices tool to WooCommerce menu (the content).
|
53 |
*
|
54 |
-
* @version
|
55 |
*/
|
56 |
public function create_renumerate_invoices_tool() {
|
57 |
|
@@ -141,11 +141,13 @@ if ( ! class_exists( 'WCJ_PDF_Invoicing_Renumerate_Tool' ) ) :
|
|
141 |
);
|
142 |
|
143 |
// Print all.
|
144 |
-
echo
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
|
|
|
|
149 |
)
|
150 |
);
|
151 |
|
@@ -153,7 +155,7 @@ if ( ! class_exists( 'WCJ_PDF_Invoicing_Renumerate_Tool' ) ) :
|
|
153 |
</form></p>
|
154 |
<?php
|
155 |
if ( '' !== $renumerate_result ) {
|
156 |
-
echo '<h3>' .
|
157 |
echo '<p>' . wp_kses_post( $renumerate_result ) . '</p>';
|
158 |
}
|
159 |
?>
|
2 |
/**
|
3 |
* Booster for WooCommerce - PDF Invoicing - Renumerate Tool
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/includes
|
8 |
*/
|
51 |
/**
|
52 |
* Add Renumerate Invoices tool to WooCommerce menu (the content).
|
53 |
*
|
54 |
+
* @version 6.0.0
|
55 |
*/
|
56 |
public function create_renumerate_invoices_tool() {
|
57 |
|
141 |
);
|
142 |
|
143 |
// Print all.
|
144 |
+
echo wp_kses_post(
|
145 |
+
wcj_get_table_html(
|
146 |
+
$data,
|
147 |
+
array(
|
148 |
+
'table_class' => 'widefat striped',
|
149 |
+
'table_heading_type' => 'vertical',
|
150 |
+
)
|
151 |
)
|
152 |
);
|
153 |
|
155 |
</form></p>
|
156 |
<?php
|
157 |
if ( '' !== $renumerate_result ) {
|
158 |
+
echo '<h3>' . esc_html__( 'Results', 'woocommerce-jetpack' ) . '</h3>';
|
159 |
echo '<p>' . wp_kses_post( $renumerate_result ) . '</p>';
|
160 |
}
|
161 |
?>
|
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
|
6 |
* @since 2.2.1
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/includes
|
@@ -111,12 +111,11 @@ if ( ! class_exists( 'WCJ_PDF_Invoicing_Report_Tool' ) ) :
|
|
111 |
/**
|
112 |
* Add Invoices Report tool to WooCommerce menu (the content).
|
113 |
*
|
114 |
-
* @version
|
115 |
*/
|
116 |
public function create_invoices_report_tool() {
|
117 |
$wpnonce = isset( $_REQUEST['wcj_tools_nonce'] ) ? wp_verify_nonce( sanitize_key( $_REQUEST['wcj_tools_nonce'] ), 'wcj_tools' ) : false;
|
118 |
$result_message = '';
|
119 |
-
$result_message .= $this->notice;
|
120 |
$the_year = ( $wpnonce && ! empty( $_POST['report_year'] ) ) ? sanitize_text_field( wp_unslash( $_POST['report_year'] ) ) : gmdate( 'Y' );
|
121 |
$the_month = ( $wpnonce && ! empty( $_POST['report_month'] ) ) ? sanitize_text_field( wp_unslash( $_POST['report_month'] ) ) : gmdate( 'n' );
|
122 |
$the_invoice_type = ( $wpnonce && ! empty( $_POST['invoice_type'] ) ) ? sanitize_text_field( wp_unslash( $_POST['invoice_type'] ) ) : 'invoice';
|
@@ -131,6 +130,7 @@ if ( ! class_exists( 'WCJ_PDF_Invoicing_Report_Tool' ) ) :
|
|
131 |
$html .= '<div class="wcj-setting-jetpack-body">';
|
132 |
$html .= '<div class="wrap">';
|
133 |
$html .= w_c_j()->modules['pdf_invoicing']->get_tool_header_html( 'invoices_report' );
|
|
|
134 |
$html .= '<p><form method="post" action="">';
|
135 |
// Type.
|
136 |
$invoice_type_select_html = '<select name="invoice_type" class="widefat">';
|
@@ -192,13 +192,16 @@ if ( ! class_exists( 'WCJ_PDF_Invoicing_Report_Tool' ) ) :
|
|
192 |
/**
|
193 |
* Get_invoices_report_zip.
|
194 |
*
|
195 |
-
* @version
|
196 |
* @since 2.3.10
|
197 |
* @param int | string $year Get year.
|
198 |
* @param int | string $month Get month.
|
199 |
* @param int $invoice_type_id Get invoice type id.
|
200 |
*/
|
201 |
public function get_invoices_report_zip( $year, $month, $invoice_type_id ) {
|
|
|
|
|
|
|
202 |
if ( ! class_exists( 'ZipArchive' ) ) {
|
203 |
return sprintf(
|
204 |
/* translators: %s: search term */
|
@@ -229,9 +232,9 @@ if ( ! class_exists( 'WCJ_PDF_Invoicing_Report_Tool' ) ) :
|
|
229 |
'post_status' => 'any',
|
230 |
'posts_per_page' => $block_size,
|
231 |
'orderby' => 'meta_value_num',
|
232 |
-
'meta_key' => '_wcj_invoicing_' . $invoice_type_id . '_date', //phpcs:ignore
|
233 |
'order' => 'ASC',
|
234 |
-
'meta_query' => array( //phpcs:ignore
|
235 |
array(
|
236 |
'key' => '_wcj_invoicing_' . $invoice_type_id . '_date',
|
237 |
'value' => array( $first_minute, $last_minute ),
|
@@ -262,22 +265,10 @@ if ( ! class_exists( 'WCJ_PDF_Invoicing_Report_Tool' ) ) :
|
|
262 |
if ( $archive_is_empty ) {
|
263 |
return $this->get_no_documents_found_message( $year, $month, $invoice_type_id );
|
264 |
}
|
265 |
-
|
266 |
-
|
267 |
-
header( 'Content-Type: application/download' );
|
268 |
-
header( 'Content-Description: File Transfer' );
|
269 |
-
header( 'Content-Length: ' . filesize( $zip_file_path ) );
|
270 |
-
flush(); // this doesn't really matter.
|
271 |
-
$fp = fopen( $zip_file_path, 'r' ); //phpcs:ignore
|
272 |
-
if ( false !== ( $fp ) ) {
|
273 |
-
while ( ! feof( $fp ) ) {
|
274 |
-
echo fread( $fp, 65536 ); //phpcs:ignore
|
275 |
-
flush(); // this is essential for large downloads.
|
276 |
-
}
|
277 |
-
fclose( $fp ); //phpcs:ignore
|
278 |
-
exit();
|
279 |
} else {
|
280 |
-
|
281 |
}
|
282 |
return true;
|
283 |
}
|
@@ -353,7 +344,7 @@ if ( ! class_exists( 'WCJ_PDF_Invoicing_Report_Tool' ) ) :
|
|
353 |
/**
|
354 |
* Invoices Report Data function.
|
355 |
*
|
356 |
-
* @version
|
357 |
* @since 2.5.7
|
358 |
* @param int | string $year Get year.
|
359 |
* @param int | string $month Get month.
|
@@ -384,9 +375,9 @@ if ( ! class_exists( 'WCJ_PDF_Invoicing_Report_Tool' ) ) :
|
|
384 |
'post_status' => 'any',
|
385 |
'posts_per_page' => $block_size,
|
386 |
'orderby' => 'meta_value_num',
|
387 |
-
'meta_key' => '_wcj_invoicing_' . $invoice_type_id . '_date', //phpcs:ignore
|
388 |
'order' => 'ASC',
|
389 |
-
'meta_query' => array( //phpcs:ignore
|
390 |
array(
|
391 |
'key' => '_wcj_invoicing_' . $invoice_type_id . '_date',
|
392 |
'value' => array( $first_minute, $last_minute ),
|
2 |
/**
|
3 |
* Booster for WooCommerce - PDF Invoicing - Report Tool
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @since 2.2.1
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/includes
|
111 |
/**
|
112 |
* Add Invoices Report tool to WooCommerce menu (the content).
|
113 |
*
|
114 |
+
* @version 6.0.0
|
115 |
*/
|
116 |
public function create_invoices_report_tool() {
|
117 |
$wpnonce = isset( $_REQUEST['wcj_tools_nonce'] ) ? wp_verify_nonce( sanitize_key( $_REQUEST['wcj_tools_nonce'] ), 'wcj_tools' ) : false;
|
118 |
$result_message = '';
|
|
|
119 |
$the_year = ( $wpnonce && ! empty( $_POST['report_year'] ) ) ? sanitize_text_field( wp_unslash( $_POST['report_year'] ) ) : gmdate( 'Y' );
|
120 |
$the_month = ( $wpnonce && ! empty( $_POST['report_month'] ) ) ? sanitize_text_field( wp_unslash( $_POST['report_month'] ) ) : gmdate( 'n' );
|
121 |
$the_invoice_type = ( $wpnonce && ! empty( $_POST['invoice_type'] ) ) ? sanitize_text_field( wp_unslash( $_POST['invoice_type'] ) ) : 'invoice';
|
130 |
$html .= '<div class="wcj-setting-jetpack-body">';
|
131 |
$html .= '<div class="wrap">';
|
132 |
$html .= w_c_j()->modules['pdf_invoicing']->get_tool_header_html( 'invoices_report' );
|
133 |
+
$html .= $this->notice;
|
134 |
$html .= '<p><form method="post" action="">';
|
135 |
// Type.
|
136 |
$invoice_type_select_html = '<select name="invoice_type" class="widefat">';
|
192 |
/**
|
193 |
* Get_invoices_report_zip.
|
194 |
*
|
195 |
+
* @version 6.0.0
|
196 |
* @since 2.3.10
|
197 |
* @param int | string $year Get year.
|
198 |
* @param int | string $month Get month.
|
199 |
* @param int $invoice_type_id Get invoice type id.
|
200 |
*/
|
201 |
public function get_invoices_report_zip( $year, $month, $invoice_type_id ) {
|
202 |
+
require_once ABSPATH . '/wp-admin/includes/file.php';
|
203 |
+
global $wp_filesystem;
|
204 |
+
WP_Filesystem();
|
205 |
if ( ! class_exists( 'ZipArchive' ) ) {
|
206 |
return sprintf(
|
207 |
/* translators: %s: search term */
|
232 |
'post_status' => 'any',
|
233 |
'posts_per_page' => $block_size,
|
234 |
'orderby' => 'meta_value_num',
|
235 |
+
'meta_key' => '_wcj_invoicing_' . $invoice_type_id . '_date', // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key
|
236 |
'order' => 'ASC',
|
237 |
+
'meta_query' => array( // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query
|
238 |
array(
|
239 |
'key' => '_wcj_invoicing_' . $invoice_type_id . '_date',
|
240 |
'value' => array( $first_minute, $last_minute ),
|
265 |
if ( $archive_is_empty ) {
|
266 |
return $this->get_no_documents_found_message( $year, $month, $invoice_type_id );
|
267 |
}
|
268 |
+
if ( $wp_filesystem->exists( $zip_file_path ) ) {
|
269 |
+
WC_Download_Handler::download_file_force( $zip_file_path, $zip_file_name );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
270 |
} else {
|
271 |
+
return false;
|
272 |
}
|
273 |
return true;
|
274 |
}
|
344 |
/**
|
345 |
* Invoices Report Data function.
|
346 |
*
|
347 |
+
* @version 6.0.0
|
348 |
* @since 2.5.7
|
349 |
* @param int | string $year Get year.
|
350 |
* @param int | string $month Get month.
|
375 |
'post_status' => 'any',
|
376 |
'posts_per_page' => $block_size,
|
377 |
'orderby' => 'meta_value_num',
|
378 |
+
'meta_key' => '_wcj_invoicing_' . $invoice_type_id . '_date', // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key
|
379 |
'order' => 'ASC',
|
380 |
+
'meta_query' => array( // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query
|
381 |
array(
|
382 |
'key' => '_wcj_invoicing_' . $invoice_type_id . '_date',
|
383 |
'value' => array( $first_minute, $last_minute ),
|
includes/reports/class-wcj-reports-customers.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Reports - Customers
|
4 |
*
|
5 |
-
* @version
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/includes
|
8 |
*/
|
@@ -135,7 +135,7 @@ if ( ! class_exists( 'WCJ_Reports_Customers' ) ) :
|
|
135 |
/**
|
136 |
* Get_data function.
|
137 |
*
|
138 |
-
* @version
|
139 |
* @param Array $data Get data.
|
140 |
* @param int $total_customers Get total number of customers.
|
141 |
* @param string $report_type Get all_countries.
|
@@ -144,8 +144,9 @@ if ( ! class_exists( 'WCJ_Reports_Customers' ) ) :
|
|
144 |
$html = '';
|
145 |
if ( 'all_countries' === $report_type ) {
|
146 |
$html .= '<h5>' . __( 'Total customers', 'woocommerce-jetpack' ) . ': ' . $total_customers . '</h5>';
|
147 |
-
$html .= '<
|
148 |
-
$html .= '<
|
|
|
149 |
$html .= '<th></th>';
|
150 |
$html .= '<th>' . __( 'Country Code', 'woocommerce-jetpack' ) . '</th>';
|
151 |
$html .= '<th>' . __( 'Customers Count', 'woocommerce-jetpack' ) . '</th>';
|
@@ -182,7 +183,7 @@ if ( ! class_exists( 'WCJ_Reports_Customers' ) ) :
|
|
182 |
$html .= ( 2 === strlen( $country_code ) ) ? '<td>' . $country_flag_img_link . '</td>' : '<td></td>';
|
183 |
$html .= '</tr>';
|
184 |
}
|
185 |
-
$html .= '</tbody></table>';
|
186 |
} else { // single country.
|
187 |
$country_code = $report_type;
|
188 |
$html .= '<h5>' . __( 'Report for:', 'woocommerce-jetpack' ) . ' ' . wcj_get_country_name_by_code( $country_code ) . ' [' . $country_code . '] </h5>';
|
2 |
/**
|
3 |
* Booster for WooCommerce - Reports - Customers
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/includes
|
8 |
*/
|
135 |
/**
|
136 |
* Get_data function.
|
137 |
*
|
138 |
+
* @version 6.0.0
|
139 |
* @param Array $data Get data.
|
140 |
* @param int $total_customers Get total number of customers.
|
141 |
* @param string $report_type Get all_countries.
|
144 |
$html = '';
|
145 |
if ( 'all_countries' === $report_type ) {
|
146 |
$html .= '<h5>' . __( 'Total customers', 'woocommerce-jetpack' ) . ': ' . $total_customers . '</h5>';
|
147 |
+
$html .= '<div id="poststuff" class="wcj-reports-wide oocommerce-reports-wide"><div class="inside">';
|
148 |
+
$html .= '<table class="widefat striped" style="width:100% !important;"><tbody>';
|
149 |
+
$html .= '<tr class="wcj-row wcj-row0 wcj-row-even">';
|
150 |
$html .= '<th></th>';
|
151 |
$html .= '<th>' . __( 'Country Code', 'woocommerce-jetpack' ) . '</th>';
|
152 |
$html .= '<th>' . __( 'Customers Count', 'woocommerce-jetpack' ) . '</th>';
|
183 |
$html .= ( 2 === strlen( $country_code ) ) ? '<td>' . $country_flag_img_link . '</td>' : '<td></td>';
|
184 |
$html .= '</tr>';
|
185 |
}
|
186 |
+
$html .= '</tbody></table></div></div>';
|
187 |
} else { // single country.
|
188 |
$country_code = $report_type;
|
189 |
$html .= '<h5>' . __( 'Report for:', 'woocommerce-jetpack' ) . ' ' . wcj_get_country_name_by_code( $country_code ) . ' [' . $country_code . '] </h5>';
|
includes/reports/class-wcj-reports-monthly-sales.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Reports - Monthly Sales (with Currency Conversion)
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 2.4.7
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/includes
|
@@ -86,7 +86,7 @@ if ( ! class_exists( 'WCJ_Reports_Monthly_Sales' ) ) :
|
|
86 |
/**
|
87 |
* Get_monthly_sales_report.
|
88 |
*
|
89 |
-
* @version
|
90 |
* @since 2.4.7
|
91 |
* @todo (maybe) visible rows selection by admin (as option)
|
92 |
* @todo (maybe) take not monthly average, but "Close" of closest day (probably create new "Daily Sales (with Currency Conversion)" report)
|
@@ -343,26 +343,22 @@ if ( ! class_exists( 'WCJ_Reports_Monthly_Sales' ) ) :
|
|
343 |
$execution_time_end = microtime( true );
|
344 |
|
345 |
// HTML.
|
346 |
-
$html
|
347 |
-
$menu
|
348 |
-
$menu
|
349 |
-
$menu
|
350 |
-
$menu
|
351 |
-
|
352 |
-
|
353 |
-
( ( ( gmdate( 'Y' ) - 1 ) === $this->year ) ? 'current' : '' ) . '">' . ( gmdate( 'Y' ) - 1 ) . '</a> | </li>';
|
354 |
-
$menu .= '<li><a href="' . esc_url( add_query_arg( 'year', ( gmdate( 'Y' ) - 2 ) ) ) . '" class="' .
|
355 |
-
( ( ( gmdate( 'Y' ) - 2 ) === $this->year ) ? 'current' : '' ) . '">' . ( gmdate( 'Y' ) - 2 ) . '</a> | </li>';
|
356 |
-
$menu .= '</ul>';
|
357 |
-
$menu .= '</p>';
|
358 |
-
$menu .= '<br class="clear">';
|
359 |
$html .= $menu;
|
|
|
360 |
$html .= '<h4>' . __( 'Report currency', 'woocommerce-jetpack' ) . ': ' . $report_currency . '</h4>';
|
|
|
361 |
$months_styles = array();
|
362 |
for ( $i = 1; $i <= 12; $i++ ) {
|
363 |
$months_styles[] = ( gmdate( 'm' ) === $i && gmdate( 'Y' ) === $this->year ? 'width:8%;' : 'width:6%;' );
|
364 |
}
|
365 |
-
$html .= '<form method="post" action="">';
|
366 |
$html .= wcj_get_table_html(
|
367 |
$table_data,
|
368 |
array(
|
@@ -388,7 +384,7 @@ if ( ! class_exists( 'WCJ_Reports_Monthly_Sales' ) ) :
|
|
388 |
'<input name="wcj_reset_currency_rates" type="submit" class="button button-primary" value="' .
|
389 |
__( 'Reset Currency Rates', 'woocommerce-jetpack' ) . '" onclick="return confirm(\'' . __( 'Are you sure?', 'woocommerce-jetpack' ) . '\')">' .
|
390 |
wp_nonce_field( 'wcj_reset_currency_rates', 'wcj-reset-currency-rates-nonce' ) .
|
391 |
-
'</form>';
|
392 |
return $html;
|
393 |
}
|
394 |
}
|
2 |
/**
|
3 |
* Booster for WooCommerce - Reports - Monthly Sales (with Currency Conversion)
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @since 2.4.7
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/includes
|
86 |
/**
|
87 |
* Get_monthly_sales_report.
|
88 |
*
|
89 |
+
* @version 6.0.0
|
90 |
* @since 2.4.7
|
91 |
* @todo (maybe) visible rows selection by admin (as option)
|
92 |
* @todo (maybe) take not monthly average, but "Close" of closest day (probably create new "Daily Sales (with Currency Conversion)" report)
|
343 |
$execution_time_end = microtime( true );
|
344 |
|
345 |
// HTML.
|
346 |
+
$html = '';
|
347 |
+
$menu = '';
|
348 |
+
$menu .= '<div id="poststuff" class="wcj-reports-wide woocommerce-reports-wide"><div class="postbox"><div class="stats_range"><ul class="">';
|
349 |
+
$menu .= '<li class="' . ( ( gmdate( 'Y' ) === $this->year ) ? 'active' : '' ) . '"><a href="' . esc_url( add_query_arg( 'year', gmdate( 'Y' ) ) ) . '" >' . gmdate( 'Y' ) . '</a></li>';
|
350 |
+
$menu .= '<li class="' . ( ( (string) ( gmdate( 'Y' ) - 1 ) ) === ( $this->year ) ? 'active' : '' ) . '"><a href="' . esc_url( add_query_arg( 'year', ( gmdate( 'Y' ) - 1 ) ) ) . '">' . ( gmdate( 'Y' ) - 1 ) . '</a></li>';
|
351 |
+
$menu .= '<li class="' . ( ( (string) ( gmdate( 'Y' ) - 2 ) ) === ( $this->year ) ? 'active' : '' ) . '"><a href="' . esc_url( add_query_arg( 'year', ( gmdate( 'Y' ) - 2 ) ) ) . '">' . ( gmdate( 'Y' ) - 2 ) . '</a></li>';
|
352 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
353 |
$html .= $menu;
|
354 |
+
$html .= '<li class="custom">';
|
355 |
$html .= '<h4>' . __( 'Report currency', 'woocommerce-jetpack' ) . ': ' . $report_currency . '</h4>';
|
356 |
+
$html .= '</li></ul><br class="clear">';
|
357 |
$months_styles = array();
|
358 |
for ( $i = 1; $i <= 12; $i++ ) {
|
359 |
$months_styles[] = ( gmdate( 'm' ) === $i && gmdate( 'Y' ) === $this->year ? 'width:8%;' : 'width:6%;' );
|
360 |
}
|
361 |
+
$html .= '<div class="inside"><form method="post" action="">';
|
362 |
$html .= wcj_get_table_html(
|
363 |
$table_data,
|
364 |
array(
|
384 |
'<input name="wcj_reset_currency_rates" type="submit" class="button button-primary" value="' .
|
385 |
__( 'Reset Currency Rates', 'woocommerce-jetpack' ) . '" onclick="return confirm(\'' . __( 'Are you sure?', 'woocommerce-jetpack' ) . '\')">' .
|
386 |
wp_nonce_field( 'wcj_reset_currency_rates', 'wcj-reset-currency-rates-nonce' ) .
|
387 |
+
'</form></div></div></div></div>';
|
388 |
return $html;
|
389 |
}
|
390 |
}
|
includes/reports/class-wcj-reports-product-sales-daily.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Reports - Product Sales (Daily)
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 2.9.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/includes
|
@@ -47,14 +47,18 @@ if ( ! class_exists( 'WCJ_Reports_Product_Sales_Daily' ) ) :
|
|
47 |
/**
|
48 |
* Get_report_args.
|
49 |
*
|
50 |
-
* @version
|
51 |
* @since 2.9.0
|
52 |
*/
|
53 |
public function get_report_args() {
|
54 |
-
$current_time
|
55 |
-
|
|
|
|
|
|
|
|
|
56 |
$this->start_date = $wpnonce && isset( $_GET['start_date'] ) ? sanitize_text_field( wp_unslash( $_GET['start_date'] ) ) : gmdate( 'Y-m-d', strtotime( '-7 days', $current_time ) );
|
57 |
-
$this->end_date = isset( $_GET['end_date'] ) ? sanitize_text_field( wp_unslash( $_GET['end_date'] ) ) : gmdate( 'Y-m-d', $current_time );
|
58 |
$this->product_title = isset( $_GET['product_title'] ) ? sanitize_text_field( wp_unslash( $_GET['product_title'] ) ) : '';
|
59 |
}
|
60 |
|
@@ -171,7 +175,7 @@ if ( ! class_exists( 'WCJ_Reports_Product_Sales_Daily' ) ) :
|
|
171 |
/**
|
172 |
* Output_report_header.
|
173 |
*
|
174 |
-
* @version
|
175 |
* @since 2.9.0
|
176 |
*/
|
177 |
public function output_report_header() {
|
@@ -179,9 +183,11 @@ if ( ! class_exists( 'WCJ_Reports_Product_Sales_Daily' ) ) :
|
|
179 |
$settings_link = '<a href="' . admin_url( wcj_admin_tab_url() . '&wcj-cat=emails_and_misc§ion=reports' ) . '">' .
|
180 |
'<< ' . __( 'Reports Settings', 'woocommerce-jetpack' ) . '</a>';
|
181 |
$menu = '';
|
182 |
-
$menu .= '<ul class="
|
183 |
foreach ( array_merge( wcj_get_reports_standard_ranges(), wcj_get_reports_custom_ranges() ) as $custom_range ) {
|
184 |
-
$
|
|
|
|
|
185 |
'href="' . esc_url(
|
186 |
add_query_arg(
|
187 |
array(
|
@@ -191,34 +197,30 @@ if ( ! class_exists( 'WCJ_Reports_Product_Sales_Daily' ) ) :
|
|
191 |
)
|
192 |
) . '" ' .
|
193 |
'class="' . ( ( $this->start_date === $custom_range['start_date'] && $this->end_date === $custom_range['end_date'] ) ? 'current' : '' ) . '"' .
|
194 |
-
'>' . $custom_range['title'] . '</a
|
195 |
}
|
196 |
-
|
197 |
-
$menu .= '<br class="clear">';
|
198 |
// Product and date filter form.
|
199 |
// phpcs:disable WordPress.Security.NonceVerification
|
200 |
$pages = isset( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : '';
|
201 |
$tabs = isset( $_GET['tab'] ) ? sanitize_text_field( wp_unslash( $_GET['tab'] ) ) : '';
|
202 |
$reports = isset( $_GET['report'] ) ? sanitize_text_field( wp_unslash( $_GET['report'] ) ) : '';
|
203 |
// phpcs:enable WordPress.Security.NonceVerification
|
204 |
-
$filter_form = '';
|
205 |
$filter_form .= '<form method="get" action="">';
|
206 |
$filter_form .= '<input type="hidden" name="page" value="' . esc_attr( $pages ) . '" />';
|
207 |
$filter_form .= '<input type="hidden" name="tab" value="' . esc_attr( $tabs ) . '" />';
|
208 |
$filter_form .= '<input type="hidden" name="report" value="' . esc_attr( $reports ) . '" />';
|
209 |
-
$filter_form .= '<
|
210 |
-
'<input type="text" display="date" dateformat="' . wcj_date_format_php_to_js( 'Y-m-d' ) . '" name="start_date" title="" value="' . $this->start_date . '" />';
|
211 |
-
$filter_form .= ' ';
|
212 |
-
$filter_form .= '<
|
213 |
-
'<input type="text" display="date" dateformat="' . wcj_date_format_php_to_js( 'Y-m-d' ) . '" name="end_date" title="" value="' . $this->end_date . '" />';
|
214 |
-
$filter_form .= ' ';
|
215 |
-
$filter_form .= '<label style="font-style:italic;" for="product_title">' . __( 'Product:', 'woocommerce-jetpack' ) . '</label> ' .
|
216 |
-
'<input type="text" name="product_title" id="product_title" title="" value="' . $this->product_title . '" />';
|
217 |
$filter_form .= wp_nonce_field( 'booster_products_sales_daily_filter', 'booster_products_sales_daily_filter-nonce' );
|
218 |
-
$filter_form .= '<input type="submit" value="' . __( 'Filter', 'woocommerce-jetpack' ) . '" />';
|
219 |
$filter_form .= '</form>';
|
|
|
220 |
// Final result.
|
221 |
-
return '<p>' . $settings_link . '</p>
|
222 |
}
|
223 |
|
224 |
/**
|
@@ -328,13 +330,13 @@ if ( ! class_exists( 'WCJ_Reports_Product_Sales_Daily' ) ) :
|
|
328 |
$table_data,
|
329 |
array(
|
330 |
'table_class' => 'widefat striped',
|
331 |
-
'table_heading_type' => '
|
332 |
)
|
333 |
) .
|
334 |
/* translators: %d: translation added */
|
335 |
'<p><em>' . sprintf( __( 'Total orders: %d', 'woocommerce-jetpack' ), $this->total_orders ) . '</em></p>' :
|
336 |
'<p><em>' . __( 'No sales data for current period.', 'woocommerce-jetpack' ) . '</em></p>';
|
337 |
-
return $result;
|
338 |
}
|
339 |
}
|
340 |
|
2 |
/**
|
3 |
* Booster for WooCommerce - Reports - Product Sales (Daily)
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @since 2.9.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/includes
|
47 |
/**
|
48 |
* Get_report_args.
|
49 |
*
|
50 |
+
* @version 6.0.0
|
51 |
* @since 2.9.0
|
52 |
*/
|
53 |
public function get_report_args() {
|
54 |
+
$current_time = wcj_get_timestamp_date_from_gmt();
|
55 |
+
if ( isset( $_REQUEST['filter_submit'] ) ) {
|
56 |
+
$wpnonce = isset( $_REQUEST['booster_products_sales_daily_filter-nonce'] ) ? wp_verify_nonce( sanitize_key( $_REQUEST['booster_products_sales_daily_filter-nonce'] ), 'booster_products_sales_daily_filter' ) : false;
|
57 |
+
} else {
|
58 |
+
$wpnonce = true;
|
59 |
+
}
|
60 |
$this->start_date = $wpnonce && isset( $_GET['start_date'] ) ? sanitize_text_field( wp_unslash( $_GET['start_date'] ) ) : gmdate( 'Y-m-d', strtotime( '-7 days', $current_time ) );
|
61 |
+
$this->end_date = $wpnonce && isset( $_GET['end_date'] ) ? sanitize_text_field( wp_unslash( $_GET['end_date'] ) ) : gmdate( 'Y-m-d', $current_time );
|
62 |
$this->product_title = isset( $_GET['product_title'] ) ? sanitize_text_field( wp_unslash( $_GET['product_title'] ) ) : '';
|
63 |
}
|
64 |
|
175 |
/**
|
176 |
* Output_report_header.
|
177 |
*
|
178 |
+
* @version 6.0.0
|
179 |
* @since 2.9.0
|
180 |
*/
|
181 |
public function output_report_header() {
|
183 |
$settings_link = '<a href="' . admin_url( wcj_admin_tab_url() . '&wcj-cat=emails_and_misc§ion=reports' ) . '">' .
|
184 |
'<< ' . __( 'Reports Settings', 'woocommerce-jetpack' ) . '</a>';
|
185 |
$menu = '';
|
186 |
+
$menu .= '<div id="poststuff" class="wcj-reports-wide woocommerce-reports-wide"><div class="postbox"><div class="stats_range"><ul class="">';
|
187 |
foreach ( array_merge( wcj_get_reports_standard_ranges(), wcj_get_reports_custom_ranges() ) as $custom_range ) {
|
188 |
+
$is_active = $this->start_date === $custom_range['start_date'] && $this->end_date === $custom_range['end_date'] ? 'active' : '';
|
189 |
+
|
190 |
+
$menu .= '<li class="' . $is_active . '"><a ' .
|
191 |
'href="' . esc_url(
|
192 |
add_query_arg(
|
193 |
array(
|
197 |
)
|
198 |
) . '" ' .
|
199 |
'class="' . ( ( $this->start_date === $custom_range['start_date'] && $this->end_date === $custom_range['end_date'] ) ? 'current' : '' ) . '"' .
|
200 |
+
'>' . $custom_range['title'] . '</a></li>';
|
201 |
}
|
202 |
+
|
|
|
203 |
// Product and date filter form.
|
204 |
// phpcs:disable WordPress.Security.NonceVerification
|
205 |
$pages = isset( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : '';
|
206 |
$tabs = isset( $_GET['tab'] ) ? sanitize_text_field( wp_unslash( $_GET['tab'] ) ) : '';
|
207 |
$reports = isset( $_GET['report'] ) ? sanitize_text_field( wp_unslash( $_GET['report'] ) ) : '';
|
208 |
// phpcs:enable WordPress.Security.NonceVerification
|
209 |
+
$filter_form = '<li class="custom">Custom:';
|
210 |
$filter_form .= '<form method="get" action="">';
|
211 |
$filter_form .= '<input type="hidden" name="page" value="' . esc_attr( $pages ) . '" />';
|
212 |
$filter_form .= '<input type="hidden" name="tab" value="' . esc_attr( $tabs ) . '" />';
|
213 |
$filter_form .= '<input type="hidden" name="report" value="' . esc_attr( $reports ) . '" />';
|
214 |
+
$filter_form .= '<input type="hidden" name="filter_submit" value="filter_submit" />';
|
215 |
+
$filter_form .= '<input class="range_datepicker" size="9" type="text" display="date" dateformat="' . wcj_date_format_php_to_js( 'Y-m-d' ) . '" name="start_date" title="" value="' . $this->start_date . '" />';
|
216 |
+
$filter_form .= '<input class="range_datepicker" size="9" type="text" display="date" dateformat="' . wcj_date_format_php_to_js( 'Y-m-d' ) . '" name="end_date" title="" value="' . $this->end_date . '" />';
|
217 |
+
$filter_form .= '<input class="search_product" placeholder="Search product..." size="9" type="text" name="product_title" id="product_title" title="" value="' . $this->product_title . '" />';
|
|
|
|
|
|
|
|
|
218 |
$filter_form .= wp_nonce_field( 'booster_products_sales_daily_filter', 'booster_products_sales_daily_filter-nonce' );
|
219 |
+
$filter_form .= '<input type="submit" class="button" value="' . __( 'Filter', 'woocommerce-jetpack' ) . '" />';
|
220 |
$filter_form .= '</form>';
|
221 |
+
$filter_form .= '</li></ul><br class="clear">';
|
222 |
// Final result.
|
223 |
+
return '<p>' . $settings_link . '</p> ' . $menu . $filter_form;
|
224 |
}
|
225 |
|
226 |
/**
|
330 |
$table_data,
|
331 |
array(
|
332 |
'table_class' => 'widefat striped',
|
333 |
+
'table_heading_type' => 'horizontal',
|
334 |
)
|
335 |
) .
|
336 |
/* translators: %d: translation added */
|
337 |
'<p><em>' . sprintf( __( 'Total orders: %d', 'woocommerce-jetpack' ), $this->total_orders ) . '</em></p>' :
|
338 |
'<p><em>' . __( 'No sales data for current period.', 'woocommerce-jetpack' ) . '</em></p>';
|
339 |
+
return '<div class="inside">' . $result . '</div></div></div></div>';
|
340 |
}
|
341 |
}
|
342 |
|
includes/reports/class-wcj-reports-sales-gateways.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Reports - Product Sales - Gateways
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 3.6.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/includes
|
@@ -47,11 +47,15 @@ if ( ! class_exists( 'WCJ_Reports_Sales_Gateways' ) ) :
|
|
47 |
/**
|
48 |
* Get_report_args.
|
49 |
*
|
50 |
-
* @version
|
51 |
* @since 3.6.0
|
52 |
*/
|
53 |
public function get_report_args() {
|
54 |
-
|
|
|
|
|
|
|
|
|
55 |
$current_time = wcj_get_timestamp_date_from_gmt();
|
56 |
$this->start_date = $wpnonce && isset( $_GET['start_date'] ) ? sanitize_text_field( wp_unslash( $_GET['start_date'] ) ) : gmdate( 'Y-m-d', strtotime( '-7 days', $current_time ) );
|
57 |
$this->end_date = $wpnonce && isset( $_GET['end_date'] ) ? sanitize_text_field( wp_unslash( $_GET['end_date'] ) ) : gmdate( 'Y-m-d', $current_time );
|
@@ -116,7 +120,7 @@ if ( ! class_exists( 'WCJ_Reports_Sales_Gateways' ) ) :
|
|
116 |
/**
|
117 |
* Output_report_header.
|
118 |
*
|
119 |
-
* @version
|
120 |
* @since 3.6.0
|
121 |
*/
|
122 |
public function output_report_header() {
|
@@ -124,9 +128,11 @@ if ( ! class_exists( 'WCJ_Reports_Sales_Gateways' ) ) :
|
|
124 |
$settings_link = '<a href="' . admin_url( wcj_admin_tab_url() . '&wcj-cat=emails_and_misc§ion=reports' ) . '">' .
|
125 |
'<< ' . __( 'Reports Settings', 'woocommerce-jetpack' ) . '</a>';
|
126 |
$menu = '';
|
127 |
-
$menu .= '<ul class="
|
128 |
foreach ( array_merge( wcj_get_reports_standard_ranges(), wcj_get_reports_custom_ranges() ) as $custom_range ) {
|
129 |
-
$
|
|
|
|
|
130 |
'href="' . esc_url(
|
131 |
add_query_arg(
|
132 |
array(
|
@@ -136,10 +142,8 @@ if ( ! class_exists( 'WCJ_Reports_Sales_Gateways' ) ) :
|
|
136 |
)
|
137 |
) . '" ' .
|
138 |
'class="' . ( ( $this->start_date === $custom_range['start_date'] && $this->end_date === $custom_range['end_date'] ) ? 'current' : '' ) . '"' .
|
139 |
-
'>' . $custom_range['title'] . '</a
|
140 |
}
|
141 |
-
$menu .= '</ul>';
|
142 |
-
$menu .= '<br class="clear">';
|
143 |
// phpcs:disable WordPress.Security.NonceVerification
|
144 |
$page = isset( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : '';
|
145 |
$tab = isset( $_GET['tab'] ) ? sanitize_text_field( wp_unslash( $_GET['tab'] ) ) : '';
|
@@ -147,28 +151,25 @@ if ( ! class_exists( 'WCJ_Reports_Sales_Gateways' ) ) :
|
|
147 |
// phpcs:enable WordPress.Security.NonceVerification
|
148 |
|
149 |
// Date filter form.
|
150 |
-
$filter_form = '';
|
151 |
$filter_form .= '<form method="get" action="">';
|
152 |
$filter_form .= '<input type="hidden" name="page" value="' . esc_attr( $page ) . '" />';
|
153 |
$filter_form .= '<input type="hidden" name="tab" value="' . esc_attr( $tab ) . '" />';
|
154 |
$filter_form .= '<input type="hidden" name="report" value="' . esc_attr( $report ) . '" />';
|
155 |
-
$filter_form .= '<
|
156 |
-
'<input type="text" display="date" dateformat="' . wcj_date_format_php_to_js( 'Y-m-d' ) . '" name="
|
157 |
-
$filter_form .= ' ';
|
158 |
-
$filter_form .= '<label style="font-style:italic;" for="end_date">' . __( 'To:', 'woocommerce-jetpack' ) . '</label>' .
|
159 |
-
'<input type="text" display="date" dateformat="' . wcj_date_format_php_to_js( 'Y-m-d' ) . '" name="end_date" title="" value="' . $this->end_date . '" />';
|
160 |
-
$filter_form .= ' ';
|
161 |
$filter_form .= '<input type="hidden" name="wcj-reports-sales-gateways-nonce" value="' . wp_create_nonce( 'wcj-reports-sales-gateways' ) . '" />';
|
162 |
-
$filter_form .= '<input type="submit" value="' . __( 'Filter', 'woocommerce-jetpack' ) . '" />';
|
163 |
$filter_form .= '</form>';
|
|
|
164 |
// Final result.
|
165 |
-
return '<p>' . $settings_link . '</p>
|
166 |
}
|
167 |
|
168 |
/**
|
169 |
* Output_report_results.
|
170 |
*
|
171 |
-
* @version
|
172 |
* @since 3.6.0
|
173 |
*/
|
174 |
public function output_report_results() {
|
@@ -185,7 +186,7 @@ if ( ! class_exists( 'WCJ_Reports_Sales_Gateways' ) ) :
|
|
185 |
$table_data,
|
186 |
array(
|
187 |
'table_class' => 'widefat striped',
|
188 |
-
'table_heading_type' => '
|
189 |
)
|
190 |
) .
|
191 |
/* translators: %d: translation added */
|
@@ -193,7 +194,7 @@ if ( ! class_exists( 'WCJ_Reports_Sales_Gateways' ) ) :
|
|
193 |
} else {
|
194 |
$result = '<p><em>' . __( 'No sales data for current period.', 'woocommerce-jetpack' ) . '</em></p>';
|
195 |
}
|
196 |
-
return $result;
|
197 |
}
|
198 |
}
|
199 |
|
2 |
/**
|
3 |
* Booster for WooCommerce - Reports - Product Sales - Gateways
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @since 3.6.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package Booster_For_WooCommerce/includes
|
47 |
/**
|
48 |
* Get_report_args.
|
49 |
*
|
50 |
+
* @version 6.0.0
|
51 |
* @since 3.6.0
|
52 |
*/
|
53 |
public function get_report_args() {
|
54 |
+
if ( isset( $_REQUEST['filter_submit'] ) ) {
|
55 |
+
$wpnonce = isset( $_REQUEST['wcj-reports-sales-gateways-nonce'] ) ? wp_verify_nonce( sanitize_key( $_REQUEST['wcj-reports-sales-gateways-nonce'] ), 'wcj-reports-sales-gateways' ) : false;
|
56 |
+
} else {
|
57 |
+
$wpnonce = true;
|
58 |
+
}
|
59 |
$current_time = wcj_get_timestamp_date_from_gmt();
|
60 |
$this->start_date = $wpnonce && isset( $_GET['start_date'] ) ? sanitize_text_field( wp_unslash( $_GET['start_date'] ) ) : gmdate( 'Y-m-d', strtotime( '-7 days', $current_time ) );
|
61 |
$this->end_date = $wpnonce && isset( $_GET['end_date'] ) ? sanitize_text_field( wp_unslash( $_GET['end_date'] ) ) : gmdate( 'Y-m-d', $current_time );
|
120 |
/**
|
121 |
* Output_report_header.
|
122 |
*
|
123 |
+
* @version 6.0.0
|
124 |
* @since 3.6.0
|
125 |
*/
|
126 |
public function output_report_header() {
|
128 |
$settings_link = '<a href="' . admin_url( wcj_admin_tab_url() . '&wcj-cat=emails_and_misc§ion=reports' ) . '">' .
|
129 |
'<< ' . __( 'Reports Settings', 'woocommerce-jetpack' ) . '</a>';
|
130 |
$menu = '';
|
131 |
+
$menu .= '<div id="poststuff" class="wcj-reports-wide woocommerce-reports-wide"><div class="postbox"><div class="stats_range"><ul class="">';
|
132 |
foreach ( array_merge( wcj_get_reports_standard_ranges(), wcj_get_reports_custom_ranges() ) as $custom_range ) {
|
133 |
+
$is_active = $this->start_date === $custom_range['start_date'] && $this->end_date === $custom_range['end_date'] ? 'active' : '';
|
134 |
+
|
135 |
+
$menu .= '<li class="' . $is_active . '"><a ' .
|
136 |
'href="' . esc_url(
|
137 |
add_query_arg(
|
138 |
array(
|
142 |
)
|
143 |
) . '" ' .
|
144 |
'class="' . ( ( $this->start_date === $custom_range['start_date'] && $this->end_date === $custom_range['end_date'] ) ? 'current' : '' ) . '"' .
|
145 |
+
'>' . $custom_range['title'] . '</a></li>';
|
146 |
}
|
|
|
|
|
147 |
// phpcs:disable WordPress.Security.NonceVerification
|
148 |
$page = isset( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : '';
|
149 |
$tab = isset( $_GET['tab'] ) ? sanitize_text_field( wp_unslash( $_GET['tab'] ) ) : '';
|
151 |
// phpcs:enable WordPress.Security.NonceVerification
|
152 |
|
153 |
// Date filter form.
|
154 |
+
$filter_form = '<li class="custom">Custom:';
|
155 |
$filter_form .= '<form method="get" action="">';
|
156 |
$filter_form .= '<input type="hidden" name="page" value="' . esc_attr( $page ) . '" />';
|
157 |
$filter_form .= '<input type="hidden" name="tab" value="' . esc_attr( $tab ) . '" />';
|
158 |
$filter_form .= '<input type="hidden" name="report" value="' . esc_attr( $report ) . '" />';
|
159 |
+
$filter_form .= '<input class="range_datepicker" size="9" type="text" display="date" dateformat="' . wcj_date_format_php_to_js( 'Y-m-d' ) . '" name="start_date" title="" value="' . $this->start_date . '" />';
|
160 |
+
$filter_form .= '<input class="range_datepicker" size="9" type="text" display="date" dateformat="' . wcj_date_format_php_to_js( 'Y-m-d' ) . '" name="end_date" title="" value="' . $this->end_date . '" />';
|
|
|
|
|
|
|
|
|
161 |
$filter_form .= '<input type="hidden" name="wcj-reports-sales-gateways-nonce" value="' . wp_create_nonce( 'wcj-reports-sales-gateways' ) . '" />';
|
162 |
+
$filter_form .= '<input type="submit" class="button" value="' . __( 'Filter', 'woocommerce-jetpack' ) . '" />';
|
163 |
$filter_form .= '</form>';
|
164 |
+
$filter_form .= '</li></ul><br class="clear">';
|
165 |
// Final result.
|
166 |
+
return '<p>' . $settings_link . '</p> ' . $menu . $filter_form;
|
167 |
}
|
168 |
|
169 |
/**
|
170 |
* Output_report_results.
|
171 |
*
|
172 |
+
* @version 6.0.0
|
173 |
* @since 3.6.0
|
174 |
*/
|
175 |
public function output_report_results() {
|
186 |
$table_data,
|
187 |
array(
|
188 |
'table_class' => 'widefat striped',
|
189 |
+
'table_heading_type' => 'horizontal',
|
190 |
)
|
191 |
) .
|
192 |
/* translators: %d: translation added */
|
194 |
} else {
|
195 |
$result = '<p><em>' . __( 'No sales data for current period.', 'woocommerce-jetpack' ) . '</em></p>';
|
196 |
}
|
197 |
+
return '<div class="inside">' . $result . '</div></div></div></div>';
|
198 |
}
|
199 |
}
|
200 |
|
includes/reports/class-wcj-reports-sales.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Reports - Sales
|
4 |
*
|
5 |
-
* @version
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/includes
|
8 |
*/
|
@@ -80,7 +80,7 @@ if ( ! class_exists( 'WCJ_Reports_Sales' ) ) :
|
|
80 |
/**
|
81 |
* Get_products_sales.
|
82 |
*
|
83 |
-
* @version
|
84 |
* @since 2.3.0
|
85 |
* @todo fix when variable and variations are all (wrongfully) counted in total sums
|
86 |
* @todo display more info for "Parent product deleted" and "Product deleted"
|
@@ -365,15 +365,11 @@ if ( ! class_exists( 'WCJ_Reports_Sales' ) ) :
|
|
365 |
'<< ' . __( 'Reports Settings', 'woocommerce-jetpack' ) . '</a>';
|
366 |
|
367 |
$menu = '';
|
368 |
-
$menu .= '<ul class="
|
369 |
-
|
370 |
-
( ( gmdate( 'Y' ) === $this->year ) ? '
|
371 |
-
$menu .= '<li><a href="' . esc_url( add_query_arg( 'year', ( gmdate( 'Y' ) - 1 ) ) ) . '"
|
372 |
-
( ( (string) ( gmdate( 'Y' ) -
|
373 |
-
$menu .= '<li><a href="' . esc_url( add_query_arg( 'year', ( gmdate( 'Y' ) - 2 ) ) ) . '" class="' .
|
374 |
-
( ( (string) ( gmdate( 'Y' ) - 2 ) === $this->year ) ? 'current' : '' ) . '">' . ( gmdate( 'Y' ) - 2 ) . '</a></li>';
|
375 |
-
$menu .= '</ul>';
|
376 |
-
$menu .= '<br class="clear">';
|
377 |
|
378 |
// phpcs:disable WordPress.Security.NonceVerification
|
379 |
$page = isset( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : '';
|
@@ -381,21 +377,22 @@ if ( ! class_exists( 'WCJ_Reports_Sales' ) ) :
|
|
381 |
$report = isset( $_GET['report'] ) ? sanitize_text_field( wp_unslash( $_GET['report'] ) ) : '';
|
382 |
// phpcs:enable WordPress.Security.NonceVerification
|
383 |
|
384 |
-
$filter_form = '';
|
385 |
$filter_form .= '<form method="get" action="">';
|
386 |
$filter_form .= '<input type="hidden" name="page" value="' . esc_attr( $page ) . '" />';
|
387 |
$filter_form .= '<input type="hidden" name="tab" value="' . esc_attr( $tab ) . '" />';
|
388 |
$filter_form .= '<input type="hidden" name="report" value="' . esc_attr( $report ) . '" />';
|
389 |
$filter_form .= '<input type="hidden" name="year" value="' . $this->year . '" />';
|
390 |
-
$filter_form .= '<input type="text" name="product_title" title="" value="' . $this->product_title . '" />' .
|
391 |
-
'<input type="submit" value="' . __( 'Filter products', 'woocommerce-jetpack' ) . '" />';
|
392 |
$filter_form .= '</form>';
|
|
|
393 |
|
394 |
$the_results = ( ! empty( $products_data ) ) ?
|
395 |
wcj_get_table_html( $table_data, array( 'table_class' => 'widefat striped' ) ) :
|
396 |
'<p><em>' . __( 'No sales data for current period.' ) . '</em></p>';
|
397 |
|
398 |
-
return '<p>' . $settings_link . '</p>
|
399 |
}
|
400 |
}
|
401 |
|
2 |
/**
|
3 |
* Booster for WooCommerce - Reports - Sales
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/includes
|
8 |
*/
|
80 |
/**
|
81 |
* Get_products_sales.
|
82 |
*
|
83 |
+
* @version 6.0.0
|
84 |
* @since 2.3.0
|
85 |
* @todo fix when variable and variations are all (wrongfully) counted in total sums
|
86 |
* @todo display more info for "Parent product deleted" and "Product deleted"
|
365 |
'<< ' . __( 'Reports Settings', 'woocommerce-jetpack' ) . '</a>';
|
366 |
|
367 |
$menu = '';
|
368 |
+
$menu .= '<div id="poststuff" class="wcj-reports-wide woocommerce-reports-wide"><div class="postbox"><div class="stats_range"><ul class="">';
|
369 |
+
|
370 |
+
$menu .= '<li class="' . ( ( gmdate( 'Y' ) === $this->year ) ? 'active' : '' ) . '"><a href="' . esc_url( add_query_arg( 'year', gmdate( 'Y' ) ) ) . '" >' . gmdate( 'Y' ) . '</a></li>';
|
371 |
+
$menu .= '<li class="' . ( ( (string) ( gmdate( 'Y' ) - 1 ) ) === ( $this->year ) ? 'active' : '' ) . '"><a href="' . esc_url( add_query_arg( 'year', ( gmdate( 'Y' ) - 1 ) ) ) . '">' . ( gmdate( 'Y' ) - 1 ) . '</a></li>';
|
372 |
+
$menu .= '<li class="' . ( ( (string) ( gmdate( 'Y' ) - 2 ) ) === ( $this->year ) ? 'active' : '' ) . '"><a href="' . esc_url( add_query_arg( 'year', ( gmdate( 'Y' ) - 2 ) ) ) . '">' . ( gmdate( 'Y' ) - 2 ) . '</a></li>';
|
|
|
|
|
|
|
|
|
373 |
|
374 |
// phpcs:disable WordPress.Security.NonceVerification
|
375 |
$page = isset( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : '';
|
377 |
$report = isset( $_GET['report'] ) ? sanitize_text_field( wp_unslash( $_GET['report'] ) ) : '';
|
378 |
// phpcs:enable WordPress.Security.NonceVerification
|
379 |
|
380 |
+
$filter_form = '<li class="custom">';
|
381 |
$filter_form .= '<form method="get" action="">';
|
382 |
$filter_form .= '<input type="hidden" name="page" value="' . esc_attr( $page ) . '" />';
|
383 |
$filter_form .= '<input type="hidden" name="tab" value="' . esc_attr( $tab ) . '" />';
|
384 |
$filter_form .= '<input type="hidden" name="report" value="' . esc_attr( $report ) . '" />';
|
385 |
$filter_form .= '<input type="hidden" name="year" value="' . $this->year . '" />';
|
386 |
+
$filter_form .= '<input class="search_product" placeholder="Search product..." size="14" type="text" name="product_title" title="" value="' . $this->product_title . '" />' .
|
387 |
+
'<input class="button" type="submit" value="' . __( 'Filter products', 'woocommerce-jetpack' ) . '" />';
|
388 |
$filter_form .= '</form>';
|
389 |
+
$filter_form .= '</li></ul><br class="clear">';
|
390 |
|
391 |
$the_results = ( ! empty( $products_data ) ) ?
|
392 |
wcj_get_table_html( $table_data, array( 'table_class' => 'widefat striped' ) ) :
|
393 |
'<p><em>' . __( 'No sales data for current period.' ) . '</em></p>';
|
394 |
|
395 |
+
return '<p>' . $settings_link . '</p> ' . $menu . $filter_form . '<div class="inside">' . $the_results . '</div></div></div></div>';
|
396 |
}
|
397 |
}
|
398 |
|
includes/reports/class-wcj-reports-stock.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Reports - Stock
|
4 |
*
|
5 |
-
* @version
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/includes
|
8 |
*/
|
@@ -77,20 +77,20 @@ if ( ! class_exists( 'WCJ_Reports_Stock' ) ) :
|
|
77 |
|
78 |
/**
|
79 |
* Get_submenu_html.
|
|
|
|
|
80 |
*/
|
81 |
public function get_submenu_html() {
|
82 |
$html = '';
|
83 |
-
$html .= '<ul class="
|
84 |
foreach ( $this->ranges_in_days as $the_period ) {
|
85 |
-
$
|
86 |
-
|
|
|
87 |
$html .= '<a href="' . get_admin_url() . 'admin.php?page=wc-reports&tab=stock&report=' . $this->report_id . '&period=' . $the_period . '" class="">' . $the_period . ' days</a>';
|
88 |
-
$html .= ( $the_period === $this->range_days ) ? '</strong>' : '';
|
89 |
-
$html .= ' | ';
|
90 |
$html .= '</li>';
|
91 |
}
|
92 |
$html .= '</ul>';
|
93 |
-
$html .= '<br class="clear">';
|
94 |
return $html;
|
95 |
}
|
96 |
|
@@ -270,7 +270,7 @@ if ( ! class_exists( 'WCJ_Reports_Stock' ) ) :
|
|
270 |
/**
|
271 |
* Get_report_html.
|
272 |
*
|
273 |
-
* @version
|
274 |
*/
|
275 |
public function get_report_html() {
|
276 |
$products_info = $this->data_products;
|
@@ -280,11 +280,11 @@ if ( ! class_exists( 'WCJ_Reports_Stock' ) ) :
|
|
280 |
// Style.
|
281 |
$html .= '<style>';
|
282 |
$html .= '.wcj_report_table_sales_columns { background-color: #F6F6F6; }';
|
283 |
-
$html .= '.widefat { width:
|
284 |
$html .= '</style>';
|
285 |
// Products table - header.
|
286 |
-
$html .= '<table class="widefat"><tbody>';
|
287 |
-
$html .= '<tr>';
|
288 |
$html .= '<th>#</th>';
|
289 |
$html .= '<th>' . __( 'Product', 'woocommerce-jetpack' ) . '</th>';
|
290 |
$html .= '<th>' . __( 'Category', 'woocommerce-jetpack' ) . '</th>';
|
@@ -356,19 +356,23 @@ if ( ! class_exists( 'WCJ_Reports_Stock' ) ) :
|
|
356 |
$html .= '</tr>';
|
357 |
}
|
358 |
}
|
359 |
-
$
|
360 |
-
|
361 |
-
|
362 |
-
$
|
363 |
-
$html_header
|
364 |
-
$html_header .= '<
|
365 |
-
$html_header .= '<tr> <th>' .
|
|
|
|
|
|
|
366 |
if ( 0 !== $total_current_stock_purchase_price ) {
|
367 |
-
$html_header .= '<tr> <th>' . __( 'Total current stock purchase price', 'woocommerce-jetpack' ) . '</th>
|
368 |
}
|
369 |
$html_header .= '</tbody></table>';
|
370 |
-
$html_header .= '
|
371 |
$time_elapsed_html = '<p><em>' . __( 'Report was generated in: ', 'woocommerce-jetpack' ) . intval( microtime( true ) - $this->start_time ) . ' s </em></p>';
|
|
|
372 |
return $this->get_submenu_html() . $html_header . $html . $time_elapsed_html;
|
373 |
}
|
374 |
}
|
2 |
/**
|
3 |
* Booster for WooCommerce - Reports - Stock
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/includes
|
8 |
*/
|
77 |
|
78 |
/**
|
79 |
* Get_submenu_html.
|
80 |
+
*
|
81 |
+
* @version 6.0.0
|
82 |
*/
|
83 |
public function get_submenu_html() {
|
84 |
$html = '';
|
85 |
+
$html .= '<div id="poststuff" class="wcj-reports-wide woocommerce-reports-wide"><div class="postbox"><div class="stats_range"><ul class="">';
|
86 |
foreach ( $this->ranges_in_days as $the_period ) {
|
87 |
+
$is_active = (string) $the_period === $this->range_days ? 'active' : '';
|
88 |
+
|
89 |
+
$html .= '<li class="' . $is_active . '">';
|
90 |
$html .= '<a href="' . get_admin_url() . 'admin.php?page=wc-reports&tab=stock&report=' . $this->report_id . '&period=' . $the_period . '" class="">' . $the_period . ' days</a>';
|
|
|
|
|
91 |
$html .= '</li>';
|
92 |
}
|
93 |
$html .= '</ul>';
|
|
|
94 |
return $html;
|
95 |
}
|
96 |
|
270 |
/**
|
271 |
* Get_report_html.
|
272 |
*
|
273 |
+
* @version 6.0.0
|
274 |
*/
|
275 |
public function get_report_html() {
|
276 |
$products_info = $this->data_products;
|
280 |
// Style.
|
281 |
$html .= '<style>';
|
282 |
$html .= '.wcj_report_table_sales_columns { background-color: #F6F6F6; }';
|
283 |
+
$html .= '.widefat { width: 100%; }';
|
284 |
$html .= '</style>';
|
285 |
// Products table - header.
|
286 |
+
$html .= '<div class="main"><table class="widefat striped" style="clear:inherit"><tbody>';
|
287 |
+
$html .= '<tr class="wcj-row">';
|
288 |
$html .= '<th>#</th>';
|
289 |
$html .= '<th>' . __( 'Product', 'woocommerce-jetpack' ) . '</th>';
|
290 |
$html .= '<th>' . __( 'Category', 'woocommerce-jetpack' ) . '</th>';
|
356 |
$html .= '</tr>';
|
357 |
}
|
358 |
}
|
359 |
+
if ( $product_counter <= 0 ) {
|
360 |
+
$html .= '<tr class="wcj-row"> <td colspan="10"> ' . __( 'Product not available', 'woocommerce-jetpack' ) . '</td> </tr>';
|
361 |
+
}
|
362 |
+
$html .= '</tbody></table></div>';
|
363 |
+
$html_header = '<div class="inside"><h4>' . $report_info['title'] . ': ' . $report_info['desc'] . '</h4></div>';
|
364 |
+
$html_header .= '<div class="inside chart-with-sidebar"><div class="chart-sidebar"><table class="widefat striped" style="clear:inherit"><tbody>';
|
365 |
+
$html_header .= '<tr class="wcj-row"> <th>' . wc_price( $total_current_stock_price ) . '<br class="clear"><span style="font-weight: 400;">' . __( 'Total current stock value', 'woocommerce-jetpack' ) . '</span></th> </tr>';
|
366 |
+
$html_header .= '<tr class="wcj-row"> <th>' . wc_price( $info['total_stock_price'] ) . '<br class="clear"><span style="font-weight: 400;">' . __( 'Total stock value', 'woocommerce-jetpack' ) . '</span></th> </tr>';
|
367 |
+
$html_header .= '<tr class="wcj-row"> <th>' . wc_price( $info['stock_price_average'] ) . '<br class="clear"><span style="font-weight: 400;">' . __( 'Product stock value average', 'woocommerce-jetpack' ) . '</span></th> </tr>';
|
368 |
+
$html_header .= '<tr class="wcj-row"> <th><span class="woocommerce-Price-amount amount" >' . number_format( $info['stock_average'], 2, '.', '' ) . '</span><br class="clear"><span style="font-weight: 400;">' . __( 'Product stock average', 'woocommerce-jetpack' ) . '</span></th> </tr>';
|
369 |
if ( 0 !== $total_current_stock_purchase_price ) {
|
370 |
+
$html_header .= '<tr class="wcj-row"> <th>' . wc_price( $total_current_stock_purchase_price ) . '<br class="clear"><span style="font-weight: 400;">' . __( 'Total current stock purchase price', 'woocommerce-jetpack' ) . '</span></th> </tr>';
|
371 |
}
|
372 |
$html_header .= '</tbody></table>';
|
373 |
+
$html_header .= '</div>';
|
374 |
$time_elapsed_html = '<p><em>' . __( 'Report was generated in: ', 'woocommerce-jetpack' ) . intval( microtime( true ) - $this->start_time ) . ' s </em></p>';
|
375 |
+
$time_elapsed_html = '</div>';
|
376 |
return $this->get_submenu_html() . $html_header . $html . $time_elapsed_html;
|
377 |
}
|
378 |
}
|
includes/settings/wcj-settings-currency-exchange-rates.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Settings - Currency Exchange Rates
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 2.8.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @todo add "rounding" and "fixed offset" options for each pair separately (and option to enable/disable these per pair extra settings)
|
@@ -95,14 +95,6 @@ $settings = array(
|
|
95 |
'default' => 'no',
|
96 |
'type' => 'checkbox',
|
97 |
),
|
98 |
-
array(
|
99 |
-
'title' => __( 'Always Use cURL', 'woocommerce-jetpack' ),
|
100 |
-
'desc' => __( 'Enable', 'woocommerce-jetpack' ),
|
101 |
-
'desc_tip' => __( 'If for some reason currency exchange rates are not updating, try enabling this option.', 'woocommerce-jetpack' ),
|
102 |
-
'id' => 'wcj_currency_exchange_rates_always_curl',
|
103 |
-
'default' => 'no',
|
104 |
-
'type' => 'checkbox',
|
105 |
-
),
|
106 |
array(
|
107 |
'title' => __( 'Force Point as Decimal Separator', 'woocommerce-jetpack' ),
|
108 |
'desc' => __( 'Enable', 'woocommerce-jetpack' ),
|
2 |
/**
|
3 |
* Booster for WooCommerce - Settings - Currency Exchange Rates
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @since 2.8.0
|
7 |
* @author Pluggabl LLC.
|
8 |
* @todo add "rounding" and "fixed offset" options for each pair separately (and option to enable/disable these per pair extra settings)
|
95 |
'default' => 'no',
|
96 |
'type' => 'checkbox',
|
97 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
98 |
array(
|
99 |
'title' => __( 'Force Point as Decimal Separator', 'woocommerce-jetpack' ),
|
100 |
'desc' => __( 'Enable', 'woocommerce-jetpack' ),
|
includes/shortcodes/class-wcj-general-shortcodes.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Shortcodes - General
|
4 |
*
|
5 |
-
* @version
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/shortcodes
|
8 |
*/
|
@@ -121,7 +121,7 @@ if ( ! class_exists( 'WCJ_General_Shortcodes' ) ) :
|
|
121 |
/**
|
122 |
* Wcj_post_meta_sum.
|
123 |
*
|
124 |
-
* @version
|
125 |
* @since 4.1.0
|
126 |
* @param array $atts defined shortcode attributes.
|
127 |
*/
|
@@ -130,7 +130,7 @@ if ( ! class_exists( 'WCJ_General_Shortcodes' ) ) :
|
|
130 |
return '';
|
131 |
}
|
132 |
global $wpdb;
|
133 |
-
$sum = $wpdb->get_var( $wpdb->prepare( "SELECT sum(meta_value) FROM $wpdb->postmeta WHERE meta_key = %s", $atts['key'] ) ); //
|
134 |
return ( ! empty( $atts['offset'] ) ? $sum + $atts['offset'] : $sum );
|
135 |
}
|
136 |
|
@@ -476,7 +476,7 @@ if ( ! class_exists( 'WCJ_General_Shortcodes' ) ) :
|
|
476 |
/**
|
477 |
* Wcj_selector.
|
478 |
*
|
479 |
-
* @version
|
480 |
* @since 3.1.0
|
481 |
* @todo add `default` attribute
|
482 |
* @todo (maybe) add more selector types (e.g.: currency)
|
@@ -487,8 +487,9 @@ if ( ! class_exists( 'WCJ_General_Shortcodes' ) ) :
|
|
487 |
$html = '';
|
488 |
$options = '';
|
489 |
$countries = apply_filters( 'booster_option', 'all', wcj_get_option( 'wcj_product_by_country_country_list_shortcode', 'all' ) );
|
490 |
-
$
|
491 |
-
|
|
|
492 |
wcj_session_get( 'wcj_selected_' . $atts['selector_type'] )
|
493 |
);
|
494 |
|
2 |
/**
|
3 |
* Booster for WooCommerce - Shortcodes - General
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/shortcodes
|
8 |
*/
|
121 |
/**
|
122 |
* Wcj_post_meta_sum.
|
123 |
*
|
124 |
+
* @version 6.0.0
|
125 |
* @since 4.1.0
|
126 |
* @param array $atts defined shortcode attributes.
|
127 |
*/
|
130 |
return '';
|
131 |
}
|
132 |
global $wpdb;
|
133 |
+
$sum = $wpdb->get_var( $wpdb->prepare( "SELECT sum(meta_value) FROM $wpdb->postmeta WHERE meta_key = %s", $atts['key'] ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
|
134 |
return ( ! empty( $atts['offset'] ) ? $sum + $atts['offset'] : $sum );
|
135 |
}
|
136 |
|
476 |
/**
|
477 |
* Wcj_selector.
|
478 |
*
|
479 |
+
* @version 6.0.0
|
480 |
* @since 3.1.0
|
481 |
* @todo add `default` attribute
|
482 |
* @todo (maybe) add more selector types (e.g.: currency)
|
487 |
$html = '';
|
488 |
$options = '';
|
489 |
$countries = apply_filters( 'booster_option', 'all', wcj_get_option( 'wcj_product_by_country_country_list_shortcode', 'all' ) );
|
490 |
+
$wpnonce = isset( $_REQUEST[ 'wcj_' . $atts['selector_type'] . '_selector-nonce' ] ) ? wp_verify_nonce( sanitize_key( $_REQUEST[ 'wcj_' . $atts['selector_type'] . '_selector-nonce' ] ), 'wcj_' . $atts['selector_type'] . '_selector' ) : false;
|
491 |
+
$selected_value = ( ( $wpnonce && isset( $_REQUEST[ 'wcj_' . $atts['selector_type'] . '_selector' ] ) ) ?
|
492 |
+
sanitize_text_field( wp_unslash( $_REQUEST[ 'wcj_' . $atts['selector_type'] . '_selector' ] ) ) :
|
493 |
wcj_session_get( 'wcj_selected_' . $atts['selector_type'] )
|
494 |
);
|
495 |
|
includes/shortcodes/class-wcj-order-items-shortcodes.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Shortcodes - Order Items
|
4 |
*
|
5 |
-
* @version
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/shortcodes
|
8 |
*/
|
@@ -39,7 +39,7 @@ if ( ! class_exists( 'WCJ_Order_Items_Shortcodes' ) ) :
|
|
39 |
|
40 |
$modified_atts = array_merge(
|
41 |
array(
|
42 |
-
'order_id' => ( isset( $_GET['order_id'] ) ) ? sanitize_text_field( wp_unslash( $_GET['order_id'] ) ) : get_the_ID(), //
|
43 |
'hide_currency' => 'no',
|
44 |
'table_class' => '',
|
45 |
'shipping_as_item' => '', // e.g.: 'Shipping'.
|
@@ -145,7 +145,14 @@ if ( ! class_exists( 'WCJ_Order_Items_Shortcodes' ) ) :
|
|
145 |
if ( empty( $new_item_args ) ) {
|
146 |
return $items;
|
147 |
}
|
148 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
149 |
// Create item.
|
150 |
if ( WCJ_IS_WC_VERSION_BELOW_3 ) {
|
151 |
$item = array(
|
@@ -264,14 +271,16 @@ if ( ! class_exists( 'WCJ_Order_Items_Shortcodes' ) ) :
|
|
264 |
}
|
265 |
|
266 |
// Get attribute data.
|
|
|
267 |
if ( taxonomy_exists( wc_sanitize_taxonomy_name( $meta['meta_key'] ) ) ) {
|
268 |
$term = get_term_by( 'slug', $meta['meta_value'], wc_sanitize_taxonomy_name( $meta['meta_key'] ) );
|
269 |
-
$meta['meta_key'] = wc_attribute_label( wc_sanitize_taxonomy_name( $meta['meta_key'] ) );
|
270 |
-
$meta['meta_value'] = isset( $term->name ) ? $term->name : $meta['meta_value'];
|
271 |
} else {
|
272 |
-
$meta['meta_key'] = ( is_object( $the_product ) ) ? wc_attribute_label( $meta['meta_key'], $the_product ) : $meta['meta_key'];
|
273 |
}
|
274 |
$meta_info[] = wp_kses_post( rawurldecode( $meta['meta_key'] ) ) . ': ' . wp_kses_post( rawurldecode( $meta['meta_value'] ) );
|
|
|
275 |
}
|
276 |
$meta_info = implode( ', ', $meta_info );
|
277 |
}
|
@@ -281,7 +290,7 @@ if ( ! class_exists( 'WCJ_Order_Items_Shortcodes' ) ) :
|
|
281 |
/**
|
282 |
* Wcj_order_items_table.
|
283 |
*
|
284 |
-
* @version
|
285 |
* @todo `sort_by_column` - fix `item_number`
|
286 |
* @todo `$item['is_custom']` may be defined only if WCJ_IS_WC_VERSION_BELOW_3
|
287 |
* @todo `if ( '' !== $column_cell_data )` - this may be optional?
|
@@ -357,8 +366,8 @@ if ( ! class_exists( 'WCJ_Order_Items_Shortcodes' ) ) :
|
|
357 |
$data = array();
|
358 |
$item_counter = 0;
|
359 |
foreach ( $the_items as $item_id => $item ) {
|
360 |
-
$
|
361 |
-
$the_product
|
362 |
// Check if it's not excluded by category.
|
363 |
if ( '' !== $atts['exclude_by_categories'] && $the_product ) {
|
364 |
if ( wcj_product_has_terms( $the_product, $atts['exclude_by_categories'], 'product_cat' ) ) {
|
@@ -536,7 +545,7 @@ if ( ! class_exists( 'WCJ_Order_Items_Shortcodes' ) ) :
|
|
536 |
|
537 |
case 'item_debug':
|
538 |
case 'debug':
|
539 |
-
return
|
540 |
|
541 |
case 'item_regular_price':
|
542 |
case 'product_regular_price':
|
@@ -556,7 +565,7 @@ if ( ! class_exists( 'WCJ_Order_Items_Shortcodes' ) ) :
|
|
556 |
|
557 |
case 'product_categories':
|
558 |
return ( is_object( $the_product ) ) ?
|
559 |
-
|
560 |
'';
|
561 |
|
562 |
case 'item_tax_class':
|
2 |
/**
|
3 |
* Booster for WooCommerce - Shortcodes - Order Items
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @author Pluggabl LLC.
|
7 |
* @package Booster_For_WooCommerce/shortcodes
|
8 |
*/
|
39 |
|
40 |
$modified_atts = array_merge(
|
41 |
array(
|
42 |
+
'order_id' => ( isset( $_GET['order_id'] ) ) ? sanitize_text_field( wp_unslash( $_GET['order_id'] ) ) : get_the_ID(), //phpcs:ignore WordPress.Security.NonceVerification
|
43 |
'hide_currency' => 'no',
|
44 |
'table_class' => '',
|
45 |
'shipping_as_item' => '', // e.g.: 'Shipping'.
|
145 |
if ( empty( $new_item_args ) ) {
|
146 |
return $items;
|
147 |
}
|
148 |
+
$name = $new_item_args['name'];
|
149 |
+
$qty = $new_item_args['qty'];
|
150 |
+
$line_subtotal = $new_item_args['line_subtotal'];
|
151 |
+
$line_total = $new_item_args['line_total'];
|
152 |
+
$line_tax = $new_item_args['line_tax'];
|
153 |
+
$line_subtotal_tax = $new_item_args['line_subtotal_tax'];
|
154 |
+
$type = $new_item_args['type'];
|
155 |
+
|
156 |
// Create item.
|
157 |
if ( WCJ_IS_WC_VERSION_BELOW_3 ) {
|
158 |
$item = array(
|
271 |
}
|
272 |
|
273 |
// Get attribute data.
|
274 |
+
// phpcs:disable WordPress.DB.SlowDBQuery.slow_db_query_meta_key, WordPress.DB.SlowDBQuery.slow_db_query_meta_value
|
275 |
if ( taxonomy_exists( wc_sanitize_taxonomy_name( $meta['meta_key'] ) ) ) {
|
276 |
$term = get_term_by( 'slug', $meta['meta_value'], wc_sanitize_taxonomy_name( $meta['meta_key'] ) );
|
277 |
+
$meta['meta_key'] = wc_attribute_label( wc_sanitize_taxonomy_name( $meta['meta_key'] ) );
|
278 |
+
$meta['meta_value'] = isset( $term->name ) ? $term->name : $meta['meta_value'];
|
279 |
} else {
|
280 |
+
$meta['meta_key'] = ( is_object( $the_product ) ) ? wc_attribute_label( $meta['meta_key'], $the_product ) : $meta['meta_key'];
|
281 |
}
|
282 |
$meta_info[] = wp_kses_post( rawurldecode( $meta['meta_key'] ) ) . ': ' . wp_kses_post( rawurldecode( $meta['meta_value'] ) );
|
283 |
+
// phpcs:enable
|
284 |
}
|
285 |
$meta_info = implode( ', ', $meta_info );
|
286 |
}
|
290 |
/**
|
291 |
* Wcj_order_items_table.
|
292 |
*
|
293 |
+
* @version 6.0.0
|
294 |
* @todo `sort_by_column` - fix `item_number`
|
295 |
* @todo `$item['is_custom']` may be defined only if WCJ_IS_WC_VERSION_BELOW_3
|
296 |
* @todo `if ( '' !== $column_cell_data )` - this may be optional?
|
366 |
$data = array();
|
367 |
$item_counter = 0;
|
368 |
foreach ( $the_items as $item_id => $item ) {
|
369 |
+
$is_custom = ( isset( $item['is_custom'] ) );
|
370 |
+
$the_product = ( true === $is_custom ) ? null : ( method_exists( $item, 'get_product' ) ? $item->get_product( $item ) : null );
|
371 |
// Check if it's not excluded by category.
|
372 |
if ( '' !== $atts['exclude_by_categories'] && $the_product ) {
|
373 |
if ( wcj_product_has_terms( $the_product, $atts['exclude_by_categories'], 'product_cat' ) ) {
|
545 |
|
546 |
case 'item_debug':
|
547 |
case 'debug':
|
548 |
+
return $item;
|
549 |
|
550 |
case 'item_regular_price':
|
551 |
case 'product_regular_price':
|
565 |
|
566 |
case 'product_categories':
|
567 |
return ( is_object( $the_product ) ) ?
|
568 |
+
wp_strip_all_tags( ( WCJ_IS_WC_VERSION_BELOW_3 ? $the_product->get_categories() : wc_get_product_category_list( $item['product_id'] ) ) ) :
|
569 |
'';
|
570 |
|
571 |
case 'item_tax_class':
|
includes/shortcodes/class-wcj-orders-shortcodes.php
CHANGED
@@ -495,7 +495,7 @@ if ( ! class_exists( 'WCJ_Orders_Shortcodes' ) ) :
|
|
495 |
/**
|
496 |
* Wcj_order_item_total_refunded.
|
497 |
*
|
498 |
-
* @version
|
499 |
* @since 2.5.3
|
500 |
* @param array $atts The user defined shortcode attributes.
|
501 |
*/
|
@@ -504,8 +504,8 @@ if ( ! class_exists( 'WCJ_Orders_Shortcodes' ) ) :
|
|
504 |
foreach ( $refund_item as $_refund ) {
|
505 |
|
506 |
foreach ( $_refund->get_items() as $_item ) {
|
507 |
-
$refund_total
|
508 |
-
$refund_total_tax
|
509 |
}
|
510 |
}
|
511 |
$refund_result = ( $atts['excl_tax'] ) ? abs( $refund_total ) : abs( $refund_total ) + abs( $refund_total_tax );
|
495 |
/**
|
496 |
* Wcj_order_item_total_refunded.
|
497 |
*
|
498 |
+
* @version 6.0.0
|
499 |
* @since 2.5.3
|
500 |
* @param array $atts The user defined shortcode attributes.
|
501 |
*/
|
504 |
foreach ( $refund_item as $_refund ) {
|
505 |
|
506 |
foreach ( $_refund->get_items() as $_item ) {
|
507 |
+
$refund_total += $_item->get_total();
|
508 |
+
$refund_total_tax += $_item->get_total_tax();
|
509 |
}
|
510 |
}
|
511 |
$refund_result = ( $atts['excl_tax'] ) ? abs( $refund_total ) : abs( $refund_total ) + abs( $refund_total_tax );
|
includes/templates/wcj-radio-for-variations.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Variable product add to cart - radio inputs
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 2.4.8
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package WooCommerce/Templates
|
@@ -21,8 +21,8 @@ $attribute_keys = array_keys( $attributes );
|
|
21 |
<tr>
|
22 |
<th colspan="2">
|
23 |
<?php $attribute_labels = array_map( 'wc_attribute_label', array_keys( $attributes ) ); ?>
|
24 |
-
<?php echo implode( ' X ',
|
25 |
-
<?php echo
|
26 |
</th>
|
27 |
</tr>
|
28 |
<?php foreach ( $available_variations as $variation ) : ?>
|
@@ -34,7 +34,7 @@ $attribute_keys = array_keys( $attributes );
|
|
34 |
</table>
|
35 |
<?php
|
36 |
foreach ( $product->get_attributes() as $attribute_name => $options ) {
|
37 |
-
echo '<input type="hidden" name="attribute_' .
|
38 |
}
|
39 |
?>
|
40 |
<?php endif; ?>
|
2 |
/**
|
3 |
* Variable product add to cart - radio inputs
|
4 |
*
|
5 |
+
* @version 6.0.0
|
6 |
* @since 2.4.8
|
7 |
* @author Pluggabl LLC.
|
8 |
* @package WooCommerce/Templates
|
21 |
<tr>
|
22 |
<th colspan="2">
|
23 |
<?php $attribute_labels = array_map( 'wc_attribute_label', array_keys( $attributes ) ); ?>
|
24 |
+
<?php echo esc_html( implode( ' X ', $attribute_labels ) ); ?>
|
25 |
+
<?php echo '<a style="float:right" class="reset_variations" href="#">' . esc_html__( 'Clear', 'woocommerce' ) . '</a>'; ?>
|
26 |
</th>
|
27 |
</tr>
|
28 |
<?php foreach ( $available_variations as $variation ) : ?>
|
34 |
</table>
|
35 |
<?php
|
36 |
foreach ( $product->get_attributes() as $attribute_name => $options ) {
|
37 |
+
echo wp_kses_post( '<input type="hidden" name="attribute_' . $attribute_name . '" value="" />' );
|
38 |
}
|
39 |
?>
|
40 |
<?php endif; ?>
|
langs/woocommerce-jetpack.pot
CHANGED
@@ -41,9 +41,9 @@ msgstr ""
|
|
41 |
#: includes/class-wcj-max-products-per-user.php:219
|
42 |
#: includes/class-wcj-orders.php:133 includes/class-wcj-orders.php:170
|
43 |
#: includes/class-wcj-payment-gateways.php:103
|
44 |
-
#: includes/class-wcj-track-users.php:175 includes/class-wcj-track-users.php:
|
45 |
-
#: includes/classes/class-wcj-module.php:
|
46 |
-
#: includes/classes/class-wcj-module.php:
|
47 |
#: includes/settings/wcj-settings-price-by-country.php:275
|
48 |
msgid "Booster"
|
49 |
msgstr ""
|
@@ -206,7 +206,7 @@ msgstr ""
|
|
206 |
#: includes/admin/class-wc-settings-jetpack.php:642
|
207 |
#: includes/admin/class-wc-settings-jetpack.php:1089
|
208 |
#: includes/class-wcj-admin-bar.php:188
|
209 |
-
#: includes/classes/class-wcj-module.php:
|
210 |
msgid "Documentation"
|
211 |
msgstr ""
|
212 |
|
@@ -269,7 +269,7 @@ msgstr ""
|
|
269 |
#: includes/admin/class-wc-settings-jetpack.php:766
|
270 |
#: includes/admin/class-wc-settings-jetpack.php:782
|
271 |
#: includes/class-wcj-product-custom-info.php:29
|
272 |
-
#: includes/functions/wcj-functions-general.php:
|
273 |
msgid "Product Info"
|
274 |
msgstr ""
|
275 |
|
@@ -585,7 +585,7 @@ msgstr ""
|
|
585 |
msgid "Doesn't apply rounding, offset etc."
|
586 |
msgstr ""
|
587 |
|
588 |
-
#: includes/admin/class-wcj-settings-custom-fields.php:
|
589 |
msgid "Save changes"
|
590 |
msgstr ""
|
591 |
|
@@ -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:
|
997 |
#: includes/settings/wcj-settings-wpml.php:97
|
998 |
msgid "Tools"
|
999 |
msgstr ""
|
@@ -1058,7 +1058,7 @@ msgstr ""
|
|
1058 |
#: includes/class-wcj-admin-bar.php:418 includes/class-wcj-admin-bar.php:422
|
1059 |
#: includes/class-wcj-admin-bar.php:440 includes/class-wcj-my-account.php:40
|
1060 |
#: includes/class-wcj-my-account.php:48 includes/class-wcj-orders.php:31
|
1061 |
-
#: includes/reports/class-wcj-reports-sales-gateways.php:
|
1062 |
#: includes/settings/wcj-settings-reports.php:24
|
1063 |
#: includes/settings/wcj-settings-reports.php:62
|
1064 |
#: includes/settings/wcj-settings-reports.php:103
|
@@ -1932,34 +1932,34 @@ msgid ""
|
|
1932 |
"currency rate with real conversion then enable it"
|
1933 |
msgstr ""
|
1934 |
|
1935 |
-
#: includes/class-wcj-currency-exchange-rates.php:
|
1936 |
#: includes/settings/wcj-settings-currency-exchange-rates.php:52
|
1937 |
msgid "Exchange Rates Server"
|
1938 |
msgstr ""
|
1939 |
|
1940 |
-
#: includes/class-wcj-currency-exchange-rates.php:
|
1941 |
#, php-format
|
1942 |
msgid "Use default: %s"
|
1943 |
msgstr ""
|
1944 |
|
1945 |
-
#: includes/class-wcj-currency-exchange-rates.php:
|
1946 |
msgid "Exchange Rates Offset (Percent)"
|
1947 |
msgstr ""
|
1948 |
|
1949 |
-
#: includes/class-wcj-currency-exchange-rates.php:
|
1950 |
#, php-format
|
1951 |
msgid "Use default: %s%%"
|
1952 |
msgstr ""
|
1953 |
|
1954 |
-
#: includes/class-wcj-currency-exchange-rates.php:
|
1955 |
msgid "Custom offset"
|
1956 |
msgstr ""
|
1957 |
|
1958 |
-
#: includes/class-wcj-currency-exchange-rates.php:
|
1959 |
msgid "Custom offset (Percent)"
|
1960 |
msgstr ""
|
1961 |
|
1962 |
-
#: includes/class-wcj-currency-exchange-rates.php:
|
1963 |
msgid "Used when \"Custom offset\" option is selected above."
|
1964 |
msgstr ""
|
1965 |
|
@@ -2168,31 +2168,31 @@ msgid ""
|
|
2168 |
"\">here</a>."
|
2169 |
msgstr ""
|
2170 |
|
2171 |
-
#: includes/class-wcj-emails-verification.php:
|
2172 |
-
#: includes/class-wcj-emails-verification.php:
|
2173 |
#: includes/settings/wcj-settings-emails-verification.php:139
|
2174 |
msgid ""
|
2175 |
"Please click the following link to verify your email:<br><br><a href="
|
2176 |
"\"%verification_url%\">%verification_url%</a>"
|
2177 |
msgstr ""
|
2178 |
|
2179 |
-
#: includes/class-wcj-emails-verification.php:
|
2180 |
-
#: includes/class-wcj-emails-verification.php:
|
2181 |
#: includes/settings/wcj-settings-emails-verification.php:128
|
2182 |
msgid "Please activate your account"
|
2183 |
msgstr ""
|
2184 |
|
2185 |
-
#: includes/class-wcj-emails-verification.php:
|
2186 |
#: includes/settings/wcj-settings-emails-verification.php:161
|
2187 |
msgid "Activate your account"
|
2188 |
msgstr ""
|
2189 |
|
2190 |
-
#: includes/class-wcj-emails-verification.php:
|
2191 |
#: includes/settings/wcj-settings-emails-verification.php:73
|
2192 |
msgid "<strong>Success:</strong> Your account has been activated!"
|
2193 |
msgstr ""
|
2194 |
|
2195 |
-
#: includes/class-wcj-emails-verification.php:
|
2196 |
#: includes/settings/wcj-settings-emails-verification.php:91
|
2197 |
msgid ""
|
2198 |
"<strong>Error:</strong> Activation failed, please contact our administrator. "
|
@@ -2200,20 +2200,20 @@ msgid ""
|
|
2200 |
"\"%resend_verification_url%\">here</a>."
|
2201 |
msgstr ""
|
2202 |
|
2203 |
-
#: includes/class-wcj-emails-verification.php:
|
2204 |
#: includes/settings/wcj-settings-emails-verification.php:98
|
2205 |
msgid ""
|
2206 |
"<strong>Error:</strong> Activation failed, please contact our administrator."
|
2207 |
msgstr ""
|
2208 |
|
2209 |
-
#: includes/class-wcj-emails-verification.php:
|
2210 |
#: includes/settings/wcj-settings-emails-verification.php:105
|
2211 |
msgid ""
|
2212 |
"Thank you for your registration. Your account has to be activated before you "
|
2213 |
"can login. Please check your email."
|
2214 |
msgstr ""
|
2215 |
|
2216 |
-
#: includes/class-wcj-emails-verification.php:
|
2217 |
#: includes/settings/wcj-settings-emails-verification.php:112
|
2218 |
msgid ""
|
2219 |
"<strong>Success:</strong> Your activation email has been resent. Please check "
|
@@ -2253,7 +2253,7 @@ msgid "Booster: Send Email: %s"
|
|
2253 |
msgstr ""
|
2254 |
|
2255 |
#: includes/class-wcj-empty-cart-button.php:30
|
2256 |
-
#: includes/shortcodes/class-wcj-general-shortcodes.php:
|
2257 |
msgid "Empty Cart Button"
|
2258 |
msgstr ""
|
2259 |
|
@@ -2398,32 +2398,32 @@ msgstr ""
|
|
2398 |
msgid "Export Products."
|
2399 |
msgstr ""
|
2400 |
|
2401 |
-
#: includes/class-wcj-export-import.php:
|
2402 |
-
#: includes/class-wcj-export-import.php:
|
2403 |
msgid "Filter by Billing Country"
|
2404 |
msgstr ""
|
2405 |
|
2406 |
-
#: includes/class-wcj-export-import.php:
|
2407 |
msgid "Filter by Product Title"
|
2408 |
msgstr ""
|
2409 |
|
2410 |
-
#: includes/class-wcj-export-import.php:
|
2411 |
-
#: includes/reports/class-wcj-reports-product-sales-daily.php:
|
2412 |
#: includes/reports/class-wcj-reports-sales-gateways.php:162
|
2413 |
#: includes/settings/wcj-settings-orders.php:48
|
2414 |
msgid "Filter"
|
2415 |
msgstr ""
|
2416 |
|
2417 |
-
#: includes/class-wcj-export-import.php:
|
2418 |
#: includes/class-wcj-track-users.php:45
|
2419 |
msgid "All time"
|
2420 |
msgstr ""
|
2421 |
|
2422 |
-
#: includes/class-wcj-export-import.php:
|
2423 |
msgid "Custom:"
|
2424 |
msgstr ""
|
2425 |
|
2426 |
-
#: includes/class-wcj-export-import.php:
|
2427 |
msgid "Go"
|
2428 |
msgstr ""
|
2429 |
|
@@ -2759,6 +2759,7 @@ msgid "Booster: Offer Price History"
|
|
2759 |
msgstr ""
|
2760 |
|
2761 |
#: includes/class-wcj-offer-price.php:164
|
|
|
2762 |
#: includes/settings/wcj-settings-cross-sells.php:47
|
2763 |
#: includes/settings/wcj-settings-order-numbers.php:173
|
2764 |
#: includes/settings/wcj-settings-products-xml.php:244
|
@@ -3476,7 +3477,7 @@ msgstr ""
|
|
3476 |
#: includes/class-wcj-product-by-country.php:203
|
3477 |
#: includes/class-wcj-product-by-user-role.php:62
|
3478 |
#: includes/class-wcj-product-info.php:255
|
3479 |
-
#: includes/class-wcj-product-price-by-formula.php:
|
3480 |
#: includes/class-wcj-shipping-by-products.php:214
|
3481 |
#: includes/class-wcj-shipping-options.php:191
|
3482 |
#: includes/classes/class-wcj-module.php:221
|
@@ -3526,7 +3527,6 @@ msgstr ""
|
|
3526 |
#: includes/settings/wcj-settings-currency-exchange-rates.php:61
|
3527 |
#: includes/settings/wcj-settings-currency-exchange-rates.php:92
|
3528 |
#: includes/settings/wcj-settings-currency-exchange-rates.php:100
|
3529 |
-
#: includes/settings/wcj-settings-currency-exchange-rates.php:108
|
3530 |
#: includes/settings/wcj-settings-currency-per-product.php:63
|
3531 |
#: includes/settings/wcj-settings-currency-per-product.php:80
|
3532 |
#: includes/settings/wcj-settings-currency-per-product.php:87
|
@@ -3870,11 +3870,7 @@ msgstr ""
|
|
3870 |
msgid "Some of the required addons are not selected!"
|
3871 |
msgstr ""
|
3872 |
|
3873 |
-
#: includes/class-wcj-product-addons.php:
|
3874 |
-
msgid "Invalid security nonce"
|
3875 |
-
msgstr ""
|
3876 |
-
|
3877 |
-
#: includes/class-wcj-product-addons.php:319
|
3878 |
msgid ""
|
3879 |
"Booster: Free plugin's version is limited to only three products with per "
|
3880 |
"product addons enabled at a time. You will need to get <a href=\"https://"
|
@@ -4017,10 +4013,10 @@ msgstr ""
|
|
4017 |
#: includes/class-wcj-product-bulk-meta-editor.php:320
|
4018 |
#: includes/class-wcj-product-by-user.php:301
|
4019 |
#: includes/class-wcj-purchase-data.php:122
|
4020 |
-
#: includes/classes/class-wcj-module.php:
|
4021 |
-
#: includes/functions/wcj-functions-general.php:
|
4022 |
#: includes/functions/wcj-functions-html.php:138
|
4023 |
-
#: includes/reports/class-wcj-reports-monthly-sales.php:
|
4024 |
#: includes/settings/wcj-settings-empty-cart.php:88
|
4025 |
#: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:391
|
4026 |
#: includes/tools/class-wcj-order-statuses-tool.php:213
|
@@ -4752,26 +4748,26 @@ msgstr ""
|
|
4752 |
msgid "Set formula for automatic product price calculation."
|
4753 |
msgstr ""
|
4754 |
|
4755 |
-
#: includes/class-wcj-product-price-by-formula.php:
|
4756 |
msgid "Booking cost"
|
4757 |
msgstr ""
|
4758 |
|
4759 |
-
#: includes/class-wcj-product-price-by-formula.php:
|
4760 |
#, php-format
|
4761 |
msgid "From: %s"
|
4762 |
msgstr ""
|
4763 |
|
4764 |
-
#: includes/class-wcj-product-price-by-formula.php:
|
4765 |
msgid "Reset products"
|
4766 |
msgstr ""
|
4767 |
|
4768 |
-
#: includes/class-wcj-product-price-by-formula.php:
|
4769 |
msgid ""
|
4770 |
"If enabled will also reset formula related settings on products when "
|
4771 |
"<code>Reset Settings</code> button is pressed."
|
4772 |
msgstr ""
|
4773 |
|
4774 |
-
#: includes/class-wcj-product-price-by-formula.php:
|
4775 |
msgid ""
|
4776 |
"It's necessary to <code>Save changes</code> first with the option enabled so "
|
4777 |
"the <code>Reset settings</code> can be pressed."
|
@@ -4929,7 +4925,7 @@ msgstr ""
|
|
4929 |
#: includes/settings/meta-box/wcj-settings-meta-box-product-by-date.php:25
|
4930 |
#: includes/settings/meta-box/wcj-settings-meta-box-product-by-time.php:22
|
4931 |
#: includes/settings/wcj-settings-checkout-core-fields.php:89
|
4932 |
-
#: includes/settings/wcj-settings-currency-exchange-rates.php:
|
4933 |
#: includes/settings/wcj-settings-order-numbers.php:49
|
4934 |
#: includes/settings/wcj-settings-orders.php:184
|
4935 |
#: includes/settings/wcj-settings-product-add-to-cart.php:68
|
@@ -5746,12 +5742,12 @@ msgstr ""
|
|
5746 |
msgid "Type:"
|
5747 |
msgstr ""
|
5748 |
|
5749 |
-
#: includes/class-wcj-track-users.php:
|
5750 |
#, php-format
|
5751 |
msgid "Top %d countries by visits"
|
5752 |
msgstr ""
|
5753 |
|
5754 |
-
#: includes/class-wcj-track-users.php:
|
5755 |
#: includes/input-fields/wcj-product-input-fields-options.php:46
|
5756 |
#: includes/settings/wcj-settings-checkout-custom-fields.php:154
|
5757 |
#: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:113
|
@@ -5759,16 +5755,16 @@ msgstr ""
|
|
5759 |
msgid "Country"
|
5760 |
msgstr ""
|
5761 |
|
5762 |
-
#: includes/class-wcj-track-users.php:
|
5763 |
msgid "Visits"
|
5764 |
msgstr ""
|
5765 |
|
5766 |
-
#: includes/class-wcj-track-users.php:
|
5767 |
#, php-format
|
5768 |
msgid "Stats generated at %1$s. Next update is scheduled at %2$s."
|
5769 |
msgstr ""
|
5770 |
|
5771 |
-
#: includes/class-wcj-track-users.php:
|
5772 |
msgid "Update now"
|
5773 |
msgstr ""
|
5774 |
|
@@ -5857,7 +5853,7 @@ msgstr ""
|
|
5857 |
msgid "Get products in all languages"
|
5858 |
msgstr ""
|
5859 |
|
5860 |
-
#: includes/classes/class-wcj-module.php:
|
5861 |
#, php-format
|
5862 |
msgid ""
|
5863 |
"Booster: Free plugin's version is limited to only one \"%1$s\" product with "
|
@@ -5866,30 +5862,30 @@ msgid ""
|
|
5866 |
"\" products."
|
5867 |
msgstr ""
|
5868 |
|
5869 |
-
#: includes/classes/class-wcj-module.php:
|
5870 |
#, php-format
|
5871 |
msgid "Selected: %s."
|
5872 |
msgstr ""
|
5873 |
|
5874 |
-
#: includes/classes/class-wcj-module.php:
|
5875 |
msgid "Back to Module Settings"
|
5876 |
msgstr ""
|
5877 |
|
5878 |
-
#: includes/classes/class-wcj-module.php:
|
5879 |
#: includes/settings/wcj-settings-wpml.php:102
|
5880 |
msgid "Module Tools"
|
5881 |
msgstr ""
|
5882 |
|
5883 |
-
#: includes/classes/class-wcj-module.php:
|
5884 |
#: includes/settings/wcj-settings-checkout-core-fields.php:82
|
5885 |
msgid "enabled"
|
5886 |
msgstr ""
|
5887 |
|
5888 |
-
#: includes/classes/class-wcj-module.php:
|
5889 |
msgid "disabled"
|
5890 |
msgstr ""
|
5891 |
|
5892 |
-
#: includes/classes/class-wcj-module.php:
|
5893 |
#: includes/settings/wcj-settings-product-tabs.php:181
|
5894 |
#: includes/settings/wcj-settings-product-tabs.php:196
|
5895 |
#: includes/settings/wcj-settings-product-tabs.php:211
|
@@ -5897,42 +5893,37 @@ msgstr ""
|
|
5897 |
msgid "Deprecated"
|
5898 |
msgstr ""
|
5899 |
|
5900 |
-
#: includes/classes/class-wcj-module.php:
|
5901 |
msgid "Reset Settings"
|
5902 |
msgstr ""
|
5903 |
|
5904 |
-
#: includes/classes/class-wcj-module.php:
|
5905 |
msgid "Reset Module to Default Settings"
|
5906 |
msgstr ""
|
5907 |
|
5908 |
-
#: includes/classes/class-wcj-module.php:
|
5909 |
msgid "Reset Submodule to Default Settings"
|
5910 |
msgstr ""
|
5911 |
|
5912 |
-
#: includes/classes/class-wcj-module.php:
|
5913 |
msgid "Reset settings"
|
5914 |
msgstr ""
|
5915 |
|
5916 |
-
#: includes/classes/class-wcj-module.php:
|
5917 |
msgid "Module Options"
|
5918 |
msgstr ""
|
5919 |
|
5920 |
-
#: includes/classes/class-wcj-module.php:
|
5921 |
msgid "Enable Module"
|
5922 |
msgstr ""
|
5923 |
|
5924 |
-
#: includes/classes/class-wcj-pdf-invoice.php:
|
5925 |
#: includes/settings/wcj-settings-pdf-invoicing-header.php:71
|
5926 |
msgid "Company Name"
|
5927 |
msgstr ""
|
5928 |
|
5929 |
-
#: includes/classes/class-wcj-pdf-invoice.php:302
|
5930 |
-
#: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:280
|
5931 |
-
msgid "Unexpected error"
|
5932 |
-
msgstr ""
|
5933 |
-
|
5934 |
#: includes/classes/class-wcj-shortcodes.php:156
|
5935 |
-
#: includes/shortcodes/class-wcj-general-shortcodes.php:
|
5936 |
#, php-format
|
5937 |
msgid "\"%s\" module is not enabled!"
|
5938 |
msgstr ""
|
@@ -7759,92 +7750,92 @@ msgstr ""
|
|
7759 |
msgid "CoinMarketCap"
|
7760 |
msgstr ""
|
7761 |
|
7762 |
-
#: includes/functions/wcj-functions-general.php:
|
7763 |
#: includes/settings/wcj-settings-cross-sells.php:78
|
7764 |
#: includes/settings/wcj-settings-empty-cart.php:50
|
7765 |
msgid "Before cart"
|
7766 |
msgstr ""
|
7767 |
|
7768 |
-
#: includes/functions/wcj-functions-general.php:
|
7769 |
msgid "Before cart table"
|
7770 |
msgstr ""
|
7771 |
|
7772 |
-
#: includes/functions/wcj-functions-general.php:
|
7773 |
msgid "Before cart contents"
|
7774 |
msgstr ""
|
7775 |
|
7776 |
-
#: includes/functions/wcj-functions-general.php:
|
7777 |
msgid "Cart contents"
|
7778 |
msgstr ""
|
7779 |
|
7780 |
-
#: includes/functions/wcj-functions-general.php:
|
7781 |
msgid "Cart coupon"
|
7782 |
msgstr ""
|
7783 |
|
7784 |
-
#: includes/functions/wcj-functions-general.php:
|
7785 |
msgid "Cart actions"
|
7786 |
msgstr ""
|
7787 |
|
7788 |
-
#: includes/functions/wcj-functions-general.php:
|
7789 |
msgid "After cart contents"
|
7790 |
msgstr ""
|
7791 |
|
7792 |
-
#: includes/functions/wcj-functions-general.php:
|
7793 |
msgid "After cart table"
|
7794 |
msgstr ""
|
7795 |
|
7796 |
-
#: includes/functions/wcj-functions-general.php:
|
7797 |
#: includes/settings/wcj-settings-cross-sells.php:79
|
7798 |
msgid "Cart collaterals"
|
7799 |
msgstr ""
|
7800 |
|
7801 |
-
#: includes/functions/wcj-functions-general.php:
|
7802 |
#: includes/settings/wcj-settings-cross-sells.php:80
|
7803 |
#: includes/settings/wcj-settings-empty-cart.php:59
|
7804 |
msgid "After cart"
|
7805 |
msgstr ""
|
7806 |
|
7807 |
-
#: includes/functions/wcj-functions-general.php:
|
7808 |
msgid "Before cart totals"
|
7809 |
msgstr ""
|
7810 |
|
7811 |
-
#: includes/functions/wcj-functions-general.php:
|
7812 |
#: includes/settings/wcj-settings-empty-cart.php:52
|
7813 |
msgid "Cart totals: Before shipping"
|
7814 |
msgstr ""
|
7815 |
|
7816 |
-
#: includes/functions/wcj-functions-general.php:
|
7817 |
#: includes/settings/wcj-settings-empty-cart.php:53
|
7818 |
msgid "Cart totals: After shipping"
|
7819 |
msgstr ""
|
7820 |
|
7821 |
-
#: includes/functions/wcj-functions-general.php:
|
7822 |
#: includes/settings/wcj-settings-empty-cart.php:54
|
7823 |
msgid "Cart totals: Before order total"
|
7824 |
msgstr ""
|
7825 |
|
7826 |
-
#: includes/functions/wcj-functions-general.php:
|
7827 |
#: includes/settings/wcj-settings-empty-cart.php:55
|
7828 |
msgid "Cart totals: After order total"
|
7829 |
msgstr ""
|
7830 |
|
7831 |
-
#: includes/functions/wcj-functions-general.php:
|
7832 |
msgid "Proceed to checkout"
|
7833 |
msgstr ""
|
7834 |
|
7835 |
-
#: includes/functions/wcj-functions-general.php:
|
7836 |
msgid "After cart totals"
|
7837 |
msgstr ""
|
7838 |
|
7839 |
-
#: includes/functions/wcj-functions-general.php:
|
7840 |
msgid "Before shipping calculator"
|
7841 |
msgstr ""
|
7842 |
|
7843 |
-
#: includes/functions/wcj-functions-general.php:
|
7844 |
msgid "After shipping calculator"
|
7845 |
msgstr ""
|
7846 |
|
7847 |
-
#: includes/functions/wcj-functions-general.php:
|
7848 |
msgid "If cart is empty"
|
7849 |
msgstr ""
|
7850 |
|
@@ -7873,10 +7864,6 @@ msgstr ""
|
|
7873 |
msgid "Custom Document"
|
7874 |
msgstr ""
|
7875 |
|
7876 |
-
#: includes/functions/wcj-functions-reports.php:24
|
7877 |
-
msgid "date"
|
7878 |
-
msgstr ""
|
7879 |
-
|
7880 |
#: includes/functions/wcj-functions-reports.php:25
|
7881 |
msgid "Daily Total Sum"
|
7882 |
msgstr ""
|
@@ -8526,12 +8513,16 @@ msgstr ""
|
|
8526 |
msgid "Renumerate invoices"
|
8527 |
msgstr ""
|
8528 |
|
8529 |
-
#: includes/pdf-invoices/class-wcj-pdf-invoicing-renumerate-tool.php:
|
|
|
|
|
|
|
|
|
8530 |
#, php-format
|
8531 |
msgid "Total documents created: %d"
|
8532 |
msgstr ""
|
8533 |
|
8534 |
-
#: includes/pdf-invoices/class-wcj-pdf-invoicing-renumerate-tool.php:
|
8535 |
#, php-format
|
8536 |
msgid "Total documents deleted: %d"
|
8537 |
msgstr ""
|
@@ -8545,7 +8536,7 @@ msgid ""
|
|
8545 |
msgstr ""
|
8546 |
|
8547 |
#: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:105
|
8548 |
-
#: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:
|
8549 |
msgid "Please fill year and month values."
|
8550 |
msgstr ""
|
8551 |
|
@@ -8565,14 +8556,14 @@ msgstr ""
|
|
8565 |
msgid "Download monthly documents CSV"
|
8566 |
msgstr ""
|
8567 |
|
8568 |
-
#: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:
|
8569 |
#, php-format
|
8570 |
msgid ""
|
8571 |
"Booster: %s class is not accessible on your server. Please contact your "
|
8572 |
"hosting provider."
|
8573 |
msgstr ""
|
8574 |
|
8575 |
-
#: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:
|
8576 |
#, php-format
|
8577 |
msgid "No documents (%1$s) found for %2$d-%3$02d."
|
8578 |
msgstr ""
|
@@ -8772,19 +8763,19 @@ msgstr ""
|
|
8772 |
msgid "Total customers"
|
8773 |
msgstr ""
|
8774 |
|
8775 |
-
#: includes/reports/class-wcj-reports-customers.php:
|
8776 |
msgid "Country Code"
|
8777 |
msgstr ""
|
8778 |
|
8779 |
-
#: includes/reports/class-wcj-reports-customers.php:
|
8780 |
msgid "Customers Count"
|
8781 |
msgstr ""
|
8782 |
|
8783 |
-
#: includes/reports/class-wcj-reports-customers.php:
|
8784 |
msgid "Percent of total"
|
8785 |
msgstr ""
|
8786 |
|
8787 |
-
#: includes/reports/class-wcj-reports-customers.php:
|
8788 |
msgid "Report for:"
|
8789 |
msgstr ""
|
8790 |
|
@@ -8849,73 +8840,59 @@ msgstr ""
|
|
8849 |
msgid "Totals"
|
8850 |
msgstr ""
|
8851 |
|
8852 |
-
#: includes/reports/class-wcj-reports-monthly-sales.php:
|
8853 |
msgid "Report currency"
|
8854 |
msgstr ""
|
8855 |
|
8856 |
-
#: includes/reports/class-wcj-reports-monthly-sales.php:
|
8857 |
#, php-format
|
8858 |
msgid "Report generated in: %s s"
|
8859 |
msgstr ""
|
8860 |
|
8861 |
-
#: includes/reports/class-wcj-reports-monthly-sales.php:
|
8862 |
msgid "Save Currency Rates"
|
8863 |
msgstr ""
|
8864 |
|
8865 |
-
#: includes/reports/class-wcj-reports-monthly-sales.php:
|
8866 |
msgid "Reset Currency Rates"
|
8867 |
msgstr ""
|
8868 |
|
8869 |
-
#: includes/reports/class-wcj-reports-product-sales-daily.php:
|
8870 |
-
#: includes/reports/class-wcj-reports-sales-gateways.php:
|
8871 |
#: includes/reports/class-wcj-reports-sales.php:365
|
8872 |
msgid "Reports Settings"
|
8873 |
msgstr ""
|
8874 |
|
8875 |
-
#: includes/reports/class-wcj-reports-product-sales-daily.php:
|
8876 |
-
#: includes/reports/class-wcj-reports-sales-gateways.php:155
|
8877 |
-
msgid "From:"
|
8878 |
-
msgstr ""
|
8879 |
-
|
8880 |
-
#: includes/reports/class-wcj-reports-product-sales-daily.php:212
|
8881 |
-
#: includes/reports/class-wcj-reports-sales-gateways.php:158
|
8882 |
-
msgid "To:"
|
8883 |
-
msgstr ""
|
8884 |
-
|
8885 |
-
#: includes/reports/class-wcj-reports-product-sales-daily.php:215
|
8886 |
-
msgid "Product:"
|
8887 |
-
msgstr ""
|
8888 |
-
|
8889 |
-
#: includes/reports/class-wcj-reports-product-sales-daily.php:306
|
8890 |
#, php-format
|
8891 |
msgid "Total: %d"
|
8892 |
msgstr ""
|
8893 |
|
8894 |
-
#: includes/reports/class-wcj-reports-product-sales-daily.php:
|
8895 |
-
#: includes/reports/class-wcj-reports-product-sales-daily.php:
|
8896 |
#, php-format
|
8897 |
msgid "Total: %s"
|
8898 |
msgstr ""
|
8899 |
|
8900 |
-
#: includes/reports/class-wcj-reports-product-sales-daily.php:
|
8901 |
-
#: includes/reports/class-wcj-reports-sales-gateways.php:
|
8902 |
#, php-format
|
8903 |
msgid "Total orders: %d"
|
8904 |
msgstr ""
|
8905 |
|
8906 |
-
#: includes/reports/class-wcj-reports-product-sales-daily.php:
|
8907 |
-
#: includes/reports/class-wcj-reports-sales-gateways.php:
|
8908 |
-
#: includes/reports/class-wcj-reports-sales.php:
|
8909 |
msgid "No sales data for current period."
|
8910 |
msgstr ""
|
8911 |
|
8912 |
-
#: includes/reports/class-wcj-reports-sales-gateways.php:
|
8913 |
#: includes/reports/class-wcj-reports-stock.php:121
|
8914 |
#: includes/reports/class-wcj-reports-stock.php:197
|
8915 |
msgid "N/A"
|
8916 |
msgstr ""
|
8917 |
|
8918 |
-
#: includes/reports/class-wcj-reports-sales-gateways.php:
|
8919 |
msgid "Gateway"
|
8920 |
msgstr ""
|
8921 |
|
@@ -8939,7 +8916,7 @@ msgstr ""
|
|
8939 |
msgid "Total Profit"
|
8940 |
msgstr ""
|
8941 |
|
8942 |
-
#: includes/reports/class-wcj-reports-sales.php:
|
8943 |
msgid "Filter products"
|
8944 |
msgstr ""
|
8945 |
|
@@ -9019,27 +8996,31 @@ msgstr ""
|
|
9019 |
msgid "profit:"
|
9020 |
msgstr ""
|
9021 |
|
9022 |
-
#: includes/reports/class-wcj-reports-stock.php:
|
|
|
|
|
|
|
|
|
9023 |
msgid "Total current stock value"
|
9024 |
msgstr ""
|
9025 |
|
9026 |
-
#: includes/reports/class-wcj-reports-stock.php:
|
9027 |
msgid "Total stock value"
|
9028 |
msgstr ""
|
9029 |
|
9030 |
-
#: includes/reports/class-wcj-reports-stock.php:
|
9031 |
msgid "Product stock value average"
|
9032 |
msgstr ""
|
9033 |
|
9034 |
-
#: includes/reports/class-wcj-reports-stock.php:
|
9035 |
msgid "Product stock average"
|
9036 |
msgstr ""
|
9037 |
|
9038 |
-
#: includes/reports/class-wcj-reports-stock.php:
|
9039 |
msgid "Total current stock purchase price"
|
9040 |
msgstr ""
|
9041 |
|
9042 |
-
#: includes/reports/class-wcj-reports-stock.php:
|
9043 |
msgid "Report was generated in: "
|
9044 |
msgstr ""
|
9045 |
|
@@ -11927,67 +11908,57 @@ msgid ""
|
|
11927 |
msgstr ""
|
11928 |
|
11929 |
#: includes/settings/wcj-settings-currency-exchange-rates.php:99
|
11930 |
-
msgid "Always Use cURL"
|
11931 |
-
msgstr ""
|
11932 |
-
|
11933 |
-
#: includes/settings/wcj-settings-currency-exchange-rates.php:101
|
11934 |
-
msgid ""
|
11935 |
-
"If for some reason currency exchange rates are not updating, try enabling "
|
11936 |
-
"this option."
|
11937 |
-
msgstr ""
|
11938 |
-
|
11939 |
-
#: includes/settings/wcj-settings-currency-exchange-rates.php:107
|
11940 |
msgid "Force Point as Decimal Separator"
|
11941 |
msgstr ""
|
11942 |
|
11943 |
-
#: includes/settings/wcj-settings-currency-exchange-rates.php:
|
11944 |
msgid "Force \".\" as decimal separator for exchange rates."
|
11945 |
msgstr ""
|
11946 |
|
11947 |
-
#: includes/settings/wcj-settings-currency-exchange-rates.php:
|
11948 |
msgid "API Keys"
|
11949 |
msgstr ""
|
11950 |
|
11951 |
-
#: includes/settings/wcj-settings-currency-exchange-rates.php:
|
11952 |
msgid "API keys provided by the Exchange Rates Servers"
|
11953 |
msgstr ""
|
11954 |
|
11955 |
-
#: includes/settings/wcj-settings-currency-exchange-rates.php:
|
11956 |
msgid "Free Currency Converter"
|
11957 |
msgstr ""
|
11958 |
|
11959 |
-
#: includes/settings/wcj-settings-currency-exchange-rates.php:
|
11960 |
#, php-format
|
11961 |
msgid "More information at %s"
|
11962 |
msgstr ""
|
11963 |
|
11964 |
-
#: includes/settings/wcj-settings-currency-exchange-rates.php:
|
11965 |
msgid "Custom Currencies Options"
|
11966 |
msgstr ""
|
11967 |
|
11968 |
-
#: includes/settings/wcj-settings-currency-exchange-rates.php:
|
11969 |
#, php-format
|
11970 |
msgid ""
|
11971 |
"You can add more currencies in this section. E.g. this can be used to display "
|
11972 |
"exchange rates with %s shortcodes."
|
11973 |
msgstr ""
|
11974 |
|
11975 |
-
#: includes/settings/wcj-settings-currency-exchange-rates.php:
|
11976 |
#: includes/settings/wcj-settings-currency.php:72
|
11977 |
msgid "Total Custom Currencies"
|
11978 |
msgstr ""
|
11979 |
|
11980 |
-
#: includes/settings/wcj-settings-currency-exchange-rates.php:
|
11981 |
#: includes/settings/wcj-settings-currency.php:87
|
11982 |
msgid "Custom Currency"
|
11983 |
msgstr ""
|
11984 |
|
11985 |
-
#: includes/settings/wcj-settings-currency-exchange-rates.php:
|
11986 |
#: includes/settings/wcj-settings-price-by-country.php:420
|
11987 |
msgid "Exchange Rates"
|
11988 |
msgstr ""
|
11989 |
|
11990 |
-
#: includes/settings/wcj-settings-currency-exchange-rates.php:
|
11991 |
msgid ""
|
11992 |
"All currencies from all <strong>enabled</strong> modules (with \"Exchange "
|
11993 |
"Rates Updates\" set to \"Automatically via Currency Exchange Rates module\") "
|
@@ -17179,7 +17150,7 @@ msgstr ""
|
|
17179 |
|
17180 |
#: includes/settings/wcj-settings-product-by-condition.php:91
|
17181 |
#: includes/settings/wcj-settings-related-products.php:182
|
17182 |
-
#: includes/shortcodes/class-wcj-order-items-shortcodes.php:
|
17183 |
msgid "Standard"
|
17184 |
msgstr ""
|
17185 |
|
41 |
#: includes/class-wcj-max-products-per-user.php:219
|
42 |
#: includes/class-wcj-orders.php:133 includes/class-wcj-orders.php:170
|
43 |
#: includes/class-wcj-payment-gateways.php:103
|
44 |
+
#: includes/class-wcj-track-users.php:175 includes/class-wcj-track-users.php:268
|
45 |
+
#: includes/classes/class-wcj-module.php:685
|
46 |
+
#: includes/classes/class-wcj-module.php:894
|
47 |
#: includes/settings/wcj-settings-price-by-country.php:275
|
48 |
msgid "Booster"
|
49 |
msgstr ""
|
206 |
#: includes/admin/class-wc-settings-jetpack.php:642
|
207 |
#: includes/admin/class-wc-settings-jetpack.php:1089
|
208 |
#: includes/class-wcj-admin-bar.php:188
|
209 |
+
#: includes/classes/class-wcj-module.php:1047
|
210 |
msgid "Documentation"
|
211 |
msgstr ""
|
212 |
|
269 |
#: includes/admin/class-wc-settings-jetpack.php:766
|
270 |
#: includes/admin/class-wc-settings-jetpack.php:782
|
271 |
#: includes/class-wcj-product-custom-info.php:29
|
272 |
+
#: includes/functions/wcj-functions-general.php:443
|
273 |
msgid "Product Info"
|
274 |
msgstr ""
|
275 |
|
585 |
msgid "Doesn't apply rounding, offset etc."
|
586 |
msgstr ""
|
587 |
|
588 |
+
#: includes/admin/class-wcj-settings-custom-fields.php:350
|
589 |
msgid "Save changes"
|
590 |
msgstr ""
|
591 |
|
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:865
|
997 |
#: includes/settings/wcj-settings-wpml.php:97
|
998 |
msgid "Tools"
|
999 |
msgstr ""
|
1058 |
#: includes/class-wcj-admin-bar.php:418 includes/class-wcj-admin-bar.php:422
|
1059 |
#: includes/class-wcj-admin-bar.php:440 includes/class-wcj-my-account.php:40
|
1060 |
#: includes/class-wcj-my-account.php:48 includes/class-wcj-orders.php:31
|
1061 |
+
#: includes/reports/class-wcj-reports-sales-gateways.php:180
|
1062 |
#: includes/settings/wcj-settings-reports.php:24
|
1063 |
#: includes/settings/wcj-settings-reports.php:62
|
1064 |
#: includes/settings/wcj-settings-reports.php:103
|
1932 |
"currency rate with real conversion then enable it"
|
1933 |
msgstr ""
|
1934 |
|
1935 |
+
#: includes/class-wcj-currency-exchange-rates.php:229
|
1936 |
#: includes/settings/wcj-settings-currency-exchange-rates.php:52
|
1937 |
msgid "Exchange Rates Server"
|
1938 |
msgstr ""
|
1939 |
|
1940 |
+
#: includes/class-wcj-currency-exchange-rates.php:235
|
1941 |
#, php-format
|
1942 |
msgid "Use default: %s"
|
1943 |
msgstr ""
|
1944 |
|
1945 |
+
#: includes/class-wcj-currency-exchange-rates.php:262
|
1946 |
msgid "Exchange Rates Offset (Percent)"
|
1947 |
msgstr ""
|
1948 |
|
1949 |
+
#: includes/class-wcj-currency-exchange-rates.php:268
|
1950 |
#, php-format
|
1951 |
msgid "Use default: %s%%"
|
1952 |
msgstr ""
|
1953 |
|
1954 |
+
#: includes/class-wcj-currency-exchange-rates.php:269
|
1955 |
msgid "Custom offset"
|
1956 |
msgstr ""
|
1957 |
|
1958 |
+
#: includes/class-wcj-currency-exchange-rates.php:273
|
1959 |
msgid "Custom offset (Percent)"
|
1960 |
msgstr ""
|
1961 |
|
1962 |
+
#: includes/class-wcj-currency-exchange-rates.php:274
|
1963 |
msgid "Used when \"Custom offset\" option is selected above."
|
1964 |
msgstr ""
|
1965 |
|
2168 |
"\">here</a>."
|
2169 |
msgstr ""
|
2170 |
|
2171 |
+
#: includes/class-wcj-emails-verification.php:220
|
2172 |
+
#: includes/class-wcj-emails-verification.php:223
|
2173 |
#: includes/settings/wcj-settings-emails-verification.php:139
|
2174 |
msgid ""
|
2175 |
"Please click the following link to verify your email:<br><br><a href="
|
2176 |
"\"%verification_url%\">%verification_url%</a>"
|
2177 |
msgstr ""
|
2178 |
|
2179 |
+
#: includes/class-wcj-emails-verification.php:231
|
2180 |
+
#: includes/class-wcj-emails-verification.php:234
|
2181 |
#: includes/settings/wcj-settings-emails-verification.php:128
|
2182 |
msgid "Please activate your account"
|
2183 |
msgstr ""
|
2184 |
|
2185 |
+
#: includes/class-wcj-emails-verification.php:243
|
2186 |
#: includes/settings/wcj-settings-emails-verification.php:161
|
2187 |
msgid "Activate your account"
|
2188 |
msgstr ""
|
2189 |
|
2190 |
+
#: includes/class-wcj-emails-verification.php:265
|
2191 |
#: includes/settings/wcj-settings-emails-verification.php:73
|
2192 |
msgid "<strong>Success:</strong> Your account has been activated!"
|
2193 |
msgstr ""
|
2194 |
|
2195 |
+
#: includes/class-wcj-emails-verification.php:287
|
2196 |
#: includes/settings/wcj-settings-emails-verification.php:91
|
2197 |
msgid ""
|
2198 |
"<strong>Error:</strong> Activation failed, please contact our administrator. "
|
2200 |
"\"%resend_verification_url%\">here</a>."
|
2201 |
msgstr ""
|
2202 |
|
2203 |
+
#: includes/class-wcj-emails-verification.php:295
|
2204 |
#: includes/settings/wcj-settings-emails-verification.php:98
|
2205 |
msgid ""
|
2206 |
"<strong>Error:</strong> Activation failed, please contact our administrator."
|
2207 |
msgstr ""
|
2208 |
|
2209 |
+
#: includes/class-wcj-emails-verification.php:304
|
2210 |
#: includes/settings/wcj-settings-emails-verification.php:105
|
2211 |
msgid ""
|
2212 |
"Thank you for your registration. Your account has to be activated before you "
|
2213 |
"can login. Please check your email."
|
2214 |
msgstr ""
|
2215 |
|
2216 |
+
#: includes/class-wcj-emails-verification.php:314
|
2217 |
#: includes/settings/wcj-settings-emails-verification.php:112
|
2218 |
msgid ""
|
2219 |
"<strong>Success:</strong> Your activation email has been resent. Please check "
|
2253 |
msgstr ""
|
2254 |
|
2255 |
#: includes/class-wcj-empty-cart-button.php:30
|
2256 |
+
#: includes/shortcodes/class-wcj-general-shortcodes.php:600
|
2257 |
msgid "Empty Cart Button"
|
2258 |
msgstr ""
|
2259 |
|
2398 |
msgid "Export Products."
|
2399 |
msgstr ""
|
2400 |
|
2401 |
+
#: includes/class-wcj-export-import.php:246
|
2402 |
+
#: includes/class-wcj-export-import.php:252
|
2403 |
msgid "Filter by Billing Country"
|
2404 |
msgstr ""
|
2405 |
|
2406 |
+
#: includes/class-wcj-export-import.php:247
|
2407 |
msgid "Filter by Product Title"
|
2408 |
msgstr ""
|
2409 |
|
2410 |
+
#: includes/class-wcj-export-import.php:266
|
2411 |
+
#: includes/reports/class-wcj-reports-product-sales-daily.php:219
|
2412 |
#: includes/reports/class-wcj-reports-sales-gateways.php:162
|
2413 |
#: includes/settings/wcj-settings-orders.php:48
|
2414 |
msgid "Filter"
|
2415 |
msgstr ""
|
2416 |
|
2417 |
+
#: includes/class-wcj-export-import.php:295
|
2418 |
#: includes/class-wcj-track-users.php:45
|
2419 |
msgid "All time"
|
2420 |
msgstr ""
|
2421 |
|
2422 |
+
#: includes/class-wcj-export-import.php:314
|
2423 |
msgid "Custom:"
|
2424 |
msgstr ""
|
2425 |
|
2426 |
+
#: includes/class-wcj-export-import.php:320
|
2427 |
msgid "Go"
|
2428 |
msgstr ""
|
2429 |
|
2759 |
msgstr ""
|
2760 |
|
2761 |
#: includes/class-wcj-offer-price.php:164
|
2762 |
+
#: includes/functions/wcj-functions-reports.php:24
|
2763 |
#: includes/settings/wcj-settings-cross-sells.php:47
|
2764 |
#: includes/settings/wcj-settings-order-numbers.php:173
|
2765 |
#: includes/settings/wcj-settings-products-xml.php:244
|
3477 |
#: includes/class-wcj-product-by-country.php:203
|
3478 |
#: includes/class-wcj-product-by-user-role.php:62
|
3479 |
#: includes/class-wcj-product-info.php:255
|
3480 |
+
#: includes/class-wcj-product-price-by-formula.php:170
|
3481 |
#: includes/class-wcj-shipping-by-products.php:214
|
3482 |
#: includes/class-wcj-shipping-options.php:191
|
3483 |
#: includes/classes/class-wcj-module.php:221
|
3527 |
#: includes/settings/wcj-settings-currency-exchange-rates.php:61
|
3528 |
#: includes/settings/wcj-settings-currency-exchange-rates.php:92
|
3529 |
#: includes/settings/wcj-settings-currency-exchange-rates.php:100
|
|
|
3530 |
#: includes/settings/wcj-settings-currency-per-product.php:63
|
3531 |
#: includes/settings/wcj-settings-currency-per-product.php:80
|
3532 |
#: includes/settings/wcj-settings-currency-per-product.php:87
|
3870 |
msgid "Some of the required addons are not selected!"
|
3871 |
msgstr ""
|
3872 |
|
3873 |
+
#: includes/class-wcj-product-addons.php:316
|
|
|
|
|
|
|
|
|
3874 |
msgid ""
|
3875 |
"Booster: Free plugin's version is limited to only three products with per "
|
3876 |
"product addons enabled at a time. You will need to get <a href=\"https://"
|
4013 |
#: includes/class-wcj-product-bulk-meta-editor.php:320
|
4014 |
#: includes/class-wcj-product-by-user.php:301
|
4015 |
#: includes/class-wcj-purchase-data.php:122
|
4016 |
+
#: includes/classes/class-wcj-module.php:1007
|
4017 |
+
#: includes/functions/wcj-functions-general.php:166
|
4018 |
#: includes/functions/wcj-functions-html.php:138
|
4019 |
+
#: includes/reports/class-wcj-reports-monthly-sales.php:385
|
4020 |
#: includes/settings/wcj-settings-empty-cart.php:88
|
4021 |
#: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:391
|
4022 |
#: includes/tools/class-wcj-order-statuses-tool.php:213
|
4748 |
msgid "Set formula for automatic product price calculation."
|
4749 |
msgstr ""
|
4750 |
|
4751 |
+
#: includes/class-wcj-product-price-by-formula.php:127
|
4752 |
msgid "Booking cost"
|
4753 |
msgstr ""
|
4754 |
|
4755 |
+
#: includes/class-wcj-product-price-by-formula.php:142
|
4756 |
#, php-format
|
4757 |
msgid "From: %s"
|
4758 |
msgstr ""
|
4759 |
|
4760 |
+
#: includes/class-wcj-product-price-by-formula.php:169
|
4761 |
msgid "Reset products"
|
4762 |
msgstr ""
|
4763 |
|
4764 |
+
#: includes/class-wcj-product-price-by-formula.php:175
|
4765 |
msgid ""
|
4766 |
"If enabled will also reset formula related settings on products when "
|
4767 |
"<code>Reset Settings</code> button is pressed."
|
4768 |
msgstr ""
|
4769 |
|
4770 |
+
#: includes/class-wcj-product-price-by-formula.php:175
|
4771 |
msgid ""
|
4772 |
"It's necessary to <code>Save changes</code> first with the option enabled so "
|
4773 |
"the <code>Reset settings</code> can be pressed."
|
4925 |
#: includes/settings/meta-box/wcj-settings-meta-box-product-by-date.php:25
|
4926 |
#: includes/settings/meta-box/wcj-settings-meta-box-product-by-time.php:22
|
4927 |
#: includes/settings/wcj-settings-checkout-core-fields.php:89
|
4928 |
+
#: includes/settings/wcj-settings-currency-exchange-rates.php:163
|
4929 |
#: includes/settings/wcj-settings-order-numbers.php:49
|
4930 |
#: includes/settings/wcj-settings-orders.php:184
|
4931 |
#: includes/settings/wcj-settings-product-add-to-cart.php:68
|
5742 |
msgid "Type:"
|
5743 |
msgstr ""
|
5744 |
|
5745 |
+
#: includes/class-wcj-track-users.php:270
|
5746 |
#, php-format
|
5747 |
msgid "Top %d countries by visits"
|
5748 |
msgstr ""
|
5749 |
|
5750 |
+
#: includes/class-wcj-track-users.php:343
|
5751 |
#: includes/input-fields/wcj-product-input-fields-options.php:46
|
5752 |
#: includes/settings/wcj-settings-checkout-custom-fields.php:154
|
5753 |
#: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:113
|
5755 |
msgid "Country"
|
5756 |
msgstr ""
|
5757 |
|
5758 |
+
#: includes/class-wcj-track-users.php:343
|
5759 |
msgid "Visits"
|
5760 |
msgstr ""
|
5761 |
|
5762 |
+
#: includes/class-wcj-track-users.php:382
|
5763 |
#, php-format
|
5764 |
msgid "Stats generated at %1$s. Next update is scheduled at %2$s."
|
5765 |
msgstr ""
|
5766 |
|
5767 |
+
#: includes/class-wcj-track-users.php:390
|
5768 |
msgid "Update now"
|
5769 |
msgstr ""
|
5770 |
|
5853 |
msgid "Get products in all languages"
|
5854 |
msgstr ""
|
5855 |
|
5856 |
+
#: includes/classes/class-wcj-module.php:392
|
5857 |
#, php-format
|
5858 |
msgid ""
|
5859 |
"Booster: Free plugin's version is limited to only one \"%1$s\" product with "
|
5862 |
"\" products."
|
5863 |
msgstr ""
|
5864 |
|
5865 |
+
#: includes/classes/class-wcj-module.php:779
|
5866 |
#, php-format
|
5867 |
msgid "Selected: %s."
|
5868 |
msgstr ""
|
5869 |
|
5870 |
+
#: includes/classes/class-wcj-module.php:850
|
5871 |
msgid "Back to Module Settings"
|
5872 |
msgstr ""
|
5873 |
|
5874 |
+
#: includes/classes/class-wcj-module.php:871
|
5875 |
#: includes/settings/wcj-settings-wpml.php:102
|
5876 |
msgid "Module Tools"
|
5877 |
msgstr ""
|
5878 |
|
5879 |
+
#: includes/classes/class-wcj-module.php:949
|
5880 |
#: includes/settings/wcj-settings-checkout-core-fields.php:82
|
5881 |
msgid "enabled"
|
5882 |
msgstr ""
|
5883 |
|
5884 |
+
#: includes/classes/class-wcj-module.php:950
|
5885 |
msgid "disabled"
|
5886 |
msgstr ""
|
5887 |
|
5888 |
+
#: includes/classes/class-wcj-module.php:958
|
5889 |
#: includes/settings/wcj-settings-product-tabs.php:181
|
5890 |
#: includes/settings/wcj-settings-product-tabs.php:196
|
5891 |
#: includes/settings/wcj-settings-product-tabs.php:211
|
5893 |
msgid "Deprecated"
|
5894 |
msgstr ""
|
5895 |
|
5896 |
+
#: includes/classes/class-wcj-module.php:997
|
5897 |
msgid "Reset Settings"
|
5898 |
msgstr ""
|
5899 |
|
5900 |
+
#: includes/classes/class-wcj-module.php:1003
|
5901 |
msgid "Reset Module to Default Settings"
|
5902 |
msgstr ""
|
5903 |
|
5904 |
+
#: includes/classes/class-wcj-module.php:1004
|
5905 |
msgid "Reset Submodule to Default Settings"
|
5906 |
msgstr ""
|
5907 |
|
5908 |
+
#: includes/classes/class-wcj-module.php:1013
|
5909 |
msgid "Reset settings"
|
5910 |
msgstr ""
|
5911 |
|
5912 |
+
#: includes/classes/class-wcj-module.php:1051
|
5913 |
msgid "Module Options"
|
5914 |
msgstr ""
|
5915 |
|
5916 |
+
#: includes/classes/class-wcj-module.php:1058
|
5917 |
msgid "Enable Module"
|
5918 |
msgstr ""
|
5919 |
|
5920 |
+
#: includes/classes/class-wcj-pdf-invoice.php:104
|
5921 |
#: includes/settings/wcj-settings-pdf-invoicing-header.php:71
|
5922 |
msgid "Company Name"
|
5923 |
msgstr ""
|
5924 |
|
|
|
|
|
|
|
|
|
|
|
5925 |
#: includes/classes/class-wcj-shortcodes.php:156
|
5926 |
+
#: includes/shortcodes/class-wcj-general-shortcodes.php:600
|
5927 |
#, php-format
|
5928 |
msgid "\"%s\" module is not enabled!"
|
5929 |
msgstr ""
|
7750 |
msgid "CoinMarketCap"
|
7751 |
msgstr ""
|
7752 |
|
7753 |
+
#: includes/functions/wcj-functions-general.php:663
|
7754 |
#: includes/settings/wcj-settings-cross-sells.php:78
|
7755 |
#: includes/settings/wcj-settings-empty-cart.php:50
|
7756 |
msgid "Before cart"
|
7757 |
msgstr ""
|
7758 |
|
7759 |
+
#: includes/functions/wcj-functions-general.php:664
|
7760 |
msgid "Before cart table"
|
7761 |
msgstr ""
|
7762 |
|
7763 |
+
#: includes/functions/wcj-functions-general.php:665
|
7764 |
msgid "Before cart contents"
|
7765 |
msgstr ""
|
7766 |
|
7767 |
+
#: includes/functions/wcj-functions-general.php:666
|
7768 |
msgid "Cart contents"
|
7769 |
msgstr ""
|
7770 |
|
7771 |
+
#: includes/functions/wcj-functions-general.php:667
|
7772 |
msgid "Cart coupon"
|
7773 |
msgstr ""
|
7774 |
|
7775 |
+
#: includes/functions/wcj-functions-general.php:668
|
7776 |
msgid "Cart actions"
|
7777 |
msgstr ""
|
7778 |
|
7779 |
+
#: includes/functions/wcj-functions-general.php:669
|
7780 |
msgid "After cart contents"
|
7781 |
msgstr ""
|
7782 |
|
7783 |
+
#: includes/functions/wcj-functions-general.php:670
|
7784 |
msgid "After cart table"
|
7785 |
msgstr ""
|
7786 |
|
7787 |
+
#: includes/functions/wcj-functions-general.php:671
|
7788 |
#: includes/settings/wcj-settings-cross-sells.php:79
|
7789 |
msgid "Cart collaterals"
|
7790 |
msgstr ""
|
7791 |
|
7792 |
+
#: includes/functions/wcj-functions-general.php:672
|
7793 |
#: includes/settings/wcj-settings-cross-sells.php:80
|
7794 |
#: includes/settings/wcj-settings-empty-cart.php:59
|
7795 |
msgid "After cart"
|
7796 |
msgstr ""
|
7797 |
|
7798 |
+
#: includes/functions/wcj-functions-general.php:674
|
7799 |
msgid "Before cart totals"
|
7800 |
msgstr ""
|
7801 |
|
7802 |
+
#: includes/functions/wcj-functions-general.php:675
|
7803 |
#: includes/settings/wcj-settings-empty-cart.php:52
|
7804 |
msgid "Cart totals: Before shipping"
|
7805 |
msgstr ""
|
7806 |
|
7807 |
+
#: includes/functions/wcj-functions-general.php:676
|
7808 |
#: includes/settings/wcj-settings-empty-cart.php:53
|
7809 |
msgid "Cart totals: After shipping"
|
7810 |
msgstr ""
|
7811 |
|
7812 |
+
#: includes/functions/wcj-functions-general.php:677
|
7813 |
#: includes/settings/wcj-settings-empty-cart.php:54
|
7814 |
msgid "Cart totals: Before order total"
|
7815 |
msgstr ""
|
7816 |
|
7817 |
+
#: includes/functions/wcj-functions-general.php:678
|
7818 |
#: includes/settings/wcj-settings-empty-cart.php:55
|
7819 |
msgid "Cart totals: After order total"
|
7820 |
msgstr ""
|
7821 |
|
7822 |
+
#: includes/functions/wcj-functions-general.php:679
|
7823 |
msgid "Proceed to checkout"
|
7824 |
msgstr ""
|
7825 |
|
7826 |
+
#: includes/functions/wcj-functions-general.php:680
|
7827 |
msgid "After cart totals"
|
7828 |
msgstr ""
|
7829 |
|
7830 |
+
#: includes/functions/wcj-functions-general.php:682
|
7831 |
msgid "Before shipping calculator"
|
7832 |
msgstr ""
|
7833 |
|
7834 |
+
#: includes/functions/wcj-functions-general.php:683
|
7835 |
msgid "After shipping calculator"
|
7836 |
msgstr ""
|
7837 |
|
7838 |
+
#: includes/functions/wcj-functions-general.php:685
|
7839 |
msgid "If cart is empty"
|
7840 |
msgstr ""
|
7841 |
|
7864 |
msgid "Custom Document"
|
7865 |
msgstr ""
|
7866 |
|
|
|
|
|
|
|
|
|
7867 |
#: includes/functions/wcj-functions-reports.php:25
|
7868 |
msgid "Daily Total Sum"
|
7869 |
msgstr ""
|
8513 |
msgid "Renumerate invoices"
|
8514 |
msgstr ""
|
8515 |
|
8516 |
+
#: includes/pdf-invoices/class-wcj-pdf-invoicing-renumerate-tool.php:158
|
8517 |
+
msgid "Results"
|
8518 |
+
msgstr ""
|
8519 |
+
|
8520 |
+
#: includes/pdf-invoices/class-wcj-pdf-invoicing-renumerate-tool.php:247
|
8521 |
#, php-format
|
8522 |
msgid "Total documents created: %d"
|
8523 |
msgstr ""
|
8524 |
|
8525 |
+
#: includes/pdf-invoices/class-wcj-pdf-invoicing-renumerate-tool.php:249
|
8526 |
#, php-format
|
8527 |
msgid "Total documents deleted: %d"
|
8528 |
msgstr ""
|
8536 |
msgstr ""
|
8537 |
|
8538 |
#: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:105
|
8539 |
+
#: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:126
|
8540 |
msgid "Please fill year and month values."
|
8541 |
msgstr ""
|
8542 |
|
8556 |
msgid "Download monthly documents CSV"
|
8557 |
msgstr ""
|
8558 |
|
8559 |
+
#: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:208
|
8560 |
#, php-format
|
8561 |
msgid ""
|
8562 |
"Booster: %s class is not accessible on your server. Please contact your "
|
8563 |
"hosting provider."
|
8564 |
msgstr ""
|
8565 |
|
8566 |
+
#: includes/pdf-invoices/class-wcj-pdf-invoicing-report-tool.php:287
|
8567 |
#, php-format
|
8568 |
msgid "No documents (%1$s) found for %2$d-%3$02d."
|
8569 |
msgstr ""
|
8763 |
msgid "Total customers"
|
8764 |
msgstr ""
|
8765 |
|
8766 |
+
#: includes/reports/class-wcj-reports-customers.php:151
|
8767 |
msgid "Country Code"
|
8768 |
msgstr ""
|
8769 |
|
8770 |
+
#: includes/reports/class-wcj-reports-customers.php:152
|
8771 |
msgid "Customers Count"
|
8772 |
msgstr ""
|
8773 |
|
8774 |
+
#: includes/reports/class-wcj-reports-customers.php:153
|
8775 |
msgid "Percent of total"
|
8776 |
msgstr ""
|
8777 |
|
8778 |
+
#: includes/reports/class-wcj-reports-customers.php:189
|
8779 |
msgid "Report for:"
|
8780 |
msgstr ""
|
8781 |
|
8840 |
msgid "Totals"
|
8841 |
msgstr ""
|
8842 |
|
8843 |
+
#: includes/reports/class-wcj-reports-monthly-sales.php:355
|
8844 |
msgid "Report currency"
|
8845 |
msgstr ""
|
8846 |
|
8847 |
+
#: includes/reports/class-wcj-reports-monthly-sales.php:376
|
8848 |
#, php-format
|
8849 |
msgid "Report generated in: %s s"
|
8850 |
msgstr ""
|
8851 |
|
8852 |
+
#: includes/reports/class-wcj-reports-monthly-sales.php:380
|
8853 |
msgid "Save Currency Rates"
|
8854 |
msgstr ""
|
8855 |
|
8856 |
+
#: includes/reports/class-wcj-reports-monthly-sales.php:385
|
8857 |
msgid "Reset Currency Rates"
|
8858 |
msgstr ""
|
8859 |
|
8860 |
+
#: includes/reports/class-wcj-reports-product-sales-daily.php:184
|
8861 |
+
#: includes/reports/class-wcj-reports-sales-gateways.php:129
|
8862 |
#: includes/reports/class-wcj-reports-sales.php:365
|
8863 |
msgid "Reports Settings"
|
8864 |
msgstr ""
|
8865 |
|
8866 |
+
#: includes/reports/class-wcj-reports-product-sales-daily.php:308
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8867 |
#, php-format
|
8868 |
msgid "Total: %d"
|
8869 |
msgstr ""
|
8870 |
|
8871 |
+
#: includes/reports/class-wcj-reports-product-sales-daily.php:313
|
8872 |
+
#: includes/reports/class-wcj-reports-product-sales-daily.php:318
|
8873 |
#, php-format
|
8874 |
msgid "Total: %s"
|
8875 |
msgstr ""
|
8876 |
|
8877 |
+
#: includes/reports/class-wcj-reports-product-sales-daily.php:337
|
8878 |
+
#: includes/reports/class-wcj-reports-sales-gateways.php:193
|
8879 |
#, php-format
|
8880 |
msgid "Total orders: %d"
|
8881 |
msgstr ""
|
8882 |
|
8883 |
+
#: includes/reports/class-wcj-reports-product-sales-daily.php:338
|
8884 |
+
#: includes/reports/class-wcj-reports-sales-gateways.php:195
|
8885 |
+
#: includes/reports/class-wcj-reports-sales.php:393
|
8886 |
msgid "No sales data for current period."
|
8887 |
msgstr ""
|
8888 |
|
8889 |
+
#: includes/reports/class-wcj-reports-sales-gateways.php:99
|
8890 |
#: includes/reports/class-wcj-reports-stock.php:121
|
8891 |
#: includes/reports/class-wcj-reports-stock.php:197
|
8892 |
msgid "N/A"
|
8893 |
msgstr ""
|
8894 |
|
8895 |
+
#: includes/reports/class-wcj-reports-sales-gateways.php:179
|
8896 |
msgid "Gateway"
|
8897 |
msgstr ""
|
8898 |
|
8916 |
msgid "Total Profit"
|
8917 |
msgstr ""
|
8918 |
|
8919 |
+
#: includes/reports/class-wcj-reports-sales.php:387
|
8920 |
msgid "Filter products"
|
8921 |
msgstr ""
|
8922 |
|
8996 |
msgid "profit:"
|
8997 |
msgstr ""
|
8998 |
|
8999 |
+
#: includes/reports/class-wcj-reports-stock.php:360
|
9000 |
+
msgid "Product not available"
|
9001 |
+
msgstr ""
|
9002 |
+
|
9003 |
+
#: includes/reports/class-wcj-reports-stock.php:365
|
9004 |
msgid "Total current stock value"
|
9005 |
msgstr ""
|
9006 |
|
9007 |
+
#: includes/reports/class-wcj-reports-stock.php:366
|
9008 |
msgid "Total stock value"
|
9009 |
msgstr ""
|
9010 |
|
9011 |
+
#: includes/reports/class-wcj-reports-stock.php:367
|
9012 |
msgid "Product stock value average"
|
9013 |
msgstr ""
|
9014 |
|
9015 |
+
#: includes/reports/class-wcj-reports-stock.php:368
|
9016 |
msgid "Product stock average"
|
9017 |
msgstr ""
|
9018 |
|
9019 |
+
#: includes/reports/class-wcj-reports-stock.php:370
|
9020 |
msgid "Total current stock purchase price"
|
9021 |
msgstr ""
|
9022 |
|
9023 |
+
#: includes/reports/class-wcj-reports-stock.php:374
|
9024 |
msgid "Report was generated in: "
|
9025 |
msgstr ""
|
9026 |
|
11908 |
msgstr ""
|
11909 |
|
11910 |
#: includes/settings/wcj-settings-currency-exchange-rates.php:99
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11911 |
msgid "Force Point as Decimal Separator"
|
11912 |
msgstr ""
|
11913 |
|
11914 |
+
#: includes/settings/wcj-settings-currency-exchange-rates.php:101
|
11915 |
msgid "Force \".\" as decimal separator for exchange rates."
|
11916 |
msgstr ""
|
11917 |
|
11918 |
+
#: includes/settings/wcj-settings-currency-exchange-rates.php:111
|
11919 |
msgid "API Keys"
|
11920 |
msgstr ""
|
11921 |
|
11922 |
+
#: includes/settings/wcj-settings-currency-exchange-rates.php:112
|
11923 |
msgid "API keys provided by the Exchange Rates Servers"
|
11924 |
msgstr ""
|
11925 |
|
11926 |
+
#: includes/settings/wcj-settings-currency-exchange-rates.php:117
|
11927 |
msgid "Free Currency Converter"
|
11928 |
msgstr ""
|
11929 |
|
11930 |
+
#: includes/settings/wcj-settings-currency-exchange-rates.php:119
|
11931 |
#, php-format
|
11932 |
msgid "More information at %s"
|
11933 |
msgstr ""
|
11934 |
|
11935 |
+
#: includes/settings/wcj-settings-currency-exchange-rates.php:128
|
11936 |
msgid "Custom Currencies Options"
|
11937 |
msgstr ""
|
11938 |
|
11939 |
+
#: includes/settings/wcj-settings-currency-exchange-rates.php:131
|
11940 |
#, php-format
|
11941 |
msgid ""
|
11942 |
"You can add more currencies in this section. E.g. this can be used to display "
|
11943 |
"exchange rates with %s shortcodes."
|
11944 |
msgstr ""
|
11945 |
|
11946 |
+
#: includes/settings/wcj-settings-currency-exchange-rates.php:144
|
11947 |
#: includes/settings/wcj-settings-currency.php:72
|
11948 |
msgid "Total Custom Currencies"
|
11949 |
msgstr ""
|
11950 |
|
11951 |
+
#: includes/settings/wcj-settings-currency-exchange-rates.php:159
|
11952 |
#: includes/settings/wcj-settings-currency.php:87
|
11953 |
msgid "Custom Currency"
|
11954 |
msgstr ""
|
11955 |
|
11956 |
+
#: includes/settings/wcj-settings-currency-exchange-rates.php:184
|
11957 |
#: includes/settings/wcj-settings-price-by-country.php:420
|
11958 |
msgid "Exchange Rates"
|
11959 |
msgstr ""
|
11960 |
|
11961 |
+
#: includes/settings/wcj-settings-currency-exchange-rates.php:186
|
11962 |
msgid ""
|
11963 |
"All currencies from all <strong>enabled</strong> modules (with \"Exchange "
|
11964 |
"Rates Updates\" set to \"Automatically via Currency Exchange Rates module\") "
|
17150 |
|
17151 |
#: includes/settings/wcj-settings-product-by-condition.php:91
|
17152 |
#: includes/settings/wcj-settings-related-products.php:182
|
17153 |
+
#: includes/shortcodes/class-wcj-order-items-shortcodes.php:219
|
17154 |
msgid "Standard"
|
17155 |
msgstr ""
|
17156 |
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Tags: woocommerce customization, woocommerce bundle, woocommerce product addon,
|
|
4 |
Requires at least: 5.8
|
5 |
Tested up to: 6.1
|
6 |
Requires PHP: 7.2
|
7 |
-
Stable tag:
|
8 |
License: GNU General Public License v3.0
|
9 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
10 |
|
@@ -275,6 +275,20 @@ To unlock all Booster for WooCommerce features, please install additional paid B
|
|
275 |
|
276 |
== Changelog ==
|
277 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
278 |
= 5.6.8 16/11/2022 =
|
279 |
|
280 |
* FIXED - CART & CHECKOUT - EU VAT Number - Replace endpoint to validate EU VAT number for without soap method.
|
4 |
Requires at least: 5.8
|
5 |
Tested up to: 6.1
|
6 |
Requires PHP: 7.2
|
7 |
+
Stable tag: 6.0.0
|
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 |
+
= 6.0.0 30/11/2022 =
|
279 |
+
|
280 |
+
* FIXED - PDF INVOICING & PACKING SLIPS - PDF Invoicing - Fixed error PHP Deprecated: Function WC_Order_Item_Product::offsetSet is deprecated since version...
|
281 |
+
* FIXED - PDF INVOICING & PACKING SLIPS - PDF Invoicing - Fixed calculation issue in wcj_order_item_total_refunded shortcode.
|
282 |
+
* FIXED - PRICES & CURRENCIES - Currency Exchange Rates - Fixed exchange rate issue for European Central Bank (ECB) exchange rate server response.
|
283 |
+
* FIXED - PRICES & CURRENCIES - Currency Exchange Rates - "Always Use cURL" option removed.
|
284 |
+
* FIXED - PRICES & CURRENCIES - Multicurrency (Currency Switcher) - Fixed Default Currency and Role Defaults conflict.
|
285 |
+
* FIXED - PRICES & CURRENCIES - Product Price by Formula - Fixed verify nonce issue.
|
286 |
+
* FIXED - EMAILS & MISC. - General - Added missing images for jquery-ui.css
|
287 |
+
* FIXED - Added Security vulnerability fixes - Multiple CSRF.
|
288 |
+
* FIXED - Added Security vulnerability fixes.
|
289 |
+
* WooCommerce 7.1.0 tested
|
290 |
+
* WordPress 6.1 tested
|
291 |
+
|
292 |
= 5.6.8 16/11/2022 =
|
293 |
|
294 |
* FIXED - CART & CHECKOUT - EU VAT Number - Replace endpoint to validate EU VAT number for without soap method.
|
version-details.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
{
|
2 |
-
"0" : "=
|
3 |
-
"1" : "* FIXED -
|
4 |
-
"2" : "* FIXED -
|
5 |
"3" : "* FIXED - Added Security vulnerability fixes",
|
6 |
"4" : "* WooCommerce 7.1.0 tested",
|
7 |
"5" : "* WordPress 6.1 Tested"
|
1 |
{
|
2 |
+
"0" : "= 6.0.0 30/11/2022 =",
|
3 |
+
"1" : "* FIXED - PDF INVOICING & PACKING SLIPS - PDF Invoicing - Fixed error PHP Deprecated: Function WC_Order_Item_Product::offsetSet is deprecated since version...",
|
4 |
+
"2" : "* FIXED - PRICES & CURRENCIES - Currency Exchange Rates - Fixed exchange rate issue for European Central Bank (ECB) exchange rate server response.",
|
5 |
"3" : "* FIXED - Added Security vulnerability fixes",
|
6 |
"4" : "* WooCommerce 7.1.0 tested",
|
7 |
"5" : "* WordPress 6.1 Tested"
|
woocommerce-jetpack.php
CHANGED
@@ -3,7 +3,7 @@
|
|
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:
|
7 |
* Author: Pluggabl LLC
|
8 |
* Author URI: https://booster.io
|
9 |
* Text Domain: woocommerce-jetpack
|
@@ -65,7 +65,7 @@ if ( ! class_exists( 'WC_Jetpack' ) ) :
|
|
65 |
* @var string
|
66 |
* @since 2.4.7
|
67 |
*/
|
68 |
-
public $version = '
|
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: 6.0.0
|
7 |
* Author: Pluggabl LLC
|
8 |
* Author URI: https://booster.io
|
9 |
* Text Domain: woocommerce-jetpack
|
65 |
* @var string
|
66 |
* @since 2.4.7
|
67 |
*/
|
68 |
+
public $version = '6.0.0';
|
69 |
|
70 |
/**
|
71 |
* The single instance of the class
|