function test_everything()
 {
     // Add a bunch of comments
     ouwiki_add_comment(13, 'frog', 'Frogs', 'My happy comment', 'This comment has a title');
     ouwiki_add_comment(13, 'frog', 'Frogs', null, 'This one does not');
     ouwiki_add_comment(13, null, null, null, 'This comment is on the main page section');
     ouwiki_add_comment(13, 'zombie', 'Zombies', null, 'This one is on a different section');
     ouwiki_add_comment(66, null, null, null, 'This one is on another page');
     ouwiki_add_comment(66, 'frog', 'Frogs', null, 'This one is on another page but same section');
     ouwiki_add_comment(13, null, null, null, 'Main 2', 2);
     ouwiki_add_comment(13, null, null, null, 'Main 3', OUWIKI_SYSTEMUSER);
     ouwiki_add_comment(13, null, null, null, 'Main 4');
     ouwiki_add_comment(13, 'frog', 'Frogs', null, 'Frog 3');
     ouwiki_add_comment(13, 'frog', 'Frogs', null, 'Frog 4');
     ouwiki_add_comment(13, 'frog', 'Frogs', null, 'Frog 5');
     // Check sections
     $sections = get_records('ouwiki_sections');
     $this->assertEqual(count($sections), 5);
     $this->assertEqual((array) array_shift($sections), array('pageid' => 13, 'xhtmlid' => 'frog', 'title' => 'Frogs', 'id' => 1));
     $this->assertEqual((array) array_shift($sections), array('pageid' => 13, 'xhtmlid' => null, 'title' => null, 'id' => 2));
     $this->assertEqual((array) array_shift($sections), array('pageid' => 13, 'xhtmlid' => 'zombie', 'title' => 'Zombies', 'id' => 3));
     $this->assertEqual((array) array_shift($sections), array('pageid' => 66, 'xhtmlid' => null, 'title' => null, 'id' => 4));
     $this->assertEqual((array) array_shift($sections), array('pageid' => 66, 'xhtmlid' => 'frog', 'title' => 'Frogs', 'id' => 5));
     $comments = get_records('ouwiki_comments');
     $this->assertEqual(count($comments), 12);
     // Check timeposted once then chuck it because it makes comparison harder
     $this->assertTrue(time() - $comments[1]->timeposted < 5 && time() - $comments[1]->timeposted >= 0);
     for ($i = 1; $i <= 12; $i++) {
         unset($comments[$i]->timeposted);
     }
     $this->assertEqual((array) array_shift($comments), array('sectionid' => 1, 'title' => 'My happy comment', 'xhtml' => 'This comment has a title', 'userid' => 1, 'deleted' => 0, 'id' => 1));
     $this->assertEqual((array) array_shift($comments), array('sectionid' => 1, 'title' => null, 'xhtml' => 'This one does not', 'userid' => 1, 'deleted' => 0, 'id' => 2));
     $this->assertEqual((array) array_shift($comments), array('sectionid' => 2, 'title' => null, 'xhtml' => 'This comment is on the main page section', 'userid' => 1, 'deleted' => 0, 'id' => 3));
     $this->assertEqual((array) array_shift($comments), array('sectionid' => 3, 'title' => null, 'xhtml' => 'This one is on a different section', 'userid' => 1, 'deleted' => 0, 'id' => 4));
     $this->assertEqual((array) array_shift($comments), array('sectionid' => 4, 'title' => null, 'xhtml' => 'This one is on another page', 'userid' => 1, 'deleted' => 0, 'id' => 5));
     $this->assertEqual((array) array_shift($comments), array('sectionid' => 5, 'title' => null, 'xhtml' => 'This one is on another page but same section', 'userid' => 1, 'deleted' => 0, 'id' => 6));
     $this->assertEqual((array) array_shift($comments), array('sectionid' => 2, 'title' => null, 'xhtml' => 'Main 2', 'userid' => 2, 'deleted' => 0, 'id' => 7));
     $this->assertEqual((array) array_shift($comments), array('sectionid' => 2, 'title' => null, 'xhtml' => 'Main 3', 'userid' => null, 'deleted' => 0, 'id' => 8));
     $this->assertEqual((array) array_shift($comments), array('sectionid' => 2, 'title' => null, 'xhtml' => 'Main 4', 'userid' => 1, 'deleted' => 0, 'id' => 9));
     $this->assertEqual((array) array_shift($comments), array('sectionid' => 1, 'title' => null, 'xhtml' => 'Frog 3', 'userid' => 1, 'deleted' => 0, 'id' => 10));
     $this->assertEqual((array) array_shift($comments), array('sectionid' => 1, 'title' => null, 'xhtml' => 'Frog 4', 'userid' => 1, 'deleted' => 0, 'id' => 11));
     $this->assertEqual((array) array_shift($comments), array('sectionid' => 1, 'title' => null, 'xhtml' => 'Frog 5', 'userid' => 1, 'deleted' => 0, 'id' => 12));
     // Now delete Frog 3
     ouwiki_delete_comment(13, 10, 1);
     $comment = get_record('ouwiki_comments', 'id', 10);
     unset($comment->timeposted);
     $this->assertEqual((array) $comment, array('sectionid' => 1, 'title' => null, 'xhtml' => 'Frog 3', 'userid' => 1, 'deleted' => 1, 'id' => 10));
     // Check query for all content...
     $comments = ouwiki_get_all_comments(13, 'frog');
     $comment = $comments[1];
     unset($comment->timeposted);
     // Ensure comments have all expected details (just taking one example)
     $this->assertEqual((array) $comment, array('sectionid' => 1, 'title' => 'My happy comment', 'xhtml' => 'This comment has a title', 'userid' => 1, 'deleted' => 0, 'sectiontitle' => 'Frogs', 'section' => 'frog', 'firstname' => 'user', 'lastname' => 'one', 'username' => 'u1', 'id' => 1));
     // Now check correct comments are included
     $this->assertEqual(self::get_id_array($comments), array(1, 2, 11, 12));
     // Check it works to include deleted ones if asked
     $comments = ouwiki_get_all_comments(13, 'frog', true);
     $this->assertEqual(self::get_id_array($comments), array(1, 2, 10, 11, 12));
     // Ask for comments from main section with everything else valid...
     $comments = ouwiki_get_all_comments(13, null, false, array('frog' => 0, 'zombie' => 0));
     $this->assertEqual(self::get_id_array($comments), array(3, 7, 8, 9));
     // ...and with nothing else valid
     $comments = ouwiki_get_all_comments(13, null, false, array());
     $this->assertEqual(self::get_id_array($comments), array(1, 2, 3, 4, 7, 8, 9, 11, 12));
     // Check query for page-display content
     $comments = ouwiki_get_recent_comments(13, array('frog' => 0, 'zombie' => 0));
     $this->assertEqual($comments['']->count, 4);
     $this->assertEqual(self::get_id_array($comments['']->comments), array(7, 8, 9));
     $this->assertEqual($comments['frog']->count, 4);
     $this->assertEqual(self::get_id_array($comments['frog']->comments), array(2, 11, 12));
     $this->assertEqual($comments['zombie']->count, 1);
     $this->assertEqual(self::get_id_array($comments['zombie']->comments), array(4));
 }
// Get section, make sure the name is valid
$section = optional_param('section', '', PARAM_RAW);
if (!preg_match('/^[0-9]+_[0-9]+$/', $section)) {
    $section = null;
}
if ($section) {
    if (!array_key_exists($section, $knownsections)) {
        error("Unknown section {$section}");
    }
}
// Check permissions. (Note that you can always delete your
// own posts, $candelete is for other people's.)
$canpost = has_capability('mod/ouwiki:comment', $context);
$candelete = has_capability('mod/ouwiki:deletecomments', $context);
// Get list of posts
$comments = ouwiki_get_all_comments($pageversion->pageid, $section, $candelete, $knownsections);
// We need the section title if it's not the main page
if ($section) {
    $nav = get_string('commentsonsection', 'ouwiki', $knownsections[$section]);
} else {
    $nav = get_string('commentsonpage', 'ouwiki');
}
$title = get_string('commenton', 'ouwiki');
$wikiname = format_string(htmlspecialchars($ouwiki->name));
$name = '';
if (!$section) {
    if ($pagename) {
        $name = $pagename;
    } else {
        $name = get_string('startpage', 'ouwiki');
    }