acquia_dam-1.0.0-rc1/src/Plugin/Field/FieldType/ComputedEmbedCodes.php
src/Plugin/Field/FieldType/ComputedEmbedCodes.php
<?php declare(strict_types=1); namespace Drupal\acquia_dam\Plugin\Field\FieldType; use Drupal\acquia_dam\EmbedCodeFactory; use Drupal\acquia_dam\Entity\MediaSourceField; use Drupal\acquia_dam\Plugin\media\Source\Asset; use Drupal\Core\Field\FieldItemList; use Drupal\Core\TypedData\ComputedItemListTrait; use Drupal\image\Entity\ImageStyle; use Drupal\image\ImageStyleInterface; use Drupal\media\MediaInterface; /** * Computed field class to dynamically returning embed codes. */ final class ComputedEmbedCodes extends FieldItemList { use ComputedItemListTrait; /** * {@inheritdoc} */ protected function computeValue() { $entity = $this->getEntity(); if (!$entity instanceof MediaInterface) { return; } $source = $entity->getSource(); if (!$source instanceof Asset) { return; } $asset_field = $entity->get(MediaSourceField::SOURCE_FIELD_NAME)->first(); if (!$asset_field instanceof AssetItem) { return; } $asset_type = $source->getDerivativeId(); $embed_options = EmbedCodeFactory::getSelectOptions($asset_type); if ($asset_type === 'image') { $stream_wrapper_manager = \Drupal::getContainer()->get('stream_wrapper_manager'); $embeds = []; foreach (array_keys($embed_options) as $option) { $uri = "acquia-dam://$asset_field->asset_id/$asset_field->version_id"; if ($option !== 'original') { $style = ImageStyle::load($option); if (!$style instanceof ImageStyleInterface) { continue; } $uri = $style->buildUri($uri); } $embeds[$option] = [ 'href' => $stream_wrapper_manager->getViaUri($uri)->getExternalUrl(), ]; } } else { $embeds = array_map(static function (array $embed) { return [ 'href' => $embed['url'], ]; }, $source->getMetadata($entity, 'embeds')); unset($embeds['templated']); } $this->list[0] = $this->createItem(0, $embeds); } }