• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/classes/general/event_calendar.php
  • Класс: CEventCalendar
  • Вызов: CEventCalendar::FormatICal
function FormatICal($arCal, $arItems)
{
	$res = 'BEGIN:VCALENDAR
PRODID:-//Bitrix//Bitrix Calendar//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:'.$this->_ICalPaste($arCal['NAME']).'
X-WR-CALDESC:'.$this->_ICalPaste($arCal['DESCRIPTION'])."n";

for ($i = 0, $l = count($arItems); $i < $l; $i++)
{
	$event = $arItems[$i];
	$fts = MakeTimeStamp($event['DATE_FROM'], getTSFormat());
	$tts = MakeTimeStamp($event['DATE_TO'], getTSFormat());

	if (date("H-i-s", $fts) == '00-00-00')
		$dtStart = date("Ymd", $fts);
	else
		$dtStart = date("YmdTHis", $fts);
		//$dtStart = date("YmdTHisZ", $fts - date("Z", $fts));

	if (date("H-i-s", $tts) == '00-00-00')
		$dtEnd = date("Ymd", mktime(0, 0, 0, date("m", $tts), date("d", $tts) + 1, date("Y", $tts)));
	else
		$dtEnd = date("YmdTHis", $tts);
		//$dtEnd = date("YmdTHisZ", $tts - date("Z", $tts));

	$dtStamp = str_replace('T000000Z', '', date("YmdTHis", MakeTimeStamp($event['TIMESTAMP_X'], getTSFormat())));
	$uid = md5(uniqid(rand(), true).$event['ID']).'@bitrix';
	$period = '';
	$per = $event['PERIOD'];
	if($per)
	{
		$period = 'RRULE:FREQ='.$per['TYPE'].';';
		$period .= 'INTERVAL='.$per['COUNT'].';';
		if ($per['TYPE'] == 'WEEKLY')
		{
			$arDays = explode(',', $per['DAYS']);
			$arDayNames = Array('MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU');
			if (is_array($arDays) && count($arDays) > 0)
			{
				$period .= 'BYDAY=';
				for ($j = 0; $j < count($arDays); $j++)
					$period .= ($j == 0 ? '' : ',').$arDayNames[$arDays[$j]];
				$period .= ';';
			}
		}
		$tts_ = mktime(date("H", $fts), date("i", $fts), date("s", $fts) + $per['LENGTH'], date("m", $fts), date("d", $fts), date("Y", $fts));
		if (date("H-i-s", $tts_) == '00-00-00')
			$dtEnd_ = date("Ymd", mktime(0, 0, 0, date("m", $tts_), date("d", $tts_) + 1, date("Y", $tts_)));
		else
			$dtEnd_ = date("YmdTHis", $tts_);
		if (date("Ymd", $tts) != '20380101')
			$period .= 'UNTIL='.$dtEnd.';';
		$period .= 'WKST=MO';
		$dtEnd = $dtEnd_;
		$period .= "n";
	}
	$res .= 'BEGIN:VEVENT
DTSTART;VALUE=DATE:'.$dtStart.'
DTEND;VALUE=DATE:'.$dtEnd.'
DTSTAMP:'.$dtStamp.'
UID:'.$uid.'
SUMMARY:'.$this->_ICalPaste($event['NAME']).'
DESCRIPTION:'.$this->_ICalPaste($event['DETAIL_TEXT'])."n".$period.
'CLASS:PRIVATE
SEQUENCE:0
STATUS:CONFIRMED
TRANSP:TRANSPARENT
END:VEVENT'."n";
	}
	$res .= 'END:VCALENDAR';
	if (!defined('BX_UTF') || BX_UTF !== true)
		$res = $GLOBALS["APPLICATION"]->ConvertCharset($res, LANG_CHARSET, 'UTF-8');
	return $res;
}