MediaFolderAdd   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 74
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
eloc 30
dl 0
loc 74
ccs 0
cts 48
cp 0
rs 10
c 0
b 0
f 0
wmc 8

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getFolderName() 0 16 3
A getParent() 0 13 3
A createMediaFolder() 0 19 1
A execute() 0 15 1
1
<?php
2
3
namespace Backend\Modules\MediaLibrary\Ajax;
4
5
use Backend\Core\Engine\Base\AjaxAction as BackendBaseAJAXAction;
6
use Backend\Core\Engine\Authentication as BackendAuthentication;
7
use Backend\Core\Language\Language;
8
use Backend\Modules\MediaLibrary\Domain\MediaFolder\Command\CreateMediaFolder;
9
use Backend\Modules\MediaLibrary\Domain\MediaFolder\Exception\MediaFolderNotFound;
10
use Backend\Modules\MediaLibrary\Domain\MediaFolder\MediaFolder;
11
use Common\Exception\AjaxExitException;
12
use Symfony\Component\HttpFoundation\Response;
13
14
/**
15
 * This AJAX-action will add a new MediaFolder.
16
 */
17
class MediaFolderAdd extends BackendBaseAJAXAction
18
{
19
    public function execute(): void
20
    {
21
        parent::execute();
22
23
        /** @var CreateMediaFolder $createMediaFolder */
24
        $createMediaFolder = $this->createMediaFolder();
25
26
        // Success message
27
        $this->output(
28
            Response::HTTP_OK,
29
            $createMediaFolder->getMediaFolderEntity(),
30
            vsprintf(
31
                Language::msg('FolderIsAdded'),
32
                [
33
                    $createMediaFolder->getMediaFolderEntity()->getId(),
34
                ]
35
            )
36
        );
37
    }
38
39
    private function createMediaFolder(): CreateMediaFolder
40
    {
41
        /** @var MediaFolder|null $parent */
42
        $parent = $this->getParent();
43
44
        /** @var string $name */
45
        $name = $this->getFolderName($parent);
46
47
        /** @var CreateMediaFolder $createMediaFolder */
48
        $createMediaFolder = new CreateMediaFolder(
49
            $name,
50
            BackendAuthentication::getUser()->getUserId(),
51
            $parent
52
        );
53
54
        // Handle the MediaFolder create
55
        $this->get('command_bus')->handle($createMediaFolder);
56
57
        return $createMediaFolder;
58
    }
59
60
    protected function getFolderName(MediaFolder $parent = null): string
61
    {
62
        // Define name
63
        $name = $this->getRequest()->request->get('name');
64
65
        // We don't have a name
66
        if (empty($name)) {
67
            throw new AjaxExitException(Language::err('NameIsRequired'));
68
        }
69
70
        // Folder name already exists
71
        if ($this->get('media_library.repository.folder')->existsByName($name, $parent)) {
72
            throw new AjaxExitException(Language::err('MediaFolderExists'));
73
        }
74
75
        return $name;
76
    }
77
78
    protected function getParent(): ?MediaFolder
79
    {
80
        // Get parameters
81
        $parentId = $this->getRequest()->request->getInt('parent_id');
82
83
        if ($parentId === 0) {
84
            return null;
85
        }
86
87
        try {
88
            return $this->get('media_library.repository.folder')->findOneById($parentId);
89
        } catch (MediaFolderNotFound $mediaFolderNotFound) {
90
            throw new AjaxExitException(Language::err('ParentNotExists'));
91
        }
92
    }
93
}
94