Advanced Order Export For WooCommerce - Version 1.5.6

Version Description

  • 2018-08-30 =
  • Added filter by user custom fields
  • Added order fields "Count of exported items", "User Website"
  • Added product fields "Product Id", "Variation Id", "Order Line Subtotal Tax"
  • Multiple custom fields with same title are exported as list (for order)
  • Format Shipping/Billing fields as string (Excel only)
  • Fixed compatibility issue with WP Redis cache
  • Fixed bug - "Progressbar" shows error message correctly
  • Fixed bug - "Progressbar" doesn't miss orders if both "Mark exported" and "Export unmarked only" are ON
  • Reduced memory footprint (options are not autoloaded)
Download this release

Release Info

Developer algol.plus
Plugin Icon 128x128 Advanced Order Export For WooCommerce
Version 1.5.6
Comparing to
See all releases

Code changes from version 1.5.5 to 1.5.6

assets/css/export.css CHANGED
@@ -636,4 +636,62 @@ input.date{
636
height: 28px;
637
vertical-align: middle;
638
background: url("../img/calendar.png") 98px 5px no-repeat;
639
}
636
height: 28px;
637
vertical-align: middle;
638
background: url("../img/calendar.png") 98px 5px no-repeat;
639
+ }
640
+
641
+ .woe-row-sort-handle {
642
+ width: 20px;
643
+ height: 20px;
644
+ color: black;
645
+ cursor: move;
646
+ }
647
+
648
+ #reorder_section {
649
+ display: inline-block;
650
+ margin-top: 10px;
651
+ }
652
+
653
+ #reorder_section #apply_reorder, #reorder_section #cancel_reorder {
654
+ display: none;
655
+ }
656
+
657
+ .wp-wrap .column-order {
658
+ width: 2.2em;
659
+ }
660
+
661
+ .wp-wrap .pipe {
662
+ font-size: x-large;
663
+ vertical-align: middle;
664
+ }
665
+
666
+ .section_choice {
667
+ cursor: pointer;
668
+ }
669
+
670
+ .section_choice.active {
671
+ font-weight: bold;
672
+ color: #000;
673
+ }
674
+
675
+ .section:not(.active) {
676
+ display: none;
677
+ }
678
+
679
+ .license_paragraph {
680
+ margin : 15px 0 15px 0;
681
+ }
682
+
683
+ #license_help_text {
684
+ background-color: white;
685
+ border: 1px #b2b2b2 solid;
686
+ border-radius: 5px;
687
+ padding:10px;
688
+ margin: 15px 0 15px 0;
689
+ }
690
+
691
+ #my-shedule-days .wc_oe-select-interval {
692
+ width: 55%;
693
+ }
694
+
695
+ #my-shedule-days .input-mins-custom-interval {
696
+ max-width: 100px;
697
}
assets/js/export.js CHANGED
@@ -130,6 +130,9 @@ function bind_events() {
130
});
131
//end of change
132
133
//PRODUCT ATTRIBUTES BEGIN
134
jQuery( '#attributes' ).change( function() {
135
@@ -855,6 +858,101 @@ function bind_events() {
855
}
856
}
857
858
function add_bind_for_custom_fields( prefix, output_format, $to ) {
859
jQuery( '#button_custom_field_' + prefix + '' ).off();
860
jQuery( '#button_custom_field_' + prefix + '' ).click( function() {
@@ -1030,7 +1128,10 @@ function select2_inits()
1030
} );
1031
jQuery( "#product_custom_fields_check" ).select2(select2WODropdownOpts);
1032
1033
-
1034
1035
jQuery( "#taxonomies" ).select2( {
1036
width: 150
@@ -1250,4 +1351,68 @@ function try_color_date_filter() {
1250
if( jQuery( "#from_date" ).val() || jQuery( "#to_date" ).val() )
1251
color = 'red';
1252
jQuery( "#my-date-filter" ).css('color', color);
1253
- }
130
});
131
//end of change
132
133
+ // for filter by USER custom fields
134
+ bind_events_users();
135
+
136
//PRODUCT ATTRIBUTES BEGIN
137
jQuery( '#attributes' ).change( function() {
138
858
}
859
}
860
861
+ function bind_events_users() {
862
+ // for filter by ORDER custom fields
863
+ jQuery( '#user_custom_fields' ).change( function () {
864
+
865
+ jQuery( '#select_user_custom_fields' ).attr( 'disabled', 'disabled' );
866
+ var data = {
867
+ 'cf_name': jQuery( this ).val(),
868
+ method: "get_user_custom_fields_values",
869
+ action: "order_exporter"
870
+ };
871
+ var val_op = jQuery( '#select_user_custom_fields' ).val();
872
+ jQuery( '#text_user_custom_fields' ).val( '' );
873
+ jQuery.post( ajaxurl, data, function ( response ) {
874
+ jQuery( '#select_user_custom_fields' ).remove();
875
+ jQuery( '#select_user_custom_fields--select2 select' ).select2( 'destroy' );
876
+ jQuery( '#select_user_custom_fields, #select_user_custom_fields--select2' ).remove();
877
+ if ( response ) {
878
+ var options = '<option>' + export_messages.empty + '</option>';
879
+ jQuery.each( response, function ( index, value ) {
880
+ options += '<option>' + value + '</option>';
881
+ } );
882
+ var $select = jQuery( '<div id="select_user_custom_fields--select2" style="margin-top: 0px;margin-right: 6px; vertical-align: top;'
883
+ + 'display: ' + (
884
+ (
885
+ 'LIKE' === val_op || 'NOT SET' === val_op || 'IS SET' === val_op
886
+ ) ? 'none' : 'inline-block'
887
+ ) + ';">'
888
+ + '<select id="select_user_custom_fields">' + options + '</select></div>' );
889
+ $select.insertBefore( jQuery( '#add_user_custom_fields' ) )
890
+ $select.find( 'select' ).select2( {tags: true} );
891
+ }
892
+ else {
893
+ jQuery( '<input type="text" id="select_user_custom_fields" style="margin-right: 8px;">' ).insertBefore(
894
+ jQuery( '#add_user_custom_fields' ) );
895
+ }
896
+ }, 'json' );
897
+ } );
898
+ jQuery( '#add_user_custom_fields' ).click( function () {
899
+
900
+ var val = ! jQuery( "#select_user_custom_fields" ).is( ':disabled' ) ? jQuery(
901
+ "#select_user_custom_fields" ).val() : jQuery( "#text_user_custom_fields" ).val();
902
+ var val2 = jQuery( '#user_custom_fields' ).val();
903
+ var val_op = jQuery( '#user_custom_fields_compare' ).val();
904
+ if ( val != null && val2 != null && val.length && val2.length ) {
905
+ var result = val2 + ' ' + val_op + ' ' + val;
906
+
907
+ var f = true;
908
+ jQuery( '#user_custom_fields_check' ).next().find( 'ul li' ).each( function () {
909
+ if ( jQuery( this ).attr( 'title' ) == val ) {
910
+ f = false;
911
+ }
912
+ } );
913
+
914
+ if ( f ) {
915
+ if ( export_messages.empty === val ) {
916
+ result = val2 + ' ' + val_op + ' empty';
917
+ jQuery(
918
+ '#user_custom_fields_check' ).append( '<option selected="selected" value="' + result + '">' + result + '</option>' );
919
+ } else {
920
+ jQuery(
921
+ '#user_custom_fields_check' ).append( '<option selected="selected" value="' + result + '">' + result + '</option>' );
922
+ }
923
+
924
+ jQuery( '#user_custom_fields_check' ).select2();
925
+
926
+ jQuery( '#user_custom_fields_check option' ).each( function () {
927
+ jQuery( '#user_custom_fields_check option[value=\"' + jQuery( this ).val() + '\"]:not(:last)' ).remove();
928
+ } );
929
+
930
+ jQuery( "input#select_user_custom_fields" ).val( '' );
931
+ }
932
+ }
933
+ return false;
934
+ } );
935
+
936
+ jQuery( '#user_custom_fields_compare').change(function() {
937
+ var val_op = jQuery( '#user_custom_fields_compare' ).val();
938
+ if ( 'LIKE' === val_op ) {
939
+ jQuery( "#select_user_custom_fields" ).css( 'display', 'none' ).attr( 'disabled', 'disabled' );
940
+ jQuery( "#select_user_custom_fields--select2" ).hide();
941
+ jQuery( "#text_user_custom_fields" ).css('display', 'inline' ).attr( 'disabled', false );
942
+ }
943
+ else if ( 'NOT SET' === val_op || 'IS SET' === val_op ) {
944
+ jQuery( "#select_user_custom_fields" ).css( 'display', 'none' ).attr( 'disabled', 'disabled' ) . val(' ');
945
+ jQuery( "#select_user_custom_fields--select2" ).hide();
946
+ jQuery( "#text_user_custom_fields" ).css('display', 'none' ).attr( 'disabled', false ). val(' ');
947
+ }
948
+ else {
949
+ jQuery( "#select_user_custom_fields" ).css( 'display', 'inline-block' ).attr( 'disabled', false );
950
+ jQuery( '#select_user_custom_fields--select2' ).css('display', 'inline' );
951
+ jQuery( "#text_user_custom_fields" ).css( 'display', 'none' ).attr( 'disabled', 'disabled' );
952
+ }
953
+ });
954
+ }
955
+
956
function add_bind_for_custom_fields( prefix, output_format, $to ) {
957
jQuery( '#button_custom_field_' + prefix + '' ).off();
958
jQuery( '#button_custom_field_' + prefix + '' ).click( function() {
1128
} );
1129
jQuery( "#product_custom_fields_check" ).select2(select2WODropdownOpts);
1130
1131
+ jQuery( "#user_custom_fields" ).select2( {
1132
+ width: 150
1133
+ } );
1134
+ jQuery( "#user_custom_fields_check" ).select2();
1135
1136
jQuery( "#taxonomies" ).select2( {
1137
width: 150
1351
if( jQuery( "#from_date" ).val() || jQuery( "#to_date" ).val() )
1352
color = 'red';
1353
jQuery( "#my-date-filter" ).css('color', color);
1354
+ }
1355
+
1356
+ jQuery( document ).ready( function ($) {
1357
+
1358
+ $( "#the-list" ).sortable( { handle: '.woe-row-sort-handle' } );
1359
+
1360
+ $( '.wp-wrap .column-order' ).hide();
1361
+
1362
+ $start_reorder_button = $( '#start_reorder' );
1363
+ $apply_reorder_button = $( '#apply_reorder' );
1364
+ $cancel_reorder_button = $( '#cancel_reorder' );
1365
+ $start_reorder_button.click( function ( e ) {
1366
+ $order_ids = $( "#the-list" ).sortable( "toArray", {attribute: 'data-job_id'} );
1367
+
1368
+ $start_reorder_button.hide();
1369
+ $apply_reorder_button.show();
1370
+ $cancel_reorder_button.show();
1371
+
1372
+ $( '.wp-wrap .check-column' ).hide();
1373
+ $( '.wp-wrap .column-order' ).show();
1374
+ } );
1375
+
1376
+ $apply_reorder_button.click( function ( e ) {
1377
+ $start_reorder_button.show();
1378
+ $apply_reorder_button.hide();
1379
+ $cancel_reorder_button.hide();
1380
+
1381
+ $( '.wp-wrap .check-column' ).show();
1382
+ $( '.wp-wrap .column-order' ).hide();
1383
+
1384
+ jQuery.ajax({
1385
+ url: ajaxurl,
1386
+ data: {
1387
+ 'action': "order_exporter",
1388
+ 'method': 'reorder_jobs',
1389
+ 'new_jobs_order': $( "#the-list" ).sortable( "toArray", {attribute: 'data-job_id'} ),
1390
+ 'tab_name': $tab_name,
1391
+ },
1392
+ error: function ( response ) {},
1393
+ dataType: 'json',
1394
+ type: 'POST',
1395
+ success: function() {
1396
+
1397
+ }
1398
+ });
1399
+
1400
+ } );
1401
+
1402
+ $cancel_reorder_button.click( function ( e ) {
1403
+ $start_reorder_button.show();
1404
+ $apply_reorder_button.hide();
1405
+ $cancel_reorder_button.hide();
1406
+
1407
+ $( '.wp-wrap .check-column' ).show();
1408
+ $( '.wp-wrap .column-order' ).hide();
1409
+
1410
+ $( $order_ids ).each( function ( $key, $job_id ) {
1411
+ $element = $( '[data-job_id="' + $job_id + '"' ).detach();
1412
+ $( "#the-list" ).append( $element );
1413
+ } );
1414
+ } );
1415
+
1416
+
1417
+
1418
+ } );
assets/js/settings-form.js CHANGED
@@ -503,6 +503,7 @@ jQuery( document ).ready( function( $ ) {
503
jQuery( '#itemmeta' ).change();
504
jQuery( '#custom_fields' ).change();
505
jQuery( '#product_custom_fields' ).change();
506
jQuery( '#shipping_locations' ).change();
507
jQuery( '#billing_locations' ).change();
508
jQuery( '#item_names' ).change();
@@ -601,7 +602,7 @@ jQuery( document ).ready( function( $ ) {
601
} );
602
603
$( 'input[type="checkbox"][name="settings[custom_php]"]' ).change( function() {
604
- $( 'textarea[name="settings[custom_php_code]"]' ).toggle( $( this ).is( ':checked' ) );
605
} );
606
607
$( '#order_fields input[type=checkbox]' ).change( function() {
@@ -727,7 +728,11 @@ jQuery( document ).ready( function( $ ) {
727
progress( 100, jQuery( '#progressBar' ) );
728
},
729
success: function( response ) {
730
- get_all( response.start, ( response.start / window.count ) * 100, method )
731
}
732
} );
733
}
503
jQuery( '#itemmeta' ).change();
504
jQuery( '#custom_fields' ).change();
505
jQuery( '#product_custom_fields' ).change();
506
+ jQuery( '#user_custom_fields' ).change();
507
jQuery( '#shipping_locations' ).change();
508
jQuery( '#billing_locations' ).change();
509
jQuery( '#item_names' ).change();
602
} );
603
604
$( 'input[type="checkbox"][name="settings[custom_php]"]' ).change( function() {
605
+ $( 'div#custom_php_code_textarea' ).toggle( $( this ).is( ':checked' ) );
606
} );
607
608
$( '#order_fields input[type=checkbox]' ).change( function() {
728
progress( 100, jQuery( '#progressBar' ) );
729
},
730
success: function( response ) {
731
+ if ( typeof response.error !== 'undefined') {
732
+ alert( response.error );
733
+ } else {
734
+ get_all( response.start, ( response.start / window.count ) * 100, method )
735
+ }
736
}
737
} );
738
}
classes/admin/class-wc-order-export-ajax.php CHANGED
@@ -10,82 +10,86 @@ class WC_Order_Export_Ajax {
10
11
public function save_settings() {
12
$settings = WC_Order_Export_Manage::make_new_settings( $_POST );
13
- $id = WC_Order_Export_Manage::save_export_settings( $_POST['mode'], $_POST['id'], $settings );
14
echo json_encode( array( 'id' => $id ) );
15
}
16
-
17
public function validate_url_key() {
18
$main_settings = WC_Order_Export_Admin::load_main_settings();
19
- if( !isset( $_REQUEST['key'] ) OR $_REQUEST['key'] != $main_settings['cron_key'] ) {
20
- _e( 'Wrong key for cron url!', 'woo-order-export-lite' ) ;
21
die();
22
}
23
- }
24
25
//called from UI
26
public function run_one_job() {
27
- if( !empty( $_REQUEST[ 'schedule' ] ) )
28
- $settings = WC_Order_Export_Manage::get( WC_Order_Export_Manage::EXPORT_SCHEDULE, $_REQUEST[ 'schedule' ] );
29
- elseif($_REQUEST[ 'profile' ] == 'now')
30
$settings = WC_Order_Export_Manage::get( WC_Order_Export_Manage::EXPORT_NOW );
31
- else
32
- $settings = WC_Order_Export_Manage::get( WC_Order_Export_Manage::EXPORT_PROFILE, $_REQUEST[ 'profile' ] );
33
$filename = WC_Order_Export_Engine::build_file_full( $settings );
34
WC_Order_Export_Manage::set_correct_file_ext( $settings );
35
- $this->send_headers( $settings[ 'format' ], WC_Order_Export_Engine::make_filename( $settings['export_filename'] ) );
36
- $this->send_contents_delete_file($filename);
37
}
38
39
public function run_one_scheduled_job() {
40
WC_Order_Export_Cron::run_one_scheduled_job();
41
}
42
-
43
public function run_cron_jobs() {
44
WC_Order_Export_Cron::wc_export_cron_global_f();
45
}
46
-
47
- public function save_tools() {
48
- $data = json_decode($_POST['tools-import'], true);
49
- if ( $data )
50
WC_Order_Export_Manage::import_settings( $data );
51
}
52
53
- public function save_settings_tab() {
54
WC_Order_Export_Admin::save_main_settings();
55
}
56
57
public function get_products() {
58
- echo json_encode( WC_Order_Export_Data_Extractor_UI::get_products_like($_REQUEST['q']) );
59
}
60
61
public function get_users() {
62
- echo json_encode( WC_Order_Export_Data_Extractor_UI::get_users_like($_REQUEST['q']) );
63
}
64
65
public function get_coupons() {
66
- echo json_encode( WC_Order_Export_Data_Extractor_UI::get_coupons_like($_REQUEST['q']) );
67
}
68
69
public function get_used_custom_order_meta() {
70
$settings = WC_Order_Export_Manage::make_new_settings( $_POST );
71
- $sql = WC_Order_Export_Data_Extractor::sql_get_order_ids( $settings );
72
- $ret = WC_Order_Export_Data_Extractor_UI::get_all_order_custom_meta_fields( $sql );
73
echo json_encode( $ret );
74
}
75
76
public function get_used_custom_products_meta() {
77
$settings = WC_Order_Export_Manage::make_new_settings( $_POST );
78
- $sql = WC_Order_Export_Data_Extractor::sql_get_order_ids( $settings );
79
- $ret = WC_Order_Export_Data_Extractor_UI::get_product_custom_meta_fields_for_orders( $sql );
80
- sort($ret);
81
echo json_encode( $ret );
82
}
83
84
public function get_used_custom_order_items_meta() {
85
$settings = WC_Order_Export_Manage::make_new_settings( $_POST );
86
- $sql = WC_Order_Export_Data_Extractor::sql_get_order_ids( $settings );
87
- $ret = WC_Order_Export_Data_Extractor_UI::get_order_item_custom_meta_fields_for_orders( $sql );
88
- sort($ret);
89
echo json_encode( $ret );
90
}
91
@@ -95,7 +99,7 @@ class WC_Order_Export_Ajax {
95
}
96
97
public function get_categories() {
98
- echo json_encode( WC_Order_Export_Data_Extractor_UI::get_categories_like($_REQUEST['q']) );
99
}
100
101
public function get_vendors() {
@@ -105,8 +109,8 @@ class WC_Order_Export_Ajax {
105
public function test_destination() {
106
$settings = WC_Order_Export_Manage::make_new_settings( $_POST );
107
108
- unset( $settings[ 'destination' ][ 'type' ] );
109
- $settings[ 'destination' ][ 'type' ][ ] = $_POST[ 'destination' ];
110
111
// use unsaved settings
112
@@ -115,7 +119,7 @@ class WC_Order_Export_Ajax {
115
$main_settings = WC_Order_Export_Admin::load_main_settings();
116
117
$result = WC_Order_Export_Engine::build_files_and_export( $settings, '', $main_settings['limit_button_test'] );
118
- echo str_replace("<br>", "\r\n", $result);
119
}
120
121
public function preview() {
@@ -137,84 +141,94 @@ class WC_Order_Export_Ajax {
137
}
138
139
public function get_order_custom_fields_values() {
140
- echo json_encode( WC_Order_Export_Data_Extractor_UI::get_order_custom_fields_values($_POST['cf_name']) );
141
}
142
143
public function get_product_custom_fields_values() {
144
- echo json_encode( WC_Order_Export_Data_Extractor_UI::get_product_custom_fields_values($_POST['cf_name']) );
145
}
146
147
public function get_products_taxonomies_values() {
148
- echo json_encode( WC_Order_Export_Data_Extractor_UI::get_products_taxonomies_values($_POST['tax']) );
149
}
150
151
public function get_products_attributes_values() {
152
- echo json_encode( WC_Order_Export_Data_Extractor_UI::get_products_attributes_values($_POST['attr']) );
153
}
154
155
- public function get_products_itemmeta_values() {
156
- echo json_encode( WC_Order_Export_Data_Extractor_UI::get_products_itemmeta_values($_POST['item']) );
157
}
158
159
public function get_order_shipping_values() {
160
- echo json_encode( WC_Order_Export_Data_Extractor_UI::get_order_meta_values('_shipping_', $_POST['item']) );
161
}
162
163
- public function get_order_billing_values() {
164
- echo json_encode( WC_Order_Export_Data_Extractor_UI::get_order_meta_values('_billing_', $_POST['item']) );
165
- }
166
-
167
public function get_order_item_names() {
168
- echo json_encode( WC_Order_Export_Data_Extractor_UI::get_order_item_names($_POST['item_type']) );
169
}
170
public function get_order_item_meta_key_values() {
171
- echo json_encode( WC_Order_Export_Data_Extractor_UI::get_order_item_meta_key_values($_POST['meta_key']) );
172
}
173
-
174
-
175
176
- public function send_headers( $format, $download_name = '') {
177
WC_Order_Export_Engine::kill_buffers();
178
switch ( $format ) {
179
case 'XLSX':
180
- if( empty( $download_name ) )
181
- $download_name = "orders.xlsx";
182
header( 'Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' );
183
break;
184
case 'XLS':
185
- if( empty( $download_name ) )
186
- $download_name = "orders.xls";
187
header( 'Content-type: application/vnd.ms-excel; charset=utf-8' );
188
break;
189
case 'CSV':
190
- if( empty( $download_name ) )
191
- $download_name = "orders.csv";
192
header( 'Content-type: text/csv' );
193
break;
194
case 'TSV':
195
- if( empty( $download_name ) )
196
$download_name = "orders.tsv";
197
header( 'Content-type: text/csv' );
198
break;
199
case 'JSON':
200
- if( empty( $download_name ) )
201
- $download_name = "orders.json";
202
header( 'Content-type: application/json' );
203
break;
204
case 'XML':
205
- if( empty( $download_name ) )
206
- $download_name = "orders.xml";
207
header( 'Content-type: text/xml' );
208
break;
209
}
210
- header( 'Content-Disposition: attachment; filename="' . $download_name .'"' );
211
}
212
213
public function start_prevent_object_cache() {
214
global $_wp_using_ext_object_cache;
215
216
- $this->_wp_using_ext_object_cache_previous = $_wp_using_ext_object_cache;
217
- $_wp_using_ext_object_cache = false;
218
}
219
220
public function stop_prevent_object_cache() {
@@ -228,16 +242,16 @@ class WC_Order_Export_Ajax {
228
$settings = WC_Order_Export_Manage::make_new_settings( $_POST );
229
230
$filename = WC_Order_Export_Engine::tempnam( sys_get_temp_dir(), "orders" );
231
- if( !$filename ) {
232
- die( __( 'Can\'t create temporary file', 'woo-order-export-lite' ) ) ;
233
}
234
-
235
//no free space or other file system errors?
236
- try {
237
file_put_contents( $filename, '' );
238
do_action( 'woe_start_export_job', $_POST['id'], $settings );
239
$total = WC_Order_Export_Engine::build_file( $settings, 'start_estimate', 'file', 0, 0, $filename );
240
- } catch (Exception $e) {
241
die( $e->getMessage() );
242
}
243
// file created
@@ -256,6 +270,7 @@ class WC_Order_Export_Ajax {
256
}
257
set_transient( $this->tempfile_prefix . $_REQUEST['file_id'], $filename, 60 );
258
$this->stop_prevent_object_cache();
259
return $filename;
260
}
261
@@ -264,7 +279,7 @@ class WC_Order_Export_Ajax {
264
$filename = get_transient( $this->tempfile_prefix . $_REQUEST['file_id'] );
265
if ( $filename !== false ) {
266
delete_transient( $this->tempfile_prefix . $_REQUEST['file_id'] );
267
- unlink($filename);
268
}
269
$this->stop_prevent_object_cache();
270
}
@@ -276,10 +291,11 @@ class WC_Order_Export_Ajax {
276
}
277
278
public function export_part() {
279
- $settings = WC_Order_Export_Manage::make_new_settings( $_POST );
280
$main_settings = WC_Order_Export_Admin::load_main_settings();
281
282
- WC_Order_Export_Engine::build_file( $settings, 'partial', 'file', intval( $_POST['start'] ), $main_settings['ajax_orders_per_step'],
283
$this->get_temp_file_name() );
284
echo json_encode( array( 'start' => $_POST['start'] + $main_settings['ajax_orders_per_step'] ) );
285
}
@@ -289,7 +305,9 @@ class WC_Order_Export_Ajax {
289
WC_Order_Export_Engine::build_file( $settings, 'finish', 'file', 0, 0, $this->get_temp_file_name() );
290
291
$filename = WC_Order_Export_Engine::make_filename( $settings['export_filename'] );
292
set_transient( $this->tempfile_prefix . 'download_filename', $filename, 60 );
293
echo json_encode( array( 'done' => true ) );
294
}
295
@@ -298,9 +316,9 @@ class WC_Order_Export_Ajax {
298
$format = basename( $_GET['format'] );
299
$filename = $this->get_temp_file_name();
300
delete_transient( $this->tempfile_prefix . $_GET['file_id'] );
301
-
302
- $download_name = get_transient( $this->tempfile_prefix . 'download_filename');
303
- $this->send_headers( $format ,$download_name);
304
$this->send_contents_delete_file( $filename );
305
$this->stop_prevent_object_cache();
306
}
@@ -311,8 +329,9 @@ class WC_Order_Export_Ajax {
311
do_action( 'woe_start_export_job', $_POST['id'], $settings );
312
313
// custom export worked for plain
314
- if( apply_filters( 'woe_plain_export_custom_func', false, $_POST['id'], $settings ) )
315
- return ;
316
317
$file = WC_Order_Export_Engine::build_file_full( $settings );
318
@@ -324,11 +343,13 @@ class WC_Order_Export_Ajax {
324
325
WC_Order_Export_Manage::set_correct_file_ext( $settings );
326
327
- $_GET['format'] = $settings[ 'format' ];
328
$_GET['file_id'] = $_REQUEST['file_id'] = $file_id;
329
330
$filename = WC_Order_Export_Engine::make_filename( $settings['export_filename'] );
331
set_transient( $this->tempfile_prefix . 'download_filename', $filename, 60 );
332
333
$this->export_download();
334
} else {
@@ -337,21 +358,51 @@ class WC_Order_Export_Ajax {
337
}
338
339
function export_download_bulk_file() {
340
- if($_REQUEST[ 'export_bulk_profile' ] == 'now')
341
- $settings = WC_Order_Export_Manage::get( WC_Order_Export_Manage::EXPORT_NOW );
342
- else
343
- $settings = WC_Order_Export_Manage::get( WC_Order_Export_Manage::EXPORT_PROFILE, $_REQUEST[ 'export_bulk_profile' ] );
344
- $filename = WC_Order_Export_Engine::build_file_full( $settings, '', 0, explode(",",$_REQUEST[ 'ids' ]) );
345
WC_Order_Export_Manage::set_correct_file_ext( $settings );
346
- $this->send_headers( $settings[ 'format' ], WC_Order_Export_Engine::make_filename( $settings['export_filename'] ) );
347
$this->send_contents_delete_file( $filename );
348
}
349
-
350
private function send_contents_delete_file( $filename ) {
351
- if( !empty($filename) ) {
352
readfile( $filename );
353
unlink( $filename );
354
- }
355
}
356
}
357
?>
10
11
public function save_settings() {
12
$settings = WC_Order_Export_Manage::make_new_settings( $_POST );
13
+ $id = WC_Order_Export_Manage::save_export_settings( $_POST['mode'], $_POST['id'], $settings );
14
echo json_encode( array( 'id' => $id ) );
15
}
16
+
17
public function validate_url_key() {
18
$main_settings = WC_Order_Export_Admin::load_main_settings();
19
+ if ( ! isset( $_REQUEST['key'] ) OR $_REQUEST['key'] != $main_settings['cron_key'] ) {
20
+ _e( 'Wrong key for cron url!', 'woo-order-export-lite' );
21
die();
22
}
23
+ }
24
25
//called from UI
26
public function run_one_job() {
27
+ if ( ! empty( $_REQUEST['schedule'] ) ) {
28
+ $settings = WC_Order_Export_Manage::get( WC_Order_Export_Manage::EXPORT_SCHEDULE, $_REQUEST['schedule'] );
29
+ } elseif ( $_REQUEST['profile'] == 'now' ) {
30
$settings = WC_Order_Export_Manage::get( WC_Order_Export_Manage::EXPORT_NOW );
31
+ } else {
32
+ $settings = WC_Order_Export_Manage::get( WC_Order_Export_Manage::EXPORT_PROFILE, $_REQUEST['profile'] );
33
+ }
34
$filename = WC_Order_Export_Engine::build_file_full( $settings );
35
WC_Order_Export_Manage::set_correct_file_ext( $settings );
36
+ $this->send_headers( $settings['format'],
37
+ WC_Order_Export_Engine::make_filename( $settings['export_filename'] ) );
38
+ $this->send_contents_delete_file( $filename );
39
}
40
41
public function run_one_scheduled_job() {
42
WC_Order_Export_Cron::run_one_scheduled_job();
43
}
44
+
45
public function run_cron_jobs() {
46
WC_Order_Export_Cron::wc_export_cron_global_f();
47
}
48
+
49
+ public function save_tools() {
50
+ $data = json_decode( $_POST['tools-import'], true );
51
+ if ( $data ) {
52
WC_Order_Export_Manage::import_settings( $data );
53
+ }
54
}
55
56
+ public function save_settings_tab() {
57
WC_Order_Export_Admin::save_main_settings();
58
}
59
60
public function get_products() {
61
+ $main_settings = WC_Order_Export_Admin::load_main_settings();
62
+ echo json_encode( WC_Order_Export_Data_Extractor_UI::get_products_like( $_REQUEST['q'], $main_settings['autocomplete_products_max'] ) );
63
}
64
65
public function get_users() {
66
+ echo json_encode( WC_Order_Export_Data_Extractor_UI::get_users_like( $_REQUEST['q'] ) );
67
}
68
69
public function get_coupons() {
70
+ echo json_encode( WC_Order_Export_Data_Extractor_UI::get_coupons_like( $_REQUEST['q'] ) );
71
}
72
73
public function get_used_custom_order_meta() {
74
$settings = WC_Order_Export_Manage::make_new_settings( $_POST );
75
+ $sql = WC_Order_Export_Data_Extractor::sql_get_order_ids( $settings );
76
+ $ret = WC_Order_Export_Data_Extractor_UI::get_all_order_custom_meta_fields( $sql );
77
echo json_encode( $ret );
78
}
79
80
public function get_used_custom_products_meta() {
81
$settings = WC_Order_Export_Manage::make_new_settings( $_POST );
82
+ $sql = WC_Order_Export_Data_Extractor::sql_get_order_ids( $settings );
83
+ $ret = WC_Order_Export_Data_Extractor_UI::get_product_custom_meta_fields_for_orders( $sql );
84
+ sort( $ret );
85
echo json_encode( $ret );
86
}
87
88
public function get_used_custom_order_items_meta() {
89
$settings = WC_Order_Export_Manage::make_new_settings( $_POST );
90
+ $sql = WC_Order_Export_Data_Extractor::sql_get_order_ids( $settings );
91
+ $ret = WC_Order_Export_Data_Extractor_UI::get_order_item_custom_meta_fields_for_orders( $sql );
92
+ sort( $ret );
93
echo json_encode( $ret );
94
}
95
99
}
100
101
public function get_categories() {
102
+ echo json_encode( WC_Order_Export_Data_Extractor_UI::get_categories_like( $_REQUEST['q'] ) );
103
}
104
105
public function get_vendors() {
109
public function test_destination() {
110
$settings = WC_Order_Export_Manage::make_new_settings( $_POST );
111
112
+ unset( $settings['destination']['type'] );
113
+ $settings['destination']['type'][] = $_POST['destination'];
114
115
// use unsaved settings
116
119
$main_settings = WC_Order_Export_Admin::load_main_settings();
120
121
$result = WC_Order_Export_Engine::build_files_and_export( $settings, '', $main_settings['limit_button_test'] );
122
+ echo str_replace( "<br>", "\r\n", $result );
123
}
124
125
public function preview() {
141
}
142
143
public function get_order_custom_fields_values() {
144
+ echo json_encode( WC_Order_Export_Data_Extractor_UI::get_order_custom_fields_values( $_POST['cf_name'] ) );
145
+ }
146
+
147
+ public function get_user_custom_fields_values() {
148
+ echo json_encode( WC_Order_Export_Data_Extractor_UI::get_user_custom_fields_values( $_POST['cf_name'] ) );
149
}
150
151
public function get_product_custom_fields_values() {
152
+ echo json_encode( WC_Order_Export_Data_Extractor_UI::get_product_custom_fields_values( $_POST['cf_name'] ) );
153
}
154
155
public function get_products_taxonomies_values() {
156
+ echo json_encode( WC_Order_Export_Data_Extractor_UI::get_products_taxonomies_values( $_POST['tax'] ) );
157
}
158
159
public function get_products_attributes_values() {
160
+ echo json_encode( WC_Order_Export_Data_Extractor_UI::get_products_attributes_values( $_POST['attr'] ) );
161
}
162
163
+ public function get_products_itemmeta_values() {
164
+ echo json_encode( WC_Order_Export_Data_Extractor_UI::get_products_itemmeta_values( $_POST['item'] ) );
165
}
166
167
public function get_order_shipping_values() {
168
+ echo json_encode( WC_Order_Export_Data_Extractor_UI::get_order_meta_values( '_shipping_', $_POST['item'] ) );
169
+ }
170
+
171
+ public function get_order_billing_values() {
172
+ echo json_encode( WC_Order_Export_Data_Extractor_UI::get_order_meta_values( '_billing_', $_POST['item'] ) );
173
}
174
175
public function get_order_item_names() {
176
+ echo json_encode( WC_Order_Export_Data_Extractor_UI::get_order_item_names( $_POST['item_type'] ) );
177
}
178
+
179
public function get_order_item_meta_key_values() {
180
+ echo json_encode( WC_Order_Export_Data_Extractor_UI::get_order_item_meta_key_values( $_POST['meta_key'] ) );
181
}
182
183
+
184
+ public function send_headers( $format, $download_name = '' ) {
185
WC_Order_Export_Engine::kill_buffers();
186
switch ( $format ) {
187
case 'XLSX':
188
+ if ( empty( $download_name ) ) {
189
+ $download_name = "orders.xlsx";
190
+ }
191
header( 'Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' );
192
break;
193
case 'XLS':
194
+ if ( empty( $download_name ) ) {
195
+ $download_name = "orders.xls";
196
+ }
197
header( 'Content-type: application/vnd.ms-excel; charset=utf-8' );
198
break;
199
case 'CSV':
200
+ if ( empty( $download_name ) ) {
201
+ $download_name = "orders.csv";
202
+ }
203
header( 'Content-type: text/csv' );
204
break;
205
case 'TSV':
206
+ if ( empty( $download_name ) ) {
207
$download_name = "orders.tsv";
208
+ }
209
header( 'Content-type: text/csv' );
210
break;
211
case 'JSON':
212
+ if ( empty( $download_name ) ) {
213
+ $download_name = "orders.json";
214
+ }
215
header( 'Content-type: application/json' );
216
break;
217
case 'XML':
218
+ if ( empty( $download_name ) ) {
219
+ $download_name = "orders.xml";
220
+ }
221
header( 'Content-type: text/xml' );
222
break;
223
}
224
+ header( 'Content-Disposition: attachment; filename="' . $download_name . '"' );
225
}
226
227
public function start_prevent_object_cache() {
228
global $_wp_using_ext_object_cache;
229
230
+ $this->_wp_using_ext_object_cache_previous = $_wp_using_ext_object_cache;
231
+ $_wp_using_ext_object_cache = false;
232
}
233
234
public function stop_prevent_object_cache() {
242
$settings = WC_Order_Export_Manage::make_new_settings( $_POST );
243
244
$filename = WC_Order_Export_Engine::tempnam( sys_get_temp_dir(), "orders" );
245
+ if ( ! $filename ) {
246
+ die( __( 'Can\'t create temporary file', 'woo-order-export-lite' ) );
247
}
248
+
249
//no free space or other file system errors?
250
+ try {
251
file_put_contents( $filename, '' );
252
do_action( 'woe_start_export_job', $_POST['id'], $settings );
253
$total = WC_Order_Export_Engine::build_file( $settings, 'start_estimate', 'file', 0, 0, $filename );
254
+ } catch ( Exception $e ) {
255
die( $e->getMessage() );
256
}
257
// file created
270
}
271
set_transient( $this->tempfile_prefix . $_REQUEST['file_id'], $filename, 60 );
272
$this->stop_prevent_object_cache();
273
+
274
return $filename;
275
}
276
279
$filename = get_transient( $this->tempfile_prefix . $_REQUEST['file_id'] );
280
if ( $filename !== false ) {
281
delete_transient( $this->tempfile_prefix . $_REQUEST['file_id'] );
282
+ unlink( $filename );
283
}
284
$this->stop_prevent_object_cache();
285
}
291
}
292
293
public function export_part() {
294
+ $settings = WC_Order_Export_Manage::make_new_settings( $_POST );
295
$main_settings = WC_Order_Export_Admin::load_main_settings();
296
297
+ WC_Order_Export_Engine::build_file( $settings, 'partial', 'file', intval( $_POST['start'] ),
298
+ $main_settings['ajax_orders_per_step'],
299
$this->get_temp_file_name() );
300
echo json_encode( array( 'start' => $_POST['start'] + $main_settings['ajax_orders_per_step'] ) );
301
}
305
WC_Order_Export_Engine::build_file( $settings, 'finish', 'file', 0, 0, $this->get_temp_file_name() );
306
307
$filename = WC_Order_Export_Engine::make_filename( $settings['export_filename'] );
308
+ $this->start_prevent_object_cache();
309
set_transient( $this->tempfile_prefix . 'download_filename', $filename, 60 );
310
+ $this->stop_prevent_object_cache();
311
echo json_encode( array( 'done' => true ) );
312
}
313
316
$format = basename( $_GET['format'] );
317
$filename = $this->get_temp_file_name();
318
delete_transient( $this->tempfile_prefix . $_GET['file_id'] );
319
+
320
+ $download_name = get_transient( $this->tempfile_prefix . 'download_filename' );
321
+ $this->send_headers( $format, $download_name );
322
$this->send_contents_delete_file( $filename );
323
$this->stop_prevent_object_cache();
324
}
329
do_action( 'woe_start_export_job', $_POST['id'], $settings );
330
331
// custom export worked for plain
332
+ if ( apply_filters( 'woe_plain_export_custom_func', false, $_POST['id'], $settings ) ) {
333
+ return;
334
+ }
335
336
$file = WC_Order_Export_Engine::build_file_full( $settings );
337
343
344
WC_Order_Export_Manage::set_correct_file_ext( $settings );
345
346
+ $_GET['format'] = $settings['format'];
347
$_GET['file_id'] = $_REQUEST['file_id'] = $file_id;
348
349
$filename = WC_Order_Export_Engine::make_filename( $settings['export_filename'] );
350
+ $this->start_prevent_object_cache();
351
set_transient( $this->tempfile_prefix . 'download_filename', $filename, 60 );
352
+ $this->stop_prevent_object_cache();
353
354
$this->export_download();
355
} else {
358
}
359
360
function export_download_bulk_file() {
361
+ if ( $_REQUEST['export_bulk_profile'] == 'now' ) {
362
+ $settings = WC_Order_Export_Manage::get( WC_Order_Export_Manage::EXPORT_NOW );
363
+ } else {
364
+ $settings = WC_Order_Export_Manage::get( WC_Order_Export_Manage::EXPORT_PROFILE,
365
+ $_REQUEST['export_bulk_profile'] );
366
+ }
367
+ $filename = WC_Order_Export_Engine::build_file_full( $settings, '', 0, explode( ",", $_REQUEST['ids'] ) );
368
WC_Order_Export_Manage::set_correct_file_ext( $settings );
369
+ $this->send_headers( $settings['format'],
370
+ WC_Order_Export_Engine::make_filename( $settings['export_filename'] ) );
371
$this->send_contents_delete_file( $filename );
372
}
373
+
374
private function send_contents_delete_file( $filename ) {
375
+ if ( ! empty( $filename ) ) {
376
readfile( $filename );
377
unlink( $filename );
378
+ }
379
+ }
380
+
381
+ public function reorder_jobs() {
382
+ if ( ! empty( $_REQUEST['new_jobs_order'] ) AND ! empty( $_REQUEST['tab_name'] ) ) {
383
+
384
+ if ( $_REQUEST['tab_name'] == 'schedule' ) {
385
+ $mode = WC_Order_Export_Manage::EXPORT_SCHEDULE;
386
+ } elseif ( $_REQUEST['tab_name'] == 'profile' ) {
387
+ $mode = WC_Order_Export_Manage::EXPORT_PROFILE;
388
+ } elseif ( $_REQUEST['tab_name'] == 'order_action' ) {
389
+ $mode = WC_Order_Export_Manage::EXPORT_ORDER_ACTION;
390
+ } else {
391
+ echo json_encode( array( 'result' => false ) );
392
+ die();
393
+ }
394
+
395
+ //skip zero ids
396
+ foreach ( array_filter( $_REQUEST['new_jobs_order'] ) as $index => $job_id ) {
397
+ $job = WC_Order_Export_Manage::get( $mode, $job_id );
398
+ $job['priority'] = $index + 1;
399
+ WC_Order_Export_Manage::save_export_settings( $mode, $job_id, $job );
400
+ }
401
+ echo json_encode( array( 'result' => true ) );
402
+ } else {
403
+ echo json_encode( array( 'result' => false ) );
404
+ }
405
}
406
}
407
+
408
?>
classes/admin/class-wc-order-export-manage.php CHANGED
@@ -13,18 +13,18 @@ class WC_Order_Export_Manage {
13
const EXPORT_PROFILE = 'profiles';
14
const EXPORT_SCHEDULE = 'cron';
15
const EXPORT_ORDER_ACTION = 'order-action';
16
-
17
public static $edit_existing_job = false;
18
-
19
static function get_days() {
20
return array(
21
- 'Sun'=>__( 'Sun', 'woo-order-export-lite' ),
22
- 'Mon'=>__( 'Mon', 'woo-order-export-lite' ),
23
- 'Tue'=>__( 'Tue', 'woo-order-export-lite' ),
24
- 'Wed'=>__( 'Wed', 'woo-order-export-lite' ),
25
- 'Thu'=>__( 'Thu', 'woo-order-export-lite' ),
26
- 'Fri'=>__( 'Fri', 'woo-order-export-lite' ),
27
- 'Sat'=>__( 'Sat', 'woo-order-export-lite' ),
28
);
29
}
30
@@ -39,37 +39,42 @@ class WC_Order_Export_Manage {
39
} elseif ( $mode == self::EXPORT_ORDER_ACTION ) {
40
$name = self::settings_name_actions;
41
}
42
return $name;
43
}
44
-
45
static function remove_settings() {
46
$options = array(
47
self::settings_name_now,
48
self::settings_name_cron,
49
self::settings_name_profiles,
50
self::settings_name_actions,
51
- );
52
-
53
- foreach($options as $option)
54
delete_option( $option );
55
}
56
57
// arrays
58
static function get_export_settings_collection( $mode ) {
59
$name = self::get_settings_name_for_mode( $mode );
60
return get_option( $name, array() );
61
}
62
static function save_export_settings_collection( $mode, $jobs ) {
63
$name = self::get_settings_name_for_mode( $mode );
64
- return update_option( $name, $jobs );
65
}
66
67
static function make_new_settings( $in ) {
68
$new_settings = $in['settings'];
69
-
70
// use old PHP code if no permissions, just to stop trcky persons ;)
71
- if( !WC_Order_Export_Admin::user_can_add_custom_php() ) {
72
- unset($new_settings['custom_php_code']);
73
}
74
75
// UI don't pass empty multiselects
@@ -86,11 +91,12 @@ class WC_Order_Export_Manage {
86
'shipping_methods',
87
'user_roles',
88
'user_names',
89
'coupons',
90
- 'billing_locations',
91
'payment_methods',
92
'product_attributes',
93
- 'product_itemmeta',
94
'product_taxonomies',
95
'item_names',
96
'item_metadata',
@@ -101,8 +107,8 @@ class WC_Order_Export_Manage {
101
}
102
}
103
104
- $settings = self::get( $in['mode'], $in['id'] );
105
- $settings['id'] = $in['id'];
106
// setup new values for same keys
107
foreach ( $new_settings as $key => $val ) {
108
$settings[ $key ] = $val;
@@ -111,7 +117,7 @@ class WC_Order_Export_Manage {
111
$sections = array(
112
'orders' => 'order_fields',
113
'products' => 'order_product_fields',
114
- 'coupons' => 'order_coupon_fields'
115
);
116
foreach ( $sections as $section => $fieldset ) {
117
$new_order_fields = array();
@@ -122,7 +128,7 @@ class WC_Order_Export_Manage {
122
$opts = array(
123
"checked" => $in_sec['exported'][ $field ],
124
"colname" => $colname,
125
- "label" => $in_sec['label'][ $field ]
126
);
127
// for products & coupons
128
if ( isset( $in_sec['repeat'][ $field ] ) ) {
@@ -152,24 +158,27 @@ class WC_Order_Export_Manage {
152
static function get( $mode, $id = false ) {
153
$all_jobs = self::get_export_settings_collection( $mode );
154
155
- if ( $mode == self::EXPORT_NOW) { // one job
156
return self::apply_defaults( $mode, $all_jobs );
157
} elseif ( $id === false ) {
158
- if ( empty( $all_jobs ) OR !is_array($all_jobs) )
159
return array();
160
- return array_map( function( $item ) use( $mode ) {
161
return WC_Order_Export_Manage::apply_defaults( $mode, $item );
162
}, $all_jobs );
163
}
164
165
$settings = isset( $all_jobs[ $id ] ) ? $all_jobs[ $id ] : array();
166
return self::apply_defaults( $mode, $settings );
167
}
168
169
static function apply_defaults( $mode, $settings ) {
170
-
171
- $settings = apply_filters( "woe_before_apply_default_settings", $settings , $mode);
172
-
173
$defaults = array(
174
'mode' => $mode,
175
'title' => '',
@@ -187,7 +196,8 @@ class WC_Order_Export_Manage {
187
'item_metadata' => array(),
188
'user_roles' => array(),
189
'user_names' => array(),
190
- 'billing_locations' => array(),
191
'payment_methods' => array(),
192
'any_coupon_used' => 0,
193
'coupons' => array(),
@@ -198,14 +208,14 @@ class WC_Order_Export_Manage {
198
'product_taxonomies' => array(),
199
'product_custom_fields' => array(),
200
'product_attributes' => array(),
201
- 'product_itemmeta' => array(),
202
'format' => 'XLS',
203
- 'format_xls_use_xls_format' => 0,
204
- 'format_xls_sheet_name' => __( 'Orders', 'woo-order-export-lite' ),
205
'format_xls_display_column_names' => 1,
206
- 'format_xls_auto_width' => 1,
207
'format_xls_populate_other_columns_product_rows' => 1,
208
- 'format_xls_direction_rtl' => 0,
209
'format_csv_enclosure' => '"',
210
'format_csv_delimiter' => ',',
211
'format_csv_linebreak' => '\r\n',
@@ -229,10 +239,10 @@ class WC_Order_Export_Manage {
229
'format_xml_self_closing_tags' => 1,
230
'all_products_from_order' => 1,
231
'skip_refunded_items' => 1,
232
- 'skip_suborders' => 0,
233
- 'export_refunds' => 0,
234
- 'date_format' => 'Y-m-d',
235
- 'time_format' => 'H:i',
236
'sort_direction' => 'DESC',
237
'sort' => 'order_id',
238
'format_number_fields' => 0,
@@ -241,14 +251,14 @@ class WC_Order_Export_Manage {
241
'strip_tags_product_fields' => 0,
242
'cleanup_phone' => 0,
243
'enable_debug' => 0,
244
- 'format_json_start_tag' => '[',
245
- 'format_json_end_tag' => ']',
246
'custom_php' => 0,
247
'custom_php_code' => '',
248
'mark_exported_orders' => 0,
249
'export_unmarked_orders' => 0,
250
-
251
- 'summary_report_by_products' => 0,
252
);
253
254
if ( ! isset( $settings['format'] ) ) {
@@ -262,54 +272,63 @@ class WC_Order_Export_Manage {
262
if ( ! isset( $settings['order_fields'] ) ) {
263
$settings['order_fields'] = array();
264
}
265
- self::merge_settings_and_default( $settings['order_fields'], WC_Order_Export_Data_Extractor_UI::get_order_fields( $settings['format'] ) );
266
267
if ( ! isset( $settings['order_product_fields'] ) ) {
268
$settings['order_product_fields'] = array();
269
}
270
- self::merge_settings_and_default( $settings['order_product_fields'], WC_Order_Export_Data_Extractor_UI::get_order_product_fields( $settings['format'] ) );
271
272
if ( ! isset( $settings['order_coupon_fields'] ) ) {
273
$settings['order_coupon_fields'] = array();
274
}
275
- self::merge_settings_and_default( $settings['order_coupon_fields'], WC_Order_Export_Data_Extractor_UI::get_order_coupon_fields( $settings['format'] ) );
276
return array_merge( $defaults, $settings );
277
}
278
279
- static function merge_settings_and_default(&$opt, $defaults) {
280
- foreach( $defaults as $k=>$v ) {
281
- if( isset($opt[$k]) ) {
282
//set default attribute OR add to option
283
- if( isset($v['default']) )
284
- $opt[$k]['default'] = $v['default'];
285
//set default format OR add to option
286
- if( isset($v['format']) )
287
- $opt[$k]['format'] = $v['format'];
288
// overwrite labels for localization
289
- $opt[$k]['label'] = $v['label'];
290
} else {
291
- if( self::$edit_existing_job AND $v['checked']=="1" )
292
$v['checked'] = "0";
293
- $opt[$k] = $v;
294
- }
295
}
296
}
297
298
static function save_export_settings( $mode, $id, $options ) {
299
- $all_jobs = self::get_export_settings_collection( $mode);
300
if ( $mode == self::EXPORT_NOW ) {
301
$all_jobs = $options;// just replace
302
} elseif ( $mode == self::EXPORT_SCHEDULE ) {
303
if ( $id ) {
304
- $options['schedule']['last_run'] = isset($all_jobs[ $id ]) ? $all_jobs[ $id ]['schedule']['last_run'] : current_time("timestamp",0);
305
- $options['schedule']['next_run'] = WC_Order_Export_Cron::next_event_timestamp_for_schedule( $options['schedule'], $id );
306
$all_jobs[ $id ] = $options;
307
} else {
308
- $options['schedule']['last_run'] = current_time("timestamp",0);
309
$options['schedule']['next_run'] = WC_Order_Export_Cron::next_event_timestamp_for_schedule( $options['schedule'] );
310
$all_jobs[] = $options; // new job
311
- end( $all_jobs );
312
- $id = key( $all_jobs );
313
}
314
} elseif ( $mode == self::EXPORT_PROFILE OR $mode == self::EXPORT_ORDER_ACTION ) {
315
if ( $id ) {
@@ -321,10 +340,12 @@ class WC_Order_Export_Manage {
321
}
322
}
323
324
- self::save_export_settings_collection( $mode, $all_jobs);
325
326
- if( $mode == self::EXPORT_SCHEDULE )
327
WC_Order_Export_Cron::install_job();
328
return $id;
329
}
330
@@ -332,22 +353,25 @@ class WC_Order_Export_Manage {
332
return self::advanced_clone_export_settings( $id, $mode, $mode );
333
}
334
335
- static function advanced_clone_export_settings( $id, $mode_in = self::EXPORT_SCHEDULE, $mode_out = self::EXPORT_SCHEDULE ) {
336
$all_jobs_in = self::get_export_settings_collection( $mode_in );
337
//new settings
338
- $settings = $all_jobs_in[ $id ];
339
- $settings['mode'] = $mode_out;
340
341
if ( $mode_in !== $mode_out ) {
342
$all_jobs_out = self::get_export_settings_collection( $mode_out );
343
- }
344
- else {
345
- $mode_out = $mode_in;
346
- $all_jobs_out = $all_jobs_in;
347
$settings['title'] .= " [cloned]"; //add note
348
}
349
350
- if ( $mode_in === self::EXPORT_PROFILE && $mode_out === self::EXPORT_SCHEDULE) {
351
if ( ! isset( $settings['destination'] ) ) {
352
$settings['destination'] = array(
353
'type' => 'folder',
@@ -365,8 +389,8 @@ class WC_Order_Export_Manage {
365
366
if ( ! isset( $settings['schedule'] ) ) {
367
$settings['schedule'] = array(
368
- 'type' => 'schedule-1',
369
- 'run_at' => '00:00',
370
);
371
}
372
@@ -374,10 +398,11 @@ class WC_Order_Export_Manage {
374
}
375
376
end( $all_jobs_out );
377
- $next_id = key( $all_jobs_out ) + 1;
378
$all_jobs_out[ $next_id ] = $settings;
379
380
- self::save_export_settings_collection( $mode_out, $all_jobs_out );
381
return $next_id;
382
}
383
@@ -395,7 +420,7 @@ class WC_Order_Export_Manage {
395
self::EXPORT_PROFILE,
396
self::EXPORT_ORDER_ACTION,
397
);
398
- if( isset( $data[ self::EXPORT_NOW ] ) ) { // import ALL
399
foreach ( $allowed_options as $key ) {
400
if ( isset( $data[ $key ] ) ) {
401
$setting_name = self::get_settings_name_for_mode( $key );
@@ -404,28 +429,28 @@ class WC_Order_Export_Manage {
404
$data[ $key ] = self::edit_import_data( $data[ $key ] );
405
} else {
406
foreach ( $data[ $key ] as $index => $import_single_data ) {
407
- $data[$key][$index] = self::edit_import_data( $import_single_data );
408
}
409
}
410
411
- update_option( $setting_name, $data[ $key ] );
412
}
413
}
414
- }
415
- elseif( isset( $data["mode"] ) AND in_array( $data["mode"], $allowed_options ) ) { // OR import single ?
416
- $setting_name = self::get_settings_name_for_mode( $data["mode"] );
417
- if( $setting_name == self::settings_name_now ) {
418
- update_option( $setting_name, self::edit_import_data( $data ) ); // rewrite
419
- } else { // append!
420
- $items = get_option( $setting_name, array() );
421
-
422
- if( empty($items) )
423
- $items[ 1 ] = self::edit_import_data( $data );
424
- else
425
- $items[] = self::edit_import_data( $data );
426
-
427
- update_option( $setting_name, $items );
428
}
429
}// if modes
430
}
431
13
const EXPORT_PROFILE = 'profiles';
14
const EXPORT_SCHEDULE = 'cron';
15
const EXPORT_ORDER_ACTION = 'order-action';
16
+
17
public static $edit_existing_job = false;
18
+
19
static function get_days() {
20
return array(
21
+ 'Sun' => __( 'Sun', 'woo-order-export-lite' ),
22
+ 'Mon' => __( 'Mon', 'woo-order-export-lite' ),
23
+ 'Tue' => __( 'Tue', 'woo-order-export-lite' ),
24
+ 'Wed' => __( 'Wed', 'woo-order-export-lite' ),
25
+ 'Thu' => __( 'Thu', 'woo-order-export-lite' ),
26
+ 'Fri' => __( 'Fri', 'woo-order-export-lite' ),
27
+ 'Sat' => __( 'Sat', 'woo-order-export-lite' ),
28
);
29
}
30
39
} elseif ( $mode == self::EXPORT_ORDER_ACTION ) {
40
$name = self::settings_name_actions;
41
}
42
+
43
return $name;
44
}
45
+
46
static function remove_settings() {
47
$options = array(
48
self::settings_name_now,
49
self::settings_name_cron,
50
self::settings_name_profiles,
51
self::settings_name_actions,
52
+ );
53
+
54
+ foreach ( $options as $option ) {
55
delete_option( $option );
56
+ }
57
}
58
59
// arrays
60
static function get_export_settings_collection( $mode ) {
61
$name = self::get_settings_name_for_mode( $mode );
62
+
63
return get_option( $name, array() );
64
}
65
+
66
static function save_export_settings_collection( $mode, $jobs ) {
67
$name = self::get_settings_name_for_mode( $mode );
68
+
69
+ return update_option( $name, $jobs, false );
70
}
71
72
static function make_new_settings( $in ) {
73
$new_settings = $in['settings'];
74
+
75
// use old PHP code if no permissions, just to stop trcky persons ;)
76
+ if ( ! WC_Order_Export_Admin::user_can_add_custom_php() ) {
77
+ unset( $new_settings['custom_php_code'] );
78
}
79
80
// UI don't pass empty multiselects
91
'shipping_methods',
92
'user_roles',
93
'user_names',
94
+ 'user_custom_fields',
95
'coupons',
96
+ 'billing_locations',
97
'payment_methods',
98
'product_attributes',
99
+ 'product_itemmeta',
100
'product_taxonomies',
101
'item_names',
102
'item_metadata',
107
}
108
}
109
110
+ $settings = self::get( $in['mode'], $in['id'] );
111
+ $settings['id'] = $in['id'];
112
// setup new values for same keys
113
foreach ( $new_settings as $key => $val ) {
114
$settings[ $key ] = $val;
117
$sections = array(
118
'orders' => 'order_fields',
119
'products' => 'order_product_fields',
120
+ 'coupons' => 'order_coupon_fields',
121
);
122
foreach ( $sections as $section => $fieldset ) {
123
$new_order_fields = array();
128
$opts = array(
129
"checked" => $in_sec['exported'][ $field ],
130
"colname" => $colname,
131
+ "label" => $in_sec['label'][ $field ],
132
);
133
// for products & coupons
134
if ( isset( $in_sec['repeat'][ $field ] ) ) {
158
static function get( $mode, $id = false ) {
159
$all_jobs = self::get_export_settings_collection( $mode );
160
161
+ if ( $mode == self::EXPORT_NOW ) { // one job
162
return self::apply_defaults( $mode, $all_jobs );
163
} elseif ( $id === false ) {
164
+ if ( empty( $all_jobs ) OR ! is_array( $all_jobs ) ) {
165
return array();
166
+ }
167
+
168
+ return array_map( function ( $item ) use ( $mode ) {
169
return WC_Order_Export_Manage::apply_defaults( $mode, $item );
170
}, $all_jobs );
171
}
172
173
$settings = isset( $all_jobs[ $id ] ) ? $all_jobs[ $id ] : array();
174
+
175
return self::apply_defaults( $mode, $settings );
176
}
177
178
static function apply_defaults( $mode, $settings ) {
179
+
180
+ $settings = apply_filters( "woe_before_apply_default_settings", $settings, $mode );
181
+
182
$defaults = array(
183
'mode' => $mode,
184
'title' => '',
196
'item_metadata' => array(),
197
'user_roles' => array(),
198
'user_names' => array(),
199
+ 'user_custom_fields' => array(),
200
+ 'billing_locations' => array(),
201
'payment_methods' => array(),
202
'any_coupon_used' => 0,
203
'coupons' => array(),
208
'product_taxonomies' => array(),
209
'product_custom_fields' => array(),
210
'product_attributes' => array(),
211
+ 'product_itemmeta' => array(),
212
'format' => 'XLS',
213
+ 'format_xls_use_xls_format' => 0,
214
+ 'format_xls_sheet_name' => __( 'Orders', 'woo-order-export-lite' ),
215
'format_xls_display_column_names' => 1,
216
+ 'format_xls_auto_width' => 1,
217
'format_xls_populate_other_columns_product_rows' => 1,
218
+ 'format_xls_direction_rtl' => 0,
219
'format_csv_enclosure' => '"',
220
'format_csv_delimiter' => ',',
221
'format_csv_linebreak' => '\r\n',
239
'format_xml_self_closing_tags' => 1,
240
'all_products_from_order' => 1,
241
'skip_refunded_items' => 1,
242
+ 'skip_suborders' => 0,
243
+ 'export_refunds' => 0,
244
+ 'date_format' => 'Y-m-d',
245
+ 'time_format' => 'H:i',
246
'sort_direction' => 'DESC',
247
'sort' => 'order_id',
248
'format_number_fields' => 0,
251
'strip_tags_product_fields' => 0,
252
'cleanup_phone' => 0,
253
'enable_debug' => 0,
254
+ 'format_json_start_tag' => '[',
255
+ 'format_json_end_tag' => ']',
256
'custom_php' => 0,
257
'custom_php_code' => '',
258
'mark_exported_orders' => 0,
259
'export_unmarked_orders' => 0,
260
+
261
+ 'summary_report_by_products' => 0,
262
);
263
264
if ( ! isset( $settings['format'] ) ) {
272
if ( ! isset( $settings['order_fields'] ) ) {
273
$settings['order_fields'] = array();
274
}
275
+ self::merge_settings_and_default( $settings['order_fields'],
276
+ WC_Order_Export_Data_Extractor_UI::get_order_fields( $settings['format'] ) );
277
278
if ( ! isset( $settings['order_product_fields'] ) ) {
279
$settings['order_product_fields'] = array();
280
}
281
+ self::merge_settings_and_default( $settings['order_product_fields'],
282
+ WC_Order_Export_Data_Extractor_UI::get_order_product_fields( $settings['format'] ) );
283
284
if ( ! isset( $settings['order_coupon_fields'] ) ) {
285
$settings['order_coupon_fields'] = array();
286
}
287
+ self::merge_settings_and_default( $settings['order_coupon_fields'],
288
+ WC_Order_Export_Data_Extractor_UI::get_order_coupon_fields( $settings['format'] ) );
289
+
290
return array_merge( $defaults, $settings );
291
}
292
293
+ static function merge_settings_and_default( &$opt, $defaults ) {
294
+ foreach ( $defaults as $k => $v ) {
295
+ if ( isset( $opt[ $k ] ) ) {
296
//set default attribute OR add to option
297
+ if ( isset( $v['default'] ) ) {
298
+ $opt[ $k ]['default'] = $v['default'];
299
+ }
300
//set default format OR add to option
301
+ if ( isset( $v['format'] ) ) {
302
+ $opt[ $k ]['format'] = $v['format'];
303
+ }
304
// overwrite labels for localization
305
+ $opt[ $k ]['label'] = $v['label'];
306
} else {
307
+ if ( self::$edit_existing_job AND $v['checked'] == "1" ) {
308
$v['checked'] = "0";
309
+ }
310
+ $opt[ $k ] = $v;
311
+ }
312
}
313
}
314
315
static function save_export_settings( $mode, $id, $options ) {
316
+ $all_jobs = self::get_export_settings_collection( $mode );
317
if ( $mode == self::EXPORT_NOW ) {
318
$all_jobs = $options;// just replace
319
} elseif ( $mode == self::EXPORT_SCHEDULE ) {
320
if ( $id ) {
321
+ $options['schedule']['last_run'] = isset( $all_jobs[ $id ] ) ? $all_jobs[ $id ]['schedule']['last_run'] : current_time( "timestamp",
322
+ 0 );
323
+ $options['schedule']['next_run'] = WC_Order_Export_Cron::next_event_timestamp_for_schedule( $options['schedule'],
324
+ $id );
325
$all_jobs[ $id ] = $options;
326
} else {
327
+ $options['schedule']['last_run'] = current_time( "timestamp", 0 );
328
$options['schedule']['next_run'] = WC_Order_Export_Cron::next_event_timestamp_for_schedule( $options['schedule'] );
329
$all_jobs[] = $options; // new job
330
+ end( $all_jobs );
331
+ $id = key( $all_jobs );
332
}
333
} elseif ( $mode == self::EXPORT_PROFILE OR $mode == self::EXPORT_ORDER_ACTION ) {
334
if ( $id ) {
340
}
341
}
342
343
+ self::save_export_settings_collection( $mode, $all_jobs );
344
345
+ if ( $mode == self::EXPORT_SCHEDULE ) {
346
WC_Order_Export_Cron::install_job();
347
+ }
348
+
349
return $id;
350
}
351
353
return self::advanced_clone_export_settings( $id, $mode, $mode );
354
}
355
356
+ static function advanced_clone_export_settings(
357
+ $id,
358
+ $mode_in = self::EXPORT_SCHEDULE,
359
+ $mode_out = self::EXPORT_SCHEDULE
360
+ ) {
361
$all_jobs_in = self::get_export_settings_collection( $mode_in );
362
//new settings
363
+ $settings = $all_jobs_in[ $id ];
364
+ $settings['mode'] = $mode_out;
365
366
if ( $mode_in !== $mode_out ) {
367
$all_jobs_out = self::get_export_settings_collection( $mode_out );
368
+ } else {
369
+ $mode_out = $mode_in;
370
+ $all_jobs_out = $all_jobs_in;
371
$settings['title'] .= " [cloned]"; //add note
372
}
373
374
+ if ( $mode_in === self::EXPORT_PROFILE && $mode_out === self::EXPORT_SCHEDULE ) {
375
if ( ! isset( $settings['destination'] ) ) {
376
$settings['destination'] = array(
377
'type' => 'folder',
389
390
if ( ! isset( $settings['schedule'] ) ) {
391
$settings['schedule'] = array(
392
+ 'type' => 'schedule-1',
393
+ 'run_at' => '00:00',
394
);
395
}
396
398
}
399
400
end( $all_jobs_out );
401
+ $next_id = key( $all_jobs_out ) + 1;
402
$all_jobs_out[ $next_id ] = $settings;
403
404
+ self::save_export_settings_collection( $mode_out, $all_jobs_out );
405
+
406
return $next_id;
407
}
408
420
self::EXPORT_PROFILE,
421
self::EXPORT_ORDER_ACTION,
422
);
423
+ if ( isset( $data[ self::EXPORT_NOW ] ) ) { // import ALL
424
foreach ( $allowed_options as $key ) {
425
if ( isset( $data[ $key ] ) ) {
426
$setting_name = self::get_settings_name_for_mode( $key );
429
$data[ $key ] = self::edit_import_data( $data[ $key ] );
430
} else {
431
foreach ( $data[ $key ] as $index => $import_single_data ) {
432
+ $data[ $key ][ $index ] = self::edit_import_data( $import_single_data );
433
}
434
}
435
436
+ update_option( $setting_name, $data[ $key ], false );
437
}
438
}
439
+ } elseif ( isset( $data["mode"] ) AND in_array( $data["mode"], $allowed_options ) ) { // OR import single ?
440
+ $setting_name = self::get_settings_name_for_mode( $data["mode"] );
441
+ if ( $setting_name == self::settings_name_now ) {
442
+ update_option( $setting_name, self::edit_import_data( $data ), false ); // rewrite
443
+ } else { // append!
444
+ $items = get_option( $setting_name, array() );
445
+
446
+ if ( empty( $items ) ) {
447
+ $items[1] = self::edit_import_data( $data );
448
+ } else {
449
+ $items[] = self::edit_import_data( $data );
450
}
451
+
452
+ update_option( $setting_name, $items, false );
453
+ }
454
}// if modes
455
}
456
classes/class-wc-order-export-admin.php CHANGED
@@ -30,65 +30,70 @@ class WC_Order_Export_Admin {
30
31
//Add custom bulk export action in Woocomerce orders Table, modified for WP 4.7
32
add_filter( 'bulk_actions-edit-shop_order', array( $this, 'export_orders_bulk_action' ) );
33
- add_filter( 'handle_bulk_actions-edit-shop_order', array( $this, 'export_orders_bulk_action_process' ), 10, 3 );
34
- add_action( 'admin_notices', array( $this,'export_orders_bulk_action_notices'));
35
//do once
36
- if( !get_option( $this->activation_notice_option ) )
37
- add_action('admin_notices', array( $this,'display_plugin_activated_message'));
38
-
39
//extra links in >Plugins
40
- add_filter( 'plugin_action_links_' . WOE_PLUGIN_BASENAME, array($this,'add_action_links') );
41
-
42
// Add 'Export Status' orders page column header
43
add_filter( 'manage_edit-shop_order_columns', array( $this, 'add_order_status_column_header' ), 20 );
44
45
// Add 'Export Status' orders page column content
46
add_action( 'manage_shop_order_posts_custom_column', array( $this, 'add_order_status_column_content' ) );
47
48
- if ( isset( $_GET[ 'post_type' ] ) && $_GET[ 'post_type' ] == 'shop_order' ) {
49
add_action( 'admin_print_styles', array( $this, 'add_order_status_column_style' ) );
50
}
51
}
52
53
- $this->settings = self::load_main_settings();
54
55
//Pro active ?
56
- if( self::is_full_version() ) {
57
- new WC_Order_Export_Zapier_Engine( $this->settings );
58
add_action( 'plugins_loaded', array( $this, 'load_textdomain' ) );
59
- add_filter( 'cron_schedules', array( 'WC_Order_Export_Cron', 'create_custom_schedules' ), 10, 1 );
60
add_action( 'wc_export_cron_global', array( 'WC_Order_Export_Cron', 'wc_export_cron_global_f' ) );
61
62
//for direct calls
63
add_action( 'wp_ajax_order_exporter_run', array( $this, 'ajax_gate_guest' ) );
64
add_action( 'wp_ajax_nopriv_order_exporter_run', array( $this, 'ajax_gate_guest' ) );
65
- $this->methods_allowed_for_guests = array('run_cron_jobs','run_one_job','run_one_scheduled_job');
66
67
// order actions
68
- add_action( 'woocommerce_order_status_changed', array( $this, 'wc_order_status_changed' ), 10, 3);
69
// activate CRON hook if it was removed
70
- add_action( 'wp_loaded', function() {
71
$all_jobs = WC_Order_Export_Manage::get_export_settings_collection( WC_Order_Export_Manage::EXPORT_SCHEDULE );
72
- if ( $all_jobs )
73
WC_Order_Export_Cron::install_job();
74
} );
75
}
76
77
}
78
79
public function add_order_status_column_header( $columns ) {
80
-
81
- if( ! $this->settings['show_export_status_column'] )
82
return $columns;
83
-
84
$new_columns = array();
85
foreach ( $columns as $column_name => $column_info ) {
86
- if ( 'order_actions' === $column_name OR 'wc_actions' === $column_name) { // Woocommerce uses wc_actions since 3.3.0
87
- $label = __( 'Export Status', 'woo-order-export-lite' );
88
$new_columns['woe_export_status'] = $label;
89
}
90
$new_columns[ $column_name ] = $column_info;
91
}
92
return $new_columns;
93
}
94
@@ -102,7 +107,7 @@ class WC_Order_Export_Admin {
102
$is_exported = true;
103
}
104
105
- if( $is_exported ) {
106
echo '<span class="dashicons dashicons-yes" style="color: #2ea2cc"></span>';
107
} else {
108
echo '<span class="dashicons dashicons-minus"></span>';
@@ -117,37 +122,43 @@ class WC_Order_Export_Admin {
117
118
public function install() {
119
//wp_clear_scheduled_hook( "wc_export_cron_global" ); //debug
120
- if( self::is_full_version() )
121
WC_Order_Export_Cron::install_job();
122
}
123
124
public function display_plugin_activated_message() {
125
?>
126
- <div class="notice notice-success is-dismissible">
127
- <p><?php _e( 'Advanced Order Export For WooCommerce is available <a href="admin.php?page=wc-order-export">on this page</a>.', 'woo-order-export-lite' ); ?></p>
128
- </div>
129
<?php
130
- update_option( $this->activation_notice_option, true );
131
}
132
133
public function add_action_links( $links ) {
134
- $mylinks = array(
135
- '<a href="admin.php?page=wc-order-export">'. __('Settings', 'woo-order-export-lite'). '</a>',
136
- '<a href="https://algolplus.com/plugins/documentation-order-export-woocommerce/" target="_blank">'. __('Docs', 'woo-order-export-lite'). '</a>',
137
- '<a href="https://algolplus.freshdesk.com" target="_blank">'. __('Support', 'woo-order-export-lite'). '</a>'
138
);
139
- return array_merge( $mylinks, $links);
140
}
141
142
public function deactivate() {
143
wp_clear_scheduled_hook( "wc_export_cron_global" );
144
delete_option( $this->activation_notice_option );
145
146
- if( self::is_full_version() ) {
147
//don't do it! updater call this function!
148
// WC_Order_Export_EDD::getInstance()->edd_woe_force_deactivate_license();
149
}
150
}
151
public static function uninstall() {
152
//delete_option( self::settings_name_common );
153
//WC_Order_Export_Manage::remove_settings();
@@ -156,62 +167,74 @@ class WC_Order_Export_Admin {
156
static function load_main_settings() {
157
return array_merge(
158
array(
159
- 'cron_tasks_active' => '1',
160
- 'show_export_status_column' => '1',
161
- 'show_export_actions_in_bulk' => '1',
162
- 'show_export_in_status_change_job' => '0',
163
- 'ajax_orders_per_step' => '30',
164
- 'limit_button_test' => '1',
165
- 'cron_key' => '1234',
166
- 'ipn_url' => '',
167
- 'zapier_api_key' => '12345678',
168
- 'zapier_file_timeout' => 60,
169
),
170
get_option( self::settings_name_common, array() )
171
);
172
}
173
static function save_main_settings() {
174
// update main settings here!
175
- $settings = filter_input_array(INPUT_POST, array(
176
- 'cron_tasks_active' => FILTER_VALIDATE_BOOLEAN,
177
- 'show_export_status_column' => FILTER_VALIDATE_BOOLEAN,
178
- 'show_export_actions_in_bulk' => FILTER_VALIDATE_BOOLEAN,
179
'show_export_in_status_change_job' => FILTER_VALIDATE_BOOLEAN,
180
- 'ajax_orders_per_step' => FILTER_VALIDATE_INT,
181
- 'limit_button_test' => FILTER_SANITIZE_STRING,
182
- 'cron_key' => FILTER_SANITIZE_STRING,
183
- 'ipn_url' => FILTER_SANITIZE_STRING,
184
- 'zapier_api_key' => FILTER_SANITIZE_STRING,
185
- 'zapier_file_timeout' => FILTER_SANITIZE_NUMBER_INT,
186
) );
187
- update_option( self::settings_name_common, $settings );
188
189
if ( isset( $settings['ipn_url'] ) ) {
190
- update_option( WOE_IPN_URL_OPTION_KEY, $settings['ipn_url'] );
191
}
192
}
193
194
195
function load_textdomain() {
196
$locale = apply_filters( 'plugin_locale', get_locale(), 'woo-order-export-lite' );
197
- load_textdomain( 'woo-order-export-lite', WP_LANG_DIR . '/woocommerce-order-export/woocommerce-order-export-' . $locale . '.mo' );
198
199
load_plugin_textdomain( 'woo-order-export-lite', false,
200
plugin_basename( dirname( dirname( __FILE__ ) ) ) . '/i18n/languages' );
201
}
202
203
public function add_menu() {
204
- if( apply_filters('woe_current_user_can_export', true) ) {
205
- if ( current_user_can( 'manage_woocommerce' ) )
206
- add_submenu_page( 'woocommerce', __( 'Export Orders', 'woo-order-export-lite' ),__( 'Export Orders', 'woo-order-export-lite' ), 'view_woocommerce_reports', 'wc-order-export', array( $this, 'render_menu' ) );
207
- else // add after Sales Report!
208
- add_menu_page( __( 'Export Orders', 'woo-order-export-lite' ),__( 'Export Orders', 'woo-order-export-lite' ), 'view_woocommerce_reports', 'wc-order-export', array( $this, 'render_menu' ) , null, '55.7');
209
}
210
}
211
212
public function render_menu() {
213
$this->render( 'main', array( 'WC_Order_Export' => $this, 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
214
- $active_tab = isset( $_REQUEST['tab'] ) ? $_REQUEST['tab'] : 'export';
215
if ( method_exists( $this, 'render_tab_' . $active_tab ) ) {
216
$this->{'render_tab_' . $active_tab}();
217
}
@@ -221,40 +244,41 @@ class WC_Order_Export_Admin {
221
$this->render( 'tab/export', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'WC_Order_Export' => $this ) );
222
}
223
224
- public function render_tab_tools() {
225
$this->render( 'tab/tools', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'WC_Order_Export' => $this ) );
226
}
227
228
- public function render_tab_settings() {
229
- $this->render( 'tab/settings', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'settings' => $this->settings ) );
230
}
231
232
public function render_tab_license() {
233
$this->render( 'tab/license', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'WC_Order_Export' => $this ) );
234
}
235
236
- public function render_tab_help() {
237
$this->render( 'tab/help', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'WC_Order_Export' => $this ) );
238
}
239
240
public function render_tab_order_actions() {
241
$wc_oe = isset( $_REQUEST['wc_oe'] ) ? $_REQUEST['wc_oe'] : '';
242
$ajaxurl = admin_url( 'admin-ajax.php' );
243
- $mode = WC_Order_Export_Manage::EXPORT_ORDER_ACTION;
244
$all_items = WC_Order_Export_Manage::get_export_settings_collection( $mode );
245
$show = array(
246
- 'date_filter' => $this->settings['show_export_in_status_change_job'],
247
- 'export_button' => $this->settings['show_export_in_status_change_job'],
248
'export_button_plain' => $this->settings['show_export_in_status_change_job'],
249
- 'preview_actions' => false,
250
- 'destinations' => true,
251
- 'schedule' => false,
252
- 'sort_orders' => false,
253
- 'order_filters' => true,
254
- 'product_filters' => true,
255
- 'customer_filters' => true,
256
- 'billing_filters' => true,
257
- 'shipping_filters' => true,
258
);
259
switch ( $wc_oe ) {
260
case 'add_action':
@@ -265,15 +289,17 @@ class WC_Order_Export_Admin {
265
'id' => $next_id,
266
'WC_Order_Export' => $this,
267
'ajaxurl' => $ajaxurl,
268
- 'show' => $show
269
) );
270
return;
271
case 'edit_action':
272
- if( !isset( $_REQUEST[ 'action_id' ] ) )
273
break;
274
- $item_id = $_REQUEST[ 'action_id' ];
275
WC_Order_Export_Manage::$edit_existing_job = true;
276
- $clone = isset( $_REQUEST[ 'clone' ] ) ? $_REQUEST[ 'clone' ] : '';
277
if ( $clone ) {
278
$item_id = WC_Order_Export_Manage::clone_export_settings( $mode, $item_id );
279
}
@@ -282,30 +308,34 @@ class WC_Order_Export_Admin {
282
'id' => $item_id,
283
'WC_Order_Export' => $this,
284
'ajaxurl' => $ajaxurl,
285
- 'show' => $show
286
) );
287
return;
288
case 'delete':
289
- if( !isset( $_REQUEST[ 'action_id' ] ) )
290
break;
291
- $item_id = $_REQUEST[ 'action_id' ];
292
unset( $all_items[ $item_id ] );
293
WC_Order_Export_Manage::save_export_settings_collection( $mode, $all_items );
294
break;
295
case 'change_status':
296
- if( !isset( $_REQUEST[ 'action_id' ] ) )
297
break;
298
- $item_id = $_REQUEST[ 'action_id' ];
299
$all_items[ $item_id ]['active'] = $_REQUEST['status'];
300
WC_Order_Export_Manage::save_export_settings_collection( $mode, $all_items );
301
$url = remove_query_arg( array( 'wc_oe', 'action_id', 'status' ) );
302
wp_redirect( $url );
303
break;
304
case 'change_statuses':
305
- if( !isset( $_REQUEST['chosen_order_actions'] ) AND !isset( $_REQUEST['doaction'] ) AND -1 == $_REQUEST['doaction'] )
306
break;
307
- $chosen_order_actions = explode(',' , $_REQUEST['chosen_order_actions'] );
308
- $doaction = $_REQUEST['doaction'];
309
310
foreach ( $chosen_order_actions as $order_action_id ) {
311
if ( 'activate' == $doaction ) {
@@ -321,20 +351,21 @@ class WC_Order_Export_Admin {
321
wp_redirect( $url );
322
break;
323
}
324
- $this->render( 'tab/order-actions', array( 'ajaxurl' => $ajaxurl, 'WC_Order_Export' => $this, 'tab' => 'order_actions' ) );
325
}
326
327
public function render_tab_schedules() {
328
$wc_oe = isset( $_REQUEST['wc_oe'] ) ? $_REQUEST['wc_oe'] : '';
329
$ajaxurl = admin_url( 'admin-ajax.php' );
330
- $mode = WC_Order_Export_Manage::EXPORT_SCHEDULE;
331
$all_jobs = WC_Order_Export_Manage::get_export_settings_collection( $mode );
332
- $show = array(
333
- 'date_filter' => true,
334
- 'export_button' => true,
335
'export_button_plain' => true,
336
- 'destinations' => true,
337
- 'schedule' => true,
338
);
339
switch ( $wc_oe ) {
340
case 'add_schedule':
@@ -345,15 +376,17 @@ class WC_Order_Export_Admin {
345
'id' => $next_id,
346
'WC_Order_Export' => $this,
347
'ajaxurl' => $ajaxurl,
348
- 'show' => $show
349
) );
350
return;
351
case 'edit_schedule':
352
- if( !isset( $_REQUEST[ 'schedule_id' ] ) )
353
break;
354
- $schedule_id = $_REQUEST[ 'schedule_id' ];
355
WC_Order_Export_Manage::$edit_existing_job = true;
356
- $clone = isset( $_REQUEST[ 'clone' ] ) ? $_REQUEST[ 'clone' ] : '';
357
if ( $clone ) {
358
$schedule_id = WC_Order_Export_Manage::clone_export_settings( $mode, $schedule_id );
359
}
@@ -362,40 +395,44 @@ class WC_Order_Export_Admin {
362
'id' => $schedule_id,
363
'WC_Order_Export' => $this,
364
'ajaxurl' => $ajaxurl,
365
- 'show' => $show
366
) );
367
return;
368
case 'delete_schedule':
369
- if( !isset( $_REQUEST[ 'schedule_id' ] ) )
370
break;
371
- $schedule_id = $_REQUEST[ 'schedule_id' ];
372
unset( $all_jobs[ $schedule_id ] );
373
WC_Order_Export_Manage::save_export_settings_collection( $mode, $all_jobs );
374
break;
375
case 'change_status_schedule':
376
- if( !isset( $_REQUEST[ 'schedule_id' ] ) )
377
break;
378
- $schedule_id = $_REQUEST[ 'schedule_id' ];
379
$all_jobs[ $schedule_id ]['active'] = $_REQUEST['status'];
380
WC_Order_Export_Manage::save_export_settings_collection( $mode, $all_jobs );
381
$url = remove_query_arg( array( 'wc_oe', 'schedule_id', 'status' ) );
382
wp_redirect( $url );
383
break;
384
case 'change_status_schedules':
385
- if( !isset( $_REQUEST['chosen_schedules'] ) AND !isset( $_REQUEST['doaction'] ) AND -1 == $_REQUEST['doaction'] )
386
break;
387
- $chosen_schedules = explode(',' , $_REQUEST['chosen_schedules'] );
388
- $doaction = $_REQUEST['doaction'];
389
390
foreach ( $chosen_schedules as $schedule_id ) {
391
- if ( 'activate' == $doaction ) {
392
- $all_jobs[ $schedule_id ]['active'] = 1;
393
- } elseif ( 'deactivate' == $doaction ) {
394
- $all_jobs[ $schedule_id ]['active'] = 0;
395
- } elseif ( 'delete' == $doaction ) {
396
- unset( $all_jobs[ $schedule_id ] );
397
- }
398
- }
399
WC_Order_Export_Manage::save_export_settings_collection( $mode, $all_jobs );
400
$url = remove_query_arg( array( 'wc_oe', 'chosen_schedules', 'doaction' ) );
401
wp_redirect( $url );
@@ -405,16 +442,16 @@ class WC_Order_Export_Admin {
405
}
406
407
public function render_tab_profiles() {
408
- $wc_oe = isset( $_REQUEST['wc_oe'] ) ? $_REQUEST['wc_oe'] : '';
409
- $ajaxurl = admin_url( 'admin-ajax.php' );
410
- $mode = WC_Order_Export_Manage::EXPORT_PROFILE;
411
$all_items = WC_Order_Export_Manage::get_export_settings_collection( $mode );
412
- $show = array(
413
- 'date_filter' => true,
414
- 'export_button' => true,
415
'export_button_plain' => true,
416
- 'destinations' => true,
417
- 'schedule' => false,
418
);
419
switch ( $wc_oe ) {
420
case 'add_profile':
@@ -425,15 +462,17 @@ class WC_Order_Export_Admin {
425
'id' => $next_id,
426
'WC_Order_Export' => $this,
427
'ajaxurl' => $ajaxurl,
428
- 'show' => $show
429
) );
430
return;
431
case 'edit_profile':
432
- if( !isset( $_REQUEST['profile_id'] ) )
433
break;
434
- $profile_id = $_REQUEST['profile_id'];
435
WC_Order_Export_Manage::$edit_existing_job = true;
436
- $clone = isset( $_REQUEST[ 'clone' ] ) ? $_REQUEST[ 'clone' ] : '';
437
if ( $clone ) {
438
$profile_id = WC_Order_Export_Manage::clone_export_settings( $mode, $profile_id );
439
}
@@ -442,49 +481,54 @@ class WC_Order_Export_Admin {
442
'id' => $profile_id,
443
'WC_Order_Export' => $this,
444
'ajaxurl' => $ajaxurl,
445
- 'show' => $show
446
) );
447
return;
448
case 'copy_profile_to_scheduled':
449
$profile_id = isset( $_REQUEST['profile_id'] ) ? $_REQUEST['profile_id'] : '';
450
- $schedule_id = WC_Order_Export_Manage::advanced_clone_export_settings( $profile_id, $mode, WC_Order_Export_Manage::EXPORT_SCHEDULE );
451
- $url = remove_query_arg( 'profile_id' );
452
- $url = add_query_arg( 'tab', 'schedules', $url );
453
- $url = add_query_arg( 'wc_oe', 'edit_schedule', $url );
454
- $url = add_query_arg( 'schedule_id', $schedule_id, $url );
455
wp_redirect( $url );
456
break;
457
case 'copy_profile_to_actions':
458
$profile_id = isset( $_REQUEST['profile_id'] ) ? $_REQUEST['profile_id'] : '';
459
- $schedule_id = WC_Order_Export_Manage::advanced_clone_export_settings( $profile_id, $mode, WC_Order_Export_Manage::EXPORT_ORDER_ACTION );
460
- $url = remove_query_arg( 'profile_id' );
461
- $url = add_query_arg( 'tab', 'order_actions', $url );
462
- $url = add_query_arg( 'wc_oe', 'edit_action', $url );
463
- $url = add_query_arg( 'action_id', $schedule_id, $url );
464
wp_redirect( $url );
465
break;
466
case 'delete_profile':
467
- if( !isset( $_REQUEST['profile_id'] ) )
468
break;
469
$profile_id = $_REQUEST['profile_id'];
470
unset( $all_items[ $profile_id ] );
471
WC_Order_Export_Manage::save_export_settings_collection( $mode, $all_items );
472
break;
473
case 'change_profile_statuses':
474
- if( !isset( $_REQUEST['chosen_profiles'] ) AND !isset( $_REQUEST['doaction'] ) AND -1 == $_REQUEST['doaction'] )
475
break;
476
- $chosen_profiles = explode(',' , $_REQUEST['chosen_profiles'] );
477
- $doaction = $_REQUEST['doaction'];
478
479
foreach ( $chosen_profiles as $profile_id ) {
480
- if ( 'activate' == $doaction ) {
481
- $all_items[ $profile_id ][ 'use_as_bulk' ] = 'on';
482
- } elseif ( 'deactivate' == $doaction ) {
483
- unset( $all_items[ $profile_id ][ 'use_as_bulk' ] );
484
- } elseif ( 'delete' == $doaction ) {
485
- unset( $all_items[ $profile_id ] );
486
- }
487
- }
488
WC_Order_Export_Manage::save_export_settings_collection( $mode, $all_items );
489
$url = remove_query_arg( array( 'wc_oe', 'chosen_profiles', 'doaction' ) );
490
wp_redirect( $url );
@@ -493,12 +537,12 @@ class WC_Order_Export_Admin {
493
494
//code to copy default settings as profile
495
$profiles = WC_Order_Export_Manage::get_export_settings_collection( $mode );
496
- $free_job = WC_Order_Export_Manage::get_export_settings_collection( WC_Order_Export_Manage::EXPORT_NOW);
497
- if(empty( $profiles ) AND !empty( $free_job ) ) {
498
- $free_job['title'] = __('Copied from "Export now"', 'woo-order-export-lite' );
499
- $free_job['mode'] = $mode;
500
- $profiles[1] = $free_job;
501
- update_option( WC_Order_Export_Manage::settings_name_profiles, $profiles);
502
}
503
504
$this->render( 'tab/profiles', array( 'ajaxurl' => $ajaxurl, 'WC_Order_Export' => $this ) );
@@ -511,20 +555,23 @@ class WC_Order_Export_Admin {
511
wp_enqueue_style( 'jquery-style',
512
'//ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css' );
513
$this->enqueue_select2_scripts();
514
-
515
wp_enqueue_script( 'export', $this->url_plugin . 'assets/js/export.js', array(), WOE_VERSION );
516
- wp_enqueue_script( 'serializejson', $this->url_plugin . 'assets/js/jquery.serializejson.js', array('jquery'), WOE_VERSION );
517
wp_enqueue_style( 'export', $this->url_plugin . 'assets/css/export.css', array(), WOE_VERSION );
518
wp_enqueue_style( 'woocommerce_admin_styles', WC()->plugin_url() . '/assets/css/admin.css', array() );
519
520
- $_REQUEST['tab'] = isset( $_REQUEST['tab'] ) ? $_REQUEST['tab'] : 'export';
521
- if ( isset( $_REQUEST['wc_oe'] ) AND ( strpos($_REQUEST['wc_oe'], 'add_') === 0 OR strpos($_REQUEST['wc_oe'], 'edit_') === 0 ) OR $_REQUEST['tab'] == 'export') {
522
- wp_enqueue_script( 'settings-form', $this->url_plugin . 'assets/js/settings-form.js', array(), WOE_VERSION );
523
524
$localize_settings_form = array(
525
- 'set_up_fields_to_export' => __( 'Set up fields to export', 'woo-order-export-lite' ),
526
- 'js_tpl_popup' => __( 'Add %s as %s columns %s as rows', 'woo-order-export-lite' )
527
- );
528
wp_localize_script( 'settings-form', 'localize_settings_form', $localize_settings_form );
529
530
@@ -554,7 +601,7 @@ class WC_Order_Export_Admin {
554
'object_formats' => array( 'XML', 'JSON' ),
555
'xml_formats' => array( 'XML' ),
556
557
- 'day_names' => WC_Order_Export_Manage::get_days(),
558
559
);
560
@@ -564,17 +611,19 @@ class WC_Order_Export_Admin {
564
565
// Localize the script with new data
566
$translation_array = array(
567
- 'empty_column_name' => __( 'empty column name', 'woo-order-export-lite' ),
568
- 'empty_meta_key' => __( 'empty meta key', 'woo-order-export-lite' ),
569
- 'empty_meta_key_and_taxonomy' => __( 'select product field or item field or taxonomy', 'woo-order-export-lite' ),
570
- 'empty_value' => __( 'empty value', 'woo-order-export-lite' ),
571
- 'empty_title' => __( 'title is empty', 'woo-order-export-lite' ),
572
- 'wrong_date_range' => __( 'Date From is greater than Date To', 'woo-order-export-lite' ),
573
- 'no_fields' => __( 'Please, set up fields to export', 'woo-order-export-lite' ),
574
- 'no_results' => __( 'Nothing to export. Please, adjust your filters', 'woo-order-export-lite' ),
575
- 'empty' => __( 'empty', 'woo-order-export-lite' ),
576
);
577
- wp_localize_script( 'export', 'export_messages', $translation_array );
578
}
579
580
private function enqueue_select2_scripts() {
@@ -600,10 +649,11 @@ class WC_Order_Export_Admin {
600
array(), WC_VERSION );
601
}
602
603
- public function script_loader_src($src, $handle) {
604
// don't load ANY select2.js / select2.min.js and OUTDATED select2.full.js
605
- if (!preg_match('/\/select2\.full\.js\?ver=[1-3]/', $src) && !preg_match('/\/select2\.min\.js/', $src) && !preg_match('/\/select2\.js/', $src)
606
- && !preg_match('#jquery\.serialize-object\.#', $src) /*this script breaks our json!*/
607
) {
608
return $src;
609
}
@@ -611,8 +661,8 @@ class WC_Order_Export_Admin {
611
612
public function render( $view, $params = array(), $path_views = null ) {
613
$params = apply_filters( 'woe_render_params', $params );
614
- $params = apply_filters( 'woe_render_params_'.$view, $params );
615
-
616
extract( $params );
617
if ( $path_views ) {
618
include $path_views . "$view.php";
@@ -627,6 +677,7 @@ class WC_Order_Export_Admin {
627
if ( substr( $name, 0, 1 ) == '[' ) {
628
$name = substr( $name, 1 );
629
}
630
return trim( $name );
631
}, $arr_name );
632
$arr_name = array_filter( $arr_name );
@@ -634,6 +685,7 @@ class WC_Order_Export_Admin {
634
foreach ( $arr_name as $value ) {
635
$arr = isset( $arr[ $value ] ) ? $arr[ $value ] : "";
636
}
637
return $arr;
638
}
639
@@ -647,36 +699,39 @@ class WC_Order_Export_Admin {
647
$new_status = is_string( $new_status ) && strpos( $new_status, 'wc-' ) !== 0 ? "wc-{$new_status}" : $new_status;
648
649
$this->changed_order_id = $order_id;
650
- add_filter( 'woe_sql_get_order_ids_where', array($this, "filter_by_changed_order"), 10, 2 );
651
652
- $logger = function_exists( "wc_get_logger" ) ? wc_get_logger() : false; //new logger in 3.0+
653
$logger_context = array( 'source' => 'woo-order-export-lite' );
654
655
- foreach ( $all_items as $key=>$item ) {
656
$item = WC_Order_Export_Manage::get( WC_Order_Export_Manage::EXPORT_ORDER_ACTION, $key );
657
if ( isset( $item['active'] ) && ! $item['active'] ) {
658
continue;
659
}
660
// use empty for ANY status
661
- if ( ( empty( $item['from_status'] ) OR in_array( $old_status, $item['from_status'] ) )
662
AND
663
( empty( $item['to_status'] ) OR in_array( $new_status, $item['to_status'] ) )
664
- ) {
665
- do_action('woe_order_action_started', $order_id, $item );
666
$result = WC_Order_Export_Engine::build_files_and_export( $item );
667
- $output = sprintf( __('Status change job #%s for order #%s. Result: %s', 'woo-order-export-lite' ), $key, $order_id, $result);
668
// log if required
669
- if( $logger AND !empty($item['log_results']) )
670
$logger->info( $output, $logger_context );
671
672
- do_action('woe_order_action_completed', $order_id, $item , $result );
673
}
674
}
675
- remove_filter( 'woe_sql_get_order_ids_where', array($this, "filter_by_changed_order"), 10 );
676
}
677
678
- public function filter_by_changed_order ( $where, $settings ) {
679
$where[] = "orders.ID = " . $this->changed_order_id;
680
return $where;
681
}
682
@@ -686,11 +741,11 @@ class WC_Order_Export_Admin {
686
if ( isset( $_REQUEST['method'] ) ) {
687
$method = $_REQUEST['method'];
688
if ( method_exists( 'WC_Order_Export_Ajax', $method ) ) {
689
- $_POST = stripslashes_deep($_POST);
690
// parse json to arrays?
691
- if ( !empty($_POST['json']) ) {
692
- $json = json_decode( $_POST['json'], true );
693
- if( is_array($json) ) {
694
// add $_POST['settings'],$_POST['orders'],$_POST['products'],$_POST['coupons']
695
$_POST = $_POST + $json;
696
unset( $_POST['json'] );
@@ -705,75 +760,81 @@ class WC_Order_Export_Admin {
705
706
//TODO: debug!
707
public function ajax_gate_guest() {
708
- if ( isset( $_REQUEST['method'] ) AND in_array($_REQUEST['method'],$this->methods_allowed_for_guests) ) {
709
$method = $_REQUEST['method'];
710
if ( method_exists( 'WC_Order_Export_Ajax', $method ) ) {
711
- $_POST = array_map('stripslashes_deep', $_POST);
712
- $ajax = new WC_Order_Export_Ajax();
713
$ajax->validate_url_key();
714
$ajax->$method();
715
}
716
}
717
die();
718
}
719
-
720
//Works since Wordpress 4.7
721
function export_orders_bulk_action( $actions ) {
722
$settings = WC_Order_Export_Manage::get( WC_Order_Export_Manage::EXPORT_NOW );
723
WC_Order_Export_Manage::set_correct_file_ext( $settings );
724
-
725
// default
726
- if( ! empty($settings['format']) ) {
727
- $actions['woe_export_selected_orders'] = sprintf( __( 'Export as %s', 'woo-order-export-lite' ), $settings['format'] );
728
}
729
-
730
// mark/unmark
731
- if( $this->settings['show_export_actions_in_bulk'] ) {
732
- $actions['woe_mark_exported'] = __( 'Mark exported', 'woo-order-export-lite' );
733
$actions['woe_unmark_exported'] = __( 'Unmark exported', 'woo-order-export-lite' );
734
- }
735
736
$all_items = WC_Order_Export_Manage::get_export_settings_collection( WC_Order_Export_Manage::EXPORT_PROFILE );
737
foreach ( $all_items as $job_id => $job ) {
738
- if ( isset( $job['use_as_bulk'] ) )
739
- $actions['woe_export_selected_orders_profile_' . $job_id] = sprintf( __( "Export as profile '%s'", 'woo-order-export-lite' ), $job['title'] );
740
}
741
-
742
return $actions;
743
}
744
745
- function export_orders_bulk_action_process($redirect_to, $action, $ids) {
746
switch ( $action ) {
747
case 'woe_export_selected_orders':
748
- $redirect_to = add_query_arg( array( 'export_bulk_profile' => 'now', 'ids' => join( ',', $ids ) ), $redirect_to );
749
break;
750
case 'woe_mark_exported':
751
- foreach( $ids as $post_id ) {
752
update_post_meta( $post_id, 'woe_order_exported', 1 );
753
}
754
- $redirect_to = add_query_arg( array(
755
'woe_bulk_mark_exported' => count( $ids ),
756
'woe_bulk_unmark_exported' => false,
757
), $redirect_to );
758
break;
759
case 'woe_unmark_exported':
760
- foreach( $ids as $post_id ) {
761
- delete_post_meta( $post_id, 'woe_order_exported');
762
}
763
$redirect_to = add_query_arg( array(
764
'woe_bulk_mark_exported' => false,
765
- 'woe_bulk_unmark_exported' => count( $ids )
766
), $redirect_to );
767
break;
768
default:
769
if ( preg_match( '/woe_export_selected_orders_profile_(\d+)/', $action, $matches ) ) {
770
if ( isset( $matches[1] ) ) {
771
- $id = $matches[1];
772
- $redirect_to = add_query_arg( array( 'export_bulk_profile' => $id, 'ids' => join( ',', $ids ) ), $redirect_to );
773
break;
774
- }
775
}
776
- //do nothing
777
return $redirect_to;
778
}
779
@@ -785,9 +846,9 @@ class WC_Order_Export_Admin {
785
786
global $post_type, $pagenow;
787
788
- if ( $pagenow == 'edit.php' && $post_type == 'shop_order' && isset( $_REQUEST[ 'export_bulk_profile' ] ) ) {
789
- $url = admin_url( 'admin-ajax.php' ) . "?action=order_exporter&method=export_download_bulk_file&export_bulk_profile=" . $_REQUEST[ 'export_bulk_profile' ] . "&ids=" . $_REQUEST[ 'ids' ];
790
- wp_redirect($url);
791
exit();
792
/* unused code
793
//$message = sprintf( __( 'Orders exported. <a href="%s">Download report.</a>' ,'woo-order-export-lite'), $url );
@@ -798,8 +859,8 @@ class WC_Order_Export_Admin {
798
// must remove this arg from pagination url
799
add_filter('removable_query_args', array($this, 'fix_table_links') );
800
*/
801
- } else if ( $pagenow == 'edit.php' && $post_type == 'shop_order' && isset( $_REQUEST[ 'woe_bulk_mark_exported' ] ) ) {
802
- $count = intval( $_REQUEST[ 'woe_bulk_mark_exported' ] );
803
printf(
804
'<div id="message" class="updated fade">' .
805
_n( '%s order marked.', '%s orders marked.', $count, 'woo-order-export-lite' )
@@ -807,8 +868,8 @@ class WC_Order_Export_Admin {
807
$count
808
);
809
810
- } else if ( $pagenow == 'edit.php' && $post_type == 'shop_order' && isset( $_REQUEST[ 'woe_bulk_unmark_exported' ] ) ) {
811
- $count = intval( $_REQUEST[ 'woe_bulk_unmark_exported' ] );
812
printf(
813
'<div id="message" class="updated fade">' .
814
_n( '%s order unmarked.', '%s orders unmarked.', $count, 'woo-order-export-lite' )
@@ -821,24 +882,27 @@ class WC_Order_Export_Admin {
821
function fix_table_links( $args ) {
822
$args[] = 'export_bulk_profile';
823
$args[] = 'ids';
824
return $args;
825
}
826
827
function must_run_ajax_methods() {
828
// wait admin ajax!
829
- $script_name = !empty($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] : $_SERVER['PHP_SELF'];
830
- if ( basename( $script_name ) != "admin-ajax.php" )
831
- return false;
832
// our method MUST BE called
833
- return isset($_REQUEST['action']) AND ($_REQUEST['action'] == "order_exporter" OR $_REQUEST['action'] == "order_exporter_run" );
834
}
835
836
public static function is_full_version() {
837
return defined( 'WOE_STORE_URL' );
838
- }
839
-
840
public static function user_can_add_custom_php() {
841
- return apply_filters('woe_user_can_add_custom_php', current_user_can('edit_themes') );
842
- }
843
-
844
}
30
31
//Add custom bulk export action in Woocomerce orders Table, modified for WP 4.7
32
add_filter( 'bulk_actions-edit-shop_order', array( $this, 'export_orders_bulk_action' ) );
33
+ add_filter( 'handle_bulk_actions-edit-shop_order', array( $this, 'export_orders_bulk_action_process' ), 10,
34
+ 3 );
35
+ add_action( 'admin_notices', array( $this, 'export_orders_bulk_action_notices' ) );
36
//do once
37
+ if ( ! get_option( $this->activation_notice_option ) ) {
38
+ add_action( 'admin_notices', array( $this, 'display_plugin_activated_message' ) );
39
+ }
40
+
41
//extra links in >Plugins
42
+ add_filter( 'plugin_action_links_' . WOE_PLUGIN_BASENAME, array( $this, 'add_action_links' ) );
43
+
44
// Add 'Export Status' orders page column header
45
add_filter( 'manage_edit-shop_order_columns', array( $this, 'add_order_status_column_header' ), 20 );
46
47
// Add 'Export Status' orders page column content
48
add_action( 'manage_shop_order_posts_custom_column', array( $this, 'add_order_status_column_content' ) );
49
50
+ if ( isset( $_GET['post_type'] ) && $_GET['post_type'] == 'shop_order' ) {
51
add_action( 'admin_print_styles', array( $this, 'add_order_status_column_style' ) );
52
}
53
}
54
55
+ $this->settings = self::load_main_settings();
56
57
//Pro active ?
58
+ if ( self::is_full_version() ) {
59
+ new WC_Order_Export_Zapier_Engine( $this->settings );
60
add_action( 'plugins_loaded', array( $this, 'load_textdomain' ) );
61
+ add_filter( 'cron_schedules', array( 'WC_Order_Export_Cron', 'create_custom_schedules' ), 999, 1 );
62
add_action( 'wc_export_cron_global', array( 'WC_Order_Export_Cron', 'wc_export_cron_global_f' ) );
63
64
//for direct calls
65
add_action( 'wp_ajax_order_exporter_run', array( $this, 'ajax_gate_guest' ) );
66
add_action( 'wp_ajax_nopriv_order_exporter_run', array( $this, 'ajax_gate_guest' ) );
67
+ $this->methods_allowed_for_guests = array( 'run_cron_jobs', 'run_one_job', 'run_one_scheduled_job' );
68
69
// order actions
70
+ add_action( 'woocommerce_order_status_changed', array( $this, 'wc_order_status_changed' ), 10, 3 );
71
// activate CRON hook if it was removed
72
+ add_action( 'wp_loaded', function () {
73
$all_jobs = WC_Order_Export_Manage::get_export_settings_collection( WC_Order_Export_Manage::EXPORT_SCHEDULE );
74
+ if ( $all_jobs ) {
75
WC_Order_Export_Cron::install_job();
76
+ }
77
} );
78
}
79
80
}
81
82
public function add_order_status_column_header( $columns ) {
83
+
84
+ if ( ! $this->settings['show_export_status_column'] ) {
85
return $columns;
86
+ }
87
+
88
$new_columns = array();
89
foreach ( $columns as $column_name => $column_info ) {
90
+ if ( 'order_actions' === $column_name OR 'wc_actions' === $column_name ) { // Woocommerce uses wc_actions since 3.3.0
91
+ $label = __( 'Export Status', 'woo-order-export-lite' );
92
$new_columns['woe_export_status'] = $label;
93
}
94
$new_columns[ $column_name ] = $column_info;
95
}
96
+
97
return $new_columns;
98
}
99
107
$is_exported = true;
108
}
109
110
+ if ( $is_exported ) {
111
echo '<span class="dashicons dashicons-yes" style="color: #2ea2cc"></span>';
112
} else {
113
echo '<span class="dashicons dashicons-minus"></span>';
122
123
public function install() {
124
//wp_clear_scheduled_hook( "wc_export_cron_global" ); //debug
125
+ if ( self::is_full_version() ) {
126
WC_Order_Export_Cron::install_job();
127
+ }
128
}
129
130
public function display_plugin_activated_message() {
131
?>
132
+ <div class="notice notice-success is-dismissible">
133
+ <p><?php _e( 'Advanced Order Export For WooCommerce is available <a href="admin.php?page=wc-order-export">on this page</a>.',
134
+ 'woo-order-export-lite' ); ?></p>
135
+ </div>
136
<?php
137
+ update_option( $this->activation_notice_option, true, false);
138
}
139
140
public function add_action_links( $links ) {
141
+ $mylinks = array(
142
+ '<a href="admin.php?page=wc-order-export">' . __( 'Settings', 'woo-order-export-lite' ) . '</a>',
143
+ '<a href="https://algolplus.com/plugins/documentation-order-export-woocommerce/" target="_blank">' . __( 'Docs',
144
+ 'woo-order-export-lite' ) . '</a>',
145
+ '<a href="https://algolplus.freshdesk.com" target="_blank">' . __( 'Support',
146
+ 'woo-order-export-lite' ) . '</a>',
147
);
148
+
149
+ return array_merge( $mylinks, $links );
150
}
151
152
public function deactivate() {
153
wp_clear_scheduled_hook( "wc_export_cron_global" );
154
delete_option( $this->activation_notice_option );
155
156
+ if ( self::is_full_version() ) {
157
//don't do it! updater call this function!
158
// WC_Order_Export_EDD::getInstance()->edd_woe_force_deactivate_license();
159
}
160
}
161
+
162
public static function uninstall() {
163
//delete_option( self::settings_name_common );
164
//WC_Order_Export_Manage::remove_settings();
167
static function load_main_settings() {
168
return array_merge(
169
array(
170
+ 'default_tab' => 'export',
171
+ 'cron_tasks_active' => '1',
172
+ 'show_export_status_column' => '1',
173
+ 'show_export_actions_in_bulk' => '1',
174
+ 'show_export_in_status_change_job' => '0',
175
+ 'autocomplete_products_max' => '10',
176
+ 'ajax_orders_per_step' => '30',
177
+ 'limit_button_test' => '1',
178
+ 'cron_key' => '1234',
179
+ 'ipn_url' => '',
180
+ 'zapier_api_key' => '12345678',
181
+ 'zapier_file_timeout' => 60,
182
),
183
get_option( self::settings_name_common, array() )
184
);
185
}
186
+
187
static function save_main_settings() {
188
// update main settings here!
189
+ $settings = filter_input_array( INPUT_POST, array(
190
+ 'default_tab' => FILTER_SANITIZE_STRING,
191
+ 'cron_tasks_active' => FILTER_VALIDATE_BOOLEAN,
192
+ 'show_export_status_column' => FILTER_VALIDATE_BOOLEAN,
193
+ 'show_export_actions_in_bulk' => FILTER_VALIDATE_BOOLEAN,
194
'show_export_in_status_change_job' => FILTER_VALIDATE_BOOLEAN,
195
+ 'autocomplete_products_max' => FILTER_VALIDATE_INT,
196
+ 'ajax_orders_per_step' => FILTER_VALIDATE_INT,
197
+ 'limit_button_test' => FILTER_SANITIZE_STRING,
198
+ 'cron_key' => FILTER_SANITIZE_STRING,
199
+ 'ipn_url' => FILTER_SANITIZE_STRING,
200
+ 'zapier_api_key' => FILTER_SANITIZE_STRING,
201
+ 'zapier_file_timeout' => FILTER_SANITIZE_NUMBER_INT,
202
) );
203
+ update_option( self::settings_name_common, $settings, false );
204
205
if ( isset( $settings['ipn_url'] ) ) {
206
+ update_option( WOE_IPN_URL_OPTION_KEY, $settings['ipn_url'], false );
207
}
208
}
209
210
211
function load_textdomain() {
212
$locale = apply_filters( 'plugin_locale', get_locale(), 'woo-order-export-lite' );
213
+ load_textdomain( 'woo-order-export-lite',
214
+ WP_LANG_DIR . '/woocommerce-order-export/woocommerce-order-export-' . $locale . '.mo' );
215
216
load_plugin_textdomain( 'woo-order-export-lite', false,
217
plugin_basename( dirname( dirname( __FILE__ ) ) ) . '/i18n/languages' );
218
}
219
220
public function add_menu() {
221
+ if ( apply_filters( 'woe_current_user_can_export', true ) ) {
222
+ if ( current_user_can( 'manage_woocommerce' ) ) {
223
+ add_submenu_page( 'woocommerce', __( 'Export Orders', 'woo-order-export-lite' ),
224
+ __( 'Export Orders', 'woo-order-export-lite' ), 'view_woocommerce_reports', 'wc-order-export',
225
+ array( $this, 'render_menu' ) );
226
+ } else // add after Sales Report!
227
+ {
228
+ add_menu_page( __( 'Export Orders', 'woo-order-export-lite' ),
229
+ __( 'Export Orders', 'woo-order-export-lite' ), 'view_woocommerce_reports', 'wc-order-export',
230
+ array( $this, 'render_menu' ), null, '55.7' );
231
+ }
232
}
233
}
234
235
public function render_menu() {
236
$this->render( 'main', array( 'WC_Order_Export' => $this, 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
237
+ $active_tab = isset( $_REQUEST['tab'] ) ? $_REQUEST['tab'] : $this->settings['default_tab'];
238
if ( method_exists( $this, 'render_tab_' . $active_tab ) ) {
239
$this->{'render_tab_' . $active_tab}();
240
}
244
$this->render( 'tab/export', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'WC_Order_Export' => $this ) );
245
}
246
247
+ public function render_tab_tools() {
248
$this->render( 'tab/tools', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'WC_Order_Export' => $this ) );
249
}
250
251
+ public function render_tab_settings() {
252
+ $this->render( 'tab/settings',
253
+ array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'settings' => $this->settings ) );
254
}
255
256
public function render_tab_license() {
257
$this->render( 'tab/license', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'WC_Order_Export' => $this ) );
258
}
259
260
+ public function render_tab_help() {
261
$this->render( 'tab/help', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'WC_Order_Export' => $this ) );
262
}
263
264
public function render_tab_order_actions() {
265
$wc_oe = isset( $_REQUEST['wc_oe'] ) ? $_REQUEST['wc_oe'] : '';
266
$ajaxurl = admin_url( 'admin-ajax.php' );
267
+ $mode = WC_Order_Export_Manage::EXPORT_ORDER_ACTION;
268
$all_items = WC_Order_Export_Manage::get_export_settings_collection( $mode );
269
$show = array(
270
+ 'date_filter' => $this->settings['show_export_in_status_change_job'],
271
+ 'export_button' => $this->settings['show_export_in_status_change_job'],
272
'export_button_plain' => $this->settings['show_export_in_status_change_job'],
273
+ 'preview_actions' => false,
274
+ 'destinations' => true,
275
+ 'schedule' => false,
276
+ 'sort_orders' => false,
277
+ 'order_filters' => true,
278
+ 'product_filters' => true,
279
+ 'customer_filters' => true,
280
+ 'billing_filters' => true,
281
+ 'shipping_filters' => true,
282
);
283
switch ( $wc_oe ) {
284
case 'add_action':
289
'id' => $next_id,
290
'WC_Order_Export' => $this,
291
'ajaxurl' => $ajaxurl,
292
+ 'show' => $show,
293
) );
294
+
295
return;
296
case 'edit_action':
297
+ if ( ! isset( $_REQUEST['action_id'] ) ) {
298
break;
299
+ }
300
+ $item_id = $_REQUEST['action_id'];
301
WC_Order_Export_Manage::$edit_existing_job = true;
302
+ $clone = isset( $_REQUEST['clone'] ) ? $_REQUEST['clone'] : '';
303
if ( $clone ) {
304
$item_id = WC_Order_Export_Manage::clone_export_settings( $mode, $item_id );
305
}
308
'id' => $item_id,
309
'WC_Order_Export' => $this,
310
'ajaxurl' => $ajaxurl,
311
+ 'show' => $show,
312
) );
313
+
314
return;
315
case 'delete':
316
+ if ( ! isset( $_REQUEST['action_id'] ) ) {
317
break;
318
+ }
319
+ $item_id = $_REQUEST['action_id'];
320
unset( $all_items[ $item_id ] );
321
WC_Order_Export_Manage::save_export_settings_collection( $mode, $all_items );
322
break;
323
case 'change_status':
324
+ if ( ! isset( $_REQUEST['action_id'] ) ) {
325
break;
326
+ }
327
+ $item_id = $_REQUEST['action_id'];
328
$all_items[ $item_id ]['active'] = $_REQUEST['status'];
329
WC_Order_Export_Manage::save_export_settings_collection( $mode, $all_items );
330
$url = remove_query_arg( array( 'wc_oe', 'action_id', 'status' ) );
331
wp_redirect( $url );
332
break;
333
case 'change_statuses':
334
+ if ( ! isset( $_REQUEST['chosen_order_actions'] ) AND ! isset( $_REQUEST['doaction'] ) AND - 1 == $_REQUEST['doaction'] ) {
335
break;
336
+ }
337
+ $chosen_order_actions = explode( ',', $_REQUEST['chosen_order_actions'] );
338
+ $doaction = $_REQUEST['doaction'];
339
340
foreach ( $chosen_order_actions as $order_action_id ) {
341
if ( 'activate' == $doaction ) {
351
wp_redirect( $url );
352
break;
353
}
354
+ $this->render( 'tab/order-actions',
355
+ array( 'ajaxurl' => $ajaxurl, 'WC_Order_Export' => $this, 'tab' => 'order_actions' ) );
356
}
357
358
public function render_tab_schedules() {
359
$wc_oe = isset( $_REQUEST['wc_oe'] ) ? $_REQUEST['wc_oe'] : '';
360
$ajaxurl = admin_url( 'admin-ajax.php' );
361
+ $mode = WC_Order_Export_Manage::EXPORT_SCHEDULE;
362
$all_jobs = WC_Order_Export_Manage::get_export_settings_collection( $mode );
363
+ $show = array(
364
+ 'date_filter' => true,
365
+ 'export_button' => true,
366
'export_button_plain' => true,
367
+ 'destinations' => true,
368
+ 'schedule' => true,
369
);
370
switch ( $wc_oe ) {
371
case 'add_schedule':
376
'id' => $next_id,
377
'WC_Order_Export' => $this,
378
'ajaxurl' => $ajaxurl,
379
+ 'show' => $show,
380
) );
381
+
382
return;
383
case 'edit_schedule':
384
+ if ( ! isset( $_REQUEST['schedule_id'] ) ) {
385
break;
386
+ }
387
+ $schedule_id = $_REQUEST['schedule_id'];
388
WC_Order_Export_Manage::$edit_existing_job = true;
389
+ $clone = isset( $_REQUEST['clone'] ) ? $_REQUEST['clone'] : '';
390
if ( $clone ) {
391
$schedule_id = WC_Order_Export_Manage::clone_export_settings( $mode, $schedule_id );
392
}
395
'id' => $schedule_id,
396
'WC_Order_Export' => $this,
397
'ajaxurl' => $ajaxurl,
398
+ 'show' => $show,
399
) );
400
+
401
return;
402
case 'delete_schedule':
403
+ if ( ! isset( $_REQUEST['schedule_id'] ) ) {
404
break;
405
+ }
406
+ $schedule_id = $_REQUEST['schedule_id'];
407
unset( $all_jobs[ $schedule_id ] );
408
WC_Order_Export_Manage::save_export_settings_collection( $mode, $all_jobs );
409
break;
410
case 'change_status_schedule':
411
+ if ( ! isset( $_REQUEST['schedule_id'] ) ) {
412
break;
413
+ }
414
+ $schedule_id = $_REQUEST['schedule_id'];
415
$all_jobs[ $schedule_id ]['active'] = $_REQUEST['status'];
416
WC_Order_Export_Manage::save_export_settings_collection( $mode, $all_jobs );
417
$url = remove_query_arg( array( 'wc_oe', 'schedule_id', 'status' ) );
418
wp_redirect( $url );
419
break;
420
case 'change_status_schedules':
421
+ if ( ! isset( $_REQUEST['chosen_schedules'] ) AND ! isset( $_REQUEST['doaction'] ) AND - 1 == $_REQUEST['doaction'] ) {
422
break;
423
+ }
424
+ $chosen_schedules = explode( ',', $_REQUEST['chosen_schedules'] );
425
+ $doaction = $_REQUEST['doaction'];
426
427
foreach ( $chosen_schedules as $schedule_id ) {
428
+ if ( 'activate' == $doaction ) {
429
+ $all_jobs[ $schedule_id ]['active'] = 1;
430
+ } elseif ( 'deactivate' == $doaction ) {
431
+ $all_jobs[ $schedule_id ]['active'] = 0;
432
+ } elseif ( 'delete' == $doaction ) {
433
+ unset( $all_jobs[ $schedule_id ] );
434
+ }
435
+ }
436
WC_Order_Export_Manage::save_export_settings_collection( $mode, $all_jobs );
437
$url = remove_query_arg( array( 'wc_oe', 'chosen_schedules', 'doaction' ) );
438
wp_redirect( $url );
442
}
443
444
public function render_tab_profiles() {
445
+ $wc_oe = isset( $_REQUEST['wc_oe'] ) ? $_REQUEST['wc_oe'] : '';
446
+ $ajaxurl = admin_url( 'admin-ajax.php' );
447
+ $mode = WC_Order_Export_Manage::EXPORT_PROFILE;
448
$all_items = WC_Order_Export_Manage::get_export_settings_collection( $mode );
449
+ $show = array(
450
+ 'date_filter' => true,
451
+ 'export_button' => true,
452
'export_button_plain' => true,
453
+ 'destinations' => true,
454
+ 'schedule' => false,
455
);
456
switch ( $wc_oe ) {
457
case 'add_profile':
462
'id' => $next_id,
463
'WC_Order_Export' => $this,
464
'ajaxurl' => $ajaxurl,
465
+ 'show' => $show,
466
) );
467
+
468
return;
469
case 'edit_profile':
470
+ if ( ! isset( $_REQUEST['profile_id'] ) ) {
471
break;
472
+ }
473
+ $profile_id = $_REQUEST['profile_id'];
474
WC_Order_Export_Manage::$edit_existing_job = true;
475
+ $clone = isset( $_REQUEST['clone'] ) ? $_REQUEST['clone'] : '';
476
if ( $clone ) {
477
$profile_id = WC_Order_Export_Manage::clone_export_settings( $mode, $profile_id );
478
}
481
'id' => $profile_id,
482
'WC_Order_Export' => $this,
483
'ajaxurl' => $ajaxurl,
484
+ 'show' => $show,
485
) );
486
+
487
return;
488
case 'copy_profile_to_scheduled':
489
$profile_id = isset( $_REQUEST['profile_id'] ) ? $_REQUEST['profile_id'] : '';
490
+ $schedule_id = WC_Order_Export_Manage::advanced_clone_export_settings( $profile_id, $mode,
491
+ WC_Order_Export_Manage::EXPORT_SCHEDULE );
492
+ $url = remove_query_arg( 'profile_id' );
493
+ $url = add_query_arg( 'tab', 'schedules', $url );
494
+ $url = add_query_arg( 'wc_oe', 'edit_schedule', $url );
495
+ $url = add_query_arg( 'schedule_id', $schedule_id, $url );
496
wp_redirect( $url );
497
break;
498
case 'copy_profile_to_actions':
499
$profile_id = isset( $_REQUEST['profile_id'] ) ? $_REQUEST['profile_id'] : '';
500
+ $schedule_id = WC_Order_Export_Manage::advanced_clone_export_settings( $profile_id, $mode,
501
+ WC_Order_Export_Manage::EXPORT_ORDER_ACTION );
502
+ $url = remove_query_arg( 'profile_id' );
503
+ $url = add_query_arg( 'tab', 'order_actions', $url );
504
+ $url = add_query_arg( 'wc_oe', 'edit_action', $url );
505
+ $url = add_query_arg( 'action_id', $schedule_id, $url );
506
wp_redirect( $url );
507
break;
508
case 'delete_profile':
509
+ if ( ! isset( $_REQUEST['profile_id'] ) ) {
510
break;
511
+ }
512
$profile_id = $_REQUEST['profile_id'];
513
unset( $all_items[ $profile_id ] );
514
WC_Order_Export_Manage::save_export_settings_collection( $mode, $all_items );
515
break;
516
case 'change_profile_statuses':
517
+ if ( ! isset( $_REQUEST['chosen_profiles'] ) AND ! isset( $_REQUEST['doaction'] ) AND - 1 == $_REQUEST['doaction'] ) {
518
break;
519
+ }
520
+ $chosen_profiles = explode( ',', $_REQUEST['chosen_profiles'] );
521
+ $doaction = $_REQUEST['doaction'];
522
523
foreach ( $chosen_profiles as $profile_id ) {
524
+ if ( 'activate' == $doaction ) {
525
+ $all_items[ $profile_id ]['use_as_bulk'] = 'on';
526
+ } elseif ( 'deactivate' == $doaction ) {
527
+ unset( $all_items[ $profile_id ]['use_as_bulk'] );
528
+ } elseif ( 'delete' == $doaction ) {
529
+ unset( $all_items[ $profile_id ] );
530
+ }
531
+ }
532
WC_Order_Export_Manage::save_export_settings_collection( $mode, $all_items );
533
$url = remove_query_arg( array( 'wc_oe', 'chosen_profiles', 'doaction' ) );
534
wp_redirect( $url );
537
538
//code to copy default settings as profile
539
$profiles = WC_Order_Export_Manage::get_export_settings_collection( $mode );
540
+ $free_job = WC_Order_Export_Manage::get_export_settings_collection( WC_Order_Export_Manage::EXPORT_NOW );
541
+ if ( empty( $profiles ) AND ! empty( $free_job ) ) {
542
+ $free_job['title'] = __( 'Copied from "Export now"', 'woo-order-export-lite' );
543
+ $free_job['mode'] = $mode;
544
+ $profiles[1] = $free_job;
545
+ update_option( WC_Order_Export_Manage::settings_name_profiles, $profiles, false );
546
}
547
548
$this->render( 'tab/profiles', array( 'ajaxurl' => $ajaxurl, 'WC_Order_Export' => $this ) );
555
wp_enqueue_style( 'jquery-style',
556