diff --git a/gosa-plugins/fai/admin/fai/class_faiPackage.inc b/gosa-plugins/fai/admin/fai/class_faiPackage.inc
index 22c8a036327f14027259b7f153ddcd6d2b85d092..d32f26a64d41e27de24dc2c150bd47363a5deaee 100644 (file)
var $usedPackages = array();
var $buffer = NULL;
var $usedPackages = array();
var $buffer = NULL;
- var $newDialogShown =false;
+ var $newDialogShown = false;
var $FAIstate = "";
var $view_logged = FALSE;
var $base;
var $FAIpackage ;
var $FAIstate = "";
var $view_logged = FALSE;
var $base;
var $FAIpackage ;
+ var $packageSelect ;
+
var $FAIinstallMethods = array( "install", "ninstall", "remove",
"dselect-upgrade", "taskinst", "taskrm",
"hold", "clean", "aptitude", "aptitude-r",
var $FAIinstallMethods = array( "install", "ninstall", "remove",
"dselect-upgrade", "taskinst", "taskrm",
"hold", "clean", "aptitude", "aptitude-r",
/* Assemble release name */
$release = $this->parent->parent->fai_release;
/* Assemble release name */
$release = $this->parent->parent->fai_release;
- $tmp= preg_replace('/[,]*'.normalizePreg(get_ou('faiou')).'.*$/', '', $release);
+ $tmp= preg_replace('/[,]*'.preg_quote(get_ou('faiBaseRDN'), '/').'.*$/i', '', $release);
$tmp= preg_replace('/ou=/', '', $tmp);
$tmp= preg_replace('/ou=/', '', $tmp);
- $rev= array_reverse(split(',', $tmp));
+ $rev= array_reverse(explode(',', $tmp));
$this->FAIdebianRelease= "/";
foreach ($rev as $part){
$this->FAIdebianRelease.= "/$part";
$this->FAIdebianRelease= "/";
foreach ($rev as $part){
$this->FAIdebianRelease.= "/$part";
* Add
******/
* Add
******/
- /* + was pressed to open the package dialog */
+ 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);
+ }
+
+
+ // If we have a complete list of valid packages, add them
+ if(count($valid_packages)){
+
+ foreach($valid_packages as $key => $value){
+ if(array_key_exists($value,$this->usedPackages)) {
+ unset($valid_packages[$key]);
+ }
+ }
+
+ // 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);
+ }
+ }
+ }
+
+ // 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)){
if(isset($_POST['Addpkg']) && $this->acl_is_writeable("FAIpackage") && !preg_match("/freeze/",$this->FAIstate)){
- $this->dialog = new faiPackageEntry($this->config, $this->FAIdebianRelease,$this->usedPackages);
- $this->is_dialog =true;
+ $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;
}
}
+ // 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];
+ }
+ $this->usedPackages[$item['PACKAGE']] = $item['PACKAGE'];
+ }
+
+ 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();
+ }
+
+
/* Check image Posts
*/
foreach($_POST as $name => $value){
/* Check image Posts
*/
foreach($_POST as $name => $value){
$this->is_dialog=false;
}
$this->is_dialog=false;
}
- /* attach new packages */
- if(isset($_POST['SaveSubObject'])) {
- if(!preg_match("/freeze/i", $this->FAIstate)){
- $this->dialog->save_object();
- if(count($this->dialog->check())){
- foreach($this->dialog->check() as $msgs){
- msg_dialog::display(_("Error"), $msgs, ERROR_DIALOG);
- }
- }else{
- $use = $this->dialog->save();
- $this->usedPackages = $use;
- $this->dialog = false;
- $this->is_dialog=false;
- ksort($this->usedPackages);
-
- /* Generate package list */
- $this->list= $this->genPkgs(TRUE);
- }
- }else{
- $this->dialog = false;
- $this->is_dialog=false;
- }
- }
-
/* Save Configuration */
if(isset($_POST['SaveObjectConfig'])){
if(!preg_match("/^freeze/", $this->FAIstate)){
/* Save Configuration */
if(isset($_POST['SaveObjectConfig'])){
if(!preg_match("/^freeze/", $this->FAIstate)){
/* Append message if package is configured */
$configured = "<img src='images/empty.png' alt=' ' class='center'>";
if(isset($this->ConfiguredPackages[$usedName])){
/* Append message if package is configured */
$configured = "<img src='images/empty.png' alt=' ' class='center'>";
if(isset($this->ConfiguredPackages[$usedName])){
- $configured = "<img src='images/package_configure.png' alt='"._("Configured")."'
+ $configured = "<img src='plugins/fai/images/package_configure.png' alt='"._("Configured")."'
title='"._("Configured")."' class='center'>";
}
/* Adapt used name if we're marked for removal */
$removal = "<img src='images/empty.png' alt=' ' class='center'>";
if (preg_match('/\-$/', $name)){
title='"._("Configured")."' class='center'>";
}
/* Adapt used name if we're marked for removal */
$removal = "<img src='images/empty.png' alt=' ' class='center'>";
if (preg_match('/\-$/', $name)){
- $removal = "<img src='images/negate.png' alt='"._("Package marked for removal")."'
+ $removal = "<img src='plugins/fai/images/removal_mark.png' alt='"._("Package marked for removal")."'
title='"._("Package marked for removal")."' class='center'>";
}
title='"._("Package marked for removal")."' class='center'>";
}
if(!preg_match('/^freeze/', $this->FAIstate) && $this->acl_is_writeable("FAIpackage")){
$actions = "<input type='image' class='center' title='"._("Mark package for removal")."'
if(!preg_match('/^freeze/', $this->FAIstate) && $this->acl_is_writeable("FAIpackage")){
$actions = "<input type='image' class='center' title='"._("Mark package for removal")."'
- src='images/negate.png' name='removal_package_".base64_encode($usedName)."' >";
+ src='plugins/fai/images/removal_mark.png' name='removal_package_".base64_encode($usedName)."' >";
}
}
- if(!preg_match('/^freeze/', $this->FAIstate) && $this->acl_is_writeable("FAIdebconfInfo")){
+
+ if(isset($this->list[$usedName]['TEMPLATE']) &&
+ !preg_match('/^freeze/', $this->FAIstate) && $this->acl_is_writeable("FAIdebconfInfo")){
$actions.= " <input type='image' class='center' title='"._("Configure this package")."'
$actions.= " <input type='image' class='center' title='"._("Configure this package")."'
- src='images/package_configure.png' name='configure_package_".base64_encode($usedName)."' >";
+ src='plugins/fai/images/package_configure.png' name='configure_package_".base64_encode($usedName)."' >";
}
if(!preg_match('/^freeze/', $this->FAIstate) && $this->acl_is_writeable("FAIpackage")){
$actions.= " <input type='image' class='center' title='"._("Remove this package")."'
}
if(!preg_match('/^freeze/', $this->FAIstate) && $this->acl_is_writeable("FAIpackage")){
$actions.= " <input type='image' class='center' title='"._("Remove this package")."'
$ldap = $this->config->get_ldap_link();
$ldap->cd ($this->dn);
$release = $this->parent->parent->fai_release;
$ldap = $this->config->get_ldap_link();
$ldap->cd ($this->dn);
$release = $this->parent->parent->fai_release;
- $use_dn = preg_replace("/".normalizePreg(FAI::get_release_dn($this->dn))."/i", $release, $this->dn);
+ $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;
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", $release, $pkgdn);
+ $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);
}
}
FAI::prepare_to_save_FAI_object($use_dn,array(),true);
}
}
*/
if($this->is_new){
$release = $this->parent->parent->fai_release;
*/
if($this->is_new){
$release = $this->parent->parent->fai_release;
- $new_dn= 'cn='.$this->cn.",".get_ou('faipackageou').get_ou('faiou').$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"));
$res = faiManagement::check_class_name("FAIpackageList",$this->cn,$new_dn);
if(isset($res[$this->cn])){
$message[] = msgPool::duplicated(_("Name"));
*/
function genPkgs($force = false)
{
*/
function genPkgs($force = false)
{
+ if(empty($this->FAIdebianRelease)) return;
+
if(!count($this->buffer) || $force){
$q = new gosaSupportDaemon();
if(!count($this->buffer) || $force){
$q = new gosaSupportDaemon();
- $attrs = array("distribution", "package","version", "section", "description", "timestamp");
+ $attrs = array("distribution", "package","version", "section", "description", "timestamp","template");
$packages = array_keys($this->usedPackages);
$packages = array_keys($this->usedPackages);
if($this->FAIdebianRelease == "ClearFromCopyPaste"){
$current_release = $this->parent->parent->fai_release;
if($this->FAIdebianRelease == "ClearFromCopyPaste"){
$current_release = $this->parent->parent->fai_release;
- $tmp= preg_replace('/,'.normalizePreg(get_ou('faiou')).'.*$/', '', $current_release);
+ $tmp= preg_replace('/,'.preg_quote(get_ou('faiBaseRDN'), '/').'.*$/i', '', $current_release);
$tmp= preg_replace('/ou=/', '', $tmp);
$tmp= preg_replace('/ou=/', '', $tmp);
- $rev= array_reverse(split(',', $tmp));
+ $rev= array_reverse(explode(',', $tmp));
$this->FAIdebianRelease= "";
foreach ($rev as $part){
$this->FAIdebianRelease.= "/$part";
$this->FAIdebianRelease= "";
foreach ($rev as $part){
$this->FAIdebianRelease.= "/$part";
if(isset($attrs['FAIrepository'])){
for($i =0 ; $i < $attrs['FAIrepository']['count']; $i++){
$obj = $attrs['FAIrepository'][$i];
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){
if(count($tmp)==4){
- foreach(split(",",$tmp[3]) as $sec){
+ foreach(explode(",",$tmp[3]) as $sec){
if(!empty($sec)){
$ret[$tmp[2]][] = $sec;
}
if(!empty($sec)){
$ret[$tmp[2]][] = $sec;
}