PluginProbe
Post Grid Gutenberg Blocks – PostX / 4.0.0
Post Grid Gutenberg Blocks – PostX v4.0.0
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 / REST_API.php

REST_API.php in Post Grid Gutenberg Blocks – PostX 4.0.0, at classes/REST_API.php

1,018 lines 41.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * REST API Action.
4 *
5 * @package ULTP\REST_API
6 * @since v.1.0.0
7 */
8 namespace ULTP;
9
10 defined('ABSPATH') || exit;
11
12 /**
13 * Styles class.
14 */
15 class REST_API{
16
17 /**
18 * Setup class.
19 *
20 * @since v.1.0.0
21 */
22 public function __construct() {
23 add_action( 'rest_api_init', array($this, 'ultp_register_route') );
24 }
25
26
27 /**
28 * REST API Action
29 *
30 * @since v.1.0.0
31 * @return NULL
32 */
33 public function ultp_register_route() {
34 register_rest_route( 'ultp', 'posts', array(
35 'args' => array(),
36 'callback' => array($this,'ultp_route_post_data'),
37 'permission_callback' => '__return_true'
38 )
39 );
40 register_rest_route( 'ultp', 'common', array(
41 'methods' => \WP_REST_Server::READABLE,
42 'args' => array('wpnonce' => []),
43 'callback' => array($this,'ultp_route_common_data'),
44 'permission_callback' => '__return_true'
45 )
46 );
47 register_rest_route( 'ultp', 'specific_taxonomy', array(
48 'methods' => \WP_REST_Server::READABLE,
49 'args' => array('taxType' => [], 'taxSlug' => [], 'taxValue' => [], 'queryNumber' => [], 'wpnonce' => [], 'archiveBuilder' => []),
50 'callback' => array($this,'ultp_route_taxonomy_info_data'),
51 'permission_callback' => '__return_true'
52 )
53 );
54 register_rest_route(
55 'ultp/v1',
56 '/search/',
57 array(
58 array(
59 'methods' => 'POST',
60 'callback' => array($this, 'search_settings_action'),
61 'permission_callback' => function () {
62 return current_user_can('edit_posts');
63 },
64 'args' => array()
65 )
66 )
67 );
68 register_rest_route(
69 'ultp/v2',
70 '/template_page_insert/',
71 array(
72 array(
73 'methods' => 'POST',
74 'callback' => array($this, 'template_page_insert'),
75 'permission_callback' => function () {
76 return current_user_can('manage_options');
77 },
78 'args' => array()
79 )
80 )
81 );
82 register_rest_route(
83 'ultp/v2',
84 '/addon_block_action/',
85 array(
86 array(
87 'methods' => 'POST',
88 'callback' => array($this, 'addon_block_action'),
89 'permission_callback' => function () {
90 return current_user_can('manage_options');
91 },
92 'args' => array()
93 )
94 )
95 );
96 register_rest_route(
97 'ultp/v2',
98 '/premade_wishlist_save/',
99 array(
100 array(
101 'methods' => 'POST',
102 'callback' => array($this, 'premade_wishlist_save'),
103 'permission_callback' => function () {
104 return current_user_can('edit_posts');
105 },
106 'args' => array()
107 )
108 )
109 );
110 register_rest_route(
111 'ultp/v2',
112 '/save_plugin_settings/',
113 array(
114 array(
115 'methods' => 'POST',
116 'callback' => array($this, 'save_plugin_settings'),
117 'permission_callback' => function () {
118 return current_user_can('manage_options');
119 },
120 'args' => array()
121 )
122 )
123 );
124 register_rest_route(
125 'ultp',
126 '/ultp_search_data/',
127 array(
128 array(
129 'methods' => 'POST',
130 'callback' => array($this, 'ultp_search_result'),
131 'permission_callback' => '__return_true'
132 )
133 )
134 );
135 register_rest_route(
136 'ultp/v2',
137 '/get_all_settings/',
138 array(
139 array(
140 'methods' => 'POST',
141 'callback' => array($this, 'get_all_settings'),
142 'permission_callback' => function () {
143 return current_user_can('manage_options');
144 },
145 'args' => array()
146 )
147 )
148 );
149 register_rest_route(
150 'ultp/v2',
151 '/dashborad/',
152 array(
153 array(
154 'methods' => 'POST',
155 'callback' => array( $this, 'get_dashboard_callback'),
156 'permission_callback' => function () {
157 return current_user_can( 'manage_options' );
158 },
159 'args' => array()
160 )
161 )
162 );
163 register_rest_route(
164 'ultp/v2',
165 '/wizard_site_status/',
166 array(
167 array(
168 'methods' => 'POST',
169 'callback' => array( $this, 'wizard_site_status_callback'),
170 'permission_callback' => function () {
171 return current_user_can( 'manage_options' );
172 },
173 'args' => array()
174 )
175 )
176 );
177 register_rest_route(
178 'ultp/v2',
179 '/send_initial_plugin_data/',
180 array(
181 array(
182 'methods' => 'POST',
183 'callback' => array( $this, 'send_initial_plugin_data_callback'),
184 'permission_callback' => function () {
185 return current_user_can( 'manage_options' );
186 },
187 'args' => array()
188 )
189 )
190 );
191 register_rest_route(
192 'ultp/v2',
193 '/initial_setup_complete/',
194 array(
195 array(
196 'methods' => 'POST',
197 'callback' => array( $this, 'initial_setup_complete_callback'),
198 'permission_callback' => function () {
199 return current_user_can( 'manage_options' );
200 },
201 'args' => array()
202 )
203 )
204 );
205 register_rest_route(
206 'ultp/v2',
207 '/init_site_dark_logo/',
208 array(
209 array(
210 'methods' => 'POST',
211 'callback' => array( $this, 'init_site_dark_logo_callback'),
212 'permission_callback' => function () {
213 return current_user_can( 'manage_options' );
214 },
215 'args' => array()
216 )
217 )
218 );
219 register_rest_route(
220 'ultp/v2',
221 '/init_site_dark_logo/',
222 array(
223 array(
224 'methods' => 'POST',
225 'callback' => array( $this, 'init_site_dark_logo_callback'),
226 'permission_callback' => function () {
227 return current_user_can( 'edit_posts' );
228 },
229 'args' => array()
230 )
231 )
232 );
233 }
234
235 /**
236 * Initial Plugin Setup Complete
237 *
238 * * @since v.2.8.1
239 * @return STRING
240 */
241 public static function initial_setup_complete_callback($server) {
242 $post = $server->get_params();
243 if ( ! (isset($post['wpnonce']) && wp_verify_nonce( sanitize_key(wp_unslash($post['wpnonce'])), 'ultp-nonce' )) ) {
244 die();
245 }
246 ultimate_post()->set_setting('init_setup', 'yes');
247 return rest_ensure_response([
248 'success' => true,
249 'redirect' => admin_url('admin.php?page=ultp-settings'),
250 ]);
251 }
252
253 /**
254 * Send Plugin Data When Initial Setup
255 *
256 * * @since v.2.8.1
257 * @return STRING
258 */
259 public function send_initial_plugin_data_callback($server) {
260 $post = $server->get_params();
261 if ( ! (isset($post['wpnonce']) && wp_verify_nonce( sanitize_key(wp_unslash($post['wpnonce'])), 'ultp-nonce' )) ) {
262 die();
263 }
264
265
266 $site = isset($post['site']) ? ultimate_post()->ultp_rest_sanitize_params( $post['site'] ) : '';
267
268 require_once ULTP_PATH.'classes/Deactive.php';
269 $obj = new \ULTP\Deactive();
270 $obj->send_plugin_data('postx_wizard', $site);
271 }
272
273 /**
274 * wizard_site_status_callback
275 *
276 * * @since v.3.0.0
277 * @return STRING
278 */
279 public static function wizard_site_status_callback() {
280 if ( ! (isset($_POST['wpnonce']) && wp_verify_nonce( sanitize_key(wp_unslash($_POST['wpnonce'])), 'ultp-nonce' )) ) {
281 die();
282 }
283 if ( isset( $_FILES['siteIcon'],$_FILES['siteIcon']['name'] ) ) {
284 $file_extension = strtolower( pathinfo( $_FILES['siteIcon']['name'], PATHINFO_EXTENSION ) ); //phpcs:ignore
285 $allowed_extenstion = array( 'jpg', 'jpeg', 'png', 'gif', 'webp', 'ico' );
286 if ( in_array( $file_extension, $allowed_extenstion ) ) {
287 require_once ABSPATH . 'wp-admin/includes/image.php';
288 require_once ABSPATH . 'wp-admin/includes/file.php';
289 require_once ABSPATH . 'wp-admin/includes/media.php';
290 $file_id = media_handle_upload( 'siteIcon', 0 );
291 if ( $file_id ) {
292 update_option( 'site_icon', $file_id );
293 }
294 }
295 }
296 if ( isset( $_POST['siteName'] ) ) {
297 $site_name = ultimate_post()->ultp_rest_sanitize_params( $_POST['siteName'] );
298 update_option( 'blogname', $site_name );
299 }
300 if ( isset( $_POST['siteType'] ) ) {
301 $site_type = ultimate_post()->ultp_rest_sanitize_params( $_POST['siteType'] );
302 update_option( '__ultp_site_type', $site_type );
303 }
304 return rest_ensure_response( ['success' => true ]);
305 }
306
307 /**
308 * Save Settings of Option Panel
309 *
310 * @since v.3.0.0
311 * @return NULL
312 */
313 public function get_all_settings($server) {
314 return rest_ensure_response(['success' => true, 'settings' => ultimate_post()->get_setting()]);
315 }
316 /**
317 * Save Settings of Option Panel
318 *
319 * @since v.3.0.0
320 * @return NULL
321 */
322 public function save_plugin_settings($server) {
323 $post = $server->get_params();
324 $data = ultimate_post()->ultp_rest_sanitize_params($post['settings']);
325 if (count($data) > 0) {
326 foreach ($data as $key => $val) {
327 ultimate_post()->set_setting($key, $val);
328 }
329 do_action('ultimate_post_after_setting_save');
330 }
331 return rest_ensure_response([
332 'success' => true,
333 'message' => __('You have successfully saved the settings data.', 'ultimate-post') ,
334 'wishListArr' => wp_json_encode($data)]);
335 }
336
337 /**
338 * Save and get premade_wishlist_save
339 *
340 * @since v.3.0.0
341 * @param STRING
342 * @return ARRAY | Inserted Post Url
343 */
344 public function premade_wishlist_save($server) {
345 $post = $server->get_params();
346 $id = isset($post['id'])? ultimate_post()->ultp_rest_sanitize_params($post['id']):'';
347 $action = isset($post['action'])? ultimate_post()->ultp_rest_sanitize_params($post['action']):'';
348 $wishListArr = get_option('ultp_premade_wishlist', []);
349 $request_type = isset($post['type'])?ultimate_post()->ultp_rest_sanitize_params($post['type']):'';
350
351 if ($id && $request_type != 'fetchData') {
352 if($action == 'remove') {
353 $index = array_search($id, $wishListArr);
354 if ($index !== false) {
355 unset($wishListArr[$index]);
356 }
357 } else {
358 if (!in_array($id, $wishListArr)) {
359 array_push($wishListArr, $id );
360 }
361 }
362 update_option('ultp_premade_wishlist', $wishListArr);
363 }
364 return rest_ensure_response([
365 'success' => true,
366 'message' => $action == 'remove' ? __('Item has been removed from wishlist.', 'ultimate-post') : __('Item added to wishlist.', 'ultimate-post'),
367 'wishListArr' => wp_json_encode($wishListArr)]
368 );
369 }
370 /**
371 * Save addon / blocks on/off data
372 *
373 * @since v.3.0.0
374 * @param STRING
375 * @return ARRAY | Inserted Post Url
376 */
377 public function addon_block_action($server) {
378 $post = $server->get_params();
379 $addon_name = isset($post['key'])? ultimate_post()->ultp_rest_sanitize_params($post['key']):'';
380 $addon_value = isset($post['value'])? ultimate_post()->ultp_rest_sanitize_params($post['value']):'';
381 if ($addon_name) {
382 $addon_data = ultimate_post()->get_setting();
383 $addon_data[$addon_name] = $addon_value;
384 $GLOBALS['ultp_settings'][$addon_name] = $addon_value;
385 update_option('ultp_options', $addon_data);
386 }
387 return array(
388 'success' => true,
389 'message' => ($addon_value == 'true' || $addon_value == 'false') ? ($addon_value == 'true' ? __('The addon has been enabled.', 'ultimate-post') : __('The addon has been disabled.', 'ultimate-post') ) : ($addon_value == 'yes' ? __('The block has been enabled.', 'ultimate-post') : __('The block has been disabled.', 'ultimate-post'))
390 );
391 }
392 /**
393 * Saved Template & Custom Font Actions
394 *
395 * @since v.3.0.0
396 * @param STRING
397 * @return ARRAY | Inserted Post Url
398 */
399 public function get_dashboard_callback($server) {
400 $post = $server->get_params();
401 $request_type = isset($post['type'])?ultimate_post()->ultp_rest_sanitize_params($post['type']):'';
402 $pType = isset($post['pType'])?ultimate_post()->ultp_rest_sanitize_params($post['pType']):'';
403 switch ($request_type) {
404
405 case 'saved_templates':
406 $post_per_page = 10;
407 $data = [];
408 $args = array(
409 'post_type' => $pType,
410 'post_status' => array('publish', 'draft'),
411 'posts_per_page' => $post_per_page,
412 'paged' => isset($post['pages'])?ultimate_post()->ultp_rest_sanitize_params($post['pages']):1
413 );
414
415 if (isset($post['search'])) {
416 $args['paged'] = 1;
417 $args['s'] = ultimate_post()->ultp_rest_sanitize_params($post['search']);
418 }
419
420 $the_query = new \WP_Query( $args );
421 if ( $the_query->have_posts() ) {
422 while ( $the_query->have_posts() ) {
423 $the_query->the_post();
424 $final = [
425 'id' => get_the_ID(),
426 'title' => get_the_title(),
427 'date' => get_the_modified_date('Y/m/d h:i a'),
428 'status' => get_post_status(),
429 'edit' => get_edit_post_link()
430 ];
431
432 if ($pType == 'ultp_custom_font') {
433 $final = array_merge($final ,['woff' => false,'woff2' => false,'ttf' => false,'svg' => false,'eot' => false]);
434 $settings = get_post_meta( get_the_ID(), '__font_settings', true );
435 foreach ($settings as $key => $value) {
436 if ($value['ttf']) { $final['ttf'] = true; }
437 if ($value['svg']) { $final['svg'] = true; }
438 if ($value['eot']) { $final['eot'] = true; }
439 if ($value['woff']) { $final['woff'] = true; }
440 if ($value['woff2']) { $final['woff2'] = true; }
441 }
442 $final['font_settings'] = $settings;
443 }
444 $data[] = $final;
445 }
446 }
447 wp_reset_postdata();
448 return array(
449 'success' => true,
450 'data' => $data,
451 'new' => ($pType == 'ultp_custom_font' ? admin_url('post-new.php?post_type=ultp_custom_font') : admin_url('post-new.php?post_type=ultp_templates')),
452 'found' => $the_query->found_posts,
453 'pages' => $the_query->max_num_pages
454 );
455 break;
456
457 case 'action_draft':
458 case 'action_publish':
459 if (isset($post['ids']) && is_array($post['ids'])) {
460 $post_ids = ultimate_post()->ultp_rest_sanitize_params($post['ids']);
461 foreach ($post_ids as $id) {
462 wp_update_post(array(
463 'ID' => $id,
464 'post_status' => str_replace('action_', '',$request_type)
465 ));
466 }
467 return array(
468 'success' => true,
469 'message' => __('Status changed for selected items.', 'ultimate-post')
470 );
471 }
472 break;
473
474 case 'license_action':
475 $message = '';
476
477 if ( isset($post['edd_ultp_license_key']) && function_exists('ultimate_post_pro') ) {
478 $is_success = false;
479 $license = trim( ultimate_post()->ultp_rest_sanitize_params( $post['edd_ultp_license_key'] ) );
480
481 if ($license && $license != '******************') {
482 update_option( 'edd_ultp_license_key', $license);
483 $api_params = array(
484 'edd_action' => 'activate_license',
485 'license' => $license,
486 'item_id' => 181,
487 'url' => home_url()
488 );
489
490 $response = wp_remote_post(
491 'https://www.wpxpo.com',
492 array(
493 'timeout' => 15,
494 'sslverify' => false,
495 'body' => $api_params
496 )
497 );
498
499 if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) {
500 $message = ( is_wp_error( $response ) && ! empty( $response->get_error_message() ) ) ? $response->get_error_message() : __('An error occurred, please try again.', 'ultimate-post-pro');
501 } else {
502 $license_data = json_decode( wp_remote_retrieve_body( $response ) );
503 if ( false === $license_data->success ) {
504 update_option( 'edd_ultp_license_key', '');
505 switch( $license_data->error ) {
506 case 'expired' :
507 $message = sprintf(
508 __('Your license key expired on %s.', 'ultimate-post'),
509 date_i18n( get_option( 'date_format' ), strtotime( $license_data->expires, current_time( 'timestamp' ) ) )
510 );
511 break;
512 case 'revoked' :
513 $message = __('Your license key has been disabled.', 'ultimate-post');
514 break;
515 case 'missing' :
516 $message = __('Invalid license.', 'ultimate-post');
517 break;
518 case 'invalid' :
519 case 'site_inactive':
520 $message = __( 'Your license is not active for this URL.', 'ultimate-post' );
521 break;
522 case 'item_name_mismatch':
523 $message = __( 'This appears to be an invalid license key.', 'ultimate-post' );
524 break;
525 case 'no_activations_left':
526 $message = __( 'Your license key has reached its activation limit.', 'ultimate-post' );
527 break;
528 default :
529 $message = __( 'An error occurred, please try again.', 'ultimate-post' );
530 break;
531 }
532 } else {
533 $message = __('Your license key has been updated.', 'ultimate-post');
534 $is_success = true;
535 }
536 update_option( 'edd_ultp_license_status', $license_data->license );
537 update_option( 'edd_ultp_license_expire', $license_data->expires );
538 update_option( 'edd_ultp_activations_left', $license_data->activations_left );
539
540 }
541 } else {
542 $message = __( 'Invalid license.', 'ultimate-post' );
543 }
544 } else {
545 $message = __( 'Invalid license.', 'ultimate-post' );
546 if (!function_exists('ultimate_post_pro')) {
547 $message = __( 'Install & Acivate PostX Pro plugin.', 'ultimate-post' );
548 }
549 }
550 return array('success' => $is_success, 'message' => $message);
551 break;
552
553 case 'action_delete':
554 if (isset($post['ids']) && is_array($post['ids'])) {
555 $post_ids = ultimate_post()->ultp_rest_sanitize_params($post['ids']);
556 foreach ($post_ids as $id) {
557 wp_delete_post( $id, true);
558 }
559 }
560 return array(
561 'success' => true,
562 'message' => __('The selected item is deleted.', 'ultimate-post')
563 );
564
565 case 'support_data':
566 $user_info = get_userdata( get_current_user_id() );
567 $name = $user_info->first_name . ($user_info->last_name ? ' ' . $user_info->last_name : '');
568 return array(
569 'success' => true,
570 'data' => array(
571 'name' => $name ? $name : $user_info->user_login,
572 'email' => $user_info->user_email
573 )
574 );
575
576 case 'support_action':
577 $api_params = array(
578 'user_name' => isset($post['name'])? ultimate_post()->ultp_rest_sanitize_params($post['name']):'',
579 'user_email' =>isset($post['email'])? sanitize_email($post['email']):'',
580 'subject' => isset($post['subject'])? ultimate_post()->ultp_rest_sanitize_params($post['subject']):'',
581 'desc' => isset($post['desc'])? sanitize_textarea_field($post['desc']):'',
582 );
583 $response = wp_remote_get(
584 'https://wpxpo.com/wp-json/v2/support_mail',
585 array(
586 'method' => 'POST',
587 'timeout' => 120,
588 'body' => $api_params
589 )
590 );
591 $response_data = json_decode($response['body']);
592 $success = ( isset($response_data->success) && $response_data->success ) ? true : false;
593
594 return array(
595 'success' => $success,
596 'message' => $success ? __('New Support Ticket has been Created.', 'ultimate-post') : __('New Support Ticket is not Created Due to Some Issues.', 'ultimate-post')
597 );
598 break;
599
600 case 'helloBarAction':
601 set_transient( 'ultp_helloBar'.ULTP_HELLOBAR, 'hide', 1296000);
602 return array(
603 'success' => true,
604 'message' => __('Notice is removed.', 'ultimate-post')
605 );
606 break;
607 case 'generalDiscountAction':
608 set_transient( 'ultp_generalDiscount', 'hide', 60 * DAY_IN_SECONDS);
609 return array(
610 'success' => true,
611 'message' => __('Notice is removed.', 'ultimate-post')
612 );
613 break;
614
615 default:
616 # code...
617 break;
618 }
619
620 }
621
622 /**
623 * Insert Post For Imported Template
624 *
625 * @since v.2.6.7
626 * @param STRING
627 * @return ARRAY | Inserted Post Url
628 */
629 public function template_page_insert($server) {
630 $post = $server->get_params();
631 $new_page = array(
632 'post_title' => isset($post['title'])?ultimate_post()->ultp_rest_sanitize_params($post['title']):'',
633 'post_type' => 'page',
634 'post_content' => $post['blockCode'],
635 'post_status' => 'draft',
636 );
637 $post_id = wp_insert_post( $new_page );
638 return array( 'success' => true, 'link' => get_edit_post_link($post_id));
639 }
640
641
642 public function search_settings_action($server) {
643 global $wpdb;
644 $post = $server->get_params();
645 $request_type = isset($post['type'])?ultimate_post()->ultp_rest_sanitize_params($post['type']):'';
646 $condition_type = isset($post['condition'])?ultimate_post()->ultp_rest_sanitize_params($post['condition']):'';
647 $term_type = isset($post['term'])?ultimate_post()->ultp_rest_sanitize_params( $post['term'] ):'';
648 switch ($request_type) {
649 case 'posts':
650 case 'allpost':
651 case 'postExclude':
652 $post_type = array('post');
653 if ($request_type == 'allpost') {
654 $post_type = array_keys(ultimate_post()->get_post_type());
655 } else if ($request_type == 'postExclude') {
656 $post_type = array($condition_type);
657 }
658 $args = array(
659 'post_type' => $post_type,
660 'post_status' => 'publish',
661 'posts_per_page' => 10,
662 );
663 if (is_numeric($term_type)) {
664 $args['p'] = $term_type;
665 } else {
666 $args['s'] = $term_type;
667 }
668
669 $post_results = new \WP_Query($args);
670 $data = [];
671 if (!empty($post_results)) {
672 while ( $post_results->have_posts() ) {
673 $post_results->the_post();
674 $id = get_the_ID();
675 $title = html_entity_decode(get_the_title());
676 $data[] = array('value'=>$id, 'title'=>($title?'[ID: '.$id.'] '.$title:('[ID: '.$id.']')));
677 }
678 wp_reset_postdata();
679 }
680 return ['success' => true, 'data' => $data];
681 break;
682
683 case 'author':
684 $term = '%'. $wpdb->esc_like( $term_type ) .'%';
685 $post_results = $wpdb->get_results( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching
686 $wpdb->prepare(
687 "SELECT ID, display_name
688 FROM $wpdb->users
689 WHERE user_login LIKE %s OR ID LIKE %s OR user_nicename LIKE %s OR user_email LIKE %s OR display_name LIKE %s LIMIT 10", $term, $term, $term, $term, $term
690 )
691 );
692 $data = [];
693 if (!empty($post_results)) {
694 foreach ($post_results as $key => $val) {
695 $data[] = array('value'=>$val->ID, 'title'=>'[ID: '.$val->ID.'] '.$val->display_name);
696 }
697 }
698 return ['success' => true, 'data' => $data];
699 break;
700
701 case 'taxvalue':
702 $split = explode('###', $condition_type);
703 $condition = $split[1] != 'multiTaxonomy' ? array($split[1]) : get_object_taxonomies($split[0]);
704 $args = array(
705 'taxonomy' => $condition,
706 'fields' => 'all',
707 'orderby' => 'id',
708 'order' => 'ASC',
709 'name__like'=> $term_type
710 );
711 if (is_numeric($term_type)) {
712 unset($args['name__like']);
713 $args['include'] = array($term_type);
714 }
715
716 $post_results = get_terms( $args );
717 $data = [];
718 if (!empty($post_results)) {
719 foreach ($post_results as $key => $val) {
720 if ($split[1] == 'multiTaxonomy') {
721 $data[] = array('value'=>$val->taxonomy.'###'.$val->slug, 'title'=> '[ID: '.$val->term_id.'] '.$val->taxonomy.': '.$val->name);
722 } else {
723 $data[] = array('value'=>urldecode($val->slug), 'title'=>'[ID: '.$val->term_id.'] '.$val->name);
724 }
725 }
726 }
727 return ['success' => true, 'data' => $data];
728 break;
729
730 case 'taxExclude':
731 $condition = get_object_taxonomies($condition_type);
732 $args = array(
733 'taxonomy' => $condition,
734 'fields' => 'all',
735 'orderby' => 'id',
736 'order' => 'ASC',
737 'name__like'=> $term_type
738 );
739 if (is_numeric($term_type)) {
740 unset($args['name__like']);
741 $args['include'] = array($term_type);
742 }
743 $post_results = get_terms( $args );
744 $data = [];
745 if (!empty($post_results)) {
746 foreach ($post_results as $key => $val) {
747 $data[] = array('value'=>$val->taxonomy.'###'.$val->slug, 'title'=> '[ID: '.$val->term_id.'] '.$val->taxonomy.': '.$val->name);
748 }
749 }
750 return ['success' => true, 'data' => $data];
751 break;
752 // allPostType
753 case 'allPostType':
754 $all_types = array_values(get_post_types( array( 'public' => true ), 'names' ));
755 $postType = array();
756 foreach($all_types as $type){
757 $postType[] = array(
758 'title' => $type,
759 'value' => $type,
760 );
761 };
762
763 return ['success' => true, 'data' => $postType ];
764 default:
765 return ['success' => true, 'data' => [['value'=>'', 'title'=>'- Select -']]];
766 break;
767 }
768 }
769
770 /**
771 * Post Data Response of REST API
772 *
773 * @since v.1.0.0
774 * @param MIXED | Pram (ARRAY), Local (BOOLEAN)
775 * @return ARRAY | Response Image Size as Array
776 */
777 public function ultp_route_post_data($prams) {
778 if ( ! (isset($_REQUEST['wpnonce']) && wp_verify_nonce( sanitize_key(wp_unslash($_REQUEST['wpnonce'])), 'ultp-nonce' )) ) {
779 die();
780 }
781 $prams = $prams->get_params();
782 $data = [];
783 $loop = new \WP_Query( ultimate_post()->get_query(ultimate_post()->ultp_rest_sanitize_params($prams)) );
784 $max_tax = isset($prams['maxTaxonomy']) && $prams['maxTaxonomy'] ? ( ultimate_post()->ultp_rest_sanitize_params($prams['maxTaxonomy']) == '0' ? 0 : ultimate_post()->ultp_rest_sanitize_params($prams['maxTaxonomy']) ) : 30 ;
785
786
787 if ($loop->have_posts()) {
788 while($loop->have_posts()) {
789 $loop->the_post();
790 $var = array();
791 $post_id = get_the_ID();
792 $user_id = get_the_author_meta('ID');
793 $content_data = get_the_content();
794 $var['ID'] = $post_id;
795 $var['title'] = get_the_title();
796 $var['permalink'] = get_permalink();
797 $var['seo_meta'] = ultimate_post()->get_excerpt($post_id, 1);
798 $var['excerpt'] = wp_strip_all_tags($content_data);
799 $var['excerpt_full']= wp_strip_all_tags(get_the_excerpt());
800 $var['time'] = (int)get_the_date('U')*1000;
801 $var['timeModified']= (int)get_the_modified_date('U')*1000;
802 $var['post_time'] = human_time_diff(get_the_time('U'),current_time('U'));
803 $var['view'] = get_post_meta(get_the_ID(),'__post_views_count', true);
804 $var['comments'] = get_comments_number();
805 $var['author_link'] = get_author_posts_url($user_id);
806 $var['avatar_url'] = get_avatar_url($user_id);
807 $var['display_name']= get_the_author_meta('display_name');
808 $var['reading_time']= ceil(strlen($content_data)/1200);
809 $post_video = get_post_meta($post_id, '__builder_feature_video', true);
810 // Video
811 if ($post_video) {
812 $var['has_video'] = ultimate_post()->get_youtube_id($post_video);
813 }
814 // image
815 $image_sizes = ultimate_post()->get_image_size();
816 $image_src = array();
817 if (has_post_thumbnail()) {
818 $thumb_id = get_post_thumbnail_id($post_id);
819 foreach ($image_sizes as $key => $value) {
820 $image_src[$key] = wp_get_attachment_image_src($thumb_id, $key, false)[0];
821 }
822 $var['image'] = $image_src;
823 } elseif(isset($prams['fallbackImg']['id'])) {
824 foreach ($image_sizes as $key => $value) {
825 $image_src[$key] = wp_get_attachment_image_src(esc_attr($prams['fallbackImg']['id']), $key, false)[0];
826 }
827 $var['image'] = $image_src;
828 $var['is_fallback'] = true;
829 }
830
831 // tag
832 $tag = get_the_terms($post_id, (isset($prams['tag'])?esc_attr($prams['tag']):'post_tag'));
833 if (!empty($tag)) {
834 $v = array();
835 foreach ($tag as $k => $val) {
836 if ($k >= $max_tax) { break; }
837 $v[] = array('slug' => $val->slug, 'name' => $val->name, 'url' => get_term_link($val->term_id));
838 }
839 $var['tag'] = $v;
840 }
841
842 // Taxonomy
843 $cat = get_the_terms($post_id, (isset($prams['taxonomy'])?esc_attr($prams['taxonomy']):'category'));
844
845 if(!empty($cat)){
846 $v = array();
847 foreach ($cat as $k => $val) {
848 if ($k >= $max_tax) { break; }
849 $v[] = array('slug' => $val->slug, 'name' => $val->name, 'url' => get_term_link($val->term_id), 'color' => get_term_meta($val->term_id, 'ultp_category_color', true));
850 }
851 $var['category'] = $v;
852 }
853 $data[] = $var;
854 }
855 wp_reset_postdata();
856 }
857 return rest_ensure_response( $data);
858 }
859
860
861 /**
862 * Taxonomy Data Response of REST API
863 *
864 * @since v.1.0.0
865 * @param ARRAY | Parameter (ARRAY)
866 * @return ARRAY | Response Taxonomy List as Array
867 */
868 public function ultp_route_common_data($prams) {
869 if ( ! (isset($_REQUEST['wpnonce']) && wp_verify_nonce( sanitize_key(wp_unslash($_REQUEST['wpnonce'])), 'ultp-nonce' )) ) {
870 return rest_ensure_response([]);
871 }
872
873 $all_post_type = ultimate_post()->get_post_type();
874 $data = array();
875 foreach ($all_post_type as $post_type_slug => $post_type ) {
876 $data_term = array();
877 $taxonomies = get_object_taxonomies($post_type_slug);
878 foreach ($taxonomies as $key => $taxonomy_slug) {
879 $taxonomy_value = get_terms(array(
880 'taxonomy' => $taxonomy_slug,
881 'hide_empty' => false
882 ));
883 if (!is_wp_error($taxonomy_value)) {
884 $data_tax = array();
885 foreach ($taxonomy_value as $k => $taxonomy) {
886 $data_tax[urldecode_deep($taxonomy->slug)] = $taxonomy->name;
887 }
888 if (count($data_tax) > 0) {
889 $data_term[$taxonomy_slug] = $data_tax;
890 }
891 }
892 }
893 $data[$post_type_slug] = $data_term;
894 }
895 // Global Customizer
896 $global = get_option('postx_global', []);
897 // Image Size
898 $image_sizes = ultimate_post()->get_image_size();
899
900 return rest_ensure_response(['taxonomy' => $data, 'global' => $global, 'image' => wp_json_encode($image_sizes), 'posttype' => wp_json_encode($all_post_type)]);
901 }
902
903 /**
904 * Specific Taxonomy Data Response of REST API
905 *
906 * @since v.1.0.0
907 * @param ARRAY | Parameter (ARRAY)
908 * @return ARRAY | Response Taxonomy List as Array
909 */
910 public function ultp_route_taxonomy_info_data($prams) {
911 if ( ! (isset($_REQUEST['wpnonce']) && wp_verify_nonce( sanitize_key(wp_unslash($_REQUEST['wpnonce'])), 'ultp-nonce' )) ) {
912 return rest_ensure_response([]);
913 }
914 $taxValue = isset($prams['taxValue'])?ultimate_post()->ultp_rest_sanitize_params($prams['taxValue']):'';
915 $queryNumber = isset($prams['queryNumber'])?ultimate_post()->ultp_rest_sanitize_params($prams['queryNumber']):'';
916 $taxType = isset($prams['taxType'])?ultimate_post()->ultp_rest_sanitize_params($prams['taxType']):'';
917 $taxSlug = isset($prams['taxSlug'])?ultimate_post()->ultp_rest_sanitize_params($prams['taxSlug']):'';
918 $archiveBuilder = isset($prams['archiveBuilder'])?ultimate_post()->ultp_rest_sanitize_params($prams['archiveBuilder']):'';
919
920 return rest_ensure_response( ultimate_post()->get_category_data(json_decode($taxValue), $queryNumber, $taxType, $taxSlug, $archiveBuilder) );
921 }
922
923 /**
924 * Search Block Data Showing
925 *
926 * @since v.2.9.9
927 * @param STRING
928 * @return ARRAY | Inserted Post Url
929 */
930 public function ultp_search_result($server) {
931 $post = $server->get_params();
932 $searchText = isset($post['searchText'])?ultimate_post()->ultp_rest_sanitize_params($post['searchText']):'';
933 $paged = isset($post['paged'])?ultimate_post()->ultp_rest_sanitize_params($post['paged']):'';
934 $postPerPage = isset($post['postPerPage'])?ultimate_post()->ultp_rest_sanitize_params($post['postPerPage']):'';
935 $query_args = array(
936 's' => $searchText,
937 'paged' => $paged,
938 'compare' => 'LIKE',
939 'orderby' => 'relevance',
940 'posts_per_page' => $postPerPage,
941 );
942 if(isset($post['exclude']) && is_array($post['exclude']) && count($post['exclude']) > 0) {
943 $post['exclude'] = ultimate_post()->ultp_rest_sanitize_params($post['exclude']);
944 $post_exclude = array();
945 foreach( $post['exclude'] as $data ){
946 $post_exclude[$data['title']] = $data['title'];
947 }
948 $all_types = get_post_types( array( 'public' => true ), 'names' );
949 $post_type = array_diff_key($all_types, $post_exclude);
950 $query_args['post_type'] = $post_type;
951 }
952 $output = '';
953 $query_result = new \WP_Query($query_args);
954
955 if ($query_result->have_posts()) {
956 while ($query_result->have_posts()) {
957 $query_result->the_post();
958 $post_id = get_the_ID();
959 $title = get_the_title();
960
961 $output .= '<div class="ultp-search-result__item">';
962 if ($post['image'] == 1 && has_post_thumbnail()) {
963 $thumb_id = get_post_thumbnail_id($post_id);
964 $output .= '<img class="ultp-searchresult-image" src='.wp_get_attachment_image_src($thumb_id, 'thumbnail', false)[0].' alt="'.$title.'"/>';
965 }
966 $output .= '<div class="ultp-searchresult-content">';
967 $output .= '<div class="ultp-rescontent-meta">';
968 // Category
969 $post_cat = get_the_terms($post_id, 'category');
970 if ($post['category'] == 1 && $post_cat && count($post_cat)) {
971 $output .= '<div class="ultp-searchresult-category">';
972 foreach($post_cat as $cat){
973 $output .= '<a href="'.get_term_link($cat->term_id).'">'.$cat->name.'</a>';
974 }
975 $output .= '</div>';
976 }
977 // Author
978 if ($post['author'] == 1) {
979 $user_id = get_the_author_meta('ID');
980 $output .= '<a href="'.get_author_posts_url($user_id).'" class="ultp-searchresult-author">'.get_the_author_meta('display_name').'</a>';
981 }
982 // Date
983 if ($post['date'] == 1) {
984 $output .= '<div class="ultp-searchresult-publishdate">'.get_the_date('F j, Y').'</div>';
985 }
986 $output .= '</div>';
987 $output .= '<a href="'.get_permalink().'" class="ultp-searchresult-title">'.$title.'</a>';
988 if ($post['excerpt'] == 1) {
989 $output .= '<div class="ultp-searchresult-excerpt">'.wp_trim_words(get_the_excerpt(), isset($post['excerptLimit'])?ultimate_post()->ultp_rest_sanitize_params($post['excerptLimit']):55).'</div>';
990 }
991 $output .= '</div>';
992 $output .= '</div>';
993 }
994 }
995
996 return array('post_data' => $output, 'post_count' => $query_result->found_posts);
997 }
998
999 /**
1000 * PostX Site Dark Logo Init
1001 *
1002 * @since v.3.1.9
1003 * @param ARRAY
1004 * @return BOOOLEAN | Inserted Post Url
1005 */
1006 public function init_site_dark_logo_callback ($server) {
1007 $logo_data = $server->get_params();
1008 $success = true;
1009 if( isset($logo_data['logo']['url'] ) ){
1010 update_option( 'ultp_site_dark_logo', $logo_data['logo']['url'] );
1011 } else {
1012 $success = false;
1013 }
1014 return rest_ensure_response([
1015 'success' => $success,
1016 ]);
1017 }
1018 }