From bae4e7aa3345ca56dd86ca5fb84abbde8ae5383b Mon Sep 17 00:00:00 2001 From: uckelman Date: Sun, 11 Apr 2010 15:35:25 +0000 Subject: Added topicExists(). git-svn-id: https://vassalengine.svn.sourceforge.net/svnroot/vassalengine/site-src/trunk@6655 67b53d14-2c14-4ace-a08f-0dab2b34000c --- src/PhpBB3.php | 43 +++++++++++++++++++++++++++++++++++++++---- test/PhpBB3Test.php | 19 +++++++++++++++++++ 2 files changed, 58 insertions(+), 4 deletions(-) diff --git a/src/PhpBB3.php b/src/PhpBB3.php index b12841f..5a60712 100644 --- a/src/PhpBB3.php +++ b/src/PhpBB3.php @@ -81,6 +81,39 @@ class PhpBB3 { } } + public function topicExists($topicId) { + global $db; + + 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); + } + + $sql = 'SELECT 1 FROM ' . TOPICS_TABLE . ' ' . + 'WHERE topic_id = ' . $topicId . ' 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 != 'post' && $postType != 'reply') { trigger_error('bad post type: ' . $postType, E_USER_ERROR); @@ -94,10 +127,12 @@ class PhpBB3 { trigger_error('forum does not exist: ' . $forumId, E_USER_ERROR); } - if ($topicId !== null) { - if (!is_int($topicId) || $topicId < 0) { - trigger_error('bad topic id: ' . $topicId, E_USER_ERROR); - } + if (!is_int($topicId)) { + trigger_error('bad topic id: ' . $topicId, E_USER_ERROR); + } + + if ($postType == 'reply' && !$this->topicExists($topicId)) { + trigger_error('topic does not exist: ' . $topicId, E_USER_ERROR); } if ($msg === null) { diff --git a/test/PhpBB3Test.php b/test/PhpBB3Test.php index a853b8b..1ff9b88 100644 --- a/test/PhpBB3Test.php +++ b/test/PhpBB3Test.php @@ -99,4 +99,23 @@ EOF; array(2, true, null) ); } + + /** + * @dataProvider providerTopicExists + */ + public function testTopicExists($topic_id, $expected, $ex) { + if ($ex) $this->setExpectedException($ex); + $run = 'topicExists(' . $topic_id . ')'; + $this->assertEquals($expected, $this->exec_kludge($run)); + } + + public function providerTopicExists() { + return array( + array('bogus', null, 'PHPUnit_Framework_Error'), + array(3.5, null, 'PHPUnit_Framework_Error'), + array(-1, null, 'PHPUnit_Framework_Error'), + array(0, false, null), + array(1, true, null) + ); + } } -- cgit v1.2.3