]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-15015: Choice limited answers don't work with group mode
authorsam_marshall <sam_marshall>
Tue, 27 May 2008 10:16:25 +0000 (10:16 +0000)
committersam_marshall <sam_marshall>
Tue, 27 May 2008 10:16:25 +0000 (10:16 +0000)
mod/choice/lib.php

index cf767aab8ad926f5e8404bd523de0cef5e19c0c0..2c500d3960ec7ec4713b9e19267dc98eaa479210 100644 (file)
@@ -242,20 +242,43 @@ function choice_user_submit_response($formanswer, $choice, $userid, $courseid, $
 
     $current = get_record('choice_answers', 'choiceid', $choice->id, 'userid', $userid);
     $context = get_context_instance(CONTEXT_MODULE, $cm->id);
-    $countanswers = get_records("choice_answers", "optionid", $formanswer);
-    if ($countanswers) {
-        $countans = 0;
-        foreach ($countanswers as $ca) { //only return enrolled users.
-            if (has_capability('mod/choice:choose', $context, $ca->userid, false)) {
-                $countans = $countans+1;
-            }
+
+    $countanswers=0;
+    if($choice->limitanswers) {
+        // Find out whether groups are being used and enabled
+        if (groups_get_activity_groupmode($cm) > 0) {
+            $currentgroup = groups_get_activity_group($cm);
+        } else {
+            $currentgroup = 0;
+        }
+        if($currentgroup) {
+            // If groups are being used, retrieve responses only for users in
+            // current group
+            global $CFG;
+            $answers = get_records_sql("
+SELECT 
+    ca.*
+FROM 
+    {$CFG->prefix}choice_answers ca
+    INNER JOIN {$CFG->prefix}groups_members gm ON ca.userid=gm.userid
+WHERE
+    optionid=$formanswer
+    AND gm.groupid=$currentgroup");
+        } else {
+            // Groups are not used, retrieve all answers for this option ID
+            $answers = get_records("choice_answers", "optionid", $formanswer);
         }
 
-        $countanswers = $countans;
-    } else {
-        $countanswers = 0;
+        $countanswers=0;
+        if ($answers) {
+            foreach ($answers as $a) { //only return enrolled users.
+                if (has_capability('mod/choice:choose', $context, $a->userid, false)) {
+                    $countanswers++;
+                }
+            }
+        }
+        $maxans = $choice->maxanswers[$formanswer];
     }
-    $maxans = $choice->maxanswers[$formanswer];
 
     if (!($choice->limitanswers && ($countanswers >= $maxans) )) {
         if ($current) {