Completed
Push — master ( 67834e...72c918 )
by Julito
08:46 queued 11s
created

IllustrationRepository::setResourceProperties()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

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