<?php
/***************************************************************************
- * Copyright (C) 2003-2007 Polytechnique.org *
+ * Copyright (C) 2003-2009 Polytechnique.org *
* http://opensource.polytechnique.org/ *
* *
* This program is free software; you can redistribute it and/or modify *
$this->template_dir = $globals->spoolroot . "/templates/";
$this->compile_dir = $globals->spoolroot . "/spool/mails_c/";
$this->config_dir = $globals->spoolroot . "/configs/";
-
+ array_unshift($this->plugins_dir, $globals->spoolroot."/plugins/");
$this->register_outputfilter(Array($this, 'mail_format'));
$this->register_function('from', Array($this, 'setFrom'));
$this->register_function('bcc', Array($this, 'addBcc'));
$this->register_function('subject', Array($this, 'setSubject'));
$this->register_function('add_header', Array($this, 'addHeader'));
+ $this->assign_by_ref('globals', $globals);
}
public static function &get(&$mailer, $tpl)
{
$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)
}
/** template function : subject.
- * {subject text=...}
+ * {subject text=...}
*/
public function setSubject($params, &$smarty)
{
}
}
+ static private function formatUser(PlUser $user)
+ {
+ return '"' . $user->fullName() . '" <' . $user->bestEmail() . '>';
+ }
+
/**
* converts all : Foo Bar Baz <quux@foobar.org> into "Foo Bar Baz" <quux@foobar.org> which is RFC compliant
*/
private function correct_emails($email)
{
+ if ($email instanceof PlUser) {
+ $email = self::formatUser($email);
+ }
return preg_replace('!(^|, *)([^<"]+?) *(<[^>]*>)!u', '\1"\2" \3', $email);
}
return parent::setFrom($this->correct_emails($email));
}
+ static function encodeQP($char)
+ {
+ return sprintf('=%02X', ord($char));
+ }
+
+ 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);
+ }
+
public function addHeader($hdr,$val)
{
switch($hdr) {
$this->page->assign($var, $value);
}
}
-
+
public function assign_by_ref($var, &$value)
{
if (!is_null($this->page)) {
$this->page->register_modifier($var, $callback);
}
}
-
+
public function register_function($var, $callback)
{
if (!is_null($this->page)) {
{
$this->wiki = $wiki;
}
-
+
private function processPage($with_html = true)
{
- $level = error_reporting(0);
if (!is_null($this->page)) {
- $level = error_reporting(0);
+ global $globals;
+ if (!($globals->debug & DEBUG_SMARTY)) {
+ $level = error_reporting(0);
+ }
+ $this->page->assign_by_ref('globals', $globals);
$this->page->run('head'); // process page headers
$this->wiki = trim($this->page->run('wiki')); // get wiki
if (!$this->wiki) {
}
}
}
- error_reporting($level);
+ if (!($globals->debug & DEBUG_SMARTY)) {
+ error_reporting($level);
+ }
}
if ($this->wiki) {
- $this->setTxtBody(MiniWiki::WikiToText($this->wiki, true, 0, 78));
+ $this->setTxtBody(MiniWiki::WikiToText($this->wiki, false, 0, 78));
if ($with_html) {
- $this->setHtmlBody(MiniWiki::WikiToHtml($this->wiki, true));
+ $this->setHtmlBody('<html><body>' . MiniWiki::WikiToHtml($this->wiki, true) . '</body></html>');
}
}
}
+ public function sendTo(PlUser &$user)
+ {
+ $this->addTo($user);
+ $this->assign_by_ref('user', $user);
+ return $this->send($user->isEmailFormatHtml());
+ }
+
public function send($with_html = true)
{
$this->processPage($with_html);
- if (S::v('forlife')) {
- global $globals;
- $this->addHeader('X-Org-Mail', S::v('forlife') . '@' . $globals->mail->domain);
+ if (S::user()) {
+ $this->addHeader('X-Org-Mail', S::user()->forlifeEmail());
}
$addrs = Array();
foreach(Array('To', 'Cc', 'Bcc') as $hdr) {
if(empty($addrs)) {
return false;
}
-
+
$dests = Array();
foreach($addrs as $a) {
$dests[] = "{$a->mailbox}@{$a->host}";
}
-
+
+ // Support for "catch-all" mail address : all emails are sent to
+ // admin_email instead of actual recipients
+ global $globals;
+ if($globals->catchmail) {
+ require_once 'Mail/RFC822.php';
+ if(@Mail_RFC822::isValidInetAddress($globals->admin_email)){
+ $dests = array($globals->admin_email);
+ }else if(@Mail_RFC822::isValidInetAddress($globals->core->admin_email)){
+ $dests = array($globals->core->admin_email);
+ }
+ }
+
// very important to do it in THIS order very precisely.
$body = $this->get(array('text_charset' => $this->charset,
'text_encoding' => '8bit',