X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Ffai%2Fclass_faiPackage.inc;h=e98f721e431ccb79c58dc616c9e22bde87661b0f;hb=6cb5be59b017449b99265b7ab8dead4eeab15b19;hp=d49d7b14bc9758831b964f1c01195ab56a0a993a;hpb=ff457979c436e8d83a557455a94f6a8b8bfd7e95;p=gosa.git diff --git a/plugins/admin/fai/class_faiPackage.inc b/plugins/admin/fai/class_faiPackage.inc index d49d7b14b..e98f721e4 100644 --- a/plugins/admin/fai/class_faiPackage.inc +++ b/plugins/admin/fai/class_faiPackage.inc @@ -11,10 +11,10 @@ class faiPackage extends plugin var $ignore_account = TRUE; /* Attributes for this Object */ - var $attributes = array("cn","description","FAIpackage"); + var $attributes = array("cn","description","FAIpackage","FAIdebianRelease","FAIdebianSection", "FAIinstallMethod"); /* ObjectClasses for this Object*/ - var $objectclasses = array("top","FAIclass","FAIpackageList"); + var $objectclasses = array("top","FAIclass","FAIpackageList","FAIrepository"); /* Class name of the Ldap ObjectClass for the Sub Object */ var $subClass = ""; @@ -27,6 +27,8 @@ class faiPackage extends plugin 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 @@ -34,6 +36,24 @@ class faiPackage extends plugin var $dialog = NULL; // a dialog, e.g. new disk dialog var $SubObjects = array(); // All leafobjects of this object + var $FAIdebianRelease = ""; // The selected release + var $FAIdebianSection = ""; // selected section + var $FAIinstallMethod = "aptitude"; // hard coded + var $mirror = ""; // selected mirror + + var $servers = array(); // All available servers + var $releases = array(); // All possible releases + var $sections = array(); // All section types + + var $list = NULL; + + var $mirrors = array(); // The combination of server/release/section + var $confDir = ""; + var $usedPackages = array(); + var $buffer = NULL; + var $strID =""; + var $newDialogShown =false; + function faiPackage ($config, $dn= NULL) { /* Load Attributes */ @@ -47,34 +67,194 @@ class faiPackage extends plugin $this->dn =$dn; } - $this->FAIpackage = "test"; + if(isset($this->attrs['FAIpackage'])){ + unset($this->attrs['FAIpackage']['count']); + foreach($this->attrs['FAIpackage'] as $pkg){ + $this->usedPackages[$pkg] = $pkg; + } + ksort($this->usedPackages); + }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']); + } + if((isset($this->attrs['FAIdebianSection']))&&(is_array($this->attrs['FAIdebianSection']))){ + $this->FAIdebianSection = array(); + foreach($this->attrs['FAIdebianSection'] as $sec){ + $this->FAIdebianSection[$sec]=$sec; + } + } + + if((isset($this->attrs['FAIdebianSection']))&&(is_string($this->attrs['FAIdebianSection']))){ + $this->FAIdebianSection=array($this->attrs['FAIdebianSection']=>$this->attrs['FAIdebianSection']) ; + } + $this->confDir = CONFIG_DIR."/fai/"; + $this->FAIpackage = array(); } function execute() { + /* Call parent execute */ + + plugin::execute(); + /* Fill templating stuff */ $smarty= get_smarty(); $display= ""; + /* Check if we exist already - no need to ask for revisions, etc. then */ + if ($this->dn != "new"){ + $this->newDialogShown= true; + } + + if((!$this->is_account)&&(!$this->newDialogShown)){ + + if($this->dialog==NULL){ + $this->dialog = new faiPackageNew($this->config, $this->dn,$this->mirrors,$this->servers,$this->sections,$this->releases); + $this->is_dialog =true; + } + + /* Assign posible changes, for mirror combinations */ + $this->dialog->save_object(); + + /* 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; + } + + /* Draw dialog */ + if($this->dialog){ + $display=$this->dialog->execute(); + return($display); + } + } + /* Assign variables */ foreach($this->attributes as $attrs){ $smarty->assign($attrs,$this->$attrs); } + + /* Generate package list */ + $this->list=$this->genPkgs(); - $display.= $smarty->fetch(get_template_path('faiPackage.tpl', TRUE)); - return($display); - } + /* + was pressed to open the package dialog */ + if(isset($_POST['Addpkg'])){ + $this->dialog = new faiPackageEntry($this->config, $this->dn,$this->list,$this->usedPackages); + $this->is_dialog =true; + } + + /* Delte selected package */ + if(isset($_POST['Delpkg'])){ + foreach($_POST['usedPackages'] as $del){ + if(isset($this->usedPackages[$del])){ + unset($this->usedPackages[$del]); + } + } + } + + /* Abort package selection dialog */ + if(isset($_POST['CancelSubObject'])){ + $this->dialog = false; + $this->is_dialog=false; + } + + /* attach new packages */ + if(isset($_POST['SaveSubObject'])) { + $this->dialog->save_object(); + if(count($this->dialog->check())){ + foreach($this->dialog->check() as $msgs){ + print_red($msgs); + } + }else{ + $use = $this->dialog->save(); + $this->usedPackages = $use; + $this->dialog = false; + $this->is_dialog=false; + ksort($this->usedPackages); + } + } - /* Generate listbox friendly SubObject list - */ - function getList(){ - $a_return=array(); - foreach($this->SubObjects as $obj){ - if($obj['status'] != "delete"){ - $a_return[$obj['cn']]= $obj['cn']." [".$obj['description']."]"; + /* Configuration dialog open*/ + 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; } - return($a_return); + + /* cancel configuration */ + if(isset($_POST['CancelObjectConfig'])){ + $this->dialog = false; + $this->is_dialog=false; + } + + /* Display dialog */ + if($this->is_dialog){ + return $this->dialog->execute(); + } + + /* Assign section to smarty */ + $strsec = ""; + foreach($this->FAIdebianSection as $sec){ + $strsec .= $sec." "; + } + + $smarty->assign("OptionsACL",""); + + $smarty->assign("releases",$this->releases); + $smarty->assign("release" ,$this->FAIdebianRelease); + $smarty->assign("sections",$this->sections); + $smarty->assign("section" ,$strsec); + $smarty->assign("usedPackages",$this->printUsedPackages()); + $display.= $smarty->fetch(get_template_path('faiPackage.tpl', TRUE)); + return($display); } /* Delete me, and all my subtrees @@ -92,6 +272,7 @@ class faiPackage extends plugin */ function save_object() { + plugin::save_object(); foreach($this->attributes as $attrs){ if(isset($_POST[$attrs])){ @@ -105,16 +286,82 @@ class faiPackage extends plugin function check() { $message= array(); - $str = utf8_encode("üöä"); - if((empty($this->description))){ - $message[]=_("Please enter a valid description."); - } - if((preg_match("/[^a-z0-9".$str."\.,;:\-_\? ]/i",$this->description))){ - $message[]=_("Please enter a valid description."); + + if(count($this->usedPackages)==0){ + $message[]=_("Please select a least one Package."); + } + + if((empty($this->FAIdebianRelease))||(empty($this->FAIdebianSection))){ + $message[]=_("Please choose a valid combination for your repository setup."); } + return ($message); } + function printUsedPackages(){ + $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]."]".$c_str; + }else{ + $a_ret[$usedName] = $usedName.$c_str; + } + } + } + return($a_ret); + } + + function genPkgs(){ + /* Generate a list off available packages for this mirror, section and release + */ + /* Only read this file if it wasn't read before */ + if($this->buffer==NULL){ + $this->buffer=array(); + $a_ret = array(); + foreach($this->FAIdebianSection as $sec){ + $strID= "/etc/gosa/fai/".$this->FAIdebianRelease."/".$sec; + + if(!is_file($strID)){ + print_red(sprintf(_("Package file '%s' does not exist."),$strID)); + unset($this->buffer); + return(array()); + } + $fp = fopen($strID,"r"); + + /* Parse every line and create an array */ + while(!feof($fp)){ + $str= fgets($fp,512); + $stra= split("\|",$str); + if(count($stra)==4){ + $a_ret[$stra[0]] = $stra; + } + } + fclose($fp); + /* Save our Data, to avoid reading it again */ + } + $this->buffer = $a_ret; + ksort($a_ret); + return($a_ret); + }else{ + return $this->buffer; + } + } + /* Save to LDAP */ function save() @@ -122,7 +369,19 @@ class faiPackage extends plugin plugin::save(); $ldap = $this->config->get_ldap_link(); + + $this->attrs['FAIpackage'] = array(); + foreach($this->usedPackages as $pkg => $obj){ + $this->attrs['FAIpackage'][] = $pkg; + } + $this->attrs['FAIdebianSection'] = array(); + foreach($this->FAIdebianSection as $sec){ + $this->attrs['FAIdebianSection'][] = $sec; + } + + $this->attrs["FAIinstallMethod"]= "aptitude"; + $ldap->cat($this->dn); if($ldap->count()!=0){ /* Write FAIscript to ldap*/ @@ -136,6 +395,41 @@ class faiPackage extends plugin $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()); + } + } + + + + } }