From 658dbd4443f0b0c8f344c3e8a09558f3fe604423 Mon Sep 17 00:00:00 2001 From: hickert Date: Mon, 11 Jan 2010 09:01:41 +0000 Subject: [PATCH] Reenabled events git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@15134 594d385d-05f5-0310-b6e9-bd551577e9d8 --- .../admin/systems/class_systemManagement.inc | 163 +++++++++++++++++- .../systems/admin/systems/system-list.xml | 30 ++-- 2 files changed, 173 insertions(+), 20 deletions(-) diff --git a/gosa-plugins/systems/admin/systems/class_systemManagement.inc b/gosa-plugins/systems/admin/systems/class_systemManagement.inc index 3aa053fa5..aecf4289d 100644 --- a/gosa-plugins/systems/admin/systems/class_systemManagement.inc +++ b/gosa-plugins/systems/admin/systems/class_systemManagement.inc @@ -52,19 +52,29 @@ class systemManagement extends management $this->storagePoints = array_unique($sP); // Build filter - if (session::global_is_set(get_class($this)."_filter")){ - $filter= session::global_get(get_class($this)."_filter"); - } else { +# if (session::global_is_set(get_class($this)."_filter")){ +# $filter= session::global_get(get_class($this)."_filter"); +# } else { $filter = new filter(get_template_path("system-filter.xml", true)); $filter->setObjectStorage($this->storagePoints); - } +# } $this->setFilter($filter); // Build headpage $headpage = new listing(get_template_path("system-list.xml", true)); $headpage->setFilter($filter); $filter->setConverter('INCOMING', 'systemManagement::incomingFilterConverter'); - $this->registerAction("DaemonEvent_halt", "systemManagement::handleEvent"); + + // Register Daemon Events + if(class_available("DaemonEvent") && class_available("gosaSupportDaemon")){ + $events = DaemonEvent::get_event_types(SYSTEM_EVENT | HIDDEN_EVENT); + foreach($events['TRIGGERED'] as $name => $data){ + $this->registerAction("T_".$name,"handleEvent"); + $this->registerAction("S_".$name,"handleEvent"); + } + $this->registerAction("DaemonEvent_activate","handleEvent"); + } + $this->registerAction("saveEvent","saveEventDialog"); // Add copy&paste and snapshot handler. if ($this->config->boolValueIsTrue("main", "copyPaste")){ @@ -73,10 +83,132 @@ class systemManagement extends management if($this->config->get_cfg_value("enableSnapshots") == "true"){ $this->snapHandler = new SnapshotHandler($this->config); } + + // Check if we are able to communicate with the GOsa supprot daemon + if(class_available("gosaSupportDaemon")){ + $o = new gosaSupportDaemon(); + $this->si_active = $o->connect() && class_available("DaemonEvent"); + } + + // Check if we are able to communicate with the GOsa supprot daemon + if(class_available("opsi")){ + $this->opsi = new opsi($this->config); + } + + parent::__construct($config, $ui, "systems", $headpage); } + /*! \brief Handle GOsa-si events + * All events are handled here. + */ + function handleEvent($action="",$target=array(),$all=array()) + { + // Detect whether this event is scheduled or triggered. + $triggered = TRUE; + if(preg_match("/^S_/",$action)){ + $triggered = FALSE; + } + + // Detect triggere or scheduled actions + $headpage = $this->getHeadpage(); + if(preg_match("/^[TS]_/", $action)){ + + // Send special reinstall action for opsi hosts + $event = preg_replace("/^[TS]_/","",$action); + if($event == "DaemonEvent_reinstall" && $this->si_active && $this->opsi){ + foreach($target as $key => $dn){ + $type = $headpage->getType($dn); + + // Send Reinstall event for opsi hosts + if($type == "FAKE_OC_OpsiHost"){ + $obj = $headpage->getEntry($dn); + $this->opsi->job_opsi_install_client($obj['cn'][0],$obj['macAddress'][0]); + unset($target[$key]); + } + } + } + } + + // Now send remaining FAI/GOsa-si events here. + if(count($target) && $this->si_active){ + $mac= array(); + + // Collect target mac addresses + $ldap = $this->config->get_ldap_link(); + $tD = $this->getObjectDefinitions(); + $events = DaemonEvent::get_event_types(SYSTEM_EVENT); + $o_queue = new gosaSupportDaemon(); + foreach($target as $dn){ + $type = $headpage->getType($dn); + if($tD[$type]['sendEvents']){ + $obj = $headpage->getEntry($dn); + if(isset($obj['macAddress'][0])){ + $mac[] = $obj['macAddress'][0]; + } + } + } + + /* Skip installation or update trigerred events, + * if this entry is currently processing. + */ + if($triggered && in_array($event,array("DaemonEvent_reinstall","DaemonEvent_update"))){ + foreach($mac as $key => $mac_address){ + foreach($o_queue->get_entries_by_mac(array($mac_address)) as $entry){ + $entry['STATUS'] = strtoupper($entry['STATUS']); + if($entry['STATUS'] == "PROCESSING" && + isset($events['QUEUED'][$entry['HEADERTAG']]) && + in_array($events['QUEUED'][$entry['HEADERTAG']],array("DaemonEvent_reinstall","DaemonEvent_update"))){ + unset($mac[$key]); + + new log("security","systems/".get_class($this),"",array(),"Skip adding 'DaemonEvent::".$type."' for mac '".$mac_address."', there is already a job in progress."); + break; + } + } + } + } + + // Prepare event to be added + if(count($mac) && isset($events['BY_CLASS'][$event]) && $this->si_active){ + $event = $events['BY_CLASS'][$event]; + $this->dialogObject = new $event['CLASS_NAME']($this->config); + $this->dialogObject->add_targets($mac); + + if($triggered){ + $this->dialogObject->set_type(TRIGGERED_EVENT); + $o_queue->append($this->dialogObject); + if($o_queue->is_error()){ + msg_dialog::display(_("Service infrastructure"),msgPool::siError($o_queue->get_error()),ERROR_DIALOG); + }else{ + $this->closeDialogs(); + } + }else{ + $this->dialogObject->set_type(SCHEDULED_EVENT); + } + } + } + + // Handle system activation + if($action == "DaemonEvent_activate"){ + echo "Aktivieren!"; + } + } + + + function saveEventDialog() + { + $o_queue = new gosaSupportDaemon(); + $o_queue->append($this->dialogObject); + if($o_queue->is_error()){ + msg_dialog::display(_("Service infrastructure"),msgPool::siError($o_queue->get_error()),ERROR_DIALOG); + }else{ + $this->closeDialogs(); + } + + } + + /*! \brief Update filter part for INCOMING. * Allows us to search for "systemIncomingRDN". */ @@ -213,6 +345,18 @@ class systemManagement extends management } + /*! \brief Detects actions/events send by the ui + * and the corresponding targets. + */ + function detectPostActions() + { + $action= management::detectPostActions(); + if(isset($_POST['abort_event_dialog'])) $action['action'] = "cancel"; + if(isset($_POST['save_event_dialog'])) $action['action'] = "saveEvent"; + return($action); + } + + /*! \brief Overridden render method of class mangement. * this allows us to add a release selection box. */ @@ -241,6 +385,7 @@ class systemManagement extends management "tabClass" => "opsi_tabs", "tabDesc" => "OPSITABS", "aclClass" => "opsiGeneric", + "sendEvents" => TRUE, "aclCategory" => "opsi"), "goServer" => array( @@ -249,6 +394,7 @@ class systemManagement extends management "tabClass" => "servtabs", "tabDesc" => "SERVTABS", "aclClass" => "servgeneric", + "sendEvents" => TRUE, "aclCategory" => "server"), "gotoWorkstation" => array( @@ -257,12 +403,14 @@ class systemManagement extends management "tabClass" => "worktabs", "tabDesc" => "WORKTABS", "aclClass" => "workstation", + "sendEvents" => TRUE, "aclCategory" => "workgeneric"), "gotoTerminal" => array( "ou" => get_ou('terminalRDN'), "plugClass" => "termgeneric", "tabClass" => "termtabs", + "sendEvents" => TRUE, "tabDesc" => "TERMTABS", "aclClass" => "terminal", "aclCategory" => "termgeneric"), @@ -273,12 +421,14 @@ class systemManagement extends management "tabClass" => "printtabs", "tabDesc" => "PRINTTABS", "aclClass" => "printer", + "sendEvents" => FALSE, "aclCategory" => "printgeneric"), "FAKE_OC_NewDevice" => array( "ou" => get_ou('systemIncomingRDN'), "plugClass" => "termgeneric", "tabClass" => "termtabs", + "sendEvents" => TRUE, "tabDesc" => "TERMTABS", "aclClass" => "terminal", "aclCategory" => "termgeneric"), @@ -288,12 +438,14 @@ class systemManagement extends management "plugClass" => "phoneGeneric", "tabClass" => "phonetabs", "tabDesc" => "PHONETABS", + "sendEvents" => FALSE, "aclClass" => "phone", "aclCategory" => "phoneGeneric"), "FAKE_OC_winstation" => array( "ou" => get_winstations_ou(), "plugClass" => "wingeneric", + "sendEvents" => TRUE, "tabClass" => "wintabs", "tabDesc" => "WINTABS", "aclClass" => "wingeneric", @@ -302,6 +454,7 @@ class systemManagement extends management "ieee802Device" => array( "ou" => get_ou('componentRDN'), "plugClass" => "componentGeneric", + "sendEvents" => FALSE, "tabClass" => "componenttabs", "tabDesc" => "COMPONENTTABS", "aclClass" => "componentGeneric", diff --git a/gosa-plugins/systems/admin/systems/system-list.xml b/gosa-plugins/systems/admin/systems/system-list.xml index 7bc935609..20044b55e 100644 --- a/gosa-plugins/systems/admin/systems/system-list.xml +++ b/gosa-plugins/systems/admin/systems/system-list.xml @@ -263,7 +263,7 @@ - DaemonEvent_halt + T_DaemonEvent_halt DaemonEvent_halt entry images/lists/reload.png @@ -271,7 +271,7 @@ - DaemonEvent_reboot + T_DaemonEvent_reboot DaemonEvent_reboot entry images/lists/reload.png @@ -279,7 +279,7 @@ - DaemonEvent_wakeup + T_DaemonEvent_wakeup DaemonEvent_wakeup entry images/lists/on.png @@ -287,7 +287,7 @@ - DaemonEvent_update + T_DaemonEvent_update DaemonEvent_update entry plugins/goto/images/update.png @@ -295,7 +295,7 @@ - DaemonEvent_lock + T_DaemonEvent_lock DaemonEvent_lock entry images/lists/locked.png @@ -303,7 +303,7 @@ - DaemonEvent_activate + T_DaemonEvent_activate DaemonEvent_activate entry images/lists/unlocked.png @@ -311,7 +311,7 @@ - DaemonEvent_reinstall + T_DaemonEvent_reinstall DaemonEvent_reinstall entry plugins/goto/images/reinstall.png @@ -329,7 +329,7 @@ - DaemonEvent_halt + S_DaemonEvent_halt DaemonEvent_halt entry images/lists/off.png @@ -337,7 +337,7 @@ - DaemonEvent_reboot + S_DaemonEvent_reboot DaemonEvent_reboot entry images/lists/reload.png @@ -345,7 +345,7 @@ - DaemonEvent_wakeup + S_DaemonEvent_wakeup DaemonEvent_wakeup entry images/lists/on.png @@ -353,7 +353,7 @@ - DaemonEvent_update + S_DaemonEvent_update DaemonEvent_update entry plugins/goto/images/update.png @@ -361,7 +361,7 @@ - DaemonEvent_lock + S_DaemonEvent_lock DaemonEvent_lock entry images/lists/locked.png @@ -369,7 +369,7 @@ - DaemonEvent_activate + S_DaemonEvent_activate DaemonEvent_activate entry images/lists/unlocked.png @@ -377,7 +377,7 @@ - DaemonEvent_reinstall + S_DaemonEvent_reinstall DaemonEvent_reinstall entry plugins/goto/images/reinstall.png @@ -391,7 +391,7 @@ - activate_systems + DaemonEvent_activate DaemonEvent_activate entry images/lists/unlocked.png -- 2.30.2