Passed
Push — master ( 88ca47...f0e822 )
by Greg
05:44
created

CreateSubmitterAction::handle()   B

Complexity

Conditions 6
Paths 32

Size

Total Lines 50
Code Lines 31

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 6
eloc 31
c 0
b 0
f 0
nc 32
nop 1
dl 0
loc 50
rs 8.8017
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
18
declare(strict_types=1);
19
20
namespace Fisharebest\Webtrees\Http\RequestHandlers;
21
22
use Fisharebest\Webtrees\I18N;
23
use Fisharebest\Webtrees\Registry;
24
use Fisharebest\Webtrees\Tree;
25
use Psr\Http\Message\ResponseInterface;
26
use Psr\Http\Message\ServerRequestInterface;
27
use Psr\Http\Server\RequestHandlerInterface;
28
29
use function assert;
30
31
/**
32
 * Process a form to create a new submitter.
33
 */
34
class CreateSubmitterAction implements RequestHandlerInterface
35
{
36
    /**
37
     * @param ServerRequestInterface $request
38
     *
39
     * @return ResponseInterface
40
     */
41
    public function handle(ServerRequestInterface $request): ResponseInterface
42
    {
43
        $tree = $request->getAttribute('tree');
44
        assert($tree instanceof Tree);
45
46
        $params              = (array) $request->getParsedBody();
47
        $name                = $params['submitter_name'];
48
        $address             = $params['submitter_address'];
49
        $email               = $params['submitter_email'];
50
        $phone               = $params['submitter_phone'];
51
        $privacy_restriction = $params['privacy-restriction'];
52
        $edit_restriction    = $params['edit-restriction'];
53
54
        // Fix non-printing characters
55
        $name = trim(preg_replace('/\s+/', ' ', $name));
56
57
        $gedcom = "0 @@ SUBM\n1 NAME " . $name;
58
59
        if ($address !== '') {
60
            $gedcom .= "\n1 ADDR " . $address;
61
        }
62
63
        if ($email !== '') {
64
            $gedcom .= "\n1 EMAIL " . $email;
65
        }
66
67
        if ($phone !== '') {
68
            $gedcom .= "\n1 PHON " . $phone;
69
        }
70
71
        if (in_array($privacy_restriction, ['none', 'privacy', 'confidential'], true)) {
72
            $gedcom .= "\n1 RESN " . $privacy_restriction;
73
        }
74
75
        if ($edit_restriction === 'locked') {
76
            $gedcom .= "\n1 RESN " . $edit_restriction;
77
        }
78
79
        $record = $tree->createRecord($gedcom);
80
        $record = Registry::submitterFactory()->new($record->xref(), $record->gedcom(), null, $tree);
81
82
        return response([
83
            'id'   => $record->xref(),
84
            'text' => view('selects/submitter', [
85
                'submitter' => $record,
86
            ]),
87
            'html' => view('modals/record-created', [
88
                'title' => I18N::translate('The submitter has been created'),
89
                'name'  => $record->fullName(),
90
                'url'   => $record->url(),
91
            ]),
92
        ]);
93
    }
94
}
95