From 3e9bfad78f68b81647e09fc58d2beee504c6c363 Mon Sep 17 00:00:00 2001 From: Matias Griese Date: Fri, 23 Apr 2021 15:10:43 +0300 Subject: [PATCH] Added support for user provided folder in Flex `$page->copy()` --- CHANGELOG.md | 1 + .../Flex/Pages/Traits/PageLegacyTrait.php | 23 ++++++++++++------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 13e84a697..a9bc54573 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ 1. [](#improved) * Moved `gregwar/Image` and `gregwar/Cache` in-house to official `getgrav/Image` and `getgrav/Cache` packagist packages. This will help environments with very strict proxy setups that don't allow VCS setup. [#3289](https://github.com/getgrav/grav/issues/3289) * Improved XSS Invalid Protocol detection regex [#3298](https://github.com/getgrav/grav/issues/3298) + * Added support for user provided folder in Flex `$page->copy()` 1. [](#bugfix) * Fixed `The "Grav/Common/Twig/TwigExtension" extension is not enabled` when using markdown twig tag [#3317](https://github.com/getgrav/grav/issues/3317) * Fixed text field maxlength validation newline issue [#3324](https://github.com/getgrav/grav/issues/3324) diff --git a/system/src/Grav/Framework/Flex/Pages/Traits/PageLegacyTrait.php b/system/src/Grav/Framework/Flex/Pages/Traits/PageLegacyTrait.php index 1c32bf566..aff025757 100644 --- a/system/src/Grav/Framework/Flex/Pages/Traits/PageLegacyTrait.php +++ b/system/src/Grav/Framework/Flex/Pages/Traits/PageLegacyTrait.php @@ -320,14 +320,21 @@ trait PageLegacyTrait // Find non-existing key. $parentKey = $parent ? $parent->getKey() : ''; - $key = trim($parentKey . '/' . basename($this->getKey()), '/'); - $key = preg_replace('/-\d+$/', '', $key); - $i = 1; - do { - $i++; - $test = "{$key}-{$i}"; - } while ($index->containsKey($test)); - $key = $test; + if ($this instanceof FlexPageObject) { + $key = trim($parentKey . '/' . $this->folder(), '/'); + } else { + $key = trim($parentKey . '/' . basename($this->getKey()), '/'); + } + + if ($index->containsKey($key)) { + $key = preg_replace('/\d+$/', '', $key); + $i = 1; + do { + $i++; + $test = "{$key}{$i}"; + } while ($index->containsKey($test)); + $key = $test; + } $folder = basename($key); // Get the folder name.