From: hickert Date: Wed, 10 May 2006 06:56:22 +0000 (+0000) Subject: Reworked list management for groups X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=085f720b1543c1735bed00f5974007d13d0f92b4;p=gosa.git Reworked list management for groups git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@3247 594d385d-05f5-0310-b6e9-bd551577e9d8 --- diff --git a/plugins/admin/groups/class_divListGroup.inc b/plugins/admin/groups/class_divListGroup.inc index 501c9a531..fa41f7612 100644 --- a/plugins/admin/groups/class_divListGroup.inc +++ b/plugins/admin/groups/class_divListGroup.inc @@ -18,6 +18,7 @@ class divListGroup extends MultiSelectWindow var $ShowMailGroups = true; var $ShowFunctionalGroups = true; + /* Subsearch checkbox */ var $SubSearch = false; var $parent ; diff --git a/plugins/admin/groups/class_groupManagement.inc b/plugins/admin/groups/class_groupManagement.inc index a48df89c1..f1c1f14d1 100644 --- a/plugins/admin/groups/class_groupManagement.inc +++ b/plugins/admin/groups/class_groupManagement.inc @@ -24,7 +24,6 @@ class groupManagement extends plugin /* Definitions */ var $plHeadline= "Groups"; var $plDescription= "This does something"; - var $departments = array(); /* Dialog attributes */ var $grouptab= NULL; @@ -33,6 +32,9 @@ class groupManagement extends plugin var $acl= ""; var $CopyPasteHandler = NULL; + var $DivListGroup = NULL; + + var $ShowPrimaryCheckBox = false; function groupManagement ($config, $ui) { @@ -40,27 +42,21 @@ class groupManagement extends plugin $this->config= $config; $this->ui= $ui; + /* Copy & Paste enabled ?*/ if((isset($this->config->data['MAIN']['ENABLECOPYPASTE']))&&(preg_match("/true/i",$this->config->data['MAIN']['ENABLECOPYPASTE']))){ $this->CopyPasteHandler = new CopyPasteHandler($this->config); } - /* Get global filter config */ - if (!is_global("groupfilter")){ - $base= get_base_from_people($ui->dn); - $groupfilter= array("primarygroups" => "checked", - "mailgroups" => "checked", - "sambagroups" => "checked", - "appgroups" => "checked", - "functionalgroups" => "checked", - "guser" => "*", - "subsearch" => "", - "regex" => "*"); - register_global("groupfilter", $groupfilter); - } - if(!isset($_SESSION['CurrentMainBase'])){ - $base = get_base_from_people($ui->dn); - $_SESSION['CurrentMainBase'] = $base; + /* Detect if we have to display the primary group checkbox */ + if (isset($this->config->data['MAIN']['NOPRIMARYGROUP'])){ + $this->ShowPrimaryCheckBox = false; + } else { + $this->ShowPrimaryCheckBox = true; } + + /* Create dialog object */ + $this->DivListGroup = new divListGroup($this->config,$this); + $this->DivListGroup->DisableCheckBox("ShowPrimaryGroups",$this->ShowPrimaryCheckBox); } function execute() @@ -68,44 +64,13 @@ class groupManagement extends plugin /* Call parent execute */ plugin::execute(); + /* Store these posts if the current object is locked (used by somebody else)*/ $_SESSION['LOCK_VARS_TO_USE'] = array("/^act$/","/^id$/","/^group_edit_/","/^group_del_/"); /* Save data */ - $groupfilter= get_global("groupfilter"); $s_action = ""; $s_entry = ""; - if (!isset($this->grouptab)){ - foreach( array( "guser", "regex") as $type){ - if (isset($_POST[$type])){ - $groupfilter[$type]= $_POST[$type]; - } - } - if(isset($_POST['CurrentMainBase'])){ - $_SESSION['CurrentMainBase'] = $_POST['CurrentMainBase']; - } - if (isset($_POST['regex'])){ - foreach( array("primarygroups", "sambagroups", "mailgroups", "appgroups", - "functionalgroups", "subsearch") as $type){ - - if (isset($_POST[$type])) { - $groupfilter[$type]= "checked"; - } else { - $groupfilter[$type]= ""; - } - } - } - if (isset($_GET['search'])){ - $s= mb_substr($_GET['search'], 0, 1, "UTF8")."*"; - if ($s == "**"){ - $s= "*"; - } - $groupfilter['regex']= $s; - } - register_global("groupfilter", $groupfilter); - } - - /* Test Posts */ foreach($_POST as $key => $val){ // Post for delete @@ -117,8 +82,6 @@ class groupManagement extends plugin $s_action="edit"; $s_entry = preg_replace("/group_".$s_action."_/i","",$key); // Post for new - }elseif(preg_match("/^dep_back.*/i",$key)){ - $s_action="back"; }elseif(preg_match("/^group_new.*/",$key)){ $s_action="new"; }elseif(preg_match("/^dep_home.*/i",$key)){ @@ -128,8 +91,6 @@ class groupManagement extends plugin }elseif(preg_match("/^group_chgpw.*/i",$key)){ $s_action="change_pw"; $s_entry = preg_replace("/group_chgpw_/i","",$key); - }elseif(preg_match("/^dep_root.*/i",$key)){ - $s_action="root"; }elseif(preg_match("/_group_edit_/",$key)){ $type = preg_replace("/_group_edit_.*$/","",$key); $s_action="edit"; @@ -147,58 +108,17 @@ class groupManagement extends plugin } $s_entry = preg_replace("/_.$/","",$s_entry); - /* Start for New List Managment */ - if(isset($_GET['act'])&&($_GET['act']=="dep_open")){ - $s_action="open"; - $s_entry = base64_decode($_GET['dep_id']); - $_SESSION['CurrentMainBase']= "".$this->config->departments[trim($s_entry)]; - } - - // Edit if - if((isset($_GET['act']))&&($_GET['act']=="edit_entry")){ - $s_action ="edit"; - $s_entry = $_GET['id']; - } - - /* Department changed? */ - if(isset($_POST['CurrentMainBase']) && $_POST['CurrentMainBase']){ - $_SESSION['CurrentMainBase']= $_POST['CurrentMainBase']; - } - - /* Homebutton is posted */ - if($s_action=="home"){ - //FIXME: This will not work if we've no subdirs (like i.e. ou=people)? See - // class_userManagement.inc for a fix. - $_SESSION['CurrentMainBase']= (preg_replace("/^[^,]+,/","",$this->ui->dn)); - $_SESSION['CurrentMainBase']= (preg_replace("/^[^,]+,/","",$_SESSION['CurrentMainBase'])); - } - - if($s_action=="root"){ - $_SESSION['CurrentMainBase']=($this->config->current['BASE']); + /* Check for posted gets */ + if((isset($_GET['act'])) && ($_GET['act'] == "edit_entry")){ + $s_entry = $_GET['id']; + $s_action = "edit"; } - /* If Backbutton is Posted */ - if($s_action == "back"){ - $base_back= preg_replace("/^[^,]+,/","",$_SESSION['CurrentMainBase']); - $base_back= convert_department_dn($base_back); - - if(isset($this->config->departments[trim($base_back)])){ - $_SESSION['CurrentMainBase']= $this->config->departments[trim($base_back)]; - }else{ - $_SESSION['CurrentMainBase']= $this->config->departments["/"]; - } - } - register_global("groupfilter", $groupfilter); - $smarty= get_smarty(); - /* Prepare formular */ - $this->reload(); - - /* Check for exeeded sizelimit */ - if (($message= check_sizelimit()) != ""){ - return($message); - } + /******************** + Copy & Paste Handling ... + ********************/ /* Only perform copy&paste requests if it is enabled */ @@ -208,6 +128,11 @@ class groupManagement extends plugin } } + + /******************** + Create a new group ... + ********************/ + /* New group? */ if ($s_action=="new"){ @@ -216,45 +141,39 @@ class groupManagement extends plugin $this->dn= "new"; /* Create new usertab object */ - $this->grouptab= new grouptabs($this->config, - $this->config->data['TABS']['GROUPTABS'], $this->dn); + $this->grouptab= new grouptabs($this->config, $this->config->data['TABS']['GROUPTABS'], $this->dn); + /* Set up the users ACL's for this 'dn' */ - $acl= get_permissions ($_SESSION['CurrentMainBase'], $this->ui->subtreeACL); + $acl= get_permissions ($this->DivListGroup->selectedBase, $this->ui->subtreeACL); $this->grouptab->set_acl($acl); } - /* Cancel dialogs */ - if (isset($_POST['edit_cancel']) || isset($_POST['password_cancel'])){ - del_lock ($this->grouptab->dn); - unset ($this->grouptab); - $this->grouptab= NULL; - unset($_SESSION['objectinfo']); - } + + /******************** + Save Group Tab/Object Changes + ********************/ /* Finish group edit is triggered by the tabulator dialog, so the user wants to save edited data. Check and save at this point. */ if ((isset($_POST['edit_finish'])) && (isset($this->grouptab->config)) ){ - /* Check tabs, will feed message array */ + /* Check tabs, will feed message array + Save, or display error message? */ $message= $this->grouptab->check(); - - /* Save, or display error message? */ if (count($message) == 0){ /* Save user data to ldap */ $this->grouptab->save(); gosa_log ("Group object'".$this->dn."' has been saved"); - /* Group has been saved successfully, remove lock from - LDAP. */ + /* Group has been saved successfully, remove lock from LDAP. */ if ($this->dn != "new"){ del_lock ($this->dn); } - /* There's no page reload so we have to read new users at - this point. */ - $this->reload (); + /* There's no page reload so we have to read new users at this point. */ + //$this->reload (); unset ($this->grouptab); $this->grouptab= NULL; unset ($_SESSION['objectinfo']); @@ -266,37 +185,41 @@ class groupManagement extends plugin } } + + /******************** + Edit existing group + ********************/ + /* User wants to edit data? */ if (($s_action=="edit") && (!isset($this->grouptab-> config))){ /* Get 'dn' from posted 'uid', must be unique */ $this->dn= $this->grouplist[trim($s_entry)]['dn']; - /* Check locking, save current plugin in 'back_plugin', so - the dialog knows where to return. */ - + /* Check locking & lock entry if required */ $user = get_lock($this->dn); - if ($user != ""){ return(gen_locked_message ($user, $this->dn)); } - - /* Lock the current entry, so everyone will get the - above dialog */ add_lock ($this->dn, $this->ui->dn); /* Set up the users ACL's for this 'dn' */ $acl= get_permissions ($this->dn, $this->ui->subtreeACL); /* Register grouptab to trigger edit dialog */ - $this->grouptab= new grouptabs($this->config, - $this->config->data['TABS']['GROUPTABS'], $this->dn); + $this->grouptab= new grouptabs($this->config,$this->config->data['TABS']['GROUPTABS'], $this->dn); $this->grouptab->set_acl($acl); $_SESSION['objectinfo']= $this->dn; } - /* Remove user was requested */ + + /******************** + Delete group + ********************/ + + /* Remove group was requested */ if ($s_action=="del"){ + /* Get 'dn' from posted 'uid' */ $this->dn= $this->grouplist[trim($s_entry)]['dn']; @@ -316,14 +239,19 @@ class groupManagement extends plugin add_lock ($this->dn, $this->ui->dn); $smarty->assign("info", sprintf(_("You're about to delete the group '%s'."), @LDAP::fix($this->dn))); return($smarty->fetch(get_template_path('remove.tpl', TRUE))); - } else { - /* Obviously the user isn't allowed to delete. Show message and - clean session. */ + } else { + + /* Obviously the user isn't allowed to delete. Show message and clean session. */ print_red (_("You are not allowed to delete this group!")); } } + + /******************** + Delete group confirmed + ********************/ + /* Confirmation for deletion has been passed. Group should be deleted. */ if (isset($_POST['delete_group_confirm'])){ @@ -332,8 +260,7 @@ class groupManagement extends plugin if (chkacl($this->acl, "delete") == ""){ /* Delete request is permitted, perform LDAP action */ - $this->grouptab= new grouptabs($this->config, - $this->config->data['TABS']['GROUPTABS'], $this->dn); + $this->grouptab= new grouptabs($this->config,$this->config->data['TABS']['GROUPTABS'], $this->dn); $this->grouptab->set_acl(array($this->acl)); $this->grouptab->delete (); gosa_log ("Group object'".$this->dn."' has been removed"); @@ -341,7 +268,8 @@ class groupManagement extends plugin $this->grouptab= NULL; /* Group list has changed, reload it. */ - $this->reload (); + //$this->reload (); + } else { /* Normally this shouldn't be reached, send some extra @@ -356,11 +284,33 @@ class groupManagement extends plugin } + /******************** + Delete group canceled + ********************/ + /* Delete group canceled? */ if (isset($_POST['delete_cancel'])){ del_lock ($this->dn); unset($_SESSION['objectinfo']); } + + + /******************** + A dialog was canceled + ********************/ + + /* Cancel dialogs */ + if (isset($_POST['edit_cancel']) || isset($_POST['password_cancel'])){ + del_lock ($this->grouptab->dn); + unset ($this->grouptab); + $this->grouptab= NULL; + unset($_SESSION['objectinfo']); + } + + + /******************** + If there is currently a dialog open, display it + ********************/ /* Show tab dialog if object is present */ if (isset($this->grouptab->config)){ @@ -377,334 +327,141 @@ class groupManagement extends plugin return ($display); } - /* Prepare departments */ - $options= ""; - foreach ($this->config->idepartments as $key => $value){ - if ($_SESSION['CurrentMainBase'] == $key){ - $options.= ""; - } else { - $options.= ""; - } - } - - /* Create paste icon - */ - if($this->CopyPasteHandler){ - $Copy_Paste = "  "; - if($this->CopyPasteHandler->isCurrentObjectPastAble()){ - if($this->CopyPasteHandler->isCurrentCutted()){ - $img = "images/cutpaste.png"; - }else{ - $img = "images/copypaste.png"; - } - $Copy_Paste .= " "; - }else{ - $Copy_Paste .= ""._("Can "; - } - }else{ - $Copy_Paste =""; - } - - // Managment - $listhead = "
". - "  ". - "  ". - "  ". - "  ". - "  ". - "  ". - $Copy_Paste. - "  ". - _("Base")." ". - "  ". - "
"; - - - if($this->CopyPasteHandler){ - $actions = " "; - $actions.= " "; - $actions.= ""; - $actions.= ""; - }else{ - $actions = ""; - $actions.= ""; - } - - - // Defining Links - $linkopen = "%s"; - - // image Buttons - $editlink = "%s"; - $userimg = "User"; - - /* Assign extension images */ - $posiximg = ""; - $mailimg = ""; - $sambaimg = ""; - $applimg = ""; - $phoneimg = ""; - $envimg = ""; - - // Space - $empty = ""; - - $divlist = new divlist("groupstab"); - $divlist->SetHeader(array( - array("string" => " ", "attach" => "style='text-align:center;width:20px;'"), - array("string" => _("Groupname")." / "._("Department"), "attach" => "style=''"), - array("string" => _("Properties"), "attach" => "style='width:136px;'"), - array("string" => _("Actions"), "attach" => "style='width:80px;border-right:0px;text-align:right;'") - )); - - $divlist->SetSummary(_("This table displays all groups, in the selected tree.")); - $divlist->SetEntriesPerPage(0); - - foreach($this->departments as $key=> $val){ - - if(!isset($this->config->departments[trim($key)])){ - $this->config->departments[trim($key)]=""; - } - - $non_empty=""; - $keys= str_replace("/","\/",$key); - foreach($this->config->departments as $keyd=>$vald ){ - if(preg_match("/".$keys."\/.*/",$keyd)){ - $non_empty="full"; - } - } - - - $field1 = array("string" => "department", "attach" => "style='text-align:center;width:20px;'"); - $field2 = array("string" => sprintf($linkopen,base64_encode($key),$val), "attach" => "style=''"); - $field3 = array("string" => " ", "attach" => "style='width:136px;'"); - $field4 = array("string" => " ", "attach" => "style='width:80px;border-right:0px;text-align:right;'"); - - $divlist->AddEntry(array($field1,$field2,$field3,$field4)); - } - - foreach($this->grouplist as $key => $val){ - - $posix=$mail=$samba=$appl=$phone=$enviro=$empty; - - if(isset($val['objectClass'])){ - if(in_array("posixGroup", $val['objectClass'])) $posix = $posiximg; - if(in_array("gosaMailAccount", $val['objectClass'])) $mail = $mailimg; - if(in_array("sambaGroupMapping", $val['objectClass'])) $samba = $sambaimg; - if(in_array("gosaApplicationGroup", $val['objectClass'])) $appl = $applimg; - if(in_array("goFonPickupGroup", $val['objectClass'])) $phone = $phoneimg; - if(in_array("gotoEnvironment", $val['objectClass'])) $enviro= $envimg; - } - - $title = "title='dn: ".@LDAP::fix($val['dn'])."'"; - - if(!isset($val['description'][0])){ - $desc = ""; - }else{ - $desc = " - [ ".$val['description'][0]." ]"; - } - - /* FAIrelease tag from groupApplications */ - if(isset($val['FAIrelease'][0])){ - $desc .= " (".$val['FAIrelease'][0].")"; - } - - $field1 = array("string" => sprintf($userimg,$val['dn']), "attach" => "style='text-align:center;width:20px;'"); - $field2 = array("string" => sprintf($editlink,$key,($val['cn']['0'].$desc)), "attach" => "style='' ".$title); - $field3 = array("string" => preg_replace("/%KEY%/", $key, $posix." ".$enviro." ".$mail." ".$samba." ".$appl." ".$phone), "attach" => "style='width:136px;'"); - $field4 = array("string" => preg_replace("/%KEY%/", $key, $actions), "attach" => "style='width:80px;border-right:0px;text-align:right;'"); - - $divlist->AddEntry(array($field1,$field2,$field3,$field4)); - } - - /* Show main page */ - $smarty->assign("grouplisthead", $listhead); - $smarty->assign("grouplist", $divlist->DrawList()); - $smarty->assign("search_image", get_template_path('images/search.png')); - $smarty->assign("searchu_image", get_template_path('images/search_user.png')); - $smarty->assign("tree_image", get_template_path('images/tree.png')); - $smarty->assign("infoimage", get_template_path('images/info.png')); - $smarty->assign("launchimage", get_template_path('images/launch.png')); - $smarty->assign("deplist", $this->config->idepartments); - foreach( array("guser", "regex", "primarygroups", "mailgroups","appgroups", "sambagroups", "functionalgroups", "subsearch") as $type){ - $smarty->assign("$type", $groupfilter[$type]); - } + /* Display dialog with group list */ + $this->DivListGroup->execute(); - /* Extend if we are not using javascript */ - $smarty->assign("apply", apply_filter()); - $smarty->assign("alphabet", generate_alphabet()); - $smarty->assign("hint", print_sizelimit_warning()); - if (isset($this->config->data['MAIN']['NOPRIMARYGROUP'])){ - $smarty->assign("showprimary", ""); - } else { - $smarty->assign("showprimary", "true"); + /* Add departments if subsearch is disabled */ + if(!$this->DivListGroup->SubSearch){ + $this->DivListGroup->AddDepartments($this->DivListGroup->selectedBase,4); } - - return($smarty->fetch(get_template_path('headpage.tpl', TRUE))); + $this->reload (); + $this->DivListGroup->setEntries($this->grouplist); + return($this->DivListGroup->Draw()); } function reload($CreatePosixsList=false) { - /* Get config */ - $groupfilter= get_global('groupfilter'); + $this->grouplist = array(); + $primaries = array(); + $functional = array(); + $error= $error2 = ""; + $filter = "(objectclass=posixGroup)"; + + $base = $this->DivListGroup->selectedBase; + $Regex = $this->DivListGroup->Regex; + $UserRegex = $this->DivListGroup->UserRegex; + $SubSearch = $this->DivListGroup->SubSearch; + $ShowPrimaryGroups = $this->DivListGroup->ShowPrimaryGroups; + $ShowSambaGroups = $this->DivListGroup->ShowSambaGroups; + $ShowApplicationGroups = $this->DivListGroup->ShowApplicationGroups; + $ShowMailGroups = $this->DivListGroup->ShowMailGroups; + $ShowFunctionalGroups = $this->DivListGroup->ShowFunctionalGroups; + + /* Prepare ldap class */ + $ldap= $this->config->get_ldap_link(); + $ldap->cd($base); - /* Set base for all searches */ - $base= $_SESSION['CurrentMainBase']; - /* Regex filter? */ - if ($groupfilter['regex'] != ""){ - $regex= $groupfilter['regex']; - } else { - $regex= "*"; - } - - /* User filter? */ - $filter= "(objectclass=posixGroup)"; - $error= ""; - $error2= ""; - $this->grouplist= array(); + /******************** + Create filter depending on selected checkboxes + ********************/ - /* What are primary groups? */ - $primaries= array(); - $ldap= $this->config->get_ldap_link(); - if (!isset($this->config->data['MAIN']['NOPRIMARYGROUP'])){ - $ldap->cd($base); - $ldap->search("(&(uid=$regex)(!(uid=*$))(objectClass=posixAccount)(gidNumber=*))", array("gidNumber", "cn")); - show_ldap_error($ldap->get_error()); - while ($attrs= $ldap->fetch()){ - $primaries[$attrs['gidNumber'][0]]= $attrs['cn'][0]; - } + /* Add Mail Groups */ + if ($ShowMailGroups){ + $filter.= "(objectClass=gosaMailAccount)"; } - /* Set filter depending on selection */ - $sfilter= ""; - if ($groupfilter['appgroups'] == "checked"){ + /* Add application groups */ + if ($ShowApplicationGroups){ $filter.= "(objectClass=gosaApplicationGroup)"; } + + /* + #FIXME Why is "sfilter" or "filter" set ? + Please verify && add comment + */ + $sfilter= ""; if ($this->config->current['SAMBAVERSION'] == 3){ - if ($groupfilter['primarygroups'] != "checked"){ + if (!$ShowPrimaryGroups){ $sfilter= "(objectClass=sambaGroupMapping)"; - } elseif ($groupfilter['sambagroups'] == "checked"){ + } elseif ($ShowSambaGroups){ $filter.= "(objectClass=sambaGroupMapping)"; } } - if ($groupfilter['mailgroups'] == "checked"){ - $filter.= "(objectClass=gosaMailAccount)"; - } - $functional= array(); - $ldap->cd(get_groups_ou().$base); - $ldap->set_size_limit($_SESSION['size_limit']); - $ldap->search("(&(cn=$regex)(objectClass=posixGroup)(!(|(objectClass=gosaMailAccount)(objectClass=gosaApplicationGroup)$sfilter)))", array("cn", "gidNumber", "description")); - $error2= $ldap->error; - while ($attrs= $ldap->fetch()){ - if (!isset($primaries[$attrs['gidNumber'][0]])){ - $functional[$attrs['gidNumber'][0]]= $attrs['gidNumber'][0]; + /* Prepare filter for given Regex && UserRegex */ + if ($filter != ""){ + $filter= "(&(cn=$Regex)(objectClass=posixGroup)(|$filter))"; + if ($UserRegex != ""){ + $filter= "(&(|(memberUID=".$UserRegex.")(cn=".$UserRegex."))$filter)"; } } - /* - * We also need to search for the departments - * So we are able to navigate like in konquerer - */ - /* Get all departments within this subtree */ - $deps= get_list("(&(|(ou=$regex)(description=$regex))(objectClass=gosaDepartment))", $this->ui->subtreeACL, - $base, array("ou", "description"), GL_SIZELIMIT | GL_CONVERT); + /******************** + Collect some groupids to be able to skip primary & functional groups + ********************/ - $this->departments = array(); - foreach($deps as $value){ - if(isset($value['description'][0])){ - $this->departments[$value['dn']]= get_sub_department($value['dn'])." - [".$value["description"][0]."]"; - }else{ - $this->departments[$value['dn']]= get_sub_department($value['dn']); + /* Collect primary groupIDs to show primary groups + if this option is enabled in gosa conf && the checkbox is checked */ + if(($this->ShowPrimaryCheckBox) && ($ShowPrimaryGroups)){ + $ldap->search("(&(uid=$Regex)(!(uid=*$))(objectClass=posixAccount)(gidNumber=*))", array("gidNumber", "cn")); + show_ldap_error($ldap->get_error()); + while ($attrs= $ldap->fetch()){ + $primaries[$attrs['gidNumber'][0]]= $attrs['cn'][0]; } } - natcasesort($this->departments); - /* Ende department generation - */ - - /* Generate grouplist */ - if ($filter != ""){ - $filter= "(&(cn=$regex)(objectClass=posixGroup)(|$filter))"; - if ($groupfilter['guser'] != ""){ - $filter= "(&(|(memberUID=" . $groupfilter['guser'] . ")(cn=" . $groupfilter['guser'] . "))$filter)"; + + /* Collect all GroupIDs from those groups which are functional. + Only perfrom this search if ShowFunctionalGroups is unchecked, else leave arre empty */ + if(!$ShowFunctionalGroups){ + $ldap->cd(get_groups_ou().$base); + $ldap->set_size_limit($_SESSION['size_limit']); + $ldap->search("(&(cn=$Regex)(objectClass=posixGroup)(!(|(objectClass=gosaMailAccount)(objectClass=gosaApplicationGroup)$sfilter)))", array("cn", "gidNumber", "description")); + $error2= $ldap->error; + while ($attrs= $ldap->fetch()){ + if (!isset($primaries[$attrs['gidNumber'][0]])){ + $functional[$attrs['gidNumber'][0]]= $attrs['gidNumber'][0]; + } } } + - - /* Create attribute array, if releasemanagement is activated we search for FAIrelease too */ + /******************** + Search for the prepared filter + ********************/ + + /* If subsearch is activated search for subobjects too */ $attrs = array("cn", "description", "gidNumber", "objectClass"); - $tmp = search_config($this->config->data,"faiManagement","CLASS"); - if($tmp){ - $attrs[] = "FAIrelease"; - } - if ($groupfilter['subsearch'] == "checked"){ - $res= get_list($filter, $this->ui->subtreeACL, $base, array("cn", "description", "gidNumber", "objectClass","FAIrelease"), - GL_SIZELIMIT); + if ($SubSearch){ + $res= get_list($filter, $this->ui->subtreeACL, $base, $attrs, GL_SIZELIMIT| GL_SUBSEARCH); } else { - $base= get_groups_ou().$base; - $res= get_list($filter, $this->ui->subtreeACL, $base, array("cn", "description", "gidNumber", "objectClass","FAIrelease"), - GL_SIZELIMIT); - } - if (preg_match("/size limit/i", $error) || preg_match("/size limit/i", $error2)){ - $_SESSION['limit_exceeded']= TRUE; + $res= get_list($filter, $this->ui->subtreeACL, get_groups_ou().$base, $attrs, GL_SIZELIMIT); } + /* Sort values into grouplist*/ + $tmp = $tmp2 = array(); foreach ($res as $value){ - if ($groupfilter['functionalgroups'] != "checked" && isset($functional[$value['gidNumber'][0]])){ + + /* Skip functional groups if checkbox isn't checked */ + if (!$ShowFunctionalGroups && isset($functional[$value['gidNumber'][0]])){ continue; } - if ($groupfilter['primarygroups'] == "checked"){ - $this->grouplist[$value['gidNumber'][0]]= $value; - } else { - if (!isset($primaries[$value['gidNumber'][0]])){ - $this->grouplist[$value['gidNumber'][0]]= $value; - } + + /* If gidNumber is in $primaries skip this entry */ + if (!isset($primaries[$value['gidNumber'][0]])){ + $tmp2[$value['cn'][0]] = $value; + $tmp [$value['cn'][0]] = $value['cn'][0]; } } - - $tmp=array(); - - /* Create result for group management listbox*/ - foreach($this->grouplist as $tkey => $val ){ - $tmp[strtolower($val['cn'][0]).$val['cn'][0]]=$val; - } - ksort($tmp); - $this->grouplist=array(); - foreach($tmp as $val){ - $this->grouplist[]=$val; + natcasesort($tmp); + foreach($tmp as $name){ + $this->grouplist[] = $tmp2[$name]; } reset ($this->grouplist); } - function remove_from_parent() - { - /* Optionally execute a command after we're done */ - $this->postremove(); - } - - /* Perform copy & paste requests @@ -716,7 +473,7 @@ class groupManagement extends plugin */ if(($s_action == "editPaste") || ($this->CopyPasteHandler->stillOpen())){ $this->CopyPasteHandler->save_object(); - $this->CopyPasteHandler->SetVar("base",$_SESSION['CurrentMainBase']); + $this->CopyPasteHandler->SetVar("base",$this->DivListGroup->selectedBase); if($str = $this->CopyPasteHandler->execute()){ return( $str); }; @@ -758,42 +515,37 @@ class groupManagement extends plugin /* Save data to object */ function save_object() { + $this->DivListGroup->save_object(); } - /* Check values */ - function check() + function remove_lock() { + if (isset($this->grouptab->dn)){ + del_lock ($this->grouptab->dn); + } } - /* Save to LDAP */ - function save() + function remove_from_parent() { /* Optionally execute a command after we're done */ - $this->postcreate(); - } - - function adapt_from_template($dn) - { - } - - function password_change_needed() - { + $this->postremove(); } - function show_header($button_text, $text, $disabled= FALSE) - { - } - function remove_lock() + /* Save to LDAP */ + function save() { - if (isset($this->grouptab->dn)){ - del_lock ($this->grouptab->dn); - } + /* Optionally execute a command after we're done */ + $this->postcreate(); } + /* Unused functions */ + function check() { } + function adapt_from_template($dn) { } + function password_change_needed() { } + function show_header($button_text, $text, $disabled= FALSE) { } } - // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?>