include '../../../../config.php';
include $CFG->dirroot."/lib/graphlib.php";
include $CFG->dirroot."/mod/quiz/report/reportlib.php";
-
+function graph_get_new_colour(){
+ static $colourindex = 0;
+ $colours = array('red', 'green', 'yellow', 'orange', 'purple', 'black', 'maroon', 'blue', 'ltgreen', 'navy', 'ltred', 'ltltgreen', 'ltltorange', 'olive', 'gray', 'ltltred', 'ltorange', 'lime', 'ltblue', 'ltltblue');
+ $colour = $colours[$colourindex];
+ $colourindex++;
+ if ($colourindex > (count($colours)-1)){
+ $colourindex =0;
+ }
+ return $colour;
+}
+define('QUIZ_REPORT_MAX_PARTICIPANTS_TO_SHOW_ALL_GROUPS', 500);
$quizid = required_param('id', PARAM_INT);
$quiz = $DB->get_record('quiz', array('id' => $quizid));
$course = $DB->get_record('course', array('id' => $quiz->course));
require_login($course);
$cm = get_coursemodule_from_instance('quiz', $quizid);
-$currentgroup = groups_get_activity_group($cm);
-
+if ($groupmode = groups_get_activity_groupmode($cm)) { // Groups are being used
+ $groups = groups_get_activity_allowed_groups($cm);
+} else {
+ $groups = false;
+}
$modcontext = get_context_instance(CONTEXT_MODULE, $cm->id);
require_capability('mod/quiz:viewreports', $modcontext);
-$line = new graph(640,480);
+$line = new graph(800,600);
$line->parameter['title'] = '';
$line->parameter['y_label_left'] = $course->students;
$line->parameter['x_label'] = get_string('grade');
$line->y_tick_labels = null;
$line->offset_relation = null;
-$line->parameter['bar_size'] = 1.5; // make size > 1 to get overlap effect
-$line->parameter['bar_spacing'] = 30; // don't forget to increase spacing so that graph doesn't become one big block of colour
+$line->parameter['bar_size'] = 1; // will make size > 1 to get overlap effect when showing groups
+$line->parameter['bar_spacing'] = 10; // don't forget to increase spacing so that graph doesn't become one big block of colour
//pick a sensible number of bands depending on quiz maximum grade.
$bands = $quiz->grade;
}
$line->x_data = $bandlabels;
-$userids = array_keys(get_users_by_capability($modcontext, 'mod/quiz:attempt','','','','','','',false));
-$line->y_data['allusers'] = quiz_report_grade_bands($bandwidth, $bands, $quizid, $userids);
-if ($currentgroup){
- //only turn on legends if there is more than one set of bars
- $line->parameter['legend'] = 'outside-top';
- $line->parameter['legend_border'] = 'black';
- $line->parameter['legend_offset'] = 4;
- $useridingrouplist = join(',',array_keys(get_users_by_capability($modcontext, 'mod/quiz:attempt','','','','',$currentgroup,'',false)));
- $line->y_data['groupusers'] = quiz_report_grade_bands($bandwidth, $bands, $quizid, $useridingrouplist);
- $line->y_format['groupusers'] =
- array('colour' => 'green', 'bar' => 'fill', 'shadow_offset' => 1, 'legend' => groups_get_group_name($currentgroup));
- $line->y_order = array('allusers', 'groupusers');
-} else {
- $line->y_order = array('allusers');
+$line->y_format['allusers'] =
+ array('colour' => graph_get_new_colour(), 'bar' => 'fill', 'shadow_offset' => 1, 'legend' => get_string('allparticipants'));
+$line->y_data['allusers'] = quiz_report_grade_bands($bandwidth, $bands, $quizid);
+if (array_sum($line->y_data['allusers'])>QUIZ_REPORT_MAX_PARTICIPANTS_TO_SHOW_ALL_GROUPS ||
+ count($groups)>4){
+ if ($groups){
+ if ($currentgroup = groups_get_activity_group($cm)){
+ $groups = array($currentgroup=>'');
+ } else {
+ $groups = false;//all participants mode
+ }
+ }
+}
+$line->y_order = array('allusers');
+if ($groups){
+ foreach (array_keys($groups) as $group){
+ $useridingroup = get_users_by_capability($modcontext, 'mod/quiz:attempt','','','','',$group,'',false);
+ if ($useridingroup){
+ $groupdata = quiz_report_grade_bands($bandwidth, $bands, $quizid, array_keys($useridingroup));
+ if ($groupdata){
+ $line->parameter['bar_size'] = 1.2;
+ $line->y_data['groupusers'.$group] = $groupdata;
+ //only turn on legends if there is more than one set of bars
+ $line->parameter['legend'] = 'outside-top';
+ $line->parameter['legend_border'] = 'black';
+ $line->parameter['legend_offset'] = 4;
+ $line->y_format['groupusers'.$group] =
+ array('colour' => graph_get_new_colour(), 'bar' => 'fill', 'shadow_offset' => 1, 'legend' => groups_get_group_name($group));
+ $line->y_order[] ='groupusers'.$group;
+ }
+ }
+ }
}
-$line->y_format['allusers'] =
- array('colour' => 'red', 'bar' => 'fill', 'shadow_offset' => 1, 'legend' => get_string('allparticipants'));
$line->parameter['y_min_left'] = 0; // start at 0