Пример #1
0
 /**
  * @param DataGridInputState $state
  * @return GenericEntityFilter
  * @throws \Exception
  */
 public function createGenericEntityFilterByState(DataGridInputState $state)
 {
     $filter = new GenericEntityFilter($state->getSourceDTO()->getAccessQuery());
     $properties = $this->createEntityPropertiesArray($state->getSourceDTO());
     $restrictiveProperties = DataGridEntityProperty::getRestrictiveProperties($properties);
     $headerProperties = DataGridEntityProperty::getHeaderProperties($properties);
     if (count($restrictiveProperties) > 0) {
         $filter->setRestrictiveProperties($restrictiveProperties);
     }
     if (null !== $state->getOrderByDirection() && null !== $state->getOrderByField()) {
         $orderFieldExploded = explode('.', $state->getOrderByField());
         if (count($orderFieldExploded) < 2) {
             throw new \Exception('misformatted propertyId found on field ' . $state->getOrderByField());
         }
         $filter->setOrderedBy(new OrderBy(new GenericEntityProperty($orderFieldExploded[0], $orderFieldExploded[1]), $state->getOrderByDirection()));
     }
     if (null !== $state->getFilterStr()) {
         $filter->setSearch(new Search($state->getFilterStr(), $headerProperties));
     }
     if (null !== $state->getPage() && null !== $state->getLimit()) {
         $filter->setOffset($state->getPage() * $state->getLimit());
     }
     if (null !== $state->getLimit()) {
         $filter->setLimit($state->getLimit());
     }
     return $filter;
 }