PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / 5.9
Advanced Access Manager – Access Governance for WordPress v5.9
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 / Core / Gateway.php
advanced-access-manager / Application / Core Last commit date
Api 7 years ago ConfigPress 7 years ago Object 7 years ago Policy 7 years ago Subject 7 years ago API.php 7 years ago Cache.php 7 years ago Compatibility.php 7 years ago Config.php 7 years ago ConfigPress.php 7 years ago Console.php 7 years ago Exporter.php 7 years ago Gateway.php 7 years ago Importer.php 7 years ago JwtAuth.php 7 years ago Login.php 7 years ago Media.php 7 years ago Object.php 7 years ago Request.php 7 years ago Server.php 7 years ago Subject.php 7 years ago
Gateway.php
266 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 core API gateway
12 *
13 * @package AAM
14 * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15 */
16 final class AAM_Core_Gateway {
17
18 /**
19 * Single instance of itself
20 *
21 * @var AAM_Core_Gateway
22 *
23 * @access protected
24 */
25 protected static $instance = null;
26
27 /**
28 * Constructor
29 */
30 protected function __construct() {}
31
32 /**
33 * Prevent from fatal errors
34 *
35 * @param string $name
36 * @param array $arguments
37 *
38 * @return void
39 *
40 * @access public
41 */
42 public function __call($name, $arguments) {
43 trigger_error(
44 esc_js(__("The method {$name} is not defined in the AAM API", AAM_KEY))
45 );
46 }
47
48 /**
49 * Get AAM configuration option
50 *
51 * @param string $option
52 * @param mixed $default
53 *
54 * @return mixed
55 *
56 * @access public
57 */
58 public function getConfig($option, $default = null) {
59 $value = AAM_Core_Config::get($option, $default);
60
61 return AAM_Core_Compatibility::convertConfig($option, $value);
62 }
63
64 /**
65 * Get user
66 *
67 * If no $id specified, current user will be returned
68 *
69 * @param int $id Optional user id
70 *
71 * @return AAM_Core_Subject
72 *
73 * @access public
74 */
75 public function getUser($id = null) {
76 if (!empty($id)) {
77 $user = new AAM_Core_Subject_User($id);
78 $user->initialize();
79 } elseif (get_current_user_id()) {
80 $user = AAM::getUser();
81 } else {
82 $user = new AAM_Core_Subject_Visitor();
83 }
84
85 return $user;
86 }
87
88 /**
89 * Log any critical message
90 *
91 * @param string $message
92 * @param string $markers...
93 *
94 * @access public
95 */
96 public function log() {
97 call_user_func_array('AAM_Core_Console::add', func_get_args());
98 }
99
100 /**
101 * Deny access for current HTTP request
102 *
103 * @param mixed $params
104 *
105 * @return void
106 *
107 * @access public
108 */
109 public function denyAccess($params = null) {
110 AAM_Core_API::reject(AAM_Core_Api_Area::get(), $params);
111 }
112
113 /**
114 * Get policy manager
115 *
116 * @return AAM_Core_Policy_Manager
117 *
118 * @access public
119 */
120 public function getPolicyManager(AAM_Core_Subject $subject = null) {
121 return AAM_Core_Policy_Factory::get(
122 (is_null($subject) ? $this->getUser() : $subject)
123 );
124 }
125
126 /**
127 * Redirect request
128 *
129 * @param string $type
130 * @param mixed $arg
131 *
132 * @return void
133 *
134 * @access public
135 */
136 public function redirect($type, $arg = null) {
137 $area = AAM_Core_Api_Area::get();
138
139 switch($type) {
140 case 'login':
141 wp_redirect(add_query_arg(
142 array('reason' => 'restricted'),
143 wp_login_url(AAM_Core_Request::server('REQUEST_URI'))
144 ), 307);
145 break;
146
147 case 'page':
148 $page = AAM_Core_API::getCurrentPost();
149 if(empty($page) || ($page->ID !== intval($arg))) {
150 wp_safe_redirect(get_page_link($arg), 307);
151 }
152 break;
153
154 case 'message':
155 wp_die($arg);
156 break;
157
158 case 'url':
159 if (stripos($arg, AAM_Core_Request::server('REQUEST_URI')) === false) {
160 wp_redirect($arg, 307);
161 }
162 break;
163
164 case 'callback':
165 if (is_callable($arg)) {
166 call_user_func($arg);
167 }
168 break;
169
170 default:
171 wp_die(AAM_Core_Config::get(
172 "{$area}.access.deny.redirectRule", __('Access Denied', AAM_KEY)
173 ));
174 break;
175 }
176
177 exit; // Halt the execution
178 }
179
180 /**
181 * Get current post
182 *
183 * @return WP_Post
184 *
185 * @access public
186 */
187 public function getCurrentPost() {
188 return AAM_Core_API::getCurrentPost();
189 }
190
191 /**
192 * Check if capability exists
193 *
194 * This method checks if provided capability exists (registered for any role).
195 *
196 * @param string $capability
197 *
198 * @return boolean
199 *
200 * @access public
201 */
202 public function capabilityExists($capability) {
203 return AAM_Core_API::capabilityExists($capability);
204 }
205
206 /**
207 * Merge AAM settings
208 *
209 * @param array $set1
210 * @param array $set2
211 * @param string $objectType
212 *
213 * @return array
214 *
215 * @access public
216 */
217 public function mergeSettings($set1, $set2, $objectType, $preference = null) {
218 $combined = array($set1, $set2);
219 $merged = array();
220
221 if (is_null($preference)) {
222 $preference = $this->getConfig(
223 "core.settings.{$objectType}.merge.preference", 'deny'
224 );
225 }
226
227 // first get the complete list of unique keys
228 $keys = array_keys(call_user_func_array('array_merge', $combined));
229
230 foreach($keys as $key) {
231 foreach($combined as $options) {
232 // If merging preference is "deny" and at least one of the access
233 // settings is checked, then final merged array will have it set
234 // to checked
235 if (in_array($preference, array('deny', 'apply'), true) && !empty($options[$key])) {
236 $merged[$key] = $options[$key];
237 break;
238 } elseif (in_array($preference, array('allow', 'deprive'), true) && empty($options[$key])) {
239 $merged[$key] = 0;
240 break;
241 } elseif (isset($options[$key])) {
242 $merged[$key] = $options[$key];
243 }
244 }
245 }
246
247 return $merged;
248 }
249
250 /**
251 * Get instance of the API gateway
252 *
253 * @return AAM_Core_Gateway
254 *
255 * @access public
256 * @static
257 */
258 public static function getInstance() {
259 if (is_null(self::$instance)) {
260 self::$instance = new self();
261 }
262
263 return self::$instance;
264 }
265
266 }