- Модуль: dav
- Путь к файлу: ~/bitrix/modules/dav/classes/general/calendarhandler.php
- Класс: CDavCalendarHandler
- Вызов: CDavCalendarHandler::ConvertICalToArray
private function ConvertICalToArray($event, $calendar)
{
static $arWeekDayMap = array("SU" => 6, "MO" => 0, "TU" => 1, "WE" => 2, "TH" => 3, "FR" => 4, "SA" => 5);
$request = $this->groupdav->GetRequest();
$arFields = array(
"NAME" => $event->GetPropertyValue("SUMMARY"),
"PROPERTY_LOCATION" => $event->GetPropertyValue("LOCATION"),
"DETAIL_TEXT" => $event->GetPropertyValue("DESCRIPTION"),
"DETAIL_TEXT_TYPE" => 'html',
"ACTIVE_FROM" => CDavICalendarTimeZone::GetFormattedServerDateTime(
$event->GetPropertyValue("DTSTART"),
$event->GetPropertyParameter("DTSTART", "TZID"),
$calendar
),
"ACTIVE_TO" => CDavICalendarTimeZone::GetFormattedServerDateTime(
$event->GetPropertyValue("DTEND"),
$event->GetPropertyParameter("DTSTART", "TZID"),
$calendar
),
"MODIFIED_BY" => $request->GetPrincipal()->Id(),
"XML_ID" => $event->GetPropertyValue("UID"),
"DATE_CREATE" => CDavICalendarTimeZone::GetFormattedServerDateTime($event->GetPropertyValue("CREATED")),
"PROPERTY_CATEGORY" => $event->GetPropertyValue("CATEGORIES"),
);
if ($priority = $event->GetPropertyValue("PRIORITY"))
{
if ($priority <= 3)
$arFields["PROPERTY_IMPORTANCE"] = "high";
elseif ($priority > 3 && $priority <= 6)
$arFields["PROPERTY_IMPORTANCE"] = "normal";
else
$arFields["PROPERTY_IMPORTANCE"] = "low";
}
else
{
$arFields["PROPERTY_IMPORTANCE"] = "normal";
}
if ($transp = $event->GetPropertyValue("TRANSP"))
{
if ($transp == 'TRANSPARENT')
$arFields["PROPERTY_ACCESSIBILITY"] = "free";
else
$arFields["PROPERTY_ACCESSIBILITY"] = "busy";
}
else
{
$arFields["PROPERTY_ACCESSIBILITY"] = "busy";
}
$arVAlarm = $event->GetComponents("VALARM");
if (count($arVAlarm) > 0 && $event->GetPropertyValue("X-MOZ-LASTACK") == null)
{
$trigger = $arVAlarm[0]->GetPropertyValue("TRIGGER");
if (preg_match('/^-PT([0-9]+)([HMD])$/i', $trigger, $arMatches))
{
$arPeriodMapTmp = array("M" => "min", "H" => "hour", "D" => "day");
$arFields["PROPERTY_REMIND_SETTINGS"] = $arMatches[1]."_".$arPeriodMapTmp[$arMatches[2]];
}
}
if ($rrule = $event->GetPropertyValueParsed("RRULE"))
{
// RRULE:FREQ=WEEKLY;COUNT=5;INTERVAL=2;BYDAY=TU,SA
$arFields["PROPERTY_PERIOD_TYPE"] = $rrule["FREQ"];
$arFields["PROPERTY_PERIOD_COUNT"] = isset($rrule["INTERVAL"]) ? $rrule["INTERVAL"] : 1;
if ($arFields["PROPERTY_PERIOD_TYPE"] == "WEEKLY")
{
if (isset($rrule["BYDAY"]))
{
$ar = explode(",", $rrule["BYDAY"]);
$ar1 = array();
foreach ($ar as $v)
$ar1[] = $arWeekDayMap[mb_strtoupper($v)];
$arFields["PROPERTY_PERIOD_ADDITIONAL"] = implode(",", $ar1);
}
else
{
$arFields["PROPERTY_PERIOD_ADDITIONAL"] = date("w", MakeTimeStamp($arFields["ACTIVE_FROM"])) - 1;
if ($arFields["PROPERTY_PERIOD_ADDITIONAL"] < 0)
$arFields["PROPERTY_PERIOD_ADDITIONAL"] = 6;
}
}
$arFields["PROPERTY_EVENT_LENGTH"] = MakeTimeStamp($arFields["ACTIVE_TO"]) - MakeTimeStamp($arFields["ACTIVE_FROM"]);
if (isset($rrule["UNTIL"]))
{
$arFields["ACTIVE_TO"] = CDavICalendarTimeZone::GetFormattedServerDateTime($rrule["UNTIL"]);
}
elseif (isset($rrule["COUNT"]))
{
$eventTime = $this->GetPeriodicEventTime(
MakeTimeStamp($arFields["ACTIVE_TO"]),
array(
"freq" => $arFields["PROPERTY_PERIOD_TYPE"],
"interval" => $arFields["PROPERTY_PERIOD_COUNT"],
"byday" => $arFields["PROPERTY_PERIOD_ADDITIONAL"]
),
$rrule["COUNT"]
);
$arFields["ACTIVE_TO"] = date($GLOBALS["DB"]->DateFormatToPHP(FORMAT_DATETIME), $eventTime);
}
}
return $arFields;
}