]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-11718 grader report now does not show column totals if user does not have view...
authorskodak <skodak>
Sat, 27 Oct 2007 13:13:47 +0000 (13:13 +0000)
committerskodak <skodak>
Sat, 27 Oct 2007 13:13:47 +0000 (13:13 +0000)
grade/report/grader/lib.php
grade/report/grader/preferences_form.php

index 403fcece53f2f45d36b412d6430f91570452f1e4..97676991043b7ca906219f4735df2c8bda0fc71b 100644 (file)
@@ -80,6 +80,11 @@ class grade_report_grader extends grade_report {
      */
     var $rowcount = 0;
 
+    /** 
+     * Capability check caching
+     * */
+    var $canviewhidden;
+
     /**
      * Constructor. Sets local copies of user preferences and initialises grade_tree.
      * @param int $courseid
@@ -92,6 +97,8 @@ class grade_report_grader extends grade_report {
         global $CFG;
         parent::grade_report($courseid, $gpr, $context, $page);
 
+        $this->canviewhidden = has_capability('moodle/grade:viewhidden', get_context_instance(CONTEXT_COURSE, $this->course->id));
+
         // load collapsed settings for this report
         if ($collapsed = get_user_preferences('grade_report_grader_collapsed_categories')) {
             $this->collapsed = unserialize($collapsed);
@@ -387,7 +394,9 @@ class grade_report_grader extends grade_report {
             }
         }
 
-        $html .= $this->print_toggle('averages', true);
+        if ($this->canviewhidden) {
+            $html .= $this->print_toggle('averages', true);
+        }
 
         if (has_capability('moodle/grade:viewall', $this->context)
          and has_capability('moodle/site:accessallgroups', $this->context)
@@ -632,11 +641,9 @@ class grade_report_grader extends grade_report {
             $scales_array = get_records_list('scale', 'id', $scales_list);
         }
 
-        $canviewhidden = has_capability('moodle/grade:viewhidden', get_context_instance(CONTEXT_COURSE, $this->course->id));
-
         foreach ($this->users as $userid => $user) {
 
-            if ($canviewhidden) {
+            if ($this->canviewhidden) {
                 $altered = array();
                 $unknown = array();
             } else {
@@ -674,7 +681,7 @@ class grade_report_grader extends grade_report {
 
                 // MDL-11274
                 // Hide grades in the grader report if the current grader doesn't have 'moodle/grade:viewhidden'
-                if (!$canviewhidden and $grade->is_hidden()) {
+                if (!$this->canviewhidden and $grade->is_hidden()) {
                     if (!empty($CFG->grade_hiddenasdate) and !is_null($grade->finalgrade) and !$item->is_category_item() and !$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
                         $studentshtml .= '<td class="cell c'.$columncount++.'">'.userdate($grade->timecreated,get_string('strftimedatetimeshort')).'</td>';
@@ -824,23 +831,17 @@ class grade_report_grader extends grade_report {
     function get_avghtml($grouponly=false) {
         global $CFG, $USER;
 
+        if (!$this->canviewhidden) {
+            // totals might be affected by hiding, if user can not see hidden grades the aggregations might be altered
+            // better not show them at all if user can not see all hideen grades
+            return;
+        }
+
         $averagesdisplaytype   = $this->get_pref('averagesdisplaytype');
         $averagesdecimalpoints = $this->get_pref('averagesdecimalpoints');
         $meanselection         = $this->get_pref('meanselection');
         $shownumberofgrades    = $this->get_pref('shownumberofgrades');
 
-        $canviewhidden = has_capability('moodle/grade:viewhidden', get_context_instance(CONTEXT_COURSE, $this->course->id));
-
-        if ($canviewhidden) {
-            $hidingsql1 = "";
-            $hidingsql2 = "";
-
-        } else {
-            $now = round(time(), -2); //100 sec gradularity, we need some db caching speedup here
-            $hidingsql1 = "AND g.hidden!=1 AND (g.hidden=0 OR g.hidden<$now)";
-            //$hidingsql2 = "OR (g.hidden!=1 AND (g.hidden=0 OR g.hidden<$now))";
-        }
-
         $avghtml = '';
         $avgcssclass = 'avg';
 
@@ -872,7 +873,6 @@ class grade_report_grader extends grade_report {
                      {$CFG->prefix}user u ON g.userid = u.id
                      $groupsql
                 WHERE gi.courseid = $this->courseid
-                     $hidingsql1
                      $groupwheresql
                      AND g.userid IN (
                         SELECT DISTINCT(u.id)
@@ -896,24 +896,15 @@ class grade_report_grader extends grade_report {
             foreach ($this->gtree->items as $itemid=>$unused) {
                 $item =& $this->gtree->items[$itemid];
 
-                // If the user shouldn't see this grade_item, hide the average as well
-                // MDL-11576 If any of the grades are hidden and the user doesn't have permission to view them, hide average as well
-                if (!$canviewhidden and $item->is_hidden()) {
-                    $avghtml .= '<td class="cell c' . $columncount++.'"> - </td>';
-                    continue;
-                }
-
                 if (empty($sum_array[$item->id])) {
                     $sum_array[$item->id] = 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)
-                // optionally plus number of hidden grades
                 $SQL = "SELECT COUNT(*) AS count FROM {$CFG->prefix}user u
                          WHERE u.id NOT IN
                            (SELECT userid FROM {$CFG->prefix}grade_grades g
-                             WHERE g.itemid = $item->id AND
-                               (g.finalgrade IS NOT NULL $hidingsql1)
+                             WHERE g.itemid = $item->id AND g.finalgrade IS NOT NULL
                            )
                            AND u.id IN (
                              SELECT DISTINCT(u.id)
index d2add924a5a077ad9301e8120a876155b95009f7..ba7817d6312999feb923c8dbe339865385d330e8 100644 (file)
@@ -47,6 +47,8 @@ class grader_report_preferences_form extends moodleform {
         $stryes                 = get_string('yes');
         $strno                  = get_string('no');
 
+        $canviewhidden = has_capability('moodle/grade:viewhidden', $context);
+
 
         $checkbox_default = array(GRADE_REPORT_PREFERENCE_DEFAULT => '*default*', 0 => $strno, 1 => $stryes);
 
@@ -64,11 +66,14 @@ class grader_report_preferences_form extends moodleform {
                                                          GRADE_REPORT_AGGREGATION_VIEW_GRADES_ONLY => get_string('gradesonly', 'grades')));
 
 
-            $preferences['prefshow'] = array('showcalculations'  => $checkbox_default,
-                                             'showeyecons'       => $checkbox_default,
-                                             'showaverages'      => $checkbox_default,
-                                             'showgroups'        => $checkbox_default,
-                                             'showlocks'         => $checkbox_default);
+            $preferences['prefshow'] = array();
+            $preferences['prefshow']['showcalculations']  = $checkbox_default;
+            $preferences['prefshow']['showeyecons']       = $checkbox_default;
+            if ($canviewhidden) {
+                $preferences['prefshow']['showaverages']  = $checkbox_default;
+            }
+            $preferences['prefshow']['showgroups']        = $checkbox_default;
+            $preferences['prefshow']['showlocks']         = $checkbox_default;
 
             $preferences['prefrows'] = array(
                         'rangesdisplaytype'      => array(GRADE_REPORT_PREFERENCE_DEFAULT => '*default*',
@@ -78,19 +83,24 @@ class grader_report_preferences_form extends moodleform {
                                                           GRADE_DISPLAY_TYPE_LETTER => get_string('letter', 'grades')),
                         'rangesdecimalpoints'    => array(GRADE_REPORT_PREFERENCE_DEFAULT => '*default*',
                                                           GRADE_REPORT_PREFERENCE_INHERIT => get_string('inherit', 'grades'),
-                                                          0=>0, 1=>1, 2=>2, 3=>3, 4=>4, 5=>5),
-                        'averagesdisplaytype'    => array(GRADE_REPORT_PREFERENCE_DEFAULT => '*default*',
-                                                          GRADE_REPORT_PREFERENCE_INHERIT => get_string('inherit', 'grades'),
-                                                          GRADE_DISPLAY_TYPE_REAL => get_string('real', 'grades'),
-                                                          GRADE_DISPLAY_TYPE_PERCENTAGE => get_string('percentage', 'grades'),
-                                                          GRADE_DISPLAY_TYPE_LETTER => get_string('letter', 'grades')),
-                        'averagesdecimalpoints'  => array(GRADE_REPORT_PREFERENCE_DEFAULT => '*default*',
-                                                          GRADE_REPORT_PREFERENCE_INHERIT => get_string('inherit', 'grades'),
-                                                          0=>0, 1=>1, 2=>2, 3=>3, 4=>4, 5=>5),
-                        'meanselection'          => array(GRADE_REPORT_PREFERENCE_DEFAULT => '*default*',
-                                                          GRADE_REPORT_MEAN_ALL => get_string('meanall', 'grades'),
-                                                          GRADE_REPORT_MEAN_GRADED => get_string('meangraded', 'grades')));
-            $advanced = array_merge($advanced, array('rangesdisplaytype', 'rangesdecimalpoints', 'averagesdisplaytype', 'averagesdecimalpoints'));
+                                                          0=>0, 1=>1, 2=>2, 3=>3, 4=>4, 5=>5));
+            $advanced = array_merge($advanced, array('rangesdisplaytype', 'rangesdecimalpoints'));
+
+            if ($canviewhidden) {
+                $preferences['prefrows']['averagesdisplaytype'] = array(GRADE_REPORT_PREFERENCE_DEFAULT => '*default*',
+                                                                        GRADE_REPORT_PREFERENCE_INHERIT => get_string('inherit', 'grades'),
+                                                                        GRADE_DISPLAY_TYPE_REAL => get_string('real', 'grades'),
+                                                                        GRADE_DISPLAY_TYPE_PERCENTAGE => get_string('percentage', 'grades'),
+                                                                        GRADE_DISPLAY_TYPE_LETTER => get_string('letter', 'grades'));
+                $preferences['prefrows']['averagesdecimalpoints'] = array(GRADE_REPORT_PREFERENCE_DEFAULT => '*default*',
+                                                                          GRADE_REPORT_PREFERENCE_INHERIT => get_string('inherit', 'grades'),
+                                                                          0=>0, 1=>1, 2=>2, 3=>3, 4=>4, 5=>5);
+                $preferences['prefrows']['meanselection']  = array(GRADE_REPORT_PREFERENCE_DEFAULT => '*default*',
+                                                                   GRADE_REPORT_MEAN_ALL => get_string('meanall', 'grades'),
+                                                                   GRADE_REPORT_MEAN_GRADED => get_string('meangraded', 'grades'));
+
+                $advanced = array_merge($advanced, array('averagesdisplaytype', 'averagesdecimalpoints'));
+            }
         }
 
         // quickgrading and quickfeedback are conditional on grade:edit capability
@@ -112,7 +122,9 @@ class grader_report_preferences_form extends moodleform {
             $preferences['prefshow']['showactivityicons'] = $checkbox_default;
             $preferences['prefshow']['showranges'] = $checkbox_default;
 
-            $preferences['prefrows']['shownumberofgrades'] = $checkbox_default;
+            if ($canviewhidden) {
+                $preferences['prefrows']['shownumberofgrades'] = $checkbox_default;
+            }
 
             $advanced = array_merge($advanced, array('aggregationposition'));
         }