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\"> <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 }
298 }
300 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
301 ?>