xref: /webtrees/app/Http/Middleware/NoRouteFound.php (revision 22d65e5ad7724941da33d875027b68b86648a321)
1<?php
2/**
3 * webtrees: online genealogy
4 * Copyright (C) 2019 webtrees development team
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16declare(strict_types=1);
17
18namespace Fisharebest\Webtrees\Http\Middleware;
19
20use Fig\Http\Message\RequestMethodInterface;
21use Fisharebest\Webtrees\Auth;
22use Fisharebest\Webtrees\FlashMessages;
23use Fisharebest\Webtrees\Http\ViewResponseTrait;
24use Fisharebest\Webtrees\I18N;
25use Fisharebest\Webtrees\Session;
26use Fisharebest\Webtrees\Tree;
27use Psr\Http\Message\ResponseInterface;
28use Psr\Http\Message\ServerRequestInterface;
29use Psr\Http\Server\MiddlewareInterface;
30use Psr\Http\Server\RequestHandlerInterface;
31use function in_array;
32use function redirect;
33use function route;
34
35/**
36 * Middleware to generate a response when no route was matched.
37 */
38class NoRouteFound implements MiddlewareInterface
39{
40    use ViewResponseTrait;
41
42    /**
43     * @param ServerRequestInterface  $request
44     * @param RequestHandlerInterface $handler
45     *
46     * @return ResponseInterface
47     */
48    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
49    {
50        /** @var Tree|null $tree */
51        $tree = app(Tree::class);
52
53        // The tree exists, we have access to it, and it is fully imported.
54        if ($tree instanceof Tree && $tree->getPreference('imported') === '1') {
55            return redirect(route('tree-page', ['ged' => $tree->name()]));
56        }
57
58        // Not logged in?
59        if (!Auth::check()) {
60            return redirect(route('login', ['url' => (string) $request->getUri()]));
61        }
62
63        // No tree or tree not imported?
64        if (Auth::isAdmin()) {
65            return redirect(route('admin-trees'));
66        }
67
68        return $this->viewResponse('errors/no-tree-access', ['title' => '']);
69    }
70}
71