public function items(ItemsEvent $event)
 {
     $target = $event->target;
     if ($target instanceof ModelCriteria) {
         $sortFieldParamName = $event->options['sortFieldParameterName'];
         if (isset($_GET[$sortFieldParamName])) {
             $direction = strtolower($_GET[$event->options['sortDirectionParameterName']]) === 'asc' ? 'asc' : 'desc';
             $part = $_GET[$sortFieldParamName];
             if (isset($event->options['sortFieldWhitelist'])) {
                 if (!in_array($_GET[$sortFieldParamName], $event->options['sortFieldWhitelist'])) {
                     throw new \UnexpectedValueException("Cannot sort by: [{$_GET[$sortFieldParamName]}] this field is not in whitelist");
                 }
             }
             $target->orderBy($part, $direction);
         }
         $event->count = $target->count();
         $limit = $event->getLimit();
         $offset = $event->getOffset();
         $target->limit($limit);
         $target->offset($offset);
         $items = $target->find();
         $itemsData = $items->getData();
         $event->items = $itemsData;
         $event->stopPropagation();
     }
 }
Example #2
0
 public function items(ItemsEvent $event)
 {
     if ($event->target instanceof Query) {
         // items
         $type = $event->target->getType();
         if ($type !== Query::TYPE_FIND) {
             throw new \UnexpectedValueException('ODM query must be a FIND type query');
         }
         static $reflectionProperty;
         if (is_null($reflectionProperty)) {
             $reflectionClass = new \ReflectionClass('Doctrine\\MongoDB\\Query\\Query');
             $reflectionProperty = $reflectionClass->getProperty('query');
             $reflectionProperty->setAccessible(true);
         }
         $queryOptions = $reflectionProperty->getValue($event->target);
         $queryOptions['limit'] = $event->getLimit();
         $queryOptions['skip'] = $event->getOffset();
         $resultQuery = clone $event->target;
         $reflectionProperty->setValue($resultQuery, $queryOptions);
         $cursor = $resultQuery->execute();
         // set the count from the cursor
         $event->count = $cursor->count();
         $event->items = array();
         // iterator_to_array for GridFS results in 1 item
         foreach ($cursor as $item) {
             $event->items[] = $item;
         }
         $event->stopPropagation();
     }
 }
Example #3
0
 public function items(ItemsEvent $event)
 {
     if ($event->target instanceof ModelCriteria) {
         // process count
         $countQuery = clone $event->target;
         $countQuery->limit(0)->offset(0);
         if ($event->options['distinct']) {
             $countQuery->distinct();
         }
         $event->count = intval($countQuery->count());
         // process items
         $result = null;
         if ($event->count) {
             $resultQuery = clone $event->target;
             if ($event->options['distinct']) {
                 $resultQuery->distinct();
             }
             $resultQuery->offset($event->getOffset())->limit($event->getLimit());
             $result = $resultQuery->find();
         } else {
             $result = array();
             // count is 0
         }
         $event->items = $result;
         $event->stopPropagation();
     }
 }
Example #4
0
 public function items(ItemsEvent $event)
 {
     if (!class_exists('Eccube\\Doctrine\\ORM\\Tools\\Pagination\\Paginator')) {
         return;
     }
     if (!$event->target instanceof Query) {
         return;
     }
     $event->stopPropagation();
     $useOutputWalkers = false;
     if (isset($event->options['wrap-queries'])) {
         $useOutputWalkers = $event->options['wrap-queries'];
     }
     $event->target->setFirstResult($event->getOffset())->setMaxResults($event->getLimit())->setHint(CountWalker::HINT_DISTINCT, $event->options['distinct']);
     $fetchJoinCollection = true;
     if ($event->target->hasHint(self::HINT_FETCH_JOIN_COLLECTION)) {
         $fetchJoinCollection = $event->target->getHint(self::HINT_FETCH_JOIN_COLLECTION);
     }
     $paginator = new Paginator($event->target, $fetchJoinCollection);
     $paginator->setUseOutputWalkers($useOutputWalkers);
     if (($count = $event->target->getHint(QuerySubscriber::HINT_COUNT)) !== false) {
         $event->count = intval($count);
     } else {
         $event->count = count($paginator);
     }
     $event->items = iterator_to_array($paginator);
 }
 public function items(ItemsEvent $event)
 {
     if ($event->target instanceof SearchResultInterface) {
         $event->count = $event->target->getTotalFound();
         $event->items = $event->target->getMatches();
         $event->stopPropagation();
     }
 }
