X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Ffai%2Fclass_faiPackage.inc;h=32a26f91bb1bca327d91c72be94b119ca651a50d;hb=793fbb375529a5b60d733fd587d51ab96da989a5;hp=0cb3792f555ef1052129d24b16a3918d78927c72;hpb=24c361f579de58a8fcec1ff2c0d17e21cbe40951;p=gosa.git diff --git a/plugins/admin/fai/class_faiPackage.inc b/plugins/admin/fai/class_faiPackage.inc index 0cb3792f5..32a26f91b 100644 --- a/plugins/admin/fai/class_faiPackage.inc +++ b/plugins/admin/fai/class_faiPackage.inc @@ -2,11 +2,6 @@ class faiPackage extends plugin { - /* CLI vars */ - var $cli_summary = "Manage server basic objects"; - var $cli_description = "Some longer text\nfor help"; - var $cli_parameters = array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser"); - /* attribute list for save action */ var $ignore_account = TRUE; @@ -61,6 +56,13 @@ class faiPackage extends plugin "hold", "clean", "aptitude", "aptitude-r", "pending", "dpkgc" ); + var $base = ""; + var $release = ""; + var $copy_paste_mode = false; + var $cut_paste_mode = false; + + var $CopyPasteVars = array("ConfiguredPackages","FAIdebianRelease","FAIdebianSection","FAIinstallMethod","mirror","servers","releases","sections","list","mirrors","usedPackages"); + function faiPackage ($config, $dn= NULL) { @@ -101,36 +103,40 @@ class faiPackage extends plugin } - /* Create one filter with all package names, - instead of calling $ldap->search for every single package - */ - $PackageFilter = ""; - foreach($this->usedPackages as $name){ - $PackageFilter .= "(FAIpackage=".$name.")"; - } - $PackageFilter = "(&(objectClass=FAIdebconfInfo)(|".$PackageFilter."))"; - - /* Search for configuration objects */ - $ldap = $this->config->get_ldap_link(); - $ldap->search($PackageFilter,array("FAIvariable","FAIvariableType","FAIvariableContent","FAIpackage","FAIdebianSection")); + if($dn != "new"){ - /* Walk through configurations and append them to our list of ConfiguredPackages */ - while($attr = $ldap->fetch()){ - $tmp =array(); - $tmp['Name'] = $attr['FAIvariable'][0]; - $tmp['Type'] = $attr['FAIvariableType'][0]; + /* Create one filter with all package names, + instead of calling $ldap->search for every single package + */ + $PackageFilter = ""; + foreach($this->usedPackages as $name){ + $PackageFilter .= "(FAIpackage=".$name.")"; + } + $PackageFilter = "(&(objectClass=FAIdebconfInfo)(|".$PackageFilter."))"; - if (isset($attr['FAIvariableContent'][0])){ - if(!in_array($attr['FAIvariableType'],array("multiselect"))){ - $tmp['Value'] = $attr['FAIvariableContent'][0]; - }else{ - $content = array(); - unset($attr['FAIvariableContent']['count']); - foreach($attr['FAIvariableContent'] as $attr){ - $tmp['Value'][] = $attr; + /* Search for configuration objects */ + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $ldap->search($PackageFilter,array("FAIvariable","FAIvariableType","FAIvariableContent","FAIpackage","FAIdebianSection")); + + /* Walk through configurations and append them to our list of ConfiguredPackages */ + while($attr = $ldap->fetch()){ + $tmp =array(); + $tmp['Name'] = $attr['FAIvariable'][0]; + $tmp['Type'] = $attr['FAIvariableType'][0]; + + if (isset($attr['FAIvariableContent'][0])){ + if(!in_array($attr['FAIvariableType'],array("multiselect"))){ + $tmp['Value'] = $attr['FAIvariableContent'][0]; + }else{ + $content = array(); + unset($attr['FAIvariableContent']['count']); + foreach($attr['FAIvariableContent'] as $attr){ + $tmp['Value'][] = $attr; + } } + $this->ConfiguredPackages[$attr['FAIpackage'][0]][$attr['FAIvariable'][0]]=$tmp; } - $this->ConfiguredPackages[$attr['FAIpackage'][0]][$attr['FAIvariable'][0]]=$tmp; } } @@ -175,35 +181,31 @@ class faiPackage extends plugin $smarty->assign( "FAIinstallMethods", $this->FAIinstallMethods ); - if((!$this->is_account)&&(!$this->newDialogShown)){ + if(!$this->is_account){ - if($this->dialog==NULL){ - $this->dialog = new faiPackageNew($this->config, $this->dn,$this->mirrors,$this->servers,$this->sections,$this->releases); - $this->is_dialog =true; + /* Assemble release name */ + $tmp= preg_replace('/,ou=fai,ou=configs,ou=systems,.*$/', '', $_SESSION['faifilter']['branch']); + $tmp= preg_replace('/ou=/', '', $tmp); + $rev= array_reverse(split(',', $tmp)); + $this->FAIdebianRelease= ""; + foreach ($rev as $part){ + $this->FAIdebianRelease.= "/$part"; } + $this->FAIdebianRelease= preg_replace('#^/#', '', $this->FAIdebianRelease); - /* Assign posible changes, for mirror combinations */ - $this->dialog->save_object(); + /* Assemble sections */ + $repos= $this->getServerInfos(); - /* Assign Repository settings*/ - if(isset($_POST['SaveObjectNew'])){ - $obj = $this->dialog->save(); - - $this->FAIdebianSection = $obj['FAIdebianSection']; - $this->FAIdebianRelease = $obj['FAIdebianRelease']; - - unset($this->dialog); - $this->dialog = false; - $this->is_dialog = false; - $this->newDialogShown = true; - $this->is_account = true; + if(isset($repos[$this->FAIdebianRelease])){ + $this->FAIdebianSection= $repos[$this->FAIdebianRelease]; + $this->FAIdebianSection= array_unique($this->FAIdebianSection); + }else{ + $this->FAIdebianSection = array(); + print_red(sprintf(_("No repository server found that provide this release '%s'."), $this->FAIdebianRelease)); } - /* Draw dialog */ - if($this->dialog){ - $display=$this->dialog->execute(); - return($display); - } + /* Assign Repository settings*/ + $this->is_account = true; } /* Assign variables */ @@ -212,7 +214,7 @@ class faiPackage extends plugin } /* Generate package list */ - $this->list=$this->genPkgs(); + $this->list= $this->genPkgs(); /* + was pressed to open the package dialog */ if(isset($_POST['Addpkg'])){ @@ -259,8 +261,9 @@ class faiPackage extends plugin } /* Configuration dialog open*/ - if((isset($_POST['Conpkg']))&&(isset($_POST['usedPackages']))&&(!empty($_POST['usedPackages']))){ - $path = "/etc/gosa/fai/".$this->FAIdebianRelease."/debconf.d"; + if((isset($_POST['Conpkg']))&&(isset($_POST['usedPackages']))&&(!empty($_POST['usedPackages'][0]))){ + + $path = CONFIG_DIR."/fai/".$this->FAIdebianRelease."/debconf.d"; $pkg_config = array(); $pkg = $_POST['usedPackages'][0]; @@ -274,19 +277,21 @@ class faiPackage extends plugin } /* Configuration dialog open*/ - if((isset($_POST['Markpkg']))&&(isset($_POST['usedPackages']))&&(!empty($_POST['usedPackages']))){ - foreach($_POST['usedPackages'] as $pkg){ - if (isset($this->usedPackages[$pkg])){ - unset($this->usedPackages[$pkg]); - if (preg_match('/^-/', $pkg)){ - $pkg= preg_replace('/^-/', '', $pkg); - } else { - $pkg= preg_replace('/^/', '-', $pkg); + if($this->FAIstate != "freeze"){ + if((isset($_POST['Markpkg']))&&(isset($_POST['usedPackages']))&&(!empty($_POST['usedPackages']))){ + foreach($_POST['usedPackages'] as $pkg){ + if (isset($this->usedPackages[$pkg])){ + unset($this->usedPackages[$pkg]); + if (preg_match('/^-/', $pkg)){ + $pkg= preg_replace('/^-/', '', $pkg); + } else { + $pkg= preg_replace('/^/', '-', $pkg); + } + $this->usedPackages[$pkg]= $pkg; } - $this->usedPackages[$pkg]= $pkg; } } - } + } /* Save Configuration */ if(isset($_POST['SaveObjectConfig'])){ @@ -372,9 +377,23 @@ class faiPackage extends plugin $message[]=_("Please choose a valid combination for your repository setup."); } + /* If this is a new script, check if a script with this name already exists */ + if(!empty($this->release) && ($this->copy_paste_mode || $this->cut_paste_mode) ){ + + /* Check if current name is already used for fai scripts in selected release */ + $dn = 'cn='.$this->cn.",ou=packages,".$this->release; + $ldap = $this->config->get_ldap_link(); + $ldap->cat($dn); + if($ldap->count()){ + + $r =convert_department_dn($this->release);; + $message[] = sprintf(_("Can't insert a fai package list named '%s' in '%s' there is already a package list with the given name."),$this->cn,$r); + } + } return ($message); } + function printUsedPackages(){ $a_ret=array(); if(is_array($this->usedPackages)) { @@ -397,7 +416,8 @@ class faiPackage extends plugin $dsc= ""; if (preg_match('/^-/', $usedName)){ $dsc= " - "._("Package marked for removal"); - $usedName= preg_replace('/^-/', '! ', $usedName); + // Generally a bad idea here, because the toggel triggers on -, not on ! + //$usedName= preg_replace('/^-/', '! ', $usedName); } if(isset($this->list[$usedName][1])){ @@ -418,7 +438,7 @@ class faiPackage extends plugin $this->buffer=array(); $a_ret = array(); foreach($this->FAIdebianSection as $sec){ - $strID= "/etc/gosa/fai/".$this->FAIdebianRelease."/".$sec; + $strID= CONFIG_DIR."/fai/".$this->FAIdebianRelease."/".$sec; if(!is_file($strID)){ print_red(sprintf(_("Package file '%s' does not exist."),$strID)); @@ -454,6 +474,11 @@ class faiPackage extends plugin $ldap = $this->config->get_ldap_link(); + /* Copy & Paste : Ensure that FAIstate is copied too */ + if($this->copy_paste_mode && preg_match("/freeze/",$this->FAIstate)){ + $this->attrs['FAIstate'] = $this->FAIstate; + } + $this->attrs['FAIpackage'] = array(); foreach($this->usedPackages as $pkg => $obj){ $this->attrs['FAIpackage'][] = $pkg; @@ -513,29 +538,86 @@ class faiPackage extends plugin if((isset($attrs['objectClass'])) && (in_array_ics("gosaAdministrativeUnitTag",$attrs['objectClass']))){ $pkgattrs['objectClass'][] = "gosaAdministrativeUnitTag"; } - - if($ldap->count()!=0){ - $ldap->cd($pkgdn); - $this->cleanup(); - $ldap->modify ($pkgattrs); - - }else{ - $ldap->cd($this->config->current['BASE']); - $ldap->create_missing_trees(preg_replace('/^[^,]+,/', '', $pkgdn)); - $ldap->cd($pkgdn); - $ldap->add($pkgattrs); + + if(in_array($pkgattrs['FAIvariableType'],array("boolean","multiselect","password","select","string","text"))){ + if($ldap->count()!=0){ + $ldap->cd($pkgdn); + $this->cleanup(); + $ldap->modify ($pkgattrs); + + }else{ + $ldap->cd($this->config->current['BASE']); + $ldap->create_missing_trees(preg_replace('/^[^,]+,/', '', $pkgdn)); + $ldap->cd($pkgdn); + $ldap->add($pkgattrs); + } + show_ldap_error($ldap->get_error(), _("Saving FAI package entry failed")); } - show_ldap_error($ldap->get_error(), _("Saving FAI package entry failed")); /* Handle tagging */ $this->handle_object_tagging($pkgdn, $this->gosaUnitTag); } } + } + + /* return copy & paste dialog + */ + function getCopyDialog() + { + /* Ask for cn */ + $smarty = get_smarty(); + + /* Assemble release name */ + $tmp= preg_replace('/,ou=fai,ou=configs,ou=systems,.*$/', '', $_SESSION['faifilter']['branch']); + $tmp= preg_replace('/ou=/', '', $tmp); + $rev= array_reverse(split(',', $tmp)); + $this->FAIdebianRelease= ""; + foreach ($rev as $part){ + $this->FAIdebianRelease.= "/$part"; + } + $this->FAIdebianRelease= preg_replace('#^/#', '', $this->FAIdebianRelease); + + $smarty->assign("cn" ,$this->cn); + $str = $smarty->fetch(get_template_path("paste_fai_object.tpl",TRUE)); + $ret = array(); + $ret['string'] = $str; + $ret['status'] = ""; + return($ret); + } + /* Get posted cn */ + function saveCopyDialog() + { + if(isset($_POST['cn'])){ + $this->cn = $_POST['cn']; + } + } + function getServerInfos() + { + $ret = array(); + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); + $ldap->search("(objectClass=FAIrepositoryServer)",array("*")); + while($attrs = $ldap->fetch()){ + if(isset($attrs['FAIrepository'])){ + for($i =0 ; $i < $attrs['FAIrepository']['count']; $i++){ + $obj = $attrs['FAIrepository'][$i]; + $tmp = split("\|",$obj); + if(count($tmp)==4){ + foreach(split(",",$tmp[3]) as $sec){ + if(!empty($sec)){ + $ret[$tmp[2]][] = $sec; + } + } + } + } + } + } + return($ret); + } - } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: