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 / Backend / Feature / Main / Menu.php
advanced-access-manager / Application / Backend / Feature / Main Last commit date
404Redirect.php 7 years ago Capability.php 7 years ago GetStarted.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
Menu.php
220 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 menu manager
12 *
13 * @package AAM
14 * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15 */
16 class AAM_Backend_Feature_Main_Menu extends AAM_Backend_Feature_Abstract {
17
18 /**
19 * Undocumented function
20 *
21 * @return void
22 */
23 public function save() {
24 $items = AAM_Core_Request::post('items', array());
25 $status = AAM_Core_Request::post('status');
26
27 $object = AAM_Backend_Subject::getInstance()->getObject('menu');
28
29 foreach($items as $item) {
30 $object->updateOptionItem($item, $status);
31 }
32
33 $object->save();
34
35 return wp_json_encode(array('status' => 'success'));
36 }
37
38 /**
39 * Get subject's menu
40 *
41 * Based on the list of capabilities that current subject has, prepare
42 * complete menu list and return it.
43 *
44 * @return array
45 *
46 * @access public
47 * @global array $menu
48 */
49 public function getMenu() {
50 $menu = json_decode(base64_decode(AAM_Core_Request::post('menu')), 1);
51
52 $response = array();
53
54 //let's create menu list with submenus
55 if (!empty($menu)) {
56 $object = AAM_Backend_Subject::getInstance()->getObject('menu');
57 foreach ($menu as $item) {
58 if (preg_match('/^separator/', $item[2])) {
59 continue; //skip separator
60 }
61
62 $submenu = $this->getSubmenu($item[2]);
63
64 $allowed = AAM_Backend_Subject::getInstance()->hasCapability($item[1]);
65
66 if ($allowed || count($submenu) > 0) {
67 $menuItem = array(
68 //add menu- prefix to define that this is the top level menu
69 //WordPress by default gives the same menu id to the first
70 //submenu
71 'id' => 'menu-' . $item[2],
72 'name' => $this->filterMenuName($item[0]),
73 'submenu' => $submenu,
74 'capability' => $item[1],
75 'crc32' => crc32('menu-' . $item[2]),
76 );
77 $menuItem['checked'] = $object->has($menuItem['id']) || $object->has($menuItem['crc32']);
78 $response[] = $menuItem;
79 }
80 }
81 }
82
83 return $response;
84 }
85
86 /**
87 *
88 * @param array $menu
89 * @return array
90 */
91 protected function normalizeItem($menu) {
92 if (strpos($menu, 'customize.php') === 0) {
93 $menu = 'customize.php';
94 }
95
96 return $menu;
97 }
98
99 /**
100 * @inheritdoc
101 */
102 public static function getTemplate() {
103 return 'main/menu.phtml';
104 }
105
106 /**
107 * Prepare filtered submenu
108 *
109 * @param string $menu
110 *
111 * @return array
112 *
113 * @access protected
114 * @global array $submenu
115 */
116 protected function getSubmenu($menu) {
117 $submenu = json_decode(base64_decode(AAM_Core_Request::post('submenu')), 1);
118 $object = AAM_Backend_Subject::getInstance()->getObject('menu');
119
120 $response = array();
121 $subject = AAM_Backend_Subject::getInstance();
122 $isDefault = ($subject->getUID() === AAM_Core_Subject_Default::UID);
123
124 if (array_key_exists($menu, $submenu) && is_array($submenu[$menu])) {
125 foreach ($submenu[$menu] as $item) {
126 if ($subject->hasCapability($item[1]) || $isDefault) {
127 $id = $this->normalizeItem($item[2]);
128 $menuItem = array(
129 'id' => $id,
130 'name' => $this->filterMenuName($item[0]),
131 'capability' => $item[1],
132 'crc32' => crc32($id)
133 );
134 $menuItem['checked'] = $object->has($menuItem['id']) || $object->has($menuItem['crc32']);
135 $response[] = $menuItem;
136 }
137 }
138 }
139
140 return $response;
141 }
142
143 /**
144 * Filter menu name
145 *
146 * Strip any HTML tags from the menu name and also remove the trailing
147 * numbers in case of Plugin or Comments menu name.
148 *
149 * @param string $name
150 *
151 * @return string
152 *
153 * @access protected
154 */
155 protected function filterMenuName($name) {
156 $filtered = trim(wp_strip_all_tags($name));
157
158 return preg_replace('/([\d]+)$/', '', $filtered);
159 }
160
161 /**
162 *
163 * @param type $subs
164 * @return boolean
165 */
166 protected function hasSubmenuChecked($subs) {
167 $has = false;
168
169 if (!empty($subs)) {
170 foreach($subs as $submenu) {
171 if ($submenu['checked']) {
172 $has = true;
173 break;
174 }
175 }
176 }
177
178 return $has;
179 }
180
181 /**
182 * Check inheritance status
183 *
184 * Check if menu settings are overwritten
185 *
186 * @return boolean
187 *
188 * @access protected
189 */
190 protected function isOverwritten() {
191 $object = AAM_Backend_Subject::getInstance()->getObject('menu');
192
193 return $object->isOverwritten();
194 }
195
196 /**
197 * Register Menu feature
198 *
199 * @return void
200 *
201 * @access public
202 */
203 public static function register() {
204 AAM_Backend_Feature::registerFeature((object) array(
205 'uid' => 'admin_menu',
206 'position' => 5,
207 'title' => __('Backend Menu', AAM_KEY),
208 'capability' => 'aam_manage_admin_menu',
209 'type' => 'main',
210 'subjects' => array(
211 AAM_Core_Subject_Role::UID,
212 AAM_Core_Subject_User::UID,
213 AAM_Core_Subject_Default::UID
214 ),
215 'option' => 'core.settings.backendAccessControl',
216 'view' => __CLASS__
217 ));
218 }
219
220 }