Example #6
0
 public function items(ItemsEvent $event)
 {
     if ($event->target instanceof Collection) {
         $event->count = $event->target->count();
         $event->items = new ArrayObject($event->target->slice($event->getOffset(), $event->getLimit()));
         $event->stopPropagation();
     }
 }
 public function items(ItemsEvent $event)
 {
     if ($event->target instanceof \Iterator) {
         $files = iterator_to_array($event->target);
         $event->count = count($files);
         $event->items = array_slice($files, $event->getOffset(), $event->getLimit());
         $event->stopPropagation();
     }
 }
 public function items(ItemsEvent $event)
 {
     if (!$event->target instanceof Result) {
         return;
     }
     $event->count = $event->target->count();
     $event->items = $event->target->take($event->getOffset(), $event->getLimit())->getIterator();
     $event->stopPropagation();
 }
 /**
  * {@inheritdoc}
  */
 public function items(ItemsEvent $event)
 {
     if (!$event->target instanceof LazyFavoriteCollection) {
         return;
     }
     $collection = $event->target;
     $event->count = $collection->count();
     $event->items = $collection->slice($event->getOffset(), $event->getLimit());
     $event->stopPropagation();
 }
Example #10
0
 public function items(ItemsEvent $event)
 {
     if (isset($event->target[0]) && is_a($event->target[0], 'PommProject\\ModelManager\\Model\\Model') && is_a($event->target[1], 'PommProject\\Foundation\\Where')) {
         $event->count = count($event->target);
         $event->items = $event->target[0]->paginateFindWhere($event->target[1], $event->getLimit(), $event->getOffset() / $event->getLimit())->getIterator();
         // dump($event->items);
         // die;
         $event->stopPropagation();
     }
 }
 public function items(ItemsEvent $event)
 {
     if (!$event->target instanceof Page) {
         return;
     }
     $page = $event->target;
     $event->count = $page->totalCount();
     $event->items = $page->getIterator();
     $event->stopPropagation();
 }
 /**
  * @param ItemsEvent $event
  */
 public function items(ItemsEvent $event)
 {
     $query = $event->target;
     if (!$query instanceof SearchQuery) {
         return;
     }
     $queryString = (string) $query;
     $event->count = $this->searchManager->count($queryString);
     $event->items = $this->searchManager->search($queryString, $event->getOffset(), $event->getLimit());
     $event->stopPropagation();
 }
 public function items(ItemsEvent $event)
 {
     if (!$event->target instanceof Query) {
         return;
     }
     $queryCount = clone $event->target;
     $event->count = $queryCount->execute(null, Query::HYDRATE_PHPCR)->getRows()->count();
     $query = $event->target;
     $query->setMaxResults($event->getLimit());
     $query->setFirstResult($event->getOffset());
     $event->items = $query->execute();
     $event->stopPropagation();
 }
 /**
  * @param ItemsEvent $event event
  */
 public function items(ItemsEvent $event)
 {
     if (!$event->target instanceof PagerToken) {
         return;
     }
     $target = $event->target;
     $offset = $event->getOffset();
     $limit = $event->getLimit() - 1;
     $ids = $this->client->zRevRange($target->key, $offset, $offset + $limit);
     $event->count = $this->client->zCard($target->key);
     $event->items = $this->actionManager->findActionsForIds($ids);
     $event->stopPropagation();
 }
 public function items(ItemsEvent $event)
 {
     if ($event->target instanceof PaginatorAdapterInterface) {
         /** @var $results PartialResultsInterface */
         $results = $event->target->getResults($event->getOffset(), $event->getLimit());
         $event->count = $results->getTotalHits();
         $event->items = $results->toArray();
         $facets = $results->getFacets();
         if (null != $facets) {
             $event->setCustomPaginationParameter('facets', $facets);
         }
         $event->stopPropagation();
     }
 }
 public function items(ItemsEvent $event)
 {
     if (is_array($event->target) && 2 === count($event->target) && reset($event->target) instanceof \Elastica_Searchable && end($event->target) instanceof \Elastica_Query) {
         list($searchable, $query) = $event->target;
         $query->setFrom($event->getOffset());
         $query->setLimit($event->getLimit());
         $results = $searchable->search($query);
         $event->count = $results->getTotalHits();
         if ($results->hasFacets()) {
             $event->setCustomPaginationParameter('facets', $results->getFacets());
         }
         $event->items = $results->getResults();
         $event->stopPropagation();
     }
 }
