User color only depends on the email address.
[banana.git] / banana / spool.inc.php
index 2a9ec6d..ace19f7 100644 (file)
@@ -54,28 +54,19 @@ class BananaSpoolHead
      */
     public function __construct($id, array &$message)
     {
+        list($name, $from) = BananaMessage::extractMail($message['from']);
         $this->id         = $id;
         $this->msgid      = @$message['message-id'];
         $this->date       = $message['date'];
         $this->subject    = @$message['subject'];
         $this->from       = $message['from'];
-        $this->color      = sprintf('#%06x', abs(crc32($this->from) % 0xffffff));
+        $this->color      = sprintf('#%06x', abs(crc32($from) % 0xffffff));
         $this->desc       = 1;
         $this->isread     = true;
         $this->descunread = 0;
-        if (preg_match("/^([^ ]+@[^ ]+) \((.*)\)$/", $this->from, $regs)) {
-            $this->name = $regs[2];
-        }
-        if (preg_match("/^\"?([^<>\"]+)\"? +<(.+@.+)>$/", $this->from, $regs)) {
-            $this->name = preg_replace("/^'(.*)'$/", '\1', $regs[1]);
-            $this->name = stripslashes($this->name);
-        }
-        if ($this->name) {
-            $this->name =  preg_replace("/\\\(\(|\))/","\\1", $this->name);
-        } else if (preg_match("/([^< ]+)@([^> ]+)/", $this->from, $regs)) {
-            $this->name = $regs[1];
-        } else {
-            $this->name = 'Anonymous';
+        $this->name       = $name;
+        if ($name === $from) {
+            $this->name   = 'Anonymous';
         }
     }
 }
@@ -302,6 +293,22 @@ class BananaSpool
             }
         }
         $this->unreadnb += count($newpostsids);
+
+        if (function_exists('hook_listReadMessages')) {
+            $msgs = hook_listReadMessages($this->group);
+            if (!is_array($msgs)) {
+                return;
+            }
+            foreach ($msgs as $msg) {
+                if (!is_numeric($msg)) {
+                    if (!isset($this->ids[$msg])) {
+                        continue;
+                    }
+                    $msg = $this->ids[$msg]->id;
+                }
+                $this->markAsRead($msg);
+            }
+        }
     }
 
     public function setMode($mode)
@@ -501,8 +508,8 @@ class BananaSpool
         if (empty($subject)) {
             $subject = _b_('(pas de sujet)');
         }
-        if (strlen($subject) > 100) {
-            $subject = substr($subject, 0, 99) . '&hellip;';
+        if (mb_strlen($subject) > 100) {
+            $subject = mb_substr($subject, 0, 99) . '&hellip;';
         }
         if ($head->id !== Banana::$artid) {
             $subject = Banana::$page->makeLink(Array('group' => $this->group, 'artid' => $head->id,