Code

Fixed problem with moving groups that have a mail account.
[gosa.git] / plugins / admin / groups / class_groupApplication.inc
index f789dc9f70a35be5713b1f70a4fcf0df2b14e369..113894274e74ade2e1150f00eab33960b22180b3 100644 (file)
@@ -24,7 +24,7 @@ class appgroup extends plugin
   var $curCatDepth              =0;         //
 
   /* attribute list for save action */
-  var $attributes               = array("gosaMemberApplication");
+  var $attributes               = array("gosaMemberApplication","gosaApplicationParameter");
   var $objectclasses            = array("gosaApplicationGroup");
 
   var $FAIrelease               = "/";
@@ -36,9 +36,10 @@ class appgroup extends plugin
   var $AllAppsForReleaseParameter = array();
 
   var $CopyPasteVars            = array("Categories");
+  var $gosaApplicationParameter ;
 
 
-  function appgroup ($config, $dn= NULL)
+  function appgroup ($config, $dn= NULL, $parent= NULL)
   {
    
     /* prepare group app for release management */ 
@@ -49,7 +50,7 @@ class appgroup extends plugin
       $this->attributes[] =  "FAIrelease";
     }
 
-    plugin::plugin ($config, $dn);
+    plugin::plugin ($config, $dn, $parent);
 
     /* In some case of old applikations with old release tag saving, we 
         must reassign is_account state.
@@ -58,7 +59,7 @@ class appgroup extends plugin
   
       /* Release management is activated && this is a valid group app account,
           but no release class was found, so activate is_account flag  */
