From 6ae3f15d95defd17cdb21526cb1fe97484b6021a Mon Sep 17 00:00:00 2001 From: hickert Date: Wed, 4 Nov 2009 13:49:31 +0000 Subject: [PATCH] Ported roleManagement to new lists git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@14743 594d385d-05f5-0310-b6e9-bd551577e9d8 --- .../roleManagement/class_divListRole.inc | 232 -------- .../roleManagement/class_roleManagement.inc | 538 ++---------------- .../admin/roleManagement/main.inc | 37 +- .../admin/roleManagement/paste_generic.tpl | 4 +- .../admin/roleManagement/tabs_roles.inc | 4 +- 5 files changed, 75 insertions(+), 740 deletions(-) delete mode 100644 gosa-plugins/rolemanagement/admin/roleManagement/class_divListRole.inc diff --git a/gosa-plugins/rolemanagement/admin/roleManagement/class_divListRole.inc b/gosa-plugins/rolemanagement/admin/roleManagement/class_divListRole.inc deleted file mode 100644 index 596f8baf3..000000000 --- a/gosa-plugins/rolemanagement/admin/roleManagement/class_divListRole.inc +++ /dev/null @@ -1,232 +0,0 @@ -parent = $parent; - $this->ui = get_userinfo(); - - // Dynamic action col, depending on snapshot icons - $action_col_size = 90; - if($this->parent->snapshotEnabled()){ - $action_col_size += 38; - } - - // Set list strings - $this->SetTitle(_("List of roles")); - $this->SetSummary(_("List of roles")); - $this->EnableAplhabet(true); - - // Result page will look like a headpage - $this->SetHeadpageMode(); - - // Disable buttonsm - $this->EnableCloseButton(false); - $this->EnableSaveButton (false); - - // Add checkbox: Toggle all selected / deselected - $chk = ""; - - // Set Page col headers - $this->AddHeader(array("string" => $chk,"attach"=>"style='width:20px;'")); - $this->AddHeader(array("string" => " ", "attach" => "style='text-align:center;width:20px;'")); - $this->AddHeader(array("string" => _("Role")." / "._("Department"), "attach" => "style=''")); - $this->AddHeader(array("string" => _("Actions"), - "attach" => "style='width:".$action_col_size."px;border-right:0px;text-align:right;'")); - - // Add SubSearch checkbox - //$this->AddCheckBox(SEPERATOR); - $this->AddCheckBox("SubSearch", msgPool::selectToView("","subsearch"), - msgPool::selectToView("","subsearch_small"), false); - - // Add regex user input field - $this->AddRegex ("Regex", _("Regular expression for matching role names"), "*" , true); - } - - - 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); - - /* Add a seperator after displaying c&p and snapshot icons ? */ - $add_sep = false; - - /* Get copy & paste icon */ - $acls = $ui->get_permissions($this->selectedBase,"roles/roleGeneric"); - $acl_all= $ui->has_complete_category_acls($this->selectedBase,"roles"); - - /* Add default header */ - $listhead = MultiSelectWindow::get_default_header(); - - /* Add department selector */ - $listhead .= _("Base")." ". - "  "; - - /* Create Layers menu */ - $s = ".|"._("Actions")."|\n"; - - /* Append create options */ - if(preg_match("/c/",$acls)) { - $s .= "..|". - " "._("Create")."|\n"; - $s.= "...|". - " "._("Role")."|role_new|\n"; - } - - /* Multiple options */ - $s.= "..|---|\n"; - $s.= "..|". - " "._("Remove")."|"."remove_multiple_roles|\n"; - - /* Add Copy & Paste header */ - $s .= $this->parent->get_copypaste_header($this->selectedBase,$this->module); - - /* Add snapshot icons */ - $s .= $this->parent->get_snapshot_header($this->selectedBase,$this->module); - - $this->SetDropDownHeaderMenu($s); - $this->SetListHeader($listhead); - } - - - function execute() - { - $this->ClearElementsList(); - $this->GenHeader(); - } - - function setEntries($list) - { - // Defining Links - $editlink = "%s"; - - // Dynamic action col, depending on snapshot icons - $action_col_size = 90; - if($this->parent->snapshotEnabled()){ - $action_col_size += 38; - } - - $ui = get_userinfo(); - - // Assigning roles - foreach($list as $key => $val){ - - // Get object permissions - $acl = $ui->get_permissions($val['dn'],"roles/roleGeneric"); - $acl_all= $ui->has_complete_category_acls($val['dn'],"roles"); - - - // Add copy & cut functionality */ - $actions = $this->parent->get_copypaste_action($val['dn'],"roles","roleGeneric"); - - // Create edit and remove icon buttons - $actions.= ""; - - $actions.= $this->parent->get_snapshot_action($val['dn'],$this->module); - if(preg_match("/d/",$acl)){ - $actions.= ""; - }else{ - $actions.= " "; - } - - // Append role descriptio, if available - $title = "title='".preg_replace('/ /', ' ', LDAP::fix($val['dn']))."'"; - if(!isset($val['description'][0])){ - $desc = ""; - }else{ - $desc = " - [ ".$val['description'][0]." ]"; - } - - // Cutted entry are displayed in a light grey as indication. - $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; - } - } - } - - // Append the entry to the divlist - $field0 = array("string" => "" , - "attach" => "style='width:20px;'"); - $field1 = array("string" => ""._("Role")."", - "attach" => "style='text-align:center;width: 20px;'"); - $field2 = array("string" => sprintf($editlink,$key,$display), - "attach" => "style='' ".$title); - $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,$field4)); - } - - - // Create the list summary - $num_deps=0; - if(!$this->SubSearch){ - $num_deps = count($this->Added_Departments); - } - $num_objs = count($list); - $num_obj_str = _("Number of listed roles"); - $num_dep_str = _("Number of listed departments"); - $str = "".$num_obj_str." ".$num_objs."    "; - $str.= "".$num_dep_str." ".$num_deps."    "; - $this->set_List_Bottom_Info($str); - } -} -// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: -?> diff --git a/gosa-plugins/rolemanagement/admin/roleManagement/class_roleManagement.inc b/gosa-plugins/rolemanagement/admin/roleManagement/class_roleManagement.inc index 31f2fdaf8..98b71d8e6 100644 --- a/gosa-plugins/rolemanagement/admin/roleManagement/class_roleManagement.inc +++ b/gosa-plugins/rolemanagement/admin/roleManagement/class_roleManagement.inc @@ -1,489 +1,67 @@ config= &$config; - $this->ui= get_userinfo(); - - // Copy & Paste enabled ? - if ($this->config->get_cfg_value("copyPaste") == "true"){ - $this->CopyPasteHandler = new CopyPasteHandler($this->config); - } - - // Initialize the corresponding list class. - $this->DivListRoles = new divListRole($this->config,$this); - } - - - function execute() - { - // Call parent execute - plugin::execute(); - - // Variables to restore after 'entry locked' warning was displayed - session::set('LOCK_VARS_TO_USE',array('/^copy/','/^cut/','/^role_/','/^act/', - '/^id/','/^menu_action/','/^item/')); - - $smarty = get_smarty(); - - /*************** - * Handle _POST/_GET variables - ***************/ + $this->config = $config; + $this->ui = $ui; - // Get entry related posts - $s_action = ""; - $s_entry = ""; - foreach($_POST as $name => $value){ - if(preg_match("/^cut_/",$name)){ - $s_action = "cut"; - $s_entry = preg_replace("/^cut_([0-9]*)_.*$/","\\1",$name); - break; - } - if(preg_match("/^copy_/",$name)){ - $s_action = "copy"; - $s_entry = preg_replace("/^copy_([0-9]*)_.*$/","\\1",$name); - break; - } - if(preg_match("/^role_edit_/",$name)){ - $s_action = "edit"; - $s_entry = preg_replace("/^role_edit_([0-9]*)_.*$/","\\1",$name); - break; - } - if(preg_match("/^role_del_/",$name)){ - $s_action = "remove"; - $s_entry = preg_replace("/^role_del_([0-9]*)_.*$/","\\1",$name); - break; - } - } - - if(isset($_GET['act']) && $_GET['act'] == "edit_entry" && isset($_GET['id'])){ - $id = $_GET['id']; - if(isset($this->roles[$id])){ - $s_action = "edit"; - $s_entry = $id; - } - } - - // Get menu related posts - if(isset($_POST['menu_action'])) { - if($_POST['menu_action'] == "editPaste"){ - $s_action = "editPaste"; - }elseif($_POST['menu_action'] == "role_new"){ - $s_action = "new"; - }elseif($_POST['menu_action'] == "remove_multiple_roles"){ - $s_action = "remove_multiple"; - } - } - - /*************** - * 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); - } - - - /*************** - * Remove handling - ***************/ - - if($s_action == "remove_multiple" || $s_action == "remove"){ - - if($s_action == "remove_multiple"){ - $ids = $this->list_get_selected_items(); - }else{ - $ids = array($s_entry); - } - - if(count($ids)){ - $this->dns = array(); - $disallowed = array(); - foreach($ids as $id){ - $dn = $this->roles[$id]['dn']; - $acl = $this->ui->get_permissions($dn, "roles/roleGeneric"); - 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)){ - 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); - } - - /* Lock the current entry, so nobody will edit it during deletion */ - add_lock ($this->dns, $this->ui->dn); - - $smarty->assign("info", msgPool::deleteInfo($dns_names,_("Role"))); - $smarty->assign("multiple", true); - return($smarty->fetch(get_template_path('remove.tpl', TRUE))); - } - } - } - - - /* Remove lock */ - if(isset($_POST['delete_multiple_roles_cancel'])){ - - /* Remove lock file after successfull deletion */ - $this->remove_lock(); - $this->dns = array(); - } - - - /* Confirmation for deletion has been passed. Users should be deleted. */ - if (isset($_POST['delete_multiple_roles_confirm'])){ - - /* Remove user by user and check acls before removeing them */ - foreach($this->dns as $key => $dn){ - - $acl = $this->ui->get_permissions($dn, "roles/roleGeneric"); - if (preg_match('/d/', $acl)){ - - /* Delete request is permitted, perform LDAP action */ - $this->dialog= new roletabs($this->config,$this->config->data['TABS']['ROLETABS'], $dn); - $this->dialog->delete(); - $this->dialog= NULL; - } else { - - /* Normally this shouldn't be reached, send some extra - logs to notify the administrator */ - msg_dialog::display(_("Permission error"), msgPool::permDelete(), INFO_DIALOG); - new log("security","roles/".get_class($this),$dn,array(),"Tried to trick deletion."); - } - } - - /* Remove lock file after successfull deletion */ - $this->remove_lock(); - $this->dns = array(); - } - - - /*************** - * New handling - ***************/ - - if($s_action == "new" && !$this->dialog instanceOf tabs){ - $this->dialog = new roletabs($this->config, $this->config->data['TABS']['ROLETABS'], "new"); - $this->dialog->set_acl_base($this->DivListRoles->selectedBase); - } - - /*************** - * Edit handling - ***************/ - - if($s_action == "edit" && !$this->dialog instanceOf tabs){ - if(!isset($this->roles[$s_entry])){ - trigger_error("Unknown entry!"); - }else{ - - $entry = $this->roles[$s_entry]; - $this->dn = $entry['dn']; - - /* 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,TRUE)); - } - - /* Lock the current entry, so everyone will get the above dialog */ - add_lock ($this->dn, $this->ui->dn); - - /* Open the dialog */ - $this->dialog = new roletabs($this->config, $this->config->data['TABS']['ROLETABS'], - $entry['dn'], "roles"); - $this->dialog->set_acl_base($this->dn); - set_object_info($this->dn); - } - } - - - /*************** - * Dialog handling - ***************/ - - if ((isset($_POST['edit_finish']) || isset($_POST['edit_apply'])) && $this->dialog instanceOf tabs){ - $this->dialog->save_object(); - $msgs = $this->dialog->check(); - if(count($msgs)){ - msg_dialog::displayChecks($msgs); - }else{ - $this->dialog->save(); - if (!isset($_POST['edit_apply'])){ - $this->remove_lock(); - $this->dialog= NULL; - set_object_info(); - }else{ - $this->dialog->re_init(); - } - } - } - - if (isset($_POST['edit_cancel']) && $this->dialog instanceOf tabs){ - $this->remove_lock(); - $this->dialog= NULL; - set_object_info(); - } - - if($this->dialog instanceOf tabs){ - $display= $this->dialog->execute(); - - $dialog_opened = ($this->dialog->by_object[$this->dialog->current]->dialog instanceOf plugin); - - if(!$dialog_opened){ - if($this->dialog->read_only == TRUE){ - $display.= "

