コード例 #1
0
function simpleCalDAVconnect($url, $user, $pass)
{
    // Check for missing arguments
    if (!(isset($url) && isset($user) && isset($pass))) {
        return array(1, 'Missing arguments');
    }
    //  Connect to CalDAV-Server and log in
    $client = new CalDAVClient($url, $user, $pass);
    // Check for errors
    if (!$client->CheckValidCalDAV()) {
        if ($client->GetHttpResultCode() == '401') {
            return array(2, 'Login failed', $client->GetHttpRequest(), $client->GetBody(), $client->GetResponseHeaders(), $client->GetXmlResponse());
        } elseif ($client->GetHttpResultCode() == '') {
            return array(3, 'Can\'t reach server', $client->GetHttpRequest(), $client->GetBody(), $client->GetResponseHeaders(), $client->GetXmlResponse());
        } else {
            return array(4, 'Recieved unknown HTTP status while checking the connection after establishing it', $client->GetHttpRequest(), $client->GetBody(), $client->GetResponseHeaders(), $client->GetXmlResponse());
        }
    }
    // set url to our calendar (CalDAV-protocol supports multiple calendars)
    $client->SetCalendar($url);
    // Is valid calendar?
    if (count($client->GetCalendarDetailsByURL($url)) == 0) {
        return array(5, 'Can\'t find the calendar on the CalDAV-server', $client->GetHttpRequest(), $client->GetBody(), $client->GetResponseHeaders(), $client->GetXmlResponse());
    }
    return array(0, $client);
}
コード例 #2
0
        $newcache->local_etags[$fname] = md5($event);
    }
    $qry = new AwlQuery('SELECT collection_id, dav_displayname AS displayname, dav_etag AS getctag FROM collection WHERE dav_name = :collection_dav_name', array(':collection_dav_name' => $args->local_collection_path));
    if ($qry->Exec('sync-pull', __LINE__, __FILE__) && $qry->rows() > 0) {
        $local_calendar = $qry->Fetch();
        if (isset($local_calendar->getctag)) {
            $newcache->local_ctag = $local_calendar->getctag;
        }
    }
}
if ($sync_out) {
    printf("Sync out\n");
    // Delete any remote events which have been removed from the local server
    foreach ($server_delete_urls as $href => $etag) {
        $caldav->DoDELETERequest($args->url . $href, $etag);
        printf("\nDELETE Response:\n%s\n", $caldav->GetResponseHeaders());
        unset($newcache->server_etags[$fname]);
    }
    // Push locally updated events to the remote server
    foreach ($push_urls as $href => $etag) {
        $new_etag = $caldav->DoPUTRequest($args->url . $href, $push_events[$href], $etag);
        printf("\nPUT:\n%s\nResponse:\n%s\n", $caldav->GetHttpRequest(), $caldav->GetResponseHeaders());
        if (!isset($new_etag) || $new_etag == '') {
            if (preg_match('{^Location:\\s+.*/([^/]+)$}im', $caldav->GetResponseHeaders(), $matches)) {
                /** How annoying.  It seems the other server renamed the event on PUT so we move the local copy to match their name */
                $new_href = preg_replace('{\\r?\\n.*$}s', '', $matches[1]);
                $qry = new AwlQuery('UPDATE caldav_data SET dav_name = :new_dav_name WHERE dav_name = :old_dav_name', array(':new_dav_name' => $args->local_collection_path . $new_href, ':old_dav_name' => $args->local_collection_path . $href));
                $qry->Exec('sync_pull', __LINE__, __FILE__);
                $new_cache->local_etags[$new_href] = $new_cache->local_etags[$href];
                unset($new_cache->local_etags[$href]);
                $href = $new_href;