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 / Object / Uri.php
advanced-access-manager / application / Core / Object Last commit date
Cache.php 6 years ago Capability.php 6 years ago LoginRedirect.php 6 years ago LogoutRedirect.php 6 years ago Menu.php 6 years ago Metabox.php 6 years ago Policy.php 6 years ago Post.php 6 years ago Redirect.php 6 years ago Route.php 6 years ago Toolbar.php 6 years ago Uri.php 6 years ago Visibility.php 6 years ago
Uri.php
214 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 * URI object
12 *
13 * @package AAM
14 * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15 */
16 class AAM_Core_Object_Uri extends AAM_Core_Object {
17
18 /**
19 * Constructor
20 *
21 * @param AAM_Core_Subject $subject
22 *
23 * @return void
24 *
25 * @access public
26 */
27 public function __construct(AAM_Core_Subject $subject) {
28 parent::__construct($subject);
29
30 $option = $this->getSubject()->readOption('uri');
31
32 if (!empty($option)) {
33 $this->setOverwritten(true);
34 }
35
36 if (empty($option)) {
37 $stms = AAM_Core_Policy_Factory::get($subject)->find("/^URI:/i");
38
39 foreach($stms as $key => $stm) {
40 $chunks = explode(':', $key);
41 $effect = ($stm['Effect'] === 'deny' ? 1 : 0);
42 $type = $stm['Effect'];
43 $destination = null;
44 $code = null;
45
46 if ($effect === 1 && !empty($stm['Metadata']['Redirect'])) {
47 $redirect = $stm['Metadata']['Redirect'];
48 $type = strtolower($redirect['Type']);
49 $code = isset($redirect['Code']) ? $redirect['Code'] : 307;
50
51 switch($type) {
52 case 'message':
53 $destination = $redirect['Message'];
54 break;
55
56 case 'page':
57 if (isset($redirect['Id'])) {
58 $destination = intval($redirect['Id']);
59 } elseif (isset($redirect['Slug'])) {
60 $page = get_page_by_path($redirect['Slug'], OBJECT);
61 $destination = (is_a($page, 'WP_Post') ? $page->ID : 0);
62 }
63 break;
64
65 case 'url':
66 $destination = filter_var(
67 $redirect['URL'],
68 FILTER_VALIDATE_URL
69 );
70 if (empty($destination)) {
71 $type = 'message';
72 $destination = "Invalid URL: [{$redirect['URL']}]";
73 }
74 break;
75
76 case 'callback':
77 $destination = $redirect['Callback'];
78 break;
79 }
80 }
81
82 $option[crc32($chunks[1] . $type. $destination)] = array(
83 'uri' => $chunks[1],
84 'type' => $type,
85 'action' => $destination,
86 'code' => $code
87 );
88 }
89 }
90
91 if (empty($option)) {
92 $option = $this->getSubject()->inheritFromParent('uri');
93 }
94
95 $this->setOption($option);
96 }
97
98 /**
99 *
100 * @param type $uri
101 *
102 * @return null|array
103 */
104 public function findMatch($s, $params = array()) {
105 $match = null;
106 $options = $this->getOption();
107
108 if (!empty($options)) {
109 foreach($options as $rule) {
110 $uri = wp_parse_url($rule['uri']);
111 $out = array();
112
113 if (!empty($uri['query'])) {
114 parse_str($uri['query'], $out);
115 }
116
117 // normalize the search and target URIs
118 $s = rtrim($s, '/');
119 $uri['path'] = rtrim((isset($uri['path']) ? $uri['path'] : ''), '/');
120
121 $regex = '@^' . preg_quote($uri['path']) . '$@';
122
123 if (apply_filters('aam-uri-match-filter', preg_match($regex, $s), $uri, $s)
124 && (empty($out) || count(array_intersect_assoc($params, $out)) === count($out))) {
125 $match = $rule;
126 }
127 }
128 }
129
130 return $match;
131 }
132
133 /**
134 * Save menu option
135 *
136 * @return bool
137 *
138 * @access public
139 */
140 public function save($id, $uri, $type, $action = null, $code = 307) {
141 $option = $this->getOption();
142 $option[$id] = array(
143 'uri' => $uri,
144 'type' => $type,
145 'action' => $action,
146 'code' => $code
147 );
148 $this->setOption($option);
149
150 return $this->getSubject()->updateOption($this->getOption(), 'uri');
151 }
152
153 /**
154 *
155 * @param type $id
156 *
157 * @return type
158 */
159 public function delete($id) {
160 $option = $this->getOption();
161 if (isset($option[$id])) {
162 unset($option[$id]);
163 }
164 $this->setOption($option);
165
166 return $this->getSubject()->updateOption($this->getOption(), 'uri');
167 }
168
169 /**
170 * Reset default settings
171 *
172 * @return bool
173 *
174 * @access public
175 */
176 public function reset() {
177 return $this->getSubject()->deleteOption('uri');
178 }
179
180 /**
181 *
182 * @param array $external
183 *
184 * @return type
185 */
186 public function mergeOption($external) {
187 $combined = array_merge($external, $this->getOption());
188 $merged = array();
189
190 $preference = AAM::api()->getConfig(
191 "core.settings.uri.merge.preference", 'deny'
192 );
193
194 foreach($combined as $key => $options) {
195 // If merging preference is "deny" and at least one of the access
196 // settings is checked, then final merged array will have it set
197 // to checked
198 if (!isset($merged[$options['uri']])) {
199 $merged[$key] = $options;
200 } else {
201 if (($preference === 'deny') && ($options['type'] !== 'allow')) {
202 $merged[$key] = $options;
203 break;
204 } elseif ($preference === 'allow' && ($options['type'] === 'allow')) {
205 $merged[$key] = $options;
206 break;
207 }
208 }
209 }
210
211 return $merged;
212 }
213
214 }