function simpleCalDAVchange($client, $cal, $etag) { // Check for missing arguments if (!(isset($client) && isset($cal) && isset($etag))) { return array(1, 'Missing arguments'); } // Parse $cal for UID if (!preg_match('#^UID:(.*?)$#m', $cal, $matches)) { return array(2, 'Can\'t find UID in $cal'); } else { $uid = $matches[1]; } // Is there a '/' at the end of the url? if (!preg_match('#^.*?/$#', $client->calendar_url, $matches)) { $url = $client->calendar_url . '/'; } else { $url = $client->calendar_url; } // Are $uid and $etag correct? $result = simpleCalDAVgetByUID($client, $uid); if ($result[0] != 0 || count($result[1]) != 1) { return array(3, 'Wrong unique ID. Can\'t find unique ID on server.', $client->GetHttpRequest(), $client->GetBody(), $client->GetResponseHeaders(), $client->GetXmlResponse()); } elseif ($result[1][0]['etag'] != $etag) { return array(4, 'Wrong entity tag. The entity seems to have changed.', $client->GetHttpRequest(), $client->GetBody(), $client->GetResponseHeaders(), $client->GetXmlResponse()); } // Put it! $newEtag = $client->DoPUTRequest($url . $uid . '.ics', $cal, $etag); // PUT-request successfull? if ($client->GetHttpResultCode() != '204') { if ($client->GetHttpResultCode() == '412') { return array(5, 'You shouldn\'t get here... strange :-/.', $client->GetHttpRequest(), $client->GetBody(), $client->GetResponseHeaders(), $client->GetXmlResponse()); } else { return array(6, 'Recieved unknown HTTP status', $client->GetHttpRequest(), $client->GetBody(), $client->GetResponseHeaders(), $client->GetXmlResponse()); } } return array(0, $newEtag); }
$etagOfFirstEvent = $ret[1]; $ret = simpleCalDAVcreate($client, $secondNewEvent); // Creates $secondNewEvent on the server and returns array(0, 'etag of second event'). $etagOfSecondEvent = $ret[1]; $ret = simpleCalDAVgetByUID($client, 'ExampleUID1'); // Returns array(0, array(array( 'href'=>'something.ics', 'data'=>$firstNewEvent, 'etag'=>'etag of first event'))). $ret = simpleCalDAVgetEventsByTime($client, '20140418T103000Z', '20140419T200000Z'); /* Returns array(0, array( * array( 'href'=>'something.ics', 'data'=>$firstNewEvent, 'etag'=>'etag of first event'), * array( 'href'=>'someOtherThing.ics', 'data'=>$secondNewEvent, 'etag'=>'etag of second event'))). */ $ret = simpleCalDAVchange($client, $changedFirstEvent, $etagOfFirstEvent); // Change the first event on the server from $firstNewEvent to $changedFirstEvent $etagOfFirstEvent = $ret[1]; // and return array(0, 'new etag of first event'). $ret = simpleCalDAVgetByUID($client, 'ExampleUID1'); // Returns array(0, array( 'href'=>'something.ics', 'data'=>$changedFirstEvent, 'etag'=>'new etag of first event')). $ret = simpleCalDAVgetEventsByTime($client, '20140418T103000Z', '20140419T200000Z'); // Returns array(0, array(array( 'href'=>'someOtherThing.ics', 'data'=>$secondNewEvent, 'etag'=>'etag of second event'))). $ret = simpleCalDAVdelete($client, 'ExampleUID2', $etagOfSecondEvent); // Deletes the second event from the server and returns array(0). $ret = simpleCalDAVgetEventsByTime($client, '20140418T103000Z', '20140419T200000Z'); // Returns array(0, array()). } else { echo '<pre>'; echo $ret[1] . '<br><br>'; echo 'Request-Header:<br>' . $ret[2] . '<br><br>'; echo 'Request-Body:<br>' . htmlentities($ret[3]) . '<br><br>'; echo 'Resonse-Header:<br>' . $ret[4] . '<br><br>'; echo 'XML-Response-Body:<br>' . htmlentities($ret[5]); echo '</pre>';