diff --git a/grade/report/outcomes/index.php b/grade/report/outcomes/index.php index 4e51060db36..d662ecbbb5e 100644 --- a/grade/report/outcomes/index.php +++ b/grade/report/outcomes/index.php @@ -29,16 +29,100 @@ print_header_simple($strgrades.':'.$stroutcomes, ':'.$strgrades, $navigation, '' $currenttab = 'outcomereport'; include('tabs.php'); -// Grab outcomes in use for this course -$outcomes = grade_outcome::fetch_all(array('courseid' => $courseid)); -foreach ($outcomes as $outcome) { - print_object($outcome->get_grade_info($courseid, true, true)); +// Grab all outcomes, distinguishing between site-level and course-level outcomes +$sql = "SELECT mdl_grade_outcomes.id, + mdl_grade_outcomes_courses.courseid, + mdl_grade_outcomes.shortname, + mdl_grade_outcomes.scaleid + FROM mdl_grade_outcomes + LEFT JOIN mdl_grade_outcomes_courses + ON (mdl_grade_outcomes.id = mdl_grade_outcomes_courses.outcomeid AND mdl_grade_outcomes_courses.courseid = $courseid) + ORDER BY mdl_grade_outcomes_courses.courseid DESC"; + +$report_info = array(); +$outcomes = get_records_sql($sql); + +// Get grade_items that use each outcome +foreach ($outcomes as $outcomeid => $outcome) { + $sql = "SELECT mdl_grade_items.id, + mdl_grade_items.itemname, + mdl_grade_items.itemmodule, + mdl_grade_items.iteminstance, + mdl_grade_items.itemtype, + mdl_grade_items.itemnumber, + mdl_grade_items.courseid, + mdl_grade_items.idnumber + FROM mdl_grade_items + WHERE mdl_grade_items.outcomeid = $outcomeid"; + $report_info[$outcomeid]['items'] = get_records_sql($sql); + $report_info[$outcomeid]['outcome'] = $outcome; + + // Get average grades for each item + if (is_array($report_info[$outcomeid]['items'])) { + foreach ($report_info[$outcomeid]['items'] as $itemid => $item) { + $sql = "SELECT id, AVG(finalgrade) AS `avg`, COUNT(finalgrade) AS `count` + FROM mdl_grade_grades + WHERE itemid = $itemid + GROUP BY itemid"; + $info = get_records_sql($sql); + $info = reset($info); + $report_info[$outcomeid]['items'][$itemid]->avg = round($info->avg, 2); + $report_info[$outcomeid]['items'][$itemid]->count = $info->count; + } + } } -// Grab activities that are grading against each outcome (with links to activities) -// Compute average grade across all activities and users for each outcome. +$html = '
| ' . get_string('outcomename', 'grades') . ' | '; +$html .= '' . get_string('sitewide', 'grades') . ' | '; +$html .= '' . get_string('activities', 'grades') . ' | '; +$html .= '' . get_string('average', 'grades') . ' | '; +$html .= '' . get_string('numberofgrades', 'grades') . ' | ' . $outcomedata['outcome']->shortname . " | \n"; + + $sitewide = get_string('no'); + if (empty($outcomedata['outcome']->courseid)) { + $sitewide = get_string('yes'); + } + + $html .= '' . $sitewide . " | \n"; + + $print_tr = false; + if (is_array($outcomedata['items'])) { + foreach ($outcomedata['items'] as $itemid => $item) { + if ($print_tr) { + $html .= '
|---|---|---|---|---|
| $itemname | $gradehtml ($item->avg) | $item->count | - | - | 0 | "; + } +} +$html .= '