Passed
Branch main (f9aaf7)
by Jonathan
14:43
created

AutoCompleteFile   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 52
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 19
dl 0
loc 52
rs 10
c 0
b 0
f 0
wmc 5

2 Methods

Rating   Name   Duplication   Size   Complexity  
A search() 0 19 4
A __construct() 0 10 1
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\Tree;
18
use Fisharebest\Webtrees\Http\RequestHandlers\AbstractAutocompleteHandler;
19
use Fisharebest\Webtrees\Services\ModuleService;
20
use Fisharebest\Webtrees\Services\SearchService;
21
use Illuminate\Support\Collection;
22
use MyArtJaub\Webtrees\Module\Certificates\CertificatesModule;
23
use MyArtJaub\Webtrees\Module\Certificates\Model\Certificate;
24
use MyArtJaub\Webtrees\Module\Certificates\Services\CertificateFilesystemService;
25
use MyArtJaub\Webtrees\Module\Certificates\Services\UrlObfuscatorService;
26
use Psr\Http\Message\ServerRequestInterface;
27
28
/**
29
 * Request handler for autocompleting the certificate filename field
30
 */
31
class AutoCompleteFile extends AbstractAutocompleteHandler
32
{
33
    // Tell the browser to cache the results
34
    protected const CACHE_LIFE = 10;
35
36
    private ?CertificatesModule $module;
37
    private CertificateFilesystemService $certif_filesystem;
38
    private UrlObfuscatorService $url_obfuscator_service;
39
40
    /**
41
     * Constructor for AutoCompleteFile Request Handler
42
     *
43
     * @param ModuleService $module_service
44
     * @param CertificateFilesystemService $certif_filesystem
45
     * @param UrlObfuscatorService $url_obfuscator_service
46
     * @param SearchService $search_service
47
     */
48
    public function __construct(
49
        ModuleService $module_service,
50
        CertificateFilesystemService $certif_filesystem,
51
        UrlObfuscatorService $url_obfuscator_service,
52
        SearchService $search_service
53
    ) {
54
        parent::__construct($search_service);
55
        $this->module = $module_service->findByInterface(CertificatesModule::class)->first();
56
        $this->certif_filesystem = $certif_filesystem;
57
        $this->url_obfuscator_service = $url_obfuscator_service;
58
    }
59
60
    /**
61
     * {@inheritDoc}
62
     * @see \Fisharebest\Webtrees\Http\RequestHandlers\AbstractAutocompleteHandler::search()
63
     */
64
    protected function search(ServerRequestInterface $request): Collection
65
    {
66
        $tree = $request->getAttribute('tree');
67
        assert($tree instanceof Tree);
68
69
        $city = $request->getQueryParams()['cityobf'] ?? '';
70
71
        if ($this->module === null || $city === '' || !$this->url_obfuscator_service->tryDeobfuscate($city)) {
72
            return collect();
73
        }
74
75
        $query  = $request->getAttribute('query') ?? '';
76
77
        /** @var Collection<string> $results */
78
        $results =  $this->certif_filesystem
79
            ->certificatesForCityContaining($tree, $city, $query)
80
            ->map(fn(Certificate $certificate): string => $certificate->filename());
81
82
        return $results;
83
    }
84
}
85