\version 1.00 \date 26.02.2008 This is the base class for all new daemon events. It implements most of the required functionality. */ class DaemonEvent { /* Menu Strings */ protected $s_Menu_Name = "s_Menu_Name not set"; // Diplayed in the ActionsMenu->CreateNew protected $s_Event_Name = "s_Event_Name not set"; // Will be displayed in the Management list. protected $s_Menu_Image = "images/empty.png"; // Image displayed in Actions->New protected $s_List_Image = ""; // Image displayed in event listing public $config; // GOsa configuration object protected $data; // The event data, when edited protected $a_targets = array(); // The list of assigned Targets (When newly created) protected $s_Schedule_Action = ""; // The deamon command name when newly created. (e.g. job_trigger_action_halt) protected $s_Trigger_Action= ""; // The deamon command name when edited. (e.g. trigger_action_halt) protected $s_Queued_Action= ""; // The deamon command name when edited. (e.g. trigger_action_halt) public $timestamp = 0; // Event execution time; public $time_offset = 0; // An offset when an event should start (normally not used) public $concurrent_operations = 1; // Number of concurrent operations when a timestamp offset is used protected $id = -1; // The Table ID protected $status = "unknown";// The current event status protected $is_new = TRUE; // Is TRUE if this is a new event protected $mode = SCHEDULED_EVENT; // Default action is sheduled. /* Sub dialog hanlding */ protected $target_divlist = NULL; // The divlist used by the target add dialog protected $target_add_list_used = FALSE; // Indicates that the target add list was used. protected $time_select_used = FALSE; // Indicates that we have used the timestamp select boxes. protected $target_list_used = FALSE; // Target list was diaplayed? protected $_target_list = array(); // Object Cache of those objects displayed in the target add dialog protected $workstation_list = array(); // Used as cache in the target list. protected $server_list = array(); // Used as cache in the target list. protected $visible_for = HIDDEN_EVENT; protected $attributes = array("timestamp"); protected $time_offset_used = FALSE; /* Indicate that multiple events have to be created from this event */ public $multiple_events = FALSE; function set_type($type) { $this->mode = $type; } function get_type() { return($this->mode); } /*! \brief Class contructor. @param Array GOsa configuration object. @param Array Event data, only given when edited. */ public function __construct($config,$data = array()) { $this->data = $data; $this->config = $config; timezone::get_default_timezone(); $this->timestamp = time(); /* Load values from given data */ if(count($data)){ $this->is_new = FALSE; $attrs = array("id" => "ID"); foreach($attrs as $to => $from){ $this->$to = $data[$from]; } if(isset($data['TIMESTAMP'])){ $this->timestamp = $this->_event_to_timestamp($data['TIMESTAMP']); } } } /*! \brief Create the HTML output for the plugin. @return String The generated HTML output. */ public function execute() { $this->time_select_used = FALSE; $this->target_list_used = FALSE; $str = "

"._("This job has no template!")."

"; $str.= "

"; $str.= "
"; return($str); } /*! \brief Returns the plugin header, displayed in the template. @return String HTML header part. */ public function get_header() { if($this->target_add_list_used){ return(""); } $str = "

".sprintf(_("Create '%s' job"),$this->s_Event_Name)."

"; return($str); } /*! \brief Returns the plugin footer (save cancel), displayed in the template. @return String HTML footer part. */ public function get_footer() { if($this->target_add_list_used){ return(""); } $str = "

"; $str.= "
 
"; return($str); } public function get_time_offset_select() { $this->time_offset_used = TRUE; $smarty = get_smarty(); $smarty->assign('time_offset', $this->time_offset); $smarty->assign('concurrent_operations', $this->concurrent_operations); return($smarty->fetch(get_template_path('time_offset.tpl', TRUE, dirname(__FILE__)))); } /*! \brief Returns HTML representation of a timestamp using ", "attach" => "style='width:20px; border-right:0px;'") )); } $list_footer = ""; return($divlist->DrawList().$list_footer); } /*! \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 EventTargetAddList($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 Handles all posted HTML data, including target add,remove... */ public function save_object() { if(isset($_POST['open_target_list'])){ $this->target_add_list_used =TRUE; } if($this->target_divlist != NULL){ $this->target_divlist->save_object(); } if($this->target_add_list_used){ if(isset($_POST['abort_target_dialog'])){ $this->target_add_list_used =FALSE; $this->target_divlist = NULL; } if(isset($_POST['save_target_dialog'])){ $this->target_add_list_used =FALSE; $this->add_targets($this->target_divlist->get_selected_targets()); $this->target_divlist = NULL; } } if (isset($_POST['concurrent_operations'])) { $this->concurrent_operations = $_POST['concurrent_operations']; } if (isset($_POST['time_offset'])) { $this->time_offset = $_POST['time_offset']; } if ($this->time_offset_used){ /* Check that multiple events makes sense at all (e.g. there are more targets * then allowed concurrent operations */ if (count($this->a_targets) > $this->concurrent_operations) { if ($this->time_offset > 0) { $this->multiple_events = TRUE; } } } if($this->time_select_used){ $time_stamp_values_found = TRUE; foreach(array("time_year","time_month","time_day","time_hour","time_minute","time_second") as $attr){ $time_stamp_values_found &= isset($_POST[$attr]); } if($time_stamp_values_found){ /* Make sure the following conversion happens with the right timezone */ timezone::get_default_timezone(); $this->timestamp = mktime( $_POST['time_hour'], $_POST['time_minute'], $_POST['time_second'], $_POST['time_month'], $_POST['time_day'], $_POST['time_year']); } } if($this->target_list_used){ foreach($_POST as $name => $value){ if(preg_match("/^del_target_/",$name)){ $id = preg_replace("/^del_target_([0-9]*)_.*/","\\1",$name); if(isset($this->a_targets[$id])){ unset($this->a_targets[$id]); } break; } } } } /*! \brief Converts a daemon timestamp into an unix timestamp. \ e.g. 20080101125959 -> 1199188799 @param A daemon timestamp YYYYddmmHHiiss @return Integer A unix timestamp. */ public function _event_to_timestamp($str) { return(strtotime($str)); } /*! \brief Converts a unix timestamp in to a gosa-si timestamp. \ e.g. 1199188799 -> 20080101125959 @param A unix timestamp (e.g. 1199188799) @return Integer A daemon timestamp (e.g. 20080101125959). */ public function _timestamp_to_event($stamp) { return(date("YmdHis",$stamp)); } /*! \brief Returns event information, like menu strings, images ... @return Array Event informations. */ public function get_event_info() { $data =array(); $data['CLASS_NAME'] = get_class($this); $data['s_Menu_Name'] = $this->s_Menu_Name; $data['s_Event_Name'] = $this->s_Event_Name; foreach(array("s_Queued_Action","s_Schedule_Action","s_Trigger_Action") as $attr){ if(!empty($this->$attr)){ $data[$attr] = $this->$attr; } } $data['MenuImage'] = "".$this->s_Menu_Name.""; $data['ListImage'] = "".$this->s_Event_Name.""; return($data); } /*! \brief Check if we have opened the target add dialog. @return Boolean TRUE if we have opened the target add dialog else FALSE. */ protected function is_target_list_open() { return($this->target_add_list_used); } /*! \brief Returns a complete list of all available events. @return Array Containing $this->get_event_info() for all available events. */ static function get_event_types($type) { global $class_mapping,$config; $list = array(); $list['BY_CLASS'] = array(); $list['TRIGGERED'] = array(); $list['SCHEDULED'] = array(); $list['QUEUED'] = array(); foreach($class_mapping as $name => $path){ if(preg_match("/^DaemonEvent_/",$name)){ $tmp = new $name($config); if($tmp->visible_for & $type){ $evt = $tmp->get_event_info(); $list['BY_CLASS'][$name] = $evt; if(isset($evt['s_Trigger_Action'])){ $list['TRIGGERED'][$name] = $evt; $list['QUEUED'][$evt['s_Trigger_Action']] = $name; } if(isset($evt['s_Schedule_Action'])){ $list['SCHEDULED'][$name] = $evt; $list['QUEUED'][$evt['s_Schedule_Action']] = $name; } if(isset($evt['s_Queued_Action'])){ $list['QUEUED'][$evt['s_Queued_Action']] = $name; } } } } return($list); } /*! \brief Returns TRUE if this event is new. (Not edited) @return Boolean TRUE if new, else FALSE. */ public function is_new() { return($this->is_new); } /*! \brief Returns the event tag to schedule a new action @param Returns the event e.g. 'job_trigger_action_wake' */ public function get_schedule_action() { return($this->s_Schedule_Action); } /*! \brief Returns the event tag to schedule a new action @param Returns the event e.g. 'trigger_action_wake' */ public function get_trigger_action() { return($this->s_Trigger_Action); } /*! brief Returns an array containig all attributes \ That should be written. @return Array e.g. 'status' => 'bla blub' */ public function save() { $ret = array(); foreach($this->attributes as $attr){ $ret[$attr] = $this->$attr; } if(!isset($ret['timestamp'])){ $ret['timestamp'] = time(); } # Check if timestamp is in gosa-si-time-format if(!tests::is_gosa_si_time($ret['timestamp'])){ $ret['timestamp'] = $this->_timestamp_to_event($this->timestamp); } return($ret); } /*! \brief Returns the event targets @return Array All selected targets. */ public function get_targets() { return($this->a_targets); } /*! \brief Returns the event timestamp in GOsa daemon format. @return Returns the event timestamp (20081231120000) */ public function get_timestamp($si_type = TRUE) { if($si_type){ return($this->_timestamp_to_event($this->timestamp)); }else{ return($this->timestamp); } } /*! \brief Returns the event ID @return Returns the event ID */ public function get_id() { if($this->is_new){ return(-1); }else{ return($this->data['ID']); } } /*! \brief Add a target MAC address @param Array A List of all target that should be added. */ public function set_timestamp($stamp) { $this->timestamp = $stamp; } /*! \brief Add a target MAC address @param Array A List of all target that should be added. */ public function add_targets($targets) { foreach($targets as $target){ $this->a_targets[] = $target; } } public function check() { return(array()); } /*! \brief Update a class variable from outside */ public function set_value($name,$value) { $name = strtolower($name); if(isset($this->$name) && in_array($name,$this->attributes)){ $this->$name = $value; } } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?>