From 8c5a416edd721729802469fc863772b70b9e278d Mon Sep 17 00:00:00 2001 From: nicolasconnault Date: Wed, 18 Jul 2007 14:54:35 +0000 Subject: [PATCH] MDL-10478 Added category preference aggregationview. This one is linked with the more global preferences and $CFG. However, a category-specific preference needs implementing: grade_report_categorystate{$catid}, which equals GRADE_CATEGORY_EXPANDED or GRADE_CATEGORY_CONTRACTED. I've written a stub in grade/report/grader/lib.php around line 492 for pruning out the grade_tree according to these prefs. We'll also need to implement the actions for the -/+ icons. --- grade/edit/category.php | 11 +++++++++++ grade/edit/category_form.php | 16 +++++++++++++++- grade/edit/item.php | 4 ++-- grade/edit/item_form.php | 6 +++--- grade/report/grader/lib.php | 28 +++++++++++++++++++++++----- grade/report/lib.php | 20 ++++++++++---------- lang/en_utf8/grades.php | 11 +++++++++++ lib/grade/grade_item.php | 5 ++--- 8 files changed, 77 insertions(+), 24 deletions(-) diff --git a/grade/edit/category.php b/grade/edit/category.php index 18b74b2e55..81a9f4a351 100644 --- a/grade/edit/category.php +++ b/grade/edit/category.php @@ -2,6 +2,7 @@ require_once '../../config.php'; require_once $CFG->dirroot.'/grade/lib.php'; +require_once $CFG->dirroot.'/grade/report/lib.php'; require_once $CFG->libdir.'/gradelib.php'; require_once 'category_form.php'; @@ -24,6 +25,9 @@ $returnurl = $gpr->get_return_url('tree.php?id='.$course->id); $mform = new edit_category_form(null, array('gpr'=>$gpr)); if ($category = get_record('grade_categories', 'id', $id, 'courseid', $course->id)) { + // Get Category preferences + $category->pref_aggregationview = grade_report::get_pref('aggregationview', $id); + $mform->set_data($category); } else { $mform->set_data(array('courseid'=>$course->id)); @@ -43,6 +47,13 @@ if ($mform->is_cancelled()) { $grade_category->update(); } + // Handle user preferences + if (isset($data->pref_aggregationview)) { + if (!grade_report::set_pref('aggregationview', $data->pref_aggregationview, $grade_category->id)) { + error("Could not set preference aggregationview to $value for this grade category"); + } + } + redirect($returnurl); } diff --git a/grade/edit/category_form.php b/grade/edit/category_form.php index 4244804c19..f82aa0e303 100644 --- a/grade/edit/category_form.php +++ b/grade/edit/category_form.php @@ -4,9 +4,11 @@ require_once $CFG->libdir.'/formslib.php'; class edit_category_form extends moodleform { function definition() { + global $CFG; $mform =& $this->_form; // visible elements + $mform->addElement('header', 'general', get_string('gradecategory', 'grades')); $mform->addElement('text', 'fullname', get_string('categoryname', 'grades')); $options = array(GRADE_AGGREGATE_MEAN_ALL =>get_string('aggregatemeanall', 'grades'), @@ -29,6 +31,18 @@ class edit_category_form extends moodleform { $mform->addElement('select', 'droplow', get_string('droplow', 'grades'), $options); $mform->disabledIf('droplow', 'keephigh', 'noteq', 0); + // user preferences + $mform->addElement('header', 'general', get_string('userpreferences', 'grades')); + $options = array(GRADE_REPORT_PREFERENCE_DEFAULT => get_string('default', 'grades'), + GRADE_REPORT_AGGREGATION_VIEW_FULL => get_string('full', 'grades'), + GRADE_REPORT_AGGREGATION_VIEW_COMPACT => get_string('compact', 'grades')); + $label = get_string('aggregationview', 'grades') . ' (' . get_string('default', 'grades') + . ': ' . $options[$CFG->grade_report_aggregationview] . ')'; + $mform->addElement('select', 'pref_aggregationview', $label, $options); + $mform->setHelpButton('pref_aggregationview', array(false, get_string('aggregationview', 'grades'), + false, true, false, get_string("configaggregationview", 'grades'))); + $mform->setDefault('pref_aggregationview', GRADE_REPORT_PREFERENCE_DEFAULT); + // hidden params $mform->addElement('hidden', 'id', 0); $mform->setType('id', PARAM_INT); @@ -73,4 +87,4 @@ class edit_category_form extends moodleform { } -?> \ No newline at end of file +?> diff --git a/grade/edit/item.php b/grade/edit/item.php index 41cd091ca1..b7ca41d1ac 100644 --- a/grade/edit/item.php +++ b/grade/edit/item.php @@ -29,8 +29,8 @@ if ($mform->is_cancelled()) { if ($item = get_record('grade_items', 'id', $id, 'courseid', $course->id)) { // Get Item preferences - $item->pref_gradedisplaytype = get_user_preferences('grade_report_gradedisplaytype' . $id, 'default'); - $item->pref_decimalpoints = get_user_preferences('grade_report_decimalpoints' . $id, 'default'); + $item->pref_gradedisplaytype = grade_report::get_pref('gradedisplaytype', $id); + $item->pref_decimalpoints = grade_report::get_pref('decimalpoints', $id); $item->calculation = grade_item::denormalize_formula($item->calculation, $course->id); $mform->set_data($item); diff --git a/grade/edit/item_form.php b/grade/edit/item_form.php index d94b5801cb..80e8635313 100644 --- a/grade/edit/item_form.php +++ b/grade/edit/item_form.php @@ -72,7 +72,7 @@ class edit_item_form extends moodleform { $mform->addElement('date_time_selector', 'locktime', get_string('locktime', 'grades'), array('optional'=>true)); $mform->disabledIf('locktime', 'gradetype', 'eq', GRADE_TYPE_NONE); -/// user preferences + // user preferences $mform->addElement('header', 'general', get_string('userpreferences', 'grades')); $options = array(GRADE_REPORT_PREFERENCE_DEFAULT => get_string('default', 'grades'), GRADE_REPORT_GRADE_DISPLAY_TYPE_REAL => get_string('real', 'grades'), @@ -82,7 +82,7 @@ class edit_item_form extends moodleform { . ': ' . $options[$CFG->grade_report_gradedisplaytype] . ')'; $mform->addElement('select', 'pref_gradedisplaytype', $label, $options); $mform->setHelpButton('pref_gradedisplaytype', array(false, get_string('gradedisplaytype', 'grades'), - false, true, false, get_string("config_gradedisplaytype", 'grades'))); + false, true, false, get_string("configgradedisplaytype", 'grades'))); $mform->setDefault('pref_gradedisplaytype', GRADE_REPORT_PREFERENCE_DEFAULT); $options = array(GRADE_REPORT_PREFERENCE_DEFAULT => get_string('default', 'grades'), 0, 1, 2, 3, 4, 5); @@ -90,7 +90,7 @@ class edit_item_form extends moodleform { . ': ' . $options[$CFG->grade_report_decimalpoints] . ')'; $mform->addElement('select', 'pref_decimalpoints', $label, $options); $mform->setHelpButton('pref_decimalpoints', array(false, get_string('decimalpoints', 'grades'), - false, true, false, get_string("config_decimalpoints", 'grades'))); + false, true, false, get_string("configdecimalpoints", 'grades'))); $mform->setDefault('pref_decimalpoints', GRADE_REPORT_PREFERENCE_DEFAULT); /// hidden params diff --git a/grade/report/grader/lib.php b/grade/report/grader/lib.php index b7407eab71..c92e70bda8 100644 --- a/grade/report/grader/lib.php +++ b/grade/report/grader/lib.php @@ -488,6 +488,25 @@ class grade_report_grader extends grade_report { } foreach ($row as $element) { + // Load user preferences for categories + if ($element['type'] == 'category') { + $categoryid = $element['object']->id; + $aggregationview = $this->get_pref('aggregationview', $categoryid); + + if ($aggregationview == GRADE_REPORT_AGGREGATION_VIEW_COMPACT) { + $categorystate = get_user_preferences('grade_report_categorystate' . $categoryid, GRADE_CATEGORY_EXPANDED); + + // Expand/Contract icon must be set appropriately + if ($categorystate == GRADE_CATEGORY_CONTRACTED) { + // The category is contracted: this means we only show 1 item for this category: the + // category's aggregation item. The others must be removed from the grade_tree + } elseif ($categorystate == GRADE_CATEGORY_EXPANDED) { + // The category is expanded: we only show the non-aggregated items directly descending + // from this category. The category's grade_item must be removed from the grade_tree + } + } + } + $eid = $element['eid']; $object = $element['object']; $type = $element['type']; @@ -757,10 +776,10 @@ class grade_report_grader extends grade_report { global $CFG, $USER; $averagesdisplaytype = $this->get_pref('averagesdisplaytype'); - $mean_pref = get_user_preferences('grade_report_meanselection', $CFG->grade_report_meanselection); + $mean_pref = $this->get_pref('meanselection'); $groupavghtml = ''; - if ($mean_pref == 2) { + if ($mean_pref == GRADE_AGGREGATE_MEAN_GRADED) { // non empty grades $meanstr = "AND NOT g.finalgrade IS NULL"; } else { @@ -781,8 +800,7 @@ class grade_report_grader extends grade_report { $this->groupwheresql AND ra.roleid in ($this->gradebookroles) AND ra.contextid ".get_related_contexts_string($this->context)." - AND NOT g.finalgradeIS NULL - $notnullstr + $meanstr GROUP BY g.itemid"; $groupsum = array(); @@ -861,7 +879,7 @@ class grade_report_grader extends grade_report { $meanselection = $this->get_pref('meanselection'); $mean_pref = get_user_preferences('grade_report_meanselection', $CFG->grade_report_meanselection); $gradeavghtml = ''; - + if ($mean_pref == 2) { // non empty grades $meanstr = "AND NOT g.finalgrade IS NULL"; diff --git a/grade/report/lib.php b/grade/report/lib.php index 2ff9ebdd67..eb9d9ba11e 100755 --- a/grade/report/lib.php +++ b/grade/report/lib.php @@ -98,37 +98,37 @@ class grade_report { * is given (site default). * @static (Can be called statically, but then doesn't benefit from caching) * @param string $pref The name of the preference (do not include the grade_report_ prefix) - * @param int $itemid An optional itemid to check for a more fine-grained preference + * @param int $objectid An optional itemid or categoryid to check for a more fine-grained preference * @return mixed The value of the preference */ - function get_pref($pref, $itemid=null) { + function get_pref($pref, $objectid=null) { global $CFG; $fullprefname = 'grade_report_' . $pref; $retval = null; if (!isset($this)) { - if (!empty($itemid)) { - $retval = get_user_preferences($fullprefname . $itemid, grade_report::get_pref($pref)); + if (!empty($objectid)) { + $retval = get_user_preferences($fullprefname . $objectid, grade_report::get_pref($pref)); } else { $retval = get_user_preferences($fullprefname, $CFG->$fullprefname); } } else { - if (empty($this->prefs[$pref.$itemid])) { + if (empty($this->prefs[$pref.$objectid])) { - if (!empty($itemid)) { - $retval = get_user_preferences($fullprefname . $itemid); + if (!empty($objectid)) { + $retval = get_user_preferences($fullprefname . $objectid); if (empty($retval)) { // No item pref found, we are returning the global preference $retval = $this->get_pref($pref); - $itemid = null; + $objectid = null; } } else { $retval = get_user_preferences($fullprefname, $CFG->$fullprefname); } - $this->prefs[$pref.$itemid] = $retval; + $this->prefs[$pref.$objectid] = $retval; } else { - $retval = $this->prefs[$pref.$itemid]; + $retval = $this->prefs[$pref.$objectid]; } } diff --git a/lang/en_utf8/grades.php b/lang/en_utf8/grades.php index 26558d1c7d..818d08991a 100644 --- a/lang/en_utf8/grades.php +++ b/lang/en_utf8/grades.php @@ -7,6 +7,12 @@ $string['addcategoryerror'] = 'Could not add category.'; $string['addexceptionerror'] = 'Error occurred while adding exception for userid:gradeitem'; $string['addfeedback'] = 'Add Feedback'; $string['additem'] = 'Add Grade Item'; +$string['aggregatemeanall'] = 'Mean of all grades'; +$string['aggregatemedian'] = 'Median of all grades'; +$string['aggregatemeangraded'] = 'Mean of non-empty grades'; +$string['aggregatemin'] = 'Smallest grade'; +$string['aggregatemax'] = 'Highest grade'; +$string['aggregatemode'] = 'Mode of all grades'; $string['aggregation'] = 'Aggregation'; $string['aggregationposition'] = 'Aggregation position'; $string['aggregationview'] = 'Aggregation view'; @@ -67,6 +73,7 @@ $string['displaylettergrade'] = 'Display Letter Grades'; $string['displaypercent'] = 'Display Percents'; $string['displaypoints'] = 'Display Points'; $string['displayweighted'] = 'Display Weighted Grades'; +$string['droplow'] = 'Drop the lowest'; $string['dropped'] = 'Dropped'; $string['dropxlowest'] = 'Drop X Lowest'; $string['dropxlowestwarning'] = 'Note: If you use drop x lowest the grading assumes that all items in the category have the same point value. If point values differ results will be unpredictable'; @@ -76,6 +83,7 @@ $string['edittree'] = 'Categories'; $string['enableajax'] = 'Enable AJAX'; $string['encoding'] = 'Encoding'; $string['errorgradevaluenonnumeric'] = 'Received non-numeric for low or high grade for'; +$string['errorcalculationunknown'] = 'Invalid formula'; $string['errornocategorizedid'] = 'Could not get an uncategorized id!'; $string['errornocourse'] = 'Could not get course information'; $string['errorreprintheadersnonnumeric'] = 'Received non-numeric value for reprint-headers'; @@ -101,6 +109,7 @@ $string['grade'] = 'Grade'; $string['gradebook'] = 'Gradebook'; $string['gradebookhiddenerror'] = 'The gradebook is currently set to hide everything from students.'; $string['gradeboundary'] = 'Letter grade boundary'; +$string['gradecategory'] = 'Grade Category'; $string['gradecategoryhelp'] = 'Grade Category Help'; $string['gradedisplaytype'] = 'Grade display type'; $string['gradeexceptions'] = 'Grade Exceptions'; @@ -120,6 +129,7 @@ $string['gradeletternote'] = 'To delete a grade letter just empty any of the
finalgrade = bounded_number($this->grademin, $finalgrade, $this->grademax); } else { - echo "Assigning null finalgrade"; $grade->finalgrade = $finalgrade; } @@ -1341,8 +1340,8 @@ class grade_item extends grade_object { } /** - * Calculates final grade values useing the formula in calculation property. - * The parameteres are taken from final grades of grade items in current course only. + * Calculates final grade values using the formula in calculation property. + * The parameters are taken from final grades of grade items in current course only. * @return boolean false if error */ function compute($userid=null) { -- 2.39.5