CurrentPageState::handle()   A
last analyzed

Complexity

Conditions 3
Paths 4

Size

Total Lines 14
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 7
nc 4
nop 2
dl 0
loc 14
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * This file is part of laravel.su package.
5
 *
6
 * For the full copyright and license information, please view the LICENSE
7
 * file that was distributed with this source code.
8
 */
9
declare(strict_types=1);
10
11
namespace App\Http\Middleware;
12
13
use Illuminate\Http\Request;
14
use Illuminate\Routing\Route;
15
use Illuminate\Routing\Router;
16
use Illuminate\Contracts\Session\Session;
17
use Illuminate\Contracts\Auth\Authenticatable;
18
use Symfony\Component\HttpFoundation\Response;
19
20
/**
21
 * Class CurrentPageState.
22
 */
23
class CurrentPageState
24
{
25
    public const PAGE_NAME = 'pageFrom';
26
27
    /**
28
     * @var Route
29
     */
30
    private $current;
31
32
    /**
33
     * List of excluded route names.
34
     *
35
     * @var array
36
     */
37
    private $exclude = [
38
        'login',
39
        'registration',
40
    ];
41
42
    /**
43
     * @var Session
44
     */
45
    private $session;
46
47
    /**
48
     * @var Authenticatable
49
     */
50
    private $user;
51
52
    /**
53
     * CurrentPageState constructor.
54
     *
55
     * @param Router               $router
56
     * @param Session              $session
57
     * @param Authenticatable|null $user
58
     */
59
    public function __construct(Router $router, Session $session, Authenticatable $user = null)
60
    {
61
        $this->current = $router->current();
62
        $this->session = $session;
63
        $this->user = $user;
64
    }
65
66
    /**
67
     * @param  Request  $request
68
     * @param  \Closure $next
69
     * @return Response
70
     */
71
    public function handle(Request $request, \Closure $next): Response
72
    {
73
        if (! $this->session->has(static::PAGE_NAME)) {
74
            $this->session->put(static::PAGE_NAME, '/');
75
        }
76
77
        $response = $next($request);
78
79
        if ($this->user === null) {
80
            $this->storeRoute($request);
81
        }
82
83
        return $response;
84
    }
85
86
    /**
87
     * @param Request $request
88
     */
89
    private function storeRoute(Request $request): void
90
    {
91
        if (in_array($this->current->getName(), $this->exclude, true)) {
92
            return;
93
        }
94
95
        $this->session->put(static::PAGE_NAME, $request->getPathInfo());
96
    }
97
}
98