Passed
Branch feature/2.1-geodispersion-dev (1d61a8)
by Jonathan
61:21
created

CertificatePage   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 28
c 1
b 0
f 0
dl 0
loc 76
rs 10
wmc 6

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 10 1
A handle() 0 27 5
1
<?php
2
3
/**
4
 * webtrees-lib: MyArtJaub library for webtrees
5
 *
6
 * @package MyArtJaub\Webtrees
7
 * @subpackage Certificates
8
 * @author Jonathan Jaubart <[email protected]>
9
 * @copyright Copyright (c) 2009-2021, 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\Certificates\Http\RequestHandlers;
16
17
use Fisharebest\Webtrees\FlashMessages;
18
use Fisharebest\Webtrees\I18N;
19
use Fisharebest\Webtrees\Tree;
20
use Fisharebest\Webtrees\Exceptions\HttpNotFoundException;
21
use Fisharebest\Webtrees\Http\ViewResponseTrait;
22
use Fisharebest\Webtrees\Http\RequestHandlers\TreePage;
23
use Fisharebest\Webtrees\Services\ModuleService;
24
use MyArtJaub\Webtrees\Module\Certificates\CertificatesModule;
25
use MyArtJaub\Webtrees\Module\Certificates\Services\CertificateDataService;
26
use MyArtJaub\Webtrees\Module\Certificates\Services\CertificateFilesystemService;
27
use MyArtJaub\Webtrees\Module\Certificates\Services\UrlObfuscatorService;
28
use Psr\Http\Message\ResponseInterface;
29
use Psr\Http\Message\ServerRequestInterface;
30
use Psr\Http\Server\RequestHandlerInterface;
31
32
/**
33
 * Request handler for displaying details of a certificate
34
 */
35
class CertificatePage implements RequestHandlerInterface
36
{
37
    use ViewResponseTrait;
38
39
    /**
40
     * @var CertificatesModule|null $module
41
     */
42
    private $module;
43
44
    /**
45
     * @var CertificateFilesystemService $certif_filesystem
46
     */
47
    private $certif_filesystem;
48
49
    /**
50
     * @var CertificateDataService $certif_data_service
51
     */
52
    private $certif_data_service;
53
54
    /**
55
     * @var UrlObfuscatorService $url_obfuscator_service
56
     */
57
    private $url_obfuscator_service;
58
59
60
    /**
61
     * Constructor for CertificatePage Request Handler
62
     *
63
     * @param ModuleService $module_service
64
     * @param CertificateFilesystemService $certif_filesystem
65
     * @param CertificateDataService $certif_data_service
66
     * @param UrlObfuscatorService $url_obfuscator_service
67
     */
68
    public function __construct(
69
        ModuleService $module_service,
70
        CertificateFilesystemService $certif_filesystem,
71
        CertificateDataService $certif_data_service,
72
        UrlObfuscatorService $url_obfuscator_service
73
    ) {
74
        $this->module = $module_service->findByInterface(CertificatesModule::class)->first();
75
        $this->certif_filesystem = $certif_filesystem;
76
        $this->certif_data_service = $certif_data_service;
77
        $this->url_obfuscator_service = $url_obfuscator_service;
78
    }
79
80
    /**
81
     * {@inheritDoc}
82
     * @see \Psr\Http\Server\RequestHandlerInterface::handle()
83
     */
84
    public function handle(ServerRequestInterface $request): ResponseInterface
85
    {
86
        if ($this->module === null) {
87
            throw new HttpNotFoundException(I18N::translate('The attached module could not be found.'));
88
        }
89
90
        $tree = $request->getAttribute('tree');
91
        assert($tree instanceof Tree);
92
93
        $certif_path = $request->getAttribute('cid');
94
        if ($certif_path !== '' && $this->url_obfuscator_service->tryDeobfuscate($certif_path)) {
95
            $certificate = $this->certif_filesystem->certificate($tree, $certif_path);
96
        }
97
98
        if (!isset($certificate)) {
99
            FlashMessages::addMessage('The requested certificate is not valid.');
100
            return redirect(route(TreePage::class, ['tree' => $tree->name()]));
101
        }
102
103
        return $this->viewResponse($this->module->name() . '::certificate-page', [
104
            'title'                     =>  I18N::translate('Certificate - %s', $certificate->name()),
105
            'tree'                      =>  $tree,
106
            'module_name'               =>  $this->module->name(),
107
            'certificate'               =>  $certificate,
108
            'url_obfuscator_service'    =>  $this->url_obfuscator_service,
109
            'linked_individuals'        =>  $this->certif_data_service->linkedIndividuals($certificate),
110
            'linked_families'           =>  $this->certif_data_service->linkedFamilies($certificate)
111
        ]);
112
    }
113
}
114