PluginProbe
Extendify / 0.6.0
Extendify v0.6.0
3.2.1 3.2.0 3.1.6 3.1.5 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 3.0.6 3.0.5 3.0.4 trunk 0.1.0 0.10.0 0.10.1 0.10.2 0.11.0 0.11.1 0.2.0 0.3.0 0.3.1 0.4.0 0.5.0 0.6.0 All 127 releases
extendify / app / ApiRouter.php

ApiRouter.php in Extendify 0.6.0, at app/ApiRouter.php

138 lines 3.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * API router
4 */
5
6 namespace Extendify\Library;
7
8 use Extendify\Library\App;
9 use Extendify\Library\Http;
10
11 /**
12 * Simple router for the REST Endpoints
13 */
14 class ApiRouter extends \WP_REST_Controller
15 {
16
17 /**
18 * The class instance.
19 *
20 * @var $instance
21 */
22 protected static $instance = null;
23
24 /**
25 * The capablity required for access.
26 *
27 * @var $capability
28 */
29 protected $capability;
30
31
32 /**
33 * The constructor
34 */
35 public function __construct()
36 {
37 $this->capability = App::$requiredCapability;
38 add_filter(
39 'rest_request_before_callbacks',
40 // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed
41 function ($response, $handler, $request) {
42 // Add the request to our helper class.
43 if ($request->get_header('x_extendify')) {
44 Http::init($request);
45 }
46
47 return $response;
48 },
49 10,
50 3
51 );
52 }
53
54 /**
55 * Check the authorization of the request
56 *
57 * @return boolean
58 */
59 public function checkPermission()
60 {
61 // Check for the nonce on the server (used by WP REST).
62 if (isset($_SERVER['HTTP_X_WP_NONCE']) && \wp_verify_nonce(sanitize_text_field(wp_unslash($_SERVER['HTTP_X_WP_NONCE'])), 'wp_rest')) {
63 return \current_user_can($this->capability);
64 }
65
66 return false;
67 }
68
69 /**
70 * Register dynamic routes
71 *
72 * @param string $namespace - The api name space.
73 * @param string $endpoint - The endpoint.
74 * @param function $callback - The callback to run.
75 *
76 * @return void
77 */
78 public function getHandler($namespace, $endpoint, $callback)
79 {
80 \register_rest_route(
81 $namespace,
82 $endpoint,
83 [
84 'methods' => 'GET',
85 'callback' => $callback,
86 'permission_callback' => [
87 $this,
88 'checkPermission',
89 ],
90 ]
91 );
92 }
93
94 /**
95 * The post handler
96 *
97 * @param string $namespace - The api name space.
98 * @param string $endpoint - The endpoint.
99 * @param string $callback - The callback to run.
100 *
101 * @return void
102 */
103 public function postHandler($namespace, $endpoint, $callback)
104 {
105 \register_rest_route(
106 $namespace,
107 $endpoint,
108 [
109 'methods' => 'POST',
110 'callback' => $callback,
111 'permission_callback' => [
112 $this,
113 'checkPermission',
114 ],
115 ]
116 );
117 }
118
119 /**
120 * The caller
121 *
122 * @param string $name - The name of the method to call.
123 * @param array $arguments - The arguments to pass in.
124 *
125 * @return mixed
126 */
127 public static function __callStatic($name, array $arguments)
128 {
129 $name = "{$name}Handler";
130 if (is_null(self::$instance)) {
131 self::$instance = new static();
132 }
133
134 $r = self::$instance;
135 return $r->$name(APP::$slug . '/' . APP::$apiVersion, ...$arguments);
136 }
137 }
138