diff --git a/course/grade.php b/course/grade.php
new file mode 100644
index 00000000000..c7a9d03d248
--- /dev/null
+++ b/course/grade.php
@@ -0,0 +1,99 @@
+id);
+
+ $strgrades = get_string("grades");
+ $strgrade = get_string("grade");
+ $strmax = get_string("maximumshort");
+ $stractivityreport = get_string("activityreport");
+
+
+/// Get a list of all students
+
+ $columnhtml = array(); // Accumulate column html in this array.
+ $grades = array(); // Collect all grades in this array
+ $maxgrades = array(); // Collect all max grades in this array
+ $totalgrade = 0;
+
+
+/// Collect modules data
+ get_all_mods($course->id, $mods, $modnames, $modnamesplural, $modnamesused);
+
+
+/// Search through all the modules, pulling out grade data
+ $sections = get_all_sections($course->id); // Sort everything the same as the course
+ for ($i=0; $i<=$course->numsections; $i++) {
+ if (isset($sections[$i])) { // should always be true
+ $section = $sections[$i];
+ if (!empty($section->sequence)) {
+ $sectionmods = explode(",", $section->sequence);
+ foreach ($sectionmods as $sectionmod) {
+ $mod = $mods[$sectionmod];
+ $instance = get_record("$mod->modname", "id", "$mod->instance");
+ $libfile = "$CFG->dirroot/mod/$mod->modname/lib.php";
+ if (file_exists($libfile)) {
+ require_once($libfile);
+ $gradefunction = $mod->modname."_grades";
+ if (function_exists($gradefunction)) { // Skip modules without grade function
+ if ($modgrades = $gradefunction($mod->instance)) {
+
+ $image = "wwwroot/mod/$mod->modname/view.php?id=$mod->id\"".
+ " TITLE=\"$mod->modfullname\">".
+ "
modname/icon.gif\" ".
+ "HEIGHT=16 WIDTH=16 ALT=\"$mod->modfullname\">";
+ $columnhtml[] = "$image ".
+ "wwwroot/mod/$mod->modname/view.php?id=$mod->id\">".
+ "$instance->name".
+ "$maxgrade";
+
+ $grades[] = $modgrades->grades[$USER->id]; // may be empty, that's ok
+
+ $maxgrades[] = $modgrades->maxgrade;
+
+ if (!empty($modgrades->maxgrade)) {
+ $totalgrade += (float)$modgrades->grades[$USER->id];
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+
+/// OK, we have all the data, now present it to the user
+
+ print_header("$course->shortname: $strgrades", "$course->fullname",
+ "wwwroot/course/view.php?id=$course->id\">$course->shortname
+ -> $strgrades");
+
+ print_heading($strgrades);
+
+ $table->head = array( get_string("activity"), get_string("maximumgrade"), get_string("grade"));
+ $table->align = array("LEFT", "RIGHT", "RIGHT");
+
+ foreach ($grades as $key => $grade) {
+ $table->data[] = array($columnhtml[$key], $maxgrades[$key], $grade);
+ }
+
+ $table->data[] = array("", get_string("total"), $totalgrade);
+
+ print_table($table);
+
+ print_continue("view.php?id=$course->id");
+
+ print_footer($course);
+
+?>