Passed
Push — master ( 258428...ddae1a )
by Julito
11:33
created

CDocumentRepository::setResourceProperties()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 4
dl 0
loc 9
rs 10
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
20
final class CDocumentRepository extends ResourceRepository
21
{
22
    public function __construct(ManagerRegistry $registry)
23
    {
24
        parent::__construct($registry, CDocument::class);
25
    }
26
27
    /*public function getResources(User $user, ResourceNode $parentNode, Course $course = null, Session $session = null, CGroup $group = null): QueryBuilder
28
    {
29
        return $this->getResourcesByCourse($course, $session, $group, $parentNode);
30
    }*/
31
32
    public function getParent(CDocument $document): ?CDocument
33
    {
34
        $resourceParent = $document->getResourceNode()->getParent();
35
36
        if (null !== $resourceParent) {
37
            $criteria = [
38
                'resourceNode' => $resourceParent->getId(),
39
            ];
40
41
            return $this->findOneBy($criteria);
42
        }
43
44
        return null;
45
    }
46
47
    public function getFolderSize(ResourceNode $resourceNode, Course $course, Session $session = null): int
48
    {
49
        return $this->getResourceNodeRepository()->getSize($resourceNode, $this->getResourceType(), $course, $session);
50
    }
51
52
    /**
53
     * @return CDocument[]
54
     */
55
    public function findDocumentsByAuthor(int $userId)
56
    {
57
        $qb = $this->createQueryBuilder('d');
58
        $query = $qb
59
            ->innerJoin('d.resourceNode', 'node')
60
            ->innerJoin('node.resourceLinks', 'l')
61
            ->where('l.user = :user')
62
            ->andWhere('l.visibility <> :visibility')
63
            ->setParameters([
64
                'user' => $userId,
65
                'visibility' => ResourceLink::VISIBILITY_DELETED,
66
            ])
67
            ->getQuery()
68
        ;
69
70
        return $query->getResult();
71
    }
72
73
    public function countUserDocuments(User $user, Course $course, Session $session = null, CGroup $group = null): int
74
    {
75
        $qb = $this->getResourcesByCourseLinkedToUser($user, $course, $session, $group);
76
77
        // Add "not deleted" filters.
78
        $qb->select('count(resource)');
79
80
        $this->addFileTypeQueryBuilder('file', $qb);
81
82
        return $this->getCount($qb);
83
    }
84
85
    protected function addFileTypeQueryBuilder(string $fileType, QueryBuilder $qb = null): QueryBuilder
86
    {
87
        $qb = $this->getOrCreateQueryBuilder($qb);
88
        $qb
89
            ->andWhere('resource.fileType :type')
90
            ->setParameter('type', $fileType)
91
        ;
92
93
        return $qb;
94
    }
95
}
96