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; $caldav->DoHEADRequest($args->url . $href); if (preg_match('{^Etag:\\s+"([^"]*)"\\s*$}im', $caldav->httpResponseHeaders, $matches)) { $new_etag = $matches[1]; } printf("\nHEAD:\n%s\nResponse:\n%s\n", $caldav->GetHttpRequest(), $caldav->GetResponseHeaders()); } if (!isset($new_etag) || $new_etag == '') { printf("Unable to retrieve ETag for new event on remote server. Forcing bad ctag."); $force_ctag = 'Naughty server!'; } } $newcache->server_etags[$href] = $new_etag; } $calendar = $caldav->GetCalendarDetails(); if (isset($force_ctag)) { $newcache->server_ctag = $force_ctag;