[Pkg-owncloud-commits] [owncloud] 59/86: Update parent when moving share into recieved share
David Prévot
taffit at moszumanska.debian.org
Tue Dec 22 16:52:00 UTC 2015
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to annotated tag v8.1.5
in repository owncloud.
commit 643778b028bef2ef4005236084b84a2d8a6d834e
Author: Roeland Jago Douma <rullzer at owncloud.com>
Date: Mon Dec 7 13:24:16 2015 +0100
Update parent when moving share into recieved share
Fixes #20769
When I receive a share and move a share of myself into that share (which
is allowed currently) I effectively hand over ownership of the files I
move. So we need to update the share I move to have as a parent the
share I move it into. Else our mounting system gets confused.
---
apps/files_sharing/lib/updater.php | 38 ++++++++++++++++++++++++++++++++++++++
1 file changed, 38 insertions(+)
diff --git a/apps/files_sharing/lib/updater.php b/apps/files_sharing/lib/updater.php
index 5a0326c..a581355 100644
--- a/apps/files_sharing/lib/updater.php
+++ b/apps/files_sharing/lib/updater.php
@@ -56,6 +56,44 @@ class Shared_Updater {
*/
static public function renameHook($params) {
self::renameChildren($params['oldpath'], $params['newpath']);
+ self::moveShareToShare($params['newpath']);
+ }
+
+ /**
+ * Fix for https://github.com/owncloud/core/issues/20769
+ *
+ * The owner is allowed to move their files (if they are shared) into a receiving folder
+ * In this case we need to update the parent of the moved share. Since they are
+ * effectively handing over ownership of the file the rest of the code needs to know
+ * they need to build up the reshare tree.
+ *
+ * @param string $path
+ */
+ static private function moveShareToShare($path) {
+ $userFolder = \OC::$server->getUserFolder();
+ $src = $userFolder->get($path);
+
+ $type = $src instanceof \OCP\Files\File ? 'file' : 'folder';
+ $shares = \OCP\Share::getItemShared($type, $src->getId());
+
+ // If the path we move is not a share we don't care
+ if (empty($shares)) {
+ return;
+ }
+
+ // Check if the destination is inside a share
+ $mountManager = \OC\Files\Filesystem::getMountManager();
+ $dstMount = $mountManager->find($src->getPath());
+ if (!($dstMount instanceof \OCA\Files_Sharing\SharedMount)) {
+ return;
+ }
+
+ $parenShare = $dstMount->getShare();
+
+ foreach ($shares as $share) {
+ $query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `parent` = ? WHERE `id` = ?');
+ $query->execute([$parenShare['id'], $share['id']]);
+ }
}
/**
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud.git
More information about the Pkg-owncloud-commits
mailing list