Example #17
0
 public function items(ItemsEvent $event)
 {
     if (is_array($event->target) && 2 == count($event->target)) {
         $values = array_values($event->target);
         list($client, $query) = $values;
         if ($client instanceof \Solarium\Client && $query instanceof \Solarium\QueryType\Select\Query\Query) {
             $query->setStart($event->getOffset())->setRows($event->getLimit());
             $solrResult = $client->select($query);
             $event->items = $solrResult->getIterator();
             $event->count = $solrResult->getNumFound();
             $event->setCustomPaginationParameter('result', $solrResult);
             $event->stopPropagation();
         }
     }
 }
Example #18
0
 public function items(ItemsEvent $event)
 {
     if ($event->target instanceof Search\QueryInterface) {
         $searchIndex = $this->getIndexManager();
         $query = $event->target;
         $query->setFrom($event->getOffset());
         $query->setLimit($event->getLimit());
         $results = $searchIndex->search($query);
         $event->count = $results->getTotalHits();
         if ($results->hasFacets()) {
             $event->setCustomPaginationParameter('facets', $results->getFacets());
         }
         $event->items = $results->getResults();
         $event->stopPropagation();
     }
 }
 public function items(ItemsEvent $event)
 {
     if (is_array($event->target) && 2 === count($event->target)) {
         list($client, $query) = $event->target;
         if ($client instanceof \Solarium_Client && $query instanceof \Solarium_Query_Select) {
             $results = array();
             $event->count = $client->select($query)->getNumFound();
             if ($event->count) {
                 $query->setStart($event->getOffset())->setRows($event->getLimit());
                 $results = $client->select($query)->getIterator();
             }
             $event->items = $results;
             $event->stopPropagation();
         }
     }
 }
