Non significant spaces suck.
[platal.git] / classes / plmailer.php
index 99d55f5..eb26208 100644 (file)
@@ -38,7 +38,7 @@ class PlMail extends Smarty
         $this->template_dir  = $globals->spoolroot . "/templates/";
         $this->compile_dir   = $globals->spoolroot . "/spool/mails_c/";
         $this->config_dir    = $globals->spoolroot . "/configs/";
-        
+
 
         $this->register_outputfilter(Array($this, 'mail_format'));
         $this->register_function('from',    Array($this, 'setFrom'));
@@ -59,17 +59,20 @@ class PlMail extends Smarty
         return $plmail;
     }
 
-    public function run($html)
+    public function run($version)
     {
-        $this->assign('html_version', $html);
+        $this->assign('mail_part', $version);
         $text = $this->fetch($this->tpl);
+        if ($version == 'text') {
+            return wordwrap($text, 78);
+        }
         return $text;
     }
 
     /** used to remove the empty lines due to {from ...}, {to ...} ... functions */
     static public function mail_format($output, &$smarty)
     {
-        return wordwrap("\n".trim($output)."\n",75);
+        return "\n".trim($output)."\n";
     }
 
     static protected function format_addr(&$params)
@@ -120,7 +123,7 @@ class PlMail extends Smarty
     }
 
     /** template function : subject.
-     * {subject text=...} 
+     * {subject text=...}
      */
     public function setSubject($params, &$smarty)
     {
@@ -147,12 +150,13 @@ class PlMailer extends Mail_Mime {
     private $mail;
     private $page    = null;
     private $charset;
+    private $wiki    = null;
 
     function __construct($tpl = null, $charset = "UTF-8")
     {
         $this->charset = $charset;
         $this->Mail_Mime("\n");
-        $this->mail = @Mail::factory('sendmail', Array('sendmail_args' => '-oi'));
+        $this->mail = Mail::factory('sendmail', Array('sendmail_args' => '-oi'));
         if (!is_null($tpl)) {
             $this->page =& PlMail::get($this, $tpl);
         }
@@ -163,7 +167,7 @@ class PlMailer extends Mail_Mime {
      */
     private function correct_emails($email)
     {
-        return preg_replace('!(^|, *)([^<"]+?) *(<[^>]*>)!', '\1"\2" \3', $email);
+        return preg_replace('!(^|, *)([^<"]+?) *(<[^>]*>)!u', '\1"\2" \3', $email);
     }
 
     public function addTo($email)
@@ -218,13 +222,19 @@ 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)) {
             $this->page->assign($var, $value);
         }
     }
-    
+
     public function assign_by_ref($var, &$value)
     {
         if (!is_null($this->page)) {
@@ -238,27 +248,42 @@ class PlMailer extends Mail_Mime {
             $this->page->register_modifier($var, $callback);
         }
     }
-    
+
     public function register_function($var, $callback)
     {
         if (!is_null($this->page)) {
             $this->page->register_function($var, $callback);
         }
     }
-    
+
+    public function setWikiBody($wiki)
+    {
+        $this->wiki = $wiki;
+    }
+
     private function processPage($with_html = true)
     {
-        $level = error_reporting(0);
         if (!is_null($this->page)) {
-            $this->setTxtBody($this->page->run(false));
-            if ($with_html) {
-                $html = trim($this->page->run(true));
-                if (!empty($html)) {
-                    $this->setHtmlBody($html);
+            $level = error_reporting(0);
+            $this->page->run('head'); // process page headers
+            $this->wiki = trim($this->page->run('wiki')); // get wiki
+            if (!$this->wiki) {
+                $this->setTxtBody($this->page->run('text'));
+                if ($with_html) {
+                    $html = trim($this->page->run('html'));
+                    if (!empty($html)) {
+                        $this->setHtmlBody($html);
+                    }
                 }
             }
+            error_reporting($level);
+        }
+        if ($this->wiki) {
+            $this->setTxtBody(MiniWiki::WikiToText($this->wiki, true, 0, 78));
+            if ($with_html) {
+                $this->setHtmlBody(MiniWiki::WikiToHtml($this->wiki, true));
+            }
         }
-        error_reporting($level);
     }
 
     public function send($with_html = true)
@@ -281,14 +306,15 @@ class PlMailer extends Mail_Mime {
         if(empty($addrs)) {
             return false;
         }
-    
+
         $dests = Array();
         foreach($addrs as $a) {
             $dests[] = "{$a->mailbox}@{$a->host}";
         }
-    
+
         // very important to do it in THIS order very precisely.
         $body = $this->get(array('text_charset' => $this->charset,
+                                 'text_encoding' => '8bit',
                                  'html_charset' => $this->charset,
                                  'head_charset' => $this->charset));
         $hdrs = $this->headers();