diff --git a/core/legacy/ViewDefinitionsHandler.php b/core/legacy/ViewDefinitionsHandler.php new file mode 100644 index 000000000..7cf75685c --- /dev/null +++ b/core/legacy/ViewDefinitionsHandler.php @@ -0,0 +1,110 @@ + '', + 'width' => '', + 'label' => '', + 'link' => false, + 'default' => false, + 'module' => '', + 'id' => '', + 'sortable' => false + ]; + + /** + * @inheritDoc + */ + public function getHandlerKey(): string + { + return self::HANDLER_KEY; + } + + /** + * @var ModuleNameMapperInterface + */ + protected $moduleNameMapper; + + + /** + * SystemConfigHandler constructor. + * @param string $projectDir + * @param string $legacyDir + * @param string $legacySessionName + * @param string $defaultSessionName + * @param LegacyScopeState $legacyScopeState + * @param ModuleNameMapperInterface $moduleNameMapper + */ + public function __construct( + string $projectDir, + string $legacyDir, + string $legacySessionName, + string $defaultSessionName, + LegacyScopeState $legacyScopeState, + ModuleNameMapperInterface $moduleNameMapper + ) { + parent::__construct($projectDir, $legacyDir, $legacySessionName, $defaultSessionName, $legacyScopeState); + $this->moduleNameMapper = $moduleNameMapper; + } + + /** + * @param string $moduleName + * @return ViewDefinition + * @throws Exception + */ + public function getListViewDef(string $moduleName): ViewDefinition + { + $this->init(); + /* @noinspection PhpIncludeInspection */ + include_once 'include/ListView/ListViewFacade.php'; + $moduleName = $this->validateModuleName($moduleName); + $displayColumns = ListViewFacade::getDisplayColumns($moduleName); + $data = []; + foreach ($displayColumns as $key => $column) { + $column = array_merge(self::$listViewColumnInterface, $column); + $column['fieldname'] = $key; + $data[] = $column; + } + $viewDef = new ViewDefinition(); + $viewDef->setId($moduleName); + $viewDef->setListView($data); + + $this->close(); + + return $viewDef; + } + + /** + * @param $moduleName + * @return string + */ + private function validateModuleName($moduleName): string + { + $moduleName = $this->moduleNameMapper->toLegacy($moduleName); + + if (!$this->moduleNameMapper->isValidModule($moduleName)) { + throw new InvalidArgumentException('Invalid module name: ' . $moduleName); + } + + return $moduleName; + } +} diff --git a/core/src/DataProvider/ViewDefinitionItemDataProvider.php b/core/src/DataProvider/ViewDefinitionItemDataProvider.php new file mode 100644 index 000000000..cabb8b79b --- /dev/null +++ b/core/src/DataProvider/ViewDefinitionItemDataProvider.php @@ -0,0 +1,57 @@ +viewDefHandler = $viewDefHandler; + } + + /** + * Define supported resources + * @param string $resourceClass + * @param string|null $operationName + * @param array $context + * @return bool + */ + public function supports(string $resourceClass, string $operationName = null, array $context = []): bool + { + return ViewDefinition::class === $resourceClass; + } + + /** + * @param string $resourceClass + * @param array|int|string $id + * @param string|null $operationName + * @param array $context + * @return ViewDefinition|null + */ + public function getItem( + string $resourceClass, + $id, + string $operationName = null, + array $context = [] + ): ?ViewDefinition { + return $this->viewDefHandler->getListViewDef($id); + } +} diff --git a/core/src/Entity/ViewDefinition.php b/core/src/Entity/ViewDefinition.php new file mode 100644 index 000000000..5f303cfee --- /dev/null +++ b/core/src/Entity/ViewDefinition.php @@ -0,0 +1,198 @@ +id; + } + + /** + * @param string $id + */ + public function setId($id): void + { + $this->id = $id; + } + + /** + * Get Detail View metadata + * @return array + */ + public function getDetailView(): ?array + { + return $this->detailView; + } + + /** + * Set Detail view metadata + * @param array $detailView + */ + public function setDetailView(array $detailView): void + { + $this->detailView = $detailView; + } + + /** + * Get EditView Metadata + * @return array + */ + public function getEditView(): ?array + { + return $this->editView; + } + + /** + * Set EditView Metadata + * @param array $editView + */ + public function setEditView(array $editView): void + { + $this->editView = $editView; + } + + /** + * Get List View Metadata + * @return array + */ + public function getListView(): ?array + { + return $this->listView; + } + + /** + * Set List View metadata + * @param array $listView + */ + public function setListView(array $listView): void + { + $this->listView = $listView; + } + + /** + * Get Search Metadata + * @return array + */ + public function getSearch(): ?array + { + return $this->search; + } + + /** + * Set Search Metadata + * @param array $search + * @return ViewDefinition + */ + public function setSearch(array $search): ViewDefinition + { + $this->search = $search; + + return $this; + } +} diff --git a/core/src/Service/ViewDefinitionsProviderInterface.php b/core/src/Service/ViewDefinitionsProviderInterface.php new file mode 100644 index 000000000..1f4744e9f --- /dev/null +++ b/core/src/Service/ViewDefinitionsProviderInterface.php @@ -0,0 +1,16 @@ +tester->getProjectDir(); + $legacyDir = $this->tester->getLegacyDir(); + $legacySessionName = $this->tester->getLegacySessionName(); + $defaultSessionName = $this->tester->getDefaultSessionName(); + + $legacyScope = $this->tester->getLegacyScope(); + + $moduleNameMapper = new ModuleNameMapperHandler( + $projectDir, + $legacyDir, + $legacySessionName, + $defaultSessionName, + $legacyScope + ); + + $this->viewDefinitionHandler = new ViewDefinitionsHandler( + $projectDir, + $legacyDir, + $legacySessionName, + $defaultSessionName, + $legacyScope, + $moduleNameMapper + ); + + $this->viewDefinition = $this->viewDefinitionHandler->getListViewDef('Accounts'); + } +}