diff --git a/config/cms.php b/config/cms.php index c29b33781..0b12b46f2 100644 --- a/config/cms.php +++ b/config/cms.php @@ -248,8 +248,6 @@ return [ 'disk' => 'local', 'folder' => 'media', 'path' => '/storage/app/media', - 'ignore' => ['^\..*'], // use "php artisan cache:clear" after changing - 'ttl' => 10, // how much in minutes to cache the media items before refetching ], ], diff --git a/modules/cms/classes/MediaLibrary.php b/modules/cms/classes/MediaLibrary.php index 3f649394c..dd1bfb977 100644 --- a/modules/cms/classes/MediaLibrary.php +++ b/modules/cms/classes/MediaLibrary.php @@ -47,6 +47,12 @@ class MediaLibrary */ protected $ignoreNames; + /** + * @var array Contains a list of regex patterns to ignore in files and directories. + * The list can be customized with cms.storage.media.ignorePatterns configuration option. + */ + protected $ignorePatterns; + /** * @var int Cache for the storage folder name length. */ @@ -66,6 +72,8 @@ class MediaLibrary $this->ignoreNames = Config::get('cms.storage.media.ignore', FileDefinitions::get('ignoreFiles')); + $this->ignorePatterns = Config::get('cms.storage.media.ignorePatterns', ['^\..*']); + $this->storageFolderNameLength = strlen($this->storageFolder); } @@ -502,12 +510,19 @@ class MediaLibrary */ protected function isVisible($path) { - $clean = []; - foreach ($this->ignoreNames as $one) { - $pattern = "/$one/"; - $clean[] = !preg_grep($pattern, [basename($path)]); + $baseName = basename($path); + + if (in_array($baseName, $this->ignoreNames)) { + return false; } - return in_array(basename($path), $clean); + + foreach ($this->ignorePatterns as $pattern) { + if (preg_match('/'.$pattern.'/', $baseName)) { + return false; + } + } + + return true; } /**