PluginProbe ʕ •ᴥ•ʔ
ShopPress – Shop Builder for Elementor and WooCommerce / trunk
ShopPress – Shop Builder for Elementor and WooCommerce vtrunk
shop-press / Admin / API / Services.php
shop-press / Admin / API Last commit date
Export.php 2 years ago GetFields.php 4 months ago Import.php 2 years ago Options.php 1 week ago Pages.php 2 years ago Posts.php 4 months ago Services.php 1 year ago
Services.php
512 lines
1 <?php
2 /**
3 * Admin services.
4 *
5 * @package ShopPress
6 */
7
8 namespace ShopPress\Admin\API;
9
10 defined( 'ABSPATH' ) || exit;
11
12 class Services {
13 /**
14 * Instance of this class.
15 *
16 * @since 1.0.0
17 */
18 public static $instance;
19
20 /**
21 * Provides access to a single instance of a module using the singleton pattern.
22 *
23 * @since 1.0.0
24 *
25 * @return object
26 */
27 public static function instance() {
28 if ( self::$instance === null ) {
29 self::$instance = new self();
30 }
31 return self::$instance;
32 }
33
34 /**
35 * Constructor.
36 *
37 * @since 1.0.0
38 */
39 public function __construct() {
40 add_action( 'rest_api_init', array( $this, 'register_routes' ) );
41 }
42
43 /**
44 * Register routes.
45 *
46 * @since 1.0.0
47 */
48 public function register_routes() {
49 register_rest_route(
50 'sp-admin',
51 '/component-pages',
52 array(
53 array(
54 'methods' => \WP_REST_Server::READABLE,
55 'callback' => array( $this, 'get_pages' ),
56 'permission_callback' => array( $this, 'check_permission' ),
57 ),
58 array(
59 'methods' => \WP_REST_Server::EDITABLE,
60 'callback' => array( $this, 'add_page' ),
61 'permission_callback' => array( $this, 'check_permission' ),
62 ),
63 array(
64 'methods' => \WP_REST_Server::DELETABLE,
65 'callback' => array( $this, 'delete_page' ),
66 'permission_callback' => array( $this, 'check_permission' ),
67 ),
68 )
69 );
70
71 register_rest_route(
72 'sp-admin',
73 '/import-export',
74 array(
75 array(
76 'methods' => \WP_REST_Server::EDITABLE,
77 'callback' => array( $this, 'import_export' ),
78 'permission_callback' => array( $this, 'check_permission' ),
79 ),
80 )
81 );
82
83 register_rest_route(
84 'sp-admin',
85 '/fields',
86 array(
87 array(
88 'methods' => \WP_REST_Server::READABLE,
89 'callback' => array( $this, 'get_fields' ),
90 'permission_callback' => array( $this, 'check_permission' ),
91 ),
92 )
93 );
94
95 register_rest_route(
96 'sp-admin',
97 '/options',
98 array(
99 array(
100 'methods' => \WP_REST_Server::READABLE,
101 'callback' => array( $this, 'get_option' ),
102 'permission_callback' => array( $this, 'check_permission' ),
103 ),
104 array(
105 'methods' => \WP_REST_Server::EDITABLE,
106 'callback' => array( $this, 'update_option' ),
107 'permission_callback' => array( $this, 'check_permission' ),
108 ),
109 )
110 );
111
112 register_rest_route(
113 'sp-admin',
114 '/posts',
115 array(
116 array(
117 'methods' => \WP_REST_Server::READABLE,
118 'callback' => array( $this, 'get_posts' ),
119 'permission_callback' => array( $this, 'check_permission' ),
120 ),
121 array(
122 'methods' => \WP_REST_Server::EDITABLE,
123 'callback' => array( $this, 'add_post' ),
124 'permission_callback' => array( $this, 'check_permission' ),
125 ),
126 )
127 );
128
129 register_rest_route(
130 'sp-admin',
131 '/posts/custom',
132 array(
133 array(
134 'methods' => \WP_REST_Server::READABLE,
135 'callback' => array( $this, 'get_custom_list' ),
136 'permission_callback' => array( $this, 'check_permission' ),
137 ),
138 )
139 );
140
141 register_rest_route(
142 'sp-admin',
143 '/post/edit/(?P<id>[\d]+)',
144 array(
145 array(
146 'methods' => \WP_REST_Server::READABLE,
147 'callback' => array( $this, 'get_post' ),
148 'permission_callback' => array( $this, 'check_permission' ),
149 ),
150 array(
151 'methods' => \WP_REST_Server::EDITABLE,
152 'callback' => array( $this, 'update_post' ),
153 'permission_callback' => array( $this, 'check_permission' ),
154 ),
155 array(
156 'methods' => \WP_REST_Server::DELETABLE,
157 'callback' => array( $this, 'delete_post' ),
158 'permission_callback' => array( $this, 'check_permission' ),
159 ),
160 )
161 );
162
163 register_rest_route(
164 'sp-admin',
165 '/terms',
166 array(
167 array(
168 'methods' => \WP_REST_Server::READABLE,
169 'callback' => array( $this, 'get_terms' ),
170 'permission_callback' => array( $this, 'check_permission' ),
171 ),
172 array(
173 'methods' => \WP_REST_Server::EDITABLE,
174 'callback' => array( $this, 'add_term' ),
175 'permission_callback' => array( $this, 'check_permission' ),
176 ),
177 )
178 );
179
180 register_rest_route(
181 'sp-admin',
182 '/term/edit/(?P<id>[\d]+)',
183 array(
184 array(
185 'methods' => \WP_REST_Server::READABLE,
186 'callback' => array( $this, 'get_term' ),
187 'permission_callback' => array( $this, 'check_permission' ),
188 ),
189 array(
190 'methods' => \WP_REST_Server::EDITABLE,
191 'callback' => array( $this, 'update_term' ),
192 'permission_callback' => array( $this, 'check_permission' ),
193 ),
194 array(
195 'methods' => \WP_REST_Server::DELETABLE,
196 'callback' => array( $this, 'delete_term' ),
197 'permission_callback' => array( $this, 'check_permission' ),
198 ),
199 )
200 );
201
202 register_rest_route(
203 'sp-admin',
204 '/custom-data',
205 array(
206 array(
207 'methods' => \WP_REST_Server::READABLE,
208 'callback' => array( $this, 'get_custom_data' ),
209 'permission_callback' => array( $this, 'check_permission' ),
210 ),
211 )
212 );
213 }
214
215 /**
216 * Add a page.
217 *
218 * @since 1.2.0
219 *
220 * @param object $request
221 */
222 public function add_page( $request ) {
223 return Pages::instance()->add_page( $request );
224 }
225
226 /**
227 * Delete a page.
228 *
229 * @since 1.2.0
230 *
231 * @param object $request
232 */
233 public function delete_page( $request ) {
234 return Pages::instance()->delete_page( $request );
235 }
236
237 /**
238 * Get pages.
239 *
240 * @since 1.2.0
241 *
242 * @param object $request
243 */
244 public function get_pages( $request ) {
245 return Pages::instance()->get_pages( $request );
246 }
247
248 /**
249 * Get terms.
250 *
251 * @since 1.2.0
252 *
253 * @param object $request
254 */
255 public function get_terms( $request ) {
256 return Posts::instance()->get_terms( $request );
257 }
258
259 /**
260 * Get posts.
261 *
262 * @since 1.2.0
263 *
264 * @param object $request
265 */
266 public function get_posts( $request ) {
267 return Posts::instance()->get_posts( $request );
268 }
269
270 /**
271 * Add post.
272 *
273 * @since 1.2.0
274 *
275 * @param object $request
276 */
277 public function add_post( $request ) {
278 return Posts::instance()->add_post( $request );
279 }
280
281 /**
282 * Update post.
283 *
284 * @since 1.2.0
285 *
286 * @param object $request
287 */
288 public function update_post( $request ) {
289 return Posts::instance()->update_post( $request );
290 }
291
292 /**
293 * Delete post.
294 *
295 * @since 1.2.0
296 *
297 * @param object $request
298 */
299 public function delete_post( $request ) {
300 return Posts::instance()->delete_post( $request );
301 }
302
303 /**
304 * Get post.
305 *
306 * @since 1.2.0
307 *
308 * @param object $request
309 */
310 public function get_post( $request ) {
311 return Posts::instance()->get_post( $request );
312 }
313
314 /**
315 * Add a term.
316 *
317 * @since 1.2.0
318 *
319 * @param object $request
320 */
321 public function add_term( $request ) {
322 return Posts::instance()->add_term( $request );
323 }
324
325 /**
326 * Delete a term.
327 *
328 * @since 1.2.0
329 *
330 * @param object $request
331 */
332 public function delete_term( $request ) {
333 return Posts::instance()->delete_term( $request );
334 }
335
336 /**
337 * Get term.
338 *
339 * @since 1.3.1
340 *
341 * @param object $request
342 */
343 public function get_term( $request ) {
344 return Posts::instance()->get_term( $request );
345 }
346
347 /**
348 * Update term.
349 *
350 * @since 1.3.1
351 *
352 * @param object $request
353 */
354 public function update_term( $request ) {
355 return Posts::instance()->update_term( $request );
356 }
357
358 /**
359 * Update option.
360 *
361 * @since 1.0.0
362 *
363 * @param object $request
364 */
365 public function update_option( $request ) {
366 return Options::instance()->update( $request );
367 }
368
369 /**
370 * Get option.
371 *
372 * @since 1.0.0
373 *
374 * @param object $request
375 */
376 public function get_option( $request ) {
377 return Options::instance()->get();
378 }
379
380 /**
381 * Get fields.
382 *
383 * @since 1.2.0
384 *
385 * @param object $request
386 */
387 public function get_fields( $request ) {
388 return GetFields::instance()->get_fields( $request );
389 }
390
391 /**
392 * Get custom list.
393 *
394 * @since 1.4.0
395 *
396 * @param object $request
397 */
398 public function get_custom_list( $request ) {
399 return Posts::instance()->custom_list_filter( $request );
400 }
401
402 /**
403 * Import / Export.
404 *
405 * @since 1.0.0
406 *
407 * @param object $request
408 */
409 public static function import_export( $request ) {
410 $type = $request->get_param( 'type' );
411
412 switch ( $type ) {
413 case 'import': {
414 Import::instance()->import( $request );
415 break;
416 }
417
418 case 'export': {
419 Export::instance()->export( $request );
420 break;
421 }
422
423 default:
424 break;
425 }
426 }
427
428 /**
429 * Search a string in Array.
430 *
431 * @since 1.2.0
432 *
433 * @param array $source
434 * @param string $search
435 */
436 private function search_string( $source, $search ) {
437
438 if ( ! $source || ! $search ) {
439 return array();
440 }
441
442 $matches = array();
443 $closest_match = array();
444 $highest_similarity = 0;
445
446 foreach ( $source as $key => $label ) {
447
448 similar_text( $label, $search, $similarity );
449
450 if ( $similarity > $highest_similarity && $similarity >= 20 ) {
451 $highest_similarity = $similarity;
452
453 $closest_match = array(
454 'value' => $key,
455 'label' => $label,
456 );
457 }
458 }
459
460 if ( ! empty( $closest_match ) ) {
461 $matches[] = $closest_match;
462 }
463
464 if ( ! empty( $matches ) ) {
465 return $matches;
466 }
467
468 return array();
469 }
470
471 /**
472 * Get custom data.
473 *
474 * @since 1.2.0
475 *
476 * @param object $request
477 */
478 public function get_custom_data( $request ) {
479 $source = $request->get_param( 'source' );
480 $search = $request->get_param( 's' );
481
482 if ( ! $source || ! $search ) {
483 return array();
484 }
485
486 if ( 'rules' === $source ) {
487
488 $roles = wp_roles()->role_names;
489
490 return $this->search_string( $roles, $search );
491 }
492
493 if ( 'country' === $source ) {
494
495 $countries = WC()->countries->get_countries();
496
497 return $this->search_string( $countries, $search );
498 }
499
500 return array();
501 }
502
503 /**
504 * Check permission.
505 *
506 * @since 1.0.0
507 */
508 public function check_permission() {
509 return current_user_can( 'manage_options' );
510 }
511 }
512