Passed
Pull Request — master (#5674)
by
unknown
07:54
created

ResourceFileRepository::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
rs 10
c 1
b 1
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
/* For licensing terms, see /license.txt */
6
7
namespace Chamilo\CoreBundle\Repository;
8
9
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
10
use Doctrine\Persistence\ManagerRegistry;
11
use Chamilo\CoreBundle\Entity\ResourceFile;
12
13
class ResourceFileRepository extends ServiceEntityRepository
14
{
15
    public function __construct(ManagerRegistry $registry)
16
    {
17
        parent::__construct($registry, ResourceFile::class);
18
    }
19
20
    public function searchFiles(string $search, int $offset, int $limit): array
21
    {
22
        $uuid = '';
23
        if (preg_match('/[a-f0-9]{32}|[a-f0-9\-]{36}/i', $search, $matches)) {
24
            $uuid = strtoupper(str_replace('-', '', $matches[0]));
25
        }
26
27
        $uuidBinary = pack('H*', $uuid);
28
29
        $queryBuilder = $this->createQueryBuilder('rf')
30
            ->leftJoin('rf.resourceNode', 'rn')
31
            ->leftJoin('rn.resourceLinks', 'rl')
32
            ->leftJoin('rl.course', 'c')
33
            ->leftJoin('rl.user', 'u')
34
            ->addSelect('rn', 'rl', 'c', 'u');
35
36
        if ($search) {
37
            $queryBuilder->where('rf.title LIKE :search')
38
                ->orWhere('rf.originalName LIKE :search')
39
                ->orWhere('c.title LIKE :search')
40
                ->orWhere('u.username LIKE :search')
41
                ->orWhere('rn.uuid = :uuid')
42
                ->setParameter('search', '%' . $search . '%')
43
                ->setParameter('uuid', $uuidBinary);
44
        }
45
46
        $queryBuilder->orderBy('rf.id', 'DESC')
47
            ->setFirstResult($offset)
48
            ->setMaxResults($limit);
49
50
        return $queryBuilder->getQuery()->getResult();
51
    }
52
53
    public function countFiles(string $search): int
54
    {
55
        $uuid = '';
56
        if (preg_match('/[a-f0-9]{32}|[a-f0-9\-]{36}/i', $search, $matches)) {
57
            $uuid = strtoupper(str_replace('-', '', $matches[0]));
58
        }
59
60
        $uuidBinary = pack('H*', $uuid);
61
62
        $queryBuilder = $this->createQueryBuilder('rf')
63
            ->leftJoin('rf.resourceNode', 'rn')
64
            ->leftJoin('rn.resourceLinks', 'rl')
65
            ->leftJoin('rl.course', 'c')
66
            ->leftJoin('rl.user', 'u')
67
            ->select('COUNT(rf.id)');
68
69
        if ($search) {
70
            $queryBuilder->where('rf.title LIKE :search')
71
                ->orWhere('rf.originalName LIKE :search')
72
                ->orWhere('c.title LIKE :search')
73
                ->orWhere('u.username LIKE :search')
74
                ->orWhere('rn.uuid = :uuid')
75
                ->setParameter('search', '%' . $search . '%')
76
                ->setParameter('uuid', $uuidBinary);
77
        }
78
79
        return $queryBuilder->getQuery()->getSingleScalarResult();
80
    }
81
}
82