| Current Path : /var/www/clients/client3/web2/web/vendor/magento/module-cms/Controller/Adminhtml/Page/ |
| Current File : /var/www/clients/client3/web2/web/vendor/magento/module-cms/Controller/Adminhtml/Page/Save.php |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);
namespace Magento\Cms\Controller\Adminhtml\Page;
use Magento\Backend\App\Action;
use Magento\Backend\Model\View\Result\Redirect;
use Magento\Cms\Api\Data\PageInterface;
use Magento\Cms\Api\PageRepositoryInterface;
use Magento\Cms\Model\Page;
use Magento\Cms\Model\PageFactory;
use Magento\Framework\App\Action\HttpPostActionInterface;
use Magento\Framework\App\ObjectManager;
use Magento\Framework\App\Request\DataPersistorInterface;
use Magento\Framework\Controller\ResultInterface;
use Magento\Framework\Exception\LocalizedException;
/**
* Save CMS page action.
*
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
*/
class Save extends Action implements HttpPostActionInterface
{
/**
* Authorization level of a basic admin session
*
* @see _isAllowed()
*/
const ADMIN_RESOURCE = 'Magento_Cms::save';
/**
* @var PostDataProcessor
*/
protected $dataProcessor;
/**
* @var DataPersistorInterface
*/
protected $dataPersistor;
/**
* @var PageFactory
*/
private $pageFactory;
/**
* @var PageRepositoryInterface
*/
private $pageRepository;
/**
* @param Action\Context $context
* @param PostDataProcessor $dataProcessor
* @param DataPersistorInterface $dataPersistor
* @param PageFactory|null $pageFactory
* @param PageRepositoryInterface|null $pageRepository
*/
public function __construct(
Action\Context $context,
PostDataProcessor $dataProcessor,
DataPersistorInterface $dataPersistor,
PageFactory $pageFactory = null,
PageRepositoryInterface $pageRepository = null
) {
$this->dataProcessor = $dataProcessor;
$this->dataPersistor = $dataPersistor;
$this->pageFactory = $pageFactory ?: ObjectManager::getInstance()->get(PageFactory::class);
$this->pageRepository = $pageRepository ?: ObjectManager::getInstance()->get(PageRepositoryInterface::class);
parent::__construct($context);
}
/**
* Save action
*
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
* @return ResultInterface
*/
public function execute()
{
$data = $this->getRequest()->getPostValue();
/** @var Redirect $resultRedirect */
$resultRedirect = $this->resultRedirectFactory->create();
if ($data) {
$data = $this->dataProcessor->filter($data);
if (isset($data['is_active']) && $data['is_active'] === 'true') {
$data['is_active'] = Page::STATUS_ENABLED;
}
if (empty($data['page_id'])) {
$data['page_id'] = null;
}
/** @var Page $model */
$model = $this->pageFactory->create();
$id = $this->getRequest()->getParam('page_id');
if ($id) {
try {
$model = $this->pageRepository->getById($id);
} catch (LocalizedException $e) {
$this->messageManager->addErrorMessage(__('This page no longer exists.'));
return $resultRedirect->setPath('*/*/');
}
}
$data['layout_update_xml'] = $model->getLayoutUpdateXml();
$data['custom_layout_update_xml'] = $model->getCustomLayoutUpdateXml();
$model->setData($data);
try {
$this->_eventManager->dispatch(
'cms_page_prepare_save',
['page' => $model, 'request' => $this->getRequest()]
);
$this->pageRepository->save($model);
$this->messageManager->addSuccessMessage(__('You saved the page.'));
return $this->processResultRedirect($model, $resultRedirect, $data);
} catch (LocalizedException $e) {
$this->messageManager->addExceptionMessage($e->getPrevious() ?: $e);
} catch (\Throwable $e) {
$this->messageManager->addErrorMessage(__('Something went wrong while saving the page.'));
}
$this->dataPersistor->set('cms_page', $data);
return $resultRedirect->setPath('*/*/edit', ['page_id' => $this->getRequest()->getParam('page_id')]);
}
return $resultRedirect->setPath('*/*/');
}
/**
* Process result redirect
*
* @param PageInterface $model
* @param Redirect $resultRedirect
* @param array $data
* @return Redirect
* @throws LocalizedException
*/
private function processResultRedirect($model, $resultRedirect, $data)
{
if ($this->getRequest()->getParam('back', false) === 'duplicate') {
$newPage = $this->pageFactory->create(['data' => $data]);
$newPage->setId(null);
$identifier = $model->getIdentifier() . '-' . uniqid();
$newPage->setIdentifier($identifier);
$newPage->setIsActive(false);
$this->pageRepository->save($newPage);
$this->messageManager->addSuccessMessage(__('You duplicated the page.'));
return $resultRedirect->setPath(
'*/*/edit',
[
'page_id' => $newPage->getId(),
'_current' => true,
]
);
}
$this->dataPersistor->clear('cms_page');
if ($this->getRequest()->getParam('back')) {
return $resultRedirect->setPath('*/*/edit', ['page_id' => $model->getId(), '_current' => true]);
}
return $resultRedirect->setPath('*/*/');
}
}