Example #20
0
 /**
  * @param ItemsEvent $event
  */
 public function items(ItemsEvent $event)
 {
     if ($event->target instanceof Query) {
         $query = $event->target;
         // считаем количество результатов
         $event->count = $this->em->getRepository('AppBundle:Purchase')->createQueryBuilder('p')->select("COUNT(DISTINCT(CONCAT(p.pmId, '-', p.price)))")->where('p.tsDayStart >= :start')->andWhere('p.tsDayStart <= :end')->setParameters($query->getParameters())->getQuery()->getSingleScalarResult();
         $query->setFirstResult($event->getOffset())->setMaxResults($event->getLimit());
         $event->items = $query->execute();
         // парсим JSON
         foreach ($event->items as &$item) {
             $item['aData'] = json_decode($item['aData'], true);
             if (isset($event->options['itemCallback'])) {
                 $call = $event->options['itemCallback'];
                 if ($call instanceof \Closure) {
                     $call($item);
                 }
             }
         }
         $event->stopPropagation();
     }
 }
 public function items(ItemsEvent $event)
 {
     if ($event->target instanceof QueryBuilder) {
         /** @var $target QueryBuilder */
         $target = $event->target;
         // get the query
         $sql = $target->getSQL();
         // count results
         $qb = clone $target;
         $qb->resetQueryParts()->select('count(*) as cnt')->from('(' . $sql . ')', 'ololoshke_trololoshke');
         $event->count = $qb->execute()->fetchColumn(0);
         // if there is results
         $event->items = array();
         if ($event->count) {
             $qb = clone $target;
             $qb->setFirstResult($event->getOffset())->setMaxResults($event->getLimit());
             $event->items = $qb->execute()->fetchAll();
         }
         $event->stopPropagation();
     }
 }
 /**
  * @param ItemsEvent $event
  */
 public function items(ItemsEvent $event)
 {
     // Check if the request exists, for now it's needed because Pagination() needs is.
     // Maybe refactor Pagination one day and keep the good parts and get rid of the $request as it's a (nasty) dependency.
     if (!$this->request instanceof Request) {
         throw new \RuntimeException('Request must be set in ' . __CLASS__);
     }
     $target = $event->target;
     // for now only accept querybuilders.
     if (!$target instanceof QueryBuilder) {
         throw new \UnexpectedValueException();
     }
     $qb = $event->target;
     $filterFieldParameterName = array_key_exists('filterFieldParameterName', $event->options) ? $event->options['filterFieldParameterName'] : 'filterField';
     $filterValueParameterName = array_key_exists('filterValueParameterName', $event->options) ? $event->options['filterValueParameterName'] : 'filterValue';
     $this->appendQuery($qb, $this->request->query->get($filterValueParameterName, []), $this->request->query->get($filterFieldParameterName, []));
     $page = 0 == $event->getOffset() ? 1 : ceil($event->getOffset() / $event->getLimit()) + 1;
     $options = ['page' => $page, 'limit' => $event->getLimit()];
     if ($this->request->query->has('sort')) {
         $options['sorters'] = [$this->request->query->get('sort') => $this->request->query->get('direction')];
     } elseif (array_key_exists('defaultSortFieldName', $event->options)) {
         $options['sorters'] = [$event->options['defaultSortFieldName'] => $event->options['defaultSortDirection']];
     }
     $classname = $this->paginationOverrideClassname ? $this->paginationOverrideClassname : $this->defaultPaginationClassname;
     $options = array_merge($options, $this->paginationExtraOptions);
     $items = new $classname($qb, $this->request, $options);
     $event->count = $items->total();
     $event->items = iterator_to_array($items);
     $event->stopPropagation();
 }
