}
echo $OUTPUT->heading(get_string('newforumposts', 'forum').':', 3);
- echo "\n<ul class='unlist'>\n";
+ $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]);
- 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.'">';
+ $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));
- echo $post->subject;
- echo "</a>\"</div></li>\n";
+ $list .= html_writer::link($discussionurl, $post->subject);
+ $list .= html_writer::end_div(); // Info.
+ $list .= html_writer::end_tag('li');
}
- echo "</ul>\n";
+ $list .= html_writer::end_tag('ul');
+ echo $list;
return true;
}
$forumpostclass .= ' lastpost';
}
+ // Flag to indicate whether we should hide the author or not.
+ $authorhidden = forum_is_author_hidden($post, $forum);
$postbyuser = new stdClass;
$postbyuser->post = $post->subject;
$postbyuser->user = $postuser->fullname;
$discussionbyuser = get_string('postbyuser', 'forum', $postbyuser);
$output .= html_writer::tag('a', '', array('id'=>'p'.$post->id));
- $output .= html_writer::start_tag('div', array('class'=>'forumpost clearfix'.$forumpostclass.$topicclass,
- 'role' => 'region',
- 'aria-label' => $discussionbyuser));
- $output .= html_writer::start_tag('div', array('class'=>'row header clearfix'));
- $output .= html_writer::start_tag('div', array('class'=>'left picture'));
- $output .= $OUTPUT->user_picture($postuser, array('courseid'=>$course->id));
- $output .= html_writer::end_tag('div');
+ // Begin forum post.
+ $output .= html_writer::start_div('forumpost clearfix' . $forumpostclass . $topicclass,
+ ['role' => 'region', 'aria-label' => $discussionbyuser]);
+ // Begin header row.
+ $output .= html_writer::start_div('row header clearfix');
+ // User picture.
+ if (!$authorhidden) {
+ $picture = $OUTPUT->user_picture($postuser, ['courseid' => $course->id]);
+ $output .= html_writer::div($picture, 'left picture');
+ $topicclass = 'topic' . $topicclass;
+ }
- $output .= html_writer::start_tag('div', array('class'=>'topic'.$topicclass));
-
+ // Begin topic column.
+ $output .= html_writer::start_div($topicclass);
$postsubject = $post->subject;
if (empty($post->subjectnoformat)) {
$postsubject = format_string($postsubject);
}
- $output .= html_writer::tag('div', $postsubject, array('class'=>'subject',
- 'role' => 'heading',
- 'aria-level' => '2'));
+ $output .= html_writer::div($postsubject, 'subject', ['role' => 'heading', 'aria-level' => '2']);
- $by = new stdClass();
- $by->name = html_writer::link($postuser->profilelink, $postuser->fullname);
- $by->date = userdate($post->modified);
- $output .= html_writer::tag('div', get_string('bynameondate', 'forum', $by), array('class'=>'author',
- 'role' => 'heading',
- 'aria-level' => '2'));
-
- $output .= html_writer::end_tag('div'); //topic
- $output .= html_writer::end_tag('div'); //row
-
- $output .= html_writer::start_tag('div', array('class'=>'row maincontent clearfix'));
- $output .= html_writer::start_tag('div', array('class'=>'left'));
-
- $groupoutput = '';
- if ($groups) {
- $groupoutput = print_group_picture($groups, $course->id, false, true, true);
- }
- if (empty($groupoutput)) {
- $groupoutput = ' ';
+ if ($authorhidden) {
+ $bytext = userdate($post->modified);
+ } else {
+ $by = new stdClass();
+ $by->date = userdate($post->modified);
+ $by->name = html_writer::link($postuser->profilelink, $postuser->fullname);
+ $bytext = get_string('bynameondate', 'forum', $by);
+ }
+ $bytextoptions = [
+ 'role' => 'heading',
+ 'aria-level' => '2',
+ ];
+ $output .= html_writer::div($bytext, 'author', $bytextoptions);
+ // End topic column.
+ $output .= html_writer::end_div();
+
+ // End header row.
+ $output .= html_writer::end_div();
+
+ // Row with the forum post content.
+ $output .= html_writer::start_div('row maincontent clearfix');
+ // Show if author is not hidden or we have groups.
+ if (!$authorhidden || $groups) {
+ $output .= html_writer::start_div('left');
+ $groupoutput = '';
+ if ($groups) {
+ $groupoutput = print_group_picture($groups, $course->id, false, true, true);
+ }
+ if (empty($groupoutput)) {
+ $groupoutput = ' ';
+ }
+ $output .= html_writer::div($groupoutput, 'grouppictures');
+ $output .= html_writer::end_div(); // Left side.
}
- $output .= html_writer::tag('div', $groupoutput, array('class'=>'grouppictures'));
- $output .= html_writer::end_tag('div'); //left side
$output .= html_writer::start_tag('div', array('class'=>'no-overflow'));
$output .= html_writer::start_tag('div', array('class'=>'content'));
$tmpactivity->content->discussion = $post->discussion;
$tmpactivity->content->subject = format_string($post->subject);
$tmpactivity->content->parent = $post->parent;
+ $tmpactivity->content->forumtype = $post->forumtype;
$tmpactivity->user = new stdClass();
$additionalfields = array('id' => 'userid', 'picture', 'imagealt', 'email');
}
/**
- * @todo Document this function
- * @global object
+ * Outputs the forum post indicated by $activity.
+ *
+ * @param object $activity the activity object the forum resides in
+ * @param int $courseid the id of the course the forum resides in
+ * @param bool $detail not used, but required for compatibilty with other modules
+ * @param int $modnames not used, but required for compatibilty with other modules
+ * @param bool $viewfullnames not used, but required for compatibilty with other modules
*/
function forum_print_recent_mod_activity($activity, $courseid, $detail, $modnames, $viewfullnames) {
- global $CFG, $OUTPUT;
+ global $OUTPUT;
- if ($activity->content->parent) {
+ $content = $activity->content;
+ if ($content->parent) {
$class = 'reply';
} else {
$class = 'discussion';
}
- echo '<table border="0" cellpadding="3" cellspacing="0" class="forum-recent">';
-
- echo "<tr><td class=\"userpicture\" valign=\"top\">";
- echo $OUTPUT->user_picture($activity->user, array('courseid'=>$courseid));
- echo "</td><td class=\"$class\">";
-
- if ($activity->content->parent) {
+ $tableoptions = [
+ 'border' => '0',
+ 'cellpadding' => '3',
+ 'cellspacing' => '0',
+ 'class' => 'forum-recent'
+ ];
+ $output = html_writer::start_tag('table', $tableoptions);
+ $output .= html_writer::start_tag('tr');
+
+ $post = (object) ['parent' => $content->parent];
+ $forum = (object) ['type' => $content->forumtype];
+ $authorhidden = forum_is_author_hidden($post, $forum);
+
+ // Show user picture if author should not be hidden.
+ if (!$authorhidden) {
+ $pictureoptions = [
+ 'courseid' => $courseid,
+ 'link' => $authorhidden,
+ 'alttext' => $authorhidden,
+ ];
+ $picture = $OUTPUT->user_picture($activity->user, $pictureoptions);
+ $output .= html_writer::tag('td', $picture, ['class' => 'userpicture', 'valign' => 'top']);
+ }
+
+ // Discussion title and author.
+ $output .= html_writer::start_tag('td', ['class' => $class]);
+ if ($content->parent) {
$class = 'title';
} else {
// Bold the title of new discussions so they stand out.
$class = 'title bold';
}
- echo "<div class=\"{$class}\">";
+
+ $output .= html_writer::start_div($class);
if ($detail) {
$aname = s($activity->name);
- echo "<img src=\"" . $OUTPUT->pix_url('icon', $activity->type) . "\" ".
- "class=\"icon\" alt=\"{$aname}\" />";
+ $output .= html_writer::img($OUTPUT->pix_url('icon', $activity->type), $aname, ['class' => 'icon']);
}
- echo "<a href=\"$CFG->wwwroot/mod/forum/discuss.php?d={$activity->content->discussion}"
- ."#p{$activity->content->id}\">{$activity->content->subject}</a>";
- echo '</div>';
+ $discussionurl = new moodle_url('/mod/forum/discuss.php', ['d' => $content->discussion]);
+ $discussionurl->set_anchor('p' . $activity->content->id);
+ $output .= html_writer::link($discussionurl, $content->subject);
+ $output .= html_writer::end_div();
- echo '<div class="user">';
- $fullname = fullname($activity->user, $viewfullnames);
- echo "<a href=\"$CFG->wwwroot/user/view.php?id={$activity->user->id}&course=$courseid\">"
- ."{$fullname}</a> - ".userdate($activity->timestamp);
- echo '</div>';
- echo "</td></tr></table>";
+ $timestamp = userdate($activity->timestamp);
+ if ($authorhidden) {
+ $authornamedate = $timestamp;
+ } else {
+ $fullname = fullname($activity->user, $viewfullnames);
+ $userurl = new moodle_url('/user/view.php');
+ $userurl->params(['id' => $activity->user->id, 'course' => $courseid]);
+ $by = new stdClass();
+ $by->name = html_writer::link($userurl, $fullname);
+ $by->date = $timestamp;
+ $authornamedate = get_string('bynameondate', 'forum', $by);
+ }
+ $output .= html_writer::div($authornamedate, 'user');
+ $output .= html_writer::end_tag('td');
+ $output .= html_writer::end_tag('tr');
+ $output .= html_writer::end_tag('table');
- return;
+ echo $output;
}
/**
return true;
}
+
+/**
+ * Checks whether the author's name and picture for a given post should be hidden or not.
+ *
+ * @param object $post The forum post.
+ * @param object $forum The forum object.
+ * @return bool
+ * @throws coding_exception
+ */
+function forum_is_author_hidden($post, $forum) {
+ if (!isset($post->parent)) {
+ throw new coding_exception('$post->parent must be set.');
+ }
+ if (!isset($forum->type)) {
+ throw new coding_exception('$forum->type must be set.');
+ }
+ if ($forum->type === 'single' && empty($post->parent)) {
+ return true;
+ }
+ return false;
+}