mirror of
https://github.com/DzzXH/DzzOffice.git
synced 2026-01-22 03:06:48 +08:00
600 lines
23 KiB
PHP
600 lines
23 KiB
PHP
<?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']);
|
||
|
||
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;
|
||
}
|
||
|
||
} |