28 use UpdateMemberRoleTrait;
29 use AddMemberLogTrait;
30 use UpdateMemberRoleLogTrait;
36 $commandAddModeratorsAccessCodes = $command->getAddModeratorMembers();
37 if (!empty($commandAddModeratorsAccessCodes))
44 $add = array_diff($commandAddModerators, $this->getMemberIds($command->getId()));
45 $handlerResult = $this->addModeratorMembers($command, $add, $entityAfter);
48 $currentMembers = $this->getMemberIds($command->getId());
49 foreach ($commandAddModerators as $moderatorId)
51 $isCurrentMember = in_array($moderatorId, $currentMembers,
true);
52 $isAlreadyAdd = in_array($moderatorId, $add,
true);
53 $isOwner = $moderatorId === $entityAfter->getOwnerId();
55 if ($isCurrentMember && !$isAlreadyAdd && !$isOwner)
57 $update[] = $moderatorId;
63 $handlerResult->merge($this->increaseMembersRole($command, $update));
67 $commandDeleteModeratorsAccessCodes = $command->getDeleteModeratorMembers();
68 if (!empty($commandDeleteModeratorsAccessCodes))
71 $commandDeleteModerators = (
new AccessCodeConverter(...$commandDeleteModeratorsAccessCodes))
76 $delete = array_intersect($currentModerators, $commandDeleteModerators);
79 $handlerResult->merge($this->decreaseMembersRole($command, $delete));
83 return $handlerResult;
93 $handlerResult = $this->addMembers(
95 $command->getInitiatorId(),
101 if (!$handlerResult->isSuccess())
103 return $handlerResult;
106 ActionMessageBuffer::getInstance()
107 ->put(ActionType::AddUser, $command->getId(), $command->getInitiatorId(), $memberIds)
110 Messenger::setManagers($command->getId(), $memberIds);
112 CollabAnalytics::getInstance()->onModeratorChanged($command->getInitiatorId(), $command->getId());
114 $writeToLogResult = $this->writeAddMemberLog(
117 $command->getInitiatorId(),
121 return $handlerResult->merge($writeToLogResult);
129 private function increaseMembersRole(
UpdateCommand $command,
array $memberIds): HandlerResult
131 $handlerResult = $this->updateMembersRole(
133 $command->getInitiatorId(),
138 if (!$handlerResult->isSuccess())
140 return $handlerResult;
143 Messenger::setManagers($command->getId(), $memberIds);
145 $writeLogResult = $this->writeMemberRoleUpdateLog(
148 $command->getInitiatorId(),
152 return $handlerResult->merge($writeLogResult);
155 private function decreaseMembersRole(UpdateCommand $command,
array $memberIds): HandlerResult
157 $handlerResult = $this->updateMembersRole(
159 $command->getInitiatorId(),
164 if (!$handlerResult->isSuccess())
166 return $handlerResult;
169 Messenger::unsetManagers($command->getId(), $memberIds);
171 $writeLogResult = $this->writeMemberRoleUpdateLog(
174 $command->getInitiatorId(),
178 return $handlerResult->merge($writeLogResult);