From 58eed7bf085bc48e150014d34d51e05920e25ccf Mon Sep 17 00:00:00 2001 From: Bertrand Dunogier Date: Sat, 10 Nov 2018 12:28:14 +0100 Subject: [PATCH] Exposed richtext embeds ``` { content { blogPost(id: 240) { body { html5 embeds { _info { id } ... on PlaceContent { name location { address } } } } } } } ``` --- GraphQL/Resolver/RichTextResolver.php | 29 +++++++++++++++++++++++- Resources/config/graphql/Field.types.yml | 5 ++++ Resources/config/resolvers.yml | 3 +++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/GraphQL/Resolver/RichTextResolver.php b/GraphQL/Resolver/RichTextResolver.php index cdaa984..0b48041 100644 --- a/GraphQL/Resolver/RichTextResolver.php +++ b/GraphQL/Resolver/RichTextResolver.php @@ -6,7 +6,10 @@ namespace BD\EzPlatformGraphQLBundle\GraphQL\Resolver; use DOMDocument; +use eZ\Publish\API\Repository\ContentService; +use eZ\Publish\API\Repository\Values\Content\Relation; use eZ\Publish\Core\FieldType\RichText\Converter as RichTextConverterInterface; +use eZ\Publish\Core\FieldType\RichText; class RichTextResolver { @@ -19,10 +22,26 @@ class RichTextResolver */ private $richTextEditConverter; - public function __construct(RichTextConverterInterface $richTextConverter, RichTextConverterInterface $richTextEditConverter) + /** + * @var RichText\Type + */ + private $fieldType; + /** + * @var ContentService + */ + private $contentService; + + public function __construct( + RichTextConverterInterface $richTextConverter, + RichTextConverterInterface $richTextEditConverter, + ContentService $contentService, + RichText\Type $fieldType + ) { $this->richTextConverter = $richTextConverter; $this->richTextEditConverter = $richTextEditConverter; + $this->fieldType = $fieldType; + $this->contentService = $contentService; } public function xmlToHtml5(DOMDocument $document) @@ -34,4 +53,12 @@ public function xmlToHtml5Edit(DOMDocument $document) { return $this->richTextEditConverter->convert($document)->saveHTML(); } + + public function resolveEmbeds(RichText\Value $value) + { + foreach ($this->fieldType->getRelations($value)[Relation::EMBED]['contentIds'] as $embeddedContentId) { + // @todo Handle locationIds as well + yield $this->contentService->loadContentInfo($embeddedContentId); + } + } } diff --git a/Resources/config/graphql/Field.types.yml b/Resources/config/graphql/Field.types.yml index 475ee3f..c052f28 100644 --- a/Resources/config/graphql/Field.types.yml +++ b/Resources/config/graphql/Field.types.yml @@ -390,6 +390,11 @@ RichTextFieldValue: type: "String" description: "Editable HTML5 representation." resolve: "@=resolver('RichTextXmlToHtml5Edit', [value.xml])" + deprecationReason: "Use 'rendered' with the html5_edit format argument" + embeds: + type: "[DomainContent]" + description: "Content items embedded in this field" + resolve: "@=resolver('RichTextEmbeds', [value.value])" inherits: [HTMLFieldValue] SelectionFieldValue: diff --git a/Resources/config/resolvers.yml b/Resources/config/resolvers.yml index ed774a7..cca6ac7 100644 --- a/Resources/config/resolvers.yml +++ b/Resources/config/resolvers.yml @@ -100,9 +100,12 @@ services: arguments: - "@ezpublish.fieldType.ezrichtext.converter.output.xhtml5" - "@ezpublish.fieldType.ezrichtext.converter.edit.xhtml5" + - '@ezpublish.siteaccessaware.service.content' + - '@ezpublish.fieldType.ezrichtext' tags: - { name: overblog_graphql.resolver, alias: "RichTextXmlToHtml5", method: "xmlToHtml5" } - { name: overblog_graphql.resolver, alias: "RichTextXmlToHtml5Edit", method: "xmlToHtml5Edit" } + - { name: overblog_graphql.resolver, alias: "RichTextEmbeds", method: "resolveEmbeds" } BD\EzPlatformGraphQLBundle\GraphQL\Resolver\ImageFieldResolver: arguments: