PluginProbe
Post Grid Gutenberg Blocks – PostX / 4.1.25
Post Grid Gutenberg Blocks – PostX v4.1.25
5.0.39 5.0.38 5.0.37 5.0.36 5.0.35 5.0.34 5.0.33 5.0.32 5.0.31 5.0.30 5.0.29 5.0.28 5.0.27 5.0.26 5.0.25 5.0.23 5.0.24 5.0.22 5.0.21 5.0.20 5.0.19 5.0.18 5.0.17 2.1.1 2.1.2 All 237 releases
ultimate-post / classes / Importer.php

Importer.php in Post Grid Gutenberg Blocks – PostX 4.1.25, at classes/Importer.php

770 lines 33.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Importer System
4 *
5 * @package ULTP\Importer
6 * @since 4.0.0
7 */
8 namespace ULTP;
9
10 defined('ABSPATH') || exit;
11
12 /**
13 * Importer class.
14 */
15
16 class Importer {
17 /**
18 * Setup class.
19 *
20 * @since 4.0.0
21 */
22 public function __construct() {
23 add_action('wp_ajax_install_required_plugin', array($this, 'install_required_plugin_callback'));
24 add_action('rest_api_init', array($this, 'get_starter_rest_endpoint_callback'));
25 }
26
27 /**
28 * REST API Action
29 * @since 4.0.0
30 */
31 public function get_starter_rest_endpoint_callback() {
32 register_rest_route(
33 'ultp/v3',
34 '/single_page_import/',
35 array(
36 array(
37 'methods' => 'POST',
38 'callback' => array($this, 'single_page_import'),
39 'permission_callback' => function () {
40 return current_user_can('edit_others_posts');
41 },
42 'args' => array()
43 )
44 )
45 );
46 register_rest_route(
47 'ultp/v3',
48 '/deletepost_getnewsletters/',
49 array(
50 array(
51 'methods' => 'POST',
52 'callback' => array($this, 'deletepost_getnewsletters'),
53 'permission_callback' => function () {
54 return current_user_can('manage_options');
55 },
56 'args' => array()
57 )
58 )
59 );
60 register_rest_route(
61 'ultp/v3',
62 '/starter_import_content/',
63 array(
64 array(
65 'methods' => 'POST',
66 'callback' => array($this, 'starter_import_content_callback'),
67 'permission_callback' => function () {
68 return current_user_can('manage_options');
69 },
70 'args' => array()
71 )
72 )
73 );
74 register_rest_route(
75 'ultp/v3',
76 '/starter_dummy_post/',
77 array(
78 array(
79 'methods' => 'POST',
80 'callback' => array($this, 'starter_dummy_post_callback'),
81 'permission_callback' => function () {
82 return current_user_can('manage_options');
83 },
84 'args' => array()
85 )
86 )
87 );
88 }
89
90 /**
91 * Plugin Installation
92 * @since 4.0.0
93 */
94 public function install_required_plugin_callback() {
95 if ( !current_user_can('install_plugins') ) {
96 return wp_send_json_success('You are not allowed to install plugin');
97 }
98 if ( !wp_verify_nonce( sanitize_key( wp_unslash($_REQUEST['wpnonce']) ), 'ultp-nonce') ) {
99 return '';
100 }
101 if ( !current_user_can('install_plugins') ) {
102 return wp_send_json_success('You are not allowed to install plugin');
103 }
104
105 if ( ! function_exists( 'get_plugins' ) ) {
106 require_once ABSPATH . 'wp-admin/includes/plugin.php';
107 }
108 if ( ! function_exists( 'plugins_api' ) ) {
109 require_once( ABSPATH . 'wp-admin/includes/plugin-install.php' );
110 }
111 if ( ! class_exists( 'WP_Upgrader' ) ) {
112 require_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' );
113 }
114
115 $msg = '';
116
117 $all_plugins = get_plugins();
118 $plugin = ultimate_post()->ultp_rest_sanitize_params(json_decode(stripslashes($_POST['plugin'])));
119
120 if ( $plugin && isset($all_plugins) && is_array($all_plugins) && array_key_exists($plugin->path, $all_plugins) ) {
121 $activated_plugins = apply_filters( 'active_plugins', get_option( 'active_plugins' ) );
122 if ( is_array($activated_plugins) && in_array($plugin->path, $activated_plugins) ) {
123 $msg = '_already_installed_activated';
124 } else {
125 $activate = activate_plugin( $plugin->path, '', false );
126 $msg = is_wp_error( $activate ) ? '_only_activated_error' : '_only_activated_success' ;
127 }
128 } else {
129 $upgrader = new \Plugin_Upgrader( new \WP_Ajax_Upgrader_Skin() );
130 if ( isset($plugin->download) ) {
131 // Download
132 $link = $api->download;
133 } else {
134 // From Org
135 $api = plugins_api(
136 'plugin_information',
137 array(
138 'slug' => explode('/', $plugin->path)[0],
139 'fields' => array(
140 'short_description' => false,
141 'sections' => false,
142 'requires' => false,
143 'rating' => false,
144 'ratings' => false,
145 'downloaded' => false,
146 'last_updated' => false,
147 'added' => false,
148 'tags' => false,
149 'compatibility' => false,
150 'homepage' => false,
151 'donate_link' => false,
152 ),
153 )
154 );
155 $link = $api->download_link;
156 }
157 $installed = $upgrader->install( $link );
158 $activate = activate_plugin( $plugin->path, '', false );
159
160 $msg = is_wp_error( $activate ) ? $link : '_download_activation_success' ;
161 }
162
163 if ( $msg == '_download_activation_error' || $msg == '_only_activated_error' ) {
164 wp_send_json_error($msg);
165 } else {
166 wp_send_json_success($msg);
167 }
168 }
169
170 /**
171 * starter_dummy_post_callback
172 * @since 4.0.0
173 */
174 function starter_dummy_post_callback($server) {
175 $post = $server->get_params();
176 $api_endpoint = isset($post['api_endpoint']) ? sanitize_text_field($post['api_endpoint']) : '';
177 $import_dummy = isset($post['importDummy']) ? sanitize_text_field($post['importDummy']) : '';
178
179 $response = wp_remote_get(
180 $api_endpoint.'/wp-json/importer/site_all_posts',
181 array(
182 'method' => 'POST',
183 'timeout' => 120,
184 'body' => array(
185 'type' => 'site_posts',
186 'license' => get_option('edd_ultp_license_key'),
187 'ultp_ver' => ULTP_VER,
188 )
189 )
190 );
191 if ( is_wp_error( $response ) ) {
192 return rest_ensure_response([
193 'success' => false,
194 'response_data' => $response,
195 ]);
196 }
197 $response_data = json_decode($response['body']);
198 if( !$response_data->success ) {
199 return rest_ensure_response([
200 'success' => false,
201 'returns' => $response_data
202 ]);
203 }
204
205 //Dummy Post and Taxonomy creation
206 $importable_posts = $response_data->posts;
207 $created_posts = $import_dummy != 'no' ? $this->starter_pack_dummy_post_creation($importable_posts) : [];
208 return rest_ensure_response([
209 'success' => true,
210 'created_posts' => $created_posts
211 ]);
212 }
213
214
215 /**
216 * Starter Pack site import
217 * @since 4.0.0
218 */
219 function starter_import_content_callback($server) {
220 $post = $server->get_params();
221 $api_endpoint = isset($post['api_endpoint']) ? sanitize_text_field($post['api_endpoint']) : '';
222
223 // draft existing builder template
224 $builder_parsed_args = array(
225 'post_type' => 'ultp_builder',
226 'post_status' => 'publish',
227 'posts_per_page' => -1,
228 );
229 $builder_posts = new \WP_Query( $builder_parsed_args );
230 if( is_array($builder_posts->posts) && !empty($builder_posts->posts) ) {
231 foreach ( $builder_posts->posts as $post ) {
232 wp_update_post(array(
233 'ID' => $post->ID,
234 'post_status' => 'draft'
235 ));
236 }
237 }
238
239 $response = wp_remote_get(
240 $api_endpoint.'/wp-json/importer/single',
241 array(
242 'method' => 'POST',
243 'timeout' => 120,
244 'body' => array(
245 'license' => get_option('edd_ultp_license_key'),
246 'ultp_ver' => ULTP_VER,
247 )
248 )
249 );
250 if ( is_wp_error( $response ) ) {
251 return rest_ensure_response([
252 'success' => false,
253 'response_data' => $response,
254 ]);
255 }
256 $response_data = json_decode($response['body']);
257 if( !$response_data->success ) {
258 return rest_ensure_response([
259 'success' => false,
260 'response_data' => $response_data,
261 ]);
262 }
263
264 // site logo handle
265 if ( !get_option('site_logo', '') && isset($response_data->site_logo) && $response_data->site_logo ) {
266 update_option('site_logo', $this->upload_post_cat_media( $response_data->site_logo, '', 'Site Logo'));
267
268 if ( isset($response_data->dark_logo) && $response_data->dark_logo ) {
269 $dark_logo = $this->upload_post_cat_media( $response_data->dark_logo, '', 'Site Dark Logo');
270 update_option('ultp_site_dark_logo', wp_get_attachment_url( $dark_logo ));
271 }
272 }
273
274 // Templates Insertion
275 $inserted_meta = [];
276 $inserted_pages = [];
277 $inserted_header_footer = [];
278 $importable_pages = $response_data->content;
279 $excludepages = json_decode(ultimate_post()->ultp_rest_sanitize_params(stripslashes($post['excludepages'])));
280
281 if ( !empty($importable_pages) ) {
282 foreach ($importable_pages as $key => $val) {
283 $title = $val->name;
284 if ( is_array($excludepages) && !in_array($title, $excludepages) ) {
285 $post_type = $val->type;
286 $p_content = str_replace(['u0022', 'u002d'], ['\u0022', '\u002d'], $val->content);
287 $p_content = str_replace(['u003c', 'u003e', 'currentPostId'], ['<', '>', 'current_PostId'], $p_content);
288 $post_id = wp_insert_post(array(
289 'post_title' => $title,
290 'post_type' => $post_type,
291 'post_status' => 'publish',
292 'post_content' => $p_content
293 ));
294 if ( $post_id ) {
295 update_post_meta($post_id, '__ultp_starter_pack_post', true);
296 $inserted_pages[$post_id] = $title;
297
298 if ( isset($val->ultp_template) && $val->ultp_template === 'ultp_page_template' ) {
299 update_post_meta($post_id, '_wp_page_template', 'ultp_page_template');
300 }
301 if ( isset($val->home_page) && $val->home_page == 'home_page' ) {
302 if ( get_option('show_on_front', true) != 'page' ) {
303 update_option('show_on_front' , 'page');
304 }
305 update_option('page_on_front' , $post_id);
306 $inserted_header_footer['home_page'] = $post_id;
307 }
308 if ( isset($val->ultp_builder_type) && ( $val->ultp_builder_type == 'header' || $val->ultp_builder_type == 'footer' ) ) {
309 $inserted_header_footer[] = $post_id;
310 }
311 if ( $post_type == 'ultp_builder' && $val->ultp_builder_type ) {
312 $conditions_settings = get_option('ultp_builder_conditions', array());
313 $conditions = $response_data->conditions;
314 $ultp_builder_type = $val->ultp_builder_type;
315 $ultp_builder_id = $val->id;
316 $ultp_builder_conditions = $conditions->$ultp_builder_type;
317 $ultp_builder_conditions = $ultp_builder_conditions->$ultp_builder_id;
318 $conditions_settings[$ultp_builder_type][$post_id] = $ultp_builder_conditions;
319
320 update_post_meta($post_id, '__ultp_builder_type', $val->ultp_builder_type);
321 update_option('ultp_builder_conditions', $conditions_settings);
322 }
323 if ( isset($val->meta) && is_array($val->meta) ) {
324 foreach ($val->meta as $k => $v) {
325 update_post_meta( $post_id, $k, str_replace(['u0022', 'u002d'], ['\u0022', '\u002d'], $v) );
326 }
327 }
328 if ( isset($val->_ultp_css) ) {
329 $this->save_post_block_css( $post_id, str_replace(['u0022', 'u002d'], ['\u0022', '\u002d'], $val->_ultp_css), '' );
330 }
331 $inserted_meta[$post_id] = $val->_ultp_css;
332 }
333 }
334 }
335 }
336
337 // Menu Creation
338 $menuCreated = array();
339 $menu_item_parent = array();
340 $response_menu = $response_data->menu;
341 if ( !empty($response_menu) && is_array($response_menu)) {
342 foreach ($response_menu as $key => $menu) {
343 $menu_exists = wp_get_nav_menu_object( $menu->title );
344 if ( $menu_exists ) {
345 wp_delete_term($menu_exists->term_id, $menu_exists->taxonomy);
346 }
347 $menu_id = wp_create_nav_menu($menu->title);
348 if ( isset($menu->items) && $menu_id && !empty($menu->items) ) {
349 foreach ($menu->items as $key => $v) {
350 $inserted = array_search($v->title, $inserted_pages);
351 if ( $inserted || $v->type == 'custom' || $v->type == 'category' ) {
352 if (
353 ( $v->type == 'category' && get_term_by('name', $v->title, 'category') )
354 || $v->type != 'category'
355 ) {
356 $item = array(
357 'menu-item-title' => $v->title,
358 'menu-item-status' => 'publish'
359 );
360 $item['menu-item-object'] = $v->type;
361 $item['menu-item-type'] = $v->post_type;
362 if ( isset($v->menu_item_parent) && $v->menu_item_parent ) {
363 $parent_id = $this->find_parent_nav_item(wp_get_nav_menu_items($menu_id), $v->menu_item_parent);
364 $menu_item_parent[$v->title] = $parent_id;
365 $item['menu-item-parent-id'] = $parent_id;
366 }
367 if ( $v->type == 'custom' ) {
368 $item['menu-item-url'] = $v->url ? $v->url : home_url('/');
369 } else if( $v->type == 'category' ) {
370 $fetched_term = get_term_by('name', $v->title, 'category');
371 if ( $fetched_term ) {
372 $item['menu-item-object-id'] = $fetched_term->term_id;
373 }
374 } else {
375 $item['menu-item-object-id'] = $inserted;
376 }
377 wp_update_nav_menu_item( $menu_id, 0, $item );
378 }
379 }
380 }
381 update_term_meta($menu_id, '__ultp_starter_pack_term', 'postx_term');
382 $menuCreated[$menu_id] = $item;
383 }
384 }
385 }
386
387 // Navigation Creation for Header Footer Builder
388 $navCreated = array();
389 $navigation = $response_data->navigation; // returned from importer site
390 if ( !empty($inserted_header_footer) && !empty($navigation) ) {
391 foreach ($inserted_header_footer as $key => $builderID) {
392 $builder_post = get_post($builderID);
393 $builder_post_content = $builder_post->post_content;
394 foreach ($navigation as $key => $v) {
395 $site_navID = $v->id;
396 if ( strpos($builder_post_content, 'wp:navigation') > -1 && ( strpos($builder_post_content, '{"ref":'.$site_navID.',') > -1 || strpos($builder_post_content, '{"ref":'.$site_navID.'}') > -1 ) ) {
397
398 $current_parsed_args = array(
399 'post_type' => 'wp_navigation',
400 'post_status' => 'publish',
401 'orderby' => 'date',
402 'order' => 'ASC',
403 'posts_per_page' => -1
404 );
405 $navigation_current_posts = new \WP_Query( $current_parsed_args );
406 $navigation_current_posts = $navigation_current_posts->posts;
407
408 // check for currently same navigation exist or not
409 $new_navID = '';
410 if ( !$new_navID ) {
411 $menu_exists = wp_get_nav_menu_object( $v->post_title );
412 if ( $menu_exists ) {
413 $menu_blocks = \WP_Classic_To_Block_Menu_Converter::convert( $menu_exists );
414 $new_navID = wp_insert_post(
415 array(
416 'post_content' => $menu_blocks,
417 'post_title' => $menu_exists->name,
418 'post_name' => $menu_exists->slug,
419 'post_status' => 'publish',
420 'post_type' => 'wp_navigation',
421 )
422 );
423 update_post_meta($new_navID, '__ultp_starter_pack_post', true);
424 }
425 }
426 if ( strpos($builder_post_content, '{"ref":'.$site_navID.',') > -1 ) {
427 $builder_post_content = str_replace('{"ref":'.$site_navID.',', '{"ref":'.$new_navID.',', $builder_post_content);
428 } else if ( strpos($builder_post_content, '{"ref":'.$site_navID.'}') ) {
429 $builder_post_content = str_replace('{"ref":'.$site_navID.'}', '{"ref":'.$new_navID.'}', $builder_post_content);
430 }
431
432 wp_update_post(array(
433 'ID' => $builderID,
434 'post_content' => str_replace(['u0022', 'u002d'], ['\u0022', '\u002d'], $builder_post_content)
435 ));
436 $navCreated[] = $new_navID;
437 }
438 }
439 }
440 }
441
442 // Other Plugin Content creation
443 $other_plugin_content = $response_data->other_plugin_content;
444 $contact_forms = $other_plugin_content->contact_form7;
445 $mc4wp = $other_plugin_content->mc4wp;
446
447 // contact form 7 post create
448 if ( is_array($contact_forms) && !empty($contact_forms) ) {
449 foreach ( $contact_forms as $post ) {
450 $post_id = wp_insert_post(array(
451 'post_title' => $post->post_title,
452 'post_type' => 'wpcf7_contact_form',
453 'post_status' => 'publish',
454 'post_content' => str_replace(['u002d', '<wordpress@postxkit.wpxpo.com>'], ['\u002d', ''], $post->post_content)
455 ));
456 update_post_meta($post_id, '_form', $post->_form);
457 update_post_meta($post_id, '_hash', $post->_hash);
458 update_post_meta($post_id, '__ultp_starter_pack_post', true);
459 }
460 }
461
462 // mailchimp post create
463 if ( !empty($inserted_pages) && !empty($mc4wp) ) {
464 foreach ($inserted_pages as $id => $p_t) {
465 $current_post = get_post($id);
466 $current_post_content = $current_post->post_content;
467 foreach ($mc4wp as $key => $v) {
468 $parsed_args = array(
469 'post_type' => 'mc4wp-form',
470 'post_status' => 'publish',
471 'posts_per_page' => -1,
472 );
473 $mc4wp_forms_data = new \WP_Query( $parsed_args );
474 $mc4wp_forms_current_posts = $mc4wp_forms_data->posts;
475
476 $site_ID = $v->id;
477 if ( strpos($current_post_content, '[mc4wp_form id='.$site_ID.']') > -1 ) {
478 $new_ID = '';
479 // check for same mailchimp post
480 if ( !empty($mc4wp_forms_current_posts) ) {
481 foreach( $mc4wp_forms_current_posts as $key => $val) {
482 if($val->post_title == $v->post_title) {
483 $new_ID = $val->ID;
484 }
485 }
486 }
487 if ( !$new_ID ) {
488 $new_ID = wp_insert_post(array(
489 'post_title' => $v->post_title,
490 'post_type' => 'mc4wp-form',
491 'post_status' => 'publish',
492 'post_content' => $v->post_content
493 ));
494 update_post_meta($new_ID, '__ultp_starter_pack_post', true);
495 }
496
497 $current_post_content = str_replace('[mc4wp_form id='.$site_ID.']', '[mc4wp_form id='.$new_ID.']', $current_post_content);
498 wp_update_post(array(
499 'ID' => $id,
500 'post_content' => str_replace(['u0022', 'u002d'], ['\u0022', '\u002d'], $current_post_content)
501 ));
502 }
503
504 }
505 }
506 }
507
508 return rest_ensure_response([
509 'success' => true,
510 'inserted_pages' => $inserted_pages,
511 'inserted_meta' => $inserted_meta,
512 'navCreated' => $navCreated,
513 'menuCreated' => $menuCreated,
514 'menu_item_parent' => $menu_item_parent,
515 'inserted_header_footer' => $inserted_header_footer,
516 ]);
517 }
518
519 /**
520 * Find Menu Parent item
521 * @since 4.0.0
522 */
523 public function find_parent_nav_item($menu_items, $title) {
524 if ( $menu_items ) {
525 foreach ($menu_items as $menu_item) {
526 if ( $menu_item->title == $title ) {
527 return $menu_item->ID;
528 }
529 }
530 }
531 return 0;
532 }
533
534 /**
535 * Save CSS of pages
536 * @since 4.0.0
537 */
538 public function save_post_block_css($id, $css='', $type='') {
539 try {
540 global $wp_filesystem;
541 if ( ! $wp_filesystem ) {
542 require_once( ABSPATH . 'wp-admin/includes/file.php' );
543 }
544
545 $upload_dir_url = wp_upload_dir();
546 $dir = trailingslashit($upload_dir_url['basedir']) . 'ultimate-post/';
547
548 $post_id = (int) $id;
549 $filename = "ultp-css-{$post_id}.css";
550 $ultp_block_css = $css;
551
552 if ( $ultp_block_css ) {
553 // Set Saving ID for Clean Cache
554 ultimate_post()->set_setting('save_version', wp_rand(1, 1000));
555
556 update_post_meta($post_id, '_ultp_active', 'yes');
557
558 WP_Filesystem( false, $upload_dir_url['basedir'], true );
559 if ( ! $wp_filesystem->is_dir( $dir ) ) {
560 $wp_filesystem->mkdir( $dir );
561 }
562 if ( ! $wp_filesystem->put_contents( $dir . $filename, $ultp_block_css ) ) {
563 throw new Exception(__('CSS can not be saved due to permission!!!', 'ultimate-post')); //phpcs:ignore
564 }
565 update_post_meta($post_id, '_ultp_css', $ultp_block_css);
566 return ['success'=>true, 'message'=>__('PostX css file has been updated.', 'ultimate-post')];
567 }
568 if ( $type == 'delete' && file_exists($dir.$filename) ) {
569 wp_delete_file($dir.$filename);
570 }
571 } catch ( Exception $e ) {
572 return [ 'success'=> false, 'message'=> $e->getMessage() ];
573 }
574 }
575
576 /**
577 * Delete previos site import post/pages
578 * @since 4.0.0
579 */
580 public function deletepost_getnewsletters($server) {
581 $post = $server->get_params();
582 $deletePrevious = isset($post['deletePrevious']) ? sanitize_text_field($post['deletePrevious']) : '';
583 $get_newsletter = isset($post['get_newsletter']) ? sanitize_text_field($post['get_newsletter']) : '';
584 $deleted_terms = [];
585 $deleted_posts= [];
586 if ( $deletePrevious == 'yes' ) {
587 $site_logo = get_option('site_logo', '');
588 global $wpdb;
589 $post_ids = $wpdb->get_col($wpdb->prepare("SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key='__ultp_starter_pack_post'"));
590 $terms = $wpdb->get_col($wpdb->prepare("SELECT term_id FROM {$wpdb->termmeta} WHERE meta_key='__ultp_starter_pack_term'"));
591
592 if ( isset( $post_ids ) && is_array( $post_ids ) ) {
593 foreach ( $post_ids as $post_id ) {
594 if ( get_post_type( $post_id ) == 'ultp_builder' ) {
595 $conditions = get_option('ultp_builder_conditions', array());
596 $builder_type = get_post_meta( $post_id, '__ultp_builder_type', true );
597 if ( isset($conditions[$builder_type][$post_id]) ) {
598 unset($conditions[$builder_type][$post_id]);
599 update_option('ultp_builder_conditions', $conditions);
600 }
601 }
602 if ( $site_logo == $post_id ) {
603 update_option('site_logo', '');
604 }
605 $deleted_posts[] = $post_id;
606 wp_delete_post( $post_id, true );
607 $this->save_post_block_css( $post_id, '', 'delete' );
608 }
609 }
610 if ( isset( $terms ) && is_array( $terms ) ) {
611 foreach ( $terms as $term_id ) {
612 $deleted_terms[] = $term_id;
613 $term = get_term( $term_id );
614 wp_delete_term( $term_id, $term->taxonomy );
615 }
616 }
617 }
618 if ( $get_newsletter == 'yes' ) {
619 require_once ULTP_PATH.'classes/Deactive.php';
620 $obj = new \ULTP\Deactive();
621 $obj->send_plugin_data('postx_starter_pack', '');
622 }
623
624 return rest_ensure_response([
625 'success' => true,
626 'term' => $deleted_terms,
627 'posts' => $deleted_posts
628 ]);
629 }
630
631 /**
632 * Import Single Template
633 * @since 4.0.0
634 */
635 public function single_page_import($server) {
636 $post = $server->get_params();
637 $id = isset($post['ID']) ? sanitize_text_field($post['ID']) : '';
638 $api_endpoint = isset($post['api_endpoint']) ? sanitize_text_field($post['api_endpoint']) : '';
639
640 if ( $id && $api_endpoint ) {
641 $import_single = array(
642 'id' => $id,
643 'type' => 'single',
644 'license' => get_option('edd_ultp_license_key'),
645 'ultp_ver' => ULTP_VER,
646 );
647 $response = wp_remote_get(
648 $api_endpoint.'/wp-json/importer/single',
649 array(
650 'method' => 'POST',
651 'timeout' => 120,
652 'body' => $import_single
653 )
654 );
655 $response_data = json_decode($response['body']);
656 if ( !$response_data->success ) {
657 wp_send_json([
658 'success' => false,
659 ]);
660 }
661 $content = $response_data->content[0];
662 return rest_ensure_response([
663 'success' => true,
664 'content' => $content,
665 ]);
666
667 }
668 }
669
670 /**
671 * Create dummy posts
672 * @since 4.0.0
673 */
674 public function starter_pack_dummy_post_creation($importable_posts) {
675 $added_posts = [];
676 if ( is_array($importable_posts) && !empty($importable_posts) ) {
677 foreach ( $importable_posts as $post ) {
678 $post_id = wp_insert_post(array(
679 'post_title' => $post->post_title,
680 'post_type' => 'post',
681 'post_status' => 'publish',
682 'post_content' => str_replace('u002d', '\u002d', $post->post_content)
683 ));
684 $image_id = $this->upload_post_cat_media($post->img_src, $post_id, $post->post_title);
685 set_post_thumbnail( $post_id, $image_id );
686
687 update_post_meta($post_id, '__ultp_starter_pack_post', true);
688 if ( isset($post->_ultp_css) && $post->_ultp_css ) {
689 $this->save_post_block_css( $post_id, str_replace(['u0022', 'u002d'], ['\u0022', '\u002d'], $post->_ultp_css), '' );
690 }
691 $post_category = $post->post_category;
692 $k = 0;
693 $cat_ids = [];
694 if ( is_array($post_category) && !empty($post_category) ) {
695 foreach ( $post_category as $i => $cat ) {
696 $cat_id = $this->starter_pack_dummy_taxonomy_creation($cat->name, $cat->slug, $cat->img_src, 'category');
697 wp_set_post_terms($post_id, $cat_id, 'category', $k == 0 ? false : true );
698 $k++;
699 $cat_ids[] = $cat_id;
700 }
701 }
702 $post_tags = $post->post_tags;
703 $tag_ids = [];
704 $j = 0;
705 if ( is_array($post_tags) && !empty($post_tags) ) {
706 foreach ( $post_tags as $i => $tag ) {
707 $tag_id = wp_set_post_terms($post_id, $tag->slug, 'post_tag', $j == 0 ? false : true );
708 if ( !is_wp_error($tag_id) && is_array($tag_id) && isset($tag_id[0]) ) {
709 update_term_meta($tag_id[0], '__ultp_starter_pack_term', 'postx_term');
710 $tag_ids[] = $tag_id[0];
711 }
712 $j++;
713 }
714 }
715 $added_posts[$post_id] = array(
716 'title' => $post->post_title,
717 'cat_id' => $cat_ids,
718 'tag_ids' => $tag_ids
719 );
720 }
721 }
722 return $added_posts;
723 }
724
725 /**
726 * Create dummy category of posts
727 * @since 4.0.0
728 */
729 public function starter_pack_dummy_taxonomy_creation($name, $slug, $img_src='', $taxonomy='' ) {
730 $new_taxonomy = get_term_by('slug', $slug, $taxonomy);
731 if ( !$new_taxonomy ) {
732 $new_term = wp_insert_term(
733 $name,
734 $taxonomy,
735 array(
736 'slug' => $slug,
737 )
738 );
739 if ( $new_term ) {
740 if ( $img_src ) {
741 $image_id = $this->upload_post_cat_media($img_src , '', $name);
742 update_term_meta( $new_term['term_id'], 'ultp_category_image', $image_id );
743 }
744 update_term_meta($new_term['term_id'], '__ultp_starter_pack_term', 'postx_term');
745
746 return $new_term['term_id'];
747 }
748 } else {
749 return $new_taxonomy->term_id;
750 }
751 }
752
753 /**
754 * Upload image for post/category
755 * @since 4.0.0
756 */
757 public function upload_post_cat_media($src, $post_id, $title ) {
758 if ( !$src ) {
759 return 0;
760 }
761
762 require_once(ABSPATH . 'wp-admin/includes/media.php');
763 require_once(ABSPATH . 'wp-admin/includes/file.php');
764 require_once(ABSPATH . 'wp-admin/includes/image.php');
765
766 $image_id = media_sideload_image( $src, $post_id, $title, 'id' );
767 update_post_meta($image_id, '__ultp_starter_pack_post', true);
768 return $image_id;
769 }
770 }