acquia_dam-1.0.0-rc1/src/Plugin/Field/FieldFormatter/AssetThumbnailViewer.php
src/Plugin/Field/FieldFormatter/AssetThumbnailViewer.php
<?php namespace Drupal\acquia_dam\Plugin\Field\FieldFormatter; use Drupal\acquia_dam\Plugin\media\Source\Asset; use Drupal\Core\Field\FieldDefinitionInterface; use Drupal\Core\Field\FieldItemListInterface; use Drupal\Core\Field\FormatterBase; use Drupal\Core\Form\FormStateInterface; /** * Plugin implementation of the 'acquia dam image' formatter. * * @FieldFormatter( * id = "acquia_dam_thumbnail", * label = @Translation("Acquia Dam Image Thumbnail"), * field_types = { * "image" * } * ) */ final class AssetThumbnailViewer extends FormatterBase { /** * {@inheritdoc} */ public static function defaultSettings() { return [ 'thumbnail_size' => '300px', ] + parent::defaultSettings(); } /** * {@inheritdoc} */ public function settingsForm(array $form, FormStateInterface $form_state) { $elements = parent::settingsForm($form, $form_state); $sizes = [ '125px' => '125px', '160px' => '160px', '300px' => '300px', '600px' => '600px', '2048px' => '2048px', ]; $elements['thumbnail_size'] = [ '#title' => t('Image size'), '#type' => 'select', '#default_value' => $this->getSetting('thumbnail_size'), '#options' => $sizes, ]; return $elements; } /** * {@inheritdoc} */ public function settingsSummary() { $summary = []; $size_settings = $this->getSetting('thumbnail_size'); if (isset($size_settings)) { $summary[] = t('DAM Image size: @size', ['@size' => $size_settings]); } else { $summary[] = t('DAM Image style: 300px'); } return $summary; } /** * {@inheritdoc} */ public function viewElements(FieldItemListInterface $items, $langcode = NULL): array { $elements = []; $parent = $items->getEntity(); if ($parent->getSource() instanceof Asset) { $thumbnails_list = $parent->getSource()->getMetadata($parent, 'thumbnails'); $size = $this->getSetting('thumbnail_size') ?: '300px'; $dimension = (int) filter_var($size, FILTER_SANITIZE_NUMBER_INT); $elements[0] = [ '#theme' => 'image', '#width' => $dimension, '#height' => $dimension, '#uri' => $thumbnails_list[$size]['url'], '#alt' => $this->t('@filename preview', [ '@filename' => $parent->getName(), ]), ]; } return $elements; } /** * {@inheritdoc} */ public static function isApplicable(FieldDefinitionInterface $field_definition) { // Only run on our media type + field. if ($field_definition->getTargetEntityTypeId() !== 'media') { return FALSE; } if ($field_definition->getName() !== 'thumbnail') { return FALSE; } return TRUE; } }