3declare(strict_types=1);
5namespace Bitrix\Socialnetwork\Collab\Control\Handler\Update;
8use Bitrix\Socialnetwork\Collab\Control\Command\CollabUpdateCommand;
9use Bitrix\Socialnetwork\Collab\Integration\IM\ActionMessageBuffer;
10use Bitrix\Socialnetwork\Provider\EmployeeProvider;
11use Bitrix\Socialnetwork\Collab\Control\Handler\Trait\AddMemberLogTrait;
12use Bitrix\Socialnetwork\Collab\Control\Handler\Trait\DeleteMemberLogTrait;
13use Bitrix\Socialnetwork\Control\Member\Trait\AddMemberTrait;
14use Bitrix\Socialnetwork\Control\Member\Trait\GetMembersTrait;
15use Bitrix\Socialnetwork\Collab\Integration\IM\ActionType;
16use Bitrix\Socialnetwork\Collab\Integration\IM\ActionMessageFactory;
17use Bitrix\Socialnetwork\Control\Command\UpdateCommand;
18use Bitrix\Socialnetwork\Control\Handler\HandlerResult;
19use Bitrix\Socialnetwork\Control\Handler\Update\UpdateHandlerInterface;
20use Bitrix\Socialnetwork\Integration\HumanResources\AccessCodeConverter;
21use Bitrix\Socialnetwork\Item\Workgroup;
22use Bitrix\Socialnetwork\UserToGroupTable;
28 use AddMemberLogTrait;
29 use DeleteMemberLogTrait;
37 $handlerResult->addError(
new Error(
'Unexpected command type'));
39 return $handlerResult;
45 return $handlerResult->merge($addResult)->merge($deleteResult);
52 $addMembers = $command->getAddMembers();
53 if (empty($addMembers))
55 return $handlerResult;
63 $add = array_diff($addMembersByCommand, $this->getMemberIds($command->getId()));
65 $handlerResult = $this->addMembers(
67 $command->getInitiatorId(),
69 $command->getInitiatedByType(),
73 if (!$handlerResult->isSuccess())
75 return $handlerResult;
78 [$employeeIds, $guestIds] = EmployeeProvider::getInstance()->splitIntoEmployeesAndGuests($add);
80 ActionMessageBuffer::getInstance()
81 ->put(ActionType::AddUser, $command->getId(), $command->getInitiatorId(), $employeeIds)
82 ->put(ActionType::AddGuest, $command->getId(), $command->getInitiatorId(), $guestIds);
84 $writeToLogResult = $this->writeAddMemberLog(
87 $command->getInitiatorId(),
91 return $handlerResult->merge($writeToLogResult);
98 $deleteMembers = $command->getDeleteMembers();
99 if (empty($deleteMembers))
101 return $handlerResult;
109 $handlerResult = $this->deleteMembers($command->getId(), ...$delete);
111 if (!$handlerResult->isSuccess())
113 return $handlerResult;
116 if (in_array($command->getInitiatorId(), $delete,
true))
118 ActionMessageFactory::getInstance()
119 ->getActionMessage(ActionType::LeaveUser, $command->getId(), $command->getInitiatorId())
123 $delete = array_filter(
125 static fn(
int $userId):
bool =>
$userId !== $command->getInitiatorId(),
129 ActionMessageFactory::getInstance()
130 ->getActionMessage(ActionType::ExcludeUser, $command->getId(), $command->getInitiatorId())
134 $writeToLogResult = $this->writeDeleteMemberLog($delete, $entityAfter, $command->getInitiatorId());
136 return $handlerResult->merge($writeToLogResult);
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
deleteMembersByCommand(CollabUpdateCommand $command, Workgroup $entityAfter)
update(UpdateCommand $command, Workgroup $entityBefore, Workgroup $entityAfter)
addMembersByCommand(CollabUpdateCommand $command)