31 if ($command->getAddMembers() ===
null)
33 return $handlerResult;
36 $currentMembers = $entityBefore->getUserMemberIds();
37 $currentMembersByDepartments = $this->getDepartmentsMemberList($entityBefore);
40 $membersToExclude = $this->getMembersToExclude($currentMembers, $currentMembersByDepartments, $commandUserList);
41 if (empty($membersToExclude))
43 return $handlerResult;
46 foreach ($membersToExclude as $memberId)
48 $excludeResult = $this->excludeMember($entityBefore->getId(), $memberId);
49 $handlerResult->merge($excludeResult);
52 $handlerResult->setGroupChanged();
54 return $handlerResult;
57 private function getMembersToExclude(
58 array $currentMembers,
59 array $currentMembersByDepartment,
63 $membersToExclude = [];
64 foreach ($currentMembers as $member)
66 $isCommandUser = in_array($member, $commandUsers,
true);
67 $isGroupMemberByDepartment = in_array($member, $currentMembersByDepartment,
true);
70 if ($isCommandUser || $isGroupMemberByDepartment)
75 $membersToExclude[] = $member;
78 return $membersToExclude;
88 private function getDepartmentsMemberList(Workgroup
$entity):
array
90 $departmentIds =
$entity->getSynchronizedDepartmentIds();
91 $departmentAccessCodes = array_map(
92 static fn(
int $departmentId):
string =>
"DR${departmentId}",
96 return (
new AccessCodeConverter(...$departmentAccessCodes))->getUserIds();
99 private function excludeMember(
int $entityId,
int $memberId): Result
105 \Bitrix\Socialnetwork\Helper\Workgroup::exclude([
107 'userId' => $memberId,
110 catch (AccessDeniedException $e)
112 $result->addError(
new Error(
"Deletion member with id $memberId was failed"));