From a600ad359ac26f82956c3a21f8637c3681def23e Mon Sep 17 00:00:00 2001
From: agrabs <agrabs>
Date: Mon, 25 May 2009 19:48:33 +0000
Subject: [PATCH] MDL-17005 - very high memory comsumption for feedback
 module->show entries on big Moodle platforms

---
 mod/feedback/lib.php          | 30 ++++++++++++++++++++++--------
 mod/feedback/show_entries.php |  6 +++---
 mod/feedback/version.php      |  2 +-
 3 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/mod/feedback/lib.php b/mod/feedback/lib.php
index b00e126577..3fbf4ac9eb 100644
--- a/mod/feedback/lib.php
+++ b/mod/feedback/lib.php
@@ -615,20 +615,34 @@ function feedback_check_is_switchrole(){
     return false;
 }
 
-/**
+/** 
  *  get users which have the complete-capability
- *  @param int $cmid
- *  @param mixed $groups single groupid or array of groupids - group(s) user is in
+ *  @param object $cm
+ *  @param int $group single groupid
  *  @return object the userrecords
  */
-function feedback_get_complete_users($cmid, $groups = false) {
-
-    if (!$context = get_context_instance(CONTEXT_MODULE, $cmid)) {
+function feedback_get_complete_users($cm, $group = false) {
+    global $DB;
+    
+    if (!$context = get_context_instance(CONTEXT_MODULE, $cm->id)) {
             print_error('badcontext');
     }
 
-    //description of the call below: get_users_by_capability($context, $capability, $fields='', $sort='', $limitfrom='', $limitnum='', $groups='', $exceptions='', $doanything=true)
-    return get_users_by_capability($context, 'mod/feedback:complete', '', 'lastname', '', '', $groups, '', false);
+    $params = array($cm->instance);
+
+    $fromgroup = '';
+    $wheregroup = '';
+    if($group) {
+        $fromgroup = ', {groups_members} g';
+        $wheregroup = ' AND g.id = ? AND g.userid = c.userid';
+        $params[] = $group;
+    }
+    $sql = 'SELECT u.* FROM {user} u, {feedback_completed} c'.$fromgroup.'
+              WHERE u.id = c.userid AND c.feedback = ?
+              '.$wheregroup.'
+              ORDER BY u.lastname';
+    
+    return $DB->get_records_sql($sql, $params);
 }
 
 /**
diff --git a/mod/feedback/show_entries.php b/mod/feedback/show_entries.php
index 286725144f..716502996b 100644
--- a/mod/feedback/show_entries.php
+++ b/mod/feedback/show_entries.php
@@ -126,12 +126,12 @@
                     $mygroupid = $SESSION->feedback->lstgroupid;
                 }
                 if($mygroupid) {
-                    $students = feedback_get_complete_users($cm->id, $mygroupid);
+                    $students = feedback_get_complete_users($cm, $mygroupid);
                 } else {
-                    $students = feedback_get_complete_users($cm->id);
+                    $students = feedback_get_complete_users($cm);
                 }
             }else {
-                $students = feedback_get_complete_users($cm->id);
+                $students = feedback_get_complete_users($cm);
             }
 
             $mygroupid=isset($mygroupid)?$mygroupid:NULL;
diff --git a/mod/feedback/version.php b/mod/feedback/version.php
index b1bb96e8ee..7093fb5e29 100644
--- a/mod/feedback/version.php
+++ b/mod/feedback/version.php
@@ -10,7 +10,7 @@
 */
 
    
-    $module->version = 2009042001; // The current module version (Date: YYYYMMDDXX)
+    $module->version = 2009052701; // The current module version (Date: YYYYMMDDXX)
     $module->requires = 2009041700;  // Requires this Moodle version
     $feedback_version_intern = 1; //this version is used for restore older backups
     $module->cron = 0; // Period for cron to check this module (secs)
-- 
2.39.5