Completed
Pull Request — master (#1217)
by
unknown
01:31
created

FileSystemLoader::getExtension()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 12
rs 9.8666
c 0
b 0
f 0
cc 3
nc 3
nop 1
1
<?php
2
3
/*
4
 * This file is part of the `liip/LiipImagineBundle` project.
5
 *
6
 * (c) https://github.com/liip/LiipImagineBundle/graphs/contributors
7
 *
8
 * For the full copyright and license information, please view the LICENSE.md
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Liip\ImagineBundle\Binary\Loader;
13
14
use Liip\ImagineBundle\Binary\Locator\LocatorInterface;
15
use Liip\ImagineBundle\Exception\InvalidArgumentException;
16
use Liip\ImagineBundle\Model\FileBinary;
17
use Symfony\Component\HttpFoundation\File\MimeType\ExtensionGuesserInterface as DeprecatedExtensionGuesserInterface;
18
use Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesserInterface as DeprecatedMimeTypeGuesserInterface;
19
use Symfony\Component\Mime\MimeTypeGuesserInterface;
20
use Symfony\Component\Mime\MimeTypesInterface;
21
22
class FileSystemLoader implements LoaderInterface
23
{
24
    /**
25
     * @var MimeTypeGuesserInterface|DeprecatedMimeTypeGuesserInterface
26
     */
27
    protected $mimeTypeGuesser;
28
29
    /**
30
     * @var MimeTypesInterface|DeprecatedExtensionGuesserInterface
31
     */
32
    protected $extensionGuesser;
33
34
    /**
35
     * @var LocatorInterface
36
     */
37
    protected $locator;
38
39
    /**
40
     * @param MimeTypeGuesserInterface|DeprecatedMimeTypeGuesserInterface $mimeGuesser
41
     * @param MimeTypesInterface|DeprecatedExtensionGuesserInterface      $extensionGuesser
42
     * @param LocatorInterface                                            $locator
43
     */
44
    public function __construct(
45
        $mimeGuesser,
46
        $extensionGuesser,
47
        LocatorInterface $locator
48
    ) {
49
        if (!$mimeGuesser instanceof MimeTypeGuesserInterface && !$mimeGuesser instanceof DeprecatedMimeTypeGuesserInterface) {
50
            throw new InvalidArgumentException('$mimeGuesser must be an instance of Symfony\Component\Mime\MimeTypeGuesserInterface or Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesserInterface');
51
        }
52
53
        if (!$extensionGuesser instanceof MimeTypesInterface && !$extensionGuesser instanceof DeprecatedExtensionGuesserInterface) {
54
            throw new InvalidArgumentException('$extensionGuesser must be an instance of Symfony\Component\Mime\MimeTypesInterface or Symfony\Component\HttpFoundation\File\MimeType\ExtensionGuesserInterface');
55
        }
56
57
        if (interface_exists(MimeTypeGuesserInterface::class) && $mimeGuesser instanceof DeprecatedMimeTypeGuesserInterface) {
58
            @trigger_error(sprintf('Passing a %s to "%s()" is deprecated since Symfony 4.3, pass a "%s" instead.', DeprecatedMimeTypeGuesserInterface::class, __METHOD__, MimeTypeGuesserInterface::class), E_USER_DEPRECATED);
0 ignored issues
show
Security Best Practice introduced by
It seems like you do not handle an error condition here. This can introduce security issues, and is generally not recommended.

If you suppress an error, we recommend checking for the error condition explicitly:

// For example instead of
@mkdir($dir);

// Better use
if (@mkdir($dir) === false) {
    throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
Loading history...
59
        }
60
61
        if (interface_exists(MimeTypesInterface::class) && $extensionGuesser instanceof DeprecatedExtensionGuesserInterface) {
62
            @trigger_error(sprintf('Passing a %s to "%s()" is deprecated since Symfony 4.3, pass a "%s" instead.', DeprecatedExtensionGuesserInterface::class, __METHOD__, MimeTypesInterface::class), E_USER_DEPRECATED);
0 ignored issues
show
Security Best Practice introduced by
It seems like you do not handle an error condition here. This can introduce security issues, and is generally not recommended.

If you suppress an error, we recommend checking for the error condition explicitly:

// For example instead of
@mkdir($dir);

// Better use
if (@mkdir($dir) === false) {
    throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
Loading history...
63
        }
64
65
        $this->mimeTypeGuesser = $mimeGuesser;
66
        $this->extensionGuesser = $extensionGuesser;
67
        $this->locator = $locator;
68
    }
69
70
    /**
71
     * {@inheritdoc}
72
     */
73
    public function find($path)
74
    {
75
        $path = $this->locator->locate($path);
76
        $mimeType = $this->mimeTypeGuesser instanceof DeprecatedMimeTypeGuesserInterface ? $this->mimeTypeGuesser->guess($path) : $this->mimeTypeGuesser->guessMimeType($path);
77
        $extension = $this->getExtension($mimeType);
78
79
        return new FileBinary($path, $mimeType, $extension);
80
    }
81
82
    private function getExtension(?string $mimeType): ?string
83
    {
84
        if ($this->extensionGuesser instanceof DeprecatedExtensionGuesserInterface) {
85
            return $this->extensionGuesser->guess($mimeType);
86
        }
87
88
        if (null === $mimeType) {
89
            return null;
90
        }
91
92
        return $this->extensionGuesser->getExtensions($mimeType)[0] ?? null;
93
    }
94
}
95