diff --git a/gosa-plugins/goto/admin/systems/goto/class_terminalService.inc b/gosa-plugins/goto/admin/systems/goto/class_terminalService.inc
index b8c3005e87451491e43d0c90e2d56a0c627918b3..1fec80d9cc7b75bde13455258953aa891df7bf3a 100644 (file)
class termservice extends plugin
{
- /* CLI vars */
- var $cli_summary= "Manage terminal service aspects";
- var $cli_description= "Some longer text\nfor help";
- var $cli_parameters= array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser");
-
/* Generic terminal attributes */
var $gotoLpdEnable= FALSE;
var $gotoXMonitor= "";
- var $gotoXMethod= "";
+ var $gotoXMethod= "default";
var $gotoXdmcpServer= "";
- var $gotoFontPath= "";
var $gotoXDriver= "";
var $gotoXResolution= "";
var $gotoXColordepth= "";
var $XKbVariants= array ();
var $MouseTypes= array();
var $MousePorts= array();
- var $gotoScannerModels= array();
var $hardware_list= array();
var $used_hardware= array();
/* attribute list for save action */
- var $attributes= array("cn", "gotoLpdEnable", "gotoXMonitor", "gotoXMethod", "gotoXdmcpServer",
- "gotoFontPath", "gotoXDriver", "gotoXResolution", "gotoXColordepth",
+ var $attributes= array("gotoLpdEnable", "gotoXMonitor", "gotoXMethod", "gotoXdmcpServer",
+ "gotoXDriver", "gotoXResolution", "gotoXColordepth",
"gotoXHsync", "gotoXVsync", "gotoLpdEnable", "gotoLpdServer",
"gotoScannerEnable", "gotoScannerModel", "gotoScannerClients",
"gotoScannerBackend", "gotoXKbModel", "gotoXKbLayout", "gotoXKbVariant",
"gotoXMouseType", "gotoXMouseport", "goFonHardware");
var $objectclasses= array("GOhard");
+ var $is_ogroup = FALSE;
+ var $is_ogroup_member = FALSE;
+
+ var $selected_xdmcp_servers = array();
+ var $inherited_xdmcp_servers = array();
function termservice (&$config, $dn= NULL, $parent= NULL)
{
plugin::plugin ($config, $dn, $parent);
-
+ $this->orig_dn= $this->dn;
+
+ /* Check if we are a part of an ogroup.
+ * In this case, we have to hide all the inherit stuff.
+ */
+ if(isset($parent) && get_class($parent) == "ogroup"){
+ $this->is_ogroup = TRUE;
+ }
+
+ /* Check if we are member of an object group.
+ */
+ $ldap= $this->config->get_ldap_link();
+ $ldap->cd($this->config->current['BASE']);
+ $ldap->search("(&(objectClass=gotoWorkstationTemplate)(member=".LDAP::prepare4filter($this->dn)."))");
+ if($ldap->count()){
+ $this->is_ogroup_member = TRUE;
+ }
+
/* Get list of available xdrivers */
$this->XDrivers = $this->getListOfXDrivers();
- array_unshift($this->XDrivers, "["._("unknown")."]");
-
- $this->XResolutions= array(
- "default" => "["._("inherited")."]" ,
- "640x480" => "640x480",
- "800x600" => "800x600",
- "1024x768" => "1024x768",
- "1152x864" => "1152x864",
- "1280x1024" => "1280x1024",
- "1400x1050" => "1400x1050",
- "1600x1200" => "1600x1200");
-
- if(isset($this->config->data['MAIN']['RESOLUTION_HOOK'])){
- $file = $this->config->data['MAIN']['RESOLUTION_HOOK'];
+ /* Create a list of available resolutions.
+ */
+ $this->XResolutions= array(
+ "640x480" => "640x480",
+ "800x600" => "800x600",
+ "1024x768" => "1024x768",
+ "1152x864" => "1152x864",
+ "1280x1024" => "1280x1024",
+ "1400x1050" => "1400x1050",
+ "1600x1200" => "1600x1200");
+
+ if(isset($this->config->data['MAIN']['RESOLUTIONS'])){
+ $file = $this->config->data['MAIN']['RESOLUTIONS'];
if(is_readable($file)){
$str = file_get_contents($file);
$lines = split("\n",$str);
$this->XResolutions[$line]=$line;
}
}
- //natcasesort($this->gotoXResolutions);
}else{
- print_red(sprintf(_("You have specified an external resolution hook which can't be read, please check the permission of the file '%s'."),$file));
+ msg_dialog::display(_("Configuration error"), msgPool::cannotReadFile($file), WARNING_DIALOG);
}
}
+ /* Create a set of selectable color depths
+ */
$this->XColordepths= array(
- "default" => "["._("inherited")."]",
"8" => "8 " ._("bit"),
"15" => "15 "._("bit"),
"16" => "16 "._("bit"),
"24" => "24 "._("bit"));
- $this->XKbModels['default']= "["._("inherited")."]";
+
+ /* Create a set of selectable keyboard models
+ */
+ $this->XKbModels = array();
foreach(array ("btc9000", "chicony", "compaq", "dell", "dell101", "everex",
"flexpro", "geniuscomfy", "hp", "itouch", "jp106", "logicordless",
"logiinetnav", "logiinternet", "macintosh", "microsoft",
}
/* Additional values will be extracted from CONFIG_DIR.keyboardLayouts */
- $this->XKbLayouts= array ("default"=>"["._("inherited")."]","de"=> "de","intl" =>"intl","us" =>"us");
- $this->XKbVariants= array ("default"=>"["._("inherited")."]", "nodeadkeys"=>"nodeadkeys", "basic"=>"basic");
-
- $this->MouseTypes= array( "AUTO" => "["._("inherited")."]" , "ImPS/2" => "ImPS/2",
- "PS/2" => "PS/2" , "Microsoft" => "Microsoft",
- "Logitech" => "Logitech");
-
- $this->MousePorts= array("AUTO" =>"["._("inherited")."]" , "/dev/ttyS0" => "/dev/ttyS0",
- "/dev/ttyS1" => "/dev/ttyS1" , "/dev/psaux" => "/dev/psaux",
- "/dev/input/mice" =>"/dev/input/mice");
+ $this->XKbLayouts = array("de"=> "de","intl" =>"intl","us" =>"us");
+ $this->XKbVariants= array("nodeadkeys"=>"nodeadkeys", "basic"=>"basic");
+ $this->MouseTypes = array("ImPS/2"=>"ImPS/2","PS/2"=>"PS/2", "explorerps/2"=>"explorerps/2",
+ "Microsoft"=>"Microsoft","Logitech"=>"Logitech");
+ $this->MousePorts = array("/dev/ttyS0"=>"/dev/ttyS0",
+ "/dev/ttyS1"=>"/dev/ttyS1","/dev/psaux"=>"/dev/psaux",
+ "/dev/input/mice"=>"/dev/input/mice");
- /* try to read additional keyboard layouts
+ /* Try to read additional keyboard layouts
*/
if(file_exists(CONFIG_DIR."/keyboardLayouts")){
if(is_readable(CONFIG_DIR."/keyboardLayouts")){
}
}
- /* Load scanner models */
- $fcontents = file (CONFIG_DIR."/scanner-list");
- while (list ($line_num, $line) = each ($fcontents)) {
- preg_match('/^(\w+) "([^"]+)" "([^"]+)" "([^"]+)"/', "$line", $matches);
- $this->gotoScannerModels[$matches[2]." - ".$matches[3]]= $matches[1]."|".$matches[4];
+ /* Terminal server methods
+ */
+ if($this->is_ogroup_member){
+ $this->XMethods["default"]= _("inherited");
}
- ksort ($this->gotoScannerModels);
-
- /* Initialize methods */
- $this->XMethods["default"]= _("default");
- $this->XMethods["indirect"]= _("show chooser");
- $this->XMethods["query"]= _("direct");
-#$this->XMethods["squery"]= _("direct via ssh");
-#$this->XMethods["nquery"]= _("direct via nx");
- $this->XMethods["load"]= _("load balanced");
-#$this->XMethods["sload"]= _("load balanced via ssh");
-#$this->XMethods["nload"]= _("load balanced via nx");
- $this->XMethods["rdp"]= _("Windows RDP");
- $this->XMethods["citrix"]= _("ICA client");
+ $this->XMethods["xdmcp"] = _("XDMCP");
+ $this->XMethods["ldm"] = _("LDM");
+ $this->XMethods["rdp"] = _("Windows RDP");
+ $this->XMethods["citrix"] = _("ICA client");
- $this->orig_dn= $this->dn;
+ /* Get selected gotoXdmcpServer
+ */
+ $this->selected_xdmcp_servers = array();
+ if(isset($this->attrs['gotoXdmcpServer'])){
+ for($i = 0 ; $i < $this->attrs['gotoXdmcpServer']['count'] ; $i++){
+ $this->selected_xdmcp_servers[] = $this->attrs['gotoXdmcpServer'][$i];
+ }
+ }
- /* Load hardware list */
- $ldap= $this->config->get_ldap_link();
- $ldap->cd($this->config->current['BASE']);
- $ldap->search("(objectClass=goFonHardware)", array('cn', 'description'));
- while ($attrs= $ldap->fetch()){
+ /* Load phone hardware list
+ */
+ $tmp = get_sub_list("(objectClass=goFonHardware)","",array(get_ou("phoneou")),
+ $this->config->current['BASE'],array("cn","description"), GL_NO_ACL_CHECK);
+ foreach($tmp as $attrs){
$cn= $attrs['cn'][0];
+ $description= "";
if (isset($attrs['description'])){
$description= " - ".$attrs['description'][0];
- } else {
- $description= "";
}
$this->hardware_list[$cn]= "$cn$description";
}
-
- /* Eventually colorize phones */
- $ldap->cd($this->config->current['BASE']);
- $ldap->search("(goFonHardware=*)",array('cn','dn','goFonHardware'));
- while($attrs = $ldap->fetch()){
- $cn = $attrs['goFonHardware'][0];
- if(isset($this->hardware_list[$cn])){
- $this->used_hardware[$cn]= $cn;
- }
- }
-
$this->hardware_list["automatic"]= _("automatic");
ksort($this->hardware_list);
- /* Convert gotoLpdEnable */
+ /* These departments may contain objects that have
+ goFonHardware set.
+ */
+ $deps_a = array(
+ get_people_ou(),
+ get_ou("ogroupou"),
+ get_ou("serverou"),
+ get_ou("terminalou"),
+ get_ou("workstationou"),
+ get_ou("printerou"),
+ get_ou("componentou"),
+ get_ou("phoneou"));
+
+ $tmp = get_sub_list("(goFonHardware=*)","",$deps_a,$this->config->current['BASE'],
+ array('cn','dn','goFonHardware'),GL_NO_ACL_CHECK);
+ foreach($tmp as $attrs){
+ $cn = $attrs['goFonHardware'][0];
+ if(isset($this->hardware_list[$cn])){
+ $this->used_hardware[$cn]= $cn;
+ }
+ }
+
+ /* Convert gotoLpdEnable
+ */
$this->gotoLpdEnable= preg_match("/yes/i",$this->gotoLpdEnable);
/* Load hardware list */
$ldap= $this->config->get_ldap_link();
$ldap->cd($this->config->current['BASE']);
- $ldap->search("(&(objectClass=gotoWorkstationTemplate)(member=".LDAP::prepare4filter($this->dn)."))");
+ $map= array(
+ "gotoXResolution",
+ "gotoXColordepth",
+ "gotoXKbModel",
+ "gotoXKbLayout",
+# "gotoXDriver",
+ "gotoXdmcpServer",
+ "gotoXKbVariant",
+ "gotoXMouseType",
+ "gotoXMethod",
+ "gotoXMouseport");
+ $ldap->search("(&(objectClass=gotoWorkstationTemplate)(member=".LDAP::prepare4filter($this->dn)."))",$map);
if ($ldap->count() == 1){
- $map= array("gotoXResolution", "gotoXColordepth", "gotoXKbModel", "gotoXKbLayout",
- "gotoXKbVariant", "gotoXMouseType", "gotoXMouseport");
$attrs= $ldap->fetch();
-
foreach ($map as $name){
if (!isset($attrs[$name][0])){
continue;
}
switch ($name){
+# case 'gotoXDriver':
+# $this->XDrivers = array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XDrivers;
+# break;
+ case 'gotoXMethod':
+ $this->XMethods = array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XMethods;
+ if(isset($attrs['gotoXdmcpServer'])){
+ for($i = 0 ; $i < $attrs['gotoXdmcpServer']['count'] ; $i++){
+ $this->inherited_xdmcp_servers[] = $attrs['gotoXdmcpServer'][$i];
+ }
+ }
+ break;
case 'gotoXResolution':
- $this->XResolutions['default'] = _("inherited").' ['.$attrs[$name][0].']' ;
+ $this->XResolutions= array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XResolutions;
break;
case 'gotoXColordepth':
- $this->XColordepths['default'] = _("inherited").' ['.$attrs[$name][0].' '._('Bit').']';
+ $this->XColordepths= array('default' => _("inherited").' ['.$attrs[$name][0].' '._('Bit').']') + $this->XColordepths;
break;
case 'gotoXKbModel':
- $this->XKbModels['default'] = _("inherited").' ['.$attrs[$name][0].']';
+ $this->XKbModels= array('default' => _("inherited").' ['.$attrs[$name][0].']') + $this->XKbModels;
break;
case 'gotoXKbLayout':
- $this->XKbLayouts['default'] = _("inherited").' ['.$attrs[$name][0].']';
+ $this->XKbLayouts= array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XKbLayouts;
break;
case 'gotoXKbVariant':
- $this->XKbVariants['default'] = _("inherited").' ['.$attrs[$name][0].']' ;
+ $this->XKbVariants= array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XKbVariants;
break;
case 'gotoXMouseType':
- $this->MouseTypes['AUTO'] = _("inherited").' ['.$attrs[$name][0].']' ;
+ $this->MouseTypes= array('AUTO' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->MouseTypes;
break;
case 'gotoXMouseport':
- $this->MousePorts['AUTO'] = _("inherited").' ['.$attrs[$name][0].']' ;
+ $this->MousePorts= array('AUTO' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->MousePorts;
break;
}
}
}
+
if(preg_match("/\+/",$this->gotoXHsync)){
$this->AutoSync = true;
$this->gotoXHsync = preg_replace("/\+/","-",$this->gotoXHsync);
}
}
+
function execute()
{
/* Call parent execute */
/* Do we represent a valid terminal? */
if (!$this->is_account && $this->parent === NULL){
- $display= "<img alt=\"\" src=\"images/stop.png\" align=\"middle\"> <b>".
+ $display= "<img alt=\"\" src=\"images/small-error.png\" align=\"middle\"> <b>".
_("This 'dn' has no terminal features.")."</b>";
return ($display);
}
$smarty->assign($name."ACL",$this->getacl($name));
}
+ if(isset($_POST['gotoXdmcpServer_add']) && isset($_POST['XdmcpAddServer'])){
+ if(!in_array($_POST['gotoXdmcpServer_add'],$this->selected_xdmcp_servers)){
+ $this->selected_xdmcp_servers[] = $_POST['gotoXdmcpServer_add'];
+ }
+ }
+
+ if(isset($_POST['selected_xdmcp_servers']) && isset($_POST['XdmcpDelServer'])){
+ $tmp = array();
+ foreach($this->selected_xdmcp_servers as $name){
+ if(!in_array($name,$_POST['selected_xdmcp_servers'])){
+ $tmp[] = $name;
+ }
+ }
+ $this->selected_xdmcp_servers = $tmp;
+ }
/* Arrays */
foreach(array("XMethods", "XDrivers", "XResolutions", "XColordepths",
- "gotoScannerModels", "XKbModels","XKbVariants",
- "MouseTypes", "MousePorts") as $val){
+ "XKbModels","XKbVariants","MouseTypes", "MousePorts") as $val){
$smarty->assign("$val", $this->$val);
}
$smarty->assign("XKbLayouts", $this->XKbLayouts);
$smarty->assign("XKbLayoutKeys",array_flip($this->XKbLayouts));
-
- $smarty->assign("xdmcpservers", $this->config->data['SERVERS']['TERMINAL']);
- $smarty->assign("fontservers", $this->config->data['SERVERS']['FONT']);
- $smarty->assign("nfsservers", $this->config->data['SERVERS']['NFS']);
$smarty->assign("nfsservers", $this->config->data['SERVERS']['NFS']);
+
+
+ /* Create a list of useable servers for the currently selected
+ * connection type.
+ */
+ $xdmcp_types = $this->config->data['SERVERS']['TERMINAL_SESSION_TYPES'];
+ $available_servers = array();
+ foreach($xdmcp_types as $servername =>$supported_types){
+ if(in_array(strtoupper($this->gotoXMethod),$supported_types)){
+ $available_servers[] = $servername;
+ }
+ }
+
+ /* Append additional information to invalid server selections.
+ */
+ $tmp = array();
+ foreach($this->selected_xdmcp_servers as $server){
+ if(in_array($server,$available_servers)){
+ $tmp[$server] = $server;
+ }else{
+ $tmp[$server] = $server." - "._("Unsupported");
+ }
+ }
+
+ /* Remove already selected servers from available list.
+ */
+ foreach($available_servers as $key => $server){
+ if(isset($tmp[$server])){
+ unset($available_servers[$key]);
+ }
+ }
+
+ $smarty->assign("selected_xdmcp_servers", $tmp);
+ $smarty->assign("inherited_xdmcp_servers", $this->inherited_xdmcp_servers);
+ $smarty->assign("available_xdmcp_servers", $available_servers);
/* Variables - select */
- foreach(array("gotoXMethod", "gotoXdmcpServer", "gotoFontPath",
- "gotoXDriver", "gotoXResolution", "gotoXColordepth",
- "gotoLpdServer", "gotoScannerModel", "gotoXKbModel", "gotoXKbLayout",
+ foreach(array("gotoXMethod","gotoXDriver", "gotoXResolution", "gotoXColordepth",
+ "gotoLpdServer", "gotoXKbModel", "gotoXKbLayout",
"gotoXKbVariant", "gotoXMouseType", "gotoXMouseport") as $val){
$smarty->assign($val."_select", $this->$val);
/* Check vsync for correct usage */
$val= preg_replace ("/\s/", "", $this->gotoXVsync);
if (!preg_match ("/^\d+(\.\d+)?([-]\d+(\.\d+)?)?$/", $val) && $this->acl_is_writeable("gotoXVsync")){
-
- $message[]= _("Please specify a valid VSync range.");
+ $message[]= msgPool::invalid(_("VSync range"));
} elseif ($this->acl_is_writeable("gotoXVsync")){
list($v1,$v2)= preg_split ("/[-+]/", $val);
if ($v2 != ""){
if ($v1 > $v2){
- $message[]= _("Please specify a valid VSync range.");
+ $message[]= msgPool::invalid(_("VSync range"));
}
}
}
/* Check hsync for correct usage */
$val= preg_replace ("/\s/", "", $this->gotoXHsync);
if (!preg_match ("/^\d+(\.\d+)?([-]\d+(\.\d+)?)?$/", $val) && $this->acl_is_writeable("gotoXHsync")){
-
- $message[]= _("Please specify a valid HSync range.");
+ $message[]= msgPool::invalid(_("HSync range"));
} elseif ($this->acl_is_writeable("gotoXHsync")){
list($v1,$v2)= preg_split ("/[-+]/", $val);
if ($v2 != ""){
if ($v1 > $v2){
- $message[]= _("Please specify a valid HSync range.");
+ $message[]= msgPool::invalid(_("HSync range"));
}
}
}
{
/* Call common method to give check the hook */
$message= plugin::check();
+
+ if($this->gotoXMethod != "default"){
+ $xdmcp_types = $this->config->data['SERVERS']['TERMINAL_SESSION_TYPES'];
+ $available_servers = array();
+ foreach($xdmcp_types as $servername =>$supported_types){
+ if(in_array(strtoupper($this->gotoXMethod),$supported_types)){
+ $available_servers[] = $servername;
+ }
+ }
+ foreach($this->selected_xdmcp_servers as $server){
+ if(!in_array($server,$available_servers)){
+ $message[] = _("Remote desktop settings contains servers that do not support the selected connection method.");
+ break;
+ }
+ }
+ }
+
return ($message);
}
/* Convert to string */
$this->gotoLpdEnable= $this->gotoLpdEnable?"Yes":"No";
+ if($this->is_ogroup){
+ $this->objectclasses = array("gotoWorkstationTemplate");
+ }else{
+ $this->objectclasses = array("GOhard");
+ }
+
plugin::save();
/* Strip out 'default' values */
- foreach(array("gotoXMethod", "gotoXdmcpServer", "gotoFontPath",
- "gotoXDriver", "gotoXResolution", "gotoXColordepth",
- "gotoLpdServer", "gotoScannerModel", "gotoXKbModel", "gotoXKbLayout",
+ foreach(array("gotoXMethod","gotoXDriver", "gotoXResolution", "gotoXColordepth",
+ "gotoLpdServer", "gotoXKbModel", "gotoXKbLayout",
"gotoXKbVariant", "gotoXMouseType", "gotoXMouseport") as $val){
if ($this->attrs[$val] == "default"){
}
}
+ if($this->gotoXMethod == "default"){
+ $this->attrs['gotoXdmcpServer'] = array();
+ $this->attrs['gotoXMethod'] = array();
+ }else{
+ $this->attrs['gotoXdmcpServer'] = array_values($this->selected_xdmcp_servers);
+ }
+
+
if($this->AutoSync){
$this->attrs['gotoXHsync'] = "30+55";
$this->attrs['gotoXVsync'] = "50+70";
$ldap->modify ($this->attrs);
new log("modify","terminal/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error());
- show_ldap_error($ldap->get_error(), sprintf(_("Saving of object system terminal/service with dn '%s' failed."),$this->dn));
+ if (!$ldap->success()){
+ msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, LDAP_MOD, get_class()));
+ }
$this->handle_post_events("modify");
}
function getListOfXDrivers()
{
- $drivers = array();
+ $drivers = array("default" => "["._("unknown")."]");
/* Generate a list of xdrivers from CONFIG_DIR/xdrivers */
if (file_exists(CONFIG_DIR.'/xdrivers')){
}
}
} else {
- $drivers = array("ati", "atimisc", "chips", "cirrus", "cyrix", "fbdev", "fglrx",
- "i128", "i740", "i810", "imstt", "mga", "neomagic", "newport", "nsc", "nv", "nvidia",
+ foreach( array(
+ "ati", "atimisc", "chips", "cirrus", "cyrix", "fbdev", "fglrx",
+ "i128", "i740", "i810", "intel", "imstt", "mga", "neomagic", "newport", "nsc", "nv", "nvidia",
"r128", "radeon", "rendition", "s3", "s3virge", "savage", "siliconmotion",
- "sis", "tdfx", "tga", "trident", "tseng", "vesa", "vga", "vmware");
+ "sis", "tdfx", "tga", "trident", "tseng", "vesa", "vga", "vmware") as $driver){
+ $drivers[] = $driver;
+ }
}
return($drivers);
}
"gotoXMonitor" => _("Monitor"),
"gotoXMethod" => _("Method"),
"gotoXdmcpServer" => _("Remote desktop"),
- "gotoFontPath" => _("Font path"),
"gotoXDriver" => _("Gfx driver"),
"gotoXResolution" => _("Gfx resolution"),
"gotoXColordepth" => _("Gfx color depth"),
- "gotoXHsync" => _("Hsync"),
- "gotoXVsync" => _("Vsync"),
+ "gotoXHsync" => _("HSync"),
+ "gotoXVsync" => _("VSync"),
"AutoSync" => _("Auto-Sync"),
"gotoLpdEnable" => _("Printer service enabled"),
"gotoLpdServer" => _("Spool server"),
"gotoScannerEnable" => _("Scanner enabled"),
- "gotoScannerModel" => _("Scanner model"),
"gotoXKbModel" => _("Keyboard model"),
"gotoXKbLayout" => _("Keyboard layout"),
"gotoXKbVariant" => _("Keyboard variant"),