Completed
Push — master ( fc1588...7621d0 )
by Julito
16:55
created

IllustrationRepository::addIllustrationToUser()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 19
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 11
nc 3
nop 2
dl 0
loc 19
rs 9.9
c 0
b 0
f 0
1
<?php
2
/* For licensing terms, see /license.txt */
3
4
namespace Chamilo\CoreBundle\Repository;
5
6
use APY\DataGridBundle\Grid\Column\Column;
7
use APY\DataGridBundle\Grid\Grid;
8
use Chamilo\CoreBundle\Entity\Illustration;
9
use Chamilo\CoreBundle\Entity\Resource\AbstractResource;
10
use Chamilo\CoreBundle\Entity\Resource\ResourceFile;
11
use Chamilo\CoreBundle\Entity\Resource\ResourceNode;
12
use Chamilo\UserBundle\Entity\User;
13
use Symfony\Component\Form\FormInterface;
14
use Symfony\Component\HttpFoundation\File\UploadedFile;
15
16
/**
17
 * Class IllustrationRepository.
18
 */
19
final class IllustrationRepository extends ResourceRepository implements ResourceRepositoryInterface
20
{
21
    public function saveUpload(UploadedFile $file)
22
    {
23
        /** @var Illustration $resource */
24
        $resource = $this->create();
25
        $resource->setName($file->getClientOriginalName());
26
27
        return $resource;
28
    }
29
30
    public function saveResource(FormInterface $form, $course, $session, $fileType)
31
    {
32
        $newResource = $form->getData();
33
        $newResource
34
            //->setCourse($course)
35
            //->setSession($session)
36
            //->setFiletype($fileType)
37
            //->setTitle($title) // already added in $form->getData()
38
        ;
39
40
        return $newResource;
41
    }
42
43
    /**
44
     * @param $uploadFile
45
     */
46
    public function addIllustration(AbstractResource $resource, User $user, $uploadFile): ?ResourceFile
47
    {
48
        if (null === $uploadFile) {
49
            return null;
50
        }
51
52
        $illustrationNode = $this->getIllustrationNodeFromParent($resource->getResourceNode());
53
        $em = $this->getEntityManager();
54
55
        if ($illustrationNode === null) {
56
            $illustration = new Illustration();
57
            $em->persist($illustration);
58
            $this->addResourceNode($illustration, $user, $resource);
59
        } else {
60
            $illustration = $this->repository->findOneBy(['resourceNode' => $illustrationNode]);
61
        }
62
63
        //$this->addResourceToEveryone($illustrationNode);
64
        return $this->addFile($illustration, $uploadFile);
65
    }
66
67
    public function addIllustrationToUser(User $user, $uploadFile): ?ResourceFile
68
    {
69
        if (null === $uploadFile) {
70
            return null;
71
        }
72
73
        $illustrationNode = $this->getIllustrationNodeFromParent($user->getResourceNode());
74
        $em = $this->getEntityManager();
75
76
        if ($illustrationNode === null) {
77
            $illustration = new Illustration();
78
            $em->persist($illustration);
79
            $this->createNodeForResource($illustration, $user, $user->getResourceNode());
80
        } else {
81
            $illustration = $this->repository->findOneBy(['resourceNode' => $illustrationNode]);
82
        }
83
84
        //$this->addResourceToEveryone($illustrationNode);
85
        return $this->addFile($illustration, $uploadFile);
86
    }
87
88
    public function getIllustrationNodeFromParent(ResourceNode $resourceNode): ?ResourceNode
89
    {
90
        $nodeRepo = $this->getResourceNodeRepository();
91
        $resourceType = $this->getResourceType();
92
93
        /** @var ResourceNode $node */
94
        $node = $nodeRepo->findOneBy(
95
            ['parent' => $resourceNode, 'resourceType' => $resourceType]
96
        );
97
98
        return $node;
99
    }
100
101
    public function deleteIllustration(AbstractResource $resource)
102
    {
103
        $node = $this->getIllustrationNodeFromParent($resource->getResourceNode());
104
105
        if ($node !== null) {
106
            $this->getEntityManager()->remove($node);
107
            $this->getEntityManager()->flush();
108
        }
109
    }
110
111
    /**
112
     * @param string $filter See: services.yaml parameter "glide_media_filters" to see the list of filters.
113
     *
114
     * @return string
115
     */
116
    public function getIllustrationUrl(AbstractResource $resource, $filter = ''): string
117
    {
118
        return $this->getIllustrationUrlFromNode($resource->getResourceNode(), $filter);
119
    }
120
121
    public function getIllustrationUrlFromNode(ResourceNode $resourceNode, $filter = ''): string
122
    {
123
        $node = $this->getIllustrationNodeFromParent($resourceNode);
124
125
        if ($node !== null) {
126
            $params = [
127
                'id' => $node->getId(),
128
                'tool' => $node->getResourceType()->getTool(),
129
                'type' => $node->getResourceType()->getName(),
130
            ];
131
            if (!empty($filter)) {
132
                $params['filter'] = $filter;
133
            }
134
135
            return $this->getRouter()->generate(
136
                'chamilo_core_resource_view',
137
                $params
138
            );
139
        }
140
141
        return '';
142
    }
143
144
    public function getTitleColumn(Grid $grid): Column
145
    {
146
        return $grid->getColumn('name');
147
    }
148
}
149