Completed
Push — master ( 7daaad...a8dd9d )
by Julito
09:46
created

CShortcutRepository::removeShortCut()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 5
nc 2
nop 1
dl 0
loc 7
rs 10
c 1
b 0
f 0
1
<?php
2
3
/* For licensing terms, see /license.txt */
4
5
namespace Chamilo\CourseBundle\Repository;
6
7
use Chamilo\CoreBundle\Entity\AbstractResource;
8
use Chamilo\CoreBundle\Entity\Course;
9
use Chamilo\CoreBundle\Entity\ResourceNode;
10
use Chamilo\CoreBundle\Entity\Session;
11
use Chamilo\CoreBundle\Entity\User;
12
use Chamilo\CoreBundle\Repository\ResourceRepository;
13
use Chamilo\CourseBundle\Entity\CGroup;
14
use Chamilo\CourseBundle\Entity\CShortcut;
15
use Doctrine\ORM\QueryBuilder;
16
use Symfony\Component\Form\FormInterface;
17
18
/**
19
 * Class CShortcutRepository.
20
 */
21
final class CShortcutRepository extends ResourceRepository
22
{
23
    private function getShortcutFromResource(AbstractResource $resource): ?CShortcut
24
    {
25
        $repo = $this->getRepository();
26
        $criteria = ['shortCutNode' => $resource->getResourceNode()];
27
28
        return $repo->findOneBy($criteria);
29
    }
30
31
    public function addShortCut(AbstractResource $resource, $parent, Course $course, Session $session = null)
32
    {
33
        $em = $this->getRepository()->getEntityManager();
34
        $shortcut = $this->getShortcutFromResource($resource);
35
36
        if (null === $shortcut) {
37
            $shortcut = new CShortcut();
38
            $shortcut
39
                ->setName($resource->getResourceName())
40
                ->setShortCutNode($resource->getResourceNode())
41
                ->setParent($parent)
42
                ->addCourseLink($course, $session);
43
            $em->persist($shortcut);
44
            $em->flush();
45
        }
46
    }
47
48
    public function removeShortCut(AbstractResource $resource)
49
    {
50
        $em = $this->getRepository()->getEntityManager();
51
        $shortcut = $this->getShortcutFromResource($resource);
52
        if (null !== $shortcut) {
53
            $em->remove($shortcut);
54
            $em->flush();
55
        }
56
    }
57
58
    public function getResources(User $user, ResourceNode $parentNode, Course $course = null, Session $session = null, CGroup $group = null): QueryBuilder
59
    {
60
        $repo = $this->getRepository();
61
        $className = $repo->getClassName();
62
63
        $qb = $repo->getEntityManager()->createQueryBuilder()
64
            ->select('resource')
65
            ->from($className, 'resource')
66
            ->innerJoin(
67
                'resource.resourceNode',
68
                'node'
69
            )
70
            ->leftJoin('node.resourceFile', 'file')
71
            //->innerJoin('node.resourceLinks', 'links')
72
            //->where('node.resourceType = :type')
73
            //->setParameter('type',$type)
74
        ;
75
        /*$qb
76
            ->andWhere('links.visibility = :visibility')
77
            ->setParameter('visibility', ResourceLink::VISIBILITY_PUBLISHED)
78
        ;*/
79
80
        if (null !== $parentNode) {
81
            $qb->andWhere('node.parent = :parentNode');
82
            $qb->setParameter('parentNode', $parentNode);
83
        }
84
85
        return $qb;
86
    }
87
88
    public function setResourceProperties(FormInterface $form, $course, $session, $fileType)
89
    {
90
        $newResource = $form->getData();
91
        $newResource
92
            ->setCourse($course)
93
            ->setSession($session)
94
            ->setFiletype($fileType)
95
            //->setTitle($title) // already added in $form->getData()
96
            ->setReadonly(false)
97
        ;
98
99
        return $newResource;
100
    }
101
}
102