66 */
77namespace Magento \Cms \Controller \Adminhtml \Page ;
88
9+ use Magento \Cms \Model \Page \DomValidationState ;
10+ use Magento \Framework \App \ObjectManager ;
11+ use Magento \Framework \Config \Dom \ValidationException ;
12+ use Magento \Framework \Config \Dom \ValidationSchemaException ;
13+
14+ /**
15+ * Class PostDataProcessor
16+ * @package Magento\Cms\Controller\Adminhtml\Page
17+ */
918class PostDataProcessor
1019{
1120 /**
@@ -23,19 +32,28 @@ class PostDataProcessor
2332 */
2433 protected $ messageManager ;
2534
35+ /**
36+ * @var DomValidationState
37+ */
38+ private $ validationState ;
39+
2640 /**
2741 * @param \Magento\Framework\Stdlib\DateTime\Filter\Date $dateFilter
2842 * @param \Magento\Framework\Message\ManagerInterface $messageManager
2943 * @param \Magento\Framework\View\Model\Layout\Update\ValidatorFactory $validatorFactory
44+ * @param DomValidationState $validationState
3045 */
3146 public function __construct (
3247 \Magento \Framework \Stdlib \DateTime \Filter \Date $ dateFilter ,
3348 \Magento \Framework \Message \ManagerInterface $ messageManager ,
34- \Magento \Framework \View \Model \Layout \Update \ValidatorFactory $ validatorFactory
49+ \Magento \Framework \View \Model \Layout \Update \ValidatorFactory $ validatorFactory ,
50+ DomValidationState $ validationState = null
3551 ) {
3652 $ this ->dateFilter = $ dateFilter ;
3753 $ this ->messageManager = $ messageManager ;
3854 $ this ->validatorFactory = $ validatorFactory ;
55+ $ this ->validationState = $ validationState
56+ ?: ObjectManager::getInstance ()->get (DomValidationState::class);
3957 }
4058
4159 /**
@@ -61,27 +79,27 @@ public function filter($data)
6179 * Validate post data
6280 *
6381 * @param array $data
64- * @return bool Return FALSE if someone item is invalid
82+ * @return bool Return FALSE if some item is invalid
6583 */
6684 public function validate ($ data )
6785 {
68- $ errorNo = true ;
6986 if (!empty ($ data ['layout_update_xml ' ]) || !empty ($ data ['custom_layout_update_xml ' ])) {
70- /** @var $validatorCustomLayout \Magento\Framework\View\Model\Layout\Update\Validator */
71- $ validatorCustomLayout = $ this ->validatorFactory ->create ();
72- if (!empty ($ data ['layout_update_xml ' ]) && !$ validatorCustomLayout ->isValid ($ data ['layout_update_xml ' ])) {
73- $ errorNo = false ;
74- }
75- if (!empty ($ data ['custom_layout_update_xml ' ])
76- && !$ validatorCustomLayout ->isValid ($ data ['custom_layout_update_xml ' ])
77- ) {
78- $ errorNo = false ;
79- }
80- foreach ($ validatorCustomLayout ->getMessages () as $ message ) {
81- $ this ->messageManager ->addError ($ message );
87+ /** @var $layoutXmlValidator \Magento\Framework\View\Model\Layout\Update\Validator */
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 ;
82100 }
83101 }
84- return $ errorNo ;
102+ return true ;
85103 }
86104
87105 /**
@@ -108,4 +126,34 @@ public function validateRequireEntry(array $data)
108126 }
109127 return $ errorNo ;
110128 }
129+
130+ /**
131+ * Validate data, avoid cyclomatic complexity
132+ *
133+ * @param array $data
134+ * @param \Magento\Framework\View\Model\Layout\Update\Validator $layoutXmlValidator
135+ * @return bool
136+ */
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+ if (!empty ($ data ['custom_layout_update_xml ' ]) &&
144+ !$ layoutXmlValidator ->isValid ($ data ['custom_layout_update_xml ' ])
145+ ) {
146+ return false ;
147+ }
148+ } catch (ValidationException $ e ) {
149+ return false ;
150+ } catch (ValidationSchemaException $ e ) {
151+ return false ;
152+ } catch (\Exception $ e ) {
153+ $ this ->messageManager ->addExceptionMessage ($ e );
154+ return false ;
155+ }
156+
157+ return true ;
158+ }
111159}
0 commit comments