Code

db3ea8c5e0e879016a46e222d8c781f249d9f30f
[gosa.git] / gosa-plugins / fai / admin / fai / classSelect / class_filterFAIClass.inc
1 <?php
3 class filterFAIClass {
5   static function query($parent,$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       if(isset($attrs['cn'][0]) && preg_match("/".preg_quote($filter,'/')."/i", $attrs['cn'][0])){
37         foreach($categories as $cat => $acl){
38           if(in_array($cat,$attrs['objectClass'])){
39             $acl =  $ui->get_permissions($attrs['dn'],"fai/".$acl);
40             if(!isset($FAIAllclasses[$attrs['cn'][0]])){
41               $FAIAllclasses[$attrs['cn'][0]] = $attrs ;
42             }else{
43               $FAIAllclasses[$attrs['cn'][0]]['objectClass'] = 
44                 array_merge($attrs['objectClass'],$FAIAllclasses[$attrs['cn'][0]]['objectClass']);
45             }
46           }
47         }
48       }
49     }
50     return(filterFAIClass::filterByBlacklist(array_values($FAIAllclasses)));
51   }
53   static function filterByBlacklist($entries)
54   {
55     if(session::is_set('filterBlacklist')){
56       $blist = session::get('filterBlacklist');
57       foreach($blist as $attr_name => $attr_values){
58         foreach($attr_values as $match){
59           foreach($entries as $id => $entry){
60             if(isset($entry[$attr_name])){
61               $test = $entry[$attr_name];
62               if(!is_array($test)) $test = array($test);
63               if(in_array($match, $test)) unset($entries[$id]);
64             }
65           }
66         }
67       }
68     }
69     return(array_values($entries));
70   }
71 }
72 ?>