MDL-12942 new extra credit option for simple mean agg
This commit is contained in:
@@ -58,7 +58,13 @@ if ($id) {
|
||||
// set parent
|
||||
$category->parentcategory = $grade_category->parent;
|
||||
$grade_item = $grade_category->load_grade_item();
|
||||
foreach ($grade_item as $key => $value) {
|
||||
// nomalize coef values if needed
|
||||
if ($parent_category = $grade_category->get_parent_category()) {
|
||||
if ($parent_category->aggregation == GRADE_AGGREGATE_SUM or $parent_category->aggregation == GRADE_AGGREGATE_WEIGHTED_MEAN2) {
|
||||
$grade_item->aggregationcoef = $grade_item->aggregationcoef == 0 ? 0 : 1;
|
||||
}
|
||||
}
|
||||
foreach ($grade_item->get_record_data() as $key => $value) {
|
||||
$category->{"grade_item_$key"} = $value;
|
||||
}
|
||||
|
||||
|
||||
@@ -96,8 +96,8 @@ $item->plusfactor = format_float($item->plusfactor, 4);
|
||||
|
||||
if (empty($parent_category)) {
|
||||
$item->aggregationcoef = 0;
|
||||
} else if ($parent_category->aggregation == GRADE_AGGREGATE_SUM) {
|
||||
$item->aggregationcoef = $item->aggregationcoef > 0 ? 1 : 0;
|
||||
} else if ($parent_category->aggregation == GRADE_AGGREGATE_SUM or $parent_category->aggregation == GRADE_AGGREGATE_WEIGHTED_MEAN2) {
|
||||
$item->aggregationcoef = $item->aggregationcoef == 0 ? 0 : 1;
|
||||
} else {
|
||||
$item->aggregationcoef = format_float($item->aggregationcoef, 4);
|
||||
}
|
||||
|
||||
@@ -566,7 +566,7 @@ class grade_edit_tree_column_aggregation extends grade_edit_tree_column_category
|
||||
}
|
||||
|
||||
$script = "window.location='index.php?id={$params['id']}&category={$category->id}&aggregationtype='+this.value+'&sesskey=" . sesskey()."';";
|
||||
$aggregation = choose_from_menu($options, 'aggregation_'.$category->id, $category->aggregation, get_string('choose'), $script, 0, true);
|
||||
$aggregation = choose_from_menu($options, 'aggregation_'.$category->id, $category->aggregation, null, $script, 0, true);
|
||||
|
||||
if ($this->forced) {
|
||||
$aggregation = $options[$category->aggregation];
|
||||
|
||||
@@ -102,6 +102,9 @@ class edit_outcomeitem_form extends moodleform {
|
||||
if ($cat->aggregation == GRADE_AGGREGATE_WEIGHTED_MEAN) {
|
||||
$coefstring = ($coefstring=='' or $coefstring=='aggregationcoefweight') ? 'aggregationcoefweight' : 'aggregationcoef';
|
||||
|
||||
} else if ($cat->aggregation == GRADE_AGGREGATE_WEIGHTED_MEAN2) {
|
||||
$coefstring = ($coefstring=='' or $coefstring=='aggregationcoefextrasum') ? 'aggregationcoefextrasum' : 'aggregationcoef';
|
||||
|
||||
} else if ($cat->aggregation == GRADE_AGGREGATE_EXTRACREDIT_MEAN) {
|
||||
$coefstring = ($coefstring=='' or $coefstring=='aggregationcoefextra') ? 'aggregationcoefextra' : 'aggregationcoef';
|
||||
|
||||
@@ -201,6 +204,9 @@ class edit_outcomeitem_form extends moodleform {
|
||||
if ($parent_category->aggregation == GRADE_AGGREGATE_WEIGHTED_MEAN) {
|
||||
$aggcoef = 'aggregationcoefweight';
|
||||
|
||||
} else if ($parent_category->aggregation == GRADE_AGGREGATE_WEIGHTED_MEAN2) {
|
||||
$aggcoef = 'aggregationcoefextrasum';
|
||||
|
||||
} else if ($parent_category->aggregation == GRADE_AGGREGATE_EXTRACREDIT_MEAN) {
|
||||
$aggcoef = 'aggregationcoefextra';
|
||||
|
||||
|
||||
@@ -642,19 +642,23 @@ class grade_category extends grade_object {
|
||||
}
|
||||
break;
|
||||
|
||||
case GRADE_AGGREGATE_WEIGHTED_MEAN2: // Weighted average of all existing final grades, weight is the range of grade (ususally grademax)
|
||||
case GRADE_AGGREGATE_WEIGHTED_MEAN2:
|
||||
// Weighted average of all existing final grades with optional extra credit flag,
|
||||
// weight is the range of grade (ususally grademax)
|
||||
$weightsum = 0;
|
||||
$sum = 0;
|
||||
$sum = null;
|
||||
foreach($grade_values as $itemid=>$grade_value) {
|
||||
$weight = $items[$itemid]->grademax - $items[$itemid]->grademin;
|
||||
if ($weight <= 0) {
|
||||
continue;
|
||||
}
|
||||
$weightsum += $weight;
|
||||
$sum += $weight * $grade_value;
|
||||
if ($items[$itemid]->aggregationcoef == 0) {
|
||||
$weightsum += $weight;
|
||||
}
|
||||
$sum += $weight * $grade_value;
|
||||
}
|
||||
if ($weightsum == 0) {
|
||||
$agg_grade = null;
|
||||
$agg_grade = $sum; // only extra credits
|
||||
} else {
|
||||
$agg_grade = $sum / $weightsum;
|
||||
}
|
||||
@@ -662,7 +666,7 @@ class grade_category extends grade_object {
|
||||
|
||||
case GRADE_AGGREGATE_EXTRACREDIT_MEAN: // special average
|
||||
$num = 0;
|
||||
$sum = 0;
|
||||
$sum = null;
|
||||
foreach($grade_values as $itemid=>$grade_value) {
|
||||
if ($items[$itemid]->aggregationcoef == 0) {
|
||||
$num += 1;
|
||||
@@ -806,6 +810,7 @@ class grade_category extends grade_object {
|
||||
*/
|
||||
function is_aggregationcoef_used() {
|
||||
return ($this->aggregation == GRADE_AGGREGATE_WEIGHTED_MEAN
|
||||
or $this->aggregation == GRADE_AGGREGATE_WEIGHTED_MEAN2
|
||||
or $this->aggregation == GRADE_AGGREGATE_EXTRACREDIT_MEAN
|
||||
or $this->aggregation == GRADE_AGGREGATE_SUM);
|
||||
|
||||
@@ -847,6 +852,8 @@ class grade_category extends grade_object {
|
||||
// No parent category is overriding this category's aggregation, return its string
|
||||
if ($this->aggregation == GRADE_AGGREGATE_WEIGHTED_MEAN) {
|
||||
$this->coefstring = 'aggregationcoefweight';
|
||||
} else if ($this->aggregation == GRADE_AGGREGATE_WEIGHTED_MEAN2) {
|
||||
$this->coefstring = 'aggregationcoefextrasum';
|
||||
} else if ($this->aggregation == GRADE_AGGREGATE_EXTRACREDIT_MEAN) {
|
||||
$this->coefstring = 'aggregationcoefextra';
|
||||
} else if ($this->aggregation == GRADE_AGGREGATE_SUM) {
|
||||
|
||||
Reference in New Issue
Block a user