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 / Core / Object / Metabox.php
advanced-access-manager / Application / Core / Object Last commit date
Cache.php 7 years ago Capability.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 Visibility.php 7 years ago
Metabox.php
227 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 * Metabox object
12 *
13 * @package AAM
14 * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15 */
16 class AAM_Core_Object_Metabox extends AAM_Core_Object {
17
18 /**
19 * Constructor
20 *
21 * @param AAM_Core_Subject $subject
22 *
23 * @return void
24 *
25 * @access public
26 */
27 public function __construct(AAM_Core_Subject $subject) {
28 parent::__construct($subject);
29
30 $option = AAM_Core_Compatibility::convertMetaboxes(
31 $this->getSubject()->readOption('metabox')
32 );
33
34 if (!empty($option)) {
35 $this->setOverwritten(true);
36 }
37
38 // Load settings from Access & Security Policy
39 if (empty($option)) {
40 $stms = AAM_Core_Policy_Manager::getInstance()->find(
41 "/^(Metabox|Widget):/i", $subject
42 );
43
44 foreach($stms as $key => $stm) {
45 $chunks = explode(':', $key);
46 $option[$chunks[1]] = ($stm['Effect'] === 'deny' ? 1 : 0);
47 }
48 }
49
50 if (empty($option)) {
51 $option = $this->getSubject()->inheritFromParent('metabox');
52 }
53
54 $this->setOption($option);
55 }
56
57 /**
58 *
59 * @global type $wp_registered_widgets
60 * @param type $sidebar_widgets
61 * @return type
62 */
63 public function filterFrontend($sidebar_widgets) {
64 global $wp_registered_widgets;
65
66 if (is_array($wp_registered_widgets)) {
67 foreach ($wp_registered_widgets as $id => $widget) {
68 $callback = $this->getWidgetCallback($widget);
69 if ($this->has('widgets', $callback)) {
70 unregister_widget($callback);
71 //remove it from registered widget global var!!
72 //INFORM: Why Unregister Widget does not clear global var?
73 unset($wp_registered_widgets[$id]);
74 }
75 }
76 }
77
78 return $sidebar_widgets;
79 }
80
81 /**
82 *
83 * @param type $widget
84 * @return type
85 */
86 protected function getWidgetCallback($widget) {
87 if (is_object($widget['callback'][0])) {
88 $callback = get_class($widget['callback'][0]);
89 } elseif (is_string($widget['callback'][0])) {
90 $callback = $widget['callback'][0];
91 } else {
92 $callback = isset($widget['classname']) ? $widget['classname'] : null;
93 }
94
95 return $callback;
96 }
97
98 /**
99 *
100 * @global type $wp_meta_boxes
101 * @param type $screen
102 */
103 public function filterBackend($screen) {
104 global $wp_meta_boxes;
105
106 if (is_array($wp_meta_boxes)) {
107 foreach ($wp_meta_boxes as $screen_id => $zones) {
108 if ($screen === $screen_id) {
109 $this->filterZones($zones, $screen_id);
110 }
111 }
112 }
113 }
114
115 /**
116 *
117 * @global type $wp_registered_widgets
118 */
119 public function filterAppearanceWidgets() {
120 global $wp_registered_widgets;
121
122 foreach($wp_registered_widgets as $id => $widget) {
123 $callback = $this->getWidgetCallback($widget);
124 if ($this->has('widgets', $callback)) {
125 unregister_widget($callback);
126 unset($wp_registered_widgets[$id]);
127 }
128 }
129 }
130
131 /**
132 *
133 * @param type $zones
134 * @param type $screen_id
135 */
136 protected function filterZones($zones, $screen_id) {
137 foreach ($zones as $zone => $priorities) {
138 foreach ($priorities as $metaboxes) {
139 $this->filterMetaboxes($zone, $metaboxes, $screen_id);
140 }
141 }
142 }
143
144 /**
145 *
146 * @param type $zone
147 * @param type $metaboxes
148 * @param type $screen_id
149 */
150 protected function filterMetaboxes($zone, $metaboxes, $screen_id) {
151 foreach (array_keys($metaboxes) as $metabox) {
152 if ($this->has($screen_id, $metabox)) {
153 remove_meta_box($metabox, $screen_id, $zone);
154 }
155 }
156 }
157
158 /**
159 * @inheritdoc
160 */
161 public function save($metabox, $granted) {
162 $option = $this->getOption();
163
164 $option[$metabox] = $granted;
165 $option[crc32($metabox)] = $granted;
166
167 return $this->getSubject()->updateOption($option, 'metabox');
168 }
169
170 /**
171 *
172 */
173 public function reset() {
174 return $this->getSubject()->deleteOption('metabox');
175 }
176
177 /**
178 *
179 * @param type $screen
180 * @param type $metabox
181 * @return type
182 */
183 public function has($screen, $metabox) {
184 $options = $this->getOption();
185 $mid = "{$screen}|{$metabox}";
186
187 return !empty($options[$mid]) || !empty($options[crc32($mid)]);
188 }
189
190 /**
191 * Allow access to a specific metabox
192 *
193 * @param string $screen
194 * @param string $metabox
195 *
196 * @return boolean
197 *
198 * @access public
199 */
200 public function allow($screen, $metabox) {
201 $this->save("{$screen}|{$metabox}", 0);
202 }
203
204 /**
205 * Deny access to a specific metabox
206 *
207 * @param string $screen
208 * @param string $metabox
209 *
210 * @return boolean
211 *
212 * @access public
213 */
214 public function deny($screen, $metabox) {
215 return $this->save("{$screen}|{$metabox}", 1);
216 }
217
218 /**
219 *
220 * @param type $external
221 * @return type
222 */
223 public function mergeOption($external) {
224 return AAM::api()->mergeSettings($external, $this->getOption(), 'metabox');
225 }
226
227 }