diff --git a/composer.json b/composer.json index 7bd255c547..9558061f4d 100644 --- a/composer.json +++ b/composer.json @@ -60,7 +60,8 @@ "drupal/core-project-message": true, "drupal/core-vendor-hardening": true, "phpstan/extension-installer": true, - "dealerdirect/phpcodesniffer-composer-installer": true + "dealerdirect/phpcodesniffer-composer-installer": true, + "php-http/discovery": true } }, "extra": { diff --git a/core/modules/file/file.services.yml b/core/modules/file/file.services.yml index c64a9363be..89edf06d03 100644 --- a/core/modules/file/file.services.yml +++ b/core/modules/file/file.services.yml @@ -10,9 +10,6 @@ services: file.repository: class: Drupal\file\FileRepository arguments: [ '@file_system', '@stream_wrapper_manager', '@entity_type.manager', '@module_handler', '@file.usage', '@current_user' ] - file.field_definition_resolver: - class: Drupal\file\FileFieldDefinitionResolver - arguments: [ '@entity_field.manager' ] file.field_upload_handler: class: Drupal\file\Upload\FileFieldUploadHandler arguments: [ '@file_system', '@file.repository', '@stream_wrapper_manager', '@event_dispatcher', '@file.mime_type.guesser', '@current_user', '@request_stack', '@token' ] diff --git a/core/modules/file/src/FileFieldDefinitionResolver.php b/core/modules/file/src/FileFieldDefinitionResolver.php deleted file mode 100644 index 1c2a34283d..0000000000 --- a/core/modules/file/src/FileFieldDefinitionResolver.php +++ /dev/null @@ -1,64 +0,0 @@ -entityFieldManager = $entityFieldManager; - } - - /** - * Validates and loads a field definition instance. - * - * @param string $entity_type_id - * The entity type ID the field is attached to. - * @param string $bundle - * The bundle the field is attached to. - * @param string $field_name - * The field name. - * - * @return \Drupal\Core\Field\FieldDefinitionInterface - * The field definition. - * - * @throws \Drupal\Core\Entity\Exception\UnknownFieldException - * Thrown when the field does not exist. - * @throws \InvalidArgumentException - * Thrown when the target type of the field is not a file. - */ - public function resolveFieldDefinition(string $entity_type_id, string $bundle, string $field_name): FieldDefinitionInterface { - $field_definitions = $this->entityFieldManager->getFieldDefinitions($entity_type_id, $bundle); - if (!isset($field_definitions[$field_name])) { - throw new UnknownFieldException(sprintf('Field "%s" does not exist.', $field_name)); - } - - $field_definition = $field_definitions[$field_name]; - if ($field_definition->getSetting('target_type') !== 'file') { - throw new \InvalidArgumentException(sprintf('"%s" is not a file field', $field_name)); - } - return $field_definition; - } - -} diff --git a/core/modules/file/src/Upload/FileFieldUploadAccessChecker.php b/core/modules/file/src/Upload/FileFieldUploadAccessChecker.php index 6471c8cb1e..b35b716c5d 100644 --- a/core/modules/file/src/Upload/FileFieldUploadAccessChecker.php +++ b/core/modules/file/src/Upload/FileFieldUploadAccessChecker.php @@ -32,7 +32,7 @@ public function __construct(protected EntityTypeManagerInterface $entityTypeMana * @param \Drupal\Core\Entity\EntityInterface|null $entity * (optional) The entity to which the file is to be uploaded, if it exists. * If the entity does not exist and it is not given, create access to the - * file will be checked. + * file entity will be checked. * * @return \Drupal\Core\Access\AccessResultInterface * The file upload access result. diff --git a/core/modules/file/src/Upload/RawFileUploader.php b/core/modules/file/src/Upload/RawFileUploader.php index eb13e29dca..0155a0703f 100644 --- a/core/modules/file/src/Upload/RawFileUploader.php +++ b/core/modules/file/src/Upload/RawFileUploader.php @@ -31,9 +31,9 @@ public function __construct(protected FileSystemInterface $fileSystem) { * @param string $filename * The original file name of the uploaded file. * @param string $source - * (Optional) The source of the upload. Defaults to 'php://input'. + * (optional) The source of the upload. Defaults to 'php://input'. * @param string $mimeType - * (Optional) The type of the file as provided by PHP; null defaults to + * (optional) The type of the file as provided by PHP; null defaults to * application/octet-stream. * * @return \Drupal\file\Upload\RawUploadedFile diff --git a/core/modules/file/tests/src/Unit/FileFieldDefinitionResolverTest.php b/core/modules/file/tests/src/Unit/FileFieldDefinitionResolverTest.php deleted file mode 100644 index 884dbd81a0..0000000000 --- a/core/modules/file/tests/src/Unit/FileFieldDefinitionResolverTest.php +++ /dev/null @@ -1,87 +0,0 @@ -prophesize(FieldDefinitionInterface::class); - $field_definition->getSetting('target_type') - ->willReturn("file"); - - $definitions = [ - "baz" => $field_definition->reveal(), - ]; - - $entityFieldManager = $this->prophesize(EntityFieldManagerInterface::class); - $entityFieldManager->getFieldDefinitions("foo", "bar") - ->willReturn($definitions); - $resolver = new FileFieldDefinitionResolver($entityFieldManager->reveal()); - - $definition = $resolver->resolveFieldDefinition("foo", "bar", "baz"); - - $this->assertNotNull($definition); - } - - /** - * @covers ::resolveFieldDefinition - */ - public function testResolveFieldDefinitionUnknownField() { - - $entityFieldManager = $this->prophesize(EntityFieldManagerInterface::class); - $entityFieldManager->getFieldDefinitions("foo", "bar") - ->willReturn([]); - - $resolver = new FileFieldDefinitionResolver($entityFieldManager->reveal()); - - $field_name = "baz"; - - $this->expectException(UnknownFieldException::class); - $this->expectExceptionMessage(sprintf('Field "%s" does not exist.', $field_name)); - - $resolver->resolveFieldDefinition("foo", "bar", $field_name); - } - - /** - * @covers ::resolveFieldDefinition - */ - public function testResolveFieldDefinitionInvalidTargetType() { - - $field_definition = $this->prophesize(FieldDefinitionInterface::class); - $field_definition->getSetting('target_type') - ->willReturn("whiz"); - - $field_name = "baz"; - - $definitions = [ - $field_name => $field_definition->reveal(), - ]; - - $entityFieldManager = $this->prophesize(EntityFieldManagerInterface::class); - $entityFieldManager->getFieldDefinitions("foo", "bar") - ->willReturn($definitions); - $resolver = new FileFieldDefinitionResolver($entityFieldManager->reveal()); - - $this->expectException(\InvalidArgumentException::class); - $this->expectExceptionMessage(sprintf('"%s" is not a file field', $field_name)); - $resolver->resolveFieldDefinition("foo", "bar", $field_name); - - } - -} diff --git a/core/modules/jsonapi/src/Controller/FileUpload.php b/core/modules/jsonapi/src/Controller/FileUpload.php index a75aae70b2..752e228d51 100644 --- a/core/modules/jsonapi/src/Controller/FileUpload.php +++ b/core/modules/jsonapi/src/Controller/FileUpload.php @@ -12,7 +12,6 @@ use Drupal\Core\File\Exception\FileException; use Drupal\Core\Session\AccountInterface; use Drupal\Core\Url; -use Drupal\file\FileFieldDefinitionResolver; use Drupal\file\FileInterface; use Drupal\file\Upload\FileFieldUploadAccessChecker; use Drupal\file\Upload\FileFieldUploadHandler; @@ -85,11 +84,6 @@ class FileUpload { */ protected $fileFieldUploadHandler; - /** - * @var \Drupal\file\FileFieldDefinitionResolver - */ - protected $fieldResolver; - /** * The file field upload access checker. * @@ -129,8 +123,6 @@ class FileUpload { * The file field upload handler. * @param \Symfony\Component\HttpKernel\HttpKernelInterface $http_kernel * An HTTP kernel for making subrequests. - * @param \Drupal\file\FileFieldDefinitionResolver $field_resolver - * The file field definition resolver. * @param \Drupal\file\Upload\FileFieldUploadAccessChecker $access_checker * The file upload access checker. * @param \Drupal\file\Upload\FilenameExtractor $filename_extractor @@ -140,7 +132,7 @@ class FileUpload { * @param \Psr\Log\LoggerInterface $logger * The logger. */ - public function __construct(AccountInterface $current_user, EntityFieldManagerInterface $field_manager, FileFieldUploadHandler|TemporaryJsonapiFileFieldUploader $upload_handler, HttpKernelInterface $http_kernel, FileFieldDefinitionResolver $field_resolver, FileFieldUploadAccessChecker $access_checker, FilenameExtractor $filename_extractor, RawFileUploader $file_stream_uploader, LoggerInterface $logger) { + public function __construct(AccountInterface $current_user, EntityFieldManagerInterface $field_manager, FileFieldUploadHandler|TemporaryJsonapiFileFieldUploader $upload_handler, HttpKernelInterface $http_kernel, FileFieldUploadAccessChecker $access_checker, FilenameExtractor $filename_extractor, RawFileUploader $file_stream_uploader, LoggerInterface $logger) { $this->currentUser = $current_user; $this->fieldManager = $field_manager; $this->httpKernel = $http_kernel; @@ -150,7 +142,6 @@ public function __construct(AccountInterface $current_user, EntityFieldManagerIn $upload_handler = \Drupal::service('file.field_upload_handler'); } $this->fileFieldUploadHandler = $upload_handler; - $this->fieldResolver = $field_resolver; $this->uploadAccessChecker = $access_checker; $this->filenameExtractor = $filename_extractor; $this->fileStreamUploader = $file_stream_uploader; @@ -249,7 +240,7 @@ protected function doHandleFileUpload(Request $request, ResourceType $resource_t $file_field_name = $resource_type->getInternalName($file_field_name); try { - $field_definition = $this->fieldResolver->resolveFieldDefinition($resource_type->getEntityTypeId(), $resource_type->getBundle(), $file_field_name); + $field_definition = $this->resolveFieldDefinition($resource_type->getEntityTypeId(), $resource_type->getBundle(), $file_field_name); } catch (UnknownFieldException $e) { throw new NotFoundHttpException($e->getMessage(), $e); @@ -315,4 +306,35 @@ protected function ensureFileUploadAccess(FieldDefinitionInterface $field_defini } } + /** + * Validates and loads a field definition instance. + * + * @param string $entity_type_id + * The entity type ID the field is attached to. + * @param string $bundle + * The bundle the field is attached to. + * @param string $field_name + * The field name. + * + * @return \Drupal\Core\Field\FieldDefinitionInterface + * The field definition. + * + * @throws \Drupal\Core\Entity\Exception\UnknownFieldException + * Thrown when the field does not exist. + * @throws \InvalidArgumentException + * Thrown when the target type of the field is not a file. + */ + public function resolveFieldDefinition(string $entity_type_id, string $bundle, string $field_name): FieldDefinitionInterface { + $field_definitions = $this->fieldManager->getFieldDefinitions($entity_type_id, $bundle); + if (!isset($field_definitions[$field_name])) { + throw new UnknownFieldException(sprintf('Field "%s" does not exist.', $field_name)); + } + + $field_definition = $field_definitions[$field_name]; + if ($field_definition->getSetting('target_type') !== 'file') { + throw new \InvalidArgumentException(sprintf('"%s" is not a file field', $field_name)); + } + return $field_definition; + } + } diff --git a/core/modules/jsonapi/src/JsonapiServiceProvider.php b/core/modules/jsonapi/src/JsonapiServiceProvider.php index f919a391b8..b1fd5a5abc 100644 --- a/core/modules/jsonapi/src/JsonapiServiceProvider.php +++ b/core/modules/jsonapi/src/JsonapiServiceProvider.php @@ -48,7 +48,6 @@ public function register(ContainerBuilder $container) { ->addArgument(new Reference('entity_field.manager')) ->addArgument(new Reference('file.field_upload_handler')) ->addArgument(new Reference('http_kernel')) - ->addArgument(new Reference('file.field_definition_resolver')) ->addArgument(new Reference('file.upload_access_checker')) ->addArgument(new Reference('file.upload_filename_extractor')) ->addArgument(new Reference('file.raw_file_uploader'))