Index: search/documents/forum_document.php
===================================================================
--- search/documents/forum_document.php	(.../vendor/moodle/1.9weekly)	(revision 139)
+++ search/documents/forum_document.php	(.../branches/1.9.5-LAE1.0/AnonymousForums)	(revision 139)
@@ -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']);
@@ -52,7 +54,7 @@
         $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
===================================================================
--- mod/forum/rsslib.php	(.../vendor/moodle/1.9weekly)	(revision 139)
+++ mod/forum/rsslib.php	(.../branches/1.9.5-LAE1.0/AnonymousForums)	(revision 139)
@@ -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 : ($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."&parent=".$rec->postid;
                 $item->description = format_text($rec->postmessage,$rec->postformat,$formatoptions,$forum->course);
Index: mod/forum/db/install.xml
===================================================================
--- mod/forum/db/install.xml	(.../vendor/moodle/1.9weekly)	(revision 139)
+++ mod/forum/db/install.xml	(.../branches/1.9.5-LAE1.0/AnonymousForums)	(revision 139)
@@ -23,7 +23,8 @@
         <FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="rssarticles" NEXT="warnafter"/>
         <FIELD NAME="warnafter" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="timemodified" NEXT="blockafter"/>
         <FIELD NAME="blockafter" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="warnafter" NEXT="blockperiod"/>
-        <FIELD NAME="blockperiod" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="blockafter"/>
+        <FIELD NAME="blockperiod" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="blockafter" NEXT="anonymous"/>
+        <FIELD NAME="anonymous" TYPE="int" LENGTH="2" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="blockperiod"/>
       </FIELDS>
       <KEYS>
         <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
@@ -69,7 +70,8 @@
         <FIELD NAME="format" TYPE="int" LENGTH="2" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="message" NEXT="attachment"/>
         <FIELD NAME="attachment" TYPE="char" LENGTH="100" NOTNULL="true" SEQUENCE="false" ENUM="false" PREVIOUS="format" NEXT="totalscore"/>
         <FIELD NAME="totalscore" TYPE="int" LENGTH="4" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="attachment" NEXT="mailnow"/>
-        <FIELD NAME="mailnow" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="totalscore"/>
+        <FIELD NAME="mailnow" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="totalscore" NEXT="anonymous"/>
+        <FIELD NAME="anonymous" TYPE="int" LENGTH="2" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="mailnow"/>
       </FIELDS>
       <KEYS>
         <KEY NAME="primary" TYPE="primary" FIELDS="id" NEXT="discussion"/>
Index: mod/forum/db/upgrade.php
===================================================================
--- mod/forum/db/upgrade.php	(.../vendor/moodle/1.9weekly)	(revision 139)
+++ mod/forum/db/upgrade.php	(.../branches/1.9.5-LAE1.0/AnonymousForums)	(revision 139)
@@ -87,6 +87,18 @@
         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
===================================================================
--- mod/forum/settings.php	(.../vendor/moodle/1.9weekly)	(revision 139)
+++ mod/forum/settings.php	(.../branches/1.9.5-LAE1.0/AnonymousForums)	(revision 139)
@@ -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
===================================================================
--- mod/forum/mod_form.php	(.../vendor/moodle/1.9weekly)	(revision 139)
+++ mod/forum/mod_form.php	(.../branches/1.9.5-LAE1.0/AnonymousForums)	(revision 139)
@@ -33,6 +33,12 @@
         $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);
+
+        $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
===================================================================
--- mod/forum/search.php	(.../vendor/moodle/1.9weekly)	(revision 139)
+++ mod/forum/search.php	(.../branches/1.9.5-LAE1.0/AnonymousForums)	(revision 139)
@@ -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', "", "", "&nbsp;", navmenu($course));
         print_heading(get_string("nopostscontaining", "forum", $search));
 
