X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fsystems%2Fclass_systemManagement.inc;h=4d210ca563e47a6d75fcad561d11b27c3a2c3880;hb=7f51b7c557fe5fb3c73b5bde15856fbfdb08efbb;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..4d210ca56 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,69 @@ class systems extends plugin } } + /******************** + Create FAI CD ... + ********************/ + if ($s_action=="gen_cd"){ +echo "ACL CHECK!"; + $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"])){ +echo "ACL CHECK!"; + $smarty->assign("src", "?plug=".$_GET['plug']."&PerformIsoCreation"); + return ($smarty->fetch(get_template_path('gencd_frame.tpl', TRUE))); + } + + if ($this->dn != "" && isset($_GET['PerformIsoCreation'])){ +echo "ACL CHECK!"; + + $command= search_config($this->config->data['TABS'], "workgeneric", "ISOCMD"); + if (check_command($command)){ + @DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__, $command, "Execute"); + + $dsc= array(0 => array("pipe", "r"), 1 => array("pipe", "w"), 2 => array("pipe", "w")); + echo ""; + echo ""; + echo ""; + echo "
";
+        $process= proc_open($command, $dsc, $pipes, '/tmp');
+        if (is_resource($process)) {
+          fclose($pipes[0]);
+          while (!feof($pipes[1])){
+            echo fgets($pipes[1], 1024);
+            flush();
+          }
+        }
+        $buffer= stream_get_contents($pipes[2]);
+        fclose($pipes[1]);
+        fclose($pipes[2]);
+        $ret= proc_close($process);
+        echo "
"; + + if ($ret == 0){ + echo "hier der runterladen button"; + } else { + echo "

"._("Creating the image failed. Please see the report below.")."

"; + echo "
$buffer
"; + } + + } else { + $tmp= "

".sprintf(_("Command '%s', specified for ISO creation doesn't seem to exist."), $command)."

"; + echo $tmp; + } + + echo ""; + echo ""; + + exit; + } + + /******************** Change password ... @@ -306,7 +376,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 +399,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 +438,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 +458,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 +504,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 +512,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 +533,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 +581,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()); } @@ -558,7 +659,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 +673,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 +694,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 +711,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 +737,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 +749,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 +811,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 +841,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 +867,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: