diff options
-rw-r--r-- | loggedin.js | 7 | ||||
-rw-r--r-- | php/rename.php | 75 |
2 files changed, 78 insertions, 4 deletions
diff --git a/loggedin.js b/loggedin.js index 324a18a..8681dba 100644 --- a/loggedin.js +++ b/loggedin.js @@ -134,15 +134,14 @@ function delete_file(filename) { } function rename_file(filename) { - var file_full_path = path_combine(get_path(), filename); - var new_name = prompt(`Rename ${filename} to`, filename); if (!new_name) return; var data = new FormData(); - data.append('path', file_full_path); - data.append('new_name', new_name); + data.append('folder', get_path()); + data.append('old_filename', filename); + data.append('new_filename', new_name); var xhr = new XMLHttpRequest(); xhr.open('POST', '/php/rename.php', true); diff --git a/php/rename.php b/php/rename.php new file mode 100644 index 0000000..3721c22 --- /dev/null +++ b/php/rename.php @@ -0,0 +1,75 @@ +<?php +require_once "database.php"; +require_once "configuration.php"; +require_once "file_type_recogniser.php"; +require_once "node.php"; +require_once "misc.php"; + +session_start(); + +if (!isset($_POST['folder']) || !isset($_POST['old_filename']) || !isset($_POST['new_filename'])) { + error_log("bad /php/move.php call"); + http_response_code(400); + exit(1); +} + +$folder = $_POST["folder"]; +$old_filename = $_POST["old_filename"]; +$new_filename = $_POST["new_filename"]; +$user = $_SESSION['user_object']; +$homedir = $user->home_directory; + +$dir = get_directory($folder, $user); +if (!$dir) { + error_log("/php/rename.php invalid directory"); + http_response_code(409); + exit(0); +} + +// Check if the new filename is taken in the new dir +$contents_of_dir = $database->get_links_of($dir); +foreach ($contents_of_dir as $c) { + if ($c['name'] == $new_filename) { + error_log("/php/rename.php failed - filename $filename taken in $new_folder"); + http_response_code(409); + exit(0); + } +} + +// Get the file node +$file_node = null; +$contents_of_old_dir = $database->get_links_of($dir); +foreach ($contents_of_old_dir as $c) { + if ($c['name'] == $old_filename) { + $file_node = $c['id']; + break; + } +} + +if ($file_node == null) { + error_log("/php/rename.php failed - file $old_folder/$filename doesn't exist"); + http_response_code(409); + exit(0); +} + +// Update the node_link +$move = $database->pdo->prepare(" + UPDATE node_links + SET name = :new_filename + WHERE directory_id = :dir + AND node_id = :file_node + AND name = :old_filename +"); + +$move->bindParam(':dir', $dir); +$move->bindParam(':file_node', $file_node); +$move->bindParam(':old_filename', $old_filename); +$move->bindParam(':new_filename', $new_filename); + +if(!$move->execute()) { + error_log("extremely sad shit"); + http_response_code(409); + exit(0); +} + +?> |