diff -u b/core/modules/media/src/Plugin/media/Source/File.php b/core/modules/media/src/Plugin/media/Source/File.php --- b/core/modules/media/src/Plugin/media/Source/File.php +++ b/core/modules/media/src/Plugin/media/Source/File.php @@ -4,6 +4,7 @@ use Drupal\file\FileInterface; use Drupal\media\MediaInterface; +use Drupal\media\MediaTypeInterface; use Drupal\media\MediaSourceBase; /** @@ -110,2 +111,20 @@ + /** + * {@inheritdoc} + */ + public function createSourceField(MediaTypeInterface $type) { + $storage = $this->getSourceFieldStorage() ?: $this->createSourceFieldStorage(); + return $this->entityTypeManager + ->getStorage('field_config') + ->create([ + 'field_storage' => $storage, + 'bundle' => $type->id(), + 'label' => $this->pluginDefinition['label'], + 'required' => TRUE, + 'settings' => [ + 'file_extensions' => 'txt doc docx pdf' + ] + ]); + } + } diff -u b/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 --- b/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_callback: '' settings: file_directory: '[date:custom:Y]-[date:custom:m]' - file_extensions: 'txt' + file_extensions: 'txt doc docx pdf' max_filesize: '' handler: 'default:file' handler_settings: { } only in patch2: unchanged: --- /dev/null +++ b/core/modules/media/tests/src/Kernel/MediaSourceFileTest.php @@ -0,0 +1,52 @@ +createMediaType('file'); + + vfsStream::setup('drupal_root'); + vfsStream::create([ + 'sites' => [ + 'default' => [ + 'files' => [ + 'test.patch' => str_repeat('a', 3000), + ] + ] + ] + ]); + + // Create a random file that should fail. + $file = File::create([ + 'uri' => 'vfs://drupal_root/sites/default/files/test.patch', + ]); + $file->setPermanent(); + $file->save(); + + $media = Media::create([ + 'bundle' => $media_type->id(), + 'name' => 'Mr. Jones', + 'field_media_file' => [ + 'target_id' => $file->id(), + ] + ]); + + $result = $media->validate(); + $this->assertCount(1, $result); + $this->assertEquals('field_media_file.0', $result->get(0)->getPropertyPath()); + $this->assertEquals('Only files with the following extensions are allowed: txt doc docx pdf.', (string) $result->get(0)->getMessage()); + } +} \ No newline at end of file