コード例 #1
0
 /**
  * @dataProvider obtain_guest_count_data
  */
 public function test_obtain_guest_count($forum_id, $expected)
 {
     $this->db->sql_query('DELETE FROM phpbb_sessions');
     $time = time();
     $this->create_guest_sessions($time);
     $this->assertEquals($expected, obtain_guest_count($forum_id));
 }
コード例 #2
0
ファイル: functions.php プロジェクト: Phatboy82/phpbbgarage
/**
* Queries the session table to get information about online users
* @param int $forum_id Limits the search to the forum with this id
* @return array An array containing the ids of online, hidden and visible users, as well as statistical info
*/
function obtain_users_online($forum_id = 0)
{
    global $db, $config, $user;
    $reading_sql = '';
    if ($forum_id !== 0) {
        $reading_sql = ' AND s.session_forum_id = ' . (int) $forum_id;
    }
    $online_users = array('online_users' => array(), 'hidden_users' => array(), 'total_online' => 0, 'visible_online' => 0, 'hidden_online' => 0, 'guests_online' => 0);
    if ($config['load_online_guests']) {
        $online_users['guests_online'] = obtain_guest_count($forum_id);
    }
    // a little discrete magic to cache this for 30 seconds
    $time = time() - intval($config['load_online_time']) * 60;
    $sql = 'SELECT s.session_user_id, s.session_ip, s.session_viewonline
		FROM ' . SESSIONS_TABLE . ' s
		WHERE s.session_time >= ' . ($time - (int) ($time % 30)) . $reading_sql . ' AND s.session_user_id <> ' . ANONYMOUS;
    $result = $db->sql_query($sql);
    while ($row = $db->sql_fetchrow($result)) {
        // Skip multiple sessions for one user
        if (!isset($online_users['online_users'][$row['session_user_id']])) {
            $online_users['online_users'][$row['session_user_id']] = (int) $row['session_user_id'];
            if ($row['session_viewonline']) {
                $online_users['visible_online']++;
            } else {
                $online_users['hidden_users'][$row['session_user_id']] = (int) $row['session_user_id'];
                $online_users['hidden_online']++;
            }
        }
    }
    $online_users['total_online'] = $online_users['guests_online'] + $online_users['visible_online'] + $online_users['hidden_online'];
    $db->sql_freeresult($result);
    return $online_users;
}