One Click Demo Import - Version 1.0.3

Version Description

Release Date - 27 April 2016

  • Added filter to enable image regeneration,
  • Added filter to change the plugin intro text,
  • Added action to execute custom code before widget import,
  • Disabled author imports.
Download this release

Release Info

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

Code changes from version 1.0.2 to 1.0.3

inc/class-ocdi-helpers.php CHANGED
@@ -221,7 +221,10 @@ class OCDI_Helpers {
221
  // By this point, the $wp_filesystem global should be working, so let's use it to create a file.
222
  global $wp_filesystem;
223
 
224
- $existing_data = $wp_filesystem->get_contents( $file_path );
 
 
 
225
 
226
  // Style separator.
227
  $separator = PHP_EOL . '---' . $separator_text . '---' . PHP_EOL;
221
  // By this point, the $wp_filesystem global should be working, so let's use it to create a file.
222
  global $wp_filesystem;
223
 
224
+ $existing_data = '';
225
+ if ( file_exists( $file_path ) ) {
226
+ $existing_data = $wp_filesystem->get_contents( $file_path );
227
+ }
228
 
229
  // Style separator.
230
  $separator = PHP_EOL . '---' . $separator_text . '---' . PHP_EOL;
inc/class-ocdi-widget-importer.php CHANGED
@@ -78,7 +78,7 @@ class OCDI_Widget_Importer {
78
  }
79
 
80
  // Hook before import.
81
- do_action( 'pt-ocdi/before_widgets_import' );
82
  $data = apply_filters( 'pt-ocdi/before_widgets_import_data', $data );
83
 
84
  // Get all available widgets site supports.
@@ -224,7 +224,7 @@ class OCDI_Widget_Importer {
224
  'widget_id_num' => $new_instance_id_number,
225
  'widget_id_num_old' => $instance_id_number,
226
  );
227
- do_action( 'pt-ocdi/after_single_widget_import', $after_widget_import );
228
 
229
  // Success message.
230
  if ( $sidebar_available ) {
@@ -247,7 +247,7 @@ class OCDI_Widget_Importer {
247
  }
248
 
249
  // Hook after import.
250
- do_action( 'pt-ocdi/after_widgets_import' );
251
 
252
  // Return results.
253
  return apply_filters( 'pt-ocdi/widget_import_results', $results );
78
  }
79
 
80
  // Hook before import.
81
+ do_action( 'pt-ocdi/widget_importer_before_widgets_import' );
82
  $data = apply_filters( 'pt-ocdi/before_widgets_import_data', $data );
83
 
84
  // Get all available widgets site supports.
224
  'widget_id_num' => $new_instance_id_number,
225
  'widget_id_num_old' => $instance_id_number,
226
  );
227
+ do_action( 'pt-ocdi/widget_importer_after_single_widget_import', $after_widget_import );
228
 
229
  // Success message.
230
  if ( $sidebar_available ) {
247
  }
248
 
249
  // Hook after import.
250
+ do_action( 'pt-ocdi/widget_importer_after_widgets_import' );
251
 
252
  // Return results.
253
  return apply_filters( 'pt-ocdi/widget_import_results', $results );
languages/one-click-demo-import.pot CHANGED
@@ -34,69 +34,69 @@ msgid ""
34
  "%s."
35
  msgstr ""
36
 
37
- #: inc/class-ocdi-helpers.php:187 inc/class-ocdi-helpers.php:233
38
  msgid ""
39
  "An error occurred while writing file to your server! Tried to write a file "
40
  "to: %s%s."
41
  msgstr ""
42
 
43
- #: inc/class-ocdi-helpers.php:273
44
  msgid ""
45
  "An error occurred while reading a file from your server! Tried reading file "
46
  "from path: %s%s."
47
  msgstr ""
48
 
49
- #: inc/class-ocdi-helpers.php:298
50
  msgid ""
51
  "An error occurred while retrieving reading/writing permissions to your "
52
  "server (could not retrieve WP filesystem credentials)!"
53
  msgstr ""
54
 
55
- #: inc/class-ocdi-helpers.php:306
56
  msgid "Your WordPress login credentials don't allow to use WP_Filesystem!"
57
  msgstr ""
58
 
59
- #: inc/class-ocdi-helpers.php:323
60
  msgid ""
61
  "This WordPress page does not have %sdirect%s write file access. This plugin "
62
  "needs it in order to save the demo import xml file to the upload directory "
63
  "of your site. You can change this setting with these instructions: %s."
64
  msgstr ""
65
 
66
- #: inc/class-ocdi-helpers.php:395
67
  msgid ""
68
  "%sYour user role isn't high enough. You don't have permission to import "
69
  "demo data.%s"
70
  msgstr ""
71
 
72
- #: inc/class-ocdi-helpers.php:430
73
  msgid ""
74
  "Please upload XML file for content import. If you want to import widgets "
75
  "only, please use Widget Importer & Exporter plugin."
76
  msgstr ""
77
 