- -

"; - }else{ - - $display.= "

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

"; - } - } - return ($display); - } - - - /*************** - * List handling - ***************/ - - // Check if there is a snapshot dialog open - $base = $this->DivListRoles->selectedBase; - if($str = $this->showSnapshotDialog($base,$this->get_used_snapshot_bases(),$this)){ - return($str); - } - - // Display dialog with group list - $this->DivListRoles->parent = $this; - $this->DivListRoles->execute(); - - // Add departments if subsearch is disabled - if(!$this->DivListRoles->SubSearch){ - $this->DivListRoles->AddDepartments($this->DivListRoles->selectedBase,3,1); - } - $this->reload (); - $this->DivListRoles->setEntries($this->roles); - return($this->DivListRoles->Draw()); - } - - - // Refreshes the list of known role objects. - function reload() - { - - // Get current ldap base and filter settings. - $base = $this->DivListRoles->selectedBase; - $Regex = $this->DivListRoles->Regex; - - // Search and fetch all matching role objects. - $this->roles = array(); - $ldap = $this->config->get_ldap_link(); - $filter= "(&(objectClass=organizationalRole)(cn=$Regex))"; - $attrs = array("cn","description","objectClass"); - - if($this->DivListRoles->SubSearch){ - $res= get_sub_list($filter, "roles",array(), $base, $attrs, GL_SIZELIMIT | GL_SUBSEARCH); - }else{ - $res= get_sub_list($filter, "roles",get_ou('roleRDN'), get_ou('roleRDN').$base, $attrs, GL_SIZELIMIT ); - } - - $tmp = array(); - foreach($res as $attrs){ - $tmp[$attrs['cn'][0].$attrs['dn']] = $attrs; - } - - uksort($tmp, 'strnatcasecmp'); - $this->roles = array_values($tmp); - } - - - /* \brief Returns a list of selected entry ids. - * E.g. remove multiple entries. - * @return Array A list of entry IDs - */ - 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 remove_lock() - { - if (isset($this->dialog->dn)){ - del_lock ($this->dialog->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); - } - } - - - /* Return departments, that will be included within snapshot detection - */ - function get_used_snapshot_bases() - { - return(array(get_ou('roleRDN').$this->DivListRoles->selectedBase)); - } - - - function copyPasteHandling_from_queue($s_action,$s_entry) - { - /* Check if Copy & Paste is disabled */ - if(!is_object($this->CopyPasteHandler)){ - return(""); - } - - $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->roles[$s_entry]['dn']; - if($s_action == "copy" && $ui->is_copyable($dn,"roles","roleGeneric")){ - $this->CopyPasteHandler->add_to_queue($dn,$s_action,"roletabs","ROLETABS","roles"); - } - if($s_action == "cut" && $ui->is_cutable($dn,"roles","roleGeneric")){ - $this->CopyPasteHandler->add_to_queue($dn,$s_action,"roletabs","ROLETABS","roles"); - } - } - - /* 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->roles[$id]['dn']; - - if($s_action == "copy_multiple" && $ui->is_copyable($dn,"roles","roleGeneric")){ - $this->CopyPasteHandler->add_to_queue($dn,"copy","roletabs","ROLETABS","roles"); - } - if($s_action == "cut_multiple" && $ui->is_cutable($dn,"roles","roleGeneric")){ - $this->CopyPasteHandler->add_to_queue($dn,"cut","roletabs","ROLETABS","roles"); - } - } - } - - /* 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->DivListRoles->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(""); - } - + $this->storagePoints = array(get_ou("roleRDN")); - function save_object() - { - $this->DivListRoles->save_object(); - if(is_object($this->CopyPasteHandler)){ - $this->CopyPasteHandler->save_object(); - } +# // Build filter +# if (session::global_is_set(get_class($this)."_filter")){ +# $filter= session::global_get(get_class($this)."_filter"); +# } else { + $filter = new filter(get_template_path("role-filter.xml", true)); + $filter->setObjectStorage($this->storagePoints); +# } + $this->setFilter($filter); + + // Build headpage + $headpage = new listing(get_template_path("role-list.xml", true)); + $headpage->setFilter($filter); + + // Add copy&paste and snapshot handler. + if ($this->config->boolValueIsTrue("main", "copyPaste")){ + $this->cpHandler = new CopyPasteHandler($this->config); + } + if($this->config->get_cfg_value("enableSnapshots") == "true"){ + $this->snapHandler = new SnapshotHandler($this->config); + } + parent::__construct($config, $ui, "roles", $headpage); } -} - +} // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?> diff --git a/gosa-plugins/rolemanagement/admin/roleManagement/main.inc b/gosa-plugins/rolemanagement/admin/roleManagement/main.inc index 90906cc07..7e2d82fec 100644 --- a/gosa-plugins/rolemanagement/admin/roleManagement/main.inc +++ b/gosa-plugins/rolemanagement/admin/roleManagement/main.inc @@ -3,7 +3,7 @@ * This code is part of GOsa (http://www.gosa-project.org) * Copyright (C) 2003-2008 GONICUS GmbH * - * ID: $$Id: main.inc 13288 2008-12-12 14:54:13Z hickert $$ + * ID: $$Id: main.inc 14740 2009-11-04 09:41:16Z hickert $$ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,46 +20,35 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -// Remove locks created by this plugin +/* Remove locks created by this plugin +*/ if ($remove_lock){ if(session::is_set('roleManagement')){ - $macl = session::get('roleManagement'); - $macl->remove_lock(); + $macl = session::get('roleManagement'); + $macl->remove_lock(); } } /* Remove this plugin from session */ if ( $cleanup ){ - $macl = session::get('roleManagement'); - $macl->remove_lock(); session::un_set('roleManagement'); }else{ - /* Create object object on demand */ + /* Create rolemanagement object on demand */ if (!session::is_set('roleManagement')){ - session::set('roleManagement',new roleManagement($config)); + $roleManagement= new roleManagement ($config, $ui); + session::set('roleManagement',$roleManagement); } $roleManagement = session::get('roleManagement'); + $display= $roleManagement->execute(); - /* Execute formular */ - $roleManagement->save_object(); - $output= $roleManagement->execute (); - - /* Page header*/ - if (get_object_info() != ""){ - $display= print_header(get_template_path('plugins/rolemanagement/images/plugin.png'), - _("Roles"), - "\"\" ". - LDAP::fix(get_object_info())); - } else { - $display= print_header(get_template_path('plugins/rolemanagement/images/plugin.png'), _("Role management")); + /* Reset requested? */ + if (isset($_GET['reset']) && $_GET['reset'] == 1){ + session::un_set ('roleManagement'); } - $display.= $output; - - /* Store changes in session */ + /* Show and save dialog */ session::set('roleManagement',$roleManagement); } diff --git a/gosa-plugins/rolemanagement/admin/roleManagement/paste_generic.tpl b/gosa-plugins/rolemanagement/admin/roleManagement/paste_generic.tpl index 91f84d8ae..8d1bf3fd5 100644 --- a/gosa-plugins/rolemanagement/admin/roleManagement/paste_generic.tpl +++ b/gosa-plugins/rolemanagement/admin/roleManagement/paste_generic.tpl @@ -1,10 +1,10 @@
- {$must} + {$must} - +
diff --git a/gosa-plugins/rolemanagement/admin/roleManagement/tabs_roles.inc b/gosa-plugins/rolemanagement/admin/roleManagement/tabs_roles.inc index f7f9b34be..0441fdbb9 100644 --- a/gosa-plugins/rolemanagement/admin/roleManagement/tabs_roles.inc +++ b/gosa-plugins/rolemanagement/admin/roleManagement/tabs_roles.inc @@ -3,7 +3,7 @@ * This code is part of GOsa (http://www.gosa-project.org) * Copyright (C) 2003-2008 GONICUS GmbH * - * ID: $$Id: tabs_group.inc 9275 2008-03-04 07:29:22Z cajus $$ + * ID: $$Id: tabs_role.inc 9275 2008-03-04 07:29:22Z cajus $$ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -57,7 +57,7 @@ class roletabs extends tabs 'dn' to all plugins */ $new_dn= 'cn='.$baseobject->cn.','.get_ou("roleRDN").$baseobject->base; - /* Move group? */ + /* Move role? */ if ($this->dn != $new_dn){ /* Write entry on new 'dn' */ -- 2.30.2