1148 lines
46 KiB
PHP
1148 lines
46 KiB
PHP
<?php
|
||
/*
|
||
* @copyright QiaoQiaoShiDai Internet Technology(Shanghai)Co.,Ltd
|
||
* @license https://www.oaooa.com/licenses/
|
||
*
|
||
* @link https://www.oaooa.com
|
||
* @author zyx(zyx@oaooa.com)
|
||
*/
|
||
|
||
if (!defined('IN_OAOOA')) {
|
||
exit('Access Denied');
|
||
}
|
||
|
||
class table_organization extends dzz_table
|
||
{
|
||
private $_uids = array();
|
||
|
||
public function __construct()
|
||
{
|
||
|
||
$this->_table = 'organization';
|
||
$this->_pk = 'orgid';
|
||
$this->_pre_cache_key = 'organization_';
|
||
$this->_cache_ttl = 0;
|
||
|
||
parent::__construct();
|
||
}
|
||
/*获取所有下级部门
|
||
$count: >0 仅返回数量
|
||
$type: -1:全部部门或群组;1:仅群组;0;仅机构或部门
|
||
$forgid: 上级orgid,当$forgid=0时,获取所有一级
|
||
*/
|
||
public function fetch_all_by_forgid($forgid, $count = 0, $type = 0)
|
||
{
|
||
if ($count) $sql = 'SELECT COUNT(*) FROM %t WHERE forgid= %d';
|
||
else $sql = 'SELECT * FROM %t WHERE forgid= %d';
|
||
$param = array($this->_table, $forgid);
|
||
if ($type > -1) {
|
||
$sql .= ' and `type`=%d';
|
||
$param[] = $type;
|
||
}
|
||
if ($count) return DB::result_first($sql, $param);
|
||
return DB::fetch_all($sql . ' ORDER BY disp', $param, 'orgid');
|
||
}
|
||
|
||
/*
|
||
获取用户参与的部门或群组信息
|
||
$uid: 参与人,为空时为当前用户
|
||
$type: -1:全部部门或群组;1:仅群组;0;仅机构或部门
|
||
return array();
|
||
*/
|
||
public function fetch_all_by_uid($uid,$type=-1){
|
||
if(empty($uid)) $uid=getglobal('uid');
|
||
if(!$uid) return array();
|
||
if($orgids=C::t('organization_user')->fetch_orgids_by_uid($uid,$type)){
|
||
parent::fetch_all($orgids);
|
||
}
|
||
return array();
|
||
}
|
||
//插入数据
|
||
public function insert($arr){
|
||
if($orgid=parent::insert($arr,1)){
|
||
if(intval($arr['aid'])){//如果有头像图片,增加copys
|
||
C::t('attachment')->add_by_aid(intval($arr['aid']));
|
||
}
|
||
}
|
||
return $orgid;
|
||
}
|
||
|
||
//查询机构群组信息
|
||
public function fetch_all_orggroup($uid,$getmember = true)
|
||
{
|
||
global $_G;
|
||
$groups = array();
|
||
if($_G['adminid'] == 1){
|
||
$orgids = DB::fetch_all("select orgid from %t where `type`=%d and forgid = %d",array($this->_table,0,0));
|
||
foreach($orgids as $v){
|
||
$groups['org'][]= parent::fetch($v['orgid']);
|
||
}
|
||
}else{
|
||
if ($uid) {
|
||
$orgids = C::t('organization_user')->fetch_org_by_uid($uid);
|
||
$orgids = array_unique($orgids);
|
||
$toporgids = array();
|
||
foreach (parent::fetch_all($orgids) as $v) {
|
||
if ($v['type'] == 0) {
|
||
$patharr = explode('-', $v['pathkey']);
|
||
$toporgid = intval(str_replace('_', '', $patharr[0]));
|
||
if (in_array($toporgid, $toporgids)) {
|
||
continue;
|
||
}
|
||
$orginfo=parent::fetch($toporgid);
|
||
if (C::t('organization_admin')->chk_memberperm($toporgid, $uid) > 0) {
|
||
if($orginfo['syatemon'] == 1){
|
||
if($getmember){
|
||
$orginfo['usernum'] = C::t('organization_user')->fetch_num_by_toporgid($toporgid);
|
||
$orginfo['adminer'] = C::t('organization_admin')->fetch_adminer_by_orgid($toporgid);
|
||
}
|
||
$groups['org'][] = $orginfo;
|
||
}
|
||
//$orginfo = DB::fetch_first("select * from %t where `orgid` = %d and syatemon = %d ORDER BY disp", array($this->_table, $toporgid, 1));
|
||
|
||
} else {
|
||
if ($orginfo['syatemon'] == 1 && $orginfo['manageon'] == 1 && $orginfo['diron'] == 1) {
|
||
if($getmember){
|
||
$orginfo['usernum'] = C::t('organization_user')->fetch_num_by_toporgid($toporgid);
|
||
$orginfo['adminer'] = C::t('organization_admin')->fetch_adminer_by_orgid($toporgid);
|
||
}
|
||
$groups['org'][] = $orginfo;
|
||
}
|
||
}
|
||
$toporgids[] = $toporgid;
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
return $groups;
|
||
}
|
||
|
||
public function fetch_group_by_uid($uid, $foreces = false,$type = 1)
|
||
{//查询自定义群组,$foreces=true为jstree加载内容,进行群组开启判断
|
||
global $_G;
|
||
if (!$uid) return false;
|
||
$groups = array();
|
||
$orgids = C::t('organization_user')->fetch_orgids_by_uid($uid,1);
|
||
foreach (DB::fetch_all("select * from %t where `orgid` IN(%n) and forgid='0' and `type`=%d order by disp", array($this->_table, $orgids,$type)) as $orginfo) {
|
||
|
||
if ($foreces) {
|
||
if ($orginfo['syatemon'] == 0) {//系统管理员关闭群组
|
||
continue;
|
||
//如果是普通成员,判断群组是否关闭,暂时用diron来进行判断
|
||
} elseif ($orginfo['diron'] == 0 && C::t('organization_admin')->chk_memberperm($orginfo['orgid'], $uid) == 0) {//管理员关闭群组,当前用户不具备管理员权限
|
||
continue;
|
||
}
|
||
}
|
||
//jstree加载不需获取成员数和创建者
|
||
if(!$foreces){
|
||
$orginfo['usernum'] = C::t('organization_user')->fetch_usernums_by_orgid($orginfo['orgid']);
|
||
$orginfo['creater'] = C::t('organization_admin')->fetch_group_creater($orginfo['orgid']);
|
||
}
|
||
|
||
if ($orginfo['aid'] > 0) {
|
||
//群组图
|
||
$orginfo['imgs'] = 'index.php?mod=io&op=thumbnail&width=24&height=24&path=' . dzzencode('attach::' . $orginfo['aid']);
|
||
}
|
||
/* $contaions = C::t('resources')->get_contains_by_fid($orginfo['fid'],true);
|
||
$orginfo['ffsize'] = lang('property_info_size', array('fsize' => formatsize($contaions['size']), 'size' => $contaions['size']));
|
||
$orginfo['contain'] = lang('property_info_contain', array('filenum' => $contaions['contain'][0], 'foldernum' => $contaions['contain'][1]));*/
|
||
$groups[] = $orginfo;
|
||
}
|
||
return $groups;
|
||
}
|
||
|
||
public function delete_by_orgid($orgid,$force=false)
|
||
{
|
||
if (!$org = parent::fetch($orgid)) {
|
||
return array('error' => lang('remove_error_object_inexistence'));
|
||
}
|
||
if(!$force){
|
||
if (self::fetch_all_by_forgid($org['orgid'], true,-1) || ($org['fid'] && DB::result_first("select count(*) from %t where pfid = %d and isdelete < 1", array('resources', $org['fid'])))) {
|
||
return array('error' => lang('remove_error_check_the_content'));
|
||
}
|
||
}
|
||
|
||
if (parent::delete($orgid)) {
|
||
|
||
//删除对应事件
|
||
C::t('resources_event')->delete_by_gid($orgid);
|
||
//删除对应用户
|
||
C::t('organization_user')->delete_by_orgid($orgid);
|
||
//删除对应管理员
|
||
C::t('organization_admin')->delete_by_orgid($orgid);
|
||
//删除对应目录
|
||
/* if ($org['fid']) {
|
||
if($rid=C::t('resources')->fetch_rid_by_fid($org['fid'])){
|
||
C::t('resources')->delete_by_rid($rid,true);
|
||
}else{
|
||
C::t('folder')->delete_by_fid($org['fid'],true);
|
||
}
|
||
}*/
|
||
//清空对应的回收站
|
||
C::t('resources_recyle')->delete_by_gid($orgid);
|
||
|
||
if (intval($org['aid']) >0) {
|
||
C::t('attachment')->addcopy_by_aid($org['aid'], -1);
|
||
}
|
||
if( $org["type"]==0){//部门才同步
|
||
self::syn_organization($org['orgid'],'delete');
|
||
}
|
||
return $org;
|
||
} else {
|
||
return array('error' => lang('delete_error'));
|
||
}
|
||
}
|
||
|
||
|
||
//判断用户是否是该部门或机构下级成员
|
||
public function ismember($orgid,$uid=0,$onlychild = false)
|
||
{
|
||
if(!$org=parent::fetch($orgid)) return false;
|
||
//公共类群组判断是否有用户设置,无用户则视为成员,有则查询是否为成员
|
||
if($org['type']==2 && !DB::result_first("select count(*) from %t where orgid = %d",array('organization_user',$orgid))){
|
||
return true;
|
||
}
|
||
|
||
if(!$uid) $uid=getglobal('uid');
|
||
$pathkey = $org['pathkey'];
|
||
$orgids = array();
|
||
if($onlychild){
|
||
$pathkey = $pathkey . '-%';
|
||
}else{
|
||
$pathkey = $pathkey . '%';
|
||
}
|
||
foreach (DB::fetch_all("select orgid from %t where pathkey LIKE %s", array($this->_table, $pathkey)) as $v) {
|
||
$orgids[] = $v['orgid'];
|
||
}
|
||
if (DB::result_first("select count(*) from %t where orgid in (%n) and uid = %d ", array('organization_user', $orgids, $uid)) > 0) {
|
||
return true;
|
||
}
|
||
if($myorgids=C::t('organization_user')->fetch_orgids_by_uid($uid)){
|
||
if($gids=C::t('organization')->fetch_parent_by_orgid($myorgids)){
|
||
if(DB::result_first("select id from %t where orgid in (%n) and guid IN(%n)",array('organization_guser',$orgids,$gids)) > 0){
|
||
return true;
|
||
}
|
||
}
|
||
}else{//无机构人员
|
||
if(DB::result_first("select id from %t where orgid in (%n) and guid ='0'",array('organization_guser',$orgids)) > 0){
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
|
||
//获取机构部门下级
|
||
public function fetch_org_by_uidorgid($uid, $orgid,$orgtype='0')
|
||
{
|
||
|
||
$resultarr = array();
|
||
//如果该用户是当前部门普通成员则不获取下级机构信息,如果是下级机构成员或当前机构管理员则获取下级部门信息
|
||
if (C::t('organization_admin')->chk_memberperm($orgid, $uid)) {//如果是管理员
|
||
$resultarr = array();
|
||
foreach(self::fetch_all_by_forgid($orgid,0,$orgtype) as $value){
|
||
if(!$value['diron']) continue;
|
||
$resultarr[]=$value;
|
||
}
|
||
|
||
} elseif ($this->ismember($orgid,$uid,true)) {//如果是当前机构或部门下级的成员
|
||
$orgids = C::t('organization_user')->fetch_orgids_by_uid($uid,$orgtype);
|
||
$pathkeyarr = DB::fetch_all("select pathkey from %t where orgid in (%n) ", array($this->_table, $orgids));
|
||
$porgids = array();
|
||
foreach ($pathkeyarr as $v) {
|
||
$vs = str_replace('_', '', $v['pathkey']);
|
||
$varr = explode('-', $vs);
|
||
$porgids = array_merge($porgids,$varr);
|
||
}
|
||
|
||
$orgsarr = self::fetch_all_by_forgid($orgid,0,$orgtype);
|
||
$orgidarr = array();
|
||
foreach ($orgsarr as $v) {
|
||
|
||
if (!in_array($v['orgid'], $orgidarr) && in_array($v['orgid'], $porgids)) {
|
||
|
||
if (C::t('organization_admin')->chk_memberperm($v['orgid'], $uid) > 0 && $v['syatemon'] == 1 ) {
|
||
$resultarr[] = $v;
|
||
} elseif ($v['syatemon'] && $v['manageon'] && $v['diron']) {
|
||
$resultarr[] = $v;
|
||
}
|
||
$orgidarr[] = $v['orgid'];
|
||
}
|
||
}
|
||
|
||
}
|
||
//print_r($resultarr);
|
||
return $resultarr;
|
||
}
|
||
|
||
//获取包含当前机构或部门包含下级的orgid
|
||
public function get_all_contaionchild_orgid($orgid, $uid)
|
||
{
|
||
$orgids = array();
|
||
if (!$org = self::fetch($orgid)) {
|
||
return $orgids;
|
||
}
|
||
if ($org['type'] == 1) {
|
||
$orgids[] = $orgid;
|
||
return $orgids;
|
||
}
|
||
if (C::t('organization_admin')->chk_memberperm($orgid, $uid)) {//如果是管理员
|
||
$orgids = self::get_childorg_by_orgid($orgid);
|
||
} elseif ($this->ismember($uid, $orgid,true)) {//如果不是管理员,判断是否是下级成员
|
||
$orgidarrs = array();
|
||
//获取当前用户所在的所有群组id
|
||
foreach (DB::fetch_all("select o.orgid,o.pathkey,o.manageon,o.diron from %t u left join %t o on o.orgid = u.orgid where u.uid = %d and o.type = 0", array('organization_user', 'organization', $uid)) as $v) {
|
||
$pathkey = $v['pathkey'];
|
||
$orgidarr = explode('-', str_replace('_', '', $pathkey));
|
||
if (in_array($orgid, $orgidarr)) {
|
||
foreach ($orgidarr as $v) {
|
||
$orgidarrs[] = $v;
|
||
}
|
||
}
|
||
}
|
||
$orgids = array_unique($orgidarrs);
|
||
}
|
||
return $orgids;
|
||
}
|
||
|
||
//获取当前部门或机构的下级
|
||
public function get_childorg_by_orgid($orgid)
|
||
{
|
||
$orgidarr = array();
|
||
if (!$orgid) return $orgidarr;
|
||
$pathkey = DB::result_first("select pathkey from %t where orgid = %d", array($this->_table, $orgid));
|
||
$orgids = DB::fetch_all("select orgid from %t where pathkey LIKE %s ", array($this->_table, $pathkey . '%'));
|
||
foreach ($orgids as $v) {
|
||
$orgidarr[] = $v['orgid'];
|
||
}
|
||
return $orgidarr;
|
||
}
|
||
|
||
//获取机构群组的上级id
|
||
public function fetch_parent_by_orgid($orgids,$onlyid=true)
|
||
{
|
||
if(!is_array($orgids)) $orgids=array($orgids);
|
||
$ret=array();
|
||
foreach(DB::fetch_all("select pathkey from %t where orgid IN(%n)", array($this->_table, $orgids)) as $value){
|
||
$path = str_replace('_', '', $value['pathkey']);
|
||
$patharr = explode('-', $path);
|
||
if($patharr) $ret=array_merge($ret,$patharr);
|
||
}
|
||
|
||
if($onlyid){
|
||
return $ret;
|
||
}else{
|
||
return parent::fetch_all($ret);
|
||
}
|
||
}
|
||
|
||
//将available修改为diron,后期将调整
|
||
public function setFolderAvailableByOrgid($orgid, $available=0)
|
||
{
|
||
if (!$org = parent::fetch($orgid)) return false;
|
||
if ($available > 0 && $org['forgid'] > 0) {//上级没有开启目录共享,下级无法开启
|
||
$parent = parent::fetch($org['forgid']);
|
||
if ($parent['diron'] < 1) return false;
|
||
}
|
||
if (parent::update($orgid, array('diron' => $available))) {
|
||
//self::setFolderByOrgid($orgid);
|
||
//include_once libfile('function/cache');
|
||
//updatecache('organization');
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
//暂时将syatemon调整为manageon
|
||
public function setgroupByOrgid($orgid, $groupon=0)
|
||
{
|
||
if (!$org = parent::fetch($orgid)) return false;
|
||
/*if ($groupon > 0 && $org['forgid'] > 0) {
|
||
$toporgid = self::getTopOrgid($orgid);
|
||
$top = parent::fetch($toporgid);
|
||
if ($top['manageon'] < 1) return false;
|
||
}*/
|
||
if (parent::update($orgid, array('manageon' => $groupon))) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
public function setIndeskByOrgid($orgid, $indesk)
|
||
{
|
||
if (!$org = parent::fetch($orgid)) return false;
|
||
if ($indesk > 0) {
|
||
if ($org['available'] < 1) return false;
|
||
}
|
||
if (parent::update($orgid, array('indesk' => $indesk))) {
|
||
/*include_once libfile('function/cache');
|
||
updatecache('organization');*/
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
public function setFolderByOrgid($orgid,$flag='organization')
|
||
{
|
||
return true;
|
||
$flag=($flag) ? $flag:'organization';
|
||
if (!$org = parent::fetch($orgid)) return false;
|
||
if ($org['forgid'] == 0) {
|
||
$pfid = 0;
|
||
} else {
|
||
$pfid = DB::result_first("select fid from " . DB::table($this->_table) . " where orgid='{$org['forgid']}'");
|
||
}
|
||
|
||
if ($fid = DB::result_first("select fid from " . DB::table('folder') . " where gid='{$orgid}' and flag='{$flag}'")) {
|
||
if(C::t('folder')->rename_by_fid($fid,$org['orgname'])){
|
||
self::update($orgid, array('fid' => $fid));
|
||
}
|
||
} else {
|
||
$perm=0;
|
||
if($flag=='organization'){
|
||
$perm=perm_binPerm::getGroupPower('read');
|
||
}
|
||
$params=array(
|
||
'flag'=>$flag,
|
||
'innav' => $org['available'],
|
||
'display' => $org['disp'],
|
||
'gid' => $orgid,
|
||
);
|
||
|
||
$ret=IO::CreateFolder($pfid, $org['orgname'], $perm, $params,'newcopy',true);
|
||
$fid=$ret['folderarr']['fid'];
|
||
}
|
||
if ($fid) {
|
||
self::update($orgid, array('fid' => $fid));
|
||
return $fid;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
public function setDispByOrgid($orgid, $disp, $forgid = 0)
|
||
{
|
||
if (!$org = parent::fetch($orgid)) return false;
|
||
|
||
if ($torg = DB::fetch_first("select disp,orgid from %t where forgid=%d and orgid!=%d order by disp limit %d,1", array($this->_table, $forgid, $orgid, $disp))) {
|
||
$disp = $torg['disp'];
|
||
|
||
foreach (DB::fetch_all("select orgid,disp from %t where disp>%d and forgid=%d", array($this->_table, $disp, $forgid)) as $value) {
|
||
parent::update($value['orgid'],array('disp'=>$value['disp']+1));
|
||
//self::wx_update($value['orgid']);
|
||
}
|
||
|
||
} else {
|
||
$disp = DB::result_first("select max(disp) from %t where forgid=%d", array($this->_table, $forgid)) + 1;
|
||
}
|
||
if ($return = parent::update($orgid, array('disp' => $disp, 'forgid' => $forgid))) {
|
||
|
||
if ($org['forgid'] != $forgid) {
|
||
//检查重名
|
||
$orgname = self::get_uniqueName_by_forgid($forgid, $org['orgname'], $org['orgid']);
|
||
if ($orgname != $org['orgname']) {//有重名
|
||
self::update_by_orgid($org['orgid'], array('orgname' => $orgname));
|
||
}
|
||
//重新设置所有下级机构的共享目录
|
||
/* if ($pathkey = self::setPathkeyByOrgid($orgid)) {
|
||
$like = $pathkey.'%';
|
||
foreach (DB::fetch_all("select orgid from %t where pathkey LIKE %s", array($this->_table, $like)) as $value) {
|
||
self::setFolderByOrgid($value['orgid']);
|
||
}
|
||
}*/
|
||
}
|
||
if ($disp > 10000) {
|
||
foreach (DB::fetch_all("select orgid ,disp from %t where forgid=%d", array($this->_table, $forgid)) as $value) {
|
||
parent::update($value['orgid'],array('disp'=>$value['disp']-9000));
|
||
}
|
||
}
|
||
return $return;
|
||
} else {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
public function getDispByOrgid($borgid)
|
||
{
|
||
$data = parent::fetch($borgid);
|
||
$disp = $data['disp'] + 1;
|
||
// DB::query("update %t SET disp=disp+1 where disp>=%d and forgid=%d", array($this->_table, $disp, $data['forgid']));
|
||
return $disp;
|
||
}
|
||
|
||
public function chk_by_orgname($orgname,$type = 0,$forgid=0)
|
||
{
|
||
if (DB::result_first("select count(*) from %t where orgname = %s and `type` = %d and forgid = %d", array($this->_table, $orgname,$type,$forgid)) > 0) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
public function insert_by_orgid($setarr, $synwx = 1,$flag='')
|
||
{
|
||
$setarr['orgname'] = self::get_uniqueName_by_forgid($setarr['forgid'], $setarr['orgname']);
|
||
if ($setarr['orgid'] = parent::insert($setarr, true)) {
|
||
//self::setFolderByOrgid($org['orgid']);
|
||
//include_once libfile('function/cache');
|
||
//updatecache('organization');
|
||
$uid = getglobal('uid');
|
||
$username = getglobal('username');
|
||
//$fid = self::setFolderByOrgid($setarr['orgid'],$flag);//添加对应群组目录,默认未启用
|
||
//添加自定义群组时,添加对应创始人
|
||
if ($setarr['type'] == 1) {
|
||
C::t('organization_user')->insert_by_orgid($setarr['orgid'],$uid);
|
||
C::t('organization_admin')->insert($uid, $setarr['orgid'], 2);
|
||
}
|
||
//添加对应动态
|
||
//$eventdata = array('groupname' => $setarr['orgname'], 'uid' => getglobal('uid'), 'username' => getglobal('username'));
|
||
// C::t('resources_event')->addevent_by_pfid($fid, 'create_group', 'create', $eventdata, $setarr['orgid']);
|
||
self::setPathkeyByOrgid($setarr['orgid']);
|
||
return $setarr['orgid'];
|
||
}
|
||
return false;
|
||
}
|
||
|
||
public function insert_by_forgid($setarr, $borgid)
|
||
{
|
||
if ($borgid) {
|
||
$setarr['disp'] = self::getDispByOrgid($borgid);
|
||
}
|
||
$setarr['orgname'] = self::get_uniqueName_by_forgid($setarr['forgid'], $setarr['orgname']);
|
||
if ($setarr['orgid'] = parent::insert($setarr, true)) {
|
||
//self::setFolderByOrgid($setarr['orgid']);
|
||
//include_once libfile('function/cache');
|
||
//updatecache('organization');
|
||
if (isset($setarr['type']) && $setarr['type'] != 0) {
|
||
$uid = getglobal('uid');
|
||
C::t('organization_admin')->insert($uid, $setarr['orgid'], 1);
|
||
}
|
||
|
||
self::setPathkeyByOrgid($setarr['orgid']);
|
||
if(isset($setarr['type']) && $setarr['type'] == 0 ) self::syn_organization($setarr['orgid']);
|
||
return $setarr;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
public function syn_organization( $data=array(),$type="update" ){
|
||
if( $type=="update"){
|
||
Hook::listen('syntoline_department',$data);//注册绑定到三方部门表
|
||
}else if( $type=="delete"){
|
||
Hook::listen('syntoline_department',$data,"del");//删除对应到三方部门表
|
||
}
|
||
}
|
||
|
||
public function update_by_orgid($orgid, $setarr, $synwx = 1)
|
||
{
|
||
if (!$org = self::fetch($orgid)) return false;
|
||
if (isset($setarr['orgname'])) {
|
||
$fid = $org['fid'];
|
||
$name = self::get_uniqueName_by_forgid($org['forgid'], getstr($setarr['orgname']), $orgid);
|
||
/*if (C::t('folder')->rename_by_fid($fid, $name)) {
|
||
if (parent::update($orgid, array('orgname' => $name))) {
|
||
$body_data = array('username' => getglobal('username'), 'oldname' => $org['orgname'], 'newname' => $name);
|
||
$event_body = 'update_group_name';
|
||
C::t('resources_event')->addevent_by_pfid($org['fid'], $event_body, 'update_groupname', $body_data, $orgid, '', $org['orgname']);//记录事件
|
||
if( $synwx && $org['type']==0) self::syn_organization($orgid);
|
||
}
|
||
unset($setarr['orgname']);
|
||
}*/
|
||
|
||
}
|
||
|
||
if (isset($setarr['perm']) && $setarr['perm']) {
|
||
$fid = $org['fid'];
|
||
C::t('folder')->update($fid, array('perm' => $setarr['perm']));
|
||
unset($setarr['perm']);
|
||
}
|
||
if (isset($setarr['desc'])) {
|
||
$setarr['desc'] = htmlspecialchars($setarr['desc']);
|
||
}
|
||
if (empty($setarr)) return true;
|
||
if (parent::update($orgid, $setarr)) {
|
||
//处理图标copys数
|
||
if(isset($setarr['aid'])){
|
||
$oaid=intval($org['aid']);
|
||
$aid=intval($setarr['aid']);
|
||
if($oaid){
|
||
C::t('attachment')->addcopy_by_aid($oaid,-1);
|
||
}
|
||
if($aid){
|
||
C::t('attachment')->addcopy_by_aid($aid);
|
||
}
|
||
}
|
||
$org = array_merge($org, $setarr);
|
||
if(empty($org['fid'])) self::setFolderByOrgid($org['orgid']);
|
||
$body_data = array('username' => getglobal('username'));
|
||
$event_body = 'update_group_setting';
|
||
C::t('resources_event')->addevent_by_pfid($org['fid'], $event_body, 'update_setting', $body_data, $orgid, '', $org['orgname']);//记录事件
|
||
self::setPathkeyByOrgid($orgid);
|
||
if( $synwx && $org['type']==0 ) self::syn_organization($orgid);
|
||
return true;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
public function getTopOrgid($orgid)
|
||
{
|
||
include_once libfile('function/organization');
|
||
$ids = self::fetch_parent_by_orgid($orgid);
|
||
return $ids[0];
|
||
}
|
||
public function getUpOrgidTree($orgid,$pids=array()){
|
||
global $_G;
|
||
if($org=C::t('organization')->fetch($orgid)){
|
||
//$pids[]=$orgid;
|
||
array_unshift($pids,$orgid);
|
||
$pids=self::getUpOrgidTree($org['forgid'],$pids);
|
||
}
|
||
return ($pids);
|
||
}
|
||
|
||
public function setPathkeyByOrgid($orgid, $force = 0)
|
||
{ //设置此机构的pathkey的值,$force>0 重设此部门的pathkey
|
||
@set_time_limit(0);
|
||
if (!$org = parent::fetch($orgid)) return false;
|
||
|
||
if ($force || empty($org['pathkey'])) {//没有pathkey,
|
||
// include_once libfile('function/organization');
|
||
if($ids=self::getUpOrgidTree($org['orgid'])){
|
||
$pathkey='_'.implode('_-_',$ids).'_';
|
||
if( parent::update($org['orgid'],array('pathkey'=>$pathkey))) return $pathkey;
|
||
}
|
||
return false;
|
||
}
|
||
//设置所有子部门的pathkey;
|
||
if ($org['forgid'] && ($porg = parent::fetch($org['forgid']))) {
|
||
$npathkey = $porg['pathkey'] . '-' . '_' . $orgid . '_';
|
||
} else {
|
||
$npathkey = '_' . $orgid . '_';
|
||
}
|
||
if ($org['pathkey'] == $npathkey) return $npathkey; //没有改变;
|
||
$like = $org['pathkey'].'%';
|
||
foreach(DB::fetch_all("select orgid,pathkey from %t where pathkey LIKE %s", array($this->_table, $like)) as $value){
|
||
parent::update($value['orgid'],array('pathkey'=>str_replace($org['pathkey'],$npathkey,$value['pathkey'])));
|
||
}
|
||
/*if (DB::query("update %t set pathkey=REPLACE(pathkey,%s,%s) where pathkey REGEXP %s", array($this->_table, $org['pathkey'], $npathkey, $like))) {
|
||
return $npathkey;
|
||
}*/
|
||
|
||
}
|
||
|
||
|
||
public function wx_update($orgid)
|
||
{
|
||
global $_G;
|
||
if (!$this->_wxbind) return;
|
||
if (!$org = parent::fetch($orgid)) return false;
|
||
if ($org['type'] > 0) {//群主类型不同步至微信
|
||
return false;
|
||
}
|
||
$wx = new qyWechat(array('appid' => $_G['setting']['CorpID'], 'appsecret' => $_G['setting']['CorpSecret'], 'agentid' => 0));
|
||
$wd = array();
|
||
if ($wxdepart = $wx->getDepartment()) {
|
||
foreach ($wxdepart['department'] as $value) {
|
||
$wd[$value['id']] = $value;
|
||
}
|
||
} else {
|
||
return false;
|
||
}
|
||
if ($org['forgid']) {
|
||
if (($forg = parent::fetch($org['forgid'])) && !$forg['worgid']) {
|
||
if ($worgid = self::wx_update($forg['orgid'])) {
|
||
$forg['worgid'] = $worgid;
|
||
} else {
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
$parentid = ($org['forgid'] == 0 ? 1 : $forg['worgid']);
|
||
if ($org['worgid'] && $wd[$org['worgid']] && $parentid == $wd[$org['worgid']]['parentid']) {//更新机构信息
|
||
$data = array("id" => $org['worgid']);
|
||
|
||
if ($wd[$org['worgid']]['name'] != $org['orgname']) $data['name'] = $org['orgname'];
|
||
if ($wd[$org['worgid']]['parentid'] != $parentid) $data['parentid'] = $parentid;
|
||
if ($wd[$org['worgid']]['order'] != $org['order']) $data['order'] = $org['order'];
|
||
if ($data) $data['id'] = $org['worgid'];
|
||
if ($data) {
|
||
if (!$wx->updateDepartment($data)) {
|
||
$message = 'updateDepartment:errCode:' . $wx->errCode . ';errMsg:' . $wx->errMsg;
|
||
runlog('wxlog', $message);
|
||
return false;
|
||
}
|
||
}
|
||
return $org['worgid'];
|
||
|
||
} else {
|
||
$data = array(
|
||
"name" => $org['orgname'], //部门名称
|
||
"parentid" => $org['forgid'] == 0 ? 1 : $forg['worgid'], //父部门id
|
||
"order" => $org['disp'] + 1, //(非必须)在父部门中的次序。从1开始,数字越大排序越靠后
|
||
);
|
||
if ($ret = $wx->createDepartment($data)) {
|
||
parent::update($orgid, array('worgid' => $ret['id']));
|
||
return $ret['id'];
|
||
} else {
|
||
if ($wx->errCode == '60008') {//部门的worgid不正确导致的问题
|
||
foreach ($wd as $value) {
|
||
if ($value['name'] == $data['name'] && $value['parentid'] = $data['parentid']) {
|
||
C::t('organization')->update($org['orgid'], array('worgid' => $value['id']));
|
||
return $value['id'];
|
||
}
|
||
}
|
||
}
|
||
$message = 'createDepartment:errCode:' . $wx->errCode . ';errMsg:' . $wx->errMsg;
|
||
runlog('wxlog', $message);
|
||
return false;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
|
||
public function getPathByOrgid($orgid,$space='-')
|
||
{
|
||
$ret = array();
|
||
if ($org = parent::fetch($orgid)) {
|
||
$ids = explode('-', str_replace('_', '', $org['pathkey']));
|
||
$arr = parent::fetch_all($ids);
|
||
foreach ($ids as $id) {
|
||
if ($arr[$id]) $ret[] = $arr[$id]['orgname'];
|
||
}
|
||
}
|
||
if($space) $ret=implode($space,$ret);
|
||
return $ret;
|
||
}
|
||
//获取用户有权限的orgids;
|
||
public function fetch_orgids_by_uid($uid=0){
|
||
if(!$uid) $uid=getglobal('uid');
|
||
$orgids=array();
|
||
foreach(DB::fetch_all("select orgid from %t where uid = %d", array('organization_user', $uid)) as $value){
|
||
$orgids[$value['orgid']]=$value['orgid'];
|
||
}
|
||
if($orgids){
|
||
if($gids=C::t('organization')->fetch_parent_by_orgid($orgids)){
|
||
foreach(DB::fetch_all("select orgid from %t where guid IN(%n)",array('organization_guser',$gids)) as $value){
|
||
$orgids[$value['orgid']]=$value['orgid'];
|
||
}
|
||
}
|
||
}else{//无机构用户
|
||
foreach(DB::fetch_all("select orgid from %t where guid ='0'",array('organization_guser')) as $value){
|
||
$orgids[$value['orgid']]=$value['orgid'];
|
||
}
|
||
}
|
||
return $orgids;
|
||
}
|
||
//获取用户有权限的机构orgid
|
||
public function fetch_all_orgid($type = 2)
|
||
{
|
||
global $_G;
|
||
$uid = $_G['uid'];
|
||
//获取当前用户参与的机构和群组
|
||
$orgids = array();
|
||
$orgids_admin = array();
|
||
$orgids_member = array();
|
||
$explorer_setting = get_resources_some_setting();
|
||
$types=array('0');
|
||
if ($explorer_setting['grouponperm']){
|
||
$types[]="(o.type='1' and o.forgid='0')";
|
||
}
|
||
if ($explorer_setting['orgonperm']){
|
||
$types[]="o.type='0'";
|
||
}
|
||
$typesql=implode(' OR ',$types);
|
||
if($_G['adminid'] == 1){
|
||
$orgdatas = DB::fetch_all("select o.orgid from %t o where 1 and ($typesql)", array('organization'));
|
||
}else{
|
||
$orgdatas = DB::fetch_all("select u.orgid from %t u left join %t o on u.orgid=o.orgid where u.uid = %d and (($typesql))", array('organization_user', 'organization', $uid));
|
||
}
|
||
foreach ($orgdatas as $v) {
|
||
$orgids[] = $v['orgid'];
|
||
}
|
||
|
||
//获取对应权限的机构orgid
|
||
foreach ($orgids as $val) {
|
||
//当前机构或部门管理员,查询所有下级和上级
|
||
if (C::t('organization_admin')->chk_memberperm($val, $uid)) {
|
||
$path = DB::result_first("select pathkey from %t where orgid = %d", array($this->_table, $val));
|
||
$patharr = DB::fetch_all("select pathkey from %t where pathkey LIKE %s and available = %d", array($this->_table, $path . '%', 1));
|
||
foreach ($patharr as $v) {
|
||
$pathstr = str_replace('_', '', $v['pathkey']);
|
||
if ($orgidarr = explode('-', $pathstr)) $orgids_admin = array_merge($orgids_admin, $orgidarr);
|
||
}
|
||
|
||
} else {//当前部门成员查询所有上级机构
|
||
$path = DB::result_first("select pathkey from %t where orgid = %d and available = %d and diron = %d", array($this->_table, $val, 1, 1));
|
||
$pathstr = str_replace('_', '', $path);
|
||
if ($orgidarr = explode('-', $pathstr)) $orgids_member = array_merge($orgids_member, $orgidarr);
|
||
|
||
}
|
||
}
|
||
$member_orgids = array();
|
||
//判断参与群组的群组开启和文件开启
|
||
foreach (DB::fetch_all('select manageon,diron,orgid from %t where orgid in(%n)', array($this->_table, $orgids_member)) as $v) {
|
||
if ($v['manageon'] && $v['diron']) {
|
||
$member_orgids[] = $v['orgid'];
|
||
}
|
||
}
|
||
return array('orgids' => array_unique(array_merge($orgids_admin, $member_orgids)), 'orgids_admin' => array_unique($orgids_admin), 'orgids_member' => array_unique(array_diff($member_orgids, $orgids_admin)));
|
||
}
|
||
|
||
//获取用户管理的所有群组orgid
|
||
public function fetch_all_manage_orgid($forgid=0)
|
||
{
|
||
$uid = getglobal('uid');
|
||
$explorer_setting = get_resources_some_setting();
|
||
$orgids = array();
|
||
$orgarr = array();
|
||
foreach (DB::fetch_all("select o.* from %t a LEFT JOIN %t o ON o.orgid=a.orgid where a.uid = %d", array('organization_admin','organization', $uid))as $v) {
|
||
if (!in_array($v['orgid'], $orgarr)) {
|
||
if($forgid){
|
||
if($v['forgid']!=$forgid) continue;
|
||
}else{
|
||
if($v['type']==1 && $v['forgid']<1) continue;
|
||
elseif($v['type']==2) continue;
|
||
}
|
||
if (!$explorer_setting['grouponperm'] && ($v['type'] == 1 && $v['forgid']==0)) {
|
||
continue;
|
||
}
|
||
if (!$explorer_setting['orgonperm'] && $v['type'] == 0) {
|
||
continue;
|
||
}
|
||
$pathkey = $v['pathkey'];
|
||
|
||
foreach (DB::fetch_all("select orgid,orgname from %t where pathkey LIKE %s ", array($this->_table, $pathkey . '%')) as $val) {
|
||
$orgids[$val['orgid']] = array('orgid' => $val['orgid'], 'orgname' => $val['orgname']);
|
||
$orgarr[]=$val['orgid'];
|
||
}
|
||
}
|
||
}
|
||
return $orgids;
|
||
}
|
||
|
||
//我参与的所有群组和机构
|
||
public function fetch_all_part_org($forgid=0)
|
||
{
|
||
$uid = getglobal('uid');
|
||
$explorer_setting = get_resources_some_setting();
|
||
$orgarr = array();
|
||
$orgids=array();
|
||
foreach(DB::fetch_all("select o.* from %t u LEFT JOIN %t o ON o.orgid=u.orgid where u.uid = %d",array('organization_user','organization', $uid)) as $v) {
|
||
|
||
if (!in_array($v['orgid'], $orgids)) {
|
||
if($forgid){
|
||
if($v['forgid']!=$forgid) continue;
|
||
}else{
|
||
if($v['type']==1 && $v['forgid']>0) continue;
|
||
elseif($v['type']==2) continue;
|
||
}
|
||
|
||
if (!$explorer_setting['grouponperm'] && ($v['type'] == 1 && $v['forgid']==0)) {
|
||
continue;
|
||
}
|
||
if (!$explorer_setting['orgonperm'] && $v['type'] == 0) {
|
||
continue;
|
||
}
|
||
}
|
||
$orgids[]=$v['orgid'];
|
||
$org = array('orgid' => $v['orgid'], 'orgname' => $v['orgname']);
|
||
$orgarr[] = $org;
|
||
}
|
||
return $orgarr;
|
||
}
|
||
|
||
//获取群组类型
|
||
public function get_grouptype_by_orgid($orgid)
|
||
{
|
||
if (!is_array($orgid)) {
|
||
return DB::result_first("select `type` from %t where orgid = %d", array($this->_table, $orgid));
|
||
} else {
|
||
$orgtypes = array();
|
||
foreach (DB::fetch_all("select orgid,`type` from %t where orgid in(%n)", array($this->_table, $orgid)) as $v) {
|
||
if ($v['type'] == 0) {
|
||
$orgtypes['org'][] = $v['orgid'];
|
||
} else {
|
||
$orgtypes['group'][] = $v['orgid'];
|
||
}
|
||
|
||
}
|
||
return $orgtypes;
|
||
}
|
||
|
||
}
|
||
|
||
public function get_uniqueName_by_forgid($forgid, $orgname = '', $orgid = 0)
|
||
{
|
||
static $i = 0;
|
||
if (empty($orgname)) $orgname = lang('new_department');
|
||
|
||
if (DB::result_first("select COUNT(*) from %t where orgname=%s and forgid=%d and orgid!=%d", array($this->_table, $orgname, $forgid, $orgid))) {
|
||
$orgname = preg_replace("/\(\d+\)/i", '', $orgname) . '(' . ($i + 1) . ')';
|
||
$i += 1;
|
||
return self::get_uniqueName_by_forgid($forgid, $orgname);
|
||
} else {
|
||
return $orgname;
|
||
}
|
||
}
|
||
|
||
/*空间相关*/
|
||
|
||
/* 获取当前部门机构空间含有的空间限制值(从上向下)
|
||
* 包含未分配空间的机构或部门已使用空间(单位为B)
|
||
* $owner参数,默认为true即包含自身空间限制占用,设为false,不包含自身空间限制占用
|
||
* */
|
||
public function get_orgallotspace_by_orgid($orgid, $allotspace = 0, $owner = true)
|
||
{
|
||
$org = self::fetch($orgid);
|
||
|
||
//如果当前部门有空间限制值,则返回该值
|
||
if ($org['maxspacesize'] > 0 && $owner) {
|
||
|
||
$allotspace += $org['maxspacesize'] * 1024 * 1024;
|
||
|
||
} else {//如果当前部门没有分配空间,寻找下级分配空间之和
|
||
|
||
//当前机构或部门已使用空间大小
|
||
$allotspace += intval($org['usesize']);
|
||
//下级部门分配空间大小
|
||
foreach (DB::fetch_all("select orgid from %t where forgid = %d", array($this->_table, $orgid)) as $val) {
|
||
$allotspace += self::get_orgallotspace_by_orgid($val['orgid']);
|
||
}
|
||
}
|
||
return $allotspace;
|
||
}
|
||
|
||
|
||
/* *
|
||
* 获取系统可分配空间大小
|
||
* 如果系统无空间限制,返回0
|
||
* 如果系统空间设置为-1,返回-1
|
||
* 如果系统空间有设置,且空间使用量超出或等于分配和,返回-2,否则返回剩余可分配值(单位为B)
|
||
* */
|
||
public function get_system_allowallot_space()
|
||
{
|
||
global $_G;
|
||
|
||
//获取系统空间设置值
|
||
$systemspace = isset($_G['setting']['systemSpace']) ? intval($_G['setting']['systemSpace']) : 0;
|
||
|
||
//系统空间无限制时
|
||
if ($systemspace == 0) {
|
||
|
||
$allowallotspace = 0;
|
||
|
||
} elseif ($systemspace < 0) {//系统空间关闭时
|
||
|
||
$allowallotspace = -1;
|
||
|
||
} elseif ($systemspace > 0) {//设置系统空间限制时
|
||
|
||
//获取所有顶级机构和群组空间限制值
|
||
$fpathkey = DB::fetch_all("select maxspacesize,orgid from %t where forgid = 0", array($this->_table));
|
||
|
||
$allotspace = 0;
|
||
foreach ($fpathkey as $v) {
|
||
|
||
//如果顶级机构有限制值,计算入限制值当中
|
||
if ($v['maxspacesize'] > 0) {
|
||
|
||
$allotspace += intval($v['maxspacesize']) * 1024 * 1024;
|
||
} else {//如果当前顶级机构没有限制值,获取当前机构已使用空间值+下层机构限制值之和(包含下层机构无限制的已使用空间)
|
||
$allotspace += self::get_orgallotspace_by_orgid($v['orgid']);
|
||
}
|
||
}
|
||
//用户分配空间值
|
||
$allotspace += C::t('user')->get_allotspace();
|
||
$allowallotspace = $systemspace * 1024 * 1024 - $allotspace;
|
||
|
||
|
||
if ($allowallotspace <= 0) {
|
||
$allowallotspace = -2;
|
||
}
|
||
}
|
||
return $allowallotspace;
|
||
|
||
}
|
||
|
||
/*
|
||
* 获取当前部门空间限制值
|
||
*从下到上依次查找,如果未找到空间限制,则获取系统空间限制,返回值单位为B
|
||
* */
|
||
public function get_parent_maxspacesize_by_pathkey($pathkey, $currentorgid)
|
||
{
|
||
$arr = array('orgid' => '', 'maxspacesize' => '');
|
||
$pathkeys = explode('-', $pathkey);
|
||
$pathkeys = array_reverse($pathkeys);
|
||
foreach ($pathkeys as $v) {
|
||
$orgid = intval(str_replace('_', '', $v));
|
||
|
||
//排除当前部门
|
||
if ($orgid == $currentorgid) {
|
||
|
||
continue;
|
||
|
||
} else {
|
||
|
||
/*//判断是否有该层的管理权限
|
||
if(!C::t('organization_admin')->chk_memberperm($orgid)){
|
||
exit(json_encode(array('error'=>'没有权限')));
|
||
}*/
|
||
//获取当前层分配空间大小
|
||
$result = DB::result_first("select maxspacesize from %t where orgid = %d", array($this->_table, $orgid));
|
||
|
||
if ($result > 0 || $result == -1) {
|
||
|
||
$arr['maxspacesize'] = $result * 1024 * 1024;
|
||
$arr['orgid'] = $orgid;
|
||
break;
|
||
}
|
||
}
|
||
|
||
}
|
||
//如果没有获取到上层限制,获取系统空间限制
|
||
if ($arr['maxspacesize'] == '') {
|
||
$arr['maxspacesize'] = self::get_system_allowallot_space();
|
||
}
|
||
return $arr;
|
||
}
|
||
|
||
|
||
/*
|
||
* 获取当前机构或部门已分配空间大小
|
||
* 包含已使用空间大小
|
||
* 单位为B
|
||
* */
|
||
/* public function get_current_occupysize_byorgid($orgid, $return = array())
|
||
{
|
||
$org = self::fetch($orgid);
|
||
if($org['maxspacesize'] > 0){
|
||
return
|
||
}
|
||
$return['usesize'] += $org['usesize'];
|
||
//获取当前机构子级空间信息
|
||
foreach (DB::fetch_all("select maxspacesize,usesize,orgid from %t where forgid = %d ", array('organization', $orgid)) as $v) {
|
||
if ($v['maxspacesize'] > 0) {
|
||
$return['maxsize'] += $v['maxspacesize'] * 1024 * 1024;
|
||
} elseif ($v['maxspacesize'] == 0) {
|
||
$return['maxsize'] += $v['usesize'];
|
||
$return = $this->get_current_occupysize_byorgid($v['orgid']);
|
||
}
|
||
}
|
||
return $return;
|
||
}*/
|
||
|
||
/* *
|
||
* 获取当前机构可分配空间大小
|
||
* 上级限制-上级已占用+当前原值
|
||
* */
|
||
public function get_allowallotspacesize_by_orgid($orgid)
|
||
{
|
||
$currentallowsetsize = 0;
|
||
$org = C::t('organization')->fetch($orgid);
|
||
if (!$org) return;
|
||
//获取父级可分配空间大小
|
||
$topmaxspacesizeinfo = $this->get_parent_maxspacesize_by_pathkey($org['pathkey'], $orgid);
|
||
|
||
//如果当前部门之前有分配空间设置
|
||
if ($org['maxspacesize'] > 0) {
|
||
|
||
$oldmaxspacesize = $org['maxspacesize'] * 1024 * 1024;
|
||
|
||
} else {//如果当前部门之前无分配空间设置,获取其下级部门分配空间设置与当前部门未分配已使用之和
|
||
|
||
$oldmaxspacesize = $this->get_orgallotspace_by_orgid($orgid);
|
||
}
|
||
if ($topmaxspacesizeinfo['maxspacesize'] > 0) {
|
||
|
||
if ($topmaxspacesizeinfo['orgid']) {//有上级限制
|
||
|
||
//含限制上级空间占用
|
||
$topallotapce = $this->get_orgallotspace_by_orgid($topmaxspacesizeinfo['orgid'], 0, false);
|
||
|
||
//计算当前部门可设置空间大小:有限制上级限制空间-有限制上级已占用空间+当前部门原空间
|
||
$currentallowsetsize = $topmaxspacesizeinfo['maxspacesize'] - $topallotapce + $oldmaxspacesize;
|
||
|
||
} else {//无上级限制(即使用系统空间限制)
|
||
|
||
$currentallowsetsize = $topmaxspacesizeinfo['maxspacesize'] + $oldmaxspacesize;
|
||
}
|
||
|
||
} else {//返回值为0,-1,-2的特殊情形
|
||
|
||
$currentallowsetsize = $topmaxspacesizeinfo['maxspacesize'];
|
||
}
|
||
return $currentallowsetsize;
|
||
}
|
||
|
||
//获取可使用空间大小
|
||
public function get_usespace_size_by_orgid($orgid)
|
||
{
|
||
$allowusespace = 0;
|
||
if (!$org = C::t('organization')->fetch($orgid)) {
|
||
return -1;
|
||
}
|
||
//如果当前机构或部门已设置分配空间
|
||
if ($org['maxspacesize'] > 0) {
|
||
|
||
//获取当前机构或部门已占用空间大小
|
||
$currentallotspace = $this->get_orgallotspace_by_orgid($orgid, 0, false);
|
||
|
||
//获取当前机构或部门可使用空间大小
|
||
$allowusespace = $org['maxspacesize'] * 1024 * 1024 - $currentallotspace;
|
||
|
||
//如果当前机构或部门可使用空间大小不足
|
||
if ($allowusespace <= 0) {
|
||
|
||
$allowusespace = -2;
|
||
|
||
}
|
||
|
||
} elseif ($org['maxspacesize'] < 0) {//如果当前机构或部门已分配空间为-1
|
||
|
||
$allowusespace = -1;
|
||
|
||
} elseif ($org['maxspacesize'] == 0) {//如果当前机构或部门未分配空间
|
||
|
||
//获取当前机构或部门可分配空间大小即其可用空间
|
||
$allowusespace = self::get_allowallotspacesize_by_orgid($orgid);
|
||
|
||
}
|
||
return $allowusespace;
|
||
}
|
||
|
||
|
||
//获取我有管理权限的机构和部门(包括下级部门)orgids
|
||
public function fetch_all_manage_orgids_by_uid($uids,$sub=true){
|
||
if(!is_array($uids)) $uids=(array)$uids;
|
||
if(!$orgids=C::t('organization_admin')->fetch_orgids_by_uid($uids)) return array();
|
||
$sql="1";
|
||
$param=array($this->_table);
|
||
$sqlarr=array();
|
||
if($sub){
|
||
foreach(parent::fetch_all($orgids) as $value){
|
||
$sqlarr[]='pathkey LIKE %s';
|
||
$param[]=$value['pathkey'].'%';
|
||
}
|
||
if($sqlarr){
|
||
$sql.=' and (' . implode(' OR ',$sqlarr).')';
|
||
foreach(DB::fetch_all("select orgid from %t where $sql",$param) as $value){
|
||
$orgids[]=$value['orgid'];
|
||
}
|
||
}
|
||
}
|
||
return array_unique($orgids);
|
||
}
|
||
|
||
//删除文件夹时,更新群组信息;$force=true时,删除群组;
|
||
public function delete_by_fid($fid,$force=true){
|
||
if(empty($fid)) return false;
|
||
foreach(DB::fetch_all("select orgid from %t where fid=%d",array($this->_table,$fid)) as $value){
|
||
parent::update($value['orgid'],array('fid'=>0));
|
||
if($force){
|
||
self::delete_by_orgid($value['orgid'],true);
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
|
||
}
|