1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
UpdateModeratorsHandler.php
См. документацию.
1<?php
2
3declare(strict_types=1);
4
5namespace Bitrix\Socialnetwork\Collab\Control\Handler\Update;
6
7use Bitrix\SocialNetwork\Collab\Analytics\CollabAnalytics;
8use Bitrix\Socialnetwork\Collab\Collab;
9use Bitrix\Socialnetwork\Collab\Control\Handler\Trait\AddMemberLogTrait;
10use Bitrix\Socialnetwork\Collab\Control\Handler\Trait\UpdateMemberRoleLogTrait;
11use Bitrix\Socialnetwork\Collab\Integration\IM\ActionMessageBuffer;
12use Bitrix\Socialnetwork\Collab\Integration\IM\Messenger;
13use Bitrix\Socialnetwork\Control\Member\Trait\AddMemberTrait;
14use Bitrix\Socialnetwork\Control\Member\Trait\GetMembersTrait;
15use Bitrix\Socialnetwork\Collab\Integration\IM\ActionType;
16use Bitrix\Socialnetwork\Control\Command\UpdateCommand;
17use Bitrix\Socialnetwork\Control\Handler\HandlerResult;
18use Bitrix\Socialnetwork\Control\Handler\Update\UpdateHandlerInterface;
19use Bitrix\Socialnetwork\Control\Member\Trait\UpdateMemberRoleTrait;
20use Bitrix\Socialnetwork\Integration\HumanResources\AccessCodeConverter;
21use Bitrix\Socialnetwork\Item\Workgroup;
22use Bitrix\Socialnetwork\UserToGroupTable;
23
25{
26 use GetMembersTrait;
27 use AddMemberTrait;
28 use UpdateMemberRoleTrait;
29 use AddMemberLogTrait;
30 use UpdateMemberRoleLogTrait;
31
32 public function update(UpdateCommand $command, Workgroup $entityBefore, Workgroup $entityAfter): HandlerResult
33 {
34 $handlerResult = new HandlerResult();
35
36 $commandAddModeratorsAccessCodes = $command->getAddModeratorMembers();
37 if (!empty($commandAddModeratorsAccessCodes))
38 {
39 $commandAddModerators = (new AccessCodeConverter(...$commandAddModeratorsAccessCodes))
40 ->getUsers()
41 ->getUserIds()
42 ;
43
44 $add = array_diff($commandAddModerators, $this->getMemberIds($command->getId()));
45 $handlerResult = $this->addModeratorMembers($command, $add, $entityAfter);
46
47 $update = [];
48 $currentMembers = $this->getMemberIds($command->getId());
49 foreach ($commandAddModerators as $moderatorId)
50 {
51 $isCurrentMember = in_array($moderatorId, $currentMembers, true);
52 $isAlreadyAdd = in_array($moderatorId, $add, true);
53 $isOwner = $moderatorId === $entityAfter->getOwnerId();
54
55 if ($isCurrentMember && !$isAlreadyAdd && !$isOwner)
56 {
57 $update[] = $moderatorId;
58 }
59 }
60
61 if (!empty($update))
62 {
63 $handlerResult->merge($this->increaseMembersRole($command, $update));
64 }
65 }
66
67 $commandDeleteModeratorsAccessCodes = $command->getDeleteModeratorMembers();
68 if (!empty($commandDeleteModeratorsAccessCodes))
69 {
70 $currentModerators = $this->getMemberIds($command->getId(), UserToGroupTable::ROLE_MODERATOR);
71 $commandDeleteModerators = (new AccessCodeConverter(...$commandDeleteModeratorsAccessCodes))
72 ->getUsers()
73 ->getUserIds()
74 ;
75
76 $delete = array_intersect($currentModerators, $commandDeleteModerators);
77 if (!empty($delete))
78 {
79 $handlerResult->merge($this->decreaseMembersRole($command, $delete));
80 }
81 }
82
83 return $handlerResult;
84 }
85
91 private function addModeratorMembers(UpdateCommand $command, array $memberIds, Collab $entityAfter): HandlerResult
92 {
93 $handlerResult = $this->addMembers(
94 $command->getId(),
95 $command->getInitiatorId(),
98 ...$memberIds
99 );
100
101 if (!$handlerResult->isSuccess())
102 {
103 return $handlerResult;
104 }
105
106 ActionMessageBuffer::getInstance()
107 ->put(ActionType::AddUser, $command->getId(), $command->getInitiatorId(), $memberIds)
108 ->flush();
109
110 Messenger::setManagers($command->getId(), $memberIds);
111
112 CollabAnalytics::getInstance()->onModeratorChanged($command->getInitiatorId(), $command->getId());
113
114 $writeToLogResult = $this->writeAddMemberLog(
115 $memberIds,
116 $command->getId(),
117 $command->getInitiatorId(),
119 );
120
121 return $handlerResult->merge($writeToLogResult);
122 }
123
129 private function increaseMembersRole(UpdateCommand $command, array $memberIds): HandlerResult
130 {
131 $handlerResult = $this->updateMembersRole(
132 $command->getId(),
133 $command->getInitiatorId(),
135 ...$memberIds
136 );
137
138 if (!$handlerResult->isSuccess())
139 {
140 return $handlerResult;
141 }
142
143 Messenger::setManagers($command->getId(), $memberIds);
144
145 $writeLogResult = $this->writeMemberRoleUpdateLog(
146 $memberIds,
147 $command->getId(),
148 $command->getInitiatorId(),
150 );
151
152 return $handlerResult->merge($writeLogResult);
153 }
154
155 private function decreaseMembersRole(UpdateCommand $command, array $memberIds): HandlerResult
156 {
157 $handlerResult = $this->updateMembersRole(
158 $command->getId(),
159 $command->getInitiatorId(),
161 ...$memberIds
162 );
163
164 if (!$handlerResult->isSuccess())
165 {
166 return $handlerResult;
167 }
168
169 Messenger::unsetManagers($command->getId(), $memberIds);
170
171 $writeLogResult = $this->writeMemberRoleUpdateLog(
172 $memberIds,
173 $command->getId(),
174 $command->getInitiatorId(),
176 );
177
178 return $handlerResult->merge($writeLogResult);
179 }
180}
update(UpdateCommand $command, Workgroup $entityBefore, Workgroup $entityAfter)
Определения UpdateModeratorsHandler.php:32
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804