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