PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / trunk
Advanced Access Manager – Access Governance for WordPress vtrunk
6.8.4 6.8.5 6.9.0 6.9.1 6.9.10 6.9.11 6.9.12 6.9.13 6.9.14 6.9.15 6.9.16 6.9.17 6.9.18 6.9.19 6.9.2 6.9.20 6.9.21 6.9.22 6.9.23 6.9.24 6.9.25 6.9.26 6.9.27 6.9.28 6.9.29 6.9.3 6.9.30 6.9.31 6.9.32 6.9.33 6.9.34 6.9.35 6.9.36 6.9.37 6.9.38 6.9.39 6.9.4 6.9.41 6.9.42 6.9.43 6.9.44 6.9.45 6.9.46 6.9.47 6.9.48 6.9.49 6.9.5 6.9.51 6.9.6 6.9.7 6.9.8 6.9.9 7.0.0 7.0.0-alpha.6 7.0.0-alpha.7 7.0.0-beta.1 7.0.0-rc1 7.0.0-rc2 7.0.0-rc3 7.0.1 7.0.10 7.0.11 7.0.2 7.0.3 7.0.4 7.0.5 7.0.6 7.0.7 7.0.8 7.0.9 7.1.0 7.1.1 trunk 3.0 4.0 4.0.1 4.1 4.2 4.3 4.4 4.4.1 4.5 4.6 4.6.1 4.6.2 4.7 4.7.1 4.7.2 4.7.5 4.7.6 4.8 4.8.1 4.9 4.9.1 4.9.2 4.9.3 4.9.4 4.9.5 4.9.5.1 4.9.5.2 5.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1 5.1.1 5.10 5.11 5.2 5.2.1 5.2.5 5.2.6 5.2.7 5.3 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.4 5.4.1 5.4.2 5.4.3 5.4.3.1 5.4.3.2 5.5 5.5.1 5.5.2 5.6 5.6.1 5.6.1.1 5.7 5.7.1 5.7.2 5.7.3 5.8 5.8.1 5.8.2 5.8.3 5.9 5.9.1 5.9.1.1 5.9.2 5.9.2.1 5.9.3 5.9.4 5.9.5 5.9.6 5.9.6.1 5.9.6.2 5.9.6.3 5.9.7 5.9.7.1 5.9.7.2 5.9.7.3 5.9.8 5.9.8.1 5.9.9 5.9.9.1 6.0.0 6.0.1 6.0.2 6.0.3 6.0.4 6.0.5 6.1.0 6.1.1 6.2.0 6.2.1 6.2.2 6.3.0 6.3.1 6.3.2 6.3.3 6.4.0 6.4.1 6.4.2 6.4.3 6.5.0 6.5.1 6.5.2 6.5.3 6.5.4 6.6.0 6.6.1 6.6.2 6.6.3 6.6.4 6.7.0 6.7.1 6.7.2 6.7.3 6.7.4 6.7.5 6.7.6 6.7.7 6.7.8 6.7.9 6.8.0 6.8.1 6.8.2 6.8.3
advanced-access-manager / application / Restful / Widgets.php
advanced-access-manager / application / Restful Last commit date
AccessDeniedRedirect.php 1 year ago AdminToolbar.php 1 year ago ApiRoute.php 1 year ago BackendMenu.php 1 year ago BackwardCompatibility.php 1 year ago Capability.php 1 year ago Configs.php 5 months ago Content.php 1 year ago Identity.php 1 year ago Jwt.php 5 months ago LoginRedirect.php 1 year ago LogoutRedirect.php 1 year ago Metabox.php 1 year ago Mu.php 1 year ago NotFoundRedirect.php 1 year ago Policies.php 1 year ago Roles.php 1 year ago SecureLogin.php 1 year ago SecurityAudit.php 1 year ago ServiceTrait.php 1 year ago Settings.php 1 year ago Urls.php 1 year ago Users.php 1 year ago Widgets.php 1 year ago
Widgets.php
297 lines
1 <?php
2
3 /**
4 * ======================================================================
5 * LICENSE: This file is subject to the terms and conditions defined in *
6 * file 'license.txt', which is part of this source code package. *
7 * ======================================================================
8 */
9
10 /**
11 * RESTful API for the Widgets service
12 *
13 * @package AAM
14 * @version 7.0.0
15 */
16 class AAM_Restful_Widgets
17 {
18
19 use AAM_Restful_ServiceTrait;
20
21 /**
22 * Necessary permissions to access endpoint
23 *
24 * @version 7.0.0
25 */
26 const PERMISSIONS = [
27 'aam_manager',
28 'aam_manage_widgets'
29 ];
30
31 /**
32 * Constructor
33 *
34 * @return void
35 * @access protected
36 *
37 * @version 7.0.0
38 */
39 protected function __construct()
40 {
41 // Register API endpoint
42 add_action('rest_api_init', function() {
43 // Get the list of all widgets grouped by screen
44 $this->_register_route('/widgets', [
45 'methods' => WP_REST_Server::READABLE,
46 'callback' => array($this, 'get_items'),
47 'args' => array(
48 'area' => array(
49 'description' => 'Website area',
50 'type' => 'string',
51 'enum' => [ 'dashboard', 'frontend' ]
52 )
53 )
54 ], self::PERMISSIONS);
55
56 // Get a widget
57 $this->_register_route('/widget/(?P<slug>[\w]+)', [
58 'methods' => WP_REST_Server::READABLE,
59 'callback' => array($this, 'get_item'),
60 'args' => array(
61 'slug' => array(
62 'description' => 'Widget unique slug',
63 'type' => 'string',
64 'required' => true
65 )
66 )
67 ], self::PERMISSIONS);
68
69 // Update a widget's permission
70 $this->_register_route('/widget/(?P<slug>[\w]+)', [
71 'methods' => WP_REST_Server::EDITABLE,
72 'callback' => array($this, 'update_item_permission'),
73 'args' => array(
74 'slug' => array(
75 'description' => 'Widget unique slug',
76 'type' => 'string',
77 'required' => true
78 ),
79 'effect' => array(
80 'description' => 'Either metabox is restricted or not',
81 'type' => 'string',
82 'default' => 'deny',
83 'enum' => [ 'allow', 'deny' ]
84 )
85 )
86 ], self::PERMISSIONS);
87
88 // Delete a widget's permission
89 $this->_register_route('/widget/(?P<slug>[\w]+)', [
90 'methods' => WP_REST_Server::DELETABLE,
91 'callback' => array($this, 'reset_item_permission'),
92 'args' => array(
93 'slug' => array(
94 'description' => 'Widget unique slug',
95 'type' => 'string',
96 'required' => true
97 )
98 )
99 ], self::PERMISSIONS);
100
101 // Reset all or specific screen permissions
102 $this->_register_route('/widgets', [
103 'methods' => WP_REST_Server::DELETABLE,
104 'callback' => array($this, 'reset_permissions'),
105 'args' => array(
106 'area' => array(
107 'description' => 'Website area',
108 'type' => 'string',
109 'enum' => [ 'dashboard', 'frontend' ]
110 )
111 )
112 ], self::PERMISSIONS);
113 });
114 }
115
116 /**
117 * Get a list of widgets grouped by website area
118 *
119 * @param WP_REST_Request $request
120 *
121 * @return WP_REST_Response
122 * @access public
123 *
124 * @version 7.0.0
125 */
126 public function get_items(WP_REST_Request $request)
127 {
128 try {
129 $area = $request->get_param('area');
130 $result = AAM_Service_Widgets::get_instance()->get_widget_list(
131 $this->_get_service($request)
132 );
133
134 if (!empty($area)) {
135 $result = array_values(
136 array_filter($result, function($c) use ($area) {
137 return $c['area'] === $area;
138 })
139 );
140 }
141
142 return $result;
143 } catch (Exception $e) {
144 $result = $this->_prepare_error_response($e);
145 }
146
147 return rest_ensure_response($result);
148 }
149
150 /**
151 * Get a widget by ID
152 *
153 * @param WP_REST_Request $request
154 *
155 * @return WP_REST_Response
156 * @access public
157 *
158 * @version 7.0.0
159 */
160 public function get_item(WP_REST_Request $request)
161 {
162 try {
163 $result = $this->_get_widget_by_slug(
164 $request->get_param('slug'),
165 $this->_get_service($request)
166 );
167 } catch (Exception $e) {
168 $result = $this->_prepare_error_response($e);
169 }
170
171 return rest_ensure_response($result);
172 }
173
174 /**
175 * Update widget permission
176 *
177 * @param WP_REST_Request $request
178 *
179 * @return WP_REST_Response
180 * @access public
181 *
182 * @version 7.0.0
183 */
184 public function update_item_permission(WP_REST_Request $request)
185 {
186 try {
187 $service = $this->_get_service($request);
188 $slug = $request->get_param('slug');
189
190 if ($request->get_param('effect') === 'allow') {
191 $service->allow($slug);
192 } else {
193 $service->deny($slug);
194 }
195
196 $result = $this->_get_widget_by_slug($slug, $service);
197 } catch (Exception $e) {
198 $result = $this->_prepare_error_response($e);
199 }
200
201 return rest_ensure_response($result);
202 }
203
204 /**
205 * Delete widget permission
206 *
207 * @param WP_REST_Request $request
208 *
209 * @return WP_REST_Response
210 * @access public
211 *
212 * @version 7.0.0
213 */
214 public function reset_item_permission(WP_REST_Request $request)
215 {
216 try {
217 $service = $this->_get_service($request);
218 $result = [
219 'success' => $service->reset($request->get_param('slug'))
220 ];
221 } catch (Exception $e) {
222 $result = $this->_prepare_error_response($e);
223 }
224
225 return rest_ensure_response($result);
226 }
227
228 /**
229 * Reset all permissions
230 *
231 * @param WP_REST_Request $request
232 *
233 * @return WP_REST_Response
234 * @access public
235 *
236 * @version 7.0.0
237 */
238 public function reset_permissions(WP_REST_Request $request)
239 {
240 try {
241 $service = $this->_get_service($request);
242 $result = [ 'success' => $service->reset() ];
243 } catch (Exception $e) {
244 $result = $this->_prepare_error_response($e);
245 }
246
247 return rest_ensure_response($result);
248 }
249
250 /**
251 * Get framework service
252 *
253 * @param WP_REST_Request $request
254 *
255 * @return AAM_Framework_Service_Widgets
256 * @access private
257 *
258 * @version 7.0.0
259 */
260 private function _get_service($request)
261 {
262 return AAM::api()->widgets(
263 $this->_determine_access_level($request),
264 [ 'error_handling' => 'exception' ]
265 );
266 }
267
268 /**
269 * Get a widget by slug
270 *
271 * @param string $slug
272 * @param AAM_Framework_Service_Widgets $service
273 *
274 * @return array
275 * @access private
276 *
277 * @version 7.0.0
278 */
279 private function _get_widget_by_slug($slug, $service)
280 {
281 $match = array_filter(
282 AAM_Service_Widgets::get_instance()->get_widget_list($service),
283 function($w) use ($slug) { return $w['slug'] === $slug; }
284 );
285
286 if (empty($match)) {
287 throw new OutOfRangeException(sprintf(
288 'Widget with slug %s does not exist or is not indexed', esc_js($slug)
289 ));
290 } else {
291 $result = array_shift($match);
292 }
293
294 return $result;
295 }
296
297 }