diff --git a/core/modules/media/src/Plugin/media/Handler/File.php b/core/modules/media/src/Plugin/media/Handler/File.php index d0b2094..ed50a11 100644 --- a/core/modules/media/src/Plugin/media/Handler/File.php +++ b/core/modules/media/src/Plugin/media/Handler/File.php @@ -2,7 +2,6 @@ namespace Drupal\media\Plugin\media\Handler; -use Drupal\media\MediaTypeInterface; use Drupal\media\MediaInterface; use Drupal\media\MediaHandlerBase; @@ -32,13 +31,8 @@ public function providedFields() { * {@inheritdoc} */ public function getField(MediaInterface $media, $name) { - $source_field = $this->configuration['source_field']; - - // Get the file. - /** @var \Drupal\file\FileInterface $file */ - $file = $media->{$source_field}->entity; + $file = $this->getSourceFieldValue($media); - // Return the field. switch ($name) { case 'mime': return $file->getMimeType() ?: FALSE; @@ -55,9 +49,7 @@ public function getField(MediaInterface $media, $name) { * {@inheritdoc} */ public function thumbnail(MediaInterface $media) { - $source_field = $this->configuration['source_field']; - /** @var \Drupal\file\FileInterface $file */ - $file = $media->{$source_field}->entity; + $file = $this->getSourceFieldValue($media); $icon_base = $this->configFactory->get('media.settings')->get('icon_base'); $thumbnail = FALSE; @@ -87,39 +79,39 @@ public function thumbnail(MediaInterface $media) { */ public function getDefaultName(MediaInterface $media) { // The default name will be the filename of the source_field, if present. + $file = $this->getSourceFieldValue($media); + return $file->getFilename(); + } + + /** + * Get source field file entity. + * + * @param \Drupal\media\MediaInterface $media + * The media entity. + * + * @return \Drupal\file\FileInterface + * The file entity present in the source field. + */ + protected function getSourceFieldValue(MediaInterface $media) { $source_field = $this->configuration['source_field']; - /** @var \Drupal\file\FileInterface $file */ - if (!empty($source_field) && ($file = $media->{$source_field}->entity)) { - return $file->getFilename(); + if (empty($source_field)) { + throw new \RuntimeException('Source field for media file handler is not defined.'); } - return parent::getDefaultName($media); - } + $file = $media->get($source_field)->entity; + if (empty($file)) { + throw new \RuntimeException('The source field does not contain a file entity.'); + } - /** - * {@inheritdoc} - */ - protected function createSourceFieldStorage() { - return $this->entityTypeManager - ->getStorage('field_storage_config') - ->create([ - 'entity_type' => 'media', - 'field_name' => $this->getSourceFieldName(), - 'type' => 'file', - ]); + return $file; } /** * {@inheritdoc} */ - protected function createSourceField(MediaTypeInterface $type) { - return $this->entityTypeManager - ->getStorage('field_config') - ->create([ - 'field_storage' => $this->getSourceFieldStorage(), - 'bundle' => $type->id(), - ]); + protected function getSourceFieldType() { + return 'file'; } } diff --git a/core/modules/media/tests/src/FunctionalJavascript/MediaHandlerTestBase.php b/core/modules/media/tests/src/FunctionalJavascript/MediaHandlerTestBase.php index b176020..911f339 100644 --- a/core/modules/media/tests/src/FunctionalJavascript/MediaHandlerTestBase.php +++ b/core/modules/media/tests/src/FunctionalJavascript/MediaHandlerTestBase.php @@ -42,8 +42,7 @@ public function createMediaTypeTest($type_name, $type_id, array $provided_fields $this->drupalGet('admin/structure/media/add'); $page->fillField('label', $type_name); - // assertWaitOnAjaxRequest() doesn't work on the machine name element. - $session->wait(5000, "jQuery('.machine-name-value').text() === '$type_name'"); + $this->assertJsCondition("jQuery('.machine-name-value').text() === '$type_name'"); // Make sure the type is available. $assert_session->optionExists('handler', $type_id);