PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / 5.3
Advanced Access Manager – Access Governance for WordPress v5.3
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 8 years ago 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 Route.php 8 years ago
Menu.php
210 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 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 global $menu;
51
52 $response = array();
53
54 //let's create menu list with submenus
55 foreach ($menu as $item) {
56 if (preg_match('/^separator/', $item[2])) {
57 continue; //skip separator
58 }
59
60 $submenu = $this->getSubmenu($item[2]);
61
62 $allowed = AAM_Backend_Subject::getInstance()->hasCapability($item[1]);
63
64 if ($allowed || count($submenu) > 0) {
65 $response[] = array(
66 //add menu- prefix to define that this is the top level menu
67 //WordPress by default gives the same menu id to the first
68 //submenu
69 'id' => 'menu-' . $item[2],
70 'name' => $this->filterMenuName($item[0]),
71 'submenu' => $submenu,
72 'capability' => $item[1]
73 );
74 }
75 }
76
77 return $response;
78 }
79
80 /**
81 *
82 * @param array $menu
83 * @return array
84 */
85 protected function normalizeItem($menu) {
86 if (strpos($menu, 'customize.php') === 0) {
87 $menu = 'customize.php';
88 }
89
90 return $menu;
91 }
92
93 /**
94 * @inheritdoc
95 */
96 public static function getTemplate() {
97 return 'main/menu.phtml';
98 }
99
100 /**
101 * Prepare filtered submenu
102 *
103 * @param string $menu
104 *
105 * @return array
106 *
107 * @access protected
108 * @global array $submenu
109 */
110 protected function getSubmenu($menu) {
111 global $submenu;
112
113 $response = array();
114 $subject = AAM_Backend_Subject::getInstance();
115 $isDefault = ($subject->getUID() == AAM_Core_Subject_Default::UID);
116
117 if (array_key_exists($menu, $submenu) && is_array($submenu[$menu])) {
118 foreach ($submenu[$menu] as $item) {
119 if ($subject->hasCapability($item[1]) || $isDefault) {
120 $response[] = array(
121 'id' => $this->normalizeItem($item[2]),
122 'name' => $this->filterMenuName($item[0]),
123 'capability' => $item[1]
124 );
125 }
126 }
127 }
128
129 return $response;
130 }
131
132 /**
133 * Filter menu name
134 *
135 * Strip any HTML tags from the menu name and also remove the trailing
136 * numbers in case of Plugin or Comments menu name.
137 *
138 * @param string $name
139 *
140 * @return string
141 *
142 * @access protected
143 */
144 protected function filterMenuName($name) {
145 $filtered = trim(strip_tags($name));
146
147 return preg_replace('/([\d]+)$/', '', $filtered);
148 }
149
150 /**
151 *
152 * @param type $object
153 * @param type $subs
154 * @return boolean
155 */
156 protected function hasSubmenuChecked($object, $subs) {
157 $has = false;
158
159 if (!empty($subs)) {
160 foreach($subs as $submenu) {
161 if ($object->has($submenu['id'])) {
162 $has = true;
163 break;
164 }
165 }
166 }
167
168 return $has;
169 }
170
171 /**
172 * Check inheritance status
173 *
174 * Check if menu settings are overwritten
175 *
176 * @return boolean
177 *
178 * @access protected
179 */
180 protected function isOverwritten() {
181 $object = AAM_Backend_Subject::getInstance()->getObject('menu');
182
183 return $object->isOverwritten();
184 }
185
186 /**
187 * Register Menu feature
188 *
189 * @return void
190 *
191 * @access public
192 */
193 public static function register() {
194 AAM_Backend_Feature::registerFeature((object) array(
195 'uid' => 'admin_menu',
196 'position' => 5,
197 'title' => __('Backend Menu', AAM_KEY),
198 'capability' => 'aam_manage_admin_menu',
199 'type' => 'main',
200 'subjects' => array(
201 AAM_Core_Subject_Role::UID,
202 AAM_Core_Subject_User::UID,
203 AAM_Core_Subject_Default::UID
204 ),
205 'option' => 'backend-access-control',
206 'view' => __CLASS__
207 ));
208 }
209
210 }