Completed
Push — master ( 61044a...94728c )
by Rafał
24:26 queued 10:49
created

ArticleMediaAssetProvider   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 80
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Importance

Changes 0
Metric Value
wmc 10
lcom 1
cbo 7
dl 0
loc 80
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 11 1
A getImage() 0 12 2
A getFile() 0 13 2
A setFileExtension() 0 18 5
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the Superdesk Web Publisher Core Bundle.
7
 *
8
 * Copyright 2018 Sourcefabric z.ú. and contributors.
9
 *
10
 * For the full copyright and license information, please see the
11
 * AUTHORS and LICENSE files distributed with this source code.
12
 *
13
 * @copyright 2018 Sourcefabric z.ú
14
 * @license http://www.superdesk.org/license
15
 */
16
17
namespace SWP\Bundle\CoreBundle\Provider;
18
19
use Hoa\Mime\Mime;
20
use SWP\Bundle\ContentBundle\Factory\FileFactoryInterface;
21
use SWP\Bundle\ContentBundle\Model\FileInterface;
22
use SWP\Bundle\ContentBundle\Model\ImageInterface;
23
use SWP\Bundle\ContentBundle\Provider\ORM\ArticleMediaAssetProviderInterface;
24
use SWP\Bundle\CoreBundle\Context\ArticlePreviewContextInterface;
25
use SWP\Component\Bridge\Model\RenditionInterface;
26
use SWP\Component\Storage\Factory\FactoryInterface;
27
28
class ArticleMediaAssetProvider implements ArticleMediaAssetProviderInterface
29
{
30
    /**
31
     * @var ArticleMediaAssetProviderInterface
32
     */
33
    private $decoratedArticleMediaAssetProvider;
34
35
    /**
36
     * @var ArticlePreviewContextInterface
37
     */
38
    private $articlePreviewContext;
39
40
    /**
41
     * @var FileFactoryInterface
42
     */
43
    private $fileFactory;
44
45
    /**
46
     * @var FactoryInterface
47
     */
48
    private $imageFactory;
49
50
    public function __construct(
51
        ArticleMediaAssetProviderInterface $decoratedArticleMediaAssetProvider,
52
        ArticlePreviewContextInterface $articlePreviewContext,
53
        FileFactoryInterface $fileFactory,
54
        FactoryInterface $imageFactory
55
    ) {
56
        $this->decoratedArticleMediaAssetProvider = $decoratedArticleMediaAssetProvider;
57
        $this->articlePreviewContext = $articlePreviewContext;
58
        $this->fileFactory = $fileFactory;
59
        $this->imageFactory = $imageFactory;
60
    }
61
62
    public function getImage(RenditionInterface $rendition): ?ImageInterface
63
    {
64
        if ($this->articlePreviewContext->isPreview()) {
65
            $image = $this->imageFactory->create();
66
            $image->setAssetId($rendition->getMedia());
67
            $this->setFileExtension($image, $rendition);
68
69
            return $image;
70
        }
71
72
        return $this->decoratedArticleMediaAssetProvider->getImage($rendition);
73
    }
74
75
    public function getFile(RenditionInterface $rendition): ?FileInterface
76
    {
77
        if ($this->articlePreviewContext->isPreview()) {
78
            $file = $this->fileFactory->createFile();
79
            $file->setAssetId($rendition->getMedia());
80
            $file->setPreviewUrl($rendition->getHref());
81
            $this->setFileExtension($file, $rendition);
82
83
            return $file;
84
        }
85
86
        return $this->decoratedArticleMediaAssetProvider->getFile($rendition);
87
    }
88
89
    private function setFileExtension(FileInterface $file, RenditionInterface $rendition): FileInterface
90
    {
91
        if (null === $rendition->getMimetype()) {
92
            return $file;
93
        }
94
95
        try {
96
            $mimeTypes = Mime::getExtensionsFromMime($rendition->getMimetype());
97
        } catch (\Exception $e) {
98
            return $file;
99
        }
100
101
        if (!empty($mimeTypes) && null === $file->getFileExtension()) {
102
            $file->setFileExtension($mimeTypes[0]);
103
        }
104
105
        return $file;
106
    }
107
}
108