コード例 #1
0
 public function test_tag_discussion()
 {
     global $DB, $USER, $SITE, $CFG;
     require_once $CFG->dirroot . '/tag/lib.php';
     $this->resetAfterTest(true);
     $this->setAdminUser();
     // Create the generator object and do standard checks.
     $generator = self::getDataGenerator()->get_plugin_generator('mod_forumng');
     // Create course.
     $record = new stdClass();
     $record->shortname = 'testcourse';
     $course = self::getDataGenerator()->create_course($record);
     // Create groups.
     $group1 = $this->get_new_group($course->id);
     $group2 = $this->get_new_group($course->id);
     // Create forum.
     $forumrecord = $generator->create_instance(array('course' => $course->id, 'tags' => true, 'groupmode' => VISIBLEGROUPS));
     $forum = mod_forumng::get_from_id($forumrecord->id, mod_forumng::CLONE_DIRECT, true);
     // Set use tag.
     $CFG->usetags = true;
     // Set forum to tag enabling.
     $this->assertTrue($CFG->usetags);
     $this->assertEquals(true, $forum->get_tags_enabled());
     // Start a discussion in forum (group1).
     $record = new stdClass();
     $record->course = $course->id;
     $record->forum = $forum->get_id();
     $record->groupid = $group1->id;
     $record->userid = $USER->id;
     $record->timestart = time();
     $ids1 = $generator->create_discussion($record);
     // Start a second discussion in forum (group1).
     $record = new stdClass();
     $record->course = $course->id;
     $record->forum = $forum->get_id();
     $record->groupid = $group1->id;
     $record->userid = $USER->id;
     $record->timestart = time();
     $ids2 = $generator->create_discussion($record);
     // Start a third discussion in forum (group2).
     $record = new stdClass();
     $record->course = $course->id;
     $record->forum = $forum->get_id();
     $record->groupid = $group2->id;
     $record->userid = $USER->id;
     $record->timestart = time();
     $ids3 = $generator->create_discussion($record);
     // Set up tags in each discussion.
     $discussionid = $ids1[0];
     $discussion = mod_forumng_discussion::get_from_id($discussionid, 0);
     $this->assertEmpty($discussion->get_tags());
     // Edit discussion settings.
     $discussion->edit_settings($discussion::NOCHANGE, $discussion::NOCHANGE, $discussion::NOCHANGE, $discussion::NOCHANGE, $discussion::NOCHANGE, array('tag1', 'tag2', 'tag3'));
     $tags1 = $discussion->get_tags();
     $this->assertCount(3, $tags1);
     $discussion1 = $discussion;
     $discussionid = $ids2[0];
     $discussion = mod_forumng_discussion::get_from_id($discussionid, 0);
     $this->assertEmpty($discussion->get_tags());
     // Edit discussion settings.
     $discussion->edit_settings(mod_forumng_discussion::NOCHANGE, mod_forumng_discussion::NOCHANGE, mod_forumng_discussion::NOCHANGE, mod_forumng_discussion::NOCHANGE, mod_forumng_discussion::NOCHANGE, array('tag1', 'tag2'));
     $tags2 = $discussion->get_tags();
     $this->assertCount(2, $tags2);
     $discussion2 = $discussion;
     $discussionid = $ids3[0];
     $discussion = mod_forumng_discussion::get_from_id($discussionid, 0);
     $this->assertEmpty($discussion->get_tags());
     // Edit discussion settings.
     $discussion->edit_settings(mod_forumng_discussion::NOCHANGE, mod_forumng_discussion::NOCHANGE, mod_forumng_discussion::NOCHANGE, mod_forumng_discussion::NOCHANGE, mod_forumng_discussion::NOCHANGE, array('tag1'));
     $tags3 = $discussion->get_tags();
     $this->assertCount(1, $tags3);
     $discussion3 = $discussion;
     // Create a discussion with no tags for later use.
     $record = new stdClass();
     $record->course = $course->id;
     $record->forum = $forum->get_id();
     $record->groupid = $group2->id;
     $record->userid = $USER->id;
     $record->timestart = time();
     $ids4 = $generator->create_discussion($record);
     // Get id of 'tag1'.
     $tagid = array_search('tag1', $tags3);
     // Get all tags and check on numbers for each tag.
     $tagsused = $forum->get_tags_used();
     $this->assertCount(3, $tagsused);
     $tagsused1 = $forum->get_tags_used($group1->id);
     $this->assertCount(3, $tagsused1);
     $tagsused2 = $forum->get_tags_used($group2->id);
     $this->assertCount(1, $tagsused2);
     $this->assertArrayHasKey($tagid, $tagsused2);
     $this->assertObjectHasAttribute('displayname', $tagsused2[$tagid]);
     $this->assertObjectHasAttribute('count', $tagsused2[$tagid]);
     $this->assertEquals('tag1', $tagsused2[$tagid]->displayname);
     $this->assertEquals(1, $tagsused2[$tagid]->count);
     // Get all discussions featuring 'tag1'.
     $list = $forum->get_discussion_list(mod_forumng::ALL_GROUPS, $forum->can_view_hidden(), 1, mod_forumng::SORT_DATE, false, 0, true, $tagid);
     $taggedlist = $list->get_normal_discussions();
     $this->assertCount(3, $taggedlist);
     // Get all discussions featuring 'tag1'.for group1.
     $list1 = $forum->get_discussion_list($group1->id, $forum->can_view_hidden(), 1, mod_forumng::SORT_DATE, false, 0, true, $tagid);
     $taggedlist1 = $list1->get_normal_discussions();
     $this->assertCount(2, $taggedlist1);
     // Get all discussions featuring 'tag1'.for group2.
     $list2 = $forum->get_discussion_list($group2->id, $forum->can_view_hidden(), 1, mod_forumng::SORT_DATE, false, 0, true, $tagid);
     $taggedlist2 = $list2->get_normal_discussions();
     $this->assertCount(1, $taggedlist2);
     // Get all discussions featuring 'tag3'.for group2 - which should be none.
     $tagid = array_search('tag3', $tags1);
     $list = $forum->get_discussion_list($group2->id, $forum->can_view_hidden(), 1, mod_forumng::SORT_DATE, false, 0, true, $tagid);
     $taggedlist = $list->get_normal_discussions();
     $this->assertCount(0, $taggedlist);
     // Set tags specifically for group 1.
     $forumng = new stdClass();
     $forumng->settags = array('g1 vamp', 'g1 zomb', 'g1 mumm', 'g1 damm');
     $forumng->id = $forum->get_id();
     $forumng->instance = $forum->get_id();
     $forumng->tags = 1;
     forumng_update_instance($forumng);
     $context = $forum->get_context();
     mod_forumng::set_group_tags($forum->get_id(), $group1->id, $forumng->settags);
     $tagsused1 = $forum::get_set_tags($forumng->id, $group1->id);
     $this->assertCount(4, $tagsused1);
     // Set tags for group 2 (should return main set tags also).
     $g2tags = array('g2 ghost', 'g2 ghoul', 'g2 googl', 'g2 welf', 'g2 gobb');
     mod_forumng::set_group_tags($forum->get_id(), $group2->id, $g2tags);
     $tagsused2 = $forum::get_set_tags($forumng->id, $group2->id);
     $this->assertCount(9, $tagsused2);
     $tagsused3 = $forum::get_set_tags($forumng->id);
     $this->assertCount(4, $tagsused3);
     // Test that group only tags can be returned.
     $tagsused1 = $forum::get_set_tags($forumng->id, $group1->id, true);
     $this->assertCount(4, $tagsused1);
     $tagsused2 = $forum::get_set_tags($forumng->id, $group2->id, true);
     $this->assertCount(5, $tagsused2);
     // Need to test permanently delete.
     $discussionid = $ids4[0];
     $discussion = mod_forumng_discussion::get_from_id($discussionid, 0);
     $this->assertEmpty($discussion->get_tags());
     // Edit discussion settings.
     $discussion->edit_settings(mod_forumng_discussion::NOCHANGE, mod_forumng_discussion::NOCHANGE, mod_forumng_discussion::NOCHANGE, mod_forumng_discussion::NOCHANGE, mod_forumng_discussion::NOCHANGE, array('t1', 't2', 't3'));
     $tags4 = $discussion->get_tags();
     $this->assertCount(3, $tags4);
     $discussion4 = $discussion;
     // Delete discussion.
     $discussion4->permanently_delete(false);
     $this->assertFalse($DB->get_record('forumng_discussions', array('id' => $discussion->get_id())));
     $this->assertEmpty($DB->get_records('tag_instance', array('itemid' => $discussion->get_id(), 'itemtype' => 'forumng discussions')));
     // Test group tag setting.
     $user2 = $this->get_new_user();
     $this->setUser($user2);
     mod_forumng::set_group_tags($forumng->id, $group1->id, array('t1', 'tnew'));
     $tagsused = $forum::get_set_tags($forumng->id, $group1->id, true);
     $this->assertCount(2, $tagsused);
     mod_forumng::set_group_tags($forumng->id, $group1->id, array('t1'));
     $tagsused = $forum::get_set_tags($forumng->id, $group1->id, true);
     $this->assertCount(1, $tagsused);
     // Create a new forum and add same group tags.
     $forumrecord2 = $generator->create_instance(array('course' => $course->id, 'tags' => true, 'groupmode' => VISIBLEGROUPS));
     $forum2 = mod_forumng::get_from_id($forumrecord2->id, mod_forumng::CLONE_DIRECT, true);
     mod_forumng::set_group_tags($forumrecord2->id, $group1->id, array('t1'));
     $tagsused = $forum::get_set_tags($forumrecord2->id, $group1->id, true);
     $this->assertCount(1, $tagsused);
     // Create a new forum and add same group tags (should use another user).
     $forumrecord2 = $generator->create_instance(array('course' => $course->id, 'tags' => true, 'groupmode' => VISIBLEGROUPS));
     $forum2 = mod_forumng::get_from_id($forumrecord2->id, mod_forumng::CLONE_DIRECT, true);
     mod_forumng::set_group_tags($forumrecord2->id, $group1->id, array('t1'));
     $tagsused = $forum::get_set_tags($forumrecord2->id, $group1->id, true);
     $this->assertCount(1, $tagsused);
     // Create a new forum and add same group tags (should fail as ou of users).
     $forumrecord2 = $generator->create_instance(array('course' => $course->id, 'tags' => true, 'groupmode' => VISIBLEGROUPS));
     $forum2 = mod_forumng::get_from_id($forumrecord2->id, mod_forumng::CLONE_DIRECT, true);
     $this->setExpectedException('moodle_exception');
     mod_forumng::set_group_tags($forumrecord2->id, $group1->id, array('t1'));
     // Do not add any tests after this point as exception called above.
 }
