[Pkg-owncloud-commits] [owncloud] 61/107: Update parent when moving share into recieved share

David Prévot taffit at moszumanska.debian.org
Thu Dec 17 19:40:37 UTC 2015


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch stable8
in repository owncloud.

commit 0dae2b8296af7f4e6d174dd64b8c80b97a3fa0dc
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 | 41 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/apps/files_sharing/lib/updater.php b/apps/files_sharing/lib/updater.php
index d70ed23..218d0f2 100644
--- a/apps/files_sharing/lib/updater.php
+++ b/apps/files_sharing/lib/updater.php
@@ -58,6 +58,47 @@ 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::$server->getMountManager();
+		$dstMount = $mountManager->find($src->getPath());
+		if (!($dstMount instanceof \OCA\Files_Sharing\SharedMount)) {
+			return;
+		}
+
+		$parenShare = $dstMount->getShare();
+
+		foreach ($shares as $share) {
+			$qb = \OC::$server->getDatabaseConnection()->getQueryBuilder();
+			$qb->update('share')
+					->set('parent', $qb->createNamedParameter($parenShare['id']))
+					->where($qb->expr()->eq('id', $qb->createNamedParameter($share['id'])))
+					->execute();
+		}
 	}
 
 	/**

-- 
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