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 {
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);
}
}