Emit moveToTrash event only for the deleting user

Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
Julius Härtl 2019-08-05 19:10:49 +02:00
parent 1d72073e34
commit b1832c8bef
No known key found for this signature in database
GPG Key ID: 4C614C6ED2CDE6DF
2 changed files with 11 additions and 9 deletions

View File

@ -125,10 +125,15 @@ class Storage extends Wrapper {
* @return bool * @return bool
*/ */
protected function shouldMoveToTrash($path) { protected function shouldMoveToTrash($path) {
$normalized = Filesystem::normalizePath($this->mountPoint . '/' . $path);
$parts = explode('/', $normalized);
if (count($parts) < 4 || !$this->userManager->userExists($parts[1])) {
return false;
}
// check if there is a app which want to disable the trash bin for this file // check if there is a app which want to disable the trash bin for this file
$fileId = $this->storage->getCache()->getId($path); $fileId = $this->storage->getCache()->getId($path);
$nodes = $this->rootFolder->getById($fileId); $nodes = $this->rootFolder->getUserFolder($parts[1])->getById($fileId);
foreach ($nodes as $node) { foreach ($nodes as $node) {
$event = $this->createMoveToTrashEvent($node); $event = $this->createMoveToTrashEvent($node);
$this->eventDispatcher->dispatch('OCA\Files_Trashbin::moveToTrash', $event); $this->eventDispatcher->dispatch('OCA\Files_Trashbin::moveToTrash', $event);
@ -137,13 +142,7 @@ class Storage extends Wrapper {
} }
} }
$normalized = Filesystem::normalizePath($this->mountPoint . '/' . $path); if ($parts[2] === 'files') {
$parts = explode('/', $normalized);
if (count($parts) < 4) {
return false;
}
if ($parts[2] === 'files' && $this->userManager->userExists($parts[1])) {
return true; return true;
} }

View File

@ -36,6 +36,7 @@ use OCA\Files_Trashbin\Events\MoveToTrashEvent;
use OCA\Files_Trashbin\Storage; use OCA\Files_Trashbin\Storage;
use OCA\Files_Trashbin\Trash\ITrashManager; use OCA\Files_Trashbin\Trash\ITrashManager;
use OCP\Files\Cache\ICache; use OCP\Files\Cache\ICache;
use OCP\Files\Folder;
use OCP\Files\IRootFolder; use OCP\Files\IRootFolder;
use OCP\Files\Node; use OCP\Files\Node;
use OCP\ILogger; use OCP\ILogger;
@ -545,12 +546,14 @@ class StorageTest extends \Test\TestCase {
$logger = $this->getMockBuilder(ILogger::class)->getMock(); $logger = $this->getMockBuilder(ILogger::class)->getMock();
$eventDispatcher = $this->createMock(EventDispatcherInterface::class); $eventDispatcher = $this->createMock(EventDispatcherInterface::class);
$rootFolder = $this->createMock(IRootFolder::class); $rootFolder = $this->createMock(IRootFolder::class);
$userFolder = $this->createMock(Folder::class);
$node = $this->getMockBuilder(Node::class)->disableOriginalConstructor()->getMock(); $node = $this->getMockBuilder(Node::class)->disableOriginalConstructor()->getMock();
$trashManager = $this->createMock(ITrashManager::class); $trashManager = $this->createMock(ITrashManager::class);
$event = $this->getMockBuilder(MoveToTrashEvent::class)->disableOriginalConstructor()->getMock(); $event = $this->getMockBuilder(MoveToTrashEvent::class)->disableOriginalConstructor()->getMock();
$event->expects($this->any())->method('shouldMoveToTrashBin')->willReturn(!$appDisablesTrash); $event->expects($this->any())->method('shouldMoveToTrashBin')->willReturn(!$appDisablesTrash);
$rootFolder->expects($this->any())->method('getById')->with($fileID)->willReturn([$node]); $userFolder->expects($this->any())->method('getById')->with($fileID)->willReturn([$node]);
$rootFolder->expects($this->any())->method('getUserFolder')->willReturn($userFolder);
$storage = $this->getMockBuilder(Storage::class) $storage = $this->getMockBuilder(Storage::class)
->setConstructorArgs( ->setConstructorArgs(