index a00c1fdcfffd2e5138d0cc1d5086dd795d3efe6b..e98f721e431ccb79c58dc616c9e22bde87661b0f 100644 (file)
var $ignore_account = TRUE;
/* Attributes for this Object */
- var $attributes = array("cn","description","FAIpackage","FAIdebianRelease","FAIdebianSection","FAIdebianMirror");
+ var $attributes = array("cn","description","FAIpackage","FAIdebianRelease","FAIdebianSection", "FAIinstallMethod");
/* ObjectClasses for this Object*/
var $objectclasses = array("top","FAIclass","FAIpackageList","FAIrepository");
var $subAttributes = array("cn","description");
var $sub64coded = array();
+ var $ConfiguredPackages = array();
+
/* Specific attributes */
var $cn = ""; // The class name for this object
var $description = ""; // The description for this set of partitions
var $FAIdebianRelease = ""; // The selected release
var $FAIdebianSection = ""; // selected section
- var $FAIdebianMirror = ""; // selected mirror
+ var $FAIinstallMethod = "aptitude"; // hard coded
var $mirror = ""; // selected mirror
var $servers = array(); // All available servers
}else{
$this->usedPackages = array();
}
+
+ $ldap = $this->config->get_ldap_link();
+ foreach($this->usedPackages as $name){
+ $ldap->search("(&(objectClass=FAIdebconfInfo)(FAIpackage=".$name."))",array("FAIvariable","FAIvariableType","FAIvariableContent","FAIpackage","FAIdebianSection",""));
+ 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;
+ }
+ }
+ }
if (isset($this->attrs['FAIdebianSection']['count'])){
unset($this->attrs['FAIdebianSection']['count']);
}
$this->confDir = CONFIG_DIR."/fai/";
$this->FAIpackage = array();
-
- /* Extract mirror location */
- $this->mirror= preg_replace("!^[^/]+//([^/]+).*$!", '$1', $this->FAIdebianMirror);
}
function execute()
{
/* Call parent execute */
+
plugin::execute();
/* Fill templating stuff */
$smarty= get_smarty();
$display= "";
- $this->genMirror();
-
/* Check if we exist already - no need to ask for revisions, etc. then */
if ($this->dn != "new"){
$this->newDialogShown= true;
$this->is_dialog =true;
}
- /* alert possible missconfigurations */
- if((count($this->releases)==0)||(count($this->servers)==0)||(count($this->sections)==0)){
- print_red(_("There is no useable package list defined."));
- }
-
/* Assign posible changes, for mirror combinations */
$this->dialog->save_object();
- $this->dialog->releases = $this->releases;
- $this->dialog->servers = $this->servers;
- $this->dialog->sections = $this->sections;
- $this->dialog->mirrors = $this->mirrors;
/* Assign Repository settings*/
if(isset($_POST['SaveObjectNew'])){
- $this->FAIdebianRelease = $this->dialog->FAIdebianRelease;
- $this->FAIdebianSection = $this->dialog->FAIdebianSection;
- $this->FAIdebianMirror = $this->dialog->FAIdebianMirror;
+ $obj = $this->dialog->save();
+
+ $this->FAIdebianSection = $obj['FAIdebianSection'];
+ $this->FAIdebianRelease = $obj['FAIdebianRelease'];
+
unset($this->dialog);
$this->dialog = false;
$this->is_dialog=false;
$smarty->assign($attrs,$this->$attrs);
}
- /* Set mirror if changed */
- if((isset($_POST['FAIdebianMirrorS']))&&(!empty($_POST['FAIdebianMirrorS']))){
- $this->FAIdebianMirror = $_POST['FAIdebianMirrorS'];
- }
-
- /* check servers matching release and section settings */
- $availableServer = array();
- foreach($this->mirrors as $mir){
- if($mir['release'] == $this->FAIdebianRelease){
- $pass = true;
- foreach($this->FAIdebianSection as $sec){
- if($sec != $mir['section']){
- $pass = false;
- }
- if($pass){
- $availableServer[$mir['mirror']]=$mir['mirror'];
- }
- }
- }
- }
-
/* Generate package list */
$this->list=$this->genPkgs();
/* Delte selected package */
if(isset($_POST['Delpkg'])){
- unset($this->usedPackages[$_POST['usedPackages']]);
+ foreach($_POST['usedPackages'] as $del){
+ if(isset($this->usedPackages[$del])){
+ unset($this->usedPackages[$del]);
+ }
+ }
}
/* Abort package selection dialog */
}
/* Configuration dialog open*/
- if(isset($_POST['Conpkg'])){
- $this->dialog = new faiPackageConfiguration($this->config, $this->dn,"none");
+ if((isset($_POST['Conpkg']))&&(isset($_POST['usedPackages']))&&(!empty($_POST['usedPackages']))){
+ $path = "/etc/gosa/fai/".$this->FAIdebianRelease."/debconf.d";
+ $pkg_config = array();
+ $pkg = $_POST['usedPackages'][0];
+
+ if(isset($this->ConfiguredPackages[$pkg])){
+ $pkg_config = $this->ConfiguredPackages[$pkg];
+ }
+
+ $this->dialog = new faiPackageConfiguration($this->config, $this->dn,$pkg, $path, $pkg_config);
$this->is_dialog =true;
}
-
+
/* Save Configuration */
if(isset($_POST['SaveObjectConfig'])){
+ $this->ConfiguredPackages= array_merge($this->ConfiguredPackages,$this->dialog->save());
$this->dialog = false;
$this->is_dialog=false;
}
}
$smarty->assign("OptionsACL","");
- if(empty($this->FAIdebianMirror)){
- $smarty->assign("OptionsACL"," disabled ");
- }
- $smarty->assign("mirrors" ,$availableServer);
- $smarty->assign("mirror" ,$this->FAIdebianMirror);
$smarty->assign("releases",$this->releases);
$smarty->assign("release" ,$this->FAIdebianRelease);
$smarty->assign("sections",$this->sections);
return($display);
}
- function genMirror(){
- $confDir = $this->confDir;
- if(!is_readable($confDir)){
- print_red(sprintf(_("Can't read configuration folder '%s'."),$confDir));
- }else{
-
- /* Try to catch all available mirrors
- Possibly check if each server is reachable
- */
-
- $this->servers= array();
- $this->releases=array();
- $this->sections=array();
- $this->mirrors= array();
- $fd = opendir($confDir);
- while($mirror = readdir($fd)){
- if((is_dir($confDir.$mirror."/"))&&(($mirror != "." )&&($mirror!=".."))){
-
- $mirrorDir = $confDir.$mirror."/";
-
- $fe = opendir($mirrorDir);
- while($release = readdir($fe)){
- if((is_dir($mirrorDir.$release))&&(($release != "." )&&($release!=".."))){
-
- $releaseDir = $mirrorDir.$release."/";
-
- $ff = opendir($releaseDir);
- while($section = readdir($ff)){
- if((is_file($releaseDir.$section))&&(($section != "." )&&($section!="..")&&(!preg_match("/.*\.in$/",$section)))){
-
- $this->servers[$mirror]=$mirror;
- $this->releases[$release]=$release;
- $this->sections[$section]=$section;
-
- $arr=array();
- $arr['mirror'] = $mirror;
- $arr['release']= $release;
- $arr['section']= $section;
-
- $this->mirrors[] = $arr ;
- }
- }
- fclose($ff);
- }
- }
- fclose($fe);
- }
- }
- fclose($fd);
- }
-
-
- }
-
/* Delete me, and all my subtrees
*/
function remove_from_parent()
$message[]=_("Please select a least one Package.");
}
- if((empty($this->FAIdebianRelease))||(empty($this->FAIdebianSection))||(empty($this->FAIdebianMirror))){
+ if((empty($this->FAIdebianRelease))||(empty($this->FAIdebianSection))){
$message[]=_("Please choose a valid combination for your repository setup.");
}
$a_ret=array();
if(is_array($this->usedPackages)) {
foreach($this->usedPackages as $usedName){
+
+ $config = 0;
+
+ foreach($this->ConfiguredPackages as $name => $value){
+ if($name == $usedName){
+ $config ++;
+ }
+ }
+
+ $c_str ="";
+ if($config){
+ $c_str = " - "._("package is configured");
+ }
+
if(isset($this->list[$usedName][1])){
- $a_ret[$usedName] = $usedName." [".$this->list[$usedName][1]."]";
+ $a_ret[$usedName] = $usedName." [".$this->list[$usedName][1]."]".$c_str;
}else{
- $a_ret[$usedName] = $usedName;
+ $a_ret[$usedName] = $usedName.$c_str;
}
}
}
$this->buffer=array();
$a_ret = array();
foreach($this->FAIdebianSection as $sec){
- $strID= "/etc/gosa/fai/".preg_replace("#^[^/]+//([^/]+).*$#","\\1",$this->FAIdebianMirror)."/".$this->FAIdebianRelease."/".$sec;
+ $strID= "/etc/gosa/fai/".$this->FAIdebianRelease."/".$sec;
if(!is_file($strID)){
print_red(sprintf(_("Package file '%s' does not exist."),$strID));
- $this->FAIdebianMirror="";
unset($this->buffer);
return(array());
}
$this->attrs['FAIdebianSection'][] = $sec;
}
+ $this->attrs["FAIinstallMethod"]= "aptitude";
+
$ldap->cat($this->dn);
if($ldap->count()!=0){
/* Write FAIscript to ldap*/
$ldap->add($this->attrs);
}
show_ldap_error($ldap->get_error());
+
+ /* Save Package configurations */
+ foreach($this->ConfiguredPackages as $pkgname => $attrs){
+ foreach($attrs as $name => $attr){
+
+ foreach($attr as $n=>$v){
+ if(empty($v)) $v = array();
+ }
+
+ /* Set attributes */
+ $pkgattrs['objectClass'] = "FAIdebconfInfo";
+ $pkgattrs['FAIpackage'] = $pkgname;
+ $pkgattrs['FAIvariable'] = $name;
+ $pkgattrs['FAIvariableType'] = $attr['Type'];
+ $pkgattrs['FAIvariableContent'] = $attr['Value'];
+ $pkgdn = "FAIvariable=".$name.",".$this->dn;
+
+ /* cehck if object already exists */
+ $ldap->cat($pkgdn);
+ if($ldap->count()!=0){
+ $ldap->cd($pkgdn);
+ $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());
+ }
+ }
+
+
+
+
}
}