<?php
/*
 *  Этот файл поставляется в составе мини-сайта и разработан в рамках портала Radio-Tochka.com
 *  Copyright (C) 2011 Radio-Tochka.com <info@radio-tochka.com>
 *  Все права защищены. Не удаляйте этот копирайт.
*/

header("Content-Type: text/html;charset=utf-8");
include("config.php");

function getShoutcast1Stats( $ip, $port, $pass ){

  $hostname = Array();
  $connecttime = Array();
  $useragent = Array();

  $fp = @fsockopen( $ip, $port, $errno, $errstr, 30);
  if( $fp ){
    fputs($fp,"GET /admin.cgi?pass=$pass&mode=viewxml HTTP/1.0\r\nUser-Agent: XML Getter (Mozilla Compatible)\r\n\r\n");  //get XML page
    $page = "";
    while(!feof($fp)) {
      $page .= fgets($fp, 1000);
    }
    $m = Array();
    //preg_match( "/\<LISTENER\>.*\<\/LISTENER\>/", $page, $m );
    preg_match_all( "|<LISTENER>(.*)</LISTENER>|U", $page, $m );
    if( count($m[1]) > 0 ){
      for( $i = 0; $i < count($m[1]); $i++ ){
        $hm_m = Array();
        if( preg_match( "/\<HOSTNAME\>(.*?)\<\/HOSTNAME\>/", $m[1][$i], $hn_m ) ){
          $ct_m = Array();
          if( preg_match( "/\<CONNECTTIME\>(.*?)\<\/CONNECTTIME\>/", $m[1][$i], $ct_m ) ){
            $ua_m = Array();
            if( preg_match( "/\<USERAGENT\>(.*?)\<\/USERAGENT\>/", $m[1][$i], $ua_m ) ){
              $hostname[] = $hn_m[1];
              $connecttime[] = $ct_m[1];
              $useragent[] = $ua_m[1];
            }
          }
        }
      }
    }
  }
  else{
    //print "Shoutcast connection error: ".$errstr;
  }
  @fclose($fp);
  
  return Array( $hostname, $connecttime, $useragent );

}

function getIcecastStats( $ip, $port, $mount, $pass ){

  $hostname = Array();
  $connecttime = Array();
  $useragent = Array();
  
  $url = "http://admin:".$pass."@".$ip.":".$port."/admin/listclients?mount=".$mount;
  $page = strtolower(file_get_contents($url));
  $listeners = new SimpleXMLElement($page);
  foreach ($listeners->source[0]->listener as $listener) {
        $hostname[] = $listener->ip;
        $connecttime[] = $listener->connected;
        $useragent[] = $listener->useragent;
  }
  return Array( $hostname, $connecttime, $useragent );
}

$db = @mysql_connect( $db_host, $db_user, $db_pass );
if($db){
  if( @mysql_select_db( $db_name, $db ) ){
    // Получить админский пароль сервера
    $sql = "SELECT `s_type`,`ip_address`,`port`,`mount_point`,`password` FROM `main_channel` WHERE `server_id`=".$server_id." AND `active`";
    $res = mysql_query( $sql );
    $hostname = Array();
    $connecttime = Array();
    $useragent = Array();
    
    if( $res && mysql_num_rows($res) > 0 ){

      while ( $row=mysql_fetch_array($res) ){

        $ip    = $row[1];
        $port  = $row[2];
        $mount = $row[3];
        $pass  = $row[4];
          
        if( $row['s_type'] == "shoutcast1" ){
          $r = getShoutcast1Stats( $ip, $port, $pass );
        }
        else if( $row['s_type'] == "icecast" ){
          $r = getIcecastStats( $ip, $port, $mount, $pass );
        }
        else{
          continue;
        }
        $hostname = array_merge( $hostname, $r[0] );
        $connecttime = array_merge( $connecttime, $r[1] );
        $useragent = array_merge( $useragent, $r[2] );
        
      }
    }
    else{
      die("Ошибка подключения к серверу.");
    }
  }
  
  else{
    die("Ошибка соединения с базой данных.");
  }
}
else{
  die("Ошибка соединения с базой данных.");
}
@mysql_close($db);
?>
<html>
<body onload="initialize()" style="margin:0px;">
<div id="map_canvas" style="width:800px; height: 600px; margin:0px;"></div> 
<script src="http://maps.google.com/maps/api/js?sensor=false&amp;language=ru&amp;v=3" type="text/javascript"></script> 
<script type="text/javascript">
    function initialize() {
	var myLatlng = new google.maps.LatLng(40.397, 10.644);
        var myOptions = {
			zoom: 3,
                        center: myLatlng,
                        mapTypeId: google.maps.MapTypeId.ROADMAP
	}
        var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

<?php        
$ii = 0;
for( $i = 0; $i < count($hostname); $i++ ){
    
  $d = @geoip_record_by_name($hostname[$i]);
    if($d){
	$ii+=1;
	print "var pos".$ii." = new google.maps.LatLng( ".$d['latitude'].", ".$d['longitude'].")\n";
	print "var marker".$ii." = new google.maps.Marker({map: map, position: pos".$ii.", title: '".$d['city']."' });\n";
	print "var i".$ii." = new google.maps.InfoWindow();\n";
	if( $d['city'] ){
	    $d['city'] = $d['city'].", ".$d['country_name'];
	}
	else{
	    $d['city'] = $d['country_name'];
	}
	$s = (int)$connecttime[$i];
	$m = floor( $s / 60);
	$s = $s % 60;
	$h = floor($m / 60);
	$m = $m % 60;
	$dd = floor( $h / 24 );
	$h = $h % 24;
	$h += 24 * $dd;
	
        if ($h > 0){
	    $l_time = "Слушает ".$h." ч. ".$m." мин. ".$s." сек.";
	}
	else{
	    $l_time = "Слушает ".$m." мин. ".$s." сек.";
	}
	
	
	print "i".$ii.".setContent('<img src=\"http://radio-tochka.com/awstats/icons/flags/".strtolower($d['country_code']).".png\"><b style=\"font-size: 14px\">".$d['city']."</b><br><span style=\"font-size: 12px\">".$useragent[$i]."</span><br><span style=\"font-size: 12px\">".$l_time."</span><br><i style=\"font-size: 12px; color: #909090\">".$hostname[$i]."</i>');\n";
	print "google.maps.event.addListener(marker".$ii.", 'click', function() {i".$ii.".open(map, marker".$ii.");});\n";
    }
}

/*
 *  Этот файл поставляется в составе мини-сайта и разработан в рамках портала Radio-Tochka.com
 *  Copyright (C) 2012 Radio-Tochka.com <info@radio-tochka.com>
 *  Все права защищены. Не удаляйте этот копирайт.
*/

?>

    }
</script>
</body>
</html>