diff options
Diffstat (limited to 'program/include')
-rw-r--r-- | program/include/rcmail.php | 51 |
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; + } /** |