170 lines
5.0 KiB
PHP
170 lines
5.0 KiB
PHP
<?php
|
|
|
|
namespace BRSystems\Core\Library\cUsersOnline;
|
|
|
|
use BRSystems\Core\Library\cDb\cDb;
|
|
|
|
/**
|
|
* cUsersOnline Module
|
|
*
|
|
* @category sysUsers Module
|
|
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
|
|
* @since Version 2.0
|
|
*/
|
|
class cUsersOnlineModule
|
|
{
|
|
private $oDb;
|
|
private $bCmsSide = false;
|
|
|
|
/**
|
|
* Class constructor
|
|
*/
|
|
public function __construct($bCMSSide = false) {
|
|
|
|
$this->oDb = cDb::getInstance(DB_HOST, DB_USR, DB_PWD, DB_PORT, DB_NAME);
|
|
$this->bCmsSide = $bCMSSide;
|
|
|
|
}
|
|
|
|
/**
|
|
* Function to log user online status
|
|
*
|
|
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
|
|
* @category cUsersOnline Module
|
|
* @param $userId - user id to log
|
|
* @param $userIp - user ip to log
|
|
* @param $time - user time to log
|
|
* @return bool - true / false
|
|
* @version 1.1
|
|
*/
|
|
public function addOnlineMe($userId, $userIp, $sUserAgent, $sMD5Key, $time){
|
|
|
|
return $this->oDb->_queryInsert('temp_users_online', array(
|
|
'o_time' => $time,
|
|
'o_ip' => $userIp,
|
|
'o_user_id' => $userId,
|
|
'o_type' => ($this->bCmsSide ? '1' : '0'),
|
|
'o_user_agent' => $sUserAgent,
|
|
'o_user_md5_key' => $sMD5Key,
|
|
));
|
|
|
|
}
|
|
|
|
/**
|
|
* Function to get online user count
|
|
*
|
|
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
|
|
* @category cUsersOnline Module
|
|
* @param $suoTime - user lot timeout
|
|
* @param array $vExclUser2Ip - exclude users with passed ids
|
|
* @return bool - true / false
|
|
* @version 1.1
|
|
*/
|
|
public function getOnlineCount($suoTime, $vExclUser2Ip = array()){
|
|
|
|
$sWhere = "";
|
|
if(!!$vExclUser2Ip && is_array($vExclUser2Ip)){
|
|
foreach($vExclUser2Ip as $iUserId => $IP){
|
|
if($IP == 'null' || $IP == null)
|
|
$sWhere .= "AND suo.o_user_id <> {$iUserId} ";
|
|
else
|
|
$sWhere .= "AND suo.o_ip = '{$IP}' AND suo.o_user_id <> {$iUserId} ";
|
|
}
|
|
}
|
|
|
|
$sSql = "
|
|
SELECT
|
|
count(*)
|
|
FROM
|
|
temp_users_online suo
|
|
WHERE
|
|
suo.o_type = '" . ($this->bCmsSide ? '1' : '0') . "'
|
|
AND suo.o_time > (UNIX_TIMESTAMP() - {$suoTime})
|
|
AND (" . (strlen($sWhere) ? substr($sWhere, 4) : "1") . ")
|
|
GROUP BY
|
|
suo.o_user_id, suo.o_ip
|
|
";
|
|
|
|
$this->oDb->query($sSql);
|
|
return $this->oDb->getOne();
|
|
}
|
|
|
|
/**
|
|
* Function to get online user count
|
|
*
|
|
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
|
|
* @category cUsersOnline Module
|
|
* @param $suoTime - user lot timeout
|
|
* @param array $vExclUser2Ip - exclude users with passed ids
|
|
* @return bool - true / false
|
|
* @version 1.1
|
|
*/
|
|
public function getOnlineUserData($suoTime, $vExclUser2Ip = array()){
|
|
|
|
$sWhere = "";
|
|
if(!!$vExclUser2Ip && is_array($vExclUser2Ip)){
|
|
foreach($vExclUser2Ip as $iUserId => $IP){
|
|
if($IP == 'null' || $IP == null)
|
|
$sWhere .= "AND suo.o_user_id <> {$iUserId} ";
|
|
else
|
|
$sWhere .= "AND suo.o_ip = '{$IP}' AND suo.o_user_id <> {$iUserId} ";
|
|
}
|
|
}
|
|
|
|
$sUserTable = ($this->bCmsSide ? 'site_users' : 'mod_users');
|
|
|
|
$sSql = "
|
|
SELECT
|
|
mu.id,
|
|
" . ($this->bCmsSide ? "CONCAT(mu.user_name,' ',mu.user_surname) ": "mu.user_full_name ") . " as name
|
|
FROM
|
|
temp_users_online suo
|
|
LEFT JOIN {$sUserTable} mu ON
|
|
mu.id = suo.o_user_id
|
|
WHERE
|
|
suo.o_type = '" . ($this->bCmsSide ? '1' : '0') . "'
|
|
AND suo.o_time > UNIX_TIMESTAMP() - {$suoTime}
|
|
AND (" . (strlen($sWhere) ? substr($sWhere, 4) : "1") . ")
|
|
GROUP BY
|
|
suo.o_user_id, suo.o_ip
|
|
";
|
|
|
|
$this->oDb->query($sSql);
|
|
return $this->oDb->getArray();
|
|
}
|
|
|
|
/**
|
|
* Function to get IPs for specific user id
|
|
*
|
|
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
|
|
* @category cUsersOnline Module
|
|
* @param $suoTime - user lot timeout
|
|
* @param int $iUserId - users id
|
|
* @return bool - true / false
|
|
* @version 1.1
|
|
*/
|
|
public function getOnlineUserMd5Keys($suoTime, $iUserId){
|
|
|
|
if(!!$iUserId && $suoTime){
|
|
$sSql = "
|
|
SELECT
|
|
suo.o_ip,
|
|
suo.o_user_md5_key as md5
|
|
FROM
|
|
temp_users_online suo
|
|
WHERE
|
|
suo.o_type = '" . ($this->bCmsSide ? '1' : '0') . "'
|
|
AND suo.o_time > UNIX_TIMESTAMP() - {$suoTime}
|
|
AND suo.o_user_id = {$iUserId}
|
|
GROUP BY
|
|
suo.o_user_id, suo.o_ip
|
|
";
|
|
|
|
$this->oDb->query($sSql);
|
|
return $this->oDb->getArray();
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|