Passed
Push — master ( 453a3d...5bbfbb )
by Greg
05:14
created

MergeRecordsAction   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 38
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 21
c 1
b 0
f 0
dl 0
loc 38
rs 10
wmc 7

1 Method

Rating   Name   Duplication   Size   Complexity  
B handle() 0 31 7
1
<?php
2
3
/**
4
 * webtrees: online genealogy
5
 * Copyright (C) 2019 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 Fisharebest\Webtrees\GedcomRecord;
23
use Fisharebest\Webtrees\Tree;
24
use Psr\Http\Message\ResponseInterface;
25
use Psr\Http\Message\ServerRequestInterface;
26
use Psr\Http\Server\RequestHandlerInterface;
27
28
use function assert;
29
use function redirect;
30
use function route;
31
32
/**
33
 * Merge records
34
 */
35
class MergeRecordsAction implements RequestHandlerInterface
36
{
37
    /**
38
     * @param ServerRequestInterface $request
39
     *
40
     * @return ResponseInterface
41
     */
42
    public function handle(ServerRequestInterface $request): ResponseInterface
43
    {
44
        $tree = $request->getAttribute('tree');
45
        assert($tree instanceof Tree);
46
47
        $xref1 = $request->getParsedBody()['xref1'] ?? '';
48
        $xref2 = $request->getParsedBody()['xref2'] ?? '';
49
50
        // Merge record2 into record1
51
        $record1 = GedcomRecord::getInstance($xref1, $tree);
52
        $record2 = GedcomRecord::getInstance($xref2, $tree);
53
54
        if (
55
            $record1 === null ||
56
            $record2 === null ||
57
            $record1 === $record2 ||
58
            $record1::RECORD_TYPE !== $record2::RECORD_TYPE ||
59
            $record1->isPendingDeletion() ||
60
            $record2->isPendingDeletion()
61
        ) {
62
            return redirect(route(MergeRecordsPage::class, [
63
                'tree'  => $tree->name(),
64
                'xref1' => $xref1,
65
                'xref2' => $xref2,
66
            ]));
67
        }
68
69
        return redirect(route(MergeFactsPage::class, [
70
            'tree'  => $tree->name(),
71
            'xref1' => $xref1,
72
            'xref2' => $xref2,
73
        ]));
74
    }
75
}
76