From 71e8cc3bce5053ca986a95ef119101d15317ddc6 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Mon, 25 Jul 2011 07:48:50 -0400
Subject: [PATCH] - Fixed display name on contact lists

---
 program/include/rcube_addressbook.php |    9 ++++++++-
 program/steps/addressbook/save.inc    |    4 ++--
 program/steps/addressbook/func.inc    |    9 +++++++--
 3 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/program/include/rcube_addressbook.php b/program/include/rcube_addressbook.php
index 45ad0be..6d126e9 100644
--- a/program/include/rcube_addressbook.php
+++ b/program/include/rcube_addressbook.php
@@ -434,9 +434,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'];
@@ -446,7 +448,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]));
diff --git a/program/steps/addressbook/func.inc b/program/steps/addressbook/func.inc
index f372c1c..6b3ebad 100644
--- a/program/steps/addressbook/func.inc
+++ b/program/steps/addressbook/func.inc
@@ -294,8 +294,13 @@
         }
 
         // format each col
-        foreach ($a_show_cols as $col)
-            $a_row_cols[$col] = Q($row[$col]);
+        foreach ($a_show_cols as $col) {
+            $val = $row[$col];
+            if ($val == '' && $col == 'name') {
+                $val = rcube_addressbook::compose_display_name($row, true);
+            }
+            $a_row_cols[$col] = Q($val);
+        }
 
         $OUTPUT->command($prefix.'add_contact_row', $row['ID'], $a_row_cols);
     }
diff --git a/program/steps/addressbook/save.inc b/program/steps/addressbook/save.inc
index a8dd38f..393eb51 100644
--- a/program/steps/addressbook/save.inc
+++ b/program/steps/addressbook/save.inc
@@ -188,8 +188,8 @@
     $a_js_cols = array();
     $record = $CONTACTS->get_record($newcid ? $newcid : $cid, true);
     $record['email'] = reset($CONTACTS->get_col_values('email', $record, true));
-    if (!$record['name'])
-      $record['name'] = $record['email'];
+    if (empty($record['name']))
+      $record['name']  = rcube_addressbook::compose_display_name($record, true);
 
     foreach (array('name', 'email') as $col)
       $a_js_cols[] = Q((string)$record[$col]);

--
Gitblit v1.9.1