diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/PostDataProcessor.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/PostDataProcessor.php
index 7fd1ee6020937..4873572456500 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Page/PostDataProcessor.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/PostDataProcessor.php
@@ -6,6 +6,9 @@
*/
namespace Magento\Cms\Controller\Adminhtml\Page;
+use Magento\Cms\Model\Page\DomValidationState;
+use Magento\Framework\App\ObjectManager;
+
class PostDataProcessor
{
/**
@@ -23,19 +26,28 @@ class PostDataProcessor
*/
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
+ \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);
}
/**
@@ -68,7 +80,11 @@ public function validate($data)
$errorNo = true;
if (!empty($data['layout_update_xml']) || !empty($data['custom_layout_update_xml'])) {
/** @var $validatorCustomLayout \Magento\Framework\View\Model\Layout\Update\Validator */
- $validatorCustomLayout = $this->validatorFactory->create();
+ $validatorCustomLayout = $this->validatorFactory->create(
+ [
+ 'validationState' => $this->validationState,
+ ]
+ );
if (!empty($data['layout_update_xml']) && !$validatorCustomLayout->isValid($data['layout_update_xml'])) {
$errorNo = false;
}
diff --git a/app/code/Magento/Cms/Model/Page/DomValidationState.php b/app/code/Magento/Cms/Model/Page/DomValidationState.php
new file mode 100644
index 0000000000000..b08ab6342fc5d
--- /dev/null
+++ b/app/code/Magento/Cms/Model/Page/DomValidationState.php
@@ -0,0 +1,26 @@
+_domConfigFactory = $domConfigFactory;
$this->_initMessageTemplates();
@@ -76,6 +86,8 @@ public function __construct(
'urn:magento:framework:View/Layout/etc/layout_merged.xsd'
),
];
+ $this->validationState = $validationState
+ ?: ObjectManager::getInstance()->get(ValidationStateInterface::class);
}
/**
@@ -122,7 +134,13 @@ public function isValid($value, $schema = self::LAYOUT_SCHEMA_PAGE_HANDLE, $isSe
try {
//wrap XML value in the "layout" and "handle" tags to make it validatable
$value = '' . $value . '';
- $this->_domConfigFactory->createDom(['xml' => $value, 'schemaFile' => $this->_xsdSchemas[$schema]]);
+ $this->_domConfigFactory->createDom(
+ [
+ 'xml' => $value,
+ 'schemaFile' => $this->_xsdSchemas[$schema],
+ 'validationState' => $this->validationState,
+ ]
+ );
if ($isSecurityCheck) {
$value = new \Magento\Framework\Simplexml\Element($value);
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Model/Layout/Update/ValidatorTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Model/Layout/Update/ValidatorTest.php
index 5cc524103f9a2..873f66b4bf9c0 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Model/Layout/Update/ValidatorTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Model/Layout/Update/ValidatorTest.php
@@ -30,6 +30,11 @@ class ValidatorTest extends \PHPUnit\Framework\TestCase
*/
private $urnResolver;
+ /**
+ * @var \Magento\Framework\Config\ValidationStateInterface|\PHPUnit_Framework_MockObject_MockObject
+ */
+ private $validationState;
+
protected function setUp()
{
$this->_objectHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
@@ -39,10 +44,17 @@ protected function setUp()
$this->urnResolver = $this->getMockBuilder(
\Magento\Framework\Config\Dom\UrnResolver::class
)->disableOriginalConstructor()->getMock();
+ $this->validationState = $this->getMockBuilder(
+ \Magento\Framework\Config\ValidationStateInterface::class
+ )->disableOriginalConstructor()->getMock();
$this->model = $this->_objectHelper->getObject(
\Magento\Framework\View\Model\Layout\Update\Validator::class,
- ['domConfigFactory' => $this->domConfigFactory, 'urnResolver' => $this->urnResolver]
+ [
+ 'domConfigFactory' => $this->domConfigFactory,
+ 'urnResolver' => $this->urnResolver,
+ 'validationState' => $this->validationState,
+ ]
);
}
@@ -56,6 +68,7 @@ protected function _createValidator($layoutUpdate)
'xml' => '' .
trim($layoutUpdate) . '',
'schemaFile' => $this->urnResolver->getRealPath('urn:magento:framework:View/Layout/etc/page_layout.xsd'),
+ 'validationState' => $this->validationState,
];
$this->domConfigFactory->expects(