Fixed Flex object issues in Windows [#2773]

This commit is contained in:
Matias Griese
2020-01-02 15:29:17 +02:00
parent 508cf1ffdb
commit 608457bd01
9 changed files with 43 additions and 14 deletions

View File

@@ -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

View File

@@ -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());

View File

@@ -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 = '';
}

View File

@@ -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();
}

View File

@@ -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();

View File

@@ -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();

View File

@@ -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}/'));

View File

@@ -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.

View File

@@ -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;