コード例 #2
0
 public function test_rating()
 {
     global $USER, $DB;
     $this->resetAfterTest();
     $generator = $this->getDataGenerator()->get_plugin_generator('mod_forumng');
     $course = $this->get_new_course();
     $course2 = $this->get_new_course();
     $suser = $this->get_new_user('student', $course->id);
     $this->setAdminUser();
     $forum = $this->get_new_forumng($course->id, array('name' => 'TEST', 'intro' => 'abc123', 'enableratings' => mod_forumng::FORUMNG_STANDARD_RATING, 'ratingscale' => 10));
     $forum2 = $this->get_new_forumng($course->id, array('name' => 'TEST2', 'intro' => 'abc123', 'enableratings' => mod_forumng::FORUMNG_NO_RATING));
     $forum3 = $this->get_new_forumng($course2->id, array('name' => 'TEST', 'intro' => 'abc123', 'enableratings' => mod_forumng::FORUMNG_STANDARD_RATING, 'ratingscale' => 10));
     $did1 = $generator->create_discussion(array('course' => $course, 'forum' => $forum->get_id(), 'userid' => $suser->id));
     $did2 = $generator->create_discussion(array('course' => $course, 'forum' => $forum->get_id(), 'userid' => $suser->id));
     $did3 = $generator->create_discussion(array('course' => $course, 'forum' => $forum->get_id(), 'userid' => $suser->id));
     $did4 = $generator->create_discussion(array('course' => $course, 'forum' => $forum->get_id(), 'userid' => $suser->id));
     // Add rating to all 3 discussions.
     $rm = new rating_manager();
     $params = new stdClass();
     $params->context = $forum->get_context();
     $params->component = 'mod_forumng';
     $params->ratingarea = 'post';
     $params->scaleid = $forum->get_rating_scale();
     $params->userid = $USER->id;
     $params->itemid = $did1[1];
     $rating = new rating($params);
     $rating->update_rating(5);
     $params->itemid = $did2[1];
     $rating = new rating($params);
     $rating->update_rating(5);
     $params->itemid = $did3[1];
     $rating = new rating($params);
     $rating->update_rating(5);
     // Check rating object gets added where expected.
     $post = mod_forumng_post::get_from_id($did1[1], mod_forumng::CLONE_DIRECT, false, false);
     $ratings = $post->get_ratings();
     $this->assertNotNull($ratings);
     $this->assertEquals($did1[1], $ratings->itemid);
     $post = mod_forumng_post::get_from_id($did1[1], mod_forumng::CLONE_DIRECT, true, false);
     $ratings = $post->get_ratings();
     $this->assertNotNull($ratings);
     $this->assertEquals($did1[1], $ratings->itemid);
     $post = mod_forumng_post::get_from_id($did1[1], mod_forumng::CLONE_DIRECT, true, true);
     $ratings = $post->get_ratings();
     $this->assertNotNull($ratings);
     $this->assertEquals($did1[1], $ratings->itemid);
     $ratedposts = $forum->get_all_posts_by_user($suser->id, null, 'fp.id', null, null, true);
     $this->assertCount(3, $ratedposts);
     $allposts = $forum->get_all_posts_by_user($suser->id, null);
     $this->assertCount(4, $allposts);
     $this->assertNotNull($allposts[$did1[1]]->get_ratings());
     // Update grades (does nothing).
     $forum->update_grades();
     // Enable rating grading, forumng_update_instance() should update grades.
     forumng_update_instance((object) array('instance' => $forum->get_id(), 'grading' => mod_forumng::GRADING_SUM));
     $grades = grade_get_grades($course->id, 'mod', 'forumng', $forum->get_id(), $suser->id);
     // Note sum is set to 10 not 15 as max grade is 10.
     $this->assertEquals(10, abs($grades->items[0]->grades[$suser->id]->grade));
     // Enable rating grading, forumng_update_instance() should update grades.
     forumng_update_instance((object) array('instance' => $forum->get_id(), 'grading' => mod_forumng::GRADING_COUNT));
     $grades = grade_get_grades($course->id, 'mod', 'forumng', $forum->get_id(), $suser->id);
     $this->assertEquals(3, abs($grades->items[0]->grades[$suser->id]->grade));
     // Check get_rated_posts_by_user.
     $extrapost = $generator->create_post(array('discussionid' => $did1[0], 'parentpostid' => $did1[1], 'userid' => $suser->id, 'created' => 1388589745));
     $extraposts = $forum->get_rated_posts_by_user($forum, $suser->id, -1, 'fp.id', null, null);
     $this->assertCount(0, $extraposts);
     $extraposts = $forum->get_rated_posts_by_user($forum, $USER->id, -1, 'fp.id', null, null);
     $this->assertCount(3, $extraposts);
     $params->itemid = $extrapost->id;
     $rating = new rating($params);
     $rating->update_rating(10);
     $extraposts = $forum->get_rated_posts_by_user($forum, $USER->id, -1, 'fp.id', null, null);
     $this->assertCount(4, $extraposts);
     // Now filter out the 'old' extrapost.
     $extraposts = $forum->get_rated_posts_by_user($forum, $USER->id, -1, 'fp.id', null, null, 1388600000);
     $this->assertCount(3, $extraposts);
     // Check discussion delete.
     $discuss = mod_forumng_discussion::get_from_id($did1[0], mod_forumng::CLONE_DIRECT);
     $discuss->permanently_delete();
     $rating = $DB->get_record('rating', array('itemid' => $did1[1]));
     $this->assertFalse($rating);
     $grades = grade_get_grades($course->id, 'mod', 'forumng', $forum->get_id(), $suser->id);
     $this->assertEquals(2, abs($grades->items[0]->grades[$suser->id]->grade));
     // Check discussion move.
     $discuss = mod_forumng_discussion::get_from_id($did2[0], mod_forumng::CLONE_DIRECT);
     $discuss->move($forum2, 0);
     $grades = grade_get_grades($course->id, 'mod', 'forumng', $forum->get_id(), $suser->id);
     $this->assertEquals(1, abs($grades->items[0]->grades[$suser->id]->grade));
     forumng_update_instance((object) array('instance' => $forum2->get_id(), 'grading' => mod_forumng::GRADING_COUNT, 'enableratings' => mod_forumng::FORUMNG_STANDARD_RATING, 'ratingscale' => 10));
     $grades = grade_get_grades($course->id, 'mod', 'forumng', $forum2->get_id(), $suser->id);
     $this->assertEquals(1, abs($grades->items[0]->grades[$suser->id]->grade));
     $rating = $DB->get_record('rating', array('itemid' => $did2[1]));
     $this->assertNotEmpty($rating);
     $this->assertEquals($forum2->get_context(true)->id, $rating->contextid);
     // Check discussion copy.
     $discuss = mod_forumng_discussion::get_from_id($did3[0], mod_forumng::CLONE_DIRECT);
     $discuss->copy($forum3, 0);
     $grades = grade_get_grades($course->id, 'mod', 'forumng', $forum->get_id(), $suser->id);
     $this->assertEquals(1, abs($grades->items[0]->grades[$suser->id]->grade));
     // Check rating didn't copy as forum in another course.
     $ratingtotal = $DB->get_records('rating');
     $this->assertCount(2, $ratingtotal);
     // Check rating does copy to foum in same course.
     $discuss->copy($forum2, 0);
     $ratingtotal = $DB->get_records('rating');
     $this->assertCount(3, $ratingtotal);
     // Check forum deleting.
     course_delete_module($forum->get_course_module_id());
     $ratingtotal = $DB->get_records('rating');
     $this->assertCount(2, $ratingtotal);
     $grades = grade_get_grades($course->id, 'mod', 'forumng', $forum->get_id(), $suser->id);
     $this->assertEmpty($grades->items);
 }
