diff --git a/apps/files_sharing/lib/Listener/UserShareAcceptanceListener.php b/apps/files_sharing/lib/Listener/UserShareAcceptanceListener.php index ba46d72285..f8ce4353c1 100644 --- a/apps/files_sharing/lib/Listener/UserShareAcceptanceListener.php +++ b/apps/files_sharing/lib/Listener/UserShareAcceptanceListener.php @@ -29,8 +29,10 @@ namespace OCA\Files_Sharing\Listener; use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventListener; use OCP\IConfig; -use OCP\Share\Events\SharedEvent; +use OCP\IGroupManager; +use OCP\Share\Events\ShareCreatedEvent; use OCP\Share\IManager; +use OCP\Share\IShare; class UserShareAcceptanceListener implements IEventListener { @@ -38,23 +40,42 @@ class UserShareAcceptanceListener implements IEventListener { private $config; /** @var IManager */ private $shareManager; - /** @var string */ - private $userId; + /** @var IGroupManager */ + private $groupManager; - public function __construct(IConfig $config, IManager $shareManager, string $userId) { + public function __construct(IConfig $config, IManager $shareManager, IGroupManager $groupManager) { $this->config = $config; $this->shareManager = $shareManager; - $this->userId = $userId; + $this->groupManager = $groupManager; } public function handle(Event $event): void { - if (!($event instanceof SharedEvent)) { + if (!($event instanceof ShareCreatedEvent)) { return; } - if ($this->config->getUserValue($this->userId, 'files_sharing','default_accept','no') === 'yes') { - $share = $event->getShare(); - $this->shareManager->acceptShare($share, $this->userId); + $share = $event->getShare(); + + if ($share->getShareType() === IShare::TYPE_USER) { + $this->handleAutoAccept($share, $share->getSharedWith()); + } else if ($share->getShareType() === IShare::TYPE_GROUP) { + $group = $this->groupManager->get($share->getSharedWith()); + + if ($group === null) { + return; + } + + $users = $group->getUsers(); + foreach ($users as $user) { + $this->handleAutoAccept($share, $user->getUID()); + } + } + + } + + private function handleAutoAccept(IShare $share, string $userId) { + if ($this->config->getUserValue($userId, 'files_sharing','default_accept','no') === 'yes') { + $this->shareManager->acceptShare($share, $userId); } }