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(); } }
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(); } }
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(); } }
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(); } }
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(); }
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(); } }
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(); } } }
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(); } } }
/** * @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(); }
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(); } }
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); }
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(); } }