Bug #7938: Fix group address parsing.
authorMichael M Slusarz <slusarz@curecanti.org>
Fri, 6 Feb 2009 06:33:07 +0000 (23:33 -0700)
committerMichael M Slusarz <slusarz@curecanti.org>
Fri, 6 Feb 2009 06:33:07 +0000 (23:33 -0700)
framework/Mime/lib/Horde/Mime.php
framework/Mime/lib/Horde/Mime/Address.php

index a0dcfa0..fd78348 100644 (file)
@@ -208,20 +208,28 @@ class Horde_Mime
 
         $text = '';
         foreach ($addresses as $addr) {
-            // Check for groups.
-            if (empty($addr['groupname'])) {
-                if (empty($addr['personal'])) {
+            $addrobs = empty($addr['groupname'])
+                ? array($addr)
+                : $addr['addresses'];
+            $addrlist = array();
+
+            foreach ($addrobs as $val) {
+                if (empty($val['personal'])) {
                     $personal = '';
                 } else {
-                    if (($addr['personal'][0] == '"') &&
-                        (substr($addr['personal'], -1) == '"')) {
-                        $addr['personal'] = stripslashes(substr($addr['personal'], 1, -1));
+                    if (($val['personal'][0] == '"') &&
+                        (substr($val['personal'], -1) == '"')) {
+                        $addr['personal'] = stripslashes(substr($val['personal'], 1, -1));
                     }
-                    $personal = self::encode($addr['personal'], $charset);
+                    $personal = self::encode($val['personal'], $charset);
                 }
-                $text .= Horde_Mime_Address::writeAddress($addr['mailbox'], $addr['host'], $personal) . ', ';
+                $addrlist[] = Horde_Mime_Address::writeAddress($val['mailbox'], $val['host'], $personal);
+            }
+
+            if (empty($addr['groupname'])) {
+                $text .= reset($addrlist) . ', ';
             } else {
-                $text .= Horde_Mime_Address::writeGroupAddress($addr['groupname'], $addr['addresses']) . ' ';
+                $text .= Horde_Mime_Address::writeGroupAddress($addr['groupname'], $addrlist) . ' ';
             }
         }
 
index 08dd3c6..7ce620f 100644 (file)
@@ -68,7 +68,7 @@ class Horde_Mime_Address
      */
     static public function writeGroupAddress($groupname, $addresses = array())
     {
-        return self::encode($groupname, 'address') . ':' . (empty($addresses) ? '' : implode(', ', $addresses)) . ';';
+        return self::encode($groupname, 'address') . ':' . (empty($addresses) ? '' : (' ' . implode(', ', $addresses)) . ';');
     }
 
     /**
@@ -397,6 +397,12 @@ class Horde_Mime_Address
         /* Convert objects to arrays. */
         foreach (array_keys($ret) as $key) {
             $ret[$key] = (array) $ret[$key];
+            if (isset($ret[$key]['addresses'])) {
+                $ptr = &$ret[$key]['addresses'];
+                foreach (array_keys($ptr) as $key2) {
+                    $ptr[$key2] = (array) $ptr[$key2];
+                }
+            }
         }
 
         return $ret;