From 90e55ead2931af7e2845f2c7d9b2acd42fa1335e Mon Sep 17 00:00:00 2001 From: Matias Griese Date: Fri, 11 Oct 2019 10:39:23 +0300 Subject: [PATCH] Fixed regression in storage filename matching --- system/blueprints/flex/accounts.yaml | 6 +++--- system/blueprints/flex/pages.yaml | 4 ++-- .../Service/AccountsServiceProvider.php | 2 +- .../Grav/Framework/Flex/FlexCollection.php | 6 +++--- system/src/Grav/Framework/Flex/FlexObject.php | 6 +++--- .../Framework/Flex/Storage/FileStorage.php | 2 +- .../Framework/Flex/Storage/FolderStorage.php | 20 +++++++++---------- 7 files changed, 22 insertions(+), 24 deletions(-) diff --git a/system/blueprints/flex/accounts.yaml b/system/blueprints/flex/accounts.yaml index 55143b0b8..652a59663 100644 --- a/system/blueprints/flex/accounts.yaml +++ b/system/blueprints/flex/accounts.yaml @@ -37,10 +37,10 @@ config: templates: collection: paths: - - 'flex/{TYPE}/collection/{LAYOUT}{.EXT}' + - 'flex/{TYPE}/collection/{LAYOUT}{EXT}' object: paths: - - 'flex/{TYPE}/object/{LAYOUT}{.EXT}' + - 'flex/{TYPE}/object/{LAYOUT}{EXT}' defaults: type: accounts layout: default @@ -55,7 +55,7 @@ config: formatter: class: 'Grav\Framework\File\Formatter\YamlFormatter' folder: 'account://' - pattern: '{FOLDER}/{KEY}{.EXT}' + pattern: '{FOLDER}/{KEY}{EXT}' key: storage_key indexed: true search: diff --git a/system/blueprints/flex/pages.yaml b/system/blueprints/flex/pages.yaml index c74af250c..524acea30 100644 --- a/system/blueprints/flex/pages.yaml +++ b/system/blueprints/flex/pages.yaml @@ -95,10 +95,10 @@ config: templates: collection: paths: - - 'flex/{TYPE}/collection/{LAYOUT}{.EXT}' + - 'flex/{TYPE}/collection/{LAYOUT}{EXT}' object: paths: - - 'flex/{TYPE}/object/{LAYOUT}{.EXT}' + - 'flex/{TYPE}/object/{LAYOUT}{EXT}' defaults: type: pages layout: default diff --git a/system/src/Grav/Common/Service/AccountsServiceProvider.php b/system/src/Grav/Common/Service/AccountsServiceProvider.php index 05bb5c9f2..9720651b6 100644 --- a/system/src/Grav/Common/Service/AccountsServiceProvider.php +++ b/system/src/Grav/Common/Service/AccountsServiceProvider.php @@ -94,7 +94,7 @@ class AccountsServiceProvider implements ServiceProviderInterface 'class' => FlexUser\Storage\UserFolderStorage::class, 'options' => [ 'file' => 'user', - 'pattern' => '{FOLDER}/{KEY:2}/{KEY}/{FILE}{.EXT}', + 'pattern' => '{FOLDER}/{KEY:2}/{KEY}/{FILE}{EXT}', 'key' => 'username', ], ]; diff --git a/system/src/Grav/Framework/Flex/FlexCollection.php b/system/src/Grav/Framework/Flex/FlexCollection.php index 12df9b0eb..1b665ca1c 100644 --- a/system/src/Grav/Framework/Flex/FlexCollection.php +++ b/system/src/Grav/Framework/Flex/FlexCollection.php @@ -559,10 +559,10 @@ class FlexCollection extends ObjectCollection implements FlexCollectionInterface $ext = $defaults['ext'] ?? '.html.twig'; $types = array_unique(array_merge([$type], (array)($defaults['type'] ?? null))); $paths = $config['collection']['paths'] ?? [ - 'flex/{TYPE}/collection/{LAYOUT}{.EXT}', - 'flex-objects/layouts/{TYPE}/collection/{LAYOUT}{.EXT}' + 'flex/{TYPE}/collection/{LAYOUT}{EXT}', + 'flex-objects/layouts/{TYPE}/collection/{LAYOUT}{EXT}' ]; - $table = ['TYPE' => '%1$s', 'LAYOUT' => '%2$s', 'EXT' => '%3$s', '.EXT' => '%3$s']; + $table = ['TYPE' => '%1$s', 'LAYOUT' => '%2$s', 'EXT' => '%3$s']; $lookups = []; foreach ($paths as $path) { diff --git a/system/src/Grav/Framework/Flex/FlexObject.php b/system/src/Grav/Framework/Flex/FlexObject.php index 4b77d7d31..8b1bf50f5 100644 --- a/system/src/Grav/Framework/Flex/FlexObject.php +++ b/system/src/Grav/Framework/Flex/FlexObject.php @@ -954,10 +954,10 @@ class FlexObject implements FlexObjectInterface, FlexAuthorizeInterface $ext = $defaults['ext'] ?? '.html.twig'; $types = array_unique(array_merge([$type], (array)($defaults['type'] ?? null))); $paths = $config['object']['paths'] ?? [ - 'flex/{TYPE}/object/{LAYOUT}{.EXT}', - 'flex-objects/layouts/{TYPE}/object/{LAYOUT}{.EXT}' + 'flex/{TYPE}/object/{LAYOUT}{EXT}', + 'flex-objects/layouts/{TYPE}/object/{LAYOUT}{EXT}' ]; - $table = ['TYPE' => '%1$s', 'LAYOUT' => '%2$s', 'EXT' => '%3$s', '.EXT' => '%3$s']; + $table = ['TYPE' => '%1$s', 'LAYOUT' => '%2$s', 'EXT' => '%3$s']; $lookups = []; foreach ($paths as $path) { diff --git a/system/src/Grav/Framework/Flex/Storage/FileStorage.php b/system/src/Grav/Framework/Flex/Storage/FileStorage.php index 0153ea9d7..3259ebb16 100644 --- a/system/src/Grav/Framework/Flex/Storage/FileStorage.php +++ b/system/src/Grav/Framework/Flex/Storage/FileStorage.php @@ -25,7 +25,7 @@ class FileStorage extends FolderStorage */ public function __construct(array $options) { - $this->dataPattern = '{FOLDER}/{KEY}{.EXT}'; + $this->dataPattern = '{FOLDER}/{KEY}{EXT}'; if (!isset($options['formatter']) && isset($options['pattern'])) { $options['formatter'] = $this->detectDataFormatter($options['pattern']); diff --git a/system/src/Grav/Framework/Flex/Storage/FolderStorage.php b/system/src/Grav/Framework/Flex/Storage/FolderStorage.php index 923429717..a1aaf4315 100644 --- a/system/src/Grav/Framework/Flex/Storage/FolderStorage.php +++ b/system/src/Grav/Framework/Flex/Storage/FolderStorage.php @@ -13,6 +13,7 @@ namespace Grav\Framework\Flex\Storage; use Grav\Common\Filesystem\Folder; use Grav\Common\Grav; +use Grav\Common\Utils; use Grav\Framework\Flex\Interfaces\FlexStorageInterface; use RocketTheme\Toolbox\File\File; use InvalidArgumentException; @@ -27,7 +28,7 @@ class FolderStorage extends AbstractFilesystemStorage /** @var string Folder where all the data is stored. */ protected $dataFolder; /** @var string Pattern to access an object. */ - protected $dataPattern = '{FOLDER}/{KEY}/{FILE}{.EXT}'; + protected $dataPattern = '{FOLDER}/{KEY}/{FILE}{EXT}'; /** @var string Filename for the object. */ protected $dataFile; /** @var string File extension for the object. */ @@ -252,7 +253,7 @@ class FolderStorage extends AbstractFilesystemStorage $parts['key'], // {KEY} $parts['key:2'], // {KEY:2} '***', // {FILE} - '***' // {.EXT} + '***' // {EXT} ]; $path = rtrim(explode('***', sprintf($this->dataPattern, ...$options))[0], '/'); @@ -284,7 +285,7 @@ class FolderStorage extends AbstractFilesystemStorage $parts['key'], // {KEY} $parts['key:2'], // {KEY:2} $parts['file'], // {FILE} - $this->dataExt // {.EXT} + $this->dataExt // {EXT} ]; return sprintf($this->dataPattern, ...$options); @@ -607,23 +608,20 @@ class FolderStorage extends AbstractFilesystemStorage $this->dataFolder = $options['folder']; $this->dataFile = $options['file'] ?? 'item'; $this->dataExt = $extension; - if (\mb_strpos($pattern, '{FILE}') === false && (\mb_strpos($pattern, '{EXT}') === false || \mb_strpos($pattern, '{.EXT}') === false)) { + if (\mb_strpos($pattern, '{FILE}') === false && \mb_strpos($pattern, '{EXT}') === false) { if (isset($options['file'])) { - $pattern .= '/{FILE}{.EXT}'; + $pattern .= '/{FILE}{EXT}'; } else { $this->dataFile = \basename($pattern, $extension); - $pattern = \dirname($pattern) . '/{FILE}{.EXT}'; + $pattern = \dirname($pattern) . '/{FILE}{EXT}'; } } $this->prefixed = (bool)($options['prefixed'] ?? strpos($pattern, '/{KEY:2}/')); $this->indexed = (bool)($options['indexed'] ?? false); $this->keyField = $options['key'] ?? 'storage_key'; - $pattern = preg_replace( - ['/{FOLDER}/', '/{KEY}/', '/{KEY:2}/', '/{FILE}/', '/{EXT}/', '/{\.EXT}/'], - ['%1$s', '%2$s', '%3$s', '%4$s', '%5$s', '%5$s'], - $pattern - ); + $variables = ['FOLDER' => '%1$s', 'KEY' => '%2$s', 'KEY:2' => '%3$s', 'FILE' => '%4$s', 'EXT' => '%5$s']; + $pattern = Utils::simpleTemplate($pattern, $variables); if (!$pattern) { throw new \RuntimeException('Bad storage folder pattern');