diff --git a/mod/forum/lib.php b/mod/forum/lib.php index b943b78e250..f20f1f0b20c 100644 --- a/mod/forum/lib.php +++ b/mod/forum/lib.php @@ -70,8 +70,14 @@ function forum_add_instance($forum) { } } - if ($forum->forcesubscribe == FORUM_INITIALSUBSCRIBE) { // all users should be subscribed initially - $users = get_course_users($forum->course); + if ($forum->forcesubscribe == FORUM_INITIALSUBSCRIBE) { + /// all users should be subscribed initially + /// Note: forum_get_potential_subscribers should take the forum context, + /// but that does not exist yet, becuase the forum is only half build at this + /// stage. However, because the forum is brand new, we know that there are + /// no role assignments or overrides in the forum context, so using the + /// course context gives the same list of users. + $users = forum_get_potential_subscribers(get_context_instance(CONTEXT_COURSE, $forum->course), 0, 'id, email', ''); foreach ($users as $user) { forum_subscribe($user->id, $forum->id); } @@ -282,7 +288,8 @@ function forum_cron() { // caching subscribed users of each forum if (!isset($subscribedusers[$forumid])) { - if ($subusers = forum_subscribed_users($courses[$courseid], $forums[$forumid], 0, false)) { + if ($subusers = forum_subscribed_users($courses[$courseid], $forums[$forumid], 0, + get_context_instance(CONTEXT_MODULE, $coursemodules[$forumid]))) { foreach ($subusers as $postuser) { // do not try to mail users with stopped email if ($postuser->emailstop) { @@ -2464,10 +2471,28 @@ function forum_get_user_discussions($courseid, $userid, $groupid=0) { } /** - * Returns list of user objects that are subscribed to this forum + * Get the list of potential subscribers to a forum. + * + * @param object $forumcontext the forum context. + * @param integer $groupid the id of a group, or 0 for all groups. + * @param string $fields the list of fields to return for each user. As for get_users_by_capability. + * @param string $sort sort order. As for get_users_by_capability. + * @return array list of users. */ -function forum_subscribed_users($course, $forum, $groupid=0) { +function forum_get_potential_subscribers($forumcontext, $groupid, $fields, $sort) { + return get_users_by_capability($forumcontext, 'mod/forum:initialsubscriptions', $fields, $sort, '', '', $groupid, '', false, true); +} +/** + * Returns list of user objects that are subscribed to this forum + * + * @param object $course the course + * @param forum $forum the forum + * @param integer $groupid group id, or 0 for all. + * @param object $context the forum context, to save re-fetching it where possible. + * @return array list of users. + */ +function forum_subscribed_users($course, $forum, $groupid=0, $context = NULL) { global $CFG; if ($groupid) { @@ -2480,11 +2505,13 @@ function forum_subscribed_users($course, $forum, $groupid=0) { } if (forum_is_forcesubscribed($forum)) { - $context = get_context_instance(CONTEXT_COURSE, $course->id); + if (is_null($context)) { + $context = get_context_instance(CONTEXT_MODULE, get_coursemodule_from_instance('forum', $forum->id, $course->id)); + } $sort = "u.email ASC"; $fields ="u.id, u.username, u.firstname, u.lastname, u.maildisplay, u.mailformat, u.maildigest, u.emailstop, u.imagealt, u.email, u.city, u.country, u.lastaccess, u.lastlogin, u.picture, u.timezone, u.theme, u.lang, u.trackforums, u.mnethostid"; - $results = get_users_by_capability($context, 'mod/forum:initialsubscriptions', $fields, $sort, '','','','', false, true); + $results = forum_get_potential_subscribers($context, $groupid, $fields, $sort); } else { $results = get_records_sql("SELECT u.id, u.username, u.firstname, u.lastname, u.maildisplay, u.mailformat, u.maildigest, u.emailstop, u.imagealt, u.email, u.city, u.country, u.lastaccess, u.lastlogin, u.picture, u.timezone, u.theme, u.lang, u.trackforums, u.mnethostid diff --git a/mod/forum/subscriber.html b/mod/forum/subscriber.html index 15a920da23f..4074e915cfc 100644 --- a/mod/forum/subscriber.html +++ b/mod/forum/subscriber.html @@ -1,6 +1,5 @@