X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-plugins%2Fsystems%2Fadmin%2Fsystems%2Fclass_systemManagement.inc;h=6283f5c1b9976e9a7617cf58609e542304fa1ad1;hb=032e09dd7aba6b584b55daa165cc647215b6c582;hp=e626517c405bcdc5b76e4e8bcfefcabf5e5644da;hpb=3212a5d4e27b47cce45fbcf718657ced811f858d;p=gosa.git diff --git a/gosa-plugins/systems/admin/systems/class_systemManagement.inc b/gosa-plugins/systems/admin/systems/class_systemManagement.inc index e626517c4..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); } } } @@ -368,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); } } @@ -396,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); } } @@ -408,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))); } } @@ -462,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'); } @@ -483,28 +495,84 @@ class systems extends plugin /******************** - Action for MULTIPLE entries requested + Action(s) for MULTIPLE + ********************/ + + /******************** + SCHEDULE action in GOsa Daemon ********************/ - if (preg_match("/(halt|reboot|reinstall|update|wake|)_multiple/", $s_action)){ + + if(preg_match("/^schedule_event_/",$s_action) || preg_match("/^trigger_event_/",$s_action)){ $this->dns = array(); $ids = $this->list_get_selected_items(); if(count($ids)){ - $mac= array(); - $ldap = $this->config->get_ldap_link(); + $mac= array(); + $ldap = $this->config->get_ldap_link(); foreach($ids as $id){ - $ldap->cat ($this->terminals[$id]['dn'], array("macAddress")); - $attrs= $ldap->fetch(); - if (isset($attrs['macAddress'][0])){ - $mac[]= $attrs['macAddress'][0]; - } + $ldap->cat ($this->terminals[$id]['dn'], array("macAddress")); + $attrs= $ldap->fetch(); + if (isset($attrs['macAddress'][0])){ + $mac[]= $attrs['macAddress'][0]; + } } + $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]); - /* Action.... */ - $action= preg_replace('/_multiple.*$/', '', $s_action); - gosaSupportDaemon::send("gosa_trigger_action_".$action, $mac, array("macAddress" => $mac)); + 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); + if(preg_match("/trigger_event/",$s_action)){ + $this->systab->set_type(TRIGGERED_EVENT); + }else{ + $this->systab->set_type(SCHEDULED_EVENT); + } + } + } + } + + /* Insert scheduled events into queue */ + if($this->systab instanceof DaemonEvent){ + $this->systab->save_object(); + + /* Save event + */ + if(isset($_POST['save_event_dialog']) || $this->systab->get_type() == TRIGGERED_EVENT){ + $o_queue = new gosaSupportDaemon(); + $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; + } + } + if(isset($_POST['abort_event_dialog'])){ + $this->systab = FALSE; } } @@ -527,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))); } @@ -587,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 (); @@ -602,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 */ @@ -673,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); } } @@ -724,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 (); @@ -741,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."); } @@ -750,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 @@ -780,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); } } @@ -821,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'); @@ -849,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); } } @@ -884,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; @@ -900,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); @@ -1288,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)){ @@ -1343,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")), @@ -1355,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']))){