Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
PostDataProcessor.php
Go to the documentation of this file.
1 <?php
8 
13 
19 {
23  protected $dateFilter;
24 
28  protected $validatorFactory;
29 
33  protected $messageManager;
34 
38  private $validationState;
39 
46  public function __construct(
47  \Magento\Framework\Stdlib\DateTime\Filter\Date $dateFilter,
48  \Magento\Framework\Message\ManagerInterface $messageManager,
49  \Magento\Framework\View\Model\Layout\Update\ValidatorFactory $validatorFactory,
50  DomValidationState $validationState = null
51  ) {
52  $this->dateFilter = $dateFilter;
53  $this->messageManager = $messageManager;
54  $this->validatorFactory = $validatorFactory;
55  $this->validationState = $validationState
56  ?: ObjectManager::getInstance()->get(DomValidationState::class);
57  }
58 
65  public function filter($data)
66  {
67  $filterRules = [];
68 
69  foreach (['custom_theme_from', 'custom_theme_to'] as $dateField) {
70  if (!empty($data[$dateField])) {
71  $filterRules[$dateField] = $this->dateFilter;
72  }
73  }
74 
75  return (new \Zend_Filter_Input($filterRules, [], $data))->getUnescaped();
76  }
77 
84  public function validate($data)
85  {
86  if (!empty($data['layout_update_xml']) || !empty($data['custom_layout_update_xml'])) {
88  $layoutXmlValidator = $this->validatorFactory->create(
89  [
90  'validationState' => $this->validationState,
91  ]
92  );
93 
94  if (!$this->validateData($data, $layoutXmlValidator)) {
95  $validatorMessages = $layoutXmlValidator->getMessages();
96  foreach ($validatorMessages as $message) {
97  $this->messageManager->addErrorMessage($message);
98  }
99  return false;
100  }
101  }
102  return true;
103  }
104 
111  public function validateRequireEntry(array $data)
112  {
113  $requiredFields = [
114  'title' => __('Page Title'),
115  'stores' => __('Store View'),
116  'is_active' => __('Status')
117  ];
118  $errorNo = true;
119  foreach ($data as $field => $value) {
120  if (in_array($field, array_keys($requiredFields)) && $value == '') {
121  $errorNo = false;
122  $this->messageManager->addErrorMessage(
123  __('To apply changes you should fill in hidden required "%1" field', $requiredFields[$field])
124  );
125  }
126  }
127  return $errorNo;
128  }
129 
137  private function validateData($data, $layoutXmlValidator)
138  {
139  try {
140  if (!empty($data['layout_update_xml']) && !$layoutXmlValidator->isValid($data['layout_update_xml'])) {
141  return false;
142  }
143 
144  if (!empty($data['custom_layout_update_xml']) &&
145  !$layoutXmlValidator->isValid($data['custom_layout_update_xml'])
146  ) {
147  return false;
148  }
149  } catch (ValidationException $e) {
150  return false;
151  } catch (ValidationSchemaException $e) {
152  return false;
153  } catch (\Exception $e) {
154  $this->messageManager->addExceptionMessage($e);
155  return false;
156  }
157 
158  return true;
159  }
160 }
$dateFilter
__construct(\Magento\Framework\Stdlib\DateTime\Filter\Date $dateFilter, \Magento\Framework\Message\ManagerInterface $messageManager, \Magento\Framework\View\Model\Layout\Update\ValidatorFactory $validatorFactory, DomValidationState $validationState=null)
__()
Definition: __.php:13
$message
$value
Definition: gender.phtml:16
$validatorFactory
filter($data)
$messageManager
validateRequireEntry(array $data)