diff --git a/core/modules/media/src/Entity/Media.php b/core/modules/media/src/Entity/Media.php index c21821077bcb23446f34ecaacccb236e8b90360d..d68a0a451c35b35c6e83f49a79ba4ab639de33f1 100644 --- a/core/modules/media/src/Entity/Media.php +++ b/core/modules/media/src/Entity/Media.php @@ -185,20 +185,11 @@ protected function updateThumbnail($from_queue = FALSE) { // Set the thumbnail alt. $media_source = $this->getSource(); $plugin_definition = $media_source->getPluginDefinition(); + + $this->thumbnail->alt = ''; if (!empty($plugin_definition['thumbnail_alt_metadata_attribute'])) { $this->thumbnail->alt = $media_source->getMetadata($this, $plugin_definition['thumbnail_alt_metadata_attribute']); } - else { - $this->thumbnail->alt = $this->t('Thumbnail', [], ['langcode' => $this->langcode->value]); - } - - // Set the thumbnail title. - if (!empty($plugin_definition['thumbnail_title_metadata_attribute'])) { - $this->thumbnail->title = $media_source->getMetadata($this, $plugin_definition['thumbnail_title_metadata_attribute']); - } - else { - $this->thumbnail->title = $this->label(); - } return $this; } diff --git a/core/modules/media/src/Plugin/media/Source/Image.php b/core/modules/media/src/Plugin/media/Source/Image.php index a83a5144d24b7416c27320330aac45730e25ceb4..34b565c05449af1df78e2b31e606816e6e32c43b 100644 --- a/core/modules/media/src/Plugin/media/Source/Image.php +++ b/core/modules/media/src/Plugin/media/Source/Image.php @@ -22,7 +22,8 @@ * label = @Translation("Image"), * description = @Translation("Use local images for reusable media."), * allowed_field_types = {"image"}, - * default_thumbnail_filename = "no-thumbnail.png" + * default_thumbnail_filename = "no-thumbnail.png", + * thumbnail_alt_metadata_attribute = "thumbnail_alt_value" * ) */ class Image extends File { @@ -138,6 +139,9 @@ public function getMetadata(MediaInterface $media, $name) { case 'thumbnail_uri': return $uri; + + case 'thumbnail_alt_value': + return $media->get($this->configuration['source_field'])->alt ?: parent::getMetadata($media, $name); } return parent::getMetadata($media, $name); diff --git a/core/modules/media/tests/src/Functional/Rest/MediaResourceTestBase.php b/core/modules/media/tests/src/Functional/Rest/MediaResourceTestBase.php index 85e4e5d7314470375e77a91e67d34281be9ff7b3..de352e001ac2019d94b777f8666e7978e27ad49e 100644 --- a/core/modules/media/tests/src/Functional/Rest/MediaResourceTestBase.php +++ b/core/modules/media/tests/src/Functional/Rest/MediaResourceTestBase.php @@ -167,13 +167,13 @@ protected function getExpectedNormalizedEntity() { ], 'thumbnail' => [ [ - 'alt' => 'Thumbnail', + 'alt' => '', 'width' => 180, 'height' => 180, 'target_id' => (int) $thumbnail->id(), 'target_type' => 'file', 'target_uuid' => $thumbnail->uuid(), - 'title' => 'Llama', + 'title' => NULL, 'url' => $thumbnail->url(), ], ], diff --git a/core/modules/media/tests/src/FunctionalJavascript/MediaSourceImageTest.php b/core/modules/media/tests/src/FunctionalJavascript/MediaSourceImageTest.php index faf58c1a39b6d6753b61bc1ce16ee0d7c309bc26..cb013805ad278c528bbaa01385f806ff9fccc4e1 100644 --- a/core/modules/media/tests/src/FunctionalJavascript/MediaSourceImageTest.php +++ b/core/modules/media/tests/src/FunctionalJavascript/MediaSourceImageTest.php @@ -59,6 +59,8 @@ public function testMediaImageSource() { // Make sure the thumbnail is displayed from uploaded image. $assert_session->elementAttributeContains('css', '.image-style-thumbnail', 'src', 'example_1.jpeg'); + // Ensure the thumbnail has the correct alt attribute. + $assert_session->elementAttributeContains('css', '.image-style-thumbnail', 'alt', 'Image Alt Text 1'); // Load the media and check that all fields are properly populated. $media = Media::load(1); diff --git a/core/modules/media/tests/src/Kernel/MediaSourceTest.php b/core/modules/media/tests/src/Kernel/MediaSourceTest.php index 79cb7b41462f262c6f9ba295db946f7e9841a81b..ecf17785047e07786aa270aa5c031b2f6b68bc92 100644 --- a/core/modules/media/tests/src/Kernel/MediaSourceTest.php +++ b/core/modules/media/tests/src/Kernel/MediaSourceTest.php @@ -40,7 +40,6 @@ public function testSave() { 'value' => 'Snowball', ], 'thumbnail_uri' => [ - 'title' => 'Thumbnail', 'value' => 'public://TheSisko.png', ], ]); @@ -230,7 +229,7 @@ public function testThumbnail() { // Save a media item and make sure thumbnail was added. \Drupal::state()->set('media_source_test_attributes', [ - 'thumbnail_uri' => ['title' => 'Thumbnail', 'value' => 'public://thumbnail1.jpg'], + 'thumbnail_uri' => ['value' => 'public://thumbnail1.jpg'], ]); /** @var \Drupal\media\MediaInterface $media */ $media = Media::create([ @@ -242,45 +241,46 @@ public function testThumbnail() { $this->assertSame('public://thumbnail1.jpg', $media_source->getMetadata($media, 'thumbnail_uri'), 'Value of the thumbnail metadata attribute is not correct.'); $media->save(); $this->assertSame('public://thumbnail1.jpg', $media->thumbnail->entity->getFileUri(), 'Thumbnail was not added to the media item.'); - $this->assertSame('Mr. Jones', $media->thumbnail->title, 'Title text was not set on the thumbnail.'); - $this->assertEquals('Thumbnail', $media->thumbnail->alt, 'Alt text was not set on the thumbnail.'); + // We expect the title not to be present on the Thumbnail. + $this->assertEmpty($media->thumbnail->title); + $this->assertSame('', $media->thumbnail->alt); // Now change the metadata attribute and make sure that the thumbnail stays // the same. \Drupal::state()->set('media_source_test_attributes', [ - 'thumbnail_uri' => ['title' => 'Thumbnail', 'value' => 'public://thumbnail2.jpg'], + 'thumbnail_uri' => ['value' => 'public://thumbnail2.jpg'], ]); $this->assertSame('public://thumbnail2.jpg', $media_source->getMetadata($media, 'thumbnail_uri'), 'Value of the thumbnail metadata attribute is not correct.'); $media->save(); $this->assertSame('public://thumbnail1.jpg', $media->thumbnail->entity->getFileUri(), 'Thumbnail was not preserved.'); - $this->assertSame('Mr. Jones', $media->thumbnail->title, 'Title text was not set on the thumbnail.'); - $this->assertEquals('Thumbnail', $media->thumbnail->alt, 'Alt text was not set on the thumbnail.'); + $this->assertEmpty($media->thumbnail->title); + $this->assertSame('', $media->thumbnail->alt); // Remove the thumbnail and make sure that it is auto-updated on save. $media->thumbnail->target_id = NULL; $this->assertSame('public://thumbnail2.jpg', $media_source->getMetadata($media, 'thumbnail_uri'), 'Value of the thumbnail metadata attribute is not correct.'); $media->save(); $this->assertSame('public://thumbnail2.jpg', $media->thumbnail->entity->getFileUri(), 'New thumbnail was not added to the media item.'); - $this->assertSame('Mr. Jones', $media->thumbnail->title, 'Title text was not set on the thumbnail.'); - $this->assertEquals('Thumbnail', $media->thumbnail->alt, 'Alt text was not set on the thumbnail.'); + $this->assertEmpty($media->thumbnail->title); + $this->assertSame('', $media->thumbnail->alt); // Change the metadata attribute again, change the source field value too // and make sure that the thumbnail updates. \Drupal::state()->set('media_source_test_attributes', [ - 'thumbnail_uri' => ['title' => 'Thumbnail', 'value' => 'public://thumbnail1.jpg'], + 'thumbnail_uri' => ['value' => 'public://thumbnail1.jpg'], ]); $media->field_media_test->value = 'some_new_value'; $this->assertSame('public://thumbnail1.jpg', $media_source->getMetadata($media, 'thumbnail_uri'), 'Value of the thumbnail metadata attribute is not correct.'); $media->save(); $this->assertSame('public://thumbnail1.jpg', $media->thumbnail->entity->getFileUri(), 'New thumbnail was not added to the media item.'); - $this->assertSame('Mr. Jones', $media->thumbnail->title, 'Title text was not set on the thumbnail.'); - $this->assertEquals('Thumbnail', $media->thumbnail->alt, 'Alt text was not set on the thumbnail.'); + $this->assertEmpty($media->thumbnail->title); + $this->assertSame('', $media->thumbnail->alt); // Change the thumbnail metadata attribute and make sure that the thumbnail // is set correctly. \Drupal::state()->set('media_source_test_attributes', [ - 'thumbnail_uri' => ['title' => 'Should not be used', 'value' => 'public://thumbnail1.jpg'], - 'alternative_thumbnail_uri' => ['title' => 'Should be used', 'value' => 'public://thumbnail2.jpg'], + 'thumbnail_uri' => ['value' => 'public://thumbnail1.jpg'], + 'alternative_thumbnail_uri' => ['value' => 'public://thumbnail2.jpg'], ]); \Drupal::state()->set('media_source_test_definition', ['thumbnail_uri_metadata_attribute' => 'alternative_thumbnail_uri']); $media = Media::create([ @@ -293,14 +293,14 @@ public function testThumbnail() { $this->assertSame('public://thumbnail2.jpg', $media_source->getMetadata($media, 'alternative_thumbnail_uri'), 'Value of the thumbnail metadata attribute is not correct.'); $media->save(); $this->assertSame('public://thumbnail2.jpg', $media->thumbnail->entity->getFileUri(), 'Correct metadata attribute was not used for the thumbnail.'); - $this->assertSame('Mr. Jones', $media->thumbnail->title, 'Title text was not set on the thumbnail.'); - $this->assertEquals('Thumbnail', $media->thumbnail->alt, 'Alt text was not set on the thumbnail.'); + $this->assertEmpty($media->thumbnail->title); + $this->assertSame('', $media->thumbnail->alt); // Enable queued thumbnails and make sure that the entity gets the default // thumbnail initially. \Drupal::state()->set('media_source_test_definition', []); \Drupal::state()->set('media_source_test_attributes', [ - 'thumbnail_uri' => ['title' => 'Should not be used', 'value' => 'public://thumbnail1.jpg'], + 'thumbnail_uri' => ['value' => 'public://thumbnail1.jpg'], ]); $this->testMediaType->setQueueThumbnailDownloadsStatus(TRUE)->save(); $media = Media::create([ @@ -311,8 +311,8 @@ public function testThumbnail() { $this->assertSame('public://thumbnail1.jpg', $media->getSource()->getMetadata($media, 'thumbnail_uri'), 'Value of the metadata attribute is not correct.'); $media->save(); $this->assertSame('public://media-icons/generic/generic.png', $media->thumbnail->entity->getFileUri(), 'Default thumbnail was not set initially.'); - $this->assertSame('Mr. Jones', $media->thumbnail->title, 'Title text was not set on the thumbnail.'); - $this->assertEquals('Thumbnail', $media->thumbnail->alt, 'Alt text was not set on the thumbnail.'); + $this->assertEmpty($media->thumbnail->title); + $this->assertSame('', $media->thumbnail->alt); // Process the queue item and make sure that the thumbnail was updated too. $queue_name = 'media_entity_thumbnail'; @@ -330,18 +330,15 @@ public function testThumbnail() { $media = Media::load($media->id()); $this->assertSame('public://thumbnail1.jpg', $media->thumbnail->entity->getFileUri(), 'Thumbnail was not updated by the queue.'); - $this->assertSame('Mr. Jones', $media->thumbnail->title, 'Title text was not set on the thumbnail.'); - $this->assertSame('Thumbnail', $media->thumbnail->alt, 'Alt text was not set on the thumbnail.'); + $this->assertEmpty($media->thumbnail->title); + $this->assertSame('', $media->thumbnail->alt); - // Set alt and title metadata attributes and make sure they are used for the - // thumbnail. + // Set the alt metadata attribute and make sure it's used for the thumbnail. \Drupal::state()->set('media_source_test_definition', [ 'thumbnail_alt_metadata_attribute' => 'alt', - 'thumbnail_title_metadata_attribute' => 'title', ]); \Drupal::state()->set('media_source_test_attributes', [ - 'alt' => ['title' => 'Alt text', 'value' => 'This will be alt.'], - 'title' => ['title' => 'Title text', 'value' => 'This will be title.'], + 'alt' => ['value' => 'This will be alt.'], ]); $media = Media::create([ 'bundle' => $this->testMediaType->id(), @@ -350,8 +347,8 @@ public function testThumbnail() { ]); $media->save(); $this->assertSame('Boxer', $media->getName(), 'Correct name was not set on the media item.'); - $this->assertSame('This will be title.', $media->thumbnail->title, 'Title text was not set on the thumbnail.'); - $this->assertSame('This will be alt.', $media->thumbnail->alt, 'Alt text was not set on the thumbnail.'); + $this->assertEmpty($media->thumbnail->title); + $this->assertSame('This will be alt.', $media->thumbnail->alt); } /** diff --git a/core/modules/migrate_drupal/tests/src/Kernel/Plugin/migrate/source/ContentEntityTest.php b/core/modules/migrate_drupal/tests/src/Kernel/Plugin/migrate/source/ContentEntityTest.php index 33e0197e2f5412facc613852b1349132c0475baf..cf5d3da4f89f39d780a3f3dcda974dd8d4e9e1fb 100644 --- a/core/modules/migrate_drupal/tests/src/Kernel/Plugin/migrate/source/ContentEntityTest.php +++ b/core/modules/migrate_drupal/tests/src/Kernel/Plugin/migrate/source/ContentEntityTest.php @@ -371,7 +371,7 @@ public function testMediaSource() { $values = $media_source->current()->getSource(); $this->assertEquals(1, $values['mid']); $this->assertEquals('Foo media', $values['name'][0]['value']); - $this->assertEquals('Foo media', $values['thumbnail'][0]['title']); + $this->assertNull($values['thumbnail'][0]['title']); $this->assertEquals(1, $values['uid'][0]['target_id']); $this->assertEquals('image', $values['bundle'][0]['target_id']); }