entity_to_text-1.0.x-dev/modules/entity_to_text_paragraphs/src/Extractor/ParagraphsToText.php
modules/entity_to_text_paragraphs/src/Extractor/ParagraphsToText.php
<?php
namespace Drupal\entity_to_text_paragraphs\Extractor;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Render\RendererInterface;
use Drupal\entity_reference_revisions\EntityReferenceRevisionsFieldItemList;
use Drupal\entity_to_text\HtmlPurifier;
/**
* Provide Capabilities to transform a Paragraph content to plain-text strings.
*/
class ParagraphsToText {
/**
* The HTML Purifier service.
*
* @var \Drupal\entity_to_text\HtmlPurifier
*/
protected $htmlPurifier;
/**
* The renderer service.
*
* @var \Drupal\Core\Render\RendererInterface
*/
protected $renderer;
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
/**
* Construct a new ParagraphsToText object.
*/
public function __construct(HtmlPurifier $html_purifier, RendererInterface $renderer, EntityTypeManagerInterface $entity_type_manager) {
$this->htmlPurifier = $html_purifier;
$this->renderer = $renderer;
$this->entityTypeManager = $entity_type_manager;
}
/**
* Transform Paragraphs into an array of plain text value.
*
* @param \Drupal\entity_reference_revisions\EntityReferenceRevisionsFieldItemList $paragraph_items
* Paragraphs to transform.
*
* @return string[]
* The transformed paragraphs into an array of plain text.
*/
public function fromParagraphToText(EntityReferenceRevisionsFieldItemList $paragraph_items): array {
$values = [];
/** @var \Drupal\entity_reference_revisions\Plugin\Field\FieldType\EntityReferenceRevisionsItem $paragraph_item */
foreach ($paragraph_items as $paragraph_item) {
/** @var \Drupal\paragraphs\Entity\Paragraph $paragraph */
$paragraph = $paragraph_item->entity;
$render_controller = $this->entityTypeManager->getViewBuilder($paragraph->getEntityTypeId());
$view = $render_controller->view($paragraph, 'full', $paragraph_item->getLangcode());
/** @var \Drupal\Core\Render\Markup $markup */
$markup = $this->renderer->renderRoot($view);
$purifier = $this->htmlPurifier->init();
$clean_html = $purifier->purify($markup->__toString());
$values[] = trim($clean_html);
}
return $values;
}
}