78
- #: inc/class-ocdi-helpers.php:432 inc/class-ocdi-helpers.php:453
79
- #: inc/class-ocdi-helpers.php:461
80
  msgid "Upload files"
81
  msgstr ""
82
 
83
- #: inc/class-ocdi-helpers.php:449
84
  msgid "Widget file was not uploaded. Error: %s"
85
  msgstr ""
86
 
87
- #: inc/class-ocdi-helpers.php:459
88
  msgid "The import files were successfully uploaded!"
89
  msgstr ""
90
 
91
- #: inc/class-ocdi-helpers.php:477
92
  msgid "MAX EXECUTION TIME = %s"
93
  msgstr ""
94
 
95
- #: inc/class-ocdi-helpers.php:481
96
  msgid "Files info:%1$sSite URL = %2$s%1$sData file = %3$s%1$sWidget file = %4$s"
97
  msgstr ""
98
 
99
- #: inc/class-ocdi-helpers.php:485
100
  msgid "not defined!"
101
  msgstr ""
102
 
@@ -146,7 +146,7 @@ msgid ""
146
  "might experience server timeout errors.%s"
147
  msgstr ""
148
 
149
- #: one-click-demo-import.php:125
150
  msgid ""
151
  "Importing demo data (post, pages, images, theme settings, ...) is the "
152
  "easiest way to setup your theme. It will allow you to quickly edit "
@@ -154,69 +154,69 @@ msgid ""
154
  "data, the following things might happen:"
155
  msgstr ""
156
 
157
- #: one-click-demo-import.php:129
158
  msgid ""
159
  "No existing posts, pages, categories, images, custom post types or any "
160
  "other data will be deleted or modified."
161
  msgstr ""
162
 
163
- #: one-click-demo-import.php:130
164
  msgid "Posts, pages, images, widgets and menus will get imported."
165
  msgstr ""
166
 
167
- #: one-click-demo-import.php:131
168
  msgid ""
169
  "Please click \"Import Demo Data\" button only once and wait, it can take a "
170
  "couple of minutes."
171
  msgstr ""
172
 
173
- #: one-click-demo-import.php:136
174
  msgid "Before you begin, make sure all the required plugins are activated."
175
  msgstr ""
176
 
177
- #: one-click-demo-import.php:142
178
  msgid ""
179
  "There are no predefined import files available in this theme. Please upload "
180
  "the import files manually!"
181
  msgstr ""
182
 
183
- #: one-click-demo-import.php:146
184
  msgid "Choose a XML file for content import:"
185
  msgstr ""
186
 
187
- #: one-click-demo-import.php:149
188
  msgid "optional"
189
  msgstr ""
190
 
191
- #: one-click-demo-import.php:149
192
  msgid "Choose a WIE or JSON file for widget import:"
193
  msgstr ""
194
 
195
- #: one-click-demo-import.php:165
196
  msgid "Import Demo Data"
197
  msgstr ""
198
 
199
- #: one-click-demo-import.php:190
200
  msgid "Importing now, please wait!"
201
  msgstr ""
202
 
203
- #: one-click-demo-import.php:237
204
  msgid "Manually uploaded files"
205
  msgstr ""
206
 
207
- #: one-click-demo-import.php:254 one-click-demo-import.php:265
208
  msgid "Downloaded files"
209
  msgstr ""
210
 
211
- #: one-click-demo-import.php:261
212
  msgid "The import files for: %s were successfully downloaded!"
213
  msgstr ""
214
 
215
- #: one-click-demo-import.php:271
216
  msgid "No import files specified!"
217
  msgstr ""
218
 
219
- #: one-click-demo-import.php:299
220
  msgid ""
221
  "%1$s%3$sThat's it, all done!%4$s%2$sThe demo import has finished. Please "
222
  "check your page and make sure that everything has imported correctly. If it "
@@ -224,25 +224,21 @@ msgid ""
224
  "it has done its job.%5$s"
225
  msgstr ""
226
 
227
- #: one-click-demo-import.php:310
228
  msgid ""
229
  "%1$sThe demo import has finished, but there were some import "
230
  "errors.%2$sMore details about the errors can be found in this %3$s%5$slog "
231
  "file%6$s%4$s%7$s"
232
  msgstr ""
233
 
234
- #: one-click-demo-import.php:349
235
  msgid "Importing content"
236
  msgstr ""
237
 
238
- #: one-click-demo-import.php:385 one-click-demo-import.php:397
239
  msgid "Importing widgets"
240
  msgstr ""
241
 
242
- #: one-click-demo-import.php:419
243
- msgid "After import setup"
244
- msgstr ""
245
-
246
  #. Author URI of the plugin/theme
247
  msgid "http://www.proteusthemes.com"
248
  msgstr ""
34
  "%s."
35
  msgstr ""
36
 
37
+ #: inc/class-ocdi-helpers.php:187 inc/class-ocdi-helpers.php:236
38
  msgid ""
39
  "An error occurred while writing file to your server! Tried to write a file "
40
  "to: %s%s."
41
  msgstr ""
42
 
