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;
}