Example #23
0
 public function items(ItemsEvent $event)
 {
     if (is_array($event->target)) {
         $event->count = count($event->target);
         $event->items = array_slice($event->target, $event->getOffset(), $event->getLimit());
         $event->stopPropagation();
     } elseif ($event->target instanceof ArrayObject) {
         $event->count = $event->target->count();
         $event->items = new ArrayObject(array_slice($event->target->getArrayCopy(), $event->getOffset(), $event->getLimit()));
         $event->stopPropagation();
     }
 }
 public function items(ItemsEvent $event)
 {
     if ($event->target instanceof Query) {
         // process count
         $useDoctrineWalkers = version_compare(\Doctrine\ORM\Version::VERSION, '2.2.0', '>=');
         if (($count = $event->target->getHint(self::HINT_COUNT)) !== false) {
             $event->count = intval($count);
         } else {
             $countQuery = QueryHelper::cloneQuery($event->target);
             QueryHelper::addCustomTreeWalker($countQuery, $useDoctrineWalkers ? 'Doctrine\\ORM\\Tools\\Pagination\\CountWalker' : 'Knp\\Component\\Pager\\Event\\Subscriber\\Paginate\\Doctrine\\ORM\\Query\\CountWalker');
             $countQuery->setHint($useDoctrineWalkers ? DoctrineCountWalker::HINT_DISTINCT : CountWalker::HINT_DISTINCT, $event->options['distinct'])->setFirstResult(null)->setMaxResults(null);
             $countResult = $countQuery->getResult(Query::HYDRATE_ARRAY);
             if (count($countResult) > 1) {
                 $countResult = count($countResult);
             } else {
                 $countResult = current($countResult);
                 $countResult = $countResult ? current($countResult) : 0;
             }
             $event->count = intval($countResult);
         }
         // process items
         $result = null;
         if ($event->count) {
             if ($event->options['distinct']) {
                 $limitSubQuery = QueryHelper::cloneQuery($event->target);
                 $limitSubQuery->setFirstResult($event->getOffset())->setMaxResults($event->getLimit())->useQueryCache(false);
                 QueryHelper::addCustomTreeWalker($limitSubQuery, $useDoctrineWalkers ? 'Doctrine\\ORM\\Tools\\Pagination\\LimitSubqueryWalker' : 'Knp\\Component\\Pager\\Event\\Subscriber\\Paginate\\Doctrine\\ORM\\Query\\LimitSubqueryWalker');
                 $ids = array_map('current', $limitSubQuery->getScalarResult());
                 // create where-in query
                 $whereInQuery = QueryHelper::cloneQuery($event->target);
                 QueryHelper::addCustomTreeWalker($whereInQuery, $useDoctrineWalkers ? 'Doctrine\\ORM\\Tools\\Pagination\\WhereInWalker' : 'Knp\\Component\\Pager\\Event\\Subscriber\\Paginate\\Doctrine\\ORM\\Query\\WhereInWalker');
                 $whereInQuery->setHint($useDoctrineWalkers ? DoctrineWhereInWalker::HINT_PAGINATOR_ID_COUNT : WhereInWalker::HINT_PAGINATOR_ID_COUNT, count($ids))->setFirstResult(null)->setMaxResults(null);
                 $type = $limitSubQuery->getHint($useDoctrineWalkers ? DoctrineLimitSubqueryWalker::IDENTIFIER_TYPE : LimitSubqueryWalker::IDENTIFIER_TYPE);
                 $idAlias = $useDoctrineWalkers ? DoctrineWhereInWalker::PAGINATOR_ID_ALIAS : WhereInWalker::PAGINATOR_ID_ALIAS;
                 foreach ($ids as $i => $id) {
                     $whereInQuery->setParameter($idAlias . '_' . ++$i, $id, $type->getName());
                 }
                 $result = $whereInQuery->execute();
             } else {
                 $event->target->setFirstResult($event->getOffset())->setMaxResults($event->getLimit());
                 $result = $event->target->execute();
             }
         } else {
             $result = array();
             // count is 0
         }
         $event->items = $result;
         $event->stopPropagation();
     }
 }
Example #25
0
 public function items(ItemsEvent $event)
 {
     if (is_array($event->target) && 2 === count($event->target) && reset($event->target) instanceof SearchableInterface && end($event->target) instanceof Query) {
         list($searchable, $query) = $event->target;
         $query->setFrom($event->getOffset());
         $query->setLimit($event->getLimit());
         $results = $searchable->search($query);
         $event->count = $results->getTotalHits();
         //Faceting is being replaced by aggregations
         if ($results->hasAggregations()) {
             $event->setCustomPaginationParameter('aggregations', $results->getAggregations());
         } elseif ($results->hasFacets()) {
             $event->setCustomPaginationParameter('facets', $results->getFacets());
         }
         $event->setCustomPaginationParameter('resultSet', $results);
         $event->items = $results->getResults();
         $event->stopPropagation();
     }
 }
 function items(ItemsEvent $e)
 {
     $e->setCustomPaginationParameter('test', 'val');
     parent::items($e);
 }
