Completed
Push — master ( 7daaad...a8dd9d )
by Julito
09:46
created

IllustrationRepository::deleteIllustration()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

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