Code

Added support for general check hooks
[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("unknown", "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");
38   var $XResolutions= array("default", "640x480", "800x600", "1024x768", "1152x864", "1280x1024",
39       "1400x1050", "1600x1200");
40   var $XColordepths= array("default", "8", "15", "16", "24");
41   var $XKbModels= array ("default", "btc9000", "chicony", "compaq", "dell", "dell101", "everex",
42       "flexpro", "geniuscomfy", "hp", "itouch", "jp106", "logicordless",
43       "logiinetnav", "logiinternet", "macintosh", "microsoft",
44       "microsoftpro", "omnikey101", "pc101", "pc102", "pc104",
45       "pc105", "rapidaccess", "rapidaccess2", "winbook");
47                     /* Additional values will be extracted from /etc/gosa/keyboardLayouts */
48   var $XKbLayouts= array ("default"=>"default","de"=> "de","intl" =>"intl","us" =>"us");
49   var $XKbVariants= array ("default", "nodeadkeys", "basic");
50   var $MouseTypes= array("AUTO", "ImPS/2", "PS/2", "Microsoft", "Logitech");
51   var $MousePorts= array("AUTO", "/dev/ttyS0", "/dev/ttyS1", "/dev/psaux", "/dev/input/mice");
52   var $hardware_list= array();
53   var $used_hardware= array();
56   /* attribute list for save action */
57   var $attributes= array("gotoXMonitor",
58       "gotoXDriver", "gotoXResolution", "gotoXColordepth",
59       "gotoXHsync", "gotoXVsync",
60       "gotoScannerEnable", "gotoScannerClients",
61       "gotoScannerBackend", "gotoXKbModel", "gotoXKbLayout", "gotoXKbVariant",
62       "gotoXMouseType", "gotoXMouseport", "goFonHardware");
63   var $objectclasses= array("GOhard");
66   function workservice ($config, $dn= NULL)
67   {
68     plugin::plugin ($config, $dn);
70     /* try to read additional keyboard layouts 
71      */
72     if(file_exists(CONFIG_DIR."/keyboardLayouts")){
73       if(is_readable(CONFIG_DIR."/keyboardLayouts")){
74         $str = file_get_contents(CONFIG_DIR."/keyboardLayouts");
75         $tmp = split("\n",$str);
76         foreach($tmp as $entry){
77           if((!empty($entry)) && (!preg_match("/^#/",$entry))){
78             $entry = trim($entry);
79             $tmp2 = split ("\:",$entry);
80             $la =   trim($tmp2[0]);   // What would be saved to ldap
81             $da =   trim($tmp2[1]);   // This wis displayed in the listbox
82             $this->XKbLayouts [ $la] = $da;  
83           } 
84         }
85       }
86     }
87     
88     /* Initialize methods */
89     $this->XMethods["default"]= _("default");
90     $this->XMethods["indirect"]= _("show chooser");
91     $this->XMethods["query"]= _("direct");
92 #$this->XMethods["squery"]= _("direct via ssh");
93 #$this->XMethods["nquery"]= _("direct via nx");
94     $this->XMethods["load"]= _("load balanced");
95 #$this->XMethods["sload"]= _("load balanced via ssh");
96 #$this->XMethods["nload"]= _("load balanced via nx");
97     $this->XMethods["rdp"]= _("Windows RDP");
98     $this->XMethods["citrix"]= _("ICA client");
100     $this->orig_dn= $this->dn;
102     /* Load hardware list */
103     $ldap= $this->config->get_ldap_link();
104     $ldap->cd($this->config->current['BASE']);
105     $ldap->search("(objectClass=goFonHardware)", array('cn', 'description'));
106     while ($attrs= $ldap->fetch()){
107       $cn= $attrs['cn'][0];
108       if (isset($attrs['description'])){
109         $description= " - ".$attrs['description'][0];
110       } else {
111         $description= "";
112       }
113       $this->hardware_list[$cn]= "$cn$description";
114     }
116     /* Eventually colorize phones */
117     $ldap->cd($this->config->current['BASE']);
118     foreach ($this->hardware_list as $cn => $desc){
119       $ldap->search("(goFonHardware=$cn)", array('cn'));
120       if ($ldap->count() > 0){
121         $ldap->fetch();
122         if ($ldap->getDN() != $this->dn){
123           $this->used_hardware[$cn]= $ldap->getDN();
124         }
125       }
126     }
128     if(preg_match("/\+/",$this->gotoXHsync)){
129       $this->AutoSync = true;
130       $this->gotoXHsync = preg_replace("/\+/","-",$this->gotoXHsync);
131       $this->gotoXVsync = preg_replace("/\+/","-",$this->gotoXVsync);
132     }
134     $this->hardware_list["automatic"]= _("automatic");
135     ksort($this->hardware_list);
136   }
138   function execute()
139   {
140         /* Call parent execute */
141         plugin::execute();
143     /* Do we need to flip is_account state? */
144     if (isset($_POST['modify_state'])){
145       $this->is_account= !$this->is_account;
146     }
148     /* Do we represent a valid terminal? */
149     if (!$this->is_account && $this->parent == NULL){
150       $display= "<img alt=\"\" src=\"images/stop.png\" align=\"middle\">&nbsp;<b>".
151         _("This 'dn' has no terminal features.")."</b>";
152       return ($display);
153     }
155     /* Show main page */
156     $smarty= get_smarty();
158     /* Arrays */ 
159     foreach(array("XMethods", "XDrivers", "XResolutions", "XColordepths",
160           "XKbModels", "XKbVariants",
161           "MouseTypes", "MousePorts") as $val){
162       $smarty->assign("$val", $this->$val);
163     }
164     $smarty->assign("XKbLayouts"    ,$this->XKbLayouts);
165     $smarty->assign("XKbLayoutKeys" ,array_flip($this->XKbLayouts));
167     $smarty->assign("xdmcpservers", $this->config->data['SERVERS']['TERMINAL']);
168     $smarty->assign("fontservers", $this->config->data['SERVERS']['FONT']);
169     $smarty->assign("nfsservers", $this->config->data['SERVERS']['NFS']);
170     $smarty->assign("nfsservers", $this->config->data['SERVERS']['NFS']);
172     /* Variables - select */
173     foreach(array(
174           "gotoXDriver", "gotoXResolution", "gotoXColordepth", 
175           "gotoXKbModel", "gotoXKbLayout","gotoScannerEnable",
176           "gotoXKbVariant", "gotoXMouseType", "gotoXMouseport") as $val){
178       $smarty->assign($val."_select", $this->$val);
179       $smarty->assign($val."ACL", chkacl($this->acl, $val));
180     }
182     /* Variables */
183     foreach(array("gotoXHsync", "gotoXVsync") as $val){
184       $smarty->assign($val, $this->$val);
185       $smarty->assign($val."ACL", chkacl($this->acl, $val));
186     }
187     $smarty->assign("staticAddress", "");
189     /* Checkboxes */
190     foreach(array("gotoScannerEnable") as $val){
191       if ($this->$val == TRUE) {
192         $smarty->assign("$val", "checked");
193       } else {
194         $smarty->assign("$val", "");
195       }
196     }
198     /* Phone stuff */
199     $smarty->assign ("goFonHardware", $this->goFonHardware);
200     $hl= "<select size=\"1\" name=\"goFonHardware\" title=\"".
201          _("Choose the phone located at the current terminal")."\" ".
202          chkacl($this->acl, "goFonHardware").">\n";
203     foreach ($this->hardware_list as $cn => $description){
204       if ($cn == $this->goFonHardware){
205         $selected= "selected";
206       } else {
207         $selected= "";
208       }
209       if (isset($this->used_hardware[$cn])){
210         $color= "style=\"color:#A0A0A0\"";
211       } else {
212         $color= "";
213       }
214       $hl.= "  <option $color label=\"$cn\" value=\"$cn\" $selected>$description</option>\n";
215     }
216     $hl.= "</select>\n";
217     $smarty->assign ("hardware_list", $hl);
218     $smarty->assign ("gotoXMonitor", $this->gotoXMonitor);
219     $smarty->assign("AutoSyncACL",chkacl($this->acl,"AutoSync"));
221     if($this->AutoSync){
222       $smarty->assign("AutoSyncCHK"," checked ");
223     }else{
224       $smarty->assign("AutoSyncCHK"," ");
225     }
227     /* Show main page */
228     return($smarty->fetch (get_template_path('workstationService.tpl',TRUE,dirname(__FILE__))));
229   }
231   function remove_from_parent()
232   {
233       $this->handle_post_events("remove");
234   }
236   /* Save data to object */
237   function save_object()
238   {
239     plugin::save_object();
241     if(isset($_POST['gotoXHsync'])){
242       if(isset($_POST['AutoSync'])){
243         $this->AutoSync = true;
244       }else{
245         $this->AutoSync = false;
246       }
247     }
248   }
250   /* Check supplied data */
251   function check()
252   {
253     /* Call common method to give check the hook */
254     $message= plugin::check();
256     /* Default entries can use blank hsync/vsync entries */
257     if ($this->dn != "" && $this->cn != "default" && $this->cn != "wdefault"){
259       /* Check vsync for correct usage */
260       $val= preg_replace ("/\s/", "", $this->gotoXVsync);
261       if (!preg_match ("/^\d+(\.\d+)?([-]\d+(\.\d+)?)?$/", $val)
262           && chkacl ($this->acl, "gotoXVsync") == ""){
264         $message[]= _("Please specify a valid VSync range.");
265       } elseif (chkacl ($this->acl, "gotoXVsync") == ""){
266         list($v1,$v2)= preg_split ("/[-+]/", $val);
267         if ($v2 != ""){
268           if ($v1 > $v2){
269             $message[]= _("Please specify a valid VSync range.");
270           }
271         }
272       }
274       /* Check hsync for correct usage */
275       $val= preg_replace ("/\s/", "", $this->gotoXHsync);
276       if (!preg_match ("/^\d+(\.\d+)?([-]\d+(\.\d+)?)?$/", $val)
277           && chkacl ($this->acl, "gotoXHsync") == ""){
279         $message[]= _("Please specify a valid HSync range.");
280       } elseif (chkacl ($this->acl, "gotoXHsync") == ""){
281         list($v1,$v2)= preg_split ("/[-+]/", $val);
282         if ($v2 != ""){
283           if ($v1 > $v2){
284             $message[]= _("Please specify a valid HSync range.");
285           }
286         }
287       }
288     }
289     return ($message);
290   }
293   /* Save to LDAP */
294   function save()
295   {
296     plugin::save();
298     /* Strip out 'default' values */
299     foreach(array(
300           "gotoXDriver", "gotoXResolution", "gotoXColordepth",
301           "gotoXKbModel", "gotoXKbLayout",
302           "gotoXKbVariant", "gotoXMouseType", "gotoXMouseport") as $val){
304       if ($this->attrs[$val] == "default"){
305         $this->attrs[$val]= array();
306       }
307     }
309     if($this->AutoSync){
310       $this->attrs['gotoXHsync'] = preg_replace("/-/","+",$this->attrs['gotoXHsync']) ;
311       $this->attrs['gotoXVsync'] = preg_replace("/-/","+",$this->attrs['gotoXVsync']) ;
312     }
314     /* Write back to ldap */
315     $ldap= $this->config->get_ldap_link();
316     $ldap->cd($this->dn);
317     $this->cleanup();
318 $ldap->modify ($this->attrs); 
320     show_ldap_error($ldap->get_error());
321     $this->handle_post_events("modify");
322   }
326 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
327 ?>