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 }
108 }
110 ?>