Version Description
Release Date - 14 May 2016
- Content import now imports in multiple AJAX calls, so there should be no more server timeout errors,
- The setting for generation of multiple image sizes in the content import is again enabled by default,
- Plugin textdomain was loaded, so that translations can be made.
Download this release
Release Info
Developer | capuderg |
Plugin | One Click Demo Import |
Version | 1.1.0 |
Comparing to | |
See all releases |
Code changes from version 1.0.3 to 1.1.0
- assets/css/main.css +2 -1
- assets/js/main.js +16 -8
- inc/class-ocdi-importer.php +18 -2
- inc/class-ocdi-wxr-importer.php +276 -0
- languages/{one-click-demo-import.pot → pt-ocdi.pot} +57 -25
- one-click-demo-import.php +158 -60
- readme.txt +11 -3
assets/css/main.css
CHANGED
@@ -5,14 +5,15 @@
|
|
5 |
|
6 |
/* AJAX loader */
|
7 |
.ocdi__ajax-loader {
|
8 |
-
font-width: bold;
|
9 |
font-size: 1.5em;
|
|
|
10 |
}
|
11 |
|
12 |
.ocdi__ajax-loader .spinner {
|
13 |
display: inline-block;
|
14 |
float: none;
|
15 |
visibility: visible;
|
|
|
16 |
}
|
17 |
|
18 |
/* Plugin intro text */
|
5 |
|
6 |
/* AJAX loader */
|
7 |
.ocdi__ajax-loader {
|
|
|
8 |
font-size: 1.5em;
|
9 |
+
display: none;
|
10 |
}
|
11 |
|
12 |
.ocdi__ajax-loader .spinner {
|
13 |
display: inline-block;
|
14 |
float: none;
|
15 |
visibility: visible;
|
16 |
+
margin-bottom: 6px;
|
17 |
}
|
18 |
|
19 |
/* Plugin intro text */
|
assets/js/main.js
CHANGED
@@ -18,7 +18,12 @@ jQuery( function ( $ ) {
|
|
18 |
data.append( 'widget_file', $('#ocdi__widget-file-upload')[0].files[0] );
|
19 |
}
|
20 |
|
21 |
-
// AJAX call
|
|
|
|
|
|
|
|
|
|
|
22 |
$.ajax({
|
23 |
method: 'POST',
|
24 |
url: ocdi.ajax_url,
|
@@ -26,24 +31,27 @@ jQuery( function ( $ ) {
|
|
26 |
contentType: false,
|
27 |
processData: false,
|
28 |
beforeSend: function() {
|
29 |
-
$( '.js-ocdi-
|
30 |
-
},
|
31 |
-
complete: function() {
|
32 |
-
$( '.js-ocdi-ajax-loader' ).hide( 500, function(){ $( '.js-ocdi-ajax-loader' ).remove(); } );
|
33 |
}
|
34 |
})
|
35 |
.done( function( response ) {
|
36 |
-
|
|
|
|
|
|
|
|
|
37 |
$( '.js-ocdi-ajax-response' ).append( '<p>' + response.message + '</p>' );
|
|
|
38 |
}
|
39 |
else {
|
40 |
$( '.js-ocdi-ajax-response' ).append( '<div class="error below-h2"><p>' + response + '</p></div>' );
|
|
|
41 |
}
|
42 |
})
|
43 |
.fail( function( error ) {
|
44 |
$( '.js-ocdi-ajax-response' ).append( '<div class="error below-h2"> Error: ' + error.statusText + ' (' + error.status + ')' + '</div>' );
|
|
|
45 |
});
|
46 |
-
|
47 |
-
});
|
48 |
|
49 |
});
|
18 |
data.append( 'widget_file', $('#ocdi__widget-file-upload')[0].files[0] );
|
19 |
}
|
20 |
|
21 |
+
// AJAX call to import everything (content, widgets, before/after setup)
|
22 |
+
ajaxCall( data );
|
23 |
+
|
24 |
+
});
|
25 |
+
|
26 |
+
function ajaxCall( data ) {
|
27 |
$.ajax({
|
28 |
method: 'POST',
|
29 |
url: ocdi.ajax_url,
|
31 |
contentType: false,
|
32 |
processData: false,
|
33 |
beforeSend: function() {
|
34 |
+
$( '.js-ocdi-ajax-loader' ).show();
|
|
|
|
|
|
|
35 |
}
|
36 |
})
|
37 |
.done( function( response ) {
|
38 |
+
|
39 |
+
if ( 'undefined' !== typeof response.status && 'newAJAX' === response.status ) {
|
40 |
+
ajaxCall( data );
|
41 |
+
}
|
42 |
+
else if ( 'undefined' !== typeof response.message ) {
|
43 |
$( '.js-ocdi-ajax-response' ).append( '<p>' + response.message + '</p>' );
|
44 |
+
$( '.js-ocdi-ajax-loader' ).hide();
|
45 |
}
|
46 |
else {
|
47 |
$( '.js-ocdi-ajax-response' ).append( '<div class="error below-h2"><p>' + response + '</p></div>' );
|
48 |
+
$( '.js-ocdi-ajax-loader' ).hide();
|
49 |
}
|
50 |
})
|
51 |
.fail( function( error ) {
|
52 |
$( '.js-ocdi-ajax-response' ).append( '<div class="error below-h2"> Error: ' + error.statusText + ' (' + error.status + ')' + '</div>' );
|
53 |
+
$( '.js-ocdi-ajax-loader' ).hide();
|
54 |
});
|
55 |
+
}
|
|
|
56 |
|
57 |
});
|
inc/class-ocdi-importer.php
CHANGED
@@ -16,7 +16,7 @@ class OCDI_Importer {
|
|
16 |
|
17 |
// Set the WordPress Importer v2 as the importer used in this plugin.
|
18 |
// More: https://github.com/humanmade/WordPress-Importer.
|
19 |
-
$this->importer = new
|
20 |
|
21 |
// Set logger to the importer.
|
22 |
if ( ! empty( $logger ) ) {
|
@@ -32,7 +32,7 @@ class OCDI_Importer {
|
|
32 |
defined( 'WP_LOAD_IMPORTERS' ) || define( 'WP_LOAD_IMPORTERS', true );
|
33 |
require ABSPATH . '/wp-admin/includes/class-wp-importer.php';
|
34 |
}
|
35 |
-
require PT_OCDI_PATH . '
|
36 |
}
|
37 |
|
38 |
/**
|
@@ -52,4 +52,20 @@ class OCDI_Importer {
|
|
52 |
public function set_logger( $logger ) {
|
53 |
$this->importer->set_logger( $logger );
|
54 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55 |
}
|
16 |
|
17 |
// Set the WordPress Importer v2 as the importer used in this plugin.
|
18 |
// More: https://github.com/humanmade/WordPress-Importer.
|
19 |
+
$this->importer = new OCDI_WXR_Importer( $importer_options );
|
20 |
|
21 |
// Set logger to the importer.
|
22 |
if ( ! empty( $logger ) ) {
|
32 |
defined( 'WP_LOAD_IMPORTERS' ) || define( 'WP_LOAD_IMPORTERS', true );
|
33 |
require ABSPATH . '/wp-admin/includes/class-wp-importer.php';
|
34 |
}
|
35 |
+
require PT_OCDI_PATH . 'inc/class-ocdi-wxr-importer.php';
|
36 |
}
|
37 |
|
38 |
/**
|
52 |
public function set_logger( $logger ) {
|
53 |
$this->importer->set_logger( $logger );
|
54 |
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* Get all protected variables from the WXR_Importer needed for continuing the import.
|
58 |
+
*/
|
59 |
+
public function get_importer_data() {
|
60 |
+
return $this->importer->get_importer_data();
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Sets all protected variables from the WXR_Importer needed for continuing the import.
|
65 |
+
*
|
66 |
+
* @param array $data with set variables.
|
67 |
+
*/
|
68 |
+
public function set_importer_data( $data ) {
|
69 |
+
$this->importer->set_importer_data( $data );
|
70 |
+
}
|
71 |
}
|
inc/class-ocdi-wxr-importer.php
ADDED
@@ -0,0 +1,276 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WXR importer class used in the One Click Demo Import plugin.
|
4 |
+
* Needed to extend the WXR_Importer class to get/set the importer protected variables,
|
5 |
+
* for use in the multiple AJAX calls.
|
6 |
+
*
|
7 |
+
* Overwritten process_post method to fix the menu items/tags import issue. This
|
8 |
+
* should be removed when it is fixed in the original importer.
|
9 |
+
*
|
10 |
+
* @package ocdi
|
11 |
+
*/
|
12 |
+
|
13 |
+
// Include required files.
|
14 |
+
require PT_OCDI_PATH . 'vendor/humanmade/WordPress-Importer/class-wxr-importer.php';
|
15 |
+
|
16 |
+
class OCDI_WXR_Importer extends WXR_Importer {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Get all protected variables from the WXR_Importer needed for continuing the import.
|
20 |
+
*/
|
21 |
+
public function get_importer_data() {
|
22 |
+
return array(
|
23 |
+
'mapping' => $this->mapping,
|
24 |
+
'requires_remapping' => $this->requires_remapping,
|
25 |
+
'exists' => $this->exists,
|
26 |
+
'user_slug_override' => $this->user_slug_override,
|
27 |
+
'url_remap' => $this->url_remap,
|
28 |
+
'featured_images' => $this->featured_images,
|
29 |
+
);
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Sets all protected variables from the WXR_Importer needed for continuing the import.
|
34 |
+
*
|
35 |
+
* @param array $data with set variables.
|
36 |
+
*/
|
37 |
+
public function set_importer_data( $data ) {
|
38 |
+
$this->mapping = empty( $data['mapping'] ) ? array() : $data['mapping'];
|
39 |
+
$this->requires_remapping = empty( $data['requires_remapping'] ) ? array() : $data['requires_remapping'];
|
40 |
+
$this->exists = empty( $data['exists'] ) ? array() : $data['exists'];
|
41 |
+
$this->user_slug_override = empty( $data['user_slug_override'] ) ? array() : $data['user_slug_override'];
|
42 |
+
$this->url_remap = empty( $data['url_remap'] ) ? array() : $data['url_remap'];
|
43 |
+
$this->featured_images = empty( $data['featured_images'] ) ? array() : $data['featured_images'];
|
44 |
+
}
|
45 |
+
|
46 |
+
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Create new posts based on import information
|
50 |
+
*
|
51 |
+
* Posts marked as having a parent which doesn't exist will become top level items.
|
52 |
+
* Doesn't create a new post if: the post type doesn't exist, the given post ID
|
53 |
+
* is already noted as imported or a post with the same title and date already exists.
|
54 |
+
* Note that new/updated terms, comments and meta are imported for the last of the above.
|
55 |
+
*
|
56 |
+
*
|
57 |
+
* The only thing that is changed in this function is a typecesting to int!!!
|
58 |
+
* It is marked with a couple of lines of comments -> !!!OCDI:
|
59 |
+
*
|
60 |
+
*/
|
61 |
+
protected function process_post( $data, $meta, $comments, $terms ) {
|
62 |
+
/**
|
63 |
+
* Pre-process post data.
|
64 |
+
*
|
65 |
+
* @param array $data Post data. (Return empty to skip.)
|
66 |
+
* @param array $meta Meta data.
|
67 |
+
* @param array $comments Comments on the post.
|
68 |
+
* @param array $terms Terms on the post.
|
69 |
+
*/
|
70 |
+
$data = apply_filters( 'wxr_importer.pre_process.post', $data, $meta, $comments, $terms );
|
71 |
+
if ( empty( $data ) ) {
|
72 |
+
return false;
|
73 |
+
}
|
74 |
+
|
75 |
+
$original_id = isset( $data['post_id'] ) ? (int) $data['post_id'] : 0;
|
76 |
+
$parent_id = isset( $data['post_parent'] ) ? (int) $data['post_parent'] : 0;
|
77 |
+
$author_id = isset( $data['post_author'] ) ? (int) $data['post_author'] : 0;
|
78 |
+
|
79 |
+
// Have we already processed this?
|
80 |
+
if ( isset( $this->mapping['post'][ $original_id ] ) ) {
|
81 |
+
return;
|
82 |
+
}
|
83 |
+
|
84 |
+
$post_type_object = get_post_type_object( $data['post_type'] );
|
85 |
+
|
86 |
+
// Is this type even valid?
|
87 |
+
if ( ! $post_type_object ) {
|
88 |
+
$this->logger->warning( sprintf(
|
89 |
+
__( 'Failed to import "%s": Invalid post type %s', 'pt-ocdi' ),
|
90 |
+
$data['post_title'],
|
91 |
+
$data['post_type']
|
92 |
+
) );
|
93 |
+
return false;
|
94 |
+
}
|
95 |
+
|
96 |
+
$post_exists = $this->post_exists( $data );
|
97 |
+
if ( $post_exists ) {
|
98 |
+
$this->logger->info( sprintf(
|
99 |
+
__('%s "%s" already exists.', 'pt-ocdi'),
|
100 |
+
$post_type_object->labels->singular_name,
|
101 |
+
$data['post_title']
|
102 |
+
) );
|
103 |
+
|
104 |
+
return false;
|
105 |
+
}
|
106 |
+
|
107 |
+
// Map the parent post, or mark it as one we need to fix
|
108 |
+
$requires_remapping = false;
|
109 |
+
if ( $parent_id ) {
|
110 |
+
if ( isset( $this->mapping['post'][ $parent_id ] ) ) {
|
111 |
+
$data['post_parent'] = $this->mapping['post'][ $parent_id ];
|
112 |
+
} else {
|
113 |
+
$meta[] = array( 'key' => '_wxr_import_parent', 'value' => $parent_id );
|
114 |
+
$requires_remapping = true;
|
115 |
+
|
116 |
+
$data['post_parent'] = 0;
|
117 |
+
}
|
118 |
+
}
|
119 |
+
|
120 |
+
// Map the author, or mark it as one we need to fix
|
121 |
+
$author = sanitize_user( $data['post_author'], true );
|
122 |
+
if ( empty( $author ) ) {
|
123 |
+
// Missing or invalid author, use default if available.
|
124 |
+
$data['post_author'] = $this->options['default_author'];
|
125 |
+
} elseif ( isset( $this->mapping['user_slug'][ $author ] ) ) {
|
126 |
+
$data['post_author'] = $this->mapping['user_slug'][ $author ];
|
127 |
+
}
|
128 |
+
else {
|
129 |
+
$meta[] = array( 'key' => '_wxr_import_user_slug', 'value' => $author );
|
130 |
+
$requires_remapping = true;
|
131 |
+
|
132 |
+
$data['post_author'] = (int) get_current_user_id();
|
133 |
+
}
|
134 |
+
|
135 |
+
// Does the post look like it contains attachment images?
|
136 |
+
if ( preg_match( self::REGEX_HAS_ATTACHMENT_REFS, $data['post_content'] ) ) {
|
137 |
+
$meta[] = array( 'key' => '_wxr_import_has_attachment_refs', 'value' => true );
|
138 |
+
$requires_remapping = true;
|
139 |
+
}
|
140 |
+
|
141 |
+
// Whitelist to just the keys we allow
|
142 |
+
$postdata = array(
|
143 |
+
'import_id' => $data['post_id'],
|
144 |
+
);
|
145 |
+
$allowed = array(
|
146 |
+
'post_author' => true,
|
147 |
+
'post_date' => true,
|
148 |
+
'post_date_gmt' => true,
|
149 |
+
'post_content' => true,
|
150 |
+
'post_excerpt' => true,
|
151 |
+
'post_title' => true,
|
152 |
+
'post_status' => true,
|
153 |
+
'post_name' => true,
|
154 |
+
'comment_status' => true,
|
155 |
+
'ping_status' => true,
|
156 |
+
'guid' => true,
|
157 |
+
'post_parent' => true,
|
158 |
+
'menu_order' => true,
|
159 |
+
'post_type' => true,
|
160 |
+
'post_password' => true,
|
161 |
+
);
|
162 |
+
foreach ( $data as $key => $value ) {
|
163 |
+
if ( ! isset( $allowed[ $key ] ) ) {
|
164 |
+
continue;
|
165 |
+
}
|
166 |
+
|
167 |
+
$postdata[ $key ] = $data[ $key ];
|
168 |
+
}
|
169 |
+
|
170 |
+
$postdata = apply_filters( 'wp_import_post_data_processed', $postdata, $data );
|
171 |
+
|
172 |
+
if ( 'attachment' === $postdata['post_type'] ) {
|
173 |
+
if ( ! $this->options['fetch_attachments'] ) {
|
174 |
+
$this->logger->notice( sprintf(
|
175 |
+
__( 'Skipping attachment "%s", fetching attachments disabled', 'pt-ocdi' ),
|
176 |
+
$data['post_title']
|
177 |
+
) );
|
178 |
+
return false;
|
179 |
+
}
|
180 |
+
$remote_url = ! empty($data['attachment_url']) ? $data['attachment_url'] : $data['guid'];
|
181 |
+
$post_id = $this->process_attachment( $postdata, $meta, $remote_url );
|
182 |
+
} else {
|
183 |
+
$post_id = wp_insert_post( $postdata, true );
|
184 |
+
do_action( 'wp_import_insert_post', $post_id, $original_id, $postdata, $data );
|
185 |
+
}
|
186 |
+
|
187 |
+
if ( is_wp_error( $post_id ) ) {
|
188 |
+
$this->logger->error( sprintf(
|
189 |
+
__( 'Failed to import "%s" (%s)', 'pt-ocdi' ),
|
190 |
+
$data['post_title'],
|
191 |
+
$post_type_object->labels->singular_name
|
192 |
+
) );
|
193 |
+
$this->logger->debug( $post_id->get_error_message() );
|
194 |
+
|
195 |
+
/**
|
196 |
+
* Post processing failed.
|
197 |
+
*
|
198 |
+
* @param WP_Error $post_id Error object.
|
199 |
+
* @param array $data Raw data imported for the post.
|
200 |
+
* @param array $meta Raw meta data, already processed by {@see process_post_meta}.
|
201 |
+
* @param array $comments Raw comment data, already processed by {@see process_comments}.
|
202 |
+
* @param array $terms Raw term data, already processed.
|
203 |
+
*/
|
204 |
+
do_action( 'wxr_importer.process_failed.post', $post_id, $data, $meta, $comments, $terms );
|
205 |
+
return false;
|
206 |
+
}
|
207 |
+
|
208 |
+
// Ensure stickiness is handled correctly too
|
209 |
+
if ( $data['is_sticky'] == 1 ) {
|
210 |
+
stick_post( $post_id );
|
211 |
+
}
|
212 |
+
|
213 |
+
// map pre-import ID to local ID
|
214 |
+
$this->mapping['post'][ $original_id ] = (int) $post_id;
|
215 |
+
if ( $requires_remapping ) {
|
216 |
+
$this->requires_remapping['post'][ $post_id ] = true;
|
217 |
+
}
|
218 |
+
$this->mark_post_exists( $data, $post_id );
|
219 |
+
|
220 |
+
$this->logger->info( sprintf(
|
221 |
+
__( 'Imported "%s" (%s)', 'pt-ocdi' ),
|
222 |
+
$data['post_title'],
|
223 |
+
$post_type_object->labels->singular_name
|
224 |
+
) );
|
225 |
+
$this->logger->debug( sprintf(
|
226 |
+
__( 'Post %d remapped to %d', 'pt-ocdi' ),
|
227 |
+
$original_id,
|
228 |
+
$post_id
|
229 |
+
) );
|
230 |
+
|
231 |
+
// Handle the terms too
|
232 |
+
$terms = apply_filters( 'wp_import_post_terms', $terms, $post_id, $data );
|
233 |
+
|
234 |
+
if ( ! empty( $terms ) ) {
|
235 |
+
$term_ids = array();
|
236 |
+
foreach ( $terms as $term ) {
|
237 |
+
$taxonomy = $term['taxonomy'];
|
238 |
+
$key = sha1( $taxonomy . ':' . $term['slug'] );
|
239 |
+
|
240 |
+
if ( isset( $this->mapping['term'][ $key ] ) ) {
|
241 |
+
// !!!OCDI: The only change from the original importer code is this typecasting (int) bellow.
|
242 |
+
// !!!OCDI: The only change from the original importer code is this typecasting (int) bellow.
|
243 |
+
// !!!OCDI: The only change from the original importer code is this typecasting (int) bellow.
|
244 |
+
$term_ids[ $taxonomy ][] = (int) $this->mapping['term'][ $key ];
|
245 |
+
}
|
246 |
+
else {
|
247 |
+
$meta[] = array( 'key' => '_wxr_import_term', 'value' => $term );
|
248 |
+
$requires_remapping = true;
|
249 |
+
}
|
250 |
+
}
|
251 |
+
|
252 |
+
foreach ( $term_ids as $tax => $ids ) {
|
253 |
+
$tt_ids = wp_set_post_terms( $post_id, $ids, $tax );
|
254 |
+
do_action( 'wp_import_set_post_terms', $tt_ids, $ids, $tax, $post_id, $data );
|
255 |
+
}
|
256 |
+
}
|
257 |
+
|
258 |
+
$this->process_comments( $comments, $post_id, $data );
|
259 |
+
$this->process_post_meta( $meta, $post_id, $data );
|
260 |
+
|
261 |
+
if ( 'nav_menu_item' === $data['post_type'] ) {
|
262 |
+
$this->process_menu_item_meta( $post_id, $data, $meta );
|
263 |
+
}
|
264 |
+
|
265 |
+
/**
|
266 |
+
* Post processing completed.
|
267 |
+
*
|
268 |
+
* @param int $post_id New post ID.
|
269 |
+
* @param array $data Raw data imported for the post.
|
270 |
+
* @param array $meta Raw meta data, already processed by {@see process_post_meta}.
|
271 |
+
* @param array $comments Raw comment data, already processed by {@see process_comments}.
|
272 |
+
* @param array $terms Raw term data, already processed.
|
273 |
+
*/
|
274 |
+
do_action( 'wxr_importer.processed.post', $post_id, $data, $meta, $comments, $terms );
|
275 |
+
}
|
276 |
+
}
|
languages/{one-click-demo-import.pot → pt-ocdi.pot}
RENAMED
@@ -2,9 +2,9 @@
|
|
2 |
# This file is distributed under the GPL 2.0.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: One Click Demo Import 1.0
|
6 |
"Report-Msgid-Bugs-To: http://support.proteusthemes.com/\n"
|
7 |
-
"POT-Creation-Date: 2016-
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=utf-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -136,17 +136,41 @@ msgstr ""
|
|
136 |
msgid "No results for widget import!"
|
137 |
msgstr ""
|
138 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
139 |
#. Plugin Name of the plugin/theme
|
140 |
msgid "One Click Demo Import"
|
141 |
msgstr ""
|
142 |
|
143 |
-
#: one-click-demo-import.php:
|
144 |
msgid ""
|
145 |
"%sWarning: your server is using %sPHP safe mode%s. This means that you "
|
146 |
"might experience server timeout errors.%s"
|
147 |
msgstr ""
|
148 |
|
149 |
-
#: one-click-demo-import.php:
|
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 +178,69 @@ msgid ""
|
|
154 |
"data, the following things might happen:"
|
155 |
msgstr ""
|
156 |
|
157 |
-
#: one-click-demo-import.php:
|
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:
|
164 |
msgid "Posts, pages, images, widgets and menus will get imported."
|
165 |
msgstr ""
|
166 |
|
167 |
-
#: one-click-demo-import.php:
|
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:
|
174 |
msgid "Before you begin, make sure all the required plugins are activated."
|
175 |
msgstr ""
|
176 |
|
177 |
-
#: one-click-demo-import.php:
|
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:
|
184 |
msgid "Choose a XML file for content import:"
|
185 |
msgstr ""
|
186 |
|
187 |
-
#: one-click-demo-import.php:
|
188 |
msgid "optional"
|
189 |
msgstr ""
|
190 |
|
191 |
-
#: one-click-demo-import.php:
|
192 |
msgid "Choose a WIE or JSON file for widget import:"
|
193 |
msgstr ""
|
194 |
|
195 |
-
#: one-click-demo-import.php:
|
196 |
msgid "Import Demo Data"
|
197 |
msgstr ""
|
198 |
|
199 |
-
#: one-click-demo-import.php:
|
200 |
-
msgid "Importing
|
201 |
msgstr ""
|
202 |
|
203 |
-
#: one-click-demo-import.php:
|
204 |
msgid "Manually uploaded files"
|
205 |
msgstr ""
|
206 |
|
207 |
-
#: one-click-demo-import.php:
|
208 |
msgid "Downloaded files"
|
209 |
msgstr ""
|
210 |
|
211 |
-
#: one-click-demo-import.php:
|
212 |
msgid "The import files for: %s were successfully downloaded!"
|
213 |
msgstr ""
|
214 |
|
215 |
-
#: one-click-demo-import.php:
|
216 |
msgid "No import files specified!"
|
217 |
msgstr ""
|
218 |
|
219 |
-
#: one-click-demo-import.php:
|
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,23 +248,27 @@ msgid ""
|
|
224 |
"it has done its job.%5$s"
|
225 |
msgstr ""
|
226 |
|
227 |
-
#: one-click-demo-import.php:
|
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:
|
235 |
msgid "Importing content"
|
236 |
msgstr ""
|
237 |
|
238 |
-
#: one-click-demo-import.php:
|
239 |
msgid "Importing widgets"
|
240 |
msgstr ""
|
241 |
|
242 |
-
|
243 |
-
msgid "
|
|
|
|
|
|
|
|
|
244 |
msgstr ""
|
245 |
|
246 |
#. Description of the plugin/theme
|
@@ -251,4 +279,8 @@ msgstr ""
|
|
251 |
|
252 |
#. Author of the plugin/theme
|
253 |
msgid "ProteusThemes"
|
|
|
|
|
|
|
|
|
254 |
msgstr ""
|
2 |
# This file is distributed under the GPL 2.0.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: One Click Demo Import 1.1.0\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"
|
136 |
msgid "No results for widget import!"
|
137 |
msgstr ""
|
138 |
|
139 |
+
#: inc/class-ocdi-wxr-importer.php:89
|
140 |
+
msgid "Failed to import \"%s\": Invalid post type %s"
|
141 |
+
msgstr ""
|
142 |
+
|
143 |
+
#: inc/class-ocdi-wxr-importer.php:99
|
144 |
+
msgid "%s \"%s\" already exists."
|
145 |
+
msgstr ""
|
146 |
+
|
147 |
+
#: inc/class-ocdi-wxr-importer.php:175
|
148 |
+
msgid "Skipping attachment \"%s\", fetching attachments disabled"
|
149 |
+
msgstr ""
|
150 |
+
|
151 |
+
#: inc/class-ocdi-wxr-importer.php:189
|
152 |
+
msgid "Failed to import \"%s\" (%s)"
|
153 |
+
msgstr ""
|
154 |
+
|
155 |
+
#: inc/class-ocdi-wxr-importer.php:221
|
156 |
+
msgid "Imported \"%s\" (%s)"
|
157 |
+
msgstr ""
|
158 |
+
|
159 |
+
#: inc/class-ocdi-wxr-importer.php:226
|
160 |
+
msgid "Post %d remapped to %d"
|
161 |
+
msgstr ""
|
162 |
+
|
163 |
#. Plugin Name of the plugin/theme
|
164 |
msgid "One Click Demo Import"
|
165 |
msgstr ""
|
166 |
|
167 |
+
#: one-click-demo-import.php:115
|
168 |
msgid ""
|
169 |
"%sWarning: your server is using %sPHP safe mode%s. This means that you "
|
170 |
"might experience server timeout errors.%s"
|
171 |
msgstr ""
|
172 |
|
173 |
+
#: one-click-demo-import.php:129
|
174 |
msgid ""
|
175 |
"Importing demo data (post, pages, images, theme settings, ...) is the "
|
176 |
"easiest way to setup your theme. It will allow you to quickly edit "
|
178 |
"data, the following things might happen:"
|
179 |
msgstr ""
|
180 |
|
181 |
+
#: one-click-demo-import.php:133
|
182 |
msgid ""
|
183 |
"No existing posts, pages, categories, images, custom post types or any "
|
184 |
"other data will be deleted or modified."
|
185 |
msgstr ""
|
186 |
|
187 |
+
#: one-click-demo-import.php:134
|
188 |
msgid "Posts, pages, images, widgets and menus will get imported."
|
189 |
msgstr ""
|
190 |
|
191 |
+
#: one-click-demo-import.php:135
|
192 |
msgid ""
|
193 |
"Please click \"Import Demo Data\" button only once and wait, it can take a "
|
194 |
"couple of minutes."
|
195 |
msgstr ""
|
196 |
|
197 |
+
#: one-click-demo-import.php:140
|
198 |
msgid "Before you begin, make sure all the required plugins are activated."
|
199 |
msgstr ""
|
200 |
|
201 |
+
#: one-click-demo-import.php:154
|
202 |
msgid ""
|
203 |
"There are no predefined import files available in this theme. Please upload "
|
204 |
"the import files manually!"
|
205 |
msgstr ""
|
206 |
|
207 |
+
#: one-click-demo-import.php:158
|
208 |
msgid "Choose a XML file for content import:"
|
209 |
msgstr ""
|
210 |
|
211 |
+
#: one-click-demo-import.php:161
|
212 |
msgid "optional"
|
213 |
msgstr ""
|
214 |
|
215 |
+
#: one-click-demo-import.php:161
|
216 |
msgid "Choose a WIE or JSON file for widget import:"
|
217 |
msgstr ""
|
218 |
|
219 |
+
#: one-click-demo-import.php:177
|
220 |
msgid "Import Demo Data"
|
221 |
msgstr ""
|
222 |
|
223 |
+
#: one-click-demo-import.php:181
|
224 |
+
msgid "Importing, please wait!"
|
225 |
msgstr ""
|
226 |
|
227 |
+
#: one-click-demo-import.php:260
|
228 |
msgid "Manually uploaded files"
|
229 |
msgstr ""
|
230 |
|
231 |
+
#: one-click-demo-import.php:277 one-click-demo-import.php:288
|
232 |
msgid "Downloaded files"
|
233 |
msgstr ""
|
234 |
|
235 |
+
#: one-click-demo-import.php:284
|
236 |
msgid "The import files for: %s were successfully downloaded!"
|
237 |
msgstr ""
|
238 |
|
239 |
+
#: one-click-demo-import.php:294
|
240 |
msgid "No import files specified!"
|
241 |
msgstr ""
|
242 |
|
243 |
+
#: one-click-demo-import.php:334
|
244 |
msgid ""
|
245 |
"%1$s%3$sThat's it, all done!%4$s%2$sThe demo import has finished. Please "
|
246 |
"check your page and make sure that everything has imported correctly. If it "
|
248 |
"it has done its job.%5$s"
|
249 |
msgstr ""
|
250 |
|
251 |
+
#: one-click-demo-import.php:345
|
252 |
msgid ""
|
253 |
"%1$sThe demo import has finished, but there were some import "
|
254 |
"errors.%2$sMore details about the errors can be found in this %3$s%5$slog "
|
255 |
"file%6$s%4$s%7$s"
|
256 |
msgstr ""
|
257 |
|
258 |
+
#: one-click-demo-import.php:401
|
259 |
msgid "Importing content"
|
260 |
msgstr ""
|
261 |
|
262 |
+
#: one-click-demo-import.php:440 one-click-demo-import.php:452
|
263 |
msgid "Importing widgets"
|
264 |
msgstr ""
|
265 |
|
266 |
+
#: one-click-demo-import.php:502
|
267 |
+
msgid "Completed AJAX call number: "
|
268 |
+
msgstr ""
|
269 |
+
|
270 |
+
#. Plugin URI of the plugin/theme
|
271 |
+
msgid "https://wordpress.org/plugins/one-click-demo-import/"
|
272 |
msgstr ""
|
273 |
|
274 |
#. Description of the plugin/theme
|
279 |
|
280 |
#. Author of the plugin/theme
|
281 |
msgid "ProteusThemes"
|
282 |
+
msgstr ""
|
283 |
+
|
284 |
+
#. Author URI of the plugin/theme
|
285 |
+
msgid "http://www.proteusthemes.com"
|
286 |
msgstr ""
|
one-click-demo-import.php
CHANGED
@@ -2,9 +2,9 @@
|
|
2 |
|
3 |
/*
|
4 |
Plugin Name: One Click Demo Import
|
5 |
-
Plugin URI:
|
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
|
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
|
24 |
|
25 |
// Include files.
|
26 |
require PT_OCDI_PATH . 'inc/class-ocdi-helpers.php';
|
@@ -41,7 +41,7 @@ class PT_One_Click_Demo_Import {
|
|
41 |
/**
|
42 |
* Private variables used throughout the plugin.
|
43 |
*/
|
44 |
-
private $importer, $plugin_page, $import_files, $logger, $log_file_path;
|
45 |
|
46 |
|
47 |
/**
|
@@ -70,6 +70,7 @@ class PT_One_Click_Demo_Import {
|
|
70 |
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
|
71 |
add_action( 'wp_ajax_ocdi_import_demo_data', array( $this, 'import_demo_data_ajax_callback' ) );
|
72 |
add_action( 'after_setup_theme', array( $this, 'setup_plugin_with_filter_data' ) );
|
|
|
73 |
}
|
74 |
|
75 |
|
@@ -176,6 +177,10 @@ class PT_One_Click_Demo_Import {
|
|
176 |
<button class="ocdi__button button-primary js-ocdi-import-data"><?php esc_html_e( 'Import Demo Data', 'pt-ocdi' ); ?></button>
|
177 |
</p>
|
178 |
|
|
|
|
|
|
|
|
|
179 |
<div class="ocdi__response js-ocdi-ajax-response"></div>
|
180 |
</div>
|
181 |
|
@@ -198,7 +203,6 @@ class PT_One_Click_Demo_Import {
|
|
198 |
array(
|
199 |
'ajax_url' => admin_url( 'admin-ajax.php' ),
|
200 |
'ajax_nonce' => wp_create_nonce( 'ocdi-ajax-verification' ),
|
201 |
-
'loader_text' => esc_html__( 'Importing now, please wait!', 'pt-ocdi' ),
|
202 |
)
|
203 |
);
|
204 |
|
@@ -223,100 +227,109 @@ class PT_One_Click_Demo_Import {
|
|
223 |
// Verify if the AJAX call is valid (checks nonce and current_user_can).
|
224 |
OCDI_Helpers::verify_ajax_call();
|
225 |
|
226 |
-
//
|
227 |
-
$
|
228 |
|
229 |
-
|
230 |
-
$demo_import_start_time = date( apply_filters( 'pt-ocdi/date_format_for_file_names', 'Y-m-d__H-i-s' ) );
|
231 |
|
232 |
-
|
233 |
-
|
234 |
|
235 |
-
|
236 |
-
|
237 |
|
238 |
-
|
239 |
-
|
240 |
-
* Manually uploaded import files or predefined import files via filter: pt-ocdi/import_files
|
241 |
-
*/
|
242 |
-
if ( ! empty( $_FILES ) ) { // Using manual file uploads?
|
243 |
|
244 |
-
//
|
245 |
-
$
|
246 |
|
247 |
-
//
|
248 |
-
$this->
|
249 |
-
}
|
250 |
-
elseif ( ! empty( $this->import_files[ $selected_index ] ) ) { // Use predefined import files from wp filter: pt-ocdi/import_files.
|
251 |
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
)
|
257 |
|
258 |
-
|
259 |
-
|
|
|
|
|
|
|
|
|
|
|
260 |
|
261 |
-
//
|
262 |
-
OCDI_Helpers::
|
263 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
264 |
$this->log_file_path,
|
265 |
-
esc_html__( 'Downloaded files', 'pt-ocdi' )
|
266 |
);
|
267 |
}
|
|
|
268 |
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
__( 'The import files for: %s were successfully downloaded!', 'pt-ocdi' ),
|
273 |
-
$this->import_files[ $selected_index ]['import_file_name']
|
274 |
-
) . OCDI_Helpers::import_file_info( $selected_import_files ),
|
275 |
-
$this->log_file_path,
|
276 |
-
esc_html__( 'Downloaded files' , 'pt-ocdi' )
|
277 |
-
);
|
278 |
-
}
|
279 |
-
else {
|
280 |
-
|
281 |
-
// Send JSON Error response to the AJAX call.
|
282 |
-
wp_send_json( esc_html__( 'No import files specified!', 'pt-ocdi' ) );
|
283 |
}
|
284 |
|
285 |
/**
|
286 |
* 2. Import content.
|
287 |
* Returns any errors greater then the "error" logger level, that will be displayed on front page.
|
288 |
*/
|
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).
|
319 |
-
if ( empty( $frontend_error_messages ) ) {
|
320 |
$response['message'] = sprintf(
|
321 |
__( '%1$s%3$sThat\'s it, all done!%4$s%2$sThe demo import has finished. Please check your page and make sure that everything has imported correctly. If it did, you can deactivate the %3$sOne Click Demo Import%4$s plugin, because it has done its job.%5$s', 'pt-ocdi' ),
|
322 |
'<div class="notice notice-success"><p>',
|
@@ -327,7 +340,7 @@ class PT_One_Click_Demo_Import {
|
|
327 |
);
|
328 |
}
|
329 |
else {
|
330 |
-
$response['message'] = $frontend_error_messages . '<br>';
|
331 |
$response['message'] .= sprintf(
|
332 |
__( '%1$sThe demo import has finished, but there were some import errors.%2$sMore details about the errors can be found in this %3$s%5$slog file%6$s%4$s%7$s', 'pt-ocdi' ),
|
333 |
'<div class="notice notice-error"><p>',
|
@@ -351,6 +364,8 @@ class PT_One_Click_Demo_Import {
|
|
351 |
*/
|
352 |
private function import_content( $import_file_path ) {
|
353 |
|
|
|
|
|
354 |
// This should be replaced with multiple AJAX calls (import in smaller chunks)
|
355 |
// so that it would not come to the Internal Error, because of the PHP script timeout.
|
356 |
// Also this function has no effect when PHP is running in safe mode
|
@@ -361,8 +376,11 @@ class PT_One_Click_Demo_Import {
|
|
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',
|
366 |
add_filter( 'intermediate_image_sizes_advanced',
|
367 |
function() {
|
368 |
return null;
|
@@ -384,6 +402,9 @@ class PT_One_Click_Demo_Import {
|
|
384 |
);
|
385 |
}
|
386 |
|
|
|
|
|
|
|
387 |
// Return any error messages for the front page output (errors, critical, alert and emergency level messages only).
|
388 |
return $this->logger->error_output;
|
389 |
}
|
@@ -454,6 +475,83 @@ class PT_One_Click_Demo_Import {
|
|
454 |
}
|
455 |
|
456 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
457 |
/**
|
458 |
* Get data from filters, after the theme has loaded and instantiate the importer.
|
459 |
*/
|
@@ -481,4 +579,4 @@ class PT_One_Click_Demo_Import {
|
|
481 |
}
|
482 |
}
|
483 |
|
484 |
-
$
|
2 |
|
3 |
/*
|
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: 1.1.0
|
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.1.0' );
|
24 |
|
25 |
// Include files.
|
26 |
require PT_OCDI_PATH . 'inc/class-ocdi-helpers.php';
|
41 |
/**
|
42 |
* Private variables used throughout the plugin.
|
43 |
*/
|
44 |
+
private $importer, $plugin_page, $import_files, $logger, $log_file_path, $selected_index, $selected_import_files, $microtime, $frontend_error_messages, $ajax_call_number;
|
45 |
|
46 |
|
47 |
/**
|
70 |
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
|
71 |
add_action( 'wp_ajax_ocdi_import_demo_data', array( $this, 'import_demo_data_ajax_callback' ) );
|
72 |
add_action( 'after_setup_theme', array( $this, 'setup_plugin_with_filter_data' ) );
|
73 |
+
add_action( 'plugins_loaded', array( $this, 'load_textdomain' ) );
|
74 |
}
|
75 |
|
76 |
|
177 |
<button class="ocdi__button button-primary js-ocdi-import-data"><?php esc_html_e( 'Import Demo Data', 'pt-ocdi' ); ?></button>
|
178 |
</p>
|
179 |
|
180 |
+
<p class="ocdi__ajax-loader js-ocdi-ajax-loader">
|
181 |
+
<span class="spinner"></span> <?php esc_html_e( 'Importing, please wait!', 'pt-ocdi' ); ?>
|
182 |
+
</p>
|
183 |
+
|
184 |
<div class="ocdi__response js-ocdi-ajax-response"></div>
|
185 |
</div>
|
186 |
|
203 |
array(
|
204 |
'ajax_url' => admin_url( 'admin-ajax.php' ),
|
205 |
'ajax_nonce' => wp_create_nonce( 'ocdi-ajax-verification' ),
|
|
|
206 |
)
|
207 |
);
|
208 |
|
227 |
// Verify if the AJAX call is valid (checks nonce and current_user_can).
|
228 |
OCDI_Helpers::verify_ajax_call();
|
229 |
|
230 |
+
// Is this a new AJAX call to continue the previous import?
|
231 |
+
$use_existing_importer_data = $this->get_importer_data();
|
232 |
|
233 |
+
if ( ! $use_existing_importer_data ) {
|
|
|
234 |
|
235 |
+
// Set the AJAX call number.
|
236 |
+
$this->ajax_call_number = empty( $this->ajax_call_number ) ? 0 : $this->ajax_call_number;
|
237 |
|
238 |
+
// Error messages displayed on front page.
|
239 |
+
$this->frontend_error_messages = '';
|
240 |
|
241 |
+
// Create a date and time string to use for demo and log file names.
|
242 |
+
$demo_import_start_time = date( apply_filters( 'pt-ocdi/date_format_for_file_names', 'Y-m-d__H-i-s' ) );
|
|
|
|
|
|
|
243 |
|
244 |
+
// Define log file path.
|
245 |
+
$this->log_file_path = OCDI_Helpers::get_log_path( $demo_import_start_time );
|
246 |
|
247 |
+
// Get selected file index or set it to 0.
|
248 |
+
$this->selected_index = empty( $_POST['selected'] ) ? 0 : absint( $_POST['selected'] );
|
|
|
|
|
249 |
|
250 |
+
/**
|
251 |
+
* 1. Prepare import files.
|
252 |
+
* Manually uploaded import files or predefined import files via filter: pt-ocdi/import_files
|
253 |
+
*/
|
254 |
+
if ( ! empty( $_FILES ) ) { // Using manual file uploads?
|
255 |
|
256 |
+
// Get paths for the uploaded files.
|
257 |
+
$this->selected_import_files = OCDI_Helpers::process_uploaded_files( $_FILES, $this->log_file_path );
|
258 |
+
|
259 |
+
// Set the name of the import files, because we used the uploaded files.
|
260 |
+
$this->import_files[ $this->selected_index ]['import_file_name'] = esc_html__( 'Manually uploaded files', 'pt-ocdi' );
|
261 |
+
}
|
262 |
+
elseif ( ! empty( $this->import_files[ $this->selected_index ] ) ) { // Use predefined import files from wp filter: pt-ocdi/import_files.
|
263 |
|
264 |
+
// Download the import files (content and widgets files) and save it to variable for later use.
|
265 |
+
$this->selected_import_files = OCDI_Helpers::download_import_files(
|
266 |
+
$this->import_files[ $this->selected_index ],
|
267 |
+
$demo_import_start_time
|
268 |
+
);
|
269 |
+
|
270 |
+
// Check Errors.
|
271 |
+
if ( is_wp_error( $this->selected_import_files ) ) {
|
272 |
+
|
273 |
+
// Write error to log file and send an AJAX response with the error.
|
274 |
+
OCDI_Helpers::log_error_and_send_ajax_response(
|
275 |
+
$this->selected_import_files->get_error_message(),
|
276 |
+
$this->log_file_path,
|
277 |
+
esc_html__( 'Downloaded files', 'pt-ocdi' )
|
278 |
+
);
|
279 |
+
}
|
280 |
+
|
281 |
+
// Add this message to log file.
|
282 |
+
$log_added = OCDI_Helpers::append_to_file(
|
283 |
+
sprintf(
|
284 |
+
__( 'The import files for: %s were successfully downloaded!', 'pt-ocdi' ),
|
285 |
+
$this->import_files[ $this->selected_index ]['import_file_name']
|
286 |
+
) . OCDI_Helpers::import_file_info( $this->selected_import_files ),
|
287 |
$this->log_file_path,
|
288 |
+
esc_html__( 'Downloaded files' , 'pt-ocdi' )
|
289 |
);
|
290 |
}
|
291 |
+
else {
|
292 |
|
293 |
+
// Send JSON Error response to the AJAX call.
|
294 |
+
wp_send_json( esc_html__( 'No import files specified!', 'pt-ocdi' ) );
|
295 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
296 |
}
|
297 |
|
298 |
/**
|
299 |
* 2. Import content.
|
300 |
* Returns any errors greater then the "error" logger level, that will be displayed on front page.
|
301 |
*/
|
302 |
+
$this->frontend_error_messages .= $this->import_content( $this->selected_import_files['content'] );
|
303 |
|
304 |
/**
|
305 |
* 3. Before widgets import setup.
|
306 |
*/
|
307 |
$action = 'pt-ocdi/before_widgets_import';
|
308 |
+
if ( ( false !== has_action( $action ) ) && empty( $this->frontend_error_messages ) ) {
|
309 |
|
310 |
// Run the before_widgets_import action to setup other settings.
|
311 |
+
$this->do_import_action( $action, $this->import_files[ $this->selected_index ] );
|
312 |
}
|
313 |
|
314 |
/**
|
315 |
* 4. Import widgets.
|
316 |
*/
|
317 |
+
if ( ! empty( $this->selected_import_files['widgets'] ) && empty( $this->frontend_error_messages ) ) {
|
318 |
+
$this->import_widgets( $this->selected_import_files['widgets'] );
|
319 |
}
|
320 |
|
321 |
/**
|
322 |
* 5. After import setup.
|
323 |
*/
|
324 |
$action = 'pt-ocdi/after_import';
|
325 |
+
if ( ( false !== has_action( $action ) ) && empty( $this->frontend_error_messages ) ) {
|
326 |
|
327 |
// Run the after_import action to setup other settings.
|
328 |
+
$this->do_import_action( $action, $this->import_files[ $this->selected_index ] );
|
329 |
}
|
330 |
|
331 |
// Display final messages (success or error messages).
|
332 |
+
if ( empty( $this->frontend_error_messages ) ) {
|
333 |
$response['message'] = sprintf(
|
334 |
__( '%1$s%3$sThat\'s it, all done!%4$s%2$sThe demo import has finished. Please check your page and make sure that everything has imported correctly. If it did, you can deactivate the %3$sOne Click Demo Import%4$s plugin, because it has done its job.%5$s', 'pt-ocdi' ),
|
335 |
'<div class="notice notice-success"><p>',
|
340 |
);
|
341 |
}
|
342 |
else {
|
343 |
+
$response['message'] = $this->frontend_error_messages . '<br>';
|
344 |
$response['message'] .= sprintf(
|
345 |
__( '%1$sThe demo import has finished, but there were some import errors.%2$sMore details about the errors can be found in this %3$s%5$slog file%6$s%4$s%7$s', 'pt-ocdi' ),
|
346 |
'<div class="notice notice-error"><p>',
|
364 |
*/
|
365 |
private function import_content( $import_file_path ) {
|
366 |
|
367 |
+
$this->microtime = microtime( true );
|
368 |
+
|
369 |
// This should be replaced with multiple AJAX calls (import in smaller chunks)
|
370 |
// so that it would not come to the Internal Error, because of the PHP script timeout.
|
371 |
// Also this function has no effect when PHP is running in safe mode
|
376 |
// Disable import of authors.
|
377 |
add_filter( 'wxr_importer.pre_process.user', '__return_false' );
|
378 |
|
379 |
+
// Check, if we need to send another AJAX request.
|
380 |
+
add_filter( 'wxr_importer.pre_process.post', array( $this, 'new_ajax_request_maybe' ) );
|
381 |
+
|
382 |
// Disables generation of multiple image sizes (thumbnails) in the content import step.
|
383 |
+
if ( ! apply_filters( 'pt-ocdi/regenerate_thumbnails_in_content_import', true ) ) {
|
384 |
add_filter( 'intermediate_image_sizes_advanced',
|
385 |
function() {
|
386 |
return null;
|
402 |
);
|
403 |
}
|
404 |
|
405 |
+
// Delete content importer data for current import from DB.
|
406 |
+
delete_transient( 'ocdi_importer_data' );
|
407 |
+
|
408 |
// Return any error messages for the front page output (errors, critical, alert and emergency level messages only).
|
409 |
return $this->logger->error_output;
|
410 |
}
|
475 |
}
|
476 |
|
477 |
|
478 |
+
/**
|
479 |
+
* Check if we need to create a new AJAX request, so that server does not timeout.
|
480 |
+
*
|
481 |
+
* @param array $data current post data.
|
482 |
+
* @return array
|
483 |
+
*/
|
484 |
+
public function new_ajax_request_maybe( $data ) {
|
485 |
+
$time = microtime( true ) - $this->microtime;
|
486 |
+
|
487 |
+
// We should make a new ajax call, if the time is right.
|
488 |
+
if ( $time > apply_filters( 'pt-ocdi/time_for_one_ajax_call', 25 ) ) {
|
489 |
+
$this->ajax_call_number++;
|
490 |
+
$this->set_importer_data();
|
491 |
+
|
492 |
+
$response = array(
|
493 |
+
'status' => 'newAJAX',
|
494 |
+
'message' => 'Time for new AJAX request!: ' . $time,
|
495 |
+
);
|
496 |
+
|
497 |
+
// Add any output to the log file and clear the buffers.
|
498 |
+
$message = ob_get_clean();
|
499 |
+
|
500 |
+
// Add message to log file.
|
501 |
+
$log_added = OCDI_Helpers::append_to_file(
|
502 |
+
__( 'Completed AJAX call number: ' , 'pt-ocdi' ) . $this->ajax_call_number . PHP_EOL . $message,
|
503 |
+
$this->log_file_path,
|
504 |
+
''
|
505 |
+
);
|
506 |
+
|
507 |
+
wp_send_json( $response );
|
508 |
+
}
|
509 |
+
|
510 |
+
return $data;
|
511 |
+
}
|
512 |
+
|
513 |
+
/**
|
514 |
+
* Set current state of the content importer, so we can continue the import with new AJAX request.
|
515 |
+
*/
|
516 |
+
private function set_importer_data() {
|
517 |
+
$data = array(
|
518 |
+
'frontend_error_messages' => $this->frontend_error_messages,
|
519 |
+
'ajax_call_number' => $this->ajax_call_number,
|
520 |
+
'log_file_path' => $this->log_file_path,
|
521 |
+
'selected_index' => $this->selected_index,
|
522 |
+
'selected_import_files' => $this->selected_import_files,
|
523 |
+
);
|
524 |
+
|
525 |
+
$data = array_merge( $data, $this->importer->get_importer_data() );
|
526 |
+
|
527 |
+
set_transient( 'ocdi_importer_data', $data, 0.5 * HOUR_IN_SECONDS );
|
528 |
+
}
|
529 |
+
|
530 |
+
/**
|
531 |
+
* Get content importer data, so we can continue the import with this new AJAX request.
|
532 |
+
*/
|
533 |
+
private function get_importer_data() {
|
534 |
+
if ( $data = get_transient( 'ocdi_importer_data' ) ) {
|
535 |
+
$this->frontend_error_messages = empty( $data['frontend_error_messages'] ) ? '' : $data['frontend_error_messages'];
|
536 |
+
$this->ajax_call_number = empty( $data['ajax_call_number'] ) ? 1 : $data['ajax_call_number'];
|
537 |
+
$this->log_file_path = empty( $data['log_file_path'] ) ? '' : $data['log_file_path'];
|
538 |
+
$this->selected_index = empty( $data['selected_index'] ) ? 0 : $data['selected_index'];
|
539 |
+
$this->selected_import_files = empty( $data['selected_import_files'] ) ? array() : $data['selected_import_files'];
|
540 |
+
$this->importer->set_importer_data( $data );
|
541 |
+
|
542 |
+
return true;
|
543 |
+
}
|
544 |
+
return false;
|
545 |
+
}
|
546 |
+
|
547 |
+
/**
|
548 |
+
* Load the plugin textdomain, so that translations can be made.
|
549 |
+
*/
|
550 |
+
public function load_textdomain() {
|
551 |
+
load_plugin_textdomain( 'pt-ocdi', false, plugin_basename( dirname( __FILE__ ) ) . '/languages' );
|
552 |
+
}
|
553 |
+
|
554 |
+
|
555 |
/**
|
556 |
* Get data from filters, after the theme has loaded and instantiate the importer.
|
557 |
*/
|
579 |
}
|
580 |
}
|
581 |
|
582 |
+
$pt_one_click_demo_import = PT_One_Click_Demo_Import::getInstance();
|
readme.txt
CHANGED
@@ -3,7 +3,7 @@ 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
|
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.
|
@@ -90,7 +90,7 @@ add_action( 'pt-ocdi/after_import', 'ocdi_after_import' );
|
|
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`
|
94 |
|
95 |
`
|
96 |
function ocdi_before_widgets_import( $selected_import ) {
|
@@ -109,7 +109,7 @@ function ocdi_plugin_intro_text( $default_text ) {
|
|
109 |
|
110 |
return $default_text;
|
111 |
}
|
112 |
-
|
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.
|
@@ -124,6 +124,14 @@ This happens, because your hosting server is using a very old version of PHP. Th
|
|
124 |
|
125 |
== Changelog ==
|
126 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
= 1.0.3 =
|
128 |
|
129 |
*Release Date - 27 April 2016*
|
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.1.0
|
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.
|
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` action. 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` action:
|
94 |
|
95 |
`
|
96 |
function ocdi_before_widgets_import( $selected_import ) {
|
109 |
|
110 |
return $default_text;
|
111 |
}
|
112 |
+
add_filter( '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.
|
124 |
|
125 |
== Changelog ==
|
126 |
|
127 |
+
= 1.1.0 =
|
128 |
+
|
129 |
+
*Release Date - 14 May 2016*
|
130 |
+
|
131 |
+
* Content import now imports in multiple AJAX calls, so there should be no more server timeout errors,
|
132 |
+
* The setting for generation of multiple image sizes in the content import is again enabled by default,
|
133 |
+
* Plugin textdomain was loaded, so that translations can be made.
|
134 |
+
|
135 |
= 1.0.3 =
|
136 |
|
137 |
*Release Date - 27 April 2016*
|