From: x2003bruneau Date: Mon, 27 Feb 2006 22:02:16 +0000 (+0000) Subject: Ajoute la possibilité de poster une piÚce jointe par message... X-Git-Url: http://git.polytechnique.org/?a=commitdiff_plain;h=0a61409eab08ac48807eb01311b1f83636f98f7d;p=banana.git Ajoute la possibilité de poster une piÚce jointe par message... La possibilité d'en mettre plusieurs sera pour plus tard, de toute façon avec une seule, tout le code d'inclusion dans le message et de création de message multipart est fait donc, le problÚme sera purement de gérer le formulaire :) git-svn-id: svn+ssh://murphy/home/svn/banana/trunk@5 9869982d-c50d-0410-be91-f2a2ec7c7c7b --- diff --git a/banana/banana.inc.php.in b/banana/banana.inc.php.in index f777787..7aa348c 100644 --- a/banana/banana.inc.php.in +++ b/banana/banana.inc.php.in @@ -23,7 +23,10 @@ class Banana var $wrap = 74; + var $boundary = "bananaBoundary42"; var $custom = "Content-Type: text/plain; charset=utf-8\nMime-Version: 1.0\nContent-Transfer-Encoding: 8bit\nUser-Agent: Banana @VERSION@\n"; + var $custom_mp = "Content-Type: multipart/mixed; boundary=\"bananaBoundary42\"\nContent-Transfer-Encoding: 7bit\nUser-Agent: Banana @VERSION@\n"; + var $custom_bd = "Content-Type: text/plain; charset=utf-8\nContent-Transfert-Encoding: 8bit"; var $host = 'news://localhost:119/'; @@ -69,7 +72,6 @@ class Banana return $banana->action_listGroups(); } elseif (is_null($artid)) { - if (isset($_POST['action']) && $_POST['action'] == 'new') { return $banana->action_doFup($group, isset($_POST['artid']) ? intval($_POST['artid']) : -1); } elseif (isset($_GET['action']) && $_GET['action'] == 'new') { @@ -258,7 +260,7 @@ class Banana $cuts = displayshortcuts(); $html = '

'._b_('Nouveau message').'

'.$cuts; - $html .= '
'; + $html .= ''; $html .= ''; $html .= ''; $html .= ''; @@ -269,12 +271,15 @@ class Banana $html .= ''; $html .= ''; - $html .= ''; + $html .= ''; + $html .= ''; + $html .= ''; $html .= '
'._b_('En-têtes').'
'._b_('Nom').''.htmlentities($this->profile['name']).'
'._b_('Corps').'
'; + $html .= '
'._b_('Pièces jointes').'
'; + $html .= '
'; if ($id > 0) { $html .= ''; } $html .= ''; - $html .= '
'; return $html.$cuts; @@ -305,7 +310,37 @@ class Banana $msg .= "References: $refs{$post->headers['message-id']}\n"; } - $msg .= $this->custom.$this->profile['customhdr']."\n".wrap($body, "", $this->wrap); + $body = wrap($body, "", $this->wrap); + + // include attachment in the body + if (isset($_FILES['newpj'])) { + $this->custom = $this->custom_mp; + $body = "\n--".$this->boundary."\n".$this->custom_bd."\n\n".$body."\n--".$this->boundary."\n"; + $tmpname = $_FILES['newpj']['tmp_name']; + $file = basename($_FILES['newpj']['name']); + $mime = shell_exec("file -bi $tmpname"); //Because mime_content_type don't work :( + if (preg_match("@([^ ]+/[^ ]+); (.*)@", $mime, $format)) { + $mime = $format[1]; + $encod = $format[2]; + } else { + preg_match("@([^ ]+/[^ ]+)\r?\n@", $mime, $format); + $mime = $format[1]; + $encod = 'base64'; + } + + $body .= 'Content-Type: '.$mime.'; name="'.$file."\"\n"; + $body .= 'Content-Disposition: attachment; filename="'.$file."\"\n"; + $body .= 'Content-Transfer-Encoding: '.$encod."\n\n"; + if ($encod == 'base64') { + $body .= chunk_split(base64_encode(fread(fopen($tmpname, 'r'), filesize($tmpname)))); + } else { + $body .= fread(fopen($tmpname, 'r'), filesize($tmpname)); + } + $body .= '--'.$this->boundary.'--'; + } + + // finalise and post the message + $msg .= $this->custom.$this->profile['customhdr']."\n".$body; if ($this->nntp->post($msg)) { header("Location: ?group=$group".($artid==-1 ? '' : "&first=$artid"));