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 / Core / Object / Menu.php
advanced-access-manager / Application / Core / Object Last commit date
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
Menu.php
171 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 * Menu object
12 *
13 * @package AAM
14 * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15 */
16 class AAM_Core_Object_Menu 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 = $this->getSubject()->readOption('menu');
31
32 if (empty($option)) {
33 $option = $this->getSubject()->inheritFromParent('menu');
34 } else {
35 $this->setOverwritten(true);
36 }
37
38 $this->setOption($option);
39 }
40
41 /**
42 * Filter Menu List
43 *
44 * Keep in mind that this funciton only filter the menu items but do not
45 * restrict access to them. You have to explore roles and capabilities to
46 * control the full access to menus.
47 *
48 * @global array $menu
49 * @global array $submenu
50 *
51 * @return void
52 *
53 * @access public
54 */
55 public function filter() {
56 global $menu, $submenu;
57
58 foreach ($menu as $id => $item) {
59 if (!empty($submenu[$item[2]])) {
60 $subs = $this->filterSubmenu($item[2]);
61 } else {
62 $subs = array();
63 }
64
65 // cover scenario like with Visual Composer where landing page
66 // is defined dynamically
67 if ($this->has('menu-' . $item[2])) {
68 unset($menu[$id]);
69 } elseif ($this->has($item[2])) {
70 if (count($subs)) {
71 $menu[$id][2] = $subs[0][2];
72 $submenu[$menu[$id][2]] = $subs;
73 } else {
74 unset($menu[$id]);
75 }
76 }
77 }
78
79 // remove duplicated separators
80 $count = 0;
81 foreach ($menu as $id => $item) {
82 if (preg_match('/^separator/', $item[2])) {
83 if ($count === 0) {
84 $count++;
85 } else {
86 unset($menu[$id]);
87 }
88 } else {
89 $count = 0;
90 }
91 }
92 }
93
94 /**
95 *
96 * @param array $menu
97 * @return array
98 */
99 protected function normalizeItem($menu) {
100 if (strpos($menu, 'customize.php') === 0) {
101 $menu = 'customize.php';
102 }
103
104 return $menu;
105 }
106
107 /**
108 * Filter submenu
109 *
110 * @param string $parent
111 *
112 * @return void
113 *
114 * @access protected
115 * @global array $menu
116 * @global array $submenu
117 */
118 protected function filterSubmenu($parent) {
119 global $submenu;
120
121 $filtered = array();
122
123 foreach ($submenu[$parent] as $id => $item) {
124 if ($this->has($this->normalizeItem($item[2]))) {
125 unset($submenu[$parent][$id]);
126 } else {
127 $filtered[] = $submenu[$parent][$id];
128 }
129 }
130
131 return $filtered;
132 }
133
134 /**
135 * Check is menu defined
136 *
137 * Check if menu defined in options based on the id
138 *
139 * @param string $menu
140 *
141 * @return boolean
142 *
143 * @access public
144 */
145 public function has($menu, $both = false) {
146 //decode URL in case of any special characters like &amp;
147 $decoded = htmlspecialchars_decode($menu);
148 $options = $this->getOption();
149
150 return !empty($options[$decoded]) || ($both && !empty($options['menu-' . $decoded]));
151 }
152
153 /**
154 * @inheritdoc
155 */
156 public function save($menu, $granted) {
157 $option = $this->getOption();
158 $option[$menu] = $granted;
159 $this->setOption($option);
160
161 return $this->getSubject()->updateOption($option, 'menu');
162 }
163
164 /**
165 *
166 */
167 public function reset() {
168 return $this->getSubject()->deleteOption('menu');
169 }
170
171 }