X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=classes%2Fplmailer.php;h=b65d257fea2c294610d249640bd674a1e2869f4f;hb=2ab7a09f6f1ec835efb29a86c25edc43729b2b8f;hp=151df428c30655d4e96ddf481f4e2a76d6bf5f4a;hpb=ea626742ce4f552ebb072de4dd419379baa03495;p=platal.git diff --git a/classes/plmailer.php b/classes/plmailer.php index 151df42..b65d257 100644 --- a/classes/plmailer.php +++ b/classes/plmailer.php @@ -28,17 +28,17 @@ class PlMail extends Smarty private $tpl; private $mailer = null; - function __construct(&$mailer, $tpl) + function __construct($tpl) { global $globals; $this->tpl = $tpl; - $this->mailer =& $mailer; $this->caching = false; $this->compile_check = true; $this->template_dir = $globals->spoolroot . "/templates/"; - $this->compile_dir = $globals->spoolroot . "/spool/templates_c/"; + $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')); @@ -49,10 +49,21 @@ class PlMail extends Smarty $this->register_function('add_header', Array($this, 'addHeader')); } - public function run($html) + public static function &get(&$mailer, $tpl) { - $this->assign('html_version', $html); - return $this->fetch($this->tpl); + static $plmail; + if (!isset($plmail) || $plmail->tpl != $tpl) { + $plmail = new PlMail($tpl); + } + $plmail->mailer =& $mailer; + return $plmail; + } + + public function run($version) + { + $this->assign('mail_part', $version); + $text = $this->fetch($this->tpl); + return $text; } /** used to remove the empty lines due to {from ...}, {to ...} ... functions */ @@ -136,14 +147,15 @@ class PlMailer extends Mail_Mime { private $mail; private $page = null; private $charset; + private $wiki = null; - function __construct($tpl = null, $charset = "ISO-8859-15") + 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 = new PlMail($this, $tpl); + $this->page =& PlMail::get($this, $tpl); } } @@ -152,7 +164,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) @@ -207,6 +219,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)) { @@ -234,17 +252,35 @@ class PlMailer extends Mail_Mime { $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)); + } } } @@ -259,7 +295,10 @@ class PlMailer extends Mail_Mime { foreach(Array('To', 'Cc', 'Bcc') as $hdr) { if(isset($this->_headers[$hdr])) { require_once 'Mail/RFC822.php'; - $addrs = array_merge($addrs, @Mail_RFC822::parseAddressList($this->_headers[$hdr])); + $parsed = @Mail_RFC822::parseAddressList($this->_headers[$hdr]); + if (is_array($parsed)) { + $addrs = array_merge($addrs, $parsed); + } } } if(empty($addrs)) { @@ -273,6 +312,7 @@ class PlMailer extends Mail_Mime { // 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(); @@ -284,4 +324,5 @@ class PlMailer extends Mail_Mime { } } +// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: ?>