2022-11-02 23:21:46 +08:00
< ? php
if ( ! defined ( 'IN_DZZ' )) {
exit ( 'Access Denied' );
}
class table_folder extends dzz_table
{
public $noperm = false ;
public function __construct ()
{
$this -> _table = 'folder' ;
$this -> _pk = 'fid' ;
$this -> _pre_cache_key = 'folder_' ;
$this -> _cache_ttl = 60 * 60 ;
parent :: __construct ();
}
public function update ( $fid , $data , $applytosub = false )
{
if ( isset ( $data [ 'perm' ])) {
$perm = intval ( $data [ 'perm' ]);
$data [ 'perm_inherit' ] = perm_check :: getPerm1 ( $fid , '' , 0 , $perm );
}
if ( $ret = parent :: update ( $fid , $data )) {
if ( ! empty ( $data [ 'perm_inherit' ])) { //如果更新权限的话,需要单独处理子目录的继承权限
$this -> set_newperm_by_pfid ( $fid , $data [ 'perm_inherit' ], $applytosub );
$indexdata = array ( 'fid' => $fid );
Hook :: listen ( 'changepermafter_updateindex' , $indexdata );
/* $power = new perm_binPerm ( $perm );
if ( $power -> isPower ( 'flag' )) { //不继承,更新下级继承权限
$subfids = array ();
foreach ( DB :: fetch_all ( " select p.fid from %t p LEFT JOIN %t f ON p.fid=f.fid where p.pathkey regexp %s and f.perm='0' " , array ( 'resources_path' , 'folder' , '^_' . $fid . '_.+' )) as $value ) {
$subfids [] = $value [ 'fid' ];
}
if ( $subfids ) parent :: update ( $subfids , array ( 'perm_inherit' => $perm ));
} */
}
}
return $ret ;
}
//更改权限修改下级,$force==true, 强制修改所有下级目录权限为继承( perm值设置为0)
public function set_newperm_by_pfid ( $pfid , $perm , $force = false ){
$pfid = intval ( $pfid );
foreach ( DB :: fetch_all ( " select fid,perm from %t where pfid = %d " , array ( $this -> _table , $pfid )) as $v ){
if ( ! $force && $v [ 'perm' ] > 0 ){
continue ;
} else {
parent :: update ( $v [ 'fid' ], array ( 'perm' => 0 , 'perm_inherit' => $perm ));
$indexdata = array ( 'fid' => $v [ 'fid' ]);
Hook :: listen ( 'changepermafter_updateindex' , $indexdata );
$this -> set_newperm_by_pfid ( $v [ 'fid' ], $perm , $force );
}
}
return true ;
}
public function update_by_pfids ( $pfids , $setarr ){
if ( ! is_array ( $pfids )) $pfids = ( array ) $pfids ;
$fids = array ();
foreach ( DB :: fetch_all ( " select fid from %t where pfid in(%n) " , array ( $this -> _table , $pfids )) as $v ){
$fids [] = $v [ 'fid' ];
}
foreach ( $fids as $v ){
self :: update ( $v , $setarr );
}
return true ;
}
//更改继承权限
public function update_perm_inherit_by_fid ( $fids )
{
if ( ! is_array ( $fids )) $fids = ( array ) $fids ;
foreach ( $fids as $value ) {
$perm_inherit = perm_check :: getPerm1 ( $value );
parent :: update ( $value , array ( 'perm_inherit' => $perm_inherit ));
}
}
public function insert ( $data , $appid = 0 )
{
if ( empty ( $data )) {
return false ;
}
if ( $path [ 'fid' ] = parent :: insert ( $data , 1 )) {
$perm_inherit = perm_check :: getPerm1 ( $path [ 'fid' ]);
parent :: update ( $path [ 'fid' ], array ( 'perm_inherit' => $perm_inherit ));
if ( $data [ 'pfid' ]) {
if ( ! $pdata = C :: t ( 'resources_path' ) -> fetch_pathby_pfid ( $data [ 'pfid' ], true )) {
//根据fid生成path和pathkey
$pdata = self :: create_pathinfo_by_fid ( $data [ 'pfid' ], $appid );
}
if ( ! $pdata ) {
return array ( 'error' => lang ( 'failure_newfolder' ));
}
$path [ 'path' ] = $pdata [ 'path' ] . $data [ 'fname' ] . " / " ;
$path [ 'pathkey' ] = ( $pdata [ 'pathkey' ]) ? $pdata [ 'pathkey' ] . '-_' . $path [ 'fid' ] . '_' : '_' . $path [ 'fid' ] . '_' ;
} else {
if ( $appid ) {
$path [ 'path' ] = " dzz:app_ " . $appid . " : " . $data [ 'fname' ] . " / " ;
} else {
$path [ 'path' ] = ( $data [ 'gid' ]) ? " dzz:gid_ " . $data [ 'gid' ] . " : " . $data [ 'fname' ] . " / " : " dzz:uid_ " . $data [ 'uid' ] . " : " . $data [ 'fname' ] . " / " ;
}
$path [ 'pathkey' ] = '_' . $path [ 'fid' ] . '_' ;
}
C :: t ( 'resources_path' ) -> insert ( $path );
self :: check_sub_by_flag ( $path [ 'fid' ], $data [ 'flag' ]);
return $path [ 'fid' ];
}
return false ;
}
public function check_sub_by_flag ( $pfid , $flag ){ //检查这个目录是否含有子目录,有就创建
$subids = C :: t ( 'folder_sub' ) -> fetch_all_by_flag ( $flag );
foreach ( $subids as $value ){
$params = array (
'flag' => $value [ 'flag' ],
'fsperm' => $value [ 'fsperm' ],
'allow_exts' => $value [ 'allow_exts' ],
'iconview' => $value [ 'iconview' ],
'disp' => $value [ 'disp' ]
);
IO :: CreateFolder ( $pfid , $value [ 'fname' ], $value [ 'perm' ], $params , 'newcopy' , true );
}
return true ;
}
public function get_folder_pathinfo_by_fid ( $fid , $folderarr = array (), $i = 0 )
{
if ( ! $folderinfo = parent :: fetch ( $fid )) return ;
array_unshift ( $folderarr , array ( 'fname' => $folderinfo [ 'fname' ], 'fid' => $folderinfo [ 'fid' ], 'gid' => $folderinfo [ 'gid' ], 'uid' => $folderinfo [ 'uid' ]));
if ( $folderinfo [ 'pfid' ] > 0 && $i < 100 ) {
$i ++ ;
$folderarr = self :: get_folder_pathinfo_by_fid ( $folderinfo [ 'pfid' ], $folderarr , $i );
}
return $folderarr ;
}
//根据fid生成path和pathkey
public function create_pathinfo_by_fid ( $fid , $appid = 0 )
{
$patharr = array ();
if ( ! $pathdata = self :: get_folder_pathinfo_by_fid ( $fid )) return $patharr ;
$pathprefix = ( $appid ) ? " dzz:app_ " . $appid . " : " : '' ;
$path = '' ;
$pathkey = '' ;
foreach ( $pathdata as $v ) {
$path .= $v [ 'fname' ] . '/' ;
$pathkey .= '_' . $v [ 'fid' ] . '_-' ;
}
if ( ! $pathprefix ) {
$pathprefix = ( $v [ 'gid' ]) ? " dzz:gid_ " . $v [ 'gid' ] . " : " : " dzz:uid_ " . $v [ 'uid' ] . " : " ;
}
$patharr [ 'path' ] = $pathprefix . $path ;
$patharr [ 'pathkey' ] = substr ( $pathkey , 0 , - 1 );
return $patharr ;
}
public function check_home_by_uid ( $uid = '' )
{
global $_G ;
if ( ! $uid ) $uid = $_G [ 'uid' ];
else $uid = intval ( $uid );
return DB :: fetch_first ( " select f.*,p.path from %t f left join %t p on f.fid = p.fid where f.uid = %d and f.flag = %s " , array ( $this -> _table , 'resources_path' , $uid , 'home' ));
}
//查询个人文档目录以及路径
public function fetch_home_by_uid ( $uid = '' )
{
global $_G ;
if ( ! $uid ) $uid = $_G [ 'uid' ];
else $uid = intval ( $uid );
if ( $return = DB :: fetch_first ( " select f.*,p.path from %t f left join %t p on f.fid = p.fid where f.uid = %d and f.flag = %s " , array ( $this -> _table , 'resources_path' , $uid , 'home' ))) {
return $return ;
} else {
$root = array (
'pfid' => 0 ,
'uid' => $uid ,
'username' => $_G [ 'username' ],
'perm' => 0 ,
'fname' => lang ( 'explorer_user_root_dirname' ),
'flag' => 'home' ,
'innav' => 1 ,
'fsperm' => perm_FolderSPerm :: flagPower ( 'home' )
);
if ( $rootfid = DB :: result_first ( " select fid from " . DB :: table ( 'folder' ) . " where uid=' { $uid } ' and flag='home' " )) {
C :: t ( 'folder' ) -> update ( $rootfid , array ( 'fname' => $root [ 'fname' ], 'isdelete' => 0 , 'pfid' => 0 , 'fsperm' => $root [ 'fsperm' ], 'perm' => $root [ 'perm' ]));
} else {
$rootfid = C :: t ( 'folder' ) -> insert ( $root );
C :: t ( 'folder' ) -> update_perm_inherit_by_fid ( $rootfid );
}
$root [ 'fid' ] = $rootfid ;
$root [ 'path' ] = C :: t ( 'resources_path' ) -> fetch_pathby_pfid ( $rootfid );
return $root ;
}
}
//依文件名查询顶级目录
public function fetch_topby_fname ( $fname )
{
$fid = DB :: result_first ( " select fid from %t where fname = %s and pfid = 0 " , array ( $this -> _table , $fname ));
return self :: fetch_by_fid ( $fid );
}
//返回一条数据及附件表数据
public function fetch_by_fid ( $fid , $gid = '' )
{
global $_G ;
$fid = intval ( $fid );
if ( ! $data = self :: fetch ( $fid )) array ( 'error' => lang ( 'file_not_exist' ));
//获取目录的附加信息
if ( $attr = C :: t ( 'folder_attr' ) -> fetch_all_by_fid ( $fid )){
$data = array_merge ( $data , $attr );
}
$data [ 'title' ] = $data [ 'fname' ];
//统计文件数
if ( $data [ 'gid' ] > 0 ) { //如果是群组
//文件数
$data [ 'iconum' ] = DB :: result_first ( " select COUNT(*) from " . DB :: table ( 'resources' ) . " where pfid=' { $fid } ' and gid=' { $gid } ' and isdelete<1 " );
//文件夹数
$data [ 'foldernum' ] = DB :: result_first ( " select COUNT(*) from " . DB :: table ( 'resources' ) . " where pfid=' { $fid } ' and gid=' { $gid } ' and type='folder' and isdelete<1 " );
} else {
//文件数
$data [ 'iconum' ] = DB :: result_first ( " select COUNT(*) from " . DB :: table ( 'resources' ) . " where pfid=' { $fid } ' and isdelete < 1 " );
//文件夹数
$data [ 'foldernum' ] = DB :: result_first ( " select COUNT(*) from " . DB :: table ( 'resources' ) . " where pfid=' { $fid } ' and type='folder' and isdelete < 1 " );
}
$data [ 'perm' ] = perm_check :: getPerm ( $fid );
$data [ 'perm1' ] = $data [ 'perm_inherit' ];
if ( $data [ 'gid' ] > 0 ) {
$data [ 'isadmin' ] = $data [ 'ismoderator' ] = C :: t ( 'organization_admin' ) -> is_admin_by_orgid ( $data [ 'gid' ], $_G [ 'uid' ]);
$permtitle = perm_binPerm :: getGroupTitleByPower ( $data [ 'perm1' ]);
if ( file_exists ( 'dzz/images/default/system/folder-' . $permtitle [ 'flag' ] . '.png' )) {
$data [ 'icon' ] = './dzz/images/default/system/folder-' . $permtitle [ 'flag' ] . '.png' ;
} else {
$data [ 'icon' ] = './dzz/images/default/system/folder-read.png' ;
}
}
$data [ 'realpath' ] = C :: t ( 'resources_path' ) -> fetch_pathby_pfid ( $fid );
$data [ 'relativepath' ] = preg_replace ( '/dzz:(.+?):/' , '' , $data [ 'realpath' ]);
$data [ 'path' ] = $data [ 'fid' ];
$data [ 'oid' ] = $data [ 'fid' ];
$data [ 'bz' ] = '' ;
Hook :: listen ( 'filter_folder_fid' , $data ); //数据过滤挂载点
return $data ;
}
//过滤文件名称
public function name_filter ( $name )
{
return str_replace ( array ( '/' , '\\' , ':' , '*' , '?' , '<' , '>' , '|' , '"' , " \n " ), '' , $name );
}
public function getFolderName ( $name , $pfid , $fid )
{
static $i = 0 ;
$name = self :: name_filter ( $name );
//echo("select COUNT(*) from ".DB::table('folder')." where fname='{$name}' and pfid='{$pfid}'");
if ( DB :: result_first ( " select COUNT(*) from %t where fname=%s and pfid=%d and fid != %d and isdelete<1 " , array ( 'folder' , $name , $pfid , $fid ))) {
$name = preg_replace ( " / \ ( \ d+ \ )/i " , '' , $name ) . '(' . ( $i + 1 ) . ')' ;
$i += 1 ;
return self :: getFolderName ( $name , $pfid , $fid );
} else {
return $name ;
}
}
//更改文件夹名称
public function rename_by_fid ( $fid , $name )
{
if ( ! $folder = parent :: fetch ( $fid )) return false ;
//如果文件夹有对应的rid
if ( $rid = C :: t ( 'resources' ) -> fetch_rid_by_fid ( $fid )) {
$return = C :: t ( 'resources' ) -> rename_by_rid ( $rid );
if ( $return [ 'error' ]) {
return false ;
} else {
return true ;
}
} else {
$name = self :: getFolderName ( $name , $folder [ 'pfid' ], $fid );
//更改路径表数据
if ( C :: t ( 'resources_path' ) -> update_path_by_fid ( $fid , $name )) {
//增加统计数
$statisdata = array (
'uid' => getglobal ( 'uid' ),
'edits' => 1 ,
'editdateline' => TIMESTAMP
);
C :: t ( 'resources_statis' ) -> add_statis_by_fid ( $fid , $statisdata );
//更改folder数据
return parent :: update ( $fid , array ( 'fname' => $name ));
} else {
return false ;
}
}
}
//查询组织id
public function fetch_gid_by_fid ( $fid , $i = 0 )
{
if ( ! $folder = parent :: fetch ( $fid )) return 0 ;
if ( $folder [ 'flag' ] == 'organization' ) return $folder [ 'gid' ];
elseif ( $folder [ 'pfid' ] > 0 ) {
$i ++ ;
if ( $i > 100 ) {
return $folder [ 'gid' ];
}
return self :: fetch_gid_by_fid ( $folder [ 'pfid' ], $i );
}
}
//查询路径
public function fetch_path_by_fid ( $fid , $fids = array ())
{
if ( ! $folder = parent :: fetch ( $fid )) return ;
$fids [] = $folder [ 'fid' ];
if ( $folder [ 'pfid' ] > 0 ) {
$fids = self :: fetch_path_by_fid ( $folder [ 'pfid' ], $fids );
}
return $fids ;
}
/*
此函数不会删除 $fid对应的 rid数据, 正常调用是作为C :: t ( 'resources' ) -> deletesourcedata () 的内部调用;
如果单独调用, 请注意这个fid应该没有对应的rid;
我的网盘 应用主目录 群组和部门主目录 都是没有对应的rid的特殊目录;
*/
public function delete_by_fid ( $fid , $force = false )
{ //清空目录
$folder = self :: fetch ( $fid );
//默认只允许删除文件夹和群组根目录,暂时不允许删除应用根目录
if ( ! $force && $folder [ 'flag' ] == 'app' ) {
return false ;
}
//判断删除权限
/* if ( ! perm_check :: checkperm_container ( $fid , 'delete' )) {
return array ( 'error' => lang ( 'no_privilege' ));
} */
$rids = array ();
$isdelrids = array ();
$nodelrids = array ();
//获取当前文件夹包含的删除状态数据,及非删除状态数据
foreach ( DB :: fetch_all ( " select rid,oid,isdelete from %t where pfid = %d " , array ( 'resources' , $fid , $fid )) as $v ) {
if ( $v [ 'isdelete' ] > 0 ) {
$isdelrids [] = $v [ 'rid' ];
} else {
$nodelrids [] = $v [ 'rid' ];
}
$rids [] = $v [ 'rid' ];
}
$delrids = array ();
if ( ! $force ) { //如果非强制彻底删除,只删除删除状态项
$delrids = $isdelrids ;
} else { //如果是强制删除,删除所有文件,包括非删除状态和删除状态文件
$delrids = $rids ;
//获取当前目录中在回收站中的数据
foreach ( DB :: fetch_all ( " select rid from %t where pfid = %d " , array ( 'resources_recyle' , $fid )) as $v ) {
$delrids [] = $v [ 'rid' ];
}
}
//执行删除
foreach ( $delrids as $value ) {
C :: t ( 'resources' ) -> delete_by_rid ( $value , $force );
}
//如果当前目录是非删除状态或者下级有不能彻底删除文件(未删除文件),则跳过当前目录删除,只清空回收站表数据
if ( ! $force && count ( $nodelrids ) > 0 ) {
return 2 ;
}
return self :: delete ( $fid );
}
//删除目录
public function delete ( $fid )
{
//删除路径表数据
C :: t ( 'resources_path' ) -> delete_by_fid ( $fid );
//删除文件夹属性表数据
C :: t ( 'folder_attr' ) -> delete_by_fid ( $fid );
//删除文件夹动态(只限于文件夹)
C :: t ( 'resources_event' ) -> delete_by_pfid_and_notrid ( $fid );
return parent :: delete ( $fid );
}
public function fetch_all_default_by_uid ( $uid )
{
return DB :: fetch_all ( " SELECT * FROM %t WHERE `default`!= '' and uid=%d " , array ( $this -> _table , $uid ), 'fid' );
}
public function fetch_typefid_by_uid ( $uid )
{
$data = array ();
foreach ( DB :: fetch_all ( " SELECT * FROM %t WHERE `flag`!= 'folder' and uid=' { $uid } ' and gid<1 " , array ( $this -> _table ), 'fid' ) as $value ) {
$data [ $value [ 'flag' ]] = $value [ 'fid' ];
}
return $data ;
}
public function fetch_all_by_pfid ( $pfid , $count )
{
global $_G ;
$wheresql = 'pfid = %d and isdelete<1' ;
if ( $folder = C :: t ( 'folder' ) -> fetch_by_fid ( $pfid )) {
$where1 = array ();
if ( ! $this -> noperm && $folder [ 'gid' ] > 0 ) {
$folder [ 'perm' ] = perm_check :: getPerm ( $folder [ 'fid' ]);
if ( $folder [ 'perm' ] > 0 ) {
if ( perm_binPerm :: havePower ( 'read1' , $folder [ 'perm' ])) {
$where1 [] = " uid =' { $_G [ uid ] } ' " ;
}
if ( perm_binPerm :: havePower ( 'read2' , $folder [ 'perm' ])) {
$where1 [] = " uid!=' { $_G [ uid ] } ' " ;
}
}
if ( $where1 ) $wheresql .= " and ( " . implode ( ' OR ' , $where1 ) . " ) " ;
else $wheresql .= " and 0 " ;
}
}
if ( $count ) return DB :: result_first ( " SELECT COUNT(*) FROM %t WHERE $wheresql " , array ( $this -> _table , $pfid ));
else return DB :: fetch_all ( " SELECT * FROM %t WHERE $wheresql " , array ( $this -> _table , $pfid ), 'fid' );
}
public function fetch_folderinfo_by_gid ( $gid )
{ //查询群组目录及文件基本信息
$gid = intval ( $gid );
if ( $info = DB :: fetch_first ( " select f.*,p.path from %t f left join %t p on f.fid = p.fid where gid = %d and flag = %s " , array ( $this -> _table , 'resources_path' , $gid , 'organization' ))) {
return $info ;
}
return false ;
}
public function fetch_fid_by_flag ( $flag )
{
$uid = getglobal ( 'uid' );
return DB :: result_first ( " select fid from %t where uid = %d and flag = %s " , array ( $this -> _table , $uid , $flag ));
}
public function fetch_fid_by_flags ( $flags )
{
if ( ! is_array ( $flags )) $flags = ( array ) $flags ;
$fids = array ();
foreach ( DB :: fetch_all ( " select fid from %t where flag in(%n) " , array ( $this -> _table , $flags )) as $v ) {
$fids [] = $v [ 'fid' ];
}
return $fids ;
}
public function fetch_folderinfo_by_fid ( $fid )
{ //查询群组目录及文件基本信息
$fid = intval ( $fid );
if ( ! $folderinfo = self :: fetch ( $fid )) {
return false ;
}
$pathinfo = C :: t ( 'resources_path' ) -> fetch_pathby_pfid ( $fid , true );
$info = array_merge ( $folderinfo , $pathinfo );
return $info ;
}
//获取文件夹权限
public function fetch_perm_by_fid ( $fid )
{
$perms = DB :: fetch_first ( " select perm,perm_inherit from %t where fid = %d " , array ( $this -> _table , $fid ));
if ( $perms [ 'perm' ]) {
return $perms [ 'perm' ];
} else {
return $perms [ 'perm_inherit' ];
}
}
public function fetch_folder_by_pfid ( $pfid , $field = array ())
{ //查询群组目录及文件夹基本信息
global $_G ;
$fielddata = '*' ;
if ( ! empty ( $field )) {
$fielddata = implode ( ',' , $field );
}
$pfid = intval ( $pfid );
$infoarr = array ();
if ( $folder = C :: t ( 'folder' ) -> fetch ( $pfid )) {
$where1 = array ();
if ( ! $this -> noperm && $folder [ 'gid' ] > 0 ) {
if ( perm_check :: checkperm_Container ( $folder [ 'fid' ], 'read2' )) {
$where1 [] = " 1 " ;
} elseif ( perm_check :: checkperm_Container ( $folder [ 'fid' ], 'read1' )) {
$where1 [] = " uid=' { $_G [ uid ] } ' " ;
}
$where1 = array_filter ( $where1 );
if ( ! empty ( $where1 )) $temp [] = " ( " . implode ( ' OR ' , $where1 ) . " ) " ;
else $temp [] = " 0 " ;
} else {
$temp [] = " uid=' { $_G [ uid ] } ' " ;
}
$where [] = '(' . implode ( ' and ' , $temp ) . ')' ;
unset ( $temp );
}
$wheresql = " where pfid = %d and flag != %s and " ;
if ( $where ) $wheresql .= implode ( ' AND ' , $where );
else return false ;
$infoarr = DB :: fetch_all ( " select $fielddata from %t $wheresql and isdelete < 1 order by
convert ( fname , UNSIGNED ) " .
" ,SUBSTRING_INDEX(fname,'-',1) " .
" ,convert(replace(replace(SUBSTRING_INDEX(fname,'-',2),SUBSTRING_INDEX(fname,'-',1),''),'-','') , UNSIGNED) " .
" ,convert(replace(replace(SUBSTRING_INDEX(fname,'-',3),SUBSTRING_INDEX(fname,'-',2),''),'-','') , UNSIGNED) " , array ( $this -> _table , $pfid , 'organization' ));
return $infoarr ;
}
//查询子文件夹fid
public function fetch_fid_by_pfid ( $pfid )
{
global $_G ;
$pfid = intval ( $pfid );
$infoarr = array ();
if ( $folder = C :: t ( 'folder' ) -> fetch ( $pfid )) {
$where1 = array ();
if ( ! $this -> noperm && $folder [ 'gid' ] > 0 ) {
$folder [ 'perm' ] = perm_check :: getPerm ( $folder [ 'fid' ]);
2023-01-31 16:43:25 +08:00
2022-11-02 23:21:46 +08:00
if ( $folder [ 'perm' ] > 0 ) {
if ( perm_binPerm :: havePower ( 'read2' , $folder [ 'perm' ])) {
$where1 [] = " 1 " ;
} elseif ( perm_binPerm :: havePower ( 'read1' , $folder [ 'perm' ])) {
$where1 [] = " uid=' { $_G [ uid ] } ' " ;
}
}
$where1 = array_filter ( $where1 );
if ( ! empty ( $where1 )) $temp [] = " ( " . implode ( ' OR ' , $where1 ) . " ) " ;
else $temp [] = " 0 " ;
} else {
$temp [] = " uid=' { $_G [ uid ] } ' " ;
}
$where [] = '(' . implode ( ' and ' , $temp ) . ')' ;
unset ( $temp );
}
$wheresql = " where pfid = %d and " ;
if ( $where ) $wheresql .= implode ( ' AND ' , $where );
else return false ;
$infoarr = DB :: fetch_all ( " select fid from %t $wheresql " , array ( $this -> _table , $pfid ));
return $infoarr ;
}
/* //查询所有有权限文件夹
public function fetch_all_fid ()
{
global $_G ;
$uid = $_G [ 'uid' ];
$fids = array ();
//个人根目录
$personfid = DB :: result_first ( " select fid from %t where uid = %d and flag = %s " , array ( $this -> _table , $uid , 'home' ));
$fids [] = $personfid ;
foreach ( $this -> fetch_all_folderfid_by_pfid ( $personfid ) as $v ) {
$fids [] = $v ;
}
//群组部门顶级目录
$orgs = C :: t ( 'organization' ) -> fetch_all_orgid ();
$orgids = $orgs [ 'orgids' ];
$fidarr = DB :: fetch_all ( " select fid from %t where orgid in(%n) " , array ( 'organization' , $orgids ));
//群组目录及下级所有目录fid
foreach ( $fidarr as $v ) {
$fids [] = $v [ 'fid' ];
foreach ( $this -> fetch_all_folderfid_by_pfid ( $v [ 'fid' ]) as $val ) {
$fids [] = $val ;
}
}
return $fids ;
} */
//查询目录下所有文件夹的fid
public function fetch_all_folderfid_by_pfid ( $pfid )
{
static $fids = array ();
foreach ( $this -> fetch_fid_by_pfid ( $pfid ) as $v ) {
$fids [] = $v [ 'fid' ];
$this -> fetch_fid_by_pfid ( $v [ 'fid' ]);
}
return $fids ;
}
//获取目录的所有上级目录
public function fetch_all_parent_by_fid ( $fid , $ret = array ())
{
if ( ! $folder = parent :: fetch ( $fid )) {
return $ret ;
}
$ret [] = $folder ;
if ( $folder [ 'pfid' ] > 0 ) {
$ret = self :: fetch_all_parent_by_fid ( $folder [ 'pfid' ], $ret );
}
return $ret ;
}
}