Completed
Push — master ( eb716b...911538 )
by Julito
15:40
created

getIllustrationUrlFromNode()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 21
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

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