Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
All Data Structures Namespaces Files Functions Variables Pages
InlineEdit.php
Go to the documentation of this file.
1 <?php
7 
9 use Magento\Cms\Api\PageRepositoryInterface as PageRepository;
12 
19 {
23  const ADMIN_RESOURCE = 'Magento_Cms::save';
24 
28  protected $dataProcessor;
29 
33  protected $pageRepository;
34 
38  protected $jsonFactory;
39 
46  public function __construct(
47  Context $context,
49  PageRepository $pageRepository,
51  ) {
52  parent::__construct($context);
53  $this->dataProcessor = $dataProcessor;
54  $this->pageRepository = $pageRepository;
55  $this->jsonFactory = $jsonFactory;
56  }
57 
62  public function execute()
63  {
65  $resultJson = $this->jsonFactory->create();
66  $error = false;
67  $messages = [];
68 
69  $postItems = $this->getRequest()->getParam('items', []);
70  if (!($this->getRequest()->getParam('isAjax') && count($postItems))) {
71  return $resultJson->setData([
72  'messages' => [__('Please correct the data sent.')],
73  'error' => true,
74  ]);
75  }
76 
77  foreach (array_keys($postItems) as $pageId) {
79  $page = $this->pageRepository->getById($pageId);
80  try {
81  $pageData = $this->filterPost($postItems[$pageId]);
82  $this->validatePost($pageData, $page, $error, $messages);
83  $extendedPageData = $page->getData();
84  $this->setCmsPageData($page, $extendedPageData, $pageData);
85  $this->pageRepository->save($page);
86  } catch (\Magento\Framework\Exception\LocalizedException $e) {
87  $messages[] = $this->getErrorWithPageId($page, $e->getMessage());
88  $error = true;
89  } catch (\RuntimeException $e) {
90  $messages[] = $this->getErrorWithPageId($page, $e->getMessage());
91  $error = true;
92  } catch (\Exception $e) {
93  $messages[] = $this->getErrorWithPageId(
94  $page,
95  __('Something went wrong while saving the page.')
96  );
97  $error = true;
98  }
99  }
100 
101  return $resultJson->setData([
102  'messages' => $messages,
103  'error' => $error
104  ]);
105  }
106 
113  protected function filterPost($postData = [])
114  {
115  $pageData = $this->dataProcessor->filter($postData);
116  $pageData['custom_theme'] = isset($pageData['custom_theme']) ? $pageData['custom_theme'] : null;
117  $pageData['custom_root_template'] = isset($pageData['custom_root_template'])
118  ? $pageData['custom_root_template']
119  : null;
120  return $pageData;
121  }
122 
132  protected function validatePost(array $pageData, \Magento\Cms\Model\Page $page, &$error, array &$messages)
133  {
134  if (!($this->dataProcessor->validate($pageData) && $this->dataProcessor->validateRequireEntry($pageData))) {
135  $error = true;
136  foreach ($this->messageManager->getMessages(true)->getItems() as $error) {
137  $messages[] = $this->getErrorWithPageId($page, $error->getText());
138  }
139  }
140  }
141 
149  protected function getErrorWithPageId(PageInterface $page, $errorText)
150  {
151  return '[Page ID: ' . $page->getId() . '] ' . $errorText;
152  }
153 
162  public function setCmsPageData(\Magento\Cms\Model\Page $page, array $extendedPageData, array $pageData)
163  {
164  $page->setData(array_merge($page->getData(), $extendedPageData, $pageData));
165  return $this;
166  }
167 }
__construct(Context $context, PostDataProcessor $dataProcessor, PageRepository $pageRepository, JsonFactory $jsonFactory)
Definition: InlineEdit.php:46
__()
Definition: __.php:13
getErrorWithPageId(PageInterface $page, $errorText)
Definition: InlineEdit.php:149
$page
Definition: pages.php:8
setCmsPageData(\Magento\Cms\Model\Page $page, array $extendedPageData, array $pageData)
Definition: InlineEdit.php:162
validatePost(array $pageData, \Magento\Cms\Model\Page $page, &$error, array &$messages)
Definition: InlineEdit.php:132