';
var_dump($data);
var_dump($post_data);
print '
';
# Sanity check
if (!in_array($mode, array('post', 'reply', 'quote', 'edit'))) {
throw new Exception('unrecognized mode: ' . $mode);
}
require_once('Mail.php');
require_once(__DIR__ . '/BBCodeParser.php');
require_once(__DIR__ . '/Bridge.php');
require_once(__DIR__ . '/PhpBB3.php');
require_once(__DIR__ . '/Util.php');
$postId = $data['post_id'];
$forumId = $data['forum_id'];
$bridge = new Bridge();
$to = $bridge->getLists($forumId);
if (count($to) == 0) {
# No lists to send to, bail out.
return;
}
$to = implode(', ', $to);
$userName = $user->data['username'];
$userEmail = $user->data['user_email'];
$from = utf8_quote($userName) . ' <' . $userEmail . '>';
$sender = 'forum@test.nomic.net';
$subject = utf8_quote($post_data['post_subject']);
$phpbb = new PhpBB3();
$time = $phpbb->getPostTime($postId);
if ($time === false) {
throw new Exception('no post time: ' . $postId);
}
$date = date(DATE_RFC2822, $time);
$messageId = build_message_id($time, $postId, $_SERVER['SERVER_NAME']);
$inReplyTo = null;
$references = null;
if ($mode == 'reply' || $mode == 'quote') {
$firstId = $data['topic_first_post_id'];
$firstMessageId = $bridge->getMessageId($firstId);
if ($firstMessageId === false) {
throw new Exception('unrecognized post id: ' . $firstId);
}
$inReplyTo = $references = $firstMessageId;
}
else if ($mode == 'edit') {
$inReplyTo = $bridge->getMessageId($postId);
}
$forumURL = 'http://' . $_SERVER['SERVER_NAME'] .
dirname($_SERVER['SCRIPT_NAME']);
# Assemble the message headers
$headers = array(
'To' => $to,
'From' => $from,
'Subject' => $subject,
'Date' => $date,
'Message-Id' => $messageId,
'X-BeenThere' => $forumURL
);
if ($inReplyTo !== null) {
$headers['In-Reply-To'] = $inReplyTo;
}
if ($references !== null) {
$headers['References'] = $references;
}
# Build the message body
$parser = new BBCodeParser();
$text = $parser->parse($data['message'], $data['bbcode_uid']);
if ($mode == 'edit') {
$edit_notice = << 'multipart/mixed');
$mime = new Mail_mimePart('', $params);
# Build the main body
build_text_part($mime, $text);
# Build each attachment
foreach ($data['attachment_data'] as $a) {
$attachId = $a['attach_id'];
$adata = $phpbb->getAttachmentData($attachId);
if ($adata === false) {
throw new Exception('unrecognized attachment id: ' . $attachId);
}
$afile = $phpbb_root_path . $config['upload_path'] . '/' .
utf8_basename($adata['physical_filename']);
$bytes = file_get_contents($afile);
if ($bytes === false) {
throw new Exception('failed to read file: ' . $afile);
}
build_attachment(
$mime,
$adata['mimetype'],
$adata['real_filename'],
$adata['attach_comment'],
$bytes
);
}
# Build footer
build_text_part($mime, $footer);
# Encode the message
$msg = $mime->encode();
$headers = array_merge($headers, $msg['headers']);
$body = $msg['body'];
}
$mailer = Mail::factory('sendmail');
# FIXME: edited messages break the bijection between post and message ids!
# Register the message
$seen = !$bridge->registerMessage($postId, $messageId, $inReplyTo);
if ($seen) {
throw new Exception('message id already seen: ' . $messageId);
}
try {
# Send the message
$err = $mailer->send($to, $headers, $body);
if (PEAR::isError($err)) {
throw new Exception('Mail::send error: ' . $err->toString());
}
}
catch (Exception $e) {
# Bridging failed, unregister message.
$bridge->unregisterMessage($messageId);
throw $e;
}
}
# TODO: call this from handle_post_delete in posting.php
function remove_post($postId) {
require_once(__DIR__ . '/Bridge.php');
$bridge = new Bridge();
$bridge->unregisterPost($postId);
}
function build_text_part($mime, $text) {
$params = array(
'content_type' => 'text/plain',
'charset' => 'utf-8',
'encoding' => '8bit',
'disposition' => 'inline'
);
$mime->addSubPart($text, $params);
}
function build_attachment($mime, $type, $filename, $descr, $data) {
$params = array(
'content_type' => $type,
'encoding' => 'base64',
'disposition' => 'attachment',
'dfilename' => $filename,
'description' => $descr
);
$mime->addSubPart($data, $params);
}
?>