<?php

// IPplan v4.49
// Aug 24, 2001
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// Bcracknell 03/11/2005 - Added tree menu display of Customers/Areas/Ranges & Subnets

require_once("../ipplanlib.php");
require_once("../adodb/adodb.inc.php");
require_once("../class.dbflib.php");
require_once("../layout/class.layout");
require_once("../auth.php");
require_once '../menus/lib/PHPLIB.php';
require_once '../menus/lib/layersmenu-common.inc.php';
require_once '../menus/lib/treemenu.inc.php';

$auth = new SQLAuthenticator(REALM, REALMERROR);

// And now perform the authentication
$grps=$auth->authenticate();

// set language
isset($_COOKIE["ipplanLanguage"]) && myLanguage($_COOKIE['ipplanLanguage']);

$title=my_("Display subnet information");
newhtml($p);

$myWwwPath='../menus/';
$w=myheading($p, $title);

insert($w, generic("link",array("rel"=>"stylesheet","href"=>"$myWwwPath"."layerstreemenu.css")));
insert($w, generic("link",array("rel"=>"stylesheet","href"=>"$myWwwPath"."layerstreemenu-hidden.css")));
insert($w, script("",array("language"=>"JavaScript","type"=>"text/javascript","src"=> $myWwwPath . 'libjs/layerstreemenu-cookies.js')));

// display opening text
insert($w,heading(3, my_("Display subnets.")));

insert($w,text("Click on customer/AS to display all associated subnets, click on the area to display all subnets in area and contained ranges, click on a range to display only subnets associated with that range. Subnets not within an area or range can be viewed by selecting the customer/AS.")); 

insert($w,block("<p><hr>"));

insert($w, $t=table(
array(
     "cols"		=>"1",
     "width"		=>"100%",
     "border"		=>"1",
     "cellspacing"	=>"2",
     "frame"		=>"void",
     "rules"		=>"ALL",
     "cellpadding"  =>"5")));

insert($t, $leftmenu   = cell(array("align"=>"left" ,"width"=>"100%" ,"valign"=>"top")));

//read the database and create the strings containing the menus 
$ds= new IPplanDbf() or myError($w,$p, my_("Could not connect to database"));

@set_time_limit(90);

// default is collapsed, change to "1" for expanded tree
// value is stored in a cookie so clear cookies to see effect
$expanded="";  
$displayall=FALSE;
$menustring="";
if ($custresult=$ds->GetCustomerGrp(0)){
	$adminuser=$ds->TestGrpsAdmin($grps);
	//customer
	while ($custrow=$custresult->Fetchrow()) {
      		// remove all from list if global searching is not available
      		if (!$displayall and strtolower($custrow["custdescrip"])=="all")
         		continue;

		// strip out customers user may not see due to not being member
      	// of customers admin group.
		if(!$adminuser) {
         		if(!empty($grps)) {
            		if(!in_array($custrow["admingrp"], $grps))
               			continue;
        		}
      	}
		$menustring = $menustring . ".|" . htmlspecialchars($custrow["custdescrip"]) . 
            "|displaybase.php?cust=".$custrow["customer"].
            "||||$expanded\n";

			$menustring = $menustring . "..|" . my_("All subnets not part of range") .
                "|displaybase.php?cust=" . $custrow["customer"] . 
                "&areaindex=-1||||\n";

  		$arearesult=$ds->GetArea($custrow["customer"], 0);
		//area
		while ($arearow=$arearesult->Fetchrow()) {
			$menustring = $menustring . "..|" . htmlspecialchars(inet_ntoa($arearow["areaaddr"]) . 
                " (" . $arearow["descrip"] . ")") . 
                "|displaybase.php?cust=" . $custrow["customer"] . 
                "&areaindex=" . $arearow["areaindex"] . "||||\n";

 			$rangeresult = $ds->GetRangeInArea($custrow["customer"], $arearow["areaindex"]);

			//range
			while ($rangerow=$rangeresult->Fetchrow()) {
				$menustring = $menustring . "...|" . htmlspecialchars(inet_ntoa($rangerow["rangeaddr"]).
                    " (".$rangerow["descrip"].")") . 
                    "|displaybase.php?cust=".$custrow["customer"].
                    "&areaindex=". $arearow["areaindex"].
                    "&rangeindex=".$rangerow["rangeindex"].
                    "&descrip=&sortby=Base+Address" ."||||\n";

				$baseresult = $ds->GetBase($rangerow["rangeaddr"], 
                    $rangerow["rangeaddr"]+$rangerow["rangesize"]-1, "", $custrow["customer"]);

				//subnet (base)
				while ($baserow=$baseresult->Fetchrow()) {
					$menustring = $menustring . "....|" . htmlspecialchars(inet_ntoa($baserow["baseaddr"])." /".
                        inet_bits($baserow["subnetsize"]).
                        " (". $baserow["descrip"] . ")")."|displaysubnet.php?baseindex=".
                        $baserow["baseindex"]."||||\n";
				}
			}
		}
  	}

	$mid = new TreeMenu();
	$mid->setDirroot('../menus');
	$mid->setLibjsdir('../menus/libjs/');
	$mid->setImgdir('../menus/menuimages/');
	$mid->setImgwww('../menus/menuimages/');
	$mid->setIcondir('../menus/menuicons/');
	$mid->setIconwww('../menus/menuicons/');
	if(!$menustring) myError($w,$p, my_("No customers"));
	$mid->setMenuStructureString($menustring);
	$mid->setIconsize(16, 16);
	$mid->parseStructureForMenu('treemenu1');
	$mid->newTreeMenu('treemenu1');
	insert($leftmenu, block('<br><br>'));
	insert($leftmenu, block($mid->getTreeMenu('treemenu1')));
	insert($leftmenu, block('<br><br>'));
}

printhtml($p);

?> 
