]> git.sur5r.net Git - contagged/commitdiff
Dynamically decide which attributes to fetch
authorAndreas Gohr <gohr@cosmocode.de>
Thu, 21 Jun 2007 13:12:57 +0000 (15:12 +0200)
committerAndreas Gohr <gohr@cosmocode.de>
Thu, 21 Jun 2007 13:12:57 +0000 (15:12 +0200)
List views previously fetched all entry attributes, even when only a few
of them where really shown. Now the template is examined first, then only
needed attributes are pulled from the server.

darcs-hash:20070621131257-6e07b-69f6b8bbf9d0a989620d6d54b85f5824a4a65f15.gz

inc/functions.php
index.php

index 52f101654d98554fbf3c55bc277ffd0f26e67dc8..b0c28f67d6fff20ee4c09f4c3a3579d87c0e3252 100644 (file)
@@ -482,4 +482,28 @@ function utf8_encode_array(&$array) {
   }
 }
 
+/**
+ * Returns all the fields used in the template
+ *
+ * Returned fields are already decoded to LDAP internals
+ */
+function get_fields_from_template($tpl){
+    global $smarty;
+    global $FIELDS;
+    $tpl  = $smarty->template_dir.'/'.$tpl;
+    $data = @file_get_contents($tpl);
+    $matches = array();
+    preg_match_all('/\$entry\.(\w+)/',$data,$matches);
+    $matches = array_unique((array) $matches[1]);
+    $return  = array();
+    foreach($matches as $f){
+        if($FIELDS[$f]){
+            $return[] = $FIELDS[$f];
+        }elseif($FIELDS["_$f"]){
+            $return[] = $FIELDS["_$f"];
+        }
+    }
+    return $return;
+}
+
 ?>
index 58e4a6f3968a2592893fe9bb6b918b4852515cfa..9eba4f069cf7d8f0e8f2e662ebb401e3fd1bcd31 100644 (file)
--- a/index.php
+++ b/index.php
@@ -3,24 +3,6 @@
   require_once('inc/init.php');
   ldap_login();
 
-  //prepare filter
-  $ldapfilter = _makeldapfilter();
-
-  //check public addressbook
-  $sr = ldap_list($LDAP_CON,$conf['publicbook'],$ldapfilter);
-  $result1 = ldap_get_binentries($LDAP_CON, $sr);
-  //check users private addressbook
-  if(!empty($_SESSION['ldapab']['binddn'])){
-    $sr = @ldap_list($LDAP_CON,
-                    $conf['privatebook'].','.$_SESSION['ldapab']['binddn'],
-                    $ldapfilter);
-    $result2 = ldap_get_binentries($LDAP_CON, $sr);
-  }else{
-    $result2 = '';
-  }
-
-  $result = array_merge((array)$result1,(array)$result2);
-
   // select entry template
   if(!empty($_REQUEST['export']) && $_REQUEST['export'] == 'csv'){
     $entrytpl = 'list_csv_entry.tpl';
     $entrytpl = 'list_entry.tpl';
   }
 
+  // check which fields are needed
+  $fields = get_fields_from_template($entrytpl);
+
+
+  //prepare filter
+  $ldapfilter = _makeldapfilter();
+
+  // fetch results
+  $result = ldap_queryabooks($ldapfilter,$fields);
+
   $list = '';
   if(count($result)==1 && $_REQUEST['search']){
     //only one result on a search -> display page