One Click Demo Import - Version 2.6.0

Version Description

Release Date - 21 July 2020

  • Improved code execution: not loading plugin code on frontend.
  • Fixed incorrect post and post meta import (unicode and other special characters were not escaped properly).
  • Fixed error (500 - internal error) for Widgets import on PHP 7.x.
  • Fixed PHP notices for manual demo import.
  • Fixed PHP warning if set_time_limit function is disabled.
  • Fixed links for switching manual and predefined import modes.
Download this release

Release Info

Developer capuderg
Plugin Icon 128x128 One Click Demo Import
Version 2.6.0
Comparing to
See all releases

Code changes from version 2.5.2 to 2.6.0

inc/Helpers.php CHANGED
@@ -433,11 +433,27 @@ class Helpers {
433
  'test_type' => false,
434
  );
435
 
436
- // Handle demo content and widgets file upload.
437
- $content_file_info = wp_handle_upload( $_FILES['content_file'], $upload_overrides );
438
- $widget_file_info = wp_handle_upload( $_FILES['widget_file'], $upload_overrides );
439
- $customizer_file_info = wp_handle_upload( $_FILES['customizer_file'], $upload_overrides );
440
- $redux_file_info = wp_handle_upload( $_FILES['redux_file'], $upload_overrides );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
441
 
442
  // Process content import file.
