From 3704b78841ba05c31a2acaeabdffb9c471bb6610 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Tue, 02 Mar 2010 09:35:53 -0500
Subject: [PATCH] - Added function to get addressbooks list rcmail::get_address_sources() (#1486248)

---
 program/include/rcmail.php         |   51 +++++++++++++++++++++++++
 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 04c7151..81f6137 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -244,6 +244,7 @@
   /**
    * 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 @@
         }
       }
     }
-    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 ebf5546..ca1fd03 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);
@@ -39,7 +28,6 @@
 // if source is not set use first directory
 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);

--
Gitblit v1.9.1