Index: mod/forum/lib.php
===================================================================
--- mod/forum/lib.php	(.../vendor/moodle/1.9weekly)	(revision 139)
+++ mod/forum/lib.php	(.../branches/1.9.5-LAE1.0/AnonymousForums)	(revision 139)
@@ -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 = "<a target=\"_blank\" href=\"$CFG->wwwroot/user/view.php?id=$userfrom->id&amp;course=$course->id\">$by->name</a>";
+                            if ($post->anonymous) {
+                                $by->name = $CFG->forum_anonymousname;
+                            } else {
+                                $by->name = "<a target=\"_blank\" href=\"$CFG->wwwroot/user/view.php?id=$userfrom->id&amp;course=$course->id\">$by->name</a>";
+                            }
                             $posthtml .= '<div><a target="_blank" href="'.$CFG->wwwroot.'/mod/forum/discuss.php?d='.$discussion->id.'#p'.$post->id.'">'.format_string($post->subject,true).'</a> '.get_string("bynameondate", "forum", $by).'</div>';
 
                         } 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);
@@ -1204,10 +1214,11 @@
 
     foreach ($printposts as $post) {
         $subjectclass = empty($post->parent) ? ' bold' : '';
+        $fullname = $post->anonymous ? $CFG->forum_anonymousname : fullname($post, $viewfullnames);
 
         echo '<li><div class="head">'.
                '<div class="date">'.userdate($post->modified, $strftimerecent).'</div>'.
-               '<div class="name">'.fullname($post, $viewfullnames).'</div>'.
+               '<div class="name">'.$fullname.'</div>'.
              '</div>';
         echo '<div class="info'.$subjectclass.'">';
         if (empty($post->parent)) {
@@ -1983,6 +1994,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");
 }
@@ -2011,6 +2023,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");
 }
 
@@ -2039,6 +2052,7 @@
                                   JOIN {$CFG->prefix}user u              ON u.id = p.userid
                             WHERE f.id = $forumid
                                   AND p.userid = $userid
+                                  AND p.anonymous = 0
                                   $timedsql");
 }
 
@@ -2643,6 +2657,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');
@@ -2657,11 +2673,12 @@
     $options = new object();
     $options->para = true;
     $formattedtext = format_text(trusttext_strip($post->message), $post->format, $options, $course->id);
+    $anonpicture = '<img alt="' . $CFG->forum_anonymousname . '" src="' . $CFG->themewww . '/' . current_theme() . '/pix/anonymous.png' . '"/>';
 
     $output = '<table border="0" cellpadding="3" cellspacing="0" class="forumpost">';
 
     $output .= '<tr class="header"><td width="35" valign="top" class="picture left">';
