Completed
Push — ezp-30882-thumbnail ( d9f236...3bd997 )
by
unknown
30:29 queued 14:17
created

ThumbnailChainStrategy   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 41
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Importance

Changes 0
Metric Value
dl 0
loc 41
rs 10
c 0
b 0
f 0
wmc 8
lcom 1
cbo 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A getThumbnail() 0 15 4
A setStrategies() 0 8 2
A addStrategy() 0 6 1
1
<?php
2
3
namespace eZ\Publish\Core\Repository\Strategy\ContentThumbnail;
4
5
use eZ\Publish\API\Repository\Values\Content\Thumbnail;
6
use eZ\Publish\API\Repository\Values\ContentType\ContentType;
7
use eZ\Publish\SPI\Repository\Strategy\ContentThumbnail\ThumbnailStrategy;
8
9
class ThumbnailChainStrategy implements ThumbnailStrategy
10
{
11
    protected $strategies = [];
12
13
    public function __construct(array $strategies)
14
    {
15
        $this->setStrategies($strategies);
16
    }
17
18
    public function getThumbnail(ContentType $contentType, array $fields): ?Thumbnail
19
    {
20
        foreach ($this->strategies as $priority => $strategies) {
21
            /** @var \eZ\Publish\SPI\Repository\Strategy\ContentThumbnail\ThumbnailStrategy $strategy */
22
            foreach ($strategies as $strategy) {
23
                $thumbnail = $strategy->getThumbnail($contentType, $fields);
24
25
                if ($thumbnail !== null) {
26
                    return $thumbnail;
27
                }
28
            }
29
        }
30
31
        return null;
32
    }
33
34
    public function setStrategies(array $strategies): void
35
    {
36
        $this->strategies = [];
37
38
        foreach ($strategies as $priority => $strategy) {
39
            $this->addStrategy($strategy, $priority);
40
        }
41
    }
42
43
    public function addStrategy(ThumbnailStrategy $strategy, int $priority = 0): void
44
    {
45
        $this->strategies[$priority][] = $strategy;
46
47
        ksort($this->strategies);
48
    }
49
}