コード例 #1
0
 /**
  * Get forum list for a user on a course.
  *
  * @param string $courseshortname Website shortname.
  * @param string $oucu Username.
  * @return array Forum details objects.
  */
 public static function get_forum_list($courseshortname, $oucu)
 {
     global $DB;
     // Validate the parameters.
     $params = self::validate_parameters(self::get_forum_list_parameters(), array('shortname' => $courseshortname, 'oucu' => $oucu));
     // Get course object from the shortname.
     $course = $DB->get_record('course', array('shortname' => $courseshortname));
     if ($course === false) {
         throw new moodle_exception(get_string('cannotfindcourse', 'error'));
     }
     $forumlist = array();
     // Get the user's id from the supplied username (oucu).
     $userid = $DB->get_field('user', 'id', array('username' => $oucu));
     if ($userid === false) {
         throw new moodle_exception(get_string('cannotfinduser', 'error', $oucu));
     }
     // Get forums for the given course and user.
     $forums = mod_forumng::get_course_forums($course, $userid, mod_forumng::UNREAD_BINARY);
     $modinfo = get_fast_modinfo($course, $userid);
     // Loop through the forum instances, they are correctly ordered by sections.
     foreach ($modinfo->get_instances_of('forumng') as $cm) {
         // Only include this forum if it is visible to the user.
         if ($cm->uservisible) {
             $forum = $forums[$cm->instance];
             if ($forum->is_clone()) {
                 $forum->init_unread_from_original(mod_forumng::UNREAD_BINARY, $userid);
             }
             $forumdetails = new stdClass();
             $forumdetails->name = $forum->get_name();
             if ($forum->has_unread_discussions()) {
                 $forumdetails->unread = 'y';
             } else {
                 $forumdetails->unread = 'n';
             }
             $forumlist[] = $forumdetails;
             unset($forumdetails);
         }
     }
     return $forumlist;
 }
