mirror of
https://github.com/moodle/moodle.git
synced 2025-03-14 04:30:15 +01:00
MDL-18599 mod_forum: Hide single discussion owner's name and picture
* On the discussion's page. * On the recent activity block. * On the recent activity page.
This commit is contained in:
parent
5a1728df39
commit
af0fc6a254
@ -1602,27 +1602,34 @@ function forum_print_recent_activity($course, $viewfullnames, $timestart) {
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
@ -3319,53 +3326,69 @@ function forum_print_post($post, $discussion, $forum, &$cm, $course, $ownpost=fa
|
||||
$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 ($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.
|
||||
}
|
||||
if (empty($groupoutput)) {
|
||||
$groupoutput = ' ';
|
||||
}
|
||||
$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'));
|
||||
|
||||
@ -5899,6 +5922,7 @@ function forum_get_recent_mod_activity(&$activities, &$index, $timestart, $cours
|
||||
$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');
|
||||
@ -5913,48 +5937,85 @@ function forum_get_recent_mod_activity(&$activities, &$index, $timestart, $cours
|
||||
}
|
||||
|
||||
/**
|
||||
* @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">';
|
||||
$tableoptions = [
|
||||
'border' => '0',
|
||||
'cellpadding' => '3',
|
||||
'cellspacing' => '0',
|
||||
'class' => 'forum-recent'
|
||||
];
|
||||
$output = html_writer::start_tag('table', $tableoptions);
|
||||
$output .= html_writer::start_tag('tr');
|
||||
|
||||
echo "<tr><td class=\"userpicture\" valign=\"top\">";
|
||||
echo $OUTPUT->user_picture($activity->user, array('courseid'=>$courseid));
|
||||
echo "</td><td class=\"$class\">";
|
||||
$post = (object) ['parent' => $content->parent];
|
||||
$forum = (object) ['type' => $content->forumtype];
|
||||
$authorhidden = forum_is_author_hidden($post, $forum);
|
||||
|
||||
if ($activity->content->parent) {
|
||||
// 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;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -7910,3 +7971,24 @@ function mod_forum_myprofile_navigation(core_user\output\myprofile\tree $tree, $
|
||||
|
||||
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;
|
||||
}
|
||||
|
@ -3012,6 +3012,39 @@ class mod_forum_lib_testcase extends advanced_testcase {
|
||||
$this->assertCount($expectedreplycount, $unmailed);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for forum_is_author_hidden.
|
||||
*/
|
||||
public function test_forum_is_author_hidden() {
|
||||
// First post, different forum type.
|
||||
$post = (object) ['parent' => 0];
|
||||
$forum = (object) ['type' => 'standard'];
|
||||
$this->assertFalse(forum_is_author_hidden($post, $forum));
|
||||
|
||||
// Child post, different forum type.
|
||||
$post->parent = 1;
|
||||
$this->assertFalse(forum_is_author_hidden($post, $forum));
|
||||
|
||||
// First post, single simple discussion forum type.
|
||||
$post->parent = 0;
|
||||
$forum->type = 'single';
|
||||
$this->assertTrue(forum_is_author_hidden($post, $forum));
|
||||
|
||||
// Child post, single simple discussion forum type.
|
||||
$post->parent = 1;
|
||||
$this->assertFalse(forum_is_author_hidden($post, $forum));
|
||||
|
||||
// Incorrect parameters: $post.
|
||||
$this->setExpectedException('coding_exception', '$post->parent must be set.');
|
||||
unset($post->parent);
|
||||
forum_is_author_hidden($post, $forum);
|
||||
|
||||
// Incorrect parameters: $forum.
|
||||
$this->setExpectedException('coding_exception', '$forum->type must be set.');
|
||||
unset($forum->type);
|
||||
forum_is_author_hidden($post, $forum);
|
||||
}
|
||||
|
||||
public function forum_get_unmailed_posts_provider() {
|
||||
return [
|
||||
'Untimed discussion; Single post; maxeditingtime not expired' => [
|
||||
|
Loading…
x
Reference in New Issue
Block a user