Completed
Push — master ( 378c5b...5052d2 )
by Markus
08:56
created

UploadFileStorageProvider::select()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 19
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 3

Importance

Changes 0
Metric Value
dl 0
loc 19
ccs 10
cts 10
cp 1
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 11
nc 3
nop 1
crap 3
1
<?php
2
3
namespace Mathielen\ImportEngine\Storage\Provider;
4
5
use Mathielen\ImportEngine\Storage\Factory\StorageFactoryInterface;
6
use Symfony\Component\HttpFoundation\File\UploadedFile;
7
use Mathielen\ImportEngine\ValueObject\StorageSelection;
8
9
class UploadFileStorageProvider extends FileStorageProvider
10
{
11
    private $targetDirectory;
12
13 4
    public function __construct($targetDirectory, StorageFactoryInterface $storageFactory = null)
14
    {
15 4
        parent::__construct($storageFactory);
16
17 4
        if (!is_dir($targetDirectory) || !is_writeable($targetDirectory)) {
18 1
            throw new \InvalidArgumentException("Targetdirectory $targetDirectory is not writable!");
19
        }
20
21 3
        $this->targetDirectory = realpath($targetDirectory);
22 3
    }
23
24
    /**
25
     * (non-PHPdoc).
26
     *
27
     * @see \Mathielen\ImportEngine\Storage\Provider\StorageProviderInterface::select()
28
     */
29 2
    public function select($id = null)
30
    {
31 2
        if ($id instanceof UploadedFile) {
32 2
            if (!$id->isValid()) {
33 1
                throw new \InvalidArgumentException('Upload was not successful');
34
            }
35
36 1
            $newFile = $id->move($this->targetDirectory, $this->generateTargetFilename($id));
37
38 1
            $selection = new StorageSelection(
39 1
                new \SplFileInfo($newFile),
40 1
                $this->targetDirectory.'/'.$newFile->getFilename(),
41 1
                $id->getClientOriginalName());
42
43 1
            return $selection;
44
        }
45
46
        return parent::select($id);
47
    }
48
49 1
    private function generateTargetFilename(UploadedFile $file)
50
    {
51 1
        return uniqid().'_'.$file->getClientOriginalName();
52
    }
53
}
54