123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- <?php
- /**
- *
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Cms\Controller\Adminhtml\Page;
- use Magento\Cms\Model\Page\DomValidationState;
- use Magento\Framework\App\ObjectManager;
- use Magento\Framework\Config\Dom\ValidationException;
- use Magento\Framework\Config\Dom\ValidationSchemaException;
- /**
- * Class PostDataProcessor
- * @package Magento\Cms\Controller\Adminhtml\Page
- */
- class PostDataProcessor
- {
- /**
- * @var \Magento\Framework\Stdlib\DateTime\Filter\Date
- */
- protected $dateFilter;
- /**
- * @var \Magento\Framework\View\Model\Layout\Update\ValidatorFactory
- */
- protected $validatorFactory;
- /**
- * @var \Magento\Framework\Message\ManagerInterface
- */
- protected $messageManager;
- /**
- * @var DomValidationState
- */
- private $validationState;
- /**
- * @param \Magento\Framework\Stdlib\DateTime\Filter\Date $dateFilter
- * @param \Magento\Framework\Message\ManagerInterface $messageManager
- * @param \Magento\Framework\View\Model\Layout\Update\ValidatorFactory $validatorFactory
- * @param DomValidationState $validationState
- */
- public function __construct(
- \Magento\Framework\Stdlib\DateTime\Filter\Date $dateFilter,
- \Magento\Framework\Message\ManagerInterface $messageManager,
- \Magento\Framework\View\Model\Layout\Update\ValidatorFactory $validatorFactory,
- DomValidationState $validationState = null
- ) {
- $this->dateFilter = $dateFilter;
- $this->messageManager = $messageManager;
- $this->validatorFactory = $validatorFactory;
- $this->validationState = $validationState
- ?: ObjectManager::getInstance()->get(DomValidationState::class);
- }
- /**
- * Filtering posted data. Converting localized data if needed
- *
- * @param array $data
- * @return array
- */
- public function filter($data)
- {
- $filterRules = [];
- foreach (['custom_theme_from', 'custom_theme_to'] as $dateField) {
- if (!empty($data[$dateField])) {
- $filterRules[$dateField] = $this->dateFilter;
- }
- }
- return (new \Zend_Filter_Input($filterRules, [], $data))->getUnescaped();
- }
- /**
- * Validate post data
- *
- * @param array $data
- * @return bool Return FALSE if some item is invalid
- */
- public function validate($data)
- {
- if (!empty($data['layout_update_xml']) || !empty($data['custom_layout_update_xml'])) {
- /** @var $layoutXmlValidator \Magento\Framework\View\Model\Layout\Update\Validator */
- $layoutXmlValidator = $this->validatorFactory->create(
- [
- 'validationState' => $this->validationState,
- ]
- );
- if (!$this->validateData($data, $layoutXmlValidator)) {
- $validatorMessages = $layoutXmlValidator->getMessages();
- foreach ($validatorMessages as $message) {
- $this->messageManager->addErrorMessage($message);
- }
- return false;
- }
- }
- return true;
- }
- /**
- * Check if required fields is not empty
- *
- * @param array $data
- * @return bool
- */
- public function validateRequireEntry(array $data)
- {
- $requiredFields = [
- 'title' => __('Page Title'),
- 'stores' => __('Store View'),
- 'is_active' => __('Status')
- ];
- $errorNo = true;
- foreach ($data as $field => $value) {
- if (in_array($field, array_keys($requiredFields)) && $value == '') {
- $errorNo = false;
- $this->messageManager->addErrorMessage(
- __('To apply changes you should fill in hidden required "%1" field', $requiredFields[$field])
- );
- }
- }
- return $errorNo;
- }
- /**
- * Validate data, avoid cyclomatic complexity
- *
- * @param array $data
- * @param \Magento\Framework\View\Model\Layout\Update\Validator $layoutXmlValidator
- * @return bool
- */
- private function validateData($data, $layoutXmlValidator)
- {
- try {
- if (!empty($data['layout_update_xml']) && !$layoutXmlValidator->isValid($data['layout_update_xml'])) {
- return false;
- }
-
- if (!empty($data['custom_layout_update_xml']) &&
- !$layoutXmlValidator->isValid($data['custom_layout_update_xml'])
- ) {
- return false;
- }
- } catch (ValidationException $e) {
- return false;
- } catch (ValidationSchemaException $e) {
- return false;
- } catch (\Exception $e) {
- $this->messageManager->addExceptionMessage($e);
- return false;
- }
- return true;
- }
- }
|