table_forum_groupuser.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <?php
  2. /**
  3. * [Discuz!] (C)2001-2099 Comsenz Inc.
  4. * This is NOT a freeware, use is subject to license terms
  5. *
  6. * $Id: table_forum_groupuser.php 31121 2012-07-18 06:01:56Z liulanbo $
  7. */
  8. if(!defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. class table_forum_groupuser extends discuz_table
  12. {
  13. public function __construct() {
  14. $this->_table = 'forum_groupuser';
  15. $this->_pk = '';
  16. parent::__construct();
  17. }
  18. public function fetch_all_fid_by_uids($uids) {
  19. if(empty($uids)) {
  20. return array();
  21. }
  22. $data = array();
  23. $query = DB::query("SELECT fid FROM %t WHERE %i AND level>0 ORDER BY lastupdate DESC", array($this->_table, DB::field('uid', $uids)));
  24. while($row = DB::fetch($query)) {
  25. $data[] = $row['fid'];
  26. }
  27. return $data;
  28. }
  29. public function fetch_userinfo($uid, $fid) {
  30. if(empty($uid) || empty($fid)) {
  31. return array();
  32. }
  33. return DB::fetch_first("SELECT * FROM %t WHERE fid=%d AND uid=%d", array($this->_table, $fid, $uid));
  34. }
  35. public function fetch_all_userinfo($uids, $fid) {
  36. if(empty($uids) || empty($fid)) {
  37. return array();
  38. }
  39. return DB::fetch_all("SELECT * FROM %t WHERE fid=%d AND ".DB::field('uid', $uids), array($this->_table, $fid));
  40. }
  41. public function fetch_all_by_fid($fid, $level = 0) {
  42. if(empty($fid)) {
  43. return array();
  44. }
  45. $levelsql = ' AND level>0';
  46. if($level == 1) {
  47. $levelsql = ' AND level=0';
  48. } elseif($level == -1) {
  49. $levelsql = '';
  50. }
  51. return DB::fetch_all("SELECT * FROM %t WHERE fid=%d".$levelsql, array($this->_table, $fid));
  52. }
  53. public function fetch_count_by_fid($fid, $level = 0) {
  54. $levelsql = ' AND level>0';
  55. if($level == 1) {
  56. $levelsql = ' AND level=0';
  57. } elseif($level == -1) {
  58. $levelsql = '';
  59. }
  60. return DB::result_first("SELECT COUNT(*) FROM %t WHERE fid=%d".$levelsql, array($this->_table, $fid));
  61. }
  62. public function insert($fid, $uid, $username, $level, $joindateline, $lastupdate = 0) {
  63. 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));
  64. }
  65. public function update_counter_for_user($uid, $fid, $threads = 0, $replies = 0) {
  66. if(empty($uid) || empty($fid)) {
  67. return array();
  68. }
  69. $sql = $threads ? 'threads=threads+1' : '';
  70. if($replies) {
  71. $sql = ($sql ? ', ' : '').'replies=replies+1';
  72. }
  73. if(empty($sql)) {
  74. return false;
  75. }
  76. DB::query("UPDATE ".DB::table('forum_groupuser')." SET $sql, lastupdate='".TIMESTAMP."' WHERE fid=%d AND uid=%d", array($fid, $uid));
  77. }
  78. public function delete_by_fid($fids, $uid = 0) {
  79. if(empty($fids)) {
  80. return false;
  81. }
  82. if($uid) {
  83. $sqladd = ' AND '.DB::field('uid', $uid);
  84. }
  85. DB::query("DELETE FROM ".DB::table('forum_groupuser')." WHERE %i ".$sqladd, array(DB::field('fid', $fids)));
  86. }
  87. public function update_for_user($uid, $fid, $threads = null, $replies = null, $level = null) {
  88. if(empty($uid) || empty($fid)) {
  89. return array();
  90. }
  91. $sqladd = $threads !== null ? 'threads='.intval($threads) : '';
  92. if($replies !== null) {
  93. $sqladd .= ($sqladd ? ', ' : '').'replies='.intval($replies);
  94. }
  95. if($level !== null) {
  96. $sqladd .= ($sqladd ? ', ' : '').'level='.intval($level);
  97. }
  98. DB::query("UPDATE %t SET $sqladd WHERE fid=%d AND ".DB::field('uid', $uid), array($this->_table, $fid));
  99. }
  100. public function groupuserlist($fid, $orderby = '', $num = 0, $start = 0, $addwhere = '', $fieldarray = array(), $onlinemember = array()) {
  101. $fid = intval($fid);
  102. if($fieldarray && is_array($fieldarray)) {
  103. $fieldadd = 'uid';
  104. foreach($fieldarray as $field) {
  105. $fieldadd .= ' ,'.$field;
  106. }
  107. } else {
  108. $fieldadd = '*';
  109. }
  110. $sqladd = $levelwhere = '';
  111. if($addwhere) {
  112. if(is_array($addwhere)) {
  113. foreach($addwhere as $field => $value) {
  114. if(is_array($value)) {
  115. $levelwhere = "AND level>'0' ";
  116. $sqladd .= "AND $field IN (".dimplode($value).") ";
  117. } else {
  118. $sqladd .= is_numeric($field) ? "AND $value " : "AND $field='$value' ";
  119. }
  120. }
  121. if(!empty($addwhere['level'])) $levelwhere = '';
  122. } else {
  123. $sqladd = $addwhere;
  124. }
  125. }
  126. $orderbyarray = array('level_join' => 'level ASC, joindateline ASC', 'joindateline' => 'joindateline DESC', 'lastupdate' => 'lastupdate DESC', 'threads' => 'threads DESC', 'replies' => 'replies DESC');
  127. $orderby = !empty($orderbyarray[$orderby]) ? "ORDER BY $orderbyarray[$orderby]" : '';
  128. $limitsql = $num ? DB::limit($start, $num) : '';
  129. $groupuserlist = array();
  130. $query = DB::query("SELECT $fieldadd FROM ".DB::table('forum_groupuser')." WHERE fid=%d $levelwhere %i $orderby $limitsql", array($fid,$sqladd));
  131. while($groupuser = DB::fetch($query)) {
  132. $groupuserlist[$groupuser['uid']] = $groupuser;
  133. $groupuserlist[$groupuser['uid']]['online'] = !empty($onlinemember) && is_array($onlinemember) && !empty($onlinemember[$groupuser['uid']]) ? 1 : 0;
  134. }
  135. return $groupuserlist;
  136. }
  137. public function fetch_all_group_for_user($uid, $count = 0, $ismanager = 0, $start = 0, $num = 0) {
  138. $uid = intval($uid);
  139. if(empty($uid)) {
  140. return array();
  141. }
  142. if(empty($ismanager)) {
  143. $levelsql = '';
  144. } elseif($ismanager == 1) {
  145. $levelsql = ' AND level IN(1,2)';
  146. } elseif($ismanager == 2) {
  147. $levelsql = ' AND level IN(3,4)';
  148. }
  149. if($count == 1) {
  150. return DB::result_first("SELECT count(*) FROM ".DB::table('forum_groupuser')." WHERE uid='$uid' $levelsql");
  151. }
  152. empty($start) && $start = 0;
  153. empty($num) && $num = 100;
  154. return DB::fetch_all("SELECT fid, level FROM ".DB::table('forum_groupuser')." WHERE uid='$uid' $levelsql ORDER BY lastupdate DESC ".DB::limit($start, $num));
  155. }
  156. }
  157. ?>