diff --git a/bundle/Resources/config/services.yml b/bundle/Resources/config/services.yml index 5de42004..33dd729a 100644 --- a/bundle/Resources/config/services.yml +++ b/bundle/Resources/config/services.yml @@ -41,3 +41,4 @@ services: arguments: - "@ezpublish.api.repository" - "@?logger" + - "@ezpublish.fieldType.ezrichtext.validator.docbook" diff --git a/lib/FieldType/XmlText/Converter/RichText.php b/lib/FieldType/XmlText/Converter/RichText.php index cfd7eba6..25da64e3 100644 --- a/lib/FieldType/XmlText/Converter/RichText.php +++ b/lib/FieldType/XmlText/Converter/RichText.php @@ -21,6 +21,7 @@ use Psr\Log\NullLogger; use Psr\Log\LogLevel; use Symfony\Component\Debug\Exception\ContextErrorException; +use eZ\Publish\API\Repository\Repository; class RichText implements Converter { @@ -39,11 +40,13 @@ class RichText implements Converter * @var \eZ\Publish\Core\FieldType\RichText\Validator */ private $validator; - + /** + * @var \eZ\Publish\API\Repository\Repository + */ private $apiRepository; /** - * @var Psr\Log\LoggerInterface + * @var \Psr\Log\LoggerInterface */ private $logger; @@ -64,17 +67,22 @@ class RichText implements Converter /** * RichText constructor. - * @param null $apiRepository + * @param Repository $apiRepository * @param LoggerInterface|null $logger + * @param Validator $validator */ - public function __construct($apiRepository = null, LoggerInterface $logger = null) - { + public function __construct( + Repository $apiRepository = null, + LoggerInterface $logger = null, + Validator $validator = null + ) { + $this->validator = $validator; + $this->logger = $logger instanceof LoggerInterface ? $logger : new NullLogger(); $this->imageContentTypes = []; $this->apiRepository = $apiRepository; $this->styleSheets = null; - $this->validator = null; $this->converter = null; $this->customTagsLog = [self::INLINE_CUSTOM_TAG => [], self::BLOCK_CUSTOM_TAG => []]; } @@ -116,31 +124,11 @@ public function setCustomStylesheets(array $customStylesheets = []) $this->converter = null; } - /** - * @param array $customValidators - */ - public function setCustomValidators(array $customValidators = []) - { - $validators = array_merge( - [ - './vendor/ezsystems/ezpublish-kernel/eZ/Publish/Core/FieldType/RichText/Resources/schemas/docbook/ezpublish.rng', - ], - $customValidators, - [ - './vendor/ezsystems/ezpublish-kernel/eZ/Publish/Core/FieldType/RichText/Resources/schemas/docbook/docbook.iso.sch.xsl', - ] - ); - $this->validator = new Validator($validators); - } - protected function getConverter() { if ($this->styleSheets === null) { $this->setCustomStylesheets([]); } - if ($this->validator === null) { - $this->setCustomValidators([]); - } if ($this->converter === null) { $this->converter = new Aggregate( [ diff --git a/tests/lib/FieldType/Converter/EzxmlToDocbookTest.php b/tests/lib/FieldType/Converter/EzxmlToDocbookTest.php index f950c117..c733b4e3 100644 --- a/tests/lib/FieldType/Converter/EzxmlToDocbookTest.php +++ b/tests/lib/FieldType/Converter/EzxmlToDocbookTest.php @@ -8,6 +8,7 @@ */ namespace EzSystems\EzPlatformXmlTextFieldType\Tests\FieldType\Converter; +use eZ\Publish\Core\FieldType\RichText\Validator; use eZ\Publish\Core\FieldType\XmlText\Converter\RichText; use eZ\Publish\Core\SignalSlot\Repository; use eZ\Publish\API\Repository\ContentService; @@ -56,25 +57,31 @@ private function createApiRepositoryStub() */ protected function getConverter($inputFile) { + $validatorSchemas = [ + './vendor/ezsystems/ezpublish-kernel/eZ/Publish/Core/FieldType/RichText/Resources/schemas/docbook/ezpublish.rng', + './vendor/ezsystems/ezpublish-kernel/eZ/Publish/Core/FieldType/RichText/Resources/schemas/docbook/docbook.iso.sch.xsl', + ]; + $apiRepositoryStub = $this->createApiRepositoryStub(); + if (basename($inputFile) === '017-customYoutube.xml') { - $apiRepositoryStub = $this->createApiRepositoryStub(); - $customStylesheets = + $customStylesheets = [ [ - [ - 'path' => __DIR__ . '/Xslt/_fixtures/ezxml/custom_stylesheets/youtube_docbook.xsl', - 'priority' => 100, - ], - ]; - $customValidators = [__DIR__ . '/../../../../tests/lib/FieldType/Converter/Xslt/_fixtures/docbook/custom_schemas/youtube.rng']; - $converter = new RichText($apiRepositoryStub); + 'path' => __DIR__ . '/Xslt/_fixtures/ezxml/custom_stylesheets/youtube_docbook.xsl', + 'priority' => 100, + ], + ]; + $validatorSchemas[] = __DIR__ . '/../../../../tests/lib/FieldType/Converter/Xslt/_fixtures/docbook/custom_schemas/youtube.rng'; + + $validator = new Validator($validatorSchemas); + $converter = new RichText($apiRepositoryStub, null, $validator); $converter->setCustomStylesheets($customStylesheets); - $converter->setCustomValidators($customValidators); return $converter; } + if ($this->converter === null) { - $apiRepositoryStub = $this->createApiRepositoryStub(); - $this->converter = new RichText($apiRepositoryStub); + $validator = new Validator($validatorSchemas); + $this->converter = new RichText($apiRepositoryStub, null, $validator); } return $this->converter; diff --git a/tests/lib/FieldType/Converter/RichTextTest.php b/tests/lib/FieldType/Converter/RichTextTest.php index 7bb2207c..7d6433dd 100644 --- a/tests/lib/FieldType/Converter/RichTextTest.php +++ b/tests/lib/FieldType/Converter/RichTextTest.php @@ -19,6 +19,7 @@ use eZ\Publish\API\Repository\Values\Content\Location; use Psr\Log\NullLogger; use eZ\Publish\Core\Base\Exceptions\NotFoundException; +use eZ\Publish\Core\FieldType\RichText\Validator; class RichTextTest extends TestCase { @@ -224,9 +225,10 @@ public function testConvert($inputFilePath, $outputFilePath, $logFilePath) { $apiRepositoryStub = $this->createApiRepositoryStub(); $loggerStub = $this->createLoggerStub($logFilePath); + $validator = $this->getValidator(); $inputDocument = $this->createDocument($inputFilePath); - $richText = new RichText($apiRepositoryStub, $loggerStub); + $richText = new RichText($apiRepositoryStub, $loggerStub, $validator); $richText->setImageContentTypes([27]); $result = $richText->convert($inputDocument, true, true); @@ -252,6 +254,16 @@ public function testConvert($inputFilePath, $outputFilePath, $logFilePath) ); } + public function getValidator() + { + return new Validator( + array( + './vendor/ezsystems/ezpublish-kernel/eZ/Publish/Core/FieldType/RichText/Resources/schemas/docbook/ezpublish.rng', + './vendor/ezsystems/ezpublish-kernel/eZ/Publish/Core/FieldType/RichText/Resources/schemas/docbook/docbook.iso.sch.xsl', + ) + ); + } + /** * @param string $inputFilePath * @param string $outputFilePath @@ -261,9 +273,10 @@ public function testConvert($inputFilePath, $outputFilePath, $logFilePath) public function testTagEmbeddedImages($inputFilePath, $outputFilePath) { $apiRepositoryStub = $this->createApiRepositoryStub(); + $validator = $this->getValidator(); $inputDocument = $this->createDocument($inputFilePath); - $richText = new RichText($apiRepositoryStub); + $richText = new RichText($apiRepositoryStub, null, $validator); $richText->setImageContentTypes(array(27)); $richText->tagEmbeddedImages($inputDocument, null);