Merge branch 'MDL-50489-29' of git://github.com/jleyva/moodle into MOODLE_29_STABLE

This commit is contained in:
Eloy Lafuente (stronk7)
2015-07-07 19:13:08 +02:00
3 changed files with 56 additions and 12 deletions
+10 -5
View File
@@ -625,6 +625,7 @@ class mod_forum_external extends external_api {
require_once($CFG->dirroot . "/mod/forum/lib.php");
$warnings = array();
$discussions = array();
$params = self::validate_parameters(self::get_forum_discussions_paginated_parameters(),
array(
@@ -668,9 +669,9 @@ class mod_forum_external extends external_api {
require_capability('mod/forum:viewdiscussion', $modcontext, null, true, 'noviewdiscussionspermission', 'forum');
$sort = 'd.' . $sortby . ' ' . $sortdirection;
$discussions = forum_get_discussions($cm, $sort, true, -1, -1, true, $page, $perpage);
$alldiscussions = forum_get_discussions($cm, $sort, true, -1, -1, true, $page, $perpage);
if ($discussions) {
if ($alldiscussions) {
$canviewfullname = has_capability('moodle/site:viewfullnames', $modcontext);
// Get the unreads array, this takes a forum id and returns data for all discussions.
@@ -683,9 +684,13 @@ class mod_forum_external extends external_api {
// The forum function returns the replies for all the discussions in a given forum.
$replies = forum_count_discussion_replies($forumid, $sort, -1, $page, $perpage);
foreach ($discussions as $did => $discussion) {
foreach ($alldiscussions as $discussion) {
// This function checks for qanda forums.
if (!forum_user_can_see_discussion($forum, $discussion, $modcontext)) {
// Note that the forum_get_discussions returns as id the post id, not the discussion id so we need to do this.
$discussionrec = clone $discussion;
$discussionrec->id = $discussion->discussion;
if (!forum_user_can_see_discussion($forum, $discussionrec, $modcontext)) {
$warning = array();
// Function forum_get_discussions returns forum_posts ids not forum_discussions ones.
$warning['item'] = 'post';
@@ -762,7 +767,7 @@ class mod_forum_external extends external_api {
}
}
$discussions[$did] = (array) $discussion;
$discussions[] = $discussion;
}
}
-5
View File
@@ -5134,11 +5134,6 @@ function forum_user_can_see_discussion($forum, $discussion, $context, $user=NULL
return false;
}
if ($forum->type == 'qanda' &&
!forum_user_has_posted($forum->id, $discussion->id, $user->id) &&
!has_capability('mod/forum:viewqandawithoutposting', $context)) {
return false;
}
return true;
}
+46 -2
View File
@@ -342,11 +342,11 @@ class mod_forum_external_testcase extends externallib_advanced_testcase {
// See MDL-41746 for more information.
$this->assertDebuggingCalled();
// Remove the users post from the qanda forum and ensure they can not return the discussion.
// Remove the users post from the qanda forum and ensure they can still see the discussion.
$DB->delete_records('forum_posts', array('id' => $discussion2reply1->id));
$discussions = mod_forum_external::get_forum_discussions(array($forum2->id));
$discussions = external_api::clean_returnvalue(mod_forum_external::get_forum_discussions_returns(), $discussions);
$this->assertEquals(0, count($discussions));
$this->assertEquals(1, count($discussions));
// Call without required view discussion capability.
$this->unassignUserCapability('mod/forum:viewdiscussion', null, null, $course1->id);
@@ -652,4 +652,48 @@ class mod_forum_external_testcase extends externallib_advanced_testcase {
$this->assertEquals('requireloginerror', $e->errorcode);
}
}
/**
* Test get forum discussions paginated (qanda forums)
*/
public function test_mod_forum_get_forum_discussions_paginated_qanda() {
$this->resetAfterTest(true);
// Create courses to add the modules.
$course = self::getDataGenerator()->create_course();
$user1 = self::getDataGenerator()->create_user();
$user2 = self::getDataGenerator()->create_user();
// First forum with tracking off.
$record = new stdClass();
$record->course = $course->id;
$record->type = 'qanda';
$forum = self::getDataGenerator()->create_module('forum', $record);
// Add discussions to the forums.
$discussionrecord = new stdClass();
$discussionrecord->course = $course->id;
$discussionrecord->userid = $user2->id;
$discussionrecord->forum = $forum->id;
$discussion = self::getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($discussionrecord);
self::setAdminUser();
$discussions = mod_forum_external::get_forum_discussions_paginated($forum->id);
$discussions = external_api::clean_returnvalue(mod_forum_external::get_forum_discussions_paginated_returns(), $discussions);
$this->assertCount(1, $discussions['discussions']);
$this->assertCount(0, $discussions['warnings']);
self::setUser($user1);
$this->getDataGenerator()->enrol_user($user1->id, $course->id);
$discussions = mod_forum_external::get_forum_discussions_paginated($forum->id);
$discussions = external_api::clean_returnvalue(mod_forum_external::get_forum_discussions_paginated_returns(), $discussions);
$this->assertCount(1, $discussions['discussions']);
$this->assertCount(0, $discussions['warnings']);
}
}