Esempio n. 1
0
 /**
  * @param GridInterface|string $grid
  *
  * @return $this
  *
  * @throws \Exception
  */
 public function create($grid)
 {
     if ($grid instanceof GridCollection) {
         $this->collection = $grid;
         $activeGrid = $this->request->query->get('grid');
         $this->collection->setActive($activeGrid);
         $grid = $this->collection->getGrid($activeGrid)['grid'];
     }
     if (is_string($grid)) {
         $grid = $this->container->get($grid);
     }
     if (!$grid instanceof GridInterface) {
         throw new \Exception('Grid needs to implement GridInterface');
     }
     $this->entity = $grid;
     $source = $grid->getSource();
     $this->filters = new Filters($this->request->get('filter'));
     $grid->getFilters($this->filters);
     $searchString = $this->request->get('search');
     $source->manipulateQuery(function (QueryBuilder $queryBuilder) use($grid, $searchString) {
         if ($this->filters->isFilterActive()) {
             $filter = $this->filters->getActiveFilter();
             $filter($queryBuilder);
         }
         if (!empty($searchString)) {
             $this->searchString = $searchString;
             $grid->search($queryBuilder, $searchString);
         }
     });
     // Attach the source to the grid
     $this->setSource($source);
     $grid->getRowActions($collection = new Collection());
     if (!$collection->isEmpty()) {
         $actionsRow = $this->getActionColumn($collection);
         $this->addColumn($actionsRow, 100);
     }
     $massActions = $grid->getMassActions();
     array_walk($massActions, array($this, 'addMassAction'));
     $this->createHash();
     $requestData = $this->request->get($this->getHash());
     if (1 === count($requestData) && isset($requestData[self::REQUEST_QUERY_MASS_ACTION_ALL_KEYS_SELECTED]) && $requestData[self::REQUEST_QUERY_MASS_ACTION_ALL_KEYS_SELECTED] === '0') {
         $this->request->request->remove($this->getHash());
     }
     return $this;
 }