From e0bc99e4db7728fb699134f7a3ba45371389712b Mon Sep 17 00:00:00 2001 From: mattc-catalyst Date: Thu, 23 Aug 2007 22:18:53 +0000 Subject: [PATCH] MDL-10888: groupings - added some caching of repetative queries --- lib/grouplib.php | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/lib/grouplib.php b/lib/grouplib.php index c12a484869..72336e96eb 100644 --- a/lib/grouplib.php +++ b/lib/grouplib.php @@ -136,7 +136,9 @@ function groups_is_member($groupid, $userid=null) { */ function groups_has_membership($cm, $userid=null) { global $CFG, $USER; - + + static $cache = array(); + // groupings are ignored when not enabled if (empty($CFG->enablegroupings)) { $cm->groupingid = 0; @@ -146,6 +148,11 @@ function groups_has_membership($cm, $userid=null) { $userid = $USER->id; } + $cachekey = $userid.'|'.$cm->course.'|'.$cm->groupingid; + if (isset($cache[$cachekey])) { + return($cache[$cachekey]); + } + if ($cm->groupingid) { // find out if member of any group in selected activity grouping $sql = "SELECT 'x' @@ -158,8 +165,10 @@ function groups_has_membership($cm, $userid=null) { FROM {$CFG->prefix}groups_members gm, {$CFG->prefix}groups g WHERE gm.userid = $userid AND gm.groupid = g.id AND g.courseid = {$cm->course}"; } - - return record_exists_sql($sql); + + $cache[$cachekey] = record_exists_sql($sql); + + return $cache[$cachekey]; } /** @@ -350,10 +359,7 @@ function groups_course_module_visible($cm, $userid=null) { if (empty($cm->groupmembersonly)) { return(true); } - if (has_capability('moodle/site:accessallgroups', get_context_instance(CONTEXT_MODULE, $cm->id), $userid)) { - return(true); - } - if (groups_has_membership($cm, $userid)) { + if (groups_has_membership($cm, $userid) || has_capability('moodle/site:accessallgroups', get_context_instance(CONTEXT_MODULE, $cm->id), $userid)) { return(true); } return(false); -- 2.39.5