MDL-10109 optional aggregation of outcomes together with grades

This commit is contained in:
skodak 2007-08-06 12:05:45 +00:00
parent e754b3e058
commit 29d509f59a
9 changed files with 70 additions and 8 deletions

View file

@ -1073,6 +1073,7 @@ function xmldb_main_upgrade($oldversion=0) {
$table->addFieldInfo('aggregation', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0');
$table->addFieldInfo('keephigh', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0');
$table->addFieldInfo('droplow', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0');
$table->addFieldInfo('aggregateoutcomes', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
$table->addFieldInfo('timecreated', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
$table->addFieldInfo('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
@ -1232,6 +1233,7 @@ function xmldb_main_upgrade($oldversion=0) {
$table->addFieldInfo('aggregation', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0');
$table->addFieldInfo('keephigh', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0');
$table->addFieldInfo('droplow', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0');
$table->addFieldInfo('aggregateoutcomes', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
/// Adding keys to table grade_categories_history
$table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
@ -1598,6 +1600,28 @@ function xmldb_main_upgrade($oldversion=0) {
}
if ($result && $oldversion < 2007080300) {
/// Define field aggregateoutcomes to be added to grade_categories
$table = new XMLDBTable('grade_categories');
$field = new XMLDBField('aggregateoutcomes');
if (!field_exists($table, $field)) {
$field->setAttributes(XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0', 'droplow');
/// Launch add field aggregateoutcomes
$result = $result && add_field($table, $field);
}
/// Define field aggregateoutcomes to be added to grade_categories
$table = new XMLDBTable('grade_categories_history');
$field = new XMLDBField('aggregateoutcomes');
if (!field_exists($table, $field)) {
$field->setAttributes(XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0', 'droplow');
/// Launch add field aggregateoutcomes
$result = $result && add_field($table, $field);
}
}
/*
/// drop old gradebook tables

View file

@ -93,6 +93,12 @@ class grade_category extends grade_object {
*/
var $droplow = 0;
/**
* Aggregate outcomes together with normal items
* @$aggregateoutcomes
*/
var $aggregateoutcomes = 0;
/**
* Array of grade_items or grade_categories nested exactly 1 level below this category
* @var array $children
@ -308,11 +314,12 @@ class grade_category extends grade_object {
$db_item = grade_category::fetch(array('id'=>$this->id));
$aggregationdiff = $db_item->aggregation != $this->aggregation;
$keephighdiff = $db_item->keephigh != $this->keephigh;
$droplowdiff = $db_item->droplow != $this->droplow;
$aggregationdiff = $db_item->aggregation != $this->aggregation;
$keephighdiff = $db_item->keephigh != $this->keephigh;
$droplowdiff = $db_item->droplow != $this->droplow;
$aggoutcomesdiff = $db_item->aggregateoutcomes != $this->aggregateoutcomes;
return ($aggregationdiff || $keephighdiff || $droplowdiff);
return ($aggregationdiff || $keephighdiff || $droplowdiff || $aggoutcomesdiff);
}
/**
@ -668,10 +675,15 @@ class grade_category extends grade_object {
// recursively resort children
if (!empty($category_array['children'])) {
$result['children'] = array();
//process the category item first
$cat_item_id = null;
foreach($category_array['children'] as $oldorder=>$child_array) {
if ($child_array['type'] == 'courseitem' or $child_array['type'] == 'categoryitem') {
$result['children'][$sortorder] = grade_category::_fetch_course_tree_recursion($child_array, $sortorder);
} else {
}
}
foreach($category_array['children'] as $oldorder=>$child_array) {
if ($child_array['type'] != 'courseitem' and $child_array['type'] != 'categoryitem') {
$result['children'][++$sortorder] = grade_category::_fetch_course_tree_recursion($child_array, $sortorder);
}
}

View file

@ -232,6 +232,11 @@ class grade_item extends grade_object {
// Retrieve scale and infer grademax/min from it if needed
$this->load_scale();
// make sure there is not 0 in outcomeid
if (empty($this->outcomeid)) {
$this->outcomeid = null;
}
if ($this->qualifies_for_regrading()) {
$this->force_regrading();
}
@ -349,6 +354,11 @@ class grade_item extends grade_object {
}
}
// make sure there is not 0 in outcomeid
if (empty($this->outcomeid)) {
$this->outcomeid = null;
}
if (parent::insert($source)) {
// force regrading of items if needed
$this->force_regrading();
@ -1127,10 +1137,17 @@ class grade_item extends grade_object {
return array();
}
if (!empty($CFG->enableoutcomes) or $grade_category->aggregateoutcomes) {
$outcomes_sql = "";
} else {
$outcomes_sql = "AND gi.outcomeid IS NULL";
}
$sql = "SELECT gi.id
FROM {$CFG->prefix}grade_items gi
WHERE gi.categoryid = {$grade_category->id}
AND (gi.gradetype = ".GRADE_TYPE_VALUE." OR gi.gradetype = ".GRADE_TYPE_SCALE.")
AND (gi.gradetype = ".GRADE_TYPE_VALUE." OR gi.gradetype = ".GRADE_TYPE_SCALE.")
$outcomes_sql
UNION
@ -1138,7 +1155,8 @@ class grade_item extends grade_object {
FROM {$CFG->prefix}grade_items gi, {$CFG->prefix}grade_categories gc
WHERE (gi.itemtype = 'category' OR gi.itemtype = 'course') AND gi.iteminstance=gc.id
AND gc.parent = {$grade_category->id}
AND (gi.gradetype = ".GRADE_TYPE_VALUE." OR gi.gradetype = ".GRADE_TYPE_SCALE.")";
AND (gi.gradetype = ".GRADE_TYPE_VALUE." OR gi.gradetype = ".GRADE_TYPE_SCALE.")
$outcomes_sql";
if ($children = get_records_sql($sql)) {
return array_keys($children);