public function test_anonforum_get_courses_user_posted_in() { $this->resetAfterTest(); $user1 = $this->getDataGenerator()->create_user(); $user2 = $this->getDataGenerator()->create_user(); $user3 = $this->getDataGenerator()->create_user(); $course1 = $this->getDataGenerator()->create_course(); $course2 = $this->getDataGenerator()->create_course(); $course3 = $this->getDataGenerator()->create_course(); // Create 3 forums, one in each course. $record = new stdClass(); $record->course = $course1->id; $anonforum1 = $this->getDataGenerator()->create_module('anonforum', $record); $record = new stdClass(); $record->course = $course2->id; $anonforum2 = $this->getDataGenerator()->create_module('anonforum', $record); $record = new stdClass(); $record->course = $course3->id; $anonforum3 = $this->getDataGenerator()->create_module('anonforum', $record); // Add a second forum in course 1. $record = new stdClass(); $record->course = $course1->id; $anonforum4 = $this->getDataGenerator()->create_module('anonforum', $record); // Add discussions to course 1 started by user1. $record = new stdClass(); $record->course = $course1->id; $record->userid = $user1->id; $record->anonforum = $anonforum1->id; $this->getDataGenerator()->get_plugin_generator('mod_anonforum')->create_discussion($record); $record = new stdClass(); $record->course = $course1->id; $record->userid = $user1->id; $record->anonforum = $anonforum4->id; $this->getDataGenerator()->get_plugin_generator('mod_anonforum')->create_discussion($record); // Add discussions to course2 started by user1. $record = new stdClass(); $record->course = $course2->id; $record->userid = $user1->id; $record->anonforum = $anonforum2->id; $this->getDataGenerator()->get_plugin_generator('mod_anonforum')->create_discussion($record); // Add discussions to course 3 started by user2. $record = new stdClass(); $record->course = $course3->id; $record->userid = $user2->id; $record->anonforum = $anonforum3->id; $discussion3 = $this->getDataGenerator()->get_plugin_generator('mod_anonforum')->create_discussion($record); // Add post to course 3 by user1. $record = new stdClass(); $record->course = $course3->id; $record->userid = $user1->id; $record->anonforum = $anonforum3->id; $record->discussion = $discussion3->id; $this->getDataGenerator()->get_plugin_generator('mod_anonforum')->create_post($record); // User 3 hasn't posted anything, so shouldn't get any results. $user3courses = anonforum_get_courses_user_posted_in($user3); $this->assertEmpty($user3courses); // User 2 has only posted in course3. $user2courses = anonforum_get_courses_user_posted_in($user2); $this->assertCount(1, $user2courses); $user2course = array_shift($user2courses); $this->assertEquals($course3->id, $user2course->id); $this->assertEquals($course3->shortname, $user2course->shortname); // User 1 has posted in all 3 courses. $user1courses = anonforum_get_courses_user_posted_in($user1); $this->assertCount(3, $user1courses); foreach ($user1courses as $course) { $this->assertContains($course->id, array($course1->id, $course2->id, $course3->id)); $this->assertContains($course->shortname, array($course1->shortname, $course2->shortname, $course3->shortname)); } // User 1 has only started a discussion in course 1 and 2 though. $user1courses = anonforum_get_courses_user_posted_in($user1, true); $this->assertCount(2, $user1courses); foreach ($user1courses as $course) { $this->assertContains($course->id, array($course1->id, $course2->id)); $this->assertContains($course->shortname, array($course1->shortname, $course2->shortname)); } }
$PAGE->set_context($coursecontext); $PAGE->set_course($course); } else { // Enter the course we are searching. require_login($course); } // Get the course ready for access checks. $courses = array($courseid => $course); } else { // We are going to search for all of the users posts in all courses! // a general require login here as we arn't actually within any course. require_login(); $PAGE->set_context(context_system::instance()); // Now we need to get all of the courses to search. // All courses where the user has posted within a anonymous forum will be returned. $courses = anonforum_get_courses_user_posted_in($user, $discussionsonly); } // Get the posts by the requested user that the current user can access. $result = anonforum_get_posts_by_user($user, $courses, $isspecificcourse, $discussionsonly, $page * $perpage, $perpage); // Check whether there are not posts to display. if (empty($result->posts)) { // Ok no posts to display means that either the user has not posted or there // are no posts made by the requested user that the current user is able to // see. // In either case we need to decide whether we can show personal information // about the requested user to the current user so we will execute some checks. // First check the obvious, its the current user, a specific course has been // provided (require_login has been called), or they have a course contact role. // True to any of those and the current user can see the details of the // requested user. $canviewuser = $iscurrentuser || $isspecificcourse || empty($CFG->forceloginforprofiles) || has_coursecontact_role($userid);