43
+ #: inc/class-ocdi-helpers.php:276
44
  msgid ""
45
  "An error occurred while reading a file from your server! Tried reading file "
46
  "from path: %s%s."
47
  msgstr ""
48
 
49
+ #: inc/class-ocdi-helpers.php:301
50
  msgid ""
51
  "An error occurred while retrieving reading/writing permissions to your "
52
  "server (could not retrieve WP filesystem credentials)!"
53
  msgstr ""
54
 
55
+ #: inc/class-ocdi-helpers.php:309
56
  msgid "Your WordPress login credentials don't allow to use WP_Filesystem!"
57
  msgstr ""
58
 
59
+ #: inc/class-ocdi-helpers.php:326
60
  msgid ""
61
  "This WordPress page does not have %sdirect%s write file access. This plugin "
62
  "needs it in order to save the demo import xml file to the upload directory "
63
  "of your site. You can change this setting with these instructions: %s."
64
  msgstr ""
65
 
66
+ #: inc/class-ocdi-helpers.php:398
67
  msgid ""
68
  "%sYour user role isn't high enough. You don't have permission to import "
69
  "demo data.%s"
70
  msgstr ""
71
 
72
+ #: inc/class-ocdi-helpers.php:433
73
  msgid ""
74
  "Please upload XML file for content import. If you want to import widgets "
75
  "only, please use Widget Importer & Exporter plugin."
76
  msgstr ""
77
 
78
+ #: inc/class-ocdi-helpers.php:435 inc/class-ocdi-helpers.php:456
79
+ #: inc/class-ocdi-helpers.php:464
80
  msgid "Upload files"
81
  msgstr ""
82
 
83
+ #: inc/class-ocdi-helpers.php:452
84
  msgid "Widget file was not uploaded. Error: %s"
85
  msgstr ""
86
 
87
+ #: inc/class-ocdi-helpers.php:462
88
  msgid "The import files were successfully uploaded!"
89
  msgstr ""
90
 
91
+ #: inc/class-ocdi-helpers.php:480
92
  msgid "MAX EXECUTION TIME = %s"
93
  msgstr ""
94
 
95
+ #: inc/class-ocdi-helpers.php:484
96
  msgid "Files info:%1$sSite URL = %2$s%1$sData file = %3$s%1$sWidget file = %4$s"
97
  msgstr ""
98
 
99
+ #: inc/class-ocdi-helpers.php:488
100
  msgid "not defined!"
101
  msgstr ""
102
 
146
  "might experience server timeout errors.%s"
147
  msgstr ""
148
 
149
+ #: one-click-demo-import.php:128
150
  msgid ""
151
  "Importing demo data (post, pages, images, theme settings, ...) is the "
152
  "easiest way to setup your theme. It will allow you to quickly edit "
154
  "data, the following things might happen:"
155
  msgstr ""
156
 
157
+ #: one-click-demo-import.php:132
158
  msgid ""
159
  "No existing posts, pages, categories, images, custom post types or any "
160
  "other data will be deleted or modified."
161
  msgstr ""
162
 
163
+ #: one-click-demo-import.php:133
164
  msgid "Posts, pages, images, widgets and menus will get imported."
165
  msgstr ""
166
 
167
+ #: one-click-demo-import.php:134
168
  msgid ""
169
  "Please click \"Import Demo Data\" button only once and wait, it can take a "
170
  "couple of minutes."
171
  msgstr ""
172
 
173
+ #: one-click-demo-import.php:139
174
  msgid "Before you begin, make sure all the required plugins are activated."
175
  msgstr ""
176
 
177
+ #: one-click-demo-import.php:153
178
  msgid ""
179
  "There are no predefined import files available in this theme. Please upload "
180
  "the import files manually!"
181
  msgstr ""
182
 
183
+ #: one-click-demo-import.php:157
184
  msgid "Choose a XML file for content import:"
185
  msgstr ""
186
 
187
+ #: one-click-demo-import.php:160
188
  msgid "optional"
189
  msgstr ""
190
 
191
+ #: one-click-demo-import.php:160
192
  msgid "Choose a WIE or JSON file for widget import:"
193
  msgstr ""
194
 
195
+ #: one-click-demo-import.php:176
196
  msgid "Import Demo Data"
197
  msgstr ""
198
 
199
+ #: one-click-demo-import.php:201
200
  msgid "Importing now, please wait!"
201
  msgstr ""
202
 
203
+ #: one-click-demo-import.php:248
204
  msgid "Manually uploaded files"
205
  msgstr ""
206
 
207
+ #: one-click-demo-import.php:265 one-click-demo-import.php:276
208
  msgid "Downloaded files"
209
  msgstr ""
210
 
211
+ #: one-click-demo-import.php:272
212
  msgid "The import files for: %s were successfully downloaded!"
213
  msgstr ""
214
 
215
+ #: one-click-demo-import.php:282
216
  msgid "No import files specified!"
217
  msgstr ""
218
 
219
+ #: one-click-demo-import.php:321
220
  msgid ""
