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

CertificatesList   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 69
Duplicated Lines 0 %

Importance

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

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 8 1
A handle() 0 30 4
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\I18N;
18
use Fisharebest\Webtrees\Tree;
19
use Fisharebest\Webtrees\Exceptions\HttpNotFoundException;
20
use Fisharebest\Webtrees\Http\ViewResponseTrait;
21
use Fisharebest\Webtrees\Services\ModuleService;
22
use MyArtJaub\Webtrees\Module\Certificates\CertificatesModule;
23
use MyArtJaub\Webtrees\Module\Certificates\Services\CertificateFilesystemService;
24
use MyArtJaub\Webtrees\Module\Certificates\Services\UrlObfuscatorService;
25
use Psr\Http\Message\ResponseInterface;
26
use Psr\Http\Message\ServerRequestInterface;
27
use Psr\Http\Server\RequestHandlerInterface;
28
29
/**
30
 * Request handler for displaying list of certificates
31
 */
32
class CertificatesList implements RequestHandlerInterface
33
{
34
    use ViewResponseTrait;
35
36
    /**
37
     * @var CertificatesModule|null $module
38
     */
39
    private $module;
40
41
    /**
42
     * @var CertificateFilesystemService $certif_filesystem
43
     */
44
    private $certif_filesystem;
45
46
    /**
47
     * @var UrlObfuscatorService $url_obfuscator_service
48
     */
49
    private $url_obfuscator_service;
50
51
52
    /**
53
     * Constructor for CertificatesList Request Handler
54
     *
55
     * @param ModuleService $module_service
56
     */
57
    public function __construct(
58
        ModuleService $module_service,
59
        CertificateFilesystemService $certif_filesystem,
60
        UrlObfuscatorService $url_obfuscator_service
61
    ) {
62
        $this->module = $module_service->findByInterface(CertificatesModule::class)->first();
63
        $this->certif_filesystem = $certif_filesystem;
64
        $this->url_obfuscator_service = $url_obfuscator_service;
65
    }
66
67
    /**
68
     * {@inheritDoc}
69
     * @see \Psr\Http\Server\RequestHandlerInterface::handle()
70
     */
71
    public function handle(ServerRequestInterface $request): ResponseInterface
72
    {
73
        if ($this->module === null) {
74
            throw new HttpNotFoundException(I18N::translate('The attached module could not be found.'));
75
        }
76
77
        $tree = $request->getAttribute('tree');
78
        assert($tree instanceof Tree);
79
80
        $title = I18N::translate('Certificates');
81
82
        $cities = array_map(function (string $item): array {
83
            return [$this->url_obfuscator_service->obfuscate($item), $item];
84
        }, $this->certif_filesystem->cities($tree));
85
86
        $city = $request->getQueryParams()['cityobf'] ?? $request->getAttribute('cityobf') ?? '';
87
88
        if ($city !== '' && $this->url_obfuscator_service->tryDeobfuscate($city)) {
89
            $title = I18N::translate('Certificates for %s', $city);
90
            $certificates = $this->certif_filesystem->certificatesForCity($tree, $city);
91
        }
92
93
        return $this->viewResponse($this->module->name() . '::certificates-list', [
94
            'title'                     =>  $title,
95
            'tree'                      =>  $tree,
96
            'module_name'               =>  $this->module->name(),
97
            'cities'                    =>  $cities,
98
            'selected_city'             =>  $city,
99
            'certificates_list'         =>  $certificates ?? collect(),
100
            'url_obfuscator_service'    =>  $this->url_obfuscator_service
101
        ]);
102
    }
103
}
104