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
<?php
namespace TIC\ListBundle\Repository;

#use Doctrine\ORM\EntityRepository;
#use TIC\CoreBundle\Base\Repository as BaseRepository;

// TIC CoreBundle
use 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();
    }

}