X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-plugins%2Ffai%2Fadmin%2Ffai%2Fclass_faiPackage.inc;h=d32f26a64d41e27de24dc2c150bd47363a5deaee;hb=ac00a6eccb7dd4f40043288482e701a3f17fcc6e;hp=277cf664685c64b67209284c5aa301c534f70811;hpb=a78a38e2d9eca8fc560be8434b7b22054fd80b65;p=gosa.git diff --git a/gosa-plugins/fai/admin/fai/class_faiPackage.inc b/gosa-plugins/fai/admin/fai/class_faiPackage.inc index 277cf6646..d32f26a64 100644 --- a/gosa-plugins/fai/admin/fai/class_faiPackage.inc +++ b/gosa-plugins/fai/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; @@ -38,24 +33,21 @@ class faiPackage extends plugin var $FAIdebianRelease = ""; // The selected release var $FAIdebianSection = array(); // 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; + var $newDialogShown = false; var $FAIstate = ""; var $view_logged = FALSE; var $base; + var $FAIpackage ; + + var $packageSelect ; var $FAIinstallMethods = array( "install", "ninstall", "remove", "dselect-upgrade", "taskinst", "taskrm", @@ -75,30 +67,22 @@ class faiPackage extends plugin if($dn != "new"){ $this->dn =$dn; - /* Get FAIstate + /* Check if there are already some packages in this list */ - if(isset($this->attrs['FAIstate'][0])){ - $this->FAIstate = $this->attrs['FAIstate'][0]; - } - } - - 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(); - } - - if($dn != "new"){ + if(isset($this->attrs['FAIpackage'])){ + unset($this->attrs['FAIpackage']['count']); + foreach($this->attrs['FAIpackage'] as $pkg){ + $name = preg_replace("/\-$/","",$pkg); + $this->usedPackages[$name] = $pkg; + } + ksort($this->usedPackages); + } - /* Create one filter with all package names, - instead of calling $ldap->search for every single package + /* Fetch all package configurations from ldap */ $PackageFilter = ""; - foreach($this->usedPackages as $name){ + foreach($this->usedPackages as $name => $value){ $PackageFilter .= "(FAIpackage=".$name.")"; } $PackageFilter = "(&(objectClass=FAIdebconfInfo)(|".$PackageFilter."))"; @@ -106,9 +90,11 @@ class faiPackage extends plugin /* Search for configuration objects */ $ldap = $this->config->get_ldap_link(); $ldap->cd($this->dn); - $ldap->search($PackageFilter,array("FAIvariable","FAIvariableType","FAIvariableContent","FAIpackage","FAIdebianSection","FAIstate")); + $ldap->search($PackageFilter,array("FAIvariable","FAIvariableType", + "FAIvariableContent","FAIpackage","FAIdebianSection","FAIstate")); - /* Walk through configurations and append them to our list of ConfiguredPackages */ + /* Walk through configurations and append them to our list of ConfiguredPackages + */ while($attr = $ldap->fetch()){ /* Skip objects, that are tagged as removed */ @@ -135,37 +121,38 @@ class faiPackage extends plugin $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'])){ + for($i = 0 ; $i < $this->attrs['FAIdebianSection']['count'] ; $i++ ){ + $sec = $this->attrs['FAIdebianSection'][$i]; + $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(); + $this->FAIpackage = array(); + } // ENDE dn != new $methods = array(); foreach($this->FAIinstallMethods as $method){ $methods[$method] = $method; } $this->FAIinstallMethods = $methods; + /* Check if we exist already - no need to ask for revisions, etc. then */ if ($this->dn != "new"){ $this->newDialogShown= true; } + $this->is_new = FALSE; + if($this->dn == "new"){ + $this->is_new =TRUE; + } + /* Generate package list */ + $this->list= $this->genPkgs(TRUE); } + function execute() { /* Call parent execute */ @@ -180,20 +167,22 @@ class faiPackage extends plugin $smarty= get_smarty(); $display= ""; - $smarty->assign( "FAIinstallMethods", $this->FAIinstallMethods ); - + /****** + * Initialize a new Package List with release and section name + ******/ + if(!$this->is_account){ /* Assemble release name */ - $faifilter = session::get('faifilter'); - $tmp= preg_replace('/,'.normalizePreg(get_ou('faiou')).'.*$/', '', $faifilter['branch']); + $release = $this->parent->parent->fai_release; + $tmp= preg_replace('/[,]*'.preg_quote(get_ou('faiBaseRDN'), '/').'.*$/i', '', $release); $tmp= preg_replace('/ou=/', '', $tmp); - $rev= array_reverse(split(',', $tmp)); - $this->FAIdebianRelease= ""; + $rev= array_reverse(explode(',', $tmp)); + $this->FAIdebianRelease= "/"; foreach ($rev as $part){ $this->FAIdebianRelease.= "/$part"; } - $this->FAIdebianRelease= preg_replace('#^/#', '', $this->FAIdebianRelease); + $this->FAIdebianRelease= preg_replace('#^[/]*#', '', $this->FAIdebianRelease); /* Assemble sections */ $repos= $this->getServerInfos(); @@ -205,93 +194,190 @@ class faiPackage extends plugin /* Assign Repository settings*/ $this->is_account = true; } + + + /****** + * Add + ******/ + + if(isset($_POST['AddManualpkg']) && + isset($_POST['addPpkgsText']) && + strlen($_POST['addPpkgsText']) && + $this->acl_is_writeable("FAIpackage") && + !preg_match("/freeze/",$this->FAIstate)){ + + // Check all splitted packages for valid package names + $add_packages = preg_split( "/[\s,]+/", get_post('addPpkgsText'), -1, PREG_SPLIT_NO_EMPTY ); + if( is_array($add_packages) ) { + $invalid_packages = array(); + foreach ($add_packages as $value) { + if(!preg_match( "/^[a-z0-9][-0-9a-z+\.]+$/",$value)){ + $invalid_packages[] = trim($value); + }else{ + $valid_packages[] = trim($value); + } + } + if(count($invalid_packages)){ + $str = implode(", ",$invalid_packages); + msg_dialog::display(_("Invalid package names"), + sprintf(_("The following package names don't match the Debian policy: %s"),$str), + ERROR_DIALOG); + } - /* Assign variables */ - foreach($this->attributes as $attrs){ - $smarty->assign($attrs,$this->$attrs); - } - /* Generate package list */ - $this->list= $this->genPkgs(); + // If we have a complete list of valid packages, add them + if(count($valid_packages)){ - /* + was pressed to open the package dialog */ - if(isset($_POST['Addpkg']) && $this->acl_is_writeable("FAIpackage")){ - $this->dialog = new faiPackageEntry($this->config, $this->dn,$this->list,$this->usedPackages); - $this->is_dialog =true; - } + foreach($valid_packages as $key => $value){ + if(array_key_exists($value,$this->usedPackages)) { + unset($valid_packages[$key]); + } + } - /* Delte selected package */ - if(isset($_POST['Delpkg']) && $this->acl_is_writeable("FAIpackage")){ - if($this->FAIstate != "freeze"){ - foreach($_POST['usedPackages'] as $del){ - if(isset($this->usedPackages[$del])){ - unset($this->usedPackages[$del]); + // Query SI-Deamon for additional package information + $daemon = new gosaSupportDaemon(); + $query_attrs = array("distribution", "package","version", "section", "description", "timestamp"); + $do_si_query = true; + + + foreach ($valid_packages as $value) { + + if( $do_si_query == true ) { + $res = $daemon->FAI_get_packages($this->FAIdebianRelease,$query_attrs,array($value),0,1); + if( ! $daemon->is_error()){ + + if(count($res)){ + + // We just use the last answer - there shouldn't be multiple + $res_attrs = array_pop( $res ); + $this->list[$value] = $res_attrs; + $this->usedPackages[$value] = $res_attrs['PACKAGE']; + + }else{ + $this->usedPackages[$value] = $value; + } + }else{ + msg_dialog::display(_("Service infrastructure"), + msgPool::siError($daemon->get_error()), + ERROR_DIALOG); + $do_si_query = false; + } + } } + + ksort($this->usedPackages); + + /* Generate package list */ + $this->list= $this->genPkgs(TRUE); } } } - /* Abort package selection dialog */ - if(isset($_POST['CancelSubObject'])){ - $this->dialog = false; - $this->is_dialog=false; + // Open the packageSelect dialog to allow adding packages out of a list. + if(isset($_POST['Addpkg']) && $this->acl_is_writeable("FAIpackage") && !preg_match("/freeze/",$this->FAIstate)){ + $this->packageSelect = new packageSelect($this->config, get_userinfo()); + session::set('packageSelect_Release',$this->FAIdebianRelease); + $this->dialog =true; + } + + // Close packageSelect dialog. + if(isset($_POST['packageSelect_cancel'])){ + $this->packageSelect = FALSE; + $this->dialog =FALSE; } - /* attach new packages */ - if(isset($_POST['SaveSubObject'])) { - if($this->FAIstate != "freeze"){ - $this->dialog->save_object(); - if(count($this->dialog->check())){ - foreach($this->dialog->check() as $msgs){ - print_red($msgs); + // Close packageSelect dialog and add the selected packages. + if(isset($_POST['packageSelect_save']) && $this->packageSelect instanceOf packageSelect){ + if(!preg_match("/freeze/i", $this->FAIstate)){ + $use = $this->packageSelect->save(); + + foreach($use as $pkg){ + $item = array(); + for($i =0; $i < $pkg['count']; $i++){ + $item[$pkg[$i]] = $pkg[$pkg[$i]][0]; } - }else{ - $use = $this->dialog->save(); - $this->usedPackages = $use; - $this->dialog = false; - $this->is_dialog=false; - ksort($this->usedPackages); + $this->usedPackages[$item['PACKAGE']] = $item['PACKAGE']; } - }else{ - $this->dialog = false; - $this->is_dialog=false; + + ksort($this->usedPackages); + + /* Generate package list */ + $this->list= $this->genPkgs(TRUE); } + $this->packageSelect = FALSE; + $this->dialog =FALSE; + } + + // Display package add dialog + if($this->packageSelect instanceOf packageSelect){ + + session::set('filterBlacklist', array('PACKAGE' => $this->usedPackages)); + return $this->packageSelect->execute(); } - /* Configuration dialog open*/ - if((isset($_POST['Conpkg']))&&(isset($_POST['usedPackages']))&&(!empty($_POST['usedPackages'][0])) && $this->acl_is_writeable("FAIdebconfInfo")){ - $path = CONFIG_DIR."/fai/".$this->FAIdebianRelease."/debconf.d"; - $pkg_config = array(); - $pkg = $_POST['usedPackages'][0]; - if(isset($this->ConfiguredPackages[$pkg])){ - $pkg_config = $this->ConfiguredPackages[$pkg]; + /* Check image Posts + */ + foreach($_POST as $name => $value){ + + /****** + * Mark as removed + ******/ + + if(!preg_match('/freeze/i', $this->FAIstate) && preg_match("/^removal_package_/",$name)){ + $id = @base64_decode(preg_replace("/^removal_package_(.*)_[xy]*$/","\\1",$name)); + if(isset($this->usedPackages[$id])){ + $pkg = $this->usedPackages[$id]; + if (preg_match('/\-$/', $pkg)){ + $pkg= preg_replace('/\-$/', '', $pkg); + } else { + $pkg= preg_replace('/$/', '-', $pkg); + } + $this->usedPackages[$id] = $pkg; + } + break; } - $this->dialog = new faiPackageConfiguration($this->config, $this->dn,$pkg, $path, $pkg_config); - $this->is_dialog =true; - } + /****** + * Delete Pkgs + ******/ + if(!preg_match('/freeze/i', $this->FAIstate) && preg_match("/^remove_package_/",$name)){ + $id = @base64_decode(preg_replace("/^remove_package_(.*)_[xy]*$/","\\1",$name)); + if(isset($this->usedPackages[$id])){ + unset($this->usedPackages[$id]); + } + break; + } - /* Configuration dialog open*/ - if($this->FAIstate != "freeze" && $this->acl_is_writeable("FAIpackage")){ - 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; + /****** + * Configure Pkgs + ******/ + if(!preg_match('/freeze/i', $this->FAIstate) && preg_match("/^configure_package_/",$name)){ + $pkg = @base64_decode(preg_replace("/^configure_package_(.*)_[xy]*$/","\\1",$name)); + + if(isset($this->usedPackages[$pkg])){ + + /* Configuration dialog open*/ + $pkg_config = array(); + if(isset($this->ConfiguredPackages[$pkg])){ + $pkg_config = $this->ConfiguredPackages[$pkg]; } + $this->dialog = new faiPackageConfiguration($this->config, $this->dn,$pkg, $this->FAIdebianRelease , $pkg_config); + $this->is_dialog =true; } + break; } } + /* Abort package selection dialog */ + if(isset($_POST['CancelSubObject'])){ + $this->dialog = false; + $this->is_dialog=false; + } + /* Save Configuration */ if(isset($_POST['SaveObjectConfig'])){ - if($this->FAIstate != "freeze"){ + if(!preg_match("/^freeze/", $this->FAIstate)){ $this->ConfiguredPackages= array_merge($this->ConfiguredPackages,$this->dialog->save()); } $this->dialog = false; @@ -306,9 +392,81 @@ class faiPackage extends plugin /* Display dialog */ if($this->is_dialog){ + $this->dialog->save_object(); return $this->dialog->execute(); } + + /****** + * Display UI / HTML / smarty + ******/ + + /* Create divlist to display a list of all currently used packages + */ + $divlist = new divSelectBox("faiPackages"); + + ksort($this->usedPackages); + if(is_array($this->usedPackages)){ + foreach($this->usedPackages as $usedName => $name){ + + $actions = ""; + + /* Append message if package is configured */ + $configured = " "; + if(isset($this->ConfiguredPackages[$usedName])){ + $configured = ""._("Configured").""; + } + + /* Adapt used name if we're marked for removal */ + $removal = " "; + if (preg_match('/\-$/', $name)){ + $removal = ""._("Package marked for removal").""; + } + + /* Get Version */ + $version = " "; + if(isset($this->list[$usedName]['VERSION'])){ + $version = $this->list[$usedName]['VERSION']; + } + + /* Get description */ + $description = " "; + if(isset($this->list[$usedName]['DESCRIPTION'])){ + $description = base64_decode($this->list[$usedName]['DESCRIPTION']); + } + + if(!preg_match('/^freeze/', $this->FAIstate) && $this->acl_is_writeable("FAIpackage")){ + $actions = ""; + } + + if(isset($this->list[$usedName]['TEMPLATE']) && + !preg_match('/^freeze/', $this->FAIstate) && $this->acl_is_writeable("FAIdebconfInfo")){ + $actions.= " "; + } + if(!preg_match('/^freeze/', $this->FAIstate) && $this->acl_is_writeable("FAIpackage")){ + $actions.= " "; + } + + $field1 = array("string" => $configured." ".$removal,"attach" => "style='width:40px;'"); + $field2 = array("string" => $usedName ,"attach" => "style='width:200px;'"); + $field3 = array("string" => $version); + $field4 = array("string" => $description); + $field5 = array("string" => $actions ,"attach" => "style='width:60px; border-right:0px;'"); + $divlist->AddEntry(array($field1,$field2,$field3,$field4,$field5)); + } + } + + /* Assign variables */ + foreach($this->attributes as $attrs){ + $smarty->assign($attrs,$this->$attrs); + } + $smarty->assign( "FAIinstallMethods", $this->FAIinstallMethods ); + /* Assign section to smarty */ $strsec = ""; foreach($this->FAIdebianSection as $sec){ @@ -319,40 +477,31 @@ class faiPackage extends plugin foreach($tmp['plProvidedAcls'] as $name => $translated){ $smarty->assign($name."ACL",$this->getacl($name,preg_match("/freeze/",$this->FAIstate))); } - - $smarty->assign("releases",$this->releases); + + $smarty->assign("freeze", preg_match("/freeze/",$this->FAIstate)); + $smarty->assign("divlist",$divlist->DrawList()); $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 + + /*! \brief Removes this packageList from the ldap database */ function remove_from_parent() { $ldap = $this->config->get_ldap_link(); $ldap->cd ($this->dn); - - $faifilter = session::get('faifilter'); - $use_dn = preg_replace("/".normalizePreg(FAI::get_release_dn($this->dn))."/i", $faifilter['branch'], $this->dn); - if($faifilter['branch'] == "main"){ - $use_dn = $this->dn; - } - + $release = $this->parent->parent->fai_release; + $use_dn = preg_replace("/".preg_quote(FAI::get_release_dn($this->dn), '/')."/i", $release, $this->dn); FAI::prepare_to_save_FAI_object($use_dn,array(),true); - new log("remove","fai/".get_class($this),$use_dn,$this->attributes); - foreach($this->ConfiguredPackages as $pkgname => $attrs){ foreach($attrs as $name => $attr){ $pkgdn = "FAIvariable=".$name.",".$this->dn; - $use_dn = preg_replace("/".normalizePreg(FAI::get_release_dn($this->dn))."/i", $faifilter['branch'], $pkgdn); - if($faifilter['branch'] == "main"){ - $use_dn = $obj['dn']; - } + $use_dn = preg_replace("/".preg_quote(FAI::get_release_dn($this->dn), '/')."/i", $release, $pkgdn); FAI::prepare_to_save_FAI_object($use_dn,array(),true); } } @@ -360,118 +509,83 @@ class faiPackage extends plugin } - /* Save data to object + /*! \brief Collect all relevant POST vars for this plugin */ function save_object() { - if($this->FAIstate == "freeze") return; + if(preg_match("/^freeze/", $this->FAIstate)) return; plugin::save_object(); } - /* Check supplied data */ + /*! \brief Check given inputs for this package list + @return Array Containing all error messages, or an empty array if no error occured + */ function check() { /* Call common method to give check the hook */ $message= plugin::check(); if(count($this->usedPackages)==0){ - $message[]=_("Please select a least one Package."); + $message[]= _("Please select a least one package!"); } if((empty($this->FAIdebianRelease))||(empty($this->FAIdebianSection))){ - $message[]=_("Please choose a valid combination for your repository setup."); + $message[]=_("Please choose a valid release/section combination for your repository setup!"); } + /* Ensure that we do not overwrite an allready existing entry + */ + if($this->is_new){ + $release = $this->parent->parent->fai_release; + $new_dn= 'cn='.$this->cn.",".get_ou('faiPackageRDN').get_ou('faiBaseRDN').$release; + $res = faiManagement::check_class_name("FAIpackageList",$this->cn,$new_dn); + if(isset($res[$this->cn])){ + $message[] = msgPool::duplicated(_("Name")); + } + } 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"); - } + /*! \brief Reload the list of cached packages. + @return Returns the currently cached list of packages. + */ + function genPkgs($force = false) + { + if(empty($this->FAIdebianRelease)) return; - /* Adapt used name if we're marked for removal */ - $dsc= ""; - if (preg_match('/^-/', $usedName)){ - $dsc= " - "._("Package marked for removal"); - // Generally a bad idea here, because the toggel triggers on -, not on ! - //$usedName= preg_replace('/^-/', '! ', $usedName); - }else{ - $usedName2= $usedName; - } + if(!count($this->buffer) || $force){ + $q = new gosaSupportDaemon(); + $attrs = array("distribution", "package","version", "section", "description", "timestamp","template"); - if(isset($this->list[$usedName][1])){ - $a_ret[$usedName] = $usedName2." [".$this->list[$usedName][1]."]".$c_str.$dsc; - }else{ - $a_ret[$usedName] = $usedName2.$c_str.$dsc; - } - } - } - return($a_ret); - } + $packages = array_keys($this->usedPackages); - 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= CONFIG_DIR."/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; - } + $ret = $q->FAI_get_packages($this->FAIdebianRelease,$attrs,$packages); + if($q->is_error()){ + msg_dialog::display(_("Service infrastructure"),msgPool::siError($q->get_error()),ERROR_DIALOG); + }else{ + foreach($ret as $attr){ + $this->buffer[$attr['PACKAGE']] = $attr; } - fclose($fp); - /* Save our Data, to avoid reading it again */ } - $this->buffer = $a_ret; - ksort($a_ret); - return($a_ret); - }else{ - return $this->buffer; } + return $this->buffer; } - /* Save to LDAP */ + /*! \brief Save packages and their configuration to ldap + */ function save() { /* Assemble release name */ if($this->FAIdebianRelease == "ClearFromCopyPaste"){ - $faifilter = session::get('faifilter'); - $tmp= preg_replace('/,'.normalizePreg(get_ou('faiou')).'.*$/', '', $faifilter['branch']); + + $current_release = $this->parent->parent->fai_release; + $tmp= preg_replace('/,'.preg_quote(get_ou('faiBaseRDN'), '/').'.*$/i', '', $current_release); $tmp= preg_replace('/ou=/', '', $tmp); - $rev= array_reverse(split(',', $tmp)); + $rev= array_reverse(explode(',', $tmp)); $this->FAIdebianRelease= ""; foreach ($rev as $part){ $this->FAIdebianRelease.= "/$part"; @@ -484,7 +598,7 @@ class faiPackage extends plugin $ldap = $this->config->get_ldap_link(); $this->attrs['FAIpackage'] = array(); - foreach($this->usedPackages as $pkg => $obj){ + foreach($this->usedPackages as $pkg){ $this->attrs['FAIpackage'][] = $pkg; } @@ -494,7 +608,6 @@ class faiPackage extends plugin } FAI::prepare_to_save_FAI_object($this->dn,$this->attrs); - show_ldap_error($ldap->get_error(), sprintf(_("Saving of FAI/package list with dn '%s' failed."),$this->dn)); if($this->initially_was_account){ new log("modify","fai/".get_class($this),$this->dn,$this->attributes); @@ -523,17 +636,25 @@ class faiPackage extends plugin $pkgattrs['FAIvariableContent'] = $attr['Value']; $pkgdn = "FAIvariable=".$name.",".$this->dn; - /* Tag object */ - $this->tag_attrs(&$pkgattrs, $pkgdn, $this->gosaUnitTag); + /* Tag object */ + $this->tag_attrs($pkgattrs, $pkgdn, $this->gosaUnitTag); if(in_array($pkgattrs['FAIvariableType'],array("boolean","multiselect","password","select","string","text"))){ - FAI::prepare_to_save_FAI_object($pkgdn,$pkgattrs); + + if($pkgattrs['FAIvariableType'] == "text" && $pkgattrs['FAIvariableContent'] == ""){ + gosa_log("Skipped saving FAIvariable '$name' empty string can't be saved."); + }else{ + FAI::prepare_to_save_FAI_object($pkgdn,$pkgattrs); + } } } } } - /* Return plugin informations for acl handling */ + + /*! \brief Return plugin informations for acl handling + @return Array ACL infos of this plugin. + */ static function plInfo() { return (array( @@ -556,8 +677,9 @@ class faiPackage extends plugin } - - + /*! \brief prepares this plugin to be inserted after it was copied or cut. + @param Array All attributes from the source object. + */ function PrepareForCopyPaste($source) { plugin::PrepareForCopyPaste($source); @@ -629,6 +751,9 @@ class faiPackage extends plugin } + /*! \brief Returns a list of all configured servers with repositories. + @return Array All repository server + */ function getServerInfos() { $ret = array(); @@ -639,9 +764,9 @@ class faiPackage extends plugin if(isset($attrs['FAIrepository'])){ for($i =0 ; $i < $attrs['FAIrepository']['count']; $i++){ $obj = $attrs['FAIrepository'][$i]; - $tmp = split("\|",$obj); + $tmp = explode("|",$obj); if(count($tmp)==4){ - foreach(split(",",$tmp[3]) as $sec){ + foreach(explode(",",$tmp[3]) as $sec){ if(!empty($sec)){ $ret[$tmp[2]][] = $sec; } @@ -654,6 +779,32 @@ class faiPackage extends plugin } + /*! \brief Used for copy & paste. + Returns a HTML input mask, which allows to change the cn of this entry. + @param Array Array containing current status && a HTML template. + */ + function getCopyDialog() + { + $vars = array("cn"); + $smarty = get_smarty(); + $smarty->assign("cn", htmlentities($this->cn)); + $str = $smarty->fetch(get_template_path("paste_generic.tpl",TRUE)); + $ret = array(); + $ret['string'] = $str; + $ret['status'] = ""; + return($ret); + } + + + /*! \brief Used for copy & paste. + Some entries must be renamed to avaoid duplicate entries. + */ + function saveCopyDialog() + { + if(isset($_POST['cn'])){ + $this->cn = get_post('cn'); + } + } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: