Как добавить новую запись в календарь с помощью CalDAV?
Я могу получить все мои текущие записи из календаря Thunderbird Lightning в виде массива следующим кодом:
require_once 'class.CalDavClient.php';
$cal = new CalDAVClient(
'###',
'###',
'###'
);
if ( isset($options["PROPFIND"]) ) {
$cal->SetDepth(1);
$folder_xml = $cal->DoXMLRequest(
"PROPFIND",
'<?xml version="1.0" encoding="utf-8" ?>
<propfind xmlns="DAV:"><prop><getcontentlength/><getcontenttype/>
<resourcetype/><getetag/></prop></propfind>'
);
}
$date_from = date('Ymd', mktime(0, 0, 0, date('m')-3, date('d'), date('Y')));
$calendar_events = CalDAVClient::normalize_events($cal->GetEvents($date_from,
"20991212"), $row['calendar_Title']);
print_r($calendar_events);
Но как я могу добавить новое событие? Я искал документацию, но ничего не могу найти по этому поводу.
Для создания нового события вы используете операцию HTTP PUT с сущностью iCalendar, представляющей новое событие.
Это хорошее введение: http://sabre.io/dav/building-a-caldav-client/
Благодаря HNH ссылка Я нашел решение для меня, я создаю тот метод в классе CalDavCliet, который генерирует данные для запроса
public function create_event($title, $desc, $tstart, $tend) {
$event_id = $this->generate_eventID();
$tstamp = gmdate("Ymd\THis\Z");
$xml = "BEGIN:VCALENDAR\n".
"VERSION:2.0\n".
"BEGIN:VEVENT\n".
"DTSTAMP:$tstamp\n".
"DTSTART:$tstart\n".
"DTEND:$tend\n".
"UID:$event_id\n".
"DESCRIPTION:$desc\n".
"LOCATION:Office\n".
"SUMMARY:$title\n".
"END:VEVENT\n".
"END:VCALENDAR";
$etag = $this->DoPUTRequest($this->base_url . $event_id . '.ics', $xml);
return $etag;
}
и теперь я могу использовать этот метод, чтобы добавить новую запись
$etag = $cal->create_event('тест1', 'описание...', '20141220T173000Z', '20141220T180000Z');
if (!empty($etag)) {
echo "Событие успешно добавлено !";
}
Как я понял, нет способа автоматически сгенерировать eID для новой записи, поэтому я написал и использую этот метод для генерации «простого» eID, как это делает клиент Thunderbird
protected function generate_eventID() {
$characters = '0123456789abcdefghijklmnopqrstuvwxyz';
$charactersLength = strlen($characters);
$eventID = '';
for ($i = 0; $i < 8; $i++) {$eventID .= $characters[rand(0, $charactersLength - 1)];}
for ($i = 0; $i < 3; $i++) {
$eventID .= '-';
for ($j = 0; $j < 4; $j++) {$eventID .= $characters[rand(0, $charactersLength - 1)];}
}
$eventID .= '-';
for ($i = 0; $i < 12; $i++) {$eventID .= $characters[rand(0, $charactersLength - 1)];}
return $eventID;
}