diff --git a/mod/forum/lib.php b/mod/forum/lib.php index 246165ba60c..6ba5328ced3 100644 --- a/mod/forum/lib.php +++ b/mod/forum/lib.php @@ -4275,7 +4275,17 @@ function forum_discussions_user_has_posted_in($forumid, $userid) { */ function forum_user_has_posted($forumid, $did, $userid) { global $DB; - return $DB->record_exists('forum_posts', array('discussion'=>$did,'userid'=>$userid)); + + if (empty($did)) { + // posted in any forum discussion? + $sql = "SELECT 'x' + FROM {forum_posts} p + JOIN {forum_discussions} d ON d.id = p.discussion + WHERE p.userid = :userid AND d.forum = :forumid"; + return $DB->record_exists_sql($sql, array('forumid'=>$forumid,'userid'=>$userid)); + } else { + return $DB->record_exists('forum_posts', array('discussion'=>$did,'userid'=>$userid)); + } } /** diff --git a/mod/forum/post.php b/mod/forum/post.php index d1f8b6c85d7..a56bb830fb4 100644 --- a/mod/forum/post.php +++ b/mod/forum/post.php @@ -729,9 +729,17 @@ } //load data into form - $subscribe=(isset($post->forum)&&forum_is_subscribed($USER->id, $post->forum)) || - (!empty($USER->autosubscribe)); + if (forum_is_subscribed($USER->id, $forum->id)) { + $subscribe = true; + + } else if (forum_user_has_posted($forum->id, 0, $USER->id)) { + $subscribe = false; + + } else { + // user not posted yet - use subscription default specified in profile + $subscribe = !empty($USER->autosubscribe); + } // HACK ALERT: this is very wrong, the defaults should be always initialized before calling $mform->get_data() !!! $mform_post->set_data(array( 'general'=>$heading,