Passed
Push — main ( aa4d6f...a1bd56 )
by Greg
16:39
created

AdminMediaFileThumbnail::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * webtrees: online genealogy
5
 * Copyright (C) 2023 webtrees development team
6
 * This program is free software: you can redistribute it and/or modify
7
 * it under the terms of the GNU General Public License as published by
8
 * the Free Software Foundation, either version 3 of the License, or
9
 * (at your option) any later version.
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
 * GNU General Public License for more details.
14
 * You should have received a copy of the GNU General Public License
15
 * along with this program. If not, see <https://www.gnu.org/licenses/>.
16
 */
17
18
declare(strict_types=1);
19
20
namespace Fisharebest\Webtrees\Http\RequestHandlers;
21
22
use Fisharebest\Webtrees\Http\Exceptions\HttpBadRequestException;
23
use Fisharebest\Webtrees\I18N;
24
use Fisharebest\Webtrees\Registry;
25
use Fisharebest\Webtrees\Services\MediaFileService;
26
use Fisharebest\Webtrees\Validator;
27
use Psr\Http\Message\ResponseInterface;
28
use Psr\Http\Message\ServerRequestInterface;
29
use Psr\Http\Server\RequestHandlerInterface;
30
31
/**
32
 * Create a thumbnail of a file, for use on the admin page.
33
 */
34
class AdminMediaFileThumbnail implements RequestHandlerInterface
35
{
36
    private MediaFileService $media_file_service;
37
38
    /**
39
     * @param MediaFileService $media_file_service
40
     */
41
    public function __construct(MediaFileService $media_file_service)
42
    {
43
        $this->media_file_service = $media_file_service;
44
    }
45
46
    /**
47
     * Show an image/thumbnail, with/without a watermark.
48
     *
49
     * @param ServerRequestInterface $request
50
     *
51
     * @return ResponseInterface
52
     */
53
    public function handle(ServerRequestInterface $request): ResponseInterface
54
    {
55
        $filesystem = Registry::filesystem()->data();
56
        $path       = Validator::queryParams($request)->string('path');
57
58
        $media_folders = $this->media_file_service->allMediaFolders($filesystem)->all();
59
60
        foreach ($media_folders as $media_folder) {
61
            if (str_starts_with($path, $media_folder)) {
62
                return Registry::imageFactory()->thumbnailResponse($filesystem, $path, 120, 120, 'contain');
63
            }
64
        }
65
66
        throw new HttpBadRequestException(I18N::translate('The parameter “path” is invalid.'));
67
    }
68
}
69