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 / Metabox.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
Metabox.php
277 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 Metaboxes service
12 *
13 * @package AAM
14 * @version 7.0.0
15 */
16 class AAM_Restful_Metabox
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_metaboxes'
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 metaboxes grouped by screen
44 $this->_register_route('/metaboxes', [
45 'methods' => WP_REST_Server::READABLE,
46 'callback' => array($this, 'get_items'),
47 'args' => array(
48 'screen_id' => array(
49 'description' => 'The screen ID when metabox are rendered',
50 'type' => 'string',
51 'required' => false
52 )
53 )
54 ], self::PERMISSIONS);
55
56 // Get a metabox
57 $this->_register_route('/metabox/(?P<slug>[\w]+)', [
58 'methods' => WP_REST_Server::READABLE,
59 'callback' => array($this, 'get_item'),
60 'args' => array(
61 'slug' => array(
62 'description' => 'Metabox slug',
63 'type' => 'string',
64 'required' => true
65 ),
66 'screen_id' => array(
67 'description' => 'The screen ID when metabox is rendered',
68 'type' => 'string',
69 'required' => false
70 )
71 )
72 ], self::PERMISSIONS);
73
74 // Update a metabox's permission
75 $this->_register_route('/metabox/(?P<slug>[\w]+)', [
76 'methods' => WP_REST_Server::EDITABLE,
77 'callback' => array($this, 'update_item_permission'),
78 'args' => array(
79 'slug' => array(
80 'description' => 'Metabox slug',
81 'type' => 'string',
82 'required' => true
83 ),
84 'screen_id' => array(
85 'description' => 'The screen ID when metabox is rendered',
86 'type' => 'string',
87 'required' => false
88 ),
89 'effect' => array(
90 'description' => 'Either metabox is restricted or not',
91 'type' => 'string',
92 'default' => 'deny',
93 'enum' => [ 'allow', 'deny' ]
94 )
95 )
96 ], self::PERMISSIONS);
97
98 // Delete a metabox's permission
99 $this->_register_route('/metabox/(?P<slug>[\w]+)', [
100 'methods' => WP_REST_Server::DELETABLE,
101 'callback' => array($this, 'reset_item_permission'),
102 'args' => array(
103 'slug' => array(
104 'description' => 'Metabox slug',
105 'type' => 'string',
106 'required' => true
107 ),
108 'screen_id' => array(
109 'description' => 'The screen ID when metabox is rendered',
110 'type' => 'string',
111 'required' => false
112 )
113 )
114 ], self::PERMISSIONS);
115
116 // Reset all or specific screen permissions
117 $this->_register_route('/metaboxes', [
118 'methods' => WP_REST_Server::DELETABLE,
119 'callback' => array($this, 'reset_permissions'),
120 'args' => array(
121 'screen_id' => array(
122 'description' => 'The screen ID when metaboxes are rendered',
123 'type' => 'string',
124 'required' => false
125 )
126 )
127 ], self::PERMISSIONS);
128 });
129 }
130
131 /**
132 * Get a list of metaboxes for given post type
133 *
134 * @param WP_REST_Request $request
135 *
136 * @return WP_REST_Response
137 * @access public
138 *
139 * @version 7.0.0
140 */
141 public function get_items(WP_REST_Request $request)
142 {
143 try {
144 $service = $this->_get_service($request);
145 $result = $service->get_items($request->get_param('screen_id'));
146 } catch (Exception $e) {
147 $result = $this->_prepare_error_response($e);
148 }
149
150 return rest_ensure_response($result);
151 }
152
153 /**
154 * Get a metabox by ID
155 *
156 * @param WP_REST_Request $request
157 *
158 * @return WP_REST_Response
159 * @access public
160 *
161 * @version 7.0.0
162 */
163 public function get_item(WP_REST_Request $request)
164 {
165 try {
166 $service = $this->_get_service($request);
167 $result = $service->item(
168 $request->get_param('slug'),
169 $request->get_param('screen_id')
170 );
171 } catch (Exception $e) {
172 $result = $this->_prepare_error_response($e);
173 }
174
175 return rest_ensure_response($result);
176 }
177
178 /**
179 * Update metabox permission
180 *
181 * @param WP_REST_Request $request
182 *
183 * @return WP_REST_Response
184 * @access public
185 *
186 * @version 7.0.0
187 */
188 public function update_item_permission(WP_REST_Request $request)
189 {
190 try {
191 $service = $this->_get_service($request);
192 $slug = $request->get_param('slug');
193 $screen_id = $request->get_param('screen_id');
194
195 if ($request->get_param('effect') === 'allow') {
196 $service->allow($slug, $screen_id);
197 } else {
198 $service->deny($slug, $screen_id);
199 }
200
201 $result = $service->item($slug, $screen_id);
202 } catch (Exception $e) {
203 $result = $this->_prepare_error_response($e);
204 }
205
206 return rest_ensure_response($result);
207 }
208
209 /**
210 * Delete metabox permission
211 *
212 * @param WP_REST_Request $request
213 *
214 * @return WP_REST_Response
215 * @access public
216 *
217 * @version 7.0.0
218 */
219 public function reset_item_permission(WP_REST_Request $request)
220 {
221 try {
222 $service = $this->_get_service($request);
223 $result = [ 'success' => $service->reset(
224 $request->get_param('slug'),
225 $request->get_param('screen_id')
226 ) ];
227 } catch (Exception $e) {
228 $result = $this->_prepare_error_response($e);
229 }
230
231 return rest_ensure_response($result);
232 }
233
234 /**
235 * Reset all permissions
236 *
237 * @param WP_REST_Request $request
238 *
239 * @return WP_REST_Response
240 * @access public
241 *
242 * @version 7.0.0
243 */
244 public function reset_permissions(WP_REST_Request $request)
245 {
246 try {
247 $service = $this->_get_service($request);
248 $result = [ 'success' => $service->reset(
249 null,
250 $request->get_param('screen_id')
251 ) ];
252 } catch (Exception $e) {
253 $result = $this->_prepare_error_response($e);
254 }
255
256 return rest_ensure_response($result);
257 }
258
259 /**
260 * Get framework service
261 *
262 * @param WP_REST_Request $request
263 *
264 * @return AAM_Framework_Service_Metaboxes
265 * @access private
266 *
267 * @version 7.0.0
268 */
269 private function _get_service($request)
270 {
271 return AAM::api()->metaboxes(
272 $this->_determine_access_level($request),
273 [ 'error_handling' => 'exception' ]
274 );
275 }
276
277 }