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