Version Description
- Fixed: Sanitize GET and POST form attributes (thanks for reporting)
Download this release
Release Info
Developer | visser |
Plugin | WooCommerce – Store Exporter |
Version | 2.7.1 |
Comparing to | |
See all releases |
Code changes from version 2.7 to 2.7.1
- exporter.php +5 -5
- includes/admin.php +2 -2
- includes/common.php +4 -4
- includes/functions.php +12 -6
- includes/settings.php +4 -1
- readme.txt +46 -31
exporter.php
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
* Plugin Name: WooCommerce - Store Exporter
|
4 |
-
* Plugin URI:
|
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:
|
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://
|
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(
|
|
|
|
|
|
|
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(
|
|
|
|
|
|
|
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(
|
|
|
|
|
|
|
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://
|
5 |
-
Tags: woocommerce, export,
|
6 |
Requires at least: 2.9.2
|
7 |
Tested up to: 5.8.2
|
8 |
-
|
|
|
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 |
-
|
16 |
|
17 |
-
|
18 |
|
19 |
-
|
20 |
|
21 |
-
|
|
|
|
|
22 |
|
23 |
-
This
|
|
|
|
|
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 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
|
|
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
|
93 |
|
94 |
-
Just a few of the features unlocked in the [Pro upgrade of Store Exporter](https://
|
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://
|
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 |
+
🔸 Toggle and save export fields
|
50 |
+
🔸 Field label editor (*)
|
51 |
+
🔸 Scheduled exports (*)
|
52 |
+
🔸 Export templates (*)
|
53 |
+
🔸 Compatible with WordPress Multisite
|
54 |
+
🔸 Compatible with WPML (WordPress Multilingual) (*)
|
55 |
+
🔸 Compatible with WP-CLI (*)
|
56 |
+
🔸 Export to CSV file
|
57 |
+
🔸 Export to TSV file (*)
|
58 |
+
🔸 Export to Excel 2007 (XLS) file (*)
|
59 |
+
🔸 Export to Excel 2013 (XLSX) file (*)
|
60 |
+
🔸 Export to XML file (*)
|
61 |
+
🔸 Export to RSS file (*)
|
62 |
+
🔸 Export to WordPress Media
|
63 |
+
🔸 Export to e-mail addresses (*)
|
64 |
+
🔸 Export to fixed filename (*)
|
65 |
+
🔸 Export to remote FTP/FTPS/SFTP (*)
|
66 |
+
🔸 Export to remote POST (*)
|
67 |
+
🔸 Supports external CRON (*)
|
68 |
+
🔸 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
|