diff --git a/CHANGELOG.md b/CHANGELOG.md index b698a68be..4ee3ba7f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,8 @@ 1. [](#improved) * Better GPM detection of unauthorized installations - * Fixed nxinx appending repeating `?url=` in some redirects + * Fixed nxinx appending repeating `?_url=` in some redirects + * Fixed deleting page with language code not removing the folder if it was the last language [#3305](https://github.com/getgrav/grav/issues/3305) # v1.7.10 ## 04/06/2021 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 1311e0458..ba7fa067e 100644 --- a/system/src/Grav/Common/Flex/Types/Pages/Storage/PageStorage.php +++ b/system/src/Grav/Common/Flex/Types/Pages/Storage/PageStorage.php @@ -474,17 +474,28 @@ class PageStorage extends FolderStorage } /** + * Check if page folder should be deleted. + * + * Deleting page can be done either by deleting everything or just a single language. + * If key contains the language, delete only it, unless it is the last language. + * * @param string $key * @return bool */ protected function canDeleteFolder(string $key): bool { + // Return true if there's no language in the key. $keys = $this->extractKeysFromStorageKey($key); - if ($keys['lang']) { - return false; + if (!$keys['lang']) { + return true; } - return true; + // Get the main key and reload meta. + $key = $this->buildStorageKey($keys); + $meta = $this->getObjectMeta($key, true); + + // Return true if there aren't any markdown files left. + return empty($meta['markdown'] ?? []); } /**