Skip to content
Snippets Groups Projects
Verified Commit 7a127108 authored by Alex Pott's avatar Alex Pott
Browse files

Issue #3389688 by kim.pepper, smustgrave, alexpott, quietone: Add a trait to...

Issue #3389688 by kim.pepper, smustgrave, alexpott, quietone: Add a trait to get file upload location from a field definition
parent 0dac7cab
No related branches found
No related tags found
27 merge requests!11131[10.4.x-only-DO-NOT-MERGE]: Issue ##2842525 Ajax attached to Views exposed filter form does not trigger callbacks,!9470[10.3.x-only-DO-NOT-MERGE]: #3331771 Fix file_get_contents(): Passing null to parameter,!8540Issue #3457061: Bootstrap Modal dialog Not closing after 10.3.0 Update,!8528Issue #3456871 by Tim Bozeman: Support NULL services,!8373Issue #3427374 by danflanagan8, Vighneshh: taxonomy_tid ViewsArgumentDefault...,!3878Removed unused condition head title for views,!3818Issue #2140179: $entity->original gets stale between updates,!3742Issue #3328429: Create item list field formatter for displaying ordered and unordered lists,!3731Claro: role=button on status report items,!3651Issue #3347736: Create new SDC component for Olivero (header-search),!3531Issue #3336994: StringFormatter always displays links to entity even if the user in context does not have access,!3355Issue #3209129: Scrolling problems when adding a block via layout builder,!3154Fixes #2987987 - CSRF token validation broken on routes with optional parameters.,!3133core/modules/system/css/components/hidden.module.css,!2964Issue #2865710 : Dependencies from only one instance of a widget are used in display modes,!2812Issue #3312049: [Followup] Fix Drupal.Commenting.FunctionComment.MissingReturnType returns for NULL,!2794Issue #3100732: Allow specifying `meta` data on JSON:API objects,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2062Issue #3246454: Add weekly granularity to views date sort,!1105Issue #3025039: New non translatable field on translatable content throws error,!1073issue #3191727: Focus states on mobile second level navigation items fixed,!10223132456: Fix issue where views instances are emptied before an ajax request is complete,!877Issue #2708101: Default value for link text is not saved,!617Issue #3043725: Provide a Entity Handler for user cancelation,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493
Pipeline #148657 canceled
Pipeline: drupal