Example #27
0
 public function items(ItemsEvent $event)
 {
     if ($event->target instanceof Query) {
         // process count
         $useDoctrineWalkers = false;
         $useDoctrineOutputWalker = false;
         if (version_compare(\Doctrine\ORM\Version::VERSION, '2.3.0', '>=')) {
             $useDoctrineWalkers = true;
             $useDoctrineOutputWalker = true;
         } else {
             if (version_compare(\Doctrine\ORM\Version::VERSION, '2.2.0', '>=')) {
                 $useDoctrineWalkers = true;
             }
         }
         if (($count = $event->target->getHint(self::HINT_COUNT)) !== false) {
             $event->count = intval($count);
         } else {
             $countQuery = QueryHelper::cloneQuery($event->target);
             if ($useDoctrineOutputWalker) {
                 $treeWalker = 'Doctrine\\ORM\\Tools\\Pagination\\CountOutputWalker';
                 $countQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, $treeWalker);
             } else {
                 if ($useDoctrineWalkers) {
                     QueryHelper::addCustomTreeWalker($countQuery, 'Doctrine\\ORM\\Tools\\Pagination\\CountWalker');
                 } else {
                     $treeWalker = 'Knp\\Component\\Pager\\Event\\Subscriber\\Paginate\\Doctrine\\ORM\\Query\\CountWalker';
                     QueryHelper::addCustomTreeWalker($countQuery, $treeWalker);
                 }
             }
             if ($useDoctrineWalkers) {
                 $countQuery->setHint(DoctrineCountWalker::HINT_DISTINCT, $event->options['distinct']);
             } else {
                 $countQuery->setHint(CountWalker::HINT_DISTINCT, $event->options['distinct']);
             }
             $countQuery->setFirstResult(null)->setMaxResults(null);
             $countQuery->getEntityManager()->getConfiguration()->addCustomHydrationMode('asIs', 'Knp\\Component\\Pager\\Event\\Subscriber\\Paginate\\Doctrine\\ORM\\Query\\AsIsHydrator');
             $countResult = $countQuery->getResult('asIs');
             $event->count = intval(current(current($countResult)));
         }
         // process items
         $result = null;
         if ($event->count) {
             if ($event->options['distinct']) {
                 $limitSubQuery = QueryHelper::cloneQuery($event->target);
                 $limitSubQuery->setFirstResult($event->getOffset())->setMaxResults($event->getLimit())->useQueryCache(false);
                 QueryHelper::addCustomTreeWalker($limitSubQuery, $useDoctrineWalkers ? 'Doctrine\\ORM\\Tools\\Pagination\\LimitSubqueryWalker' : 'Knp\\Component\\Pager\\Event\\Subscriber\\Paginate\\Doctrine\\ORM\\Query\\LimitSubqueryWalker');
                 $ids = array_map('current', $limitSubQuery->getScalarResult());
                 // create where-in query
                 $whereInQuery = QueryHelper::cloneQuery($event->target);
                 QueryHelper::addCustomTreeWalker($whereInQuery, $useDoctrineWalkers ? 'Doctrine\\ORM\\Tools\\Pagination\\WhereInWalker' : 'Knp\\Component\\Pager\\Event\\Subscriber\\Paginate\\Doctrine\\ORM\\Query\\WhereInWalker');
                 $whereInQuery->setHint($useDoctrineWalkers ? DoctrineWhereInWalker::HINT_PAGINATOR_ID_COUNT : WhereInWalker::HINT_PAGINATOR_ID_COUNT, count($ids))->setFirstResult(null)->setMaxResults(null);
                 if (version_compare(\Doctrine\ORM\Version::VERSION, '2.3.0', '>=') && count($ids) > 0) {
                     $whereInQuery->setParameter(WhereInWalker::PAGINATOR_ID_ALIAS, $ids);
                 } else {
                     $type = $limitSubQuery->getHint($useDoctrineWalkers ? DoctrineLimitSubqueryWalker::IDENTIFIER_TYPE : LimitSubqueryWalker::IDENTIFIER_TYPE);
                     $idAlias = $useDoctrineWalkers ? DoctrineWhereInWalker::PAGINATOR_ID_ALIAS : WhereInWalker::PAGINATOR_ID_ALIAS;
                     foreach ($ids as $i => $id) {
                         $whereInQuery->setParameter($idAlias . '_' . ++$i, $id, $type->getName());
                     }
                 }
                 $result = $whereInQuery->execute();
             } else {
                 $event->target->setFirstResult($event->getOffset())->setMaxResults($event->getLimit());
                 $result = $event->target->execute();
             }
         } else {
             $result = array();
             // count is 0
         }
         $event->items = $result;
         $event->stopPropagation();
     }
 }