"Eins ist toll", "zwei" => "Zwei ist noch besser"); /* Headpage attributes */ var $departments= array(); var $deptabs= NULL; /* attribute list for save action */ var $attributes = array(); // Attributes Managed by this plugin, none, // because this is only an overview over all objects already defined in FAI. var $objectclasses = array(); // ObjectClasses which the attributes are related to var $dialog = array(); // This object contains every dialog we have currently opened var $objects = array(); // This array contains all available objects shown in divlist var $is_dialog = false; /* construction/reconstruction * The Filter ($faifilter stored in $_SESSION['faifilter']) defines the last * selected department and filter options * If it is not defined already we create a new fresh faifilter. */ function faiManagement ($config, $ui) { $this->ui = $ui; /* Set current dn to "", */ $this->dn = ""; /* Assign config */ $this->config = $config; /* Get global filter config */ if (!is_global("faifilter")){ $base = get_base_from_people($ui->dn); $faifilter= array("base" => "ou=fai,ou=configs,ou=systems,".$base, "regex" => "*"); $faifilter['ShowProfiles'] = true; $faifilter['ShowTemplates'] = true; $faifilter['ShowScripts'] = true; $faifilter['ShowHooks'] = true; $faifilter['ShowVariables'] = true; $faifilter['ShowPackages'] = true; $faifilter['ShowPartitions']=true; register_global("faifilter", $faifilter); } } function execute() { $display = ""; $smarty = get_smarty(); $s_action = ""; $s_entry = ""; /* filter management * Filter will be changed if POST['regex'] or $_GET['search'] isset * New Filter will be stored in session and is used to generate list contents */ $faifilter = $_SESSION['faifilter']; /* Filter is posted by apply button * Check every single chkbox */ if(isset($_POST['regex'])){ $faifilter['regex'] = $_POST['regex']."*"; foreach(array("ShowPartitions","ShowProfiles","ShowTemplates","ShowScripts","ShowHooks","ShowVariables","ShowPackages") as $attrs){ if(isset($_POST[$attrs])){ $faifilter[$attrs] = true; }else{ $faifilter[$attrs] = false; } } } /* Check ImageButton posts * Create new tab ich new_xx is posted */ foreach($_POST as $key => $val){ if(preg_match("/create_partition/i",$key)){ $s_action = "new_partition"; }elseif(preg_match("/create_script/i",$key)){ $s_action = "new_script"; }elseif(preg_match("/create_hook/i",$key)){ $s_action = "new_hook"; }elseif(preg_match("/create_variable/i",$key)){ $s_action = "new_variable"; }elseif(preg_match("/create_template/i",$key)){ $s_action = "new_template"; }elseif(preg_match("/create_package/i",$key)){ $s_action = "new_package"; }elseif(preg_match("/create_profile/i",$key)){ $s_action = "new_profile"; }elseif(preg_match("/edit_continue/",$key)){ $s_action = "select_class_name_finished"; }elseif(preg_match("/^entry_edit_.*/",$key)){ $s_entry = preg_replace("/^entry_edit_/","",$key); $s_entry = preg_replace("/_.*$/","",$s_entry); $s_action = "edit"; }elseif(preg_match("/^entry_delete_.*/",$key)){ $s_entry = preg_replace("/^entry_delete_/","",$key); $s_entry = preg_replace("/_.*$/","",$s_entry); $s_action = "delete"; } } /* Confirm dialog * Delte object */ if ($s_action=="delete"){ /* Get 'dn' from posted termlinst */ $this->dn= $this->objects[$s_entry]['dn']; /* Load permissions for selected 'dn' and check if we're allowed to remove this 'dn' */ $acl= get_permissions ($this->dn, $this->ui->subtreeACL); $this->acl= get_module_permission($acl, "FAIclass", $this->dn); if (chkacl($this->acl, "delete") == ""){ /* Check locking, save current plugin in 'back_plugin', so the dialog knows where to return. */ if (($user= get_lock($this->dn)) != ""){ return(gen_locked_message ($user, $this->dn)); } /* Lock the current entry, so nobody will edit it during deletion */ add_lock ($this->dn, $this->ui->dn); $smarty->assign("warning", sprintf(_("You're about to delete all information about the FAI class at '%s'."), $this->dn)); return($smarty->fetch(get_template_path('remove.tpl', TRUE))); } else { /* Obviously the user isn't allowed to delete. Show message and clean session. */ print_red (_("You are not allowed to delete this component!")); } } /* Delete canceled? */ if (isset($_POST['delete_cancel'])){ del_lock ($this->dn); } /* Deltetion was confirmed, so delete this entry */ if (isset($_POST['delete_terminal_confirm'])){ /* Some nice guy may send this as POST, so we've to check for the permissions again. */ if (chkacl($this->acl, "delete") == ""){ /* Find out more about the object type */ $ldap = $this->config->get_ldap_link(); $ldap->cat($this->dn); $attrs = $ldap->fetch(); $type = $this->get_type($attrs); $this->dialog= new $type[0]($this->config, $this->config->data['TABS'][$type[2]], $this->dn); $this->dialog->set_acl(array($this->acl)); $this->dialog->by_object[$type[1]]->remove_from_parent (); unset ($this->dialog); gosa_log ("FAI class '".$this->dn."' has been removed"); $this->dialog= NULL; /* Terminal list has changed, reload it. */ $this->reload (); } else { /* Normally this shouldn't be reached, send some extra logs to notify the administrator */ print_red (_("You are not allowed to delete this component!")); gosa_log ("Warning: '".$this->ui->uid."' tried to trick system ". "deletion."); } /* Remove lock file after successfull deletion */ del_lock ($this->dn); } /* Edit Entry */ if($s_action == "edit"){ $entry = $this->objects[$s_entry]; $a_setup = ($this->get_type($entry)); $this->dn = $entry['dn']; $this->dialog= new $a_setup[0]($this->config, $this->config->data['TABS'][$a_setup[2]],$this->dn); $this->is_dialog = true; } /* Dialog handling */ if($s_action == "new_partition"){ $this->dialog = new askClassName($this->config,$this->dn,$this->ui,"FAIpartitionTable"); } /* Dialog handling */ if($s_action == "new_script"){ $this->dialog = new askClassName($this->config,$this->dn,$this->ui,"FAIscript"); } /* Dialog handling */ if($s_action == "new_hook"){ $this->dialog = new askClassName($this->config,$this->dn,$this->ui,"FAIhook"); } /* Dialog handling */ if($s_action == "new_variable"){ $this->dialog = new askClassName($this->config,$this->dn,$this->ui,"FAIvariable"); } /* Dialog handling */ if($s_action == "new_template"){ $this->dialog = new askClassName($this->config,$this->dn,$this->ui,"FAItemplate"); } /* Dialog handling */ if($s_action == "new_package"){ $this->dialog = new askClassName($this->config,$this->dn,$this->ui,"FAIpackageList"); } /* New Profile */ if($s_action == "new_profile"){ $this->dn = "new" ; $a_setup= $this->get_type(array("objectClass"=>array("FAIprofile"))); $this->dialog = new $a_setup[0]($this->config, $this->config->data['TABS'][$a_setup[2]],$this->dn); $this->is_dialog = true; } if($s_action == "select_class_name_finished"){ $this->dialog->save_object(); if(count($this->dialog->check())!=0){ foreach($this->dialog->check() as $msg){ print_red($msg); } }else{ $this->dn = "new" ; $a_setup= $this->get_type(array("objectClass"=>array($this->dialog->objectClass))); $name = $this->dialog->save(); $this->dialog = new $a_setup[0]($this->config, $this->config->data['TABS'][$a_setup[2]],$this->dn); $this->dialog->by_object[$a_setup[1]]->cn = $name; $this->is_dialog = true; } } /* Search is set */ if(isset($_GET['search'])){ $faifilter['regex']=$_GET['search']."*"; } /* remove double asterisks and save new filter */ $faifilter['regex'] = preg_replace("/\*\*/","*",$faifilter['regex']); $_SESSION['faifilter']= $faifilter; /* Edit dialog was canceled * Remove dialog an show management dialog */ if(isset($_POST['edit_cancel'])){ unset($this->dialog); $this->dialog=NULL; $this->is_dialog = false; } /* This check if the given tab could be saved * If it was possible to save it, remove dialog object. * If it wasn't possible, show errors and keep dialog. */ if(isset($_POST['edit_finish'])){ $this->dialog->save_object(); if(count($this->dialog->check())!=0){ foreach($this->dialog->check() as $msg){ print_red($msg); } }else{ $this->dialog->save(); unset($this->dialog); $this->dialog=NULL; $this->is_dialog=false; } } /* If dialog is set, but $this->is_dialog==false, then * only the "abort" button is shown, this are dialogs that must not be saved. * If is_dialog == true, we are currently editing tab objects. * Here we need both, save and cancel */ if($this->dialog != NULL){ $display .= $this->dialog->execute(); /* Don't show buttons if tab dialog requests this */ if (((isset($this->dialog->current))&&($this->dialog->by_object[$this->dialog->current]->is_dialog))){ }elseif(((isset($this->dialog->current))&&(!$this->dialog->by_object[$this->dialog->current]->is_dialog))){ $display.= "

