mirror of
https://github.com/DzzXH/DzzOffice.git
synced 2026-01-22 03:06:48 +08:00
583 lines
19 KiB
PHP
583 lines
19 KiB
PHP
<?php
|
||
/*
|
||
* @copyright Leyun internet Technology(Shanghai)Co.,Ltd
|
||
* @license http://www.dzzoffice.com/licenses/license.txt
|
||
* @package DzzOffice
|
||
* @link http://www.dzzoffice.com
|
||
* @author zyx(zyx@dzz.cc)
|
||
*/
|
||
if(!defined('IN_DZZ')) {
|
||
exit('Access Denied');
|
||
}
|
||
class table_user extends dzz_table
|
||
{
|
||
public function __construct() {
|
||
|
||
$this->_table = 'user';
|
||
$this->_pk = 'uid';
|
||
$this->_pre_cache_key = 'user_';
|
||
|
||
parent::__construct();
|
||
}
|
||
/*public function fetch_safebindstatus($uid){
|
||
$uid = intval($uid);
|
||
$result = DB::fetch_first("select emailstatus,phonestatus from %t where uid = %d",array($this->_table,$uid));
|
||
return $result;
|
||
}*/
|
||
public function add_user($userArr){
|
||
|
||
global $_G;
|
||
|
||
if(empty($userArr)) return ;
|
||
$salt=substr(uniqid(rand()), -6);
|
||
$groupid = '';
|
||
if($_G['setting']['regverify']) {
|
||
$groupid = 8;
|
||
} else {
|
||
$groupid =$_G['setting']['newusergroupid'];
|
||
}
|
||
$setarr=array(
|
||
'username'=>addslashes($userArr['username']),
|
||
'email'=>isset($userArr['email']) ? $userArr['email']:'' ,
|
||
'salt'=>$salt,
|
||
'password'=>md5(md5($userArr['password']).$salt),
|
||
'regdate'=>TIMESTAMP,
|
||
'regip'=>$_G['clientip'],
|
||
'groupid'=>$groupid
|
||
);
|
||
$setarr['uid'] = parent::insert($setarr,1);
|
||
return $setarr;
|
||
}
|
||
public function update_password($uid,$password){
|
||
$uid = intval($uid);
|
||
if(parent::update($uid,array('password'=>$password))){
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
public function user_register($userArr,$addorg = 1){
|
||
|
||
if(empty($userArr)) return ;
|
||
|
||
if($userArr['username'] && ($status = uc_user_checkname($userArr['username'])) < 0) {
|
||
return $status;
|
||
}
|
||
|
||
if(($status = uc_user_checkemail($userArr['email'])) < 0) {
|
||
|
||
return $status;
|
||
}
|
||
|
||
$uid =self::add_user($userArr);
|
||
|
||
//默认机构
|
||
if($addorg && is_array($uid) && getglobal('setting/defaultdepartment') && DB::fetch_first("select orgid from %t where orgid=%d ",array('organization',getglobal('setting/defaultdepartment')))){
|
||
C::t('organization_user')->insert_by_orgid(getglobal('setting/defaultdepartment'),$uid['uid']);
|
||
}
|
||
|
||
return $uid;
|
||
}
|
||
public function delete_by_uid($uid){
|
||
$user=parent::fetch($uid);
|
||
if(self::checkfounder($user)){//创始人不能删除
|
||
return false;
|
||
}
|
||
if(parent::delete($uid)){
|
||
C::t('user_field')->delete($uid);
|
||
C::t('user_profile')->delete($uid);
|
||
C::t('user_status')->delete($uid);
|
||
C::t('user_setting')->delete_by_uid($uid);
|
||
C::t('organization_user')->delete_by_uid($uid,0);
|
||
DB::delete('user_qqconnect',"uid='{$uid}'"); //删除QQ登陆
|
||
|
||
//删除用户文件
|
||
if($homefid=DB::result_first("select fid from %t where uid=%d and flag='home' ",array('folder',$uid))){
|
||
C::t('folder')->delete_by_fid($homefid,true);
|
||
}
|
||
|
||
Hook::listen('syntoline_user',$uid,'del');//删除对应到三方用户表
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
public function checkfounder($user) {
|
||
|
||
$founders = str_replace(' ', '', getglobal('config/admincp/founder'));
|
||
if(!$user['uid'] || $user['groupid'] != 1 || $user['adminid'] != 1 ) {
|
||
return false;
|
||
} elseif(empty($founders)) {
|
||
return false;
|
||
} elseif(strexists(",$founders,", ",$user[uid],")) {
|
||
return true;
|
||
} elseif(!is_numeric($user['nickname']) && strexists(",$founders,", ",$user[nickname],")) {
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
}
|
||
public function setAdministror($uid,$groupid){
|
||
$user=getuserbyuid($uid);
|
||
//if($user['adminid']==$adminid) return true;
|
||
if(self::checkfounder($user)){ //创始人不允许修改
|
||
return true;
|
||
}
|
||
$arr=array();
|
||
if($groupid==1){
|
||
parent::update($uid,array('adminid'=>1,'groupid'=>1));
|
||
}else{
|
||
if(empty($groupid)) $groupid=9;
|
||
/*if(C::t('organization_admin')->fetch_orgids_by_uid($uid)){
|
||
$groupid=2;
|
||
}*/
|
||
parent::update($uid,array('adminid'=>0,'groupid'=>$groupid));
|
||
}
|
||
}
|
||
public function update_credits($uid, $credits) {
|
||
if($uid) {
|
||
$data = array('credits'=>intval($credits));
|
||
DB::update($this->_table, $data, array('uid' => intval($uid)), 'UNBUFFERED');
|
||
$this->update_cache($uid, $data);
|
||
}
|
||
}
|
||
|
||
public function update_by_groupid($groupid, $data) {
|
||
$uids = array();
|
||
$groupid = dintval($groupid, true);
|
||
if($groupid && $this->_allowmem) {
|
||
$uids = array_keys($this->fetch_all_by_groupid($groupid));
|
||
}
|
||
if($groupid && !empty($data) && is_array($data)) {
|
||
DB::update($this->_table, $data, DB::field('groupid', $groupid), 'UNBUFFERED');
|
||
}
|
||
if($uids) {
|
||
$this->update_cache($uids, $data);
|
||
}
|
||
}
|
||
|
||
public function fetch_userbasic_by_uid($uid){
|
||
|
||
return DB::fetch_first("select uid,email,username from %t where uid = %d",array($this->_table,$uid));
|
||
}
|
||
|
||
public function increase($uids, $setarr) {
|
||
$uids = dintval((array)$uids, true);
|
||
$sql = array();
|
||
$allowkey = array('newprompt');
|
||
foreach($setarr as $key => $value) {
|
||
if(($value = intval($value)) && in_array($key, $allowkey)) {
|
||
$sql[] = "`$key`=`$key`+'$value'";
|
||
}
|
||
}
|
||
if(!empty($sql)){
|
||
DB::query("UPDATE ".DB::table($this->_table)." SET ".implode(',', $sql)." WHERE uid IN (".dimplode($uids).")", 'UNBUFFERED');
|
||
$this->increase_cache($uids, $setarr);
|
||
}
|
||
}
|
||
|
||
|
||
|
||
public function fetch_all_by_username($usernames, $fetch_archive = 1) {
|
||
$users = array();
|
||
if(!empty($usernames)) {
|
||
$users = DB::fetch_all('SELECT * FROM %t WHERE username IN (%n)', array($this->_table, (array)$usernames), 'username');
|
||
}
|
||
return $users;
|
||
}
|
||
/*
|
||
* 新增
|
||
* 以uid查询用户数据
|
||
* **/
|
||
public function get_user_by_uid($uid){
|
||
|
||
$uid = intval($uid);
|
||
|
||
static $users = array();
|
||
|
||
if($uid && empty($users[$uid])) {
|
||
|
||
$users[$uid] = DB::fetch_first("select * from %t where uid = %d",array($this->_table,$uid));
|
||
}
|
||
|
||
if($users[$uid]['adminid']==1) $users[$uid]['self'] = 2;
|
||
|
||
return $users[$uid];
|
||
|
||
}
|
||
|
||
public function fetch_uid_by_username($username, $fetch_archive = 0) {
|
||
$uid = 0;
|
||
if($username) {
|
||
$uid = DB::result_first('SELECT uid FROM %t WHERE username=%s', array($this->_table, $username));
|
||
}
|
||
return $uid;
|
||
}
|
||
|
||
public function fetch_all_uid_by_username($usernames, $fetch_archive = 1) {
|
||
$uids = array();
|
||
if($usernames) {
|
||
foreach($this->fetch_all_by_username($usernames, $fetch_archive) as $username => $value) {
|
||
$uids[$username] = $value['uid'];
|
||
}
|
||
}
|
||
return $uids;
|
||
}
|
||
|
||
public function fetch_all_by_adminid($adminids, $fetch_archive = 1) {
|
||
$users = array();
|
||
$adminids = dintval((array)$adminids, true);
|
||
if($adminids) {
|
||
$users = DB::fetch_all('SELECT * FROM %t WHERE adminid IN (%n) ORDER BY adminid, uid', array($this->_table, (array)$adminids), $this->_pk);
|
||
}
|
||
return $users;
|
||
}
|
||
|
||
public function fetch_all_username_by_uid($uids) {
|
||
$users = array();
|
||
if(($uids = dintval($uids, true))) {
|
||
foreach($this->fetch_all($uids) as $uid => $value) {
|
||
$users[$uid] = $value['username'];
|
||
}
|
||
}
|
||
return $users;
|
||
}
|
||
|
||
public function count_by_groupid($groupid) {
|
||
return $groupid ? DB::result_first('SELECT COUNT(*) FROM %t WHERE '.DB::field('groupid', $groupid), array($this->_table)) : 0;
|
||
}
|
||
|
||
public function fetch_all_by_groupid($groupid, $start = 0, $limit = 0) {
|
||
$users = array();
|
||
if(($groupid = dintval($groupid, true))) {
|
||
$users = DB::fetch_all('SELECT * FROM '.DB::table($this->_table).' WHERE '.DB::field('groupid', $groupid).' '.DB::limit($start, $limit), null, 'uid');
|
||
}
|
||
return $users;
|
||
}
|
||
|
||
public function fetch_all_groupid() {
|
||
return DB::fetch_all('SELECT DISTINCT(groupid) FROM '.DB::table($this->_table), null, 'groupid');
|
||
}
|
||
|
||
public function fetch_all_by_allowadmincp($val, $glue = '=') {
|
||
return DB::fetch_all('SELECT * FROM '.DB::table($this->_table).' WHERE '.DB::field('allowadmincp', intval($val), $glue), NULL, 'uid');
|
||
}
|
||
|
||
public function update_admincp_manage($uids) {
|
||
if(($uids = dintval($uids, true))) {
|
||
$data = DB::query('UPDATE '.DB::table($this->_table).' SET allowadmincp=allowadmincp | 1 WHERE uid IN ('.dimplode($uids).')');
|
||
$this->reset_cache($uids);
|
||
return $data;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
public function clean_admincp_manage($uids) {
|
||
if(($uids = dintval($uids, true))) {
|
||
$data = DB::query('UPDATE '.DB::table($this->_table).' SET allowadmincp=allowadmincp & 0xFE WHERE uid IN ('.dimplode($uids).')');
|
||
$this->reset_cache($uids);
|
||
return $data;
|
||
}
|
||
return false;
|
||
}
|
||
public function chk_email_by_uid($email,$uid){
|
||
|
||
if(parent::fetch_all("select uid from %t where email = %s and uid != %d",array($this->_table,$email,$uid))){
|
||
|
||
return true;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
public function fetch_by_email($email, $fetch_archive = 0) {
|
||
$user = array();
|
||
if($email) {
|
||
$user = DB::fetch_first('SELECT * FROM %t WHERE email=%s', array($this->_table, $email));
|
||
}
|
||
return $user;
|
||
}
|
||
public function fetch_by_username($username, $fetch_archive = 0) {
|
||
$user = array();
|
||
if($username) {
|
||
$user = DB::fetch_first('SELECT * FROM %t WHERE username=%s', array($this->_table, $username));
|
||
}
|
||
return $user;
|
||
}
|
||
public function fetch_by_nickname($username, $fetch_archive = 0) {
|
||
|
||
$user = array();
|
||
if($username) {
|
||
$user = DB::fetch_first('SELECT * FROM %t WHERE nickname=%s', array($this->_table, $username));
|
||
}
|
||
return $user;
|
||
}
|
||
public function fetch_by_phone($username, $fetch_archive = 0) {
|
||
|
||
$user = array();
|
||
if($username) {
|
||
$user = DB::fetch_first('SELECT * FROM %t WHERE phone=%s', array($this->_table, $username));
|
||
}
|
||
return $user;
|
||
}
|
||
public function fetch_by_weixinid($username, $fetch_archive = 0) {
|
||
|
||
$user = array();
|
||
if($username) {
|
||
$user = DB::fetch_first('SELECT * FROM %t WHERE weixinid=%s', array($this->_table, $username));
|
||
}
|
||
return $user;
|
||
}
|
||
public function fetch_by_wechat_userid($username, $fetch_archive = 0) {
|
||
|
||
$user = array();
|
||
if($username) {
|
||
$user = DB::fetch_first('SELECT * FROM %t WHERE wechat_userid=%s', array($this->_table, $username));
|
||
}
|
||
return $user;
|
||
}
|
||
public function fetch_by_uid($uid, $fetch_archive = 0) {
|
||
$user = array();
|
||
if($uid) {
|
||
$user = DB::fetch_first('SELECT * FROM %t WHERE uid=%d', array($this->_table, $uid));
|
||
}
|
||
return $user;
|
||
}
|
||
|
||
public function fetch_all_by_email($emails, $fetch_archive = 1) {
|
||
$users = array();
|
||
if(!empty($emails)) {
|
||
$users = DB::fetch_all('SELECT * FROM %t WHERE %i', array($this->_table, DB::field('email', $emails)), 'email');
|
||
}
|
||
return $users;
|
||
}
|
||
|
||
public function count_by_email($email, $fetch_archive = 0) {
|
||
$count = 0;
|
||
if($email) {
|
||
$count = DB::result_first('SELECT COUNT(*) FROM %t WHERE email=%s', array($this->_table, $email));
|
||
}
|
||
return $count;
|
||
}
|
||
|
||
public function fetch_all_by_like_username($username, $start = 0, $limit = 0) {
|
||
$data = array();
|
||
if($username) {
|
||
$data = DB::fetch_all('SELECT * FROM %t WHERE username LIKE %s'.DB::limit($start, $limit), array($this->_table, stripsearchkey($username).'%'), 'uid');
|
||
}
|
||
return $data;
|
||
}
|
||
|
||
public function count_by_like_username($username) {
|
||
return !empty($username) ? DB::result_first('SELECT COUNT(*) FROM %t WHERE username LIKE %s', array($this->_table, stripsearchkey($username).'%')) : 0;
|
||
}
|
||
|
||
|
||
public function fetch_runtime() {
|
||
return DB::result_first("SELECT (MAX(regdate)-MIN(regdate))/86400 AS runtime FROM ".DB::table($this->_table));
|
||
}
|
||
|
||
public function count_admins() {
|
||
return DB::result_first("SELECT COUNT(*) FROM ".DB::table($this->_table)." WHERE adminid<>'0' AND adminid<>'-1'");
|
||
}
|
||
|
||
public function count_by_regdate($timestamp) {
|
||
return DB::result_first('SELECT COUNT(*) FROM %t WHERE regdate>%d', array($this->_table, $timestamp));
|
||
}
|
||
//根据用户组id,查询用户id
|
||
public function fetch_uid_by_groupid($groupid){
|
||
$groupid = intval($groupid);
|
||
return DB::fetch_all("select uid from %t where groupid = %d",array($this->_table,$groupid));
|
||
}
|
||
|
||
public function fetch_all_stat_memberlist($username, $orderby = '', $sort = '', $start = 0, $limit = 0) {
|
||
$orderby = in_array($orderby, array('uid','credits','regdate', 'gender','username','posts','lastvisit'), true) ? $orderby : 'uid';
|
||
$sql = '';
|
||
|
||
$sql = !empty($username) ? " WHERE username LIKE '".addslashes(stripsearchkey($username))."%'" : '';
|
||
|
||
$memberlist = array();
|
||
$query = DB::query("SELECT m.uid, m.username, mp.gender, m.email, m.regdate, ms.lastvisit, mc.posts, m.credits
|
||
FROM ".DB::table($this->_table)." m
|
||
LEFT JOIN ".DB::table('user_profile')." mp ON mp.uid=m.uid
|
||
LEFT JOIN ".DB::table('user_status')." ms ON ms.uid=m.uid
|
||
$sql ORDER BY ".DB::order($orderby, $sort).DB::limit($start, $limit));
|
||
while($member = DB::fetch($query)) {
|
||
$member['usernameenc'] = rawurlencode($member['username']);
|
||
$member['regdate'] = dgmdate($member['regdate']);
|
||
$member['lastvisit'] = dgmdate($member['lastvisit']);
|
||
$memberlist[$member['uid']] = $member;
|
||
}
|
||
return $memberlist;
|
||
}
|
||
|
||
|
||
|
||
public function insert($uid, $ip, $groupid, $extdata, $adminid = 0) {
|
||
if(($uid = dintval($uid))) {
|
||
$profile = isset($extdata['profile']) ? $extdata['profile'] : array();
|
||
//$profile['uid'] = $uid;
|
||
$base = array(
|
||
'uid' => $uid,
|
||
'adminid' => intval($adminid),
|
||
'groupid' => intval($groupid),
|
||
'regdate' => TIMESTAMP,
|
||
'emailstatus' => intval($extdata['emailstatus']),
|
||
|
||
);
|
||
$status = array(
|
||
'uid' => $uid,
|
||
'regip' => (string)$ip,
|
||
'lastip' => (string)$ip,
|
||
'lastvisit' => TIMESTAMP,
|
||
'lastactivity' => TIMESTAMP,
|
||
'lastsendmail' => 0
|
||
);
|
||
|
||
$ext = array('uid' => $uid);
|
||
parent::update($uid,$base);
|
||
C::t('user_status')->insert($status, false, true);
|
||
C::t('user_profile')->update($uid,$profile);
|
||
}
|
||
}
|
||
public function insert_user($userarr,$groupid = 9,$profilearr=array()){
|
||
global $_G;
|
||
if(empty($userarr)){
|
||
return false;
|
||
}
|
||
$ip = $_G['clientip'];
|
||
$salt=substr(uniqid(rand()), -6);
|
||
$setarr=array(
|
||
'username'=>addslashes($userarr['username']),
|
||
'email'=>$userarr['email'],
|
||
'salt'=>$salt,
|
||
'password'=>md5(md5($userarr['password']).$salt),
|
||
'regdate'=>TIMESTAMP,
|
||
'regip'=>$ip,
|
||
'groupid'=>$groupid,
|
||
'phone'=>$userarr['phone'],
|
||
'phonestatus'=>$userarr['phonestatus']
|
||
);
|
||
$uid = parent::insert($setarr,1);
|
||
if($uid){
|
||
$status = array(
|
||
'uid' => $uid,
|
||
'regip' => (string)$ip,
|
||
'lastip' => (string)$ip,
|
||
'lastvisit' => TIMESTAMP,
|
||
'lastactivity' => TIMESTAMP,
|
||
'lastsendmail' => 0
|
||
);
|
||
C::t('user_status')->insert($status,1);
|
||
if(!empty($profilearr)){
|
||
C::t('user_profile')->update($uid,$profilearr);
|
||
}
|
||
$setarr['uid'] = $uid;
|
||
return $setarr;
|
||
}else{
|
||
return false;
|
||
}
|
||
|
||
|
||
|
||
}
|
||
public function insert_user_setarr($setarr){
|
||
if(empty($setarr)) return ;
|
||
return parent::insert($setarr,1);
|
||
}
|
||
|
||
public function delete($val, $unbuffered = false, $fetch_archive = 0) {
|
||
$ret = false;
|
||
|
||
if(($val = dintval($val, true))) {
|
||
foreach((array)$val as $key=> $uid) {
|
||
if($uid==1) unset($val[$key]); //暂时限制uid=1的用户不允许删除
|
||
}
|
||
$ret = parent::delete($val, $unbuffered, $fetch_archive);
|
||
if($this->_allowmem) {
|
||
$data = ($data = memory('get', 'deleteuids')) === false ? array() : $data;
|
||
foreach((array)$val as $uid) {
|
||
$data[$uid] = $uid;
|
||
}
|
||
memory('set', 'deleteuids', $data, 86400*2);
|
||
}
|
||
}
|
||
return $ret;
|
||
}
|
||
|
||
public function max_uid() {
|
||
return DB::result_first('SELECT MAX(uid) FROM %t', array($this->_table));
|
||
}
|
||
|
||
public function range_by_uid($from, $limit) {
|
||
return DB::fetch_all('SELECT * FROM %t WHERE uid >= %d ORDER BY uid LIMIT %d', array($this->_table, $from, $limit), $this->_pk);
|
||
}
|
||
|
||
public function update_groupid_by_groupid($source, $target) {
|
||
return DB::query('UPDATE %t SET groupid=%d WHERE adminid <= 0 AND groupid=%d', array($this->_table, $target, $source));
|
||
}
|
||
public function fetch_all_user(){
|
||
return DB::fetch_all("select * from %t",array($this->_table));
|
||
}
|
||
//获取用户独享空间配置值,若未分配,则获取用户已使用空间
|
||
public function get_allotspace(){
|
||
global $_G;
|
||
$setting = $_G['setting'];
|
||
$userallotspace = 0;
|
||
$uids = array();
|
||
foreach(DB::fetch_all("select uid from %t",array($this->_table)) as $v){
|
||
$uids[] = $v['uid'];
|
||
}
|
||
foreach(DB::fetch_all("select userspace,usesize from %t where uid in(%n)",array('user_field',$uids)) as $val){
|
||
if($val['userspace'] > 0){
|
||
$userallotspace += $val['userspace']*1024*1024;
|
||
}else{
|
||
$userallotspace += $val['usesize'];
|
||
}
|
||
}
|
||
return $userallotspace;
|
||
}
|
||
//获取用户信息包含头像信息
|
||
public function fetch_user_avatar_by_uids($uids){
|
||
if(!is_array($uids)) $uids = array($uids);
|
||
$uids = array_unique($uids);
|
||
$users = array();
|
||
foreach(DB::fetch_all("select u.*,s.svalue from %t u left join %t s on u.uid=s.uid and s.skey=%s where u.uid in(%n)",array('user','user_setting','headerColor',$uids)) as $v){
|
||
if($v['avatarstatus'] == 1){
|
||
$v['avatarstatus'] = 1;
|
||
}else{
|
||
$v['avatarstatus'] = 0;
|
||
$v['headerColor'] = $v['svalue'];
|
||
}
|
||
$users[$v['uid']] = $v;
|
||
}
|
||
|
||
return $users;
|
||
}
|
||
public function fetch_userinfo_detail_by_uid($uid){
|
||
$uid = intval($uid);
|
||
$users = DB::fetch_first("select u.uid,u.phone,u.email,ug.* from %t u left join %t ug on u.groupid=ug.groupid where uid = %d",array('user','usergroup',$uid));
|
||
foreach(DB::fetch_all("select * from %t where uid = %d",array('user_profile',$uid)) as $v){
|
||
if(!$v['privacy']){
|
||
$users['information'][$v['fieldid']] = $v['value'];
|
||
}
|
||
}
|
||
return $users;
|
||
}
|
||
public function fetch_all_user_data(){
|
||
return DB::fetch_all("select * from %t where 1",array($this->_table));
|
||
}
|
||
/*//获取用户信息,包含资料等信息
|
||
public function fetch_user_infomessage_by_uid($uid){
|
||
$users = array();
|
||
foreach(DB::fetch_all("select u.*,s.svalue from %t u left join %t s on u.uid=s.uid and s.skey=%s where u.uid =%d",array('user','user_setting','headerColor',$uid)) as $v){
|
||
if($v['avatarstatus'] == 1){
|
||
$v['avatarstatus'] = 1;
|
||
}else{
|
||
$v['avatarstatus'] = 0;
|
||
$v['headerColor'] = $v['svalue'];
|
||
}
|
||
$users[$v['uid']] = $v;
|
||
}
|
||
|
||
return $users;
|
||
}*/
|
||
}
|