X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-plugins%2Fsystems%2Fadmin%2Fsystems%2Fclass_systemManagement.inc;h=6283f5c1b9976e9a7617cf58609e542304fa1ad1;hb=032e09dd7aba6b584b55daa165cc647215b6c582;hp=228acaa2b641f6e4b68d3893fe9800b5e8aa74c2;hpb=60395fb43a0245d6cdd410ded1b07ffa24346c6b;p=gosa.git diff --git a/gosa-plugins/systems/admin/systems/class_systemManagement.inc b/gosa-plugins/systems/admin/systems/class_systemManagement.inc index 228acaa2b..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['macadress'] = $target; - $o_queue->send_data($header,$target,$data,!$save_events_directly); - 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']))){