"Eins ist toll", "zwei" => "Zwei ist noch besser"); /* Headpage attributes */ var $departments= array(); var $deptabs= NULL; var $lock_type = ""; // should be branch/freeze var $lock_name = ""; var $lock_dn = ""; /* attribute list for save action */ var $attributes = array("lock_type","lock_name","lock_dn"); // 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; var $dispNewBranch= false; var $dispNewFreeze= 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" => $base, "regex" => "*","branch" => "main"); $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() { /* Call parent execute */ plugin::execute(); $display = ""; $smarty = get_smarty(); $smarty->assign("BranchName",""); $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']; if((isset($_POST['select_branch']))&&(!empty($_POST['select_branch']))){ $faifilter['branch'] = $_POST['select_branch']; } /* 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("/remove_branch/",$key)){ $s_action = "remove_branch"; }elseif(preg_match("/branch_branch/",$key)){ $s_action = "branch_branch"; }elseif(preg_match("/freeze_branch/",$key)){ $s_action = "freeze_branch"; }elseif(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"; }elseif(preg_match("/dep_back.*/i",$key)){ $faifilter['branch'] = "main"; $s_action="back"; }elseif(preg_match("/dep_home.*/i",$key)){ $faifilter['branch'] = "main"; $s_action="home"; }elseif(preg_match("/dep_root.*/i",$key)){ $faifilter['branch'] = "main"; $s_action="root"; } } if($s_action=="root"){ $faifilter['base']=($this->config->current['BASE']); } if($s_action=="home"){ $faifilter['base']=(preg_replace("/^[^,]+,/","",$this->ui->dn)); $faifilter['base']=(preg_replace("/^[^,]+,/","",$faifilter['base'])); } if($s_action=="back"){ $base_back = preg_replace("/^[^,]+,/","",$faifilter['base']); $base_back = convert_department_dn($base_back); if(isset($this->config->departments[trim($base_back)])){ $faifilter['base']= $this->config->departments[trim($base_back)]; }else{ $faifilter['base']= $this->config->departments["/"]; } } if(isset($_GET['act'])&&($_GET['act']=="dep_open")){ $s_action="open"; $s_entry = base64_decode($_GET['dep_id']); $faifilter['base']= $this->config->departments[trim($s_entry)]; } if(isset($_GET['edit_entry'])){ $s_entry = $_GET['edit_entry']; $s_action = "edit"; } /* 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'."), LDAP::fix($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. */ } 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']; /* 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)); } add_lock ($this->dn, $this->ui->dn); $this->dialog= new $a_setup[0]($this->config, $this->config->data['TABS'][$a_setup[2]],$this->dn); $this->is_dialog = true; $_SESSION['objectinfo'] = $this->dn; } /* Branch handling 09.01.2006 */ /* Create new branch */ if((isset($_POST['UseBranchName']))&&($this->dispNewBranch)){ /* Check branch name */ $name = $_POST['BranchName']; $is_ok = true; $smarty->assign("BranchName",$name); $base= "ou=fai,ou=configs,ou=systems,".$faifilter['base']; /* Check used characters */ if(preg_match("/[^0-9a-z \ö\ä\ü\.-_:,]/i",$name)){ print_red(_("Specified branch name is invalid.")); $is_ok = false; } /* Check if this name is already in use */ if(!$this->CheckNewBranchName($_POST['BranchName'],$faifilter['branch'])){ print_red(_("This name is already in use.")); $is_ok = false; } if($is_ok){ /* Create it know */ $ldap = $this->config->get_ldap_link(); $baseToUse = $base; if($_SESSION['faifilter']['branch']!="main"){ $baseToUse = $_SESSION['faifilter']['branch']; } $ldap->cd($this->config->current['BASE']); $ldap->create_missing_trees($baseToUse); $ldap->cd ("ou=".$name.",".$baseToUse); $ldap->recursive_remove(); $ldap->cd ($this->config->current['BASE']); $ldap->copy_FAI_resource_recursive($baseToUse,"ou=".$name.",".$baseToUse,"branch",true); /* Postcreate */ /* Assign possible attributes */ $this->lock_type = "branch"; $this->lock_name = $name; $this->lock_dn = $baseToUse; $this->postcreate(); $this->dispNewBranch = false; } } /* Abort creating new branch */ if(isset($_POST['CancelBranchName'])){ $this->dispNewBranch = false; $this->dispNewFreeze = false; } /* Open dialog to insert new branch name */ if(($s_action == "branch_branch")||($this->dispNewBranch)){ $this->dispNewBranch=true; $base= "ou=fai,ou=configs,ou=systems,".$faifilter['base']; $display .= $smarty->fetch(get_template_path('faiNewBranch.tpl', TRUE, dirname(__FILE__))); return($display); } /* Remove branch */ if($s_action == "remove_branch"){ $base= $faifilter['branch']; /* Load permissions for selected 'dn' and check if we're allowed to remove this 'dn' */ $acl= get_permissions ($faifilter['base'], $this->ui->subtreeACL); $this->acl= get_module_permission($acl, "fai", $base); if (chkacl($this->acl, "delete") == ""){ $smarty->assign("info", sprintf(_("You're about to delete a fai branch / freeze '%s'."), $faifilter['branch'])); return($smarty->fetch(get_template_path('remove_branch.tpl',TRUE))); } else { print_red (_("You are not allowed to delete this user!")); } } /* Delete this entry */ if(isset($_POST['delete_branch_confirm'])){ $bb = $faifilter['branch']; if(!isset($ldap)){ $ldap = $this->config->get_ldap_link(); } $br = $this->getBranches(); if(isset($br[$bb])){ $name = $br[$bb]; $ldap->cd($bb); $ldap->recursive_remove(); $faifilter['branch'] = "main"; /* Post remove */ // $this->lock_type is set from this->reload $this->lock_name = $name; $this->lock_dn = $bb; $this->postremove(); } } if((isset($_POST['UseBranchName']))&&($this->dispNewFreeze)){ /* Check branch name */ $name = $_POST['BranchName']; $is_ok = true; $smarty->assign("BranchName",$name); $base= "ou=fai,ou=configs,ou=systems,".$faifilter['base']; /* Check used characters */ if(preg_match("/[^0-9a-z \ö\ä\ü\.-_:,]/i",$name)){ print_red(_("Specified branch name is invalid.")); $is_ok = false; } /* Check if this name is already in use */ if(!$this->CheckNewBranchName($_POST['BranchName'],$faifilter['branch'])){ print_red(_("This name is already in use.")); $is_ok = false; } if($is_ok){ /* Create it know */ $ldap = $this->config->get_ldap_link(); $baseToUse = $base; if($_SESSION['faifilter']['branch']!="main"){ $baseToUse = $_SESSION['faifilter']['branch']; } $ldap->cd ("ou=".$name.",".$baseToUse); $ldap->recursive_remove(); $ldap->cd ($this->config->current['BASE']); $ldap->copy_FAI_resource_recursive($baseToUse,"ou=".$name.",".$baseToUse,"freeze",true); $this->dispNewFreeze = false; /* Postcreate */ /* Assign possible attributes */ $this->lock_type = "branch"; $this->lock_name = $name; $this->lock_dn = $baseToUse; $this->postcreate(); } } if(($s_action == "freeze_branch")||($this->dispNewFreeze)){ $this->dispNewFreeze = true; $display .= $smarty->fetch(get_template_path('faiNewBranch.tpl', TRUE, dirname(__FILE__))); return($display); } /* ENDE Branch handling */ /* 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,$name); $this->dialog->by_object[$a_setup[1]]->cn = $name; $this->is_dialog = true; } } /* Search is set */ if(isset($_GET['search'])){ $faifilter['regex']=$_GET['search']."*"; } /* Department select */ if((isset($_POST['base']))&&($s_action=="")){ $faifilter['base']=$_POST['base']; } $base= "ou=fai,ou=configs,ou=systems,".$faifilter['base']; $br = $this->getBranches($base); if(!isset($br[$faifilter['branch']])){ $faifilter['branch'] = "main"; } $smarty->assign("select_branch",$faifilter['branch']); /* 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; unset($_SESSION['objectinfo']); del_lock ($this->dn); } /* 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{ del_lock ($this->dn); $this->dialog->save(); unset($this->dialog); $this->dialog=NULL; $this->is_dialog=false; unset($_SESSION['objectinfo']); } } /* 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 */ /* Prepare departments */ $options= ""; foreach ($this->config->idepartments as $key => $value){ if ($faifilter['base'] == $key){ $options.= ""; } else { $options.= ""; } } /* Create listhead, it will be shown on top of the divlist. * It provides general navigation and object creation */ $faihead = "