| Current Path : /home/rtorresani/www/vendor/magento/module-cms/Controller/Adminhtml/Page/ |
| Current File : //home/rtorresani/www/vendor/magento/module-cms/Controller/Adminhtml/Page/PostDataProcessor.php |
<?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;
use Magento\Cms\Model\Page\CustomLayout\CustomLayoutValidator;
use Magento\Framework\Filter\FilterInput;
/**
* Controller helper for user input.
*/
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;
/**
* @var CustomLayoutValidator
*/
private $customLayoutValidator;
/**
* @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|null $validationState
* @param CustomLayoutValidator|null $customLayoutValidator
*/
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,
CustomLayoutValidator $customLayoutValidator = null
) {
$this->dateFilter = $dateFilter;
$this->messageManager = $messageManager;
$this->validatorFactory = $validatorFactory;
$this->validationState = $validationState
?: ObjectManager::getInstance()->get(DomValidationState::class);
$this->customLayoutValidator = $customLayoutValidator
?: ObjectManager::getInstance()->get(CustomLayoutValidator::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 FilterInput($filterRules, [], $data))->getUnescaped();
}
/**
* Validate post data
*
* @param array $data
* @return bool Return FALSE if some item is invalid
* @deprecated 103.0.2
* @see no alternatives
*/
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;
}
if (!$this->customLayoutValidator->validate($data)) {
return false;
}
} catch (ValidationException | ValidationSchemaException $e) {
return false;
} catch (\Exception $e) {
$this->messageManager->addExceptionMessage($e);
return false;
}
return true;
}
}