PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / 4.0
Advanced Access Manager – Access Governance for WordPress v4.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 / Menu.php
advanced-access-manager / Application / Backend / Feature Last commit date
Abstract.php 9 years ago Capability.php 9 years ago Contact.php 9 years ago Extension.php 9 years ago LoginRedirect.php 9 years ago Menu.php 9 years ago Metabox.php 9 years ago Post.php 9 years ago Redirect.php 9 years ago Role.php 9 years ago Security.php 9 years ago Teaser.php 9 years ago User.php 9 years ago Utility.php 9 years ago
Menu.php
201 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_Menu extends AAM_Backend_Feature_Abstract {
17
18 /**
19 * Reset menu settings
20 *
21 * @return string
22 *
23 * @access public
24 */
25 public function reset() {
26 $object = AAM_Backend_View::getSubject()->getObject('menu');
27
28 return json_encode(array(
29 'status' => ($object->reset() ? 'success' : 'failure')
30 ));
31 }
32
33 /**
34 * Get subject's menu
35 *
36 * Based on the list of capabilities that current subject has, prepare
37 * complete menu list and return it.
38 *
39 * @return array
40 *
41 * @access public
42 * @global array $menu
43 */
44 public function getMenu() {
45 global $menu;
46
47 $response = array();
48
49 //let's create menu list with submenus
50 foreach ($menu as $item) {
51 if (preg_match('/^separator/', $item[2])) {
52 continue; //skip separator
53 }
54
55 $submenu = $this->getSubmenu($item[2]);
56
57 $allowed = AAM_Backend_View::getSubject()->hasCapability($item[1]);
58
59 if ($allowed || count($submenu) > 0) {
60 $response[] = array(
61 //add menu- prefix to define that this is the top level menu
62 //WordPress by default gives the same menu id to the first
63 //submenu
64 'id' => 'menu-' . $item[2],
65 'name' => $this->filterMenuName($item[0]),
66 'submenu' => $submenu,
67 'capability' => $item[1]
68 );
69 }
70 }
71
72 return $response;
73 }
74
75 /**
76 * @inheritdoc
77 */
78 public static function getAccessOption() {
79 return 'feature.admin_menu.capability';
80 }
81
82 /**
83 * @inheritdoc
84 */
85 public static function getTemplate() {
86 return 'object/menu.phtml';
87 }
88
89 /**
90 * Prepare filtered submenu
91 *
92 * @param string $menu
93 *
94 * @return array
95 *
96 * @access protected
97 * @global array $submenu
98 */
99 protected function getSubmenu($menu) {
100 global $submenu;
101
102 $response = array();
103 $subject = AAM_Backend_View::getSubject();
104
105 if (isset($submenu[$menu])) {
106 foreach ($submenu[$menu] as $item) {
107 if ($subject->hasCapability($item[1])
108 || is_a($subject, 'AAM_Core_Subject_Default')) {
109 $response[] = array(
110 'id' => $item[2],
111 'name' => $this->filterMenuName($item[0]),
112 'capability' => $item[1]
113 );
114 }
115 }
116 }
117
118 return $response;
119 }
120
121 /**
122 * Filter menu name
123 *
124 * Strip any HTML tags from the menu name and also remove the trailing
125 * numbers in case of Plugin or Comments menu name.
126 *
127 * @param string $name
128 *
129 * @return string
130 *
131 * @access protected
132 */
133 protected function filterMenuName($name) {
134 $filtered = trim(strip_tags($name));
135
136 return preg_replace('/([\d]+)$/', '', $filtered);
137 }
138
139 /**
140 * Check if the entire menu branch is restricted
141 *
142 * @param array $menu
143 *
144 * @return boolean
145 *
146 * @access protected
147 */
148 protected function hasRestrictedAll($menu) {
149 $object = AAM_Backend_View::getSubject()->getObject('menu');
150 $response = $object->has($menu['id']);
151
152 foreach ($menu['submenu'] as $submenu) {
153 if ($object->has($submenu['id']) === false) {
154 $response = false;
155 break;
156 }
157 }
158
159 return $response;
160 }
161
162 /**
163 * Check inheritance status
164 *
165 * Check if menu settings are overwritten
166 *
167 * @return boolean
168 *
169 * @access protected
170 */
171 protected function isOverwritten() {
172 $object = AAM_Backend_View::getSubject()->getObject('menu');
173
174 return $object->isOverwritten();
175 }
176
177 /**
178 * Register Menu feature
179 *
180 * @return void
181 *
182 * @access public
183 */
184 public static function register() {
185 $cap = AAM_Core_Config::get(self::getAccessOption(), 'administrator');
186
187 AAM_Backend_Feature::registerFeature((object) array(
188 'uid' => 'admin_menu',
189 'position' => 5,
190 'title' => __('Backend Menu', AAM_KEY),
191 'capability' => $cap,
192 'subjects' => array(
193 'AAM_Core_Subject_Role',
194 'AAM_Core_Subject_User',
195 'AAM_Core_Subject_Default'
196 ),
197 'view' => __CLASS__
198 ));
199 }
200
201 }