PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / 5.11
Advanced Access Manager – Access Governance for WordPress v5.11
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 / Policy / Token.php
advanced-access-manager / application / Core / Policy Last commit date
Condition.php 6 years ago Factory.php 6 years ago Manager.php 6 years ago Token.php 6 years ago Validator.php 6 years ago
Token.php
230 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 policy token evaluator
12 *
13 * @package AAM
14 * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15 * @since AAM v5.8.2
16 */
17 final class AAM_Core_Policy_Token {
18
19 /**
20 * Literal map token's type to the executable method that returns actual value
21 *
22 * @var array
23 *
24 * @access protected
25 * @static
26 */
27 protected static $map = array(
28 'USER' => 'AAM_Core_Policy_Token::getUserValue',
29 'USERMETA' => 'AAM_Core_Policy_Token::getUserMetaValue',
30 'DATETIME' => 'AAM_Core_Policy_Token::getDateTimeValue',
31 'GET' => 'AAM_Core_Request::get',
32 'QUERY' => 'AAM_Core_Request::get',
33 'POST' => 'AAM_Core_Request::post',
34 'WP_POSTMETA' => 'AAM_Core_Policy_Token::getCurrentPostMeta',
35 'COOKIE' => 'AAM_Core_Request::cookie',
36 'SERVER' => 'AAM_Core_Request::server',
37 'ARGS' => 'AAM_Core_Policy_Token::getArgValue',
38 'CONST' => 'AAM_Core_Policy_Token::defined'
39 );
40
41 /**
42 * Evaluate collection of tokens and replace them with values
43 *
44 * @param string $part String with tokens
45 * @param array $tokens Extracted token
46 *
47 * @return string
48 *
49 * @access public
50 * @static
51 */
52 public static function evaluate($part, array $tokens, array $args = array()) {
53 foreach($tokens as $token) {
54 $val = self::getValue(
55 preg_replace('/^\$\{([^}]+)\}$/', '${1}', $token),
56 $args
57 );
58
59 $part = str_replace(
60 $token,
61 (is_scalar($val) || is_null($val) ? $val : json_encode($val)),
62 $part
63 );
64 }
65
66 return $part;
67 }
68
69 /**
70 * Get token value
71 *
72 * @param string $token
73 * @param array $args
74 *
75 * @return mixed
76 *
77 * @access protected
78 * @static
79 */
80 protected static function getValue($token, $args) {
81 $value = null;
82 $parts = explode('.', $token);
83
84 if (isset(self::$map[$parts[0]])) {
85 if ($parts[0] === 'ARG') {
86 $value = call_user_func(self::$map[$parts[0]], $parts[1], $args);
87 } else {
88 $value = call_user_func(self::$map[$parts[0]], $parts[1]);
89 }
90 } elseif ($parts[0] === 'CALLBACK') {
91 $value = is_callable($parts[1]) ? call_user_func($parts[1], $args) : null;
92 }
93
94 return $value;
95 }
96
97 /**
98 * Get USER's value
99 *
100 * @param string $prop
101 *
102 * @return mixed
103 *
104 * @access protected
105 * @static
106 */
107 protected static function getUserValue($prop) {
108 $user = AAM::api()->getUser();
109
110 switch(strtolower($prop)) {
111 case 'ip':
112 case 'ipaddress':
113 $value = AAM_Core_Request::server('REMOTE_ADDR');
114 break;
115
116 case 'authenticated':
117 case 'isauthenticated':
118 $value = $user->isVisitor() ? false : true;
119 break;
120
121 case 'capabilities':
122 case 'caps':
123 $value = array();
124 foreach((array) $user->allcaps as $cap => $effect) {
125 if (!empty($effect)) {
126 $value[] = $cap;
127 }
128 }
129 break;
130
131 default:
132 $value = $user->{$prop};
133 break;
134 }
135
136 return $value;
137 }
138
139 /**
140 * Get user meta value(s)
141 *
142 * @param string $metakey
143 *
144 * @return void
145 *
146 * @access protected
147 * @static
148 */
149 protected static function getUserMetaValue($metakey) {
150 $value = null;
151 $id = get_current_user_id();
152
153 if (!empty($id)) { // Only authenticated users have some sort of meta
154 $meta = get_user_meta($id, $metakey);
155
156 // If $meta has only one value in the array, then extract it, otherwise
157 // return the array of values
158 if (count($meta) === 1) {
159 $value = array_shift($meta);
160 } else {
161 $value = array_values($meta);
162 }
163 }
164
165 return $value;
166 }
167
168 /**
169 * Undocumented function
170 *
171 * @param [type] $metakey
172 * @return void
173 */
174 protected static function getCurrentPostMeta($metakey)
175 {
176 $post = AAM_Core_API::getCurrentPost(true);
177
178 if (is_a($post, 'WP_Post')) {
179 $meta = get_post_meta($post->ID, $metakey, true);
180 } else {
181 $meta = null;
182 }
183
184 return $meta;
185 }
186
187 /**
188 * Get inline argument
189 *
190 * @param string $prop
191 * @param array $args
192 *
193 * @return mixed
194 *
195 * @access protected
196 * @static
197 */
198 protected static function getArgValue($prop, $args) {
199 return (isset($args[$prop]) ? $args[$prop] : null);
200 }
201
202 /**
203 * Get current datetime value
204 *
205 * @param string $prop
206 *
207 * @return string
208 *
209 * @access protected
210 * @static
211 */
212 protected static function getDateTimeValue($prop) {
213 return date($prop);
214 }
215
216 /**
217 * Get a value for the defined constant
218 *
219 * @param string $const
220 *
221 * @return mixed
222 *
223 * @access protected
224 * @static
225 */
226 protected static function defined($const) {
227 return (defined($const) ? constant($const) : null);
228 }
229
230 }