-    $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 .= '</td>';
 
     if ($post->parent) {
@@ -2673,7 +2690,7 @@
 
     $fullname = fullname($userfrom, $viewfullnames);
     $by = new object();
-    $by->name = '<a href="'.$CFG->wwwroot.'/user/view.php?id='.$userfrom->id.'&amp;course='.$course->id.'">'.$fullname.'</a>';
+    $by->name = $post->anonymous ? $CFG->forum_anonymousname : '<a href="'.$CFG->wwwroot.'/user/view.php?id='.$userfrom->id.'&amp;course='.$course->id.'">'.$fullname.'</a>';
     $by->date = userdate($post->modified, '', $userto->timezone);
     $output .= '<div class="author">'.get_string('bynameondate', 'forum', $by).'</div>';
 
@@ -2768,8 +2785,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)) {
@@ -2861,9 +2879,10 @@
     $postuser->lastname  = $post->lastname;
     $postuser->imagealt  = $post->imagealt;
     $postuser->picture   = $post->picture;
+    $anonpicture         = '<img alt="' . $CFG->forum_anonymousname . '" src="' . $CFG->themewww . '/' . current_theme() . '/pix/anonymous.png' . '"/>';
 
     echo '<tr class="header"><td class="picture left">';
-    print_user_picture($postuser, $course->id);
+    $post->anonymous ? print($anonpicture) : print_user_picture($postuser, $course->id);
     echo '</td>';
 
     if ($post->parent) {
@@ -2881,8 +2900,14 @@
     echo '<div class="author">';
     $fullname = fullname($postuser, $cm->cache->caps['moodle/site:viewfullnames']);
     $by = new object();
-    $by->name = '<a href="'.$CFG->wwwroot.'/user/view.php?id='.
-                $post->userid.'&amp;course='.$course->id.'">'.$fullname.'</a>';
+
+    if ($post->anonymous) {
+       $by->name = $CFG->forum_anonymousname;
+    } else {
+       $by->name = '<a href="'.$CFG->wwwroot.'/user/view.php?id='.
+            $post->userid.'&amp;course='.$course->id.'">'.$fullname.'</a>';
+    }
+
     $by->date = userdate($post->modified);
     print_string('bynameondate', 'forum', $by);
     echo '</div></td></tr>';
@@ -3119,6 +3144,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');
@@ -3150,15 +3185,22 @@
     $postuser->lastname = $post->lastname;
     $postuser->imagealt = $post->imagealt;
     $postuser->picture = $post->picture;
+    $anonpicture = '<img alt="' . $CFG->forum_anonymousname . '" src="' . $CFG->themewww . '/' . current_theme() . '/pix/anonymous.png' . '"/>';
 
     echo '<td class="picture">';
-    print_user_picture($postuser, $forum->course);
+    $post->anonymous ? print($anonpicture) : print_user_picture($postuser, $forum->course);
     echo "</td>\n";
 
     // User name
     $fullname = fullname($post, has_capability('moodle/site:viewfullnames', $modcontext));
     echo '<td class="author">';
-    echo '<a href="'.$CFG->wwwroot.'/user/view.php?id='.$post->userid.'&amp;course='.$forum->course.'">'.$fullname.'</a>';
+
+    if ($post->anonymous) {
+        echo $CFG->forum_anonymousname;
+    } else {
+        echo '<a href="'.$CFG->wwwroot.'/user/view.php?id='.$post->userid.'&amp;course='.$forum->course.'">'.$fullname.'</a>';
+    }
+
     echo "</td>\n";
 
     // Group picture
@@ -3215,8 +3257,13 @@
     $usermodified->id        = $post->usermodified;
     $usermodified->firstname = $post->umfirstname;
     $usermodified->lastname  = $post->umlastname;
-    echo '<a href="'.$CFG->wwwroot.'/user/view.php?id='.$post->usermodified.'&amp;course='.$forum->course.'">'.
-         fullname($usermodified).'</a><br />';
+    $lastpost = (empty($post->lastpostid)) ? $post : get_record('forum_posts', 'id', $post->lastpostid);
+    if($lastpost->anonymous) {
+        echo $CFG->forum_anonymousname . '<br/>';
+    } else {
+        echo '<a href="'.$CFG->wwwroot.'/user/view.php?id='.$post->usermodified.'&amp;course='.$forum->course.'">'.
+             fullname($usermodified).'</a><br/>';
+    }
     echo '<a href="'.$CFG->wwwroot.'/mod/forum/discuss.php?d='.$post->discussion.$parenturl.'">'.
           userdate($usedate, $datestring).'</a>';
     echo "</td>\n";
@@ -3878,6 +3925,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;
@@ -3908,6 +3956,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;
@@ -3966,6 +4015,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;
@@ -5147,7 +5197,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) {
@@ -5228,7 +5284,7 @@
     $cm = $modinfo->cms[$cmid];
 
     if ($userid) {
-        $userselect = "AND u.id = $userid";
+        $userselect = "AND u.id = $userid AND p.anonymous = 0";
     } else {
         $userselect = "";
     }
@@ -5321,6 +5377,7 @@
         $tmpactivity->user->picture   = $post->picture;
         $tmpactivity->user->imagealt  = $post->imagealt;
         $tmpactivity->user->email     = $post->email;
+        $tmpactivity->user->anonymous = $post->anonymous;
 
         $activities[$index++] = $tmpactivity;
     }
@@ -5343,7 +5400,11 @@
     echo '<table border="0" cellpadding="3" cellspacing="0" class="forum-recent">';
 
     echo "<tr><td class=\"userpicture\" valign=\"top\">";
-    print_user_picture($activity->user, $courseid);
+    if($activity->user->anonymous) {
+        echo '<img alt="' . $CFG->forum_anonymousname . '" src="' . $CFG->themewww . '/' . current_theme() . '/pix/anonymous.png' . '"/>';
+    } else {
+        print_user_picture($activity->user, $courseid);
+    }
     echo "</td><td class=\"$class\">";
 
     echo '<div class="title">';
@@ -5357,7 +5418,7 @@
     echo '</div>';
 
     echo '<div class="user">';
-    $fullname = fullname($activity->user, $viewfullnames);
+    $fullname = $activity->user->anonymous ? $CFG->forum_anonymousname : fullname($activity->user, $viewfullnames);
     echo "<a href=\"$CFG->wwwroot/user/view.php?id={$activity->user->id}&amp;course=$courseid\">"
          ."{$fullname}</a> - ".userdate($activity->timestamp);
     echo '</div>';
Index: mod/forum/post_form.php
===================================================================
--- mod/forum/post_form.php	(.../vendor/moodle/1.9weekly)	(revision 139)
+++ mod/forum/post_form.php	(.../branches/1.9.5-LAE1.0/AnonymousForums)	(revision 139)
@@ -66,6 +66,10 @@
             $mform->addElement('checkbox', 'mailnow', get_string('mailnow', 'forum'));
         }
 
+         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
===================================================================
--- mod/forum/user.php	(.../vendor/moodle/1.9weekly)	(revision 139)
+++ mod/forum/user.php	(.../branches/1.9.5-LAE1.0/AnonymousForums)	(revision 139)
@@ -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&amp;course=$course->id&amp;mode=$mode&amp;perpage=$perpage&amp;");
 
-        print_paging_bar($totalcount, $page, $perpage,
-                         "user.php?id=$user->id&amp;course=$course->id&amp;mode=$mode&amp;perpage=$perpage&amp;");
-
         $discussions = array();
         $forums      = array();
         $cms         = array();
Index: mod/forum/post.php
===================================================================
--- mod/forum/post.php	(.../vendor/moodle/1.9weekly)	(revision 139)
+++ mod/forum/post.php	(.../branches/1.9.5-LAE1.0/AnonymousForums)	(revision 139)
@@ -5,6 +5,7 @@
     require_once('../../config.php');
     require_once('lib.php');
 
+
     $reply   = optional_param('reply', 0, PARAM_INT);
     $forum   = optional_param('forum', 0, PARAM_INT);
     $edit    = optional_param('edit', 0, PARAM_INT);
@@ -13,8 +14,8 @@
     $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.
     $page_params = array('reply'=>$reply, 'forum'=>$forum, 'edit'=>$edit);
 
@@ -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');
@@ -581,6 +585,7 @@
             $discussion = $fromform;
             $discussion->name  = $fromform->subject;
             $discussion->intro = $fromform->message;
+            $discussion->anonymous = $isanon;
             $newstopic = false;
 
             if ($forum->type == 'news' && !$fromform->parent) {
@@ -757,6 +762,7 @@
                                         'userid'=>$post->userid,
                                         'parent'=>$post->parent,
                                         'discussion'=>$post->discussion,
+					'anonymous'=>$post->anonymous,
                                         'course'=>$course->id)+
 
                                         $page_params+
Index: lang/en_utf8/forum.php
===================================================================
--- lang/en_utf8/forum.php	(.../vendor/moodle/1.9weekly)	(revision 139)
+++ lang/en_utf8/forum.php	(.../branches/1.9.5-LAE1.0/AnonymousForums)	(revision 139)
@@ -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['configanonymousname'] = 'Anonymous user name';
 $string['anyfile'] = 'Any file';
 $string['attachment'] = 'Attachment';
 $string['blockafter'] = 'Post threshold for blocking';

