From: hickert Date: Thu, 5 Nov 2009 10:00:17 +0000 (+0000) Subject: Ported ogroups to new listing. X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=bf5082df658ccc3f3ff9a22ae00e407e8bcb5a17;p=gosa.git Ported ogroups to new listing. -Not yet finshed. git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@14752 594d385d-05f5-0310-b6e9-bd551577e9d8 --- diff --git a/gosa-core/plugins/admin/ogroups/class_divListOGroup.inc b/gosa-core/plugins/admin/ogroups/class_divListOGroup.inc deleted file mode 100644 index e9490509c..000000000 --- a/gosa-core/plugins/admin/ogroups/class_divListOGroup.inc +++ /dev/null @@ -1,305 +0,0 @@ -AddCheckBox */ - var $UserGroups ; - var $GroupGroups ; - var $ApplicationGroups ; - var $DepartmentGroups ; - var $ServerGroups ; - var $WorkstationGroups ; - var $WindowsGroups ; - var $TerminalGroups ; - var $PrinterGroups ; - var $PhoneGroups ; - - - /* Subsearch checkbox */ - var $SubSearch ; - var $parent ; - var $ui ; - - function divListOGroup (&$config,$parent) - { - MultiSelectWindow::MultiSelectWindow($config, "OGroups", "ogroups"); - - $this->parent = $parent; - $this->ui = get_userinfo(); - - /* Set list strings */ - $this->SetTitle(_("List of object groups")); - $this->SetSummary(_("List of object 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 = 90; - 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='text-align:center;width:20px;'")); - $this->AddHeader(array("string" => _("Object group")." / "._("Department"), "attach" => "style=''")); - $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-align:right;'")); - - /* Text ,Value ,Name ,Is selected */ - $str2 = _("Show %s"); - $this->AddCheckBox("UserGroups" , sprintf($str2, _("user groups")), - sprintf($str2, _("user groups")), true); - $this->AddCheckBox("GroupGroups" , sprintf($str2, _("nested groups")), - sprintf($str2, _("nested groups")), true); - $this->AddCheckBox("ApplicationGroups", sprintf($str2, _("application groups")), - sprintf($str2, _("application groups")), true); - $this->AddCheckBox("DepartmentGroups" , sprintf($str2, _("department groups")), - sprintf($str2, _("department groups")), true); - $this->AddCheckBox("ServerGroups" , sprintf($str2, _("server groups")), - sprintf($str2, _("server groups")), true); - $this->AddCheckBox("WorkstationGroups", sprintf($str2, _("workstation groups")), - sprintf($str2, _("workstation groups")), true); - $this->AddCheckBox("WindowsGroups", sprintf($str2, _("windows workstation groups")), - sprintf($str2, _("windows workstation groups")), true); - $this->AddCheckBox("TerminalGroups" , sprintf($str2, _("terminal groups")), - sprintf($str2, _("terminal groups")), true); - $this->AddCheckBox("PrinterGroups" , sprintf($str2, _("printer groups")), - sprintf($str2, _("printer groups")), true); - $this->AddCheckBox("PhoneGroups" , sprintf($str2, _("phone groups")), - sprintf($str2, _("phone groups")), true); - - /* Add SubSearch checkbox */ - $this->AddCheckBox(SEPERATOR); - $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); - } - - - 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 base */ - $tmp = array(); - $tmp[] = array("dn"=>$this->config->current['BASE']); - $tmp= array_merge($tmp,get_list("(&(|(ou=*)(description=*))(objectClass=gosaDepartment))", $this->module, $base, - array("ou", "description"), GL_SIZELIMIT | GL_SUBSEARCH)); - - /* Add a seperator after displaying c&p and snapshot icons ? */ - $add_sep = false; - - /* Get copy & paste icon */ - $acls = $ui->get_permissions($this->selectedBase,"ogroups/ogroup"); - $acl_all= $ui->has_complete_category_acls($this->selectedBase,"ogroups"); - - - /* 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.= "...|". - " "._("Object group")."|group_new|\n"; - } - - /* Multiple options */ - $s.= "..|---|\n"; -# $s.= "..|". -# " "._("Edit")."|"."multiple_edit|\n"; - $s.= "..|". - " "._("Remove")."|"."remove_multiple_ogroups/|\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 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) - { - /* Add Copy & Paste buttons if copy&paste is enabled - */ - // Defining Links - $editlink = "%s"; - $userimg = "User"; - $mailimg = "M"; - $empty = ""; - - /* Dynamic action col, depending on snapshot icons */ - $action_col_size = 90; - if($this->parent->snapshotEnabled()){ - $action_col_size += 38; - } - - $ui = get_userinfo(); - - // Assigning ogroups - foreach($list as $key => $val){ - - $actions = ""; - - /* Create action icons */ - $acl = $ui->get_permissions($val['dn'],"ogroups/ogroup"); - $acl_all= $ui->has_complete_category_acls($val['dn'],"ogroups"); - - /* Add copy & cut functionality */ - $actions.= $this->parent->get_copypaste_action($val['dn'],"ogroups","ogroup"); - - $actions.= ""; - - $actions.= $this->parent->get_snapshot_action($val['dn'],$this->module); - - if(preg_match("/d/",$acl)){ - $actions.= ""; - }else{ - $actions.= " "; - } - - if(isset($val['mail'])){ - $mail = $mailimg; - }else{ - $mail = $empty; - } - $title = "title='".preg_replace('/ /', ' ', LDAP::fix($val['dn']))."'"; - if(!isset($val['description'][0])){ - $desc = ""; - }else{ - $desc = " - [ ".$val['description'][0]." ]"; - } - - /* 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; - } - } - } - - /* Create each field */ - $field0 = array("string" => "" , - "attach" => "style='width:20px;'"); - $field1 = array("string" => ""._("Object group")."", "attach" => "style='text-align:center;width: 20px;'"); - $field2 = array("string" => sprintf($editlink,$key,$display), "attach" => "style='' ".$title); - $field3 = array("string" => preg_replace("/%KEY/", $key, $this->parent->convert_list($val))." ".$mail, "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_objs = count($list); - - $num_obj_str = _("Number of listed object groups"); - $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); - } - - 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/ogroups/class_ogroupManagement.inc b/gosa-core/plugins/admin/ogroups/class_ogroupManagement.inc index 49a434fcf..0d7e55db6 100644 --- a/gosa-core/plugins/admin/ogroups/class_ogroupManagement.inc +++ b/gosa-core/plugins/admin/ogroups/class_ogroupManagement.inc @@ -20,554 +20,73 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -class ogroupManagement extends plugin +class ogroupManagement extends management { - /* Definitions */ - var $plHeadline= "Object groups"; - var $plDescription= "Manage object groups"; - - /* attribute list for save action */ - var $attributes= array(); - var $objectclasses= array(); - var $obtypes= array(); - var $ogroup; - - var $CopyPasteHandler = NULL; - var $DivListOGroup = NULL; - var $start_pasting_copied_objects = FALSE; - - var $dns = array(); - var $acl_module = array("ogroups"); - - function ogroupManagement (&$config, $dn= NULL) + var $plHeadline = "Object groups"; + var $plDescription = "Manage object groups"; + var $plIcon = "plugins/ogroups/images/plugin.png"; + + // Tab definition + protected $tabClass = "ogrouptabs"; + protected $tabType = "OGROUPTABS"; + protected $aclCategory = "ogroups"; + protected $aclPlugin = "ogroup"; + protected $objectName = "object group"; + + function __construct($config,$ui) { - /* Include config object */ - $this->config= &$config; - $this->ui= get_userinfo(); - - /* Copy & Paste enabled ? - */ - if ($this->config->get_cfg_value("copyPaste") == "true"){ - $this->CopyPasteHandler = new CopyPasteHandler($this->config); - } + $this->config = $config; + $this->ui = $ui; + + $this->storagePoints = array(get_ou("ogroupRDN")); + +# // 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("ogroup-filter.xml", true)); + $filter->setObjectStorage($this->storagePoints); +# } + $this->setFilter($filter); + + // Build headpage + $headpage = new listing(get_template_path("ogroup-list.xml", true)); + $headpage->registerElementFilter("filterProperties", "ogroupManagement::filterProperties"); + $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, "ogroups", $headpage); - /* Div lsit management */ - $this->DivListOGroup = new divListOGroup($this->config,$this); + $this->registerAction("edit_group","editEntry"); + $this->registerAction("edit_environment","editEntry"); + $this->registerAction("edit_appgroup","editEntry"); + $this->registerAction("edit_mailgroup","editEntry"); } - function execute() + function editEntry($action="",$target=array(),$all=array(), $altTabClass ="", $altTabType = "", $altAclCategory="") { - /* Call parent execute */ - plugin::execute(); - - /**************** - Variable intialisation && Check posts for commands - ****************/ - - session::set('LOCK_VARS_TO_USE',array("/^act$/","/^id$/","/^group_edit_/","/^group_del_/","/^item_selected/","/^remove_multiple_ogroups/","/^menu_action/")); - - $smarty = get_smarty(); - $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("/^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_ogroups/",$key)){ - $s_action="del_multiple"; - }elseif(preg_match("/^multiple_cut_ogroups/",$key)){ - $s_action = "cut_multiple"; - }elseif(preg_match("/^multiple_copy_ogroups/",$key)){ - $s_action = "copy_multiple"; - }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; - } - } - $s_entry = preg_replace("/_.$/","",$s_entry); - - // Edit if - if((isset($_GET['act']))&&($_GET['act']=="edit_entry")){ - $s_action ="edit"; - $s_entry = $_GET['id']; - } - - - - /* 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"; - } + management::editEntry($action,$target); - /* Hanlde notification event requests */ - if(isset($_POST['menu_action']) && preg_match("/^event/",$_POST['menu_action'])){ - $s_action = $_POST['menu_action']; - } - - - /******************** - Create notification event - ********************/ - - if(preg_match("/^event_/",$s_action) && class_available("DaemonEvent")){ - - /* Resolve the selected items to their corresponding uids and group names */ - $ids = $this->list_get_selected_items(); - $targets = array(); - $m_list = array(); - $ldap = $this->config->get_ldap_link(); - - // Collect selected ogroups - foreach($ids as $id){ - $ogroup = $this->ogrouplist[$id]['cn'][0]; - $ldap->search("(&(cn=".$ogroup.")(member=*))", array('member')); - while ($entry = $ldap->fetch()) { - $m_list[] = $entry; - } - } - - // Collect object group member dns - foreach($m_list as $entry){ - $members = $entry['member']; - for($i=0;$i<$members['count'];$i++) { - - // Fetch member object - $ldap->cat($members[$i], array('uid','cn','objectClass')); - if ($ldap->count() > 0) { - - // Determine which type the object has - $attrs = $ldap->fetch(); - if (array_search('gosaAccount', $attrs['objectClass'])) { - $uid = $attrs['uid'][0]; - $targets['USERS'][] = $uid; - }elseif (array_search('posixGroup', $attrs['objectClass'])) { - $group = $attrs['cn'][0]; - $targets['GROUPS'][] = $group; - } - } - } - } - - // We've at least one recipient - if(count($targets)){ - $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->ogroup = new $type['CLASS_NAME']($this->config); - $this->ogroup->add_targets($targets); - $this->ogroup->set_type(TRIGGERED_EVENT); - } - } - } - - /* Abort event dialog */ - if(isset($_POST['abort_event_dialog'])){ - $this->ogroup = FALSE; - } - - /* Save event */ - if(isset($_POST['save_event_dialog'])){ - $this->ogroup->save_object(); - $msgs = $this->ogroup->check(); - if (count($msgs)) { - msg_dialog::displayChecks($msgs); - } - else { - $o_queue = new gosaSupportDaemon(); - $o_queue->append($this->ogroup); - if($o_queue->is_error()){ - msg_dialog::display(_("Infrastructure error"), msgPool::siError($o_queue->get_error()),ERROR_DIALOG); - }else{ - $this->ogroup = FALSE; - } + if(preg_match("/^edit_/",$action)){ + $tab = preg_replace("/^edit_/","",$action); + if(isset($this->tabObject->by_object[$tab])){ + $this->tabObject->current = $tab; + }else{ + trigger_error("Unknown tab: ".$tab); } } - - /* Display event */ - if($this->ogroup instanceof DaemonEvent){ - $this->ogroup->save_object(); - return($this->ogroup->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 object group - ****************/ - - /* New group? */ - if ($s_action=="new"){ - - /* By default we set 'dn' to 'new', all relevant plugins will - react on this. */ - $this->dn= "new"; - - /* Create new ogroup- object */ - $this->ogroup= new ogrouptabs($this->config,$this->config->data['TABS']['OGROUPTABS'], $this->dn,"ogroups"); - $this->ogroup->set_acl_base($this->DivListOGroup->selectedBase); - } - - - /******************** - Delete MULTIPLE entries requested, display confirm dialog - ********************/ - if ($s_action=="del_multiple"){ - $ids = $this->list_get_selected_items(); - - if(count($ids)){ - $this->dns = array(); - $disallowed = array(); - foreach($ids as $id){ - $dn = $this->ogrouplist[$id]['dn']; - $acl = $this->ui->get_permissions($dn, "ogroups/ogroup"); - 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,_("object group"))); - $smarty->assign("multiple", true); - return($smarty->fetch(get_template_path('remove.tpl', TRUE))); - } - } - } - - - /******************** - Delete MULTIPLE entries confirmed - ********************/ - - /* Confirmation for deletion has been passed. Users should be deleted. */ - if (isset($_POST['delete_multiple_ogroup_confirm'])){ - - /* Remove user by user and check acls before removeing them */ - foreach($this->dns as $key => $dn){ - - $acl = $this->ui->get_permissions($dn, "ogroups/ogroup"); - if (preg_match('/d/', $acl)){ - - /* Delete request is permitted, perform LDAP action */ - $this->ogroup= new ogrouptabs($this->config,$this->config->data['TABS']['OGROUPTABS'], $dn); - $this->ogroup->delete (); - unset ($this->ogroup); - $this->ogroup= 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","ogroups/".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_ogroup_cancel'])){ - - /* Remove lock file after successfull deletion */ - $this->remove_lock(); - $this->dns = array(); - } - - - /**************** - Delete object group - ****************/ - - if ($s_action=="del"){ - - /* Get 'dn' from posted 'uid' */ - $this->dn= $this->ogrouplist[$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,"ogroups/ogroup"); - 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),_("object 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(), INFO_DIALOG); - } - } - - - /**************** - Delete 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,"ogroups/ogroup"); - if(preg_match("/d/",$acl)){ - - /* Delete request is permitted, perform LDAP action */ - $this->ogroup= new ogrouptabs($this->config, - $this->config->data['TABS']['OGROUPTABS'], $this->dn); - $this->ogroup->delete (); - unset ($this->ogroup); - $this->ogroup= 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","ogroups/".get_class($this),$dn,array(),"Tried to trick deletion."); - } - - /* Remove lock file after successfull deletion */ - $this->remove_lock(); - set_object_info(); - } - - - /**************** - Delete object group Canceled - ****************/ - - /* Delete group canceled? */ - if (isset($_POST['delete_cancel'])){ - $this->remove_lock(); - set_object_info(); - } - - - /**************** - Edit group - ****************/ - - if (($s_action=="edit") && (! isset($this->ogroup->config)) ){ - - /* Get 'dn' from posted 'uid', must be unique */ - $this->dn= $this->ogrouplist[$s_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); - - /* Register grouptab to trigger edit dialog */ - $this->ogroup= new ogrouptabs($this->config, $this->config->data['TABS']['OGROUPTABS'], $this->dn, "ogroups"); - $this->ogroup->set_acl_base($this->dn); - set_object_info($this->dn); - } - - - /**************** - Edit finished save - ****************/ - - /* Finish button has been pressed */ - if ((isset($_POST['edit_finish']) || isset($_POST['edit_apply'])) && (isset($this->ogroup->config)) ){ - - /* Check tabs, will feed message array */ - $message= $this->ogroup->check(); - - /* Save, or display error message? */ - if (count($message) == 0){ - - /* Save user data to ldap */ - $this->ogroup->save(); - - if (!isset($_POST['edit_apply'])){ - /* Group has been saved successfully, remove lock from - LDAP. */ - if ($this->dn != "new"){ - $this->remove_lock(); - } - - unset ($this->ogroup); - $this->ogroup= NULL; - set_object_info(); - }else{ - - /* Reinitialize tab */ - if($this->ogroup instanceof tabs){ - $this->ogroup->re_init(); - } - } - } else { - /* Ok. There seem to be errors regarding to the tab data, - show message and continue as usual. */ - msg_dialog::displayChecks($message); - } - } - - - /**************** - Cancel edit object group - ****************/ - - /* Cancel dialogs */ - if ((isset($_POST['edit_cancel'])) && (isset($this->ogroup->dn))){ - $this->remove_lock(); - $this->ogroup= NULL; - set_object_info(); - } - - - /**************** - Display open dialogs - ****************/ - - /* Show dialog if object is present */ - if (isset($this->ogroup->config)){ - $display= $this->ogroup->execute(); - - /* Don't show buttons if tab dialog requests this */ - if(($this->ogroup instanceOf tabs || $this->ogroup instanceOf plugin) && $this->ogroup->read_only == TRUE){ - $display.= "

- -

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

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

"; - } - return ($display); - } - - - /**************** - Display list - ****************/ - - /* Check if there is a snapshot dialog open */ - $base = $this->DivListOGroup->selectedBase; - if($str = $this->showSnapshotDialog($base,$this->get_used_snapshot_bases(),$this)){ - return($str); - } - - /* Display dialog with group list */ - $this->DivListOGroup->parent = $this; - $this->DivListOGroup->execute(); - - /* Add departments if subsearch is disabled */ - if(!$this->DivListOGroup->SubSearch){ - $this->DivListOGroup->AddDepartments($this->DivListOGroup->selectedBase,4,1); - } - $this->reload (); - $this->DivListOGroup->setEntries($this->ogrouplist); - return($this->DivListOGroup->Draw()); } - - /* Return departments, that will be included within snapshot detection */ - function get_used_snapshot_bases() + static function filterProperties($row, $gosaGroupObjects) { - return(array(get_ou('ogroupRDN').$this->DivListOGroup->selectedBase)); - } - - - - function convert_list($input) - { - $temp= ""; - $conv= array( + $conv= array( "Y" => array("plugins/users/images/select_template.png",_("Templates") , "ogroup"), "U" => array("plugins/generic/images/head.png" ,_("User") , "ogroup"), "G" => array("plugins/groups/images/groups.png" ,_("Group") , "ogroup"), @@ -581,7 +100,7 @@ class ogroupManagement extends plugin "P" => array("plugins/ogroups/images/printer.png" ,_("Printer") , "ogroup")); /* Assemble picture */ - $type= $input['gosaGroupObjects'][0]; + $type= $gosaGroupObjects[0]; $type= preg_replace("/[^A-Z]/i","",$type); if (isset($type[0])){ $p1['pic']= $conv[$type[0]][0]; @@ -610,170 +129,13 @@ class ogroupManagement extends plugin $p2['lnk']= ""; //$conv[$type[0]][2]; $html_object_2 = "".$p1["; - $temp.= $html_object_2." class='center' id='iconB".preg_replace("/_/","",$p2['lnk']."_group_edit_%KEY")."' + $temp.= $html_object_2." class='center' id='iconB".preg_replace("/_/","",$p2['lnk']."_group_edit_%KEY")."' src='".$p2['pic']."' alt='".$p2['alt']."' title='".$p2['tit']."'>"; return ($temp); } - - - function reload() - { - /* Set base for all searches && initialise some vars */ - $this->ogrouplist= array(); - $base = $this->DivListOGroup->selectedBase; - $filter = "(gosaGroupObjects=[])"; - $Regex = $this->DivListOGroup->Regex; - - $chk = array( - "UserGroups" => "(gosaGroupObjects=*U*)" , - "GroupGroups" => "(gosaGroupObjects=*G*)" , - "ApplicationGroups" => "(gosaGroupObjects=*A*)" , - "DepartmentGroups" => "(gosaGroupObjects=*D*)" , - "ServerGroups" => "(gosaGroupObjects=*S*)" , - "WorkstationGroups" => "(gosaGroupObjects=*W*)" , - "WindowsGroups" => "(gosaGroupObjects=*O*)" , - "TerminalGroups" => "(gosaGroupObjects=*T*)" , - "PrinterGroups" => "(gosaGroupObjects=*P*)" , - "PhoneGroups" => "(gosaGroupObjects=*F*)" ); - /* Create filter */ - foreach($chk as $chkBox => $FilterPart){ - if($this->DivListOGroup->$chkBox){ - $filter .= $FilterPart; - } - } - $filter= "(&(cn=$Regex)(objectClass=gosaGroupOfNames)(|$filter))"; - - if($this->DivListOGroup->SubSearch){ - $res= get_sub_list($filter, "ogroups",get_ou('ogroupRDN'), $base, array("cn","objectClass","gosaGroupObjects"), GL_SIZELIMIT | GL_SUBSEARCH); - }else{ - $res= get_sub_list($filter, "ogroups",get_ou('ogroupRDN'), get_ou('ogroupRDN').$base, array("cn","objectClass","gosaGroupObjects"), GL_SIZELIMIT ); - } - - $this->ogrouplist= $res; - ksort ($this->ogrouplist); - reset ($this->ogrouplist); - $tmp=array(); - $tmp2 = array(); - foreach($this->ogrouplist as $tkey => $val ){ - $tmp[strtolower($val['cn'][0]).$val['cn'][0]]=$val; - $tmp2[strtolower($val['cn'][0]).$val['cn'][0]] = strtolower($val['cn'][0]).$val['cn'][0]; - } - natcasesort($tmp2); - $this->ogrouplist=array(); - foreach($tmp2 as $val){ - $this->ogrouplist[]=$tmp[$val]; - } - reset ($this->ogrouplist); - } - - - 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 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->ogrouplist[$s_entry]['dn']; - if($s_action == "copy" && $ui->is_copyable($dn,"ogroups","ogroup")){ - $this->CopyPasteHandler->add_to_queue($dn,$s_action,"ogrouptabs","OGROUPTABS","ogroups"); - } - if($s_action == "cut" && $ui->is_cutable($dn,"ogroups","ogroup")){ - $this->CopyPasteHandler->add_to_queue($dn,$s_action,"ogrouptabs","OGROUPTABS","ogroups"); - } - } - - - /* 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->ogrouplist[$id]['dn']; - - if($s_action == "copy_multiple" && $ui->is_copyable($dn,"ogroups","ogroup")){ - $this->CopyPasteHandler->add_to_queue($dn,"copy","ogrouptabs","OGROUPTABS","ogroups"); - } - if($s_action == "cut_multiple" && $ui->is_cutable($dn,"ogroups","ogroup")){ - $this->CopyPasteHandler->add_to_queue($dn,"cut","ogrouptabs","OGROUPTABS","ogroups"); - } - } - } - - /* 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->DivListOGroup->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(""); - } - - - function remove_lock() - { - if (isset($this->apptabs->dn)){ - del_lock ($this->apptabs->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); - } - } - - - function save_object() - { - $this->DivListOGroup->save_object(); - if(is_object($this->CopyPasteHandler)){ - $this->CopyPasteHandler->save_object(); - } - } - - -} - +} // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?> diff --git a/gosa-core/plugins/admin/ogroups/main.inc b/gosa-core/plugins/admin/ogroups/main.inc index 6de420cc0..e8df9c6bb 100644 --- a/gosa-core/plugins/admin/ogroups/main.inc +++ b/gosa-core/plugins/admin/ogroups/main.inc @@ -20,12 +20,11 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - /* Remove locks created by this plugin */ if ($remove_lock){ - if(session::is_set('ogroup')){ - $macl = session::get('ogroup'); + if(session::is_set('ogroupManagement')){ + $macl = session::get('ogroupManagement'); $macl->remove_lock(); } } @@ -33,35 +32,24 @@ if ($remove_lock){ /* Remove this plugin from session */ if ( $cleanup ){ - session::un_set('ogroup'); + session::un_set('ogroupManagement'); }else{ - /* Create object object on demand */ - if (!session::is_set('ogroup')){ - session::set('ogroup',new ogroupManagement ($config)); - + /* Create ogroupmanagement object on demand */ + if (!session::is_set('ogroupManagement')){ + $ogroupManagement= new ogroupManagement ($config, $ui); + session::set('ogroupManagement',$ogroupManagement); } - $ogroup = session::get('ogroup'); - - /* Execute formular */ - $ogroup->save_object(); - $output= $ogroup->execute (); + $ogroupManagement = session::get('ogroupManagement'); + $display= $ogroupManagement->execute(); - /* Page header*/ - if (get_object_info() != ""){ - $display= print_header(get_template_path('plugins/ogroups/images/plugin.png'), - _("Object groups"), - "\"\" ".LDAP::fix(get_object_info())); - } else { - $display= print_header(get_template_path('plugins/ogroups/images/plugin.png'), _("Object groups")); + /* Reset requested? */ + if (isset($_GET['reset']) && $_GET['reset'] == 1){ + session::un_set ('ogroupManagement'); } - $display.= $output; - - /* Store changes in session */ - session::set('ogroup',$ogroup); + /* Show and save dialog */ + session::set('ogroupManagement',$ogroupManagement); } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: diff --git a/gosa-core/plugins/admin/ogroups/ogroup-filter.tpl b/gosa-core/plugins/admin/ogroups/ogroup-filter.tpl new file mode 100644 index 000000000..f59cdb716 --- /dev/null +++ b/gosa-core/plugins/admin/ogroups/ogroup-filter.tpl @@ -0,0 +1,47 @@ +
+

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

