ctag for addressbook, sogo connector seem to require it, thought it should be optional, anyway ctag makes sense

This commit is contained in:
Ralf Becker 2010-01-05 23:25:17 +00:00
parent d82ca7378b
commit d53f0c91bf
2 changed files with 30 additions and 2 deletions

View File

@ -22,7 +22,7 @@ class addressbook_groupdav extends groupdav_handler
/** /**
* bo class of the application * bo class of the application
* *
* @var addressbook_vcal * @var addressbook_bo
*/ */
var $bo; var $bo;
@ -307,6 +307,24 @@ class addressbook_groupdav extends groupdav_handler
return true; return true;
} }
/**
* Query ctag for addressbook
*
* @return string
*/
public function getctag($path,$user)
{
$filter = array();
// show addressbook of a single user?
if ($user && $path != '/addressbook/') $filter['contact_owner'] = $user;
// should we hide the accounts addressbook
if ($GLOBALS['egw_info']['user']['preferences']['addressbook']['hide_accounts']) $filter['account_id'] = null;
$result = $this->bo->search(array(),'MAX(contact_modified) AS contact_modified','','','','','',$filter);
return date('Y-m-d H:i:s',$result[0]['modified']);
}
/** /**
* Get the handler and set the supported fields * Get the handler and set the supported fields
* *

View File

@ -48,6 +48,10 @@ class groupdav extends HTTP_WebDAV_Server
* CardDAV namespace * CardDAV namespace
*/ */
const CARDDAV = 'urn:ietf:params:xml:ns:carddav'; const CARDDAV = 'urn:ietf:params:xml:ns:carddav';
/**
* Calendarserver namespace (eg. for ctag)
*/
const CALENDARSERVER = 'http://calendarserver.org/ns/';
/** /**
* Realm and powered by string * Realm and powered by string
*/ */
@ -229,7 +233,7 @@ class groupdav extends HTTP_WebDAV_Server
{ {
if ($method != 'REPORT' && !$id) // no self URL for REPORT requests (only PROPFIND) or propfinds on an id if ($method != 'REPORT' && !$id) // no self URL for REPORT requests (only PROPFIND) or propfinds on an id
{ {
$files['files'][] = array( $files['files'][0] = array(
'path' => '/'.$app.'/', 'path' => '/'.$app.'/',
// KAddressbook doubles the folder, if the self URL contains the GroupDAV/CalDAV resourcetypes // KAddressbook doubles the folder, if the self URL contains the GroupDAV/CalDAV resourcetypes
'props' => $this->_properties($app,$app=='addressbook'&&strpos($_SERVER['HTTP_USER_AGENT'],'KHTML') !== false), 'props' => $this->_properties($app,$app=='addressbook'&&strpos($_SERVER['HTTP_USER_AGENT'],'KHTML') !== false),
@ -237,6 +241,12 @@ class groupdav extends HTTP_WebDAV_Server
} }
if (!$options['depth'] && !$id) if (!$options['depth'] && !$id)
{ {
// add ctag if handler implements it (only for depth 0)
if (method_exists($handler,'getctag'))
{
$files['files'][0]['props'][] = HTTP_WebDAV_Server::mkprop(
groupdav::CALENDARSERVER,'getctag',$handler->getctag($options['path'],$user));
}
return true; // depth 0 --> show only the self url return true; // depth 0 --> show only the self url
} }
return $handler->propfind($options['path'],$options,$files,$user,$id); return $handler->propfind($options['path'],$options,$files,$user,$id);