From fc628ed050be48648c3f432048190b97b074d51a Mon Sep 17 00:00:00 2001 From: Ryan Date: Sat, 15 Mar 2025 20:18:38 -0400 Subject: [PATCH] fix folder renaming --- folderManager.js | 20 ++++++++++++++------ renameFolder.php | 22 ++++++++++++++++++++++ 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/folderManager.js b/folderManager.js index 075bc85..a5caa44 100644 --- a/folderManager.js +++ b/folderManager.js @@ -268,7 +268,9 @@ function openRenameFolderModal() { showToast("Please select a valid folder to rename."); return; } - document.getElementById("newRenameFolderName").value = selectedFolder; + // Extract the basename for display. + const parts = selectedFolder.split("/"); + document.getElementById("newRenameFolderName").value = parts[parts.length - 1]; document.getElementById("renameFolderModal").style.display = "block"; } @@ -279,23 +281,29 @@ document.getElementById("cancelRenameFolder").addEventListener("click", function document.getElementById("submitRenameFolder").addEventListener("click", function () { const selectedFolder = window.currentFolder || "root"; - const newFolderName = document.getElementById("newRenameFolderName").value.trim(); - if (!newFolderName || newFolderName === selectedFolder) { + const newNameBasename = document.getElementById("newRenameFolderName").value.trim(); + if (!newNameBasename || newNameBasename === selectedFolder.split("/").pop()) { showToast("Please enter a valid new folder name."); return; } + // Get the parent folder path. + const parentPath = getParentFolder(selectedFolder); + // Build the full new folder path. + // If the parent is "root", new folder is just newNameBasename. + const newFolderFull = parentPath === "root" ? newNameBasename : parentPath + "/" + newNameBasename; + fetch("renameFolder.php", { method: "POST", headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ oldFolder: selectedFolder, newFolder: newFolderName }) + body: JSON.stringify({ oldFolder: selectedFolder, newFolder: newFolderFull }) }) .then(response => response.json()) .then(data => { console.log("Rename response:", data); if (data.success) { showToast("Folder renamed successfully!"); - window.currentFolder = newFolderName; - loadFolderList(newFolderName); + window.currentFolder = newFolderFull; + loadFolderList(newFolderFull); } else { showToast("Error: " + (data.error || "Could not rename folder")); } diff --git a/renameFolder.php b/renameFolder.php index 5d3e9ee..8c8c04d 100644 --- a/renameFolder.php +++ b/renameFolder.php @@ -65,6 +65,28 @@ if (file_exists($newPath)) { // Attempt to rename the folder. if (rename($oldPath, $newPath)) { + // Update metadata. + $metadataFile = META_DIR . META_FILE; + if (file_exists($metadataFile)) { + $metadata = json_decode(file_get_contents($metadataFile), true); + $updated = false; + // Loop through each key in the metadata. + foreach ($metadata as $key => $value) { + // Check if the key is the folder itself or is inside the folder. + if ($key === $oldFolder || strpos($key, $oldFolder . "/") === 0) { + // Construct the new key by replacing the $oldFolder prefix with $newFolder. + $newKey = $newFolder . substr($key, strlen($oldFolder)); + // Optional: remove a leading slash if it appears. + $newKey = ltrim($newKey, "/"); + $metadata[$newKey] = $value; + unset($metadata[$key]); + $updated = true; + } + } + if ($updated) { + file_put_contents($metadataFile, json_encode($metadata, JSON_PRETTY_PRINT)); + } + } echo json_encode(['success' => true]); } else { echo json_encode(['success' => false, 'error' => 'Failed to rename folder.']);