summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--program/include/rcmail.php51
-rw-r--r--program/steps/addressbook/func.inc14
2 files changed, 51 insertions, 14 deletions
diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index 04c7151dc..81f61379b 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -244,6 +244,7 @@ class rcmail
/**
* Return instance of the internal address book class
*
+ * @param string Address book identifier
* @param boolean True if the address book needs to be writeable
* @return object rcube_contacts Address book object
*/
@@ -274,12 +275,60 @@ class rcmail
}
}
}
- else {
+ else { // $id == 'sql'
$contacts = new rcube_contacts($this->db, $this->user->ID);
}
return $contacts;
}
+
+
+ /**
+ * Return address books list
+ *
+ * @param boolean True if the address book needs to be writeable
+ * @return array Address books array
+ */
+ public function get_address_sources($writeable = false)
+ {
+ $abook_type = strtolower($this->config->get('address_book_type'));
+ $ldap_config = (array)$this->config->get('ldap_public');
+ $autocomplete = (array)$this->config->get('autocomplete_addressbooks');
+ $list = array();
+
+ // We are using the DB address book
+ if ($abook_type != 'ldap') {
+ $list['0'] = array(
+ 'id' => 0,
+ 'name' => rcube_label('personaladrbook'),
+ 'readonly' => false,
+ 'autocomplete' => in_array('sql', $autocomplete)
+ );
+ }
+
+ if (is_array($ldap_config)) {
+ foreach ($ldap_config as $id => $prop)
+ $list[$id] = array(
+ 'id' => $id,
+ 'name' => $prop['name'],
+ 'readonly' => !$prop['writable'],
+ 'autocomplete' => in_array('sql', $autocomplete)
+ );
+ }
+
+ $plugin = $this->plugins->exec_hook('address_sources', array('sources' => $list));
+ $list = $plugin['sources'];
+
+ if ($writeable && !empty($list)) {
+ foreach ($list as $idx => $item) {
+ if ($item['readonly']) {
+ unset($list[$idx]);
+ }
+ }
+ }
+
+ return $list;
+ }
/**
diff --git a/program/steps/addressbook/func.inc b/program/steps/addressbook/func.inc
index ebf5546db..ca1fd03fc 100644
--- a/program/steps/addressbook/func.inc
+++ b/program/steps/addressbook/func.inc
@@ -20,18 +20,7 @@
*/
// 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'];
+$js_list = $RCMAIL->get_address_sources();
// select source
$source = get_input_value('_source', RCUBE_INPUT_GPC);
@@ -40,7 +29,6 @@ $source = get_input_value('_source', RCUBE_INPUT_GPC);
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);