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
<?php
namespace 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()
		;
	}


}