25 $userEmail =
$params[
'emailTo'];
26 $organizerEmail =
$event[
'ORGANIZER_MAIL'][
'EMAIL'];
29 $attendees = static::handleAttendeesFromRequest([
30 'attendees' =>
$event[
'ATTENDEES_MAIL'],
33 'userEmail' => $userEmail,
34 'organizerEmail' => $organizerEmail
37 $parentId = \CCalendar::SaveEvent([
38 'arFields' => static::updateParentEvent(
$event),
41 \CCalendar::SaveEvent([
42 'arFields' => static::updateChildEvent(
$event, $parentId),
47 'icalMethod' =>
'reply',
49 'userIndex' => $attendees,
50 'receiver' =>
$event[
'ORGANIZER_MAIL'],
51 'sender' => $attendees[
$event[
'OWNER_ID']],
52 ])->replyInvitation()->getStatus();
58 $emailUser =
$params[
'event'][
'ATTENDEES_MAIL'][0];
59 $userId = ICalUtil::getUserIdByEmail($emailUser);
60 $localEvent = ICalUtil::getEventByUId(
$userId,
$uid);
62 if (!empty($localEvent))
66 \CCalendarEvent::SetMeetingStatusEx([
67 'attendeeId' => $localEvent[
'OWNER_ID'],
68 'eventId' => $localEvent[
'ID'],
69 'status' => Dictionary::LOCAL_ATTENDEES_STATUS[
$status],
70 'personalNotification' => $localEvent[
'MEETING_HOST'],
79 $attachments =
$event->getParameter(
'attachments');
81 if (is_array($attachments))
83 foreach($attachments as
$key => $file)
87 $fileObject = new \Bitrix\Main\IO\File($file[
'tmp_name'],
$event->getParameter(
'site_id'));
98 if (
$method === Dictionary::METHODS[
'reply'])
100 static::handleReply([
'event' => $icalEvent]);
112 $originalValue = ICalUtil::getEventByUId(
$userId,
$event[
'DAV_XML_ID']);
113 if (!empty($originalValue))
116 'sendNotification' =>
true,
117 'checkPermissions' =>
false,
120 \CCalendar::DeleteEvent($originalValue[
'ID'],
true, $deleteParams);
130 $event = $attachmentManager->prepareEventAttachment()->getEvent();
131 $method = $attachmentManager->getMethod();
138 $params[
'event'][
'SKIP_TIME'] =
$params[
'event'][
'DT_SKIP_TIME'] ===
'Y';
140 $attendees = static::handleAttendeesByUser(
141 ICalUtil::getUsersByCode(
$params[
'event'][
'ATTENDEES_CODES']),
147 ->setSelect([
'ID' =>
'MAILBOX.ID',
'EMAIL' =>
'MAILBOX.EMAIL',
'ENTITY_TYPE',
'ENTITY_ID'])
148 ->registerRuntimeField(
153 Join::on(
'this.MAILBOX_ID',
'ref.ID'),
154 [
'join_type' => Join::TYPE_INNER]
158 ->where(
'ENTITY_ID',
$params[
'event'][
'ID'])
161 $mailbox = $mailBoxQuery->fetch();
167 $params[
'event'][
'ORGANIZER_MAIL'] = $attendees[
$params[
'event'][
'MEETING_HOST']];
168 $params[
'event'][
'ORGANIZER_MAIL'][
'MAILTO'] =
$params[
'event'][
'MEETING'][
'MAILTO'];
169 $params[
'event'][
'ATTENDEES_MAIL'] = $attendees[
$params[
'event'][
'OWNER_ID']];
170 $params[
'event'][
'ICAL_ORGANIZER'] = (Helper::getAttendee(
$params[
'event'][
'MEETING_HOST'],
$params[
'event'][
'PARENT_ID'],
false))
178 ? IncomingInvitationRequestHandler::MEETING_STATUS_ACCEPTED_CODE
179 : IncomingInvitationRequestHandler::MEETING_STATUS_DECLINED_CODE
181 $attendee = Helper::getAttendee(
$params[
'event'][
'OWNER_ID'],
$params[
'event'][
'PARENT_ID'],
false);
182 $status = Dictionary::OUT_ATTENDEES_STATUS[$answer];
183 $attendee?->setStatus(
$status);
184 $attendee?->setEmail($mailbox[
'EMAIL'])->setMailto($mailbox[
'EMAIL']);
185 $attendee?->setName($mailbox[
'EMAIL'])->setLastName($mailbox[
'EMAIL']);
189 'icalMethod' =>
'reply',
190 'arFields' =>
$params[
'event'],
191 'userIndex' => $attendeesCollection,
192 'receiver' =>
$params[
'event'][
'ORGANIZER_MAIL'],
193 'sender' => $attendees[
$params[
'event'][
'OWNER_ID']],
195 ])->replyInvitation()->getStatus();
200 if (isset(
$event[
'DATE_FROM']))
203 ? static::getDateString(
$event[
'DATE_FROM'])
204 : static::getDateTimeString(
$event[
'DATE_FROM']);
205 $event[
'DATE_FROM'] = static::getDateTimeString(
$event[
'DATE_FROM']);
208 if (isset(
$event[
'DATE_TO']))
210 $event[
'DATE_TO'] = static::getDateTimeString(
$event[
'DATE_TO']);
213 if (isset(
$event[
'DATE_CREATE']))
215 $event[
'DATE_CREATE'] = static::getDateTimeString(
$event[
'DATE_CREATE']);
218 if (isset(
$event[
'TIMESTAMP_X']))
220 $event[
'TIMESTAMP_X'] = static::getDateTimeString(
$event[
'TIMESTAMP_X']);
223 if (isset(
$event[
'DT_STAMP']))
225 $event[
'DT_STAMP'] = static::getDateTimeString(
$event[
'DT_STAMP']);
228 if (isset(
$event[
'TZ_FROM']))
230 $event[
'TZ_FROM'] = static::getTimezoneNameString(
$event[
'TZ_FROM']);
233 if (isset(
$event[
'TZ_TO']))
235 $event[
'TZ_TO'] = static::getTimezoneNameString(
$event[
'TZ_TO']);
239 $event[
'MEETING_HOST'] = ICalUtil::getUserIdByEmail(
$event[
'ORGANIZER_MAIL']);
241 $event[
'SECTION_CAL_TYPE'] =
'user';
242 $event[
'ATTENDEES_CODES'] = [
'U'.$event[
'OWNER_ID'],
'U'.$event[
'MEETING_HOST']];
243 $event[
'MEETING_STATUS'] = $answer ===
'confirmed' ?
'Y' :
'N';
245 if (empty(
$event[
'ACCESSIBILITY']))
247 $event[
'ACCESSIBILITY'] =
'free';
250 if (empty(
$event[
'IMPORTANCE']))
252 $event[
'IMPORTANCE'] =
'normal';
255 if (empty(
$event[
'STATUS']))
257 $event[
'STATUS'] = $answer ===
'ACCEPT' ?
'CONFIRMED' :
'CANCELLED';
260 if (empty(
$event[
'REMIND']))
268 if (empty(
$event[
'MEETING']))
271 'HOST_NAME' =>
$event[
'ORGANIZER_MAIL'][
'name'],
275 'MEETING_CREATOR' =>
$event[
'MEETING_HOST'],
276 'EXTERNAL_TYPE' =>
'mail',
280 $originalValue = ICalUtil::getEventByUId(
$userId,
$event[
'DAV_XML_ID']);
281 $event[
'ID'] = $originalValue ? $originalValue[
'ID'] : 0;
286 private static function getDateTimeString(Date $date): string
291 private static function getDateString(Date $date): string
293 return $date->format(
'd.m.Y');
296 private static function getTimezoneNameString(\DateTimeZone $tz)
298 return $tz->getName();
305 foreach (
$params[
'attendees'] as $attendee)
307 if ($attendee[
'EMAIL'] ==
$params[
'userEmail'])
309 $usersInfo = ICalUtil::getIndexUsersById([
$params[
'userId']]);
310 $attendee[
'NAME'] = $usersInfo[
$params[
'userId']][
'NAME'];
311 $attendee[
'LAST_NAME'] = $usersInfo[
$params[
'userId']][
'LAST_NAME'];
312 $attendee[
'STATUS'] =
$params[
'answer'] ===
'confirmed' ?
'accepted' :
'declined';
316 if ($attendee[
'EMAIL'] ==
$params[
'organizerEmail'])
318 $id = ICalUtil::getUserIdByEmail($attendee);
326 private static function handleAttendeesByUser(
array $attendees, $answer,
$userId)
329 foreach ($attendees as $attendee)
331 if ($attendee[
'ID'] ==
$userId)
333 $attendee[
'STATUS'] = $answer ?
'accepted' :
'declined';
336 $result[$attendee[
'ID']] = $attendee;
342 private static function updateChildEvent(
array $event, $parentId)
344 $event[
'PARENT_ID'] = $parentId;
345 $event[
'MEETING'][
'MAILTO'] =
$event[
'ORGANIZER_MAIL'][
'MAILTO'];
346 $event[
'DESCRIPTION'] .=
"\r\n"
347 . Loc::getMessage(
'EC_ORGANIZER_NAME_TITLE') .
': ' . static::getOrganizerString(
$event[
'ORGANIZER_MAIL']) .
"\r\n"
348 . Loc::getMessage(
'EC_ATTENDEES_LIST_TITLE') .
': ' . static::getAttendeesString(
$event[
'ATTENDEES_MAIL']);
349 if (!empty(
$event[
'ATTACHMENT_LINK']))
351 $event[
'DESCRIPTION'] .=
"\r\n"
352 . Loc::getMessage(
'EC_FILES_TITLE') .
': ' . static::getFilesString(
$event[
'ATTACHMENT_LINK']);
357 private static function getAttendeesString($attendees)
360 foreach ($attendees as $attendee)
362 $res[] = $attendee[
'NAME'] .
' ' . $attendee[
'LAST_NAME'] .
' ('. $attendee[
'EMAIL'] .
')';
365 return implode(
', ',
$res);
368 private static function getOrganizerString($organizer)
370 return $organizer[
'NAME'] .
' ' . $organizer[
'LAST_NAME'] .
' ('. $organizer[
'EMAIL'] .
')';
373 private static function updateParentEvent(
array $event)
376 unset(
$event[
'DAV_XML_ID']);
381 private static function getFilesString(
array $attachments)
384 foreach ($attachments as $attachment)
386 $res[] = $attachment[
'filename'] .
' (' . $attachment[
'link'] .
')';
388 return implode(
', ',
$res);