From 61512fe104a0085333fd961fa78680b25cd3ab07 Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Mon, 01 Oct 2012 15:41:54 -0400
Subject: [PATCH] Avoid double-quoting of some message headers; wrap email address strings in <span> for better styling

---
 program/steps/mail/func.inc |   38 ++++++++++++++++++++++++++------------
 1 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index 45582d4..c4791a0 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -319,7 +319,7 @@
       $col_name = $col == 'fromto' ? $smart_col : $col;
 
       if (in_array($col_name, array('from', 'to', 'cc', 'replyto')))
-        $cont = Q(rcmail_address_string($header->$col_name, 3, false, null, $header->charset), 'show');
+        $cont = rcmail_address_string($header->$col_name, 3, false, null, $header->charset);
       else if ($col == 'subject') {
         $cont = trim(rcube_mime::decode_header($header->$col, $header->charset));
         if (!$cont) $cont = rcube_label('nosubject');
@@ -957,6 +957,8 @@
   $output_headers = array();
 
   foreach ($standard_headers as $hkey) {
+    $ishtml = false;
+
     if ($headers[$hkey])
       $value = $headers[$hkey];
     else if ($headers['others'][$hkey])
@@ -981,24 +983,31 @@
         continue;
     }
     else if ($hkey == 'replyto') {
-      if ($headers['replyto'] != $headers['from'])
+      if ($headers['replyto'] != $headers['from']) {
         $header_value = rcmail_address_string($value, null, true, $attrib['addicon'], $headers['charset']);
+        $ishtml = true;
+      }
       else
         continue;
     }
     else if ($hkey == 'mail-reply-to') {
       if ($headers['mail-replyto'] != $headers['reply-to']
         && $headers['reply-to'] != $headers['from']
-      )
+      ) {
         $header_value = rcmail_address_string($value, null, true, $attrib['addicon'], $headers['charset']);
+        $ishtml = true;
+      }
       else
         continue;
     }
     else if ($hkey == 'mail-followup-to') {
       $header_value = rcmail_address_string($value, null, true, $attrib['addicon'], $headers['charset']);
+      $ishtml = true;
     }
-    else if (in_array($hkey, array('from', 'to', 'cc', 'bcc')))
-      $header_value = rcmail_address_string($value, null, true, $attrib['addicon'], $headers['charset']);
+    else if (in_array($hkey, array('from', 'to', 'cc', 'bcc'))) {
+      $header_value = rcmail_address_string($value, $attrib['max'], true, $attrib['addicon'], $headers['charset']);
+      $ishtml = true;
+    }
     else if ($hkey == 'subject' && empty($value))
       $header_value = rcube_label('nosubject');
     else
@@ -1006,7 +1015,9 @@
 
     $output_headers[$hkey] = array(
         'title' => rcube_label(preg_replace('/(^mail-|-)/', '', $hkey)),
-        'value' => $header_value, 'raw' => $value
+        'value' => $header_value,
+        'raw' => $value,
+        'html' => $ishtml,
     );
   }
 
@@ -1022,7 +1033,7 @@
 
   foreach ($plugin['output'] as $hkey => $row) {
     $table->add(array('class' => 'header-title'), Q($row['title']));
-    $table->add(array('class' => 'header '.$hkey), Q($row['value'], ($hkey == 'subject' ? 'strict' : 'show')));
+    $table->add(array('class' => 'header '.$hkey), $row['html'] ? $row['value'] : Q($row['value'], ($hkey == 'subject' ? 'strict' : 'show')));
   }
 
   return $table->show($attrib);
@@ -1444,7 +1455,7 @@
       }
 
       if ($addicon && $_SESSION['writeable_abook']) {
-        $address = html::span(null, $address . html::a(array(
+        $address .= html::a(array(
             'href' => "#add",
             'onclick' => sprintf("return %s.command('add-contact','%s',this)", JS_OBJECT_NAME, $string),
             'title' => rcube_label('addtoaddressbook'),
@@ -1453,15 +1464,18 @@
           html::img(array(
             'src' => $CONFIG['skin_path'] . $addicon,
             'alt' => "Add contact",
-          ))));
+          )));
       }
-      $out .= $address;
+      $out .= html::span('adr', $address);
     }
     else {
+      $address = '';
       if ($name)
-        $out .= Q($name);
+        $address .= Q($name);
       if ($mailto)
-        $out .= (strlen($out) ? ' ' : '') . sprintf('&lt;%s&gt;', Q($mailto));
+        $address .= (strlen($address) ? ' ' : '') . sprintf('&lt;%s&gt;', Q($mailto));
+
+      $out .= html::span('adr', $address);
     }
 
     if ($c>$j)

--
Gitblit v1.9.1