PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / 5.0
Advanced Access Manager – Access Governance for WordPress v5.0
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
Metabox.php
250 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 *
152 * @global type $wp_meta_boxes
153 * @param type $post_type
154 * @param type $cache
155 */
156 protected function collectMetaboxes($post_type, &$cache) {
157 global $wp_meta_boxes;
158
159 if (!isset($cache[$post_type])) {
160 $cache[$post_type] = array();
161 }
162
163 if (isset($wp_meta_boxes[$post_type]) && is_array($wp_meta_boxes[$post_type])) {
164 foreach ($wp_meta_boxes[$post_type] as $levels) {
165 if (is_array($levels)) {
166 foreach ($levels as $boxes) {
167 if (is_array($boxes)) {
168 foreach ($boxes as $data) {
169 if (trim($data['id'])) { //exclude any junk
170 $cache[$post_type][$data['id']] = array(
171 'id' => $data['id'],
172 'title' => strip_tags($data['title'])
173 );
174 }
175 }
176 }
177 }
178 }
179 }
180 }
181 }
182
183 /**
184 *
185 * @return type
186 */
187 public function getMetaboxList() {
188 global $wp_post_types;
189
190 $cache = AAM_Core_API::getOption('aam_metabox_cache', array());
191 $subject = AAM_Backend_Subject::getInstance();
192
193 //if visitor, return only frontend widgets
194 if ($subject->getUID() == AAM_Core_Subject_Visitor::UID) {
195 if (!empty($cache['widgets'])) {
196 $response = array('widgets' => $cache['widgets']);
197 } else {
198 $response = array();
199 }
200 } else {
201 $response = $cache;
202 }
203
204 //filter non-existing metaboxes
205 foreach(array_keys($response) as $id) {
206 if (!in_array($id, array('dashboard', 'widgets'))
207 && empty($wp_post_types[$id])) {
208 unset($response[$id]);
209 }
210 }
211
212 return $response;
213 }
214
215 /**
216 *
217 * @return type
218 */
219 protected function isOverwritten() {
220 $object = AAM_Backend_Subject::getInstance()->getObject('metabox');
221
222 return $object->isOverwritten();
223 }
224
225 /**
226 * Register metabox feature
227 *
228 * @return void
229 *
230 * @access public
231 */
232 public static function register() {
233 AAM_Backend_Feature::registerFeature((object) array(
234 'uid' => 'metabox',
235 'position' => 10,
236 'title' => __('Metaboxes & Widgets', AAM_KEY),
237 'capability' => 'aam_manage_metaboxes',
238 'type' => 'main',
239 'subjects' => array(
240 AAM_Core_Subject_Role::UID,
241 AAM_Core_Subject_User::UID,
242 AAM_Core_Subject_Visitor::UID,
243 AAM_Core_Subject_Default::UID
244 ),
245 'option' => 'backend-access-control',
246 'view' => __CLASS__
247 ));
248 }
249
250 }