objs = array( "FAIscript" => array( "Image" =>"images/fai_script.png",
"Tree" =>"ou=scripts,") ,
"FAIhook" => array( "Image" =>"images/fai_hook.png" ,
"Tree" =>"ou=hooks,"),
"FAIvariable" => array( "Image" =>"images/fai_variable.png",
"Tree" =>"ou=variables,") ,
"FAItemplate" => array( "Image" =>"images/fai_template.png",
"Tree" =>"ou=templates,") ,
"FAIpartitionTable" => array( "Image" =>"images/fai_partitionTable.png",
"Tree" =>"ou=disk,") ,
"FAIpackageList" => array( "Image" =>"images/fai_packages.png",
"Tree" =>"ou=packages,") ,
"FAIprofile" => array( "Image" =>"images/fai_profile.png",
"Tree" =>"ou=profiles,"));
if(count($this->FAIclass)){
/* Set Release */
if(preg_match("/:/",$this->FAIclass)){
if(preg_match("/:/",$this->FAIclass)){
$this->Release =trim( preg_replace("/^.*:/","",$this->FAIclass));
}
}
/* Get classes */
$tmp = split("\ ", preg_replace("/:.*$/","",$this->FAIclass));
foreach($tmp as $class){
if(!empty($class)){
$this->Classes[]= trim($class);
}
}
}
$_SESSION['faiSummaryTab']['UniqueID'] = 0;
$this->Releases = array_flip($this->getBranches());
if(count($this->Classes) && (!empty($this->Release))){
foreach($this->Classes as $class){
$this->Result[$class] = $this->resolveObject($class);
}
}
}
/* returns an array with all possibly release types */
function getBranches($base = false,$prefix = "")
{
$ret = array("main"=>"/");
$ldap = $this->config->get_ldap_link();
$ldap->cd($this->config->current['BASE']);
$faifilter = $_SESSION['faifilter'];
if(!$base){
$base= "ou=fai,ou=configs,ou=systems,".$_SESSION['CurrentMainBase'];
}
$ldap->cd($base);
$ldap->ls("(objectClass=FAIbranch)",$base);
while($attrs = $ldap->fetch()){
if((isset($attrs['ou']))&&($attrs['dn']!=$base)){
$ret[$attrs['dn']]= $prefix.$attrs['ou'][0];
$ret = array_merge($ret,$this->getBranches($attrs['dn'],"".$prefix.$attrs['ou'][0]."/"));
}
}
return($ret);
}
function execute()
{
$display = "";
$smarty = get_smarty();
$this->ObjectList = $this->createSummary($this->Result);
$smarty->assign("objectList",$this->ObjectList);
$display.= $smarty->fetch (get_template_path('faiSummary.tpl', TRUE, dirname(__FILE__)));
return($display);
}
/* Create output of our resolved objects */
function createSummary($data)
{
/* Don't generate any output, if there is no result */
$str ="
";
if(!count($this->Result)){
$str.="";
$str.= (_("This object has no FAI classes assigned."));
$str.= "
";
return($str);
}
/* walk through all classes */
foreach($data as $key => $entry){
/* Check every kind of object type */
foreach($this->objs as $ok => $obj){
/* check of objectType is used */
if(isset($entry[$ok])){
$str.="";
/* Show open or close icon */
if( ! $entry[$ok]['Open'] ){
$str .= " ";
$str .=" ";
$str .= "".$entry[$ok]['Name']." ";
$str .= " ".$entry[$ok]['String1'];
}else{
$str .= " ";
$str .=" ";
$str .= "".$entry[$ok]['Name']." ";
$str .= " ".$entry[$ok]['String1'];
if(!empty($entry[$ok]['String2'])){
$str .= " ".$entry[$ok]['String2'];
}
if(isset($data[$key][$ok]['data'])){
$str.=$this->createSummary($data[$key][$ok]['data']);
}
}
$str .=" ";
}
}
}
$str .="";
return($str);
}
/* resolve specified object to append it to our object tree
calls prepare_"FAIclass"
*/
function resolveObject($class)
{
$ldap = $this->config->get_ldap_link();
$dn = $this->Releases [$this->Release];
$res = array();
foreach($this->objs as $key => $obj){
$ldap->ls("(&(objectClass=".$key.")(cn=".$class."))",$obj['Tree'].$dn,array("*"));
while($attrs = $ldap->fetch()){
switch($key){
case "FAIprofile": $tmp = $this->prepare_FAIprofile($attrs);break;
case "FAIscript": $tmp = $this->prepare_FAIscript($attrs);break;
case "FAIhook": $tmp = $this->prepare_FAIhook($attrs);break;
case "FAIvariable": $tmp = $this->prepare_FAIvariable($attrs);break;
case "FAItemplate": $tmp = $this->prepare_FAItemplate($attrs);break;
case "FAIpackageList": $tmp = $this->prepare_FAIpackageList($attrs);break;
case "FAIpartitionTable": $tmp = $this->prepare_FAIpartitionTable($attrs);break;
default : $tmp = array(); print_red(sprintf(_("Undefined FAI object '%s'."),$key));
}
if(isset($tmp['Name'])){
$res[$key] = $tmp ;
}
}
}
return($res);
}
/* Prepare fai script */
function prepare_FAIscript($data)
{
/* Set basic attributes */
$res['Name'] = $data['cn'][0];
if(isset($data['description'][0])){
$res['String1'] = $data['description'][0];
}else{
$res['String1'] = "";
}
$res['Open'] = false;
$res['id'] = ($_SESSION['faiSummaryTab']['UniqueID'] ++);
$res['Resolved']= true;
$res['String2'] = "";
/* get subentries */
$ldap = $this->config->get_ldap_link();
$ldap->cd($data['dn']);
$ldap->search("(&(objectClass=FAIscriptEntry)(FAIpriority=*))",array("cn","description","FAIpriority"));
$scripts = array();
/* Create an array which is sortable by priority */
while($attrs = $ldap->fetch()){
$scripts[$attrs['FAIpriority'][0]][] = $attrs;
}
/* Sort by priority */
ksort($scripts);
/* append them to our list */
$image = " ";
foreach($scripts as $prio => $script){
foreach($script as $attrs){
$res['String2'] .="";
if(isset($attrs['description'][0])){
$res['String2'] .= $image.$attrs['FAIpriority'][0]." - ".$attrs['cn'][0]." [".$attrs['description'][0]."] ";
}else{
$res['String2'] .= $image.$attrs['FAIpriority'][0]." - ".$attrs['cn'][0]." ";
}
$res['String2'] .=" ";
}
}
return($res);
}
/* Prepare fai script */
function prepare_FAIpartitionTable($data)
{
/* Set basic attributes */
$res['Name'] = $data['cn'][0];
if(isset($data['description'][0])){
$res['String1'] = $data['description'][0];
}else{
$res['String1'] = "";
}
$res['Open'] = false;
$res['id'] = ($_SESSION['faiSummaryTab']['UniqueID'] ++);
$res['Resolved']= true;
$res['String2'] = "";
/* get subentries */
$ldap = $this->config->get_ldap_link();
$ldap->cd($data['dn']);
$ldap->search("(objectClass=FAIpartitionDisk)",array("cn","description"));
$disks = array();
/* Create an array which is sortable by priority */
while($attrs = $ldap->fetch()){
$disks[$attrs['cn'][0]] = $attrs;
$disks[$attrs['cn'][0]]['partitions'] = array();
}
/* Sort by priority */
foreach($disks as $key => $disk){
$ldap->cd($disk['dn']);
$ldap->search("(objectClass=FAIpartitionEntry)",array("*"));
while($attrs = $ldap->fetch()){
if(!isset($attrs['FAIfsOptions'][0])){
$attrs['FAIfsOptions'][0] = "";
}
$disks[$key]['partitions'][$attrs['cn'][0]] = $attrs;
}
}
$image = " ";
foreach($disks as $disk){
$res['String2'] .= "";
$res['String2'] .= $image."".$disk['cn'][0] ." ";
if(isset($disk['description'][0])){
$res['String2'] .= " [".$disk['description'][0]."]" ;
}
$res['String2'] .= "
";
$res['String2'] .= "";
$res['String2'] .= "";
$res['String2'] .= ""._("No.")." "._("Name")." "._("FS options")." ";
$res['String2'] .= ""._("Mount options")." "._("Size in MB")." ";
$res['String2'] .= ""._("Mount point")." "._("Type")." ";
$res['String2'] .= " ";
$i = 0;
foreach($disk['partitions'] as $partition){
$i = !$i;
if($i){
$c = " class='rowxp1'";
$d = " class='list1' style='border:0px;'";
}else{
$c = " class='rowxp0'";
$d = " class='list0' style='border:0px;'";
}
$res['String2'] .= "";
$res['String2'] .= "".$partition['FAIpartitionNr'][0]." ".$partition['cn'][0]." ".$partition['FAIfsType'][0]." ";
$res['String2'] .= "".$partition['FAIfsOptions'][0]." ".$partition['FAIpartitionSize'][0]." ";
$res['String2'] .= "".$partition['FAImountPoint'][0]." ".$partition['FAIpartitionType'][0]." ";
$res['String2'] .= " ";
}
$res['String2'] .= "
";
}
return($res);
}
/* Create template entry */
function prepare_FAItemplate($data)
{
/* Set basic attributes */
$res['Name'] = $data['cn'][0];
if(isset($data['description'][0])){
$res['String1'] = $data['description'][0];
}else{
$res['String1'] = "";
}
$res['Open'] = false;
$res['id'] = ($_SESSION['faiSummaryTab']['UniqueID'] ++);
$res['Resolved']= true;
$res['String2'] = "";
/* get subentries */
$ldap = $this->config->get_ldap_link();
$ldap->cd($data['dn']);
$ldap->search("(objectClass=FAItemplateEntry)",array("cn","description"));
$scripts = array();
/* append them to our list */
$image = " ";
/* Create an array which is sortable by priority */
while($attrs = $ldap->fetch()){
$res['String2'] .="";
if(isset($attrs['description'][0])){
$res['String2'] .= $image.$attrs['cn'][0]." [".$attrs['description'][0]."]";
}else{
$res['String2'] .= $image.$attrs['cn'][0];
}
$res['String2'] .=" ";
}
return($res);
}
/* Create a package list */
function prepare_FAIpackageList($data)
{
/* Set basic attributes */
$res['Name'] = $data['cn'][0];
if(isset($data['description'][0])){
$res['String1'] = $data['description'][0];
}else{
$res['String1'] = "";
}
$res['Open'] = false;
$res['id'] = ($_SESSION['faiSummaryTab']['UniqueID'] ++);
$res['Resolved']= true;
$res['String2'] = "";
/* append them to our list */
$image = " ";
/* add selected packages to our list */
if(isset($data['FAIpackage']['count'])) {
unset($data['FAIpackage']['count']);
foreach($data['FAIpackage'] as $entry){
$res['String2'].= $image.$entry." ";
}
}
return($res);
}
/* Create a variable entry */
function prepare_FAIvariable($data)
{
/* Set basic attributes */
$res['Name'] = $data['cn'][0];
if(isset($data['description'][0])){
$res['String1'] = $data['description'][0];
}else{
$res['String1'] = "";
}
$res['Open'] = false;
$res['id'] = ($_SESSION['faiSummaryTab']['UniqueID'] ++);
$res['Resolved']= true;
$res['String2'] = "";
/* get subentries */
$ldap = $this->config->get_ldap_link();
$ldap->cd($data['dn']);
$ldap->search("(objectClass=FAIvariableEntry)",array("cn","description","FAIvariableContent"));
$scripts = array();
/* append them to our list */
$image = " ";
/* Create an array which is sortable by priority */
while($attrs = $ldap->fetch()){
if(isset($attrs['description'][0])){
$res['String2'] .= $image.$attrs['cn'][0]." [".$attrs['description'][0]."]";
}else{
$res['String2'] .= $image.$attrs['cn'][0];
}
if(isset($attrs['FAIvariableContent'][0])){
$res['String2'] .= " \"".$attrs['FAIvariableContent'][0]."\" ";
}
$res['String2'] .= " ";
}
return($res);
}
/* Create a hook entry */
function prepare_FAIhook($data)
{
/* Set basic attributes */
$res['Name'] = $data['cn'][0];
if(isset($data['description'][0])){
$res['String1'] = $data['description'][0];
}else{
$res['String1'] = "";
}
$res['Open'] = false;
$res['id'] = ($_SESSION['faiSummaryTab']['UniqueID'] ++);
$res['Resolved']= true;
$res['String2'] = "";
/* get subentries */
$ldap = $this->config->get_ldap_link();
$ldap->cd($data['dn']);
$ldap->search("(objectClass=FAIhookEntry)",array("cn","description"));
$scripts = array();
/* append them to our list */
$image = " ";
/* Create an array which is sortable by priority */
while($attrs = $ldap->fetch()){
$res['String2'] .="";
if(isset($attrs['description'][0])){
$res['String2'] .= $image.$attrs['cn'][0]." [".$attrs['description'][0]."] ";
}else{
$res['String2'] .= $image.$attrs['cn'][0]." ";
}
$res['String2'] .=" ";
}
return($res);
}
/* Create a new Profile entry */
function prepare_FAIprofile($data)
{
/* initialise basics */
$res = array();
$res['Name'] = $data['cn'][0];
if(isset($data['description'][0])){
$res['String1'] = $data['description'][0];
}else{
$res['String1'] = "";
}
$res['Open'] = false;
$res['id'] = ($_SESSION['faiSummaryTab']['UniqueID'] ++);
$res['Resolved']= true;
$res['String2'] = "";
/* Append empty data objects named by member classes */
$res['data'] = array();
if(isset($data['FAIclass'][0])){
$tmp = split("\ ",$data['FAIclass'][0]);
foreach($tmp as $class){
$res['data'][trim($class)] = array();
}
}
return($res);
}
/* Open the tag with the given id ..
so the entries of this tag will be shown */
function openTag($data, $id)
{
/* Walk through objects */
if(!count($data)) return(array());
foreach($data as $key => $dat){
/* Check all types of objects (FAIhook, FAIscript ..)*/
foreach($this->objs as $ok => $obj){
/* If this type of object is assigned */
if(isset($dat[$ok])){
/* check given id */
if($dat[$ok]['id'] == $id ){
/* Id was $id so set this leaf to open */
$data[$key][$ok]['Open'] = true;
/* Check if the sub leafs are already readed
if not, resolve the classes and append them to our tree */
if(isset($dat[$ok]['data'])){
foreach($data[$key][$ok]['data'] as $key1 => $dat1){
if(!count($dat1)){
$tmp = $this->resolveObject($key1);
foreach($tmp as $r => $e)
$data[$key][$ok]['data'][$key1][$r] = $e;
}
}
}
}
/* Search sub tags for given id $id */
if(isset($data[$key][$ok]['data'])){
$data[$key][$ok]['data'] = $this->openTag($data[$key][$ok]['data'],$id);
}
}
}
}
return($data);
}
/* Walk through all tags and close tag with id = $id*/
function closeTag($data, $id)
{
$found = false;
/* The parameter data is given as specified */
// ClassName ['FAIprofile']['data']
/* Walk through all given classes */
foreach($data as $key => $dat){
/* Walk through all possible objectClasses */
foreach($this->objs as $ok => $obj){
/* If class is set, check if id matches */
if(isset($dat[$ok])){
if($dat[$ok]['id'] == $id ){
$data[$key][$ok]['Open'] = false;
}
/* Check subobjects for $id */
if(isset($dat[$ok]['data'])){
$data[$key][$ok]['data'] = $this->closeTag( $data[$key][$ok]['data'], $id);
}
}
}
}
return($data);
}
/* Capture posts, and call opnen close tag */
function save_object()
{
$once = true;
foreach($_POST as $name => $value ){
/* check for open tag request */
if(preg_match("/^open_/",$name) && $once){
$once = false;
$value = preg_replace("/^open_/","",$name);
$value = preg_replace("/_.*$/","",$value);
$this->Result = $this->openTag($this->Result,$value);
}
/* Check for close tag request */
if(preg_match("/^close_/",$name) && $once){
$once = false;
$value = preg_replace("/^close_/","",$name);
$value = preg_replace("/_.*$/","",$value);
$this->Result = $this->closeTag($this->Result,$value);
}
}
}
}
// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
?>