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.
This commit is contained in:
parent
e44b164f40
commit
d38949f423
1 changed files with 41 additions and 0 deletions
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue