]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-10109 optional aggregation of outcomes together with grades
authorskodak <skodak>
Mon, 6 Aug 2007 12:05:45 +0000 (12:05 +0000)
committerskodak <skodak>
Mon, 6 Aug 2007 12:05:45 +0000 (12:05 +0000)
backup/backuplib.php
backup/restorelib.php
grade/edit/tree/category_form.php
grade/edit/tree/outcomeitem_form.php
lang/en_utf8/grades.php
lib/db/upgrade.php
lib/grade/grade_category.php
lib/grade/grade_item.php
version.php

index cba89b94cabfb0c2d43ae1cec13a2297b2922c2b..1befa83451f85dd329ed1f06f9077685a8d3b16f 100644 (file)
                 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));
index 5017abf60ee35a8ca2710161a2d16f52a3479be4..708d4b69b0b65dd4207022354235c4acf19ed430 100644 (file)
                             $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
index 0b0890ca0fd062c61cc2f2a649229687eecf0cc9..189465cd9602244f9c07b0bae5421b264a6d4345 100644 (file)
@@ -29,6 +29,10 @@ class edit_category_form extends moodleform {
         $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++) {
index 570c87a624423f44cc9bf0751c84fe19b5f1e653..8d2771c53670ae1e9df0b43c74a2912f1558602a 100644 (file)
@@ -26,6 +26,7 @@ class edit_outcomeitem_form extends moodleform {
             }
         }
         $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)) {
index af9ef0c85c94e6fcd2b603e4bffb414c03dd12b5..216c92162f67976a987d64ceff226eff383e5003 100644 (file)
@@ -21,6 +21,7 @@ $string['aggregatemaxall'] = 'Highest grade of all grades';
 $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';
index 52e08292b699f015197e6bfc28a5a27212daed3c..928ee62df520dab1fc07ced293163fc2106c9271 100644 (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
index 2bfad2337c3752aadee78dd3dea83322b17434e2..3348b5109a9dc76cc65c3f89ba51d33c8f66507f 100644 (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);
                 }
             }
index f096574adbd0829d9cec6c2473408659106ba124..69050b99be90bec5063a35092c52201b4205c273 100644 (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);
index c9d1123b1a54602d4d8d5f3001e2b3b9244872aa..8b64385c75e4e183f2068fbcd1ccac5584aa10a5 100644 (file)
@@ -6,7 +6,7 @@
 // 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