Esempio n. 1
0
 /**
  * Adds a sorting to the query if request
  * parameters were set for sorting
  *
  * @param ItemsEvent $event
  */
 public function items(ItemsEvent $event)
 {
     $params = $this->request->query->all();
     if (isset($params[$event->getAlias() . 'sort'])) {
         $query = $event->getQuery();
         $field = $params[$event->getAlias() . 'sort'];
         $direction = strtolower($params[$event->getAlias() . 'direction']) == 'asc' ? 1 : -1;
         $reflClass = new \ReflectionClass('Doctrine\\MongoDB\\Query\\Query');
         $reflProp = $reflClass->getProperty('query');
         $reflProp->setAccessible(true);
         $queryOptions = $reflProp->getValue($query);
         $queryOptions['sort'][$field] = $direction;
         $reflProp->setValue($query, $queryOptions);
     }
 }
 /**
  * Adds a sorting to the query if request
  * parameters were set for sorting
  *
  * @param ItemsEvent $event
  */
 public function items(ItemsEvent $event)
 {
     $params = $this->request->query->all();
     $sortKey = $event->getAlias() . 'sort';
     $directionKey = $event->getAlias() . 'direction';
     if (isset($params[$sortKey])) {
         $query = $event->getQuery();
         $whitelist = $query->getHint(OrderByWalker::HINT_PAGINATOR_SORT_FIELDS_WHITELIST);
         if (isset($whitelist[$params[$sortKey]])) {
             $sortField = $whitelist[$params[$sortKey]];
         } elseif ($whitelist === false) {
             $sortField = $params[$sortKey];
         } else {
             //passed field name do not match to whitelist, skip sorting
             return;
         }
         $parts = explode('.', $sortField);
         if (count($parts) != 2) {
             throw new UnexpectedValueException('Invalid sort key came by request, should be example: "article.title"');
         }
         $query->setHint(OrderByWalker::HINT_PAGINATOR_SORT_ALIAS, current($parts))->setHint(OrderByWalker::HINT_PAGINATOR_SORT_DIRECTION, stripos($params[$directionKey], 'desc') === false ? 'ASC' : 'DESC')->setHint(OrderByWalker::HINT_PAGINATOR_SORT_FIELD, end($parts));
         QueryHelper::addCustomTreeWalker($query, self::TREE_WALKER_ORDER_BY);
     }
 }