diff --git a/mod/forum/externallib.php b/mod/forum/externallib.php index 98b144cd4f9..2499a5e703f 100644 --- a/mod/forum/externallib.php +++ b/mod/forum/externallib.php @@ -82,6 +82,8 @@ class mod_forum_external extends external_api { if ($forums = $DB->get_records('forum', array('course' => $cid))) { // Get the modinfo for the course. $modinfo = get_fast_modinfo($cid); + // Get the course object. + $course = $modinfo->get_course(); // Get the forum instances. $foruminstances = $modinfo->get_instances_of('forum'); // Loop through the forums returned by modinfo. @@ -101,6 +103,10 @@ class mod_forum_external extends external_api { $context->id, 'mod_forum', 'intro', 0); // Add the course module id to the object, this information is useful. $forum->cmid = $cm->id; + + // Discussions count. This function does static request cache. + $forum->numdiscussions = forum_count_discussions($forum, $cm, $course); + // Add the forum to the array to return. $arrforums[$forum->id] = (array) $forum; } @@ -144,7 +150,8 @@ class mod_forum_external extends external_api { 'completiondiscussions' => new external_value(PARAM_INT, 'Student must create discussions'), 'completionreplies' => new external_value(PARAM_INT, 'Student must post replies'), 'completionposts' => new external_value(PARAM_INT, 'Student must post discussions or replies'), - 'cmid' => new external_value(PARAM_INT, 'Course module id') + 'cmid' => new external_value(PARAM_INT, 'Course module id'), + 'numdiscussions' => new external_value(PARAM_INT, 'Number of discussions in the forum', VALUE_OPTIONAL) ), 'forum' ) ); diff --git a/mod/forum/tests/externallib_test.php b/mod/forum/tests/externallib_test.php index 3f6c02929e9..16be0200b97 100644 --- a/mod/forum/tests/externallib_test.php +++ b/mod/forum/tests/externallib_test.php @@ -81,6 +81,24 @@ class mod_forum_external_testcase extends externallib_advanced_testcase { $record->course = $course2->id; $forum2 = self::getDataGenerator()->create_module('forum', $record); + // Add discussions to the forums. + $record = new stdClass(); + $record->course = $course1->id; + $record->userid = $user->id; + $record->forum = $forum1->id; + $discussion1 = self::getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); + // Expect one discussion. + $forum1->numdiscussions = 1; + + $record = new stdClass(); + $record->course = $course2->id; + $record->userid = $user->id; + $record->forum = $forum2->id; + $discussion2 = self::getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); + $discussion3 = self::getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); + // Expect two discussions. + $forum2->numdiscussions = 2; + // Check the forum was correctly created. $this->assertEquals(2, $DB->count_records_select('forum', 'id = :forum1 OR id = :forum2', array('forum1' => $forum1->id, 'forum2' => $forum2->id)));