#148658

    ......@@ -17,6 +17,7 @@
    use Drupal\Core\Utility\Token;
    use Drupal\file\Entity\File;
    use Drupal\file\Upload\ContentDispositionFilenameParser;
    use Drupal\file\Upload\FileUploadLocationTrait;
    use Drupal\file\Upload\InputStreamFileWriterInterface;
    use Drupal\file\Validation\FileValidatorInterface;
    use Drupal\file\Validation\FileValidatorSettingsTrait;
    ......@@ -63,6 +64,9 @@ class FileUploadResource extends ResourceBase {
    use EntityResourceValidationTrait {
    validate as resourceValidate;
    }
    use FileUploadLocationTrait {
    getUploadLocation as getUploadDestination;
    }
    /**
    * The regex used to extract the filename from the content disposition header.
    ......@@ -282,7 +286,7 @@ public function post(Request $request, $entity_type_id, $bundle, $field_name) {
    $field_definition = $this->validateAndLoadFieldDefinition($entity_type_id, $bundle, $field_name);
    $destination = $this->getUploadLocation($field_definition->getSettings());
    $destination = $this->getUploadDestination($field_definition);
    // Check the destination file path is writable.
    if (!$this->fileSystem->prepareDirectory($destination, FileSystemInterface::CREATE_DIRECTORY)) {
    ......@@ -491,8 +495,14 @@ protected function prepareFilename($filename, array &$validators) {
    * @return string
    * An un-sanitized file directory URI with tokens replaced. The result of
    * the token replacement is then converted to plain text and returned.
    *
    * @deprecated in drupal:10.3.0 and is removed from drupal:11.0.0. Use
    * \Drupal\file\Upload\FileUploadLocationTrait::getUploadLocation() instead.
    *
    * @see https://www.drupal.org/node/3406099
    */
    protected function getUploadLocation(array $settings) {
    @\trigger_error(__METHOD__ . ' is deprecated in drupal:10.3.0 and is removed from drupal:11.0.0. Use \Drupal\file\Upload\FileUploadLocationTrait::getUploadLocation() instead. See https://www.drupal.org/node/3406099', E_USER_DEPRECATED);
    $destination = trim($settings['file_directory'], '/');
    // Replace tokens. As the tokens might contain HTML we convert it to plain
    ......
    <?php
    namespace Drupal\file\Upload;
    use Drupal\Core\Field\FieldDefinitionInterface;
    use Drupal\Core\Field\TypedData\FieldItemDataDefinition;
    use Drupal\file\Plugin\Field\FieldType\FileFieldItemList;
    use Drupal\file\Plugin\Field\FieldType\FileItem;
    /**
    * Resolves the file upload location from a file field definition.
    */
    trait FileUploadLocationTrait {
    /**
    * Resolves the file upload location from a file field definition.
    *
    * @param \Drupal\Core\Field\FieldDefinitionInterface $fieldDefinition
    * The file field definition.
    *
    * @return string
    * An un-sanitized file directory URI with tokens replaced. The result of
    * the token replacement is then converted to plain text and returned.
    */
    public function getUploadLocation(FieldDefinitionInterface $fieldDefinition): string {
    assert(is_a($fieldDefinition->getClass(), FileFieldItemList::class, TRUE));
    $fieldItemDataDefinition = FieldItemDataDefinition::create($fieldDefinition);
    $fileItem = new FileItem($fieldItemDataDefinition);
    return $fileItem->getUploadLocation();
    }
    }
    ......@@ -19,6 +19,7 @@
    use Drupal\file\FileInterface;
    use Drupal\file\Plugin\Field\FieldType\FileFieldItemList;
    use Drupal\file\Upload\ContentDispositionFilenameParser;
    use Drupal\file\Upload\FileUploadLocationTrait;
    use Drupal\file\Upload\InputStreamFileWriterInterface;
    use Drupal\file\Validation\FileValidatorInterface;
    use Drupal\file\Validation\FileValidatorSettingsTrait;
    ......@@ -46,6 +47,9 @@
    class TemporaryJsonapiFileFieldUploader {
    use FileValidatorSettingsTrait;
    use FileUploadLocationTrait {
    getUploadLocation as getUploadDestination;
    }
    /**
    * The regex used to extract the filename from the content disposition header.
    ......@@ -201,7 +205,7 @@ public function __construct(LoggerInterface $logger, FileSystemInterface $file_s
    public function handleFileUploadForField(FieldDefinitionInterface $field_definition, $filename, AccountInterface $owner) {
    assert(is_a($field_definition->getClass(), FileFieldItemList::class, TRUE));
    $settings = $field_definition->getSettings();
    $destination = $this->getUploadLocation($settings);
    $destination = $this->getUploadDestination($field_definition);
    // Check the destination file path is writable.
    if (!$this->fileSystem->prepareDirectory($destination, FileSystemInterface::CREATE_DIRECTORY)) {
    ......@@ -428,8 +432,14 @@ protected function prepareFilename($filename, array &$validators) {
    * @return string
    * An un-sanitized file directory URI with tokens replaced. The result of
    * the token replacement is then converted to plain text and returned.
    *
    * @deprecated in drupal:10.3.0 and is removed from drupal:11.0.0. Use
    * \Drupal\file\Upload\FileUploadLocationTrait::getUploadLocation() instead.
    *
    * @see https://www.drupal.org/node/3406099
    */
    protected function getUploadLocation(array $settings) {
    @\trigger_error(__METHOD__ . ' is deprecated in drupal:10.3.0 and is removed from drupal:11.0.0. Use \Drupal\file\Upload\FileUploadLocationTrait::getUploadLocation() instead. See https://www.drupal.org/node/3406099', E_USER_DEPRECATED);
    $destination = trim($settings['file_directory'], '/');
    // Replace tokens. As the tokens might contain HTML we convert it to plain
    ......
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Finish editing this message first!
    Please register or to comment