158 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| if(!defined('DATALIFEENGINE')) {die("Hacking attempt!");}
 | |
| 
 | |
| $onl_options['separator']=", ";
 | |
| $onl_useragent = $_SERVER['HTTP_USER_AGENT'];
 | |
| $ip = $_SERVER['REMOTE_ADDR'];
 | |
| $ip = str_replace(",", ".", $ip);
 | |
| if (!$_TIME) $_TIME = time()+($config['date_adjust']*60);
 | |
| $_TIME=intval($_TIME);
 | |
| $online_time = $config['user_online']*60;
 | |
| $datecut = $_TIME - $online_time;
 | |
| 
 | |
| function online_robots($useragent) {
 | |
| 	$r_or=false;
 | |
| 
 | |
|     $remap_agents = array(
 | |
|         "#.*(yandex|yadirectbot).*#si" => "Yandex",
 | |
|         "#.*(google|accoona|gsa-crawler).*#si" => "Google",
 | |
|         "#.*rambler.*#si" => "Rambler",
 | |
|         '#.*mail.ru.*#si' => "Mail.RU",
 | |
|         "#.*aport.*#si" => "Aport",
 | |
|         "#.*TurtleScanner.*#si" => "Turtle",
 | |
|         "#.*msnbot.*#si" => "MSN",
 | |
|         "#.*yahoo.*#si" => "Yahoo",
 | |
|         "#.*scooter.*#si" => "Altavista",
 | |
|         "#.*lycos.*#si" => "Lycos.com",
 | |
|         "#.*libwww.*#si" => "Punto",
 | |
|         "#.*(is_archiver|archive_org).*#si" => "Archive.org",
 | |
|         "#.*(W3C_Validator|W3C_CSS_Validator).*#si" => "W3C"
 | |
|     );
 | |
|     $result = preg_replace(array_keys($remap_agents), $remap_agents, $useragent);
 | |
|     $r_or = $result == $useragent ? $r_or : $result;
 | |
| 	
 | |
| 	return $r_or;
 | |
| }
 | |
| 
 | |
| //Ïðîâåðÿåì ïîëüçîâàòåëè è îáíîâëÿåì îíëàéí ñòàòóñ
 | |
| if(!$member_id['user_id']){
 | |
| 	$onl_botname = online_robots($onl_useragent);
 | |
| }elseif( ($member_id['lastdate'] + $online_time) < $_TIME ){
 | |
| 	$db->query("UPDATE LOW_PRIORITY " . USERPREFIX . "_users SET lastdate='{$_TIME}', logged_ip='{$ip}' WHERE user_id='{$member_id['user_id']}'");
 | |
| }
 | |
| 
 | |
| //if (isset($_COOKIE['lastusername'])) $lastusername = $_COOKIE['lastusername']; else $lastusername = "";
 | |
| if (isset($_COOKIE['dle_onl_session'])) $onl_session = $_COOKIE['dle_onl_session']; else $onl_session = session_id();
 | |
| 
 | |
| # Óäàëÿåì ëèøíèõ ïîëüçîâàòåëåé èç ñïèñêà â ÁÄ 
 | |
| $db->query("DELETE FROM " . PREFIX . "_online WHERE lastdate < $datecut");
 | |
| 
 | |
| # Îïðåäåëÿåì êîëè÷åñòâî ïîëüçîâàòåëåé ïî êðèòåðèþ è â çàâèñèìîñòè îò ðåçóëüòàòà, âûïîëíÿåì çàïðîñ îáíîâàëåíèÿ èëè ñîçäàíèÿ çàïèñè î ïîëüçîâàòåëå
 | |
| $onl_query["search_us"]="SELECT COUNT(*) as count FROM " . PREFIX . "_online WHERE session='{$onl_session}'";
 | |
| $onl_count_user = $db->super_query($onl_query["search_us"]);
 | |
| 
 | |
| if($onl_count_user['count']) {
 | |
| 	$onl_query["update_us"]="UPDATE " . PREFIX . "_online SET uid=".intval($member_id['user_id']).", lastdate={$_TIME}, useragent='{$onl_useragent}', ip='{$ip}' WHERE session='{$onl_session}'";
 | |
| 	$db->query($onl_query["update_us"]);
 | |
| } else {
 | |
| 	$onl_query["create_us"]="INSERT INTO " . PREFIX . "_online (uid, session, lastdate, useragent, ip) VALUES(".intval($member_id['user_id']).", '{$onl_session}', {$_TIME}, '{$onl_useragent}', '{$ip}')";
 | |
| 	$db->query($onl_query["create_us"]);
 | |
| 	setcookie("dle_onl_session",session_id(), $_TIME+3600*24*365, "/", $domain);
 | |
| }
 | |
| 
 | |
| # Âûáèðàåì ïîëüçîâàòåëåé èç ÁÄ
 | |
| $sql = "SELECT
 | |
| 			user.name AS user_name, user.user_group,
 | |
| 			online.uid, online.useragent, online.session, online.ip, online.lastdate
 | |
| 		FROM " . PREFIX . "_online AS online
 | |
| 		LEFT JOIN " . PREFIX . "_users AS user ON(user.user_id = online.uid)
 | |
| 		WHERE online.lastdate > $datecut
 | |
| 		ORDER BY name ASC";
 | |
| $onl_userlist_q = $db->query($sql);
 | |
| 
 | |
