maison_alexandra/www/system-brs-core/library/cUsersOnline/cUsersOnlineModule.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;
}
}