Beispiel #1
0
/// 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 = '&nbsp;';
        $buttonextraclass = ' noavailable';
    }
Beispiel #2
0
 /**
  * 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);
 }