• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/ical/icsbuilder.php
  • Класс: BitrixCalendarICalIcsBuilder
  • Вызов: IcsBuilder::buildBody
private function buildBody()
{
	// Build ICS properties - add header
	$ics_props = [
		'BEGIN:VCALENDAR',
		'PRODID:'.self::PRODID,
		'VERSION:2.0',
		'CALSCALE:GREGORIAN',
		'METHOD:'.self::$METHOD,
		'BEGIN:VEVENT'
	];

	$props = [];

	// Add organizer field
	if (isset($this->organizer['email']))
	{
		$props[self::formatOrganizerKey($this->organizer)] = self::formatEmailValue($this->organizer['email']);
	}
	else if (isset($this->organizer['phone']))
	{
		$props[self::formatOrganizerKey($this->organizer)] = self::formatPhoneValue($this->organizer['phone']);
	}

	// Add attendees
	if (is_array($this->attendees))
	{
		foreach($this->attendees as $k => $attendee)
		{
			$props[self::formatAttendeeKey($attendee)] = self::formatEmailValue($attendee['email']);
		}
	}

	// Build ICS properties - add header
	foreach($this->properties as $k => $v)
	{
		if ($k === 'dtstamp')
		{
			$props['DTSTAMP'] = self::formatDateTimeValue($v);
			continue;
		}
		if ($k === 'url' )
		{
			$props['URL;VALUE=URI'] = $v;
		}
		else if ($k === 'dtstart' || $k === 'dtend')
		{
			if ($this->fullDayMode)
			{
				$props[mb_strtoupper($k).'DTSTART;VALUE=DATE'] = self::formatDateValue($v);
			}
			else
			{
				$tzid = ($k === 'dtstart') ? $this->timezoneFrom : $this->timezoneTo;
				$props[mb_strtoupper($k).';TZID='.$tzid] = self::formatDateTimeValue($v);
			}
		}
		else
		{
			$props[mb_strtoupper($k)] = $v;
		}
	}

	// Append properties
	foreach ($props as $k => $v)
	{
		if ($k !== 'ALARM')
		{
			$ics_props[] = "$k:$v";
		}
		else
		{
			$ics_props[] = 'BEGIN:VALARM';
			$ics_props[] = 'TRIGGER:-PT' . $props['ALARM'];
			$ics_props[] = 'ACTION:DISPLAY';
			$ics_props[] = 'END:VALARM';
		}
	}

	// Build ICS properties - add footer
	$ics_props[] = 'END:VEVENT';
	$ics_props[] = 'END:VCALENDAR';

	return $ics_props;
}