"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();
$_SESSION['LOCK_VARS_TO_USE'] = array("/^edit_entry$/","/^id$/","/^entry_edit_/","/^entry_delete_/");
$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']= get_base_from_people($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"){
if(($s_action == "edit") && (!isset($this->dialog->config))){
$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;
if($entry['FAIstate'] == "freeze"){
$this->dialog->set_acl(array("*none*")) ;
}
$_SESSION['objectinfo'] = $this->dn;
}
/* Branch handling
09.01.2006
*/
/* Abort creating new branch
*/
if(isset($_POST['CancelBranchName'])){
$this->dispNewBranch = false;
$this->dispNewFreeze = false;
}
/* 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, "FAIclass", $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 release!"));
}
}
/* 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();
}
}
/* Open dialog to insert new branch name
*/
if((isset($_POST['UseBranchName']))&&(($this->dispNewBranch)||($this->dispNewFreeze))){
$_SESSION['LASTPOST'] = $_POST;
if($this->dispNewBranch){
$type = "branch";
}else{
$type = "freeze";
}
/* 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)){
if($type == "branch"){
print_red(_("Specified branch name is invalid."));
}else{
print_red(_("Specified freeze 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){
$_SESSION['LASTPOST']['base'] = $base;
$_SESSION['LASTPOST']['type'] = $type;
$smarty->assign("iframe", true);
$smarty->assign("plugID", $_GET['plug']);
$display = $smarty->fetch(get_template_path('faiNewBranch.tpl', TRUE, dirname(__FILE__)));
return($display);
}
}
if(isset($_GET['PerformBranch'])){
/* Create it know */
$this->dispNewBranch = false;
$this->dispNewFreeze = false;
$base = $_SESSION['LASTPOST']['base'];
$_POST = $_SESSION['LASTPOST'];
$name = $_POST['BranchName'];
$type = $_SESSION['LASTPOST']['type'];
$ldap = $this->config->get_ldap_link();
$baseToUse = $base;
if($_SESSION['faifilter']['branch']!="main"){
$baseToUse = $_SESSION['faifilter']['branch'];
}
$appsrc = preg_replace("/ou=fai,ou=configs,ou=systems,/","ou=apps,",$baseToUse)."
" ;
$appdst = preg_replace("/ou=fai,ou=configs,ou=systems,/","ou=apps,","ou=".$name.",".$baseToUse)."
" ;
$ldap->cd ("ou=".$name.",".$baseToUse);
$ldap->recursive_remove();
$ldap->cd ($this->config->current['BASE']);
$ldap->copy_FAI_resource_recursive($appsrc,$appdst,$type,true);
$ldap->cd ($this->config->current['BASE']);
$ldap->copy_FAI_resource_recursive($baseToUse,"ou=".$name.",".$baseToUse,$type,true);
echo "
\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 = "