Loading core/modules/media/src/Annotation/MediaSource.php +14 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,20 @@ class MediaSource extends Plugin { */ public $thumbnail_uri_metadata_attribute = 'thumbnail_uri'; /** * The metadata attribute name to provide the thumbnail width. * * @var string */ public $thumbnail_width_metadata_attribute = 'thumbnail_width'; /** * The metadata attribute name to provide the thumbnail height. * * @var string */ public $thumbnail_height_metadata_attribute = 'thumbnail_height'; /** * (optional) The metadata attribute name to provide the thumbnail alt. * Loading core/modules/media/src/Entity/Media.php +52 −0 Original line number Diff line number Diff line Loading @@ -154,6 +154,8 @@ public function getSource() { */ protected function updateThumbnail($from_queue = FALSE) { $this->thumbnail->target_id = $this->loadThumbnail($this->getThumbnailUri($from_queue))->id(); $this->thumbnail->width = $this->getThumbnailWidth($from_queue); $this->thumbnail->height = $this->getThumbnailHeight($from_queue); // Set the thumbnail alt. $media_source = $this->getSource(); Loading Loading @@ -258,6 +260,56 @@ protected function getThumbnailUri($from_queue) { return $source->getMetadata($this, $source->getPluginDefinition()['thumbnail_uri_metadata_attribute']); } /** * Gets the width of the thumbnail of a media item. * * @param bool $from_queue * Specifies whether the thumbnail is being fetched from the queue. * * @return int|null * The width of the thumbnail of the media item or NULL if the media is new * and the thumbnails are set to be downloaded in a queue. * * @internal */ protected function getThumbnailWidth(bool $from_queue): ?int { $thumbnails_queued = $this->bundle->entity->thumbnailDownloadsAreQueued(); if ($thumbnails_queued && $this->isNew()) { return NULL; } elseif ($thumbnails_queued && !$from_queue) { return $this->get('thumbnail')->width; } $source = $this->getSource(); return $source->getMetadata($this, $source->getPluginDefinition()['thumbnail_width_metadata_attribute']); } /** * Gets the height of the thumbnail of a media item. * * @param bool $from_queue * Specifies whether the thumbnail is being fetched from the queue. * * @return int|null * The height of the thumbnail of the media item or NULL if the media is new * and the thumbnails are set to be downloaded in a queue. * * @internal */ protected function getThumbnailHeight(bool $from_queue): ?int { $thumbnails_queued = $this->bundle->entity->thumbnailDownloadsAreQueued(); if ($thumbnails_queued && $this->isNew()) { return NULL; } elseif ($thumbnails_queued && !$from_queue) { return $this->get('thumbnail')->height; } $source = $this->getSource(); return $source->getMetadata($this, $source->getPluginDefinition()['thumbnail_height_metadata_attribute']); } /** * Determines if the source field value has changed. * Loading core/modules/media/tests/src/Kernel/MediaSourceTest.php +19 −0 Original line number Diff line number Diff line Loading @@ -300,6 +300,25 @@ public function testThumbnail() { $this->assertEmpty($media->thumbnail->title); $this->assertSame('', $media->thumbnail->alt); // Set the width and height metadata attributes and make sure they're used // for the thumbnail. \Drupal::state()->set('media_source_test_definition', [ 'thumbnail_width_metadata_attribute' => 'width', 'thumbnail_height_metadata_attribute' => 'height', ]); \Drupal::state()->set('media_source_test_attributes', [ 'width' => ['value' => 1024], 'height' => ['value' => 768], ]); $media = Media::create([ 'bundle' => $this->testMediaType->id(), 'name' => 'Are you looking at me?', 'field_media_test' => 'some_value', ]); $media->save(); $this->assertSame(1024, $media->thumbnail->width); $this->assertSame(768, $media->thumbnail->height); // Enable queued thumbnails and make sure that the entity gets the default // thumbnail initially. \Drupal::state()->set('media_source_test_definition', []); Loading Loading
core/modules/media/src/Annotation/MediaSource.php +14 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,20 @@ class MediaSource extends Plugin { */ public $thumbnail_uri_metadata_attribute = 'thumbnail_uri'; /** * The metadata attribute name to provide the thumbnail width. * * @var string */ public $thumbnail_width_metadata_attribute = 'thumbnail_width'; /** * The metadata attribute name to provide the thumbnail height. * * @var string */ public $thumbnail_height_metadata_attribute = 'thumbnail_height'; /** * (optional) The metadata attribute name to provide the thumbnail alt. * Loading
core/modules/media/src/Entity/Media.php +52 −0 Original line number Diff line number Diff line Loading @@ -154,6 +154,8 @@ public function getSource() { */ protected function updateThumbnail($from_queue = FALSE) { $this->thumbnail->target_id = $this->loadThumbnail($this->getThumbnailUri($from_queue))->id(); $this->thumbnail->width = $this->getThumbnailWidth($from_queue); $this->thumbnail->height = $this->getThumbnailHeight($from_queue); // Set the thumbnail alt. $media_source = $this->getSource(); Loading Loading @@ -258,6 +260,56 @@ protected function getThumbnailUri($from_queue) { return $source->getMetadata($this, $source->getPluginDefinition()['thumbnail_uri_metadata_attribute']); } /** * Gets the width of the thumbnail of a media item. * * @param bool $from_queue * Specifies whether the thumbnail is being fetched from the queue. * * @return int|null * The width of the thumbnail of the media item or NULL if the media is new * and the thumbnails are set to be downloaded in a queue. * * @internal */ protected function getThumbnailWidth(bool $from_queue): ?int { $thumbnails_queued = $this->bundle->entity->thumbnailDownloadsAreQueued(); if ($thumbnails_queued && $this->isNew()) { return NULL; } elseif ($thumbnails_queued && !$from_queue) { return $this->get('thumbnail')->width; } $source = $this->getSource(); return $source->getMetadata($this, $source->getPluginDefinition()['thumbnail_width_metadata_attribute']); } /** * Gets the height of the thumbnail of a media item. * * @param bool $from_queue * Specifies whether the thumbnail is being fetched from the queue. * * @return int|null * The height of the thumbnail of the media item or NULL if the media is new * and the thumbnails are set to be downloaded in a queue. * * @internal */ protected function getThumbnailHeight(bool $from_queue): ?int { $thumbnails_queued = $this->bundle->entity->thumbnailDownloadsAreQueued(); if ($thumbnails_queued && $this->isNew()) { return NULL; } elseif ($thumbnails_queued && !$from_queue) { return $this->get('thumbnail')->height; } $source = $this->getSource(); return $source->getMetadata($this, $source->getPluginDefinition()['thumbnail_height_metadata_attribute']); } /** * Determines if the source field value has changed. * Loading
core/modules/media/tests/src/Kernel/MediaSourceTest.php +19 −0 Original line number Diff line number Diff line Loading @@ -300,6 +300,25 @@ public function testThumbnail() { $this->assertEmpty($media->thumbnail->title); $this->assertSame('', $media->thumbnail->alt); // Set the width and height metadata attributes and make sure they're used // for the thumbnail. \Drupal::state()->set('media_source_test_definition', [ 'thumbnail_width_metadata_attribute' => 'width', 'thumbnail_height_metadata_attribute' => 'height', ]); \Drupal::state()->set('media_source_test_attributes', [ 'width' => ['value' => 1024], 'height' => ['value' => 768], ]); $media = Media::create([ 'bundle' => $this->testMediaType->id(), 'name' => 'Are you looking at me?', 'field_media_test' => 'some_value', ]); $media->save(); $this->assertSame(1024, $media->thumbnail->width); $this->assertSame(768, $media->thumbnail->height); // Enable queued thumbnails and make sure that the entity gets the default // thumbnail initially. \Drupal::state()->set('media_source_test_definition', []); Loading