]> git.mjollnir.org Git - moodle.git/commitdiff
Merged some forum fixes from stable MDL-8767
authormoodler <moodler>
Tue, 6 Mar 2007 12:59:18 +0000 (12:59 +0000)
committermoodler <moodler>
Tue, 6 Mar 2007 12:59:18 +0000 (12:59 +0000)
mod/forum/lib.php

index e2c0cc1f161c94d85b124bf07109d86a2c742dcf..71400e7cb14253a49a6d59def2cb32f93f093f6d 100644 (file)
@@ -324,10 +324,14 @@ function forum_cron() {
 
             $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id);   // Cached already
 
+
             if ($users = forum_subscribed_users($course, $forum, 0, true)) {
 
+                mtrace('Found '.count($users).' subscribed users for forum '.$forum->id);
+
                 $mailcount=0;
                 $errorcount=0;
+
                 foreach ($users as $userto) {
                     if ($groupmode) {    // Look for a reason not to send this email
                         if (!empty($group->id)) {
@@ -341,6 +345,7 @@ function forum_cron() {
 
                     // make sure we're allowed to see it...
                     if (!forum_user_can_see_post($forum, $discussion, $post, $userto)) {
+                        mtrace('user '.$userto->id. ' can not see '.$post->id);
                         continue;
                     }
 
@@ -361,6 +366,8 @@ function forum_cron() {
                     $USER = $userto;
                     course_setup($course);
 
+                    mtrace('Sending post '.$post->id. ' to user '.$userto->id. '...', '');
+
                     $postsubject = "$course->shortname: ".format_string($post->subject,true);
                     $posttext = forum_make_mail_text($course, $forum, $discussion, $post, $userfrom, $userto);
                     $posthtml = forum_make_mail_html($course, $forum, $discussion, $post, $userfrom, $userto);
@@ -389,6 +396,8 @@ function forum_cron() {
                             }
                         }
                     }
+
+                    mtrace(' sent.');
                 }
 
                 mtrace(".... mailed to $mailcount users.");
@@ -691,7 +700,7 @@ function forum_make_mail_html($course, $forum, $discussion, $post, $userfrom, $u
 
     $strforums = get_string('forums', 'forum');
     $canreply = forum_user_can_post($forum, $userto);
-    $canunsubscribe = ! forum_is_forcesubscribed($forum->id);
+    $canunsubscribe = ! $forum->forcesubscribe;
 
     $posthtml = '<head>';
     foreach ($CFG->stylesheets as $stylesheet) {
@@ -2908,14 +2917,18 @@ function forum_user_has_posted($forumid, $did, $userid) {
     return record_exists('forum_posts','discussion',$did,'userid',$userid);
 }
 
-function forum_user_can_post_discussion($forum, $currentgroup=false, $groupmode='') {
+function forum_user_can_post_discussion($forum, $currentgroup=false, $groupmode=false, $cm=NULL, $context=NULL) {
 // $forum is an object
     global $USER, $SESSION;
 
-    if (!$cm = get_coursemodule_from_instance('forum', $forum->id, $forum->course)) {
-        error('Course Module ID was incorrect');
+    if (!$cm) {
+        if (!$cm = get_coursemodule_from_instance('forum', $forum->id, $forum->course)) {
+            error('Course Module ID was incorrect');
+        }
+    }
+    if (!$context) {
+        $context = get_context_instance(CONTEXT_MODULE, $cm->id);
     }
-    $context = get_context_instance(CONTEXT_MODULE, $cm->id);
 
     if (!has_capability('mod/forum:startdiscussion', $context)) {
         return false;
@@ -2944,12 +2957,16 @@ function forum_user_can_post_discussion($forum, $currentgroup=false, $groupmode=
  * @param $forum - forum object
  * @param $user - user object
  */
-function forum_user_can_post($forum, $user=NULL) {
+function forum_user_can_post($forum, $user=NULL, $cm=NULL, $context=NULL) {
 
-    if (!$cm = get_coursemodule_from_instance('forum', $forum->id, $forum->course)) {
-        error('Course Module ID was incorrect');
+    if (!$cm) {
+        if (!$cm = get_coursemodule_from_instance('forum', $forum->id, $forum->course)) {
+            error('Course Module ID was incorrect');
+        }
+    }
+    if (!$context) {
+        $context = get_context_instance(CONTEXT_MODULE, $cm->id);
     }
-    $context = get_context_instance(CONTEXT_MODULE, $cm->id);
 
     if (isset($user)) {
         $canreply = has_capability('mod/forum:replypost', $context, $user->id, false)
@@ -3108,11 +3125,7 @@ function forum_print_latest_discussions($course, $forum, $maxdiscussions=5, $dis
 /// First check the group stuff
 
     if ($groupmode == -1) {    /// We need to reconstruct groupmode because none was given
-        if ($cm = get_coursemodule_from_instance('forum', $forum->id, $course->id)) {
-            $groupmode = groupmode($course, $cm);
-        } else {
-            $groupmode = SEPARATEGROUPS;
-        }
+        $groupmode = groupmode($course, $cm);   // Works even if $cm is not valid
     }
 
     if ($currentgroup == -1) {    /// We need to reconstruct currentgroup because none was given
@@ -3130,8 +3143,8 @@ function forum_print_latest_discussions($course, $forum, $maxdiscussions=5, $dis
 /// button for it. We do not show the button if we are showing site news
 /// and the current user is a guest.
 
-    // TODO: Add group mode in there, to test for visible group.
-    if (forum_user_can_post_discussion($forum, $currentgroup, $groupmode)) {
+    if (forum_user_can_post_discussion($forum, $currentgroup, $groupmode, $cm, $context) ||
+        ($forum->type != 'news' && has_capability('moodle/legacy:guest', $context, NULL, false)) ) {
 
         echo '<div class="singlebutton forumaddnew">';
         echo "<form id=\"newdiscussionform\" method=\"get\" action=\"$CFG->wwwroot/mod/forum/post.php\">";