PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / trunk
Advanced Access Manager – Access Governance for WordPress vtrunk
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.php
advanced-access-manager / application / Backend Last commit date
Feature 1 year ago View 1 year ago Widget 1 year ago tmpl 3 months ago AccessLevel.php 1 year ago Feature.php 1 year ago Manager.php 3 months ago View.php 1 year ago
Feature.php
206 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 * AAM Backend Feature
12 *
13 * This class is used to hold the list of all registered UI features with few neat
14 * methods to manipulate it.
15 *
16 * @package AAM
17 * @version 6.0.0
18 */
19 class AAM_Backend_Feature
20 {
21
22 /**
23 * Collection of features
24 *
25 * @var array
26 *
27 * @access private
28 * @version 6.0.0
29 */
30 static private $_features = array();
31
32 /**
33 * Register UI Feature
34 *
35 * @param object $feature
36 *
37 * @return boolean
38 *
39 * @access public
40 * @version 6.0.0
41 */
42 public static function registerFeature($feature)
43 {
44 $response = false;
45 $access_level = AAM_Backend_AccessLevel::get_instance();
46
47 // Determine correct AAM UI capability
48 if (empty($feature->capability)) {
49 $cap = 'aam_manager';
50 } else {
51 $cap = $feature->capability;
52 }
53
54 // Determine if minimum required options are enabled
55 if (isset($feature->option)) {
56 $show = self::isVisible($feature->option);
57 } else {
58 $show = true;
59 }
60
61 if (is_array($cap)) {
62 $can = count(array_filter($cap, 'current_user_can')) > 0;
63 } else {
64 $can = current_user_can($cap);
65 }
66
67 if ($show && $can) {
68 if (is_object($feature->view)) {
69 self::$_features[get_class($feature->view)] = $feature;
70 } elseif (!is_a($feature->view, Closure::class)) {
71 self::$_features[$feature->view] = $feature;
72 // Initialize view manage so it can register any necessary hooks
73 $feature->view = new $feature->view($access_level);
74 }
75
76 $response = true;
77 }
78
79 return $response;
80 }
81
82 /**
83 * Get feature view manager
84 *
85 * @param string $id
86 *
87 * @return object
88 *
89 * @access public
90 * @version 6.0.0
91 */
92 public static function getFeatureView($id)
93 {
94 if (self::isFeatureRegistered($id)) {
95 $view = self::$_features[$id]->view;
96 } else {
97 $view = null;
98 }
99
100 return $view;
101 }
102
103 /**
104 * Check if feature is registered
105 *
106 * @param string $id
107 *
108 * @return boolean
109 *
110 * @access public
111 * @version 6.0.0
112 */
113 public static function isFeatureRegistered($id)
114 {
115 return array_key_exists($id, self::$_features);
116 }
117
118 /**
119 * Retrieve list of features
120 *
121 * Retrieve sorted list of featured based on current subject
122 *
123 * @param string $type
124 *
125 * @return array
126 *
127 * @access public
128 * @version 6.0.0
129 */
130 public static function retrieveList($type)
131 {
132 $response = [];
133 $access_level = AAM_Backend_AccessLevel::get_instance()->get_access_level();
134
135 foreach (self::$_features as $feature) {
136 if ($feature->type === $type) {
137 if (empty($feature->access_levels)
138 || in_array($access_level->type, $feature->access_levels, true)
139 ) {
140 $response[] = self::initView($feature);
141 }
142 }
143 }
144
145 usort($response, function($feature_a, $feature_b) {
146 $pos_a = (empty($feature_a->position) ? 9999 : $feature_a->position);
147 $pos_b = (empty($feature_b->position) ? 9999 : $feature_b->position);
148
149 if ($pos_a === $pos_b) {
150 $response = 0;
151 } else {
152 $response = ($pos_a < $pos_b ? -1 : 1);
153 }
154
155 return $response;
156 });
157
158 return $response;
159 }
160
161 /**
162 * Check if feature is visible
163 *
164 * There is a way to show/hide feature based on the option. For example some
165 * features should be visible only when Backend Access options is enabled.
166 *
167 * @param string $options
168 *
169 * @return boolean
170 *
171 * @access protected
172 * @version 6.0.0
173 */
174 protected static function isVisible($options)
175 {
176 $count = 0;
177
178 foreach (explode(',', $options) as $option) {
179 $count += AAM::api()->config->get($option, true);
180 }
181
182 return ($count > 0);
183 }
184
185 /**
186 * Initiate the view controller
187 *
188 * @param object $feature
189 *
190 * @return array
191 *
192 * @access protected
193 * @version 6.0.0
194 */
195 protected static function initView($feature)
196 {
197 if (is_string($feature->view)) {
198 $feature->view = new $feature->view(
199 AAM_Backend_AccessLevel::get_instance()
200 );
201 }
202
203 return $feature;
204 }
205
206 }