1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
UpdateMemberHandler.php
См. документацию.
1<?php
2
3declare(strict_types=1);
4
5namespace Bitrix\Socialnetwork\Collab\Control\Handler\Update;
6
7use Bitrix\Main\Error;
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;
23
25{
26 use AddMemberTrait;
27 use GetMembersTrait;
28 use AddMemberLogTrait;
29 use DeleteMemberLogTrait;
30
31 public function update(UpdateCommand $command, Workgroup $entityBefore, Workgroup $entityAfter): HandlerResult
32 {
33 $handlerResult = new HandlerResult();
34
35 if (!$command instanceof CollabUpdateCommand)
36 {
37 $handlerResult->addError(new Error('Unexpected command type'));
38
39 return $handlerResult;
40 }
41
42 $addResult = $this->addMembersByCommand($command);
43 $deleteResult = $this->deleteMembersByCommand($command, $entityAfter);
44
45 return $handlerResult->merge($addResult)->merge($deleteResult);
46 }
47
49 {
50 $handlerResult = new HandlerResult();
51
52 $addMembers = $command->getAddMembers();
53 if (empty($addMembers))
54 {
55 return $handlerResult;
56 }
57
58 $addMembersByCommand = (new AccessCodeConverter(...$addMembers))
59 ->getUsers()
60 ->getUserIds()
61 ;
62
63 $add = array_diff($addMembersByCommand, $this->getMemberIds($command->getId()));
64
65 $handlerResult = $this->addMembers(
66 $command->getId(),
67 $command->getInitiatorId(),
69 $command->getInitiatedByType(),
70 ...$add,
71 );
72
73 if (!$handlerResult->isSuccess())
74 {
75 return $handlerResult;
76 }
77
78 [$employeeIds, $guestIds] = EmployeeProvider::getInstance()->splitIntoEmployeesAndGuests($add);
79
80 ActionMessageBuffer::getInstance()
81 ->put(ActionType::AddUser, $command->getId(), $command->getInitiatorId(), $employeeIds)
82 ->put(ActionType::AddGuest, $command->getId(), $command->getInitiatorId(), $guestIds);
83
84 $writeToLogResult = $this->writeAddMemberLog(
85 $add,
86 $command->getId(),
87 $command->getInitiatorId(),
89 );
90
91 return $handlerResult->merge($writeToLogResult);
92 }
93
94 protected function deleteMembersByCommand(CollabUpdateCommand $command, Workgroup $entityAfter): HandlerResult
95 {
96 $handlerResult = new HandlerResult();
97
98 $deleteMembers = $command->getDeleteMembers();
99 if (empty($deleteMembers))
100 {
101 return $handlerResult;
102 }
103
104 $delete = (new AccessCodeConverter(...$deleteMembers))
105 ->getUsers()
106 ->getUserIds()
107 ;
108
109 $handlerResult = $this->deleteMembers($command->getId(), ...$delete);
110
111 if (!$handlerResult->isSuccess())
112 {
113 return $handlerResult;
114 }
115
116 if (in_array($command->getInitiatorId(), $delete, true))
117 {
118 ActionMessageFactory::getInstance()
119 ->getActionMessage(ActionType::LeaveUser, $command->getId(), $command->getInitiatorId())
120 ->send()
121 ;
122
123 $delete = array_filter(
124 $delete,
125 static fn(int $userId): bool => $userId !== $command->getInitiatorId(),
126 );
127 }
128
129 ActionMessageFactory::getInstance()
130 ->getActionMessage(ActionType::ExcludeUser, $command->getId(), $command->getInitiatorId())
131 ->send($delete)
132 ;
133
134 $writeToLogResult = $this->writeDeleteMemberLog($delete, $entityAfter, $command->getInitiatorId());
135
136 return $handlerResult->merge($writeToLogResult);
137 }
138}
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
Определения check_mail.php:18
Определения error.php:15
deleteMembersByCommand(CollabUpdateCommand $command, Workgroup $entityAfter)
Определения UpdateMemberHandler.php:94
update(UpdateCommand $command, Workgroup $entityBefore, Workgroup $entityAfter)
Определения UpdateMemberHandler.php:31