Source of file ListInfoRepository.php
Size: 2,392 Bytes - Last Modified: 2023-11-16T22:56:03+01:00
/home/websites/teicee/packagist/site/phpdoc/conf/../vendor/teicee/list-bundle/src/Repository/ListInfoRepository.php
| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 | <?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; /** * ListInfoRepository */class ListInfoRepository extends BaseRepository {/** * @var Listing default order */public $sortBy = array('ref' => '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'); if (! is_object($qb)) $qb = $this->createQueryBuilder($alias); foreach ($filters as $type => $value) switch ($type) { case 'editable': case 'valuable': case 'referable': case 'translatable': case 'deactivatable': case 'sortable': case 'iconable': if ($value !== null) $qb->andWhere($alias.'.'.$type.' = :'.$type)->setParameter($type, (bool)$value); break; case 'ref': if ($value) $qb->andWhere($alias.'.ref = :ref')->setParameter('ref', $value); break; case 'items': // jointure avec hydratation des éléments if ($value) $qb->leftJoin($alias.'.items', 'i')->addSelect('i'); break; case 'locale': // jointure avec hydratation des éléments avec leur traduction dans la locale if ($value) $qb->leftJoin($alias.'.items', 'i')->addSelect('i'); if ($value) $qb->leftJoin('i.translations', 't', 'WITH', 't.locale = :locale')->addSelect('t')->setParameter('locale', $value); break; } return $qb; } /** * Retourne une simple énumération des références des listes existantes. */public function listReferences() { return $this->createQueryBuilder('a')->select('a.ref')->orderBy('a.ref')->getQuery()->getResult('column'); } /** * @TODO: key by label|value|ref|id ; label i18n ? * Note: préférable d'utiliser une méthode du ListItemRepository ? */public function getChoices($ref, $all=false) { $choices = array(); $list = $this->find($ref); if ($list) foreach ($list->getItems() as $item) { if (! $all && ! $item->getEnabled()) continue; $choices[$item->getValue()] = $item->getLabel(); } return $choices; } } |