Exemplo n.º 1
0
/**
 * If its an old post, do nothing. If the record exists, the maintenance will clear it up later.
 *
 * @return bool
 */
function forum_tp_mark_post_read($userid, $post, $forumid) {
    if (!forum_tp_is_post_old($post)) {
        return forum_tp_add_read_record($userid, $post->id);
    } else {
        return true;
    }
}
Exemplo n.º 2
0
    if ($displaymode == FORUM_MODE_FLATOLDEST or $displaymode == FORUM_MODE_FLATNEWEST) {
        $displaymode = FORUM_MODE_NESTED;
    }
} else {
    $parent = $discussion->firstpost;
}
if (!($post = forum_get_post_full($parent))) {
    print_error("notexists", 'forum', "{$CFG->wwwroot}/mod/forum/view.php?f={$forum->id}");
}
if (!forum_user_can_see_post($forum, $discussion, $post, null, $cm)) {
    print_error('noviewdiscussionspermission', 'forum', "{$CFG->wwwroot}/mod/forum/view.php?id={$forum->id}");
}
if ($mark == 'read' or $mark == 'unread') {
    if ($CFG->forum_usermarksread && forum_tp_can_track_forums($forum) && forum_tp_is_tracked($forum)) {
        if ($mark == 'read') {
            forum_tp_add_read_record($USER->id, $postid);
        } else {
            // unread
            forum_tp_delete_read_records($USER->id, $postid);
        }
    }
}
$searchform = forum_search_form($course);
$forumnode = $PAGE->navigation->find($cm->id, navigation_node::TYPE_ACTIVITY);
if (empty($forumnode)) {
    $forumnode = $PAGE->navbar;
} else {
    $forumnode->make_active();
}
$node = $forumnode->add(format_string($discussion->name), new moodle_url('/mod/forum/discuss.php', array('d' => $discussion->id)));
$node->display = false;
Exemplo n.º 3
0
 /**
  * Test mod_forum_observer methods.
  */
 public function test_observers()
 {
     global $DB, $CFG;
     require_once $CFG->dirroot . '/mod/forum/lib.php';
     $forumgen = $this->getDataGenerator()->get_plugin_generator('mod_forum');
     $course = $this->getDataGenerator()->create_course();
     $trackedrecord = array('course' => $course->id, 'type' => 'general', 'forcesubscribe' => FORUM_INITIALSUBSCRIBE);
     $untrackedrecord = array('course' => $course->id, 'type' => 'general');
     $trackedforum = $this->getDataGenerator()->create_module('forum', $trackedrecord);
     $untrackedforum = $this->getDataGenerator()->create_module('forum', $untrackedrecord);
     // Used functions don't require these settings; adding
     // them just in case there are APIs changes in future.
     $user = $this->getDataGenerator()->create_user(array('maildigest' => 1, 'trackforums' => 1));
     $manplugin = enrol_get_plugin('manual');
     $manualenrol = $DB->get_record('enrol', array('courseid' => $course->id, 'enrol' => 'manual'));
     $student = $DB->get_record('role', array('shortname' => 'student'));
     // The role_assign observer does it's job adding the forum_subscriptions record.
     $manplugin->enrol_user($manualenrol, $user->id, $student->id);
     // They are not required, but in a real environment they are supposed to be required;
     // adding them just in case there are APIs changes in future.
     set_config('forum_trackingtype', 1);
     set_config('forum_trackreadposts', 1);
     $record = array();
     $record['course'] = $course->id;
     $record['forum'] = $trackedforum->id;
     $record['userid'] = $user->id;
     $discussion = $forumgen->create_discussion($record);
     $record = array();
     $record['discussion'] = $discussion->id;
     $record['userid'] = $user->id;
     $post = $forumgen->create_post($record);
     forum_tp_add_read_record($user->id, $post->id);
     forum_set_user_maildigest($trackedforum, 2, $user);
     forum_tp_stop_tracking($untrackedforum->id, $user->id);
     $this->assertEquals(1, $DB->count_records('forum_subscriptions'));
     $this->assertEquals(1, $DB->count_records('forum_digests'));
     $this->assertEquals(1, $DB->count_records('forum_track_prefs'));
     $this->assertEquals(1, $DB->count_records('forum_read'));
     // The course_module_created observer does it's job adding a subscription.
     $forumrecord = array('course' => $course->id, 'type' => 'general', 'forcesubscribe' => FORUM_INITIALSUBSCRIBE);
     $extraforum = $this->getDataGenerator()->create_module('forum', $forumrecord);
     $this->assertEquals(2, $DB->count_records('forum_subscriptions'));
     $manplugin->unenrol_user($manualenrol, $user->id);
     $this->assertEquals(0, $DB->count_records('forum_digests'));
     $this->assertEquals(0, $DB->count_records('forum_subscriptions'));
     $this->assertEquals(0, $DB->count_records('forum_track_prefs'));
     $this->assertEquals(0, $DB->count_records('forum_read'));
 }
Exemplo n.º 4
0
    }
    $navtail = '';
} else {
    $parent = $discussion->firstpost;
    $navtail = '-> ' . format_string($discussion->name);
}
if (!forum_user_can_view_post($parent, $course, $cm, $forum, $discussion)) {
    error('You do not have permissions to view this post', "{$CFG->wwwroot}/mod/forum/view.php?f={$forum->id}");
}
if (!($post = forum_get_post_full($parent))) {
    error("Discussion no longer exists", "{$CFG->wwwroot}/mod/forum/view.php?f={$forum->id}");
}
$post->modcontext = $modcontext;
if (forum_tp_can_track_forums($forum) && forum_tp_is_tracked($forum) && $CFG->forum_usermarksread) {
    if ($mark == 'read') {
        forum_tp_add_read_record($USER->id, $postid, $discussion->id, $forum->id);
    } else {
        if ($mark == 'unread') {
            forum_tp_delete_read_records($USER->id, $postid);
        }
    }
}
if (empty($navtail)) {
    $navtail = "-> <a href=\"discuss.php?d={$discussion->id}\">" . format_string($discussion->name, true) . "</a> -> " . format_string($post->subject);
}
if ($forum->type == 'single') {
    $navforum = '';
} else {
    $navforum = "<a href=\"../forum/view.php?f={$forum->id}\">" . format_string($forum->name, true) . "</a> ";
}
$navmiddle = "<a href=\"../forum/index.php?id={$course->id}\">" . get_string("forums", "forum") . '</a> -> ' . $navforum;
Exemplo n.º 5
0
/**
 * Marks a whole discussion as read, for a given user
 */
function forum_tp_mark_discussion_read($userid, $discussionid, $forumid)
{
    global $CFG;
    $cutoffdate = isset($CFG->forum_oldpostdays) ? time() - $CFG->forum_oldpostdays * 24 * 60 * 60 : 0;
    $sql = 'SELECT p.id as postid, p.discussion as discussionid ' . 'FROM ' . $CFG->prefix . 'forum_posts p ' . 'LEFT JOIN ' . $CFG->prefix . 'forum_read r ON r.postid = p.id AND r.userid = ' . $userid . ' ' . 'WHERE p.discussion = ' . $discussionid . ' ' . 'AND p.modified >= ' . $cutoffdate . ' AND r.id is NULL';
    if ($posts = get_records_sql($sql)) {
        foreach ($posts as $post) {
            forum_tp_add_read_record($userid, $post->postid, $post->discussionid, $forumid);
        }
        return true;
    }
}