diff options
Diffstat (limited to 'src/list_post_receive.php')
-rw-r--r-- | src/list_post_receive.php | 90 |
1 files changed, 11 insertions, 79 deletions
diff --git a/src/list_post_receive.php b/src/list_post_receive.php index 2072742..2c5ddc2 100644 --- a/src/list_post_receive.php +++ b/src/list_post_receive.php @@ -20,97 +20,29 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # -# TODO: logging! -# TODO: Refactor postMessage(). - require_once('Log.php'); $logger = &Log::singleton('file', '/var/log/listbridge', 'one'); try { - require_once('/var/www/bridge/src/Bridge.php'); - require_once('/var/www/bridge/src/MailmanLib.php'); - require_once('/var/www/bridge/src/MailmanMessage.php'); - require_once('/var/www/bridge/src/PhpBB3.php'); - - # Read the message from STDIN -# $url = 'php://stdin'; - -# $input = read_raw_message($url); -# $msg = new MailmanMessage($input); - if (!isset($_POST['message'])) { throw new Exception('No message in POST'); } - $msg = new MailmanMessage($_POST['message']); - - $messageId = $msg->getMessageId(); - $inReplyTo = $msg->getInReplyTo(); - $rererences = $msg->getReferences(); - $soruce = $msg->getSource(); - - $logger->info($messageId . ' received from ' . $source); - - $bridge = new Bridge(); - $editId = $bridge->registerByMessageId($messageId, $inReplyTo); - - if ($editId === false) { - # This message has already been processed, bail out - $logger->info($messageId . ' already seen, skipping'); - exit; - } - - try { - $phpbb = new PhpBB3(); - - $forumId = $topicId = null; - $postType = null; - - if ($inReplyTo) { - # Possibly a reply to an existing topic - $parentId = $bridge->getPostId($inReplyTo); - if ($parentId === false) { - throw new Exception('unrecognized Reply-To: ' . $inReplyTo); - } + require_once(__DIR__ . '/BridgeConf.php'); + require_once(__DIR__ . '/BridgeImpl.php'); + require_once(__DIR__ . '/PhpBB3Conf.php'); + require_once(__DIR__ . '/PhpBB3Impl.php'); + require_once(__DIR__ . '/MailmanToPhpBB3.php'); - $ids = $phpbb->getTopicAndForumIds($parentId); - if ($ids === false) { - throw new Exception('unrecognized parent id: ' . $parentId); - } - - # Found the parent's forum and topic, post to those - $forumId = $ids['forum_id']; - $topicId = $ids['topic_id']; - $postType = 'reply'; - - $logger->info($messageId . ' replies to ' . $parentId); - } - else { - # A message starting a new topic, post to default forum for its source - $forumId = $bridge->getDefaultForumId($source); - if ($forumId === false) { - throw new Exception('unrecognized source: ' . $source); - } - - $postType = 'post'; + $msg = new MailmanMessage($_POST['message']); - $logger->info($messageId . ' is a new post'); - } + $db = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB, DB_USER, DB_PASS); + $bridge = new BridgeImpl($db); - $logger->info( - $messageId . ' will be posted to ' . $forumId . ':' . $topicId); - - # Post the message to the forum - $postId = $phpbb->postMessage($postType, $forumId, $topicId, $msg); - $bridge->setPostId($messageId, $postId); + $phpbb = new PhpBB3Impl(); - $logger->info($messageId . ' posted as ' . $postId); - } - catch (Exception $e) { - # Bridging failed, unregister message. - $bridge->unregisterMessage($editId); - throw $e; - } + $conduit = new MailmanToPhpBB3($bridge, $phpbb, $logger); + $conduit->process($msg); } catch (Exception $e) { $logger->err($e); |