25 private function doSkipEventProcessing(?
string $eventId): bool
27 return in_array($eventId, [
'calendar',
'tasks'],
true);
32 $eventId = $this->
event->getData()[
'EVENT_ID'] ??
null;
33 if ($this->doSkipEventProcessing($eventId))
38 switch ($this->event->getType())
40 case EventDictionary::EVENT_SPACE_LIVEFEED_POST_UPD:
41 $this->onLiveFeedPostUpdate();
48 private function onLiveFeedPostUpdate(): void
50 $sonetLogId = (int)($this->event->getData()[
'SONET_LOG_ID'] ??
null);
51 $eventId = $this->
event->getData()[
'EVENT_ID'] ??
null;
52 $logRightsBeforeUpdate = $this->
event->getData()[
'LOG_RIGHTS_BEFORE_UPDATE'] ??
null;
54 $isItPossibleToHaveRemovedUsers = is_array($logRightsBeforeUpdate) && !empty($logRightsBeforeUpdate);
55 if ($sonetLogId <= 0 || !$isItPossibleToHaveRemovedUsers || !is_string($eventId))
62 sort($logRightsAfterUpdate);
63 sort($logRightsBeforeUpdate);
65 if ($logRightsBeforeUpdate === $logRightsAfterUpdate)
72 $this->processRemovedFromRecipientsSpaces(
74 $logRightsBeforeUpdate,
75 $logRightsAfterUpdate,
79 $this->processRemovedFromRecipientsUsers($sonetLogId, $eventId, $logRightsAfterUpdate, $usersBeforeUpdate);
82 private function processRemovedFromRecipientsSpaces(
84 array $logRightsBeforeUpdate,
85 array $logRightsAfterUpdate,
86 array $usersBeforeUpdate,
89 $removedLogRights = array_diff($logRightsBeforeUpdate, $logRightsAfterUpdate);
91 $removedGroupIds = [];
92 foreach ($removedLogRights as $logRight)
94 $groupId = $this->getGroupIdFromLogRight($logRight);
98 $removedGroupIds[] = $groupId;
102 $removedGroupIds = array_unique($removedGroupIds);
104 if (empty($removedGroupIds))
109 foreach ($removedGroupIds as $removedGroupId)
111 $this->service->deleteBySpaceId($removedGroupId, $this->
getTypeId(), $sonetLogId);
116 PushEventDictionary::EVENT_SPACE_RECENT_ACTIVITY_REMOVE_FROM_SPACE,
117 [
'spaceIdsToReload' => $removedGroupIds],
121 private function processRemovedFromRecipientsUsers(
124 array $logRightsAfterUpdate,
125 array $usersBeforeUpdate
130 sort($usersBeforeUpdate);
131 sort($usersAfterUpdate);
133 $lostAccessUsers = array_values(array_diff($usersBeforeUpdate, $usersAfterUpdate));
135 if (empty($lostAccessUsers))
140 \Bitrix\Socialnetwork\Internals\EventService\Service::addEvent(
141 EventDictionary::EVENT_SPACE_LIVEFEED_POST_REMOVE_USERS,
143 'SONET_LOG_ID' => $sonetLogId,
144 'EVENT_ID' => $eventId,
145 'RECEPIENTS' => $lostAccessUsers,