221
  "%1$s%3$sThat's it, all done!%4$s%2$sThe demo import has finished. Please "
222
  "check your page and make sure that everything has imported correctly. If it "
224
  "it has done its job.%5$s"
225
  msgstr ""
226
 
227
+ #: one-click-demo-import.php:332
228
  msgid ""
229
  "%1$sThe demo import has finished, but there were some import "
230
  "errors.%2$sMore details about the errors can be found in this %3$s%5$slog "
231
  "file%6$s%4$s%7$s"
232
  msgstr ""
233
 
234
+ #: one-click-demo-import.php:383
235
  msgid "Importing content"
236
  msgstr ""
237
 
238
+ #: one-click-demo-import.php:419 one-click-demo-import.php:431
239
  msgid "Importing widgets"
240
  msgstr ""
241
 
 
 
 
 
242
  #. Author URI of the plugin/theme
243
  msgid "http://www.proteusthemes.com"
244
  msgstr ""
one-click-demo-import.php CHANGED
@@ -4,7 +4,7 @@
4
  Plugin Name: One Click Demo Import
5
  Plugin URI: http://www.proteusthemes.com
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: 1.0.2
8
  Author: ProteusThemes
9
  Author URI: http://www.proteusthemes.com
10
  License: GPL3
@@ -20,7 +20,7 @@ define( 'PT_OCDI_PATH', plugin_dir_path( __FILE__ ) );
20
  define( 'PT_OCDI_URL', plugin_dir_url( __FILE__ ) );
21
 
22
  // Current version of the plugin.
23
- define( 'PT_OCDI_VERSION', '1.0.1' );
24
 
25
  // Include files.
26
  require PT_OCDI_PATH . 'inc/class-ocdi-helpers.php';
@@ -118,6 +118,9 @@ class PT_One_Click_Demo_Import {
118
  '</p></div>'
119
  );
120
  }
 
 
 
121
  ?>
122
 
123
  <div class="ocdi__intro-text">
