Source of file CommuneRepository.php
Size: 4,413 Bytes - Last Modified: 2023-11-16T22:56:03+01:00
/home/websites/teicee/packagist/site/phpdoc/conf/../vendor/teicee/town-bundle/src/Repository/CommuneRepository.php
| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 | <?phpnamespace TIC\TownBundle\Repository; use TIC\TownBundle\Entity\Commune as RepoEntity; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; /** * CommuneRepository. * * @method Commune|null find($id, $lockMode = null, $lockVersion = null) * @method Commune|null findOneBy(array $criteria, array $orderBy = null) * @method Commune[] findAll() * @method Commune[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */class CommuneRepository extends ServiceEntityRepository {public function __construct(ManagerRegistry $registry) { parent::__construct($registry, RepoEntity::class); } public $sortBy = array('nom_maj' => 'ASC'); /** * Recherche basique. */public function searchBasic(string $term, ?int $limit=20) { return $this->createQueryBuilder('c') ->select('c.codes AS id, c.nom AS text, c.postal AS cp, c.art') ->where('c.nom LIKE :term')->setParameter('term', '%'.$term.'%') ->setMaxResults($limit) ->getQuery()->getArrayResult() ; } /** * Recherche du motif en préfixe, complétée si besoin en submatch. */public function search(string $term, ?int $limit=20) { $results = array(); foreach (array('%s%%', '%%%s%%') as $motif) { $nbmax = (($limit > 0) ? $limit : 100) - count($results); if ($nbmax < 1) break; $results+= $this->_em->createQueryBuilder() ->select('c.codes AS id, c.nom AS text, c.postal AS cp, c.art') ->from('TICTownBundle:Commune', 'c') ->where((is_numeric($term)?'c.postal':'c.nom') . ' LIKE :term') ->setParameter('term', sprintf($motif, $term)) ->orderBy('c.nom', 'ASC')->setMaxResults($nbmax) ->getQuery()->getArrayResult() ; } return array_values($results); } /** * Recherche le code INSEE d'une commune à partir de son nom et/ou code postal. */public function findCodeInsee($nom=null, $cp=null) { if ($nom !== null) { $nom = preg_replace("/^(L'|L |LA |LE |LES )/i", '', $nom); $nom = preg_replace('/^(.* )?ST(E?) /i', '${1}SAINT${2} ', $nom); $nom = trim($nom); $nom = strtr($nom, ' ', '_'); } if (($nom === "") && empty($cp)) return null; $qb = $this->createQueryBuilder('c'); if (! empty($nom)) $qb->andWhere('c.nom_maj LIKE :nom')->setParameter('nom', $nom); if (! empty($cp)) $qb->andWhere('c.postal = :cp' )->setParameter('cp', $cp); if ($results = $qb->getQuery()->getResult()) { if (count($results) > 0) return $results[0]; } if (! empty($nom)) { $qb = $this->createQueryBuilder('c'); if (! empty($nom)) $qb->andWhere('c.nom_maj LIKE :nom')->setParameter('nom', $nom.'%'); if (! empty($cp)) $qb->andWhere('c.postal = :cp' )->setParameter('cp', $cp); if ($results = $qb->getQuery()->getResult()) { if (count($results) > 0) return $results[0]; } } if (! empty($nom)) { $qb = $this->createQueryBuilder('c'); if (! empty($nom)) $qb->andWhere('c.nom_maj LIKE :nom')->setParameter('nom', '%'.substr($nom,0,20).'%'); if (! empty($cp)) $qb->andWhere('c.postal = :cp' )->setParameter('cp', $cp); if ($results = $qb->getQuery()->getResult()) { if (count($results) > 0) return $results[0]; } } if (! empty($nom)) { $qb = $this->createQueryBuilder('c'); if (! empty($nom)) $qb->andWhere('c.nom_maj LIKE :nom')->setParameter('nom', '%'.substr($nom,0,20).'%'); if (! empty($cp)) $qb->andWhere('c.postal LIKE :cp' )->setParameter('cp', substr($cp,0,2).'%'); if ($results = $qb->getQuery()->getResult()) { if (count($results) > 0) return $results[0]; } } if (! empty($nom) && ! empty($cp)) { $qb = $this->createQueryBuilder('c'); if (! empty($cp)) $qb->andWhere('c.postal = :cp')->setParameter('cp', $cp); if ($results = $qb->getQuery()->getResult()) { if (count($results) > 0) return $results[0]; } } return null; } public function disableByInsee($insee) { return $this->createQueryBuilder('c')->update() ->where('c.insee = :insee')->setParameter('insee', $insee) ->set('c.enabled', false) ->getQuery()->execute() ; } public function updateStatusByCodes($codes, bool $enabled) { return $this->createQueryBuilder('c')->update() ->where('c.codes = :codes')->setParameter('codes', $codes) ->set('c.enabled', ':enabled')->setParameter('enabled', $enabled) ->getQuery()->execute() ; } } |