MDL-15050 Grades entered/updated through grader report now get correctly displayed...
authorNicolas Connault <nicolasconnault@gmail.com>
Tue, 27 Oct 2009 12:37:15 +0000 (12:37 +0000)
committerNicolas Connault <nicolasconnault@gmail.com>
Tue, 27 Oct 2009 12:37:15 +0000 (12:37 +0000)
mod/assignment/lib.php
mod/data/lib.php
mod/forum/lib.php
mod/glossary/lib.php
mod/lesson/lib.php
mod/quiz/lib.php
mod/scorm/lib.php

index d090795..2094b42 100644 (file)
@@ -1877,18 +1877,15 @@ class assignment_base {
      * Return an outline of the user's interaction with the assignment
      *
      * The default method prints the grade and timemodified
-     * @param $user object
+     * @param $grade object
      * @return object with properties ->info and ->time
      */
-    function user_outline($user) {
-        if ($submission = $this->get_submission($user->id)) {
+    function user_outline($grade) {
 
-            $result = new object();
-            $result->info = get_string('grade').': '.$this->display_grade($submission->grade);
-            $result->time = $submission->timemodified;
-            return $result;
-        }
-        return NULL;
+        $result = new object();
+        $result->info = get_string('grade').': '.$grade->str_long_grade;
+        $result->time = $grade->dategraded;
+        return $result;
     }
 
     /**
@@ -1896,8 +1893,15 @@ class assignment_base {
      *
      * @param $user object
      */
-    function user_complete($user) {
+    function user_complete($user, $grade=null) {
         global $OUTPUT;
+        if ($grade) {
+            echo $OUTPUT->container(get_string('grade').': '.$grade->str_long_grade);
+            if ($grade->str_feedback) {
+                echo $OUTPUT->container(get_string('feedback').': '.$grade->str_feedback);
+            }
+        }
+
         if ($submission = $this->get_submission($user->id)) {
 
             $fs = get_file_storage();
@@ -1919,11 +1923,7 @@ class assignment_base {
 
             echo '<br />';
 
-            if (empty($submission->timemarked)) {
-                print_string("notgradedyet", "assignment");
-            } else {
-                $this->view_feedback($submission);
-            }
+            $this->view_feedback($submission);
 
             echo $OUTPUT->box_end();
 
@@ -2203,10 +2203,16 @@ function assignment_add_instance($assignment) {
 function assignment_user_outline($course, $user, $mod, $assignment) {
     global $CFG;
 
+    require_once("$CFG->libdir/gradelib.php");
     require_once("$CFG->dirroot/mod/assignment/type/$assignment->assignmenttype/assignment.class.php");
     $assignmentclass = "assignment_$assignment->assignmenttype";
     $ass = new $assignmentclass($mod->id, $assignment, $mod, $course);
-    return $ass->user_outline($user);
+    $grades = grade_get_grades($course->id, 'mod', 'assignment', $assignment->id, $user->id);
+    if (!empty($grades->items[0]->grades)) {
+        return $ass->user_outline(reset($grades->items[0]->grades));
+    } else {
+        return null;
+    }
 }
 
 /**
@@ -2217,10 +2223,17 @@ function assignment_user_outline($course, $user, $mod, $assignment) {
 function assignment_user_complete($course, $user, $mod, $assignment) {
     global $CFG;
 
+    require_once("$CFG->libdir/gradelib.php");
     require_once("$CFG->dirroot/mod/assignment/type/$assignment->assignmenttype/assignment.class.php");
     $assignmentclass = "assignment_$assignment->assignmenttype";
     $ass = new $assignmentclass($mod->id, $assignment, $mod, $course);
-    return $ass->user_complete($user);
+    $grades = grade_get_grades($course->id, 'mod', 'assignment', $assignment->id, $user->id);
+    if (empty($grades->items[0]->grades)) {
+        $grade = false;
+    } else {
+        $grade = reset($grades->items[0]->grades);
+    }
+    return $ass->user_complete($user, $grade);
 }
 
 /**
@@ -3487,4 +3500,4 @@ function assignment_extend_settings_navigation($navnode, $module) {
             $navnode->remove_child($assignmentnodekey);
         }
     }
-}
\ No newline at end of file
+}
index 2df18f3..3dbda9a 100755 (executable)
@@ -931,7 +931,16 @@ function data_delete_instance($id) {    // takes the dataid
  * @return object|null
  */
 function data_user_outline($course, $user, $mod, $data) {
-    global $DB;
+    global $DB, $CFG;
+    require_once("$CFG->libdir/gradelib.php");
+
+    $grades = grade_get_grades($course->id, 'mod', 'data', $data->id, $user->id);
+    if (empty($grades->items[0]->grades)) {
+        $grade = false;
+    } else {
+        $grade = reset($grades->items[0]->grades);
+    }
+
 
     if ($countrecords = $DB->count_records('data_records', array('dataid'=>$data->id, 'userid'=>$user->id))) {
         $result = new object();
@@ -940,6 +949,14 @@ function data_user_outline($course, $user, $mod, $data) {
                                               WHERE dataid = ? AND userid = ?
                                            ORDER BY timemodified DESC', array($data->id, $user->id), true);
         $result->time = $lastrecord->timemodified;
+        if ($grade) {
+            $result->info .= ', ' . get_string('grade') . ': ' . $grade->str_long_grade;
+        }
+        return $result;
+    } else if ($grade) {
+        $result = new object();
+        $result->info = get_string('grade') . ': ' . $grade->str_long_grade;
+        $result->time = $grade->dategraded;
         return $result;
     }
     return NULL;
@@ -955,7 +972,17 @@ function data_user_outline($course, $user, $mod, $data) {
  * @param object $data
  */
 function data_user_complete($course, $user, $mod, $data) {
-    global $DB;
+    global $DB, $CFG, $OUTPUT;
+    require_once("$CFG->libdir/gradelib.php");
+
+    $grades = grade_get_grades($course->id, 'mod', 'data', $data->id, $user->id);
+    if (!empty($grades->items[0]->grades)) {
+        $grade = reset($grades->items[0]->grades);
+        echo $OUTPUT->container(get_string('grade').': '.$grade->str_long_grade);
+        if ($grade->str_feedback) {
+            echo $OUTPUT->container(get_string('feedback').': '.$grade->str_feedback);
+        }
+    }
 
     if ($records = $DB->get_records('data_records', array('dataid'=>$data->id,'userid'=>$user->id), 'timemodified DESC')) {
         data_print_template('singletemplate', $records, $data);
@@ -3272,4 +3299,4 @@ function data_extend_settings_navigation($settings, $module) {
     if (has_capability('moodle/course:manageactivities', $PAGE->cm->context)) {
         $datanav->add(get_string('updatethis', '', get_string('modulename', 'choice')), new moodle_url($CFG->wwwroot.'/course/mod.php', array('update' => $PAGE->cm->id, 'return' => true, 'sesskey' => sesskey())));
     }
-}
\ No newline at end of file
+}
index b10bf07..decddb6 100644 (file)
@@ -1094,13 +1094,30 @@ function forum_make_mail_html($course, $cm, $forum, $discussion, $post, $userfro
  * @return object A standard object with 2 variables: info (number of posts for this user) and time (last modified)
  */
 function forum_user_outline($course, $user, $mod, $forum) {
-    if ($count = forum_count_user_posts($forum->id, $user->id)) {
-        if ($count->postcount > 0) {
-            $result = new object();
-            $result->info = get_string("numposts", "forum", $count->postcount);
-            $result->time = $count->lastpost;
-            return $result;
+    global $CFG;
+    require_once("$CFG->libdir/gradelib.php");
+    $grades = grade_get_grades($course->id, 'mod', 'forum', $forum->id, $user->id);
+    if (empty($grades->items[0]->grades)) {
+        $grade = false;
+    } else {
+        $grade = reset($grades->items[0]->grades);
+    }
+
+    $count = forum_count_user_posts($forum->id, $user->id);
+
+    if ($count && $count->postcount > 0) {
+        $result = new object();
+        $result->info = get_string("numposts", "forum", $count->postcount);
+        $result->time = $count->lastpost;
+        if ($grade) {
+            $result->info .= ', ' . get_string('grade') . ': ' . $grade->str_long_grade;
         }
+        return $result;
+    } else if ($grade) {
+        $result = new object();
+        $result->info = get_string('grade') . ': ' . $grade->str_long_grade;
+        $result->time = $grade->dategraded;
+        return $result;
     }
     return NULL;
 }
@@ -1115,7 +1132,17 @@ function forum_user_outline($course, $user, $mod, $forum) {
  * @param object $forum
  */
 function forum_user_complete($course, $user, $mod, $forum) {
-    global $CFG,$USER;
+    global $CFG,$USER, $OUTPUT;
+    require_once("$CFG->libdir/gradelib.php");
+
+    $grades = grade_get_grades($course->id, 'mod', 'forum', $forum->id, $user->id);
+    if (!empty($grades->items[0]->grades)) {
+        $grade = reset($grades->items[0]->grades);
+        echo $OUTPUT->container(get_string('grade').': '.$grade->str_long_grade);
+        if ($grade->str_feedback) {
+            echo $OUTPUT->container(get_string('feedback').': '.$grade->str_feedback);
+        }
+    }
 
     if ($posts = forum_get_user_posts($forum->id, $user->id)) {
 
index 690ec05..3829680 100644 (file)
@@ -228,6 +228,15 @@ function glossary_delete_instance($id) {
  * @return object|null
  */
 function glossary_user_outline($course, $user, $mod, $glossary) {
+    global $CFG;
+
+    require_once("$CFG->libdir/gradelib.php");
+    $grades = grade_get_grades($course->id, 'mod', 'glossary', $glossary->id, $user->id);
+    if (empty($grades->items[0]->grades)) {
+        $grade = false;
+    } else {
+        $grade = reset($grades->items[0]->grades);
+    }
 
     if ($entries = glossary_get_user_entries($glossary->id, $user->id)) {
         $result = new object();
@@ -235,6 +244,15 @@ function glossary_user_outline($course, $user, $mod, $glossary) {
 
         $lastentry = array_pop($entries);
         $result->time = $lastentry->timemodified;
+
+        if ($grade) {
+            $result->info .= ', ' . get_string('grade') . ': ' . $grade->str_long_grade;
+        }
+        return $result;
+    } else if ($grade) {
+        $result = new object();
+        $result->info = get_string('grade') . ': ' . $grade->str_long_grade;
+        $result->time = $grade->dategraded;
         return $result;
     }
     return NULL;
@@ -270,7 +288,17 @@ function glossary_get_user_entries($glossaryid, $userid) {
  * @param object $glossary
  */
 function glossary_user_complete($course, $user, $mod, $glossary) {
-    global $CFG;
+    global $CFG, $OUTPUT;
+    require_once("$CFG->libdir/gradelib.php");
+
+    $grades = grade_get_grades($course->id, 'mod', 'glossary', $glossary->id, $user->id);
+    if (!empty($grades->items[0]->grades)) {
+        $grade = reset($grades->items[0]->grades);
+        echo $OUTPUT->container(get_string('grade').': '.$grade->str_long_grade);
+        if ($grade->str_feedback) {
+            echo $OUTPUT->container(get_string('feedback').': '.$grade->str_feedback);
+        }
+    }
 
     if ($entries = glossary_get_user_entries($glossary->id, $user->id)) {
         echo '<table width="95%" border="0"><tr><td>';
@@ -2926,4 +2954,4 @@ function glossary_extend_settings_navigation($settings, $module) {
     if (has_capability('moodle/course:manageactivities', $PAGE->cm->context)) {
         $glossarynav->add(get_string('updatethis', '', get_string('modulename', 'glossary')), new moodle_url($CFG->wwwroot.'/course/mod.php', array('update' => $PAGE->cm->id, 'return' => true, 'sesskey' => sesskey())));
     }
-}
\ No newline at end of file
+}
index 145fb67..3d181f3 100644 (file)
@@ -181,21 +181,16 @@ function lesson_delete_course($course, $feedback=true) {
 function lesson_user_outline($course, $user, $mod, $lesson) {
     global $DB;
 
-    $params = array ("lessonid" => $lesson->id, "userid" => $user->id);
-    if ($grades = $DB->get_records_select("lesson_grades", "lessonid = :lessonid AND userid = :userid", $params,
-                "grade DESC")) {
-        foreach ($grades as $grade) {
-            $max_grade = number_format($grade->grade * $lesson->grade / 100.0, 1);
-            break;
-        }
-        $return->time = $grade->completed;
-        if ($lesson->retake) {
-            $return->info = get_string("gradeis", "lesson", $max_grade)." (".
-                get_string("attempt", "lesson", count($grades)).")";
-        } else {
-            $return->info = get_string("gradeis", "lesson", $max_grade);
-        }
+    global $CFG;
+    require_once("$CFG->libdir/gradelib.php");
+    $grades = grade_get_grades($course->id, 'mod', 'lesson', $lesson->id, $user->id);
+
+    if (empty($grades->items[0]->grades)) {
+        $return->info = get_string("no")." ".get_string("attempts", "lesson");
     } else {
+        $grade = reset($grades->items[0]->grades);
+        $return->info = get_string("grade") . ': ' . $grade->str_long_grade;
+        $return->time = $grade->dategraded;
         $return->info = get_string("no")." ".get_string("attempts", "lesson");
     }
     return $return;
@@ -213,7 +208,18 @@ function lesson_user_outline($course, $user, $mod, $lesson) {
  * @return bool
  */
 function lesson_user_complete($course, $user, $mod, $lesson) {
-    global $DB, $OUTPUT;
+    global $DB, $OUTPUT, $CFG;
+
+    require_once("$CFG->libdir/gradelib.php");
+
+    $grades = grade_get_grades($course->id, 'mod', 'lesson', $lesson->id, $user->id);
+    if (!empty($grades->items[0]->grades)) {
+        $grade = reset($grades->items[0]->grades);
+        echo $OUTPUT->container(get_string('grade').': '.$grade->str_long_grade);
+        if ($grade->str_feedback) {
+            echo $OUTPUT->container(get_string('feedback').': '.$grade->str_feedback);
+        }
+    }
 
     $params = array ("lessonid" => $lesson->id, "userid" => $user->id);
     if ($attempts = $DB->get_records_select("lesson_attempts", "lessonid = :lessonid AND userid = :userid", $params,
@@ -255,26 +261,8 @@ function lesson_user_complete($course, $user, $mod, $lesson) {
         }
         echo $OUTPUT->table($table);
         echo $OUTPUT->box_end();
-        // also print grade summary
-        $params = array ("lessonid" => $lesson->id, "userid" => $user->id);
-        if ($grades = $DB->get_records_select("lesson_grades", "lessonid = :lessonid AND userid = :userid", $params,
-                    "grade DESC")) {
-            foreach ($grades as $grade) {
-                $max_grade = number_format($grade->grade * $lesson->grade / 100.0, 1);
-                break;
-            }
-            if ($lesson->retake) {
-                echo "<p>".get_string("gradeis", "lesson", $max_grade)." (".
-                    get_string("attempts", "lesson").": ".count($grades).")</p>";
-            } else {
-                echo "<p>".get_string("gradeis", "lesson", $max_grade)."</p>";
-            }
-        }
-    } else {
-        echo get_string("no")." ".get_string("attempts", "lesson");
     }
 
-
     return true;
 }
 
@@ -886,4 +874,4 @@ function lesson_extend_settings_navigation($settings, $module) {
     if (count($lessonnav->children)<1) {
         $settings->remove_child($lessonnavkey);
     }
-}
\ No newline at end of file
+}
index 1997445..d8e59e7 100644 (file)
@@ -225,17 +225,21 @@ function quiz_delete_all_attempts($quiz) {
  * @return object|null
  */
 function quiz_user_outline($course, $user, $mod, $quiz) {
-    global $DB;
-    $grade = quiz_get_best_grade($quiz, $user->id);
-    if (is_null($grade)) {
-        return NULL;
+    global $DB, $CFG;
+    require_once("$CFG->libdir/gradelib.php");
+    $grades = grade_get_grades($course->id, 'mod', 'quiz', $quiz->id, $user->id);
+
+    if (empty($grades->items[0]->grades)) {
+        return null;
+    } else {
+        $grade = reset($grades->items[0]->grades);
     }
 
     $result = new stdClass;
-    $result->info = get_string('grade') . ': ' . $grade . '/' . $quiz->grade;
-    $result->time = $DB->get_field('quiz_attempts', 'MAX(timefinish)', array('userid' => $user->id, 'quiz' => $quiz->id));
+    $result->info = get_string('grade') . ': ' . $grade->str_long_grade;
+    $result->time = $grade->dategraded;
     return $result;
-    }
+}
 
 /**
  * Is this a graded quiz? If this method returns true, you can assume that
@@ -282,12 +286,18 @@ function quiz_get_best_grade($quiz, $userid) {
  * @return bool
  */
 function quiz_user_complete($course, $user, $mod, $quiz) {
-    global $DB;
+    global $DB, $CFG;
+    require_once("$CFG->libdir/gradelib.php");
+    $grades = grade_get_grades($course->id, 'mod', 'quiz', $quiz->id, $user->id);
+    if (!empty($grades->items[0]->grades)) {
+        $grade = reset($grades->items[0]->grades);
+        echo $OUTPUT->container(get_string('grade').': '.$grade->str_long_grade);
+        if ($grade->str_feedback) {
+            echo $OUTPUT->container(get_string('feedback').': '.$grade->str_feedback);
+        }
+    }
 
     if ($attempts = $DB->get_records('quiz_attempts', array('userid' => $user->id, 'quiz' => $quiz->id), 'attempt')) {
-        if (quiz_has_grades($quiz) && $grade = quiz_get_best_grade($quiz, $user->id)) {
-            echo get_string('grade') . ': ' . $grade . '/' . quiz_format_grade($quiz, $quiz->grade) . '<br />';
-        }
         foreach ($attempts as $attempt) {
             echo get_string('attempt', 'quiz').' '.$attempt->attempt.': ';
             if ($attempt->timefinish == 0) {
@@ -1474,4 +1484,4 @@ function quiz_extend_settings_navigation($settings, $module) {
     if (count($quiznav->children)<1) {
         $settings->remove_child($quiznavkey);
     }
-}
\ No newline at end of file
+}
index d082069..b7a9065 100755 (executable)
@@ -286,9 +286,16 @@ function scorm_user_outline($course, $user, $mod, $scorm) {
     global $CFG;
     require_once('locallib.php');
 
-    $return = scorm_grade_user($scorm, $user->id, true);
-
-    return $return;
+    require_once("$CFG->libdir/gradelib.php");
+    $grades = grade_get_grades($course->id, 'mod', 'scorm', $scorm->id, $user->id);
+    if (!empty($grades->items[0]->grades)) {
+        $grade = reset($grades->items[0]->grades);
+        $result = new object();
+        $result->info = get_string('grade') . ': '. $grade->str_long_grade;
+        $result->time = $grade->dategraded;
+        return $result;
+    }
+    return null;
 }
 
 /**
@@ -305,6 +312,7 @@ function scorm_user_outline($course, $user, $mod, $scorm) {
  */
 function scorm_user_complete($course, $user, $mod, $scorm) {
     global $CFG, $DB, $OUTPUT;
+    require_once("$CFG->libdir/gradelib.php");
 
     $liststyle = 'structlist';
     $now = time();
@@ -313,6 +321,15 @@ function scorm_user_complete($course, $user, $mod, $scorm) {
     $sometoreport = false;
     $report = '';
 
+    $grades = grade_get_grades($course->id, 'mod', 'scorm', $scorm->id, $user->id);
+    if (!empty($grades->items[0]->grades)) {
+        $grade = reset($grades->items[0]->grades);
+        echo $OUTPUT->container(get_string('grade').': '.$grade->str_long_grade);
+        if ($grade->str_feedback) {
+            echo $OUTPUT->container(get_string('feedback').': '.$grade->str_feedback);
+        }
+    }
+
     if ($orgs = $DB->get_records('scorm_scoes', array('scorm'=>$scorm->id, 'organization'=>'', 'launch'=>''),'id','id,identifier,title')) {
         if (count($orgs) <= 1) {
             unset($orgs);