diff --git a/core/modules/media/src/Entity/Media.php b/core/modules/media/src/Entity/Media.php index f9c06093ac..b17f7c5edf 100644 --- a/core/modules/media/src/Entity/Media.php +++ b/core/modules/media/src/Entity/Media.php @@ -269,7 +269,7 @@ public function preSave(EntityStorageInterface $storage) { foreach ($this->bundle->entity->getFieldMap() as $metadata_attribute_name => $entity_field_name) { // Only save value in entity field if empty. Do not overwrite existing // data. - if ($this->hasField($entity_field_name) && ($this->get($entity_field_name)->isEmpty() || $this->sourceFieldChanged()) && ($value = $this->getSource()->getMetadata($this, $metadata_attribute_name))) { + if ($this->hasField($entity_field_name) && ($this->get($entity_field_name)->isEmpty() || $this->sourceFieldChanged()) && ($value = $this->getSource()->getMetadata($this, $metadata_attribute_name)) && $value !== NULL) { $this->set($entity_field_name, $value); } } diff --git a/core/modules/media/src/MediaSourceBase.php b/core/modules/media/src/MediaSourceBase.php index aa911c69b6..98c0e1ec13 100644 --- a/core/modules/media/src/MediaSourceBase.php +++ b/core/modules/media/src/MediaSourceBase.php @@ -125,7 +125,6 @@ public function defaultConfiguration() { */ public function getMetadata(MediaInterface $media, $attribute_name) { switch ($attribute_name) { - case 'default_name': return 'media:' . $media->bundle() . ':' . $media->uuid(); @@ -133,6 +132,8 @@ public function getMetadata(MediaInterface $media, $attribute_name) { $default_thumbnail_filename = $this->pluginDefinition['default_thumbnail_filename']; return $this->configFactory->get('media.settings')->get('icon_base_uri') . '/' . $default_thumbnail_filename; } + + return NULL; } /** diff --git a/core/modules/media/src/MediaSourceInterface.php b/core/modules/media/src/MediaSourceInterface.php index 1036907507..0e0a5ba061 100644 --- a/core/modules/media/src/MediaSourceInterface.php +++ b/core/modules/media/src/MediaSourceInterface.php @@ -107,8 +107,8 @@ public function getMetadataAttributes(); * @param string $attribute_name * Name of the attribute to fetch. * - * @return mixed|false - * Metadata attribute value or FALSE if unavailable. + * @return mixed|null + * Metadata attribute value or NULL if unavailable. */ public function getMetadata(MediaInterface $media, $attribute_name); diff --git a/core/modules/media/tests/src/Kernel/MediaSourceTest.php b/core/modules/media/tests/src/Kernel/MediaSourceTest.php index 365370987f..252eab0ec4 100644 --- a/core/modules/media/tests/src/Kernel/MediaSourceTest.php +++ b/core/modules/media/tests/src/Kernel/MediaSourceTest.php @@ -80,6 +80,16 @@ public function testMetadataMapping() { $media->save(); $this->assertEmpty($media->get($field_name)->value, 'Field stayed empty.'); + // Make sure that source plugin returns NULL for non-existing fields. + $this->testMediaType->setFieldMap(['not_here_at_all' => $field_name])->save(); + $media = Media::create([ + 'bundle' => $this->testMediaType->id(), + 'field_media_test' => 'some_value', + ]); + $this->assertNull($media->getSource()->getMetadata($media, 'not_here_at_all'), 'NULL is returned if asking for a value of non-existing metadata.'); + $media->save(); + $this->assertTrue($media->get($field_name)->isEmpty(), 'Non-existing metadata attribute was not mapped to the field.'); + // Define mapping and make sure that the value was stored in the field. \Drupal::state()->set('media_source_test_attributes', [ $attribute_name => ['title' => 'Attribute to map', 'value' => 'Snowball'],