From aa2bbde85feab1936d4077414212146fd7747df1 Mon Sep 17 00:00:00 2001 From: hickert Date: Thu, 27 Mar 2008 14:15:55 +0000 Subject: [PATCH] Updated event notofication -Updated target add git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@10029 594d385d-05f5-0310-b6e9-bd551577e9d8 --- .../addons/goto/events/DaemonEvent_notify.tpl | 2 +- .../addons/goto/events/class_DaemonEvent.inc | 16 -- .../goto/events/class_DaemonEvent_notify.inc | 62 ++++- .../events/class_EventTargetAddUsersList.inc | 220 ++++++++++++++++++ 4 files changed, 279 insertions(+), 21 deletions(-) create mode 100644 gosa-plugins/goto/addons/goto/events/class_EventTargetAddUsersList.inc diff --git a/gosa-plugins/goto/addons/goto/events/DaemonEvent_notify.tpl b/gosa-plugins/goto/addons/goto/events/DaemonEvent_notify.tpl index 276b513f1..1499e46fa 100644 --- a/gosa-plugins/goto/addons/goto/events/DaemonEvent_notify.tpl +++ b/gosa-plugins/goto/addons/goto/events/DaemonEvent_notify.tpl @@ -46,7 +46,7 @@ - + diff --git a/gosa-plugins/goto/addons/goto/events/class_DaemonEvent.inc b/gosa-plugins/goto/addons/goto/events/class_DaemonEvent.inc index f1e2756cf..47cdbf0f0 100644 --- a/gosa-plugins/goto/addons/goto/events/class_DaemonEvent.inc +++ b/gosa-plugins/goto/addons/goto/events/class_DaemonEvent.inc @@ -463,22 +463,6 @@ class DaemonEvent } - /*! \brief Returns a set of elements selected in a MultiSelectWindow - @return Array[integer]=integer - */ - protected 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); - } - - /*! \brief Add a target MAC address @param Array A List of all target that should be added. */ diff --git a/gosa-plugins/goto/addons/goto/events/class_DaemonEvent_notify.inc b/gosa-plugins/goto/addons/goto/events/class_DaemonEvent_notify.inc index d37b7ecb8..7295b6ac1 100644 --- a/gosa-plugins/goto/addons/goto/events/class_DaemonEvent_notify.inc +++ b/gosa-plugins/goto/addons/goto/events/class_DaemonEvent_notify.inc @@ -46,9 +46,13 @@ class DaemonEvent_notify extends DaemonEvent public function execute() { DaemonEvent::execute(); - if(isset($_POST['add_any_target'])){ - echo "Not implemented yet"; + + /* Check if target add dialog is open */ + if($this->is_target_list_open() && $this->is_new){ + return($this->get_target_add_list()); } + + $display = $this->get_header(); $tmp = $this->data; $smarty = get_smarty(); @@ -118,14 +122,64 @@ class DaemonEvent_notify extends DaemonEvent public function add_users($targets) { - $this->users = $targets; + $add = $targets; + if(!is_array($add)){ + $add = array($add); + } + foreach($add as $target){ + if(!in_array($target,$this->users)){ + $this->users[] = $target; + } + } } + public function add_groups($targets) { - $this->groups = $targets; + $add = $targets; + if(!is_array($add)){ + $add = array($add); + } + foreach($add as $target){ + if(!in_array($target,$this->groups)){ + $this->groups[] = $target; + } + } } + + /*! \brief Returns HTML content, displaying a dialog which allows to add new targets. + @return String HTML content. (EventTargetAddList) + */ + public function get_target_add_list() + { + $this->target_add_list_used = TRUE; + + if($this->target_divlist == NULL){ + $this->target_divlist = new EventTargetAddUserList($this->config,$this); + } + $this->target_divlist->execute(); + + $smarty = get_smarty(); + $smarty->assign("divlist",$this->target_divlist->Draw()); + return($smarty->fetch(get_template_path('target_list.tpl', TRUE, dirname(__FILE__)))); + } + + + /*! \brief Add a target MAC address + @param Array A List of all target that should be added. + */ + public function add_targets($targets) + { + if(isset($targets['USERS'])){ + $this->add_users($targets['USERS']); + } + if(isset($targets['GROUPS'])){ + $this->add_groups($targets['GROUPS']); + } + } + + public function save() { $ret = DaemonEvent::save(); diff --git a/gosa-plugins/goto/addons/goto/events/class_EventTargetAddUsersList.inc b/gosa-plugins/goto/addons/goto/events/class_EventTargetAddUsersList.inc new file mode 100644 index 000000000..e4c93a6b2 --- /dev/null +++ b/gosa-plugins/goto/addons/goto/events/class_EventTargetAddUsersList.inc @@ -0,0 +1,220 @@ +parent = $parent; + $this->ui = get_userinfo(); + + + $this->target_divlist = new MultiSelectWindow($this->config,"EventAddTargetUserList","gotomasses"); + $this->SetSummary(_("Targets")); + $this->EnableCloseButton(FALSE); + $this->EnableSaveButton(FALSE); + + $this->SetInformation(_("This dialog shows all available targets for your event, check the targets you want to add and use the 'Use' button to accept.")); + + /* Toggle all selected / deselected */ + $chk = ""; + + $this->EnableAplhabet(TRUE); + + /* set Page header */ + $this->AddHeader(array("string"=> $chk, "attach"=>"style='width:20px;'")); + $this->AddHeader(array("string"=>" ","attach"=>"style='width:20px;'")); + $this->AddHeader(array("string"=>_("System / Department"))); + + //$name,$string,$value,$conn,$image="images/search.png") + $this->AddRegex("regex" ,"regex" ,"*" , TRUE); + + $this->AddCheckBox("display_users" ,"1", _("Display users"),TRUE); + $this->AddCheckBox("display_groups" ,"1", _("Display groups"),TRUE); + } + + + function execute() + { + $this->ClearElementsList(); + $this->AddDepartments($this->selectedBase,2,1); + $this->setEntries(); + $this->GenHeader(); + } + + + function GenHeader() + { + $modules = array("users","groups"); + + /* Add base */ + $tmp = array(); + $base = $this->config->current['BASE']; + $tmp[] = array("dn"=>$this->config->current['BASE']); + $tmp= array_merge($tmp,get_list("(&(|(ou=*)(description=*))(objectClass=gosaDepartment))", $modules, $base, + array("ou", "description"), GL_SIZELIMIT | GL_SUBSEARCH)); + + $deps = array(); + foreach($tmp as $tm){ + $deps[$tm['dn']] = $tm['dn']; + } + + $department = $departments = array(); + $ui= get_userinfo(); + $d = $ui->get_module_departments($modules); + foreach($d as $department){ + $departments[$department] = $department; + } + + /* Load possible departments */ + $ids = $this->config->idepartments; + $first = ""; + $found = FALSE; + $options = array(); + foreach($ids as $dep => $name){ + if(isset($deps[$dep]) && in_array_ics($dep, $departments)){ + + /* Keep first base dn in mind, we could need this + * info if no valid base was found + */ + if(empty($first)) { + $first = $dep['dn']; + } + + $value = $ids[$dep]; + if ($this->selectedBase == $dep){ + $found = TRUE; + $options.= ""; + } else { + $options.= ""; + } + } + } + + $listhead = $this->get_default_header(); + + /* Add base selection */ + $listhead .= _("Base")."  ". + "  "; + + $this->SetListHeader($listhead); + + } + + + function setEntries() + { + $_target_list = array(); + + if($this->display_users){ + $_target_list = array_merge($_target_list, + get_sub_list("(&(objectClass=person)(objectClass=gosaAccount))","users",get_people_ou(),get_people_ou().$this->selectedBase, + array("cn","objectClass","description","uid"),GL_NONE)); + } + if($this->display_groups){ + $_target_list = array_merge($_target_list, + get_sub_list("(objectClass=posixGroup)","groups",get_groups_ou(),get_groups_ou().$this->selectedBase, + array("cn","objectClass","description"),GL_NONE)); + } + $this->_target_list = $_target_list; + + $tmp = array(); + foreach($this->_target_list as $key => $object){ + $tmp[$key] = $object['cn'][0]; + } + natcasesort($tmp); + + foreach($tmp as $key => $obj){ + + $obj = $this->_target_list[$key]; + $name = $obj['cn'][0]; + if(isset($obj['description'])){ + $name .= " [".$obj['description'][0]."]"; + } + + $img =""; + if(in_array("gosaAccount",$obj['objectClass'])){ + $img = 'U'; + }elseif(in_array("posixGroup",$obj['objectClass'])){ + $img = 'G'; + } + + $field1 = array("string" => "", + "attach" => "style='width:20px;'"); + $field2 = array("string" => $img, + "attach" => "style='width:20px;'"); + $field3 = array("string" => $name , "attach" => "title='".$obj['dn']."'"); + $this->AddElement(array($field1,$field2,$field3)); + } + } + + + function get_selected_targets() + { + $a_targets = array("USERS" => array(),"GROUPS" => array()); + + foreach($this->list_get_selected_items() as $id){ + $obj = $this->_target_list[$id]; + if(in_array("posixGroup",$obj['objectClass'])){ + $a_targets['GROUPS'][] = $obj['cn'][0]; + } + if(in_array("gosaAccount",$obj['objectClass'])){ + $a_targets['USERS'][] = $obj['uid'][0]; + } + } + + return($a_targets); + } + + + /*! \brief Returns a set of elements selected in a MultiSelectWindow + @return Array[integer]=integer + */ + protected 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); + } +} +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> -- 2.30.2