From: mattc-catalyst <mattc-catalyst>
Date: Thu, 23 Aug 2007 22:18:53 +0000 (+0000)
Subject: MDL-10888: groupings - added some caching of repetative queries
X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=e0bc99e4db7728fb699134f7a3ba45371389712b;p=moodle.git

MDL-10888: groupings - added some caching of repetative queries
---

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);