Problem/Motivation

Considering issue #2168733: locale.settings.yml uses absolute path which contradicts CMI effort, the LocalStreamWrapper needs to support recursive path resolution, e.g.:

transaltions://folder can depend from public://translation folder, but LocalStreamWrapper do not support recursive stream resolution.

Proposed resolution

Update the native PHP function realpath and dirname in function getLocalPath with Drupal wrappers.

Remaining tasks

Unit Testing, maybe using vfsStream library.

Support from Acquia helps fund testing for Drupal Acquia logo

Comments

steva1982’s picture

Title: Recursive localstream » Support for recursive path resolution in LocalStream
Status: Active » Needs work
FileSize
967 bytes
steva1982’s picture

Status: Needs work » Needs review
mavimo’s picture

I've verified #1, test are required but feature is OK, also in the related issue.

mgifford’s picture

Issue tags: +Needs tests
mavimo’s picture

mavimo’s picture

mgifford’s picture

This looks fine, but just looking at this warning in the api docs.

The use of drupal_realpath() is discouraged, because it does not work for remote URIs. Except in rare cases, URIs should not be manually resolved.

Only use this function if you know that the stream wrapper in the URI uses the local file system, and you need to pass an absolute path to a function that is incompatible with stream URIs.

There are no similar concerns listed with drupal_dirname.

Thanks for writing up the tests.

mavimo’s picture

@mgifford yes, but in this case we have to fix the "wrong usage" of realpath() function, that must never used (do not support StreamWrapper).

NB: this also solve issue #2168733: locale.settings.yml uses absolute path which contradicts CMI effort that improve CMI.

Mile23’s picture

Reroll of #5.

drupal_realpath() doesn't exist anymore and is replaced by the file_system services's realpath() method.

An obvious flaw in this patch is that I'm using \Drupal instead of rigging up injected services. We can change that if interest picks up here.

Status: Needs review » Needs work

The last submitted patch, 9: 2263995_reroll_5.patch, failed testing.

The last submitted patch, 9: 2263995_reroll_5.patch, failed testing.

clemens.tolboom’s picture

@Mile23 its better to fix as much as possible ;-)

  1. +++ b/core/modules/file/tests/file_test/src/StreamWrapper/DummyRecursiveStreamWrapper.php
    @@ -0,0 +1,54 @@
    +    return t('Dummy recursive files');
    

    Replace t() function

  2. +++ b/core/modules/file/tests/file_test/src/StreamWrapper/DummyRecursiveStreamWrapper.php
    @@ -0,0 +1,54 @@
    +    return t('Dummy recursive wrapper for simpletest.');
    

    Replace t() function

mavimo’s picture

@clemens.tolboom why we need to replace t() function? The UI interface need translation, right? It is also used on PrivateStream class (and other implemented stream).

Version: 8.0.x-dev » 8.1.x-dev

Drupal 8.0.6 was released on April 6 and is the final bugfix release for the Drupal 8.0.x series. Drupal 8.0.x will not receive any further development aside from security fixes. Drupal 8.1.0-rc1 is now available and sites should prepare to update to 8.1.0.

Bug reports should be targeted against the 8.1.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.2.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.1.x-dev » 8.2.x-dev

Drupal 8.1.9 was released on September 7 and is the final bugfix release for the Drupal 8.1.x series. Drupal 8.1.x will not receive any further development aside from security fixes. Drupal 8.2.0-rc1 is now available and sites should prepare to upgrade to 8.2.0.

Bug reports should be targeted against the 8.2.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.3.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.2.x-dev » 8.3.x-dev

