PluginProbe
Post Grid Gutenberg Blocks – PostX / 2.9.7
Post Grid Gutenberg Blocks – PostX v2.9.7
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 2.9.7, at classes/REST_API.php

367 lines 13.8 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('edit_posts');
77 },
78 'args' => array()
79 )
80 )
81 );
82 }
83
84 /**
85 * Insert Post For Imported Template
86 *
87 * @since v.2.6.7
88 * @param STRING
89 * @return ARRAY | Inserted Post Url
90 */
91 public function template_page_insert($server) {
92 $post = $server->get_params();
93 $new_page = array(
94 'post_title' => $post['title'],
95 'post_type' => 'page',
96 'post_content' => $post['blockCode'],
97 'post_status' => 'draft',
98 );
99 $post_id = wp_insert_post( $new_page );
100 return array( 'success' => true, 'link' => get_edit_post_link($post_id));
101 }
102
103
104 public function search_settings_action($server) {
105 global $wpdb;
106 $post = $server->get_params();
107
108 switch ($post['type']) {
109 case 'posts':
110 case 'allpost':
111 case 'postExclude':
112 $post_type = array('post');
113 if ($post['type'] == 'allpost') {
114 $post_type = array_keys(ultimate_post()->get_post_type());
115 } else if ($post['type'] == 'postExclude') {
116 $post_type = array($post['condition']);
117 }
118 $args = array(
119 'post_type' => $post_type,
120 'post_status' => 'publish',
121 'posts_per_page' => 10,
122 );
123 if (is_numeric($post['term'])) {
124 $args['p'] = $post['term'];
125 } else {
126 $args['s'] = $post['term'];
127 }
128
129 $post_results = new \WP_Query($args);
130 $data = [];
131 if (!empty($post_results)) {
132 while ( $post_results->have_posts() ) {
133 $post_results->the_post();
134 $id = get_the_ID();
135 $title = html_entity_decode(get_the_title());
136 $data[] = array('value'=>$id, 'title'=>($title?'[ID: '.$id.'] '.$title:('[ID: '.$id.']')));
137 }
138 wp_reset_postdata();
139 }
140 return ['success' => true, 'data' => $data];
141 break;
142
143 case 'author':
144 $term = '%'. $wpdb->esc_like( $post['term'] ) .'%';
145 $post_results = $wpdb->get_results(
146 $wpdb->prepare(
147 "SELECT ID, display_name
148 FROM $wpdb->users
149 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
150 )
151 );
152 $data = [];
153 if (!empty($post_results)) {
154 foreach ($post_results as $key => $val) {
155 $data[] = array('value'=>$val->ID, 'title'=>'[ID: '.$val->ID.'] '.$val->display_name);
156 }
157 }
158 return ['success' => true, 'data' => $data];
159 break;
160
161 case 'taxvalue':
162 $split = explode('###', $post['condition']);
163 $condition = $split[1] != 'multiTaxonomy' ? array($split[1]) : get_object_taxonomies($split[0]);
164 $args = array(
165 'taxonomy' => $condition,
166 'fields' => 'all',
167 'orderby' => 'id',
168 'order' => 'ASC',
169 'name__like'=> $post['term']
170 );
171 if (is_numeric($post['term'])) {
172 unset($args['name__like']);
173 $args['include'] = array($post['term']);
174 }
175
176 $post_results = get_terms( $args );
177 $data = [];
178 if (!empty($post_results)) {
179 foreach ($post_results as $key => $val) {
180 if ($split[1] == 'multiTaxonomy') {
181 $data[] = array('value'=>$val->taxonomy.'###'.$val->slug, 'title'=> '[ID: '.$val->term_id.'] '.$val->taxonomy.': '.$val->name);
182 } else {
183 $data[] = array('value'=>$val->slug, 'title'=>'[ID: '.$val->term_id.'] '.$val->name);
184 }
185 }
186 }
187 return ['success' => true, 'data' => $data];
188 break;
189
190 case 'taxExclude':
191 $condition = get_object_taxonomies($post['condition']);
192 $args = array(
193 'taxonomy' => $condition,
194 'fields' => 'all',
195 'orderby' => 'id',
196 'order' => 'ASC',
197 'name__like'=> $post['term']
198 );
199 if (is_numeric($post['term'])) {
200 unset($args['name__like']);
201 $args['include'] = array($post['term']);
202 }
203 $post_results = get_terms( $args );
204 $data = [];
205 if (!empty($post_results)) {
206 foreach ($post_results as $key => $val) {
207 $data[] = array('value'=>$val->taxonomy.'###'.$val->slug, 'title'=> '[ID: '.$val->term_id.'] '.$val->taxonomy.': '.$val->name);
208 }
209 }
210 return ['success' => true, 'data' => $data];
211 break;
212
213
214 default:
215 return ['success' => true, 'data' => [['value'=>'', 'title'=>'- Select -']]];
216 break;
217 }
218 }
219
220 /**
221 * Post Data Response of REST API
222 *
223 * @since v.1.0.0
224 * @param MIXED | Pram (ARRAY), Local (BOOLEAN)
225 * @return ARRAY | Response Image Size as Array
226 */
227 public function ultp_route_post_data($prams,$local=false) {
228 if (!wp_verify_nonce(wp_unslash($_REQUEST['wpnonce']), 'ultp-nonce') && $local){
229 return ;
230 }
231 $prams = $prams->get_params();
232 $data = [];
233 $loop = new \WP_Query( ultimate_post()->get_query($prams) );
234 $max_tax = $prams['maxTaxonomy'] == '0' ? 0 : ( $prams['maxTaxonomy'] ? $prams['maxTaxonomy'] : 30 );
235
236
237 if ($loop->have_posts()) {
238 while($loop->have_posts()) {
239 $loop->the_post();
240 $var = array();
241 $post_id = get_the_ID();
242 $user_id = get_the_author_meta('ID');
243 $content_data = get_the_content();
244 $var['ID'] = $post_id;
245 $var['title'] = get_the_title();
246 $var['permalink'] = get_permalink();
247 $var['seo_meta'] = ultimate_post()->get_excerpt($post_id, 1);
248 $var['excerpt'] = strip_tags($content_data);
249 $var['excerpt_full']= strip_tags(get_the_excerpt());
250 $var['time'] = (int)get_the_date('U')*1000;
251 $var['timeModified']= (int)get_the_modified_date('U')*1000;
252 $var['post_time'] = human_time_diff(get_the_time('U'),current_time('U'));
253 $var['view'] = get_post_meta(get_the_ID(),'__post_views_count', true);
254 $var['comments'] = get_comments_number();
255 $var['author_link'] = get_author_posts_url($user_id);
256 $var['avatar_url'] = get_avatar_url($user_id);
257 $var['display_name']= get_the_author_meta('display_name');
258 $var['reading_time']= ceil(strlen($content_data)/1200);
259 $post_video = get_post_meta($post_id, '__builder_feature_video', true);
260 // Video
261 if($post_video){
262 $var['has_video'] = true;
263 }
264 // image
265 $image_sizes = ultimate_post()->get_image_size();
266 $image_src = array();
267 if (has_post_thumbnail()) {
268 $thumb_id = get_post_thumbnail_id($post_id);
269 foreach ($image_sizes as $key => $value) {
270 $image_src[$key] = wp_get_attachment_image_src($thumb_id, $key, false)[0];
271 }
272 $var['image'] = $image_src;
273 } elseif(isset($prams['fallbackImg']['id'])) {
274 foreach ($image_sizes as $key => $value) {
275 $image_src[$key] = wp_get_attachment_image_src($prams['fallbackImg']['id'], $key, false)[0];
276 }
277 $var['image'] = $image_src;
278 $var['is_fallback'] = true;
279 }
280
281 // tag
282 $tag = get_the_terms($post_id, (isset($prams['tag'])?esc_attr($prams['tag']):'post_tag'));
283 if (!empty($tag)) {
284 $v = array();
285 foreach ($tag as $k => $val) {
286 if ($k >= $max_tax) { break; }
287 $v[] = array('slug' => $val->slug, 'name' => $val->name, 'url' => get_term_link($val->term_id));
288 }
289 $var['tag'] = $v;
290 }
291
292 // Taxonomy
293 $cat = get_the_terms($post_id, (isset($prams['taxonomy'])?esc_attr($prams['taxonomy']):'category'));
294
295 if(!empty($cat)){
296 $v = array();
297 foreach ($cat as $k => $val) {
298 if ($k >= $max_tax) { break; }
299 $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));
300 }
301 $var['category'] = $v;
302 }
303 $data[] = $var;
304 }
305 wp_reset_postdata();
306 }
307 return rest_ensure_response( $data);
308 }
309
310
311 /**
312 * Taxonomy Data Response of REST API
313 *
314 * @since v.1.0.0
315 * @param ARRAY | Parameter (ARRAY)
316 * @return ARRAY | Response Taxonomy List as Array
317 */
318 public function ultp_route_common_data($prams) {
319 if (!wp_verify_nonce(wp_unslash($_REQUEST['wpnonce']), 'ultp-nonce')){
320 return rest_ensure_response([]);
321 }
322
323 $all_post_type = ultimate_post()->get_post_type();
324 $data = array();
325 foreach ($all_post_type as $post_type_slug => $post_type ) {
326 $data_term = array();
327 $taxonomies = get_object_taxonomies($post_type_slug);
328 foreach ($taxonomies as $key => $taxonomy_slug) {
329 $taxonomy_value = get_terms(array(
330 'taxonomy' => $taxonomy_slug,
331 'hide_empty' => false
332 ));
333 if (!is_wp_error($taxonomy_value)) {
334 $data_tax = array();
335 foreach ($taxonomy_value as $k => $taxonomy) {
336 $data_tax[urldecode_deep($taxonomy->slug)] = $taxonomy->name;
337 }
338 if (count($data_tax) > 0) {
339 $data_term[$taxonomy_slug] = $data_tax;
340 }
341 }
342 }
343 $data[$post_type_slug] = $data_term;
344 }
345 // Global Customizer
346 $global = get_option('postx_global', []);
347 // Image Size
348 $image_sizes = ultimate_post()->get_image_size();
349
350 return rest_ensure_response(['taxonomy' => $data, 'global' => $global, 'image' => json_encode($image_sizes), 'posttype' => json_encode($all_post_type)]);
351 }
352
353 /**
354 * Specific Taxonomy Data Response of REST API
355 *
356 * @since v.1.0.0
357 * @param ARRAY | Parameter (ARRAY)
358 * @return ARRAY | Response Taxonomy List as Array
359 */
360 public function ultp_route_taxonomy_info_data($prams) {
361 if (!wp_verify_nonce(wp_unslash($_REQUEST['wpnonce']), 'ultp-nonce')) {
362 return rest_ensure_response([]);
363 }
364
365 return rest_ensure_response( ultimate_post()->get_category_data(json_decode($prams['taxValue']), $prams['queryNumber'], $prams['taxType'], $prams['taxSlug'], $prams['archiveBuilder']) );
366 }
367 }