X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=gosa-plugins%2Fsystems%2Fadmin%2Fsystems%2Fclass_systemManagement.inc;h=6283f5c1b9976e9a7617cf58609e542304fa1ad1;hb=032e09dd7aba6b584b55daa165cc647215b6c582;hp=408c1e148ffc32d214f71fb0e82cb9b0a6b71821;hpb=a2799e3079b0a92aab0884406563ccd55bc8f685;p=gosa.git
diff --git a/gosa-plugins/systems/admin/systems/class_systemManagement.inc b/gosa-plugins/systems/admin/systems/class_systemManagement.inc
index 408c1e148..6283f5c1b 100644
--- a/gosa-plugins/systems/admin/systems/class_systemManagement.inc
+++ b/gosa-plugins/systems/admin/systems/class_systemManagement.inc
@@ -1,21 +1,23 @@
systab->by_object[$tabname]->base = $this->DivListSystem->selectedBase;
$this->systab->base = $this->DivListSystem->selectedBase;
}else{
- print_red(_("You are not allowed to create a new object of this type."));
+ msg_dialog::display(_("Error"), msgPool::permCreate(), ERROR_DIALOG);
}
}
}
@@ -378,7 +380,7 @@ class systems extends plugin
session::set('objectinfo',$this->dn);
add_lock ($this->dn, $this->ui->dn);
}else{
- print_red (_("You can't edit this object type yet!"));
+ msg_dialog::display(_("Error"), _("Editing this type of object is not supported yet!"), ERROR_DIALOG);
del_lock($this->dn);
}
}
@@ -406,7 +408,7 @@ class systems extends plugin
session::set('objectinfo',$this->dn);
return ($smarty->fetch(get_template_path('password.tpl', TRUE)));
}else{
- print_red(_("You are not allowed to change the password for this object."));
+ msg_dialog::display(_("Permission error"), _("You have no permission to change this password!"), ERROR_DIALOG);
}
}
@@ -418,7 +420,7 @@ class systems extends plugin
/* Correctly specified? */
if (isset($_POST['password_finish'])){
if ($_POST['new_password'] != $_POST['repeated_password']){
- print_red (_("Passwords entered as new and repeated do not match!"));
+ msg_dialog::display(_("Error"), _("The passwords you've entered as 'New password' and 'Repeated password' do not match!"), ERROR_DIALOG);
return($smarty->fetch(get_template_path('password.tpl', TRUE)));
}
}
@@ -472,10 +474,10 @@ class systems extends plugin
$ldap->modify($attrs);
new log("security","systems/".get_class($this),$this->dn,array_keys($attrs),$ldap->get_error());
}else{
- print_red(_("You are not allowed to change the password for this object."));
+ msg_dialog::display(_("Permission error"), _("You have no permission to change this password!"), ERROR_DIALOG);
}
}else{
- print_red(_("Can't detect object to change password."));
+ msg_dialog::display(_("Error"), _("Cannot determine object to change password!"), ERROR_DIALOG);
}
session::un_set('objectinfo');
}
@@ -499,7 +501,7 @@ class systems extends plugin
/********************
SCHEDULE action in GOsa Daemon
********************/
- $save_events_directly = FALSE;
+
if(preg_match("/^schedule_event_/",$s_action) || preg_match("/^trigger_event_/",$s_action)){
$this->dns = array();
$ids = $this->list_get_selected_items();
@@ -515,23 +517,40 @@ class systems extends plugin
$mac[]= $attrs['macAddress'][0];
}
}
- $events = DaemonEvent::get_event_types();
- if(preg_match("/^trigger_event_/",$s_action)){
- $type = preg_replace("/^trigger_event_/","",$s_action);
- }else{
- $type = preg_replace("/^schedule_event_/","",$s_action);
- }
+ $events = DaemonEvent::get_event_types(SYSTEM_EVENT);
+ $type = preg_replace("/^[a-z]*_event_/","",$s_action);
+ $o_queue = new gosaSupportDaemon();
+
+ /* Skip installation or update trigerred events,
+ * if this entry is currently processing.
+ */
+ if(preg_match("/trigger_event/",$s_action) && in_array($type,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'][$type])){
$event = $events['BY_CLASS'][$type];
$this->systab = new $event['CLASS_NAME']($this->config);
$this->systab->add_targets($mac);
-
- /* Insert event directly with current timestamp
- * to force direct execution.
- */
- if(preg_match("/^trigger_event_/",$s_action)){
- $this->systab->set_timestamp(time());
- $save_events_directly = TRUE;
+ if(preg_match("/trigger_event/",$s_action)){
+ $this->systab->set_type(TRIGGERED_EVENT);
+ }else{
+ $this->systab->set_type(SCHEDULED_EVENT);
}
}
}
@@ -540,27 +559,17 @@ class systems extends plugin
/* Insert scheduled events into queue */
if($this->systab instanceof DaemonEvent){
$this->systab->save_object();
- if(isset($_POST['save_event_dialog']) || $save_events_directly){
- /* Directly means not scheduled */
- if($save_events_directly){
- $header = $this->systab->get_trigger_action();
- }else{
- $header = $this->systab->get_schedule_action();
- }
- $targets = $this->systab->get_targets();
- $data = $this->systab->save();
- $data['timestamp'] = $this->systab->get_timestamp();
+ /* Save event
+ */
+ if(isset($_POST['save_event_dialog']) || $this->systab->get_type() == TRIGGERED_EVENT){
$o_queue = new gosaSupportDaemon();
- foreach($targets as $target){
- $data['macaddress'] = $target;
- $o_queue->send($header,$target,$data);
- if($o_queue->is_error()){
- msg_dialog::display(_("Daemon"),sprintf(_("Something went wrong while talking to the daemon: %s."),
- $o_queue->get_error()),ERROR_DIALOG);
- }
+ $o_queue->append($this->systab);
+ if($o_queue->is_error()){
+ msg_dialog::display(_("Service infrastructure"),msgPool::siError($o_queue->get_error()),ERROR_DIALOG);
+ }else{
+ $this->systab = FALSE;
}
- $this->systab = FALSE;
}
if(isset($_POST['abort_event_dialog'])){
$this->systab = FALSE;
@@ -586,19 +595,14 @@ class systems extends plugin
return(gen_locked_message($user,$this->dns));
}
- $dns_names = "
"; + $dns_names = array(); foreach($this->dns as $dn){ add_lock ($dn, $this->ui->dn); - $dns_names .= $dn."\n"; + $dns_names[] = @LDAP::fix($dn); } - $dns_names .=""; /* Lock the current entry, so nobody will edit it during deletion */ - if (count($this->dns) == 1){ - $smarty->assign("warning", sprintf(_("You're about to delete the following entry %s"), @LDAP::fix($dns_names))); - } else { - $smarty->assign("warning", sprintf(_("You're about to delete the following entries %s"), @LDAP::fix($dns_names))); - } + $smarty->assign("warning", msgPool::deleteInfo($dns_names)); $smarty->assign("multiple", true); return($smarty->fetch(get_template_path('remove.tpl', TRUE))); } @@ -646,7 +650,11 @@ class systems extends plugin if(preg_match("/d/",$tabacl)){ /* Delete request is permitted, perform LDAP action */ - if($tabtype=="phonetabs"){ + if(in_array($type,array("ArpNewDevice","NewDevice")) && class_available("termgeneric")){ + $this->systab= new termgeneric($this->config, $dn); + $this->systab->set_acl_base($dn); + $this->systab->remove_from_parent(); + }elseif($tabtype=="phonetabs"){ $this->systab= new $tabtype($this->config, $this->config->data['TABS'][$tabobj], $dn,$type); $this->systab->set_acl_base($dn); $this->systab->by_object['phoneGeneric']->remove_from_parent (); @@ -661,7 +669,7 @@ class systems extends plugin } else { /* Normally this shouldn't be reached, send some extra logs to notify the administrator */ - print_red (_("You are not allowed to delete this component!")); + msg_dialog::display(_("Permission error"), msgPool::permDelete(), ERROR_DIALOG); new log("security","systems/".get_class($this),$dn,array(),"Tried to trick deletion."); } /* Remove lock file after successfull deletion */ @@ -732,14 +740,14 @@ class systems extends plugin /* Lock the current entry, so nobody will edit it during deletion */ add_lock ($this->dn, $this->ui->dn); - $smarty->assign("warning", sprintf(_("You're about to delete all information about the component at '%s'."), @LDAP::fix($this->dn))); + $smarty->assign("warning", msgPool::deleteInfo(@LDAP::fix($this->dn))); $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. */ - print_red (_("You are not allowed to delete this component!")); + msg_dialog::display(_("Permission error"), msgPool::permDelete(), ERROR_DIALOG); } } @@ -783,7 +791,11 @@ class systems extends plugin if(preg_match("/d/",$tabacl)){ /* Delete request is permitted, perform LDAP action */ - if($tabtype=="phonetabs"){ + if(in_array($type,array("ArpNewDevice","NewDevice")) && class_available("termgeneric")){ + $this->systab= new termgeneric($this->config, $this->dn); + $this->systab->set_acl_base($this->dn); + $this->systab->remove_from_parent(); + }elseif($tabtype=="phonetabs"){ $this->systab= new $tabtype($this->config, $this->config->data['TABS'][$tabobj], $this->dn,$type); $this->systab->set_acl_base($this->dn); $this->systab->by_object['phoneGeneric']->remove_from_parent (); @@ -800,7 +812,7 @@ class systems extends plugin /* Normally this shouldn't be reached, send some extra logs to notify the administrator */ - print_red (_("You are not allowed to delete this component!")); + msg_dialog::display(_("Permission error"), msgPool::permDelete(), ERROR_DIALOG); new log("security","systems/".get_class($this),$dn,array(),"Tried to trick deletion."); } @@ -809,14 +821,7 @@ class systems extends plugin } - - - - - - - - /******************** + /******************** Edit system type finished, check if everything went ok ********************/ /* Finish user edit is triggered by the tabulator dialog, so @@ -839,7 +844,7 @@ class systems extends plugin } } if(!$found){ - print_red(sprintf(_("Can't set gotoMode to status 'active', the current object couldn't be identified."))); + msg_dialog::display(_("Internal error"), _("Cannot set mode to 'active'!"), ERROR_DIALOG); } } @@ -880,6 +885,39 @@ class systems extends plugin } $this->systab->save(); + + /* Get macAddress to be able to an installation event + */ + if($this->systab instanceof ArpNewDeviceTabs || session::is_set('SelectedSystemType')){ + $events = DaemonEvent::get_event_types(SYSTEM_EVENT); + + /* Get mac of currently edited entry */ + $mac = ""; + if($this->systab instanceof ArpNewDeviceTabs){ + $mac = $this->systab->by_object['ArpNewDevice']->netConfigDNS->macAddress; + }else{ + foreach(array("workgeneric","termgeneric","servgeneric") as $type){ + if(isset($this->systab->by_object[$type]->netConfigDNS->macAddress)){ + $mac = $this->systab->by_object[$type]->netConfigDNS->macAddress; + break; + } + } + } + + /* Add installation event + */ + if(!empty($mac) && isset($events['BY_CLASS']['DaemonEvent_reinstall'])){ + $evt = $events['BY_CLASS']['DaemonEvent_reinstall']; + $tmp = new $evt['CLASS_NAME']($this->config); + $tmp->add_targets(array($mac)); + $tmp->set_type(SCHEDULED_EVENT); + $o_queue = new gosaSupportDaemon(); + $o_queue->append($tmp); + if($o_queue->is_error()){ + msg_dialog::display(_("Service infrastructure"),msgPool::siError($o_queue->get_error()),ERROR_DIALOG); + } + } + } if(session::is_set('SelectedSystemType')){ session::un_set('SelectedSystemType'); @@ -908,7 +946,7 @@ class systems extends plugin } else { /* Ok. There seem to be errors regarding to the tab data, show message and continue as usual. */ - show_errors($message); + msg_dialog::displayChecks($message); } } @@ -943,6 +981,7 @@ class systems extends plugin $dialog = FALSE; $hide_apply = $this->dn == "new"; + $hide_apply = ($this->dn == "new") || (preg_match("/".normalizePreg(get_ou("incomingou"))."/",$this->dn)); if(is_object($this->systab) && !isset($this->systab->by_object)){ $dialog = TRUE; $hide_apply = TRUE; @@ -959,13 +998,13 @@ class systems extends plugin if (!$dialog){ $display.= "
\n"; - $display.= "\n"; + $display.= "\n"; $display.= " \n"; if (!$hide_apply){ - $display.= "\n"; + $display.= "\n"; $display.= " \n"; } - $display.= "\n"; + $display.= "\n"; $display.= "
"; } return ($display); @@ -1347,13 +1386,10 @@ class systems extends plugin /* Return C&P dialog */ if($this->start_pasting_copied_objects && $this->CopyPasteHandler->entries_queued()){ - - /* Load entry from queue and set base */ - $this->CopyPasteHandler->load_entry_from_queue(); - $this->CopyPasteHandler->SetVar("base",$this->DivListSystem->selectedBase); /* Get dialog */ $data = $this->CopyPasteHandler->execute(); + $this->CopyPasteHandler->SetVar("base",$this->DivListSystem->selectedBase); /* Return dialog data */ if(!empty($data)){ @@ -1402,7 +1438,7 @@ class systems extends plugin { $temp= ""; $conv= array( - "NQ" => array("select_newsystem.png",_("New System from incoming")), + "NQ" => array("select_newsystem.png",_("New system from incoming")), "D" => array("select_default.png",_("Template")), "T" => array("select_terminal.png",_("Terminal")), "L" => array("select_workstation.png",_("Workstation")), @@ -1414,10 +1450,10 @@ class systems extends plugin "GS" => array("select_server_green.png",_("Server is installing")), "YS" => array("select_server_yellow.png",_("Server is waiting for action")), "RS" => array("select_server_red.png",_("Server installation failed")), - "W" => array("select_winstation.png",_("Winstation")), - "C" => array("select_component.png",_("Network Device")), - "NT"=> array("select_new_terminal.png",_("New Terminal")), - "NL"=> array("select_new_workstation.png",_("New Workstation")), + "W" => array("select_winstation.png",_("Win workstation")), + "C" => array("select_component.png",_("Network device")), + "NT"=> array("select_new_terminal.png",_("New terminal")), + "NL"=> array("select_new_workstation.png",_("New workstation")), "P" => array("select_printer.png",_("Printer"))); if((isset($input['is_new']))&&(!empty($input['is_new']))){