Passed
Push — master ( 447932...1a32cb )
by Julito
13:13
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 0
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\Entity;
5
6
use Chamilo\CoreBundle\Entity\Course;
7
use Chamilo\CoreBundle\Entity\Resource\ResourceLink;
8
use Chamilo\CoreBundle\Entity\Resource\ResourceRights;
9
use Chamilo\CoreBundle\Entity\Session;
10
use Chamilo\CoreBundle\Entity\Tool;
11
use Chamilo\CoreBundle\Entity\ToolResourceRights;
12
use Chamilo\CoreBundle\Entity\Usergroup;
13
use Chamilo\CourseBundle\Entity\CGroupInfo;
14
use Chamilo\UserBundle\Entity\Group;
15
use Chamilo\UserBundle\Entity\User;
16
use Chamilo\CoreBundle\Entity\Resource\AbstractResource;
17
use Chamilo\CoreBundle\Entity\Resource\ResourceNode;
18
use Doctrine\Common\Collections\ArrayCollection;
19
use Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository;
20
21
/**
22
 * Class NotebookRepository
23
 * @package Chamilo\NotebookBundle\Entity
24
 */
25
class ResourceRepository extends EntityRepository
26
{
27
    /**
28
     * Creates a ResourceNode
29
     *
30
     * @param AbstractResource $resource
31
     * @param User             $creator
32
     *
33
     * @return ResourceNode
34
     */
35
    public function addResourceNode(AbstractResource $resource, User $creator): ResourceNode
36
    {
37
        $resourceNode = new ResourceNode();
38
        $resourceNode
39
            ->setName($resource->getName())
40
            ->setCreator($creator)
41
            ->setTool($this->getTool());
42
43
        $this->getEntityManager()->persist($resourceNode);
44
        $this->getEntityManager()->flush();
45
46
        return $resourceNode;
47
    }
48
49
    /**
50
     * @param ResourceNode $resourceNode
51
     *
52
     * @return ResourceLink
53
     */
54
    public function addResourceOnlyToMe(ResourceNode $resourceNode)
55
    {
56
        $resourceLink = new ResourceLink();
57
        $resourceLink
58
            ->setResourceNode($resourceNode)
59
            ->setPrivate(true);
60
61
        $this->getEntityManager()->persist($resourceLink);
62
        $this->getEntityManager()->flush();
63
64
        return $resourceLink;
65
    }
66
67
    /**
68
     * @param ResourceNode   $resourceNode
69
     * @param ResourceRights $right
70
     *
71
     * @return ResourceLink
72
     */
73
    public function addResourceToEveryone(ResourceNode $resourceNode, ResourceRights $right)
74
    {
75
        $resourceLink = new ResourceLink();
76
        $resourceLink
77
            ->setResourceNode($resourceNode)
78
            ->addRight($right)
79
            ->setPublic(true);
80
81
        $this->getEntityManager()->persist($resourceLink);
82
        $this->getEntityManager()->flush();
83
84
        return $resourceLink;
85
    }
86
87
    /**
88
     * @param ResourceNode   $resourceNode
89
     * @param Course         $course
90
     * @param ResourceRights $right
91
     *
92
     * @return ResourceLink
93
     */
94
    public function addResourceToCourse(ResourceNode $resourceNode, Course $course, ResourceRights $right): ResourceLink
95
    {
96
        $resourceLink = new ResourceLink();
97
        $resourceLink
98
            ->setResourceNode($resourceNode)
99
            ->setCourse($course)
100
            ->addRight($right);
101
        $this->getEntityManager()->persist($resourceLink);
102
        $this->getEntityManager()->flush();
103
104
        return $resourceLink;
105
    }
106
107
    /**
108
     * @param ResourceNode $resourceNode
109
     * @param User         $toUser
110
     *
111
     * @return ResourceLink
112
     */
113
    public function addResourceToUser(ResourceNode $resourceNode, User $toUser): ResourceLink
114
    {
115
        $resourceLink = $this->addResourceNodeToUser($resourceNode, $toUser);
116
        $this->getEntityManager()->persist($resourceLink);
117
118
        return $resourceLink;
119
    }
120
121
    /**
122
     * @param ResourceNode $resourceNode
123
     * @param array        $userList User id list
124
     */
125
    public function addResourceToUserList(ResourceNode $resourceNode, $userList)
126
    {
127
        if (!empty($userList)) {
128
            foreach ($userList as $userId) {
129
                $toUser = $this->getEntityManager()->getRepository('ChamiloUserBundle:User')->find($userId);
130
131
                $resourceLink = $this->addResourceNodeToUser(
132
                    $resourceNode,
133
                    $toUser
134
                );
135
                $this->getEntityManager()->persist($resourceLink);
136
            }
137
        }
138
    }
139
140
    /**
141
     * @param ResourceNode $resourceNode
142
     * @param User         $toUser
143
     *
144
     * @return ResourceLink
145
     */
146
    public function addResourceNodeToUser(ResourceNode $resourceNode, User $toUser)
147
    {
148
        $resourceLink = new ResourceLink();
149
        $resourceLink
150
            ->setResourceNode($resourceNode)
151
            ->setUser($toUser);
152
153
        return $resourceLink;
154
    }
155
156
    /**
157
     * @param ResourceNode   $resourceNode
158
     * @param Course         $course
159
     * @param Session        $session
160
     * @param ResourceRights $right
161
     *
162
     * @return ResourceLink
163
     */
164
    public function addResourceToSession(
165
        ResourceNode $resourceNode,
166
        Course $course,
167
        Session $session,
168
        ResourceRights $right
169
    ) {
170
        $resourceLink = $this->addResourceToCourse(
171
            $resourceNode,
172
            $course,
173
            $right
174
        );
175
        $resourceLink->setSession($session);
176
        $this->getEntityManager()->persist($resourceLink);
177
178
        return $resourceLink;
179
    }
180
181
    /**
182
     * @param ResourceNode   $resourceNode
183
     * @param Course         $course
184
     * @param CGroupInfo     $group
185
     * @param ResourceRights $right
186
     *
187
     * @return ResourceLink
188
     */
189
    public function addResourceToCourseGroup(
190
        ResourceNode $resourceNode,
191
        Course $course,
192
        CGroupInfo $group,
193
        ResourceRights $right
194
    ) {
195
        $resourceLink = $this->addResourceToCourse(
196
            $resourceNode,
197
            $course,
198
            $right
199
        );
200
        $resourceLink->setGroup($group);
201
        $this->getEntityManager()->persist($resourceLink);
202
203
        return $resourceLink;
204
    }
205
206
    /**
207
     * @param ResourceNode $resourceNode
208
     * @param Usergroup $group
209
     * @param ResourceRights $right
210
     * @return ResourceLink
211
     */
212
    public function addResourceToGroup(
213
        ResourceNode $resourceNode,
214
        Usergroup $group,
215
        ResourceRights $right
216
    ) {
217
        $resourceLink = new ResourceLink();
218
        $resourceLink
219
            ->setResourceNode($resourceNode)
220
            ->setUserGroup($group)
221
            ->addRight($right);
222
223
        return $resourceLink;
224
    }
225
226
    /**
227
     * @param Course $course
228
     * @return ResourceLink
229
     */
230
    public function getResourceByCourse(Course $course)
231
    {
232
        $query = $this->getEntityManager()->createQueryBuilder()
233
            ->select('resource')
234
            ->from('Chamilo\CoreBundle\Entity\Resource\ResourceNode', 'node')
235
            ->innerJoin('node.links', 'links')
236
            ->innerJoin($this->getClassName(), 'resource')
237
            ->where('node.tool = :tool')
238
            ->andWhere('links.course = :course')
239
            //->where('link.cId = ?', $course->getId())
240
            //->where('node.cId = 0')
241
            //->orderBy('node');
242
            ->setParameters(
243
                array(
244
                    'tool' => $this->getTool(),
245
                    'course' => $course,
246
                )
247
            )
248
            ->getQuery();
249
250
        /*$query = $this->getEntityManager()->createQueryBuilder()
251
            ->select('notebook')
252
            ->from('ChamiloNotebookBundle:CNotebook', 'notebook')
253
            ->innerJoin('notebook.resourceNodes', 'node')
254
            //->innerJoin('node.links', 'link')
255
            ->where('node.tool = :tool')
256
            //->where('link.cId = ?', $course->getId())
257
            //->where('node.cId = 0')
258
            //->orderBy('node');
259
            ->setParameters(array(
260
                    'tool'=> 'notebook'
261
                )
262
            )
263
            ->getQuery()
264
        ;*/
265
266
        return $query->getResult();
267
    }
268
269
    /**
270
     * @return Tool
271
     */
272
    public function getTool()
273
    {
274
        return $this
275
            ->getEntityManager()
276
            ->getRepository('ChamiloCoreBundle:Tool')
277
            ->findOneBy(['name' => $this->getToolName()]);
278
    }
279
}
280