supported-report-set as required for CardDAV and Sogo connector

This commit is contained in:
Ralf Becker 2010-01-07 02:07:33 +00:00
parent 291890c5cc
commit 46f3d19e1c
3 changed files with 38 additions and 5 deletions

View File

@ -325,6 +325,22 @@ class addressbook_groupdav extends groupdav_handler
return '"'.$result[0]['modified'].'"';
}
/**
* Add extra properties for addressbook collections
*
* @param array $props=array() regular props by the groupdav handler
* @return array
*/
static function extra_properties(array $props=array())
{
// supported reports (required property for CardDAV)
$props[] = HTTP_WebDAV_Server::mkprop('supported-report-set',array(
HTTP_WebDAV_Server::mkprop('supported-report','addressbook-query'),
HTTP_WebDAV_Server::mkprop('supported-report','addressbook-multiget'),
));
return $props;
}
/**
* Get the handler and set the supported fields
*

View File

@ -758,8 +758,9 @@ class HTTP_WebDAV_Server
. "GMT</D:getlastmodified>\n";
break;
case "resourcetype":
case "supported-report-set":
if (!is_array($prop['val'])) {
echo " <D:resourcetype><D:$prop[val]/></D:resourcetype>\n";
echo " <D:$prop[name]><D:$prop[val]/></D:$prop[name]>\n";
} else { // multiple resourcetypes from different namespaces as required by GroupDAV
$vals = $extra_ns = '';
foreach($prop['val'] as $subprop)
@ -781,10 +782,17 @@ class HTTP_WebDAV_Server
} else {
$ns_name = '';
}
// check if $prop[val] should be returned as attribute or value
if ($subprop['name'] == $subprop['val'] ||
$subprop['name'] == $prop['name']) {
$vals .= "<$ns_name$subprop[val]/>";
} else {
$vals .= "<$ns_name$subprop[name]>$subprop[val]</$ns_name$subprop[name]>";
}
echo " <D:resourcetype$extra_ns>$vals</D:resourcetype>\n";
//error_log("resourcetype: <D:resourcetype$extra_ns>$vals</D:resourcetype>");
}
echo " <D:$prop[name]$extra_ns>$vals</D:$prop[name]>\n";
//error_log(array2string($prop));
//error_log("<D:$prop[name]$extra_ns>$vals</D:$prop[name]>");
}
break;
case "supportedlock":

View File

@ -497,8 +497,17 @@ class groupdav extends HTTP_WebDAV_Server
default:
$ns = $prop['ns'];
}
// allow multiple values for same name
if (isset($arr[$ns.':'.$prop['name']]))
{
$arr[$ns.':'.$prop['name']] = (array)$arr[$ns.':'.$prop['name']];
$arr[$ns.':'.$prop['name']][] = $prop['val'];
}
else
{
$arr[$ns.':'.$prop['name']] = $prop['val'];
}
}
return $arr;
}