Code

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