Passed
Push — master ( 76abd2...ab5d59 )
by Julito
10:01
created

ResourceRepository::getEntityManager()   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 0
dl 0
loc 3
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
16
use Chamilo\UserBundle\Entity\User;
17
use Doctrine\ORM\EntityManager;
18
use Doctrine\ORM\Query\Expr\Join;
19
20
/**
21
 * Class ResourceRepository.
22
 *
23
 * @package Chamilo\CoreBundle\Entity
24
 */
25
class ResourceRepository
26
{
27
    /**
28
     * @var EntityManager
29
     */
30
    protected $entityManager;
31
32
    /**
33
     * @return EntityManager
34
     */
35
    public function getEntityManager()
36
    {
37
        return $this->entityManager;
38
    }
39
40
    /**
41
     * Creates a ResourceNode.
42
     *
43
     * @param AbstractResource $resource
44
     * @param User             $creator
45
     * @param AbstractResource $parent
46
     *
47
     * @return ResourceNode
48
     */
49
    public function addResourceNode(
50
        AbstractResource $resource,
51
        User $creator,
52
        AbstractResource $parent = null
53
    ): ResourceNode {
54
        $resourceNode = new ResourceNode();
55
56
        $tool = $this->getTool($resource->getToolName());
57
        $resourceType = $this->getEntityManager()->getRepository('ChamiloCoreBundle:Resource\ResourceType')->findOneBy(
58
            ['name' => $resource->getToolName()]
59
        );
60
        $resourceNode
61
            ->setName($resource->getResourceName())
62
            ->setCreator($creator)
63
            ->setResourceType($resourceType);
64
65
        if ($parent !== null) {
66
            $resourceNode->setParent($parent->getResourceNode());
67
        }
68
69
        $this->getEntityManager()->persist($resourceNode);
70
        $this->getEntityManager()->flush();
71
72
        return $resourceNode;
73
    }
74
75
    public function addResourceMedia(ResourceNode $resourceNode, $file)
0 ignored issues
show
Unused Code introduced by
The parameter $resourceNode is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

75
    public function addResourceMedia(/** @scrutinizer ignore-unused */ ResourceNode $resourceNode, $file)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $file is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

75
    public function addResourceMedia(ResourceNode $resourceNode, /** @scrutinizer ignore-unused */ $file)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
76
    {
77
    }
78
79
    /**
80
     * @param ResourceNode $resourceNode
81
     *
82
     * @return ResourceLink
83
     */
84
    public function addResourceOnlyToMe(ResourceNode $resourceNode): ResourceLink
85
    {
86
        $resourceLink = new ResourceLink();
87
        $resourceLink
88
            ->setResourceNode($resourceNode)
89
            ->setPrivate(true);
90
91
        $this->getEntityManager()->persist($resourceLink);
92
        $this->getEntityManager()->flush();
93
94
        return $resourceLink;
95
    }
96
97
    /**
98
     * @param ResourceNode  $resourceNode
99
     * @param ResourceRight $right
100
     *
101
     * @return ResourceLink
102
     */
103
    public function addResourceToEveryone(ResourceNode $resourceNode, ResourceRight $right): ResourceLink
104
    {
105
        $resourceLink = new ResourceLink();
106
        $resourceLink
107
            ->setResourceNode($resourceNode)
108
            ->addResourceRight($right)
109
        ;
110
111
        $this->getEntityManager()->persist($resourceLink);
112
        $this->getEntityManager()->flush();
113
114
        return $resourceLink;
115
    }
116
117
    /**
118
     * @param ResourceNode  $resourceNode
119
     * @param Course        $course
120
     * @param ResourceRight $right
121
     *
122
     * @return ResourceLink
123
     */
124
    public function addResourceToCourse(ResourceNode $resourceNode, Course $course, ResourceRight $right): ResourceLink
125
    {
126
        $resourceLink = new ResourceLink();
127
        $resourceLink
128
            ->setResourceNode($resourceNode)
129
            ->setCourse($course)
130
            ->addResourceRight($right);
131
        $this->getEntityManager()->persist($resourceLink);
132
        $this->getEntityManager()->flush();
133
134
        return $resourceLink;
135
    }
136
137
    /**
138
     * @param ResourceNode $resourceNode
139
     * @param User         $toUser
140
     *
141
     * @return ResourceLink
142
     */
143
    public function addResourceToUser(ResourceNode $resourceNode, User $toUser): ResourceLink
144
    {
145
        $resourceLink = $this->addResourceNodeToUser($resourceNode, $toUser);
146
        $this->getEntityManager()->persist($resourceLink);
147
148
        return $resourceLink;
149
    }
150
151
    /**
152
     * @param ResourceNode $resourceNode
153
     * @param array        $userList     User id list
154
     */
155
    public function addResourceToUserList(ResourceNode $resourceNode, array $userList)
156
    {
157
        $em = $this->getEntityManager();
158
159
        if (!empty($userList)) {
160
            foreach ($userList as $userId) {
161
                $toUser = $em->getRepository('ChamiloUserBundle:User')->find($userId);
162
163
                $resourceLink = $this->addResourceNodeToUser($resourceNode, $toUser);
164
                $em->persist($resourceLink);
165
            }
166
        }
167
    }
168
169
    /**
170
     * @param ResourceNode $resourceNode
171
     * @param User         $toUser
172
     *
173
     * @return ResourceLink
174
     */
175
    public function addResourceNodeToUser(ResourceNode $resourceNode, User $toUser): ResourceLink
176
    {
177
        $resourceLink = new ResourceLink();
178
        $resourceLink
179
            ->setResourceNode($resourceNode)
180
            ->setUser($toUser);
181
182
        return $resourceLink;
183
    }
184
185
    /**
186
     * @param ResourceNode  $resourceNode
187
     * @param Course        $course
188
     * @param Session       $session
189
     * @param ResourceRight $right
190
     *
191
     * @return ResourceLink
192
     */
193
    public function addResourceToSession(
194
        ResourceNode $resourceNode,
195
        Course $course,
196
        Session $session,
197
        ResourceRight $right
198
    ) {
199
        $resourceLink = $this->addResourceToCourse(
200
            $resourceNode,
201
            $course,
202
            $right
203
        );
204
        $resourceLink->setSession($session);
205
        $this->getEntityManager()->persist($resourceLink);
206
207
        return $resourceLink;
208
    }
209
210
    /**
211
     * @param ResourceNode  $resourceNode
212
     * @param Course        $course
213
     * @param CGroupInfo    $group
214
     * @param ResourceRight $right
215
     *
216
     * @return ResourceLink
217
     */
218
    public function addResourceToCourseGroup(
219
        ResourceNode $resourceNode,
220
        Course $course,
221
        CGroupInfo $group,
222
        ResourceRight $right
223
    ) {
224
        $resourceLink = $this->addResourceToCourse(
225
            $resourceNode,
226
            $course,
227
            $right
228
        );
229
        $resourceLink->setGroup($group);
230
        $this->getEntityManager()->persist($resourceLink);
231
232
        return $resourceLink;
233
    }
234
235
    /**
236
     * @param ResourceNode  $resourceNode
237
     * @param Usergroup     $group
238
     * @param ResourceRight $right
239
     *
240
     * @return ResourceLink
241
     */
242
    public function addResourceToGroup(
243
        ResourceNode $resourceNode,
244
        Usergroup $group,
245
        ResourceRight $right
246
    ) {
247
        $resourceLink = new ResourceLink();
248
        $resourceLink
249
            ->setResourceNode($resourceNode)
250
            ->setUserGroup($group)
251
            ->addResourceRight($right);
252
253
        return $resourceLink;
254
    }
255
256
    /**
257
     * @param Course           $course
258
     * @param Tool             $tool
259
     * @param AbstractResource $parent
260
     *
261
     * @return ResourceLink
262
     */
263
    public function getResourceByCourse(Course $course, Tool $tool, AbstractResource $parent = null)
264
    {
265
        $query = $this->getEntityManager()->createQueryBuilder()
266
            ->select('resource')
267
            ->from('Chamilo\CoreBundle\Entity\Resource\ResourceNode', 'node')
268
            ->innerJoin('node.links', 'links')
269
            ->innerJoin(
270
                $this->getClassName(),
0 ignored issues
show
Bug introduced by
The method getClassName() does not exist on Chamilo\CoreBundle\Repository\ResourceRepository. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

270
                $this->/** @scrutinizer ignore-call */ 
271
                       getClassName(),

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
271
                'resource',
272
                Join::WITH,
273
                'resource.course = links.course AND resource.resourceNode = node.id'
274
            )
275
            ->where('node.tool = :tool')
276
            ->andWhere('links.course = :course')
277
            //->where('link.cId = ?', $course->getId())
278
            //->where('node.cId = 0')
279
            //->orderBy('node');
280
            ->setParameters(
281
                [
282
                    'tool' => $tool,
283
                    'course' => $course,
284
                ]
285
            );
286
287
        if ($parent !== null) {
288
            $query->andWhere('node.parent = :parentId');
289
            $query->setParameter('parentId', $parent->getResourceNode()->getId());
290
        } else {
291
            $query->andWhere('node.parent IS NULL');
292
        }
293
294
        $query = $query->getQuery();
295
296
        /*$query = $this->getEntityManager()->createQueryBuilder()
297
            ->select('notebook')
298
            ->from('ChamiloNotebookBundle:CNotebook', 'notebook')
299
            ->innerJoin('notebook.resourceNodes', 'node')
300
            //->innerJoin('node.links', 'link')
301
            ->where('node.tool = :tool')
302
            //->where('link.cId = ?', $course->getId())
303
            //->where('node.cId = 0')
304
            //->orderBy('node');
305
            ->setParameters(array(
306
                    'tool'=> 'notebook'
307
                )
308
            )
309
            ->getQuery()
310
        ;*/
311
312
        return $query->getResult();
313
    }
314
315
    /**
316
     * @param string $tool
317
     *
318
     * @return Tool|null
319
     */
320
    public function getTool($tool)
321
    {
322
        return $this
323
            ->getEntityManager()
324
            ->getRepository('ChamiloCoreBundle:Tool')
325
            ->findOneBy(['name' => $tool]);
326
    }
327
}
328