Passed
Push — master ( 2f2d8f...df17d5 )
by
unknown
14:39 queued 07:31
created

ResourceFileRepository   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 67
Duplicated Lines 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
eloc 43
dl 0
loc 67
rs 10
c 1
b 1
f 0
wmc 7

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A searchFiles() 0 31 3
A countFiles() 0 27 3
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