vendor/lexik/form-filter-bundle/Event/Listener/PrepareListener.php line 83

Open in your IDE?
  1. <?php
  2. namespace Lexik\Bundle\FormFilterBundle\Event\Listener;
  3. use Lexik\Bundle\FormFilterBundle\Event\PrepareEvent;
  4. use Doctrine\DBAL\Platforms\PostgreSqlPlatform;
  5. /**
  6.  * Prepare listener event
  7.  */
  8. class PrepareListener
  9. {
  10.     /**
  11.      * @var boolean
  12.      */
  13.     protected $forceCaseInsensitivity null;
  14.     /**
  15.      * @var string|null
  16.      */
  17.     protected $encoding;
  18.     /**
  19.      * @param boolean $value
  20.      * @return PrepareListener $this
  21.      * @throws \InvalidArgumentException
  22.      */
  23.     public function setForceCaseInsensitivity($value)
  24.     {
  25.         if (!is_bool($value)) {
  26.             throw new \InvalidArgumentException("Expected a boolean");
  27.         }
  28.         $this->forceCaseInsensitivity $value;
  29.         return $this;
  30.     }
  31.     /**
  32.      * @param $qb
  33.      * @return boolean
  34.      */
  35.     public function getForceCaseInsensitivity($qb)
  36.     {
  37.         if (isset($this->forceCaseInsensitivity)) {
  38.             return $this->forceCaseInsensitivity;
  39.         }
  40.         if (class_exists('\Doctrine\ORM\QueryBuilder') && $qb instanceof \Doctrine\ORM\QueryBuilder) {
  41.             return ($qb->getEntityManager()->getConnection()->getDatabasePlatform() instanceof PostgreSqlPlatform);
  42.         }
  43.         if (class_exists('\Doctrine\DBAL\Query\QueryBuilder') && $qb instanceof \Doctrine\DBAL\Query\QueryBuilder) {
  44.             return ($qb->getConnection()->getDatabasePlatform() instanceof PostgreSqlPlatform);
  45.         }
  46.     }
  47.     /**
  48.      * @return null|string
  49.      */
  50.     public function getEncoding()
  51.     {
  52.         return $this->encoding;
  53.     }
  54.     /**
  55.      * @param null|string $encoding
  56.      *
  57.      * @return PrepareListener
  58.      */
  59.     public function setEncoding($encoding)
  60.     {
  61.         $this->encoding $encoding;
  62.         return $this;
  63.     }
  64.     /**
  65.      * Filter builder prepare event
  66.      *
  67.      * @param PrepareEvent $event
  68.      */
  69.     public function onFilterBuilderPrepare(PrepareEvent $event)
  70.     {
  71.         $qb $event->getQueryBuilder();
  72.         $queryClasses = array(
  73.             'Doctrine\ORM\QueryBuilder'          => 'Lexik\Bundle\FormFilterBundle\Filter\Doctrine\ORMQuery',
  74.             'Doctrine\DBAL\Query\QueryBuilder'   => 'Lexik\Bundle\FormFilterBundle\Filter\Doctrine\DBALQuery',
  75.             'Doctrine\ODM\MongoDB\Query\Builder' => 'Lexik\Bundle\FormFilterBundle\Filter\Doctrine\MongodbQuery',
  76.         );
  77.         foreach ($queryClasses as $builderClass => $queryClass) {
  78.             if (class_exists($builderClass) && $qb instanceof $builderClass) {
  79.                 $query = new $queryClass($qb$this->getForceCaseInsensitivity($qb), $this->encoding);
  80.                 $event->setFilterQuery($query);
  81.                 $event->stopPropagation();
  82.                 return;
  83.             }
  84.         }
  85.     }
  86. }