PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / 5.8.2
Advanced Access Manager – Access Governance for WordPress v5.8.2
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 / Backend / Feature / Main / Metabox.php
advanced-access-manager / Application / Backend / Feature / Main Last commit date
404Redirect.php 7 years ago Capability.php 7 years ago GetStarted.php 7 years ago LoginRedirect.php 7 years ago LogoutRedirect.php 7 years ago Menu.php 7 years ago Metabox.php 7 years ago Policy.php 7 years ago Post.php 7 years ago Redirect.php 7 years ago Route.php 7 years ago Toolbar.php 7 years ago Uri.php 7 years ago
Metabox.php
221 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 * Backend metaboxes & widgets manager
12 *
13 * @package AAM
14 * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15 */
16 class AAM_Backend_Feature_Main_Metabox extends AAM_Backend_Feature_Abstract {
17
18 /**
19 * @inheritdoc
20 */
21 public static function getTemplate() {
22 return 'main/metabox.phtml';
23 }
24
25 /**
26 *
27 * @global type $wp_post_types
28 * @return type
29 */
30 public function prepareInitialization() {
31 global $wp_post_types;
32
33 AAM_Core_API::deleteOption('aam_metabox_cache');
34
35 $endpoints = array();
36
37 foreach (array_merge(array('widgets'), array_keys($wp_post_types)) as $type) {
38 if ($type === 'widgets') {
39 $endpoints[] = add_query_arg('init', 'metabox', admin_url('index.php'));
40 } elseif ($wp_post_types[$type]->show_ui) {
41 $endpoints[] = add_query_arg(
42 'init', 'metabox', admin_url('post-new.php?post_type=' . $type)
43 );
44 }
45 }
46
47 return wp_json_encode(
48 array(
49 'status' => 'success',
50 'endpoints' => $endpoints
51 )
52 );
53 }
54
55 /**
56 * Initialize metabox list
57 *
58 * @param string $post_type
59 *
60 * @return void
61 *
62 * @access public
63 */
64 public function initialize($post_type) {
65 $cache = $this->getMetaboxList();
66
67 if ($post_type === 'dashboard') {
68 $this->collectWidgets($cache);
69 } else {
70 $this->collectMetaboxes($post_type, $cache);
71 }
72
73 AAM_Core_API::updateOption('aam_metabox_cache', $cache);
74 }
75
76 /**
77 * Collect dashboard widgets
78 *
79 * @global type $wp_registered_widgets
80 *
81 * @return void
82 *
83 * @access protected
84 */
85 protected function collectWidgets(&$cache) {
86 global $wp_registered_widgets;
87
88 if (!isset($cache['widgets'])) {
89 $cache['widgets'] = array();
90 }
91
92 //get frontend widgets
93 if (is_array($wp_registered_widgets)) {
94 foreach ($wp_registered_widgets as $data) {
95 if (is_object($data['callback'][0])) {
96 $callback = get_class($data['callback'][0]);
97 } elseif (is_string($data['callback'][0])) {
98 $callback = $data['callback'][0];
99 } else {
100 $callback = isset($data['classname']) ? $data['classname'] : null;
101 }
102
103 if (!is_null($callback)) { //exclude any junk
104 $cache['widgets'][$callback] = array(
105 'title' => wp_strip_all_tags($data['name']),
106 'id' => $callback
107 );
108 }
109 }
110 }
111
112 //now collect Admin Dashboard Widgets
113 $this->collectMetaboxes('dashboard', $cache);
114 }
115
116 /**
117 * Collect metaboxes
118 *
119 * @param type $post_type
120 * @param type $cache
121 *
122 * @return void
123 *
124 * @access protected
125 * @global array $wp_meta_boxes
126 */
127 protected function collectMetaboxes($post_type, &$cache) {
128 global $wp_meta_boxes;
129
130 if (!isset($cache[$post_type])) {
131 $cache[$post_type] = array();
132 }
133
134 if (isset($wp_meta_boxes[$post_type]) && is_array($wp_meta_boxes[$post_type])) {
135 foreach ($wp_meta_boxes[$post_type] as $levels) {
136 if (is_array($levels)) {
137 foreach ($levels as $boxes) {
138 if (is_array($boxes)) {
139 foreach ($boxes as $data) {
140 if (trim($data['id'])) { //exclude any junk
141 $cache[$post_type][$data['id']] = array(
142 'id' => $data['id'],
143 'title' => wp_strip_all_tags($data['title'])
144 );
145 }
146 }
147 }
148 }
149 }
150 }
151 }
152 }
153
154 /**
155 *
156 * @return type
157 */
158 public function getMetaboxList() {
159 global $wp_post_types;
160
161 $cache = AAM_Core_API::getOption('aam_metabox_cache', array());
162 $subject = AAM_Backend_Subject::getInstance();
163
164 //if visitor, return only frontend widgets
165 if ($subject->getUID() === AAM_Core_Subject_Visitor::UID) {
166 if (!empty($cache['widgets'])) {
167 $response = array('widgets' => $cache['widgets']);
168 } else {
169 $response = array();
170 }
171 } else {
172 $response = $cache;
173 }
174
175 //filter non-existing metaboxes
176 foreach(array_keys($response) as $id) {
177 if (!in_array($id, array('dashboard', 'widgets'), true)
178 && empty($wp_post_types[$id])) {
179 unset($response[$id]);
180 }
181 }
182
183 return $response;
184 }
185
186 /**
187 *
188 * @return type
189 */
190 protected function isOverwritten() {
191 $object = AAM_Backend_Subject::getInstance()->getObject('metabox');
192
193 return $object->isOverwritten();
194 }
195
196 /**
197 * Register metabox feature
198 *
199 * @return void
200 *
201 * @access public
202 */
203 public static function register() {
204 AAM_Backend_Feature::registerFeature((object) array(
205 'uid' => 'metabox',
206 'position' => 10,
207 'title' => __('Metaboxes & Widgets', AAM_KEY),
208 'capability' => 'aam_manage_metaboxes',
209 'type' => 'main',
210 'subjects' => array(
211 AAM_Core_Subject_Role::UID,
212 AAM_Core_Subject_User::UID,
213 AAM_Core_Subject_Visitor::UID,
214 AAM_Core_Subject_Default::UID
215 ),
216 'option' => 'core.settings.backendAccessControl',
217 'view' => __CLASS__
218 ));
219 }
220
221 }