15 use AttendeeCodeTrait;
19 return Loader::includeModule(
'calendar');
24 return Dictionary::ENTITY_TYPE[
'calendar'];
29 switch ($this->event->getType())
31 case EventDictionary::EVENT_SPACE_CALENDAR_EVENT_UPD:
32 $this->onEventUpdate();
39 private function onEventUpdate(): void
41 $data = $this->
event->getData();
42 $eventId = (int)(
$data[
'ID'] ??
null);
49 $attendeesCodesBeforeUpdate = $this->getArrayValueFromEventData(
'ATTENDEES_CODES_BEFORE_UPDATE');
50 $attendeesCodesAfterUpdate = $this->getArrayValueFromEventData(
'ATTENDEES_CODES_AFTER_UPDATE');
51 $attendeesBeforeUpdate = $this->getArrayValueFromEventData(
'ATTENDEES_BEFORE_UPDATE');
52 $attendeesAfterUpdate = $this->getArrayValueFromEventData(
'ATTENDEES_AFTER_UPDATE');
55 !is_array($attendeesCodesBeforeUpdate)
56 || !is_array($attendeesCodesAfterUpdate)
57 || !is_array($attendeesBeforeUpdate)
58 || !is_array($attendeesAfterUpdate)
64 Collection::normalizeArrayValuesByInt($attendeesBeforeUpdate);
65 Collection::normalizeArrayValuesByInt($attendeesAfterUpdate);
67 $this->processRemovedFromAttendeesSpaces(
69 $attendeesCodesBeforeUpdate,
70 $attendeesCodesAfterUpdate,
71 $attendeesBeforeUpdate,
74 $this->processRemovedFromAttendeesUsers($eventId, $attendeesBeforeUpdate, $attendeesAfterUpdate);
77 private function processRemovedFromAttendeesSpaces(
79 array $attendeesCodesBeforeUpdate,
80 array $attendeesCodesAfterUpdate,
81 array $attendeesBeforeUpdate,
89 sort($attendeesCodesBeforeUpdate);
90 sort($attendeesCodesAfterUpdate);
92 if ($attendeesCodesBeforeUpdate === $attendeesCodesAfterUpdate)
97 $removedAttendeesCodes = array_diff($attendeesCodesBeforeUpdate, $attendeesCodesAfterUpdate);
99 $spaceIdsToReload = [];
100 foreach ($removedAttendeesCodes as $attendeeCode)
102 $spaceId = $this->getGroupIdFromAttendeeCode($attendeeCode);
105 $this->service->deleteBySpaceId($spaceId, $this->
getTypeId(), $eventId);
106 $spaceIdsToReload[] = $spaceId;
111 $attendeesBeforeUpdate,
112 PushEventDictionary::EVENT_SPACE_RECENT_ACTIVITY_REMOVE_FROM_SPACE,
113 [
'spaceIdsToReload' => $spaceIdsToReload],
117 private function processRemovedFromAttendeesUsers(
int $eventId,
array $attendeesBeforeUpdate,
array $attendeesAfterUpdate): void
119 if ($attendeesBeforeUpdate === $attendeesAfterUpdate)
124 $lostAccessUsers = array_values(array_diff($attendeesBeforeUpdate, $attendeesAfterUpdate));
126 if (empty($lostAccessUsers))
131 \Bitrix\Socialnetwork\Internals\EventService\Service::addEvent(
132 EventDictionary::EVENT_SPACE_CALENDAR_EVENT_REMOVE_USERS,
135 'RECEPIENTS' => $lostAccessUsers,
140 private function getArrayValueFromEventData(
string $code): ?
array
142 $data = $this->
event->getData();