diff --git a/src/Api/Data/OverviewPageInterface.php b/src/Api/Data/OverviewPageInterface.php index 88fb96f..dc36008 100644 --- a/src/Api/Data/OverviewPageInterface.php +++ b/src/Api/Data/OverviewPageInterface.php @@ -20,12 +20,11 @@ interface OverviewPageInterface public const NAME = 'name'; public const URL_PATH = 'url_path'; public const META_KEYWORDS = 'meta_keywords'; - public const CATEGORY_ID = 'category_id'; public const PAGE_ID = 'page_id'; public const META_DESCRIPTION = 'meta_description'; - public const STORE_IDS = 'store_ids'; public const CREATED_AT = 'created_at'; public const UPDATED_AT = 'updated_at'; + public const STORE_ID = 'store_id'; /** * Get page_id @@ -33,6 +32,12 @@ interface OverviewPageInterface */ public function getPageId(); + /** + * Get store_id + * @return int + */ + public function getStoreId(): int; + /** * Get active * @return bool @@ -87,12 +92,6 @@ public function getContentFirst(); */ public function getContentLast(); - /** - * Get active stores IDs - * @return int[] - */ - public function getStoreIds(): array; - /** * @return string */ @@ -102,4 +101,10 @@ public function getCreatedAt(): string; * @return string */ public function getUpdatedAt(): string; + + /** + * @param int $storeId + * @return OverviewPageInterface + */ + public function setStoreId(int $storeId): OverviewPageInterface; } diff --git a/src/Api/OverviewPageRepositoryInterface.php b/src/Api/OverviewPageRepositoryInterface.php index 1c8c251..96786de 100644 --- a/src/Api/OverviewPageRepositoryInterface.php +++ b/src/Api/OverviewPageRepositoryInterface.php @@ -20,11 +20,12 @@ public function save(OverviewPageInterface $page): OverviewPageInterface; /** * Retrieve Page * @param int $pageId + * @param int $storeId * @return \Emico\AttributeLanding\Api\Data\OverviewPageInterface * @throws \Magento\Framework\Exception\LocalizedException * @throws NoSuchEntityException */ - public function getById(int $pageId): OverviewPageInterface; + public function getByIdWithStore(int $pageId, int $storeId): OverviewPageInterface; /** * Retrieve Page matching the specified criteria. diff --git a/src/Controller/Adminhtml/OverviewPage/Edit.php b/src/Controller/Adminhtml/OverviewPage/Edit.php index 065814c..2bf7cc8 100644 --- a/src/Controller/Adminhtml/OverviewPage/Edit.php +++ b/src/Controller/Adminhtml/OverviewPage/Edit.php @@ -55,10 +55,11 @@ public function __construct( public function execute() { $id = $this->getRequest()->getParam('page_id'); + $storeId = (int)$this->getRequest()->getParam('store', 0); if ($id) { try { - $landingPage = $this->overviewPageRepository->getById($id); + $landingPage = $this->overviewPageRepository->getByIdWithStore($id, $storeId); } catch (NoSuchEntityException $exception) { $this->messageManager->addErrorMessage(__('This Page no longer exists.')); diff --git a/src/Controller/Adminhtml/OverviewPage/Save.php b/src/Controller/Adminhtml/OverviewPage/Save.php index a5e33dc..c3d1355 100644 --- a/src/Controller/Adminhtml/OverviewPage/Save.php +++ b/src/Controller/Adminhtml/OverviewPage/Save.php @@ -68,23 +68,31 @@ public function execute() $resultRedirect = $this->resultRedirectFactory->create(); /** @phpstan-ignore-next-line */ $data = $this->getRequest()->getPostValue(); + $data[OverviewPageInterface::STORE_ID] = (int)$data[OverviewPageInterface::STORE_ID]; if (!$data) { return $resultRedirect->setPath('*/*/'); } - $id = $this->getRequest()->getParam('page_id'); + $id = $this->getRequest()->getParam('page_id') ?? null; if (!$id) { $page = $this->overviewPageFactory->create(); } else { try { - $page = $this->overviewPageRepository->getById($id); + $page = $this->overviewPageRepository->getByIdWithStore( + $id, + (int)$data[OverviewPageInterface::STORE_ID] + ); } catch (NoSuchEntityException $exception) { $this->messageManager->addErrorMessage(__('This Page no longer exists.')); return $resultRedirect->setPath('*/*/'); } } + if ($id) { + $data['id'] = $id; + } + $this->dataObjectHelper->populateWithArray($page, $data, OverviewPageInterface::class); try { @@ -94,7 +102,13 @@ public function execute() $this->dataPersistor->clear('emico_attributelanding_overviewpage'); if ($this->getRequest()->getParam('back')) { - return $resultRedirect->setPath('*/*/edit', ['page_id' => $page->getPageId()]); + return $resultRedirect->setPath( + '*/*/edit', + [ + 'page_id' => $page->getPageId(), + 'store' => $page->getStoreId() + ] + ); } return $resultRedirect->setPath('*/*/'); @@ -105,6 +119,6 @@ public function execute() } $this->dataPersistor->set('emico_attributelanding_overviewpage', $data); - return $resultRedirect->setPath('*/*/edit', ['page_id' => $this->getRequest()->getParam('page_id')]); + return $resultRedirect->setPath('*/*/edit', ['page_id' => $page->getPageId(), 'store' => $page->getStoreId()]); } } diff --git a/src/Controller/OverviewPage/View.php b/src/Controller/OverviewPage/View.php index ae1fe83..8f4ff28 100644 --- a/src/Controller/OverviewPage/View.php +++ b/src/Controller/OverviewPage/View.php @@ -14,6 +14,7 @@ use Magento\Framework\Controller\ResultInterface; use Magento\Framework\Exception\NotFoundException; use Magento\Framework\View\Result\PageFactory; +use Magento\Store\Model\StoreManagerInterface; class View extends Action { @@ -39,12 +40,14 @@ class View extends Action * @param PageFactory $resultPageFactory * @param LandingPageContext $landingPageContext * @param OverviewPageRepositoryInterface $overviewPageRepository + * @param StoreManagerInterface $storeManager */ public function __construct( Context $context, PageFactory $resultPageFactory, LandingPageContext $landingPageContext, - OverviewPageRepositoryInterface $overviewPageRepository + OverviewPageRepositoryInterface $overviewPageRepository, + private readonly StoreManagerInterface $storeManager ) { $this->resultPageFactory = $resultPageFactory; $this->overviewPageRepository = $overviewPageRepository; @@ -61,8 +64,9 @@ public function __construct( */ public function execute(): ResultInterface { - $pageId = $this->getRequest()->getParam('id'); - $overviewPage = $this->overviewPageRepository->getById($pageId); + $pageId = (int)$this->getRequest()->getParam('id'); + $storeId = (int)$this->storeManager->getStore()->getId(); + $overviewPage = $this->overviewPageRepository->getByIdWithStore($pageId, $storeId); if (!$overviewPage->isActive()) { throw new NotFoundException(__('Page not active')); diff --git a/src/Model/OverviewPage.php b/src/Model/OverviewPage.php index 45e4f1c..218b5b1 100644 --- a/src/Model/OverviewPage.php +++ b/src/Model/OverviewPage.php @@ -24,7 +24,7 @@ protected function _construct() /** * Get page_id - * @return int|null + * @return int */ public function getPageId() { @@ -213,21 +213,21 @@ public function setContentLast($contentLast): OverviewPageInterface } /** - * Get active stores IDs - * @return array + * Get active stores ID + * @return int */ - public function getStoreIds(): array + public function getStoreId(): int { - return explode(',', $this->getData(self::STORE_IDS)); + return (int)$this->getData(self::STORE_ID); } /** - * @param int[] $storeIds + * @param int $storeId * @return OverviewPageInterface */ - public function setStoreIds($storeIds): OverviewPageInterface + public function setStoreId(int $storeId): OverviewPageInterface { - return $this->setData(self::STORE_IDS, implode(',', $storeIds)); + return $this->setData(self::STORE_ID, $storeId); } /** @@ -277,4 +277,50 @@ public function getUpdatedAt(): string { return $this->getData(OverviewPageInterface::UPDATED_AT); } + + /** + * @return array + */ + public function getOverviewPageDataWithoutStore(): array + { + $fields = [ + OverviewPageInterface::PAGE_ID, + OverviewPageInterface::CREATED_AT, + OverviewPageInterface::UPDATED_AT, + OverviewPageInterface::URL_PATH, + ]; + + if ($this->getData(OverviewPageInterface::STORE_ID) === 0) { + $fields[] = OverviewPageInterface::NAME; + } + + return array_combine( + $fields, + array_map(fn($field) => $this->getData($field), $fields) + ); + } + + /** + * @return array + */ + public function getOverviewPageDataForStore(): array + { + $fields = [ + OverviewPageInterface::NAME, + OverviewPageInterface::STORE_ID, + OverviewPageInterface::ACTIVE, + OverviewPageInterface::URL_PATH, + OverviewPageInterface::HEADING, + OverviewPageInterface::META_TITLE, + OverviewPageInterface::META_KEYWORDS, + OverviewPageInterface::META_DESCRIPTION, + OverviewPageInterface::CONTENT_FIRST, + OverviewPageInterface::CONTENT_LAST, + ]; + + return array_combine( + $fields, + array_map(fn($field) => $this->getData($field), $fields) + ); + } } diff --git a/src/Model/OverviewPage/DataProvider.php b/src/Model/OverviewPage/DataProvider.php index 50de301..4ae96e8 100644 --- a/src/Model/OverviewPage/DataProvider.php +++ b/src/Model/OverviewPage/DataProvider.php @@ -6,6 +6,8 @@ use Emico\AttributeLanding\Model\ResourceModel\OverviewPage\CollectionFactory; use Magento\Framework\App\Request\DataPersistorInterface; use Magento\Ui\DataProvider\AbstractDataProvider; +use Emico\AttributeLanding\Model\OverviewPageRepository; +use Magento\Framework\App\Request\Http; class DataProvider extends AbstractDataProvider { @@ -32,6 +34,8 @@ class DataProvider extends AbstractDataProvider * @param string $requestFieldName * @param CollectionFactory $collectionFactory * @param DataPersistorInterface $dataPersistor + * @param Http $request + * @param OverviewPageRepository $overviewPageRepository * @param array $meta * @param array $data */ @@ -41,6 +45,8 @@ public function __construct( $requestFieldName, CollectionFactory $collectionFactory, DataPersistorInterface $dataPersistor, + private readonly Http $request, + private readonly overviewPageRepository $overviewPageRepository, array $meta = [], array $data = [] ) { @@ -61,11 +67,18 @@ public function getData() return $this->loadedData; } + $storeId = (int)$this->request->getParam('store', 0); /** @phpstan-ignore-next-line */ $items = $this->collection->getItems(); foreach ($items as $model) { + $storeData = $this->overviewPageRepository->getByIdWithStore($model->getPageId(), $storeId)->getData(); + + foreach ($storeData as $key => $value) { + $modelData[$key] = $value; + } + /** @var OverviewPage $model */ - $this->loadedData[$model->getPageId()] = $model->getData(); + $this->loadedData[$model->getPageId()] = $modelData; } $data = $this->dataPersistor->get('emico_attributelanding_overviewpage'); diff --git a/src/Model/OverviewPageRepository.php b/src/Model/OverviewPageRepository.php index 09cfe6f..c660fdf 100644 --- a/src/Model/OverviewPageRepository.php +++ b/src/Model/OverviewPageRepository.php @@ -12,10 +12,12 @@ use Emico\AttributeLanding\Api\Data\PageSearchResultsInterfaceFactory; use Emico\AttributeLanding\Model\ResourceModel\OverviewPage as ResourcePage; use Magento\Framework\Exception\CouldNotSaveException; +use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Exception\NoSuchEntityException; use Magento\Framework\Exception\CouldNotDeleteException; use Emico\AttributeLanding\Model\ResourceModel\OverviewPage\CollectionFactory as PageCollectionFactory; use Emico\AttributeLanding\Api\Data\OverviewPageInterfaceFactory; +use Magento\Store\Model\StoreManagerInterface; class OverviewPageRepository implements OverviewPageRepositoryInterface { @@ -56,6 +58,7 @@ class OverviewPageRepository implements OverviewPageRepositoryInterface * @param PageSearchResultsInterfaceFactory $searchResultsFactory * @param CollectionProcessorInterface $collectionProcessor * @param SearchCriteriaBuilder $searchCriteriaBuilder + * @param StoreManagerInterface $storeManager */ public function __construct( ResourcePage $resource, @@ -63,7 +66,8 @@ public function __construct( PageCollectionFactory $pageCollectionFactory, PageSearchResultsInterfaceFactory $searchResultsFactory, CollectionProcessorInterface $collectionProcessor, - SearchCriteriaBuilder $searchCriteriaBuilder + SearchCriteriaBuilder $searchCriteriaBuilder, + private readonly StoreManagerInterface $storeManager ) { $this->resource = $resource; $this->pageCollectionFactory = $pageCollectionFactory; @@ -81,8 +85,13 @@ public function __construct( public function save(OverviewPageInterface $page): OverviewPageInterface { try { - /** @var LandingPage $page */ - $this->resource->save($page); // @phpstan-ignore-line + /** @var OverviewPage $page */ + $parentOverviewPage = $this->dataPageFactory->create(); + $parentOverviewPage->setData($page->getOverviewPageDataWithoutStore()); + + $this->resource->save($parentOverviewPage); // @phpstan-ignore-line + $page->setPageId($parentOverviewPage->getPageId()); + $this->resource->saveOverviewPageStoreData($page); } catch (Exception $exception) { throw new CouldNotSaveException( __( @@ -164,12 +173,15 @@ public function deleteById(int $pageId): bool /** * @return OverviewPageInterface[] - * @throws \Magento\Framework\Exception\LocalizedException + * @throws LocalizedException */ public function findAllActive(): array { + $storeId = $this->storeManager->getStore()->getId(); + $searchCriteria = $this->searchCriteriaBuilder ->addFilter(OverviewPageInterface::ACTIVE, 1) + ->addFilter(OverviewPageInterface::STORE_ID, [$storeId, 0], 'in') ->create(); $result = $this->getList($searchCriteria); @@ -191,4 +203,69 @@ public function getByLandingPage(LandingPageInterface $landingPage): OverviewPag return $this->getById($landingPage->getOverviewPageId()); } + + /** + * @param int $pageId + * @param int $storeId + * @return OverviewPageInterface + * @throws NoSuchEntityException + */ + public function getByIdWithStore(int $pageId, int $storeId): OverviewPageInterface + { + $overviewPage = $this->getById($pageId); + + $storeData = $this->resource->getOverviewPageStoreData($pageId, $storeId); + + if (!empty($storeData)) { + unset($storeData['id']); + $overviewPage->setData($storeData); + } else { + $defaultData = $this->resource->getOverviewPageStoreData($pageId, 0); + if (!empty($defaultData)) { + unset($defaultData['id']); + $overviewPage->setData($defaultData); + } + + $overviewPage->setData(LandingPageInterface::STORE_ID, $storeId); + } + + return $overviewPage; + } + + /** + * @param int $pageId + * @return OverviewPageInterface[] + */ + public function getAllPagesById(int $pageId): array + { + $storeData = $this->resource->getAllOverviewPageStoreData($pageId); + $pages = []; + + foreach ($storeData as $data) { + $page = $this->dataPageFactory->create(); + $page->setData($data); + $pages[] = $page; + } + + return $pages; + } + + /** + * @param OverviewPageInterface $page + * @return void + * @throws CouldNotSaveException + */ + public function saveOverviewPageStoreData(OverviewPageInterface $page): void + { + try { + $this->resource->saveOverviewPageStoreData($page); + } catch (Exception $exception) { + throw new CouldNotSaveException( + __( + 'Could not save the overview page store data: %1', + $exception->getMessage() + ) + ); + } + } } diff --git a/src/Model/ResourceModel/OverviewPage.php b/src/Model/ResourceModel/OverviewPage.php index c277072..9df3377 100644 --- a/src/Model/ResourceModel/OverviewPage.php +++ b/src/Model/ResourceModel/OverviewPage.php @@ -8,6 +8,7 @@ namespace Emico\AttributeLanding\Model\ResourceModel; use Emico\AttributeLanding\Api\Data\LandingPageInterface; +use Emico\AttributeLanding\Api\Data\OverviewPageInterface; use Magento\Framework\Model\ResourceModel\Db\AbstractDb; class OverviewPage extends AbstractDb @@ -16,4 +17,67 @@ protected function _construct() { $this->_init('emico_attributelanding_overviewpage', LandingPageInterface::PAGE_ID); } + + /** + * @param int $overviewPageId + * @param int $storeId + * @return array + */ + public function getOverviewPageStoreData(int $overviewPageId, int $storeId = 0): array + { + $connection = $this->getConnection(); + $select = $connection->select() + ->from(['ps' => $this->getTable('emico_attributelanding_overviewpage_store')]) + ->where('ps.page_id = ?', $overviewPageId) + ->where('store_id = ?', $storeId); + + $result = $connection->fetchRow($select); + + if ($result) { + return $result; + } + + return []; + } + + /** + * @param int $overviewPageId + * @return array + */ + public function getAllOverviewPageStoreData(int $overviewPageId): array + { + $connection = $this->getConnection(); + $select = $connection->select() + ->from($this->getTable('emico_attributelanding_overviewpage_store')) + ->where('page_id = :page_id'); + + $bind = ['page_id' => (int)$overviewPageId]; + + return $connection->fetchAll($select, $bind); + } + + /** + * @param OverviewPageInterface $page + * @return void + */ + public function saveOverviewPageStoreData(OverviewPageInterface $page): void + { + $data = $page->getOverviewPageDataForStore(); + $connection = $this->getConnection(); + $table = $this->getTable('emico_attributelanding_overviewpage_store'); + $where = [ + 'page_id = ?' => $page->getPageId(), + 'store_id = ?' => $page->getStoreId() + ]; + + unset($data['id']); + + if (!empty($this->getOverviewPageStoreData($page->getPageId(), $page->getStoreId()))) { + $connection->update($table, $data, $where); + } else { + $data['page_id'] = $page->getPageId(); + $data['store_id'] = $page->getStoreId(); + $connection->insert($table, $data); + } + } } diff --git a/src/Model/UrlRewriteService.php b/src/Model/UrlRewriteService.php index e76f3d2..0d14241 100644 --- a/src/Model/UrlRewriteService.php +++ b/src/Model/UrlRewriteService.php @@ -8,6 +8,7 @@ namespace Emico\AttributeLanding\Model; use Emico\AttributeLanding\Api\Data\LandingPageInterface; +use Emico\AttributeLanding\Api\Data\OverviewPageInterface; use Emico\AttributeLanding\Api\LandingPageRepositoryInterface; use Emico\AttributeLanding\Api\UrlRewriteGeneratorInterface; use Magento\Framework\Api\SearchCriteriaBuilder; @@ -61,6 +62,7 @@ class UrlRewriteService * @param UrlFinderInterface $urlFinder * @param LandingPageRepositoryInterface $landingPageRepository * @param Config $config + * @param OverviewPageRepository $overviewPageRepository */ public function __construct( UrlRewriteFactory $urlRewriteFactory, @@ -70,6 +72,7 @@ public function __construct( UrlFinderInterface $urlFinder, LandingPageRepositoryInterface $landingPageRepository, private readonly Config $config, + private readonly OverviewPageRepository $overviewPageRepository ) { $this->urlRewriteFactory = $urlRewriteFactory; $this->storeManager = $storeManager; @@ -209,9 +212,51 @@ private function generateRewritesForAllStores( private function generateOverviewPageRewrites(UrlRewriteGeneratorInterface $page, ?string $suffix = null): array { $urlRewritesToPersist = []; + $allPages = $this->overviewPageRepository->getAllPagesById($page->getPageId()); - foreach ($this->getActiveStoreIds($page) as $storeId) { - $urlRewritesToPersist[$storeId] = $this->createUrlRewrite($page, $storeId, $suffix); + foreach ($allPages as $storePage) { + if ($storePage->getStoreId() === $page->getStoreId()) { + $storePage = $page; + } + + if ($storePage->getStoreId() === 0) { + $urlRewritesToPersist = $this->generateOverviewPageRewritesForAllStores( + $storePage, + $page, + $suffix, + $urlRewritesToPersist + ); + } else { + $urlRewrite = $this->createUrlRewrite($storePage, $storePage->getStoreId(), $suffix); + $urlRewritesToPersist[$storePage->getStoreId()] = $urlRewrite; + } + } + + return $urlRewritesToPersist; + } + + private function generateOverviewPageRewritesForAllStores( + OverviewPageInterface $storePage, + OverviewPageInterface $page, + ?string $suffix, + array $urlRewritesToPersist + ): array { + $stores = $this->storeManager->getStores(); + + foreach ($stores as $store) { + if ($store->getId() === $page->getStoreId()) { + $storePage = $page; + } + + if (empty($storePage)) { + continue; + } + + if (isset($urlRewritesToPersist[$store->getId()])) { + continue; + } + $urlRewrite = $this->createUrlRewrite($storePage, $store->getId(), $suffix); + $urlRewritesToPersist[$store->getId()] = $urlRewrite; } return $urlRewritesToPersist; diff --git a/src/Setup/Patch/Data/ConvertOverviewpageEntries.php b/src/Setup/Patch/Data/ConvertOverviewpageEntries.php new file mode 100644 index 0000000..687de75 --- /dev/null +++ b/src/Setup/Patch/Data/ConvertOverviewpageEntries.php @@ -0,0 +1,102 @@ +moduleDataSetup->startSetup(); + + $connection = $this->moduleDataSetup->getConnection(); + $overviewPageTable = $this->moduleDataSetup->getTable('emico_attributelanding_overviewpage'); + $overviewPageStoreTable = $this->moduleDataSetup->getTable('emico_attributelanding_overviewpage_store'); + + $select = $connection->select()->from($overviewPageTable); + $overviewPages = $connection->fetchAll($select); + + foreach ($overviewPages as $overviewPage) { + $storeIds = explode(',', $overviewPage['store_ids']); + foreach ($storeIds as $storeId) { + $this->insertOverviewPageStore($connection, $overviewPageStoreTable, $overviewPage, $storeId); + } + } + + $this->moduleDataSetup->endSetup(); + } + + /** + * @param AdapterInterface $connection + * @param string $table + * @param array $overviewPage + * @param int $storeId + */ + private function insertOverviewPageStore( + AdapterInterface $connection, + string $table, + array $overviewPage, + int $storeId + ): void { + $data = [ + 'page_id' => $overviewPage['page_id'], + 'store_id' => $storeId, + ]; + + $fields = [ + OverviewPageInterface::ACTIVE, + OverviewPageInterface::URL_PATH, + OverviewPageInterface::HEADING, + OverviewPageInterface::META_TITLE, + OverviewPageInterface::META_KEYWORDS, + OverviewPageInterface::META_DESCRIPTION, + OverviewPageInterface::CONTENT_FIRST, + OverviewPageInterface::CONTENT_LAST, + OverviewPageInterface::NAME, + ]; + + foreach ($fields as $field) { + if (!isset($overviewPage[$field])) { + continue; + } + + $data[$field] = $overviewPage[$field]; + } + + $connection->insert($table, $data); + } + + /** + * @inheritDoc + */ + public static function getDependencies(): array + { + return []; + } + + /** + * @inheritDoc + */ + public function getAliases(): array + { + return []; + } +} diff --git a/src/Ui/Component/Listing/Column/OverviewPageActions.php b/src/Ui/Component/Listing/Column/OverviewPageActions.php index f42efc1..ff8fdac 100644 --- a/src/Ui/Component/Listing/Column/OverviewPageActions.php +++ b/src/Ui/Component/Listing/Column/OverviewPageActions.php @@ -51,58 +51,34 @@ public function prepareDataSource(array $dataSource) if (isset($dataSource['data']['items'])) { // phpcs:ignore SlevomatCodingStandard.PHP.DisallowReference.DisallowedAssigningByReference foreach ($dataSource['data']['items'] as & $item) { - if (isset($item['page_id'])) { - $item[$this->getData('name')] = [ - 'edit' => [ - 'href' => $this->urlBuilder->getUrl( - static::URL_PATH_EDIT, - [ - 'page_id' => $item['page_id'] - ] - ), - 'label' => __('Edit') - ], - 'delete' => [ - 'href' => $this->urlBuilder->getUrl( - static::URL_PATH_DELETE, - [ - 'page_id' => $item['page_id'] - ] - ), - 'label' => __('Delete'), - 'confirm' => [ - 'title' => __('Delete overviewpage'), - 'message' => __('Are you sure you wan\'t to delete this overviewpage?') - ] - ] - ]; + if (!isset($item['page_id'])) { + continue; } - if (!empty($item['store_ids']) && is_string($item['store_ids'])) { - $store_ids = explode(',', $item['store_ids']); - /** @phpstan-ignore-next-line */ - if (!empty($store_ids) && is_array($store_ids)) { - $stores = $this->storeRepository->getList(); - $item['stores'] = ''; - foreach ($stores as $store) { - $id = $store->getId(); - - // phpcs:ignore SlevomatCodingStandard.Functions.StrictCall.StrictParameterMissing - if (!in_array($id, $store_ids)) { - continue; - } - - /** @phpstan-ignore-next-line */ - if ($id === '0') { - $item['stores'] .= 'All Store Views' . ', '; - } else { - $item['stores'] .= $store->getName() . ', '; - } - } - } - } else { - $item['stores'] = 'All Store Views'; - } + $item[$this->getData('name')] = [ + 'edit' => [ + 'href' => $this->urlBuilder->getUrl( + static::URL_PATH_EDIT, + [ + 'page_id' => $item['page_id'] + ] + ), + 'label' => __('Edit') + ], + 'delete' => [ + 'href' => $this->urlBuilder->getUrl( + static::URL_PATH_DELETE, + [ + 'page_id' => $item['page_id'] + ] + ), + 'label' => __('Delete'), + 'confirm' => [ + 'title' => __('Delete overviewpage'), + 'message' => __('Are you sure you wan\'t to delete this overviewpage?') + ] + ] + ]; } } diff --git a/src/etc/db_schema.xml b/src/etc/db_schema.xml index 92ad0f8..2b51a9e 100644 --- a/src/etc/db_schema.xml +++ b/src/etc/db_schema.xml @@ -60,4 +60,23 @@ + + + + + + + + + + + + + + + + + + +
diff --git a/src/etc/module.xml b/src/etc/module.xml index 993bd8f..0ffc85e 100644 --- a/src/etc/module.xml +++ b/src/etc/module.xml @@ -1,7 +1,7 @@ - + diff --git a/src/view/adminhtml/layout/emico_attributelanding_overviewpage_edit.xml b/src/view/adminhtml/layout/emico_attributelanding_overviewpage_edit.xml index 8afdb88..c6537bc 100644 --- a/src/view/adminhtml/layout/emico_attributelanding_overviewpage_edit.xml +++ b/src/view/adminhtml/layout/emico_attributelanding_overviewpage_edit.xml @@ -3,6 +3,13 @@ + + + + 0 + + + diff --git a/src/view/adminhtml/ui_component/emico_attributelanding_overviewpage_form.xml b/src/view/adminhtml/ui_component/emico_attributelanding_overviewpage_form.xml index ed34d01..3b1a10b 100644 --- a/src/view/adminhtml/ui_component/emico_attributelanding_overviewpage_form.xml +++ b/src/view/adminhtml/ui_component/emico_attributelanding_overviewpage_form.xml @@ -40,10 +40,37 @@ + + + + Page + 0 + + + + + true + + int + + store_id + + + + + Page + [STORE VIEW] + 1 + 0 + 1 @@ -70,6 +97,10 @@ Page + [STORE VIEW] + 1 + 0 + 1 @@ -85,6 +116,10 @@ Page + [STORE VIEW] + 1 + 0 + 1 @@ -96,30 +131,6 @@ - - - - - Page - 0 - - - - - true - - int - - store_ids - - - - - - - - -
@@ -129,6 +140,10 @@ Page + [STORE VIEW] + 1 + 0 + 1 @@ -145,6 +160,10 @@ Page + [STORE VIEW] + 1 + 0 + 1 bold,italic,|,justifyleft,justifycenter,justifyright,|,fontselect,fontsizeselect,|,forecolor,backcolor,|,link,unlink,image,|,bullist,numlist,|,code @@ -182,6 +201,10 @@ Page + [STORE VIEW] + 1 + 0 + 1 bold,italic,|,justifyleft,justifycenter,justifyright,|,fontselect,fontsizeselect,|,forecolor,backcolor,|,link,unlink,image,|,bullist,numlist,|,code @@ -223,6 +246,10 @@ Page + [STORE VIEW] + 1 + 0 + 1 @@ -239,6 +266,10 @@ Page + [STORE VIEW] + 1 + 0 + 1 @@ -255,6 +286,10 @@ Page + [STORE VIEW] + 1 + 0 + 1 diff --git a/src/view/adminhtml/ui_component/emico_attributelanding_overviewpage_listing.xml b/src/view/adminhtml/ui_component/emico_attributelanding_overviewpage_listing.xml index 856dfe2..bc16ad5 100644 --- a/src/view/adminhtml/ui_component/emico_attributelanding_overviewpage_listing.xml +++ b/src/view/adminhtml/ui_component/emico_attributelanding_overviewpage_listing.xml @@ -84,23 +84,10 @@ - + text - - - - - - text - - - - - - text - - false +