Completed
Push — master ( 0fb3d7...53ff75 )
by Markus
03:02
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 4
Bugs 1 Features 0
Metric Value
c 4
b 1
f 0
dl 0
loc 19
ccs 10
cts 10
cp 1
rs 9.4285
cc 3
eloc 11
nc 3
nop 1
crap 3
1
<?php
2
namespace Mathielen\ImportEngine\Storage\Provider;
3
4
use Mathielen\ImportEngine\Storage\Factory\StorageFactoryInterface;
5
use Symfony\Component\HttpFoundation\File\UploadedFile;
6
use Mathielen\ImportEngine\ValueObject\StorageSelection;
7
8
class UploadFileStorageProvider extends FileStorageProvider
9
{
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
     * @see \Mathielen\ImportEngine\Storage\Provider\StorageProviderInterface::select()
27
     */
28 2
    public function select($id = null)
29
    {
30 2
        if ($id instanceof UploadedFile) {
31 2
            if (!$id->isValid()) {
32 1
                throw new \InvalidArgumentException("Upload was not successful");
33
            }
34
35 1
            $newFile = $id->move($this->targetDirectory, $this->generateTargetFilename($id));
36
37 1
            $selection = new StorageSelection(
38 1
                new \SplFileInfo($newFile),
39 1
                $this->targetDirectory.  '/' . $newFile->getFilename(),
40 1
                $id->getClientOriginalName());
41
42 1
            return $selection;
43
        }
44
45
        return parent::select($id);
46
    }
47
48 1
    private function generateTargetFilename(UploadedFile $file)
49
    {
50 1
        return uniqid() . '_' . $file->getClientOriginalName();
51
    }
52
53
}
54