Passed
Push — master ( 6f8b91...26ffea )
by Julito
10:53
created

CDocumentRepository::getResources()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

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