+
+ +
+ +
+ +
+ + {$USER} 
+ {$GROUP} 
+ {$APPLICATION} 
+ {$DEPARTMENT} 
+ {$SERVER} 
+ {$WORKSTATION} 
+ {$WINDOWS} 
+ {$TERMINAL} 
+ {$PRINTER} 
+ {$PHONE} 
+ + + {$SCOPE} + + + + + + +
+ + + {$NAME} +
+ + + + + +
+ {$APPLY} +
+
diff --git a/gosa-core/plugins/admin/ogroups/ogroup-filter.xml b/gosa-core/plugins/admin/ogroups/ogroup-filter.xml new file mode 100644 index 000000000..de3490ccb --- /dev/null +++ b/gosa-core/plugins/admin/ogroups/ogroup-filter.xml @@ -0,0 +1,121 @@ + + + + + ogroups + + true + + + + + LDAP + (&(objectClass=gosaGroupOfNames)$NAME(|$USER$GROUP$APPLICATION$DEPARTMENT$SERVER$WORKSTATION$WINDOWS$TERMINAL$PRINTER$PHONE)) + dn + objectClass + cn + gosaGroupObjects + description + + auto + + + + checkbox + USER + true + + (gosaGroupObjects=*U*) + + + + checkbox + GROUP + true + + (gosaGroupObjects=*G*) + + + + checkbox + APPLICATION + true + + (gosaGroupObjects=*A*) + + + + checkbox + DEPARTMENT + true + + (gosaGroupObjects=*D*) + + + + checkbox + SERVER + true + + (gosaGroupObjects=*S*) + + + + checkbox + WORKSTATION + true + + (gosaGroupObjects=*W*) + + + + checkbox + WINDOWS + true + + (gosaGroupObjects=*O*) + + + + checkbox + TERMINAL + true + + (gosaGroupObjects=*T*) + + + + checkbox + PRINTER + true + + (gosaGroupObjects=*P*) + + + + checkbox + PHONE + true + + (gosaGroupObjects=*F*) + + + + textfield + NAME + 20 + 60 + + + (|(cn=*$*)) + true + + LDAP + (&(objectClass=gosaGroupOfNames)(|(cn=*$NAME*))) + cn + 0.5 + 3 + + + + diff --git a/gosa-core/plugins/admin/ogroups/ogroup-list.tpl b/gosa-core/plugins/admin/ogroups/ogroup-list.tpl new file mode 100644 index 000000000..b233c5874 --- /dev/null +++ b/gosa-core/plugins/admin/ogroups/ogroup-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/ogroups/ogroup-list.xml b/gosa-core/plugins/admin/ogroups/ogroup-list.xml new file mode 100644 index 000000000..ac327ce7b --- /dev/null +++ b/gosa-core/plugins/admin/ogroups/ogroup-list.xml @@ -0,0 +1,148 @@ + + + + + true + false + true + true + + ogroups + + 1 + + + + gosaGroupOfNames + ogroups + ogroup + plugins/ogroups/images/ogroup.png + + + + + + |16px|120px||100px;r|120px;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:filterProperties(row,gosaGroupObjects)} + + + + + %{filter:actions(dn,row,objectClass)} + + +
+ + + + + sub + images/lists/new.png + + + + new + entry + plugins/ogroups/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 + ogroups/ogroup[d] + + + + + +