summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/files_sharing/lib/Listener/UserShareAcceptanceListener.php39
1 files changed, 30 insertions, 9 deletions
diff --git a/apps/files_sharing/lib/Listener/UserShareAcceptanceListener.php b/apps/files_sharing/lib/Listener/UserShareAcceptanceListener.php
index ba46d722850..f8ce4353c13 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);
}
}