Code

Created trunk inside of 2.6-lhm
[gosa.git] / trunk / 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("resolutions") != ""){
110       $file = $this->config->get_cfg_value("resolutions");
111       if(is_readable($file)){
112         $str = file_get_contents($file);
113         $lines = 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"));
133     
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");
148     $this->MouseTypes = array("ImPS/2"=>"ImPS/2","PS/2"=>"PS/2", "explorerps/2"=>"explorerps/2",
149                               "Microsoft"=>"Microsoft","Logitech"=>"Logitech");
150     $this->MousePorts = array("/dev/ttyS0"=>"/dev/ttyS0",
151                               "/dev/ttyS1"=>"/dev/ttyS1","/dev/psaux"=>"/dev/psaux", 
152                               "/dev/input/mice"=>"/dev/input/mice");
153  
155     /* Try to read additional keyboard layouts
156      */
157     if(file_exists(CONFIG_DIR."/keyboardLayouts")){
158       if(is_readable(CONFIG_DIR."/keyboardLayouts")){
159         $str = file_get_contents(CONFIG_DIR."/keyboardLayouts");
160         $tmp = split("\n",$str);
161         foreach($tmp as $entry){
162           if((!empty($entry)) && (!preg_match("/^#/",$entry))){
163             $entry = trim($entry);
164             $tmp2 = split ("\:",$entry);
165             $la =   trim($tmp2[0]);   // What would be saved to ldap
166             $da =   trim($tmp2[1]);   // This wis displayed in the listbox
167             $this->XKbLayouts [ $la] = $da;
168           }
169         }
170       }
171     }
173     /* Terminal server methods supported by LTSP */
174     if($this->is_ogroup_member){
175       $this->XMethods["default"]= _("inherited");
176     }
177     $this->XMethods["xdmcp"]   = _("XDMCP");
178     $this->XMethods["ldm"]     = _("LDM");
179     $this->XMethods["shell"]   = _("Shell");
180     $this->XMethods["telnet"]  = _("Telnet");
181     $this->XMethods["rdp"]     = _("Windows RDP");
182     #$this->XMethods["citrix"] = _("ICA client");
184     /* Get selected gotoXdmcpServer */
185     $this->selected_xdmcp_servers = array();
186     if(isset($this->attrs['gotoXdmcpServer'])){
187       for($i = 0 ; $i < $this->attrs['gotoXdmcpServer']['count'] ; $i++){
188         $this->selected_xdmcp_servers[] = $this->attrs['gotoXdmcpServer'][$i];
189       }
190     }
192     /* Load phone hardware list 
193      */
194     $tmp = get_sub_list("(objectClass=goFonHardware)","",array(get_ou("phoneRDN")), 
195                   $this->config->current['BASE'],array("cn","description"), GL_NO_ACL_CHECK);
196     foreach($tmp as $attrs){
197       $cn= $attrs['cn'][0];
198       $description= "";
199       if (isset($attrs['description'])){
200         $description= " - ".$attrs['description'][0];
201       }
202       $this->hardware_list[$cn]= "$cn$description";
203     }
204     $this->hardware_list["automatic"]= _("automatic");
205     ksort($this->hardware_list);
207     /* These departments may contain objects that have 
208         goFonHardware set. 
209      */
210     $deps_a = array(
211         get_people_ou(),
212         get_ou("ogroupRDN"),
213         get_ou("serverRDN"),
214         get_ou("terminalRDN"),
215         get_ou("workstationRDN"),
216         get_ou("printerRDN"),
217         get_ou("componentRDN"),
218         get_ou("phoneRDN"));
220     $tmp = get_sub_list("(goFonHardware=*)","",$deps_a,$this->config->current['BASE'],
221         array('cn','dn','goFonHardware'),GL_NO_ACL_CHECK);
222     foreach($tmp as $attrs){
223       $cn = $attrs['goFonHardware'][0];
224       if(isset($this->hardware_list[$cn])){
225         $this->used_hardware[$cn]= $cn;
226       }
227     }
229     /* Load hardware list */
230     $ldap= $this->config->get_ldap_link();
231     $ldap->cd($this->config->current['BASE']);
232     $map= array(
233         "gotoXResolution", 
234         "gotoXColordepth", 
235         "gotoXKbModel", 
236         "gotoXKbLayout",
237 #        "gotoXDriver",
238         "gotoXdmcpServer",
239         "gotoXKbVariant",
240         "gotoXMouseType", 
241         "gotoXMethod",
242         "gotoXMouseport");
243     $ldap->search("(&(|(objectClass=gotoTerminalTemplate)(objectClass=gotoWorkstationTemplate))(member=".LDAP::prepare4filter($this->dn)."))",$map);
244     if ($ldap->count() == 1){
245       $attrs= $ldap->fetch();
246       foreach ($map as $name){
247         if (!isset($attrs[$name][0])){
248           continue;
249         }
251         switch ($name){
252 #         case 'gotoXDriver': 
253 #           $this->XDrivers = array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XDrivers;
254 #           break;
255           case 'gotoXMethod': 
256             $this->XMethods = array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XMethods;
257             if(isset($attrs['gotoXdmcpServer'])){
258               for($i = 0 ; $i < $attrs['gotoXdmcpServer']['count'] ; $i++){
259                 $this->inherited_xdmcp_servers[] = $attrs['gotoXdmcpServer'][$i];
260               }
261             }
262             break;
263           case 'gotoXResolution':
264             $this->XResolutions= array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XResolutions;
265             break;
266           case 'gotoXColordepth':
267             $this->XColordepths= array('default' => _("inherited").' ['.$attrs[$name][0].' '._('Bit').']') + $this->XColordepths;
268             break;
269           case 'gotoXKbModel':
270             $this->XKbModels= array('default' => _("inherited").' ['.$attrs[$name][0].']') + $this->XKbModels;
271             break;
272           case 'gotoXKbLayout':
273             $this->XKbLayouts= array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XKbLayouts;
274             break;
275           case 'gotoXKbVariant':
276             $this->XKbVariants= array('default' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->XKbVariants;
277             break;
278           case 'gotoXMouseType':
279             $this->MouseTypes= array('AUTO' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->MouseTypes;
280             break;
281           case 'gotoXMouseport':
282             $this->MousePorts= array('AUTO' => _("inherited").' ['.$attrs[$name][0].']' ) + $this->MousePorts;
283             break;
284         }
285       }
286     }
288     if(preg_match("/\+/",$this->gotoXHsync)){
289       $this->AutoSync = true;
290       $this->gotoXHsync = preg_replace("/\+/","-",$this->gotoXHsync);
291       $this->gotoXVsync = preg_replace("/\+/","-",$this->gotoXVsync);
292     }
293   }
296   function execute()
297   {
298     /* Call parent execute */
299     plugin::execute();
301     if($this->is_account && !$this->view_logged){
302       $this->view_logged = TRUE;
303       new log("view","terminal/".get_class($this),$this->dn);
304     }
306     /* Do we need to flip is_account state? */
307     if (isset($_POST['modify_state'])){
308       $this->is_account= !$this->is_account;
309     }
311     /* Do we represent a valid terminal? */
312     if (!$this->is_account && $this->parent === NULL){
313       $display= "<img alt=\"\" src=\"images/small-error.png\" align=\"middle\">&nbsp;<b>".
314         _("This 'dn' has no terminal features.")."</b>";
315       return ($display);
316     }
318     /* Show main page */
319     $smarty= get_smarty();
320     $smarty->assign("gotoLpdEnable_dialog", $this->gotoLpdEnable_dialog->execute());
322     /* Assign acls */
323     $tmp= $this->plInfo();
324     foreach($tmp['plProvidedAcls'] as $name => $translation){
325       $smarty->assign($name."ACL",$this->getacl($name));
326     }
328     if(isset($_POST['gotoXdmcpServer_add']) && isset($_POST['XdmcpAddServer'])){
329       if(!in_array($_POST['gotoXdmcpServer_add'],$this->selected_xdmcp_servers)){
330         $this->selected_xdmcp_servers[] = $_POST['gotoXdmcpServer_add'];
331       }
332     }
334     if(isset($_POST['selected_xdmcp_servers']) && isset($_POST['XdmcpDelServer'])){
335       $tmp = array();
336       foreach($this->selected_xdmcp_servers as $name){
337         if(!in_array($name,$_POST['selected_xdmcp_servers'])){
338           $tmp[] =  $name;
339         }
340       }
341       $this->selected_xdmcp_servers = $tmp;
342     }
344     /* Arrays */ 
345     foreach(array("XMethods", "XDrivers", "XResolutions", "XColordepths",
346           "XKbModels","XKbVariants","MouseTypes", "MousePorts") as $val){
347       $smarty->assign("$val", $this->$val);
348     }
349     $smarty->assign("XKbLayouts",   $this->XKbLayouts);
350     $smarty->assign("XKbLayoutKeys",array_flip($this->XKbLayouts));
351     $smarty->assign("nfsservers", $this->config->data['SERVERS']['NFS']);
352   
353     
354     /* Create a list of useable servers for the currently selected 
355      *  connection type.
356      */ 
357     $xdmcp_types =  $this->config->data['SERVERS']['TERMINAL_SESSION_TYPES'];
358     $available_servers = array();
359     foreach($xdmcp_types as $servername =>$supported_types){
360       if(in_array(strtoupper($this->gotoXMethod),$supported_types)){
361         $available_servers[]  = $servername;
362       }
363     }
365     /* Append additional information to invalid server selections.
366      */
367     $tmp = array();
368     foreach($this->selected_xdmcp_servers as $server){
369       if(in_array($server,$available_servers)){
370         $tmp[$server] = $server;
371       }else{
372         $tmp[$server] = $server."&nbsp;-&nbsp;"._("Unsupported");
373       }
374     }
376     /* Remove already selected servers from available list. 
377      */
378     foreach($available_servers as $key => $server){
379       if(isset($tmp[$server])){
380         unset($available_servers[$key]);
381       }
382     }
384     $smarty->assign("selected_xdmcp_servers", $tmp);
385     $smarty->assign("inherited_xdmcp_servers", $this->inherited_xdmcp_servers);
386     $smarty->assign("available_xdmcp_servers", $available_servers);
388     /* Variables - select */
389     foreach(array("gotoXMethod","gotoXDriver", "gotoXResolution", "gotoXColordepth", 
390           "gotoLpdServer", "gotoXKbModel", "gotoXKbLayout",
391           "gotoXKbVariant", "gotoXMouseType", "gotoXMouseport") as $val){
393       $smarty->assign($val."_select", $this->$val);
394     }
396     /* Variables */
397     foreach(array("gotoXHsync", "gotoXVsync") as $val){
398       $smarty->assign($val, $this->$val);
399     }
400     $smarty->assign("staticAddress", "");
402     /* Checkboxes */
403     foreach(array("gotoScannerEnable") as $val){
404       if ($this->$val == TRUE) {
405         $smarty->assign("$val", "checked");
406       } else {
407         $smarty->assign("$val", "");
408       }
409     }
411     /* Phone stuff */
412     $smarty->assign ("goFonHardware", $this->goFonHardware);
413     $hl= "<select size=\"1\" name=\"goFonHardware\" title=\"".
414          _("Choose the phone located at the current terminal")."\" >\n";
415     foreach ($this->hardware_list as $cn => $description){
416       if ($cn == $this->goFonHardware){
417         $selected= "selected";
418       } else {
419         $selected= "";
420       }
421       if (isset($this->used_hardware[$cn])){
422         $color= "style=\"color:#A0A0A0\"";
423       } else {
424         $color= "";
425       }
426       $hl.= "  <option $color label=\"$cn\" value=\"$cn\" $selected>$description</option>\n";
427     }
428     $hl.= "</select>\n";
429     $smarty->assign ("hardware_list", $hl);
430     $smarty->assign ("gotoXMonitor", $this->gotoXMonitor);
432     $smarty->assign("AutoSyncACL",$this->getacl("AutoSync"));
434     $smarty->assign("AutoSyncCHK"," ");
435     if($this->AutoSync){
436       $smarty->assign("AutoSyncCHK"," checked ");
437       $smarty->assign("gotoXVsyncACL", preg_replace("/w/","",$this->getacl("gotoXVsync")));
438       $smarty->assign("gotoXHsyncACL", preg_replace("/w/","",$this->getacl("gotoXHsync")));
439     }
441     /* Show main page */
442     return($smarty->fetch (get_template_path('terminalService.tpl', TRUE,dirname(__FILE__))));
443   }
445   function remove_from_parent()
446   {
447     new log("remove","terminal/".get_class($this),$this->dn,array_keys($this->attrs));
448     $this->handle_post_events("remove");
449   }
452   /* Save data to object */
453   function save_object()
454   {
455     plugin::save_object();
457     $this->gotoLpdEnable_dialog->save_object();
458     if($this->gotoLpdEnable_dialog->is_account){
459       $this->gotoLpdEnable = $this->gotoLpdEnable_dialog->save();
460     }else{
461       $this->gotoLpdEnable = array();
462     }
464     /* Save checkbox state */
465     if (isset ($_POST['gotoXMethod'])){
466       foreach (array("gotoScannerEnable") as $val){
468         if($this->acl_is_writeable($val)){
469           if (!isset ($_POST["$val"])){
470             $this->$val= FALSE;
471           } else {
472             $this->$val= TRUE;
473           }
474         }
475       }
476     } 
478     if(isset($_POST['gotoXDriver'])){
479       if(isset($_POST['AutoSync'])){
480         $this->AutoSync = true;
481       }else{
482         $this->AutoSync = false;
483       }
484     }
486     /* Default entries can use blank hsync/vsync entries */
487     if ($this->dn != "" && $this->cn != "default" && $this->cn != "default"){
489       /* But only if no auto sync is enabled... */
490       if (!$this->AutoSync){
492         /* Check vsync for correct usage */
493         $val= preg_replace ("/\s/", "", $this->gotoXVsync);
494         if (!preg_match ("/^\d+(\.\d+)?([-]\d+(\.\d+)?)?$/", $val) && $this->acl_is_writeable("gotoXVsync")){
495           $message[]= msgPool::invalid(_("VSync range"));
496         } elseif ($this->acl_is_writeable("gotoXVsync")){
497           list($v1,$v2)= preg_split ("/[-+]/", $val);
498           if ($v2 != ""){
499             if ($v1 > $v2){
500               $message[]= msgPool::invalid(_("VSync range"));
501             }
502           }
503         }
505         /* Check hsync for correct usage */
506         $val= preg_replace ("/\s/", "", $this->gotoXHsync);
507         if (!preg_match ("/^\d+(\.\d+)?([-]\d+(\.\d+)?)?$/", $val) && $this->acl_is_writeable("gotoXHsync")){
508           $message[]= msgPool::invalid(_("HSync range"));
509         } elseif ($this->acl_is_writeable("gotoXHsync")){
510           list($v1,$v2)= preg_split ("/[-+]/", $val);
511           if ($v2 != ""){
512             if ($v1 > $v2){
513               $message[]= msgPool::invalid(_("HSync range"));
514             }
515           }
516         }
517       }
518     }
519   }
522   /* Check supplied data */
523   function check()
524   {
525     /* Call common method to give check the hook */
526     $message= plugin::check();
527     $message = array_merge($message,$this->gotoLpdEnable_dialog->check());
529     if($this->gotoXMethod != "default"){
530       $xdmcp_types =  $this->config->data['SERVERS']['TERMINAL_SESSION_TYPES'];
531       $available_servers = array();
532       foreach($xdmcp_types as $servername =>$supported_types){
533         if(in_array(strtoupper($this->gotoXMethod),$supported_types)){
534           $available_servers[]  = $servername;
535         }
536       }
537       foreach($this->selected_xdmcp_servers as $server){
538         if(!in_array($server,$available_servers)){
539           $message[] = _("Remote desktop settings contains servers that do not support the selected connection method.");
540           break;
541         }
542       }
543     }
545     return ($message);
546   }
549   /* Save to LDAP */
550   function save()
551   {
552     /* remove objectclass GOhard if this is an ogroup tab */
553     if(isset($this->parent->by_object['ogroup'])){
554             $this->objectclasses = array();
555     }
557     plugin::save();
559     /* Strip out 'default' values */
560     foreach(array("gotoXMethod","gotoXDriver", "gotoXResolution", "gotoXColordepth",
561           "gotoLpdServer", "gotoXKbModel", "gotoXKbLayout",
562           "gotoXKbVariant", "gotoXMouseType", "gotoXMouseport") as $val){
564       if ($this->attrs[$val] == "default"){
565         $this->attrs[$val]= array();
566       }
567     }
569     if($this->gotoXMethod == "default"){
570       $this->attrs['gotoXdmcpServer'] = array();
571       $this->attrs['gotoXMethod'] = array();
572     }else{
573       $this->attrs['gotoXdmcpServer'] = array_values($this->selected_xdmcp_servers);
574     }
577     if($this->AutoSync){
578       $this->attrs['gotoXHsync'] = "30+55";
579       $this->attrs['gotoXVsync'] = "50+70";
580     }
582     /* Write back to ldap */
583     $ldap= $this->config->get_ldap_link();
584     $ldap->cd($this->dn);
585     $this->cleanup();
586     $ldap->modify ($this->attrs); 
587     new log("modify","terminal/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error());
589     if (!$ldap->success()){
590       msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, LDAP_MOD, get_class()));
591     }
592     $this->handle_post_events("modify");
594     /* Send goto reload event to gosaSupportDaemon */
595     if(count($this->attrs)){
596             $this->send_goto_reload();
597     }
598   }
601   function getListOfXDrivers()
602   {
603     $drivers = array("default" => "["._("unknown")."]");
605     /* Generate a list of xdrivers from CONFIG_DIR/xdrivers */
606     if (file_exists(CONFIG_DIR.'/xdrivers')){
607       $xdrivers = file (CONFIG_DIR.'/xdrivers');
608       foreach ($xdrivers as $line){
609         if (!preg_match ("/^#/", $line)){
610           $drivers[]= trim($line);
611         }
612       }
613     } else {
614       foreach( array(
615           "ati", "atimisc", "chips", "cirrus", "cyrix", "fbdev", "fglrx",
616           "i128", "i740", "i810", "intel", "imstt", "mga", "neomagic", "newport", "nsc",  "nv", "nvidia",
617           "r128", "radeon", "rendition", "s3", "s3virge", "savage", "siliconmotion",
618           "sis", "tdfx", "tga", "trident", "tseng", "vesa", "vga", "vmware") as $driver){
619         $drivers[] = $driver;
620       }
621     }
622     return($drivers);
623   }
625   function send_goto_reload()
626   {
627     if(count($this->attrs) && class_available("DaemonEvent")){
628       $events = DaemonEvent::get_event_types(SYSTEM_EVENT | HIDDEN_EVENT);
629       $o_queue = new gosaSupportDaemon();
630       if(isset($events['TRIGGERED']['DaemonEvent_goto_reload'])){
631         $evt = $events['TRIGGERED']['DaemonEvent_goto_reload'];
632         $macs = array();
634         /* Get list of macAddresses
635          */
636         if(isset($this->parent->by_object['ogroup'])){
638           /* If we are an object group, add all member macs
639            */
640           $p = $this->parent->by_object['ogroup'];
641           foreach($p->memberList as $dn => $obj){
642             if(preg_match("/".preg_quote(get_ou("systemIncomingRDN"), '/')."/",$dn)) continue;
643             if(isset($p->objcache[$dn]['macAddress']) && !empty($p->objcache[$dn]['macAddress'])){
644               $macs[] = $p->objcache[$dn]['macAddress'];
645             }
646           }
647         }elseif(isset($this->parent->by_object['workgeneric']->netConfigDNS->macAddress)){
649           /* We are a workstation. Add current mac.
650            */
651           $mac = $this->parent->by_object['workgeneric']->netConfigDNS->macAddress;
652           if(!empty($mac) && !preg_match("/".preg_quote(get_ou("systemIncomingRDN"), '/')."/",$this->orig_dn)){
653             $macs[] = $mac;
654           }
655         }
657         /* Trigger event for all member objects
658          */
659         if(count($macs)){
660           $tmp = new $evt['CLASS_NAME']($this->config);
661           $tmp->set_type(TRIGGERED_EVENT);
662           $target = $o_queue->get_host().":".$o_queue->get_port();
663           $tmp->add_targets(array($target));
664           $tmp->set_macs($macs);
665           if(!$o_queue->append($tmp,TRUE)){
666             msg_dialog::display(_("Service infrastructure"),msgPool::siError($o_queue->get_error()),ERROR_DIALOG);
667           }
668         }
669       }
670     }
671   }
674   /* Return plugin informations for acl handling */
675   static function plInfo()
676   {
677     return (array(
678           "plShortName"   => _("Service"),
679           "plDescription" => _("Terminal service"),
680           "plSelfModify"  => FALSE,
681           "plDepends"     => array(),
682           "plPriority"    => 3,
683           "plSection"     => array("administration"),
684           "plCategory"    => array("terminal"),
686           "plProvidedAcls"=> array(
687           
688             "gotoXMonitor"            => _("Monitor"),
689             "gotoXMethod"             => _("Method"),
690             "gotoXdmcpServer"         => _("Remote desktop"),
691             "gotoXDriver"             => _("Gfx driver"),
692             "gotoXResolution"         => _("Gfx resolution"),
693             "gotoXColordepth"         => _("Gfx color depth"),
694             "gotoXHsync"              => _("HSync"),
695             "gotoXVsync"              => _("VSync"),
696             "AutoSync"                => _("Auto-Sync"),
697             "gotoScannerEnable"       => _("Scanner enabled"),
698             "gotoLpdEnable"           => _("Printer enabled"),
699             "gotoXKbModel"            => _("Keyboard model"),
700             "gotoXKbLayout"           => _("Keyboard layout"),
701             "gotoXKbVariant"          => _("Keyboard variant"),
702             "gotoXMouseType"          => _("Mouse type"),
703             "gotoXMouseport"          => _("Mouse port"),
704             "gotoLpdEnable"         => _("Printer enabled"),
705             "goFonHardware"           => _("Telephone hardware"))
706           ));
707   }
710 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
711 ?>