/** * @param TableModel $table */ public function __construct(TableModel $table) { parent::__construct('Display'); $this->tableModel = $table; $tableHeaders = $this->tableModel->getTableHeaders(); // Group checkboxes by property $columnGroups = array(); foreach ($tableHeaders as $tableHeader) { /** @var TableHeaderCellModel $tableHeader */ $columnNameSegments = explode('.', $tableHeader->getName()); if (!is_array($columnNameSegments) || empty($columnNameSegments)) { continue; } // Create all values for each property $label = $tableHeader->getName(); $columnGroupName = 'base'; if (count($columnNameSegments) > 1) { $columnGroupName = $columnNameSegments[0]; $segments = $columnNameSegments; unset($segments[0]); $label = implode('.', $segments); } if (!array_key_exists($columnGroupName, $columnGroups)) { $columnGroups[$columnGroupName] = array(); } $valueOption = array('value' => $tableHeader->getName(), 'label' => $label, 'selected' => $tableHeader->isVisible()); $columnGroups[$columnGroupName][] = $valueOption; } // Create the actual form element per property foreach ($columnGroups as $property => $checkboxValues) { $entityColumn = new NestedSettingsFieldset($property, $checkboxValues); $this->add($entityColumn); } $this->add(array('name' => 'submit', 'type' => 'submit', 'label' => '<span class="glyphicon glyphicon glyphicon-refresh"></span>', 'attributes' => array('value' => 'Apply', 'class' => 'btn btn-default'))); }
/** * If the TableModel holds information about filters that where applied, we pass them into the form element * * @param Element $element * @param string $fieldName * @return Element */ protected function setElementCurrentValue(Element $element, $fieldName) { $filter = $this->tableModel->getTableFilter($fieldName); if ($filter && !empty($filter->getSelectedValue())) { $element->setValue($filter->getSelectedValue()); } return $element; }
/** * Retrieve an new TableModel * based on your data configuration in this object * @return Table */ public function getTable() { if (empty($this->queryBuilder->getSelectedTableColumns())) { $this->filtersPrepared = false; $this->selectColumns($this->getModuleOptions()->getDefaultColumns()); } $dataTypes = array_merge($this->queryBuilder->getTableColumnTypes(), $this->moduleOptions->getRenders()); $filterValues = $this->resolveAssociationColumns ? $this->queryBuilder->preLoadAllAssociationFields() : array(); $tableHeaders = $this->sortColumns($this->queryBuilder->getAvailableTableColumns(), $this->moduleOptions->getDefaultColumns()); $table = new Table(); $table->setDataTypes($dataTypes); $table->addHeaders($tableHeaders, $this->queryBuilder->getSelectedTableColumns(), $this->moduleOptions->getColumnWidths()); $table->addRows($this->queryBuilder->getResultSet()); $table->setPrefetchedFilterValues($filterValues); $table->addFilters($this->searchFilterHelper->getFilters(), $this->usedFilters); $table->setPageNumber($this->page); $table->setMaxPageNumber($this->calculateMaxPages()); $table->setOptionRoutes($this->moduleOptions->getOptionRoutes()); return $table; }
/** * @param TableModel $table */ public function __construct(TableModel $table) { parent::__construct('Display'); $this->tableModel = $table; $tableHeaders = $this->tableModel->getTableHeaders(); // Group checkboxes by property $columnGroups = array(); foreach ($tableHeaders as $tableHeader) { /** @var TableHeaderCellModel $tableHeader */ $columnNameSegments = explode('.', $tableHeader->getName()); if (!array_key_exists($columnNameSegments[0], $columnGroups)) { $columnGroups[$columnNameSegments[0]] = array(); } } // Create all values for each property foreach ($tableHeaders as $tableHeader) { $columnNameSegments = explode('.', $tableHeader->getName()); $label = $tableHeader->getName(); if (count($columnNameSegments) > 1) { $segments = $columnNameSegments; unset($segments[0]); $label = implode('.', $segments); } $valueOption = array('value' => $tableHeader->getName(), 'label' => $label, 'selected' => $tableHeader->isVisible()); $columnGroups[$columnNameSegments[0]][] = $valueOption; } // Create the actual form element per property foreach ($columnGroups as $property => $checkboxValues) { $multiCheckbox = new MultiCheckbox($this->checkboxName); $multiCheckbox->setOptions(array('inline' => false, 'value_options' => $checkboxValues)); $isParentField = strpos($checkboxValues[0]['value'], ".") !== false; if (count($checkboxValues) >= 2 || count($checkboxValues) == 1 && $isParentField) { $multiCheckbox->setLabel($property); } // Dirty hack, because this->add() does not detect element or fieldset naming conflicts $this->iterator->insert($property, $multiCheckbox, 0); } $this->add(array('name' => 'submit', 'type' => 'submit', 'label' => '<span class="glyphicon glyphicon glyphicon-refresh"></span>', 'attributes' => array('value' => 'Apply', 'class' => 'btn knopSearch'))); }
/** * To prevent double foreach loops, pre render the columns in a private array */ public function prepareTable() { foreach ($this->tableModel->getTableFilters() as $filter) { $header = $filter->getHeader(); if (!is_null($header) && $header->isVisible()) { $this->displayedHeaders[] = $header; continue; } // Its a special filter, but only add it when it has an instance if (!is_null($filter->getInstance())) { $this->additionalFilters[$filter->getName()] = $filter; } } }
/** * If the TableModel holds information about filters that where applied, we pass them into the form element * * @param ElementInterface $element * @param string $fieldName * @param TableModel $tableModel * @return Element */ public static function setElementCurrentValue(ElementInterface $element, $fieldName, TableModel $tableModel) { $filter = $tableModel->getTableFilter($fieldName); if ($filter && !empty($filter->getSelectedValue())) { $element->setValue($filter->getSelectedValue()); } return $element; }