$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'];
}
}
.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.'" />';
$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.'--';
}
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)) {
* @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);
/** extract new headers from the part
* @param $part STRING part of a multipart message
*/
- function get_part($part)
+ function _get_part($part)
{
global $banana;
/** add an attachment
*/
- function add_attachment($part)
+ function _add_attachment($part)
{
$local_header = $part['headers'];
$local_body = $part['body'];
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
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 {