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