From 324d8c2680f748889b9f7f90fe9f31e4032fc3c6 Mon Sep 17 00:00:00 2001 From: hickert Date: Wed, 4 Nov 2009 09:41:16 +0000 Subject: [PATCH] Updated group listing. git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@14740 594d385d-05f5-0310-b6e9-bd551577e9d8 --- .../admin/groups/class_divListGroup.inc | 327 ------- .../admin/groups/class_groupManagement.inc | 832 +----------------- .../plugins/admin/groups/group-filter.tpl | 34 + .../plugins/admin/groups/group-filter.xml | 40 + gosa-core/plugins/admin/groups/group-list.tpl | 31 + gosa-core/plugins/admin/groups/group-list.xml | 143 +++ gosa-core/plugins/admin/groups/main.inc | 20 +- gosa-core/plugins/admin/groups/remove.tpl | 12 +- 8 files changed, 285 insertions(+), 1154 deletions(-) delete mode 100644 gosa-core/plugins/admin/groups/class_divListGroup.inc create mode 100644 gosa-core/plugins/admin/groups/group-filter.tpl create mode 100644 gosa-core/plugins/admin/groups/group-filter.xml create mode 100644 gosa-core/plugins/admin/groups/group-list.tpl create mode 100644 gosa-core/plugins/admin/groups/group-list.xml diff --git a/gosa-core/plugins/admin/groups/class_divListGroup.inc b/gosa-core/plugins/admin/groups/class_divListGroup.inc deleted file mode 100644 index 2ee9518e8..000000000 --- a/gosa-core/plugins/admin/groups/class_divListGroup.inc +++ /dev/null @@ -1,327 +0,0 @@ -AddCheckBox */ - var $ShowPrimaryGroups; - var $ShowSambaGroups; - var $ShowApplicationGroups; - var $ShowMailGroups; - var $ShowFunctionalGroups; - - /* Subsearch checkbox */ - var $SubSearch = false; - - var $parent ; - var $ui ; - - function divListGroup (&$config, &$parent) - { - MultiSelectWindow::MultiSelectWindow($config, "Groups", "groups"); - - $this->parent = &$parent; - $this->ui = get_userinfo(); - - /* Set list strings */ - $this->SetTitle(_("List of groups")); - $this->SetSummary(_("List of groups")); - $this->EnableAplhabet (true); - - /* Result page will look like a headpage */ - $this->SetHeadpageMode(); - - /* Disable buttonsm */ - $this->EnableCloseButton(false); - $this->EnableSaveButton (false); - - /* Dynamic action col, depending on snapshot icons */ - $action_col_size = 80; - if($this->parent->snapshotEnabled()){ - $action_col_size += 38; - } - - /* Toggle all selected / deselected */ - $chk = ""; - - /* set Page header */ - $this->AddHeader(array("string"=> $chk, "attach"=>"style='width:20px;'")); - $this->AddHeader(array("string"=>" ","attach"=>"style='width:20px;'")); - $this->AddHeader(array("string"=>_("Name")." / "._("Department"))); - $this->AddHeader(array("string"=>_("Properties"),"attach"=>"style='width:136px;'")); - $this->AddHeader(array("string"=>_("Actions"),"attach"=>"style='width:".$action_col_size."px;border-right:0px;'")); - - /* Text ,Value ,Name ,Is selected */ - $this->AddCheckBox("ShowPrimaryGroups", _("Select to see groups that are primary groups of users"), - sprintf(_("Show %s"),_("primary groups")), true); - $this->AddCheckBox("ShowSambaGroups", msgPool::selectToView(_("samba groups mappings"),"enabled"), - sprintf(_("Show %s"),_("samba groups")), true); - $this->AddCheckBox("ShowApplicationGroups", msgPool::selectToView(_("application settings"),"enabled"), - sprintf(_("Show %s"),_("application groups")), true); - $this->AddCheckBox("ShowMailGroups", msgPool::selectToView(_("mail settings"),"enabled"), - sprintf(_("Show %s"),_("mail groups")), true); - $this->AddCheckBox("ShowFunctionalGroups", _("Select to see normal groups that have only functional aspects"), - sprintf(_("Show %s"),_("functional groups")), true); - $this->AddCheckBox(SEPERATOR); - - /* Add SubSearch checkbox */ - $this->AddCheckBox("SubSearch", msgPool::selectToView("","subsearch"),msgPool::selectToView("","subsearch_small"), false); - - /* Name ,Text ,Default , Connect with alphabet */ - $this->AddRegex ("Regex", _("Regular expression for matching group names"), "*" , true); - $this->AddRegex ("UserRegex", _("User name of which groups are shown"), "*" , false, "images/lists/search-user.png"); - } - - - function GenHeader() - { - /* Get all departments within this subtree */ - $ui= get_userinfo(); - $first = ""; - $found = FALSE; - $base = $this->config->current['BASE']; - $options = $this->create_department_list($this->module); - - /* Get acls */ - $acl = $ui->get_permissions($this->selectedBase,"groups/group"); - - /* Add default header */ - $listhead = MultiSelectWindow::get_default_header(); - - /* Add department selection */ - $listhead .= _("Base")." ". - "  "; - - /* Create Layers menu */ - $s = ".|"._("Actions")."|\n"; - - /* Append create options */ - if(preg_match("/c/",$acl)) { - $s .= "..|". - " "._("Create")."|\n"; - $s.= "...|". - " "._("Group")."|group_new|\n"; - } - - /* Multiple options */ - $s.= "..|---|\n"; - $s.= "..|". - " "._("Edit")."|"."multiple_edit|\n"; - $s.= "..|". - " "._("Remove")."|"."remove_multiple|\n"; - - /* Add event tag */ - if(class_available("DaemonEvent")){ - $events = DaemonEvent::get_event_types(USER_EVENT); - if(count($events['BY_CLASS'])){ - $s.= "..|---|\n"; - foreach($events['BY_CLASS'] as $name => $event){ - $s.= "..|".$event['MenuImage']." ".$event['s_Menu_Name']."|event_".$name."\n"; - } - } - } - - /* Add multiple copy & cut icons */ - $acl_all= $ui->has_complete_category_acls($this->selectedBase,"groups"); - - /* Add Copy & Paste header */ - $s .= $this->parent->get_copypaste_header($this->selectedBase,$this->module); - - /* Add snapshot functionality */ - $s .= $this->parent->get_snapshot_header($this->selectedBase,$this->module); - - $this->SetDropDownHeaderMenu($s); - - $this->SetListHeader($listhead); - } - - function execute() - { - $this->ClearElementsList(); - $this->GenHeader(); - } - - function setEntries($groups) - { - // image Buttons - $editlink = "%s"; - $userimg = "User"; - - /* Dynamic action col, depending on snapshot icons */ - $action_col_size = 80; - if($this->parent->snapshotEnabled()){ - $action_col_size += 38; - } - - /* Assign extension images */ - $posiximg = ""; - $mailimg = ""; - $sambaimg = ""; - $applimg = ""; - $phoneimg = ""; - $envimg = ""; - - // Space - $empty = ""; - - // User and Template Images - $editlink = "%s"; - - $ui = get_userinfo(); - - /* Fetch all application menu entries - */ - $base = get_groups_ou().$this->selectedBase; - $ldap = $this->config->get_ldap_link(); - $ldap->cd ($base); - $ldap->search("(objectClass=gotoMenuEntry)",array("dn")); - $configured_apps = array(); - while($entry = $ldap->fetch()){ - $dn = preg_replace("/^.*(cn=[^,]+,".preg_quote(get_groups_ou(), '/').")/","\\1",$entry['dn']); - $configured_apps[$dn] = $dn; - } - - // Test Every Entry and generate divlist Array - foreach($groups as $key => $val){ - - /* Create action icons - copy & paste icons */ - $acl = $ui->get_permissions($val['dn'],"groups/group"); - $acl_all = $ui->has_complete_category_acls($val['dn'],"groups"); - - $actions= ""; - - /* Add copy & cut functionality */ - $actions.= $this->parent->get_copypaste_action($val['dn'],"groups","group"); - - /* Add edit icon */ - $actions.= ""; - - /* Add snapshot functionality */ - $actions.= $this->parent->get_snapshot_action($val['dn'],$this->module); - - if(preg_match("/d/",$acl)){ - $actions.= ""; - }else{ - $actions.= " "; - } - - $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("goFonPickupGroup", $val['objectClass'])) $phone = $phoneimg; - if(in_array("gotoEnvironment", $val['objectClass'])) $enviro= $envimg; - } - - if(isset($configured_apps[$val['dn']])){ - $appl = $applimg; - } - - $title = "title='".preg_replace('/ /', ' ', 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].")"; - } - - $field0 = array("string" => "" , - "attach" => "style='width:20px;'"); - - /* Cutted objects should be displayed in light grey */ - $display = $val['cn'][0].$desc; - if($this->parent->CopyPasteHandler){ - foreach($this->parent->CopyPasteHandler->queue as $queue_key => $queue_data){ - if($queue_data['dn'] == $val['dn']) { - $display = "".$display.""; - break; - } - } - } - - $field1 = array("string" => sprintf($userimg,$val['dn']), "attach" => "style='text-align:center;width:20px;'"); - $field2 = array("string" => sprintf($editlink,$key,$display), "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:".$action_col_size."px;border-right:0px;text-align:right;'"); - - $this->AddElement(array($field0,$field1,$field2,$field3,$field4)); - } - - /* Create summary string for list footer */ - $num_deps=0; - if(!$this->SubSearch){ - $num_deps = count($this->Added_Departments); - } - $num_grps = count($groups); - - $num_grp_str = _("Number of listed groups"); - $num_dep_str = _("Number of listed departments"); - - $str = "".$num_grp_str." ".$num_grps."    "; - $str.= "".$num_dep_str." ".$num_deps."    "; - - $this->set_List_Bottom_Info($str); - - } - - function Save() - { - MultiSelectWindow :: Save(); - } - - function save_object() - { - /* Save automatic created POSTs like regex, checkboxes */ - MultiSelectWindow::save_object(); - } -} -// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: -?> diff --git a/gosa-core/plugins/admin/groups/class_groupManagement.inc b/gosa-core/plugins/admin/groups/class_groupManagement.inc index 3fcee3c54..5dd9cd39a 100644 --- a/gosa-core/plugins/admin/groups/class_groupManagement.inc +++ b/gosa-core/plugins/admin/groups/class_groupManagement.inc @@ -20,816 +20,48 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -class groupManagement extends plugin +class groupManagement extends management { - /* Definitions */ - var $plHeadline= "Groups"; - var $plDescription= "Manage POSIX groups"; - - /* Dialog attributes */ - var $grouptab = NULL; - var $grouplist = array(); - var $ui = NULL; - var $CopyPasteHandler = NULL; - var $DivListGroup = NULL; - var $ShowPrimaryCheckBox= false; - var $start_pasting_copied_objects = FALSE; - var $acl_module = "groups"; - var $dns = array(); - - function groupManagement (&$config, &$ui) - { - /* Save configuration for internal use */ - $this->config = &$config; - $this->ui = &$ui; - - /* Copy & Paste enabled ?*/ - if($this->config->get_cfg_value("copyPaste") == "true"){ - $this->CopyPasteHandler = new CopyPasteHandler($this->config); - } - - /* Detect if we have to display the primary group checkbox */ - $tmp = ""; - if ($this->config->get_cfg_value("primaryGroupFilter") == "false"){ - $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(); - - /* Store these posts if the current object is locked (used by somebody else)*/ - session::set('LOCK_VARS_TO_USE',array("/^act$/","/^id$/","/^group_edit_/","/^group_del_/","/^item_selected/","/^remove_multiple_groups/","/^multiple_edit/","/menu_action/","/_group_/")); - - /* Save data */ - $s_action = ""; - $s_entry = ""; - - /* Test Posts */ - foreach($_POST as $key => $val){ - // Post for delete - 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)){ - $s_action="edit"; - $s_entry = preg_replace("/group_".$s_action."_/i","",$key); - // Post for new - }elseif(preg_match("/^group_new.*/",$key)){ - $s_action="new"; - }elseif(preg_match("/^dep_home.*/i",$key)){ - $s_action="home"; - }elseif(preg_match("/^group_tplnew.*/i",$key)){ - $s_action="new_tpl"; - }elseif(preg_match("/^group_chgpw.*/i",$key)){ - $s_action="change_pw"; - $s_entry = preg_replace("/group_chgpw_/i","",$key); - }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); - }elseif(preg_match("/^remove_multiple_groups/",$key)){ - $s_action="del_multiple"; - }elseif(preg_match("/^multiple_copy_groups/",$key)){ - $s_action = "copy_multiple"; - }elseif(preg_match("/^multiple_cut_groups/",$key)){ - $s_action = "cut_multiple"; - } - } - $s_entry = preg_replace("/_.$/","",$s_entry); - - /* Check for posted gets */ - if((isset($_GET['act'])) && ($_GET['act'] == "edit_entry")){ - $s_entry = $_GET['id']; - $s_action = "edit"; - } - - /* handle C&P from layers menu */ - if(isset($_POST['menu_action']) && preg_match("/^multiple_copy_systems/",$_POST['menu_action'])){ - $s_action = "copy_multiple"; - } - if(isset($_POST['menu_action']) && preg_match("/^multiple_cut_systems/",$_POST['menu_action'])){ - $s_action = "cut_multiple"; - } - if(isset($_POST['menu_action']) && preg_match("/^editPaste/",$_POST['menu_action'])){ - $s_action = "editPaste"; - } - - /* Create options */ - if(isset($_POST['menu_action']) && $_POST['menu_action'] == "group_new"){ - $s_action = "new"; - } - - /* handle remove from layers menu */ - if(isset($_POST['menu_action']) && preg_match("/^remove_multiple/",$_POST['menu_action'])){ - $s_action = "del_multiple"; - } - if(isset($_POST['menu_action']) && $_POST['menu_action'] == "multiple_edit"){ - $s_action = "multiple_edit"; - } - - if(isset($_POST['menu_action']) && preg_match("/^event/",$_POST['menu_action'])){ - $s_action = $_POST['menu_action']; - } - - $smarty= get_smarty(); - - - - /******************** - Create notification event - ********************/ - - if(preg_match("/^event_/",$s_action) && class_available("DaemonEvent")){ - $ids = $this->list_get_selected_items(); - $uids = array(); - foreach($ids as $id){ - $uids[] = $this->grouplist[$id]['cn'][0]; - } - if(count($uids)){ - $events = DaemonEvent::get_event_types(USER_EVENT); - $event = preg_replace("/^event_/","",$s_action); - if(isset($events['BY_CLASS'][$event])){ - $type = $events['BY_CLASS'][$event]; - $this->grouptab = new $type['CLASS_NAME']($this->config); - $this->grouptab->add_groups($uids); - $this->grouptab->set_type(SCHEDULED_EVENT); - } - } - } - - /* Abort event dialog */ - if(isset($_POST['abort_event_dialog'])){ - $this->grouptab = FALSE; - } - - /* Save event */ - if(isset($_POST['save_event_dialog'])){ - $this->grouptab->save_object(); - $msgs = $this->grouptab->check(); - if(count($msgs)){ - msg_dialog::displayChecks($msgs); - }else{ - $o_queue = new gosaSupportDaemon(); - $o_queue->append($this->grouptab); - if($o_queue->is_error()){ - msg_dialog::display(_("Infrastructure error"), msgPool::siError($o_queue->get_error()),ERROR_DIALOG); - }else{ - $this->grouptab = FALSE; - } - } - } - - /* Display event */ - if($this->grouptab instanceof DaemonEvent){ - $this->grouptab->save_object(); - return($this->grouptab->execute()); - } - - - /******************** - Copy & Paste Handling ... - ********************/ - - /* Display the copy & paste dialog, if it is currently open */ - $ret = $this->copyPasteHandling_from_queue($s_action,$s_entry); - if($ret){ - return($ret); - } - - - /******************** - Create a new group ... - ********************/ - - /* New group? */ - if ($s_action=="new"){ - - /* Check create permissions */ - $acl = $this->ui->get_permissions($this->DivListGroup->selectedBase,"groups/group"); - if(preg_match("/c/",$acl)){ - - /* By default we set 'dn' to 'new', all relevant plugins will - react on this. */ - $this->dn= "new"; - - /* Create new grouptab object */ - $this->grouptab= new grouptabs($this->config, $this->config->data['TABS']['GROUPTABS'], $this->dn); - - /* Set up the group ACL's for this 'dn' */ - $this->grouptab->set_acl_base($this->DivListGroup->selectedBase); - } - } - - - /******************** - 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($_POST['edit_apply'])) && (isset($this->grouptab->config)) ){ - - /* Check tabs, will feed message array - Save, or display error message? */ - $message= $this->grouptab->check(); - if (count($message) == 0){ - - /* Save user data to ldap */ - $this->grouptab->save(); - - if (!isset($_POST['edit_apply'])){ - /* Group has been saved successfully, remove lock from LDAP. */ - if ($this->dn != "new"){ - $this->remove_lock(); - } - - /* There's no page reload so we have to read new groups at this point. */ - //$this->reload (); - unset ($this->grouptab); - $this->grouptab= NULL; - set_object_info(); - }else{ - - /* Reinitialize tab */ - if($this->grouptab instanceof tabs){ - $this->grouptab->re_init(); - } - } - } else { - /* Ok. There seem to be errors regarding to the tab data, - show message and continue as usual. */ - msg_dialog::displayChecks($message); - } - } - - - /******************** - Edit multiple entries - ********************/ - - /* User wants to edit data? */ - if ($s_action == "multiple_edit" && !isset($this->grouptab->config)){ - - $this->dn = array(); - foreach($this->list_get_selected_items() as $id){ - $this->dn[] = $this->grouplist[$id]['dn'];; - } - $tmp = new multi_plug($this->config,"grouptabs",$this->config->data['TABS']['GROUPTABS'], - $this->dn,$this->DivListGroup->selectedBase,"groups"); - if ($tmp->entries_locked()){ - return($tmp->display_lock_message()); - } - $tmp->lock_entries($this->ui->dn); - if($tmp->multiple_available()){ - $this->grouptab = $tmp; - set_object_info($this->grouptab->get_object_info()); - } - } - - - /******************** - 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 & lock entry if required */ - $user = get_lock($this->dn); - if ($user != ""){ - return(gen_locked_message ($user, $this->dn,TRUE)); - } - add_lock ($this->dn, $this->ui->dn); - - /* Register grouptab to trigger edit dialog */ - $this->grouptab= new grouptabs($this->config,$this->config->data['TABS']['GROUPTABS'], $this->dn); - $this->grouptab->set_acl_base($this->dn); - set_object_info($this->dn); - } - - - /******************** - Delete MULTIPLE entries requested, display confirm dialog - ********************/ - - if ($s_action=="del_multiple"){ - $ids = $this->list_get_selected_items(); - - if(count($ids)){ - $disallowed = array(); - $this->dns = array(); - foreach($ids as $id){ - $dn = $this->grouplist[$id]['dn']; - $acl = $this->ui->get_permissions($dn, "groups/group"); - if(preg_match("/d/",$acl)){ - $this->dns[$id] = $dn; - }else{ - $disallowed[] = $dn; - } - } - - if(count($disallowed)){ - msg_dialog::display(_("Permission"),msgPool::permDelete($disallowed),INFO_DIALOG); - } - - if(count($this->dns)){ - - /* Check locks */ - if ($user= get_multiple_locks($this->dns)){ - return(gen_locked_message($user,$this->dns)); - } - - $dns_names = array(); - foreach($this->dns as $dn){ - $dns_names[] =LDAP::fix($dn); - } - add_lock ($this->dns, $this->ui->dn); - - /* Lock the current entry, so nobody will edit it during deletion */ - $smarty->assign("info", msgPool::deleteInfo($dns_names,_("group"))); - $smarty->assign("multiple", true); - return($smarty->fetch(get_template_path('remove.tpl', TRUE))); - } - } - } - - - /******************** - Delete MULTIPLE entries confirmed - ********************/ - - /* Confirmation for deletion has been passed. Groups should be deleted. */ - if (isset($_POST['delete_multiple_groups_confirm'])){ - - /* Remove user by user and check acls before removeing them */ - foreach($this->dns as $key => $dn){ - - /* Load permissions for selected 'dn' and check if - we're allowed to remove this 'dn' */ - $acl = $this->ui->get_permissions($dn,"groups/group"); - if(preg_match("/d/",$acl)){ - - /* Delete request is permitted, perform LDAP action */ - $this->grouptab= new grouptabs($this->config,$this->config->data['TABS']['GROUPTABS'], $dn); - $this->grouptab->set_acl_base($dn); - $this->grouptab->delete (); - unset ($this->grouptab); - $this->grouptab= NULL; - - } else { - - /* Normally this shouldn't be reached, send some extra - logs to notify the administrator */ - msg_dialog::display(_("Permission error"), msgPool::permDelete(), ERROR_DIALOG); - new log("security","groups/".get_class($this),$dn,array(),"Tried to trick deletion."); - } - } - - /* Remove lock file after successfull deletion */ - $this->remove_lock(); - $this->dns = array(); - } - - - /******************** - Delete MULTIPLE entries Canceled - ********************/ - - /* Remove lock */ - if(isset($_POST['delete_multiple_group_cancel'])){ - - /* Remove lock file after successfull deletion */ - $this->remove_lock(); - $this->dns = array(); - } - - - /******************** - Delete group - ********************/ - - /* Remove group was requested */ - if ($s_action=="del"){ - - /* Get 'dn' from posted 'uid' */ - $this->dn= $this->grouplist[trim($s_entry)]['dn']; - - /* Load permissions for selected 'dn' and check if - we're allowed to remove this 'dn' */ - $acl = $this->ui->get_permissions($this->dn,"groups/group"); - if(preg_match("/d/",$acl)){ - - /* Check locking, save current plugin in 'back_plugin', so - the dialog knows where to return. */ - if (($user= get_lock($this->dn)) != ""){ - return(gen_locked_message ($user, $this->dn)); - } - - /* Lock the current entry, so nobody will edit it during deletion */ - add_lock ($this->dn, $this->ui->dn); - $smarty->assign("info", msgPool::deleteInfo(LDAP::fix($this->dn),_("group"))); - $smarty->assign("multiple", false); - return($smarty->fetch(get_template_path('remove.tpl', TRUE))); - - } else { - - /* Obviously the user isn't allowed to delete. Show message and clean session. */ - msg_dialog::display(_("Permission error"), msgPool::permDelete()); - } - } - - - /******************** - Delete group confirmed - ********************/ - - /* Confirmation for deletion has been passed. Group should be deleted. */ - if (isset($_POST['delete_group_confirm'])){ - - /* Some nice guy may send this as POST, so we've to check - for the permissions again. */ - $acl = $this->ui->get_permissions($this->dn,"groups/group"); - if(preg_match("/d/",$acl)){ - - /* Delete request is permitted, perform LDAP action */ - $this->grouptab= new grouptabs($this->config,$this->config->data['TABS']['GROUPTABS'], $this->dn); - $this->grouptab->set_acl_base($this->dn); - $this->grouptab->delete (); - unset ($this->grouptab); - $this->grouptab= NULL; - - /* Group list has changed, reload it. */ - //$this->reload (); - - } else { - - /* Normally this shouldn't be reached, send some extra - logs to notify the administrator */ - msg_dialog::display(_("Permission error"), msgPool::permDelete(), ERROR_DIALOG); - new log("security","groups/".get_class($this),$dn,array(),"Tried to trick deletion."); - } - - /* Remove lock file after successfull deletion */ - $this->remove_lock(); - set_object_info(); - } - - - /******************** - Delete group canceled - ********************/ - - /* Delete group canceled? */ - if (isset($_POST['delete_cancel'])){ - $this->remove_lock(); - set_object_info(); - } - - - /******************** - A dialog was canceled - ********************/ - - /* Cancel dialogs */ - if (isset($_POST['edit_cancel']) || isset($_POST['password_cancel'])){ - if(isset($this->grouptab->dn)){ - $this->remove_lock(); - } - $this->grouptab= NULL; - set_object_info(); - } - - - /******************** - If there is currently a dialog open, display it - ********************/ - - /* Show tab dialog if object is present */ - if (isset($this->grouptab->config)){ - $display= $this->grouptab->execute(); - - /* Don't show buttons if tab dialog requests this */ - if(isset($this->grouptab->by_object)){ - - if(($this->grouptab instanceOf tabs || $this->grouptab instanceOf plugin) && $this->grouptab->read_only == TRUE){ - $display.= "

- -

"; - }elseif (!$this->grouptab->by_object[$this->grouptab->current]->dialog){ - $display.= "

\n"; - $display.= "\n"; - $display.= " \n"; - if ($this->dn != "new"){ - $display.= "\n"; - $display.= " \n"; - } - $display.= "\n"; - $display.= "

"; - } - } - return ($display); - } - - - /* Check if there is a snapshot dialog open */ - $base = $this->DivListGroup->selectedBase; - if($str = $this->showSnapshotDialog($base,$this->get_used_snapshot_bases(),$this)){ - return($str); - } - - /* Display dialog with group list */ - $this->DivListGroup->parent = $this; - $this->DivListGroup->execute(); - - /* Add departments if subsearch is disabled */ - if(!$this->DivListGroup->SubSearch){ - $this->DivListGroup->AddDepartments($this->DivListGroup->selectedBase,4,1); - } - $this->reload (); - $this->DivListGroup->setEntries($this->grouplist); - return($this->DivListGroup->Draw()); - } - - - /* Return departments, that will be included within snapshot detection */ - function get_used_snapshot_bases() - { - return(array(get_groups_ou().$this->DivListGroup->selectedBase)); - } - - - function list_get_selected_items() - { - $ids = array(); - foreach($_POST as $name => $value){ - if(preg_match("/^item_selected_[0-9]*$/",$name)){ - $id = preg_replace("/^item_selected_/","",$name); - $ids[$id] = $id; - } - } - return($ids); - } - - - function reload($CreatePosixsList=false) + var $plHeadline = "Groups"; + var $plDescription = "Group administration"; + var $plIcon = "plugins/groups/images/plugin.png"; + + // Tab definition + protected $tabClass = "grouptabs"; + protected $tabType = "GROUPTABS"; + protected $aclCategory = "groups"; + protected $aclPlugin = "group"; + protected $objectName = "group"; + + function __construct($config,$ui) { - $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::get('size_limit')); - - - /******************** - Create filter depending on selected checkboxes - ********************/ - - /* Add application groups */ - if ($ShowApplicationGroups){ - $filter.= "(objectClass=gosaApplicationGroup)"; - } - - /* Add Mail Groups */ - if ($ShowMailGroups){ - $filter.= "(objectClass=gosaMailAccount)"; - } - - $sfilter= ""; - if (!$ShowPrimaryGroups){ - $sfilter= "(objectClass=sambaGroupMapping)"; - } elseif ($ShowSambaGroups){ - $filter.= "(objectClass=sambaGroupMapping)"; - } - - - /* Prepare filter for given Regex && UserRegex */ - if ($filter != ""){ - $filter= "(&(cn=$Regex)(objectClass=posixGroup)(|$filter))"; - if ($UserRegex != ""){ - $filter= "(&(|(memberUID=".$UserRegex.")(cn=".$UserRegex."))$filter)"; - } - } - - - /******************** - 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=*))", - "groups", $base,array("gidNumber", "cn"), GL_SUBSEARCH); - foreach ($res as $attrs){ - $primaries[$attrs['gidNumber'][0]]= $attrs['cn'][0]; - } - } - - /* 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)))"; - if ($SubSearch){ - $res = get_sub_list($ff, "groups",get_groups_ou(), $base,array("gidNumber", "cn", "description"), GL_SUBSEARCH); - } else { - $res = get_sub_list($ff, "groups",get_groups_ou(), $base,array("gidNumber", "cn", "description"), GL_NONE); - } - foreach($res as $attrs){ - if (!isset($primaries[$attrs['gidNumber'][0]])){ - $functional[$attrs['gidNumber'][0]]= $attrs['gidNumber'][0]; - } - } - - /******************** - Search for the prepared filter - ********************/ + $this->config = $config; + $this->ui = $ui; - /* Attributes to search for */ - $attrs = array("cn", "description", "gidNumber", "objectClass"); + $this->storagePoints = array(get_ou("groupRDN")); - /* If subsearch is activated search for subobjects too */ - $tmp = $this->config->search("faiManagement", "CLASS",array('menu','tabs')); - if(!empty($tmp)){ - $attrs [] = "FAIrelease"; - } - - if ($SubSearch){ - $res= get_sub_list($filter, "groups",get_groups_ou(), $base, $attrs, GL_SIZELIMIT| GL_SUBSEARCH); + // Build filter + if (session::global_is_set(get_class($this)."_filter")){ + $filter= session::global_get(get_class($this)."_filter"); } else { - $res= get_sub_list($filter, "groups",get_groups_ou(), get_groups_ou().$base, $attrs, GL_SIZELIMIT); + $filter = new filter(get_template_path("group-filter.xml", true)); + $filter->setObjectStorage($this->storagePoints); } + $this->setFilter($filter); - /* Sort values into grouplist*/ - $tmp = $tmp2 = array(); - foreach ($res as $value){ - /* Skip functional groups if checkbox isn't checked */ - if (!$ShowFunctionalGroups && isset($functional[$value['gidNumber'][0]])){ - continue; - } - - /* 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); - } - + // Build headpage + $headpage = new listing(get_template_path("group-list.xml", true)); + $headpage->setFilter($filter); - function copyPasteHandling_from_queue($s_action,$s_entry) - { - /* Check if Copy & Paste is disabled */ - if(!is_object($this->CopyPasteHandler)){ - return(""); + // Add copy&paste and snapshot handler. + if ($this->config->boolValueIsTrue("main", "copyPaste")){ + $this->cpHandler = new CopyPasteHandler($this->config); } - - $ui = get_userinfo(); - - /* Add a single entry to queue */ - if($s_action == "cut" || $s_action == "copy"){ - - /* Cleanup object queue */ - $this->CopyPasteHandler->cleanup_queue(); - $dn = $this->grouplist[$s_entry]['dn']; - if($s_action == "copy" && $ui->is_copyable($dn,"groups","group")){ - $this->CopyPasteHandler->add_to_queue($dn,$s_action,"grouptabs","GROUPTABS","groups"); - } - if($s_action == "cut" && $ui->is_cutable($dn,"groups","group")){ - $this->CopyPasteHandler->add_to_queue($dn,$s_action,"grouptabs","GROUPTABS","groups"); - } - - } - - - /* Add entries to queue */ - if($s_action == "copy_multiple" || $s_action == "cut_multiple"){ - - /* Cleanup object queue */ - $this->CopyPasteHandler->cleanup_queue(); - - /* Add new entries to CP queue */ - foreach($this->list_get_selected_items() as $id){ - $dn = $this->grouplist[$id]['dn']; - - if($s_action == "copy_multiple" && $ui->is_copyable($dn,"groups","group")){ - $this->CopyPasteHandler->add_to_queue($dn,"copy","grouptabs","GROUPTABS","groups"); - } - if($s_action == "cut_multiple" && $ui->is_cutable($dn,"groups","group")){ - $this->CopyPasteHandler->add_to_queue($dn,"cut","grouptabs","GROUPTABS","groups"); - } - } - } - - /* Start pasting entries */ - if($s_action == "editPaste"){ - $this->start_pasting_copied_objects = TRUE; - } - - /* Return C&P dialog */ - if($this->start_pasting_copied_objects && $this->CopyPasteHandler->entries_queued()){ - - /* Get dialog */ - $this->CopyPasteHandler->SetVar("base",$this->DivListGroup->selectedBase); - $data = $this->CopyPasteHandler->execute(); - - /* Return dialog data */ - if(!empty($data)){ - return($data); - } - } - - /* Automatically disable status for pasting */ - if(!$this->CopyPasteHandler->entries_queued()){ - $this->start_pasting_copied_objects = FALSE; - } - return(""); - } - - - /* Save data to object */ - function save_object() - { - $this->DivListGroup->save_object(); - if(is_object($this->CopyPasteHandler)){ - $this->CopyPasteHandler->save_object(); - } - } - - - function remove_lock() - { - if (isset($this->grouptab->dn)){ - del_lock ($this->grouptab->dn); - }elseif(isset($this->dn) && !empty($this->dn) && $this->dn != "new"){ - del_lock($this->dn); - } - if(isset($this->dns) && is_array($this->dns) && count($this->dns)){ - del_lock($this->dns); + if($this->config->get_cfg_value("enableSnapshots") == "true"){ + $this->snapHandler = new SnapshotHandler($this->config); } + parent::__construct($config, $ui, "groups", $headpage); } - - - 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, $skip= array()) { } - function password_change_needed() { } -} +} // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?> diff --git a/gosa-core/plugins/admin/groups/group-filter.tpl b/gosa-core/plugins/admin/groups/group-filter.tpl new file mode 100644 index 000000000..52b0b7993 --- /dev/null +++ b/gosa-core/plugins/admin/groups/group-filter.tpl @@ -0,0 +1,34 @@ +
+

+ [F]{t}Filter{/t} +

+
+ +
+ +
+ +
+ {$SCOPE} + + + + + + +
+ + + {$NAME} +
+ + + + + +
+ {$APPLY} +
+
diff --git a/gosa-core/plugins/admin/groups/group-filter.xml b/gosa-core/plugins/admin/groups/group-filter.xml new file mode 100644 index 000000000..97b4c634a --- /dev/null +++ b/gosa-core/plugins/admin/groups/group-filter.xml @@ -0,0 +1,40 @@ + + + + + groups + + true + + + + + LDAP + (&(objectClass=posixGroup)) + dn + objectClass + cn + description + + auto + + + + textfield + NAME + 20 + 60 + + + (|(cn=*$*)(sn=*$*)(givenName=*$*)) + true + + LDAP + (&(objectClass=posixGroup)(|(cn=*$NAME*))) + cn + 0.5 + 3 + + + + diff --git a/gosa-core/plugins/admin/groups/group-list.tpl b/gosa-core/plugins/admin/groups/group-list.tpl new file mode 100644 index 000000000..b233c5874 --- /dev/null +++ b/gosa-core/plugins/admin/groups/group-list.tpl @@ -0,0 +1,31 @@ + + + + + + + +
+
+

 {$HEADLINE} {$SIZELIMIT}

+
+ +
+
+ + +
{$ROOT} {$BACK} {$HOME} {$RELOAD} {$SEPARATOR} {t}Base{/t} {$BASE}  {$SEPARATOR}  {$ACTIONS}
+
+
+ +
+
+ + + + {$LIST} +
+ {$FILTER} +
+ + diff --git a/gosa-core/plugins/admin/groups/group-list.xml b/gosa-core/plugins/admin/groups/group-list.xml new file mode 100644 index 000000000..6591cd841 --- /dev/null +++ b/gosa-core/plugins/admin/groups/group-list.xml @@ -0,0 +1,143 @@ + + + + + true + false + true + true + + groups + + 1 + + + + posixGroup + groups + group + plugins/groups/images/groups.png + + + + + + |16px||250px|170px;r| + + + %{filter:objectType(dn,objectClass)} + + + + %{filter:departmentLink(row,dn,description)} + 1 + + + + %{filter:objectType(dn,objectClass)} + + + + + cn + string + %{filter:link(row,dn,"%s",cn)} + true + + + + + description + string + %{filter:link(row,dn,"%s",description)} + true + + + + + %{filter:actions(dn,row,objectClass)} + + +
+ + + + + sub + images/lists/new.png + + + + new + entry + plugins/groups/images/new.png + + + + + + separator + + + + edit + entry + images/lists/edit.png + + + + + remove + entry + images/lists/trash.png + + + + + exporter + + + + separator + + + + copypaste + + + + snapshot + + + + + + + + cp + copypaste + + + + edit + entry + images/lists/edit.png + + + + + snapshot + snapshot + + + + remove + entry + images/lists/trash.png + groups/group[d] + + + + + +
diff --git a/gosa-core/plugins/admin/groups/main.inc b/gosa-core/plugins/admin/groups/main.inc index 30fd058be..54f7ea3f4 100644 --- a/gosa-core/plugins/admin/groups/main.inc +++ b/gosa-core/plugins/admin/groups/main.inc @@ -35,25 +35,13 @@ if ( $cleanup ){ session::un_set('groupManagement'); }else{ - /* Create groupManagement object on demand */ + /* Create groupmanagement object on demand */ if (!session::is_set('groupManagement')){ - session::set('groupManagement',new groupManagement ($config, $ui)); + $groupManagement= new groupManagement ($config, $ui); + session::set('groupManagement',$groupManagement); } $groupManagement = session::get('groupManagement'); - $groupManagement->save_object(); - $output= $groupManagement->execute(); - - /* Page header*/ - if (get_object_info() != ""){ - $display= print_header(get_template_path('plugins/groups/images/plugin.png'), - _("Group administration"), "\"\" ". - LDAP::fix(get_object_info())); - } else { - $display= print_header(get_template_path('plugins/groups/images/plugin.png'), _("Group administration")); - } - - $display.= $output; + $display= $groupManagement->execute(); /* Reset requested? */ if (isset($_GET['reset']) && $_GET['reset'] == 1){ diff --git a/gosa-core/plugins/admin/groups/remove.tpl b/gosa-core/plugins/admin/groups/remove.tpl index 39157da1a..7735c280e 100644 --- a/gosa-core/plugins/admin/groups/remove.tpl +++ b/gosa-core/plugins/admin/groups/remove.tpl @@ -11,17 +11,7 @@

- - {if $multiple} - -   - - {else} - +   - {/if} - -

- -- 2.30.2