summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--program/include/rcmail.php34
-rw-r--r--program/steps/addressbook/edit.inc4
-rw-r--r--program/steps/addressbook/func.inc11
-rw-r--r--program/steps/addressbook/import.inc2
-rw-r--r--program/steps/mail/compose.inc2
-rw-r--r--program/steps/settings/func.inc2
6 files changed, 30 insertions, 25 deletions
diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index 99a68e81d..72c2fd944 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -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;
diff --git a/program/steps/addressbook/edit.inc b/program/steps/addressbook/edit.inc
index b216a7c70..d175c05d9 100644
--- a/program/steps/addressbook/edit.inc
+++ b/program/steps/addressbook/edit.inc
@@ -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];
diff --git a/program/steps/addressbook/func.inc b/program/steps/addressbook/func.inc
index e42e26e1e..fded9a819 100644
--- a/program/steps/addressbook/func.inc
+++ b/program/steps/addressbook/func.inc
@@ -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;
diff --git a/program/steps/addressbook/import.inc b/program/steps/addressbook/import.inc
index 6d60f829c..df07d64bc 100644
--- a/program/steps/addressbook/import.inc
+++ b/program/steps/addressbook/import.inc
@@ -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',
diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc
index ffc1c7518..92ec88f1b 100644
--- a/program/steps/mail/compose.inc
+++ b/program/steps/mail/compose.inc
@@ -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);
diff --git a/program/steps/settings/func.inc b/program/steps/settings/func.inc
index 2c19d88df..3bcca21bf 100644
--- a/program/steps/settings/func.inc
+++ b/program/steps/settings/func.inc
@@ -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));