X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fgroups%2Fclass_groupGeneric.inc;h=f25a036f113d683530f88d3b50aa3349dc4d83cf;hb=1d1cd0cb530ce119ec3d8c26183da6795dff7ba2;hp=92f87d265ef5a3d06a1f6cd2bd2481b38d367adf;hpb=f4e118a3fa0588aaad3c46c4a5de742e34e90826;p=gosa.git diff --git a/plugins/admin/groups/class_groupGeneric.inc b/plugins/admin/groups/class_groupGeneric.inc index 92f87d265..f25a036f1 100644 --- a/plugins/admin/groups/class_groupGeneric.inc +++ b/plugins/admin/groups/class_groupGeneric.inc @@ -1,4 +1,5 @@ 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."); }