diff --git a/mod/forum/lib.php b/mod/forum/lib.php index 79297f484e9..84c948ab458 100644 --- a/mod/forum/lib.php +++ b/mod/forum/lib.php @@ -4190,7 +4190,19 @@ function forum_discussions_user_has_posted_in($forumid, $userid) { * */ function forum_user_has_posted($forumid, $did, $userid) { - return record_exists('forum_posts','discussion',$did,'userid',$userid); + global $CFG; + + if (empty($did)) { + // posted in any forum discussion? + $sql = "SELECT 'x' + FROM {$CFG->prefix}forum_posts p + JOIN {$CFG->prefix}forum_discussions d ON d.id = p.discussion + WHERE p.userid = $userid AND d.forum = $forumid"; + return record_exists_sql($sql); + } else { + // started discussion? + return record_exists('forum_posts','discussion',$did,'userid',$userid); + } } /** diff --git a/mod/forum/post.php b/mod/forum/post.php index 034aff7365e..6476d757292 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,