| # Îáðàáîòêà ïîëó÷åííûõ äàííûõ èç ÁÄ
 | |
| $onl_guests=$onl_users=$onl_robots=$onl_lusers=$onl_lrobots=0;
 | |
| while($onl_userlist = $db->get_array($onl_userlist_q)) {
 | |
| 	if($onl_userlist['uid']==false) {
 | |
| 		$current_robot = online_robots($onl_userlist['useragent']);
 | |
| 		if ($current_robot!="") {
 | |
| 			if ($onl_onlinebots[$current_robot]['lastdate']<$onl_userlist['lastdate']) {
 | |
| 				$onl_onlinebots[$current_robot]['name']=$current_robot;
 | |
| 				$onl_onlinebots[$current_robot]['lastdate']=$onl_userlist['lastdate'];
 | |
| 				$onl_onlinebots[$current_robot]['ip']=$onl_userlist['ip'];
 | |
| 			}
 | |
| 		} else $onl_guests++;
 | |
| 	} else {
 | |
| 		if ($onl_onlineusers[$onl_userlist['uid']]['lastdate']<$onl_userlist['lastdate']) {
 | |
| 			$onl_onlineusers[$onl_userlist['uid']]['name']=$onl_userlist['user_name'];
 | |
| 			$onl_onlineusers[$onl_userlist['uid']]['lastdate']=$onl_userlist['lastdate'];
 | |
| 			$onl_onlineusers[$onl_userlist['uid']]['group']=$onl_userlist['user_group'];
 | |
| 			$onl_onlineusers[$onl_userlist['uid']]['useragent']=$onl_userlist['useragent'];
 | |
| 			$onl_onlineusers[$onl_userlist['uid']]['ip']=$onl_userlist['ip'];
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| if (count($onl_onlineusers)) {
 | |
| 	foreach ($onl_onlineusers as $uid => $value) {
 | |
| 		    $onl_users++;
 | |
|             $profile_url = $config['http_home_url']. "user/" . urlencode( $onl_onlineusers[$uid]['name'] ) . "/";
 | |
| 
 | |
|             if ($user_group[$onl_onlineusers[$uid]['group']]['colour']){
 | |
|       			$group_span = $user_group[$onl_onlineusers[$uid]['group']]['colour'];
 | |
|                 $onl_ulink[] =  "\n<a href=\"$profile_url\"><span style=\"color:{$group_span}\">".$onl_onlineusers[$uid]['name']."</span></a>";
 | |
|       		}else{
 | |
|                 $onl_ulink[] = "\n<a href=\"$profile_url\">".$onl_onlineusers[$uid]['name']."</a>";
 | |
|       		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| //unset ($onl_userlist_q, $onl_onlineusers);
 | |
| $onl_userlist_q=$onl_onlineusers=array();
 | |
| 
 | |
| if (count($onl_onlinebots)) {
 | |
| 	foreach ($onl_onlinebots as $name => $value) {
 | |
| 		$onl_robots++;
 | |
| 		$onl_blink[] = '<span style="cursor:hand;">'.$name.'</span>';
 | |
| 	}
 | |
| }
 | |
| 
 | |
| //unset($onl_onlinebots);
 | |
| $onl_onlinebots=array();
 | |
| 
 | |
| $tpl->load_template('online.tpl');
 | |
| 
 | |
| # Ñîñòàâëåíèå ñïèñêà ïîëüçîâàòåëåé
 | |
| if (count($onl_ulink)==0) {
 | |
| 	$onl_userlist .= "Îòñóòñòâóþò";
 | |
| }
 | |
| for($i=0;$i<count($onl_ulink);$i++) {
 | |
| 	$onl_userlist .= $onl_ulink[$i].$onl_options['separator'];
 | |
| }
 | |
| if(count($onl_ulink)) $onl_userlist=substr_replace($onl_userlist, '', strlen($onl_userlist)-strlen($onl_options['separator']), strlen($onl_options['separator']));
 | |
| if (count($onl_blink)==0) {
 | |
| 	$onl_botlist = "Îòñóòñòâóþò";
 | |
| }
 | |
| for($i=0;$i<count($onl_blink);$i++) {
 | |
| 	$onl_botlist .= $onl_blink[$i].$onl_options['separator'];
 | |
| }
 | |
| if(count($onl_blink)) $onl_botlist=substr_replace($onl_botlist, '', strlen($onl_botlist)-strlen($onl_options['separator']), strlen($onl_options['separator']));
 | |
| 
 | |
| $onl_ulink=$onl_lulink=$onl_blink=array();
 | |
| 
 | |
| if (!$is_logged) $userlist = "Ñïèñîê âèäåí òîëüêî çàðåãèñòðèðîâàííûì.";
 | |
| else $userlist = $onl_userlist;
 | |
| 
 | |
| $tpl->set('{users}',$onl_users);
 | |
| $tpl->set('{guest}',$onl_guests);
 | |
| $tpl->set('{robots}',$onl_robots);
 | |
| $tpl->set('{all}',($onl_users+$onl_guests+$onl_robots));
 | |
| $tpl->set('{userlist}',$userlist);
 | |
| $tpl->set('{botlist}',$onl_botlist);
 | |
| 
 | |
| //unset($onl_userlist, $onl_botlist);
 | |
| $onl_userlist=$onl_botlist="";
 | |
| 
 | |
| $tpl->compile('online');
 | |
| $tpl->clear();
 | |
| ?>
 |