Passed
Push — master ( 5cceb5...6a935a )
by Julito
08:17
created

IllustrationRepository::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

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