summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Gapczynski <GapczynskiM@gmail.com>2011-08-17 17:43:15 -0400
committerMichael Gapczynski <GapczynskiM@gmail.com>2011-08-17 17:43:15 -0400
commit5b8658ca10168e37ca0161586b208d9b54681e7a (patch)
treed8836fb1e594fc3ce494fa998464ad44aa9ae67b
parent1c13b2681a7ba9a7f3db3e11e6e728411ade12ee (diff)
downloadnextcloud-server-5b8658ca10168e37ca0161586b208d9b54681e7a.tar.gz
nextcloud-server-5b8658ca10168e37ca0161586b208d9b54681e7a.zip
New system of unsharing files from self, and a small bug fix when all files inside a shared folder are unshared from self
-rw-r--r--apps/files_sharing/lib_share.php13
-rw-r--r--apps/files_sharing/sharedstorage.php22
2 files changed, 22 insertions, 13 deletions
diff --git a/apps/files_sharing/lib_share.php b/apps/files_sharing/lib_share.php
index a4223a137d1..761a4da4394 100644
--- a/apps/files_sharing/lib_share.php
+++ b/apps/files_sharing/lib_share.php
@@ -199,7 +199,7 @@ class OC_Share {
$folder .= "/";
}
$length = strlen($folder);
- $query = OC_DB::prepare("SELECT uid_owner, source, target FROM *PREFIX*sharing WHERE SUBSTR(source, 1, ?) = ? OR SUBSTR(target, 1, ?) = ? AND uid_shared_with ".self::getUsersAndGroups());
+ $query = OC_DB::prepare("SELECT uid_owner, source, target, permissions FROM *PREFIX*sharing WHERE SUBSTR(source, 1, ?) = ? OR SUBSTR(target, 1, ?) = ? AND uid_shared_with ".self::getUsersAndGroups());
return $query->execute(array($length, $folder, $length, $folder))->fetchAll();
}
@@ -362,10 +362,15 @@ class OC_Share {
*
* @param $target The target location of the item
*/
- public static function unshareFromMySelf($target) {
+ public static function unshareFromMySelf($target, $delete = true) {
$target = self::cleanPath($target);
- $query = OC_DB::prepare("DELETE FROM *PREFIX*sharing WHERE SUBSTR(target, 1, ?) = ? AND uid_shared_with ".self::getUsersAndGroups());
- $query->execute(array(strlen($target), $target));
+ if ($delete) {
+ $query = OC_DB::prepare("DELETE FROM *PREFIX*sharing WHERE SUBSTR(target, 1, ?) = ? AND uid_shared_with ".self::getUsersAndGroups());
+ $query->execute(array(strlen($target), $target));
+ } else {
+ $query = OC_DB::prepare("UPDATE *PREFIX*sharing SET permissions = ? WHERE SUBSTR(target, 1, ?) = ? AND uid_shared_with ".self::getUsersAndGroups());
+ $query->execute(array(-1, strlen($target), $target));
+ }
}
/**
diff --git a/apps/files_sharing/sharedstorage.php b/apps/files_sharing/sharedstorage.php
index 38f8f3e9ebb..fc7b7ddc9ce 100644
--- a/apps/files_sharing/sharedstorage.php
+++ b/apps/files_sharing/sharedstorage.php
@@ -111,19 +111,22 @@ class OC_Filestorage_Shared extends OC_Filestorage {
$targets = array();
foreach ($modifiedItems as $item) {
// If the item is in the current directory and has a different name than the source, add it to the arrays
- if (dirname($item['target']) == $path && basename($item['source']) != basename($item['target'])) {
- $sources[] = basename($item['source']);
- $targets[] = basename($item['target']);
- // If the item was unshared from self, add it it to the arrays
- } elseif ($item['target'] == "/") {
- $sources[] = basename($item['source']);
- $targets[] = "";
+ if (dirname($item['target']) == $path) {
+ // If the item was unshared from self, add it it to the arrays
+ if ($item['permissions'] == -1) {
+ $sources[] = basename($item['source']);
+ $targets[] = "";
+ } else {
+ $sources[] = basename($item['source']);
+ $targets[] = basename($item['target']);
+ }
}
}
// Don't waste time if there aren't any modified items in the current directory
if (empty($sources)) {
return $dh;
} else {
+ $files = array();
while (($filename = readdir($dh)) !== false) {
if ($filename != "." && $filename != "..") {
// If the file isn't in the sources array it isn't modified and can be added as is
@@ -402,9 +405,10 @@ class OC_Filestorage_Shared extends OC_Filestorage {
if (OC_Share::getParentFolders($target)) {
// If entry for item already exists
if (OC_Share::getItem($target)) {
- OC_Share::setTarget($target, "/");
+ OC_Share::unshareFromMySelf($target, false);
} else {
- OC_Share::pullOutOfFolder($target, "/");
+ OC_Share::pullOutOfFolder($target, $target);
+ OC_Share::unshareFromMySelf($target, false);
}
// Delete the database entry
} else {