* @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 * @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 * @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 * @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 * @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; } }