/// Check to see if groups are being used in this quora /// If so, make sure the current person is allowed to see this discussion /// Also, if we know they should be able to reply, then explicitly set $canreply for performance reasons $canreply = quora_user_can_post($quora, $discussion, $USER, $cm, $course, $modcontext); if (!$canreply and $quora->type !== 'news') { if (isguestuser() or !isloggedin()) { $canreply = true; } if (!is_enrolled($modcontext) and !is_viewing($modcontext)) { // allow guests and not-logged-in to see the link - they are prompted to log in after clicking the link // normal users with temporary guest access see this link too, they are asked to enrol instead $canreply = enrol_selfenrol_available($course->id); } } // Output the links to neighbour discussions. $neighbours = quora_get_discussion_neighbours($cm, $discussion); $neighbourlinks = $renderer->neighbouring_discussion_navigation($neighbours['prev'], $neighbours['next']); echo $neighbourlinks; /// Print the controls across the top echo '<div class="discussioncontrols clearfix">'; if (!empty($CFG->enableportfolios) && has_capability('mod/quora:exportdiscussion', $modcontext)) { require_once $CFG->libdir . '/portfoliolib.php'; $button = new portfolio_add_button(); $button->set_callback_options('quora_portfolio_caller', array('discussionid' => $discussion->id), 'mod_quora'); $button = $button->to_html(PORTFOLIO_ADD_FULL_FORM, get_string('exportdiscussion', 'mod_quora')); $buttonextraclass = ''; if (empty($button)) { // no portfolio plugin available. $button = ' '; $buttonextraclass = ' noavailable'; }
/** * Test getting the neighbour threads of a discussion. */ public function test_quora_get_neighbours_with_groups() { $this->resetAfterTest(); // Setup test data. $quoragen = $this->getDataGenerator()->get_plugin_generator('mod_quora'); $course = $this->getDataGenerator()->create_course(); $group1 = $this->getDataGenerator()->create_group(array('courseid' => $course->id)); $group2 = $this->getDataGenerator()->create_group(array('courseid' => $course->id)); $user1 = $this->getDataGenerator()->create_user(); $user2 = $this->getDataGenerator()->create_user(); $this->getDataGenerator()->enrol_user($user1->id, $course->id); $this->getDataGenerator()->enrol_user($user2->id, $course->id); $this->getDataGenerator()->create_group_member(array('userid' => $user1->id, 'groupid' => $group1->id)); $quora1 = $this->getDataGenerator()->create_module('quora', array('course' => $course->id, 'groupmode' => VISIBLEGROUPS)); $quora2 = $this->getDataGenerator()->create_module('quora', array('course' => $course->id, 'groupmode' => SEPARATEGROUPS)); $cm1 = get_coursemodule_from_instance('quora', $quora1->id); $cm2 = get_coursemodule_from_instance('quora', $quora2->id); $context1 = context_module::instance($cm1->id); $context2 = context_module::instance($cm2->id); // Creating discussions in both quoras. $record = new stdClass(); $record->course = $course->id; $record->userid = $user1->id; $record->quora = $quora1->id; $record->groupid = $group1->id; $disc11 = $quoragen->create_discussion($record); $record->quora = $quora2->id; $disc21 = $quoragen->create_discussion($record); sleep(1); $record->userid = $user2->id; $record->quora = $quora1->id; $record->groupid = $group2->id; $disc12 = $quoragen->create_discussion($record); $record->quora = $quora2->id; $disc22 = $quoragen->create_discussion($record); sleep(1); $record->userid = $user1->id; $record->quora = $quora1->id; $record->groupid = null; $disc13 = $quoragen->create_discussion($record); $record->quora = $quora2->id; $disc23 = $quoragen->create_discussion($record); sleep(1); $record->userid = $user2->id; $record->quora = $quora1->id; $record->groupid = $group2->id; $disc14 = $quoragen->create_discussion($record); $record->quora = $quora2->id; $disc24 = $quoragen->create_discussion($record); sleep(1); $record->userid = $user1->id; $record->quora = $quora1->id; $record->groupid = $group1->id; $disc15 = $quoragen->create_discussion($record); $record->quora = $quora2->id; $disc25 = $quoragen->create_discussion($record); // Admin user can see all groups. $this->setAdminUser(); $neighbours = quora_get_discussion_neighbours($cm1, $disc11); $this->assertEmpty($neighbours['prev']); $this->assertEquals($disc12->id, $neighbours['next']->id); $neighbours = quora_get_discussion_neighbours($cm2, $disc21); $this->assertEmpty($neighbours['prev']); $this->assertEquals($disc22->id, $neighbours['next']->id); $neighbours = quora_get_discussion_neighbours($cm1, $disc12); $this->assertEquals($disc11->id, $neighbours['prev']->id); $this->assertEquals($disc13->id, $neighbours['next']->id); $neighbours = quora_get_discussion_neighbours($cm2, $disc22); $this->assertEquals($disc21->id, $neighbours['prev']->id); $this->assertEquals($disc23->id, $neighbours['next']->id); $neighbours = quora_get_discussion_neighbours($cm1, $disc13); $this->assertEquals($disc12->id, $neighbours['prev']->id); $this->assertEquals($disc14->id, $neighbours['next']->id); $neighbours = quora_get_discussion_neighbours($cm2, $disc23); $this->assertEquals($disc22->id, $neighbours['prev']->id); $this->assertEquals($disc24->id, $neighbours['next']->id); $neighbours = quora_get_discussion_neighbours($cm1, $disc14); $this->assertEquals($disc13->id, $neighbours['prev']->id); $this->assertEquals($disc15->id, $neighbours['next']->id); $neighbours = quora_get_discussion_neighbours($cm2, $disc24); $this->assertEquals($disc23->id, $neighbours['prev']->id); $this->assertEquals($disc25->id, $neighbours['next']->id); $neighbours = quora_get_discussion_neighbours($cm1, $disc15); $this->assertEquals($disc14->id, $neighbours['prev']->id); $this->assertEmpty($neighbours['next']); $neighbours = quora_get_discussion_neighbours($cm2, $disc25); $this->assertEquals($disc24->id, $neighbours['prev']->id); $this->assertEmpty($neighbours['next']); // Admin user is only viewing group 1. $_POST['group'] = $group1->id; $this->assertEquals($group1->id, groups_get_activity_group($cm1, true)); $this->assertEquals($group1->id, groups_get_activity_group($cm2, true)); $neighbours = quora_get_discussion_neighbours($cm1, $disc11); $this->assertEmpty($neighbours['prev']); $this->assertEquals($disc13->id, $neighbours['next']->id); $neighbours = quora_get_discussion_neighbours($cm2, $disc21); $this->assertEmpty($neighbours['prev']); $this->assertEquals($disc23->id, $neighbours['next']->id); $neighbours = quora_get_discussion_neighbours($cm1, $disc13); $this->assertEquals($disc11->id, $neighbours['prev']->id); $this->assertEquals($disc15->id, $neighbours['next']->id); $neighbours = quora_get_discussion_neighbours($cm2, $disc23); $this->assertEquals($disc21->id, $neighbours['prev']->id); $this->assertEquals($disc25->id, $neighbours['next']->id); $neighbours = quora_get_discussion_neighbours($cm1, $disc15); $this->assertEquals($disc13->id, $neighbours['prev']->id); $this->assertEmpty($neighbours['next']); $neighbours = quora_get_discussion_neighbours($cm2, $disc25); $this->assertEquals($disc23->id, $neighbours['prev']->id); $this->assertEmpty($neighbours['next']); // Normal user viewing non-grouped posts (this is only possible in visible groups). $this->setUser($user1); $_POST['group'] = 0; $this->assertEquals(0, groups_get_activity_group($cm1, true)); // They can see anything in visible groups. $neighbours = quora_get_discussion_neighbours($cm1, $disc12); $this->assertEquals($disc11->id, $neighbours['prev']->id); $this->assertEquals($disc13->id, $neighbours['next']->id); $neighbours = quora_get_discussion_neighbours($cm1, $disc13); $this->assertEquals($disc12->id, $neighbours['prev']->id); $this->assertEquals($disc14->id, $neighbours['next']->id); // Normal user, orphan of groups, can only see non-grouped posts in separate groups. $this->setUser($user2); $_POST['group'] = 0; $this->assertEquals(0, groups_get_activity_group($cm2, true)); $neighbours = quora_get_discussion_neighbours($cm2, $disc23); $this->assertEmpty($neighbours['prev']); $this->assertEmpty($neighbours['next']); $neighbours = quora_get_discussion_neighbours($cm2, $disc22); $this->assertEmpty($neighbours['prev']); $this->assertEquals($disc23->id, $neighbours['next']->id); $neighbours = quora_get_discussion_neighbours($cm2, $disc24); $this->assertEquals($disc23->id, $neighbours['prev']->id); $this->assertEmpty($neighbours['next']); // Switching to viewing group 1. $this->setUser($user1); $_POST['group'] = $group1->id; $this->assertEquals($group1->id, groups_get_activity_group($cm1, true)); $this->assertEquals($group1->id, groups_get_activity_group($cm2, true)); // They can see non-grouped or same group. $neighbours = quora_get_discussion_neighbours($cm1, $disc11); $this->assertEmpty($neighbours['prev']); $this->assertEquals($disc13->id, $neighbours['next']->id); $neighbours = quora_get_discussion_neighbours($cm2, $disc21); $this->assertEmpty($neighbours['prev']); $this->assertEquals($disc23->id, $neighbours['next']->id); $neighbours = quora_get_discussion_neighbours($cm1, $disc13); $this->assertEquals($disc11->id, $neighbours['prev']->id); $this->assertEquals($disc15->id, $neighbours['next']->id); $neighbours = quora_get_discussion_neighbours($cm2, $disc23); $this->assertEquals($disc21->id, $neighbours['prev']->id); $this->assertEquals($disc25->id, $neighbours['next']->id); $neighbours = quora_get_discussion_neighbours($cm1, $disc15); $this->assertEquals($disc13->id, $neighbours['prev']->id); $this->assertEmpty($neighbours['next']); $neighbours = quora_get_discussion_neighbours($cm2, $disc25); $this->assertEquals($disc23->id, $neighbours['prev']->id); $this->assertEmpty($neighbours['next']); // Querying the neighbours of a discussion passing the wrong CM. $this->setExpectedException('coding_exception'); quora_get_discussion_neighbours($cm2, $disc11); }