From fa819064ef2145e2c5e7d72a6ca2284809266051 Mon Sep 17 00:00:00 2001 From: Matias Griese Date: Tue, 23 Mar 2021 09:45:31 +0200 Subject: [PATCH] Improve move page into itself check --- system/src/Grav/Common/Flex/Types/Pages/PageObject.php | 4 ---- .../Common/Flex/Types/Pages/Storage/PageStorage.php | 10 +++++++++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/system/src/Grav/Common/Flex/Types/Pages/PageObject.php b/system/src/Grav/Common/Flex/Types/Pages/PageObject.php index 20788dc1e..c8568cf74 100644 --- a/system/src/Grav/Common/Flex/Types/Pages/PageObject.php +++ b/system/src/Grav/Common/Flex/Types/Pages/PageObject.php @@ -206,10 +206,6 @@ class PageObject extends FlexPageObject // Make sure page isn't being moved under itself. $key = $this->getStorageKey(); - if ($key === $parentKey || strpos($parentKey, $key . '/') === 0) { - throw new RuntimeException(sprintf('Page /%s cannot be moved to %s', $this->getKey(), $parentRoute)); - } - /** @var PageObject|null $parent */ $parent = $parentKey !== false ? $this->getFlexDirectory()->getObject($parentKey, 'storage_key') : null; if (!$parent) { diff --git a/system/src/Grav/Common/Flex/Types/Pages/Storage/PageStorage.php b/system/src/Grav/Common/Flex/Types/Pages/Storage/PageStorage.php index e02bda4ab..1311e0458 100644 --- a/system/src/Grav/Common/Flex/Types/Pages/Storage/PageStorage.php +++ b/system/src/Grav/Common/Flex/Types/Pages/Storage/PageStorage.php @@ -373,7 +373,7 @@ class PageStorage extends FolderStorage try { if ($key === '' && empty($row['root'])) { - throw new RuntimeException('No storage key given'); + throw new RuntimeException('Page has no path'); } $grav = Grav::instance(); @@ -394,9 +394,17 @@ class PageStorage extends FolderStorage if ($oldFolder !== $newFolder && file_exists($oldFolder)) { $isCopy = $row['__META']['copy'] ?? false; if ($isCopy) { + if (strpos($newFolder, $oldFolder . '/') === 0) { + throw new RuntimeException(sprintf('Page /%s cannot be copied to itself', $oldKey)); + } + $this->copyRow($oldKey, $newKey); $debugger->addMessage("Page copied: {$oldFolder} => {$newFolder}", 'debug'); } else { + if (strpos($newFolder, $oldFolder . '/') === 0) { + throw new RuntimeException(sprintf('Page /%s cannot be moved to itself', $oldKey)); + } + $this->renameRow($oldKey, $newKey); $debugger->addMessage("Page moved: {$oldFolder} => {$newFolder}", 'debug'); }