Ejemplo n.º 1
0
 /**
  * Prepare Grid for Drawing
  *
  * @return self
  *
  * @throws \Exception
  */
 protected function prepare()
 {
     if ($this->prepared) {
         return $this;
     }
     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, $this->actionsColumnTitle, $rowActions);
                 if ($this->actionsColumnSize > -1) {
                     $actionColumn->setSize($this->actionsColumnSize);
                 }
                 $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)));
     }
     $this->prepared = true;
     return $this;
 }