Fix a couple more 'string concat on array push' bugs like the
[squirrelmail.git] / class / mime / Rfc822Header.class.php
index 921b22ccdf9fc4ba2bceef4d7942e02263347574..51141440a90fa6ee29f83a182b6ec97c2fa76fd8 100644 (file)
@@ -3,7 +3,7 @@
 /**
  * Rfc822Header.class.php
  *
- * Copyright (c) 2003-2004 The SquirrelMail Project Team
+ * Copyright (c) 2003-2005 The SquirrelMail Project Team
  * Licensed under the GNU GPL. For full terms see the file COPYING.
  *
  * This contains functions needed to handle mime messages.
@@ -186,7 +186,9 @@ class Rfc822Header {
                 $this->xmailer = $value;
                 break;
             case 'x-priority':
-                $this->priority = $value;
+            case 'importance':
+            case 'priority':
+                $this->priority = $this->parsePriority($value);
                 break;
             case 'list-post':
                 $value = $this->stripComments($value);
@@ -227,7 +229,6 @@ class Rfc822Header {
 
     function getAddressTokens($address) {
         $aTokens = array();
-        $aAddress = array();
         $aSpecials = array('(' ,'<' ,',' ,';' ,':');
         $aReplace =  array(' (',' <',' ,',' ;',' :');
         $address = str_replace($aSpecials,$aReplace,$address);
@@ -412,7 +413,7 @@ class Rfc822Header {
 
     function parseAddress($address,$ar=false,$aAddress=array(),$sGroup='',$sHost='',$lookup=false) {
         $aTokens = $this->getAddressTokens($address);
-        $sPersonal = $sEmail = $sComment = $sGroup = '';
+        $sPersonal = $sEmail = $sGroup = '';
         $aStack = $aComment = array();
         foreach ($aTokens as $sToken) {
             $cChar = $sToken{0};
@@ -505,6 +506,31 @@ class Rfc822Header {
         }
     }
 
+    /**
+     * Normalise the different Priority headers into a uniform value,
+     * namely that of the X-Priority header (1, 3, 5). Supports:
+     * Prioirty, X-Priority, Importance.
+     * X-MS-Mail-Priority is not parsed because it always coincides
+     * with one of the other headers.
+     *
+     * NOTE: this is actually a duplicate from the function in
+     * functions/imap_messages. I'm not sure if it's ok here to call
+     * that function?
+     */
+    function parsePriority($value) {
+        $value = strtolower(array_shift(split('/\w/',trim($value))));
+        if ( is_numeric($value) ) {
+            return $value;
+        }
+        if ( $value == 'urgent' || $value == 'high' ) {
+            return 1;
+        } elseif ( $value == 'non-urgent' || $value == 'low' ) {
+            return 5;
+        }
+        // default is normal priority
+        return 3;
+    }
+
     function parseContentType($value) {
         $pos = strpos($value, ';');
         $props = '';
@@ -621,7 +647,7 @@ class Rfc822Header {
         if (is_array($arr)) {
             foreach($arr as $arg) {
                 if ($this->getAddr_s($arg, $separator, $encoded)) {
-                    $s .= $separator . $result;
+                    $s .= $separator;
                 }
             }
             $s = ($s ? substr($s, 2) : $s);
@@ -692,7 +718,6 @@ class Rfc822Header {
             $i=0;
             foreach($address as $argument) {
                 $match = $this->findAddress($argument, true);
-                $last = end($match);
                 if ($match[1]) {
                     return $i;
                 } else {