ui = get_userinfo(); /* Base object configuration */ $this->objs = array( "FAIscript" => array( "Image" =>"plugins/fai/images/fai_script.png", "Name"=>_("Scripts") ,"Tree" =>get_ou('faiscriptou')) , "FAIhook" => array( "Image" =>"plugins/fai/images/fai_hook.png" , "Name"=>_("Hooks") ,"Tree" =>get_ou('faihookou')), "FAIvariable" => array( "Image" =>"plugins/fai/images/fai_variable.png", "Name"=>_("Variables") ,"Tree" =>get_ou('faivariableou')) , "FAItemplate" => array( "Image" =>"plugins/fai/images/fai_template.png", "Name"=>_("Templates") ,"Tree" =>get_ou('faitemplateou')) , "FAIpartitionTable" => array( "Image" =>"plugins/fai/images/fai_partitionTable.png","Name"=>_("Partition table") ,"Tree" =>get_ou('faipartitionou')) , "FAIpackageList" => array( "Image" =>"plugins/fai/images/fai_packages.png", "Name"=>_("Package list") ,"Tree" =>get_ou('faipackageou')) , "FAIprofile" => array( "Image" =>"plugins/fai/images/fai_profile.png", "Name"=>_("Profiles") ,"Tree" =>get_ou('faiprofileou'))); } /* Init the fai tree with objects. If this method is called, all assigned classes and the release name will be read from parent object. */ function init() { $this->InitCalled = true; $this->Result = array(); /* Get classes & release name There are 2 different tabs which use the summary tab faiProfile / Workstations */ /* Check if given parent object is fai profile tabs */ if(isset($this->parent->by_name['faiProfile'])){ /* Get Classes and release */ $this->Classes = $this->parent->by_object['faiProfile']->FAIclasses; $this->base = $this->parent->by_object['faiProfile']->parent->parent->fai_release; $str = preg_replace("/^.*".normalizePreg(get_ou('faiprofileou'))."/","",$this->dn); $tmp = $this->parent->by_object['faiProfile']->parent->parent->getBranches(); $this->Release = $tmp[$this->base]; /* Check if parent tab is work tab */ }elseif(isset($this->parent->by_name['workstartup'])){ $this->Classes = $this->parent->by_object['workstartup']->FAIclass; $this->Release = $this->parent->by_object['workstartup']->FAIrelease; /* Check if this is a workstation or an object group */ if(isset($this->parent->by_object['workgeneric'])){ $this->base = $this->parent->by_object['workgeneric']->base; }elseif(isset($this->parent->by_object['ogroup'])){ $this->base = $this->parent->by_object['ogroup']->base; }elseif(isset($this->parent->by_object['servgeneric'])){ $this->base = $this->parent->by_object['servgeneric']->base; }else{ msg_dialog::display(_("Error"), _("Unknown FAI information source!"), ERROR_DIALOG); } /* Append workstation class && LAST */ if(isset($this->parent->by_object['workgeneric']->cn)){ $this->Classes[] = $this->parent->by_object['workgeneric']->cn; } } $tmp = array_flip($this->getBranches()); $this->Classes[] = "LAST"; /* You need full access to complete collection of fai acls to view this summary */ $acl = $this->ui->has_complete_category_acls($this->base,"fai"); if(!preg_match("/r/",$acl)){ $this->Classes = array(); } /* Set all available releases */ $this->Releases = $tmp; $this->usedClasses = array(); /* Check the configuration */ if(count($this->Classes) && (!empty($this->Release))){ foreach($this->Classes as $class){ $this->resolveObject($class); } } } /* Capture posts, and call opnen close tag */ function save_object() { $once = true; if(isset($_GET['expand']) && isset($_GET['id'])){ if(isset($this->Result[$_GET['id']])){ $this->Result[$_GET['id']]['Open'] =true ; } } if(isset($_GET['compress']) && isset($_GET['id'])){ if(isset($this->Result[$_GET['id']])){ unset($this->Result[$_GET['id']]['Open']); } } 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[$value]['Open'] =true ; } /* Check for close tag request */ if(preg_match("/^close_/",$name) && $once){ $once = false; $value = preg_replace("/^close_/","",$name); $value = preg_replace("/_.*$/","",$value); unset($this->Result[$value]['Open']); } if(preg_match("/^reloadList/",$name)){ $this->InitCalled = false; } } } /* returns an array with all possibly release types */ function getBranches($base = false,$prefix = "") { if(!$base){ $base = $this->base; } return(FAI::get_all_releases_from_base($base,true)); } /* This function calls all nescessary functions to generate the fai class summary tree */ function execute() { /* Skip this if fai is deactivated */ $tmp = $this->config->search("faiManagement", "CLASS",array('menu','tabs')); if(empty($tmp)){ $str = "

"._("You can't use this plugin until FAI is activated.")."

"; return $str; } /* Check if we must (re)init the this tab */ if(!$this->InitCalled){ $this->init(); } if(isset($_GET['show'])){ $ldap = $this->config->get_ldap_link(); $ldap->cat(base64_decode($_GET['id']), array('FAIscript', 'FAIhook', 'FAItemplateFile')); $attrs = $ldap->fetch(); if($_GET['type'] == "FAIscript"){ $str = $attrs['FAIscript'][0]; }elseif($_GET['type'] == "FAIhook"){ $str = $attrs['FAIscript'][0]; }elseif($_GET['type'] == "FAItemplate"){ $str = $attrs['FAItemplateFile'][0]; } echo "
".$str."
"; exit(); } /* Get smarty class & assign created summary results */ $smarty = get_smarty(); $acl = $this->ui->has_complete_category_acls($this->base,"fai"); $smarty->assign("readable", preg_match("/r/",$acl)); $this->ObjectList = $this->createSummary($this->Result); $smarty->assign("objectList",$this->ObjectList); return($smarty->fetch (get_template_path('faiSummary.tpl', TRUE, dirname(__FILE__)))); } /* Create output of from resolved fai 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){ $image = "".$this->objs[$key]["; if(!isset($entry['Open'])){ $str .= " "._("Open")." "; $str .= $image." "; $str .= " ".$this->objs[$key]['Name'].""; }else{ $str .= " "._("Close")." "; $str .= $image." "; $str .= "".$this->objs[$key]['Name'].""; /* Display FAItemplate FAIhook FAIscript entries */ if(in_array($key,array("FAItemplate","FAIhook","FAIscript"))){ $nums = array(); $tmp = array(); if($key == "FAIscript"){ if(is_array($entry['Entries'])){ foreach($entry['Entries'] as $scripts){ foreach($scripts as $script){ if(!isset($nums[$script['cn'][0]])){ $nums[$script['cn'][0]]= 0; } $nums[$script['cn'][0]] ++; $tmp[$script['FAIpriority'][0].$script['cn'][0].$script['CLASS']] = $script; } } } krsort($tmp);; $entry['Entries'] = $tmp; }else{ $tmp = array(); foreach($entry['Entries'] as $script){ $tmp[$script['cn'][0].$script['CLASS']] = $script; if(!isset($nums[$script['cn'][0]])){ $nums[$script['cn'][0]]= 0; } $nums[$script['cn'][0]] ++; } ksort($tmp); $entry['Entries'] = $tmp; } foreach($entry['Entries'] as $cn => $data){ if(isset($nums[$data['cn'][0]]) && ($nums[$data['cn'][0]] > 1)){ $str .=""; }else{ $str .=""; } $str .= ""; $str .= $image." "; if(isset($data['FAIpriority'][0])){ $str .= "(".$data['FAIpriority'][0].")"; } $str .= " ".$data['cn'][0]; if(isset($data['description'][0])){ $str .= " [".$data['description'][0]."]"; } $str .= ""; $str .= "".$data['CLASS'].""; $str .= ""; } } /* Create variable entries */ if(in_array($key,array("FAIvariable"))) { foreach($entry['Entries'] as $cn => $data){ $str .=""; $str .= $image." ".$data['cn'][0]; if(isset($data['description'][0])){ $str .= " [".$data['description'][0]."] "; } /* Only display FAIvariableContent if description dosn't contain [*] */ if(isset($data['description'][0]) && !preg_match("#\[\*\]#",$data['description'][0])){ $str .=" = '".$data['FAIvariableContent'][0]."'"; } $str .= "".$data['CLASS'].""; $str .=""; } } /* Create packagelist entries */ if(in_array($key,array("FAIpackageList"))) { ksort($entry['Entries']); foreach($entry['Entries'] as $data){ $str .=""; $str .= $image." ".$data['cn'][0]; $str .= "".$data['CLASS'].""; $str .= "";; } } /* Create partition table entries */ if(in_array($key,array("FAIpartitionTable"))) { foreach($entry['Entries'] as $cn => $data){ $str .= ""; $str .= $image." ".$data['name']; $str .= "".$data['CLASS'].""; $str .= ""; ksort($data['partitions']); $str .= ""; $str .= ""; $i = 0; foreach($data['partitions'] as $key => $part){ $i ++; if($i%2 == 1){ $c = " class='rowxp1'"; $d = " class='list1'"; }else{ $c = " class='rowxp0'"; $d = " class='list0'"; } $str.=""; } $str .="
"._("No.")." "._("Name")." "._("FS options")." "._("Mount options")." "._("Size in MB")." "._("Mount point")." "._("Type")."
".$i." ".$part['cn'][0]." ".$part['FAIfsType'][0]." ".$part['FAIfsOptions'][0]." ".$part['FAIpartitionSize'][0]." ".$part['FAImountPoint'][0]." ".$part['FAIpartitionType'][0]."
"; } } } } $str .=""; return($str); } /* resolve specified object to append it to our object tree */ function resolveObject($class) { $ldap = $this->config->get_ldap_link(); if(isset($this->Releases[$this->Release])){ $dn = $this->Releases[$this->Release]; }else{ return(FALSE); } $resolvedClasses = FAI::get_all_objects_for_given_base($dn,"(&(objectClass=FAIclass)(cn=".$class."))"); /* Try to fetch all types of fai objects with the given cn */ foreach($resolvedClasses as $obj){ $dn = $obj['dn']; $ldap->cat($dn); while($attrs = $ldap->fetch()){ foreach($this-> objs as $key => $rest){ if(in_array($key,$attrs['objectClass'])){ if(!isset($this->usedClasses[$key][$class])){ $this->usedClasses[$key][$class] = true; switch($key){ case "FAIprofile": $this->prepare_FAIprofile($attrs);break; case "FAIscript": $this->prepare_FAIscript($attrs);break; case "FAIhook": $this->prepare_FAIhook($attrs);break; case "FAIvariable": $this->prepare_FAIvariable($attrs);break; case "FAItemplate": $this->prepare_FAItemplate($attrs);break; case "FAIpackageList": $this->prepare_FAIpackageList($attrs);break; case "FAIpartitionTable": $this->prepare_FAIpartitionTable($attrs);break; } } } } } } } /* Prepare fai script */ function prepare_FAIscript($data) { if(isset($this->Result['FAIscript']['Entries'])){ $current = $this->Result['FAIscript']['Entries']; }else{ $current = array(); } $ldap = $this->config->get_ldap_link(); $ldap->cd($data['dn']); $ldap->search("(objectClass=FAIscriptEntry)",array("cn","description","FAIpriority")); while($attrs = $ldap->fetch()){ $attrs['CLASS'] = $data['cn'][0]; $current[$attrs['FAIpriority'][0]][] = $attrs; } $this->Result['FAIscript']['Entries'] = $current ; } /* Prepare fai script */ function prepare_FAIpartitionTable($data) { if(isset($this->Result['FAIpartitionTable']['Entries'])){ $current = $this->Result['FAIpartitionTable']['Entries']; }else{ $current = array(); } /* 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()){ $attrs['CLASS'] = $data['cn'][0]; $disks[$attrs['cn'][0]]= $attrs; if(isset($attrs['description'][0])){ $disks[$attrs['cn'][0]]['name'] = $attrs['cn'][0]." [".$attrs['description'][0]."]"; }else{ $disks[$attrs['cn'][0]]['name'] = $attrs['cn'][0]; } $disks[$attrs['cn'][0]]['dn'] = $attrs['dn']; $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] = ""; } $attrs['CLASS'] = $data['cn'][0]; $disks[$key]['partitions'][$attrs['cn'][0]] = $attrs; } } $this->Result['FAIpartitionTable']['Entries'] = $disks; } /* Create template entry */ function prepare_FAItemplate($data) { $current = array(); if(isset($this->Result['FAItemplate']['Entries'])){ $current = $this->Result['FAItemplate']['Entries']; } $ldap = $this->config->get_ldap_link(); $ldap->cd($data['dn']); $ldap->search("(objectClass=FAItemplateEntry)",array("cn","description")); while($attrs = $ldap->fetch()){ $attrs['CLASS'] = $data['cn'][0]; $current[] = $attrs; } $this->Result['FAItemplate']['Entries'] = $current ; } /* Create a package list */ function prepare_FAIpackageList($data) { $current = array(); if(isset($this->Result['FAIpackageList']['Entries'])){ $current = $this->Result['FAIpackageList']['Entries']; } if(isset($data['FAIpackage'])){ unset($data['FAIpackage']['count']); foreach($data['FAIpackage'] as $pkg){ $attrs['CLASS'] = $data['cn'][0]; $attrs['cn'][0] = $pkg; $current[$pkg] = $attrs; } } $this->Result['FAIpackageList']['Entries'] = $current ; } /* Create a variable entry */ function prepare_FAIvariable($data) { $current = array(); if(isset($this->Result['FAIvariable']['Entries'])){ $current = $this->Result['FAIvariable']['Entries']; } $ldap = $this->config->get_ldap_link(); $ldap->cd($data['dn']); $ldap->search("(objectClass=FAIvariableEntry)",array("cn","description","FAIvariableContent")); while($attrs = $ldap->fetch()){ $attrs['CLASS'] = $data['cn'][0]; $current[] = $attrs; } $this->Result['FAIvariable']['Entries'] = $current ; } /* Create a hook entry */ function prepare_FAIhook($data) { $current = array(); if(isset($this->Result['FAIhook']['Entries'])){ $current = $this->Result['FAIhook']['Entries']; } $ldap = $this->config->get_ldap_link(); $ldap->cd($data['dn']); $ldap->search("(objectClass=FAIhookEntry)",array("cn","description")); while($attrs = $ldap->fetch()){ $attrs['CLASS'] = $data['cn'][0]; $current[$attrs['cn'][0]] = $attrs; } $this->Result['FAIhook']['Entries'] = $current ; } /* Create a new Profile entry */ function prepare_FAIprofile($data) { $classes = split("\ ",$data['FAIclass'][0]); foreach($classes as $class){ $class = trim($class); $this->resolveObject($class); } } /* Return plugin informations for acl handling * / static function plInfo() { return (array( "plShortName" => _("Summary"), "plDescription" => _("FAI summary"), "plSelfModify" => FALSE, "plDepends" => array(), "plPriority" => 15, "plSection" => array("administration"), "plCategory" => array("workstation","server","fai","ogroups") , "plProvidedAcls"=> array( "readable" => _("Viewable")), )); } */ } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?>