Code

Added missing check
[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     $ui = get_userinfo();
9     // Check whether the arp handling active or not
10     $arp_handling_active = ($this->config->search("ArpNewDevice","CLASS",array('tabs')) != "")
12     $entries = filterLDAP::query($base, $scope, $filter, $attributes, $category, $objectStorage);
13     foreach($entries as $key => $entry){
14       if(preg_match("/".preg_quote(get_ou('systemIncomingRDN'),'/')."/i", $entry['dn'])){
16         // Detect incoming types
17         if(in_array('gotoWorkstation', $entry['objectClass'])){
18           $entries[$key]['objectClass'][] = 'FAKE_OC_NewWorkstation';
19           $entries[$key]['cn'][0].= " <i>("._("New workstation").")</i>";
20         }elseif(in_array('gotoTerminal', $entry['objectClass'])){
21           $entries[$key]['objectClass'][] = 'FAKE_OC_NewTerminal';
22           $entries[$key]['cn'][0].= " <i>("._("New terminal").")</i>";
23         }elseif($arp_handling_active && 
24             in_array('GOhard', $entry['objectClass']) && 
25             !isset($entry['gotoMode'][0])){ 
26           $entries[$key]['objectClass'][] = 'FAKE_OC_ArpNewDevice';
27           $entries[$key]['cn'][0].= " <i>("._("New unknown device").")</i>";
28         }elseif(in_array('GOhard', $entry['objectClass'])){
29           $entries[$key]['objectClass'][] = 'FAKE_OC_NewDevice';
30           $entries[$key]['cn'][0].= " <i>("._("New device").")</i>";
31         }
33       // Detect SAMBA machines
34       }elseif(in_array('sambaSamAccount', $entry['objectClass']) && preg_match("/\$$/", $entry['cn'][0])){
35         $entries[$key]['objectClass'][] = 'FAKE_OC_winstation';
37       // Detect Workstation & templates
38       }elseif(in_array('gotoWorkstation', $entry['objectClass'])){
39         if(!isset($entry['macAddress'][0]) || $entry['macAddress'][0] == "-"){
40           $entries[$key]['objectClass'][] = 'FAKE_OC_WorkstationTemplate';
41         }
42         $pwd_acl = $ui->get_permissions($entry['dn'],'workstation/workgeneric','userPassword');
43         if(preg_match("/w/",$pwd_acl)){
44           $entries[$key]['objectClass'][] = 'FAKE_OC_PWD_changeAble';
45         }
47       // Detect Terminal & templates
48       }elseif(in_array('gotoTerminal', $entry['objectClass'])){
49         if(!isset($entry['macAddress'][0]) || $entry['macAddress'][0] == "-"){
50           $entries[$key]['objectClass'][] = 'FAKE_OC_TerminalTemplate';
51         }
52         $pwd_acl = $ui->get_permissions($entry['dn'],'terminal/termgeneric','userPassword');
53         if(preg_match("/w/",$pwd_acl)){
54           $entries[$key]['objectClass'][] = 'FAKE_OC_PWD_changeAble';
55         }
57       // Detect Server & templates
58       }elseif(in_array('goServer', $entry['objectClass'])){
59         if(!isset($entry['macAddress'][0]) || $entry['macAddress'][0] == "-"){
60           $entries[$key]['objectClass'][] = 'FAKE_OC_ServerTemplate';
61         }
62         $pwd_acl = $ui->get_permissions($entry['dn'],'server/servgeneric','userPassword');
63         if(preg_match("/w/",$pwd_acl)){
64           $entries[$key]['objectClass'][] = 'FAKE_OC_PWD_changeAble';
65         }
67       // Detect ieee802Device
68       }elseif(in_array('ieee802Device', $entry['objectClass'])){
69         $pwd_acl = $ui->get_permissions($entry['dn'],'component/componentGeneric','userPassword');
70         if(preg_match("/w/",$pwd_acl)){
71           $entries[$key]['objectClass'][] = 'FAKE_OC_PWD_changeAble';
72         }
73       }
75       // Detect object states
76       foreach(array('gotoWorkstation','gotoTerminal','goServer') as $type){
77         if(in_array($type, $entry['objectClass'])){
79           if(isset($entry['gotoMode'][0]) && preg_match("/locked/i", $entry['gotoMode'][0])){
80             $entries[$key]['objectClass'][] = $type."__IS_LOCKED";
81           }elseif(isset($entry['FAIstate'][0])){
82             switch (preg_replace('/:.*$/', '', $entry['FAIstate'][0])) {
83               case 'error':
84                 $state= '__IS_ERROR';
85                 break;
86               case 'installing':
87               case 'install':
88               case 'sysinfo':
89               case 'softupdate':
90               case 'scheduledupdate':
91                 $state= '__IS_BUSY';
92                 break;
93               default: $state ="";
94             }
95             if(!empty($state)) $entries[$key]['objectClass'][] = $type.$state;
96           }
97         }
98       }
99     }
101     // Append opsi stuff ...
102     global $config;
103     $ui = get_userinfo();
104     if(preg_match("/FAIstate=__NETBOOT__/", $filter) && 
105         class_available('opsi') &&
106         $base == $config->current['BASE']){
108       // Check ACLs and opsi handle
109       $opsi_acl = $ui->get_permissions($base,"opsi/opsiProperties");
110       $opsi = new opsi($config);
111       $objects = array();
112       if($opsi instanceof opsi && $opsi->enabled() && preg_match("/r/",$opsi_acl)){
114         // Get list of opsi hosts 
115         $opsi_clients = $opsi->get_hosts_for_system_management();
116         if($opsi->is_error()){
117           msg_dialog::display(_("Error"),msgPool::siError($opsi->get_error()),ERROR_DIALOG);
118         }else{
119           foreach($opsi_clients as $entry){
120             $entry['objectClass'] = array("FAKE_OC_OpsiHost");
121             $item = array('count' => count($entry));
122             foreach($entry as  $name => $value){
123               $item[] = $name;
124               $item[$name] = $value;
125             }
126             $entries[] = $item;
127           }
128         }
129       }
130     }
131     return($entries);
132   }
135 ?>