@@ -136,6 +139,14 @@ class PT_One_Click_Demo_Import {
136
  <p><?php esc_html_e( 'Before you begin, make sure all the required plugins are activated.', 'pt-ocdi' ); ?></p>
137
  </div>
138
 
 
 
 
 
 
 
 
 
139
  <?php if ( empty( $this->import_files ) ) : ?>
140
  <div class="notice notice-info below-h2">
141
  <p>
@@ -200,14 +211,14 @@ class PT_One_Click_Demo_Import {
200
  * Main AJAX callback function for:
201
  * 1. prepare import files (uploaded or predefined via filters)
202
  * 2. import content
203
- * 3. import widgets (optional)
204
- * 4. after import setup (optional)
 
205
  */
206
  public function import_demo_data_ajax_callback() {
207
 
208
- // Temporary fix for WP version 4.5. - to be removed with a proper fix.
209
- // Disables generation of multiple image sizes in the content import.
210
- add_filter( 'intermediate_image_sizes_advanced', create_function( '', 'return null;' ) );
211
 
212
  // Verify if the AJAX call is valid (checks nonce and current_user_can).
213
  OCDI_Helpers::verify_ajax_call();
@@ -278,19 +289,30 @@ class PT_One_Click_Demo_Import {
278
  $frontend_error_messages .= $this->import_content( $selected_import_files['content'] );
279
 
280
  /**
281
- * 3. Import widgets.
 
 
 
 
 
 
 
 
 
 
282
  */
283
- if ( ! empty( $selected_import_files['widgets'] ) ) {
284
  $this->import_widgets( $selected_import_files['widgets'] );
285
  }
286
 
287
  /**
288
- * 4. After import setup.
289
  */
290
- if ( false !== has_action( 'pt-ocdi/after_import' ) ) {
 
291
 
292
  // Run the after_import action to setup other settings.
293
- $this->after_import_setup( $this->import_files[ $selected_index ] );
294
  }
295
 
296
  // Display final messages (success or error messages).
@@ -336,6 +358,18 @@ class PT_One_Click_Demo_Import {
336
  // Increase PHP max execution time.
337
  set_time_limit( apply_filters( 'pt-ocdi/set_time_limit_for_demo_data_import', 300 ) );
338
 
 
 
 
 
 
 
 
 
 
 
 
 
339
  // Import content.
340
  if ( ! empty( $import_file_path ) ) {
341
  ob_start();
@@ -400,23 +434,22 @@ class PT_One_Click_Demo_Import {
400
 
401
 
402
  /**
403
- * Setup other things after the whole import process is finished.
404
  *
405
- * @param array $selected_import with information about the selected import.
 
406
  */
407
- private function after_import_setup( $selected_import ) {
408
 
409
- // Enable users to add custom code to the end of the import process.
410
- // Append any output to the log file.
411
  ob_start();
412
- do_action( 'pt-ocdi/after_import', $selected_import );
413
  $message = ob_get_clean();
414
 
415
  // Add this message to log file.
416
  $log_added = OCDI_Helpers::append_to_file(
417
  $message,
418
  $this->log_file_path,
419
- esc_html__( 'After import setup' , 'pt-ocdi' )
420
  );
421
  }
422
 
4
  Plugin Name: One Click Demo Import
5
  Plugin URI: http://www.proteusthemes.com
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: 1.0.3
8
  Author: ProteusThemes
9
  Author URI: http://www.proteusthemes.com
10
  License: GPL3
20
  define( 'PT_OCDI_URL', plugin_dir_url( __FILE__ ) );
21
 
22
  // Current version of the plugin.
23
+ define( 'PT_OCDI_VERSION', '1.0.3' );
24
 
25
  // Include files.
26
  require PT_OCDI_PATH . 'inc/class-ocdi-helpers.php';
118
  '</p></div>'
119
  );
120
  }
121
+
122
+ // Start output buffer for displaying the plugin intro text.
123
+ ob_start();
124
  ?>
125
 
126
  <div class="ocdi__intro-text">
139
  <p><?php esc_html_e( 'Before you begin, make sure all the required plugins are activated.', 'pt-ocdi' ); ?></p>
140
  </div>
141
 
142
+ <?php
143
+ $plugin_intro_text = ob_get_clean();
144
+
145
+ // Display the plugin intro text (can be replaced with custom text through the filter below).
146
+ echo wp_kses_post( apply_filters( 'pt-ocdi/plugin_intro_text', $plugin_intro_text ) );
147
+ ?>
148
+
149
+
150
  <?php if ( empty( $this->import_files ) ) : ?>
151
  <div class="notice notice-info below-h2">
152
  <p>
211
  * Main AJAX callback function for:
212
  * 1. prepare import files (uploaded or predefined via filters)
213
  * 2. import content
214
+ * 3. before widgets import setup (optional)
215
+ * 4. import widgets (optional)
216
+ * 5. after import setup (optional)
217
  */
218
  public function import_demo_data_ajax_callback() {
219
 
220
+ // Try to update PHP memory limit (so that it does not run out of it).
221
+ ini_set( 'memory_limit', apply_filters( 'pt-ocdi/import_memory_limit', '350M' ) );
 
222
 
223
  // Verify if the AJAX call is valid (checks nonce and current_user_can).
224
  OCDI_Helpers::verify_ajax_call();
289
  $frontend_error_messages .= $this->import_content( $selected_import_files['content'] );
290
 
291
  /**
292
+ * 3. Before widgets import setup.
293
+ */
294
+ $action = 'pt-ocdi/before_widgets_import';
295
+ if ( ( false !== has_action( $action ) ) && empty( $frontend_error_messages ) ) {
296
+
297
+ // Run the before_widgets_import action to setup other settings.
298
+ $this->do_import_action( $action, $this->import_files[ $selected_index ] );
299
+ }
300
+
301
+ /**
302
+ * 4. Import widgets.
303
  */
304
+ if ( ! empty( $selected_import_files['widgets'] ) && empty( $frontend_error_messages ) ) {
305
  $this->import_widgets( $selected_import_files['widgets'] );
306
  }
307
 
308
  /**
309
+ * 5. After import setup.
310
  */
311
+ $action = 'pt-ocdi/after_import';
312
+ if ( ( false !== has_action( $action ) ) && empty( $frontend_error_messages ) ) {
313
 
314
  // Run the after_import action to setup other settings.
315
+ $this->do_import_action( $action, $this->import_files[ $selected_index ] );
316
  }
317
 
318
  // Display final messages (success or error messages).
358
  // Increase PHP max execution time.
359
  set_time_limit( apply_filters( 'pt-ocdi/set_time_limit_for_demo_data_import', 300 ) );
360
 
361
+ // Disable import of authors.
362
+ add_filter( 'wxr_importer.pre_process.user', '__return_false' );
363
+
364
+ // Disables generation of multiple image sizes (thumbnails) in the content import step.
365
+ if ( ! apply_filters( 'pt-ocdi/regenerate_thumbnails_in_content_import', false ) ) {
366
+ add_filter( 'intermediate_image_sizes_advanced',
367
+ function() {
368
+ return null;
369
+ }
370
+ );
371
+ }
372
+
373
  // Import content.
374
  if ( ! empty( $import_file_path ) ) {
375
  ob_start();
434
 
435
 
436
  /**
437
+ * Setup other things in the passed wp action.
438
  *
439
+ * @param string $action the action name to be executed.
440
+ * @param array $selected_import with information about the selected import.
441
  */
442
+ private function do_import_action( $action, $selected_import ) {
443
 
 
 
444
  ob_start();
445
+ do_action( $action, $selected_import );
446
  $message = ob_get_clean();
447
 
448
  // Add this message to log file.
449
  $log_added = OCDI_Helpers::append_to_file(
450
  $message,
451
  $this->log_file_path,
452
+ $action
453
  );
454
  }
455
 
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
  Contributors: capuderg, cyman
3
  Tags: import, content, demo, data, widgets, settings
4
  Requires at least: 4.0.0
5
- Tested up to: 4.4.2
6
- Stable tag: 1.0.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.
@@ -88,6 +88,32 @@ function ocdi_after_import( $selected_import ) {
88
  add_action( 'pt-ocdi/after_import', 'ocdi_after_import' );
89
  `
90
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  = I can't activate the plugin, because of a fatal error, what can I do? =
92
 
93
  You want to activate the plugin, but this error shows up:
@@ -98,6 +124,15 @@ This happens, because your hosting server is using a very old version of PHP. Th
98
 
99
  == Changelog ==
100
 
 
 
 
 
 
 
 
 
 
101
  = 1.0.2 =
102
 
103
  *Release Date - 15 April 2016*
2
  Contributors: capuderg, cyman
3
  Tags: import, content, demo, data, widgets, settings
4
  Requires at least: 4.0.0
5
+ Tested up to: 4.5
6
+ Stable tag: 1.0.3
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.
88
  add_action( 'pt-ocdi/after_import', 'ocdi_after_import' );
89
  `
90
 
91
+ = Can I add some code before the widgets get imported? =
92
+
93
+ Of course you can, use the `pt-ocdi/before_widgets_import` filter. You can also target different predefined demo imports like in the example above. Here is a simple example code of the `pt-ocdi/before_widgets_import` filter:
94
+
95
+ `
96
+ function ocdi_before_widgets_import( $selected_import ) {
97
+ echo "Add your code here that will be executed before the widgets get imported!";
98
+ }
99
+ add_action( 'pt-ocdi/before_widgets_import', 'ocdi_before_widgets_import' );
100
+ `
101
+
102
+ = I'm a theme author and I want to change the plugin intro text, how can I do that? =
103
+
104
+ You can change the plugin intro text by using the `pt-ocdi/plugin_intro_text` filter:
105
+
106
+ `
107
+ function ocdi_plugin_intro_text( $default_text ) {
108
+ $default_text .= '<div class="ocdi__intro-text">This is a custom text added to this plugin intro text.</div>';
109
+
110
+ return $default_text;
111
+ }
112
+ add_action( 'pt-ocdi/plugin_intro_text', 'ocdi_plugin_intro_text' );
113
+ `
114
+
115
+ To add some text in a separate "box", you should wrap your text in a div with a class of 'ocdi__intro-text', like in the code example above.
116
+
117
  = I can't activate the plugin, because of a fatal error, what can I do? =
118
 
119
  You want to activate the plugin, but this error shows up:
124
 
125
  == Changelog ==
126
 
127
+ = 1.0.3 =
128
+
129
+ *Release Date - 27 April 2016*
130
+
131
+ * Added filter to enable image regeneration,
132
+ * Added filter to change the plugin intro text,
133
+ * Added action to execute custom code before widget import,
134
+ * Disabled author imports.
135
+
136
  = 1.0.2 =
137
 
138
  *Release Date - 15 April 2016*
vendor/humanmade/WordPress-Importer/class-wxr-importer.php CHANGED
@@ -73,6 +73,7 @@ class WXR_Importer extends WP_Importer {
73
  * @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.)
74
  * @var bool $fetch_attachments Fetch attachments from the remote server. (True fetches and creates attachment posts, false skips attachments. Default is false.)
75
  * @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.)
 
76
  * }
77
  */
78
  public function __construct( $options = array() ) {
@@ -97,6 +98,7 @@ class WXR_Importer extends WP_Importer {
97
  'update_attachment_guids' => false,
98
  'fetch_attachments' => false,
99
  'aggressive_url_search' => false,
 
100
  ) );
101
  }
102
 
@@ -131,6 +133,122 @@ class WXR_Importer extends WP_Importer {
131
  return $reader;
132
  }
133
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
134
  /**
135
  * The main controller for the actual import stage.
136
  *
@@ -171,7 +289,7 @@ class WXR_Importer extends WP_Importer {
171
  $reader->next();
172
  break;
173
 
174
- case 'wp:wp_author':
175
  $node = $reader->expand();
176
 
177
  $parsed = $this->parse_author_node( $node );
@@ -268,7 +386,7 @@ class WXR_Importer extends WP_Importer {
268
  $reader->next();
269
  break;
270
 
271
- case 'wp:wp_author':
272
  $node = $reader->expand();
273
 
274
  $parsed = $this->parse_author_node( $node );
@@ -665,7 +783,10 @@ class WXR_Importer extends WP_Importer {
665
 
666
  // Map the author, or mark it as one we need to fix
667
  $author = sanitize_user( $data['post_author'], true );
668
- if ( isset( $this->mapping['user_slug'][ $author ] ) ) {
 
 
 
669
  $data['post_author'] = $this->mapping['user_slug'][ $author ];
670
  }
671
  else {
@@ -734,6 +855,17 @@ class WXR_Importer extends WP_Importer {
734
  $post_type_object->labels->singular_name
735
  ) );
736
  $this->logger->debug( $post_id->get_error_message() );
 
 
 
 
 
 
 
 
 
 
 
737
  return false;
738
  }
739
 
@@ -1215,6 +1347,16 @@ class WXR_Importer extends WP_Importer {
1215
  add_comment_meta( $comment_id, wp_slash( $meta_item['key'] ), wp_slash( $value ) );
1216
  }
1217
 
 
 
 
 
 
 
 
 
 
 
1218
  $num_comments++;
1219
  }
1220
 
@@ -1375,6 +1517,14 @@ class WXR_Importer extends WP_Importer {
1375
  $userdata['user_login']
1376
  ) );
1377
  $this->logger->debug( $user_id->get_error_message() );
 
 
 
 
 
 
 
 
1378
  return false;
1379
  }
1380
 
@@ -1394,6 +1544,13 @@ class WXR_Importer extends WP_Importer {
1394
  ) );
1395
 
1396
  // TODO: Implement meta handling once WXR includes it
 
 
 
 
 
 
 
1397
  }
1398
 
1399
  protected function parse_term_node( $node, $type = 'term' ) {
@@ -1523,6 +1680,15 @@ class WXR_Importer extends WP_Importer {
1523
  ) );
1524
  $this->logger->debug( $result->get_error_message() );
1525
  do_action( 'wp_import_insert_term_failed', $result, $data );
 
 
 
 
 
 
 
 
 
1526
  return false;
1527
  }
1528
 
@@ -1543,6 +1709,14 @@ class WXR_Importer extends WP_Importer {
1543
  ) );
1544
 
1545
  do_action( 'wp_import_insert_term', $term_id, $data );
 
 
 
 
 
 
 
 
1546
  }
1547
 
1548
  /**
73
  * @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.)
74
  * @var bool $fetch_attachments Fetch attachments from the remote server. (True fetches and creates attachment posts, false skips attachments. Default is false.)
75
  * @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.)
76
+ * @var int $default_author User ID to use if author is missing or invalid. (Default is null, which leaves posts unassigned.)
77
  * }
78
  */
79
  public function __construct( $options = array() ) {
98
  'update_attachment_guids' => false,
99
  'fetch_attachments' => false,
100
  'aggressive_url_search' => false,
101
+ 'default_author' => null,
102
  ) );
103
  }
104
 
133
  return $reader;
134
  }
135
 
136
+ /**
137
+ * The main controller for the actual import stage.
138
+ *
139
+ * @param string $file Path to the WXR file for importing
140
+ */
141
+ public function get_preliminary_information( $file ) {
142
+ // Let's run the actual importer now, woot
143
+ $reader = $this->get_reader( $file );
144
+ if ( is_wp_error( $reader ) ) {
145
+ return $reader;
146
+ }
147
+
148
+ // Set the version to compatibility mode first
149
+ $this->version = '1.0';
150
+
151
+ // Start parsing!
152
+ $data = new WXR_Import_Info();
153
+ while ( $reader->read() ) {
154
+ // Only deal with element opens
155
+ if ( $reader->nodeType !== XMLReader::ELEMENT ) {
156
+ continue;
157
+ }
158
+
159
+ switch ( $reader->name ) {
160
+ case 'wp:wxr_version':
161
+ // Upgrade to the correct version
162
+ $this->version = $reader->readString();
163
+
164
+ if ( version_compare( $this->version, self::MAX_WXR_VERSION, '>' ) ) {
165
+ $this->logger->warning( sprintf(
166
+ __( 'This WXR file (version %s) is newer than the importer (version %s) and may not be supported. Please consider updating.', 'wordpress-importer' ),
167
+ $this->version,
168
+ self::MAX_WXR_VERSION
169
+ ) );
170
+ }
171
+
172
+ // Handled everything in this node, move on to the next
173
+ $reader->next();
174
+ break;
175
+
176
+ case 'generator':
177
+ $data->generator = $reader->readString();
178
+ $reader->next();
179
+ break;
180
+
181
+ case 'title':
182
+ $data->title = $reader->readString();
183
+ $reader->next();
184
+ break;
185
+
186
+ case 'wp:base_site_url':
187
+ $data->siteurl = $reader->readString();
188
+ $reader->next();
189
+ break;
190
+
191
+ case 'wp:base_blog_url':
192
+ $data->home = $reader->readString();
193
+ $reader->next();
194
+ break;
195
+
196
+ case 'wp:author':
197
+ $node = $reader->expand();
198
+
199
+ $parsed = $this->parse_author_node( $node );
200
+ if ( is_wp_error( $parsed ) ) {
201
+ $this->log_error( $parsed );
202
+
203
+ // Skip the rest of this post
204
+ $reader->next();
205
+ break;
206
+ }
207
+
208
+ $data->users[] = $parsed;
209
+
210
+ // Handled everything in this node, move on to the next
211
+ $reader->next();
212
+ break;
213
+
214
+ case 'item':
215
+ $node = $reader->expand();
216
+ $parsed = $this->parse_post_node( $node );
217
+ if ( is_wp_error( $parsed ) ) {
218
+ $this->log_error( $parsed );
219
+
220
+ // Skip the rest of this post
221
+ $reader->next();
222
+ break;
223
+ }
224
+
225
+ if ( $parsed['data']['post_type'] === 'attachment' ) {
226
+ $data->media_count++;
227
+ } else {
228
+ $data->post_count++;
229
+ }
230
+ $data->comment_count += count( $parsed['comments'] );
231
+
232
+ // Handled everything in this node, move on to the next
233
+ $reader->next();
234
+ break;
235
+
236
+ case 'wp:category':
237
+ case 'wp:tag':
238
+ case 'wp:term':
239
+ $data->term_count++;
240
+
241
+ // Handled everything in this node, move on to the next
242
+ $reader->next();
243
+ break;
244
+ }
245
+ }
246
+
247
+ $data->version = $this->version;
248
+
249
+ return $data;
250
+ }
251
+
252
  /**
253
  * The main controller for the actual import stage.
254
  *
289
  $reader->next();
290
  break;
291
 
292
+ case 'wp:author':
293
  $node = $reader->expand();
294
 
295
  $parsed = $this->parse_author_node( $node );
386
  $reader->next();
387
  break;
388
 
389
+ case 'wp:author':
390
  $node = $reader->expand();
391
 
392
  $parsed = $this->parse_author_node( $node );
783
 
784
  // Map the author, or mark it as one we need to fix
785
  $author = sanitize_user( $data['post_author'], true );
786
+ if ( empty( $author ) ) {
787
+ // Missing or invalid author, use default if available.
788
+ $data['post_author'] = $this->options['default_author'];
789
+ } elseif ( isset( $this->mapping['user_slug'][ $author ] ) ) {
790
  $data['post_author'] = $this->mapping['user_slug'][ $author ];
791
  }
792
  else {
855
  $post_type_object->labels->singular_name
856
  ) );
857
  $this->logger->debug( $post_id->get_error_message() );
858
+
859
+ /**
860
+ * Post processing failed.
861
+ *
862
+ * @param WP_Error $post_id Error object.
863
+ * @param array $data Raw data imported for the post.
864
+ * @param array $meta Raw meta data, already processed by {@see process_post_meta}.
865
+ * @param array $comments Raw comment data, already processed by {@see process_comments}.
866
+ * @param array $terms Raw term data, already processed.
867
+ */
868
+ do_action( 'wxr_importer.process_failed.post', $post_id, $data, $meta, $comments, $terms );
869
  return false;
870
  }
871
 
1347
  add_comment_meta( $comment_id, wp_slash( $meta_item['key'] ), wp_slash( $value ) );
1348
  }