\n"; $display.= "\n"; $display.= " \n"; $display.= "\n"; $display.= "

"; }elseif(!isset($this->dialog->current)){ $display.= "

\n"; $display.= " "; $display.= "\n"; $display.= "

"; } return($display); } /* Show Management template * The following code will only be reached if no dialog (tabs or dialogs) * are currently opened. * Assign all reguired vars to template engine */ /* Create listhead, it will be shown on top of the divlist. * It provides general navigation and object creation */ $faihead = "
 ". "  ". "\"\" ". "  ". "  ". "  ". "  ". "  ". "  ". "
"; $this->reload(); /* Create list with objects */ $divlist = new divlist("faiManagement"); $divlist->SetEntriesPerPage(20); $divlist->SetSummary(_("This table displays all systems, in the selected tree.")); $divlist->SetHeader(array( array("string" => " "), array("string" => _("Name of FAI class")), array("string" => _("Class type")), array("string" => _("Actions"), "attach"=>"style='border:none;width:40px;'"))); $action = ""; $action .= ""; /* Attach objects */ foreach($this->objects as $key => $value){ $info= ""; $img = ""; $type = $value['type']; $abort=false; switch($type) { case "FAIpartitionTable" : if(!$faifilter['ShowPartitions']){ $abort = true; } $img="PT"; $info = _("Partition table"); break; case "FAIpackageList" : if(!$faifilter['ShowPackages']){ $abort = true; } $img="PL"; $info = _("Package list"); break; case "FAIscript" : if(!$faifilter['ShowScripts']){ $abort = true; } $img="S"; $info = _("Scripts"); break; case "FAIvariable" : if(!$faifilter['ShowVariables']){ $abort = true; } $img="V"; $info = _("Variables"); break; case "FAIhook" : if(!$faifilter['ShowHooks']){ $abort = true; } $img="H"; $info = _("Hooks"); break; case "FAIprofile" : if(!$faifilter['ShowProfiles']){ $abort = true; } $img="P"; $info = _("Profile"); break; case "FAItemplate" : if(!$faifilter['ShowTemplates']){ $abort = true; } $img="T"; $info = _("Templates"); break; default : $img="";$info = "";break; } if(!$abort) { if((isset($value['description']))&&(!empty($value['description']))){ $desc= " [".$value['description']."]"; }else{ $desc= ""; } $field1 = array("string" => $img , "attach" => "style='height:26px;width=20px;'"); $field2 = array("string" => $value['cn'].$desc , "attach" => ""); $field3 = array("string" => $info, "attach" => ""); $field4 = array("string" => preg_replace("/%KEY%/",$key,$action) , "attach"=>"style='text-align:right;border:none'"); $divlist->AddEntry(array($field1,$field2,$field3,$field4)); } } foreach($faifilter as $attrs => $value){ if($value){ $smarty->assign($attrs."CHK", " checked "); }else{ $smarty->assign($attrs."CHK", " "); } } /* Assign all reguired vars to template engine */ $smarty->assign("faihead" , $faihead); $smarty->assign("failist" , $divlist->DrawList()); $smarty->assign("regex" , $faifilter['regex']); $smarty->assign("infoimage" , get_template_path('images/info.png')); $smarty->assign("launchimage" , get_template_path('images/launch.png')); $smarty->assign("alphabet" , generate_alphabet()); $smarty->assign("apply" , apply_filter()); $smarty->assign("search_image" , get_template_path('images/search.png')); $display = $smarty->fetch(get_template_path('headpage.tpl', TRUE, dirname(__FILE__))); return ($display); } function reload() { /* Create a new list of FAI object * Object list depends on faifilter['regex'] * Generate List of Partitions,Hooks,Scripts,Templates,Profiles ... */ $faifilter= get_global('faifilter'); // Added for dirlist function... /* Set base for all searches */ $base= $faifilter['base']; $regex = $faifilter['regex']; /* Array to save objects */ $objects = array(); $this->objects=array(); $res= get_list($this->ui->subtreeACL, "(objectClass=organizationalUnit)", FALSE, $base, array("cn","description","objectClass"),TRUE); foreach($res as $objecttypes){ $res2 = get_list($this->ui->subtreeACL, "(&(objectClass=*)(cn=".$regex."))", FALSE, $objecttypes['dn'], array("cn","description","objectClass","FAIclass"),TRUE); foreach($res2 as $object){ $type= ""; unset($object['objectClass']['count']); if(!isset($object['description'][0])){ $object['description'][0]=""; } /* Clean up object informations */ $obj['cn'] = $object['cn'][0]; $obj['dn'] = $object['dn']; $obj['description'] = $object['description'][0]; $obj['objectClass'] = $object['objectClass']; if(in_array("FAIpartitionTable",$obj['objectClass'])){ $type = "FAIpartitionTable"; }elseif(in_array("FAIpackageList",$obj['objectClass'])){ $type = "FAIpackageList"; }elseif(in_array("FAIscript",$obj['objectClass'])){ $type = "FAIscript"; }elseif(in_array("FAIvariable",$obj['objectClass'])){ $type = "FAIvariable"; }elseif(in_array("FAIhook",$obj['objectClass'])){ $type = "FAIhook"; }elseif(in_array("FAIprofile",$obj['objectClass'])){ $obj['FAIclass'] = $object['FAIclass'][0]; $type = "FAIprofile"; }elseif(in_array("FAItemplate",$obj['objectClass'])){ $type = "FAItemplate"; } $this->objects[strtolower($obj['cn']).$obj['cn'].$type] = $obj; $this->objects[strtolower($obj['cn']).$obj['cn'].$type]['type']=$type; } } ksort($this->objects); reset ($this->objects); } function remove_lock() { if (isset($this->dn)){ del_lock ($this->dn); } } function get_type($array){ if(in_array("FAIpartitionTable",$array['objectClass'])){ return(array("tabsPartition","faiPartitionTable","FAIPARTITIONTABS")); } if(in_array("FAIscript",$array['objectClass'])){ return(array("tabsScript","faiScript","FAISCRIPTTABS")); } if(in_array("FAItemplate",$array['objectClass'])){ return(array("tabsTemplate","faiTemplate","FAITEMPLATETABS")); } if(in_array("FAIhook",$array['objectClass'])){ return(array("tabsHook","faiHook","FAIHOOKTABS")); } if(in_array("FAIvariable",$array['objectClass'])){ return(array("tabsVariable","faiVariable","FAIVARIABLETABS")); } if(in_array("FAIprofile",$array['objectClass'])){ return(array("tabsProfile","faiProfile","FAIPROFILETABS")); } if(in_array("FAIpackageList",$array['objectClass'])){ return(array("tabsPackage","faiPackage","FAIPACKAGETABS")); } } } ?>