Code

Updated logging
[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, $parent= NULL)
62   {
63     plugin::plugin ($config, $dn, $parent);
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" => "Logitech");
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 CONFIG_DIR./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('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XResolutions;
202             break;
203           case 'gotoXColordepth':
204             $this->XColordepths= array('default' => _("inherited").' ['.$attrs[$name][0].' '._('Bit').']') + $this->XColordepths;
205             break;
206           case 'gotoXKbModel':
207             $this->XKbModels= array('default' => _("inherited").' ['.$attrs[$name][0].']') + $this->XKbModels;
208             break;
209           case 'gotoXKbLayout':
210             $this->XKbLayouts= array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XKbLayouts;
211             break;
212           case 'gotoXKbVariant':
213             $this->XKbVariants= array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XKbVariants;
214             break;
215           case 'gotoXMouseType':
216             $this->MouseTypes= array('AUTO' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->MouseTypes;
217             break;
218           case 'gotoXMouseport':
219             $this->MousePorts= array('AUTO' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->MousePorts;
220             break;
221         }
223       }
225     }
227     /* Workaround to fill in inherited values if we've specified an objectclass */
228     if (isset($_SESSION['SelectedSystemType']['ogroup']) && $_SESSION['SelectedSystemType']['ogroup'] != 'none'){
229       $this->XResolutions= array('default' => _("inherited"));
230       $this->XColordepths= array('default' => _("inherited"));
231       $this->XKbModels= array('default' => _("inherited"));
232       $this->XKbLayouts= array('default' => _("inherited"));
233       $this->XKbVariants= array('default' => _("inherited"));
234       $this->MouseTypes= array('AUTO' => _("inherited"));
235       $this->MousePorts= array('AUTO' => _("inherited"));
236     }
238     if($this->is_account){
239       @log::log("view","workstation/".get_class($this),$this->dn);
240     }
241   }
243   function execute()
244   {
245     /* Call parent execute */
246     plugin::execute();
248     /* Do we need to flip is_account state? */
249     if (isset($_POST['modify_state'])){
250       $this->is_account= !$this->is_account;
251     }
253     /* Do we need to flip is_account state? */
254     if(isset($_POST['modify_state'])){
255       if($this->is_account && $this->acl_is_removeable()){
256         $this->is_account= FALSE;
257       }elseif(!$this->is_account && $this->acl_is_createable()){
258         $this->is_account= TRUE;
259       }
260     }
262     /* Show main page */
263     $smarty= get_smarty();
265     /* Assign ACLs */
266     $tmp = $this->plInfo();
267     foreach($tmp['plProvidedAcls'] as $name => $translated){
268       $smarty->assign($name."ACL",$this->getacl($name));
269     }
271     /* Arrays */ 
272     foreach(array("XMethods", "XDrivers", "XResolutions", "XColordepths",
273           "XKbModels", "XKbVariants",
274           "MouseTypes", "MousePorts") as $val){
275       $smarty->assign("$val", $this->$val);
276     }
277     $smarty->assign("XKbLayouts"    ,$this->XKbLayouts);
278     $smarty->assign("XKbLayoutKeys" ,array_flip($this->XKbLayouts));
280     $smarty->assign("xdmcpservers", $this->config->data['SERVERS']['TERMINAL']);
281     $smarty->assign("fontservers", $this->config->data['SERVERS']['FONT']);
282     $smarty->assign("nfsservers", $this->config->data['SERVERS']['NFS']);
283     $smarty->assign("nfsservers", $this->config->data['SERVERS']['NFS']);
285     /* Variables - select */
286     foreach(array(
287           "gotoXDriver", "gotoXResolution", "gotoXColordepth", 
288           "gotoXKbModel", "gotoXKbLayout","gotoScannerEnable",
289           "gotoXKbVariant", "gotoXMouseType", "gotoXMouseport") as $val){
291       $smarty->assign($val."_select", $this->$val);
292     }
294     /* Variables */
295     foreach(array("gotoXHsync", "gotoXVsync") as $val){
296       $smarty->assign($val, $this->$val);
297     }
298     $smarty->assign("staticAddress", "");
300     /* Checkboxes */
301     foreach(array("gotoScannerEnable") as $val){
302       if ($this->$val == TRUE) {
303         $smarty->assign("$val", "checked");
304       } else {
305         $smarty->assign("$val", "");
306       }
307     }
309     /* Phone stuff */
310     $smarty->assign ("goFonHardware", $this->goFonHardware);
312     $perms = "";
313     if($this->acl_is_writeable("goFonHardware")){
314       $perms = " disabled ";
315     }
317     $hl= "<select size=\"1\" name=\"goFonHardware\" ".$perms." title=\"".
318       _("Choose the phone located at the current terminal")."\" >";
319     foreach ($this->hardware_list as $cn => $description){
320       if ($cn == $this->goFonHardware){
321         $selected= "selected";
322       } else {
323         $selected= "";
324       }
325       if (isset($this->used_hardware[$cn])){
326         $color= "style=\"color:#A0A0A0\"";
327       } else {
328         $color= "";
329       }
330       $hl.= "  <option $color label=\"$cn\" value=\"$cn\" $selected>$description</option>\n";
331     }
332     $hl.= "</select>\n";
333     $smarty->assign ("hardware_list", $hl);
334     $smarty->assign ("gotoXMonitor", $this->gotoXMonitor);
336     if($this->AutoSync){
337       $smarty->assign("AutoSyncCHK"," checked ");
338       $smarty->assign("hiddenState"," disabled ");
339     }else{
340       $smarty->assign("AutoSyncCHK"," ");
341       $smarty->assign("hiddenState","");
342     }
344     /* Show main page */
345     return($smarty->fetch (get_template_path('workstationService.tpl',TRUE,dirname(__FILE__))));
346   }
348   function remove_from_parent()
349   {
350     $this->handle_post_events("remove");
351     @log::log("remove","workstation/".get_class($this),$this->dn);
352   }
354   /* Save data to object */
355   function save_object()
356   {
357     plugin::save_object();
359     if((isset($_POST['gotoXDriver'])) && $this->acl_is_writeable("AutoSync")) {
360       if(isset($_POST['AutoSync'])){
361         $this->AutoSync = true;
362       }else{
363         $this->AutoSync = false;
364       }
365     }
366   }
368   /* Check supplied data */
369   function check()
370   {
371     /* Call common method to give check the hook */
372     $message= plugin::check();
374     /* Default entries can use blank hsync/vsync entries */
375     if ($this->dn != "" && $this->cn != "default" && $this->cn != "wdefault"){
377       /* But only if no auto sync is enabled... */
378       if (!$this->AutoSync){
380         /* Check vsync for correct usage */
381         $val= preg_replace ("/\s/", "", $this->gotoXVsync);
383         if($this->acl_is_writeable("gotoXVsync")){
384           if (!preg_match ("/^\d+(\.\d+)?([-]\d+(\.\d+)?)?$/", $val)){
385             $message[]= _("Please specify a valid VSync range.");
386           } else{
387             list($v1,$v2)= preg_split ("/[-+]/", $val);
388             if ($v2 != ""){
389               if ($v1 > $v2){
390                 $message[]= _("Please specify a valid VSync range.");
391               }
392             }
393           }
394         }
396         /* Check hsync for correct usage */
397         $val= preg_replace ("/\s/", "", $this->gotoXHsync);
398         if($this->acl_is_writeable("gotoXHsync")){
399           if (!preg_match ("/^\d+(\.\d+)?([-]\d+(\.\d+)?)?$/", $val)){
400             $message[]= _("Please specify a valid HSync range.");
401           } else{
402             list($v1,$v2)= preg_split ("/[-+]/", $val);
403             if ($v2 != ""){
404               if ($v1 > $v2){
405                 $message[]= _("Please specify a valid HSync range.");
406               }
407             }
408           }
409         }
410       }
411     }
413     return ($message);
414   }
417   /* Save to LDAP */
418   function save()
419   {
420     /* remove objectclass GOhard if this is an ogroup tab */
421     if(isset($this->parent->by_object['ogroup'])){
422       $this->objectclasses = array();
423     }
425     plugin::save();
427     /* Strip out 'default' values */
428     foreach(array(
429           "gotoXDriver", "gotoXResolution", "gotoXColordepth",
430           "gotoXKbModel", "gotoXKbLayout",
431           "gotoXKbVariant", "gotoXMouseType", "gotoXMouseport") as $val){
433       if ($this->attrs[$val] == "default"){
434         $this->attrs[$val]= array();
435       }
436     }
438     if($this->AutoSync){
439       $this->attrs['gotoXHsync'] = "30+55";
440       $this->attrs['gotoXVsync'] = "50+70";
441     }
443     /* Write back to ldap */
444     $ldap= $this->config->get_ldap_link();
445     $ldap->cd($this->dn);
446     $this->cleanup();
447     $ldap->modify ($this->attrs); 
448     @log::log("modify","workstation/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error());
449     show_ldap_error($ldap->get_error(), sprintf(_("Saving of system workstation/service with dn '%s' failed."),$this->dn));
450     $this->handle_post_events("modify");
451   }
453   /* Return plugin informations for acl handling */
454   function plInfo()
455   {
456     return (array(
457           "plShortName"   => _("Service"),
458           "plDescription" => _("Workstation service"),
459           "plSelfModify"  => FALSE,
460           "plDepends"     => array(),
461           "plPriority"    => 10,
462           "plSection"     => array("administration"),
463           "plCategory"    => array("workstation","ogroups"), 
465           "plProvidedAcls"=> array(
466             "gotoXMonitor"          => _("Monitor"),
467             "gotoXDriver"           => _("Gfx driver"),
468             "gotoXResolution"       => _("Gfx resolution"),
469             "gotoXColordepth"       => _("Gfx color depth"),
470             "gotoXHsync"            => _("Hsync"),
471             "gotoXVsync"            => _("Vsync"),
472             "AutoSync"              => _("Use DDC"),
473             "gotoScannerEnable"     => _("Scanner enabled"),
474             "gotoXKbModel"          => _("Keyboard model"),
475             "gotoXKbLayout"         => _("Keyboard layout"),
476             "gotoXKbVariant"        => _("Keyboard variant"),
477             "gotoXMouseType"        => _("Mouse type"),
478             "gotoXMouseport"        => _("Mouse port"),
479             "goFonHardware"         => _("Telephone hardware")) 
480             ));
481   }
484 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
485 ?>