Skip to content
Snippets Groups Projects
Commit 59256973 authored by Michael Gapczynski's avatar Michael Gapczynski
Browse files

Fix bug in getPermissions() and clean-up unlink() and rename()

parent 683e1250
No related branches found
No related tags found
No related merge requests found
...@@ -264,9 +264,9 @@ class OC_Share { ...@@ -264,9 +264,9 @@ class OC_Share {
if (count($result) > 0) { if (count($result) > 0) {
return $result[0]['permissions']; return $result[0]['permissions'];
} else { } else {
$folders =self::getParentFolders($target); $folders = self::getParentFolders($target);
if ($folders == true) { if ($folders == true) {
$result = $query->execute(array($folders))->fetchAll(); $result = $query->execute(array($folders['target']))->fetchAll();
if (count($result) > 0) { if (count($result) > 0) {
return $result[0]['permissions']; return $result[0]['permissions'];
} }
......
...@@ -392,48 +392,36 @@ class OC_Filestorage_Shared extends OC_Filestorage { ...@@ -392,48 +392,36 @@ class OC_Filestorage_Shared extends OC_Filestorage {
} }
public function unlink($path) { public function unlink($path) {
$target = $this->datadir.$path;
// If the user has delete permission for the item, the source item will be deleted
if (OC_Share::getPermissions($target) & OC_Share::DELETE) {
$source = $this->getSource($path);
if ($source) {
$storage = OC_Filesystem::getStorage($source);
return $storage->unlink($this->getInternalPath($source));
}
// The item will be removed from the database, but won't be touched on the owner's filesystem // The item will be removed from the database, but won't be touched on the owner's filesystem
} else { $target = $this->datadir.$path;
// Check if the item is inside a shared folder // Check if the item is inside a shared folder
if (OC_Share::getParentFolders($target)) { if (OC_Share::getParentFolders($target)) {
// If entry for item already exists // If entry for item already exists
if (OC_Share::getItem($target)) { if (OC_Share::getItem($target)) {
OC_Share::setTarget($target, "/"); OC_Share::setTarget($target, "/");
} else {
OC_Share::pullOutOfFolder($target, "/");
}
// Delete the database entry
} else { } else {
OC_Share::unshareFromMySelf($target); OC_Share::pullOutOfFolder($target, "/");
} }
$this->clearFolderSizeCache($this->getInternalPath($target)); // Delete the database entry
} else {
OC_Share::unshareFromMySelf($target);
} }
$this->clearFolderSizeCache($this->getInternalPath($target));
return true; return true;
} }
public function rename($path1, $path2) { public function rename($path1, $path2) {
// If the user has write permission for the item, the source item will be renamed $oldTarget = $this->datadir.$path1;
if ($this->is_writeable($path1)) { $newTarget = $this->datadir.$path2;
$source = $this->getSource($path1); // Check if the item is inside a shared folder
if ($source) { if (OC_Share::getParentFolders($oldTarget)) {
$storage = OC_Filesystem::getStorage($source); if ($this->is_writeable($path1)) {
return $storage->rename($path1, $path2); $oldSource = $this->getSource($path1);
} $newSource = dirname($oldSource)."/".basename($path2);
// The item will be renamed in the database, but won't be touched on the owner's filesystem if ($oldSource) {
} else { $storage = OC_Filesystem::getStorage($oldSource);
$oldTarget = $this->datadir.$path1; return $storage->rename($this->getInternalPath($oldSource), $this->getInternalPath($newSource));
$newTarget = $this->datadir.$path2; }
if (OC_Share::getItem($oldTarget)) {
OC_Share::setTarget($oldTarget, $newTarget);
// There is no entry in the database for the item, it must be inside a shared folder
} else { } else {
OC_Share::pullOutOfFolder($oldTarget, $newTarget); OC_Share::pullOutOfFolder($oldTarget, $newTarget);
// If this is a folder being renamed, call setTarget in case there are any database entries inside the folder // If this is a folder being renamed, call setTarget in case there are any database entries inside the folder
...@@ -441,10 +429,12 @@ class OC_Filestorage_Shared extends OC_Filestorage { ...@@ -441,10 +429,12 @@ class OC_Filestorage_Shared extends OC_Filestorage {
OC_Share::setTarget($oldTarget, $newTarget); OC_Share::setTarget($oldTarget, $newTarget);
} }
} }
$this->clearFolderSizeCache($this->getInternalPath($oldTarget)); } else {
$this->clearFolderSizeCache($this->getInternalPath($newTarget)); OC_Share::setTarget($oldTarget, $newTarget);
return true;
} }
$this->clearFolderSizeCache($this->getInternalPath($oldTarget));
$this->clearFolderSizeCache($this->getInternalPath($newTarget));
return true;
} }
public function copy($path1, $path2) { public function copy($path1, $path2) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment