1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
ExcludeMemberHandler.php
См. документацию.
1<?php
2
3declare(strict_types=1);
4
5namespace Bitrix\Socialnetwork\Control\Handler\Update;
6
7use Bitrix\Main\AccessDeniedException;
8use Bitrix\Main\ArgumentException;
9use Bitrix\Main\Error;
10use Bitrix\Main\LoaderException;
11use Bitrix\Main\ObjectPropertyException;
12use Bitrix\Main\Result;
13use Bitrix\Main\SystemException;
14use Bitrix\Socialnetwork\Control\Command\UpdateCommand;
15use Bitrix\Socialnetwork\Control\Handler\HandlerResult;
16use Bitrix\Socialnetwork\Integration\HumanResources\AccessCodeConverter;
17use Bitrix\Socialnetwork\Item\Workgroup;
18
20{
28 public function update(UpdateCommand $command, Workgroup $entityBefore, Workgroup $entityAfter): HandlerResult
29 {
30 $handlerResult = new HandlerResult();
31 if ($command->getAddMembers() === null)
32 {
33 return $handlerResult;
34 }
35
36 $currentMembers = $entityBefore->getUserMemberIds();
37 $currentMembersByDepartments = $this->getDepartmentsMemberList($entityBefore);
38 $commandUserList = (new AccessCodeConverter(...$command->getAddMembers()))->getUserIds();
39
40 $membersToExclude = $this->getMembersToExclude($currentMembers, $currentMembersByDepartments, $commandUserList);
41 if (empty($membersToExclude))
42 {
43 return $handlerResult;
44 }
45
46 foreach ($membersToExclude as $memberId)
47 {
48 $excludeResult = $this->excludeMember($entityBefore->getId(), $memberId);
49 $handlerResult->merge($excludeResult);
50 }
51
52 $handlerResult->setGroupChanged();
53
54 return $handlerResult;
55 }
56
57 private function getMembersToExclude(
58 array $currentMembers,
59 array $currentMembersByDepartment,
60 array $commandUsers,
61 ): array
62 {
63 $membersToExclude = [];
64 foreach ($currentMembers as $member)
65 {
66 $isCommandUser = in_array($member, $commandUsers, true);
67 $isGroupMemberByDepartment = in_array($member, $currentMembersByDepartment, true);
68
69 //When remove a department from group members, only synchronization with it is deleted - members remain
70 if ($isCommandUser || $isGroupMemberByDepartment)
71 {
72 continue;
73 }
74
75 $membersToExclude[] = $member;
76 }
77
78 return $membersToExclude;
79 }
80
88 private function getDepartmentsMemberList(Workgroup $entity): array
89 {
90 $departmentIds = $entity->getSynchronizedDepartmentIds();
91 $departmentAccessCodes = array_map(
92 static fn(int $departmentId): string => "DR${departmentId}",
93 $departmentIds
94 );
95
96 return (new AccessCodeConverter(...$departmentAccessCodes))->getUserIds();
97 }
98
99 private function excludeMember(int $entityId, int $memberId): Result
100 {
101 $result = new Result();
102
103 try
104 {
105 \Bitrix\Socialnetwork\Helper\Workgroup::exclude([
106 'groupId' => $entityId,
107 'userId' => $memberId,
108 ]);
109 }
110 catch (AccessDeniedException $e)
111 {
112 $result->addError(new Error("Deletion member with id $memberId was failed"));
113 }
114
115 return $result;
116 }
117}
update(UpdateCommand $command, Workgroup $entityBefore, Workgroup $entityAfter)
Определения ExcludeMemberHandler.php:28
</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
$entity
$entityId
Определения payment.php:4