Drupal 8.2.6 was released on February 1, 2017 and is the final full bugfix release for the Drupal 8.2.x series. Drupal 8.2.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.3.0 on April 5, 2017. (Drupal 8.3.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.3.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.4.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.3.x-dev » 8.4.x-dev

Drupal 8.3.6 was released on August 2, 2017 and is the final full bugfix release for the Drupal 8.3.x series. Drupal 8.3.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.4.0 on October 4, 2017. (Drupal 8.4.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.4.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.5.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.4.x-dev » 8.5.x-dev

Drupal 8.4.4 was released on January 3, 2018 and is the final full bugfix release for the Drupal 8.4.x series. Drupal 8.4.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.5.0 on March 7, 2018. (Drupal 8.5.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.5.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.6.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.5.x-dev » 8.6.x-dev

Drupal 8.5.6 was released on August 1, 2018 and is the final bugfix release for the Drupal 8.5.x series. Drupal 8.5.x will not receive any further development aside from security fixes. Sites should prepare to update to 8.6.0 on September 5, 2018. (Drupal 8.6.0-rc1 is available for testing.)

Bug reports should be targeted against the 8.6.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.7.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.6.x-dev » 8.8.x-dev

Drupal 8.6.x will not receive any further development aside from security fixes. Bug reports should be targeted against the 8.8.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.9.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 8.8.x-dev » 8.9.x-dev

Drupal 8.8.7 was released on June 3, 2020 and is the final full bugfix release for the Drupal 8.8.x series. Drupal 8.8.x will not receive any further development aside from security fixes. Sites should prepare to update to Drupal 8.9.0 or Drupal 9.0.0 for ongoing support.

Bug reports should be targeted against the 8.9.x-dev branch from now on, and new development or disruptive changes should be targeted against the 9.1.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 8.9.x-dev » 9.2.x-dev

Drupal 8 is end-of-life as of November 17, 2021. There will not be further changes made to Drupal 8. Bugfixes are now made to the 9.3.x and higher branches only. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.2.x-dev » 9.3.x-dev
larowlan’s picture

Status: Needs work » Postponed (maintainer needs more info)
Issue tags: +Needs reroll, +Bug Smash Initiative, +Needs issue summary update, +Needs steps to reproduce

Is this still an issue?

I'm not sure how I go about reproducing it, can you please provide steps to reproduce starting from 'install drupal' thanks

clemens.tolboom’s picture

I came up with these command but have no translations setup.

vendor/bin/drush php:eval  "echo join(' ', stream_get_wrappers());"
vendor/bin/drush php:eval  "echo \Drupal::service('file_system')->realpath('public://file-name-in-public-folder');"
vendor/bin/drush php:eval  "echo \Drupal::service('file_system')->realpath('translations://folder');"

or (better readable)

vendor/bin/drush php:cli

stream_get_wrappers();
\Drupal::service('file_system')->realpath('public://file-name-in-public-folder');
\Drupal::service('file_system')->realpath('translations://folder');

My output

>>> stream_get_wrappers();
=> [
     "https",
     "ftps",
     "compress.zlib",
     "compress.bzip2",
     "php",
     "file",
     "glob",
     "data",
     "http",
     "ftp",
     "zip",
     "phar",
     "public",
     "temporary",
   ]

>>> \Drupal::service('file_system')->realpath('public://file-name-in-public-folder');
=> "/Users/clemens/Sites/drupal/d9/web/sites/default/files/file-name-in-public-folder"

>>> \Drupal::service('file_system')->realpath('translations://folder');
=> false
clemens.tolboom’s picture

Installing all translation modules http://drupal.d9/admin/config/media/file-system has a setting

Interface translations directory

and stream_get_wrappers(); has translations available.

>>> \Drupal::service('file_system')->realpath('translations://')
=> "/Users/clemens/Sites/drupal/d9/web/sites/default/files/translations"

Not sure how to continue further :-O

Version: 9.3.x-dev » 9.4.x-dev

Drupal 9.3.15 was released on June 1st, 2022 and is the final full bugfix release for the Drupal 9.3.x series. Drupal 9.3.x will not receive any further development aside from security fixes. Drupal 9 bug reports should be targeted for the 9.4.x-dev branch from now on, and new development or disruptive changes should be targeted for the 9.5.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.4.x-dev » 9.5.x-dev

Drupal 9.4.9 was released on December 7, 2022 and is the final full bugfix release for the Drupal 9.4.x series. Drupal 9.4.x will not receive any further development aside from security fixes. Drupal 9 bug reports should be targeted for the 9.5.x-dev branch from now on, and new development or disruptive changes should be targeted for the 10.1.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

smustgrave’s picture

So should this bug be reopened?

Version: 9.5.x-dev » 11.x-dev

Drupal core is moving towards using a “main” branch. As an interim step, a new 11.x branch has been opened, as Drupal.org infrastructure cannot currently fully support a branch named main. New developments and disruptive changes should now be targeted for the 11.x branch. For more information, see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.