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

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.     public function setForceCaseInsensitivity($value)
  19.     {
  20.         if (!is_bool($value)) {
  21.             throw new \InvalidArgumentException("Expected a boolean");
  22.         }
  23.         $this->forceCaseInsensitivity $value;
  24.         return $this;
  25.     }
  26.     /**
  27.      * @param $qb
  28.      * @return boolean
  29.      */
  30.     public function getForceCaseInsensitivity($qb)
  31.     {
  32.         if (isset($this->forceCaseInsensitivity)) {
  33.             return $this->forceCaseInsensitivity;
  34.         }
  35.         if (class_exists('\Doctrine\ORM\QueryBuilder') && $qb instanceof \Doctrine\ORM\QueryBuilder) {
  36.             return ($qb->getEntityManager()->getConnection()->getDatabasePlatform() instanceof PostgreSqlPlatform);
  37.         }
  38.         if (class_exists('\Doctrine\DBAL\Query\QueryBuilder') && $qb instanceof \Doctrine\DBAL\Query\QueryBuilder) {
  39.             return ($qb->getConnection()->getDatabasePlatform() instanceof PostgreSqlPlatform);
  40.         }
  41.     }
  42.     /**
  43.      * @return null|string
  44.      */
  45.     public function getEncoding()
  46.     {
  47.         return $this->encoding;
  48.     }
  49.     /**
  50.      * @param null|string $encoding
  51.      *
  52.      * @return PrepareListener
  53.      */
  54.     public function setEncoding($encoding)
  55.     {
  56.         $this->encoding $encoding;
  57.         return $this;
  58.     }
  59.     /**
  60.      * Filter builder prepare event
  61.      *
  62.      * @param PrepareEvent $event
  63.      */
  64.     public function onFilterBuilderPrepare(PrepareEvent $event)
  65.     {
  66.         $qb $event->getQueryBuilder();
  67.         $queryClasses = array(
  68.             'Doctrine\ORM\QueryBuilder'          => 'Lexik\Bundle\FormFilterBundle\Filter\Doctrine\ORMQuery',
  69.             'Doctrine\DBAL\Query\QueryBuilder'   => 'Lexik\Bundle\FormFilterBundle\Filter\Doctrine\DBALQuery',
  70.             'Doctrine\ODM\MongoDB\Query\Builder' => 'Lexik\Bundle\FormFilterBundle\Filter\Doctrine\MongodbQuery',
  71.         );
  72.         foreach ($queryClasses as $builderClass => $queryClass) {
  73.             if (class_exists($builderClass) && $qb instanceof $builderClass) {
  74.                 $query = new $queryClass($qb$this->getForceCaseInsensitivity($qb), $this->encoding);
  75.                 $event->setFilterQuery($query);
  76.                 $event->stopPropagation();
  77.                 return;
  78.             }
  79.         }
  80.     }
  81. }