From: x2003bruneau Date: Wed, 21 Mar 2007 14:10:11 +0000 (+0000) Subject: Don't lose the attachment when email can't be sent X-Git-Tag: xorg/0.9.14~192 X-Git-Url: http://git.polytechnique.org/?a=commitdiff_plain;h=da419622f1c17a277ff957b82385fa9df399e524;p=platal.git Don't lose the attachment when email can't be sent git-svn-id: svn+ssh://murphy/home/svn/platal/trunk@1594 839d8a87-29fc-0310-9880-83ba4fa771e5 --- diff --git a/classes/plmailer.php b/classes/plmailer.php index e177fc4..d220ad7 100644 --- a/classes/plmailer.php +++ b/classes/plmailer.php @@ -218,6 +218,12 @@ class PlMailer extends Mail_Mime { } } + public function addUploadAttachment(PlUpload &$upload, $name) + { + $encoding = $upload->isType('text') ? 'quoted-printable' : 'base64'; + $this->addAttachment($upload->getContents(), $upload->contentType(), $name, false, $encoding); + } + public function assign($var, $value) { if (!is_null($this->page)) { diff --git a/classes/plupload.php b/classes/plupload.php index 743a090..b3dbb56 100644 --- a/classes/plupload.php +++ b/classes/plupload.php @@ -139,22 +139,46 @@ class PlUpload return file_exists($this->filename); } - static public function listFiles($forlife = '*', $category = '*', $basename = false) + static public function listRawFiles($forlife = '*', $category = '*', $uniq = false, $basename = false) { global $globals; $filename = $globals->spoolroot . '/spool/uploads/temp/'; $filename .= $forlife . '-' . $category; + if (!$uniq) { + $filename .= '-*'; + } $files = glob($filename); if ($basename) { - array_walk($files, 'basename'); + $files = array_map('basename', $files); + } + return $files; + } + + static public function listFilenames($forlife = '*', $category = '*') + { + $files = PlUpload::listRawFiles($forlife, $category, false, true); + foreach ($files as &$name) { + list($forlife, $cat, $fn) = explode('-', $name, 3); + $name = $fn; } return $files; } - static public function clear($user = '*', $category = '*') + static public function &listFiles($forlife = '*', $category = '*', $uniq = false) + { + $res = array(); + $files = PlUpload::listRawFiles($forlife, $category, $uniq, true); + foreach ($files as $name) { + list($forlife, $cat, $fn) = explode('-', $name, 3); + $res[$fn] = new PlUpload($forlife, $cat, $fn); + } + return $res; + } + + static public function clear($user = '*', $category = '*', $uniq = false) { - $files = PlUpload::listFiles($user, $category, false); - array_walk($files, 'unlink'); + $files = PlUpload::listRawFiles($user, $category, $uniq, false); + array_map('unlink', $files); } public function contentType() diff --git a/modules/email.php b/modules/email.php index 49ba3c4..981b7db 100644 --- a/modules/email.php +++ b/modules/email.php @@ -300,6 +300,7 @@ class EmailModule extends PLModule global $globals; $page->changeTpl('emails/send.tpl'); + $page->addJsLink('ajax.js'); $page->assign('xorg_title','Polytechnique.org - Envoyer un email'); @@ -319,6 +320,12 @@ class EmailModule extends PLModule return join(', ', $ret); } + foreach ($_FILES as &$file) { + if (!PlUpload::get($file, S::v('forlife'), 'emails.send', false)) { + $page->trig("Impossible de télécharger '" . pl_entities($file['name']) . "'"); + } + } + $to2 = getEmails(Env::v('to_contacts')); $cc2 = getEmails(Env::v('cc_contacts')); $txt = str_replace('^M', '', Env::v('contenu')); @@ -330,6 +337,7 @@ class EmailModule extends PLModule if (empty($to) && empty($cc) && empty($to2)) { $page->trig("Indique au moins un destinataire."); + $page->assign('uploaded_f', PlUpload::listFilenames(S::v('forlife'), 'emails.send')); } else { $mymail = new PlMailer(); $mymail->setFrom($from); @@ -339,20 +347,22 @@ class EmailModule extends PLModule if (!empty($bcc)) { $mymail->addBcc($bcc); } if (!empty($to2)) { $mymail->addTo($to2); } if (!empty($cc2)) { $mymail->addCc($cc2); } - if (is_uploaded_file($_FILES['uploaded']['tmp_name'])) { - $mymail->addAttachment($_FILES['uploaded']['tmp_name'], - $_FILES['uploaded']['type'], - $_FILES['uploaded']['name']); + $files =& PlUpload::listFiles(S::v('forlife'), 'emails.send'); + foreach ($files as $name=>&$upload) { + $mymail->addUploadAttachment($upload, $name); } - $mymail->setTxtBody(wordwrap($txt,72,"\n")); + $mymail->setTxtBody(wordwrap($txt, 78, "\n")); if ($mymail->send()) { $page->trig("Ton mail a bien été envoyé."); $_REQUEST = array('bcc' => S::v('bestalias').'@'.$globals->mail->domain); + PlUpload::clear(S::v('forlife'), 'emails.send'); } else { $page->trig("Erreur lors de l'envoi du courriel, réessaye."); + $page->assign('uploaded_f', PlUpload::listFilenames(S::v('forlife'), 'emails.send')); } } } else { + PlUpload::clear(S::v('forlife'), 'emails.send'); $_REQUEST['bcc'] = S::v('bestalias').'@'.$globals->mail->domain; } diff --git a/templates/emails/send.tpl b/templates/emails/send.tpl index f24d0aa..1b4f2d1 100644 --- a/templates/emails/send.tpl +++ b/templates/emails/send.tpl @@ -192,7 +192,26 @@ -- {$smarty.session.prenom} {$smarty.session.nom} {/if} -
+ + {if $uploaded_f|@count} +
+ {icon name=email_attach} Pièce jointe :  + {$uploaded_f[0]} + + Supprimer + +
+ {/if} +
{icon name=email_attach} Ajouter une pièce jointe :