Passed
Push — master ( 15dae9...698027 )
by Julito
12:28
created

ResourceRepository::addResourceOnlyToMe()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

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