コード例 #2
0
ファイル: lib.php プロジェクト: unikent/moodle-mod_forumng
function mod_forumng_cm_info_view(cm_info $cm)
{
    global $CFG;
    require_once $CFG->dirroot . '/mod/forumng/mod_forumng.php';
    static $forums = null;
    if ($forums === null) {
        // Read tracking is for real users only
        if (mod_forumng::enabled_read_tracking() && !isguestuser() && isloggedin()) {
            $forums = mod_forumng::get_course_forums($cm->get_course(), 0, mod_forumng::UNREAD_BINARY);
        } else {
            $forums = array();
        }
    }
    // If current forum is listed, check whether it's unread or not
    if (array_key_exists($cm->instance, $forums)) {
        if ($forums[$cm->instance]->has_unread_discussions()) {
            $cm->set_after_link('<span class="unread">' . get_string('hasunreadposts', 'forumng') . '</span>');
        }
    }
}
コード例 #3
0
                    if ($requestingsubscribegroup && $groupid) {
                        $forum->subscribe(0, $groupid);
                        $confirmtext = get_string('subscribe_confirm_group', 'forumng');
                    } else {
                        print_error('error_invalidsubscriptionrequest', 'forumng');
                    }
                }
            }
        }
    }
}
// Handle whole course
if ($courseid) {
    $course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
    require_login($course);
    $forums = mod_forumng::get_course_forums($course, 0, mod_forumng::UNREAD_NONE, array(), true);
    foreach ($forums as $forum) {
        if (!$forum->can_change_subscription()) {
            continue;
        }
        $subscriptioninfo = $forum->get_subscription_info();
        $discussionidcount = count($subscriptioninfo->discussionids);
        if ($subscriptioninfo->wholeforum) {
            //subscribed to the entire forum
            $subscribed = mod_forumng::FULLY_SUBSCRIBED;
        } else {
            if ($discussionidcount == 0) {
                $subscribed = mod_forumng::NOT_SUBSCRIBED;
            } else {
                $subscribed = mod_forumng::PARTIALLY_SUBSCRIBED;
            }
コード例 #4
0
$table->head = array($strforum, $strdescription, $strdiscussionsunread);
$table->align = array('left', 'left', 'center');
if ($useweeks || $usesections) {
    array_unshift($table->head, $useweeks ? $strweek : $strsection);
    array_unshift($table->align, 'left');
}
if ($canmaybesubscribe) {
    $table->head[] = $strsubscribed;
    $table->align[] = 'center';
}
if ($showrss = ($canmaybesubscribe || $course->id == SITEID) && !empty($CFG->enablerssfeeds) && !empty($CFG->forumng_enablerssfeeds)) {
    $table->head[] = $strfeeds;
    $table->align[] = 'center';
}
// Construct forums array
$forums = mod_forumng::get_course_forums($course, 0, mod_forumng::UNREAD_DISCUSSIONS, array(), true);
// Display all forums
$currentsection = 0;
$cansubscribesomething = false;
$canunsubscribesomething = false;
foreach ($forums as $forum) {
    $cm = $forum->get_course_module();
    // Skip forum if it's not visible or you can't read discussions there
    if (!$cm->uservisible || !has_capability('mod/forumng:viewdiscussion', $forum->get_context())) {
        continue;
    }
    $row = array();
    // Get section number
    if ($cm->sectionnum != $currentsection) {
        $printsection = $cm->sectionnum;
        // Between each section add a horizontal gap (copied this code,
コード例 #5
0
 /**
  * Tests discussion copying to another group and another course forum
  * (Does not check attachments or ratings copying)
  */
 public function test_copy()
 {
     global $USER;
     $this->resetAfterTest();
     $this->setAdminUser();
     $course1 = $this->get_new_course();
     $course2 = $this->get_new_course();
     $group1 = $this->get_new_group($course1->id);
     $group2 = $this->get_new_group($course1->id);
     $orig = $this->get_new_forumng($course1->id, array('groupmode' => VISIBLEGROUPS));
     $other = $this->get_new_forumng($course2->id);
     $dis = $this->get_new_discussion($orig, array('groupid' => $group1->id, 'userid' => $USER->id));
     $lastpost = mod_forumng_post::get_from_id($dis->get_last_post_id(), 0);
     $dis->create_reply($lastpost, 'reply', 'reply', FORMAT_HTML);
     $dis->copy($orig, $group2->id);
     $dis->copy($other, mod_forumng::CLONE_DIRECT);
     $forums1 = mod_forumng::get_course_forums($course1);
     $forums2 = mod_forumng::get_course_forums($course2);
     $this->assertEquals(2, $forums1[$orig->get_id()]->get_num_discussions());
     $this->assertEquals(1, $forums2[$other->get_id()]->get_num_discussions());
     $list = $forums1[$orig->get_id()]->get_discussion_list($group2->id);
     $this->assertFalse($list->is_empty());
     $discussion = $list->get_normal_discussions();
     $this->assertEquals(2, reset($discussion)->get_num_posts());
     if (mod_forumng::search_installed()) {
         $searchdoc = reset($discussion)->get_root_post()->search_get_document();
         $this->assertTrue($searchdoc->find());
         $query = new local_ousearch_search('reply');
         $query->set_coursemodule($other->get_course_module(true));
         $results = $query->query();
         $this->assertNotEmpty($results->results);
     }
 }
コード例 #6
0
 /**
  * Extend tests that check forumns and discussions being marked as read.
  *
  */
 public function test_discussions_mark_read()
 {
     global $USER, $DB;
     $this->resetAfterTest(true);
     $this->setAdminUser();
     $adminid = $USER->id;
     $generator = $this->getDataGenerator()->get_plugin_generator('mod_forumng');
     $course = $this->get_new_course();
     $etuser1 = $this->get_new_user('editingteacher', $course->id);
     $suser1 = $this->get_new_user('student', $course->id);
     $suser2 = $this->get_new_user('student', $course->id);
     $group1 = $this->get_new_group($course->id);
     $group2 = $this->get_new_group($course->id);
     $this->get_new_group_member($group1->id, $etuser1->id);
     $this->get_new_group_member($group1->id, $suser1->id);
     // Create 2 forums (1 group forum, 1 no groups), each with 1 discussion.
     $forum1 = $this->get_new_forumng($course->id, array('groupmode' => VISIBLEGROUPS));
     $forum2 = $this->get_new_forumng($course->id);
     $did1 = $generator->create_discussion(array('course' => $course, 'forum' => $forum1->get_id(), 'userid' => $etuser1->id, 'groupid' => $group1->id));
     $did2 = $generator->create_discussion(array('course' => $course, 'forum' => $forum2->get_id(), 'userid' => $etuser1->id));
     // Set the time for offset use.
     $posttime = time();
     // Ensure user prefs allow discussions/posts to be marked as read 'automatically'.
     unset_user_preference('forumng_manualmark', $etuser1);
     unset_user_preference('forumng_manualmark', $suser1);
     // Root post auto marked as read for ET the creator, of forum1 at group level.
     $etforums = mod_forumng::get_course_forums($course, $etuser1->id, mod_forumng::UNREAD_DISCUSSIONS);
     // Forum contains discussion post read by etuser1.
     $this->assertFalse($etforums[$forum1->get_id()]->has_unread_discussions());
     $this->assertEquals(0, $etforums[$forum1->get_id()]->get_num_unread_discussions());
     // Suser1 has NOT read root posts.
     $s1forums = mod_forumng::get_course_forums($course, $suser1->id, mod_forumng::UNREAD_DISCUSSIONS);
     // Forums contain discussion posts NOT read by Suser1.
     $this->assertTrue($s1forums[$forum1->get_id()]->has_unread_discussions());
     $this->assertTrue($s1forums[$forum2->get_id()]->has_unread_discussions());
     // Discussion contains posts NOT read by S1.
     $this->assertEquals(1, $s1forums[$forum1->get_id()]->get_num_unread_discussions());
     $this->assertEquals(1, $s1forums[$forum2->get_id()]->get_num_unread_discussions());
     // User Prefs allow the marking of both discussion root posts as read 'automatically'.
     $posttime = $posttime + 2;
     $did1read = mod_forumng_discussion::get_from_id($did1[0], 0);
     $did1read->mark_read($posttime, $suser1->id);
     $did2read = mod_forumng_discussion::get_from_id($did2[0], 0);
     $did2read->mark_read($posttime, $suser1->id);
     // Check the root posts now marked as read for S1.
     $s1forums = mod_forumng::get_course_forums($course, $suser1->id, mod_forumng::UNREAD_DISCUSSIONS);
     // Forums contain NO discussions not read by Suser1.
     $this->assertFalse($s1forums[$forum1->get_id()]->has_unread_discussions());
     $this->assertFalse($s1forums[$forum2->get_id()]->has_unread_discussions());
     // No forumn discussions contain root posts not read by Suser1.
     $this->assertEquals(0, $s1forums[$forum1->get_id()]->get_num_unread_discussions());
     $this->assertEquals(0, $s1forums[$forum2->get_id()]->get_num_unread_discussions());
     // Set user pref so discussions/posts marked 'manually'.
     set_user_preference('forumng_manualmark', 1, $etuser1);
     set_user_preference('forumng_manualmark', 1, $suser1);
     // Add extra posts to both discussions with time modified offset.
     $posttime = $posttime + 2;
     $did1s1p1 = $generator->create_post(array('discussionid' => $did1[0], 'parentpostid' => $did1[1], 'userid' => $suser1->id, 'modified' => $posttime));
     $did1etp1 = $generator->create_post(array('discussionid' => $did1[0], 'parentpostid' => $did1[1], 'userid' => $etuser1->id, 'modified' => $posttime));
     $did1s2p1 = $generator->create_post(array('discussionid' => $did1[0], 'parentpostid' => $did1[1], 'userid' => $suser2->id, 'modified' => $posttime));
     $did2s1p2 = $generator->create_post(array('discussionid' => $did2[0], 'parentpostid' => $did2[1], 'userid' => $suser1->id, 'modified' => $posttime));
     $did2etp2 = $generator->create_post(array('discussionid' => $did2[0], 'parentpostid' => $did2[1], 'userid' => $etuser1->id, 'modified' => $posttime));
     $did2s2p1 = $generator->create_post(array('discussionid' => $did2[0], 'parentpostid' => $did2[1], 'userid' => $suser2->id, 'modified' => $posttime));
     $did1s1post1 = mod_forumng_post::get_from_id($did1s1p1->id, 0);
     $did2s1post2 = mod_forumng_post::get_from_id($did2s1p2->id, 0);
     $did1etpost1 = mod_forumng_post::get_from_id($did1etp1->id, 0);
     $did2etpost2 = mod_forumng_post::get_from_id($did2etp2->id, 0);
     $did1s2post1 = mod_forumng_post::get_from_id($did1s2p1->id, 0);
     $did2s2post1 = mod_forumng_post::get_from_id($did2s2p1->id, 0);
     // Check read status of new posts.
     $etforums = mod_forumng::get_course_forums($course, $etuser1->id, mod_forumng::UNREAD_DISCUSSIONS);
     // Discussions DO have posts not read by ET.
     $this->assertTrue($etforums[$forum1->get_id()]->has_unread_discussions());
     $this->assertTrue($etforums[$forum2->get_id()]->has_unread_discussions());
     // A number of discussions contain posts NOT read by ET.
     $this->assertEquals(1, $etforums[$forum1->get_id()]->get_num_unread_discussions());
     $this->assertEquals(1, $etforums[$forum2->get_id()]->get_num_unread_discussions());
     $s1forums = mod_forumng::get_course_forums($course, $suser1->id, mod_forumng::UNREAD_DISCUSSIONS);
     // Discussions DO have posts not read by Suser1.
     $this->assertTrue($s1forums[$forum1->get_id()]->has_unread_discussions());
     $this->assertTrue($s1forums[$forum2->get_id()]->has_unread_discussions());
     // A number of discussions contain posts NOT read by Suser1.
     $this->assertEquals(1, $s1forums[$forum1->get_id()]->get_num_unread_discussions());
     $this->assertEquals(1, $s1forums[$forum2->get_id()]->get_num_unread_discussions());
     // Mark posts read individually.
     $posttime = $posttime + 2;
     $did1s1post1->mark_read($posttime, $etuser1->id);
     // Poster suser1, reader teacher 1.
     $did2s1post2->mark_read($posttime, $etuser1->id);
     // Poster suser1, reader teacher 1.
     $did1etpost1->mark_read($posttime, $suser1->id);
     // Poster etuser1, reader suser1.
     $did2etpost2->mark_read($posttime, $suser1->id);
     // Poster etuser1, reader suser1.
     $did1s2post1->mark_read($posttime, $suser1->id);
     $did2s2post1->mark_read($posttime, $suser1->id);
     $did1s2post1->mark_read($posttime, $etuser1->id);
     $did2s2post1->mark_read($posttime, $etuser1->id);
     // Check read status of newly marked read posts.
     $etforums = mod_forumng::get_course_forums($course, $etuser1->id, mod_forumng::UNREAD_DISCUSSIONS);
     // Discussions have NO posts not read by ET.
     $this->assertFalse($etforums[$forum1->get_id()]->has_unread_discussions());
     $this->assertFalse($etforums[$forum2->get_id()]->has_unread_discussions());
     // No discussions contain posts not read by ET.
     $this->assertEquals(0, $etforums[$forum1->get_id()]->get_num_unread_discussions());
     $this->assertEquals(0, $etforums[$forum2->get_id()]->get_num_unread_discussions());
     $s1forums = mod_forumng::get_course_forums($course, $suser1->id, mod_forumng::UNREAD_DISCUSSIONS);
     // Discussions have NO posts not read by Suser1.
     $this->assertFalse($s1forums[$forum1->get_id()]->has_unread_discussions());
     $this->assertFalse($s1forums[$forum2->get_id()]->has_unread_discussions());
     // No discussions contain posts not read by Suser1.
     $this->assertEquals(0, $s1forums[$forum1->get_id()]->get_num_unread_discussions());
     $this->assertEquals(0, $s1forums[$forum2->get_id()]->get_num_unread_discussions());
     // Get read counts for ET user, includes their own posts,
     // also checks both query_forums() and query_discussions().
     $discussion1etuser = mod_forumng_discussion::get_from_id($did1[0], 0, $etuser1->id);
     $etuserposts = $discussion1etuser->get_num_posts();
     $this->assertEquals(1, count($etuserposts));
     $unreadpostsetuser = $discussion1etuser->get_num_unread_posts();
     $this->assertEquals(0, $unreadpostsetuser);
     $readpostsetuser = $DB->get_records('forumng_read_posts', array('userid' => $etuser1->id));
     $this->assertCount(4, $readpostsetuser);
     $discussion2etuser = mod_forumng_discussion::get_from_id($did2[0], 0, $etuser1->id);
     $etuserposts = $discussion2etuser->get_num_posts();
     $this->assertEquals(1, count($etuserposts));
     $unreadpostsetuser = $discussion2etuser->get_num_unread_posts();
     $this->assertEquals(0, $unreadpostsetuser);
     $readpostsetuser = $DB->get_records('forumng_read_posts', array('userid' => $etuser1->id));
     $this->assertCount(4, $readpostsetuser);
     // Get read counts for the student user 1, includes count of their own posts.
     $discussion1suser1 = mod_forumng_discussion::get_from_id($did1[0], 0, $suser1->id);
     $suser1posts = $discussion1suser1->get_num_posts();
     $this->assertEquals(1, count($suser1posts));
     $unreadpostsuser1 = $discussion1suser1->get_num_unread_posts();
     $this->assertEquals(0, $unreadpostsuser1);
     $readpostsuser1 = $DB->get_records('forumng_read_posts', array('userid' => $suser1->id));
     $this->assertCount(4, $readpostsuser1);
     $discussion2suser1 = mod_forumng_discussion::get_from_id($did2[0], 0, $suser1->id);
     $suser1posts = $discussion2suser1->get_num_posts();
     $this->assertEquals(1, count($suser1posts));
     $unreadpostsuser1 = $discussion2suser1->get_num_unread_posts();
     $this->assertEquals(0, $unreadpostsuser1);
     $readpostsuser1 = $DB->get_records('forumng_read_posts', array('userid' => $suser1->id));
     $this->assertCount(4, $readpostsuser1);
     // Ensure user prefs allow discussions/posts to be marked as read 'automatically'.
     unset_user_preference('forumng_manualmark', $etuser1);
     unset_user_preference('forumng_manualmark', $suser1);
     // Mark read at forumn/discussion level 'automatically'.
     $posttime = $posttime + 2;
     // Mark forumn/discussion 1 read 'automatically'.
     $did1read = mod_forumng_discussion::get_from_id($did1[0], 0);
     $did1read->mark_read($posttime, $etuser1->id);
     $did1read->mark_read($posttime, $suser1->id);
     // Mark forumn/discussion 2 read 'automatically'.
     $did2read = mod_forumng_discussion::get_from_id($did2[0], 0);
     $did2read->mark_read($posttime, $suser1->id);
     $did2read->mark_read($posttime, $etuser1->id);
     // Re-check Forumn read status of forum/discussions/posts.
     $etforums = mod_forumng::get_course_forums($course, $etuser1->id, mod_forumng::UNREAD_DISCUSSIONS);
     // Forum discussions have NO posts not read by ET.
     $this->assertFalse($etforums[$forum1->get_id()]->has_unread_discussions('use'));
     $this->assertFalse($etforums[$forum2->get_id()]->has_unread_discussions());
     // No forum discussion contains posts not read by ET.
     $this->assertEquals(0, $etforums[$forum1->get_id()]->get_num_unread_discussions());
     $this->assertEquals(0, $etforums[$forum2->get_id()]->get_num_unread_discussions());
     $s1forums = mod_forumng::get_course_forums($course, $suser1->id, mod_forumng::UNREAD_DISCUSSIONS);
     // Forum discussions have NO posts not read by S1.
     $this->assertFalse($s1forums[$forum1->get_id()]->has_unread_discussions());
     $this->assertFalse($s1forums[$forum2->get_id()]->has_unread_discussions());
     // No forum discussion contains posts not read by S1.
     $this->assertEquals(0, $s1forums[$forum1->get_id()]->get_num_unread_discussions());
     $this->assertEquals(0, $s1forums[$forum2->get_id()]->get_num_unread_discussions());
     // Add some more posts to discussion 2 only, to remain NOT MARKED manually.
     $posttime = $posttime + 2;
     $did2s1p3 = $generator->create_post(array('discussionid' => $did2[0], 'parentpostid' => $did2[1], 'userid' => $suser1->id, 'modified' => $posttime));
     $did2s1post3 = mod_forumng_post::get_from_id($did2s1p3->id, 0);
     $did2etp3 = $generator->create_post(array('discussionid' => $did2[0], 'parentpostid' => $did2[1], 'userid' => $suser2->id, 'modified' => $posttime));
     $did2etpost3 = mod_forumng_post::get_from_id($did2etp3->id, 0);
     // Setuser pref so discussions/posts can be marked 'manually'.
     set_user_preference('forumng_manualmark', 1, $etuser1);
     set_user_preference('forumng_manualmark', 1, $suser1);
     // Check read status of forum/discussions/posts.
     $etforums = mod_forumng::get_course_forums($course, $etuser1->id, mod_forumng::UNREAD_DISCUSSIONS);
     // Forumn discussion 1 has NO post not read by ET.
     $this->assertFalse($etforums[$forum1->get_id()]->has_unread_discussions());
     $this->assertEquals(0, $etforums[$forum1->get_id()]->get_num_unread_discussions());
     // Forumn discussion 2 has post NOT read by ET.
     $this->assertTrue($etforums[$forum2->get_id()]->has_unread_discussions());
     $this->assertEquals(1, $etforums[$forum2->get_id()]->get_num_unread_discussions());
     $s1forums = mod_forumng::get_course_forums($course, $suser1->id, mod_forumng::UNREAD_DISCUSSIONS);
     // Forumn discussions 1 has NO post unread by S1.
     $this->assertFalse($s1forums[$forum1->get_id()]->has_unread_discussions());
     $this->assertEquals(0, $s1forums[$forum1->get_id()]->get_num_unread_discussions());
     // Forumn discussion 2 DOES contain posts not read by S1.
     $this->assertTrue($s1forums[$forum2->get_id()]->has_unread_discussions());
     $this->assertEquals(1, $s1forums[$forum2->get_id()]->get_num_unread_discussions());
     // Mark only the older posts read individually.
     $posttime = $posttime + 2;
     $did1s1post1->mark_read($posttime, $etuser1->id);
     // Poster suser1, reader teacher 1.
     $did2s1post2->mark_read($posttime, $etuser1->id);
     // Poster suser1, reader teacher 1.
     $did1etpost1->mark_read($posttime, $suser1->id);
     // Poster etuser1, reader suser1.
     $did2etpost2->mark_read($posttime, $suser1->id);
     // Poster etuser1, reader suser1.
     // Get read counts for ET user, includes their own posts,
     // also checks both query_forums() and query_discussions().
     $discussion1etuser = mod_forumng_discussion::get_from_id($did1[0], 0, $etuser1->id);
     $etuserposts = $discussion1etuser->get_num_posts();
     $this->assertEquals(4, $etuserposts);
     $unreadpostsetuser = $discussion1etuser->get_num_unread_posts();
     $this->assertEquals(0, $unreadpostsetuser);
     $readpostsetuser = $DB->get_records('forumng_read_posts', array('userid' => $etuser1->id));
     $this->assertCount(2, $readpostsetuser);
     $discussion2etuser = mod_forumng_discussion::get_from_id($did2[0], 0, $etuser1->id);
     $etuserposts = $discussion2etuser->get_num_posts();
     $this->assertEquals(6, $etuserposts);
     $unreadpostsetuser = $discussion2etuser->get_num_unread_posts();
     $this->assertEquals(2, $unreadpostsetuser);
     // Get read counts for the student user 1, includes count of their own posts.
     $discussion1suser1 = mod_forumng_discussion::get_from_id($did1[0], 0, $suser1->id);
     $suser1posts = $discussion1suser1->get_num_posts();
     $this->assertEquals(1, count($suser1posts));
     $unreadpostsuser1 = $discussion1suser1->get_num_unread_posts();
     $this->assertEquals(0, $unreadpostsuser1);
     $readpostsuser1 = $DB->get_records('forumng_read_posts', array('userid' => $suser1->id));
     $this->assertCount(2, $readpostsuser1);
     $discussion2suser1 = mod_forumng_discussion::get_from_id($did2[0], 0, $suser1->id);
     $suser1posts = $discussion2suser1->get_num_posts();
     $this->assertEquals(1, count($suser1posts));
     $unreadpostsuser1 = $discussion2suser1->get_num_unread_posts();
     $this->assertEquals(1, $unreadpostsuser1);
     $readpostsuser1 = $DB->get_records('forumng_read_posts', array('userid' => $suser1->id));
     $this->assertCount(2, $readpostsuser1);
     // Check read status of forum/discussions/posts.
     $etforums = mod_forumng::get_course_forums($course, $etuser1->id, mod_forumng::UNREAD_DISCUSSIONS);
     // Forumn discussion 1  has NO posts not read by ET.
     $this->assertFalse($etforums[$forum1->get_id()]->has_unread_discussions());
     $this->assertEquals(0, $etforums[$forum1->get_id()]->get_num_unread_discussions());
     // Forumn discussion 2 contains posts NOT read by ET.
     $this->assertTrue($etforums[$forum2->get_id()]->has_unread_discussions());
     $this->assertEquals(1, $etforums[$forum2->get_id()]->get_num_unread_discussions());
     $s1forums = mod_forumng::get_course_forums($course, $suser1->id, mod_forumng::UNREAD_DISCUSSIONS);
     // Forumn discussion 1 has NO posts not read by S1.
     $this->assertFalse($etforums[$forum1->get_id()]->has_unread_discussions());
     $this->assertEquals(0, $etforums[$forum1->get_id()]->get_num_unread_discussions());
     // Forumn discussion 2 contains posts NOT read by S1.
     $this->assertTrue($etforums[$forum2->get_id()]->has_unread_discussions());
     $this->assertEquals(1, $etforums[$forum2->get_id()]->get_num_unread_discussions());
     // Mark forumns read 'automatically'.
     $forums = mod_forumng::get_course_forums($course, $etuser1->id);
     $posttime = $posttime + 2;
     $forums[$forum1->get_id()]->mark_read(0, $posttime, $etuser1->id);
     $forums[$forum2->get_id()]->mark_read(0, $posttime, $etuser1->id);
     $forums = mod_forumng::get_course_forums($course, $suser1->id);
     $posttime = $posttime + 2;
     $forums[$forum2->get_id()]->mark_read(0, $posttime, $suser1->id);
     $forums[$forum1->get_id()]->mark_read(0, $posttime, $suser1->id);
     // Check Discussion read status of forum/discussions.
     $etforums = mod_forumng::get_course_forums($course, $etuser1->id, mod_forumng::UNREAD_DISCUSSIONS);
     // Forum discussions have NO posts not read by ET.
     $this->assertFalse($etforums[$forum1->get_id()]->has_unread_discussions());
     $this->assertFalse($etforums[$forum2->get_id()]->has_unread_discussions());
     // Forum discussions contain NO posts unread by ET.
     $this->assertEquals(0, $etforums[$forum1->get_id()]->get_num_unread_discussions());
     $this->assertEquals(0, $etforums[$forum2->get_id()]->get_num_unread_discussions());
     $s1forums = mod_forumng::get_course_forums($course, $suser1->id, mod_forumng::UNREAD_DISCUSSIONS);
     // Forum discussions have NO posts not read by S1.
     $this->assertFalse($s1forums[$forum1->get_id()]->has_unread_discussions());
     $this->assertFalse($s1forums[$forum2->get_id()]->has_unread_discussions());
     // No Forum 1 discussion contains posts not read by S1.
     $this->assertEquals(0, $s1forums[$forum1->get_id()]->get_num_unread_discussions());
     $this->assertEquals(0, $s1forums[$forum2->get_id()]->get_num_unread_discussions());
 }
コード例 #7
0
ファイル: lib.php プロジェクト: ULCC-QMUL/moodle-mod_forumng
/**
 * Return forums on course that have unread posts for current user
 *
 * @param stdClass $course
 * @return array
 */
function forumng_get_ourecent_activity($course)
{
    global $CFG;
    require_once $CFG->dirroot . '/mod/forumng/mod_forumng.php';
    $forums = mod_forumng::get_course_forums($course, 0, mod_forumng::UNREAD_BINARY);
    $return = array();
    foreach ($forums as $forum) {
        if ($forum->has_unread_discussions()) {
            $data = new stdClass();
            $data->cm = $forum->get_course_module();
            $data->icon = '%%unread%%';
            $return[$data->cm->id] = $data;
        }
    }
    return $return;
}
コード例 #8
0
 /**
  * Tests that discussions can be marked as read.
  * (unread count etc tested in test_get_course_forums())
  */
 public function test_mark_read()
 {
     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);
     $group1 = $this->get_new_group($course->id);
     $group2 = $this->get_new_group($course->id);
     $this->get_new_group_member($group1->id, $user1->id);
     $this->get_new_group_member($group2->id, $user1->id);
     $forum1 = $this->get_new_forumng($course->id, array('groupmode' => VISIBLEGROUPS, 'shared' => true, 'cmidnumber' => 'SFGF'));
     $forum2 = $this->get_new_forumng($course->id, array('usesharedgroup' => array('useshared' => true, 'originalcmidnumber' => 'SFGF')));
     $generator->create_discussion(array('course' => $course, 'forum' => $forum1->get_id(), 'userid' => $USER->id, 'groupid' => $group1->id));
     $generator->create_discussion(array('course' => $course, 'forum' => $forum2->get_id(), 'userid' => $USER->id, 'groupid' => $group2->id));
     $forums = mod_forumng::get_course_forums($course, $user1->id);
     $this->assertTrue($forums[$forum1->get_id()]->has_unread_discussions());
     $this->assertTrue($forums[$forum2->get_id()]->has_unread_discussions());
     $this->assertEquals(2, $forums[$forum1->get_id()]->get_num_unread_discussions());
     $this->assertEquals(2, $forums[$forum2->get_id()]->get_num_unread_discussions());
     $forums[$forum1->get_id()]->mark_read($group2->id, 0, $user1->id);
     $forums = mod_forumng::get_course_forums($course, $user1->id);
     $this->assertEquals(1, $forums[$forum1->get_id()]->get_num_unread_discussions());
     $this->assertEquals(1, $forums[$forum2->get_id()]->get_num_unread_discussions());
     $forums[$forum2->get_id()]->mark_read($group1->id, 0, $user1->id);
     $forums = mod_forumng::get_course_forums($course, $user1->id);
     $this->assertFalse($forums[$forum1->get_id()]->has_unread_discussions());
     $this->assertFalse($forums[$forum2->get_id()]->has_unread_discussions());
 }
コード例 #9
0
 /**
  * Checks timed discussions read
  */
 public function test_timed_discussions_read()
 {
     $this->resetAfterTest();
     $this->setAdminUser();
     $course = $this->get_new_course('TESTTIME');
     $student = $this->get_new_user('student', $course->id);
     $manager = $this->get_new_user('manager', $course->id);
     list($forum, $discussions) = $this->create_timed_discussions_forum($course->id);
     $sforum = mod_forumng::get_course_forums($course, $student->id);
     $this->assertEquals(2, $sforum[$forum->get_id()]->get_num_unread_discussions());
     // Check manager (can see timed discussions).
     $mforum = mod_forumng::get_course_forums($course, $manager->id);
     $this->assertEquals(4, $mforum[$forum->get_id()]->get_num_unread_discussions());
 }