From 8b87ab000003e7cc830fb959b72d80de79b84cd2 Mon Sep 17 00:00:00 2001 From: jamiesensei Date: Wed, 7 May 2008 14:38:18 +0000 Subject: [PATCH] MDL-14201 "Summary graph" included a summary graph at the bottom of overview report page. Shows the distribution of grades achieved by students. If a group is selected the grades from the group are compared with the grades for all participants. --- lang/en_utf8/quiz_overview.php | 1 + mod/quiz/report/overview/overviewgraph.php | 92 ++++++++++++++++++++++ mod/quiz/report/overview/report.php | 3 + mod/quiz/report/reportlib.php | 18 +++++ 4 files changed, 114 insertions(+) create mode 100644 mod/quiz/report/overview/overviewgraph.php diff --git a/lang/en_utf8/quiz_overview.php b/lang/en_utf8/quiz_overview.php index e4388caacf..b7719fd724 100644 --- a/lang/en_utf8/quiz_overview.php +++ b/lang/en_utf8/quiz_overview.php @@ -15,6 +15,7 @@ $string['optonlygradedattempts'] = 'only the attempt that is graded for each use $string['overview'] = 'Overview'; $string['overviewdownload'] = 'Overview download'; $string['overviewdownload'] = 'Overview download'; +$string['overviewreportgraph'] = 'Bar Graph of Number of Students Achieving Grade Ranges'; $string['pagesize'] = 'Page size'; $string['preferencespage'] = 'Preferences just for this page'; $string['preferencessave'] = 'Save preferences'; diff --git a/mod/quiz/report/overview/overviewgraph.php b/mod/quiz/report/overview/overviewgraph.php new file mode 100644 index 0000000000..d5bbb4bce5 --- /dev/null +++ b/mod/quiz/report/overview/overviewgraph.php @@ -0,0 +1,92 @@ +dirroot."/lib/graphlib.php"; +include $CFG->dirroot."/mod/quiz/report/reportlib.php"; + +$quizid = required_param('id', PARAM_INT); + +$quiz = get_record('quiz', 'id', $quizid); +$course = get_record('course', 'id', $quiz->course); +require_login($course); +$cm = get_coursemodule_from_instance('quiz', $quizid); +$currentgroup = groups_get_activity_group($cm); + +$modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); +require_capability('mod/quiz:viewreports', $modcontext); + +$line = new graph(640,480); +$line->parameter['title'] = ''; +$line->parameter['y_label_left'] = $course->students; +$line->parameter['x_label'] = get_string('grade'); +$line->parameter['y_label_angle'] = 90; +$line->parameter['x_label_angle'] = 0; +$line->parameter['x_axis_angle'] = 60; + +//following two lines seem to silence notice warnings from graphlib.php +$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'] = 20; // 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; +while ($bands >= 20 || $bands < 10){ + if ($bands >= 50){ + $bands = $bands /5; + } else if ($bands >= 20) { + $bands = $bands /2; + } + if ($bands < 4){ + $bands = $bands * 5; + } else if ($bands < 10){ + $bands = $bands * 2; + } +} + +$bandwidth = $quiz->grade / $bands; +$bandlabels = array(); +for ($i=0;$i < $quiz->grade;$i += $bandwidth){ + $bandlabels[] = number_format($i, $quiz->decimalpoints).' - '.number_format($i+$bandwidth, $quiz->decimalpoints); +} +$line->x_data = $bandlabels; + +$useridlist = join(',',array_keys(get_users_by_capability($modcontext, 'mod/quiz:attempt','','','','','','',false))); +$line->y_data['allusers'] = quiz_report_grade_bands($bands, $quizid, $useridlist); +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($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' => 'red', 'bar' => 'fill', 'shadow_offset' => 1, 'legend' => get_string('allparticipants')); + + +$line->parameter['y_min_left'] = 0; // start at 0 +$line->parameter['y_max_left'] = max($line->y_data['allusers']); +$line->parameter['y_decimal_left'] = 0; // 2 decimal places for y axis. + + +//pick a sensible number of gridlines depending on max value on graph. +$gridlines = max($line->y_data['allusers']); +while ($gridlines >= 10){ + if ($gridlines >= 50){ + $gridlines = $gridlines /5; + } else { + $gridlines = $gridlines /2; + } +} + +$line->parameter['y_axis_gridlines'] = $gridlines+1; +$line->draw(); +?> diff --git a/mod/quiz/report/overview/report.php b/mod/quiz/report/overview/report.php index 895aed5d34..0d13a808bc 100644 --- a/mod/quiz/report/overview/report.php +++ b/mod/quiz/report/overview/report.php @@ -623,6 +623,9 @@ document.getElementById("noscriptmenuaction").style.display = "none"; // Print display options $mform->set_data($displayoptions +compact('detailedmarks', 'pagesize')); $mform->display(); + $imageurl = $CFG->wwwroot.'/mod/quiz/report/overview/overviewgraph.php?id='.$quiz->id; + print_heading(get_string('overviewreportgraph', 'quiz_overview')); + echo '
'.get_string('overviewreportgraph', 'quiz_overview').' \ No newline at end of file -- 2.39.5