WooCommerce – Store Exporter - Version 2.7.1

Version Description

  • Fixed: Sanitize GET and POST form attributes (thanks for reporting)
Download this release

Release Info

Developer visser
Plugin Icon 128x128 WooCommerce – Store Exporter
Version 2.7.1
Comparing to
See all releases

Code changes from version 2.7 to 2.7.1

exporter.php CHANGED
@@ -1,11 +1,11 @@
1
  <?php
2
  /*
3
  * Plugin Name: WooCommerce - Store Exporter
4
- * Plugin URI: http://www.visser.com.au/woocommerce/plugins/exporter/
5
- * Description: Export store details out of WooCommerce into simple formatted files (e.g. CSV, TSV, Excel formats including XLS and XLSX, XML, etc.)
6
- * Version: 2.7
7
  * Author: Visser Labs
8
- * Author URI: http://www.visser.com.au/solutions/
9
  * License: GPL2
10
  *
11
  * Text Domain: woocommerce-exporter
@@ -56,7 +56,7 @@ if( is_admin() ) {
56
 
57
  $action = ( function_exists( 'woo_get_action' ) ? woo_get_action() : false );
58
 
59
- $troubleshooting_url = 'https://www.visser.com.au/documentation/store-exporter-deluxe/troubleshooting/';
60
 
61
  // Now is the time to de-activate Store Exporter if Store Exporter Deluxe is activated
62
  if( defined( 'WOO_CD_PREFIX' ) ) {
1
  <?php
2
  /*
3
  * Plugin Name: WooCommerce - Store Exporter
4
+ * Plugin URI: https://visser.com.au/woocommerce/plugins/exporter/
5
+ * Description: Export Products, Orders, Users, Categories, Tags and other store details out of WooCommerce into Excel spreadsheets and other simple formatted files (e.g. CSV, TSV, Excel formats including XLS and XLSX, XML, etc.)
6
+ * Version: 2.7.1
7
  * Author: Visser Labs
8
+ * Author URI: https://visser.com.au/solutions/
9
  * License: GPL2
10
  *
11
  * Text Domain: woocommerce-exporter
56
 
57
  $action = ( function_exists( 'woo_get_action' ) ? woo_get_action() : false );
58
 
59
+ $troubleshooting_url = 'https://visser.com.au/documentation/store-exporter-deluxe/troubleshooting/';
60
 
61
  // Now is the time to de-activate Store Exporter if Store Exporter Deluxe is activated
62
  if( defined( 'WOO_CD_PREFIX' ) ) {
includes/admin.php CHANGED
@@ -290,7 +290,7 @@ function woo_ce_admin_plugin_row() {
290
  function woo_ce_admin_active_tab( $tab_name = null, $tab = null ) {
291
 
292
  if( isset( $_GET['tab'] ) && !$tab )
293
- $tab = $_GET['tab'];
294
  else if( !isset( $_GET['tab'] ) && woo_ce_get_option( 'skip_overview', false ) )
295
  $tab = 'export';
296
  else
@@ -633,7 +633,7 @@ function woo_ce_tab_template( $tab = '' ) {
633
  if( file_exists( WOO_CE_PATH . 'templates/admin/tabs-' . $tab . '.php' ) ) {
634
  include_once( WOO_CE_PATH . 'templates/admin/tabs-' . $tab . '.php' );
635
  } else {
636
- $message = sprintf( __( 'We couldn\'t load the export template file <code>%s</code> within <code>%s</code>, this file should be present.', 'woocommerce-exporter' ), 'tabs-' . $tab . '.php', WOO_CE_PATH . 'templates/admin/...' );
637
  woo_ce_admin_notice_html( $message, 'error' );
638
  ob_start(); ?>
639
  <p><?php _e( 'You can see this error for one of a few common reasons', 'woocommerce-exporter' ); ?>:</p>
290
  function woo_ce_admin_active_tab( $tab_name = null, $tab = null ) {
291
 
292
  if( isset( $_GET['tab'] ) && !$tab )
293
+ $tab = sanitize_text_field( $_GET['tab'] );
294
  else if( !isset( $_GET['tab'] ) && woo_ce_get_option( 'skip_overview', false ) )
295
  $tab = 'export';
296
  else
633
  if( file_exists( WOO_CE_PATH . 'templates/admin/tabs-' . $tab . '.php' ) ) {
634
  include_once( WOO_CE_PATH . 'templates/admin/tabs-' . $tab . '.php' );
635
  } else {
636
+ $message = sprintf( __( 'We couldn\'t load the export template file <code>%s</code> within <code>%s</code>, this file should be present.', 'woocommerce-exporter' ), 'tabs-' . esc_attr( $tab ) . '.php', WOO_CE_PATH . 'templates/admin/...' );
637
  woo_ce_admin_notice_html( $message, 'error' );
638
  ob_start(); ?>
639
  <p><?php _e( 'You can see this error for one of a few common reasons', 'woocommerce-exporter' ); ?>:</p>
includes/common.php CHANGED
@@ -27,18 +27,18 @@ if( !function_exists( 'woo_get_action' ) ) {
27
  if( $switch ) {
28
 
29
  if( isset( $_GET['action'] ) )
30
- $action = $_GET['action'];
31
  else if( !isset( $action ) && isset( $_POST['action'] ) )
32
- $action = $_POST['action'];
33
  else
34
  $action = false;
35
 
36
  } else {
37
 
38
  if( isset( $_POST['action'] ) )
39
- $action = $_POST['action'];
40
  else if( !isset( $action ) && isset( $_GET['action'] ) )
41
- $action = $_GET['action'];
42
  else
43
  $action = false;
44
 
27
  if( $switch ) {
28
 
29
  if( isset( $_GET['action'] ) )
30
+ $action = sanitize_text_field( $_GET['action'] );
31
  else if( !isset( $action ) && isset( $_POST['action'] ) )
32
+ $action = sanitize_text_field( $_POST['action'] );
33
  else
34
  $action = false;
35
 
36
  } else {
37
 
38
  if( isset( $_POST['action'] ) )
39
+ $action = sanitize_text_field( $_POST['action'] );
40
  else if( !isset( $action ) && isset( $_GET['action'] ) )
41
+ $action = sanitize_text_field( $_GET['action'] );
42
  else
43
  $action = false;
44
 
includes/functions.php CHANGED
@@ -273,7 +273,10 @@ if( is_admin() ) {
273
  // Save skip overview preference
274
  case 'skip_overview':
275
  // We need to verify the nonce.
276
- if( !empty( $_POST ) && check_admin_referer( 'skip_overview', 'woo_ce_skip_overview' ) ) {
 
 
 
277
  $skip_overview = false;
278
  if( isset( $_POST['skip_overview'] ) )
279
  $skip_overview = 1;
@@ -303,7 +306,7 @@ if( is_admin() ) {
303
  if( isset( $_GET['message'] ) )
304
  $message = urldecode( $_GET['message'] );
305
  if( $message ) {
306
- $message = sprintf( __( 'A WordPress or server error caused the export to fail, the exporter was provided with a reason: <em>%s</em>', 'woocommerce-exporter' ), $message );
307
  $message .= ' (<a href="' . $troubleshooting_url . '" target="_blank">' . __( 'Need help?', 'woocommerce-exporter' ) . '</a>)';
308
  } else {
309
  $message = __( 'A WordPress or server error caused the exporter to fail, no reason was provided, if this persists please get in touch so we can reproduce and resolve this with you.', 'woocommerce-exporter' );
@@ -406,7 +409,10 @@ if( is_admin() ) {
406
  }
407
 
408
  // Displays a notice if Archives are detected without a Post Status of private
409
- if( woo_ce_get_unprotected_archives( array( 'count' => true ) ) && !woo_ce_get_option( 'dismiss_archives_privacy_prompt', 0 ) ) {
 
 
 
410
  $dismiss_url = esc_url( add_query_arg( array( 'action' => 'dismiss_archives_privacy_prompt', '_wpnonce' => wp_create_nonce( 'woo_ce_dismiss_archives_privacy_prompt' ) ) ) );
411
  $override_url = esc_url( add_query_arg( array( 'action' => 'override_archives_privacy', '_wpnonce' => wp_create_nonce( 'woo_ce_override_archives_privacy' ) ) ) );
412
  $message = '<span style="float:right;"><a href="' . $dismiss_url . '">' . __( 'Dismiss', 'woocommerce-exporter' ) . '</a></span>';
@@ -512,7 +518,7 @@ if( is_admin() ) {
512
 
513
  if( empty( $post ) ) {
514
  if( isset( $_GET['post'] ) )
515
- $post = get_post( $_GET['post'] );
516
  }
517
 
518
  if( $post->post_type != 'attachment' )
@@ -577,7 +583,7 @@ if( is_admin() ) {
577
  'posts_per_page' => -1
578
  );
579
  if( isset( $_GET['filter'] ) ) {
580
- $filter = $_GET['filter'];
581
  if( !empty( $filter ) )
582
  $args['meta_value'] = $filter;
583
  }
@@ -720,7 +726,7 @@ if( is_admin() ) {
720
 
721
  $output = '';
722
  if( isset( $_GET['filter'] ) ) {
723
- $filter = $_GET['filter'];
724
  if( $filter == $current )
725
  $output = ' class="current"';
726
  } else if( $current == 'all' ) {
273
  // Save skip overview preference
274
  case 'skip_overview':
275
  // We need to verify the nonce.
276
+ if(
277
+ !empty( $_POST ) &&
278
+ check_admin_referer( 'skip_overview', 'woo_ce_skip_overview' )
279
+ ) {
280
  $skip_overview = false;
281
  if( isset( $_POST['skip_overview'] ) )
282
  $skip_overview = 1;
306
  if( isset( $_GET['message'] ) )
307
  $message = urldecode( $_GET['message'] );
308
  if( $message ) {
309
+ $message = sprintf( __( 'A WordPress or server error caused the export to fail, the exporter was provided with a reason: <em>%s</em>', 'woocommerce-exporter' ), esc_attr( $message ) );
310
  $message .= ' (<a href="' . $troubleshooting_url . '" target="_blank">' . __( 'Need help?', 'woocommerce-exporter' ) . '</a>)';
311
  } else {
312
  $message = __( 'A WordPress or server error caused the exporter to fail, no reason was provided, if this persists please get in touch so we can reproduce and resolve this with you.', 'woocommerce-exporter' );
409
  }
410
 
411
  // Displays a notice if Archives are detected without a Post Status of private
412
+ if(
413
+ woo_ce_get_unprotected_archives( array( 'count' => true ) ) &&
414
+ !woo_ce_get_option( 'dismiss_archives_privacy_prompt', 0 )
415
+ ) {
416
  $dismiss_url = esc_url( add_query_arg( array( 'action' => 'dismiss_archives_privacy_prompt', '_wpnonce' => wp_create_nonce( 'woo_ce_dismiss_archives_privacy_prompt' ) ) ) );
417
  $override_url = esc_url( add_query_arg( array( 'action' => 'override_archives_privacy', '_wpnonce' => wp_create_nonce( 'woo_ce_override_archives_privacy' ) ) ) );
418
  $message = '<span style="float:right;"><a href="' . $dismiss_url . '">' . __( 'Dismiss', 'woocommerce-exporter' ) . '</a></span>';
518
 
519
  if( empty( $post ) ) {
520
  if( isset( $_GET['post'] ) )
521
+ $post = get_post( absint( $_GET['post'] ) );
522
  }
523
 
524
  if( $post->post_type != 'attachment' )
583
  'posts_per_page' => -1
584
  );
585
  if( isset( $_GET['filter'] ) ) {
586
+ $filter = sanitize_text_field( $_GET['filter'] );
587
  if( !empty( $filter ) )
588
  $args['meta_value'] = $filter;
589
  }
726
 
727
  $output = '';
728
  if( isset( $_GET['filter'] ) ) {
729
+ $filter = sanitize_text_field( $_GET['filter'] );
730
  if( $filter == $current )
731
  $output = ' class="current"';
732
  } else if( $current == 'all' ) {
includes/settings.php CHANGED
@@ -281,7 +281,10 @@ function woo_ce_export_settings_save() {
281
  woo_ce_update_option( 'category_separator', sanitize_text_field( $_POST['category_separator'] ) );
282
  woo_ce_update_option( 'bom', absint( $_POST['bom'] ) );
283
  woo_ce_update_option( 'escape_formatting', sanitize_text_field( $_POST['escape_formatting'] ) );
284
- if( $_POST['date_format'] == 'custom' && !empty( $_POST['date_format_custom'] ) ) {
 
 
 
285
  woo_ce_update_option( 'date_format', sanitize_text_field( $_POST['date_format_custom'] ) );
286
  } else {
287
  woo_ce_update_option( 'date_format', sanitize_text_field( $_POST['date_format'] ) );
281
  woo_ce_update_option( 'category_separator', sanitize_text_field( $_POST['category_separator'] ) );
282
  woo_ce_update_option( 'bom', absint( $_POST['bom'] ) );
283
  woo_ce_update_option( 'escape_formatting', sanitize_text_field( $_POST['escape_formatting'] ) );
284
+ if(
285
+ $_POST['date_format'] == 'custom' &&
286
+ !empty( $_POST['date_format_custom'] )
287
+ ) {
288
  woo_ce_update_option( 'date_format', sanitize_text_field( $_POST['date_format_custom'] ) );
289
  } else {
290
  woo_ce_update_option( 'date_format', sanitize_text_field( $_POST['date_format'] ) );
readme.txt CHANGED
@@ -1,26 +1,31 @@
1
  === WooCommerce - Store Exporter ===
2
 
3
  Contributors: visser, visser.labs, byronkeet
4
- Donate link: https://www.visser.com.au/donations/
5
- Tags: woocommerce, export, products, sales, orders, coupons, users, subscriptions, csv
6
  Requires at least: 2.9.2
7
  Tested up to: 5.8.2
8
- Stable tag: 2.7
 
9
  License: GPLv2 or later
10
 
11
- Export store details out of WooCommerce into simple formatted files (e.g. CSV, XML, Excel 2007, XLS, etc.).
12
 
13
  == Description ==
14
 
15
- [Premium](https://www.visser.com.au/solutions/woocommerce-export/) | [Documentation](https://www.visser.com.au/documentation/store-exporter-deluxe/)
16
 
17
- **Store Exporter for WooCommerce creates Product, Order, Category, Tag and User exports to suit your store requirements, simply click Quick Export to produce concise, ready to use Excel spreadshseets.**
18
 
19
- Screen-loads of filters and options are available to customise each export type, with native export integration of 125+ WooCommerce Plugins.
20
 
21
- Supported since 2012 Store Exporter for WooCommerce is maintained by an active community of store owners and developers providing feature suggestions and feedback.
 
 
22
 
23
- This advanced WooCommerce export Plugin maintains compatibility with the latest WooCommerce releases through regular Plugin updates, we also proudly maintain compatibility with legacy releases of WooCommerce.
 
 
24
 
25
  = WooCommerce export types =
26
 
@@ -41,25 +46,26 @@ This advanced WooCommerce export Plugin maintains compatibility with the latest
41
 
42
  = WooCommerce export features =
43
 
44
- * Toggle and save export fields
45
- * Field label editor (*)
46
- * Scheduled exports (*)
47
- * Export templates (*)
48
- * Compatible with WordPress Multisite
49
- * Compatible with WPML (WordPress Multilingual) (*)
50
- * Compatible with WP-CLI (*)
51
- * Export to CSV file
52
- * Export to TSV file (*)
53
- * Export to Excel 2007 (XLS) file (*)
54
- * Export to Excel 2013 (XLSX) file (*)
55
- * Export to XML file (*)
56
- * Export to RSS file (*)
57
- * Export to WordPress Media
58
- * Export to e-mail addresses (*)
59
- * Export to fixed filename (*)
60
- * Export to remote FTP/FTPS/SFTP (*)
61
- * Export to remote POST (*)
62
- * Supports external CRON (*)
 
63
 
64
  = See our WooCommerce export Plugin in action =
65
 
@@ -89,9 +95,9 @@ This advanced WooCommerce export Plugin maintains compatibility with the latest
89
 
90
  (*) Requires the Pro upgrade to enable additional store export functionality.
91
 
92
- = Native export integration with 110+ WooCommerce Plugins =
93
 
94
- Just a few of the features unlocked in the [Pro upgrade of Store Exporter](https://www.visser.com.au/plugins/store-exporter-deluxe/?platform=wc) include:
95
 
96
  - Export All in One SEO Pack
97
  - Export Advanced Google Product Feed
@@ -115,7 +121,7 @@ Just a few of the features unlocked in the [Pro upgrade of Store Exporter](https
115
 
116
  ... and many more free and Premium extensions for WooCommerce and WordPress.
117
 
118
- [For more information visit our site.](https://www.visser.com.au/solutions/woocommerce-export/)
119
 
120
  Happy exporting! :)
121
 
@@ -142,6 +148,12 @@ If you have any problems, questions or suggestions please create a topic here on
142
 
143
  [Store Exporter on w.org](https://wordpress.org/support/plugin/woocommerce-exporter)
144
 
 
 
 
 
 
 
145
  == Screenshots ==
146
 
147
  1. Each export type contains its own fields, filters and options.
@@ -154,6 +166,9 @@ If you have any problems, questions or suggestions please create a topic here on
154
 
155
  == Changelog ==
156
 
 
 
 
157
  = 2.7 =
158
  * Fixed: Compatible with WooCommerce version 4.4.1
159
  * Fixed: jQuery update (change .attr to .prop in export.js) - Check All/Uncheck All to work consistantly for export fields on Quick Export Screen
1
  === WooCommerce - Store Exporter ===
2
 
3
  Contributors: visser, visser.labs, byronkeet
4
+ Donate link: https://visser.com.au/donations/
5
+ Tags: woocommerce export, woocommerce product export, woocommerce export orders, woocommerce export subscriptions, export woocommerce products, order export, csv, excel, xlsx
6
  Requires at least: 2.9.2
7
  Tested up to: 5.8.2
8
+ Requires PHP: 5.6
9
+ Stable tag: 2.7.1
10
  License: GPLv2 or later
11
 
12
+ Export Products, Orders, Users, Categories, Tags and other store details out of WooCommerce into Excel spreadsheets and other simple formatted files (e.g. CSV, XML, Excel 2007, XLS, etc.).
13
 
14
  == Description ==
15
 
16
+ = Introduction - WooCommerce Export Plugin =
17
 
18
+ [Premium](https://visser.com.au/solutions/woocommerce-export/) | [Documentation](https://visser.com.au/documentation/store-exporter-deluxe/)
19
 
20
+ **Export WooCommerce Products, Orders, Categories, Tags, Users and other store details into Excel spreadsheets that suit your store requirements.**
21
 
22
+ Simply click Quick Export to produce concise, ready to use Excel spreadshseets.
23
+
24
+ Screen-loads of export fields, filters and options are available to customise each export type, with native export integration for 125+ WooCommerce Plugins.
25
 
26
+ This WooCommerce export Plugin maintains compatibility with the latest WooCommerce release through regular Plugin updates, we also proudly maintain compatibility with legacy releases of WooCommerce.
27
+
28
+ Supported since 2012 Store Exporter for WooCommerce is maintained by an active community of store owners and developers providing feature suggestions and feedback.
29
 
30
  = WooCommerce export types =
31
 
46
 
47
  = WooCommerce export features =
48
 
49
+ &#128312; Toggle and save export fields
50
+ &#128312; Field label editor (*)
51
+ &#128312; Scheduled exports (*)
52
+ &#128312; Export templates (*)
53
+ &#128312; Compatible with WordPress Multisite
54
+ &#128312; Compatible with WPML (WordPress Multilingual) (*)
55
+ &#128312; Compatible with WP-CLI (*)
56
+ &#128312; Export to CSV file
57
+ &#128312; Export to TSV file (*)
58
+ &#128312; Export to Excel 2007 (XLS) file (*)
59
+ &#128312; Export to Excel 2013 (XLSX) file (*)
60
+ &#128312; Export to XML file (*)
61
+ &#128312; Export to RSS file (*)
62
+ &#128312; Export to WordPress Media
63
+ &#128312; Export to e-mail addresses (*)
64
+ &#128312; Export to fixed filename (*)
65
+ &#128312; Export to remote FTP/FTPS/SFTP (*)
66
+ &#128312; Export to remote POST (*)
67
+ &#128312; Supports external CRON (*)
68
+ &#128312; WP-CLI support (*)
69
 
70
  = See our WooCommerce export Plugin in action =
71
 
95
 
96
  (*) Requires the Pro upgrade to enable additional store export functionality.
97
 
98
+ = Native export integration with 125+ WooCommerce Plugins =
99
 
100
+ Just a few of the features unlocked in the [Pro upgrade of Store Exporter](https://visser.com.au/plugins/store-exporter-deluxe/?platform=wc) include:
101
 
102
  - Export All in One SEO Pack
103
  - Export Advanced Google Product Feed
121
 
122
  ... and many more free and Premium extensions for WooCommerce and WordPress.
123
 
124
+ [For more information visit our site.](https://visser.com.au/solutions/woocommerce-export/)
125
 
126
  Happy exporting! :)
127
 
148
 
149
  [Store Exporter on w.org](https://wordpress.org/support/plugin/woocommerce-exporter)
150
 
151
+ == Reporting security issues ==
152
+
153
+ If you are here to report any sort of security issue with this Plugin please use this Report a Plugin vulnerability form.
154
+
155
+ https://visser.com.au/contact/report-a-vulnerability/
156
+
157
  == Screenshots ==
158
 
159
  1. Each export type contains its own fields, filters and options.
166
 
167
  == Changelog ==
168
 
169
+ = 2.7.1 =
170
+ * Fixed: Sanitize GET and POST form attributes (thanks for reporting)
171
+
172
  = 2.7 =
173
  * Fixed: Compatible with WooCommerce version 4.4.1
174
  * Fixed: jQuery update (change .attr to .prop in export.js) - Check All/Uncheck All to work consistantly for export fields on Quick Export Screen