Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Use numSubOrdindates inconjuction with VLV to count total

  • Loading branch information...
commit 6af7e0d63dc42901b55ca9530959d9ddaffa56d6 1 parent 24201dc
@thomascube thomascube authored
Showing with 12 additions and 3 deletions.
  1. +1 −0  config/main.inc.php.dist
  2. +11 −3 program/include/rcube_ldap.php
View
1  config/main.inc.php.dist
@@ -536,6 +536,7 @@ $rcmail_config['ldap_public']['Verisign'] = array(
'filter' => '(objectClass=inetOrgPerson)', // used for basic listing (if not empty) and will be &'d with search queries. example: status=act
'fuzzy_search' => true, // server allows wildcard search
'vlv' => false, // Enable Virtual List View to mor efficiently fetch paginated data (if server supports it)
+ 'numsub_filter' => '(objectClass=organizationalUnit)', // with VLV, we also use numSubOrdinates to query the total number of records. Set this filter to get all numSubOrdinates attributes for counting
'sizelimit' => '0', // Enables you to limit the count of entries fetched. Setting this to 0 means no limit.
'timelimit' => '0', // Sets the number of seconds how long is spend on the search. Setting this to 0 means no limit.
View
14 program/include/rcube_ldap.php
@@ -884,10 +884,18 @@ private function _exec_search($count = false)
$this->_debug("C: Search [".$filter."]");
- // when using VLV, we need to issue listing command first in order to get the full count
+ // when using VLV, we get the total count by...
if (!$count && $function != 'ldap_read' && $this->prop['vlv']) {
- if ($this->_exec_search(true))
- $this->vlv_count = ldap_count_entries($this->conn, $this->ldap_result);
+ // ...either reading numSubOrdinates attribute
+ if ($this->prop['numsub_filter'] && ($result_count = @$function($this->conn, $this->base_dn, $this->prop['numsub_filter'], array('numSubOrdinates'), 0, 0, 0))) {
+ $counts = ldap_get_entries($this->conn, $result_count);
+ for ($this->vlv_count = $j = 0; $j < $counts['count']; $j++)
+ $this->vlv_count += $counts[$j]['numsubordinates'][0];
+ $this->_debug("D: total numsubordinates = " . $this->vlv_count);
+ }
+ else // ...or by fetching all records dn and count them
+ $this->vlv_count = $this->_exec_search(true);
+
$this->vlv_active = $this->_vlv_set_controls();
}
Please sign in to comment.
Something went wrong with that request. Please try again.