blob: 08963248fcce32462e90b23848eb6991c63ab60b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
<?php
# TODO: logging!
# TODO: translation of quoting to bbcode?
try {
require_once(__DIR__ . '/Bridge.php');
require_once(__DIR__ . '/MailmanLib.php');
require_once(__DIR__ . '/MailmanMessage.php');
require_once(__DIR__ . '/PhpBB3.php');
# Read the message from STDIN
$url = 'php://stdin';
$input = read_raw_message($url);
$msg = new MailmanMessage($input);
$messageId = $msg->getMessageId();
$inReplyTo = $msg->getInReplyTo();
$rererences = $msg->getReferences();
$bridge = new Bridge();
$editId = $bridge->registerByMessageId($messageId, $inReplyTo);
try {
if ($editId === false) {
# This message has already been processed, bail out
print 'Message id already seen, skipping: ' . $messageId . "\n";
exit;
}
$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);
}
$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';
}
else {
# A message starting a new topic, post to default forum for its source
$forumId = $bridge->getDefaultForumId($msg->getSource());
if ($forumId === false) {
throw new Exception('unrecognized source: ' . $msg->getSource());
}
$postType = 'post';
}
# FIXME: the subject and body may be charset encoded---need to decode these
# before posting!
# Post the message to the forum
$postId = $phpbb->postMessage($postType, $forumId, $topicId, $msg);
$bridge->setPostId($messageId, $postId);
}
catch (Exception $e) {
# Bridging failed, unregister message.
$bridge->unregisterMessage($editId);
throw $e;
}
}
catch (Exception $e) {
print "$e\n";
}
?>
|