LocalUploadComponent   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 81
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 28
c 1
b 0
f 0
dl 0
loc 81
rs 10
wmc 7

3 Methods

Rating   Name   Duplication   Size   Complexity  
A setModelForDelete() 0 10 1
A init() 0 14 5
A setModelForSave() 0 12 1
1
<?php
2
3
namespace Itstructure\MFUploader\components;
4
5
use Yii;
6
use yii\helpers\ArrayHelper;
7
use yii\base\InvalidConfigException;
8
use Itstructure\MFUploader\models\Mediafile;
9
use Itstructure\MFUploader\models\upload\LocalUpload;
10
use Itstructure\MFUploader\interfaces\{UploadModelInterface, UploadComponentInterface};
11
12
/**
13
 * Class LocalUploadComponent
14
 * Component class to upload files in local space.
15
 *
16
 * @property string $uploadRoot Root directory for local uploaded files.
17
 * @property array $uploadDirs Directory for uploaded files.
18
 *
19
 * @package Itstructure\MFUploader\components
20
 *
21
 * @author Andrey Girnik <[email protected]>
22
 */
23
class LocalUploadComponent extends BaseUploadComponent implements UploadComponentInterface
24
{
25
    /**
26
     * Root directory for local uploaded files.
27
     *
28
     * @var string
29
     */
30
    public $uploadRoot;
31
32
    /**
33
     * Directory for uploaded files.
34
     *
35
     * @var string
36
     */
37
    public $uploadDirs = [
38
        UploadModelInterface::FILE_TYPE_IMAGE => DIRECTORY_SEPARATOR.'uploads'.DIRECTORY_SEPARATOR.'images',
39
        UploadModelInterface::FILE_TYPE_AUDIO => DIRECTORY_SEPARATOR.'uploads'.DIRECTORY_SEPARATOR.'audio',
40
        UploadModelInterface::FILE_TYPE_VIDEO => DIRECTORY_SEPARATOR.'uploads'.DIRECTORY_SEPARATOR.'video',
41
        UploadModelInterface::FILE_TYPE_APP => DIRECTORY_SEPARATOR.'uploads'.DIRECTORY_SEPARATOR.'application',
42
        UploadModelInterface::FILE_TYPE_TEXT => DIRECTORY_SEPARATOR.'uploads'.DIRECTORY_SEPARATOR.'text',
43
        UploadModelInterface::FILE_TYPE_OTHER => DIRECTORY_SEPARATOR.'uploads'.DIRECTORY_SEPARATOR.'other',
44
    ];
45
46
    /**
47
     * Initialize.
48
     */
49
    public function init()
50
    {
51
        if (null === $this->uploadRoot) {
52
            $uploadRoot = Yii::getAlias('@webroot');
53
54
            if (is_bool($uploadRoot)) {
55
                throw new InvalidConfigException('The webroot must not be a bool type.');
56
            }
57
58
            $this->uploadRoot = $uploadRoot;
59
        }
60
61
        if (null === $this->uploadRoot || !is_string($this->uploadRoot)) {
62
            throw new InvalidConfigException('The uploadRoot is not defined correctly.');
63
        }
64
    }
65
66
    /**
67
     * Sets a mediafile model for upload file.
68
     *
69
     * @param Mediafile $mediafileModel
70
     *
71
     * @return UploadModelInterface
72
     */
73
    public function setModelForSave(Mediafile $mediafileModel): UploadModelInterface
74
    {
75
        /* @var UploadModelInterface $object */
76
        $object = Yii::createObject(ArrayHelper::merge([
77
                'class' => LocalUpload::class,
78
                'mediafileModel' => $mediafileModel,
79
                'uploadRoot' => $this->uploadRoot,
80
                'uploadDirs' => $this->uploadDirs,
81
            ], $this->getBaseConfigForSave())
82
        );
83
84
        return $object;
85
    }
86
87
    /**
88
     * Sets a mediafile model for delete file.
89
     *
90
     * @param Mediafile $mediafileModel
91
     *
92
     * @return UploadModelInterface
93
     */
94
    public function setModelForDelete(Mediafile $mediafileModel): UploadModelInterface
95
    {
96
        /* @var UploadModelInterface $object */
97
        $object = Yii::createObject([
98
            'class' => LocalUpload::class,
99
            'mediafileModel' => $mediafileModel,
100
            'uploadRoot' => $this->uploadRoot,
101
        ]);
102
103
        return $object;
104
    }
105
}
106