443
  if ( $content_file_info && ! isset( $content_file_info['error'] ) ) {
@@ -449,7 +465,7 @@ class Helpers {
449
  $log_added = self::append_to_file(
450
  sprintf(
451
  __( 'Content file was not uploaded. Error: %s', 'pt-ocdi' ),
452
- $widget_file_info['error']
453
  ),
454
  $log_file_path,
455
  esc_html__( 'Upload files' , 'pt-ocdi' )
433
  'test_type' => false,
434
  );
435
 
436
+ // Error data if the demo file was not provided.
437
+ $file_not_provided_error = array(
438
+ 'error' => esc_html__( 'No file provided.', 'pt-ocdi' )
439
+ );
440
+
441
+ // Handle demo file uploads.
442
+ $content_file_info = isset( $_FILES['content_file'] ) ?
443
+ wp_handle_upload( $_FILES['content_file'], $upload_overrides ) :
444
+ $file_not_provided_error;
445
+
446
+ $widget_file_info = isset( $_FILES['widget_file'] ) ?
447
+ wp_handle_upload( $_FILES['widget_file'], $upload_overrides ) :
448
+ $file_not_provided_error;
449
+
450
+ $customizer_file_info = isset( $_FILES['customizer_file'] ) ?
451
+ wp_handle_upload( $_FILES['customizer_file'], $upload_overrides ) :
452
+ $file_not_provided_error;
453
+
454
+ $redux_file_info = isset( $_FILES['customizer_file'] ) ?
455
+ wp_handle_upload( $_FILES['redux_file'], $upload_overrides ) :
456
+ $file_not_provided_error;
457
 
458
  // Process content import file.
459
  if ( $content_file_info && ! isset( $content_file_info['error'] ) ) {
465
  $log_added = self::append_to_file(
466
  sprintf(
467
  __( 'Content file was not uploaded. Error: %s', 'pt-ocdi' ),
468
+ $content_file_info['error']
469
  ),
470
  $log_file_path,
471
  esc_html__( 'Upload files' , 'pt-ocdi' )
inc/Importer.php CHANGED
@@ -118,7 +118,9 @@ class Importer {
118
  $this->microtime = microtime( true );
119
 
120
  // Increase PHP max execution time. Just in case, even though the AJAX calls are only 25 sec long.
121
- set_time_limit( apply_filters( 'pt-ocdi/set_time_limit_for_demo_data_import', 300 ) );
 
 
122
 
123
  // Disable import of authors.
124
  add_filter( 'wxr_importer.pre_process.user', '__return_false' );
118
  $this->microtime = microtime( true );
119
 
120
  // Increase PHP max execution time. Just in case, even though the AJAX calls are only 25 sec long.
121
+ if ( strpos( ini_get( 'disable_functions' ), 'set_time_limit' ) === false ) {
122
+ set_time_limit( apply_filters( 'pt-ocdi/set_time_limit_for_demo_data_import', 300 ) );
123
+ }
124
 
125
  // Disable import of authors.
126
  add_filter( 'wxr_importer.pre_process.user', '__return_false' );
inc/Logger.php CHANGED
@@ -7,7 +7,7 @@
7
 
8
  namespace OCDI;
9
 
10
- class Logger extends \ProteusThemes\WPContentImporter2\WPImporterLoggerCLI {
11
  /**
12
  * Variable for front-end error display.
13
  *
7
 
8
  namespace OCDI;
9
 
10
+ class Logger extends \AwesomeMotive\WPContentImporter2\WPImporterLoggerCLI {
11
  /**
12
  * Variable for front-end error display.
13
  *
inc/OneClickDemoImport.php CHANGED
@@ -152,7 +152,6 @@ class OneClickDemoImport {
152
  register_importer( $this->plugin_page_setup['menu_slug'], $this->plugin_page_setup['page_title'], $this->plugin_page_setup['menu_title'], apply_filters( 'pt-ocdi/plugin_page_display_callback_function', array( $this, 'display_plugin_page' ) ) );
153
  }
154
 
155
-
156
  /**
157
  * Plugin page display.
158
  * Output (HTML) is in another file.
@@ -441,6 +440,7 @@ class OneClickDemoImport {
441
  $this->log_file_path = empty( $data['log_file_path'] ) ? '' : $data['log_file_path'];
442
  $this->selected_index = empty( $data['selected_index'] ) ? 0 : $data['selected_index'];
443
  $this->selected_import_files = empty( $data['selected_import_files'] ) ? array() : $data['selected_import_files'];
 
444
  $this->before_import_executed = empty( $data['before_import_executed'] ) ? false : $data['before_import_executed'];
445
  $this->importer->set_importer_data( $data );
446
 
@@ -461,6 +461,7 @@ class OneClickDemoImport {
461
  'log_file_path' => $this->log_file_path,
462
  'selected_index' => $this->selected_index,
463
  'selected_import_files' => $this->selected_import_files,
 
464
  'before_import_executed' => $this->before_import_executed,
465
  );
466
  }
@@ -528,6 +529,10 @@ class OneClickDemoImport {
528
  * Get data from filters, after the theme has loaded and instantiate the importer.
529
  */
530
  public function setup_plugin_with_filter_data() {
 
 
 
 
531
  // Get info of import data files and filter it.
532
  $this->import_files = Helpers::validate_import_file_info( apply_filters( 'pt-ocdi/import_files', array() ) );
533
 
152
  register_importer( $this->plugin_page_setup['menu_slug'], $this->plugin_page_setup['page_title'], $this->plugin_page_setup['menu_title'], apply_filters( 'pt-ocdi/plugin_page_display_callback_function', array( $this, 'display_plugin_page' ) ) );
153
  }
154
 
 
155
  /**
156
  * Plugin page display.
157
  * Output (HTML) is in another file.
440
  $this->log_file_path = empty( $data['log_file_path'] ) ? '' : $data['log_file_path'];
441
  $this->selected_index = empty( $data['selected_index'] ) ? 0 : $data['selected_index'];
442
  $this->selected_import_files = empty( $data['selected_import_files'] ) ? array() : $data['selected_import_files'];
443
+ $this->import_files = empty( $data['import_files'] ) ? array() : $data['import_files'];
444
  $this->before_import_executed = empty( $data['before_import_executed'] ) ? false : $data['before_import_executed'];
445
  $this->importer->set_importer_data( $data );
446
 
461
  'log_file_path' => $this->log_file_path,
462
  'selected_index' => $this->selected_index,
463
  'selected_import_files' => $this->selected_import_files,
464
+ 'import_files' => $this->import_files,
465
  'before_import_executed' => $this->before_import_executed,
466
  );
467
  }
529
  * Get data from filters, after the theme has loaded and instantiate the importer.
530
  */
531
  public function setup_plugin_with_filter_data() {
532
+ if ( ! ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) ) {
533
+ return;
534
+ }
535
+
536
  // Get info of import data files and filter it.
537
  $this->import_files = Helpers::validate_import_file_info( apply_filters( 'pt-ocdi/import_files', array() ) );
538
 
inc/WXRImporter.php CHANGED
@@ -9,7 +9,7 @@
9
 
10
  namespace OCDI;
11
 
12
- class WXRImporter extends \ProteusThemes\WPContentImporter2\WXRImporter {
13
  /**
14
  * Constructor method.
15
  *
9
 
10
  namespace OCDI;
11
 
12
+ class WXRImporter extends \AwesomeMotive\WPContentImporter2\WXRImporter {
13
  /**
14
  * Constructor method.
15
  *
inc/WidgetImporter.php CHANGED
@@ -246,6 +246,13 @@ class WidgetImporter {
246
 
247
  // Assign widget instance to sidebar.
248
  $sidebars_widgets = get_option( 'sidebars_widgets' ); // Which sidebars have which widgets, get fresh every time.
 
 
 
 
 
 
 
249
  $new_instance_id = $id_base . '-' . $new_instance_id_number; // Use ID number from new widget instance.
250
  $sidebars_widgets[ $use_sidebar_id ][] = $new_instance_id; // Add new instance to sidebar.
251
  update_option( 'sidebars_widgets', $sidebars_widgets ); // Save the amended data.
246
 
247
  // Assign widget instance to sidebar.
248
  $sidebars_widgets = get_option( 'sidebars_widgets' ); // Which sidebars have which widgets, get fresh every time.
249
+
250
+ // Avoid rarely fatal error when the option is an empty string
251
+ // https://github.com/churchthemes/widget-importer-exporter/pull/11.
252
+ if ( ! $sidebars_widgets ) {
253
+ $sidebars_widgets = array();
254
+ }
255
+
256
  $new_instance_id = $id_base . '-' . $new_instance_id_number; // Use ID number from new widget instance.
257
  $sidebars_widgets[ $use_sidebar_id ][] = $new_instance_id; // Add new instance to sidebar.
258
  update_option( 'sidebars_widgets', $sidebars_widgets ); // Save the amended data.
languages/pt-ocdi.pot CHANGED
@@ -1,14 +1,15 @@
1
- # Copyright (C) 2018 ProteusThemes
2
  # This file is distributed under the GPL 2.0.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: One Click Demo Import 2.5.1\n"
6
- "Report-Msgid-Bugs-To: http://support.proteusthemes.com/\n"
 
7
  "POT-Creation-Date: 2016-05-14 09:53:17+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2018-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
  "Language-Team: LANGUAGE <LL@li.org>\n"
14
  "X-Generator: grunt-wp-i18n 0.5.4\n"
@@ -58,19 +59,19 @@ msgid ""
58
  "%6$s."
59
  msgstr ""
60
 
61
- #: inc/Helpers.php:197 inc/Helpers.php:240
62
  msgid ""
63
  "An error occurred while writing file to your server! Tried to write a file "
64
  "to: %s%s."
65
  msgstr ""
66
 
67
- #: inc/Helpers.php:274
68
  msgid ""
69
  "An error occurred while reading a file from your server! Tried reading file "
70
  "from path: %s%s."
71
  msgstr ""
72
 
73
- #: inc/Helpers.php:297
74
  msgid ""
75
  "This WordPress page does not have %sdirect%s write file access. This plugin "
76
  "needs it in order to save the demo import xml file to the upload directory "
@@ -81,128 +82,132 @@ msgstr ""
81
  msgid "One Click Demo Import"
82
  msgstr ""
83
 
84
- #: inc/Helpers.php:309 inc/OneClickDemoImport.php:138 views/plugin-page.php:120
85
- #: views/plugin-page.php:132
86
  msgid "Import Demo Data"
87
  msgstr ""
88
 
89
- #: inc/Helpers.php:321
90
  msgid ""
91
  "An error occurred while retrieving reading/writing permissions to your "
92
  "server (could not retrieve WP filesystem credentials)!"
93
  msgstr ""
94
 
95
- #: inc/Helpers.php:329
96
  msgid "Your WordPress login credentials don't allow to use WP_Filesystem!"
97
  msgstr ""
98
 
99
- #: inc/Helpers.php:369
100
  msgid "One Click Demo Import - "
101
  msgstr ""
102
 
103
- #: inc/Helpers.php:403
104
  msgid ""
105
  "%sYour user role isn't high enough. You don't have permission to import "
106
  "demo data.%s"
107
  msgstr ""
108
 
109
- #: inc/Helpers.php:449
 
 
 
 
110
  msgid "Content file was not uploaded. Error: %s"
111
  msgstr ""
112
 
113
- #: inc/Helpers.php:453 inc/Helpers.php:470 inc/Helpers.php:487
114
- #: inc/Helpers.php:498 inc/Helpers.php:518 inc/Helpers.php:526
115
  msgid "Upload files"
116
  msgstr ""
117
 
118
- #: inc/Helpers.php:466
119
  msgid "Widget file was not uploaded. Error: %s"
120
  msgstr ""
121
 
122
- #: inc/Helpers.php:483
123
  msgid "Customizer file was not uploaded. Error: %s"
124
  msgstr ""
125
 
126
- #: inc/Helpers.php:496
127
  msgid "Missing Redux option name! Please also enter the Redux option name!"
128
  msgstr ""
129
 
130
- #: inc/Helpers.php:514
131
  msgid "Redux file was not uploaded. Error: %s"
132
  msgstr ""
133
 
134
- #: inc/Helpers.php:524
135
  msgid "The import files were successfully uploaded!"
136
  msgstr ""
137
 
138
- #: inc/Helpers.php:550
139
  msgid "Initial max execution time = %s"
140
  msgstr ""
141
 
142
- #: inc/Helpers.php:554
143
  msgid ""
144
  "Files info:%1$sSite URL = %2$s%1$sData file = %3$s%1$sWidget file = "
145
  "%4$s%1$sCustomizer file = %5$s%1$sRedux files:%1$s%6$s"
146
  msgstr ""
147
 
148
- #: inc/Helpers.php:557 inc/Helpers.php:558 inc/Helpers.php:559
149
- #: inc/Helpers.php:560
150
  msgid "not defined!"
151
  msgstr ""
152
 
153
- #: inc/Importer.php:172
154
  msgid "New AJAX call!"
155
  msgstr ""
156
 
157
- #: inc/OneClickDemoImport.php:190
158
  msgid "No preview image defined for this import."
159
  msgstr ""
160
 
161
- #: inc/OneClickDemoImport.php:191
162
  msgid "Are you sure?"
163
  msgstr ""
164
 
165
- #: inc/OneClickDemoImport.php:192
166
  msgid "Cancel"
167
  msgstr ""
168
 
169
- #: inc/OneClickDemoImport.php:193
170
  msgid "Yes, import!"
171
  msgstr ""
172
 
173
- #: inc/OneClickDemoImport.php:194
174
  msgid "Selected demo import:"
175
  msgstr ""
176
 
177
- #: inc/OneClickDemoImport.php:241
178
  msgid "Manually uploaded files"
179
  msgstr ""
180
 
181
- #: inc/OneClickDemoImport.php:254 inc/OneClickDemoImport.php:265
182
  msgid "Downloaded files"
183
  msgstr ""
184
 
185
- #: inc/OneClickDemoImport.php:261
186
  msgid "The import files for: %s were successfully downloaded!"
187
  msgstr ""
188
 
189
- #: inc/OneClickDemoImport.php:270
190
  msgid "No import files specified!"
191
  msgstr ""
192
 
193
- #: inc/OneClickDemoImport.php:391
194
  msgid ""
195
  "Just used One Click Demo Import plugin and it was awesome! Thanks "
196
  "@ProteusThemes! #OCDI https://www.proteusthemes.com/"
197
  msgstr ""
198
 
199
- #: inc/OneClickDemoImport.php:394
200
  msgid ""
201
  "%1$s%6$sWasn't this a great One Click Demo Import experience?%7$s Created "
202
  "and maintained by %3$sProteusThemes%4$s. %2$s%5$sClick to Tweet!%4$s%8$s"
203
  msgstr ""
204
 
205
- #: inc/OneClickDemoImport.php:407
206
  msgid ""
207
  "%1$s%3$sThat's it, all done!%4$s%2$sThe demo import has finished. Please "
208
  "check your page and make sure that everything has imported correctly. If it "
@@ -210,7 +215,7 @@ msgid ""
210
  "it has done its job.%5$s"
211
  msgstr ""
212
 
213
- #: inc/OneClickDemoImport.php:418
214
  msgid ""
215
  "%1$sThe demo import has finished, but there were some import "
216
  "errors.%2$sMore details about the errors can be found in this %3$s%5$slog "
@@ -367,19 +372,19 @@ msgstr ""
367
  msgid "Widget already exists"
368
  msgstr ""
369
 
370
- #: inc/WidgetImporter.php:269
371
  msgid "Imported"
372
  msgstr ""
373
 
374
- #: inc/WidgetImporter.php:273
375
  msgid "Imported to Inactive"
376
  msgstr ""
377
 
378
- #: inc/WidgetImporter.php:279
379
  msgid "No Title"
380
  msgstr ""
381
 
382
- #: inc/WidgetImporter.php:326
383
  msgid "No results for widget import!"
384
  msgstr ""
385
 
@@ -391,109 +396,109 @@ msgid ""
391
  "PHP: %2$s%1$s%3$s"
392
  msgstr ""
393
 
394
- #: views/plugin-page.php:31
395
  msgid ""
396
  "%sWarning: your server is using %sPHP safe mode%s. This means that you "
397
  "might experience server timeout errors.%s"
398
  msgstr ""
399
 
400
- #: views/plugin-page.php:44
401
  msgid "Before you begin, make sure all the required plugins are activated."
402
  msgstr ""
403
 
404
- #: views/plugin-page.php:49
405
  msgid ""
406
  "Importing demo data (post, pages, images, theme settings, ...) is the "
407
  "easiest way to setup your theme."
408
  msgstr ""
409
 
410
- #: views/plugin-page.php:50
411
  msgid ""
412
  "It will allow you to quickly edit everything instead of creating content "
413
  "from scratch."
414
  msgstr ""
415
 
416
- #: views/plugin-page.php:55
417
  msgid "When you import the data, the following things might happen:"
418
  msgstr ""
419
 
420
- #: views/plugin-page.php:58
421
  msgid ""
422
  "No existing posts, pages, categories, images, custom post types or any "
423
  "other data will be deleted or modified."
424
  msgstr ""
425
 
426
- #: views/plugin-page.php:59
427
  msgid ""
428
  "Posts, pages, images, widgets, menus and other theme settings will get "
429
  "imported."
430
  msgstr ""
431
 
432
- #: views/plugin-page.php:60
433
  msgid ""
434
  "Please click on the Import button only once and wait, it can take a couple "
435
  "of minutes."
436
  msgstr ""
437
 
438
- #: views/plugin-page.php:65
439
  msgid "Switch to manual import!"
440
  msgstr ""
441
 
442
- #: views/plugin-page.php:67
443
  msgid "Switch back to theme predefined imports!"
444
  msgstr ""
445
 
446
- #: views/plugin-page.php:83
447
  msgid ""
448
  "There are no predefined import files available in this theme. Please upload "
449
  "the import files manually!"
450
  msgstr ""
451
 
452
- #: views/plugin-page.php:90
453
  msgid "Manual demo files upload"
454
  msgstr ""
455
 
456
- #: views/plugin-page.php:93
457
  msgid "Choose a XML file for content import:"
458
  msgstr ""
459
 
460
- #: views/plugin-page.php:98
461
  msgid "Choose a WIE or JSON file for widget import:"
462
  msgstr ""
463
 
464
- #: views/plugin-page.php:103
465
  msgid "Choose a DAT file for customizer import:"
466
  msgstr ""
467
 
468
- #: views/plugin-page.php:109
469
  msgid "Choose a JSON file for Redux import:"
470
  msgstr ""
471
 
472
- #: views/plugin-page.php:112
473
  msgid "Enter the Redux option name:"
474
  msgstr ""
475
 
476
- #: views/plugin-page.php:147
477
  msgid "All"
478
  msgstr ""
479
 
480
- #: views/plugin-page.php:154
481
  msgid "Search demos..."
482
  msgstr ""
483
 
484
- #: views/plugin-page.php:175
485
  msgid "No preview image."
486
  msgstr ""
487
 
488
- #: views/plugin-page.php:180
489
  msgid "Import"
490
  msgstr ""
491
 
492
- #: views/plugin-page.php:182
493
  msgid "Preview"
494
  msgstr ""
495
 
496
- #: views/plugin-page.php:195
497
  msgid "Importing, please wait!"
498
  msgstr ""
499
 
1
+ # Copyright (C) 2020 Awesome Motive
2
  # This file is distributed under the GPL 2.0.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: One Click Demo Import 2.6.0\n"
6
+ "Report-Msgid-Bugs-To: "
7
+ "https://wordpress.org/support/plugin/one-click-demo-import/\n"
8
  "POT-Creation-Date: 2016-05-14 09:53:17+00:00\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=utf-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
+ "PO-Revision-Date: 2020-MO-DA HO:MI+ZONE\n"
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
15
  "X-Generator: grunt-wp-i18n 0.5.4\n"
59
  "%6$s."
60
  msgstr ""
61
 
62
+ #: inc/Helpers.php:199 inc/Helpers.php:242
63
  msgid ""
64
  "An error occurred while writing file to your server! Tried to write a file "
65
  "to: %s%s."
66
  msgstr ""
67
 
68
+ #: inc/Helpers.php:276
69
  msgid ""
70
  "An error occurred while reading a file from your server! Tried reading file "
71
  "from path: %s%s."
72
  msgstr ""
73
 
74
+ #: inc/Helpers.php:299
75
  msgid ""
76
  "This WordPress page does not have %sdirect%s write file access. This plugin "
77
  "needs it in order to save the demo import xml file to the upload directory "
82
  msgid "One Click Demo Import"
83
  msgstr ""
84
 
85
+ #: inc/Helpers.php:311 inc/OneClickDemoImport.php:138 views/plugin-page.php:124
86
+ #: views/plugin-page.php:136
87
  msgid "Import Demo Data"
88
  msgstr ""
89
 
90
+ #: inc/Helpers.php:323
91
  msgid ""
92
  "An error occurred while retrieving reading/writing permissions to your "
93
  "server (could not retrieve WP filesystem credentials)!"
94
  msgstr ""
95
 
96
+ #: inc/Helpers.php:331
97
  msgid "Your WordPress login credentials don't allow to use WP_Filesystem!"
98
  msgstr ""
99
 
100
+ #: inc/Helpers.php:371
101
  msgid "One Click Demo Import - "
102
  msgstr ""
103
 
104
+ #: inc/Helpers.php:405
105
  msgid ""
106
  "%sYour user role isn't high enough. You don't have permission to import "
107
  "demo data.%s"
108
  msgstr ""
109
 
110
+ #: inc/Helpers.php:438
111
+ msgid "No file provided."
112
+ msgstr ""
113
+
114
+ #: inc/Helpers.php:467
115
  msgid "Content file was not uploaded. Error: %s"
116
  msgstr ""
117
 
118
+ #: inc/Helpers.php:471 inc/Helpers.php:488 inc/Helpers.php:505
119
+ #: inc/Helpers.php:516 inc/Helpers.php:536 inc/Helpers.php:544
120
  msgid "Upload files"
121
  msgstr ""
122
 
123
+ #: inc/Helpers.php:484
124
  msgid "Widget file was not uploaded. Error: %s"
125
  msgstr ""
126
 
127
+ #: inc/Helpers.php:501
128
  msgid "Customizer file was not uploaded. Error: %s"
129
  msgstr ""
130
 
131
+ #: inc/Helpers.php:514
132
  msgid "Missing Redux option name! Please also enter the Redux option name!"
133
  msgstr ""
134
 
135
+ #: inc/Helpers.php:532
136
  msgid "Redux file was not uploaded. Error: %s"
137
  msgstr ""
138
 
139
+ #: inc/Helpers.php:542
140
  msgid "The import files were successfully uploaded!"
141
  msgstr ""
142
 
143
+ #: inc/Helpers.php:568
144
  msgid "Initial max execution time = %s"
145
  msgstr ""
146
 
147
+ #: inc/Helpers.php:572
148
  msgid ""
149
  "Files info:%1$sSite URL = %2$s%1$sData file = %3$s%1$sWidget file = "
150
  "%4$s%1$sCustomizer file = %5$s%1$sRedux files:%1$s%6$s"
151
  msgstr ""
152
 
153
+ #: inc/Helpers.php:575 inc/Helpers.php:576 inc/Helpers.php:577
154
+ #: inc/Helpers.php:578
155
  msgid "not defined!"
156
  msgstr ""
157
 
158
+ #: inc/Importer.php:174
159
  msgid "New AJAX call!"
160
  msgstr ""
161
 
162
+ #: inc/OneClickDemoImport.php:189
163
  msgid "No preview image defined for this import."
164
  msgstr ""
165
 
166
+ #: inc/OneClickDemoImport.php:190
167
  msgid "Are you sure?"
168
  msgstr ""
169
 
170
+ #: inc/OneClickDemoImport.php:191
171
  msgid "Cancel"
172
  msgstr ""
173
 
174
+ #: inc/OneClickDemoImport.php:192
175
  msgid "Yes, import!"
176
  msgstr ""
177
 
178
+ #: inc/OneClickDemoImport.php:193
179
  msgid "Selected demo import:"
180
  msgstr ""
181
 
182
+ #: inc/OneClickDemoImport.php:240
183
  msgid "Manually uploaded files"
184
  msgstr ""
185
 
186
+ #: inc/OneClickDemoImport.php:253 inc/OneClickDemoImport.php:264
187
  msgid "Downloaded files"
188
  msgstr ""
189
 
190
+ #: inc/OneClickDemoImport.php:260
191
  msgid "The import files for: %s were successfully downloaded!"
192
  msgstr ""
193
 
194
+ #: inc/OneClickDemoImport.php:269
195
  msgid "No import files specified!"
196
  msgstr ""
197
 
198
+ #: inc/OneClickDemoImport.php:390
199
  msgid ""
200
  "Just used One Click Demo Import plugin and it was awesome! Thanks "
201
  "@ProteusThemes! #OCDI https://www.proteusthemes.com/"
202
  msgstr ""
203
 
204
+ #: inc/OneClickDemoImport.php:393
205
  msgid ""
206
  "%1$s%6$sWasn't this a great One Click Demo Import experience?%7$s Created "
207
  "and maintained by %3$sProteusThemes%4$s. %2$s%5$sClick to Tweet!%4$s%8$s"
208
  msgstr ""
209
 
210
+ #: inc/OneClickDemoImport.php:406
211
  msgid ""
212
  "%1$s%3$sThat's it, all done!%4$s%2$sThe demo import has finished. Please "
213
  "check your page and make sure that everything has imported correctly. If it "
215
  "it has done its job.%5$s"
216
  msgstr ""
217
 
218
+ #: inc/OneClickDemoImport.php:417
219
  msgid ""
220
  "%1$sThe demo import has finished, but there were some import "
221
  "errors.%2$sMore details about the errors can be found in this %3$s%5$slog "
372
  msgid "Widget already exists"
373
  msgstr ""
374
 
375
+ #: inc/WidgetImporter.php:276
376
  msgid "Imported"
377
  msgstr ""
378
 
379
+ #: inc/WidgetImporter.php:280
380
  msgid "Imported to Inactive"
381
  msgstr ""
382
 
383
+ #: inc/WidgetImporter.php:286
384
  msgid "No Title"
385
  msgstr ""
386
 
387
+ #: inc/WidgetImporter.php:333
388
  msgid "No results for widget import!"
389
  msgstr ""
390
 
396
  "PHP: %2$s%1$s%3$s"
397
  msgstr ""
398
 
399
+ #: views/plugin-page.php:35
400
  msgid ""
401
  "%sWarning: your server is using %sPHP safe mode%s. This means that you "
402
  "might experience server timeout errors.%s"
403
  msgstr ""
404
 
405
+ #: views/plugin-page.php:48
406
  msgid "Before you begin, make sure all the required plugins are activated."
407
  msgstr ""
408
 
409
+ #: views/plugin-page.php:53
410
  msgid ""
411
  "Importing demo data (post, pages, images, theme settings, ...) is the "
412
  "easiest way to setup your theme."
413
  msgstr ""
414
 
415
+ #: views/plugin-page.php:54
416
  msgid ""
417
  "It will allow you to quickly edit everything instead of creating content "
418
  "from scratch."
419
  msgstr ""
420
 
421
+ #: views/plugin-page.php:59
422
  msgid "When you import the data, the following things might happen:"
423
  msgstr ""
424
 
425
+ #: views/plugin-page.php:62
426
  msgid ""
427
  "No existing posts, pages, categories, images, custom post types or any "
428
  "other data will be deleted or modified."
429
  msgstr ""
430
 
431
+ #: views/plugin-page.php:63
432
  msgid ""
433
  "Posts, pages, images, widgets, menus and other theme settings will get "
434
  "imported."
435
  msgstr ""
436
 
437
+ #: views/plugin-page.php:64
438
  msgid ""
439
  "Please click on the Import button only once and wait, it can take a couple "
440
  "of minutes."
441
  msgstr ""
442
 
443
+ #: views/plugin-page.php:69
444
  msgid "Switch to manual import!"
445
  msgstr ""
446
 
447
+ #: views/plugin-page.php:71
448
  msgid "Switch back to theme predefined imports!"
449
  msgstr ""
450
 
451
+ #: views/plugin-page.php:87
452
  msgid ""
453
  "There are no predefined import files available in this theme. Please upload "
454
  "the import files manually!"
455
  msgstr ""
456
 
457
+ #: views/plugin-page.php:94
458
  msgid "Manual demo files upload"
459
  msgstr ""
460
 
461
+ #: views/plugin-page.php:97
462
  msgid "Choose a XML file for content import:"
463
  msgstr ""
464
 
465
+ #: views/plugin-page.php:102
466
  msgid "Choose a WIE or JSON file for widget import:"
467
  msgstr ""
468
 
469
+ #: views/plugin-page.php:107
470
  msgid "Choose a DAT file for customizer import:"
471
  msgstr ""
472
 
473
+ #: views/plugin-page.php:113
474
  msgid "Choose a JSON file for Redux import:"
475
  msgstr ""
476
 
477
+ #: views/plugin-page.php:116
478
  msgid "Enter the Redux option name:"
479
  msgstr ""
480
 
481
+ #: views/plugin-page.php:151
482
  msgid "All"
483
  msgstr ""
484
 
485
+ #: views/plugin-page.php:158
486
  msgid "Search demos..."
487
  msgstr ""
488
 
489
+ #: views/plugin-page.php:179
490
  msgid "No preview image."
491
  msgstr ""
492
 
493
+ #: views/plugin-page.php:184
494
  msgid "Import"
495
  msgstr ""
496
 
497
+ #: views/plugin-page.php:186
498
  msgid "Preview"
499
  msgstr ""
500
 
501
+ #: views/plugin-page.php:199
502
  msgid "Importing, please wait!"
503
  msgstr ""
504
 
one-click-demo-import.php CHANGED
@@ -4,7 +4,7 @@
4
  Plugin Name: One Click Demo Import
5
  Plugin URI: https://wordpress.org/plugins/one-click-demo-import/
6
  Description: Import your content, widgets and theme settings with one click. Theme authors! Enable simple demo import for your theme demo data.
7
- Version: 2.5.2
8
  Author: ProteusThemes
9
  Author URI: http://www.proteusthemes.com
10
  License: GPL3
4
  Plugin Name: One Click Demo Import
5
  Plugin URI: https://wordpress.org/plugins/one-click-demo-import/
6
  Description: Import your content, widgets and theme settings with one click. Theme authors! Enable simple demo import for your theme demo data.
7
+ Version: 2.6.0
8
  Author: ProteusThemes
9
  Author URI: http://www.proteusthemes.com
10
  License: GPL3
readme.txt CHANGED
@@ -1,9 +1,10 @@
1
  === One Click Demo Import ===
2
- Contributors: capuderg, cyman, Prelc, proteusthemes
3
  Tags: import, content, demo, data, widgets, settings, redux, theme options
4
- Requires at least: 4.0.0
5
- Tested up to: 5.2.2
6
- Stable tag: 2.5.2
 
7
  License: GPLv3 or later
8
 
9
  Import your demo content, widgets and theme settings with one click. Theme authors! Enable simple demo import for your theme demo data.
@@ -16,15 +17,13 @@ The best feature of this plugin is, that theme authors can define import files i
16
  >
17
  > Setup One Click Demo Imports for your theme and your users will thank you for it!
18
  >
19
- > [Follow this easy guide on how to setup this plugin for your themes!](http://proteusthemes.github.io/one-click-demo-import/)
20
- >
21
- > Also [sign up to the newsletter](http://proteusthemes.github.io/one-click-demo-import/#ocdi-newsletter-signup), so we can inform you about any updates, changes or improvements.
22
 
23
  > **Are you a theme user?**
24
  >
25
- > Contact the author of your theme and [let them know about this plugin](http://proteusthemes.github.io/one-click-demo-import/theme-users.html). Theme authors can make any theme compatible with this plugin in 15 minutes and make it much more user-friendly.
26
  >
27
- > "[Where can I find the contact of the theme author?](http://proteusthemes.github.io/one-click-demo-import/theme-users.html)"
28
 
29
  This plugin will create a submenu page under Appearance with the title **Import demo data**.
30
 
@@ -38,7 +37,7 @@ NOTE: There is no setting to "connect" authors from the demo import file to the
38
 
39
  **Do you want to contribute?**
40
 
41
- Please refer to the official [GitHub repository](https://github.com/proteusthemes/one-click-demo-import) of this plugin.
42
 
43
  == Installation ==
44
 
@@ -383,7 +382,7 @@ This happens, because your hosting server is using a very old version of PHP. Th
383
 
384
  = Issues with the import, that we can't fix in the plugin =
385
 
386
- Please visit this [docs page](https://github.com/proteusthemes/one-click-demo-import/blob/master/docs/import-problems.md), for more answers to issues with importing data.
387
 
388
  == Screenshots ==
389
 
@@ -393,6 +392,17 @@ Please visit this [docs page](https://github.com/proteusthemes/one-click-demo-im
393
 
394
  == Changelog ==
395
 
 
 
 
 
 
 
 
 
 
 
 
396
  = 2.5.2 =
397
 
398
  *Release Date - 29 July 2019*
1
  === One Click Demo Import ===
2
+ Contributors: smub, proteusthemes
3
  Tags: import, content, demo, data, widgets, settings, redux, theme options
4
+ Requires at least: 4.0
5
+ Tested up to: 5.4
6
+ Requires PHP: 5.3.2
7
+ Stable tag: 2.6.0
8
  License: GPLv3 or later
9
 
10
  Import your demo content, widgets and theme settings with one click. Theme authors! Enable simple demo import for your theme demo data.
17
  >
18
  > Setup One Click Demo Imports for your theme and your users will thank you for it!
19
  >
20
+ > [Follow this easy guide on how to setup this plugin for your themes!](http://awesomemotive.github.io/one-click-demo-import/)
 
 
21
 
22
  > **Are you a theme user?**
23
  >
24
+ > Contact the author of your theme and [let them know about this plugin](http://awesomemotive.github.io/one-click-demo-import/theme-users.html). Theme authors can make any theme compatible with this plugin in 15 minutes and make it much more user-friendly.
25
  >
26
+ > "[Where can I find the contact of the theme author?](http://awesomemotive.github.io/one-click-demo-import/theme-users.html)"
27
 
28
  This plugin will create a submenu page under Appearance with the title **Import demo data**.
29
 
37
 
38
  **Do you want to contribute?**
39
 
40
+ Please refer to the official [GitHub repository](https://github.com/awesomemotive/one-click-demo-import) of this plugin.
41
 
42
  == Installation ==
43
 
382
 
383
  = Issues with the import, that we can't fix in the plugin =
384
 
385
+ Please visit this [docs page](https://github.com/awesomemotive/one-click-demo-import/blob/master/docs/import-problems.md), for more answers to issues with importing data.
386
 
387
  == Screenshots ==
388
 
392
 
393
  == Changelog ==
394
 
395
+ = 2.6.0 =
396
+
397
+ *Release Date - 21 July 2020*
398
+
399
+ * Improved code execution: not loading plugin code on frontend.
400
+ * Fixed incorrect post and post meta import (unicode and other special characters were not escaped properly).
401
+ * Fixed error (500 - internal error) for Widgets import on PHP 7.x.
402
+ * Fixed PHP notices for manual demo import.
403
+ * Fixed PHP warning if `set_time_limit` function is disabled.
404
+ * Fixed links for switching manual and predefined import modes.
405
+
406
  = 2.5.2 =
407
 
408
  *Release Date - 29 July 2019*
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit1dc3b7695346d0ca54da2c4b66963a38::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInitef3a658a88d521398d72929dc54fa111::getLoader();
vendor/awesomemotive/wp-content-importer-v2/README.md ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # WP content importer used in OCDI
2
+
3
+ List of files from the [original repo](https://github.com/humanmade/WordPress-Importer/):
4
+
5
+ - class-logger-cli.php,
6
+ - class-logger.php,
7
+ - class-wxr-importer.php
8
+
9
+
10
+ One click demo import plugin page: https://wordpress.org/plugins/one-click-demo-import/
11
+
12
+ One click demo import github page: https://github.com/awesomemotive/one-click-demo-import
13
+
14
+ ## Changelog
15
+
16
+ *July 21st 2020*
17
+ - Fixed incorrect post meta import.
18
+
19
+ *July 14th 2020*
20
+ - Fixed incorrect post and post meta import (unicode and other special characters were not escaped properly).
21
+
22
+ *February 7th 2018*
23
+ - Clean up the WXRImporter code
24
+ - Created a "wrapper" class `Importer.php` with additional functionality (importing by smaller parts -> users, categories, tags, terms and posts)
25
+ - tagging version 2.0
26
+
27
+ *October 29th 2016*
28
+
29
+ - Cleaned up this forked repo, to only include the thing we need in the OCDI plugin.
30
+ - Changed the class names and use psr-4 autoloading in composer.json
31
+
32
+ *October 26th 2016*
33
+
34
+ - made a fork from the original repo
35
+ - merged a pull request for "term meta data" from the original repo: https://github.com/humanmade/WordPress-Importer/pull/18
vendor/awesomemotive/wp-content-importer-v2/composer.json ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "awesomemotive/wp-content-importer-v2",
3
+ "description": "Improved WP content importer used in OCDI plugin.",
4
+ "keywords": ["wp", "wordpress", "awesomemotive", "theme", "import", "content"],
5
+ "license": "GPL-2.0+",
6
+ "authors": [
7
+ {
8
+ "name": "Gregor Capuder",
9
+ "email": "capuderg@gmail.com"
10
+ },
11
+ {
12
+ "name": "Primoz Cigler",
13
+ "email": "primoz@proteusnet.com"
14
+ },
15
+ {
16
+ "name" : "Humanmade contributors",
17
+ "homepage" : "https://github.com/humanmade/WordPress-Importer/graphs/contributors"
18
+ }
19
+ ],
20
+ "autoload": {
21
+ "psr-4": {
22
+ "AwesomeMotive\\WPContentImporter2\\": "src/"
23
+ }
24
+ }
25
+ }
vendor/awesomemotive/wp-content-importer-v2/src/Importer.php ADDED
@@ -0,0 +1,629 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The main importer class, extending the slightly modified WP importer 2.0 class WXRImporter
4
+ */
5
+
6
+ namespace AwesomeMotive\WPContentImporter2;
7
+
8
+ use XMLReader;
9
+
10
+ class Importer extends WXRImporter {
11
+
12
+ /**
13
+ * Time in milliseconds, marking the beginning of the import.
14
+ *
15
+ * @var float
16
+ */
17
+ private $start_time;
18
+
19
+ /**
20
+ * Importer constructor.
21
+ * Look at the parent constructor for the options parameters.
22
+ *
23
+ * @param array $options The importer options.
24
+ * @param object $logger The logger object.
25
+ */
26
+ public function __construct( $options = array(), $logger = null ) {
27
+ parent::__construct( $options );
28
+
29
+ $this->set_logger( $logger );
30
+
31
+ // Check, if a new AJAX request is required.
32
+ add_filter( 'wxr_importer.pre_process.post', array( $this, 'new_ajax_request_maybe' ) );
33
+
34
+ // WooCommerce product attributes registration.
35
+ if ( class_exists( 'WooCommerce' ) ) {
36
+ add_filter( 'wxr_importer.pre_process.term', array( $this, 'woocommerce_product_attributes_registration' ), 10, 1 );
37
+ }
38
+ }
39
+
40
+ /**
41
+ * Get the XML reader for the file.
42
+ *
43
+ * @param string $file Path to the XML file.
44
+ *
45
+ * @return XMLReader|boolean Reader instance on success, false otherwise.
46
+ */
47
+ protected function get_reader( $file ) {
48
+ // Avoid loading external entities for security
49
+ $old_value = null;
50
+ if ( function_exists( 'libxml_disable_entity_loader' ) ) {
51
+ // $old_value = libxml_disable_entity_loader( true );
52
+ }
53
+
54
+ if ( ! class_exists( 'XMLReader' ) ) {
55
+ $this->logger->critical( __( 'The XMLReader class is missing! Please install the XMLReader PHP extension on your server', 'wordpress-importer' ) );
56
+
57
+ return false;
58
+ }
59
+
60
+ $reader = new XMLReader();
61
+ $status = $reader->open( $file );
62
+
63
+ if ( ! is_null( $old_value ) ) {
64
+ // libxml_disable_entity_loader( $old_value );
65
+ }
66
+
67
+ if ( ! $status ) {
68
+ $this->logger->error( __( 'Could not open the XML file for parsing!', 'wordpress-importer' ) );
69
+
70
+ return false;
71
+ }
72
+
73
+ return $reader;
74
+ }
75
+
76
+ /**
77
+ * Get the basic import content data.
78
+ * Which elements are present in this import file (check possible elements in the $data variable)?
79
+ *
80
+ * @param $file
81
+ *
82
+ * @return array|bool
83
+ */
84
+ public function get_basic_import_content_data( $file ) {
85
+ $data = array(
86
+ 'users' => false,
87
+ 'categories' => false,
88
+ 'tags' => false,
89
+ 'terms' => false,
90
+ 'posts' => false,
91
+ );
92
+
93
+ // Get the XML reader and open the file.
94
+ $reader = $this->get_reader( $file );
95
+
96
+ if ( empty( $reader ) ) {
97
+ return false;
98
+ }
99
+
100
+ // Start parsing!
101
+ while ( $reader->read() ) {
102
+ // Only deal with element opens.
103
+ if ( $reader->nodeType !== XMLReader::ELEMENT ) {
104
+ continue;
105
+ }
106
+
107
+ switch ( $reader->name ) {
108
+ case 'wp:author':
109
+ // Skip, if the users were already detected.
110
+ if ( $data['users'] ) {
111
+ $reader->next();
112
+ break;
113
+ }
114
+
115
+ $node = $reader->expand();
116
+ $parsed = $this->parse_author_node( $node );
117
+
118
+ // Skip, if there was an error in parsing the author node.
119
+ if ( is_wp_error( $parsed ) ) {
120
+ $reader->next();
121
+ break;
122
+ }
123
+
124
+ $data['users'] = true;
125
+
126
+ // Handled everything in this node, move on to the next.
127
+ $reader->next();
128
+ break;
129
+
130
+ case 'item':
131
+ // Skip, if the posts were already detected.
132
+ if ( $data['posts'] ) {
133
+ $reader->next();
134
+ break;
135
+ }
136
+
137
+ $node = $reader->expand();
138
+ $parsed = $this->parse_post_node( $node );
139
+
140
+ // Skip, if there was an error in parsing the item node.
141
+ if ( is_wp_error( $parsed ) ) {
142
+ $reader->next();
143
+ break;
144
+ }
145
+
146
+ $data['posts'] = true;
147
+
148
+ // Handled everything in this node, move on to the next
149
+ $reader->next();
150
+ break;
151
+
152
+ case 'wp:category':
153
+ $data['categories'] = true;
154
+
155
+ // Handled everything in this node, move on to the next
156
+ $reader->next();
157
+ break;
158
+ case 'wp:tag':
159
+ $data['tags'] = true;
160
+
161
+ // Handled everything in this node, move on to the next
162
+ $reader->next();
163
+ break;
164
+ case 'wp:term':
165
+ $data['terms'] = true;
166
+
167
+ // Handled everything in this node, move on to the next
168
+ $reader->next();
169
+ break;
170
+ }
171
+ }
172
+
173
+ return $data;
174
+ }
175
+
176
+
177
+ /**
178
+ * Get the number of posts (posts, pages, CPT, attachments), that the import file has.
179
+ *
180
+ * @param $file
181
+ *
182
+ * @return int
183
+ */
184
+ public function get_number_of_posts_to_import( $file ) {
185
+ $reader = $this->get_reader( $file );
186
+ $counter = 0;
187
+
188
+ if ( empty( $reader ) ) {
189
+ return $counter;
190
+ }
191
+
192
+ // Start parsing!
193
+ while ( $reader->read() ) {
194
+ // Only deal with element opens.
195
+ if ( $reader->nodeType !== XMLReader::ELEMENT ) {
196
+ continue;
197
+ }
198
+
199
+ if ( 'item' == $reader->name ) {
200
+ $node = $reader->expand();
201
+ $parsed = $this->parse_post_node( $node );
202
+
203
+ // Skip, if there was an error in parsing the item node.
204
+ if ( is_wp_error( $parsed ) ) {
205
+ $reader->next();
206
+ continue;
207
+ }
208
+
209
+ $counter++;
210
+ }
211
+ }
212
+
213
+ return $counter;
214
+ }
215
+
216
+ /**
217
+ * The main controller for the actual import stage.
218
+ *
219
+ * @param string $file Path to the WXR file for importing.
220
+ * @param array $options Import options (which parts to import).
221
+ *
222
+ * @return boolean
223
+ */
224
+ public function import( $file, $options = array() ) {
225
+ add_filter( 'import_post_meta_key', array( $this, 'is_valid_meta_key' ) );
226
+ add_filter( 'http_request_timeout', array( &$this, 'bump_request_timeout' ) );
227
+
228
+ // Start the import timer.
229
+ $this->start_time = microtime( true );
230
+
231
+ // Set the existing import data, from previous AJAX call, if any.
232
+ $this->restore_import_data_transient();
233
+
234
+ // Set the import options defaults.
235
+ if ( empty( $options ) ) {
236
+ $options = array(
237
+ 'users' => false,
238
+ 'categories' => true,
239
+ 'tags' => true,
240
+ 'terms' => true,
241
+ 'posts' => true,
242
+ );
243
+ }
244
+
245
+ $result = $this->import_start( $file );
246
+
247
+ if ( is_wp_error( $result ) ) {
248
+ $this->logger->error( __( 'Content import start error: ', 'wordpress-importer' ) . $result->get_error_message() );
249
+
250
+ return false;
251
+ }
252
+
253
+ // Get the actual XML reader.
254
+ $reader = $this->get_reader( $file );
255
+
256
+ if ( empty( $reader ) ) {
257
+ return false;
258
+ }
259
+
260
+ // Set the version to compatibility mode first
261
+ $this->version = '1.0';
262
+
263
+ // Reset other variables
264
+ $this->base_url = '';
265
+
266
+ // Start parsing!
267
+ while ( $reader->read() ) {
268
+ // Only deal with element opens.
269
+ if ( $reader->nodeType !== XMLReader::ELEMENT ) {
270
+ continue;
271
+ }
272
+
273
+ switch ( $reader->name ) {
274
+ case 'wp:wxr_version':
275
+ // Upgrade to the correct version
276
+ $this->version = $reader->readString();
277
+
278
+ if ( version_compare( $this->version, self::MAX_WXR_VERSION, '>' ) ) {
279
+ $this->logger->warning( sprintf(
280
+ __( 'This WXR file (version %s) is newer than the importer (version %s) and may not be supported. Please consider updating.', 'wordpress-importer' ),
281
+ $this->version,
282
+ self::MAX_WXR_VERSION
283
+ ) );
284
+ }
285
+
286
+ // Handled everything in this node, move on to the next
287
+ $reader->next();
288
+ break;
289
+
290
+ case 'wp:base_site_url':
291
+ $this->base_url = $reader->readString();
292
+
293
+ // Handled everything in this node, move on to the next
294
+ $reader->next();
295
+ break;
296
+
297
+ case 'item':
298
+ if ( empty( $options['posts'] ) ) {
299
+ $reader->next();
300
+ break;
301
+ }
302
+
303
+ $node = $reader->expand();
304
+ $parsed = $this->parse_post_node( $node );
305
+
306
+ if ( is_wp_error( $parsed ) ) {
307
+ $this->log_error( $parsed );
308
+
309
+ // Skip the rest of this post
310
+ $reader->next();
311
+ break;
312
+ }
313
+
314
+ $this->process_post( $parsed['data'], $parsed['meta'], $parsed['comments'], $parsed['terms'] );
315
+
316
+ // Handled everything in this node, move on to the next
317
+ $reader->next();
318
+ break;
319
+
320
+ case 'wp:author':
321
+ if ( empty( $options['users'] ) ) {
322
+ $reader->next();
323
+ break;
324
+ }
325
+
326
+ $node = $reader->expand();
327
+ $parsed = $this->parse_author_node( $node );
328
+
329
+ if ( is_wp_error( $parsed ) ) {
330
+ $this->log_error( $parsed );
331
+
332
+ // Skip the rest of this post
333
+ $reader->next();
334
+ break;
335
+ }
336
+
337
+ $status = $this->process_author( $parsed['data'], $parsed['meta'] );
338
+
339
+ if ( is_wp_error( $status ) ) {
340
+ $this->log_error( $status );
341
+ }
342
+
343
+ // Handled everything in this node, move on to the next
344
+ $reader->next();
345
+ break;
346
+
347
+ case 'wp:category':
348
+ if ( empty( $options['categories'] ) ) {
349
+ $reader->next();
350
+ break;
351
+ }
352
+
353
+ $node = $reader->expand();
354
+ $parsed = $this->parse_term_node( $node, 'category' );
355
+
356
+ if ( is_wp_error( $parsed ) ) {
357
+ $this->log_error( $parsed );
358
+
359
+ // Skip the rest of this post
360
+ $reader->next();
361
+ break;
362
+ }
363
+
364
+ $status = $this->process_term( $parsed['data'], $parsed['meta'] );
365
+
366
+ // Handled everything in this node, move on to the next
367
+ $reader->next();
368
+ break;
369
+
370
+ case 'wp:tag':
371
+ if ( empty( $options['tags'] ) ) {
372
+ $reader->next();
373
+ break;
374
+ }
375
+
376
+ $node = $reader->expand();
377
+ $parsed = $this->parse_term_node( $node, 'tag' );
378
+
379
+ if ( is_wp_error( $parsed ) ) {
380
+ $this->log_error( $parsed );
381
+
382
+ // Skip the rest of this post
383
+ $reader->next();
384
+ break;
385
+ }
386
+
387
+ $status = $this->process_term( $parsed['data'], $parsed['meta'] );
388
+
389
+ // Handled everything in this node, move on to the next
390
+ $reader->next();
391
+ break;
392
+
393
+ case 'wp:term':
394
+ if ( empty( $options['terms'] ) ) {
395
+ $reader->next();
396
+ break;
397
+ }
398
+
399
+ $node = $reader->expand();
400
+ $parsed = $this->parse_term_node( $node );
401
+
402
+ if ( is_wp_error( $parsed ) ) {
403
+ $this->log_error( $parsed );
404
+
405
+ // Skip the rest of this post
406
+ $reader->next();
407
+ break;
408
+ }
409
+
410
+ $status = $this->process_term( $parsed['data'], $parsed['meta'] );
411
+
412
+ // Handled everything in this node, move on to the next
413
+ $reader->next();
414
+ break;
415
+
416
+ default:
417
+ // Skip this node, probably handled by something already
418
+ break;
419
+ }
420
+ }
421
+
422
+ // Now that we've done the main processing, do any required
423
+ // post-processing and remapping.
424
+ $this->post_process();
425
+
426
+ if ( $this->options['aggressive_url_search'] ) {
427
+ $this->replace_attachment_urls_in_content();
428
+ }
429
+
430
+ $this->remap_featured_images();
431
+
432
+ $this->import_end();
433
+
434
+ // Set the current importer state, so the data can be used on the next AJAX call.
435
+ $this->set_current_importer_data();
436
+
437
+ return true;
438
+ }
439
+
440
+ /**
441
+ * Import users only.
442
+ *
443
+ * @param string $file Path to the import file.
444
+ */
445
+ public function import_users( $file ) {
446
+ return $this->import( $file, array( 'users' => true ) );
447
+ }
448
+
449
+ /**
450
+ * Import categories only.
451
+ *
452
+ * @param string $file Path to the import file.
453
+ */
454
+ public function import_categories( $file ) {
455
+ return $this->import( $file, array( 'categories' => true ) );
456
+ }
457
+
458
+ /**
459
+ * Import tags only.
460
+ *
461
+ * @param string $file Path to the import file.
462
+ */
463
+ public function import_tags( $file ) {
464
+ return $this->import( $file, array( 'tags' => true ) );
465
+ }
466
+
467
+ /**
468
+ * Import terms only.
469
+ *
470
+ * @param string $file Path to the import file.
471
+ */
472
+ public function import_terms( $file ) {
473
+ return $this->import( $file, array( 'terms' => true ) );
474
+ }
475
+
476
+ /**
477
+ * Import posts only.
478
+ *
479
+ * @param string $file Path to the import file.
480
+ */
481
+ public function import_posts( $file ) {
482
+ return $this->import( $file, array( 'posts' => true ) );
483
+ }
484
+
485
+ /**
486
+ * Check if we need to create a new AJAX request, so that server does not timeout.
487
+ * And fix the import warning for missing post author.
488
+ *
489
+ * @param array $data current post data.
490
+ * @return array
491
+ */
492
+ public function new_ajax_request_maybe( $data ) {
493
+ $time = microtime( true ) - $this->start_time;
494
+
495
+ // We should make a new ajax call, if the time is right.
496
+ if ( $time > apply_filters( 'pt-importer/time_for_one_ajax_call', 20 ) ) {
497
+ $response = apply_filters( 'pt-importer/new_ajax_request_response_data', array(
498
+ 'status' => 'newAJAX',
499
+ 'log' => 'Time for new AJAX request!: ' . $time,
500
+ 'num_of_imported_posts' => count( $this->mapping['post'] ),
501
+ ) );
502
+
503
+ // Add message to log file.
504
+ $this->logger->info( __( 'New AJAX call!', 'wordpress-importer' ) );
505
+
506
+ // Set the current importer state, so it can be continued on the next AJAX call.
507
+ $this->set_current_importer_data();
508
+
509
+ // Send the request for a new AJAX call.
510
+ wp_send_json( $response );
511
+ }
512
+
513
+ // Set importing author to the current user.
514
+ // Fixes the [WARNING] Could not find the author for ... log warning messages.
515
+ $current_user_obj = wp_get_current_user();
516
+ $data['post_author'] = $current_user_obj->user_login;
517
+
518
+ return $data;
519
+ }
520
+
521
+ /**
522
+ * Save current importer data to the DB, for later use.
523
+ */
524
+ public function set_current_importer_data() {
525
+ $data = apply_filters( 'pt-importer/set_current_importer_data', array(
526
+ 'options' => $this->options,
527
+ 'mapping' => $this->mapping,
528
+ 'requires_remapping' => $this->requires_remapping,
529
+ 'exists' => $this->exists,
530
+ 'user_slug_override' => $this->user_slug_override,
531
+ 'url_remap' => $this->url_remap,
532
+ 'featured_images' => $this->featured_images,
533
+ ) );
534
+
535
+ $this->save_current_import_data_transient( $data );
536
+ }
537
+
538
+ /**
539
+ * Set the importer data to the transient.
540
+ *
541
+ * @param array $data Data to be saved to the transient.
542
+ */
543
+ public function save_current_import_data_transient( $data ) {
544
+ set_transient( 'pt_importer_data', $data, MINUTE_IN_SECONDS );
545
+ }
546
+
547
+ /**
548
+ * Restore the importer data from the transient.
549
+ *
550
+ * @return boolean
551
+ */
552
+ public function restore_import_data_transient() {
553
+ if ( $data = get_transient( 'pt_importer_data' ) ) {
554
+ $this->options = empty( $data['options'] ) ? array() : $data['options'];
555
+ $this->mapping = empty( $data['mapping'] ) ? array() : $data['mapping'];
556
+ $this->requires_remapping = empty( $data['requires_remapping'] ) ? array() : $data['requires_remapping'];
557
+ $this->exists = empty( $data['exists'] ) ? array() : $data['exists'];
558
+ $this->user_slug_override = empty( $data['user_slug_override'] ) ? array() : $data['user_slug_override'];
559
+ $this->url_remap = empty( $data['url_remap'] ) ? array() : $data['url_remap'];
560
+ $this->featured_images = empty( $data['featured_images'] ) ? array() : $data['featured_images'];
561
+
562
+ do_action( 'pt-importer/restore_import_data_transient' );
563
+
564
+ return true;
565
+ }
566
+
567
+ return false;
568
+ }
569
+
570
+ /**
571
+ * Get the importer mapping data.
572
+ *
573
+ * @return array An empty array or an array of mapping data.
574
+ */
575
+ public function get_mapping() {
576
+ return $this->mapping;
577
+ }
578
+
579
+ /**
580
+ * Hook into the pre-process term filter of the content import and register the
581
+ * custom WooCommerce product attributes, so that the terms can then be imported normally.
582
+ *
583
+ * This should probably be removed once the WP importer 2.0 support is added in WooCommerce.
584
+ *
585
+ * Fixes: [WARNING] Failed to import pa_size L warnings in content import.
586
+ * Code from: woocommerce/includes/admin/class-wc-admin-importers.php (ver 2.6.9).
587
+ *
588
+ * Github issue: https://github.com/awesomemotive/one-click-demo-import/issues/71
589
+ *
590
+ * @param array $date The term data to import.
591
+ * @return array The unchanged term data.
592
+ */
593
+ public function woocommerce_product_attributes_registration( $data ) {
594
+ global $wpdb;
595
+
596
+ if ( strstr( $data['taxonomy'], 'pa_' ) ) {
597
+ if ( ! taxonomy_exists( $data['taxonomy'] ) ) {
598
+ $attribute_name = wc_sanitize_taxonomy_name( str_replace( 'pa_', '', $data['taxonomy'] ) );
599
+
600
+ // Create the taxonomy
601
+ if ( ! in_array( $attribute_name, wc_get_attribute_taxonomies() ) ) {
602
+ $attribute = array(
603
+ 'attribute_label' => $attribute_name,
604
+ 'attribute_name' => $attribute_name,
605
+ 'attribute_type' => 'select',
606
+ 'attribute_orderby' => 'menu_order',
607
+ 'attribute_public' => 0
608
+ );
609
+ $wpdb->insert( $wpdb->prefix . 'woocommerce_attribute_taxonomies', $attribute );
610
+ delete_transient( 'wc_attribute_taxonomies' );
611
+ }
612
+
613
+ // Register the taxonomy now so that the import works!
614
+ register_taxonomy(
615
+ $data['taxonomy'],
616
+ apply_filters( 'woocommerce_taxonomy_objects_' . $data['taxonomy'], array( 'product' ) ),
617
+ apply_filters( 'woocommerce_taxonomy_args_' . $data['taxonomy'], array(
618
+ 'hierarchical' => true,
619
+ 'show_ui' => false,
620
+ 'query_var' => true,
621
+ 'rewrite' => false,
622
+ ) )
623
+ );
624
+ }
625
+ }
626
+
627
+ return $data;
628
+ }
629
+ }
vendor/{proteusthemes → awesomemotive}/wp-content-importer-v2/src/WPImporterLogger.php RENAMED
@@ -1,5 +1,5 @@
1
  <?php
2
- namespace ProteusThemes\WPContentImporter2;
3
 
4
  /**
5
  * Describes a logger instance
1
  <?php
2
+ namespace AwesomeMotive\WPContentImporter2;
3
 
4
  /**
5
  * Describes a logger instance
vendor/{proteusthemes → awesomemotive}/wp-content-importer-v2/src/WPImporterLoggerCLI.php RENAMED
@@ -1,5 +1,5 @@
1
  <?php
2
- namespace ProteusThemes\WPContentImporter2;
3
 
4
  class WPImporterLoggerCLI extends WPImporterLogger {
5
  public $min_level = 'notice';
1
  <?php
2
+ namespace AwesomeMotive\WPContentImporter2;
3
 
4
  class WPImporterLoggerCLI extends WPImporterLogger {
5
  public $min_level = 'notice';
vendor/{proteusthemes → awesomemotive}/wp-content-importer-v2/src/WXRImportInfo.php RENAMED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- namespace ProteusThemes\WPContentImporter2;
4
 
5
  class WXRImportInfo {
6
  public $home;
@@ -13,4 +13,4 @@ class WXRImportInfo {
13
  public $term_count = 0;
14
  public $generator = '';
15
  public $version;
16
- }
1
  <?php
2
 
3
+ namespace AwesomeMotive\WPContentImporter2;
4
 
5
  class WXRImportInfo {
6
  public $home;
13
  public $term_count = 0;
14
  public $generator = '';
15
  public $version;
16
+ }
vendor/{proteusthemes → awesomemotive}/wp-content-importer-v2/src/WXRImporter.php RENAMED
@@ -1,5 +1,8 @@
1
  <?php
2
- namespace ProteusThemes\WPContentImporter2;
 
 
 
3
 
4
  class WXRImporter extends \WP_Importer {
5
  /**
@@ -49,6 +52,7 @@ class WXRImporter extends \WP_Importer {
49
  protected $missing_menu_items = array();
50
 
51
  // NEW STYLE
 
52
  protected $mapping = array();
53
  protected $requires_remapping = array();
54
  protected $exists = array();
@@ -60,7 +64,7 @@ class WXRImporter extends \WP_Importer {
60
  /**
61
  * Logger instance.
62
  *
63
- * @var WP_Importer_Logger
64
  */
65
  protected $logger;
66
 
@@ -71,7 +75,7 @@ class WXRImporter extends \WP_Importer {
71
  * @var bool $prefill_existing_posts Should we prefill `post_exists` calls? (True prefills and uses more memory, false checks once per imported post and takes longer. Default is true.)
72
  * @var bool $prefill_existing_comments Should we prefill `comment_exists` calls? (True prefills and uses more memory, false checks once per imported comment and takes longer. Default is true.)
73
  * @var bool $prefill_existing_terms Should we prefill `term_exists` calls? (True prefills and uses more memory, false checks once per imported term and takes longer. Default is true.)
74
- * @var bool $update_attachment_guids Should attachment GUIDs be updated to the new URL? (True updates the GUID, which keeps compatibility with v1, false doesn't update, and allows deduplication and reimporting. Default is false.)
75
  * @var bool $fetch_attachments Fetch attachments from the remote server. (True fetches and creates attachment posts, false skips attachments. Default is false.)
76
  * @var bool $aggressive_url_search Should we search/replace for URLs aggressively? (True searches all posts' content for old URLs and replaces, false checks for `<img class="wp-image-*">` only. Default is false.)
77
  * @var int $default_author User ID to use if author is missing or invalid. (Default is null, which leaves posts unassigned.)
@@ -120,7 +124,7 @@ class WXRImporter extends \WP_Importer {
120
  // $old_value = libxml_disable_entity_loader( true );
121
  }
122
 
123
- $reader = new \XMLReader();
124
  $status = $reader->open( $file );
125
 
126
  if ( ! is_null( $old_value ) ) {
@@ -128,7 +132,7 @@ class WXRImporter extends \WP_Importer {
128
  }
129
 
130
  if ( ! $status ) {
131
- return new \WP_Error( 'wxr_importer.cannot_parse', __( 'Could not open the file for parsing', 'wordpress-importer' ) );
132
  }
133
 
134
  return $reader;
@@ -138,6 +142,8 @@ class WXRImporter extends \WP_Importer {
138
  * The main controller for the actual import stage.
139
  *
140
  * @param string $file Path to the WXR file for importing
 
 
141
  */
142
  public function get_preliminary_information( $file ) {
143
  // Let's run the actual importer now, woot
@@ -153,7 +159,7 @@ class WXRImporter extends \WP_Importer {
153
  $data = new WXRImportInfo();
154
  while ( $reader->read() ) {
155
  // Only deal with element opens
156
- if ( $reader->nodeType !== \XMLReader::ELEMENT ) {
157
  continue;
158
  }
159
 
@@ -254,6 +260,8 @@ class WXRImporter extends \WP_Importer {
254
  * The main controller for the actual import stage.
255
  *
256
  * @param string $file Path to the WXR file for importing
 
 
257
  */
258
  public function parse_authors( $file ) {
259
  // Let's run the actual importer now, woot
@@ -269,7 +277,7 @@ class WXRImporter extends \WP_Importer {
269
  $authors = array();
270
  while ( $reader->read() ) {
271
  // Only deal with element opens
272
- if ( $reader->nodeType !== \XMLReader::ELEMENT ) {
273
  continue;
274
  }
275
 
@@ -316,7 +324,7 @@ class WXRImporter extends \WP_Importer {
316
  /**
317
  * The main controller for the actual import stage.
318
  *
319
- * @param string $file Path to the WXR file for importing
320
  */
321
  public function import( $file ) {
322
  add_filter( 'import_post_meta_key', array( $this, 'is_valid_meta_key' ) );
@@ -342,7 +350,7 @@ class WXRImporter extends \WP_Importer {
342
  // Start parsing!
343
  while ( $reader->read() ) {
344
  // Only deal with element opens
345
- if ( $reader->nodeType !== \XMLReader::ELEMENT ) {
346
  continue;
347
  }
348
 
@@ -503,7 +511,7 @@ class WXRImporter extends \WP_Importer {
503
  */
504
  protected function import_start( $file ) {
505
  if ( ! is_file( $file ) ) {
506
- return new \WP_Error( 'wxr_importer.file_missing', __( 'The file does not exist, please try again.', 'wordpress-importer' ) );
507
  }
508
 
509
  // Suspend bunches of stuff in WP core
@@ -538,6 +546,7 @@ class WXRImporter extends \WP_Importer {
538
  // Re-enable stuff in core
539
  wp_suspend_cache_invalidation( false );
540
  wp_cache_flush();
 
541
  foreach ( get_taxonomies() as $tax ) {
542
  delete_option( "{$tax}_children" );
543
  _get_term_hierarchy( $tax );
@@ -546,6 +555,8 @@ class WXRImporter extends \WP_Importer {
546
  wp_defer_term_counting( false );
547
  wp_defer_comment_counting( false );
548
 
 
 
549
  /**
550
  * Complete the import.
551
  *
@@ -593,7 +604,7 @@ class WXRImporter extends \WP_Importer {
593
  /**
594
  * Parse a post node into post data.
595
  *
596
- * @param DOMElement $node Parent node of post data (typically `item`).
597
  * @return array|WP_Error Post data array on success, error otherwise.
598
  */
599
  protected function parse_post_node( $node ) {
@@ -662,7 +673,7 @@ class WXRImporter extends \WP_Importer {
662
 
663
  if ( $data['post_status'] === 'auto-draft' ) {
664
  // Bail now
665
- return new \WP_Error(
666
  'wxr_importer.post.cannot_import_draft',
667
  __( 'Cannot import auto-draft posts' ),
668
  $data
@@ -723,6 +734,11 @@ class WXRImporter extends \WP_Importer {
723
  * Doesn't create a new post if: the post type doesn't exist, the given post ID
724
  * is already noted as imported or a post with the same title and date already exists.
725
  * Note that new/updated terms, comments and meta are imported for the last of the above.
 
 
 
 
 
726
  */
727
  protected function process_post( $data, $meta, $comments, $terms ) {
728
  /**
@@ -740,11 +756,10 @@ class WXRImporter extends \WP_Importer {
740
 
741
  $original_id = isset( $data['post_id'] ) ? (int) $data['post_id'] : 0;
742
  $parent_id = isset( $data['post_parent'] ) ? (int) $data['post_parent'] : 0;
743
- $author_id = isset( $data['post_author'] ) ? (int) $data['post_author'] : 0;
744
 
745
  // Have we already processed this?
746
  if ( isset( $this->mapping['post'][ $original_id ] ) ) {
747
- return;
748
  }
749
 
750
  $post_type_object = get_post_type_object( $data['post_type'] );
@@ -835,7 +850,7 @@ class WXRImporter extends \WP_Importer {
835
  $postdata[ $key ] = $data[ $key ];
836
  }
837
 
838
- $postdata = apply_filters( 'wp_import_post_data_processed', $postdata, $data );
839
 
840
  if ( 'attachment' === $postdata['post_type'] ) {
841
  if ( ! $this->options['fetch_attachments'] ) {
@@ -983,7 +998,9 @@ class WXRImporter extends \WP_Importer {
983
  * represents doesn't exist then the menu item will not be imported (waits until the
984
  * end of the import to retry again before discarding).
985
  *
986
- * @param array $item Menu item details from WXR file
 
 
987
  */
988
  protected function process_menu_item_meta( $post_id, $data, $meta ) {
989
 
@@ -1041,8 +1058,10 @@ class WXRImporter extends \WP_Importer {
1041
  /**
1042
  * If fetching attachments is enabled then attempt to create a new attachment
1043
  *
1044
- * @param array $post Attachment post details from WXR
1045
- * @param string $url URL to fetch attachment from
 
 
1046
  * @return int|WP_Error Post ID on success, WP_Error otherwise
1047
  */
1048
  protected function process_attachment( $post, $meta, $remote_url ) {
@@ -1072,7 +1091,7 @@ class WXRImporter extends \WP_Importer {
1072
 
1073
  $info = wp_check_filetype( $upload['file'] );
1074
  if ( ! $info ) {
1075
- return new \WP_Error( 'attachment_processing_error', __( 'Invalid file type', 'wordpress-importer' ) );
1076
  }
1077
 
1078
  $post['post_mime_type'] = $info['type'];
@@ -1120,7 +1139,7 @@ class WXRImporter extends \WP_Importer {
1120
  /**
1121
  * Parse a meta node into meta data.
1122
  *
1123
- * @param DOMElement $node Parent node of meta data (typically `wp:postmeta` or `wp:commentmeta`).
1124
  * @return array|null Meta data array on success, or null on error.
1125
  */
1126
  protected function parse_meta_node( $node ) {
@@ -1192,7 +1211,7 @@ class WXRImporter extends \WP_Importer {
1192
  $value = maybe_unserialize( $meta_item['value'] );
1193
  }
1194
 
1195
- add_post_meta( $post_id, $key, $value );
1196
  do_action( 'import_post_meta', $post_id, $key, $value );
1197
 
1198
  // if the post has a featured image, take note of this in case of remap
@@ -1208,7 +1227,7 @@ class WXRImporter extends \WP_Importer {
1208
  /**
1209
  * Parse a comment node into comment data.
1210
  *
1211
- * @param DOMElement $node Parent node of comment data (typically `wp:comment`).
1212
  * @return array Comment data array.
1213
  */
1214
  protected function parse_comment_node( $node ) {
@@ -1285,9 +1304,11 @@ class WXRImporter extends \WP_Importer {
1285
  /**
1286
  * Process and import comment data.
1287
  *
1288
- * @param array $comments List of comment data arrays.
1289
- * @param int $post_id Post to associate with.
1290
- * @param array $post Post data.
 
 
1291
  * @return int|WP_Error Number of comments imported on success, error otherwise.
1292
  */
1293
  protected function process_comments( $comments, $post_id, $post, $post_exists = false ) {
@@ -1405,6 +1426,13 @@ class WXRImporter extends \WP_Importer {
1405
  return $num_comments;
1406
  }
1407
 
 
 
 
 
 
 
 
1408
  protected function parse_category_node( $node ) {
1409
  $data = array(
1410
  // Default taxonomy to "category", since this is a `<category>` tag
@@ -1438,6 +1466,7 @@ class WXRImporter extends \WP_Importer {
1438
  *
1439
  * @param array $a Comment data for the first comment
1440
  * @param array $b Comment data for the second comment
 
1441
  * @return int
1442
  */
1443
  public static function sort_comments_by_id( $a, $b ) {
@@ -1491,6 +1520,12 @@ class WXRImporter extends \WP_Importer {
1491
  return compact( 'data', 'meta' );
1492
  }
1493
 
 
 
 
 
 
 
1494
  protected function process_author( $data, $meta ) {
1495
  /**
1496
  * Pre-process user data.
@@ -1595,6 +1630,15 @@ class WXRImporter extends \WP_Importer {
1595
  do_action( 'wxr_importer.processed.user', $user_id, $userdata );
1596
  }
1597
 
 
 
 
 
 
 
 
 
 
1598
  protected function parse_term_node( $node, $type = 'term' ) {
1599
  $data = array();
1600
  $meta = array();
@@ -1661,6 +1705,12 @@ class WXRImporter extends \WP_Importer {
1661
  return compact( 'data', 'meta' );
1662
  }
1663
 
 
 
 
 
 
 
1664
  protected function process_term( $data, $meta ) {
1665
  /**
1666
  * Pre-process term data.
@@ -1796,9 +1846,10 @@ class WXRImporter extends \WP_Importer {
1796
  /**
1797
  * Process and import term meta items.
1798
  *
1799
- * @param array $meta List of meta data arrays
1800
- * @param int $term_id Term ID to associate with
1801
- * @param array $term Term data
 
1802
  * @return int|bool Number of meta items imported on success, false otherwise.
1803
  */
1804
  protected function process_term_meta( $meta, $term_id, $term ) {
@@ -1856,10 +1907,11 @@ class WXRImporter extends \WP_Importer {
1856
  }
1857
 
1858
  /**
1859
- * Attempt to download a remote file attachment
 
 
 
1860
  *
1861
- * @param string $url URL of item to fetch
1862
- * @param array $post Attachment details
1863
  * @return array|WP_Error Local file location details on success, WP_Error otherwise
1864
  */
1865
  protected function fetch_remote_file( $url, $post ) {
@@ -1869,7 +1921,7 @@ class WXRImporter extends \WP_Importer {
1869
  // get placeholder file in the upload dir with a unique, sanitized filename
1870
  $upload = wp_upload_bits( $file_name, 0, '', $post['upload_date'] );
1871
  if ( $upload['error'] ) {
1872
- return new \WP_Error( 'upload_dir_error', $upload['error'] );
1873
  }
1874
 
1875
  // fetch the remote url and write it to the placeholder file
@@ -1889,7 +1941,7 @@ class WXRImporter extends \WP_Importer {
1889
  // make sure the fetch was successful
1890
  if ( $code !== 200 ) {
1891
  unlink( $upload['file'] );
1892
- return new \WP_Error(
1893
  'import_file_error',
1894
  sprintf(
1895
  __( 'Remote server returned %1$d %2$s for %3$s', 'wordpress-importer' ),
@@ -1909,19 +1961,19 @@ class WXRImporter extends \WP_Importer {
1909
  //
1910
  // if ( isset( $headers['content-length'] ) && $filesize !== (int) $headers['content-length'] ) {
1911
  // unlink( $upload['file'] );
1912
- // return new \WP_Error( 'import_file_error', __( 'Remote file is incorrect size', 'wordpress-importer' ) );
1913
  // }
1914
 
1915
  if ( 0 === $filesize ) {
1916
  unlink( $upload['file'] );
1917
- return new \WP_Error( 'import_file_error', __( 'Zero size file downloaded', 'wordpress-importer' ) );
1918
  }
1919
 
1920
  $max_size = (int) $this->max_attachment_size();
1921
  if ( ! empty( $max_size ) && $filesize > $max_size ) {
1922
  unlink( $upload['file'] );
1923
  $message = sprintf( __( 'Remote file is too large, limit is %s', 'wordpress-importer' ), size_format( $max_size ) );
1924
- return new \WP_Error( 'import_file_error', $message );
1925
  }
1926
 
1927
  return $upload;
@@ -2126,7 +2178,7 @@ class WXRImporter extends \WP_Importer {
2126
  }
2127
 
2128
  // Run the update
2129
- $data['comment_ID'] = $comment_ID;
2130
  $result = wp_update_comment( wp_slash( $data ) );
2131
  if ( empty( $result ) ) {
2132
  $this->logger->warning( sprintf(
@@ -2151,6 +2203,8 @@ class WXRImporter extends \WP_Importer {
2151
  * Top-level siblings without an explicit root parent, shall be identified
2152
  * with the parent_slug: top
2153
  * [we'll map parent_slug: top into parent 0]
 
 
2154
  */
2155
  protected function post_process_terms( $terms_to_be_remapped ) {
2156
  $this->mapping['term_slug']['top'] = 0;
@@ -2175,7 +2229,6 @@ class WXRImporter extends \WP_Importer {
2175
  continue;
2176
  }
2177
 
2178
- $data = array();
2179
  $parent_slug = get_term_meta( $term_id, '_wxr_import_parent', true );
2180
 
2181
  if ( empty( $parent_slug ) ) {
@@ -2254,7 +2307,7 @@ class WXRImporter extends \WP_Importer {
2254
 
2255
  // remap enclosure urls
2256
  $query = $wpdb->prepare( "UPDATE {$wpdb->postmeta} SET meta_value = REPLACE(meta_value, %s, %s) WHERE meta_key='enclosure'", $from_url, $to_url );
2257
- $result = $wpdb->query( $query );
2258
  }
2259
  }
2260
 
@@ -2312,6 +2365,7 @@ class WXRImporter extends \WP_Importer {
2312
  /**
2313
  * Added to http_request_timeout filter to force timeout at 60 seconds during import
2314
  *
 
2315
  * @access protected
2316
  * @return int 60
2317
  */
1
  <?php
2
+ namespace AwesomeMotive\WPContentImporter2;
3
+
4
+ use WP_Error;
5
+ use XMLReader;
6
 
7
  class WXRImporter extends \WP_Importer {
8
  /**
52
  protected $missing_menu_items = array();
53
 
54
  // NEW STYLE
55
+ public $options = array();
56
  protected $mapping = array();
57
  protected $requires_remapping = array();
58
  protected $exists = array();
64
  /**
65
  * Logger instance.
66
  *
67
+ * @var WPImporterLogger
68
  */
69
  protected $logger;
70
 
75
  * @var bool $prefill_existing_posts Should we prefill `post_exists` calls? (True prefills and uses more memory, false checks once per imported post and takes longer. Default is true.)
76
  * @var bool $prefill_existing_comments Should we prefill `comment_exists` calls? (True prefills and uses more memory, false checks once per imported comment and takes longer. Default is true.)
77
  * @var bool $prefill_existing_terms Should we prefill `term_exists` calls? (True prefills and uses more memory, false checks once per imported term and takes longer. Default is true.)
78
+ * @var bool $update_attachment_guids Should attachment GUIDs be updated to the new URL? (True updates the GUID, which keeps compatibility with v1, false doesn't update, and allows duplication and reimporting. Default is false.)
79
  * @var bool $fetch_attachments Fetch attachments from the remote server. (True fetches and creates attachment posts, false skips attachments. Default is false.)
80
  * @var bool $aggressive_url_search Should we search/replace for URLs aggressively? (True searches all posts' content for old URLs and replaces, false checks for `<img class="wp-image-*">` only. Default is false.)
81
  * @var int $default_author User ID to use if author is missing or invalid. (Default is null, which leaves posts unassigned.)
124
  // $old_value = libxml_disable_entity_loader( true );
125
  }
126
 
127
+ $reader = new XMLReader();
128
  $status = $reader->open( $file );
129
 
130
  if ( ! is_null( $old_value ) ) {
132
  }
133
 
134
  if ( ! $status ) {
135
+ return new WP_Error( 'wxr_importer.cannot_parse', __( 'Could not open the file for parsing', 'wordpress-importer' ) );
136
  }
137
 
138
  return $reader;
142
  * The main controller for the actual import stage.
143
  *
144
  * @param string $file Path to the WXR file for importing
145
+ *
146
+ * @return WXRImportInfo|WP_Error
147
  */
148
  public function get_preliminary_information( $file ) {
149
  // Let's run the actual importer now, woot
159
  $data = new WXRImportInfo();
160
  while ( $reader->read() ) {
161
  // Only deal with element opens
162
+ if ( $reader->nodeType !== XMLReader::ELEMENT ) {
163
  continue;
164
  }
165
 
260
  * The main controller for the actual import stage.
261
  *
262
  * @param string $file Path to the WXR file for importing
263
+ *
264
+ * @return array|WP_Error
265
  */
266
  public function parse_authors( $file ) {
267
  // Let's run the actual importer now, woot
277
  $authors = array();
278
  while ( $reader->read() ) {
279
  // Only deal with element opens
280
+ if ( $reader->nodeType !== XMLReader::ELEMENT ) {
281
  continue;
282
  }
283
 
324
  /**
325
  * The main controller for the actual import stage.
326
  *
327
+ * @param string $file Path to the WXR file for importing.
328
  */
329
  public function import( $file ) {
330
  add_filter( 'import_post_meta_key', array( $this, 'is_valid_meta_key' ) );
350
  // Start parsing!
351
  while ( $reader->read() ) {
352
  // Only deal with element opens
353
+ if ( $reader->nodeType !== XMLReader::ELEMENT ) {
354
  continue;
355
  }
356
 
511
  */
512
  protected function import_start( $file ) {
513
  if ( ! is_file( $file ) ) {
514
+ return new WP_Error( 'wxr_importer.file_missing', __( 'The file does not exist, please try again.', 'wordpress-importer' ) );
515
  }
516
 
517
  // Suspend bunches of stuff in WP core
546
  // Re-enable stuff in core
547
  wp_suspend_cache_invalidation( false );
548
  wp_cache_flush();
549
+
550
  foreach ( get_taxonomies() as $tax ) {
551
  delete_option( "{$tax}_children" );
552
  _get_term_hierarchy( $tax );
555
  wp_defer_term_counting( false );
556
  wp_defer_comment_counting( false );
557
 
558
+ flush_rewrite_rules();
559
+
560
  /**
561
  * Complete the import.
562
  *
604
  /**
605
  * Parse a post node into post data.
606
  *
607
+ * @param \DOMNode $node Parent node of post data (typically `item`).
608
  * @return array|WP_Error Post data array on success, error otherwise.
609
  */
610
  protected function parse_post_node( $node ) {
673
 
674
  if ( $data['post_status'] === 'auto-draft' ) {
675
  // Bail now
676
+ return new WP_Error(
677
  'wxr_importer.post.cannot_import_draft',
678
  __( 'Cannot import auto-draft posts' ),
679
  $data
734
  * Doesn't create a new post if: the post type doesn't exist, the given post ID
735
  * is already noted as imported or a post with the same title and date already exists.
736
  * Note that new/updated terms, comments and meta are imported for the last of the above.
737
+ *
738
+ * @param array $data Post data.
739
+ * @param array $meta Meta data.
740
+ * @param array $comments Comments on the post.
741
+ * @param array $terms Terms on the post.
742
  */
743
  protected function process_post( $data, $meta, $comments, $terms ) {
744
  /**
756
 
757
  $original_id = isset( $data['post_id'] ) ? (int) $data['post_id'] : 0;
758
  $parent_id = isset( $data['post_parent'] ) ? (int) $data['post_parent'] : 0;
 
759
 
760
  // Have we already processed this?
761
  if ( isset( $this->mapping['post'][ $original_id ] ) ) {
762
+ return false;
763
  }
764
 
765
  $post_type_object = get_post_type_object( $data['post_type'] );
850
  $postdata[ $key ] = $data[ $key ];
851
  }
852
 
853
+ $postdata = apply_filters( 'wp_import_post_data_processed', wp_slash( $postdata ), $data );
854
 
855
  if ( 'attachment' === $postdata['post_type'] ) {
856
  if ( ! $this->options['fetch_attachments'] ) {
998
  * represents doesn't exist then the menu item will not be imported (waits until the
999
  * end of the import to retry again before discarding).
1000
  *
1001
+ * @param int $post_id Menu item post ID.
1002
+ * @param array $data Menu item details from WXR file.
1003
+ * @param array $meta Menu item meta details.
1004
  */
1005
  protected function process_menu_item_meta( $post_id, $data, $meta ) {
1006
 
1058
  /**
1059
  * If fetching attachments is enabled then attempt to create a new attachment
1060
  *
1061
+ * @param array $post Attachment post details from WXR.
1062
+ * @param array $meta Attachment post meta details.
1063
+ * @param string $remote_url URL to fetch attachment from.
1064
+ *
1065
  * @return int|WP_Error Post ID on success, WP_Error otherwise
1066
  */
1067
  protected function process_attachment( $post, $meta, $remote_url ) {
1091
 
1092
  $info = wp_check_filetype( $upload['file'] );
1093
  if ( ! $info ) {
1094
+ return new WP_Error( 'attachment_processing_error', __( 'Invalid file type', 'wordpress-importer' ) );
1095
  }
1096
 
1097
  $post['post_mime_type'] = $info['type'];
1139
  /**
1140
  * Parse a meta node into meta data.
1141
  *
1142
+ * @param \DOMNode $node Parent node of meta data (typically `wp:postmeta` or `wp:commentmeta`).
1143
  * @return array|null Meta data array on success, or null on error.
1144
  */
1145
  protected function parse_meta_node( $node ) {
1211
  $value = maybe_unserialize( $meta_item['value'] );
1212
  }
1213
 
1214
+ add_post_meta( $post_id, wp_slash( $key ), wp_slash_strings_only( $value ) );
1215
  do_action( 'import_post_meta', $post_id, $key, $value );
1216
 
1217
  // if the post has a featured image, take note of this in case of remap
1227
  /**
1228
  * Parse a comment node into comment data.
1229
  *
1230
+ * @param \DOMNode $node Parent node of comment data (typically `wp:comment`).
1231
  * @return array Comment data array.
1232
  */
1233
  protected function parse_comment_node( $node ) {
1304
  /**
1305
  * Process and import comment data.
1306
  *
1307
+ * @param array $comments List of comment data arrays.
1308
+ * @param int $post_id Post to associate with.
1309
+ * @param array $post Post data.
1310
+ * @param boolean $post_exists Boolean if the post already exists.
1311
+ *
1312
  * @return int|WP_Error Number of comments imported on success, error otherwise.
1313
  */
1314
  protected function process_comments( $comments, $post_id, $post, $post_exists = false ) {
1426
  return $num_comments;
1427
  }
1428
 
1429
+ /**
1430
+ * Parse the category node.
1431
+ *
1432
+ * @param \DOMNode $node The category node.
1433
+ *
1434
+ * @return array|null
1435
+ */
1436
  protected function parse_category_node( $node ) {
1437
  $data = array(
1438
  // Default taxonomy to "category", since this is a `<category>` tag
1466
  *
1467
  * @param array $a Comment data for the first comment
1468
  * @param array $b Comment data for the second comment
1469
+ *
1470
  * @return int
1471
  */
1472
  public static function sort_comments_by_id( $a, $b ) {
1520
  return compact( 'data', 'meta' );
1521
  }
1522
 
1523
+ /**
1524
+ * Process author.
1525
+ *
1526
+ * @param array $data The author data from WXR file.
1527
+ * @param array $meta The author meta data from WXR file.
1528
+ */
1529
  protected function process_author( $data, $meta ) {
1530
  /**
1531
  * Pre-process user data.
1630
  do_action( 'wxr_importer.processed.user', $user_id, $userdata );
1631
  }
1632
 
1633
+
1634
+ /**
1635
+ * Parse term node.
1636
+ *
1637
+ * @param \DOMNode $node The term node from WXR file.
1638
+ * @param string $type The type of the term node.
1639
+ *
1640
+ * @return array|null
1641
+ */
1642
  protected function parse_term_node( $node, $type = 'term' ) {
1643
  $data = array();
1644
  $meta = array();
1705
  return compact( 'data', 'meta' );
1706
  }
1707
 
1708
+ /**
1709
+ * Process term.
1710
+ *
1711
+ * @param array $data The term data from WXR file.
1712
+ * @param array $meta The term meta data from WXR file.
1713
+ */
1714
  protected function process_term( $data, $meta ) {
1715
  /**
1716
  * Pre-process term data.
1846
  /**
1847
  * Process and import term meta items.
1848
  *
1849
+ * @param array $meta List of meta data arrays.
1850
+ * @param int $term_id Term ID to associate with.
1851
+ * @param array $term Term data.
1852
+ *
1853
  * @return int|bool Number of meta items imported on success, false otherwise.
1854
  */
1855
  protected function process_term_meta( $meta, $term_id, $term ) {
1907
  }
1908
 
1909
  /**
1910
+ * Attempt to download a remote file attachment.
1911
+ *
1912
+ * @param string $url URL of item to fetch.
1913
+ * @param array $post Attachment details.
1914
  *
 
 
1915
  * @return array|WP_Error Local file location details on success, WP_Error otherwise
1916
  */
1917
  protected function fetch_remote_file( $url, $post ) {
1921
  // get placeholder file in the upload dir with a unique, sanitized filename
1922
  $upload = wp_upload_bits( $file_name, 0, '', $post['upload_date'] );
1923
  if ( $upload['error'] ) {
1924
+ return new WP_Error( 'upload_dir_error', $upload['error'] );
1925
  }
1926
 
1927
  // fetch the remote url and write it to the placeholder file
1941
  // make sure the fetch was successful
1942
  if ( $code !== 200 ) {
1943
  unlink( $upload['file'] );
1944
+ return new WP_Error(
1945
  'import_file_error',
1946
  sprintf(
1947
  __( 'Remote server returned %1$d %2$s for %3$s', 'wordpress-importer' ),
1961
  //
1962
  // if ( isset( $headers['content-length'] ) && $filesize !== (int) $headers['content-length'] ) {
1963
  // unlink( $upload['file'] );
1964
+ // return new WP_Error( 'import_file_error', __( 'Remote file is incorrect size', 'wordpress-importer' ) );
1965
  // }
1966
 
1967
  if ( 0 === $filesize ) {
1968
  unlink( $upload['file'] );
1969
+ return new WP_Error( 'import_file_error', __( 'Zero size file downloaded', 'wordpress-importer' ) );
1970
  }
1971
 
1972
  $max_size = (int) $this->max_attachment_size();
1973
  if ( ! empty( $max_size ) && $filesize > $max_size ) {
1974
  unlink( $upload['file'] );
1975
  $message = sprintf( __( 'Remote file is too large, limit is %s', 'wordpress-importer' ), size_format( $max_size ) );
1976
+ return new WP_Error( 'import_file_error', $message );
1977
  }
1978
 
1979
  return $upload;
2178
  }
2179
 
2180
  // Run the update
2181
+ $data['comment_ID'] = $comment_id;
2182
  $result = wp_update_comment( wp_slash( $data ) );
2183
  if ( empty( $result ) ) {
2184
  $this->logger->warning( sprintf(
2203
  * Top-level siblings without an explicit root parent, shall be identified
2204
  * with the parent_slug: top
2205
  * [we'll map parent_slug: top into parent 0]
2206
+ *
2207
+ * @param array $terms_to_be_remapped The terms to be remapped.
2208
  */
2209
  protected function post_process_terms( $terms_to_be_remapped ) {
2210
  $this->mapping['term_slug']['top'] = 0;
2229
  continue;
2230
  }
2231
 
 
2232
  $parent_slug = get_term_meta( $term_id, '_wxr_import_parent', true );
2233
 
2234
  if ( empty( $parent_slug ) ) {
2307
 
2308
  // remap enclosure urls
2309
  $query = $wpdb->prepare( "UPDATE {$wpdb->postmeta} SET meta_value = REPLACE(meta_value, %s, %s) WHERE meta_key='enclosure'", $from_url, $to_url );
2310
+ $wpdb->query( $query );
2311
  }
2312
  }
2313
 
2365
  /**
2366
  * Added to http_request_timeout filter to force timeout at 60 seconds during import
2367
  *
2368
+ * @param int $val Time in seconds.
2369
  * @access protected
2370
  * @return int 60
2371
  */
vendor/composer/autoload_psr4.php CHANGED
@@ -6,6 +6,6 @@ $vendorDir = dirname(dirname(__FILE__));
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
9
- 'ProteusThemes\\WPContentImporter2\\' => array($vendorDir . '/proteusthemes/wp-content-importer-v2/src'),
10
  'OCDI\\' => array($baseDir . '/inc'),
 
11
  );
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
 
9
  'OCDI\\' => array($baseDir . '/inc'),
10
+ 'AwesomeMotive\\WPContentImporter2\\' => array($vendorDir . '/awesomemotive/wp-content-importer-v2/src'),
11
  );
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit1dc3b7695346d0ca54da2c4b66963a38
6
  {
7
  private static $loader;
8
 
@@ -13,21 +13,24 @@ class ComposerAutoloaderInit1dc3b7695346d0ca54da2c4b66963a38
13
  }
14
  }
15
 
 
 
 
16
  public static function getLoader()
17
  {
18
  if (null !== self::$loader) {
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit1dc3b7695346d0ca54da2c4b66963a38', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit1dc3b7695346d0ca54da2c4b66963a38', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
- call_user_func(\Composer\Autoload\ComposerStaticInit1dc3b7695346d0ca54da2c4b66963a38::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInitef3a658a88d521398d72929dc54fa111
6
  {
7
  private static $loader;
8
 
13
  }
14
  }
15
 
16
+ /**
17
+ * @return \Composer\Autoload\ClassLoader
18
+ */
19
  public static function getLoader()
20
  {
21
  if (null !== self::$loader) {
22
  return self::$loader;
23
  }
24
 
25
+ spl_autoload_register(array('ComposerAutoloaderInitef3a658a88d521398d72929dc54fa111', 'loadClassLoader'), true, true);
26
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
27
+ spl_autoload_unregister(array('ComposerAutoloaderInitef3a658a88d521398d72929dc54fa111', 'loadClassLoader'));
28
 
29
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
30
  if ($useStaticLoader) {
31
  require_once __DIR__ . '/autoload_static.php';
32
 
33
+ call_user_func(\Composer\Autoload\ComposerStaticInitef3a658a88d521398d72929dc54fa111::getInitializer($loader));
34
  } else {
35
  $map = require __DIR__ . '/autoload_namespaces.php';
36
  foreach ($map as $namespace => $path) {
vendor/composer/autoload_static.php CHANGED
@@ -4,35 +4,35 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit1dc3b7695346d0ca54da2c4b66963a38
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
- 'P' =>
11
- array (
12
- 'ProteusThemes\\WPContentImporter2\\' => 33,
13
- ),
14
  'O' =>
15
  array (
16
  'OCDI\\' => 5,
17
  ),
 
 
 
 
18
  );
19
 
20
  public static $prefixDirsPsr4 = array (
21
- 'ProteusThemes\\WPContentImporter2\\' =>
22
- array (
23
- 0 => __DIR__ . '/..' . '/proteusthemes/wp-content-importer-v2/src',
24
- ),
25
  'OCDI\\' =>
26
  array (
27
  0 => __DIR__ . '/../..' . '/inc',
28
  ),
 
 
 
 
29
  );
30
 
31
  public static function getInitializer(ClassLoader $loader)
32
  {
33
  return \Closure::bind(function () use ($loader) {
34
- $loader->prefixLengthsPsr4 = ComposerStaticInit1dc3b7695346d0ca54da2c4b66963a38::$prefixLengthsPsr4;
35
- $loader->prefixDirsPsr4 = ComposerStaticInit1dc3b7695346d0ca54da2c4b66963a38::$prefixDirsPsr4;
36
 
37
  }, null, ClassLoader::class);
38
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInitef3a658a88d521398d72929dc54fa111
8
  {
9
  public static $prefixLengthsPsr4 = array (
 
 
 
 
10
  'O' =>
11
  array (
12
  'OCDI\\' => 5,
13
  ),
14
+ 'A' =>
15
+ array (
16
+ 'AwesomeMotive\\WPContentImporter2\\' => 33,
17
+ ),
18
  );
19
 
20
  public static $prefixDirsPsr4 = array (
 
 
 
 
21
  'OCDI\\' =>
22
  array (
23
  0 => __DIR__ . '/../..' . '/inc',
24
  ),
25
+ 'AwesomeMotive\\WPContentImporter2\\' =>
26
+ array (
27
+ 0 => __DIR__ . '/..' . '/awesomemotive/wp-content-importer-v2/src',
28
+ ),
29
  );
30
 
31
  public static function getInitializer(ClassLoader $loader)
32
  {
33
  return \Closure::bind(function () use ($loader) {
34
+ $loader->prefixLengthsPsr4 = ComposerStaticInitef3a658a88d521398d72929dc54fa111::$prefixLengthsPsr4;
35
+ $loader->prefixDirsPsr4 = ComposerStaticInitef3a658a88d521398d72929dc54fa111::$prefixDirsPsr4;
36
 
37
  }, null, ClassLoader::class);
38
  }
vendor/composer/installed.json CHANGED
@@ -1,25 +1,25 @@
1
  [
2
  {
3
- "name": "proteusthemes/wp-content-importer-v2",
4
- "version": "v0.4.7",
5
- "version_normalized": "0.4.7.0",
6
  "source": {
7
  "type": "git",
8
- "url": "https://github.com/proteusthemes/WordPress-Importer.git",
9
- "reference": "ec052cc8fdcde29b47b69599b2b430e7fb423c22"
10
  },
11
  "dist": {
12
  "type": "zip",
13
- "url": "https://api.github.com/repos/proteusthemes/WordPress-Importer/zipball/ec052cc8fdcde29b47b69599b2b430e7fb423c22",
14
- "reference": "ec052cc8fdcde29b47b69599b2b430e7fb423c22",
15
  "shasum": ""
16
  },
17
- "time": "2017-05-02T11:07:20+00:00",
18
  "type": "library",
19
- "installation-source": "source",
20
  "autoload": {
21
  "psr-4": {
22
- "ProteusThemes\\WPContentImporter2\\": "src/"
23
  }
24
  },
25
  "license": [
@@ -27,21 +27,29 @@
27
  ],
28
  "authors": [
29
  {
30
- "name": "Contributors",
 
 
 
 
 
 
 
 
31
  "homepage": "https://github.com/humanmade/WordPress-Importer/graphs/contributors"
32
  }
33
  ],
34
- "description": "WP content importer v2 forked from humanmade/wordpress-importer.",
35
  "keywords": [
 
36
  "content",
37
  "import",
38
- "proteusthemes",
39
  "theme",
40
  "wordpress",
41
  "wp"
42
  ],
43
  "support": {
44
- "source": "https://github.com/proteusthemes/WordPress-Importer/tree/v0.4.7"
45
  }
46
  }
47
  ]
1
  [
2
  {
3
+ "name": "awesomemotive/wp-content-importer-v2",
4
+ "version": "v3.0.2",
5
+ "version_normalized": "3.0.2.0",
6
  "source": {
7
  "type": "git",
8
+ "url": "https://github.com/awesomemotive/WordPress-Importer.git",
9
+ "reference": "af60e6b933ed053f6e031118d57ea6bd04dbad12"
10
  },
11
  "dist": {
12
  "type": "zip",
13
+ "url": "https://api.github.com/repos/awesomemotive/WordPress-Importer/zipball/af60e6b933ed053f6e031118d57ea6bd04dbad12",
14
+ "reference": "af60e6b933ed053f6e031118d57ea6bd04dbad12",
15
  "shasum": ""
16
  },
17
+ "time": "2020-07-21T06:59:04+00:00",
18
  "type": "library",
19
+ "installation-source": "dist",
20
  "autoload": {
21
  "psr-4": {
22
+ "AwesomeMotive\\WPContentImporter2\\": "src/"
23
  }
24
  },
25
  "license": [
27
  ],
28
  "authors": [
29
  {
30
+ "name": "Gregor Capuder",
31
+ "email": "capuderg@gmail.com"
32
+ },
33
+ {
34
+ "name": "Primoz Cigler",
35
+ "email": "primoz@proteusnet.com"
36
+ },
37
+ {
38
+ "name": "Humanmade contributors",
39
  "homepage": "https://github.com/humanmade/WordPress-Importer/graphs/contributors"
40
  }
41
  ],
42
+ "description": "Improved WP content importer used in OCDI plugin.",
43
  "keywords": [
44
+ "awesomemotive",
45
  "content",
46
  "import",
 
47
  "theme",
48
  "wordpress",
49
  "wp"
50
  ],
51
  "support": {
52
+ "source": "https://github.com/awesomemotive/WordPress-Importer/tree/v3.0.2"
53
  }
54
  }
55
  ]
vendor/proteusthemes/wp-content-importer-v2/README.md DELETED
@@ -1,25 +0,0 @@
1
- # WP content importer used in OCDI
2
-
3
- List of files used in OCDI plugin (from the original repo):
4
-
5
- - class-logger-cli.php,
6
- - class-logger.php,
7
- - class-wxr-importer.php
8
-
9
-
10
- One click demo import plugin page: https://wordpress.org/plugins/one-click-demo-import/
11
-
12
- One click demo import github page: https://github.com/proteusthemes/one-click-demo-import
13
-
14
-
15
- ## Changelog
16
-
17
- *October 29th 2016*
18
-
19
- - Cleaned up this forked repo, to only include the thing we need in the OCDI plugin.
20
- - Changed the class names and use psr-4 autoloading in composer.json
21
-
22
- *October 26th 2016*
23
-
24
- - made a fork form the original repo
25
- - merged a pull request for "term meta data" from the original repo: https://github.com/humanmade/WordPress-Importer/pull/18
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/proteusthemes/wp-content-importer-v2/composer.json DELETED
@@ -1,17 +0,0 @@
1
- {
2
- "name": "proteusthemes/wp-content-importer-v2",
3
- "description": "WP content importer v2 forked from humanmade/wordpress-importer.",
4
- "keywords": ["wp", "wordpress", "proteusthemes", "theme", "import", "content"],
5
- "license": "GPL-2.0+",
6
- "authors": [
7
- {
8
- "name" : "Contributors",
9
- "homepage" : "https://github.com/humanmade/WordPress-Importer/graphs/contributors"
10
- }
11
- ],
12
- "autoload": {
13
- "psr-4": {
14
- "ProteusThemes\\WPContentImporter2\\": "src/"
15
- }
16
- }
17
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
views/plugin-page.php CHANGED
@@ -66,9 +66,9 @@ do_action( 'pt-ocdi/plugin_page_header' );
66
 
67
  <?php if ( ! empty( $this->import_files ) ) : ?>
68
  <?php if ( empty( $_GET['import-mode'] ) || 'manual' !== $_GET['import-mode'] ) : ?>
69
- <a href="<?php echo esc_url( add_query_arg( array( 'page' => $this->plugin_page_setup['menu_slug'], 'import-mode' => 'manual' ), admin_url( $this->plugin_page_setup['parent_slug'] ) ) ); ?>" class="ocdi__import-mode-switch"><?php esc_html_e( 'Switch to manual import!', 'pt-ocdi' ); ?></a>
70
  <?php else : ?>
71
- <a href="<?php echo esc_url( add_query_arg( array( 'page' => $this->plugin_page_setup['menu_slug'] ), admin_url( $this->plugin_page_setup['parent_slug'] ) ) ); ?>" class="ocdi__import-mode-switch"><?php esc_html_e( 'Switch back to theme predefined imports!', 'pt-ocdi' ); ?></a>
72
  <?php endif; ?>
73
  <?php endif; ?>
74
 
66
 
67
  <?php if ( ! empty( $this->import_files ) ) : ?>
68
  <?php if ( empty( $_GET['import-mode'] ) || 'manual' !== $_GET['import-mode'] ) : ?>
69
+ <a href="<?php echo esc_url( add_query_arg( array( 'page' => $this->plugin_page_setup['menu_slug'], 'import-mode' => 'manual' ), menu_page_url( $this->plugin_page_setup['parent_slug'], false ) ) ); ?>" class="ocdi__import-mode-switch"><?php esc_html_e( 'Switch to manual import!', 'pt-ocdi' ); ?></a>
70
  <?php else : ?>
71
+ <a href="<?php echo esc_url( add_query_arg( array( 'page' => $this->plugin_page_setup['menu_slug'] ), menu_page_url( $this->plugin_page_setup['parent_slug'], false ) ) ); ?>" class="ocdi__import-mode-switch"><?php esc_html_e( 'Switch back to theme predefined imports!', 'pt-ocdi' ); ?></a>
72
  <?php endif; ?>
73
  <?php endif; ?>
74