"Eins ist toll", "zwei" => "Zwei ist noch besser"); /* Headpage attributes */ 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 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; var $DivListFai; /* construction/reconstruction */ function faiManagement ($config, $ui) { /* Set defaults */ $this->dn = ""; $this->config = $config; $this->ui = $ui; /* Creat dialog object */ $this->DivListFai = new divListFai($this->config,$this); } function execute() { /* Call parent execute */ plugin::execute(); /* Initialise vars and smarty */ $smarty = get_smarty(); $smarty->assign("BranchName",""); $display = ""; $s_action = ""; $s_entry = ""; /* If an entry was locked, these vars will be stored in a session to allow direct edit */ $_SESSION['LOCK_VARS_TO_USE'] = array("/^edit_entry$/","/^id$/","/^entry_edit_/","/^entry_delete_/"); /**************** Handle posts ****************/ /* Check ImageButton posts * Create new tab ich new_xx is posted */ $posts = array( "/remove_branch/"=>"remove_branch", "/branch_branch/"=>"branch_branch", "/freeze_branch/"=>"freeze_branch", "/create_partition/i"=>"new_partition", "/create_script/i"=>"new_script", "/create_hook/i"=>"new_hook", "/create_variable/i"=>"new_variable", "/create_template/i"=>"new_template", "/create_package/i"=>"new_package", "/create_profile/i"=>"new_profile", "/edit_continue/"=>"select_class_name_finished"); foreach($_POST as $name => $value){ foreach($posts as $reg => $act ){ if(preg_match($reg,$name)){ $s_action = $act; } } if(preg_match("/^entry_edit_.*/",$name)){ $s_entry = preg_replace("/^entry_edit_/","",$name); $s_entry = preg_replace("/_.*$/","",$s_entry); $s_action = "edit"; }elseif(preg_match("/^entry_delete_.*/",$name)){ $s_entry = preg_replace("/^entry_delete_/","",$name); $s_entry = preg_replace("/_.*$/","",$s_entry); $s_action = "delete"; } } if(isset($_GET['edit_entry'])){ $s_entry = $_GET['edit_entry']; $s_action = "edit"; } if((isset($_POST['CancelBranchName'])) || (isset($_POST['CloseIFrame']))){ $this->dispNewBranch = false; $this->dispNewFreeze = false; } /**************** Delete confirme dialog ****************/ 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 aborted ****************/ /* Delete canceled? */ if (isset($_POST['delete_cancel'])){ del_lock ($this->dn); } /**************** Delete confirmed ****************/ /* 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, array('objectClass')); $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 tagged as removed"); $this->dialog= NULL; $to_del = clean_up_releases($this->dn); save_release_changes_now(); foreach($to_del as $dn){ $ldap->rmdir_recursive($dn); gosa_log(sprintf(_("Release cleanup : Removing object (tagged as remvoed) that is no longer in use '%s'."),$dn)); } } 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") && (!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 */ /**************** Remove branch ****************/ /* Remove branch */ if($s_action == "remove_branch"){ $base= $this->DivListFai->selectedBranch; /* Load permissions for selected 'dn' and check if we're allowed to remove this 'dn' */ $acl= get_permissions ($this->DivListFai->selectedBase, $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'."), $this->DivListFai->selectedBranch)); return($smarty->fetch(get_template_path('remove_branch.tpl',TRUE))); } else { print_red (_("You are not allowed to delete this release!")); } } /**************** Remove branch confirmed ****************/ if(isset($_POST['delete_branch_confirm'])){ $bb = $this->DivListFai->selectedBranch; 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(); $ldap->cd(preg_replace('/,ou=fai,ou=configs,ou=systems,/', ',ou=apps,', $bb)); $ldap->recursive_remove(); $this->DivListFai->selectedBranch = "main"; /* Post remove */ $this->lock_name = $name; $this->lock_dn = $bb; $this->postremove(); } } /**************** Create a new branch "insert 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,".$this->DivListFai->selectedBase; /* 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'],$this->DivListFai->selectedBranch)){ 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); } } /**************** Create a new branch ****************/ 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($this->DivListFai->selectedBranch != "main" ){ $baseToUse = $this->DivListFai->selectedBranch; } /* Create new Release name to be able to set faidebianRelease for FAIpackageList */ $CurrentReleases = $this->getBranches(); $NewReleaseName = $name; if(isset($CurrentReleases[$this->DivListFai->selectedBranch])) { if($this->DivListFai->selectedBranch != "main"){ $NewReleaseName = $CurrentReleases[$this->DivListFai->selectedBranch]."/".$name; $NewReleaseName = preg_replace("#\/#","/",$NewReleaseName); }else{ $NewReleaseName = $name; } } $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) ; $mimesrc = preg_replace("/ou=fai,ou=configs,ou=systems,/","ou=mime,",$baseToUse); $mimedst = preg_replace("/ou=fai,ou=configs,ou=systems,/","ou=mime,","ou=".$name.",".$baseToUse) ; /* Print header to have styles included */ echo "".$smarty->fetch(get_template_path('headers.tpl')); echo "
"; /* Duplicate applications */ $ldap->cd ($appdst); $ldap->recursive_remove(); $ldap->cd ($this->config->current['BASE']); $ldap->copy_FAI_resource_recursive($appsrc,$appdst,$NewReleaseName,$type,true); /* Duplicate mime types */ $ldap->cd ($appdst); $ldap->recursive_remove(); $ldap->cd ($this->config->current['BASE']); $ldap->copy_FAI_resource_recursive($mimesrc,$mimedst,$NewReleaseName,$type,true); $attr = array(); $attr['objectClass'] = array("organizationalUnit","FAIbranch"); $attr['ou'] = $name; $attr['FAIstate'] = $type; $ldap->cd($this->config->current['BASE']); $ldap->cd("ou=".$name.",".$baseToUse); $ldap->cat("ou=".$name.",".$baseToUse); if($ldap->count()){ $ldap->modify($attr); }else{ $ldap->add($attr); } /* Duplicate fai objects */ // $ldap->cd ("ou=".$name.",".$baseToUse); // $ldap->recursive_remove(); // $ldap->cd ($this->config->current['BASE']); // $ldap->copy_FAI_resource_recursive($baseToUse,"ou=".$name.",".$baseToUse,$NewReleaseName,$type,true); echo ""; /* Print footer to have valid html */ echo "