Code

Updated systemManagement
[gosa.git] / gosa-plugins / systems / admin / systems / class_filterSYSTEMS.inc
1 <?php
3 class filterSYSTEMS {
5   static function query($base, $scope, $filter, $attributes, $category, $objectStorage= "")
6   {
7     $entries = filterLDAP::query($base, $scope, $filter, $attributes, $category, $objectStorage);
9     foreach($entries as $key => $entry){
10       if(preg_match("/".preg_quote(get_ou('systemIncomingRDN'),'/')."/i", $entry['dn'])){
12         // Detect incoming types
13         if(in_array('gotoWorkstation', $entry['objectClass'])){
14           $entries[$key]['objectClass'][] = 'FAKE_OC_NewWorkstation';
15           $entries[$key]['cn'][0].= " <i>("._("New workstation").")</i>";
16         }elseif(in_array('gotoTerminal', $entry['objectClass'])){
17           $entries[$key]['objectClass'][] = 'FAKE_OC_NewTerminal';
18           $entries[$key]['cn'][0].= " <i>("._("New terminal").")</i>";
19         }elseif(in_array('GOhard', $entry['objectClass']) && !isset($entry['gotoMode'][0])){ 
20           $entries[$key]['objectClass'][] = 'FAKE_OC_NewUnknownDevice';
21           $entries[$key]['cn'][0].= " <i>("._("New unknown device").")</i>";
22         }elseif(in_array('GOhard', $entry['objectClass'])){
23           $entries[$key]['objectClass'][] = 'FAKE_OC_NewDevice';
24           $entries[$key]['cn'][0].= " <i>("._("New device").")</i>";
25         }
27       // Detect SAMBA machines
28       }elseif(in_array('sambaSamAccount', $entry['objectClass']) && preg_match("/\$$/", $entry['cn'][0])){
29         $entries[$key]['objectClass'][] = 'FAKE_OC_winstation';
31       // Detect Workstation templates
32       }elseif(in_array('gotoWorkstation', $entry['objectClass'])){
33         if(!isset($entry['macAddress'][0]) || $entry['macAddress'][0] == "-"){
34           $entries[$key]['objectClass'][] = 'FAKE_OC_WorkstationTemplate';
35         }
37       // Detect Terminal templates
38       }elseif(in_array('gotoTerminal', $entry['objectClass'])){
39         if(!isset($entry['macAddress'][0]) || $entry['macAddress'][0] == "-"){
40           $entries[$key]['objectClass'][] = 'FAKE_OC_TerminalTemplate';
41         }
43       // Detect Server templates
44       }elseif(in_array('goServer', $entry['objectClass'])){
45         if(!isset($entry['macAddress'][0]) || $entry['macAddress'][0] == "-"){
46           $entries[$key]['objectClass'][] = 'FAKE_OC_ServerTemplate';
47         }
48       }
50       // Detect object states
51       foreach(array('gotoWorkstation','gotoTerminal','goServer') as $type){
52         if(in_array($type, $entry['objectClass'])){
54           if(isset($entry['gotoMode'][0]) && preg_match("/locked/i", $entry['gotoMode'][0])){
55             $entries[$key]['objectClass'][] = $type."__IS_LOCKED";
56           }elseif(isset($entry['FAIstate'][0])){
57             switch (preg_replace('/:.*$/', '', $entry['FAIstate'][0])) {
58               case 'error':
59                 $state= '__IS_ERROR';
60                 break;
61               case 'installing':
62               case 'install':
63               case 'sysinfo':
64               case 'softupdate':
65               case 'scheduledupdate':
66                 $state= '__IS_BUSY';
67                 break;
68               default: $state ="";
69             }
70             if(!empty($state)) $entries[$key]['objectClass'][] = $type.$state;
71           }
72         }
73       }
74     }
76     // Append opsi stuff ...
77     global $config;
78     $ui = get_userinfo();
79     if(preg_match("/FAIstate=__NETBOOT__/", $filter) && 
80         class_available('opsi') &&
81         $base == $config->current['BASE']){
83       // Check ACLs and opsi handle
84       $opsi_acl = $ui->get_permissions($base,"opsi/opsiProperties");
85       $opsi = new opsi($config);
86       $objects = array();
87       if($opsi instanceof opsi && $opsi->enabled() && preg_match("/r/",$opsi_acl)){
89         // Get list of opsi hosts 
90         $opsi_clients = $opsi->get_hosts_for_system_management();
91         if($opsi->is_error()){
92           msg_dialog::display(_("Error"),msgPool::siError($opsi->get_error()),ERROR_DIALOG);
93         }else{
94           foreach($opsi_clients as $entry){
95             $entry['objectClass'] = array("FAKE_OC_OpsiHost");
96             $item = array('count' => count($entry));
97             foreach($entry as  $name => $value){
98               $item[] = $name;
99               $item[$name] = $value;
100             }
101             $entries[] = $item;
102           }
103         }
104       }
105     }
106     return($entries);
107   }
110 ?>