Passed
Push — master ( 9b28ce...1fed75 )
by Julito
11:04
created

CDocumentRepository   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 107
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 44
c 0
b 0
f 0
dl 0
loc 107
rs 10
wmc 9

8 Methods

Rating   Name   Duplication   Size   Complexity  
A getResourceSettings() 0 14 1
A setResourceProperties() 0 9 1
A countUserDocuments() 0 10 1
A __construct() 0 3 1
A getParent() 0 14 2
A addFileTypeQueryBuilder() 0 9 1
A getFolderSize() 0 3 1
A findDocumentsByAuthor() 0 18 1
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\Component\Resource\Settings;
10
use Chamilo\CoreBundle\Entity\Course;
11
use Chamilo\CoreBundle\Entity\ResourceLink;
12
use Chamilo\CoreBundle\Entity\ResourceNode;
13
use Chamilo\CoreBundle\Entity\Session;
14
use Chamilo\CoreBundle\Entity\User;
15
use Chamilo\CoreBundle\Repository\GridInterface;
16
use Chamilo\CoreBundle\Repository\ResourceRepository;
17
use Chamilo\CourseBundle\Entity\CDocument;
18
use Chamilo\CourseBundle\Entity\CGroup;
19
use Doctrine\ORM\QueryBuilder;
20
use Doctrine\Persistence\ManagerRegistry;
21
use Symfony\Component\Form\FormInterface;
22
23
final class CDocumentRepository extends ResourceRepository implements GridInterface
24
{
25
    public function __construct(ManagerRegistry $registry)
26
    {
27
        parent::__construct($registry, CDocument::class);
28
    }
29
30
    /*public function getResources(User $user, ResourceNode $parentNode, Course $course = null, Session $session = null, CGroup $group = null): QueryBuilder
31
    {
32
        return $this->getResourcesByCourse($course, $session, $group, $parentNode);
33
    }*/
34
35
    public function getResourceSettings(): Settings
36
    {
37
        $settings = parent::getResourceSettings();
38
39
        $settings
40
            ->setAllowNodeCreation(true)
41
            ->setAllowResourceCreation(true)
42
            ->setAllowResourceUpload(true)
43
            ->setAllowDownloadAll(true)
44
            ->setAllowDiskSpace(true)
45
            ->setAllowToSaveEditorToResourceFile(true)
46
        ;
47
48
        return $settings;
49
    }
50
51
    public function setResourceProperties(FormInterface $form, Course $course, Session $session, string $fileType): void
52
    {
53
        $newResource = $form->getData();
54
        $newResource
55
            //->setCourse($course)
56
            //->setSession($session)
57
            ->setFiletype($fileType)
58
            //->setTitle($title) // already added in $form->getData()
59
            ->setReadonly(false)
60
        ;
61
62
        //return $newResource;
63
    }
64
65
    public function getParent(CDocument $document): ?CDocument
66
    {
67
        $resourceParent = $document->getResourceNode()->getParent();
68
69
        if (null !== $resourceParent) {
70
            $resourceParentId = $resourceParent->getId();
71
            $criteria = [
72
                'resourceNode' => $resourceParentId,
73
            ];
74
75
            return $this->findOneBy($criteria);
76
        }
77
78
        return null;
79
    }
80
81
    public function getFolderSize(ResourceNode $resourceNode, Course $course, Session $session = null): int
82
    {
83
        return $this->getResourceNodeRepository()->getSize($resourceNode, $this->getResourceType(), $course, $session);
84
    }
85
86
    /**
87
     * @return CDocument[]
88
     */
89
    public function findDocumentsByAuthor(int $userId)
90
    {
91
        $repo = $this->repository;
92
93
        $qb = $repo->createQueryBuilder('d');
94
        $query = $qb
95
            ->innerJoin('d.resourceNode', 'node')
96
            ->innerJoin('r.resourceLinks', 'l')
97
            ->where('l.user = :user')
98
            ->andWhere('l.visibility <> :visibility')
99
            ->setParameters([
100
                'user' => $userId,
101
                'visibility' => ResourceLink::VISIBILITY_DELETED,
102
            ])
103
            ->getQuery()
104
        ;
105
106
        return $query->getResult();
107
    }
108
109
    public function countUserDocuments(User $user, Course $course, Session $session = null, CGroup $group = null): int
110
    {
111
        $qb = $this->getResourcesByCourseLinkedToUser($user, $course, $session, $group);
112
113
        // Add "not deleted" filters.
114
        $qb->select('count(resource)');
115
116
        $this->addFileTypeQueryBuilder('file', $qb);
117
118
        return $this->getCount($qb);
119
    }
120
121
    protected function addFileTypeQueryBuilder(string $fileType, QueryBuilder $qb = null): QueryBuilder
122
    {
123
        $qb = $this->getOrCreateQueryBuilder($qb);
124
        $qb
125
            ->andWhere('resource.fileType :type')
126
            ->setParameter('type', $fileType)
127
        ;
128
129
        return $qb;
130
    }
131
}
132