Code

2659b3f6f2fbf1a63574aa009cc947be8973a18c
[gosa.git] / gosa-plugins / fai / admin / fai / classSelect / class_filterFAIClass.inc
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       }
42     
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 ?>