Code

Updated filter
authorhickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8>
Thu, 28 Jan 2010 15:18:55 +0000 (15:18 +0000)
committerhickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8>
Thu, 28 Jan 2010 15:18:55 +0000 (15:18 +0000)
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@15425 594d385d-05f5-0310-b6e9-bd551577e9d8

gosa-plugins/fai/admin/fai/classSelect/class_classSelect.inc
gosa-plugins/fai/admin/fai/classSelect/class_filterFAIClass.inc [new file with mode: 0644]
gosa-plugins/fai/admin/fai/classSelect/selectClass-filter.tpl
gosa-plugins/fai/admin/fai/classSelect/selectClass-filter.xml
gosa-plugins/fai/admin/fai/classSelect/selectClass-list.xml
gosa-plugins/fai/admin/fai/class_faiProfile.inc

index c5e8612d06bfa943bd0ef21a47b485c0aa13d70a..99b40f4e5f46ddabfc903628ef9631fd826c424a 100644 (file)
@@ -42,8 +42,30 @@ class classSelect extends management
 
     // Build headpage
     $headpage = new listing(get_template_path("selectClass-list.xml", true, dirname(__FILE__)));
+    $headpage->registerElementFilter("filterProperties", "classSelect::filterProperties");
     $headpage->setFilter($filter);
-    parent::__construct($config, $ui, "object", $headpage);
+    parent::__construct($config, $ui, "FAI class", $headpage);
+  }
+
+  static function filterProperties($row, $classes)
+  {
+    /* Create different picture for each object type */
+    $objTypes['FAIhook']            = "<img src='plugins/fai/images/fai_hook.png' title='"._("Hook bundle")."' alt=''>&nbsp;";
+    $objTypes['FAItemplate']        = "<img src='plugins/fai/images/fai_template.png' title='"._("Template bundle")."' alt=''>&nbsp;";
+    $objTypes['FAIscript']          = "<img src='plugins/fai/images/fai_script.png' title='"._("Script bundle")."' alt=''>&nbsp;";
+    $objTypes['FAIvariable']        = "<img src='plugins/fai/images/fai_variable.png' title='"._("Variable bundle")."' alt=''>&nbsp;";
+    $objTypes['FAIpackageList']     = "<img src='plugins/fai/images/fai_packages.png' title='"._("Package bundle")."' alt=''>&nbsp;";
+    $objTypes['FAIpartitionTable']  = "<img src='plugins/fai/images/fai_partitionTable.png' title='"._("Partition table")."' alt=''>&nbsp;";
+
+    $str = "";
+    foreach($objTypes as $class => $img){
+      if(in_array($class, $classes)){
+        $str .= $img;
+      }else{
+        $str .= "<img src='images/empty.png'>&nbsp;";
+      }
+    }
+    return($str);
   }
 
   function save()
diff --git a/gosa-plugins/fai/admin/fai/classSelect/class_filterFAIClass.inc b/gosa-plugins/fai/admin/fai/classSelect/class_filterFAIClass.inc
new file mode 100644 (file)
index 0000000..66c88a4
--- /dev/null
@@ -0,0 +1,72 @@
+<?php
+
+class filterFAIClass {
+
+  static function query($base, $scope, $filter, $attributes, $category, $objectStorage= "")
+  {
+    global $config;
+
+    $base = session::get('filterFAIClass_base');
+    $objectFilter = "(|(objectClass=FAIscript)(objectClass=FAItemplate)(objectClass=FAIhook)".
+      "(objectClass=FAIvariable)(objectClass=FAIpartitionTable)(objectClass=FAIpackageList))";
+
+    $FAI_objects = FAI::get_all_objects_for_given_base($base,$objectFilter,true);
+
+    /* Create array with categories to be able to sort different types of objects */
+    $categories = array("FAIscript"         => "faiScript",
+        "FAItemplate"       => "faiTemplate",
+        "FAIhook"           => "faiHook",
+        "FAIvariable"       => "faiVariable",
+        "FAIpartitionTable" => "faiPartitionTable",
+        "FAIpackageList"    => "faiPackage");
+
+    /* Read out all objects from fai tree */
+    $ldap= $config->get_ldap_link();
+    $ldap->cd($base);
+    $ui = get_userinfo();
+    $sort=array();
+    $FAIAllclasses = array();
+
+    foreach($FAI_objects as $obj){
+
+      $ldap->cat($obj['dn']);
+      $attrs = $ldap->fetch();
+
+      /* Only use objects which have cn set */
+      if(isset($attrs['cn'][0]) && preg_match("/".preg_quote($filter,'/')."/i", $attrs['cn'][0])){
+        foreach($categories as $cat => $acl){
+          if(in_array($cat,$attrs['objectClass'])){
+            $acl =  $ui->get_permissions($attrs['dn'],"fai/".$acl);
+            if(!isset($FAIAllclasses[$attrs['cn'][0]])){
+              $FAIAllclasses[$attrs['cn'][0]] = $attrs ;
+            }else{
+              $FAIAllclasses[$attrs['cn'][0]]['objectClass'] = 
+                array_merge($attrs['objectClass'],$FAIAllclasses[$attrs['cn'][0]]['objectClass']);
+            }
+          }
+        }
+      }
+    }
+    return(filterFAIClass::filterByBlacklist(array_values($FAIAllclasses)));
+  }
+
+  static function filterByBlacklist($entries)
+  {
+    if(session::is_set('filterBlacklist')){
+      $blist = session::get('filterBlacklist');
+      foreach($blist as $attr_name => $attr_values){
+        foreach($attr_values as $match){
+          foreach($entries as $id => $entry){
+            if(isset($entry[$attr_name])){
+              $test = $entry[$attr_name];
+              if(!is_array($test)) $test = array($test);
+              if(in_array($match, $test)) unset($entries[$id]);
+            }
+          }
+        }
+      }
+    }
+    return(array_values($entries));
+  }
+}
+?>
index e1016c059d1e26e8c6e1919d0540305f0a01a45a..3d4595cf7b97b0367bb7d1a134235a150e898657 100644 (file)
@@ -6,14 +6,6 @@
 
 <div class="contentboxb">
 
