- Модуль: dav
- Путь к файлу: ~/bitrix/modules/dav/classes/general/calendarhandler.php
- Класс: CDavCalendarHandler
- Вызов: CDavCalendarHandler::GetICalContent
private function GetICalContent(array $event, $siteId)
{
$arICalEvent = array(
"TYPE" => "VEVENT",
"CREATED" => date("Ymd\THis\Z", MakeTimeStamp($event["DATE_CREATE"])),
"LAST-MODIFIED" => date("Ymd\THis\Z", MakeTimeStamp($event["TIMESTAMP_X"])),
"DTSTAMP" => date("Ymd\THis\Z", MakeTimeStamp($event["TIMESTAMP_X"])),
"UID" => $event["XML_ID"],
"SUMMARY" => $event["NAME"],
"DTSTART" => array(
"VALUE" => date("Ymd\THis", MakeTimeStamp($event["ACTIVE_FROM"])),
"PARAMETERS" => array("TZID" => CDav::GetTimezoneId($siteId))
),
"DTEND" => array(
"VALUE" => date("Ymd\THis", MakeTimeStamp($event["ACTIVE_TO"])),
"PARAMETERS" => array("TZID" => CDav::GetTimezoneId($siteId))
),
);
if (isset($event["PROPERTY_ACCESSIBILITY"]) && ($event["PROPERTY_ACCESSIBILITY"] == 'free' || $event["PROPERTY_ACCESSIBILITY"] == 'quest'))
$arICalEvent["TRANSP"] = 'TRANSPARENT';
else
$arICalEvent["TRANSP"] = 'OPAQUE';
if (isset($event["PROPERTY_LOCATION"]) && $event["PROPERTY_LOCATION"] <> '')
$arICalEvent["LOCATION"] = $event["PROPERTY_LOCATION"];
if (isset($event["PROPERTY_IMPORTANCE"]))
{
if ($event["PROPERTY_IMPORTANCE"] == "low")
$arICalEvent["PRIORITY"] = 9;
elseif ($event["PROPERTY_IMPORTANCE"] == "high")
$arICalEvent["PRIORITY"] = 1;
else
$arICalEvent["PRIORITY"] = 5;
}
if (isset($event["DETAIL_TEXT"]) && $event["DETAIL_TEXT"] <> '')
$arICalEvent["DESCRIPTION"] = $event["DETAIL_TEXT"];
if (isset($event["PROPERTY_REMIND_SETTINGS"]) && $event["PROPERTY_REMIND_SETTINGS"] <> '')
{
$arPeriodMapTmp = array("min" => "M", "hour" => "H", "day" => "D");
$ar = explode("_", $event["PROPERTY_REMIND_SETTINGS"]);
$arICalEvent["@VALARM"] = array(
"TYPE" => "VALARM",
"ACTION" => "DISPLAY",
"TRIGGER" => array(
"PARAMETERS" => array("VALUE" => "DURATION"),
"VALUE" => "-PT".$ar[0].$arPeriodMapTmp[$ar[1]]
)
);
}
if (isset($event["PROPERTY_PERIOD_TYPE"]) && ($event["PROPERTY_PERIOD_TYPE"] <> '') && (mb_strtoupper($event["PROPERTY_PERIOD_TYPE"]) != "NONE"))
{
$val = "FREQ=".$event["PROPERTY_PERIOD_TYPE"];
if (isset($event["PROPERTY_PERIOD_COUNT"]) && $event["PROPERTY_PERIOD_COUNT"] <> '')
$val .= ";INTERVAL=".$event["PROPERTY_PERIOD_COUNT"];
if ($event["PROPERTY_PERIOD_TYPE"] == "WEEKLY" && $event["PROPERTY_PERIOD_ADDITIONAL"] <> '')
{
static $arWeekDayMap = array(6 => "SU", 0 => "MO", 1 => "TU", 2 => "WE", 3 => "TH", 4 => "FR", 5 => "SA");
$ar = explode(",", $event["PROPERTY_PERIOD_ADDITIONAL"]);
$ar1 = array();
foreach ($ar as $v)
$ar1[] = $arWeekDayMap[$v];
$val .= ";BYDAY=".implode(",", $ar1);
}
$val .= ";UNTIL=".date("Ymd\THis\Z", MakeTimeStamp($event["ACTIVE_TO"]));
$arICalEvent["DTEND"] = array(
"VALUE" => date("Ymd\THis", MakeTimeStamp($event["ACTIVE_FROM"]) + $event["PROPERTY_EVENT_LENGTH"]),
"PARAMETERS" => array("TZID" => CDav::GetTimezoneId($siteId))
);
$arICalEvent["RRULE"] = $val;
}
$cal = new CDavICalendar($arICalEvent, $siteId);
return $cal->Render();
}