Code

Updated strings
[gosa.git] / plugins / admin / groups / class_groupGeneric.inc
index 92f87d265ef5a3d06a1f6cd2bd2481b38d367adf..f25a036f113d683530f88d3b50aa3349dc4d83cf 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 class group extends plugin
 {
   /* CLI vars */
@@ -44,17 +45,10 @@ class group extends plugin
   var $attributes= array("cn", "description", "gidNumber","memberUid","sambaGroupType","sambaSID");
   var $objectclasses= array("top", "posixGroup");
 
-  function group ($config, $dn= NULL)
+  function group ($config, $dn= NULL, $parent= NULL)
   {
-    plugin::plugin ($config, $dn);
+    plugin::plugin ($config, $dn, $parent);
 
-    /* remove Release Tag if we have release management enabled 
-     */
-    $tmp = search_config($config->data,"faiManagement","CLASS");
-    if(!empty($tmp)){
-      $this->description = preg_replace("/\(.*\)$/","",$this->description);
-    }
-  
     /* Load attributes depending on the samba version */
     $this->samba3= ($config->current['SAMBAVERSION'] == 3);
     $this->orig_dn= $dn;
@@ -153,19 +147,16 @@ class group extends plugin
 
     register_global('gufilter',$gufilter);
   
-      /* Bases / Departments */
-      
-    if(isset($_SESSION['CurrentMainBase'])){
-      $this->base = $_SESSION['CurrentMainBase'];
-    }else{
-      if ($this->dn == "new"){
+    if ($this->dn == "new"){
+      if(isset($_SESSION['CurrentMainBase'])){
+        $this->base= $_SESSION['CurrentMainBase'];
+      }else{
         $ui= get_userinfo();
         $this->base= dn2base($ui->dn);
-      } else {
-        $this->base= preg_replace ("/^[^,]+,[^,]+,/", "", $this->dn);
       }
+    } else {
+      $this->base= preg_replace ("/^[^,]+,[^,]+,/", "", $this->dn);
     }
-    
 
     /* This is always an account */
     $this->is_account= TRUE;
@@ -288,7 +279,6 @@ class group extends plugin
         }
         $gufilter['regex']= $s;
       }
-      $regex= preg_replace('/[*]/', ".*", $gufilter['regex']);
       register_global("gufilter", $gufilter);
       $this->reload();
 
@@ -302,16 +292,7 @@ class group extends plugin
         $smarty->assign("$type", $gufilter[$type]);
       }
       $smarty->assign("hint", print_sizelimit_warning());
-
-      $users= array();
-      foreach ($this->allusers as $key => $value){
-        if (!array_key_exists($key, $this->members)){
-          if (preg_match("/^$regex/i", $key)){
-            $users[$key]= $value;
-          }
-        }
-      }
-      $smarty->assign("users", $users);
+      $smarty->assign("users", $this->displayUsers);
       $smarty->assign("apply", apply_filter());
       $display= $smarty->fetch (get_template_path('group_objects.tpl', TRUE, dirname(__FILE__)));
       return ($display);
@@ -419,75 +400,101 @@ class group extends plugin
   /* Reload data */
   function reload()
   {
-    /* Generate userlists */
-    $this->last_sorting= "invalid";
-    $this->users= array();
+    /* Fix regex string */
+    $gufilter = get_global("gufilter");
+    $regex    = normalizeLdap($gufilter['regex']);
+    $MaxUser  = $this->OnlyShowFirstEntries;
+
+    /* Prepare ldap link */
     $ldap= $this->config->get_ldap_link();
+    $ldap->cd($gufilter['dselect']);
 
-    $MaxUser = $this->OnlyShowFirstEntries;
 
-    $gufilter= get_global("gufilter");
-    $ldap->cd ($this->config->current['BASE']);
+    /* Resolve still unresolved memberuids to fill the list with sn/giveName attributes 
+        (Store gathered sn/givenName informations in $this->allusers too, 
+         to be prepared when adding/deleting users)
+     */    
+    $filter = "";
+    foreach ($this->memberUid as $value){
+      if(!isset($this->members[$value])){
+        $filter .= "(uid=".normalizeLdap($value).")";
+      }
+    }
+    if(!empty($filter)){    
+      $ldap->cd($this->config->current['BASE']);
+      $ldap->search("(&(objectClass=gosaAccount)(!(objectClass=gosaUserTemplate))(|".$filter."))",array("uid","sn","givenName"));
+      while($attrs = $ldap->fetch()){
+        $this->members[$attrs['uid'][0]] = $this->createResultName($attrs);
+        $this->allusers[$attrs['uid'][0]]= $this->createResultName($attrs);
+      } 
+    }
+  
+    /* check if all uids are resolved */
+    foreach ($this->memberUid as $value){
+      if(!isset($this->members[$value])){
+        $this->members[$value] =  _("! unknown id")." [".$value."]"; 
+      }
+    }  
+
+    /* Create display list of users matching regex & filter 
+     */
+    $this->displayUsers = array();
+
+    /* Set tag attribute if we've tagging activated */
+    $tag= "";
+    $ui= get_userinfo();
+    if ($ui->gosaUnitTag != "" && isset($this->config->current['STRICT_UNITS']) &&
+        preg_match('/TRUE/i', $this->config->current['STRICT_UNITS'])){
+      $tag= "(gosaUnitTag=".$ui->gosaUnitTag.")";
+    }
+
+    $filter = "(&(objectClass=gosaAccount)$tag(!(objectClass=gosaUserTemplate))(!(uid=*$))(|(uid=".$regex.")(sn=".$regex.")(givenName=".$regex.")))";
+
+    /* Search in current tree or within subtrees depending on the checkbox from filter section */
     if($gufilter['SubSearchGroup']){
-      $ldap->cd ($gufilter['dselect']);
-      $ldap->search("(&(objectClass=gosaAccount)(!(objectClass=gosaUserTemplate))(!(uid=*$)))",array("uid", "sn","givenName"));
+      $ldap->search($filter, array("uid", "sn","givenName"));
     }else{
-      $ldap->cd (get_people_ou().$gufilter['dselect']);
-      $ldap->ls ("(&(objectClass=gosaAccount)(!(objectClass=gosaUserTemplate))(!(uid=*$)))",get_people_ou().$gufilter['dselect'],array("uid", "sn", "givenName"));
+      $ldap->ls ($filter, get_people_ou().$gufilter['dselect'],array("uid", "sn", "givenName"));
     }
-    $this->allusers= array();
+    $i = 0;
     
-    $i = 0 ;
-    while (($attrs= $ldap->fetch()) && ($i < $MaxUser)){
+    /* Fetch all users and skip already used users */
+    while($attrs = $ldap->fetch()){
+      if(in_array($attrs['uid'][0], $this->memberUid)) {
+        continue;
+      }
       $i ++;
-      if (isset($attrs["givenName"][0]) && isset($attrs["sn"][0])){
-        $this->allusers[$attrs["uid"][0]]= $attrs["sn"][0].", ".
-          $attrs["givenName"][0]." [".$attrs["uid"][0]."]";
-      } else {
-        $this->allusers[$attrs["uid"][0]]= $attrs['uid'][0];
+      if($i > $MaxUser) {
+        break;
       }
+      $this->allusers[$attrs['uid'][0]]     = $this->createResultName($attrs);
+      $this->displayUsers[$attrs['uid'][0]] = $this->createResultName($attrs);
     }
   
+    /* If more than max users are found, display a message to warn the user */
     if(($i == $MaxUser)){
       print_red(sprintf(_("Your search method returned more than '%s' users, only '%s' users are shown.") , $MaxUser,$MaxUser));
     }
     
-    natcasesort ($this->allusers);
-    reset ($this->allusers);
-
-    /* Fill memberlist */
-    $this->members= array();
-    foreach ($this->memberUid as $value){
-      if (isset($this->allusers[$value])){
-        $this->members[$value]= $this->allusers[$value];
-      } else {
-        $ldap->cd($this->config->current['BASE']);
-        $ldap->search("(&(objectClass=gosaAccount)(uid=".$value."))",array("uid", "sn","givenName"));
-        $attrs = $ldap->fetch();
-    
-        if(!$attrs){
-          $this->members[$value] = _("! unknown id")." [".$value."]"; 
-        }else{
-    
-          if (isset($attrs["givenName"][0]) && isset($attrs["sn"][0])){
-            $this->allusers[$attrs["uid"][0]]= $attrs["sn"][0].", ".
-              $attrs["givenName"][0]." [".$attrs["uid"][0]."]";
-          } else {
-            $this->allusers[$attrs["uid"][0]]= $attrs['uid'][0];
-          }
-          if (isset($this->allusers[$value])){
-            $this->members[$value]= $this->allusers[$value];
-          } else {
-            $this->members[$value] = "[".$value."]";
-          }
-        }
-      }
-    }
-    asort($this->members);
+    /* Sort lists */
+    natcasesort($this->members);
     reset($this->members);
+    natcasesort ($this->displayUsers);
+    reset ($this->displayUsers);
   }
 
 
+  /* Create display name, this was used so often that it is excluded into a seperate function */
+  function createResultName($attrs)
+  {
+    if (isset($attrs["givenName"][0]) && isset($attrs["sn"][0])){
+      $ret =  $attrs["sn"][0].", ".$attrs["givenName"][0]." [".$attrs["uid"][0]."]";
+    } else {
+      $ret= $attrs['uid'][0];
+    }
+    return($ret);
+  }
+
 
   function remove_from_parent()
   {
@@ -495,7 +502,7 @@ class group extends plugin
 
     $ldap= $this->config->get_ldap_link();
     $ldap->rmdir($this->dn);
-    show_ldap_error($ldap->get_error());
+    show_ldap_error($ldap->get_error(), _("Removing group failed"));
 
     /* Delete references to object groups */
     $ldap->cd ($this->config->current['BASE']);
@@ -578,24 +585,6 @@ class group extends plugin
       }
     }
   
-    /* If release management is enabled .... 
-        Append release name to description tag ..
-       #FIXME release name within description is a very bad solution, use ldap attribute instead
-     */
-    $tmp = search_config($this->config->data,"faiManagement","CLASS");
-    if(!empty($tmp)){
-      if(isset($this->parent)){
-        if(isset($this->parent->by_object['appgroup'])){
-          $baseObj = $this->parent->by_object['appgroup'];
-          if($baseObj->is_account){
-            if(isset($baseObj->Release)){
-              $this->description .= " (".trim($baseObj->Release).")";
-            }
-          }
-        }
-      }
-    }
-
     plugin::save(); 
 
     /* Remove objectClass for samba/phone support */
@@ -685,7 +674,7 @@ class group extends plugin
 
     /* Save data. Using 'modify' implies that the entry is already present, use 'add' for
        new entries. So do a check first... */
-    $ldap->cat ($this->dn);
+    $ldap->cat ($this->dn, array('dn'));
     if ($ldap->fetch()){
       /* Modify needs array() to remove values :-( */
       if (!count ($this->memberUid)){
@@ -710,7 +699,7 @@ class group extends plugin
     $ldap->$mode($this->attrs);
 
     $ret= 0;
-    if (show_ldap_error($ldap->get_error())){
+    if (show_ldap_error($ldap->get_error(), _("Saving group failed"))){
       $ret= 1;
     }
 
@@ -759,7 +748,7 @@ class group extends plugin
       $ldap= $this->config->get_ldap_link();
       if(($this->cn  != $this->orig_cn) || ($this->orig_dn == "new")){
         $ldap->cd("ou=groups,".$this->base);
-        $ldap->ls("(&(|(objectClass=gosaGroupOfNames)(objectClass=posixGroup))(cn=$this->cn))","ou=groups,".$this->base,array("cn"));
+        $ldap->ls("(&(|(objectClass=gosaGroupOfNames)(objectClass=posixGroup))(cn=$this->cn))",get_groups_ou().$this->base,array("cn"));
         if ($ldap->count() != 0){
           $message[]= _("Value specified as 'Name' is already used.");
         }