New function Banana::post()
authorx2003bruneau <x2003bruneau@9869982d-c50d-0410-be91-f2a2ec7c7c7b>
Wed, 7 Mar 2007 16:14:44 +0000 (16:14 +0000)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Fri, 4 Jan 2008 23:35:34 +0000 (00:35 +0100)
git-svn-id: svn+ssh://murphy/home/svn/banana/trunk@222 9869982d-c50d-0410-be91-f2a2ec7c7c7b

banana/banana.inc.php.in
banana/message.func.inc.php
banana/spool.inc.php

index ca17a13..d33c8ea 100644 (file)
@@ -298,6 +298,27 @@ class Banana
         return Banana::$page->run();
     }
 
+    /** Build and post a new message
+     * @return postid (or -1 if the message has not been found)
+     */
+    public function post($dest, $reply, $subject, $body)
+    {
+        $hdrs = Banana::$protocole->requestedHeaders();
+        $headers                 = Banana::$profile['headers'];
+        $headers[$hdrs['dest']]  = $dest;
+        if ($reply) {
+            $headers[$hdrs['reply']] = $reply;
+        } 
+        $headers['Subject']      = $subject;
+        $msg = BananaMessage::newMessage($headers, $body);
+        if (Banana::$protocole->send($msg)) {
+            Banana::$group = ($reply ? $reply : $dest);
+            $this->loadSpool(Banana::$group);
+            return Banana::$spool->getPostId($subject);
+        }
+        return -1;
+    }
+
     /** Return the CSS code to include in the headers
      */
     public function css()
@@ -466,6 +487,9 @@ class Banana
             $hdr_values = array();
             foreach ($hdrs as $header) {
                 $hdr_values[$header] = isset($headers[$header]['fixed']) ? $headers[$header]['fixed'] : @$_POST[$header];
+                if ($headers != 'Subject') {
+                    $hdr_values[$header] = str_replace(', ', ',', $hdr_values[$header]);
+                }
             }
             if ($artid) {
                 $old =& $this->loadMessage($group, $artid);
@@ -486,7 +510,8 @@ class Banana
             }
             if (!is_null($msg)) {
                 if (Banana::$protocole->send($msg)) {
-                    Banana::$page->redirect(array('group' => $group, 'artid' => $artid));
+                    $newid = Banana::$spool->updateUnread(Banana::$profile['lastnews']);
+                    Banana::$page->redirect(array('group' => $group, 'artid' => $newid ? $newid : $artid));
                 }
                 Banana::$page->trig(_b_('Une erreur est survenue lors de l\'envoi du message :') . '<br />'
                                    . Banana::$protocole->lastError());
index de29b94..863ed3a 100644 (file)
@@ -72,7 +72,7 @@ function banana_unflowed($text)
     return $text;
 }
 
-function banana_wordwrap($text, $quote_level)
+function banana_wordwrap($text, $quote_level = 0)
 {
     if ($quote_level > 0) {
         $length = Banana::$msgshow_wrap - $quote_level - 1;
index b3c0bfc..39f30fa 100644 (file)
@@ -245,7 +245,7 @@ class BananaSpool
         return true;
     }
 
-    private function updateUnread($since)
+    public function updateUnread($since)
     {
         if (empty($since)) {
             return;
@@ -573,6 +573,33 @@ class BananaSpool
         return $id_cur;
     }
 
+    /** Return the last post id with the given subject
+     * @param subject
+     */
+    public function getPostId($subject)
+    {
+        $subject = trim($subject);
+        $id = max(array_keys($this->overview));
+        while (isset($this->overview[$id])) {
+            $test = $this->overview[$id]->subject;
+            if (function_exists('hook_formatDisplayHeader')) {
+                $val = hook_formatDisplayHeader('subject', $test, true);
+                if (is_array($val)) {
+                    $test = $val[0];
+                } else {
+                    $test = $val;
+                }
+            }
+            $test = trim($test);
+            echo $test . " - " . $subject . "\n";
+            if ($test == $subject) {
+                return $id;
+            }
+            $id--;
+        }
+        return -1;
+    }
+
     /** Returns previous thread root index
      * @param id INTEGER message number
      */