DiscuzX/upload/source/class/table/table_forum_groupuser.php

168 lines
5.7 KiB
PHP

<?php
/**
* [Discuz!] (C)2001-2099 Comsenz Inc.
* This is NOT a freeware, use is subject to license terms
*
* $Id: table_forum_groupuser.php 31121 2012-07-18 06:01:56Z liulanbo $
*/
if(!defined('IN_DISCUZ')) {
exit('Access Denied');
}
class table_forum_groupuser extends discuz_table
{
public function __construct() {
$this->_table = 'forum_groupuser';
$this->_pk = '';
parent::__construct();
}
public function fetch_all_fid_by_uids($uids) {
if(empty($uids)) {
return array();
}
$data = array();
$query = DB::query("SELECT fid FROM %t WHERE %i AND level>0 ORDER BY lastupdate DESC", array($this->_table, DB::field('uid', $uids)));
while($row = DB::fetch($query)) {
$data[] = $row['fid'];
}
return $data;
}
public function fetch_userinfo($uid, $fid) {
if(empty($uid) || empty($fid)) {
return array();
}
return DB::fetch_first("SELECT * FROM %t WHERE fid=%d AND uid=%d", array($this->_table, $fid, $uid));
}
public function fetch_all_userinfo($uids, $fid) {
if(empty($uids) || empty($fid)) {
return array();
}
return DB::fetch_all("SELECT * FROM %t WHERE fid=%d AND ".DB::field('uid', $uids), array($this->_table, $fid));
}
public function fetch_all_by_fid($fid, $level = 0) {
if(empty($fid)) {
return array();
}
$levelsql = ' AND level>0';
if($level == 1) {
$levelsql = ' AND level=0';
} elseif($level == -1) {
$levelsql = '';
}
return DB::fetch_all("SELECT * FROM %t WHERE fid=%d".$levelsql, array($this->_table, $fid));
}
public function fetch_count_by_fid($fid, $level = 0) {
$levelsql = ' AND level>0';
if($level == 1) {
$levelsql = ' AND level=0';
} elseif($level == -1) {
$levelsql = '';
}
return DB::result_first("SELECT COUNT(*) FROM %t WHERE fid=%d".$levelsql, array($this->_table, $fid));
}
public function insert($fid, $uid, $username, $level, $joindateline, $lastupdate = 0) {
DB::query("INSERT INTO %t (fid, uid, username, level, joindateline, lastupdate) VALUES (%d,%d,%s,%d,%d,%d)", array($this->_table, $fid, $uid, addslashes($username), $level, $joindateline, $lastupdate));
}
public function update_counter_for_user($uid, $fid, $threads = 0, $replies = 0) {
if(empty($uid) || empty($fid)) {
return array();
}
$sql = $threads ? 'threads=threads+1' : '';
if($replies) {
$sql = ($sql ? ', ' : '').'replies=replies+1';
}
if(empty($sql)) {
return false;
}
DB::query("UPDATE ".DB::table('forum_groupuser')." SET $sql, lastupdate='".TIMESTAMP."' WHERE fid=%d AND uid=%d", array($fid, $uid));
}
public function delete_by_fid($fids, $uid = 0) {
if(empty($fids)) {
return false;
}
if($uid) {
$sqladd = ' AND '.DB::field('uid', $uid);
}
DB::query("DELETE FROM ".DB::table('forum_groupuser')." WHERE %i ".$sqladd, array(DB::field('fid', $fids)));
}
public function update_for_user($uid, $fid, $threads = null, $replies = null, $level = null) {
if(empty($uid) || empty($fid)) {
return array();
}
$sqladd = $threads !== null ? 'threads='.intval($threads) : '';
if($replies !== null) {
$sqladd .= ($sqladd ? ', ' : '').'replies='.intval($replies);
}
if($level !== null) {
$sqladd .= ($sqladd ? ', ' : '').'level='.intval($level);
}
DB::query("UPDATE %t SET $sqladd WHERE fid=%d AND ".DB::field('uid', $uid), array($this->_table, $fid));
}
public function groupuserlist($fid, $orderby = '', $num = 0, $start = 0, $addwhere = '', $fieldarray = array(), $onlinemember = array()) {
$fid = intval($fid);
if($fieldarray && is_array($fieldarray)) {
$fieldadd = 'uid';
foreach($fieldarray as $field) {
$fieldadd .= ' ,'.$field;
}
} else {
$fieldadd = '*';
}
$sqladd = $levelwhere = '';
if($addwhere) {
if(is_array($addwhere)) {
foreach($addwhere as $field => $value) {
if(is_array($value)) {
$levelwhere = "AND level>'0' ";
$sqladd .= "AND $field IN (".dimplode($value).") ";
} else {
$sqladd .= is_numeric($field) ? "AND $value " : "AND $field='$value' ";
}
}
if(!empty($addwhere['level'])) $levelwhere = '';
} else {
$sqladd = $addwhere;
}
}
$orderbyarray = array('level_join' => 'level ASC, joindateline ASC', 'joindateline' => 'joindateline DESC', 'lastupdate' => 'lastupdate DESC', 'threads' => 'threads DESC', 'replies' => 'replies DESC');
$orderby = !empty($orderbyarray[$orderby]) ? "ORDER BY $orderbyarray[$orderby]" : '';
$limitsql = $num ? DB::limit($start, $num) : '';
$groupuserlist = array();
$query = DB::query("SELECT $fieldadd FROM ".DB::table('forum_groupuser')." WHERE fid=%d $levelwhere %i $orderby $limitsql", array($fid,$sqladd));
while($groupuser = DB::fetch($query)) {
$groupuserlist[$groupuser['uid']] = $groupuser;
$groupuserlist[$groupuser['uid']]['online'] = !empty($onlinemember) && is_array($onlinemember) && !empty($onlinemember[$groupuser['uid']]) ? 1 : 0;
}
return $groupuserlist;
}
public function fetch_all_group_for_user($uid, $count = 0, $ismanager = 0, $start = 0, $num = 0) {
$uid = intval($uid);
if(empty($uid)) {
return array();
}
if(empty($ismanager)) {
$levelsql = '';
} elseif($ismanager == 1) {
$levelsql = ' AND level IN(1,2)';
} elseif($ismanager == 2) {
$levelsql = ' AND level IN(3,4)';
}
if($count == 1) {
return DB::result_first("SELECT count(*) FROM ".DB::table('forum_groupuser')." WHERE uid='$uid' $levelsql");
}
empty($start) && $start = 0;
empty($num) && $num = 100;
return DB::fetch_all("SELECT fid, level FROM ".DB::table('forum_groupuser')." WHERE uid='$uid' $levelsql ORDER BY lastupdate DESC ".DB::limit($start, $num));
}
}
?>