summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/PhpBB3.php105
-rw-r--r--test/PhpBB3Test.php21
2 files changed, 125 insertions, 1 deletions
diff --git a/src/PhpBB3.php b/src/PhpBB3.php
index 0adf6d1..7fb0f80 100644
--- a/src/PhpBB3.php
+++ b/src/PhpBB3.php
@@ -48,6 +48,111 @@ class PhpBB3 {
return $row;
}
+ public function forumExists($forumId) {
+ global $db;
+
+ if (!is_int($forumId)) {
+ trigger_error('forum id is not an integer', E_USER_ERROR);
+ }
+
+ if ($forumId < 0) {
+ trigger_error('forum id is negative', E_USER_ERROR);
+ }
+
+ $sql = 'SELECT 1 FROM ' . FORUMS_TABLE . ' ' .
+ 'WHERE forum_id = ' . $forumId . ' LIMIT 1';
+
+ $result = $db->sql_query($sql);
+
+ $rows = $db->sql_fetchrowset($result);
+ $db->sql_freeresult($result);
+
+ switch (count($rows)) {
+ case 0:
+ return false;
+
+ case 1:
+ return true;
+
+ default:
+ # Should be impossible due to LIMIT 1.
+ trigger_error("Too many rows returned: $sql", E_USER_ERROR);
+ break;
+ }
+ }
+
+ public function postMessage($postType, $forumId, $topicId, $msg) {
+ if ($postType === null) {
+ trigger_error('post type is null', E_USER_ERROR);
+ }
+
+ if (!is_int($forumId)) {
+ trigger_error('forum id is not an integer', E_USER_ERROR);
+ }
+
+ if ($forumId < 0) {
+ trigger_error('forum id is negative', E_USER_ERROR);
+ }
+
+ if (!$this->forumExists($forumId)) {
+ trigger_error('forum does not exist: ' . $forumId, E_USER_ERROR);
+ }
+
+ if ($topicId != null) {
+ if (!is_int($topicId)) {
+ trigger_error('topic id is not an integer', E_USER_ERROR);
+ }
+
+ if ($topicId < 0) {
+ trigger_error('topic id is negative', E_USER_ERROR);
+ }
+ }
+
+ if ($msg === null) {
+ trigger_error('message is null', E_USER_ERROR);
+ }
+
+ $subject = $msg->getSubject();
+ $message = 'foo'; # FIXME: fill in with acutal message contents
+
+ $userId = $phpbb->getUserId($msg->getFrom());
+ $userName = $phpbb->getUserName($userId);
+
+ $poll = $uid = $bitfield = '';
+ $topicId = -1;
+ $postId = null;
+
+ $data = array(
+ 'forum_id' => $forumId,
+ 'topic_id' => &$topicId,
+ 'post_id' => &$postId,
+ 'icon_id' => false,
+
+ 'enable_bbcode' => true,
+ 'enable_smilies' => true,
+ 'enable_urls' => true,
+ 'enable_sig' => true,
+
+ 'message' => $message,
+ 'message_md5' => md5($message),
+
+ 'bbcode_bitfield' => $bitfield, # ?
+ 'bbcode_uid' => $uid, # ?
+
+ 'post_edit_locked' => 0,
+ 'topic_title' => $subject,
+ 'notify_set' => false,
+ 'notify' => false,
+ 'post_time' => 0,
+ 'forum_name' => '',
+ 'enable_indexing' => true,
+ );
+
+ submit_post($postType, $subject, $userName, POST_NORMAL, $poll, $data);
+
+ return $postId;
+ }
+
protected function get_exactly_one_row($sql) {
global $db;
diff --git a/test/PhpBB3Test.php b/test/PhpBB3Test.php
index c86fa5d..b75929f 100644
--- a/test/PhpBB3Test.php
+++ b/test/PhpBB3Test.php
@@ -76,8 +76,27 @@ EOF;
public function providerGetTopicAndForumIds() {
return array(
- array(0, null, 'PHPUnit_Framework_Error'),
+ array('bogus', null, 'PHPUnit_Framework_Error'),
array(2, array('topic_id' => 2, 'forum_id' => 2), null)
);
}
+
+ /**
+ * @dataProvider providerForumExists
+ */
+ public function testForumExists($forum_id, $expected, $ex) {
+ if ($ex) $this->setExpectedException($ex);
+ $run = 'forumExists(' . $forum_id . ')';
+ $this->assertEquals($expected, $this->exec_kludge($run));
+ }
+
+ public function providerForumExists() {
+ return array(
+ array('bogus', null, 'PHPUnit_Framework_Error'),
+ array(3.5, null 'PHPUnit_Framework_Error'),
+ array(-1, null 'PHPUnit_Framework_Error'),
+ array(1, false, null),
+ array(2, true, null)
+ );
+ }
}