PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / 5.3.5
Advanced Access Manager – Access Governance for WordPress v5.3.5
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 8 years ago Capability.php 8 years ago LoginRedirect.php 8 years ago LogoutRedirect.php 8 years ago Menu.php 8 years ago Metabox.php 8 years ago Post.php 8 years ago Redirect.php 8 years ago Route.php 8 years ago
Metabox.php
251 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 refreshList() {
31 global $wp_post_types;
32
33 AAM_Core_API::deleteOption('aam_metabox_cache');
34 $type_list = array_keys($wp_post_types);
35
36 //used to retrieve the list of all wigets on the frontend
37 array_unshift($type_list, 'widgets');
38
39 foreach ($type_list as $type) {
40 if ($type == 'widgets') {
41 $url = add_query_arg('init', 'metabox', admin_url('index.php'));
42 } else {
43 $url = add_query_arg(
44 'init', 'metabox', admin_url('post-new.php?post_type=' . $type)
45 );
46 }
47
48 //grab metaboxes
49 AAM_Core_API::cURL($this->addHttpPasswd($url));
50 }
51
52 return json_encode(array('status' => 'success'));
53 }
54
55 /**
56 *
57 * @global type $wp_post_types
58 * @return type
59 */
60 public function initURL() {
61 //grab metaboxes
62 $url = $this->addHttpPasswd(AAM_Core_Request::post('url'));
63 AAM_Core_API::cURL(add_query_arg('init', 'metabox', $url));
64
65 return json_encode(array('status' => 'success'));
66 }
67
68 /**
69 *
70 * @param type $url
71 * @return type
72 */
73 protected function addHttpPasswd($url) {
74 $htpasswd = AAM_Core_Config::get('feature.metabox.htpasswd');
75
76 if (!empty($htpasswd['user']) && !empty($htpasswd['pass'])) {
77 $url = preg_replace(
78 '/^(http[s]?:\/\/)/', "$1{$htpasswd['user']}:{$htpasswd['pass']}@", $url
79 );
80 }
81
82 return $url;
83 }
84
85 /**
86 * Initialize metabox list
87 *
88 * @param string $post_type
89 *
90 * @return void
91 *
92 * @access public
93 */
94 public function initialize($post_type) {
95 $cache = $this->getMetaboxList();
96
97 if ($post_type === 'dashboard') {
98 $this->collectWidgets($cache);
99 } else {
100 $this->collectMetaboxes($post_type, $cache);
101 }
102
103 AAM_Core_API::updateOption('aam_metabox_cache', $cache);
104 }
105
106 /**
107 * Collect dashboard widgets
108 *
109 * @global type $wp_registered_widgets
110 *
111 * @return void
112 *
113 * @access protected
114 */
115 protected function collectWidgets(&$cache) {
116 global $wp_registered_widgets;
117
118 if (!isset($cache['widgets'])) {
119 $cache['widgets'] = array();
120 }
121
122 //get frontend widgets
123 if (is_array($wp_registered_widgets)) {
124 foreach ($wp_registered_widgets as $data) {
125 if (is_object($data['callback'][0])) {
126 $callback = get_class($data['callback'][0]);
127 } elseif (is_string($data['callback'][0])) {
128 $callback = $data['callback'][0];
129 } else {
130 $callback = isset($data['classname']) ? $data['classname'] : null;
131 }
132
133 if (!is_null($callback)) { //exclude any junk
134 $cache['widgets'][$callback] = array(
135 'title' => strip_tags($data['name']),
136 'id' => $callback
137 );
138 }
139 }
140 }
141
142 //now collect Admin Dashboard Widgets
143 $this->collectMetaboxes('dashboard', $cache);
144 }
145
146 /**
147 * Collect metaboxes
148 *
149 * @param type $post_type
150 * @param type $cache
151 *
152 * @return void
153 *
154 * @access protected
155 * @global array $wp_meta_boxes
156 */
157 protected function collectMetaboxes($post_type, &$cache) {
158 global $wp_meta_boxes;
159
160 if (!isset($cache[$post_type])) {
161 $cache[$post_type] = array();
162 }
163
164 if (isset($wp_meta_boxes[$post_type]) && is_array($wp_meta_boxes[$post_type])) {
165 foreach ($wp_meta_boxes[$post_type] as $levels) {
166 if (is_array($levels)) {
167 foreach ($levels as $boxes) {
168 if (is_array($boxes)) {
169 foreach ($boxes as $data) {
170 if (trim($data['id'])) { //exclude any junk
171 $cache[$post_type][$data['id']] = array(
172 'id' => $data['id'],
173 'title' => strip_tags($data['title'])
174 );
175 }
176 }
177 }
178 }
179 }
180 }
181 }
182 }
183
184 /**
185 *
186 * @return type
187 */
188 public function getMetaboxList() {
189 global $wp_post_types;
190
191 $cache = AAM_Core_API::getOption('aam_metabox_cache', array());
192 $subject = AAM_Backend_Subject::getInstance();
193
194 //if visitor, return only frontend widgets
195 if ($subject->getUID() == AAM_Core_Subject_Visitor::UID) {
196 if (!empty($cache['widgets'])) {
197 $response = array('widgets' => $cache['widgets']);
198 } else {
199 $response = array();
200 }
201 } else {
202 $response = $cache;
203 }
204
205 //filter non-existing metaboxes
206 foreach(array_keys($response) as $id) {
207 if (!in_array($id, array('dashboard', 'widgets'))
208 && empty($wp_post_types[$id])) {
209 unset($response[$id]);
210 }
211 }
212
213 return $response;
214 }
215
216 /**
217 *
218 * @return type
219 */
220 protected function isOverwritten() {
221 $object = AAM_Backend_Subject::getInstance()->getObject('metabox');
222
223 return $object->isOverwritten();
224 }
225
226 /**
227 * Register metabox feature
228 *
229 * @return void
230 *
231 * @access public
232 */
233 public static function register() {
234 AAM_Backend_Feature::registerFeature((object) array(
235 'uid' => 'metabox',
236 'position' => 10,
237 'title' => __('Metaboxes & Widgets', AAM_KEY),
238 'capability' => 'aam_manage_metaboxes',
239 'type' => 'main',
240 'subjects' => array(
241 AAM_Core_Subject_Role::UID,
242 AAM_Core_Subject_User::UID,
243 AAM_Core_Subject_Visitor::UID,
244 AAM_Core_Subject_Default::UID
245 ),
246 'option' => 'core.settings.backendAccessControl',
247 'view' => __CLASS__
248 ));
249 }
250
251 }