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 / Service / Metaboxes.php
advanced-access-manager / application / Service Last commit date
Shortcode 5 months ago AccessDeniedRedirect.php 1 year ago AdminToolbar.php 1 year ago ApiRoute.php 1 year ago BackendMenu.php 1 year ago BaseTrait.php 1 year ago Capability.php 1 year ago Content.php 5 months ago Core.php 10 months ago Hooks.php 1 year ago Identity.php 3 months ago Jwt.php 3 months ago LoginRedirect.php 1 year ago LogoutRedirect.php 3 months ago Metaboxes.php 1 year ago NotFoundRedirect.php 1 year ago Policies.php 1 year ago SecureLogin.php 1 year ago SecurityAudit.php 1 year ago Shortcodes.php 5 months ago Urls.php 1 year ago Welcome.php 1 year ago Widgets.php 1 year ago
Metaboxes.php
214 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 * Metaboxes service
12 *
13 * @package AAM
14 * @version 7.0.0
15 */
16 class AAM_Service_Metaboxes
17 {
18
19 use AAM_Service_BaseTrait;
20
21 /**
22 * Constructor
23 *
24 * @return void
25 * @access protected
26 *
27 * @version 7.0.4
28 */
29 protected function __construct()
30 {
31 // Register RESTful API endpoints
32 AAM_Restful_Metabox::bootstrap();
33
34 add_action('init', function() {
35 $this->initialize_hooks();
36 }, PHP_INT_MAX);
37 }
38
39 /**
40 * Initialize hooks
41 *
42 * @return void
43 * @access protected
44 *
45 * @version 7.0.4
46 */
47 protected function initialize_hooks()
48 {
49 if (is_admin()) {
50 // Hook that initialize the AAM UI part of the service
51 add_action('aam_initialize_ui_action', function () {
52 AAM_Backend_Feature_Main_Metabox::register();
53 });
54 }
55
56 // Manager WordPress metaboxes
57 add_action('in_admin_header', function () {
58 global $post;
59
60 if (filter_input(INPUT_GET, 'init') === 'metabox') {
61 // Make sure that nobody is playing with screen options
62 if (is_a($post, 'WP_Post')) {
63 $this->_initialize_metaboxes($post->post_type);
64
65 exit; // No need to load the rest of the site
66 }
67 } else {
68 $this->_filter_metaboxes();
69 }
70 }, PHP_INT_MAX);
71
72 // Manage Navigation Menu page to support
73 add_filter('nav_menu_meta_box_object', function ($obj) {
74 if (is_object($obj)) {
75 $obj->_default_query['suppress_filters'] = false;
76 }
77
78 return $obj;
79 });
80 }
81
82 /**
83 * Initialize list of metaboxes for given screen
84 *
85 * @param string $post_type
86 *
87 * @return void
88 * @access private
89 *
90 * @version 7.0.3
91 */
92 private function _initialize_metaboxes($post_type)
93 {
94 global $wp_meta_boxes;
95
96 $cache = AAM::api()->cache->get(
97 AAM_Framework_Service_Metaboxes::CACHE_OPTION, []
98 );
99
100 $cache[$post_type] = []; // Reset the list
101
102 if (isset($wp_meta_boxes[$post_type])) {
103 foreach ((array) $wp_meta_boxes[$post_type] as $levels) {
104 foreach ((array) $levels as $metaboxes) {
105 foreach ((array) $metaboxes as $box) {
106 if (!empty($box['callback'])) { // Exclude any junk
107 $slug = AAM::api()->misc->callable_to_slug(
108 $box['callback']
109 );
110
111 // If $args contain taxonomy - prepend it to ensure that
112 // it is unique
113 $tax = AAM::api()->misc->get($box, 'args.taxonomy');
114
115 if (!empty($tax) && is_string($tax)) {
116 $slug = $tax . '_' . $slug;
117 }
118
119 // If Closure is used for callback, use the ID instead
120 if (empty($slug)){
121 $slug = AAM::api()->misc->sanitize_slug($box['id']);
122 }
123
124 $cache[$post_type][$box['id']] = [
125 'title' => $this->_prepare_metabox_name($box),
126 'screen_id' => $post_type,
127 'slug' => $slug
128 ];
129 }
130 }
131 }
132 }
133
134 // Removing duplicates
135 $cache[$post_type] = array_values($cache[$post_type]);
136 }
137
138 AAM::api()->cache->set(
139 AAM_Framework_Service_Metaboxes::CACHE_OPTION, $cache, 31536000
140 );
141 }
142
143 /**
144 * Normalize the component title
145 *
146 * @param object $item
147 *
148 * @return string
149 * @access private
150 *
151 * @version 7.0.0
152 */
153 private function _prepare_metabox_name($item)
154 {
155 $title = wp_strip_all_tags(
156 !empty($item['title']) ? $item['title'] : $item['slug']
157 );
158
159 return base64_encode(ucwords(trim(preg_replace('/[\d]/', '', $title))));
160 }
161
162 /**
163 * Handle metabox initialization process
164 *
165 * @return void
166 * @access private
167 *
168 * @version 7.0.0
169 */
170 private function _filter_metaboxes()
171 {
172 global $post, $wp_meta_boxes;
173
174 // Make sure that nobody is playing with screen options
175 if (is_a($post, 'WP_Post')) {
176 $screen_id = $post->post_type;
177 } else {
178 $screen = get_current_screen();
179 $screen_id = ($screen ? $screen->id : null);
180 }
181
182 // Exclude Dashboard because they are widgets
183 if (!empty($wp_meta_boxes[$screen_id]) && $screen_id !== 'dashboard') {
184 $this->_filter_zones($wp_meta_boxes[$screen_id], $screen_id);
185 }
186 }
187
188 /**
189 * Filter metaboxes based on screen
190 *
191 * @param array $zones
192 * @param string $screen_id
193 *
194 * @return void
195 * @access private
196 *
197 * @version 7.0.2
198 */
199 private function _filter_zones($zones, $screen_id)
200 {
201 $service = AAM::api()->metaboxes();
202
203 foreach ($zones as $zone => $priorities) {
204 foreach ($priorities as $metaboxes) {
205 foreach ($metaboxes as $id => $mbox) {
206 if (!empty($mbox) && $service->is_denied($mbox, $screen_id)) {
207 remove_meta_box($id, $screen_id, $zone);
208 }
209 }
210 }
211 }
212 }
213
214 }