MDL-10550 Refactoring, fixing a few bugs in edit/item_form.php and more work into the outcome report

This commit is contained in:
nicolasconnault
2007-07-24 14:26:05 +00:00
parent 962d013395
commit acdc8e8a9c
6 changed files with 74 additions and 32 deletions
+8 -5
View File
@@ -17,17 +17,20 @@ class edit_item_form extends moodleform {
// allow setting of outcomes on module items too
$options = array(0=>get_string('usenooutcome', 'grades'));
if ($outcomes = grade_outcome::fetch_all(array('courseid'=>$COURSE->id))) {
if ($outcomes = grade_outcome::fetch_all(array('courseid'=>$COURSE->id), true)) {
foreach ($outcomes as $outcome) {
$options[$scale->id] = $outcome->get_name();
$options[$outcome->id] = $outcome->get_name();
}
}
$mform->addElement('select', 'outcomeid', get_string('outcome', 'grades'), $options);
$options = array(GRADE_TYPE_NONE=>get_string('typenone', 'grades'),
GRADE_TYPE_VALUE=>get_string('typevalue', 'grades'),
GRADE_TYPE_SCALE=>get_string('typescale', 'grades'),
GRADE_TYPE_TEXT=>get_string('typetext', 'grades'));
GRADE_TYPE_VALUE=>get_string('typevalue', 'grades'),
GRADE_TYPE_SCALE=>get_string('typescale', 'grades'),
GRADE_TYPE_TEXT=>get_string('typetext', 'grades'));
$mform->addElement('select', 'gradetype', get_string('gradetype', 'grades'), $options);
$mform->setDefault('gradetype', GRADE_TYPE_VALUE);
+2 -10
View File
@@ -783,16 +783,8 @@ class grade_report_grader extends grade_report {
}
$scaleval = round($this->get_grade_clean($finalavg, $decimalpoints));
$scales_array = get_records_list('scale', 'id', $item->scaleid);
$scale = $scales_array[$item->scaleid];
$scales = explode(",", $scale->scale);
// this could be a 0 when summed and rounded, e.g, 1, no grade, no grade, no grade
if ($scaleval < 1) {
$scaleval = 1;
}
$gradehtml = $scales[$scaleval-1];
$scale_object = new grade_scale(array('id' => $item->scaleid), false);
$gradehtml = $scale_object->get_nearest_item($scaleval);
$rawvalue = $scaleval;
} else {
$gradeval = $this->get_grade_clean($sum/$count_array[$item->id], $decimalpoints);
+26 -16
View File
@@ -74,6 +74,7 @@ foreach ($outcomes as $outcomeid => $outcome) {
$html = '<table border="1" summary="Outcomes Report">' . "\n";
$html .= '<tr><th>' . get_string('outcomename', 'grades') . '</th>';
$html .= '<th>' . get_string('overallavg', 'grades') . '</th>';
$html .= '<th>' . get_string('sitewide', 'grades') . '</th>';
$html .= '<th>' . get_string('activities', 'grades') . '</th>';
$html .= '<th>' . get_string('average', 'grades') . '</th>';
@@ -81,46 +82,55 @@ $html .= '<th>' . get_string('numberofgrades', 'grades') . '</th></tr>' . "\n";
foreach ($report_info as $outcomeid => $outcomedata) {
$rowspan = count($outcomedata['items']);
$html .= '<td rowspan="' . $rowspan . '">' . $outcomedata['outcome']->shortname . "</td>\n";
$shortname_html = '<tr><td rowspan="' . $rowspan . '">' . $outcomedata['outcome']->shortname . "</td>\n";
$sitewide = get_string('no');
if (empty($outcomedata['outcome']->courseid)) {
$sitewide = get_string('yes');
}
$html .= '<td rowspan="' . $rowspan . '">' . $sitewide . "</td>\n";
$sitewide_html = '<td rowspan="' . $rowspan . '">' . $sitewide . "</td>\n";
$outcomedata['outcome']->sum = 0;
$scale = new grade_scale(array('id' => $outcomedata['outcome']->scaleid), false);
$print_tr = false;
$items_html = '';
if (is_array($outcomedata['items'])) {
foreach ($outcomedata['items'] as $itemid => $item) {
if ($print_tr) {
$html .= '<tr>';
$items_html .= "<tr>\n";
}
$cm = get_coursemodule_from_instance($item->itemmodule, $item->iteminstance, $item->courseid);
$itemname = '<a href="'.$CFG->wwwroot.'/mod/'.$item->itemmodule.'/view.php?id='.$cm->id.'">'.$item->itemname.'</a>';
// Obtain nearest scale item from average
$scales_array = get_records_list('scale', 'id', $outcomedata['outcome']->scaleid);
$scale = $scales_array[$outcomedata['outcome']->scaleid];
$scales = explode(",", $scale->scale);
$outcomedata['outcome']->sum += $item->avg;
$gradehtml = $scale->get_nearest_item($item->avg);
// this could be a 0 when summed and rounded, e.g, 1, no grade, no grade, no grade
if ($item->avg < 1) {
$item->avg = 1;
}
$gradehtml = $scales[$item->avg-1];
$html .= "<td>$itemname</td><td>$gradehtml ($item->avg)</td><td>$item->count</td></tr>\n";
$items_html .= "<td>$itemname</td><td>$gradehtml ($item->avg)</td><td>$item->count</td></tr>\n";
$print_tr = true;
}
} else {
$html .= "<td> - </td><td> - </td><td> 0 </td>";
$items_html .= "<td> - </td><td> - </td><td> 0 </td></tr>\n";
}
// Calculate outcome average
if (is_array($outcomedata['items'])) {
$avg = $outcomedata['outcome']->sum / count($outcomedata['items']);
$avg_html = $scale->get_nearest_item($avg) . " (" . round($avg, 2) . ")\n";
} else {
$avg_html = ' - ';
}
$outcomeavg_html = '<td rowspan="' . $rowspan . '">' . $avg_html . "</td>\n";
$html .= $shortname_html . $outcomeavg_html . $sitewide_html . $items_html;
}
$html .= '</table>';
echo $html;
print_footer($course);
+2
View File
@@ -217,10 +217,12 @@ $string['numberofgrades'] = 'Number of grades';
$string['onascaleof'] = ' on a scale of $a->grademin to $a->grademax';
$string['operations'] = 'Operations';
$string['outcome'] = 'Outcome';
$string['outcomes'] = 'Outcomes';
$string['outcomename'] = 'Outcome name';
$string['outcomereport'] = 'Outcome report';
$string['outcomes'] = 'Outcomes';
$string['overridden'] = 'Overridden';
$string['overallavg'] = 'Overall average';
$string['pctoftotalgrade'] = '%% of total grade';
$string['percent'] = 'Percent';
$string['percentage'] = 'Percentage';
+14 -1
View File
@@ -103,10 +103,23 @@ class grade_outcome extends grade_object {
* @static
*
* @param array $params associative arrays varname=>value
* @param bool $fetch_sitewide_outcomes Whether or not to also fetch all sitewide outcomes (with no courseid)
* @return array array of grade_outcome insatnces or false if none found.
*/
function fetch_all($params) {
function fetch_all($params, $fetch_sitewide_outcomes=false) {
global $CFG;
if ($outcomes = grade_object::fetch_all_helper('grade_outcomes', 'grade_outcome', $params)) {
// Fetch sitewide outcomes if requested
if ($fetch_sitewide_outcomes) {
$sitewide_outcomes = array();
$records = get_records_sql("SELECT * FROM {$CFG->prefix}grade_outcomes WHERE courseid IS NULL");
foreach ($records as $outcomeid => $outcome) {
$sitewide_outcomes[$outcomeid] = new grade_outcome($outcome, false);
}
$outcomes = array_merge($sitewide_outcomes, $outcomes);
}
foreach ($outcomes as $key=>$value) {
if (!empty($outcomes[$key]->scaleid)) {
$outcomes[$key]->scale = new grade_scale(array('id'=>$outcomes[$key]->scaleid));
+22
View File
@@ -147,5 +147,27 @@ class grade_scale extends grade_object {
return $this->scale;
}
/**
* When called on a loaded scale object (with a valid id) and given a float grade between
* the grademin and grademax, this method returns the scale item that falls closest to the
* float given (which is usually an average of several grades on a scale). If the float falls
* below 1 but above 0, it will be rounded up to 1.
* @param float $grade
* @return string
*/
function get_nearest_item($grade) {
// Obtain nearest scale item from average
$scales_array = get_records_list('scale', 'id', $this->id);
$scale = $scales_array[$this->id];
$scales = explode(",", $scale->scale);
// this could be a 0 when summed and rounded, e.g, 1, no grade, no grade, no grade
if ($grade < 1) {
$grade = 1;
}
return $scales[$grade-1];
}
}
?>