Code

Added copy & paste for ogroups
[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     $message= array();
255     /* Default entries can use blank hsync/vsync entries */
256     if ($this->dn != "" && $this->cn != "default" && $this->cn != "wdefault"){
258       /* Check vsync for correct usage */
259       $val= preg_replace ("/\s/", "", $this->gotoXVsync);
260       if (!preg_match ("/^\d+(\.\d+)?([-]\d+(\.\d+)?)?$/", $val)
261           && chkacl ($this->acl, "gotoXVsync") == ""){
263         $message[]= _("Please specify a valid VSync range.");
264       } elseif (chkacl ($this->acl, "gotoXVsync") == ""){
265         list($v1,$v2)= preg_split ("/[-+]/", $val);
266         if ($v2 != ""){
267           if ($v1 > $v2){
268             $message[]= _("Please specify a valid VSync range.");
269           }
270         }
271       }
273       /* Check hsync for correct usage */
274       $val= preg_replace ("/\s/", "", $this->gotoXHsync);
275       if (!preg_match ("/^\d+(\.\d+)?([-]\d+(\.\d+)?)?$/", $val)
276           && chkacl ($this->acl, "gotoXHsync") == ""){
278         $message[]= _("Please specify a valid HSync range.");
279       } elseif (chkacl ($this->acl, "gotoXHsync") == ""){
280         list($v1,$v2)= preg_split ("/[-+]/", $val);
281         if ($v2 != ""){
282           if ($v1 > $v2){
283             $message[]= _("Please specify a valid HSync range.");
284           }
285         }
286       }
287     }
288     return ($message);
289   }
292   /* Save to LDAP */
293   function save()
294   {
295     plugin::save();
297     /* Strip out 'default' values */
298     foreach(array(
299           "gotoXDriver", "gotoXResolution", "gotoXColordepth",
300           "gotoXKbModel", "gotoXKbLayout",
301           "gotoXKbVariant", "gotoXMouseType", "gotoXMouseport") as $val){
303       if ($this->attrs[$val] == "default"){
304         $this->attrs[$val]= array();
305       }
306     }
308     if($this->AutoSync){
309       $this->attrs['gotoXHsync'] = preg_replace("/-/","+",$this->attrs['gotoXHsync']) ;
310       $this->attrs['gotoXVsync'] = preg_replace("/-/","+",$this->attrs['gotoXVsync']) ;
311     }
313     /* Write back to ldap */
314     $ldap= $this->config->get_ldap_link();
315     $ldap->cd($this->dn);
316     $this->cleanup();
317 $ldap->modify ($this->attrs); 
319     show_ldap_error($ldap->get_error());
320     $this->handle_post_events("modify");
321   }
325 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
326 ?>