1 | <?php |
||
24 | final class EmbeddedMediaBlockProcessor implements ArticleBodyProcessorInterface |
||
25 | { |
||
26 | /** |
||
27 | * @var FileExtensionCheckerInterface |
||
28 | */ |
||
29 | private $fileExtensionChecker; |
||
30 | |||
31 | public function __construct(FileExtensionCheckerInterface $fileExtensionChecker) |
||
35 | |||
36 | public function process(ArticleInterface $article, ArticleMediaInterface $articleMedia): void |
||
37 | { |
||
38 | if (ArticleInterface::KEY_FEATURE_MEDIA === $articleMedia->getKey() || null === $articleMedia->getImage()) { |
||
39 | return; |
||
40 | } |
||
41 | |||
42 | $body = $article->getBody(); |
||
43 | $mediaId = str_replace('/', '\\/', $articleMedia->getKey()); |
||
44 | $assetId = $articleMedia->getImage()->getAssetId(); |
||
45 | $assetId = str_replace('_', '/', $assetId); |
||
46 | |||
47 | $crawler = new Crawler(); |
||
48 | $crawler->addHtmlContent($body); |
||
49 | $item = $crawler->filterXPath('//div[@class="media-block"]/img[contains(@src, "'.$assetId.'")]'); |
||
50 | |||
51 | $imgElement = $item->first()->getNode(0); |
||
52 | if (null === $imgElement) { |
||
53 | return; |
||
54 | } |
||
55 | |||
56 | $mediaBlockElement = $imgElement->parentNode; |
||
57 | $captionText = $mediaBlockElement->getElementsByTagName('span')[0]->textContent; |
||
58 | $editor3MediaBlock = $mediaBlockElement->ownerDocument->saveHTML($mediaBlockElement); |
||
59 | $newNodeHtml = '<!-- EMBED START Image {id: "'.$mediaId.'"} --><figure><img src="'.$item->first()->attr('src').'" alt="'.$item->first()->attr('alt').'" /><figcaption>'.$captionText.'</figcaption></figure><!-- EMBED END Image {id: "'.$mediaId.'"} -->'; |
||
60 | |||
61 | $article->setBody(str_replace($editor3MediaBlock, $newNodeHtml, $crawler->html())); |
||
62 | } |
||
63 | |||
64 | public function supports(string $type): bool |
||
68 | } |
||
69 |