fwrite ($bf,full_tag("AGGREGATION",5,false,$grade_category->aggregation));
fwrite ($bf,full_tag("KEEPHIGH",5,false,$grade_category->keephigh));
fwrite ($bf,full_tag("DROPLOW",5,false,$grade_category->droplow));
+ fwrite ($bf,full_tag("AGGREGATEOUTCOMES",5,false,$grade_category->aggregateoutcomes));
//End grade_category
fwrite ($bf,end_tag("GRADE_CATEGORY",4,true));
$dbrec->aggregation = backup_todb($info['GRADE_CATEGORY']['#']['AGGREGATION']['0']['#']);
$dbrec->keephigh = backup_todb($info['GRADE_CATEGORY']['#']['KEEPHIGH']['0']['#']);
$dbrec->droplow = backup_todb($info['GRADE_CATEGORY']['#']['DROPLOW']['0']['#']);
+ $dbrec->aggregateoutcomes = backup_todb($info['GRADE_CATEGORY']['#']['AGGREGATEOUTCOMES']['0']['#']);
$dbrec->hidden = backup_todb($info['GRADE_CATEGORY']['#']['HIDDEN']['0']['#']);
//Structure is equal to db, insert record
$mform->addElement('select', 'aggregation', get_string('aggregation', 'grades'), $options);
$mform->setDefault('gradetype', GRADE_AGGREGATE_MEAN_ALL);
+ if (!empty($CFG->enableoutcomes)) {
+ $mform->addElement('advcheckbox', 'aggregateoutcomes', get_string('aggregateoutcomes', 'grades'));
+ }
+
$options = array();
$options[0] = get_string('none');
for ($i=1; $i<=20; $i++) {
}
}
$mform->addElement('select', 'outcomeid', get_string('outcome', 'grades'), $options);
+ $mform->addRule('outcomeid', get_string('required'), 'required');
$options = array(0=>get_string('none'));
if ($coursemods = get_course_mods($COURSE->id)) {
$string['aggregatemaxgraded'] = 'Highest grade of non-empty grades';
$string['aggregatemodeall'] = 'Mode of all grades';
$string['aggregatemodegraded'] = 'Mode of non-empty grades';
+$string['aggregateoutcomes'] = 'Aggregate also outcomes';
$string['aggregateweightedmeanall'] = 'Weighted mean of all grades';
$string['aggregateweightedmeangraded'] = 'Weighted mean of non-empty grades';
$string['aggregation'] = 'Aggregation';
$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);
$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'));
}
+ 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
*/
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
$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);
}
/**
// 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);
}
}
// 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();
}
}
}
+ // 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();
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
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);
// This is compared against the values stored in the database to determine
// whether upgrades should be performed (see lib/db/*.php)
- $version = 2007080202; // YYYYMMDD = date
+ $version = 2007080300; // YYYYMMDD = date
// XY = increments within a single day
$release = '1.9 dev'; // Human-friendly version name