Fix hidden flag and default_addressbook settings handling

pull/66/head
Aleksander Machniak 12 years ago
parent 922a1fb714
commit 65dff8f812

@ -207,14 +207,22 @@ class rcmail extends rcube
}
}
// when user requested default writeable addressbook
// we need to check if default is writeable, if not we
// will return first writeable book (if any exist)
if ($contacts && $default && $contacts->readonly && $writeable) {
$contacts = null;
}
// Get first addressbook from the list if configured default doesn't exist
// This can happen when user deleted the addressbook (e.g. Kolab folder)
if (!$contacts && (!$id || $default)) {
$source = reset($this->get_address_sources($writeable));
$source = reset($this->get_address_sources($writeable, !$default));
if (!empty($source)) {
$contacts = $this->get_address_book($source['id']);
if ($contacts)
if ($contacts) {
$id = $source['id'];
}
}
}
@ -226,16 +234,17 @@ class rcmail extends rcube
true, true);
}
// add to the 'books' array for shutdown function
$this->address_books[$id] = $contacts;
if ($writeable && $contacts->readonly) {
return null;
}
// set configured sort order
if ($sort_col = $this->config->get('addressbook_sort_col'))
if ($sort_col = $this->config->get('addressbook_sort_col')) {
$contacts->set_sort_order($sort_col);
// add to the 'books' array for shutdown function
$this->address_books[$id] = $contacts;
}
return $contacts;
}
@ -245,10 +254,11 @@ class rcmail extends rcube
* Return address books list
*
* @param boolean True if the address book needs to be writeable
* @param boolean True if the address book needs to be not hidden
*
* @return array Address books array
*/
public function get_address_sources($writeable = false)
public function get_address_sources($writeable = false, $skip_hidden = false)
{
$abook_type = strtolower($this->config->get('address_book_type'));
$ldap_config = $this->config->get('ldap_public');
@ -292,11 +302,17 @@ class rcmail extends rcube
foreach ($list as $idx => $item) {
// register source for shutdown function
if (!is_object($this->address_books[$item['id']]))
if (!is_object($this->address_books[$item['id']])) {
$this->address_books[$item['id']] = $item;
}
// remove from list if not writeable as requested
if ($writeable && $item['readonly'])
if ($writeable && $item['readonly']) {
unset($list[$idx]);
}
// remove from list if hidden as requested
else if ($skip_hidden && $item['hidden']) {
unset($list[$idx]);
}
}
return $list;

@ -52,7 +52,7 @@ else {
// find writable addressbook
if (!$CONTACTS || $CONTACTS->readonly)
$source = rcmail_default_source(true);
$source = $RCMAIL->get_address_book(-1, true);
// Initialize addressbook
$CONTACTS = rcmail_contact_source($source, true);
@ -239,7 +239,7 @@ function rcmail_source_selector($attrib)
{
global $RCMAIL, $SOURCE_ID;
$sources_list = $RCMAIL->get_address_sources(true);
$sources_list = $RCMAIL->get_address_sources(true, true);
if (count($sources_list) < 2) {
$source = $sources_list[$SOURCE_ID];

@ -160,17 +160,6 @@ function rcmail_contact_source($source=null, $init_env=false, $writable=false)
}
function rcmail_default_source($writable=false)
{
global $RCMAIL;
// get list of address sources
$first = reset($RCMAIL->get_address_sources($writable));
// use first directory by default
return $first['id'];
}
function rcmail_set_sourcename($abook)
{
global $OUTPUT;

@ -30,7 +30,7 @@ function rcmail_import_form($attrib)
$attrib += array('id' => "rcmImportForm");
$writable_books = $RCMAIL->get_address_sources(true);
$writable_books = $RCMAIL->get_address_sources(true, true);
$upload = new html_inputfield(array(
'type' => 'file',

@ -1615,7 +1615,7 @@ function rcmail_addressbook_list($attrib = array())
'rel' => '%s',
'onclick' => "return ".JS_OBJECT_NAME.".command('list-adresses','%s',this)"), '%s'));
foreach ($RCMAIL->get_address_sources() as $j => $source) {
foreach ($RCMAIL->get_address_sources(false, true) as $j => $source) {
$id = strval(strlen($source['id']) ? $source['id'] : $j);
$js_id = JQ($id);

@ -695,7 +695,7 @@ function rcmail_user_prefs($current=null)
);
if (!isset($no_override['default_addressbook'])
&& ($books = $RCMAIL->get_address_sources(true))
&& ($books = $RCMAIL->get_address_sources(true, true))
) {
$field_id = 'rcmfd_default_addressbook';
$select_abook = new html_select(array('name' => '_default_addressbook', 'id' => $field_id));

Loading…
Cancel
Save