- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/lib/sync/google/builders/buildersynceventfromexternaldata.php
- Класс: BitrixCalendarSyncGoogleBuildersBuilderSyncEventFromExternalData
- Вызов: BuilderSyncEventFromExternalData::prepareEvent
public function prepareEvent(): CoreEventEvent
{
$owner = $this->syncSection->getSection()->getOwner();
$event = (new CoreEventEvent)
->setName($this->getName())
->setUid($this->item['iCalUID'])
->setSection($this->syncSection->getSection())
->setOwner($owner)
->setCreator($owner)
->setEventHost($owner)
->setAttendeesCollection($this->getAttendeeCollection($owner->getId()))
->setMeetingDescription($this->getDefaultMeeting($owner->getId()))
->setDescription($this->getDescription())
->setLocation($this->getLocation())
->setColor($this->item['colorId'] ?? null)
;
if (!empty($this->item['start']))
{
if (!empty($this->item['start']['date']))
{
$event->setIsFullDay(true);
$date = new TypeDate($this->item['start']['date'], DateTimeInterface::ATOM);
$event->setStart(new CoreBaseDate($date));
}
elseif (!empty($this->item['start']['dateTime']))
{
$event->setIsFullDay(false);
$timeZone = Util::prepareTimezone($this->item['start']['timeZone'] ?? null);
$date = (new TypeDateTime(
$this->item['start']['dateTime'],
DateTimeInterface::ATOM,
Util::prepareTimezone())
);
$date->setTimeZone($timeZone);
$event->setStart(new CoreBaseDate($date));
$event->setStartTimeZone(new CoreBaseDateTimeZone($timeZone));
}
}
if (!empty($this->item['end']))
{
if (!empty($this->item['end']['date']))
{
$date = new TypeDate($this->item['end']['date'], DateTimeInterface::ATOM);
$event->setEnd((new CoreBaseDate($date))->sub('1 day'));
}
elseif (!empty($this->item['end']['dateTime']))
{
$timeZone = Util::prepareTimezone($this->item['end']['timeZone'] ?? null);
$date = new TypeDateTime(
$this->item['end']['dateTime'],
DateTimeInterface::ATOM,
Util::prepareTimezone()
);
$date->setTimeZone($timeZone);
$event->setEnd(new CoreBaseDate($date));
$event->setEndTimeZone(new CoreBaseDateTimeZone($timeZone));
}
}
if (isset($this->item['transparency']) && ($this->item['transparency'] === 'transparent'))
{
$event->setAccessibility('free');
}
if (isset($this->item['visibility']) && $this->item['visibility'] === 'private')
{
$event->setIsPrivate(true);
}
if (!empty($this->item['reminders']))
{
$event->setRemindCollection($this->getReminders($event->getStart()));
}
$event->setRecurringRule($this->prepareRecurringRule($event->getStart()));
$event->setExcludedDateCollection($this->prepareExcludedDatesCollection());
$event->setOriginalDateFrom($this->prepareOriginalStart());
return $event;
}