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. }