mirror of
https://github.com/nextcloud/server.git
synced 2026-02-11 14:54:02 -05:00
fix: Tidy up code for reshare deletion
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
This commit is contained in:
parent
024f98a8a1
commit
16decdede7
2 changed files with 24 additions and 22 deletions
|
|
@ -1032,31 +1032,32 @@ class Manager implements IManager {
|
|||
return $deletedShares;
|
||||
}
|
||||
|
||||
public function deleteReshare(IShare $share) {
|
||||
// Skip if node not found
|
||||
protected function deleteReshares(IShare $share): void {
|
||||
try {
|
||||
$node = $share->getNode();
|
||||
} catch (NotFoundException) {
|
||||
/* Skip if node not found */
|
||||
return;
|
||||
}
|
||||
|
||||
$userIds = [];
|
||||
|
||||
if ($share->getShareType() === IShare::TYPE_USER) {
|
||||
if ($share->getShareType() === IShare::TYPE_USER) {
|
||||
$userIds[] = $share->getSharedWith();
|
||||
}
|
||||
|
||||
if ($share->getShareType() === IShare::TYPE_GROUP) {
|
||||
} elseif ($share->getShareType() === IShare::TYPE_GROUP) {
|
||||
$group = $this->groupManager->get($share->getSharedWith());
|
||||
$users = $group->getUsers();
|
||||
$users = $group?->getUsers() ?? [];
|
||||
|
||||
foreach ($users as $user) {
|
||||
// Skip if share owner is member of shared group
|
||||
/* Skip share owner */
|
||||
if ($user->getUID() === $share->getShareOwner()) {
|
||||
continue;
|
||||
}
|
||||
$userIds[] = $user->getUID();
|
||||
}
|
||||
} else {
|
||||
/* We only support user and group shares */
|
||||
return;
|
||||
}
|
||||
|
||||
$reshareRecords = [];
|
||||
|
|
@ -1065,7 +1066,7 @@ class Manager implements IManager {
|
|||
IShare::TYPE_USER,
|
||||
IShare::TYPE_LINK,
|
||||
IShare::TYPE_REMOTE,
|
||||
IShare::TYPE_EMAIL
|
||||
IShare::TYPE_EMAIL,
|
||||
];
|
||||
|
||||
foreach ($userIds as $userId) {
|
||||
|
|
@ -1077,8 +1078,8 @@ class Manager implements IManager {
|
|||
}
|
||||
}
|
||||
|
||||
if ($share->getNodeType() === 'folder') {
|
||||
$sharesInFolder = $this->getSharesInFolder($userId, $node, true);
|
||||
if ($node instanceof Folder) {
|
||||
$sharesInFolder = $this->getSharesInFolder($userId, $node, false);
|
||||
|
||||
foreach ($sharesInFolder as $shares) {
|
||||
foreach ($shares as $child) {
|
||||
|
|
@ -1092,6 +1093,7 @@ class Manager implements IManager {
|
|||
try {
|
||||
$this->generalCreateChecks($child);
|
||||
} catch (GenericShareException $e) {
|
||||
$this->logger->debug('Delete reshare because of exception '.$e->getMessage(), ['exception' => $e]);
|
||||
$this->deleteShare($child);
|
||||
}
|
||||
}
|
||||
|
|
@ -1120,10 +1122,10 @@ class Manager implements IManager {
|
|||
$provider = $this->factory->getProviderForType($share->getShareType());
|
||||
$provider->delete($share);
|
||||
|
||||
// Delete shares that shared by the "share with user/group"
|
||||
$this->deleteReshare($share);
|
||||
|
||||
$this->dispatcher->dispatchTyped(new ShareDeletedEvent($share));
|
||||
|
||||
// Delete reshares of the deleted share
|
||||
$this->deleteReshares($share);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -228,7 +228,7 @@ class ManagerTest extends \Test\TestCase {
|
|||
*/
|
||||
public function testDelete($shareType, $sharedWith) {
|
||||
$manager = $this->createManagerMock()
|
||||
->setMethods(['getShareById', 'deleteChildren', 'deleteReshare'])
|
||||
->setMethods(['getShareById', 'deleteChildren', 'deleteReshares'])
|
||||
->getMock();
|
||||
|
||||
$manager->method('deleteChildren')->willReturn([]);
|
||||
|
|
@ -246,7 +246,7 @@ class ManagerTest extends \Test\TestCase {
|
|||
->setTarget('myTarget');
|
||||
|
||||
$manager->expects($this->once())->method('deleteChildren')->with($share);
|
||||
$manager->expects($this->once())->method('deleteReshare')->with($share);
|
||||
$manager->expects($this->once())->method('deleteReshares')->with($share);
|
||||
|
||||
$this->defaultProvider
|
||||
->expects($this->once())
|
||||
|
|
@ -271,7 +271,7 @@ class ManagerTest extends \Test\TestCase {
|
|||
|
||||
public function testDeleteLazyShare() {
|
||||
$manager = $this->createManagerMock()
|
||||
->setMethods(['getShareById', 'deleteChildren', 'deleteReshare'])
|
||||
->setMethods(['getShareById', 'deleteChildren', 'deleteReshares'])
|
||||
->getMock();
|
||||
|
||||
$manager->method('deleteChildren')->willReturn([]);
|
||||
|
|
@ -290,7 +290,7 @@ class ManagerTest extends \Test\TestCase {
|
|||
$this->rootFolder->expects($this->never())->method($this->anything());
|
||||
|
||||
$manager->expects($this->once())->method('deleteChildren')->with($share);
|
||||
$manager->expects($this->once())->method('deleteReshare')->with($share);
|
||||
$manager->expects($this->once())->method('deleteReshares')->with($share);
|
||||
|
||||
$this->defaultProvider
|
||||
->expects($this->once())
|
||||
|
|
@ -315,7 +315,7 @@ class ManagerTest extends \Test\TestCase {
|
|||
|
||||
public function testDeleteNested() {
|
||||
$manager = $this->createManagerMock()
|
||||
->setMethods(['getShareById', 'deleteReshare'])
|
||||
->setMethods(['getShareById', 'deleteReshares'])
|
||||
->getMock();
|
||||
|
||||
$path = $this->createMock(File::class);
|
||||
|
|
@ -501,7 +501,7 @@ class ManagerTest extends \Test\TestCase {
|
|||
|
||||
$manager->expects($this->atLeast(2))->method('deleteShare')->withConsecutive([$reShare], [$reShareInSubFolder]);
|
||||
|
||||
$manager->deleteReshare($share);
|
||||
self::invokePrivate($manager, 'deleteReshares', [$share]);
|
||||
}
|
||||
|
||||
public function testDeleteReshareWhenUserHasAnotherShare(): void {
|
||||
|
|
@ -529,7 +529,7 @@ class ManagerTest extends \Test\TestCase {
|
|||
|
||||
$manager->expects($this->never())->method('deleteShare');
|
||||
|
||||
$manager->deleteReshare($share);
|
||||
self::invokePrivate($manager, 'deleteReshares', [$share]);
|
||||
}
|
||||
|
||||
public function testDeleteReshareOfUsersInGroupShare(): void {
|
||||
|
|
@ -578,7 +578,7 @@ class ManagerTest extends \Test\TestCase {
|
|||
|
||||
$manager->expects($this->exactly(2))->method('deleteShare')->withConsecutive([$reShare1], [$reShare2]);
|
||||
|
||||
$manager->deleteReshare($share);
|
||||
self::invokePrivate($manager, 'deleteReshares', [$share]);
|
||||
}
|
||||
|
||||
public function testGetShareById(): void {
|
||||
|
|
|
|||
Loading…
Reference in a new issue