Addition of Grade Analysis tables to Administration page; Re-grading of
authorrkingdon <rkingdon>
Wed, 11 Aug 2004 10:23:55 +0000 (10:23 +0000)
committerrkingdon <rkingdon>
Wed, 11 Aug 2004 10:23:55 +0000 (10:23 +0000)
student assessemnts.

mod/exercise/assessments.php
mod/exercise/index.php
mod/exercise/locallib.php

index 6d0e23fabc0a736c48a20d7525efdbdb2ed7e93c..d52a878721c7539f0e2a6030b03993230abb7a4c 100644 (file)
@@ -17,6 +17,7 @@
        listungradedstudentsubmissions (for teachers)
        listungradedstudentassessments (for teachers)
        listteachersubmissions
+    regradestudentassessments (for teachers)
        teacherassessment (for teachers)
     teachertable
        updateassessment
        }
 
 
+       /******************* regrade student assessments ************************************/
+    elseif ($action == 'regradestudentassessments' ) {
+
+               if (!isteacher($course->id)) {
+                       error("Only teachers can look at this page");
+        }
+        // get all the student assessments
+               if ($assessments = exercise_get_teacher_submission_assessments($exercise)) {
+            foreach ($assessments as $studentassessment) {
+                if ($studentassessment->timegraded > 0) {
+                    if (!$submissions = get_records_select("exercise_submissions", 
+                           "userid = $studentassessment->userid AND exerciseid = $exercise->id", "timecreated ASC")) {
+                        error("Regrade student assessments: student submission not found");
+                    }
+                    foreach ($submissions as $submission) { // only the first one is relavant
+                        if (!$teacherassessments = get_records("exercise_assessments", "submissionid", 
+                                    $submission->id, "timecreated ASC")) {
+                            error("Regrade student assessments: teacher assessment(s) not found");
+                        }
+                        foreach ($teacherassessments as $teacherassessment) { // only the first one is relavent
+                            $newgrade = exercise_compare_assessments($exercise, $studentassessment, $teacherassessment);
+                            set_field("exercise_assessments", "gradinggrade", $newgrade, "id", $studentassessment->id);
+                            break;
+                        } 
+                        break;
+                    }
+                }
+            }
+        }
+               redirect("submissions.php?id=$cm->id&action=adminlist");
+       }
+       
+
        /****************** teacher assessment : grading of assessment and submission (from student) ************/
        elseif ($action == 'teacherassessment') {
                
index f5e48ca14d350160f8d4d565a9b1a111aefa7fb7..1a834fd3d043bd883c8071d5b6f74b2cde66c7af 100644 (file)
                         switch ($exercise->phase) {
                             case 1: $phase = get_string("phase1short", "exercise");
                                     break;
-                            case 2: $phase = get_string("phase2short", "exercise")." [".
-                                        get_string("unassessed", "exercise", 
-                                        exercise_count_unassessed_student_submissions($exercise))."]";
+                            case 2: $phase = get_string("phase2short", "exercise");
+                                    if ($num = exercise_count_unassessed_student_submissions($exercise)) {
+                                        $phase .= " [".get_string("unassessed", "exercise", $num)."]";
+                                    }
                                     break;
-                            case 3: $phase = get_string("phase3short", "exercise")." [".
-                                        get_string("unassessed", "exercise", 
-                                        exercise_count_unassessed_student_submissions($exercise))."]";
+                            case 3: $phase = get_string("phase3short", "exercise");
+                                    if ($num = exercise_count_unassessed_student_submissions($exercise)) {
+                                        $phase .= " [".get_string("unassessed", "exercise", $num)."]";
+                                    }
                                     break;
                         }
                                            $table->data[] = array ($exercise->section, $link, $title, $phase, 
index 7edab054b4c29851e1c237291994191efbd6f3f4..107b3a4a0994b6afa0e54e4ae2ac0bdd5ec05a10 100644 (file)
@@ -123,7 +123,7 @@ function exercise_compare_assessments($exercise, $assessment1, $assessment2) {
     // convert to a sensible grade (always out of 100)
     $COMP = (object)$EXERCISE_ASSESSMENT_COMPS[$exercise->assessmentcomps];
     $factor = $COMP->value;
-    $gradinggrade = (($factor - ($sumdiffs / $sumweights)) / $factor) *100;
+    $gradinggrade = (($factor - ($sumdiffs / $sumweights)) / $factor) * 100;
     if ($gradinggrade < 0) {
         $gradinggrade = 0;
     }
@@ -776,11 +776,50 @@ function exercise_list_submissions_for_admin($exercise) {
             }
         }
         if (isset($table->data)) {
-            print_heading(get_string("studentassessments", "exercise", $course->student)." [$nassessments]");
+            if ($groupid) {
+                if (!$group = get_record("groups", "id", $groupid)) {
+                    error("List unassessed student submissions: group not found");
+                }
+                print_heading("$group->name ".get_string("studentassessments", "exercise", $course->student).
+                        " [$nassessments]");
+            } else {
+                print_heading(get_string("studentassessments", "exercise", $course->student)." [$nassessments]");
+            }
             print_table($table);
             echo "<p align=\"center\">".get_string("noteonstudentassessments", "exercise");
             echo "<br />{".get_string("maximumgrade").": $exercise->grade / ".
                 get_string("maximumgrade").": $exercise->gradinggrade}</p>\n";
+            // grading grade analysis
+            unset($table);
+            $table->head = array (get_string("count", "exercise"), get_string("mean", "exercise"),
+                get_string("standarddeviation", "exercise"), get_string("maximum", "exercise"), 
+                get_string("minimum", "exercise"));
+            $table->align = array ("center", "center", "center", "center", "center");
+            $table->size = array ("*", "*", "*", "*", "*");
+            $table->cellpadding = 2;
+            $table->cellspacing = 0;
+            if ($groupid) {
+                $stats = get_record_sql("SELECT COUNT(*) as count, AVG(gradinggrade) AS mean, 
+                        STDDEV(gradinggrade) AS stddev, MIN(gradinggrade) AS min, MAX(gradinggrade) AS max 
+                        FROM {$CFG->prefix}groups_members g, {$CFG->prefix}exercise_assessments a 
+                        WHERE g.groupid = $groupid AND a.userid = g.userid AND a.timegraded > 0 
+                        AND a.exerciseid = $exercise->id");
+            } else { // no group/all participants
+                $stats = get_record_sql("SELECT COUNT(*) as count, AVG(gradinggrade) AS mean, 
+                        STDDEV(gradinggrade) AS stddev, MIN(gradinggrade) AS min, MAX(gradinggrade) AS max 
+                        FROM {$CFG->prefix}exercise_assessments a 
+                        WHERE a.timegraded > 0 AND a.exerciseid = $exercise->id");
+            }   
+            $table->data[] = array($stats->count, number_format($stats->mean * $exercise->gradinggrade / 100.0, 1), 
+                    number_format($stats->stddev * $exercise->gradinggrade / 100.0, 1), 
+                    number_format($stats->max * $exercise->gradinggrade / 100.0, 1), 
+                    number_format($stats->min * $exercise->gradinggrade / 100.0, 1));
+            print_heading(get_string("gradinggrade", "exercise")." ".get_string("analysis", "exercise"));
+            print_table($table);
+            echo "<p align=\"center\"><a href=\"assessments.php?id=$cm->id&action=regradestudentassessments\">".
+                    get_string("regradestudentassessments", "exercise")."</a> ";
+            helpbutton("regrading", get_string("regradestudentassessments", "exercise"), "exercise");
+            echo "</p>\n";
         }
     }
 
@@ -850,12 +889,48 @@ function exercise_list_submissions_for_admin($exercise) {
             }
         }
         if (isset($table->data)) {
-            print_heading(get_string("studentsubmissions", "exercise", $course->student)." [$nsubmissions]",
-                "center");
+            if ($groupid) {
+                if (!$group = get_record("groups", "id", $groupid)) {
+                    error("List unassessed student submissions: group not found");
+                }
+                print_heading("$group->name ".get_string("studentsubmissions", "exercise", $course->student).
+                        " [$nsubmissions]");
+            } else {
+                print_heading(get_string("studentsubmissions", "exercise", $course->student)." [$nsubmissions]",
+                    "center");
+            }
             print_table($table);
             echo "<p align=\"center\">[] - ".get_string("gradeforsubmission", "exercise");
             echo "<br />".get_string("maximumgrade").": $exercise->grade</p>\n";
             echo "<p align=\"center\">".get_string("resubmitnote", "exercise", $course->student)."</p>\n";
+            // grade analysis
+            unset($table);
+            $table->head = array (get_string("count", "exercise"), get_string("mean", "exercise"),
+                get_string("standarddeviation", "exercise"), get_string("maximum", "exercise"), 
+                get_string("minimum", "exercise"));
+            $table->align = array ("center", "center", "center", "center", "center");
+            $table->size = array ("*", "*", "*", "*", "*");
+            $table->cellpadding = 2;
+            $table->cellspacing = 0;
+            if ($groupid) {
+                $stats = get_record_sql("SELECT COUNT(*) as count, AVG(grade) AS mean, 
+                        STDDEV(grade) AS stddev, MIN(grade) AS min, MAX(grade) AS max 
+                        FROM {$CFG->prefix}groups_members g, {$CFG->prefix}exercise_assessments a, 
+                        {$CFG->prefix}exercise_submissions s, {$CFG->prefix}user_teachers t  
+                        WHERE g.groupid = $groupid AND s.userid = g.userid AND a.submissionid = s.id 
+                        AND a.userid = t.userid AND a.exerciseid = $exercise->id");
+            } else { // no group/all participants
+                $stats = get_record_sql("SELECT COUNT(*) as count, AVG(grade) AS mean, 
+                        STDDEV(grade) AS stddev, MIN(grade) AS min, MAX(grade) AS max 
+                        FROM {$CFG->prefix}exercise_assessments a, {$CFG->prefix}user_teachers t 
+                        WHERE a.userid = t.userid AND a.exerciseid = $exercise->id");
+            }   
+            $table->data[] = array($stats->count, number_format($stats->mean * $exercise->grade / 100.0, 1), 
+                    number_format($stats->stddev * $exercise->grade / 100.0, 1), 
+                    number_format($stats->max * $exercise->grade / 100.0, 1), 
+                    number_format($stats->min * $exercise->grade / 100.0, 1));
+            print_heading(get_string("grade")." ".get_string("analysis", "exercise"));
+            print_table($table);
         }
     }
 }
@@ -1064,6 +1139,12 @@ function exercise_list_unassessed_student_submissions($exercise, $user) {
     // get all the submissions, oldest first, youngest last
     // exercise_get_student_submissions is group aware
     $groupid = get_current_group($course->id);
+    if ($groupid) {
+        if (!$group = get_record("groups", "id", $groupid)) {
+            error("List unassessed student submissions: group not found");
+        }
+        print_heading(get_string("studentsubmissionsforassessment", "exercise", $group->name));
+    }
     if ($submissions = exercise_get_student_submissions($exercise, "time", $groupid)) {
         foreach ($submissions as $submission) {
             // only consider "cold" submissions