/** * Given a course and a date, prints a summary of all the new * messages posted in the course since that date * * @global object * @global object * @global object * @uses CONTEXT_MODULE * @uses VISIBLEGROUPS * @param object $course * @param bool $viewfullnames capability * @param int $timestart * @return bool success */ function forum_print_recent_activity($course, $viewfullnames, $timestart) { global $CFG, $USER, $DB, $OUTPUT; // do not use log table if possible, it may be huge and is expensive to join with other tables $allnamefields = user_picture::fields('u', null, 'duserid'); if (!($posts = $DB->get_records_sql("SELECT p.*, f.type AS forumtype, d.forum, d.groupid,\n d.timestart, d.timeend, {$allnamefields}\n FROM {forum_posts} p\n JOIN {forum_discussions} d ON d.id = p.discussion\n JOIN {forum} f ON f.id = d.forum\n JOIN {user} u ON u.id = p.userid\n WHERE p.created > ? AND f.course = ?\n ORDER BY p.id ASC", array($timestart, $course->id)))) { // order by initial posting date return false; } $modinfo = get_fast_modinfo($course); $groupmodes = array(); $cms = array(); $strftimerecent = get_string('strftimerecent'); $printposts = array(); foreach ($posts as $post) { if (!isset($modinfo->instances['forum'][$post->forum])) { // not visible continue; } $cm = $modinfo->instances['forum'][$post->forum]; if (!$cm->uservisible) { continue; } $context = context_module::instance($cm->id); if (!has_capability('mod/forum:viewdiscussion', $context)) { continue; } if (!empty($CFG->forum_enabletimedposts) and $USER->id != $post->duserid and ($post->timestart > 0 and $post->timestart > time() or $post->timeend > 0 and $post->timeend < time())) { if (!has_capability('mod/forum:viewhiddentimedposts', $context)) { continue; } } // Check that the user can see the discussion. if (forum_is_user_group_discussion($cm, $post->groupid)) { $printposts[] = $post; } } unset($posts); if (!$printposts) { return false; } echo $OUTPUT->heading(get_string('newforumposts', 'forum') . ':', 3); echo "\n<ul class='unlist'>\n"; foreach ($printposts as $post) { $subjectclass = empty($post->parent) ? ' bold' : ''; echo '<li><div class="head">' . '<div class="date">' . userdate($post->modified, $strftimerecent) . '</div>' . '<div class="name">' . fullname($post, $viewfullnames) . '</div>' . '</div>'; echo '<div class="info' . $subjectclass . '">'; if (empty($post->parent)) { echo '"<a href="' . $CFG->wwwroot . '/mod/forum/discuss.php?d=' . $post->discussion . '">'; } else { echo '"<a href="' . $CFG->wwwroot . '/mod/forum/discuss.php?d=' . $post->discussion . '&parent=' . $post->parent . '#p' . $post->id . '">'; } $post->subject = break_up_long_words(format_string($post->subject, true)); echo $post->subject; echo "</a>\"</div></li>\n"; } echo "</ul>\n"; return true; }
/** * Given a course and a date, prints a summary of all the new * messages posted in the course since that date * * @global object * @global object * @global object * @uses CONTEXT_MODULE * @uses VISIBLEGROUPS * @param object $course * @param bool $viewfullnames capability * @param int $timestart * @return bool success */ function forum_print_recent_activity($course, $viewfullnames, $timestart) { global $CFG, $USER, $DB, $OUTPUT; // do not use log table if possible, it may be huge and is expensive to join with other tables $allnamefields = user_picture::fields('u', null, 'duserid'); if (!($posts = $DB->get_records_sql("SELECT p.*, f.type AS forumtype, d.forum, d.groupid,\n d.timestart, d.timeend, {$allnamefields}\n FROM {forum_posts} p\n JOIN {forum_discussions} d ON d.id = p.discussion\n JOIN {forum} f ON f.id = d.forum\n JOIN {user} u ON u.id = p.userid\n WHERE p.created > ? AND f.course = ?\n ORDER BY p.id ASC", array($timestart, $course->id)))) { // order by initial posting date return false; } $modinfo = get_fast_modinfo($course); $groupmodes = array(); $cms = array(); $strftimerecent = get_string('strftimerecent'); $printposts = array(); foreach ($posts as $post) { if (!isset($modinfo->instances['forum'][$post->forum])) { // not visible continue; } $cm = $modinfo->instances['forum'][$post->forum]; if (!$cm->uservisible) { continue; } $context = context_module::instance($cm->id); if (!has_capability('mod/forum:viewdiscussion', $context)) { continue; } if (!empty($CFG->forum_enabletimedposts) and $USER->id != $post->duserid and ($post->timestart > 0 and $post->timestart > time() or $post->timeend > 0 and $post->timeend < time())) { if (!has_capability('mod/forum:viewhiddentimedposts', $context)) { continue; } } // Check that the user can see the discussion. if (forum_is_user_group_discussion($cm, $post->groupid)) { $printposts[] = $post; } } unset($posts); if (!$printposts) { return false; } echo $OUTPUT->heading(get_string('newforumposts', 'forum') . ':', 3); $list = html_writer::start_tag('ul', ['class' => 'unlist']); foreach ($printposts as $post) { $subjectclass = empty($post->parent) ? ' bold' : ''; $authorhidden = forum_is_author_hidden($post, (object) ['type' => $post->forumtype]); $list .= html_writer::start_tag('li'); $list .= html_writer::start_div('head'); $list .= html_writer::div(userdate($post->modified, $strftimerecent), 'date'); if (!$authorhidden) { $list .= html_writer::div(fullname($post, $viewfullnames), 'name'); } $list .= html_writer::end_div(); // Head. $list .= html_writer::start_div('info' . $subjectclass); $discussionurl = new moodle_url('/mod/forum/discuss.php', ['d' => $post->discussion]); if (!empty($post->parent)) { $discussionurl->param('parent', $post->parent); $discussionurl->set_anchor('p' . $post->id); } $post->subject = break_up_long_words(format_string($post->subject, true)); $list .= html_writer::link($discussionurl, $post->subject); $list .= html_writer::end_div(); // Info. $list .= html_writer::end_tag('li'); } $list .= html_writer::end_tag('ul'); echo $list; return true; }