PluginProbe
Gutenify – Visual Site Builder Blocks & Starter Templates / 1.6.5
Gutenify – Visual Site Builder Blocks & Starter Templates v1.6.5
1.9.0 1.8.0 1.7.0 1.6.6 1.6.5 1.6.4 trunk 0.0.1 0.0.2 0.0.3 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 All 74 releases
gutenify / core / inc / rest-api / class-rest.php

class-rest.php in Gutenify – Visual Site Builder Blocks & Starter Templates 1.6.5, at core/inc/rest-api/class-rest.php

950 lines 27.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Rest API functions.
4 *
5 * @package Gutenify
6 */
7
8 if ( ! defined( 'ABSPATH' ) ) {
9 exit;
10 }
11
12 require GUTENIFY_BASE_DIR . 'core/' . 'inc/rest-api/class-template-kits.php';
13
14 /**
15 * Class Gutenify_Rest
16 */
17 class Gutenify_Rest extends WP_REST_Controller {
18 /**
19 * Namespace.
20 *
21 * @var string
22 */
23 protected $namespace = 'gutenify/v';
24
25 /**
26 * Version.
27 *
28 * @var string
29 */
30 protected $version = '1';
31
32 /**
33 * Gutenify_Rest constructor.
34 */
35 public function __construct() {
36 add_action( 'rest_api_init', array( $this, 'register_routes' ) );
37 }
38
39 /**
40 * Register rest routes.
41 */
42 public function register_routes() {
43 $namespace = $this->namespace . $this->version;
44
45 // Get Templates.
46 register_rest_route(
47 $namespace,
48 '/get_templates/',
49 array(
50 'methods' => WP_REST_Server::READABLE,
51 'callback' => array( $this, 'get_templates' ),
52 'permission_callback' => array( $this, 'update_settings_permission' ),
53 )
54 );
55
56 // Get template data.
57 register_rest_route(
58 $namespace,
59 '/get_template_data/',
60 array(
61 'methods' => WP_REST_Server::READABLE,
62 'callback' => array( $this, 'get_template_data' ),
63 'permission_callback' => array( $this, 'update_settings_permission' ),
64 )
65 );
66
67 // Get settings data.
68 register_rest_route(
69 $namespace,
70 '/get_settings/',
71 array(
72 'methods' => WP_REST_Server::READABLE,
73 'callback' => array( $this, 'get_settings' ),
74 'permission_callback' => array( $this, 'update_settings_permission' ),
75 )
76 );
77
78 // Update Settings.
79 register_rest_route(
80 $namespace,
81 '/update_settings/',
82 array(
83 'methods' => WP_REST_Server::EDITABLE,
84 'callback' => array( $this, 'update_settings' ),
85 'permission_callback' => array( $this, 'update_settings_permission' ),
86 )
87 );
88
89 // Get Templates.
90 register_rest_route(
91 $namespace,
92 '/get_template_kit/',
93 array(
94 'methods' => WP_REST_Server::READABLE,
95 'callback' => array( $this, 'get_template_kit' ),
96 'permission_callback' => array( $this, 'update_settings_permission' ),
97 )
98 );
99
100 // Get Templates.
101 register_rest_route(
102 $namespace,
103 '/get_template_kit_data/',
104 array(
105 'methods' => WP_REST_Server::READABLE,
106 'callback' => array( $this, 'get_template_kit_data' ),
107 'permission_callback' => array( $this, 'update_settings_permission' ),
108 )
109 );
110
111 // Add Kit.
112 register_rest_route(
113 $namespace,
114 '/create_kit/',
115 array(
116 'methods' => WP_REST_Server::EDITABLE,
117 'callback' => array( $this, 'create_kit' ),
118 'permission_callback' => array( $this, 'update_settings_permission' ),
119 )
120 );
121
122 // Get Templates.
123 register_rest_route(
124 $namespace,
125 '/get_site_options/',
126 array(
127 'methods' => WP_REST_Server::READABLE,
128 'callback' => array( $this, 'get_site_options' ),
129 'permission_callback' => array( $this, 'update_settings_permission' ),
130 )
131 );
132
133 // Update Site Optoins
134 register_rest_route(
135 $namespace,
136 '/update_site_options/',
137 array(
138 'methods' => WP_REST_Server::EDITABLE,
139 'callback' => array( $this, 'update_site_options' ),
140 'permission_callback' => array( $this, 'update_settings_permission' ),
141 )
142 );
143
144 // Update Site Optoins
145 register_rest_route(
146 $namespace,
147 '/update_global_styles/',
148 array(
149 'methods' => WP_REST_Server::EDITABLE,
150 'callback' => array( $this, 'update_global_styles' ),
151 'permission_callback' => array( $this, 'update_settings_permission' ),
152 )
153 );
154
155 // Get get_demo_categories.
156 register_rest_route(
157 $namespace,
158 '/get_demo_categories/',
159 array(
160 'methods' => WP_REST_Server::READABLE,
161 'callback' => array( $this, 'get_demo_categories' ),
162 'permission_callback' => array( $this, 'update_settings_permission' ),
163 )
164 );
165
166 // Get Demos.
167 register_rest_route(
168 $namespace,
169 '/get_theme_demo_list/',
170 array(
171 'methods' => WP_REST_Server::READABLE,
172 'callback' => array( $this, 'get_theme_demo_list' ),
173 'permission_callback' => array( $this, 'update_settings_permission' ),
174 )
175 );
176
177 register_rest_route(
178 $namespace,
179 '/get_theme_import_demo_set_pages/',
180 array(
181 'methods' => WP_REST_Server::EDITABLE,
182 'callback' => array( $this, 'get_theme_import_demo_set_pages' ),
183 'permission_callback' => array( $this, 'update_settings_permission' ),
184 )
185 );
186 }
187
188 /**
189 * Get templates.
190 *
191 * @return mixed
192 */
193 public function get_templates( WP_REST_Request $request ) {
194 $constants = \gutenify\Helpers::plugin_constants();
195 $plugin_main_slug = $constants['plugin_main_slug'];
196 $plugin_main_function_prefix = $constants['plugin_main_function_prefix'];
197 $plugin_main_base_url = $constants['plugin_main_base_url'];
198 $plugin_main_version = $constants['plugin_main_version'];
199 $plugin_main_post_type_prefix = $constants['plugin_main_post_type_prefix'];
200
201 $api_site = defined( 'GUTENIFY_API_URL' ) ? GUTENIFY_API_URL : 'https://api.gutenify.com/';
202 $url = $api_site . 'wp-json/gutenify-library/v1/get_library/';
203 $templates = get_transient( 'gutenify_remote_templates', false );
204
205 $data = $request->get_params();
206
207 if ( ! empty( $data['reset'] ) && 'true' === $data['reset'] ) {
208 $templates = array();
209 }
210
211 /*
212 * Get remote templates.
213 */
214 if ( ! $templates ) {
215 $requested_templates = wp_remote_get(
216 add_query_arg(
217 array(
218 'gutenify_version' => '2.19.3',
219 'gutenify_pro' => false,
220 'gutenify_pro_version' => null,
221 ),
222 $url
223 )
224 );
225
226 if ( ! is_wp_error( $requested_templates ) ) {
227 $new_templates = wp_remote_retrieve_body( $requested_templates );
228 $new_templates = json_decode( $new_templates, true );
229
230 if ( $new_templates && isset( $new_templates['response'] ) && is_array( $new_templates['response'] ) ) {
231 $templates = $new_templates['response'];
232 set_transient( 'gutenify_remote_templates', $templates, DAY_IN_SECONDS );
233 }
234 }
235 }
236
237 // Remove Pro templates from array, cause for now there is no way to check if pro addon is activated.
238 if ( $templates ) {
239 foreach ( $templates as $k => $template ) {
240 $is_pro = false;
241
242 if ( isset( $template['types'] ) && is_array( $template['types'] ) ) {
243 foreach ( $template['types'] as $type ) {
244 $is_pro = $is_pro || 'pro' === $type['slug'];
245 }
246 }
247
248 if ( $is_pro ) {
249 unset( $templates[ $k ] );
250 }
251 }
252 }
253
254 /*
255 * Get user templates from db.
256 */
257
258 // Stupid hack.
259 // https://core.trac.wordpress.org/ticket/18408.
260 global $post;
261 $backup_global_post = $post;
262 $local_templates = array();
263
264 $local_templates_query = new WP_Query(
265 array(
266 'post_type' => $plugin_main_post_type_prefix . '_template',
267 'posts_per_page' => -1,
268 'showposts' => -1,
269 'paged' => -1,
270 )
271 );
272
273 while ( $local_templates_query->have_posts() ) {
274 $local_templates_query->the_post();
275 $db_template = get_post();
276
277 $categories = array();
278 $category_terms = get_the_terms( $db_template->ID, $plugin_main_post_type_prefix . '_template_category' );
279
280 if ( $category_terms ) {
281 foreach ( $category_terms as $cat ) {
282 $categories[] = array(
283 'slug' => $cat->slug,
284 'name' => $cat->name,
285 );
286 }
287 }
288
289 $image_id = get_post_thumbnail_id( $db_template->ID );
290 $image_data = wp_get_attachment_image_src( $image_id, 'large' );
291
292 $local_templates[] = array(
293 'id' => $db_template->ID,
294 'title' => $db_template->post_title,
295 'types' => array(
296 array(
297 'slug' => 'local',
298 ),
299 ),
300 'categories' => empty( $categories ) ? false : $categories,
301 'url' => get_post_permalink( $db_template->ID ),
302 'thumbnail' => isset( $image_data[0] ) ? $image_data[0] : false,
303 'thumbnail_width' => isset( $image_data[1] ) ? $image_data[1] : false,
304 'thumbnail_height' => isset( $image_data[2] ) ? $image_data[2] : false,
305 );
306 }
307
308 // Restore the global $post as it was before custom WP_Query.
309 // phpcs:ignore
310 $post = $backup_global_post;
311
312 /*
313 * Get theme templates.
314 */
315 $theme_templates = array();
316 $theme_templates_data = array();
317
318 foreach ( glob( get_template_directory() . '/gutenify/templates/*/content.php' ) as $template ) {
319 $template_path = dirname( $template );
320 $template_url = get_template_directory_uri() . str_replace( get_template_directory(), '', $template_path );
321 $slug = basename( $template_path );
322
323 $theme_templates_data[ $slug ] = array(
324 'slug' => $slug,
325 'path' => $template_path,
326 'url' => $template_url,
327 );
328 }
329
330 // get child theme templates.
331 if ( get_stylesheet_directory() !== get_template_directory() ) {
332 foreach ( glob( get_stylesheet_directory() . '/gutenify/templates/*/content.php' ) as $template ) {
333 $template_path = dirname( $template );
334 $template_url = get_stylesheet_directory_uri() . str_replace( get_stylesheet_directory(), '', $template_path );
335 $slug = basename( $template_path );
336
337 $theme_templates_data[ $slug ] = array(
338 'slug' => $slug,
339 'path' => $template_path,
340 'url' => $template_url,
341 );
342 }
343 }
344
345 // natural sort.
346 array_multisort( array_keys( $theme_templates_data ), SORT_NATURAL, $theme_templates_data );
347
348 foreach ( $theme_templates_data as $template_data ) {
349 $file_data = get_file_data(
350 $template_data['path'] . '/content.php',
351 array(
352 'name' => 'Name',
353 'category' => 'Category',
354 'source' => 'Source',
355 )
356 );
357
358 $thumbnail = false;
359 $thumbnail_width = false;
360 $thumbnail_height = false;
361
362 if ( file_exists( $template_data['path'] . '/thumbnail.png' ) ) {
363 $thumbnail = $template_data['url'] . '/thumbnail.png';
364
365 list($thumbnail_width, $thumbnail_height) = getimagesize( $thumbnail );
366 }
367
368 if ( file_exists( $template_data['path'] . '/thumbnail.jpg' ) ) {
369 $thumbnail = $template_data['url'] . '/thumbnail.jpg';
370 }
371
372 $theme_templates[] = array(
373 'id' => basename( $template_data['path'] ),
374 'title' => $file_data['name'],
375 'types' => array(
376 array(
377 'slug' => 'theme',
378 ),
379 ),
380 'categories' => isset( $file_data['category'] ) && $file_data['category'] ? array(
381 array(
382 'slug' => $file_data['category'],
383 'name' => $file_data['category'],
384 ),
385 ) : false,
386 'url' => false,
387 'thumbnail' => $thumbnail,
388 'thumbnail_width' => $thumbnail_width,
389 'thumbnail_height' => $thumbnail_height,
390 );
391 }
392
393 // merge all available templates.
394 $templates = ! empty( $templates ) ? $templates : array();
395 $templates = array_merge( $templates, $local_templates, $theme_templates );
396
397 if ( is_array( $templates ) ) {
398 return $this->success( $templates );
399 } else {
400 return $this->error( 'no_templates', __( 'Templates not found.', 'gutenify' ) );
401 }
402 }
403
404 /**
405 * Get templates.
406 *
407 * @param WP_REST_Request $request request object.
408 *
409 * @return mixed
410 */
411 public function get_template_data( WP_REST_Request $request ) {
412 $constants = \gutenify\Helpers::plugin_constants();
413 $plugin_main_slug = $constants['plugin_main_slug'];
414 $plugin_main_function_prefix = $constants['plugin_main_function_prefix'];
415 $plugin_main_base_url = $constants['plugin_main_base_url'];
416 $plugin_main_version = $constants['plugin_main_version'];
417 $plugin_main_post_type_prefix = $constants['plugin_main_post_type_prefix'];
418
419 $api_site = defined( 'GUTENIFY_API_URL' ) ? GUTENIFY_API_URL : 'https://api.gutenify.com/';
420 $url = $api_site . 'wp-json/gutenify-library/v1/get_library_data/';
421 $id = $request->get_param( 'id' );
422 $type = $request->get_param( 'type' );
423 $template_data = false;
424
425 if ( 1 > absint( $id ) || empty( $type ) ) {
426 return $this->error( 'no_template_data', __( 'Template data not found.', 'gutenify' ) );
427 }
428
429 $id = absint( $id );
430 switch ( $type ) {
431 case 'remote':
432 $template_data = get_transient( 'gutenify_template_' . $type . '_' . $id, false );
433
434 if ( ! $template_data ) {
435 $url = add_query_arg(
436 apply_filters(
437 'gutenify_rest_template_data_url_args',
438 array(
439 'id' => $id,
440 'gutenify_version' => GUTENIFY_VERSION,
441 'site_url' => site_url( '/' ),
442 )
443 ),
444 $url
445 );
446
447 $requested_template_data = wp_remote_get( $url );
448
449 if ( ! is_wp_error( $requested_template_data ) ) {
450 $new_template_data = wp_remote_retrieve_body( $requested_template_data );
451 $new_template_data = json_decode( $new_template_data, true );
452
453 if ( $new_template_data && isset( $new_template_data['response'] ) && is_array( $new_template_data['response'] ) ) {
454 $template_data = $new_template_data['response'];
455 set_transient( 'gutenify_template_' . $type . '_' . $id, $template_data, DAY_IN_SECONDS );
456 }
457 }
458 }
459 break;
460 case 'local':
461 $post = get_post( $id );
462
463 if ( $post && $plugin_main_post_type_prefix . '_template' === $post->post_type && 'publish' === $post->post_status ) {
464 $template_data = array(
465 'id' => $post->ID,
466 'title' => $post->post_title,
467 'content' => $post->post_content,
468 );
469 }
470
471 break;
472 }
473
474 if ( is_array( $template_data ) ) {
475 return $this->success( $template_data );
476 } else {
477 return $this->error( 'no_template_data', __( 'Template data not found.', 'gutenify' ) );
478 }
479 }
480
481 /**
482 * Get settings.
483 *
484 * @return mixed
485 */
486 public function get_settings() {
487 $settings = gutenify_settings();
488
489 if ( is_array( $settings ) ) {
490 return $this->success( $settings );
491 } else {
492 return $this->error( 'no_settings', __( 'Settings data not found.', 'gutenify' ) );
493 }
494 }
495
496 /**
497 * Get edit options permissions.
498 *
499 * @return bool
500 */
501 public function update_settings_permission() {
502 return current_user_can( 'manage_options' );
503 }
504
505 /**
506 * Update Settings.
507 *
508 * @param WP_REST_Request $request request object.
509 *
510 * @return mixed
511 */
512 public function update_settings( WP_REST_Request $request ) {
513 $new_settings = $request->get_param( 'settings' );
514
515 if ( is_array( $new_settings ) ) {
516 $current_settings = get_option( 'gutenify_settings', array() );
517 update_option( 'gutenify_settings', array_merge( $current_settings, $new_settings ) );
518 }
519
520 return $this->success( true );
521 }
522
523 /**
524 * Get templates.
525 *
526 * @return mixed
527 */
528 public function get_template_kit( WP_REST_Request $request ) {
529 $api_site = defined( 'GUTENIFY_API_URL' ) ? GUTENIFY_API_URL : 'https://api.gutenify.com/';
530 $url = $api_site . 'wp-json/gutenify-library/v1/get_kit_library/';
531 $templates = get_transient( 'gutenify_remote_template_kits', false );
532 $data = $request->get_params();
533
534 if ( ! empty( $data['reset'] ) && 'true' === $data['reset'] ) {
535 $templates = array();
536 }
537
538 /*
539 * Get remote templates.
540 */
541 if ( ! $templates ) {
542 $requested_templates = wp_remote_get(
543 add_query_arg(
544 array(
545 'gutenify_version' => '2.19.3',
546 'gutenify_pro' => false,
547 'gutenify_pro_version' => null,
548 ),
549 $url
550 )
551 );
552
553 if ( ! is_wp_error( $requested_templates ) ) {
554 $new_templates = wp_remote_retrieve_body( $requested_templates );
555 $new_templates = json_decode( $new_templates, true );
556
557 if ( $new_templates && isset( $new_templates['response'] ) && is_array( $new_templates['response'] ) ) {
558 $templates = $new_templates['response'];
559 set_transient( 'gutenify_remote_template_kits', $templates, DAY_IN_SECONDS );
560 }
561 }
562 }
563
564 // Remove Pro templates from array, cause for now there is no way to check if pro addon is activated.
565 if ( $templates ) {
566 foreach ( $templates as $k => $template ) {
567 $is_pro = false;
568
569 if ( isset( $template['types'] ) && is_array( $template['types'] ) ) {
570 foreach ( $template['types'] as $type ) {
571 $is_pro = $is_pro || 'pro' === $type['slug'];
572 }
573 }
574
575 if ( $is_pro ) {
576 unset( $templates[ $k ] );
577 }
578 }
579 }
580
581 if ( is_array( $templates ) ) {
582 return $this->success( $templates );
583 } else {
584 return $this->error( 'no_template_kits', __( 'Template kit not found.' . $url, 'gutenify' ) );
585 }
586 }
587
588 public function get_template_kit_data( WP_REST_Request $request ) {
589 $api_site = defined( 'GUTENIFY_API_URL' ) ? GUTENIFY_API_URL : 'https://api.gutenify.com/';
590 $url = $api_site . 'wp-json/gutenify-library/v1/get_kit_library_data/';
591 $id = $request->get_param( 'id' );
592 $type = $request->get_param( 'type' );
593 $template_data = false;
594 switch ( $type ) {
595 case 'remote':
596 $template_data = get_transient( 'gutenify_template_kit_' . $type . '_' . $id, false );
597
598 if ( ! $template_data ) {
599 $requested_template_data = wp_remote_get(
600 add_query_arg(
601 apply_filters(
602 'gutenify_rest_template_data_url_args',
603 array(
604 'id' => $id,
605 'gutenify_version' => GUTENIFY_VERSION,
606 'gutenify_site' => site_url( '/' ),
607 )
608 ),
609 $url
610 )
611 );
612
613 if ( ! is_wp_error( $requested_template_data ) ) {
614 $new_template_data = wp_remote_retrieve_body( $requested_template_data );
615 $new_template_data = json_decode( $new_template_data, true );
616
617 if ( $new_template_data && isset( $new_template_data['response'] ) && is_array( $new_template_data['response'] ) ) {
618 $template_data = $new_template_data['response'];
619 set_transient( 'gutenify_template_' . $type . '_' . $id, $template_data, DAY_IN_SECONDS );
620 }
621 }
622 }
623 break;
624 case 'local':
625 $post = get_post( $id );
626
627 if ( $post && 'gutenify_template' === $post->post_type && 'publish' === $post->post_status ) {
628 $template_data = array(
629 'id' => $post->ID,
630 'title' => $post->post_title,
631 'content' => $post->post_content,
632 );
633 }
634
635 break;
636 }
637
638 if ( is_array( $template_data ) ) {
639 return $this->success( $template_data );
640 } else {
641 return $this->error( 'no_template_data', __( 'Template data not found.', 'gutenify' ) );
642 }
643 }
644
645 public function create_kit( WP_REST_Request $request ) {
646 $data = $request->get_params();
647 $gutenify_template_kits = new Gutenify_Template_Kits();
648 $response = $gutenify_template_kits->add_kit( $data );
649
650 if ( $response ) {
651 return $this->success( $response );
652 }
653 return $this->error( 'error_creating_kit', __( 'Error creating Kit', 'gutenify' ) );
654 }
655
656 public function get_site_options() {
657 $options = get_option( 'gutenify_site_options' );
658 return $this->success( $options );
659 }
660
661 /**
662 * Update site options.
663 *
664 * @param WP_REST_Request $request request object.
665 *
666 * @return mixed
667 */
668 public function update_site_options( WP_REST_Request $request ) {
669 $options = $request->get_params();
670 $merged_options = array();
671 if ( is_array( $options ) ) {
672 $current_options = get_option( 'gutenify_site_options', array() );
673 if ( empty( $current_options ) ) {
674 $current_options = array();
675 }
676 $merged_options = array_merge( $current_options, $options );
677
678 // $site_fonts = array();
679 // if ( ! empty( $merged_options['styles']['siteFonts'] ) ) {
680 // $site_settings = wp_get_global_settings();
681 // $site_styles = wp_get_global_styles();
682 // $default_font_families = ! empty( $site_settings['typography']['fontFamilies']['theme'] )? $site_settings['typography']['fontFamilies']['theme'] : array();
683 // $default_font_families_slugs = wp_list_pluck( $default_font_families, 'slug' );
684 // error_log( print_r( $default_font_families_slugs, true ));
685 // foreach( $merged_options['styles']['siteFonts'] as $font ) {
686 // if ( ! in_array( $font['value'], $default_font_families_slugs, true ) ) {
687 // $site_fonts[] = array(
688 // 'fontFamily' => $font['label'],
689 // 'name' => $font['label'],
690 // 'slug' => $font['value'],
691 // );
692 // }
693 // }
694 // $new_font_families = array_merge( $default_font_families, $site_fonts );
695 // error_log( print_r( $new_font_families, true ));
696 // $site_settings['typography']['fontFamilies']['theme'] = $new_font_families;
697
698 // gutenify_update_global_styles( $site_settings, $site_styles );
699 // }
700
701 // Ideally the call to update_item would delete all of the appropriate transients and caches
702 delete_transient( 'global_styles' );
703 delete_transient( 'global_styles_' . get_stylesheet() );
704 delete_transient( 'gutenberg_global_styles' );
705 delete_transient( 'gutenberg_global_styles_' . get_stylesheet() );
706
707 if ( class_exists( 'wp_theme_json_resolver' ) ) {
708 wp_theme_json_resolver::clean_cached_data();
709 }
710 update_option( 'gutenify_site_options', array_merge( $current_options, $options ) );
711 }
712
713 return $this->success( $merged_options );
714 }
715
716 /**
717 * Update site options.
718 *
719 * @param WP_REST_Request $request request object.
720 *
721 * @return mixed
722 */
723 public function update_global_styles( WP_REST_Request $request ) {
724 $options = (array) $request->get_params();
725
726 if ( isset( $options['css'] ) ) {
727 update_option( 'gutenify_global_style', $options['css'] );
728 }
729
730 return $this->success( $options );
731 }
732
733 public function get_demo_categories( WP_REST_Request $request ) {
734 $options = (array) $request->get_params();
735 $demo_categories = false;
736 if ( empty( $options['force'] ) || 'false' === $options['force'] ) {
737 $demo_categories = get_transient( 'gutenify_demo_categories', false );
738 }
739 if ( false === $demo_categories ) {
740 $error = $this->error( 'error_demo_categories', __( 'Error listing demo', 'gutenify' ) );
741
742 try {
743 $url = 'https://demo.gutenify.com/wp-json/demo-api/v1/get_demo_categories';
744 // 'https://api.github.com/repos/gutenify/demo-content/contents/themes'
745 /** @var array|WP_Error $response */
746 $response = wp_remote_get(
747 $url,
748 array(
749 'timeout' => 120,
750 'httpversion' => '1.1',
751 'headers' => array(
752 'Accept' => 'application/json',
753 ),
754 )
755 );
756 if ( ( ! is_wp_error( $response ) ) && ( 200 === wp_remote_retrieve_response_code( $response ) ) ) {
757 if ( $body = wp_remote_retrieve_body( $response ) ) {
758 $responseBody = json_decode( $body );
759 $categories = array();
760 if ( ! empty( $responseBody ) && ! empty( $responseBody->response ) ) {
761 $categories = $responseBody->response;
762 }
763 set_transient( 'gutenify_demo_categories', json_encode( $categories ), DAY_IN_SECONDS );
764 return $this->success( $categories );
765 }
766 return $error;
767 }
768 } catch ( Exception $ex ) {
769 return $error;
770 }
771 }
772 return $this->success( json_decode( $demo_categories ) );
773 }
774
775 public function get_theme_demo_list( WP_REST_Request $request ) {
776 $options = (array) $request->get_params();
777 $demo_list = false;
778 if ( empty( $options['force'] ) || 'false' === $options['force'] ) {
779 $demo_list = get_transient( 'gutenify_demo_import_list', false );
780 }
781 if ( false === $demo_list ) {
782 $error = $this->error( 'error_demo_list', __( 'Error listing demo', 'gutenify' ) );
783
784 try {
785 $url = 'https://demo.gutenify.com/wp-json/demo-api/v1/get_demos';
786 /** @var array|WP_Error $response */
787 $response = wp_remote_get(
788 $url,
789 array(
790 'timeout' => 120,
791 'httpversion' => '1.1',
792 'headers' => array(
793 'Accept' => 'application/json',
794 ),
795 )
796 );
797 if ( ( ! is_wp_error( $response ) ) && ( 200 === wp_remote_retrieve_response_code( $response ) ) ) {
798 if ( $body = wp_remote_retrieve_body( $response ) ) {
799 $responseBody = json_decode( $body );
800 $themes = array();
801 if ( ! empty( $responseBody ) && ! empty( $responseBody->response ) ) {
802 $themes = (array) $responseBody->response;
803 }
804 set_transient( 'gutenify_demo_import_list', json_encode( $themes ), DAY_IN_SECONDS );
805 return $this->success( $themes );
806 }
807 return $error;
808 }
809 } catch ( Exception $ex ) {
810 return $error;
811 }
812 }
813 return $this->success( json_decode( $demo_list ) );
814 }
815
816
817 public function get_theme_import_demo_set_pages( WP_REST_Request $request ) {
818 $options = (array) $request->get_params();
819
820 if ( ! empty( $options['name'] ) ) {
821 $name = $options['name'];
822 $theme = wp_get_theme();
823
824 // Set Header
825 $args = array(
826 'post_type' => 'wp_template_part',
827 'post_name__in' => array( 'header' ),
828 'posts_per_page' => 1,
829 );
830 $headers = get_posts( $args );
831 if ( ! empty( $headers ) ) {
832 $post_data = $headers[0];
833 wp_set_post_terms( $post_data->ID, 'header', 'wp_template_part_area' );
834 wp_set_post_terms( $post_data->ID, $theme->template, 'wp_theme' );
835 }
836
837 // Set Footer
838 $args['post_name__in'] = array( 'footer' );
839 $footers = get_posts( $args );
840 if ( ! empty( $footers ) ) {
841 $post_data = $footers[0];
842 wp_set_post_terms( $post_data->ID, 'footer', 'wp_template_part_area' );
843 wp_set_post_terms( $post_data->ID, $theme->template, 'wp_theme' );
844 }
845
846 // Set Sidebar
847 $args['post_name__in'] = array( 'sidebar' );
848 $sidebars = get_posts( $args );
849 if ( ! empty( $sidebars ) ) {
850 $post_data = $sidebars[0];
851 // wp_set_post_terms( $post_data->ID, 'footer', 'wp_template_part_area' );
852 wp_set_post_terms( $post_data->ID, $theme->template, 'wp_theme' );
853 }
854
855 $imported_posts = get_transient( '_transient_pt_importer_data' );
856 // $imported_posts = get_option( '_pt_importer_data' );
857
858 $args = array(
859 'post_type' => 'wp_template',
860 // 'post_name__in' => array( 'header' ),
861 'posts_per_page' => -1,
862 'tax_query' => array(
863 array(
864 'taxonomy' => 'wp_theme',
865 'field' => 'slug',
866 'terms' => $theme->template,
867 'operator' => 'NOT IN',
868 ),
869 ),
870 );
871
872 if ( false !== $imported_posts && ! empty( $imported_posts['mapping']['post'] ) ) {
873 $post_ids = $imported_posts['mapping']['post'];
874 $args['post__in'] = $post_ids;
875 }
876
877 $templates = get_posts( $args );
878
879 if ( ! empty( $templates ) ) {
880 $do_not_duplicate = array();
881 $patterns = array( '/(\"theme\"\:\".*\")/' );
882 $replace = array( '"theme":"' . $theme->template . '"' );
883
884 foreach ( $templates as $template ) {
885 if ( ! in_array( $template->post_name, $do_not_duplicate ) ) {
886 $count = 0;
887 $content = preg_replace( $patterns, $replace, $template->post_content, -1, $count );
888
889 $data = array(
890 'ID' => $template->ID,
891 'post_content' => $content,
892 );
893
894 wp_update_post( $data );
895 wp_set_post_terms( $template->ID, $theme->template, 'wp_theme' );
896 $do_not_duplicate[] = $template->post_name;
897 }
898 }
899 }
900
901 return $this->success(
902 array(
903 'name' => $name,
904 'headers' => $headers,
905 'templates' => $templates,
906 'args' => $args,
907 'imported_posts' => $imported_posts,
908 )
909 );
910 }
911 $error = $this->error( 'error_demo_set_pages', __( 'Error demo set pages.', 'gutenify' ) );
912 }
913
914 /**
915 * Success rest.
916 *
917 * @param mixed $response response data.
918 * @return mixed
919 */
920 public function success( $response ) {
921 return new WP_REST_Response(
922 array(
923 'success' => true,
924 'response' => $response,
925 ),
926 200
927 );
928 }
929
930 /**
931 * Error rest.
932 *
933 * @param mixed $code error code.
934 * @param mixed $response response data.
935 * @return mixed
936 */
937 public function error( $code, $response ) {
938 return new WP_REST_Response(
939 array(
940 'error' => true,
941 'success' => false,
942 'error_code' => $code,
943 'response' => $response,
944 ),
945 401
946 );
947 }
948 }
949 new Gutenify_Rest();
950