table_common_session.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  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_common_session.php 28051 2012-02-21 10:36:56Z zhangguosheng $
  7. */
  8. if(!defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. class table_common_session extends discuz_table
  12. {
  13. public function __construct() {
  14. $this->_table = 'common_session';
  15. $this->_pk = 'sid';
  16. parent::__construct();
  17. }
  18. public function fetch($sid, $ip = false, $uid = false) {
  19. if(empty($sid)) {
  20. return array();
  21. }
  22. $this->checkpk();
  23. $session = parent::fetch($sid);
  24. if($session && $ip !== false && $ip != "{$session['ip1']}.{$session['ip2']}.{$session['ip3']}.{$session['ip4']}") {
  25. $session = array();
  26. }
  27. if($session && $uid !== false && $uid != $session['uid']) {
  28. $session = array();
  29. }
  30. return $session;
  31. }
  32. public function fetch_member($ismember = 0, $invisible = 0, $start = 0, $limit = 0) {
  33. $sql = array();
  34. if($ismember === 1) {
  35. $sql[] = 'uid > 0';
  36. } elseif($ismember === 2) {
  37. $sql[] = 'uid = 0';
  38. }
  39. if($invisible === 1) {
  40. $sql[] = 'invisible = 1';
  41. } elseif($invisible === 2) {
  42. $sql[] = 'invisible = 0';
  43. }
  44. $wheresql = !empty($sql) && is_array($sql) ? ' WHERE '.implode(' AND ', $sql) : '';
  45. $sql = 'SELECT * FROM %t '.$wheresql.' ORDER BY lastactivity DESC'.DB::limit($start, $limit);
  46. return DB::fetch_all($sql, array($this->_table), $this->_pk);
  47. }
  48. public function count_invisible($type = 1) {
  49. return DB::result_first('SELECT COUNT(*) FROM %t WHERE invisible=%d', array($this->_table, $type));
  50. }
  51. public function count($type = 0) {
  52. $condition = $type == 1 ? ' WHERE uid>0 ' : ($type == 2 ? ' WHERE uid=0 ' : '');
  53. return DB::result_first("SELECT count(*) FROM ".DB::table($this->_table).$condition);
  54. }
  55. public function delete_by_session($session, $onlinehold, $guestspan) {
  56. if(!empty($session) && is_array($session)) {
  57. $onlinehold = time() - $onlinehold;
  58. $guestspan = time() - $guestspan;
  59. $session = daddslashes($session);
  60. $condition = " sid='{$session[sid]}' ";
  61. $condition .= " OR lastactivity<$onlinehold ";
  62. $condition .= " OR (uid='0' AND ip1='{$session['ip1']}' AND ip2='{$session['ip2']}' AND ip3='{$session['ip3']}' AND ip4='{$session['ip4']}' AND lastactivity>$guestspan) ";
  63. $condition .= $session['uid'] ? " OR (uid='{$session['uid']}') " : '';
  64. DB::delete('common_session', $condition);
  65. }
  66. }
  67. public function fetch_by_uid($uid) {
  68. return !empty($uid) ? DB::fetch_first('SELECT * FROM %t WHERE uid=%d', array($this->_table, $uid)) : false;
  69. }
  70. public function fetch_all_by_uid($uids, $start = 0, $limit = 0) {
  71. $data = array();
  72. if(!empty($uids)) {
  73. $data = DB::fetch_all('SELECT * FROM %t WHERE '.DB::field('uid', $uids).DB::limit($start, $limit), array($this->_table), null, 'uid');
  74. }
  75. return $data;
  76. }
  77. public function update_by_ipban($ip1, $ip2, $ip3, $ip4) {
  78. $ip1 = intval($ip1);
  79. $ip2 = intval($ip2);
  80. $ip3 = intval($ip3);
  81. $ip4 = intval($ip4);
  82. return DB::query('UPDATE '.DB::table('common_session')." SET groupid='6' WHERE ('$ip1'='-1' OR ip1='$ip1') AND ('$ip2'='-1' OR ip2='$ip2') AND ('$ip3'='-1' OR ip3='$ip3') AND ('$ip4'='-1' OR ip4='$ip4')");
  83. }
  84. public function update_max_rows($max_rows) {
  85. return DB::query('ALTER TABLE '.DB::table('common_session').' MAX_ROWS='.dintval($max_rows));
  86. }
  87. public function clear() {
  88. return DB::query('DELETE FROM '.DB::table('common_session'));
  89. }
  90. public function count_by_fid($fid) {
  91. return ($fid = dintval($fid)) ? DB::result_first('SELECT COUNT(*) FROM '.DB::table('common_session')." WHERE uid>'0' AND fid='$fid' AND invisible='0'") : 0;
  92. }
  93. public function fetch_all_by_fid($fid, $limit = 12) {
  94. return ($fid = dintval($fid)) ? DB::fetch_all('SELECT uid, groupid, username, invisible, lastactivity FROM '.DB::table('common_session')." WHERE uid>'0' AND fid='$fid' AND invisible='0' ORDER BY lastactivity DESC".DB::limit($limit)) : array();
  95. }
  96. public function update_by_uid($uid, $data){
  97. if(($uid = dintval($uid)) && !empty($data) && is_array($data)) {
  98. return DB::update($this->_table, $data, DB::field('uid', $uid));
  99. }
  100. return 0;
  101. }
  102. public function count_by_ip($ip) {
  103. $count = 0;
  104. if(!empty($ip) && ($ip = explode('.', $ip)) && count($ip) > 2 ) {
  105. $count = DB::result_first('SELECT COUNT(*) FROM '.DB::table('common_session')." WHERE ip1='$ip[0]' AND ip2='$ip[1]' AND ip3='$ip[2]'");
  106. }
  107. return $count;
  108. }
  109. public function fetch_all_by_ip($ip, $start = 0, $limit = 0) {
  110. $data = array();
  111. if(!empty($ip) && ($ip = explode('.', $ip)) && count($ip) > 2 ) {
  112. $data = DB::fetch_all('SELECT * FROM %t WHERE ip1=%d AND ip2=%d AND ip3=%d ORDER BY lastactivity DESC'.DB::limit($start, $limit), array($this->_table, $ip[0], $ip[1], $ip[2]), null);
  113. }
  114. return $data;
  115. }
  116. }
  117. ?>