ElixirVault/www/system-brs-core/library/cUsersOnline/cUsersOnline.php

98 lines
3.0 KiB
PHP

<?php
namespace BRSystems\Core\Library\cUsersOnline;
use BRSystems\Core\App\pubUsers\inc\pubUsersController;
use BRSystems\Core\Library\cSession\cSession;
use BRSystems\Core\Sys\sysUsers\inc\sysUsersController;
/**
* sysUsersOnline Controller
*
* @category sysUsersOnline Controller
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @since Version 2.0
*/
class cUsersOnline
{
public $module;
private $sUser; // Session class object
public $suoTimeout = 300; // 5 mins in ms
const CRON_ID = 7;
/**
* Class constructor
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category sysUsersOnline Controller
* @param bool $bSetMeOnline - set current user online
* @param bool $bIsCmsSide - cms side passed
*/
public function __construct($bSetMeOnline = true, $bIsCmsSide = false){
$this->sUser = new cSession(($bIsCmsSide ? sysUsersController::USER_SESSION_KEY : pubUsersController::USER_SESSION_KEY));
$this->module = new cUsersOnlineModule($bIsCmsSide);
// Set current user online if set to true
if($bSetMeOnline) $this->setMeOnline();
}
/**
* Function to check if log needed or not - and log online user
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category sysUsersOnline Controller
* @return array of data
*/
public function setMeOnline(){
if(!($this->sUser->suser || $this->sUser->noSuOnline)){
if(
0
|| !$this->sUser->suo_time
|| $this->sUser->suo_time < time() - $this->suoTimeout
|| $this->sUser->id <> $this->sUser->suo_ser_d
){
$this->sUser->suo_ser_d = $this->sUser->id;
$this->sUser->suo_time = $t = time();
$md5Key = md5($this->sUser->id . '_' . session_id());
return $this->module->addOnlineMe($this->sUser->id, $_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_USER_AGENT'], $md5Key, $t);
}
}
return false;
}
/**
* Function to get online user count
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category sysUsersOnline Controller
* @return array of data
*/
public function getOnlineCount(){
$this->setMeOnline();
if($onlineCount = $this->module->getOnlineCount($this->suoTimeout, array($this->sUser->id => $_SERVER['REMOTE_ADDR'], self::CRON_ID => null))){ // Exclude myself
return $onlineCount;
}
return 0;
}
/**
* Function to get online user data
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category sysUsersOnline Controller
* @return array of data
*/
public function getOnlineUsers(){
$this->setMeOnline();
if(!!($data = $this->module->getOnlineUserData($this->suoTimeout, array($this->sUser->id => $_SERVER['REMOTE_ADDR'], self::CRON_ID => null)))){ // Exclude myself
return $data;
}
return false;
}
}