From f94e442469deca30b39f3fa08aade83cbd0ede70 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Fri, 16 Dec 2011 13:38:59 -0500
Subject: [PATCH] Add more classes and options to HTML elements for better styleability

---
 program/include/rcube_addressbook.php |   40 +++++++++++++++++++++++++++++++++-------
 1 files changed, 33 insertions(+), 7 deletions(-)

diff --git a/program/include/rcube_addressbook.php b/program/include/rcube_addressbook.php
index 3581b83..5f17f4a 100644
--- a/program/include/rcube_addressbook.php
+++ b/program/include/rcube_addressbook.php
@@ -30,7 +30,7 @@
     /** constants for error reporting **/
     const ERROR_READ_ONLY = 1;
     const ERROR_NO_CONNECTION = 2;
-    const ERROR_INCOMPLETE = 3;
+    const ERROR_VALIDATE = 3;
     const ERROR_SAVING = 4;
     const ERROR_SEARCH = 5;
 
@@ -38,6 +38,7 @@
     public $primary_key;
     public $groups = false;
     public $readonly = true;
+    public $searchonly = false;
     public $undelete = false;
     public $ready = false;
     public $group_id = null;
@@ -95,12 +96,16 @@
      *
      * @param array   List of fields to search in
      * @param string  Search value
+     * @param int     Matching mode:
+     *                0 - partial (*abc*),
+     *                1 - strict (=),
+     *                2 - prefix (abc*)
      * @param boolean True if results are requested, False if count only
      * @param boolean True to skip the count query (select only)
      * @param array   List of fields that cannot be empty
      * @return object rcube_result_set List of contact records and 'count' value
      */
-    abstract function search($fields, $value, $strict=false, $select=true, $nocount=false, $required=array());
+    abstract function search($fields, $value, $mode=0, $select=true, $nocount=false, $required=array());
 
     /**
      * Count number of available contacts in database
@@ -181,15 +186,16 @@
      * If input isn't valid, the message to display can be fetched using get_error()
      *
      * @param array Assoziative array with data to save
+     * @param boolean Attempt to fix/complete record automatically
      * @return boolean True if input is valid, False if not.
      */
-    public function validate($save_data)
+    public function validate(&$save_data, $autofix = false)
     {
         // check validity of email addresses
         foreach ($this->get_col_values('email', $save_data, true) as $email) {
             if (strlen($email)) {
                 if (!check_email(rcube_idn_to_ascii($email))) {
-                    $this->set_error('warning', rcube_label(array('name' => 'emailformaterror', 'vars' => array('email' => $email))));
+                    $this->set_error(self::ERROR_VALIDATE, rcube_label(array('name' => 'emailformaterror', 'vars' => array('email' => $email))));
                     return false;
                 }
             }
@@ -250,8 +256,9 @@
      * Mark one or more contact records as deleted
      *
      * @param array  Record identifiers
+     * @param bool   Remove records irreversible (see self::undelete)
      */
-    function delete($ids)
+    function delete($ids, $force=true)
     {
         /* empty for read-only address books */
     }
@@ -290,6 +297,18 @@
     {
         /* empty for address books don't supporting groups */
         return array();
+    }
+
+    /**
+     * Get group properties such as name and email address(es)
+     *
+     * @param string Group identifier
+     * @return array Group properties as hash array
+     */
+    function get_group($group_id)
+    {
+        /* empty for address books don't supporting groups */
+        return null;
     }
 
     /**
@@ -384,7 +403,7 @@
     {
         $out = array();
         foreach ($data as $c => $values) {
-            if (strpos($c, $col) === 0) {
+            if ($c === $col || strpos($c, $col.':') === 0) {
                 if ($flat) {
                     $out = array_merge($out, (array)$values);
                 }
@@ -433,9 +452,11 @@
      * Compose a valid display name from the given structured contact data
      *
      * @param array  Hash array with contact data as key-value pairs
+     * @param bool   The name will be used on the list
+     *
      * @return string Display name
      */
-    public static function compose_display_name($contact)
+    public static function compose_display_name($contact, $list_mode = false)
     {
         $contact = rcmail::get_instance()->plugins->exec_hook('contact_displayname', $contact);
         $fn = $contact['name'];
@@ -445,7 +466,12 @@
 
         // use email address part for name
         $email = is_array($contact['email']) ? $contact['email'][0] : $contact['email'];
+
         if ($email && (empty($fn) || $fn == $email)) {
+            // Use full email address on contacts list
+            if ($list_mode)
+                return $email;
+
             list($emailname) = explode('@', $email);
             if (preg_match('/(.*)[\.\-\_](.*)/', $emailname, $match))
                 $fn = trim(ucfirst($match[1]).' '.ucfirst($match[2]));

--
Gitblit v1.9.1