X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fgroups%2Fclass_groupManagement.inc;h=fa3592cab455f84e7717bc0a130f3693c9539b13;hb=1981d136dcb7e79c7a89c70131b97561b8d76974;hp=4e21b8bdff40fa088b9b921763681680ef0fbd2e;hpb=614ea31e390c14ecb87206d319b01c23cfadbc51;p=gosa.git diff --git a/plugins/admin/groups/class_groupManagement.inc b/plugins/admin/groups/class_groupManagement.inc index 4e21b8bdf..fa3592cab 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; @@ -32,145 +31,111 @@ class groupManagement extends plugin var $ui= NULL; var $acl= ""; + var $CopyPasteHandler = NULL; + var $DivListGroup = NULL; + + var $ShowPrimaryCheckBox = false; + function groupManagement ($config, $ui) { /* Save configuration for internal use */ $this->config= $config; $this->ui= $ui; - /* 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" => "", - "depselect" => $base, - "regex" => "*"); - register_global("groupfilter", $groupfilter); + /* 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); + } + + /* Detect if we have to display the primary group checkbox */ + $tmp = ""; + if (isset($this->config->data['MAIN']['NOPRIMARYGROUP'])){ + $tmp = $this->config->data['MAIN']['NOPRIMARYGROUP']; + } + if(preg_match("/true/i",$tmp)|| (preg_match("/yes/",$tmp))){ + $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() { - /* Call parent execute */ - plugin::execute(); + /* 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("depselect", "guser", "regex") as $type){ - if (isset($_POST[$type])){ - $groupfilter[$type]= $_POST[$type]; - } - } - 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 - if(preg_match("/group_del.*/",$key)){ + if(preg_match("/^group_del.*/",$key)){ $s_action = "del"; $s_entry = preg_replace("/group_".$s_action."_/i","",$key); // Post for edit - }elseif(preg_match("/group_edit_.*/",$key)){ + }elseif(preg_match("/^group_edit_.*/",$key)){ $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)){ + }elseif(preg_match("/^group_new.*/",$key)){ $s_action="new"; - }elseif(preg_match("/dep_home.*/i",$key)){ + }elseif(preg_match("/^dep_home.*/i",$key)){ $s_action="home"; - }elseif(preg_match("/group_tplnew.*/i",$key)){ + }elseif(preg_match("/^group_tplnew.*/i",$key)){ $s_action="new_tpl"; - }elseif(preg_match("/group_chgpw.*/i",$key)){ + }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"; + $s_entry = preg_replace("/".$type."_group_edit_/i","",$key); + $_POST['arg'] = $type; + }elseif(preg_match("/^editPaste.*/i",$key)){ + $s_action="editPaste"; + }elseif(preg_match("/^copy_.*/",$key)){ + $s_action="copy"; + $s_entry = preg_replace("/^copy_/i","",$key); + }elseif(preg_match("/^cut_.*/",$key)){ + $s_action="cut"; + $s_entry = preg_replace("/^cut_/i","",$key); } } $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']); - $groupfilter['depselect']= "".$this->config->departments[trim($s_entry)]; + /* Check for posted gets */ + if((isset($_GET['act'])) && ($_GET['act'] == "edit_entry")){ + $s_entry = $_GET['id']; + $s_action = "edit"; } - // Edit if - if((isset($_GET['act']))&&($_GET['act']=="edit_entry")){ - $s_action ="edit"; - $s_entry = $_GET['id']; - } - - /* Department changed? */ - if(isset($_POST['depselect']) && $_POST['depselect']){ - $groupfilter['depselect']= $_POST['depselect']; - } - - /* Homebutton is posted */ - if($s_action=="home"){ - $groupfilter['depselect']= (preg_replace("/^[^,]+,/","",$this->ui->dn)); - $groupfilter['depselect']= (preg_replace("/^[^,]+,/","",$groupfilter['depselect'])); - } - - if($s_action=="root"){ - $groupfilter['depselect']=($this->config->current['BASE']); - } + $smarty= get_smarty(); - /* If Backbutton is Posted */ - if($s_action == "back"){ - $base_back= preg_replace("/^[^,]+,/","",$groupfilter['depselect']); - $base_back= convert_department_dn($base_back); + /******************** + Copy & Paste Handling ... + ********************/ - if(isset($this->config->departments[trim($base_back)])){ - $groupfilter['depselect']= $this->config->departments[trim($base_back)]; - }else{ - $groupfilter['depselect']= $this->config->departments["/"]; + /* Only perform copy&paste requests if it is enabled + */ + if($this->CopyPasteHandler){ + if($str = $this->copyPasteHandling($s_action,$s_entry)){ + return $str; } } - register_global("groupfilter", $groupfilter); - $smarty= get_smarty(); - /* Prepare formular */ - $this->reload(); - - /* Check for exeeded sizelimit */ - if (($message= check_sizelimit()) != ""){ - return($message); - } + /******************** + Create a new group ... + ********************/ /* New group? */ if ($s_action=="new"){ @@ -180,43 +145,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->set_acl(array(':all')); - } + $this->grouptab= new grouptabs($this->config, $this->config->data['TABS']['GROUPTABS'], $this->dn); - /* 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']); + /* Set up the users ACL's for this 'dn' */ + $acl= get_permissions ($this->DivListGroup->selectedBase, $this->ui->subtreeACL); + $this->grouptab->set_acl($acl); } + + /******************** + 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'])){ + 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']); @@ -228,34 +189,41 @@ class groupManagement extends plugin } } + + /******************** + Edit existing group + ********************/ + /* User wants to edit data? */ - if ($s_action=="edit"){ + 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. */ - if (($user= get_lock($this->dn)) != ""){ + /* 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']; @@ -273,16 +241,21 @@ class groupManagement extends plugin /* Lock the current entry, so nobody will edit it during deletion */ add_lock ($this->dn, $this->ui->dn); - $smarty->assign("info", sprintf(_("You're about to delete the group '%s'."), $this->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'])){ @@ -291,8 +264,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"); @@ -300,7 +272,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 @@ -315,20 +288,42 @@ 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 ($this->grouptab){ + if (isset($this->grouptab->config)){ $display= $this->grouptab->execute(); /* Don't show buttons if tab dialog requests this */ if (!$this->grouptab->by_object[$this->grouptab->current]->dialog){ $display.= "

\n"; - $display.= "\n"; + $display.= "\n"; $display.= " \n"; $display.= "\n"; $display.= "

"; @@ -336,327 +331,190 @@ class groupManagement extends plugin return ($display); } - /* Prepare departments */ - $options= ""; - foreach ($this->config->idepartments as $key => $value){ - if ($groupfilter['depselect'] == $key){ - $options.= ""; - } else { - $options.= ""; - } - } - - // Managment - $listhead = "
". - "  ". - "  ". - "  ". - "  ". - "  ". - "  ". - _("Current base")." ". - "  ". - "
"; + /* Display dialog with group list */ + $this->DivListGroup->parent = $this; + $this->DivListGroup->execute(); - - $actions = ""; - $actions.= ""; - - // Defining Links - $linkopen = "%s"; - - // image Buttons - $editlink = "%s"; - $userimg = "User"; - - // Extension images - $posiximg = "P"; - $mailimg = "M"; - $sambaimg = "S"; - $applimg = "A"; - $phoneimg = "Ph"; - $envimg = "E"; - // Space - $empty = ""; - - - $divlist = new divlist("groupstab"); - $divlist->SetHeader(array( - array("string" => " "), - array("string" => _("Groupname")." / "._("Department")), - array("string" => _("Properties"), "attach" => "style='width:116px;'"), - array("string" => _("Actions") ,"attach" => "style='border:none'") - )); - - - $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)); - $field3 = array("string" => " "); - $field4 = array("string" => " ","attach"=>"style='text-align:right;border:none;width:48px;'"); - - $divlist->AddEntry(array($field1,$field2,$field3,$field4)); - } - - foreach($this->grouplist as $key => $val){ - - if(isset($val['objectClass'])){ - if(in_array("posixGroup", $val['objectClass'])) $posix = $posiximg; else $posix = $empty; - if(in_array("gosaMailAccount", $val['objectClass'])) $mail = $mailimg; else $mail = $empty; - if(in_array("sambaGroupMapping", $val['objectClass'])) $samba = $sambaimg; else $samba = $empty; - if(in_array("gosaApplicationGroup", $val['objectClass'])) $appl = $applimg; else $appl = $empty; - if(in_array("goFonPickupGroup", $val['objectClass'])) $phone = $phoneimg; else $phone = $empty; - if(in_array("gotoEnvironment", $val['objectClass'])) $enviro= $envimg; else $enviro = $empty; - }else{ - $posix=$mail=$samba=$appl=$phone=$empty; - } - - $title = "title='gid : ".$key." - dn : ".$val['dn']."'"; - - if(!isset($val['description'][0])){ - $desc = ""; - }else{ - $desc = " - [ ".$val['description'][0]." ]"; - } - $field1 = array("string" => sprintf($userimg,$val['dn']),"attach"=>"style='width:20px;text-align:center;'"); - $field2 = array("string" => sprintf($editlink,$key,($val['cn']['0'].$desc)),"attach"=>$title); - $field3 = array("string" => $posix." ".$enviro." ".$mail." ".$samba." ".$appl." ".$phone,"attach"=>"style='text-align:left;width:136px;'"); - $field4 = array("string" => preg_replace("/%KEY%/", $key, $actions),"attach"=>"style='text-align:right;border:none;width:48px;'"); - - $divlist->AddEntry(array($field1,$field2,$field3,$field4)); + /* Add departments if subsearch is disabled */ + if(!$this->DivListGroup->SubSearch){ + $this->DivListGroup->AddDepartments($this->DivListGroup->selectedBase,4); } - - /* 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("depselect", "guser", "regex", "primarygroups", "mailgroups","appgroups", "sambagroups", "functionalgroups", "subsearch") as $type){ - $smarty->assign("$type", $groupfilter[$type]); - } - - /* Extend if we are not using javascript */ - $smarty->assign("apply", apply_filter()); - $smarty->assign("alphabet", generate_alphabet()); - $smarty->assign("hint", print_sizelimit_warning()); - - 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'); - - /* Set base for all searches */ - $base= $groupfilter['depselect']; + $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); + $ldap->set_size_limit($_SESSION['size_limit']); - /* 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(); - $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 application groups */ + if ($ShowApplicationGroups){ + $filter.= "(objectClass=gosaApplicationGroup)"; + } + + /* Add Mail Groups */ + if ($ShowMailGroups){ + $filter.= "(objectClass=gosaMailAccount)"; } - /* Set filter depending on selection */ $sfilter= ""; - if ($groupfilter['appgroups'] == "checked"){ - $filter.= "(objectClass=gosaApplicationGroup)"; - } 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 - */ - /* Only needed if we are in GroupManagement */ - if(!$CreatePosixsList){ - $res3 = get_list2($this->ui->subtreeACL, "(&(|(ou=$regex)(description=$regex))(objectClass=gosaDepartment))", - FALSE, $base, array("ou", "description"), TRUE); - $this->departments= array(); - $tmp = array(); - foreach ($res3 as $value){ - $tmp[strtolower($value['dn']).$value['dn']]=$value; - } - ksort($tmp); - foreach($tmp as $value){ - if($value["description"][0]!=".."){ - $this->departments[$value['dn']]=convert_department_dn2($value['dn'])." - [".$value["description"][0]."]"; - }else{ - $this->departments[$value['dn']]=$value["description"][0]; - } + /******************** + Collect some groupids to be able to skip primary & functional groups + ********************/ + + /* Collect primary groupIDs to show primary groups + if this option is enabled in gosa conf && the checkbox is checked */ + if ($this->ShowPrimaryCheckBox){ + $res = get_list("(&(uid=$Regex)(!(uid=*$))(objectClass=posixAccount)(gidNumber=*))", $this->ui->subtreeACL, + $base,array("gidNumber", "cn"), GL_SUBSEARCH); + foreach ($res as $attrs){ + $primaries[$attrs['gidNumber'][0]]= $attrs['cn'][0]; } } - /* 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 */ + $ff = "(&(cn=$Regex)(objectClass=posixGroup)(!(|(objectClass=gosaMailAccount)(objectClass=gosaApplicationGroup)$sfilter)))"; + $res = get_list($ff,$this->ui->subtreeACL,$base,array("gidNumber", "cn", "description"), GL_SUBSEARCH); + foreach($res as $attrs){ + if (!isset($primaries[$attrs['gidNumber'][0]])){ + $functional[$attrs['gidNumber'][0]]= $attrs['gidNumber'][0]; } } + - /* Depending on $CreatePosixsList we have to create different lists */ + /******************** + Search for the prepared filter + ********************/ + + /* If subsearch is activated search for subobjects too */ + $attrs = array("cn", "description", "gidNumber", "objectClass","FAIrelease"); - if ($groupfilter['subsearch'] == "checked"){ - $res= get_list($this->ui->subtreeACL, "$filter", FALSE, $base, array("cn", "description", "gidNumber"), TRUE); + if ($SubSearch){ + $res= get_list($filter, $this->ui->subtreeACL, $base, $attrs, GL_SIZELIMIT| GL_SUBSEARCH); } else { - $base= get_groups_ou().$base; - $res= get_list($this->ui->subtreeACL, "$filter", FALSE, $base, array("cn", "description", "gidNumber"), TRUE); - } - 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 (($ShowPrimaryGroups) || (!$ShowPrimaryGroups && !isset($primaries[$value['gidNumber'][0]]))){ + $tmp2[$value['cn'][0]] = $value; + $tmp [$value['cn'][0]] = $value['cn'][0]; } } + natcasesort($tmp); + foreach($tmp as $name){ + $this->grouplist[] = $tmp2[$name]; + } + reset ($this->grouplist); + } - $tmp=array(); - /* If true ; this result is used for posix tab, group membership selection. */ - if($CreatePosixsList){ - /* Addd to array */ - foreach($this->grouplist as $tkey => $val ){ - $tmp[strtolower($val['cn'][0]).$val['cn'][0]]=$val; - } - - /* Sort index */ - ksort($tmp); - - /* Recreate index array[dn]=cn[description]*/ - $this->grouplist=array(); - foreach($tmp as $val){ - if(isset($val['description'])){ - $this->grouplist[$val['dn']]=$val['cn'][0]." [".$val['description'][0]."]"; - }else{ - $this->grouplist[$val['dn']]=$val['cn'][0]; - } - } - }else{ - - /* 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; - } - reset ($this->grouplist); + /* Perform copy & paste requests + If copy&paste is in progress this returns a dialog to fix required attributes + */ + function copyPasteHandling($s_action,$s_entry) + { + /* Paste copied/cutted object in here + */ + if(($s_action == "editPaste") || ($this->CopyPasteHandler->stillOpen())){ + $this->CopyPasteHandler->save_object(); + $this->CopyPasteHandler->SetVar("base",$this->DivListGroup->selectedBase); + if($str = $this->CopyPasteHandler->execute()){ + return( $str); + }; + /* Ensure that the new object is shown in the list now */ + $this->relaod(); } - } - function remove_from_parent() - { - /* Optionally execute a command after we're done */ - $this->postremove(); - } + /* Copy current object to CopyHandler + */ + if($s_action == "copy"){ + $this->CopyPasteHandler->Clear(); - /* Save data to object */ - function save_object() - { - } + $dn = $this->grouplist[trim($s_entry)]['dn']; + $acl = get_permissions ($dn, $this->ui->subtreeACL); + $obj = new grouptabs($this->config,$this->config->data['TABS']['GROUPTABS'], $dn); + $objNew = new grouptabs($this->config,$this->config->data['TABS']['GROUPTABS'], "new"); + $obj->set_acl($acl); + $objNew->set_acl($acl); + $this->CopyPasteHandler->Copy($obj,$objNew); + } - /* Check values */ - function check() - { - } + /* Copy current object to CopyHandler + */ + if($s_action == "cut"){ + $this->CopyPasteHandler->Clear(); + $dn = $this->grouplist[trim($s_entry)]['dn']; + $acl= get_permissions ($dn, $this->ui->subtreeACL); - /* Save to LDAP */ - function save() - { - /* Optionally execute a command after we're done */ - $this->postcreate(); - } + $obj= new grouptabs($this->config,$this->config->data['TABS']['GROUPTABS'], $dn); + $obj->set_acl($acl); - function adapt_from_template($dn) - { + $this->CopyPasteHandler->Cut($obj); + } } - function password_change_needed() + /* Save data to object */ + function save_object() { + $this->DivListGroup->save_object(); } - function show_header($button_text, $text, $disabled= FALSE) - { - } function remove_lock() { @@ -665,7 +523,26 @@ class groupManagement extends plugin } } -} + function remove_from_parent() + { + /* Optionally execute a command after we're done */ + $this->postremove(); + } + + + /* Save to LDAP */ + function save() + { + /* 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: ?>