]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-12140 category can be selected when adding new items or categories; merged from...
authorskodak <skodak>
Thu, 15 Nov 2007 08:29:12 +0000 (08:29 +0000)
committerskodak <skodak>
Thu, 15 Nov 2007 08:29:12 +0000 (08:29 +0000)
grade/edit/tree/category.php
grade/edit/tree/category_form.php
grade/edit/tree/item.php
grade/edit/tree/item_form.php
lang/en_utf8/grades.php

index 1ba1165428ff9429b21f46d6d4bc910fcfd5b14e..c1b66a8ede22d567ae8258067d9f7df434df68b1 100644 (file)
@@ -54,16 +54,19 @@ if ($id) {
     $category = $grade_category->get_record_data();
     // Get Category preferences
     $category->pref_aggregationview = grade_report::get_pref('aggregationview', $id);
-//GVA Patch
+    // Load agg coef
     $grade_item = $grade_category->load_grade_item();
-    $category->aggregationcoef = $grade_item->aggregationcoef;
-//End Patch
+    $category->aggregationcoef = format_float($grade_item->aggregationcoef, 4);
+    // set parent
+    $category->parentcategory = $grade_category->parent;
+
 } else {
-    $grade_category = new grade_category();
-    $grade_category->courseid = $course->id;
+    $grade_category = new grade_category(array('courseid'=>$courseid), false);
     $grade_category->apply_default_settings();
     $grade_category->apply_forced_settings();
+
     $category = $grade_category->get_record_data();
+    $category->aggregationcoef = format_float(0, 4);
 }
 
 $mform->set_data($category);
@@ -93,25 +96,20 @@ if ($mform->is_cancelled()) {
             error("Could not set preference aggregationview to $value for this grade category");
         }
     }
-//GVA Patch
 
