PluginProbe
Advanced Access Manager – Access Governance for WordPress / 6.9.26
Advanced Access Manager – Access Governance for WordPress v6.9.26
7.1.4 7.1.2 7.1.3 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 All 210 releases
advanced-access-manager / application / Core / Restful / BackendMenuService.php
BackendMenuService.php
269 lines 8.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 Backend Menu service
12 *
13 * @package AAM
14 * @version 6.9.13
15 */
16 class AAM_Core_Restful_BackendMenuService
17 {
18
19 use AAM_Core_Restful_ServiceTrait;
20
21 /**
22 * Constructor
23 *
24 * @return void
25 *
26 * @access protected
27 * @version 6.9.13
28 */
29 protected function __construct()
30 {
31 // Register API endpoint
32 add_action('rest_api_init', function() {
33 // Get the list of backend menus
34 $this->_register_route('/backend-menu', array(
35 'methods' => WP_REST_Server::READABLE,
36 'callback' => array($this, 'get_menus'),
37 'permission_callback' => array($this, 'check_permissions'),
38 'args' => array()
39 ));
40
41 // Get a menu
42 $this->_register_route('/backend-menu/(?<id>[\d]+)', array(
43 'methods' => WP_REST_Server::READABLE,
44 'callback' => array($this, 'get_menu'),
45 'permission_callback' => array($this, 'check_permissions'),
46 'args' => array(
47 'id' => array(
48 'description' => __('Backend menu unique ID', AAM_KEY),
49 'type' => 'number',
50 'required' => true
51 )
52 )
53 ));
54
55 // Update a menu's permission
56 $this->_register_route('/backend-menu/(?<id>[\d]+)', array(
57 'methods' => WP_REST_Server::EDITABLE,
58 'callback' => array($this, 'update_menu_permission'),
59 'permission_callback' => array($this, 'check_permissions'),
60 'args' => array(
61 'id' => array(
62 'description' => __('Backend menu unique ID', AAM_KEY),
63 'type' => 'number',
64 'required' => true
65 ),
66 'is_restricted' => array(
67 'description' => __('Either menu is restricted or not', AAM_KEY),
68 'type' => 'boolean'
69 )
70 )
71 ));
72
73 // Delete a menu's permission
74 $this->_register_route('/backend-menu/(?<id>[\d]+)', array(
75 'methods' => WP_REST_Server::DELETABLE,
76 'callback' => array($this, 'delete_menu_permission'),
77 'permission_callback' => array($this, 'check_permissions'),
78 'args' => array(
79 'id' => array(
80 'description' => __('Backend menu unique ID', AAM_KEY),
81 'type' => 'number',
82 'required' => true
83 )
84 )
85 ));
86
87 // Reset all backend menu permissions
88 $this->_register_route('/backend-menu/reset', array(
89 'methods' => WP_REST_Server::EDITABLE,
90 'callback' => array($this, 'reset_menu_permissions'),
91 'permission_callback' => array($this, 'check_permissions'),
92 'args' => array()
93 ));
94
95 // Register additional endpoints with add-ons
96 $more = apply_filters('aam_backend_menu_api_filter', array(), array(
97 'methods' => WP_REST_Server::EDITABLE,
98 'permission_callback' => array($this, 'check_permissions'),
99 'args' => array()
100 ));
101
102 if (is_array($more)) {
103 foreach($more as $endpoint => $params) {
104 // Wrap the callback function to include the current subject
105 $params['callback'] = function(WP_REST_Request $request) use ($params) {
106 return call_user_func_array($params['callback'], array(
107 $request,
108 $this->_determine_subject($request)
109 ));
110 };
111
112 $this->_register_route($endpoint, $params);
113 }
114 }
115 });
116 }
117
118 /**
119 * Get the backend menu list
120 *
121 * @param WP_REST_Request $request
122 *
123 * @return WP_REST_Response
124 *
125 * @access public
126 * @version 6.9.13
127 */
128 public function get_menus(WP_REST_Request $request)
129 {
130 $service = $this->_get_service($request);
131
132 return rest_ensure_response($service->get_menu_list());
133 }
134
135 /**
136 * Get backend menu item
137 *
138 * @param WP_REST_Request $request
139 *
140 * @return WP_REST_Response
141 *
142 * @access public
143 * @version 6.9.13
144 */
145 public function get_menu(WP_REST_Request $request)
146 {
147 $service = $this->_get_service($request);
148
149 try {
150 $result = $service->get_menu_by_id(
151 intval($request->get_param('id'))
152 );
153 } catch (Exception $e) {
154 $result = $this->_prepare_error_response($e);
155 }
156
157 return rest_ensure_response($result);
158 }
159
160 /**
161 * Update backend menu permission
162 *
163 * @param WP_REST_Request $request
164 *
165 * @return WP_REST_Response
166 *
167 * @access public
168 * @version 6.9.13
169 */
170 public function update_menu_permission(WP_REST_Request $request)
171 {
172 $service = $this->_get_service($request);
173
174 try {
175 $result = $service->update_menu_permission(
176 intval($request->get_param('id')),
177 $request->get_param('is_restricted')
178 );
179 } catch (Exception $e) {
180 $result = $this->_prepare_error_response($e);
181 }
182
183 return rest_ensure_response($result);
184 }
185
186 /**
187 * Delete menu permission
188 *
189 * @param WP_REST_Request $request
190 *
191 * @return WP_REST_Response
192 *
193 * @access public
194 * @version 6.9.13
195 */
196 public function delete_menu_permission(WP_REST_Request $request)
197 {
198 $service = $this->_get_service($request);
199
200 try {
201 $result = $service->delete_menu_permission(
202 intval($request->get_param('id'))
203 );
204 } catch (UnderflowException $e) {
205 $result = $this->_prepare_error_response($e, 'rest_not_found', 404);
206 } catch (Exception $e) {
207 $result = $this->_prepare_error_response($e);
208 }
209
210 return rest_ensure_response($result);
211 }
212
213 /**
214 * Reset all permissions
215 *
216 * @param WP_REST_Request $request
217 *
218 * @return WP_REST_Response
219 *
220 * @access public
221 * @version 6.9.13
222 */
223 public function reset_menu_permissions(WP_REST_Request $request)
224 {
225 $service = $this->_get_service($request);
226
227 try {
228 $result = $service->reset_permissions();
229 } catch (Exception $e) {
230 $result = $this->_prepare_error_response($e);
231 }
232
233 return rest_ensure_response($result);
234 }
235
236 /**
237 * Check if current user has access to the service
238 *
239 * @return bool
240 *
241 * @access public
242 * @version 6.9.13
243 */
244 public function check_permissions()
245 {
246 return current_user_can('aam_manager')
247 && current_user_can('aam_manage_admin_menu');
248 }
249
250 /**
251 * Get JWT framework service
252 *
253 * @param WP_REST_Request $request
254 *
255 * @return AAM_Framework_Service_BackendMenu
256 *
257 * @access private
258 * @version 6.9.13
259 */
260 private function _get_service($request)
261 {
262 return AAM_Framework_Manager::backend_menu(
263 new AAM_Framework_Model_ServiceContext(array(
264 'subject' => $this->_determine_subject($request)
265 ))
266 );
267 }
268
269 }