PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / 5.11
Advanced Access Manager – Access Governance for WordPress v5.11
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 6 years ago Capability.php 6 years ago LoginRedirect.php 6 years ago LogoutRedirect.php 6 years ago Menu.php 6 years ago Metabox.php 6 years ago Policy.php 6 years ago Post.php 6 years ago Redirect.php 6 years ago Route.php 6 years ago Toolbar.php 6 years ago Uri.php 6 years ago Visibility.php 6 years ago
Metabox.php
238 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_Factory::get($subject)->find("/^(Metabox|Widget):/i");
41
42 foreach($stms as $key => $stm) {
43 $chunks = explode(':', $key);
44 $option[$chunks[1]] = ($stm['Effect'] === 'deny' ? 1 : 0);
45 }
46 }
47
48 if (empty($option)) {
49 $option = $this->getSubject()->inheritFromParent('metabox');
50 }
51
52 $this->setOption($option);
53 }
54
55 /**
56 *
57 * @global type $wp_registered_widgets
58 * @param type $sidebar_widgets
59 * @return type
60 */
61 public function filterFrontend($sidebar_widgets) {
62 global $wp_registered_widgets;
63
64 if (is_array($wp_registered_widgets)) {
65 foreach ($wp_registered_widgets as $id => $widget) {
66 $callback = $this->getWidgetCallback($widget);
67 if ($this->has('widgets', $callback)) {
68 unregister_widget($callback);
69 //remove it from registered widget global var!!
70 //INFORM: Why Unregister Widget does not clear global var?
71 unset($wp_registered_widgets[$id]);
72 }
73 }
74 }
75
76 return $sidebar_widgets;
77 }
78
79 /**
80 *
81 * @param type $widget
82 * @return type
83 */
84 protected function getWidgetCallback($widget) {
85 if (is_array($widget['callback'])) {
86 if (is_object($widget['callback'][0])) {
87 $callback = get_class($widget['callback'][0]);
88 } elseif (is_string($widget['callback'][0])) {
89 $callback = $widget['callback'][0];
90 }
91 }
92
93 if (empty($callback)) {
94 $callback = isset($widget['classname']) ? $widget['classname'] : null;
95 }
96
97 return $callback;
98 }
99
100 /**
101 *
102 * @global type $wp_meta_boxes
103 * @param type $screen
104 */
105 public function filterBackend($screen) {
106 global $wp_meta_boxes;
107
108 if (is_array($wp_meta_boxes)) {
109 foreach ($wp_meta_boxes as $screen_id => $zones) {
110 if ($screen === $screen_id) {
111 $this->filterZones($zones, $screen_id);
112 }
113 }
114 }
115 }
116
117 /**
118 *
119 * @global type $wp_registered_widgets
120 */
121 public function filterAppearanceWidgets() {
122 global $wp_registered_widgets;
123
124 foreach($wp_registered_widgets as $id => $widget) {
125 $callback = $this->getWidgetCallback($widget);
126 if ($this->has('widgets', $callback)) {
127 unregister_widget($callback);
128 unset($wp_registered_widgets[$id]);
129 }
130 }
131 }
132
133 /**
134 *
135 * @param type $zones
136 * @param type $screen_id
137 */
138 protected function filterZones($zones, $screen_id) {
139 foreach ($zones as $zone => $priorities) {
140 foreach ($priorities as $metaboxes) {
141 $this->filterMetaboxes($zone, $metaboxes, $screen_id);
142 }
143 }
144 }
145
146 /**
147 *
148 * @param type $zone
149 * @param type $metaboxes
150 * @param type $screen_id
151 */
152 protected function filterMetaboxes($zone, $metaboxes, $screen_id) {
153 foreach ($metaboxes as $id => $metabox) {
154 if ($this->has($screen_id, $id, $metabox['title'])) {
155 remove_meta_box($id, $screen_id, $zone);
156 }
157 }
158 }
159
160 /**
161 * @inheritdoc
162 */
163 public function save($metabox, $granted) {
164 $option = $this->getOption();
165
166 $option[$metabox] = $granted;
167 $option[crc32($metabox)] = $granted;
168
169 return $this->getSubject()->updateOption($option, 'metabox');
170 }
171
172 /**
173 *
174 */
175 public function reset() {
176 return $this->getSubject()->deleteOption('metabox');
177 }
178
179 /**
180 *
181 * @param type $screen
182 * @param type $metabox
183 * @return type
184 */
185 public function has($screen, $metaboxId, $metaboxTitle = null) {
186 $options = $this->getOption();
187 $mid = "{$screen}|{$metaboxId}";
188
189 if(function_exists('mb_strtolower')) {
190 $mtl = mb_strtolower("{$screen}|{$metaboxTitle}");
191 } else {
192 $mtl = strtolower("{$screen}|{$metaboxTitle}");
193 }
194
195 // Also remove any HTML tags
196 $mtl = wp_strip_all_tags($mtl);
197
198 return !empty($options[$mid]) || !empty($options[crc32($mid)]) || !empty($options[$mtl]);
199 }
200
201 /**
202 * Allow access to a specific metabox
203 *
204 * @param string $screen
205 * @param string $metabox
206 *
207 * @return boolean
208 *
209 * @access public
210 */
211 public function allow($screen, $metabox) {
212 $this->save("{$screen}|{$metabox}", 0);
213 }
214
215 /**
216 * Deny access to a specific metabox
217 *
218 * @param string $screen
219 * @param string $metabox
220 *
221 * @return boolean
222 *
223 * @access public
224 */
225 public function deny($screen, $metabox) {
226 return $this->save("{$screen}|{$metabox}", 1);
227 }
228
229 /**
230 *
231 * @param type $external
232 * @return type
233 */
234 public function mergeOption($external) {
235 return AAM::api()->mergeSettings($external, $this->getOption(), 'metabox');
236 }
237
238 }