/** * Prepare Grid for Drawing * * @return self * * @throws \Exception */ protected function prepare() { if ($this->source->isDataLoaded()) { $this->rows = $this->source->executeFromData($this->columns->getIterator(true), $this->page, $this->limit, $this->maxResults); } else { $this->rows = $this->source->execute($this->columns->getIterator(true), $this->page, $this->limit, $this->maxResults, $this->dataJunction); } if (!$this->rows instanceof Rows) { throw new \Exception('Source have to return Rows object.'); } if (count($this->rows) == 0 && $this->page > 0) { $this->page = 0; $this->prepare(); return $this; } //add row actions column if (count($this->rowActions) > 0) { foreach ($this->rowActions as $column => $rowActions) { if ($actionColumn = $this->columns->hasColumnById($column, true)) { $actionColumn->setRowActions($rowActions); } else { $actionColumn = new ActionsColumn($column, 'Actions', $rowActions); if ($this->actionsColumnSize > -1) { $actionColumn->setSize($this->actionsColumnSize); } if (isset($this->actionsColumnSeparator)) { $actionColumn->setSeparator($this->actionsColumnSeparator); } $this->columns->addColumn($actionColumn); } } } //add mass actions column if (count($this->massActions) > 0) { $this->columns->addColumn(new MassActionColumn(), 1); } $primaryColumnId = $this->columns->getPrimaryColumn()->getId(); foreach ($this->rows as $row) { $row->setPrimaryField($primaryColumnId); } //@todo refactor autohide titles when no title is set if (!$this->showTitles) { $this->showTitles = false; foreach ($this->columns as $column) { if (!$this->showTitles) { break; } if ($column->getTitle() != '') { $this->showTitles = true; break; } } } //get size if ($this->source->isDataLoaded()) { $this->source->populateSelectFiltersFromData($this->columns); $this->totalCount = $this->source->getTotalCountFromData($this->maxResults); } else { $this->source->populateSelectFilters($this->columns); $this->totalCount = $this->source->getTotalCount($this->maxResults); } if (!is_int($this->totalCount)) { throw new \Exception(sprintf('Source function getTotalCount need to return integer result, returned: %s', gettype($this->totalCount))); } return $this; }