-<div style="border-top:1px solid #AAAAAA"></div>
-
-{$USER}&nbsp;<LABEL for='SAMBA'>{t}Show users{/t}</LABEL><br>
-{$GROUP}&nbsp;<LABEL for='POSIX'>{t}Show groups{/t}</LABEL><br>
-
- <div style="border-top:1px solid #AAAAAA"></div>
- {$SCOPE}
-
  <table summary="" style="width:100%;border-top:1px solid #B0B0B0;">
   <tr>
    <td>
index 5dc11eead4259bb45857ea8bb2dc34dd9b94e0d1..a6b02bebeaf6db1c89f0ee6f7c67cb9aa6eb505f 100644 (file)
@@ -9,8 +9,8 @@
 
   <search>
     <query>
-      <backend>LDAPBlacklist</backend>
-      <filter>(&amp;(|$USER $GROUP ) $NAME)</filter>
+      <backend>FAIClass</backend>
+      <filter>$NAME</filter>
       <attribute>dn</attribute>
       <attribute>objectClass</attribute>
       <attribute>cn</attribute>
     <maxlength>60</maxlength>
     <default></default>
     <unset></unset>
-    <set>(|(cn=*$*)(sn=*$*)(givenName=*$*))</set>
+    <set>*$</set>
     <alphabet>true</alphabet>
     <autocomplete>
-      <backend>LDAPBlacklist</backend>
-      <filter>(&amp;(objectClass=gosaAccount)(|(cn=*$NAME*)(sn=*$NAME*)(givenName=*$NAME*)))</filter>
+      <backend>FAIClass</backend>
+      <filter>$NAME</filter>
       <attribute>cn</attribute>
       <frequency>0.5</frequency>
       <characters>3</characters>
index cf197a970215b139cf19e2928c72589bea05570c..9eb7ef681dbda5b97c6180807b1501e857ae5c2a 100644 (file)
@@ -5,45 +5,24 @@
     <departmentBrowser>false</departmentBrowser>
     <departmentRootVisible>false</departmentRootVisible>
     <baseMode>false</baseMode>
-    <multiSelect>false</multiSelect>
+    <multiSelect>true</multiSelect>
     <template>../plugins/admin/fai/classSelect/selectClass-list.tpl</template>
     <module>users</module>
     <label>Please select the desired entries</label>
     <defaultSortColumn>1</defaultSortColumn>
 
     <objectType>
-      <label>User</label>
-      <objectClass>gosaAccount</objectClass>
-      <category>users</category>
-      <class>user</class>
-      <image>plugins/users/images/select_user.png</image>
-    </objectType>
-
-    <objectType>
-      <label>Group</label>
-      <objectClass>posixGroup</objectClass>
-      <category>groups</category>
-      <class>group</class>
-      <image>plugins/groups/images/groups.png</image>
+      <label>FAI</label>
+      <objectClass>FAIclass</objectClass>
+      <category>fai</category>
+      <class>fai</class>
+      <image>plugins/fai/images/script.png</image>
     </objectType>
 
   </definition>
 
   <table>
-    <layout>|20px;c|220px||</layout>
-
-    <department>
-      <value>%{filter:objectType(dn,objectClass)}</value>
-    </department>
-
-    <department>
-      <value>%{filter:departmentLink(row,dn,description)}</value>
-      <span>1</span>
-    </department>
-
-    <column>
-      <value>%{filter:objectType(dn,objectClass)}</value>
-    </column>
+    <layout>|220px||</layout>
 
     <column>
       <label>Name</label>
     </column>
 
     <column>
-      <label>Description</label>
-      <sortAttribute>description</sortAttribute>
-      <sortType>string</sortType>
-      <value>%{description}</value>
-      <export>true</export>
+      <label>Properties</label>
+      <value>%{filter:filterProperties(row,objectClass)}</value>
     </column>
 
   </table>
   </actionmenu>
 
   <actiontriggers snapshot="false" copypaste="false">
-    <action>
-      <name>edit</name>
-      <type>entry</type>
-      <objectclass>gosaAccount</objectclass>
-      <image>images/lists/edit.png</image>
-      <label>Add</label>
-    </action>
   </actiontriggers>
 </list>
index 67d41d187932ce6c4ea9213c1bf83ee73c06d726..db587ac06f055f69019b88dab17e8760664771e2 100644 (file)
@@ -257,7 +257,7 @@ class faiProfile extends plugin
       }
 
       /* Save Dialog */
-      if(isset($_POST['classSelect_save'])){
+      if(isset($_POST['classSelect_save']) && $this->classSelect instanceOf classSelect){
         $list = $this->classSelect->save();
         foreach($list as $entry){
           $class = $entry['cn'][0];
@@ -275,6 +275,8 @@ class faiProfile extends plugin
     }
 
     if($this->classSelect instanceOf classSelect){
+      session::set('filterFAIClass_base',$this->parent->parent->fai_release);
+      session::set('filterBlacklist', array('cn' => array_values($this->FAIclasses)));
       return($this->classSelect->execute());
     }