From 6855ce6f702d5fd5c055b6edf9af0085882a4c56 Mon Sep 17 00:00:00 2001 From: alecpl Date: Fri, 28 Aug 2009 13:00:51 +0000 Subject: [PATCH] - Fix LDAP addressbook browsing when only one directory is used (#1486022) --- CHANGELOG | 1 + program/include/rcube_ldap.php | 2 +- program/steps/addressbook/func.inc | 40 +++++++++++++++++++----------- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 4997ea997..5156c61bd 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ CHANGELOG RoundCube Webmail =========================== +- Fix LDAP addressbook browsing when only one directory is used (#1486022) - Fix endless loop on error response for APPEND command (#1486060) - Don't require date.timezone setting in installer (#1485989) - Fix date sorting problem with Courier IMAP server (#1486065) diff --git a/program/include/rcube_ldap.php b/program/include/rcube_ldap.php index 8e035c5d7..01cf68ab4 100644 --- a/program/include/rcube_ldap.php +++ b/program/include/rcube_ldap.php @@ -52,7 +52,7 @@ class rcube_ldap extends rcube_addressbook function __construct($p) { $this->prop = $p; - + foreach ($p as $prop => $value) if (preg_match('/^(.+)_field$/', $prop, $matches)) $this->fieldmap[$matches[1]] = $value; diff --git a/program/steps/addressbook/func.inc b/program/steps/addressbook/func.inc index e3d7606cb..1ea5ad1b6 100644 --- a/program/steps/addressbook/func.inc +++ b/program/steps/addressbook/func.inc @@ -19,8 +19,30 @@ */ +// add list of address sources to client env +$js_list = array(); +if (strtolower($CONFIG['address_book_type']) != 'ldap') { + // We are using the DB address book, add it. + $js_list['0'] = array('id' => 0, 'name' => rcube_label('personaladrbook'), 'readonly' => false); +} +if (is_array($CONFIG['ldap_public'])) { + foreach ($CONFIG['ldap_public'] as $id => $prop) + $js_list[$id] = array('id' => $id, 'name' => $prop['name'], 'readonly' => !$prop['writable']); +} + +$plugin = $RCMAIL->plugins->exec_hook('address_sources', array('sources' => $js_list)); +$js_list = $plugin['sources']; + +// select source +$source = get_input_value('_source', RCUBE_INPUT_GPC); + +// if source is not set use first directory +if (empty($source)) + $source = $js_list[key($js_list)]['id']; + + // instantiate a contacts object according to the given source -$CONTACTS = $RCMAIL->get_address_book(($source = get_input_value('_source', RCUBE_INPUT_GPC))); +$CONTACTS = $RCMAIL->get_address_book($source); $CONTACTS->set_pagesize($CONFIG['pagesize']); @@ -34,23 +56,11 @@ else if (!empty($_REQUEST['_search']) && isset($_SESSION['search'][$_REQUEST['_search']])) $CONTACTS->set_search_set($_SESSION['search'][$_REQUEST['_search']]); + // set data source env $OUTPUT->set_env('source', $source ? $source : '0'); $OUTPUT->set_env('readonly', $CONTACTS->readonly, false); - -// add list of address sources to client env -$js_list = array(); -if (strtolower($CONFIG['address_book_type']) != 'ldap') { - // We are using the DB address book, add it. - $js_list['0'] = array('id' => 0, 'name' => rcube_label('personaladrbook'), 'readonly' => false); -} -if (is_array($CONFIG['ldap_public'])) { - foreach ($CONFIG['ldap_public'] as $id => $prop) - $js_list[$id] = array('id' => $id, 'name' => $prop['name'], 'readonly' => !$prop['writable']); -} - -$plugin = $RCMAIL->plugins->exec_hook('address_sources', array('sources' => $js_list)); -$OUTPUT->set_env('address_sources', $plugin['sources']); +$OUTPUT->set_env('address_sources', $js_list); function rcmail_directory_list($attrib)