Passed
Push — master ( e80e7a...4357b6 )
by Julito
11:11 queued 02:04
created

CDocumentRepository::__construct()   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 1
dl 0
loc 3
rs 10
c 0
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\Component\Resource\Settings;
8
use Chamilo\CoreBundle\Entity\Course;
9
use Chamilo\CoreBundle\Entity\ResourceLink;
10
use Chamilo\CoreBundle\Entity\ResourceNode;
11
use Chamilo\CoreBundle\Entity\Session;
12
use Chamilo\CoreBundle\Entity\User;
13
use Chamilo\CoreBundle\Form\Resource\CDocumentType;
14
use Chamilo\CoreBundle\Repository\GridInterface;
15
use Chamilo\CoreBundle\Repository\ResourceRepository;
16
use Chamilo\CoreBundle\Repository\UploadInterface;
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
use Symfony\Component\HttpFoundation\File\UploadedFile;
23
24
/**
25
 * Class CDocumentRepository.
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)
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, $session, $fileType)
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
    /**
82
     * @return string
83
     */
84
    public function getDocumentUrl(CDocument $document, $courseId, $sessionId)
85
    {
86
        // There are no URL for folders.
87
        if ('folder' === $document->getFiletype()) {
88
            return '';
89
        }
90
91
        $file = $document->getResourceNode()->getResourceFile();
92
93
        if (null === $file) {
94
            return '';
95
        }
96
97
        $params = [
98
            'cid' => $courseId,
99
            'sid' => $sessionId,
100
            'id' => $document->getResourceNode()->getId(),
101
            'tool' => 'document',
102
            'type' => $document->getResourceNode()->getResourceType()->getName(),
103
        ];
104
105
        return $this->getRouter()->generate('chamilo_core_resource_view', $params);
106
    }
107
108
    /**
109
     * @return CDocument|null
110
     */
111
    public function getParent(CDocument $document)
112
    {
113
        $resourceParent = $document->getResourceNode()->getParent();
114
115
        if (null !== $resourceParent) {
116
            $resourceParentId = $resourceParent->getId();
117
            $criteria = [
118
                'resourceNode' => $resourceParentId,
119
            ];
120
121
            return $this->findOneBy($criteria);
122
        }
123
124
        return null;
125
    }
126
127
    public function getFolderSize(ResourceNode $resourceNode, Course $course, Session $session = null): int
128
    {
129
        return $this->getResourceNodeRepository()->getSize($resourceNode, $this->getResourceType(), $course, $session);
130
    }
131
132
    /**
133
     * @param int $userId
134
     *
135
     * @return array
136
     */
137
    public function getAllDocumentsByAuthor($userId)
138
    {
139
        $repo = $this->repository;
140
141
        $qb = $repo->createQueryBuilder('d');
142
        $query = $qb
143
            ->innerJoin('d.resourceNode', 'r')
144
            ->innerJoin('r.resourceLinks', 'l')
145
            ->where('l.user = :user')
146
            ->andWhere('l.visibility <> :visibility')
147
            ->setParameters([
148
                'user' => $userId,
149
                'visibility' => ResourceLink::VISIBILITY_DELETED,
150
            ])
151
            ->getQuery();
152
153
        return $query->getResult();
154
    }
155
156
    public function findOneByTitle($title, $parentNode, $course, $session, $group = null)
157
    {
158
        $qb = $this->getResourcesByCourse($course, $session, $group, $parentNode);
159
        $qb
160
            ->andWhere('resource.title = :title')
161
            ->setParameter('title', $title)
162
            ->setMaxResults(1)
163
        ;
164
165
        return $qb->getQuery()->getOneOrNullResult();
166
    }
167
168
    public function getResourceFormType(): string
169
    {
170
        return CDocumentType::class;
171
    }
172
}
173