summaryrefslogtreecommitdiff
path: root/program/include
diff options
context:
space:
mode:
Diffstat (limited to 'program/include')
-rw-r--r--program/include/rcmail.php51
1 files changed, 50 insertions, 1 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;
+ }
/**