Passed
Branch feature/2.0 (d2af8f)
by Jonathan
13:07
created

SosaConfigAction::handle()   B

Complexity

Conditions 7
Paths 4

Size

Total Lines 26
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 7
eloc 17
c 1
b 0
f 0
nc 4
nop 1
dl 0
loc 26
rs 8.8333
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-2020, 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\Services\UserService;
24
use Psr\Http\Message\ResponseInterface;
25
use Psr\Http\Message\ServerRequestInterface;
26
use Psr\Http\Server\RequestHandlerInterface;
27
28
/**
29
 * Request handler for updating the Sosa de-cujus
30
 *
31
 */
32
class SosaConfigAction implements RequestHandlerInterface
33
{
34
    /**
35
     * @var UserService $user_service
36
     */
37
    private $user_service;
38
    
39
    /**
40
     * Constructor for SosaConfigAction Request Handler
41
     * 
42
     * @param UserService $user_service
43
     */
44
    public function __construct(UserService $user_service)
45
    {
46
        $this->user_service = $user_service;
47
    }
48
    
49
    /**
50
     * {@inheritDoc}
51
     * @see \Psr\Http\Server\RequestHandlerInterface::handle()
52
     */
53
    public function handle(ServerRequestInterface $request): ResponseInterface
54
    {
55
        assert($this->user_service instanceof UserService);
56
        
57
        $tree = $request->getAttribute('tree');
58
        assert($tree instanceof Tree);
59
        
60
        $params = $request->getParsedBody();
61
        $user_id = (int) $params['sosa-userid'];
62
        $root_id = $params['sosa-rootid'] ?? '';
63
        
64
        if(Auth::id() == $user_id || ($user_id == -1 && Auth::isManager($tree))) {
65
            $user = $user_id == -1 ? new DefaultUser() : $this->user_service->find($user_id);
66
            if($user !== null && $root_indi = Registry::individualFactory()->make($root_id, $tree)) {
67
                $tree->setUserPreference($user, 'MAJ_SOSA_ROOT_ID', $root_indi->xref());
68
                FlashMessages::addMessage(I18N::translate('The root individual has been updated.'));
69
                return redirect(route(SosaConfig::class, [
70
                    'tree' => $tree->name(),
71
                    'compute' => 'yes',
72
                    'user_id' => $user_id
73
                ]));
74
            }
75
        }
76
        
77
        FlashMessages::addMessage(I18N::translate('The root individual could not be updated.'), 'danger');
78
        return redirect(route(SosaConfig::class, ['tree' => $tree->name()]));
79
    }
80
}
81