Permet de citer proprement le message d'origine si il est en html
authorx2003bruneau <x2003bruneau@9869982d-c50d-0410-be91-f2a2ec7c7c7b>
Tue, 28 Feb 2006 18:33:03 +0000 (18:33 +0000)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Fri, 4 Jan 2008 23:34:32 +0000 (00:34 +0100)
git-svn-id: svn+ssh://murphy/home/svn/banana/trunk@8 9869982d-c50d-0410-be91-f2a2ec7c7c7b

banana/banana.inc.php.in
banana/post.inc.php

index d79bb04..022278c 100644 (file)
@@ -252,7 +252,7 @@ class Banana
             $this->_newPost($id);
             if ($this->post) {
                 $subject = preg_replace("/^re\s*:\s*/i", '', 'Re: '.$this->post->headers['subject']);
-                $body    = utf8_encode($this->post->name." "._b_("a écrit"))." :\n".wrap($this->post->body, "> ");
+                $body    = utf8_encode($this->post->name." "._b_("a écrit"))." :\n".wrap($this->post->get_body(), "> ");
                 $target  = isset($this->post->headers['followup-to']) ? $this->post->headers['followup-to'] : $this->post->headers['newsgroups'];
             }
         }
@@ -274,7 +274,7 @@ class Banana
             .to_entities($body).($this->profile['sig'] ? "\n\n-- \n".htmlentities($this->profile['sig']) : '').'</textarea></td></th>';
        $html .= '<tr><th colspan="2">'._b_('Pièces jointes').'</th></tr>';
         $html .= '<tr><td colspan="2"><input type="hidden" name="MAX_FILE_SIZE" value="'.$this->maxfilesize.'" />';
-        $html .= '<input type="file" name="newpj" /></td></tr>';
+        $html .= '<input type="file" name="newpj" size="40"/></td></tr>';
            $html .= '<tr><th colspan="2">';
         if ($id > 0) {
             $html .= '<input type="hidden" name="artid" value="'.$id.'" />';
@@ -320,8 +320,8 @@ class Banana
             $body    = "\n--".$this->boundary."\n".$this->custom_bd."\n\n".$body."\n--".$this->boundary."\n";
 
             $body   .= 'Content-Type: '.$uploaded['type'].'; name="'.$uploaded['name']."\"\n";
-            $body   .= 'Content-Disposition: attachment; filename="'.$uploaded['name']."\"\n";
             $body   .= 'Content-Transfer-Encoding: '.$uploaded['encoding']."\n\n";
+            $body   .= 'Content-Disposition: attachment; filename="'.$uploaded['name']."\"\n";
             $body   .= $uploaded['data'];
             $body   .= '--'.$this->boundary.'--';
         }
index c43fbc8..3a04aea 100644 (file)
@@ -51,7 +51,7 @@ class BananaPost
 
         if (preg_match("@multipart/([^;]+);@", $this->headers['content-type'], $mpart_type)) {
             preg_match("/boundary=\"?([^ \"]+)\"?/", $this->headers['content-type'], $mpart_boundary);
-            $this->split_multipart($mpart_type[1], $mpart_boundary[1]);
+            $this->_split_multipart($mpart_type[1], $mpart_boundary[1]);
         }
         
         if (preg_match('!charset=([^;]*)\s*(;|$)!', $this->headers['content-type'], $matches)) {
@@ -65,18 +65,18 @@ class BananaPost
      * @param $type STRING multipart type description
      * @param $boundary STRING multipart boundary identification string
      */
-    function split_multipart($type, $boundary)
+    function _split_multipart($type, $boundary)
     {
         $parts = preg_split("/\n--$boundary(--|\n)/", $this->body);
         foreach ($parts as $part) {
-            $part = $this->get_part($part);
+            $part = $this->_get_part($part);
             $local_header = $part['headers'];
             $local_body = $part['body'];
             if (isset($local_header['content-disposition']) && preg_match("/attachment/", $local_header['content-disposition'])) {
-                $this->add_attachment($part);
+                $this->_add_attachment($part);
             } else if (isset($local_header['content-type']) && preg_match("@text/([^;]+);@", $local_header['content-type'], $format)) {
                array_push($this->messages, $part);
-               }
+        }
         }
         if (count($this->messages) > 0) {
             $this->set_body_to_part(0);
@@ -86,7 +86,7 @@ class BananaPost
     /** extract new headers from the part
      * @param $part STRING part of a multipart message
      */
-    function get_part($part)
+    function _get_part($part)
     {
         global $banana;
 
@@ -108,7 +108,7 @@ class BananaPost
 
     /** add an attachment
      */
-    function add_attachment($part)
+    function _add_attachment($part)
     {
         $local_header = $part['headers'];
         $local_body = $part['body'];
@@ -143,6 +143,23 @@ class BananaPost
         return true;
     }
 
+    /** return body in plain text (useful for messages without a text/plain part)
+     */
+    function get_body()
+    {
+        preg_match("@text/([^;]+);@", $this->headers['content-type'], $format);
+        if ($format[1] == 'plain') {
+            return $this->body;
+        }
+        $res = preg_replace("@<br[^>]>@", "@@@#@", $this->body);
+        $res = trim(html_entity_decode(strip_tags($res)));
+        $res = str_replace("@@@#@", "\n", $res);
+        if (!is_utf8($res)) {
+            $res = utf8_encode($res);
+        }
+        return $res;
+    }
+
     /** decode an attachment
      * @param pjid INT id of the attachment to decode
      * @param action BOOL action to execute : true=view, false=download
@@ -153,10 +170,12 @@ class BananaPost
             return false;
         } else {
             $file = $this->pj[$pjid];
-            header('Content-Type: '.$file['MIME']);
+            header('Content-Type: '.$file['MIME'].'; name="'.$file['filename'].'"');
             if (!$action) {
                 header('Content-Disposition: attachment; filename="'.$file['filename'].'"');
-            }
+            } else {
+                header('Content-Disposition: inline; filename="'.$file['filename'].'"');
+            }                
             if ($file['encoding'] == 'base64') {
                 echo base64_decode($file['data']);
             } else {