From 140160e332d0ccf153e6e7487b2ec99402e6096f Mon Sep 17 00:00:00 2001 From: uckelman Date: Fri, 30 Apr 2010 21:10:36 +0000 Subject: Refactored. git-svn-id: https://vassalengine.svn.sourceforge.net/svnroot/vassalengine/site-src/trunk@6794 67b53d14-2c14-4ace-a08f-0dab2b34000c --- src/F2M.php | 237 ---------------------------------------------- src/forum_post_delete.php | 18 ++++ src/forum_post_send.php | 229 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 247 insertions(+), 237 deletions(-) delete mode 100644 src/F2M.php create mode 100644 src/forum_post_delete.php create mode 100644 src/forum_post_send.php diff --git a/src/F2M.php b/src/F2M.php deleted file mode 100644 index 7e35f60..0000000 --- a/src/F2M.php +++ /dev/null @@ -1,237 +0,0 @@ -'; - 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 = null; - if ($mode == 'edit') { - # Post time is NOT updated on edit, so we get the current time - $time = time(); - } - else { - $time = $phpbb->getPostTime($postId); - if ($time === false) { - throw new Exception('no post time: ' . $postId); - } - } - - $date = date(DATE_RFC2822, $time); - - $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']; - } - - $editId = $bridge->reserveEditId($postId); - $messageId = build_message_id($postId, $editId, - $time, $_SERVER['SERVER_NAME']); - - $mailer = Mail::factory('sendmail'); - - # Register the message - $seen = !$bridge->registerByEditId($editId, $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($editId); - 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->removePost($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); -} - -?> diff --git a/src/forum_post_delete.php b/src/forum_post_delete.php new file mode 100644 index 0000000..068c041 --- /dev/null +++ b/src/forum_post_delete.php @@ -0,0 +1,18 @@ +removePost($postId); +} + +?> diff --git a/src/forum_post_send.php b/src/forum_post_send.php new file mode 100644 index 0000000..cd103e7 --- /dev/null +++ b/src/forum_post_send.php @@ -0,0 +1,229 @@ +'; + 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 = null; + if ($mode == 'edit') { + # Post time is NOT updated on edit, so we get the current time + $time = time(); + } + else { + $time = $phpbb->getPostTime($postId); + if ($time === false) { + throw new Exception('no post time: ' . $postId); + } + } + + $date = date(DATE_RFC2822, $time); + + $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']; + } + + $editId = $bridge->reserveEditId($postId); + $messageId = build_message_id($postId, $editId, + $time, $_SERVER['SERVER_NAME']); + + $mailer = Mail::factory('sendmail'); + + # Register the message + $seen = !$bridge->registerByEditId($editId, $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($editId); + throw $e; + } +} + +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); +} + +?> -- cgit v1.2.3