Code

Backport from trunk
[gosa.git] / gosa-plugins / goto / admin / systems / goto / class_terminalService.inc
1 <?php
3 class termservice extends plugin
4 {
5     /* Generic terminal attributes */
6     var $gotoXMonitor= "";
7     var $gotoXMethod= "default";
8     var $gotoXdmcpServer= "";
9     var $gotoXDriver= "";
10     var $gotoXResolution= "";
11     var $gotoXColordepth= "";
12     var $gotoXHsync= "";
13     var $gotoXVsync= "";
14     var $gotoXKbModel= "";
15     var $gotoXKbLayout= "";
16     var $gotoXKbVariant= "";
17     var $gotoXMouseType= "";
18     var $gotoXMouseport= "";
19     var $gotoLpdServer= "";
20     var $gotoScannerEnable= "";
21     var $gotoScannerModel= "";
22     var $gotoScannerClients= "";
23     var $gotoScannerBackend= "";
24     var $goFonHardware= "automatic";
26     var $gotoLpdEnable = array();
28     var $AutoSync = false;
29     var $view_logged = FALSE;
31     /* Needed values and lists */
32     var $ignore_account= TRUE;
33     var $base= "";
34     var $cn= "";
35     var $orig_dn= "";
36     var $XMethods= array();
37     var $XDrivers= array();
38     var $XResolutions= array();
39     var $XColordepths= array();
40     var $XKbModels= array ();
41     var $XKbLayouts= array ();
42     var $XKbVariants= array ();
43     var $MouseTypes= array();
44     var $MousePorts= array();
45     var $hardware_list= array();
46     var $used_hardware= array();
49     /* attribute list for save action */
50     var $attributes= array("gotoLpdEnable", "gotoXMonitor", "gotoXMethod", "gotoXdmcpServer",
51             "gotoXDriver", "gotoXResolution", "gotoXColordepth",
52             "gotoXHsync", "gotoXVsync", "gotoLpdServer",
53             "gotoScannerEnable", "gotoScannerModel", "gotoScannerClients",
54             "gotoScannerBackend", "gotoXKbModel", "gotoXKbLayout", "gotoXKbVariant",
55             "gotoXMouseType", "gotoXMouseport", "goFonHardware");
56     var $objectclasses= array("GOhard");
58     var $is_ogroup        = FALSE;
59     var $is_ogroup_member = FALSE;
61     var $selected_xdmcp_servers = array();
62     var $inherited_xdmcp_servers = array();
64     function termservice (&$config, $dn= NULL, $parent= NULL)
65     {
66         plugin::plugin ($config, $dn, $parent);
67         $this->orig_dn= $this->dn;
69         /* Check if we are a part of an ogroup.
70          * In this case, we have to hide all the inherit stuff.
71          */ 
72         if(isset($parent) && get_class($parent) == "ogroup"){
73             $this->is_ogroup = TRUE;
74         }
76         /* Check if we are member of an object group.
77          */
78         $ldap= $this->config->get_ldap_link();
79         $ldap->cd($this->config->current['BASE']);
80         $ldap->search("(&(|(objectClass=gotoTerminalTemplate)(objectClass=gotoWorkstationTemplate))(member=".LDAP::prepare4filter($this->dn)."))");
81         if($ldap->count()){
82             $this->is_ogroup_member = TRUE;
83         }
85         /* Load gotoLpdEnable
86          */
87         $this->gotoLpdEnable = array();
88         if(isset($this->attrs['gotoLpdEnable']['count'])){
89             for($i = 0 ; $i < $this->attrs['gotoLpdEnable']['count']; $i ++){
90                 $this->gotoLpdEnable[] = $this->attrs['gotoLpdEnable'][$i];
91             }
92         }
93         $this->gotoLpdEnable_dialog = new gotoLpdEnable($this->config,$this->gotoLpdEnable,$this); 
95         /* Get list of available xdrivers */
96         $this->XDrivers = $this->getListOfXDrivers();
98         /* Create a list of available resolutions.
99          */     
100         $this->XResolutions= array(
101                 "640x480"   =>  "640x480",
102                 "800x600"   =>  "800x600",
103                 "1024x768"  =>  "1024x768",
104                 "1152x864"  =>  "1152x864",
105                 "1280x1024" =>  "1280x1024",
106                 "1400x1050" =>  "1400x1050",
107                 "1600x1200" =>  "1600x1200");
109         if($this->config->get_cfg_value("environment","resolutions") != ""){
110             $file = $this->config->get_cfg_value("environment","resolutions");
111             if(is_readable($file)){
112                 $str = file_get_contents($file);
113                 $lines = preg_split("/\n/",$str);
114                 foreach($lines as $line){
115                     $line = trim($line);
116                     if(!empty($line)){
117                         $this->XResolutions[$line]=$line;
118                     }
119                 }
120             }else{
121                 msg_dialog::display(_("Configuration error"), msgPool::cannotReadFile($file), WARNING_DIALOG);
122             }
123         }
125         /* Create a set of selectable color depths
126          */
127         $this->XColordepths= array(
128                 "8"        => "8 " ._("bit"),
129                 "15"       => "15 "._("bit"),
130                 "16"       => "16 "._("bit"),
131                 "24"       => "24 "._("bit"));
134         /* Create a set of selectable keyboard models
135          */
136         $this->XKbModels = array();
137         foreach(array ("btc9000", "chicony", "compaq", "dell", "dell101", "everex",
138                     "flexpro", "geniuscomfy", "hp", "itouch", "jp106", "logicordless",
139                     "logiinetnav", "logiinternet", "macintosh", "microsoft",
140                     "microsoftpro", "omnikey101", "pc101", "pc102", "pc104",
141                     "pc105", "rapidaccess", "rapidaccess2", "winbook") as $type){
142             $this->XKbModels[$type] = $type;
143         }
145         /* Additional values will be extracted from CONFIG_DIR.keyboardLayouts */
146         $this->XKbLayouts = array("de"=> "de","en" =>"en", "es" => "es", "us" =>"us", "fr" => "fr");
147         $this->XKbVariants= array("nodeadkeys"=>"nodeadkeys", "basic"=>"basic");
149         $this->MouseTypes= array("auto" => "auto", 
150                 "explorerps/2" => "explorerps/2",
151                 "ImPS/2" => "ImPS/2",
152                 "PS/2" => "PS/2", 
153                 "Microsoft" => "Microsoft",
154                 "Logitech" => "Logitech",);
156         $this->MousePorts= array("/dev/input/mice" => "/dev/input/mice",
157                 "/dev/mouse" => "/dev/mouse",
158                 "/dev/psaux" => "/dev/psaux",
159                 "/dev/ttyS0" => "/dev/ttyS0",
160                 "/dev/ttyS1" => "/dev/ttyS1");
162         /* Try to read additional keyboard layouts
163          */
164         if(file_exists(CONFIG_DIR."/keyboardLayouts")){
165             if(is_readable(CONFIG_DIR."/keyboardLayouts")){
166                 $str = file_get_contents(CONFIG_DIR."/keyboardLayouts");
167                 $tmp = preg_split("/\n/",$str);
168                 foreach($tmp as $entry){
169                     if((!empty($entry)) && (!preg_match("/^#/",$entry))){
170                         $entry = trim($entry);
171                         $tmp2 = explode(":",$entry);
172                         $la =   trim($tmp2[0]);   // What would be saved to ldap
173                         $da =   trim($tmp2[1]);   // This wis displayed in the listbox
174                         $this->XKbLayouts [ $la] = $da;
175                     }
176                 }
177             }
178         }
180         /* Terminal server methods supported by LTSP */
181         if($this->is_ogroup_member){
182             $this->XMethods["default"]= _("inherited");
183         }
184         $this->XMethods["xdmcp"]   = _("XDMCP");
185         $this->XMethods["ldm"]     = _("LDM");
186         $this->XMethods["shell"]   = _("Shell");
187         $this->XMethods["telnet"]  = _("Telnet");
188         $this->XMethods["rdp"]     = _("Windows RDP");
189 #$this->XMethods["citrix"] = _("ICA client");
191         /* Get selected gotoXdmcpServer */
192         $this->selected_xdmcp_servers = array();
193         if(isset($this->attrs['gotoXdmcpServer'])){
194             for($i = 0 ; $i < $this->attrs['gotoXdmcpServer']['count'] ; $i++){
195                 $this->selected_xdmcp_servers[] = $this->attrs['gotoXdmcpServer'][$i];
196             }
197         }
199         /* Load phone hardware list 
200          */
201         $tmp = get_sub_list("(objectClass=goFonHardware)","",array(get_ou("phoneGeneric", "phoneRDN")), 
202                 $this->config->current['BASE'],array("cn","description"), GL_NO_ACL_CHECK);
203         foreach($tmp as $attrs){
204             $cn= $attrs['cn'][0];
205             $description= "";
206             if (isset($attrs['description'])){
207                 $description= " - ".$attrs['description'][0];
208             }
209             $this->hardware_list[$cn]= "$cn$description";
210         }
211         $this->hardware_list["automatic"]= _("automatic");
212         ksort($this->hardware_list);
214         /* These departments may contain objects that have 
215            goFonHardware set. 
216          */
217         $deps_a = array(
218                 get_people_ou(),
219                 get_ou("group", "ogroupRDN"),
220                 get_ou("servgeneric", "serverRDN"),
221                 get_ou("termgeneric", "terminalRDN"),
222                 get_ou("workgeneric", "workstationRDN"),
223                 get_ou("printgeneric", "printerRDN"),
224                 get_ou("componentGeneric", "componentRDN"),
225                 get_ou("phoneGeneric", "phoneRDN"));
227         $tmp = get_sub_list("(goFonHardware=*)","",$deps_a,$this->config->current['BASE'],
228                 array('cn','dn','goFonHardware'),GL_NO_ACL_CHECK);
229         foreach($tmp as $attrs){
230             $cn = $attrs['goFonHardware'][0];
231             if(isset($this->hardware_list[$cn])){
232                 $this->used_hardware[$cn]= $cn;
233             }
234         }
236         /* Load hardware list */
237         $ldap= $this->config->get_ldap_link();
238         $ldap->cd($this->config->current['BASE']);
239         $map= array(
240                 "gotoXResolution", 
241                 "gotoXColordepth", 
242                 "gotoXKbModel", 
243                 "gotoXKbLayout",
244                 "gotoXDriver",
245                 "gotoXdmcpServer",
246                 "gotoXKbVariant",
247                 "gotoXMouseType", 
248                 "gotoXMethod",
249                 "gotoXMouseport");
250         $ldap->search("(&(|(objectClass=gotoTerminalTemplate)(objectClass=gotoWorkstationTemplate))(member=".LDAP::prepare4filter($this->dn)."))",$map);
251         if ($ldap->count() == 1){
252             $attrs= $ldap->fetch();
253             foreach ($map as $name){
254                 if (!isset($attrs[$name][0])){
255                     continue;
256                 }
258                 switch ($name){
259                     case 'gotoXDriver': 
260                         $this->XDrivers = array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XDrivers;
261                         break;
262                     case 'gotoXMethod': 
263                         $this->XMethods = array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XMethods;
264                         if(isset($attrs['gotoXdmcpServer'])){
265                             for($i = 0 ; $i < $attrs['gotoXdmcpServer']['count'] ; $i++){
266                                 $this->inherited_xdmcp_servers[] = $attrs['gotoXdmcpServer'][$i];
267                             }
268                         }
269                         break;
270                     case 'gotoXResolution':
271                         $this->XResolutions= array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XResolutions;
272                         break;
273                     case 'gotoXColordepth':
274                         $this->XColordepths= array('default' => _("inherited").' ['.$attrs[$name][0].' '._('Bit').']') + $this->XColordepths;
275                         break;
276                     case 'gotoXKbModel':
277                         $this->XKbModels= array('default' => _("inherited").' ['.$attrs[$name][0].']') + $this->XKbModels;
278                         break;
279                     case 'gotoXKbLayout':
280                         $this->XKbLayouts= array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XKbLayouts;
281                         break;
282                     case 'gotoXKbVariant':
283                         $this->XKbVariants= array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XKbVariants;
284                         break;
285                     case 'gotoXMouseType':
286                         $this->MouseTypes= array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->MouseTypes;
287                         break;
288                     case 'gotoXMouseport':
289                         $this->MousePorts= array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->MousePorts;
290                         break;
291                 }
292             }
293         }
295         if(preg_match("/\+/",$this->gotoXHsync)){
296             $this->AutoSync = true;
297             $this->gotoXHsync = preg_replace("/\+/","-",$this->gotoXHsync);
298             $this->gotoXVsync = preg_replace("/\+/","-",$this->gotoXVsync);
299         }
300     }
303     function execute()
304     {
305         /* Call parent execute */
306         plugin::execute();
308         if($this->is_account && !$this->view_logged){
309             $this->view_logged = TRUE;
310             new log("view","terminal/".get_class($this),$this->dn);
311         }
313         /* Do we need to flip is_account state? */
314         if (isset($_POST['modify_state'])){
315             $this->is_account= !$this->is_account;
316         }
318         /* Do we represent a valid terminal? */
319         if (!$this->is_account && $this->parent === NULL){
320             $display= "<img alt=\"\" src=\"images/small-error.png\" align=\"middle\">&nbsp;<b>".
321                 _("This DN has no terminal features.")."</b>";
322             return ($display);
323         }
325         /* Show main page */
326         $smarty= get_smarty();
327         $smarty->assign("gotoLpdEnable_dialog", $this->gotoLpdEnable_dialog->execute());
329         /* Assign acls */
330         $tmp= $this->plInfo();
331         foreach($tmp['plProvidedAcls'] as $name => $translation){
332             $smarty->assign($name."ACL",$this->getacl($name));
333         }
335         if(isset($_POST['gotoXdmcpServer_add']) && isset($_POST['XdmcpAddServer'])){
336             if(!in_array_strict($_POST['gotoXdmcpServer_add'],$this->selected_xdmcp_servers)){
337                 $this->selected_xdmcp_servers[] =get_post('gotoXdmcpServer_add');
338             }
339         }
341         if(isset($_POST['selected_xdmcp_servers']) && isset($_POST['XdmcpDelServer'])){
342             $tmp = array();
343             foreach($this->selected_xdmcp_servers as $name){
344                 if(!in_array_strict($name,$_POST['selected_xdmcp_servers'])){
345                     $tmp[] =  $name;
346                 }
347             }
348             $this->selected_xdmcp_servers = $tmp;
349         }
351         /* Arrays */ 
352         foreach(array("XMethods", "XDrivers", "XResolutions", "XColordepths",
353                     "XKbModels","XKbVariants","MouseTypes", "MousePorts") as $val){
354             $smarty->assign("$val", set_post($this->$val));
355         }
356         $smarty->assign("XKbLayouts",   set_post($this->XKbLayouts));
357         $smarty->assign("XKbLayoutKeys",set_post(array_flip($this->XKbLayouts)));
358         $smarty->assign("nfsservers",   set_post($this->config->data['SERVERS']['NFS']));
361         /* Create a list of useable servers for the currently selected 
362          *  connection type.
363          */ 
364         $xdmcp_types =  $this->config->data['SERVERS']['TERMINAL_SESSION_TYPES'];
365         $available_servers = array();
366         foreach($xdmcp_types as $servername =>$supported_types){
367             if(in_array_strict(strtoupper($this->gotoXMethod),$supported_types)){
368                 $available_servers[]  = $servername;
369             }
370         }
372         /* Append additional information to invalid server selections.
373          */
374         $tmp = array();
375         foreach($this->selected_xdmcp_servers as $server){
376             if(in_array_strict($server,$available_servers)){
377                 $tmp[$server] = $server;
378             }else{
379                 $tmp[$server] = $server."&nbsp;-&nbsp;"._("Unsupported");
380             }
381         }
383         /* Remove already selected servers from available list. 
384          */
385         foreach($available_servers as $key => $server){
386             if(isset($tmp[$server])){
387                 unset($available_servers[$key]);
388             }
389         }
391         $smarty->assign("selected_xdmcp_servers", set_post($tmp));
392         $smarty->assign("inherited_xdmcp_servers",set_post($this->inherited_xdmcp_servers));
393         $smarty->assign("available_xdmcp_servers",set_post($available_servers));
395         /* Variables - select */
396         foreach(array("gotoXMethod","gotoXDriver", "gotoXResolution", "gotoXColordepth", 
397                     "gotoLpdServer", "gotoXKbModel", "gotoXKbLayout",
398                     "gotoXKbVariant", "gotoXMouseType", "gotoXMouseport") as $val){
400             $smarty->assign($val."_select", set_post($this->$val));
401         }
403         /* Variables */
404         foreach(array("gotoXHsync", "gotoXVsync") as $val){
405             $smarty->assign($val, set_post($this->$val));
406         }
408         /* Checkboxes */
409         foreach(array("gotoScannerEnable") as $val){
410             if ($this->$val == TRUE) {
411                 $smarty->assign("$val", "checked");
412             } else {
413                 $smarty->assign("$val", "");
414             }
415         }
417         /* Phone stuff */
418         $smarty->assign ("goFonHardware", set_post($this->goFonHardware));
419         $hl= "<select size=\"1\" name=\"goFonHardware\" title=\"".
420             _("Choose the phone located at the current terminal")."\" >\n";
421         foreach ($this->hardware_list as $cn => $description){
422             if ($cn == $this->goFonHardware){
423                 $selected= "selected";
424             } else {
425                 $selected= "";
426             }
427             if (isset($this->used_hardware[$cn])){
428                 $color= "style=\"color:#A0A0A0\"";
429             } else {
430                 $color= "";
431             }
432             $hl.= "  <option $color label=\"$cn\" value=\"$cn\" $selected>$description</option>\n";
433         }
434         $hl.= "</select>\n";
435         $smarty->assign ("hardware_list", $hl);
436         $smarty->assign ("gotoXMonitor", set_post($this->gotoXMonitor));
438         $smarty->assign("AutoSyncACL",$this->getacl("AutoSync"));
440         $smarty->assign("AutoSyncCHK"," ");
441         if($this->AutoSync){
442             $smarty->assign("AutoSyncCHK"," checked ");
443             $smarty->assign("gotoXVsyncACL", preg_replace("/w/","",$this->getacl("gotoXVsync")));
444             $smarty->assign("gotoXHsyncACL", preg_replace("/w/","",$this->getacl("gotoXHsync")));
445         }
447         /* Show main page */
448         return($smarty->fetch (get_template_path('terminalService.tpl', TRUE,dirname(__FILE__))));
449     }
451     function remove_from_parent()
452     {
453         new log("remove","terminal/".get_class($this),$this->dn,array_keys($this->attrs));
454         $this->handle_post_events("remove");
455     }
458     /* Save data to object */
459     function save_object()
460     {
461         plugin::save_object();
463         $this->gotoLpdEnable_dialog->save_object();
464         if($this->gotoLpdEnable_dialog->is_account){
465             $this->gotoLpdEnable = $this->gotoLpdEnable_dialog->save();
466         }else{
467             $this->gotoLpdEnable = array();
468         }
470         /* Save checkbox state */
471         if (isset ($_POST['gotoXMethod'])){
472             foreach (array("gotoScannerEnable") as $val){
474                 if($this->acl_is_writeable($val)){
475                     if (!isset ($_POST["$val"])){
476                         $this->$val= FALSE;
477                     } else {
478                         $this->$val= TRUE;
479                     }
480                 }
481             }
482         } 
484         if(isset($_POST['gotoXDriver'])){
485             if(isset($_POST['AutoSync'])){
486                 $this->AutoSync = true;
487             }else{
488                 $this->AutoSync = false;
489             }
490         }
492         /* Default entries can use blank hsync/vsync entries */
493         if ($this->dn != "" && $this->cn != "default" && $this->cn != "default"){
495             /* But only if no auto sync is enabled... */
496             if (!$this->AutoSync){
498                 /* Check vsync for correct usage */
499                 $val= preg_replace ("/\s/", "", $this->gotoXVsync);
500                 if (!preg_match ("/^\d+(\.\d+)?([-]\d+(\.\d+)?)?$/", $val) && $this->acl_is_writeable("gotoXVsync")){
501                     $message[]= msgPool::invalid(_("Vertical synchronization range"));
502                 } elseif ($this->acl_is_writeable("gotoXVsync")){
503                     list($v1,$v2)= preg_split ("/[-+]/", $val);
504                     if ($v2 != ""){
505                         if ($v1 > $v2){
506                             $message[]= msgPool::invalid(_("Vertical synchronization range"));
507                         }
508                     }
509                 }
511                 /* Check hsync for correct usage */
512                 $val= preg_replace ("/\s/", "", $this->gotoXHsync);
513                 if (!preg_match ("/^\d+(\.\d+)?([-]\d+(\.\d+)?)?$/", $val) && $this->acl_is_writeable("gotoXHsync")){
514                     $message[]= msgPool::invalid(_("Horizontal synchronization range"));
515                 } elseif ($this->acl_is_writeable("gotoXHsync")){
516                     list($v1,$v2)= preg_split ("/[-+]/", $val);
517                     if ($v2 != ""){
518                         if ($v1 > $v2){
519                             $message[]= msgPool::invalid(_("Horizontal synchronization range"));
520                         }
521                     }
522                 }
523             }
524         }
525     }
528     /* Check supplied data */
529     function check()
530     {
531         /* Call common method to give check the hook */
532         $message= plugin::check();
533         $message = array_merge($message,$this->gotoLpdEnable_dialog->check());
535         if($this->gotoXMethod != "default"){
536             $xdmcp_types =  $this->config->data['SERVERS']['TERMINAL_SESSION_TYPES'];
537             $available_servers = array();
538             foreach($xdmcp_types as $servername =>$supported_types){
539                 if(in_array_strict(strtoupper($this->gotoXMethod),$supported_types)){
540                     $available_servers[]  = $servername;
541                 }
542             }
543             foreach($this->selected_xdmcp_servers as $server){
544                 if(!in_array_strict($server,$available_servers)){
545                     $message[] = _("Remote desktop settings contains servers that do not support the selected connection method.");
546                     break;
547                 }
548             }
549         }
551         return ($message);
552     }
555     /* Save to LDAP */
556     function save()
557     {
558         /* remove objectclass GOhard if this is an ogroup tab */
559         if(isset($this->parent->by_object['ogroup'])){
560             $this->objectclasses = array();
561         }
563         plugin::save();
565         /* Strip out 'default' values */
566         foreach(array("gotoXMethod","gotoXDriver", "gotoXResolution", "gotoXColordepth",
567                     "gotoLpdServer", "gotoXKbModel", "gotoXKbLayout",
568                     "gotoXKbVariant", "gotoXMouseType", "gotoXMouseport") as $val){
570             if ($this->attrs[$val] == "default"){
571                 $this->attrs[$val]= array();
572             }
573         }
575         if($this->gotoXMethod == "default"){
576             $this->attrs['gotoXdmcpServer'] = array();
577             $this->attrs['gotoXMethod'] = array();
578         }else{
579             $this->attrs['gotoXdmcpServer'] = array_values($this->selected_xdmcp_servers);
580         }
583         if($this->AutoSync){
584             $this->attrs['gotoXHsync'] = "30+55";
585             $this->attrs['gotoXVsync'] = "50+70";
586         }
588         /* Write back to ldap */
589         $ldap= $this->config->get_ldap_link();
590         $ldap->cd($this->dn);
591         $this->cleanup();
592         $ldap->modify ($this->attrs); 
593         new log("modify","terminal/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error());
595         if (!$ldap->success()){
596             msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, LDAP_MOD, get_class()));
597         }
598         $this->handle_post_events("modify");
600         /* Send goto reload event to gosaSupportDaemon */
601         if(count($this->attrs)){
602             $this->send_goto_reload();
603         }
604     }
607     function getListOfXDrivers()
608     {
609         $drivers = array("default" => "["._("unknown")."]");
611         /* Generate a list of xdrivers from CONFIG_DIR/xdrivers */
612         if (file_exists(CONFIG_DIR.'/xdrivers')){
613             $xdrivers = file (CONFIG_DIR.'/xdrivers');
614             foreach ($xdrivers as $line){
615                 if (!preg_match ("/^#/", $line)){
616                     $drivers[]= trim($line);
617                 }
618             }
619         } else {
620             foreach( array(
621                         "ati", "atimisc", "chips", "cirrus", "cyrix", "fbdev", "fglrx",
622                         "i128", "i740", "i810", "intel", "imstt", "mga", "neomagic", "newport", "nsc",  "nv", "nvidia",
623                         "r128", "radeonhd", "radeon", "rendition", "s3", "s3virge", "savage", "siliconmotion",
624                         "sis", "tdfx", "tga", "trident", "tseng", "vesa", "vga", "vmware") as $driver){
625                 $drivers[] = $driver;
626             }
627         }
629         $tmp = array();
630         foreach($drivers as $name){
631             $tmp[$name] = $name;
632         }
633         return($tmp);
634     }
636     function send_goto_reload()
637     {
638         if(count($this->attrs) && class_available("DaemonEvent")){
639             $events = DaemonEvent::get_event_types(SYSTEM_EVENT | HIDDEN_EVENT);
640             $o_queue = new gosaSupportDaemon();
641             if(isset($events['TRIGGERED']['DaemonEvent_goto_reload'])){
642                 $evt = $events['TRIGGERED']['DaemonEvent_goto_reload'];
643                 $macs = array();
645                 /* Get list of macAddresses
646                  */
647                 if(isset($this->parent->by_object['ogroup'])){
649                     /* If we are an object group, add all member macs
650                      */
651                     $p = $this->parent->by_object['ogroup'];
652                     foreach($p->memberList as $dn => $obj){
653                         if(preg_match("/".preg_quote(get_ou("ArpNewDevice", "systemIncomingRDN"), '/')."/",$dn)) continue;
654                         if(isset($p->objcache[$dn]['macAddress']) && !empty($p->objcache[$dn]['macAddress'])){
655                             $macs[] = $p->objcache[$dn]['macAddress'];
656                         }
657                     }
658                 }elseif(isset($this->parent->by_object['workgeneric']->netConfigDNS->macAddress)){
660                     /* We are a workstation. Add current mac.
661                      */
662                     $mac = $this->parent->by_object['workgeneric']->netConfigDNS->macAddress;
663                     if(!empty($mac) && !preg_match("/".preg_quote(get_ou("ArpNewDevice", "systemIncomingRDN"), '/')."/",$this->orig_dn)){
664                         $macs[] = $mac;
665                     }
666                 }
668                 /* Trigger event for all member objects
669                  */
670                 if(count($macs)){
671                     $tmp = new $evt['CLASS_NAME']($this->config);
672                     $tmp->set_type(TRIGGERED_EVENT);
673                     $target = $o_queue->get_host().":".$o_queue->get_port();
674                     $tmp->add_targets(array($target));
675                     $tmp->set_macs($macs);
676                     if(!$o_queue->append($tmp,TRUE)){
677                         msg_dialog::display(_("Service infrastructure"),msgPool::siError($o_queue->get_error()),ERROR_DIALOG);
678                     }
679                 }
680             }
681         }
682     }
685     function PrepareForCopyPaste($source)
686     {
687         plugin::PrepareForCopyPaste($source);
689         $source_o = new termservice ($this->config, $source['dn']);
691         foreach(array("gotoXdmcpServer","selected_xdmcp_servers") as $attr){
692             $this->$attr = $source_o->$attr;
693         }
694     }
698     /* Return plugin informations for acl handling */
699     static function plInfo()
700     {
701         return (array(
702                     "plShortName"   => _("Service"),
703                     "plDescription" => _("Terminal service"),
704                     "plSelfModify"  => FALSE,
705                     "plDepends"     => array(),
706                     "plPriority"    => 3,
707                     "plSection"     => array("administration"),
708                     "plCategory"    => array("terminal"),
710                     "plProvidedAcls"=> array(
712                         "gotoXMonitor"            => _("Monitor"),
713                         "gotoXMethod"             => _("Method"),
714                         "gotoXdmcpServer"         => _("Remote desktop"),
715                         "gotoXDriver"             => _("Graphic driver"),
716                         "gotoXResolution"         => _("Graphic resolution"),
717                         "gotoXColordepth"         => _("Graphic color depth"),
718                         "gotoXHsync"              => _("Horizontal synchronization"),
719                         "gotoXVsync"              => _("Vertical synchronization"),
720                         "AutoSync"                => _("Auto-Sync"),
721                         "gotoScannerEnable"       => _("Scanner enabled"),
722                         "gotoLpdEnable"           => _("Printer enabled"),
723                         "gotoXKbModel"            => _("Keyboard model"),
724                         "gotoXKbLayout"           => _("Keyboard layout"),
725                         "gotoXKbVariant"          => _("Keyboard variant"),
726                         "gotoXMouseType"          => _("Mouse type"),
727                         "gotoXMouseport"          => _("Mouse port"),
728                         "gotoLpdEnable"         => _("Printer enabled"),
729                         "goFonHardware"           => _("Telephone hardware"))
730                         ));
731     }
734 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
735 ?>