1349
 
1350
+ /**
1351
+ * Post processing completed.
1352
+ *
1353
+ * @param int $post_id New post ID.
1354
+ * @param array $comment Raw data imported for the comment.
1355
+ * @param array $meta Raw meta data, already processed by {@see process_post_meta}.
1356
+ * @param array $post_id Parent post ID.
1357
+ */
1358
+ do_action( 'wxr_importer.processed.comment', $comment_id, $comment, $meta, $post_id );
1359
+
1360
  $num_comments++;
1361
  }
1362
 
1517
  $userdata['user_login']
1518
  ) );
1519
  $this->logger->debug( $user_id->get_error_message() );
1520
+
1521
+ /**
1522
+ * User processing failed.
1523
+ *
1524
+ * @param WP_Error $user_id Error object.
1525
+ * @param array $userdata Raw data imported for the user.
1526
+ */
1527
+ do_action( 'wxr_importer.process_failed.user', $user_id, $userdata );
1528
  return false;
1529
  }
1530
 
1544
  ) );
1545
 
1546
  // TODO: Implement meta handling once WXR includes it
1547
+ /**
1548
+ * User processing completed.
1549
+ *
1550
+ * @param int $user_id New user ID.
1551
+ * @param array $userdata Raw data imported for the user.
1552
+ */
1553
+ do_action( 'wxr_importer.processed.user', $user_id, $userdata );
1554
  }
1555
 
1556
  protected function parse_term_node( $node, $type = 'term' ) {
1680
  ) );
1681
  $this->logger->debug( $result->get_error_message() );
1682
  do_action( 'wp_import_insert_term_failed', $result, $data );
1683
+
1684
+ /**
1685
+ * Term processing failed.
1686
+ *
1687
+ * @param WP_Error $result Error object.
1688
+ * @param array $data Raw data imported for the term.
1689
+ * @param array $meta Meta data supplied for the term.
1690
+ */
1691
+ do_action( 'wxr_importer.process_failed.term', $result, $data, $meta );
1692
  return false;
1693
  }
1694
 
1709
  ) );
1710
 
1711
  do_action( 'wp_import_insert_term', $term_id, $data );
1712
+
1713
+ /**
1714
+ * Term processing completed.
1715
+ *
1716
+ * @param int $term_id New term ID.
1717
+ * @param array $data Raw data imported for the term.
1718
+ */
1719
+ do_action( 'wxr_importer.processed.term', $term_id, $data );
1720
  }
1721
 
1722
  /**