1 <?php
3 class filterFAIClass {
5 static function query($base, $scope, $filter, $attributes, $category, $objectStorage= "")
6 {
7 global $config;
9 $base = session::get('filterFAIClass_base');
10 $objectFilter = "(|(objectClass=FAIscript)(objectClass=FAItemplate)(objectClass=FAIhook)".
11 "(objectClass=FAIvariable)(objectClass=FAIpartitionTable)(objectClass=FAIpackageList))";
13 $FAI_objects = FAI::get_all_objects_for_given_base($base,$objectFilter,true);
15 /* Create array with categories to be able to sort different types of objects */
16 $categories = array("FAIscript" => "faiScript",
17 "FAItemplate" => "faiTemplate",
18 "FAIhook" => "faiHook",
19 "FAIvariable" => "faiVariable",
20 "FAIpartitionTable" => "faiPartitionTable",
21 "FAIpackageList" => "faiPackage");
23 /* Read out all objects from fai tree */
24 $ldap= $config->get_ldap_link();
25 $ldap->cd($base);
26 $ui = get_userinfo();
27 $sort=array();
28 $FAIAllclasses = array();
30 foreach($FAI_objects as $obj){
32 $ldap->cat($obj['dn']);
33 $attrs = $ldap->fetch();
35 /* Only use objects which have cn set */
36 $name = preg_replace("/[\*\.]/","",$filter);
37 if(empty($name)){
38 $regex = '.*';
39 }else{
40 $regex = preg_quote($name,'/');
41 }
43 if(isset($attrs['cn'][0]) && preg_match("/".$regex."/i", $attrs['cn'][0])){
44 foreach($categories as $cat => $acl){
45 if(in_array($cat,$attrs['objectClass'])){
46 $acl = $ui->get_permissions($attrs['dn'],"fai/".$acl);
47 if(!isset($FAIAllclasses[$attrs['cn'][0]])){
48 $FAIAllclasses[$attrs['cn'][0]] = $attrs ;
49 }else{
50 $FAIAllclasses[$attrs['cn'][0]]['objectClass'] =
51 array_merge($attrs['objectClass'],$FAIAllclasses[$attrs['cn'][0]]['objectClass']);
52 }
53 }
54 }
55 }
56 }
57 return(filterFAIClass::filterByBlacklist(array_values($FAIAllclasses)));
58 }
60 static function filterByBlacklist($entries)
61 {
62 if(session::is_set('filterBlacklist')){
63 $blist = session::get('filterBlacklist');
64 foreach($blist as $attr_name => $attr_values){
65 foreach($attr_values as $match){
66 foreach($entries as $id => $entry){
67 if(isset($entry[$attr_name])){
68 $test = $entry[$attr_name];
69 if(!is_array($test)) $test = array($test);
70 if(in_array($match, $test)) unset($entries[$id]);
71 }
72 }
73 }
74 }
75 }
76 return(array_values($entries));
77 }
78 }
79 ?>