Code

Backport from trunk
[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();
8         global $config;
10         // Check whether the arp handling active or not
11         $arp_handling_active = $config->pluginEnabled("ArpNewDevice");
13         $entries = filterLDAP::query($base, $scope, $filter, $attributes, $category, $objectStorage);
16         foreach($entries as $key => $entry){
17             if(class_available("ArpNewDevice") &&
18                 preg_match("/".preg_quote(get_ou("ArpNewDevice", "systemIncomingRDN"),'/')."/i", $entry['dn'])){
20                 // Detect incoming types
21                 if(in_array_strict('gotoWorkstation', $entry['objectClass'])){
22                     $entries[$key]['objectClass'][] = 'FAKE_OC_NewWorkstation';
23                     $entries[$key]['cn'][0].= " <i>("._("New workstation").")</i>";
24                 }elseif(in_array_strict('gotoTerminal', $entry['objectClass'])){
25                     $entries[$key]['objectClass'][] = 'FAKE_OC_NewTerminal';
26                     $entries[$key]['cn'][0].= " <i>("._("New terminal").")</i>";
27                 }elseif($arp_handling_active && 
28                         in_array_strict('GOhard', $entry['objectClass']) && 
29                         !isset($entry['gotoMode'][0])){ 
30                     $entries[$key]['objectClass'][] = 'FAKE_OC_ArpNewDevice';
31                     $entries[$key]['cn'][0].= " <i>("._("New unknown device").")</i>";
32                 }elseif(in_array_strict('GOhard', $entry['objectClass'])){
33                     $entries[$key]['objectClass'][] = 'FAKE_OC_NewDevice';
34                     $entries[$key]['cn'][0].= " <i>("._("New device").")</i>";
35                 }
37                 // Detect SAMBA machines
38             }elseif(in_array_strict('sambaSamAccount', $entry['objectClass']) && preg_match("/\$$/", $entry['cn'][0])){
39                 $entries[$key]['objectClass'][] = 'FAKE_OC_winstation';
41                 // Detect Workstation & templates
42             }elseif(in_array_strict('gotoWorkstation', $entry['objectClass'])){
43                 $pwd_acl = $ui->get_permissions($entry['dn'],'workstation/workgeneric','userPassword');
44                 if(preg_match("/w/",$pwd_acl)){
45                     $entries[$key]['objectClass'][] = 'FAKE_OC_PWD_changeAble';
46                 }
48                 // Detect Terminal & templates
49             }elseif(in_array_strict('gotoTerminal', $entry['objectClass'])){
50                 $pwd_acl = $ui->get_permissions($entry['dn'],'terminal/termgeneric','userPassword');
51                 if(preg_match("/w/",$pwd_acl)){
52                     $entries[$key]['objectClass'][] = 'FAKE_OC_PWD_changeAble';
53                 }
55                 // Detect Server & templates
56             }elseif(in_array_strict('goServer', $entry['objectClass'])){
57                 $pwd_acl = $ui->get_permissions($entry['dn'],'server/servgeneric','userPassword');
58                 if(preg_match("/w/",$pwd_acl)){
59                     $entries[$key]['objectClass'][] = 'FAKE_OC_PWD_changeAble';
60                 }
62                 // Detect ieee802Device
63             }elseif(in_array_strict('ieee802Device', $entry['objectClass'])){
64                 $pwd_acl = $ui->get_permissions($entry['dn'],'component/componentGeneric','userPassword');
65                 if(preg_match("/w/",$pwd_acl)){
66                     $entries[$key]['objectClass'][] = 'FAKE_OC_PWD_changeAble';
67                 }
68             }
70             // Detect object states
71             $state = 'none';
72             foreach(array('gotoWorkstation','gotoTerminal','goServer') as $type){
73                 if(in_array_strict($type, $entry['objectClass'])){
75                     if(isset($entry['FAIstate'][0])){
76                         switch (preg_replace('/:.*$/', '', $entry['FAIstate'][0])) {
77                             case 'error':
78                                 $state= 'error';
79                                 break;
80                             case 'installing':
81                             case 'install':
82                             case 'sysinfo':
83                             case 'softupdate':
84                             case 'scheduledupdate':
85                                 $state= 'busy';
86                                 break;
87                         }
88                     }elseif(isset($entry['gotoMode'][0]) && preg_match("/locked/i", $entry['gotoMode'][0])){
89                         $state = "locked";
90                     }
91                 }
92             }
94             if(isset($entries[$key])){    
95                 $entries[$key][$entries[$key]['count']]= 'state';
96                 $entries[$key]['state']= $state;
97                 $entries[$key]['count'] ++;
98             }
99         }
100         return($entries);
101     }
104 ?>