Passed
Push — master ( f5d059...7cc9b1 )
by Julito
09:53
created

ResourceRepository::getTool()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 1
dl 0
loc 6
rs 10
c 0
b 0
f 0
1
<?php
2
/* For licensing terms, see /license.txt */
3
4
namespace Chamilo\CoreBundle\Repository;
5
6
use Chamilo\CoreBundle\Entity\Course;
7
use Chamilo\CoreBundle\Entity\Resource\AbstractResource;
8
use Chamilo\CoreBundle\Entity\Resource\ResourceLink;
9
use Chamilo\CoreBundle\Entity\Resource\ResourceNode;
10
use Chamilo\CoreBundle\Entity\Resource\ResourceRight;
11
use Chamilo\CoreBundle\Entity\Session;
12
use Chamilo\CoreBundle\Entity\Tool;
13
use Chamilo\CoreBundle\Entity\Usergroup;
14
use Chamilo\CourseBundle\Entity\CGroupInfo;
15
use Chamilo\UserBundle\Entity\Group;
16
use Chamilo\UserBundle\Entity\User;
17
use Doctrine\ORM\Query\Expr\Join;
18
use Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository;
19
20
/**
21
 * Class ResourceRepository.
22
 *
23
 * @package Chamilo\CoreBundle\Entity
24
 */
