Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 13 additions & 8 deletions src/Api/Data/OverviewPageInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,24 @@ 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
* @return int|null
*/
public function getPageId();

/**
* Get store_id
* @return int
*/
public function getStoreId(): int;

/**
* Get active
* @return bool
Expand Down Expand Up @@ -87,12 +92,6 @@ public function getContentFirst();
*/
public function getContentLast();

/**
* Get active stores IDs
* @return int[]
*/
public function getStoreIds(): array;

/**
* @return string
*/
Expand All @@ -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;
}
3 changes: 2 additions & 1 deletion src/Api/OverviewPageRepositoryInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
3 changes: 2 additions & 1 deletion src/Controller/Adminhtml/OverviewPage/Edit.php
Original file line number Diff line number Diff line change
Expand Up @@ -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.'));

Expand Down
22 changes: 18 additions & 4 deletions src/Controller/Adminhtml/OverviewPage/Save.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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('*/*/');
Expand All @@ -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()]);
}
}
10 changes: 7 additions & 3 deletions src/Controller/OverviewPage/View.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand All @@ -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;
Expand All @@ -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'));
Expand Down
62 changes: 54 additions & 8 deletions src/Model/OverviewPage.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ protected function _construct()

/**
* Get page_id
* @return int|null
* @return int
*/
public function getPageId()
{
Expand Down Expand Up @@ -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);
}

/**
Expand Down Expand Up @@ -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)
);
}
}
15 changes: 14 additions & 1 deletion src/Model/OverviewPage/DataProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand All @@ -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
*/
Expand All @@ -41,6 +45,8 @@ public function __construct(
$requestFieldName,
CollectionFactory $collectionFactory,
DataPersistorInterface $dataPersistor,
private readonly Http $request,
private readonly overviewPageRepository $overviewPageRepository,
array $meta = [],
array $data = []
) {
Expand All @@ -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');
Expand Down
Loading
Loading