/** * {@inheritDoc} */ public function visitMetadata(DatagridConfiguration $config, MetadataObject $data) { $currentUser = $this->getCurrentUser(); if (!$currentUser) { return; } $gridName = $config->getName(); $gridViews = $this->getGridViewRepository()->findGridViews($this->aclHelper, $currentUser, $gridName); /** Set default columns data to initial state from config */ $this->setInitialStateColumnsOrder($config, $data); /** Set default columns data to metadata */ $this->setColumnsOrder($config, $data); if (!$gridViews) { $this->setStateColumnsOrder($config, $data); } /** Update columns data from url if exists */ $urlColumnsData = $this->updateColumnsDataFromUrl($config, $data); if (!$gridViews) { return; } $newGridView = $this->createNewGridView($config, $data); $currentState = $data->offsetGet('state'); /** Get columns data from config */ $columnsData = $this->getColumnsWithOrder($config); /** Get columns data from grid view */ $gridViewColumnsData = null; if (isset($currentState['gridView'])) { foreach ($gridViews as $gridView) { if ((int) $currentState['gridView'] === $gridView->getId()) { /** Get columns state from current view */ $gridViewColumnsData = $gridView->getColumnsData(); /** Get columns data from current view */ $columnsData = $gridViewColumnsData; break; } } } /** Get columns data from config or current view if no data in URL */ if (!empty($urlColumnsData)) { if ($this->columnsHelper->compareColumnsData($gridViewColumnsData, $urlColumnsData)) { $columnsData = $gridViewColumnsData; } else { $columnsData = $urlColumnsData; } } /** Save current columns state or restore to default view __all__ setting config columns data */ $this->setState($data, $columnsData); /** Set config columns data */ $this->setGridViewDefaultOrder($data, $newGridView->getColumnsData()); }
/** * @param array $viewData * @param array $urlData * @param array $result * * @dataProvider compareColumnsDataProvider */ public function testCompareColumnsData($viewData, $urlData, $result) { $isEqual = $this->columnsHelper->compareColumnsData($viewData, $urlData); static::assertEquals($isEqual, $result); }