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 .= '