Merge pull request #5674 from christianbeeznest/ofaj-21826-4
	
		
	
				
					
				
			Internal: Refactor file search logic into repository and fix UUID search - refs BT#21826pull/5675/head
						commit
						df17d56346
					
				@ -0,0 +1,81 @@ | 
				
			||||
<?php | 
				
			||||
 | 
				
			||||
declare(strict_types=1); | 
				
			||||
 | 
				
			||||
/* For licensing terms, see /license.txt */ | 
				
			||||
 | 
				
			||||
namespace Chamilo\CoreBundle\Repository; | 
				
			||||
 | 
				
			||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; | 
				
			||||
use Doctrine\Persistence\ManagerRegistry; | 
				
			||||
use Chamilo\CoreBundle\Entity\ResourceFile; | 
				
			||||
 | 
				
			||||
class ResourceFileRepository extends ServiceEntityRepository | 
				
			||||
{ | 
				
			||||
    public function __construct(ManagerRegistry $registry) | 
				
			||||
    { | 
				
			||||
        parent::__construct($registry, ResourceFile::class); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    public function searchFiles(string $search, int $offset, int $limit): array | 
				
			||||
    { | 
				
			||||
        $uuid = ''; | 
				
			||||
        if (preg_match('/[a-f0-9]{32}|[a-f0-9\-]{36}/i', $search, $matches)) { | 
				
			||||
            $uuid = strtoupper(str_replace('-', '', $matches[0])); | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
        $uuidBinary = pack('H*', $uuid); | 
				
			||||
 | 
				
			||||
        $queryBuilder = $this->createQueryBuilder('rf') | 
				
			||||
            ->leftJoin('rf.resourceNode', 'rn') | 
				
			||||
            ->leftJoin('rn.resourceLinks', 'rl') | 
				
			||||
            ->leftJoin('rl.course', 'c') | 
				
			||||
            ->leftJoin('rl.user', 'u') | 
				
			||||
            ->addSelect('rn', 'rl', 'c', 'u'); | 
				
			||||
 | 
				
			||||
        if ($search) { | 
				
			||||
            $queryBuilder->where('rf.title LIKE :search') | 
				
			||||
                ->orWhere('rf.originalName LIKE :search') | 
				
			||||
                ->orWhere('c.title LIKE :search') | 
				
			||||
                ->orWhere('u.username LIKE :search') | 
				
			||||
                ->orWhere('rn.uuid = :uuid') | 
				
			||||
                ->setParameter('search', '%' . $search . '%') | 
				
			||||
                ->setParameter('uuid', $uuidBinary); | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
        $queryBuilder->orderBy('rf.id', 'DESC') | 
				
			||||
            ->setFirstResult($offset) | 
				
			||||
            ->setMaxResults($limit); | 
				
			||||
 | 
				
			||||
        return $queryBuilder->getQuery()->getResult(); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    public function countFiles(string $search): int | 
				
			||||
    { | 
				
			||||
        $uuid = ''; | 
				
			||||
        if (preg_match('/[a-f0-9]{32}|[a-f0-9\-]{36}/i', $search, $matches)) { | 
				
			||||
            $uuid = strtoupper(str_replace('-', '', $matches[0])); | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
        $uuidBinary = pack('H*', $uuid); | 
				
			||||
 | 
				
			||||
        $queryBuilder = $this->createQueryBuilder('rf') | 
				
			||||
            ->leftJoin('rf.resourceNode', 'rn') | 
				
			||||
            ->leftJoin('rn.resourceLinks', 'rl') | 
				
			||||
            ->leftJoin('rl.course', 'c') | 
				
			||||
            ->leftJoin('rl.user', 'u') | 
				
			||||
            ->select('COUNT(rf.id)'); | 
				
			||||
 | 
				
			||||
        if ($search) { | 
				
			||||
            $queryBuilder->where('rf.title LIKE :search') | 
				
			||||
                ->orWhere('rf.originalName LIKE :search') | 
				
			||||
                ->orWhere('c.title LIKE :search') | 
				
			||||
                ->orWhere('u.username LIKE :search') | 
				
			||||
                ->orWhere('rn.uuid = :uuid') | 
				
			||||
                ->setParameter('search', '%' . $search . '%') | 
				
			||||
                ->setParameter('uuid', $uuidBinary); | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
        return $queryBuilder->getQuery()->getSingleScalarResult(); | 
				
			||||
    } | 
				
			||||
} | 
				
			||||
					Loading…
					
					
				
		Reference in new issue