25
class ResourceRepository extends EntityRepository
26
{
27
    /**
28
     * Creates a ResourceNode.
29
     *
30
     * @param AbstractResource $resource
31
     * @param User             $creator
32
     * @param AbstractResource $parent
33
     *
34
     * @return ResourceNode
35
     */
36
    public function addResourceNode(
37
        AbstractResource $resource,
38
        User $creator,
39
        AbstractResource $parent = null
40
    ): ResourceNode {
41
        $resourceNode = new ResourceNode();
42
43
        $tool = $this->getTool($resource->getToolName());
44
        $resourceType = $this->getEntityManager()->getRepository('ChamiloCoreBundle:Resource\ResourceType')->findOneBy(
45
            ['name' => $resource->getToolName()]
46
        );
47
        $resourceNode
48
            ->setName($resource->getResourceName())
49
            ->setCreator($creator)
50
            ->setResourceType($resourceType);
51
52
        if ($parent !== null) {
53
            $resourceNode->setParent($parent->getResourceNode());
54
        }
55
56
        $this->getEntityManager()->persist($resourceNode);
57
        $this->getEntityManager()->flush();
58
59
        return $resourceNode;
60
    }
61
62
    public function addResourceMedia(ResourceNode $resourceNode, $file)
63
    {
64
65
    }
66
67
    /**
68
     * @param ResourceNode $resourceNode
69
     *
70
     * @return ResourceLink
71
     */
72
    public function addResourceOnlyToMe(ResourceNode $resourceNode): ResourceLink
73
    {
74
        $resourceLink = new ResourceLink();
75
        $resourceLink
76
            ->setResourceNode($resourceNode)
77
            ->setPrivate(true);
78
79
        $this->getEntityManager()->persist($resourceLink);
80
        $this->getEntityManager()->flush();
81
82
        return $resourceLink;
83
    }
84
85
    /**
86
     * @param ResourceNode  $resourceNode
87
     * @param ResourceRight $right
88
     *
89
     * @return ResourceLink
90
     */
91
    public function addResourceToEveryone(ResourceNode $resourceNode, ResourceRight $right): ResourceLink
92
    {
93
        $resourceLink = new ResourceLink();
94
        $resourceLink
95
            ->setResourceNode($resourceNode)
96
            ->addResourceRight($right)
97
        ;
98
99
        $this->getEntityManager()->persist($resourceLink);
100
        $this->getEntityManager()->flush();
101
102
        return $resourceLink;
103
    }
104
105
    /**
106
     * @param ResourceNode  $resourceNode
107
     * @param Course        $course
108
     * @param ResourceRight $right
109
     *
110
     * @return ResourceLink
111
     */
112
    public function addResourceToCourse(ResourceNode $resourceNode, Course $course, ResourceRight $right): ResourceLink
113
    {
114
        $resourceLink = new ResourceLink();
115
        $resourceLink
116
            ->setResourceNode($resourceNode)
117
            ->setCourse($course)
118
            ->addResourceRight($right);
119
        $this->getEntityManager()->persist($resourceLink);
120
        $this->getEntityManager()->flush();
121
122
        return $resourceLink;
123
    }
124
125
    /**
126
     * @param ResourceNode $resourceNode
127
     * @param User         $toUser
128
     *
129
     * @return ResourceLink
130
     */
131
    public function addResourceToUser(ResourceNode $resourceNode, User $toUser): ResourceLink
132
    {
133
        $resourceLink = $this->addResourceNodeToUser($resourceNode, $toUser);
134
        $this->getEntityManager()->persist($resourceLink);
135
136
        return $resourceLink;
137
    }
138
139
    /**
140
     * @param ResourceNode $resourceNode
141
     * @param array        $userList     User id list
142
     */
143
    public function addResourceToUserList(ResourceNode $resourceNode, array $userList)
144
    {
145
        $em = $this->getEntityManager();
146
147
        if (!empty($userList)) {
148
            foreach ($userList as $userId) {
149
                $toUser = $em->getRepository('ChamiloUserBundle:User')->find($userId);
150
151
                $resourceLink = $this->addResourceNodeToUser($resourceNode, $toUser);
152
                $em->persist($resourceLink);
153
            }
154
        }
155
    }
156
157
    /**
158
     * @param ResourceNode $resourceNode
159
     * @param User         $toUser
160
     *
161
     * @return ResourceLink
162
     */
163
    public function addResourceNodeToUser(ResourceNode $resourceNode, User $toUser): ResourceLink
164
    {
165
        $resourceLink = new ResourceLink();
166
        $resourceLink
167
            ->setResourceNode($resourceNode)
168
            ->setUser($toUser);
169
170
        return $resourceLink;
171
    }
172
173
    /**
174
     * @param ResourceNode  $resourceNode
175
     * @param Course        $course
176
     * @param Session       $session
177
     * @param ResourceRight $right
178
     *
179
     * @return ResourceLink
180
     */
181
    public function addResourceToSession(
182
        ResourceNode $resourceNode,
183
        Course $course,
184
        Session $session,
185
        ResourceRight $right
186
    ) {
187
        $resourceLink = $this->addResourceToCourse(
188
            $resourceNode,
189
            $course,
190
            $right
191
        );
192
        $resourceLink->setSession($session);
193
        $this->getEntityManager()->persist($resourceLink);
194
195
        return $resourceLink;
196
    }
197
198
    /**
199
     * @param ResourceNode  $resourceNode
200
     * @param Course        $course
201
     * @param CGroupInfo    $group
202
     * @param ResourceRight $right
203
     *
204
     * @return ResourceLink
205
     */
206
    public function addResourceToCourseGroup(
207
        ResourceNode $resourceNode,
208
        Course $course,
209
        CGroupInfo $group,
210
        ResourceRight $right
211
    ) {
212
        $resourceLink = $this->addResourceToCourse(
213
            $resourceNode,
214
            $course,
215
            $right
216
        );
217
        $resourceLink->setGroup($group);
218
        $this->getEntityManager()->persist($resourceLink);
219
220
        return $resourceLink;
221
    }
222
223
    /**
224
     * @param ResourceNode  $resourceNode
225
     * @param Usergroup     $group
226
     * @param ResourceRight $right
227
     *
228
     * @return ResourceLink
229
     */
230
    public function addResourceToGroup(
231
        ResourceNode $resourceNode,
232
        Usergroup $group,
233
        ResourceRight $right
234
    ) {
235
        $resourceLink = new ResourceLink();
236
        $resourceLink
237
            ->setResourceNode($resourceNode)
238
            ->setUserGroup($group)
239
            ->addResourceRight($right);
240
241
        return $resourceLink;
242
    }
243
244
    /**
245
     * @param Course           $course
246
     * @param Tool             $tool
247
     * @param AbstractResource $parent
248
     *
249
     * @return ResourceLink
250
     */
251
    public function getResourceByCourse(Course $course, Tool $tool, AbstractResource $parent = null)
252
    {
253
        $query = $this->getEntityManager()->createQueryBuilder()
254
            ->select('resource')
255
            ->from('Chamilo\CoreBundle\Entity\Resource\ResourceNode', 'node')
256
            ->innerJoin('node.links', 'links')
257
            ->innerJoin(
258
                $this->getClassName(),
259
                'resource',
260
                Join::WITH,
261
                'resource.course = links.course AND resource.resourceNode = node.id'
262
            )
263
            ->where('node.tool = :tool')
264
            ->andWhere('links.course = :course')
265
            //->where('link.cId = ?', $course->getId())
266
            //->where('node.cId = 0')
267
            //->orderBy('node');
268
            ->setParameters(
269
                [
270
                    'tool' => $tool,
271
                    'course' => $course,
272
                ]
273
            );
274
275
        if ($parent !== null) {
276
            $query->andWhere('node.parent = :parentId');
277
            $query->setParameter('parentId', $parent->getResourceNode()->getId());
278
        } else {
279
            $query->andWhere('node.parent IS NULL');
280
        }
281
282
        $query = $query->getQuery();
283
284
        /*$query = $this->getEntityManager()->createQueryBuilder()
285
            ->select('notebook')
286
            ->from('ChamiloNotebookBundle:CNotebook', 'notebook')
287
            ->innerJoin('notebook.resourceNodes', 'node')
288
            //->innerJoin('node.links', 'link')
289
            ->where('node.tool = :tool')
290
            //->where('link.cId = ?', $course->getId())
291
            //->where('node.cId = 0')
292
            //->orderBy('node');
293
            ->setParameters(array(
294
                    'tool'=> 'notebook'
295
                )
296
            )
297
            ->getQuery()
298
        ;*/
299
300
        return $query->getResult();
301
    }
302
303
    /**
304
     * @param string $tool
305
     *
306
     * @return Tool|null
307
     */
308
    public function getTool($tool)
309
    {
310
        return $this
311
            ->getEntityManager()
312
            ->getRepository('ChamiloCoreBundle:Tool')
313
            ->findOneBy(['name' => $tool]);
314
    }
315
}
316