123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Cms\Controller\Adminhtml\Page;
- use Magento\Backend\App\Action\Context;
- use Magento\Cms\Api\PageRepositoryInterface as PageRepository;
- use Magento\Framework\Controller\Result\JsonFactory;
- use Magento\Cms\Api\Data\PageInterface;
- /**
- * Cms page grid inline edit controller
- *
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class InlineEdit extends \Magento\Backend\App\Action
- {
- /**
- * Authorization level of a basic admin session
- */
- const ADMIN_RESOURCE = 'Magento_Cms::save';
- /**
- * @var \Magento\Cms\Controller\Adminhtml\Page\PostDataProcessor
- */
- protected $dataProcessor;
- /**
- * @var \Magento\Cms\Api\PageRepositoryInterface
- */
- protected $pageRepository;
- /**
- * @var \Magento\Framework\Controller\Result\JsonFactory
- */
- protected $jsonFactory;
- /**
- * @param Context $context
- * @param PostDataProcessor $dataProcessor
- * @param PageRepository $pageRepository
- * @param JsonFactory $jsonFactory
- */
- public function __construct(
- Context $context,
- PostDataProcessor $dataProcessor,
- PageRepository $pageRepository,
- JsonFactory $jsonFactory
- ) {
- parent::__construct($context);
- $this->dataProcessor = $dataProcessor;
- $this->pageRepository = $pageRepository;
- $this->jsonFactory = $jsonFactory;
- }
- /**
- * @return \Magento\Framework\Controller\ResultInterface
- * @throws \Magento\Framework\Exception\LocalizedException
- */
- public function execute()
- {
- /** @var \Magento\Framework\Controller\Result\Json $resultJson */
- $resultJson = $this->jsonFactory->create();
- $error = false;
- $messages = [];
- $postItems = $this->getRequest()->getParam('items', []);
- if (!($this->getRequest()->getParam('isAjax') && count($postItems))) {
- return $resultJson->setData([
- 'messages' => [__('Please correct the data sent.')],
- 'error' => true,
- ]);
- }
- foreach (array_keys($postItems) as $pageId) {
- /** @var \Magento\Cms\Model\Page $page */
- $page = $this->pageRepository->getById($pageId);
- try {
- $pageData = $this->filterPost($postItems[$pageId]);
- $this->validatePost($pageData, $page, $error, $messages);
- $extendedPageData = $page->getData();
- $this->setCmsPageData($page, $extendedPageData, $pageData);
- $this->pageRepository->save($page);
- } catch (\Magento\Framework\Exception\LocalizedException $e) {
- $messages[] = $this->getErrorWithPageId($page, $e->getMessage());
- $error = true;
- } catch (\RuntimeException $e) {
- $messages[] = $this->getErrorWithPageId($page, $e->getMessage());
- $error = true;
- } catch (\Exception $e) {
- $messages[] = $this->getErrorWithPageId(
- $page,
- __('Something went wrong while saving the page.')
- );
- $error = true;
- }
- }
- return $resultJson->setData([
- 'messages' => $messages,
- 'error' => $error
- ]);
- }
- /**
- * Filtering posted data.
- *
- * @param array $postData
- * @return array
- */
- protected function filterPost($postData = [])
- {
- $pageData = $this->dataProcessor->filter($postData);
- $pageData['custom_theme'] = isset($pageData['custom_theme']) ? $pageData['custom_theme'] : null;
- $pageData['custom_root_template'] = isset($pageData['custom_root_template'])
- ? $pageData['custom_root_template']
- : null;
- return $pageData;
- }
- /**
- * Validate post data
- *
- * @param array $pageData
- * @param \Magento\Cms\Model\Page $page
- * @param bool $error
- * @param array $messages
- * @return void
- */
- protected function validatePost(array $pageData, \Magento\Cms\Model\Page $page, &$error, array &$messages)
- {
- if (!($this->dataProcessor->validate($pageData) && $this->dataProcessor->validateRequireEntry($pageData))) {
- $error = true;
- foreach ($this->messageManager->getMessages(true)->getItems() as $error) {
- $messages[] = $this->getErrorWithPageId($page, $error->getText());
- }
- }
- }
- /**
- * Add page title to error message
- *
- * @param PageInterface $page
- * @param string $errorText
- * @return string
- */
- protected function getErrorWithPageId(PageInterface $page, $errorText)
- {
- return '[Page ID: ' . $page->getId() . '] ' . $errorText;
- }
- /**
- * Set cms page data
- *
- * @param \Magento\Cms\Model\Page $page
- * @param array $extendedPageData
- * @param array $pageData
- * @return $this
- */
- public function setCmsPageData(\Magento\Cms\Model\Page $page, array $extendedPageData, array $pageData)
- {
- $page->setData(array_merge($page->getData(), $extendedPageData, $pageData));
- return $this;
- }
- }
|