vendor/knplabs/knp-components/src/Knp/Component/Pager/Event/Subscriber/Filtration/PropelQuerySubscriber.php line 11

Open in your IDE?
  1. <?php
  2. namespace Knp\Component\Pager\Event\Subscriber\Filtration;
  3. use Knp\Component\Pager\PaginatorInterface;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Knp\Component\Pager\Event\ItemsEvent;
  6. class PropelQuerySubscriber implements EventSubscriberInterface
  7. {
  8.     public function items(ItemsEvent $event)
  9.     {
  10.         $query $event->target;
  11.         if ($query instanceof \ModelCriteria) {
  12.             if (empty($_GET[$event->options[PaginatorInterface::FILTER_VALUE_PARAMETER_NAME]])) {
  13.                 return;
  14.             }
  15.             if (!empty($_GET[$event->options[PaginatorInterface::FILTER_FIELD_PARAMETER_NAME]])) {
  16.                 $columns $_GET[$event->options[PaginatorInterface::FILTER_FIELD_PARAMETER_NAME]];
  17.             } elseif (!empty($event->options[PaginatorInterface::DEFAULT_FILTER_FIELDS])) {
  18.                 $columns $event->options[PaginatorInterface::DEFAULT_FILTER_FIELDS];
  19.             } else {
  20.                 return;
  21.             }
  22.             if (is_string($columns) && false !== strpos($columns',')) {
  23.                 $columns explode(','$columns);
  24.             }
  25.             $columns = (array) $columns;
  26.             if (isset($event->options[PaginatorInterface::FILTER_FIELD_WHITELIST])) {
  27.                 foreach ($columns as $column) {
  28.                     if (!in_array($column$event->options[PaginatorInterface::FILTER_FIELD_WHITELIST])) {
  29.                         throw new \UnexpectedValueException("Cannot filter by: [{$column}] this field is not in whitelist");
  30.                     }
  31.                 }
  32.             }
  33.             $value $_GET[$event->options[PaginatorInterface::FILTER_VALUE_PARAMETER_NAME]];
  34.             $criteria = \Criteria::EQUAL;
  35.             if (false !== strpos($value'*')) {
  36.                 $value str_replace('*''%'$value);
  37.                 $criteria = \Criteria::LIKE;
  38.             }
  39.             foreach ($columns as $column) {
  40.                 if (false !== strpos($column'.')) {
  41.                     $query->where($column.$criteria.'?'$value);
  42.                 } else {
  43.                     $query->{'filterBy'.$column}($value$criteria);
  44.                 }
  45.             }
  46.         }
  47.     }
  48.     public static function getSubscribedEvents()
  49.     {
  50.         return array(
  51.             'knp_pager.items' => array('items'0),
  52.         );
  53.     }
  54. }