xref: /webtrees/app/Http/RequestHandlers/MergeRecordsPage.php (revision f4c767fd89cdb62ee54edec032285924cd767af7)
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
18declare(strict_types=1);
19
20namespace Fisharebest\Webtrees\Http\RequestHandlers;
21
22use Fisharebest\Webtrees\Factory;
23use Fisharebest\Webtrees\Family;
24use Fisharebest\Webtrees\Http\ViewResponseTrait;
25use Fisharebest\Webtrees\I18N;
26use Fisharebest\Webtrees\Individual;
27use Fisharebest\Webtrees\Media;
28use Fisharebest\Webtrees\Note;
29use Fisharebest\Webtrees\Repository;
30use Fisharebest\Webtrees\Source;
31use Fisharebest\Webtrees\Submitter;
32use Fisharebest\Webtrees\Tree;
33use Psr\Http\Message\ResponseInterface;
34use Psr\Http\Message\ServerRequestInterface;
35use Psr\Http\Server\RequestHandlerInterface;
36
37use function assert;
38use function e;
39
40/**
41 * Merge records
42 */
43class MergeRecordsPage implements RequestHandlerInterface
44{
45    use ViewResponseTrait;
46
47    /**
48     * Merge two genealogy records.
49     *
50     * @param ServerRequestInterface $request
51     *
52     * @return ResponseInterface
53     */
54    public function handle(ServerRequestInterface $request): ResponseInterface
55    {
56        $this->layout = 'layouts/administration';
57
58        $tree = $request->getAttribute('tree');
59        assert($tree instanceof Tree);
60
61        $xref1 = $request->getQueryParams()['xref1'] ?? '';
62        $xref2 = $request->getQueryParams()['xref2'] ?? '';
63
64        $record1 = Factory::gedcomRecord()->make($xref1, $tree);
65        $record2 = Factory::gedcomRecord()->make($xref2, $tree);
66
67        $title = I18N::translate('Merge records') . ' — ' . e($tree->title());
68
69        return $this->viewResponse('admin/merge-records-step-1', [
70            'individual1' => $record1 instanceof Individual ? $record1 : null,
71            'individual2' => $record2 instanceof Individual ? $record2 : null,
72            'family1'     => $record1 instanceof Family ? $record1 : null,
73            'family2'     => $record2 instanceof Family ? $record2 : null,
74            'source1'     => $record1 instanceof Source ? $record1 : null,
75            'source2'     => $record2 instanceof Source ? $record2 : null,
76            'repository1' => $record1 instanceof Repository ? $record1 : null,
77            'repository2' => $record2 instanceof Repository ? $record2 : null,
78            'media1'      => $record1 instanceof Media ? $record1 : null,
79            'media2'      => $record2 instanceof Media ? $record2 : null,
80            'note1'       => $record1 instanceof Note ? $record1 : null,
81            'note2'       => $record2 instanceof Note ? $record2 : null,
82            'submitter1'  => $record1 instanceof Submitter ? $record1 : null,
83            'submitter2'  => $record2 instanceof Submitter ? $record2 : null,
84            'title'       => $title,
85            'tree'        => $tree,
86        ]);
87    }
88}
89