diff --git a/core/modules/media/config/schema/media.schema.yml b/core/modules/media/config/schema/media.schema.yml index 50a285bfc0..39b6dcb831 100644 --- a/core/modules/media/config/schema/media.schema.yml +++ b/core/modules/media/config/schema/media.schema.yml @@ -38,7 +38,7 @@ media.type.*: media.source.file: type: media.source.field_aware - label: 'File handler configuration' + label: '"File" media source configuration' action.configuration.media_delete_action: type: action_configuration_default diff --git a/core/modules/media/src/MediaSourceInterface.php b/core/modules/media/src/MediaSourceInterface.php index 723e0b9a8e..4c3b783222 100644 --- a/core/modules/media/src/MediaSourceInterface.php +++ b/core/modules/media/src/MediaSourceInterface.php @@ -72,6 +72,16 @@ const METADATA_FIELD_EMPTY = '_none'; /** + * Key for MIME type metadata attribute. + */ + const METADATA_ATTRIBUTE_MIME = 'mime'; + + /** + * Key for size metadata attribute. + */ + const METADATA_ATTRIBUTE_SIZE = 'size'; + + /** * Gets a list of metadata attributes provided by this plugin. * * Most media sources have associated metadata, describing attributes diff --git a/core/modules/media/src/Plugin/media/Source/File.php b/core/modules/media/src/Plugin/media/Source/File.php index 323638cd8e..5e6dd890ff 100644 --- a/core/modules/media/src/Plugin/media/Source/File.php +++ b/core/modules/media/src/Plugin/media/Source/File.php @@ -14,7 +14,7 @@ * @MediaSource( * id = "file", * label = @Translation("File"), - * description = @Translation("Allows local files to be used as media."), + * description = @Translation("Use local files for reusable media."), * allowed_field_types = {"file"}, * default_thumbnail_filename = "generic.png" * ) @@ -26,8 +26,8 @@ class File extends MediaSourceBase { */ public function getMetadataAttributes() { return [ - 'mime' => $this->t('MIME type'), - 'size' => $this->t('Size'), + MediaSourceInterface::METADATA_ATTRIBUTE_MIME => $this->t('MIME type'), + MediaSourceInterface::METADATA_ATTRIBUTE_SIZE => $this->t('Size'), ]; } @@ -35,30 +35,24 @@ public function getMetadataAttributes() { * {@inheritdoc} */ public function getMetadata(MediaInterface $media, $name) { - $icon_base = $this->configFactory->get('media.settings')->get('icon_base_uri'); /** @var \Drupal\file\FileInterface $file */ $file = $media->get($this->configuration['source_field'])->entity; - if (!$file) { - return parent::getMetadata($media, $name); - } switch ($name) { - case 'default_name': return $file->getFilename(); case 'thumbnail_uri': return $this->getThumbnail($file) ?: parent::getMetadata($media, $name); - case 'mime': + case MediaSourceInterface::METADATA_ATTRIBUTE_MIME: return $file->getMimeType() ?: FALSE; - case 'size': + case MediaSourceInterface::METADATA_ATTRIBUTE_SIZE: $size = $file->getSize(); return is_numeric($size) ? $size : FALSE; default: return parent::getMetadata($media, $name); - } } diff --git a/core/modules/media/tests/src/FunctionalJavascript/MediaSourceFileTest.php b/core/modules/media/tests/src/FunctionalJavascript/MediaSourceFileTest.php index ffe808cc87..7f90ac6358 100644 --- a/core/modules/media/tests/src/FunctionalJavascript/MediaSourceFileTest.php +++ b/core/modules/media/tests/src/FunctionalJavascript/MediaSourceFileTest.php @@ -15,38 +15,37 @@ class MediaSourceFileTest extends MediaSourceTestBase { * Tests the file media source. */ public function testMediaFileSource() { - $type_id = 'test_media_file_type'; + $media_type_id = 'test_media_file_type'; $source_field_id = 'field_media_file'; $provided_fields = [ - 'mime', - 'size', + MediaSourceInterface::METADATA_ATTRIBUTE_MIME, + MediaSourceInterface::METADATA_ATTRIBUTE_SIZE, ]; $session = $this->getSession(); $page = $session->getPage(); $assert_session = $this->assertSession(); - // Create file media source. - $this->createMediaTypeTest($type_id, 'file', $provided_fields); + $this->doTestCreateMediaType($media_type_id, 'file', $provided_fields); - // Create a custom field for the media type to store the mime metadata - // attribute. + // Create a custom field for the media type to store the MIME metadata + // attributes. $fields = [ 'field_string_mime' => 'string', 'field_string_size' => 'string', ]; - $this->createMediaTypeFields($fields, $type_id); + $this->createMediaTypeFields($fields, $media_type_id); // Hide the name field widget to test default name generation. - $this->hideMediaTypeFieldWidget('name', $type_id); + $this->hideMediaTypeFieldWidget('name', $media_type_id); - $this->drupalGet("admin/structure/media/manage/{$type_id}"); + $this->drupalGet("admin/structure/media/manage/{$media_type_id}"); $page->selectFieldOption("field_map[mime]", 'field_string_mime'); $page->selectFieldOption("field_map[size]", 'field_string_size'); $page->pressButton('Save'); // Create a media item. - $this->drupalGet("media/add/{$type_id}"); + $this->drupalGet("media/add/{$media_type_id}"); $page->attachFileToField("files[{$source_field_id}_0]", \Drupal::root() . '/sites/README.txt'); $assert_session->assertWaitOnAjaxRequest(); $page->pressButton('Save and publish'); @@ -62,10 +61,10 @@ public function testMediaFileSource() { $this->assertEquals('text/plain', $media->get('field_string_mime')->value); $this->assertEquals(filesize(\Drupal::root() . '/sites/README.txt'), $media->get('field_string_size')->value); - // Test the mime type icon. + // Test the MIME type icon. $icon_base = \Drupal::config('media.settings')->get('icon_base_uri'); file_unmanaged_copy($icon_base . '/generic.png', $icon_base . '/text--plain.png'); - $this->drupalGet("media/add/{$type_id}"); + $this->drupalGet("media/add/{$media_type_id}"); $page->attachFileToField("files[{$source_field_id}_0]", \Drupal::root() . '/sites/README.txt'); $assert_session->assertWaitOnAjaxRequest(); $page->pressButton('Save and publish'); diff --git a/core/modules/media/tests/src/FunctionalJavascript/MediaSourceTestBase.php b/core/modules/media/tests/src/FunctionalJavascript/MediaSourceTestBase.php index 6bf090d4c5..be9a6824a6 100644 --- a/core/modules/media/tests/src/FunctionalJavascript/MediaSourceTestBase.php +++ b/core/modules/media/tests/src/FunctionalJavascript/MediaSourceTestBase.php @@ -18,11 +18,11 @@ * @param string $field_name * The field name. * @param string $field_type - * The field storage type. - * @param string $type_id + * The field type. + * @param string $media_type_id * The media type config entity ID. */ - protected function createMediaTypeField($field_name, $field_type, $type_id) { + protected function createMediaTypeField($field_name, $field_type, $media_type_id) { $storage = FieldStorageConfig::create([ 'field_name' => $field_name, 'entity_type' => 'media', @@ -32,24 +32,23 @@ protected function createMediaTypeField($field_name, $field_type, $type_id) { FieldConfig::create([ 'field_storage' => $storage, - 'bundle' => $type_id, + 'bundle' => $media_type_id, ])->save(); // Make the field widget visible in the form display. $component = \Drupal::service('plugin.manager.field.widget') ->prepareConfiguration($field_type, []); - /** @var \Drupal\Core\Entity\Display\EntityFormDisplayInterface $entity_form_display */ $entity_form_display = \Drupal::entityTypeManager() ->getStorage('entity_form_display') - ->load('media.' . $type_id . '.default'); + ->load('media.' . $media_type_id . '.default'); if (!$entity_form_display) { - $entity_form_display = EntityFormDisplay::create(array( + $entity_form_display = EntityFormDisplay::create([ 'targetEntityType' => 'media', - 'bundle' => $type_id, + 'bundle' => $media_type_id, 'mode' => 'default', 'status' => TRUE, - )); + ]); } $entity_form_display->setComponent($field_name, $component) ->save(); @@ -60,12 +59,12 @@ protected function createMediaTypeField($field_name, $field_type, $type_id) { * * @param array $fields * An associative array where keys are field names and values field types. - * @param string $type_id + * @param string $media_type_id * The media type config entity ID. */ - protected function createMediaTypeFields(array $fields, $type_id) { + protected function createMediaTypeFields(array $fields, $media_type_id) { foreach ($fields as $field_name => $field_type) { - $this->createMediaTypeField($field_name, $field_type, $type_id); + $this->createMediaTypeField($field_name, $field_type, $media_type_id); } } @@ -74,21 +73,21 @@ protected function createMediaTypeFields(array $fields, $type_id) { * * @param string $field_name * The field name. - * @param string $type_id + * @param string $media_type_id * The media type config entity ID. */ - protected function hideMediaTypeFieldWidget($field_name, $type_id) { + protected function hideMediaTypeFieldWidget($field_name, $media_type_id) { /** @var \Drupal\Core\Entity\Display\EntityFormDisplayInterface $entity_form_display */ $entity_form_display = \Drupal::entityTypeManager() ->getStorage('entity_form_display') - ->load('media.' . $type_id . '.default'); + ->load('media.' . $media_type_id . '.default'); $entity_form_display->removeComponent($field_name)->save(); } /** * Test generic media type creation. * - * @param string $type_id + * @param string $media_type_id * The media type config entity ID. * @param string $source_id * The media source ID. @@ -96,16 +95,16 @@ protected function hideMediaTypeFieldWidget($field_name, $type_id) { * (optional) An array of field machine names this type provides. * * @return \Drupal\media\MediaTypeInterface - * The type created. + * The created media type. */ - public function createMediaTypeTest($type_id, $source_id, array $provided_fields = []) { + public function doTestCreateMediaType($media_type_id, $source_id, array $provided_fields = []) { $session = $this->getSession(); $page = $session->getPage(); $assert_session = $this->assertSession(); $this->drupalGet('admin/structure/media/add'); - $page->fillField('label', $type_id); - $this->assertJsCondition("jQuery('.machine-name-value').text() === '{$type_id}'"); + $page->fillField('label', $media_type_id); + $this->assertJsCondition("jQuery('.machine-name-value').text() === '{$media_type_id}'"); // Make sure the source is available. $this->assertSession()->fieldExists('Media source'); @@ -120,19 +119,19 @@ public function createMediaTypeTest($type_id, $source_id, array $provided_fields } } - // Save the page to create the type. + // Save the form to create the type. $page->pressButton('Save'); $assert_session->statusCodeEquals(200); - $assert_session->pageTextContains('The media type ' . $type_id . ' has been added.'); + $assert_session->pageTextContains('The media type ' . $media_type_id . ' has been added.'); $this->drupalGet('admin/structure/media'); - $assert_session->pageTextContains($type_id); + $assert_session->pageTextContains($media_type_id); // Bundle definitions are statically cached in the context of the test, we // need to make sure we have updated information before proceeding with the // actions on the UI. \Drupal::service('entity_type.bundle.info')->clearCachedBundles(); - return MediaType::load($type_id); + return MediaType::load($media_type_id); } } diff --git a/core/profiles/standard/config/optional/field.field.media.file.field_media_file.yml b/core/profiles/standard/config/optional/field.field.media.file.field_media_file.yml index 740d5df5bb..5db61f0da2 100644 --- a/core/profiles/standard/config/optional/field.field.media.file.field_media_file.yml +++ b/core/profiles/standard/config/optional/field.field.media.file.field_media_file.yml @@ -21,7 +21,7 @@ default_value: { } default_value_callback: '' settings: file_directory: '[date:custom:Y]-[date:custom:m]' - file_extensions: 'txt pdf' + file_extensions: 'txt' max_filesize: '' handler: 'default:file' handler_settings: { } diff --git a/core/profiles/standard/config/optional/media.type.file.yml b/core/profiles/standard/config/optional/media.type.file.yml index 109d801dd7..4bd2f46ca4 100644 --- a/core/profiles/standard/config/optional/media.type.file.yml +++ b/core/profiles/standard/config/optional/media.type.file.yml @@ -5,7 +5,7 @@ dependencies: - media id: file label: File -description: 'Use the "File" media type for uploading local files.' +description: 'Use the "File" media type for storing media locally.' source: file queue_thumbnail_downloads: false new_revision: false