PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / 4.0
Advanced Access Manager – Access Governance for WordPress v4.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 / Metabox.php
advanced-access-manager / Application / Backend / Feature Last commit date
Abstract.php 9 years ago Capability.php 9 years ago Contact.php 9 years ago Extension.php 9 years ago LoginRedirect.php 9 years ago Menu.php 9 years ago Metabox.php 9 years ago Post.php 9 years ago Redirect.php 9 years ago Role.php 9 years ago Security.php 9 years ago Teaser.php 9 years ago User.php 9 years ago Utility.php 9 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_Metabox extends AAM_Backend_Feature_Abstract {
17
18 /**
19 *
20 * @return type
21 */
22 public function reset() {
23 $object = AAM_Backend_View::getSubject()->getObject('metabox');
24
25 return json_encode(array(
26 'status' => ($object->reset() ? 'success' : 'failure')
27 ));
28 }
29
30 /**
31 * @inheritdoc
32 */
33 public static function getAccessOption() {
34 return 'feature.metabox.capability';
35 }
36
37 /**
38 * @inheritdoc
39 */
40 public static function getTemplate() {
41 return 'object/metabox.phtml';
42 }
43
44 /**
45 *
46 * @global type $wp_post_types
47 * @return type
48 */
49 public function refreshList() {
50 global $wp_post_types;
51
52 AAM_Core_API::deleteOption('aam_metabox_cache');
53 $type_list = array_keys($wp_post_types);
54
55 //used to retrieve the list of all wigets on the frontend
56 array_unshift($type_list, 'widgets');
57
58 foreach ($type_list as $type) {
59 if ($type == 'widgets') {
60 $url = add_query_arg('init', 'metabox', admin_url('index.php'));
61 } else {
62 $url = add_query_arg(
63 'init',
64 'metabox',
65 admin_url('post-new.php?post_type=' . $type)
66 );
67 }
68
69 //grab metaboxes
70 AAM_Core_API::cURL($url);
71 }
72
73 return json_encode(array('status' => 'success'));
74 }
75
76 /**
77 *
78 * @global type $wp_post_types
79 * @return type
80 */
81 public function initURL() {
82 //grab metaboxes
83 AAM_Core_API::cURL(
84 add_query_arg('init', 'metabox', AAM_Core_Request::post('url'))
85 );
86
87 return json_encode(array('status' => 'success'));
88 }
89
90 /**
91 * Initialize metabox list
92 *
93 * @param string $post_type
94 *
95 * @return void
96 *
97 * @access public
98 */
99 public function initialize($post_type) {
100 $cache = $this->getMetaboxList();
101
102 if ($post_type === 'dashboard') {
103 $this->collectWidgets($cache);
104 } else {
105 $this->collectMetaboxes($post_type, $cache);
106 }
107
108 AAM_Core_API::updateOption('aam_metabox_cache', $cache);
109 }
110
111 /**
112 * Collect dashboard widgets
113 *
114 * @global type $wp_registered_widgets
115 *
116 * @return void
117 *
118 * @access protected
119 */
120 protected function collectWidgets(&$cache) {
121 global $wp_registered_widgets;
122
123 if (!isset($cache['widgets'])) {
124 $cache['widgets'] = array();
125 }
126
127 //get frontend widgets
128 if (is_array($wp_registered_widgets)) {
129 foreach ($wp_registered_widgets as $data) {
130 if (is_object($data['callback'][0])) {
131 $callback = get_class($data['callback'][0]);
132 } elseif (is_string($data['callback'][0])) {
133 $callback = $data['callback'][0];
134 } else {
135 $callback = null;
136 }
137
138 if (!is_null($callback)) { //exclude any junk
139 $cache['widgets'][$callback] = array(
140 'title' => strip_tags($data['name']),
141 'id' => $callback
142 );
143 }
144 }
145 }
146
147 //now collect Admin Dashboard Widgets
148 $this->collectMetaboxes('dashboard', $cache);
149 }
150
151 /**
152 *
153 * @global type $wp_meta_boxes
154 * @param type $post_type
155 * @param type $cache
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_View::getSubject();
193
194 //if visitor, return only frontend widgets
195 if ($subject instanceof AAM_Core_Subject_Visitor) {
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_View::getSubject()->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 $cap = AAM_Core_Config::get(self::getAccessOption(), 'administrator');
235
236 AAM_Backend_Feature::registerFeature((object) array(
237 'uid' => 'metabox',
238 'position' => 10,
239 'title' => __('Metaboxes & Widgets', AAM_KEY),
240 'capability' => $cap,
241 'subjects' => array(
242 'AAM_Core_Subject_Role',
243 'AAM_Core_Subject_User',
244 'AAM_Core_Subject_Visitor',
245 'AAM_Core_Subject_Default'
246 ),
247 'view' => __CLASS__
248 ));
249 }
250
251 }