Booster for WooCommerce - Version 2.9.1

Version Description

  • 17/07/2017
  • Dev - WCJ_Module - save_meta_box_validate_value() added.
  • Dev - Manage Settings - "Use List Instead of Comma Separated Text for Products in Settings" option added (Supported modules: Product Info).
  • Dev - Functions - Country - wcj_get_country_flag_by_code() - "No flag" added.
  • Dev - Shortcodes - General - [wcj_site_url] shortcode added.
  • Dev - PRODUCTS - Product Availability by Date - Initial module release.
  • Fix - PRODUCTS - Product Availability by Time - Settings - Description fixed.
  • Dev - PRODUCTS - Product Availability by Time - "Per Product" options added.
  • Dev - SHIPPING & ORDERS - Shipping Options - Hide if Free Shipping is Available - Hide all except "Local Pickup" and Hide "Flat Rate" only options added.
  • Fix - EMAILS & MISC. - Admin Bar - Booster - Dashboard - Active - Submodules excluded from the list.
  • Dev - EMAILS & MISC. - Admin Bar - Booster - Modules - Sorted by title.
  • Dev - EMAILS & MISC. - Admin Tools - "WooCommerce Log" option added.
  • Dev - EMAILS & MISC. - Custom Emails - Renamed from "Emails" module.
  • Dev - EMAILS & MISC. - Custom JS - Shortcodes can now be used in custom JS.
  • Dev - EMAILS & MISC. - Email Options - Initial module release (separated from "Emails" module).
  • Dev - EMAILS & MISC. - General - "Track Users" section added. "Top countries by visits" admin dashboard widget added. "Track Orders" (i.e. "Save customer's acquisition source (i.e. HTTP referer) for orders") option added.
  • Dev - EMAILS & MISC. - Reports - Orders - Monthly Sales (with Currency Conversion) - Monthly rates are set manually now.
  • Dev - EMAILS & MISC. - Reports - Orders - Monthly Sales (with Currency Conversion) - "Forecast total orders and sum (excl. TAX) for current month" option added.
  • Dev - EMAILS & MISC. - Reports - Orders - Monthly Sales (with Currency Conversion) - "Include current day for current month" option added.
  • Dev - EMAILS & MISC. - Reports - Orders - Monthly Sales (with Currency Conversion) - "Orders by Currency" row added.
  • Dev - EMAILS & MISC. - Reports - Orders - Monthly Sales (with Currency Conversion) - Code refactoring, cleanup etc.
  • Dev - EMAILS & MISC. - Reports - Stock - "Total current stock purchase price" added.
  • Dev - EMAILS & MISC. - Reports - Stock - WP_Query optimized to return ids only.
  • Dev - EMAILS & MISC. - Reports - Stock - Code cleanup.
  • Dev - EMAILS & MISC. - URL Coupons - "Redirect URL" options added.
  • Dev - EMAILS & MISC. - URL Coupons - "Automatically add coupon's products to the cart" option added.
  • Dev - EMAILS & MISC. - URL Coupons - Initial module release (separated from "General" module).
  • Tweak - Flags images updated.
Download this release

Release Info

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

Code changes from version 2.9.0 to 2.9.1

Files changed (44) hide show
  1. assets/images/flag-icons/ch.png +0 -0
  2. assets/images/flag-icons/im.png +0 -0
  3. assets/images/flag-icons/me.png +0 -0
  4. assets/images/flag-icons/no-flag.png +0 -0
  5. assets/images/flag-icons/np.png +0 -0
  6. includes/admin/class-wc-settings-jetpack.php +33 -20
  7. includes/admin/wcj-modules-cats.php +4 -1
  8. includes/class-wcj-admin-bar.php +13 -13
  9. includes/class-wcj-custom-js.php +5 -5
  10. includes/class-wcj-email-options.php +141 -0
  11. includes/class-wcj-emails.php +9 -124
  12. includes/class-wcj-general.php +348 -26
  13. includes/class-wcj-product-by-date.php +152 -0
  14. includes/class-wcj-product-by-time.php +41 -12
  15. includes/class-wcj-product-custom-info.php +4 -4
  16. includes/class-wcj-product-images.php +1 -0
  17. includes/class-wcj-reports.php +3 -3
  18. includes/class-wcj-shipping-options.php +40 -23
  19. includes/class-wcj-url-coupons.php +130 -0
  20. includes/classes/class-wcj-module.php +62 -1
  21. includes/functions/wcj-admin-functions.php +82 -1
  22. includes/functions/wcj-country-functions.php +5 -3
  23. includes/functions/wcj-date-time-functions.php +46 -1
  24. includes/functions/wcj-debug-functions.php +12 -4
  25. includes/functions/wcj-exchange-rates-functions.php +71 -1
  26. includes/js/wcj-track-users.js +19 -0
  27. includes/reports/wcj-class-reports-monthly-sales.php +136 -128
  28. includes/reports/wcj-class-reports-stock.php +125 -202
  29. includes/settings/meta-box/wcj-settings-meta-box-product-by-date.php +38 -0
  30. includes/settings/meta-box/wcj-settings-meta-box-product-by-time.php +38 -0
  31. includes/settings/wcj-settings-admin-tools.php +9 -2
  32. includes/settings/wcj-settings-email-options.php +39 -0
  33. includes/settings/wcj-settings-emails.php +2 -27
  34. includes/settings/wcj-settings-general.php +51 -29
  35. includes/settings/wcj-settings-product-by-date.php +97 -0
  36. includes/settings/wcj-settings-product-by-time.php +32 -6
  37. includes/settings/wcj-settings-product-custom-info.php +34 -24
  38. includes/settings/wcj-settings-reports.php +16 -2
  39. includes/settings/wcj-settings-shipping-options.php +16 -14
  40. includes/settings/wcj-settings-url-coupons.php +65 -0
  41. includes/shortcodes/class-wcj-general-shortcodes.php +13 -2
  42. langs/woocommerce-jetpack.pot +895 -619
  43. readme.txt +34 -2
  44. woocommerce-jetpack.php +7 -4
assets/images/flag-icons/ch.png CHANGED
Binary file
assets/images/flag-icons/im.png ADDED
Binary file
assets/images/flag-icons/me.png CHANGED
Binary file
assets/images/flag-icons/no-flag.png ADDED
Binary file
assets/images/flag-icons/np.png CHANGED
Binary file
includes/admin/class-wc-settings-jetpack.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings
4
  *
5
- * @version 2.9.0
6
  * @since 1.0.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -227,7 +227,7 @@ class WC_Settings_Jetpack extends WC_Settings_Page {
227
  /**
228
  * output_dashboard.
229
  *
230
- * @version 2.7.0
231
  */
232
  function output_dashboard( $current_section ) {
233
 
@@ -267,7 +267,6 @@ class WC_Settings_Jetpack extends WC_Settings_Page {
267
  } elseif ( 'active' === $current_section ) {
268
  $this->output_dashboard_modules( $the_settings, 'active_modules_only' );
269
  } elseif ( 'manager' === $current_section ) {
270
- $autoload_settings = $this->get_autoload_settings();
271
  $table_data = array(
272
  array(
273
  '<button style="width:100px;" class="button-primary" type="submit" name="booster_export_settings">' . __( 'Export', 'woocommerce-jetpack' ) . '</button>',
@@ -282,14 +281,17 @@ class WC_Settings_Jetpack extends WC_Settings_Page {
282
  '<button style="width:100px;" class="button-primary" type="submit" name="booster_reset_settings" onclick="return confirm(\'' . __( 'This will reset settings to defaults for all Booster modules. Are you sure?', 'woocommerce-jetpack' ) . '\')">' . __( 'Reset', 'woocommerce-jetpack' ) . '</button>',
283
  '<em>' . __( 'Reset all Booster\'s options.', 'woocommerce-jetpack' ) . '</em>',
284
  ),
285
- array(
286
- '<label for="' . $autoload_settings['id'] . '">' .
287
- '<input name="' . $autoload_settings['id'] . '" id="' . $autoload_settings['id'] . '" type="' . $autoload_settings['type'] . '" class="" value="1" ' . checked( get_option( $autoload_settings['id'], $autoload_settings['default'] ), 'yes', false ) . '>' .
288
- ' ' . '<strong>' . $autoload_settings['title'] . '</strong>' .
289
- '</label>',
290
- '<em>' . $autoload_settings['desc'] . '</em>',
291
- ),
292
  );
 
 
 
 
 
 
 
 
 
 
293
  echo wcj_get_table_html( $table_data, array( 'table_class' => 'widefat striped', 'table_heading_type' => 'none' ) );
294
  }
295
 
@@ -392,33 +394,44 @@ class WC_Settings_Jetpack extends WC_Settings_Page {
392
  }
393
 
394
  /**
395
- * get_autoload_settings.
396
  *
397
- * @version 2.6.0
398
  * @since 2.6.0
399
  * @return array
400
  */
401
- function get_autoload_settings() {
402
  return array(
403
- 'title' => __( 'Autoload Booster\'s Options', 'woocommerce-jetpack' ),
404
- 'type' => 'checkbox',
405
- 'desc' => __( 'Choose if you want Booster\'s options to be autoloaded when calling add_option. After saving this option, you need to Reset all Booster\'s settings. Leave default value (i.e. Enabled) if not sure.', 'woocommerce-jetpack' ),
406
- 'id' => 'wcj_autoload_options',
407
- 'default' => 'yes',
 
 
 
 
 
 
 
 
 
 
 
408
  );
409
  }
410
 
411
  /**
412
  * Get settings array
413
  *
414
- * @version 2.7.0
415
  * @return array
416
  */
417
  function get_settings( $current_section = '' ) {
418
  if ( '' != $current_section && 'alphabetically' != $current_section && 'by_category' != $current_section && 'active' != $current_section && 'manager' != $current_section ) {
419
  return apply_filters( 'wcj_settings_' . $current_section, array() );
420
  } elseif ( 'manager' === $current_section ) {
421
- return array( $this->get_autoload_settings() );
422
  } else {
423
  $cat_id = ( isset( $_GET['wcj-cat'] ) && '' != $_GET['wcj-cat'] ) ? $_GET['wcj-cat'] : 'dashboard';
424
  $settings[] = array(
2
  /**
3
  * Booster for WooCommerce - Settings
4
  *
5
+ * @version 2.9.1
6
  * @since 1.0.0
7
  * @author Algoritmika Ltd.
8
  */
227
  /**
228
  * output_dashboard.
229
  *
230
+ * @version 2.9.1
231
  */
232
  function output_dashboard( $current_section ) {
233
 
267
  } elseif ( 'active' === $current_section ) {
268
  $this->output_dashboard_modules( $the_settings, 'active_modules_only' );
269
  } elseif ( 'manager' === $current_section ) {
 
270
  $table_data = array(
271
  array(
272
  '<button style="width:100px;" class="button-primary" type="submit" name="booster_export_settings">' . __( 'Export', 'woocommerce-jetpack' ) . '</button>',
281
  '<button style="width:100px;" class="button-primary" type="submit" name="booster_reset_settings" onclick="return confirm(\'' . __( 'This will reset settings to defaults for all Booster modules. Are you sure?', 'woocommerce-jetpack' ) . '\')">' . __( 'Reset', 'woocommerce-jetpack' ) . '</button>',
282
  '<em>' . __( 'Reset all Booster\'s options.', 'woocommerce-jetpack' ) . '</em>',
283
  ),
 
 
 
 
 
 
 
284
  );
285
+ $manager_settings = $this->get_manager_settings();
286
+ foreach ( $manager_settings as $manager_settings_field ) {
287
+ $table_data[] = array(
288
+ '<label for="' . $manager_settings_field['id'] . '">' .
289
+ '<input name="' . $manager_settings_field['id'] . '" id="' . $manager_settings_field['id'] . '" type="' . $manager_settings_field['type'] . '" class="" value="1" ' . checked( get_option( $manager_settings_field['id'], $manager_settings_field['default'] ), 'yes', false ) . '>' .
290
+ ' ' . '<strong>' . $manager_settings_field['title'] . '</strong>' .
291
+ '</label>',
292
+ '<em>' . $manager_settings_field['desc'] . '</em>',
293
+ );
294
+ }
295
  echo wcj_get_table_html( $table_data, array( 'table_class' => 'widefat striped', 'table_heading_type' => 'none' ) );
296
  }
297
 
394
  }
395
 
396
  /**
397
+ * get_manager_settings.
398
  *
399
+ * @version 2.9.1
400
  * @since 2.6.0
401
  * @return array
402
  */
403
+ function get_manager_settings() {
404
  return array(
405
+ array(
406
+ 'title' => __( 'Autoload Booster\'s Options', 'woocommerce-jetpack' ),
407
+ 'type' => 'checkbox',
408
+ 'desc' => __( 'Choose if you want Booster\'s options to be autoloaded when calling add_option. After saving this option, you need to Reset all Booster\'s settings. Leave default value (i.e. Enabled) if not sure.', 'woocommerce-jetpack' ),
409
+ 'id' => 'wcj_autoload_options',
410
+ 'default' => 'yes',
411
+ ),
412
+ array(
413
+ 'title' => __( 'Use List Instead of Comma Separated Text for Products in Settings', 'woocommerce-jetpack' ),
414
+ 'type' => 'checkbox',
415
+ 'desc' => sprintf( __( 'Supported modules: %s.', 'woocommerce-jetpack' ), implode( ', ', array(
416
+ __( 'Product Info', 'woocommerce-jetpack' ),
417
+ ) ) ),
418
+ 'id' => 'wcj_list_for_products',
419
+ 'default' => 'yes',
420
+ ),
421
  );
422
  }
423
 
424
  /**
425
  * Get settings array
426
  *
427
+ * @version 2.9.1
428
  * @return array
429
  */
430
  function get_settings( $current_section = '' ) {
431
  if ( '' != $current_section && 'alphabetically' != $current_section && 'by_category' != $current_section && 'active' != $current_section && 'manager' != $current_section ) {
432
  return apply_filters( 'wcj_settings_' . $current_section, array() );
433
  } elseif ( 'manager' === $current_section ) {
434
+ return $this->get_manager_settings();
435
  } else {
436
  $cat_id = ( isset( $_GET['wcj-cat'] ) && '' != $_GET['wcj-cat'] ) ? $_GET['wcj-cat'] : 'dashboard';
437
  $settings[] = array(
includes/admin/wcj-modules-cats.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * The WooCommerce Modules Array.
6
  *
7
- * @version 2.9.0
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
@@ -78,6 +78,7 @@ return array(
78
  'product_by_country',
79
  'product_by_user_role',
80
  'product_by_time',
 
81
  'product_by_user',
82
  'products_xml',
83
  'product_bulk_meta_editor',
@@ -157,6 +158,7 @@ return array(
157
  'all_cat_ids' => array(
158
  'general',
159
  'breadcrumbs',
 
160
  'admin_bar',
161
  'export',
162
  'my_account',
@@ -164,6 +166,7 @@ return array(
164
  'reports',
165
  'admin_tools',
166
  'emails',
 
167
  'emails_verification',
168
  'wpml',
169
  'custom_css',
4
  *
5
  * The WooCommerce Modules Array.
6
  *
7
+ * @version 2.9.1
8
  * @since 2.2.0
9
  * @author Algoritmika Ltd.
10
  */
78
  'product_by_country',
79
  'product_by_user_role',
80
  'product_by_time',
81
+ 'product_by_date',
82
  'product_by_user',
83
  'products_xml',
84
  'product_bulk_meta_editor',
158
  'all_cat_ids' => array(
159
  'general',
160
  'breadcrumbs',
161
+ 'url_coupons',
162
  'admin_bar',
163
  'export',
164
  'my_account',
166
  'reports',
167
  'admin_tools',
168
  'emails',
169
+ 'email_options',
170
  'emails_verification',
171
  'wpml',
172
  'custom_css',
includes/class-wcj-admin-bar.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Admin Bar
4
  *
5
- * @version 2.9.0
6
  * @since 2.9.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -117,7 +117,7 @@ class WCJ_Admin_Bar extends WCJ_Module {
117
  /**
118
  * get_nodes_booster_modules.
119
  *
120
- * @version 2.9.0
121
  * @since 2.9.0
122
  * @todo (maybe) dashes instead of underscores
123
  * @todo (maybe) dashboard > alphabetically - list all modules
@@ -153,11 +153,12 @@ class WCJ_Admin_Bar extends WCJ_Module {
153
  ),
154
  );
155
  } else {
 
156
  foreach ( $label_info['all_cat_ids'] as $link_id ) {
157
  if ( wcj_is_module_deprecated( $link_id, false, true ) ) {
158
  continue;
159
  }
160
- $nodes[ $id ]['nodes'][ $link_id ] = array(
161
  'title' => WCJ()->modules[ $link_id ]->short_desc,
162
  'href' => admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=' . $id . '&section=' . $link_id ),
163
  'meta' => array( 'title' => WCJ()->modules[ $link_id ]->desc ),
@@ -173,10 +174,12 @@ class WCJ_Admin_Bar extends WCJ_Module {
173
  ),
174
  ),
175
  );
176
- if ( WCJ()->modules[ $link_id ]->is_enabled() ) {
177
- $active_modules[ $link_id ] = $nodes[ $id ]['nodes'][ $link_id ];
178
  }
179
  }
 
 
180
  }
181
  }
182
  if ( ! empty( $active_modules ) ) {
@@ -189,14 +192,11 @@ class WCJ_Admin_Bar extends WCJ_Module {
189
  /**
190
  * usort_compare_by_title.
191
  *
192
- * @version 2.9.0
193
  * @since 2.9.0
194
  */
195
  function usort_compare_by_title( $a, $b ) {
196
- if ( $a['title'] == $b['title'] ) {
197
- return 0;
198
- }
199
- return ( $a['title'] < $b['title'] ) ? -1 : 1;
200
  }
201
 
202
  /**
@@ -229,7 +229,7 @@ class WCJ_Admin_Bar extends WCJ_Module {
229
  /**
230
  * add_booster_admin_bar.
231
  *
232
- * @version 2.9.0
233
  * @since 2.9.0
234
  */
235
  function add_booster_admin_bar( $wp_admin_bar ) {
@@ -241,8 +241,8 @@ class WCJ_Admin_Bar extends WCJ_Module {
241
  'title' => __( 'Booster - Settings', 'woocommerce-jetpack' ),
242
  ),
243
  'nodes' => array(
244
- 'settings' => array(
245
- 'title' => __( 'Settings', 'woocommerce-jetpack' ),
246
  'href' => admin_url( 'admin.php?page=wc-settings&tab=jetpack' ),
247
  'nodes' => $this->get_nodes_booster_modules(),
248
  ),
2
  /**
3
  * Booster for WooCommerce - Module - Admin Bar
4
  *
5
+ * @version 2.9.1
6
  * @since 2.9.0
7
  * @author Algoritmika Ltd.
8
  */
117
  /**
118
  * get_nodes_booster_modules.
119
  *
120
+ * @version 2.9.1
121
  * @since 2.9.0
122
  * @todo (maybe) dashes instead of underscores
123
  * @todo (maybe) dashboard > alphabetically - list all modules
153
  ),
154
  );
155
  } else {
156
+ $cat_nodes = array();
157
  foreach ( $label_info['all_cat_ids'] as $link_id ) {
158
  if ( wcj_is_module_deprecated( $link_id, false, true ) ) {
159
  continue;
160
  }
161
+ $cat_nodes[ $link_id ] = array(
162
  'title' => WCJ()->modules[ $link_id ]->short_desc,
163
  'href' => admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=' . $id . '&section=' . $link_id ),
164
  'meta' => array( 'title' => WCJ()->modules[ $link_id ]->desc ),
174
  ),
175
  ),
176
  );
177
+ if ( WCJ()->modules[ $link_id ]->is_enabled() && 'module' === WCJ()->modules[ $link_id ]->type ) {
178
+ $active_modules[ $link_id ] = $cat_nodes[ $link_id ];
179
  }
180
  }
181
+ usort( $cat_nodes, array( $this, 'usort_compare_by_title' ) );
182
+ $nodes[ $id ]['nodes'] = $cat_nodes;
183
  }
184
  }
185
  if ( ! empty( $active_modules ) ) {
192
  /**
193
  * usort_compare_by_title.
194
  *
195
+ * @version 2.9.1
196
  * @since 2.9.0
197
  */
198
  function usort_compare_by_title( $a, $b ) {
199
+ return strcasecmp( $a['title'], $b['title'] );
 
 
 
200
  }
201
 
202
  /**
229
  /**
230
  * add_booster_admin_bar.
231
  *
232
+ * @version 2.9.1
233
  * @since 2.9.0
234
  */
235
  function add_booster_admin_bar( $wp_admin_bar ) {
241
  'title' => __( 'Booster - Settings', 'woocommerce-jetpack' ),
242
  ),
243
  'nodes' => array(
244
+ 'modules' => array(
245
+ 'title' => __( 'Modules', 'woocommerce-jetpack' ),
246
  'href' => admin_url( 'admin.php?page=wc-settings&tab=jetpack' ),
247
  'nodes' => $this->get_nodes_booster_modules(),
248
  ),
includes/class-wcj-custom-js.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Custom JS
4
  *
5
- * @version 2.8.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -43,21 +43,21 @@ class WCJ_Custom_JS extends WCJ_Module {
43
  /**
44
  * custom_frontend_js.
45
  *
46
- * @version 2.8.0
47
  * @since 2.8.0
48
  */
49
  function custom_frontend_js() {
50
- echo '<script>' . get_option( 'wcj_custom_js_frontend', '' ) . '</script>';
51
  }
52
 
53
  /**
54
  * custom_backend_js.
55
  *
56
- * @version 2.8.0
57
  * @since 2.8.0
58
  */
59
  function custom_backend_js() {
60
- echo '<script>' . get_option( 'wcj_custom_js_backend', '' ) . '</script>';
61
  }
62
 
63
  }
2
  /**
3
  * Booster for WooCommerce - Module - Custom JS
4
  *
5
+ * @version 2.9.1
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
43
  /**
44
  * custom_frontend_js.
45
  *
46
+ * @version 2.9.1
47
  * @since 2.8.0
48
  */
49
  function custom_frontend_js() {
50
+ echo '<script>' . do_shortcode( get_option( 'wcj_custom_js_frontend', '' ) ) . '</script>';
51
  }
52
 
53
  /**
54
  * custom_backend_js.
55
  *
56
+ * @version 2.9.1
57
  * @since 2.8.0
58
  */
59
  function custom_backend_js() {
60
+ echo '<script>' . do_shortcode( get_option( 'wcj_custom_js_backend', '' ) ) . '</script>';
61
  }
62
 
63
  }
includes/class-wcj-email-options.php ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Booster for WooCommerce - Module - Email Options
4
+ *
5
+ * @version 2.9.1
6
+ * @since 2.9.1
7
+ * @author Algoritmika Ltd.
8
+ */
9
+
10
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
11
+
12
+ if ( ! class_exists( 'WCJ_Email_Options' ) ) :
13
+
14
+ class WCJ_Email_Options extends WCJ_Module {
15
+
16
+ /**
17
+ * Constructor.
18
+ *
19
+ * @version 2.9.1
20
+ * @since 2.9.1
21
+ * @todo meta customizer - check "gravity-forms-emails-woocommerce" plugin
22
+ */
23
+ function __construct() {
24
+
25
+ $this->id = 'email_options';
26
+ $this->short_desc = __( 'Email Options', 'woocommerce-jetpack' );
27
+ $this->desc = __( 'WooCommerce email options. E.g.: add another email recipient(s) to all WooCommerce emails.', 'woocommerce-jetpack' );
28
+ $this->link_slug = 'woocommerce-email-options';
29
+ parent::__construct();
30
+
31
+ if ( $this->is_enabled() ) {
32
+ // Email Forwarding
33
+ if ( '' != get_option( 'wcj_emails_bcc_email', '' ) ) {
34
+ add_filter( 'woocommerce_email_headers', array( $this, 'add_bcc_email' ) );
35
+ }
36
+ if ( '' != get_option( 'wcj_emails_cc_email', '' ) ) {
37
+ add_filter( 'woocommerce_email_headers', array( $this, 'add_cc_email' ) );
38
+ }
39
+ // Product Info
40
+ if ( 'yes' === get_option( 'wcj_product_info_in_email_order_item_name_enabled', 'no' ) ) {
41
+ add_filter( 'woocommerce_order_item_name', array( $this, 'add_product_info_to_email_order_item_name' ), PHP_INT_MAX, 2 );
42
+ }
43
+ // Settings
44
+ add_filter( 'woocommerce_email_settings', array( $this, 'add_email_forwarding_fields_to_wc_standard_settings' ), PHP_INT_MAX );
45
+ }
46
+ }
47
+
48
+ /**
49
+ * add_product_info_to_email_order_item_name.
50
+ *
51
+ * @version 2.7.0
52
+ * @since 2.7.0
53
+ */
54
+ function add_product_info_to_email_order_item_name( $item_name, $item ) {
55
+ if ( $item['product_id'] ) {
56
+ global $post;
57
+ $post = get_post( $item['product_id'] );
58
+ setup_postdata( $post );
59
+ $item_name .= do_shortcode( get_option( 'wcj_product_info_in_email_order_item_name', '[wcj_product_categories strip_tags="yes" before="<hr><em>" after="</em>"]' ) );
60
+ wp_reset_postdata();
61
+ }
62
+ return $item_name;
63
+ }
64
+
65
+ /**
66
+ * Add another email recipient to all WooCommerce emails.
67
+ *
68
+ * @version 2.9.1
69
+ */
70
+ function add_bcc_email( $email_headers ) {
71
+ return $email_headers . "Bcc: " . get_option( 'wcj_emails_bcc_email', '' ) . "\r\n";
72
+ }
73
+
74
+ /**
75
+ * Add another email recipient to all WooCommerce emails.
76
+ *
77
+ * @version 2.9.1
78
+ */
79
+ function add_cc_email( $email_headers ) {
80
+ return $email_headers . "Cc: " . get_option( 'wcj_emails_cc_email', '' ) . "\r\n";
81
+ }
82
+
83
+ /**
84
+ * get_emails_forwarding_settings.
85
+ *
86
+ * @version 2.3.9
87
+ * @since 2.3.9
88
+ */
89
+ function get_emails_forwarding_settings( $extended_title = false ) {
90
+ return array(
91
+ array(
92
+ 'title' => ( $extended_title ) ?
93
+ __( 'Booster: Email Forwarding Options', 'woocommerce-jetpack' ) :
94
+ __( 'Email Forwarding Options', 'woocommerce-jetpack' ),
95
+ 'type' => 'title',
96
+ 'desc' => __( 'This section lets you add another email recipient(s) to all WooCommerce emails. Leave blank to disable.', 'woocommerce-jetpack' ),
97
+ 'id' => 'wcj_emails_forwarding_options',
98
+ ),
99
+ array(
100
+ 'title' => __( 'Cc Email', 'woocommerce-jetpack' ),
101
+ 'desc_tip' => __( 'Cc to email, e.g. youremail@yourdomain.com. Leave blank to disable.', 'woocommerce-jetpack' ),
102
+ 'id' => 'wcj_emails_cc_email',
103
+ 'default' => '',
104
+ 'type' => 'text',
105
+ ),
106
+ array(
107
+ 'title' => __( 'Bcc Email', 'woocommerce-jetpack' ),
108
+ 'desc_tip' => __( 'Bcc to email, e.g. youremail@yourdomain.com. Leave blank to disable.', 'woocommerce-jetpack' ),
109
+ 'id' => 'wcj_emails_bcc_email',
110
+ 'default' => '',
111
+ 'type' => 'text',
112
+ ),
113
+ array(
114
+ 'type' => 'sectionend',
115
+ 'id' => 'wcj_emails_forwarding_options',
116
+ ),
117
+ );
118
+ }
119
+
120
+ /**
121
+ * add_email_forwarding_fields_to_wc_standard_settings.
122
+ *
123
+ * @version 2.3.9
124
+ * @todo (maybe) remove this completely (and then move `get_emails_forwarding_settings()` to settings file)
125
+ */
126
+ function add_email_forwarding_fields_to_wc_standard_settings( $settings ) {
127
+ $updated_settings = array();
128
+ foreach ( $settings as $section ) {
129
+ if ( isset( $section['id'] ) && 'email_template_options' == $section['id'] && isset( $section['type'] ) && 'title' == $section['type'] ) {
130
+ $updated_settings = array_merge( $updated_settings, $this->get_emails_forwarding_settings( true ) );
131
+ }
132
+ $updated_settings[] = $section;
133
+ }
134
+ return $updated_settings;
135
+ }
136
+
137
+ }
138
+
139
+ endif;
140
+
141
+ return new WCJ_Email_Options();
includes/class-wcj-emails.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Emails
4
  *
5
- * @version 2.8.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -15,80 +15,33 @@ class WCJ_Emails extends WCJ_Module {
15
  /**
16
  * Constructor.
17
  *
18
- * @version 2.8.0
19
- * @todo meta customizer - check "gravity-forms-emails-woocommerce" plugin
20
  */
21
  function __construct() {
22
 
23
  $this->id = 'emails';
24
- $this->short_desc = __( 'Emails', 'woocommerce-jetpack' );
25
- $this->desc = __( 'Add custom emails. Add another email recipient(s) to all WooCommerce emails.', 'woocommerce-jetpack' );
26
- $this->link_slug = 'woocommerce-emails';
27
  parent::__construct();
28
 
29
  if ( $this->is_enabled() ) {
30
  // Custom Emails
31
- add_filter( 'woocommerce_email_actions', array( $this, 'add_custom_woocommerce_email_actions' ) );
32
- add_filter( 'woocommerce_email_classes', array( $this, 'add_custom_emails_to_wc' ) );
33
  add_filter( 'woocommerce_resend_order_emails_available', array( $this, 'add_custom_emails_to_wc_resend_order_emails' ) );
34
- // Email Forwarding
35
- if ( '' != get_option( 'wcj_emails_bcc_email' ) ) {
36
- add_filter( 'woocommerce_email_headers', array( $this, 'add_bcc_email' ) );
37
- }
38
- if ( '' != get_option( 'wcj_emails_cc_email' ) ) {
39
- add_filter( 'woocommerce_email_headers', array( $this, 'add_cc_email' ) );
40
- }
41
- // Product Info
42
- if ( 'yes' === get_option( 'wcj_product_info_in_email_order_item_name_enabled', 'no' ) ) {
43
- add_filter( 'woocommerce_order_item_name', array( $this, 'add_product_info_to_email_order_item_name' ), PHP_INT_MAX, 2 );
44
- }
45
- // Settings
46
- add_filter( 'woocommerce_email_settings', array( $this, 'add_email_forwarding_fields_to_wc_standard_settings' ), PHP_INT_MAX );
47
- }
48
- }
49
-
50
- /**
51
- * add_product_info_to_email_order_item_name.
52
- *
53
- * @version 2.7.0
54
- * @since 2.7.0
55
- */
56
- function add_product_info_to_email_order_item_name( $item_name, $item ) {
57
- if ( $item['product_id'] ) {
58
- global $post;
59
- $post = get_post( $item['product_id'] );
60
- setup_postdata( $post );
61
- $item_name .= do_shortcode( get_option( 'wcj_product_info_in_email_order_item_name', '[wcj_product_categories strip_tags="yes" before="<hr><em>" after="</em>"]' ) );
62
- wp_reset_postdata();
63
  }
64
- return $item_name;
65
- }
66
-
67
- /**
68
- * get_order_statuses.
69
- *
70
- * @version 2.4.8
71
- * @since 2.4.8
72
- * @todo use global wcj function
73
- */
74
- function get_order_statuses() {
75
- $result = array();
76
- $statuses = function_exists( 'wc_get_order_statuses' ) ? wc_get_order_statuses() : array();
77
- foreach( $statuses as $status => $status_name ) {
78
- $result[ substr( $status, 3 ) ] = $statuses[ $status ];
79
- }
80
- return $result;
81
  }
82
 
83
  /**
84
  * add_custom_woocommerce_email_actions.
85
  *
86
- * @version 2.5.5
87
  * @since 2.4.5
88
  */
89
  function add_custom_woocommerce_email_actions( $email_actions ) {
90
  $email_actions[] = 'woocommerce_checkout_order_processed';
91
- $order_statuses = $this->get_order_statuses();
92
  foreach ( $order_statuses as $slug => $name ) {
93
  $email_actions[] = 'woocommerce_order_status_' . $slug;
94
  foreach ( $order_statuses as $slug2 => $name2 ) {
@@ -129,74 +82,6 @@ class WCJ_Emails extends WCJ_Module {
129
  return $emails;
130
  }
131
 
132
- /**
133
- * Add another email recipient to all WooCommerce emails
134
- */
135
- function add_bcc_email( $email_headers ) {
136
- return $email_headers . "Bcc: " . get_option( 'wcj_emails_bcc_email' ) . "\r\n";
137
- }
138
-
139
- /**
140
- * Add another email recipient to all WooCommerce emails
141
- */
142
- function add_cc_email( $email_headers ) {
143
- return $email_headers . "Cc: " . get_option( 'wcj_emails_cc_email' ) . "\r\n";
144
- }
145
-
146
- /**
147
- * get_emails_forwarding_settings.
148
- *
149
- * @version 2.3.9
150
- * @since 2.3.9
151
- */
152
- function get_emails_forwarding_settings( $extended_title = false ) {
153
- return array(
154
- array(
155
- 'title' => ( $extended_title ) ?
156
- __( 'Booster: Email Forwarding Options', 'woocommerce-jetpack' ) :
157
- __( 'Email Forwarding Options', 'woocommerce-jetpack' ),
158
- 'type' => 'title',
159
- 'desc' => __( 'This section lets you add another email recipient(s) to all WooCommerce emails. Leave blank to disable.', 'woocommerce-jetpack' ),
160
- 'id' => 'wcj_emails_forwarding_options',
161
- ),
162
- array(
163
- 'title' => __( 'Cc Email', 'woocommerce-jetpack' ),
164
- 'desc_tip' => __( 'Cc to email, e.g. youremail@yourdomain.com. Leave blank to disable.', 'woocommerce-jetpack' ),
165
- 'id' => 'wcj_emails_cc_email',
166
- 'default' => '',
167
- 'type' => 'text',
168
- ),
169
- array(
170
- 'title' => __( 'Bcc Email', 'woocommerce-jetpack' ),
171
- 'desc_tip' => __( 'Bcc to email, e.g. youremail@yourdomain.com. Leave blank to disable.', 'woocommerce-jetpack' ),
172
- 'id' => 'wcj_emails_bcc_email',
173
- 'default' => '',
174
- 'type' => 'text',
175
- ),
176
- array(
177
- 'type' => 'sectionend',
178
- 'id' => 'wcj_emails_forwarding_options',
179
- ),
180
- );
181
- }
182
-
183
- /**
184
- * add_email_forwarding_fields_to_wc_standard_settings.
185
- *
186
- * @version 2.3.9
187
- * @todo (maybe) remove this completely (and then move `get_emails_forwarding_settings()` to settings file)
188
- */
189
- function add_email_forwarding_fields_to_wc_standard_settings( $settings ) {
190
- $updated_settings = array();
191
- foreach ( $settings as $section ) {
192
- if ( isset( $section['id'] ) && 'email_template_options' == $section['id'] && isset( $section['type'] ) && 'title' == $section['type'] ) {
193
- $updated_settings = array_merge( $updated_settings, $this->get_emails_forwarding_settings( true ) );
194
- }
195
- $updated_settings[] = $section;
196
- }
197
- return $updated_settings;
198
- }
199
-
200
  }
201
 
202
  endif;
2
  /**
3
  * Booster for WooCommerce - Module - Emails
4
  *
5
+ * @version 2.9.1
6
  * @author Algoritmika Ltd.
7
  */
8
 
15
  /**
16
  * Constructor.
17
  *
18
+ * @version 2.9.1
 
19
  */
20
  function __construct() {
21
 
22
  $this->id = 'emails';
23
+ $this->short_desc = __( 'Custom Emails', 'woocommerce-jetpack' );
24
+ $this->desc = __( 'Add custom emails to WooCommerce.', 'woocommerce-jetpack' );
25
+ $this->link_slug = 'woocommerce-custom-emails';
26
  parent::__construct();
27
 
28
  if ( $this->is_enabled() ) {
29
  // Custom Emails
30
+ add_filter( 'woocommerce_email_actions', array( $this, 'add_custom_woocommerce_email_actions' ) );
31
+ add_filter( 'woocommerce_email_classes', array( $this, 'add_custom_emails_to_wc' ) );
32
  add_filter( 'woocommerce_resend_order_emails_available', array( $this, 'add_custom_emails_to_wc_resend_order_emails' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  }
35
 
36
  /**
37
  * add_custom_woocommerce_email_actions.
38
  *
39
+ * @version 2.9.1
40
  * @since 2.4.5
41
  */
42
  function add_custom_woocommerce_email_actions( $email_actions ) {
43
  $email_actions[] = 'woocommerce_checkout_order_processed';
44
+ $order_statuses = wcj_get_order_statuses_v2();
45
  foreach ( $order_statuses as $slug => $name ) {
46
  $email_actions[] = 'woocommerce_order_status_' . $slug;
47
  foreach ( $order_statuses as $slug2 => $name2 ) {
82
  return $emails;
83
  }
84
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
  }
86
 
87
  endif;
includes/class-wcj-general.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - General
4
  *
5
- * @version 2.9.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -15,7 +15,7 @@ class WCJ_General extends WCJ_Module {
15
  /**
16
  * Constructor.
17
  *
18
- * @version 2.9.0
19
  */
20
  function __construct() {
21
 
@@ -37,6 +37,14 @@ class WCJ_General extends WCJ_Module {
37
  ),
38
  ) );
39
 
 
 
 
 
 
 
 
 
40
  if ( $this->is_enabled() ) {
41
 
42
  // Recalculate cart totals
@@ -67,17 +75,350 @@ class WCJ_General extends WCJ_Module {
67
  add_filter( 'wc_session_expiration', array( $this, 'change_session_expiration' ), PHP_INT_MAX );
68
  }
69
 
70
- // URL Coupons
71
- if ( 'yes' === get_option( 'wcj_url_coupons_enabled', 'no' ) ) {
72
- add_action( 'wp_loaded', array( $this, 'maybe_apply_url_coupon' ), PHP_INT_MAX );
73
- }
74
-
75
  // Booster role user changer
76
  if ( wcj_is_booster_role_changer_enabled() ) {
77
  add_action( 'admin_bar_menu', array( $this, 'add_user_role_changer' ), PHP_INT_MAX );
78
  add_action( 'init', array( $this, 'change_user_role_meta' ) );
79
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
  }
82
 
83
  /**
@@ -142,25 +483,6 @@ class WCJ_General extends WCJ_Module {
142
  }
143
  }
144
 
145
- /**
146
- * maybe_apply_url_coupon.
147
- *
148
- * @version 2.7.0
149
- * @since 2.7.0
150
- * @todo (maybe) predefined $arg_key
151
- * @todo (maybe) additional $_GET['coupon_code']
152
- * @todo (maybe) if ( ! WC()->cart->has_discount( $coupon_code ) ) {}
153
- */
154
- function maybe_apply_url_coupon() {
155
- $arg_key = get_option( 'wcj_url_coupons_key', 'wcj_apply_coupon' );
156
- if ( isset( $_GET[ $arg_key ] ) && '' != $_GET[ $arg_key ] ) {
157
- $coupon_code = sanitize_text_field( $_GET[ $arg_key ] );
158
- WC()->cart->add_discount( $coupon_code );
159
- wp_safe_redirect( remove_query_arg( $arg_key ) );
160
- exit;
161
- }
162
- }
163
-
164
  /**
165
  * change_session_expiring.
166
  *
2
  /**
3
  * Booster for WooCommerce - Module - General
4
  *
5
+ * @version 2.9.1
6
  * @author Algoritmika Ltd.
7
  */
8
 
15
  /**
16
  * Constructor.
17
  *
18
+ * @version 2.9.1
19
  */
20
  function __construct() {
21
 
37
  ),
38
  ) );
39
 
40
+ // By country scopes
41
+ $this->track_users_scopes = array(
42
+ '1' => __( 'Last 24 hours', 'woocommerce-jetpack' ),
43
+ '7' => __( 'Last 7 days', 'woocommerce-jetpack' ),
44
+ '28' => __( 'Last 28 days', 'woocommerce-jetpack' ),
45
+ 'all_time' => __( 'All time', 'woocommerce-jetpack' ),
46
+ );
47
+
48
  if ( $this->is_enabled() ) {
49
 
50
  // Recalculate cart totals
75
  add_filter( 'wc_session_expiration', array( $this, 'change_session_expiration' ), PHP_INT_MAX );
76
  }
77
 
 
 
 
 
 
78
  // Booster role user changer
79
  if ( wcj_is_booster_role_changer_enabled() ) {
80
  add_action( 'admin_bar_menu', array( $this, 'add_user_role_changer' ), PHP_INT_MAX );
81
  add_action( 'init', array( $this, 'change_user_role_meta' ) );
82
  }
83
+
84
+ // Track users
85
+ if ( 'yes' === get_option( 'wcj_track_users_enabled', 'no' ) ) {
86
+ // User tracking
87
+ add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_track_users_script' ) );
88
+ add_action( 'wp_ajax_' . 'wcj_track_users', array( $this, 'track_users' ) );
89
+ add_action( 'wp_ajax_nopriv_' . 'wcj_track_users', array( $this, 'track_users' ) );
90
+ // Stats in dashboard widgets
91
+ if ( 'yes' === get_option( 'wcj_track_users_by_country_widget_enabled', 'yes' ) ) {
92
+ add_action( 'wp_dashboard_setup', array( $this, 'add_track_users_dashboard_widgets' ) );
93
+ add_action( 'admin_init', array( $this, 'maybe_delete_track_users_stats' ) );
94
+ add_action( 'admin_init', array( $this, 'track_users_update_county_stats' ) );
95
+ }
96
+ // Order tracking
97
+ if ( 'yes' === apply_filters( 'booster_get_option', 'no', get_option( 'wcj_track_users_save_order_http_referer_enabled', 'no' ) ) ) {
98
+ add_action( 'woocommerce_new_order', array( $this, 'add_http_referer_to_order' ) );
99
+ add_action( 'add_meta_boxes', array( $this, 'add_http_referer_order_meta_box' ) );
100
+ }
101
+ // Cron
102
+ add_action( 'init', array( $this, 'track_users_schedule_the_event' ) );
103
+ add_action( 'admin_init', array( $this, 'track_users_schedule_the_event' ) );
104
+ add_action( 'wcj_track_users_generate_stats', array( $this, 'track_users_generate_stats_cron' ) );
105
+ }
106
+ }
107
+ }
108
+
109
+ /**
110
+ * track_users_update_county_stats.
111
+ *
112
+ * @version 2.9.1
113
+ * @since 2.9.1
114
+ * @todo (maybe) `wp_nonce`
115
+ */
116
+ function track_users_update_county_stats() {
117
+ if ( isset( $_GET['wcj_track_users_update_county_stats'] ) ) {
118
+ $this->track_users_generate_stats_cron();
119
+ wp_safe_redirect( remove_query_arg( 'wcj_track_users_update_county_stats' ) );
120
+ exit;
121
+ }
122
+ }
123
+
124
+ /**
125
+ * track_users_schedule_the_event.
126
+ *
127
+ * @version 2.9.1
128
+ * @since 2.9.1
129
+ * @todo (maybe) customizable interval
130
+ * @todo (maybe) separate events for all time, last 28 days, last 7 days, last 24 hours
131
+ */
132
+ function track_users_schedule_the_event() {
133
+ $event_timestamp = wp_next_scheduled( 'wcj_track_users_generate_stats', array( 'hourly' ) );
134
+ update_option( 'wcj_track_users_cron_time_schedule', $event_timestamp );
135
+ if ( ! $event_timestamp ) {
136
+ wp_schedule_event( time(), 'hourly', 'wcj_track_users_generate_stats', array( 'hourly' ) );
137
+ }
138
+ }
139
+
140
+ /**
141
+ * track_users_generate_stats_cron.
142
+ *
143
+ * @version 2.9.1
144
+ * @since 2.9.1
145
+ */
146
+ function track_users_generate_stats_cron( $interval ) {
147
+ update_option( 'wcj_track_users_cron_time_last_run', time() );
148
+ $stats = get_option( 'wcj_track_users_stats_by_country', array() );
149
+ foreach ( $this->track_users_scopes as $scope => $scope_title ) {
150
+ $stats[ $scope ] = $this->generate_track_users_stats_by_country( $scope );
151
+ }
152
+ update_option( 'wcj_track_users_stats_by_country', $stats );
153
+ }
154
+
155
+ /**
156
+ * add_http_referer_order_meta_box.
157
+ *
158
+ * @version 2.9.1
159
+ * @since 2.9.1
160
+ */
161
+ function add_http_referer_order_meta_box() {
162
+ add_meta_box(
163
+ 'wc-jetpack-' . $this->id,
164
+ __( 'Booster', 'woocommerce-jetpack' ) . ': ' . __( 'Acquisition Source', 'woocommerce-jetpack' ),
165
+ array( $this, 'create_http_referer_order_meta_box' ),
166
+ 'shop_order',
167
+ 'side',
168
+ 'low'
169
+ );
170
+ }
171
+
172
+ /**
173
+ * get_referer_type.
174
+ *
175
+ * @version 2.9.1
176
+ * @since 2.9.1
177
+ * @todo this is not finished!
178
+ */
179
+ function get_referer_type( $http_referer ) {
180
+ if ( '' != $http_referer && 'N/A' != $http_referer ) {
181
+ if ( ( $http_referer_info = parse_url( $http_referer ) ) && isset( $http_referer_info['host'] ) ) {
182
+ if ( false !== stripos( $http_referer_info['host'], 'google.' ) ) {
183
+ return 'Google';
184
+ } elseif ( false !== stripos( $http_referer_info['host'], 'wordpress.' ) ) {
185
+ return 'WordPress';
186
+ } elseif ( false !== stripos( $http_referer_info['host'], 'facebook.' ) ) {
187
+ return 'Facebook';
188
+ } else {
189
+ return __( 'Other', 'woocommerce-jetpack' );
190
+ }
191
+ }
192
+ }
193
+ return 'N/A';
194
+ }
195
+
196
+ /**
197
+ * create_http_referer_order_meta_box.
198
+ *
199
+ * @version 2.9.1
200
+ * @since 2.9.1
201
+ */
202
+ function create_http_referer_order_meta_box() {
203
+ if ( '' == ( $http_referer = get_post_meta( get_the_ID(), '_wcj_track_users_http_referer', true ) ) ) {
204
+ $http_referer = 'N/A';
205
+ }
206
+ echo '<p>' . __( 'URL:', 'woocommerce-jetpack' ) . ' ' . $http_referer . '</p>';
207
+ echo '<p>' . __( 'Type:', 'woocommerce-jetpack' ) . ' ' . $this->get_referer_type( $http_referer ) . '</p>';
208
+ }
209
+
210
+ /**
211
+ * add_http_referer_to_order.
212
+ *
213
+ * @version 2.9.1
214
+ * @since 2.9.1
215
+ * @todo add "all orders by referer type" stats
216
+ */
217
+ function add_http_referer_to_order( $order_id ) {
218
+ global $wpdb;
219
+ $table_name = $wpdb->prefix . 'wcj_track_users';
220
+ $http_referer = 'N/A';
221
+ if ( $wpdb->get_var( "SHOW TABLES LIKE '$table_name'" ) === $table_name ) {
222
+ $user_ip = ( class_exists( 'WC_Geolocation' ) ? WC_Geolocation::get_ip_address() : wcj_get_the_ip() );
223
+ $result = $wpdb->get_row( "SELECT * FROM $table_name WHERE ip = '$user_ip' ORDER BY time DESC" );
224
+ if ( $result ) {
225
+ $http_referer = $result->referer;
226
+ }
227
+ }
228
+ update_post_meta( $order_id, '_wcj_track_users_http_referer', $http_referer );
229
+ }
230
+
231
+ /**
232
+ * maybe_delete_track_users_stats.
233
+ *
234
+ * @version 2.9.1
235
+ * @since 2.9.1
236
+ * @todo (maybe) wp_nonce
237
+ */
238
+ function maybe_delete_track_users_stats() {
239
+ if ( isset( $_GET['wcj_delete_track_users_stats'] ) /* && is_super_admin() */ ) {
240
+ global $wpdb;
241
+ $table_name = $wpdb->prefix . 'wcj_track_users';
242
+ $sql = "DROP TABLE IF EXISTS $table_name";
243
+ $wpdb->query( $sql );
244
+ delete_option( 'wcj_track_users_stats_by_country' );
245
+ delete_option( 'wcj_track_users_cron_time_last_run' );
246
+ wp_safe_redirect( remove_query_arg( 'wcj_delete_track_users_stats' ) );
247
+ exit;
248
+ }
249
+ }
250
+
251
+ /**
252
+ * Add a widgets to the dashboard.
253
+ *
254
+ * @version 2.9.1
255
+ * @since 2.9.1
256
+ */
257
+ function add_track_users_dashboard_widgets() {
258
+ wp_add_dashboard_widget(
259
+ 'wcj_track_users_dashboard_widget',
260
+ __( 'Booster', 'woocommerce-jetpack' ) . ': ' . sprintf( __( 'Top %d countries by visits', 'woocommerce-jetpack' ),
261
+ get_option( 'wcj_track_users_by_country_widget_top_count', 10 ) ),
262
+ array( $this, 'track_users_by_country_dashboard_widget' )
263
+ );
264
+ }
265
+
266
+ /**
267
+ * get_saved_track_users_stats_by_country.
268
+ *
269
+ * @version 2.9.1
270
+ * @since 2.9.1
271
+ */
272
+ function get_saved_track_users_stats_by_country( $scope ) {
273
+ $stats = get_option( 'wcj_track_users_stats_by_country', array() );
274
+ return ( isset( $stats[ $scope ] ) ? $stats[ $scope ] : array() );
275
+ }
276
+
277
+ /**
278
+ * generate_track_users_stats_by_country.
279
+ *
280
+ * @version 2.9.1
281
+ * @since 2.9.1
282
+ */
283
+ function generate_track_users_stats_by_country( $scope ) {
284
+ global $wpdb;
285
+ $table_name = $wpdb->prefix . 'wcj_track_users';
286
+ switch ( $scope ) {
287
+ case 'all_time':
288
+ $select_query = "SELECT * FROM $table_name";
289
+ break;
290
+ default: // '28', '7', '1'
291
+ $time_expired = date( 'Y-m-d H:i:s', ( current_time( 'timestamp' ) - $scope * 24 * 60 * 60 ) );
292
+ $select_query = "SELECT * FROM $table_name WHERE time > '" . $time_expired . "'";
293
+ break;
294
+ }
295
+ $totals = array();
296
+ if ( $wpdb->get_var( "SHOW TABLES LIKE '$table_name'" ) === $table_name && ( $results = $wpdb->get_results( $select_query ) ) ) {
297
+ foreach ( $results as $result ) {
298
+ if ( ! isset( $totals[ $result->country ] ) ) {
299
+ $totals[ $result->country ] = 1;
300
+ } else {
301
+ $totals[ $result->country ]++;
302
+ }
303
+ }
304
+ arsort( $totals );
305
  }
306
+ return $totals;
307
+ }
308
+
309
+ /**
310
+ * track_users_by_country_dashboard_widget.
311
+ *
312
+ * @version 2.9.1
313
+ * @since 2.9.1
314
+ * @todo (maybe) display all info (IP, referer etc.) on country click
315
+ * @todo (maybe) display stats by day and/or month
316
+ * @todo (maybe) display stats by state
317
+ */
318
+ function track_users_by_country_dashboard_widget( $post, $args ) {
319
+ $top_count = get_option( 'wcj_track_users_by_country_widget_top_count', 10 );
320
+ foreach ( $this->track_users_scopes as $scope => $scope_title ) {
321
+ if ( ! in_array( $scope, get_option( 'wcj_track_users_by_country_widget_scopes', array( '1', '28' ) ) ) ) {
322
+ continue;
323
+ }
324
+ $totals = $this->get_saved_track_users_stats_by_country( $scope );
325
+ if ( ! empty( $totals ) ) {
326
+ $totals = array_slice( $totals, 0, $top_count );
327
+ $table_data = array();
328
+ $table_data[] = array( '', __( 'Country', 'woocommerce-jetpack' ), __( 'Visits', 'woocommerce-jetpack' ) );
329
+ $i = 0;
330
+ foreach ( $totals as $country_code => $visits ) {
331
+ $i++;
332
+ $country_info = ( '' != $country_code ? wcj_get_country_flag_by_code( $country_code ) . ' ' . wcj_get_country_name_by_code( $country_code ) : 'N/A' );
333
+ $table_data[] = array( $i, $country_info, $visits );
334
+ }
335
+ echo '<strong>' . $scope_title . '</strong>';
336
+ echo wcj_get_table_html( $table_data, array( 'table_class' => 'widefat striped', 'table_heading_type' => 'horizontal' ) );
337
+ } else {
338
+ echo '<p>' . '<em>' . __( 'No stats yet.', 'woocommerce-jetpack' ) . '</em>' . '</p>';
339
+ }
340
+ }
341
+ echo '<p>' .
342
+ '<a class="button-primary" href="' . add_query_arg( 'wcj_delete_track_users_stats', '1' ) . '" ' .
343
+ 'onclick="return confirm(\'' . __( 'Are you sure?', 'woocommerce-jetpack' ) . '\')"' .
344
+ '>' . __( 'Delete all tracking data', 'woocommerce-jetpack' ) . '</a>' .
345
+ '</p>';
346
+ $cron_last_run = ( '' != ( $_time = get_option( 'wcj_track_users_cron_time_last_run', '' ) ) ? date( 'Y-m-d H:i:s', $_time ) : '-' );
347
+ $cron_next_schedule = ( '' != ( $_time = get_option( 'wcj_track_users_cron_time_schedule', '' ) ) ? date( 'Y-m-d H:i:s', $_time ) : '-' );
348
+ echo '<p>' .
349
+ sprintf( __( 'Stats generated at %s. Next update is scheduled at %s.', 'woocommerce-jetpack' ), $cron_last_run, $cron_next_schedule ) . ' ' .
350
+ '<a href="' . add_query_arg( 'wcj_track_users_update_county_stats', '1' ) . '">' . __( 'Update now', 'woocommerce-jetpack' ) . '</a>.' .
351
+ '</p>';
352
+ }
353
+
354
+ /**
355
+ * enqueue_track_users_script.
356
+ *
357
+ * @version 2.9.1
358
+ * @since 2.9.1
359
+ */
360
+ function enqueue_track_users_script() {
361
+ wp_enqueue_script( 'wcj-track-users', trailingslashit( wcj_plugin_url() ) . 'includes/js/wcj-track-users.js', array( 'jquery' ), WCJ()->version, true );
362
+ wp_localize_script( 'wcj-track-users', 'track_users_ajax_object', array(
363
+ 'ajax_url' => admin_url( 'admin-ajax.php' ),
364
+ 'http_referer' => ( isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : 'N/A' ),
365
+ 'user_ip' => ( class_exists( 'WC_Geolocation' ) ? WC_Geolocation::get_ip_address() : wcj_get_the_ip() ),
366
+ ) );
367
+ }
368
+
369
+ /**
370
+ * track_users.
371
+ *
372
+ * @version 2.9.1
373
+ * @since 2.9.1
374
+ * @todo (maybe) customizable `$time_expired`
375
+ * @todo (maybe) optionally do not track selected user roles (e.g. admin)
376
+ */
377
+ function track_users() {
378
+ if ( ! isset( $_POST['wcj_user_ip'] ) ) {
379
+ die();
380
+ }
381
+ $user_ip = $_POST['wcj_user_ip'];
382
+ global $wpdb;
383
+ $table_name = $wpdb->prefix . 'wcj_track_users';
384
+ if ( $wpdb->get_var( "SHOW TABLES LIKE '$table_name'" ) != $table_name ) {
385
+ // Create DB table
386
+ $charset_collate = $wpdb->get_charset_collate();
387
+ $sql = "CREATE TABLE $table_name (
388
+ id int NOT NULL AUTO_INCREMENT,
389
+ time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
390
+ country tinytext NOT NULL,
391
+ state tinytext NOT NULL,
392
+ ip text NOT NULL,
393
+ referer text NOT NULL,
394
+ PRIMARY KEY (id)
395
+ ) $charset_collate;";
396
+ require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
397
+ dbDelta( $sql );
398
+ } else {
399
+ // Check if already tracked recently
400
+ $time_expired = date( 'Y-m-d H:i:s', strtotime( '-1 day', current_time( 'timestamp' ) ) );
401
+ $result = $wpdb->get_row( "SELECT * FROM $table_name WHERE ip = '$user_ip' AND time > '$time_expired'" );
402
+ if ( $result ) {
403
+ return;
404
+ }
405
+ }
406
+ // Country by IP
407
+ $location = ( class_exists( 'WC_Geolocation' ) ? WC_Geolocation::geolocate_ip( $user_ip ) : array( 'country' => '', 'state' => '' ) );
408
+ // HTTP referrer
409
+ $http_referer = ( isset( $_POST['wcj_http_referer'] ) ? $_POST['wcj_http_referer'] : 'N/A' );
410
+ // Add row to DB table
411
+ $wpdb->insert(
412
+ $table_name,
413
+ array(
414
+ 'time' => current_time( 'mysql' ),
415
+ 'country' => $location['country'],
416
+ 'state' => $location['state'],
417
+ 'ip' => $user_ip,
418
+ 'referer' => $http_referer,
419
+ )
420
+ );
421
+ die();
422
  }
423
 
424
  /**
483
  }
484
  }
485
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
486
  /**
487
  * change_session_expiring.
488
  *
includes/class-wcj-product-by-date.php ADDED
@@ -0,0 +1,152 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Booster for WooCommerce - Module - Product Availability by Date
4
+ *
5
+ * @version 2.9.1
6
+ * @since 2.9.1
7
+ * @author Algoritmika Ltd.
8
+ */
9
+
10
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
11
+
12
+ if ( ! class_exists( 'WCJ_Product_By_Date' ) ) :
13
+
14
+ class WCJ_Product_By_Date extends WCJ_Module {
15
+
16
+ /**
17
+ * Constructor.
18
+ *
19
+ * @version 2.9.1
20
+ * @since 2.9.1
21
+ * @todo per category
22
+ * @todo per tag
23
+ * @todo (maybe) per products sets
24
+ * @todo redirect to custom URL when product is not available
25
+ */
26
+ function __construct() {
27
+
28
+ $this->id = 'product_by_date';
29
+ $this->short_desc = __( 'Product Availability by Date', 'woocommerce-jetpack' );
30
+ $this->desc = __( 'WooCommerce product availability by date.', 'woocommerce-jetpack' );
31
+ $this->link_slug = 'woocommerce-product-availability-by-date';
32
+ parent::__construct();
33
+
34
+ $this->time_now = current_time( 'timestamp' );
35
+
36
+ if ( $this->is_enabled() ) {
37
+ // Per product meta box
38
+ if ( 'yes' === get_option( 'wcj_product_by_date_per_product_enabled', 'no' ) ) {
39
+ add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
40
+ add_action( 'save_post_product', array( $this, 'save_meta_box' ), PHP_INT_MAX, 2 );
41
+ add_filter( 'wcj_save_meta_box_value', array( $this, 'save_meta_box_validate_value' ), PHP_INT_MAX, 3 );
42
+ add_action( 'admin_notices', array( $this, 'validate_value_admin_notices' ) );
43
+ $this->meta_box_validate_value = 'wcj_product_by_date_enabled';
44
+ }
45
+ if ( 'yes' === get_option( 'wcj_product_by_date_per_product_enabled', 'no' ) || 'yes' === get_option( 'wcj_product_by_date_section_enabled', 'no' ) ) {
46
+ // Time now
47
+ $this->day_now = intval( date( 'j', $this->time_now ) ); // Day of the month without leading zeros: 1 to 31
48
+ $this->month_now = intval( date( 'n', $this->time_now ) ); // Numeric representation of a month, without leading zeros: 1 through 12
49
+ // Filters
50
+ add_filter( 'woocommerce_is_purchasable', array( $this, 'check_is_purchasable_by_date' ), PHP_INT_MAX, 2 );
51
+ add_action( 'woocommerce_single_product_summary', array( $this, 'maybe_add_unavailable_by_date_message' ), 30 );
52
+ }
53
+ }
54
+ }
55
+
56
+ /**
57
+ * get_default_date.
58
+ *
59
+ * @version 2.9.1
60
+ * @version 2.9.1
61
+ */
62
+ function get_default_date( $i ) {
63
+ $date_defaults = array(
64
+ '1-31',
65
+ '1-29',
66
+ '1-31',
67
+ '1-30',
68
+ '1-31',
69
+ '-',
70
+ '-',
71
+ '-',
72
+ '10-30',
73
+ '1-31',
74
+ '1-30',
75
+ '1-20,26-31',
76
+ );
77
+ return $date_defaults[ $i - 1 ];
78
+ }
79
+
80
+ /**
81
+ * maybe_add_unavailable_by_date_message.
82
+ *
83
+ * @version 2.9.1
84
+ * @version 2.9.1
85
+ */
86
+ function maybe_add_unavailable_by_date_message() {
87
+ $_product = wc_get_product();
88
+ if ( ! $this->check_is_purchasable_by_date( true, $_product ) ) {
89
+ $_date = $this->get_product_availability_this_month( $_product );
90
+ $replaceable_values = array(
91
+ '%date_this_month%' => $_date,
92
+ '%product_title%' => $_product->get_title(),
93
+ );
94
+ $message = ( ( '-' === $_date ) ?
95
+ apply_filters( 'booster_get_option', __( '<p style="color:red;">%product_title% is not available this month.</p>', 'woocommerce-jetpack' ),
96
+ get_option( 'wcj_product_by_date_unavailable_message_month_off',
97
+ __( '<p style="color:red;">%product_title% is not available this month.</p>', 'woocommerce-jetpack' ) ) ) :
98
+ apply_filters( 'booster_get_option', __( '<p style="color:red;">%product_title% is available only on %date_this_month% this month.</p>', 'woocommerce-jetpack' ),
99
+ get_option( 'wcj_product_by_date_unavailable_message',
100
+ __( '<p style="color:red;">%product_title% is available only on %date_this_month% this month.</p>', 'woocommerce-jetpack' ) ) )
101
+ );
102
+ echo str_replace(
103
+ array_keys( $replaceable_values ),
104
+ array_values( $replaceable_values ),
105
+ do_shortcode( $message )
106
+ );
107
+ }
108
+ }
109
+
110
+ /**
111
+ * get_product_availability_this_month.
112
+ *
113
+ * @version 2.9.1
114
+ * @version 2.9.1
115
+ */
116
+ function get_product_availability_this_month( $_product ) {
117
+ $product_id = wcj_get_product_id_or_variation_parent_id( $_product );
118
+ if ( 'yes' === get_option( 'wcj_product_by_date_per_product_enabled', 'no' ) && 'yes' === get_post_meta( $product_id, '_' . 'wcj_product_by_date_enabled', true ) ) {
119
+ return get_post_meta( $product_id, '_' . 'wcj_product_by_date_' . $this->month_now, true );
120
+ } elseif ( 'yes' === get_option( 'wcj_product_by_date_section_enabled', 'no' ) ) {
121
+ return get_option( 'wcj_product_by_date_' . $this->month_now, $this->get_default_date( $this->month_now ) );
122
+ } else {
123
+ return '';
124
+ }
125
+ }
126
+
127
+ /**
128
+ * check_is_purchasable_by_date.
129
+ *
130
+ * @version 2.9.1
131
+ * @version 2.9.1
132
+ * @todo validate `wcj_product_by_date_` option before checking (or even better earlier, when option is saved by admin)
133
+ */
134
+ function check_is_purchasable_by_date( $purchasable, $_product ) {
135
+ if ( $purchasable ) {
136
+ $_date = $this->get_product_availability_this_month( $_product );
137
+ if ( '-' === $_date ) {
138
+ return false;
139
+ } elseif ( '' == $_date ) {
140
+ return true;
141
+ } else {
142
+ return wcj_check_date( $_date, array( 'day_now' => $this->day_now ) );
143
+ }
144
+ }
145
+ return $purchasable;
146
+ }
147
+
148
+ }
149
+
150
+ endif;
151
+
152
+ return new WCJ_Product_By_Date();
includes/class-wcj-product-by-time.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Product Availability by Time
4
  *
5
- * @version 2.8.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -16,12 +16,11 @@ class WCJ_Product_By_Time extends WCJ_Module {
16
  /**
17
  * Constructor.
18
  *
19
- * @version 2.8.0
20
  * @since 2.8.0
21
- * @todo per product
22
  * @todo per category
23
  * @todo per tag
24
- * @todo by date (i.e. not time)
25
  * @todo redirect to custom URL when product is not available
26
  */
27
  function __construct() {
@@ -35,10 +34,20 @@ class WCJ_Product_By_Time extends WCJ_Module {
35
  $this->time_now = current_time( 'timestamp' );
36
 
37
  if ( $this->is_enabled() ) {
38
- if ( 'yes' === get_option( 'wcj_product_by_time_section_enabled', 'no' ) ) {
 
 
 
 
 
 
 
 
 
39
  $this->day_of_week_now = intval( date( 'w', $this->time_now ) );
40
  $this->hours_now = intval( date( 'H', $this->time_now ) );
41
  $this->minutes_now = intval( date( 'i', $this->time_now ) );
 
42
  add_filter( 'woocommerce_is_purchasable', array( $this, 'check_is_purchasable_by_time' ), PHP_INT_MAX, 2 );
43
  add_action( 'woocommerce_single_product_summary', array( $this, 'maybe_add_unavailable_by_time_message' ), 30 );
44
  }
@@ -67,13 +76,13 @@ class WCJ_Product_By_Time extends WCJ_Module {
67
  /**
68
  * maybe_add_unavailable_by_time_message.
69
  *
70
- * @version 2.8.0
71
  * @version 2.8.0
72
  */
73
  function maybe_add_unavailable_by_time_message() {
74
- if ( ! $this->check_is_purchasable_by_time( true, null ) ) {
75
- $_time = get_option( 'wcj_product_by_time_' . $this->day_of_week_now, $this->get_default_time( $this->day_of_week_now ) );
76
- $_product = wc_get_product();
77
  $replaceable_values = array(
78
  '%time_today%' => $_time,
79
  '%product_title%' => $_product->get_title(),
@@ -94,20 +103,40 @@ class WCJ_Product_By_Time extends WCJ_Module {
94
  }
95
  }
96
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
  /**
98
  * check_is_purchasable_by_time.
99
  *
100
- * @version 2.8.0
101
  * @version 2.8.0
102
  * @todo validate `wcj_product_by_time_` option before checking (or even better earlier, when option is saved by admin)
103
  */
104
  function check_is_purchasable_by_time( $purchasable, $_product ) {
105
  if ( $purchasable ) {
106
- $_time = get_option( 'wcj_product_by_time_' . $this->day_of_week_now, $this->get_default_time( $this->day_of_week_now ) );
107
  if ( '-' === $_time ) {
108
  return false;
 
 
 
 
109
  }
110
- return wcj_check_time( $_time, array( 'hours_now' => $this->hours_now, 'minutes_now' => $this->minutes_now ) );
111
  }
112
  return $purchasable;
113
  }
2
  /**
3
  * Booster for WooCommerce - Module - Product Availability by Time
4
  *
5
+ * @version 2.9.1
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
16
  /**
17
  * Constructor.
18
  *
19
+ * @version 2.9.1
20
  * @since 2.8.0
 
21
  * @todo per category
22
  * @todo per tag
23
+ * @todo (maybe) per products sets
24
  * @todo redirect to custom URL when product is not available
25
  */
26
  function __construct() {
34
  $this->time_now = current_time( 'timestamp' );
35
 
36
  if ( $this->is_enabled() ) {
37
+ // Per product meta box
38
+ if ( 'yes' === get_option( 'wcj_product_by_time_per_product_enabled', 'no' ) ) {
39
+ add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
40
+ add_action( 'save_post_product', array( $this, 'save_meta_box' ), PHP_INT_MAX, 2 );
41
+ add_filter( 'wcj_save_meta_box_value', array( $this, 'save_meta_box_validate_value' ), PHP_INT_MAX, 3 );
42
+ add_action( 'admin_notices', array( $this, 'validate_value_admin_notices' ) );
43
+ $this->meta_box_validate_value = 'wcj_product_by_time_enabled';
44
+ }
45
+ if ( 'yes' === get_option( 'wcj_product_by_time_per_product_enabled', 'no' ) || 'yes' === get_option( 'wcj_product_by_time_section_enabled', 'no' ) ) {
46
+ // Time now
47
  $this->day_of_week_now = intval( date( 'w', $this->time_now ) );
48
  $this->hours_now = intval( date( 'H', $this->time_now ) );
49
  $this->minutes_now = intval( date( 'i', $this->time_now ) );
50
+ // Filters
51
  add_filter( 'woocommerce_is_purchasable', array( $this, 'check_is_purchasable_by_time' ), PHP_INT_MAX, 2 );
52
  add_action( 'woocommerce_single_product_summary', array( $this, 'maybe_add_unavailable_by_time_message' ), 30 );
53
  }
76
  /**
77
  * maybe_add_unavailable_by_time_message.
78
  *
79
+ * @version 2.9.1
80
  * @version 2.8.0
81
  */
82
  function maybe_add_unavailable_by_time_message() {
83
+ $_product = wc_get_product();
84
+ if ( ! $this->check_is_purchasable_by_time( true, $_product ) ) {
85
+ $_time = $this->get_product_availability_this_day( $_product );
86
  $replaceable_values = array(
87
  '%time_today%' => $_time,
88
  '%product_title%' => $_product->get_title(),
103
  }
104
  }
105
 
106
+ /**
107
+ * get_product_availability_this_day.
108
+ *
109
+ * @version 2.9.1
110
+ * @version 2.9.1
111
+ */
112
+ function get_product_availability_this_day( $_product ) {
113
+ $product_id = wcj_get_product_id_or_variation_parent_id( $_product );
114
+ if ( 'yes' === get_option( 'wcj_product_by_time_per_product_enabled', 'no' ) && 'yes' === get_post_meta( $product_id, '_' . 'wcj_product_by_time_enabled', true ) ) {
115
+ return get_post_meta( $product_id, '_' . 'wcj_product_by_time_' . $this->day_of_week_now, true );
116
+ } elseif ( 'yes' === get_option( 'wcj_product_by_time_section_enabled', 'no' ) ) {
117
+ return get_option( 'wcj_product_by_time_' . $this->day_of_week_now, $this->get_default_time( $this->day_of_week_now ) );
118
+ } else {
119
+ return '';
120
+ }
121
+ }
122
+
123
  /**
124
  * check_is_purchasable_by_time.
125
  *
126
+ * @version 2.9.1
127
  * @version 2.8.0
128
  * @todo validate `wcj_product_by_time_` option before checking (or even better earlier, when option is saved by admin)
129
  */
130
  function check_is_purchasable_by_time( $purchasable, $_product ) {
131
  if ( $purchasable ) {
132
+ $_time = $this->get_product_availability_this_day( $_product );
133
  if ( '-' === $_time ) {
134
  return false;
135
+ } elseif ( '' == $_time ) {
136
+ return true;
137
+ } else {
138
+ return wcj_check_time( $_time, array( 'hours_now' => $this->hours_now, 'minutes_now' => $this->minutes_now ) );
139
  }
 
140
  }
141
  return $purchasable;
142
  }
includes/class-wcj-product-custom-info.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Product Info
4
  *
5
- * @version 2.9.0
6
  * @since 2.4.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -71,7 +71,7 @@ class WCJ_Product_Custom_info extends WCJ_Module {
71
  /**
72
  * check_included_and_excluded.
73
  *
74
- * @version 2.9.0
75
  * @since 2.9.0
76
  */
77
  function check_included_and_excluded( $product_id, $single_or_archive, $i ) {
@@ -79,8 +79,8 @@ class WCJ_Product_Custom_info extends WCJ_Module {
79
  $product_cats_to_exclude = get_option( 'wcj_product_custom_info_product_cats_to_exclude_' . $single_or_archive . '_' . $i );
80
  $product_tags_to_include = get_option( 'wcj_product_custom_info_product_tags_to_include_' . $single_or_archive . '_' . $i );
81
  $product_tags_to_exclude = get_option( 'wcj_product_custom_info_product_tags_to_exclude_' . $single_or_archive . '_' . $i );
82
- $products_to_exclude = get_option( 'wcj_product_custom_info_products_to_exclude_' . $single_or_archive . '_' . $i );
83
- $products_to_include = get_option( 'wcj_product_custom_info_products_to_include_' . $single_or_archive . '_' . $i );
84
  return (
85
  ( empty( $product_cats_to_exclude ) || ! wcj_is_product_term( $product_id, $product_cats_to_exclude, 'product_cat' ) ) &&
86
  ( empty( $product_cats_to_include ) || wcj_is_product_term( $product_id, $product_cats_to_include, 'product_cat' ) ) &&
2
  /**
3
  * Booster for WooCommerce - Module - Product Info
4
  *
5
+ * @version 2.9.1
6
  * @since 2.4.0
7
  * @author Algoritmika Ltd.
8
  */
71
  /**
72
  * check_included_and_excluded.
73
  *
74
+ * @version 2.9.1
75
  * @since 2.9.0
76
  */
77
  function check_included_and_excluded( $product_id, $single_or_archive, $i ) {
79
  $product_cats_to_exclude = get_option( 'wcj_product_custom_info_product_cats_to_exclude_' . $single_or_archive . '_' . $i );
80
  $product_tags_to_include = get_option( 'wcj_product_custom_info_product_tags_to_include_' . $single_or_archive . '_' . $i );
81
  $product_tags_to_exclude = get_option( 'wcj_product_custom_info_product_tags_to_exclude_' . $single_or_archive . '_' . $i );
82
+ $products_to_exclude = wcj_maybe_convert_string_to_array( get_option( 'wcj_product_custom_info_products_to_exclude_' . $single_or_archive . '_' . $i ) );
83
+ $products_to_include = wcj_maybe_convert_string_to_array( get_option( 'wcj_product_custom_info_products_to_include_' . $single_or_archive . '_' . $i ) );
84
  return (
85
  ( empty( $product_cats_to_exclude ) || ! wcj_is_product_term( $product_id, $product_cats_to_exclude, 'product_cat' ) ) &&
86
  ( empty( $product_cats_to_include ) || wcj_is_product_term( $product_id, $product_cats_to_include, 'product_cat' ) ) &&
includes/class-wcj-product-images.php CHANGED
@@ -17,6 +17,7 @@ class WCJ_Product_Images extends WCJ_Module {
17
  * Constructor.
18
  *
19
  * @version 2.8.0
 
20
  */
21
  function __construct() {
22
 
17
  * Constructor.
18
  *
19
  * @version 2.8.0
20
+ * @todo Add watermarks to images (http://php.net/manual/en/image.examples-watermark.php); Filter: `wp_get_attachment_image_src`.
21
  */
22
  function __construct() {
23
 
includes/class-wcj-reports.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Reports
4
  *
5
- * @version 2.9.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -198,7 +198,7 @@ class WCJ_Reports extends WCJ_Module {
198
  /**
199
  * Add reports to WooCommerce > Reports > Sales
200
  *
201
- * @version 2.9.0
202
  * @since 2.3.0
203
  */
204
  function add_sales_reports( $reports ) {
@@ -218,7 +218,7 @@ class WCJ_Reports extends WCJ_Module {
218
  );
219
 
220
  $reports['orders']['reports']['booster_monthly_sales'] = array(
221
- 'title' => __( 'Booster: Monthly Sales', 'woocommerce-jetpack' ),
222
  'description' => '',
223
  'hide_title' => false,
224
  'callback' => array( $this, 'get_report_monthly_sales' ),
2
  /**
3
  * Booster for WooCommerce - Module - Reports
4
  *
5
+ * @version 2.9.1
6
  * @author Algoritmika Ltd.
7
  */
8
 
198
  /**
199
  * Add reports to WooCommerce > Reports > Sales
200
  *
201
+ * @version 2.9.1
202
  * @since 2.3.0
203
  */
204
  function add_sales_reports( $reports ) {
218
  );
219
 
220
  $reports['orders']['reports']['booster_monthly_sales'] = array(
221
+ 'title' => __( 'Booster: Monthly Sales (with Currency Conversion)', 'woocommerce-jetpack' ),
222
  'description' => '',
223
  'hide_title' => false,
224
  'callback' => array( $this, 'get_report_monthly_sales' ),
includes/class-wcj-shipping-options.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Shipping Options
4
  *
5
- * @version 2.9.0
6
  * @since 2.9.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -16,7 +16,7 @@ class WCJ_Shipping_Options extends WCJ_Module {
16
  /**
17
  * Constructor.
18
  *
19
- * @version 2.9.0
20
  * @since 2.9.0
21
  */
22
  function __construct() {
@@ -35,7 +35,7 @@ class WCJ_Shipping_Options extends WCJ_Module {
35
  if ( 'yes' === get_option( 'wcj_shipping_hide_if_free_available_all', 'no' ) ) {
36
  add_filter( 'woocommerce_package_rates', array( $this, 'hide_shipping_when_free_is_available' ), 10, 2 );
37
  }
38
- add_filter( 'woocommerce_shipping_settings', array( $this, 'add_hide_shipping_if_free_available_fields' ), 100 );
39
 
40
  // Shipping Descriptions
41
  if ( 'yes' === get_option( 'wcj_shipping_description_enabled', 'no' ) ) {
@@ -129,8 +129,7 @@ class WCJ_Shipping_Options extends WCJ_Module {
129
  /**
130
  * hide_shipping_when_free_is_available.
131
  *
132
- * @version 2.5.3
133
- * @todo if ( 'yes' === get_option( 'wcj_shipping_hide_if_free_available_local_delivery' ) ) { unset( $rates['local_delivery'] ); }
134
  */
135
  function hide_shipping_when_free_is_available( $rates, $package ) {
136
  $free_shipping_rates = array();
@@ -139,6 +138,18 @@ class WCJ_Shipping_Options extends WCJ_Module {
139
  if ( false !== strpos( $rate_key, 'free_shipping' ) ) {
140
  $is_free_shipping_available = true;
141
  $free_shipping_rates[ $rate_key ] = $rate;
 
 
 
 
 
 
 
 
 
 
 
 
142
  }
143
  }
144
  return ( $is_free_shipping_available ) ? $free_shipping_rates : $rates;
@@ -147,30 +158,36 @@ class WCJ_Shipping_Options extends WCJ_Module {
147
  /**
148
  * add_hide_shipping_if_free_available_fields.
149
  *
150
- * @version 2.5.3
 
151
  */
152
  function add_hide_shipping_if_free_available_fields( $settings ) {
153
  $updated_settings = array();
154
  foreach ( $settings as $section ) {
155
  $updated_settings[] = $section;
156
  if ( isset( $section['id'] ) && 'woocommerce_ship_to_destination' === $section['id'] ) {
157
- /* $updated_settings[] = array(
158
- 'title' => __( 'Booster: Hide shipping', 'woocommerce-jetpack' ),
159
- 'desc' => __( 'Hide local delivery when free is available', 'woocommerce-jetpack' ),
160
- 'desc_tip' => __( '', 'woocommerce-jetpack' ),
161
- 'id' => 'wcj_shipping_hide_if_free_available_local_delivery',
162
- 'default' => 'no',
163
- 'type' => 'checkbox',
164
- 'checkboxgroup' => 'start',
165
- ); */
166
- $updated_settings[] = array(
167
- 'title' => __( 'Booster: Hide shipping', 'woocommerce-jetpack' ),
168
- 'desc' => __( 'Hide all when free is available', 'woocommerce-jetpack' ),
169
- 'id' => 'wcj_shipping_hide_if_free_available_all',
170
- 'default' => 'no',
171
- 'type' => 'checkbox',
172
- /* 'checkboxgroup' => 'end', */
173
- );
 
 
 
 
 
174
  }
175
  }
176
  return $updated_settings;
2
  /**
3
  * Booster for WooCommerce - Module - Shipping Options
4
  *
5
+ * @version 2.9.1
6
  * @since 2.9.0
7
  * @author Algoritmika Ltd.
8
  */
16
  /**
17
  * Constructor.
18
  *
19
+ * @version 2.9.1
20
  * @since 2.9.0
21
  */
22
  function __construct() {
35
  if ( 'yes' === get_option( 'wcj_shipping_hide_if_free_available_all', 'no' ) ) {
36
  add_filter( 'woocommerce_package_rates', array( $this, 'hide_shipping_when_free_is_available' ), 10, 2 );
37
  }
38
+ add_filter( 'woocommerce_shipping_settings', array( $this, 'add_hide_shipping_if_free_available_fields' ), PHP_INT_MAX );
39
 
40
  // Shipping Descriptions
41
  if ( 'yes' === get_option( 'wcj_shipping_description_enabled', 'no' ) ) {
129
  /**
130
  * hide_shipping_when_free_is_available.
131
  *
132
+ * @version 2.9.1
 
133
  */
134
  function hide_shipping_when_free_is_available( $rates, $package ) {
135
  $free_shipping_rates = array();
138
  if ( false !== strpos( $rate_key, 'free_shipping' ) ) {
139
  $is_free_shipping_available = true;
140
  $free_shipping_rates[ $rate_key ] = $rate;
141
+ } else {
142
+ if (
143
+ 'except_local_pickup' === apply_filters( 'booster_get_option', 'hide_all', get_option( 'wcj_shipping_hide_if_free_available_type', 'hide_all' ) ) &&
144
+ false !== strpos( $rate_key, 'local_pickup' )
145
+ ) {
146
+ $free_shipping_rates[ $rate_key ] = $rate;
147
+ } elseif (
148
+ 'flat_rate_only' === apply_filters( 'booster_get_option', 'hide_all', get_option( 'wcj_shipping_hide_if_free_available_type', 'hide_all' ) ) &&
149
+ false === strpos( $rate_key, 'flat_rate' )
150
+ ) {
151
+ $free_shipping_rates[ $rate_key ] = $rate;
152
+ }
153
  }
154
  }
155
  return ( $is_free_shipping_available ) ? $free_shipping_rates : $rates;
158
  /**
159
  * add_hide_shipping_if_free_available_fields.
160
  *
161
+ * @version 2.9.1
162
+ * @todo (maybe) delete this
163
  */
164
  function add_hide_shipping_if_free_available_fields( $settings ) {
165
  $updated_settings = array();
166
  foreach ( $settings as $section ) {
167
  $updated_settings[] = $section;
168
  if ( isset( $section['id'] ) && 'woocommerce_ship_to_destination' === $section['id'] ) {
169
+ $updated_settings = array_merge( $updated_settings, array(
170
+ array(
171
+ 'title' => __( 'Booster: Hide when free is available', 'woocommerce-jetpack' ),
172
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
173
+ 'id' => 'wcj_shipping_hide_if_free_available_all',
174
+ 'default' => 'no',
175
+ 'type' => 'checkbox',
176
+ ),
177
+ array(
178
+ 'id' => 'wcj_shipping_hide_if_free_available_type',
179
+ 'desc_tip' => sprintf( __( 'Available options: hide all; hide all except "Local Pickup"; hide "Flat Rate" only.', 'woocommerce-jetpack' ) ),
180
+ 'default' => 'hide_all',
181
+ 'type' => 'select',
182
+ 'options' => array(
183
+ 'hide_all' => __( 'Hide all', 'woocommerce-jetpack' ),
184
+ 'except_local_pickup' => __( 'Hide all except "Local Pickup"', 'woocommerce-jetpack' ),
185
+ 'flat_rate_only' => __( 'Hide "Flat Rate" only', 'woocommerce-jetpack' ),
186
+ ),
187
+ 'desc' => apply_filters( 'booster_get_message', '', 'desc' ),
188
+ 'custom_attributes' => apply_filters( 'booster_get_message', '', 'disabled' ),
189
+ ),
190
+ ) );
191
  }
192
  }
193
  return $updated_settings;
includes/class-wcj-url-coupons.php ADDED
@@ -0,0 +1,130 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Booster for WooCommerce - Module - URL Coupons
4
+ *
5
+ * @version 2.9.1
6
+ * @since 2.9.1
7
+ * @author Algoritmika Ltd.
8
+ */
9
+
10
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
11
+
12
+ if ( ! class_exists( 'WCJ_URL_Coupons' ) ) :
13
+
14
+ class WCJ_URL_Coupons extends WCJ_Module {
15
+
16
+ /**
17
+ * Constructor.
18
+ *
19
+ * @version 2.9.1
20
+ * @since 2.9.1
21
+ */
22
+ function __construct() {
23
+
24
+ $this->id = 'url_coupons';
25
+ $this->short_desc = __( 'URL Coupons', 'woocommerce-jetpack' );
26
+ $this->desc = __( 'WooCommerce URL coupons.', 'woocommerce-jetpack' );
27
+ $this->link_slug = 'woocommerce-url-coupons';
28
+ parent::__construct();
29
+
30
+ if ( $this->is_enabled() ) {
31
+ add_action( 'wp_loaded', array( $this, 'maybe_apply_url_coupon' ), PHP_INT_MAX );
32
+ }
33
+ }
34
+
35
+ /**
36
+ * is_product_in_cart.
37
+ *
38
+ * @version 2.9.1
39
+ * @since 2.9.1
40
+ */
41
+ function is_product_in_cart( $product_id ) {
42
+ if ( 0 != $product_id ) {
43
+ if ( isset( WC()->cart->cart_contents ) && is_array( WC()->cart->cart_contents ) ) {
44
+ foreach ( WC()->cart->cart_contents as $cart_item_key => $cart_item_data ) {
45
+ if (
46
+ ( isset( $cart_item_data['product_id'] ) && $product_id == $cart_item_data['product_id'] ) ||
47
+ ( isset( $cart_item_data['variation_id'] ) && $product_id == $cart_item_data['variation_id'] )
48
+ ) {
49
+ return true;
50
+ }
51
+ }
52
+ }
53
+ }
54
+ return false;
55
+ }
56
+
57
+ /**
58
+ * get_redirect_url.
59
+ *
60
+ * @version 2.9.1
61
+ * @since 2.9.1
62
+ */
63
+ function get_redirect_url( $arg_key ) {
64
+ switch ( apply_filters( 'booster_get_option', 'no', get_option( 'wcj_url_coupons_redirect', 'no' ) ) ) {
65
+ case 'cart':
66
+ return wc_get_cart_url();
67
+ case 'checkout':
68
+ return wc_get_checkout_url();
69
+ case 'custom':
70
+ return get_option( 'wcj_url_coupons_redirect_custom_url', '' );
71
+ default: // 'no'
72
+ return remove_query_arg( $arg_key );
73
+ }
74
+ }
75
+
76
+ /**
77
+ * maybe_add_products_to_cart.
78
+ *
79
+ * @version 2.9.1
80
+ * @since 2.9.1
81
+ * @todo (maybe) check if coupon is valid
82
+ */
83
+ function maybe_add_products_to_cart( $coupon_code ) {
84
+ if ( 'no' === apply_filters( 'booster_get_option', 'no', get_option( 'wcj_url_coupons_fixed_product_discount_add_products', 'no' ) ) ) {
85
+ return false;
86
+ }
87
+ // Coupons are globally disabled.
88
+ if ( ! wc_coupons_enabled() ) {
89
+ return false;
90
+ }
91
+ // Sanitize coupon code.
92
+ $coupon_code = wc_format_coupon_code( $coupon_code );
93
+ // Get the coupon.
94
+ $the_coupon = new WC_Coupon( $coupon_code );
95
+ if ( 'fixed_product' === $the_coupon->get_discount_type() ) {
96
+ $product_ids = $the_coupon->get_product_ids();
97
+ if ( ! empty( $product_ids ) ) {
98
+ foreach ( $product_ids as $product_id ) {
99
+ if ( ! $this->is_product_in_cart( $product_id ) ) {
100
+ WC()->cart->add_to_cart( $product_id );
101
+ }
102
+ }
103
+ }
104
+ }
105
+ }
106
+
107
+ /**
108
+ * maybe_apply_url_coupon.
109
+ *
110
+ * @version 2.9.1
111
+ * @since 2.7.0
112
+ * @todo (maybe) options to add products to cart with query arg
113
+ * @todo (maybe) if ( ! WC()->cart->has_discount( $coupon_code ) ) {}
114
+ */
115
+ function maybe_apply_url_coupon() {
116
+ $arg_key = get_option( 'wcj_url_coupons_key', 'wcj_apply_coupon' );
117
+ if ( isset( $_GET[ $arg_key ] ) && '' != $_GET[ $arg_key ] ) {
118
+ $coupon_code = sanitize_text_field( $_GET[ $arg_key ] );
119
+ $this->maybe_add_products_to_cart( $coupon_code );
120
+ WC()->cart->add_discount( $coupon_code );
121
+ wp_safe_redirect( $this->get_redirect_url( $arg_key ) );
122
+ exit;
123
+ }
124
+ }
125
+
126
+ }
127
+
128
+ endif;
129
+
130
+ return new WCJ_URL_Coupons();
includes/classes/class-wcj-module.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce Module
4
  *
5
- * @version 2.9.0
6
  * @since 2.2.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -36,6 +36,67 @@ if ( ! class_exists( 'WCJ_Module' ) ) :
36
  add_action( 'init', array( $this, 'reset_settings' ), PHP_INT_MAX );
37
  }
38
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  /**
40
  * get_meta_box_options.
41
  *
2
  /**
3
  * Booster for WooCommerce Module
4
  *
5
+ * @version 2.9.1
6
  * @since 2.2.0
7
  * @author Algoritmika Ltd.
8
  */
36
  add_action( 'init', array( $this, 'reset_settings' ), PHP_INT_MAX );
37
  }
38
 
39
+ /**
40
+ * save_meta_box_validate_value.
41
+ *
42
+ * @version 2.9.1
43
+ * @since 2.9.1
44
+ */
45
+ function save_meta_box_validate_value( $option_value, $option_name, $module_id ) {
46
+ if ( true === apply_filters( 'booster_get_option', false, true ) ) {
47
+ return $option_value;
48
+ }
49
+ if ( 'no' === $option_value ) {
50
+ return $option_value;
51
+ }
52
+ if ( $this->id === $module_id && $this->meta_box_validate_value === $option_name ) {
53
+ $args = array(
54
+ 'post_type' => 'product',
55
+ 'post_status' => 'any',
56
+ 'posts_per_page' => 1,
57
+ 'meta_key' => '_' . $this->meta_box_validate_value,
58
+ 'meta_value' => 'yes',
59
+ 'post__not_in' => array( get_the_ID() ),
60
+ );
61
+ $loop = new WP_Query( $args );
62
+ $c = $loop->found_posts + 1;
63
+ if ( $c >= 2 ) {
64
+ add_filter( 'redirect_post_location', array( $this, 'validate_value_add_notice_query_var' ), 99 );
65
+ return 'no';
66
+ }
67
+ }
68
+ return $option_value;
69
+ }
70
+
71
+ /**
72
+ * validate_value_add_notice_query_var.
73
+ *
74
+ * @version 2.9.1
75
+ * @since 2.9.1
76
+ */
77
+ function validate_value_add_notice_query_var( $location ) {
78
+ remove_filter( 'redirect_post_location', array( $this, 'validate_value_add_notice_query_var' ), 99 );
79
+ return add_query_arg( array( 'wcj_' . $this->id . '_meta_box_admin_notice' => true ), $location );
80
+ }
81
+
82
+ /**
83
+ * validate_value_admin_notices.
84
+ *
85
+ * @version 2.9.1
86
+ * @since 2.9.1
87
+ */
88
+ function validate_value_admin_notices() {
89
+ if ( ! isset( $_GET[ 'wcj_' . $this->id . '_meta_box_admin_notice' ] ) ) {
90
+ return;
91
+ }
92
+ echo '<div class="error">' . '<p>' . '<div class="message">' .
93
+ sprintf(
94
+ __( 'Booster: Free plugin\'s version is limited to only one "%1$s" product with settings on per product basis enabled at a time. You will need to get <a href="%2$s" target="_blank">Booster Plus</a> to add unlimited number of "%1$s" products.', 'woocommerce-jetpack' ),
95
+ $this->short_desc, 'https://booster.io/plus/'
96
+ ) .
97
+ '</div>' . '</p>' . '</div>';
98
+ }
99
+
100
  /**
101
  * get_meta_box_options.
102
  *
includes/functions/wcj-admin-functions.php CHANGED
@@ -2,13 +2,94 @@
2
  /**
3
  * Booster for WooCommerce - Functions - Admin
4
  *
5
- * @version 2.9.0
6
  * @since 2.9.0
7
  * @author Algoritmika Ltd.
8
  */
9
 
10
  if ( ! defined( 'ABSPATH' ) ) exit;
11
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  if ( ! function_exists( 'wcj_message_replaced_values' ) ) {
13
  /**
14
  * wcj_message_replaced_values.
2
  /**
3
  * Booster for WooCommerce - Functions - Admin
4
  *
5
+ * @version 2.9.1
6
  * @since 2.9.0
7
  * @author Algoritmika Ltd.
8
  */
9
 
10
  if ( ! defined( 'ABSPATH' ) ) exit;
11
 
12
+ if ( ! function_exists( 'wcj_get_settings_as_multiselect_or_text' ) ) {
13
+ /**
14
+ * wcj_get_settings_as_multiselect_or_text.
15
+ *
16
+ * @version 2.9.1
17
+ * @since 2.9.1
18
+ */
19
+ function wcj_get_settings_as_multiselect_or_text( $values, $multiselect_options, $is_multiselect ) {
20
+ return ( $is_multiselect ?
21
+ array_merge( $values, array(
22
+ 'type' => 'multiselect',
23
+ 'class' => 'chosen_select',
24
+ 'options' => $multiselect_options,
25
+ ) ) :
26
+ array_merge( $values, array(
27
+ 'type' => 'text',
28
+ 'desc' => __( 'Enter comma separated list of IDs.', 'woocommerce-jetpack' ),
29
+ ) )
30
+ );
31
+ }
32
+ }
33
+
34
+ if ( ! function_exists( 'wcj_convert_string_to_array' ) ) {
35
+ /**
36
+ * wcj_convert_string_to_array.
37
+ *
38
+ * @version 2.9.1
39
+ * @since 2.9.1
40
+ * @todo check `custom_explode` function
41
+ */
42
+ function wcj_convert_string_to_array( $value ) {
43
+ if ( '' === $value ) {
44
+ $value = array();
45
+ } else {
46
+ $value = str_replace( ' ', '', $value );
47
+ $value = explode( ',', $value );
48
+ }
49
+ return $value;
50
+ }
51
+ }
52
+
53
+ if ( ! function_exists( 'wcj_maybe_convert_and_update_option_value' ) ) {
54
+ /**
55
+ * wcj_maybe_convert_and_update_option_value.
56
+ *
57
+ * @version 2.9.1
58
+ * @since 2.9.1
59
+ */
60
+ function wcj_maybe_convert_and_update_option_value( $options, $is_multiselect ) {
61
+ foreach ( $options as $option ) {
62
+ $value = get_option( $option['id'], $option['default'] );
63
+ if ( ! $is_multiselect ) {
64
+ if ( is_array( $value ) ) {
65
+ $value = implode( ',', $value );
66
+ update_option( $option['id'], $value );
67
+ }
68
+ } else {
69
+ if ( is_string( $value ) ) {
70
+ $value = wcj_convert_string_to_array( $value );
71
+ update_option( $option['id'], $value );
72
+ }
73
+ }
74
+ }
75
+ }
76
+ }
77
+
78
+ if ( ! function_exists( 'wcj_maybe_convert_string_to_array' ) ) {
79
+ /**
80
+ * wcj_maybe_convert_string_to_array.
81
+ *
82
+ * @version 2.9.1
83
+ * @since 2.9.1
84
+ */
85
+ function wcj_maybe_convert_string_to_array( $value ) {
86
+ if ( is_string( $value ) ) {
87
+ $value = wcj_convert_string_to_array( $value );
88
+ }
89
+ return $value;
90
+ }
91
+ }
92
+
93
  if ( ! function_exists( 'wcj_message_replaced_values' ) ) {
94
  /**
95
  * wcj_message_replaced_values.
includes/functions/wcj-country-functions.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Functions - Country
4
  *
5
- * @version 2.9.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -10,10 +10,12 @@ if ( ! function_exists( 'wcj_get_country_flag_by_code' ) ) {
10
  /**
11
  * wcj_get_country_flag_by_code.
12
  *
13
- @version 2.6.0
14
  */
15
  function wcj_get_country_flag_by_code( $country_code ) {
16
- $img_src = wcj_plugin_url() . '/assets/images/flag-icons/' . strtolower( $country_code ) . '.png';
 
 
17
  return '<img src="' . $img_src . '" title="' . wcj_get_country_name_by_code( $country_code ) . '">';
18
  }
19
  }
2
  /**
3
  * Booster for WooCommerce - Functions - Country
4
  *
5
+ * @version 2.9.1
6
  * @author Algoritmika Ltd.
7
  */
8
 
10
  /**
11
  * wcj_get_country_flag_by_code.
12
  *
13
+ @version 2.9.1
14
  */
15
  function wcj_get_country_flag_by_code( $country_code ) {
16
+ $img = '/assets/images/flag-icons/' . strtolower( $country_code ) . '.png';
17
+ $img_path = wcj_plugin_path() . $img;
18
+ $img_src = wcj_plugin_url() . ( file_exists( $img_path ) ? $img : '/assets/images/flag-icons/no-flag.png' );
19
  return '<img src="' . $img_src . '" title="' . wcj_get_country_name_by_code( $country_code ) . '">';
20
  }
21
  }
includes/functions/wcj-date-time-functions.php CHANGED
@@ -2,13 +2,58 @@
2
  /**
3
  * Booster for WooCommerce - Functions - Date and Time
4
  *
5
- * @version 2.9.0
6
  * @since 2.9.0
7
  * @author Algoritmika Ltd.
8
  */
9
 
10
  if ( ! defined( 'ABSPATH' ) ) exit;
11
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  if ( ! function_exists( 'wcj_check_time_from' ) ) {
13
  /**
14
  * wcj_check_time_from.
2
  /**
3
  * Booster for WooCommerce - Functions - Date and Time
4
  *
5
+ * @version 2.9.1
6
  * @since 2.9.0
7
  * @author Algoritmika Ltd.
8
  */
9
 
10
  if ( ! defined( 'ABSPATH' ) ) exit;
11
 
12
+ if ( ! function_exists( 'wcj_check_single_date' ) ) {
13
+ /**
14
+ * wcj_check_single_date.
15
+ *
16
+ * @version 2.9.1
17
+ * @since 2.9.1
18
+ */
19
+ function wcj_check_single_date( $_date, $args ) {
20
+ $_date = explode( '-', $_date );
21
+ if ( isset( $_date[0] ) ) {
22
+ if ( $args['day_now'] < $_date[0] ) {
23
+ return false;
24
+ }
25
+ }
26
+ if ( isset( $_date[1] ) ) {
27
+ if ( $args['day_now'] > $_date[1] ) {
28
+ return false;
29
+ }
30
+ }
31
+ return true;
32
+ }
33
+ }
34
+
35
+ if ( ! function_exists( 'wcj_check_date' ) ) {
36
+ /**
37
+ * wcj_check_date.
38
+ *
39
+ * @version 2.9.1
40
+ * @since 2.9.1
41
+ */
42
+ function wcj_check_date( $_date, $args = array() ) {
43
+ if ( empty( $args ) ) {
44
+ $time_now = current_time( 'timestamp' );
45
+ $args['day_now'] = intval( date( 'j', $time_now ) );
46
+ }
47
+ $_date = explode( ',', $_date );
48
+ foreach ( $_date as $_single_date ) {
49
+ if ( wcj_check_single_date( $_single_date, $args ) ) {
50
+ return true;
51
+ }
52
+ }
53
+ return false;
54
+ }
55
+ }
56
+
57
  if ( ! function_exists( 'wcj_check_time_from' ) ) {
58
  /**
59
  * wcj_check_time_from.
includes/functions/wcj-debug-functions.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Functions - Debug
4
  *
5
- * @version 2.9.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -17,10 +17,10 @@ if ( ! function_exists( 'wcj_log' ) ) {
17
  /**
18
  * wcj_log.
19
  *
20
- * @version 2.9.0
21
  */
22
  function wcj_log( $message = '' ) {
23
- if ( ! wcj_is_module_enabled( 'admin_tools' ) || 'no' === get_option( 'wcj_logging_enabled', 'no' ) ) {
24
  return;
25
  }
26
  if ( '' == $message ) {
@@ -29,6 +29,14 @@ if ( ! function_exists( 'wcj_log' ) ) {
29
  if ( is_array( $message ) || is_object( $message ) ) {
30
  $message = print_r( $message, true );
31
  }
32
- update_option( 'wcj_log', date( 'Y-m-d H:i:s' ) . ' ' . $_SERVER['REQUEST_URI'] . ' [' . $message . ']' . '<br>' . get_option( 'wcj_log', '' ) );
 
 
 
 
 
 
 
 
33
  }
34
  }
2
  /**
3
  * Booster for WooCommerce - Functions - Debug
4
  *
5
+ * @version 2.9.1
6
  * @author Algoritmika Ltd.
7
  */
8
 
17
  /**
18
  * wcj_log.
19
  *
20
+ * @version 2.9.1
21
  */
22
  function wcj_log( $message = '' ) {
23
+ if ( ! wcj_is_module_enabled( 'admin_tools' ) || ( 'no' === get_option( 'wcj_logging_enabled', 'no' ) && 'no' === get_option( 'wcj_wc_logging_enabled', 'no' ) ) ) {
24
  return;
25
  }
26
  if ( '' == $message ) {
29
  if ( is_array( $message ) || is_object( $message ) ) {
30
  $message = print_r( $message, true );
31
  }
32
+ if ( 'yes' === get_option( 'wcj_logging_enabled', 'no' ) ) {
33
+ update_option( 'wcj_log', date( 'Y-m-d H:i:s' ) . ' ' . $_SERVER['REQUEST_URI'] . ' [' . $message . ']' . '<br>' . get_option( 'wcj_log', '' ) );
34
+ }
35
+ // WC log
36
+ if ( 'yes' === get_option( 'wcj_wc_logging_enabled', 'no' ) && function_exists( 'wc_get_logger' ) ) {
37
+ if ( $log = wc_get_logger() ) {
38
+ $log->log( 'info', $message, array( 'source' => 'booster_for_woocommerce' ) );
39
+ }
40
+ }
41
  }
42
  }
includes/functions/wcj-exchange-rates-functions.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Functions - Exchange Rates
4
  *
5
- * @version 2.7.0
6
  * @since 2.7.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -169,6 +169,7 @@ if ( ! function_exists( 'alg_yahoo_get_exchange_rate' ) ) {
169
  *
170
  * @version 2.7.0
171
  * @return float rate on success, else 0
 
172
  */
173
  function alg_yahoo_get_exchange_rate( $currency_from, $currency_to ) {
174
 
@@ -197,3 +198,72 @@ if ( ! function_exists( 'alg_yahoo_get_exchange_rate' ) ) {
197
  // return ( isset( $exchange_rate->rate ) ) ? $exchange_rate->rate : 0;
198
  }
199
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  /**
3
  * Booster for WooCommerce - Functions - Exchange Rates
4
  *
5
+ * @version 2.9.1
6
  * @since 2.7.0
7
  * @author Algoritmika Ltd.
8
  */
169
  *
170
  * @version 2.7.0
171
  * @return float rate on success, else 0
172
+ * @todo `alg_` to `wcj_`
173
  */
174
  function alg_yahoo_get_exchange_rate( $currency_from, $currency_to ) {
175
 
198
  // return ( isset( $exchange_rate->rate ) ) ? $exchange_rate->rate : 0;
199
  }
200
  }
201
+
202
+ if ( ! function_exists( 'wcj_yahoo_get_exchange_rate_average_USD' ) ) {
203
+ /*
204
+ * wcj_yahoo_get_exchange_rate_average_USD.
205
+ *
206
+ * @version 2.9.1
207
+ * @since 2.5.3
208
+ * @return false or rate
209
+ * @see https://stackoverflow.com/questions/44075788/yahoo-yql-yahoo-finance-historicaldata-returning-empty-results
210
+ * @see https://forums.yahoo.net/t5/Yahoo-Finance-help/Is-Yahoo-Finance-API-broken/td-p/250503/page/3
211
+ * @deprecated This feature was discontinued by the Yahoo Finance team and they will not be reintroducing that functionality.
212
+ */
213
+ function wcj_yahoo_get_exchange_rate_average_USD( $currency, $start_date, $end_date ) {
214
+ $url = 'https://query.yahooapis.com/v1/public/yql?q=select%20Close%20from%20yahoo.finance.historicaldata%20where%20symbol%20%3D%20%22'
215
+ . $currency . '%3DX%22%20and%20startDate%20%3D%20%22'
216
+ . $start_date . '%22%20and%20endDate%20%3D%20%22'
217
+ . $end_date. '%22&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=';
218
+ ob_start();
219
+ $max_execution_time = ini_get( 'max_execution_time' );
220
+ set_time_limit( 15 );
221
+ $exchange_rate = json_decode( file_get_contents( $url ) );
222
+ set_time_limit( $max_execution_time );
223
+ ob_end_clean();
224
+ if ( ! isset( $exchange_rate->query->results->quote ) || count( $exchange_rate->query->results->quote ) < 1 ) {
225
+ return false;
226
+ }
227
+ $average_currency = 0;
228
+ foreach ( $exchange_rate->query->results->quote as $quote ) {
229
+ $average_currency += $quote->Close;
230
+ }
231
+ $average_currency = $average_currency / count( $exchange_rate->query->results->quote );
232
+ if ( 0 == $average_currency ) {
233
+ return false;
234
+ }
235
+ return $average_currency;
236
+ }
237
+ }
238
+
239
+ if ( ! function_exists( 'wcj_yahoo_get_exchange_rate_average' ) ) {
240
+ /*
241
+ * wcj_yahoo_get_exchange_rate_average.
242
+ *
243
+ * @version 2.9.1
244
+ * @since 2.4.7
245
+ * @return false or rate
246
+ */
247
+ function wcj_yahoo_get_exchange_rate_average( $currency_from, $currency_to, $start_date, $end_date ) {
248
+ // USD / $currency_from
249
+ if ( 'USD' != $currency_from ) {
250
+ $average_currency_from = wcj_yahoo_get_exchange_rate_average_USD( $currency_from, $start_date, $end_date );
251
+ if ( 0 == $average_currency_from ) {
252
+ return false;
253
+ }
254
+ } else {
255
+ $average_currency_from = 1.0;
256
+ }
257
+ // USD / $currency_to
258
+ if ( 'USD' != $currency_to ) {
259
+ $average_currency_to = wcj_yahoo_get_exchange_rate_average_USD( $currency_to, $start_date, $end_date );
260
+ if ( 0 == $average_currency_to ) {
261
+ return false;
262
+ }
263
+ } else {
264
+ $average_currency_to = 1.0;
265
+ }
266
+ // Final rate
267
+ return $average_currency_to / $average_currency_from;
268
+ }
269
+ }
includes/js/wcj-track-users.js ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * wcj-track-users.js
3
+ *
4
+ * @version 2.9.1
5
+ * @version 2.9.1
6
+ */
7
+
8
+ jQuery(document).ready(function() {
9
+ var data = {
10
+ 'action': 'wcj_track_users',
11
+ 'wcj_http_referer': track_users_ajax_object.http_referer,
12
+ 'wcj_user_ip': track_users_ajax_object.user_ip
13
+ };
14
+ jQuery.ajax({
15
+ type: "POST",
16
+ url: track_users_ajax_object.ajax_url,
17
+ data: data,
18
+ });
19
+ });
includes/reports/wcj-class-reports-monthly-sales.php CHANGED
@@ -1,8 +1,8 @@
1
  <?php
2
  /**
3
- * Booster for WooCommerce - Reports - Mothly Sales
4
  *
5
- * @version 2.7.0
6
  * @since 2.4.7
7
  * @author Algoritmika Ltd.
8
  */
@@ -26,106 +26,56 @@ class WCJ_Reports_Monthly_Sales {
26
  /**
27
  * get_report.
28
  *
29
- * @version 2.5.3
30
  * @since 2.4.7
31
  */
32
  function get_report() {
33
  $html = '';
34
- $this->year = isset( $_GET['year'] ) ? $_GET['year'] : date( 'Y' );
35
- if ( isset( $_POST['wcj_reset_currency_rates'] ) ) {
 
 
 
 
36
  delete_option( 'wcj_reports_currency_rates' );
37
- $html .= '<p>' . __( 'Currency rates deleted.', 'woocommerce-jetpack' ) . '</p>';
38
  }
 
 
39
  $html .= $this->get_monthly_sales_report();
40
  return $html;
41
  }
42
 
43
  /*
44
- * get_exchange_rate_average_USD.
45
- *
46
- * @version 2.5.3
47
- * @since 2.5.3
48
- */
49
- function get_exchange_rate_average_USD( $currency, $start_date, $end_date ) {
50
- $url = 'https://query.yahooapis.com/v1/public/yql?q=select%20Close%20from%20yahoo.finance.historicaldata%20where%20symbol%20%3D%20%22'
51
- . $currency . '%3DX%22%20and%20startDate%20%3D%20%22'
52
- . $start_date . '%22%20and%20endDate%20%3D%20%22'
53
- . $end_date. '%22&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=';
54
- ob_start();
55
- $max_execution_time = ini_get( 'max_execution_time' );
56
- set_time_limit( 5 );
57
- $exchange_rate = json_decode( file_get_contents( $url ) );
58
- set_time_limit( $max_execution_time );
59
- ob_end_clean();
60
- if ( ! isset( $exchange_rate->query->results->quote ) || count( $exchange_rate->query->results->quote ) < 1 ) {
61
- return false;
62
- }
63
- $average_currency = 0;
64
- foreach ( $exchange_rate->query->results->quote as $quote ) {
65
- $average_currency += $quote->Close;
66
- }
67
- $average_currency = $average_currency / count( $exchange_rate->query->results->quote );
68
- if ( 0 == $average_currency ) {
69
- return false;
70
- }
71
- return $average_currency;
72
- }
73
-
74
- /*
75
- * get_exchange_rate_average.
76
  *
77
- * @version 2.5.3
78
  * @since 2.4.7
79
- * @todo current month rate - save only once a day (now saving every time)
80
  */
81
- function get_exchange_rate_average( $currency_from, $currency_to, $start_date, $end_date ) {
82
  // Same currency
83
  if ( $currency_from == $currency_to ) {
84
  return 1.0;
85
  }
86
  // Saved values
87
  $saved_rates = get_option( 'wcj_reports_currency_rates', array() );
88
- $is_current_month = ( date( 'Y-m' ) == date( 'Y-m', strtotime( $start_date ) ) ) ? true : false;
89
- if ( ! $is_current_month ) {
90
- if ( ! empty( $saved_rates ) ) {
91
- if ( isset( $saved_rates[ $currency_from ][ $currency_to ][ $start_date ][ $end_date ] ) ) {
92
- return $saved_rates[ $currency_from ][ $currency_to ][ $start_date ][ $end_date ];
93
- }
94
- }
95
- }
96
- // Get exchange rate
97
- if ( 'USD' != $currency_from ) {
98
- // USD/$currency_from
99
- $average_currency_from = $this->get_exchange_rate_average_USD( $currency_from, $start_date, $end_date );
100
- if ( false === $average_currency_from ) {
101
- return false;
102
- }
103
- } else {
104
- $average_currency_from = 1.0;
105
- }
106
- if ( 'USD' != $currency_to ) {
107
- // USD/$currency_to
108
- $average_currency_to = $this->get_exchange_rate_average_USD( $currency_to, $start_date, $end_date );
109
- if ( false === $average_currency_to ) {
110
- return false;
111
  }
112
- } else {
113
- $average_currency_to = 1.0;
114
- }
115
- $the_rate = $average_currency_to / $average_currency_from;
116
- if ( ! $is_current_month ) {
117
- $saved_rates[ $currency_from ][ $currency_to ][ $start_date ][ $end_date ] = $the_rate;
118
- update_option( 'wcj_reports_currency_rates', $saved_rates );
119
  }
120
- return $the_rate;
 
121
  }
122
 
123
  /*
124
  * get_monthly_sales_report.
125
  *
126
- * @version 2.7.0
127
  * @since 2.4.7
128
- * @todo take not monthly average, but "Close" of closest day; forecast for current month; $order_currencies_array;
 
 
129
  */
130
  function get_monthly_sales_report() {
131
 
@@ -140,23 +90,31 @@ class WCJ_Reports_Monthly_Sales {
140
  $total_orders_sum_average_order_array = array( __( 'Average / Order (excl. TAX)', 'woocommerce-jetpack' ) );
141
  $total_orders_sum_average_array = array( __( 'Average / Day (excl. TAX)', 'woocommerce-jetpack' ) );
142
  $currency_rates_array = array( __( 'Currency Rates', 'woocommerce-jetpack' ) );
 
143
 
144
  $total_months_days = 0;
145
  $total_orders_total = 0;
146
  $total_orders_sum_total = 0;
147
  $total_orders_sum_excl_tax_total = 0;
148
 
149
- $order_currencies_array = array();
150
- $report_currency = ( isset( $_GET['currency'] ) && 'merge' != $_GET['currency'] ) ? $_GET['currency'] : get_woocommerce_currency();
151
- $block_size = 96;
152
- $table_data = array();
 
 
 
153
  for ( $i = 1; $i <= 12; $i++ ) {
154
  $current_months_averages = array();
155
- $total_orders = 0;
156
- $total_orders_sum = 0;
157
  $total_orders_sum_excl_tax = 0;
158
- $offset = 0;
159
- $day_for_average = ( $i == date( 'm' ) && $this->year == date( 'Y' ) ) ? date( 'd' ) - 1 : date( 't', strtotime( $this->year . '-' . sprintf( '%02d', $i ) . '-' . '01' ) );
 
 
 
 
160
  if ( 0 == $day_for_average ) {
161
  $months_array[] = date_i18n( 'F', mktime( 0, 0, 0, $i, 1, $this->year ) );
162
  $months_days_array[] = '-';
@@ -167,6 +125,7 @@ class WCJ_Reports_Monthly_Sales {
167
  $total_orders_sum_average_order_array[] = '-';
168
  $total_orders_sum_average_array[] = '-';
169
  $currency_rates_array[] = '';
 
170
  continue;
171
  }
172
  while( true ) {
@@ -177,6 +136,7 @@ class WCJ_Reports_Monthly_Sales {
177
  'orderby' => 'date',
178
  'order' => 'DESC',
179
  'offset' => $offset,
 
180
  'date_query' => array(
181
  'after' => array(
182
  'year' => $this->year,
@@ -192,61 +152,71 @@ class WCJ_Reports_Monthly_Sales {
192
  ),
193
  );
194
  $loop_orders = new WP_Query( $args_orders );
195
- if ( ! $loop_orders->have_posts() ) break;
196
- while ( $loop_orders->have_posts() ) : $loop_orders->the_post();
197
- $order_id = $loop_orders->post->ID;
198
- $order = new WC_Order( $order_id );
 
199
  $order_currency = wcj_get_order_currency( $order );
200
- if ( ! isset( $order_currencies_array[ $order_currency ] ) ) {
201
- $order_currencies_array[ $order_currency ] = 0;
 
202
  }
203
- $order_currencies_array[ $order_currency ]++;
 
 
 
 
 
204
  $total_orders++;
205
  $order_total = $order->get_total();
206
  $order_total_excl_tax = $order->get_total() - $order->get_total_tax();
207
  if ( ! isset( $current_months_averages[ $order_currency ][ $report_currency ] ) ) {
208
  $start_date = $this->year . '-' . sprintf( '%02d', $i ) . '-' . '01';
209
  $end_date = date( 'Y-m-t', strtotime( $start_date ) );
210
- $the_rate = $this->get_exchange_rate_average( $order_currency, $report_currency, $start_date, $end_date );
211
- if ( false === $the_rate ) {
212
- // Try previous month
213
- $start_date_prev_month = date( 'Y-m-d', strtotime( 'first day of last month', strtotime( $start_date ) ) );
214
- $end_date_prev_month = date( 'Y-m-t', strtotime( $start_date_prev_month ) );
215
- $the_rate = $this->get_exchange_rate_average( $order_currency, $report_currency, $start_date_prev_month, $end_date_prev_month );
216
- if ( false === $the_rate ) {
217
- return '<p>' . sprintf( __( 'Error getting currency rate for %s', 'woocommerce-jetpack' ), $order_currency . $report_currency ) . '</p>';
218
- }
219
  }
220
  $current_months_averages[ $order_currency ][ $report_currency ] = $the_rate;
221
  }
222
- $total_orders_sum += $order_total * $current_months_averages[ $order_currency ][ $report_currency ];
223
  $total_orders_sum_excl_tax += $order_total_excl_tax * $current_months_averages[ $order_currency ][ $report_currency ];
224
- endwhile;
225
  $offset += $block_size;
226
  }
227
 
228
  // Month Name
229
- $months_array[] = date_i18n( 'F', mktime( 0, 0, 0, $i, 1, $this->year ) ) /* . '[' . $start_date . ' ~ ' . $end_date . ']' */;
230
  // Month Days
231
  $months_days_array[] = ( date( 'm' ) >= $i || $this->year != date( 'Y' ) ? $day_for_average : '-' );
232
  $total_months_days += ( date( 'm' ) >= $i || $this->year != date( 'Y' ) ? $day_for_average : 0 );
233
 
234
  // Sales
235
- $total_orders_array[] = ( $total_orders > 0 ? $total_orders : '-' );
 
 
 
 
 
 
 
236
  $total_orders_total += $total_orders;
237
  // Sales Average
238
- $average_sales_result = $total_orders / $day_for_average;
239
  $total_orders_average_array[] = ( $average_sales_result > 0 ? number_format( $average_sales_result, 2, '.', ',' ) : '-' );
240
 
241
  // Sum
242
  $total_orders_sum_array[] = ( $total_orders_sum > 0 ? $report_currency . ' ' . number_format( $total_orders_sum, 2, '.', ',' ) : '-' );
243
  $total_orders_sum_total += $total_orders_sum;
244
  // Sum excl. Tax
245
- //if ( $total_orders_sum != $total_orders_sum_excl_tax) {
246
- $total_orders_sum_excl_tax_array[] = ( $total_orders_sum_excl_tax > 0 ?
247
- $report_currency . ' ' . number_format( $total_orders_sum_excl_tax, 2, '.', ',' ) : '-' );
248
- $total_orders_sum_excl_tax_total += $total_orders_sum_excl_tax;
249
- //}
 
 
 
250
  // Order Average
251
  $total_orders_sum_average_order_array[] = ( $total_orders_sum_excl_tax > 0 && $total_orders > 0 ?
252
  $report_currency . ' ' . number_format( $total_orders_sum_excl_tax / $total_orders, 2, '.', ',' ) : '-' );
@@ -255,20 +225,45 @@ class WCJ_Reports_Monthly_Sales {
255
  $total_orders_sum_average_array[] = ( $average_result > 0 ? $report_currency . ' ' . number_format( $average_result, 2, '.', ',' ) : '-' );
256
 
257
  // Currency Rates
258
- // if ( isset( $_GET['show_rates'] ) ) {
259
- ksort( $current_months_averages, true );
260
- // $currency_rates_html = '<pre style="font-size:8px;">' . print_r( $current_months_averages, true ) . '</pre>';
261
- $currency_rates_html = '<pre style="font-size:x-small;">';
262
- foreach ( $current_months_averages as $currency_from => $currencies_to ) {
263
- foreach ( $currencies_to as $currency_to => $rate ) {
264
- if ( $currency_from != $currency_to ) {
265
- $currency_rates_html .= $currency_from . $currency_to . '~' . number_format( $rate, 4 ) . '<br>';
266
- }
 
267
  }
268
  }
269
- $currency_rates_html .= '</pre>';
270
- // }
271
  $currency_rates_array[] = $currency_rates_html;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
272
  }
273
 
274
  // Totals
@@ -278,9 +273,12 @@ class WCJ_Reports_Monthly_Sales {
278
  $total_orders_average_array[] = ( $total_months_days > 0 ? number_format( ( $total_orders_total / $total_months_days ), 2, '.', ',' ) : '-' );
279
  $total_orders_sum_array[] = $report_currency . ' ' . number_format( $total_orders_sum_total, 2, '.', ',' );
280
  $total_orders_sum_excl_tax_array[] = $report_currency . ' ' . number_format( $total_orders_sum_excl_tax_total, 2, '.', ',' );
281
- $total_orders_sum_average_order_array[] = ( $total_orders_total > 0 ? $report_currency . ' ' . number_format( ( $total_orders_sum_excl_tax_total / $total_orders_total ), 2, '.', ',' ) : '-' );
282
- $total_orders_sum_average_array[] = ( $total_months_days > 0 ? $report_currency . ' ' . number_format( ( $total_orders_sum_excl_tax_total / $total_months_days ), 2, '.', ',' ) : '-' );
 
 
283
  $currency_rates_array[] = '';
 
284
 
285
  // Table
286
  $table_data[] = $months_array;
@@ -292,19 +290,23 @@ class WCJ_Reports_Monthly_Sales {
292
  $table_data[] = $total_orders_sum_average_order_array;
293
  $table_data[] = $total_orders_sum_average_array;
294
  $table_data[] = $currency_rates_array;
295
- /* foreach ( $order_currencies_array as $order_currency => $total_currency_orders ) {
296
- $table_data[] = array( $order_currency . ' (' . $total_currency_orders . ')' );
297
- } */
298
 
299
  $execution_time_end = microtime( true );
300
 
301
  // HTML
302
  $html = '';
303
  $menu = '';
 
304
  $menu .= '<ul class="subsubsub">';
305
- $menu .= '<li><a href="' . add_query_arg( 'year', date( 'Y' ) ) . '" class="' . ( ( $this->year == date( 'Y' ) ) ? 'current' : '' ) . '">' . date( 'Y' ) . '</a> | </li>';
306
- $menu .= '<li><a href="' . add_query_arg( 'year', ( date( 'Y' ) - 1 ) ) . '" class="' . ( ( $this->year == ( date( 'Y' ) - 1 ) ) ? 'current' : '' ) . '">' . ( date( 'Y' ) - 1 ) . '</a> | </li>';
 
 
 
 
307
  $menu .= '</ul>';
 
308
  $menu .= '<br class="clear">';
309
  $html .= $menu;
310
  $html .= '<h4>' . __( 'Report currency', 'woocommerce-jetpack' ) . ': ' . $report_currency . '</h4>';
@@ -312,6 +314,7 @@ class WCJ_Reports_Monthly_Sales {
312
  for ( $i = 1; $i <= 12; $i++ ) {
313
  $months_styles[] = 'width:6%;';
314
  }
 
315
  $html .= wcj_get_table_html( $table_data, array(
316
  'table_class' => 'widefat striped',
317
  'table_heading_type' => 'horizontal',
@@ -323,8 +326,13 @@ class WCJ_Reports_Monthly_Sales {
323
  ) );
324
  $html .= '<p style="font-size:x-small;"><em>' . sprintf( __( 'Report generated in: %s s', 'woocommerce-jetpack' ),
325
  number_format( ( $execution_time_end - $execution_time_start ), 2, '.', ',' ) ) . '</em></p>';
326
- $html .= '<form method="post" action="">' . '<input name="wcj_reset_currency_rates" type="submit" class="button button-primary" value="' . __( 'Reset Currency Rates', 'woocommerce-jetpack' ) . '">' . '</form>';
327
- // $html .= '<pre>' . print_r( get_option( 'wcj_reports_currency_rates' ), true ) . '</pre>';
 
 
 
 
 
328
  return $html;
329
  }
330
  }
1
  <?php
2
  /**
3
+ * Booster for WooCommerce - Reports - Monthly Sales (with Currency Conversion)
4
  *
5
+ * @version 2.9.1
6
  * @since 2.4.7
7
  * @author Algoritmika Ltd.
8
  */
26
  /**
27
  * get_report.
28
  *
29
+ * @version 2.9.1
30
  * @since 2.4.7
31
  */
32
  function get_report() {
33
  $html = '';
34
+ if ( isset( $_POST['wcj_save_currency_rates'] ) && isset( $_POST['wcj_save_currency_rates_array'] ) && is_array( $_POST['wcj_save_currency_rates_array'] ) ) {
35
+ // Save rates
36
+ update_option( 'wcj_reports_currency_rates', array_replace_recursive( get_option( 'wcj_reports_currency_rates', array() ), $_POST['wcj_save_currency_rates_array'] ) );
37
+ $html .= '<div class="notice notice-success is-dismissible"><p><strong>' . __( 'Currency rates saved.', 'woocommerce-jetpack' ) . '</strong></p></div>';
38
+ } elseif ( isset( $_POST['wcj_reset_currency_rates'] ) ) {
39
+ // Delete rates
40
  delete_option( 'wcj_reports_currency_rates' );
41
+ $html .= '<div class="notice notice-success is-dismissible"><p><strong>' . __( 'Currency rates deleted.', 'woocommerce-jetpack' ) . '</strong></p></div>';
42
  }
43
+ // Show report
44
+ $this->year = isset( $_GET['year'] ) ? $_GET['year'] : date( 'Y' );
45
  $html .= $this->get_monthly_sales_report();
46
  return $html;
47
  }
48
 
49
  /*
50
+ * get_saved_exchange_rate.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  *
52
+ * @version 2.9.1
53
  * @since 2.4.7
 
54
  */
55
+ function get_saved_exchange_rate( $currency_from, $currency_to, $start_date, $end_date ) {
56
  // Same currency
57
  if ( $currency_from == $currency_to ) {
58
  return 1.0;
59
  }
60
  // Saved values
61
  $saved_rates = get_option( 'wcj_reports_currency_rates', array() );
62
+ if ( ! empty( $saved_rates ) ) {
63
+ if ( isset( $saved_rates[ $currency_from ][ $currency_to ][ $start_date ][ $end_date ] ) ) {
64
+ return $saved_rates[ $currency_from ][ $currency_to ][ $start_date ][ $end_date ];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  }
 
 
 
 
 
 
 
66
  }
67
+ // Fallback rate
68
+ return 1.0;
69
  }
70
 
71
  /*
72
  * get_monthly_sales_report.
73
  *
74
+ * @version 2.9.1
75
  * @since 2.4.7
76
+ * @todo (maybe) visible rows selection by admin (as option)
77
+ * @todo (maybe) take not monthly average, but "Close" of closest day (probably create new "Daily Sales (with Currency Conversion)" report)
78
+ * @todo (maybe) option to grab average monthly exchange rates from some data server (unfortunately discontinued by the Yahoo)
79
  */
80
  function get_monthly_sales_report() {
81
 
90
  $total_orders_sum_average_order_array = array( __( 'Average / Order (excl. TAX)', 'woocommerce-jetpack' ) );
91
  $total_orders_sum_average_array = array( __( 'Average / Day (excl. TAX)', 'woocommerce-jetpack' ) );
92
  $currency_rates_array = array( __( 'Currency Rates', 'woocommerce-jetpack' ) );
93
+ $orders_by_currency_array = array( __( 'Orders by Currency', 'woocommerce-jetpack' ) );
94
 
95
  $total_months_days = 0;
96
  $total_orders_total = 0;
97
  $total_orders_sum_total = 0;
98
  $total_orders_sum_excl_tax_total = 0;
99
 
100
+ $order_currencies_array = array();
101
+ $order_currencies_array_totals = array();
102
+ $report_currency = ( isset( $_GET['currency'] ) && 'merge' != $_GET['currency'] ) ? $_GET['currency'] : get_woocommerce_currency();
103
+ $block_size = 256;
104
+ $table_data = array();
105
+ $do_forecast = ( 'yes' === get_option( 'wcj_reports_orders_monthly_sales_forecast', 'no' ) );
106
+ $do_include_today = ( 'yes' === get_option( 'wcj_reports_orders_monthly_sales_include_today', 'no' ) );
107
  for ( $i = 1; $i <= 12; $i++ ) {
108
  $current_months_averages = array();
109
+ $total_orders = 0;
110
+ $total_orders_sum = 0;
111
  $total_orders_sum_excl_tax = 0;
112
+ $offset = 0;
113
+ $is_current_month = ( $i == date( 'm' ) && $this->year == date( 'Y' ) );
114
+ $day_for_average = ( $is_current_month ?
115
+ ( $do_include_today ? date( 'd' ) : ( date( 'd' ) - 1 ) ) : // today or yesterday
116
+ date( 't', strtotime( $this->year . '-' . sprintf( '%02d', $i ) . '-' . '01' ) ) // last day of the month
117
+ );
118
  if ( 0 == $day_for_average ) {
119
  $months_array[] = date_i18n( 'F', mktime( 0, 0, 0, $i, 1, $this->year ) );
120
  $months_days_array[] = '-';
125
  $total_orders_sum_average_order_array[] = '-';
126
  $total_orders_sum_average_array[] = '-';
127
  $currency_rates_array[] = '';
128
+ $orders_by_currency_array[] = '';
129
  continue;
130
  }
131
  while( true ) {
136
  'orderby' => 'date',
137
  'order' => 'DESC',
138
  'offset' => $offset,
139
+ 'fields' => 'ids',
140
  'date_query' => array(
141
  'after' => array(
142
  'year' => $this->year,
152
  ),
153
  );
154
  $loop_orders = new WP_Query( $args_orders );
155
+ if ( ! $loop_orders->have_posts() ) {
156
+ break;
157
+ }
158
+ foreach ( $loop_orders->posts as $order_id ) {
159
+ $order = wc_get_order( $order_id );
160
  $order_currency = wcj_get_order_currency( $order );
161
+ // Orders by currency by month
162
+ if ( ! isset( $order_currencies_array[ $i ][ $order_currency ] ) ) {
163
+ $order_currencies_array[ $i ][ $order_currency ] = 0;
164
  }
165
+ $order_currencies_array[ $i ][ $order_currency ]++;
166
+ // Orders by currency total
167
+ if ( ! isset( $order_currencies_array_totals[ $order_currency ] ) ) {
168
+ $order_currencies_array_totals[ $order_currency ] = 0;
169
+ }
170
+ $order_currencies_array_totals[ $order_currency ]++;
171
  $total_orders++;
172
  $order_total = $order->get_total();
173
  $order_total_excl_tax = $order->get_total() - $order->get_total_tax();
174
  if ( ! isset( $current_months_averages[ $order_currency ][ $report_currency ] ) ) {
175
  $start_date = $this->year . '-' . sprintf( '%02d', $i ) . '-' . '01';
176
  $end_date = date( 'Y-m-t', strtotime( $start_date ) );
177
+ $the_rate = $this->get_saved_exchange_rate( $order_currency, $report_currency, $start_date, $end_date );
178
+ if ( 0 == $the_rate ) {
179
+ $the_rate = 1;
 
 
 
 
 
 
180
  }
181
  $current_months_averages[ $order_currency ][ $report_currency ] = $the_rate;
182
  }
183
+ $total_orders_sum += $order_total * $current_months_averages[ $order_currency ][ $report_currency ];
184
  $total_orders_sum_excl_tax += $order_total_excl_tax * $current_months_averages[ $order_currency ][ $report_currency ];
185
+ }
186
  $offset += $block_size;
187
  }
188
 
189
  // Month Name
190
+ $months_array[] = date_i18n( 'F', mktime( 0, 0, 0, $i, 1, $this->year ) );
191
  // Month Days
192
  $months_days_array[] = ( date( 'm' ) >= $i || $this->year != date( 'Y' ) ? $day_for_average : '-' );
193
  $total_months_days += ( date( 'm' ) >= $i || $this->year != date( 'Y' ) ? $day_for_average : 0 );
194
 
195
  // Sales
196
+ $average_sales_result = $total_orders / $day_for_average;
197
+ if ( $is_current_month && $do_forecast ) {
198
+ $forecast_total_orders = ( $average_sales_result ) * ( date( 't', strtotime( $this->year . '-' . sprintf( '%02d', $i ) . '-' . '01' ) ) );
199
+ }
200
+ $total_orders_array[] = ( $total_orders > 0 ? $total_orders . ( $is_current_month && $do_forecast ?
201
+ ' <span style="font-size:smaller;">(' . round( $forecast_total_orders ) . ')</span>' : ''
202
+ ) : '-'
203
+ );
204
  $total_orders_total += $total_orders;
205
  // Sales Average
 
206
  $total_orders_average_array[] = ( $average_sales_result > 0 ? number_format( $average_sales_result, 2, '.', ',' ) : '-' );
207
 
208
  // Sum
209
  $total_orders_sum_array[] = ( $total_orders_sum > 0 ? $report_currency . ' ' . number_format( $total_orders_sum, 2, '.', ',' ) : '-' );
210
  $total_orders_sum_total += $total_orders_sum;
211
  // Sum excl. Tax
212
+ $total_orders_sum_excl_tax_array[] = ( $total_orders_sum_excl_tax > 0 ?
213
+ $report_currency . ' ' . number_format( $total_orders_sum_excl_tax, 2, '.', ',' ) . ( $is_current_month && $do_forecast ?
214
+ ' <span style="font-size:smaller;">(' . $report_currency . ' ' .
215
+ number_format( $forecast_total_orders * $total_orders_sum_excl_tax / $total_orders, 2 ) . ')</span>' : ''
216
+ ) : '-'
217
+ );
218
+ $total_orders_sum_excl_tax_total += $total_orders_sum_excl_tax;
219
+
220
  // Order Average
221
  $total_orders_sum_average_order_array[] = ( $total_orders_sum_excl_tax > 0 && $total_orders > 0 ?
222
  $report_currency . ' ' . number_format( $total_orders_sum_excl_tax / $total_orders, 2, '.', ',' ) : '-' );
225
  $total_orders_sum_average_array[] = ( $average_result > 0 ? $report_currency . ' ' . number_format( $average_result, 2, '.', ',' ) : '-' );
226
 
227
  // Currency Rates
228
+ ksort( $current_months_averages );
229
+ $currency_rates_html = '<pre style="font-size:x-small;">';
230
+ foreach ( $current_months_averages as $currency_from => $currencies_to ) {
231
+ foreach ( $currencies_to as $currency_to => $rate ) {
232
+ if ( $currency_from != $currency_to ) {
233
+ $currency_rates_html .= $currency_from . $currency_to . ' ' .
234
+ '<input style="width:50px;font-size:x-small;" type="number" ' .
235
+ 'name="wcj_save_currency_rates_array[' . $currency_from . '][' . $currency_to . '][' . $start_date . '][' . $end_date . ']" ' .
236
+ 'value="' . $rate . '" step="0.000001">' .
237
+ '<br>';
238
  }
239
  }
240
+ }
241
+ $currency_rates_html .= '</pre>';
242
  $currency_rates_array[] = $currency_rates_html;
243
+
244
+ // Orders by Currency by Month
245
+ if ( isset( $order_currencies_array[ $i ] ) ) {
246
+ ksort( $order_currencies_array[ $i ] );
247
+ $orders_by_currency_html = '<pre style="font-size:x-small;">';
248
+ foreach ( $order_currencies_array[ $i ] as $_order_currency => $total_orders_by_currency ) {
249
+ $orders_by_currency_html .= $_order_currency . ' ' . $total_orders_by_currency . '<br>';
250
+ }
251
+ $orders_by_currency_html .= '</pre>';
252
+ $orders_by_currency_array[] = $orders_by_currency_html;
253
+ } else {
254
+ $orders_by_currency_array[] = '';
255
+ }
256
+ }
257
+
258
+ // Orders by Currency Total
259
+ $order_currencies_totals_html = '';
260
+ if ( ! empty ( $order_currencies_array_totals ) ) {
261
+ ksort( $order_currencies_array_totals );
262
+ $order_currencies_totals_html = '<pre style="font-size:x-small;">';
263
+ foreach ( $order_currencies_array_totals as $_order_currency => $total_orders_by_currency ) {
264
+ $order_currencies_totals_html .= $_order_currency . ' ' . $total_orders_by_currency . '<br>';
265
+ }
266
+ $order_currencies_totals_html .= '</pre>';
267
  }
268
 
269
  // Totals
273
  $total_orders_average_array[] = ( $total_months_days > 0 ? number_format( ( $total_orders_total / $total_months_days ), 2, '.', ',' ) : '-' );
274
  $total_orders_sum_array[] = $report_currency . ' ' . number_format( $total_orders_sum_total, 2, '.', ',' );
275
  $total_orders_sum_excl_tax_array[] = $report_currency . ' ' . number_format( $total_orders_sum_excl_tax_total, 2, '.', ',' );
276
+ $total_orders_sum_average_order_array[] = ( $total_orders_total > 0 ?
277
+ $report_currency . ' ' . number_format( ( $total_orders_sum_excl_tax_total / $total_orders_total ), 2, '.', ',' ) : '-' );
278
+ $total_orders_sum_average_array[] = ( $total_months_days > 0 ?
279
+ $report_currency . ' ' . number_format( ( $total_orders_sum_excl_tax_total / $total_months_days ), 2, '.', ',' ) : '-' );
280
  $currency_rates_array[] = '';
281
+ $orders_by_currency_array[] = $order_currencies_totals_html;
282
 
283
  // Table
284
  $table_data[] = $months_array;
290
  $table_data[] = $total_orders_sum_average_order_array;
291
  $table_data[] = $total_orders_sum_average_array;
292
  $table_data[] = $currency_rates_array;
293
+ $table_data[] = $orders_by_currency_array;
 
 
294
 
295
  $execution_time_end = microtime( true );
296
 
297
  // HTML
298
  $html = '';
299
  $menu = '';
300
+ $menu .= '<p>';
301
  $menu .= '<ul class="subsubsub">';
302
+ $menu .= '<li><a href="' . add_query_arg( 'year', date( 'Y' ) ) . '" class="' .
303
+ ( ( $this->year == date( 'Y' ) ) ? 'current' : '' ) . '">' . date( 'Y' ) . '</a> | </li>';
304
+ $menu .= '<li><a href="' . add_query_arg( 'year', ( date( 'Y' ) - 1 ) ) . '" class="' .
305
+ ( ( $this->year == ( date( 'Y' ) - 1 ) ) ? 'current' : '' ) . '">' . ( date( 'Y' ) - 1 ) . '</a> | </li>';
306
+ $menu .= '<li><a href="' . add_query_arg( 'year', ( date( 'Y' ) - 2 ) ) . '" class="' .
307
+ ( ( $this->year == ( date( 'Y' ) - 2 ) ) ? 'current' : '' ) . '">' . ( date( 'Y' ) - 2 ) . '</a> | </li>';
308
  $menu .= '</ul>';
309
+ $menu .= '</p>';
310
  $menu .= '<br class="clear">';
311
  $html .= $menu;
312
  $html .= '<h4>' . __( 'Report currency', 'woocommerce-jetpack' ) . ': ' . $report_currency . '</h4>';
314
  for ( $i = 1; $i <= 12; $i++ ) {
315
  $months_styles[] = 'width:6%;';
316
  }
317
+ $html .= '<form method="post" action="">';
318
  $html .= wcj_get_table_html( $table_data, array(
319
  'table_class' => 'widefat striped',
320
  'table_heading_type' => 'horizontal',
326
  ) );
327
  $html .= '<p style="font-size:x-small;"><em>' . sprintf( __( 'Report generated in: %s s', 'woocommerce-jetpack' ),
328
  number_format( ( $execution_time_end - $execution_time_start ), 2, '.', ',' ) ) . '</em></p>';
329
+ $html .= '<p><input name="wcj_save_currency_rates" type="submit" class="button button-primary" value="' .
330
+ __( 'Save Currency Rates', 'woocommerce-jetpack' ) . '"></p>';
331
+ $html .= '</form>';
332
+ $html .= '<form method="post" action="">' .
333
+ '<input name="wcj_reset_currency_rates" type="submit" class="button button-primary" value="' .
334
+ __( 'Reset Currency Rates', 'woocommerce-jetpack' ) . '" onclick="return confirm(\'' . __( 'Are you sure?', 'woocommerce-jetpack' ) . '\')">' .
335
+ '</form>';
336
  return $html;
337
  }
338
  }
includes/reports/wcj-class-reports-stock.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Reports - Stock
4
  *
5
- * @version 2.7.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -17,56 +17,47 @@ class WCJ_Reports_Stock {
17
 
18
  /**
19
  * Constructor.
 
 
 
 
20
  */
21
  function __construct( $args = null ) {
22
- $this->ranges_in_days = array( 7, 14, 30, 60, 90, 180, 360, );
23
- $this->report_id = isset( $args['report_id'] ) ? $args['report_id'] : 'on_stock';
24
- $this->range_days = isset( $args['range_days'] ) ? $args['range_days'] : 30;
25
- $this->reports_info = array(
26
- 'on_stock' => array(
27
- 'id' => 'on_stock',
28
- 'title' => __( 'All Products on Stock', 'woocommerce-jetpack' ),
29
- 'desc' => __( 'Report shows all products that are on stock and some sales info.', 'woocommerce-jetpack' ),
30
  ),
31
- 'understocked' => array(
32
- 'id' => 'understocked',
33
- 'title' => __( 'Understocked', 'woocommerce-jetpack' ),
34
- 'desc' => __( 'Report shows all products that are low in stock calculated on product\'s sales data.', 'woocommerce-jetpack' )
35
- . ' '
36
- . __( 'Threshold for minimum stock is equal to half of the sales in selected days range.', 'woocommerce-jetpack' ),
37
  ),
38
- 'overstocked' => array(
39
- 'id' => 'overstocked',
40
- 'title' => __( 'Overstocked', 'woocommerce-jetpack' ),
41
- 'desc' => __( 'Report shows all products that are on stock, but have no sales in selected period. Only products added before the start date of selected period are accounted.', 'woocommerce-jetpack' )
42
- . ' '
43
- . __( '', 'woocommerce-jetpack' ),
44
  ),
45
  );
46
- $this->start_time = microtime( true );
47
- $products_info = array();
48
  $this->gather_products_data( $products_info );
49
- //$this->start_time = microtime( true );
50
- //if ( 'most_stock_price' !== $this->report )
51
- $this->gather_orders_data( $products_info );
52
- //wp_reset_postdata();
53
  $info = $this->get_stock_summary( $products_info );
54
- if ( 'on_stock' === $this->report_id || 'overstocked' === $this->report_id )
55
  $this->sort_products_info( $products_info, 'stock_price' );
56
- //if ( 'sales_up' === $this->report_id )
57
- //$this->sort_products_info( $products_info, 'sales_in_period', $this->range_days );
58
- //if ( 'good_sales_low_stock' === $this->report_id )
59
- //$this->sort_products_info( $products_info, 'stock_to_sales', $this->range_days );
60
- if ( 'understocked' === $this->report_id )
61
  $this->sort_products_info( $products_info, 'sales_in_period', $this->range_days );
62
-
63
- $this->data_products = $products_info;
64
- $this->data_summary = $info;
65
- $this->data_reports = $this->reports_info[ $this->report_id ];
66
-
67
- //echo '<p>' . __( 'Here you can generate reports. Some reports are generated using all your orders and products, so if you have a lot of them - it may take a while.', 'woocommerce-jetpack' ) . '</p>';
68
- //if ( 'yes' === get_option( 'woocommerce_manage_stock' ) ) {
69
- //echo '<p>' . __( 'Please enable stock management in <strong>WooCommerce > Settings > Products > Inventory</strong> to generate stock based reports.', 'woocommerce-jetpack' ) . '</p>';
70
  }
71
 
72
  /*
@@ -74,7 +65,6 @@ class WCJ_Reports_Stock {
74
  */
75
  function get_submenu_html() {
76
  $html = '';
77
- //$html = '<strong>' . __( 'Sales data range:', 'woocommerce-jetpack' ) . '</strong>';
78
  $html .= '<ul class="subsubsub">';
79
  foreach ( $this->ranges_in_days as $the_period ) {
80
  $html .= '<li>';
@@ -92,47 +82,40 @@ class WCJ_Reports_Stock {
92
  /*
93
  * gather_products_data.
94
  *
95
- * @version 2.7.0
96
- * @todo variable products?
97
  */
98
  function gather_products_data( &$products_info ) {
99
-
100
- $offset = 0;
101
- $block_size = 96;
102
  while( true ) {
103
  $args = array(
104
  'post_type' => 'product',
105
  'posts_per_page' => $block_size,
106
  'offset' => $offset,
 
107
  );
108
  $loop = new WP_Query( $args );
109
- if ( ! $loop->have_posts() ) break;
110
- while ( $loop->have_posts() ) : $loop->the_post();
111
-
112
- $the_ID = get_the_ID();
113
- $the_product = wc_get_product( $the_ID );
114
- $the_price = $the_product->get_price();
115
- $the_stock = wcj_get_product_total_stock( $the_product );
116
- //if ( 0 == $the_stock )
117
- //$the_stock = get_post_meta( $the_ID, '_stock', true );
118
- $the_title = get_the_title();
119
- $the_categories = ( WCJ_IS_WC_VERSION_BELOW_3 ? $the_product->get_categories() : wc_get_product_category_list( $the_ID ) );
120
- $the_date = get_the_date();
121
- $the_permalink = get_the_permalink();
122
-
123
- $post_custom = get_post_custom( $the_ID );
124
- $total_sales = isset( $post_custom['total_sales'][0] ) ? $post_custom['total_sales'][0] : 0;
125
-
126
- //$available_variations = $the_product->get_available_variations();
127
-
128
- $purchase_price = wc_get_product_purchase_price( $the_ID );
129
-
130
  $sales_in_day_range = array();
131
- foreach( $this->ranges_in_days as $the_range )
132
  $sales_in_day_range[ $the_range ] = 0;
133
-
134
- $products_info[$the_ID] = array(
135
- 'ID' => $the_ID,
136
  'title' => $the_title,
137
  'category' => $the_categories,
138
  'permalink' => $the_permalink,
@@ -141,14 +124,11 @@ class WCJ_Reports_Stock {
141
  'stock_price' => $the_price * $the_stock,
142
  'total_sales' => $total_sales,
143
  'date_added' => $the_date,
144
-
145
  'purchase_price' => $purchase_price,
146
-
147
  'last_sale' => 0,
148
  'sales_in_period' => $sales_in_day_range,
149
  );
150
-
151
- endwhile;
152
  $offset += $block_size;
153
  }
154
  }
@@ -156,14 +136,12 @@ class WCJ_Reports_Stock {
156
  /*
157
  * gather_orders_data.
158
  *
159
- * @version 2.5.0
160
  */
161
  function gather_orders_data( &$products_info ) {
162
-
163
- $offset = 0;
164
- $block_size = 96;
165
  while( true ) {
166
-
167
  $args_orders = array(
168
  'post_type' => 'shop_order',
169
  'post_status' => 'wc-completed',
@@ -177,106 +155,68 @@ class WCJ_Reports_Stock {
177
  'after' => $this->range_days . ' days ago',
178
  ),
179
  ),
 
180
  );
181
-
182
- //$one_day_seconds = ( 24 * 60 * 60 );
183
- //$now_time = time();
184
-
185
- $the_period = $this->range_days;
186
-
187
  $loop_orders = new WP_Query( $args_orders );
188
- if ( ! $loop_orders->have_posts() ) break;
189
- while ( $loop_orders->have_posts() ) : $loop_orders->the_post();
190
-
191
- $order_id = $loop_orders->post->ID;
192
- $order = new WC_Order( $order_id );
193
  $items = $order->get_items();
194
-
195
- //$the_timestamp = get_the_time( 'U' );
196
- //$order_age = ( $now_time - $the_timestamp );
197
-
198
-
199
  foreach ( $items as $item ) {
200
-
201
- //$products_info_sales_in_period = $products_info[$item['product_id']]['sales_in_period'];
202
- //echo '<pre>' . print_r( $products_info_sales_in_period, true ) . '</pre>';
203
-
204
- //if ( ! empty( $products_info_sales_in_period ) ) {
205
-
206
- //foreach ( $products_info_sales_in_period as $the_period => $the_value ) {
207
- //if ( $order_age < ( $the_period * $one_day_seconds ) ) {
208
- if ( ! isset( $products_info[ $item['product_id'] ] ) ) {
209
- // Deleted product
210
- $products_info[ $item['product_id'] ] = array(
211
- 'ID' => $item['product_id'],
212
- 'title' => $item['name'] . ' (' . __( 'deleted', 'woocommerce-jetpack' ) . ')',
213
- 'category' => '',
214
- 'permalink' => '',
215
- 'price' => '',
216
- 'stock' => '',
217
- 'stock_price' => '',
218
- 'total_sales' => '',
219
- 'date_added' => '',
220
- 'purchase_price' => '',
221
- 'last_sale' => 0,
222
- 'sales_in_period' => array( $the_period => 0 ),
223
- );
224
- }
225
- $products_info[ $item['product_id'] ]['sales_in_period'][ $the_period ] += $item['qty'];
226
- //}
227
- //}
228
- //}
229
-
230
  if ( 0 == $products_info[ $item['product_id'] ]['last_sale'] ) {
231
- $products_info[ $item['product_id'] ]['last_sale'] = get_the_time( 'U' );//$the_timestamp;
232
  }
233
-
234
  }
235
-
236
- endwhile;
237
-
238
  $offset += $block_size;
239
  }
240
-
241
- //wp_reset_query();
242
  }
243
 
244
  /*
245
  * get_stock_summary.
246
  */
247
  function get_stock_summary( $products_info ) {
248
-
249
- $info = array();
250
-
251
- $info['total_stock_price'] = 0;
252
- $info['stock_price_average'] = 0;
253
- $info['stock_average'] = 0;
254
  $info['sales_in_period_average'][ $this->range_days ] = 0;
255
- $stock_non_zero_number = 0;
256
-
257
  foreach ( $products_info as $product_info ) {
258
-
259
- /**if ( $product_info['sales_in_period'][$this->period] > 0 )
260
- $products_info[ $product_info['ID'] ]['stock_to_sales'] = $product_info['stock'] / $product_info['sales_in_period'][$this->period];
261
- else
262
- $products_info[ $product_info['ID'] ]['stock_to_sales'] = 0;/**/
263
-
264
  if ( $product_info['stock_price'] > 0 ) {
265
  $info['stock_price_average'] += $product_info['stock_price'];
266
  $info['stock_average'] += $product_info['stock'];
267
  $info['sales_in_period_average'][ $this->range_days ] += $product_info['sales_in_period'][ $this->range_days ];
268
  $stock_non_zero_number++;
269
  }
270
-
271
  $info['total_stock_price'] += $product_info['stock_price'];
272
  }
273
-
274
  if ( 0 != $stock_non_zero_number ) {
275
- $info['stock_price_average'] /= $stock_non_zero_number;
276
- $info['stock_average'] /= $stock_non_zero_number;
277
  $info['sales_in_period_average'][ $this->range_days ] /= $stock_non_zero_number;
278
  }
279
-
280
  return $info;
281
  }
282
 
@@ -286,8 +226,7 @@ class WCJ_Reports_Stock {
286
  function sort_products_info( &$products_info, $field_name, $second_field_name = '', $order_of_sorting = SORT_DESC ) {
287
  $field_name_array = array();
288
  foreach ( $products_info as $key => $row ) {
289
- if ( '' == $second_field_name ) $field_name_array[ $key ] = $row[ $field_name ];
290
- else $field_name_array[ $key ] = $row[ $field_name ][ $second_field_name ];
291
  }
292
  array_multisort( $field_name_array, $order_of_sorting, $products_info );
293
  }
@@ -295,22 +234,18 @@ class WCJ_Reports_Stock {
295
  /*
296
  * get_report_html.
297
  *
298
- * @version 2.3.0
299
  */
300
  function get_report_html() {
301
-
302
  $products_info = $this->data_products;
303
- $info = $this->data_summary;
304
- $report_info = $this->data_reports;
305
-
306
  $html = '';
307
-
308
  // Style
309
  $html .= '<style>';
310
  $html .= '.wcj_report_table_sales_columns { background-color: #F6F6F6; }';
311
  $html .= '.widefat { width: 90%; }';
312
  $html .= '</style>';
313
-
314
  // Products table - header
315
  $html .= '<table class="widefat"><tbody>';
316
  $html .= '<tr>';
@@ -321,38 +256,32 @@ class WCJ_Reports_Stock {
321
  $html .= '<th>' . __( 'Stock', 'woocommerce-jetpack' ) . '</th>';
322
  $html .= '<th>' . __( 'Stock price', 'woocommerce-jetpack' ) . '</th>';
323
  $html .= '<th>' . __( 'Total stock price', 'woocommerce-jetpack' ) . '</th>';
324
-
325
  $html .= '<th class="wcj_report_table_sales_columns">' . __( 'Last sale', 'woocommerce-jetpack' ) . '</th>';
326
  $html .= '<th class="wcj_report_table_sales_columns">' . sprintf( __( 'Sales in last %s days', 'woocommerce-jetpack' ), $this->range_days ) . '</th>';
327
  $html .= '<th class="wcj_report_table_sales_columns">' . __( 'Total sales', 'woocommerce-jetpack' ) . '</th>';
328
-
329
- if ( 'understocked' === $this->report_id )
330
  $html .= '<th>' . __( 'Stock to minimum', 'woocommerce-jetpack' ) . '</th>';
331
-
332
  $html .= '</tr>';
333
-
334
  // Products table - info loop
335
- $total_current_stock_price = 0;
336
- $product_counter = 0;
 
337
  foreach ( $products_info as $product_info ) {
338
-
339
  if (
340
- ( ( 'on_stock' === $report_info['id'] ) &&
341
- ( $product_info['stock'] != 0 ) ) ||
342
-
343
- ( ( 'overstocked' === $report_info['id'] ) &&
344
- ( $product_info['stock'] > 0 ) &&
345
- //( 0 == $product_info['total_sales'] ) &&
346
- ( ( current_time( 'timestamp' ) - strtotime( $product_info['date_added'] ) ) > $this->range_days * 24 * 60 * 60 ) &&
347
- //( $product_info['sales_in_period'][ $this->range_days ] * 12 < $product_info['stock'] ) ) ||
348
- ( 0 === $product_info['sales_in_period'][ $this->range_days ] ) ) ||
349
-
350
- ( ( 'understocked' === $report_info['id'] ) &&
351
- ( '' !== $product_info['stock'] ) &&
352
- ( $product_info['sales_in_period'][ $this->range_days ] > 1 ) &&
353
- ( $product_info['stock'] < ( $product_info['sales_in_period'][ $this->range_days ] / 2 ) ) )
354
- ) {
355
-
356
  $total_current_stock_price += $product_info['stock_price'];
357
  $product_counter++;
358
  $html .= '<tr>';
@@ -360,55 +289,49 @@ class WCJ_Reports_Stock {
360
  $html .= '<th>' . '<a href='. $product_info['permalink'] . '>' . $product_info['title'] . '</a>' . '</th>';
361
  $html .= '<th>' . '<a href='. $product_info['permalink'] . '>' . $product_info['category'] . '</a>' . '</th>';
362
  $purchase_price_html = ( $product_info['purchase_price'] > 0 ) ?
363
- '<br><em>' . __( 'purchase price:', 'woocommerce-jetpack' ) . '</em>' . ' ' . wc_price( $product_info['purchase_price'] ) :
364
- '';
365
  $html .= '<td>' . wc_price( $product_info['price'] ) . $purchase_price_html . '</td>';
366
  $html .= '<td>' . $product_info['stock'] . '</td>';
367
  $purchase_stock_price_html = ( $product_info['purchase_price'] > 0 ) ?
368
- '<br><em>' . __( 'stock purchase price:', 'woocommerce-jetpack' ) . '</em>' . ' ' . wc_price( $product_info['purchase_price'] * $product_info['stock'] ) :
369
- '';
370
  $html .= '<td>' . wc_price( $product_info['stock_price'] ) . $purchase_stock_price_html . '</td>';
371
  $html .= '<td>' . wc_price( $total_current_stock_price ) . '</td>';
372
-
373
  $html .= '<td class="wcj_report_table_sales_columns">';
374
  if ( 0 == $product_info['last_sale'] ) $html .= __( 'No sales yet', 'woocommerce-jetpack' );
375
  else $html .= date_i18n( get_option( 'date_format' ), $product_info['last_sale'] );
376
  $html .= '</td>';
377
-
378
  $profit_html = ( $product_info['purchase_price'] > 0 && $product_info['sales_in_period'][ $this->range_days ] > 0 ) ?
379
  '<br><em>' . __( 'profit:', 'woocommerce-jetpack' ) . '</em>' . ' '
380
  . wc_price( ( $product_info['price'] - $product_info['purchase_price'] ) * $product_info['sales_in_period'][ $this->range_days ] ) :
381
  '';
382
  $html .= '<td class="wcj_report_table_sales_columns">' . $product_info['sales_in_period'][ $this->range_days ] . $profit_html . '</td>';
383
  $html .= '<td class="wcj_report_table_sales_columns">' . $product_info['total_sales'] . '</td>';
384
-
385
-
386
  if ( $product_info['sales_in_period'][ $this->range_days ] > 0 ) {
387
  $stock_to_minimum = ( $product_info['sales_in_period'][ $this->range_days ] / 2 ) - $product_info['stock'];
388
  $stock_to_minimum = ( $stock_to_minimum > 0 ) ? round( $stock_to_minimum ) : '';
 
 
389
  }
390
- else $stock_to_minimum = '';
391
-
392
- if ( 'understocked' === $this->report_id )
393
  $html .= '<td>' . $stock_to_minimum . '</td>';
394
-
395
  $html .= '</tr>';
396
  }
397
  }
398
  $html .= '</tbody></table>';
399
-
400
  $html_header = '<h4>' . $report_info['title'] . ': ' . $report_info['desc'] . '</h4>';
401
-
402
  $html_header .= '<table class="widefat" style="width:30% !important;"><tbody>';
403
  $html_header .= '<tr>' . '<th>' . __( 'Total current stock value', 'woocommerce-jetpack' ) . '</th>' . '<td>' . wc_price( $total_current_stock_price ) . '</td>' . '</tr>';
404
  $html_header .= '<tr>' . '<th>' . __( 'Total stock value', 'woocommerce-jetpack' ) . '</th>' . '<td>' . wc_price( $info['total_stock_price'] ) . '</td>' . '</tr>';
405
  $html_header .= '<tr>' . '<th>' . __( 'Product stock value average', 'woocommerce-jetpack' ) . '</th>' . '<td>' . wc_price( $info['stock_price_average'] ) . '</td>' . '</tr>';
406
  $html_header .= '<tr>' . '<th>' . __( 'Product stock average', 'woocommerce-jetpack' ) . '</th>' . '<td>' . number_format( $info['stock_average'], 2, '.', '' ) . '</td>' . '</tr>';
 
 
 
407
  $html_header .= '</tbody></table>';
408
  $html_header .= '<br class="clear">';
409
-
410
  $time_elapsed_html = '<p><em>' . __( 'Report was generated in: ', 'woocommerce-jetpack' ) . intval( microtime( true ) - $this->start_time ) . ' s' . '</em></p>';
411
-
412
  return $this->get_submenu_html() . $html_header . $html . $time_elapsed_html;
413
  }
414
  }
2
  /**
3
  * Booster for WooCommerce - Reports - Stock
4
  *
5
+ * @version 2.9.1
6
  * @author Algoritmika Ltd.
7
  */
8
 
17
 
18
  /**
19
  * Constructor.
20
+ *
21
+ * @todo (maybe) `most_stock_price`, `sales_up`, `good_sales_low_stock`
22
+ * @todo (maybe) `echo __( 'Here you can generate reports. Some reports are generated using all your orders and products, so if you have a lot of them - it may take a while.', 'woocommerce-jetpack' );`
23
+ * @todo (maybe) get_option( 'woocommerce_manage_stock' ) -> `echo __( 'Please enable stock management in <strong>WooCommerce > Settings > Products > Inventory</strong> to generate stock based reports.', 'woocommerce-jetpack' );`
24
  */
25
  function __construct( $args = null ) {
26
+ $this->ranges_in_days = array( 7, 14, 30, 60, 90, 180, 360 );
27
+ $this->report_id = isset( $args['report_id'] ) ? $args['report_id'] : 'on_stock';
28
+ $this->range_days = isset( $args['range_days'] ) ? $args['range_days'] : 30;
29
+ $this->reports_info = array(
30
+ 'on_stock' => array(
31
+ 'id' => 'on_stock',
32
+ 'title' => __( 'All Products on Stock', 'woocommerce-jetpack' ),
33
+ 'desc' => __( 'Report shows all products that are on stock and some sales info.', 'woocommerce-jetpack' ),
34
  ),
35
+ 'understocked' => array(
36
+ 'id' => 'understocked',
37
+ 'title' => __( 'Understocked', 'woocommerce-jetpack' ),
38
+ 'desc' => __( 'Report shows all products that are low in stock calculated on product\'s sales data.', 'woocommerce-jetpack' ) . ' ' .
39
+ __( 'Threshold for minimum stock is equal to half of the sales in selected days range.', 'woocommerce-jetpack' ),
 
40
  ),
41
+ 'overstocked' => array(
42
+ 'id' => 'overstocked',
43
+ 'title' => __( 'Overstocked', 'woocommerce-jetpack' ),
44
+ 'desc' => __( 'Report shows all products that are on stock, but have no sales in selected period. Only products added before the start date of selected period are accounted.', 'woocommerce-jetpack' ),
 
 
45
  ),
46
  );
47
+ $this->start_time = microtime( true );
48
+ $products_info = array();
49
  $this->gather_products_data( $products_info );
50
+ $this->gather_orders_data( $products_info );
 
 
 
51
  $info = $this->get_stock_summary( $products_info );
52
+ if ( 'on_stock' === $this->report_id || 'overstocked' === $this->report_id ) {
53
  $this->sort_products_info( $products_info, 'stock_price' );
54
+ }
55
+ if ( 'understocked' === $this->report_id ) {
 
 
 
56
  $this->sort_products_info( $products_info, 'sales_in_period', $this->range_days );
57
+ }
58
+ $this->data_products = $products_info;
59
+ $this->data_summary = $info;
60
+ $this->data_reports = $this->reports_info[ $this->report_id ];
 
 
 
 
61
  }
62
 
63
  /*
65
  */
66
  function get_submenu_html() {
67
  $html = '';
 
68
  $html .= '<ul class="subsubsub">';
69
  foreach ( $this->ranges_in_days as $the_period ) {
70
  $html .= '<li>';
82
  /*
83
  * gather_products_data.
84
  *
85
+ * @version 2.9.1
86
+ * @todo variations
87
  */
88
  function gather_products_data( &$products_info ) {
89
+ $offset = 0;
90
+ $block_size = 256;
 
91
  while( true ) {
92
  $args = array(
93
  'post_type' => 'product',
94
  'posts_per_page' => $block_size,
95
  'offset' => $offset,
96
+ 'fields' => 'ids',
97
  );
98
  $loop = new WP_Query( $args );
99
+ if ( ! $loop->have_posts() ) {
100
+ break;
101
+ }
102
+ foreach ( $loop->posts as $product_id ) {
103
+ $the_product = wc_get_product( $product_id );
104
+ $the_price = $the_product->get_price();
105
+ $the_stock = wcj_get_product_total_stock( $the_product );
106
+ $the_title = get_the_title( $product_id );
107
+ $the_categories = ( WCJ_IS_WC_VERSION_BELOW_3 ? $the_product->get_categories() : wc_get_product_category_list( $product_id ) );
108
+ $the_date = get_the_date( get_option( 'date_format' ), $product_id );
109
+ $the_permalink = get_the_permalink( $product_id );
110
+ $post_custom = get_post_custom( $product_id );
111
+ $total_sales = isset( $post_custom['total_sales'][0] ) ? $post_custom['total_sales'][0] : 0;
112
+ $purchase_price = wc_get_product_purchase_price( $product_id );
 
 
 
 
 
 
 
113
  $sales_in_day_range = array();
114
+ foreach( $this->ranges_in_days as $the_range ) {
115
  $sales_in_day_range[ $the_range ] = 0;
116
+ }
117
+ $products_info[ $product_id ] = array(
118
+ 'ID' => $product_id,
119
  'title' => $the_title,
120
  'category' => $the_categories,
121
  'permalink' => $the_permalink,
124
  'stock_price' => $the_price * $the_stock,
125
  'total_sales' => $total_sales,
126
  'date_added' => $the_date,
 
127
  'purchase_price' => $purchase_price,
 
128
  'last_sale' => 0,
129
  'sales_in_period' => $sales_in_day_range,
130
  );
131
+ }
 
132
  $offset += $block_size;
133
  }
134
  }
136
  /*
137
  * gather_orders_data.
138
  *
139
+ * @version 2.9.1
140
  */
141
  function gather_orders_data( &$products_info ) {
142
+ $offset = 0;
143
+ $block_size = 256;
 
144
  while( true ) {
 
145
  $args_orders = array(
146
  'post_type' => 'shop_order',
147
  'post_status' => 'wc-completed',
155
  'after' => $this->range_days . ' days ago',
156
  ),
157
  ),
158
+ 'fields' => 'ids',
159
  );
160
+ $the_period = $this->range_days;
 
 
 
 
 
161
  $loop_orders = new WP_Query( $args_orders );
162
+ if ( ! $loop_orders->have_posts() ) {
163
+ break;
164
+ }
165
+ foreach ( $loop_orders->posts as $order_id ) {
166
+ $order = wc_get_order( $order_id );
167
  $items = $order->get_items();
 
 
 
 
 
168
  foreach ( $items as $item ) {
169
+ if ( ! isset( $products_info[ $item['product_id'] ] ) ) {
170
+ // Deleted product
171
+ $products_info[ $item['product_id'] ] = array(
172
+ 'ID' => $item['product_id'],
173
+ 'title' => $item['name'] . ' (' . __( 'deleted', 'woocommerce-jetpack' ) . ')',
174
+ 'category' => '',
175
+ 'permalink' => '',
176
+ 'price' => '',
177
+ 'stock' => '',
178
+ 'stock_price' => '',
179
+ 'total_sales' => '',
180
+ 'date_added' => '',
181
+ 'purchase_price' => '',
182
+ 'last_sale' => 0,
183
+ 'sales_in_period' => array( $the_period => 0 ),
184
+ );
185
+ }
186
+ $products_info[ $item['product_id'] ]['sales_in_period'][ $the_period ] += $item['qty'];
 
 
 
 
 
 
 
 
 
 
 
 
187
  if ( 0 == $products_info[ $item['product_id'] ]['last_sale'] ) {
188
+ $products_info[ $item['product_id'] ]['last_sale'] = get_the_time( 'U' );
189
  }
 
190
  }
191
+ }
 
 
192
  $offset += $block_size;
193
  }
 
 
194
  }
195
 
196
  /*
197
  * get_stock_summary.
198
  */
199
  function get_stock_summary( $products_info ) {
200
+ $info = array();
201
+ $info['total_stock_price'] = 0;
202
+ $info['stock_price_average'] = 0;
203
+ $info['stock_average'] = 0;
 
 
204
  $info['sales_in_period_average'][ $this->range_days ] = 0;
205
+ $stock_non_zero_number = 0;
 
206
  foreach ( $products_info as $product_info ) {
 
 
 
 
 
 
207
  if ( $product_info['stock_price'] > 0 ) {
208
  $info['stock_price_average'] += $product_info['stock_price'];
209
  $info['stock_average'] += $product_info['stock'];
210
  $info['sales_in_period_average'][ $this->range_days ] += $product_info['sales_in_period'][ $this->range_days ];
211
  $stock_non_zero_number++;
212
  }
 
213
  $info['total_stock_price'] += $product_info['stock_price'];
214
  }
 
215
  if ( 0 != $stock_non_zero_number ) {
216
+ $info['stock_price_average'] /= $stock_non_zero_number;
217
+ $info['stock_average'] /= $stock_non_zero_number;
218
  $info['sales_in_period_average'][ $this->range_days ] /= $stock_non_zero_number;
219
  }
 
220
  return $info;
221
  }
222
 
226
  function sort_products_info( &$products_info, $field_name, $second_field_name = '', $order_of_sorting = SORT_DESC ) {
227
  $field_name_array = array();
228
  foreach ( $products_info as $key => $row ) {
229
+ $field_name_array[ $key ] = ( '' == $second_field_name ? $row[ $field_name ] : $row[ $field_name ][ $second_field_name ] );
 
230
  }
231
  array_multisort( $field_name_array, $order_of_sorting, $products_info );
232
  }
234
  /*
235
  * get_report_html.
236
  *
237
+ * @version 2.9.1
238
  */
239
  function get_report_html() {
 
240
  $products_info = $this->data_products;
241
+ $info = $this->data_summary;
242
+ $report_info = $this->data_reports;
 
243
  $html = '';
 
244
  // Style
245
  $html .= '<style>';
246
  $html .= '.wcj_report_table_sales_columns { background-color: #F6F6F6; }';
247
  $html .= '.widefat { width: 90%; }';
248
  $html .= '</style>';
 
249
  // Products table - header
250
  $html .= '<table class="widefat"><tbody>';
251
  $html .= '<tr>';
256
  $html .= '<th>' . __( 'Stock', 'woocommerce-jetpack' ) . '</th>';
257
  $html .= '<th>' . __( 'Stock price', 'woocommerce-jetpack' ) . '</th>';
258
  $html .= '<th>' . __( 'Total stock price', 'woocommerce-jetpack' ) . '</th>';
 
259
  $html .= '<th class="wcj_report_table_sales_columns">' . __( 'Last sale', 'woocommerce-jetpack' ) . '</th>';
260
  $html .= '<th class="wcj_report_table_sales_columns">' . sprintf( __( 'Sales in last %s days', 'woocommerce-jetpack' ), $this->range_days ) . '</th>';
261
  $html .= '<th class="wcj_report_table_sales_columns">' . __( 'Total sales', 'woocommerce-jetpack' ) . '</th>';
262
+ if ( 'understocked' === $this->report_id ) {
 
263
  $html .= '<th>' . __( 'Stock to minimum', 'woocommerce-jetpack' ) . '</th>';
264
+ }
265
  $html .= '</tr>';
 
266
  // Products table - info loop
267
+ $total_current_stock_price = 0;
268
+ $product_counter = 0;
269
+ $total_current_stock_purchase_price = 0;
270
  foreach ( $products_info as $product_info ) {
 
271
  if (
272
+ ( ( 'on_stock' === $report_info['id'] ) &&
273
+ ( $product_info['stock'] != 0 ) ) ||
274
+
275
+ ( ( 'overstocked' === $report_info['id'] ) &&
276
+ ( $product_info['stock'] > 0 ) &&
277
+ ( ( current_time( 'timestamp' ) - strtotime( $product_info['date_added'] ) ) > $this->range_days * 24 * 60 * 60 ) &&
278
+ ( 0 === $product_info['sales_in_period'][ $this->range_days ] ) ) ||
279
+
280
+ ( ( 'understocked' === $report_info['id'] ) &&
281
+ ( '' !== $product_info['stock'] ) &&
282
+ ( $product_info['sales_in_period'][ $this->range_days ] > 1 ) &&
283
+ ( $product_info['stock'] < ( $product_info['sales_in_period'][ $this->range_days ] / 2 ) ) )
284
+ ) {
 
 
 
285
  $total_current_stock_price += $product_info['stock_price'];
286
  $product_counter++;
287
  $html .= '<tr>';
289
  $html .= '<th>' . '<a href='. $product_info['permalink'] . '>' . $product_info['title'] . '</a>' . '</th>';
290
  $html .= '<th>' . '<a href='. $product_info['permalink'] . '>' . $product_info['category'] . '</a>' . '</th>';
291
  $purchase_price_html = ( $product_info['purchase_price'] > 0 ) ?
292
+ '<br><em>' . __( 'purchase price:', 'woocommerce-jetpack' ) . '</em>' . ' ' . wc_price( $product_info['purchase_price'] ) : '';
 
293
  $html .= '<td>' . wc_price( $product_info['price'] ) . $purchase_price_html . '</td>';
294
  $html .= '<td>' . $product_info['stock'] . '</td>';
295
  $purchase_stock_price_html = ( $product_info['purchase_price'] > 0 ) ?
296
+ '<br><em>' . __( 'stock purchase price:', 'woocommerce-jetpack' ) . '</em>' . ' ' . wc_price( $product_info['purchase_price'] * $product_info['stock'] ) : '';
297
+ $total_current_stock_purchase_price += ( $product_info['purchase_price'] > 0 ? $product_info['purchase_price'] * $product_info['stock'] : 0 );
298
  $html .= '<td>' . wc_price( $product_info['stock_price'] ) . $purchase_stock_price_html . '</td>';
299
  $html .= '<td>' . wc_price( $total_current_stock_price ) . '</td>';
 
300
  $html .= '<td class="wcj_report_table_sales_columns">';
301
  if ( 0 == $product_info['last_sale'] ) $html .= __( 'No sales yet', 'woocommerce-jetpack' );
302
  else $html .= date_i18n( get_option( 'date_format' ), $product_info['last_sale'] );
303
  $html .= '</td>';
 
304
  $profit_html = ( $product_info['purchase_price'] > 0 && $product_info['sales_in_period'][ $this->range_days ] > 0 ) ?
305
  '<br><em>' . __( 'profit:', 'woocommerce-jetpack' ) . '</em>' . ' '
306
  . wc_price( ( $product_info['price'] - $product_info['purchase_price'] ) * $product_info['sales_in_period'][ $this->range_days ] ) :
307
  '';
308
  $html .= '<td class="wcj_report_table_sales_columns">' . $product_info['sales_in_period'][ $this->range_days ] . $profit_html . '</td>';
309
  $html .= '<td class="wcj_report_table_sales_columns">' . $product_info['total_sales'] . '</td>';
 
 
310
  if ( $product_info['sales_in_period'][ $this->range_days ] > 0 ) {
311
  $stock_to_minimum = ( $product_info['sales_in_period'][ $this->range_days ] / 2 ) - $product_info['stock'];
312
  $stock_to_minimum = ( $stock_to_minimum > 0 ) ? round( $stock_to_minimum ) : '';
313
+ } else {
314
+ $stock_to_minimum = '';
315
  }
316
+ if ( 'understocked' === $this->report_id ) {
 
 
317
  $html .= '<td>' . $stock_to_minimum . '</td>';
318
+ }
319
  $html .= '</tr>';
320
  }
321
  }
322
  $html .= '</tbody></table>';
 
323
  $html_header = '<h4>' . $report_info['title'] . ': ' . $report_info['desc'] . '</h4>';
 
324
  $html_header .= '<table class="widefat" style="width:30% !important;"><tbody>';
325
  $html_header .= '<tr>' . '<th>' . __( 'Total current stock value', 'woocommerce-jetpack' ) . '</th>' . '<td>' . wc_price( $total_current_stock_price ) . '</td>' . '</tr>';
326
  $html_header .= '<tr>' . '<th>' . __( 'Total stock value', 'woocommerce-jetpack' ) . '</th>' . '<td>' . wc_price( $info['total_stock_price'] ) . '</td>' . '</tr>';
327
  $html_header .= '<tr>' . '<th>' . __( 'Product stock value average', 'woocommerce-jetpack' ) . '</th>' . '<td>' . wc_price( $info['stock_price_average'] ) . '</td>' . '</tr>';
328
  $html_header .= '<tr>' . '<th>' . __( 'Product stock average', 'woocommerce-jetpack' ) . '</th>' . '<td>' . number_format( $info['stock_average'], 2, '.', '' ) . '</td>' . '</tr>';
329
+ if ( 0 != $total_current_stock_purchase_price ) {
330
+ $html_header .= '<tr>' . '<th>' . __( 'Total current stock purchase price', 'woocommerce-jetpack' ) . '</th>' . '<td>' . wc_price( $total_current_stock_purchase_price ) . '</td>' . '</tr>';
331
+ }
332
  $html_header .= '</tbody></table>';
333
  $html_header .= '<br class="clear">';
 
334
  $time_elapsed_html = '<p><em>' . __( 'Report was generated in: ', 'woocommerce-jetpack' ) . intval( microtime( true ) - $this->start_time ) . ' s' . '</em></p>';
 
335
  return $this->get_submenu_html() . $html_header . $html . $time_elapsed_html;
336
  }
337
  }
includes/settings/meta-box/wcj-settings-meta-box-product-by-date.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Booster for WooCommerce - Settings Meta Box - Product Availability by Date
4
+ *
5
+ * @version 2.9.1
6
+ * @since 2.9.1
7
+ * @author Algoritmika Ltd.
8
+ */
9
+
10
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
11
+
12
+ $settings = array(
13
+ array(
14
+ 'title' => __( 'Enable/Disable per Product Settings', 'woocommerce-jetpack' ),
15
+ 'name' => 'wcj_product_by_date_enabled',
16
+ 'default' => 'no',
17
+ 'type' => 'select',
18
+ 'options' => array(
19
+ 'no' => __( 'Disabled', 'woocommerce-jetpack' ),
20
+ 'yes' => __( 'Enabled', 'woocommerce-jetpack' ),
21
+ ),
22
+ // 'tooltip' => __( 'Date formats:', 'woocommerce-jetpack' ) . ' ' . '<code>DD-DD</code>' . ', ' . '<code>DD-DD,DD-DD</code>' . ', ' . '<code>-</code>' . '.',
23
+ ),
24
+ );
25
+ $_timestamp = strtotime( '2017-01' );
26
+ for ( $i = 1; $i <= 12; $i++ ) {
27
+ $settings = array_merge( $settings, array(
28
+ array(
29
+ 'title' => date_i18n( 'F', $_timestamp ),
30
+ 'name' => 'wcj_product_by_date_' . $i,
31
+ 'default' => '',
32
+ 'type' => 'text',
33
+ 'css' => 'width:300px;',
34
+ ),
35
+ ) );
36
+ $_timestamp = strtotime( '+1 month', $_timestamp );
37
+ }
38
+ return $settings;
includes/settings/meta-box/wcj-settings-meta-box-product-by-time.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Booster for WooCommerce - Settings Meta Box - Product Availability by Time
4
+ *
5
+ * @version 2.9.1
6
+ * @since 2.9.1
7
+ * @author Algoritmika Ltd.
8
+ */
9
+
10
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
11
+
12
+ $settings = array(
13
+ array(
14
+ 'title' => __( 'Enable/Disable per Product Settings', 'woocommerce-jetpack' ),
15
+ 'name' => 'wcj_product_by_time_enabled',
16
+ 'default' => 'no',
17
+ 'type' => 'select',
18
+ 'options' => array(
19
+ 'no' => __( 'Disabled', 'woocommerce-jetpack' ),
20
+ 'yes' => __( 'Enabled', 'woocommerce-jetpack' ),
21
+ ),
22
+ // 'tooltip' => __( 'Time formats:', 'woocommerce-jetpack' ) . ' ' . '<code>HH:MM-HH:MM</code>' . ', ' . '<code>HH:MM-HH:MM,HH:MM-HH:MM</code>' . ', ' . '<code>-</code>' . '.',
23
+ ),
24
+ );
25
+ $_timestamp = strtotime( 'next Sunday' );
26
+ for ( $i = 0; $i < 7; $i++ ) {
27
+ $settings = array_merge( $settings, array(
28
+ array(
29
+ 'title' => date_i18n( 'l', $_timestamp ),
30
+ 'name' => 'wcj_product_by_time_' . $i,
31
+ 'default' => '',
32
+ 'type' => 'text',
33
+ 'css' => 'width:300px;',
34
+ ),
35
+ ) );
36
+ $_timestamp = strtotime( '+1 day', $_timestamp );
37
+ }
38
+ return $settings;
includes/settings/wcj-settings-admin-tools.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Admin Tools
4
  *
5
- * @version 2.8.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -16,12 +16,19 @@ return array(
16
  'id' => 'wcj_admin_tools_module_options',
17
  ),
18
  array(
19
- 'title' => __( 'Logging', 'woocommerce-jetpack' ),
20
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
21
  'id' => 'wcj_logging_enabled',
22
  'default' => 'no',
23
  'type' => 'checkbox',
24
  ),
 
 
 
 
 
 
 
25
  array(
26
  'title' => __( 'Debug', 'woocommerce-jetpack' ),
27
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
2
  /**
3
  * Booster for WooCommerce - Settings - Admin Tools
4
  *
5
+ * @version 2.9.1
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
16
  'id' => 'wcj_admin_tools_module_options',
17
  ),
18
  array(
19
+ 'title' => __( 'Log', 'woocommerce-jetpack' ),
20
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
21
  'id' => 'wcj_logging_enabled',
22
  'default' => 'no',
23
  'type' => 'checkbox',
24
  ),
25
+ array(
26
+ 'title' => __( 'WooCommerce Log', 'woocommerce-jetpack' ),
27
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
28
+ 'id' => 'wcj_wc_logging_enabled',
29
+ 'default' => 'no',
30
+ 'type' => 'checkbox',
31
+ ),
32
  array(
33
  'title' => __( 'Debug', 'woocommerce-jetpack' ),
34
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
includes/settings/wcj-settings-email-options.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Booster for WooCommerce - Settings - Email Options
4
+ *
5
+ * @version 2.9.1
6
+ * @since 2.9.1
7
+ * @author Algoritmika Ltd.
8
+ */
9
+
10
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
11
+
12
+ $settings = array(
13
+ array(
14
+ 'title' => __( 'Product Info in Item Name', 'woocommerce-jetpack' ),
15
+ 'type' => 'title',
16
+ 'id' => 'wcj_product_info_in_email_order_item_name_options',
17
+ ),
18
+ array(
19
+ 'title' => __( 'Add Product Info to Item Name', 'woocommerce-jetpack' ),
20
+ 'desc' => __( 'Add', 'woocommerce-jetpack' ),
21
+ 'type' => 'checkbox',
22
+ 'id' => 'wcj_product_info_in_email_order_item_name_enabled',
23
+ 'default' => 'no',
24
+ ),
25
+ array(
26
+ 'title' => __( 'Info', 'woocommerce-jetpack' ),
27
+ 'desc' => sprintf( __( 'You can use <a target="_blank" href="%s">Booster\'s products shortcodes</a> here.', 'woocommerce-jetpack' ), 'http://booster.io/category/shortcodes/products-shortcodes/' ),
28
+ 'type' => 'custom_textarea',
29
+ 'id' => 'wcj_product_info_in_email_order_item_name',
30
+ 'default' => '[wcj_product_categories strip_tags="yes" before="<hr><em>" after="</em>"]',
31
+ 'css' => 'width:66%;min-width:300px;height:150px;',
32
+ ),
33
+ array(
34
+ 'type' => 'sectionend',
35
+ 'id' => 'wcj_product_info_in_email_order_item_name_options',
36
+ ),
37
+ );
38
+ $settings = array_merge( $settings, $this->get_emails_forwarding_settings() );
39
+ return $settings;
includes/settings/wcj-settings-emails.php CHANGED
@@ -1,8 +1,8 @@
1
  <?php
2
  /**
3
- * Booster for WooCommerce - Settings - Emails
4
  *
5
- * @version 2.8.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -44,30 +44,5 @@ $settings = array_merge( $settings, array(
44
  'type' => 'sectionend',
45
  'id' => 'wcj_emails_custom_emails_options',
46
  ),
47
- array(
48
- 'title' => __( 'Product Info in Item Name', 'woocommerce-jetpack' ),
49
- 'type' => 'title',
50
- 'id' => 'wcj_product_info_in_email_order_item_name_options',
51
- ),
52
- array(
53
- 'title' => __( 'Add Product Info to Item Name', 'woocommerce-jetpack' ),
54
- 'desc' => __( 'Add', 'woocommerce-jetpack' ),
55
- 'type' => 'checkbox',
56
- 'id' => 'wcj_product_info_in_email_order_item_name_enabled',
57
- 'default' => 'no',
58
- ),
59
- array(
60
- 'title' => __( 'Info', 'woocommerce-jetpack' ),
61
- 'desc' => sprintf( __( 'You can use <a target="_blank" href="%s">Booster\'s products shortcodes</a> here.', 'woocommerce-jetpack' ), 'http://booster.io/category/shortcodes/products-shortcodes/' ),
62
- 'type' => 'custom_textarea',
63
- 'id' => 'wcj_product_info_in_email_order_item_name',
64
- 'default' => '[wcj_product_categories strip_tags="yes" before="<hr><em>" after="</em>"]',
65
- 'css' => 'width:66%;min-width:300px;height:150px;',
66
- ),
67
- array(
68
- 'type' => 'sectionend',
69
- 'id' => 'wcj_product_info_in_email_order_item_name_options',
70
- ),
71
  ) );
72
- $settings = array_merge( $settings, $this->get_emails_forwarding_settings() );
73
  return $settings;
1
  <?php
2
  /**
3
+ * Booster for WooCommerce - Settings - Custom Emails
4
  *
5
+ * @version 2.9.1
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
44
  'type' => 'sectionend',
45
  'id' => 'wcj_emails_custom_emails_options',
46
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  ) );
 
48
  return $settings;
includes/settings/wcj-settings-general.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - General
4
  *
5
- * @version 2.9.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  * @todo add link to Booster's shortcodes list
@@ -178,37 +178,10 @@ $settings = array(
178
  'type' => 'sectionend',
179
  'id' => 'wcj_session_expiration_options',
180
  ),
181
- array(
182
- 'title' => __( 'URL Coupons Options', 'woocommerce-jetpack' ),
183
- 'desc' => sprintf( __( 'Additionally you can hide standard coupon field on cart page in Booster\'s <a href="%s">Cart Customization</a> module.', 'woocommerce-jetpack' ),
184
- admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=cart_and_checkout&section=cart_customization' ) ),
185
- 'type' => 'title',
186
- 'id' => 'wcj_url_coupons_options',
187
- ),
188
- array(
189
- 'title' => __( 'URL Coupons', 'woocommerce-jetpack' ),
190
- 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
191
- 'desc_tip' => __( 'When enabled, your users can apply shop\'s standard coupons, by visiting URL. E.g.: http://yoursite.com/?wcj_apply_coupon=couponcode.', 'woocommerce-jetpack' ),
192
- 'id' => 'wcj_url_coupons_enabled',
193
- 'default' => 'no',
194
- 'type' => 'checkbox',
195
- ),
196
- array(
197
- 'title' => __( 'URL Coupons Key', 'woocommerce-jetpack' ),
198
- 'desc_tip' => __( 'URL key. If you change this, make sure it\'s unique and is not used anywhere on your site (e.g. by another plugin).', 'woocommerce-jetpack' ),
199
- 'id' => 'wcj_url_coupons_key',
200
- 'default' => 'wcj_apply_coupon',
201
- 'type' => 'text',
202
- ),
203
- array(
204
- 'type' => 'sectionend',
205
- 'id' => 'wcj_url_coupons_options',
206
- ),
207
  array(
208
  'title' => __( 'Booster User Roles Changer Options', 'woocommerce-jetpack' ),
209
  'desc' => __( 'This will add user roles changer tool to admin bar.', 'woocommerce-jetpack' )/* . ' ' .
210
- __( 'You will be able to change user roles for Booster modules (e.g. when creating orders manually by admin for "Price by User Role" module).', 'woocommerce-jetpack' ) */,
211
-
212
  'type' => 'title',
213
  'id' => 'wcj_general_user_role_changer_options',
214
  ),
@@ -233,6 +206,55 @@ $settings = array(
233
  'type' => 'sectionend',
234
  'id' => 'wcj_general_user_role_changer_options',
235
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
236
  /*
237
  array(
238
  'title' => __( 'WooCommerce Templates Editor Links', 'woocommerce-jetpack' ),
2
  /**
3
  * Booster for WooCommerce - Settings - General
4
  *
5
+ * @version 2.9.1
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  * @todo add link to Booster's shortcodes list
178
  'type' => 'sectionend',
179
  'id' => 'wcj_session_expiration_options',
180
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
181
  array(
182
  'title' => __( 'Booster User Roles Changer Options', 'woocommerce-jetpack' ),
183
  'desc' => __( 'This will add user roles changer tool to admin bar.', 'woocommerce-jetpack' )/* . ' ' .
184
+ __( 'You will be able to change user roles for Booster modules (e.g. when creating orders manually by admin for "Price by User Role" module).', 'woocommerce-jetpack' ) */,
 
185
  'type' => 'title',
186
  'id' => 'wcj_general_user_role_changer_options',
187
  ),
206
  'type' => 'sectionend',
207
  'id' => 'wcj_general_user_role_changer_options',
208
  ),
209
+ array(
210
+ 'title' => __( 'Track Users Options', 'woocommerce-jetpack' ),
211
+ 'type' => 'title',
212
+ 'id' => 'wcj_track_users_options',
213
+ ),
214
+ array(
215
+ 'title' => __( 'Track Users', 'woocommerce-jetpack' ),
216
+ 'desc' => '<strong>' . __( 'Enable section', 'woocommerce-jetpack' ) . '</strong>',
217
+ 'id' => 'wcj_track_users_enabled',
218
+ 'default' => 'no',
219
+ 'type' => 'checkbox',
220
+ ),
221
+ array(
222
+ 'title' => __( 'Countries by Visits', 'woocommerce-jetpack' ),
223
+ 'desc' => __( 'Enable admin dashboard widget', 'woocommerce-jetpack' ),
224
+ 'id' => 'wcj_track_users_by_country_widget_enabled',
225
+ 'default' => 'yes',
226
+ 'type' => 'checkbox',
227
+ ),
228
+ array(
229
+ 'desc_tip' => __( 'Select which info show in admin dashboard widget.', 'woocommerce-jetpack' ),
230
+ 'id' => 'wcj_track_users_by_country_widget_scopes',
231
+ 'default' => array( '1', '28' ),
232
+ 'type' => 'multiselect',
233
+ 'class' => 'chosen_select',
234
+ 'options' => $this->track_users_scopes,
235
+ ),
236
+ array(
237
+ 'desc_tip' => __( 'Select which how many top countries to show.', 'woocommerce-jetpack' ),
238
+ 'id' => 'wcj_track_users_by_country_widget_top_count',
239
+ 'default' => 10,
240
+ 'type' => 'number',
241
+ 'custom_attributes' => ( array( 'min' => 0 ) ),
242
+ ),
243
+ array(
244
+ 'title' => __( 'Track Orders', 'woocommerce-jetpack' ),
245
+ 'desc_tip' => __( 'Save customer\'s acquisition source (i.e. HTTP referer) for orders.', 'woocommerce-jetpack' ) . ' ' .
246
+ __( 'This will add "Booster: Acquisition Source" meta box to each order\'s edit page.', 'woocommerce-jetpack' ) . ' ' .
247
+ apply_filters( 'booster_get_message', '', 'desc' ),
248
+ 'desc' => __( 'Enable', 'woocommerce-jetpack' ),
249
+ 'id' => 'wcj_track_users_save_order_http_referer_enabled',
250
+ 'default' => 'no',
251
+ 'type' => 'checkbox',
252
+ 'custom_attributes' => apply_filters( 'booster_get_message', '', 'disabled' ),
253
+ ),
254
+ array(
255
+ 'type' => 'sectionend',
256
+ 'id' => 'wcj_track_users_options',
257
+ ),
258
  /*
259
  array(
260
  'title' => __( 'WooCommerce Templates Editor Links', 'woocommerce-jetpack' ),
includes/settings/wcj-settings-product-by-date.php ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Booster for WooCommerce - Settings - Product Availability by Date
4
+ *
5
+ * @version 2.9.1
6
+ * @since 2.9.1
7
+ * @author Algoritmika Ltd.
8
+ */
9
+
10
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
11
+
12
+ $settings = array(
13
+ array(
14
+ 'title' => __( 'All Products Options', 'woocommerce-jetpack' ),
15
+ 'desc' => '<span id="local-date">' . sprintf( __( 'Today is <code>%s</code>.', 'woocommerce-jetpack' ), date( 'F j', $this->time_now ) ) . '</span>',
16
+ 'type' => 'title',
17
+ 'id' => 'wcj_product_by_date_all_products_options',
18
+ ),
19
+ array(
20
+ 'title' => __( 'All Products', 'woocommerce-jetpack' ),
21
+ 'desc' => '<strong>' . __( 'Enable', 'woocommerce-jetpack' ) . '</strong>',
22
+ 'desc_tip' => __( 'Date formats:', 'woocommerce-jetpack' ) . ' ' . '<code>DD-DD</code>' . ', ' . '<code>DD-DD,DD-DD</code>' . ', ' . '<code>-</code>' . '.',
23
+ 'id' => 'wcj_product_by_date_section_enabled',
24
+ 'default' => 'no',
25
+ 'type' => 'checkbox',
26
+ ),
27
+ );
28
+ $_timestamp = strtotime( '2017-01' );
29
+ for ( $i = 1; $i <= 12; $i++ ) {
30
+ $settings = array_merge( $settings, array(
31
+ array(
32
+ 'title' => date_i18n( 'F', $_timestamp ),
33
+ 'id' => 'wcj_product_by_date_' . $i,
34
+ 'default' => $this->get_default_date( $i ),
35
+ 'type' => 'text',
36
+ 'css' => 'width:300px;',
37
+ ),
38
+ ) );
39
+ $_timestamp = strtotime( '+1 month', $_timestamp );
40
+ }
41
+ $settings = array_merge( $settings, array(
42
+ array(
43
+ 'type' => 'sectionend',
44
+ 'id' => 'wcj_product_by_date_all_products_options',
45
+ ),
46
+ array(
47
+ 'title' => __( 'Per Product Options', 'woocommerce-jetpack' ),
48
+ 'type' => 'title',
49
+ 'id' => 'wcj_product_by_date_per_product_options',
50
+ ),
51
+ array(
52
+ 'title' => __( 'Per Product', 'woocommerce-jetpack' ),
53
+ 'desc' => '<strong>' . __( 'Enable', 'woocommerce-jetpack' ) . '</strong>',
54
+ 'desc_tip' => __( 'This will add new meta box to each product\'s edit page.', 'woocommerce-jetpack' ),
55
+ 'id' => 'wcj_product_by_date_per_product_enabled',
56
+ 'default' => 'no',
57
+ 'type' => 'checkbox',
58
+ ),
59
+ array(
60
+ 'type' => 'sectionend',
61
+ 'id' => 'wcj_product_by_date_per_product_options',
62
+ ),
63
+ array(
64
+ 'title' => __( 'Frontend Messages Options', 'woocommerce-jetpack' ),
65
+ 'type' => 'title',
66
+ 'id' => 'wcj_product_by_date_messages_options',
67
+ ),
68
+ array(
69
+ 'title' => __( 'Message', 'woocommerce-jetpack' ),
70
+ 'desc' => __( 'Message when product is not available by date.', 'woocommerce-jetpack' ) .
71
+ ' ' . wcj_message_replaced_values( array( '%product_title%', '%date_this_month%' ) ) . '.' .
72
+ ' ' . __( 'You can also use shortcodes here.', 'woocommerce-jetpack' ) .
73
+ ' ' . apply_filters( 'booster_get_message', '', 'desc' ),
74
+ 'id' => 'wcj_product_by_date_unavailable_message',
75
+ 'default' => __( '<p style="color:red;">%product_title% is available only on %date_this_month% this month.</p>', 'woocommerce-jetpack' ),
76
+ 'type' => 'custom_textarea',
77
+ 'css' => 'width:66%;min-width:300px;',
78
+ 'custom_attributes' => apply_filters( 'booster_get_message', '', 'readonly' ),
79
+ ),
80
+ array(
81
+ 'title' => __( 'Message (Month Off)', 'woocommerce-jetpack' ),
82
+ 'desc' => __( 'Message when product is not available by date (month off).', 'woocommerce-jetpack' ) .
83
+ ' ' . wcj_message_replaced_values( array( '%product_title%' ) ) . '.' .
84
+ ' ' . __( 'You can also use shortcodes here.', 'woocommerce-jetpack' ) .
85
+ ' ' . apply_filters( 'booster_get_message', '', 'desc' ),
86
+ 'id' => 'wcj_product_by_date_unavailable_message_month_off',
87
+ 'default' => __( '<p style="color:red;">%product_title% is not available this month.</p>', 'woocommerce-jetpack' ),
88
+ 'type' => 'custom_textarea',
89
+ 'css' => 'width:66%;min-width:300px;',
90
+ 'custom_attributes' => apply_filters( 'booster_get_message', '', 'readonly' ),
91
+ ),
92
+ array(
93
+ 'type' => 'sectionend',
94
+ 'id' => 'wcj_product_by_date_messages_options',
95
+ ),
96
+ ) );
97
+ return $settings;
includes/settings/wcj-settings-product-by-time.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Product Availability by Time
4
  *
5
- * @version 2.8.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -11,15 +11,15 @@ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
11
 
12
  $settings = array(
13
  array(
14
- 'title' => __( 'Options', 'woocommerce-jetpack' ),
15
  'desc' => '<span id="local-time">' . sprintf( __( 'Local time is <code>%s</code>.', 'woocommerce-jetpack' ), date( 'l, H:i:s', $this->time_now ) ) . '</span>',
16
  'type' => 'title',
17
- 'id' => 'wcj_product_by_time_options',
18
  ),
19
  array(
20
  'title' => __( 'Product by Time', 'woocommerce-jetpack' ),
21
- 'desc' => '<strong>' . __( 'Enable Section', 'woocommerce-jetpack' ) . '</strong>',
22
- 'desc_tip' => __( 'Time formats:', 'woocommerce-jetpack' ) . ' ' . '<code>HH:MM</code>' . ', ' . '<code>HH:MM,HH:MM</code>' . ', ' . '<code>-</code>' . '.',
23
  'id' => 'wcj_product_by_time_section_enabled',
24
  'default' => 'no',
25
  'type' => 'checkbox',
@@ -39,6 +39,32 @@ for ( $i = 0; $i < 7; $i++ ) {
39
  $timestamp = strtotime( '+1 day', $timestamp );
40
  }
41
  $settings = array_merge( $settings, array(
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  array(
43
  'title' => __( 'Message', 'woocommerce-jetpack' ),
44
  'desc' => __( 'Message when product is not available by time.', 'woocommerce-jetpack' ) .
@@ -65,7 +91,7 @@ $settings = array_merge( $settings, array(
65
  ),
66
  array(
67
  'type' => 'sectionend',
68
- 'id' => 'wcj_product_by_time_options',
69
  ),
70
  ) );
71
  return $settings;
2
  /**
3
  * Booster for WooCommerce - Settings - Product Availability by Time
4
  *
5
+ * @version 2.9.1
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
11
 
12
  $settings = array(
13
  array(
14
+ 'title' => __( 'All Products Options', 'woocommerce-jetpack' ),
15
  'desc' => '<span id="local-time">' . sprintf( __( 'Local time is <code>%s</code>.', 'woocommerce-jetpack' ), date( 'l, H:i:s', $this->time_now ) ) . '</span>',
16
  'type' => 'title',
17
+ 'id' => 'wcj_product_by_time_all_products_options',
18
  ),
19
  array(
20
  'title' => __( 'Product by Time', 'woocommerce-jetpack' ),
21
+ 'desc' => '<strong>' . __( 'Enable', 'woocommerce-jetpack' ) . '</strong>',
22
+ 'desc_tip' => __( 'Time formats:', 'woocommerce-jetpack' ) . ' ' . '<code>HH:MM-HH:MM</code>' . ', ' . '<code>HH:MM-HH:MM,HH:MM-HH:MM</code>' . ', ' . '<code>-</code>' . '.',
23
  'id' => 'wcj_product_by_time_section_enabled',
24
  'default' => 'no',
25
  'type' => 'checkbox',
39
  $timestamp = strtotime( '+1 day', $timestamp );
40
  }
41
  $settings = array_merge( $settings, array(
42
+ array(
43
+ 'type' => 'sectionend',
44
+ 'id' => 'wcj_product_by_time_all_products_options',
45
+ ),
46
+ array(
47
+ 'title' => __( 'Per Product Options', 'woocommerce-jetpack' ),
48
+ 'type' => 'title',
49
+ 'id' => 'wcj_product_by_time_per_product_options',
50
+ ),
51
+ array(
52
+ 'title' => __( 'Per Product', 'woocommerce-jetpack' ),
53
+ 'desc' => '<strong>' . __( 'Enable', 'woocommerce-jetpack' ) . '</strong>',
54
+ 'desc_tip' => __( 'This will add new meta box to each product\'s edit page.', 'woocommerce-jetpack' ),
55
+ 'id' => 'wcj_product_by_time_per_product_enabled',
56
+ 'default' => 'no',
57
+ 'type' => 'checkbox',
58
+ ),
59
+ array(
60
+ 'type' => 'sectionend',
61
+ 'id' => 'wcj_product_by_time_per_product_options',
62
+ ),
63
+ array(
64
+ 'title' => __( 'Frontend Messages Options', 'woocommerce-jetpack' ),
65
+ 'type' => 'title',
66
+ 'id' => 'wcj_product_by_time_messages_options',
67
+ ),
68
  array(
69
  'title' => __( 'Message', 'woocommerce-jetpack' ),
70
  'desc' => __( 'Message when product is not available by time.', 'woocommerce-jetpack' ) .
91
  ),
92
  array(
93
  'type' => 'sectionend',
94
+ 'id' => 'wcj_product_by_time_messages_options',
95
  ),
96
  ) );
97
  return $settings;
includes/settings/wcj-settings-product-custom-info.php CHANGED
@@ -2,18 +2,20 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Product Info
4
  *
5
- * @version 2.9.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
9
 
10
  if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
11
 
12
- $products = wcj_get_products();
13
- $product_cats = wcj_get_terms( 'product_cat' );
14
- $product_tags = wcj_get_terms( 'product_tag' );
15
- $settings = array();
16
- $single_or_archive_array = array( 'single', 'archive' );
 
 
17
  foreach ( $single_or_archive_array as $single_or_archive ) {
18
  $single_or_archive_desc = ( 'single' === $single_or_archive ) ? __( 'Single', 'woocommerce-jetpack' ) : __( 'Archive', 'woocommerce-jetpack' );
19
  $settings = array_merge( $settings, array(
@@ -36,6 +38,12 @@ foreach ( $single_or_archive_array as $single_or_archive ) {
36
  ),
37
  ) );
38
  for ( $i = 1; $i <= apply_filters( 'booster_get_option', 1, get_option( 'wcj_product_custom_info_total_number_' . $single_or_archive, 1 ) ); $i++ ) {
 
 
 
 
 
 
39
  $settings = array_merge( $settings, array(
40
  array(
41
  'title' => __( 'Info Block', 'woocommerce-jetpack' ) . ' #' . $i . ' - ' . $single_or_archive_desc,
@@ -123,25 +131,27 @@ foreach ( $single_or_archive_array as $single_or_archive ) {
123
  'css' => 'width: 450px;',
124
  'options' => $product_tags,
125
  ),
126
- array(
127
- 'title' => __( 'Products to Include', 'woocommerce-jetpack' ),
128
- 'desc_tip' => __( 'Leave blank to disable the option.', 'woocommerce-jetpack' ),
129
- 'id' => 'wcj_product_custom_info_products_to_include_' . $single_or_archive . '_' . $i,
130
- 'default' => '',
131
- 'type' => 'multiselect',
132
- 'class' => 'chosen_select',
133
- 'css' => 'width: 450px;',
134
- 'options' => $products,
 
135
  ),
136
- array(
137
- 'title' => __( 'Products to Exclude', 'woocommerce-jetpack' ),
138
- 'desc_tip' => __( 'Leave blank to disable the option.', 'woocommerce-jetpack' ),
139
- 'id' => 'wcj_product_custom_info_products_to_exclude_' . $single_or_archive . '_' . $i,
140
- 'default' => '',
141
- 'type' => 'multiselect',
142
- 'class' => 'chosen_select',
143
- 'css' => 'width: 450px;',
144
- 'options' => $products,
 
145
  ),
146
  array(
147
  'type' => 'sectionend',
2
  /**
3
  * Booster for WooCommerce - Settings - Product Info
4
  *
5
+ * @version 2.9.1
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
9
 
10
  if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
11
 
12
+ $is_multiselect_products = ( 'yes' === get_option( 'wcj_list_for_products', 'yes' ) );
13
+ $products = ( $is_multiselect_products ? wcj_get_products() : false );
14
+ $product_cats = wcj_get_terms( 'product_cat' );
15
+ $product_tags = wcj_get_terms( 'product_tag' );
16
+ $settings = array();
17
+ $single_or_archive_array = array( 'single', 'archive' );
18
+
19
  foreach ( $single_or_archive_array as $single_or_archive ) {
20
  $single_or_archive_desc = ( 'single' === $single_or_archive ) ? __( 'Single', 'woocommerce-jetpack' ) : __( 'Archive', 'woocommerce-jetpack' );
21
  $settings = array_merge( $settings, array(
38
  ),
39
  ) );
40
  for ( $i = 1; $i <= apply_filters( 'booster_get_option', 1, get_option( 'wcj_product_custom_info_total_number_' . $single_or_archive, 1 ) ); $i++ ) {
41
+
42
+ wcj_maybe_convert_and_update_option_value( array(
43
+ array( 'id' => 'wcj_product_custom_info_products_to_include_' . $single_or_archive . '_' . $i, 'default' => '' ),
44
+ array( 'id' => 'wcj_product_custom_info_products_to_exclude_' . $single_or_archive . '_' . $i, 'default' => '' ),
45
+ ), $is_multiselect_products );
46
+
47
  $settings = array_merge( $settings, array(
48
  array(
49
  'title' => __( 'Info Block', 'woocommerce-jetpack' ) . ' #' . $i . ' - ' . $single_or_archive_desc,
131
  'css' => 'width: 450px;',
132
  'options' => $product_tags,
133
  ),
134
+ wcj_get_settings_as_multiselect_or_text(
135
+ array(
136
+ 'title' => __( 'Products to Include', 'woocommerce-jetpack' ),
137
+ 'desc_tip' => __( 'Leave blank to disable the option.', 'woocommerce-jetpack' ),
138
+ 'id' => 'wcj_product_custom_info_products_to_include_' . $single_or_archive . '_' . $i,
139
+ 'default' => '',
140
+ 'css' => 'width: 450px;',
141
+ ),
142
+ $products,
143
+ $is_multiselect_products
144
  ),
145
+ wcj_get_settings_as_multiselect_or_text(
146
+ array(
147
+ 'title' => __( 'Products to Exclude', 'woocommerce-jetpack' ),
148
+ 'desc_tip' => __( 'Leave blank to disable the option.', 'woocommerce-jetpack' ),
149
+ 'id' => 'wcj_product_custom_info_products_to_exclude_' . $single_or_archive . '_' . $i,
150
+ 'default' => '',
151
+ 'css' => 'width: 450px;',
152
+ ),
153
+ $products,
154
+ $is_multiselect_products
155
  ),
156
  array(
157
  'type' => 'sectionend',
includes/settings/wcj-settings-reports.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Reports
4
  *
5
- * @version 2.9.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -90,11 +90,25 @@ $reports_and_settings = array(
90
  'checkboxgroup' => 'end',
91
  ),
92
  array(
93
- 'title' => __( 'Monthly Sales (with currency conversions)', 'woocommerce-jetpack' ),
94
  'tab' => 'orders',
95
  'tab_title' => __( 'Orders', 'woocommerce-jetpack' ),
96
  'report' => 'booster_monthly_sales',
97
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  array(
99
  'title' => __( 'Customers by Country', 'woocommerce-jetpack' ),
100
  'tab' => 'customers',
2
  /**
3
  * Booster for WooCommerce - Settings - Reports
4
  *
5
+ * @version 2.9.1
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
90
  'checkboxgroup' => 'end',
91
  ),
92
  array(
93
+ 'title' => __( 'Monthly Sales (with Currency Conversion)', 'woocommerce-jetpack' ),
94
  'tab' => 'orders',
95
  'tab_title' => __( 'Orders', 'woocommerce-jetpack' ),
96
  'report' => 'booster_monthly_sales',
97
  ),
98
+ array(
99
+ 'id' => 'wcj_reports_orders_monthly_sales_include_today',
100
+ 'desc' => __( 'Include current day for current month', 'woocommerce-jetpack' ),
101
+ 'type' => 'checkbox',
102
+ 'default' => 'no',
103
+ 'checkboxgroup' => 'start',
104
+ ),
105
+ array(
106
+ 'id' => 'wcj_reports_orders_monthly_sales_forecast',
107
+ 'desc' => __( 'Forecast total orders and sum (excl. TAX) for current month', 'woocommerce-jetpack' ),
108
+ 'type' => 'checkbox',
109
+ 'default' => 'no',
110
+ 'checkboxgroup' => 'end',
111
+ ),
112
  array(
113
  'title' => __( 'Customers by Country', 'woocommerce-jetpack' ),
114
  'tab' => 'customers',
includes/settings/wcj-settings-shipping-options.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Shipping Options
4
  *
5
- * @version 2.9.0
6
  * @since 2.9.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -11,28 +11,30 @@ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
11
 
12
  $settings = array(
13
  array(
14
- 'title' => __( 'Hide if Free is Available', 'woocommerce-jetpack' ),
15
  'type' => 'title',
16
  'desc' => __( 'This section lets you hide other shipping options when free shipping is available on shop frontend.', 'woocommerce-jetpack' ),
17
  'id' => 'wcj_shipping_hide_if_free_available_options',
18
  ),
19
- /*
20
  array(
21
- 'title' => __( 'Hide shipping', 'woocommerce-jetpack' ),
22
- 'desc' => __( 'Hide local delivery when free is available', 'woocommerce-jetpack' ),
23
- 'id' => 'wcj_shipping_hide_if_free_available_local_delivery',
24
  'default' => 'no',
25
  'type' => 'checkbox',
26
- 'checkboxgroup' => 'start',
27
  ),
28
- */
29
  array(
30
- 'title' => __( 'Hide shipping', 'woocommerce-jetpack' ),
31
- 'desc' => __( 'Hide all when free is available', 'woocommerce-jetpack' ),
32
- 'id' => 'wcj_shipping_hide_if_free_available_all',
33
- 'default' => 'no',
34
- 'type' => 'checkbox',
35
- // 'checkboxgroup' => 'end',
 
 
 
 
 
36
  ),
37
  array(
38
  'type' => 'sectionend',
2
  /**
3
  * Booster for WooCommerce - Settings - Shipping Options
4
  *
5
+ * @version 2.9.1
6
  * @since 2.9.0
7
  * @author Algoritmika Ltd.
8
  */
11
 
12
  $settings = array(
13
  array(
14
+ 'title' => __( 'Hide if Free Shipping is Available', 'woocommerce-jetpack' ),
15
  'type' => 'title',
16
  'desc' => __( 'This section lets you hide other shipping options when free shipping is available on shop frontend.', 'woocommerce-jetpack' ),
17
  'id' => 'wcj_shipping_hide_if_free_available_options',
18
  ),
 
19
  array(
20
+ 'title' => __( 'Hide when free is available', 'woocommerce-jetpack' ),
21
+ 'desc' => __( 'Enable section', 'woocommerce-jetpack' ),
22
+ 'id' => 'wcj_shipping_hide_if_free_available_all',
23
  'default' => 'no',
24
  'type' => 'checkbox',
 
25
  ),
 
26
  array(
27
+ 'id' => 'wcj_shipping_hide_if_free_available_type',
28
+ 'desc_tip' => sprintf( __( 'Available options: hide all; hide all except "Local Pickup"; hide "Flat Rate" only.', 'woocommerce-jetpack' ) ),
29
+ 'default' => 'hide_all',
30
+ 'type' => 'select',
31
+ 'options' => array(
32
+ 'hide_all' => __( 'Hide all', 'woocommerce-jetpack' ),
33
+ 'except_local_pickup' => __( 'Hide all except "Local Pickup"', 'woocommerce-jetpack' ),
34
+ 'flat_rate_only' => __( 'Hide "Flat Rate" only', 'woocommerce-jetpack' ),
35
+ ),
36
+ 'desc' => apply_filters( 'booster_get_message', '', 'desc' ),
37
+ 'custom_attributes' => apply_filters( 'booster_get_message', '', 'disabled' ),
38
  ),
39
  array(
40
  'type' => 'sectionend',
includes/settings/wcj-settings-url-coupons.php ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Booster for WooCommerce - Settings - URL Coupons
4
+ *
5
+ * @version 2.9.1
6
+ * @since 2.9.1
7
+ * @author Algoritmika Ltd.
8
+ */
9
+
10
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
11
+
12
+ $settings = array(
13
+ array(
14
+ 'title' => __( 'Options', 'woocommerce-jetpack' ),
15
+ 'desc' => sprintf( __( 'Additionally you can hide standard coupon field on cart page in Booster\'s <a href="%s">Cart Customization</a> module.', 'woocommerce-jetpack' ),
16
+ admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=cart_and_checkout&section=cart_customization' ) ),
17
+ 'type' => 'title',
18
+ 'id' => 'wcj_url_coupons_options',
19
+ ),
20
+ array(
21
+ 'title' => __( 'URL Coupons Key', 'woocommerce-jetpack' ),
22
+ 'desc_tip' => __( 'URL key. If you change this, make sure it\'s unique and is not used anywhere on your site (e.g. by another plugin).', 'woocommerce-jetpack' ),
23
+ 'desc' => sprintf( __( 'Your users can apply shop\'s standard coupons, by visiting URL. E.g.: %s.', 'woocommerce-jetpack' ),
24
+ '<code>' . site_url() . '/?' . get_option( 'wcj_url_coupons_key', 'wcj_apply_coupon' ) . '=couponcode' . '</code>' ),
25
+ 'id' => 'wcj_url_coupons_key',
26
+ 'default' => 'wcj_apply_coupon',
27
+ 'type' => 'text',
28
+ ),
29
+ array(
30
+ 'title' => __( 'Redirect URL', 'woocommerce-jetpack' ),
31
+ 'desc_tip' => __( 'Possible values: No redirect; redirect to cart; redirect to checkout; redirect to custom local URL.', 'woocommerce-jetpack' ),
32
+ 'id' => 'wcj_url_coupons_redirect',
33
+ 'default' => 'no',
34
+ 'type' => 'select',
35
+ 'options' => array(
36
+ 'no' => __( 'No redirect', 'woocommerce-jetpack' ),
37
+ 'cart' => __( 'Redirect to cart', 'woocommerce-jetpack' ),
38
+ 'checkout' => __( 'Redirect to checkout', 'woocommerce-jetpack' ),
39
+ 'custom' => __( 'Redirect to custom local URL', 'woocommerce-jetpack' ),
40
+ ),
41
+ 'desc' => apply_filters( 'booster_get_message', '', 'desc' ),
42
+ 'custom_attributes' => apply_filters( 'booster_get_message', '', 'disabled' ),
43
+ ),
44
+ array(
45
+ 'desc' => __( 'Custom Local URL', 'woocommerce-jetpack' ),
46
+ 'id' => 'wcj_url_coupons_redirect_custom_url',
47
+ 'default' => '',
48
+ 'type' => 'text',
49
+ 'css' => 'min-width:300px;',
50
+ ),
51
+ array(
52
+ 'title' => __( '"Fixed product discount" Coupons', 'woocommerce-jetpack' ),
53
+ 'desc' => __( 'Automatically add coupon\'s products to the cart', 'woocommerce-jetpack' ),
54
+ 'id' => 'wcj_url_coupons_fixed_product_discount_add_products',
55
+ 'default' => 'no',
56
+ 'type' => 'checkbox',
57
+ 'desc_tip' => apply_filters( 'booster_get_message', '', 'desc' ),
58
+ 'custom_attributes' => apply_filters( 'booster_get_message', '', 'disabled' ),
59
+ ),
60
+ array(
61
+ 'type' => 'sectionend',
62
+ 'id' => 'wcj_url_coupons_options',
63
+ ),
64
+ );
65
+ return $settings;
includes/shortcodes/class-wcj-general-shortcodes.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Shortcodes - General
4
  *
5
- * @version 2.9.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -15,11 +15,12 @@ class WCJ_General_Shortcodes extends WCJ_Shortcodes {
15
  /**
16
  * Constructor.
17
  *
18
- * @version 2.9.0
19
  */
20
  function __construct() {
21
 
22
  $this->the_shortcodes = array(
 
23
  'wcj_current_date',
24
  'wcj_current_time',
25
  'wcj_current_datetime',
@@ -75,6 +76,16 @@ class WCJ_General_Shortcodes extends WCJ_Shortcodes {
75
 
76
  }
77
 
 
 
 
 
 
 
 
 
 
 
78
  /**
79
  * wcj_currency_exchange_rate.
80
  *
2
  /**
3
  * Booster for WooCommerce - Shortcodes - General
4
  *
5
+ * @version 2.9.1
6
  * @author Algoritmika Ltd.
7
  */
8
 
15
  /**
16
  * Constructor.
17
  *
18
+ * @version 2.9.1
19
  */
20
  function __construct() {
21
 
22
  $this->the_shortcodes = array(
23
+ 'wcj_site_url',
24
  'wcj_current_date',
25
  'wcj_current_time',
26
  'wcj_current_datetime',
76
 
77
  }
78
 
79
+ /**
80
+ * wcj_site_url.
81
+ *
82
+ * @version 2.9.1
83
+ * @since 2.9.1
84
+ */
85
+ function wcj_site_url( $atts ) {
86
+ return site_url();
87
+ }
88
+
89
  /**
90
  * wcj_currency_exchange_rate.
91
  *
langs/woocommerce-jetpack.pot CHANGED
@@ -3,16 +3,15 @@
3
  # This file is distributed under the same license as the PACKAGE package.
4
  # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
  #
6
- #: includes/reports/wcj-class-reports-stock.php:43
7
  #: includes/settings/wcj-settings-add-to-cart.php:60
8
  #: includes/settings/wcj-settings-shipping-calculator.php:47
9
  #, fuzzy
10
  msgid ""
11
  msgstr ""
12
- "Project-Id-Version: Booster for WooCommerce 2.9.0\n"
13
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/woocommerce-"
14
  "jetpack\n"
15
- "POT-Creation-Date: 2017-07-02 17:03+0300\n"
16
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
17
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
18
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -38,7 +37,7 @@ msgid ""
38
  msgstr ""
39
 
40
  #: woocommerce-jetpack.php:191
41
- #: includes/admin/class-wc-settings-jetpack.php:425
42
  msgid "Booster for WooCommerce"
43
  msgstr ""
44
 
@@ -46,11 +45,10 @@ msgstr ""
46
  msgid "Booster Settings"
47
  msgstr ""
48
 
49
- #: woocommerce-jetpack.php:207 includes/class-wcj-admin-bar.php:166
50
- #: includes/class-wcj-admin-bar.php:245 includes/class-wcj-admin-bar.php:437
51
- #: includes/class-wcj-admin-bar.php:537
52
  #: includes/admin/class-wc-settings-jetpack.php:195
53
- #: includes/admin/class-wc-settings-jetpack.php:360
54
  msgid "Settings"
55
  msgstr ""
56
 
@@ -62,7 +60,7 @@ msgstr ""
62
  msgid "Unlock all"
63
  msgstr ""
64
 
65
- #: woocommerce-jetpack.php:462
66
  #, php-format
67
  msgid ""
68
  "<strong>Booster for WooCommerce</strong> plugin was successfully updated to "
@@ -117,9 +115,9 @@ msgstr ""
117
  msgid "Manage Settings"
118
  msgstr ""
119
 
120
- #: includes/class-wcj-admin-bar.php:170
121
- #: includes/admin/class-wc-settings-jetpack.php:362
122
- #: includes/classes/class-wcj-module.php:546
123
  msgid "Documentation"
124
  msgstr ""
125
 
@@ -138,12 +136,13 @@ msgstr ""
138
 
139
  #: includes/class-wcj-admin-bar.php:238
140
  #: includes/class-wcj-checkout-files-upload.php:138
141
- #: includes/class-wcj-eu-vat-number.php:86
 
142
  #: includes/class-wcj-payment-gateways.php:53
143
  #: includes/admin/class-wc-settings-jetpack.php:24
144
  #: includes/admin/class-wc-settings-jetpack.php:197
145
- #: includes/classes/class-wcj-module.php:205
146
- #: includes/classes/class-wcj-module.php:406
147
  msgid "Booster"
148
  msgstr ""
149
 
@@ -151,8 +150,12 @@ msgstr ""
151
  msgid "Booster - Settings"
152
  msgstr ""
153
 
 
 
 
 
154
  #: includes/class-wcj-admin-bar.php:250 includes/class-wcj-admin-bar.php:561
155
- #: includes/classes/class-wcj-module.php:379
156
  #: includes/settings/wcj-settings-wpml.php:15
157
  msgid "Tools"
158
  msgstr ""
@@ -173,7 +176,7 @@ msgstr ""
173
  msgid "Coupons by date"
174
  msgstr ""
175
 
176
- #: includes/class-wcj-admin-bar.php:280
177
  #: includes/functions/wcj-reports-functions.php:62
178
  msgid "Last 7 days"
179
  msgstr ""
@@ -216,8 +219,8 @@ msgid "Add order"
216
  msgstr ""
217
 
218
  #: includes/class-wcj-admin-bar.php:334 includes/class-wcj-admin-bar.php:349
219
- #: includes/settings/wcj-settings-reports.php:101
220
- #: includes/settings/wcj-settings-reports.php:107
221
  msgid "Customers"
222
  msgstr ""
223
 
@@ -234,10 +237,10 @@ msgid "Customer list"
234
  msgstr ""
235
 
236
  #: includes/class-wcj-admin-bar.php:363 includes/class-wcj-stock.php:26
237
- #: includes/reports/wcj-class-reports-stock.php:321
238
- #: includes/settings/wcj-settings-reports.php:113
239
- #: includes/settings/wcj-settings-reports.php:119
240
- #: includes/settings/wcj-settings-reports.php:125
241
  msgid "Stock"
242
  msgstr ""
243
 
@@ -272,7 +275,7 @@ msgstr ""
272
  #: includes/class-wcj-product-by-user.php:96
273
  #: includes/class-wcj-product-by-user.php:132
274
  #: includes/admin/wcj-modules-cats.php:60
275
- #: includes/settings/wcj-settings-shipping-options.php:57
276
  msgid "Products"
277
  msgstr ""
278
 
@@ -392,7 +395,7 @@ msgstr ""
392
  msgid "Account"
393
  msgstr ""
394
 
395
- #: includes/class-wcj-admin-bar.php:529 includes/class-wcj-emails.php:24
396
  msgid "Emails"
397
  msgstr ""
398
 
@@ -433,6 +436,7 @@ msgid "Log."
433
  msgstr ""
434
 
435
  #: includes/class-wcj-admin-tools.php:32
 
436
  msgid "Log"
437
  msgstr ""
438
 
@@ -731,6 +735,48 @@ msgstr ""
731
  msgid "Separate custom JS for front and back end."
732
  msgstr ""
733
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
734
  #: includes/class-wcj-emails-verification.php:26
735
  msgid "Email Verification"
736
  msgstr ""
@@ -788,43 +834,17 @@ msgid ""
788
  "check your email."
789
  msgstr ""
790
 
791
- #: includes/class-wcj-emails.php:25
792
- msgid ""
793
- "Add custom emails. Add another email recipient(s) to all WooCommerce emails."
794
- msgstr ""
795
-
796
- #: includes/class-wcj-emails.php:156
797
- msgid "Booster: Email Forwarding Options"
798
- msgstr ""
799
-
800
- #: includes/class-wcj-emails.php:157
801
- msgid "Email Forwarding Options"
802
- msgstr ""
803
-
804
- #: includes/class-wcj-emails.php:159
805
- msgid ""
806
- "This section lets you add another email recipient(s) to all WooCommerce "
807
- "emails. Leave blank to disable."
808
- msgstr ""
809
-
810
- #: includes/class-wcj-emails.php:163
811
- msgid "Cc Email"
812
- msgstr ""
813
-
814
- #: includes/class-wcj-emails.php:164
815
- msgid "Cc to email, e.g. youremail@yourdomain.com. Leave blank to disable."
816
- msgstr ""
817
-
818
- #: includes/class-wcj-emails.php:170
819
- msgid "Bcc Email"
820
  msgstr ""
821
 
822
- #: includes/class-wcj-emails.php:171
823
- msgid "Bcc to email, e.g. youremail@yourdomain.com. Leave blank to disable."
824
  msgstr ""
825
 
826
  #: includes/class-wcj-empty-cart-button.php:25
827
- #: includes/shortcodes/class-wcj-general-shortcodes.php:117
828
  msgid "Empty Cart Button"
829
  msgstr ""
830
 
@@ -894,7 +914,7 @@ msgid "<strong>EU VAT Number</strong> is not valid."
894
  msgstr ""
895
 
896
  #: includes/class-wcj-export-import.php:26
897
- #: includes/admin/class-wc-settings-jetpack.php:273
898
  msgid "Export"
899
  msgstr ""
900
 
@@ -1011,32 +1031,109 @@ msgstr ""
1011
  msgid "Manage Custom Roles."
1012
  msgstr ""
1013
 
1014
- #: includes/class-wcj-general.php:113
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1015
  msgid "Booster User Role"
1016
  msgstr ""
1017
 
1018
- #: includes/class-wcj-general.php:196
1019
  msgid "Both fields are required!"
1020
  msgstr ""
1021
 
1022
- #: includes/class-wcj-general.php:199
1023
  msgid "Role ID must not be numbers only!"
1024
  msgstr ""
1025
 
1026
- #: includes/class-wcj-general.php:203
1027
  msgid "Role successfully added!"
1028
  msgstr ""
1029
 
1030
- #: includes/class-wcj-general.php:205
1031
  msgid "Role already exists!"
1032
  msgstr ""
1033
 
1034
- #: includes/class-wcj-general.php:213
1035
  #, php-format
1036
  msgid "Role %s successfully deleted!"
1037
  msgstr ""
1038
 
1039
- #: includes/class-wcj-general.php:219 includes/class-wcj-general.php:232
1040
  #: includes/class-wcj-sku.php:330
1041
  #: includes/reports/wcj-class-reports-sales.php:191
1042
  #: includes/settings/wcj-settings-product-by-user.php:161
@@ -1044,7 +1141,7 @@ msgstr ""
1044
  msgid "ID"
1045
  msgstr ""
1046
 
1047
- #: includes/class-wcj-general.php:219 includes/class-wcj-general.php:233
1048
  #: includes/class-wcj-offer-price.php:116
1049
  #: includes/export/class-wcj-fields-helper.php:282
1050
  #: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:70
@@ -1052,14 +1149,14 @@ msgstr ""
1052
  msgid "Name"
1053
  msgstr ""
1054
 
1055
- #: includes/class-wcj-general.php:219
1056
  #: includes/class-wcj-order-custom-statuses.php:337
1057
  #: includes/class-wcj-product-by-user.php:197
1058
  #: includes/settings/wcj-settings-pdf-invoicing-styling.php:125
1059
  msgid "Actions"
1060
  msgstr ""
1061
 
1062
- #: includes/class-wcj-general.php:225
1063
  #: includes/class-wcj-order-custom-statuses.php:359
1064
  #: includes/class-wcj-product-bulk-meta-editor.php:359
1065
  #: includes/class-wcj-product-by-user.php:206
@@ -1069,20 +1166,20 @@ msgstr ""
1069
  msgid "Delete"
1070
  msgstr ""
1071
 
1072
- #: includes/class-wcj-general.php:228
1073
  msgid "Existing Roles"
1074
  msgstr ""
1075
 
1076
- #: includes/class-wcj-general.php:234
1077
  msgid "Add New Role"
1078
  msgstr ""
1079
 
1080
- #: includes/class-wcj-general.php:237
1081
  #: includes/class-wcj-order-custom-statuses.php:384
1082
  #: includes/settings/wcj-settings-checkout-custom-fields.php:22
1083
  #: includes/settings/wcj-settings-checkout-custom-fields.php:29
1084
  #: includes/settings/wcj-settings-checkout-custom-fields.php:36
1085
- #: includes/settings/wcj-settings-emails.php:54
1086
  #: includes/settings/wcj-settings-eu-vat-number.php:157
1087
  #: includes/settings/wcj-settings-eu-vat-number.php:193
1088
  #: includes/settings/wcj-settings-export.php:27
@@ -1104,21 +1201,21 @@ msgstr ""
1104
  msgid "Add"
1105
  msgstr ""
1106
 
1107
- #: includes/class-wcj-general.php:300 includes/class-wcj-general.php:342
1108
  #: includes/class-wcj-product-bulk-meta-editor.php:331
1109
  #: includes/class-wcj-product-bulk-price-converter.php:148
1110
  #: includes/class-wcj-sku.php:331
1111
  #: includes/reports/wcj-class-reports-sales.php:192
1112
- #: includes/reports/wcj-class-reports-stock.php:318
1113
  msgid "Product"
1114
  msgstr ""
1115
 
1116
- #: includes/class-wcj-general.php:301 includes/class-wcj-general.php:343
1117
- #: includes/reports/wcj-class-reports-stock.php:319
1118
  msgid "Category"
1119
  msgstr ""
1120
 
1121
- #: includes/class-wcj-general.php:363
1122
  msgid "Total Products:"
1123
  msgstr ""
1124
 
@@ -1200,18 +1297,6 @@ msgstr ""
1200
  msgid "WooCommerce \"My Account\" page customization."
1201
  msgstr ""
1202
 
1203
- #: includes/class-wcj-my-account.php:75
1204
- #: includes/class-wcj-order-custom-statuses.php:359
1205
- #: includes/class-wcj-product-bulk-meta-editor.php:275
1206
- #: includes/class-wcj-product-by-user.php:206
1207
- #: includes/class-wcj-purchase-data.php:93
1208
- #: includes/classes/class-wcj-module.php:515
1209
- #: includes/functions/wcj-html-functions.php:95
1210
- #: includes/settings/wcj-settings-empty-cart.php:80
1211
- #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:367
1212
- msgid "Are you sure?"
1213
- msgstr ""
1214
-
1215
  #: includes/class-wcj-offer-price.php:36
1216
  msgid "Offer Your Price"
1217
  msgstr ""
@@ -1237,7 +1322,7 @@ msgstr ""
1237
 
1238
  #: includes/class-wcj-offer-price.php:114
1239
  #: includes/export/class-wcj-fields-helper.php:288
1240
- #: includes/reports/wcj-class-reports-stock.php:320
1241
  #: includes/settings/wcj-settings-related-products.php:24
1242
  #: includes/settings/meta-box/wcj-settings-meta-box-wholesale-price.php:72
1243
  msgid "Price"
@@ -1246,7 +1331,8 @@ msgstr ""
1246
  #: includes/class-wcj-offer-price.php:115
1247
  #: includes/settings/wcj-settings-currency-per-product.php:41
1248
  #: includes/settings/wcj-settings-currency-per-product.php:48
1249
- #: includes/settings/wcj-settings-product-by-time.php:43
 
1250
  msgid "Message"
1251
  msgstr ""
1252
 
@@ -1954,14 +2040,16 @@ msgstr ""
1954
 
1955
  #: includes/class-wcj-price-labels.php:40
1956
  #: includes/class-wcj-product-info.php:254
 
1957
  #: includes/settings/wcj-settings-add-to-cart.php:52
1958
  #: includes/settings/wcj-settings-address-formats.php:20
1959
  #: includes/settings/wcj-settings-admin-bar.php:20
1960
  #: includes/settings/wcj-settings-admin-bar.php:27
1961
  #: includes/settings/wcj-settings-admin-tools.php:20
1962
  #: includes/settings/wcj-settings-admin-tools.php:27
1963
- #: includes/settings/wcj-settings-admin-tools.php:67
1964
  #: includes/settings/wcj-settings-admin-tools.php:74
 
1965
  #: includes/settings/wcj-settings-breadcrumbs.php:20
1966
  #: includes/settings/wcj-settings-call-for-price.php:69
1967
  #: includes/settings/wcj-settings-cart-customization.php:34
@@ -1981,7 +2069,7 @@ msgstr ""
1981
  #: includes/settings/wcj-settings-general.php:81
1982
  #: includes/settings/wcj-settings-general.php:139
1983
  #: includes/settings/wcj-settings-general.php:190
1984
- #: includes/settings/wcj-settings-general.php:217
1985
  #: includes/settings/wcj-settings-global-discount.php:43
1986
  #: includes/settings/wcj-settings-left-to-free-shipping.php:23
1987
  #: includes/settings/wcj-settings-left-to-free-shipping.php:56
@@ -2025,6 +2113,10 @@ msgstr ""
2025
  #: includes/settings/wcj-settings-product-by-country.php:20
2026
  #: includes/settings/wcj-settings-product-by-country.php:27
2027
  #: includes/settings/wcj-settings-product-by-country.php:34
 
 
 
 
2028
  #: includes/settings/wcj-settings-product-by-user-role.php:20
2029
  #: includes/settings/wcj-settings-product-by-user-role.php:27
2030
  #: includes/settings/wcj-settings-product-by-user-role.php:34
@@ -2056,7 +2148,7 @@ msgstr ""
2056
  #: includes/settings/wcj-settings-shipping-calculator.php:27
2057
  #: includes/settings/wcj-settings-shipping-calculator.php:34
2058
  #: includes/settings/wcj-settings-shipping-calculator.php:41
2059
- #: includes/settings/wcj-settings-shipping-options.php:51
2060
  #: includes/settings/wcj-settings-shipping.php:24
2061
  #: includes/settings/wcj-settings-sku.php:47
2062
  #: includes/settings/wcj-settings-sku.php:150
@@ -2452,23 +2544,46 @@ msgstr ""
2452
  msgid "Countries"
2453
  msgstr ""
2454
 
2455
- #: includes/class-wcj-product-by-time.php:30
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2456
  msgid "Product Availability by Time"
2457
  msgstr ""
2458
 
2459
- #: includes/class-wcj-product-by-time.php:31
2460
  msgid "WooCommerce product availability by time."
2461
  msgstr ""
2462
 
2463
- #: includes/class-wcj-product-by-time.php:82
2464
- #: includes/class-wcj-product-by-time.php:84
2465
- #: includes/settings/wcj-settings-product-by-time.php:61
2466
  msgid "<p style=\"color:red;\">%product_title% is not available today.</p>"
2467
  msgstr ""
2468
 
2469
- #: includes/class-wcj-product-by-time.php:85
2470
- #: includes/class-wcj-product-by-time.php:87
2471
- #: includes/settings/wcj-settings-product-by-time.php:49
2472
  msgid ""
2473
  "<p style=\"color:red;\">%product_title% is available only at %time_today% "
2474
  "today.</p>"
@@ -2532,6 +2647,7 @@ msgid "Title"
2532
  msgstr ""
2533
 
2534
  #: includes/class-wcj-product-custom-info.php:24
 
2535
  #: includes/functions/wcj-general-functions.php:33
2536
  msgid "Product Info"
2537
  msgstr ""
@@ -2541,15 +2657,15 @@ msgstr ""
2541
  msgid "Add additional info to WooCommerce category and single product pages."
2542
  msgstr ""
2543
 
2544
- #: includes/class-wcj-product-images.php:24
2545
  msgid "Product Images"
2546
  msgstr ""
2547
 
2548
- #: includes/class-wcj-product-images.php:25
2549
  msgid "Customize WooCommerce products images, thumbnails and sale flashes."
2550
  msgstr ""
2551
 
2552
- #: includes/class-wcj-product-images.php:203
2553
  #: includes/settings/wcj-settings-product-images.php:103
2554
  msgid "Sale!"
2555
  msgstr ""
@@ -2560,41 +2676,41 @@ msgstr ""
2560
 
2561
  #: includes/class-wcj-product-info.php:123
2562
  #: includes/settings/wcj-settings-offer-price.php:91
2563
- #: includes/settings/wcj-settings-product-custom-info.php:71
2564
  msgid "Before product"
2565
  msgstr ""
2566
 
2567
  #: includes/class-wcj-product-info.php:124
2568
- #: includes/settings/wcj-settings-product-custom-info.php:72
2569
  msgid "Before product title"
2570
  msgstr ""
2571
 
2572
  #: includes/class-wcj-product-info.php:125
2573
  #: includes/settings/wcj-settings-offer-price.php:92
2574
- #: includes/settings/wcj-settings-product-custom-info.php:75
2575
  msgid "After product"
2576
  msgstr ""
2577
 
2578
  #: includes/class-wcj-product-info.php:126
2579
- #: includes/settings/wcj-settings-product-custom-info.php:74
2580
  msgid "After product title"
2581
  msgstr ""
2582
 
2583
  #: includes/class-wcj-product-info.php:138
2584
  #: includes/settings/wcj-settings-offer-price.php:72
2585
- #: includes/settings/wcj-settings-product-custom-info.php:62
2586
  msgid "Inside single product summary"
2587
  msgstr ""
2588
 
2589
  #: includes/class-wcj-product-info.php:139
2590
  #: includes/settings/wcj-settings-offer-price.php:71
2591
- #: includes/settings/wcj-settings-product-custom-info.php:61
2592
  msgid "Before single product summary"
2593
  msgstr ""
2594
 
2595
  #: includes/class-wcj-product-info.php:140
2596
  #: includes/settings/wcj-settings-offer-price.php:73
2597
- #: includes/settings/wcj-settings-product-custom-info.php:63
2598
  msgid "After single product summary"
2599
  msgstr ""
2600
 
@@ -2606,7 +2722,7 @@ msgstr ""
2606
  #: includes/settings/wcj-settings-left-to-free-shipping.php:74
2607
  #: includes/settings/wcj-settings-left-to-free-shipping.php:113
2608
  #: includes/settings/wcj-settings-mini-cart.php:46
2609
- #: includes/settings/wcj-settings-product-custom-info.php:54
2610
  #: includes/settings/wcj-settings-product-info.php:50
2611
  #: includes/settings/wcj-settings-product-info.php:83
2612
  #: includes/settings/wcj-settings-products-per-page.php:36
@@ -2758,7 +2874,7 @@ msgstr ""
2758
  #: includes/settings/wcj-settings-left-to-free-shipping.php:65
2759
  #: includes/settings/wcj-settings-left-to-free-shipping.php:104
2760
  #: includes/settings/wcj-settings-mini-cart.php:39
2761
- #: includes/settings/wcj-settings-product-custom-info.php:46
2762
  #: includes/settings/wcj-settings-product-tabs.php:57
2763
  msgid "Content"
2764
  msgstr ""
@@ -2844,6 +2960,8 @@ msgstr ""
2844
  #: includes/settings/wcj-settings-currency-exchange-rates.php:141
2845
  #: includes/settings/wcj-settings-pdf-invoicing.php:21
2846
  #: includes/settings/wcj-settings-product-add-to-cart.php:64
 
 
2847
  msgid "Disabled"
2848
  msgstr ""
2849
 
@@ -2923,7 +3041,7 @@ msgid "Booster: Product cost (destination)"
2923
  msgstr ""
2924
 
2925
  #: includes/class-wcj-purchase-data.php:92
2926
- #: includes/admin/class-wc-settings-jetpack.php:277
2927
  msgid "Import"
2928
  msgstr ""
2929
 
@@ -3009,7 +3127,7 @@ msgid "Booster: Product Sales (Monthly)"
3009
  msgstr ""
3010
 
3011
  #: includes/class-wcj-reports.php:221
3012
- msgid "Booster: Monthly Sales"
3013
  msgstr ""
3014
 
3015
  #: includes/class-wcj-reports.php:236
@@ -3066,13 +3184,30 @@ msgstr ""
3066
  msgid "Grant free shipping on per product basis."
3067
  msgstr ""
3068
 
3069
- #: includes/class-wcj-shipping-options.php:167
3070
- msgid "Booster: Hide shipping"
3071
  msgstr ""
3072
 
3073
- #: includes/class-wcj-shipping-options.php:168
3074
- #: includes/settings/wcj-settings-shipping-options.php:31
3075
- msgid "Hide all when free is available"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3076
  msgstr ""
3077
 
3078
  #: includes/class-wcj-shipping.php:23
@@ -3168,6 +3303,14 @@ msgstr ""
3168
  msgid "WooCommerce products stock management."
3169
  msgstr ""
3170
 
 
 
 
 
 
 
 
 
3171
  #: includes/class-wcj-wholesale-price.php:25
3172
  msgid "Wholesale Price"
3173
  msgstr ""
@@ -3227,44 +3370,44 @@ msgid ""
3227
  "This section lets you export, import or reset all Booster's modules settings."
3228
  msgstr ""
3229
 
3230
- #: includes/admin/class-wc-settings-jetpack.php:274
3231
  msgid "Export all Booster's options to a file."
3232
  msgstr ""
3233
 
3234
- #: includes/admin/class-wc-settings-jetpack.php:279
3235
  msgid "Import all Booster's options from a file."
3236
  msgstr ""
3237
 
3238
- #: includes/admin/class-wc-settings-jetpack.php:282
3239
  msgid ""
3240
  "This will reset settings to defaults for all Booster modules. Are you sure?"
3241
  msgstr ""
3242
 
3243
- #: includes/admin/class-wc-settings-jetpack.php:282
3244
  msgid "Reset"
3245
  msgstr ""
3246
 
3247
- #: includes/admin/class-wc-settings-jetpack.php:283
3248
  msgid "Reset all Booster's options."
3249
  msgstr ""
3250
 
3251
- #: includes/admin/class-wc-settings-jetpack.php:296
3252
  msgid "Version"
3253
  msgstr ""
3254
 
3255
- #: includes/admin/class-wc-settings-jetpack.php:320
3256
- #: includes/admin/class-wc-settings-jetpack.php:327
3257
  msgid "Select All"
3258
  msgstr ""
3259
 
3260
- #: includes/admin/class-wc-settings-jetpack.php:321
3261
- #: includes/admin/class-wc-settings-jetpack.php:328
3262
  #: includes/admin/class-wcj-tools.php:72
3263
  msgid "Module"
3264
  msgstr ""
3265
 
3266
- #: includes/admin/class-wc-settings-jetpack.php:322
3267
- #: includes/admin/class-wc-settings-jetpack.php:329
3268
  #: includes/admin/class-wcj-tools.php:73
3269
  #: includes/export/class-wcj-fields-helper.php:293
3270
  #: includes/gateways/class-wc-gateway-wcj-custom.php:74
@@ -3275,25 +3418,34 @@ msgstr ""
3275
  msgid "Description"
3276
  msgstr ""
3277
 
3278
- #: includes/admin/class-wc-settings-jetpack.php:374
3279
  msgid "No active modules found."
3280
  msgstr ""
3281
 
3282
- #: includes/admin/class-wc-settings-jetpack.php:377
3283
  msgid "Total Modules:"
3284
  msgstr ""
3285
 
3286
- #: includes/admin/class-wc-settings-jetpack.php:403
3287
  msgid "Autoload Booster's Options"
3288
  msgstr ""
3289
 
3290
- #: includes/admin/class-wc-settings-jetpack.php:405
3291
  msgid ""
3292
  "Choose if you want Booster's options to be autoloaded when calling "
3293
  "add_option. After saving this option, you need to Reset all Booster's "
3294
  "settings. Leave default value (i.e. Enabled) if not sure."
3295
  msgstr ""
3296
 
 
 
 
 
 
 
 
 
 
3297
  #: includes/admin/class-wcj-settings-custom-fields.php:187
3298
  #: includes/settings/wcj-settings-wpml.php:21
3299
  msgid "To use tools, module must be enabled."
@@ -3382,15 +3534,15 @@ msgid ""
3382
  "Listings, Product Tabs and more."
3383
  msgstr ""
3384
 
3385
- #: includes/admin/wcj-modules-cats.php:88
3386
  msgid "Cart & Checkout"
3387
  msgstr ""
3388
 
3389
- #: includes/admin/wcj-modules-cats.php:89
3390
  msgid "Cart and Checkout Customization, Empty Cart Button, Mini Cart and more."
3391
  msgstr ""
3392
 
3393
- #: includes/admin/wcj-modules-cats.php:105
3394
  #: includes/settings/wcj-settings-payment-gateways-by-country.php:14
3395
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:21
3396
  #: includes/settings/wcj-settings-payment-gateways-by-user-role.php:14
@@ -3398,57 +3550,66 @@ msgstr ""
3398
  msgid "Payment Gateways"
3399
  msgstr ""
3400
 
3401
- #: includes/admin/wcj-modules-cats.php:106
3402
  msgid ""
3403
  "Custom Payment Gateways, Gateways Currency, Gateways Fees and Discounts and "
3404
  "more."
3405
  msgstr ""
3406
 
3407
- #: includes/admin/wcj-modules-cats.php:121
3408
  msgid "Shipping & Orders"
3409
  msgstr ""
3410
 
3411
- #: includes/admin/wcj-modules-cats.php:122
3412
  msgid ""
3413
  "Order Custom Statuses, Order Minimum Amount, Order Numbers, Custom Shipping "
3414
  "Methods and more."
3415
  msgstr ""
3416
 
3417
- #: includes/admin/wcj-modules-cats.php:139
3418
  msgid "PDF Invoicing & Packing Slips"
3419
  msgstr ""
3420
 
3421
- #: includes/admin/wcj-modules-cats.php:140
3422
  msgid "PDF Documents"
3423
  msgstr ""
3424
 
3425
- #: includes/admin/wcj-modules-cats.php:155
3426
  msgid "Emails & Misc."
3427
  msgstr ""
3428
 
3429
- #: includes/admin/wcj-modules-cats.php:156
3430
  msgid "Emails, Reports, Export, Admin Tools, General Options and more."
3431
  msgstr ""
3432
 
3433
- #: includes/classes/class-wcj-module.php:367
 
 
 
 
 
 
 
 
 
3434
  msgid "Back to Module Settings"
3435
  msgstr ""
3436
 
3437
- #: includes/classes/class-wcj-module.php:385
3438
  #: includes/settings/wcj-settings-wpml.php:20
3439
  msgid "Module Tools"
3440
  msgstr ""
3441
 
3442
- #: includes/classes/class-wcj-module.php:458
3443
  #: includes/settings/wcj-settings-checkout-core-fields.php:23
3444
  msgid "enabled"
3445
  msgstr ""
3446
 
3447
- #: includes/classes/class-wcj-module.php:459
3448
  msgid "disabled"
3449
  msgstr ""
3450
 
3451
- #: includes/classes/class-wcj-module.php:467
3452
  #: includes/settings/wcj-settings-product-tabs.php:133
3453
  #: includes/settings/wcj-settings-product-tabs.php:141
3454
  #: includes/settings/wcj-settings-product-tabs.php:149
@@ -3456,27 +3617,27 @@ msgstr ""
3456
  msgid "Deprecated"
3457
  msgstr ""
3458
 
3459
- #: includes/classes/class-wcj-module.php:505
3460
  msgid "Reset Settings"
3461
  msgstr ""
3462
 
3463
- #: includes/classes/class-wcj-module.php:511
3464
  msgid "Reset Module to Default Settings"
3465
  msgstr ""
3466
 
3467
- #: includes/classes/class-wcj-module.php:512
3468
  msgid "Reset Submodule to Default Settings"
3469
  msgstr ""
3470
 
3471
- #: includes/classes/class-wcj-module.php:516
3472
  msgid "Reset settings"
3473
  msgstr ""
3474
 
3475
- #: includes/classes/class-wcj-module.php:550
3476
  msgid "Module Options"
3477
  msgstr ""
3478
 
3479
- #: includes/classes/class-wcj-module.php:557
3480
  msgid "Enable Module"
3481
  msgstr ""
3482
 
@@ -3998,7 +4159,7 @@ msgstr ""
3998
  #: includes/settings/wcj-settings-global-discount.php:49
3999
  #: includes/settings/wcj-settings-product-addons.php:70
4000
  #: includes/settings/wcj-settings-purchase-data.php:73
4001
- #: includes/settings/wcj-settings-shipping-options.php:65
4002
  #: includes/settings/meta-box/wcj-settings-meta-box-product-addons.php:45
4003
  #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:164
4004
  #: includes/shipping/class-wc-shipping-wcj-custom.php:123
@@ -4006,7 +4167,7 @@ msgid "Type"
4006
  msgstr ""
4007
 
4008
  #: includes/export/class-wcj-fields-helper.php:291
4009
- #: includes/settings/wcj-settings-shipping-options.php:179
4010
  msgid "Image URL"
4011
  msgstr ""
4012
 
@@ -4122,7 +4283,11 @@ msgstr ""
4122
  msgid "Availability Class"
4123
  msgstr ""
4124
 
4125
- #: includes/functions/wcj-admin-functions.php:21
 
 
 
 
4126
  #: includes/settings/wcj-settings-emails-verification.php:52
4127
  #: includes/settings/wcj-settings-emails-verification.php:69
4128
  #: includes/settings/wcj-settings-emails-verification.php:77
@@ -4130,1040 +4295,1040 @@ msgstr ""
4130
  msgid "Replaced value: %s"
4131
  msgstr ""
4132
 
4133
- #: includes/functions/wcj-admin-functions.php:21
4134
  #, php-format
4135
  msgid "Replaced values: %s"
4136
  msgstr ""
4137
 
4138
- #: includes/functions/wcj-admin-functions.php:50
4139
  msgid "Install Booster Plus to unlock all features"
4140
  msgstr ""
4141
 
4142
- #: includes/functions/wcj-admin-functions.php:51
4143
  #, php-format
4144
  msgid ""
4145
  "Some settings fields are locked and you will need %s to modify all locked "
4146
  "fields."
4147
  msgstr ""
4148
 
4149
- #: includes/functions/wcj-admin-functions.php:52
4150
  msgid "Buy now"
4151
  msgstr ""
4152
 
4153
- #: includes/functions/wcj-admin-functions.php:52
4154
  msgid "Visit Booster Site"
4155
  msgstr ""
4156
 
4157
- #: includes/functions/wcj-admin-functions.php:56
4158
  #, php-format
4159
  msgid "Get <a href=\"%s\" target=\"_blank\">Booster Plus</a> to change value."
4160
  msgstr ""
4161
 
4162
- #: includes/functions/wcj-admin-functions.php:59
4163
  #, php-format
4164
  msgid ""
4165
  "Get <a href=\"%s\" target=\"_blank\">Booster Plus</a> to enable \"%s\" "
4166
  "option."
4167
  msgstr ""
4168
 
4169
- #: includes/functions/wcj-admin-functions.php:62
4170
  #, php-format
4171
  msgid "Get Booster Plus to enable \"%s\" option."
4172
  msgstr ""
4173
 
4174
- #: includes/functions/wcj-admin-functions.php:65
4175
  #, php-format
4176
  msgid ""
4177
  "Get <a href=\"%s\" target=\"_blank\">Booster Plus</a> to change values below."
4178
  msgstr ""
4179
 
4180
- #: includes/functions/wcj-admin-functions.php:68
4181
  #, php-format
4182
  msgid ""
4183
  "Get <a href=\"%s\" target=\"_blank\">Booster Plus</a> to change values above."
4184
  msgstr ""
4185
 
4186
- #: includes/functions/wcj-admin-functions.php:71
4187
  msgid "Get Booster Plus to change value."
4188
  msgstr ""
4189
 
4190
- #: includes/functions/wcj-country-functions.php:117
4191
  msgid "Afghanistan"
4192
  msgstr ""
4193
 
4194
- #: includes/functions/wcj-country-functions.php:118
4195
  msgid "&#197;land Islands"
4196
  msgstr ""
4197
 
4198
- #: includes/functions/wcj-country-functions.php:119
4199
  msgid "Albania"
4200
  msgstr ""
4201
 
4202
- #: includes/functions/wcj-country-functions.php:120
4203
  msgid "Algeria"
4204
  msgstr ""
4205
 
4206
- #: includes/functions/wcj-country-functions.php:121
4207
  msgid "Andorra"
4208
  msgstr ""
4209
 
4210
- #: includes/functions/wcj-country-functions.php:122
4211
  msgid "Angola"
4212
  msgstr ""
4213
 
4214
- #: includes/functions/wcj-country-functions.php:123
4215
  msgid "Anguilla"
4216
  msgstr ""
4217
 
4218
- #: includes/functions/wcj-country-functions.php:124
4219
  msgid "Antarctica"
4220
  msgstr ""
4221
 
4222
- #: includes/functions/wcj-country-functions.php:125
4223
  msgid "Antigua and Barbuda"
4224
  msgstr ""
4225
 
4226
- #: includes/functions/wcj-country-functions.php:126
4227
  msgid "Argentina"
4228
  msgstr ""
4229
 
4230
- #: includes/functions/wcj-country-functions.php:127
4231
  msgid "Armenia"
4232
  msgstr ""
4233
 
4234
- #: includes/functions/wcj-country-functions.php:128
4235
  msgid "Aruba"
4236
  msgstr ""
4237
 
4238
- #: includes/functions/wcj-country-functions.php:129
4239
  msgid "Australia"
4240
  msgstr ""
4241
 
4242
- #: includes/functions/wcj-country-functions.php:130
4243
  msgid "Austria"
4244
  msgstr ""
4245
 
4246
- #: includes/functions/wcj-country-functions.php:131
4247
  msgid "Azerbaijan"
4248
  msgstr ""
4249
 
4250
- #: includes/functions/wcj-country-functions.php:132
4251
  msgid "Bahamas"
4252
  msgstr ""
4253
 
4254
- #: includes/functions/wcj-country-functions.php:133
4255
  msgid "Bahrain"
4256
  msgstr ""
4257
 
4258
- #: includes/functions/wcj-country-functions.php:134
4259
  msgid "Bangladesh"
4260
  msgstr ""
4261
 
4262
- #: includes/functions/wcj-country-functions.php:135
4263
  msgid "Barbados"
4264
  msgstr ""
4265
 
4266
- #: includes/functions/wcj-country-functions.php:136
4267
  msgid "Belarus"
4268
  msgstr ""
4269
 
4270
- #: includes/functions/wcj-country-functions.php:137
4271
  msgid "Belgium"
4272
  msgstr ""
4273
 
4274
- #: includes/functions/wcj-country-functions.php:138
4275
  msgid "Belau"
4276
  msgstr ""
4277
 
4278
- #: includes/functions/wcj-country-functions.php:139
4279
  msgid "Belize"
4280
  msgstr ""
4281
 
4282
- #: includes/functions/wcj-country-functions.php:140
4283
  msgid "Benin"
4284
  msgstr ""
4285
 
4286
- #: includes/functions/wcj-country-functions.php:141
4287
  msgid "Bermuda"
4288
  msgstr ""
4289
 
4290
- #: includes/functions/wcj-country-functions.php:142
4291
  msgid "Bhutan"
4292
  msgstr ""
4293
 
4294
- #: includes/functions/wcj-country-functions.php:143
4295
  msgid "Bolivia"
4296
  msgstr ""
4297
 
4298
- #: includes/functions/wcj-country-functions.php:144
4299
  msgid "Bonaire, Saint Eustatius and Saba"
4300
  msgstr ""
4301
 
4302
- #: includes/functions/wcj-country-functions.php:145
4303
  msgid "Bosnia and Herzegovina"
4304
  msgstr ""
4305
 
4306
- #: includes/functions/wcj-country-functions.php:146
4307
  msgid "Botswana"
4308
  msgstr ""
4309
 
4310
- #: includes/functions/wcj-country-functions.php:147
4311
  msgid "Bouvet Island"
4312
  msgstr ""
4313
 
4314
- #: includes/functions/wcj-country-functions.php:148
4315
  msgid "Brazil"
4316
  msgstr ""
4317
 
4318
- #: includes/functions/wcj-country-functions.php:149
4319
  msgid "British Indian Ocean Territory"
4320
  msgstr ""
4321
 
4322
- #: includes/functions/wcj-country-functions.php:150
4323
  msgid "British Virgin Islands"
4324
  msgstr ""
4325
 
4326
- #: includes/functions/wcj-country-functions.php:151
4327
  msgid "Brunei"
4328
  msgstr ""
4329
 
4330
- #: includes/functions/wcj-country-functions.php:152
4331
  msgid "Bulgaria"
4332
  msgstr ""
4333
 
4334
- #: includes/functions/wcj-country-functions.php:153
4335
  msgid "Burkina Faso"
4336
  msgstr ""
4337
 
4338
- #: includes/functions/wcj-country-functions.php:154
4339
  msgid "Burundi"
4340
  msgstr ""
4341
 
4342
- #: includes/functions/wcj-country-functions.php:155
4343
  msgid "Cambodia"
4344
  msgstr ""
4345
 
4346
- #: includes/functions/wcj-country-functions.php:156
4347
  msgid "Cameroon"
4348
  msgstr ""
4349
 
4350
- #: includes/functions/wcj-country-functions.php:157
4351
  msgid "Canada"
4352
  msgstr ""
4353
 
4354
- #: includes/functions/wcj-country-functions.php:158
4355
  msgid "Cape Verde"
4356
  msgstr ""
4357
 
4358
- #: includes/functions/wcj-country-functions.php:159
4359
  msgid "Cayman Islands"
4360
  msgstr ""
4361
 
4362
- #: includes/functions/wcj-country-functions.php:160
4363
  msgid "Central African Republic"
4364
  msgstr ""
4365
 
4366
- #: includes/functions/wcj-country-functions.php:161
4367
  msgid "Chad"
4368
  msgstr ""
4369
 
4370
- #: includes/functions/wcj-country-functions.php:162
4371
  msgid "Chile"
4372
  msgstr ""
4373
 
4374
- #: includes/functions/wcj-country-functions.php:163
4375
  msgid "China"
4376
  msgstr ""
4377
 
4378
- #: includes/functions/wcj-country-functions.php:164
4379
  msgid "Christmas Island"
4380
  msgstr ""
4381
 
4382
- #: includes/functions/wcj-country-functions.php:165
4383
  msgid "Cocos (Keeling) Islands"
4384
  msgstr ""
4385
 
4386
- #: includes/functions/wcj-country-functions.php:166
4387
  msgid "Colombia"
4388
  msgstr ""
4389
 
4390
- #: includes/functions/wcj-country-functions.php:167
4391
  msgid "Comoros"
4392
  msgstr ""
4393
 
4394
- #: includes/functions/wcj-country-functions.php:168
4395
  msgid "Congo (Brazzaville)"
4396
  msgstr ""
4397
 
4398
- #: includes/functions/wcj-country-functions.php:169
4399
  msgid "Congo (Kinshasa)"
4400
  msgstr ""
4401
 
4402
- #: includes/functions/wcj-country-functions.php:170
4403
  msgid "Cook Islands"
4404
  msgstr ""
4405
 
4406
- #: includes/functions/wcj-country-functions.php:171
4407
  msgid "Costa Rica"
4408
  msgstr ""
4409
 
4410
- #: includes/functions/wcj-country-functions.php:172
4411
  msgid "Croatia"
4412
  msgstr ""
4413
 
4414
- #: includes/functions/wcj-country-functions.php:173
4415
  msgid "Cuba"
4416
  msgstr ""
4417
 
4418
- #: includes/functions/wcj-country-functions.php:174
4419
  msgid "Cura&Ccedil;ao"
4420
  msgstr ""
4421
 
4422
- #: includes/functions/wcj-country-functions.php:175
4423
  msgid "Cyprus"
4424
  msgstr ""
4425
 
4426
- #: includes/functions/wcj-country-functions.php:176
4427
  msgid "Czech Republic"
4428
  msgstr ""
4429
 
4430
- #: includes/functions/wcj-country-functions.php:177
4431
  msgid "Denmark"
4432
  msgstr ""
4433
 
4434
- #: includes/functions/wcj-country-functions.php:178
4435
  msgid "Djibouti"
4436
  msgstr ""
4437
 
4438
- #: includes/functions/wcj-country-functions.php:179
4439
  msgid "Dominica"
4440
  msgstr ""
4441
 
4442
- #: includes/functions/wcj-country-functions.php:180
4443
  msgid "Dominican Republic"
4444
  msgstr ""
4445
 
4446
- #: includes/functions/wcj-country-functions.php:181
4447
  msgid "Ecuador"
4448
  msgstr ""
4449
 
4450
- #: includes/functions/wcj-country-functions.php:182
4451
  msgid "Egypt"
4452
  msgstr ""
4453
 
4454
- #: includes/functions/wcj-country-functions.php:183
4455
  msgid "El Salvador"
4456
  msgstr ""
4457
 
4458
- #: includes/functions/wcj-country-functions.php:184
4459
  msgid "Equatorial Guinea"
4460
  msgstr ""
4461
 
4462
- #: includes/functions/wcj-country-functions.php:185
4463
  msgid "Eritrea"
4464
  msgstr ""
4465
 
4466
- #: includes/functions/wcj-country-functions.php:186
4467
  msgid "Estonia"
4468
  msgstr ""
4469
 
4470
- #: includes/functions/wcj-country-functions.php:187
4471
  msgid "Ethiopia"
4472
  msgstr ""
4473
 
4474
- #: includes/functions/wcj-country-functions.php:188
4475
  msgid "Falkland Islands"
4476
  msgstr ""
4477
 
4478
- #: includes/functions/wcj-country-functions.php:189
4479
  msgid "Faroe Islands"
4480
  msgstr ""
4481
 
4482
- #: includes/functions/wcj-country-functions.php:190
4483
  msgid "Fiji"
4484
  msgstr ""
4485
 
4486
- #: includes/functions/wcj-country-functions.php:191
4487
  msgid "Finland"
4488
  msgstr ""
4489
 
4490
- #: includes/functions/wcj-country-functions.php:192
4491
  msgid "France"
4492
  msgstr ""
4493
 
4494
- #: includes/functions/wcj-country-functions.php:193
4495
  msgid "French Guiana"
4496
  msgstr ""
4497
 
4498
- #: includes/functions/wcj-country-functions.php:194
4499
  msgid "French Polynesia"
4500
  msgstr ""
4501
 
4502
- #: includes/functions/wcj-country-functions.php:195
4503
  msgid "French Southern Territories"
4504
  msgstr ""
4505
 
4506
- #: includes/functions/wcj-country-functions.php:196
4507
  msgid "Gabon"
4508
  msgstr ""
4509
 
4510
- #: includes/functions/wcj-country-functions.php:197
4511
  msgid "Gambia"
4512
  msgstr ""
4513
 
4514
- #: includes/functions/wcj-country-functions.php:198
4515
  msgid "Georgia"
4516
  msgstr ""
4517
 
4518
- #: includes/functions/wcj-country-functions.php:199
4519
  msgid "Germany"
4520
  msgstr ""
4521
 
4522
- #: includes/functions/wcj-country-functions.php:200
4523
  msgid "Ghana"
4524
  msgstr ""
4525
 
4526
- #: includes/functions/wcj-country-functions.php:201
4527
  msgid "Gibraltar"
4528
  msgstr ""
4529
 
4530
- #: includes/functions/wcj-country-functions.php:202
4531
  msgid "Greece"
4532
  msgstr ""
4533
 
4534
- #: includes/functions/wcj-country-functions.php:203
4535
  msgid "Greenland"
4536
  msgstr ""
4537
 
4538
- #: includes/functions/wcj-country-functions.php:204
4539
  msgid "Grenada"
4540
  msgstr ""
4541
 
4542
- #: includes/functions/wcj-country-functions.php:205
4543
  msgid "Guadeloupe"
4544
  msgstr ""
4545
 
4546
- #: includes/functions/wcj-country-functions.php:206
4547
  msgid "Guatemala"
4548
  msgstr ""
4549
 
4550
- #: includes/functions/wcj-country-functions.php:207
4551
  msgid "Guernsey"
4552
  msgstr ""
4553
 
4554
- #: includes/functions/wcj-country-functions.php:208
4555
  msgid "Guinea"
4556
  msgstr ""
4557
 
4558
- #: includes/functions/wcj-country-functions.php:209
4559
  msgid "Guinea-Bissau"
4560
  msgstr ""
4561
 
4562
- #: includes/functions/wcj-country-functions.php:210
4563
  msgid "Guyana"
4564
  msgstr ""
4565
 
4566
- #: includes/functions/wcj-country-functions.php:211
4567
  msgid "Haiti"
4568
  msgstr ""
4569
 
4570
- #: includes/functions/wcj-country-functions.php:212
4571
  msgid "Heard Island and McDonald Islands"
4572
  msgstr ""
4573
 
4574
- #: includes/functions/wcj-country-functions.php:213
4575
  msgid "Honduras"
4576
  msgstr ""
4577
 
4578
- #: includes/functions/wcj-country-functions.php:214
4579
  msgid "Hong Kong"
4580
  msgstr ""
4581
 
4582
- #: includes/functions/wcj-country-functions.php:215
4583
  msgid "Hungary"
4584
  msgstr ""
4585
 
4586
- #: includes/functions/wcj-country-functions.php:216
4587
  msgid "Iceland"
4588
  msgstr ""
4589
 
4590
- #: includes/functions/wcj-country-functions.php:217
4591
  msgid "India"
4592
  msgstr ""
4593
 
4594
- #: includes/functions/wcj-country-functions.php:218
4595
  msgid "Indonesia"
4596
  msgstr ""
4597
 
4598
- #: includes/functions/wcj-country-functions.php:219
4599
  msgid "Iran"
4600
  msgstr ""
4601
 
4602
- #: includes/functions/wcj-country-functions.php:220
4603
  msgid "Iraq"
4604
  msgstr ""
4605
 
4606
- #: includes/functions/wcj-country-functions.php:221
4607
  msgid "Republic of Ireland"
4608
  msgstr ""
4609
 
4610
- #: includes/functions/wcj-country-functions.php:222
4611
  msgid "Isle of Man"
4612
  msgstr ""
4613
 
4614
- #: includes/functions/wcj-country-functions.php:223
4615
  msgid "Israel"
4616
  msgstr ""
4617
 
4618
- #: includes/functions/wcj-country-functions.php:224
4619
  msgid "Italy"
4620
  msgstr ""
4621
 
4622
- #: includes/functions/wcj-country-functions.php:225
4623
  msgid "Ivory Coast"
4624
  msgstr ""
4625
 
4626
- #: includes/functions/wcj-country-functions.php:226
4627
  msgid "Jamaica"
4628
  msgstr ""
4629
 
4630
- #: includes/functions/wcj-country-functions.php:227
4631
  msgid "Japan"
4632
  msgstr ""
4633
 
4634
- #: includes/functions/wcj-country-functions.php:228
4635
  msgid "Jersey"
4636
  msgstr ""
4637
 
4638
- #: includes/functions/wcj-country-functions.php:229
4639
  msgid "Jordan"
4640
  msgstr ""
4641
 
4642
- #: includes/functions/wcj-country-functions.php:230
4643
  msgid "Kazakhstan"
4644
  msgstr ""
4645
 
4646
- #: includes/functions/wcj-country-functions.php:231
4647
  msgid "Kenya"
4648
  msgstr ""
4649
 
4650
- #: includes/functions/wcj-country-functions.php:232
4651
  msgid "Kiribati"
4652
  msgstr ""
4653
 
4654
- #: includes/functions/wcj-country-functions.php:233
4655
  msgid "Kuwait"
4656
  msgstr ""
4657
 
4658
- #: includes/functions/wcj-country-functions.php:234
4659
  msgid "Kyrgyzstan"
4660
  msgstr ""
4661
 
4662
- #: includes/functions/wcj-country-functions.php:235
4663
  msgid "Laos"
4664
  msgstr ""
4665
 
4666
- #: includes/functions/wcj-country-functions.php:236
4667
  msgid "Latvia"
4668
  msgstr ""
4669
 
4670
- #: includes/functions/wcj-country-functions.php:237
4671
  msgid "Lebanon"
4672
  msgstr ""
4673
 
4674
- #: includes/functions/wcj-country-functions.php:238
4675
  msgid "Lesotho"
4676
  msgstr ""
4677
 
4678
- #: includes/functions/wcj-country-functions.php:239
4679
  msgid "Liberia"
4680
  msgstr ""
4681
 
4682
- #: includes/functions/wcj-country-functions.php:240
4683
  msgid "Libya"
4684
  msgstr ""
4685
 
4686
- #: includes/functions/wcj-country-functions.php:241
4687
  msgid "Liechtenstein"
4688
  msgstr ""
4689
 
4690
- #: includes/functions/wcj-country-functions.php:242
4691
  msgid "Lithuania"
4692
  msgstr ""
4693
 
4694
- #: includes/functions/wcj-country-functions.php:243
4695
  msgid "Luxembourg"
4696
  msgstr ""
4697
 
4698
- #: includes/functions/wcj-country-functions.php:244
4699
  msgid "Macao S.A.R., China"
4700
  msgstr ""
4701
 
4702
- #: includes/functions/wcj-country-functions.php:245
4703
  msgid "Macedonia"
4704
  msgstr ""
4705
 
4706
- #: includes/functions/wcj-country-functions.php:246
4707
  msgid "Madagascar"
4708
  msgstr ""
4709
 
4710
- #: includes/functions/wcj-country-functions.php:247
4711
  msgid "Malawi"
4712
  msgstr ""
4713
 
4714
- #: includes/functions/wcj-country-functions.php:248
4715
  msgid "Malaysia"
4716
  msgstr ""
4717
 
4718
- #: includes/functions/wcj-country-functions.php:249
4719
  msgid "Maldives"
4720
  msgstr ""
4721
 
4722
- #: includes/functions/wcj-country-functions.php:250
4723
  msgid "Mali"
4724
  msgstr ""
4725
 
4726
- #: includes/functions/wcj-country-functions.php:251
4727
  msgid "Malta"
4728
  msgstr ""
4729
 
4730
- #: includes/functions/wcj-country-functions.php:252
4731
  msgid "Marshall Islands"
4732
  msgstr ""
4733
 
4734
- #: includes/functions/wcj-country-functions.php:253
4735
  msgid "Martinique"
4736
  msgstr ""
4737
 
4738
- #: includes/functions/wcj-country-functions.php:254
4739
  msgid "Mauritania"
4740
  msgstr ""
4741
 
4742
- #: includes/functions/wcj-country-functions.php:255
4743
  msgid "Mauritius"
4744
  msgstr ""
4745
 
4746
- #: includes/functions/wcj-country-functions.php:256
4747
  msgid "Mayotte"
4748
  msgstr ""
4749
 
4750
- #: includes/functions/wcj-country-functions.php:257
4751
  msgid "Mexico"
4752
  msgstr ""
4753
 
4754
- #: includes/functions/wcj-country-functions.php:258
4755
  msgid "Micronesia"
4756
  msgstr ""
4757
 
4758
- #: includes/functions/wcj-country-functions.php:259
4759
  msgid "Moldova"
4760
  msgstr ""
4761
 
4762
- #: includes/functions/wcj-country-functions.php:260
4763
  msgid "Monaco"
4764
  msgstr ""
4765
 
4766
- #: includes/functions/wcj-country-functions.php:261
4767
  msgid "Mongolia"
4768
  msgstr ""
4769
 
4770
- #: includes/functions/wcj-country-functions.php:262
4771
  msgid "Montenegro"
4772
  msgstr ""
4773
 
4774
- #: includes/functions/wcj-country-functions.php:263
4775
  msgid "Montserrat"
4776
  msgstr ""
4777
 
4778
- #: includes/functions/wcj-country-functions.php:264
4779
  msgid "Morocco"
4780
  msgstr ""
4781
 
4782
- #: includes/functions/wcj-country-functions.php:265
4783
  msgid "Mozambique"
4784
  msgstr ""
4785
 
4786
- #: includes/functions/wcj-country-functions.php:266
4787
  msgid "Myanmar"
4788
  msgstr ""
4789
 
4790
- #: includes/functions/wcj-country-functions.php:267
4791
  msgid "Namibia"
4792
  msgstr ""
4793
 
4794
- #: includes/functions/wcj-country-functions.php:268
4795
  msgid "Nauru"
4796
  msgstr ""
4797
 
4798
- #: includes/functions/wcj-country-functions.php:269
4799
  msgid "Nepal"
4800
  msgstr ""
4801
 
4802
- #: includes/functions/wcj-country-functions.php:270
4803
  msgid "Netherlands"
4804
  msgstr ""
4805
 
4806
- #: includes/functions/wcj-country-functions.php:271
4807
  msgid "Netherlands Antilles"
4808
  msgstr ""
4809
 
4810
- #: includes/functions/wcj-country-functions.php:272
4811
  msgid "New Caledonia"
4812
  msgstr ""
4813
 
4814
- #: includes/functions/wcj-country-functions.php:273
4815
  msgid "New Zealand"
4816
  msgstr ""
4817
 
4818
- #: includes/functions/wcj-country-functions.php:274
4819
  msgid "Nicaragua"
4820
  msgstr ""
4821
 
4822
- #: includes/functions/wcj-country-functions.php:275
4823
  msgid "Niger"
4824
  msgstr ""
4825
 
4826
- #: includes/functions/wcj-country-functions.php:276
4827
  msgid "Nigeria"
4828
  msgstr ""
4829
 
4830
- #: includes/functions/wcj-country-functions.php:277
4831
  msgid "Niue"
4832
  msgstr ""
4833
 
4834
- #: includes/functions/wcj-country-functions.php:278
4835
  msgid "Norfolk Island"
4836
  msgstr ""
4837
 
4838
- #: includes/functions/wcj-country-functions.php:279
4839
  msgid "North Korea"
4840
  msgstr ""
4841
 
4842
- #: includes/functions/wcj-country-functions.php:280
4843
  msgid "Norway"
4844
  msgstr ""
4845
 
4846
- #: includes/functions/wcj-country-functions.php:281
4847
  msgid "Oman"
4848
  msgstr ""
4849
 
4850
- #: includes/functions/wcj-country-functions.php:282
4851
  msgid "Pakistan"
4852
  msgstr ""
4853
 
4854
- #: includes/functions/wcj-country-functions.php:283
4855
  msgid "Palestinian Territory"
4856
  msgstr ""
4857
 
4858
- #: includes/functions/wcj-country-functions.php:284
4859
  msgid "Panama"
4860
  msgstr ""
4861
 
4862
- #: includes/functions/wcj-country-functions.php:285
4863
  msgid "Papua New Guinea"
4864
  msgstr ""
4865
 
4866
- #: includes/functions/wcj-country-functions.php:286
4867
  msgid "Paraguay"
4868
  msgstr ""
4869
 
4870
- #: includes/functions/wcj-country-functions.php:287
4871
  msgid "Peru"
4872
  msgstr ""
4873
 
4874
- #: includes/functions/wcj-country-functions.php:288
4875
  msgid "Philippines"
4876
  msgstr ""
4877
 
4878
- #: includes/functions/wcj-country-functions.php:289
4879
  msgid "Pitcairn"
4880
  msgstr ""
4881
 
4882
- #: includes/functions/wcj-country-functions.php:290
4883
  msgid "Poland"
4884
  msgstr ""
4885
 
4886
- #: includes/functions/wcj-country-functions.php:291
4887
  msgid "Portugal"
4888
  msgstr ""
4889
 
4890
- #: includes/functions/wcj-country-functions.php:292
4891
  msgid "Qatar"
4892
  msgstr ""
4893
 
4894
- #: includes/functions/wcj-country-functions.php:293
4895
  msgid "Reunion"
4896
  msgstr ""
4897
 
4898
- #: includes/functions/wcj-country-functions.php:294
4899
  msgid "Romania"
4900
  msgstr ""
4901
 
4902
- #: includes/functions/wcj-country-functions.php:295
4903
  msgid "Russia"
4904
  msgstr ""
4905
 
4906
- #: includes/functions/wcj-country-functions.php:296
4907
  msgid "Rwanda"
4908
  msgstr ""
4909
 
4910
- #: includes/functions/wcj-country-functions.php:297
4911
  msgid "Saint Barth&eacute;lemy"
4912
  msgstr ""
4913
 
4914
- #: includes/functions/wcj-country-functions.php:298
4915
  msgid "Saint Helena"
4916
  msgstr ""
4917
 
4918
- #: includes/functions/wcj-country-functions.php:299
4919
  msgid "Saint Kitts and Nevis"
4920
  msgstr ""
4921
 
4922
- #: includes/functions/wcj-country-functions.php:300
4923
  msgid "Saint Lucia"
4924
  msgstr ""
4925
 
4926
- #: includes/functions/wcj-country-functions.php:301
4927
  msgid "Saint Martin (French part)"
4928
  msgstr ""
4929
 
4930
- #: includes/functions/wcj-country-functions.php:302
4931
  msgid "Saint Martin (Dutch part)"
4932
  msgstr ""
4933
 
4934
- #: includes/functions/wcj-country-functions.php:303
4935
  msgid "Saint Pierre and Miquelon"
4936
  msgstr ""
4937
 
4938
- #: includes/functions/wcj-country-functions.php:304
4939
  msgid "Saint Vincent and the Grenadines"
4940
  msgstr ""
4941
 
4942
- #: includes/functions/wcj-country-functions.php:305
4943
  msgid "San Marino"
4944
  msgstr ""
4945
 
4946
- #: includes/functions/wcj-country-functions.php:306
4947
  msgid "S&atilde;o Tom&eacute; and Pr&iacute;ncipe"
4948
  msgstr ""
4949
 
4950
- #: includes/functions/wcj-country-functions.php:307
4951
  msgid "Saudi Arabia"
4952
  msgstr ""
4953
 
4954
- #: includes/functions/wcj-country-functions.php:308
4955
  msgid "Senegal"
4956
  msgstr ""
4957
 
4958
- #: includes/functions/wcj-country-functions.php:309
4959
  msgid "Serbia"
4960
  msgstr ""
4961
 
4962
- #: includes/functions/wcj-country-functions.php:310
4963
  msgid "Seychelles"
4964
  msgstr ""
4965
 
4966
- #: includes/functions/wcj-country-functions.php:311
4967
  msgid "Sierra Leone"
4968
  msgstr ""
4969
 
4970
- #: includes/functions/wcj-country-functions.php:312
4971
  msgid "Singapore"
4972
  msgstr ""
4973
 
4974
- #: includes/functions/wcj-country-functions.php:313
4975
  msgid "Slovakia"
4976
  msgstr ""
4977
 
4978
- #: includes/functions/wcj-country-functions.php:314
4979
  msgid "Slovenia"
4980
  msgstr ""
4981
 
4982
- #: includes/functions/wcj-country-functions.php:315
4983
  msgid "Solomon Islands"
4984
  msgstr ""
4985
 
4986
- #: includes/functions/wcj-country-functions.php:316
4987
  msgid "Somalia"
4988
  msgstr ""
4989
 
4990
- #: includes/functions/wcj-country-functions.php:317
4991
  msgid "South Africa"
4992
  msgstr ""
4993
 
4994
- #: includes/functions/wcj-country-functions.php:318
4995
  msgid "South Georgia/Sandwich Islands"
4996
  msgstr ""
4997
 
4998
- #: includes/functions/wcj-country-functions.php:319
4999
  msgid "South Korea"
5000
  msgstr ""
5001
 
5002
- #: includes/functions/wcj-country-functions.php:320
5003
  msgid "South Sudan"
5004
  msgstr ""
5005
 
5006
- #: includes/functions/wcj-country-functions.php:321
5007
  msgid "Spain"
5008
  msgstr ""
5009
 
5010
- #: includes/functions/wcj-country-functions.php:322
5011
  msgid "Sri Lanka"
5012
  msgstr ""
5013
 
5014
- #: includes/functions/wcj-country-functions.php:323
5015
  msgid "Sudan"
5016
  msgstr ""
5017
 
5018
- #: includes/functions/wcj-country-functions.php:324
5019
  msgid "Suriname"
5020
  msgstr ""
5021
 
5022
- #: includes/functions/wcj-country-functions.php:325
5023
  msgid "Svalbard and Jan Mayen"
5024
  msgstr ""
5025
 
5026
- #: includes/functions/wcj-country-functions.php:326
5027
  msgid "Swaziland"
5028
  msgstr ""
5029
 
5030
- #: includes/functions/wcj-country-functions.php:327
5031
  msgid "Sweden"
5032
  msgstr ""
5033
 
5034
- #: includes/functions/wcj-country-functions.php:328
5035
  msgid "Switzerland"
5036
  msgstr ""
5037
 
5038
- #: includes/functions/wcj-country-functions.php:329
5039
  msgid "Syria"
5040
  msgstr ""
5041
 
5042
- #: includes/functions/wcj-country-functions.php:330
5043
  msgid "Taiwan"
5044
  msgstr ""
5045
 
5046
- #: includes/functions/wcj-country-functions.php:331
5047
  msgid "Tajikistan"
5048
  msgstr ""
5049
 
5050
- #: includes/functions/wcj-country-functions.php:332
5051
  msgid "Tanzania"
5052
  msgstr ""
5053
 
5054
- #: includes/functions/wcj-country-functions.php:333
5055
  msgid "Thailand"
5056
  msgstr ""
5057
 
5058
- #: includes/functions/wcj-country-functions.php:334
5059
  msgid "Timor-Leste"
5060
  msgstr ""
5061
 
5062
- #: includes/functions/wcj-country-functions.php:335
5063
  msgid "Togo"
5064
  msgstr ""
5065
 
5066
- #: includes/functions/wcj-country-functions.php:336
5067
  msgid "Tokelau"
5068
  msgstr ""
5069
 
5070
- #: includes/functions/wcj-country-functions.php:337
5071
  msgid "Tonga"
5072
  msgstr ""
5073
 
5074
- #: includes/functions/wcj-country-functions.php:338
5075
  msgid "Trinidad and Tobago"
5076
  msgstr ""
5077
 
5078
- #: includes/functions/wcj-country-functions.php:339
5079
  msgid "Tunisia"
5080
  msgstr ""
5081
 
5082
- #: includes/functions/wcj-country-functions.php:340
5083
  msgid "Turkey"
5084
  msgstr ""
5085
 
5086
- #: includes/functions/wcj-country-functions.php:341
5087
  msgid "Turkmenistan"
5088
  msgstr ""
5089
 
5090
- #: includes/functions/wcj-country-functions.php:342
5091
  msgid "Turks and Caicos Islands"
5092
  msgstr ""
5093
 
5094
- #: includes/functions/wcj-country-functions.php:343
5095
  msgid "Tuvalu"
5096
  msgstr ""
5097
 
5098
- #: includes/functions/wcj-country-functions.php:344
5099
  msgid "Uganda"
5100
  msgstr ""
5101
 
5102
- #: includes/functions/wcj-country-functions.php:345
5103
  msgid "Ukraine"
5104
  msgstr ""
5105
 
5106
- #: includes/functions/wcj-country-functions.php:346
5107
  msgid "United Arab Emirates"
5108
  msgstr ""
5109
 
5110
- #: includes/functions/wcj-country-functions.php:347
5111
  msgid "United Kingdom (UK)"
5112
  msgstr ""
5113
 
5114
- #: includes/functions/wcj-country-functions.php:348
5115
  msgid "United States (US)"
5116
  msgstr ""
5117
 
5118
- #: includes/functions/wcj-country-functions.php:349
5119
  msgid "Uruguay"
5120
  msgstr ""
5121
 
5122
- #: includes/functions/wcj-country-functions.php:350
5123
  msgid "Uzbekistan"
5124
  msgstr ""
5125
 
5126
- #: includes/functions/wcj-country-functions.php:351
5127
  msgid "Vanuatu"
5128
  msgstr ""
5129
 
5130
- #: includes/functions/wcj-country-functions.php:352
5131
  msgid "Vatican"
5132
  msgstr ""
5133
 
5134
- #: includes/functions/wcj-country-functions.php:353
5135
  msgid "Venezuela"
5136
  msgstr ""
5137
 
5138
- #: includes/functions/wcj-country-functions.php:354
5139
  msgid "Vietnam"
5140
  msgstr ""
5141
 
5142
- #: includes/functions/wcj-country-functions.php:355
5143
  msgid "Wallis and Futuna"
5144
  msgstr ""
5145
 
5146
- #: includes/functions/wcj-country-functions.php:356
5147
  msgid "Western Sahara"
5148
  msgstr ""
5149
 
5150
- #: includes/functions/wcj-country-functions.php:357
5151
  msgid "Western Samoa"
5152
  msgstr ""
5153
 
5154
- #: includes/functions/wcj-country-functions.php:358
5155
  msgid "Yemen"
5156
  msgstr ""
5157
 
5158
- #: includes/functions/wcj-country-functions.php:359
5159
  msgid "Zambia"
5160
  msgstr ""
5161
 
5162
- #: includes/functions/wcj-country-functions.php:360
5163
  msgid "Zimbabwe"
5164
  msgstr ""
5165
 
5166
- #: includes/functions/wcj-country-functions.php:361
5167
  msgid "European Union"
5168
  msgstr ""
5169
 
@@ -6209,6 +6374,8 @@ msgstr ""
6209
  #: includes/settings/meta-box/wcj-settings-meta-box-price-by-user-role.php:37
6210
  #: includes/settings/meta-box/wcj-settings-meta-box-product-addons.php:21
6211
  #: includes/settings/meta-box/wcj-settings-meta-box-product-bookings.php:14
 
 
6212
  #: includes/settings/meta-box/wcj-settings-meta-box-product-open-pricing.php:14
6213
  #: includes/settings/meta-box/wcj-settings-meta-box-product-price-by-formula.php:21
6214
  msgid "Enabled"
@@ -6267,13 +6434,6 @@ msgstr ""
6267
  msgid "Password"
6268
  msgstr ""
6269
 
6270
- #: includes/input-fields/class-wcj-product-input-fields-abstract.php:59
6271
- #: includes/settings/wcj-settings-checkout-custom-fields.php:92
6272
- #: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:88
6273
- #: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:102
6274
- msgid "Country"
6275
- msgstr ""
6276
-
6277
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:62
6278
  #: includes/settings/wcj-settings-checkout-custom-fields.php:95
6279
  msgid "Phone"
@@ -6696,11 +6856,6 @@ msgstr ""
6696
  msgid "Booster: PDF Invoices"
6697
  msgstr ""
6698
 
6699
- #: includes/pdf-invoices/submodules/class-wcj-pdf-invoicing-emails.php:24
6700
- #: includes/settings/wcj-settings-offer-price.php:226
6701
- msgid "Email Options"
6702
- msgstr ""
6703
-
6704
  #: includes/pdf-invoices/submodules/class-wcj-pdf-invoicing-footer.php:21
6705
  msgid "Footer"
6706
  msgstr ""
@@ -6800,61 +6955,68 @@ msgid "Report for:"
6800
  msgstr ""
6801
 
6802
  #: includes/reports/wcj-class-reports-monthly-sales.php:37
 
 
 
 
6803
  msgid "Currency rates deleted."
6804
  msgstr ""
6805
 
6806
- #: includes/reports/wcj-class-reports-monthly-sales.php:135
6807
  msgid "Days"
6808
  msgstr ""
6809
 
6810
- #: includes/reports/wcj-class-reports-monthly-sales.php:136
6811
  msgid "Total Orders"
6812
  msgstr ""
6813
 
6814
- #: includes/reports/wcj-class-reports-monthly-sales.php:137
6815
  msgid "Orders Average / Day"
6816
  msgstr ""
6817
 
6818
- #: includes/reports/wcj-class-reports-monthly-sales.php:138
6819
  #: includes/reports/wcj-class-reports-sales.php:325
6820
  msgid "Total Sum"
6821
  msgstr ""
6822
 
6823
- #: includes/reports/wcj-class-reports-monthly-sales.php:139
6824
  msgid "Total Sum (excl. TAX)"
6825
  msgstr ""
6826
 
6827
- #: includes/reports/wcj-class-reports-monthly-sales.php:140
6828
  msgid "Average / Order (excl. TAX)"
6829
  msgstr ""
6830
 
6831
- #: includes/reports/wcj-class-reports-monthly-sales.php:141
6832
  msgid "Average / Day (excl. TAX)"
6833
  msgstr ""
6834
 
6835
- #: includes/reports/wcj-class-reports-monthly-sales.php:142
6836
  msgid "Currency Rates"
6837
  msgstr ""
6838
 
6839
- #: includes/reports/wcj-class-reports-monthly-sales.php:217
6840
- #, php-format
6841
- msgid "Error getting currency rate for %s"
6842
  msgstr ""
6843
 
6844
- #: includes/reports/wcj-class-reports-monthly-sales.php:275
6845
  msgid "Totals"
6846
  msgstr ""
6847
 
6848
- #: includes/reports/wcj-class-reports-monthly-sales.php:310
6849
  msgid "Report currency"
6850
  msgstr ""
6851
 
6852
- #: includes/reports/wcj-class-reports-monthly-sales.php:324
6853
  #, php-format
6854
  msgid "Report generated in: %s s"
6855
  msgstr ""
6856
 
6857
- #: includes/reports/wcj-class-reports-monthly-sales.php:326
 
 
 
 
6858
  msgid "Reset Currency Rates"
6859
  msgstr ""
6860
 
@@ -6920,103 +7082,107 @@ msgstr ""
6920
  msgid "Filter products"
6921
  msgstr ""
6922
 
6923
- #: includes/reports/wcj-class-reports-stock.php:28
6924
  msgid "All Products on Stock"
6925
  msgstr ""
6926
 
6927
- #: includes/reports/wcj-class-reports-stock.php:29
6928
  msgid "Report shows all products that are on stock and some sales info."
6929
  msgstr ""
6930
 
6931
- #: includes/reports/wcj-class-reports-stock.php:33
6932
  msgid "Understocked"
6933
  msgstr ""
6934
 
6935
- #: includes/reports/wcj-class-reports-stock.php:34
6936
  msgid ""
6937
  "Report shows all products that are low in stock calculated on product's "
6938
  "sales data."
6939
  msgstr ""
6940
 
6941
- #: includes/reports/wcj-class-reports-stock.php:36
6942
  msgid ""
6943
  "Threshold for minimum stock is equal to half of the sales in selected days "
6944
  "range."
6945
  msgstr ""
6946
 
6947
- #: includes/reports/wcj-class-reports-stock.php:40
6948
  msgid "Overstocked"
6949
  msgstr ""
6950
 
6951
- #: includes/reports/wcj-class-reports-stock.php:41
6952
  msgid ""
6953
  "Report shows all products that are on stock, but have no sales in selected "
6954
  "period. Only products added before the start date of selected period are "
6955
  "accounted."
6956
  msgstr ""
6957
 
6958
- #: includes/reports/wcj-class-reports-stock.php:212
6959
  msgid "deleted"
6960
  msgstr ""
6961
 
6962
- #: includes/reports/wcj-class-reports-stock.php:322
6963
  msgid "Stock price"
6964
  msgstr ""
6965
 
6966
- #: includes/reports/wcj-class-reports-stock.php:323
6967
  msgid "Total stock price"
6968
  msgstr ""
6969
 
6970
- #: includes/reports/wcj-class-reports-stock.php:325
6971
  msgid "Last sale"
6972
  msgstr ""
6973
 
6974
- #: includes/reports/wcj-class-reports-stock.php:326
6975
  #, php-format
6976
  msgid "Sales in last %s days"
6977
  msgstr ""
6978
 
6979
- #: includes/reports/wcj-class-reports-stock.php:327
6980
  msgid "Total sales"
6981
  msgstr ""
6982
 
6983
- #: includes/reports/wcj-class-reports-stock.php:330
6984
  msgid "Stock to minimum"
6985
  msgstr ""
6986
 
6987
- #: includes/reports/wcj-class-reports-stock.php:363
6988
  msgid "purchase price:"
6989
  msgstr ""
6990
 
6991
- #: includes/reports/wcj-class-reports-stock.php:368
6992
  msgid "stock purchase price:"
6993
  msgstr ""
6994
 
6995
- #: includes/reports/wcj-class-reports-stock.php:374
6996
  msgid "No sales yet"
6997
  msgstr ""
6998
 
6999
- #: includes/reports/wcj-class-reports-stock.php:379
7000
  msgid "profit:"
7001
  msgstr ""
7002
 
7003
- #: includes/reports/wcj-class-reports-stock.php:403
7004
  msgid "Total current stock value"
7005
  msgstr ""
7006
 
7007
- #: includes/reports/wcj-class-reports-stock.php:404
7008
  msgid "Total stock value"
7009
  msgstr ""
7010
 
7011
- #: includes/reports/wcj-class-reports-stock.php:405
7012
  msgid "Product stock value average"
7013
  msgstr ""
7014
 
7015
- #: includes/reports/wcj-class-reports-stock.php:406
7016
  msgid "Product stock average"
7017
  msgstr ""
7018
 
7019
- #: includes/reports/wcj-class-reports-stock.php:410
 
 
 
 
7020
  msgid "Report was generated in: "
7021
  msgstr ""
7022
 
@@ -7039,12 +7205,11 @@ msgstr ""
7039
  #: includes/settings/wcj-settings-general.php:156
7040
  #: includes/settings/wcj-settings-order-quantities.php:21
7041
  #: includes/settings/wcj-settings-order-quantities.php:70
7042
- #: includes/settings/wcj-settings-product-by-time.php:21
7043
  #: includes/settings/wcj-settings-product-images.php:19
7044
  #: includes/settings/wcj-settings-product-images.php:95
7045
  #: includes/settings/wcj-settings-shipping-calculator.php:69
7046
- #: includes/settings/wcj-settings-shipping-options.php:91
7047
- #: includes/settings/wcj-settings-shipping-options.php:137
7048
  #: includes/settings/wcj-settings-sorting.php:20
7049
  #: includes/settings/wcj-settings-sorting.php:99
7050
  #: includes/settings/wcj-settings-sorting.php:123
@@ -7082,6 +7247,8 @@ msgstr ""
7082
 
7083
  #: includes/settings/wcj-settings-add-to-cart.php:92
7084
  #: includes/settings/wcj-settings-product-addons.php:15
 
 
7085
  msgid "Per Product Options"
7086
  msgstr ""
7087
 
@@ -7232,12 +7399,12 @@ msgstr ""
7232
  #: includes/settings/wcj-settings-product-addons.php:129
7233
  #: includes/settings/wcj-settings-product-bookings.php:72
7234
  #: includes/settings/wcj-settings-product-by-country.php:14
7235
- #: includes/settings/wcj-settings-product-by-time.php:14
7236
  #: includes/settings/wcj-settings-product-by-user-role.php:14
7237
  #: includes/settings/wcj-settings-product-by-user.php:59
7238
  #: includes/settings/wcj-settings-product-open-pricing.php:16
7239
  #: includes/settings/wcj-settings-products-per-page.php:14
7240
  #: includes/settings/wcj-settings-products-xml.php:17
 
7241
  #: includes/settings/wcj-settings-wholesale-price.php:15
7242
  msgid "Options"
7243
  msgstr ""
@@ -7254,24 +7421,24 @@ msgstr ""
7254
  msgid "Admin Tools Options"
7255
  msgstr ""
7256
 
7257
- #: includes/settings/wcj-settings-admin-tools.php:19
7258
- msgid "Logging"
7259
  msgstr ""
7260
 
7261
- #: includes/settings/wcj-settings-admin-tools.php:26
7262
  msgid "Debug"
7263
  msgstr ""
7264
 
7265
- #: includes/settings/wcj-settings-admin-tools.php:33
7266
  msgid "PHP Memory Limit"
7267
  msgstr ""
7268
 
7269
- #: includes/settings/wcj-settings-admin-tools.php:34
7270
  msgid "megabytes."
7271
  msgstr ""
7272
 
7273
- #: includes/settings/wcj-settings-admin-tools.php:35
7274
- #: includes/settings/wcj-settings-admin-tools.php:44
7275
  #: includes/settings/wcj-settings-offer-price.php:139
7276
  #: includes/settings/wcj-settings-offer-price.php:147
7277
  #: includes/settings/meta-box/wcj-settings-meta-box-offer-price.php:43
@@ -7279,23 +7446,23 @@ msgstr ""
7279
  msgid "Set zero to disable."
7280
  msgstr ""
7281
 
7282
- #: includes/settings/wcj-settings-admin-tools.php:42
7283
  msgid "PHP Time Limit"
7284
  msgstr ""
7285
 
7286
- #: includes/settings/wcj-settings-admin-tools.php:43
7287
  msgid "seconds."
7288
  msgstr ""
7289
 
7290
- #: includes/settings/wcj-settings-admin-tools.php:59
7291
  msgid "System Info"
7292
  msgstr ""
7293
 
7294
- #: includes/settings/wcj-settings-admin-tools.php:66
7295
  msgid "Show Order Meta"
7296
  msgstr ""
7297
 
7298
- #: includes/settings/wcj-settings-admin-tools.php:73
7299
  msgid "Show Product Meta"
7300
  msgstr ""
7301
 
@@ -7421,21 +7588,21 @@ msgstr ""
7421
  #: includes/settings/wcj-settings-cart.php:24
7422
  #: includes/settings/wcj-settings-checkout-custom-info.php:19
7423
  #: includes/settings/wcj-settings-mini-cart.php:19
7424
- #: includes/settings/wcj-settings-product-custom-info.php:26
7425
  msgid "Total Blocks"
7426
  msgstr ""
7427
 
7428
  #: includes/settings/wcj-settings-cart.php:39
7429
  #: includes/settings/wcj-settings-checkout-custom-info.php:35
7430
  #: includes/settings/wcj-settings-mini-cart.php:34
7431
- #: includes/settings/wcj-settings-product-custom-info.php:41
7432
  msgid "Info Block"
7433
  msgstr ""
7434
 
7435
  #: includes/settings/wcj-settings-cart.php:59
7436
  #: includes/settings/wcj-settings-checkout-custom-info.php:85
7437
  #: includes/settings/wcj-settings-mini-cart.php:58
7438
- #: includes/settings/wcj-settings-product-custom-info.php:80
7439
  msgid "Position Order (i.e. Priority)"
7440
  msgstr ""
7441
 
@@ -8347,6 +8514,25 @@ msgstr ""
8347
  msgid "Custom JS - Back end (Admin)"
8348
  msgstr ""
8349
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8350
  #: includes/settings/wcj-settings-emails-verification.php:19
8351
  msgid "Skip Email Verification for User Roles"
8352
  msgstr ""
@@ -8393,10 +8579,6 @@ msgstr ""
8393
  msgid "Verification Message - Resend"
8394
  msgstr ""
8395
 
8396
- #: includes/settings/wcj-settings-emails.php:14
8397
- msgid "Custom Emails"
8398
- msgstr ""
8399
-
8400
  #: includes/settings/wcj-settings-emails.php:18
8401
  #, php-format
8402
  msgid ""
@@ -8413,25 +8595,6 @@ msgstr ""
8413
  msgid "Admin Title Custom Email"
8414
  msgstr ""
8415
 
8416
- #: includes/settings/wcj-settings-emails.php:48
8417
- msgid "Product Info in Item Name"
8418
- msgstr ""
8419
-
8420
- #: includes/settings/wcj-settings-emails.php:53
8421
- msgid "Add Product Info to Item Name"
8422
- msgstr ""
8423
-
8424
- #: includes/settings/wcj-settings-emails.php:60
8425
- msgid "Info"
8426
- msgstr ""
8427
-
8428
- #: includes/settings/wcj-settings-emails.php:61
8429
- #, php-format
8430
- msgid ""
8431
- "You can use <a target=\"_blank\" href=\"%s\">Booster's products shortcodes</"
8432
- "a> here."
8433
- msgstr ""
8434
-
8435
  #: includes/settings/wcj-settings-empty-cart.php:15
8436
  msgid ""
8437
  "You can also use <strong>[wcj_empty_cart_button]</strong> shortcode to place "
@@ -8835,6 +8998,8 @@ msgid "PayPal Email per Product"
8835
  msgstr ""
8836
 
8837
  #: includes/settings/wcj-settings-general.php:140
 
 
8838
  msgid "This will add new meta box to each product's edit page."
8839
  msgstr ""
8840
 
@@ -8860,50 +9025,65 @@ msgid "In seconds. Default: 48 hours (60 * 60 * 48)"
8860
  msgstr ""
8861
 
8862
  #: includes/settings/wcj-settings-general.php:182
8863
- msgid "URL Coupons Options"
8864
  msgstr ""
8865
 
8866
  #: includes/settings/wcj-settings-general.php:183
8867
- #, php-format
8868
- msgid ""
8869
- "Additionally you can hide standard coupon field on cart page in Booster's <a "
8870
- "href=\"%s\">Cart Customization</a> module."
8871
  msgstr ""
8872
 
8873
  #: includes/settings/wcj-settings-general.php:189
8874
- msgid "URL Coupons"
8875
  msgstr ""
8876
 
8877
- #: includes/settings/wcj-settings-general.php:191
8878
- msgid ""
8879
- "When enabled, your users can apply shop's standard coupons, by visiting URL. "
8880
- "E.g.: http://yoursite.com/?wcj_apply_coupon=couponcode."
8881
  msgstr ""
8882
 
8883
- #: includes/settings/wcj-settings-general.php:197
8884
- msgid "URL Coupons Key"
8885
  msgstr ""
8886
 
8887
- #: includes/settings/wcj-settings-general.php:198
8888
- msgid ""
8889
- "URL key. If you change this, make sure it's unique and is not used anywhere "
8890
- "on your site (e.g. by another plugin)."
8891
  msgstr ""
8892
 
8893
- #: includes/settings/wcj-settings-general.php:208
8894
- msgid "Booster User Roles Changer Options"
 
 
 
 
8895
  msgstr ""
8896
 
8897
- #: includes/settings/wcj-settings-general.php:209
8898
- msgid "This will add user roles changer tool to admin bar."
8899
  msgstr ""
8900
 
8901
- #: includes/settings/wcj-settings-general.php:216
8902
- msgid "Booster User Roles Changer"
8903
  msgstr ""
8904
 
8905
- #: includes/settings/wcj-settings-general.php:225
8906
- msgid "Enabled for"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8907
  msgstr ""
8908
 
8909
  #: includes/settings/wcj-settings-global-discount.php:20
@@ -9193,12 +9373,12 @@ msgid "Position On Single Product Page"
9193
  msgstr ""
9194
 
9195
  #: includes/settings/wcj-settings-offer-price.php:70
9196
- #: includes/settings/wcj-settings-product-custom-info.php:60
9197
  msgid "Before single product"
9198
  msgstr ""
9199
 
9200
  #: includes/settings/wcj-settings-offer-price.php:74
9201
- #: includes/settings/wcj-settings-product-custom-info.php:64
9202
  msgid "After single product"
9203
  msgstr ""
9204
 
@@ -10840,6 +11020,7 @@ msgid ""
10840
  msgstr ""
10841
 
10842
  #: includes/settings/wcj-settings-product-add-to-cart.php:24
 
10843
  msgid "All Products"
10844
  msgstr ""
10845
 
@@ -10855,6 +11036,8 @@ msgid ""
10855
  msgstr ""
10856
 
10857
  #: includes/settings/wcj-settings-product-add-to-cart.php:39
 
 
10858
  msgid "Per Product"
10859
  msgstr ""
10860
 
@@ -11177,6 +11360,44 @@ msgstr ""
11177
  msgid "Admin Products List Column"
11178
  msgstr ""
11179
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11180
  #: includes/settings/wcj-settings-product-by-time.php:15
11181
  #, php-format
11182
  msgid "Local time is <code>%s</code>."
@@ -11190,28 +11411,23 @@ msgstr ""
11190
  msgid "Time formats:"
11191
  msgstr ""
11192
 
11193
- #: includes/settings/wcj-settings-product-by-time.php:44
11194
  msgid "Message when product is not available by time."
11195
  msgstr ""
11196
 
11197
- #: includes/settings/wcj-settings-product-by-time.php:45
11198
  msgid "Replaceable values:"
11199
  msgstr ""
11200
 
11201
- #: includes/settings/wcj-settings-product-by-time.php:46
11202
- #: includes/settings/wcj-settings-product-by-time.php:58
11203
- msgid "You can also use shortcodes here."
11204
- msgstr ""
11205
-
11206
- #: includes/settings/wcj-settings-product-by-time.php:55
11207
  msgid "Message (Day Off)"
11208
  msgstr ""
11209
 
11210
- #: includes/settings/wcj-settings-product-by-time.php:56
11211
  msgid "Message when product is not available by time (day off)."
11212
  msgstr ""
11213
 
11214
- #: includes/settings/wcj-settings-product-by-time.php:57
11215
  msgid "Replaceable value:"
11216
  msgstr ""
11217
 
@@ -11287,19 +11503,19 @@ msgstr ""
11287
  msgid "Custom Taxonomy"
11288
  msgstr ""
11289
 
11290
- #: includes/settings/wcj-settings-product-custom-info.php:18
11291
  msgid "Single"
11292
  msgstr ""
11293
 
11294
- #: includes/settings/wcj-settings-product-custom-info.php:18
11295
  msgid "Archive"
11296
  msgstr ""
11297
 
11298
- #: includes/settings/wcj-settings-product-custom-info.php:21
11299
  msgid "Product Custom Info Blocks"
11300
  msgstr ""
11301
 
11302
- #: includes/settings/wcj-settings-product-custom-info.php:50
11303
  #: includes/settings/wcj-settings-product-images.php:55
11304
  #: includes/settings/wcj-settings-product-images.php:64
11305
  #: includes/settings/wcj-settings-product-images.php:73
@@ -11309,57 +11525,57 @@ msgstr ""
11309
  msgid "You can use shortcodes here."
11310
  msgstr ""
11311
 
11312
- #: includes/settings/wcj-settings-product-custom-info.php:65
11313
  msgid "Before add to cart form"
11314
  msgstr ""
11315
 
11316
- #: includes/settings/wcj-settings-product-custom-info.php:66
11317
  msgid "Before add to cart button"
11318
  msgstr ""
11319
 
11320
- #: includes/settings/wcj-settings-product-custom-info.php:67
11321
  msgid "After add to cart button"
11322
  msgstr ""
11323
 
11324
- #: includes/settings/wcj-settings-product-custom-info.php:68
11325
  msgid "After add to cart form"
11326
  msgstr ""
11327
 
11328
- #: includes/settings/wcj-settings-product-custom-info.php:73
11329
  msgid "Inside product title"
11330
  msgstr ""
11331
 
11332
- #: includes/settings/wcj-settings-product-custom-info.php:87
11333
  msgid "Product Categories to Include"
11334
  msgstr ""
11335
 
11336
- #: includes/settings/wcj-settings-product-custom-info.php:88
11337
- #: includes/settings/wcj-settings-product-custom-info.php:98
11338
- #: includes/settings/wcj-settings-product-custom-info.php:108
11339
- #: includes/settings/wcj-settings-product-custom-info.php:118
11340
- #: includes/settings/wcj-settings-product-custom-info.php:128
11341
- #: includes/settings/wcj-settings-product-custom-info.php:138
11342
  msgid "Leave blank to disable the option."
11343
  msgstr ""
11344
 
11345
- #: includes/settings/wcj-settings-product-custom-info.php:97
11346
  msgid "Product Categories to Exclude"
11347
  msgstr ""
11348
 
11349
- #: includes/settings/wcj-settings-product-custom-info.php:107
11350
  msgid "Product Tags to Include"
11351
  msgstr ""
11352
 
11353
- #: includes/settings/wcj-settings-product-custom-info.php:117
11354
  msgid "Product Tags to Exclude"
11355
  msgstr ""
11356
 
11357
- #: includes/settings/wcj-settings-product-custom-info.php:127
11358
  #: includes/settings/wcj-settings-products-xml.php:138
11359
  msgid "Products to Include"
11360
  msgstr ""
11361
 
11362
- #: includes/settings/wcj-settings-product-custom-info.php:137
11363
  #: includes/settings/wcj-settings-products-xml.php:147
11364
  msgid "Products to Exclude"
11365
  msgstr ""
@@ -11728,12 +11944,6 @@ msgstr ""
11728
  msgid "Admin Products List - Custom Columns"
11729
  msgstr ""
11730
 
11731
- #: includes/settings/wcj-settings-product-listings.php:180
11732
- #: includes/settings/wcj-settings-product-listings.php:238
11733
- #: includes/settings/wcj-settings-stock.php:23
11734
- msgid "Enable section"
11735
- msgstr ""
11736
-
11737
  #: includes/settings/wcj-settings-product-listings.php:232
11738
  msgid "Admin Products List - Columns Order"
11739
  msgstr ""
@@ -12106,10 +12316,6 @@ msgstr ""
12106
  msgid "Path on server:"
12107
  msgstr ""
12108
 
12109
- #: includes/settings/wcj-settings-products-xml.php:115
12110
- msgid "URL:"
12111
- msgstr ""
12112
-
12113
  #: includes/settings/wcj-settings-products-xml.php:122
12114
  msgid "Update Period"
12115
  msgstr ""
@@ -12434,34 +12640,42 @@ msgid "Display profit"
12434
  msgstr ""
12435
 
12436
  #: includes/settings/wcj-settings-reports.php:93
12437
- msgid "Monthly Sales (with currency conversions)"
 
 
 
 
 
 
 
 
12438
  msgstr ""
12439
 
12440
- #: includes/settings/wcj-settings-reports.php:99
12441
  msgid "Customers by Country"
12442
  msgstr ""
12443
 
12444
- #: includes/settings/wcj-settings-reports.php:105
12445
  msgid "Customers by Country Sets"
12446
  msgstr ""
12447
 
12448
- #: includes/settings/wcj-settings-reports.php:111
12449
  msgid "All in Stock with sales data"
12450
  msgstr ""
12451
 
12452
- #: includes/settings/wcj-settings-reports.php:117
12453
  msgid "Understocked products (calculated by sales data)"
12454
  msgstr ""
12455
 
12456
- #: includes/settings/wcj-settings-reports.php:123
12457
  msgid "Overstocked products (calculated by sales data)"
12458
  msgstr ""
12459
 
12460
- #: includes/settings/wcj-settings-reports.php:131
12461
  msgid "Available Reports"
12462
  msgstr ""
12463
 
12464
- #: includes/settings/wcj-settings-reports.php:148
12465
  msgid "View report"
12466
  msgstr ""
12467
 
@@ -12528,7 +12742,7 @@ msgid "Update Totals"
12528
  msgstr ""
12529
 
12530
  #: includes/settings/wcj-settings-shipping-options.php:14
12531
- msgid "Hide if Free is Available"
12532
  msgstr ""
12533
 
12534
  #: includes/settings/wcj-settings-shipping-options.php:16
@@ -12537,41 +12751,41 @@ msgid ""
12537
  "available on shop frontend."
12538
  msgstr ""
12539
 
12540
- #: includes/settings/wcj-settings-shipping-options.php:30
12541
- msgid "Hide shipping"
12542
  msgstr ""
12543
 
12544
- #: includes/settings/wcj-settings-shipping-options.php:44
12545
- #: includes/settings/wcj-settings-shipping-options.php:50
12546
  msgid "Free Shipping by Product"
12547
  msgstr ""
12548
 
12549
- #: includes/settings/wcj-settings-shipping-options.php:45
12550
  msgid ""
12551
  "In this section you can select products which grant free shipping when added "
12552
  "to cart."
12553
  msgstr ""
12554
 
12555
- #: includes/settings/wcj-settings-shipping-options.php:66
12556
  msgid ""
12557
  "Select either <strong>all products</strong> or <strong>at least one product</"
12558
  "strong> in cart must grant free shipping."
12559
  msgstr ""
12560
 
12561
- #: includes/settings/wcj-settings-shipping-options.php:71
12562
  msgid "All products in cart must grant free shipping"
12563
  msgstr ""
12564
 
12565
- #: includes/settings/wcj-settings-shipping-options.php:72
12566
  msgid "At least one product in cart must grant free shipping"
12567
  msgstr ""
12568
 
12569
- #: includes/settings/wcj-settings-shipping-options.php:84
12570
- #: includes/settings/wcj-settings-shipping-options.php:90
12571
  msgid "Shipping Descriptions"
12572
  msgstr ""
12573
 
12574
- #: includes/settings/wcj-settings-shipping-options.php:86
12575
  #, php-format
12576
  msgid ""
12577
  "This section will allow you to add any text (e.g. description) for shipping "
@@ -12579,64 +12793,64 @@ msgid ""
12579
  "tags here, e.g. try \"%s\""
12580
  msgstr ""
12581
 
12582
- #: includes/settings/wcj-settings-shipping-options.php:97
12583
  msgid "Description Visibility"
12584
  msgstr ""
12585
 
12586
- #: includes/settings/wcj-settings-shipping-options.php:102
12587
- #: includes/settings/wcj-settings-shipping-options.php:158
12588
  msgid "On both cart and checkout pages"
12589
  msgstr ""
12590
 
12591
- #: includes/settings/wcj-settings-shipping-options.php:103
12592
- #: includes/settings/wcj-settings-shipping-options.php:159
12593
  msgid "Only on cart page"
12594
  msgstr ""
12595
 
12596
- #: includes/settings/wcj-settings-shipping-options.php:104
12597
- #: includes/settings/wcj-settings-shipping-options.php:160
12598
  msgid "Only on checkout page"
12599
  msgstr ""
12600
 
12601
- #: includes/settings/wcj-settings-shipping-options.php:106
12602
- #: includes/settings/wcj-settings-shipping-options.php:162
12603
  msgid ""
12604
  "Possible values: on both cart and checkout pages; only on cart page; only on "
12605
  "checkout page"
12606
  msgstr ""
12607
 
12608
- #: includes/settings/wcj-settings-shipping-options.php:130
12609
- #: includes/settings/wcj-settings-shipping-options.php:136
12610
  msgid "Shipping Icons"
12611
  msgstr ""
12612
 
12613
- #: includes/settings/wcj-settings-shipping-options.php:132
12614
  msgid ""
12615
  "This section will allow you to add icons for shipping method. Icons will be "
12616
  "visible on cart and checkout pages."
12617
  msgstr ""
12618
 
12619
- #: includes/settings/wcj-settings-shipping-options.php:143
12620
  msgid "Icon Position"
12621
  msgstr ""
12622
 
12623
- #: includes/settings/wcj-settings-shipping-options.php:148
12624
  msgid "Before label"
12625
  msgstr ""
12626
 
12627
- #: includes/settings/wcj-settings-shipping-options.php:149
12628
  msgid "After label"
12629
  msgstr ""
12630
 
12631
- #: includes/settings/wcj-settings-shipping-options.php:153
12632
  msgid "Icon Visibility"
12633
  msgstr ""
12634
 
12635
- #: includes/settings/wcj-settings-shipping-options.php:167
12636
  msgid "Icon Style"
12637
  msgstr ""
12638
 
12639
- #: includes/settings/wcj-settings-shipping-options.php:168
12640
  msgid ""
12641
  "You can also style icons with CSS class \"wcj_shipping_icon\", or id "
12642
  "\"wcj_shipping_icon_method_id\""
@@ -12882,6 +13096,67 @@ msgstr ""
12882
  msgid "Custom Out of Stock Class"
12883
  msgstr ""
12884
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12885
  #: includes/settings/wcj-settings-wholesale-price.php:17
12886
  msgid ""
12887
  "Wholesale Price Levels Options. If you want to display prices table on "
@@ -13063,6 +13338,11 @@ msgstr ""
13063
  msgid "Visible in Countries"
13064
  msgstr ""
13065
 
 
 
 
 
 
13066
  #: includes/settings/meta-box/wcj-settings-meta-box-product-by-user-role.php:19
13067
  msgid "Visible for User Roles"
13068
  msgstr ""
@@ -13236,7 +13516,7 @@ msgstr ""
13236
  msgid "Enable Custom Shipping"
13237
  msgstr ""
13238
 
13239
- #: includes/shortcodes/class-wcj-general-shortcodes.php:117
13240
  #: includes/shortcodes/class-wcj-shortcodes.php:107
13241
  #, php-format
13242
  msgid "\"%s\" module is not enabled!"
@@ -13393,10 +13673,6 @@ msgstr ""
13393
  msgid "Multicurrency module not enabled!"
13394
  msgstr ""
13395
 
13396
- #: includes/widgets/class-wcj-widget-multicurrency.php:74
13397
- msgid "Type:"
13398
- msgstr ""
13399
-
13400
  #: includes/widgets/class-wcj-widget-multicurrency.php:76
13401
  msgid "Drop down"
13402
  msgstr ""
3
  # This file is distributed under the same license as the PACKAGE package.
4
  # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
  #
 
6
  #: includes/settings/wcj-settings-add-to-cart.php:60
7
  #: includes/settings/wcj-settings-shipping-calculator.php:47
8
  #, fuzzy
9
  msgid ""
10
  msgstr ""
11
+ "Project-Id-Version: Booster for WooCommerce 2.9.1\n"
12
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/woocommerce-"
13
  "jetpack\n"
14
+ "POT-Creation-Date: 2017-07-17 04:48+0300\n"
15
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
16
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
17
  "Language-Team: LANGUAGE <LL@li.org>\n"
37
  msgstr ""
38
 
39
  #: woocommerce-jetpack.php:191
40
+ #: includes/admin/class-wc-settings-jetpack.php:438
41
  msgid "Booster for WooCommerce"
42
  msgstr ""
43
 
45
  msgid "Booster Settings"
46
  msgstr ""
47
 
48
+ #: woocommerce-jetpack.php:207 includes/class-wcj-admin-bar.php:167
49
+ #: includes/class-wcj-admin-bar.php:437 includes/class-wcj-admin-bar.php:537
 
50
  #: includes/admin/class-wc-settings-jetpack.php:195
51
+ #: includes/admin/class-wc-settings-jetpack.php:362
52
  msgid "Settings"
53
  msgstr ""
54
 
60
  msgid "Unlock all"
61
  msgstr ""
62
 
63
+ #: woocommerce-jetpack.php:465
64
  #, php-format
65
  msgid ""
66
  "<strong>Booster for WooCommerce</strong> plugin was successfully updated to "
115
  msgid "Manage Settings"
116
  msgstr ""
117
 
118
+ #: includes/class-wcj-admin-bar.php:171
119
+ #: includes/admin/class-wc-settings-jetpack.php:364
120
+ #: includes/classes/class-wcj-module.php:607
121
  msgid "Documentation"
122
  msgstr ""
123
 
136
 
137
  #: includes/class-wcj-admin-bar.php:238
138
  #: includes/class-wcj-checkout-files-upload.php:138
139
+ #: includes/class-wcj-eu-vat-number.php:86 includes/class-wcj-general.php:164
140
+ #: includes/class-wcj-general.php:260
141
  #: includes/class-wcj-payment-gateways.php:53
142
  #: includes/admin/class-wc-settings-jetpack.php:24
143
  #: includes/admin/class-wc-settings-jetpack.php:197
144
+ #: includes/classes/class-wcj-module.php:266
145
+ #: includes/classes/class-wcj-module.php:467
146
  msgid "Booster"
147
  msgstr ""
148
 
150
  msgid "Booster - Settings"
151
  msgstr ""
152
 
153
+ #: includes/class-wcj-admin-bar.php:245
154
+ msgid "Modules"
155
+ msgstr ""
156
+
157
  #: includes/class-wcj-admin-bar.php:250 includes/class-wcj-admin-bar.php:561
158
+ #: includes/classes/class-wcj-module.php:440
159
  #: includes/settings/wcj-settings-wpml.php:15
160
  msgid "Tools"
161
  msgstr ""
176
  msgid "Coupons by date"
177
  msgstr ""
178
 
179
+ #: includes/class-wcj-admin-bar.php:280 includes/class-wcj-general.php:43
180
  #: includes/functions/wcj-reports-functions.php:62
181
  msgid "Last 7 days"
182
  msgstr ""
219
  msgstr ""
220
 
221
  #: includes/class-wcj-admin-bar.php:334 includes/class-wcj-admin-bar.php:349
222
+ #: includes/settings/wcj-settings-reports.php:115
223
+ #: includes/settings/wcj-settings-reports.php:121
224
  msgid "Customers"
225
  msgstr ""
226
 
237
  msgstr ""
238
 
239
  #: includes/class-wcj-admin-bar.php:363 includes/class-wcj-stock.php:26
240
+ #: includes/reports/wcj-class-reports-stock.php:256
241
+ #: includes/settings/wcj-settings-reports.php:127
242
+ #: includes/settings/wcj-settings-reports.php:133
243
+ #: includes/settings/wcj-settings-reports.php:139
244
  msgid "Stock"
245
  msgstr ""
246
 
275
  #: includes/class-wcj-product-by-user.php:96
276
  #: includes/class-wcj-product-by-user.php:132
277
  #: includes/admin/wcj-modules-cats.php:60
278
+ #: includes/settings/wcj-settings-shipping-options.php:59
279
  msgid "Products"
280
  msgstr ""
281
 
395
  msgid "Account"
396
  msgstr ""
397
 
398
+ #: includes/class-wcj-admin-bar.php:529
399
  msgid "Emails"
400
  msgstr ""
401
 
436
  msgstr ""
437
 
438
  #: includes/class-wcj-admin-tools.php:32
439
+ #: includes/settings/wcj-settings-admin-tools.php:19
440
  msgid "Log"
441
  msgstr ""
442
 
735
  msgid "Separate custom JS for front and back end."
736
  msgstr ""
737
 
738
+ #: includes/class-wcj-email-options.php:26
739
+ #: includes/pdf-invoices/submodules/class-wcj-pdf-invoicing-emails.php:24
740
+ #: includes/settings/wcj-settings-offer-price.php:226
741
+ msgid "Email Options"
742
+ msgstr ""
743
+
744
+ #: includes/class-wcj-email-options.php:27
745
+ msgid ""
746
+ "WooCommerce email options. E.g.: add another email recipient(s) to all "
747
+ "WooCommerce emails."
748
+ msgstr ""
749
+
750
+ #: includes/class-wcj-email-options.php:93
751
+ msgid "Booster: Email Forwarding Options"
752
+ msgstr ""
753
+
754
+ #: includes/class-wcj-email-options.php:94
755
+ msgid "Email Forwarding Options"
756
+ msgstr ""
757
+
758
+ #: includes/class-wcj-email-options.php:96
759
+ msgid ""
760
+ "This section lets you add another email recipient(s) to all WooCommerce "
761
+ "emails. Leave blank to disable."
762
+ msgstr ""
763
+
764
+ #: includes/class-wcj-email-options.php:100
765
+ msgid "Cc Email"
766
+ msgstr ""
767
+
768
+ #: includes/class-wcj-email-options.php:101
769
+ msgid "Cc to email, e.g. youremail@yourdomain.com. Leave blank to disable."
770
+ msgstr ""
771
+
772
+ #: includes/class-wcj-email-options.php:107
773
+ msgid "Bcc Email"
774
+ msgstr ""
775
+
776
+ #: includes/class-wcj-email-options.php:108
777
+ msgid "Bcc to email, e.g. youremail@yourdomain.com. Leave blank to disable."
778
+ msgstr ""
779
+
780
  #: includes/class-wcj-emails-verification.php:26
781
  msgid "Email Verification"
782
  msgstr ""
834
  "check your email."
835
  msgstr ""
836
 
837
+ #: includes/class-wcj-emails.php:23
838
+ #: includes/settings/wcj-settings-emails.php:14
839
+ msgid "Custom Emails"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
840
  msgstr ""
841
 
842
+ #: includes/class-wcj-emails.php:24
843
+ msgid "Add custom emails to WooCommerce."
844
  msgstr ""
845
 
846
  #: includes/class-wcj-empty-cart-button.php:25
847
+ #: includes/shortcodes/class-wcj-general-shortcodes.php:128
848
  msgid "Empty Cart Button"
849
  msgstr ""
850
 
914
  msgstr ""
915
 
916
  #: includes/class-wcj-export-import.php:26
917
+ #: includes/admin/class-wc-settings-jetpack.php:272
918
  msgid "Export"
919
  msgstr ""
920
 
1031
  msgid "Manage Custom Roles."
1032
  msgstr ""
1033
 
1034
+ #: includes/class-wcj-general.php:42
1035
+ msgid "Last 24 hours"
1036
+ msgstr ""
1037
+
1038
+ #: includes/class-wcj-general.php:44
1039
+ msgid "Last 28 days"
1040
+ msgstr ""
1041
+
1042
+ #: includes/class-wcj-general.php:45
1043
+ msgid "All time"
1044
+ msgstr ""
1045
+
1046
+ #: includes/class-wcj-general.php:164
1047
+ msgid "Acquisition Source"
1048
+ msgstr ""
1049
+
1050
+ #: includes/class-wcj-general.php:189
1051
+ msgid "Other"
1052
+ msgstr ""
1053
+
1054
+ #: includes/class-wcj-general.php:206
1055
+ #: includes/settings/wcj-settings-products-xml.php:115
1056
+ msgid "URL:"
1057
+ msgstr ""
1058
+
1059
+ #: includes/class-wcj-general.php:207
1060
+ #: includes/widgets/class-wcj-widget-multicurrency.php:74
1061
+ msgid "Type:"
1062
+ msgstr ""
1063
+
1064
+ #: includes/class-wcj-general.php:260
1065
+ #, php-format
1066
+ msgid "Top %d countries by visits"
1067
+ msgstr ""
1068
+
1069
+ #: includes/class-wcj-general.php:328
1070
+ #: includes/input-fields/class-wcj-product-input-fields-abstract.php:59
1071
+ #: includes/settings/wcj-settings-checkout-custom-fields.php:92
1072
+ #: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:88
1073
+ #: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:102
1074
+ msgid "Country"
1075
+ msgstr ""
1076
+
1077
+ #: includes/class-wcj-general.php:328
1078
+ msgid "Visits"
1079
+ msgstr ""
1080
+
1081
+ #: includes/class-wcj-general.php:338
1082
+ msgid "No stats yet."
1083
+ msgstr ""
1084
+
1085
+ #: includes/class-wcj-general.php:343 includes/class-wcj-my-account.php:75
1086
+ #: includes/class-wcj-order-custom-statuses.php:359
1087
+ #: includes/class-wcj-product-bulk-meta-editor.php:275
1088
+ #: includes/class-wcj-product-by-user.php:206
1089
+ #: includes/class-wcj-purchase-data.php:93
1090
+ #: includes/classes/class-wcj-module.php:576
1091
+ #: includes/functions/wcj-html-functions.php:95
1092
+ #: includes/reports/wcj-class-reports-monthly-sales.php:334
1093
+ #: includes/settings/wcj-settings-empty-cart.php:80
1094
+ #: includes/shortcodes/class-wcj-products-add-form-shortcodes.php:367
1095
+ msgid "Are you sure?"
1096
+ msgstr ""
1097
+
1098
+ #: includes/class-wcj-general.php:344
1099
+ msgid "Delete all tracking data"
1100
+ msgstr ""
1101
+
1102
+ #: includes/class-wcj-general.php:349
1103
+ #, php-format
1104
+ msgid "Stats generated at %s. Next update is scheduled at %s."
1105
+ msgstr ""
1106
+
1107
+ #: includes/class-wcj-general.php:350
1108
+ msgid "Update now"
1109
+ msgstr ""
1110
+
1111
+ #: includes/class-wcj-general.php:454
1112
  msgid "Booster User Role"
1113
  msgstr ""
1114
 
1115
+ #: includes/class-wcj-general.php:518
1116
  msgid "Both fields are required!"
1117
  msgstr ""
1118
 
1119
+ #: includes/class-wcj-general.php:521
1120
  msgid "Role ID must not be numbers only!"
1121
  msgstr ""
1122
 
1123
+ #: includes/class-wcj-general.php:525
1124
  msgid "Role successfully added!"
1125
  msgstr ""
1126
 
1127
+ #: includes/class-wcj-general.php:527
1128
  msgid "Role already exists!"
1129
  msgstr ""
1130
 
1131
+ #: includes/class-wcj-general.php:535
1132
  #, php-format
1133
  msgid "Role %s successfully deleted!"
1134
  msgstr ""
1135
 
1136
+ #: includes/class-wcj-general.php:541 includes/class-wcj-general.php:554
1137
  #: includes/class-wcj-sku.php:330
1138
  #: includes/reports/wcj-class-reports-sales.php:191
1139
  #: includes/settings/wcj-settings-product-by-user.php:161
1141
  msgid "ID"
1142
  msgstr ""
1143
 
1144
+ #: includes/class-wcj-general.php:541 includes/class-wcj-general.php:555
1145
  #: includes/class-wcj-offer-price.php:116
1146
  #: includes/export/class-wcj-fields-helper.php:282
1147
  #: includes/tools/class-wcj-eu-countries-vat-rates-tool.php:70
1149
  msgid "Name"
1150
  msgstr ""
1151
 
1152
+ #: includes/class-wcj-general.php:541
1153
  #: includes/class-wcj-order-custom-statuses.php:337
1154
  #: includes/class-wcj-product-by-user.php:197
1155
  #: includes/settings/wcj-settings-pdf-invoicing-styling.php:125
1156
  msgid "Actions"
1157
  msgstr ""
1158
 
1159
+ #: includes/class-wcj-general.php:547
1160
  #: includes/class-wcj-order-custom-statuses.php:359
1161
  #: includes/class-wcj-product-bulk-meta-editor.php:359
1162
  #: includes/class-wcj-product-by-user.php:206
1166
  msgid "Delete"
1167
  msgstr ""
1168
 
1169
+ #: includes/class-wcj-general.php:550
1170
  msgid "Existing Roles"
1171
  msgstr ""
1172
 
1173
+ #: includes/class-wcj-general.php:556
1174
  msgid "Add New Role"
1175
  msgstr ""
1176
 
1177
+ #: includes/class-wcj-general.php:559
1178
  #: includes/class-wcj-order-custom-statuses.php:384
1179
  #: includes/settings/wcj-settings-checkout-custom-fields.php:22
1180
  #: includes/settings/wcj-settings-checkout-custom-fields.php:29
1181
  #: includes/settings/wcj-settings-checkout-custom-fields.php:36
1182
+ #: includes/settings/wcj-settings-email-options.php:20
1183
  #: includes/settings/wcj-settings-eu-vat-number.php:157
1184
  #: includes/settings/wcj-settings-eu-vat-number.php:193
1185
  #: includes/settings/wcj-settings-export.php:27
1201
  msgid "Add"
1202
  msgstr ""
1203
 
1204
+ #: includes/class-wcj-general.php:622 includes/class-wcj-general.php:664
1205
  #: includes/class-wcj-product-bulk-meta-editor.php:331
1206
  #: includes/class-wcj-product-bulk-price-converter.php:148
1207
  #: includes/class-wcj-sku.php:331
1208
  #: includes/reports/wcj-class-reports-sales.php:192
1209
+ #: includes/reports/wcj-class-reports-stock.php:253
1210
  msgid "Product"
1211
  msgstr ""
1212
 
1213
+ #: includes/class-wcj-general.php:623 includes/class-wcj-general.php:665
1214
+ #: includes/reports/wcj-class-reports-stock.php:254
1215
  msgid "Category"
1216
  msgstr ""
1217
 
1218
+ #: includes/class-wcj-general.php:685
1219
  msgid "Total Products:"
1220
  msgstr ""
1221
 
1297
  msgid "WooCommerce \"My Account\" page customization."
1298
  msgstr ""
1299
 
 
 
 
 
 
 
 
 
 
 
 
 
1300
  #: includes/class-wcj-offer-price.php:36
1301
  msgid "Offer Your Price"
1302
  msgstr ""
1322
 
1323
  #: includes/class-wcj-offer-price.php:114
1324
  #: includes/export/class-wcj-fields-helper.php:288
1325
+ #: includes/reports/wcj-class-reports-stock.php:255
1326
  #: includes/settings/wcj-settings-related-products.php:24
1327
  #: includes/settings/meta-box/wcj-settings-meta-box-wholesale-price.php:72
1328
  msgid "Price"
1331
  #: includes/class-wcj-offer-price.php:115
1332
  #: includes/settings/wcj-settings-currency-per-product.php:41
1333
  #: includes/settings/wcj-settings-currency-per-product.php:48
1334
+ #: includes/settings/wcj-settings-product-by-date.php:69
1335
+ #: includes/settings/wcj-settings-product-by-time.php:69
1336
  msgid "Message"
1337
  msgstr ""
1338
 
2040
 
2041
  #: includes/class-wcj-price-labels.php:40
2042
  #: includes/class-wcj-product-info.php:254
2043
+ #: includes/class-wcj-shipping-options.php:172
2044
  #: includes/settings/wcj-settings-add-to-cart.php:52
2045
  #: includes/settings/wcj-settings-address-formats.php:20
2046
  #: includes/settings/wcj-settings-admin-bar.php:20
2047
  #: includes/settings/wcj-settings-admin-bar.php:27
2048
  #: includes/settings/wcj-settings-admin-tools.php:20
2049
  #: includes/settings/wcj-settings-admin-tools.php:27
2050
+ #: includes/settings/wcj-settings-admin-tools.php:34
2051
  #: includes/settings/wcj-settings-admin-tools.php:74
2052
+ #: includes/settings/wcj-settings-admin-tools.php:81
2053
  #: includes/settings/wcj-settings-breadcrumbs.php:20
2054
  #: includes/settings/wcj-settings-call-for-price.php:69
2055
  #: includes/settings/wcj-settings-cart-customization.php:34
2069
  #: includes/settings/wcj-settings-general.php:81
2070
  #: includes/settings/wcj-settings-general.php:139
2071
  #: includes/settings/wcj-settings-general.php:190
2072
+ #: includes/settings/wcj-settings-general.php:248
2073
  #: includes/settings/wcj-settings-global-discount.php:43
2074
  #: includes/settings/wcj-settings-left-to-free-shipping.php:23
2075
  #: includes/settings/wcj-settings-left-to-free-shipping.php:56
2113
  #: includes/settings/wcj-settings-product-by-country.php:20
2114
  #: includes/settings/wcj-settings-product-by-country.php:27
2115
  #: includes/settings/wcj-settings-product-by-country.php:34
2116
+ #: includes/settings/wcj-settings-product-by-date.php:21
2117
+ #: includes/settings/wcj-settings-product-by-date.php:53
2118
+ #: includes/settings/wcj-settings-product-by-time.php:21
2119
+ #: includes/settings/wcj-settings-product-by-time.php:53
2120
  #: includes/settings/wcj-settings-product-by-user-role.php:20
2121
  #: includes/settings/wcj-settings-product-by-user-role.php:27
2122
  #: includes/settings/wcj-settings-product-by-user-role.php:34
2148
  #: includes/settings/wcj-settings-shipping-calculator.php:27
2149
  #: includes/settings/wcj-settings-shipping-calculator.php:34
2150
  #: includes/settings/wcj-settings-shipping-calculator.php:41
2151
+ #: includes/settings/wcj-settings-shipping-options.php:53
2152
  #: includes/settings/wcj-settings-shipping.php:24
2153
  #: includes/settings/wcj-settings-sku.php:47
2154
  #: includes/settings/wcj-settings-sku.php:150
2544
  msgid "Countries"
2545
  msgstr ""
2546
 
2547
+ #: includes/class-wcj-product-by-date.php:29
2548
+ msgid "Product Availability by Date"
2549
+ msgstr ""
2550
+
2551
+ #: includes/class-wcj-product-by-date.php:30
2552
+ msgid "WooCommerce product availability by date."
2553
+ msgstr ""
2554
+
2555
+ #: includes/class-wcj-product-by-date.php:95
2556
+ #: includes/class-wcj-product-by-date.php:97
2557
+ #: includes/settings/wcj-settings-product-by-date.php:87
2558
+ msgid ""
2559
+ "<p style=\"color:red;\">%product_title% is not available this month.</p>"
2560
+ msgstr ""
2561
+
2562
+ #: includes/class-wcj-product-by-date.php:98
2563
+ #: includes/class-wcj-product-by-date.php:100
2564
+ #: includes/settings/wcj-settings-product-by-date.php:75
2565
+ msgid ""
2566
+ "<p style=\"color:red;\">%product_title% is available only on %date_this_month"
2567
+ "% this month.</p>"
2568
+ msgstr ""
2569
+
2570
+ #: includes/class-wcj-product-by-time.php:29
2571
  msgid "Product Availability by Time"
2572
  msgstr ""
2573
 
2574
+ #: includes/class-wcj-product-by-time.php:30
2575
  msgid "WooCommerce product availability by time."
2576
  msgstr ""
2577
 
2578
+ #: includes/class-wcj-product-by-time.php:91
2579
+ #: includes/class-wcj-product-by-time.php:93
2580
+ #: includes/settings/wcj-settings-product-by-time.php:87
2581
  msgid "<p style=\"color:red;\">%product_title% is not available today.</p>"
2582
  msgstr ""
2583
 
2584
+ #: includes/class-wcj-product-by-time.php:94
2585
+ #: includes/class-wcj-product-by-time.php:96
2586
+ #: includes/settings/wcj-settings-product-by-time.php:75
2587
  msgid ""
2588
  "<p style=\"color:red;\">%product_title% is available only at %time_today% "
2589
  "today.</p>"
2647
  msgstr ""
2648
 
2649
  #: includes/class-wcj-product-custom-info.php:24
2650
+ #: includes/admin/class-wc-settings-jetpack.php:416
2651
  #: includes/functions/wcj-general-functions.php:33
2652
  msgid "Product Info"
2653
  msgstr ""
2657
  msgid "Add additional info to WooCommerce category and single product pages."
2658
  msgstr ""
2659
 
2660
+ #: includes/class-wcj-product-images.php:25
2661
  msgid "Product Images"
2662
  msgstr ""
2663
 
2664
+ #: includes/class-wcj-product-images.php:26
2665
  msgid "Customize WooCommerce products images, thumbnails and sale flashes."
2666
  msgstr ""
2667
 
2668
+ #: includes/class-wcj-product-images.php:204
2669
  #: includes/settings/wcj-settings-product-images.php:103
2670
  msgid "Sale!"
2671
  msgstr ""
2676
 
2677
  #: includes/class-wcj-product-info.php:123
2678
  #: includes/settings/wcj-settings-offer-price.php:91
2679
+ #: includes/settings/wcj-settings-product-custom-info.php:79
2680
  msgid "Before product"
2681
  msgstr ""
2682
 
2683
  #: includes/class-wcj-product-info.php:124
2684
+ #: includes/settings/wcj-settings-product-custom-info.php:80
2685
  msgid "Before product title"
2686
  msgstr ""
2687
 
2688
  #: includes/class-wcj-product-info.php:125
2689
  #: includes/settings/wcj-settings-offer-price.php:92
2690
+ #: includes/settings/wcj-settings-product-custom-info.php:83
2691
  msgid "After product"
2692
  msgstr ""
2693
 
2694
  #: includes/class-wcj-product-info.php:126
2695
+ #: includes/settings/wcj-settings-product-custom-info.php:82
2696
  msgid "After product title"
2697
  msgstr ""
2698
 
2699
  #: includes/class-wcj-product-info.php:138
2700
  #: includes/settings/wcj-settings-offer-price.php:72
2701
+ #: includes/settings/wcj-settings-product-custom-info.php:70
2702
  msgid "Inside single product summary"
2703
  msgstr ""
2704
 
2705
  #: includes/class-wcj-product-info.php:139
2706
  #: includes/settings/wcj-settings-offer-price.php:71
2707
+ #: includes/settings/wcj-settings-product-custom-info.php:69
2708
  msgid "Before single product summary"
2709
  msgstr ""
2710
 
2711
  #: includes/class-wcj-product-info.php:140
2712
  #: includes/settings/wcj-settings-offer-price.php:73
2713
+ #: includes/settings/wcj-settings-product-custom-info.php:71
2714
  msgid "After single product summary"
2715
  msgstr ""
2716
 
2722
  #: includes/settings/wcj-settings-left-to-free-shipping.php:74
2723
  #: includes/settings/wcj-settings-left-to-free-shipping.php:113
2724
  #: includes/settings/wcj-settings-mini-cart.php:46
2725
+ #: includes/settings/wcj-settings-product-custom-info.php:62
2726
  #: includes/settings/wcj-settings-product-info.php:50
2727
  #: includes/settings/wcj-settings-product-info.php:83
2728
  #: includes/settings/wcj-settings-products-per-page.php:36
2874
  #: includes/settings/wcj-settings-left-to-free-shipping.php:65
2875
  #: includes/settings/wcj-settings-left-to-free-shipping.php:104
2876
  #: includes/settings/wcj-settings-mini-cart.php:39
2877
+ #: includes/settings/wcj-settings-product-custom-info.php:54
2878
  #: includes/settings/wcj-settings-product-tabs.php:57
2879
  msgid "Content"
2880
  msgstr ""
2960
  #: includes/settings/wcj-settings-currency-exchange-rates.php:141
2961
  #: includes/settings/wcj-settings-pdf-invoicing.php:21
2962
  #: includes/settings/wcj-settings-product-add-to-cart.php:64
2963
+ #: includes/settings/meta-box/wcj-settings-meta-box-product-by-date.php:19
2964
+ #: includes/settings/meta-box/wcj-settings-meta-box-product-by-time.php:19
2965
  msgid "Disabled"
2966
  msgstr ""
2967
 
3041
  msgstr ""
3042
 
3043
  #: includes/class-wcj-purchase-data.php:92
3044
+ #: includes/admin/class-wc-settings-jetpack.php:276
3045
  msgid "Import"
3046
  msgstr ""
3047
 
3127
  msgstr ""
3128
 
3129
  #: includes/class-wcj-reports.php:221
3130
+ msgid "Booster: Monthly Sales (with Currency Conversion)"
3131
  msgstr ""
3132
 
3133
  #: includes/class-wcj-reports.php:236
3184
  msgid "Grant free shipping on per product basis."
3185
  msgstr ""
3186
 
3187
+ #: includes/class-wcj-shipping-options.php:171
3188
+ msgid "Booster: Hide when free is available"
3189
  msgstr ""
3190
 
3191
+ #: includes/class-wcj-shipping-options.php:179
3192
+ #: includes/settings/wcj-settings-shipping-options.php:28
3193
+ msgid ""
3194
+ "Available options: hide all; hide all except \"Local Pickup\"; hide \"Flat "
3195
+ "Rate\" only."
3196
+ msgstr ""
3197
+
3198
+ #: includes/class-wcj-shipping-options.php:183
3199
+ #: includes/settings/wcj-settings-shipping-options.php:32
3200
+ msgid "Hide all"
3201
+ msgstr ""
3202
+
3203
+ #: includes/class-wcj-shipping-options.php:184
3204
+ #: includes/settings/wcj-settings-shipping-options.php:33
3205
+ msgid "Hide all except \"Local Pickup\""
3206
+ msgstr ""
3207
+
3208
+ #: includes/class-wcj-shipping-options.php:185
3209
+ #: includes/settings/wcj-settings-shipping-options.php:34
3210
+ msgid "Hide \"Flat Rate\" only"
3211
  msgstr ""
3212
 
3213
  #: includes/class-wcj-shipping.php:23
3303
  msgid "WooCommerce products stock management."
3304
  msgstr ""
3305
 
3306
+ #: includes/class-wcj-url-coupons.php:25
3307
+ msgid "URL Coupons"
3308
+ msgstr ""
3309
+
3310
+ #: includes/class-wcj-url-coupons.php:26
3311
+ msgid "WooCommerce URL coupons."
3312
+ msgstr ""
3313
+
3314
  #: includes/class-wcj-wholesale-price.php:25
3315
  msgid "Wholesale Price"
3316
  msgstr ""
3370
  "This section lets you export, import or reset all Booster's modules settings."
3371
  msgstr ""
3372
 
3373
+ #: includes/admin/class-wc-settings-jetpack.php:273
3374
  msgid "Export all Booster's options to a file."
3375
  msgstr ""
3376
 
3377
+ #: includes/admin/class-wc-settings-jetpack.php:278
3378
  msgid "Import all Booster's options from a file."
3379
  msgstr ""
3380
 
3381
+ #: includes/admin/class-wc-settings-jetpack.php:281
3382
  msgid ""
3383
  "This will reset settings to defaults for all Booster modules. Are you sure?"
3384
  msgstr ""
3385
 
3386
+ #: includes/admin/class-wc-settings-jetpack.php:281
3387
  msgid "Reset"
3388
  msgstr ""
3389
 
3390
+ #: includes/admin/class-wc-settings-jetpack.php:282
3391
  msgid "Reset all Booster's options."
3392
  msgstr ""
3393
 
3394
+ #: includes/admin/class-wc-settings-jetpack.php:298
3395
  msgid "Version"
3396
  msgstr ""
3397
 
3398
+ #: includes/admin/class-wc-settings-jetpack.php:322
3399
+ #: includes/admin/class-wc-settings-jetpack.php:329
3400
  msgid "Select All"
3401
  msgstr ""
3402
 
3403
+ #: includes/admin/class-wc-settings-jetpack.php:323
3404
+ #: includes/admin/class-wc-settings-jetpack.php:330
3405
  #: includes/admin/class-wcj-tools.php:72
3406
  msgid "Module"
3407
  msgstr ""
3408
 
3409
+ #: includes/admin/class-wc-settings-jetpack.php:324
3410
+ #: includes/admin/class-wc-settings-jetpack.php:331
3411
  #: includes/admin/class-wcj-tools.php:73
3412
  #: includes/export/class-wcj-fields-helper.php:293
3413
  #: includes/gateways/class-wc-gateway-wcj-custom.php:74
3418
  msgid "Description"
3419
  msgstr ""
3420
 
3421
+ #: includes/admin/class-wc-settings-jetpack.php:376
3422
  msgid "No active modules found."
3423
  msgstr ""
3424
 
3425
+ #: includes/admin/class-wc-settings-jetpack.php:379
3426
  msgid "Total Modules:"
3427
  msgstr ""
3428
 
3429
+ #: includes/admin/class-wc-settings-jetpack.php:406
3430
  msgid "Autoload Booster's Options"
3431
  msgstr ""
3432
 
3433
+ #: includes/admin/class-wc-settings-jetpack.php:408
3434
  msgid ""
3435
  "Choose if you want Booster's options to be autoloaded when calling "
3436
  "add_option. After saving this option, you need to Reset all Booster's "
3437
  "settings. Leave default value (i.e. Enabled) if not sure."
3438
  msgstr ""
3439
 
3440
+ #: includes/admin/class-wc-settings-jetpack.php:413
3441
+ msgid "Use List Instead of Comma Separated Text for Products in Settings"
3442
+ msgstr ""
3443
+
3444
+ #: includes/admin/class-wc-settings-jetpack.php:415
3445
+ #, php-format
3446
+ msgid "Supported modules: %s."
3447
+ msgstr ""
3448
+
3449
  #: includes/admin/class-wcj-settings-custom-fields.php:187
3450
  #: includes/settings/wcj-settings-wpml.php:21
3451
  msgid "To use tools, module must be enabled."
3534
  "Listings, Product Tabs and more."
3535
  msgstr ""
3536
 
3537
+ #: includes/admin/wcj-modules-cats.php:89
3538
  msgid "Cart & Checkout"
3539
  msgstr ""
3540
 
3541
+ #: includes/admin/wcj-modules-cats.php:90
3542
  msgid "Cart and Checkout Customization, Empty Cart Button, Mini Cart and more."
3543
  msgstr ""
3544
 
3545
+ #: includes/admin/wcj-modules-cats.php:106
3546
  #: includes/settings/wcj-settings-payment-gateways-by-country.php:14
3547
  #: includes/settings/wcj-settings-payment-gateways-by-shipping.php:21
3548
  #: includes/settings/wcj-settings-payment-gateways-by-user-role.php:14
3550
  msgid "Payment Gateways"
3551
  msgstr ""
3552
 
3553
+ #: includes/admin/wcj-modules-cats.php:107
3554
  msgid ""
3555
  "Custom Payment Gateways, Gateways Currency, Gateways Fees and Discounts and "
3556
  "more."
3557
  msgstr ""
3558
 
3559
+ #: includes/admin/wcj-modules-cats.php:122
3560
  msgid "Shipping & Orders"
3561
  msgstr ""
3562
 
3563
+ #: includes/admin/wcj-modules-cats.php:123
3564
  msgid ""
3565
  "Order Custom Statuses, Order Minimum Amount, Order Numbers, Custom Shipping "
3566
  "Methods and more."
3567
  msgstr ""
3568
 
3569
+ #: includes/admin/wcj-modules-cats.php:140
3570
  msgid "PDF Invoicing & Packing Slips"
3571
  msgstr ""
3572
 
3573
+ #: includes/admin/wcj-modules-cats.php:141
3574
  msgid "PDF Documents"
3575
  msgstr ""
3576
 
3577
+ #: includes/admin/wcj-modules-cats.php:156
3578
  msgid "Emails & Misc."
3579
  msgstr ""
3580
 
3581
+ #: includes/admin/wcj-modules-cats.php:157
3582
  msgid "Emails, Reports, Export, Admin Tools, General Options and more."
3583
  msgstr ""
3584
 
3585
+ #: includes/classes/class-wcj-module.php:94
3586
+ #, php-format
3587
+ msgid ""
3588
+ "Booster: Free plugin's version is limited to only one \"%1$s\" product with "
3589
+ "settings on per product basis enabled at a time. You will need to get <a "
3590
+ "href=\"%2$s\" target=\"_blank\">Booster Plus</a> to add unlimited number of "
3591
+ "\"%1$s\" products."
3592
+ msgstr ""
3593
+
3594
+ #: includes/classes/class-wcj-module.php:428
3595
  msgid "Back to Module Settings"
3596
  msgstr ""
3597
 
3598
+ #: includes/classes/class-wcj-module.php:446
3599
  #: includes/settings/wcj-settings-wpml.php:20
3600
  msgid "Module Tools"
3601
  msgstr ""
3602
 
3603
+ #: includes/classes/class-wcj-module.php:519
3604
  #: includes/settings/wcj-settings-checkout-core-fields.php:23
3605
  msgid "enabled"
3606
  msgstr ""
3607
 
3608
+ #: includes/classes/class-wcj-module.php:520
3609
  msgid "disabled"
3610
  msgstr ""
3611
 
3612
+ #: includes/classes/class-wcj-module.php:528
3613
  #: includes/settings/wcj-settings-product-tabs.php:133
3614
  #: includes/settings/wcj-settings-product-tabs.php:141
3615
  #: includes/settings/wcj-settings-product-tabs.php:149
3617
  msgid "Deprecated"
3618
  msgstr ""
3619
 
3620
+ #: includes/classes/class-wcj-module.php:566
3621
  msgid "Reset Settings"
3622
  msgstr ""
3623
 
3624
+ #: includes/classes/class-wcj-module.php:572
3625
  msgid "Reset Module to Default Settings"
3626
  msgstr ""
3627
 
3628
+ #: includes/classes/class-wcj-module.php:573
3629
  msgid "Reset Submodule to Default Settings"
3630
  msgstr ""
3631
 
3632
+ #: includes/classes/class-wcj-module.php:577
3633
  msgid "Reset settings"
3634
  msgstr ""
3635
 
3636
+ #: includes/classes/class-wcj-module.php:611
3637
  msgid "Module Options"
3638
  msgstr ""
3639
 
3640
+ #: includes/classes/class-wcj-module.php:618
3641
  msgid "Enable Module"
3642
  msgstr ""
3643
 
4159
  #: includes/settings/wcj-settings-global-discount.php:49
4160
  #: includes/settings/wcj-settings-product-addons.php:70
4161
  #: includes/settings/wcj-settings-purchase-data.php:73
4162
+ #: includes/settings/wcj-settings-shipping-options.php:67
4163
  #: includes/settings/meta-box/wcj-settings-meta-box-product-addons.php:45
4164
  #: includes/shipping/class-wc-shipping-wcj-custom-with-shipping-zones.php:164
4165
  #: includes/shipping/class-wc-shipping-wcj-custom.php:123
4167
  msgstr ""
4168
 
4169
  #: includes/export/class-wcj-fields-helper.php:291
4170
+ #: includes/settings/wcj-settings-shipping-options.php:181
4171
  msgid "Image URL"
4172
  msgstr ""
4173
 
4283
  msgid "Availability Class"
4284
  msgstr ""
4285
 
4286
+ #: includes/functions/wcj-admin-functions.php:28
4287
+ msgid "Enter comma separated list of IDs."
4288
+ msgstr ""
4289
+
4290
+ #: includes/functions/wcj-admin-functions.php:102
4291
  #: includes/settings/wcj-settings-emails-verification.php:52
4292
  #: includes/settings/wcj-settings-emails-verification.php:69
4293
  #: includes/settings/wcj-settings-emails-verification.php:77
4295
  msgid "Replaced value: %s"
4296
  msgstr ""
4297
 
4298
+ #: includes/functions/wcj-admin-functions.php:102
4299
  #, php-format
4300
  msgid "Replaced values: %s"
4301
  msgstr ""
4302
 
4303
+ #: includes/functions/wcj-admin-functions.php:131
4304
  msgid "Install Booster Plus to unlock all features"
4305
  msgstr ""
4306
 
4307
+ #: includes/functions/wcj-admin-functions.php:132
4308
  #, php-format
4309
  msgid ""
4310
  "Some settings fields are locked and you will need %s to modify all locked "
4311
  "fields."
4312
  msgstr ""
4313
 
4314
+ #: includes/functions/wcj-admin-functions.php:133
4315
  msgid "Buy now"
4316
  msgstr ""
4317
 
4318
+ #: includes/functions/wcj-admin-functions.php:133
4319
  msgid "Visit Booster Site"
4320
  msgstr ""
4321
 
4322
+ #: includes/functions/wcj-admin-functions.php:137
4323
  #, php-format
4324
  msgid "Get <a href=\"%s\" target=\"_blank\">Booster Plus</a> to change value."
4325
  msgstr ""
4326
 
4327
+ #: includes/functions/wcj-admin-functions.php:140
4328
  #, php-format
4329
  msgid ""
4330
  "Get <a href=\"%s\" target=\"_blank\">Booster Plus</a> to enable \"%s\" "
4331
  "option."
4332
  msgstr ""
4333
 
4334
+ #: includes/functions/wcj-admin-functions.php:143
4335
  #, php-format
4336
  msgid "Get Booster Plus to enable \"%s\" option."
4337
  msgstr ""
4338
 
4339
+ #: includes/functions/wcj-admin-functions.php:146
4340
  #, php-format
4341
  msgid ""
4342
  "Get <a href=\"%s\" target=\"_blank\">Booster Plus</a> to change values below."
4343
  msgstr ""
4344
 
4345
+ #: includes/functions/wcj-admin-functions.php:149
4346
  #, php-format
4347
  msgid ""
4348
  "Get <a href=\"%s\" target=\"_blank\">Booster Plus</a> to change values above."
4349
  msgstr ""
4350
 
4351
+ #: includes/functions/wcj-admin-functions.php:152
4352
  msgid "Get Booster Plus to change value."
4353
  msgstr ""
4354
 
4355
+ #: includes/functions/wcj-country-functions.php:119
4356
  msgid "Afghanistan"
4357
  msgstr ""
4358
 
4359
+ #: includes/functions/wcj-country-functions.php:120
4360
  msgid "&#197;land Islands"
4361
  msgstr ""
4362
 
4363
+ #: includes/functions/wcj-country-functions.php:121
4364
  msgid "Albania"
4365
  msgstr ""
4366
 
4367
+ #: includes/functions/wcj-country-functions.php:122
4368
  msgid "Algeria"
4369
  msgstr ""
4370
 
4371
+ #: includes/functions/wcj-country-functions.php:123
4372
  msgid "Andorra"
4373
  msgstr ""
4374
 
4375
+ #: includes/functions/wcj-country-functions.php:124
4376
  msgid "Angola"
4377
  msgstr ""
4378
 
4379
+ #: includes/functions/wcj-country-functions.php:125
4380
  msgid "Anguilla"
4381
  msgstr ""
4382
 
4383
+ #: includes/functions/wcj-country-functions.php:126
4384
  msgid "Antarctica"
4385
  msgstr ""
4386
 
4387
+ #: includes/functions/wcj-country-functions.php:127
4388
  msgid "Antigua and Barbuda"
4389
  msgstr ""
4390
 
4391
+ #: includes/functions/wcj-country-functions.php:128
4392
  msgid "Argentina"
4393
  msgstr ""
4394
 
4395
+ #: includes/functions/wcj-country-functions.php:129
4396
  msgid "Armenia"
4397
  msgstr ""
4398
 
4399
+ #: includes/functions/wcj-country-functions.php:130
4400
  msgid "Aruba"
4401
  msgstr ""
4402
 
4403
+ #: includes/functions/wcj-country-functions.php:131
4404
  msgid "Australia"
4405
  msgstr ""
4406
 
4407
+ #: includes/functions/wcj-country-functions.php:132
4408
  msgid "Austria"
4409
  msgstr ""
4410
 
4411
+ #: includes/functions/wcj-country-functions.php:133
4412
  msgid "Azerbaijan"
4413
  msgstr ""
4414
 
4415
+ #: includes/functions/wcj-country-functions.php:134
4416
  msgid "Bahamas"
4417
  msgstr ""
4418
 
4419
+ #: includes/functions/wcj-country-functions.php:135
4420
  msgid "Bahrain"
4421
  msgstr ""
4422
 
4423
+ #: includes/functions/wcj-country-functions.php:136
4424
  msgid "Bangladesh"
4425
  msgstr ""
4426
 
4427
+ #: includes/functions/wcj-country-functions.php:137
4428
  msgid "Barbados"
4429
  msgstr ""
4430
 
4431
+ #: includes/functions/wcj-country-functions.php:138
4432
  msgid "Belarus"
4433
  msgstr ""
4434
 
4435
+ #: includes/functions/wcj-country-functions.php:139
4436
  msgid "Belgium"
4437
  msgstr ""
4438
 
4439
+ #: includes/functions/wcj-country-functions.php:140
4440
  msgid "Belau"
4441
  msgstr ""
4442
 
4443
+ #: includes/functions/wcj-country-functions.php:141
4444
  msgid "Belize"
4445
  msgstr ""
4446
 
4447
+ #: includes/functions/wcj-country-functions.php:142
4448
  msgid "Benin"
4449
  msgstr ""
4450
 
4451
+ #: includes/functions/wcj-country-functions.php:143
4452
  msgid "Bermuda"
4453
  msgstr ""
4454
 
4455
+ #: includes/functions/wcj-country-functions.php:144
4456
  msgid "Bhutan"
4457
  msgstr ""
4458
 
4459
+ #: includes/functions/wcj-country-functions.php:145
4460
  msgid "Bolivia"
4461
  msgstr ""
4462
 
4463
+ #: includes/functions/wcj-country-functions.php:146
4464
  msgid "Bonaire, Saint Eustatius and Saba"
4465
  msgstr ""
4466
 
4467
+ #: includes/functions/wcj-country-functions.php:147
4468
  msgid "Bosnia and Herzegovina"
4469
  msgstr ""
4470
 
4471
+ #: includes/functions/wcj-country-functions.php:148
4472
  msgid "Botswana"
4473
  msgstr ""
4474
 
4475
+ #: includes/functions/wcj-country-functions.php:149
4476
  msgid "Bouvet Island"
4477
  msgstr ""
4478
 
4479
+ #: includes/functions/wcj-country-functions.php:150
4480
  msgid "Brazil"
4481
  msgstr ""
4482
 
4483
+ #: includes/functions/wcj-country-functions.php:151
4484
  msgid "British Indian Ocean Territory"
4485
  msgstr ""
4486
 
4487
+ #: includes/functions/wcj-country-functions.php:152
4488
  msgid "British Virgin Islands"
4489
  msgstr ""
4490
 
4491
+ #: includes/functions/wcj-country-functions.php:153
4492
  msgid "Brunei"
4493
  msgstr ""
4494
 
4495
+ #: includes/functions/wcj-country-functions.php:154
4496
  msgid "Bulgaria"
4497
  msgstr ""
4498
 
4499
+ #: includes/functions/wcj-country-functions.php:155
4500
  msgid "Burkina Faso"
4501
  msgstr ""
4502
 
4503
+ #: includes/functions/wcj-country-functions.php:156
4504
  msgid "Burundi"
4505
  msgstr ""
4506
 
4507
+ #: includes/functions/wcj-country-functions.php:157
4508
  msgid "Cambodia"
4509
  msgstr ""
4510
 
4511
+ #: includes/functions/wcj-country-functions.php:158
4512
  msgid "Cameroon"
4513
  msgstr ""
4514
 
4515
+ #: includes/functions/wcj-country-functions.php:159
4516
  msgid "Canada"
4517
  msgstr ""
4518
 
4519
+ #: includes/functions/wcj-country-functions.php:160
4520
  msgid "Cape Verde"
4521
  msgstr ""
4522
 
4523
+ #: includes/functions/wcj-country-functions.php:161
4524
  msgid "Cayman Islands"
4525
  msgstr ""
4526
 
4527
+ #: includes/functions/wcj-country-functions.php:162
4528
  msgid "Central African Republic"
4529
  msgstr ""
4530
 
4531
+ #: includes/functions/wcj-country-functions.php:163
4532
  msgid "Chad"
4533
  msgstr ""
4534
 
4535
+ #: includes/functions/wcj-country-functions.php:164
4536
  msgid "Chile"
4537
  msgstr ""
4538
 
4539
+ #: includes/functions/wcj-country-functions.php:165
4540
  msgid "China"
4541
  msgstr ""
4542
 
4543
+ #: includes/functions/wcj-country-functions.php:166
4544
  msgid "Christmas Island"
4545
  msgstr ""
4546
 
4547
+ #: includes/functions/wcj-country-functions.php:167
4548
  msgid "Cocos (Keeling) Islands"
4549
  msgstr ""
4550
 
4551
+ #: includes/functions/wcj-country-functions.php:168
4552
  msgid "Colombia"
4553
  msgstr ""
4554
 
4555
+ #: includes/functions/wcj-country-functions.php:169
4556
  msgid "Comoros"
4557
  msgstr ""
4558
 
4559
+ #: includes/functions/wcj-country-functions.php:170
4560
  msgid "Congo (Brazzaville)"
4561
  msgstr ""
4562
 
4563
+ #: includes/functions/wcj-country-functions.php:171
4564
  msgid "Congo (Kinshasa)"
4565
  msgstr ""
4566
 
4567
+ #: includes/functions/wcj-country-functions.php:172
4568
  msgid "Cook Islands"
4569
  msgstr ""
4570
 
4571
+ #: includes/functions/wcj-country-functions.php:173
4572
  msgid "Costa Rica"
4573
  msgstr ""
4574
 
4575
+ #: includes/functions/wcj-country-functions.php:174
4576
  msgid "Croatia"
4577
  msgstr ""
4578
 
4579
+ #: includes/functions/wcj-country-functions.php:175
4580
  msgid "Cuba"
4581
  msgstr ""
4582
 
4583
+ #: includes/functions/wcj-country-functions.php:176
4584
  msgid "Cura&Ccedil;ao"
4585
  msgstr ""
4586
 
4587
+ #: includes/functions/wcj-country-functions.php:177
4588
  msgid "Cyprus"
4589
  msgstr ""
4590
 
4591
+ #: includes/functions/wcj-country-functions.php:178
4592
  msgid "Czech Republic"
4593
  msgstr ""
4594
 
4595
+ #: includes/functions/wcj-country-functions.php:179
4596
  msgid "Denmark"
4597
  msgstr ""
4598
 
4599
+ #: includes/functions/wcj-country-functions.php:180
4600
  msgid "Djibouti"
4601
  msgstr ""
4602
 
4603
+ #: includes/functions/wcj-country-functions.php:181
4604
  msgid "Dominica"
4605
  msgstr ""
4606
 
4607
+ #: includes/functions/wcj-country-functions.php:182
4608
  msgid "Dominican Republic"
4609
  msgstr ""
4610
 
4611
+ #: includes/functions/wcj-country-functions.php:183
4612
  msgid "Ecuador"
4613
  msgstr ""
4614
 
4615
+ #: includes/functions/wcj-country-functions.php:184
4616
  msgid "Egypt"
4617
  msgstr ""
4618
 
4619
+ #: includes/functions/wcj-country-functions.php:185
4620
  msgid "El Salvador"
4621
  msgstr ""
4622
 
4623
+ #: includes/functions/wcj-country-functions.php:186
4624
  msgid "Equatorial Guinea"
4625
  msgstr ""
4626
 
4627
+ #: includes/functions/wcj-country-functions.php:187
4628
  msgid "Eritrea"
4629
  msgstr ""
4630
 
4631
+ #: includes/functions/wcj-country-functions.php:188
4632
  msgid "Estonia"
4633
  msgstr ""
4634
 
4635
+ #: includes/functions/wcj-country-functions.php:189
4636
  msgid "Ethiopia"
4637
  msgstr ""
4638
 
4639
+ #: includes/functions/wcj-country-functions.php:190
4640
  msgid "Falkland Islands"
4641
  msgstr ""
4642
 
4643
+ #: includes/functions/wcj-country-functions.php:191
4644
  msgid "Faroe Islands"
4645
  msgstr ""
4646
 
4647
+ #: includes/functions/wcj-country-functions.php:192
4648
  msgid "Fiji"
4649
  msgstr ""
4650
 
4651
+ #: includes/functions/wcj-country-functions.php:193
4652
  msgid "Finland"
4653
  msgstr ""
4654
 
4655
+ #: includes/functions/wcj-country-functions.php:194
4656
  msgid "France"
4657
  msgstr ""
4658
 
4659
+ #: includes/functions/wcj-country-functions.php:195
4660
  msgid "French Guiana"
4661
  msgstr ""
4662
 
4663
+ #: includes/functions/wcj-country-functions.php:196
4664
  msgid "French Polynesia"
4665
  msgstr ""
4666
 
4667
+ #: includes/functions/wcj-country-functions.php:197
4668
  msgid "French Southern Territories"
4669
  msgstr ""
4670
 
4671
+ #: includes/functions/wcj-country-functions.php:198
4672
  msgid "Gabon"
4673
  msgstr ""
4674
 
4675
+ #: includes/functions/wcj-country-functions.php:199
4676
  msgid "Gambia"
4677
  msgstr ""
4678
 
4679
+ #: includes/functions/wcj-country-functions.php:200
4680
  msgid "Georgia"
4681
  msgstr ""
4682
 
4683
+ #: includes/functions/wcj-country-functions.php:201
4684
  msgid "Germany"
4685
  msgstr ""
4686
 
4687
+ #: includes/functions/wcj-country-functions.php:202
4688
  msgid "Ghana"
4689
  msgstr ""
4690
 
4691
+ #: includes/functions/wcj-country-functions.php:203
4692
  msgid "Gibraltar"
4693
  msgstr ""
4694
 
4695
+ #: includes/functions/wcj-country-functions.php:204
4696
  msgid "Greece"
4697
  msgstr ""
4698
 
4699
+ #: includes/functions/wcj-country-functions.php:205
4700
  msgid "Greenland"
4701
  msgstr ""
4702
 
4703
+ #: includes/functions/wcj-country-functions.php:206
4704
  msgid "Grenada"
4705
  msgstr ""
4706
 
4707
+ #: includes/functions/wcj-country-functions.php:207
4708
  msgid "Guadeloupe"
4709
  msgstr ""
4710
 
4711
+ #: includes/functions/wcj-country-functions.php:208
4712
  msgid "Guatemala"
4713
  msgstr ""
4714
 
4715
+ #: includes/functions/wcj-country-functions.php:209
4716
  msgid "Guernsey"
4717
  msgstr ""
4718
 
4719
+ #: includes/functions/wcj-country-functions.php:210
4720
  msgid "Guinea"
4721
  msgstr ""
4722
 
4723
+ #: includes/functions/wcj-country-functions.php:211
4724
  msgid "Guinea-Bissau"
4725
  msgstr ""
4726
 
4727
+ #: includes/functions/wcj-country-functions.php:212
4728
  msgid "Guyana"
4729
  msgstr ""
4730
 
4731
+ #: includes/functions/wcj-country-functions.php:213
4732
  msgid "Haiti"
4733
  msgstr ""
4734
 
4735
+ #: includes/functions/wcj-country-functions.php:214
4736
  msgid "Heard Island and McDonald Islands"
4737
  msgstr ""
4738
 
4739
+ #: includes/functions/wcj-country-functions.php:215
4740
  msgid "Honduras"
4741
  msgstr ""
4742
 
4743
+ #: includes/functions/wcj-country-functions.php:216
4744
  msgid "Hong Kong"
4745
  msgstr ""
4746
 
4747
+ #: includes/functions/wcj-country-functions.php:217
4748
  msgid "Hungary"
4749
  msgstr ""
4750
 
4751
+ #: includes/functions/wcj-country-functions.php:218
4752
  msgid "Iceland"
4753
  msgstr ""
4754
 
4755
+ #: includes/functions/wcj-country-functions.php:219
4756
  msgid "India"
4757
  msgstr ""
4758
 
4759
+ #: includes/functions/wcj-country-functions.php:220
4760
  msgid "Indonesia"
4761
  msgstr ""
4762
 
4763
+ #: includes/functions/wcj-country-functions.php:221
4764
  msgid "Iran"
4765
  msgstr ""
4766
 
4767
+ #: includes/functions/wcj-country-functions.php:222
4768
  msgid "Iraq"
4769
  msgstr ""
4770
 
4771
+ #: includes/functions/wcj-country-functions.php:223
4772
  msgid "Republic of Ireland"
4773
  msgstr ""
4774
 
4775
+ #: includes/functions/wcj-country-functions.php:224
4776
  msgid "Isle of Man"
4777
  msgstr ""
4778
 
4779
+ #: includes/functions/wcj-country-functions.php:225
4780
  msgid "Israel"
4781
  msgstr ""
4782
 
4783
+ #: includes/functions/wcj-country-functions.php:226
4784
  msgid "Italy"
4785
  msgstr ""
4786
 
4787
+ #: includes/functions/wcj-country-functions.php:227
4788
  msgid "Ivory Coast"
4789
  msgstr ""
4790
 
4791
+ #: includes/functions/wcj-country-functions.php:228
4792
  msgid "Jamaica"
4793
  msgstr ""
4794
 
4795
+ #: includes/functions/wcj-country-functions.php:229
4796
  msgid "Japan"
4797
  msgstr ""
4798
 
4799
+ #: includes/functions/wcj-country-functions.php:230
4800
  msgid "Jersey"
4801
  msgstr ""
4802
 
4803
+ #: includes/functions/wcj-country-functions.php:231
4804
  msgid "Jordan"
4805
  msgstr ""
4806
 
4807
+ #: includes/functions/wcj-country-functions.php:232
4808
  msgid "Kazakhstan"
4809
  msgstr ""
4810
 
4811
+ #: includes/functions/wcj-country-functions.php:233
4812
  msgid "Kenya"
4813
  msgstr ""
4814
 
4815
+ #: includes/functions/wcj-country-functions.php:234
4816
  msgid "Kiribati"
4817
  msgstr ""
4818
 
4819
+ #: includes/functions/wcj-country-functions.php:235
4820
  msgid "Kuwait"
4821
  msgstr ""
4822
 
4823
+ #: includes/functions/wcj-country-functions.php:236
4824
  msgid "Kyrgyzstan"
4825
  msgstr ""
4826
 
4827
+ #: includes/functions/wcj-country-functions.php:237
4828
  msgid "Laos"
4829
  msgstr ""
4830
 
4831
+ #: includes/functions/wcj-country-functions.php:238
4832
  msgid "Latvia"
4833
  msgstr ""
4834
 
4835
+ #: includes/functions/wcj-country-functions.php:239
4836
  msgid "Lebanon"
4837
  msgstr ""
4838
 
4839
+ #: includes/functions/wcj-country-functions.php:240
4840
  msgid "Lesotho"
4841
  msgstr ""
4842
 
4843
+ #: includes/functions/wcj-country-functions.php:241
4844
  msgid "Liberia"
4845
  msgstr ""
4846
 
4847
+ #: includes/functions/wcj-country-functions.php:242
4848
  msgid "Libya"
4849
  msgstr ""
4850
 
4851
+ #: includes/functions/wcj-country-functions.php:243
4852
  msgid "Liechtenstein"
4853
  msgstr ""
4854
 
4855
+ #: includes/functions/wcj-country-functions.php:244
4856
  msgid "Lithuania"
4857
  msgstr ""
4858
 
4859
+ #: includes/functions/wcj-country-functions.php:245
4860
  msgid "Luxembourg"
4861
  msgstr ""
4862
 
4863
+ #: includes/functions/wcj-country-functions.php:246
4864
  msgid "Macao S.A.R., China"
4865
  msgstr ""
4866
 
4867
+ #: includes/functions/wcj-country-functions.php:247
4868
  msgid "Macedonia"
4869
  msgstr ""
4870
 
4871
+ #: includes/functions/wcj-country-functions.php:248
4872
  msgid "Madagascar"
4873
  msgstr ""
4874
 
4875
+ #: includes/functions/wcj-country-functions.php:249
4876
  msgid "Malawi"
4877
  msgstr ""
4878
 
4879
+ #: includes/functions/wcj-country-functions.php:250
4880
  msgid "Malaysia"
4881
  msgstr ""
4882
 
4883
+ #: includes/functions/wcj-country-functions.php:251
4884
  msgid "Maldives"
4885
  msgstr ""
4886
 
4887
+ #: includes/functions/wcj-country-functions.php:252
4888
  msgid "Mali"
4889
  msgstr ""
4890
 
4891
+ #: includes/functions/wcj-country-functions.php:253
4892
  msgid "Malta"
4893
  msgstr ""
4894
 
4895
+ #: includes/functions/wcj-country-functions.php:254
4896
  msgid "Marshall Islands"
4897
  msgstr ""
4898
 
4899
+ #: includes/functions/wcj-country-functions.php:255
4900
  msgid "Martinique"
4901
  msgstr ""
4902
 
4903
+ #: includes/functions/wcj-country-functions.php:256
4904
  msgid "Mauritania"
4905
  msgstr ""
4906
 
4907
+ #: includes/functions/wcj-country-functions.php:257
4908
  msgid "Mauritius"
4909
  msgstr ""
4910
 
4911
+ #: includes/functions/wcj-country-functions.php:258
4912
  msgid "Mayotte"
4913
  msgstr ""
4914
 
4915
+ #: includes/functions/wcj-country-functions.php:259
4916
  msgid "Mexico"
4917
  msgstr ""
4918
 
4919
+ #: includes/functions/wcj-country-functions.php:260
4920
  msgid "Micronesia"
4921
  msgstr ""
4922
 
4923
+ #: includes/functions/wcj-country-functions.php:261
4924
  msgid "Moldova"
4925
  msgstr ""
4926
 
4927
+ #: includes/functions/wcj-country-functions.php:262
4928
  msgid "Monaco"
4929
  msgstr ""
4930
 
4931
+ #: includes/functions/wcj-country-functions.php:263
4932
  msgid "Mongolia"
4933
  msgstr ""
4934
 
4935
+ #: includes/functions/wcj-country-functions.php:264
4936
  msgid "Montenegro"
4937
  msgstr ""
4938
 
4939
+ #: includes/functions/wcj-country-functions.php:265
4940
  msgid "Montserrat"
4941
  msgstr ""
4942
 
4943
+ #: includes/functions/wcj-country-functions.php:266
4944
  msgid "Morocco"
4945
  msgstr ""
4946
 
4947
+ #: includes/functions/wcj-country-functions.php:267
4948
  msgid "Mozambique"
4949
  msgstr ""
4950
 
4951
+ #: includes/functions/wcj-country-functions.php:268
4952
  msgid "Myanmar"
4953
  msgstr ""
4954
 
4955
+ #: includes/functions/wcj-country-functions.php:269
4956
  msgid "Namibia"
4957
  msgstr ""
4958
 
4959
+ #: includes/functions/wcj-country-functions.php:270
4960
  msgid "Nauru"
4961
  msgstr ""
4962
 
4963
+ #: includes/functions/wcj-country-functions.php:271
4964
  msgid "Nepal"
4965
  msgstr ""
4966
 
4967
+ #: includes/functions/wcj-country-functions.php:272
4968
  msgid "Netherlands"
4969
  msgstr ""
4970
 
4971
+ #: includes/functions/wcj-country-functions.php:273
4972
  msgid "Netherlands Antilles"
4973
  msgstr ""
4974
 
4975
+ #: includes/functions/wcj-country-functions.php:274
4976
  msgid "New Caledonia"
4977
  msgstr ""
4978
 
4979
+ #: includes/functions/wcj-country-functions.php:275
4980
  msgid "New Zealand"
4981
  msgstr ""
4982
 
4983
+ #: includes/functions/wcj-country-functions.php:276
4984
  msgid "Nicaragua"
4985
  msgstr ""
4986
 
4987
+ #: includes/functions/wcj-country-functions.php:277
4988
  msgid "Niger"
4989
  msgstr ""
4990
 
4991
+ #: includes/functions/wcj-country-functions.php:278
4992
  msgid "Nigeria"
4993
  msgstr ""
4994
 
4995
+ #: includes/functions/wcj-country-functions.php:279
4996
  msgid "Niue"
4997
  msgstr ""
4998
 
4999
+ #: includes/functions/wcj-country-functions.php:280
5000
  msgid "Norfolk Island"
5001
  msgstr ""
5002
 
5003
+ #: includes/functions/wcj-country-functions.php:281
5004
  msgid "North Korea"
5005
  msgstr ""
5006
 
5007
+ #: includes/functions/wcj-country-functions.php:282
5008
  msgid "Norway"
5009
  msgstr ""
5010
 
5011
+ #: includes/functions/wcj-country-functions.php:283
5012
  msgid "Oman"
5013
  msgstr ""
5014
 
5015
+ #: includes/functions/wcj-country-functions.php:284
5016
  msgid "Pakistan"
5017
  msgstr ""
5018
 
5019
+ #: includes/functions/wcj-country-functions.php:285
5020
  msgid "Palestinian Territory"
5021
  msgstr ""
5022
 
5023
+ #: includes/functions/wcj-country-functions.php:286
5024
  msgid "Panama"
5025
  msgstr ""
5026
 
5027
+ #: includes/functions/wcj-country-functions.php:287
5028
  msgid "Papua New Guinea"
5029
  msgstr ""
5030
 
5031
+ #: includes/functions/wcj-country-functions.php:288
5032
  msgid "Paraguay"
5033
  msgstr ""
5034
 
5035
+ #: includes/functions/wcj-country-functions.php:289
5036
  msgid "Peru"
5037
  msgstr ""
5038
 
5039
+ #: includes/functions/wcj-country-functions.php:290
5040
  msgid "Philippines"
5041
  msgstr ""
5042
 
5043
+ #: includes/functions/wcj-country-functions.php:291
5044
  msgid "Pitcairn"
5045
  msgstr ""
5046
 
5047
+ #: includes/functions/wcj-country-functions.php:292
5048
  msgid "Poland"
5049
  msgstr ""
5050
 
5051
+ #: includes/functions/wcj-country-functions.php:293
5052
  msgid "Portugal"
5053
  msgstr ""
5054
 
5055
+ #: includes/functions/wcj-country-functions.php:294
5056
  msgid "Qatar"
5057
  msgstr ""
5058
 
5059
+ #: includes/functions/wcj-country-functions.php:295
5060
  msgid "Reunion"
5061
  msgstr ""
5062
 
5063
+ #: includes/functions/wcj-country-functions.php:296
5064
  msgid "Romania"
5065
  msgstr ""
5066
 
5067
+ #: includes/functions/wcj-country-functions.php:297
5068
  msgid "Russia"
5069
  msgstr ""
5070
 
5071
+ #: includes/functions/wcj-country-functions.php:298
5072
  msgid "Rwanda"
5073
  msgstr ""
5074
 
5075
+ #: includes/functions/wcj-country-functions.php:299
5076
  msgid "Saint Barth&eacute;lemy"
5077
  msgstr ""
5078
 
5079
+ #: includes/functions/wcj-country-functions.php:300
5080
  msgid "Saint Helena"
5081
  msgstr ""
5082
 
5083
+ #: includes/functions/wcj-country-functions.php:301
5084
  msgid "Saint Kitts and Nevis"
5085
  msgstr ""
5086
 
5087
+ #: includes/functions/wcj-country-functions.php:302
5088
  msgid "Saint Lucia"
5089
  msgstr ""
5090
 
5091
+ #: includes/functions/wcj-country-functions.php:303
5092
  msgid "Saint Martin (French part)"
5093
  msgstr ""
5094
 
5095
+ #: includes/functions/wcj-country-functions.php:304
5096
  msgid "Saint Martin (Dutch part)"
5097
  msgstr ""
5098
 
5099
+ #: includes/functions/wcj-country-functions.php:305
5100
  msgid "Saint Pierre and Miquelon"
5101
  msgstr ""
5102
 
5103
+ #: includes/functions/wcj-country-functions.php:306
5104
  msgid "Saint Vincent and the Grenadines"
5105
  msgstr ""
5106
 
5107
+ #: includes/functions/wcj-country-functions.php:307
5108
  msgid "San Marino"
5109
  msgstr ""
5110
 
5111
+ #: includes/functions/wcj-country-functions.php:308
5112
  msgid "S&atilde;o Tom&eacute; and Pr&iacute;ncipe"
5113
  msgstr ""
5114
 
5115
+ #: includes/functions/wcj-country-functions.php:309
5116
  msgid "Saudi Arabia"
5117
  msgstr ""
5118
 
5119
+ #: includes/functions/wcj-country-functions.php:310
5120
  msgid "Senegal"
5121
  msgstr ""
5122
 
5123
+ #: includes/functions/wcj-country-functions.php:311
5124
  msgid "Serbia"
5125
  msgstr ""
5126
 
5127
+ #: includes/functions/wcj-country-functions.php:312
5128
  msgid "Seychelles"
5129
  msgstr ""
5130
 
5131
+ #: includes/functions/wcj-country-functions.php:313
5132
  msgid "Sierra Leone"
5133
  msgstr ""
5134
 
5135
+ #: includes/functions/wcj-country-functions.php:314
5136
  msgid "Singapore"
5137
  msgstr ""
5138
 
5139
+ #: includes/functions/wcj-country-functions.php:315
5140
  msgid "Slovakia"
5141
  msgstr ""
5142
 
5143
+ #: includes/functions/wcj-country-functions.php:316
5144
  msgid "Slovenia"
5145
  msgstr ""
5146
 
5147
+ #: includes/functions/wcj-country-functions.php:317
5148
  msgid "Solomon Islands"
5149
  msgstr ""
5150
 
5151
+ #: includes/functions/wcj-country-functions.php:318
5152
  msgid "Somalia"
5153
  msgstr ""
5154
 
5155
+ #: includes/functions/wcj-country-functions.php:319
5156
  msgid "South Africa"
5157
  msgstr ""
5158
 
5159
+ #: includes/functions/wcj-country-functions.php:320
5160
  msgid "South Georgia/Sandwich Islands"
5161
  msgstr ""
5162
 
5163
+ #: includes/functions/wcj-country-functions.php:321
5164
  msgid "South Korea"
5165
  msgstr ""
5166
 
5167
+ #: includes/functions/wcj-country-functions.php:322
5168
  msgid "South Sudan"
5169
  msgstr ""
5170
 
5171
+ #: includes/functions/wcj-country-functions.php:323
5172
  msgid "Spain"
5173
  msgstr ""
5174
 
5175
+ #: includes/functions/wcj-country-functions.php:324
5176
  msgid "Sri Lanka"
5177
  msgstr ""
5178
 
5179
+ #: includes/functions/wcj-country-functions.php:325
5180
  msgid "Sudan"
5181
  msgstr ""
5182
 
5183
+ #: includes/functions/wcj-country-functions.php:326
5184
  msgid "Suriname"
5185
  msgstr ""
5186
 
5187
+ #: includes/functions/wcj-country-functions.php:327
5188
  msgid "Svalbard and Jan Mayen"
5189
  msgstr ""
5190
 
5191
+ #: includes/functions/wcj-country-functions.php:328
5192
  msgid "Swaziland"
5193
  msgstr ""
5194
 
5195
+ #: includes/functions/wcj-country-functions.php:329
5196
  msgid "Sweden"
5197
  msgstr ""
5198
 
5199
+ #: includes/functions/wcj-country-functions.php:330
5200
  msgid "Switzerland"
5201
  msgstr ""
5202
 
5203
+ #: includes/functions/wcj-country-functions.php:331
5204
  msgid "Syria"
5205
  msgstr ""
5206
 
5207
+ #: includes/functions/wcj-country-functions.php:332
5208
  msgid "Taiwan"
5209
  msgstr ""
5210
 
5211
+ #: includes/functions/wcj-country-functions.php:333
5212
  msgid "Tajikistan"
5213
  msgstr ""
5214
 
5215
+ #: includes/functions/wcj-country-functions.php:334
5216
  msgid "Tanzania"
5217
  msgstr ""
5218
 
5219
+ #: includes/functions/wcj-country-functions.php:335
5220
  msgid "Thailand"
5221
  msgstr ""
5222
 
5223
+ #: includes/functions/wcj-country-functions.php:336
5224
  msgid "Timor-Leste"
5225
  msgstr ""
5226
 
5227
+ #: includes/functions/wcj-country-functions.php:337
5228
  msgid "Togo"
5229
  msgstr ""
5230
 
5231
+ #: includes/functions/wcj-country-functions.php:338
5232
  msgid "Tokelau"
5233
  msgstr ""
5234
 
5235
+ #: includes/functions/wcj-country-functions.php:339
5236
  msgid "Tonga"
5237
  msgstr ""
5238
 
5239
+ #: includes/functions/wcj-country-functions.php:340
5240
  msgid "Trinidad and Tobago"
5241
  msgstr ""
5242
 
5243
+ #: includes/functions/wcj-country-functions.php:341
5244
  msgid "Tunisia"
5245
  msgstr ""
5246
 
5247
+ #: includes/functions/wcj-country-functions.php:342
5248
  msgid "Turkey"
5249
  msgstr ""
5250
 
5251
+ #: includes/functions/wcj-country-functions.php:343
5252
  msgid "Turkmenistan"
5253
  msgstr ""
5254
 
5255
+ #: includes/functions/wcj-country-functions.php:344
5256
  msgid "Turks and Caicos Islands"
5257
  msgstr ""
5258
 
5259
+ #: includes/functions/wcj-country-functions.php:345
5260
  msgid "Tuvalu"
5261
  msgstr ""
5262
 
5263
+ #: includes/functions/wcj-country-functions.php:346
5264
  msgid "Uganda"
5265
  msgstr ""
5266
 
5267
+ #: includes/functions/wcj-country-functions.php:347
5268
  msgid "Ukraine"
5269
  msgstr ""
5270
 
5271
+ #: includes/functions/wcj-country-functions.php:348
5272
  msgid "United Arab Emirates"
5273
  msgstr ""
5274
 
5275
+ #: includes/functions/wcj-country-functions.php:349
5276
  msgid "United Kingdom (UK)"
5277
  msgstr ""
5278
 
5279
+ #: includes/functions/wcj-country-functions.php:350
5280
  msgid "United States (US)"
5281
  msgstr ""
5282
 
5283
+ #: includes/functions/wcj-country-functions.php:351
5284
  msgid "Uruguay"
5285
  msgstr ""
5286
 
5287
+ #: includes/functions/wcj-country-functions.php:352
5288
  msgid "Uzbekistan"
5289
  msgstr ""
5290
 
5291
+ #: includes/functions/wcj-country-functions.php:353
5292
  msgid "Vanuatu"
5293
  msgstr ""
5294
 
5295
+ #: includes/functions/wcj-country-functions.php:354
5296
  msgid "Vatican"
5297
  msgstr ""
5298
 
5299
+ #: includes/functions/wcj-country-functions.php:355
5300
  msgid "Venezuela"
5301
  msgstr ""
5302
 
5303
+ #: includes/functions/wcj-country-functions.php:356
5304
  msgid "Vietnam"
5305
  msgstr ""
5306
 
5307
+ #: includes/functions/wcj-country-functions.php:357
5308
  msgid "Wallis and Futuna"
5309
  msgstr ""
5310
 
5311
+ #: includes/functions/wcj-country-functions.php:358
5312
  msgid "Western Sahara"
5313
  msgstr ""
5314
 
5315
+ #: includes/functions/wcj-country-functions.php:359
5316
  msgid "Western Samoa"
5317
  msgstr ""
5318
 
5319
+ #: includes/functions/wcj-country-functions.php:360
5320
  msgid "Yemen"
5321
  msgstr ""
5322
 
5323
+ #: includes/functions/wcj-country-functions.php:361
5324
  msgid "Zambia"
5325
  msgstr ""
5326
 
5327
+ #: includes/functions/wcj-country-functions.php:362
5328
  msgid "Zimbabwe"
5329
  msgstr ""
5330
 
5331
+ #: includes/functions/wcj-country-functions.php:363
5332
  msgid "European Union"
5333
  msgstr ""
5334
 
6374
  #: includes/settings/meta-box/wcj-settings-meta-box-price-by-user-role.php:37
6375
  #: includes/settings/meta-box/wcj-settings-meta-box-product-addons.php:21
6376
  #: includes/settings/meta-box/wcj-settings-meta-box-product-bookings.php:14
6377
+ #: includes/settings/meta-box/wcj-settings-meta-box-product-by-date.php:20
6378
+ #: includes/settings/meta-box/wcj-settings-meta-box-product-by-time.php:20
6379
  #: includes/settings/meta-box/wcj-settings-meta-box-product-open-pricing.php:14
6380
  #: includes/settings/meta-box/wcj-settings-meta-box-product-price-by-formula.php:21
6381
  msgid "Enabled"
6434
  msgid "Password"
6435
  msgstr ""
6436
 
 
 
 
 
 
 
 
6437
  #: includes/input-fields/class-wcj-product-input-fields-abstract.php:62
6438
  #: includes/settings/wcj-settings-checkout-custom-fields.php:95
6439
  msgid "Phone"
6856
  msgid "Booster: PDF Invoices"
6857
  msgstr ""
6858
 
 
 
 
 
 
6859
  #: includes/pdf-invoices/submodules/class-wcj-pdf-invoicing-footer.php:21
6860
  msgid "Footer"
6861
  msgstr ""
6955
  msgstr ""
6956
 
6957
  #: includes/reports/wcj-class-reports-monthly-sales.php:37
6958
+ msgid "Currency rates saved."
6959
+ msgstr ""
6960
+
6961
+ #: includes/reports/wcj-class-reports-monthly-sales.php:41
6962
  msgid "Currency rates deleted."
6963
  msgstr ""
6964
 
6965
+ #: includes/reports/wcj-class-reports-monthly-sales.php:85
6966
  msgid "Days"
6967
  msgstr ""
6968
 
6969
+ #: includes/reports/wcj-class-reports-monthly-sales.php:86
6970
  msgid "Total Orders"
6971
  msgstr ""
6972
 
6973
+ #: includes/reports/wcj-class-reports-monthly-sales.php:87
6974
  msgid "Orders Average / Day"
6975
  msgstr ""
6976
 
6977
+ #: includes/reports/wcj-class-reports-monthly-sales.php:88
6978
  #: includes/reports/wcj-class-reports-sales.php:325
6979
  msgid "Total Sum"
6980
  msgstr ""
6981
 
6982
+ #: includes/reports/wcj-class-reports-monthly-sales.php:89
6983
  msgid "Total Sum (excl. TAX)"
6984
  msgstr ""
6985
 
6986
+ #: includes/reports/wcj-class-reports-monthly-sales.php:90
6987
  msgid "Average / Order (excl. TAX)"
6988
  msgstr ""
6989
 
6990
+ #: includes/reports/wcj-class-reports-monthly-sales.php:91
6991
  msgid "Average / Day (excl. TAX)"
6992
  msgstr ""
6993
 
6994
+ #: includes/reports/wcj-class-reports-monthly-sales.php:92
6995
  msgid "Currency Rates"
6996
  msgstr ""
6997
 
6998
+ #: includes/reports/wcj-class-reports-monthly-sales.php:93
6999
+ msgid "Orders by Currency"
 
7000
  msgstr ""
7001
 
7002
+ #: includes/reports/wcj-class-reports-monthly-sales.php:270
7003
  msgid "Totals"
7004
  msgstr ""
7005
 
7006
+ #: includes/reports/wcj-class-reports-monthly-sales.php:312
7007
  msgid "Report currency"
7008
  msgstr ""
7009
 
7010
+ #: includes/reports/wcj-class-reports-monthly-sales.php:327
7011
  #, php-format
7012
  msgid "Report generated in: %s s"
7013
  msgstr ""
7014
 
7015
+ #: includes/reports/wcj-class-reports-monthly-sales.php:330
7016
+ msgid "Save Currency Rates"
7017
+ msgstr ""
7018
+
7019
+ #: includes/reports/wcj-class-reports-monthly-sales.php:334
7020
  msgid "Reset Currency Rates"
7021
  msgstr ""
7022
 
7082
  msgid "Filter products"
7083
  msgstr ""
7084
 
7085
+ #: includes/reports/wcj-class-reports-stock.php:32
7086
  msgid "All Products on Stock"
7087
  msgstr ""
7088
 
7089
+ #: includes/reports/wcj-class-reports-stock.php:33
7090
  msgid "Report shows all products that are on stock and some sales info."
7091
  msgstr ""
7092
 
7093
+ #: includes/reports/wcj-class-reports-stock.php:37
7094
  msgid "Understocked"
7095
  msgstr ""
7096
 
7097
+ #: includes/reports/wcj-class-reports-stock.php:38
7098
  msgid ""
7099
  "Report shows all products that are low in stock calculated on product's "
7100
  "sales data."
7101
  msgstr ""
7102
 
7103
+ #: includes/reports/wcj-class-reports-stock.php:39
7104
  msgid ""
7105
  "Threshold for minimum stock is equal to half of the sales in selected days "
7106
  "range."
7107
  msgstr ""
7108
 
7109
+ #: includes/reports/wcj-class-reports-stock.php:43
7110
  msgid "Overstocked"
7111
  msgstr ""
7112
 
7113
+ #: includes/reports/wcj-class-reports-stock.php:44
7114
  msgid ""
7115
  "Report shows all products that are on stock, but have no sales in selected "
7116
  "period. Only products added before the start date of selected period are "
7117
  "accounted."
7118
  msgstr ""
7119
 
7120
+ #: includes/reports/wcj-class-reports-stock.php:173
7121
  msgid "deleted"
7122
  msgstr ""
7123
 
7124
+ #: includes/reports/wcj-class-reports-stock.php:257
7125
  msgid "Stock price"
7126
  msgstr ""
7127
 
7128
+ #: includes/reports/wcj-class-reports-stock.php:258
7129
  msgid "Total stock price"
7130
  msgstr ""
7131
 
7132
+ #: includes/reports/wcj-class-reports-stock.php:259
7133
  msgid "Last sale"
7134
  msgstr ""
7135
 
7136
+ #: includes/reports/wcj-class-reports-stock.php:260
7137
  #, php-format
7138
  msgid "Sales in last %s days"
7139
  msgstr ""
7140
 
7141
+ #: includes/reports/wcj-class-reports-stock.php:261
7142
  msgid "Total sales"
7143
  msgstr ""
7144
 
7145
+ #: includes/reports/wcj-class-reports-stock.php:263
7146
  msgid "Stock to minimum"
7147
  msgstr ""
7148
 
7149
+ #: includes/reports/wcj-class-reports-stock.php:292
7150
  msgid "purchase price:"
7151
  msgstr ""
7152
 
7153
+ #: includes/reports/wcj-class-reports-stock.php:296
7154
  msgid "stock purchase price:"
7155
  msgstr ""
7156
 
7157
+ #: includes/reports/wcj-class-reports-stock.php:301
7158
  msgid "No sales yet"
7159
  msgstr ""
7160
 
7161
+ #: includes/reports/wcj-class-reports-stock.php:305
7162
  msgid "profit:"
7163
  msgstr ""
7164
 
7165
+ #: includes/reports/wcj-class-reports-stock.php:325
7166
  msgid "Total current stock value"
7167
  msgstr ""
7168
 
7169
+ #: includes/reports/wcj-class-reports-stock.php:326
7170
  msgid "Total stock value"
7171
  msgstr ""
7172
 
7173
+ #: includes/reports/wcj-class-reports-stock.php:327
7174
  msgid "Product stock value average"
7175
  msgstr ""
7176
 
7177
+ #: includes/reports/wcj-class-reports-stock.php:328
7178
  msgid "Product stock average"
7179
  msgstr ""
7180
 
7181
+ #: includes/reports/wcj-class-reports-stock.php:330
7182
+ msgid "Total current stock purchase price"
7183
+ msgstr ""
7184
+
7185
+ #: includes/reports/wcj-class-reports-stock.php:334
7186
  msgid "Report was generated in: "
7187
  msgstr ""
7188
 
7205
  #: includes/settings/wcj-settings-general.php:156
7206
  #: includes/settings/wcj-settings-order-quantities.php:21
7207
  #: includes/settings/wcj-settings-order-quantities.php:70
 
7208
  #: includes/settings/wcj-settings-product-images.php:19
7209
  #: includes/settings/wcj-settings-product-images.php:95
7210
  #: includes/settings/wcj-settings-shipping-calculator.php:69
7211
+ #: includes/settings/wcj-settings-shipping-options.php:93
7212
+ #: includes/settings/wcj-settings-shipping-options.php:139
7213
  #: includes/settings/wcj-settings-sorting.php:20
7214
  #: includes/settings/wcj-settings-sorting.php:99
7215
  #: includes/settings/wcj-settings-sorting.php:123
7247
 
7248
  #: includes/settings/wcj-settings-add-to-cart.php:92
7249
  #: includes/settings/wcj-settings-product-addons.php:15
7250
+ #: includes/settings/wcj-settings-product-by-date.php:47
7251
+ #: includes/settings/wcj-settings-product-by-time.php:47
7252
  msgid "Per Product Options"
7253
  msgstr ""
7254
 
7399
  #: includes/settings/wcj-settings-product-addons.php:129
7400
  #: includes/settings/wcj-settings-product-bookings.php:72
7401
  #: includes/settings/wcj-settings-product-by-country.php:14
 
7402
  #: includes/settings/wcj-settings-product-by-user-role.php:14
7403
  #: includes/settings/wcj-settings-product-by-user.php:59
7404
  #: includes/settings/wcj-settings-product-open-pricing.php:16
7405
  #: includes/settings/wcj-settings-products-per-page.php:14
7406
  #: includes/settings/wcj-settings-products-xml.php:17
7407
+ #: includes/settings/wcj-settings-url-coupons.php:14
7408
  #: includes/settings/wcj-settings-wholesale-price.php:15
7409
  msgid "Options"
7410
  msgstr ""
7421
  msgid "Admin Tools Options"
7422
  msgstr ""
7423
 
7424
+ #: includes/settings/wcj-settings-admin-tools.php:26
7425
+ msgid "WooCommerce Log"
7426
  msgstr ""
7427
 
7428
+ #: includes/settings/wcj-settings-admin-tools.php:33
7429
  msgid "Debug"
7430
  msgstr ""
7431
 
7432
+ #: includes/settings/wcj-settings-admin-tools.php:40
7433
  msgid "PHP Memory Limit"
7434
  msgstr ""
7435
 
7436
+ #: includes/settings/wcj-settings-admin-tools.php:41
7437
  msgid "megabytes."
7438
  msgstr ""
7439
 
7440
+ #: includes/settings/wcj-settings-admin-tools.php:42
7441
+ #: includes/settings/wcj-settings-admin-tools.php:51
7442
  #: includes/settings/wcj-settings-offer-price.php:139
7443
  #: includes/settings/wcj-settings-offer-price.php:147
7444
  #: includes/settings/meta-box/wcj-settings-meta-box-offer-price.php:43
7446
  msgid "Set zero to disable."
7447
  msgstr ""
7448
 
7449
+ #: includes/settings/wcj-settings-admin-tools.php:49
7450
  msgid "PHP Time Limit"
7451
  msgstr ""
7452
 
7453
+ #: includes/settings/wcj-settings-admin-tools.php:50
7454
  msgid "seconds."
7455
  msgstr ""
7456
 
7457
+ #: includes/settings/wcj-settings-admin-tools.php:66
7458
  msgid "System Info"
7459
  msgstr ""
7460
 
7461
+ #: includes/settings/wcj-settings-admin-tools.php:73
7462
  msgid "Show Order Meta"
7463
  msgstr ""
7464
 
7465
+ #: includes/settings/wcj-settings-admin-tools.php:80
7466
  msgid "Show Product Meta"
7467
  msgstr ""
7468
 
7588
  #: includes/settings/wcj-settings-cart.php:24
7589
  #: includes/settings/wcj-settings-checkout-custom-info.php:19
7590
  #: includes/settings/wcj-settings-mini-cart.php:19
7591
+ #: includes/settings/wcj-settings-product-custom-info.php:28
7592
  msgid "Total Blocks"
7593
  msgstr ""
7594
 
7595
  #: includes/settings/wcj-settings-cart.php:39
7596
  #: includes/settings/wcj-settings-checkout-custom-info.php:35
7597
  #: includes/settings/wcj-settings-mini-cart.php:34
7598
+ #: includes/settings/wcj-settings-product-custom-info.php:49
7599
  msgid "Info Block"
7600
  msgstr ""
7601
 
7602
  #: includes/settings/wcj-settings-cart.php:59
7603
  #: includes/settings/wcj-settings-checkout-custom-info.php:85
7604
  #: includes/settings/wcj-settings-mini-cart.php:58
7605
+ #: includes/settings/wcj-settings-product-custom-info.php:88
7606
  msgid "Position Order (i.e. Priority)"
7607
  msgstr ""
7608
 
8514
  msgid "Custom JS - Back end (Admin)"
8515
  msgstr ""
8516
 
8517
+ #: includes/settings/wcj-settings-email-options.php:14
8518
+ msgid "Product Info in Item Name"
8519
+ msgstr ""
8520
+
8521
+ #: includes/settings/wcj-settings-email-options.php:19
8522
+ msgid "Add Product Info to Item Name"
8523
+ msgstr ""
8524
+
8525
+ #: includes/settings/wcj-settings-email-options.php:26
8526
+ msgid "Info"
8527
+ msgstr ""
8528
+
8529
+ #: includes/settings/wcj-settings-email-options.php:27
8530
+ #, php-format
8531
+ msgid ""
8532
+ "You can use <a target=\"_blank\" href=\"%s\">Booster's products shortcodes</"
8533
+ "a> here."
8534
+ msgstr ""
8535
+
8536
  #: includes/settings/wcj-settings-emails-verification.php:19
8537
  msgid "Skip Email Verification for User Roles"
8538
  msgstr ""
8579
  msgid "Verification Message - Resend"
8580
  msgstr ""
8581
 
 
 
 
 
8582
  #: includes/settings/wcj-settings-emails.php:18
8583
  #, php-format
8584
  msgid ""
8595
  msgid "Admin Title Custom Email"
8596
  msgstr ""
8597
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8598
  #: includes/settings/wcj-settings-empty-cart.php:15
8599
  msgid ""
8600
  "You can also use <strong>[wcj_empty_cart_button]</strong> shortcode to place "
8998
  msgstr ""
8999
 
9000
  #: includes/settings/wcj-settings-general.php:140
9001
+ #: includes/settings/wcj-settings-product-by-date.php:54
9002
+ #: includes/settings/wcj-settings-product-by-time.php:54
9003
  msgid "This will add new meta box to each product's edit page."
9004
  msgstr ""
9005
 
9025
  msgstr ""
9026
 
9027
  #: includes/settings/wcj-settings-general.php:182
9028
+ msgid "Booster User Roles Changer Options"
9029
  msgstr ""
9030
 
9031
  #: includes/settings/wcj-settings-general.php:183
9032
+ msgid "This will add user roles changer tool to admin bar."
 
 
 
9033
  msgstr ""
9034
 
9035
  #: includes/settings/wcj-settings-general.php:189
9036
+ msgid "Booster User Roles Changer"
9037
  msgstr ""
9038
 
9039
+ #: includes/settings/wcj-settings-general.php:198
9040
+ msgid "Enabled for"
 
 
9041
  msgstr ""
9042
 
9043
+ #: includes/settings/wcj-settings-general.php:210
9044
+ msgid "Track Users Options"
9045
  msgstr ""
9046
 
9047
+ #: includes/settings/wcj-settings-general.php:215
9048
+ msgid "Track Users"
 
 
9049
  msgstr ""
9050
 
9051
+ #: includes/settings/wcj-settings-general.php:216
9052
+ #: includes/settings/wcj-settings-product-listings.php:180
9053
+ #: includes/settings/wcj-settings-product-listings.php:238
9054
+ #: includes/settings/wcj-settings-shipping-options.php:21
9055
+ #: includes/settings/wcj-settings-stock.php:23
9056
+ msgid "Enable section"
9057
  msgstr ""
9058
 
9059
+ #: includes/settings/wcj-settings-general.php:222
9060
+ msgid "Countries by Visits"
9061
  msgstr ""
9062
 
9063
+ #: includes/settings/wcj-settings-general.php:223
9064
+ msgid "Enable admin dashboard widget"
9065
  msgstr ""
9066
 
9067
+ #: includes/settings/wcj-settings-general.php:229
9068
+ msgid "Select which info show in admin dashboard widget."
9069
+ msgstr ""
9070
+
9071
+ #: includes/settings/wcj-settings-general.php:237
9072
+ msgid "Select which how many top countries to show."
9073
+ msgstr ""
9074
+
9075
+ #: includes/settings/wcj-settings-general.php:244
9076
+ msgid "Track Orders"
9077
+ msgstr ""
9078
+
9079
+ #: includes/settings/wcj-settings-general.php:245
9080
+ msgid "Save customer's acquisition source (i.e. HTTP referer) for orders."
9081
+ msgstr ""
9082
+
9083
+ #: includes/settings/wcj-settings-general.php:246
9084
+ msgid ""
9085
+ "This will add \"Booster: Acquisition Source\" meta box to each order's edit "
9086
+ "page."
9087
  msgstr ""
9088
 
9089
  #: includes/settings/wcj-settings-global-discount.php:20
9373
  msgstr ""
9374
 
9375
  #: includes/settings/wcj-settings-offer-price.php:70
9376
+ #: includes/settings/wcj-settings-product-custom-info.php:68
9377
  msgid "Before single product"
9378
  msgstr ""
9379
 
9380
  #: includes/settings/wcj-settings-offer-price.php:74
9381
+ #: includes/settings/wcj-settings-product-custom-info.php:72
9382
  msgid "After single product"
9383
  msgstr ""
9384
 
11020
  msgstr ""
11021
 
11022
  #: includes/settings/wcj-settings-product-add-to-cart.php:24
11023
+ #: includes/settings/wcj-settings-product-by-date.php:20
11024
  msgid "All Products"
11025
  msgstr ""
11026
 
11036
  msgstr ""
11037
 
11038
  #: includes/settings/wcj-settings-product-add-to-cart.php:39
11039
+ #: includes/settings/wcj-settings-product-by-date.php:52
11040
+ #: includes/settings/wcj-settings-product-by-time.php:52
11041
  msgid "Per Product"
11042
  msgstr ""
11043
 
11360
  msgid "Admin Products List Column"
11361
  msgstr ""
11362
 
11363
+ #: includes/settings/wcj-settings-product-by-date.php:14
11364
+ #: includes/settings/wcj-settings-product-by-time.php:14
11365
+ msgid "All Products Options"
11366
+ msgstr ""
11367
+
11368
+ #: includes/settings/wcj-settings-product-by-date.php:15
11369
+ #, php-format
11370
+ msgid "Today is <code>%s</code>."
11371
+ msgstr ""
11372
+
11373
+ #: includes/settings/wcj-settings-product-by-date.php:22
11374
+ msgid "Date formats:"
11375
+ msgstr ""
11376
+
11377
+ #: includes/settings/wcj-settings-product-by-date.php:64
11378
+ #: includes/settings/wcj-settings-product-by-time.php:64
11379
+ msgid "Frontend Messages Options"
11380
+ msgstr ""
11381
+
11382
+ #: includes/settings/wcj-settings-product-by-date.php:70
11383
+ msgid "Message when product is not available by date."
11384
+ msgstr ""
11385
+
11386
+ #: includes/settings/wcj-settings-product-by-date.php:72
11387
+ #: includes/settings/wcj-settings-product-by-date.php:84
11388
+ #: includes/settings/wcj-settings-product-by-time.php:72
11389
+ #: includes/settings/wcj-settings-product-by-time.php:84
11390
+ msgid "You can also use shortcodes here."
11391
+ msgstr ""
11392
+
11393
+ #: includes/settings/wcj-settings-product-by-date.php:81
11394
+ msgid "Message (Month Off)"
11395
+ msgstr ""
11396
+
11397
+ #: includes/settings/wcj-settings-product-by-date.php:82
11398
+ msgid "Message when product is not available by date (month off)."
11399
+ msgstr ""
11400
+
11401
  #: includes/settings/wcj-settings-product-by-time.php:15
11402
  #, php-format
11403
  msgid "Local time is <code>%s</code>."
11411
  msgid "Time formats:"
11412
  msgstr ""
11413
 
11414
+ #: includes/settings/wcj-settings-product-by-time.php:70
11415
  msgid "Message when product is not available by time."
11416
  msgstr ""
11417
 
11418
+ #: includes/settings/wcj-settings-product-by-time.php:71
11419
  msgid "Replaceable values:"
11420
  msgstr ""
11421
 
11422
+ #: includes/settings/wcj-settings-product-by-time.php:81
 
 
 
 
 
11423
  msgid "Message (Day Off)"
11424
  msgstr ""
11425
 
11426
+ #: includes/settings/wcj-settings-product-by-time.php:82
11427
  msgid "Message when product is not available by time (day off)."
11428
  msgstr ""
11429
 
11430
+ #: includes/settings/wcj-settings-product-by-time.php:83
11431
  msgid "Replaceable value:"
11432
  msgstr ""
11433
 
11503
  msgid "Custom Taxonomy"
11504
  msgstr ""
11505
 
11506
+ #: includes/settings/wcj-settings-product-custom-info.php:20
11507
  msgid "Single"
11508
  msgstr ""
11509
 
11510
+ #: includes/settings/wcj-settings-product-custom-info.php:20
11511
  msgid "Archive"
11512
  msgstr ""
11513
 
11514
+ #: includes/settings/wcj-settings-product-custom-info.php:23
11515
  msgid "Product Custom Info Blocks"
11516
  msgstr ""
11517
 
11518
+ #: includes/settings/wcj-settings-product-custom-info.php:58
11519
  #: includes/settings/wcj-settings-product-images.php:55
11520
  #: includes/settings/wcj-settings-product-images.php:64
11521
  #: includes/settings/wcj-settings-product-images.php:73
11525
  msgid "You can use shortcodes here."
11526
  msgstr ""
11527
 
11528
+ #: includes/settings/wcj-settings-product-custom-info.php:73
11529
  msgid "Before add to cart form"
11530
  msgstr ""
11531
 
11532
+ #: includes/settings/wcj-settings-product-custom-info.php:74
11533
  msgid "Before add to cart button"
11534
  msgstr ""
11535
 
11536
+ #: includes/settings/wcj-settings-product-custom-info.php:75
11537
  msgid "After add to cart button"
11538
  msgstr ""
11539
 
11540
+ #: includes/settings/wcj-settings-product-custom-info.php:76
11541
  msgid "After add to cart form"
11542
  msgstr ""
11543
 
11544
+ #: includes/settings/wcj-settings-product-custom-info.php:81
11545
  msgid "Inside product title"
11546
  msgstr ""
11547
 
11548
+ #: includes/settings/wcj-settings-product-custom-info.php:95
11549
  msgid "Product Categories to Include"
11550
  msgstr ""
11551
 
11552
+ #: includes/settings/wcj-settings-product-custom-info.php:96
11553
+ #: includes/settings/wcj-settings-product-custom-info.php:106
11554
+ #: includes/settings/wcj-settings-product-custom-info.php:116
11555
+ #: includes/settings/wcj-settings-product-custom-info.php:126
11556
+ #: includes/settings/wcj-settings-product-custom-info.php:137
11557
+ #: includes/settings/wcj-settings-product-custom-info.php:148
11558
  msgid "Leave blank to disable the option."
11559
  msgstr ""
11560
 
11561
+ #: includes/settings/wcj-settings-product-custom-info.php:105
11562
  msgid "Product Categories to Exclude"
11563
  msgstr ""
11564
 
11565
+ #: includes/settings/wcj-settings-product-custom-info.php:115
11566
  msgid "Product Tags to Include"
11567
  msgstr ""
11568
 
11569
+ #: includes/settings/wcj-settings-product-custom-info.php:125
11570
  msgid "Product Tags to Exclude"
11571
  msgstr ""
11572
 
11573
+ #: includes/settings/wcj-settings-product-custom-info.php:136
11574
  #: includes/settings/wcj-settings-products-xml.php:138
11575
  msgid "Products to Include"
11576
  msgstr ""
11577
 
11578
+ #: includes/settings/wcj-settings-product-custom-info.php:147
11579
  #: includes/settings/wcj-settings-products-xml.php:147
11580
  msgid "Products to Exclude"
11581
  msgstr ""
11944
  msgid "Admin Products List - Custom Columns"
11945
  msgstr ""
11946
 
 
 
 
 
 
 
11947
  #: includes/settings/wcj-settings-product-listings.php:232
11948
  msgid "Admin Products List - Columns Order"
11949
  msgstr ""
12316
  msgid "Path on server:"
12317
  msgstr ""
12318
 
 
 
 
 
12319
  #: includes/settings/wcj-settings-products-xml.php:122
12320
  msgid "Update Period"
12321
  msgstr ""
12640
  msgstr ""
12641
 
12642
  #: includes/settings/wcj-settings-reports.php:93
12643
+ msgid "Monthly Sales (with Currency Conversion)"
12644
+ msgstr ""
12645
+
12646
+ #: includes/settings/wcj-settings-reports.php:100
12647
+ msgid "Include current day for current month"
12648
+ msgstr ""
12649
+
12650
+ #: includes/settings/wcj-settings-reports.php:107
12651
+ msgid "Forecast total orders and sum (excl. TAX) for current month"
12652
  msgstr ""
12653
 
12654
+ #: includes/settings/wcj-settings-reports.php:113
12655
  msgid "Customers by Country"
12656
  msgstr ""
12657
 
12658
+ #: includes/settings/wcj-settings-reports.php:119
12659
  msgid "Customers by Country Sets"
12660
  msgstr ""
12661
 
12662
+ #: includes/settings/wcj-settings-reports.php:125
12663
  msgid "All in Stock with sales data"
12664
  msgstr ""
12665
 
12666
+ #: includes/settings/wcj-settings-reports.php:131
12667
  msgid "Understocked products (calculated by sales data)"
12668
  msgstr ""
12669
 
12670
+ #: includes/settings/wcj-settings-reports.php:137
12671
  msgid "Overstocked products (calculated by sales data)"
12672
  msgstr ""
12673
 
12674
+ #: includes/settings/wcj-settings-reports.php:145
12675
  msgid "Available Reports"
12676
  msgstr ""
12677
 
12678
+ #: includes/settings/wcj-settings-reports.php:162
12679
  msgid "View report"
12680
  msgstr ""
12681
 
12742
  msgstr ""
12743
 
12744
  #: includes/settings/wcj-settings-shipping-options.php:14
12745
+ msgid "Hide if Free Shipping is Available"
12746
  msgstr ""
12747
 
12748
  #: includes/settings/wcj-settings-shipping-options.php:16
12751
  "available on shop frontend."
12752
  msgstr ""
12753
 
12754
+ #: includes/settings/wcj-settings-shipping-options.php:20
12755
+ msgid "Hide when free is available"
12756
  msgstr ""
12757
 
12758
+ #: includes/settings/wcj-settings-shipping-options.php:46
12759
+ #: includes/settings/wcj-settings-shipping-options.php:52
12760
  msgid "Free Shipping by Product"
12761
  msgstr ""
12762
 
12763
+ #: includes/settings/wcj-settings-shipping-options.php:47
12764
  msgid ""
12765
  "In this section you can select products which grant free shipping when added "
12766
  "to cart."
12767
  msgstr ""
12768
 
12769
+ #: includes/settings/wcj-settings-shipping-options.php:68
12770
  msgid ""
12771
  "Select either <strong>all products</strong> or <strong>at least one product</"
12772
  "strong> in cart must grant free shipping."
12773
  msgstr ""
12774
 
12775
+ #: includes/settings/wcj-settings-shipping-options.php:73
12776
  msgid "All products in cart must grant free shipping"
12777
  msgstr ""
12778
 
12779
+ #: includes/settings/wcj-settings-shipping-options.php:74
12780
  msgid "At least one product in cart must grant free shipping"
12781
  msgstr ""
12782
 
12783
+ #: includes/settings/wcj-settings-shipping-options.php:86
12784
+ #: includes/settings/wcj-settings-shipping-options.php:92
12785
  msgid "Shipping Descriptions"
12786
  msgstr ""
12787
 
12788
+ #: includes/settings/wcj-settings-shipping-options.php:88
12789
  #, php-format
12790
  msgid ""
12791
  "This section will allow you to add any text (e.g. description) for shipping "
12793
  "tags here, e.g. try \"%s\""
12794
  msgstr ""
12795
 
12796
+ #: includes/settings/wcj-settings-shipping-options.php:99
12797
  msgid "Description Visibility"
12798
  msgstr ""
12799
 
12800
+ #: includes/settings/wcj-settings-shipping-options.php:104
12801
+ #: includes/settings/wcj-settings-shipping-options.php:160
12802
  msgid "On both cart and checkout pages"
12803
  msgstr ""
12804
 
12805
+ #: includes/settings/wcj-settings-shipping-options.php:105
12806
+ #: includes/settings/wcj-settings-shipping-options.php:161
12807
  msgid "Only on cart page"
12808
  msgstr ""
12809
 
12810
+ #: includes/settings/wcj-settings-shipping-options.php:106
12811
+ #: includes/settings/wcj-settings-shipping-options.php:162
12812
  msgid "Only on checkout page"
12813
  msgstr ""
12814
 
12815
+ #: includes/settings/wcj-settings-shipping-options.php:108
12816
+ #: includes/settings/wcj-settings-shipping-options.php:164
12817
  msgid ""
12818
  "Possible values: on both cart and checkout pages; only on cart page; only on "
12819
  "checkout page"
12820
  msgstr ""
12821
 
12822
+ #: includes/settings/wcj-settings-shipping-options.php:132
12823
+ #: includes/settings/wcj-settings-shipping-options.php:138
12824
  msgid "Shipping Icons"
12825
  msgstr ""
12826
 
12827
+ #: includes/settings/wcj-settings-shipping-options.php:134
12828
  msgid ""
12829
  "This section will allow you to add icons for shipping method. Icons will be "
12830
  "visible on cart and checkout pages."
12831
  msgstr ""
12832
 
12833
+ #: includes/settings/wcj-settings-shipping-options.php:145
12834
  msgid "Icon Position"
12835
  msgstr ""
12836
 
12837
+ #: includes/settings/wcj-settings-shipping-options.php:150
12838
  msgid "Before label"
12839
  msgstr ""
12840
 
12841
+ #: includes/settings/wcj-settings-shipping-options.php:151
12842
  msgid "After label"
12843
  msgstr ""
12844
 
12845
+ #: includes/settings/wcj-settings-shipping-options.php:155
12846
  msgid "Icon Visibility"
12847
  msgstr ""
12848
 
12849
+ #: includes/settings/wcj-settings-shipping-options.php:169
12850
  msgid "Icon Style"
12851
  msgstr ""
12852
 
12853
+ #: includes/settings/wcj-settings-shipping-options.php:170
12854
  msgid ""
12855
  "You can also style icons with CSS class \"wcj_shipping_icon\", or id "
12856
  "\"wcj_shipping_icon_method_id\""
13096
  msgid "Custom Out of Stock Class"
13097
  msgstr ""
13098
 
13099
+ #: includes/settings/wcj-settings-url-coupons.php:15
13100
+ #, php-format
13101
+ msgid ""
13102
+ "Additionally you can hide standard coupon field on cart page in Booster's <a "
13103
+ "href=\"%s\">Cart Customization</a> module."
13104
+ msgstr ""
13105
+
13106
+ #: includes/settings/wcj-settings-url-coupons.php:21
13107
+ msgid "URL Coupons Key"
13108
+ msgstr ""
13109
+
13110
+ #: includes/settings/wcj-settings-url-coupons.php:22
13111
+ msgid ""
13112
+ "URL key. If you change this, make sure it's unique and is not used anywhere "
13113
+ "on your site (e.g. by another plugin)."
13114
+ msgstr ""
13115
+
13116
+ #: includes/settings/wcj-settings-url-coupons.php:23
13117
+ #, php-format
13118
+ msgid ""
13119
+ "Your users can apply shop's standard coupons, by visiting URL. E.g.: %s."
13120
+ msgstr ""
13121
+
13122
+ #: includes/settings/wcj-settings-url-coupons.php:30
13123
+ msgid "Redirect URL"
13124
+ msgstr ""
13125
+
13126
+ #: includes/settings/wcj-settings-url-coupons.php:31
13127
+ msgid ""
13128
+ "Possible values: No redirect; redirect to cart; redirect to checkout; "
13129
+ "redirect to custom local URL."
13130
+ msgstr ""
13131
+
13132
+ #: includes/settings/wcj-settings-url-coupons.php:36
13133
+ msgid "No redirect"
13134
+ msgstr ""
13135
+
13136
+ #: includes/settings/wcj-settings-url-coupons.php:37
13137
+ msgid "Redirect to cart"
13138
+ msgstr ""
13139
+
13140
+ #: includes/settings/wcj-settings-url-coupons.php:38
13141
+ msgid "Redirect to checkout"
13142
+ msgstr ""
13143
+
13144
+ #: includes/settings/wcj-settings-url-coupons.php:39
13145
+ msgid "Redirect to custom local URL"
13146
+ msgstr ""
13147
+
13148
+ #: includes/settings/wcj-settings-url-coupons.php:45
13149
+ msgid "Custom Local URL"
13150
+ msgstr ""
13151
+
13152
+ #: includes/settings/wcj-settings-url-coupons.php:52
13153
+ msgid "\"Fixed product discount\" Coupons"
13154
+ msgstr ""
13155
+
13156
+ #: includes/settings/wcj-settings-url-coupons.php:53
13157
+ msgid "Automatically add coupon's products to the cart"
13158
+ msgstr ""
13159
+
13160
  #: includes/settings/wcj-settings-wholesale-price.php:17
13161
  msgid ""
13162
  "Wholesale Price Levels Options. If you want to display prices table on "
13338
  msgid "Visible in Countries"
13339
  msgstr ""
13340
 
13341
+ #: includes/settings/meta-box/wcj-settings-meta-box-product-by-date.php:14
13342
+ #: includes/settings/meta-box/wcj-settings-meta-box-product-by-time.php:14
13343
+ msgid "Enable/Disable per Product Settings"
13344
+ msgstr ""
13345
+
13346
  #: includes/settings/meta-box/wcj-settings-meta-box-product-by-user-role.php:19
13347
  msgid "Visible for User Roles"
13348
  msgstr ""
13516
  msgid "Enable Custom Shipping"
13517
  msgstr ""
13518
 
13519
+ #: includes/shortcodes/class-wcj-general-shortcodes.php:128
13520
  #: includes/shortcodes/class-wcj-shortcodes.php:107
13521
  #, php-format
13522
  msgid "\"%s\" module is not enabled!"
13673
  msgid "Multicurrency module not enabled!"
13674
  msgstr ""
13675
 
 
 
 
 
13676
  #: includes/widgets/class-wcj-widget-multicurrency.php:76
13677
  msgid "Drop down"
13678
  msgstr ""
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: algoritmika,anbinder
3
  Tags: woocommerce,booster for woocommerce,woocommerce jetpack
4
  Requires at least: 4.4
5
  Tested up to: 4.8
6
- Stable tag: 2.9.0
7
  License: GNU General Public License v3.0
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
@@ -48,6 +48,7 @@ Booster for WooCommerce is a WordPress plugin that supercharges your site with a
48
  * *Crowdfunding* - Add crowdfunding products to WooCommerce.
49
  * *Product Add to Cart* - Set any local url to redirect to on WooCommerce Add to Cart. Automatically add to cart on product visit. Display radio buttons instead of drop box for variable products. Disable quantity input. Disable add to cart button on per product basis. Open external products on add to cart in new window. Replace Add to Cart button on archives with button from single product pages. Customize Add to Cart messages.
50
  * *Product Addons* - Add (paid/free/discount) addons to WooCommerce products.
 
51
  * *Product Availability by Time* - WooCommerce product availability by time.
52
  * *Product Bulk Meta Editor* - Set WooCommerce products meta with bulk editor.
53
  * *Product Images* - Customize WooCommerce products images, thumbnails and sale flashes.
@@ -115,14 +116,16 @@ Booster for WooCommerce is a WordPress plugin that supercharges your site with a
115
  * *Booster WPML* - Booster for WooCommerce basic WPML support.
116
  * *Breadcrumbs* - Customize WooCommerce breadcrumbs.
117
  * *Custom CSS* - Separate custom CSS for front and back end. Per product CSS.
 
118
  * *Custom JS* - Separate custom JS for front and back end.
 
119
  * *Email Verification* - Add WooCommerce email verification.
120
- * *Emails* - Add custom emails. Add another email recipient(s) to all WooCommerce emails.
121
  * *Export* - WooCommerce export tools.
122
  * *General* - Custom roles tool. Shortcodes in WordPress text widgets.
123
  * *My Account* - WooCommerce "My Account" page customization.
124
  * *Old Slugs* - Remove old WooCommerce products slugs.
125
  * *Reports* - WooCommerce stock, sales, customers etc. reports.
 
126
 
127
  = Feedback =
128
  * We are open to your suggestions and feedback - thank you for using or trying out one of our plugins!
@@ -163,6 +166,35 @@ You can see the differences between versions in this [table](https://booster.io/
163
 
164
  == Changelog ==
165
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
166
  = 2.9.0 - 02/07/2017
167
  * Dev - WooCommerce v3.x.x compatibility - Shortcodes - Orders - `[wcj_order_items_table]` - `product_name` column - "WooCommerce TM Extra Product Options" plugin compatibility - `get_meta()`.
168
  * Dev - WooCommerce v3.x.x compatibility - Shortcodes - Products - `[wcj_product_dimensions]` - `wc_format_dimensions()`.
3
  Tags: woocommerce,booster for woocommerce,woocommerce jetpack
4
  Requires at least: 4.4
5
  Tested up to: 4.8
6
+ Stable tag: 2.9.1
7
  License: GNU General Public License v3.0
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
48
  * *Crowdfunding* - Add crowdfunding products to WooCommerce.
49
  * *Product Add to Cart* - Set any local url to redirect to on WooCommerce Add to Cart. Automatically add to cart on product visit. Display radio buttons instead of drop box for variable products. Disable quantity input. Disable add to cart button on per product basis. Open external products on add to cart in new window. Replace Add to Cart button on archives with button from single product pages. Customize Add to Cart messages.
50
  * *Product Addons* - Add (paid/free/discount) addons to WooCommerce products.
51
+ * *Product Availability by Date* - WooCommerce product availability by date.
52
  * *Product Availability by Time* - WooCommerce product availability by time.
53
  * *Product Bulk Meta Editor* - Set WooCommerce products meta with bulk editor.
54
  * *Product Images* - Customize WooCommerce products images, thumbnails and sale flashes.
116
  * *Booster WPML* - Booster for WooCommerce basic WPML support.
117
  * *Breadcrumbs* - Customize WooCommerce breadcrumbs.
118
  * *Custom CSS* - Separate custom CSS for front and back end. Per product CSS.
119
+ * *Custom Emails* - Add custom emails to WooCommerce.
120
  * *Custom JS* - Separate custom JS for front and back end.
121
+ * *Email Options* - WooCommerce email options. E.g.: add another email recipient(s) to all WooCommerce emails.
122
  * *Email Verification* - Add WooCommerce email verification.
 
123
  * *Export* - WooCommerce export tools.
124
  * *General* - Custom roles tool. Shortcodes in WordPress text widgets.
125
  * *My Account* - WooCommerce "My Account" page customization.
126
  * *Old Slugs* - Remove old WooCommerce products slugs.
127
  * *Reports* - WooCommerce stock, sales, customers etc. reports.
128
+ * *URL Coupons* - WooCommerce URL coupons.
129
 
130
  = Feedback =
131
  * We are open to your suggestions and feedback - thank you for using or trying out one of our plugins!
166
 
167
  == Changelog ==
168
 
169
+ = 2.9.1 - 17/07/2017
170
+ * Dev - `WCJ_Module` - `save_meta_box_validate_value()` added.
171
+ * Dev - Manage Settings - "Use List Instead of Comma Separated Text for Products in Settings" option added (Supported modules: Product Info).
172
+ * Dev - Functions - Country - `wcj_get_country_flag_by_code()` - "No flag" added.
173
+ * Dev - Shortcodes - General - `[wcj_site_url]` shortcode added.
174
+ * Dev - PRODUCTS - Product Availability by Date - Initial module release.
175
+ * Fix - PRODUCTS - Product Availability by Time - Settings - Description fixed.
176
+ * Dev - PRODUCTS - Product Availability by Time - "Per Product" options added.
177
+ * Dev - SHIPPING & ORDERS - Shipping Options - Hide if Free Shipping is Available - `Hide all except "Local Pickup"` and `Hide "Flat Rate" only` options added.
178
+ * Fix - EMAILS & MISC. - Admin Bar - Booster - Dashboard - Active - Submodules excluded from the list.
179
+ * Dev - EMAILS & MISC. - Admin Bar - Booster - Modules - Sorted by title.
180
+ * Dev - EMAILS & MISC. - Admin Tools - "WooCommerce Log" option added.
181
+ * Dev - EMAILS & MISC. - Custom Emails - Renamed from "Emails" module.
182
+ * Dev - EMAILS & MISC. - Custom JS - Shortcodes can now be used in custom JS.
183
+ * Dev - EMAILS & MISC. - Email Options - Initial module release (separated from "Emails" module).
184
+ * Dev - EMAILS & MISC. - General - "Track Users" section added. "Top countries by visits" admin dashboard widget added. "Track Orders" (i.e. "Save customer's acquisition source (i.e. HTTP referer) for orders") option added.
185
+ * Dev - EMAILS & MISC. - Reports - Orders - Monthly Sales (with Currency Conversion) - Monthly rates are set manually now.
186
+ * Dev - EMAILS & MISC. - Reports - Orders - Monthly Sales (with Currency Conversion) - "Forecast total orders and sum (excl. TAX) for current month" option added.
187
+ * Dev - EMAILS & MISC. - Reports - Orders - Monthly Sales (with Currency Conversion) - "Include current day for current month" option added.
188
+ * Dev - EMAILS & MISC. - Reports - Orders - Monthly Sales (with Currency Conversion) - "Orders by Currency" row added.
189
+ * Dev - EMAILS & MISC. - Reports - Orders - Monthly Sales (with Currency Conversion) - Code refactoring, cleanup etc.
190
+ * Dev - EMAILS & MISC. - Reports - Stock - "Total current stock purchase price" added.
191
+ * Dev - EMAILS & MISC. - Reports - Stock - `WP_Query` optimized to return `ids` only.
192
+ * Dev - EMAILS & MISC. - Reports - Stock - Code cleanup.
193
+ * Dev - EMAILS & MISC. - URL Coupons - "Redirect URL" options added.
194
+ * Dev - EMAILS & MISC. - URL Coupons - "Automatically add coupon's products to the cart" option added.
195
+ * Dev - EMAILS & MISC. - URL Coupons - Initial module release (separated from "General" module).
196
+ * Tweak - Flags images updated.
197
+
198
  = 2.9.0 - 02/07/2017
199
  * Dev - WooCommerce v3.x.x compatibility - Shortcodes - Orders - `[wcj_order_items_table]` - `product_name` column - "WooCommerce TM Extra Product Options" plugin compatibility - `get_meta()`.
200
  * Dev - WooCommerce v3.x.x compatibility - Shortcodes - Products - `[wcj_product_dimensions]` - `wc_format_dimensions()`.
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.
6
- Version: 2.9.0
7
  Author: Algoritmika Ltd
8
  Author URI: https://booster.io
9
  Text Domain: woocommerce-jetpack
@@ -45,7 +45,7 @@ if ( ! class_exists( 'WC_Jetpack' ) ) :
45
  * Main WC_Jetpack Class
46
  *
47
  * @class WC_Jetpack
48
- * @version 2.9.0
49
  */
50
  final class WC_Jetpack {
51
 
@@ -55,7 +55,7 @@ final class WC_Jetpack {
55
  * @var string
56
  * @since 2.4.7
57
  */
58
- public $version = '2.9.0';
59
 
60
  /**
61
  * @var WC_Jetpack The single instance of the class
@@ -293,7 +293,7 @@ final class WC_Jetpack {
293
  /**
294
  * Include modules and submodules
295
  *
296
- * @version 2.9.0
297
  */
298
  function include_modules() {
299
  $modules_files = array(
@@ -327,6 +327,7 @@ final class WC_Jetpack {
327
  'includes/class-wcj-product-images.php',
328
  'includes/class-wcj-product-by-country.php',
329
  'includes/class-wcj-product-by-time.php',
 
330
  'includes/class-wcj-product-by-user-role.php',
331
  'includes/class-wcj-product-by-user.php',
332
  'includes/class-wcj-add-to-cart.php',
@@ -362,6 +363,7 @@ final class WC_Jetpack {
362
  'includes/class-wcj-order-quantities.php',
363
  'includes/class-wcj-pdf-invoicing.php',
364
  'includes/class-wcj-emails.php',
 
365
  'includes/class-wcj-emails-verification.php',
366
  'includes/class-wcj-currencies.php',
367
  'includes/class-wcj-multicurrency.php',
@@ -373,6 +375,7 @@ final class WC_Jetpack {
373
  'includes/class-wcj-price-formats.php',
374
  'includes/class-wcj-general.php',
375
  'includes/class-wcj-breadcrumbs.php',
 
376
  'includes/class-wcj-admin-bar.php',
377
  'includes/class-wcj-my-account.php',
378
  'includes/class-wcj-custom-css.php',
3
  Plugin Name: Booster for WooCommerce
4
  Plugin URI: https://booster.io
5
  Description: Supercharge your WooCommerce site with these awesome powerful features.
6
+ Version: 2.9.1
7
  Author: Algoritmika Ltd
8
  Author URI: https://booster.io
9
  Text Domain: woocommerce-jetpack
45
  * Main WC_Jetpack Class
46
  *
47
  * @class WC_Jetpack
48
+ * @version 2.9.1
49
  */
50
  final class WC_Jetpack {
51
 
55
  * @var string
56
  * @since 2.4.7
57
  */
58
+ public $version = '2.9.1';
59
 
60
  /**
61
  * @var WC_Jetpack The single instance of the class
293
  /**
294
  * Include modules and submodules
295
  *
296
+ * @version 2.9.1
297
  */
298
  function include_modules() {
299
  $modules_files = array(
327
  'includes/class-wcj-product-images.php',
328
  'includes/class-wcj-product-by-country.php',
329
  'includes/class-wcj-product-by-time.php',
330
+ 'includes/class-wcj-product-by-date.php',
331
  'includes/class-wcj-product-by-user-role.php',
332
  'includes/class-wcj-product-by-user.php',
333
  'includes/class-wcj-add-to-cart.php',
363
  'includes/class-wcj-order-quantities.php',
364
  'includes/class-wcj-pdf-invoicing.php',
365
  'includes/class-wcj-emails.php',
366
+ 'includes/class-wcj-email-options.php',
367
  'includes/class-wcj-emails-verification.php',
368
  'includes/class-wcj-currencies.php',
369
  'includes/class-wcj-multicurrency.php',
375
  'includes/class-wcj-price-formats.php',
376
  'includes/class-wcj-general.php',
377
  'includes/class-wcj-breadcrumbs.php',
378
+ 'includes/class-wcj-url-coupons.php',
379
  'includes/class-wcj-admin-bar.php',
380
  'includes/class-wcj-my-account.php',
381
  'includes/class-wcj-custom-css.php',