-      if(( in_array("gosaApplicationGroup",$this->attrs['objectClass'])) && 
+      if($dn != "new" && ( in_array("gosaApplicationGroup",$this->attrs['objectClass'])) && 
          (!in_array("FAIreleaseTag",$this->attrs['objectClass']))){
         $this->is_account =true;
       }
@@ -370,7 +371,6 @@ class appgroup extends plugin
     /* Call parent execute */
     plugin::execute();
 
-
     if((isset($_GET['act']))&&($_GET['act']=="depopen")){
       $dep = base64_decode($_GET['depid']);  
       if(isset($this->config->idepartments[$dep])){
@@ -454,9 +454,15 @@ class appgroup extends plugin
 
         foreach($this->gosaMemberApplication as $key =>  $cat){
           foreach($cat as $key2 => $app){
+            
             if($app['App'] == $val){
               unset($this->gosaMemberApplication[$key][$key2]);
               if(isset($this->used_apps[$val])){
+                foreach($this->getParameters($val) as $para){
+                  if(isset($this->appoption[$para])){
+                    unset($this->appoption[$para]);
+                  }
+                }
                 unset($this->used_apps[$val]);
               }
             }
@@ -503,11 +509,10 @@ class appgroup extends plugin
               $found = $attrs['dn'];
             }
           }
-          $ldap->cat($found);
+          $ldap->cat($found, array("gosaApplicationParameter"));
         }else{
           $ldap->cd($this->config->current['BASE']);
           $ldap->search("(&(objectClass=gosaApplication)(cn=$appname))",array("gosaApplicationParameter"));
-
         }
 
 
@@ -605,22 +610,11 @@ class appgroup extends plugin
 
     $div->SetHeight(300);
 
-    /* NEW LIST MANAGMENT
-     * We also need to search for the departments
-     * So we are able to navigate like in konquerer
-     */
-
-    //FIXME: Why do we not use get_list here? It's the same code all over the time...
-    $ldap = $this->config->get_ldap_link();
-    $ldap->cd($this->curbase) ;
-    $ldap->ls("(objectClass=gosaDepartment)"); 
-    $departments= array();
-    $tmp = array();
-    while ($value = $ldap->fetch()){
-      $tmp[strtolower($value['dn']).$value['dn']]=$value;
-    }
-    ksort($tmp);
-    foreach($tmp as $value){
+    /* get departments */  
+    $ui = get_userinfo();
+    $departments = array();
+    $res = get_list("(objectClass=gosaDepartment)",$ui->subtreeACL,$this->curbase,array("description","cn","ou"),GL_SIZELIMIT);
+    foreach($res as $value){
       $fdn= @LDAP::fix($value['dn']);
       if($value["description"][0]!=".."){
         $departments[$value['dn']]= convert_department_dn($fdn)." - [".$value["description"][0]."]";
@@ -629,9 +623,6 @@ class appgroup extends plugin
       }
     }
 
-    /* END NEW LIST MANAGMENT
-     */
-
     $linkopen = "<a href='?plug=".$_GET['plug']."&amp;act=depopen&amp;depid=%s'>%s</a>";
     $linkadd  = "<a href='?plug=".$_GET['plug']."&amp;act=add&amp;id=%s'>%s</a>";
 
@@ -795,10 +786,10 @@ class appgroup extends plugin
 
   function getReleases()
   {
-    $dn   = "ou=apps,".$this->config->current['BASE'];
+    $dn   = $this->config->current['BASE'];
     $ldap = $this->config->get_ldap_link();
     $ldap->cd($dn);
-    $ldap->search("objectClass=organizationalUnit",array("ou"));
+    $ldap->search("(&(objectClass=organizationalUnit)(objectClass=FAIbranch))",array("ou"));
     $ret =array();
     while($attrs = $ldap->fetch()){
       if(preg_match("/ou=apps,/",$attrs['dn'])){
@@ -819,6 +810,12 @@ class appgroup extends plugin
         $ret[$attrs['dn']] = $name;
       }
     }
+
+    /* Set releases to / id nor presenet */
+    if (!count($ret)){
+      $ret['/']= '/';
+    }
+
     return($ret);
   }
 
@@ -832,14 +829,13 @@ class appgroup extends plugin
   {
     plugin::remove_from_parent();
 
-    $this->attrs["gosaMemberApplication"]= array();
-
     $ldap= $this->config->get_ldap_link();
     $ldap->cd($this->dn);
     $this->cleanup();
-$ldap->modify ($this->attrs); 
+    
+    $ldap->modify ($this->attrs); 
 
-    show_ldap_error($ldap->get_error());
+    show_ldap_error($ldap->get_error(), _("Removing application information failed"));
 
     /* Optionally execute a command after we're done */
     $this->handle_post_events("remove");
@@ -854,6 +850,7 @@ $ldap->modify ($this->attrs);
     /* Copy members */
     $this->Categories[""]=""; 
     $this->attrs["gosaMemberApplication"]= array();
+    $this->attrs["gosaApplicationParameter"]= array();
     foreach($this->Categories as $name => $cats){
       $i =0;
       if(isset($this->gosaMemberApplication[$name])){
@@ -883,7 +880,7 @@ $ldap->modify ($this->attrs);
     $this->cleanup();
     $ldap->modify ($this->attrs); 
 
-    show_ldap_error($ldap->get_error());
+    show_ldap_error($ldap->get_error(), _("Saving application information failed"));
 
     /* Optionally execute a command after we're done */
     if ($this->initially_was_account == $this->is_account){
@@ -913,19 +910,20 @@ $ldap->modify ($this->attrs);
     /* Special handling for release managed apps 
      */
     $tmp = search_config($this->config->data,"faiManagement","CLASS");
-    if(!empty($tmp)){
+    if(!empty($tmp) && count($this->Releases)){
       $this->enableReleaseManagement = true;
 
       $tmp = array_flip($this->Releases);
       if(isset($tmp[$this->FAIrelease])){
         $base =  $tmp[$this->FAIrelease];
       }else{
+        $old_r =  $this->FAIrelease;
         $k = key($tmp);
         $r = $tmp[$k];
         $this->FAIrelease = $k;
         $base = $r; 
     
-        print_red(sprintf(_("Can't resolve the release name '%s', setting release name to '%s'. Possibly the objects base has changed."),$this->FAIrelease,$k));
+        print_red(sprintf(_("Can't resolve the release name '%s', setting release name to '%s'. Possibly the objects base has changed."),$old_r,$k));
       }
 
       $base = preg_replace("/ou=apps,.*$/","ou=apps,".$this->curbase,$base);
@@ -1013,6 +1011,27 @@ $ldap->modify ($this->attrs);
     $this->is_modified= TRUE;
   }
 
+  function getParameters($app)
+  {
+    $tmp = $this->getReleases();
+    $ret = array();
+    if(in_array($this->FAIrelease,$tmp)){
+      $tmp2 = array_flip($tmp);
+      $base = $tmp2[$this->FAIrelease];
+      $ldap = $this->config->get_ldap_link();
+      $ldap->cd($this->config->current['BASE']);
+      $ldap->search("(&(objectClass=gosaApplication)(cn=".$app.")(gosaApplicationParameter=*))",array("gosaApplicationParameter"));
+      if($ldap->count()){
+        $attrs = $ldap->fetch();
+        for($i = 0 ; $i < $attrs['gosaApplicationParameter']['count'] ; $i ++ ){
+          $name = preg_replace("/:.*$/","",$attrs['gosaApplicationParameter'][$i]);
+          $ret[$name] = $name;
+        } 
+      }
+    }
+    return($ret);
+  }
+
   function GetSubdirs($dir)
   {
     $ret = array();