From: x2003bruneau Date: Tue, 28 Feb 2006 18:33:03 +0000 (+0000) Subject: Permet de citer proprement le message d'origine si il est en html X-Git-Url: http://git.polytechnique.org/?a=commitdiff_plain;h=a529ea7ba90e2692dc394aade1d114886ddfe226;p=banana.git Permet de citer proprement le message d'origine si il est en html git-svn-id: svn+ssh://murphy/home/svn/banana/trunk@8 9869982d-c50d-0410-be91-f2a2ec7c7c7b --- diff --git a/banana/banana.inc.php.in b/banana/banana.inc.php.in index d79bb04..022278c 100644 --- a/banana/banana.inc.php.in +++ b/banana/banana.inc.php.in @@ -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']) : '').''; $html .= ''._b_('Pièces jointes').''; $html .= ''; - $html .= ''; + $html .= ''; $html .= ''; if ($id > 0) { $html .= ''; @@ -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.'--'; } diff --git a/banana/post.inc.php b/banana/post.inc.php index c43fbc8..3a04aea 100644 --- a/banana/post.inc.php +++ b/banana/post.inc.php @@ -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("@]>@", "@@@#@", $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 {