Completed
Push — master ( 7daaad...a8dd9d )
by Julito
09:46
created

CDocumentRepository::getTitleColumn()   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 Symfony\Component\Form\FormInterface;
21
use Symfony\Component\HttpFoundation\File\UploadedFile;
22
23
/**
24
 * Class CDocumentRepository.
25
 */
26
final class CDocumentRepository extends ResourceRepository implements GridInterface, UploadInterface
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 getResourceSettings(): Settings
34
    {
35
        $settings = parent::getResourceSettings();
36
37
        $settings
38
            ->setAllowNodeCreation(true)
39
            ->setAllowResourceCreation(true)
40
            ->setAllowResourceUpload(true)
41
            ->setAllowDownloadAll(true)
42
            ->setAllowDiskSpace(true)
43
            ->setAllowToSaveEditorToResourceFile(true)
44
        ;
45
46
        return $settings;
47
    }
48
49
    public function saveUpload(UploadedFile $file)
50
    {
51
        $resource = new CDocument();
52
        $resource
53
            ->setFiletype('file')
54
            ->setSize($file->getSize())
55
            ->setTitle($file->getClientOriginalName())
56
        ;
57
58
        return $resource;
59
    }
60
61
    public function setResourceProperties(FormInterface $form, $course, $session, $fileType)
62
    {
63
        $newResource = $form->getData();
64
        $newResource
65
            ->setCourse($course)
66
            ->setSession($session)
67
            ->setFiletype($fileType)
68
            //->setTitle($title) // already added in $form->getData()
69
            ->setReadonly(false)
70
        ;
71
72
        return $newResource;
73
    }
74
75
    /**
76
     * @return string
77
     */
78
    public function getDocumentUrl(CDocument $document)
79
    {
80
        // There are no URL for folders.
81
        if ('folder' === $document->getFiletype()) {
82
            return '';
83
        }
84
        $file = $document->getResourceNode()->getResourceFile();
85
86
        if (null === $file) {
87
            return '';
88
        }
89
90
        $params = [
91
            'course' => $document->getCourse()->getCode(),
92
            'id' => ltrim($document->getPath(), '/'),
93
            'tool' => 'document',
94
            'type' => $document->getResourceNode()->getResourceType()->getName(),
95
        ];
96
97
        return $this->getRouter()->generate(
98
            'chamilo_core_resource_view_file',
99
            $params
100
        );
101
    }
102
103
    /**
104
     * @return CDocument|null
105
     */
106
    public function getParent(CDocument $document)
107
    {
108
        $resourceParent = $document->getResourceNode()->getParent();
109
110
        if (null !== $resourceParent) {
111
            $resourceParentId = $resourceParent->getId();
112
            $criteria = [
113
                'resourceNode' => $resourceParentId,
114
            ];
115
116
            return $this->findOneBy($criteria);
117
        }
118
119
        return null;
120
    }
121
122
    /**
123
     * @param int    $courseId
124
     * @param string $path
125
     *
126
     * @throws \Doctrine\ORM\NonUniqueResultException
127
     */
128
    public function getFolderSize($courseId, $path)
129
    {
130
        $path = str_replace('_', '\_', $path);
131
        $addedSlash = '/' === $path ? '' : '/';
132
133
        $repo = $this->getRepository();
134
        $qb = $repo->createQueryBuilder('d');
135
        $query = $qb
136
            ->select('SUM(d.size)')
137
            ->innerJoin('d.resourceNode', 'r')
138
            ->innerJoin('r.resourceLinks', 'l')
139
            ->where('d.path LIKE :path')
140
            ->andWhere('d.path NOT LIKE :deleted')
141
            ->andWhere('d.path NOT LIKE :extra_path ')
142
            ->andWhere('l.visibility <> :visibility')
143
            ->andWhere('d.course = :course')
144
            ->setParameters([
145
                'path' => $path.$addedSlash.'%',
146
                'extra_path' => $path.$addedSlash.'%/%',
147
                'course' => $courseId,
148
                'deleted' => '%_DELETED_%',
149
                'visibility' => ResourceLink::VISIBILITY_DELETED,
150
            ])
151
            ->getQuery();
152
153
        return $query->getSingleScalarResult();
154
    }
155
156
    /**
157
     * @param int $courseId
158
     * @param int $groupId
159
     * @param int $sessionId
160
     *
161
     * @throws \Doctrine\ORM\NonUniqueResultException
162
     */
163
    public function getTotalSpace($courseId, $groupId = null, $sessionId = null)
164
    {
165
        $repo = $this->getRepository();
166
        $groupId = empty($groupId) ? null : $groupId;
167
        $sessionId = empty($sessionId) ? null : $sessionId;
168
169
        $qb = $repo->createQueryBuilder('d');
170
        $query = $qb
171
            ->select('SUM(d.size)')
172
            ->innerJoin('d.resourceNode', 'r')
173
            ->innerJoin('r.resourceLinks', 'l')
174
            ->where('l.course = :course')
175
            ->andWhere('l.group = :group')
176
            ->andWhere('l.session = :session')
177
            ->andWhere('l.visibility <> :visibility')
178
            ->setParameters([
179
                'course' => $courseId,
180
                'group' => $groupId,
181
                'session' => $sessionId,
182
                'visibility' => ResourceLink::VISIBILITY_DELETED,
183
            ])
184
            ->getQuery();
185
186
        return $query->getSingleScalarResult();
187
    }
188
189
    /**
190
     * @param int $userId
191
     *
192
     * @return array
193
     */
194
    public function getAllDocumentsByAuthor($userId)
195
    {
196
        $repo = $this->repository;
197
198
        $qb = $repo->createQueryBuilder('d');
199
        $query = $qb
200
            ->innerJoin('d.resourceNode', 'r')
201
            ->innerJoin('r.resourceLinks', 'l')
202
            ->where('l.user = :user')
203
            ->andWhere('l.visibility <> :visibility')
204
            ->setParameters([
205
                'user' => $userId,
206
                'visibility' => ResourceLink::VISIBILITY_DELETED,
207
            ])
208
            ->getQuery();
209
210
        return $query->getResult();
211
    }
212
213
    public function getResourceFormType(): string
214
    {
215
        return CDocumentType::class;
216
    }
217
}
218