• Модуль: 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;
}