X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fsystems%2Fclass_systemManagement.inc;h=3f376951e09d57f4f79ce32096734a66a163ab26;hb=14a1125842be8515bd8b8f7117081e00f40470b5;hp=89286db3793b93b9832d83b535a5e0d865540cd4;hpb=aedbcc5c947af4e3599bb7a41a847afdfcc4b0d2;p=gosa.git
diff --git a/plugins/admin/systems/class_systemManagement.inc b/plugins/admin/systems/class_systemManagement.inc
index 89286db37..3f376951e 100644
--- a/plugins/admin/systems/class_systemManagement.inc
+++ b/plugins/admin/systems/class_systemManagement.inc
@@ -83,6 +83,9 @@ class systems extends plugin
}elseif(preg_match("/user_setpwd_.*/i",$key)){
$s_action="change_pw";
$s_entry = preg_replace("/user_setpwd_/i","",$key);
+ }elseif(preg_match("/gen_cd_.*/i",$key)){
+ $s_action="gen_cd";
+ $s_entry = preg_replace("/gen_cd_/i","",$key);
}elseif(preg_match("/newsystem_.*/i",$key)){
$s_action="newsystem";
$s_entry = preg_replace("/newsystem_/i","",$key);
@@ -96,6 +99,7 @@ class systems extends plugin
if(isset($_POST['SystemTypeChoosen'])){
$s_action = "SelectedSystemType";
$s_entry = $_POST['SystemType'];
+ $_SESSION['SelectedSystemType']['ogroup'] = $_POST['ObjectGroup'];
$this->systab = NULL;
}
@@ -108,9 +112,6 @@ class systems extends plugin
$s_entry = $_GET['id'];
}
- /* Save Termfilter .... */
- $this->reload();
-
/* Check for exeeded sizelimit */
if (($message= check_sizelimit()) != ""){
return($message);
@@ -127,6 +128,12 @@ class systems extends plugin
/* Create new default terminal
* Or create specified object of selected system type, from given incoming object
*/
+
+ $save_object_directly = false;
+ if(($s_action == "SelectedSystemType") && (isset($_POST['ObjectGroup']) && ($_POST['ObjectGroup'] != "none"))){
+ $save_object_directly = true;
+ }
+
if (isset($_POST['create_system'])||$s_action=="newsystem"||$s_action == "SelectedSystemType") {
/* If the current entry is an incoming object
@@ -182,7 +189,7 @@ class systems extends plugin
/* Find out more about the object type */
$ldap= $this->config->get_ldap_link();
- $ldap->cat($this->dn);
+ $ldap->cat($this->dn, array('objectClass'));
$attrs= $ldap->fetch();
$type= $this->get_system_type($attrs['objectClass']);
@@ -215,6 +222,91 @@ class systems extends plugin
}
}
+ /********************
+ Create FAI CD ...
+ ********************/
+ if ($s_action=="gen_cd"){
+ $this->dn= $this->terminals[$s_entry]['dn'];
+ $_SESSION['objectinfo']= $this->dn;
+ return ($smarty->fetch(get_template_path('gencd.tpl', TRUE)));
+ }
+
+ /* Start CD-Creation */
+ if (isset($_POST["cd_create"])){
+ $smarty->assign("src", "?plug=".$_GET['plug']."&PerformIsoCreation");
+ return ($smarty->fetch(get_template_path('gencd_frame.tpl', TRUE)));
+ }
+
+ if ($this->dn != "" && isset($_GET['PerformIsoCreation'])){
+
+ $return_button = "
";
+
+ $dsc = array(0 => array("pipe", "r"), 1 => array("pipe", "w"), 2 => array("pipe", "w"));
+
+ /* Get and check command */
+ $command= search_config($this->config->data['TABS'], "workgeneric", "ISOCMD");
+ if (check_command($command)){
+ @DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__, $command, "Execute");
+
+ /* Print out html introduction */
+ echo '
+
+
+
+
+
+
+
+ ';
+
+ /* Open process handle and check if it is a valid process */
+ $process= proc_open($command." '".$this->dn."'", $dsc, $pipes);
+ if (is_resource($process)) {
+ fclose($pipes[0]);
+
+ /* Print out returned lines && write JS to scroll down each line */
+ while (!feof($pipes[1])){
+ $cur_dat = fgets($pipes[1], 1024);
+ echo $cur_dat;
+ echo '' ;
+ flush();
+ }
+ }
+
+ /* Get error string && close streams */
+ $buffer = "";
+ while (!feof($pipes[2])){
+ $buffer .= fgets($pipes[2],256);
+ }
+
+ fclose($pipes[1]);
+ fclose($pipes[2]);
+ echo "
";
+
+ /* Check return code */
+ $ret= proc_close($process);
+ if ($ret != 0){
+ echo ""._("Creating the image failed. Please see the report below.")."
";
+ echo "$buffer
";
+ }
+
+ echo $return_button."
";
+
+ } else {
+ $tmp= "".sprintf(_("Command '%s', specified for ISO creation doesn't seem to exist."), $command)."
";
+ echo $tmp;
+ }
+
+ /* Scroll down completly */
+ echo '' ;
+ echo '';
+ flush();
+ exit;
+ }
+
/********************
Change password ...
@@ -306,7 +398,7 @@ 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", sprintf(_("You're about to delete all information about the component at '%s'."), @LDAP::fix($this->dn)));
return($smarty->fetch(get_template_path('remove.tpl', TRUE)));
} else {
@@ -329,7 +421,7 @@ class systems extends plugin
/* Find out more about the object type */
$ldap= $this->config->get_ldap_link();
- $ldap->cat($this->dn);
+ $ldap->cat($this->dn, array('objectClass'));
$attrs= $ldap->fetch();
$type= $this->get_system_type($attrs['objectClass']);
@@ -368,7 +460,6 @@ class systems extends plugin
$this->systab= NULL;
/* Terminal list has changed, reload it. */
- $this->reload ();
} else {
/* Normally this shouldn't be reached, send some extra
@@ -389,17 +480,44 @@ class systems extends plugin
/* Finish user edit is triggered by the tabulator dialog, so
the user wants to save edited data. Check and save at this
point. */
- if ((isset($_POST['edit_finish'])) && (isset($this->systab->config))){
+ if ((isset($_POST['edit_finish'])) && (isset($this->systab->config)) || $save_object_directly){
/* Check tabs, will feed message array */
- $message= $this->systab->check();
+ $message = array();
+ if(!$save_object_directly){
+ $message = $this->systab->check();
+ }else{
+ $found = false;
+
+ /* Set gotoMode to active if we there was an ogroup selected . (save_object_directly) */
+ foreach(array("workgeneric"=>"active","servgeneric"=>"active","termgeneric"=>"graphic") as $tab => $value){
+ if(isset($this->systab->by_object[$tab]->gotoMode)) {
+ $found = true;
+ $this->systab->by_object[$tab]->gotoMode = $value;
+ }
+ }
+ if(!$found){
+ print_red(sprintf(_("Can't set gotoMode to status 'avtice', the current object couldn't be identified.")));
+ }
+ }
/* Save, or display error message? */
if (count($message) == 0){
/* Save terminal data to ldap */
- gosa_log ("System object'".$this->dn."' has been saved");
+ if(isset($_SESSION['SelectedSystemType']['ogroup']) && $_SESSION['SelectedSystemType']['ogroup'] != 'none'){
+ foreach (array("workservice", "termservice") as $cls){
+ if (isset($this->systab->by_object[$cls])){
+ $this->systab->by_object[$cls]->gotoXMouseport= "";
+ $this->systab->by_object[$cls]->gotoXMouseType= "";
+ $this->systab->by_object[$cls]->gotoXResolution= "";
+ $this->systab->by_object[$cls]->gotoXColordepth= "";
+ }
+ }
+ }
+
$this->systab->save();
+ gosa_log ("System object'".$this->dn."' has been saved");
/* Incoming behavior; you can select a system type and an ogroup membership.
* If this object is an Incoming object, $_SESSION['SelectedSystemType'] isset.
@@ -408,6 +526,7 @@ class systems extends plugin
* If this is done, delete the old incoming entry... it is still there, because this is a new
* entry and not an edited one, so we will delete it.
*/
+
if(isset($_SESSION['SelectedSystemType'])){
$SelectedSystemType= $_SESSION['SelectedSystemType'];
unset($_SESSION['SelectedSystemType']);
@@ -415,14 +534,14 @@ class systems extends plugin
$og = new ogroup($this->config,$SelectedSystemType['ogroup']);
if($og){
$og->AddDelMembership($this->systab->dn);
+ $og->save();
}
- $og->save();
}
if(!isset($ldap)){
$ldap = $this->config->get_ldap_link();
}
$ldap->cd ($this->dn);
- $ldap->cat($this->dn);
+ $ldap->cat($this->dn, array('dn'));
if(count($ldap->fetch())){
$ldap->cd($this->dn);
$ldap->rmDir($this->dn);
@@ -436,9 +555,6 @@ class systems extends plugin
del_lock ($this->dn);
}
- /* There's no page reload so we have to read new terminals at
- this point. */
- $this->reload ();
unset ($this->systab);
$this->systab= NULL;
unset($_SESSION['objectinfo']);
@@ -487,7 +603,14 @@ class systems extends plugin
}
/* Display dialog with system list */
+ $this->DivListSystem->parent = $this;
$this->DivListSystem->execute();
+
+ /* Add departments if subsearch is disabled */
+ if(!$this->DivListSystem->SubSearch){
+ $this->DivListSystem->AddDepartments($this->DivListSystem->selectedBase);
+ }
+ $this->reload();
$this->DivListSystem->setEntries($this->terminals);
return($this->DivListSystem->Draw());
}
@@ -533,7 +656,7 @@ class systems extends plugin
$responsible= array();
foreach ($this->config->departments as $key => $value){
if (get_module_permission(get_permissions ($value, $this->ui->subtreeACL),
- "terminal", $value) == "#all#"){
+ "systems", $value) != ""){
$responsible[$key]= $value;
}
}
@@ -558,7 +681,7 @@ class systems extends plugin
/* This array represents the combination between checkboxes and search filters */
$objs = array( "ShowServers" => array("CLASS" => "goServer" ,"TREE" => "ou=servers,ou=systems," ),
- "ShowTerminals" => array("CLASS" => "goHard" ,"TREE" => "ou=terminals,ou=systems,"),
+ "ShowTerminals" => array("CLASS" => "gotoTerminal" ,"TREE" => "ou=terminals,ou=systems,"),
"ShowPrinters" => array("CLASS" => "gotoPrinter" ,"TREE" => "ou=printers,ou=systems," ),
"ShowDevices" => array("CLASS" => "ieee802Device" ,"TREE" => "ou=netdevices,ou=systems," ),
"ShowPhones" => array("CLASS" => "goFonHardware" ,"TREE" => "ou=phones,ou=systems," ),
@@ -572,13 +695,20 @@ class systems extends plugin
/* Walk through all possible search combinations, and search for some objects if the checkbox is enabled */
foreach($objs as $checkBox => $oc){
-
if($this->DivListSystem->$checkBox){
- /* User filter? */
- if($oc['CLASS'] != ""){
- $filter = "(|(&".$userregex."(objectClass=".$oc['CLASS'].")(cn=".$this->DivListSystem->Regex.")))";
- $res = array_merge($res,get_list($filter,$this->ui->subtreeACL, $oc['TREE'].$base,
- array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), GL_NONE));
+ if($this->DivListSystem->SubSearch){
+ if($oc['CLASS'] != ""){
+ $filter = "(&".$userregex."(objectClass=".$oc['CLASS'].")(cn=".$this->DivListSystem->Regex."))";
+ $res = array_merge($res,get_list($filter,$this->ui->subtreeACL, $base,
+ array("cn", "description", "macAddress", "objectClass", "sambaDomainName", "FAIstate"), GL_NONE | GL_SUBSEARCH | GL_SIZELIMIT));
+ }
+ }else{
+ /* User filter? */
+ if($oc['CLASS'] != ""){
+ $filter = "(&".$userregex."(objectClass=".$oc['CLASS'].")(cn=".$this->DivListSystem->Regex."))";
+ $res = array_merge($res,get_list($filter,$this->ui->subtreeACL, $oc['TREE'].$base,
+ array("cn", "description", "macAddress", "objectClass", "sambaDomainName", "FAIstate"), GL_NONE | GL_SIZELIMIT));
+ }
}
}
}
@@ -586,7 +716,7 @@ class systems extends plugin
/* Search for incoming objects */
$filter = "(|(&".$userregex."(objectClass=goHard)(cn=".$this->DivListSystem->Regex.")))";
$res = array_merge($res,get_list($filter,$this->ui->subtreeACL, "ou=incoming,".$base,
- array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), GL_NONE));
+ array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), GL_NONE | GL_SIZELIMIT));
/* Get all gotoTerminal's */
foreach ($res as $value){
@@ -603,19 +733,25 @@ class systems extends plugin
/* check if current object is a new one */
if (preg_match ("/,ou=incoming,/i", $tmp)){
- if (in_array('gotoTerminal', $value['objectClass'])){
+ if (in_array_ics('gotoTerminal', $value['objectClass'])){
$add= "- "._("New terminal");
- }elseif (in_array('gotoWorkstation', $value['objectClass'])){
+ }elseif (in_array_ics('gotoWorkstation', $value['objectClass'])){
$add= "- "._("New workstation");
- }elseif (in_array('GOhard', $value['objectClass'])){
+ }elseif (in_array_ics('GOhard', $value['objectClass'])){
$add= "- "._("New Device");
}
}
+ /* Create a string containing the last part of the department. */
+ $dn_name = preg_replace("#^([^/]+/)*#","",convert_department_dn(@LDAP::fix($tmp)));
+ if(empty($dn_name)){
+ $dn_name = "/";
+ }
+
/* Detect type of object and create an entry for $this->terminals */
$terminal = array();
if ((in_array ($tmp, $responsible)) || ($add != "")){
- if (in_array('gotoTerminal', $value["objectClass"])){
+ if (in_array_ics('gotoTerminal', $value["objectClass"])){
if (isset($value["macAddress"][0]) && $value["macAddress"][0] != "-"){
$terminal = $value;
$terminal['type'] = "T";
@@ -623,10 +759,10 @@ class systems extends plugin
} else {
$terminal = $value;
$terminal['type'] = "D";
- $terminal['message'] = _("Terminal template for");
+ $terminal['message'] = _("Terminal template for")." '".$dn_name."' ";
$terminal['location'] = array_search($tmp, $this->config->departments);
}
- } elseif (in_array('gotoWorkstation', $value["objectClass"])){
+ } elseif (in_array_ics('gotoWorkstation', $value["objectClass"])){
if (isset($value["macAddress"][0]) && $value["macAddress"][0] != "-"){
$terminal = $value;
$terminal['type'] = "L";
@@ -635,22 +771,28 @@ class systems extends plugin
$terminal = $value;
$terminal['type'] = "D";
$terminal['location'] = array_search($tmp, $this->config->departments);
- $terminal['message'] = _("Workstation template for");
+ $terminal['message'] = _("Workstation template for")." '".$dn_name."' ";
}
- } elseif (in_array('gotoPrinter', $value["objectClass"])){
+ if (isset($value["FAIstate"][0])){
+ $terminal['type']= $this->getState($terminal['type'], $value["FAIstate"][0]);
+ }
+ } elseif (in_array_ics('gotoPrinter', $value["objectClass"])){
$terminal = $value;
$terminal['type'] = "P";
- } elseif (in_array('goServer', $value["objectClass"])){
+ } elseif (in_array_ics('goServer', $value["objectClass"])){
$terminal = $value;
$terminal['type'] = "S";
- } elseif (in_array('goFonHardware', $value["objectClass"])){
+ if (isset($value["FAIstate"][0])){
+ $terminal['type']= $this->getState($terminal['type'], $value["FAIstate"][0]);
+ }
+ } elseif (in_array_ics('goFonHardware', $value["objectClass"])){
$terminal = $value;
$terminal['type'] = "F";
- }elseif (in_array("GOhard",$value['objectClass'])){
+ }elseif (in_array_ics("GOhard",$value['objectClass'])){
$terminal = $value;
$terminal['type'] = "Q";
$terminal['is_new'] = $add;
- } elseif (in_array('ieee802Device', $value["objectClass"])){
+ } elseif (in_array_ics('ieee802Device', $value["objectClass"])){
$terminal = $value;
$terminal['type'] = "C";
} else{
@@ -691,22 +833,22 @@ class systems extends plugin
function get_system_type($classes)
{
$type= "";
- if (in_array('ieee802Device', $classes)){
+ if (in_array_ics('ieee802Device', $classes)){
$type= "component";
- }elseif (in_array('gotoTerminal', $classes)){
+ }elseif (in_array_ics('gotoTerminal', $classes)){
$type= "terminal";
- }elseif (in_array('gotoWorkstation', $classes)){
+ }elseif (in_array_ics('gotoWorkstation', $classes)){
$type= "workstation";
- }elseif (in_array('gotoPrinter', $classes)){
+ }elseif (in_array_ics('gotoPrinter', $classes)){
$type= "printer";
- }elseif (in_array('goFonHardware', $classes)){
+ }elseif (in_array_ics('goFonHardware', $classes)){
$type= "phone";
- }elseif (in_array('goServer', $classes)){
+ }elseif (in_array_ics('goServer', $classes)){
$type= "server";
- }elseif (in_array('GOhard', $classes)){
+ }elseif (in_array_ics('GOhard', $classes)){
$type= "NewDevice";
- }elseif (in_array('sambaAccount', $classes) ||
- in_array('sambaSamAccount', $classes)){
+ }elseif (in_array_ics('sambaAccount', $classes) ||
+ in_array_ics('sambaSamAccount', $classes)){
$type= "winstation";
}
return ($type);
@@ -721,8 +863,14 @@ class systems extends plugin
"D" => array("select_default.png",_("Template")),
"T" => array("select_terminal.png",_("Terminal")),
"L" => array("select_workstation.png",_("Workstation")),
+ "GL" => array("select_workstation_green.png",_("Workstation is installing")),
+ "YL" => array("select_workstation_yellow.png",_("Workstation is waiting for action")),
+ "RL" => array("select_workstation_red.png",_("Workstation installation failed")),
"F" => array("select_phone.png",_("Phone")),
"S" => array("select_server.png",_("Server")),
+ "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")),
@@ -741,6 +889,31 @@ class systems extends plugin
}
}
+
+ function getState($type, $state)
+ {
+ switch (preg_replace('/:.*$/', '', $state)) {
+ case 'installing':
+ $type= 'G'.$type;
+ break;
+ case 'error':
+ $type= 'R'.$type;
+ break;
+ case 'install':
+ $type= 'Y'.$type;
+ break;
+ case 'sysinfo':
+ $type= 'Y'.$type;
+ break;
+ case 'softupdate':
+ $type= 'Y'.$type;
+ break;
+ }
+
+
+ return ($type);
+ }
+
}
// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: