name = 'statslive'; $this->tab = 'Stats'; $this->version = 1.0; parent::__construct(); $this->displayName = $this->l('Visitors online'); $this->description = $this->l('Display the list of customers and visitors currently online'); } public function install() { return (parent::install() AND $this->registerHook('AdminStatsModules')); } private function getCustomersOnline() { return Db::getInstance()->ExecuteS(' SELECT u.id_customer, u.firstname, u.lastname, pt.name as page FROM `'._DB_PREFIX_.'connections` c LEFT JOIN `'._DB_PREFIX_.'connections_page` cp ON c.id_connections = cp.id_connections LEFT JOIN `'._DB_PREFIX_.'page` p ON p.id_page = cp.id_page LEFT JOIN `'._DB_PREFIX_.'page_type` pt ON p.id_page_type = pt.id_page_type INNER JOIN `'._DB_PREFIX_.'guest` g ON c.id_guest = g.id_guest INNER JOIN `'._DB_PREFIX_.'customer` u ON u.id_customer = g.id_customer WHERE cp.`time_end` IS NULL AND TIME_TO_SEC(TIMEDIFF(NOW(), cp.`time_start`)) < 900 GROUP BY c.id_connections ORDER BY u.firstname, u.lastname'); } private function getVisitorsOnline() { return Db::getInstance()->ExecuteS(' SELECT c.id_guest, c.ip_address, c.date_add, c.http_referer, pt.name as page FROM `'._DB_PREFIX_.'connections` c LEFT JOIN `'._DB_PREFIX_.'connections_page` cp ON c.id_connections = cp.id_connections LEFT JOIN `'._DB_PREFIX_.'page` p ON p.id_page = cp.id_page LEFT JOIN `'._DB_PREFIX_.'page_type` pt ON p.id_page_type = pt.id_page_type INNER JOIN `'._DB_PREFIX_.'guest` g ON c.id_guest = g.id_guest WHERE (g.id_customer IS NULL OR g.id_customer = 0) AND cp.`time_end` IS NULL AND TIME_TO_SEC(TIMEDIFF(NOW(), cp.`time_start`)) < 900 GROUP BY c.id_connections ORDER BY c.date_add DESC'); } public function hookAdminStatsModules($params) { global $cookie; $customers = $this->getCustomersOnline(); $totalCustomers = Db::getInstance()->NumRows(); $visitors = $this->getVisitorsOnline(); $totalVisitors = Db::getInstance()->NumRows(); $irow = 0; echo '
'.$this->l('Customers online').''; if ($totalCustomers) { echo $this->l('Total:').' '.intval($totalCustomers).' '; foreach ($customers as $customer) echo ' '; echo '
'.$this->l('ID').''.$this->l('Name').''.$this->l('Current Page').''.$this->l('View').'
'.$customer['id_customer'].' '.$customer['firstname'].' '.$customer['lastname'].' '.$customer['page'].'
'; } else echo $this->l('There is no customer online now.'); echo '
'.$this->l('Visitors online').''; if ($totalVisitors) { echo $this->l('Total:').' '.intval($totalVisitors).'
'; foreach ($visitors as $visitor) echo ' '; echo '
'.$this->l('Guest').''.$this->l('IP').''.$this->l('Since').''.$this->l('Current page').''.$this->l('Referrer').'
'.$visitor['id_guest'].' '.long2ip($visitor['ip_address']).' '.substr($visitor['date_add'], 11).' '.$visitor['page'].' '.(empty($visitor['http_referer']) ? $this->l('none') : parse_url($visitor['http_referer'], PHP_URL_HOST)).'
'; } else echo $this->l('There is no visitor online now.'); echo '
'; } } ?>