diff --git a/CHANGELOG.md b/CHANGELOG.md index 79bf5e812..8051c58d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ * Grav 1.7: Fixed error on page initialization [#2753](https://github.com/getgrav/grav/issues/2753) * Fixed checking ACL for another user (who is not currently logged in) in a Flex Object or Directory * Fixed bug in Windows where `Filesystem::dirname()` returns backslashes + * Fixed Flex object issues in Windows [#2773](https://github.com/getgrav/grav/issues/2773) # v1.7.0-rc.2 ## 12/04/2019 diff --git a/system/src/Grav/Common/Flex/Pages/PageObject.php b/system/src/Grav/Common/Flex/Pages/PageObject.php index a513bc8fe..45b347674 100644 --- a/system/src/Grav/Common/Flex/Pages/PageObject.php +++ b/system/src/Grav/Common/Flex/Pages/PageObject.php @@ -19,6 +19,7 @@ use Grav\Common\Flex\Pages\Traits\PageRoutableTrait; use Grav\Common\Flex\Pages\Traits\PageTranslateTrait; use Grav\Common\Page\Pages; use Grav\Common\Utils; +use Grav\Framework\Filesystem\Filesystem; use Grav\Framework\Flex\FlexObject; use Grav\Framework\Flex\Pages\FlexPageObject; use Grav\Framework\Route\Route; @@ -108,7 +109,8 @@ class PageObject extends FlexPageObject // TODO: this should not be template! return $this->getProperty('template'); case 'route': - $key = dirname($this->hasKey() ? '/' . $this->getKey() : '/'); + $filesystem = Filesystem::getInstance(false); + $key = $filesystem->dirname($this->hasKey() ? '/' . $this->getKey() : '/'); return $key !== '/' ? $key : null; case 'full_route': return $this->hasKey() ? '/' . $this->getKey() : ''; @@ -151,8 +153,10 @@ class PageObject extends FlexPageObject */ protected function reorderSiblings(array $ordering) { + $filesystem = Filesystem::getInstance(false); + $storageKey = $this->getStorageKey(); - $oldParentKey = ltrim(dirname("/$storageKey"), '/'); + $oldParentKey = ltrim($filesystem->dirname("/$storageKey"), '/'); $newParentKey = $this->getProperty('parent_key'); $slug = basename($this->getKey()); diff --git a/system/src/Grav/Common/Flex/Pages/PageStorage.php b/system/src/Grav/Common/Flex/Pages/PageStorage.php index 3d244f4ec..0c3b59437 100644 --- a/system/src/Grav/Common/Flex/Pages/PageStorage.php +++ b/system/src/Grav/Common/Flex/Pages/PageStorage.php @@ -14,6 +14,7 @@ namespace Grav\Common\Flex\Pages; use Grav\Common\Debugger; use Grav\Common\Grav; use Grav\Common\Language\Language; +use Grav\Framework\Filesystem\Filesystem; use Grav\Framework\Flex\Storage\FolderStorage; use RocketTheme\Toolbox\File\MarkdownFile; use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator; @@ -260,7 +261,10 @@ class PageStorage extends FolderStorage } else { [$order, $folder] = ['', $objectKey]; } - $parentKey = ltrim(dirname('/' . $key), '/'); + + $filesystem = Filesystem::getInstance(false); + + $parentKey = ltrim($filesystem->dirname('/' . $key), '/'); return [ 'key' => $key, @@ -610,8 +614,10 @@ class PageStorage extends FolderStorage // Update parent timestamps. foreach (array_reverse($list) as $storage_key => $meta) { if ($storage_key !== '') { + $filesystem = Filesystem::getInstance(false); + $storage_key = (string)$storage_key; - $parentKey = dirname($storage_key); + $parentKey = $filesystem->dirname($storage_key); if ($parentKey === '.') { $parentKey = ''; } diff --git a/system/src/Grav/Common/Flex/Pages/Traits/PageRoutableTrait.php b/system/src/Grav/Common/Flex/Pages/Traits/PageRoutableTrait.php index dc3612684..8b9b64f41 100644 --- a/system/src/Grav/Common/Flex/Pages/Traits/PageRoutableTrait.php +++ b/system/src/Grav/Common/Flex/Pages/Traits/PageRoutableTrait.php @@ -16,6 +16,7 @@ use Grav\Common\Page\Interfaces\PageCollectionInterface; use Grav\Common\Page\Interfaces\PageInterface; use Grav\Common\Page\Pages; use Grav\Common\Utils; +use Grav\Framework\Filesystem\Filesystem; /** * Implements PageRoutableInterface. @@ -46,9 +47,11 @@ trait PageRoutableTrait /** @var Pages $pages */ $pages = Grav::instance()['pages']; + $filesystem = Filesystem::getInstance(false); + // FIXME: this does not work, needs to use $pages->get() with cached parent id! $key = $this->getKey(); - $parent_route = dirname('/' . $key); + $parent_route = $filesystem->dirname('/' . $key); return $parent_route !== '/' ? $pages->find($parent_route) : $pages->root(); } diff --git a/system/src/Grav/Framework/Flex/Pages/Traits/PageLegacyTrait.php b/system/src/Grav/Framework/Flex/Pages/Traits/PageLegacyTrait.php index b4b48133c..c42273d75 100644 --- a/system/src/Grav/Framework/Flex/Pages/Traits/PageLegacyTrait.php +++ b/system/src/Grav/Framework/Flex/Pages/Traits/PageLegacyTrait.php @@ -20,6 +20,7 @@ use Grav\Common\Yaml; use Grav\Framework\Cache\CacheInterface; use Grav\Framework\File\Formatter\MarkdownFormatter; use Grav\Framework\File\Formatter\YamlFormatter; +use Grav\Framework\Filesystem\Filesystem; use Grav\Framework\Flex\FlexDirectory; use Grav\Framework\Flex\Interfaces\FlexCollectionInterface; use Grav\Framework\Flex\Interfaces\FlexIndexInterface; @@ -285,7 +286,9 @@ trait PageLegacyTrait */ public function copy(PageInterface $parent = null) { - $parentStorageKey = ltrim(dirname("/{$this->getMasterKey()}"), '/'); + $filesystem = Filesystem::getInstance(false); + + $parentStorageKey = ltrim($filesystem->dirname("/{$this->getMasterKey()}"), '/'); /** @var FlexPageIndex $index */ $index = $this->getFlexDirectory()->getIndex(); diff --git a/system/src/Grav/Framework/Flex/Pages/Traits/PageRoutableTrait.php b/system/src/Grav/Framework/Flex/Pages/Traits/PageRoutableTrait.php index f5167e9e6..ecc718395 100644 --- a/system/src/Grav/Framework/Flex/Pages/Traits/PageRoutableTrait.php +++ b/system/src/Grav/Framework/Flex/Pages/Traits/PageRoutableTrait.php @@ -15,7 +15,7 @@ use Grav\Common\Page\Interfaces\PageCollectionInterface; use Grav\Common\Page\Interfaces\PageInterface; use Grav\Common\Page\Pages; use Grav\Common\Uri; -use Grav\Framework\Flex\Interfaces\FlexObjectInterface; +use Grav\Framework\Filesystem\Filesystem; use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator; /** @@ -389,8 +389,9 @@ trait PageRoutableTrait $var, function ($value) { if (null === $value) { + $filesystem = Filesystem::getInstance(false); $value = $this->getMasterKey() ?: $this->getKey(); - $value = ltrim(dirname("/{$value}"), '/') ?: ''; + $value = ltrim($filesystem->dirname("/{$value}"), '/') ?: ''; } return $value; @@ -415,8 +416,9 @@ trait PageRoutableTrait return null; } + $filesystem = Filesystem::getInstance(false); $directory = $this->getFlexDirectory(); - $parentKey = ltrim(dirname("/{$this->getKey()}"), '/'); + $parentKey = ltrim($filesystem->dirname("/{$this->getKey()}"), '/'); if ($parentKey) { $parent = $directory->getObject($parentKey); $language = $this->getLanguage(); diff --git a/system/src/Grav/Framework/Flex/Storage/FolderStorage.php b/system/src/Grav/Framework/Flex/Storage/FolderStorage.php index d9a3f9eba..b20990eba 100644 --- a/system/src/Grav/Framework/Flex/Storage/FolderStorage.php +++ b/system/src/Grav/Framework/Flex/Storage/FolderStorage.php @@ -14,6 +14,7 @@ namespace Grav\Framework\Flex\Storage; use Grav\Common\Filesystem\Folder; use Grav\Common\Grav; use Grav\Common\Utils; +use Grav\Framework\Filesystem\Filesystem; use Grav\Framework\Flex\Interfaces\FlexStorageInterface; use RocketTheme\Toolbox\File\File; use InvalidArgumentException; @@ -620,8 +621,9 @@ class FolderStorage extends AbstractFilesystemStorage if (isset($options['file'])) { $pattern .= '/{FILE}{EXT}'; } else { + $filesystem = Filesystem::getInstance(true); $this->dataFile = \basename($pattern, $extension); - $pattern = \dirname($pattern) . '/{FILE}{EXT}'; + $pattern = $filesystem->dirname($pattern) . '/{FILE}{EXT}'; } } $this->prefixed = (bool)($options['prefixed'] ?? strpos($pattern, '/{KEY:2}/')); diff --git a/system/src/Grav/Framework/Flex/Storage/SimpleStorage.php b/system/src/Grav/Framework/Flex/Storage/SimpleStorage.php index 20a129daf..4019f2fef 100644 --- a/system/src/Grav/Framework/Flex/Storage/SimpleStorage.php +++ b/system/src/Grav/Framework/Flex/Storage/SimpleStorage.php @@ -12,6 +12,7 @@ declare(strict_types=1); namespace Grav\Framework\Flex\Storage; use Grav\Common\Filesystem\Folder; +use Grav\Framework\Filesystem\Filesystem; use InvalidArgumentException; /** @@ -42,11 +43,13 @@ class SimpleStorage extends AbstractFilesystemStorage $formatter = $options['formatter'] ?? $this->detectDataFormatter($options['folder']); $this->initDataFormatter($formatter); + $filesystem = Filesystem::getInstance(true); + $extension = $this->dataFormatter->getDefaultFileExtension(); $pattern = basename($options['folder']); $this->dataPattern = basename($pattern, $extension) . $extension; - $this->dataFolder = \dirname($options['folder']); + $this->dataFolder = $filesystem->dirname($options['folder']); $this->keyField = $options['key'] ?? 'storage_key'; // Make sure that the data folder exists. diff --git a/system/src/Grav/Framework/Flex/Traits/FlexMediaTrait.php b/system/src/Grav/Framework/Flex/Traits/FlexMediaTrait.php index 6304e786c..310ee6910 100644 --- a/system/src/Grav/Framework/Flex/Traits/FlexMediaTrait.php +++ b/system/src/Grav/Framework/Flex/Traits/FlexMediaTrait.php @@ -18,6 +18,7 @@ use Grav\Common\Page\Medium\Medium; use Grav\Common\Page\Medium\MediumFactory; use Grav\Common\Utils; use Grav\Framework\Cache\CacheInterface; +use Grav\Framework\Filesystem\Filesystem; use Grav\Framework\Flex\FlexDirectory; use Grav\Framework\Form\FormFlashFile; use Psr\Http\Message\UploadedFileInterface; @@ -177,9 +178,11 @@ trait FlexMediaTrait } try { + $filesystem = Filesystem::getInstance(false); + // Upload it $filepath = sprintf('%s/%s', $path, $filename); - Folder::create(\dirname($filepath)); + Folder::create($filesystem->dirname($filepath)); if ($uploadedFile instanceof FormFlashFile) { $metadata = $uploadedFile->getMetaData(); if ($metadata) { @@ -211,8 +214,10 @@ trait FlexMediaTrait $grav = Grav::instance(); $language = $grav['language']; + $filesystem = Filesystem::getInstance(false); + $basename = basename($filename); - $dirname = dirname($filename); + $dirname = $filesystem->dirname($filename); $dirname = $dirname === '.' ? '' : '/' . $dirname; if (!Utils::checkFilename($basename)) { @@ -237,7 +242,7 @@ trait FlexMediaTrait $locator->clearCache($targetFile); } - $fileParts = pathinfo($basename); + $fileParts = $filesystem->pathinfo($basename); if (!file_exists($targetPath)) { return;