Source of file ListItemRepository.php
Size: 3,449 Bytes - Last Modified: 2023-11-16T22:56:03+01:00
/home/websites/teicee/packagist/site/phpdoc/conf/../vendor/teicee/list-bundle/src/Repository/ListItemRepository.php
| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 | <?phpnamespace TIC\ListBundle\Repository; #use Doctrine\ORM\EntityRepository;#use TIC\CoreBundle\Base\Repository as BaseRepository;// TIC CoreBundleuse TIC\DormBundle\Base\TICRepository as BaseRepository; use Doctrine\ORM\QueryBuilder; /** * ListItemRepository */class ListItemRepository extends BaseRepository {/** * @var Listing default order */public $sortBy = array('ranking' => 'ASC', 'label' => 'ASC'); /** * Application des filtres sur un query builder. * * @param array $filters * @param mixed $qb * @return QueryBuilder */public function qbFilters(array $filters = array(), $qb = null): QueryBuilder { $alias = is_string($qb) ? $qb : (isset($this->alias) ? $this->alias : 'a'); $qb = parent::qbFilters($filters, $qb); foreach ($filters as $type => $value) switch ($type) { # case 'enabled': if ($value !== null) $qb->andWhere("a.enabled = :enabled")->setParameter('enabled', $value); break;# case 'locales': // jointure avec hydratation de toutes les traductions des libélés# case 'locale': // jointure avec hydratation de la traduction dans la locale des libellés# case 'allorcur':case 'allorval': if ($value === true) break; if ($value === null || $value === false) { $qb->andWhere($alias.'.enabled = true'); break; } $qb->andWhere('('.$alias.'.enabled = true OR '.$alias.'.value = :curval)')->setParameter('curval', is_object($value)?$value->getValue():$value); break; case 'list' : case 'info' : if ($value) $qb->andWhere($alias.'.info = :info')->setParameter('info', $value); break; case 'ref' : case 'value' : if ($value) $qb->andWhere($alias.'.'.$type.' = :'.$type)->setParameter($type, $value); break; } return $qb; } /** * Retourne le QueryBuilder pour récupérer les éléments d'une liste donnée. */public function qbList($list, $all_or_current = false, $locale = true) { $filters = array( 'list' => $list, 'allorcur' => $all_or_current, # 'allorval' => $all_or_current,'locale' => $locale, ); return $this->qbFilters($filters)->orderBy('a.ranking', 'ASC')->addOrderBy('a.label', 'ASC'); } /** * Retourne les valeurs et libelés des éléments disponibles d'une liste donnée. */public function listChoices($list, $locale = 'fr') { $filters = array( 'list' => $list, 'locale' => $locale, 'enabled' => true, ); return $this->qbFilters($filters)->select('a.value, COALESCE(atrans.label, a.label)') ->orderBy('a.ranking', 'ASC')->addOrderBy('atrans.label', 'ASC')->addOrderBy('a.label', 'ASC') ->getQuery()->getResult('keyval') ; } /** * Retourne une liste d'entités en fonction des filtres personnalisés (cf. qbFilters). * @param array $filters Filtres optionnels pour la recherche via qbFilters * @return array Liste triée de tous les éléments correspondants */public function listJoinAll($filters = array()) { if (! isset($filters['locale'])) $filters['locales'] = true; return $this->qbFilters($filters)->orderBy('a.ranking', 'ASC')->addOrderBy('a.label', 'ASC')->getQuery()->getResult(); } /** * Retourne une entité en fonction des filtres personnalisés (cf. qbFilters). */public function getOne($filters = array()) { return $this->qbFilters($filters)->getQuery()->getOneOrNullResult(); } } |