2359b8566cb8eaebaf6738b4d9e7bc1e154c9dce
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 }
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\"> <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 }
323 }
325 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
326 ?>