• Модуль: dav
  • Путь к файлу: ~/bitrix/modules/dav/classes/general/calendarhandler.php
  • Класс: CDavCalendarHandler
  • Вызов: CDavCalendarHandler::Put
public function Put($id, $siteId, $account, $arPath)
	{
		$calendarId = $this->GetCalendarId($siteId, $account, $arPath);
		if ($calendarId == null)
			return '404 Not Found';

		CDav::Report("CDavCalendarHandler::Put", "calendarId", $calendarId);

		$request = $this->groupdav->GetRequest();

		$oldEvent = $this->GetEntry('PUT', $id, $calendarId);
		if (!is_null($oldEvent) && !is_array($oldEvent))
			return $oldEvent;

		$charset = "utf-8";
		$arContentParameters = $request->GetContentParameters();

		//CDav::Report("CDavCalendarHandler::Put", "arContentParameters", $arContentParameters);

		if (!empty($arContentParameters['CONTENT_TYPE']))
		{
			$arContentType = explode(';', $arContentParameters['CONTENT_TYPE']);
			if (count($arContentType) > 1)
			{
				array_shift($arContentType);
				foreach ($arContentType as $attribute)
				{
					$attribute = trim($attribute);
					list($key, $value) = explode('=', $attribute);
					if (mb_strtolower($key) == 'charset')
						$charset = mb_strtolower($value);
				}
			}
		}

		$content = $request->GetRequestBody();
		$content = htmlspecialcharsback($content);

		//CDav::Report("CDavCalendarHandler::Put", "content", $content);

		if (is_array($oldEvent))
		{
			$eventId = $oldEvent['ID'];
		}
		else
		{
			// Search the same event without ID

			$eventId = 0;
		}

		$cs = CDav::GetCharset($siteId);
		if (is_null($cs) || empty($cs))
			$cs = "utf-8";

		$content = $GLOBALS["APPLICATION"]->ConvertCharset($content, $charset, $cs);

		CDav::Report("CDavCalendarHandler::Put", "content (converted ".$charset." -> ".$cs.")", $content);

		$cal = new CDavICalendar($content, $siteId);

		$arEvents = $cal->GetComponents('VTIMEZONE', false);
		if (count($arEvents) <= 0)
			return '404 Not Found';

		$arFields = $this->ConvertICalToArray($arEvents[0], $cal);

		if ($eventId > 0)
			$arFields['ID'] = $eventId;
		else
			$arFields['CREATED_BY'] = $arFields['MODIFIED_BY'];

		CDav::Report("CDavCalendarHandler::Put", "arFields", $arFields);

		$eventId = CEventCalendar::ModifyEvent($calendarId, $arFields);
		if (!is_int($eventId))
			return false;

		//header('ETag: '.$this->GetETag($calendarId, $xmlId));

		//$path = preg_replace('|(.*)/[^/]*|', '1/', $request->GetPath());
		//header('Location: '.$request->GetBaseUri().$path.$this->GetPath($xmlId));

		return "201 Created";
	}