Passed
Push — master ( f8f106...a015d1 )
by Julito
08:38
created

CDocumentRepository::getResourceSettings()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 14
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 9
nc 1
nop 0
dl 0
loc 14
rs 9.9666
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
/* For licensing terms, see /license.txt */
6
7
namespace Chamilo\CourseBundle\Repository;
8
9
use Chamilo\CoreBundle\Entity\Course;
10
use Chamilo\CoreBundle\Entity\ResourceLink;
11
use Chamilo\CoreBundle\Entity\ResourceNode;
12
use Chamilo\CoreBundle\Entity\Session;
13
use Chamilo\CoreBundle\Entity\User;
14
use Chamilo\CoreBundle\Repository\ResourceRepository;
15
use Chamilo\CourseBundle\Entity\CDocument;
16
use Chamilo\CourseBundle\Entity\CGroup;
17
use Doctrine\ORM\QueryBuilder;
18
use Doctrine\Persistence\ManagerRegistry;
19
use Symfony\Component\Form\FormInterface;
20
21
final class CDocumentRepository extends ResourceRepository
22
{
23
    public function __construct(ManagerRegistry $registry)
24
    {
25
        parent::__construct($registry, CDocument::class);
26
    }
27
28
    /*public function getResources(User $user, ResourceNode $parentNode, Course $course = null, Session $session = null, CGroup $group = null): QueryBuilder
29
    {
30
        return $this->getResourcesByCourse($course, $session, $group, $parentNode);
31
    }*/
32
33
    public function setResourceProperties(FormInterface $form, Course $course, Session $session, string $fileType): void
34
    {
35
        $newResource = $form->getData();
36
        $newResource
37
            //->setCourse($course)
38
            //->setSession($session)
39
            ->setFiletype($fileType)
40
            //->setTitle($title) // already added in $form->getData()
41
            ->setReadonly(false)
42
        ;
43
44
        //return $newResource;
45
    }
46
47
    public function getParent(CDocument $document): ?CDocument
48
    {
49
        $resourceParent = $document->getResourceNode()->getParent();
50
51
        if (null !== $resourceParent) {
52
            $criteria = [
53
                'resourceNode' => $resourceParent->getId(),
54
            ];
55
56
            return $this->findOneBy($criteria);
57
        }
58
59
        return null;
60
    }
61
62
    public function getFolderSize(ResourceNode $resourceNode, Course $course, Session $session = null): int
63
    {
64
        return $this->getResourceNodeRepository()->getSize($resourceNode, $this->getResourceType(), $course, $session);
65
    }
66
67
    /**
68
     * @return CDocument[]
69
     */
70
    public function findDocumentsByAuthor(int $userId)
71
    {
72
        $qb = $this->createQueryBuilder('d');
73
        $query = $qb
74
            ->innerJoin('d.resourceNode', 'node')
75
            ->innerJoin('node.resourceLinks', 'l')
76
            ->where('l.user = :user')
77
            ->andWhere('l.visibility <> :visibility')
78
            ->setParameters([
79
                'user' => $userId,
80
                'visibility' => ResourceLink::VISIBILITY_DELETED,
81
            ])
82
            ->getQuery()
83
        ;
84
85
        return $query->getResult();
86
    }
87
88
    public function countUserDocuments(User $user, Course $course, Session $session = null, CGroup $group = null): int
89
    {
90
        $qb = $this->getResourcesByCourseLinkedToUser($user, $course, $session, $group);
91
92
        // Add "not deleted" filters.
93
        $qb->select('count(resource)');
94
95
        $this->addFileTypeQueryBuilder('file', $qb);
96
97
        return $this->getCount($qb);
98
    }
99
100
    protected function addFileTypeQueryBuilder(string $fileType, QueryBuilder $qb = null): QueryBuilder
101
    {
102
        $qb = $this->getOrCreateQueryBuilder($qb);
103
        $qb
104
            ->andWhere('resource.fileType :type')
105
            ->setParameter('type', $fileType)
106
        ;
107
108
        return $qb;
109
    }
110
}
111