コード例 #3
0
 /**
  * Tests the grading functions in mod_forumng.
  * Note manual grading is handled in feature/user posts and not tested here...
  */
 public function test_grading()
 {
     global $USER, $DB;
     $this->resetAfterTest(true);
     $this->setAdminUser();
     $adminid = $USER->id;
     $generator = $this->getDataGenerator()->get_plugin_generator('mod_forumng');
     $course = $this->get_new_course();
     $user1 = $this->get_new_user('editingteacher', $course->id);
     $forum1 = $this->get_new_forumng($course->id, array('grading' => mod_forumng::GRADING_MANUAL, 'gradingscale' => 50));
     $forum1->update_grades($USER->id);
     // Should do nothing and throw no excpetion...
     $forum2 = $this->get_new_forumng($course->id, array('grading' => mod_forumng::GRADING_COUNT, 'gradingscale' => 5, 'ratingscale' => 5));
     list($discuss, $postid) = $generator->create_discussion(array('course' => $course->id, 'forum' => $forum2->get_id(), 'userid' => $USER->id));
     $post = mod_forumng_post::get_from_id($postid, 0);
     $post->rate(1);
     // Calls update_grades().
     $post = $generator->create_post(array('discussionid' => $discuss, 'userid' => $USER->id, 'parentpostid' => $postid));
     $post = mod_forumng_post::get_from_id($post->id, 0);
     $post->rate(3);
     // Calls update_grades().
     $grades = grade_get_grades($course->id, 'mod', 'forumng', $forum2->get_id(), $USER->id);
     $this->assertEquals(2, abs($grades->items[0]->grades[$USER->id]->grade));
     // Try another grading type, forumng_update_instance() should update grades.
     forumng_update_instance((object) array('instance' => $forum2->get_id(), 'grading' => mod_forumng::GRADING_MAX));
     $grades = grade_get_grades($course->id, 'mod', 'forumng', $forum2->get_id(), $USER->id);
     $this->assertEquals(3, abs($grades->items[0]->grades[$USER->id]->grade));
     // Try another grading type, forumng_update_instance() should update grades.
     forumng_update_instance((object) array('instance' => $forum2->get_id(), 'grading' => mod_forumng::GRADING_MIN));
     $grades = grade_get_grades($course->id, 'mod', 'forumng', $forum2->get_id(), $USER->id);
     $this->assertEquals(1, abs($grades->items[0]->grades[$USER->id]->grade));
     // Try another grading type, forumng_update_instance() should update grades.
     forumng_update_instance((object) array('instance' => $forum2->get_id(), 'grading' => mod_forumng::GRADING_SUM));
     $grades = grade_get_grades($course->id, 'mod', 'forumng', $forum2->get_id(), $USER->id);
     $this->assertEquals(4, abs($grades->items[0]->grades[$USER->id]->grade));
     // Try another grading type, forumng_update_instance() should update grades.
     forumng_update_instance((object) array('instance' => $forum2->get_id(), 'grading' => mod_forumng::GRADING_AVERAGE));
     $grades = grade_get_grades($course->id, 'mod', 'forumng', $forum2->get_id(), $USER->id);
     $this->assertEquals(2, abs($grades->items[0]->grades[$USER->id]->grade));
     // Try another grading type, forumng_update_instance() should update grades.
     forumng_update_instance((object) array('instance' => $forum2->get_id(), 'grading' => mod_forumng::GRADING_NONE));
     $grades = grade_get_grades($course->id, 'mod', 'forumng', $forum2->get_id(), $USER->id);
     $this->assertEmpty($grades->items[0]->grades[$USER->id]->grade);
 }