Completed
Push — master ( 0be8e1...585ca2 )
by Daniel
59:26 queued 46:02
created

FixtureFileUploader   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 37
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
eloc 18
dl 0
loc 37
ccs 0
cts 19
cp 0
rs 10
c 0
b 0
f 0
wmc 3

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A upload() 0 20 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Silverback\ApiComponentBundle\File\Uploader;
6
7
use Silverback\ApiComponentBundle\Entity\Component\FileInterface;
8
use Symfony\Component\Filesystem\Filesystem;
9
use Symfony\Component\HttpFoundation\File\File;
10
use Symfony\Component\HttpFoundation\File\UploadedFile;
11
12
class FixtureFileUploader
13
{
14
    private $fileUploader;
15
16
    public function __construct(
17
        FileUploader $fileUploader
18
    ) {
19
        $this->fileUploader = $fileUploader;
20
    }
21
22
    /**
23
     * @param FileInterface $entity
24
     * @param File $file
25
     * @param string $field
26
     * @return \Silverback\ApiComponentBundle\Entity\Component\FileInterface
27
     * @throws \Exception
28
     */
29
    public function upload(FileInterface $entity, File $file, string $field = 'filePath'): FileInterface
30
    {
31
        $tempFile = tmpfile();
32
        if (false === $tempFile) {
33
            throw new \Exception('Could not create temporary file');
34
        }
35
        $tempPath = stream_get_meta_data($tempFile)['uri'];
36
        fclose($tempFile);
37
38
        $fs = new Filesystem();
39
        $fs->copy($file->getRealPath(), $tempPath, true);
40
        $uploadedFile = new UploadedFile(
41
            $tempPath,
42
            $file->getFilename(),
43
            $file->getMimeType(),
44
            null,
45
            true
46
        );
47
        $this->fileUploader->upload($entity, $field, $uploadedFile);
48
        return $entity;
49
    }
50
}
51