summaryrefslogtreecommitdiff
path: root/www/functions/func_folder.php
blob: c911e2306f211b5dcbbec621381d6b47bb7a585f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?php

function database_mkdir($db, $file_id, $new_folder_name, $share){
	if($db->exec("
		BEGIN TRANSACTION;
		INSERT INTO files (id, parent, owner, name, folder, size, share, hash) VALUES (Null, " . $file_id . ", " . $_SESSION['userid'] . ", '" . SQLite3::escapeString($new_folder_name) . "', 'DIRECTORY', 0, '" . SQLite3::escapeString($share) . "', '');
		COMMIT;
	")){
		return true;
	} else {
		return false;
	}
}

function create_folder($path, $new_folder_name, $share){

	$db = $GLOBALS["db"];

	if(!$_SESSION["login"]){
		return MKDIR_LOGIN;
	}

	$file_id = select_file_id($db, $_SESSION["userid"], $path);

	$owner_db = $db->query("SELECT owner FROM files WHERE id=" . SQLite3::escapeString($file_id) . ";");
	$owner_ar = $owner_db->fetchArray(SQLITE3_NUM);

	if($owner_ar[0] != $_SESSION["userid"]){
		return MKDIR_OWNER;
	}

	//TODO: Cut trailing or leading slash
	//TODO: Maye create two folders instead of returning an error?
	if(preg_match("/\//", $new_folder_name)){
		return MKDIR_SLASH_IN_FOLDER_NAME;
	}

	$dupl_db = $db->query("SELECT parent FROM files WHERE name='" . SQLite3::escapeString($new_folder_name) . "';");
	while($dupl_ar = $dupl_db->fetchArray(SQLITE3_NUM)){
		if($dupl_ar[0] == $file_id){
			return MKDIR_DUPLICATE;
		}
	}
	
	if(database_mkdir($db, $file_id, $new_folder_name, $share)){
		return MKDIR_SUCCESS;
	} else {
		return MKDIR_DATABASE;
	}
}

function move_folder($old_path, $new_path){
	$db = $GLOBALS["db"];
	$old_file_id = select_file_id($db, $_SESSION["userid"], $old_path);
	$new_file_id = select_file_id($db, $_SESSION["userid"], $new_path);

	$old_folder_owner_db = $db->query("SELECT owner FROM files WHERE id=".$old_file_id.";");
	$old_folder_owner_ar = $old_folder_owner_db->fetchArray(SQLITE3_NUM);

	if($_SESSION["userid"] != $old_folder_owner_ar[0]){
		return MV_OLD_FOLDER_NOT_OWNER;
	}

	if(!$new_file_id){
		return MV_FOLDER_TARGET_NOT_EXIST;
	}

	$new_folder_owner_db = $db->query("SELECT owner FROM files WHERE id=".$new_file_id.";");
	$new_folder_owner_ar = $new_folder_owner_db->fetchArray(SQLITE3_NUM);

	if($_SESSION["userid"] != $new_folder_owner_ar[0]){
		return MV_NEW_FOLDER_NOT_OWNER;
	}

	if($db->exec("
		BEGIN TRANSACTION;
		UPDATE files SET parent=".$new_file_id." WHERE id=".$old_file_id.";
		COMMIT;
	")){
		return MV_FOLDER_SUCCESS;
	} else {
		return MV_FOLDER_DATABASE;
	}
}