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