X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=banana%2Fspool.inc.php;h=ace19f7277dde077404d0aba500faba7a184384c;hb=ade32c5593c555591eb5cf859ea64b8ef7fdaaf8;hp=015dd5d6d55b28ff205a3a7cff9024c1be863a08;hpb=d35878e0fc33525a980c2ba71c5ab5dfa7849c10;p=banana.git diff --git a/banana/spool.inc.php b/banana/spool.inc.php index 015dd5d..ace19f7 100644 --- a/banana/spool.inc.php +++ b/banana/spool.inc.php @@ -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'; } } } @@ -164,7 +155,7 @@ class BananaSpool return $spool; } - private function compare(&$a, &$b) + private function compare($a, $b) { return ($b->date - $a->date); } @@ -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) @@ -430,6 +437,7 @@ class BananaSpool // Remove from the message tree if (!is_null($parent)) { + $time = time(); foreach ($parent->children as $key=>&$child) { if ($child === $overview) { unset($parent->children[$key]); @@ -437,12 +445,12 @@ class BananaSpool } } if (sizeof($overview->children)) { - $parent->children = array_merge($parent->children, $overview->children); foreach ($overview->children as &$child) { + $parent->children[] =& $child; + $child->time = $time; $child->parent =& $parent; } } - $time = time(); while (!is_null($parent)) { $parent->desc--; $parent->time = $time; @@ -467,7 +475,7 @@ class BananaSpool } } - public function formatDate(BananaSpoolHead &$head) + public function formatDate(BananaSpoolHead $head) { $stamp = $head->date; $today = intval(time() / (24*3600)); @@ -487,7 +495,7 @@ class BananaSpool return strftime($format, $stamp); } - public function formatSubject(BananaSpoolHead &$head) + public function formatSubject(BananaSpoolHead $head) { $subject = $popup = $head->subject; $popup = $subject; @@ -500,14 +508,17 @@ class BananaSpool if (empty($subject)) { $subject = _b_('(pas de sujet)'); } - if ($head->id != Banana::$artid) { + if (mb_strlen($subject) > 100) { + $subject = mb_substr($subject, 0, 99) . '…'; + } + if ($head->id !== Banana::$artid) { $subject = Banana::$page->makeLink(Array('group' => $this->group, 'artid' => $head->id, 'text' => $subject, 'popup' => $popup)); } return $subject . $link; } - public function formatFrom(BananaSpoolHead &$head) + public function formatFrom(BananaSpoolHead $head) { return BananaMessage::formatFrom($head->from); } @@ -651,7 +662,7 @@ class BananaSpool /** Look for an unread message in the thread rooted by the message * @param id INTEGER message number */ - private function _nextUnread(BananaSpoolHead &$cur) + private function _nextUnread(BananaSpoolHead $cur) { if (!$cur->isread) { return $cur->id;