MDL-47107 mod_forum Optimise forum subscription checks

Supply a coursemodule where relevant to the forum subscription checks.
This commit is contained in:
Andrew Nicols 2014-09-04 20:06:55 +08:00
parent 457f818026
commit 4238983e2a
9 changed files with 68 additions and 14 deletions

View file

@ -72,7 +72,7 @@ class mod_forum_observer {
require_once($CFG->dirroot . '/mod/forum/lib.php');
$userid = $event->relateduserid;
$sql = "SELECT f.id, cm.id AS cmid, f.forcesubscribe
$sql = "SELECT f.id, f.course as course, cm.id AS cmid, f.forcesubscribe
FROM {forum} f
JOIN {course_modules} cm ON (cm.instance = f.id)
JOIN {modules} m ON (m.id = cm.module)

View file

@ -104,14 +104,18 @@ class subscriptions {
* @param int $userid The user ID
* @param \stdClass $forum The record of the forum to test
* @param int $discussionid The ID of the discussion to check
* @param \cm_info $cm The coursemodule record. If not supplied, this will be calculated using get_fast_modinfo instead.
* @return boolean
*/
public static function is_subscribed($userid, $forum, $discussionid = null) {
public static function is_subscribed($userid, $forum, $discussionid = null, cm_info $cm = null) {
// If forum is force subscribed and has allowforcesubscribe, then user is subscribed.
$cm = get_coursemodule_from_instance('forum', $forum->id);
if ($cm && self::is_forcesubscribed($forum) &&
has_capability('mod/forum:allowforcesubscribe', \context_module::instance($cm->id), $userid)) {
return true;
if (self::is_forcesubscribed($forum)) {
if (!$cm) {
$cm = get_fast_modinfo($forum->course)->instances['forum'][$forum->id];
}
if (has_capability('mod/forum:allowforcesubscribe', \context_module::instance($cm->id), $userid)) {
return true;
}
}
if ($discussionid === null) {