"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")){ $faifilter= array( "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); } if(!isset($_SESSION['CurrentMainBase'])){ $_SESSION['CurrentMainBase'] = $this->config->current['BASE']; } } 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"){ $_SESSION['CurrentMainBase']=($this->config->current['BASE']); } if($s_action=="home"){ $_SESSION['CurrentMainBase']= get_base_from_people($this->ui->dn); } if($s_action=="back"){ $base_back = preg_replace("/^[^,]+,/","",$_SESSION['CurrentMainBase']); $base_back = convert_department_dn($base_back); if(isset($this->config->departments[trim($base_back)])){ $_SESSION['CurrentMainBase']= $this->config->departments[trim($base_back)]; }else{ $_SESSION['CurrentMainBase']= $this->config->departments["/"]; } } if(isset($_GET['act'])&&($_GET['act']=="dep_open")){ $s_action="open"; $s_entry = base64_decode($_GET['dep_id']); $_SESSION['CurrentMainBase']= $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, 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 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'])) || (isset($_POST['CloseIFrame']))){ $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 ($_SESSION['CurrentMainBase'], $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(); $ldap->cd(preg_replace('/,ou=fai,ou=configs,ou=systems,/', ',ou=apps,', $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,".$_SESSION['CurrentMainBase']; /* 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) ; /* 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,$type,true); /* 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,$type,true); echo ""; /* Print footer to have valid html */ echo "