diff --git a/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatter.php b/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatter.php index 219dcb2..7c86ca2 100644 --- a/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatter.php +++ b/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatter.php @@ -8,6 +8,8 @@ namespace Drupal\image\Plugin\Field\FieldFormatter; use Drupal\Core\Field\FieldItemListInterface; +use Drupal\Core\Form\FormStateInterface; +use Drupal\Core\Link; use Drupal\Core\Url; use Drupal\Core\Cache\Cache; @@ -24,24 +26,6 @@ */ class ImageFormatter extends ImageFormatterBase { - - /** - * {@inheritdoc} - */ - public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { - return new static( - $plugin_id, - $plugin_definition, - $configuration['field_definition'], - $configuration['settings'], - $configuration['label'], - $configuration['view_mode'], - $configuration['third_party_settings'], - $container->get('current_user'), - $container->get('entity.manager')->getStorage('image_style') - ); - } - /** * {@inheritdoc} */ @@ -121,8 +105,8 @@ public function settingsSummary() { /** * {@inheritdoc} */ - public function viewElements(FieldItemListInterface $items) { - $elements = []; + public function viewElements(FieldItemListInterface $items, $langcode) { + $elements = array(); /** @var \Drupal\file\Entity\File[] $files */ $files = $this->getEntitiesToView($items); @@ -147,7 +131,7 @@ public function viewElements(FieldItemListInterface $items) { $image_style_setting = $this->getSetting('image_style'); // Collect cache tags to be added for each item in the field. - $cache_tags = []; + $cache_tags = array(); if (!empty($image_style_setting)) { $image_style = $this->imageStyleStorage->load($image_style_setting); $cache_tags = $image_style->getCacheTags(); @@ -166,18 +150,19 @@ public function viewElements(FieldItemListInterface $items) { $item_attributes = $item->_attributes; unset($item->_attributes); - $elements[$delta] = [ + $elements[$delta] = array( '#theme' => 'image_formatter', '#item' => $item, '#item_attributes' => $item_attributes, '#image_style' => $image_style_setting, '#url' => $url, - '#cache' => [ + '#cache' => array( 'tags' => $cache_tags, - ], - ]; + ), + ); } return $elements; } + } diff --git a/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatterBase.php b/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatterBase.php index f5878e1..d11ff4d 100644 --- a/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatterBase.php +++ b/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatterBase.php @@ -9,13 +9,9 @@ use Drupal\Core\Entity\EntityStorageInterface; use Drupal\Core\Field\EntityReferenceFieldItemListInterface; -use Drupal\Core\Language\LanguageInterface; use Drupal\Core\Field\FieldDefinitionInterface; -use Drupal\Core\Form\FormStateInterface; -use Drupal\Core\Link; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use Drupal\Core\Session\AccountInterface; -use Drupal\Core\Url; use Drupal\field\FieldConfigInterface; use Drupal\file\Plugin\Field\FieldFormatter\FileFormatterBase; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -68,23 +64,38 @@ public function __construct($plugin_id, $plugin_definition, FieldDefinitionInter /** * {@inheritdoc} */ - protected function getEntitiesToView(EntityReferenceFieldItemListInterface $items) { + public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { + return new static( + $plugin_id, + $plugin_definition, + $configuration['field_definition'], + $configuration['settings'], + $configuration['label'], + $configuration['view_mode'], + $configuration['third_party_settings'], + $container->get('current_user'), + $container->get('entity.manager')->getStorage('image_style') + ); + } + + /** + * {@inheritdoc} + */ + protected function getEntitiesToView(EntityReferenceFieldItemListInterface $items, $langcode) { // Add the default image if needed. if ($items->isEmpty()) { $default_image = $this->getFieldSetting('default_image'); - // If we are dealing with a configurable field, look in both // instance-level and field-level settings. if (empty($default_image['uuid']) && $this->fieldDefinition instanceof FieldConfigInterface) { $default_image = $this->fieldDefinition->getFieldStorageDefinition()->getSetting('default_image'); } if (!empty($default_image['uuid']) && $file = \Drupal::entityManager()->loadEntityByUuid('file', $default_image['uuid'])) { - // Clone the FieldItemList into a runtime-only object for the formatter, // so that the fallback image can be rendered without affecting the // field values in the entity being rendered. $items = clone $items; - $items->setValue([ + $items->setValue(array( 'target_id' => $file->id(), 'alt' => $default_image['alt'], 'title' => $default_image['title'], @@ -93,11 +104,12 @@ protected function getEntitiesToView(EntityReferenceFieldItemListInterface $item 'entity' => $file, '_loaded' => TRUE, '_is_default' => TRUE, - ]); + )); $file->_referringItem = $items[0]; } } - return parent::getEntitiesToView($items); + + return parent::getEntitiesToView($items, $langcode); } /** diff --git a/core/modules/image/src/Plugin/Field/FieldFormatter/ImageUrlFormatter.php b/core/modules/image/src/Plugin/Field/FieldFormatter/ImageUrlFormatter.php index 9d4fc11..fdf419d 100644 --- a/core/modules/image/src/Plugin/Field/FieldFormatter/ImageUrlFormatter.php +++ b/core/modules/image/src/Plugin/Field/FieldFormatter/ImageUrlFormatter.php @@ -7,6 +7,7 @@ namespace Drupal\image\Plugin\Field\FieldFormatter; use Drupal\Core\Cache\Cache; +use Drupal\Core\Cache\CacheableMetadata; use Drupal\Core\Field\FieldItemListInterface; use Drupal\Core\Link; use Drupal\Core\Url; @@ -27,7 +28,7 @@ class ImageUrlFormatter extends ImageFormatterBase { /** * {@inheritdoc} */ - public function viewElements(FieldItemListInterface $items) { + public function viewElements(FieldItemListInterface $items, $langcode) { $elements = []; /** @var \Drupal\file\Entity\File[] $images */ $images = $this->getEntitiesToView($items); @@ -61,23 +62,20 @@ public function viewElements(FieldItemListInterface $items) { // Set the link url if settings require such. $link_url = ($image_link_setting == 'file') ? Url::fromUri($url) : $link_url; - // Collect cache tags to be added for each item in the field. - $cache_tags = $image_style - ? Cache::mergeTags($image_style->getCacheTags(), $image->getCacheTags()) - : $image->getCacheTags(); + // Add cacheable metadata from the image and image style. + $cacheable_metadata = CacheableMetadata::createFromObject($image); + if ($image_style) { + $cacheable_metadata = $cacheable_metadata->merge(CacheableMetadata::createFromObject($image_style)); + } // Add a link if we have a valid link url. - $elements[$delta] = ($link_url instanceof Url) - ? Link::fromTextAndUrl($url, $link_url)->toRenderable() + [ - '#cache' => [ - 'tags' => $cache_tags, - ], - ] : [ - '#markup' => $url, - '#cache' => [ - 'tags' => $cache_tags, - ], - ]; + if ($link_url instanceof Url) { + $elements[$delta] = Link::fromTextAndUrl($url, $link_url)->toRenderable(); + } + else { + $elements[$delta] = ['#markup' => $url]; + } + $cacheable_metadata->applyTo($elements[$delta]); } return $elements; diff --git a/core/modules/image/src/Tests/ImageFieldDisplayTest.php b/core/modules/image/src/Tests/ImageFieldDisplayTest.php index 8cd47ad..b5caad8 100644 --- a/core/modules/image/src/Tests/ImageFieldDisplayTest.php +++ b/core/modules/image/src/Tests/ImageFieldDisplayTest.php @@ -8,7 +8,6 @@ namespace Drupal\image\Tests; use Drupal\Core\Field\FieldStorageDefinitionInterface; -use Drupal\Core\Url; use Drupal\field\Entity\FieldStorageConfig; use Drupal\user\RoleInterface; use Drupal\image\Entity\ImageStyle; diff --git a/core/modules/responsive_image/src/Plugin/Field/FieldFormatter/ResponsiveImageFormatter.php b/core/modules/responsive_image/src/Plugin/Field/FieldFormatter/ResponsiveImageFormatter.php index 1fa0ad2..5bf983c 100644 --- a/core/modules/responsive_image/src/Plugin/Field/FieldFormatter/ResponsiveImageFormatter.php +++ b/core/modules/responsive_image/src/Plugin/Field/FieldFormatter/ResponsiveImageFormatter.php @@ -130,7 +130,7 @@ public static function defaultSettings() { * {@inheritdoc} */ public function settingsForm(array $form, FormStateInterface $form_state) { - $responsive_image_options = []; + $responsive_image_options = array(); $responsive_image_styles = $this->responsiveImageStyleStorage->loadMultiple(); if ($responsive_image_styles && !empty($responsive_image_styles)) { foreach ($responsive_image_styles as $machine_name => $responsive_image_style) { @@ -140,29 +140,29 @@ public function settingsForm(array $form, FormStateInterface $form_state) { } } - $elements['responsive_image_style'] = [ + $elements['responsive_image_style'] = array( '#title' => t('Responsive image style'), '#type' => 'select', '#default_value' => $this->getSetting('responsive_image_style'), '#required' => TRUE, '#options' => $responsive_image_options, - '#description' => [ + '#description' => array( '#markup' => $this->linkGenerator->generate($this->t('Configure Responsive Image Styles'), new Url('entity.responsive_image_style.collection')), '#access' => $this->currentUser->hasPermission('administer responsive image styles'), - ], - ]; + ), + ); - $link_types = [ + $link_types = array( 'content' => t('Content'), 'file' => t('File'), - ]; - $elements['image_link'] = [ + ); + $elements['image_link'] = array( '#title' => t('Link image to'), '#type' => 'select', '#default_value' => $this->getSetting('image_link'), '#empty_option' => t('Nothing'), '#options' => $link_types, - ]; + ); return $elements; } @@ -171,16 +171,16 @@ public function settingsForm(array $form, FormStateInterface $form_state) { * {@inheritdoc} */ public function settingsSummary() { - $summary = []; + $summary = array(); $responsive_image_style = $this->responsiveImageStyleStorage->load($this->getSetting('responsive_image_style')); if ($responsive_image_style) { - $summary[] = t('Responsive image style: @responsive_image_style', ['@responsive_image_style' => $responsive_image_style->label()]); + $summary[] = t('Responsive image style: @responsive_image_style', array('@responsive_image_style' => $responsive_image_style->label())); - $link_types = [ + $link_types = array( 'content' => t('Linked to content'), 'file' => t('Linked to file'), - ]; + ); // Display this setting only if image is linked. if (isset($link_types[$this->getSetting('image_link')])) { $summary[] = $link_types[$this->getSetting('image_link')]; @@ -196,9 +196,9 @@ public function settingsSummary() { /** * {@inheritdoc} */ - public function viewElements(FieldItemListInterface $items) { - $elements = []; - $files = $this->getEntitiesToView($items); + public function viewElements(FieldItemListInterface $items, $langcode) { + $elements = array(); + $files = $this->getEntitiesToView($items, $langcode); // Early opt-out if the field is empty. if (empty($files)) { @@ -219,7 +219,7 @@ public function viewElements(FieldItemListInterface $items) { // Collect cache tags to be added for each item in the field. $responsive_image_style = $this->responsiveImageStyleStorage->load($this->getSetting('responsive_image_style')); - $image_styles_to_load = []; + $image_styles_to_load = array(); $cache_tags = []; if ($responsive_image_style) { $cache_tags = Cache::mergeTags($cache_tags, $responsive_image_style->getCacheTags()); @@ -242,16 +242,16 @@ public function viewElements(FieldItemListInterface $items) { $item_attributes = $item->_attributes; unset($item->_attributes); - $elements[$delta] = [ + $elements[$delta] = array( '#theme' => 'responsive_image_formatter', '#item' => $item, '#item_attributes' => $item_attributes, '#responsive_image_style_id' => $responsive_image_style ? $responsive_image_style->id() : '', '#url' => $url, - '#cache' => [ + '#cache' => array( 'tags' => $cache_tags, - ], - ]; + ), + ); } return $elements; }