Skip to content

Commit

Permalink
MDL-57677 mod_forum: Fix wrong user displayed as the last post's author
Browse files Browse the repository at this point in the history
In the recent issue MDL-56225, we started to record the current user as
the usermodified in the forum_discussions table when updating a forum
post. It made sense but it was a mistake.

Even if the current user really modifies the discussion by updating the
post, the field usermodified has actually been always interpreted and
displayed as the last post' author. Not as the last user who touched the
discussion.

This patch reverts that particular change to the previous behaviour and
adds explicit unit test for it.
  • Loading branch information
mudrd8mz committed Jan 17, 2017
1 parent d6cf0e5 commit 3bb94d6
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 1 deletion.
2 changes: 1 addition & 1 deletion mod/forum/lib.php
Original file line number Diff line number Diff line change
Expand Up @@ -4516,7 +4516,7 @@ function forum_update_post($newpost, $mform, &$message) {

// Last post modified tracking.
$discussion->timemodified = $post->modified;
$discussion->usermodified = $USER->id;
$discussion->usermodified = $post->userid;

if (!$post->parent) { // Post is a discussion starter - update discussion title and times too
$discussion->name = $post->subject;
Expand Down
52 changes: 52 additions & 0 deletions mod/forum/tests/lib_test.php
Original file line number Diff line number Diff line change
Expand Up @@ -940,4 +940,56 @@ public function test_mod_forum_rating_can_see_item_ratings() {

}

/**
* Test that {@link forum_update_post()} keeps correct forum_discussions usermodified.
*/
public function test_forum_update_post_keeps_discussions_usermodified() {
global $DB;

$this->resetAfterTest();

// Let there be light.
$teacher = self::getDataGenerator()->create_user();
$student = self::getDataGenerator()->create_user();
$course = self::getDataGenerator()->create_course();

$forum = self::getDataGenerator()->create_module('forum', (object)[
'course' => $course->id,
]);

$generator = self::getDataGenerator()->get_plugin_generator('mod_forum');

// Let the teacher start a discussion.
$discussion = $generator->create_discussion((object)[
'course' => $course->id,
'userid' => $teacher->id,
'forum' => $forum->id,
]);

// On this freshly created discussion, the teacher is the author of the last post.
$this->assertEquals($teacher->id, $DB->get_field('forum_discussions', 'usermodified', ['id' => $discussion->id]));

// Let the student reply to the teacher's post.
$reply = $generator->create_post((object)[
'course' => $course->id,
'userid' => $student->id,
'forum' => $forum->id,
'discussion' => $discussion->id,
'parent' => $discussion->firstpost,
]);
// The student should now be the last post's author.
$this->assertEquals($student->id, $DB->get_field('forum_discussions', 'usermodified', ['id' => $discussion->id]));

// Let the teacher edit the student's reply.
$this->setUser($teacher->id);
$newpost = (object)[
'id' => $reply->id,
'itemid' => 0,
'subject' => 'Amended subject',
];
forum_update_post($newpost, null, $message);

// The student should be still the last post's author.
$this->assertEquals($student->id, $DB->get_field('forum_discussions', 'usermodified', ['id' => $discussion->id]));
}
}

0 comments on commit 3bb94d6

Please sign in to comment.