Version Description
Download this release
Release Info
Developer | vrundakansara |
Plugin | Astra Starter Sites |
Version | 1.3.8 |
Comparing to | |
See all releases |
Code changes from version 1.3.7 to 1.3.8
- astra-sites.php +2 -2
- inc/assets/js/admin-page.js +1 -1
- inc/assets/js/astra-sites-api.js +28 -26
- inc/classes/class-astra-sites-importer.php +597 -572
- inc/classes/class-astra-sites-page.php +434 -434
- inc/classes/class-astra-sites.php +600 -600
- inc/classes/compatibility/class-astra-sites-compatibility.php +66 -66
- inc/importers/batch-processing/class-astra-sites-batch-processing-beaver-builder.php +261 -261
- inc/importers/batch-processing/class-astra-sites-batch-processing-brizy.php +125 -125
- inc/importers/batch-processing/class-astra-sites-batch-processing-gutenberg.php +165 -165
- inc/importers/batch-processing/helpers/class-astra-sites-image-importer.php +243 -243
- inc/importers/wxr-importer/class-astra-wxr-importer.php +446 -446
- inc/includes/admin-page.php +420 -420
- languages/astra-sites.pot +3 -3
- readme.txt +5 -1
astra-sites.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: Astra Starter Sites – Elementor, Beaver Builder & Gutenberg Templates
|
4 |
* Plugin URI: http://www.wpastra.com/pro/
|
5 |
* Description: Import free sites build with Astra theme.
|
6 |
-
* Version: 1.3.
|
7 |
* Author: Brainstorm Force
|
8 |
* Author URI: http://www.brainstormforce.com
|
9 |
* Text Domain: astra-sites
|
@@ -19,7 +19,7 @@ if ( ! defined( 'ASTRA_SITES_NAME' ) ) {
|
|
19 |
}
|
20 |
|
21 |
if ( ! defined( 'ASTRA_SITES_VER' ) ) {
|
22 |
-
define( 'ASTRA_SITES_VER', '1.3.
|
23 |
}
|
24 |
|
25 |
if ( ! defined( 'ASTRA_SITES_FILE' ) ) {
|
3 |
* Plugin Name: Astra Starter Sites – Elementor, Beaver Builder & Gutenberg Templates
|
4 |
* Plugin URI: http://www.wpastra.com/pro/
|
5 |
* Description: Import free sites build with Astra theme.
|
6 |
+
* Version: 1.3.8
|
7 |
* Author: Brainstorm Force
|
8 |
* Author URI: http://www.brainstormforce.com
|
9 |
* Text Domain: astra-sites
|
19 |
}
|
20 |
|
21 |
if ( ! defined( 'ASTRA_SITES_VER' ) ) {
|
22 |
+
define( 'ASTRA_SITES_VER', '1.3.8' );
|
23 |
}
|
24 |
|
25 |
if ( ! defined( 'ASTRA_SITES_FILE' ) ) {
|
inc/assets/js/admin-page.js
CHANGED
@@ -294,7 +294,7 @@ var AstraSitesAjaxQueue = (function() {
|
|
294 |
}
|
295 |
},
|
296 |
|
297 |
-
_reset_customizer_data() {
|
298 |
$.ajax({
|
299 |
url : astraSitesAdmin.ajaxurl,
|
300 |
type : 'POST',
|
294 |
}
|
295 |
},
|
296 |
|
297 |
+
_reset_customizer_data: function() {
|
298 |
$.ajax({
|
299 |
url : astraSitesAdmin.ajaxurl,
|
300 |
type : 'POST',
|
inc/assets/js/astra-sites-api.js
CHANGED
@@ -14,45 +14,47 @@
|
|
14 |
*/
|
15 |
_api_request: function( args, callback ) {
|
16 |
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
};
|
21 |
|
22 |
if( astraRenderGrid.headers ) {
|
23 |
-
|
24 |
}
|
25 |
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
} else {
|
34 |
-
$(document).trigger( 'astra-sites-api-request-error' );
|
35 |
-
return response.json();
|
36 |
-
}
|
37 |
-
})
|
38 |
-
.then(data => {
|
39 |
-
if( 'object' === typeof data ) {
|
40 |
-
data['args'] = args;
|
41 |
-
if( data.args.id ) {
|
42 |
-
AstraSitesAPI._stored_data[ args.id ] = $.merge( AstraSitesAPI._stored_data[ data.args.id ], data.items );
|
43 |
}
|
44 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
45 |
if( 'undefined' !== typeof args.trigger && '' !== args.trigger ) {
|
46 |
$(document).trigger( args.trigger, [data] );
|
47 |
}
|
48 |
-
|
49 |
-
|
50 |
-
callback( data );
|
51 |
-
}
|
52 |
}
|
53 |
|
|
|
|
|
|
|
|
|
54 |
|
55 |
-
|
|
|
|
|
|
|
56 |
|
57 |
},
|
58 |
|
14 |
*/
|
15 |
_api_request: function( args, callback ) {
|
16 |
|
17 |
+
// Set API Request Data.
|
18 |
+
var data = {
|
19 |
+
url: AstraSitesAPI._api_url + args.slug,
|
20 |
};
|
21 |
|
22 |
if( astraRenderGrid.headers ) {
|
23 |
+
data.headers = astraRenderGrid.headers;
|
24 |
}
|
25 |
|
26 |
+
$.ajax( data )
|
27 |
+
.done(function( items, status, XHR ) {
|
28 |
+
|
29 |
+
if( 'success' === status && XHR.getResponseHeader('x-wp-total') ) {
|
30 |
+
|
31 |
+
if( args.id ) {
|
32 |
+
AstraSitesAPI._stored_data[ args.id ] = $.merge( AstraSitesAPI._stored_data[ args.id ], items );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
}
|
34 |
|
35 |
+
var data = {
|
36 |
+
args : args,
|
37 |
+
items : items,
|
38 |
+
items_count : XHR.getResponseHeader('x-wp-total') || 0,
|
39 |
+
item_pages : XHR.getResponseHeader('x-wp-totalpages') || 0,
|
40 |
+
};
|
41 |
+
|
42 |
if( 'undefined' !== typeof args.trigger && '' !== args.trigger ) {
|
43 |
$(document).trigger( args.trigger, [data] );
|
44 |
}
|
45 |
+
} else {
|
46 |
+
$(document).trigger( 'astra-sites-api-request-error' );
|
|
|
|
|
47 |
}
|
48 |
|
49 |
+
})
|
50 |
+
.fail(function( jqXHR, textStatus ) {
|
51 |
+
|
52 |
+
$(document).trigger( 'astra-sites-api-request-fail', [jqXHR, textStatus, args] );
|
53 |
|
54 |
+
})
|
55 |
+
.always(function() {
|
56 |
+
$(document).trigger( 'astra-sites-api-request-always' );
|
57 |
+
});
|
58 |
|
59 |
},
|
60 |
|
inc/classes/class-astra-sites-importer.php
CHANGED
@@ -1,572 +1,597 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Astra Sites Importer
|
4 |
-
*
|
5 |
-
* @since 1.0.0
|
6 |
-
* @package Astra Sites
|
7 |
-
*/
|
8 |
-
|
9 |
-
defined( 'ABSPATH' ) or exit;
|
10 |
-
|
11 |
-
if ( ! class_exists( 'Astra_Sites_Importer' ) ) :
|
12 |
-
|
13 |
-
/**
|
14 |
-
* Astra Sites Importer
|
15 |
-
*/
|
16 |
-
class Astra_Sites_Importer {
|
17 |
-
|
18 |
-
/**
|
19 |
-
* Instance
|
20 |
-
*
|
21 |
-
* @since 1.0.0
|
22 |
-
* @var (Object) Class object
|
23 |
-
*/
|
24 |
-
public static $_instance = null;
|
25 |
-
|
26 |
-
/**
|
27 |
-
* Set Instance
|
28 |
-
*
|
29 |
-
* @since 1.0.0
|
30 |
-
*
|
31 |
-
* @return object Class object.
|
32 |
-
*/
|
33 |
-
public static function get_instance() {
|
34 |
-
if ( ! isset( self::$_instance ) ) {
|
35 |
-
self::$_instance = new self;
|
36 |
-
}
|
37 |
-
|
38 |
-
return self::$_instance;
|
39 |
-
}
|
40 |
-
|
41 |
-
/**
|
42 |
-
* Constructor.
|
43 |
-
*
|
44 |
-
* @since 1.0.0
|
45 |
-
*/
|
46 |
-
public function __construct() {
|
47 |
-
|
48 |
-
require_once ASTRA_SITES_DIR . 'inc/classes/class-astra-sites-importer-log.php';
|
49 |
-
require_once ASTRA_SITES_DIR . 'inc/importers/class-astra-sites-helper.php';
|
50 |
-
require_once ASTRA_SITES_DIR . 'inc/importers/class-widgets-importer.php';
|
51 |
-
require_once ASTRA_SITES_DIR . 'inc/importers/class-astra-customizer-import.php';
|
52 |
-
require_once ASTRA_SITES_DIR . 'inc/importers/class-astra-site-options-import.php';
|
53 |
-
|
54 |
-
// Import AJAX.
|
55 |
-
add_action( 'wp_ajax_astra-sites-import-set-site-data', array( $this, 'import_start' ) );
|
56 |
-
add_action( 'wp_ajax_astra-sites-import-wpforms', array( $this, 'import_wpforms' ) );
|
57 |
-
add_action( 'wp_ajax_astra-sites-import-customizer-settings', array( $this, 'import_customizer_settings' ) );
|
58 |
-
add_action( 'wp_ajax_astra-sites-import-prepare-xml', array( $this, 'prepare_xml_data' ) );
|
59 |
-
add_action( 'wp_ajax_astra-sites-import-options', array( $this, 'import_options' ) );
|
60 |
-
add_action( 'wp_ajax_astra-sites-import-widgets', array( $this, 'import_widgets' ) );
|
61 |
-
add_action( 'wp_ajax_astra-sites-import-end', array( $this, 'import_end' ) );
|
62 |
-
|
63 |
-
// Hooks in AJAX.
|
64 |
-
add_action( 'astra_sites_import_complete', array( $this, 'clear_cache' ) );
|
65 |
-
add_action( 'init', array( $this, 'load_importer' ) );
|
66 |
-
|
67 |
-
require_once ASTRA_SITES_DIR . 'inc/importers/batch-processing/class-astra-sites-batch-processing.php';
|
68 |
-
|
69 |
-
add_action( 'astra_sites_image_import_complete', array( $this, 'clear_cache' ) );
|
70 |
-
|
71 |
-
// Reset Customizer Data.
|
72 |
-
add_action( 'wp_ajax_astra-sites-reset-customizer-data', array( $this, 'reset_customizer_data' ) );
|
73 |
-
add_action( 'wp_ajax_astra-sites-reset-site-options', array( $this, 'reset_site_options' ) );
|
74 |
-
add_action( 'wp_ajax_astra-sites-reset-widgets-data', array( $this, 'reset_widgets_data' ) );
|
75 |
-
|
76 |
-
// Reset Post & Terms.
|
77 |
-
add_action( 'wp_ajax_astra-sites-delete-posts', array( $this, 'delete_imported_posts' ) );
|
78 |
-
add_action( 'wp_ajax_astra-sites-delete-wp-forms', array( $this, 'delete_imported_wp_forms' ) );
|
79 |
-
add_action( 'wp_ajax_astra-sites-delete-terms', array( $this, 'delete_imported_terms' ) );
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
*
|
91 |
-
*
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
*
|
229 |
-
*
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
if ( !
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
}
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
}
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
*
|
294 |
-
*
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
if (
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
}
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
*
|
438 |
-
*
|
439 |
-
* @
|
440 |
-
*/
|
441 |
-
function
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
/* translators: %s is the
|
562 |
-
wp_send_json_success( $message );
|
563 |
-
}
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Astra Sites Importer
|
4 |
+
*
|
5 |
+
* @since 1.0.0
|
6 |
+
* @package Astra Sites
|
7 |
+
*/
|
8 |
+
|
9 |
+
defined( 'ABSPATH' ) or exit;
|
10 |
+
|
11 |
+
if ( ! class_exists( 'Astra_Sites_Importer' ) ) :
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Astra Sites Importer
|
15 |
+
*/
|
16 |
+
class Astra_Sites_Importer {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Instance
|
20 |
+
*
|
21 |
+
* @since 1.0.0
|
22 |
+
* @var (Object) Class object
|
23 |
+
*/
|
24 |
+
public static $_instance = null;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Set Instance
|
28 |
+
*
|
29 |
+
* @since 1.0.0
|
30 |
+
*
|
31 |
+
* @return object Class object.
|
32 |
+
*/
|
33 |
+
public static function get_instance() {
|
34 |
+
if ( ! isset( self::$_instance ) ) {
|
35 |
+
self::$_instance = new self;
|
36 |
+
}
|
37 |
+
|
38 |
+
return self::$_instance;
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Constructor.
|
43 |
+
*
|
44 |
+
* @since 1.0.0
|
45 |
+
*/
|
46 |
+
public function __construct() {
|
47 |
+
|
48 |
+
require_once ASTRA_SITES_DIR . 'inc/classes/class-astra-sites-importer-log.php';
|
49 |
+
require_once ASTRA_SITES_DIR . 'inc/importers/class-astra-sites-helper.php';
|
50 |
+
require_once ASTRA_SITES_DIR . 'inc/importers/class-widgets-importer.php';
|
51 |
+
require_once ASTRA_SITES_DIR . 'inc/importers/class-astra-customizer-import.php';
|
52 |
+
require_once ASTRA_SITES_DIR . 'inc/importers/class-astra-site-options-import.php';
|
53 |
+
|
54 |
+
// Import AJAX.
|
55 |
+
add_action( 'wp_ajax_astra-sites-import-set-site-data', array( $this, 'import_start' ) );
|
56 |
+
add_action( 'wp_ajax_astra-sites-import-wpforms', array( $this, 'import_wpforms' ) );
|
57 |
+
add_action( 'wp_ajax_astra-sites-import-customizer-settings', array( $this, 'import_customizer_settings' ) );
|
58 |
+
add_action( 'wp_ajax_astra-sites-import-prepare-xml', array( $this, 'prepare_xml_data' ) );
|
59 |
+
add_action( 'wp_ajax_astra-sites-import-options', array( $this, 'import_options' ) );
|
60 |
+
add_action( 'wp_ajax_astra-sites-import-widgets', array( $this, 'import_widgets' ) );
|
61 |
+
add_action( 'wp_ajax_astra-sites-import-end', array( $this, 'import_end' ) );
|
62 |
+
|
63 |
+
// Hooks in AJAX.
|
64 |
+
add_action( 'astra_sites_import_complete', array( $this, 'clear_cache' ) );
|
65 |
+
add_action( 'init', array( $this, 'load_importer' ) );
|
66 |
+
|
67 |
+
require_once ASTRA_SITES_DIR . 'inc/importers/batch-processing/class-astra-sites-batch-processing.php';
|
68 |
+
|
69 |
+
add_action( 'astra_sites_image_import_complete', array( $this, 'clear_cache' ) );
|
70 |
+
|
71 |
+
// Reset Customizer Data.
|
72 |
+
add_action( 'wp_ajax_astra-sites-reset-customizer-data', array( $this, 'reset_customizer_data' ) );
|
73 |
+
add_action( 'wp_ajax_astra-sites-reset-site-options', array( $this, 'reset_site_options' ) );
|
74 |
+
add_action( 'wp_ajax_astra-sites-reset-widgets-data', array( $this, 'reset_widgets_data' ) );
|
75 |
+
|
76 |
+
// Reset Post & Terms.
|
77 |
+
add_action( 'wp_ajax_astra-sites-delete-posts', array( $this, 'delete_imported_posts' ) );
|
78 |
+
add_action( 'wp_ajax_astra-sites-delete-wp-forms', array( $this, 'delete_imported_wp_forms' ) );
|
79 |
+
add_action( 'wp_ajax_astra-sites-delete-terms', array( $this, 'delete_imported_terms' ) );
|
80 |
+
add_filter( 'http_request_timeout', array( $this, 'set_timeout_for_images' ), 10, 2 );
|
81 |
+
}
|
82 |
+
|
83 |
+
/**
|
84 |
+
* Set the timeout for the HTTP request by request URL.
|
85 |
+
*
|
86 |
+
* E.g. If URL is images (jpg|png|gif|jpeg) are from the domain `https://websitedemos.net` then we have set the timeout by 30 seconds. Default 5 seconds.
|
87 |
+
*
|
88 |
+
* @since 1.3.8
|
89 |
+
*
|
90 |
+
* @param int $timeout_value Time in seconds until a request times out. Default 5.
|
91 |
+
* @param string $url The request URL.
|
92 |
+
*/
|
93 |
+
function set_timeout_for_images( $timeout_value, $url ) {
|
94 |
+
|
95 |
+
// URL not contain `https://websitedemos.net` then return $timeout_value.
|
96 |
+
if ( strpos( $url, 'https://websitedemos.net' ) === false ) {
|
97 |
+
return $timeout_value;
|
98 |
+
}
|
99 |
+
|
100 |
+
// Check is image URL of type jpg|png|gif|jpeg.
|
101 |
+
if ( preg_match( '/^((https?:\/\/)|(www\.))([a-z0-9-].?)+(:[0-9]+)?\/[\w\-]+\.(jpg|png|gif|jpeg)\/?$/i', $url ) ) {
|
102 |
+
$timeout_value = 30;
|
103 |
+
}
|
104 |
+
return $timeout_value;
|
105 |
+
}
|
106 |
+
|
107 |
+
/**
|
108 |
+
* Load WordPress WXR importer.
|
109 |
+
*/
|
110 |
+
public function load_importer() {
|
111 |
+
require_once ASTRA_SITES_DIR . 'inc/importers/wxr-importer/class-astra-wxr-importer.php';
|
112 |
+
}
|
113 |
+
|
114 |
+
/**
|
115 |
+
* Start Site Import
|
116 |
+
*
|
117 |
+
* @since 1.1.0
|
118 |
+
* @return void
|
119 |
+
*/
|
120 |
+
function import_start() {
|
121 |
+
|
122 |
+
if ( ! current_user_can( 'customize' ) ) {
|
123 |
+
wp_send_json_error( __( 'You have not "customize" access to import the Astra site.', 'astra-sites' ) );
|
124 |
+
}
|
125 |
+
|
126 |
+
$demo_api_uri = isset( $_POST['api_url'] ) ? esc_url( $_POST['api_url'] ) : '';
|
127 |
+
|
128 |
+
if ( ! empty( $demo_api_uri ) ) {
|
129 |
+
|
130 |
+
$demo_data = self::get_astra_single_demo( $demo_api_uri );
|
131 |
+
|
132 |
+
update_option( 'astra_sites_import_data', $demo_data );
|
133 |
+
|
134 |
+
if ( is_wp_error( $demo_data ) ) {
|
135 |
+
wp_send_json_error( $demo_data->get_error_message() );
|
136 |
+
} else {
|
137 |
+
$log_file = Astra_Sites_Importer_Log::add_log_file_url();
|
138 |
+
if ( isset( $log_file['url'] ) && ! empty( $log_file['url'] ) ) {
|
139 |
+
$demo_data['log_file'] = $log_file['url'];
|
140 |
+
}
|
141 |
+
do_action( 'astra_sites_import_start', $demo_data, $demo_api_uri );
|
142 |
+
}
|
143 |
+
|
144 |
+
wp_send_json_success( $demo_data );
|
145 |
+
|
146 |
+
} else {
|
147 |
+
wp_send_json_error( __( 'Request site API URL is empty. Try again!', 'astra-sites' ) );
|
148 |
+
}
|
149 |
+
|
150 |
+
}
|
151 |
+
|
152 |
+
/**
|
153 |
+
* Import WP Forms
|
154 |
+
*
|
155 |
+
* @since 1.2.14
|
156 |
+
*
|
157 |
+
* @return void
|
158 |
+
*/
|
159 |
+
function import_wpforms() {
|
160 |
+
|
161 |
+
$wpforms_url = ( isset( $_REQUEST['wpforms_url'] ) ) ? urldecode( $_REQUEST['wpforms_url'] ) : '';
|
162 |
+
$ids_mapping = array();
|
163 |
+
|
164 |
+
if ( ! empty( $wpforms_url ) && function_exists( 'wpforms_encode' ) ) {
|
165 |
+
|
166 |
+
// Download XML file.
|
167 |
+
$xml_path = Astra_Sites_Helper::download_file( $wpforms_url );
|
168 |
+
|
169 |
+
if ( $xml_path['success'] ) {
|
170 |
+
if ( isset( $xml_path['data']['file'] ) ) {
|
171 |
+
|
172 |
+
$ext = strtolower( pathinfo( $xml_path['data']['file'], PATHINFO_EXTENSION ) );
|
173 |
+
|
174 |
+
if ( 'json' === $ext ) {
|
175 |
+
$forms = json_decode( file_get_contents( $xml_path['data']['file'] ), true );
|
176 |
+
|
177 |
+
if ( ! empty( $forms ) ) {
|
178 |
+
|
179 |
+
foreach ( $forms as $form ) {
|
180 |
+
$title = ! empty( $form['settings']['form_title'] ) ? $form['settings']['form_title'] : '';
|
181 |
+
$desc = ! empty( $form['settings']['form_desc'] ) ? $form['settings']['form_desc'] : '';
|
182 |
+
|
183 |
+
$new_id = post_exists( $title );
|
184 |
+
|
185 |
+
if ( ! $new_id ) {
|
186 |
+
$new_id = wp_insert_post(
|
187 |
+
array(
|
188 |
+
'post_title' => $title,
|
189 |
+
'post_status' => 'publish',
|
190 |
+
'post_type' => 'wpforms',
|
191 |
+
'post_excerpt' => $desc,
|
192 |
+
)
|
193 |
+
);
|
194 |
+
|
195 |
+
// Set meta for tracking the post.
|
196 |
+
update_post_meta( $new_id, '_astra_sites_imported_wp_forms', true );
|
197 |
+
Astra_Sites_Importer_Log::add( 'Inserted WP Form ' . $new_id );
|
198 |
+
}
|
199 |
+
|
200 |
+
if ( $new_id ) {
|
201 |
+
|
202 |
+
// ID mapping.
|
203 |
+
$ids_mapping[ $form['id'] ] = $new_id;
|
204 |
+
|
205 |
+
$form['id'] = $new_id;
|
206 |
+
wp_update_post(
|
207 |
+
array(
|
208 |
+
'ID' => $new_id,
|
209 |
+
'post_content' => wpforms_encode( $form ),
|
210 |
+
)
|
211 |
+
);
|
212 |
+
}
|
213 |
+
}
|
214 |
+
}
|
215 |
+
}
|
216 |
+
}
|
217 |
+
}
|
218 |
+
}
|
219 |
+
|
220 |
+
update_option( 'astra_sites_wpforms_ids_mapping', $ids_mapping );
|
221 |
+
|
222 |
+
wp_send_json_success( $ids_mapping );
|
223 |
+
}
|
224 |
+
|
225 |
+
/**
|
226 |
+
* Import Customizer Settings.
|
227 |
+
*
|
228 |
+
* @since 1.0.14
|
229 |
+
* @return void
|
230 |
+
*/
|
231 |
+
function import_customizer_settings() {
|
232 |
+
|
233 |
+
$customizer_data = ( isset( $_POST['customizer_data'] ) ) ? (array) json_decode( stripcslashes( $_POST['customizer_data'] ), 1 ) : array();
|
234 |
+
|
235 |
+
if ( ! empty( $customizer_data ) ) {
|
236 |
+
|
237 |
+
Astra_Sites_Importer_Log::add( 'Imported Customizer Settings ' . json_encode( $customizer_data ) );
|
238 |
+
|
239 |
+
// Set meta for tracking the post.
|
240 |
+
update_option( '_astra_sites_old_customizer_data', $customizer_data );
|
241 |
+
|
242 |
+
Astra_Customizer_Import::instance()->import( $customizer_data );
|
243 |
+
|
244 |
+
wp_send_json_success( $customizer_data );
|
245 |
+
|
246 |
+
} else {
|
247 |
+
wp_send_json_error( __( 'Customizer data is empty!', 'astra-sites' ) );
|
248 |
+
}
|
249 |
+
|
250 |
+
}
|
251 |
+
|
252 |
+
/**
|
253 |
+
* Prepare XML Data.
|
254 |
+
*
|
255 |
+
* @since 1.1.0
|
256 |
+
* @return void
|
257 |
+
*/
|
258 |
+
function prepare_xml_data() {
|
259 |
+
|
260 |
+
if ( ! class_exists( 'XMLReader' ) ) {
|
261 |
+
wp_send_json_error( __( 'If XMLReader is not available, it imports all other settings and only skips XML import. This creates an incomplete website. We should bail early and not import anything if this is not present.', 'astra-sites' ) );
|
262 |
+
}
|
263 |
+
|
264 |
+
$wxr_url = ( isset( $_REQUEST['wxr_url'] ) ) ? urldecode( $_REQUEST['wxr_url'] ) : '';
|
265 |
+
|
266 |
+
if ( isset( $wxr_url ) ) {
|
267 |
+
|
268 |
+
Astra_Sites_Importer_Log::add( 'Importing from XML ' . $wxr_url );
|
269 |
+
|
270 |
+
// Download XML file.
|
271 |
+
$xml_path = Astra_Sites_Helper::download_file( $wxr_url );
|
272 |
+
|
273 |
+
if ( $xml_path['success'] ) {
|
274 |
+
if ( isset( $xml_path['data']['file'] ) ) {
|
275 |
+
$data = Astra_WXR_Importer::instance()->get_xml_data( $xml_path['data']['file'] );
|
276 |
+
$data['xml'] = $xml_path['data'];
|
277 |
+
wp_send_json_success( $data );
|
278 |
+
} else {
|
279 |
+
wp_send_json_error( __( 'There was an error downloading the XML file.', 'astra-sites' ) );
|
280 |
+
}
|
281 |
+
} else {
|
282 |
+
wp_send_json_error( $xml_path['data'] );
|
283 |
+
}
|
284 |
+
} else {
|
285 |
+
wp_send_json_error( __( 'Invalid site XML file!', 'astra-sites' ) );
|
286 |
+
}
|
287 |
+
|
288 |
+
}
|
289 |
+
|
290 |
+
/**
|
291 |
+
* Import Options.
|
292 |
+
*
|
293 |
+
* @since 1.0.14
|
294 |
+
* @return void
|
295 |
+
*/
|
296 |
+
function import_options() {
|
297 |
+
|
298 |
+
$options_data = ( isset( $_POST['options_data'] ) ) ? (array) json_decode( stripcslashes( $_POST['options_data'] ), 1 ) : '';
|
299 |
+
|
300 |
+
if ( ! empty( $options_data ) ) {
|
301 |
+
|
302 |
+
// Set meta for tracking the post.
|
303 |
+
if ( is_array( $options_data ) ) {
|
304 |
+
Astra_Sites_Importer_Log::add( 'Imported - Site Options ' . json_encode( $options_data ) );
|
305 |
+
update_option( '_astra_sites_old_site_options', $options_data );
|
306 |
+
}
|
307 |
+
|
308 |
+
$options_importer = Astra_Site_Options_Import::instance();
|
309 |
+
$options_importer->import_options( $options_data );
|
310 |
+
wp_send_json_success( $options_data );
|
311 |
+
} else {
|
312 |
+
wp_send_json_error( __( 'Site options are empty!', 'astra-sites' ) );
|
313 |
+
}
|
314 |
+
|
315 |
+
}
|
316 |
+
|
317 |
+
/**
|
318 |
+
* Import Widgets.
|
319 |
+
*
|
320 |
+
* @since 1.0.14
|
321 |
+
* @return void
|
322 |
+
*/
|
323 |
+
function import_widgets() {
|
324 |
+
|
325 |
+
$widgets_data = ( isset( $_POST['widgets_data'] ) ) ? (object) json_decode( stripcslashes( $_POST['widgets_data'] ) ) : '';
|
326 |
+
|
327 |
+
Astra_Sites_Importer_Log::add( 'Imported - Widgets ' . json_encode( $widgets_data ) );
|
328 |
+
|
329 |
+
if ( ! empty( $widgets_data ) ) {
|
330 |
+
|
331 |
+
$widgets_importer = Astra_Widget_Importer::instance();
|
332 |
+
$status = $widgets_importer->import_widgets_data( $widgets_data );
|
333 |
+
|
334 |
+
// Set meta for tracking the post.
|
335 |
+
if ( is_object( $widgets_data ) ) {
|
336 |
+
$widgets_data = (array) $widgets_data;
|
337 |
+
update_option( '_astra_sites_old_widgets_data', $widgets_data );
|
338 |
+
}
|
339 |
+
|
340 |
+
wp_send_json_success( $widgets_data );
|
341 |
+
} else {
|
342 |
+
wp_send_json_error( __( 'Widget data is empty!', 'astra-sites' ) );
|
343 |
+
}
|
344 |
+
|
345 |
+
}
|
346 |
+
|
347 |
+
/**
|
348 |
+
* Import End.
|
349 |
+
*
|
350 |
+
* @since 1.0.14
|
351 |
+
* @return void
|
352 |
+
*/
|
353 |
+
function import_end() {
|
354 |
+
do_action( 'astra_sites_import_complete' );
|
355 |
+
}
|
356 |
+
|
357 |
+
|
358 |
+
/**
|
359 |
+
* Get single demo.
|
360 |
+
*
|
361 |
+
* @since 1.0.0
|
362 |
+
*
|
363 |
+
* @param (String) $demo_api_uri API URL of a demo.
|
364 |
+
*
|
365 |
+
* @return (Array) $astra_demo_data demo data for the demo.
|
366 |
+
*/
|
367 |
+
public static function get_astra_single_demo( $demo_api_uri ) {
|
368 |
+
|
369 |
+
// default values.
|
370 |
+
$remote_args = array();
|
371 |
+
$defaults = array(
|
372 |
+
'id' => '',
|
373 |
+
'astra-site-widgets-data' => '',
|
374 |
+
'astra-site-customizer-data' => '',
|
375 |
+
'astra-site-options-data' => '',
|
376 |
+
'astra-post-data-mapping' => '',
|
377 |
+
'astra-site-wxr-path' => '',
|
378 |
+
'astra-site-wpforms-path' => '',
|
379 |
+
'astra-enabled-extensions' => '',
|
380 |
+
'astra-custom-404' => '',
|
381 |
+
'required-plugins' => '',
|
382 |
+
'astra-site-taxonomy-mapping' => '',
|
383 |
+
);
|
384 |
+
|
385 |
+
$api_args = apply_filters(
|
386 |
+
'astra_sites_api_args',
|
387 |
+
array(
|
388 |
+
'timeout' => 15,
|
389 |
+
)
|
390 |
+
);
|
391 |
+
|
392 |
+
// Use this for premium demos.
|
393 |
+
$request_params = apply_filters(
|
394 |
+
'astra_sites_api_params',
|
395 |
+
array(
|
396 |
+
'purchase_key' => '',
|
397 |
+
'site_url' => '',
|
398 |
+
)
|
399 |
+
);
|
400 |
+
|
401 |
+
$demo_api_uri = add_query_arg( $request_params, $demo_api_uri );
|
402 |
+
|
403 |
+
// API Call.
|
404 |
+
$response = wp_remote_get( $demo_api_uri, $api_args );
|
405 |
+
|
406 |
+
if ( is_wp_error( $response ) || ( isset( $response->status ) && 0 === $response->status ) ) {
|
407 |
+
if ( isset( $response->status ) ) {
|
408 |
+
$data = json_decode( $response, true );
|
409 |
+
} else {
|
410 |
+
return new WP_Error( 'api_invalid_response_code', $response->get_error_message() );
|
411 |
+
}
|
412 |
+
} else {
|
413 |
+
$data = json_decode( wp_remote_retrieve_body( $response ), true );
|
414 |
+
}
|
415 |
+
|
416 |
+
$data = json_decode( wp_remote_retrieve_body( $response ), true );
|
417 |
+
|
418 |
+
if ( ! isset( $data['code'] ) ) {
|
419 |
+
$remote_args['id'] = $data['id'];
|
420 |
+
$remote_args['astra-site-widgets-data'] = json_decode( $data['astra-site-widgets-data'] );
|
421 |
+
$remote_args['astra-site-customizer-data'] = $data['astra-site-customizer-data'];
|
422 |
+
$remote_args['astra-site-options-data'] = $data['astra-site-options-data'];
|
423 |
+
$remote_args['astra-post-data-mapping'] = $data['astra-post-data-mapping'];
|
424 |
+
$remote_args['astra-site-wxr-path'] = $data['astra-site-wxr-path'];
|
425 |
+
$remote_args['astra-site-wpforms-path'] = $data['astra-site-wpforms-path'];
|
426 |
+
$remote_args['astra-enabled-extensions'] = $data['astra-enabled-extensions'];
|
427 |
+
$remote_args['astra-custom-404'] = $data['astra-custom-404'];
|
428 |
+
$remote_args['required-plugins'] = $data['required-plugins'];
|
429 |
+
$remote_args['astra-site-taxonomy-mapping'] = $data['astra-site-taxonomy-mapping'];
|
430 |
+
}
|
431 |
+
|
432 |
+
// Merge remote demo and defaults.
|
433 |
+
return wp_parse_args( $remote_args, $defaults );
|
434 |
+
}
|
435 |
+
|
436 |
+
/**
|
437 |
+
* Clear Cache.
|
438 |
+
*
|
439 |
+
* @since 1.0.9
|
440 |
+
*/
|
441 |
+
public function clear_cache() {
|
442 |
+
// Clear 'Elementor' file cache.
|
443 |
+
if ( class_exists( '\Elementor\Plugin' ) ) {
|
444 |
+
Elementor\Plugin::$instance->posts_css_manager->clear_cache();
|
445 |
+
}
|
446 |
+
|
447 |
+
// Clear 'Builder Builder' cache.
|
448 |
+
if ( is_callable( 'FLBuilderModel::delete_asset_cache_for_all_posts' ) ) {
|
449 |
+
FLBuilderModel::delete_asset_cache_for_all_posts();
|
450 |
+
}
|
451 |
+
|
452 |
+
// Clear 'Astra Addon' cache.
|
453 |
+
if ( is_callable( 'Astra_Minify::refresh_assets' ) ) {
|
454 |
+
Astra_Minify::refresh_assets();
|
455 |
+
}
|
456 |
+
|
457 |
+
Astra_Sites_Importer_Log::add( 'Complete ' );
|
458 |
+
}
|
459 |
+
|
460 |
+
/**
|
461 |
+
* Reset customizer data
|
462 |
+
*
|
463 |
+
* @since 1.3.0
|
464 |
+
* @return void
|
465 |
+
*/
|
466 |
+
function reset_customizer_data() {
|
467 |
+
Astra_Sites_Importer_Log::add( 'Deleted customizer Settings ' . json_encode( get_option( 'astra-settings', array() ) ) );
|
468 |
+
|
469 |
+
delete_option( 'astra-settings' );
|
470 |
+
|
471 |
+
wp_send_json_success();
|
472 |
+
}
|
473 |
+
|
474 |
+
/**
|
475 |
+
* Reset site options
|
476 |
+
*
|
477 |
+
* @since 1.3.0
|
478 |
+
* @return void
|
479 |
+
*/
|
480 |
+
function reset_site_options() {
|
481 |
+
|
482 |
+
$options = get_option( '_astra_sites_old_site_options', array() );
|
483 |
+
|
484 |
+
Astra_Sites_Importer_Log::add( 'Deleted - Site Options ' . json_encode( $options ) );
|
485 |
+
|
486 |
+
if ( $options ) {
|
487 |
+
foreach ( $options as $option_key => $option_value ) {
|
488 |
+
delete_option( $option_key );
|
489 |
+
}
|
490 |
+
}
|
491 |
+
|
492 |
+
wp_send_json_success();
|
493 |
+
}
|
494 |
+
|
495 |
+
/**
|
496 |
+
* Reset widgets data
|
497 |
+
*
|
498 |
+
* @since 1.3.0
|
499 |
+
* @return void
|
500 |
+
*/
|
501 |
+
function reset_widgets_data() {
|
502 |
+
$old_widgets = get_option( '_astra_sites_old_widgets_data', array() );
|
503 |
+
|
504 |
+
Astra_Sites_Importer_Log::add( 'DELETED - WIDGETS ' . json_encode( $old_widgets ) );
|
505 |
+
|
506 |
+
if ( $old_widgets ) {
|
507 |
+
$sidebars_widgets = get_option( 'sidebars_widgets', array() );
|
508 |
+
|
509 |
+
foreach ( $old_widgets as $sidebar_id => $widgets ) {
|
510 |
+
|
511 |
+
if ( $widgets ) {
|
512 |
+
foreach ( $widgets as $widget_key => $widget_data ) {
|
513 |
+
|
514 |
+
if ( isset( $sidebars_widgets['wp_inactive_widgets'] ) ) {
|
515 |
+
if ( ! in_array( $widget_key, $sidebars_widgets['wp_inactive_widgets'], true ) ) {
|
516 |
+
$sidebars_widgets['wp_inactive_widgets'][] = $widget_key;
|
517 |
+
}
|
518 |
+
}
|
519 |
+
}
|
520 |
+
}
|
521 |
+
}
|
522 |
+
|
523 |
+
update_option( 'sidebars_widgets', $sidebars_widgets );
|
524 |
+
}
|
525 |
+
|
526 |
+
wp_send_json_success();
|
527 |
+
}
|
528 |
+
|
529 |
+
/**
|
530 |
+
* Delete imported posts
|
531 |
+
*
|
532 |
+
* @since 1.3.0
|
533 |
+
* @return void
|
534 |
+
*/
|
535 |
+
function delete_imported_posts() {
|
536 |
+
$post_id = isset( $_REQUEST['post_id'] ) ? absint( $_REQUEST['post_id'] ) : '';
|
537 |
+
$message = 'Deleted - Post ID ' . $post_id . ' - ' . get_post_type( $post_id ) . ' - ' . get_the_title( $post_id );
|
538 |
+
|
539 |
+
Astra_Sites_Importer_Log::add( $message );
|
540 |
+
wp_delete_post( $post_id, true );
|
541 |
+
|
542 |
+
/* translators: %s is the post ID */
|
543 |
+
wp_send_json_success( $message );
|
544 |
+
}
|
545 |
+
|
546 |
+
/**
|
547 |
+
* Delete imported WP forms
|
548 |
+
*
|
549 |
+
* @since 1.3.0
|
550 |
+
* @return void
|
551 |
+
*/
|
552 |
+
function delete_imported_wp_forms() {
|
553 |
+
$post_id = isset( $_REQUEST['post_id'] ) ? absint( $_REQUEST['post_id'] ) : '';
|
554 |
+
|
555 |
+
$message = 'Deleted - Form ID ' . $post_id . ' - ' . get_post_type( $post_id ) . ' - ' . get_the_title( $post_id );
|
556 |
+
|
557 |
+
Astra_Sites_Importer_Log::add( $message );
|
558 |
+
|
559 |
+
wp_delete_post( $post_id, true );
|
560 |
+
|
561 |
+
/* translators: %s is the form ID */
|
562 |
+
wp_send_json_success( $message );
|
563 |
+
}
|
564 |
+
|
565 |
+
/**
|
566 |
+
* Delete imported terms
|
567 |
+
*
|
568 |
+
* @since 1.3.0
|
569 |
+
* @return void
|
570 |
+
*/
|
571 |
+
function delete_imported_terms() {
|
572 |
+
|
573 |
+
$term_id = isset( $_REQUEST['term_id'] ) ? absint( $_REQUEST['term_id'] ) : '';
|
574 |
+
|
575 |
+
$message = '';
|
576 |
+
|
577 |
+
if ( $term_id ) {
|
578 |
+
$term = get_term( $term_id );
|
579 |
+
if ( $term ) {
|
580 |
+
$message = 'Deleted - Term ' . $term_id . ' - ' . $term->name . ' ' . $term->taxonomy;
|
581 |
+
Astra_Sites_Importer_Log::add( $message );
|
582 |
+
wp_delete_term( $term_id, $term->taxonomy );
|
583 |
+
}
|
584 |
+
}
|
585 |
+
|
586 |
+
/* translators: %s is the term ID */
|
587 |
+
wp_send_json_success( $message );
|
588 |
+
}
|
589 |
+
|
590 |
+
}
|
591 |
+
|
592 |
+
/**
|
593 |
+
* Kicking this off by calling 'get_instance()' method
|
594 |
+
*/
|
595 |
+
Astra_Sites_Importer::get_instance();
|
596 |
+
|
597 |
+
endif;
|
inc/classes/class-astra-sites-page.php
CHANGED
@@ -1,434 +1,434 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Astra Sites Page
|
4 |
-
*
|
5 |
-
* @since 1.0.6
|
6 |
-
* @package Astra Sites
|
7 |
-
*/
|
8 |
-
|
9 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
-
exit;
|
11 |
-
}
|
12 |
-
|
13 |
-
if ( ! class_exists( 'Astra_Sites_Page' ) ) {
|
14 |
-
|
15 |
-
/**
|
16 |
-
* Astra Admin Settings
|
17 |
-
*/
|
18 |
-
class Astra_Sites_Page {
|
19 |
-
|
20 |
-
/**
|
21 |
-
* View all actions
|
22 |
-
*
|
23 |
-
* @since 1.0.6
|
24 |
-
* @var array $view_actions
|
25 |
-
*/
|
26 |
-
public $view_actions = array();
|
27 |
-
|
28 |
-
/**
|
29 |
-
* Member Variable
|
30 |
-
*
|
31 |
-
* @var instance
|
32 |
-
*/
|
33 |
-
private static $instance;
|
34 |
-
|
35 |
-
/**
|
36 |
-
* Initiator
|
37 |
-
*
|
38 |
-
* @since 1.3.0
|
39 |
-
*/
|
40 |
-
public static function get_instance() {
|
41 |
-
if ( ! isset( self::$instance ) ) {
|
42 |
-
self::$instance = new self;
|
43 |
-
}
|
44 |
-
return self::$instance;
|
45 |
-
}
|
46 |
-
|
47 |
-
/**
|
48 |
-
* Constructor
|
49 |
-
*
|
50 |
-
* @since 1.3.0
|
51 |
-
*/
|
52 |
-
public function __construct() {
|
53 |
-
|
54 |
-
if ( ! is_admin() ) {
|
55 |
-
return;
|
56 |
-
}
|
57 |
-
|
58 |
-
add_action( 'after_setup_theme', array( $this, 'init_admin_settings' ), 99 );
|
59 |
-
add_action( 'admin_init', array( $this, 'save_page_builder' ) );
|
60 |
-
add_action( 'admin_notices', array( $this, 'getting_started' ) );
|
61 |
-
}
|
62 |
-
|
63 |
-
/**
|
64 |
-
* Admin notice
|
65 |
-
*
|
66 |
-
* @since 1.3.5
|
67 |
-
*
|
68 |
-
* @return void
|
69 |
-
*/
|
70 |
-
function getting_started() {
|
71 |
-
if ( 'plugins' !== get_current_screen()->base ) {
|
72 |
-
return;
|
73 |
-
}
|
74 |
-
|
75 |
-
$processed = get_user_meta( get_current_user_id(), '_astra_sites_gettings_started', true );
|
76 |
-
$product_name = Astra_Sites_White_Label::get_instance()->page_title( 'Astra' );
|
77 |
-
|
78 |
-
if ( $processed ) {
|
79 |
-
return;
|
80 |
-
}
|
81 |
-
|
82 |
-
?>
|
83 |
-
<div class="notice notice-info is-dismissible astra-sites-getting-started-notice">
|
84 |
-
<?php /* translators: %1$s is the admin page URL, %2$s is product name. */ ?>
|
85 |
-
<p><?php printf( __( 'Thank you for choosing %1$s! Check the library of <a class="astra-sites-getting-started-btn" href="%2$s">ready starter sites here »</a>', 'astra-sites' ), $product_name, admin_url( 'themes.php?page=astra-sites' ) ); ?></p>
|
86 |
-
</div>
|
87 |
-
<?php
|
88 |
-
}
|
89 |
-
|
90 |
-
/**
|
91 |
-
* Save Page Builder
|
92 |
-
*
|
93 |
-
* @return void
|
94 |
-
*/
|
95 |
-
function save_page_builder() {
|
96 |
-
|
97 |
-
// Only admins can save settings.
|
98 |
-
if ( ! current_user_can( 'manage_options' ) ) {
|
99 |
-
return;
|
100 |
-
}
|
101 |
-
|
102 |
-
// Make sure we have a valid nonce.
|
103 |
-
if ( isset( $_REQUEST['astra-sites-page-builder'] ) && wp_verify_nonce( $_REQUEST['astra-sites-page-builder'], 'astra-sites-welcome-screen' ) ) {
|
104 |
-
|
105 |
-
// Stored Settings.
|
106 |
-
$stored_data = $this->get_settings();
|
107 |
-
|
108 |
-
// New settings.
|
109 |
-
$new_data = array(
|
110 |
-
'page_builder' => ( isset( $_REQUEST['page_builder'] ) ) ? sanitize_key( $_REQUEST['page_builder'] ) : '',
|
111 |
-
);
|
112 |
-
|
113 |
-
// Merge settings.
|
114 |
-
$data = wp_parse_args( $new_data, $stored_data );
|
115 |
-
|
116 |
-
// Update settings.
|
117 |
-
update_option( 'astra_sites_settings', $data );
|
118 |
-
|
119 |
-
wp_redirect( admin_url( '/themes.php?page=astra-sites' ) );
|
120 |
-
}
|
121 |
-
}
|
122 |
-
|
123 |
-
/**
|
124 |
-
* Get single setting value
|
125 |
-
*
|
126 |
-
* @param string $key Setting key.
|
127 |
-
* @param mixed $defaults Setting value.
|
128 |
-
* @return mixed Stored setting value.
|
129 |
-
*/
|
130 |
-
function get_setting( $key = '', $defaults = '' ) {
|
131 |
-
|
132 |
-
$settings = $this->get_settings();
|
133 |
-
|
134 |
-
if ( empty( $settings ) ) {
|
135 |
-
return $defaults;
|
136 |
-
}
|
137 |
-
|
138 |
-
if ( array_key_exists( $key, $settings ) ) {
|
139 |
-
return $settings[ $key ];
|
140 |
-
}
|
141 |
-
|
142 |
-
return $defaults;
|
143 |
-
}
|
144 |
-
|
145 |
-
/**
|
146 |
-
* Get Settings
|
147 |
-
*
|
148 |
-
* @return array Stored settings.
|
149 |
-
*/
|
150 |
-
function get_settings() {
|
151 |
-
|
152 |
-
$defaults = array(
|
153 |
-
'page_builder' => '',
|
154 |
-
);
|
155 |
-
|
156 |
-
$stored_data = get_option( 'astra_sites_settings', $defaults );
|
157 |
-
|
158 |
-
return wp_parse_args( $stored_data, $defaults );
|
159 |
-
}
|
160 |
-
|
161 |
-
/**
|
162 |
-
* Admin settings init
|
163 |
-
*/
|
164 |
-
public function init_admin_settings() {
|
165 |
-
add_action( 'admin_menu', array( $this, 'add_admin_menu' ), 100 );
|
166 |
-
add_action( 'admin_notices', array( $this, 'notices' ) );
|
167 |
-
add_action( 'astra_sites_menu_general_action', array( $this, 'general_page' ) );
|
168 |
-
}
|
169 |
-
|
170 |
-
/**
|
171 |
-
* Admin notice
|
172 |
-
*
|
173 |
-
* @since 1.2.8
|
174 |
-
*/
|
175 |
-
public function notices() {
|
176 |
-
|
177 |
-
if ( 'appearance_page_astra-sites' !== get_current_screen()->id ) {
|
178 |
-
return;
|
179 |
-
}
|
180 |
-
|
181 |
-
if ( ! class_exists( 'XMLReader' ) ) {
|
182 |
-
?>
|
183 |
-
<div class="notice astra-sites-xml-notice notice-error">
|
184 |
-
<p><b><?php _e( 'Required XMLReader PHP extension is missing on your server!', 'astra-sites' ); ?></b></p>
|
185 |
-
<?php /* translators: %s is the white label name. */ ?>
|
186 |
-
<p><?php printf( __( '%s import requires XMLReader extension to be installed. Please contact your web hosting provider and ask them to install and activate the XMLReader PHP extension.', 'astra-sites' ), ASTRA_SITES_NAME ); ?></p>
|
187 |
-
</div>
|
188 |
-
<?php
|
189 |
-
}
|
190 |
-
}
|
191 |
-
|
192 |
-
/**
|
193 |
-
* Init Nav Menu
|
194 |
-
*
|
195 |
-
* @param mixed $action Action name.
|
196 |
-
* @since 1.0.6
|
197 |
-
*/
|
198 |
-
public function init_nav_menu( $action = '' ) {
|
199 |
-
|
200 |
-
if ( '' !== $action ) {
|
201 |
-
$this->render_tab_menu( $action );
|
202 |
-
}
|
203 |
-
}
|
204 |
-
|
205 |
-
/**
|
206 |
-
* Render tab menu
|
207 |
-
*
|
208 |
-
* @param mixed $action Action name.
|
209 |
-
* @since 1.0.6
|
210 |
-
*/
|
211 |
-
public function render_tab_menu( $action = '' ) {
|
212 |
-
?>
|
213 |
-
<div id="astra-sites-menu-page">
|
214 |
-
<?php $this->render( $action ); ?>
|
215 |
-
</div>
|
216 |
-
<?php
|
217 |
-
}
|
218 |
-
|
219 |
-
/**
|
220 |
-
* View actions
|
221 |
-
*
|
222 |
-
* @since 1.0.11
|
223 |
-
*/
|
224 |
-
public function get_view_actions() {
|
225 |
-
|
226 |
-
if ( empty( $this->view_actions ) ) {
|
227 |
-
|
228 |
-
$this->view_actions = apply_filters(
|
229 |
-
'astra_sites_menu_item',
|
230 |
-
array()
|
231 |
-
);
|
232 |
-
}
|
233 |
-
|
234 |
-
return $this->view_actions;
|
235 |
-
}
|
236 |
-
|
237 |
-
/**
|
238 |
-
* Prints HTML content for tabs
|
239 |
-
*
|
240 |
-
* @param mixed $action Action name.
|
241 |
-
* @since 1.0.6
|
242 |
-
*/
|
243 |
-
public function render( $action ) {
|
244 |
-
|
245 |
-
// Settings update message.
|
246 |
-
if ( isset( $_REQUEST['message'] ) && ( 'saved' === $_REQUEST['message'] || 'saved_ext' === $_REQUEST['message'] ) ) {
|
247 |
-
?>
|
248 |
-
<span id="message" class="notice notice-success is-dismissive"><p> <?php esc_html_e( 'Settings saved successfully.', 'astra-sites' ); ?> </p></span>
|
249 |
-
<?php
|
250 |
-
}
|
251 |
-
|
252 |
-
$default_page_builder = $this->get_setting( 'page_builder' );
|
253 |
-
|
254 |
-
if ( empty( $default_page_builder ) || isset( $_GET['change-page-builder'] ) ) {
|
255 |
-
|
256 |
-
$plugins = get_option( 'active_plugins', array() );
|
257 |
-
$page_builders = array();
|
258 |
-
if ( $plugins ) {
|
259 |
-
foreach ( $plugins as $key => $plugin_init ) {
|
260 |
-
if ( false !== strpos( $plugin_init, 'elementor' ) ) {
|
261 |
-
$page_builders[] = 'elementor';
|
262 |
-
}
|
263 |
-
if ( false !== strpos( $plugin_init, 'beaver-builder' ) ) {
|
264 |
-
$page_builders[] = 'beaver-builder';
|
265 |
-
}
|
266 |
-
if ( false !== strpos( $plugin_init, 'brizy' ) ) {
|
267 |
-
$page_builders[] = 'brizy';
|
268 |
-
}
|
269 |
-
}
|
270 |
-
}
|
271 |
-
$page_builders = array_unique( $page_builders );
|
272 |
-
$page_builders[] = 'gutenberg';
|
273 |
-
$page_builders = implode( ',', $page_builders );
|
274 |
-
?>
|
275 |
-
<div class="astra-sites-welcome" data-plugins="<?php echo esc_attr( $page_builders ); ?>">
|
276 |
-
<div class="inner">
|
277 |
-
<form id="astra-sites-welcome-form" enctype="multipart/form-data" method="post">
|
278 |
-
<h1><?php _e( 'Select Page Builder', 'astra-sites' ); ?></h1>
|
279 |
-
<p><?php _e( 'Astra offers starter sites that can be imported in one click. These templates are available in few different page builders. Please choose your preferred page builder from the list below.', 'astra-sites' ); ?></p>
|
280 |
-
<div class="fields">
|
281 |
-
<ul class="page-builders">
|
282 |
-
<li>
|
283 |
-
<label>
|
284 |
-
<input type="radio" name="page_builder" value="gutenberg">
|
285 |
-
<img src="<?php echo esc_url( ASTRA_SITES_URI . 'inc/assets/images/gutenberg.jpg' ); ?>" />
|
286 |
-
<div class="title"><?php _e( 'Gutenberg', 'astra-sites' ); ?></div>
|
287 |
-
</label>
|
288 |
-
</li>
|
289 |
-
<li>
|
290 |
-
<label>
|
291 |
-
<input type="radio" name="page_builder" value="elementor">
|
292 |
-
<img src="<?php echo esc_url( ASTRA_SITES_URI . 'inc/assets/images/elementor.jpg' ); ?>" />
|
293 |
-
<div class="title"><?php _e( 'Elementor', 'astra-sites' ); ?></div>
|
294 |
-
</label>
|
295 |
-
</li>
|
296 |
-
<li>
|
297 |
-
<label>
|
298 |
-
<input type="radio" name="page_builder" value="beaver-builder">
|
299 |
-
<img src="<?php echo esc_url( ASTRA_SITES_URI . 'inc/assets/images/beaver-builder.png' ); ?>" />
|
300 |
-
<div class="title"><?php _e( 'Beaver Builder', 'astra-sites' ); ?></div>
|
301 |
-
</li>
|
302 |
-
<li>
|
303 |
-
<label>
|
304 |
-
<input type="radio" name="page_builder" value="brizy">
|
305 |
-
<img src="<?php echo esc_url( ASTRA_SITES_URI . 'inc/assets/images/brizy.jpg' ); ?>" />
|
306 |
-
<div class="title"><?php _e( 'Brizy', 'astra-sites' ); ?></div>
|
307 |
-
</label>
|
308 |
-
</li>
|
309 |
-
</ul>
|
310 |
-
<div class="astra-sites-page-builder-notice" style="display: none;">
|
311 |
-
<p class="description"><?php _e( 'Please select your favorite page builder to continue..', 'astra-sites' ); ?></p>
|
312 |
-
</div>
|
313 |
-
<?php submit_button( __( 'Next', 'astra-sites' ), 'primary button-hero disabled' ); ?>
|
314 |
-
</div>
|
315 |
-
|
316 |
-
<input type="hidden" name="message" value="saved" />
|
317 |
-
<?php wp_nonce_field( 'astra-sites-welcome-screen', 'astra-sites-page-builder' ); ?>
|
318 |
-
</form>
|
319 |
-
</div>
|
320 |
-
</div>
|
321 |
-
<?php } else { ?>
|
322 |
-
<?php
|
323 |
-
$page_title = apply_filters( 'astra_sites_page_title', __( 'Astra Starter Sites - Your Library of 100+ Ready Templates!', 'astra-sites' ) );
|
324 |
-
?>
|
325 |
-
<div class="nav-tab-wrapper">
|
326 |
-
<h1 class='astra-sites-title'> <?php echo esc_html( $page_title ); ?> </h1>
|
327 |
-
<form id="astra-sites-welcome-form-inline" enctype="multipart/form-data" method="post">
|
328 |
-
<div class="fields">
|
329 |
-
<select name="page_builder" required="required">
|
330 |
-
<option value="gutenberg" <?php selected( $default_page_builder, 'gutenberg' ); ?>><?php _e( 'Block Editor (Gutenberg)', 'astra-sites' ); ?></option>
|
331 |
-
<option value="elementor" <?php selected( $default_page_builder, 'elementor' ); ?>><?php _e( 'Elementor', 'astra-sites' ); ?></option>
|
332 |
-
<option value="beaver-builder" <?php selected( $default_page_builder, 'beaver-builder' ); ?>><?php _e( 'Beaver Builder', 'astra-sites' ); ?></option>
|
333 |
-
<option value="brizy" <?php selected( $default_page_builder, 'brizy' ); ?>><?php _e( 'Brizy', 'astra-sites' ); ?></option>
|
334 |
-
</select>
|
335 |
-
</div>
|
336 |
-
<input type="hidden" name="message" value="saved" />
|
337 |
-
<?php wp_nonce_field( 'astra-sites-welcome-screen', 'astra-sites-page-builder' ); ?>
|
338 |
-
</form>
|
339 |
-
<?php
|
340 |
-
$view_actions = $this->get_view_actions();
|
341 |
-
|
342 |
-
foreach ( $view_actions as $slug => $data ) {
|
343 |
-
|
344 |
-
if ( ! $data['show'] ) {
|
345 |
-
continue;
|
346 |
-
}
|
347 |
-
|
348 |
-
$url = $this->get_page_url( $slug );
|
349 |
-
|
350 |
-
if ( 'general' === $slug ) {
|
351 |
-
update_option( 'astra_parent_page_url', $url );
|
352 |
-
}
|
353 |
-
|
354 |
-
$active = ( $slug === $action ) ? 'nav-tab-active' : '';
|
355 |
-
?>
|
356 |
-
<a class='nav-tab <?php echo esc_attr( $active ); ?>' href='<?php echo esc_url( $url ); ?>'> <?php echo esc_html( $data['label'] ); ?> </a>
|
357 |
-
<?php } ?>
|
358 |
-
</div><!-- .nav-tab-wrapper -->
|
359 |
-
<?php
|
360 |
-
}
|
361 |
-
}
|
362 |
-
|
363 |
-
/**
|
364 |
-
* Get and return page URL
|
365 |
-
*
|
366 |
-
* @param string $menu_slug Menu name.
|
367 |
-
* @since 1.0.6
|
368 |
-
* @return string page url
|
369 |
-
*/
|
370 |
-
public function get_page_url( $menu_slug ) {
|
371 |
-
|
372 |
-
$parent_page = 'themes.php';
|
373 |
-
|
374 |
-
if ( strpos( $parent_page, '?' ) !== false ) {
|
375 |
-
$query_var = '&page=astra-sites';
|
376 |
-
} else {
|
377 |
-
$query_var = '?page=astra-sites';
|
378 |
-
}
|
379 |
-
|
380 |
-
$parent_page_url = admin_url( $parent_page . $query_var );
|
381 |
-
|
382 |
-
$url = $parent_page_url . '&action=' . $menu_slug;
|
383 |
-
|
384 |
-
return esc_url( $url );
|
385 |
-
}
|
386 |
-
|
387 |
-
/**
|
388 |
-
* Add main menu
|
389 |
-
*
|
390 |
-
* @since 1.0.6
|
391 |
-
*/
|
392 |
-
public function add_admin_menu() {
|
393 |
-
$page_title = apply_filters( 'astra_sites_menu_page_title', __( 'Astra Starter Sites', 'astra-sites' ) );
|
394 |
-
|
395 |
-
$page = add_theme_page( $page_title, $page_title, 'manage_options', 'astra-sites', array( $this, 'menu_callback' ) );
|
396 |
-
}
|
397 |
-
|
398 |
-
/**
|
399 |
-
* Menu callback
|
400 |
-
*
|
401 |
-
* @since 1.0.6
|
402 |
-
*/
|
403 |
-
public function menu_callback() {
|
404 |
-
|
405 |
-
$current_slug = isset( $_GET['action'] ) ? esc_attr( $_GET['action'] ) : 'general';
|
406 |
-
|
407 |
-
$active_tab = str_replace( '_', '-', $current_slug );
|
408 |
-
$current_slug = str_replace( '-', '_', $current_slug );
|
409 |
-
|
410 |
-
?>
|
411 |
-
<div class="astra-sites-menu-page-wrapper">
|
412 |
-
<?php $this->init_nav_menu( $active_tab ); ?>
|
413 |
-
<?php do_action( 'astra_sites_menu_' . esc_attr( $current_slug ) . '_action' ); ?>
|
414 |
-
</div>
|
415 |
-
<?php
|
416 |
-
}
|
417 |
-
|
418 |
-
/**
|
419 |
-
* Include general page
|
420 |
-
*
|
421 |
-
* @since 1.0.6
|
422 |
-
*/
|
423 |
-
public function general_page() {
|
424 |
-
$default_page_builder = $this->get_setting( 'page_builder' );
|
425 |
-
if ( empty( $default_page_builder ) || isset( $_GET['change-page-builder'] ) ) {
|
426 |
-
return;
|
427 |
-
}
|
428 |
-
require_once ASTRA_SITES_DIR . 'inc/includes/admin-page.php';
|
429 |
-
}
|
430 |
-
}
|
431 |
-
|
432 |
-
Astra_Sites_Page::get_instance();
|
433 |
-
|
434 |
-
}// End if.
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Astra Sites Page
|
4 |
+
*
|
5 |
+
* @since 1.0.6
|
6 |
+
* @package Astra Sites
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
|
13 |
+
if ( ! class_exists( 'Astra_Sites_Page' ) ) {
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Astra Admin Settings
|
17 |
+
*/
|
18 |
+
class Astra_Sites_Page {
|
19 |
+
|
20 |
+
/**
|
21 |
+
* View all actions
|
22 |
+
*
|
23 |
+
* @since 1.0.6
|
24 |
+
* @var array $view_actions
|
25 |
+
*/
|
26 |
+
public $view_actions = array();
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Member Variable
|
30 |
+
*
|
31 |
+
* @var instance
|
32 |
+
*/
|
33 |
+
private static $instance;
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Initiator
|
37 |
+
*
|
38 |
+
* @since 1.3.0
|
39 |
+
*/
|
40 |
+
public static function get_instance() {
|
41 |
+
if ( ! isset( self::$instance ) ) {
|
42 |
+
self::$instance = new self;
|
43 |
+
}
|
44 |
+
return self::$instance;
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Constructor
|
49 |
+
*
|
50 |
+
* @since 1.3.0
|
51 |
+
*/
|
52 |
+
public function __construct() {
|
53 |
+
|
54 |
+
if ( ! is_admin() ) {
|
55 |
+
return;
|
56 |
+
}
|
57 |
+
|
58 |
+
add_action( 'after_setup_theme', array( $this, 'init_admin_settings' ), 99 );
|
59 |
+
add_action( 'admin_init', array( $this, 'save_page_builder' ) );
|
60 |
+
add_action( 'admin_notices', array( $this, 'getting_started' ) );
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Admin notice
|
65 |
+
*
|
66 |
+
* @since 1.3.5
|
67 |
+
*
|
68 |
+
* @return void
|
69 |
+
*/
|
70 |
+
function getting_started() {
|
71 |
+
if ( 'plugins' !== get_current_screen()->base ) {
|
72 |
+
return;
|
73 |
+
}
|
74 |
+
|
75 |
+
$processed = get_user_meta( get_current_user_id(), '_astra_sites_gettings_started', true );
|
76 |
+
$product_name = Astra_Sites_White_Label::get_instance()->page_title( 'Astra' );
|
77 |
+
|
78 |
+
if ( $processed ) {
|
79 |
+
return;
|
80 |
+
}
|
81 |
+
|
82 |
+
?>
|
83 |
+
<div class="notice notice-info is-dismissible astra-sites-getting-started-notice">
|
84 |
+
<?php /* translators: %1$s is the admin page URL, %2$s is product name. */ ?>
|
85 |
+
<p><?php printf( __( 'Thank you for choosing %1$s! Check the library of <a class="astra-sites-getting-started-btn" href="%2$s">ready starter sites here »</a>', 'astra-sites' ), $product_name, admin_url( 'themes.php?page=astra-sites' ) ); ?></p>
|
86 |
+
</div>
|
87 |
+
<?php
|
88 |
+
}
|
89 |
+
|
90 |
+
/**
|
91 |
+
* Save Page Builder
|
92 |
+
*
|
93 |
+
* @return void
|
94 |
+
*/
|
95 |
+
function save_page_builder() {
|
96 |
+
|
97 |
+
// Only admins can save settings.
|
98 |
+
if ( ! current_user_can( 'manage_options' ) ) {
|
99 |
+
return;
|
100 |
+
}
|
101 |
+
|
102 |
+
// Make sure we have a valid nonce.
|
103 |
+
if ( isset( $_REQUEST['astra-sites-page-builder'] ) && wp_verify_nonce( $_REQUEST['astra-sites-page-builder'], 'astra-sites-welcome-screen' ) ) {
|
104 |
+
|
105 |
+
// Stored Settings.
|
106 |
+
$stored_data = $this->get_settings();
|
107 |
+
|
108 |
+
// New settings.
|
109 |
+
$new_data = array(
|
110 |
+
'page_builder' => ( isset( $_REQUEST['page_builder'] ) ) ? sanitize_key( $_REQUEST['page_builder'] ) : '',
|
111 |
+
);
|
112 |
+
|
113 |
+
// Merge settings.
|
114 |
+
$data = wp_parse_args( $new_data, $stored_data );
|
115 |
+
|
116 |
+
// Update settings.
|
117 |
+
update_option( 'astra_sites_settings', $data );
|
118 |
+
|
119 |
+
wp_redirect( admin_url( '/themes.php?page=astra-sites' ) );
|
120 |
+
}
|
121 |
+
}
|
122 |
+
|
123 |
+
/**
|
124 |
+
* Get single setting value
|
125 |
+
*
|
126 |
+
* @param string $key Setting key.
|
127 |
+
* @param mixed $defaults Setting value.
|
128 |
+
* @return mixed Stored setting value.
|
129 |
+
*/
|
130 |
+
function get_setting( $key = '', $defaults = '' ) {
|
131 |
+
|
132 |
+
$settings = $this->get_settings();
|
133 |
+
|
134 |
+
if ( empty( $settings ) ) {
|
135 |
+
return $defaults;
|
136 |
+
}
|
137 |
+
|
138 |
+
if ( array_key_exists( $key, $settings ) ) {
|
139 |
+
return $settings[ $key ];
|
140 |
+
}
|
141 |
+
|
142 |
+
return $defaults;
|
143 |
+
}
|
144 |
+
|
145 |
+
/**
|
146 |
+
* Get Settings
|
147 |
+
*
|
148 |
+
* @return array Stored settings.
|
149 |
+
*/
|
150 |
+
function get_settings() {
|
151 |
+
|
152 |
+
$defaults = array(
|
153 |
+
'page_builder' => '',
|
154 |
+
);
|
155 |
+
|
156 |
+
$stored_data = get_option( 'astra_sites_settings', $defaults );
|
157 |
+
|
158 |
+
return wp_parse_args( $stored_data, $defaults );
|
159 |
+
}
|
160 |
+
|
161 |
+
/**
|
162 |
+
* Admin settings init
|
163 |
+
*/
|
164 |
+
public function init_admin_settings() {
|
165 |
+
add_action( 'admin_menu', array( $this, 'add_admin_menu' ), 100 );
|
166 |
+
add_action( 'admin_notices', array( $this, 'notices' ) );
|
167 |
+
add_action( 'astra_sites_menu_general_action', array( $this, 'general_page' ) );
|
168 |
+
}
|
169 |
+
|
170 |
+
/**
|
171 |
+
* Admin notice
|
172 |
+
*
|
173 |
+
* @since 1.2.8
|
174 |
+
*/
|
175 |
+
public function notices() {
|
176 |
+
|
177 |
+
if ( 'appearance_page_astra-sites' !== get_current_screen()->id ) {
|
178 |
+
return;
|
179 |
+
}
|
180 |
+
|
181 |
+
if ( ! class_exists( 'XMLReader' ) ) {
|
182 |
+
?>
|
183 |
+
<div class="notice astra-sites-xml-notice notice-error">
|
184 |
+
<p><b><?php _e( 'Required XMLReader PHP extension is missing on your server!', 'astra-sites' ); ?></b></p>
|
185 |
+
<?php /* translators: %s is the white label name. */ ?>
|
186 |
+
<p><?php printf( __( '%s import requires XMLReader extension to be installed. Please contact your web hosting provider and ask them to install and activate the XMLReader PHP extension.', 'astra-sites' ), ASTRA_SITES_NAME ); ?></p>
|
187 |
+
</div>
|
188 |
+
<?php
|
189 |
+
}
|
190 |
+
}
|
191 |
+
|
192 |
+
/**
|
193 |
+
* Init Nav Menu
|
194 |
+
*
|
195 |
+
* @param mixed $action Action name.
|
196 |
+
* @since 1.0.6
|
197 |
+
*/
|
198 |
+
public function init_nav_menu( $action = '' ) {
|
199 |
+
|
200 |
+
if ( '' !== $action ) {
|
201 |
+
$this->render_tab_menu( $action );
|
202 |
+
}
|
203 |
+
}
|
204 |
+
|
205 |
+
/**
|
206 |
+
* Render tab menu
|
207 |
+
*
|
208 |
+
* @param mixed $action Action name.
|
209 |
+
* @since 1.0.6
|
210 |
+
*/
|
211 |
+
public function render_tab_menu( $action = '' ) {
|
212 |
+
?>
|
213 |
+
<div id="astra-sites-menu-page">
|
214 |
+
<?php $this->render( $action ); ?>
|
215 |
+
</div>
|
216 |
+
<?php
|
217 |
+
}
|
218 |
+
|
219 |
+
/**
|
220 |
+
* View actions
|
221 |
+
*
|
222 |
+
* @since 1.0.11
|
223 |
+
*/
|
224 |
+
public function get_view_actions() {
|
225 |
+
|
226 |
+
if ( empty( $this->view_actions ) ) {
|
227 |
+
|
228 |
+
$this->view_actions = apply_filters(
|
229 |
+
'astra_sites_menu_item',
|
230 |
+
array()
|
231 |
+
);
|
232 |
+
}
|
233 |
+
|
234 |
+
return $this->view_actions;
|
235 |
+
}
|
236 |
+
|
237 |
+
/**
|
238 |
+
* Prints HTML content for tabs
|
239 |
+
*
|
240 |
+
* @param mixed $action Action name.
|
241 |
+
* @since 1.0.6
|
242 |
+
*/
|
243 |
+
public function render( $action ) {
|
244 |
+
|
245 |
+
// Settings update message.
|
246 |
+
if ( isset( $_REQUEST['message'] ) && ( 'saved' === $_REQUEST['message'] || 'saved_ext' === $_REQUEST['message'] ) ) {
|
247 |
+
?>
|
248 |
+
<span id="message" class="notice notice-success is-dismissive"><p> <?php esc_html_e( 'Settings saved successfully.', 'astra-sites' ); ?> </p></span>
|
249 |
+
<?php
|
250 |
+
}
|
251 |
+
|
252 |
+
$default_page_builder = $this->get_setting( 'page_builder' );
|
253 |
+
|
254 |
+
if ( empty( $default_page_builder ) || isset( $_GET['change-page-builder'] ) ) {
|
255 |
+
|
256 |
+
$plugins = get_option( 'active_plugins', array() );
|
257 |
+
$page_builders = array();
|
258 |
+
if ( $plugins ) {
|
259 |
+
foreach ( $plugins as $key => $plugin_init ) {
|
260 |
+
if ( false !== strpos( $plugin_init, 'elementor' ) ) {
|
261 |
+
$page_builders[] = 'elementor';
|
262 |
+
}
|
263 |
+
if ( false !== strpos( $plugin_init, 'beaver-builder' ) ) {
|
264 |
+
$page_builders[] = 'beaver-builder';
|
265 |
+
}
|
266 |
+
if ( false !== strpos( $plugin_init, 'brizy' ) ) {
|
267 |
+
$page_builders[] = 'brizy';
|
268 |
+
}
|
269 |
+
}
|
270 |
+
}
|
271 |
+
$page_builders = array_unique( $page_builders );
|
272 |
+
$page_builders[] = 'gutenberg';
|
273 |
+
$page_builders = implode( ',', $page_builders );
|
274 |
+
?>
|
275 |
+
<div class="astra-sites-welcome" data-plugins="<?php echo esc_attr( $page_builders ); ?>">
|
276 |
+
<div class="inner">
|
277 |
+
<form id="astra-sites-welcome-form" enctype="multipart/form-data" method="post">
|
278 |
+
<h1><?php _e( 'Select Page Builder', 'astra-sites' ); ?></h1>
|
279 |
+
<p><?php _e( 'Astra offers starter sites that can be imported in one click. These templates are available in few different page builders. Please choose your preferred page builder from the list below.', 'astra-sites' ); ?></p>
|
280 |
+
<div class="fields">
|
281 |
+
<ul class="page-builders">
|
282 |
+
<li>
|
283 |
+
<label>
|
284 |
+
<input type="radio" name="page_builder" value="gutenberg">
|
285 |
+
<img src="<?php echo esc_url( ASTRA_SITES_URI . 'inc/assets/images/gutenberg.jpg' ); ?>" />
|
286 |
+
<div class="title"><?php _e( 'Gutenberg', 'astra-sites' ); ?></div>
|
287 |
+
</label>
|
288 |
+
</li>
|
289 |
+
<li>
|
290 |
+
<label>
|
291 |
+
<input type="radio" name="page_builder" value="elementor">
|
292 |
+
<img src="<?php echo esc_url( ASTRA_SITES_URI . 'inc/assets/images/elementor.jpg' ); ?>" />
|
293 |
+
<div class="title"><?php _e( 'Elementor', 'astra-sites' ); ?></div>
|
294 |
+
</label>
|
295 |
+
</li>
|
296 |
+
<li>
|
297 |
+
<label>
|
298 |
+
<input type="radio" name="page_builder" value="beaver-builder">
|
299 |
+
<img src="<?php echo esc_url( ASTRA_SITES_URI . 'inc/assets/images/beaver-builder.png' ); ?>" />
|
300 |
+
<div class="title"><?php _e( 'Beaver Builder', 'astra-sites' ); ?></div>
|
301 |
+
</li>
|
302 |
+
<li>
|
303 |
+
<label>
|
304 |
+
<input type="radio" name="page_builder" value="brizy">
|
305 |
+
<img src="<?php echo esc_url( ASTRA_SITES_URI . 'inc/assets/images/brizy.jpg' ); ?>" />
|
306 |
+
<div class="title"><?php _e( 'Brizy', 'astra-sites' ); ?></div>
|
307 |
+
</label>
|
308 |
+
</li>
|
309 |
+
</ul>
|
310 |
+
<div class="astra-sites-page-builder-notice" style="display: none;">
|
311 |
+
<p class="description"><?php _e( 'Please select your favorite page builder to continue..', 'astra-sites' ); ?></p>
|
312 |
+
</div>
|
313 |
+
<?php submit_button( __( 'Next', 'astra-sites' ), 'primary button-hero disabled' ); ?>
|
314 |
+
</div>
|
315 |
+
|
316 |
+
<input type="hidden" name="message" value="saved" />
|
317 |
+
<?php wp_nonce_field( 'astra-sites-welcome-screen', 'astra-sites-page-builder' ); ?>
|
318 |
+
</form>
|
319 |
+
</div>
|
320 |
+
</div>
|
321 |
+
<?php } else { ?>
|
322 |
+
<?php
|
323 |
+
$page_title = apply_filters( 'astra_sites_page_title', __( 'Astra Starter Sites - Your Library of 100+ Ready Templates!', 'astra-sites' ) );
|
324 |
+
?>
|
325 |
+
<div class="nav-tab-wrapper">
|
326 |
+
<h1 class='astra-sites-title'> <?php echo esc_html( $page_title ); ?> </h1>
|
327 |
+
<form id="astra-sites-welcome-form-inline" enctype="multipart/form-data" method="post">
|
328 |
+
<div class="fields">
|
329 |
+
<select name="page_builder" required="required">
|
330 |
+
<option value="gutenberg" <?php selected( $default_page_builder, 'gutenberg' ); ?>><?php _e( 'Block Editor (Gutenberg)', 'astra-sites' ); ?></option>
|
331 |
+
<option value="elementor" <?php selected( $default_page_builder, 'elementor' ); ?>><?php _e( 'Elementor', 'astra-sites' ); ?></option>
|
332 |
+
<option value="beaver-builder" <?php selected( $default_page_builder, 'beaver-builder' ); ?>><?php _e( 'Beaver Builder', 'astra-sites' ); ?></option>
|
333 |
+
<option value="brizy" <?php selected( $default_page_builder, 'brizy' ); ?>><?php _e( 'Brizy', 'astra-sites' ); ?></option>
|
334 |
+
</select>
|
335 |
+
</div>
|
336 |
+
<input type="hidden" name="message" value="saved" />
|
337 |
+
<?php wp_nonce_field( 'astra-sites-welcome-screen', 'astra-sites-page-builder' ); ?>
|
338 |
+
</form>
|
339 |
+
<?php
|
340 |
+
$view_actions = $this->get_view_actions();
|
341 |
+
|
342 |
+
foreach ( $view_actions as $slug => $data ) {
|
343 |
+
|
344 |
+
if ( ! $data['show'] ) {
|
345 |
+
continue;
|
346 |
+
}
|
347 |
+
|
348 |
+
$url = $this->get_page_url( $slug );
|
349 |
+
|
350 |
+
if ( 'general' === $slug ) {
|
351 |
+
update_option( 'astra_parent_page_url', $url );
|
352 |
+
}
|
353 |
+
|
354 |
+
$active = ( $slug === $action ) ? 'nav-tab-active' : '';
|
355 |
+
?>
|
356 |
+
<a class='nav-tab <?php echo esc_attr( $active ); ?>' href='<?php echo esc_url( $url ); ?>'> <?php echo esc_html( $data['label'] ); ?> </a>
|
357 |
+
<?php } ?>
|
358 |
+
</div><!-- .nav-tab-wrapper -->
|
359 |
+
<?php
|
360 |
+
}
|
361 |
+
}
|
362 |
+
|
363 |
+
/**
|
364 |
+
* Get and return page URL
|
365 |
+
*
|
366 |
+
* @param string $menu_slug Menu name.
|
367 |
+
* @since 1.0.6
|
368 |
+
* @return string page url
|
369 |
+
*/
|
370 |
+
public function get_page_url( $menu_slug ) {
|
371 |
+
|
372 |
+
$parent_page = 'themes.php';
|
373 |
+
|
374 |
+
if ( strpos( $parent_page, '?' ) !== false ) {
|
375 |
+
$query_var = '&page=astra-sites';
|
376 |
+
} else {
|
377 |
+
$query_var = '?page=astra-sites';
|
378 |
+
}
|
379 |
+
|
380 |
+
$parent_page_url = admin_url( $parent_page . $query_var );
|
381 |
+
|
382 |
+
$url = $parent_page_url . '&action=' . $menu_slug;
|
383 |
+
|
384 |
+
return esc_url( $url );
|
385 |
+
}
|
386 |
+
|
387 |
+
/**
|
388 |
+
* Add main menu
|
389 |
+
*
|
390 |
+
* @since 1.0.6
|
391 |
+
*/
|
392 |
+
public function add_admin_menu() {
|
393 |
+
$page_title = apply_filters( 'astra_sites_menu_page_title', __( 'Astra Starter Sites', 'astra-sites' ) );
|
394 |
+
|
395 |
+
$page = add_theme_page( $page_title, $page_title, 'manage_options', 'astra-sites', array( $this, 'menu_callback' ) );
|
396 |
+
}
|
397 |
+
|
398 |
+
/**
|
399 |
+
* Menu callback
|
400 |
+
*
|
401 |
+
* @since 1.0.6
|
402 |
+
*/
|
403 |
+
public function menu_callback() {
|
404 |
+
|
405 |
+
$current_slug = isset( $_GET['action'] ) ? esc_attr( $_GET['action'] ) : 'general';
|
406 |
+
|
407 |
+
$active_tab = str_replace( '_', '-', $current_slug );
|
408 |
+
$current_slug = str_replace( '-', '_', $current_slug );
|
409 |
+
|
410 |
+
?>
|
411 |
+
<div class="astra-sites-menu-page-wrapper">
|
412 |
+
<?php $this->init_nav_menu( $active_tab ); ?>
|
413 |
+
<?php do_action( 'astra_sites_menu_' . esc_attr( $current_slug ) . '_action' ); ?>
|
414 |
+
</div>
|
415 |
+
<?php
|
416 |
+
}
|
417 |
+
|
418 |
+
/**
|
419 |
+
* Include general page
|
420 |
+
*
|
421 |
+
* @since 1.0.6
|
422 |
+
*/
|
423 |
+
public function general_page() {
|
424 |
+
$default_page_builder = $this->get_setting( 'page_builder' );
|
425 |
+
if ( empty( $default_page_builder ) || isset( $_GET['change-page-builder'] ) ) {
|
426 |
+
return;
|
427 |
+
}
|
428 |
+
require_once ASTRA_SITES_DIR . 'inc/includes/admin-page.php';
|
429 |
+
}
|
430 |
+
}
|
431 |
+
|
432 |
+
Astra_Sites_Page::get_instance();
|
433 |
+
|
434 |
+
}// End if.
|
inc/classes/class-astra-sites.php
CHANGED
@@ -1,600 +1,600 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Astra Sites
|
4 |
-
*
|
5 |
-
* @since 1.0.0
|
6 |
-
* @package Astra Sites
|
7 |
-
*/
|
8 |
-
|
9 |
-
defined( 'ABSPATH' ) or exit;
|
10 |
-
|
11 |
-
if ( ! class_exists( 'Astra_Sites' ) ) :
|
12 |
-
|
13 |
-
/**
|
14 |
-
* Astra_Sites
|
15 |
-
*/
|
16 |
-
class Astra_Sites {
|
17 |
-
|
18 |
-
/**
|
19 |
-
* API URL which is used to get the response from.
|
20 |
-
*
|
21 |
-
* @since 1.0.0
|
22 |
-
* @var (String) URL
|
23 |
-
*/
|
24 |
-
public static $api_url;
|
25 |
-
|
26 |
-
/**
|
27 |
-
* Instance of Astra_Sites
|
28 |
-
*
|
29 |
-
* @since 1.0.0
|
30 |
-
* @var (Object) Astra_Sites
|
31 |
-
*/
|
32 |
-
private static $_instance = null;
|
33 |
-
|
34 |
-
/**
|
35 |
-
* Instance of Astra_Sites.
|
36 |
-
*
|
37 |
-
* @since 1.0.0
|
38 |
-
*
|
39 |
-
* @return object Class object.
|
40 |
-
*/
|
41 |
-
public static function get_instance() {
|
42 |
-
if ( ! isset( self::$_instance ) ) {
|
43 |
-
self::$_instance = new self;
|
44 |
-
}
|
45 |
-
|
46 |
-
return self::$_instance;
|
47 |
-
}
|
48 |
-
|
49 |
-
/**
|
50 |
-
* Constructor.
|
51 |
-
*
|
52 |
-
* @since 1.0.0
|
53 |
-
*/
|
54 |
-
private function __construct() {
|
55 |
-
|
56 |
-
self::set_api_url();
|
57 |
-
|
58 |
-
$this->includes();
|
59 |
-
|
60 |
-
add_action( 'admin_notices', array( $this, 'add_notice' ), 1 );
|
61 |
-
add_action( 'admin_notices', array( $this, 'admin_notices' ) );
|
62 |
-
add_action( 'plugins_loaded', array( $this, 'load_textdomain' ) );
|
63 |
-
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue' ) );
|
64 |
-
|
65 |
-
// AJAX.
|
66 |
-
add_action( 'wp_ajax_astra-required-plugins', array( $this, 'required_plugin' ) );
|
67 |
-
add_action( 'wp_ajax_astra-required-plugin-activate', array( $this, 'required_plugin_activate' ) );
|
68 |
-
add_action( 'wp_ajax_astra-sites-backup-settings', array( $this, 'backup_settings' ) );
|
69 |
-
add_action( 'wp_ajax_astra-sites-set-reset-data', array( $this, 'set_reset_data' ) );
|
70 |
-
add_action( 'wp_ajax_astra-sites-activate-theme', array( $this, 'activate_theme' ) );
|
71 |
-
add_action( 'wp_ajax_astra-sites-getting-started-notice', array( $this, 'getting_started_notice' ) );
|
72 |
-
}
|
73 |
-
|
74 |
-
/**
|
75 |
-
* Close getting started notice for current user
|
76 |
-
*
|
77 |
-
* @since 1.3.5
|
78 |
-
* @return void
|
79 |
-
*/
|
80 |
-
function getting_started_notice() {
|
81 |
-
update_user_meta( get_current_user_id(), '_astra_sites_gettings_started', true );
|
82 |
-
wp_send_json_success();
|
83 |
-
}
|
84 |
-
|
85 |
-
/**
|
86 |
-
* Activate theme
|
87 |
-
*
|
88 |
-
* @since 1.3.2
|
89 |
-
* @return void
|
90 |
-
*/
|
91 |
-
function activate_theme() {
|
92 |
-
|
93 |
-
switch_theme( 'astra' );
|
94 |
-
|
95 |
-
wp_send_json_success(
|
96 |
-
array(
|
97 |
-
'success' => true,
|
98 |
-
'message' => __( 'Theme Activated', 'astra-sites' ),
|
99 |
-
)
|
100 |
-
);
|
101 |
-
}
|
102 |
-
|
103 |
-
/**
|
104 |
-
* Set reset data
|
105 |
-
*/
|
106 |
-
function set_reset_data() {
|
107 |
-
if ( ! current_user_can( 'manage_options' ) ) {
|
108 |
-
return;
|
109 |
-
}
|
110 |
-
|
111 |
-
global $wpdb;
|
112 |
-
|
113 |
-
$post_ids = $wpdb->get_col( "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key='_astra_sites_imported_post'" );
|
114 |
-
$form_ids = $wpdb->get_col( "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key='_astra_sites_imported_wp_forms'" );
|
115 |
-
$term_ids = $wpdb->get_col( "SELECT term_id FROM {$wpdb->termmeta} WHERE meta_key='_astra_sites_imported_term'" );
|
116 |
-
|
117 |
-
wp_send_json_success(
|
118 |
-
array(
|
119 |
-
'reset_posts' => $post_ids,
|
120 |
-
'reset_wp_forms' => $form_ids,
|
121 |
-
'reset_terms' => $term_ids,
|
122 |
-
)
|
123 |
-
);
|
124 |
-
}
|
125 |
-
|
126 |
-
/**
|
127 |
-
* Backup our existing settings.
|
128 |
-
*/
|
129 |
-
function backup_settings() {
|
130 |
-
if ( ! current_user_can( 'manage_options' ) ) {
|
131 |
-
return;
|
132 |
-
}
|
133 |
-
|
134 |
-
$file_name = 'astra-sites-backup-' . date( 'd-M-Y-h-i-s' ) . '.json';
|
135 |
-
$old_settings = get_option( 'astra-settings', array() );
|
136 |
-
$upload_dir = Astra_Sites_Importer_Log::get_instance()->log_dir();
|
137 |
-
$upload_path = trailingslashit( $upload_dir['path'] );
|
138 |
-
$log_file = $upload_path . $file_name;
|
139 |
-
$file_system = Astra_Sites_Importer_Log::get_instance()->get_filesystem();
|
140 |
-
|
141 |
-
// If file system fails? Then take a backup in site option.
|
142 |
-
if ( false === $file_system->put_contents( $log_file, json_encode( $old_settings ), FS_CHMOD_FILE ) ) {
|
143 |
-
update_option( 'astra_sites_' . $file_name, $old_settings );
|
144 |
-
}
|
145 |
-
|
146 |
-
wp_send_json_success();
|
147 |
-
}
|
148 |
-
|
149 |
-
/**
|
150 |
-
* Add Admin Notice.
|
151 |
-
*/
|
152 |
-
function add_notice() {
|
153 |
-
|
154 |
-
$theme_status = 'astra-sites-theme-' . $this->get_theme_status();
|
155 |
-
|
156 |
-
Astra_Notices::add_notice(
|
157 |
-
array(
|
158 |
-
'id' => 'astra-theme-activation-nag',
|
159 |
-
'type' => 'error',
|
160 |
-
'show_if' => ( ! defined( 'ASTRA_THEME_SETTINGS' ) ) ? true : false,
|
161 |
-
/* translators: 1: theme.php file*/
|
162 |
-
'message' => sprintf( __( '<p>Astra Theme needs to be active for you to use currently installed "%1$s" plugin. <a href="#" class="%3$s" data-theme-slug="astra">Install & Activate Now</a></p>', 'astra-sites' ), ASTRA_SITES_NAME, esc_url( admin_url( 'themes.php?theme=astra' ) ), $theme_status ),
|
163 |
-
'dismissible' => true,
|
164 |
-
'dismissible-time' => WEEK_IN_SECONDS,
|
165 |
-
)
|
166 |
-
);
|
167 |
-
}
|
168 |
-
|
169 |
-
/**
|
170 |
-
* Get theme install, active or inactive status.
|
171 |
-
*
|
172 |
-
* @since 1.3.2
|
173 |
-
*
|
174 |
-
* @return string Theme status
|
175 |
-
*/
|
176 |
-
function get_theme_status() {
|
177 |
-
|
178 |
-
$theme = wp_get_theme();
|
179 |
-
|
180 |
-
// Theme installed and activate.
|
181 |
-
if ( 'Astra' === $theme->name || 'Astra' === $theme->parent_theme ) {
|
182 |
-
return 'installed-and-active';
|
183 |
-
}
|
184 |
-
|
185 |
-
// Theme installed but not activate.
|
186 |
-
foreach ( (array) wp_get_themes() as $theme_dir => $theme ) {
|
187 |
-
if ( 'Astra' === $theme->name || 'Astra' === $theme->parent_theme ) {
|
188 |
-
return 'installed-but-inactive';
|
189 |
-
}
|
190 |
-
}
|
191 |
-
|
192 |
-
return 'not-installed';
|
193 |
-
}
|
194 |
-
|
195 |
-
/**
|
196 |
-
* Loads textdomain for the plugin.
|
197 |
-
*
|
198 |
-
* @since 1.0.1
|
199 |
-
*/
|
200 |
-
function load_textdomain() {
|
201 |
-
load_plugin_textdomain( 'astra-sites' );
|
202 |
-
}
|
203 |
-
|
204 |
-
/**
|
205 |
-
* Admin Notices
|
206 |
-
*
|
207 |
-
* @since 1.0.5
|
208 |
-
* @return void
|
209 |
-
*/
|
210 |
-
function admin_notices() {
|
211 |
-
|
212 |
-
if ( ! defined( 'ASTRA_THEME_SETTINGS' ) ) {
|
213 |
-
return;
|
214 |
-
}
|
215 |
-
|
216 |
-
add_action( 'plugin_action_links_' . ASTRA_SITES_BASE, array( $this, 'action_links' ) );
|
217 |
-
}
|
218 |
-
|
219 |
-
/**
|
220 |
-
* Show action links on the plugin screen.
|
221 |
-
*
|
222 |
-
* @param mixed $links Plugin Action links.
|
223 |
-
* @return array
|
224 |
-
*/
|
225 |
-
function action_links( $links ) {
|
226 |
-
$action_links = array(
|
227 |
-
'settings' => '<a href="' . admin_url( 'themes.php?page=astra-sites' ) . '" aria-label="' . esc_attr__( 'See Library', 'astra-sites' ) . '">' . esc_html__( 'See Library', 'astra-sites' ) . '</a>',
|
228 |
-
);
|
229 |
-
|
230 |
-
return array_merge( $action_links, $links );
|
231 |
-
}
|
232 |
-
|
233 |
-
/**
|
234 |
-
* Setter for $api_url
|
235 |
-
*
|
236 |
-
* @since 1.0.0
|
237 |
-
*/
|
238 |
-
public static function set_api_url() {
|
239 |
-
self::$api_url = apply_filters( 'astra_sites_api_url', 'https://websitedemos.net/wp-json/wp/v2/' );
|
240 |
-
|
241 |
-
}
|
242 |
-
|
243 |
-
/**
|
244 |
-
* Enqueue admin scripts.
|
245 |
-
*
|
246 |
-
* @since 1.3.2 Added 'install-theme.js' to install and activate theme.
|
247 |
-
* @since 1.0.5 Added 'getUpgradeText' and 'getUpgradeURL' localize variables.
|
248 |
-
*
|
249 |
-
* @since 1.0.0
|
250 |
-
*
|
251 |
-
* @param string $hook Current hook name.
|
252 |
-
* @return void
|
253 |
-
*/
|
254 |
-
public function admin_enqueue( $hook = '' ) {
|
255 |
-
|
256 |
-
wp_enqueue_script( 'astra-sites-install-theme', ASTRA_SITES_URI . 'inc/assets/js/install-theme.js', array( 'jquery', 'updates' ), ASTRA_SITES_VER, true );
|
257 |
-
wp_enqueue_style( 'astra-sites-install-theme', ASTRA_SITES_URI . 'inc/assets/css/install-theme.css', null, ASTRA_SITES_VER, 'all' );
|
258 |
-
|
259 |
-
$data = apply_filters(
|
260 |
-
'astra_sites_install_theme_localize_vars',
|
261 |
-
array(
|
262 |
-
'installed' => __( 'Installed! Activating..', 'astra-sites' ),
|
263 |
-
'activating' => __( 'Activating..', 'astra-sites' ),
|
264 |
-
'activated' => __( 'Activated! Reloading..', 'astra-sites' ),
|
265 |
-
'installing' => __( 'Installing..', 'astra-sites' ),
|
266 |
-
'ajaxurl' => esc_url( admin_url( 'admin-ajax.php' ) ),
|
267 |
-
)
|
268 |
-
);
|
269 |
-
wp_localize_script( 'astra-sites-install-theme', 'AstraSitesInstallThemeVars', $data );
|
270 |
-
|
271 |
-
if ( 'appearance_page_astra-sites' !== $hook ) {
|
272 |
-
return;
|
273 |
-
}
|
274 |
-
|
275 |
-
global $is_IE, $is_edge;
|
276 |
-
|
277 |
-
if ( $is_IE || $is_edge ) {
|
278 |
-
wp_enqueue_script( 'astra-sites-eventsource', ASTRA_SITES_URI . 'inc/assets/js/eventsource.min.js', array( 'jquery', 'wp-util', 'updates' ), ASTRA_SITES_VER, true );
|
279 |
-
}
|
280 |
-
|
281 |
-
// Fetch.
|
282 |
-
wp_register_script( 'astra-sites-fetch', ASTRA_SITES_URI . 'inc/assets/js/fetch.umd.js', array( 'jquery' ), ASTRA_SITES_VER, true );
|
283 |
-
|
284 |
-
// API.
|
285 |
-
wp_register_script( 'astra-sites-api', ASTRA_SITES_URI . 'inc/assets/js/astra-sites-api.js', array( 'jquery', 'astra-sites-fetch' ), ASTRA_SITES_VER, true );
|
286 |
-
|
287 |
-
// Admin Page.
|
288 |
-
wp_enqueue_style( 'astra-sites-admin', ASTRA_SITES_URI . 'inc/assets/css/admin.css', ASTRA_SITES_VER, true );
|
289 |
-
wp_enqueue_script( 'astra-sites-admin-page', ASTRA_SITES_URI . 'inc/assets/js/admin-page.js', array( 'jquery', 'wp-util', 'updates' ), ASTRA_SITES_VER, true );
|
290 |
-
wp_enqueue_script( 'astra-sites-render-grid', ASTRA_SITES_URI . 'inc/assets/js/render-grid.js', array( 'wp-util', 'astra-sites-api', 'imagesloaded', 'jquery' ), ASTRA_SITES_VER, true );
|
291 |
-
|
292 |
-
$data = apply_filters(
|
293 |
-
'astra_sites_localize_vars',
|
294 |
-
array(
|
295 |
-
'ApiURL' => self::$api_url,
|
296 |
-
'filters' => array(
|
297 |
-
'page_builder' => array(
|
298 |
-
'title' => __( 'Page Builder', 'astra-sites' ),
|
299 |
-
'slug' => 'astra-site-page-builder',
|
300 |
-
'trigger' => 'astra-api-category-loaded',
|
301 |
-
),
|
302 |
-
'categories' => array(
|
303 |
-
'title' => __( 'Categories', 'astra-sites' ),
|
304 |
-
'slug' => 'astra-site-category',
|
305 |
-
'trigger' => 'astra-api-category-loaded',
|
306 |
-
),
|
307 |
-
),
|
308 |
-
)
|
309 |
-
);
|
310 |
-
wp_localize_script( 'astra-sites-api', 'astraSitesApi', $data );
|
311 |
-
|
312 |
-
// Use this for premium demos.
|
313 |
-
$request_params = apply_filters(
|
314 |
-
'astra_sites_api_params',
|
315 |
-
array(
|
316 |
-
'purchase_key' => '',
|
317 |
-
'site_url' => '',
|
318 |
-
'par-page' => 30,
|
319 |
-
)
|
320 |
-
);
|
321 |
-
|
322 |
-
$data = apply_filters(
|
323 |
-
'astra_sites_render_localize_vars',
|
324 |
-
array(
|
325 |
-
'sites' => $request_params,
|
326 |
-
'page-builders' => array(),
|
327 |
-
'categories' => array(),
|
328 |
-
'settings' => array(),
|
329 |
-
'default_page_builder' => Astra_Sites_Page::get_instance()->get_setting( 'page_builder' ),
|
330 |
-
)
|
331 |
-
);
|
332 |
-
|
333 |
-
wp_localize_script( 'astra-sites-render-grid', 'astraRenderGrid', $data );
|
334 |
-
|
335 |
-
$data = apply_filters(
|
336 |
-
'astra_sites_localize_vars',
|
337 |
-
array(
|
338 |
-
'debug' => ( ( defined( 'WP_DEBUG' ) && WP_DEBUG ) || isset( $_GET['debug'] ) ) ? true : false,
|
339 |
-
'isPro' => defined( 'ASTRA_PRO_SITES_NAME' ) ? true : false,
|
340 |
-
'isWhiteLabeled' => Astra_Sites_White_Label::get_instance()->is_white_labeled(),
|
341 |
-
'ajaxurl' => esc_url( admin_url( 'admin-ajax.php' ) ),
|
342 |
-
'siteURL' => site_url(),
|
343 |
-
'docUrl' => 'https://wpastra.com/',
|
344 |
-
'getProText' => __( 'Get Agency Bundle', 'astra-sites' ),
|
345 |
-
'getProURL' => esc_url( 'https://wpastra.com/agency/?utm_source=demo-import-panel&utm_campaign=astra-sites&utm_medium=wp-dashboard' ),
|
346 |
-
'getUpgradeText' => __( 'Upgrade', 'astra-sites' ),
|
347 |
-
'getUpgradeURL' => esc_url( 'https://wpastra.com/agency/?utm_source=demo-import-panel&utm_campaign=astra-sites&utm_medium=wp-dashboard' ),
|
348 |
-
'_ajax_nonce' => wp_create_nonce( 'astra-sites' ),
|
349 |
-
'requiredPlugins' => array(),
|
350 |
-
'XMLReaderDisabled' => ! class_exists( 'XMLReader' ) ? true : false,
|
351 |
-
'strings' => array(
|
352 |
-
/* translators: %s are HTML tags. */
|
353 |
-
'warningXMLReader' => sprintf( __( '%1$sRequired XMLReader PHP extension is missing on your server!%2$sAstra Sites import requires XMLReader extension to be installed. Please contact your web hosting provider and ask them to install and activate the XMLReader PHP extension.', 'astra-sites' ), '<div class="notice astra-sites-xml-notice notice-error"><p><b>', '</b></p><p>', '</p></div>' ),
|
354 |
-
'warningBeforeCloseWindow' => __( 'Warning! Astra Site Import process is not complete. Don\'t close the window until import process complete. Do you still want to leave the window?', 'astra-sites' ),
|
355 |
-
'importFailedBtnSmall' => __( 'Error!', 'astra-sites' ),
|
356 |
-
'importFailedBtnLarge' => __( 'Error! Read Possibilities.', 'astra-sites' ),
|
357 |
-
'importFailedURL' => esc_url( 'https://wpastra.com/docs/?p=1314&utm_source=demo-import-panel&utm_campaign=astra-sites&utm_medium=import-failed' ),
|
358 |
-
'viewSite' => __( 'Done! View Site', 'astra-sites' ),
|
359 |
-
'btnActivating' => __( 'Activating', 'astra-sites' ) . '…',
|
360 |
-
'btnActive' => __( 'Active', 'astra-sites' ),
|
361 |
-
'importFailBtn' => __( 'Import failed.', 'astra-sites' ),
|
362 |
-
'importFailBtnLarge' => __( 'Import failed. See error log.', 'astra-sites' ),
|
363 |
-
'importDemo' => __( 'Import This Site', 'astra-sites' ),
|
364 |
-
'importingDemo' => __( 'Importing..', 'astra-sites' ),
|
365 |
-
'DescExpand' => __( 'Read more', 'astra-sites' ) . '…',
|
366 |
-
'DescCollapse' => __( 'Hide', 'astra-sites' ),
|
367 |
-
'responseError' => __( 'There was a problem receiving a response from server.', 'astra-sites' ),
|
368 |
-
'searchNoFound' => __( 'No Demos found, Try a different search.', 'astra-sites' ),
|
369 |
-
),
|
370 |
-
'log' => array(
|
371 |
-
'installingPlugin' => __( 'Installing plugin ', 'astra-sites' ),
|
372 |
-
'installed' => __( 'Plugin installed!', 'astra-sites' ),
|
373 |
-
'activating' => __( 'Activating plugin ', 'astra-sites' ),
|
374 |
-
'activated' => __( 'Plugin activated ', 'astra-sites' ),
|
375 |
-
'bulkActivation' => __( 'Bulk plugin activation...', 'astra-sites' ),
|
376 |
-
'activate' => __( 'Plugin activate - ', 'astra-sites' ),
|
377 |
-
'activationError' => __( 'Error! While activating plugin - ', 'astra-sites' ),
|
378 |
-
'bulkInstall' => __( 'Bulk plugin installation...', 'astra-sites' ),
|
379 |
-
'api' => __( 'Site API ', 'astra-sites' ),
|
380 |
-
'importing' => __( 'Importing..', 'astra-sites' ),
|
381 |
-
'processingRequest' => __( 'Processing requests...', 'astra-sites' ),
|
382 |
-
'importCustomizer' => __( 'Importing "Customizer Settings"...', 'astra-sites' ),
|
383 |
-
'importCustomizerSuccess' => __( 'Imported customizer settings!', 'astra-sites' ),
|
384 |
-
'importWPForms' => __( 'Importing "Contact Forms"...', 'astra-sites' ),
|
385 |
-
'importWPFormsSuccess' => __( 'Imported Contact Forms!', 'astra-sites' ),
|
386 |
-
'importXMLPrepare' => __( 'Preparing "XML" Data...', 'astra-sites' ),
|
387 |
-
'importXMLPrepareSuccess' => __( 'Set XML data!', 'astra-sites' ),
|
388 |
-
'importXML' => __( 'Importing "XML"...', 'astra-sites' ),
|
389 |
-
'importXMLSuccess' => __( 'Imported XML!', 'astra-sites' ),
|
390 |
-
'importOptions' => __( 'Importing "Options"...', 'astra-sites' ),
|
391 |
-
'importOptionsSuccess' => __( 'Imported Options!', 'astra-sites' ),
|
392 |
-
'importWidgets' => __( 'Importing "Widgets"...', 'astra-sites' ),
|
393 |
-
'importWidgetsSuccess' => __( 'Imported Widgets!', 'astra-sites' ),
|
394 |
-
'serverConfiguration' => esc_url( 'https://wpastra.com/docs/?p=1314&utm_source=demo-import-panel&utm_campaign=import-error&utm_medium=wp-dashboard' ),
|
395 |
-
'success' => __( 'View site: ', 'astra-sites' ),
|
396 |
-
'gettingData' => __( 'Getting Site Information..', 'astra-sites' ),
|
397 |
-
'importingCustomizer' => __( 'Importing Customizer Settings..', 'astra-sites' ),
|
398 |
-
'importingWPForms' => __( 'Importing Contact Forms..', 'astra-sites' ),
|
399 |
-
'importXMLPreparing' => __( 'Setting up import data..', 'astra-sites' ),
|
400 |
-
'importingXML' => __( 'Importing Content..', 'astra-sites' ),
|
401 |
-
'importingOptions' => __( 'Importing Site Options..', 'astra-sites' ),
|
402 |
-
'importingWidgets' => __( 'Importing Widgets..', 'astra-sites' ),
|
403 |
-
'importComplete' => __( 'Import Complete..', 'astra-sites' ),
|
404 |
-
'preview' => __( 'Previewing ', 'astra-sites' ),
|
405 |
-
'importLogText' => __( 'See Error Log →', 'astra-sites' ),
|
406 |
-
),
|
407 |
-
)
|
408 |
-
);
|
409 |
-
|
410 |
-
wp_localize_script( 'astra-sites-admin-page', 'astraSitesAdmin', $data );
|
411 |
-
|
412 |
-
}
|
413 |
-
|
414 |
-
/**
|
415 |
-
* Load all the required files in the importer.
|
416 |
-
*
|
417 |
-
* @since 1.0.0
|
418 |
-
*/
|
419 |
-
private function includes() {
|
420 |
-
|
421 |
-
require_once ASTRA_SITES_DIR . 'inc/lib/astra-notices/class-astra-notices.php';
|
422 |
-
require_once ASTRA_SITES_DIR . 'inc/classes/class-astra-sites-white-label.php';
|
423 |
-
require_once ASTRA_SITES_DIR . 'inc/classes/class-astra-sites-page.php';
|
424 |
-
require_once ASTRA_SITES_DIR . 'inc/classes/compatibility/class-astra-sites-compatibility.php';
|
425 |
-
require_once ASTRA_SITES_DIR . 'inc/classes/class-astra-sites-importer.php';
|
426 |
-
}
|
427 |
-
|
428 |
-
/**
|
429 |
-
* Required Plugin Activate
|
430 |
-
*
|
431 |
-
* @since 1.0.0
|
432 |
-
*/
|
433 |
-
public function required_plugin_activate() {
|
434 |
-
|
435 |
-
if ( ! current_user_can( 'install_plugins' ) || ! isset( $_POST['init'] ) || ! $_POST['init'] ) {
|
436 |
-
wp_send_json_error(
|
437 |
-
array(
|
438 |
-
'success' => false,
|
439 |
-
'message' => __( 'No plugin specified', 'astra-sites' ),
|
440 |
-
)
|
441 |
-
);
|
442 |
-
}
|
443 |
-
|
444 |
-
$data = array();
|
445 |
-
$plugin_init = ( isset( $_POST['init'] ) ) ? esc_attr( $_POST['init'] ) : '';
|
446 |
-
$astra_site_options = ( isset( $_POST['options'] ) ) ? json_decode( stripslashes( $_POST['options'] ) ) : '';
|
447 |
-
$enabled_extensions = ( isset( $_POST['enabledExtensions'] ) ) ? json_decode( stripslashes( $_POST['enabledExtensions'] ) ) : '';
|
448 |
-
|
449 |
-
$data['astra_site_options'] = $astra_site_options;
|
450 |
-
$data['enabled_extensions'] = $enabled_extensions;
|
451 |
-
|
452 |
-
$activate = activate_plugin( $plugin_init, '', false, true );
|
453 |
-
|
454 |
-
if ( is_wp_error( $activate ) ) {
|
455 |
-
wp_send_json_error(
|
456 |
-
array(
|
457 |
-
'success' => false,
|
458 |
-
'message' => $activate->get_error_message(),
|
459 |
-
)
|
460 |
-
);
|
461 |
-
}
|
462 |
-
|
463 |
-
do_action( 'astra_sites_after_plugin_activation', $plugin_init, $data );
|
464 |
-
|
465 |
-
wp_send_json_success(
|
466 |
-
array(
|
467 |
-
'success' => true,
|
468 |
-
'message' => __( 'Plugin Activated', 'astra-sites' ),
|
469 |
-
)
|
470 |
-
);
|
471 |
-
|
472 |
-
}
|
473 |
-
|
474 |
-
/**
|
475 |
-
* Required Plugin
|
476 |
-
*
|
477 |
-
* @since 1.0.0
|
478 |
-
* @return void
|
479 |
-
*/
|
480 |
-
public function required_plugin() {
|
481 |
-
|
482 |
-
// Verify Nonce.
|
483 |
-
check_ajax_referer( 'astra-sites', '_ajax_nonce' );
|
484 |
-
|
485 |
-
$response = array(
|
486 |
-
'active' => array(),
|
487 |
-
'inactive' => array(),
|
488 |
-
'notinstalled' => array(),
|
489 |
-
);
|
490 |
-
|
491 |
-
if ( ! current_user_can( 'customize' ) ) {
|
492 |
-
wp_send_json_error( $response );
|
493 |
-
}
|
494 |
-
|
495 |
-
$required_plugins = ( isset( $_POST['required_plugins'] ) ) ? $_POST['required_plugins'] : array();
|
496 |
-
|
497 |
-
if ( count( $required_plugins ) > 0 ) {
|
498 |
-
foreach ( $required_plugins as $key => $plugin ) {
|
499 |
-
|
500 |
-
/**
|
501 |
-
* Has Pro Version Support?
|
502 |
-
* And
|
503 |
-
* Is Pro Version Installed?
|
504 |
-
*/
|
505 |
-
$plugin_pro = self::pro_plugin_exist( $plugin['init'] );
|
506 |
-
if ( $plugin_pro ) {
|
507 |
-
|
508 |
-
// Pro - Active.
|
509 |
-
if ( is_plugin_active( $plugin_pro['init'] ) ) {
|
510 |
-
$response['active'][] = $plugin_pro;
|
511 |
-
|
512 |
-
// Pro - Inactive.
|
513 |
-
} else {
|
514 |
-
$response['inactive'][] = $plugin_pro;
|
515 |
-
}
|
516 |
-
} else {
|
517 |
-
|
518 |
-
// Lite - Installed but Inactive.
|
519 |
-
if ( file_exists( WP_PLUGIN_DIR . '/' . $plugin['init'] ) && is_plugin_inactive( $plugin['init'] ) ) {
|
520 |
-
|
521 |
-
$response['inactive'][] = $plugin;
|
522 |
-
|
523 |
-
// Lite - Not Installed.
|
524 |
-
} elseif ( ! file_exists( WP_PLUGIN_DIR . '/' . $plugin['init'] ) ) {
|
525 |
-
|
526 |
-
$response['notinstalled'][] = $plugin;
|
527 |
-
|
528 |
-
// Lite - Active.
|
529 |
-
} else {
|
530 |
-
$response['active'][] = $plugin;
|
531 |
-
}
|
532 |
-
}
|
533 |
-
}
|
534 |
-
}
|
535 |
-
|
536 |
-
// Send response.
|
537 |
-
wp_send_json_success( $response );
|
538 |
-
}
|
539 |
-
|
540 |
-
/**
|
541 |
-
* Has Pro Version Support?
|
542 |
-
* And
|
543 |
-
* Is Pro Version Installed?
|
544 |
-
*
|
545 |
-
* Check Pro plugin version exist of requested plugin lite version.
|
546 |
-
*
|
547 |
-
* Eg. If plugin 'BB Lite Version' required to import demo. Then we check the 'BB Agency Version' is exist?
|
548 |
-
* If yes then we only 'Activate' Agency Version. [We couldn't install agency version.]
|
549 |
-
* Else we 'Activate' or 'Install' Lite Version.
|
550 |
-
*
|
551 |
-
* @since 1.0.1
|
552 |
-
*
|
553 |
-
* @param string $lite_version Lite version init file.
|
554 |
-
* @return mixed Return false if not installed or not supported by us
|
555 |
-
* else return 'Pro' version details.
|
556 |
-
*/
|
557 |
-
public static function pro_plugin_exist( $lite_version = '' ) {
|
558 |
-
|
559 |
-
// Lite init => Pro init.
|
560 |
-
$plugins = apply_filters(
|
561 |
-
'astra_sites_pro_plugin_exist',
|
562 |
-
array(
|
563 |
-
'beaver-builder-lite-version/fl-builder.php' => array(
|
564 |
-
'slug' => 'bb-plugin',
|
565 |
-
'init' => 'bb-plugin/fl-builder.php',
|
566 |
-
'name' => 'Beaver Builder Plugin',
|
567 |
-
),
|
568 |
-
'ultimate-addons-for-beaver-builder-lite/bb-ultimate-addon.php' => array(
|
569 |
-
'slug' => 'bb-ultimate-addon',
|
570 |
-
'init' => 'bb-ultimate-addon/bb-ultimate-addon.php',
|
571 |
-
'name' => 'Ultimate Addon for Beaver Builder',
|
572 |
-
),
|
573 |
-
'wpforms-lite/wpforms.php' => array(
|
574 |
-
'slug' => 'wpforms',
|
575 |
-
'init' => 'wpforms/wpforms.php',
|
576 |
-
'name' => 'WPForms',
|
577 |
-
),
|
578 |
-
),
|
579 |
-
$lite_version
|
580 |
-
);
|
581 |
-
|
582 |
-
if ( isset( $plugins[ $lite_version ] ) ) {
|
583 |
-
|
584 |
-
// Pro plugin directory exist?
|
585 |
-
if ( file_exists( WP_PLUGIN_DIR . '/' . $plugins[ $lite_version ]['init'] ) ) {
|
586 |
-
return $plugins[ $lite_version ];
|
587 |
-
}
|
588 |
-
}
|
589 |
-
|
590 |
-
return false;
|
591 |
-
}
|
592 |
-
|
593 |
-
}
|
594 |
-
|
595 |
-
/**
|
596 |
-
* Kicking this off by calling 'get_instance()' method
|
597 |
-
*/
|
598 |
-
Astra_Sites::get_instance();
|
599 |
-
|
600 |
-
endif;
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Astra Sites
|
4 |
+
*
|
5 |
+
* @since 1.0.0
|
6 |
+
* @package Astra Sites
|
7 |
+
*/
|
8 |
+
|
9 |
+
defined( 'ABSPATH' ) or exit;
|
10 |
+
|
11 |
+
if ( ! class_exists( 'Astra_Sites' ) ) :
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Astra_Sites
|
15 |
+
*/
|
16 |
+
class Astra_Sites {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* API URL which is used to get the response from.
|
20 |
+
*
|
21 |
+
* @since 1.0.0
|
22 |
+
* @var (String) URL
|
23 |
+
*/
|
24 |
+
public static $api_url;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Instance of Astra_Sites
|
28 |
+
*
|
29 |
+
* @since 1.0.0
|
30 |
+
* @var (Object) Astra_Sites
|
31 |
+
*/
|
32 |
+
private static $_instance = null;
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Instance of Astra_Sites.
|
36 |
+
*
|
37 |
+
* @since 1.0.0
|
38 |
+
*
|
39 |
+
* @return object Class object.
|
40 |
+
*/
|
41 |
+
public static function get_instance() {
|
42 |
+
if ( ! isset( self::$_instance ) ) {
|
43 |
+
self::$_instance = new self;
|
44 |
+
}
|
45 |
+
|
46 |
+
return self::$_instance;
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Constructor.
|
51 |
+
*
|
52 |
+
* @since 1.0.0
|
53 |
+
*/
|
54 |
+
private function __construct() {
|
55 |
+
|
56 |
+
self::set_api_url();
|
57 |
+
|
58 |
+
$this->includes();
|
59 |
+
|
60 |
+
add_action( 'admin_notices', array( $this, 'add_notice' ), 1 );
|
61 |
+
add_action( 'admin_notices', array( $this, 'admin_notices' ) );
|
62 |
+
add_action( 'plugins_loaded', array( $this, 'load_textdomain' ) );
|
63 |
+
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue' ) );
|
64 |
+
|
65 |
+
// AJAX.
|
66 |
+
add_action( 'wp_ajax_astra-required-plugins', array( $this, 'required_plugin' ) );
|
67 |
+
add_action( 'wp_ajax_astra-required-plugin-activate', array( $this, 'required_plugin_activate' ) );
|
68 |
+
add_action( 'wp_ajax_astra-sites-backup-settings', array( $this, 'backup_settings' ) );
|
69 |
+
add_action( 'wp_ajax_astra-sites-set-reset-data', array( $this, 'set_reset_data' ) );
|
70 |
+
add_action( 'wp_ajax_astra-sites-activate-theme', array( $this, 'activate_theme' ) );
|
71 |
+
add_action( 'wp_ajax_astra-sites-getting-started-notice', array( $this, 'getting_started_notice' ) );
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Close getting started notice for current user
|
76 |
+
*
|
77 |
+
* @since 1.3.5
|
78 |
+
* @return void
|
79 |
+
*/
|
80 |
+
function getting_started_notice() {
|
81 |
+
update_user_meta( get_current_user_id(), '_astra_sites_gettings_started', true );
|
82 |
+
wp_send_json_success();
|
83 |
+
}
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Activate theme
|
87 |
+
*
|
88 |
+
* @since 1.3.2
|
89 |
+
* @return void
|
90 |
+
*/
|
91 |
+
function activate_theme() {
|
92 |
+
|
93 |
+
switch_theme( 'astra' );
|
94 |
+
|
95 |
+
wp_send_json_success(
|
96 |
+
array(
|
97 |
+
'success' => true,
|
98 |
+
'message' => __( 'Theme Activated', 'astra-sites' ),
|
99 |
+
)
|
100 |
+
);
|
101 |
+
}
|
102 |
+
|
103 |
+
/**
|
104 |
+
* Set reset data
|
105 |
+
*/
|
106 |
+
function set_reset_data() {
|
107 |
+
if ( ! current_user_can( 'manage_options' ) ) {
|
108 |
+
return;
|
109 |
+
}
|
110 |
+
|
111 |
+
global $wpdb;
|
112 |
+
|
113 |
+
$post_ids = $wpdb->get_col( "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key='_astra_sites_imported_post'" );
|
114 |
+
$form_ids = $wpdb->get_col( "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key='_astra_sites_imported_wp_forms'" );
|
115 |
+
$term_ids = $wpdb->get_col( "SELECT term_id FROM {$wpdb->termmeta} WHERE meta_key='_astra_sites_imported_term'" );
|
116 |
+
|
117 |
+
wp_send_json_success(
|
118 |
+
array(
|
119 |
+
'reset_posts' => $post_ids,
|
120 |
+
'reset_wp_forms' => $form_ids,
|
121 |
+
'reset_terms' => $term_ids,
|
122 |
+
)
|
123 |
+
);
|
124 |
+
}
|
125 |
+
|
126 |
+
/**
|
127 |
+
* Backup our existing settings.
|
128 |
+
*/
|
129 |
+
function backup_settings() {
|
130 |
+
if ( ! current_user_can( 'manage_options' ) ) {
|
131 |
+
return;
|
132 |
+
}
|
133 |
+
|
134 |
+
$file_name = 'astra-sites-backup-' . date( 'd-M-Y-h-i-s' ) . '.json';
|
135 |
+
$old_settings = get_option( 'astra-settings', array() );
|
136 |
+
$upload_dir = Astra_Sites_Importer_Log::get_instance()->log_dir();
|
137 |
+
$upload_path = trailingslashit( $upload_dir['path'] );
|
138 |
+
$log_file = $upload_path . $file_name;
|
139 |
+
$file_system = Astra_Sites_Importer_Log::get_instance()->get_filesystem();
|
140 |
+
|
141 |
+
// If file system fails? Then take a backup in site option.
|
142 |
+
if ( false === $file_system->put_contents( $log_file, json_encode( $old_settings ), FS_CHMOD_FILE ) ) {
|
143 |
+
update_option( 'astra_sites_' . $file_name, $old_settings );
|
144 |
+
}
|
145 |
+
|
146 |
+
wp_send_json_success();
|
147 |
+
}
|
148 |
+
|
149 |
+
/**
|
150 |
+
* Add Admin Notice.
|
151 |
+
*/
|
152 |
+
function add_notice() {
|
153 |
+
|
154 |
+
$theme_status = 'astra-sites-theme-' . $this->get_theme_status();
|
155 |
+
|
156 |
+
Astra_Notices::add_notice(
|
157 |
+
array(
|
158 |
+
'id' => 'astra-theme-activation-nag',
|
159 |
+
'type' => 'error',
|
160 |
+
'show_if' => ( ! defined( 'ASTRA_THEME_SETTINGS' ) ) ? true : false,
|
161 |
+
/* translators: 1: theme.php file*/
|
162 |
+
'message' => sprintf( __( '<p>Astra Theme needs to be active for you to use currently installed "%1$s" plugin. <a href="#" class="%3$s" data-theme-slug="astra">Install & Activate Now</a></p>', 'astra-sites' ), ASTRA_SITES_NAME, esc_url( admin_url( 'themes.php?theme=astra' ) ), $theme_status ),
|
163 |
+
'dismissible' => true,
|
164 |
+
'dismissible-time' => WEEK_IN_SECONDS,
|
165 |
+
)
|
166 |
+
);
|
167 |
+
}
|
168 |
+
|
169 |
+
/**
|
170 |
+
* Get theme install, active or inactive status.
|
171 |
+
*
|
172 |
+
* @since 1.3.2
|
173 |
+
*
|
174 |
+
* @return string Theme status
|
175 |
+
*/
|
176 |
+
function get_theme_status() {
|
177 |
+
|
178 |
+
$theme = wp_get_theme();
|
179 |
+
|
180 |
+
// Theme installed and activate.
|
181 |
+
if ( 'Astra' === $theme->name || 'Astra' === $theme->parent_theme ) {
|
182 |
+
return 'installed-and-active';
|
183 |
+
}
|
184 |
+
|
185 |
+
// Theme installed but not activate.
|
186 |
+
foreach ( (array) wp_get_themes() as $theme_dir => $theme ) {
|
187 |
+
if ( 'Astra' === $theme->name || 'Astra' === $theme->parent_theme ) {
|
188 |
+
return 'installed-but-inactive';
|
189 |
+
}
|
190 |
+
}
|
191 |
+
|
192 |
+
return 'not-installed';
|
193 |
+
}
|
194 |
+
|
195 |
+
/**
|
196 |
+
* Loads textdomain for the plugin.
|
197 |
+
*
|
198 |
+
* @since 1.0.1
|
199 |
+
*/
|
200 |
+
function load_textdomain() {
|
201 |
+
load_plugin_textdomain( 'astra-sites' );
|
202 |
+
}
|
203 |
+
|
204 |
+
/**
|
205 |
+
* Admin Notices
|
206 |
+
*
|
207 |
+
* @since 1.0.5
|
208 |
+
* @return void
|
209 |
+
*/
|
210 |
+
function admin_notices() {
|
211 |
+
|
212 |
+
if ( ! defined( 'ASTRA_THEME_SETTINGS' ) ) {
|
213 |
+
return;
|
214 |
+
}
|
215 |
+
|
216 |
+
add_action( 'plugin_action_links_' . ASTRA_SITES_BASE, array( $this, 'action_links' ) );
|
217 |
+
}
|
218 |
+
|
219 |
+
/**
|
220 |
+
* Show action links on the plugin screen.
|
221 |
+
*
|
222 |
+
* @param mixed $links Plugin Action links.
|
223 |
+
* @return array
|
224 |
+
*/
|
225 |
+
function action_links( $links ) {
|
226 |
+
$action_links = array(
|
227 |
+
'settings' => '<a href="' . admin_url( 'themes.php?page=astra-sites' ) . '" aria-label="' . esc_attr__( 'See Library', 'astra-sites' ) . '">' . esc_html__( 'See Library', 'astra-sites' ) . '</a>',
|
228 |
+
);
|
229 |
+
|
230 |
+
return array_merge( $action_links, $links );
|
231 |
+
}
|
232 |
+
|
233 |
+
/**
|
234 |
+
* Setter for $api_url
|
235 |
+
*
|
236 |
+
* @since 1.0.0
|
237 |
+
*/
|
238 |
+
public static function set_api_url() {
|
239 |
+
self::$api_url = apply_filters( 'astra_sites_api_url', 'https://websitedemos.net/wp-json/wp/v2/' );
|
240 |
+
|
241 |
+
}
|
242 |
+
|
243 |
+
/**
|
244 |
+
* Enqueue admin scripts.
|
245 |
+
*
|
246 |
+
* @since 1.3.2 Added 'install-theme.js' to install and activate theme.
|
247 |
+
* @since 1.0.5 Added 'getUpgradeText' and 'getUpgradeURL' localize variables.
|
248 |
+
*
|
249 |
+
* @since 1.0.0
|
250 |
+
*
|
251 |
+
* @param string $hook Current hook name.
|
252 |
+
* @return void
|
253 |
+
*/
|
254 |
+
public function admin_enqueue( $hook = '' ) {
|
255 |
+
|
256 |
+
wp_enqueue_script( 'astra-sites-install-theme', ASTRA_SITES_URI . 'inc/assets/js/install-theme.js', array( 'jquery', 'updates' ), ASTRA_SITES_VER, true );
|
257 |
+
wp_enqueue_style( 'astra-sites-install-theme', ASTRA_SITES_URI . 'inc/assets/css/install-theme.css', null, ASTRA_SITES_VER, 'all' );
|
258 |
+
|
259 |
+
$data = apply_filters(
|
260 |
+
'astra_sites_install_theme_localize_vars',
|
261 |
+
array(
|
262 |
+
'installed' => __( 'Installed! Activating..', 'astra-sites' ),
|
263 |
+
'activating' => __( 'Activating..', 'astra-sites' ),
|
264 |
+
'activated' => __( 'Activated! Reloading..', 'astra-sites' ),
|
265 |
+
'installing' => __( 'Installing..', 'astra-sites' ),
|
266 |
+
'ajaxurl' => esc_url( admin_url( 'admin-ajax.php' ) ),
|
267 |
+
)
|
268 |
+
);
|
269 |
+
wp_localize_script( 'astra-sites-install-theme', 'AstraSitesInstallThemeVars', $data );
|
270 |
+
|
271 |
+
if ( 'appearance_page_astra-sites' !== $hook ) {
|
272 |
+
return;
|
273 |
+
}
|
274 |
+
|
275 |
+
global $is_IE, $is_edge;
|
276 |
+
|
277 |
+
if ( $is_IE || $is_edge ) {
|
278 |
+
wp_enqueue_script( 'astra-sites-eventsource', ASTRA_SITES_URI . 'inc/assets/js/eventsource.min.js', array( 'jquery', 'wp-util', 'updates' ), ASTRA_SITES_VER, true );
|
279 |
+
}
|
280 |
+
|
281 |
+
// Fetch.
|
282 |
+
wp_register_script( 'astra-sites-fetch', ASTRA_SITES_URI . 'inc/assets/js/fetch.umd.js', array( 'jquery' ), ASTRA_SITES_VER, true );
|
283 |
+
|
284 |
+
// API.
|
285 |
+
wp_register_script( 'astra-sites-api', ASTRA_SITES_URI . 'inc/assets/js/astra-sites-api.js', array( 'jquery', 'astra-sites-fetch' ), ASTRA_SITES_VER, true );
|
286 |
+
|
287 |
+
// Admin Page.
|
288 |
+
wp_enqueue_style( 'astra-sites-admin', ASTRA_SITES_URI . 'inc/assets/css/admin.css', ASTRA_SITES_VER, true );
|
289 |
+
wp_enqueue_script( 'astra-sites-admin-page', ASTRA_SITES_URI . 'inc/assets/js/admin-page.js', array( 'jquery', 'wp-util', 'updates' ), ASTRA_SITES_VER, true );
|
290 |
+
wp_enqueue_script( 'astra-sites-render-grid', ASTRA_SITES_URI . 'inc/assets/js/render-grid.js', array( 'wp-util', 'astra-sites-api', 'imagesloaded', 'jquery' ), ASTRA_SITES_VER, true );
|
291 |
+
|
292 |
+
$data = apply_filters(
|
293 |
+
'astra_sites_localize_vars',
|
294 |
+
array(
|
295 |
+
'ApiURL' => self::$api_url,
|
296 |
+
'filters' => array(
|
297 |
+
'page_builder' => array(
|
298 |
+
'title' => __( 'Page Builder', 'astra-sites' ),
|
299 |
+
'slug' => 'astra-site-page-builder',
|
300 |
+
'trigger' => 'astra-api-category-loaded',
|
301 |
+
),
|
302 |
+
'categories' => array(
|
303 |
+
'title' => __( 'Categories', 'astra-sites' ),
|
304 |
+
'slug' => 'astra-site-category',
|
305 |
+
'trigger' => 'astra-api-category-loaded',
|
306 |
+
),
|
307 |
+
),
|
308 |
+
)
|
309 |
+
);
|
310 |
+
wp_localize_script( 'astra-sites-api', 'astraSitesApi', $data );
|
311 |
+
|
312 |
+
// Use this for premium demos.
|
313 |
+
$request_params = apply_filters(
|
314 |
+
'astra_sites_api_params',
|
315 |
+
array(
|
316 |
+
'purchase_key' => '',
|
317 |
+
'site_url' => '',
|
318 |
+
'par-page' => 30,
|
319 |
+
)
|
320 |
+
);
|
321 |
+
|
322 |
+
$data = apply_filters(
|
323 |
+
'astra_sites_render_localize_vars',
|
324 |
+
array(
|
325 |
+
'sites' => $request_params,
|
326 |
+
'page-builders' => array(),
|
327 |
+
'categories' => array(),
|
328 |
+
'settings' => array(),
|
329 |
+
'default_page_builder' => Astra_Sites_Page::get_instance()->get_setting( 'page_builder' ),
|
330 |
+
)
|
331 |
+
);
|
332 |
+
|
333 |
+
wp_localize_script( 'astra-sites-render-grid', 'astraRenderGrid', $data );
|
334 |
+
|
335 |
+
$data = apply_filters(
|
336 |
+
'astra_sites_localize_vars',
|
337 |
+
array(
|
338 |
+
'debug' => ( ( defined( 'WP_DEBUG' ) && WP_DEBUG ) || isset( $_GET['debug'] ) ) ? true : false,
|
339 |
+
'isPro' => defined( 'ASTRA_PRO_SITES_NAME' ) ? true : false,
|
340 |
+
'isWhiteLabeled' => Astra_Sites_White_Label::get_instance()->is_white_labeled(),
|
341 |
+
'ajaxurl' => esc_url( admin_url( 'admin-ajax.php' ) ),
|
342 |
+
'siteURL' => site_url(),
|
343 |
+
'docUrl' => 'https://wpastra.com/',
|
344 |
+
'getProText' => __( 'Get Agency Bundle', 'astra-sites' ),
|
345 |
+
'getProURL' => esc_url( 'https://wpastra.com/agency/?utm_source=demo-import-panel&utm_campaign=astra-sites&utm_medium=wp-dashboard' ),
|
346 |
+
'getUpgradeText' => __( 'Upgrade', 'astra-sites' ),
|
347 |
+
'getUpgradeURL' => esc_url( 'https://wpastra.com/agency/?utm_source=demo-import-panel&utm_campaign=astra-sites&utm_medium=wp-dashboard' ),
|
348 |
+
'_ajax_nonce' => wp_create_nonce( 'astra-sites' ),
|
349 |
+
'requiredPlugins' => array(),
|
350 |
+
'XMLReaderDisabled' => ! class_exists( 'XMLReader' ) ? true : false,
|
351 |
+
'strings' => array(
|
352 |
+
/* translators: %s are HTML tags. */
|
353 |
+
'warningXMLReader' => sprintf( __( '%1$sRequired XMLReader PHP extension is missing on your server!%2$sAstra Sites import requires XMLReader extension to be installed. Please contact your web hosting provider and ask them to install and activate the XMLReader PHP extension.', 'astra-sites' ), '<div class="notice astra-sites-xml-notice notice-error"><p><b>', '</b></p><p>', '</p></div>' ),
|
354 |
+
'warningBeforeCloseWindow' => __( 'Warning! Astra Site Import process is not complete. Don\'t close the window until import process complete. Do you still want to leave the window?', 'astra-sites' ),
|
355 |
+
'importFailedBtnSmall' => __( 'Error!', 'astra-sites' ),
|
356 |
+
'importFailedBtnLarge' => __( 'Error! Read Possibilities.', 'astra-sites' ),
|
357 |
+
'importFailedURL' => esc_url( 'https://wpastra.com/docs/?p=1314&utm_source=demo-import-panel&utm_campaign=astra-sites&utm_medium=import-failed' ),
|
358 |
+
'viewSite' => __( 'Done! View Site', 'astra-sites' ),
|
359 |
+
'btnActivating' => __( 'Activating', 'astra-sites' ) . '…',
|
360 |
+
'btnActive' => __( 'Active', 'astra-sites' ),
|
361 |
+
'importFailBtn' => __( 'Import failed.', 'astra-sites' ),
|
362 |
+
'importFailBtnLarge' => __( 'Import failed. See error log.', 'astra-sites' ),
|
363 |
+
'importDemo' => __( 'Import This Site', 'astra-sites' ),
|
364 |
+
'importingDemo' => __( 'Importing..', 'astra-sites' ),
|
365 |
+
'DescExpand' => __( 'Read more', 'astra-sites' ) . '…',
|
366 |
+
'DescCollapse' => __( 'Hide', 'astra-sites' ),
|
367 |
+
'responseError' => __( 'There was a problem receiving a response from server.', 'astra-sites' ),
|
368 |
+
'searchNoFound' => __( 'No Demos found, Try a different search.', 'astra-sites' ),
|
369 |
+
),
|
370 |
+
'log' => array(
|
371 |
+
'installingPlugin' => __( 'Installing plugin ', 'astra-sites' ),
|
372 |
+
'installed' => __( 'Plugin installed!', 'astra-sites' ),
|
373 |
+
'activating' => __( 'Activating plugin ', 'astra-sites' ),
|
374 |
+
'activated' => __( 'Plugin activated ', 'astra-sites' ),
|
375 |
+
'bulkActivation' => __( 'Bulk plugin activation...', 'astra-sites' ),
|
376 |
+
'activate' => __( 'Plugin activate - ', 'astra-sites' ),
|
377 |
+
'activationError' => __( 'Error! While activating plugin - ', 'astra-sites' ),
|
378 |
+
'bulkInstall' => __( 'Bulk plugin installation...', 'astra-sites' ),
|
379 |
+
'api' => __( 'Site API ', 'astra-sites' ),
|
380 |
+
'importing' => __( 'Importing..', 'astra-sites' ),
|
381 |
+
'processingRequest' => __( 'Processing requests...', 'astra-sites' ),
|
382 |
+
'importCustomizer' => __( 'Importing "Customizer Settings"...', 'astra-sites' ),
|
383 |
+
'importCustomizerSuccess' => __( 'Imported customizer settings!', 'astra-sites' ),
|
384 |
+
'importWPForms' => __( 'Importing "Contact Forms"...', 'astra-sites' ),
|
385 |
+
'importWPFormsSuccess' => __( 'Imported Contact Forms!', 'astra-sites' ),
|
386 |
+
'importXMLPrepare' => __( 'Preparing "XML" Data...', 'astra-sites' ),
|
387 |
+
'importXMLPrepareSuccess' => __( 'Set XML data!', 'astra-sites' ),
|
388 |
+
'importXML' => __( 'Importing "XML"...', 'astra-sites' ),
|
389 |
+
'importXMLSuccess' => __( 'Imported XML!', 'astra-sites' ),
|
390 |
+
'importOptions' => __( 'Importing "Options"...', 'astra-sites' ),
|
391 |
+
'importOptionsSuccess' => __( 'Imported Options!', 'astra-sites' ),
|
392 |
+
'importWidgets' => __( 'Importing "Widgets"...', 'astra-sites' ),
|
393 |
+
'importWidgetsSuccess' => __( 'Imported Widgets!', 'astra-sites' ),
|
394 |
+
'serverConfiguration' => esc_url( 'https://wpastra.com/docs/?p=1314&utm_source=demo-import-panel&utm_campaign=import-error&utm_medium=wp-dashboard' ),
|
395 |
+
'success' => __( 'View site: ', 'astra-sites' ),
|
396 |
+
'gettingData' => __( 'Getting Site Information..', 'astra-sites' ),
|
397 |
+
'importingCustomizer' => __( 'Importing Customizer Settings..', 'astra-sites' ),
|
398 |
+
'importingWPForms' => __( 'Importing Contact Forms..', 'astra-sites' ),
|
399 |
+
'importXMLPreparing' => __( 'Setting up import data..', 'astra-sites' ),
|
400 |
+
'importingXML' => __( 'Importing Content..', 'astra-sites' ),
|
401 |
+
'importingOptions' => __( 'Importing Site Options..', 'astra-sites' ),
|
402 |
+
'importingWidgets' => __( 'Importing Widgets..', 'astra-sites' ),
|
403 |
+
'importComplete' => __( 'Import Complete..', 'astra-sites' ),
|
404 |
+
'preview' => __( 'Previewing ', 'astra-sites' ),
|
405 |
+
'importLogText' => __( 'See Error Log →', 'astra-sites' ),
|
406 |
+
),
|
407 |
+
)
|
408 |
+
);
|
409 |
+
|
410 |
+
wp_localize_script( 'astra-sites-admin-page', 'astraSitesAdmin', $data );
|
411 |
+
|
412 |
+
}
|
413 |
+
|
414 |
+
/**
|
415 |
+
* Load all the required files in the importer.
|
416 |
+
*
|
417 |
+
* @since 1.0.0
|
418 |
+
*/
|
419 |
+
private function includes() {
|
420 |
+
|
421 |
+
require_once ASTRA_SITES_DIR . 'inc/lib/astra-notices/class-astra-notices.php';
|
422 |
+
require_once ASTRA_SITES_DIR . 'inc/classes/class-astra-sites-white-label.php';
|
423 |
+
require_once ASTRA_SITES_DIR . 'inc/classes/class-astra-sites-page.php';
|
424 |
+
require_once ASTRA_SITES_DIR . 'inc/classes/compatibility/class-astra-sites-compatibility.php';
|
425 |
+
require_once ASTRA_SITES_DIR . 'inc/classes/class-astra-sites-importer.php';
|
426 |
+
}
|
427 |
+
|
428 |
+
/**
|
429 |
+
* Required Plugin Activate
|
430 |
+
*
|
431 |
+
* @since 1.0.0
|
432 |
+
*/
|
433 |
+
public function required_plugin_activate() {
|
434 |
+
|
435 |
+
if ( ! current_user_can( 'install_plugins' ) || ! isset( $_POST['init'] ) || ! $_POST['init'] ) {
|
436 |
+
wp_send_json_error(
|
437 |
+
array(
|
438 |
+
'success' => false,
|
439 |
+
'message' => __( 'No plugin specified', 'astra-sites' ),
|
440 |
+
)
|
441 |
+
);
|
442 |
+
}
|
443 |
+
|
444 |
+
$data = array();
|
445 |
+
$plugin_init = ( isset( $_POST['init'] ) ) ? esc_attr( $_POST['init'] ) : '';
|
446 |
+
$astra_site_options = ( isset( $_POST['options'] ) ) ? json_decode( stripslashes( $_POST['options'] ) ) : '';
|
447 |
+
$enabled_extensions = ( isset( $_POST['enabledExtensions'] ) ) ? json_decode( stripslashes( $_POST['enabledExtensions'] ) ) : '';
|
448 |
+
|
449 |
+
$data['astra_site_options'] = $astra_site_options;
|
450 |
+
$data['enabled_extensions'] = $enabled_extensions;
|
451 |
+
|
452 |
+
$activate = activate_plugin( $plugin_init, '', false, true );
|
453 |
+
|
454 |
+
if ( is_wp_error( $activate ) ) {
|
455 |
+
wp_send_json_error(
|
456 |
+
array(
|
457 |
+
'success' => false,
|
458 |
+
'message' => $activate->get_error_message(),
|
459 |
+
)
|
460 |
+
);
|
461 |
+
}
|
462 |
+
|
463 |
+
do_action( 'astra_sites_after_plugin_activation', $plugin_init, $data );
|
464 |
+
|
465 |
+
wp_send_json_success(
|
466 |
+
array(
|
467 |
+
'success' => true,
|
468 |
+
'message' => __( 'Plugin Activated', 'astra-sites' ),
|
469 |
+
)
|
470 |
+
);
|
471 |
+
|
472 |
+
}
|
473 |
+
|
474 |
+
/**
|
475 |
+
* Required Plugin
|
476 |
+
*
|
477 |
+
* @since 1.0.0
|
478 |
+
* @return void
|
479 |
+
*/
|
480 |
+
public function required_plugin() {
|
481 |
+
|
482 |
+
// Verify Nonce.
|
483 |
+
check_ajax_referer( 'astra-sites', '_ajax_nonce' );
|
484 |
+
|
485 |
+
$response = array(
|
486 |
+
'active' => array(),
|
487 |
+
'inactive' => array(),
|
488 |
+
'notinstalled' => array(),
|
489 |
+
);
|
490 |
+
|
491 |
+
if ( ! current_user_can( 'customize' ) ) {
|
492 |
+
wp_send_json_error( $response );
|
493 |
+
}
|
494 |
+
|
495 |
+
$required_plugins = ( isset( $_POST['required_plugins'] ) ) ? $_POST['required_plugins'] : array();
|
496 |
+
|
497 |
+
if ( count( $required_plugins ) > 0 ) {
|
498 |
+
foreach ( $required_plugins as $key => $plugin ) {
|
499 |
+
|
500 |
+
/**
|
501 |
+
* Has Pro Version Support?
|
502 |
+
* And
|
503 |
+
* Is Pro Version Installed?
|
504 |
+
*/
|
505 |
+
$plugin_pro = self::pro_plugin_exist( $plugin['init'] );
|
506 |
+
if ( $plugin_pro ) {
|
507 |
+
|
508 |
+
// Pro - Active.
|
509 |
+
if ( is_plugin_active( $plugin_pro['init'] ) ) {
|
510 |
+
$response['active'][] = $plugin_pro;
|
511 |
+
|
512 |
+
// Pro - Inactive.
|
513 |
+
} else {
|
514 |
+
$response['inactive'][] = $plugin_pro;
|
515 |
+
}
|
516 |
+
} else {
|
517 |
+
|
518 |
+
// Lite - Installed but Inactive.
|
519 |
+
if ( file_exists( WP_PLUGIN_DIR . '/' . $plugin['init'] ) && is_plugin_inactive( $plugin['init'] ) ) {
|
520 |
+
|
521 |
+
$response['inactive'][] = $plugin;
|
522 |
+
|
523 |
+
// Lite - Not Installed.
|
524 |
+
} elseif ( ! file_exists( WP_PLUGIN_DIR . '/' . $plugin['init'] ) ) {
|
525 |
+
|
526 |
+
$response['notinstalled'][] = $plugin;
|
527 |
+
|
528 |
+
// Lite - Active.
|
529 |
+
} else {
|
530 |
+
$response['active'][] = $plugin;
|
531 |
+
}
|
532 |
+
}
|
533 |
+
}
|
534 |
+
}
|
535 |
+
|
536 |
+
// Send response.
|
537 |
+
wp_send_json_success( $response );
|
538 |
+
}
|
539 |
+
|
540 |
+
/**
|
541 |
+
* Has Pro Version Support?
|
542 |
+
* And
|
543 |
+
* Is Pro Version Installed?
|
544 |
+
*
|
545 |
+
* Check Pro plugin version exist of requested plugin lite version.
|
546 |
+
*
|
547 |
+
* Eg. If plugin 'BB Lite Version' required to import demo. Then we check the 'BB Agency Version' is exist?
|
548 |
+
* If yes then we only 'Activate' Agency Version. [We couldn't install agency version.]
|
549 |
+
* Else we 'Activate' or 'Install' Lite Version.
|
550 |
+
*
|
551 |
+
* @since 1.0.1
|
552 |
+
*
|
553 |
+
* @param string $lite_version Lite version init file.
|
554 |
+
* @return mixed Return false if not installed or not supported by us
|
555 |
+
* else return 'Pro' version details.
|
556 |
+
*/
|
557 |
+
public static function pro_plugin_exist( $lite_version = '' ) {
|
558 |
+
|
559 |
+
// Lite init => Pro init.
|
560 |
+
$plugins = apply_filters(
|
561 |
+
'astra_sites_pro_plugin_exist',
|
562 |
+
array(
|
563 |
+
'beaver-builder-lite-version/fl-builder.php' => array(
|
564 |
+
'slug' => 'bb-plugin',
|
565 |
+
'init' => 'bb-plugin/fl-builder.php',
|
566 |
+
'name' => 'Beaver Builder Plugin',
|
567 |
+
),
|
568 |
+
'ultimate-addons-for-beaver-builder-lite/bb-ultimate-addon.php' => array(
|
569 |
+
'slug' => 'bb-ultimate-addon',
|
570 |
+
'init' => 'bb-ultimate-addon/bb-ultimate-addon.php',
|
571 |
+
'name' => 'Ultimate Addon for Beaver Builder',
|
572 |
+
),
|
573 |
+
'wpforms-lite/wpforms.php' => array(
|
574 |
+
'slug' => 'wpforms',
|
575 |
+
'init' => 'wpforms/wpforms.php',
|
576 |
+
'name' => 'WPForms',
|
577 |
+
),
|
578 |
+
),
|
579 |
+
$lite_version
|
580 |
+
);
|
581 |
+
|
582 |
+
if ( isset( $plugins[ $lite_version ] ) ) {
|
583 |
+
|
584 |
+
// Pro plugin directory exist?
|
585 |
+
if ( file_exists( WP_PLUGIN_DIR . '/' . $plugins[ $lite_version ]['init'] ) ) {
|
586 |
+
return $plugins[ $lite_version ];
|
587 |
+
}
|
588 |
+
}
|
589 |
+
|
590 |
+
return false;
|
591 |
+
}
|
592 |
+
|
593 |
+
}
|
594 |
+
|
595 |
+
/**
|
596 |
+
* Kicking this off by calling 'get_instance()' method
|
597 |
+
*/
|
598 |
+
Astra_Sites::get_instance();
|
599 |
+
|
600 |
+
endif;
|
inc/classes/compatibility/class-astra-sites-compatibility.php
CHANGED
@@ -1,66 +1,66 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Astra Sites Compatibility for 3rd party plugins.
|
4 |
-
*
|
5 |
-
* @package Astra Sites
|
6 |
-
* @since 1.0.11
|
7 |
-
*/
|
8 |
-
|
9 |
-
if ( ! class_exists( 'Astra_Sites_Compatibility' ) ) :
|
10 |
-
|
11 |
-
/**
|
12 |
-
* Astra Sites Compatibility
|
13 |
-
*
|
14 |
-
* @since 1.0.11
|
15 |
-
*/
|
16 |
-
class Astra_Sites_Compatibility {
|
17 |
-
|
18 |
-
/**
|
19 |
-
* Instance
|
20 |
-
*
|
21 |
-
* @access private
|
22 |
-
* @var object Class object.
|
23 |
-
* @since 1.0.11
|
24 |
-
*/
|
25 |
-
private static $instance;
|
26 |
-
|
27 |
-
/**
|
28 |
-
* Initiator
|
29 |
-
*
|
30 |
-
* @since 1.0.11
|
31 |
-
* @return object initialized object of class.
|
32 |
-
*/
|
33 |
-
public static function instance() {
|
34 |
-
if ( ! isset( self::$instance ) ) {
|
35 |
-
self::$instance = new self;
|
36 |
-
}
|
37 |
-
return self::$instance;
|
38 |
-
}
|
39 |
-
|
40 |
-
/**
|
41 |
-
* Constructor
|
42 |
-
*
|
43 |
-
* @since 1.0.11
|
44 |
-
*/
|
45 |
-
public function __construct() {
|
46 |
-
|
47 |
-
// Plugin - Astra Pro.
|
48 |
-
require_once ASTRA_SITES_DIR . 'inc/classes/compatibility/astra-pro/class-astra-sites-compatibility-astra-pro.php';
|
49 |
-
|
50 |
-
// Plugin - Site Origin Widgets.
|
51 |
-
require_once ASTRA_SITES_DIR . 'inc/classes/compatibility/so-widgets-bundle/class-astra-sites-compatibility-so-widgets.php';
|
52 |
-
|
53 |
-
// Plugin - WooCommerce.
|
54 |
-
require_once ASTRA_SITES_DIR . 'inc/classes/compatibility/woocommerce/class-astra-sites-compatibility-woocommerce.php';
|
55 |
-
}
|
56 |
-
|
57 |
-
}
|
58 |
-
|
59 |
-
/**
|
60 |
-
* Kicking this off by calling 'instance()' method
|
61 |
-
*/
|
62 |
-
Astra_Sites_Compatibility::instance();
|
63 |
-
|
64 |
-
endif;
|
65 |
-
|
66 |
-
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Astra Sites Compatibility for 3rd party plugins.
|
4 |
+
*
|
5 |
+
* @package Astra Sites
|
6 |
+
* @since 1.0.11
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! class_exists( 'Astra_Sites_Compatibility' ) ) :
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Astra Sites Compatibility
|
13 |
+
*
|
14 |
+
* @since 1.0.11
|
15 |
+
*/
|
16 |
+
class Astra_Sites_Compatibility {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Instance
|
20 |
+
*
|
21 |
+
* @access private
|
22 |
+
* @var object Class object.
|
23 |
+
* @since 1.0.11
|
24 |
+
*/
|
25 |
+
private static $instance;
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Initiator
|
29 |
+
*
|
30 |
+
* @since 1.0.11
|
31 |
+
* @return object initialized object of class.
|
32 |
+
*/
|
33 |
+
public static function instance() {
|
34 |
+
if ( ! isset( self::$instance ) ) {
|
35 |
+
self::$instance = new self;
|
36 |
+
}
|
37 |
+
return self::$instance;
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Constructor
|
42 |
+
*
|
43 |
+
* @since 1.0.11
|
44 |
+
*/
|
45 |
+
public function __construct() {
|
46 |
+
|
47 |
+
// Plugin - Astra Pro.
|
48 |
+
require_once ASTRA_SITES_DIR . 'inc/classes/compatibility/astra-pro/class-astra-sites-compatibility-astra-pro.php';
|
49 |
+
|
50 |
+
// Plugin - Site Origin Widgets.
|
51 |
+
require_once ASTRA_SITES_DIR . 'inc/classes/compatibility/so-widgets-bundle/class-astra-sites-compatibility-so-widgets.php';
|
52 |
+
|
53 |
+
// Plugin - WooCommerce.
|
54 |
+
require_once ASTRA_SITES_DIR . 'inc/classes/compatibility/woocommerce/class-astra-sites-compatibility-woocommerce.php';
|
55 |
+
}
|
56 |
+
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Kicking this off by calling 'instance()' method
|
61 |
+
*/
|
62 |
+
Astra_Sites_Compatibility::instance();
|
63 |
+
|
64 |
+
endif;
|
65 |
+
|
66 |
+
|
inc/importers/batch-processing/class-astra-sites-batch-processing-beaver-builder.php
CHANGED
@@ -1,261 +1,261 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Batch Processing
|
4 |
-
*
|
5 |
-
* @package Astra Sites
|
6 |
-
* @since 1.0.14
|
7 |
-
*/
|
8 |
-
|
9 |
-
if ( ! class_exists( 'Astra_Sites_Batch_Processing_Beaver_Builder' ) ) :
|
10 |
-
|
11 |
-
/**
|
12 |
-
* Astra_Sites_Batch_Processing_Beaver_Builder
|
13 |
-
*
|
14 |
-
* @since 1.0.14
|
15 |
-
*/
|
16 |
-
class Astra_Sites_Batch_Processing_Beaver_Builder {
|
17 |
-
|
18 |
-
/**
|
19 |
-
* Instance
|
20 |
-
*
|
21 |
-
* @since 1.0.14
|
22 |
-
* @access private
|
23 |
-
* @var object Class object.
|
24 |
-
*/
|
25 |
-
private static $instance;
|
26 |
-
|
27 |
-
/**
|
28 |
-
* Initiator
|
29 |
-
*
|
30 |
-
* @since 1.0.14
|
31 |
-
* @return object initialized object of class.
|
32 |
-
*/
|
33 |
-
public static function get_instance() {
|
34 |
-
|
35 |
-
if ( ! isset( self::$instance ) ) {
|
36 |
-
self::$instance = new self;
|
37 |
-
}
|
38 |
-
return self::$instance;
|
39 |
-
}
|
40 |
-
|
41 |
-
/**
|
42 |
-
* Constructor
|
43 |
-
*
|
44 |
-
* @since 1.0.14
|
45 |
-
*/
|
46 |
-
public function __construct() {
|
47 |
-
}
|
48 |
-
|
49 |
-
/**
|
50 |
-
* Import
|
51 |
-
*
|
52 |
-
* @since 1.0.14
|
53 |
-
* @return void
|
54 |
-
*/
|
55 |
-
public function import() {
|
56 |
-
|
57 |
-
Astra_Sites_Importer_Log::add( '---- Processing WordPress Posts / Pages - for Beaver Builder ----' );
|
58 |
-
if ( ! is_callable( 'FLBuilderModel::get_post_types' ) ) {
|
59 |
-
return;
|
60 |
-
}
|
61 |
-
|
62 |
-
$post_types = FLBuilderModel::get_post_types( 'post-types' );
|
63 |
-
if ( empty( $post_types ) && ! is_array( $post_types ) ) {
|
64 |
-
return;
|
65 |
-
}
|
66 |
-
|
67 |
-
$post_ids = Astra_Sites_Batch_Processing::get_pages( $post_types );
|
68 |
-
if ( empty( $post_ids ) && ! is_array( $post_ids ) ) {
|
69 |
-
return;
|
70 |
-
}
|
71 |
-
|
72 |
-
foreach ( $post_ids as $post_id ) {
|
73 |
-
$is_bb_post = get_post_meta( $post_id, '_fl_builder_enabled', true );
|
74 |
-
if ( $is_bb_post ) {
|
75 |
-
$this->import_single_post( $post_id );
|
76 |
-
}
|
77 |
-
}
|
78 |
-
}
|
79 |
-
|
80 |
-
/**
|
81 |
-
* Update post meta.
|
82 |
-
*
|
83 |
-
* @param integer $post_id Post ID.
|
84 |
-
* @return void
|
85 |
-
*/
|
86 |
-
public function import_single_post( $post_id = 0 ) {
|
87 |
-
|
88 |
-
Astra_Sites_Importer_Log::add( 'Post ID: ' . $post_id );
|
89 |
-
if ( ! empty( $post_id ) ) {
|
90 |
-
|
91 |
-
// Get page builder data.
|
92 |
-
$data = get_post_meta( $post_id, '_fl_builder_data', true );
|
93 |
-
|
94 |
-
if ( ! empty( $data ) ) {
|
95 |
-
foreach ( $data as $key => $el ) {
|
96 |
-
|
97 |
-
// Update 'row' images.
|
98 |
-
if ( 'row' === $el->type ) {
|
99 |
-
$data[ $key ]->settings = self::update_row( $el->settings );
|
100 |
-
}
|
101 |
-
|
102 |
-
// Update 'module' images.
|
103 |
-
if ( 'module' === $el->type ) {
|
104 |
-
$data[ $key ]->settings = self::update_module( $el->settings );
|
105 |
-
}
|
106 |
-
|
107 |
-
// Update 'column' images.
|
108 |
-
if ( 'column' === $el->type ) {
|
109 |
-
$data[ $key ]->settings = self::update_column( $el->settings );
|
110 |
-
}
|
111 |
-
}
|
112 |
-
|
113 |
-
// Update page builder data.
|
114 |
-
update_post_meta( $post_id, '_fl_builder_data', $data );
|
115 |
-
update_post_meta( $post_id, '_fl_builder_draft', $data );
|
116 |
-
|
117 |
-
// Clear all cache.
|
118 |
-
FLBuilderModel::delete_asset_cache_for_all_posts();
|
119 |
-
}
|
120 |
-
}
|
121 |
-
|
122 |
-
}
|
123 |
-
|
124 |
-
/**
|
125 |
-
* Import Module Images.
|
126 |
-
*
|
127 |
-
* @param object $settings Module settings object.
|
128 |
-
* @return object
|
129 |
-
*/
|
130 |
-
public static function update_module( $settings ) {
|
131 |
-
|
132 |
-
// 1) Set photos.
|
133 |
-
$settings = self::import_photo( $settings );
|
134 |
-
|
135 |
-
/**
|
136 |
-
* 2) Set `$settings->data` for Only type 'image-icon'
|
137 |
-
*
|
138 |
-
* @todo Remove the condition `'image-icon' === $settings->type` if `$settings->data` is used only for the Image Icon.
|
139 |
-
*/
|
140 |
-
if (
|
141 |
-
isset( $settings->data ) &&
|
142 |
-
isset( $settings->photo ) && ! empty( $settings->photo ) &&
|
143 |
-
'image-icon' === $settings->type
|
144 |
-
) {
|
145 |
-
$settings->data = FLBuilderPhoto::get_attachment_data( $settings->photo );
|
146 |
-
}
|
147 |
-
|
148 |
-
// 3) Set `list item` module images.
|
149 |
-
if ( isset( $settings->add_list_item ) ) {
|
150 |
-
foreach ( $settings->add_list_item as $key => $value ) {
|
151 |
-
$settings->add_list_item[ $key ] = self::import_photo( $value );
|
152 |
-
}
|
153 |
-
}
|
154 |
-
|
155 |
-
// 4) Set `list item` module images.
|
156 |
-
if ( isset( $settings->text ) ) {
|
157 |
-
$ids_mapping = get_option( 'astra_sites_wpforms_ids_mapping', array() );
|
158 |
-
if ( $ids_mapping ) {
|
159 |
-
|
160 |
-
// Keep old data in temp.
|
161 |
-
$updated_data = $settings->text;
|
162 |
-
|
163 |
-
// Update WP form IDs.
|
164 |
-
foreach ( $ids_mapping as $old_id => $new_id ) {
|
165 |
-
$updated_data = str_replace( '[wpforms id="' . $old_id, '[wpforms id="' . $new_id, $updated_data );
|
166 |
-
}
|
167 |
-
|
168 |
-
// Update modified data.
|
169 |
-
$settings->text = $updated_data;
|
170 |
-
}
|
171 |
-
}
|
172 |
-
|
173 |
-
return $settings;
|
174 |
-
}
|
175 |
-
|
176 |
-
/**
|
177 |
-
* Import Column Images.
|
178 |
-
*
|
179 |
-
* @param object $settings Column settings object.
|
180 |
-
* @return object
|
181 |
-
*/
|
182 |
-
public static function update_column( $settings ) {
|
183 |
-
|
184 |
-
// 1) Set BG Images.
|
185 |
-
$settings = self::import_bg_image( $settings );
|
186 |
-
|
187 |
-
return $settings;
|
188 |
-
}
|
189 |
-
|
190 |
-
/**
|
191 |
-
* Import Row Images.
|
192 |
-
*
|
193 |
-
* @param object $settings Row settings object.
|
194 |
-
* @return object
|
195 |
-
*/
|
196 |
-
public static function update_row( $settings ) {
|
197 |
-
|
198 |
-
// 1) Set BG Images.
|
199 |
-
$settings = self::import_bg_image( $settings );
|
200 |
-
|
201 |
-
return $settings;
|
202 |
-
}
|
203 |
-
|
204 |
-
/**
|
205 |
-
* Helper: Import BG Images.
|
206 |
-
*
|
207 |
-
* @param object $settings Row settings object.
|
208 |
-
* @return object
|
209 |
-
*/
|
210 |
-
public static function import_bg_image( $settings ) {
|
211 |
-
|
212 |
-
if (
|
213 |
-
( ! empty( $settings->bg_image ) && ! empty( $settings->bg_image_src ) )
|
214 |
-
) {
|
215 |
-
$image = array(
|
216 |
-
'url' => $settings->bg_image_src,
|
217 |
-
'id' => $settings->bg_image,
|
218 |
-
);
|
219 |
-
|
220 |
-
$downloaded_image = Astra_Sites_Image_Importer::get_instance()->import( $image );
|
221 |
-
|
222 |
-
$settings->bg_image_src = $downloaded_image['url'];
|
223 |
-
$settings->bg_image = $downloaded_image['id'];
|
224 |
-
}
|
225 |
-
|
226 |
-
return $settings;
|
227 |
-
}
|
228 |
-
|
229 |
-
/**
|
230 |
-
* Helper: Import Photo.
|
231 |
-
*
|
232 |
-
* @param object $settings Row settings object.
|
233 |
-
* @return object
|
234 |
-
*/
|
235 |
-
public static function import_photo( $settings ) {
|
236 |
-
|
237 |
-
if ( ! empty( $settings->photo ) && ! empty( $settings->photo_src ) ) {
|
238 |
-
|
239 |
-
$image = array(
|
240 |
-
'url' => $settings->photo_src,
|
241 |
-
'id' => $settings->photo,
|
242 |
-
);
|
243 |
-
|
244 |
-
$downloaded_image = Astra_Sites_Image_Importer::get_instance()->import( $image );
|
245 |
-
|
246 |
-
$settings->photo_src = $downloaded_image['url'];
|
247 |
-
$settings->photo = $downloaded_image['id'];
|
248 |
-
}
|
249 |
-
|
250 |
-
return $settings;
|
251 |
-
}
|
252 |
-
|
253 |
-
|
254 |
-
}
|
255 |
-
|
256 |
-
/**
|
257 |
-
* Kicking this off by calling 'get_instance()' method
|
258 |
-
*/
|
259 |
-
Astra_Sites_Batch_Processing_Beaver_Builder::get_instance();
|
260 |
-
|
261 |
-
endif;
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Batch Processing
|
4 |
+
*
|
5 |
+
* @package Astra Sites
|
6 |
+
* @since 1.0.14
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! class_exists( 'Astra_Sites_Batch_Processing_Beaver_Builder' ) ) :
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Astra_Sites_Batch_Processing_Beaver_Builder
|
13 |
+
*
|
14 |
+
* @since 1.0.14
|
15 |
+
*/
|
16 |
+
class Astra_Sites_Batch_Processing_Beaver_Builder {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Instance
|
20 |
+
*
|
21 |
+
* @since 1.0.14
|
22 |
+
* @access private
|
23 |
+
* @var object Class object.
|
24 |
+
*/
|
25 |
+
private static $instance;
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Initiator
|
29 |
+
*
|
30 |
+
* @since 1.0.14
|
31 |
+
* @return object initialized object of class.
|
32 |
+
*/
|
33 |
+
public static function get_instance() {
|
34 |
+
|
35 |
+
if ( ! isset( self::$instance ) ) {
|
36 |
+
self::$instance = new self;
|
37 |
+
}
|
38 |
+
return self::$instance;
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Constructor
|
43 |
+
*
|
44 |
+
* @since 1.0.14
|
45 |
+
*/
|
46 |
+
public function __construct() {
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Import
|
51 |
+
*
|
52 |
+
* @since 1.0.14
|
53 |
+
* @return void
|
54 |
+
*/
|
55 |
+
public function import() {
|
56 |
+
|
57 |
+
Astra_Sites_Importer_Log::add( '---- Processing WordPress Posts / Pages - for Beaver Builder ----' );
|
58 |
+
if ( ! is_callable( 'FLBuilderModel::get_post_types' ) ) {
|
59 |
+
return;
|
60 |
+
}
|
61 |
+
|
62 |
+
$post_types = FLBuilderModel::get_post_types( 'post-types' );
|
63 |
+
if ( empty( $post_types ) && ! is_array( $post_types ) ) {
|
64 |
+
return;
|
65 |
+
}
|
66 |
+
|
67 |
+
$post_ids = Astra_Sites_Batch_Processing::get_pages( $post_types );
|
68 |
+
if ( empty( $post_ids ) && ! is_array( $post_ids ) ) {
|
69 |
+
return;
|
70 |
+
}
|
71 |
+
|
72 |
+
foreach ( $post_ids as $post_id ) {
|
73 |
+
$is_bb_post = get_post_meta( $post_id, '_fl_builder_enabled', true );
|
74 |
+
if ( $is_bb_post ) {
|
75 |
+
$this->import_single_post( $post_id );
|
76 |
+
}
|
77 |
+
}
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Update post meta.
|
82 |
+
*
|
83 |
+
* @param integer $post_id Post ID.
|
84 |
+
* @return void
|
85 |
+
*/
|
86 |
+
public function import_single_post( $post_id = 0 ) {
|
87 |
+
|
88 |
+
Astra_Sites_Importer_Log::add( 'Post ID: ' . $post_id );
|
89 |
+
if ( ! empty( $post_id ) ) {
|
90 |
+
|
91 |
+
// Get page builder data.
|
92 |
+
$data = get_post_meta( $post_id, '_fl_builder_data', true );
|
93 |
+
|
94 |
+
if ( ! empty( $data ) ) {
|
95 |
+
foreach ( $data as $key => $el ) {
|
96 |
+
|
97 |
+
// Update 'row' images.
|
98 |
+
if ( 'row' === $el->type ) {
|
99 |
+
$data[ $key ]->settings = self::update_row( $el->settings );
|
100 |
+
}
|
101 |
+
|
102 |
+
// Update 'module' images.
|
103 |
+
if ( 'module' === $el->type ) {
|
104 |
+
$data[ $key ]->settings = self::update_module( $el->settings );
|
105 |
+
}
|
106 |
+
|
107 |
+
// Update 'column' images.
|
108 |
+
if ( 'column' === $el->type ) {
|
109 |
+
$data[ $key ]->settings = self::update_column( $el->settings );
|
110 |
+
}
|
111 |
+
}
|
112 |
+
|
113 |
+
// Update page builder data.
|
114 |
+
update_post_meta( $post_id, '_fl_builder_data', $data );
|
115 |
+
update_post_meta( $post_id, '_fl_builder_draft', $data );
|
116 |
+
|
117 |
+
// Clear all cache.
|
118 |
+
FLBuilderModel::delete_asset_cache_for_all_posts();
|
119 |
+
}
|
120 |
+
}
|
121 |
+
|
122 |
+
}
|
123 |
+
|
124 |
+
/**
|
125 |
+
* Import Module Images.
|
126 |
+
*
|
127 |
+
* @param object $settings Module settings object.
|
128 |
+
* @return object
|
129 |
+
*/
|
130 |
+
public static function update_module( $settings ) {
|
131 |
+
|
132 |
+
// 1) Set photos.
|
133 |
+
$settings = self::import_photo( $settings );
|
134 |
+
|
135 |
+
/**
|
136 |
+
* 2) Set `$settings->data` for Only type 'image-icon'
|
137 |
+
*
|
138 |
+
* @todo Remove the condition `'image-icon' === $settings->type` if `$settings->data` is used only for the Image Icon.
|
139 |
+
*/
|
140 |
+
if (
|
141 |
+
isset( $settings->data ) &&
|
142 |
+
isset( $settings->photo ) && ! empty( $settings->photo ) &&
|
143 |
+
'image-icon' === $settings->type
|
144 |
+
) {
|
145 |
+
$settings->data = FLBuilderPhoto::get_attachment_data( $settings->photo );
|
146 |
+
}
|
147 |
+
|
148 |
+
// 3) Set `list item` module images.
|
149 |
+
if ( isset( $settings->add_list_item ) ) {
|
150 |
+
foreach ( $settings->add_list_item as $key => $value ) {
|
151 |
+
$settings->add_list_item[ $key ] = self::import_photo( $value );
|
152 |
+
}
|
153 |
+
}
|
154 |
+
|
155 |
+
// 4) Set `list item` module images.
|
156 |
+
if ( isset( $settings->text ) ) {
|
157 |
+
$ids_mapping = get_option( 'astra_sites_wpforms_ids_mapping', array() );
|
158 |
+
if ( $ids_mapping ) {
|
159 |
+
|
160 |
+
// Keep old data in temp.
|
161 |
+
$updated_data = $settings->text;
|
162 |
+
|
163 |
+
// Update WP form IDs.
|
164 |
+
foreach ( $ids_mapping as $old_id => $new_id ) {
|
165 |
+
$updated_data = str_replace( '[wpforms id="' . $old_id, '[wpforms id="' . $new_id, $updated_data );
|
166 |
+
}
|
167 |
+
|
168 |
+
// Update modified data.
|
169 |
+
$settings->text = $updated_data;
|
170 |
+
}
|
171 |
+
}
|
172 |
+
|
173 |
+
return $settings;
|
174 |
+
}
|
175 |
+
|
176 |
+
/**
|
177 |
+
* Import Column Images.
|
178 |
+
*
|
179 |
+
* @param object $settings Column settings object.
|
180 |
+
* @return object
|
181 |
+
*/
|
182 |
+
public static function update_column( $settings ) {
|
183 |
+
|
184 |
+
// 1) Set BG Images.
|
185 |
+
$settings = self::import_bg_image( $settings );
|
186 |
+
|
187 |
+
return $settings;
|
188 |
+
}
|
189 |
+
|
190 |
+
/**
|
191 |
+
* Import Row Images.
|
192 |
+
*
|
193 |
+
* @param object $settings Row settings object.
|
194 |
+
* @return object
|
195 |
+
*/
|
196 |
+
public static function update_row( $settings ) {
|
197 |
+
|
198 |
+
// 1) Set BG Images.
|
199 |
+
$settings = self::import_bg_image( $settings );
|
200 |
+
|
201 |
+
return $settings;
|
202 |
+
}
|
203 |
+
|
204 |
+
/**
|
205 |
+
* Helper: Import BG Images.
|
206 |
+
*
|
207 |
+
* @param object $settings Row settings object.
|
208 |
+
* @return object
|
209 |
+
*/
|
210 |
+
public static function import_bg_image( $settings ) {
|
211 |
+
|
212 |
+
if (
|
213 |
+
( ! empty( $settings->bg_image ) && ! empty( $settings->bg_image_src ) )
|
214 |
+
) {
|
215 |
+
$image = array(
|
216 |
+
'url' => $settings->bg_image_src,
|
217 |
+
'id' => $settings->bg_image,
|
218 |
+
);
|
219 |
+
|
220 |
+
$downloaded_image = Astra_Sites_Image_Importer::get_instance()->import( $image );
|
221 |
+
|
222 |
+
$settings->bg_image_src = $downloaded_image['url'];
|
223 |
+
$settings->bg_image = $downloaded_image['id'];
|
224 |
+
}
|
225 |
+
|
226 |
+
return $settings;
|
227 |
+
}
|
228 |
+
|
229 |
+
/**
|
230 |
+
* Helper: Import Photo.
|
231 |
+
*
|
232 |
+
* @param object $settings Row settings object.
|
233 |
+
* @return object
|
234 |
+
*/
|
235 |
+
public static function import_photo( $settings ) {
|
236 |
+
|
237 |
+
if ( ! empty( $settings->photo ) && ! empty( $settings->photo_src ) ) {
|
238 |
+
|
239 |
+
$image = array(
|
240 |
+
'url' => $settings->photo_src,
|
241 |
+
'id' => $settings->photo,
|
242 |
+
);
|
243 |
+
|
244 |
+
$downloaded_image = Astra_Sites_Image_Importer::get_instance()->import( $image );
|
245 |
+
|
246 |
+
$settings->photo_src = $downloaded_image['url'];
|
247 |
+
$settings->photo = $downloaded_image['id'];
|
248 |
+
}
|
249 |
+
|
250 |
+
return $settings;
|
251 |
+
}
|
252 |
+
|
253 |
+
|
254 |
+
}
|
255 |
+
|
256 |
+
/**
|
257 |
+
* Kicking this off by calling 'get_instance()' method
|
258 |
+
*/
|
259 |
+
Astra_Sites_Batch_Processing_Beaver_Builder::get_instance();
|
260 |
+
|
261 |
+
endif;
|
inc/importers/batch-processing/class-astra-sites-batch-processing-brizy.php
CHANGED
@@ -1,125 +1,125 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Batch Processing
|
4 |
-
*
|
5 |
-
* @package Astra Sites
|
6 |
-
* @since 1.2.14
|
7 |
-
*/
|
8 |
-
|
9 |
-
if ( ! class_exists( 'Astra_Sites_Batch_Processing_Brizy' ) ) :
|
10 |
-
|
11 |
-
/**
|
12 |
-
* Astra Sites Batch Processing Brizy
|
13 |
-
*
|
14 |
-
* @since 1.2.14
|
15 |
-
*/
|
16 |
-
class Astra_Sites_Batch_Processing_Brizy {
|
17 |
-
|
18 |
-
/**
|
19 |
-
* Instance
|
20 |
-
*
|
21 |
-
* @since 1.2.14
|
22 |
-
* @access private
|
23 |
-
* @var object Class object.
|
24 |
-
*/
|
25 |
-
private static $instance;
|
26 |
-
|
27 |
-
/**
|
28 |
-
* Initiator
|
29 |
-
*
|
30 |
-
* @since 1.2.14
|
31 |
-
* @return object initialized object of class.
|
32 |
-
*/
|
33 |
-
public static function get_instance() {
|
34 |
-
|
35 |
-
if ( ! isset( self::$instance ) ) {
|
36 |
-
self::$instance = new self;
|
37 |
-
}
|
38 |
-
return self::$instance;
|
39 |
-
}
|
40 |
-
|
41 |
-
/**
|
42 |
-
* Constructor
|
43 |
-
*
|
44 |
-
* @since 1.2.14
|
45 |
-
*/
|
46 |
-
public function __construct() {}
|
47 |
-
|
48 |
-
/**
|
49 |
-
* Import
|
50 |
-
*
|
51 |
-
* @since 1.2.14
|
52 |
-
* @return void
|
53 |
-
*/
|
54 |
-
public function import() {
|
55 |
-
|
56 |
-
Astra_Sites_Importer_Log::add( '---- Processing WordPress Posts / Pages - for "Brizy" ----' );
|
57 |
-
if ( ! is_callable( 'Brizy_Editor_Storage_Common::instance' ) ) {
|
58 |
-
return;
|
59 |
-
}
|
60 |
-
|
61 |
-
$post_types = Brizy_Editor_Storage_Common::instance()->get( 'post-types' );
|
62 |
-
if ( empty( $post_types ) && ! is_array( $post_types ) ) {
|
63 |
-
return;
|
64 |
-
}
|
65 |
-
|
66 |
-
$post_ids = Astra_Sites_Batch_Processing::get_pages( $post_types );
|
67 |
-
if ( empty( $post_ids ) && ! is_array( $post_ids ) ) {
|
68 |
-
return;
|
69 |
-
}
|
70 |
-
|
71 |
-
foreach ( $post_ids as $post_id ) {
|
72 |
-
$is_brizy_post = get_post_meta( $post_id, 'brizy_post_uid', true );
|
73 |
-
if ( $is_brizy_post ) {
|
74 |
-
$this->import_single_post( $post_id );
|
75 |
-
}
|
76 |
-
}
|
77 |
-
}
|
78 |
-
|
79 |
-
/**
|
80 |
-
* Update post meta.
|
81 |
-
*
|
82 |
-
* @param integer $post_id Post ID.
|
83 |
-
* @return void
|
84 |
-
*/
|
85 |
-
public function import_single_post( $post_id = 0 ) {
|
86 |
-
|
87 |
-
$ids_mapping = get_option( 'astra_sites_wpforms_ids_mapping', array() );
|
88 |
-
|
89 |
-
// Empty mapping? Then return.
|
90 |
-
if ( empty( $ids_mapping ) ) {
|
91 |
-
return;
|
92 |
-
}
|
93 |
-
|
94 |
-
$json_value = null;
|
95 |
-
|
96 |
-
$post = Brizy_Editor_Post::get( (int) $post_id );
|
97 |
-
$data = $post->storage()->get( Brizy_Editor_Post::BRIZY_POST, false );
|
98 |
-
|
99 |
-
// Decode current data.
|
100 |
-
$json_value = base64_decode( $data['editor_data'] );
|
101 |
-
|
102 |
-
// Update WPForm IDs.
|
103 |
-
foreach ( $ids_mapping as $old_id => $new_id ) {
|
104 |
-
$json_value = str_replace( '[wpforms id=\"' . $old_id, '[wpforms id=\"' . $new_id, $json_value );
|
105 |
-
}
|
106 |
-
|
107 |
-
// Encode modified data.
|
108 |
-
$data['editor_data'] = base64_encode( $json_value );
|
109 |
-
|
110 |
-
$post->set_editor_data( $json_value );
|
111 |
-
|
112 |
-
$post->storage()->set( Brizy_Editor_Post::BRIZY_POST, $data );
|
113 |
-
|
114 |
-
$post->compile_page();
|
115 |
-
$post->save();
|
116 |
-
}
|
117 |
-
|
118 |
-
}
|
119 |
-
|
120 |
-
/**
|
121 |
-
* Kicking this off by calling 'get_instance()' method
|
122 |
-
*/
|
123 |
-
Astra_Sites_Batch_Processing_Brizy::get_instance();
|
124 |
-
|
125 |
-
endif;
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Batch Processing
|
4 |
+
*
|
5 |
+
* @package Astra Sites
|
6 |
+
* @since 1.2.14
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! class_exists( 'Astra_Sites_Batch_Processing_Brizy' ) ) :
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Astra Sites Batch Processing Brizy
|
13 |
+
*
|
14 |
+
* @since 1.2.14
|
15 |
+
*/
|
16 |
+
class Astra_Sites_Batch_Processing_Brizy {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Instance
|
20 |
+
*
|
21 |
+
* @since 1.2.14
|
22 |
+
* @access private
|
23 |
+
* @var object Class object.
|
24 |
+
*/
|
25 |
+
private static $instance;
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Initiator
|
29 |
+
*
|
30 |
+
* @since 1.2.14
|
31 |
+
* @return object initialized object of class.
|
32 |
+
*/
|
33 |
+
public static function get_instance() {
|
34 |
+
|
35 |
+
if ( ! isset( self::$instance ) ) {
|
36 |
+
self::$instance = new self;
|
37 |
+
}
|
38 |
+
return self::$instance;
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Constructor
|
43 |
+
*
|
44 |
+
* @since 1.2.14
|
45 |
+
*/
|
46 |
+
public function __construct() {}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Import
|
50 |
+
*
|
51 |
+
* @since 1.2.14
|
52 |
+
* @return void
|
53 |
+
*/
|
54 |
+
public function import() {
|
55 |
+
|
56 |
+
Astra_Sites_Importer_Log::add( '---- Processing WordPress Posts / Pages - for "Brizy" ----' );
|
57 |
+
if ( ! is_callable( 'Brizy_Editor_Storage_Common::instance' ) ) {
|
58 |
+
return;
|
59 |
+
}
|
60 |
+
|
61 |
+
$post_types = Brizy_Editor_Storage_Common::instance()->get( 'post-types' );
|
62 |
+
if ( empty( $post_types ) && ! is_array( $post_types ) ) {
|
63 |
+
return;
|
64 |
+
}
|
65 |
+
|
66 |
+
$post_ids = Astra_Sites_Batch_Processing::get_pages( $post_types );
|
67 |
+
if ( empty( $post_ids ) && ! is_array( $post_ids ) ) {
|
68 |
+
return;
|
69 |
+
}
|
70 |
+
|
71 |
+
foreach ( $post_ids as $post_id ) {
|
72 |
+
$is_brizy_post = get_post_meta( $post_id, 'brizy_post_uid', true );
|
73 |
+
if ( $is_brizy_post ) {
|
74 |
+
$this->import_single_post( $post_id );
|
75 |
+
}
|
76 |
+
}
|
77 |
+
}
|
78 |
+
|
79 |
+
/**
|
80 |
+
* Update post meta.
|
81 |
+
*
|
82 |
+
* @param integer $post_id Post ID.
|
83 |
+
* @return void
|
84 |
+
*/
|
85 |
+
public function import_single_post( $post_id = 0 ) {
|
86 |
+
|
87 |
+
$ids_mapping = get_option( 'astra_sites_wpforms_ids_mapping', array() );
|
88 |
+
|
89 |
+
// Empty mapping? Then return.
|
90 |
+
if ( empty( $ids_mapping ) ) {
|
91 |
+
return;
|
92 |
+
}
|
93 |
+
|
94 |
+
$json_value = null;
|
95 |
+
|
96 |
+
$post = Brizy_Editor_Post::get( (int) $post_id );
|
97 |
+
$data = $post->storage()->get( Brizy_Editor_Post::BRIZY_POST, false );
|
98 |
+
|
99 |
+
// Decode current data.
|
100 |
+
$json_value = base64_decode( $data['editor_data'] );
|
101 |
+
|
102 |
+
// Update WPForm IDs.
|
103 |
+
foreach ( $ids_mapping as $old_id => $new_id ) {
|
104 |
+
$json_value = str_replace( '[wpforms id=\"' . $old_id, '[wpforms id=\"' . $new_id, $json_value );
|
105 |
+
}
|
106 |
+
|
107 |
+
// Encode modified data.
|
108 |
+
$data['editor_data'] = base64_encode( $json_value );
|
109 |
+
|
110 |
+
$post->set_editor_data( $json_value );
|
111 |
+
|
112 |
+
$post->storage()->set( Brizy_Editor_Post::BRIZY_POST, $data );
|
113 |
+
|
114 |
+
$post->compile_page();
|
115 |
+
$post->save();
|
116 |
+
}
|
117 |
+
|
118 |
+
}
|
119 |
+
|
120 |
+
/**
|
121 |
+
* Kicking this off by calling 'get_instance()' method
|
122 |
+
*/
|
123 |
+
Astra_Sites_Batch_Processing_Brizy::get_instance();
|
124 |
+
|
125 |
+
endif;
|
inc/importers/batch-processing/class-astra-sites-batch-processing-gutenberg.php
CHANGED
@@ -1,165 +1,165 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Batch Processing
|
4 |
-
*
|
5 |
-
* @package Astra Sites
|
6 |
-
* @since 1.2.14
|
7 |
-
*/
|
8 |
-
|
9 |
-
if ( ! class_exists( 'Astra_Sites_Batch_Processing_Gutenberg' ) ) :
|
10 |
-
|
11 |
-
/**
|
12 |
-
* Astra Sites Batch Processing Brizy
|
13 |
-
*
|
14 |
-
* @since 1.2.14
|
15 |
-
*/
|
16 |
-
class Astra_Sites_Batch_Processing_Gutenberg {
|
17 |
-
|
18 |
-
/**
|
19 |
-
* Instance
|
20 |
-
*
|
21 |
-
* @since 1.2.14
|
22 |
-
* @access private
|
23 |
-
* @var object Class object.
|
24 |
-
*/
|
25 |
-
private static $instance;
|
26 |
-
|
27 |
-
/**
|
28 |
-
* Initiator
|
29 |
-
*
|
30 |
-
* @since 1.2.14
|
31 |
-
* @return object initialized object of class.
|
32 |
-
*/
|
33 |
-
public static function get_instance() {
|
34 |
-
|
35 |
-
if ( ! isset( self::$instance ) ) {
|
36 |
-
self::$instance = new self;
|
37 |
-
}
|
38 |
-
return self::$instance;
|
39 |
-
}
|
40 |
-
|
41 |
-
/**
|
42 |
-
* Constructor
|
43 |
-
*
|
44 |
-
* @since 1.2.14
|
45 |
-
*/
|
46 |
-
public function __construct() {}
|
47 |
-
|
48 |
-
/**
|
49 |
-
* Allowed tags for the batch update process.
|
50 |
-
*
|
51 |
-
* @param array $allowedposttags Array of default allowable HTML tags.
|
52 |
-
* @param string|array $context The context for which to retrieve tags. Allowed values are 'post',
|
53 |
-
* 'strip', 'data', 'entities', or the name of a field filter such as
|
54 |
-
* 'pre_user_description'.
|
55 |
-
* @return array Array of allowed HTML tags and their allowed attributes.
|
56 |
-
*/
|
57 |
-
function allowed_tags_and_attributes( $allowedposttags, $context ) {
|
58 |
-
|
59 |
-
// Keep only for 'post' contenxt.
|
60 |
-
if ( 'post' === $context ) {
|
61 |
-
|
62 |
-
// <svg> tag and attributes.
|
63 |
-
$allowedposttags['svg'] = array(
|
64 |
-
'xmlns' => true,
|
65 |
-
'viewbox' => true,
|
66 |
-
);
|
67 |
-
|
68 |
-
// <path> tag and attributes.
|
69 |
-
$allowedposttags['path'] = array(
|
70 |
-
'd' => true,
|
71 |
-
);
|
72 |
-
}
|
73 |
-
|
74 |
-
return $allowedposttags;
|
75 |
-
}
|
76 |
-
|
77 |
-
/**
|
78 |
-
* Import
|
79 |
-
*
|
80 |
-
* @since 1.2.14
|
81 |
-
* @return void
|
82 |
-
*/
|
83 |
-
public function import() {
|
84 |
-
|
85 |
-
// Allow the SVG tags in batch update process.
|
86 |
-
add_filter( 'wp_kses_allowed_html', array( $this, 'allowed_tags_and_attributes' ), 10, 2 );
|
87 |
-
|
88 |
-
Astra_Sites_Importer_Log::add( '---- Processing WordPress Posts / Pages - for "Gutenberg" ----' );
|
89 |
-
|
90 |
-
$post_ids = Astra_Sites_Batch_Processing::get_pages( array( 'page' ) );
|
91 |
-
if ( empty( $post_ids ) && ! is_array( $post_ids ) ) {
|
92 |
-
return;
|
93 |
-
}
|
94 |
-
|
95 |
-
foreach ( $post_ids as $post_id ) {
|
96 |
-
$this->import_single_post( $post_id );
|
97 |
-
}
|
98 |
-
}
|
99 |
-
|
100 |
-
/**
|
101 |
-
* Update post meta.
|
102 |
-
*
|
103 |
-
* @param integer $post_id Post ID.
|
104 |
-
* @return void
|
105 |
-
*/
|
106 |
-
public function import_single_post( $post_id = 0 ) {
|
107 |
-
|
108 |
-
$ids_mapping = get_option( 'astra_sites_wpforms_ids_mapping', array() );
|
109 |
-
|
110 |
-
// Post content.
|
111 |
-
$content = get_post_field( 'post_content', $post_id );
|
112 |
-
|
113 |
-
if ( ! empty( $ids_mapping ) ) {
|
114 |
-
// Replace ID's.
|
115 |
-
foreach ( $ids_mapping as $old_id => $new_id ) {
|
116 |
-
$content = str_replace( '[wpforms id="' . $old_id, '[wpforms id="' . $new_id, $content );
|
117 |
-
}
|
118 |
-
}
|
119 |
-
|
120 |
-
// This replaces the category ID in UAG Post blocks.
|
121 |
-
$site_options = get_option( 'astra_sites_import_data', array() );
|
122 |
-
|
123 |
-
if ( isset( $site_options['astra-site-taxonomy-mapping'] ) ) {
|
124 |
-
|
125 |
-
$tax_mapping = $site_options['astra-site-taxonomy-mapping'];
|
126 |
-
|
127 |
-
if ( isset( $tax_mapping['post'] ) ) {
|
128 |
-
|
129 |
-
$catogory_mapping = ( isset( $tax_mapping['post']['category'] ) ) ? $tax_mapping['post']['category'] : array();
|
130 |
-
|
131 |
-
if ( is_array( $catogory_mapping ) ) {
|
132 |
-
|
133 |
-
foreach ( $catogory_mapping as $key => $value ) {
|
134 |
-
|
135 |
-
$this_site_term = get_term_by( 'slug', $value['slug'], 'category' );
|
136 |
-
$content = str_replace( '"categories":"' . $value['id'], '"categories":"' . $this_site_term->term_id, $content );
|
137 |
-
}
|
138 |
-
}
|
139 |
-
}
|
140 |
-
}
|
141 |
-
|
142 |
-
// # Tweak
|
143 |
-
// Gutenberg break block markup from render. Because the '&' is updated in database with '&' and it
|
144 |
-
// expects as 'u0026amp;'. So, Converted '&' with 'u0026amp;'.
|
145 |
-
//
|
146 |
-
// @todo This affect for normal page content too. Detect only Gutenberg pages and process only on it.
|
147 |
-
$content = str_replace( '&', "\u0026amp;", $content );
|
148 |
-
|
149 |
-
// Update content.
|
150 |
-
wp_update_post(
|
151 |
-
array(
|
152 |
-
'ID' => $post_id,
|
153 |
-
'post_content' => $content,
|
154 |
-
)
|
155 |
-
);
|
156 |
-
}
|
157 |
-
|
158 |
-
}
|
159 |
-
|
160 |
-
/**
|
161 |
-
* Kicking this off by calling 'get_instance()' method
|
162 |
-
*/
|
163 |
-
Astra_Sites_Batch_Processing_Gutenberg::get_instance();
|
164 |
-
|
165 |
-
endif;
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Batch Processing
|
4 |
+
*
|
5 |
+
* @package Astra Sites
|
6 |
+
* @since 1.2.14
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! class_exists( 'Astra_Sites_Batch_Processing_Gutenberg' ) ) :
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Astra Sites Batch Processing Brizy
|
13 |
+
*
|
14 |
+
* @since 1.2.14
|
15 |
+
*/
|
16 |
+
class Astra_Sites_Batch_Processing_Gutenberg {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Instance
|
20 |
+
*
|
21 |
+
* @since 1.2.14
|
22 |
+
* @access private
|
23 |
+
* @var object Class object.
|
24 |
+
*/
|
25 |
+
private static $instance;
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Initiator
|
29 |
+
*
|
30 |
+
* @since 1.2.14
|
31 |
+
* @return object initialized object of class.
|
32 |
+
*/
|
33 |
+
public static function get_instance() {
|
34 |
+
|
35 |
+
if ( ! isset( self::$instance ) ) {
|
36 |
+
self::$instance = new self;
|
37 |
+
}
|
38 |
+
return self::$instance;
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Constructor
|
43 |
+
*
|
44 |
+
* @since 1.2.14
|
45 |
+
*/
|
46 |
+
public function __construct() {}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Allowed tags for the batch update process.
|
50 |
+
*
|
51 |
+
* @param array $allowedposttags Array of default allowable HTML tags.
|
52 |
+
* @param string|array $context The context for which to retrieve tags. Allowed values are 'post',
|
53 |
+
* 'strip', 'data', 'entities', or the name of a field filter such as
|
54 |
+
* 'pre_user_description'.
|
55 |
+
* @return array Array of allowed HTML tags and their allowed attributes.
|
56 |
+
*/
|
57 |
+
function allowed_tags_and_attributes( $allowedposttags, $context ) {
|
58 |
+
|
59 |
+
// Keep only for 'post' contenxt.
|
60 |
+
if ( 'post' === $context ) {
|
61 |
+
|
62 |
+
// <svg> tag and attributes.
|
63 |
+
$allowedposttags['svg'] = array(
|
64 |
+
'xmlns' => true,
|
65 |
+
'viewbox' => true,
|
66 |
+
);
|
67 |
+
|
68 |
+
// <path> tag and attributes.
|
69 |
+
$allowedposttags['path'] = array(
|
70 |
+
'd' => true,
|
71 |
+
);
|
72 |
+
}
|
73 |
+
|
74 |
+
return $allowedposttags;
|
75 |
+
}
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Import
|
79 |
+
*
|
80 |
+
* @since 1.2.14
|
81 |
+
* @return void
|
82 |
+
*/
|
83 |
+
public function import() {
|
84 |
+
|
85 |
+
// Allow the SVG tags in batch update process.
|
86 |
+
add_filter( 'wp_kses_allowed_html', array( $this, 'allowed_tags_and_attributes' ), 10, 2 );
|
87 |
+
|
88 |
+
Astra_Sites_Importer_Log::add( '---- Processing WordPress Posts / Pages - for "Gutenberg" ----' );
|
89 |
+
|
90 |
+
$post_ids = Astra_Sites_Batch_Processing::get_pages( array( 'page' ) );
|
91 |
+
if ( empty( $post_ids ) && ! is_array( $post_ids ) ) {
|
92 |
+
return;
|
93 |
+
}
|
94 |
+
|
95 |
+
foreach ( $post_ids as $post_id ) {
|
96 |
+
$this->import_single_post( $post_id );
|
97 |
+
}
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Update post meta.
|
102 |
+
*
|
103 |
+
* @param integer $post_id Post ID.
|
104 |
+
* @return void
|
105 |
+
*/
|
106 |
+
public function import_single_post( $post_id = 0 ) {
|
107 |
+
|
108 |
+
$ids_mapping = get_option( 'astra_sites_wpforms_ids_mapping', array() );
|
109 |
+
|
110 |
+
// Post content.
|
111 |
+
$content = get_post_field( 'post_content', $post_id );
|
112 |
+
|
113 |
+
if ( ! empty( $ids_mapping ) ) {
|
114 |
+
// Replace ID's.
|
115 |
+
foreach ( $ids_mapping as $old_id => $new_id ) {
|
116 |
+
$content = str_replace( '[wpforms id="' . $old_id, '[wpforms id="' . $new_id, $content );
|
117 |
+
}
|
118 |
+
}
|
119 |
+
|
120 |
+
// This replaces the category ID in UAG Post blocks.
|
121 |
+
$site_options = get_option( 'astra_sites_import_data', array() );
|
122 |
+
|
123 |
+
if ( isset( $site_options['astra-site-taxonomy-mapping'] ) ) {
|
124 |
+
|
125 |
+
$tax_mapping = $site_options['astra-site-taxonomy-mapping'];
|
126 |
+
|
127 |
+
if ( isset( $tax_mapping['post'] ) ) {
|
128 |
+
|
129 |
+
$catogory_mapping = ( isset( $tax_mapping['post']['category'] ) ) ? $tax_mapping['post']['category'] : array();
|
130 |
+
|
131 |
+
if ( is_array( $catogory_mapping ) ) {
|
132 |
+
|
133 |
+
foreach ( $catogory_mapping as $key => $value ) {
|
134 |
+
|
135 |
+
$this_site_term = get_term_by( 'slug', $value['slug'], 'category' );
|
136 |
+
$content = str_replace( '"categories":"' . $value['id'], '"categories":"' . $this_site_term->term_id, $content );
|
137 |
+
}
|
138 |
+
}
|
139 |
+
}
|
140 |
+
}
|
141 |
+
|
142 |
+
// # Tweak
|
143 |
+
// Gutenberg break block markup from render. Because the '&' is updated in database with '&' and it
|
144 |
+
// expects as 'u0026amp;'. So, Converted '&' with 'u0026amp;'.
|
145 |
+
//
|
146 |
+
// @todo This affect for normal page content too. Detect only Gutenberg pages and process only on it.
|
147 |
+
$content = str_replace( '&', "\u0026amp;", $content );
|
148 |
+
|
149 |
+
// Update content.
|
150 |
+
wp_update_post(
|
151 |
+
array(
|
152 |
+
'ID' => $post_id,
|
153 |
+
'post_content' => $content,
|
154 |
+
)
|
155 |
+
);
|
156 |
+
}
|
157 |
+
|
158 |
+
}
|
159 |
+
|
160 |
+
/**
|
161 |
+
* Kicking this off by calling 'get_instance()' method
|
162 |
+
*/
|
163 |
+
Astra_Sites_Batch_Processing_Gutenberg::get_instance();
|
164 |
+
|
165 |
+
endif;
|
inc/importers/batch-processing/helpers/class-astra-sites-image-importer.php
CHANGED
@@ -1,243 +1,243 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Image Importer
|
4 |
-
*
|
5 |
-
* => How to use?
|
6 |
-
*
|
7 |
-
* $image = array(
|
8 |
-
* 'url' => '<image-url>',
|
9 |
-
* 'id' => '<image-id>',
|
10 |
-
* );
|
11 |
-
*
|
12 |
-
* $downloaded_image = Astra_Sites_Image_Importer::get_instance()->import( $image );
|
13 |
-
*
|
14 |
-
* @package Astra Sites
|
15 |
-
* @since 1.0.14
|
16 |
-
*/
|
17 |
-
|
18 |
-
if ( ! class_exists( 'Astra_Sites_Image_Importer' ) ) :
|
19 |
-
|
20 |
-
/**
|
21 |
-
* Astra Sites Image Importer
|
22 |
-
*
|
23 |
-
* @since 1.0.14
|
24 |
-
*/
|
25 |
-
class Astra_Sites_Image_Importer {
|
26 |
-
|
27 |
-
/**
|
28 |
-
* Instance
|
29 |
-
*
|
30 |
-
* @since 1.0.14
|
31 |
-
* @var object Class object.
|
32 |
-
* @access private
|
33 |
-
*/
|
34 |
-
private static $instance;
|
35 |
-
|
36 |
-
/**
|
37 |
-
* Images IDs
|
38 |
-
*
|
39 |
-
* @var array The Array of already image IDs.
|
40 |
-
* @since 1.0.14
|
41 |
-
*/
|
42 |
-
private $already_imported_ids = array();
|
43 |
-
|
44 |
-
/**
|
45 |
-
* Initiator
|
46 |
-
*
|
47 |
-
* @since 1.0.14
|
48 |
-
* @return object initialized object of class.
|
49 |
-
*/
|
50 |
-
public static function get_instance() {
|
51 |
-
if ( ! isset( self::$instance ) ) {
|
52 |
-
self::$instance = new self;
|
53 |
-
}
|
54 |
-
return self::$instance;
|
55 |
-
}
|
56 |
-
|
57 |
-
/**
|
58 |
-
* Constructor
|
59 |
-
*
|
60 |
-
* @since 1.0.14
|
61 |
-
*/
|
62 |
-
public function __construct() {
|
63 |
-
|
64 |
-
if ( ! function_exists( 'WP_Filesystem' ) ) {
|
65 |
-
require_once ABSPATH . 'wp-admin/includes/file.php';
|
66 |
-
}
|
67 |
-
|
68 |
-
WP_Filesystem();
|
69 |
-
}
|
70 |
-
|
71 |
-
/**
|
72 |
-
* Process Image Download
|
73 |
-
*
|
74 |
-
* @since 1.0.14
|
75 |
-
* @param array $attachments Attachment array.
|
76 |
-
* @return array Attachment array.
|
77 |
-
*/
|
78 |
-
public function process( $attachments ) {
|
79 |
-
|
80 |
-
$downloaded_images = array();
|
81 |
-
|
82 |
-
foreach ( $attachments as $key => $attachment ) {
|
83 |
-
$downloaded_images[] = $this->import( $attachment );
|
84 |
-
}
|
85 |
-
|
86 |
-
return $downloaded_images;
|
87 |
-
}
|
88 |
-
|
89 |
-
/**
|
90 |
-
* Get Hash Image.
|
91 |
-
*
|
92 |
-
* @since 1.0.14
|
93 |
-
* @param string $attachment_url Attachment URL.
|
94 |
-
* @return string Hash string.
|
95 |
-
*/
|
96 |
-
private function get_hash_image( $attachment_url ) {
|
97 |
-
return sha1( $attachment_url );
|
98 |
-
}
|
99 |
-
|
100 |
-
/**
|
101 |
-
* Get Saved Image.
|
102 |
-
*
|
103 |
-
* @since 1.0.14
|
104 |
-
* @param string $attachment Attachment Data.
|
105 |
-
* @return string Hash string.
|
106 |
-
*/
|
107 |
-
private function get_saved_image( $attachment ) {
|
108 |
-
|
109 |
-
if ( apply_filters( 'astra_sites_image_importer_skip_image', false, $attachment ) ) {
|
110 |
-
Astra_Sites_Importer_Log::add( 'BATCH - SKIP Image - {from filter} - ' . $attachment['url'] . ' - Filter name `astra_sites_image_importer_skip_image`.' );
|
111 |
-
return $attachment;
|
112 |
-
}
|
113 |
-
|
114 |
-
global $wpdb;
|
115 |
-
|
116 |
-
// Already imported? Then return!
|
117 |
-
if ( isset( $this->already_imported_ids[ $attachment['id'] ] ) ) {
|
118 |
-
Astra_Sites_Importer_Log::add( 'BATCH - SKIP Image {already imported from batch process} - ' . $attachment['url'] . ' - already imported.' );
|
119 |
-
return $this->already_imported_ids[ $attachment['id'] ];
|
120 |
-
}
|
121 |
-
|
122 |
-
// 1. Is already imported in Batch Import Process?
|
123 |
-
$post_id = $wpdb->get_var(
|
124 |
-
$wpdb->prepare(
|
125 |
-
'SELECT `post_id` FROM `' . $wpdb->postmeta . '`
|
126 |
-
WHERE `meta_key` = \'_astra_sites_image_hash\'
|
127 |
-
AND `meta_value` = %s
|
128 |
-
;',
|
129 |
-
$this->get_hash_image( $attachment['url'] )
|
130 |
-
)
|
131 |
-
);
|
132 |
-
|
133 |
-
// 2. Is image already imported though XML?
|
134 |
-
if ( empty( $post_id ) ) {
|
135 |
-
|
136 |
-
// Get file name without extension.
|
137 |
-
// To check it exist in attachment.
|
138 |
-
$filename = basename( $attachment['url'] );
|
139 |
-
|
140 |
-
$post_id = $wpdb->get_var(
|
141 |
-
$wpdb->prepare(
|
142 |
-
"SELECT post_id FROM {$wpdb->postmeta}
|
143 |
-
WHERE meta_key = '_wp_attached_file'
|
144 |
-
AND meta_value LIKE %s",
|
145 |
-
'%' . $filename . '%'
|
146 |
-
)
|
147 |
-
);
|
148 |
-
|
149 |
-
Astra_Sites_Importer_Log::add( 'BATCH - SKIP Image {already imported from xml} - ' . $attachment['url'] );
|
150 |
-
}
|
151 |
-
|
152 |
-
if ( $post_id ) {
|
153 |
-
$new_attachment = array(
|
154 |
-
'id' => $post_id,
|
155 |
-
'url' => wp_get_attachment_url( $post_id ),
|
156 |
-
);
|
157 |
-
$this->already_imported_ids[ $attachment['id'] ] = $new_attachment;
|
158 |
-
|
159 |
-
return $new_attachment;
|
160 |
-
}
|
161 |
-
|
162 |
-
return false;
|
163 |
-
}
|
164 |
-
|
165 |
-
/**
|
166 |
-
* Import Image
|
167 |
-
*
|
168 |
-
* @since 1.0.14
|
169 |
-
* @param array $attachment Attachment array.
|
170 |
-
* @return array Attachment array.
|
171 |
-
*/
|
172 |
-
public function import( $attachment ) {
|
173 |
-
|
174 |
-
$saved_image = $this->get_saved_image( $attachment );
|
175 |
-
if ( $saved_image ) {
|
176 |
-
return $saved_image;
|
177 |
-
}
|
178 |
-
|
179 |
-
$file_content = wp_remote_retrieve_body(
|
180 |
-
wp_safe_remote_get(
|
181 |
-
$attachment['url'],
|
182 |
-
array(
|
183 |
-
'timeout' => '60',
|
184 |
-
'sslverify' => false,
|
185 |
-
)
|
186 |
-
)
|
187 |
-
);
|
188 |
-
|
189 |
-
// Empty file content?
|
190 |
-
if ( empty( $file_content ) ) {
|
191 |
-
Astra_Sites_Importer_Log::add( 'BATCH - FAIL Image {Error: Failed wp_remote_retrieve_body} - ' . $attachment['url'] );
|
192 |
-
return $attachment;
|
193 |
-
}
|
194 |
-
|
195 |
-
// Extract the file name and extension from the URL.
|
196 |
-
$filename = basename( $attachment['url'] );
|
197 |
-
|
198 |
-
$upload = wp_upload_bits(
|
199 |
-
$filename,
|
200 |
-
null,
|
201 |
-
$file_content
|
202 |
-
);
|
203 |
-
|
204 |
-
$post = array(
|
205 |
-
'post_title' => $filename,
|
206 |
-
'guid' => $upload['url'],
|
207 |
-
);
|
208 |
-
|
209 |
-
$info = wp_check_filetype( $upload['file'] );
|
210 |
-
if ( $info ) {
|
211 |
-
$post['post_mime_type'] = $info['type'];
|
212 |
-
} else {
|
213 |
-
// For now just return the origin attachment.
|
214 |
-
return $attachment;
|
215 |
-
}
|
216 |
-
|
217 |
-
$post_id = wp_insert_attachment( $post, $upload['file'] );
|
218 |
-
wp_update_attachment_metadata(
|
219 |
-
$post_id,
|
220 |
-
wp_generate_attachment_metadata( $post_id, $upload['file'] )
|
221 |
-
);
|
222 |
-
update_post_meta( $post_id, '_astra_sites_image_hash', $this->get_hash_image( $attachment['url'] ) );
|
223 |
-
|
224 |
-
$new_attachment = array(
|
225 |
-
'id' => $post_id,
|
226 |
-
'url' => $upload['url'],
|
227 |
-
);
|
228 |
-
|
229 |
-
Astra_Sites_Importer_Log::add( 'BATCH - SUCCESS Image {Imported} - ' . $new_attachment['url'] );
|
230 |
-
|
231 |
-
$this->already_imported_ids[ $attachment['id'] ] = $new_attachment;
|
232 |
-
|
233 |
-
return $new_attachment;
|
234 |
-
}
|
235 |
-
|
236 |
-
}
|
237 |
-
|
238 |
-
/**
|
239 |
-
* Kicking this off by calling 'get_instance()' method
|
240 |
-
*/
|
241 |
-
Astra_Sites_Image_Importer::get_instance();
|
242 |
-
|
243 |
-
endif;
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Image Importer
|
4 |
+
*
|
5 |
+
* => How to use?
|
6 |
+
*
|
7 |
+
* $image = array(
|
8 |
+
* 'url' => '<image-url>',
|
9 |
+
* 'id' => '<image-id>',
|
10 |
+
* );
|
11 |
+
*
|
12 |
+
* $downloaded_image = Astra_Sites_Image_Importer::get_instance()->import( $image );
|
13 |
+
*
|
14 |
+
* @package Astra Sites
|
15 |
+
* @since 1.0.14
|
16 |
+
*/
|
17 |
+
|
18 |
+
if ( ! class_exists( 'Astra_Sites_Image_Importer' ) ) :
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Astra Sites Image Importer
|
22 |
+
*
|
23 |
+
* @since 1.0.14
|
24 |
+
*/
|
25 |
+
class Astra_Sites_Image_Importer {
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Instance
|
29 |
+
*
|
30 |
+
* @since 1.0.14
|
31 |
+
* @var object Class object.
|
32 |
+
* @access private
|
33 |
+
*/
|
34 |
+
private static $instance;
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Images IDs
|
38 |
+
*
|
39 |
+
* @var array The Array of already image IDs.
|
40 |
+
* @since 1.0.14
|
41 |
+
*/
|
42 |
+
private $already_imported_ids = array();
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Initiator
|
46 |
+
*
|
47 |
+
* @since 1.0.14
|
48 |
+
* @return object initialized object of class.
|
49 |
+
*/
|
50 |
+
public static function get_instance() {
|
51 |
+
if ( ! isset( self::$instance ) ) {
|
52 |
+
self::$instance = new self;
|
53 |
+
}
|
54 |
+
return self::$instance;
|
55 |
+
}
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Constructor
|
59 |
+
*
|
60 |
+
* @since 1.0.14
|
61 |
+
*/
|
62 |
+
public function __construct() {
|
63 |
+
|
64 |
+
if ( ! function_exists( 'WP_Filesystem' ) ) {
|
65 |
+
require_once ABSPATH . 'wp-admin/includes/file.php';
|
66 |
+
}
|
67 |
+
|
68 |
+
WP_Filesystem();
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Process Image Download
|
73 |
+
*
|
74 |
+
* @since 1.0.14
|
75 |
+
* @param array $attachments Attachment array.
|
76 |
+
* @return array Attachment array.
|
77 |
+
*/
|
78 |
+
public function process( $attachments ) {
|
79 |
+
|
80 |
+
$downloaded_images = array();
|
81 |
+
|
82 |
+
foreach ( $attachments as $key => $attachment ) {
|
83 |
+
$downloaded_images[] = $this->import( $attachment );
|
84 |
+
}
|
85 |
+
|
86 |
+
return $downloaded_images;
|
87 |
+
}
|
88 |
+
|
89 |
+
/**
|
90 |
+
* Get Hash Image.
|
91 |
+
*
|
92 |
+
* @since 1.0.14
|
93 |
+
* @param string $attachment_url Attachment URL.
|
94 |
+
* @return string Hash string.
|
95 |
+
*/
|
96 |
+
private function get_hash_image( $attachment_url ) {
|
97 |
+
return sha1( $attachment_url );
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Get Saved Image.
|
102 |
+
*
|
103 |
+
* @since 1.0.14
|
104 |
+
* @param string $attachment Attachment Data.
|
105 |
+
* @return string Hash string.
|
106 |
+
*/
|
107 |
+
private function get_saved_image( $attachment ) {
|
108 |
+
|
109 |
+
if ( apply_filters( 'astra_sites_image_importer_skip_image', false, $attachment ) ) {
|
110 |
+
Astra_Sites_Importer_Log::add( 'BATCH - SKIP Image - {from filter} - ' . $attachment['url'] . ' - Filter name `astra_sites_image_importer_skip_image`.' );
|
111 |
+
return $attachment;
|
112 |
+
}
|
113 |
+
|
114 |
+
global $wpdb;
|
115 |
+
|
116 |
+
// Already imported? Then return!
|
117 |
+
if ( isset( $this->already_imported_ids[ $attachment['id'] ] ) ) {
|
118 |
+
Astra_Sites_Importer_Log::add( 'BATCH - SKIP Image {already imported from batch process} - ' . $attachment['url'] . ' - already imported.' );
|
119 |
+
return $this->already_imported_ids[ $attachment['id'] ];
|
120 |
+
}
|
121 |
+
|
122 |
+
// 1. Is already imported in Batch Import Process?
|
123 |
+
$post_id = $wpdb->get_var(
|
124 |
+
$wpdb->prepare(
|
125 |
+
'SELECT `post_id` FROM `' . $wpdb->postmeta . '`
|
126 |
+
WHERE `meta_key` = \'_astra_sites_image_hash\'
|
127 |
+
AND `meta_value` = %s
|
128 |
+
;',
|
129 |
+
$this->get_hash_image( $attachment['url'] )
|
130 |
+
)
|
131 |
+
);
|
132 |
+
|
133 |
+
// 2. Is image already imported though XML?
|
134 |
+
if ( empty( $post_id ) ) {
|
135 |
+
|
136 |
+
// Get file name without extension.
|
137 |
+
// To check it exist in attachment.
|
138 |
+
$filename = basename( $attachment['url'] );
|
139 |
+
|
140 |
+
$post_id = $wpdb->get_var(
|
141 |
+
$wpdb->prepare(
|
142 |
+
"SELECT post_id FROM {$wpdb->postmeta}
|
143 |
+
WHERE meta_key = '_wp_attached_file'
|
144 |
+
AND meta_value LIKE %s",
|
145 |
+
'%' . $filename . '%'
|
146 |
+
)
|
147 |
+
);
|
148 |
+
|
149 |
+
Astra_Sites_Importer_Log::add( 'BATCH - SKIP Image {already imported from xml} - ' . $attachment['url'] );
|
150 |
+
}
|
151 |
+
|
152 |
+
if ( $post_id ) {
|
153 |
+
$new_attachment = array(
|
154 |
+
'id' => $post_id,
|
155 |
+
'url' => wp_get_attachment_url( $post_id ),
|
156 |
+
);
|
157 |
+
$this->already_imported_ids[ $attachment['id'] ] = $new_attachment;
|
158 |
+
|
159 |
+
return $new_attachment;
|
160 |
+
}
|
161 |
+
|
162 |
+
return false;
|
163 |
+
}
|
164 |
+
|
165 |
+
/**
|
166 |
+
* Import Image
|
167 |
+
*
|
168 |
+
* @since 1.0.14
|
169 |
+
* @param array $attachment Attachment array.
|
170 |
+
* @return array Attachment array.
|
171 |
+
*/
|
172 |
+
public function import( $attachment ) {
|
173 |
+
|
174 |
+
$saved_image = $this->get_saved_image( $attachment );
|
175 |
+
if ( $saved_image ) {
|
176 |
+
return $saved_image;
|
177 |
+
}
|
178 |
+
|
179 |
+
$file_content = wp_remote_retrieve_body(
|
180 |
+
wp_safe_remote_get(
|
181 |
+
$attachment['url'],
|
182 |
+
array(
|
183 |
+
'timeout' => '60',
|
184 |
+
'sslverify' => false,
|
185 |
+
)
|
186 |
+
)
|
187 |
+
);
|
188 |
+
|
189 |
+
// Empty file content?
|
190 |
+
if ( empty( $file_content ) ) {
|
191 |
+
Astra_Sites_Importer_Log::add( 'BATCH - FAIL Image {Error: Failed wp_remote_retrieve_body} - ' . $attachment['url'] );
|
192 |
+
return $attachment;
|
193 |
+
}
|
194 |
+
|
195 |
+
// Extract the file name and extension from the URL.
|
196 |
+
$filename = basename( $attachment['url'] );
|
197 |
+
|
198 |
+
$upload = wp_upload_bits(
|
199 |
+
$filename,
|
200 |
+
null,
|
201 |
+
$file_content
|
202 |
+
);
|
203 |
+
|
204 |
+
$post = array(
|
205 |
+
'post_title' => $filename,
|
206 |
+
'guid' => $upload['url'],
|
207 |
+
);
|
208 |
+
|
209 |
+
$info = wp_check_filetype( $upload['file'] );
|
210 |
+
if ( $info ) {
|
211 |
+
$post['post_mime_type'] = $info['type'];
|
212 |
+
} else {
|
213 |
+
// For now just return the origin attachment.
|
214 |
+
return $attachment;
|
215 |
+
}
|
216 |
+
|
217 |
+
$post_id = wp_insert_attachment( $post, $upload['file'] );
|
218 |
+
wp_update_attachment_metadata(
|
219 |
+
$post_id,
|
220 |
+
wp_generate_attachment_metadata( $post_id, $upload['file'] )
|
221 |
+
);
|
222 |
+
update_post_meta( $post_id, '_astra_sites_image_hash', $this->get_hash_image( $attachment['url'] ) );
|
223 |
+
|
224 |
+
$new_attachment = array(
|
225 |
+
'id' => $post_id,
|
226 |
+
'url' => $upload['url'],
|
227 |
+
);
|
228 |
+
|
229 |
+
Astra_Sites_Importer_Log::add( 'BATCH - SUCCESS Image {Imported} - ' . $new_attachment['url'] );
|
230 |
+
|
231 |
+
$this->already_imported_ids[ $attachment['id'] ] = $new_attachment;
|
232 |
+
|
233 |
+
return $new_attachment;
|
234 |
+
}
|
235 |
+
|
236 |
+
}
|
237 |
+
|
238 |
+
/**
|
239 |
+
* Kicking this off by calling 'get_instance()' method
|
240 |
+
*/
|
241 |
+
Astra_Sites_Image_Importer::get_instance();
|
242 |
+
|
243 |
+
endif;
|
inc/importers/wxr-importer/class-astra-wxr-importer.php
CHANGED
@@ -1,446 +1,446 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Class Astra WXR Importer
|
4 |
-
*
|
5 |
-
* @since 1.0.0
|
6 |
-
* @package Astra Addon
|
7 |
-
*/
|
8 |
-
|
9 |
-
defined( 'ABSPATH' ) or exit;
|
10 |
-
|
11 |
-
/**
|
12 |
-
* Class Astra WXR Importer
|
13 |
-
*
|
14 |
-
* @since 1.0.0
|
15 |
-
*/
|
16 |
-
class Astra_WXR_Importer {
|
17 |
-
|
18 |
-
/**
|
19 |
-
* Instance of Astra_WXR_Importer
|
20 |
-
*
|
21 |
-
* @since 1.0.0
|
22 |
-
* @var Astra_WXR_Importer
|
23 |
-
*/
|
24 |
-
private static $_instance = null;
|
25 |
-
|
26 |
-
/**
|
27 |
-
* Instantiate Astra_WXR_Importer
|
28 |
-
*
|
29 |
-
* @since 1.0.0
|
30 |
-
* @return (Object) Astra_WXR_Importer.
|
31 |
-
*/
|
32 |
-
public static function instance() {
|
33 |
-
if ( ! isset( self::$_instance ) ) {
|
34 |
-
self::$_instance = new self();
|
35 |
-
}
|
36 |
-
|
37 |
-
return self::$_instance;
|
38 |
-
}
|
39 |
-
|
40 |
-
/**
|
41 |
-
* Constructor.
|
42 |
-
*
|
43 |
-
* @since 1.0.0
|
44 |
-
*/
|
45 |
-
private function __construct() {
|
46 |
-
|
47 |
-
require_once ABSPATH . '/wp-admin/includes/class-wp-importer.php';
|
48 |
-
require_once ASTRA_SITES_DIR . 'inc/importers/wxr-importer/class-logger.php';
|
49 |
-
require_once ASTRA_SITES_DIR . 'inc/importers/wxr-importer/class-wp-importer-logger-serversentevents.php';
|
50 |
-
require_once ASTRA_SITES_DIR . 'inc/importers/wxr-importer/class-wxr-importer.php';
|
51 |
-
require_once ASTRA_SITES_DIR . 'inc/importers/wxr-importer/class-wxr-import-info.php';
|
52 |
-
|
53 |
-
add_filter( 'upload_mimes', array( $this, 'custom_upload_mimes' ) );
|
54 |
-
add_action( 'wp_ajax_astra-wxr-import', array( $this, 'sse_import' ) );
|
55 |
-
add_filter( 'wxr_importer.pre_process.user', '__return_null' );
|
56 |
-
add_filter( 'wxr_importer.pre_process.post', array( $this, 'gutenberg_content_fix' ), 10, 4 );
|
57 |
-
|
58 |
-
if ( version_compare( get_bloginfo( 'version' ), '5.1.0', '>=' ) ) {
|
59 |
-
add_filter( 'wp_check_filetype_and_ext', array( $this, 'real_mime_types_5_1_0' ), 10, 5 );
|
60 |
-
} else {
|
61 |
-
add_filter( 'wp_check_filetype_and_ext', array( $this, 'real_mime_types' ), 10, 4 );
|
62 |
-
}
|
63 |
-
|
64 |
-
}
|
65 |
-
|
66 |
-
/**
|
67 |
-
* Track Imported Post
|
68 |
-
*
|
69 |
-
* @param int $post_id Post ID.
|
70 |
-
* @return void
|
71 |
-
*/
|
72 |
-
function track_post( $post_id ) {
|
73 |
-
Astra_Sites_Importer_Log::add( 'Inserted - Post ' . $post_id . ' - ' . get_post_type( $post_id ) . ' - ' . get_the_title( $post_id ) );
|
74 |
-
update_post_meta( $post_id, '_astra_sites_imported_post', true );
|
75 |
-
}
|
76 |
-
|
77 |
-
/**
|
78 |
-
* Track Imported Term
|
79 |
-
*
|
80 |
-
* @param int $term_id Term ID.
|
81 |
-
* @return void
|
82 |
-
*/
|
83 |
-
function track_term( $term_id ) {
|
84 |
-
$term = get_term( $term_id );
|
85 |
-
if ( $term ) {
|
86 |
-
Astra_Sites_Importer_Log::add( 'Inserted - Term ' . $term_id . ' - ' . json_encode( $term ) );
|
87 |
-
}
|
88 |
-
update_term_meta( $term_id, '_astra_sites_imported_term', true );
|
89 |
-
}
|
90 |
-
|
91 |
-
/**
|
92 |
-
* Gutenberg Content Data Fix
|
93 |
-
*
|
94 |
-
* Gutenberg encode the page content. In import process the encoded characterless e.g. <, > are
|
95 |
-
* decoded into HTML tag and it break the Gutenberg render markup.
|
96 |
-
*
|
97 |
-
* Note: We have not check the post is created with Gutenberg or not. We have imported other sites
|
98 |
-
* and confirm that this works for every other page builders too.
|
99 |
-
*
|
100 |
-
* @since 1.2.12
|
101 |
-
*
|
102 |
-
* @param array $data Post data. (Return empty to skip.).
|
103 |
-
* @param array $meta Meta data.
|
104 |
-
* @param array $comments Comments on the post.
|
105 |
-
* @param array $terms Terms on the post.
|
106 |
-
*/
|
107 |
-
function gutenberg_content_fix( $data, $meta, $comments, $terms ) {
|
108 |
-
if ( isset( $data['post_content'] ) ) {
|
109 |
-
$data['post_content'] = wp_slash( $data['post_content'] );
|
110 |
-
}
|
111 |
-
return $data;
|
112 |
-
}
|
113 |
-
|
114 |
-
/**
|
115 |
-
* Different MIME type of different PHP version
|
116 |
-
*
|
117 |
-
* Filters the "real" file type of the given file.
|
118 |
-
*
|
119 |
-
* @since 1.2.9
|
120 |
-
*
|
121 |
-
* @param array $defaults File data array containing 'ext', 'type', and
|
122 |
-
* 'proper_filename' keys.
|
123 |
-
* @param string $file Full path to the file.
|
124 |
-
* @param string $filename The name of the file (may differ from $file due to
|
125 |
-
* $file being in a tmp directory).
|
126 |
-
* @param array $mimes Key is the file extension with value as the mime type.
|
127 |
-
* @param string $real_mime Real MIME type of the uploaded file.
|
128 |
-
*/
|
129 |
-
function real_mime_types_5_1_0( $defaults, $file, $filename, $mimes, $real_mime ) {
|
130 |
-
return $this->real_mimes( $defaults, $filename );
|
131 |
-
}
|
132 |
-
|
133 |
-
/**
|
134 |
-
* Different MIME type of different PHP version
|
135 |
-
*
|
136 |
-
* Filters the "real" file type of the given file.
|
137 |
-
*
|
138 |
-
* @since 1.2.9
|
139 |
-
*
|
140 |
-
* @param array $defaults File data array containing 'ext', 'type', and
|
141 |
-
* 'proper_filename' keys.
|
142 |
-
* @param string $file Full path to the file.
|
143 |
-
* @param string $filename The name of the file (may differ from $file due to
|
144 |
-
* $file being in a tmp directory).
|
145 |
-
* @param array $mimes Key is the file extension with value as the mime type.
|
146 |
-
*/
|
147 |
-
function real_mime_types( $defaults, $file, $filename, $mimes ) {
|
148 |
-
return $this->real_mimes( $defaults, $filename );
|
149 |
-
}
|
150 |
-
|
151 |
-
/**
|
152 |
-
* Real Mime Type
|
153 |
-
*
|
154 |
-
* @since 1.2.15
|
155 |
-
*
|
156 |
-
* @param array $defaults File data array containing 'ext', 'type', and
|
157 |
-
* 'proper_filename' keys.
|
158 |
-
* @param string $filename The name of the file (may differ from $file due to
|
159 |
-
* $file being in a tmp directory).
|
160 |
-
*/
|
161 |
-
function real_mimes( $defaults, $filename ) {
|
162 |
-
|
163 |
-
// Set EXT and real MIME type only for the file name `wxr.xml`.
|
164 |
-
if ( 'wxr.xml' === $filename ) {
|
165 |
-
$defaults['ext'] = 'xml';
|
166 |
-
$defaults['type'] = 'text/xml';
|
167 |
-
}
|
168 |
-
|
169 |
-
// Set EXT and real MIME type only for the file name `wpforms.json`.
|
170 |
-
if ( 'wpforms.json' === $filename ) {
|
171 |
-
$defaults['ext'] = 'json';
|
172 |
-
$defaults['type'] = 'text/plain';
|
173 |
-
}
|
174 |
-
|
175 |
-
return $defaults;
|
176 |
-
}
|
177 |
-
|
178 |
-
/**
|
179 |
-
* Constructor.
|
180 |
-
*
|
181 |
-
* @since 1.1.0
|
182 |
-
*/
|
183 |
-
function sse_import() {
|
184 |
-
|
185 |
-
// Start the event stream.
|
186 |
-
header( 'Content-Type: text/event-stream, charset=UTF-8' );
|
187 |
-
|
188 |
-
// Turn off PHP output compression.
|
189 |
-
$previous = error_reporting( error_reporting() ^ E_WARNING );
|
190 |
-
ini_set( 'output_buffering', 'off' );
|
191 |
-
ini_set( 'zlib.output_compression', false );
|
192 |
-
error_reporting( $previous );
|
193 |
-
|
194 |
-
if ( $GLOBALS['is_nginx'] ) {
|
195 |
-
// Setting this header instructs Nginx to disable fastcgi_buffering
|
196 |
-
// and disable gzip for this request.
|
197 |
-
header( 'X-Accel-Buffering: no' );
|
198 |
-
header( 'Content-Encoding: none' );
|
199 |
-
}
|
200 |
-
|
201 |
-
$xml_url = urldecode( $_REQUEST['xml_url'] );
|
202 |
-
if ( empty( $xml_url ) ) {
|
203 |
-
exit;
|
204 |
-
}
|
205 |
-
|
206 |
-
// 2KB padding for IE
|
207 |
-
echo ':' . str_repeat( ' ', 2048 ) . "\n\n";
|
208 |
-
|
209 |
-
// Time to run the import!
|
210 |
-
set_time_limit( 0 );
|
211 |
-
|
212 |
-
// Ensure we're not buffered.
|
213 |
-
wp_ob_end_flush_all();
|
214 |
-
flush();
|
215 |
-
|
216 |
-
// Are we allowed to create users?
|
217 |
-
add_filter( 'wxr_importer.pre_process.user', '__return_null' );
|
218 |
-
|
219 |
-
// Keep track of our progress.
|
220 |
-
add_action( 'wxr_importer.processed.post', array( $this, 'imported_post' ), 10, 2 );
|
221 |
-
add_action( 'wxr_importer.process_failed.post', array( $this, 'imported_post' ), 10, 2 );
|
222 |
-
add_action( 'wxr_importer.process_already_imported.post', array( $this, 'already_imported_post' ), 10, 2 );
|
223 |
-
add_action( 'wxr_importer.process_skipped.post', array( $this, 'already_imported_post' ), 10, 2 );
|
224 |
-
add_action( 'wxr_importer.processed.comment', array( $this, 'imported_comment' ) );
|
225 |
-
add_action( 'wxr_importer.process_already_imported.comment', array( $this, 'imported_comment' ) );
|
226 |
-
add_action( 'wxr_importer.processed.term', array( $this, 'imported_term' ) );
|
227 |
-
add_action( 'wxr_importer.process_failed.term', array( $this, 'imported_term' ) );
|
228 |
-
add_action( 'wxr_importer.process_already_imported.term', array( $this, 'imported_term' ) );
|
229 |
-
add_action( 'wxr_importer.processed.user', array( $this, 'imported_user' ) );
|
230 |
-
add_action( 'wxr_importer.process_failed.user', array( $this, 'imported_user' ) );
|
231 |
-
|
232 |
-
// Keep track of our progress.
|
233 |
-
add_action( 'wxr_importer.processed.post', array( $this, 'track_post' ) );
|
234 |
-
add_action( 'wxr_importer.processed.term', array( $this, 'track_term' ) );
|
235 |
-
|
236 |
-
// Flush once more.
|
237 |
-
flush();
|
238 |
-
|
239 |
-
$importer = $this->get_importer();
|
240 |
-
$response = $importer->import( $xml_url );
|
241 |
-
|
242 |
-
// Let the browser know we're done.
|
243 |
-
$complete = array(
|
244 |
-
'action' => 'complete',
|
245 |
-
'error' => false,
|
246 |
-
);
|
247 |
-
if ( is_wp_error( $response ) ) {
|
248 |
-
$complete['error'] = $response->get_error_message();
|
249 |
-
}
|
250 |
-
|
251 |
-
$this->emit_sse_message( $complete );
|
252 |
-
exit;
|
253 |
-
}
|
254 |
-
|
255 |
-
/**
|
256 |
-
* Add .xml files as supported format in the uploader.
|
257 |
-
*
|
258 |
-
* @since 1.1.5 Added SVG file support.
|
259 |
-
*
|
260 |
-
* @since 1.0.0
|
261 |
-
*
|
262 |
-
* @param array $mimes Already supported mime types.
|
263 |
-
*/
|
264 |
-
public function custom_upload_mimes( $mimes ) {
|
265 |
-
|
266 |
-
// Allow SVG files.
|
267 |
-
$mimes['svg'] = 'image/svg+xml';
|
268 |
-
$mimes['svgz'] = 'image/svg+xml';
|
269 |
-
|
270 |
-
// Allow XML files.
|
271 |
-
$mimes['xml'] = 'text/xml';
|
272 |
-
|
273 |
-
// Allow JSON files.
|
274 |
-
$mimes['json'] = 'application/json';
|
275 |
-
|
276 |
-
return $mimes;
|
277 |
-
}
|
278 |
-
|
279 |
-
/**
|
280 |
-
* Start the xml import.
|
281 |
-
*
|
282 |
-
* @since 1.0.0
|
283 |
-
*
|
284 |
-
* @param (String) $path Absolute path to the XML file.
|
285 |
-
*/
|
286 |
-
public function get_xml_data( $path ) {
|
287 |
-
|
288 |
-
$args = array(
|
289 |
-
'action' => 'astra-wxr-import',
|
290 |
-
'id' => '1',
|
291 |
-
'xml_url' => $path,
|
292 |
-
);
|
293 |
-
$url = add_query_arg( urlencode_deep( $args ), admin_url( 'admin-ajax.php' ) );
|
294 |
-
|
295 |
-
$data = $this->get_data( $path );
|
296 |
-
|
297 |
-
return array(
|
298 |
-
'count' => array(
|
299 |
-
'posts' => $data->post_count,
|
300 |
-
'media' => $data->media_count,
|
301 |
-
'users' => count( $data->users ),
|
302 |
-
'comments' => $data->comment_count,
|
303 |
-
'terms' => $data->term_count,
|
304 |
-
),
|
305 |
-
'url' => $url,
|
306 |
-
'strings' => array(
|
307 |
-
'complete' => __( 'Import complete!', 'astra-sites' ),
|
308 |
-
),
|
309 |
-
);
|
310 |
-
}
|
311 |
-
|
312 |
-
/**
|
313 |
-
* Get XML data.
|
314 |
-
*
|
315 |
-
* @since 1.1.0
|
316 |
-
* @param string $url Downloaded XML file absolute URL.
|
317 |
-
* @return array XML file data.
|
318 |
-
*/
|
319 |
-
function get_data( $url ) {
|
320 |
-
$importer = $this->get_importer();
|
321 |
-
$data = $importer->get_preliminary_information( $url );
|
322 |
-
if ( is_wp_error( $data ) ) {
|
323 |
-
return $data;
|
324 |
-
}
|
325 |
-
return $data;
|
326 |
-
}
|
327 |
-
|
328 |
-
/**
|
329 |
-
* Get Importer
|
330 |
-
*
|
331 |
-
* @since 1.1.0
|
332 |
-
* @return object Importer object.
|
333 |
-
*/
|
334 |
-
public function get_importer() {
|
335 |
-
$options = apply_filters(
|
336 |
-
'astra_sites_xml_import_options',
|
337 |
-
array(
|
338 |
-
'fetch_attachments' => true,
|
339 |
-
'default_author' => get_current_user_id(),
|
340 |
-
)
|
341 |
-
);
|
342 |
-
|
343 |
-
$importer = new WXR_Importer( $options );
|
344 |
-
$logger = new WP_Importer_Logger_ServerSentEvents();
|
345 |
-
|
346 |
-
$importer->set_logger( $logger );
|
347 |
-
return $importer;
|
348 |
-
}
|
349 |
-
|
350 |
-
/**
|
351 |
-
* Send message when a post has been imported.
|
352 |
-
*
|
353 |
-
* @since 1.1.0
|
354 |
-
* @param int $id Post ID.
|
355 |
-
* @param array $data Post data saved to the DB.
|
356 |
-
*/
|
357 |
-
public function imported_post( $id, $data ) {
|
358 |
-
$this->emit_sse_message(
|
359 |
-
array(
|
360 |
-
'action' => 'updateDelta',
|
361 |
-
'type' => ( 'attachment' === $data['post_type'] ) ? 'media' : 'posts',
|
362 |
-
'delta' => 1,
|
363 |
-
)
|
364 |
-
);
|
365 |
-
}
|
366 |
-
|
367 |
-
/**
|
368 |
-
* Send message when a post is marked as already imported.
|
369 |
-
*
|
370 |
-
* @since 1.1.0
|
371 |
-
* @param array $data Post data saved to the DB.
|
372 |
-
*/
|
373 |
-
public function already_imported_post( $data ) {
|
374 |
-
$this->emit_sse_message(
|
375 |
-
array(
|
376 |
-
'action' => 'updateDelta',
|
377 |
-
'type' => ( 'attachment' === $data['post_type'] ) ? 'media' : 'posts',
|
378 |
-
'delta' => 1,
|
379 |
-
)
|
380 |
-
);
|
381 |
-
}
|
382 |
-
|
383 |
-
/**
|
384 |
-
* Send message when a comment has been imported.
|
385 |
-
*
|
386 |
-
* @since 1.1.0
|
387 |
-
*/
|
388 |
-
public function imported_comment() {
|
389 |
-
$this->emit_sse_message(
|
390 |
-
array(
|
391 |
-
'action' => 'updateDelta',
|
392 |
-
'type' => 'comments',
|
393 |
-
'delta' => 1,
|
394 |
-
)
|
395 |
-
);
|
396 |
-
}
|
397 |
-
|
398 |
-
/**
|
399 |
-
* Send message when a term has been imported.
|
400 |
-
*
|
401 |
-
* @since 1.1.0
|
402 |
-
*/
|
403 |
-
public function imported_term() {
|
404 |
-
$this->emit_sse_message(
|
405 |
-
array(
|
406 |
-
'action' => 'updateDelta',
|
407 |
-
'type' => 'terms',
|
408 |
-
'delta' => 1,
|
409 |
-
)
|
410 |
-
);
|
411 |
-
}
|
412 |
-
|
413 |
-
/**
|
414 |
-
* Send message when a user has been imported.
|
415 |
-
*
|
416 |
-
* @since 1.1.0
|
417 |
-
*/
|
418 |
-
public function imported_user() {
|
419 |
-
$this->emit_sse_message(
|
420 |
-
array(
|
421 |
-
'action' => 'updateDelta',
|
422 |
-
'type' => 'users',
|
423 |
-
'delta' => 1,
|
424 |
-
)
|
425 |
-
);
|
426 |
-
}
|
427 |
-
|
428 |
-
/**
|
429 |
-
* Emit a Server-Sent Events message.
|
430 |
-
*
|
431 |
-
* @since 1.1.0
|
432 |
-
* @param mixed $data Data to be JSON-encoded and sent in the message.
|
433 |
-
*/
|
434 |
-
public function emit_sse_message( $data ) {
|
435 |
-
echo "event: message\n";
|
436 |
-
echo 'data: ' . wp_json_encode( $data ) . "\n\n";
|
437 |
-
|
438 |
-
// Extra padding.
|
439 |
-
echo ':' . str_repeat( ' ', 2048 ) . "\n\n";
|
440 |
-
|
441 |
-
flush();
|
442 |
-
}
|
443 |
-
|
444 |
-
}
|
445 |
-
|
446 |
-
Astra_WXR_Importer::instance();
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Class Astra WXR Importer
|
4 |
+
*
|
5 |
+
* @since 1.0.0
|
6 |
+
* @package Astra Addon
|
7 |
+
*/
|
8 |
+
|
9 |
+
defined( 'ABSPATH' ) or exit;
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Class Astra WXR Importer
|
13 |
+
*
|
14 |
+
* @since 1.0.0
|
15 |
+
*/
|
16 |
+
class Astra_WXR_Importer {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Instance of Astra_WXR_Importer
|
20 |
+
*
|
21 |
+
* @since 1.0.0
|
22 |
+
* @var Astra_WXR_Importer
|
23 |
+
*/
|
24 |
+
private static $_instance = null;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Instantiate Astra_WXR_Importer
|
28 |
+
*
|
29 |
+
* @since 1.0.0
|
30 |
+
* @return (Object) Astra_WXR_Importer.
|
31 |
+
*/
|
32 |
+
public static function instance() {
|
33 |
+
if ( ! isset( self::$_instance ) ) {
|
34 |
+
self::$_instance = new self();
|
35 |
+
}
|
36 |
+
|
37 |
+
return self::$_instance;
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Constructor.
|
42 |
+
*
|
43 |
+
* @since 1.0.0
|
44 |
+
*/
|
45 |
+
private function __construct() {
|
46 |
+
|
47 |
+
require_once ABSPATH . '/wp-admin/includes/class-wp-importer.php';
|
48 |
+
require_once ASTRA_SITES_DIR . 'inc/importers/wxr-importer/class-logger.php';
|
49 |
+
require_once ASTRA_SITES_DIR . 'inc/importers/wxr-importer/class-wp-importer-logger-serversentevents.php';
|
50 |
+
require_once ASTRA_SITES_DIR . 'inc/importers/wxr-importer/class-wxr-importer.php';
|
51 |
+
require_once ASTRA_SITES_DIR . 'inc/importers/wxr-importer/class-wxr-import-info.php';
|
52 |
+
|
53 |
+
add_filter( 'upload_mimes', array( $this, 'custom_upload_mimes' ) );
|
54 |
+
add_action( 'wp_ajax_astra-wxr-import', array( $this, 'sse_import' ) );
|
55 |
+
add_filter( 'wxr_importer.pre_process.user', '__return_null' );
|
56 |
+
add_filter( 'wxr_importer.pre_process.post', array( $this, 'gutenberg_content_fix' ), 10, 4 );
|
57 |
+
|
58 |
+
if ( version_compare( get_bloginfo( 'version' ), '5.1.0', '>=' ) ) {
|
59 |
+
add_filter( 'wp_check_filetype_and_ext', array( $this, 'real_mime_types_5_1_0' ), 10, 5 );
|
60 |
+
} else {
|
61 |
+
add_filter( 'wp_check_filetype_and_ext', array( $this, 'real_mime_types' ), 10, 4 );
|
62 |
+
}
|
63 |
+
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Track Imported Post
|
68 |
+
*
|
69 |
+
* @param int $post_id Post ID.
|
70 |
+
* @return void
|
71 |
+
*/
|
72 |
+
function track_post( $post_id ) {
|
73 |
+
Astra_Sites_Importer_Log::add( 'Inserted - Post ' . $post_id . ' - ' . get_post_type( $post_id ) . ' - ' . get_the_title( $post_id ) );
|
74 |
+
update_post_meta( $post_id, '_astra_sites_imported_post', true );
|
75 |
+
}
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Track Imported Term
|
79 |
+
*
|
80 |
+
* @param int $term_id Term ID.
|
81 |
+
* @return void
|
82 |
+
*/
|
83 |
+
function track_term( $term_id ) {
|
84 |
+
$term = get_term( $term_id );
|
85 |
+
if ( $term ) {
|
86 |
+
Astra_Sites_Importer_Log::add( 'Inserted - Term ' . $term_id . ' - ' . json_encode( $term ) );
|
87 |
+
}
|
88 |
+
update_term_meta( $term_id, '_astra_sites_imported_term', true );
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* Gutenberg Content Data Fix
|
93 |
+
*
|
94 |
+
* Gutenberg encode the page content. In import process the encoded characterless e.g. <, > are
|
95 |
+
* decoded into HTML tag and it break the Gutenberg render markup.
|
96 |
+
*
|
97 |
+
* Note: We have not check the post is created with Gutenberg or not. We have imported other sites
|
98 |
+
* and confirm that this works for every other page builders too.
|
99 |
+
*
|
100 |
+
* @since 1.2.12
|
101 |
+
*
|
102 |
+
* @param array $data Post data. (Return empty to skip.).
|
103 |
+
* @param array $meta Meta data.
|
104 |
+
* @param array $comments Comments on the post.
|
105 |
+
* @param array $terms Terms on the post.
|
106 |
+
*/
|
107 |
+
function gutenberg_content_fix( $data, $meta, $comments, $terms ) {
|
108 |
+
if ( isset( $data['post_content'] ) ) {
|
109 |
+
$data['post_content'] = wp_slash( $data['post_content'] );
|
110 |
+
}
|
111 |
+
return $data;
|
112 |
+
}
|
113 |
+
|
114 |
+
/**
|
115 |
+
* Different MIME type of different PHP version
|
116 |
+
*
|
117 |
+
* Filters the "real" file type of the given file.
|
118 |
+
*
|
119 |
+
* @since 1.2.9
|
120 |
+
*
|
121 |
+
* @param array $defaults File data array containing 'ext', 'type', and
|
122 |
+
* 'proper_filename' keys.
|
123 |
+
* @param string $file Full path to the file.
|
124 |
+
* @param string $filename The name of the file (may differ from $file due to
|
125 |
+
* $file being in a tmp directory).
|
126 |
+
* @param array $mimes Key is the file extension with value as the mime type.
|
127 |
+
* @param string $real_mime Real MIME type of the uploaded file.
|
128 |
+
*/
|
129 |
+
function real_mime_types_5_1_0( $defaults, $file, $filename, $mimes, $real_mime ) {
|
130 |
+
return $this->real_mimes( $defaults, $filename );
|
131 |
+
}
|
132 |
+
|
133 |
+
/**
|
134 |
+
* Different MIME type of different PHP version
|
135 |
+
*
|
136 |
+
* Filters the "real" file type of the given file.
|
137 |
+
*
|
138 |
+
* @since 1.2.9
|
139 |
+
*
|
140 |
+
* @param array $defaults File data array containing 'ext', 'type', and
|
141 |
+
* 'proper_filename' keys.
|
142 |
+
* @param string $file Full path to the file.
|
143 |
+
* @param string $filename The name of the file (may differ from $file due to
|
144 |
+
* $file being in a tmp directory).
|
145 |
+
* @param array $mimes Key is the file extension with value as the mime type.
|
146 |
+
*/
|
147 |
+
function real_mime_types( $defaults, $file, $filename, $mimes ) {
|
148 |
+
return $this->real_mimes( $defaults, $filename );
|
149 |
+
}
|
150 |
+
|
151 |
+
/**
|
152 |
+
* Real Mime Type
|
153 |
+
*
|
154 |
+
* @since 1.2.15
|
155 |
+
*
|
156 |
+
* @param array $defaults File data array containing 'ext', 'type', and
|
157 |
+
* 'proper_filename' keys.
|
158 |
+
* @param string $filename The name of the file (may differ from $file due to
|
159 |
+
* $file being in a tmp directory).
|
160 |
+
*/
|
161 |
+
function real_mimes( $defaults, $filename ) {
|
162 |
+
|
163 |
+
// Set EXT and real MIME type only for the file name `wxr.xml`.
|
164 |
+
if ( 'wxr.xml' === $filename ) {
|
165 |
+
$defaults['ext'] = 'xml';
|
166 |
+
$defaults['type'] = 'text/xml';
|
167 |
+
}
|
168 |
+
|
169 |
+
// Set EXT and real MIME type only for the file name `wpforms.json`.
|
170 |
+
if ( 'wpforms.json' === $filename ) {
|
171 |
+
$defaults['ext'] = 'json';
|
172 |
+
$defaults['type'] = 'text/plain';
|
173 |
+
}
|
174 |
+
|
175 |
+
return $defaults;
|
176 |
+
}
|
177 |
+
|
178 |
+
/**
|
179 |
+
* Constructor.
|
180 |
+
*
|
181 |
+
* @since 1.1.0
|
182 |
+
*/
|
183 |
+
function sse_import() {
|
184 |
+
|
185 |
+
// Start the event stream.
|
186 |
+
header( 'Content-Type: text/event-stream, charset=UTF-8' );
|
187 |
+
|
188 |
+
// Turn off PHP output compression.
|
189 |
+
$previous = error_reporting( error_reporting() ^ E_WARNING );
|
190 |
+
ini_set( 'output_buffering', 'off' );
|
191 |
+
ini_set( 'zlib.output_compression', false );
|
192 |
+
error_reporting( $previous );
|
193 |
+
|
194 |
+
if ( $GLOBALS['is_nginx'] ) {
|
195 |
+
// Setting this header instructs Nginx to disable fastcgi_buffering
|
196 |
+
// and disable gzip for this request.
|
197 |
+
header( 'X-Accel-Buffering: no' );
|
198 |
+
header( 'Content-Encoding: none' );
|
199 |
+
}
|
200 |
+
|
201 |
+
$xml_url = urldecode( $_REQUEST['xml_url'] );
|
202 |
+
if ( empty( $xml_url ) ) {
|
203 |
+
exit;
|
204 |
+
}
|
205 |
+
|
206 |
+
// 2KB padding for IE
|
207 |
+
echo ':' . str_repeat( ' ', 2048 ) . "\n\n";
|
208 |
+
|
209 |
+
// Time to run the import!
|
210 |
+
set_time_limit( 0 );
|
211 |
+
|
212 |
+
// Ensure we're not buffered.
|
213 |
+
wp_ob_end_flush_all();
|
214 |
+
flush();
|
215 |
+
|
216 |
+
// Are we allowed to create users?
|
217 |
+
add_filter( 'wxr_importer.pre_process.user', '__return_null' );
|
218 |
+
|
219 |
+
// Keep track of our progress.
|
220 |
+
add_action( 'wxr_importer.processed.post', array( $this, 'imported_post' ), 10, 2 );
|
221 |
+
add_action( 'wxr_importer.process_failed.post', array( $this, 'imported_post' ), 10, 2 );
|
222 |
+
add_action( 'wxr_importer.process_already_imported.post', array( $this, 'already_imported_post' ), 10, 2 );
|
223 |
+
add_action( 'wxr_importer.process_skipped.post', array( $this, 'already_imported_post' ), 10, 2 );
|
224 |
+
add_action( 'wxr_importer.processed.comment', array( $this, 'imported_comment' ) );
|
225 |
+
add_action( 'wxr_importer.process_already_imported.comment', array( $this, 'imported_comment' ) );
|
226 |
+
add_action( 'wxr_importer.processed.term', array( $this, 'imported_term' ) );
|
227 |
+
add_action( 'wxr_importer.process_failed.term', array( $this, 'imported_term' ) );
|
228 |
+
add_action( 'wxr_importer.process_already_imported.term', array( $this, 'imported_term' ) );
|
229 |
+
add_action( 'wxr_importer.processed.user', array( $this, 'imported_user' ) );
|
230 |
+
add_action( 'wxr_importer.process_failed.user', array( $this, 'imported_user' ) );
|
231 |
+
|
232 |
+
// Keep track of our progress.
|
233 |
+
add_action( 'wxr_importer.processed.post', array( $this, 'track_post' ) );
|
234 |
+
add_action( 'wxr_importer.processed.term', array( $this, 'track_term' ) );
|
235 |
+
|
236 |
+
// Flush once more.
|
237 |
+
flush();
|
238 |
+
|
239 |
+
$importer = $this->get_importer();
|
240 |
+
$response = $importer->import( $xml_url );
|
241 |
+
|
242 |
+
// Let the browser know we're done.
|
243 |
+
$complete = array(
|
244 |
+
'action' => 'complete',
|
245 |
+
'error' => false,
|
246 |
+
);
|
247 |
+
if ( is_wp_error( $response ) ) {
|
248 |
+
$complete['error'] = $response->get_error_message();
|
249 |
+
}
|
250 |
+
|
251 |
+
$this->emit_sse_message( $complete );
|
252 |
+
exit;
|
253 |
+
}
|
254 |
+
|
255 |
+
/**
|
256 |
+
* Add .xml files as supported format in the uploader.
|
257 |
+
*
|
258 |
+
* @since 1.1.5 Added SVG file support.
|
259 |
+
*
|
260 |
+
* @since 1.0.0
|
261 |
+
*
|
262 |
+
* @param array $mimes Already supported mime types.
|
263 |
+
*/
|
264 |
+
public function custom_upload_mimes( $mimes ) {
|
265 |
+
|
266 |
+
// Allow SVG files.
|
267 |
+
$mimes['svg'] = 'image/svg+xml';
|
268 |
+
$mimes['svgz'] = 'image/svg+xml';
|
269 |
+
|
270 |
+
// Allow XML files.
|
271 |
+
$mimes['xml'] = 'text/xml';
|
272 |
+
|
273 |
+
// Allow JSON files.
|
274 |
+
$mimes['json'] = 'application/json';
|
275 |
+
|
276 |
+
return $mimes;
|
277 |
+
}
|
278 |
+
|
279 |
+
/**
|
280 |
+
* Start the xml import.
|
281 |
+
*
|
282 |
+
* @since 1.0.0
|
283 |
+
*
|
284 |
+
* @param (String) $path Absolute path to the XML file.
|
285 |
+
*/
|
286 |
+
public function get_xml_data( $path ) {
|
287 |
+
|
288 |
+
$args = array(
|
289 |
+
'action' => 'astra-wxr-import',
|
290 |
+
'id' => '1',
|
291 |
+
'xml_url' => $path,
|
292 |
+
);
|
293 |
+
$url = add_query_arg( urlencode_deep( $args ), admin_url( 'admin-ajax.php' ) );
|
294 |
+
|
295 |
+
$data = $this->get_data( $path );
|
296 |
+
|
297 |
+
return array(
|
298 |
+
'count' => array(
|
299 |
+
'posts' => $data->post_count,
|
300 |
+
'media' => $data->media_count,
|
301 |
+
'users' => count( $data->users ),
|
302 |
+
'comments' => $data->comment_count,
|
303 |
+
'terms' => $data->term_count,
|
304 |
+
),
|
305 |
+
'url' => $url,
|
306 |
+
'strings' => array(
|
307 |
+
'complete' => __( 'Import complete!', 'astra-sites' ),
|
308 |
+
),
|
309 |
+
);
|
310 |
+
}
|
311 |
+
|
312 |
+
/**
|
313 |
+
* Get XML data.
|
314 |
+
*
|
315 |
+
* @since 1.1.0
|
316 |
+
* @param string $url Downloaded XML file absolute URL.
|
317 |
+
* @return array XML file data.
|
318 |
+
*/
|
319 |
+
function get_data( $url ) {
|
320 |
+
$importer = $this->get_importer();
|
321 |
+
$data = $importer->get_preliminary_information( $url );
|
322 |
+
if ( is_wp_error( $data ) ) {
|
323 |
+
return $data;
|
324 |
+
}
|
325 |
+
return $data;
|
326 |
+
}
|
327 |
+
|
328 |
+
/**
|
329 |
+
* Get Importer
|
330 |
+
*
|
331 |
+
* @since 1.1.0
|
332 |
+
* @return object Importer object.
|
333 |
+
*/
|
334 |
+
public function get_importer() {
|
335 |
+
$options = apply_filters(
|
336 |
+
'astra_sites_xml_import_options',
|
337 |
+
array(
|
338 |
+
'fetch_attachments' => true,
|
339 |
+
'default_author' => get_current_user_id(),
|
340 |
+
)
|
341 |
+
);
|
342 |
+
|
343 |
+
$importer = new WXR_Importer( $options );
|
344 |
+
$logger = new WP_Importer_Logger_ServerSentEvents();
|
345 |
+
|
346 |
+
$importer->set_logger( $logger );
|
347 |
+
return $importer;
|
348 |
+
}
|
349 |
+
|
350 |
+
/**
|
351 |
+
* Send message when a post has been imported.
|
352 |
+
*
|
353 |
+
* @since 1.1.0
|
354 |
+
* @param int $id Post ID.
|
355 |
+
* @param array $data Post data saved to the DB.
|
356 |
+
*/
|
357 |
+
public function imported_post( $id, $data ) {
|
358 |
+
$this->emit_sse_message(
|
359 |
+
array(
|
360 |
+
'action' => 'updateDelta',
|
361 |
+
'type' => ( 'attachment' === $data['post_type'] ) ? 'media' : 'posts',
|
362 |
+
'delta' => 1,
|
363 |
+
)
|
364 |
+
);
|
365 |
+
}
|
366 |
+
|
367 |
+
/**
|
368 |
+
* Send message when a post is marked as already imported.
|
369 |
+
*
|
370 |
+
* @since 1.1.0
|
371 |
+
* @param array $data Post data saved to the DB.
|
372 |
+
*/
|
373 |
+
public function already_imported_post( $data ) {
|
374 |
+
$this->emit_sse_message(
|
375 |
+
array(
|
376 |
+
'action' => 'updateDelta',
|
377 |
+
'type' => ( 'attachment' === $data['post_type'] ) ? 'media' : 'posts',
|
378 |
+
'delta' => 1,
|
379 |
+
)
|
380 |
+
);
|
381 |
+
}
|
382 |
+
|
383 |
+
/**
|
384 |
+
* Send message when a comment has been imported.
|
385 |
+
*
|
386 |
+
* @since 1.1.0
|
387 |
+
*/
|
388 |
+
public function imported_comment() {
|
389 |
+
$this->emit_sse_message(
|
390 |
+
array(
|
391 |
+
'action' => 'updateDelta',
|
392 |
+
'type' => 'comments',
|
393 |
+
'delta' => 1,
|
394 |
+
)
|
395 |
+
);
|
396 |
+
}
|
397 |
+
|
398 |
+
/**
|
399 |
+
* Send message when a term has been imported.
|
400 |
+
*
|
401 |
+
* @since 1.1.0
|
402 |
+
*/
|
403 |
+
public function imported_term() {
|
404 |
+
$this->emit_sse_message(
|
405 |
+
array(
|
406 |
+
'action' => 'updateDelta',
|
407 |
+
'type' => 'terms',
|
408 |
+
'delta' => 1,
|
409 |
+
)
|
410 |
+
);
|
411 |
+
}
|
412 |
+
|
413 |
+
/**
|
414 |
+
* Send message when a user has been imported.
|
415 |
+
*
|
416 |
+
* @since 1.1.0
|
417 |
+
*/
|
418 |
+
public function imported_user() {
|
419 |
+
$this->emit_sse_message(
|
420 |
+
array(
|
421 |
+
'action' => 'updateDelta',
|
422 |
+
'type' => 'users',
|
423 |
+
'delta' => 1,
|
424 |
+
)
|
425 |
+
);
|
426 |
+
}
|
427 |
+
|
428 |
+
/**
|
429 |
+
* Emit a Server-Sent Events message.
|
430 |
+
*
|
431 |
+
* @since 1.1.0
|
432 |
+
* @param mixed $data Data to be JSON-encoded and sent in the message.
|
433 |
+
*/
|
434 |
+
public function emit_sse_message( $data ) {
|
435 |
+
echo "event: message\n";
|
436 |
+
echo 'data: ' . wp_json_encode( $data ) . "\n\n";
|
437 |
+
|
438 |
+
// Extra padding.
|
439 |
+
echo ':' . str_repeat( ' ', 2048 ) . "\n\n";
|
440 |
+
|
441 |
+
flush();
|
442 |
+
}
|
443 |
+
|
444 |
+
}
|
445 |
+
|
446 |
+
Astra_WXR_Importer::instance();
|
inc/includes/admin-page.php
CHANGED
@@ -1,420 +1,420 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Shortcode Markup
|
4 |
-
*
|
5 |
-
* TMPL - Single Demo Preview
|
6 |
-
* TMPL - No more demos
|
7 |
-
* TMPL - Filters
|
8 |
-
* TMPL - List
|
9 |
-
*
|
10 |
-
* @package Astra Sites
|
11 |
-
* @since 1.0.0
|
12 |
-
*/
|
13 |
-
|
14 |
-
defined( 'ABSPATH' ) or exit;
|
15 |
-
?>
|
16 |
-
|
17 |
-
<div class="wrap" id="astra-sites-admin">
|
18 |
-
|
19 |
-
<div id="astra-sites-filters">
|
20 |
-
|
21 |
-
<?php if ( apply_filters( 'astra_sites_show_filters', true ) ) { ?>
|
22 |
-
<div class="wp-filter hide-if-no-js">
|
23 |
-
<div class="section-left">
|
24 |
-
|
25 |
-
<!-- All Filters -->
|
26 |
-
<div class="filter-count">
|
27 |
-
<span class="count"></span>
|
28 |
-
</div>
|
29 |
-
<div class="filters-wrap" style="display: none;">
|
30 |
-
<div id="astra-site-page-builder"></div>
|
31 |
-
</div>
|
32 |
-
<div class="filters-wrap">
|
33 |
-
<div id="astra-site-category"></div>
|
34 |
-
</div>
|
35 |
-
|
36 |
-
</div>
|
37 |
-
|
38 |
-
<div class="section-right">
|
39 |
-
|
40 |
-
<div class="search-form">
|
41 |
-
<label class="screen-reader-text" for="wp-filter-search-input"><?php _e( 'Search Sites', 'astra-sites' ); ?> </label>
|
42 |
-
<input placeholder="<?php _e( 'Search Sites...', 'astra-sites' ); ?>" type="search" aria-describedby="live-search-desc" id="wp-filter-search-input" class="wp-filter-search">
|
43 |
-
</div>
|
44 |
-
|
45 |
-
</div>
|
46 |
-
</div>
|
47 |
-
<?php } ?>
|
48 |
-
|
49 |
-
</div>
|
50 |
-
|
51 |
-
<?php do_action( 'astra_sites_before_site_grid' ); ?>
|
52 |
-
|
53 |
-
<div class="theme-browser rendered">
|
54 |
-
<div id="astra-sites" class="themes wp-clearfix"></div>
|
55 |
-
</div>
|
56 |
-
|
57 |
-
<div class="spinner-wrap">
|
58 |
-
<span class="spinner"></span>
|
59 |
-
</div>
|
60 |
-
|
61 |
-
<?php do_action( 'astra_sites_after_site_grid' ); ?>
|
62 |
-
|
63 |
-
</div>
|
64 |
-
|
65 |
-
<?php
|
66 |
-
/**
|
67 |
-
* TMPL - Pro Site Description
|
68 |
-
*/
|
69 |
-
?>
|
70 |
-
<script type="text/template" id="tmpl-astra-sites-pro-site-description">
|
71 |
-
<p><?php _e( 'Liked this demo?', 'astra-sites' ); ?></p>
|
72 |
-
<p>
|
73 |
-
<?php
|
74 |
-
/* translators: %s is pricing page link */
|
75 |
-
printf( __( 'It is a premium website demo which is available only with the Agency Bundles <a href="%s" target="_blank">Buy Now!</a>', 'astra-sites' ), 'https://wpastra.com/pricing/' );
|
76 |
-
?>
|
77 |
-
</p>
|
78 |
-
<p>
|
79 |
-
<?php
|
80 |
-
/* translators: %s is article link */
|
81 |
-
printf( __( 'Already own an Agency Bundle? Read an article to know how you can <a href="%s" target="_blank">import a premium website demo</a>.', 'astra-sites' ), 'https://wpastra.com/docs/import-astra-agency-website-demos/' );
|
82 |
-
?>
|
83 |
-
</p>
|
84 |
-
</script>
|
85 |
-
|
86 |
-
<?php
|
87 |
-
/**
|
88 |
-
* TMPL - Pro Site Description for Inactive license
|
89 |
-
*/
|
90 |
-
?>
|
91 |
-
<script type="text/template" id="tmpl-astra-sites-pro-inactive-site-description">
|
92 |
-
<p><?php _e( 'You are just 2 minutes away from importing this demo!', 'astra-sites' ); ?></p>
|
93 |
-
<p><?php _e( 'It is a premium website demo and you need to activate the license to access it.', 'astra-sites' ); ?></p>
|
94 |
-
<p>
|
95 |
-
<?php
|
96 |
-
/* translators: %s is article link */
|
97 |
-
printf( __( 'Learn how you can <a href="%s" target="_blank">activate the license</a> of the Astra Premium Sites plugin.', 'astra-sites' ), 'https://wpastra.com/docs/activate-license-for-astra-premium-sites-plugin/' );
|
98 |
-
?>
|
99 |
-
</p>
|
100 |
-
</script>
|
101 |
-
|
102 |
-
<?php
|
103 |
-
/**
|
104 |
-
* TMPL - Single Demo Preview
|
105 |
-
*/
|
106 |
-
?>
|
107 |
-
<script type="text/template" id="tmpl-astra-site-select-page-builder">
|
108 |
-
<div class="select-page-builder">
|
109 |
-
<div class="note-wrap">
|
110 |
-
<h3>
|
111 |
-
<span class="up-arrow dashicons dashicons-editor-break"></span>
|
112 |
-
<div class="note"><?php _e( 'Select Your Favorite Page Builder', 'astra-sites' ); ?></div>
|
113 |
-
</h3>
|
114 |
-
</div>
|
115 |
-
<img src="<?php echo esc_url( ASTRA_SITES_URI . 'inc/assets/images/sites-screenshot.jpg' ); ?>" alt="<?php _e( 'Sites List..', 'astra-sites' ); ?>" title="<?php _e( 'Sites List..', 'astra-sites' ); ?>" />
|
116 |
-
</div>
|
117 |
-
</script>
|
118 |
-
|
119 |
-
<?php
|
120 |
-
/**
|
121 |
-
* TMPL - Single Demo Preview
|
122 |
-
*/
|
123 |
-
?>
|
124 |
-
<script type="text/template" id="tmpl-astra-site-preview">
|
125 |
-
<div class="astra-sites-preview theme-install-overlay wp-full-overlay expanded">
|
126 |
-
<div class="wp-full-overlay-sidebar">
|
127 |
-
<div class="wp-full-overlay-header"
|
128 |
-
data-demo-id="{{{data.id}}}"
|
129 |
-
data-demo-type="{{{data.astra_demo_type}}}"
|
130 |
-
data-demo-url="{{{data.astra_demo_url}}}"
|
131 |
-
data-demo-api="{{{data.demo_api}}}"
|
132 |
-
data-demo-name="{{{data.demo_name}}}"
|
133 |
-
data-demo-slug="{{{data.slug}}}"
|
134 |
-
data-screenshot="{{{data.screenshot}}}"
|
135 |
-
data-content="{{{data.content}}}"
|
136 |
-
data-required-plugins="{{data.required_plugins}}">
|
137 |
-
<input type="hidden" class="astra-site-options" value="{{data.astra_site_options}}" >
|
138 |
-
<input type="hidden" class="astra-enabled-extensions" value="{{data.astra_enabled_extensions}}" >
|
139 |
-
<button class="close-full-overlay"><span class="screen-reader-text"><?php esc_html_e( 'Close', 'astra-sites' ); ?></span></button>
|
140 |
-
<button class="previous-theme"><span class="screen-reader-text"><?php esc_html_e( 'Previous', 'astra-sites' ); ?></span></button>
|
141 |
-
<button class="next-theme"><span class="screen-reader-text"><?php esc_html_e( 'Next', 'astra-sites' ); ?></span></button>
|
142 |
-
<!-- <a class="button hide-if-no-customize astra-site-import" href="#" data-import="disabled"><?php esc_html_e( 'Import Site', 'astra-sites' ); ?></a> -->
|
143 |
-
<a class="button hide-if-no-customize button-primary astra-demo-import" href="#" data-import="disabled"><?php esc_html_e( 'Import Site', 'astra-sites' ); ?></a>
|
144 |
-
|
145 |
-
</div>
|
146 |
-
<div class="wp-full-overlay-sidebar-content">
|
147 |
-
<div class="install-theme-info">
|
148 |
-
|
149 |
-
<span class="site-type {{{data.astra_demo_type}}}">{{{data.astra_demo_type}}}</span>
|
150 |
-
<h3 class="theme-name">{{{data.demo_name}}}</h3>
|
151 |
-
|
152 |
-
<# if ( data.screenshot.length ) { #>
|
153 |
-
<div class="theme-screenshot-wrap">
|
154 |
-
<img class="theme-screenshot" src="{{{data.screenshot}}}" alt="">
|
155 |
-
</div>
|
156 |
-
<# } #>
|
157 |
-
|
158 |
-
<div class="theme-details">
|
159 |
-
{{{data.content}}}
|
160 |
-
</div>
|
161 |
-
<a href="#" class="theme-details-read-more"><?php _e( 'Read more', 'astra-sites' ); ?> …</a>
|
162 |
-
|
163 |
-
<div class="astra-sites-advanced-options-wrap">
|
164 |
-
|
165 |
-
<div class="astra-sites-advanced-options">
|
166 |
-
|
167 |
-
<ul class="astra-site-contents">
|
168 |
-
<li class="astra-sites-import-plugins">
|
169 |
-
<input type="checkbox" name="plugins" checked="checked" class="disabled checkbox" readonly>
|
170 |
-
<strong><?php _e( 'Install Required Plugins', 'astra-sites' ); ?></strong>
|
171 |
-
<span class="astra-sites-tooltip-icon" data-tip-id="astra-sites-tooltip-plugins-settings"><span class="dashicons dashicons-editor-help"></span></span>
|
172 |
-
<div class="astra-sites-tooltip-message" id="astra-sites-tooltip-plugins-settings" style="display: none;">
|
173 |
-
<ul class="required-plugins-list"><span class="spinner is-active"></span></ul>
|
174 |
-
</div>
|
175 |
-
</li>
|
176 |
-
<li class="astra-sites-import-customizer">
|
177 |
-
<label>
|
178 |
-
<input type="checkbox" name="customizer" checked="checked" class="checkbox">
|
179 |
-
<strong>Import Customizer Settings</strong>
|
180 |
-
<span class="astra-sites-tooltip-icon" data-tip-id="astra-sites-tooltip-customizer-settings"><span class="dashicons dashicons-editor-help"></span></span>
|
181 |
-
<div class="astra-sites-tooltip-message" id="astra-sites-tooltip-customizer-settings" style="display: none;">
|
182 |
-
<p><?php _e( 'Customizer is what gives a design to the website; and selecting this option replaces your current design with a new one.', 'astra-sites' ); ?></p>
|
183 |
-
<p><?php _e( 'Backup of current customizer settings will be stored in "wp-content/astra-sites" directory, just in case if you want to restore it later.', 'astra-sites' ); ?></p>
|
184 |
-
</div>
|
185 |
-
</label>
|
186 |
-
</li>
|
187 |
-
<li class="astra-sites-import-xml">
|
188 |
-
<label>
|
189 |
-
<input type="checkbox" name="xml" checked="checked" class="checkbox">
|
190 |
-
<strong>Import Content</strong>
|
191 |
-
</label>
|
192 |
-
<span class="astra-sites-tooltip-icon" data-tip-id="astra-sites-tooltip-site-content"><span class="dashicons dashicons-editor-help"></span></span>
|
193 |
-
<div class="astra-sites-tooltip-message" id="astra-sites-tooltip-site-content" style="display: none;"><p><?php _e( 'Selecting this option will import dummy pages, posts, images and menus. If you do not want to import dummy content, please uncheck this option.', 'astra-sites' ); ?></p></div>
|
194 |
-
</li>
|
195 |
-
<li class="astra-sites-import-widgets">
|
196 |
-
<label>
|
197 |
-
<input type="checkbox" name="widgets" checked="checked" class="checkbox">
|
198 |
-
<strong>Import Widgets</strong>
|
199 |
-
</label>
|
200 |
-
</li>
|
201 |
-
</ul>
|
202 |
-
</div>
|
203 |
-
|
204 |
-
<ul>
|
205 |
-
<li class="astra-sites-reset-data">
|
206 |
-
<label>
|
207 |
-
<input type="checkbox" name="reset" class="checkbox">
|
208 |
-
<strong>Delete Previously Imported Site</strong>
|
209 |
-
<div class="astra-sites-tooltip-message" id="astra-sites-tooltip-reset-data" style="display: none;"><p><?php _e( 'WARNING: Selecting this option will delete data from your current website. Choose this option only if this is intended.', 'astra-sites' ); ?></p></div>
|
210 |
-
</label>
|
211 |
-
</li>
|
212 |
-
</ul>
|
213 |
-
|
214 |
-
<!-- <p><a href="#" class="astra-sites-advanced-options-button"><?php _e( 'Advanced Options', 'astra-sites' ); ?></a></p> -->
|
215 |
-
|
216 |
-
</div>
|
217 |
-
|
218 |
-
<!-- <div class="astra-sites-advanced-options">
|
219 |
-
<h4><?php _e( 'Required Plugins', 'astra-sites' ); ?> </h4>
|
220 |
-
<div class="required-plugins"></div>
|
221 |
-
</div> -->
|
222 |
-
</div>
|
223 |
-
</div>
|
224 |
-
|
225 |
-
<div class="wp-full-overlay-footer">
|
226 |
-
<div class="footer-import-button-wrap">
|
227 |
-
<a class="button button-hero hide-if-no-customize button-primary astra-demo-import" href="#" data-import="disabled">
|
228 |
-
<?php esc_html_e( 'Import Site', 'astra-sites' ); ?>
|
229 |
-
<span class="percent"></span>
|
230 |
-
</a>
|
231 |
-
<div class="astra-site-import-process-wrap" style="display: none;">
|
232 |
-
<progress class="astra-site-import-process" max="100" value="0"></progress>
|
233 |
-
</div>
|
234 |
-
<!-- <a class="button button-hero hide-if-no-customize astra-site-import" href="#">
|
235 |
-
<?php esc_html_e( 'Import Site', 'astra-sites' ); ?>
|
236 |
-
</a> -->
|
237 |
-
</div>
|
238 |
-
<button type="button" class="collapse-sidebar button" aria-expanded="true"
|
239 |
-
aria-label="Collapse Sidebar">
|
240 |
-
<span class="collapse-sidebar-arrow"></span>
|
241 |
-
<span class="collapse-sidebar-label"><?php esc_html_e( 'Collapse', 'astra-sites' ); ?></span>
|
242 |
-
</button>
|
243 |
-
|
244 |
-
<div class="devices-wrapper">
|
245 |
-
<div class="devices">
|
246 |
-
<button type="button" class="preview-desktop active" aria-pressed="true" data-device="desktop">
|
247 |
-
<span class="screen-reader-text"><?php _e( 'Enter desktop preview mode', 'astra-sites' ); ?></span>
|
248 |
-
</button>
|
249 |
-
<button type="button" class="preview-tablet" aria-pressed="false" data-device="tablet">
|
250 |
-
<span class="screen-reader-text"><?php _e( 'Enter tablet preview mode', 'astra-sites' ); ?></span>
|
251 |
-
</button>
|
252 |
-
<button type="button" class="preview-mobile" aria-pressed="false" data-device="mobile">
|
253 |
-
<span class="screen-reader-text"><?php _e( 'Enter mobile preview mode', 'astra-sites' ); ?></span>
|
254 |
-
</button>
|
255 |
-
</div>
|
256 |
-
</div>
|
257 |
-
|
258 |
-
</div>
|
259 |
-
</div>
|
260 |
-
<div class="wp-full-overlay-main">
|
261 |
-
<iframe src="{{{data.astra_demo_url}}}" title="<?php esc_attr_e( 'Preview', 'astra-sites' ); ?>"></iframe>
|
262 |
-
<div class="astra-sites-result-preview" style="display: none;">
|
263 |
-
<div class="inner">
|
264 |
-
<h2><?php _e( 'We\'re building your website.', 'astra-sites' ); ?></h2>
|
265 |
-
<p><?php _e( 'The process can take anywhere between 2 to 10 minutes depending on the size of the website and speed of connection.', 'astra-sites' ); ?></p>
|
266 |
-
<p><?php _e( 'Please do not close this browser window until the site is imported completely.', 'astra-sites' ); ?></p>
|
267 |
-
<div class="current-importing-status-wrap">
|
268 |
-
<div class="current-importing-status">
|
269 |
-
<div class="current-importing-status-title"></div>
|
270 |
-
<div class="current-importing-status-description"></div>
|
271 |
-
</div>
|
272 |
-
</div>
|
273 |
-
</div>
|
274 |
-
</div>
|
275 |
-
</div>
|
276 |
-
</div>
|
277 |
-
</script>
|
278 |
-
|
279 |
-
<?php
|
280 |
-
/**
|
281 |
-
* TMPL - No more demos
|
282 |
-
*/
|
283 |
-
?>
|
284 |
-
<script type="text/template" id="tmpl-astra-site-api-request-failed">
|
285 |
-
<div class="no-themes">
|
286 |
-
<?php
|
287 |
-
|
288 |
-
/* translators: %1$s & %2$s are a Demo API URL */
|
289 |
-
printf( __( '<p> It seems the demo data server, <i><a href="%1$s">%2$s</a></i> is unreachable from your site.</p>', 'astra-sites' ), esc_url( Astra_Sites::$api_url ), esc_url( Astra_Sites::$api_url ) );
|
290 |
-
|
291 |
-
_e( '<p class="left-margin"> 1. Sometimes, simple page reload fixes any temporary issues. No kidding!</p>', 'astra-sites' );
|
292 |
-
|
293 |
-
_e( '<p class="left-margin"> 2. If that does not work, you will need to talk to your server administrator and check if demo server is being blocked by the firewall!</p>', 'astra-sites' );
|
294 |
-
|
295 |
-
/* translators: %1$s is a support link */
|
296 |
-
printf( __( '<p>If that does not help, please open up a <a href="%1$s" target="_blank">Support Ticket</a> and we will be glad take a closer look for you.</p>', 'astra-sites' ), esc_url( 'https://wpastra.com/support/?utm_source=demo-import-panel&utm_campaign=astra-sites&utm_medium=api-request-failed' ) );
|
297 |
-
?>
|
298 |
-
</div>
|
299 |
-
</script>
|
300 |
-
|
301 |
-
<?php
|
302 |
-
/**
|
303 |
-
* TMPL - Site Down
|
304 |
-
*/
|
305 |
-
?>
|
306 |
-
<script type="text/template" id="tmpl-astra-site-down">
|
307 |
-
<div class="postbox astra-site-down">
|
308 |
-
<h2><?php _e( 'Under Maintenance..', 'astra-sites' ); ?></h2>
|
309 |
-
<p><?php _e( 'If you are seeing this message, most likely our servers are under routine maintenance and we will be back shortly. ', 'astra-sites' ); ?></p>
|
310 |
-
<p><?php _e( 'In rare case, it is possible your website is having trouble connecting with ours. If you need help, please feel free to get in touch with us from our website.', 'astra-sites' ); ?></p>
|
311 |
-
</div>
|
312 |
-
</script>
|
313 |
-
|
314 |
-
<?php
|
315 |
-
/**
|
316 |
-
* TMPL - Filters
|
317 |
-
*/
|
318 |
-
?>
|
319 |
-
<script type="text/template" id="tmpl-astra-site-filters">
|
320 |
-
|
321 |
-
<# if ( data ) { #>
|
322 |
-
|
323 |
-
<ul class="{{ data.args.wrapper_class }} {{ data.args.class }}">
|
324 |
-
|
325 |
-
<# if ( data.args.show_all ) { #>
|
326 |
-
<li>
|
327 |
-
<a href="#" data-group="all"> All </a>
|
328 |
-
</li>
|
329 |
-
<# } #>
|
330 |
-
|
331 |
-
<# for ( key in data.items ) { #>
|
332 |
-
<# if ( data.items[ key ].count ) { #>
|
333 |
-
<li>
|
334 |
-
<a href="#" data-group='{{ data.items[ key ].id }}' class="{{ data.items[ key ].name }}">
|
335 |
-
{{ data.items[ key ].name }}
|
336 |
-
</a>
|
337 |
-
</li>
|
338 |
-
<# } #>
|
339 |
-
<# } #>
|
340 |
-
|
341 |
-
</ul>
|
342 |
-
<# } #>
|
343 |
-
</script>
|
344 |
-
|
345 |
-
<?php
|
346 |
-
/**
|
347 |
-
* TMPL - List
|
348 |
-
*/
|
349 |
-
?>
|
350 |
-
<script type="text/template" id="tmpl-astra-sites-list">
|
351 |
-
|
352 |
-
<# if ( data.items.length ) { #>
|
353 |
-
<# for ( key in data.items ) { #>
|
354 |
-
|
355 |
-
<div class="theme astra-theme site-single {{ data.items[ key ].status }}" tabindex="0" aria-describedby="astra-theme-action astra-theme-name"
|
356 |
-
data-demo-id="{{{ data.items[ key ].id }}}"
|
357 |
-
data-demo-type="{{{ data.items[ key ]['astra-site-type'] }}}"
|
358 |
-
data-demo-url="{{{ data.items[ key ]['astra-site-url'] }}}"
|
359 |
-
data-demo-api="{{{ data.items[ key ]['_links']['self'][0]['href'] }}}"
|
360 |
-
data-demo-name="{{{ data.items[ key ].title.rendered }}}"
|
361 |
-
data-demo-slug="{{{ data.items[ key ].slug }}}"
|
362 |
-
data-screenshot="{{{ data.items[ key ]['featured-image-url'] }}}"
|
363 |
-
data-content="{{{ data.items[ key ].content.rendered }}}"
|
364 |
-
data-required-plugins="{{ JSON.stringify( data.items[ key ]['required-plugins'] ) }}"
|
365 |
-
data-groups=["{{ data.items[ key ].tags }}"]>
|
366 |
-
<input type="hidden" class="astra-site-options" value="{{ JSON.stringify(data.items[ key ]['astra-site-options-data'] ) }}" />
|
367 |
-
<input type="hidden" class="astra-enabled-extensions" value="{{ JSON.stringify(data.items[ key ]['astra-enabled-extensions'] ) }}" />
|
368 |
-
|
369 |
-
<div class="inner">
|
370 |
-
<span class="site-preview" data-href="{{ data.items[ key ]['astra-site-url'] }}?TB_iframe=true&width=600&height=550" data-title="{{ data.items[ key ].title.rendered }}">
|
371 |
-
<div class="theme-screenshot" style="background-image: url('{{ data.items[ key ]['featured-image-url'] }}');"></div>
|
372 |
-
</span>
|
373 |
-
<# if ( data.items[ key ]['astra-site-type'] ) { #>
|
374 |
-
<# var type = ( data.items[ key ]['astra-site-type'] !== 'premium' ) ? ( data.items[ key ]['astra-site-type'] ) : 'agency'; #>
|
375 |
-
<span class="site-type {{data.items[ key ]['astra-site-type']}}">{{ type }}</span>
|
376 |
-
<# } #>
|
377 |
-
<# if ( data.items[ key ].status ) { #>
|
378 |
-
<span class="status {{data.items[ key ].status}}">{{data.items[ key ].status}}</span>
|
379 |
-
<# } #>
|
380 |
-
<div class="theme-id-container">
|
381 |
-
<h3 class="theme-name" id="astra-theme-name"> {{{ data.items[ key ].title.rendered }}} </h3>
|
382 |
-
<div class="theme-actions">
|
383 |
-
<button class="button-primary button preview install-theme-preview"><?php esc_html_e( 'Preview', 'astra-sites' ); ?></button>
|
384 |
-
</div>
|
385 |
-
</div>
|
386 |
-
</div>
|
387 |
-
</div>
|
388 |
-
<# } #>
|
389 |
-
<# } else { #>
|
390 |
-
<p class="no-themes" style="display:block;">
|
391 |
-
<?php _e( 'No Demos found, Try a different search.', 'astra-sites' ); ?>
|
392 |
-
<span class="description">
|
393 |
-
<?php
|
394 |
-
/* translators: %1$s External Link */
|
395 |
-
printf( __( 'Don\'t see a site that you would like to import?<br><a target="_blank" href="%1$s">Please suggest us!</a>', 'astra-sites' ), esc_url( 'https://wpastra.com/sites-suggestions/?utm_source=demo-import-panel&utm_campaign=astra-sites&utm_medium=suggestions' ) );
|
396 |
-
?>
|
397 |
-
</span>
|
398 |
-
</p>
|
399 |
-
<# } #>
|
400 |
-
</script>
|
401 |
-
|
402 |
-
<?php
|
403 |
-
/**
|
404 |
-
* TMPL - List
|
405 |
-
*/
|
406 |
-
?>
|
407 |
-
<script type="text/template" id="tmpl-astra-sites-suggestions">
|
408 |
-
<div class="theme astra-theme site-single astra-sites-suggestions">
|
409 |
-
<div class="inner">
|
410 |
-
<p>
|
411 |
-
<?php
|
412 |
-
/* translators: %1$s External Link */
|
413 |
-
printf( __( 'Don\'t see a site that you would like to import?<br><a target="_blank" href="%1$s">Please suggest us!</a>', 'astra-sites' ), esc_url( 'https://wpastra.com/sites-suggestions/?utm_source=demo-import-panel&utm_campaign=astra-sites&utm_medium=suggestions' ) );
|
414 |
-
?>
|
415 |
-
</p>
|
416 |
-
</div>
|
417 |
-
</div>
|
418 |
-
</script>
|
419 |
-
<?php
|
420 |
-
wp_print_admin_notice_templates();
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Shortcode Markup
|
4 |
+
*
|
5 |
+
* TMPL - Single Demo Preview
|
6 |
+
* TMPL - No more demos
|
7 |
+
* TMPL - Filters
|
8 |
+
* TMPL - List
|
9 |
+
*
|
10 |
+
* @package Astra Sites
|
11 |
+
* @since 1.0.0
|
12 |
+
*/
|
13 |
+
|
14 |
+
defined( 'ABSPATH' ) or exit;
|
15 |
+
?>
|
16 |
+
|
17 |
+
<div class="wrap" id="astra-sites-admin">
|
18 |
+
|
19 |
+
<div id="astra-sites-filters">
|
20 |
+
|
21 |
+
<?php if ( apply_filters( 'astra_sites_show_filters', true ) ) { ?>
|
22 |
+
<div class="wp-filter hide-if-no-js">
|
23 |
+
<div class="section-left">
|
24 |
+
|
25 |
+
<!-- All Filters -->
|
26 |
+
<div class="filter-count">
|
27 |
+
<span class="count"></span>
|
28 |
+
</div>
|
29 |
+
<div class="filters-wrap" style="display: none;">
|
30 |
+
<div id="astra-site-page-builder"></div>
|
31 |
+
</div>
|
32 |
+
<div class="filters-wrap">
|
33 |
+
<div id="astra-site-category"></div>
|
34 |
+
</div>
|
35 |
+
|
36 |
+
</div>
|
37 |
+
|
38 |
+
<div class="section-right">
|
39 |
+
|
40 |
+
<div class="search-form">
|
41 |
+
<label class="screen-reader-text" for="wp-filter-search-input"><?php _e( 'Search Sites', 'astra-sites' ); ?> </label>
|
42 |
+
<input placeholder="<?php _e( 'Search Sites...', 'astra-sites' ); ?>" type="search" aria-describedby="live-search-desc" id="wp-filter-search-input" class="wp-filter-search">
|
43 |
+
</div>
|
44 |
+
|
45 |
+
</div>
|
46 |
+
</div>
|
47 |
+
<?php } ?>
|
48 |
+
|
49 |
+
</div>
|
50 |
+
|
51 |
+
<?php do_action( 'astra_sites_before_site_grid' ); ?>
|
52 |
+
|
53 |
+
<div class="theme-browser rendered">
|
54 |
+
<div id="astra-sites" class="themes wp-clearfix"></div>
|
55 |
+
</div>
|
56 |
+
|
57 |
+
<div class="spinner-wrap">
|
58 |
+
<span class="spinner"></span>
|
59 |
+
</div>
|
60 |
+
|
61 |
+
<?php do_action( 'astra_sites_after_site_grid' ); ?>
|
62 |
+
|
63 |
+
</div>
|
64 |
+
|
65 |
+
<?php
|
66 |
+
/**
|
67 |
+
* TMPL - Pro Site Description
|
68 |
+
*/
|
69 |
+
?>
|
70 |
+
<script type="text/template" id="tmpl-astra-sites-pro-site-description">
|
71 |
+
<p><?php _e( 'Liked this demo?', 'astra-sites' ); ?></p>
|
72 |
+
<p>
|
73 |
+
<?php
|
74 |
+
/* translators: %s is pricing page link */
|
75 |
+
printf( __( 'It is a premium website demo which is available only with the Agency Bundles <a href="%s" target="_blank">Buy Now!</a>', 'astra-sites' ), 'https://wpastra.com/pricing/' );
|
76 |
+
?>
|
77 |
+
</p>
|
78 |
+
<p>
|
79 |
+
<?php
|
80 |
+
/* translators: %s is article link */
|
81 |
+
printf( __( 'Already own an Agency Bundle? Read an article to know how you can <a href="%s" target="_blank">import a premium website demo</a>.', 'astra-sites' ), 'https://wpastra.com/docs/import-astra-agency-website-demos/' );
|
82 |
+
?>
|
83 |
+
</p>
|
84 |
+
</script>
|
85 |
+
|
86 |
+
<?php
|
87 |
+
/**
|
88 |
+
* TMPL - Pro Site Description for Inactive license
|
89 |
+
*/
|
90 |
+
?>
|
91 |
+
<script type="text/template" id="tmpl-astra-sites-pro-inactive-site-description">
|
92 |
+
<p><?php _e( 'You are just 2 minutes away from importing this demo!', 'astra-sites' ); ?></p>
|
93 |
+
<p><?php _e( 'It is a premium website demo and you need to activate the license to access it.', 'astra-sites' ); ?></p>
|
94 |
+
<p>
|
95 |
+
<?php
|
96 |
+
/* translators: %s is article link */
|
97 |
+
printf( __( 'Learn how you can <a href="%s" target="_blank">activate the license</a> of the Astra Premium Sites plugin.', 'astra-sites' ), 'https://wpastra.com/docs/activate-license-for-astra-premium-sites-plugin/' );
|
98 |
+
?>
|
99 |
+
</p>
|
100 |
+
</script>
|
101 |
+
|
102 |
+
<?php
|
103 |
+
/**
|
104 |
+
* TMPL - Single Demo Preview
|
105 |
+
*/
|
106 |
+
?>
|
107 |
+
<script type="text/template" id="tmpl-astra-site-select-page-builder">
|
108 |
+
<div class="select-page-builder">
|
109 |
+
<div class="note-wrap">
|
110 |
+
<h3>
|
111 |
+
<span class="up-arrow dashicons dashicons-editor-break"></span>
|
112 |
+
<div class="note"><?php _e( 'Select Your Favorite Page Builder', 'astra-sites' ); ?></div>
|
113 |
+
</h3>
|
114 |
+
</div>
|
115 |
+
<img src="<?php echo esc_url( ASTRA_SITES_URI . 'inc/assets/images/sites-screenshot.jpg' ); ?>" alt="<?php _e( 'Sites List..', 'astra-sites' ); ?>" title="<?php _e( 'Sites List..', 'astra-sites' ); ?>" />
|
116 |
+
</div>
|
117 |
+
</script>
|
118 |
+
|
119 |
+
<?php
|
120 |
+
/**
|
121 |
+
* TMPL - Single Demo Preview
|
122 |
+
*/
|
123 |
+
?>
|
124 |
+
<script type="text/template" id="tmpl-astra-site-preview">
|
125 |
+
<div class="astra-sites-preview theme-install-overlay wp-full-overlay expanded">
|
126 |
+
<div class="wp-full-overlay-sidebar">
|
127 |
+
<div class="wp-full-overlay-header"
|
128 |
+
data-demo-id="{{{data.id}}}"
|
129 |
+
data-demo-type="{{{data.astra_demo_type}}}"
|
130 |
+
data-demo-url="{{{data.astra_demo_url}}}"
|
131 |
+
data-demo-api="{{{data.demo_api}}}"
|
132 |
+
data-demo-name="{{{data.demo_name}}}"
|
133 |
+
data-demo-slug="{{{data.slug}}}"
|
134 |
+
data-screenshot="{{{data.screenshot}}}"
|
135 |
+
data-content="{{{data.content}}}"
|
136 |
+
data-required-plugins="{{data.required_plugins}}">
|
137 |
+
<input type="hidden" class="astra-site-options" value="{{data.astra_site_options}}" >
|
138 |
+
<input type="hidden" class="astra-enabled-extensions" value="{{data.astra_enabled_extensions}}" >
|
139 |
+
<button class="close-full-overlay"><span class="screen-reader-text"><?php esc_html_e( 'Close', 'astra-sites' ); ?></span></button>
|
140 |
+
<button class="previous-theme"><span class="screen-reader-text"><?php esc_html_e( 'Previous', 'astra-sites' ); ?></span></button>
|
141 |
+
<button class="next-theme"><span class="screen-reader-text"><?php esc_html_e( 'Next', 'astra-sites' ); ?></span></button>
|
142 |
+
<!-- <a class="button hide-if-no-customize astra-site-import" href="#" data-import="disabled"><?php esc_html_e( 'Import Site', 'astra-sites' ); ?></a> -->
|
143 |
+
<a class="button hide-if-no-customize button-primary astra-demo-import" href="#" data-import="disabled"><?php esc_html_e( 'Import Site', 'astra-sites' ); ?></a>
|
144 |
+
|
145 |
+
</div>
|
146 |
+
<div class="wp-full-overlay-sidebar-content">
|
147 |
+
<div class="install-theme-info">
|
148 |
+
|
149 |
+
<span class="site-type {{{data.astra_demo_type}}}">{{{data.astra_demo_type}}}</span>
|
150 |
+
<h3 class="theme-name">{{{data.demo_name}}}</h3>
|
151 |
+
|
152 |
+
<# if ( data.screenshot.length ) { #>
|
153 |
+
<div class="theme-screenshot-wrap">
|
154 |
+
<img class="theme-screenshot" src="{{{data.screenshot}}}" alt="">
|
155 |
+
</div>
|
156 |
+
<# } #>
|
157 |
+
|
158 |
+
<div class="theme-details">
|
159 |
+
{{{data.content}}}
|
160 |
+
</div>
|
161 |
+
<a href="#" class="theme-details-read-more"><?php _e( 'Read more', 'astra-sites' ); ?> …</a>
|
162 |
+
|
163 |
+
<div class="astra-sites-advanced-options-wrap">
|
164 |
+
|
165 |
+
<div class="astra-sites-advanced-options">
|
166 |
+
|
167 |
+
<ul class="astra-site-contents">
|
168 |
+
<li class="astra-sites-import-plugins">
|
169 |
+
<input type="checkbox" name="plugins" checked="checked" class="disabled checkbox" readonly>
|
170 |
+
<strong><?php _e( 'Install Required Plugins', 'astra-sites' ); ?></strong>
|
171 |
+
<span class="astra-sites-tooltip-icon" data-tip-id="astra-sites-tooltip-plugins-settings"><span class="dashicons dashicons-editor-help"></span></span>
|
172 |
+
<div class="astra-sites-tooltip-message" id="astra-sites-tooltip-plugins-settings" style="display: none;">
|
173 |
+
<ul class="required-plugins-list"><span class="spinner is-active"></span></ul>
|
174 |
+
</div>
|
175 |
+
</li>
|
176 |
+
<li class="astra-sites-import-customizer">
|
177 |
+
<label>
|
178 |
+
<input type="checkbox" name="customizer" checked="checked" class="checkbox">
|
179 |
+
<strong>Import Customizer Settings</strong>
|
180 |
+
<span class="astra-sites-tooltip-icon" data-tip-id="astra-sites-tooltip-customizer-settings"><span class="dashicons dashicons-editor-help"></span></span>
|
181 |
+
<div class="astra-sites-tooltip-message" id="astra-sites-tooltip-customizer-settings" style="display: none;">
|
182 |
+
<p><?php _e( 'Customizer is what gives a design to the website; and selecting this option replaces your current design with a new one.', 'astra-sites' ); ?></p>
|
183 |
+
<p><?php _e( 'Backup of current customizer settings will be stored in "wp-content/astra-sites" directory, just in case if you want to restore it later.', 'astra-sites' ); ?></p>
|
184 |
+
</div>
|
185 |
+
</label>
|
186 |
+
</li>
|
187 |
+
<li class="astra-sites-import-xml">
|
188 |
+
<label>
|
189 |
+
<input type="checkbox" name="xml" checked="checked" class="checkbox">
|
190 |
+
<strong>Import Content</strong>
|
191 |
+
</label>
|
192 |
+
<span class="astra-sites-tooltip-icon" data-tip-id="astra-sites-tooltip-site-content"><span class="dashicons dashicons-editor-help"></span></span>
|
193 |
+
<div class="astra-sites-tooltip-message" id="astra-sites-tooltip-site-content" style="display: none;"><p><?php _e( 'Selecting this option will import dummy pages, posts, images and menus. If you do not want to import dummy content, please uncheck this option.', 'astra-sites' ); ?></p></div>
|
194 |
+
</li>
|
195 |
+
<li class="astra-sites-import-widgets">
|
196 |
+
<label>
|
197 |
+
<input type="checkbox" name="widgets" checked="checked" class="checkbox">
|
198 |
+
<strong>Import Widgets</strong>
|
199 |
+
</label>
|
200 |
+
</li>
|
201 |
+
</ul>
|
202 |
+
</div>
|
203 |
+
|
204 |
+
<ul>
|
205 |
+
<li class="astra-sites-reset-data">
|
206 |
+
<label>
|
207 |
+
<input type="checkbox" name="reset" class="checkbox">
|
208 |
+
<strong>Delete Previously Imported Site</strong>
|
209 |
+
<div class="astra-sites-tooltip-message" id="astra-sites-tooltip-reset-data" style="display: none;"><p><?php _e( 'WARNING: Selecting this option will delete data from your current website. Choose this option only if this is intended.', 'astra-sites' ); ?></p></div>
|
210 |
+
</label>
|
211 |
+
</li>
|
212 |
+
</ul>
|
213 |
+
|
214 |
+
<!-- <p><a href="#" class="astra-sites-advanced-options-button"><?php _e( 'Advanced Options', 'astra-sites' ); ?></a></p> -->
|
215 |
+
|
216 |
+
</div>
|
217 |
+
|
218 |
+
<!-- <div class="astra-sites-advanced-options">
|
219 |
+
<h4><?php _e( 'Required Plugins', 'astra-sites' ); ?> </h4>
|
220 |
+
<div class="required-plugins"></div>
|
221 |
+
</div> -->
|
222 |
+
</div>
|
223 |
+
</div>
|
224 |
+
|
225 |
+
<div class="wp-full-overlay-footer">
|
226 |
+
<div class="footer-import-button-wrap">
|
227 |
+
<a class="button button-hero hide-if-no-customize button-primary astra-demo-import" href="#" data-import="disabled">
|
228 |
+
<?php esc_html_e( 'Import Site', 'astra-sites' ); ?>
|
229 |
+
<span class="percent"></span>
|
230 |
+
</a>
|
231 |
+
<div class="astra-site-import-process-wrap" style="display: none;">
|
232 |
+
<progress class="astra-site-import-process" max="100" value="0"></progress>
|
233 |
+
</div>
|
234 |
+
<!-- <a class="button button-hero hide-if-no-customize astra-site-import" href="#">
|
235 |
+
<?php esc_html_e( 'Import Site', 'astra-sites' ); ?>
|
236 |
+
</a> -->
|
237 |
+
</div>
|
238 |
+
<button type="button" class="collapse-sidebar button" aria-expanded="true"
|
239 |
+
aria-label="Collapse Sidebar">
|
240 |
+
<span class="collapse-sidebar-arrow"></span>
|
241 |
+
<span class="collapse-sidebar-label"><?php esc_html_e( 'Collapse', 'astra-sites' ); ?></span>
|
242 |
+
</button>
|
243 |
+
|
244 |
+
<div class="devices-wrapper">
|
245 |
+
<div class="devices">
|
246 |
+
<button type="button" class="preview-desktop active" aria-pressed="true" data-device="desktop">
|
247 |
+
<span class="screen-reader-text"><?php _e( 'Enter desktop preview mode', 'astra-sites' ); ?></span>
|
248 |
+
</button>
|
249 |
+
<button type="button" class="preview-tablet" aria-pressed="false" data-device="tablet">
|
250 |
+
<span class="screen-reader-text"><?php _e( 'Enter tablet preview mode', 'astra-sites' ); ?></span>
|
251 |
+
</button>
|
252 |
+
<button type="button" class="preview-mobile" aria-pressed="false" data-device="mobile">
|
253 |
+
<span class="screen-reader-text"><?php _e( 'Enter mobile preview mode', 'astra-sites' ); ?></span>
|
254 |
+
</button>
|
255 |
+
</div>
|
256 |
+
</div>
|
257 |
+
|
258 |
+
</div>
|
259 |
+
</div>
|
260 |
+
<div class="wp-full-overlay-main">
|
261 |
+
<iframe src="{{{data.astra_demo_url}}}" title="<?php esc_attr_e( 'Preview', 'astra-sites' ); ?>"></iframe>
|
262 |
+
<div class="astra-sites-result-preview" style="display: none;">
|
263 |
+
<div class="inner">
|
264 |
+
<h2><?php _e( 'We\'re building your website.', 'astra-sites' ); ?></h2>
|
265 |
+
<p><?php _e( 'The process can take anywhere between 2 to 10 minutes depending on the size of the website and speed of connection.', 'astra-sites' ); ?></p>
|
266 |
+
<p><?php _e( 'Please do not close this browser window until the site is imported completely.', 'astra-sites' ); ?></p>
|
267 |
+
<div class="current-importing-status-wrap">
|
268 |
+
<div class="current-importing-status">
|
269 |
+
<div class="current-importing-status-title"></div>
|
270 |
+
<div class="current-importing-status-description"></div>
|
271 |
+
</div>
|
272 |
+
</div>
|
273 |
+
</div>
|
274 |
+
</div>
|
275 |
+
</div>
|
276 |
+
</div>
|
277 |
+
</script>
|
278 |
+
|
279 |
+
<?php
|
280 |
+
/**
|
281 |
+
* TMPL - No more demos
|
282 |
+
*/
|
283 |
+
?>
|
284 |
+
<script type="text/template" id="tmpl-astra-site-api-request-failed">
|
285 |
+
<div class="no-themes">
|
286 |
+
<?php
|
287 |
+
|
288 |
+
/* translators: %1$s & %2$s are a Demo API URL */
|
289 |
+
printf( __( '<p> It seems the demo data server, <i><a href="%1$s">%2$s</a></i> is unreachable from your site.</p>', 'astra-sites' ), esc_url( Astra_Sites::$api_url ), esc_url( Astra_Sites::$api_url ) );
|
290 |
+
|
291 |
+
_e( '<p class="left-margin"> 1. Sometimes, simple page reload fixes any temporary issues. No kidding!</p>', 'astra-sites' );
|
292 |
+
|
293 |
+
_e( '<p class="left-margin"> 2. If that does not work, you will need to talk to your server administrator and check if demo server is being blocked by the firewall!</p>', 'astra-sites' );
|
294 |
+
|
295 |
+
/* translators: %1$s is a support link */
|
296 |
+
printf( __( '<p>If that does not help, please open up a <a href="%1$s" target="_blank">Support Ticket</a> and we will be glad take a closer look for you.</p>', 'astra-sites' ), esc_url( 'https://wpastra.com/support/?utm_source=demo-import-panel&utm_campaign=astra-sites&utm_medium=api-request-failed' ) );
|
297 |
+
?>
|
298 |
+
</div>
|
299 |
+
</script>
|
300 |
+
|
301 |
+
<?php
|
302 |
+
/**
|
303 |
+
* TMPL - Site Down
|
304 |
+
*/
|
305 |
+
?>
|
306 |
+
<script type="text/template" id="tmpl-astra-site-down">
|
307 |
+
<div class="postbox astra-site-down">
|
308 |
+
<h2><?php _e( 'Under Maintenance..', 'astra-sites' ); ?></h2>
|
309 |
+
<p><?php _e( 'If you are seeing this message, most likely our servers are under routine maintenance and we will be back shortly. ', 'astra-sites' ); ?></p>
|
310 |
+
<p><?php _e( 'In rare case, it is possible your website is having trouble connecting with ours. If you need help, please feel free to get in touch with us from our website.', 'astra-sites' ); ?></p>
|
311 |
+
</div>
|
312 |
+
</script>
|
313 |
+
|
314 |
+
<?php
|
315 |
+
/**
|
316 |
+
* TMPL - Filters
|
317 |
+
*/
|
318 |
+
?>
|
319 |
+
<script type="text/template" id="tmpl-astra-site-filters">
|
320 |
+
|
321 |
+
<# if ( data ) { #>
|
322 |
+
|
323 |
+
<ul class="{{ data.args.wrapper_class }} {{ data.args.class }}">
|
324 |
+
|
325 |
+
<# if ( data.args.show_all ) { #>
|
326 |
+
<li>
|
327 |
+
<a href="#" data-group="all"> All </a>
|
328 |
+
</li>
|
329 |
+
<# } #>
|
330 |
+
|
331 |
+
<# for ( key in data.items ) { #>
|
332 |
+
<# if ( data.items[ key ].count ) { #>
|
333 |
+
<li>
|
334 |
+
<a href="#" data-group='{{ data.items[ key ].id }}' class="{{ data.items[ key ].name }}">
|
335 |
+
{{ data.items[ key ].name }}
|
336 |
+
</a>
|
337 |
+
</li>
|
338 |
+
<# } #>
|
339 |
+
<# } #>
|
340 |
+
|
341 |
+
</ul>
|
342 |
+
<# } #>
|
343 |
+
</script>
|
344 |
+
|
345 |
+
<?php
|
346 |
+
/**
|
347 |
+
* TMPL - List
|
348 |
+
*/
|
349 |
+
?>
|
350 |
+
<script type="text/template" id="tmpl-astra-sites-list">
|
351 |
+
|
352 |
+
<# if ( data.items.length ) { #>
|
353 |
+
<# for ( key in data.items ) { #>
|
354 |
+
|
355 |
+
<div class="theme astra-theme site-single {{ data.items[ key ].status }}" tabindex="0" aria-describedby="astra-theme-action astra-theme-name"
|
356 |
+
data-demo-id="{{{ data.items[ key ].id }}}"
|
357 |
+
data-demo-type="{{{ data.items[ key ]['astra-site-type'] }}}"
|
358 |
+
data-demo-url="{{{ data.items[ key ]['astra-site-url'] }}}"
|
359 |
+
data-demo-api="{{{ data.items[ key ]['_links']['self'][0]['href'] }}}"
|
360 |
+
data-demo-name="{{{ data.items[ key ].title.rendered }}}"
|
361 |
+
data-demo-slug="{{{ data.items[ key ].slug }}}"
|
362 |
+
data-screenshot="{{{ data.items[ key ]['featured-image-url'] }}}"
|
363 |
+
data-content="{{{ data.items[ key ].content.rendered }}}"
|
364 |
+
data-required-plugins="{{ JSON.stringify( data.items[ key ]['required-plugins'] ) }}"
|
365 |
+
data-groups=["{{ data.items[ key ].tags }}"]>
|
366 |
+
<input type="hidden" class="astra-site-options" value="{{ JSON.stringify(data.items[ key ]['astra-site-options-data'] ) }}" />
|
367 |
+
<input type="hidden" class="astra-enabled-extensions" value="{{ JSON.stringify(data.items[ key ]['astra-enabled-extensions'] ) }}" />
|
368 |
+
|
369 |
+
<div class="inner">
|
370 |
+
<span class="site-preview" data-href="{{ data.items[ key ]['astra-site-url'] }}?TB_iframe=true&width=600&height=550" data-title="{{ data.items[ key ].title.rendered }}">
|
371 |
+
<div class="theme-screenshot" style="background-image: url('{{ data.items[ key ]['featured-image-url'] }}');"></div>
|
372 |
+
</span>
|
373 |
+
<# if ( data.items[ key ]['astra-site-type'] ) { #>
|
374 |
+
<# var type = ( data.items[ key ]['astra-site-type'] !== 'premium' ) ? ( data.items[ key ]['astra-site-type'] ) : 'agency'; #>
|
375 |
+
<span class="site-type {{data.items[ key ]['astra-site-type']}}">{{ type }}</span>
|
376 |
+
<# } #>
|
377 |
+
<# if ( data.items[ key ].status ) { #>
|
378 |
+
<span class="status {{data.items[ key ].status}}">{{data.items[ key ].status}}</span>
|
379 |
+
<# } #>
|
380 |
+
<div class="theme-id-container">
|
381 |
+
<h3 class="theme-name" id="astra-theme-name"> {{{ data.items[ key ].title.rendered }}} </h3>
|
382 |
+
<div class="theme-actions">
|
383 |
+
<button class="button-primary button preview install-theme-preview"><?php esc_html_e( 'Preview', 'astra-sites' ); ?></button>
|
384 |
+
</div>
|
385 |
+
</div>
|
386 |
+
</div>
|
387 |
+
</div>
|
388 |
+
<# } #>
|
389 |
+
<# } else { #>
|
390 |
+
<p class="no-themes" style="display:block;">
|
391 |
+
<?php _e( 'No Demos found, Try a different search.', 'astra-sites' ); ?>
|
392 |
+
<span class="description">
|
393 |
+
<?php
|
394 |
+
/* translators: %1$s External Link */
|
395 |
+
printf( __( 'Don\'t see a site that you would like to import?<br><a target="_blank" href="%1$s">Please suggest us!</a>', 'astra-sites' ), esc_url( 'https://wpastra.com/sites-suggestions/?utm_source=demo-import-panel&utm_campaign=astra-sites&utm_medium=suggestions' ) );
|
396 |
+
?>
|
397 |
+
</span>
|
398 |
+
</p>
|
399 |
+
<# } #>
|
400 |
+
</script>
|
401 |
+
|
402 |
+
<?php
|
403 |
+
/**
|
404 |
+
* TMPL - List
|
405 |
+
*/
|
406 |
+
?>
|
407 |
+
<script type="text/template" id="tmpl-astra-sites-suggestions">
|
408 |
+
<div class="theme astra-theme site-single astra-sites-suggestions">
|
409 |
+
<div class="inner">
|
410 |
+
<p>
|
411 |
+
<?php
|
412 |
+
/* translators: %1$s External Link */
|
413 |
+
printf( __( 'Don\'t see a site that you would like to import?<br><a target="_blank" href="%1$s">Please suggest us!</a>', 'astra-sites' ), esc_url( 'https://wpastra.com/sites-suggestions/?utm_source=demo-import-panel&utm_campaign=astra-sites&utm_medium=suggestions' ) );
|
414 |
+
?>
|
415 |
+
</p>
|
416 |
+
</div>
|
417 |
+
</div>
|
418 |
+
</script>
|
419 |
+
<?php
|
420 |
+
wp_print_admin_notice_templates();
|
languages/astra-sites.pot
CHANGED
@@ -3,9 +3,9 @@
|
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
"Project-Id-Version: Astra Starter Sites – Elementor, Beaver Builder & "
|
6 |
-
"Gutenberg Templates 1.3.
|
7 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/astra-sites\n"
|
8 |
-
"POT-Creation-Date: 2019-04-
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=utf-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -23,7 +23,7 @@ msgstr ""
|
|
23 |
"X-Poedit-SearchPath-0: .\n"
|
24 |
"X-Poedit-Bookmarks: \n"
|
25 |
"X-Textdomain-Support: yes\n"
|
26 |
-
"X-Generator: grunt-wp-
|
27 |
|
28 |
#: astra-sites.php:18
|
29 |
msgid "Astra Sites"
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
"Project-Id-Version: Astra Starter Sites – Elementor, Beaver Builder & "
|
6 |
+
"Gutenberg Templates 1.3.8\n"
|
7 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/astra-sites\n"
|
8 |
+
"POT-Creation-Date: 2019-04-26 09:22:10+00:00\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=utf-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
23 |
"X-Poedit-SearchPath-0: .\n"
|
24 |
"X-Poedit-Bookmarks: \n"
|
25 |
"X-Textdomain-Support: yes\n"
|
26 |
+
"X-Generator: grunt-wp-i18n1.0.0\n"
|
27 |
|
28 |
#: astra-sites.php:18
|
29 |
msgid "Astra Sites"
|
readme.txt
CHANGED
@@ -5,7 +5,7 @@ Tags: Elementor,Beaver Builder,Templates,Gutenberg,Astra Starter Sites
|
|
5 |
Requires at least: 4.4
|
6 |
Requires PHP: 5.3
|
7 |
Tested up to: 5.1.1
|
8 |
-
Stable tag: 1.3.
|
9 |
License: GPLv2 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
|
@@ -117,6 +117,10 @@ We are open to suggestions and would love to work on topics that our users are l
|
|
117 |
|
118 |
== Changelog ==
|
119 |
|
|
|
|
|
|
|
|
|
120 |
v1.3.7 - 23-April-2019
|
121 |
- Fix: Compatibility to WP Forms in Header and Footer of the demo site for Elementor.
|
122 |
|
5 |
Requires at least: 4.4
|
6 |
Requires PHP: 5.3
|
7 |
Tested up to: 5.1.1
|
8 |
+
Stable tag: 1.3.8
|
9 |
License: GPLv2 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
|
117 |
|
118 |
== Changelog ==
|
119 |
|
120 |
+
v1.3.8 - 26-April-2019
|
121 |
+
- Improvement: Improve logic for importing images.
|
122 |
+
- Fix: Implemented better caching technique for Astra Sites.
|
123 |
+
|
124 |
v1.3.7 - 23-April-2019
|
125 |
- Fix: Compatibility to WP Forms in Header and Footer of the demo site for Elementor.
|
126 |
|