source: pro-violet-viettel/sourcecode/api.violet.vn/www/lib/common/onlineUser.class.php @ 289

Last change on this file since 289 was 289, checked in by dungnv, 11 years ago
File size: 3.1 KB
Line 
1<?php
2class onlineUser {
3
4  protected static $instance = null;
5
6  public static function getInstance() {
7    if (self::$instance==null) {
8      self::$instance = new onlineUser();
9    }
10    return self::$instance;
11  }
12
13  public function addUser(sfMyUser $user) {
14    if (sfDatabaseSessionStorage::$is_bot) return;
15    $this->user = $user;
16    $pdo = sfDatabaseSessionStorage::$pdo;
17    $blog = blogStore::$blogId;
18    $time = time();
19
20    if ($user->isAuthenticated()) {
21      $id = $pdo->quote($user->getUserId());
22      $fullname = $pdo->quote($user->getUserFullname());
23      $pdo->exec("insert into online_user values($blog, $id, $fullname, $time) on duplicate key update ou_time=$time");
24    } else {
25      $crc = crc32(myUtility::getRealIpAddr());
26      $pdo->exec("insert into online_guest values($blog, $crc, $time) on duplicate key update og_time=$time");
27    }
28  }
29
30  public function removeCurrentUser() {
31    if ($this->user) {
32      if ($this->user->isAuthenticated()) {
33        sfDatabaseSessionStorage::$pdo->exec('delete from online_user where ou_userid = '.$this->user->getUserId());
34      } else {
35        $crc = crc32(myUtility::getRealIpAddr());
36        sfDatabaseSessionStorage::$pdo->exec('delete from online_guest where og_crc = '.$crc);
37      }
38    }
39  }
40
41  public function getOnlineUsers($baseLink, &$numGuest, &$numUser, $maxNum=100) {
42    $ret = '';
43    $bl_id = blogStore::$blogId;
44    $pdo = sfDatabaseSessionStorage::$pdo;
45    $numGuest = $pdo->query("select count(*) from online_guest where og_blog=$bl_id")->fetchColumn();
46    $numUser = $pdo->query("select count(*) from online_user where ou_blog=$bl_id")->fetchColumn();
47    $stmt = $pdo->query("select ou_userid, ou_user_fullname from online_user where ou_blog=$bl_id limit $maxNum");
48    while ($row = $stmt->fetch(PDO::FETCH_NUM)) {
49      $ret .= '<li>'.link_to($row[1], $baseLink.$row[0]).'</li>';
50    }
51    return $ret;
52  }
53
54  public function getAllOnlineUsers($baseLink, &$numGuest, &$numUser, $maxNum=100) {
55    $ret = '';
56    $bl_id = blogStore::$blogId;
57    $pdo = sfDatabaseSessionStorage::$pdo;
58    $numGuest = $pdo->query("select count(*) from sessions where ss_userid=0")->fetchColumn();
59    $numUser = $pdo->query("select count(*) from sessions where ss_userid>0")->fetchColumn();
60    $stmt = $pdo->query("select ss_userid, ss_user_fullname from sessions where ss_userid>0 limit $maxNum");
61    $order = 0;
62    while ($row = $stmt->fetch(PDO::FETCH_NUM)) {
63      if (++$order == 10) $ret .="<div id='user_online' style='display:none; cursor:pointer'>";
64      $ret .= '<li>'.link_to($row[1], $baseLink.$row[0]).'</li>';
65    }
66    if ($numUser>=10) {
67      $ret .="</div><span id='user_off' style=\"display:none; cursor:pointer\" onClick=\"document.getElementById('user_online').style.display='none';document.getElementById('user_on').style.display='inline';  document.getElementById('user_off').style.display='none'; \" > << </span>    <span style=\"cursor:pointer\" id='user_on' onClick=\"document.getElementById('user_online').style.display='inline'; document.getElementById('user_on').style.display='none';document.getElementById('user_off').style.display='inline'; \" > >> </span>";
68    }
69    return $ret;
70  }
71}
Note: See TracBrowser for help on using the repository browser.