diff --git a/mod/forum/lib.php b/mod/forum/lib.php index 74af4b3dee3..f9e374a7254 100644 --- a/mod/forum/lib.php +++ b/mod/forum/lib.php @@ -4681,8 +4681,9 @@ function forum_is_subscribed($userid, $forum) { $forum = $DB->get_record('forum', array('id' => $forum)); } // If forum is force subscribed and has allowforcesubscribe, then user is subscribed. - if (forum_is_forcesubscribed($forum) && - has_capability('mod/forum:allowforcesubscribe', context_module::instance($forum->id), $userid)) { + $cm = get_coursemodule_from_instance('forum', $forum->id); + if (forum_is_forcesubscribed($forum) && $cm && + has_capability('mod/forum:allowforcesubscribe', context_module::instance($cm->id), $userid)) { return true; } return $DB->record_exists("forum_subscriptions", array("userid" => $userid, "forum" => $forum->id)); @@ -6175,16 +6176,21 @@ function forum_user_role_assigned($cp) { return; } - $sql = "SELECT f.id + $sql = "SELECT f.id, cm.id AS cmid FROM {forum} f + JOIN {course_modules} cm ON (cm.instance = f.id) + JOIN {modules} m ON (m.id = cm.module) LEFT JOIN {forum_subscriptions} fs ON (fs.forum = f.id AND fs.userid = :userid) - WHERE f.course = :courseid AND f.forcesubscribe = :initial AND fs.id IS NULL"; + WHERE f.course = :courseid + AND f.forcesubscribe = :initial + AND m.name = 'forum' + AND fs.id IS NULL"; $params = array('courseid'=>$context->instanceid, 'userid'=>$cp->userid, 'initial'=>FORUM_INITIALSUBSCRIBE); $forums = $DB->get_records_sql($sql, $params); foreach ($forums as $forum) { // If user doesn't have allowforcesubscribe capability then don't subscribe. - if (has_capability('mod/forum:allowforcesubscribe', context_module::instance($forum->id), $cp->userid)) { + if (has_capability('mod/forum:allowforcesubscribe', context_module::instance($forum->cmid), $cp->userid)) { forum_subscribe($cp->userid, $forum->id); } }