Passed
Push — master ( 6ccd7b...55134e )
by Greg
05:06
created

RedirectCalendarPhp::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
c 1
b 0
f 0
nc 1
nop 2
dl 0
loc 4
rs 10
1
<?php
2
3
/**
4
 * webtrees: online genealogy
5
 * Copyright (C) 2020 webtrees development team
6
 * This program is free software: you can redistribute it and/or modify
7
 * it under the terms of the GNU General Public License as published by
8
 * the Free Software Foundation, either version 3 of the License, or
9
 * (at your option) any later version.
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
 * GNU General Public License for more details.
14
 * You should have received a copy of the GNU General Public License
15
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16
 */
17
18
declare(strict_types=1);
19
20
namespace Fisharebest\Webtrees\Http\RequestHandlers;
21
22
use Fig\Http\Message\StatusCodeInterface;
23
use Fisharebest\Webtrees\Exceptions\HttpNotFoundException;
24
use Fisharebest\Webtrees\Http\Controllers\CalendarController;
25
use Fisharebest\Webtrees\Services\TreeService;
26
use Fisharebest\Webtrees\Site;
27
use Fisharebest\Webtrees\Tree;
28
use Psr\Http\Message\ResponseInterface;
29
use Psr\Http\Message\ServerRequestInterface;
30
use Psr\Http\Server\RequestHandlerInterface;
31
32
use function redirect;
33
34
/**
35
 * Redirect URLs created by webtrees 1.x (and PhpGedView).
36
 */
37
class RedirectCalendarPhp implements RequestHandlerInterface
38
{
39
    /** @var TreeService */
40
    private $tree_service;
41
42
    /** @var CalendarController */
43
    private $calendar_controller;
44
45
    /**
46
     * @param CalendarController $calendar_controller
47
     * @param TreeService        $tree_service
48
     */
49
    public function __construct(CalendarController $calendar_controller, TreeService $tree_service)
50
    {
51
        $this->calendar_controller = $calendar_controller;
52
        $this->tree_service        = $tree_service;
53
    }
54
55
    /**
56
     * @param ServerRequestInterface $request
57
     *
58
     * @return ResponseInterface
59
     */
60
    public function handle(ServerRequestInterface $request): ResponseInterface
61
    {
62
        $query    = $request->getQueryParams();
63
        $ged      = $query['ged'] ?? Site::getPreference('DEFAULT_GEDCOM');
64
        $cal      = $query['cal'] ?? null;
65
        $day      = $query['day'] ?? null;
66
        $month    = $query['month'] ?? null;
67
        $year     = $query['year'] ?? null;
68
        $filterev = $query['filterev'] ?? null;
69
        $filterof = $query['filterof'] ?? null;
70
        $filtersx = $query['filtersx'] ?? null;
71
        $view     = $query['view'] ?? 'day';
72
73
        $tree = $this->tree_service->all()->get($ged);
74
75
        if ($tree instanceof Tree) {
76
            $url = route('calendar', [
77
                'tree'     => $tree->name(),
78
                'view'     => $view,
79
                'cal'      => $cal,
80
                'day'      => $day,
81
                'month'    => $month,
82
                'year'     => $year,
83
                'filterev' => $filterev,
84
                'filterof' => $filterof,
85
                'filtersx' => $filtersx,
86
            ]);
87
88
            return redirect($url, StatusCodeInterface::STATUS_MOVED_PERMANENTLY);
89
        }
90
91
        throw new HttpNotFoundException();
92
    }
93
}
94