query( "update {chatsitevisitor} set lasttime = CURRENT_TIMESTAMP " . "where visitorid=?", array($visitor['visitorid']) ); track_visit_page($visitor['visitorid'], $referer); return $visitor['visitorid']; } } function track_visitor_start($entry, $referer) { $visitor = visitor_from_request(); $db = Database::getInstance(); $db->query( "insert into {chatsitevisitor} (userid,username,firsttime,lasttime,entry,details) ". "values (?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, ?, ?)", array( $visitor['id'], $visitor['name'], $entry, track_build_details() ) ); $id = $db->insertedId(); if ($id) { track_visit_page($id, $referer); } return $id ? $id : 0; } function track_get_visitor_by_id($visitorid) { $db = Database::getInstance(); return $db->query( "select * from {chatsitevisitor} where visitorid = ?", array($visitorid), array('return_rows' => Database::RETURN_ONE_ROW) ); } function track_get_visitor_by_threadid($threadid) { $db = Database::getInstance(); return $db->query( "select * from {chatsitevisitor} where threadid = ?", array($threadid), array('return_rows' => Database::RETURN_ONE_ROW) ); } function track_visit_page($visitorid, $page) { $db = Database::getInstance(); if (empty($page)) { return; } $lastpage = $db->query( "select address from {visitedpage} where visitorid = ? " . "order by visittime desc limit 1", array($visitorid), array('return_rows' => Database::RETURN_ONE_ROW) ); if ( $lastpage['address'] != $page ) { $db->query( "insert into {visitedpage} (visitorid, address, visittime) " . "values (?, ?, CURRENT_TIMESTAMP)", array($visitorid, $page) ); $db->query( "insert into {visitedpagestatistics} (address, visittime) " . "values (?, CURRENT_TIMESTAMP)", array($page) ); } } function track_get_path($visitor) { $db = Database::getInstance(); $query_result = $db->query( "select address, UNIX_TIMESTAMP(visittime) as visittime from {visitedpage} " . "where visitorid = ?", array($visitor['visitorid']), array('return_rows' => Database::RETURN_ALL_ROWS) ); $result = array(); foreach ($query_result as $page) { $result[$page['visittime']] = $page['address']; } return $result; } function track_build_details() { $result = array( 'user_agent' => $_SERVER['HTTP_USER_AGENT'], 'remote_host' => get_remote_host() ); return serialize($result); } function track_retrieve_details($visitor) { return unserialize($visitor['details']); } ?>