<?php
// generate mysql graph
$name = substr(str_replace("/","",$_SERVER['SCRIPT_NAME']),0,-4);
$dotname = $name . '.dot';
$pngname = $name . '.png';
echo "Opening Database Connection...\n";
$link = mysql_connect('localhost', 'root', '123456');
if (!$link) {
die('keine Verbindung möglich: ' . mysql_error());
}
mysql_select_db('pbs');
error_reporting(1);
$format['groupnode'] = '"%s" [shape=trapezium, fontcolor="#ffffffff", style=filled, fillcolor="#004A99FF"];'."\n";
$format['personnode'] = '"%s" [shape=ellipse, fontcolor="#ffffffff", style=filled, fillcolor="#FF0000FF"];'."\n";
$format['poolnode'] = '"%s" [shape=ellipse, fontcolor="#000000ff", style=filled, fillcolor="#00FF00FF"];'."\n";
$format['membershipnode'] = '"%s" [shape=ellipse, fontcolor="#ffffffff", style=filled, fillcolor="#990000FF"];'."\n";
$format['clientnode'] = '"%s" [shape=ellipse, fontcolor="#000000ff", style=filled, fillcolor="#FFFF00FF"];'."\n";
$format['rolenode'] = '"%s" [fontcolor="#000000ff", style=filled, fillcolor="#FF0099FF"];'."\n";
$format['bootmenunode'] = '"%s" [shape=ellipse, fontcolor="#000000ff", style=filled, fillcolor="#009999FF"];'."\n";
$format['bootisonode'] = '"%s" [shape=ellipse, fontcolor="#000000ff", style=filled, fillcolor="#FF9900FF"];'."\n";
$format['bootosnode'] = '"%s" [fontcolor="#000000ff", style=filled, fillcolor="#99FF99FF"];'."\n";
$format['groupgroup'] = '"%s" -> "%s";'."\n";
$format['personmember'] = '"%s" -> "%s";'."\n";
$format['rolemember'] = '"%s" -> "%s";'."\n";
$format['membergroup'] = '"%s" -> "%s";'."\n";
$format['personrequest'] = '"%s" -> "%s" [style=dotted];'."\n";
$format['poolgroup'] = '"%s" -> "%s";'."\n";
$format['clientgroup'] = '"%s" -> "%s";'."\n";
$format['clientpool'] = '"%s" -> "%s";'."\n";
$format['bootisogroup'] = '"%s" -> "%s";'."\n";
$format['bootmenugroup'] = '"%s" -> "%s";'."\n";
$format['bootosbootmenu'] = '"%s" -> "%s";'."\n";
$format['bootosgroup'] = '"%s" -> "%s";'."\n";
function getGroups(){
global $format;
$q = "SELECT groupID,title FROM pbs_group";
$groups = "subgraph cluster_0 {";
$groups .= "label=Groups;";
$result = mysql_query($q);
while($data = mysql_fetch_array($result)){
$groups .= sprintf($format['groupnode'] ,"Group".$data['groupID']);
}
$groups .= "}";
return $groups;
}
function recGroups($groupID,$level=0,$data=''){
global $format;
$q = "SELECT groupID FROM pbs_groupgroups WHERE parentID = $groupID";
$result = mysql_query($q);
while($data = mysql_fetch_array($result)){
$groups .= sprintf($format['groupgroup'],"Group".$groupID, "Group".$data['groupID']);
$groups .= recGroups($data['groupID']);
}
return $groups;
}
function getPersons(){
global $format;
$q = "SELECT personID,title FROM pbs_person";
$result = mysql_query($q);
while($data = mysql_fetch_array($result)){
$persons .= sprintf($format['personnode'] ,"Person". $data['personID']);
}
return $persons;
}
function getMemberships(){
global $format;
$q = "SELECT personID,groupID,membershipID,roleID FROM pbs_membership";
$result = mysql_query($q);
while($data = mysql_fetch_array($result)){
$memberships .= sprintf($format['membershipnode'],"Member".$data['membershipID']);
$memberships .= sprintf($format['personmember'],"Person".$data['personID'],"Member".$data['membershipID']);
$memberships .= sprintf($format['rolemember'],"Role".$data['roleID'], "Member".$data['membershipID']);
$memberships .= sprintf($format['membergroup'],"Member".$data['membershipID'], "Group".$data['groupID']);
}
return $memberships;
}
function getRequests(){
global $format;
$q = "SELECT personID,groupID FROM pbs_grouprequest";
$result = mysql_query($q);
while($data = mysql_fetch_array($result)){
$memberships .= sprintf($format['peronrequests'],"Group".$data['groupID'], "Person".$data['personID']);
}
return $memberships;
}
function getPools(){
global $format;
$q = "SELECT poolID,groupID FROM pbs_pool";
$result = mysql_query($q);
while($data = mysql_fetch_array($result)){
$pools .= sprintf($format['poolnode'] ,"Pool".$data['poolID']);
$pools .= sprintf($format['poolgroup'],"Pool".$data['poolID'], "Group".$data['groupID']);
}
return $pools;
}
function getClients(){
global $format;
$q = "SELECT clientID,groupID FROM pbs_client";
$result = mysql_query($q);
while($data = mysql_fetch_array($result)){
$clients .= sprintf($format['clientnode'] ,"Client".$data['clientID']);
$query2 = "SELECT clientID, poolID FROM pbs_poolentries WHERE clientID = '".$data['clientID']."'";
$result2 = mysql_query($query2);
if(mysql_num_rows($result2) == 0)
$clients .= sprintf($format['clientgroup'],"Client".$data['clientID'], "Group".$data['groupID']);
}
return $clients;
}
function clientPools(){
global $format;
$q = "SELECT clientID,poolID FROM pbs_poolentries";
$result = mysql_query($q);
while($data = mysql_fetch_array($result)){
$clientpools .= sprintf($format['clientpool'],"Client".$data['clientID'], "Pool".$data['poolID']);
}
return $clientpools;
}
function getRoles(){
global $format;
$q = "SELECT roleID,groupID FROM pbs_role";
$result = mysql_query($q);
while($data = mysql_fetch_array($result)){
$roles .= sprintf($format['rolenode'] ,"Role".$data['roleID']);
# $roles .= "Role".$data['roleID'] ." -> " . "Group".$data['groupID'].";\n";
}
return $roles;
}
function getBootiso(){
global $format;
$q = "SELECT bootisoID,groupID FROM pbs_bootiso";
$result = mysql_query($q);
while($data = mysql_fetch_array($result)){
$bootiso .= sprintf($format['bootisonode'] ,"BootIso".$data['bootisoID']);
$bootiso .= sprintf($format['bootisogroup'],"BootIso".$data['bootisoID'], "Group".$data['groupID']);
}
return $bootiso;
}
function getBootMenus(){
global $format;
$q = "SELECT bootmenuID,groupID FROM pbs_bootmenu";
$result = mysql_query($q);
while($data = mysql_fetch_array($result)){
$bootmenu .= sprintf($format['bootmenunode'] ,"BootMenu".$data['bootmenuID']);
$bootmenu .= sprintf($format['bootmenugroup'],"BootMenu".$data['bootmenuID'], "Group".$data['groupID']);
}
return $bootmenu;
}
function getBootos(){
global $format;
$q = "SELECT bootosID,groupID FROM pbs_bootos";
$result = mysql_query($q);
while($data = mysql_fetch_array($result)){
$bootos .= sprintf($format['bootosnode'] ,"BootOs".$data['bootosID']);
$q2 = "SELECT * FROM pbs_bootmenuentries WHERE bootosID = ".$data['bootosID']."";
$result2 = mysql_query($q2);
if(mysql_num_rows($result2)){
while($data2 = mysql_fetch_array($result2))
$bootos .= sprintf($format['bootosbootmenu'],"BootOs".$data['bootosID'], "BootMenu".$data2['bootmenuID']);
}
else
$bootos .= sprintf($format['bootosgroup'],"BootOs".$data['bootosID'], "Group".$data['groupID']);
}
return $bootos;
}
## Concatenation
$defs = '';
$defs .= getGroups();
$defs .= recGroups(1);
$defs .= getPersons();
$defs .= getMemberships();
$defs .= getRoles();
$defs .= getRequests();
$defs .= getPools();
$defs .= getClients();
$defs .= clientPools();
$defs .= getBootiso();
$defs .= getBootMenus();
$defs .= getBootos();
$str = 'digraph x {
node [];
ranksep=3;
size="20,20";
overlap="0:true"'."\n";
$str .= str_replace("\n","\n\t",$defs);
$str .= "}";
echo "Write to file ...\n";
// Create the dot file
$fp = fopen($dotname, "w");
fputs ($fp, $str);
fclose ($fp);
// Generate the image
echo "Generate the image ...\n";
exec("dot -Tpng $dotname >$pngname");
// delete the dot file
unlink ($dotname);
echo "Ready!\n";