forked from extern/egroupware
Entry directories are always reported existing and empty, if not existing in sqlfs
This commit is contained in:
parent
7a9378d0d7
commit
b49d9fac67
@ -36,6 +36,8 @@ if (!class_exists('links_stream_wrapper_parent',false))
|
|||||||
* If the do not implement such a function the title function is used to test if the user has
|
* If the do not implement such a function the title function is used to test if the user has
|
||||||
* at least read access to an entry, and if true full (write) access to the files is granted.
|
* at least read access to an entry, and if true full (write) access to the files is granted.
|
||||||
*
|
*
|
||||||
|
* Entry directories are always reported existing and empty, if not existing in sqlfs.
|
||||||
|
*
|
||||||
* The stream wrapper interface is according to the docu on php.net
|
* The stream wrapper interface is according to the docu on php.net
|
||||||
*
|
*
|
||||||
* @link http://www.php.net/manual/en/function.stream-wrapper-register.php
|
* @link http://www.php.net/manual/en/function.stream-wrapper-register.php
|
||||||
@ -149,9 +151,26 @@ class links_stream_wrapper extends links_stream_wrapper_parent
|
|||||||
'mime' => $app == 'addressbook' ? 'text/vcard' : 'text/calendar',
|
'mime' => $app == 'addressbook' ? 'text/vcard' : 'text/calendar',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else
|
// if entry directory does not exist --> return fake directory
|
||||||
|
elseif (!($ret = parent::url_stat($url,$flags,$eacl_check)) && $eacl_check)
|
||||||
{
|
{
|
||||||
$ret = parent::url_stat($url,$flags,$eacl_check);
|
list(,/*$apps*/,/*$app*/,$id,$rel_path) = explode('/', parse_url($url, PHP_URL_PATH), 5);
|
||||||
|
if ($id && !isset($rel_path))
|
||||||
|
{
|
||||||
|
$ret = array(
|
||||||
|
'ino' => md5($url),
|
||||||
|
'name' => $id,
|
||||||
|
'mode' => self::MODE_DIR, // required by the stream wrapper
|
||||||
|
'size' => 0,
|
||||||
|
'uid' => 0,
|
||||||
|
'gid' => 0,
|
||||||
|
'mtime' => time(),
|
||||||
|
'ctime' => time(),
|
||||||
|
'nlink' => 2,
|
||||||
|
// eGW addition to return some extra values
|
||||||
|
'mime' => egw_vfs::DIR_MIME_TYPE,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (self::DEBUG) error_log(__METHOD__."('$url', $flags) calling parent::url_stat(,,".array2string($eacl_check).') returning '.array2string($ret));
|
if (self::DEBUG) error_log(__METHOD__."('$url', $flags) calling parent::url_stat(,,".array2string($eacl_check).') returning '.array2string($ret));
|
||||||
return $ret;
|
return $ret;
|
||||||
@ -271,6 +290,11 @@ class links_stream_wrapper extends links_stream_wrapper_parent
|
|||||||
unset($GLOBALS[$name]); // unset it, so it does not use up memory, once the stream is closed
|
unset($GLOBALS[$name]); // unset it, so it does not use up memory, once the stream is closed
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
// create not existing entry directories on the fly
|
||||||
|
if ($mode[0] != 'r' && !parent::url_stat($dir = egw_vfs::dirname($url),0) && self::check_extended_acl($dir,egw_vfs::WRITABLE))
|
||||||
|
{
|
||||||
|
self::mkdir($dir,0,STREAM_MKDIR_RECURSIVE);
|
||||||
|
}
|
||||||
return parent::stream_open($url,$mode,$options,$opened_path);
|
return parent::stream_open($url,$mode,$options,$opened_path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user