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

SosaComputeAction::handle()   B

Complexity

Conditions 8
Paths 9

Size

Total Lines 24
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 8
eloc 13
c 1
b 0
f 0
nc 9
nop 1
dl 0
loc 24
rs 8.4444
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\I18N;
20
use Fisharebest\Webtrees\Registry;
21
use Fisharebest\Webtrees\Tree;
22
use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException;
23
use Fisharebest\Webtrees\Services\UserService;
24
use MyArtJaub\Webtrees\Module\Sosa\Services\SosaCalculatorService;
25
use Psr\Http\Message\ResponseInterface;
26
use Psr\Http\Message\ServerRequestInterface;
27
use Psr\Http\Server\RequestHandlerInterface;
28
29
/**
30
 * Request handler for updating the Sosa de-cujus
31
 *
32
 */
33
class SosaComputeAction implements RequestHandlerInterface
34
{
35
    /**
36
     * @var UserService $user_service
37
     */
38
    private $user_service;
39
    
40
    /**
41
     * Constructor for SosaConfigAction Request Handler
42
     * 
43
     * @param UserService $user_service
44
     */
45
    public function __construct(UserService $user_service)
46
    {
47
        $this->user_service = $user_service;
48
    }
49
    
50
    /**
51
     * {@inheritDoc}
52
     * @see \Psr\Http\Server\RequestHandlerInterface::handle()
53
     */
54
    public function handle(ServerRequestInterface $request): ResponseInterface
55
    {
56
        $tree = $request->getAttribute('tree');
57
        assert($tree instanceof Tree);
58
        
59
        $user_id = (int) ($request->getParsedBody()['user_id'] ?? 0);
60
        $partial_from = $request->getParsedBody()['partial_from'] ?? null;
61
        
62
        if(($user_id == -1 && Auth::isManager($tree)) || Auth::id() == $user_id) {
63
            $user = $user_id == -1 ? new DefaultUser() : $this->user_service->find($user_id);
64
            
65
            /** @var SosaCalculatorService $sosa_calc_service */
66
            $sosa_calc_service = app()->makeWith(SosaCalculatorService::class, [ 'tree' => $tree, 'user' => $user]);
67
            
68
            if($partial_from !== null && $sosa_from = Registry::individualFactory()->make($partial_from, $tree)) {
69
                $res = $sosa_calc_service->computeFromIndividual($sosa_from);
70
            } else {
71
                $res = $sosa_calc_service->computeAll();
72
            }
73
            
74
            return $res ? response('', 200) : response(I18N::translate('An error occurred during Sosa computation.'), 500);
75
            
76
        }
77
        throw new HttpAccessDeniedException(I18N::translate("You do not have permission to modify the user"));
78
    }
79
}
80