AutoCompleteFile   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 50
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 18
dl 0
loc 50
rs 10
c 0
b 0
f 0
wmc 5

2 Methods

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