• Модуль: 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();
	}