Fix GroupDAV issues

This commit is contained in:
Jörg Lehrke 2010-02-26 11:04:01 +00:00
parent 841300542b
commit 72e55f9753

View File

@ -377,10 +377,10 @@ class groupdav extends HTTP_WebDAV_Server
echo '<h1>(Cal|Card|Group)DAV '; echo '<h1>(Cal|Card|Group)DAV ';
$path = '/groupdav.php'; $path = '/groupdav.php';
foreach(explode('/',substr($options['path'],0,-1)) as $n => $name) foreach(explode('/',$this->_unslashify($options['path'])) as $n => $name)
{ {
$path .= ($n != 1 ? '/' : '').$name; $path .= ($n != 1 ? '/' : '').$name;
echo html::a_href(htmlspecialchars($name.'/'),$path.($n ? '/' : '')); echo html::a_href(htmlspecialchars($name.'/'),$path);
} }
echo "</h1>\n"; echo "</h1>\n";
@ -401,6 +401,8 @@ class groupdav extends HTTP_WebDAV_Server
$props = $this->props2array($file['props']); $props = $this->props2array($file['props']);
//echo $file['path']; _debug_array($props); //echo $file['path']; _debug_array($props);
$class = $class == 'row_on' ? 'row_off' : 'row_on'; $class = $class == 'row_on' ? 'row_off' : 'row_on';
$name = $this->_slashify(basename($this->_unslashify($file['path'])));
/*
if (substr($file['path'],-1) == '/') if (substr($file['path'],-1) == '/')
{ {
$name = basename(substr($file['path'],0,-1)).'/'; $name = basename(substr($file['path'],0,-1)).'/';
@ -409,6 +411,7 @@ class groupdav extends HTTP_WebDAV_Server
{ {
$name = basename($file['path']); $name = basename($file['path']);
} }
*/
echo "\t<tr class='$class'>\n\t\t<td>$n</td>\n\t\t<td>".html::a_href(htmlspecialchars($name),'/groupdav.php'.$file['path'])."</td>\n"; echo "\t<tr class='$class'>\n\t\t<td>$n</td>\n\t\t<td>".html::a_href(htmlspecialchars($name),'/groupdav.php'.$file['path'])."</td>\n";
echo "\t\t<td>".$props['DAV:getcontentlength']."</td>\n"; echo "\t\t<td>".$props['DAV:getcontentlength']."</td>\n";
echo "\t\t<td>".(!empty($props['DAV:getlastmodified']) ? date('Y-m-d H:i:s',$props['DAV:getlastmodified']) : '')."</td>\n"; echo "\t\t<td>".(!empty($props['DAV:getlastmodified']) ? date('Y-m-d H:i:s',$props['DAV:getlastmodified']) : '')."</td>\n";
@ -497,7 +500,7 @@ class groupdav extends HTTP_WebDAV_Server
default: default:
$ns = $prop['ns']; $ns = $prop['ns'];
} }
$arr[$ns.':'.$prop['name']] = is_array($prop['val']) ? $arr[$ns.':'.$prop['name']] = is_array($prop['val']) ?
$this->_hierarchical_prop_encode($prop['val']) : $prop['val']; $this->_hierarchical_prop_encode($prop['val']) : $prop['val'];
} }
return $arr; return $arr;
@ -673,16 +676,25 @@ class groupdav extends HTTP_WebDAV_Server
*/ */
function _parse_path($path,&$id,&$app,&$user,&$user_prefix=null) function _parse_path($path,&$id,&$app,&$user,&$user_prefix=null)
{ {
if ($this->debug) error_log(__METHOD__." called with ('$path') id=$id, app='$app', user=$user"); if ($this->debug)
$parts = explode('/',$path);
if (count($parts) > 3 || !$GLOBALS['egw']->accounts->name2id($parts[1]))
{ {
list($id) = explode('.',array_pop($parts)); // remove evtl. .ics extension error_log(__METHOD__." called with ('$path') id=$id, app='$app', user=$user");
} }
$app = array_pop($parts); if ($path[0] == '/')
{
$path = substr($path, 1);
}
$parts = explode('/', $this->_unslashify($path));
if (($user = array_pop($parts))) if ($GLOBALS['egw']->accounts->name2id($parts[0]))
{
// /$user/$app/...
$user = array_shift($parts);
}
$app = array_shift($parts);
if ($user)
{ {
$user_prefix = '/'.$user; $user_prefix = '/'.$user;
$user = $GLOBALS['egw']->accounts->name2id($user,'account_lid',$app != 'addressbook' ? 'u' : null); $user = $GLOBALS['egw']->accounts->name2id($user,'account_lid',$app != 'addressbook' ? 'u' : null);
@ -692,9 +704,18 @@ class groupdav extends HTTP_WebDAV_Server
$user_prefix = ''; $user_prefix = '';
$user = $GLOBALS['egw_info']['user']['account_id']; $user = $GLOBALS['egw_info']['user']['account_id'];
} }
if (($id = array_pop($parts)))
{
list($id) = explode('.',$id); // remove evtl. .ics extension
}
if (!($ok = $id && in_array($app,array('addressbook','calendar','infolog','principals','groups')) && $user)) if (!($ok = $id && in_array($app,array('addressbook','calendar','infolog','principals','groups')) && $user))
{ {
if ($this->debug) error_log(__METHOD__."('$path') returning false: id=$id, app='$app', user=$user"); if ($this->debug)
{
error_log(__METHOD__."('$path') returning false: id=$id, app='$app', user=$user");
}
} }
return $ok; return $ok;
} }