Index: search/documents/forum_document.php =================================================================== --- a/search/documents/forum_document.php (revision 242) +++ b/search/documents/forum_document.php (revision 243) @@ -34,6 +34,8 @@ * constructor */ public function __construct(&$post, $forum_id, $course_id, $itemtype, $context_id) { + global $CFG; + // generic information $doc->docid = $post['id']; $doc->documenttype = SEARCH_TYPE_FORUM; @@ -43,7 +45,7 @@ $doc->title = $post['subject']; $user = get_record('user', 'id', $post['userid']); - $doc->author = fullname($user); + $doc->author = $post['anonymous'] ? $CFG->forum_anonymousname : fullname($user); $doc->contents = $post['message']; $doc->date = $post['created']; $doc->url = forum_make_link($post['discussion'], $post['id']); @@ -51,8 +53,8 @@ // module specific information $data->forum = $forum_id; $data->discussion = $post['discussion']; - - parent::__construct($doc, $data, $course_id, $post['groupid'], $post['userid'], 'mod/'.SEARCH_TYPE_FORUM); + + parent::__construct($doc, $data, $course_id, $post['groupid'], $post['anonymous'] ? null : $post['userid'], PATH_FOR_SEARCH_TYPE_FORUM); } } @@ -189,6 +191,7 @@ p.discussion, p.message, p.created, + p.anonymous, d.groupid, p.userid, u.firstname, @@ -316,4 +319,4 @@ return mb_convert_encoding($title, 'auto', 'UTF-8'); } -?> \ No newline at end of file +?> Index: mod/forum/rsslib.php =================================================================== --- a/mod/forum/rsslib.php (revision 242) +++ b/mod/forum/rsslib.php (revision 243) @@ -166,7 +166,8 @@ u.lastname AS userlastname, p.message AS postmessage, p.created AS postcreated, - p.format AS postformat + p.format AS postformat, + p.anonymous FROM {$CFG->prefix}forum_discussions d, {$CFG->prefix}forum_posts p, {$CFG->prefix}user u @@ -186,9 +187,14 @@ unset($item); unset($user); $item->title = format_string($rec->discussionname); - $user->firstname = $rec->userfirstname; - $user->lastname = $rec->userlastname; - $item->author = fullname($user); + $rec->anonymous = $forum->anonymous == 1 ? true : ($rec->anonymous == 2 ? $rec->anonymous : false); + if ($rec->anonymous) { + $item->author = $CFG->forum_anonymousname; + } else { + $user->firstname = $rec->userfirstname; + $user->lastname = $rec->userlastname; + $item->author = fullname($user); + } $item->pubdate = $rec->postcreated; $item->link = $CFG->wwwroot."/mod/forum/discuss.php?d=".$rec->discussionid; $item->description = format_text($rec->postmessage,$rec->postformat,$formatoptions,$forum->course); @@ -221,7 +227,8 @@ p.subject AS postsubject, p.message AS postmessage, p.created AS postcreated, - p.format AS postformat + p.format AS postformat, + p.anonymous FROM {$CFG->prefix}forum_discussions d, {$CFG->prefix}forum_posts p, {$CFG->prefix}user u @@ -243,9 +250,14 @@ unset($user); $item->category = $rec->discussionname; $item->title = $rec->postsubject; - $user->firstname = $rec->userfirstname; - $user->lastname = $rec->userlastname; - $item->author = fullname($user); + $rec->anonymous = $forum->anonymous == 1 ? true : ($forum->anonymous == 2 ? $rec->anonymous : false); + if ($rec->anonymous) { + $item->author = $CFG->forum_anonymousname; + } else { + $user->firstname = $rec->userfirstname; + $user->lastname = $rec->userlastname; + $item->author = fullname($user); + } $item->pubdate = $rec->postcreated; $item->link = $CFG->wwwroot."/mod/forum/discuss.php?d=".$rec->discussionid."&parent=".$rec->postid; $item->description = format_text($rec->postmessage,$rec->postformat,$formatoptions,$forum->course); Index: mod/forum/db/install.xml =================================================================== --- a/mod/forum/db/install.xml (revision 242) +++ b/mod/forum/db/install.xml (revision 243) @@ -23,7 +23,8 @@ - + + @@ -69,7 +70,8 @@ - + + Index: mod/forum/db/upgrade.php =================================================================== --- a/mod/forum/db/upgrade.php (revision 242) +++ b/mod/forum/db/upgrade.php (revision 243) @@ -87,6 +87,17 @@ delete_records('forum_ratings', 'post', 0); /// Clean existing wrong rates. MDL-18227 } + if ($result && $oldversion < 2007101513) { + $table = new XMLDBTable('forum'); + $field = new XMLDBField('anonymous'); + $field->setAttributes(XMLDB_TYPE_INTEGER, '2', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0', 'blockperiod'); + $result = $result && add_field($table, $field); + $table = new XMLDBTable('forum_posts'); + $field = new XMLDBField('anonymous'); + $field->setAttributes(XMLDB_TYPE_INTEGER, '2', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0', 'mailnow'); + $result = $result && add_field($table, $field); + } + return $result; } Index: mod/forum/settings.php =================================================================== --- a/mod/forum/settings.php (revision 242) +++ b/mod/forum/settings.php (revision 243) @@ -64,4 +64,7 @@ $settings->add(new admin_setting_configcheckbox('forum_ajaxrating', get_string('ajaxrating', 'forum'), get_string('configajaxrating', 'forum'), 0)); +// anonymous user name +$settings->add(new admin_setting_configtext('forum_anonymousname', get_string('anonymousname', 'forum'), + get_string('configanonymousname', 'forum'), 'Anonymous', PARAM_TEXT)); ?> Index: mod/forum/mod_form.php =================================================================== --- a/mod/forum/mod_form.php (revision 242) +++ b/mod/forum/mod_form.php (revision 243) @@ -33,6 +33,16 @@ $mform->setHelpButton('intro', array('writing', 'questions', 'richtext'), false, 'editorhelpbutton'); $options = array(); + $options[0] = get_string('anonno', 'forum'); + $options[1] = get_string('anonyes', 'forum'); + $options[2] = get_string('anonoptional', 'forum'); + $mform->addElement('select', 'anonymous', get_string('allowanonymous', 'forum'), $options); + + $mform->setHelpButton('anonymous', array('anonymous', get_string('allowanonymous', 'forum'), 'forum')); + $mform->addElement('html', '
Anonymous posts are not truly anonymous -- the instructor can reveal the authors\' names at any time.
'); + $mform->addElement('html', '
Click on the "?" icon above for further details.

'); + + $options = array(); $options[0] = get_string('no'); $options[1] = get_string('yesforever', 'forum'); $options[FORUM_INITIALSUBSCRIBE] = get_string('yesinitially', 'forum'); Index: mod/forum/search.php =================================================================== --- a/mod/forum/search.php (revision 242) +++ b/mod/forum/search.php (revision 243) @@ -114,6 +114,7 @@ /// We need to do a search now and print results + $extrasql = preg_match('/(^| )user(id)?:/', $search) ? 'AND anonymous = 0' : ''; $searchterms = str_replace('forumid:', 'instance:', $search); $searchterms = explode(' ', $searchterms); @@ -124,8 +125,7 @@ $navlinks[] = array('name' => s($search, true), 'link' => '', 'type' => 'link'); $navigation = build_navigation($navlinks); - - if (!$posts = forum_search_posts($searchterms, $course->id, $page*$perpage, $perpage, $totalcount)) { + if (!$posts = forum_search_posts($searchterms, $course->id, $page*$perpage, $perpage, $totalcount, $extrasql)) { print_header_simple("$strsearchresults", "", $navigation, 'search.words', "", "", " ", navmenu($course)); print_heading(get_string("nopostscontaining", "forum", $search)); Index: mod/forum/lib.php =================================================================== --- a/mod/forum/lib.php (revision 242) +++ b/mod/forum/lib.php (revision 243) @@ -463,6 +463,9 @@ $posttext = forum_make_mail_text($course, $forum, $discussion, $post, $userfrom, $userto); $posthtml = forum_make_mail_html($course, $forum, $discussion, $post, $userfrom, $userto); + $post->anonymous = $forum->anonymous == 1 ? true : ($forum->anonymous == 2 ? $post->anonymous : false); + $userfrom = $post->anonymous ? $CFG->forum_anonymousname : $userfrom; + // Send the post now! mtrace('Sending ', ''); @@ -697,6 +700,7 @@ foreach ($postsarray as $postid) { $post = $posts[$postid]; + $post->anonymous = $forum->anonymous == 1 ? true : ($forum->anonymous == 2 ? $post->anonymous : false); if (array_key_exists($post->userid, $users)) { // we might know him/her already $userfrom = $users[$post->userid]; @@ -721,12 +725,16 @@ if ($userto->maildigest == 2) { // Subjects only $by = new object(); - $by->name = fullname($userfrom); + $by->name = $post->anonymous ? $CFG->forum_anonymousname : fullname($userfrom); $by->date = userdate($post->modified); $posttext .= "\n".format_string($post->subject,true).' '.get_string("bynameondate", "forum", $by); $posttext .= "\n---------------------------------------------------------------------"; - $by->name = "wwwroot/user/view.php?id=$userfrom->id&course=$course->id\">$by->name"; + if ($post->anonymous) { + $by->name = $CFG->forum_anonymousname; + } else { + $by->name = "wwwroot/user/view.php?id=$userfrom->id&course=$course->id\">$by->name"; + } $posthtml .= '
'.format_string($post->subject,true).' '.get_string("bynameondate", "forum", $by).'
'; } else { @@ -811,6 +819,8 @@ function forum_make_mail_text($course, $forum, $discussion, $post, $userfrom, $userto, $bare = false) { global $CFG, $USER; + $post->anonymous = $forum->anonymous == 1 ? true : ($forum->anonymous == 2 ? $post->anonymous : false); + if (!isset($userto->viewfullnames[$forum->id])) { if (!$cm = get_coursemodule_from_instance('forum', $forum->id, $course->id)) { error('Course Module ID was incorrect'); @@ -829,7 +839,7 @@ } $by = New stdClass; - $by->name = fullname($userfrom, $viewfullnames); + $by->name = $post->anonymous ? $CFG->forum_anonymousname : fullname($userfrom, $viewfullnames); $by->date = userdate($post->modified, "", $userto->timezone); $strbynameondate = get_string('bynameondate', 'forum', $by); @@ -1231,10 +1241,11 @@ foreach ($printposts as $post) { $subjectclass = empty($post->parent) ? ' bold' : ''; + $fullname = $post->anonymous ? $CFG->forum_anonymousname : fullname($post, $viewfullnames); echo '
  • '. '
    '.userdate($post->modified, $strftimerecent).'
    '. - '
    '.fullname($post, $viewfullnames).'
    '. + '
    '.$fullname.'
    '. '
    '; echo '
    '; if (empty($post->parent)) { @@ -2010,6 +2021,7 @@ JOIN {$CFG->prefix}user u ON u.id = p.userid WHERE f.id = $forumid AND p.userid = $userid + AND p.anonymous = 0 $timedsql ORDER BY p.modified ASC"); } @@ -2038,6 +2050,7 @@ JOIN {$CFG->prefix}forum_posts p ON p.discussion = d.id WHERE f.id = $forumid AND p.userid = $userid + AND p.anonymous = 0 $timedsql"); } @@ -2066,6 +2079,7 @@ JOIN {$CFG->prefix}user u ON u.id = p.userid WHERE f.id = $forumid AND p.userid = $userid + AND p.anonymous = 0 $timedsql"); } @@ -2670,6 +2684,8 @@ global $CFG; + $post->anonymous = $forum->anonymous == 1 ? true : ($forum->anonymous == 2 ? $post->anonymous : false); + if (!isset($userto->viewfullnames[$forum->id])) { if (!$cm = get_coursemodule_from_instance('forum', $forum->id, $course->id)) { error('Course Module ID was incorrect'); @@ -2684,11 +2700,12 @@ $options = new object(); $options->para = true; $formattedtext = format_text(trusttext_strip($post->message), $post->format, $options, $course->id); + $anonpicture = '' . $CFG->forum_anonymousname . ''; $output = ''; $output .= ''; if ($post->parent) { @@ -2700,7 +2717,7 @@ $fullname = fullname($userfrom, $viewfullnames); $by = new object(); - $by->name = ''.$fullname.''; + $by->name = $post->anonymous ? $CFG->forum_anonymousname : ''.$fullname.''; $by->date = userdate($post->modified, '', $userto->timezone); $output .= '
    '.get_string('bynameondate', 'forum', $by).'
    '; @@ -2795,8 +2812,9 @@ static $strpruneheading, $displaymode; static $strmarkread, $strmarkunread; - $post->course = $course->id; - $post->forum = $forum->id; + $post->course = $course->id; + $post->forum = $forum->id; + $post->anonymous = $forum->anonymous == 1 ? true : ($forum->anonymous == 2 ? $post->anonymous : false); // caching if (!isset($cm->cache)) { @@ -2888,9 +2906,10 @@ $postuser->lastname = $post->lastname; $postuser->imagealt = $post->imagealt; $postuser->picture = $post->picture; + $anonpicture = '' . $CFG->forum_anonymousname . ''; echo ''; if ($post->parent) { @@ -2908,8 +2927,14 @@ echo '
    '; $fullname = fullname($postuser, $cm->cache->caps['moodle/site:viewfullnames']); $by = new object(); - $by->name = ''.$fullname.''; + + if ($post->anonymous) { + $by->name = $CFG->forum_anonymousname; + } else { + $by->name = ''.$fullname.''; + } + $by->date = userdate($post->modified); print_string('bynameondate', 'forum', $by); echo '
    '; @@ -3146,6 +3171,16 @@ static $rowcount; static $strmarkalldread; + // MDL-1071 + // Because the discussion list doesn't actually use the post to build the page we have to + // load each post to see if it's anonymous, but only if anonymity is optional for this forum. + if ($forum->anonymous == 2) { + $actual_post = get_record('forum_posts', 'id', $post->id); + $post->anonymous = $actual_post->anonymous; + } else { + $post->anonymous = $forum->anonymous == 1 ? true : ($forum->anonymous == 2 ? $post->anonymous : false); + } + if (empty($modcontext)) { if (!$cm = get_coursemodule_from_instance('forum', $forum->id, $forum->course)) { error('Course Module ID was incorrect'); @@ -3177,15 +3212,22 @@ $postuser->lastname = $post->lastname; $postuser->imagealt = $post->imagealt; $postuser->picture = $post->picture; + $anonpicture = '' . $CFG->forum_anonymousname . ''; echo '\n"; // User name $fullname = fullname($post, has_capability('moodle/site:viewfullnames', $modcontext)); echo '\n"; // Group picture @@ -3242,8 +3284,13 @@ $usermodified->id = $post->usermodified; $usermodified->firstname = $post->umfirstname; $usermodified->lastname = $post->umlastname; - echo ''. - fullname($usermodified).'
    '; + $lastpost = (empty($post->lastpostid)) ? $post : get_record('forum_posts', 'id', $post->lastpostid); + if($lastpost->anonymous) { + echo $CFG->forum_anonymousname . '
    '; + } else { + echo ''. + fullname($usermodified).'
    '; + } echo ''. userdate($usedate, $datestring).''; echo "\n"; @@ -3905,6 +3952,7 @@ $post->attachment = ""; $post->forum = $forum->id; // speedup $post->course = $forum->course; // speedup + $post->anonymous = $forum->anonymous == 1 ? 1 : ($forum->anonymous == 2 ? (int)$post->anonymous : 0); if (! $post->id = insert_record("forum_posts", $post)) { return false; @@ -3935,6 +3983,7 @@ $forum = get_record('forum', 'id', $post->forum); $post->modified = time(); + $post->anonymous = $forum->anonymous == 1 ? 1 : ($forum->anonymous == 2 ? (int)$post->anonymous : 0); $updatediscussion = new object(); $updatediscussion->id = $post->discussion; @@ -3993,6 +4042,7 @@ $post->course = $forum->course; // speedup $post->format = $discussion->format; $post->mailnow = $discussion->mailnow; + $post->anonymous = $forum->anonymous == 1 ? 1 : ($forum->anonymous == 2 ? $discussion->anonymous : 0); if (! $post->id = insert_record("forum_posts", $post) ) { return 0; @@ -5175,7 +5225,13 @@ continue; } $by = new object(); - $by->name = fullname($post, $canviewfullnames); + + if($post->anonymous) { + $by->name = $CFG->forum_anonymousname; + } else { + $by->name = fullname($post, $canviewfullnames); + } + $by->date = userdate($post->modified); if ($forumtracked) { @@ -5256,7 +5312,7 @@ $cm = $modinfo->cms[$cmid]; if ($userid) { - $userselect = "AND u.id = $userid"; + $userselect = "AND u.id = $userid AND p.anonymous = 0"; } else { $userselect = ""; } @@ -5349,6 +5405,7 @@ $tmpactivity->user->picture = $post->picture; $tmpactivity->user->imagealt = $post->imagealt; $tmpactivity->user->email = $post->email; + $tmpactivity->user->anonymous = $post->anonymous; $activities[$index++] = $tmpactivity; } @@ -5371,7 +5428,11 @@ echo '
    '; - $output .= print_user_picture($userfrom, $course->id, $userfrom->picture, false, true); + $output .= $post->anonymous ? $anonpicture : print_user_picture($userfrom, $course->id, $userfrom->picture, false, true); $output .= '
    '; - print_user_picture($postuser, $course->id); + $post->anonymous ? print($anonpicture) : print_user_picture($postuser, $course->id); echo '
    '; - print_user_picture($postuser, $forum->course); + $post->anonymous ? print($anonpicture) : print_user_picture($postuser, $forum->course); echo "'; - echo ''.$fullname.''; + + if ($post->anonymous) { + echo $CFG->forum_anonymousname; + } else { + echo ''.$fullname.''; + } + echo "
    '; echo "
    "; - print_user_picture($activity->user, $courseid); + if($activity->user->anonymous) { + echo '' . $CFG->forum_anonymousname . ''; + } else { + print_user_picture($activity->user, $courseid); + } echo ""; echo '
    '; @@ -5385,7 +5446,7 @@ echo '
    '; echo '
    '; - $fullname = fullname($activity->user, $viewfullnames); + $fullname = $activity->user->anonymous ? $CFG->forum_anonymousname : fullname($activity->user, $viewfullnames); echo "wwwroot/user/view.php?id={$activity->user->id}&course=$courseid\">" ."{$fullname} - ".userdate($activity->timestamp); echo '
    '; Index: mod/forum/post_form.php =================================================================== --- a/mod/forum/post_form.php (revision 242) +++ b/mod/forum/post_form.php (revision 243) @@ -66,6 +66,11 @@ $mform->addElement('checkbox', 'mailnow', get_string('mailnow', 'forum')); } + // MDL-1071 + if ($forum->anonymous == 2) { + $mform->addElement('checkbox', 'anonymous', get_string('anonymouspost', 'forum')); + } + if (!empty($CFG->forum_enabletimedposts) && !$post->parent && has_capability('mod/forum:viewhiddentimedposts', $coursecontext)) { // hack alert $mform->addElement('header', '', get_string('displayperiod', 'forum')); Index: mod/forum/user.php =================================================================== --- a/mod/forum/user.php (revision 242) +++ b/mod/forum/user.php (revision 243) @@ -69,12 +69,12 @@ switch ($mode) { case 'posts' : $searchterms = array('userid:'.$user->id); - $extrasql = ''; + $extrasql = 'AND anonymous = 0'; break; default: $searchterms = array('userid:'.$user->id); - $extrasql = 'AND p.parent = 0'; + $extrasql = 'AND p.parent = 0 AND anonymous = 0'; break; } @@ -93,12 +93,9 @@ } // Get the posts. - if ($posts = forum_search_posts($searchterms, $searchcourse, $page*$perpage, $perpage, - $totalcount, $extrasql)) { + if ($posts = forum_search_posts($searchterms, $searchcourse, $page*$perpage, $perpage, $totalcount, $extrasql)) { + print_paging_bar($totalcount, $page, $perpage, "user.php?id=$user->id&course=$course->id&mode=$mode&perpage=$perpage&"); - print_paging_bar($totalcount, $page, $perpage, - "user.php?id=$user->id&course=$course->id&mode=$mode&perpage=$perpage&"); - $discussions = array(); $forums = array(); $cms = array(); Index: mod/forum/post.php =================================================================== --- a/mod/forum/post.php (revision 242) +++ b/mod/forum/post.php (revision 243) @@ -13,6 +13,7 @@ $name = optional_param('name', '', PARAM_CLEAN); $confirm = optional_param('confirm', 0, PARAM_INT); $groupid = optional_param('groupid', null, PARAM_INT); + $isanon = optional_param('anonymous', 0, PARAM_INT) ? true : false; //these page_params will be passed as hidden variables later in the form. @@ -111,6 +112,7 @@ $post->subject = ''; $post->userid = $USER->id; $post->message = ''; + $post->anonymous = $isanon; if (isset($groupid)) { $post->groupid = $groupid; @@ -179,6 +181,7 @@ $post->subject = $parent->subject; $post->userid = $USER->id; $post->message = ''; + $post->anonymous = $isanon; $post->groupid = ($discussion->groupid == -1) ? 0 : $discussion->groupid; @@ -391,6 +394,7 @@ $newpost->id = $post->id; $newpost->parent = 0; $newpost->subject = $name; + $newpost->anonymous = $isanon; if (!update_record("forum_posts", $newpost)) { error('Could not update the original post'); @@ -754,6 +758,7 @@ 'message'=>$post->message, 'subscribe'=>$subscribe?1:0, 'mailnow'=>!empty($post->mailnow), + 'anonymous'=>($post->anonymous)?1:0, 'userid'=>$post->userid, 'parent'=>$post->parent, 'discussion'=>$post->discussion, Index: lang/en_utf8/forum.php =================================================================== --- a/lang/en_utf8/forum.php (revision 242) +++ b/lang/en_utf8/forum.php (revision 243) @@ -15,6 +15,7 @@ $string['aggregatetype'] = 'Aggregate type'; $string['ajaxrating'] = 'Enable AJAX rating'; $string['allforums'] = 'All forums'; +$string['allowanonymous'] = 'Anonymize posts?'; $string['allowchoice'] = 'Allow everyone to choose'; $string['allowdiscussions'] = 'Can a $a post to this forum?'; $string['allowratings'] = 'Allow posts to be rated?'; @@ -22,6 +23,11 @@ $string['allowsdiscussions'] = 'This forum allows each person to start one discussion topic.'; $string['allsubscribe'] = 'Subscribe to all forums'; $string['allunsubscribe'] = 'Unsubscribe from all forums'; +$string['anonno'] = 'No, never'; +$string['anonoptional'] = 'Optional (let the user decide)'; +$string['anonyes'] = 'Yes, all posts'; +$string['anonymouspost'] = 'Post anonymously'; +$string['anonymousname'] = 'Anonymous user name'; $string['anyfile'] = 'Any file'; $string['attachment'] = 'Attachment'; $string['blockafter'] = 'Post threshold for blocking'; @@ -33,6 +39,7 @@ $string['cannotadddiscussionall'] = 'You do not have permission to add a new discussion topic for all participants.'; $string['cleanreadtime'] = 'Mark old posts as read hour'; $string['configajaxrating'] = 'AJAX rating is a forum rating usability improvement. If enabled, users can rate forum posts almost instantly without needing to scroll to the bottom of the page and click the \'Send in my latest ratings\' button. This setting also requires AJAX to be enabled for the site and in user profiles.'; +$string['configanonymousname'] = 'The user name to display on anonymous forum posts.'; $string['configcleanreadtime'] = 'The hour of the day to clean old posts from the \'read\' table.'; $string['configdisplaymode'] = 'The default display mode for discussions if one isn\'t set.'; $string['configenablerssfeeds'] = 'This switch will enable the possibility of RSS feeds for all forums. You will still need to turn feeds on manually in the settings for each forum.'; Index: lang/en_utf8/help/forum/anonymous.html =================================================================== --- a/lang/en_utf8/help/forum/anonymous.html (revision 0) +++ b/lang/en_utf8/help/forum/anonymous.html (revision 243) @@ -0,0 +1,17 @@ +

    Make posts anonymous?

    + +

    There are three options available:

    + +
      +
    • No, never (default): Anonymous posting is not an option.
    • +
    • Yes, all posts: Every post n the forum will be anonymous
    • +
    • Optional (let the user decide): The user will have an option to make their post anonymous. +
    + +

    +Even though anonymous posts will indeed show up as anonymous within Moodle for both instructors +and students, the "export forum" function available to instructors will unmask anonymous posts, +revealing the identity of the authors. In addition, course instructors can change this forum option +at anytime, and when changed from "Yes" or "Optional" to "No, never", all previously anonymous posts +will be unmasked. +