-    if (isset($data->weightcourse)) {
-        global $COURSE;
-        $course_category = grade_category::fetch_course_category($COURSE->id);
-        $course_category->aggregation = GRADE_AGGREGATE_WEIGHTED_MEAN;
-        $course_category->update();
+    // set parent if needed
+    if (isset($data->parentcategory)) {
+        $grade_category->set_parent($data->parentcategory, 'gradebook');
     }
 
-    if (!isset($grade_item)) {
+    // update agg coef if needed
+    if (isset($data->aggregationcoef)) {
+        $data->aggregationcoef = unformat_float($data->aggregationcoef);
         $grade_item = $grade_category->load_grade_item();
-    }
-    if (isset($data->aggregationcoef)){
-        $data_item->aggregationcoef = $data->aggregationcoef;
-        grade_item::set_properties($grade_item, $data_item);
+        $grade_item->aggregationcoef = $data->aggregationcoef;
         $grade_item->update();
     }
 
-//End Patch
     redirect($returnurl);
 }
 
index 3c68c949f9a622a54fc924b39a7d483baab0d91f..d818ceafa881ab1a917c30b3578f0f6fc0c913bc 100644 (file)
@@ -28,7 +28,7 @@ require_once $CFG->libdir.'/formslib.php';
 class edit_category_form extends moodleform {
 
     function definition() {
-        global $CFG;
+        global $CFG, $COURSE;
         $mform =& $this->_form;
 
         $options = array(GRADE_AGGREGATE_MEAN            =>get_string('aggregatemean', 'grades'),
@@ -41,7 +41,7 @@ class edit_category_form extends moodleform {
                          GRADE_AGGREGATE_SUM             =>get_string('aggregatesum', 'grades'));
 
         // visible elements
-        $mform->addElement('header', 'gradecat', get_string('gradecategory', 'grades'));
+        $mform->addElement('header', 'headercategory', get_string('gradecategory', 'grades'));
         $mform->addElement('text', 'fullname', get_string('categoryname', 'grades'));
         $mform->addRule('fullname', null, 'required', null, 'client');
 
@@ -51,14 +51,6 @@ class edit_category_form extends moodleform {
             $mform->setAdvanced('aggregation');
         }
 
-//GVA Patch
-        $mform->addElement('checkbox', 'weightcourse', 'Weight grades for course'); //To Do Localize
-        $mform->addElement('text', 'aggregationcoef', get_string('aggregationcoefweight', 'grades'));
-        $mform->setHelpButton('aggregationcoef', array(false, get_string('aggregationcoefweight', 'grades'),
-                                false, true, false, get_string('aggregationcoefweighthelp', 'grades')));
-        $mform->disabledIf('aggregationcoef', 'weightcourse', 'notchecked');
-//End Patch
-
         $mform->addElement('checkbox', 'aggregateonlygraded', get_string('aggregateonlygraded', 'grades'));
         $mform->setHelpButton('aggregateonlygraded', array(false, get_string('aggregateonlygraded', 'grades'),
                           false, true, false, get_string('aggregateonlygradedhelp', 'grades')));
@@ -110,8 +102,46 @@ class edit_category_form extends moodleform {
         $mform->disabledIf('keephigh', 'droplow', 'noteq', 0);
         $mform->disabledIf('droplow', 'keephigh', 'noteq', 0);
 
-        // user preferences
-        $mform->addElement('header', 'userpref', get_string('myreportpreferences', 'grades'));
+/// parent category related settings
+        $mform->addElement('header', 'headerparent', get_string('parentcategory', 'grades'));
+
+        $options = array();
+        $default = '';
+        $coefstring = '';
+        $categories = grade_category::fetch_all(array('courseid'=>$COURSE->id));
+        foreach ($categories as $cat) {
+            $cat->apply_forced_settings();
+            $options[$cat->id] = $cat->get_name();
+            if ($cat->is_course_category()) {
+                $default = $cat->id;
+            }
+            if ($cat->is_aggregationcoef_used()) {
+                if ($cat->aggregation == GRADE_AGGREGATE_WEIGHTED_MEAN) {
+                    $coefstring = ($coefstring=='' or $coefstring=='aggregationcoefweight') ? 'aggregationcoefweight' : 'aggregationcoef';
+
+                } else if ($cat->aggregation == GRADE_AGGREGATE_EXTRACREDIT_MEAN) {
+                    $coefstring = ($coefstring=='' or $coefstring=='aggregationcoefextra') ? 'aggregationcoefextra' : 'aggregationcoef';
+
+                } else {
+                    $coefstring = 'aggregationcoef';
+                }
+            } else {
+                $mform->disabledIf('aggregationcoef', 'parentcategory', 'eq', $cat->id);
+            }
+        }
+        if (count($categories) > 1) {
+            $mform->addElement('select', 'parentcategory', get_string('parentcategory', 'grades'), $options);
+        }
+
+        if ($coefstring !== '') {
+            $mform->addElement('text', 'aggregationcoef', get_string($coefstring, 'grades'));
+            $mform->setHelpButton('aggregationcoef', array(false, get_string($coefstring, 'grades'),
+                                    false, true, false, get_string($coefstring.'help', 'grades')));
+            $mform->setAdvanced('aggregationcoef');
+        }
+
+/// user preferences
+        $mform->addElement('header', 'headerpreferences', get_string('myreportpreferences', 'grades'));
         $options = array(GRADE_REPORT_PREFERENCE_DEFAULT => get_string('default', 'grades'),
                          GRADE_REPORT_AGGREGATION_VIEW_FULL => get_string('fullmode', 'grades'),
                          GRADE_REPORT_AGGREGATION_VIEW_AGGREGATES_ONLY => get_string('aggregatesonly', 'grades'),
@@ -171,52 +201,50 @@ class edit_category_form extends moodleform {
                 $mform->removeElement('droplow');
             }
         }
-        
-//GVA Patch
-        if (!$id = $mform->getElementValue('id')) {
-            $mform->setDefault('aggregateonlygraded',1);
-            $parent_category = grade_category::fetch_course_category($COURSE->id);
-            if ($parent_category->is_aggregationcoef_used()) {
-                if ($mform->elementExists('weightcourse')) {
-                    $mform->removeElement('weightcourse');
-                }
-            }
-        }
-//End Patch
 
         if ($id = $mform->getElementValue('id')) {
             $grade_category = grade_category::fetch(array('id'=>$id));
             $grade_item = $grade_category->load_grade_item();
 
-//GVA Patch
-            $category = $grade_item->get_item_category();
-            if(!$category->aggregateonlygraded) {
-                $mform->setAdvanced('aggregateonlygraded', false);
-            }
-            if ($grade_item->is_course_item()) {  //An actual course, not a category, etc.
 
+            // remove agg coef if not used
+            if ($grade_category->is_course_category()) {
+                if ($mform->elementExists('parentcategory')) {
+                    $mform->removeElement('parentcategory');
+                }
                 if ($mform->elementExists('aggregationcoef')) {
                     $mform->removeElement('aggregationcoef');
                 }
-                if ($mform->elementExists('weightcourse')) {
-                    $mform->removeElement('weightcourse');
-                }
-            }
-            
-            if (!$grade_item->is_category_item()) {
-                if ($mform->elementExists('weightcourse')) {
-                    $mform->removeElement('weightcourse');
-                }
+
             } else {
-                $category = $grade_item->get_item_category();
-                $parent_category = $category->get_parent_category();
-                if ($parent_category->is_aggregationcoef_used()) {
-                    if ($mform->elementExists('weightcourse')) {
-                        $mform->removeElement('weightcourse');
+                // if we wanted to change parent of existing category - we would have to verify there are no circular references in parents!!!
+                if ($mform->elementExists('parentcategory')) {
+                    $mform->hardFreeze('parentcategory');
+                }
+
+                $parent_category = $grade_category->get_parent_category();
+                $parent_category->apply_forced_settings();
+                if (!$parent_category->is_aggregationcoef_used()) {
+                    if ($mform->elementExists('aggregationcoef')) {
+                        $mform->removeElement('aggregationcoef');
+                    }
+                } else {
+                    //fix label if needed
+                    $agg_el =& $mform->getElement('aggregationcoef');
+                    $aggcoef = '';
+                    if ($parent_category->aggregation == GRADE_AGGREGATE_WEIGHTED_MEAN) {
+                        $aggcoef = 'aggregationcoefweight';
+                    } else if ($parent_category->aggregation == GRADE_AGGREGATE_EXTRACREDIT_MEAN) {
+                        $aggcoef = 'aggregationcoefextra';
+                    }
+                    if ($aggcoef !== '') {
+                        $agg_el->setLabel(get_string($aggcoef, 'grades'));
+                        $mform->setHelpButton('aggregationcoef', array(false, get_string($aggcoef, 'grades'),
+                                false, true, false, get_string($aggcoef.'help', 'grades')));
                     }
                 }
             }
-//End Patch
+
             if ($grade_item->is_calculated()) {
                 // following elements are ignored when calculation formula used
                 if ($mform->elementExists('aggregation')) {
@@ -239,6 +267,12 @@ class edit_category_form extends moodleform {
                 }
             }
         }
+
+        // no parent header for course category
+        if (!$mform->elementExists('aggregationcoef') and !$mform->elementExists('parentcategory')) {
+            $mform->removeElement('headerparent');
+        }
+
     }
 
 }
index c1cbcbdcca5dde625cfdb9f48d0a2a91aa077869..673c92411546b0668dea9ff7f7b6a61ffbd7caa2 100644 (file)
@@ -49,17 +49,31 @@ if ($mform->is_cancelled()) {
     redirect($returnurl);
 }
 
-if ($item = grade_item::fetch(array('id'=>$id, 'courseid'=>$courseid))) {
+if ($grade_item = grade_item::fetch(array('id'=>$id, 'courseid'=>$courseid))) {
     // redirect if outcomeid present
-    if (!empty($item->outcomeid) && !empty($CFG->enableoutcomes)) {
+    if (!empty($grade_item->outcomeid) && !empty($CFG->enableoutcomes)) {
         $url = $CFG->wwwroot.'/grade/edit/tree/outcomeitem.php?id='.$id.'&amp;courseid='.$courseid;
         redirect($gpr->add_url_params($url));
     }
-    $item->calculation = grade_item::denormalize_formula($item->calculation, $courseid);
+    $item = $grade_item->get_record_data();
+
+    if ($grade_item->is_course_item()) {
+        $item->parentcategory = 0;
+    } else if ($grade_item->is_category_item()) {
+        $parent_category = $grade_item->get_parent_category();
+        $parent_category = $parent_category->get_parent_category();
+        $item->parentcategory = $parent_category->id;
+    } else {
+        $parent_category = $grade_item->get_parent_category();
+        $item->parentcategory = $parent_category->id;
+    }
 } else {
-    $item = new grade_item(array('courseid'=>$courseid, 'itemtype'=>'manual'), false);
+    $grade_item = new grade_item(array('courseid'=>$courseid, 'itemtype'=>'manual'), false);
+    $item = $grade_item->get_record_data();
+    $parent_category = grade_category::fetch_course_category($courseid);
+    $item->parentcategory = $parent_category->id;
 }
-$decimalpoints = $item->get_decimals();
+$decimalpoints = $grade_item->get_decimals();
 
 if ($item->hidden > 1) {
     $item->hiddenuntil = $item->hidden;
@@ -80,9 +94,6 @@ $item->aggregationcoef = format_float($item->aggregationcoef, 4);
 $mform->set_data($item);
 
 if ($data = $mform->get_data(false)) {
-    if (array_key_exists('calculation', $data)) {
-        $data->calculation = grade_item::normalize_formula($data->calculation, $course->id);
-    }
 
     $hidden      = empty($data->hidden) ? 0: $data->hidden;
     $hiddenuntil = empty($data->hiddenuntil) ? 0: $data->hiddenuntil;
@@ -118,6 +129,11 @@ if ($data = $mform->get_data(false)) {
         $grade_item->update();
     }
 
+    // set parent if needed
+    if (isset($data->parentcategory)) {
+        $grade_item->set_parent($data->parentcategory, 'gradebook');
+    }
+
     // update hiding flag
     if ($hiddenuntil) {
         $grade_item->set_hidden($hiddenuntil, false);
index 3d4838a8e611fba71a7fb23374506d10493e62d3..0186e26c8b0bba1653ca917936b02d0b75d81ca4 100644 (file)
@@ -100,10 +100,7 @@ class edit_item_form extends moodleform {
         $mform->disabledIf('plusfactor', 'gradetype', 'eq', GRADE_TYPE_NONE);
         $mform->disabledIf('plusfactor', 'gradetype', 'eq', GRADE_TYPE_TEXT);
 
-        $mform->addElement('text', 'aggregationcoef', get_string('aggregationcoef', 'grades'));
-
         /// grade display prefs
-
         $default_gradedisplaytype = grade_get_setting($COURSE->id, 'displaytype', $CFG->grade_displaytype);
         $options = array(GRADE_DISPLAY_TYPE_DEFAULT    => get_string('default', 'grades'),
                          GRADE_DISPLAY_TYPE_REAL       => get_string('real', 'grades'),
@@ -147,6 +144,45 @@ class edit_item_form extends moodleform {
         $mform->setHelpButton('locktime', array('locktime', get_string('locktime', 'grades'), 'grade'));
         $mform->disabledIf('locktime', 'gradetype', 'eq', GRADE_TYPE_NONE);
 
+/// parent category related settings
+        $mform->addElement('header', 'headerparent', get_string('parentcategory', 'grades'));
+
+        $options = array();
+        $default = '';
+        $coefstring = '';
+        $categories = grade_category::fetch_all(array('courseid'=>$COURSE->id));
+        foreach ($categories as $cat) {
+            $cat->apply_forced_settings();
+            $options[$cat->id] = $cat->get_name();
+            if ($cat->is_course_category()) {
+                $default = $cat->id;
+            }
+            if ($cat->is_aggregationcoef_used()) {
+                if ($cat->aggregation == GRADE_AGGREGATE_WEIGHTED_MEAN) {
+                    $coefstring = ($coefstring=='' or $coefstring=='aggregationcoefweight') ? 'aggregationcoefweight' : 'aggregationcoef';
+
+                } else if ($cat->aggregation == GRADE_AGGREGATE_EXTRACREDIT_MEAN) {
+                    $coefstring = ($coefstring=='' or $coefstring=='aggregationcoefextra') ? 'aggregationcoefextra' : 'aggregationcoef';
+
+                } else {
+                    $coefstring = 'aggregationcoef';
+                }
+            } else {
+                $mform->disabledIf('aggregationcoef', 'parentcategory', 'eq', $cat->id);
+            }
+        }
+
+        if (count($categories) > 1) {
+            $mform->addElement('select', 'parentcategory', get_string('parentcategory', 'grades'), $options);
+        }
+
+        if ($coefstring !== '') {
+            $mform->addElement('text', 'aggregationcoef', get_string($coefstring, 'grades'));
+            $mform->setHelpButton('aggregationcoef', array(false, get_string($coefstring, 'grades'),
+                                    false, true, false, get_string($coefstring.'help', 'grades')));
+            $mform->setAdvanced('aggregationcoef');
+        }
+
 /// hidden params
         $mform->addElement('hidden', 'id', 0);
         $mform->setType('id', PARAM_INT);
@@ -200,9 +236,19 @@ class edit_item_form extends moodleform {
 
             //remove the aggregation coef element if not needed
             if ($grade_item->is_course_item()) {
-                $mform->removeElement('aggregationcoef');
+                if ($mform->elementExists('parentcategory')) {
+                    $mform->removeElement('parentcategory');
+                }
+                if ($mform->elementExists('aggregationcoef')) {
+                    $mform->removeElement('aggregationcoef');
+                }
 
             } else {
+                // if we wanted to change parent of existing item - we would have to verify there are no circular references in parents!!!
+                if ($mform->elementExists('parentcategory')) {
+                    $mform->hardFreeze('parentcategory');
+                }
+
                 if ($grade_item->is_category_item()) {
                     $category = $grade_item->get_item_category();
                     $parent_category = $category->get_parent_category();
@@ -213,17 +259,22 @@ class edit_item_form extends moodleform {
                 $parent_category->apply_forced_settings();
 
                 if (!$parent_category->is_aggregationcoef_used()) {
-                    $mform->removeElement('aggregationcoef');
+                    if ($mform->elementExists('aggregationcoef')) {
+                        $mform->removeElement('aggregationcoef');
+                    }
                 } else {
+                    //fix label if needed
                     $agg_el =& $mform->getElement('aggregationcoef');
+                    $aggcoef = '';
                     if ($parent_category->aggregation == GRADE_AGGREGATE_WEIGHTED_MEAN) {
-                        $agg_el->setLabel(get_string('aggregationcoefweight', 'grades'));
-                        $mform->setHelpButton('aggregationcoef', array(false, get_string('aggregationcoefweight', 'grades'),
-                                false, true, false, get_string('aggregationcoefweighthelp', 'grades')));
+                        $aggcoef = 'aggregationcoefweight';
                     } else if ($parent_category->aggregation == GRADE_AGGREGATE_EXTRACREDIT_MEAN) {
-                        $agg_el->setLabel(get_string('aggregationcoefextra', 'grades'));
-                        $mform->setHelpButton('aggregationcoef', array(false, get_string('aggregationcoefextra', 'grades'),
-                                false, true, false, get_string('aggregationcoefextrahelp', 'grades')));
+                        $aggcoef = 'aggregationcoefextra';
+                    }
+                    if ($aggcoef !== '') {
+                        $agg_el->setLabel(get_string($aggcoef, 'grades'));
+                        $mform->setHelpButton('aggregationcoef', array(false, get_string($aggcoef, 'grades'),
+                                false, true, false, get_string($aggcoef.'help', 'grades')));
                     }
                 }
             }
@@ -249,22 +300,11 @@ class edit_item_form extends moodleform {
             // all new items are manual, children of course category
             $mform->removeElement('plusfactor');
             $mform->removeElement('multfactor');
+        }
 
-            $parent_category = grade_category::fetch_course_category($COURSE->id);
-            if (!$parent_category->is_aggregationcoef_used()) {
-                $mform->removeElement('aggregationcoef');
-            } else {
-                $agg_el =& $mform->getElement('aggregationcoef');
-                if ($parent_category->aggregation == GRADE_AGGREGATE_WEIGHTED_MEAN) {
-                    $agg_el->setLabel(get_string('aggregationcoefweight', 'grades'));
-                    $mform->setHelpButton('aggregationcoef', array(false, get_string('aggregationcoefweight', 'grades'),
-                            false, true, false, get_string('aggregationcoefweighthelp', 'grades')));
-                } else if ($parent_category->aggregation == GRADE_AGGREGATE_EXTRACREDIT_MEAN) {
-                    $agg_el->setLabel(get_string('aggregationcoefextra', 'grades'));
-                    $mform->setHelpButton('aggregationcoef', array(false, get_string('aggregationcoefextra', 'grades'),
-                            false, true, false, get_string('aggregationcoefextrahelp', 'grades')));
-                }
-            }
+        // no parent header for course category
+        if (!$mform->elementExists('aggregationcoef') and !$mform->elementExists('parentcategory')) {
+            $mform->removeElement('headerparent');
         }
     }
 
@@ -290,16 +330,6 @@ class edit_item_form extends moodleform {
             }
         }
 
-        /*
-        if (array_key_exists('calculation', $data) and $data['calculation'] != '') {
-            $grade_item = new grade_item(array('id'=>$data['id'], 'itemtype'=>$data['itemtype'], 'courseid'=>$data['courseid']));
-            $result = $grade_item->validate_formula($data['calculation']);
-            if ($result !== true) {
-                $errors['calculation'] = $result;
-            }
-        }
-        */
-
         if (array_key_exists('gradetype', $data) and $data['gradetype'] == GRADE_TYPE_SCALE) {
             if (empty($data['scaleid'])) {
                 $errors['scaleid'] = get_String('missingscale', 'grades');
index e7035b842077e8f08bab703675dc9afbcae175f2..1659d4145b562459cc541dd72d97d4488baff4f9 100644 (file)
@@ -340,6 +340,7 @@ $string['overridden'] = 'Overridden';
 $string['overriddenhelp'] = 'When on, the overridden flag prevents any future attempts to automatically adjust the value of the grade. This flag is often set internally by the gradebook, but can be switched on and off manually using this form element.';
 $string['overriddennotice'] = 'Your final grade from this activity was manually adjusted.';
 $string['overallavg'] = 'Overall average';
+$string['parentcategory'] = 'Parent category';
 $string['pctoftotalgrade'] = '%% of total grade';
 $string['percent'] = 'Percent';
 $string['percentage'] = 'Percentage';