Code

Fixed some errors
[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");
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");
46   var $XKbLayouts= array ("default", "de", "intl", "us");
47   var $XKbVariants= array ("default", "nodeadkeys", "basic");
48   var $MouseTypes= array("AUTO", "ImPS/2", "PS/2", "Microsoft", "Logitech");
49   var $MousePorts= array("AUTO", "/dev/ttyS0", "/dev/ttyS1", "/dev/psaux", "/dev/input/mice");
50   var $hardware_list= array();
51   var $used_hardware= array();
54   /* attribute list for save action */
55   var $attributes= array("gotoXMonitor",
56       "gotoXDriver", "gotoXResolution", "gotoXColordepth",
57       "gotoXHsync", "gotoXVsync",
58       "gotoScannerEnable", "gotoScannerClients",
59       "gotoScannerBackend", "gotoXKbModel", "gotoXKbLayout", "gotoXKbVariant",
60       "gotoXMouseType", "gotoXMouseport", "goFonHardware");
61   var $objectclasses= array("GOhard");
64   function workservice ($config, $dn= NULL)
65   {
66     plugin::plugin ($config, $dn);
68     /* Initialize methods */
69     $this->XMethods["default"]= _("default");
70     $this->XMethods["indirect"]= _("show chooser");
71     $this->XMethods["query"]= _("direct");
72 #$this->XMethods["squery"]= _("direct via ssh");
73 #$this->XMethods["nquery"]= _("direct via nx");
74     $this->XMethods["load"]= _("load balanced");
75 #$this->XMethods["sload"]= _("load balanced via ssh");
76 #$this->XMethods["nload"]= _("load balanced via nx");
77     $this->XMethods["rdp"]= _("Windows RDP");
78     $this->XMethods["citrix"]= _("ICA client");
80     $this->orig_dn= $this->dn;
82     /* Load hardware list */
83     $ldap= $this->config->get_ldap_link();
84     $ldap->cd($this->config->current['BASE']);
85     $ldap->search("(objectClass=goFonHardware)", array('cn', 'description'));
86     while ($attrs= $ldap->fetch()){
87       $cn= $attrs['cn'][0];
88       if (isset($attrs['description'])){
89         $description= " - ".$attrs['description'][0];
90       } else {
91         $description= "";
92       }
93       $this->hardware_list[$cn]= "$cn$description";
94     }
96     /* Eventually colorize phones */
97     $ldap->cd($this->config->current['BASE']);
98     foreach ($this->hardware_list as $cn => $desc){
99       $ldap->search("(goFonHardware=$cn)", array('cn'));
100       if ($ldap->count() > 0){
101         $ldap->fetch();
102         if ($ldap->getDN() != $this->dn){
103           $this->used_hardware[$cn]= $ldap->getDN();
104         }
105       }
106     }
108     if(preg_match("/\+/",$this->gotoXHsync)){
109       $this->AutoSync = true;
110       $this->gotoXHsync = preg_replace("/\+/","-",$this->gotoXHsync);
111       $this->gotoXVsync = preg_replace("/\+/","-",$this->gotoXVsync);
112     }
114     $this->hardware_list["automatic"]= _("automatic");
115     ksort($this->hardware_list);
116   }
118   function execute()
119   {
120         /* Call parent execute */
121         plugin::execute();
123     /* Do we need to flip is_account state? */
124     if (isset($_POST['modify_state'])){
125       $this->is_account= !$this->is_account;
126     }
128     /* Do we represent a valid terminal? */
129     if (!$this->is_account && $this->parent == NULL){
130       $display= "<img alt=\"\" src=\"images/stop.png\" align=\"middle\">&nbsp;<b>".
131         _("This 'dn' has no terminal features.")."</b>";
132       return ($display);
133     }
135     /* Show main page */
136     $smarty= get_smarty();
138     /* Arrays */ 
139     foreach(array("XMethods", "XDrivers", "XResolutions", "XColordepths",
140           "XKbModels", "XKbLayouts", "XKbVariants",
141           "MouseTypes", "MousePorts") as $val){
142       $smarty->assign("$val", $this->$val);
143     }
144     $smarty->assign("xdmcpservers", $this->config->data['SERVERS']['TERMINAL']);
145     $smarty->assign("fontservers", $this->config->data['SERVERS']['FONT']);
146     $smarty->assign("nfsservers", $this->config->data['SERVERS']['NFS']);
147     $smarty->assign("nfsservers", $this->config->data['SERVERS']['NFS']);
149     /* Variables - select */
150     foreach(array(
151           "gotoXDriver", "gotoXResolution", "gotoXColordepth", 
152           "gotoXKbModel", "gotoXKbLayout","gotoScannerEnable",
153           "gotoXKbVariant", "gotoXMouseType", "gotoXMouseport") as $val){
155       $smarty->assign($val."_select", $this->$val);
156       $smarty->assign($val."ACL", chkacl($this->acl, $val));
157     }
159     /* Variables */
160     foreach(array("gotoXHsync", "gotoXVsync") as $val){
161       $smarty->assign($val, $this->$val);
162       $smarty->assign($val."ACL", chkacl($this->acl, $val));
163     }
164     $smarty->assign("staticAddress", "");
166     /* Checkboxes */
167     foreach(array("gotoScannerEnable") as $val){
168       if ($this->$val == TRUE) {
169         $smarty->assign("$val", "checked");
170       } else {
171         $smarty->assign("$val", "");
172       }
173     }
175     /* Phone stuff */
176     $smarty->assign ("goFonHardware", $this->goFonHardware);
177     $hl= "<select size=\"1\" name=\"goFonHardware\" title=\"".
178          _("Choose the phone located at the current terminal")."\" ".
179          chkacl($this->acl, "goFonHardware").">\n";
180     foreach ($this->hardware_list as $cn => $description){
181       if ($cn == $this->goFonHardware){
182         $selected= "selected";
183       } else {
184         $selected= "";
185       }
186       if (isset($this->used_hardware[$cn])){
187         $color= "style=\"color:#A0A0A0\"";
188       } else {
189         $color= "";
190       }
191       $hl.= "  <option $color label=\"$cn\" value=\"$cn\" $selected>$description</option>\n";
192     }
193     $hl.= "</select>\n";
194     $smarty->assign ("hardware_list", $hl);
195     $smarty->assign ("gotoXMonitor", $this->gotoXMonitor);
196     $smarty->assign("AutoSyncACL",chkacl($this->acl,"AutoSync"));
198     if($this->AutoSync){
199       $smarty->assign("AutoSyncCHK"," checked ");
200     }else{
201       $smarty->assign("AutoSyncCHK"," ");
202     }
204     /* Show main page */
205     return($smarty->fetch (get_template_path('workstationService.tpl',TRUE,dirname(__FILE__))));
206   }
208   function remove_from_parent()
209   {
210       $this->handle_post_events("remove");
211   }
213   /* Save data to object */
214   function save_object()
215   {
216     plugin::save_object();
218     if(isset($_POST['gotoXHsync'])){
219       if(isset($_POST['AutoSync'])){
220         $this->AutoSync = true;
221       }else{
222         $this->AutoSync = false;
223       }
224     }
225   }
227   /* Check supplied data */
228   function check()
229   {
230     $message= array();
232     /* Default entries can use blank hsync/vsync entries */
233     if ($this->dn != "" && $this->cn != "default" && $this->cn != "wdefault"){
235       /* Check vsync for correct usage */
236       $val= preg_replace ("/\s/", "", $this->gotoXVsync);
237       if (!preg_match ("/^\d+(\.\d+)?([-]\d+(\.\d+)?)?$/", $val)
238           && chkacl ($this->acl, "gotoXVsync") == ""){
240         $message[]= _("Please specify a valid VSync range.");
241       } elseif (chkacl ($this->acl, "gotoXVsync") == ""){
242         list($v1,$v2)= preg_split ("/[-+]/", $val);
243         if ($v2 != ""){
244           if ($v1 > $v2){
245             $message[]= _("Please specify a valid VSync range.");
246           }
247         }
248       }
250       /* Check hsync for correct usage */
251       $val= preg_replace ("/\s/", "", $this->gotoXHsync);
252       if (!preg_match ("/^\d+(\.\d+)?([-]\d+(\.\d+)?)?$/", $val)
253           && chkacl ($this->acl, "gotoXHsync") == ""){
255         $message[]= _("Please specify a valid HSync range.");
256       } elseif (chkacl ($this->acl, "gotoXHsync") == ""){
257         list($v1,$v2)= preg_split ("/[-+]/", $val);
258         if ($v2 != ""){
259           if ($v1 > $v2){
260             $message[]= _("Please specify a valid HSync range.");
261           }
262         }
263       }
264     }
265     return ($message);
266   }
269   /* Save to LDAP */
270   function save()
271   {
272     plugin::save();
274     /* Strip out 'default' values */
275     foreach(array(
276           "gotoXDriver", "gotoXResolution", "gotoXColordepth",
277           "gotoXKbModel", "gotoXKbLayout",
278           "gotoXKbVariant", "gotoXMouseType", "gotoXMouseport") as $val){
280       if ($this->attrs[$val] == "default"){
281         $this->attrs[$val]= array();
282       }
283     }
285     if($this->AutoSync){
286       $this->attrs['gotoXHsync'] = preg_replace("/-/","+",$this->attrs['gotoXHsync']) ;
287       $this->attrs['gotoXVsync'] = preg_replace("/-/","+",$this->attrs['gotoXVsync']) ;
288     }
290     /* Write back to ldap */
291     $ldap= $this->config->get_ldap_link();
292     $ldap->cd($this->dn);
293     $ldap->modify($this->attrs);
294     show_ldap_error($ldap->get_error());
295     $this->handle_post_events("modify");
296   }
300 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
301 ?>