diff -Naur -x '.DS_*' -x nbproject 20clean/grade/report/user/index.php 20user/grade/report/user/index.php --- 20clean/grade/report/user/index.php 2010-11-06 09:01:10.000000000 -0500 +++ 20user/grade/report/user/index.php 2010-11-17 14:14:11.000000000 -0600 @@ -119,6 +119,8 @@ $gui->close(); } else { // Only show one user's report $report = new grade_report_user($courseid, $gpr, $context, $userid); + //MDL-20617 - Bob Puffer + $report->user_avg(); //MDL-20617 end print_grade_page_head($courseid, 'report', 'user', get_string('pluginname', 'gradereport_user'). ' - '.fullname($report->user)); groups_print_course_menu($course, $gpr->get_return_url('index.php?id='.$courseid, array('userid'=>0))); @@ -140,6 +142,8 @@ // Create a report instance $report = new grade_report_user($courseid, $gpr, $context, $userid); + //MDL-20617 - Bob Puffer + $report->user_avg(); //MDL-20617 end // print the page print_grade_page_head($courseid, 'report', 'user', get_string('pluginname', 'gradereport_user'). ' - '.fullname($report->user)); diff -Naur -x '.DS_*' -x nbproject 20clean/grade/report/user/lib.php 20user/grade/report/user/lib.php --- 20clean/grade/report/user/lib.php 2010-11-06 09:01:10.000000000 -0500 +++ 20user/grade/report/user/lib.php 2010-11-17 15:30:14.000000000 -0600 @@ -101,6 +101,17 @@ $this->showhiddenitems = grade_get_setting($this->courseid, 'report_user_showhiddenitems', $CFG->grade_report_user_showhiddenitems); $this->showtotalsifcontainhidden = grade_get_setting($this->courseid, 'report_user_showtotalsifcontainhidden', $CFG->grade_report_user_showtotalsifcontainhidden); + //MDL-20617 - Bob Puffer + //$this->showrange = true; + $this->showpoints = grade_get_setting($this->courseid, 'report_user_showpoints', $CFG->grade_report_user_showpoints); + $this->showrange = grade_get_setting($this->courseid, 'report_user_showrange', $CFG->grade_report_user_showrange_ur); + $this->decimals = grade_get_setting($this->courseid, 'decimalpoints', $CFG->grade_decimalpoints); + $this->rangedecimals = grade_get_setting($this->courseid, 'report_user_rangedecimals', $CFG->grade_report_user_rangedecimals); + $this->showfeedback = grade_get_setting($this->courseid, 'report_user_showfeedback', $CFG->grade_report_user_showfeedback_ur); + $this->showweight = grade_get_setting($this->courseid, 'report_user_showweight', $CFG->grade_report_user_showweight); + $this->showlettergrade = grade_get_setting($this->courseid, 'report_user_showlettergrade', $CFG->grade_report_user_showlettergrade); + $this->showaverage = grade_get_setting($this->courseid, 'report_user_showaverage', $CFG->grade_report_user_showaverage_ur); //MDL-20617 end + $this->switch = grade_get_setting($this->courseid, 'aggregationposition', $CFG->grade_aggregationposition); // Grab the grade_tree for this course @@ -156,9 +167,25 @@ */ // setting up table headers + //MDL-20617 - Bob Puffer + /* $this->tablecolumns = array('itemname', 'grade'); $this->tableheaders = array($this->get_lang_string('gradeitem', 'grades'), $this->get_lang_string('grade')); + */ + + $this->tablecolumns = array('itemname'); + $this->tableheaders = array($this->get_lang_string('gradeitem', 'grades')); + + if ($this->showweight) { + $this->tablecolumns[] = 'weight'; + $this->tableheaders[] = $this->get_lang_string('weightuc', 'grades'); + } + + if ($this->showpoints) { + $this->tablecolumns[] = 'grade'; + $this->tableheaders[] = $this->get_lang_string('pointsuc', 'grades'); + } //MDL-20617 end if ($this->showrange) { $this->tablecolumns[] = 'range'; @@ -170,6 +197,29 @@ $this->tableheaders[] = $this->get_lang_string('percentage', 'grades'); } + //MDL-20617 - Bob Puffer + if ($this->showlettergrade) { + $this->tablecolumns[] = 'lettergrade'; + $this->tableheaders[] = $this->get_lang_string('lettergrade', 'grades'); + } + + if ($this->showrank) { + // TODO: this is broken if hidden grades present!! + $this->tablecolumns[] = 'rank'; + $this->tableheaders[] = $this->get_lang_string('rank', 'grades'); + } + + if ($this->showaverage) { + // TODO: this is broken if hidden grades present!! + $this->tablecolumns[] = 'average'; + $this->tableheaders[] = $this->get_lang_string('average', 'grades'); + } + + if ($this->showfeedback) { + $this->tablecolumns[] = 'feedback'; + $this->tableheaders[] = $this->get_lang_string('feedback', 'grades'); + } +/* if ($this->showrank) { // TODO: this is broken if hidden grades present!! $this->tablecolumns[] = 'rank'; @@ -178,7 +228,8 @@ $this->tablecolumns[] = 'feedback'; $this->tableheaders[] = $this->get_lang_string('feedback', 'grades'); - +*/ +// MDL-20617 end } function fill_table() { @@ -257,25 +308,45 @@ /// Actual Grade $gradeval = $grade_grade->finalgrade; - if ($grade_grade->grade_item->needsupdate) { - $data['grade']['class'] = $class.' gradingerror'; - $data['grade']['content'] = get_string('error'); - } else if (!empty($CFG->grade_hiddenasdate) and $grade_grade->get_datesubmitted() and !$this->canviewhidden and $grade_grade->is_hidden() - and !$grade_grade->grade_item->is_category_item() and !$grade_grade->grade_item->is_course_item()) { - // the problem here is that we do not have the time when grade value was modified, 'timemodified' is general modification date for grade_grades records - $class .= ' datesubmitted'; - $data['grade']['class'] = $class; - $data['grade']['content'] = get_string('submittedon', 'grades', userdate($grade_grade->get_datesubmitted(), get_string('strftimedatetimeshort'))); - - } elseif ($grade_grade->is_hidden()) { - $data['grade']['class'] = $class.' hidden'; - $data['grade']['content'] = '-'; - } else { - $data['grade']['class'] = $class; - $gradeval = $this->blank_hidden_total($this->courseid, $grade_grade->grade_item, $gradeval); - $data['grade']['content'] = grade_format_gradevalue($gradeval, $grade_grade->grade_item, true); + //MDL-20617 - Bob Puffer + $class .= " itemcenter "; + if ($this->showweight) { + $data['weight']['class'] = $class; + $data['weight']['content'] = '-'; + // has a weight assigned, might be extra credit + if ($grade_object->aggregationcoef > 0 && $type <> 'courseitem') { + $data['weight']['content'] = number_format($grade_object->aggregationcoef,2).'%'; + } + } + + if ($this->showpoints) { //MDL-20617 end + if ($grade_grade->grade_item->needsupdate) { + $data['grade']['class'] = $class.' gradingerror'; + $data['grade']['content'] = get_string('error'); + } else if (!empty($CFG->grade_hiddenasdate) and $grade_grade->get_datesubmitted() and !$this->canviewhidden and $grade_grade->is_hidden() + and !$grade_grade->grade_item->is_category_item() and !$grade_grade->grade_item->is_course_item()) { + // the problem here is that we do not have the time when grade value was modified, 'timemodified' is general modification date for grade_grades records + $class .= ' datesubmitted'; + $data['grade']['class'] = $class; + $data['grade']['content'] = get_string('submittedon', 'grades', userdate($grade_grade->get_datesubmitted(), get_string('strftimedatetimeshort'))); + + } elseif ($grade_grade->is_hidden()) { + $data['grade']['class'] = $class.' hidden'; + $data['grade']['content'] = '-'; + } else { + $data['grade']['class'] = $class; + $gradeval = $this->blank_hidden_total($this->courseid, $grade_grade->grade_item, $gradeval); + $data['grade']['content'] = grade_format_gradevalue($gradeval, $grade_grade->grade_item, true); + } + //MDL-20617 - Bob Puffer } + // Range (moved from below) + if ($this->showrange) { + $data['range']['class'] = $class; + $data['range']['content'] = $grade_grade->grade_item->get_formatted_range(GRADE_DISPLAY_TYPE_REAL, $this->rangedecimals); + } //MDL-20617 end + /// Percentage if ($this->showpercentage) { if ($grade_grade->grade_item->needsupdate) { @@ -290,6 +361,25 @@ } } + //MDL-20617 - Bob Puffer + /// Lettergrade + if ($this->showlettergrade) { + if ($grade_grade->grade_item->needsupdate) { + $data['lettergrade']['class'] = $class.' gradingerror'; + $data['lettergrade']['content'] = get_string('error'); + } elseif ($grade_grade->is_hidden()) { + $data['lettergrade']['class'] = $class.' hidden'; + if (!$this->canviewhidden) { + $data['lettergrade']['content'] = '-'; + } else { + $data['lettergrade']['content'] = grade_format_gradevalue($gradeval, $grade_grade->grade_item, true, GRADE_DISPLAY_TYPE_LETTER); + } + } else { + $data['lettergrade']['class'] = $class; + $data['lettergrade']['content'] = grade_format_gradevalue($gradeval, $grade_grade->grade_item, true, GRADE_DISPLAY_TYPE_LETTER); + } + } //MDL-20617 end + /// Rank if ($this->showrank) { // TODO: this is broken if hidden grades present!! @@ -317,21 +407,48 @@ } } + // MDL-20617 - Bob Puffer + /// Average + if ($this->showaverage) { + $data['average']['class'] = $class; + if (! is_null($this->gtree->items[$eid]->avg)) { + $data['average']['content'] = $this->gtree->items[$eid]->avg; + } else { + $data['average']['content'] = '-'; + } + } /// Feedback + if ($this->showfeedback) { + if ($grade_grade->overridden > 0 AND ($type == 'categoryitem' OR $type == 'courseitem')) { + $data['feedback']['class'] = $class.' feedbacktext'; + $data['feedback']['content'] = 'OVERRIDDEN: ' . format_text($grade_grade->feedback, $grade_grade->feedbackformat); + } else if (empty($grade_grade->feedback) or (!$this->canviewhidden and $grade_grade->is_hidden())) { + $data['feedback']['class'] = $class.' feedbacktext'; + $data['feedback']['content'] = ' '; + + } else { + $data['feedback']['class'] = $class.' feedbacktext'; + $data['feedback']['content'] = format_text($grade_grade->feedback, $grade_grade->feedbackformat); + } + } + + /* if (empty($grade_grade->feedback) or (!$this->canviewhidden and $grade_grade->is_hidden())) { $data['feedback']['class'] = $class.' feedbacktext'; $data['feedback']['content'] = ' '; } else { $data['feedback']['class'] = $class.' feedbacktext'; - $data['feedback']['content'] = format_text($grade_grade->feedback, $grade_grade->feedbackformat, array('overflowdiv'=>true)); + $data['feedback']['content'] = format_text($grade_grade->feedback, $grade_grade->feedbackformat); } + /// Range if ($this->showrange) { $data['range']['class'] = $class; $data['range']['content'] = $grade_grade->grade_item->get_formatted_range(); } + */ //MDL-20617 end } } @@ -422,6 +539,143 @@ } function process_action($target, $action) { } + + /** + * MDL-20617 - Bob Puffer + * Builds the grade item averages. + * + */ + + function user_avg() { + global $CFG, $USER, $DB, $OUTPUT; + + $averagesdisplaytype = $this->get_pref('averagesdisplaytype'); + $averagesdecimalpoints = $this->get_pref('averagesdecimalpoints'); + $meanselection = $this->get_pref('meanselection'); + $shownumberofgrades = $this->get_pref('shownumberofgrades'); + + $avghtml = ''; + $avgcssclass = 'avg'; + + $straverage = get_string('overallaverage', 'grades'); + $showaverages = $this->get_pref('showaverages'); + $groupsql = ""; + $groupwheresql = ""; + $groupwheresqlparams = array(); + + if ($shownumberofgrades) { + $straverage .= ' (' . get_string('submissions', 'grades') . ') '; + } + + $totalcount = $this->get_numusers(false); + + list($usql, $rolesparams) = $DB->get_in_or_equal(explode(',', $this->gradebookroles), SQL_PARAMS_NAMED, 'grbr0'); + + if ($showaverages) { + $params = array_merge(array('courseid'=>$this->courseid), $rolesparams, $groupwheresqlparams); + + // find sums of all grade items in course + $SQL = "SELECT g.itemid, SUM(g.finalgrade) AS sum + FROM {$CFG->prefix}grade_items gi + JOIN {$CFG->prefix}grade_grades g ON g.itemid = gi.id + JOIN {$CFG->prefix}user u ON u.id = g.userid + JOIN {$CFG->prefix}role_assignments ra ON ra.userid = u.id + $groupsql + WHERE gi.courseid = $this->courseid + AND ra.roleid in ($this->gradebookroles) + AND ra.contextid ".get_related_contexts_string($this->context)." + AND g.finalgrade IS NOT NULL + $groupwheresql + GROUP BY g.itemid"; + $sum_array = array(); + if ($sums = $DB->get_records_sql($SQL, $params)) { + foreach ($sums as $itemid => $csum) { + $sum_array[$itemid] = $csum->sum; + } + } + + $columncount=0; + + // MDL-10875 Empty grades must be evaluated as grademin, NOT always 0 + // This query returns a count of ungraded grades (NULL finalgrade OR no matching record in grade_grades table) + $SQL = "SELECT gi.id, COUNT(u.id) AS count + FROM {$CFG->prefix}grade_items gi + CROSS JOIN {$CFG->prefix}user u + JOIN {$CFG->prefix}role_assignments ra ON ra.userid = u.id + LEFT OUTER JOIN {$CFG->prefix}grade_grades g ON (g.itemid = gi.id AND g.userid = u.id AND g.finalgrade IS NOT NULL) + $groupsql + WHERE gi.courseid = $this->courseid + AND ra.roleid in ($this->gradebookroles) + AND ra.contextid ".get_related_contexts_string($this->context)." + AND g.id IS NULL + $groupwheresql + GROUP BY gi.id"; + + $ungradedcounts = $DB->get_records_sql($SQL, $params); + + foreach ($this->gtree->items as $itemid=>$unused) { + $item =& $this->gtree->items[$itemid]; + + if ($item->needsupdate) { + $avghtml .= ''.get_string('error').''; + continue; + } + + if (!isset($sum_array[$item->id])) { + $sum_array[$item->id] = 0; + } + + if (empty($ungraded_counts[$itemid])) { + $ungraded_count = 0; + } else { + $ungraded_count = $ungraded_counts[$itemid]->count; + } + + if ($meanselection == GRADE_REPORT_MEAN_GRADED) { + $mean_count = $totalcount - $ungraded_count; + } else { // Bump up the sum by the number of ungraded items * grademin + $sum_array[$item->id] += $ungraded_count * $item->grademin; + $mean_count = $totalcount; + } + + $decimalpoints = $item->get_decimals(); + + // Determine which display type to use for this average + if ($USER->gradeediting[$this->courseid]) { + $displaytype = GRADE_DISPLAY_TYPE_REAL; + + } else if ($averagesdisplaytype == GRADE_REPORT_PREFERENCE_INHERIT) { // no ==0 here, please resave the report and user preferences + $displaytype = $item->get_displaytype(); + + } else { + $displaytype = $averagesdisplaytype; + } + + // Override grade_item setting if a display preference (not inherit) was set for the averages + if ($averagesdecimalpoints == GRADE_REPORT_PREFERENCE_INHERIT) { + $decimalpoints = $item->get_decimals(); + + } else { + $decimalpoints = $averagesdecimalpoints; + } + + if (!isset($sum_array[$item->id]) || $mean_count == 0) { + $this->gtree->items[$itemid]->avg = '-'; + } else { + $sum = $sum_array[$item->id]; + $avgradeval = $sum/$mean_count; + $gradehtml = grade_format_gradevalue($avgradeval, $item, true, $displaytype, $decimalpoints); + + $numberofgrades = ''; + if ($shownumberofgrades) { + $numberofgrades = " ($mean_count)"; + } + + $this->gtree->items[$itemid]->avg = $gradehtml.$numberofgrades; + } + } + } + } //MDL-20617 end } function grade_report_user_settings_definition(&$mform) { @@ -449,6 +703,63 @@ $mform->addElement('select', 'report_user_showpercentage', get_string('showpercentage', 'grades'), $options); $mform->addHelpButton('report_user_showpercentage', 'showpercentage', 'grades'); + //MDL-20617 - Bob Puffer + if (empty($CFG->grade_report_user_showpoints)) { + $options[-1] = get_string('defaultprev', 'grades', $options[0]); + } else { + $options[-1] = get_string('defaultprev', 'grades', $options[1]); + } + + $mform->addElement('select', 'report_user_showpoints', get_string('showpoints', 'grades'), $options); + + + if (empty($CFG->grade_report_user_showfeedback)) { + $options[-1] = get_string('defaultprev', 'grades', $options[0]); + } else { + $options[-1] = get_string('defaultprev', 'grades', $options[1]); + } + + $mform->addElement('select', 'report_user_showfeedback', get_string('showfeedback_ur', 'grades'), $options); + + if (empty($CFG->grade_report_user_showweight)) { + $options[-1] = get_string('defaultprev', 'grades', $options[0]); + } else { + $options[-1] = get_string('defaultprev', 'grades', $options[1]); + } + + $mform->addElement('select', 'report_user_showweight', get_string('showweight', 'grades'), $options); + + if (empty($CFG->grade_report_user_showaverage)) { + $options[-1] = get_string('defaultprev', 'grades', $options[0]); + } else { + $options[-1] = get_string('defaultprev', 'grades', $options[1]); + } + + $mform->addElement('select', 'report_user_showaverage', get_string('showaverage_ur', 'grades'), $options); + + if (empty($CFG->grade_report_user_showlettergrade)) { + $options[-1] = get_string('defaultprev', 'grades', $options[0]); + } else { + $options[-1] = get_string('defaultprev', 'grades', $options[1]); + } + + $mform->addElement('select', 'report_user_showlettergrade', get_string('showlettergrade', 'grades'), $options); + + if (empty($CFG->grade_report_user_showrange)) { + $options[-1] = get_string('defaultprev', 'grades', $options[0]); + } else { + $options[-1] = get_string('defaultprev', 'grades', $options[1]); + } + + $mform->addElement('select', 'report_user_showrange', get_string('showrange_ur', 'grades'), $options); + + $options = array(0=>0, 1=>1, 2=>2, 3=>3, 4=>4, 5=>5); + if (! empty($CFG->grade_report_user_rangedecimals)) { + $options[-1] = $options[$CFG->grade_report_user_rangedecimals]; + } + $mform->addElement('select', 'report_user_rangedecimals', get_string('rangedecimals_ur', 'grades'), $options); + //MDL-20617 end + $options = array(-1 => get_string('default', 'grades'), 0 => get_string('shownohidden', 'grades'), 1 => get_string('showhiddenuntilonly', 'grades'), diff -Naur -x '.DS_*' -x nbproject 20clean/grade/report/user/settings.php 20user/grade/report/user/settings.php --- 20clean/grade/report/user/settings.php 2010-07-14 09:01:12.000000000 -0500 +++ 20user/grade/report/user/settings.php 2010-11-17 13:59:16.000000000 -0600 @@ -23,6 +23,16 @@ $settings->add(new admin_setting_configcheckbox('grade_report_user_showrank', get_string('showrank', 'grades'), get_string('showrank_help', 'grades'), 0, PARAM_INT)); $settings->add(new admin_setting_configcheckbox('grade_report_user_showpercentage', get_string('showpercentage', 'grades'), get_string('showpercentage_help', 'grades'), 2, PARAM_INT)); + //MDL-20617 - Bob Puffer + $settings->add(new admin_setting_configcheckbox('grade_report_user_showpoints', get_string('showpoints', 'grades'), get_string('showpoints_help', 'grades'), 2, PARAM_INT)); + $settings->add(new admin_setting_configcheckbox('grade_report_user_showfeedback_ur', get_string('showfeedback_ur', 'grades'), get_string('showfeedback_ur_help', 'grades'), 2, PARAM_INT)); + $settings->add(new admin_setting_configcheckbox('grade_report_user_showrange_ur', get_string('showrange_ur', 'grades'), get_string('showrange_ur_help', 'grades'), 2, PARAM_INT)); + $settings->add(new admin_setting_configcheckbox('grade_report_user_showweight', get_string('showweight', 'grades'), get_string('showweight_help', 'grades'), 2, PARAM_INT)); + $settings->add(new admin_setting_configcheckbox('grade_report_user_showaverage_ur', get_string('showaverage_ur', 'grades'), get_string('showaverage_ur_help', 'grades'), 2, PARAM_INT)); + $settings->add(new admin_setting_configcheckbox('grade_report_user_showlettergrade', get_string('showlettergrade', 'grades'), get_string('showlettergrade_help', 'grades'), 2, PARAM_INT)); + $settings->add(new admin_setting_configselect('grade_report_user_rangedecimals', get_string('rangedecimals_ur', 'grades'), + get_string('rangedecimals_ur', 'grades'), 0,array(0=>0, 1=>1, 2=>2, 3=>3, 4=>4, 5=>5))); + //MDL-20617 end $options = array(0 => get_string('shownohidden', 'grades'), 1 => get_string('showhiddenuntilonly', 'grades'), diff -Naur -x '.DS_*' -x nbproject 20clean/grade/report/user/styles.css 20user/grade/report/user/styles.css --- 20clean/grade/report/user/styles.css 2010-11-06 09:01:10.000000000 -0500 +++ 20user/grade/report/user/styles.css 2010-11-17 13:38:44.000000000 -0600 @@ -34,4 +34,7 @@ .user-grade td.excluded {background-color: #666;} .user-grade td.hidden {color: #aaa;} .user-grade td.feedbacktext {max-width:600px;padding:0;} -.pagelayout-report .user-grade .feedbacktext .no-overflow {overflow:auto;padding:0.25em;} \ No newline at end of file +.pagelayout-report .user-grade .feedbacktext .no-overflow {overflow:auto;padding:0.25em;} +/*MDL-20617 - Bob Puffer */ +table.user-grade td.feedbacktext {text-align:left;width: 40%;font-size: 0.8em;white-space:normal;} +table.user-grade td.itemcenter {text-align:center;} /*MDL-20617 end */ \ No newline at end of file diff -Naur -x '.DS_*' -x nbproject 20clean/lang/en/grades.php 20user/lang/en/grades.php --- 20clean/lang/en/grades.php 2010-08-13 09:01:12.000000000 -0500 +++ 20user/lang/en/grades.php 2010-11-17 14:08:06.000000000 -0600 @@ -475,6 +475,9 @@ $string['plusfactor'] = 'Offset'; $string['plusfactor_help'] = 'The offset is a number that is added to every grade for this grade item, after the multiplicator is applied.'; $string['points'] = 'points'; +//MDL-20617 - Bob Puffer +$string['pointsuc'] = 'Points'; +//MDL-20617 end $string['pointsascending'] = 'Sort by points ascending'; $string['pointsdescending'] = 'Sort by points descending'; $string['positionfirst'] = 'First'; @@ -531,6 +534,21 @@ $string['setting'] = 'Setting'; $string['settings'] = 'Settings'; $string['setweights'] = 'Set weights'; +//MDL-20617 - Bob Puffer +$string['showaverage_ur'] = 'Show average'; +$string['showaverage_ur_help'] = 'Whether to show the average column on the User report.'; +$string['showfeedback_ur'] = 'Show feedback'; +$string['showfeedback_ur_help'] = 'Whether to show the feedback column on the User report.'; +$string['showlettergrade'] = 'Show letter grades'; +$string['showlettergrade_help'] = 'Whether to show the letter grade column on the User report.'; +$string['showpoints'] = 'Show points'; +$string['showpoints_help'] = 'Whether to show the points column on the User report.'; +$string['showrange_ur'] = 'Show ranges'; +$string['showrange_ur_help'] = 'Whether to show the range column on the User report.'; +$string['showweight'] = 'Show weightings'; +$string['showweight_help'] = 'Whether to show the weight column on the User report.'; +$string['rangedecimals_ur'] = 'Decimal display in ranges'; +//MDL-20617 end $string['showactivityicons'] = 'Show activity icons'; $string['showactivityicons_help'] = 'If enabled, activity icons are shown next to activity names.'; $string['showallhidden'] = 'Show hidden';