diff options
Diffstat (limited to 'program')
-rw-r--r-- | program/include/rcmail.php | 51 | ||||
-rw-r--r-- | program/steps/addressbook/func.inc | 14 |
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); |