Ooops.
[platal.git] / classes / plmailer.php
index 02ed8af..e928a0a 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2009 Polytechnique.org                              *
+ *  Copyright (C) 2003-2011 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
@@ -50,7 +50,7 @@ class PlMail extends Smarty
         $this->assign_by_ref('globals', $globals);
     }
 
-    public static function &get(&$mailer, $tpl)
+    public static function &get($mailer, $tpl)
     {
         static $plmail;
         if (!isset($plmail) || $plmail->tpl != $tpl) {
@@ -71,7 +71,7 @@ class PlMail extends Smarty
     }
 
     /** used to remove the empty lines due to {from ...}, {to ...} ... functions */
-    static public function mail_format($output, &$smarty)
+    static public function mail_format($output, $smarty)
     {
         return "\n".trim($output)."\n";
     }
@@ -91,7 +91,7 @@ class PlMail extends Smarty
      * {from full=...} for an already formatted address
      * {from addr=... [text=...]} else
      */
-    public function setFrom($params, &$smarty)
+    public function setFrom($params, $smarty)
     {
         $smarty->mailer->setFrom(PlMail::format_addr($params));
     }
@@ -100,7 +100,7 @@ class PlMail extends Smarty
      * {to full=...} for an already formatted address
      * {to addr=... [text=...]} else
      */
-    public function addTo($params, &$smarty)
+    public function addTo($params, $smarty)
     {
         $smarty->mailer->addTo(PlMail::format_addr($params));
     }
@@ -109,7 +109,7 @@ class PlMail extends Smarty
      * {cc full=...} for an already formatted address
      * {cc addr=... [text=...]} else
      */
-    public function addCc($params, &$smarty)
+    public function addCc($params, $smarty)
     {
         $smarty->mailer->addCc(PlMail::format_addr($params));
     }
@@ -118,7 +118,7 @@ class PlMail extends Smarty
      * {bcc full=...} for an already formatted address
      * {bcc addr=... [text=...]} else
      */
-    public function addBcc($params, &$smarty)
+    public function addBcc($params, $smarty)
     {
         $smarty->mailer->addBcc(PlMail::format_addr($params));
     }
@@ -126,7 +126,7 @@ class PlMail extends Smarty
     /** template function : subject.
      * {subject text=...}
      */
-    public function setSubject($params, &$smarty)
+    public function setSubject($params, $smarty)
     {
         $smarty->mailer->setSubject($params['text']);
     }
@@ -134,7 +134,7 @@ class PlMail extends Smarty
     /** template function : add_header.
      * {add_header name=... value=...}
      */
-    public function addHeader($params, &$smarty)
+    public function addHeader($params, $smarty)
     {
         $smarty->mailer->addHeader($params['name'], $params['value']);
     }
@@ -176,7 +176,11 @@ class PlMailer extends Mail_Mime {
         if ($email instanceof PlUser) {
             $email = self::formatUser($email);
         }
-        return preg_replace('!(^|, *)([^<"]+?) *(<[^>]*>)!u', '\1"\2" \3', $email);
+        $email = preg_replace('!(^|, *)([^<"]+?) *(<[^>]*>)!u',
+                              '\1 "\2" \3', $email);
+        return preg_replace('/"([^<]+)"/e',
+                            '"\\"" . PlMailer::encodeStringQP("\1") . "\\""',
+                            $email);
     }
 
     public function addTo($email)
@@ -189,6 +193,12 @@ class PlMailer extends Mail_Mime {
         }
     }
 
+    public function setTo($email)
+    {
+        $email = $this->correct_emails($email);
+        $this->_headers['To'] = $email;
+    }
+
     public function addCc($email)
     {
         return parent::addCc($this->correct_emails($email));
@@ -204,6 +214,16 @@ class PlMailer extends Mail_Mime {
         return parent::setFrom($this->correct_emails($email));
     }
 
+    static function encodeStringQP($string)
+    {
+        if (!preg_match('/^[\x20-\x7e]*$/', $string)) {
+            $string = '=?UTF-8?Q?' . preg_replace('/[^\x21-\x3C\x3e\x40-\x7e]/e', 'PlMailer::encodeQP("\0")', $string)
+                     . '?=';
+        }
+        return $string;
+    }
+
+
     static function encodeQP($char)
     {
         return sprintf('=%02X', ord($char));
@@ -211,11 +231,7 @@ class PlMailer extends Mail_Mime {
 
     public function setSubject($subject)
     {
-        if (!preg_match('/^[\x20-\x7e]*$/', $subject)) {
-            $subject = '=?UTF-8?Q?' . preg_replace('/[^\x21-\x3C\x3e-\x7e]/e', 'PlMailer::encodeQP("\0")', $subject)
-                     . '?=';
-        }
-        return parent::setSubject($subject);
+        return parent::setSubject(self::encodeStringQP($subject));
     }
 
     public function addHeader($hdr,$val)
@@ -245,7 +261,7 @@ class PlMailer extends Mail_Mime {
         }
     }
 
-    public function addUploadAttachment(PlUpload &$upload, $name)
+    public function addUploadAttachment(PlUpload $upload, $name)
     {
         $encoding = $upload->isType('text') ? 'quoted-printable' : 'base64';
         $this->addAttachment($upload->getContents(), $upload->contentType(), $name, false, $encoding);
@@ -315,9 +331,9 @@ class PlMailer extends Mail_Mime {
         }
     }
 
-    public function sendTo(PlUser &$user)
+    public function sendTo(PlUser $user)
     {
-        $this->addTo($user);
+        $this->setTo($user);
         $this->assign_by_ref('user', $user);
         return $this->send($user->isEmailFormatHtml());
     }