1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
GroupMemberService.php
См. документацию.
1<?php
2
3declare(strict_types=1);
4
5namespace Bitrix\Socialnetwork\Control\Member;
6
7use Bitrix\Main\Error;
8use Bitrix\Main\Result;
9use Bitrix\Main\Type\DateTime;
10use Bitrix\Socialnetwork\Control\Handler\HandlerResult;
11use Bitrix\Socialnetwork\Control\Member\Command\MembersCommand;
12use Bitrix\Socialnetwork\Control\Member\Trait\AddMemberTrait;
13use Bitrix\Socialnetwork\Control\Member\Trait\UpdateMemberRoleTrait;
14use Bitrix\Socialnetwork\Integration\HumanResources\AccessCodeConverter;
15use Bitrix\Socialnetwork\Internals\Registry\GroupRegistry;
16use Bitrix\Socialnetwork\Item\Workgroup;
17use Bitrix\Socialnetwork\UserToGroupTable;
18use CSocNetUserToGroup;
19
21{
22 use AddMemberTrait;
23 use UpdateMemberRoleTrait;
24
25 protected function inviteImplementation(MembersCommand $command, Workgroup $group): Result
26 {
27 $currentMembers = $this->getMemberIds($command->getGroupId());
28 $membersByCommand = (new AccessCodeConverter(...$command->getMembers()))
29 ->getUsers()
30 ->getUserIds()
31 ;
32
33 $result = new Result();
34
35 $membersToInvite = array_diff($membersByCommand, $currentMembers);
36 if (empty($membersToInvite))
37 {
38 return $result;
39 }
40
41 foreach ($membersToInvite as $userId)
42 {
43 $isSuccess = CSocNetUserToGroup::SendRequestToJoinGroup(
44 $command->getInitiatorId(),
45 $userId,
46 $command->getGroupId(),
47 '',
48 false,
49 );
50
51 if (!$isSuccess)
52 {
53 $result->addError(new Error('Cannot invite user', $userId));
54 }
55 }
56
57 return $result;
58 }
59
60 protected function addImplementation(MembersCommand $command, Workgroup $group): Result
61 {
62 $currentMembers = $this->getMemberIds($command->getGroupId());
63 $membersByCommand = (new AccessCodeConverter(...$command->getMembers()))
64 ->getUsers()
65 ->getUserIds()
66 ;
67
68 $result = new Result();
69
70 $membersToAdd = array_diff($membersByCommand, $currentMembers);
71 if (empty($membersToAdd))
72 {
73 return $result;
74 }
75
76 foreach ($membersToAdd as $userId)
77 {
78 $user = [
79 'USER_ID' => $userId,
80 'GROUP_ID' => $command->getGroupId(),
82 'DATE_CREATE' => new DateTime(),
83 'DATE_UPDATE' => new DateTime(),
84 'INITIATED_BY_TYPE' => UserToGroupTable::INITIATED_BY_GROUP,
85 'INITIATED_BY_USER_ID' => $command->getInitiatorId(),
86 ];
87
88 $isSuccess = CSocNetUserToGroup::Add($user);
89
90 if (!$isSuccess)
91 {
92 $result->addError(new Error('Cannot add user', $userId));
93 }
94 }
95
96 return $result;
97 }
98
99 protected function deleteImplementation(MembersCommand $command, Workgroup $group): Result
100 {
101 $result = new Result();
102
103 $membersByCommand = (new AccessCodeConverter(...$command->getMembers()))
104 ->getUsers()
105 ->getUserIds()
106 ;
107
108 if (empty($membersByCommand))
109 {
110 return $result;
111 }
112
113 $relations = UserToGroupTable::query()
114 ->setSelect(['ID'])
115 ->where('GROUP_ID', $command->getGroupId())
116 ->whereIn('USER_ID', $membersByCommand)
117 ->exec()
118 ->fetchAll()
119 ;
120
121 $relations = array_column($relations, 'ID');
122
123 foreach ($relations as $relationId)
124 {
125 $isSuccess = CSocNetUserToGroup::Delete($relationId);
126
127 if (!$isSuccess)
128 {
129 $result->addError(new Error('Cannot add user'));
130 }
131 }
132
133 return $result;
134 }
135
137 {
138 $result = new Result();
139
140 $commandModeratorsAccessCodes = $command->getMembers();
141 if (empty($commandModeratorsAccessCodes))
142 {
143 return $result;
144 }
145
146 $commandModerators = (new AccessCodeConverter(...$commandModeratorsAccessCodes))
147 ->getUsers()
148 ->getUserIds()
149 ;
150
151 $add = array_diff($commandModerators, $this->getMemberIds($command->getGroupId()));
152 $result = $this->addModeratorMembers($command, $add);
153
154 $update = [];
155 $currentMembers = $this->getMemberIds($command->getGroupId());
156 foreach ($commandModerators as $moderatorId)
157 {
158 $isCurrentMember = in_array($moderatorId, $currentMembers, true);
159 $isAlreadyAdd = in_array($moderatorId, $add, true);
160
161 if ($isCurrentMember && !$isAlreadyAdd)
162 {
163 $update[] = $moderatorId;
164 }
165 }
166
167 if (empty($update))
168 {
169 return $result;
170 }
171
172 $result->merge($this->increaseMembersRole($command, $update));
173
174 return $result;
175 }
176
177 private function addModeratorMembers(MembersCommand $command, array $memberIds): HandlerResult
178 {
179 return $this->addMembers(
180 $command->getGroupId(),
181 $command->getInitiatorId(),
184 ...$memberIds,
185 );
186 }
187
188 private function increaseMembersRole(MembersCommand $command, array $memberIds): HandlerResult
189 {
190 return $this->updateMembersRole(
191 $command->getGroupId(),
192 $command->getInitiatorId(),
194 ...$memberIds,
195 );
196 }
197
198 protected function deleteModeratorsImplementation(MembersCommand $command, Workgroup $group): Result
199 {
200 $result = new Result();
201
202 $commandModeratorsAccessCodes = $command->getMembers();
203 if (empty($commandModeratorsAccessCodes))
204 {
205 return $result;
206 }
207
208 $currentModerators = $this->getMemberIds($command->getGroupId(), UserToGroupTable::ROLE_MODERATOR);
209 $commandModerators = (new AccessCodeConverter(...$commandModeratorsAccessCodes))
210 ->getUsers()
211 ->getUserIds()
212 ;
213
214 $delete = array_intersect($currentModerators, $commandModerators);
215
216 if (!empty($delete))
217 {
218 $result = $this->decreaseMembersRole($command, $delete);
219 }
220
221 return $result;
222 }
223
224 protected function getRegistry(): GroupRegistry
225 {
226 return GroupRegistry::getInstance();
227 }
228
229 private function decreaseMembersRole(MembersCommand $command, array $memberIds): HandlerResult
230 {
231 return $this->updateMembersRole(
232 $command->getGroupId(),
233 $command->getInitiatorId(),
235 ...$memberIds,
236 );
237 }
238}
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
Определения check_mail.php:18
Определения error.php:15
inviteImplementation(MembersCommand $command, Workgroup $group)
Определения GroupMemberService.php:25
addModeratorsImplementation(MembersCommand $command, Workgroup $group)
Определения GroupMemberService.php:136
addImplementation(MembersCommand $command, Workgroup $group)
Определения GroupMemberService.php:60
deleteImplementation(MembersCommand $command, Workgroup $group)
Определения GroupMemberService.php:99
deleteModeratorsImplementation(MembersCommand $command, Workgroup $group)
Определения GroupMemberService.php:198
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
$user
Определения mysql_to_pgsql.php:33