PluginProbe
User Access Manager / 2.2.13
User Access Manager v2.2.13
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 +153 -31 2.3.142.2.13 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 <alexanderschneider85@gmail.com>
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,35 +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';
44 + const POST_URL_CACHE_KEY = 'PostUrls';
28 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 + */
29 100 public function __construct(
30 101 Php $php,
31 102 Wordpress $wordpress,
32 103 WordpressConfig $wordpressConfig,
33 - private MainConfig $mainConfig,
34 - private Database $database,
35 - private Util $util,
36 - private Cache $cache,
37 - private ObjectHandler $objectHandler,
38 - private AccessHandler $accessHandler,
39 - private FileHandler $fileHandler,
40 - 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
41 112 ) {
42 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;
43 122 }
44 123
124 + /**
125 + * @return Wordpress
126 + */
45 127 protected function getWordpress(): Wordpress
46 128 {
47 129 return $this->wordpress;
48 130 }
49 131
132 + /**
133 + * Returns the post by the given url.
134 + * @param string $url The url of the post(attachment).
135 + * @return int
136 + */
50 137 public function getPostIdByUrl(string $url): int
51 138 {
52 139 $postUrls = (array)$this->cache->getFromRuntimeCache(self::POST_URL_CACHE_KEY);
53 140
@@ -59,21 +146,20 @@
59 146 $newUrlPieces = preg_split('/-[0-9]+x[0-9]+(_[a-z])?/', $url);
60 147 $newUrl = (count($newUrlPieces) === 2) ? $newUrlPieces[0] . $newUrlPieces[1] : $newUrlPieces[0];
61 148 $newUrl = preg_replace('/-pdf\.jpg$/', '.pdf', $newUrl);
62 149
63 - $postId = $this->wordpress->attachmentUrlToPostId($newUrl);
64 -
65 - if ($postId === 0) {
66 - $newUrl = preg_replace('/(\\.[^.\\s]{3,4})$/', '-scaled$1', $newUrl);
67 - $postId = $this->wordpress->attachmentUrlToPostId($newUrl);
68 - }
69 -
70 - $postUrls[$url] = $postId;
150 + $postUrls[$url] = $this->wordpress->attachmentUrlToPostId($newUrl);
71 151 $this->cache->addToRuntimeCache(self::POST_URL_CACHE_KEY, $postUrls);
72 152
73 153 return $postUrls[$url];
74 154 }
75 155
156 + /**
157 + * Returns the file object by the given type and url.
158 + * @param string $objectType The type of the requested file.
159 + * @param string $objectUrl The file url.
160 + * @return null|FileObject
161 + */
76 162 private function getFileSettingsByType(string $objectType, string $objectUrl): ?FileObject
77 163 {
78 164 $fileObject = null;
79 165
@@ -113,11 +199,14 @@
113 199 return $fileObject;
114 200 }
115 201
116 202 /**
203 + * Delivers the content of the requested file.
204 + * @param string $objectType The type of the requested file.
205 + * @param string $objectUrl The file url.
117 206 * @throws UserGroupTypeException
118 207 */
119 - public function getFile(string $objectType, string $objectUrl): void
208 + public function getFile(string $objectType, string $objectUrl)
120 209 {
121 210 $fileObject = $this->getFileSettingsByType($objectType, $objectUrl);
122 211
123 212 if ($fileObject === null) {
@@ -140,8 +229,13 @@
140 229
141 230 $this->fileHandler->getFile($file, $fileObject->isImage());
142 231 }
143 232
233 + /**
234 + * Returns the redirect url and the permalink of the post if exists.
235 + * @param null|string $permalink
236 + * @return null|string
237 + */
144 238 private function getRedirectUrlAndPermalink(?string &$permalink): ?string
145 239 {
146 240 $permalink = null;
147 241 $redirect = $this->mainConfig->getRedirect();
@@ -158,11 +252,8 @@
158 252 } elseif ($redirect === 'custom_url') {
159 253 $url = $this->mainConfig->getRedirectCustomUrl();
160 254 } elseif ($redirect === 'login') {
161 255 $url = $this->getLoginUrl();
162 - } elseif ($redirect === 'origin') {
163 - $referer = $this->wordpress->getReferer();
164 - $url = $referer !== false ? $referer : $this->wordpress->getHomeUrl('/');
165 256 } else {
166 257 $url = $this->wordpress->getHomeUrl('/');
167 258 }
168 259
@@ -169,14 +260,16 @@
169 260 return $url;
170 261 }
171 262
172 263 /**
264 + * Redirects the user to his destination.
265 + * @param bool $checkPosts
173 266 * @throws UserGroupTypeException
174 267 */
175 - public function redirectUser(bool $checkPosts = true): void
268 + public function redirectUser($checkPosts = true)
176 269 {
177 270 if ($checkPosts === true) {
178 - $posts = $this->wordpress->getWpQuery()->get_posts();
271 + $posts = (array)$this->wordpress->getWpQuery()->get_posts();
179 272
180 273 foreach ($posts as $post) {
181 274 if ($this->accessHandler->checkObjectAccess($post->post_type, $post->ID)) {
182 275 return;
@@ -192,8 +285,13 @@
192 285 $this->php->callExit();
193 286 }
194 287 }
195 288
289 + /**
290 + * Returns the post id by the post name.
291 + * @param string $name
292 + * @return int
293 + */
196 294 private function getPostIdByName(string $name): int
197 295 {
198 296 $postableTypes = implode('\',\'', $this->objectHandler->getPostTypes());
199 297
@@ -200,9 +298,9 @@
200 298 $query = $this->database->prepare(
201 299 "SELECT ID
202 300 FROM {$this->database->getPostsTable()}
203 301 WHERE post_name = %s
204 - AND post_type IN ('$postableTypes')",
302 + AND post_type IN ('{$postableTypes}')",
205 303 $name
206 304 );
207 305
208 306 return (int) $this->database->getVariable($query);
@@ -207,9 +305,15 @@
207 305
208 306 return (int) $this->database->getVariable($query);
209 307 }
210 308
211 - private function extractObjectTypeAndId(mixed $pageParams, ?string &$objectType, int|string|null &$objectId): void
309 + /**
310 + * Extracts the object type and id.
311 + * @param object $pageParams
312 + * @param null|string $objectType
313 + * @param null|int|string $objectId
314 + */
315 + private function extractObjectTypeAndId(object $pageParams, ?string &$objectType, ?string &$objectId)
212 316 {
213 317 $objectType = null;
214 318 $objectId = null;
215 319
@@ -239,11 +343,15 @@
239 343 }
240 344 }
241 345
242 346 /**
347 + * Redirects to a page or to content.
348 + * @param array $headers The headers which are given from wordpress.
349 + * @param object $pageParams The params of the current page.
350 + * @return array
243 351 * @throws UserGroupTypeException
244 352 */
245 - public function redirect(?array $headers, mixed $pageParams): ?array
353 + public function redirect(array $headers, object $pageParams): array
246 354 {
247 355 $fileUrl = $this->getRequestParameter('uamgetfile');
248 356 $fileType = $this->getRequestParameter('uamfiletype');
249 357
@@ -261,9 +369,15 @@
261 369
262 370 return $headers;
263 371 }
264 372
265 - public function getFileUrl(string $url, int|string|null $id): string
373 + /**
374 + * Returns the url for a locked file.
375 + * @param string $url The base url.
376 + * @param int|string $id The id of the file.
377 + * @return string
378 + */
379 + public function getFileUrl(string $url, $id): string
266 380 {
267 381 // Nginx always supports real urls so we need the new urls only
268 382 // if we don't use nginx and mod_rewrite is disabled
269 383 if ($this->mainConfig->lockFile() === true
@@ -271,9 +385,9 @@
271 385 && $this->wordpress->gotModRewrite() === false
272 386 ) {
273 387 $post = $this->objectHandler->getPost($id);
274 388
275 - if ($post !== false) {
389 + if ($post !== null) {
276 390 $type = explode('/', $post->post_mime_type);
277 391 $type = $type[1] ?? $type[0];
278 392
279 393 $lockedFileTypes = $this->mainConfig->getLockedFiles();
@@ -287,8 +401,14 @@
287 401
288 402 return $url;
289 403 }
290 404
405 + /**
406 + * Caches the urls for the post for a later lookup.
407 + * @param string $url The url of the post.
408 + * @param object $post The post object.
409 + * @return string
410 + */
291 411 public function cachePostLinks(string $url, object $post): string
292 412 {
293 413 $postUrls = (array) $this->cache->getFromRuntimeCache(self::POST_URL_CACHE_KEY);
294 414 $postUrls[$url] = $post->ID;
@@ -295,10 +415,12 @@
295 415 $this->cache->addToRuntimeCache(self::POST_URL_CACHE_KEY, $postUrls);
296 416 return $url;
297 417 }
298 418
299 - #[NoReturn]
300 - public function testXSendFile(): void
419 + /**
420 + * Tries to load the file via x send file
421 + */
422 + public function testXSendFile()
301 423 {
302 424 $this->fileHandler->deliverXSendFileTestFile();
303 425 }
304 426 }