From 10b2d638190c6ab982c53e9f94ddeadfe9297ac4 Mon Sep 17 00:00:00 2001 From: hickert Date: Wed, 3 May 2006 08:11:26 +0000 Subject: [PATCH] Added fai summary tab git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@3187 594d385d-05f5-0310-b6e9-bd551577e9d8 --- plugins/admin/fai/class_faiSummaryTab.inc | 549 ++++++++++++++++++++++ plugins/admin/fai/faiSummary.tpl | 12 + 2 files changed, 561 insertions(+) create mode 100644 plugins/admin/fai/class_faiSummaryTab.inc create mode 100644 plugins/admin/fai/faiSummary.tpl diff --git a/plugins/admin/fai/class_faiSummaryTab.inc b/plugins/admin/fai/class_faiSummaryTab.inc new file mode 100644 index 000000000..dbe14a3cf --- /dev/null +++ b/plugins/admin/fai/class_faiSummaryTab.inc @@ -0,0 +1,549 @@ +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; + + /* Get Releases */ + $ldap = $config->get_ldap_link(); + $ldap->cd($config->current['BASE']); + $ldap->search("(&(objectClass=organizationalUnit)(objectClass=FAIbranch))",array("ou")); + while($attrs = $ldap->fetch()){ + if(preg_match("/,ou=systems,/i",$attrs['dn'])){ + $this->Releases [ $attrs['ou'][0]] = $attrs['dn']; + } + } + + foreach($this->Classes as $class){ + $this->Result[$class] = $this->resolveObject($class); + } + } + + 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) + { + $str =" "; + + /* walkt throigh 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.=""; + } + } + } + $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 .="
"; + 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'] .= ""; + $res['String2'] .= ""; + $res['String2'] .= ""; + $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'] .= ""; + $res['String2'] .= ""; + $res['String2'] .= ""; + $res['String2'] .= ""; + } + $res['String2'] .= "
"._("No.").""._("Name").""._("FS options").""._("Mount options").""._("Size in MB").""._("Mount point").""._("Type")."
".$partition['FAIpartitionNr'][0]."".$partition['cn'][0]."".$partition['FAIfsType'][0]."".$partition['FAIfsOptions'][0]."".$partition['FAIpartitionSize'][0]."".$partition['FAImountPoint'][0]."".$partition['FAIpartitionType'][0]."
"; + } + + 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: +?> diff --git a/plugins/admin/fai/faiSummary.tpl b/plugins/admin/fai/faiSummary.tpl new file mode 100644 index 000000000..0b1ba3e25 --- /dev/null +++ b/plugins/admin/fai/faiSummary.tpl @@ -0,0 +1,12 @@ + + + + + + + + +
{t}FAI object tree{/t}
+ {$objectList} +
+ -- 2.30.2