Code

Updated terminal and workstation service.
[gosa.git] / gosa-plugins / goto / admin / systems / goto / class_workstationService.inc
1 <?php
3 class workservice extends plugin
4 {
5   /* CLI vars */
6   var $cli_summary= "Manage terminal service aspects";
7   var $cli_description= "Some longer text\nfor help";
8   var $cli_parameters= array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser");
10   var $gotoScannerEnable;
11   /* Generic terminal attributes */
12   var $gotoXMonitor= "";
13   var $gotoXDriver= "";
14   var $gotoXResolution= "";
15   var $gotoXColordepth= "";
16   var $gotoXHsync= "";
17   var $gotoXVsync= "";
18   var $AutoSync = false;
19   var $gotoXKbModel= "";
20   var $gotoXKbLayout= "";
21   var $gotoXKbVariant= "";
22   var $gotoXMouseType= "";
23   var $gotoXMouseport= "";
24   var $gotoScannerClients= "";
25   var $gotoScannerBackend= "";
26   var $goFonHardware= "automatic";
27   var $view_logged = FALSE;
29   /* Needed values and lists */
30   var $ignore_account= TRUE;
31   var $base= "";
32   var $cn= "";
33   var $orig_dn= "";
34   var $XMethods= array();
35   var $XDrivers= array();
36   var $XResolutions = array();
37   var $MouseTypes= array();
38   var $MousePorts= array();
39   var $hardware_list= array();
40   var $used_hardware= array();
43   /* attribute list for save action */
44   var $attributes= array("gotoXMonitor",
45       "gotoXDriver", "gotoXResolution", "gotoXColordepth",
46       "gotoXHsync", "gotoXVsync",
47       "gotoScannerEnable", "gotoScannerClients",
48       "gotoScannerBackend", "gotoXKbModel", "gotoXKbLayout", "gotoXKbVariant",
49       "gotoXMouseType", "gotoXMouseport", "goFonHardware");
50   var $objectclasses= array("GOhard");
52   var $XColordepths     =array();
53   var $XKbModels        =array();
54   var $XKbLayouts       =array();
55   var $XKbVariants      =array();
57   function workservice (&$config, $dn= NULL, $parent= NULL)
58   {
59     plugin::plugin ($config, $dn, $parent);
61     $this->XResolutions= array( 
62         "640x480"   =>  "640x480",
63         "800x600"   =>  "800x600",
64         "1024x768"  =>  "1024x768",
65         "1152x864"  =>  "1152x864", 
66         "1280x1024" =>  "1280x1024",
67         "1400x1050" =>  "1400x1050", 
68         "1600x1200" =>  "1600x1200");
70     if(isset($this->config->data['MAIN']['RESOLUTION_HOOK'])){
71       $file = $this->config->data['MAIN']['RESOLUTION_HOOK'];
73       if(is_readable($file)){
74         $str = file_get_contents($file);
75         $lines = split("\n",$str);
76         foreach($lines as $line){
77           $line = trim($line);
78           if(!empty($line)){
79             $this->XResolutions[$line]=$line;
80           }
81         }
82         //natcasesort($this->gotoXResolutions);
83       }else{
84         print_red(sprintf(_("You have specified an external resolution hook which can't be read, please check the permission of the file '%s'."),$file));
85       }
86     }
88     /* Get list of available xdrivers */
89     $this->XDrivers = $this->getListOfXDrivers();
91     array_unshift($this->XDrivers, "["._("unknown")."]");
92  
93     $this->XColordepths= array( 
94         "8"        => "8 " ._("bit"), 
95         "15"       => "15 "._("bit"),      
96         "16"       => "16 "._("bit"),   
97         "24"       => "24 "._("bit"));
99     foreach(array ("btc9000", "chicony", "compaq", "dell", "dell101", "everex",
100           "flexpro", "geniuscomfy", "hp", "itouch", "jp106", "logicordless",
101           "logiinetnav", "logiinternet", "macintosh", "microsoft",
102           "microsoftpro", "omnikey101", "pc101", "pc102", "pc104",
103           "pc105", "rapidaccess", "rapidaccess2", "winbook") as $type){
104       $this->XKbModels[$type] = $type;
105     }
107     $this->MouseTypes= array("ImPS/2" => "ImPS/2", "PS/2" => "PS/2", "Microsoft" => "Microsoft", 
108                               "Logitech" => "Logitech","explorerps/2"=>"explorerps/2",);
110     $this->MousePorts= array("/dev/ttyS0"  =>"/dev/ttyS0", 
111                              "/dev/ttyS1"       => "/dev/ttyS1",          "/dev/psaux"  =>"/dev/psaux", 
112                              "/dev/input/mice"  => "/dev/input/mice");
114     /* Additional values will be extracted from CONFIG_DIR./keyboardLayouts */
115     $this->XKbLayouts= array ("de"=> "de","intl" =>"intl","us" =>"us");
116     $this->XKbVariants= array ("nodeadkeys"=>"nodeadkeys", "basic"=>"basic");
118     /* try to read additional keyboard layouts 
119      */
120     if(file_exists(CONFIG_DIR."/keyboardLayouts")){
121       if(is_readable(CONFIG_DIR."/keyboardLayouts")){
122         $str = file_get_contents(CONFIG_DIR."/keyboardLayouts");
123         $tmp = split("\n",$str);
124         foreach($tmp as $entry){
125           if((!empty($entry)) && (!preg_match("/^#/",$entry))){
126             $entry = trim($entry);
127             $tmp2 = split ("\:",$entry);
128             $la =   trim($tmp2[0]);   // What would be saved to ldap
129             $da =   trim($tmp2[1]);   // This wis displayed in the listbox
130             $this->XKbLayouts [ $la] = $da;  
131           } 
132         }
133       }
134     }
136     /* Initialize methods */
137     $this->XMethods["indirect"]= _("show chooser");
138     $this->XMethods["query"]= _("direct");
139     #$this->XMethods["squery"]= _("direct via ssh");
140     #$this->XMethods["nquery"]= _("direct via nx");
141     $this->XMethods["load"]= _("load balanced");
142     #$this->XMethods["sload"]= _("load balanced via ssh");
143     #$this->XMethods["nload"]= _("load balanced via nx");
144     $this->XMethods["rdp"]= _("Windows RDP");
145     $this->XMethods["citrix"]= _("ICA client");
147     $this->orig_dn= $this->dn;
149     /* Load phone hardware list
150      */
151     $tmp = get_sub_list("(objectClass=goFonHardware)","",array(get_ou("phoneou")),
152                   $this->config->current['BASE'],array("cn","description"), GL_NO_ACL_CHECK);
153     foreach($tmp as $attrs){
154       $cn= $attrs['cn'][0];
155       $description= "";
156       if (isset($attrs['description'])){
157         $description= " - ".$attrs['description'][0];
158       }
159       $this->hardware_list[$cn]= "$cn$description";
160     }
161     $this->hardware_list["automatic"]= _("automatic");
162     ksort($this->hardware_list);
164     /* These departments may contain objects that have
165         goFonHardware set.
166      */
167     $deps_a = array(
168         get_ou("ogroupou"),
169         get_ou("serverou"),
170         get_ou("terminalou"),
171         get_ou("workstationou"),
172         get_ou("printerou"),
173         get_ou("componentou"),
174         get_ou("phoneou"));
176     $tmp = get_sub_list("(goFonHardware=*)","",$deps_a,$this->config->current['BASE'],
177         array('cn','dn','goFonHardware'),GL_NO_ACL_CHECK);
178     foreach($tmp as $attrs){
179       $cn = $attrs['goFonHardware'][0];
180       if(isset($this->hardware_list[$cn])){
181         $this->used_hardware[$cn]= $cn;
182       }
183     }
185     if(preg_match("/\+/",$this->gotoXHsync)){
186       $this->AutoSync = true;
187       $this->gotoXHsync = preg_replace("/\+/","-",$this->gotoXHsync);
188       $this->gotoXVsync = preg_replace("/\+/","-",$this->gotoXVsync);
189     }
191     /* Load hardware list */
192     $ldap= $this->config->get_ldap_link();
193     $ldap->cd($this->config->current['BASE']);
194     $ldap->search("(&(objectClass=gotoWorkstationTemplate)(member=".LDAP::prepare4filter($this->dn)."))");
195     if ($ldap->count() == 1){
196       $map= array("gotoXResolution", "gotoXColordepth", "gotoXKbModel", "gotoXKbLayout",
197                   "gotoXKbVariant", "gotoXMouseType", "gotoXMouseport");
198       $attrs= $ldap->fetch();
200       foreach ($map as $name){
201         if (!isset($attrs[$name][0])){
202           continue;
203         }
204         
205         switch ($name){
206           case 'gotoXResolution':
207             $this->XResolutions= array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XResolutions;
208             break;
209           case 'gotoXColordepth':
210             $this->XColordepths= array('default' => _("inherited").' ['.$attrs[$name][0].' '._('Bit').']') + $this->XColordepths;
211             break;
212           case 'gotoXKbModel':
213             $this->XKbModels= array('default' => _("inherited").' ['.$attrs[$name][0].']') + $this->XKbModels;
214             break;
215           case 'gotoXKbLayout':
216             $this->XKbLayouts= array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XKbLayouts;
217             break;
218           case 'gotoXKbVariant':
219             $this->XKbVariants= array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XKbVariants;
220             break;
221           case 'gotoXMouseType':
222             $this->MouseTypes= array('AUTO' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->MouseTypes;
223             break;
224           case 'gotoXMouseport':
225             $this->MousePorts= array('AUTO' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->MousePorts;
226             break;
227         }
229       }
231     }
233     /* Workaround to fill in inherited values if we've specified an objectclass */
234     $SelectedSystemType = session::get("SelectedSystemType");
235     if (isset($SelectedSystemType['ogroup']) && $SelectedSystemType['ogroup'] != 'none'){
236       $this->XResolutions= array('default' => _("inherited"));
237       $this->XColordepths= array('default' => _("inherited"));
238       $this->XKbModels= array('default' => _("inherited"));
239       $this->XKbLayouts= array('default' => _("inherited"));
240       $this->XKbVariants= array('default' => _("inherited"));
241       $this->MouseTypes= array('AUTO' => _("inherited"));
242       $this->MousePorts= array('AUTO' => _("inherited"));
243     }
244   }
246   function execute()
247   {
248     /* Call parent execute */
249     plugin::execute();
251     if($this->is_account && !$this->view_logged){
252       $this->view_logged = TRUE;
253       new log("view","workstation/".get_class($this),$this->dn);
254     }
256     /* Do we need to flip is_account state? */
257     if (isset($_POST['modify_state'])){
258       $this->is_account= !$this->is_account;
259     }
261     /* Do we need to flip is_account state? */
262     if(isset($_POST['modify_state'])){
263       if($this->is_account && $this->acl_is_removeable()){
264         $this->is_account= FALSE;
265       }elseif(!$this->is_account && $this->acl_is_createable()){
266         $this->is_account= TRUE;
267       }
268     }
270     /* Show main page */
271     $smarty= get_smarty();
273     /* Assign ACLs */
274     $tmp = $this->plInfo();
275     foreach($tmp['plProvidedAcls'] as $name => $translated){
276       $smarty->assign($name."ACL",$this->getacl($name));
277     }
279     /* Arrays */ 
280     foreach(array("XMethods", "XDrivers", "XResolutions", "XColordepths",
281           "XKbModels", "XKbVariants",
282           "MouseTypes", "MousePorts") as $val){
283       $smarty->assign("$val", $this->$val);
284     }
285     $smarty->assign("XKbLayouts"    ,$this->XKbLayouts);
286     $smarty->assign("XKbLayoutKeys" ,array_flip($this->XKbLayouts));
288     $smarty->assign("xdmcpservers", $this->config->data['SERVERS']['TERMINAL']);
289     $smarty->assign("nfsservers", $this->config->data['SERVERS']['NFS']);
290     $smarty->assign("nfsservers", $this->config->data['SERVERS']['NFS']);
292     /* Variables - select */
293     foreach(array(
294           "gotoXDriver", "gotoXResolution", "gotoXColordepth", 
295           "gotoXKbModel", "gotoXKbLayout","gotoScannerEnable",
296           "gotoXKbVariant", "gotoXMouseType", "gotoXMouseport") as $val){
298       $smarty->assign($val."_select", $this->$val);
299     }
301     /* Variables */
302     foreach(array("gotoXHsync", "gotoXVsync") as $val){
303       $smarty->assign($val, $this->$val);
304     }
305     $smarty->assign("staticAddress", "");
307     /* Checkboxes */
308     foreach(array("gotoScannerEnable") as $val){
309       if ($this->$val == TRUE) {
310         $smarty->assign("$val", "checked");
311       } else {
312         $smarty->assign("$val", "");
313       }
314     }
316     /* Phone stuff */
317     $smarty->assign ("goFonHardware", $this->goFonHardware);
319     $perms = "";
320     if(!$this->acl_is_writeable("goFonHardware")){
321       $perms = " disabled ";
322     }
324     $hl= "<select size=\"1\" name=\"goFonHardware\" ".$perms." title=\"".
325       _("Choose the phone located at the current terminal")."\" >";
326     foreach ($this->hardware_list as $cn => $description){
327       if ($cn == $this->goFonHardware){
328         $selected= "selected";
329       } else {
330         $selected= "";
331       }
332       if (isset($this->used_hardware[$cn])){
333         $color= "style=\"color:#A0A0A0\"";
334       } else {
335         $color= "";
336       }
337       $hl.= "  <option $color label=\"$cn\" value=\"$cn\" $selected>$description</option>\n";
338     }
339     $hl.= "</select>\n";
340     $smarty->assign ("hardware_list", $hl);
341     $smarty->assign ("gotoXMonitor", $this->gotoXMonitor);
343     if($this->AutoSync){
344       $smarty->assign("AutoSyncCHK"," checked ");
345       $smarty->assign("hiddenState"," disabled ");
346     }else{
347       $smarty->assign("AutoSyncCHK"," ");
348       $smarty->assign("hiddenState","");
349     }
351     /* Show main page */
352     return($smarty->fetch (get_template_path('workstationService.tpl',TRUE,dirname(__FILE__))));
353   }
355   function remove_from_parent()
356   {
357     $this->handle_post_events("remove");
358     new log("remove","workstation/".get_class($this),$this->dn);
359   }
361   /* Save data to object */
362   function save_object()
363   {
364     plugin::save_object();
366     if((isset($_POST['gotoXDriver'])) && $this->acl_is_writeable("AutoSync")) {
367       if(isset($_POST['AutoSync'])){
368         $this->AutoSync = true;
369       }else{
370         $this->AutoSync = false;
371       }
372     }
373   }
375   /* Check supplied data */
376   function check()
377   {
378     /* Call common method to give check the hook */
379     $message= plugin::check();
381     /* Default entries can use blank hsync/vsync entries */
382     if ($this->dn != "" && $this->cn != "default" && $this->cn != "wdefault"){
384       /* But only if no auto sync is enabled... */
385       if (!$this->AutoSync){
387         /* Check vsync for correct usage */
388         $val= preg_replace ("/\s/", "", $this->gotoXVsync);
390         if($this->acl_is_writeable("gotoXVsync")){
391           if (!preg_match ("/^\d+(\.\d+)?([-]\d+(\.\d+)?)?$/", $val)){
392             $message[]= _("Please specify a valid VSync range.");
393           } else{
394             list($v1,$v2)= preg_split ("/[-+]/", $val);
395             if ($v2 != ""){
396               if ($v1 > $v2){
397                 $message[]= _("Please specify a valid VSync range.");
398               }
399             }
400           }
401         }
403         /* Check hsync for correct usage */
404         $val= preg_replace ("/\s/", "", $this->gotoXHsync);
405         if($this->acl_is_writeable("gotoXHsync")){
406           if (!preg_match ("/^\d+(\.\d+)?([-]\d+(\.\d+)?)?$/", $val)){
407             $message[]= _("Please specify a valid HSync range.");
408           } else{
409             list($v1,$v2)= preg_split ("/[-+]/", $val);
410             if ($v2 != ""){
411               if ($v1 > $v2){
412                 $message[]= _("Please specify a valid HSync range.");
413               }
414             }
415           }
416         }
417       }
418     }
420     return ($message);
421   }
424   /* Save to LDAP */
425   function save()
426   {
427     /* remove objectclass GOhard if this is an ogroup tab */
428     if(isset($this->parent->by_object['ogroup'])){
429       $this->objectclasses = array();
430     }
432     plugin::save();
434     /* Strip out 'default' values */
435     foreach(array(
436           "gotoXDriver", "gotoXResolution", "gotoXColordepth",
437           "gotoXKbModel", "gotoXKbLayout",
438           "gotoXKbVariant", "gotoXMouseType", "gotoXMouseport") as $val){
440       if ($this->attrs[$val] == "default"){
441         $this->attrs[$val]= array();
442       }
443     }
445     if($this->AutoSync){
446       $this->attrs['gotoXHsync'] = "30+55";
447       $this->attrs['gotoXVsync'] = "50+70";
448     }
450     /* Write back to ldap */
451     $ldap= $this->config->get_ldap_link();
452     $ldap->cd($this->dn);
453     $this->cleanup();
454     $ldap->modify ($this->attrs); 
455     new log("modify","workstation/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error());
456     show_ldap_error($ldap->get_error(), sprintf(_("Saving of system workstation/service with dn '%s' failed."),$this->dn));
457     $this->handle_post_events("modify");
458   }
461   function getListOfXDrivers()
462   {
463     /* Generate a list of xdrivers from CONFIG_DIR./xdrivers */
464     $drivers = array();
465     if (file_exists(CONFIG_DIR.'/xdrivers')){
466       $xdrivers = file (CONFIG_DIR.'/xdrivers');
467       foreach ($xdrivers as $line){
468         if (!preg_match ("/^#/", $line)){
469           $drivers[]= trim($line);
470         }
471       }
472     } else {
473       $drivers = array("ati", "atimisc", "chips", "cirrus", "cyrix", "fbdev", "fglrx",
474           "i128", "i740", "i810", "imstt", "mga", "neomagic", "newport", "nsc",  "nv", "nvidia",
475           "r128", "radeon", "rendition", "s3", "s3virge", "savage", "siliconmotion",
476           "sis", "tdfx", "tga", "trident", "tseng", "vesa", "vga", "vmware");
477     }
478     return($drivers);
479   }
482   /* Return plugin informations for acl handling */
483   static function plInfo()
484   {
485     return (array(
486           "plShortName"   => _("Service"),
487           "plDescription" => _("Workstation service"),
488           "plSelfModify"  => FALSE,
489           "plDepends"     => array(),
490           "plPriority"    => 10,
491           "plSection"     => array("administration"),
492           "plCategory"    => array("workstation","ogroups"), 
494           "plProvidedAcls"=> array(
495             "gotoXMonitor"          => _("Monitor"),
496             "gotoXDriver"           => _("Gfx driver"),
497             "gotoXResolution"       => _("Gfx resolution"),
498             "gotoXColordepth"       => _("Gfx color depth"),
499             "gotoXHsync"            => _("Hsync"),
500             "gotoXVsync"            => _("Vsync"),
501             "AutoSync"              => _("Use DDC"),
502             "gotoScannerEnable"     => _("Scanner enabled"),
503             "gotoXKbModel"          => _("Keyboard model"),
504             "gotoXKbLayout"         => _("Keyboard layout"),
505             "gotoXKbVariant"        => _("Keyboard variant"),
506             "gotoXMouseType"        => _("Mouse type"),
507             "gotoXMouseport"        => _("Mouse port"),
508             "goFonHardware"         => _("Telephone hardware")) 
509             ));
510   }
513 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
514 ?>