mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-11-22 16:03:47 +01:00
- refactored code to use a single add_collection method in groupdav class
--> app groupdav classes now get calling groupdav object as parameter Had a quick test with iOS & OS X addressbook, calendar and with Lightning
This commit is contained in:
parent
b49aae4675
commit
03ed1d3ddb
@ -87,13 +87,11 @@ class addressbook_groupdav extends groupdav_handler
|
||||
* Constructor
|
||||
*
|
||||
* @param string $app 'calendar', 'addressbook' or 'infolog'
|
||||
* @param int $debug=null debug-level to set
|
||||
* @param string $base_uri=null base url of handler
|
||||
* @param string $principalURL=null pricipal url of handler
|
||||
* @param groupdav $groupdav calling class
|
||||
*/
|
||||
function __construct($app,$debug=null,$base_uri=null,$principalURL=null)
|
||||
function __construct($app, groupdav $groupdav)
|
||||
{
|
||||
parent::__construct($app,$debug,$base_uri,$principalURL);
|
||||
parent::__construct($app, $groupdav);
|
||||
|
||||
$this->bo = new addressbook_bo();
|
||||
|
||||
|
@ -67,13 +67,11 @@ class calendar_groupdav extends groupdav_handler
|
||||
* Constructor
|
||||
*
|
||||
* @param string $app 'calendar', 'addressbook' or 'infolog'
|
||||
* @param int $debug=null debug-level to set
|
||||
* @param string $base_uri=null base url of handler
|
||||
* @param string $principalURL=null principal url of handler
|
||||
* @param groupdav $groupdav calling class
|
||||
*/
|
||||
function __construct($app,$debug=null, $base_uri=null, $principalURL=null)
|
||||
function __construct($app, groupdav $groupdav)
|
||||
{
|
||||
parent::__construct($app,$debug,$base_uri,$principalURL);
|
||||
parent::__construct($app, $groupdav);
|
||||
|
||||
$this->bo = new calendar_boupdate();
|
||||
$this->vCalendar = new Horde_iCalendar;
|
||||
@ -574,7 +572,7 @@ class calendar_groupdav extends groupdav_handler
|
||||
}
|
||||
|
||||
if (!($cal_id = $handler->importVCal($vCalendar, $eventId,
|
||||
self::etag2value($this->http_if_match), false, 0, $this->principalURL, $user, $charset, $id)))
|
||||
self::etag2value($this->http_if_match), false, 0, $this->groupdav->current_user_principal, $user, $charset, $id)))
|
||||
{
|
||||
if ($this->debug) error_log(__METHOD__."(,$id) eventId=$eventId: importVCal('$options[content]') returned false");
|
||||
if ($eventId && $cal_id === false)
|
||||
@ -643,7 +641,7 @@ class calendar_groupdav extends groupdav_handler
|
||||
list($eventId) = explode(':', $eventId);
|
||||
|
||||
if (!($cal_id = $handler->importVCal($vCalendar, $eventId, null,
|
||||
false, 0, $this->principalURL, $user, $charset)))
|
||||
false, 0, $this->groupdav->current_user_principal, $user, $charset)))
|
||||
{
|
||||
if ($this->debug) error_log(__METHOD__."() importVCal($eventId) returned false");
|
||||
}
|
||||
|
@ -55,13 +55,11 @@ class infolog_groupdav extends groupdav_handler
|
||||
* Constructor
|
||||
*
|
||||
* @param string $app 'calendar', 'addressbook' or 'infolog'
|
||||
* @param int $debug=null debug-level to set
|
||||
* @param string $base_uri=null base url of handler
|
||||
* @param string $principalURL=null pricipal url of handler
|
||||
* @param groupdav $groupdav calling class
|
||||
*/
|
||||
function __construct($app,$debug=null,$base_uri=null,$principalURL=null)
|
||||
function __construct($app, groupdav $groupdav)
|
||||
{
|
||||
parent::__construct($app,$debug,$base_uri,$principalURL);
|
||||
parent::__construct($app, $groupdav);
|
||||
|
||||
$this->bo = new infolog_bo();
|
||||
$this->vCalendar = new Horde_iCalendar;
|
||||
|
@ -87,7 +87,7 @@ class groupdav extends HTTP_WebDAV_Server
|
||||
'component-set' => array(self::GROUPDAV => 'VTODO'),
|
||||
),
|
||||
'principals' => array(
|
||||
'resourcetype' => array(self::DAV => 'principal'),
|
||||
'resourcetype' => array(self::DAV => 'collection'),
|
||||
)
|
||||
);
|
||||
/**
|
||||
@ -114,11 +114,11 @@ class groupdav extends HTTP_WebDAV_Server
|
||||
*/
|
||||
var $handler;
|
||||
/**
|
||||
* principal URL
|
||||
* current-user-principal URL
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
var $principalURL;
|
||||
var $current_user_principal;
|
||||
/**
|
||||
* Reference to the accounts class
|
||||
*
|
||||
@ -133,7 +133,9 @@ class groupdav extends HTTP_WebDAV_Server
|
||||
if ($this->debug > 2) error_log('groupdav: $_SERVER='.array2string($_SERVER));
|
||||
|
||||
// identify clients, which do NOT support path AND full url in <D:href> of PROPFIND request
|
||||
switch(groupdav_handler::get_agent())
|
||||
// crrnd: client refuses redundand namespace declarations
|
||||
// cnrnd: client needs redundand namespace declarations
|
||||
switch(($agent = groupdav_handler::get_agent()))
|
||||
{
|
||||
case 'kde': // KAddressbook (at least in 3.5 can NOT subscribe / does NOT find addressbook)
|
||||
$this->client_require_href_as_url = true;
|
||||
@ -156,6 +158,8 @@ class groupdav extends HTTP_WebDAV_Server
|
||||
$this->cnrnd = true; // neon clients like cadaver
|
||||
break;
|
||||
}
|
||||
if ($this->debug) error_log(__METHOD__."() HTTP_USER_AGENT='$_SERVER[HTTP_USER_AGENT]' --> '$agent' --> client_requires_href_as_url=$this->client_require_href_as_url, crrnd(client refuses redundand namespace declarations)=$this->crrnd, cnrnd(client needs redundand namespace declarations)=$this->cnrnd");
|
||||
|
||||
// adding EGroupware version to X-Dav-Powered-By header eg. "EGroupware 1.8.001 CalDAV/CardDAV/GroupDAV server"
|
||||
$this->dav_powered_by = str_replace('EGroupware','EGroupware '.$GLOBALS['egw_info']['server']['versions']['phpgwapi'],
|
||||
$this->dav_powered_by);
|
||||
@ -165,19 +169,19 @@ class groupdav extends HTTP_WebDAV_Server
|
||||
$this->egw_charset = translation::charset();
|
||||
if (strpos($this->base_uri, 'http') === 0)
|
||||
{
|
||||
$this->principalURL = $this->_slashify($this->base_uri);
|
||||
$this->current_user_principal = $this->_slashify($this->base_uri);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->principalURL = (@$_SERVER["HTTPS"] === "on" ? "https:" : "http:") .
|
||||
$this->current_user_principal = (@$_SERVER["HTTPS"] === "on" ? "https:" : "http:") .
|
||||
'//' . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'] . '/';
|
||||
}
|
||||
$this->principalURL .= 'principals/users/'.$GLOBALS['egw_info']['user']['account_lid'].'/';
|
||||
$this->current_user_principal .= 'principals/users/'.$GLOBALS['egw_info']['user']['account_lid'].'/';
|
||||
|
||||
// if client requires pathes instead of URLs
|
||||
if ($this->client_require_href_as_url === false)
|
||||
if (!$this->client_require_href_as_url)
|
||||
{
|
||||
$this->principalURL = parse_url($this->principalURL,PHP_URL_PATH);
|
||||
$this->current_user_principal = parse_url($this->current_user_principal,PHP_URL_PATH);
|
||||
}
|
||||
$this->accounts = $GLOBALS['egw']->accounts;
|
||||
}
|
||||
@ -190,7 +194,7 @@ class groupdav extends HTTP_WebDAV_Server
|
||||
*/
|
||||
function app_handler($app)
|
||||
{
|
||||
return groupdav_handler::app_handler($app,$this->debug,$this->base_uri,$this->principalURL);
|
||||
return groupdav_handler::app_handler($app,$this);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -229,6 +233,53 @@ class groupdav extends HTTP_WebDAV_Server
|
||||
// not yet implemented: $dav[] = 'access-control';
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a collection to a PROPFIND request
|
||||
*
|
||||
* @param string $path
|
||||
* @param array $props=array() extra properties 'resourcetype' is added anyway, name => value pairs or name => HTTP_WebDAV_Server([namespace,]name,value)
|
||||
* @return array with values for keys 'path' and 'props'
|
||||
*/
|
||||
public function add_collection($path, array $props = array())
|
||||
{
|
||||
// resourcetype: collection
|
||||
$props['resourcetype'][] = self::mkprop('collection','');
|
||||
|
||||
// props for all collections: current-user-principal and principal-collection-set
|
||||
$props['current-user-principal'] = array(
|
||||
self::mkprop('href',$this->current_user_principal));
|
||||
$props['principal-collection-set'] = array(
|
||||
self::mkprop('href',$this->base_uri.'/principals/'));
|
||||
|
||||
// required props per WebDAV standard
|
||||
foreach(array(
|
||||
'displayname' => basename($path),
|
||||
'getetag' => 'EGw-no-etag-wGE',
|
||||
'getcontentlength' => '',
|
||||
'getlastmodified' => '',
|
||||
'getcontenttype' => 'httpd/unix-directory',
|
||||
) as $name => $default)
|
||||
{
|
||||
if (!isset($props[$name])) $props[$name] = $default;
|
||||
}
|
||||
|
||||
if ($this->debug > 1) error_log(__METHOD__."(path='$path', props=".array2string($props).')');
|
||||
|
||||
// convert simple associative properties to HTTP_WebDAV_Server ones
|
||||
foreach($props as $name => &$prop)
|
||||
{
|
||||
if (!is_array($prop) || !isset($prop['name']))
|
||||
{
|
||||
$prop = self::mkprop($name, $prop);
|
||||
}
|
||||
}
|
||||
|
||||
return array(
|
||||
'path' => $path,
|
||||
'props' => $props,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* PROPFIND and REPORT method handler
|
||||
*
|
||||
@ -289,49 +340,30 @@ class groupdav extends HTTP_WebDAV_Server
|
||||
|
||||
$displayname = translation::convert($displayname, translation::charset(),'utf-8');
|
||||
// self url
|
||||
$props = array(
|
||||
self::mkprop('displayname',$displayname),
|
||||
self::mkprop('owner',array(self::mkprop('href',$this->base_uri.'/principals/'.$principalType.'/'.$account_lid.'/'))),
|
||||
self::mkprop('resourcetype',array(self::mkprop('collection',''))),
|
||||
$files['files'][] = $this->add_collection($path, array(
|
||||
'displayname' => $displayname,
|
||||
'owner' => array(self::mkprop('href',$this->base_uri.'/principals/'.$principalType.'/'.$account_lid.'/')),
|
||||
// adding the calendar extra property (calendar-home-set, etc.) here, allows apple iCal to "autodetect" the URL
|
||||
self::mkprop(groupdav::CALDAV,'calendar-home-set',array(
|
||||
'calendar-home-set' => self::mkprop(groupdav::CALDAV,'calendar-home-set',array(
|
||||
self::mkprop('href',$this->base_uri.$user_prefix))),
|
||||
self::mkprop(groupdav::CARDDAV,'addressbook-home-set',array(
|
||||
'addressbook-home-set' => self::mkprop(groupdav::CARDDAV,'addressbook-home-set',array(
|
||||
self::mkprop('href',$this->base_uri.$user_prefix))),
|
||||
self::mkprop('current-user-principal',array(self::mkprop('href',$this->principalURL))),
|
||||
self::mkprop(groupdav::CALDAV,'calendar-user-address-set',$calendar_user_address_set),
|
||||
self::mkprop(groupdav::CALENDARSERVER,'email-address-set',array(
|
||||
'calendar-user-address-set' => self::mkprop(groupdav::CALDAV,'calendar-user-address-set',$calendar_user_address_set),
|
||||
'email-address-set' => self::mkprop(groupdav::CALENDARSERVER,'email-address-set',array(
|
||||
self::mkprop(groupdav::CALENDARSERVER,'email-address',$GLOBALS['egw_info']['user']['email']))),
|
||||
//self::mkprop('principal-URL',array(self::mkprop('href',$this->principalURL))),
|
||||
self::mkprop('principal-collection-set',array(self::mkprop('href',$this->base_uri.'/principals/'))),
|
||||
// OUTBOX URLs of the current user
|
||||
self::mkprop(groupdav::CALDAV,'schedule-outbox-URL',array(
|
||||
'schedule-outbox-URL' => self::mkprop(groupdav::CALDAV,'schedule-outbox-URL',array(
|
||||
self::mkprop(groupdav::DAV,'href',$this->base_uri.'/calendar/'))),
|
||||
);
|
||||
//$props = self::current_user_privilege_set($props);
|
||||
$files['files'][] = array(
|
||||
'path' => $path,
|
||||
'props' => $props,
|
||||
);
|
||||
//'current-user-privilege-set' => self::current_user_privilege_set(),
|
||||
));
|
||||
if ($options['depth'])
|
||||
{
|
||||
if (strlen($path) == 1) // GroupDAV Root
|
||||
{
|
||||
// principals collection
|
||||
$files['files'][] = array(
|
||||
'path' => '/principals/',
|
||||
'props' => array(
|
||||
self::mkprop('displayname',lang('Accounts')),
|
||||
self::mkprop('resourcetype',array(self::mkprop('principals',''),self::mkprop('collection',''))),
|
||||
self::mkprop('current-user-principal',array(self::mkprop('href',$this->principalURL))),
|
||||
self::mkprop('principal-collection-set',self::mkprop('href', $this->base_uri.'/principals/')),
|
||||
//self::mkprop(groupdav::CALDAV,'calendar-home-set',array(
|
||||
// self::mkprop('href',$this->base_uri.$user_prefix))),
|
||||
//self::mkprop(groupdav::CARDDAV,'addressbook-home-set',array(
|
||||
// self::mkprop('href',$this->base_uri.$user_prefix))),
|
||||
//self::mkprop('principal-URL',array(self::mkprop('href',$this->principalURL))),
|
||||
),
|
||||
);
|
||||
$files['files'][] = $this->add_collection('/principals/', array(
|
||||
'displayname' => lang('Accounts'),
|
||||
));
|
||||
}
|
||||
foreach($this->root as $app => $data)
|
||||
{
|
||||
@ -340,19 +372,16 @@ class groupdav extends HTTP_WebDAV_Server
|
||||
// add ctag if handler implements it
|
||||
if (($handler = self::app_handler($app)) && method_exists($handler,'getctag'))
|
||||
{
|
||||
$props[] = self::mkprop(
|
||||
$props['getctag'] = self::mkprop(
|
||||
groupdav::CALENDARSERVER,'getctag',$handler->getctag($options['path'],$user));
|
||||
}
|
||||
$props[] = self::mkprop('getetag','EGw-'.$app.'-wGE');
|
||||
$files['files'][] = array(
|
||||
'path' => $path.$app.'/',
|
||||
'props' => $props,
|
||||
);
|
||||
$props['getetag'] = 'EGw-'.$app.'-wGE';
|
||||
$files['files'][] = $this->add_collection($path.$app.'/',$props);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
if ($app != 'principals' && !$GLOBALS['egw_info']['user']['apps'][$app])
|
||||
if ($app != 'principals' && !isset($GLOBALS['egw_info']['user']['apps'][$app]))
|
||||
{
|
||||
if ($this->debug) error_log(__CLASS__."::$method(path=$options[path]) 403 Forbidden: no app rights for '$app'");
|
||||
return "403 Forbidden: no app rights for '$app'"; // no rights for the given app
|
||||
@ -361,15 +390,14 @@ class groupdav extends HTTP_WebDAV_Server
|
||||
{
|
||||
if ($method != 'REPORT' && !$id) // no self URL for REPORT requests (only PROPFIND) or propfinds on an id
|
||||
{
|
||||
$files['files'][0] = array(
|
||||
'path' => $path.$app.'/',
|
||||
$files['files'][0] = $this->add_collection($path.$app.'/',
|
||||
// KAddressbook doubles the folder, if the self URL contains the GroupDAV/CalDAV resourcetypes
|
||||
'props' => $this->_properties($app,$app=='addressbook'&&$handler->get_agent()=='kde',$user,$path),
|
||||
);
|
||||
$this->_properties($app,$app=='addressbook'&&$handler->get_agent()=='kde',$user,$path));
|
||||
|
||||
// add ctag if handler implements it (only for depth 0)
|
||||
if (method_exists($handler,'getctag'))
|
||||
{
|
||||
$files['files'][0]['props'][] = HTTP_WebDAV_Server::mkprop(
|
||||
$files['files'][0]['props']['getctag'] = self::mkprop(
|
||||
groupdav::CALENDARSERVER,'getctag',$handler->getctag($options['path'],$user));
|
||||
}
|
||||
if (!$options['depth']) return true; // depth 0 --> show only the self url
|
||||
@ -380,7 +408,7 @@ class groupdav extends HTTP_WebDAV_Server
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the properties of a collection
|
||||
* Get properties of an application collection
|
||||
*
|
||||
* @param string $app
|
||||
* @param boolean $no_extra_types=false should the GroupDAV and CalDAV types be added (KAddressbook has problems with it in self URL)
|
||||
@ -431,71 +459,58 @@ class groupdav extends HTTP_WebDAV_Server
|
||||
}
|
||||
|
||||
$props = array(
|
||||
self::mkprop('current-user-principal',array(self::mkprop('href',$this->principalURL))),
|
||||
self::mkprop('owner',array(self::mkprop('href',$this->base_uri.'/principals/'.$principalType.'/'.$account_lid.'/'))),
|
||||
//self::mkprop('principal-URL',array(self::mkprop('href',$this->principalURL))),
|
||||
self::mkprop('alternate-URI-set',array(
|
||||
self::mkprop('href','MAILTO:'.$GLOBALS['egw_info']['user']['email']))),
|
||||
self::mkprop('principal-collection-set',array(
|
||||
self::mkprop('href',$this->base_uri.'/principals/'),
|
||||
)),
|
||||
self::mkprop('principal-URL',array(self::mkprop('href',$this->principalURL))),
|
||||
self::mkprop(groupdav::CALDAV,'calendar-user-address-set',array(
|
||||
'owner' => array(self::mkprop('href',$this->base_uri.'/principals/'.$principalType.'/'.$account_lid.'/')),
|
||||
'calendar-user-address-set' => self::mkprop(groupdav::CALDAV,'calendar-user-address-set',array(
|
||||
self::mkprop('href','MAILTO:'.$GLOBALS['egw_info']['user']['email']),
|
||||
self::mkprop('href',$this->base_uri.'/principals/'.$principalType.'/'.$GLOBALS['egw_info']['user']['account_lid'].'/'),
|
||||
self::mkprop('href','urn:uuid:'.$GLOBALS['egw_info']['user']['account_lid']))),
|
||||
self::mkprop(groupdav::CALENDARSERVER,'email-address-set',array(
|
||||
'email-address-set' => self::mkprop(groupdav::CALENDARSERVER,'email-address-set',array(
|
||||
self::mkprop(groupdav::CALENDARSERVER,'email-address',$GLOBALS['egw_info']['user']['email']))),
|
||||
self::mkprop('getetag','EGw-no-etag-wGE'), // iPhone addressbook requires an etag here!
|
||||
);
|
||||
|
||||
$displayname = translation::convert(lang($app).' '.
|
||||
common::grab_owner_name($user),$this->egw_charset,'utf-8');
|
||||
switch ($app)
|
||||
{
|
||||
case 'calendar':
|
||||
$props[] = self::mkprop(groupdav::CALDAV,'calendar-home-set',array(
|
||||
$props['calendar-home-set'] = self::mkprop(groupdav::CALDAV,'calendar-home-set',array(
|
||||
self::mkprop('href',$this->base_uri.$path.'calendar/')));
|
||||
// OUTBOX URLs of the current user
|
||||
$props[] = self::mkprop(groupdav::CALDAV,'schedule-outbox-URL',
|
||||
$props['schedule-outbox-URL'] = self::mkprop(groupdav::CALDAV,'schedule-outbox-URL',
|
||||
array(self::mkprop(groupdav::DAV,'href',$this->base_uri.'/calendar/')));
|
||||
$props[] = self::mkprop(groupdav::ICAL,'calendar-color',$display_color);
|
||||
$props['calendar-color'] = self::mkprop(groupdav::ICAL,'calendar-color',$display_color);
|
||||
break;
|
||||
case 'infolog':
|
||||
$props[] = self::mkprop(groupdav::CALDAV,'calendar-home-set',array(
|
||||
$props['calendar-home-set'] = self::mkprop(groupdav::CALDAV,'calendar-home-set',array(
|
||||
self::mkprop('href',$this->base_uri.$path.'infolog/')));
|
||||
$displayname = translation::convert(lang($app).' '.
|
||||
common::grab_owner_name($user),$this->egw_charset,'utf-8');
|
||||
break;
|
||||
default:
|
||||
$props[] = self::mkprop(groupdav::CALDAV,'calendar-home-set',array(
|
||||
$props['calendar-home-set'] = self::mkprop(groupdav::CALDAV,'calendar-home-set',array(
|
||||
self::mkprop('href',$this->base_uri.$path)));
|
||||
$displayname = translation::convert(lang($app).' '.
|
||||
common::grab_owner_name($user),$this->egw_charset,'utf-8');
|
||||
}
|
||||
$props[] = self::mkprop(groupdav::CARDDAV,'addressbook-home-set',array(
|
||||
$props['addressbook-home-set'] = self::mkprop(groupdav::CARDDAV,'addressbook-home-set',array(
|
||||
self::mkprop('href',$this->base_uri.$path)));
|
||||
$props[] = self::mkprop('displayname',$displayname);
|
||||
$props['displayname'] = $displayname;
|
||||
|
||||
foreach((array)$this->root[$app] as $prop => $values)
|
||||
{
|
||||
if ($prop == 'resourcetype')
|
||||
{
|
||||
$resourcetype = array(
|
||||
self::mkprop('collection',''),
|
||||
);
|
||||
if (!$no_extra_types)
|
||||
{
|
||||
foreach($this->root[$app]['resourcetype'] as $ns => $type)
|
||||
{
|
||||
$resourcetype[] = self::mkprop($ns,$type,'');
|
||||
$props['resourcetype'][] = self::mkprop($ns,$type,'');
|
||||
}
|
||||
}
|
||||
$props[] = self::mkprop('resourcetype',$resourcetype);
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach($values as $ns => $value)
|
||||
{
|
||||
$props[] = self::mkprop($ns,$prop,$value);
|
||||
$props[$prop] = self::mkprop($ns,$prop,$value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -990,29 +1005,26 @@ class groupdav extends HTTP_WebDAV_Server
|
||||
/**
|
||||
* Add the privileges of the current user
|
||||
*
|
||||
* @param array $props=array() regular props by the groupdav handler
|
||||
* @return array
|
||||
* @return array self::mkprop('privilege',array(...))
|
||||
*/
|
||||
static function current_user_privilege_set(array $props=array())
|
||||
static function current_user_privilege_set()
|
||||
{
|
||||
$props[] = HTTP_WebDAV_Server::mkprop('current-user-privilege-set',
|
||||
array(HTTP_WebDAV_Server::mkprop('privilege',
|
||||
array(//HTTP_WebDAV_Server::mkprop('all',''),
|
||||
HTTP_WebDAV_Server::mkprop('read',''),
|
||||
HTTP_WebDAV_Server::mkprop('read-free-busy',''),
|
||||
//HTTP_WebDAV_Server::mkprop('read-current-user-privilege-set',''),
|
||||
HTTP_WebDAV_Server::mkprop('bind',''),
|
||||
HTTP_WebDAV_Server::mkprop('unbind',''),
|
||||
HTTP_WebDAV_Server::mkprop('schedule-post',''),
|
||||
HTTP_WebDAV_Server::mkprop('schedule-post-vevent',''),
|
||||
HTTP_WebDAV_Server::mkprop('schedule-respond',''),
|
||||
HTTP_WebDAV_Server::mkprop('schedule-respond-vevent',''),
|
||||
HTTP_WebDAV_Server::mkprop('schedule-deliver',''),
|
||||
HTTP_WebDAV_Server::mkprop('schedule-deliver-vevent',''),
|
||||
HTTP_WebDAV_Server::mkprop('write',''),
|
||||
HTTP_WebDAV_Server::mkprop('write-properties',''),
|
||||
HTTP_WebDAV_Server::mkprop('write-content',''),
|
||||
))));
|
||||
return $props;
|
||||
return array(self::mkprop('privilege',
|
||||
array(//self::mkprop('all',''),
|
||||
self::mkprop('read',''),
|
||||
self::mkprop('read-free-busy',''),
|
||||
//self::mkprop('read-current-user-privilege-set',''),
|
||||
self::mkprop('bind',''),
|
||||
self::mkprop('unbind',''),
|
||||
self::mkprop('schedule-post',''),
|
||||
self::mkprop('schedule-post-vevent',''),
|
||||
self::mkprop('schedule-respond',''),
|
||||
self::mkprop('schedule-respond-vevent',''),
|
||||
self::mkprop('schedule-deliver',''),
|
||||
self::mkprop('schedule-deliver-vevent',''),
|
||||
self::mkprop('write',''),
|
||||
self::mkprop('write-properties',''),
|
||||
self::mkprop('write-content',''),
|
||||
)));
|
||||
}
|
||||
}
|
||||
|
@ -53,18 +53,18 @@ abstract class groupdav_handler
|
||||
* @var string
|
||||
*/
|
||||
var $app;
|
||||
/**
|
||||
* Calling groupdav object
|
||||
*
|
||||
* @var groupdav
|
||||
*/
|
||||
var $groupdav;
|
||||
/**
|
||||
* Base url of handler, need to prefix all pathes not automatic handled by HTTP_WebDAV_Server
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
var $base_uri;
|
||||
/**
|
||||
* principal URL
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
var $principalURL;
|
||||
/**
|
||||
* HTTP_IF_MATCH / etag of current request / last call to _common_get_put_delete() method
|
||||
*
|
||||
@ -89,25 +89,14 @@ abstract class groupdav_handler
|
||||
* Constructor
|
||||
*
|
||||
* @param string $app 'calendar', 'addressbook' or 'infolog'
|
||||
* @param int $debug=null debug-level to set
|
||||
* @param string $base_uri=null base url of handler
|
||||
* @param string $principalURL=null pricipal url of handler
|
||||
* @param groupdav $groupdav calling class
|
||||
*/
|
||||
function __construct($app,$debug=null,$base_uri=null,$principalURL=null)
|
||||
function __construct($app, groupdav $groupdav)
|
||||
{
|
||||
$this->app = $app;
|
||||
if (!is_null($debug)) $this->debug = $debug;
|
||||
$this->base_uri = is_null($base_uri) ? $base_uri : $_SERVER['SCRIPT_NAME'];
|
||||
if (is_null($principalURL))
|
||||
{
|
||||
$this->principalURL = (@$_SERVER["HTTPS"] === "on" ? "https:" : "http:") .
|
||||
'//'.$_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'] . '/';
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->principalURL = $principalURL.'principals/users/'.
|
||||
$GLOBALS['egw_info']['user']['account_lid'].'/';
|
||||
}
|
||||
if (!is_null($parent->debug)) $this->debug = $groupdav->debug;
|
||||
$this->base_uri = $groupdav->base_uri;
|
||||
$this->groupdav = $groupdav;
|
||||
|
||||
$this->agent = self::get_agent();
|
||||
|
||||
@ -302,13 +291,10 @@ abstract class groupdav_handler
|
||||
*
|
||||
* @static
|
||||
* @param string $app 'calendar', 'addressbook' or 'infolog'
|
||||
* @param int $user=null owner of the collection, default current user
|
||||
* @param int $debug=null debug-level to set
|
||||
* @param string $base_uri=null base url of handler
|
||||
* @param string $principalURL=null pricipal url of handler
|
||||
* @param groupdav $groupdav calling class
|
||||
* @return groupdav_handler
|
||||
*/
|
||||
static function &app_handler($app,$debug=null,$base_uri=null,$principalURL=null)
|
||||
static function app_handler($app, $groupdav)
|
||||
{
|
||||
static $handler_cache = array();
|
||||
|
||||
@ -317,13 +303,10 @@ abstract class groupdav_handler
|
||||
$class = $app.'_groupdav';
|
||||
if (!class_exists($class) && !class_exists($class = 'groupdav_'.$app)) return null;
|
||||
|
||||
$handler_cache[$app] = new $class($app,$debug,$base_uri,$principalURL);
|
||||
$handler_cache[$app] = new $class($app, $groupdav);
|
||||
}
|
||||
$handler_cache[$app]->$debug = $debug;
|
||||
$handler_cache[$app]->$base_uri = $base_uri;
|
||||
$handler_cache[$app]->$principalURL = $principalURL;
|
||||
|
||||
if ($debug) error_log(__METHOD__."('$app', '$base_uri', '$principalURL')");
|
||||
if ($debug) error_log(__METHOD__."('$app')");
|
||||
|
||||
return $handler_cache[$app];
|
||||
}
|
||||
|
@ -41,13 +41,11 @@ class groupdav_principals extends groupdav_handler
|
||||
* Constructor
|
||||
*
|
||||
* @param string $app 'calendar', 'addressbook' or 'infolog'
|
||||
* @param int $debug=null debug-level to set
|
||||
* @param string $base_uri=null base url of handler
|
||||
* @param string $principalURL=null principal url of handler
|
||||
* @param groupdav $groupdav calling class
|
||||
*/
|
||||
function __construct($app,$debug=null,$base_uri=null,$principalURL=null)
|
||||
function __construct($app, groupdav $groupdav)
|
||||
{
|
||||
parent::__construct($app,$debug,$base_uri,$principalURL);
|
||||
parent::__construct($app, $groupdav);
|
||||
|
||||
$this->accounts = $GLOBALS['egw']->accounts;
|
||||
$this->acl = $GLOBALS['egw']->acl;
|
||||
@ -415,44 +413,11 @@ class groupdav_principals extends groupdav_handler
|
||||
*
|
||||
* @param string $path
|
||||
* @param array $props=array() extra properties 'resourcetype' is added anyway, name => value pairs or name => HTTP_WebDAV_Server([namespace,]name,value)
|
||||
* @param array $additional_resource_types=array() additional resource-types, collection and principal are always added
|
||||
* @return array with values for keys 'path' and 'props'
|
||||
*/
|
||||
protected function add_collection($path, array $props = array())
|
||||
{
|
||||
// resourcetype: collection + $additional_resource_types
|
||||
$props['resourcetype'][] = HTTP_WebDAV_Server::mkprop('collection','');
|
||||
|
||||
// props for all collections: current-user-principal and principal-collection-set
|
||||
$props['current-user-principal'] = array(
|
||||
HTTP_WebDAV_Server::mkprop('href',$this->base_uri.'/principals/users/'.$GLOBALS['egw_info']['user']['account_lid'].'/'));
|
||||
$props['principal-collection-set'] = array(
|
||||
HTTP_WebDAV_Server::mkprop('href',$this->base_uri.'/principals/'));
|
||||
$props['supported-report-set'] = $this->supported_report_set($path);
|
||||
|
||||
// required props per WebDAV standard
|
||||
if (!isset($props['displayname'])) $props['displayname'] = basename($path);
|
||||
if (!isset($props['getetag'])) $props['getetag'] = 'EGw-no-etag-wGE';
|
||||
foreach(array('getcontentlength','getlastmodified','getlastmodified','getlastmodified') as $name)
|
||||
{
|
||||
if (!isset($props[$name])) $props[$name] = '';
|
||||
}
|
||||
|
||||
if ($this->debug > 1) error_log(__METHOD__."(path='$path', props=".array2string($props).')');
|
||||
|
||||
// convert simple associative properties to HTTP_WebDAV_Server ones
|
||||
foreach($props as $name => &$prop)
|
||||
{
|
||||
if (!is_array($prop) || !isset($prop['name']))
|
||||
{
|
||||
$prop = HTTP_WebDAV_Server::mkprop($name, $prop);
|
||||
}
|
||||
}
|
||||
|
||||
return array(
|
||||
'path' => $path,
|
||||
'props' => $props,
|
||||
);
|
||||
return $this->groupdav->add_collection($path, $props);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user