Code

Password is must too
[gosa.git] / plugins / admin / systems / 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";
28   /* Needed values and lists */
29   var $ignore_account= TRUE;
30   var $base= "";
31   var $cn= "";
32   var $orig_dn= "";
33   var $XMethods= array();
34   var $XDrivers= array("ati", "atimisc", "chips", "cirrus", "cyrix", "fbdev",
35       "i128", "i740", "i810", "imstt", "mga", "neomagic", "newport", "nsc",  "nv",
36       "r128", "radeon", "rendition", "s3", "s3virge", "savage", "siliconmotion",
37       "sis", "tdfx", "tga", "trident", "tseng", "vesa", "vga", "vmware");
39   var $XResolutions = array();
41   var $MouseTypes= array();
42   var $MousePorts= array();
43   var $hardware_list= array();
44   var $used_hardware= array();
47   /* attribute list for save action */
48   var $attributes= array("gotoXMonitor",
49       "gotoXDriver", "gotoXResolution", "gotoXColordepth",
50       "gotoXHsync", "gotoXVsync",
51       "gotoScannerEnable", "gotoScannerClients",
52       "gotoScannerBackend", "gotoXKbModel", "gotoXKbLayout", "gotoXKbVariant",
53       "gotoXMouseType", "gotoXMouseport", "goFonHardware");
54   var $objectclasses= array("GOhard");
56   var $XColordepths     =array();
57   var $XKbModels        =array();
58   var $XKbLayouts       =array();
59   var $XKbVariants      =array();
61   function workservice ($config, $dn= NULL)
62   {
63     plugin::plugin ($config, $dn);
65     $this->XResolutions= array( 
66         "640x480"   =>  "640x480",
67         "800x600"   =>  "800x600",
68         "1024x768"  =>  "1024x768",
69         "1152x864"  =>  "1152x864", 
70         "1280x1024" =>  "1280x1024",
71         "1400x1050" =>  "1400x1050", 
72         "1600x1200" =>  "1600x1200");
74     if(isset($this->config->data['MAIN']['RESOLUTION_HOOK'])){
75       $file = $this->config->data['MAIN']['RESOLUTION_HOOK'];
77       if(is_readable($file)){
78         $str = file_get_contents($file);
79         $lines = split("\n",$str);
80         foreach($lines as $line){
81           $line = trim($line);
82           if(!empty($line)){
83             $this->XResolutions[$line]=$line;
84           }
85         }
86         //natcasesort($this->gotoXResolutions);
87       }else{
88         print_red(sprintf(_("You have specified an external resolution hook which can't be read, please check the permission of the file '%s'."),$file));
89       }
90     }
92     array_unshift($this->XDrivers, "["._("unknown")."]");
93  
94     $this->XColordepths= array( 
95         "8"        => "8 " ._("bit"), 
96         "15"       => "15 "._("bit"),      
97         "16"       => "16 "._("bit"),   
98         "24"       => "24 "._("bit"));
100     foreach(array ("btc9000", "chicony", "compaq", "dell", "dell101", "everex",
101           "flexpro", "geniuscomfy", "hp", "itouch", "jp106", "logicordless",
102           "logiinetnav", "logiinternet", "macintosh", "microsoft",
103           "microsoftpro", "omnikey101", "pc101", "pc102", "pc104",
104           "pc105", "rapidaccess", "rapidaccess2", "winbook") as $type){
105       $this->XKbModels[$type] = $type;
106     }
108     $this->MouseTypes= array("ImPS/2" => "ImPS/2", "PS/2" => "PS/2", "Microsoft" => "Microsoft", 
109                               "Logitech" => "Microsoft");
111     $this->MousePorts= array("/dev/ttyS0"  =>"/dev/ttyS0", 
112                              "/dev/ttyS1"       => "/dev/ttyS1",          "/dev/psaux"  =>"/dev/psaux", 
113                              "/dev/input/mice"  => "/dev/input/mice");
115     /* Additional values will be extracted from /etc/gosa/keyboardLayouts */
116     $this->XKbLayouts= array ("de"=> "de","intl" =>"intl","us" =>"us");
117     $this->XKbVariants= array ("nodeadkeys"=>"nodeadkeys", "basic"=>"basic");
119     /* try to read additional keyboard layouts 
120      */
121     if(file_exists(CONFIG_DIR."/keyboardLayouts")){
122       if(is_readable(CONFIG_DIR."/keyboardLayouts")){
123         $str = file_get_contents(CONFIG_DIR."/keyboardLayouts");
124         $tmp = split("\n",$str);
125         foreach($tmp as $entry){
126           if((!empty($entry)) && (!preg_match("/^#/",$entry))){
127             $entry = trim($entry);
128             $tmp2 = split ("\:",$entry);
129             $la =   trim($tmp2[0]);   // What would be saved to ldap
130             $da =   trim($tmp2[1]);   // This wis displayed in the listbox
131             $this->XKbLayouts [ $la] = $da;  
132           } 
133         }
134       }
135     }
137     /* Initialize methods */
138     $this->XMethods["indirect"]= _("show chooser");
139     $this->XMethods["query"]= _("direct");
140     #$this->XMethods["squery"]= _("direct via ssh");
141     #$this->XMethods["nquery"]= _("direct via nx");
142     $this->XMethods["load"]= _("load balanced");
143     #$this->XMethods["sload"]= _("load balanced via ssh");
144     #$this->XMethods["nload"]= _("load balanced via nx");
145     $this->XMethods["rdp"]= _("Windows RDP");
146     $this->XMethods["citrix"]= _("ICA client");
148     $this->orig_dn= $this->dn;
150     /* Load hardware list */
151     $ldap= $this->config->get_ldap_link();
152     $ldap->cd($this->config->current['BASE']);
153     $ldap->search("(objectClass=goFonHardware)", array('cn', 'description'));
154     while ($attrs= $ldap->fetch()){
155       $cn= $attrs['cn'][0];
156       if (isset($attrs['description'])){
157         $description= " - ".$attrs['description'][0];
158       } else {
159         $description= "";
160       }
161       $this->hardware_list[$cn]= "$cn$description";
162     }
164     /* Eventually colorize phones */
165     $ldap->cd($this->config->current['BASE']);
166     foreach ($this->hardware_list as $cn => $desc){
167       $ldap->search("(goFonHardware=$cn)", array('cn'));
168       if ($ldap->count() > 0){
169         $ldap->fetch();
170         if ($ldap->getDN() != $this->dn){
171           $this->used_hardware[$cn]= $ldap->getDN();
172         }
173       }
174     }
176     if(preg_match("/\+/",$this->gotoXHsync)){
177       $this->AutoSync = true;
178       $this->gotoXHsync = preg_replace("/\+/","-",$this->gotoXHsync);
179       $this->gotoXVsync = preg_replace("/\+/","-",$this->gotoXVsync);
180     }
182     $this->hardware_list["automatic"]= _("automatic");
183     ksort($this->hardware_list);
185     /* Load hardware list */
186     $ldap= $this->config->get_ldap_link();
187     $ldap->cd($this->config->current['BASE']);
188     $ldap->search("(&(objectClass=gotoWorkstationTemplate)(member=".$this->dn."))");
189     if ($ldap->count() == 1){
190       $map= array("gotoXResolution", "gotoXColordepth", "gotoXKbModel", "gotoXKbLayout",
191                   "gotoXKbVariant", "gotoXMouseType", "gotoXMouseport");
192       $attrs= $ldap->fetch();
194       foreach ($map as $name){
195         if (!isset($attrs[$name][0])){
196           continue;
197         }
198         
199         switch ($name){
200           case 'gotoXResolution':
201             $this->XResolutions= array_merge(array('default' => _("inherited").' ['.$attrs[$name][0].']' ), $this->XResolutions);
202             break;
203           case 'gotoXColordepth':
204             $this->XColordepths= array_merge(array('default' => _("inherited").' ['.$attrs[$name][0].' '._('Bit').']'), $this->XColordepths);
205             break;
206           case 'gotoXKbModel':
207             $this->XKbModels= array_merge(array('default' => _("inherited").' ['.$attrs[$name][0].']'), $this->XKbModels);
208             break;
209           case 'gotoXKbLayout':
210             $this->XKbLayouts= array_merge(array('default' => _("inherited").' ['.$attrs[$name][0].']' ), $this->XKbLayouts);
211             break;
212           case 'gotoXKbVariant':
213             $this->XKbVariants= array_merge(array('default' => _("inherited").' ['.$attrs[$name][0].']' ), $this->XKbVariants);
214             break;
215           case 'gotoXMouseType':
216             $this->MouseTypes= array_merge(array('AUTO' => _("inherited").' ['.$attrs[$name][0].']' ), $this->MouseTypes);
217             break;
218           case 'gotoXMouseport':
219             $this->MousePorts= array_merge(array('AUTO' => _("inherited").' ['.$attrs[$name][0].']' ), $this->MousePorts);
220             break;
221         }
223       }
225     }
226   }
228   function execute()
229   {
230     /* Call parent execute */
231     plugin::execute();
233     /* Do we need to flip is_account state? */
234     if (isset($_POST['modify_state'])){
235       $this->is_account= !$this->is_account;
236     }
238     /* Do we represent a valid terminal? */
239     if (!$this->is_account && $this->parent == NULL){
240       $display= "<img alt=\"\" src=\"images/stop.png\" align=\"middle\">&nbsp;<b>".
241         _("This 'dn' has no terminal features.")."</b>";
242       return ($display);
243     }
245     /* Show main page */
246     $smarty= get_smarty();
248     /* Arrays */ 
249     foreach(array("XMethods", "XDrivers", "XResolutions", "XColordepths",
250           "XKbModels", "XKbVariants",
251           "MouseTypes", "MousePorts") as $val){
252       $smarty->assign("$val", $this->$val);
253     }
254     $smarty->assign("XKbLayouts"    ,$this->XKbLayouts);
255     $smarty->assign("XKbLayoutKeys" ,array_flip($this->XKbLayouts));
257     $smarty->assign("xdmcpservers", $this->config->data['SERVERS']['TERMINAL']);
258     $smarty->assign("fontservers", $this->config->data['SERVERS']['FONT']);
259     $smarty->assign("nfsservers", $this->config->data['SERVERS']['NFS']);
260     $smarty->assign("nfsservers", $this->config->data['SERVERS']['NFS']);
262     /* Variables - select */
263     foreach(array(
264           "gotoXDriver", "gotoXResolution", "gotoXColordepth", 
265           "gotoXKbModel", "gotoXKbLayout","gotoScannerEnable",
266           "gotoXKbVariant", "gotoXMouseType", "gotoXMouseport") as $val){
268       $smarty->assign($val."_select", $this->$val);
269       $smarty->assign($val."ACL", chkacl($this->acl, $val));
270     }
272     /* Variables */
273     foreach(array("gotoXHsync", "gotoXVsync") as $val){
274       $smarty->assign($val, $this->$val);
275       $smarty->assign($val."ACL", chkacl($this->acl, $val));
276     }
277     $smarty->assign("staticAddress", "");
279     /* Checkboxes */
280     foreach(array("gotoScannerEnable") as $val){
281       if ($this->$val == TRUE) {
282         $smarty->assign("$val", "checked");
283       } else {
284         $smarty->assign("$val", "");
285       }
286     }
288     /* Phone stuff */
289     $smarty->assign ("goFonHardware", $this->goFonHardware);
290     $hl= "<select size=\"1\" name=\"goFonHardware\" title=\"".
291       _("Choose the phone located at the current terminal")."\" ".
292       chkacl($this->acl, "goFonHardware").">\n";
293     foreach ($this->hardware_list as $cn => $description){
294       if ($cn == $this->goFonHardware){
295         $selected= "selected";
296       } else {
297         $selected= "";
298       }
299       if (isset($this->used_hardware[$cn])){
300         $color= "style=\"color:#A0A0A0\"";
301       } else {
302         $color= "";
303       }
304       $hl.= "  <option $color label=\"$cn\" value=\"$cn\" $selected>$description</option>\n";
305     }
306     $hl.= "</select>\n";
307     $smarty->assign ("hardware_list", $hl);
308     $smarty->assign ("gotoXMonitor", $this->gotoXMonitor);
309     $smarty->assign("AutoSyncACL",chkacl($this->acl,"AutoSync"));
311     if($this->AutoSync){
312       $smarty->assign("AutoSyncCHK"," checked ");
313     }else{
314       $smarty->assign("AutoSyncCHK"," ");
315     }
317     /* Show main page */
318     return($smarty->fetch (get_template_path('workstationService.tpl',TRUE,dirname(__FILE__))));
319   }
321   function remove_from_parent()
322   {
323     $this->handle_post_events("remove");
324   }
326   /* Save data to object */
327   function save_object()
328   {
329     plugin::save_object();
331     if(isset($_POST['gotoXHsync'])){
332       if(isset($_POST['AutoSync'])){
333         $this->AutoSync = true;
334       }else{
335         $this->AutoSync = false;
336       }
337     }
338   }
340   /* Check supplied data */
341   function check()
342   {
343     /* Call common method to give check the hook */
344     $message= plugin::check();
346     /* Default entries can use blank hsync/vsync entries */
347     if ($this->dn != "" && $this->cn != "default" && $this->cn != "wdefault"){
349       /* Check vsync for correct usage */
350       $val= preg_replace ("/\s/", "", $this->gotoXVsync);
351       if (!preg_match ("/^\d+(\.\d+)?([-]\d+(\.\d+)?)?$/", $val)
352           && chkacl ($this->acl, "gotoXVsync") == ""){
354         $message[]= _("Please specify a valid VSync range.");
355       } elseif (chkacl ($this->acl, "gotoXVsync") == ""){
356         list($v1,$v2)= preg_split ("/[-+]/", $val);
357         if ($v2 != ""){
358           if ($v1 > $v2){
359             $message[]= _("Please specify a valid VSync range.");
360           }
361         }
362       }
364       /* Check hsync for correct usage */
365       $val= preg_replace ("/\s/", "", $this->gotoXHsync);
366       if (!preg_match ("/^\d+(\.\d+)?([-]\d+(\.\d+)?)?$/", $val)
367           && chkacl ($this->acl, "gotoXHsync") == ""){
369         $message[]= _("Please specify a valid HSync range.");
370       } elseif (chkacl ($this->acl, "gotoXHsync") == ""){
371         list($v1,$v2)= preg_split ("/[-+]/", $val);
372         if ($v2 != ""){
373           if ($v1 > $v2){
374             $message[]= _("Please specify a valid HSync range.");
375           }
376         }
377       }
378     }
379     return ($message);
380   }
383   /* Save to LDAP */
384   function save()
385   {
386     /* remove objectclass GOhard if this is an ogroup tab */
387     if(isset($this->parent->by_object['ogroup'])){
388       $this->objectclasses = array();
389     }
391     plugin::save();
393     /* Strip out 'default' values */
394     foreach(array(
395           "gotoXDriver", "gotoXResolution", "gotoXColordepth",
396           "gotoXKbModel", "gotoXKbLayout",
397           "gotoXKbVariant", "gotoXMouseType", "gotoXMouseport") as $val){
399       if ($this->attrs[$val] == "default"){
400         $this->attrs[$val]= array();
401       }
402     }
404     if($this->AutoSync){
405       $this->attrs['gotoXHsync'] = preg_replace("/-/","+",$this->attrs['gotoXHsync']) ;
406       $this->attrs['gotoXVsync'] = preg_replace("/-/","+",$this->attrs['gotoXVsync']) ;
407     }
409     /* Write back to ldap */
410     $ldap= $this->config->get_ldap_link();
411     $ldap->cd($this->dn);
412     $this->cleanup();
413     $ldap->modify ($this->attrs); 
415     show_ldap_error($ldap->get_error(), _("Saving workstation services failed"));
416     $this->handle_post_events("modify");
417   }
421 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
422 ?>