PluginProbe
User Access Manager / 2.2.23
User Access Manager v2.2.23
2.3.20 2.3.19 2.3.18 2.3.17 2.3.16 2.3.15 2.3.14 2.3.13 trunk 0.6 0.6.1 0.6.2 0.7 0.7 Beta 0.7.0.1 0.8 0.8.0.1 0.8.0.2 0.9 0.9.1 0.9.1.1 0.9.1.2 0.9.1.3 0.9.1.4 1.0 All 136 releases
← All changes | src/Controller/Frontend/RedirectController.php +152 -28 2.3.152.2.23 View file →
@@ -1,11 +1,23 @@
1 1 <?php
2 +/**
3 + * FrontendRedirectController.php
4 + *
5 + * The FrontendRedirectController class file.
6 + *
7 + * PHP versions 5
8 + *
9 + * @author Alexander Schneider <[email protected]>
10 + * @copyright 2008-2017 Alexander Schneider
11 + * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2
12 + * @version SVN: $id$
13 + * @link http://wordpress.org/extend/plugins/user-access-manager/
14 + */
2 15
3 16 declare(strict_types=1);
4 17
5 18 namespace UserAccessManager\Controller\Frontend;
6 19
7 -use JetBrains\PhpStorm\NoReturn;
8 20 use UserAccessManager\Access\AccessHandler;
9 21 use UserAccessManager\Cache\Cache;
10 22 use UserAccessManager\Config\MainConfig;
11 23 use UserAccessManager\Config\WordpressConfig;
@@ -19,36 +31,110 @@
19 31 use UserAccessManager\Util\Util;
20 32 use UserAccessManager\Wrapper\Php;
21 33 use UserAccessManager\Wrapper\Wordpress;
22 34
35 +/**
36 + * Class FrontendRedirectController
37 + *
38 + * @package UserAccessManager\Controller
39 + */
23 40 class RedirectController extends Controller
24 41 {
25 42 use LoginControllerTrait;
26 43
27 - public const POST_URL_CACHE_KEY = 'PostUrls';
28 - public const REDIRECT_TO_PARAMETER = 'redirect_to';
44 + const POST_URL_CACHE_KEY = 'PostUrls';
29 45
46 + /**
47 + * @var MainConfig
48 + */
49 + private $mainConfig;
50 +
51 + /**
52 + * @var Database
53 + */
54 + private $database;
55 +
56 + /**
57 + * @var Cache
58 + */
59 + private $cache;
60 +
61 + /**
62 + * @var Util
63 + */
64 + private $util;
65 +
66 + /**
67 + * @var ObjectHandler
68 + */
69 + private $objectHandler;
70 +
71 + /**
72 + * @var AccessHandler
73 + */
74 + private $accessHandler;
75 +
76 + /**
77 + * @var FileHandler
78 + */
79 + private $fileHandler;
80 +
81 + /**
82 + * @var FileObjectFactory
83 + */
84 + private $fileObjectFactory;
85 +
86 + /**
87 + * RedirectController constructor.
88 + * @param Php $php
89 + * @param Wordpress $wordpress
90 + * @param WordpressConfig $wordpressConfig
91 + * @param MainConfig $mainConfig
92 + * @param Database $database
93 + * @param Util $util
94 + * @param Cache $cache
95 + * @param ObjectHandler $objectHandler
96 + * @param AccessHandler $accessHandler
97 + * @param FileHandler $fileHandler
98 + * @param FileObjectFactory $fileObjectFactory
99 + */
30 100 public function __construct(
31 101 Php $php,
32 102 Wordpress $wordpress,
33 103 WordpressConfig $wordpressConfig,
34 - private MainConfig $mainConfig,
35 - private Database $database,
36 - private Util $util,
37 - private Cache $cache,
38 - private ObjectHandler $objectHandler,
39 - private AccessHandler $accessHandler,
40 - private FileHandler $fileHandler,
41 - private FileObjectFactory $fileObjectFactory
104 + MainConfig $mainConfig,
105 + Database $database,
106 + Util $util,
107 + Cache $cache,
108 + ObjectHandler $objectHandler,
109 + AccessHandler $accessHandler,
110 + FileHandler $fileHandler,
111 + FileObjectFactory $fileObjectFactory
42 112 ) {
43 113 parent::__construct($php, $wordpress, $wordpressConfig);
114 + $this->mainConfig = $mainConfig;
115 + $this->database = $database;
116 + $this->util = $util;
117 + $this->cache = $cache;
118 + $this->objectHandler = $objectHandler;
119 + $this->accessHandler = $accessHandler;
120 + $this->fileHandler = $fileHandler;
121 + $this->fileObjectFactory = $fileObjectFactory;
44 122 }
45 123
124 + /**
125 + * @return Wordpress
126 + */
46 127 protected function getWordpress(): Wordpress
47 128 {
48 129 return $this->wordpress;
49 130 }
50 131
132 + /**
133 + * Returns the post by the given url.
134 + * @param string $url The url of the post(attachment).
135 + * @return int
136 + */
51 137 public function getPostIdByUrl(string $url): int
52 138 {
53 139 $postUrls = (array)$this->cache->getFromRuntimeCache(self::POST_URL_CACHE_KEY);
54 140
@@ -73,8 +159,14 @@
73 159
74 160 return $postUrls[$url];
75 161 }
76 162
163 + /**
164 + * Returns the file object by the given type and url.
165 + * @param string $objectType The type of the requested file.
166 + * @param string $objectUrl The file url.
167 + * @return null|FileObject
168 + */
77 169 private function getFileSettingsByType(string $objectType, string $objectUrl): ?FileObject
78 170 {
79 171 $fileObject = null;
80 172
@@ -114,11 +206,14 @@
114 206 return $fileObject;
115 207 }
116 208
117 209 /**
210 + * Delivers the content of the requested file.
211 + * @param string $objectType The type of the requested file.
212 + * @param string $objectUrl The file url.
118 213 * @throws UserGroupTypeException
119 214 */
120 - public function getFile(string $objectType, string $objectUrl): void
215 + public function getFile(string $objectType, string $objectUrl)
121 216 {
122 217 $fileObject = $this->getFileSettingsByType($objectType, $objectUrl);
123 218
124 219 if ($fileObject === null) {
@@ -141,8 +236,13 @@
141 236
142 237 $this->fileHandler->getFile($file, $fileObject->isImage());
143 238 }
144 239
240 + /**
241 + * Returns the redirect url and the permalink of the post if exists.
242 + * @param null|string $permalink
243 + * @return null|string
244 + */
145 245 private function getRedirectUrlAndPermalink(?string &$permalink): ?string
146 246 {
147 247 $permalink = null;
148 248 $redirect = $this->mainConfig->getRedirect();
@@ -159,11 +259,8 @@
159 259 } elseif ($redirect === 'custom_url') {
160 260 $url = $this->mainConfig->getRedirectCustomUrl();
161 261 } elseif ($redirect === 'login') {
162 262 $url = $this->getLoginUrl();
163 - } elseif ($redirect === 'origin') {
164 - $referer = $this->wordpress->getReferer();
165 - $url = $referer !== false ? $referer : $this->wordpress->getHomeUrl('/');
166 263 } else {
167 264 $url = $this->wordpress->getHomeUrl('/');
168 265 }
169 266
@@ -170,14 +267,16 @@
170 267 return $url;
171 268 }
172 269
173 270 /**
271 + * Redirects the user to his destination.
272 + * @param bool $checkPosts
174 273 * @throws UserGroupTypeException
175 274 */
176 - public function redirectUser(bool $checkPosts = true): void
275 + public function redirectUser($checkPosts = true)
177 276 {
178 277 if ($checkPosts === true) {
179 - $posts = $this->wordpress->getWpQuery()->get_posts();
278 + $posts = (array)$this->wordpress->getWpQuery()->get_posts();
180 279
181 280 foreach ($posts as $post) {
182 281 if ($this->accessHandler->checkObjectAccess($post->post_type, $post->ID)) {
183 282 return;
@@ -188,17 +287,18 @@
188 287 $url = $this->getRedirectUrlAndPermalink($permalink);
189 288 $currentUrl = $this->util->getCurrentUrl();
190 289
191 290 if ($url !== null && $url !== $currentUrl && $permalink !== $currentUrl) {
192 - if ($this->mainConfig->appendRedirectToParameter() === true) {
193 - $url = $this->wordpress->addQueryArg([self::REDIRECT_TO_PARAMETER => $currentUrl], $url);
194 - }
195 -
196 291 $this->wordpress->wpRedirect($url);
197 292 $this->php->callExit();
198 293 }
199 294 }
200 295
296 + /**
297 + * Returns the post id by the post name.
298 + * @param string $name
299 + * @return int
300 + */
201 301 private function getPostIdByName(string $name): int
202 302 {
203 303 $postableTypes = implode('\',\'', $this->objectHandler->getPostTypes());
204 304
@@ -205,9 +305,9 @@
205 305 $query = $this->database->prepare(
206 306 "SELECT ID
207 307 FROM {$this->database->getPostsTable()}
208 308 WHERE post_name = %s
209 - AND post_type IN ('$postableTypes')",
309 + AND post_type IN ('{$postableTypes}')",
210 310 $name
211 311 );
212 312
213 313 return (int) $this->database->getVariable($query);
@@ -212,9 +312,15 @@
212 312
213 313 return (int) $this->database->getVariable($query);
214 314 }
215 315
216 - private function extractObjectTypeAndId(mixed $pageParams, ?string &$objectType, int|string|null &$objectId): void
316 + /**
317 + * Extracts the object type and id.
318 + * @param mixed $pageParams
319 + * @param null|string $objectType
320 + * @param null|int|string $objectId
321 + */
322 + private function extractObjectTypeAndId($pageParams, ?string &$objectType, ?string &$objectId)
217 323 {
218 324 $objectType = null;
219 325 $objectId = null;
220 326
@@ -244,11 +350,15 @@
244 350 }
245 351 }
246 352
247 353 /**
354 + * Redirects to a page or to content.
355 + * @param array|null $headers The headers which are given from wordpress.
356 + * @param mixed $pageParams The params of the current page.
357 + * @return array|null
248 358 * @throws UserGroupTypeException
249 359 */
250 - public function redirect(?array $headers, mixed $pageParams): ?array
360 + public function redirect(?array $headers, $pageParams): ?array
251 361 {
252 362 $fileUrl = $this->getRequestParameter('uamgetfile');
253 363 $fileType = $this->getRequestParameter('uamfiletype');
254 364
@@ -266,9 +376,15 @@
266 376
267 377 return $headers;
268 378 }
269 379
270 - public function getFileUrl(string $url, int|string|null $id): string
380 + /**
381 + * Returns the url for a locked file.
382 + * @param string $url The base url.
383 + * @param int|string $id The id of the file.
384 + * @return string
385 + */
386 + public function getFileUrl(string $url, $id): string
271 387 {
272 388 // Nginx always supports real urls so we need the new urls only
273 389 // if we don't use nginx and mod_rewrite is disabled
274 390 if ($this->mainConfig->lockFile() === true
@@ -276,9 +392,9 @@
276 392 && $this->wordpress->gotModRewrite() === false
277 393 ) {
278 394 $post = $this->objectHandler->getPost($id);
279 395
280 - if ($post !== false) {
396 + if ($post !== null) {
281 397 $type = explode('/', $post->post_mime_type);
282 398 $type = $type[1] ?? $type[0];
283 399
284 400 $lockedFileTypes = $this->mainConfig->getLockedFiles();
@@ -292,8 +408,14 @@
292 408
293 409 return $url;
294 410 }
295 411
412 + /**
413 + * Caches the urls for the post for a later lookup.
414 + * @param string $url The url of the post.
415 + * @param object $post The post object.
416 + * @return string
417 + */
296 418 public function cachePostLinks(string $url, object $post): string
297 419 {
298 420 $postUrls = (array) $this->cache->getFromRuntimeCache(self::POST_URL_CACHE_KEY);
299 421 $postUrls[$url] = $post->ID;
@@ -300,10 +422,12 @@
300 422 $this->cache->addToRuntimeCache(self::POST_URL_CACHE_KEY, $postUrls);
301 423 return $url;
302 424 }
303 425
304 - #[NoReturn]
305 - public function testXSendFile(): void
426 + /**
427 + * Tries to load the file via x send file
428 + */
429 + public function testXSendFile()
306 430 {
307 431 $this->fileHandler->deliverXSendFileTestFile();
308 432 }
309 433 }