Code

Some changes
[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 $gotoXKbModel= "";
19   var $gotoXKbLayout= "";
20   var $gotoXKbVariant= "";
21   var $gotoXMouseType= "";
22   var $gotoXMouseport= "";
23   var $gotoScannerClients= "";
24   var $gotoScannerBackend= "";
25   var $goFonHardware= "automatic";
27   /* Needed values and lists */
28   var $ignore_account= TRUE;
29   var $base= "";
30   var $cn= "";
31   var $orig_dn= "";
32   var $XMethods= array();
33   var $XDrivers= array("unknown", "ati", "atimisc", "chips", "cirrus", "cyrix", "fbdev",
34       "i128", "i740", "i810", "imstt", "mga", "neomagic", "newport", "nsc",  "nv",
35       "r128", "radeon", "rendition", "s3", "s3virge", "savage", "siliconmotion",
36       "sis", "tdfx", "tga", "trident", "tseng", "vesa", "vga");
37   var $XResolutions= array("default", "640x480", "800x600", "1024x768", "1152x864", "1280x1024",
38       "1400x1050", "1600x1200");
39   var $XColordepths= array("default", "8", "15", "16", "24");
40   var $XKbModels= array ("default", "btc9000", "chicony", "compaq", "dell", "dell101", "everex",
41       "flexpro", "geniuscomfy", "hp", "itouch", "jp106", "logicordless",
42       "logiinetnav", "logiinternet", "macintosh", "microsoft",
43       "microsoftpro", "omnikey101", "pc101", "pc102", "pc104",
44       "pc105", "rapidaccess", "rapidaccess2", "winbook");
45   var $XKbLayouts= array ("default", "de", "intl", "us");
46   var $XKbVariants= array ("default", "nodeadkeys", "basic");
47   var $MouseTypes= array("AUTO", "ImPS/2", "PS/2", "Microsoft", "Logitech");
48   var $MousePorts= array("AUTO", "/dev/ttyS0", "/dev/ttyS1", "/dev/psaux", "/dev/input/mice");
49   var $hardware_list= array();
50   var $used_hardware= array();
53   /* attribute list for save action */
54   var $attributes= array("gotoXMonitor",
55       "gotoXDriver", "gotoXResolution", "gotoXColordepth",
56       "gotoXHsync", "gotoXVsync",
57       "gotoScannerEnable", "gotoScannerClients",
58       "gotoScannerBackend", "gotoXKbModel", "gotoXKbLayout", "gotoXKbVariant",
59       "gotoXMouseType", "gotoXMouseport", "goFonHardware");
60   var $objectclasses= array("GOhard");
63   function workservice ($config, $dn= NULL)
64   {
65     plugin::plugin ($config, $dn);
67     /* Initialize methods */
68     $this->XMethods["default"]= _("default");
69     $this->XMethods["indirect"]= _("show chooser");
70     $this->XMethods["query"]= _("direct");
71 #$this->XMethods["squery"]= _("direct via ssh");
72 #$this->XMethods["nquery"]= _("direct via nx");
73     $this->XMethods["load"]= _("load balanced");
74 #$this->XMethods["sload"]= _("load balanced via ssh");
75 #$this->XMethods["nload"]= _("load balanced via nx");
76     $this->XMethods["rdp"]= _("Windows RDP");
77     $this->XMethods["citrix"]= _("ICA client");
79     $this->orig_dn= $this->dn;
81     /* Load hardware list */
82     $ldap= $this->config->get_ldap_link();
83     $ldap->cd($this->config->current['BASE']);
84     $ldap->search("(objectClass=goFonHardware)", array('cn', 'description'));
85     while ($attrs= $ldap->fetch()){
86       $cn= $attrs['cn'][0];
87       if (isset($attrs['description'])){
88         $description= " - ".$attrs['description'][0];
89       } else {
90         $description= "";
91       }
92       $this->hardware_list[$cn]= "$cn$description";
93     }
95     /* Eventually colorize phones */
96     $ldap->cd($this->config->current['BASE']);
97     foreach ($this->hardware_list as $cn => $desc){
98       $ldap->search("(goFonHardware=$cn)", array('cn'));
99       if ($ldap->count() > 0){
100         $ldap->fetch();
101         if ($ldap->getDN() != $this->dn){
102           $this->used_hardware[$cn]= $ldap->getDN();
103         }
104       }
105     }
107     $this->hardware_list["automatic"]= _("automatic");
108     ksort($this->hardware_list);
109   }
111   function execute()
112   {
113         /* Call parent execute */
114         plugin::execute();
116     /* Do we need to flip is_account state? */
117     if (isset($_POST['modify_state'])){
118       $this->is_account= !$this->is_account;
119     }
121     /* Do we represent a valid terminal? */
122     if (!$this->is_account && $this->parent == NULL){
123       $display= "<img alt=\"\" src=\"images/stop.png\" align=\"middle\">&nbsp;<b>".
124         _("This 'dn' has no terminal features.")."</b>";
125       return ($display);
126     }
128     /* Show main page */
129     $smarty= get_smarty();
131     /* Arrays */ 
132     foreach(array("XMethods", "XDrivers", "XResolutions", "XColordepths",
133           "XKbModels", "XKbLayouts", "XKbVariants",
134           "MouseTypes", "MousePorts") as $val){
135       $smarty->assign("$val", $this->$val);
136     }
137     $smarty->assign("xdmcpservers", $this->config->data['SERVERS']['TERMINAL']);
138     $smarty->assign("fontservers", $this->config->data['SERVERS']['FONT']);
139     $smarty->assign("nfsservers", $this->config->data['SERVERS']['NFS']);
140     $smarty->assign("nfsservers", $this->config->data['SERVERS']['NFS']);
142     /* Variables - select */
143     foreach(array(
144           "gotoXDriver", "gotoXResolution", "gotoXColordepth", 
145           "gotoXKbModel", "gotoXKbLayout","gotoScannerEnable",
146           "gotoXKbVariant", "gotoXMouseType", "gotoXMouseport") as $val){
148       $smarty->assign($val."_select", $this->$val);
149       $smarty->assign($val."ACL", chkacl($this->acl, $val));
150     }
152     /* Variables */
153     foreach(array("gotoXHsync", "gotoXVsync") as $val){
154       $smarty->assign($val, $this->$val);
155       $smarty->assign($val."ACL", chkacl($this->acl, $val));
156     }
157     $smarty->assign("staticAddress", "");
159     /* Checkboxes */
160     foreach(array("gotoScannerEnable") as $val){
161       if ($this->$val == TRUE) {
162         $smarty->assign("$val", "checked");
163       } else {
164         $smarty->assign("$val", "");
165       }
166     }
168     /* Phone stuff */
169     $smarty->assign ("goFonHardware", $this->goFonHardware);
170     $hl= "<select size=\"1\" name=\"goFonHardware\" title=\"".
171          _("Choose the phone located at the current terminal")."\" ".
172          chkacl($this->acl, "goFonHardware").">\n";
173     foreach ($this->hardware_list as $cn => $description){
174       if ($cn == $this->goFonHardware){
175         $selected= "selected";
176       } else {
177         $selected= "";
178       }
179       if (isset($this->used_hardware[$cn])){
180         $color= "style=\"color:#A0A0A0\"";
181       } else {
182         $color= "";
183       }
184       $hl.= "  <option $color label=\"$cn\" value=\"$cn\" $selected>$description</option>\n";
185     }
186     $hl.= "</select>\n";
187     $smarty->assign ("hardware_list", $hl);
188     $smarty->assign ("gotoXMonitor", $this->gotoXMonitor);
190     /* Show main page */
191     return($smarty->fetch (get_template_path('workstationService.tpl',TRUE,dirname(__FILE__))));
192   }
194   function remove_from_parent()
195   {
196     /* This is not necessary, i think 
197      * Remove should be called from workGeneric ... 
198      */
199     /*$ldap= $this->config->get_ldap_link();
200     $ldap->rmdir($this->dn);
201     show_ldap_error($ldap->get_error());
202     $this->handle_post_events("remove");
203     */
204    
205     /* This only removes the attributes from this tab, 
206      * and not hte whole entry 
207      */ 
208     $ldap= $this->config->get_ldap_link();
209     plugin::remove_from_parent();
210     $ldap->cd($this->dn);
211     $ldap->modify($this->attrs);
212     show_ldap_error($ldap->get_error());}
215   /* Save data to object */
216   function save_object()
217   {
218     plugin::save_object();
220   }
223   /* Check supplied data */
224   function check()
225   {
226     $message= array();
228     /* Default entries can use blank hsync/vsync entries */
229     if ($this->dn != "" && $this->cn != "default" && $this->cn != "wdefault"){
231       /* Check vsync for correct usage */
232       $val= preg_replace ("/\s/", "", $this->gotoXVsync);
233       if (!preg_match ("/^\d+(\.\d+)?(\-\d+(\.\d+)?)?$/", $val)
234           && chkacl ($this->acl, "gotoXVsync") == ""){
236         $message[]= _("Please specify a valid VSync range.");
237       } elseif (chkacl ($this->acl, "gotoXVsync") == ""){
238         list($v1,$v2)= split ("-", $val);
239         if ($v2 != ""){
240           if ($v1 > $v2){
241             $message[]= _("Please specify a valid VSync range.");
242           }
243         }
244       }
246       /* Check hsync for correct usage */
247       $val= preg_replace ("/\s/", "", $this->gotoXHsync);
248       if (!preg_match ("/^\d+(\.\d+)?(\-\d+(\.\d+)?)?$/", $val)
249           && chkacl ($this->acl, "gotoXHsync") == ""){
251         $message[]= _("Please specify a valid HSync range.");
252       } elseif (chkacl ($this->acl, "gotoXHsync") == ""){
253         list($v1,$v2)= split ("-", $val);
254         if ($v2 != ""){
255           if ($v1 > $v2){
256             $message[]= _("Please specify a valid HSync range.");
257           }
258         }
259       }
260     }
261     return ($message);
262   }
265   /* Save to LDAP */
266   function save()
267   {
268     plugin::save();
270     /* Strip out 'default' values */
271     foreach(array(
272           "gotoXDriver", "gotoXResolution", "gotoXColordepth",
273           "gotoXKbModel", "gotoXKbLayout",
274           "gotoXKbVariant", "gotoXMouseType", "gotoXMouseport") as $val){
276       if ($this->attrs[$val] == "default"){
277         $this->attrs[$val]= array();
278       }
279     }
281     /* Write back to ldap */
282     $ldap= $this->config->get_ldap_link();
283     $ldap->cd($this->dn);
284     $ldap->modify($this->attrs);
285     show_ldap_error($ldap->get_error());
286     $this->handle_post_events("modify");
287   }
291 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
292 ?>