Passed
Push — feature/code-analysis ( e964aa...4fe35d )
by Jonathan
14:33
created

SosaConfigAction::handle()   B

Complexity

Conditions 7
Paths 4

Size

Total Lines 27
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 7
eloc 18
nc 4
nop 1
dl 0
loc 27
rs 8.8333
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * webtrees-lib: MyArtJaub library for webtrees
5
 *
6
 * @package MyArtJaub\Webtrees
7
 * @subpackage Sosa
8
 * @author Jonathan Jaubart <[email protected]>
9
 * @copyright Copyright (c) 2009-2022, Jonathan Jaubart
10
 * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3
11
 */
12
13
declare(strict_types=1);
14
15
namespace MyArtJaub\Webtrees\Module\Sosa\Http\RequestHandlers;
16
17
use Fisharebest\Webtrees\Auth;
18
use Fisharebest\Webtrees\DefaultUser;
19
use Fisharebest\Webtrees\FlashMessages;
20
use Fisharebest\Webtrees\I18N;
21
use Fisharebest\Webtrees\Registry;
22
use Fisharebest\Webtrees\Tree;
23
use Fisharebest\Webtrees\Validator;
24
use Fisharebest\Webtrees\Services\UserService;
25
use MyArtJaub\Webtrees\Module\Sosa\Services\SosaRecordsService;
26
use Psr\Http\Message\ResponseInterface;
27
use Psr\Http\Message\ServerRequestInterface;
28
use Psr\Http\Server\RequestHandlerInterface;
29
30
/**
31
 * Request handler for updating the Sosa de-cujus
32
 */
33
class SosaConfigAction implements RequestHandlerInterface
34
{
35
    private UserService $user_service;
36
    private SosaRecordsService $sosa_record_service;
37
38
    /**
39
     * Constructor for SosaConfigAction Request Handler
40
     *
41
     * @param UserService $user_service
42
     * @param SosaRecordsService $sosa_records_service
43
     */
44
    public function __construct(UserService $user_service, SosaRecordsService $sosa_records_service)
45
    {
46
        $this->user_service = $user_service;
47
        $this->sosa_record_service = $sosa_records_service;
48
    }
49
50
    /**
51
     * {@inheritDoc}
52
     * @see \Psr\Http\Server\RequestHandlerInterface::handle()
53
     */
54
    public function handle(ServerRequestInterface $request): ResponseInterface
55
    {
56
        $tree = Validator::attributes($request)->tree();
57
58
        $user_id = Validator::parsedBody($request)->integer('sosa-userid', -1);
59
        $root_id = Validator::parsedBody($request)->isXref()->string('sosa-rootid', '');
60
        $max_gen = Validator::parsedBody($request)->integer(
61
            'sosa-maxgen',
62
            $this->sosa_record_service->maxSystemGenerations()
63
        );
64
65
        if (Auth::id() == $user_id || ($user_id == -1 && Auth::isManager($tree))) {
66
            $user = $user_id == -1 ? new DefaultUser() : $this->user_service->find($user_id);
67
            if ($user !== null && ($root_indi = Registry::individualFactory()->make($root_id, $tree)) !== null) {
68
                $tree->setUserPreference($user, 'MAJ_SOSA_ROOT_ID', $root_indi->xref());
69
                $tree->setUserPreference($user, 'MAJ_SOSA_MAX_GEN', (string) $max_gen);
70
                FlashMessages::addMessage(I18N::translate('The root individual has been updated.'));
71
                return redirect(route(SosaConfig::class, [
72
                    'tree' => $tree->name(),
73
                    'compute' => 'yes',
74
                    'user_id' => $user_id
75
                ]));
76
            }
77
        }
78
79
        FlashMessages::addMessage(I18N::translate('The root individual could not be updated.'), 'danger');
80
        return redirect(route(SosaConfig::class, ['tree' => $tree->name()]));
81
    }
82
}
83