diff options
-rw-r--r-- | loggedin.js | 34 | ||||
-rw-r--r-- | php/database.php | 2 | ||||
-rw-r--r-- | php/misc.php | 8 | ||||
-rw-r--r-- | php/move.php | 77 |
4 files changed, 116 insertions, 5 deletions
diff --git a/loggedin.js b/loggedin.js index a703849..0f48746 100644 --- a/loggedin.js +++ b/loggedin.js @@ -123,7 +123,7 @@ function load_dir() { } function delete_file(filename) { - var file_full_path = get_path() + "/" + filename; + var file_full_path = path_combine(get_path(), filename); var data = new FormData(); data.append('path', file_full_path); @@ -137,7 +137,7 @@ function delete_file(filename) { } function rename_file(filename) { - var file_full_path = get_path() + filename; + var file_full_path = path_combine(get_path(), filename); var new_name = prompt(`Rename ${filename} to`, filename); if (!new_name) @@ -155,6 +155,20 @@ function rename_file(filename) { xhr.send(data); } +function move_file(new_folder, filename) { + var data = new FormData(); + data.append('old_folder', get_path()); + data.append('new_folder', new_folder); + data.append('filename', filename); + + var xhr = new XMLHttpRequest(); + xhr.open('POST', '/php/move.php', true); + xhr.onload = function () { + load_dir(); + }; + xhr.send(data); +} + function new_folder() { var dirname = prompt(`Directory name`, "New Folder"); if (!dirname) @@ -210,7 +224,11 @@ function end_drag(e) { } function drop_handler(dst, src) { - alert(`Dropped ${dst.filename} on ${src.filename}`); + if (dst.is_directory) { + move_file(path_combine(get_path(), dst.filename), src.filename); + } else { + alert(`Dropped ${dst.filename} on ${src.filename}`); + } } function add_file_visuals(fileview) { @@ -256,7 +274,7 @@ function add_file_visuals(fileview) { visuals.onmouseup = (e) => { if (dragging) { - drop_handler(dragging_fileview, fileview); + drop_handler(fileview, dragging_fileview); end_drag(); } e.preventDefault(); @@ -308,6 +326,14 @@ function get_path() { return path; } +function path_combine(a, b) { + const last_char = a.slice(-1); + if (last_char == "/") + return a + b; + else + return a + "/" + b; +} + document.body.onclick = () => { if (context_menu) context_menu.remove(); diff --git a/php/database.php b/php/database.php index 1e76d77..cb2697f 100644 --- a/php/database.php +++ b/php/database.php @@ -7,7 +7,7 @@ require_once "node.php"; /*handles database stuff*/ class Database { - private $pdo; + public $pdo; public function __construct() diff --git a/php/misc.php b/php/misc.php index 69cd654..556d411 100644 --- a/php/misc.php +++ b/php/misc.php @@ -9,5 +9,13 @@ function generate_email_verification_link() } +function var_error_log( $object=null ){ + ob_start(); // start buffer capture + var_dump( $object ); // dump the values + $contents = ob_get_contents(); // put the buffer into a variable + ob_end_clean(); // end capture + error_log( $contents ); // log contents of the result of var_dump( $object ) +} + ?> diff --git a/php/move.php b/php/move.php new file mode 100644 index 0000000..a79ce83 --- /dev/null +++ b/php/move.php @@ -0,0 +1,77 @@ +<?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['old_folder']) || !isset($_POST['new_folder']) || !isset($_POST['filename'])) { + error_log("bad /php/move.php call $_POST of:$_POST[old_folder] nf:$_POST[new_folder] fn:$_POST[filename]"); + http_response_code(400); + exit(1); +} + +$filename = $_POST["filename"]; +$old_folder = $_POST["old_folder"]; +$new_folder = $_POST["new_folder"]; +$user = $_SESSION['user_object']; +$homedir = $user->home_directory; + +$old_dir = get_directory($old_folder, $user); +$new_dir = get_directory($new_folder, $user); +if (!$old_dir || !$new_dir) { + error_log("invalid src/dst dir"); + http_response_code(409); + exit(0); +} + +// Check if the filename is taken in the new dir +$contents_of_new_dir = $database->get_links_of($new_dir); +foreach ($contents_of_new_dir as $c) { + if ($c['name'] == $filename) { + error_log("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($old_dir); +foreach ($contents_of_old_dir as $c) { + if ($c['name'] == $filename) { + $file_node = $c['id']; + break; + } +} + +if ($file_node == null) { + error_log("/php/move.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 directory_id = :new_dir + WHERE directory_id = :old_dir + AND node_id = :file_node + AND name = :filename +"); + +$move->bindParam(':new_dir', $new_dir); +$move->bindParam(':old_dir', $old_dir); +$move->bindParam(':file_node', $file_node); +$move->bindParam(':filename', $filename); + +if(!$move->execute()) { + error_log("extremely sad shit"); + http_response_code(409); + exit(0); +} + +?> |