Completed
Push — master ( 0a7932...aee286 )
by Maksim
13s
created

DataManager::getDefaultImageUrl()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 13
Code Lines 8

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 13
rs 9.4285
cc 3
eloc 8
nc 3
nop 1
1
<?php
2
3
namespace Liip\ImagineBundle\Imagine\Data;
4
5
use Liip\ImagineBundle\Binary\Loader\LoaderInterface;
6
use Liip\ImagineBundle\Imagine\Filter\FilterConfiguration;
7
use Liip\ImagineBundle\Binary\MimeTypeGuesserInterface;
8
use Liip\ImagineBundle\Model\Binary;
9
use Liip\ImagineBundle\Binary\BinaryInterface;
10
use Symfony\Component\HttpFoundation\File\MimeType\ExtensionGuesserInterface;
11
12
class DataManager
13
{
14
    /**
15
     * @var MimeTypeGuesserInterface
16
     */
17
    protected $mimeTypeGuesser;
18
19
    /**
20
     * @var ExtensionGuesserInterface
21
     */
22
    protected $extensionGuesser;
23
24
    /**
25
     * @var FilterConfiguration
26
     */
27
    protected $filterConfig;
28
29
    /**
30
     * @var string|null
31
     */
32
    protected $defaultLoader;
33
34
    /**
35
     * @var string|null
36
     */
37
    protected $globalDefaultImage;
38
39
    /**
40
     * @var LoaderInterface[]
41
     */
42
    protected $loaders = array();
43
44
    /**
45
     * @param MimeTypeGuesserInterface  $mimeTypeGuesser
46
     * @param ExtensionGuesserInterface $extensionGuesser
47
     * @param FilterConfiguration       $filterConfig
48
     * @param string                    $defaultLoader
49
     * @param string                    $globalDefaultImage
50
     */
51
    public function __construct(
52
        MimeTypeGuesserInterface $mimeTypeGuesser,
53
        ExtensionGuesserInterface $extensionGuesser,
54
        FilterConfiguration $filterConfig,
55
        $defaultLoader = null,
56
        $globalDefaultImage = null
57
    ) {
58
        $this->mimeTypeGuesser = $mimeTypeGuesser;
59
        $this->filterConfig = $filterConfig;
60
        $this->defaultLoader = $defaultLoader;
61
        $this->extensionGuesser = $extensionGuesser;
62
        $this->globalDefaultImage = $globalDefaultImage;
63
    }
64
65
    /**
66
     * Adds a loader to retrieve images for the given filter.
67
     *
68
     * @param string          $filter
69
     * @param LoaderInterface $loader
70
     */
71
    public function addLoader($filter, LoaderInterface $loader)
72
    {
73
        $this->loaders[$filter] = $loader;
74
    }
75
76
    /**
77
     * Returns a loader previously attached to the given filter.
78
     *
79
     * @param string $filter
80
     *
81
     * @throws \InvalidArgumentException
82
     *
83
     * @return LoaderInterface
84
     */
85
    public function getLoader($filter)
86
    {
87
        $config = $this->filterConfig->get($filter);
88
89
        $loaderName = empty($config['data_loader']) ? $this->defaultLoader : $config['data_loader'];
90
91
        if (!isset($this->loaders[$loaderName])) {
92
            throw new \InvalidArgumentException(sprintf(
93
                'Could not find data loader "%s" for "%s" filter type',
94
                $loaderName,
95
                $filter
96
            ));
97
        }
98
99
        return $this->loaders[$loaderName];
100
    }
101
102
    /**
103
     * Retrieves an image with the given filter applied.
104
     *
105
     * @param string $filter
106
     * @param string $path
107
     *
108
     * @throws \LogicException
109
     *
110
     * @return \Liip\ImagineBundle\Binary\BinaryInterface
111
     */
112
    public function find($filter, $path)
113
    {
114
        $loader = $this->getLoader($filter);
115
116
        $binary = $loader->find($path);
117
        if (!$binary instanceof BinaryInterface) {
118
            $mimeType = $this->mimeTypeGuesser->guess($binary);
119
120
            $binary = new Binary(
121
                $binary,
122
                $mimeType,
123
                $this->extensionGuesser->guess($mimeType)
124
            );
125
        }
126
127
        if (null === $binary->getMimeType()) {
128
            throw new \LogicException(sprintf('The mime type of image %s was not guessed.', $path));
129
        }
130
131
        if (0 !== strpos($binary->getMimeType(), 'image/')) {
132
            throw new \LogicException(sprintf('The mime type of image %s must be image/xxx got %s.', $path, $binary->getMimeType()));
133
        }
134
135
        return $binary;
136
    }
137
138
    /**
139
     * Get default image url with the given filter applied.
140
     *
141
     * @param string $filter
142
     *
143
     * @return string
144
     */
145
    public function getDefaultImageUrl($filter)
146
    {
147
        $config = $this->filterConfig->get($filter);
148
149
        $defaultImage = null;
150
        if (false == empty($config['default_image'])) {
0 ignored issues
show
Coding Style Best Practice introduced by
It seems like you are loosely comparing two booleans. Considering using the strict comparison === instead.

When comparing two booleans, it is generally considered safer to use the strict comparison operator.

Loading history...
151
            $defaultImage = $config['default_image'];
152
        } elseif (!empty($this->globalDefaultImage)) {
153
            $defaultImage = $this->globalDefaultImage;
154
        }
155
156
        return $defaultImage;
157
    }
158
}
159