<?php
 // Skript pro zobrazení grafu stromové struktury sítě do PNG obrázku
include('../Common/Global.php');

if(array_key_exists('debug', $_GET)) $debug = $_GET['debug'];
else $debug = 0;
$TopHostName = 'NIX-ROUTER';
// $debug = 0;

// === Vytvoř stromy a ulož výsledek do databáze ===============================
$DbResult = $Database->query("SELECT MAX(Pos), MAX(Depth) FROM NetworkTopology");
$item = $DbResult->fetch_array();
$width = $item[0];
$height = $item[1];

$spacex = 32;
$spacey = 68;
$halfx = $spacex / 2;
$halfy = $spacey / 2;
// === Načtení pomocných obrázků ===============================================
$im_comp = imagecreatefrompng('images/comp.png');
$im_dev = imagecreatefrompng('images/device.png');
// === Generování obrázku ======================================================
$im = imagecreate(($width + 1.6) * $spacex, ($height + 1) * $spacey);
$background_color = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);
$red = imagecolorallocate($im, 255, 0, 0);
$green = imagecolorallocate($im, 0, 128, 0);
$blue = imagecolorallocate($im, 100, 100, 255);
$gray = imagecolorallocate($im, 160, 160, 160);

function xpos() 
{
  global $vleft, $spacex;
  return($vleft * $spacex);
}

//$DbResult = $Database->query("SELECT * FROM hosts, hosts_topology WHERE host = id AND used=1");
$DbResult = $Database->query("SELECT tpl.*, tpl.Host AS id, dev.Name AS name, dev.Online AS online, dtp.IconName AS iconname, 1 AS showonline
  FROM NetworkTopology tpl LEFT JOIN NetworkDevice dev ON dev.id = tpl.host LEFT JOIN NetworkDeviceType dtp ON dev.type = dtp.id");
while($item = $DbResult->fetch_array()) 
{
  $id = $item['id'];
  $vleft = $item['Pos'];
  $vtop = $item['Depth'];
  $vfirst = $item['First'];
  $vlast = $item['Last'];
  if(($vtop > 0) || ($item['name'] == $TopHostName)) 
  {
    if($vtop > 0) imageline($im, xpos() + $halfx, $vtop * $spacey, xpos() + $halfx, $vtop * $spacey + 8, $black);
    if($vfirst >= 0) 
    {
      imageline($im, $vfirst*$spacex + $halfx, $vtop * $spacey + $spacey, $vlast*$spacex + $halfx, $vtop * $spacey + $spacey, $black);
      imageline($im, xpos() + $halfx, ($vtop + 1) * $spacey - 10, xpos() + $halfx, ($vtop + 1) * $spacey, $black);
    }
//    $ip = explode('.',$item['IP']);
//    if(!array_key_exists(3, $ip)) $ip[3] = '';
    if ($item['iconname']=='comp')
    {
      if($item['online'] == 1) { $color = $green; } else $color = $black;
      $image = $im_comp;
    } else $image = $im_dev;  
    if ($item['iconname']=='device')
    {
      if($item['online'] == 1) { $color = $green; } else $color = $red;
      $image = $im_dev;
    }
    if($item['showonline']==0)
    {
      $color = $gray;
      $image = $im_dev;
    }
//      $text='IP: '.$ip[0];
//      imagestring($im,2,xpos($id)+($spacex-strlen($text)*imagefontwidth(2))/2,$vtop[$id]*$spacey+24+imagefontheight(2),$text,$black);
    imagecopy($im, $image, xpos()+$halfx-15,$vtop*$spacey+12, 0, 0, 30, 30);
//    imagerectangle($im,xpos($id)+$halfx-6,$vtop[$id]*$spacey+16,xpos($id)+$halfx+6,$vtop[$id]*$spacey+28,$color);
    if ($debug) {
      imagestring($im,2,xpos()+($spacex-strlen($item['id'])*imagefontwidth(2))/2,$vtop*$spacey+31+imagefontheight(2),$item['id'],$color);
    } else imagestring($im,2,xpos()+($spacex-strlen($item['name'])*imagefontwidth(2))/2,$vtop*$spacey+31+imagefontheight(2),$item['name'],$color);
  }
}

// === Sestavení výsledného souboru ============================================
if(!($debug > 1))
{
  header("Content-type: image/png");
  header("Cache-Control: no-cache");	// Dynamický graf, nekešovat
  imagepng($im);
  imagedestroy($im);
  imagedestroy($im_comp);
  imagedestroy($im_dev);
} ?>
