summaryrefslogtreecommitdiffstats
path: root/settings/Hooks.php
diff options
context:
space:
mode:
Diffstat (limited to 'settings/Hooks.php')
-rw-r--r--settings/Hooks.php81
1 files changed, 81 insertions, 0 deletions
diff --git a/settings/Hooks.php b/settings/Hooks.php
index f2b9e4fd086..49189ca082e 100644
--- a/settings/Hooks.php
+++ b/settings/Hooks.php
@@ -25,9 +25,12 @@
namespace OC\Settings;
+use OC\Settings\Activity\GroupProvider;
use OC\Settings\Activity\Provider;
use OCP\Activity\IManager as IActivityManager;
use OCP\IConfig;
+use OCP\IGroup;
+use OCP\IGroupManager;
use OCP\IL10N;
use OCP\IURLGenerator;
use OCP\IUser;
@@ -40,6 +43,8 @@ class Hooks {
/** @var IActivityManager */
protected $activityManager;
+ /** @var IGroupManager|\OC\Group\Manager */
+ protected $groupManager;
/** @var IUserManager */
protected $userManager;
/** @var IUserSession */
@@ -56,6 +61,7 @@ class Hooks {
protected $l;
public function __construct(IActivityManager $activityManager,
+ IGroupManager $groupManager,
IUserManager $userManager,
IUserSession $userSession,
IURLGenerator $urlGenerator,
@@ -64,6 +70,7 @@ class Hooks {
IFactory $languageFactory,
IL10N $l) {
$this->activityManager = $activityManager;
+ $this->groupManager = $groupManager;
$this->userManager = $userManager;
$this->userSession = $userSession;
$this->urlGenerator = $urlGenerator;
@@ -210,4 +217,78 @@ class Hooks {
$this->mailer->send($message);
}
}
+
+ /**
+ * @param IGroup $group
+ * @param IUser $user
+ * @throws \InvalidArgumentException
+ * @throws \BadMethodCallException
+ */
+ public function addUserToGroup(IGroup $group, IUser $user): void {
+ $subAdminManager = $this->groupManager->getSubAdmin();
+ $usersToNotify = $subAdminManager->getGroupsSubAdmins($group);
+ $usersToNotify[] = $user;
+
+
+ $event = $this->activityManager->generateEvent();
+ $event->setApp('settings')
+ ->setType('group_settings');
+
+ $actor = $this->userSession->getUser();
+ if ($actor instanceof IUser) {
+ $event->setAuthor($actor->getUID())
+ ->setSubject(GroupProvider::ADDED_TO_GROUP, [
+ 'user' => $user->getUID(),
+ 'group' => $group->getGID(),
+ 'actor' => $actor->getUID(),
+ ]);
+ } else {
+ $event->setSubject(GroupProvider::ADDED_TO_GROUP, [
+ 'user' => $user->getUID(),
+ 'group' => $group->getGID(),
+ ]);
+ }
+
+ foreach ($usersToNotify as $userToNotify) {
+ $event->setAffectedUser($userToNotify->getUID());
+ $this->activityManager->publish($event);
+ }
+ }
+
+ /**
+ * @param IGroup $group
+ * @param IUser $user
+ * @throws \InvalidArgumentException
+ * @throws \BadMethodCallException
+ */
+ public function removeUserFromGroup(IGroup $group, IUser $user): void {
+ $subAdminManager = $this->groupManager->getSubAdmin();
+ $usersToNotify = $subAdminManager->getGroupsSubAdmins($group);
+ $usersToNotify[] = $user;
+
+
+ $event = $this->activityManager->generateEvent();
+ $event->setApp('settings')
+ ->setType('group_settings');
+
+ $actor = $this->userSession->getUser();
+ if ($actor instanceof IUser) {
+ $event->setAuthor($actor->getUID())
+ ->setSubject(GroupProvider::REMOVED_FROM_GROUP, [
+ 'user' => $user->getUID(),
+ 'group' => $group->getGID(),
+ 'actor' => $actor->getUID(),
+ ]);
+ } else {
+ $event->setSubject(GroupProvider::REMOVED_FROM_GROUP, [
+ 'user' => $user->getUID(),
+ 'group' => $group->getGID(),
+ ]);
+ }
+
+ foreach ($usersToNotify as $userToNotify) {
+ $event->setAffectedUser($userToNotify->getUID());
+ $this->activityManager->publish($event);
+ }
+ }
}