]> git.mjollnir.org Git - moodle.git/commitdiff
Version 2004081100: auto grading of assessments.
authorrkingdon <rkingdon>
Tue, 7 Sep 2004 16:17:32 +0000 (16:17 +0000)
committerrkingdon <rkingdon>
Tue, 7 Sep 2004 16:17:32 +0000 (16:17 +0000)
13 files changed:
mod/workshop/assessments.php
mod/workshop/backuplib.php
mod/workshop/db/mysql.php
mod/workshop/db/mysql.sql
mod/workshop/index.php
mod/workshop/lib.php
mod/workshop/locallib.php
mod/workshop/mod.html
mod/workshop/restorelib.php
mod/workshop/submissions.php
mod/workshop/upload.php
mod/workshop/version.php
mod/workshop/view.php

index a2b98b7175f117513120fa5662edf80a484aaeae..7caff6ef312de3603fdff02b564fbc0cfbdd75e7 100644 (file)
@@ -3,27 +3,28 @@
 /*************************************************
     ACTIONS handled are:
 
-    addcomment
-    adminconfirmdelete
-    admindelete
-    adminlist
-    agreeassessment
-    assesssubmission
-    displaygradingform
-    editcomment
-    editelements (teachers only)
-    gradeassessment (teachers only)
-    insertcomment
-    insertelements (for teachers)
-    listungradedstudentsubmissions (for teachers)
-    listungradedteachersubmissions (for teachers)
-    listteachersubmissions
-    updateassessment
-    updatecomment
-    updategrading
-    userconfirmdelete
-    userdelete
-    viewassessment
+       addcomment
+       adminconfirmdelete
+       admindelete
+       adminlist
+       agreeassessment
+       assesssubmission
+       displaygradingform
+       editcomment
+       editelements (teachers only)
+    gradeallassessments (teachers only)
+       gradeassessment (teachers only)
+       insertcomment
+       insertelements (for teachers)
+       listungradedstudentsubmissions (for teachers)
+       listungradedteachersubmissions (for teachers)
+       listteachersubmissions
+       updateassessment
+       updatecomment
+       updategrading
+       userconfirmdelete
+       userdelete
+       viewassessment
 
 ************************************************/
 
     require("lib.php"); 
     require("locallib.php");
 
-    optional_variable($id);    // Course Module ID
-    optional_variable($a);    // workshop ID
+       require_variable($id);    // Course Module ID
 
     // get some useful stuff...
-    if ($id) {
-        if (! $cm = get_record("course_modules", "id", $id)) {
-            error("Course Module ID was incorrect");
-        }
-    
-        if (! $course = get_record("course", "id", $cm->course)) {
-            error("Course is misconfigured");
-        }
-    
-        if (! $workshop = get_record("workshop", "id", $cm->instance)) {
-            error("Course module is incorrect");
-        }
-
-    } else {
-        if (! $workshop = get_record("workshop", "id", $a)) {
-            error("Course module is incorrect");
-        }
-        if (! $course = get_record("course", "id", $workshop->course)) {
-            error("Course is misconfigured");
-        }
-        if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $course->id)) {
-            error("Course Module ID was incorrect");
-        }
+    if (! $cm = get_record("course_modules", "id", $id)) {
+        error("Course Module ID was incorrect");
+    }
+    if (! $course = get_record("course", "id", $cm->course)) {
+        error("Course is misconfigured");
+    }
+    if (! $workshop = get_record("workshop", "id", $cm->instance)) {
+        error("Course module is incorrect");
     }
 
     require_login($course->id);
     $strassessments = get_string("assessments", "workshop");
 
     // ... print the header and...
-    print_header("$course->shortname: $workshop->name", "$course->fullname",
-                 "$navigation <A HREF=index.php?id=$course->id>$strworkshops</A> -> 
-                  <A HREF=\"view.php?a=$workshop->id\">$workshop->name</A> -> $strassessments", 
+    print_header_simple("$workshop->name", "",
+                 "<A HREF=index.php?id=$course->id>$strworkshops</A> -> 
+                  <A HREF=\"view.php?id=$cm->id\">$workshop->name</A> -> $strassessments", 
                   "", "", true);
 
-    //...get the action 
-    require_variable($action);
-    
-
-    /*************** add comment to assessment (by author, assessor or teacher) ***************************/
-    if ($action == 'addcomment') {
-        
-        print_heading_with_help(get_string("addacomment", "workshop"), "addingacomment", "workshop");
-        // get assessment record
-        if (!$assessmentid = $_REQUEST['aid']) { // comes from link or hidden form variable
-            error("Assessment id not given");
-            }
-        $assessment = get_record("workshop_assessments", "id", $assessmentid);
-        if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) {
-            error("Submission not found");
-            }
-        ?>
-        <FORM NAME="commentform" ACTION="assessments.php" METHOD="post">
-        <INPUT TYPE="HIDDEN" NAME="action" VALUE="insertcomment">
-        <INPUT TYPE="HIDDEN" NAME="id" VALUE="<?PHP echo $cm->id ?>">
-        <INPUT TYPE="HIDDEN" NAME="aid" VALUE="<?PHP echo $_REQUEST['aid'] ?>">
-        <CENTER>
-        <TABLE CELLPADDING=5 BORDER=1>
-        <?PHP
-
-        // now get the comment
-        echo "<TR valign=top>\n";
-
-        echo "  <TD align=right><P><B>". get_string("comment", "workshop").":</B></P></TD>\n";
-
-        echo "  <TD>\n";
-
-        echo "      <textarea name=\"comments\" rows=5 cols=75 wrap=\"virtual\">\n";
-        echo "</textarea>\n";
-
-        echo "  </TD></TR></TABLE>\n";
-        echo "<INPUT TYPE=submit VALUE=\"".get_string("savemycomment", "workshop")."\">\n";
-        echo "</CENTER></FORM>\n";
-        echo "<P><CENTER><B>".get_string("assessment", "workshop"). "</B></CENTER>\n";
-        workshop_print_assessment($workshop, $assessment);
-        }
-
-
-
-    /******************* admin confirm delete ************************************/
-    elseif ($action == 'adminconfirmdelete' ) {
-
-        if (!isteacher($course->id)) {
-            error("Only teachers can look at this page");
-            }
-        if (empty($_GET['aid'])) {
-            error("Admin confirm delete: assessment id missing");
-            }
-            
-        notice_yesno(get_string("confirmdeletionofthisitem","workshop", get_string("assessment", "workshop")), 
-             "assessments.php?action=admindelete&id=$cm->id&aid=$_GET[aid]", "submissions.php?action=adminlist&id=$cm->id");
-        }
-    
-
-    /******************* admin delete ************************************/
-    elseif ($action == 'admindelete' ) {
-
-        if (!isteacher($course->id)) {
-            error("Only teachers can look at this page");
-            }
-        if (empty($_GET['aid'])) {
-            error("Admin delete: submission id missing");
-            }
-            
-        print_string("deleting", "workshop");
-        // first delete all the associated records...
-        delete_records("workshop_comments", "assessmentid", $_GET['aid']);
-        delete_records("workshop_grades", "assessmentid", $_GET['aid']);
-        // ...now delete the assessment...
-        delete_records("workshop_assessments", "id", $_GET['aid']);
-        
-        print_continue("submissions.php?id=$cm->id&action=adminlist");
-        }
-    
-
-    /*********************** admin list of asssessments (of a submission) (by teachers)**************/
-    elseif ($action == 'adminlist') {
-
-        if (!isteacher($course->id)) {
-            error("Only teachers can look at this page");
-            }
-            
-        if (empty($_GET['sid'])) {
-            error ("Workshop asssessments: adminlist called with no sid");
-            }
-        $submission = get_record("workshop_submissions", "id", $_GET['sid']);
-        workshop_print_assessments_for_admin($workshop, $submission);
-        print_continue("submissions.php?action=adminlist&a=$workshop->id");
-        }
-
-
-    /*********************** admin list of asssessments by a student (used by teachers only )******************/
-    elseif ($action == 'adminlistbystudent') {
-
-        if (!isteacher($course->id)) {
-            error("Only teachers can look at this page");
-            }
-            
-        if (empty($_GET['userid'])) {
-            error ("Workshop asssessments: adminlistbystudent called with no userid");
-            }
-        $user = get_record("user", "id", $_GET['userid']);
-        workshop_print_assessments_by_user_for_admin($workshop, $user);
-        print_continue("submissions.php?action=adminlist&a=$workshop->id");
-        }
-
-
-    /*************** agree (to) assessment (by student) ***************************/
-    elseif ($action == 'agreeassessment') {
-        $timenow = time();
-        // assessment id comes from link or hidden form variable
-        if (!$assessment = get_record("workshop_assessments", "id", $_REQUEST['aid'])) { 
-            error("Assessment : agree assessment failed");
-            }
-        //save time of agreement
-        set_field("workshop_assessments", "timeagreed", $timenow, "id", $assessment->id);
-        echo "<CENTRE><B>".get_string("savedok", "workshop")."</B></CENTER><BR>\n";
-            
-        add_to_log($course->id, "workshop", "agree", "assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id", "$assessment->id");
-        print_continue("view.php?id=$cm->id");
-        }
-
-
-
-    /*************** Assess submission (by teacher or student) ***************************/
-    elseif ($action == 'assesssubmission') {
-
-        require_variable($sid);
-        
-        optional_variable($allowcomments);
-        if (!isset($allowcomments)) {
-            $allowcomments = false;
-            }
-    
-        if (! $submission = get_record("workshop_submissions", "id", $sid)) {
-            error("Assess submission is misconfigured - no submission record!");
-            }
-        
-        // there can be an assessment record (for teacher submissions), if there isn't...
-        if (!$assessment = get_record("workshop_assessments", "submissionid", $submission->id, "userid", 
+       //...get the action 
+       require_variable($action);
+       
+
+       /*************** add comment to assessment (by author, assessor or teacher) ***************************/
+       if ($action == 'addcomment') {
+               
+               print_heading_with_help(get_string("addacomment", "workshop"), "addingacomment", "workshop");
+               // get assessment record
+               if (!$assessmentid = $_REQUEST['aid']) { // comes from link or hidden form variable
+                       error("Assessment id not given");
+                       }
+               $assessment = get_record("workshop_assessments", "id", $assessmentid);
+               if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) {
+                       error("Submission not found");
+                       }
+               ?>
+               <FORM NAME="commentform" ACTION="assessments.php" METHOD="post">
+               <INPUT TYPE="HIDDEN" NAME="action" VALUE="insertcomment">
+               <INPUT TYPE="HIDDEN" NAME="id" VALUE="<?PHP echo $cm->id ?>">
+               <INPUT TYPE="HIDDEN" NAME="aid" VALUE="<?PHP echo $_REQUEST['aid'] ?>">
+               <CENTER>
+               <TABLE CELLPADDING=5 BORDER=1>
+               <?PHP
+
+               // now get the comment
+               echo "<TR valign=top>\n";\r
+               echo "  <TD align=right><P><B>". get_string("comment", "workshop").":</B></P></TD>\n";\r
+               echo "  <TD>\n";\r
+               echo "          <textarea name=\"comments\" rows=5 cols=75 wrap=\"virtual\">\n";
+               echo "</textarea>\n";\r
+               echo "  </TD></TR></TABLE>\n";
+               echo "<INPUT TYPE=submit VALUE=\"".get_string("savemycomment", "workshop")."\">\n";
+               echo "</CENTER></FORM>\n";
+               echo "<P><CENTER><B>".get_string("assessment", "workshop"). "</B></CENTER>\n";
+               workshop_print_assessment($workshop, $assessment);
+               }\r
+
+
+       /******************* admin confirm delete ************************************/
+       elseif ($action == 'adminconfirmdelete' ) {
+
+               if (!isteacher($course->id)) {
+                       error("Only teachers can look at this page");
+                       }
+               if (empty($_GET['aid'])) {
+                       error("Admin confirm delete: assessment id missing");
+                       }
+                       
+               notice_yesno(get_string("confirmdeletionofthisitem","workshop", get_string("assessment", "workshop")), 
+                        "assessments.php?action=admindelete&id=$cm->id&aid=$_GET[aid]", "submissions.php?action=adminlist&id=$cm->id");
+               }
+       
+
+       /******************* admin delete ************************************/
+       elseif ($action == 'admindelete' ) {
+
+               if (!isteacher($course->id)) {
+                       error("Only teachers can look at this page");
+                       }
+               if (empty($_GET['aid'])) {
+                       error("Admin delete: submission id missing");
+                       }
+                       
+               print_string("deleting", "workshop");
+               // first delete all the associated records...
+               delete_records("workshop_comments", "assessmentid", $_GET['aid']);
+               delete_records("workshop_grades", "assessmentid", $_GET['aid']);
+               // ...now delete the assessment...
+               delete_records("workshop_assessments", "id", $_GET['aid']);
+               
+               print_continue("submissions.php?id=$cm->id&action=adminlist");
+               }
+       
+
+       /*********************** admin list of asssessments (of a submission) (by teachers)**************/
+       elseif ($action == 'adminlist') {
+
+               if (!isteacher($course->id)) {
+                       error("Only teachers can look at this page");
+                       }
+                       
+               if (empty($_GET['sid'])) {
+                       error ("Workshop asssessments: adminlist called with no sid");
+                       }
+               $submission = get_record("workshop_submissions", "id", $_GET['sid']);
+               workshop_print_assessments_for_admin($workshop, $submission);
+               print_continue("submissions.php?action=adminlist&id=$cm->id");
+               }
+
+
+       /*********************** admin list of asssessments by a student (used by teachers only )******************/
+       elseif ($action == 'adminlistbystudent') {
+
+               if (!isteacher($course->id)) {
+                       error("Only teachers can look at this page");
+                       }
+                       
+               if (empty($_GET['userid'])) {
+                       error ("Workshop asssessments: adminlistbystudent called with no userid");
+                       }
+               $user = get_record("user", "id", $_GET['userid']);
+               workshop_print_assessments_by_user_for_admin($workshop, $user);
+               print_continue("submissions.php?action=adminlist&id=$cm->id");
+               }
+
+
+       /*************** agree (to) assessment (by student) ***************************/
+       elseif ($action == 'agreeassessment') {
+               $timenow = time();
+               // assessment id comes from link or hidden form variable
+               if (!$assessment = get_record("workshop_assessments", "id", $_REQUEST['aid'])) { 
+                       error("Assessment : agree assessment failed");
+                       }
+               //save time of agreement
+               set_field("workshop_assessments", "timeagreed", $timenow, "id", $assessment->id);
+               echo "<CENTRE><B>".get_string("savedok", "workshop")."</B></CENTER><BR>\n";
+                       
+               add_to_log($course->id, "workshop", "agree", "assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id", "$assessment->id");
+               print_continue("view.php?id=$cm->id");
+               }\r
+
+
+       /*************** Assess submission (by teacher or student) ***************************/
+       elseif ($action == 'assesssubmission') {
+
+               require_variable($sid);
+               
+               optional_variable($allowcomments);
+               if (!isset($allowcomments)) {
+                       $allowcomments = false;
+                       }
+       
+               if (! $submission = get_record("workshop_submissions", "id", $sid)) {
+                       error("Assess submission is misconfigured - no submission record!");
+                       }
+               
+               // there can be an assessment record (for teacher submissions), if there isn't...
+               if (!$assessment = get_record("workshop_assessments", "submissionid", $submission->id, "userid", 
                     $USER->id)) {
-            $yearfromnow = time() + 365 * 86400;
-            // ...create one and set timecreated way in the future, this is reset when record is updated
-            $assessment->workshopid = $workshop->id;
-            $assessment->submissionid = $submission->id;
-            $assessment->userid = $USER->id;
-            $assessment->grade = -1; // set impossible grade
-            $assessment->timecreated = $yearfromnow;
-            $assessment->timegraded = 0;
-            $assessment->timeagreed = 0;
-            $assessment->resubmission = 0;
-            if (!$assessment->id = insert_record("workshop_assessments", $assessment)) {
-                error("Could not insert workshop assessment!");
-                }
-            }
-        
-        print_heading_with_help(get_string("assessthissubmission", "workshop"), "grading", "workshop");
-        
-        // show assessment and allow changes
-        workshop_print_assessment($workshop, $assessment, true, $allowcomments, $_SERVER["HTTP_REFERER"]);
-        }
-
-
-    /*************** display grading form (viewed by student) *********************************/
-    elseif ($action == 'displaygradingform') {
-
-    print_heading_with_help(get_string("specimenassessmentform", "workshop"), "specimen", "workshop");
-    
-    workshop_print_assessment($workshop); // called with no assessment
-    print_continue("view.php?a=$workshop->id");
-    }
-
-
-
-    /*************** edit comment on assessment (by author, assessor or teacher) ***************************/
-    elseif ($action == 'editcomment') {
-        
-        print_heading_with_help(get_string("editacomment", "workshop"), "editingacomment", "workshop");
-        // get the comment record...
-        if (!$comment = get_record("workshop_comments", "id", $_GET['cid'])) {
-            error("Edit Comment: Comment not found");
-            }
-        if (!$assessment = get_record("workshop_assessments", "id", $comment->assessmentid)) {
-            error("Edit Comment: Assessment not found");
-            }
-        if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) {
-            error("Edit Comment: Submission not found");
-            }
-        ?>
-        <FORM NAME="gradingform" ACTION="assessments.php" METHOD="post">
-        <INPUT TYPE="HIDDEN" NAME="action" VALUE="updatecomment">
-        <INPUT TYPE="HIDDEN" NAME="id" VALUE="<?PHP echo $cm->id ?>">
-        <INPUT TYPE="HIDDEN" NAME="cid" VALUE="<?PHP echo $_GET['cid'] ?>">
-        <CENTER>
-        <TABLE CELLPADDING=5 BORDER=1>
-        <?PHP
-
-        // now show the comment
-        echo "<TR valign=top>\n";
-        echo "  <TD align=right><P><B>". get_string("comment", "workshop").":</B></P></TD>\n";
-        echo "  <TD>\n";
-        echo "      <textarea name=\"comments\" rows=5 cols=75 wrap=\"virtual\">\n";
-        if (isset($comment->comments)) {
-            echo $comment->comments;
-            }
-        echo "      </textarea>\n";
-        echo "  </TD></TR></TABLE>\n";
-        echo "<INPUT TYPE=submit VALUE=\"".get_string("savemycomment", "workshop")."\">\n";
-        echo "</CENTER></FORM>\n";
-        workshop_print_assessment($workshop, $assessment);
-        }
-
-
-    /*********************** edit assessment elements (for teachers) ***********************/
-    elseif ($action == 'editelements') {
-
-        if (!isteacher($course->id)) {
-            error("Only teachers can look at this page");
-            }
-
-        $count = count_records("workshop_grades", "workshopid", $workshop->id);
-        if ($workshop->phase > 1 and $count) {
-            notify(get_string("warningonamendingelements", "workshop"));
-            }
-        // set up heading, form and table
-        print_heading_with_help(get_string("editingassessmentelements", "workshop"), "elements", "workshop");
-        ?>
-        <form name="form" method="post" action="assessments.php">
-        <input type="hidden" name="id" value="<?PHP echo $cm->id ?>">
-        <input type="hidden" name="action" value="insertelements">
-        <CENTER><TABLE cellpadding=5 border=1>
-        <?PHP
-        
-        // get existing elements, if none set up appropriate default ones
-        if ($elementsraw = get_records("workshop_elements", "workshopid", $workshop->id, "elementno ASC" )) {
-            foreach ($elementsraw as $element) {
-                $elements[] = $element;   // to renumber index 0,1,2...
-                }
-            }
-        // check for missing elements (this happens either the first time round or when the number of elements is icreased)
-        for ($i=0; $i<$workshop->nelements; $i++) {
-            if (!isset($elements[$i])) {
-                $elements[$i]->description = '';
-                $elements[$i]->scale =0;
-                $elements[$i]->maxscore = 0;
-                $elements[$i]->weight = 11;
-                }
-            }
+                       $yearfromnow = time() + 365 * 86400;
+                       // ...create one and set timecreated way in the future, this is reset when record is updated
+                       $assessment->workshopid = $workshop->id;
+                       $assessment->submissionid = $submission->id;
+                       $assessment->userid = $USER->id;
+                       $assessment->grade = -1; // set impossible grade
+                       $assessment->timecreated = $yearfromnow;
+                       $assessment->timegraded = 0;
+                       $assessment->timeagreed = 0;
+                       $assessment->resubmission = 0;
+                       if (!$assessment->id = insert_record("workshop_assessments", $assessment)) {
+                               error("Could not insert workshop assessment!");
+                               }
+                       }
+               
+               print_heading_with_help(get_string("assessthissubmission", "workshop"), "grading", "workshop");
+               
+               // show assessment and allow changes
+               workshop_print_assessment($workshop, $assessment, true, $allowcomments, $_SERVER["HTTP_REFERER"]);
+               }
+
+
+       /*************** display grading form (viewed by student) *********************************/
+       elseif ($action == 'displaygradingform') {
+
+           print_heading_with_help(get_string("specimenassessmentform", "workshop"), "specimen", "workshop");
+       
+           workshop_print_assessment($workshop); // called with no assessment
+           print_continue("view.php?id=$cm->id");
+       }
+
+
+       /*************** edit comment on assessment (by author, assessor or teacher) ***************************/
+       elseif ($action == 'editcomment') {
+               
+               print_heading_with_help(get_string("editacomment", "workshop"), "editingacomment", "workshop");
+               // get the comment record...
+               if (!$comment = get_record("workshop_comments", "id", $_GET['cid'])) {
+                       error("Edit Comment: Comment not found");
+                       }
+               if (!$assessment = get_record("workshop_assessments", "id", $comment->assessmentid)) {
+                       error("Edit Comment: Assessment not found");
+                       }
+               if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) {
+                       error("Edit Comment: Submission not found");
+                       }
+               ?>
+               <FORM NAME="gradingform" ACTION="assessments.php" METHOD="post">
+               <INPUT TYPE="HIDDEN" NAME="action" VALUE="updatecomment">
+               <INPUT TYPE="HIDDEN" NAME="id" VALUE="<?PHP echo $cm->id ?>">
+               <INPUT TYPE="HIDDEN" NAME="cid" VALUE="<?PHP echo $_GET['cid'] ?>">
+               <CENTER>
+               <TABLE CELLPADDING=5 BORDER=1>
+               <?PHP
+
+               // now show the comment
+               echo "<TR valign=top>\n";
+               echo "  <TD align=right><P><B>". get_string("comment", "workshop").":</B></P></TD>\n";
+               echo "  <TD>\n";
+               echo "          <textarea name=\"comments\" rows=5 cols=75 wrap=\"virtual\">\n";
+               if (isset($comment->comments)) {
+                       echo $comment->comments;
+                       }
+               echo "      </textarea>\n";
+               echo "  </TD></TR></TABLE>\n";
+               echo "<INPUT TYPE=submit VALUE=\"".get_string("savemycomment", "workshop")."\">\n";
+               echo "</CENTER></FORM>\n";
+               workshop_print_assessment($workshop, $assessment);
+               }
+
+
+       /*********************** edit assessment elements (for teachers) ***********************/
+       elseif ($action == 'editelements') {
+
+               if (!isteacher($course->id)) {
+                       error("Only teachers can look at this page");
+               }
+
+               $count = count_records("workshop_grades", "workshopid", $workshop->id);
+               if ($workshop->phase > 1 and $count) {
+                       notify(get_string("warningonamendingelements", "workshop"));
+               }
+               // set up heading, form and table
+               print_heading_with_help(get_string("editingassessmentelements", "workshop"), "elements", "workshop");
+               ?>
+               <form name="form" method="post" action="assessments.php">
+               <input type="hidden" name="id" value="<?PHP echo $cm->id ?>">
+               <input type="hidden" name="action" value="insertelements">
+               <CENTER><TABLE cellpadding=5 border=1>
+               <?PHP
+               
+               // get existing elements, if none set up appropriate default ones
+               if ($elementsraw = get_records("workshop_elements", "workshopid", $workshop->id, "elementno ASC" )) {
+                       foreach ($elementsraw as $element) {
+                               $elements[] = $element;   // to renumber index 0,1,2...
+                       }
+               }
+               // check for missing elements (this happens either the first time round or when the number of elements is icreased)
+               for ($i=0; $i<$workshop->nelements; $i++) {
+                       if (!isset($elements[$i])) {
+                               $elements[$i]->description = '';
+                               $elements[$i]->scale =0;
+                               $elements[$i]->maxscore = 0;
+                               $elements[$i]->weight = 11;
+                       }
+               }
         
-        switch ($workshop->gradingstrategy) {
-            case 0: // no grading
-                for ($i=0; $i<$workshop->nelements; $i++) {
-                    $iplus1 = $i+1;
-                    echo "<TR valign=top>\n";
-                    echo "  <TD ALIGN=RIGHT><P><B>". get_string("element","workshop")." $iplus1:</B></TD>\n";
-                    echo "<TD><textarea name=\"description[]\" rows=3 cols=75 wrap=\"virtual\">".$elements[$i]->description."</textarea>\n";
-                    echo "  </TD></TR>\n";
-                    echo "<TR valign=top>\n";
-                    echo "  <TD colspan=2 BGCOLOR=\"$THEME->cellheading2\">&nbsp;</TD>\n";
-                    echo "</TR>\n";
-                    }
-                break;
-
-            case 1: // accumulative grading
-                // set up scales name
-                foreach ($WORKSHOP_SCALES as $KEY => $SCALE) {
-                    $SCALES[] = $SCALE['name'];
-                    }
-                for ($i=0; $i<$workshop->nelements; $i++) {
-                    $iplus1 = $i+1;
-                    echo "<TR valign=top>\n";
-                    echo "  <TD ALIGN=RIGHT><P><B>". get_string("element","workshop")." $iplus1:</B></TD>\n";
-                    echo "<TD><textarea name=\"description[]\" rows=3 cols=75 wrap=\"virtual\">".$elements[$i]->description."</textarea>\n";
-                    echo "  </TD></TR>\n";
-                    echo "<TR valign=top>\n";
-                    echo "  <TD align=right><P><B>". get_string("typeofscale", "workshop"). ":</B></P></TD>\n";
-                    echo "<TD valign=\"top\">\n";
-                    choose_from_menu($SCALES, "scale[]", $elements[$i]->scale, "");
-                    if ($elements[$i]->weight == '') { // not set
-                        $elements[$i]->weight = 11; // unity
-                        }
-                    echo "</TR>\n";
-                    echo "<TR valign=top><TD ALIGN=RIGHT><B>".get_string("elementweight", "workshop").":</B></TD><TD>\n";
-                    workshop_choose_from_menu($WORKSHOP_EWEIGHTS, "weight[]", $elements[$i]->weight, "");
-                    echo "      </TD>\n";
-                    echo "</TR>\n";
-                    echo "<TR valign=top>\n";
-                    echo "  <TD colspan=2 BGCOLOR=\"$THEME->cellheading2\">&nbsp;</TD>\n";
-                    echo "</TR>\n";
-                    }
-                break;
-                
-            case 2: // error banded grading
-                for ($i=0; $i<$workshop->nelements; $i++) {
-                    $iplus1 = $i+1;
-                    echo "<TR valign=top>\n";
-                    echo "  <TD ALIGN=RIGHT><P><B>". get_string("element","workshop")." $iplus1:</B></TD>\n";
-                    echo "<TD><textarea name=\"description[$i]\" rows=3 cols=75 wrap=\"virtual\">".$elements[$i]->description."</textarea>\n";
-                    echo "  </TD></TR>\n";
-                    if ($elements[$i]->weight == '') { // not set
-                        $elements[$i]->weight = 11; // unity
-                        }
-                    echo "</TR>\n";
-                    echo "<TR valign=top><TD ALIGN=RIGHT><B>".get_string("elementweight", "workshop").":</B></TD><TD>\n";
-                    workshop_choose_from_menu($WORKSHOP_EWEIGHTS, "weight[]", $elements[$i]->weight, "");
-                    echo "      </TD>\n";
-                    echo "</TR>\n";
-                    echo "<TR valign=top>\n";
-                    echo "  <TD colspan=2 BGCOLOR=\"$THEME->cellheading2\">&nbsp;</TD>\n";
-                    echo "</TR>\n";
-                    }
-                echo "</CENTER></TABLE><BR>\n";
-                echo "<P><CENTER><B>".get_string("gradetable","workshop")."</B></CENTER>\n";
-                echo "<CENTER><TABLE cellpadding=5 border=1><TR><TD ALIGN=\"CENTER\">".
-                    get_string("numberofnegativeresponses", "workshop");
-                echo "</TD><TD>". get_string("suggestedgrade", "workshop")."</TD></TR>\n";
-                for ($j = $workshop->grade; $j >= 0; $j--) {
-                    $numbers[$j] = $j;
-                    }
-                for ($i=0; $i<=$workshop->nelements; $i++) {
-                    echo "<TR><TD ALIGN=\"CENTER\">$i</TD><TD ALIGN=\"CENTER\">";
-                    if (!isset($elements[$i])) {  // the "last one" will be!
-                        $elements[$i]->description = "";
-                        $elements[$i]->maxscore = 0;
-                        }
-                    choose_from_menu($numbers, "maxscore[$i]", $elements[$i]->maxscore, "");
-                    echo "</TD></TR>\n";
-                    }
-                echo "</TABLE></CENTER>\n";
-                break;
-                
-            case 3: // criterion grading
-                for ($j = 100; $j >= 0; $j--) {
-                    $numbers[$j] = $j;
-                    }
-                for ($i=0; $i<$workshop->nelements; $i++) {
-                    $iplus1 = $i+1;
-                    echo "<TR valign=top>\n";
-                    echo "  <TD ALIGN=RIGHT><P><B>". get_string("criterion","workshop")." $iplus1:</B></TD>\n";
-                    echo "<TD><textarea name=\"description[$i]\" rows=3 cols=75 wrap=\"virtual\">".$elements[$i]->description."</textarea>\n";
-                    echo "  </TD></TR>\n";
-                    echo "<TR><TD><B>". get_string("suggestedgrade", "workshop").":</B></TD><TD>\n";
-                    choose_from_menu($numbers, "maxscore[$i]", $elements[$i]->maxscore, "");
-                    echo "</TD></TR>\n";
-                    echo "<TR valign=top>\n";
-                    echo "  <TD colspan=2 BGCOLOR=\"$THEME->cellheading2\">&nbsp;</TD>\n";
-                    echo "</TR>\n";
-                    }
-                break;
-
-            case 4: // rubric
-                for ($j = 100; $j >= 0; $j--) {
-                    $numbers[$j] = $j;
-                    }
-                if ($rubricsraw = get_records("workshop_rubrics", "workshopid", $workshop->id)) {
-                    foreach ($rubricsraw as $rubric) {
-                        $rubrics[$rubric->elementno][$rubric->rubricno] = $rubric->description;   // reindex 0,1,2...
-                        }
-                    }
-                for ($i=0; $i<$workshop->nelements; $i++) {
-                    $iplus1 = $i+1;
-                    echo "<TR valign=top>\n";
-                    echo "  <TD ALIGN=RIGHT><P><B>". get_string("element","workshop")." $iplus1:</B></TD>\n";
-
-                    echo "<TD><textarea name=\"description[$i]\" rows=3 cols=75 wrap=\"virtual\">".$elements[$i]->description."</textarea>\n";
-
-                    echo "  </TD></TR>\n";
-                    echo "<TR valign=top><TD ALIGN=RIGHT><B>".get_string("elementweight", "workshop").":</B></TD><TD>\n";
-                    workshop_choose_from_menu($WORKSHOP_EWEIGHTS, "weight[]", $elements[$i]->weight, "");
-                    echo "      </TD>\n";
-                    echo "</TR>\n";
-
-                    for ($j=0; $j<5; $j++) {
-                        $jplus1 = $j+1;
-                        if (empty($rubrics[$i][$j])) {
-                            $rubrics[$i][$j] = "";
-                            }
-                        echo "<TR valign=top>\n";
-
-                        echo "  <TD ALIGN=RIGHT><P><B>". get_string("grade","workshop")." $j:</B></TD>\n";
-
-                        echo "<TD><textarea name=\"rubric[$i][$j]\" rows=3 cols=75 wrap=\"virtual\">".$rubrics[$i][$j]."</textarea>\n";
-
-                        echo "  </TD></TR>\n";
-                        }
-                    echo "<TR valign=top>\n";
-
-                    echo "  <TD colspan=2 BGCOLOR=\"$THEME->cellheading2\">&nbsp;</TD>\n";
-
-                    echo "</TR>\n";
-                    }
-                break;
-            }
-        // close table and form
-
-        ?>
-        </TABLE>
-        <input type="submit" value="<?php  print_string("savechanges") ?>">
-        <input type="submit" name=cancel value="<?php  print_string("cancel") ?>">
-        </CENTER>
-
-        </FORM>
-        <?PHP
-        }
-    
-    
-    /*************** grade (student's) assessment (by teacher) ***************************/
-    elseif ($action == 'gradeassessment') {
-        
-        if (!isteacher($course->id)) {
-            error("Only teachers can look at this page");
-            }
-
-        // set up coment scale
-        for ($i=COMMENTSCALE; $i>=0; $i--) {
-            $num[$i] = $i;
-            }
-        
-        print_heading_with_help(get_string("gradeassessment", "workshop"), "gradingassessments", "workshop");
-        // get assessment record
-        if (!$assessmentid = $_GET['aid']) {
-            error("Assessment id not given");
-            }
-        $assessment = get_record("workshop_assessments", "id", $assessmentid);
-        if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) {
-            error("Submission not found");
-            }
-        // get the teacher's assessment first
-        if ($teachersassessment = workshop_get_submission_assessment($submission, $USER)) {
-            echo "<P><CENTER><B>".get_string("teacherassessments", "workshop", $course->teacher)."</B></CENTER>\n";
-            workshop_print_assessment($workshop, $teachersassessment);
-            }
-        // now the student's assessment (don't allow changes)
-        $user = get_record("user", "id", $assessment->userid);
-        echo "<P><CENTER><B>".get_string("assessmentby", "workshop", fullname($user))."</B></CENTER>\n";
-        workshop_print_assessment($workshop, $assessment);
-        
-        ?>
-        <FORM NAME="gradingform" ACTION="assessments.php" METHOD="post">
-        <INPUT TYPE="HIDDEN" NAME="action" VALUE="updategrading">
-        <INPUT TYPE="HIDDEN" NAME="id" VALUE="<?PHP echo $cm->id ?>">
-        <INPUT TYPE="HIDDEN" NAME="stype" VALUE="<?PHP echo $_GET['stype'] ?>">
-        <INPUT TYPE="HIDDEN" NAME="aid" VALUE="<?PHP echo $_GET['aid'] ?>">
-        <CENTER>
-        <TABLE CELLPADDING=5 BORDER=1>
-        <?PHP
-
-        // now get the teacher's comment
-        echo "<TR valign=top>\n";
-        echo "  <TD align=right><P><B>". get_string("teacherscomment", "workshop").":</B></P></TD>\n";
-
-        echo "  <TD>\n";
-
-        echo "      <textarea name=\"teachercomment\" rows=5 cols=75 wrap=\"virtual\">\n";
-        if (isset($assessment->teachercomment)) {
-            echo $assessment->teachercomment;
-            }
-        echo "</textarea>\n";
-
-        echo "  </TD>\n";
-
-        echo "</TR>\n";
-
-        echo "<TR><TD ALIGN=RIGHT><B>".get_string("gradeforstudentsassessment", "workshop")."</TD><TD>\n";
-        choose_from_menu($num, "gradinggrade", $assessment->gradinggrade, "");
-        echo "</TD></TR></TABLE>\n";
-        echo "<INPUT TYPE=submit VALUE=\"".get_string("savemygrading", "workshop")."\">\n";
-        echo "</CENTER></FORM>\n";
-        }
-
-
-
-    /*************** insert (new) comment (by author, assessor or teacher) ***************************/
-    elseif ($action == 'insertcomment') {
-        $timenow = time();
-
-        $form = (object)$_POST;
-        
-        if (!$assessment = get_record("workshop_assessments", "id", $_POST['aid'])) {
-            error("Unable to insert comment");
-            }
-        // save the comment...
-        $comment->workshopid = $workshop->id;
-        $comment->assessmentid   = $assessment->id;
-        $comment->userid   = $USER->id;
-        $comment->timecreated   = $timenow;
-        $comment->comments   = $form->comments;
-        if (!$comment->id = insert_record("workshop_comments", $comment)) {
-            error("Could not insert workshop comment!");
-            }
-            
-        add_to_log($course->id, "workshop", "comment", "view.php?id=$cm->id", "$comment->id");
-
-        print_continue("assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id");
-        }
-
-
-
-    /*********************** insert/update assignment elements (for teachers)***********************/
-    elseif ($action == 'insertelements') {
-
-        if (!isteacher($course->id)) {
-            error("Only teachers can look at this page");
-        }
-
-        $form = (object)$HTTP_POST_VARS;
-        
-        // let's not fool around here, dump the junk!
-        delete_records("workshop_elements", "workshopid", $workshop->id);
-        
-        // determine wich type of grading
-        switch ($workshop->gradingstrategy) {
-            case 0: // no grading
-                // Insert all the elements that contain something
-                foreach ($form->description as $key => $description) {
-                    if ($description) {
-                        unset($element);
-                        $element->description   = $description;
-                        $element->workshopid = $workshop->id;
-                        $element->elementno = $key;
-                        if (!$element->id = insert_record("workshop_elements", $element)) {
-                            error("Could not insert workshop element!");
-                        }
-                    }
-                }
-                break;
-                
-            case 1: // accumulative grading
-                // Insert all the elements that contain something
-                foreach ($form->description as $key => $description) {
-                    if ($description) {
-                        unset($element);
-                        $element->description   = $description;
-                        $element->workshopid = $workshop->id;
-                        $element->elementno = $key;
-                        if (isset($form->scale[$key])) {
-                            $element->scale = $form->scale[$key];
-                            switch ($WORKSHOP_SCALES[$form->scale[$key]]['type']) {
-                                case 'radio' :  $element->maxscore = $WORKSHOP_SCALES[$form->scale[$key]]['size'] - 1;
-                                                        break;
-                                case 'selection' :  $element->maxscore = $WORKSHOP_SCALES[$form->scale[$key]]['size'];
-                                                        break;
-                            }
-                        }
-                        if (isset($form->weight[$key])) {
-                            $element->weight = $form->weight[$key];
-                        }
-                        if (!$element->id = insert_record("workshop_elements", $element)) {
-                            error("Could not insert workshop element!");
-                        }
-                    }
-                }
-                break;
-                
-            case 2: // error banded grading...
-            case 3: // ...and criterion grading
-                // Insert all the elements that contain something, the number of descriptions is one less than the number of grades
-                foreach ($form->maxscore as $key => $themaxscore) {
-                    unset($element);
-                    $element->workshopid = $workshop->id;
-                    $element->elementno = $key;
-                    $element->maxscore = $themaxscore;
-                    if (isset($form->description[$key])) {
-                        $element->description   = $form->description[$key];
-                    }
-                    if (isset($form->weight[$key])) {
-                        $element->weight = $form->weight[$key];
-                    }
-                    if (!$element->id = insert_record("workshop_elements", $element)) {
-                        error("Could not insert workshop element!");
-                    }
-                }
-                break;
-                
-            case 4: // ...and criteria grading
-                // Insert all the elements that contain something
-                foreach ($form->description as $key => $description) {
-                    unset($element);
-                    $element->workshopid = $workshop->id;
-                    $element->elementno = $key;
-                    $element->description   = $description;
-                    $element->weight = $form->weight[$key];
-                    for ($j=0;$j<5;$j++) {
-                        if (empty($form->rubric[$key][$j]))
-                            break;
-                    }
-                    $element->maxscore = $j - 1;
-                    if (!$element->id = insert_record("workshop_elements", $element)) {
-                        error("Could not insert workshop element!");
-                    }
-                }
-                // let's not fool around here, dump the junk!
-                delete_records("workshop_rubrics", "workshopid", $workshop->id);
-                for ($i=0;$i<$workshop->nelements;$i++) {
-                    for ($j=0;$j<5;$j++) {
-                        unset($element);
-                        if (empty($form->rubric[$i][$j])) {  // OK to have an element with fewer than 5 items
-                             break;
-                         }
-                        $element->workshopid = $workshop->id;
-                        $element->elementno = $i;
-                        $element->rubricno = $j;
-                        $element->description   = $form->rubric[$i][$j];
-                        if (!$element->id = insert_record("workshop_rubrics", $element)) {
-                            error("Could not insert workshop element!");
-                        }
-                    }
-                }
-                break;
-        } // end of switch
-
-        redirect("view.php?id=$cm->id", get_string("savedok","workshop"));
-    }
-
-
-    /*********************** list assessments for grading (Student submissions)(by teachers)***********************/
-    elseif ($action == 'listungradedstudentsubmissions') {
-
-        if (!isteacher($course->id)) {
-            error("Only teachers can look at this page");
-            }
-        workshop_list_ungraded_assessments($workshop, "student");
-        print_continue("view.php?a=$workshop->id");
-        }
-
-
-    /*********************** list assessments for grading (Teacher submissions) (by teachers)***********************/
-    elseif ($action == 'listungradedteachersubmissions') {
-
-        if (!isteacher($course->id)) {
-            error("Only teachers can look at this page");
-            }
-        workshop_list_ungraded_assessments($workshop, "teacher");
-        print_continue("view.php?a=$workshop->id");
-        }
-
-
-    /****************** list teacher submissions ***********************/
-    elseif ($action == 'listteachersubmissions') {
-
-        workshop_list_teacher_submissions($workshop, $USER);
-        print_continue("view.php?a=$workshop->id");
-    }
+               switch ($workshop->gradingstrategy) {
+                       case 0: // no grading
+                               for ($i=0; $i<$workshop->nelements; $i++) {
+                                       $iplus1 = $i+1;
+                                       echo "<TR valign=top>\n";
+                                       echo "  <TD ALIGN=RIGHT><P><B>". get_string("element","workshop")." $iplus1:</B></TD>\n";
+                                       echo "<TD><textarea name=\"description[]\" rows=3 cols=75 wrap=\"virtual\">".$elements[$i]->description."</textarea>\n";
+                                       echo "  </TD></TR>\n";
+                                       echo "<TR valign=top>\n";
+                                       echo "  <TD colspan=2 BGCOLOR=\"$THEME->cellheading2\">&nbsp;</TD>\n";
+                                       echo "</TR>\n";
+                               }
+                               break;
+
+                       case 1: // accumulative grading
+                               // set up scales name
+                               foreach ($WORKSHOP_SCALES as $KEY => $SCALE) {
+                                       $SCALES[] = $SCALE['name'];
+                               }
+                               for ($i=0; $i<$workshop->nelements; $i++) {
+                                       $iplus1 = $i+1;
+                                       echo "<TR valign=top>\n";
+                                       echo "  <TD ALIGN=RIGHT><P><B>". get_string("element","workshop")." $iplus1:</B></TD>\n";
+                                       echo "<TD><textarea name=\"description[]\" rows=3 cols=75 wrap=\"virtual\">".$elements[$i]->description."</textarea>\n";
+                                       echo "  </TD></TR>\n";
+                                       echo "<TR valign=top>\n";
+                                       echo "  <TD align=right><P><B>". get_string("typeofscale", "workshop"). ":</B></P></TD>\n";
+                                       echo "<TD valign=\"top\">\n";
+                                       choose_from_menu($SCALES, "scale[]", $elements[$i]->scale, "");
+                                       if ($elements[$i]->weight == '') { // not set
+                                               $elements[$i]->weight = 11; // unity
+                                       }
+                                       echo "</TR>\n";
+                                       echo "<TR valign=top><TD ALIGN=RIGHT><B>".get_string("elementweight", "workshop").":</B></TD><TD>\n";
+                                       workshop_choose_from_menu($WORKSHOP_EWEIGHTS, "weight[]", $elements[$i]->weight, "");
+                                       echo "          </TD>\n";
+                                       echo "</TR>\n";
+                                       echo "<TR valign=top>\n";
+                                       echo "  <TD colspan=2 BGCOLOR=\"$THEME->cellheading2\">&nbsp;</TD>\n";
+                                       echo "</TR>\n";
+                               }
+                               break;
+                               
+                       case 2: // error banded grading
+                               for ($i=0; $i<$workshop->nelements; $i++) {
+                                       $iplus1 = $i+1;
+                                       echo "<TR valign=top>\n";
+                                       echo "  <TD ALIGN=RIGHT><P><B>". get_string("element","workshop")." $iplus1:</B></TD>\n";
+                                       echo "<TD><textarea name=\"description[$i]\" rows=3 cols=75 wrap=\"virtual\">".$elements[$i]->description."</textarea>\n";
+                                       echo "  </TD></TR>\n";
+                                       if ($elements[$i]->weight == '') { // not set
+                                               $elements[$i]->weight = 11; // unity
+                                               }
+                                       echo "</TR>\n";
+                                       echo "<TR valign=top><TD ALIGN=RIGHT><B>".get_string("elementweight", "workshop").":</B></TD><TD>\n";
+                                       workshop_choose_from_menu($WORKSHOP_EWEIGHTS, "weight[]", $elements[$i]->weight, "");
+                                       echo "          </TD>\n";
+                                       echo "</TR>\n";
+                                       echo "<TR valign=top>\n";
+                                       echo "  <TD colspan=2 BGCOLOR=\"$THEME->cellheading2\">&nbsp;</TD>\n";
+                                       echo "</TR>\n";
+                               }
+                               echo "</CENTER></TABLE><BR>\n";
+                               echo "<P><CENTER><B>".get_string("gradetable","workshop")."</B></CENTER>\n";
+                               echo "<CENTER><TABLE cellpadding=5 border=1><TR><TD ALIGN=\"CENTER\">".
+                                       get_string("numberofnegativeresponses", "workshop");
+                               echo "</TD><TD>". get_string("suggestedgrade", "workshop")."</TD></TR>\n";
+                               for ($j = $workshop->grade; $j >= 0; $j--) {
+                                       $numbers[$j] = $j;
+                               }
+                               for ($i=0; $i<=$workshop->nelements; $i++) {
+                                       echo "<TR><TD ALIGN=\"CENTER\">$i</TD><TD ALIGN=\"CENTER\">";
+                                       if (!isset($elements[$i])) {  // the "last one" will be!
+                                               $elements[$i]->description = "";
+                                               $elements[$i]->maxscore = 0;
+                                       }
+                                       choose_from_menu($numbers, "maxscore[$i]", $elements[$i]->maxscore, "");
+                                       echo "</TD></TR>\n";
+                               }
+                               echo "</TABLE></CENTER>\n";
+                               break;
+                               
+                       case 3: // criterion grading
+                               for ($j = 100; $j >= 0; $j--) {
+                                       $numbers[$j] = $j;
+                               }
+                               for ($i=0; $i<$workshop->nelements; $i++) {
+                                       $iplus1 = $i+1;
+                                       echo "<TR valign=top>\n";
+                                       echo "  <TD ALIGN=RIGHT><P><B>". get_string("criterion","workshop")." $iplus1:</B></TD>\n";
+                                       echo "<TD><textarea name=\"description[$i]\" rows=3 cols=75 wrap=\"virtual\">".$elements[$i]->description."</textarea>\n";
+                                       echo "  </TD></TR>\n";
+                                       echo "<TR><TD><B>". get_string("suggestedgrade", "workshop").":</B></TD><TD>\n";
+                                       choose_from_menu($numbers, "maxscore[$i]", $elements[$i]->maxscore, "");
+                                       echo "</TD></TR>\n";
+                                       echo "<TR valign=top>\n";
+                                       echo "  <TD colspan=2 BGCOLOR=\"$THEME->cellheading2\">&nbsp;</TD>\n";
+                                       echo "</TR>\n";
+                               }
+                               break;
+
+                       case 4: // rubric
+                               for ($j = 100; $j >= 0; $j--) {
+                                       $numbers[$j] = $j;
+                               }
+                               if ($rubricsraw = get_records("workshop_rubrics", "workshopid", $workshop->id)) {
+                                       foreach ($rubricsraw as $rubric) {
+                                               $rubrics[$rubric->elementno][$rubric->rubricno] = $rubric->description;   // reindex 0,1,2...
+                                       }
+                               }
+                               for ($i=0; $i<$workshop->nelements; $i++) {
+                                       $iplus1 = $i+1;
+                                       echo "<TR valign=top>\n";
+                                       echo "  <TD ALIGN=RIGHT><P><B>". get_string("element","workshop")." $iplus1:</B></TD>\n";
+                                       echo "<TD><textarea name=\"description[$i]\" rows=3 cols=75 wrap=\"virtual\">".$elements[$i]->description."</textarea>\n";
+                                       echo "  </TD></TR>\n";
+                                       echo "<TR valign=top><TD ALIGN=RIGHT><B>".get_string("elementweight", "workshop").":</B></TD><TD>\n";
+                                       workshop_choose_from_menu($WORKSHOP_EWEIGHTS, "weight[]", $elements[$i]->weight, "");
+                                       echo "          </TD>\n";
+                                       echo "</TR>\n";
+
+                                       for ($j=0; $j<5; $j++) {
+                                               $jplus1 = $j+1;
+                                               if (empty($rubrics[$i][$j])) {
+                                                       $rubrics[$i][$j] = "";
+                                               }
+                                               echo "<TR valign=top>\n";
+                                               echo "  <TD ALIGN=RIGHT><P><B>". get_string("grade","workshop")." $j:</B></TD>\n";
+                                               echo "<TD><textarea name=\"rubric[$i][$j]\" rows=3 cols=75 wrap=\"virtual\">".$rubrics[$i][$j]."</textarea>\n";
+                                               echo "  </TD></TR>\n";
+                                               }
+                                       echo "<TR valign=top>\n";
+                                       echo "  <TD colspan=2 BGCOLOR=\"$THEME->cellheading2\">&nbsp;</TD>\n";
+                                       echo "</TR>\n";
+                                       }
+                               break;
+                       }
+               // close table and form\r
+               ?>
+               </TABLE>
+               <input type="submit" value="<?php  print_string("savechanges") ?>">
+               <input type="submit" name=cancel value="<?php  print_string("cancel") ?>">
+               </CENTER>
+               </FORM>
+               <?PHP
+       }
+       
+       
+       /*************** grade all assessments (by teacher) ***************************/
+       elseif ($action == 'gradeallassessments') {
+               
+               if (!isteacher($course->id)) {
+                       error("Only teachers can look at this page");
+               }
+
+        print_heading(get_string("gradingallassessments", "workshop"));
+        workshop_grade_assessments($workshop);
+           print_continue("view.php?id=$cm->id");
+       }
+
+
+       /*************** grade (student's) assessment (by teacher) ***************************/
+       elseif ($action == 'gradeassessment') {
+               
+               if (!isteacher($course->id)) {
+                       error("Only teachers can look at this page");
+               }
+
+               // set up coment scale
+               for ($i=COMMENTSCALE; $i>=0; $i--) {
+                       $num[$i] = $i;
+               }
+               
+               print_heading_with_help(get_string("gradeassessment", "workshop"), "gradingassessments", "workshop");
+               // get assessment record
+               if (!$assessmentid = $_GET['aid']) {
+                       error("Assessment id not given");
+               }
+               $assessment = get_record("workshop_assessments", "id", $assessmentid);
+               if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) {
+                       error("Submission not found");
+               }
+               // get the teacher's assessment first
+               if ($teachersassessment = workshop_get_submission_assessment($submission, $USER)) {
+                       echo "<P><CENTER><B>".get_string("teacherassessments", "workshop", $course->teacher)."</B></CENTER>\n";
+                       workshop_print_assessment($workshop, $teachersassessment);
+               }
+               // now the student's assessment (don't allow changes)
+               $user = get_record("user", "id", $assessment->userid);
+               echo "<P><CENTER><B>".get_string("assessmentby", "workshop", $user->firstname." ".$user->lastname)."</B></CENTER>\n";
+               workshop_print_assessment($workshop, $assessment);
+               
+               ?>
+               <FORM NAME="gradingform" ACTION="assessments.php" METHOD="post">
+               <INPUT TYPE="HIDDEN" NAME="action" VALUE="updategrading">
+               <INPUT TYPE="HIDDEN" NAME="id" VALUE="<?PHP echo $cm->id ?>">
+               <INPUT TYPE="HIDDEN" NAME="stype" VALUE="<?PHP echo $_GET['stype'] ?>">
+               <INPUT TYPE="HIDDEN" NAME="aid" VALUE="<?PHP echo $_GET['aid'] ?>">
+               <CENTER>
+               <TABLE CELLPADDING=5 BORDER=1>
+               <?PHP
+
+               // now get the teacher's comment
+               echo "<TR valign=top>\n";
+               echo "  <TD align=right><P><B>". get_string("teacherscomment", "workshop").":</B></P></TD>\n";
+               echo "  <TD>\n";
+               echo "          <textarea name=\"teachercomment\" rows=5 cols=75 wrap=\"virtual\">\n";
+               if (isset($assessment->teachercomment)) {
+                       echo $assessment->teachercomment;
+               }
+               echo "</textarea>\n";
+               echo "  </TD>\n";
+               echo "</TR>\n";
+               echo "<TR><TD ALIGN=RIGHT><B>".get_string("gradeforstudentsassessment", "workshop")."</TD><TD>\n";
+               choose_from_menu($num, "gradinggrade", $assessment->gradinggrade, "");
+               echo "</TD></TR></TABLE>\n";
+               echo "<INPUT TYPE=submit VALUE=\"".get_string("savemygrading", "workshop")."\">\n";
+               echo "</CENTER></FORM>\n";
+       }
+
+
+       /*************** insert (new) comment (by author, assessor or teacher) ***************************/
+       elseif ($action == 'insertcomment') {
+               $timenow = time();
+
+               $form = (object)$_POST;
+               
+               if (!$assessment = get_record("workshop_assessments", "id", $_POST['aid'])) {
+                       error("Unable to insert comment");
+                       }
+               // save the comment...
+               $comment->workshopid = $workshop->id;
+               $comment->assessmentid   = $assessment->id;
+               $comment->userid   = $USER->id;
+               $comment->timecreated   = $timenow;
+               $comment->comments   = $form->comments;
+               if (!$comment->id = insert_record("workshop_comments", $comment)) {
+                       error("Could not insert workshop comment!");
+                       }
+                       
+               add_to_log($course->id, "workshop", "comment", "view.php?id=$cm->id", "$comment->id");
+
+               print_continue("assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id");
+               }
+
+
+       /*********************** insert/update assignment elements (for teachers)***********************/
+       elseif ($action == 'insertelements') {
+
+               if (!isteacher($course->id)) {
+                       error("Only teachers can look at this page");
+               }
+
+               $form = (object)$HTTP_POST_VARS;
+               
+               // let's not fool around here, dump the junk!
+               delete_records("workshop_elements", "workshopid", $workshop->id);
+               
+               // determine wich type of grading
+               switch ($workshop->gradingstrategy) {
+                       case 0: // no grading
+                               // Insert all the elements that contain something
+                               foreach ($form->description as $key => $description) {
+                                       if ($description) {
+                                               unset($element);
+                                               $element->description   = $description;
+                                               $element->workshopid = $workshop->id;
+                                               $element->elementno = $key;
+                                               if (!$element->id = insert_record("workshop_elements", $element)) {
+                                                       error("Could not insert workshop element!");
+                                               }
+                                       }
+                               }
+                               break;
+                               
+                       case 1: // accumulative grading
+                               // Insert all the elements that contain something
+                               foreach ($form->description as $key => $description) {
+                                       if ($description) {
+                                               unset($element);
+                                               $element->description   = $description;
+                                               $element->workshopid = $workshop->id;
+                                               $element->elementno = $key;
+                                               if (isset($form->scale[$key])) {
+                                                       $element->scale = $form->scale[$key];
+                                                       switch ($WORKSHOP_SCALES[$form->scale[$key]]['type']) {
+                                                               case 'radio' :  $element->maxscore = $WORKSHOP_SCALES[$form->scale[$key]]['size'] - 1;
+                                                                                                               break;
+                                                               case 'selection' :      $element->maxscore = $WORKSHOP_SCALES[$form->scale[$key]]['size'];
+                                                                                                               break;
+                                                       }
+                                               }
+                                               if (isset($form->weight[$key])) {
+                                                       $element->weight = $form->weight[$key];
+                                               }
+                                               if (!$element->id = insert_record("workshop_elements", $element)) {
+                                                       error("Could not insert workshop element!");
+                                               }
+                                       }
+                               }
+                               break;
+                               
+                       case 2: // error banded grading...
+                       case 3: // ...and criterion grading
+                               // Insert all the elements that contain something, the number of descriptions is one less than the number of grades
+                               foreach ($form->maxscore as $key => $themaxscore) {
+                                       unset($element);
+                                       $element->workshopid = $workshop->id;
+                                       $element->elementno = $key;
+                                       $element->maxscore = $themaxscore;
+                                       if (isset($form->description[$key])) {
+                                               $element->description   = $form->description[$key];
+                                       }
+                                       if (isset($form->weight[$key])) {
+                                               $element->weight = $form->weight[$key];
+                                       }
+                                       if (!$element->id = insert_record("workshop_elements", $element)) {
+                                               error("Could not insert workshop element!");
+                                       }
+                               }
+                               break;
+                               
+                       case 4: // ...and criteria grading
+                               // Insert all the elements that contain something
+                               foreach ($form->description as $key => $description) {
+                                       unset($element);
+                                       $element->workshopid = $workshop->id;
+                                       $element->elementno = $key;
+                                       $element->description   = $description;
+                                       $element->weight = $form->weight[$key];
+                                       for ($j=0;$j<5;$j++) {
+                                               if (empty($form->rubric[$key][$j]))
+                                                       break;
+                                       }
+                                       $element->maxscore = $j - 1;
+                                       if (!$element->id = insert_record("workshop_elements", $element)) {
+                                               error("Could not insert workshop element!");
+                                       }
+                               }
+                               // let's not fool around here, dump the junk!
+                               delete_records("workshop_rubrics", "workshopid", $workshop->id);
+                               for ($i=0;$i<$workshop->nelements;$i++) {
+                                       for ($j=0;$j<5;$j++) {
+                                               unset($element);
+                                               if (empty($form->rubric[$i][$j])) {  // OK to have an element with fewer than 5 items
+                                                        break;
+                                                }
+                                               $element->workshopid = $workshop->id;
+                                               $element->elementno = $i;
+                                               $element->rubricno = $j;
+                                               $element->description   = $form->rubric[$i][$j];
+                                               if (!$element->id = insert_record("workshop_rubrics", $element)) {
+                                                       error("Could not insert workshop element!");
+                                               }
+                                       }
+                               }
+                               break;
+               } // end of switch
+
+               redirect("view.php?id=$cm->id", get_string("savedok","workshop"));
+       }
+
+
+       /*********************** list assessments for grading (Student submissions)(by teachers)***********************/
+       elseif ($action == 'listungradedstudentsubmissions') {
+
+               if (!isteacher($course->id)) {
+                       error("Only teachers can look at this page");
+                       }
+               workshop_list_ungraded_assessments($workshop, "student");
+               print_continue("view.php?id=$cm->id");
+               }
+
+
+       /*********************** list assessments for grading (Teacher submissions) (by teachers)***********************/
+       elseif ($action == 'listungradedteachersubmissions') {
+
+               if (!isteacher($course->id)) {
+                       error("Only teachers can look at this page");
+                       }
+               workshop_list_ungraded_assessments($workshop, "teacher");
+               print_continue("view.php?id=$cm->id");
+               }
+
+
+       /****************** list teacher submissions ***********************/
+       elseif ($action == 'listteachersubmissions') {
+
+               workshop_list_teacher_submissions($workshop, $USER);
+               print_continue("view.php?id=$cm->id");
+       }
 
 
     /*************** update assessment (by teacher or student) ***************************/
 
         $timenow = time();
         // don't fiddle about, delete all the old and add the new!
-        delete_records("workshop_grades", "assessmentid",  $assessment->id);
-        
-        $form = (object)$HTTP_POST_VARS;
-        
-        //determine what kind of grading we have
-        switch ($workshop->gradingstrategy) {
-            case 0: // no grading
-                // Insert all the elements that contain something
-                foreach ($form->feedback as $key => $thefeedback) {
-                    unset($element);
-                    $element->workshopid = $workshop->id;
-                    $element->assessmentid = $assessment->id;
-                    $element->elementno = $key;
-                    $element->feedback   = $thefeedback;
-                    if (!$element->id = insert_record("workshop_grades", $element)) {
-                        error("Could not insert workshop element!");
-                    }
-                }
-                $grade = 0; // set to satisfy save to db
-                break;
-                
-            case 1: // accumulative grading
-                // Insert all the elements that contain something
-                foreach ($form->grade as $key => $thegrade) {
-                    unset($element);
-                    $element->workshopid = $workshop->id;
-                    $element->assessmentid = $assessment->id;
-                    $element->elementno = $key;
-                    $element->feedback   = $form->feedback[$key];
-                    $element->grade = $thegrade;
-                    if (!$element->id = insert_record("workshop_grades", $element)) {
-                        error("Could not insert workshop element!");
-                        }
-                    }
-                // now work out the grade...
-                $rawgrade=0;
-                $totalweight=0;
-                foreach ($form->grade as $key => $grade) {
-                    $maxscore = $elements[$key]->maxscore;
-                    $weight = $WORKSHOP_EWEIGHTS[$elements[$key]->weight];
-                    if ($weight > 0) { 
-                        $totalweight += $weight;
-                    }
-                    $rawgrade += ($grade / $maxscore) * $weight;
-                    // echo "\$key, \$maxscore, \$weight, \$totalweight, \$grade, \$rawgrade : $key, $maxscore, $weight, $totalweight, $grade, $rawgrade<BR>";
-                }
-                $grade = $workshop->grade * ($rawgrade / $totalweight);
-                break;
-
-            case 2: // error banded graded
-                // Insert all the elements that contain something
-                $error = 0.0; 
-                for ($i =0; $i < $workshop->nelements; $i++) {
-                    unset($element);
-                    $element->workshopid = $workshop->id;
-                    $element->assessmentid = $assessment->id;
-                    $element->elementno = $i;
-                    $element->feedback   = $form->feedback[$i];
-                    $element->grade = $form->grade[$i];
-                    if (!$element->id = insert_record("workshop_grades", $element)) {
-                        error("Could not insert workshop element!");
-                    }
-                    if (empty($form->grade[$i])){
-                        $error += $WORKSHOP_EWEIGHTS[$elements[$i]->weight];
-                    }
-                }
-                // now save the adjustment
-                unset($element);
-                $i = $workshop->nelements;
-                $element->workshopid = $workshop->id;
-                $element->assessmentid = $assessment->id;
-                $element->elementno = $i;
-                $element->grade = $form->grade[$i];
-                if (!$element->id = insert_record("workshop_grades", $element)) {
-                    error("Could not insert workshop element!");
-                }
-                $grade = ($elements[intval($error + 0.5)]->maxscore + $form->grade[$i]);
-                echo "<P><B>".get_string("weightederrorcount", "workshop", intval($error + 0.5))."</B>\n";
-                break;
-            
-            case 3: // criteria grading
-                // save in the selected criteria value in element zero, 
-                unset($element);
-                $element->workshopid = $workshop->id;
-                $element->assessmentid = $assessment->id;
-                $element->elementno = 0;
-                $element->grade = $form->grade[0];
-                if (!$element->id = insert_record("workshop_grades", $element)) {
-                    error("Could not insert workshop element!");
+               delete_records("workshop_grades", "assessmentid",  $assessment->id);
+               
+               $form = (object)$HTTP_POST_VARS;
+               
+               //determine what kind of grading we have
+               switch ($workshop->gradingstrategy) {
+                       case 0: // no grading
+                               // Insert all the elements that contain something
+                               foreach ($form->feedback as $key => $thefeedback) {
+                                       unset($element);
+                                       $element->workshopid = $workshop->id;
+                                       $element->assessmentid = $assessment->id;
+                                       $element->elementno = $key;
+                                       $element->feedback   = $thefeedback;
+                                       if (!$element->id = insert_record("workshop_grades", $element)) {
+                                               error("Could not insert workshop element!");
+                                       }
+                               }
+                               $grade = 0; // set to satisfy save to db
+                               break;
+                               
+                       case 1: // accumulative grading
+                               // Insert all the elements that contain something
+                               foreach ($form->grade as $key => $thegrade) {
+                                       unset($element);
+                                       $element->workshopid = $workshop->id;
+                                       $element->assessmentid = $assessment->id;
+                                       $element->elementno = $key;
+                                       $element->feedback   = $form->feedback[$key];
+                                       $element->grade = $thegrade;
+                                       if (!$element->id = insert_record("workshop_grades", $element)) {
+                                               error("Could not insert workshop element!");
+                                               }
+                                       }
+                               // now work out the grade...
+                               $rawgrade=0;
+                               $totalweight=0;
+                               foreach ($form->grade as $key => $grade) {
+                                       $maxscore = $elements[$key]->maxscore;
+                                       $weight = $WORKSHOP_EWEIGHTS[$elements[$key]->weight];
+                                       if ($weight > 0) { 
+                                               $totalweight += $weight;
+                                       }
+                                       $rawgrade += ($grade / $maxscore) * $weight;
+                                       // echo "\$key, \$maxscore, \$weight, \$totalweight, \$grade, \$rawgrade : $key, $maxscore, $weight, $totalweight, $grade, $rawgrade<BR>";
+                               }
+                               $grade = 100.0 * ($rawgrade / $totalweight);
+                               break;
+
+                       case 2: // error banded graded
+                               // Insert all the elements that contain something
+                               $error = 0.0; 
+                               for ($i =0; $i < $workshop->nelements; $i++) {
+                                       unset($element);
+                                       $element->workshopid = $workshop->id;
+                                       $element->assessmentid = $assessment->id;
+                                       $element->elementno = $i;
+                                       $element->feedback   = $form->feedback[$i];
+                                       $element->grade = $form->grade[$i];
+                                       if (!$element->id = insert_record("workshop_grades", $element)) {
+                                               error("Could not insert workshop element!");
+                                       }
+                               if (empty($form->grade[$i])){
+                                               $error += $WORKSHOP_EWEIGHTS[$elements[$i]->weight];
+                                       }
+                               }
+                               // now save the adjustment
+                               unset($element);
+                               $i = $workshop->nelements;
+                               $element->workshopid = $workshop->id;
+                               $element->assessmentid = $assessment->id;
+                               $element->elementno = $i;
+                               $element->grade = $form->grade[$i];
+                               if (!$element->id = insert_record("workshop_grades", $element)) {
+                                       error("Could not insert workshop element!");
+                               }
+                               $grade = ($elements[intval($error + 0.5)]->maxscore + $form->grade[$i]) * 100 / $workshop->grade;
+                // do sanity check
+                if ($grade < 0) {
+                    $grade = 0;
+                } elseif ($grade > 100) {
+                    $grade = 100;
                 }
-                // now save the adjustment in element one
-                unset($element);
-                $element->workshopid = $workshop->id;
-                $element->assessmentid = $assessment->id;
-                $element->elementno = 1;
-                $element->grade = $form->grade[1];
-                if (!$element->id = insert_record("workshop_grades", $element)) {
-                    error("Could not insert workshop element!");
-                }
-                $grade = ($elements[$form->grade[0]]->maxscore + $form->grade[1]) * $workshop->grade / 100;
-                break;
-
-            case 4: // rubric grading (identical to accumulative grading)
-                // Insert all the elements that contain something
-                foreach ($form->grade as $key => $thegrade) {
-                    unset($element);
-                    $element->workshopid = $workshop->id;
-                    $element->assessmentid = $assessment->id;
-                    $element->elementno = $key;
-                    $element->feedback   = $form->feedback[$key];
-                    $element->grade = $thegrade;
-                    if (!$element->id = insert_record("workshop_grades", $element)) {
-                        error("Could not insert workshop element!");
-                    }
-                }
-                // now work out the grade...
-                $rawgrade=0;
-                $totalweight=0;
-                foreach ($form->grade as $key => $grade) {
-                    $maxscore = $elements[$key]->maxscore;
-                    $weight = $WORKSHOP_EWEIGHTS[$elements[$key]->weight];
-                    if ($weight > 0) { 
-                        $totalweight += $weight;
-                    }
-                    $rawgrade += ($grade / $maxscore) * $weight;
-                }
-                $grade = $workshop->grade * ($rawgrade / $totalweight);
-                break;
-
-        } // end of switch
-            
-        // update the time of the assessment record (may be re-edited)...
-        set_field("workshop_assessments", "timecreated", $timenow, "id", $assessment->id);
-        
-        if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) {
-            error ("Updateassessment: submission record not found");
-        }
-        
-        // if the workshop does need peer agreement AND it's self assessment then set timeagreed
-        if ($workshop->agreeassessments and ($submission->userid == $assessment->userid)) {
-            set_field("workshop_assessments", "timeagreed", $timenow, "id", $assessment->id);
-        }
-        
-        set_field("workshop_assessments", "grade", $grade, "id", $assessment->id);
-        // ...and clear any grading of this assessment...
-        set_field("workshop_assessments", "timegraded", 0, "id", $assessment->id);
-        set_field("workshop_assessments", "gradinggrade", 0, "id", $assessment->id);
-        // ...and the resubmission flag
+                               echo "<P><B>".get_string("weightederrorcount", "workshop", intval($error + 0.5))."</B>\n";
+                               break;
+                       
+                       case 3: // criteria grading
+                               // save in the selected criteria value in element zero, 
+                               unset($element);
+                               $element->workshopid = $workshop->id;
+                               $element->assessmentid = $assessment->id;
+                               $element->elementno = 0;
+                               $element->grade = $form->grade[0];
+                               if (!$element->id = insert_record("workshop_grades", $element)) {
+                                       error("Could not insert workshop element!");
+                               }
+                               // now save the adjustment in element one
+                               unset($element);
+                               $element->workshopid = $workshop->id;
+                               $element->assessmentid = $assessment->id;
+                               $element->elementno = 1;
+                               $element->grade = $form->grade[1];
+                               if (!$element->id = insert_record("workshop_grades", $element)) {
+                                       error("Could not insert workshop element!");
+                               }
+                               $grade = ($elements[$form->grade[0]]->maxscore + $form->grade[1]);
+                               break;
+
+                       case 4: // rubric grading (identical to accumulative grading)
+                               // Insert all the elements that contain something
+                               foreach ($form->grade as $key => $thegrade) {
+                                       unset($element);
+                                       $element->workshopid = $workshop->id;
+                                       $element->assessmentid = $assessment->id;
+                                       $element->elementno = $key;
+                                       $element->feedback   = $form->feedback[$key];
+                                       $element->grade = $thegrade;
+                                       if (!$element->id = insert_record("workshop_grades", $element)) {
+                                               error("Could not insert workshop element!");
+                                       }
+                               }
+                               // now work out the grade...
+                               $rawgrade=0;
+                               $totalweight=0;
+                               foreach ($form->grade as $key => $grade) {
+                                       $maxscore = $elements[$key]->maxscore;
+                                       $weight = $WORKSHOP_EWEIGHTS[$elements[$key]->weight];
+                                       if ($weight > 0) { 
+                                               $totalweight += $weight;
+                                       }
+                                       $rawgrade += ($grade / $maxscore) * $weight;
+                               }
+                               $grade = 100.0 * ($rawgrade / $totalweight);
+                               break;
+
+               } // end of switch
+                       
+               // update the time of the assessment record (may be re-edited)...
+               set_field("workshop_assessments", "timecreated", $timenow, "id", $assessment->id);
+               
+               if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) {
+                       error ("Updateassessment: submission record not found");
+               }
+               
+               // if the workshop does need peer agreement AND it's self assessment then set timeagreed
+               if ($workshop->agreeassessments and ($submission->userid == $assessment->userid)) {
+                       set_field("workshop_assessments", "timeagreed", $timenow, "id", $assessment->id);
+               }
+               
+               set_field("workshop_assessments", "grade", $grade, "id", $assessment->id);
+               // ...and clear any grading of this assessment...
+               set_field("workshop_assessments", "timegraded", 0, "id", $assessment->id);
+               set_field("workshop_assessments", "gradinggrade", 0, "id", $assessment->id);
+               // ...and the resubmission flag
         set_field("workshop_assessments", "resubmission", 0, "id", $assessment->id);
         
         // any comment?
-        if (!empty($form->generalcomment)) {
-            set_field("workshop_assessments", "generalcomment", $form->generalcomment, "id", $assessment->id);
-        }
-            
+               if (!empty($form->generalcomment)) {
+                       set_field("workshop_assessments", "generalcomment", $form->generalcomment, "id", $assessment->id);
+               }
+                       
         add_to_log($course->id, "workshop", "assess",
                 "assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id", "$assessment->id", "$cm->id");
         
             
         // show grade if grading strategy is not zero
         if ($workshop->gradingstrategy) {
-            redirect($returnto, get_string("thegradeis", "workshop").": ".number_format($grade, 2).
+            redirect($returnto, get_string("thegradeis", "workshop").": ".
+                    number_format($grade * $workshop->grade / 100, 2).
                     " (".get_string("maximumgrade")." ".number_format($workshop->grade).")");
         }
         else {
     /****************** user delete ************************************/
     elseif ($action == 'userdelete' ) {
 
-        if (empty($_GET['aid'])) {
-            error("User delete: assessment id missing");
-        }
-            
-        print_string("deleting", "workshop");
-        // first delete all the associated records...
-        delete_records("workshop_comments", "assessmentid", $_GET['aid']);
-        delete_records("workshop_grades", "assessmentid", $_GET['aid']);
-        // ...now delete the assessment...
-        delete_records("workshop_assessments", "id", $_GET['aid']);
-        
-        print_continue("view.php?id=$cm->id");
-    }
-    
-
-    /****************** view all assessments ***********************/
-    elseif ($action == 'viewallassessments') {
-        
-        if (!$submission = get_record("workshop_submissions", "id", $_GET['sid'])) {
-            error("View All Assessments: submission record not found");
-        }       
-            
-        if ($assessments = workshop_get_assessments($submission)) {
-            foreach ($assessments as $assessment) {
-                workshop_print_assessment($workshop, $assessment);
-            }
-        }
-        // only called from list all submissions
-        print_continue("submissions.php?action=listallsubmissions&id=$cm->id");
-    }
-
-
-    /****************** view assessment *****************************/
-    elseif ($action == 'viewassessment') {
-
-        optional_variable($allowcomments);
-        if (!isset($allowcomments)) {
-            $allowcomments = false;
-        }
-    
-        // get the assessment record
-        if (!$assessment = get_record("workshop_assessments", "id", $_GET['aid'])) {
-            error("Assessment record not found");
-        }       
-
-        // show assessment but don't allow changes
-        workshop_print_assessment($workshop, $assessment, false, $allowcomments);
-        
-        print_continue("view.php?a=$workshop->id");
-    }
-
-
-    /*************** no man's land **************************************/
-    else {
-        error("Fatal Error: Unknown Action: ".$action."\n");
-    }
+               if (empty($_GET['aid'])) {
+                       error("User delete: assessment id missing");
+               }
+                       
+               print_string("deleting", "workshop");
+               // first delete all the associated records...
+               delete_records("workshop_comments", "assessmentid", $_GET['aid']);
+               delete_records("workshop_grades", "assessmentid", $_GET['aid']);
+               // ...now delete the assessment...
+               delete_records("workshop_assessments", "id", $_GET['aid']);
+               
+               print_continue("view.php?id=$cm->id");
+       }
+       
+
+       /****************** view all assessments ***********************/
+       elseif ($action == 'viewallassessments') {
+               
+               if (!$submission = get_record("workshop_submissions", "id", $_GET['sid'])) {
+                       error("View All Assessments: submission record not found");
+               }               
+                       
+               if ($assessments = workshop_get_assessments($submission)) {
+                       foreach ($assessments as $assessment) {
+                               workshop_print_assessment($workshop, $assessment);
+                       }
+               }
+               // only called from list all submissions
+               print_continue("submissions.php?action=listallsubmissions&id=$cm->id");
+       }
+
+
+       /****************** view assessment *****************************/
+       elseif ($action == 'viewassessment') {
+
+               optional_variable($allowcomments);
+               if (!isset($allowcomments)) {
+                       $allowcomments = false;
+               }
+       
+               // get the assessment record
+               if (!$assessment = get_record("workshop_assessments", "id", $_GET['aid'])) {
+                       error("Assessment record not found");
+               }               
+
+               // show assessment but don't allow changes
+               workshop_print_assessment($workshop, $assessment, false, $allowcomments);
+               
+               print_continue("view.php?id=$cm->id");
+       }
+
+
+       /*************** no man's land **************************************/
+       else {
+               error("Fatal Error: Unknown Action: ".$action."\n");
+       }
 
     print_footer($course);
  
index 4b54353b9f40de535e2708761196f75f07d5554e..1d16030ee44c485a33f4b122cace28719964a7bf 100644 (file)
                 fwrite ($bf,full_tag("MAXBYTES",4,false,$workshop->maxbytes));
                 fwrite ($bf,full_tag("DEADLINE",4,false,$workshop->deadline));
                 fwrite ($bf,full_tag("GRADE",4,false,$workshop->grade));
+                fwrite ($bf,full_tag("GRADINGGRADE",4,false,$workshop->gradinggrade));
                 fwrite ($bf,full_tag("NTASSESSMENTS",4,false,$workshop->ntassessments));
+                fwrite ($bf,full_tag("ASSESSMENTCOMPS",4,false,$workshop->assessmentcomps));
                 fwrite ($bf,full_tag("NSASSESSMENTS",4,false,$workshop->nsassessments));
                 fwrite ($bf,full_tag("OVERALLOCATION",4,false,$workshop->overallocation));
                 fwrite ($bf,full_tag("TIMEMODIFIED",4,false,$workshop->timemodified));
-                fwrite ($bf,full_tag("MERGEGRADES",4,false,$workshop->mergegrades));
                 fwrite ($bf,full_tag("TEACHERWEIGHT",4,false,$workshop->teacherweight));
-                fwrite ($bf,full_tag("PEERWEIGHT",4,false,$workshop->peerweight));
-                fwrite ($bf,full_tag("INCLUDETEACHERSGRADE",4,false,$workshop->includeteachersgrade));
-                fwrite ($bf,full_tag("BIASWEIGHT",4,false,$workshop->biasweight));
-                fwrite ($bf,full_tag("RELIABILITYWEIGHT",4,false,$workshop->reliabilityweight));
-                fwrite ($bf,full_tag("GRADINGWEIGHT",4,false,$workshop->gradingweight));
                 fwrite ($bf,full_tag("SHOWLEAGUETABLE",4,false,$workshop->showleaguetable));
-                fwrite ($bf,full_tag("TEACHERLOADING",4,false,$workshop->teacherloading));
-                fwrite ($bf,full_tag("ASSESSMENTSTODROP",4,false,$workshop->assessmentstodrop));
                 //Now we backup workshop elements
                 $status = backup_workshop_elements($bf,$preferences,$workshop->id);
                 //if we've selected to backup users info, then execute backup_workshop_submisions
index b1d5bcc50e3dfab0f29e18d52f0defed956774b0..75bfcf61801d12f3f0e14e90a10f8efa0d27059e 100644 (file)
@@ -81,6 +81,19 @@ function workshop_upgrade($oldversion) {
         workshop_refresh_events();
     }
 
+    if ($oldversion < 2004081100) {
+               table_column("workshop", "", "gradinggrade", "INTEGER", "4", "UNSIGNED", "0", "NOT NULL", "grade");
+               table_column("workshop", "", "assessmentcomps", "INTEGER", "4", "UNSIGNED", "2", "NOT NULL", "ntassessments");
+        execute_sql("ALTER TABLE `{$CFG->prefix}workshop` DROP COLUMN `gradingweight`");
+        execute_sql("ALTER TABLE `{$CFG->prefix}workshop` DROP COLUMN `mergegrades`");
+        execute_sql("ALTER TABLE `{$CFG->prefix}workshop` DROP COLUMN `peerweight`");
+        execute_sql("ALTER TABLE `{$CFG->prefix}workshop` DROP COLUMN `includeteachersgrade`");
+        execute_sql("ALTER TABLE `{$CFG->prefix}workshop` DROP COLUMN `biasweight`");
+        execute_sql("ALTER TABLE `{$CFG->prefix}workshop` DROP COLUMN `reliabilityweight`");
+        execute_sql("ALTER TABLE `{$CFG->prefix}workshop` DROP COLUMN `teacherloading`");
+        execute_sql("ALTER TABLE `{$CFG->prefix}workshop` DROP COLUMN `assessmentstodrop`");
+    }
+
     
     return true;
 }
index 356ff53043c6616c32378c5774727d99fd8f3d9b..bc1633a6463592a41fee693ffac7bed72fd57f1a 100644 (file)
@@ -18,20 +18,14 @@ CREATE TABLE `prefix_workshop` (
   `includeself` tinyint(2) unsigned NOT NULL default '0',
   `maxbytes` int(10) unsigned NOT NULL default '100000',
   `deadline` int(10) unsigned NOT NULL default '0',
-  `grade` int(10) NOT NULL default '0',
+  `grade` tinyint(3) NOT NULL default '0',
+  `gradinggrade` tinyint(3) NOT NULL default '0',
   `ntassessments` tinyint(3) unsigned NOT NULL default '0',
+  `assessmentcomps` tinyint(3) unsigned NOT NULL default '2',
   `nsassessments` tinyint(3) unsigned NOT NULL default '0',
   `overallocation` tinyint(3) unsigned NOT NULL default '0',
   `timemodified` int(10) unsigned NOT NULL default '0',
-  `mergegrades` tinyint(3) unsigned NOT NULL default '0',
-  `teacherweight` tinyint(3) unsigned NOT NULL default '5',
-  `peerweight` tinyint(3) unsigned NOT NULL default '5',
-  `includeteachersgrade` tinyint(3) unsigned NOT NULL default '0',
-  `biasweight` tinyint(3) unsigned NOT NULL default '5',
-  `reliabilityweight` tinyint(3) unsigned NOT NULL default '5',
-  `gradingweight` tinyint(3) unsigned NOT NULL default '5',
-  `teacherloading` tinyint(3) unsigned NOT NULL default '5',
-  `assessmentstodrop` tinyint(3) unsigned NOT NULL default '0',
+  `teacherweight` tinyint(3) unsigned NOT NULL default '1',
   `showleaguetable` tinyint(3) unsigned NOT NULL default '0',
   PRIMARY KEY  (`id`)
 ) COMMENT='Defines workshop';
index a50e7acec5c8b81927e2db6d6cc04f1addcad768..e423c12abeb0d3049a186def603e516415e386ed 100644 (file)
@@ -1,8 +1,8 @@
 <?PHP // $Id$
 
     require("../../config.php");
-   require("lib.php");
-   require("locallib.php");
+    require("lib.php");
+    require("locallib.php");
 
     require_variable($id);   // course
 
     $strweek = get_string("week");
     $strtopic = get_string("topic");
     $strname = get_string("name");
-    $strphase = get_string("phase", "workshop");
+    if (isstudent($course->id)) {
+        $strinfo = get_string("grade");
+    } else {
+        $strinfo = get_string("phase", "workshop");
+    }
     $strdeadline = get_string("deadline", "workshop");
     $strsubmitted = get_string("submitted", "assignment");
 
     $timenow = time();
 
     if ($course->format == "weeks") {
-        $table->head  = array ($strweek, $strname, $strphase, $strsubmitted, $strdeadline);
+        $table->head  = array ($strweek, $strname, $strinfo, $strsubmitted, $strdeadline);
         $table->align = array ("CENTER", "LEFT", "LEFT", "LEFT", "LEFT");
     } elseif ($course->format == "topics") {
-        $table->head  = array ($strtopic, $strname, $strphase, $strsubmitted, $strdeadline);
+        $table->head  = array ($strtopic, $strname, $strinfo, $strsubmitted, $strdeadline);
         $table->align = array ("CENTER", "LEFT", "left", "LEFT", "LEFT");
     } else {
-        $table->head  = array ($strname, $strphase, $strsubmitted, $strdeadline);
+        $table->head  = array ($strname, $strinfo, $strsubmitted, $strdeadline);
         $table->align = array ("LEFT", "LEFT", "LEFT", "LEFT");
     }
 
     foreach ($workshops as $workshop) {
         switch ($workshop->phase) {
             case 0:
-            case 1: $phase = get_string("phase1short", "workshop");
-                    break;
-            case 2: $phase = get_string("phase2short", "workshop");
+            case 1: $info = get_string("phase1short", "workshop");
                     break;
-            case 3: $phase = get_string("phase3short", "workshop");
+            case 2: $info = get_string("phase2short", "workshop");
                     break;
-            case 4: $phase = get_string("phase4short", "workshop");
+            case 3: $info = get_string("phase3short", "workshop");
                     break;
-            case 5: $phase = get_string("phase5short", "workshop");
+            case 4: $info = get_string("phase4short", "workshop");
                     break;
-            case 6: $phase = get_string("phase6short", "workshop");
+            case 5: $info = get_string("phase5short", "workshop");
                     break;
         }
         if ($submissions = workshop_get_user_submissions($workshop, $USER)) {
                 $due = userdate($workshop->deadline);
                 if (!$workshop->visible) {
                     //Show dimmed if the mod is hidden
-                    $link = "<A class=\"dimmed\" HREF=\"view.php?id=$workshop->coursemodule\">$workshop->name</A><br />".
-                        "($submission->title)";
-                    } else {
+                    $link = "<A class=\"dimmed\" HREF=\"view.php?id=$workshop->coursemodule\">$workshop->name</A><br />";
+                } else {
                     //Show normal if the mod is visible
-                    $link = "<A HREF=\"view.php?id=$workshop->coursemodule\">$workshop->name</A><br />".
-                        "($submission->title)";
+                    $link = "<A HREF=\"view.php?id=$workshop->coursemodule\">$workshop->name</A><br />";
+                }
+                if (isstudent($course->id)) {
+                    $link .= " ($submission->title)"; // show students the title of their submission(s)
+                    $gradinggrade = workshop_gradinggrade($workshop, $USER);
+                    $grade = workshop_submission_grade($workshop, $submission);
+                    $info = get_string("gradeforassessments", "workshop").": $gradinggrade/$workshop->gradinggrade; ".
+                       get_string("gradeforsubmission", "workshop").": $grade/$workshop->grade"; 
                 }
                 if ($course->format == "weeks" or $course->format == "topics") {
-                    $table->data[] = array ($workshop->section, $link, $phase, $submitted, $due);
+                    $table->data[] = array ($workshop->section, $link, $info, $submitted, $due);
                 } 
                 else {
-                    $table->data[] = array ($link, $phase, $submitted, $due);
+                    $table->data[] = array ($link, $info, $submitted, $due);
+                }
+                if (isteacher($course->id)) {
+                    // teacher only needs to see one "submission"
+                    break;
                 }
             }
         }
                 $link = "<A HREF=\"view.php?id=$workshop->coursemodule\">$workshop->name</A>";
             }
             if ($course->format == "weeks" or $course->format == "topics") {
-                    $table->data[] = array ($workshop->section, $link, $phase, $submitted, $due);
+                    $table->data[] = array ($workshop->section, $link, $info, $submitted, $due);
             } 
             else {
-                $table->data[] = array ($link, $phase, $submitted, $due);
+                $table->data[] = array ($link, $info, $submitted, $due);
             }
         }
     }
index b4bed7af64ac98ee2cea5cf9063d6ddd709ff2cd..2cb311695c8a8df0bc8bdb8607302f02ec738ba9 100644 (file)
@@ -53,9 +53,14 @@ $WORKSHOP_EWEIGHTS = array(  0 => -4.0, 1 => -2.0, 2 => -1.5, 3 => -1.0, 4 => -0
 $WORKSHOP_FWEIGHTS = array(  0 => 0, 1 => 0.1, 2 => 0.25, 3 => 0.5, 4 => 0.75, 5 => 1.0,  6 => 1.5, 
                              7 => 2.0, 8 => 3.0, 9 => 5.0, 10 => 7.5, 11=> 10.0, 12=>50.0); 
 
-if (!defined("COMMENTSCALE")) {
-    define("COMMENTSCALE", 20);
-    }
+
+$WORKSHOP_ASSESSMENT_COMPS = array (
+                          0 => array('name' => get_string("verylax", "workshop"), 'value' => 1),
+                          1 => array('name' => get_string("lax", "workshop"), 'value' => 0.6),
+                          2 => array('name' => get_string("fair", "workshop"), 'value' => 0.4),
+                          3 => array('name' => get_string("strict", "workshop"), 'value' => 0.33),
+                          4 => array('name' => get_string("verystrict", "workshop"), 'value' => 0.2) );
+
 
 
 /*** Standard Moodle functions ******************
@@ -110,6 +115,15 @@ function workshop_cron () {
 
     global $CFG, $USER;
     
+    // if there any ungraded assessments run the grading routine
+    if ($workshops = get_records("workshop")) {
+        foreach ($workshops as $workshop) {
+            if (workshop_count_ungraded_assessments($workshop)) {
+                workshop_grade_assessments($workshop);
+            }
+        }
+    }
+    
     // Find all workshop notifications that have yet to be mailed out, and mails them
     $cutofftime = time() - $CFG->maxeditingtime;
 
@@ -595,24 +609,33 @@ function workshop_delete_instance($id) {
 ///////////////////////////////////////////////////////////////////////////////
 function workshop_grades($workshopid) {
 /// Must return an array of grades, indexed by user, and a max grade.
-/// only retruns grades in phase 6
+/// only retruns grades in phase 2 or greater
 global $CFG;
 
     if ($workshop = get_record("workshop", "id", $workshopid)) {
-        if ($workshop->phase == 6) {
-            if ($bestsubmissions = get_records_sql("SELECT userid, max(finalgrade) finalgrade FROM
-                    {$CFG->prefix}workshop_submissions WHERE workshopid = $workshopid GROUP
-                    BY userid")) {
-                foreach ($bestsubmissions as $bestgrade) {
-                    $return->grades[$bestgrade->userid] = $bestgrade->finalgrade;
+        if ($workshop->phase > 1) {
+            if ($students = get_course_students($workshop->course)) {
+                foreach ($students as $student) {
+                    $gradinggrade = workshop_gradinggrade($workshop, $student);
+                    if ($submissions = workshop_get_user_submissions($workshop, $student)) {
+                        $bestgrade = 0;
+                        foreach ($submissions as $submission) {
+                            $grade = workshop_submission_grade($workshop, $submission);
+                            if ($grade > $bestgrade) {
+                                $bestgrade = $grade;
+                            }
+                        }
+                    }
+                    $return->grades[$student->id] = $gradinggrade + $bestgrade;
                 }
             }
         }
-        $return->maxgrade = $workshop->grade;
+        $return->maxgrade = $workshop->grade + $workshop->gradinggrade;
     }
     return $return;
 }
 
+//////////////////////////////////////////////////////////////////////////////////////
 function workshop_is_recent_activity($course, $isteacher, $timestart) {//jlw1 added for adding mark to courses with activity in My Moodle
     global $CFG;
 
@@ -999,6 +1022,70 @@ function workshop_get_participants($workshopid) {
 
 //////////////////////////////////////////////////////////////////////////////////////
 // Non-standard workshop functions
+///////////////////////////////////////////////////////////////////////////////////////////////
+function workshop_compare_assessments($workshop, $assessment1, $assessment2) {
+    global $WORKSHOP_ASSESSMENT_COMPS, $WORKSHOP_EWEIGHTS;
+    // first get the assignment elements for maxscores...
+    $elementsraw = get_records("workshop_elements", "workshopid", $workshop->id, "elementno ASC");
+    foreach ($elementsraw as $element) {
+        $maxscore[] = $element->maxscore;   // to renumber index 0,1,2...
+        $weight[] = $WORKSHOP_EWEIGHTS[$element->weight];   // get real value and renumber index 0,1,2...
+    }
+    for ($i = 0; $i < 2; $i++) {
+        if ($i) {
+            $rawgrades = get_records("workshop_grades", "assessmentid", $assessment1->id, "elementno ASC");
+        } else {
+            $rawgrades = get_records("workshop_grades", "assessmentid", $assessment2->id, "elementno ASC");
+        }
+        foreach ($rawgrades as $grade) {
+            $grades[$i][] = $grade->grade;
+        }
+    }
+    $sumdiffs = 0;
+    $sumweights = 0;
+    switch ($workshop->gradingstrategy) {
+        case 1 : // accumulative grading and...
+        case 4 : // ...rubic grading
+            for ($i=0; $i < $workshop->nelements; $i++) {
+                $diff = ($grades[0][$i] - $grades[1][$i]) * $weight[$i] / $maxscore[$i];
+                $sumdiffs += $diff * $diff; // use squared distances
+                $sumweights += $weight[$i];
+                }
+            break;
+        case 2 :  // error banded grading
+            // ignore maxscores here, the grades are either 0 or 1,
+            for ($i=0; $i < $workshop->nelements; $i++) {
+                $diff = ($grades[0][$i] - $grades[1][$i]) * $weight[$i];
+                $sumdiffs += $diff * $diff; // use squared distances
+                $sumweights += $weight[$i];
+                }
+            break;
+        case 3 : // criterion grading
+            // here we only need to look at the difference between the "zero" grade elements
+            $diff = ($grades[0][0] - $grades[1][0]) / (count($elementsraw) - 1);
+            $sumdiffs = $diff * $diff;
+            $sumweights = 1;
+            break;
+    }            
+    // convert to a sensible grade (always out of 100)
+    $COMP = (object)$WORKSHOP_ASSESSMENT_COMPS[$workshop->assessmentcomps];
+    $factor = $COMP->value;
+    $gradinggrade = (($factor - ($sumdiffs / $sumweights)) / $factor) * 100;
+    if ($gradinggrade < 0) {
+        $gradinggrade = 0;
+    }
+    return $gradinggrade;
+}
+
+
+//////////////////////////////////////////////////////////////////////////////////////
+function workshop_count_ungraded_assessments($workshop) {
+    // function returns the number of ungraded assessments (ANY assessments)
+    
+    return count_records("workshop_assessments", "workshopid", $workshop->id, "timegraded", 0) ;
+    }
+
+
 //////////////////////////////////////////////////////////////////////////////////////
 function workshop_file_area($workshop, $submission) {
     return make_upload_directory( workshop_file_area_name($workshop, $submission) );
@@ -1059,6 +1146,24 @@ function workshop_get_assess_logs($course, $timestart) {
 }
 
 
+//////////////////////////////////////////////////////////////////////////////////////
+function workshop_get_assessments($submission, $all = '') {
+    // Return assessments for this submission ordered oldest first, newest last
+    // new assessments made within the editing time are NOT returned unless the
+    // second argument is set to ALL
+    global $CFG;
+
+    if ($all != 'ALL') {
+        $timenow = time();
+        return get_records_select("workshop_assessments", "(submissionid = $submission->id) AND 
+            (timecreated < $timenow - $CFG->maxeditingtime)", "timecreated DESC");
+    } else {
+        return get_records_select("workshop_assessments", "submissionid = $submission->id", 
+                "timecreated DESC");
+    }
+}
+
+
 ///////////////////////////////////////////////////////////////////////////////////////////////
 function workshop_get_comment_logs($course, $timestart) {
     // get the "comment" entries for this user and add the first and last names (which may not be used)...
@@ -1120,6 +1225,35 @@ function workshop_get_student_submission($workshop, $user) {
 }
 
 
+//////////////////////////////////////////////////////////////////////////////////////
+function workshop_get_student_submissions($workshop, $order = "title") {
+// Return all  ENROLLED student submissions
+    global $CFG;
+    
+    if ($order == "title") {
+        $order = "s.title";
+        }
+    if ($order == "name") {
+        $order = "a.lastname, a.firstname";
+        }
+
+    // make sure it works on the site course
+    $select = "u.course = '$workshop->course' AND";
+    $site = get_site();
+    if ($workshop->course == $site->id) {
+        $select = '';
+    }
+
+    return get_records_sql("SELECT s.* FROM {$CFG->prefix}workshop_submissions s, 
+                            {$CFG->prefix}user_students u, {$CFG->prefix}user a 
+                            WHERE $select s.userid = u.userid
+                              AND a.id = u.userid
+                              AND s.workshopid = $workshop->id
+                              AND s.timecreated > 0
+                              ORDER BY $order");
+}
+
+
 ///////////////////////////////////////////////////////////////////////////////////////////////
 function workshop_get_submit_logs($course, $timestart) {
     // get the "submit" entries and add the first and last names...
@@ -1189,43 +1323,267 @@ function workshop_get_unmailed_resubmissions($cutofftime) {
 
 
 //////////////////////////////////////////////////////////////////////////////////////
-function workshop_get_student_submissions($workshop, $order = "title") {
-// Return all  ENROLLED student submissions
-    global $CFG;
+function workshop_get_user_assessments($workshop, $user) {
+// Return all the  user's assessments, newest first, oldest last (hot, warm and cold ones)
+    return get_records_select("workshop_assessments", "workshopid = $workshop->id AND userid = $user->id", 
+                "timecreated DESC");
+}
+
+
+//////////////////////////////////////////////////////////////////////////////////////
+function workshop_get_user_submissions($workshop, $user) {
+    // return real submissions of user newest first, oldest last. Ignores the dummy submissions
+    // which get created to hold the final grades for users for make no submissions)
+    return get_records_select("workshop_submissions", "workshopid = $workshop->id AND 
+        userid = $user->id AND timecreated > 0", "timecreated DESC" );
+}
+
+
+//////////////////////////////////////////////////////////////////////////////////////
+function workshop_grade_assessments($workshop) {
+    global $WORKSHOP_EWEIGHTS;
     
-    if ($order == "title") {
-        $order = "s.title";
+    // timeout after 10 minutes
+    @set_time_limit(600);
+
+    $timenow = time();
+    
+    // set minumim value for the variance (of the elements)
+    $minvar = 0.05;
+
+    // calculate the means for each submission using just the "good" assessments 
+    if ($submissions = get_records("workshop_submissions", "workshopid", $workshop->id)) {
+        foreach ($submissions as $submission) {
+            $nassessments[$submission->id] = 0;
+            if ($assessments = workshop_get_assessments($submission)) {
+                foreach ($assessments as $assessment) {
+                    // test if assessment is "good", a teacher assessment always "good", but may be weighted out 
+                    if (isteacher($workshop->course, $assessment->userid)) {
+                        if (!$workshop->teacherweight) {
+                            // drop teacher's assessment as weight is zero
+                            continue;
+                        }
+                    } elseif ((!$assessment->gradinggrade and $assessment->timegraded) or 
+                            ($workshop->agreeassessments and !$assessment->timeagreed)) {
+                        // it's a duff assessment, or it's not been agreed
+                        continue;
+                        }
+                    if (isset($num[$submission->id])) {
+                        if (isteacher($workshop->course, $assessment->userid)) {
+                            $num[$submission->id] += $workshop->teacherweight; // weight teacher's assessment
+                        } else {
+                            $num[$submission->id]++; // number of assessments
+                        }
+                        $nassessments[$submission->id]++;
+                    } else {
+                        if (isteacher($workshop->course, $assessment->userid)) {
+                            $num[$submission->id] = $workshop->teacherweight;
+                        } else {
+                            $num[$submission->id] = 1;
+                        }
+                        $nassessments[$submission->id] = 1;
+                    }
+                    for ($i = 0; $i < $workshop->nelements; $i++) {
+                        $grade =  get_field("workshop_grades", "grade",
+                                "assessmentid", $assessment->id, "elementno", $i);
+                        if (isset($sum[$submission->id][$i])) {
+                            if (isteacher($workshop->course, $assessment->userid)) {
+                                $sum[$submission->id][$i] += $workshop->teacherweight * $grade; // teacher's grade
+                            } else {
+                                $sum[$submission->id][$i] += $grade; // student's grade
+                            }
+                        } else { 
+                            if (isteacher($workshop->course, $assessment->userid)) {
+                                $sum[$submission->id][$i] = $workshop->teacherweight * $grade; // teacher's grade
+                            } else {
+                                $sum[$submission->id][$i] = $grade; // students's grade
+                            }
+                        }
+                    }
+                }
+            }
         }
-    if ($order == "name") {
-        $order = "a.firstname, a.lastname";
+        
+        if (!isset($num)) { 
+            // no assessments yet
+            return;
+        }
+        reset($num);
+        // calculate the means for each submission
+        $total = 0;
+        foreach ($num as $submissionid => $n) {
+            if ($n) { // stop division by zero
+                for ($i = 0; $i < $workshop->nelements; $i++) {
+                    $mean[$submissionid][$i] = $sum[$submissionid][$i] / $n;
+                    // echo "Submission: $submissionid; Element: $i; Mean: {$mean[$submissionid][$i]}<br />\n";
+                }
+                $total += $n; // weighted total
+            }
         }
-    if ($order == "grade") {
-        $order = "$workshop->teacherweight * s.teachergrade + $workshop->peerweight * s.peergrade DESC";
+        echo "<p align=\"center\">".get_string("numberofsubmissions", "workshop", count($num))."<br />\n";
+        echo get_string("numberofassessmentsweighted", "workshop", $total)."</p>\n";
+
+        // now get an estimate of the standard deviation of each element in the assessment
+        // this is just a rough measure, all assessments are included and teacher's assesments are not weighted
+        $n = 0;
+        for ($i = 0; $i < $workshop->nelements; $i++) {
+            $var[$i] = 0;
+        }
+        foreach ($submissions as $submission) {
+            if ($assessments = workshop_get_assessments($submission)) {
+                foreach ($assessments as $assessment) {
+                    $n++;
+                    for ($i = 0; $i < $workshop->nelements; $i++) {
+                        $grade =  get_field("workshop_grades", "grade",
+                                "assessmentid", $assessment->id, "elementno", $i);
+                        $temp = $mean[$submission->id][$i] - $grade;
+                        $var[$i] += $temp * $temp;
+                    }
+                }
+            }
+        }
+        for ($i = 0; $i < $workshop->nelements; $i++) {
+            $sd[$i] = sqrt($var[$i] / ($n - 1));
+            echo "<p align=\"center\">".get_string("standarddeviationofelement", "workshop", $i+1)." $sd[$i]<br />";
+            if ($sd[$i] <= $minvar) {
+                print_string("standarddeviationnote", "workshop")."<br />\n";
+            }
+            echo "</p>\n";
         }
 
-    // make sure it works on the site course
-    $select = "u.course = '$workshop->course' AND";
-    if ($workshop->course == SITEID) {
-        $select = '';
-    }
+        // first get the assignment elements for maxscores (not used) and weights (used)...
+        $elementsraw = get_records("workshop_elements", "workshopid", $workshop->id, "elementno ASC");
+        foreach ($elementsraw as $element) {
+            $maxscore[] = $element->maxscore;   // to renumber index 0,1,2...
+            $weight[] = $element->weight;   // to renumber index 0,1,2...
+        }
 
-    return get_records_sql("SELECT s.* FROM {$CFG->prefix}workshop_submissions s, 
-                            {$CFG->prefix}user_students u, {$CFG->prefix}user a 
-                            WHERE $select s.userid = u.userid
-                              AND a.id = u.userid
-                              AND s.workshopid = $workshop->id
-                              AND s.timecreated > 0
-                              ORDER BY $order");
+        // ...if there are three or more assessments calculate the variance of each assessment.
+        // Use the variance to find the "best" assessment. (When there are two assessments they 
+        // are both "best", we cannot distinguish between them.)
+        foreach ($submissions as $submission) {
+            if ($nassessments[$submission->id] > 2) {
+                if ($assessments = workshop_get_assessments($submission)) {
+                    foreach ($assessments as $assessment) {
+                        if ($workshop->agreeassessments and !$assessment->timeagreed) {
+                            // ignore assessments that have not been agreed
+                            continue;
+                        }
+                        $var = 0;
+                        for ($i = 0; $i < $workshop->nelements; $i++) {
+                            $grade =  get_field("workshop_grades", "grade",
+                                    "assessmentid", $assessment->id, "elementno", $i);
+                            if ($sd[$i] > $minvar) {
+                                $temp = ($mean[$submission->id][$i] - $grade) * 
+                                    $WORKSHOP_EWEIGHTS[$weight[$i]] / $sd[$i];
+                            } else {
+                                $temp = 0;
+                            }
+                            $var += $temp * $temp;
+                        }
+                        // find the "best" assessment of each submission
+                        if (!isset($lowest[$submission->id])) {
+                            $lowest[$submission->id] = $var;
+                            $bestassessment[$submission->id] = $assessment->id;
+                        } else {
+                            if ($lowest[$submission->id] > $var) {
+                                $lowest[$submission->id] = $var;
+                                $bestassessment[$submission->id] = $assessment->id;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        // run thru the submissions again setting the grading grades using the "best" as the reference
+        $ndrop = 0;
+        foreach ($submissions as $submission) {
+            if ($assessments = workshop_get_assessments($submission)) {
+                if ($nassessments[$submission->id] > 2) {
+                    if (!$best = get_record("workshop_assessments", "id", $bestassessment[$submission->id])) {
+                        error("Workshop assessment analysis: cannot find best assessment");
+                    }
+                    foreach ($assessments as $assessment) {
+                        if ($assessment->id == $bestassessment->id) { 
+                            // it's the best one, set the grading grade to the maximum 
+                            set_field("workshop_assessments", "gradinggrade", 100, "id", $assessment->id);
+                            set_field("workshop_assessments", "timegraded", $timenow, "id", $assessment->id);
+                        } else {
+                            // it's one of the pack, compare with the best...
+                            $gradinggrade = workshop_compare_assessments($workshop, $best, $assessment);
+                            // ...and save the grade for the assessment 
+                            set_field("workshop_assessments", "gradinggrade", $gradinggrade, "id", $assessment->id);
+                            set_field("workshop_assessments", "timegraded", $timenow, "id", $assessment->id);
+                            if (!$gradinggrade) {
+                                $ndrop++;
+                            }
+                        }
+                    }
+                } else { // only one or two assessments, set it/both as "best"
+                    foreach ($assessments as $assessment) {
+                        set_field("workshop_assessments", "gradinggrade", 100, "id", $assessment->id);
+                        set_field("workshop_assessments", "timegraded", $timenow, "id", $assessment->id);
+                    }
+                }       
+            }
+        }
+    }
+    echo "<p align=\"center\">".get_string("numberofassessmentsdropped", "workshop", $ndrop)."</p>\n";
+    return;
 }
 
 
 //////////////////////////////////////////////////////////////////////////////////////
-function workshop_get_user_submissions($workshop, $user) {
-    // return real submissions of user newest first, oldest last. Ignores the dummy submissions
-    // which get created to hold the final grades for users for make no submissions)
-    return get_records_select("workshop_submissions", "workshopid = $workshop->id AND 
-        userid = $user->id AND timecreated > 0", "timecreated DESC" );
+function workshop_gradinggrade($workshop, $student) {
+    // returns the current (external) grading grade of the based on their (cold) assessments
+    // (needed as it's called by grade)
+    
+    $gradinggrade = 0;
+    if ($assessments = workshop_get_user_assessments($workshop, $student)) {
+        $n = 0;
+        foreach ($assessments as $assessment) {
+            $gradinggrade += $assessment->gradinggrade;
+            $n++;
+        }
+        if ($n < ($workshop->ntassessments + $workshop->nsassessments)) { // the minimum students should do
+            $n = $workshop->ntassessments + $workshop->nsassessments;
+        }
+        $gradinggrade = $gradinggrade / $n;
+    }
+    return number_format($gradinggrade * $workshop->gradinggrade / 100, 1);
 }
 
 
+//////////////////////////////////////////////////////////////////////////////////////
+function workshop_submission_grade($workshop, $submission) {
+    // returns the current (external) grade of the submission based on the "good" (cold) assessments
+    // (needed as it's called by grade)
+    
+    $grade = 0;
+    if ($assessments = workshop_get_assessments($submission)) {
+        $n = 0;
+        foreach ($assessments as $assessment) {
+            if ($workshop->agreeassessments and !$assessment->timeagreed) {
+                // ignore assessments which have not been agreed
+                continue;
+            }
+            if ($assessment->gradinggrade or !$assessment->timegraded) { 
+                // a good assessment (or one that has not been graded yet)
+                if (isteacher($workshop->course, $assessment->userid)) {
+                    $grade += $workshop->teacherweight * $assessment->grade;
+                    $n += $workshop->teacherweight;
+                } else {
+                    $grade += $assessment->grade;
+                    $n++;
+                }
+            }
+        }
+        if ($n) { // stop division by zero
+            $grade = $grade / $n;
+        }
+    }
+    return number_format($grade * $workshop->grade / 100, 1);
+}
+
 ?>
index fb6f2702943a8c7a7aaa774a7fec779697871383..ac1eb0473b320e583fb8bb8190d44cde22ecfc21 100644 (file)
@@ -9,6 +9,7 @@
 workshop_choose_from_menu ($options, $name, $selected="", $nothing="choose", $script="", 
     $nothingvalue="0", $return=false) {
 
+workshop_compare_assessments($workshop, $assessment1, $assessment2) { ---> in lib.php
 workshop_count_all_submissions_for_assessment($workshop, $user) {
 workshop_count_assessments($submission) {
 workshop_count_comments($assessment) {
@@ -19,6 +20,7 @@ workshop_count_student_submissions_for_assessment($workshop, $user) {
 workshop_count_teacher_assessments($workshop, $user) {
 workshop_count_teacher_submissions($workshop) {
 workshop_count_teacher_submissions_for_assessment($workshop, $user) {
+workshop_count_ungraded_assessments($workshop) { --->in lib.php
 workshop_count_ungraded_assessments_student($workshop) {
 workshop_count_ungraded_assessments_teacher($workshop) {
 workshop_count_user_assessments($worshop, $user, $type = "all") { $type is all, student or teacher
@@ -27,26 +29,28 @@ workshop_count_user_submissions($workshop, $user) {
 workshop_delete_submitted_files($workshop, $submission) {
 workshop_delete_user_files($workshop, $user, $exception) {
 
-workshop_file_area($workshop, $submission) { <--- in lib.php
-workshop_file_area_name($workshop, $submission) { <--- in lib.php
+workshop_file_area($workshop, $submission) { ---> in lib.php
+workshop_file_area_name($workshop, $submission) { ---> in lib.php
 
-workshop_get_assessments($submission) {
+workshop_get_assessments($submission, $all = '') { ---> in lib.php
 workshop_get_comments($assessment) {
 workshop_get_participants($workshopid) {
 workshop_get_student_assessments($workshop, $user) {
-workshop_get_student_submission($workshop, $user) { <--- in lib.php
+workshop_get_student_submission($workshop, $user) { ---> in lib.php
 workshop_get_student_submission_assessments($workshop) {
-workshop_get_student_submissions($workshop) { <--- in lib.php
+workshop_get_student_submissions($workshop) { ---> in lib.php
 workshop_get_submission_assessment($submission, $user) {
 workshop_get_teacher_submission_assessments($workshop) {
 workshop_get_teacher_submissions($workshop) {
 workshop_get_ungraded_assessments($workshop) {
 workshop_get_unmailed_assessments($cutofftime) {
 workshop_get_unmailed_marked_assessments($cutofftime) {
-workshop_get_user_assessments($workshop, $user) {
-workshop_get_user_submissions($workshop, $user) { <--- in lib.php
+workshop_get_user_assessments($workshop, $user) { ---> in lib.php
+workshop_get_user_submissions($workshop, $user) { ---> in lib.php
 workshop_get_users_done($workshop) {
 
+workshop_grade_assessments($workshop) { ---> in lib.php
+
 workshop_list_all_submissions($workshop) {
 workshop_list_all_ungraded_assessments($workshop) {
 workshop_list_assessed_submissions($workshop, $user) {
@@ -75,6 +79,8 @@ workshop_print_time_to_deadline($time) {
 workshop_print_upload_form($workshop) {
 workshop_print_user_assessments($workshop, $user) {
 
+workshop_submission_grade($submission) { ---> in lib.php
+    
 workshop_test_user_assessments($workshop, $user) {
 ***************************************/
 
@@ -265,18 +271,40 @@ function workshop_count_student_submissions($workshop) {
 //////////////////////////////////////////////////////////////////////////////////////
 function workshop_count_student_submissions_for_assessment($workshop, $user) {
     global $CFG;
+
+    if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
+        error("Course Module ID was incorrect");
+    }
+    if (! $course = get_record("course", "id", $workshop->course)) {
+        error("Course is misconfigured");
+        }
     
     $timenow = time();
+    if (groupmode($course, $cm) == SEPARATEGROUPS) {
+        $groupid = get_current_group($course->id);
+    } else {
+        $groupid = 0;
+    }
+    
     $n = 0;
     if ($submissions = workshop_get_student_submissions($workshop)) {
-        $n =count($submissions);
         foreach ($submissions as $submission) {
-            $n -= count_records_select("workshop_assessments", "submissionid = $submission->id AND 
-                userid = $user->id AND timecreated < $timenow - $CFG->maxeditingtime");
+            // check group membership, if necessary
+            if ($groupid) {
+                // check user's group
+                if (!ismember($groupid, $submission->userid)) {
+                    continue; // skip this user
+                }
+            }
+            // teacher assessed this submission
+            if (! count_records_select("workshop_assessments", "submissionid = $submission->id AND 
+                    userid = $user->id AND timecreated < $timenow - $CFG->maxeditingtime")) {
+                $n++;
             }
         }
-    return $n;
     }
+    return $n;
+}
 
 
 //////////////////////////////////////////////////////////////////////////////////////
@@ -479,24 +507,6 @@ function workshop_delete_user_files($workshop, $user, $exception) {
     }
 
 
-//////////////////////////////////////////////////////////////////////////////////////
-function workshop_get_assessments($submission, $all = '') {
-    // Return assessments for this submission ordered oldest first, newest last
-    // new assessments made within the editing time are NOT return unless the
-    // second argument is set to ALL
-    global $CFG;
-
-    if ($all != 'ALL') {
-        $timenow = time();
-        return get_records_select("workshop_assessments", "(submissionid = $submission->id) AND 
-            (timecreated < $timenow - $CFG->maxeditingtime)", "timecreated DESC");
-    } else {
-        return get_records_select("workshop_assessments", "submissionid = $submission->id", 
-                "timecreated DESC");
-    }
-}
-
-
 //////////////////////////////////////////////////////////////////////////////////////
 function workshop_get_comments($assessment) {
     // Return all comments for this assessment provided they are newer than the assessment, 
@@ -639,22 +649,14 @@ function workshop_get_ungraded_assessments_teacher($workshop) {
     }
 
 
-//////////////////////////////////////////////////////////////////////////////////////
-function workshop_get_user_assessments($workshop, $user) {
-// Return all the  user's assessments, newest first, oldest last (hot, warm and cold ones)
-    return get_records_select("workshop_assessments", "workshopid = $workshop->id AND userid = $user->id", 
-                "timecreated DESC");
-}
-
-
 //////////////////////////////////////////////////////////////////////////////////////
 function workshop_get_user_assessments_done($workshop, $user) {
-// Return all the  user's assessments, newest first, oldest last (warm and cold ones only)
+// Return all the  user's assessments, oldest first, newest last (warm and cold ones only)
 // ignores maxeditingtime
     $timenow = time();
     return get_records_select("workshop_assessments", "workshopid = $workshop->id AND userid = $user->id
                 AND timecreated < $timenow", 
-                "timecreated DESC");
+                "timecreated ASC");
 }
 
 
@@ -682,6 +684,9 @@ function workshop_list_all_submissions($workshop, $user) {
     // list the teacher sublmissions first
     global $CFG;
     
+    if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
+        error("Course Module ID was incorrect");
+    }
     if (! $course = get_record("course", "id", $workshop->course)) {
         error("Course is misconfigured");
         }
@@ -705,7 +710,7 @@ function workshop_list_all_submissions($workshop, $user) {
                     AND userid = $user->id")) {
                 $curtime = time();
                 if (($curtime - $assessment->timecreated) > $CFG->maxeditingtime) {
-                    $action = "<A HREF=\"assessments.php?action=viewassessment&a=$workshop->id&aid=$assessment->id\">"
+                    $action = "<A HREF=\"assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id\">"
                         .get_string("view", "workshop")."</A>";
                     // has teacher graded user's assessment?
                     if ($assessment->timegraded) {
@@ -715,12 +720,12 @@ function workshop_list_all_submissions($workshop, $user) {
                         }
                     }
                 else { // there's still time left to edit...
-                    $action = "<A HREF=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">".
+                    $action = "<A HREF=\"assessments.php?action=assesssubmission&id=$cm->id&sid=$submission->id\">".
                         get_string("edit", "workshop")."</A>";
                     }
                 }
             else { // user has not graded this submission
-                $action = "<A HREF=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">".
+                $action = "<A HREF=\"assessments.php?action=assesssubmission&id=$cm->id&sid=$submission->id\">".
                     get_string("assess", "workshop")."</A>";
                 }
             $table->data[] = array(workshop_print_submission_title($workshop, $submission), $action, 
@@ -752,7 +757,7 @@ function workshop_list_all_submissions($workshop, $user) {
                     AND userid = $user->id")) {
                 $curtime = time();
                 if (($curtime - $assessment->timecreated) > $CFG->maxeditingtime) {
-                    $action = "<A HREF=\"assessments.php?action=viewassessment&a=$workshop->id&aid=$assessment->id\">".
+                    $action = "<A HREF=\"assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id\">".
                         get_string("view", "workshop")."</A>";
                     // has teacher graded on user's assessment?
                     if ($assessment->timegraded) {
@@ -762,17 +767,17 @@ function workshop_list_all_submissions($workshop, $user) {
                         }
                     $otherassessments = workshop_get_assessments($submission);
                     if (count($otherassessments) > 1) {
-                        $comment .= "<A HREF=\"assessments.php?action=viewallassessments&a=$workshop->id&sid=$submission->id\">".
+                        $comment .= "<A HREF=\"assessments.php?action=viewallassessments&id=$cm->id&sid=$submission->id\">".
                         get_string("viewotherassessments", "workshop")."</A>";
                         }
                     }
                 else { // there's still time left to edit...
-                    $action = "<A HREF=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">".
+                    $action = "<A HREF=\"assessments.php?action=assesssubmission&id=$cm->id&sid=$submission->id\">".
                         get_string("edit", "workshop")."</A>";
                     }
                 }
             else { // user has not assessed this submission
-                $action = "<A HREF=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">".
+                $action = "<A HREF=\"assessments.php?action=assesssubmission&id=$cm->id&sid=$submission->id\">".
                     get_string("assess", "workshop")."</A>";
                 }
             $table->data[] = array(workshop_print_submission_title($workshop, $submission), $action, 
@@ -787,6 +792,10 @@ function workshop_list_all_submissions($workshop, $user) {
 function workshop_list_all_ungraded_assessments($workshop) {
     // lists all the assessments for comment by teacher
     global $CFG;
+
+    if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
+        error("Course Module ID was incorrect");
+    }
     
     $table->head = array (get_string("title", "workshop"), get_string("timeassessed", "workshop"), get_string("action", "workshop"));
     $table->align = array ("LEFT", "LEFT", "LEFT");
@@ -799,11 +808,11 @@ function workshop_list_all_ungraded_assessments($workshop) {
         foreach ($assessments as $assessment) {
             if (!isteacher($workshop->course, $assessment->userid)) {
                 if (($timenow - $assessment->timegraded) < $CFG->maxeditingtime) {
-                    $action = "<A HREF=\"assessments.php?action=gradeassessment&a=$workshop->id&aid=$assessment->id\">".
+                    $action = "<A HREF=\"assessments.php?action=gradeassessment&id=$cm->id&aid=$assessment->id\">".
                         get_string("edit", "workshop")."</A>";
                     }
                 else {
-                    $action = "<A HREF=\"assessments.php?action=gradeassessment&a=$workshop->id&aid=$assessment->id\">".
+                    $action = "<A HREF=\"assessments.php?action=gradeassessment&id=$cm->id&aid=$assessment->id\">".
                         get_string("gradeassessment", "workshop")."</A>";
                     }
                 $submission = get_record("workshop_submissions", "id", $assessment->submissionid);
@@ -823,6 +832,9 @@ function workshop_list_assessed_submissions($workshop, $user) {
     // list the submissions that have been assessed by this user and are COLD
     global $CFG;
     
+    if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
+        error("Course Module ID was incorrect");
+    }
     if (! $course = get_record("course", "id", $workshop->course)) {
         error("Course is misconfigured");
         }
@@ -842,55 +854,73 @@ function workshop_list_assessed_submissions($workshop, $user) {
             // 1. "hot", just created but not completed (timecreated is in the future)
             // 2. "warm" just created and still capable of being edited, and 
             // 3. "cold" after the editing time
+                
             if ($assessment->timecreated < ($timenow - $CFG->maxeditingtime)) { // it's cold
-                $action = "<A HREF=\"assessments.php?action=viewassessment&a=$workshop->id&aid=$assessment->id&".
-                    "allowcomments=$workshop->agreeassessments\">".
-                    get_string("view", "workshop")."</A>";
-                if ($workshop->agreeassessments and !$assessment->timeagreed) {
-                    $action .= " | <A HREF=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">".
-                        get_string("reassess", "workshop")."</A>";
+                if ($workshop->agreeassessments) {
+                    if (!$assessment->timeagreed) {
+                        $action = "<A HREF=\"assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id&".
+                            "allowcomments=$workshop->agreeassessments\">".
+                            get_string("view", "workshop")."</A>";
+                        $action .= " | <A HREF=\"assessments.php?action=assesssubmission&id=$cm->id&sid=$submission->id\">".
+                            get_string("reassess", "workshop")."</A>";
+                    } else {
+                        $action = "";
+                    }
+                } else {
+                    if ($assessment->timegraded) {
+                        $action = "<A HREF=\"assessments.php?action=assesssubmission&id=$cm->id&sid=$submission->id\">".
+                            get_string("reassess", "workshop")."</A>";
+                    } else {
+                        $action = "<A HREF=\"assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id\">".
+                            get_string("view", "workshop")."</A>";
                     }
+                }          
                 if ($assessment->timecreated < $timenow) { // only show the date if it's in the past (future dates cause confusion
                     $comment = get_string("assessedon", "workshop", userdate($assessment->timecreated));
-                    }
+                }
                 else {
                     $comment = '';
-                    }
+                }
                 if ($submission->userid == $user->id) { // self assessment?
                     $comment .= "; ".get_string("ownwork", "workshop"); // just in case they don't know!
-                    }
-                // has teacher commented on user's assessment?
+                }
+                // has assessment been graded?
                 if ($assessment->timegraded and ($timenow - $assessment->timegraded > $CFG->maxeditingtime)) {
-                    $comment .= "; ".get_string("gradedbyteacher", "workshop", $course->teacher);
-                    }
+                    $comment .= "; ".get_string("thegradeforthisassessmentis", "workshop", 
+                            number_format($assessment->gradinggrade * $workshop->gradinggrade / 100, 0)).
+                            " / $workshop->gradinggrade";
+                }
                 // if peer agrrements show whether agreement has been reached
                 if ($workshop->agreeassessments) {
                     if ($assessment->timeagreed) {
                         $comment .= "; ".get_string("assessmentwasagreedon", "workshop", 
                                 userdate($assessment->timeagreed));
-                        }
+                    }
                     else {
                         $comment .= "; ".get_string("assessmentnotyetagreed", "workshop");
-                        }
                     }
+                }
                 $table->data[] = array(workshop_print_submission_title($workshop, $submission), $action, 
                                     $comment);
-                }
             }
         }
+    }
     if (isset($table->data)) {
         print_table($table);
-        }
+    }
     else {
         echo "<CENTER>".get_string("noassessmentsdone", "workshop")."</CENTER>\n";
-        }
     }
+}
 
 
 //////////////////////////////////////////////////////////////////////////////////////
 function workshop_list_peer_assessments($workshop, $user) {
     global $CFG;
     
+    if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
+        error("Course Module ID was incorrect");
+    }
     if (! $course = get_record("course", "id", $workshop->course)) {
         error("Course is misconfigured");
         }
@@ -912,17 +942,23 @@ function workshop_list_peer_assessments($workshop, $user) {
                             ($assessment->userid != $user->id)) { 
                         $timenow = time();
                         if (($timenow - $assessment->timecreated) > $CFG->maxeditingtime) {
-                            $action = "<A HREF=\"assessments.php?action=viewassessment&a=$workshop->id&aid=$assessment->id&".
+                            $action = "<A HREF=\"assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id&".
                                 "allowcomments=$workshop->agreeassessments\">".
                                 get_string("view", "workshop")."</A>";
-                            $comment = get_string("assessedon", "workshop", 
-                                            userdate($assessment->timecreated));
-                            // has teacher commented on user's assessment?
-                            if ($assessment->timegraded and 
-                                    ($timenow - $assessment->timegraded > $CFG->maxeditingtime)) {
-                                $comment .= "; ".get_string("gradedbyteacher", "workshop", $course->teacher);
+                            $comment = get_string("assessedon", "workshop", userdate($assessment->timecreated));
+                            $grade = number_format($assessment->grade * $workshop->grade / 100, 1);
+                            $comment .= "; ".get_string("gradeforsubmission", "workshop").
+                                ": $grade / $workshop->grade"; 
+                            if ($assessment->timegraded) {
+                                if (!$assessment->gradinggrade) {
+                                    // it's a bad assessment
+                                    $comment .= "; ".get_string("thisisadroppedassessment", "workshop");
                                 }
-                            // if peer agrrements show whether agreement has been reached
+                            }
+                            if (isteacher($workshop->course, $assessment->userid) and $workshop->teacherweight) {
+                                $comment .= "; ".get_string("thisisadroppedassessment", "workshop");
+                            }
+                            // if peer agreements show whether agreement has been reached
                             if ($workshop->agreeassessments) {
                                 if ($assessment->timeagreed) {
                                     $comment .= "; ".get_string("assessmentwasagreedon", "workshop", 
@@ -955,6 +991,9 @@ function workshop_list_self_assessments($workshop, $user) {
     // list  user's submissions for the user to assess
     global $CFG;
     
+    if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
+        error("Course Module ID was incorrect");
+    }
     if (! $course = get_record("course", "id", $workshop->course)) {
         error("Course is misconfigured");
         }
@@ -974,7 +1013,7 @@ function workshop_list_self_assessments($workshop, $user) {
                 if ($submission->userid == $user->id) { // this will always be true
                     $comment = get_string("ownwork", "workshop"); // just in case they don't know!
                     }
-                $action = "<A HREF=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">".
+                $action = "<A HREF=\"assessments.php?action=assesssubmission&id=$cm->id&sid=$submission->id\">".
                     get_string("assess", "workshop")."</A>";
                 $table->data[] = array(workshop_print_submission_title($workshop, $submission), $action, $comment);
                 }
@@ -994,12 +1033,20 @@ function workshop_list_student_submissions($workshop, $user) {
     // of assessments are show first
     global $CFG;
     
-    $timenow = time();
+    if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
+        error("Course Module ID was incorrect");
+    }
     if (! $course = get_record("course", "id", $workshop->course)) {
         error("Course is misconfigured");
         }
-    if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $course->id)) {
-        error("Course Module ID was incorrect");
+
+    $timenow = time();
+
+    // set student's group if workshop is in SEPARATEGROUPS mode
+    if (groupmode($course, $cm) == SEPARATEGROUPS) {
+        $groupid = get_current_group($course->id);
+    } else {
+        $groupid = 0;
     }
     
     $table->head = array (get_string("title", "workshop"), get_string("action", "workshop"), get_string("comment", "workshop"));
@@ -1017,6 +1064,13 @@ function workshop_list_student_submissions($workshop, $user) {
         if ($submissions = workshop_get_student_submissions($workshop)) {
             // srand ((float)microtime()*1000000); // now done automatically in PHP 4.2.0->
             foreach ($submissions as $submission) {
+                // check group membership, if necessary
+                if ($groupid) {
+                    // check user's group
+                    if (!ismember($groupid, $submission->userid)) {
+                        continue; // skip this submission
+                  }
+                }
                 // process only cold submissions
                 if (($submission->timecreated + $CFG->maxeditingtime) > $timenow) {
                     continue;
@@ -1108,114 +1162,74 @@ function workshop_list_submissions_for_admin($workshop, $order) {
     // list the teacher sublmissions first
     global $CFG, $USER;
     
+    if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
+        error("Course Module ID was incorrect");
+    }
     if (! $course = get_record("course", "id", $workshop->course)) {
         error("Course is misconfigured");
         }
     if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $course->id)) {
         error("Course Module ID was incorrect");
     }
-
-    workshop_print_assignment_info($workshop);
-
-    // if peer assessments allow teacher to change overallocation option
-    if ($workshop->nsassessments) {
-        print_simple_box_start("center");
-        print_heading_with_help(get_string("setoverallocation", "workshop"), "overallocation", "workshop");
-        echo "<form name=\"overform\" method=\"post\" action=\"submissions.php\">\n";
-        echo "<input type=\"hidden\" name=\"id\" value=\"$cm->id\">\n";
-        echo "<input type=\"hidden\" name=\"action\" value=\"updateoverallocation\">\n";
-        echo "<center><table width=\"90%\" border=\"1\"><tr valign=\"top\">\n";
-        echo "<td align=\"right\"><p><b>".get_string("overallocation", "workshop").": </b></p></td>\n";
-        echo "<td valign=\"middle\">\n";
-        for ($i=2; $i>=0; $i--) {
-            $numbers[$i] = $i;
-        }
-        choose_from_menu($numbers, "overallocation", "$workshop->overallocation", "");
-        echo "</td></tr></table><br />\n";
-        echo "<INPUT TYPE=submit VALUE=\"".get_string("saveoverallocation", "workshop")."\">\n";
-        echo "</form></center>\n";
-        print_simple_box_end();
-    }
-
-    echo "<br />";
-    print_simple_box_start("center");
-    print_heading_with_help(get_string("leaguetable", "workshop"), "leaguetable", "workshop");
-    echo "<form name=\"leagueform\" method=\"post\" action=\"submissions.php\">\n";
-    echo "<INPUT TYPE=\"hidden\" NAME=\"id\" VALUE=\"$cm->id\">\n";
-    echo "<input type=\"hidden\" name=\"action\" value=\"updateleaguetable\">\n";
-    echo "<center><TABLE WIDTH=\"90%\" BORDER=\"1\">\n";
-    echo "<tr><td align=\"right\"><p><b>".get_string("numberofentries", "workshop").": </b><p></td>\n";
-    echo "<TD>";
-    unset($numbers);
-    $numbers[22] = 'All';
-    $numbers[21] = 50;
-    for ($i=20; $i>=0; $i--) {
-        $numbers[$i] = $i;
+    if (groupmode($course, $cm) == SEPARATEGROUPS) {
+        $groupid = get_current_group($course->id);
+    } else {
+        $groupid = 0;
     }
-    $nentries = $workshop->showleaguetable;
-    if ($nentries == 99) {
-        $nentries = 'All';
-    }
-    choose_from_menu($numbers, "nentries", "$nentries", "");
-    echo "</td></tr>\n";
-    echo "<tr><td align=right><p>".get_string("hidenamesfromstudents", "workshop", $course->students)."</p></td><td>\n";
-    $options[0] = get_string("no"); $options[1] = get_string("yes");
-    choose_from_menu($options, "anonymous", $workshop->anonymous, "");
-    echo "</td></tr>\n";
-    echo "</table><br />\n";
-    echo "<INPUT TYPE=submit VALUE=\"".get_string("saveleaguetableoptions", "workshop")."\">\n";
-    echo "</center></form>\n";
-    print_simple_box_end();
+    
+    workshop_print_assignment_info($workshop);
 
-    // list any teacher submissions
-    $table->head = array (get_string("title", "workshop"), get_string("submittedby", "workshop"), get_string("action", "workshop"));
-    $table->align = array ("left", "left", "left");
-    $table->size = array ("*", "*", "*");
-    $table->cellpadding = 2;
-    $table->cellspacing = 0;
+    if (isteacheredit($course->id)) {
+        // list any teacher submissions
+        $table->head = array (get_string("title", "workshop"), get_string("submittedby", "workshop"), 
+                get_string("action", "workshop"));
+        $table->align = array ("left", "left", "left");
+        $table->size = array ("*", "*", "*");
+        $table->cellpadding = 2;
+        $table->cellspacing = 0;
 
-    if ($submissions = workshop_get_teacher_submissions($workshop)) {
-        foreach ($submissions as $submission) {
-            $action = "<a href=\"submissions.php?action=adminamendtitle&a=$workshop->id&sid=$submission->id\">".
-                get_string("amendtitle", "workshop")."</a>";
-            // has user already assessed this submission
-            if ($assessment = get_record_select("workshop_assessments", "submissionid = $submission->id
-                    AND userid = $USER->id")) {
-                $curtime = time();
+        if ($submissions = workshop_get_teacher_submissions($workshop)) {
+            foreach ($submissions as $submission) {
+                $action = "<a href=\"submissions.php?action=adminamendtitle&id=$cm->id&sid=$submission->id\">".
+                    get_string("amendtitle", "workshop")."</a>";
+                // has user already assessed this submission
+                if ($assessment = get_record_select("workshop_assessments", "submissionid = $submission->id
+                            AND userid = $USER->id")) {
+                    $curtime = time();
                 if ($assessment->timecreated > $curtime) { // it's a "hanging" assessment 
-                    $action .= " | <a href=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">".
+                    $action .= " | <a href=\"assessments.php?action=assesssubmission&id=$cm->id&sid=$submission->id\">".
                         get_string("assess", "workshop")."</a>";
                 }
                 elseif (($curtime - $assessment->timecreated) > $CFG->maxeditingtime) {
-                    $action .= " | <a href=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">"
+                    $action .= " | <a href=\"assessments.php?action=assesssubmission&id=$cm->id&sid=$submission->id\">"
                         .get_string("reassess", "workshop")."</a>";
                 }
                 else { // there's still time left to edit...
-                    $action .= " | <a href=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">".
+                    $action .= " | <a href=\"assessments.php?action=assesssubmission&id=$cm->id&sid=$submission->id\">".
                         get_string("edit", "workshop")."</a>";
                 }
             }
-            else { // user has not graded this submission
-                $action .= " | <a href=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">".
-                    get_string("assess", "workshop")."</a>";
-            }
-            if ($assessments = workshop_get_assessments($submission)) {
-                $action .= " | <a href=\"assessments.php?action=adminlist&a=$workshop->id&sid=$submission->id\">".
-                    get_string("listassessments", "workshop")."</a>";
+                else { // user has not graded this submission
+                    $action .= " | <a href=\"assessments.php?action=assesssubmission&id=$cm->id&sid=$submission->id\">".
+                        get_string("assess", "workshop")."</a>";
                 }
-            $action .= " | <a href=\"submissions.php?action=adminconfirmdelete&a=$workshop->id&sid=$submission->id\">".
+                if ($assessments = workshop_get_assessments($submission)) {
+                    $action .= " | <a href=\"assessments.php?action=adminlist&id=$cm->id&sid=$submission->id\">".
+                        get_string("listassessments", "workshop")."</a>";
+                }
+                $action .= " | <a href=\"submissions.php?action=adminconfirmdelete&id=$cm->id&sid=$submission->id\">".
                     get_string("delete", "workshop")."</a>";
-            $table->data[] = array(workshop_print_submission_title($workshop, $submission), $course->teacher, $action);
+                $table->data[] = array(workshop_print_submission_title($workshop, $submission), $course->teacher, $action);
+            }
+            print_heading(get_string("studentsubmissions", "workshop", $course->teacher), "center");
+            print_table($table);
         }
-        print_heading(get_string("studentsubmissions", "workshop", $course->teacher), "center");
-        print_table($table);
     }
 
     // list student assessments
     // Get all the students...
-    if ($users = get_course_students($course->id, "u.firstname, u.lastname")) {
+    if ($users = get_course_students($course->id, "u.lastname, u.firstname")) {
         $timenow = time();
-        print_heading(get_string("studentassessments", "workshop", $course->student));
         unset($table);
         $table->head = array(get_string("name"), get_string("title", "workshop"), get_string("action", "workshop"));
         $table->align = array ("left", "left", "left");
@@ -1223,6 +1237,13 @@ function workshop_list_submissions_for_admin($workshop, $order) {
         $table->cellpadding = 2;
         $table->cellspacing = 0;
         foreach ($users as $user) {
+            // check group membership, if necessary
+            if ($groupid) {
+                // check user's group
+                if (!ismember($groupid, $user->id)) {
+                    continue; // skip this user
+                }
+            }
             // list the assessments which have been done (exclude the hot ones)
             if ($assessments = workshop_get_user_assessments_done($workshop, $user)) {
                 $title ='';
@@ -1231,22 +1252,24 @@ function workshop_list_submissions_for_admin($workshop, $order) {
                         error("Workshop_list_submissions_for_admin: Submission record not found!");
                     }
                     $title .= $submission->title;
-                    // test for allocated assesments which have not been done
-                    if ($assessment->timecreated < $timenow) {
-                        $title .= " {".number_format($assessment->grade, 0);
-                    }
-                    else { // assessment record created but user has not yet assessed this submission
-                        $title .= " {-";
-                    }
                     if ($assessment->timegraded) {
-                        $title .= "/".number_format($assessment->gradinggrade * 100 / COMMENTSCALE, 0)."%";
+                        if ($assessment->gradinggrade) {
+                            // a good assessment
+                            $title .= " {".number_format($assessment->grade * $workshop->grade / 100, 0)." (".
+                                number_format($assessment->gradinggrade * $workshop->gradinggrade / 100, 0).")} ";
+                        } else { 
+                            // a poor assessment
+                            $title .= " <".number_format($assessment->grade * $workshop->grade / 100, 0)." (".
+                                number_format($assessment->gradinggrade * $workshop->gradinggrade / 100, 0).")> ";
+                        }
+                    } else {
+                        // not yet graded
+                        $title .= " {".number_format($assessment->grade * $workshop->grade / 100, 0)." (-)} ";
                     }
-                    $title .= "} ";
                     if ($realassessments = workshop_count_user_assessments_done($workshop, $user)) {
-                        $action = "<a href=\"assessments.php?action=adminlistbystudent&a=$workshop->id&userid=$user->id\">".
+                        $action = "<a href=\"assessments.php?action=adminlistbystudent&id=$cm->id&userid=$user->id\">".
                             get_string("liststudentsassessments", "workshop")." ($realassessments)</a>";
-                    }
-                    else {
+                    } else {
                         $action ="";
                     }
                 }
@@ -1254,6 +1277,35 @@ function workshop_list_submissions_for_admin($workshop, $order) {
             }
         }
         if (isset($table->data)) {
+            print_heading(get_string("studentassessments", "workshop", $course->student));
+            print_table($table);
+            workshop_print_key($workshop);
+            // grading grade analysis
+            unset($table);
+            $table->head = array (get_string("count", "workshop"), get_string("mean", "workshop"),
+                get_string("standarddeviation", "workshop"), get_string("maximum", "workshop"), 
+                get_string("minimum", "workshop"));
+            $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}workshop_assessments a 
+                        WHERE g.groupid = $groupid AND a.userid = g.userid AND a.timegraded > 0 
+                        AND a.workshopid = $workshop->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}workshop_assessments a 
+                        WHERE a.timegraded > 0 AND a.workshopid = $workshop->id");
+            }   
+            $table->data[] = array($stats->count, number_format($stats->mean * $workshop->gradinggrade / 100, 1), 
+                    number_format($stats->stddev * $workshop->gradinggrade /100, 1), 
+                    number_format($stats->max * $workshop->gradinggrade / 100, 1), 
+                    number_format($stats->min* $workshop->gradinggrade / 100, 1));
+            print_heading(get_string("gradinggrade", "workshop")." ".get_string("analysis", "workshop"));
             print_table($table);
         }
     }
@@ -1262,12 +1314,12 @@ function workshop_list_submissions_for_admin($workshop, $order) {
     unset($table);
     switch ($order) {
         case "title" :
-            $table->head = array("<a href=\"submissions.php?action=adminlist&a=$workshop->id&order=name\">".
+            $table->head = array("<a href=\"submissions.php?action=adminlist&id=$cm->id&order=name\">".
                  get_string("submittedby", "workshop")."</a>", get_string("title", "workshop"), get_string("action", "workshop"));
             break;
         case "name" :
             $table->head = array (get_string("submittedby", "workshop"), 
-                "<a href=\"submissions.php?action=adminlist&a=$workshop->id&order=title\">".
+                "<a href=\"submissions.php?action=adminlist&id=$cm->id&order=title\">".
                 get_string("title", "workshop")."</a>", get_string("action", "workshop"));
             break;
     }
@@ -1281,37 +1333,46 @@ function workshop_list_submissions_for_admin($workshop, $order) {
             if (!$user = get_record("user", "id", $submission->userid)) {
                 error("workshop_list_submissions_for_admin: failure to get user record");
             }
-            $action = "<a href=\"submissions.php?action=adminamendtitle&a=$workshop->id&sid=$submission->id\">".
+            // check group membership, if necessary
+            if ($groupid) {
+                // check user's group
+                if (!ismember($groupid, $user->id)) {
+                    continue; // skip this user
+                }
+            }
+            $action = "<a href=\"submissions.php?action=adminamendtitle&id=$cm->id&sid=$submission->id\">".
                 get_string("amendtitle", "workshop")."</a>";
             // has teacher already assessed this submission
             if ($assessment = get_record_select("workshop_assessments", "submissionid = $submission->id
                     AND userid = $USER->id")) {
                 $curtime = time();
                 if (($curtime - $assessment->timecreated) > $CFG->maxeditingtime) {
-                    $action .= " | <a href=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">".
+                    $action .= " | <a href=\"assessments.php?action=assesssubmission&id=$cm->id&sid=$submission->id\">".
                         get_string("reassess", "workshop")."</a>";
                 }
                 else { // there's still time left to edit...
-                    $action .= " | <a href=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">".
+                    $action .= " | <a href=\"assessments.php?action=assesssubmission&id=$cm->id&sid=$submission->id\">".
                         get_string("edit", "workshop")."</a>";
                 }
             }
             else { // user has not assessed this submission
-                $action .= " | <a href=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">".
+                $action .= " | <a href=\"assessments.php?action=assesssubmission&id=$cm->id&sid=$submission->id\">".
                     get_string("assess", "workshop")."</a>";
             }
             if ($nassessments = workshop_count_assessments($submission)) {
-                $action .= " | <a href=\"assessments.php?action=adminlist&a=$workshop->id&sid=$submission->id\">".
+                $action .= " | <a href=\"assessments.php?action=adminlist&id=$cm->id&sid=$submission->id\">".
                     get_string("listassessments", "workshop")." ($nassessments)</a>";
             }
-            $action .= " | <a href=\"submissions.php?action=adminconfirmdelete&a=$workshop->id&sid=$submission->id\">".
+            $action .= " | <a href=\"submissions.php?action=adminconfirmdelete&id=$cm->id&sid=$submission->id\">".
                 get_string("delete", "workshop")."</a>";
-            $table->data[] = array(fullname($user), $submission->title.
-                " ".workshop_print_submission_assessments($workshop, $submission, "teacher").
-                " ".workshop_print_submission_assessments($workshop, $submission, "student"), $action);
+            $table->data[] = array("$user->firstname $user->lastname", $submission->title.
+                " (".get_string("grade").": ".workshop_submission_grade($workshop, $submission)." ".
+                workshop_print_submission_assessments($workshop, $submission, "teacher").
+                " ".workshop_print_submission_assessments($workshop, $submission, "student").")", $action);
         }
         print_heading(get_string("studentsubmissions", "workshop", $course->student), "center");
         print_table($table);
+        workshop_print_key($workshop);
     }
 }
 
@@ -1320,9 +1381,14 @@ function workshop_list_submissions_for_admin($workshop, $order) {
 function workshop_list_teacher_assessments($workshop, $user) {
     global $CFG;
     
+    $timenow = time();
+    if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
+        error("Course Module ID was incorrect");
+    }
     if (! $course = get_record("course", "id", $workshop->course)) {
         error("Course is misconfigured");
-        }
+    }
+
     $table->head = array (get_string("title", "workshop"), get_string("action", "workshop"), get_string("comment", "workshop"));
     $table->align = array ("LEFT", "LEFT", "LEFT");
     $table->size = array ("*", "*", "*");
@@ -1336,7 +1402,7 @@ function workshop_list_teacher_assessments($workshop, $user) {
             if ($assessments = workshop_get_assessments($submission)) {
                 foreach ($assessments as $assessment) {
                     if (isteacher($workshop->course, $assessment->userid)) { // assessments by teachers only
-                        $action = "<A HREF=\"assessments.php?action=viewassessment&a=$workshop->id&aid=$assessment->id\">".
+                        $action = "<A HREF=\"assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id\">".
                             get_string("view", "workshop")."</A>";
                         // has teacher commented on teacher's assessment? shouldn't happen but leave test in
                         if ($assessment->timegraded and ($timenow - $assessment->timegraded > $CFG->maxeditingtime)) {
@@ -1365,9 +1431,12 @@ function workshop_list_teacher_assessments($workshop, $user) {
 function workshop_list_teacher_submissions($workshop, $user) {
     global $CFG;
     
+    if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
+        error("Course Module ID was incorrect");
+    }
     if (! $course = get_record("course", "id", $workshop->course)) {
         error("Course is misconfigured");
-        }
+    }
     $table->head = array (get_string("title", "workshop"), get_string("action", "workshop"), get_string("comment", "workshop"));
     $table->align = array ("LEFT", "LEFT", "LEFT");
     $table->size = array ("*", "*", "*");
@@ -1386,7 +1455,7 @@ function workshop_list_teacher_submissions($workshop, $user) {
                 $n = count_records("workshop_assessments", "submissionid", $submission->id);
                 // ...OK to have zero, we add a small random number to randomise things...
                 $nassessments[$submission->id] = $n + rand(0, 99) / 100;
-                }
+            }
             // ...put the submissions with the lowest number of assessments first...
             asort($nassessments);
             reset($nassessments);
@@ -1405,50 +1474,55 @@ function workshop_list_teacher_submissions($workshop, $user) {
                     $assessment->timecreated = $yearfromnow;
                     if (!$assessment->id = insert_record("workshop_assessments", $assessment)) {
                         error("Could not insert workshop assessment!");
-                        }
+                    }
                     $nassessed++;
                     if ($nassessed >= $workshop->ntassessments) {
                         break;
-                        }
                     }
                 }
             }
         }
+    }
     // now list user's assessments (but only list those which come from teacher submissions)
     if ($assessments = workshop_get_user_assessments($workshop, $user)) {
         $timenow = time();
         foreach ($assessments as $assessment) {
             if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) {
                 error ("workshop_list_teacher_submissions: unable to get submission");
-                }
+            }
             // submission from a teacher?
             if (isteacher($workshop->course, $submission->userid)) {
                 $comment = '';
-                // user assessment has three states: record created but not assessed (date created in the future); 
-                // just assessed but still editable; and "static" (may or may not have been graded by teacher, that
-                // is shown in the comment) 
-                if ($assessment->timecreated> $timenow) { // user needs to assess this submission
-                    $action = "<A HREF=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">".
+                // user assessment has two states: record created but not assessed (date created in the future); 
+                // assessed but always available for re-assessment 
+                if ($assessment->timecreated > $timenow) { // user needs to assess this submission
+                    $action = "<A HREF=\"assessments.php?action=assesssubmission&id=$cm->id&sid=$submission->id\">".
                         get_string("assess", "workshop")."</A>";
-                    }
-                elseif (($timenow - $assessment->timecreated) < $CFG->maxeditingtime) { // there's still time left to edit...
-                    $action = "<A HREF=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">".
-                        get_string("edit", "workshop")."</A>";
-                    }
-                else { 
-                    $action = "<A HREF=\"assessments.php?action=viewassessment&a=$workshop->id&aid=$assessment->id\">"
-                        .get_string("view", "workshop")."</A>";
-                    }
-                // see if teacher has graded assessment
-                if ($assessment->timegraded and (($timenow - $assessment->timegraded) > $CFG->maxeditingtime)) {
-                    $comment .= get_string("thereisfeedbackfromtheteacher", "workshop", $course->teacher);
-                    }
-                $table->data[] = array(workshop_print_submission_title($workshop, $submission), $action, $comment);
                 }
+                elseif ($assessment->timegraded) { 
+                    // allow student to improve on their assessment once it's been graded
+                    $action = "<A HREF=\"assessments.php?action=assesssubmission&id=$cm->id&sid=$submission->id\">".
+                        get_string("reassess", "workshop")."</A>";
+                } else {
+                    // allow student  just to see their assessment if it hasn't been graded
+                    $action = "<A HREF=\"assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id\">".
+                        get_string("view", "workshop")."</A>";
+                }
+                // see if the assessment is graded
+                if ($assessment->timegraded) {
+                    // show grading grade
+                    $comment = get_string("thegradeforthisassessmentis", "workshop", 
+                            number_format($assessment->gradinggrade * $workshop->gradinggrade / 100, 1))." / ".
+                            $workshop->gradinggrade;
+                } elseif ($assessment->timecreated < $timenow) {
+                    $comment = get_string("awaitinggradingbyteacher", "workshop", $course->teacher);
+                }
+                $table->data[] = array(workshop_print_submission_title($workshop, $submission), $action, $comment);
             }
         }
-    print_table($table);
     }
+    print_table($table);
+}
 
 
 //////////////////////////////////////////////////////////////////////////////////////
@@ -1456,6 +1530,19 @@ function workshop_list_unassessed_student_submissions($workshop, $user) {
     // list the student submissions not assessed by this user
     global $CFG;
     
+    if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
+        error("Course Module ID was incorrect");
+    }
+    if (! $course = get_record("course", "id", $workshop->course)) {
+        error("Course is misconfigured");
+        }
+
+    if (groupmode($course, $cm) == SEPARATEGROUPS) {
+        $groupid = get_current_group($course->id);
+    } else {
+        $groupid = 0;
+    }
+
     $table->head = array (get_string("title", "workshop"), get_string("submittedby", "workshop"),
         get_string("action", "workshop"), get_string("comment", "workshop"));
     $table->align = array ("LEFT", "LEFT", "LEFT", "LEFT");
@@ -1465,6 +1552,13 @@ function workshop_list_unassessed_student_submissions($workshop, $user) {
 
     if ($submissions = workshop_get_student_submissions($workshop)) {
         foreach ($submissions as $submission) {
+            // check group membership, if necessary
+            if ($groupid) {
+                // check user's group
+                if (!ismember($groupid, $submission->userid)) {
+                    continue; // skip this user
+                }
+            }
             $comment = "";
             // see if user already graded this assessment
             if ($assessment = get_record_select("workshop_assessments", "submissionid = $submission->id
@@ -1473,7 +1567,7 @@ function workshop_list_unassessed_student_submissions($workshop, $user) {
                 if (($timenow - $assessment->timecreated < $CFG->maxeditingtime)) {
                     // last chance salon
                     $submissionowner = get_record("user", "id", $submission->userid);
-                    $action = "<A HREF=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">".
+                    $action = "<A HREF=\"assessments.php?action=assesssubmission&id=$cm->id&sid=$submission->id\">".
                         get_string("edit", "workshop")."</A>";
                     $table->data[] = array(workshop_print_submission_title($workshop, $submission), 
                         fullname($submissionowner), $action, $comment);
@@ -1481,7 +1575,7 @@ function workshop_list_unassessed_student_submissions($workshop, $user) {
                 }
             else { // no assessment
                 $submissionowner = get_record("user", "id", $submission->userid);
-                $action = "<A HREF=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">".
+                $action = "<A HREF=\"assessments.php?action=assesssubmission&id=$cm->id&sid=$submission->id\">".
                     get_string("assess", "workshop")."</A>";
                 $table->data[] = array(workshop_print_submission_title($workshop, $submission), 
                     fullname($submissionowner), $action, $comment);
@@ -1499,7 +1593,12 @@ function workshop_list_unassessed_teacher_submissions($workshop, $user) {
     // list the teacher submissions not assessed by this user
     global $CFG;
     
-    $table->head = array (get_string("title", "workshop"), get_string("action", "workshop"), get_string("comment", "workshop"));
+    if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
+        error("Course Module ID was incorrect");
+    }
+
+    $table->head = array (get_string("title", "workshop"), get_string("action", "workshop"), 
+            get_string("comment", "workshop"));
     $table->align = array ("LEFT", "LEFT", "LEFT");
     $table->size = array ("*", "*", "*");
     $table->cellpadding = 2;
@@ -1514,13 +1613,13 @@ function workshop_list_unassessed_teacher_submissions($workshop, $user) {
                 $timenow = time();
                 if (($timenow - $assessment->timecreated < $CFG->maxeditingtime)) {
                     // last chance salon
-                    $action = "<A HREF=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">".
+                    $action = "<A HREF=\"assessments.php?action=assesssubmission&id=$cm->id&sid=$submission->id\">".
                         get_string("edit", "workshop")."</A>";
                     $table->data[] = array(workshop_print_submission_title($workshop, $submission), $action, $comment);
                     }
                 }
             else { // no assessment
-                $action = "<A HREF=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">".
+                $action = "<A HREF=\"assessments.php?action=assesssubmission&id=$cm->id&sid=$submission->id\">".
                     get_string("assess", "workshop")."</A>";
                 $table->data[] = array(workshop_print_submission_title($workshop, $submission), $action, $comment);
                 }
@@ -1534,9 +1633,13 @@ function workshop_list_unassessed_teacher_submissions($workshop, $user) {
 
 //////////////////////////////////////////////////////////////////////////////////////
 function workshop_list_ungraded_assessments($workshop, $stype) {
+    // lists all the assessments of student submissions for grading by teacher
     global $CFG;
     
-    // lists all the assessments of student submissions for grading by teacher
+    if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
+        error("Course Module ID was incorrect");
+    }
+
     $table->head = array (get_string("title", "workshop"), get_string("submittedby", "workshop"),
     get_string("assessor", "workshop"), get_string("timeassessed", "workshop"), get_string("action", "workshop"));
     $table->align = array ("LEFT", "LEFT", "LEFT", "LEFT");
@@ -1557,11 +1660,11 @@ function workshop_list_ungraded_assessments($workshop, $stype) {
         foreach ($assessments as $assessment) {
             if (!isteacher($workshop->course, $assessment->userid)) { // don't let teacher grade their own assessments
                 if (($timenow - $assessment->timegraded) < $CFG->maxeditingtime) {
-                    $action = "<A HREF=\"assessments.php?action=gradeassessment&a=$workshop->id&stype=$stype&aid=$assessment->id\">".
+                    $action = "<A HREF=\"assessments.php?action=gradeassessment&id=$cm->id&stype=$stype&aid=$assessment->id\">".
                         get_string("edit", "workshop")."</A>";
                     }
                 else {
-                    $action = "<A HREF=\"assessments.php?action=gradeassessment&a=$workshop->id&stype=$stype&aid=$assessment->id\">".
+                    $action = "<A HREF=\"assessments.php?action=gradeassessment&id=$cm->id&stype=$stype&aid=$assessment->id\">".
                         get_string("grade", "workshop")."</A>";
                     }
                 $submission = get_record("workshop_submissions", "id", $assessment->submissionid);
@@ -1582,6 +1685,10 @@ function workshop_list_ungraded_assessments($workshop, $stype) {
 function workshop_list_user_submissions($workshop, $user) {
     global $CFG;
 
+    if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
+        error("Course Module ID was incorrect");
+    }
+
     $timenow = time();
     $table->head = array (get_string("title", "workshop"),  get_string("action", "workshop"),
         get_string("submitted", "assignment"),  get_string("assessments", "workshop"));
@@ -1594,7 +1701,7 @@ function workshop_list_user_submissions($workshop, $user) {
         foreach ($submissions as $submission) {
             // allow user to delete a submission if it's warm
             if ($submission->timecreated > ($timenow - $CFG->maxeditingtime)) {
-                $action = "<a href=\"submissions.php?action=userconfirmdelete&a=$workshop->id&sid=$submission->id\">".
+                $action = "<a href=\"submissions.php?action=userconfirmdelete&id=$cm->id&sid=$submission->id\">".
                     get_string("delete", "workshop")."</a>";
             }
             else {
@@ -1683,23 +1790,23 @@ function workshop_print_assessment($workshop, $assessment = false, $allowchanges
                     // show links depending on who doing the viewing
                     $firstcomment = FALSE;
                     if (isteacher($workshop->course, $USER->id) and ($comment->userid != $USER->id)) {
-                        echo "<P ALIGN=RIGHT><A HREF=\"assessments.php?action=addcomment&a=$workshop->id&aid=$assessment->id\">".
+                        echo "<P ALIGN=RIGHT><A HREF=\"assessments.php?action=addcomment&id=$cm->id&aid=$assessment->id\">".
                             get_string("reply", "workshop")."</A>\n";
                         }
                     elseif (($comment->userid ==$USER->id) and (($timenow - $comment->timecreated) < $CFG->maxeditingtime)) {
-                        echo "<P ALIGN=RIGHT><A HREF=\"assessments.php?action=editcomment&a=$workshop->id&cid=$comment->id\">".
+                        echo "<P ALIGN=RIGHT><A HREF=\"assessments.php?action=editcomment&id=$cm->id&cid=$comment->id\">".
                             get_string("edit", "workshop")."</A>\n";
                         if ($USER->id == $submission->userid) {
-                            echo " | <A HREF=\"assessments.php?action=agreeassessment&a=$workshop->id&aid=$assessment->id\">".
+                            echo " | <A HREF=\"assessments.php?action=agreeassessment&id=$cm->id&aid=$assessment->id\">".
                                 get_string("agreetothisassessment", "workshop")."</A>\n";
                             }
                         }
                     elseif (($comment->userid != $USER->id) and (($USER->id == $assessment->userid) or 
                         ($USER->id == $submission->userid))) {
-                        echo "<P ALIGN=RIGHT><A HREF=\"assessments.php?action=addcomment&a=$workshop->id&aid=$assessment->id\">".
+                        echo "<P ALIGN=RIGHT><A HREF=\"assessments.php?action=addcomment&id=$cm->id&aid=$assessment->id\">".
                             get_string("reply", "workshop")."</A>\n";
                         if ($USER->id == $submission->userid) {
-                            echo " | <A HREF=\"assessments.php?action=agreeassessment&a=$workshop->id&aid=$assessment->id\">".
+                            echo " | <A HREF=\"assessments.php?action=agreeassessment&id=$cm->id&aid=$assessment->id\">".
                                 get_string("agreetothisassessment", "workshop")."</A>\n";
                             }
                         }
@@ -1716,7 +1823,7 @@ function workshop_print_assessment($workshop, $assessment = false, $allowchanges
             }
         }
         
-    // now print the grading form with the teacher's comments if any
+    // now print the grading form with the grading grade if any
     // FORM is needed for Mozilla browsers, else radio bttons are not checked
         ?>
     <form name="assessmentform" method="post" action="assessments.php">
@@ -2129,23 +2236,19 @@ function workshop_print_assessment($workshop, $assessment = false, $allowchanges
     echo "</tr>\n";
     
     $timenow = time();
-    // now show the teacher's comment if available...
-    if ($assessment->timegraded and (($timenow - $assessment->timegraded) > $CFG->maxeditingtime)) {
-        echo "<tr valign=top>\n";
-        echo "  <td align=\"right\"><p><b>". get_string("teacherscomment", "workshop").":</b></p></td>\n";
-        echo "  <td>\n";
-        echo text_to_html($assessment->teachercomment);
+    // now show the grading grade if available...
+    if ($assessment->timegraded) {
+        echo "<tr valign=\"top\">\n";
+        echo "  <td align=\"right\"><p><b>";
+        if (isteacher($course->id, $assessment->userid)) {
+            print_string("gradeforstudentsassessment", "workshop", $course->teacher);
+        } else {
+            print_string("gradeforstudentsassessment", "workshop", $course->student);
+        }
+        echo ":</b></p></td><td>\n";
+        echo number_format($assessment->gradinggrade * $workshop->gradinggrade / 100, 0);
         echo "&nbsp;</td>\n";
         echo "</tr>\n";
-        // only show the grading grade if it's the teacher
-        if (isteacher($course->id)) {
-            echo "<tr valign=\"top\">\n";
-            echo "  <td align=\"right\"><p><b>". get_string("teachersgrade", "workshop").":</b></p></td>\n";
-            echo "  <td>\n";
-            echo number_format($assessment->gradinggrade * 100 / COMMENTSCALE, 0)."%";
-            echo "&nbsp;</td>\n";
-            echo "</tr>\n";
-            }
         echo "<tr valign=\"top\">\n";
         echo "<td colspan=\"2\" bgcolor=\"$THEME->cellheading2\">&nbsp;</td>\n";
         echo "</tr>\n";
@@ -2175,11 +2278,15 @@ function workshop_print_assessment($workshop, $assessment = false, $allowchanges
 //////////////////////////////////////////////////////////////////////////////////////
 function workshop_print_assessments_by_user_for_admin($workshop, $user) {
 
-    if ($assessments =workshop_get_user_assessments($workshop, $user)) {
+    if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
+        error("Course Module ID was incorrect");
+    }
+
+    if ($assessments = workshop_get_user_assessments_done($workshop, $user)) {
         foreach ($assessments as $assessment) {
             echo "<p><center><b>".get_string("assessmentby", "workshop", fullname($user))."</b></center></p>\n";
             workshop_print_assessment($workshop, $assessment);
-            echo "<p align=\"right\"><a href=\"assessments.php?action=adminconfirmdelete&a=$workshop->id&aid=$assessment->id\">".
+            echo "<p align=\"right\"><a href=\"assessments.php?action=adminconfirmdelete&id=$cm->id&aid=$assessment->id\">".
                 get_string("delete", "workshop")."</a></p><hr>\n";
             }
         }
@@ -2189,6 +2296,10 @@ function workshop_print_assessments_by_user_for_admin($workshop, $user) {
 //////////////////////////////////////////////////////////////////////////////////////
 function workshop_print_assessments_for_admin($workshop, $submission) {
 
+    if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
+        error("Course Module ID was incorrect");
+    }
+
     if ($assessments =workshop_get_assessments($submission)) {
         foreach ($assessments as $assessment) {
             if (!$user = get_record("user", "id", $assessment->userid)) {
@@ -2196,7 +2307,7 @@ function workshop_print_assessments_for_admin($workshop, $submission) {
                 }
             echo "<p><center><b>".get_string("assessmentby", "workshop", fullname($user))."</b></center></p>\n";
             workshop_print_assessment($workshop, $assessment);
-            echo "<p align=\"right\"><a href=\"assessments.php?action=adminconfirmdelete&a=$workshop->id&aid=$assessment->id\">".
+            echo "<p align=\"right\"><a href=\"assessments.php?action=adminconfirmdelete&id=$cm->id&aid=$assessment->id\">".
                 get_string("delete", "workshop")."</a></p><hr>\n";
             }
         }
@@ -2222,7 +2333,8 @@ function workshop_print_assignment_info($workshop) {
     print_heading($workshop->name, "center");
     print_simple_box_start("center");
     echo "<b>".get_string("duedate", "assignment")."</b>: $strduedate<br />";
-    echo "<b>".get_string("maximumgrade")."</b>: $workshop->grade<br />";
+    $grade = $workshop->gradinggrade + $workshop->grade;
+    echo "<b>".get_string("maximumgrade")."</b>: $grade<br />";
     echo "<b>".get_string("detailsofassessment", "workshop")."</b>: 
         <a href=\"assessments.php?id=$cm->id&action=displaygradingform\">".
         get_string("specimenassessmentform", "workshop")."</a><br />";
@@ -2281,6 +2393,29 @@ function workshop_print_feedback($course, $submission) {
 }
 
 
+//////////////////////////////////////////////////////////////////////////////////////
+function workshop_print_key($workshop) {
+    // print an explaination of the grades
+    
+    if (!$course = get_record("course", "id", $workshop->course)) {
+        error("Print key: course not found");
+    }
+    echo "<table align=\"center\">\n";
+    echo "<tr><td><small>{}</small></td><td><small>".get_string("assessmentby", "workshop", $course->student).
+        ";&nbsp;&nbsp; </small></td>\n";
+    echo "<td><small>[]</small></td><td><small>".get_string("assessmentby", "workshop", $course->teacher).
+        ";&nbsp;&nbsp; </small></td>\n";
+    echo "<td><small>&lt;&gt;</small></td><td><small>".get_string("assessmentdropped", "workshop").
+        ";&nbsp;&nbsp; </small></td>\n";
+    echo "<td><small>()</small></td><td><small>".get_string("gradegiventoassessment", "workshop").
+        ".</small></td></tr>\n";
+    echo "<tr><td colspan=\"8\" align=\"center\"><small>".get_string("gradesforsubmissionsare", "workshop", $workshop->grade)."; ".
+        get_string("gradesforassessmentsare", "workshop", $workshop->gradinggrade).".</small></td></tr>\n";
+    echo "</table><br />\n";
+    return;    
+}
+    
+
 //////////////////////////////////////////////////////////////////////////////////////
 function workshop_print_league_table($workshop) {
     // print an order table of (student) submissions showing teacher's and student's assessments
@@ -2288,112 +2423,120 @@ function workshop_print_league_table($workshop) {
     if (! $course = get_record("course", "id", $workshop->course)) {
         error("Print league table: Course is misconfigured");
     }
+    if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
+            error("Course Module ID was incorrect");
+    }
+    // set $groupid if workshop is in SEPARATEGROUPS mode
+    if (groupmode($course, $cm) == SEPARATEGROUPS) {
+        $groupid = get_current_group($course->id);
+    } else {
+        $groupid = 0;
+    }
     $nentries = $workshop->showleaguetable;
-    if ($nentries == 99) {
-        $nentries = 999999; // a large number
-        }
-
     if ($workshop->anonymous and isstudent($course->id)) {
         $table->head = array (get_string("title", "workshop"), 
             get_string("teacherassessments", "workshop", $course->teacher),  
             get_string("studentassessments", "workshop",    $course->student), get_string("overallgrade", "workshop"));
         $table->align = array ("left",  "center", "center", "center");
         $table->size = array ("*", "*", "*", "*");
-        }
+    }
     else { // show names
         $table->head = array (get_string("title", "workshop"),  get_string("name"),
             get_string("teacherassessments", "workshop", $course->teacher),  
             get_string("studentassessments", "workshop",    $course->student), get_string("overallgrade", "workshop"));
         $table->align = array ("left", "left", "center", "center", "center");
         $table->size = array ("*", "*", "*", "*", "*");
-        }
+    }
     $table->cellpadding = 2;
     $table->cellspacing = 0;
 
-    if ($submissions = workshop_get_student_submissions($workshop, "grade")) {
-        $n = 1;
+    if ($submissions = workshop_get_student_submissions($workshop)) {
         foreach ($submissions as $submission) {
+            if ($groupid) {
+                // check submission's group
+                if (!ismember($groupid, $submission->userid)) {
+                    continue; // skip this submission
+                }
+            }
+            $grades[$submission->id] = workshop_submission_grade($workshop, $submission);
+        }
+        arsort($grades); // largest grade first
+        reset($grades);
+        $n = 1;
+        while (list($submissionid, $grade) = each($grades)) {
+            if (!$submission = get_record("workshop_submissions", "id", $submissionid)) {
+                error("Print league table: submission not found");
+            }
             if (!$user = get_record("user", "id", $submission->userid)) {
                 error("Print league table: user not found");
-                }
+            }
             if ($workshop->anonymous and isstudent($course->id)) {
                 $table->data[] = array(workshop_print_submission_title($workshop, $submission),
-                    workshop_print_submission_assessments($workshop, $submission, "teacher"),
-                    workshop_print_submission_assessments($workshop, $submission, "student"),
-                    number_format(($workshop->teacherweight * $submission->teachergrade + $workshop->peerweight *
-                        $submission->peergrade) / ($workshop->teacherweight + $workshop->peerweight), 1)) ;
-                }
+                        workshop_print_submission_assessments($workshop, $submission, "teacher"),
+                        workshop_print_submission_assessments($workshop, $submission, "student"), $grade);
+            }
             else {
                 $table->data[] = array(workshop_print_submission_title($workshop, $submission), fullname($user),
-                    workshop_print_submission_assessments($workshop, $submission, "teacher"),
-                    workshop_print_submission_assessments($workshop, $submission, "student"),
-                    number_format(($workshop->teacherweight * $submission->teachergrade + $workshop->peerweight *
-                        $submission->peergrade) / ($workshop->teacherweight + $workshop->peerweight), 1)) ;
-                }
+                        workshop_print_submission_assessments($workshop, $submission, "teacher"),
+                        workshop_print_submission_assessments($workshop, $submission, "student"), $grade);
+            }
             $n++;
             if ($n > $nentries) {
                 break;
-                }
             }
+        }
         print_heading(get_string("leaguetable", "workshop"));
         print_table($table);
-        echo "<p>&lt; &gt; ".get_string("assessmentdropped", "workshop")."</p>\n";
-        }
+        workshop_print_key($workshop);
     }
+}
     
 
 //////////////////////////////////////////////////////////////////////////////////////
 function workshop_print_submission_assessments($workshop, $submission, $type) {
     // Returns the teacher or peer grade and a hyperlinked list of grades for this submission
-    
+
+    if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
+            error("Course Module ID was incorrect");
+    }
     $str = '';
     if ($assessments = workshop_get_assessments($submission)) {
         switch ($type) {
             case "teacher" : 
-                if ($submission->teachergrade) { // if there's a final teacher's grade...
-                    $str = "$submission->teachergrade  ";
-                }
                 foreach ($assessments as $assessment) {
                     if (isteacher($workshop->course, $assessment->userid)) {
-                        
-                        $str .= "<A HREF=\"assessments.php?action=viewassessment&a=$workshop->id&aid=$assessment->id\">";
-                        if ($assessment->donotuse) {
-                            $str .= "&lt;";
-                        } else {
-                            $str .= "[";
-                        }
-                        $str .= number_format($assessment->grade, 0);
-                        if ($assessment->gradinggrade) { // funny, teacher is grading self!
-                            $str .= "/".number_format($assessment->gradinggrade*100/COMMENTSCALE, 0)."%";
-                        }
-                        if ($assessment->donotuse) {
-                            $str .= "&gt;</A> ";
+                        $str .= "<a href=\"assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id\">";
+                        if ($assessment->timegraded) {
+                            if ($assessment->gradinggrade) {
+                                $str .= "[".number_format($assessment->grade * $workshop->grade / 100, 0)." (".
+                                    number_format($assessment->gradinggrade * $workshop->gradinggrade / 100, 0).
+                                    ")]</a> ";
+                            } else {
+                                $str .= "&lt;".number_format($assessment->grade, 0)." (0)&gt;</a> ";
+                            }
                         } else {
-                            $str .= "]</A> ";
+                            $str .= "[".number_format($assessment->grade, 0)." (-)]</a> ";
                         }
                     }
                 }
                 break;
             case "student" : 
-                if ($submission->peergrade) { // if there's a final peer grade...
-                    $str = "$submission->peergrade ";
-                }
                 foreach ($assessments as $assessment) {
                     if (isstudent($workshop->course, $assessment->userid)) {
-                        $str .= "<A HREF=\"assessments.php?action=viewassessment&a=$workshop->id&aid=$assessment->id\">";
-                        if ($assessment->donotuse) {
-                            $str .= "&lt;";
-                        } else {
-                            $str .= "{";
-                        }
-                        $str .= number_format($assessment->grade, 0);
-                        if ($assessment->gradinggrade) {
-                            $str .= "/".number_format($assessment->gradinggrade*100/COMMENTSCALE, 0)."%";
-                        }
-                        if ($assessment->donotuse) {
-                            $str .= "&gt;</A> ";
+                        $str .= "<a href=\"assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id\">";
+                        if ($assessment->timegraded) {
+                            if ($assessment->gradinggrade) {
+                                $str .= "{".number_format($assessment->grade * $workshop->grade / 100, 0)." (".
+                                    number_format($assessment->gradinggrade * $workshop->gradinggrade / 100, 0).
+                                    ")}</a> ";
+                            } else {
+                                $str .= "&lt;".number_format($assessment->grade * $workshop->grade / 100, 0).
+                                    " (0)&gt;</a> ";
+                            }
                         } else {
-                            $str .= "}</A> ";
+                            $str .= "{".number_format($assessment->grade * $workshop->grade / 100, 0)." (-)}</a> ";
                         }
                     }
                 }
@@ -2556,25 +2699,26 @@ function workshop_print_upload_form($workshop) {
 function workshop_print_user_assessments($workshop, $user) {
     // Returns the number of assessments and a hyperlinked list of grading grades for the assessments made by this user
 
+    if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
+            error("Course Module ID was incorrect");
+    }
     if ($assessments = workshop_get_user_assessments_done($workshop, $user)) {
         $n = count($assessments);
-        $str = "$n  (";
+        $str = "$n ";
         foreach ($assessments as $assessment) {
+            $str .= "<a href=\"assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id\">";
             if ($assessment->timegraded) {
-                $gradingscaled = intval($assessment->gradinggrade * $workshop->grade / COMMENTSCALE);
-                $str .= "<A HREF=\"assessments.php?action=viewassessment&a=$workshop->id&aid=$assessment->id\">";
-                $str .= "$gradingscaled</A> ";
-            }
-            else {
-                $str .= "<A HREF=\"assessments.php?action=viewassessment&a=$workshop->id&aid=$assessment->id\">";
-                if ($assessment->donotuse) {
-                    $str .= "&lt;".number_format($assessment->grade, 0)."&gt;</A> ";
+                if ($assessment->gradinggrade) {
+                    $str .= "{".number_format($assessment->grade * $workshop->grade / 100, 0). " (".
+                        number_format($assessment->gradinggrade * $workshop->gradinggrade / 100).")}</a> ";
                 } else {
-                    $str .= number_format($assessment->grade, 0)."</A> ";
+                    $str .= "&lt;".number_format($assessment->grade * $workshop->grade / 100, 0)." (0)&gt;</a> ";
                 }
+            } else {
+                $str .= "{".number_format($assessment->grade * $workshop->grade / 100, 0)." (-)}</a> ";
             }
         }
-        $str .= ")";
     }
     else {
         $str ="0";
@@ -2607,6 +2751,7 @@ function workshop_test_user_assessments($workshop, $user) {
     return $result;
     }
     
+//////////////////////////////////////////////////////////////////////////////////////
 function workshop_get_recent_mod_activity(&$activities, &$index, $sincetime, $courseid, 
                                            $workshop="0", $user="", $groupid="") {
     // Returns all workshop posts since a given time.  If workshop is specified then
@@ -2671,6 +2816,7 @@ function workshop_get_recent_mod_activity(&$activities, &$index, $sincetime, $co
     return;
 }
 
+//////////////////////////////////////////////////////////////////////////////////////
 function workshop_print_recent_mod_activity($activity, $course, $detail=false) {
 
     global $CFG;
index cec406c85da958db5836275f5922e57497467bca..b4cfac8bc0a34c61c8432dae0d74c7d5e37ec771 100644 (file)
@@ -1,5 +1,6 @@
 <?php
-       // ...and fill the form if needed
+       require("$CFG->dirroot/mod/workshop/lib.php");  // for parameter arrays
+    // ...and fill the form if needed
     if (empty($form->name)) {
         $form->name = "";
     }
@@ -9,9 +10,15 @@
     if (empty($form->format)) {
         $form->format = "";
     }
+    if (!isset($form->gradinggrade)) {
+        $form->gradinggrade = 100;
+    }
     if (!isset($form->grade)) {
         $form->grade = 100;
     }
+    if (!isset($form->gradingstrategy)) {
+          $form->gradingstrategy = 1;  // default is accumulative
+       }
     if (!isset($form->nelements)) {
         $form->nelements = 1;
     }
     if (!isset($form->ntassessments)) {
         $form->ntassessments = 0;
     }
+    if (!isset($form->assessmentcomps)) {
+        $form->assessmentcomps = 2;
+    }
     if (!isset($form->nsassessments)) {
         $form->nsassessments = 0;
     }
+    if (!isset($form->teacherweight)) {
+        $form->teacherweight = 1;
+    }
+    if (!isset($form->overallocation)) {
+        $form->overallocation = 0;
+    }
     if (empty($form->includeself)) {
         $form->includeself = "";
     }
     if (empty($form->hidegrades)) {
         $form->hidegrades = "";
     }
+    if (empty($form->showleaguetable)) {
+        $form->showleaguetable = 0;
+    }
+    if (empty($form->anonymous)) {
+        $form->anonymous = 0;
+    }
     if (empty($form->maxbytes)) {
         $form->maxbytes = "";
     }
 </tr>
 
 <tr valign=top>
-    <td align=right><P><B><?php  print_string("maximumgrade") ?>:</B></P></TD>
+    <td align=right><P><B><?php  print_string("gradeforassessments", "workshop") ?>:</B></P></TD>
     <td>
         <?php
         for ($i=100; $i>=0; $i--) {
             $grades[$i] = $i;
         }
+        choose_from_menu($grades, "gradinggrade", "$form->gradinggrade", "");
+        helpbutton("gradinggrade", get_string("gradeforassessments", "workshop"), "workshop");
+        ?>
+    </td>
+</tr>
+
+<tr valign=top>
+    <td align=right><P><B><?php  print_string("gradeforsubmission", "workshop") ?>:</B></P></TD>
+    <td>
+        <?php
         choose_from_menu($grades, "grade", "$form->grade", "");
+        helpbutton("grade", get_string("gradeforsubmission", "workshop"), "workshop");
         ?>
     </td>
 </tr>
     <td align=right><P><B><?php  print_string("gradingstrategy", "workshop") ?>:</B></P></TD>
     <td>
     <?PHP
-       require("$CFG->dirroot/mod/workshop/lib.php");
-          if (!isset($form->gradingstrategy)) {
-                  $form->gradingstrategy = 1;  // default
-                  }
-       choose_from_menu($WORKSHOP_TYPE, "gradingstrategy", $form->gradingstrategy, "");
+          choose_from_menu($WORKSHOP_TYPE, "gradingstrategy", $form->gradingstrategy, "");
        helpbutton("gradingstrategy", get_string("gradingstrategy", "workshop"), "workshop");
     ?>
     </td>
     <td align=right><P><B><?php  print_string("numberofassessmentsofteachersexamples", "workshop") ?>:</B></P></TD>
     <td>
                <?PHP
+        unset($numbers);
                for ($i=20; $i>=0; $i--) {
                        $numbers[$i] = $i;
                }
     </td>
 </tr>
 
+<tr>
+    <td align=right><P><B><?php print_string("comparisonofassessments", "workshop") ?>:</B></P></TD>
+    <td>
+        <?php
+               // set up comparison names
+        foreach ($WORKSHOP_ASSESSMENT_COMPS as $KEY => $COMPARISON) {
+            $COMPARISONS[] = $COMPARISON['name'];
+               }
+        choose_from_menu($COMPARISONS, "assessmentcomps", $form->assessmentcomps, "");
+        helpbutton("comparisonofassessments", get_string("comparisonofassessments", "workshop"), "workshop");
+    ?>
+    </td>
+</tr>
+
 <tr valign=top>
     <td align=right><P><B><?php  print_string("numberofassessmentsofstudentsubmissions", "workshop") ?>:</B></P></TD>
     <td>
                <?PHP
+        unset($numbers);
                for ($i=20; $i>=0; $i--) {
                        $numbers[$i] = $i;
                }
     </td>
 </tr>
 
+<tr valign=top>
+    <td align=right><P><B><?php  print_string("weightforteacherassessments", "workshop") ?>:</B></P></TD>
+    <td>
+               <?PHP
+        unset($numbers);
+               for ($i=10; $i>=0; $i--) {
+                       $numbers[$i] = $i;
+               }
+               choose_from_menu($numbers, "teacherweight", $form->teacherweight, "");
+       helpbutton("teacherweight", get_string("weightforteacherassessments", "workshop"), "workshop");
+               ?>
+    </td>
+</tr>
+
+<tr valign=top>
+    <td align=right><p><b><?php print_string("overallocation", "workshop") ?>:</b></p></td>
+    <td>
+        <?php
+        unset($numbers);
+        for ($i=2; $i>=0; $i--) {
+            $numbers[$i] = $i;
+        }
+        choose_from_menu($numbers, "overallocation", "$form->overallocation", "");
+        helpbutton("overallocation", get_string("overallocation", "workshop"), "workshop");
+        ?>
+    </td>
+</tr>
+
 <tr>
     <td align=right><P><B><?php  print_string("selfassessment", "workshop") ?>:</B></P></TD>
     <td>
     <td align=right><P><B><?php  print_string("assessmentsmustbeagreed", "workshop") ?>:</B></P></TD>
     <td>
     <?PHP 
-        $options[0] = get_string("no"); $options[1] = get_string("yes");
         choose_from_menu($options, "agreeassessments", $form->agreeassessments, "");
         helpbutton("agreeassessments", get_string("assessmentsmustbeagreed", "workshop"), "workshop");
     ?>
     <td align=right><P><B><?php  print_string("hidegradesbeforeagreement", "workshop") ?>:</B></P></TD>
     <td>
     <?PHP 
-        $options[0] = get_string("no"); $options[1] = get_string("yes");
         choose_from_menu($options, "hidegrades", $form->hidegrades, "");
         helpbutton("showinggrades", get_string("hidegradesbeforeagreement", "workshop"), "workshop");
     ?>
     </td>
 </tr>
 
+<tr>
+    <td align=right><p><b><?php print_string("leaguetable", "workshop"); ?>:</b></p></td>
+    <td>
+    <?php
+        unset($numbers);
+        $numbers[22] = '100';
+        $numbers[21] = 50;
+        for ($i=20; $i>=0; $i--) {
+            $numbers[$i] = $i;
+        }
+        choose_from_menu($numbers, "showleaguetable", $form->showleaguetable, "");
+        helpbutton("leaguetable", get_string("showleaguetable", "workshop"), "workshop");
+    ?>
+    </td>
+</tr>
+
+<tr>
+    <td align=right><p><b><? print_string("hidenamesfromstudents", "workshop", $course->students) ?>:</b></p></td>
+    <td>
+    <?php
+        choose_from_menu($options, "anonymous", $form->anonymous, "");
+        helpbutton("anonymous", get_string("hidenamesfromstudents", "workshop", $course->students), "workshop");
+    ?>
+    </td>
+</tr>
+
 <tr valign=top>
     <td align=right><P><B><?php  print_string("maximumsize", "workshop") ?>:</B></P></TD>
     <td>
index f94cf7634cd59b9a7ea62af2ab969f940203403e..c1403c590661b56a56cfe347622e2bb6bb0971e0 100644 (file)
             $workshop->maxbytes = backup_todb($info['MOD']['#']['MAXBYTES']['0']['#']);
             $workshop->deadline = backup_todb($info['MOD']['#']['DEADLINE']['0']['#']);
             $workshop->grade = backup_todb($info['MOD']['#']['GRADE']['0']['#']);
+            $workshop->gradinggrade = backup_todb($info['MOD']['#']['GRADINGGRADE']['0']['#']);
             $workshop->ntassessments = backup_todb($info['MOD']['#']['NTASSESSMENTS']['0']['#']);
+            $workshop->assessmentcomps = backup_todb($info['MOD']['#']['ASSESSMENTCOMPS']['0']['#']);
             $workshop->nsassessments = backup_todb($info['MOD']['#']['NSASSESSMENTS']['0']['#']);
             $workshop->overallocation = backup_todb($info['MOD']['#']['OVERALLOCATION']['0']['#']);
             $workshop->timemodified = backup_todb($info['MOD']['#']['TIMEMODIFIED']['0']['#']);
-            $workshop->mergegrades = backup_todb($info['MOD']['#']['MERGEGRADES']['0']['#']);
             $workshop->teacherweight = backup_todb($info['MOD']['#']['TEACHERWEIGHT']['0']['#']);
-            $workshop->peerweight = backup_todb($info['MOD']['#']['PEERWEIGHT']['0']['#']);
-            $workshop->includeteachersgrade = backup_todb($info['MOD']['#']['INCLUDETEACHERSGRADE']['0']['#']);
-            $workshop->biasweight = backup_todb($info['MOD']['#']['BIASWEIGHT']['0']['#']);
-            $workshop->reliabilityweight = backup_todb($info['MOD']['#']['RELIABILITYWEIGHT']['0']['#']);
-            $workshop->gradingweight = backup_todb($info['MOD']['#']['GRADINGWEIGHT']['0']['#']);
             $workshop->showleaguetable = backup_todb($info['MOD']['#']['SHOWLEAGUETABLE']['0']['#']);
-            $workshop->teacherloading = backup_todb($info['MOD']['#']['TEACHERLOADING']['0']['#']);
-            $workshop->assessmentstodrop = backup_todb($info['MOD']['#']['ASSESSMENTSTODROP']['0']['#']);
 
             //The structure is equal to the db, so insert the workshop
             $newid = insert_record ("workshop",$workshop);
index e8273f12654a096eed0e6c5a2594857f148b3915..4944a9b06e2627c83daf39d1b599117f681312e4 100644 (file)
@@ -3,17 +3,14 @@
 /*************************************************
     ACTIONS handled are:
 
+       adminamendtitle
     adminconfirmdelete
-    admindelete
-    adminlist
-    analysisofassessments
-    calculatefinalgrades
+       admindelete
+       adminlist
     displayfinalgrades (teachers only)
-    displayfinalweights
     listallsubmissions
     listforassessmentstudent
     listforassessmentteacher
-    updateoverallocation
     userconfirmdelete
     userdelete
     
     require("lib.php");
     require("locallib.php");
 
-    optional_variable($id);    // Course Module ID
-    optional_variable($a);    // workshop ID
+       require_variable($id);    // Course Module ID
 
     // get some useful stuff...
-    if ($id) {
-        if (! $cm = get_record("course_modules", "id", $id)) {
-            error("Course Module ID was incorrect");
-        }
-    
-        if (! $course = get_record("course", "id", $cm->course)) {
-            error("Course is misconfigured");
-        }
-    
-        if (! $workshop = get_record("workshop", "id", $cm->instance)) {
-            error("Course module is incorrect");
-        }
-
-    } else {
-        if (! $workshop = get_record("workshop", "id", $a)) {
-            error("Course module is incorrect");
-        }
-        if (! $course = get_record("course", "id", $workshop->course)) {
-            error("Course is misconfigured");
-        }
-        if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $course->id)) {
-            error("Course Module ID was incorrect");
-        }
+    if (! $cm = get_record("course_modules", "id", $id)) {
+        error("Course Module ID was incorrect");
+    }
+    if (! $course = get_record("course", "id", $cm->course)) {
+        error("Course is misconfigured");
+    }
+    if (! $workshop = get_record("workshop", "id", $cm->instance)) {
+        error("Course module is incorrect");
     }
 
     require_login($course->id);
@@ -62,7 +43,7 @@
     // ... print the header and...
     print_header_simple("$workshop->name", "",
                  "<A HREF=index.php?id=$course->id>$strworkshops</A> -> 
-                  <A HREF=\"view.php?a=$workshop->id\">$workshop->name</A> -> $strsubmissions", 
+                  <A HREF=\"view.php?id=$cm->id\">$workshop->name</A> -> $strsubmissions", 
                   "", "", true);
 
     //...get the action or set up an suitable default
         }
     
 
-    /*************** analysis of assessments (by teacher) ***************************/
-    elseif ($action == 'analysisofassessments') {
-
-        // timeout after 10 minutes
-        @set_time_limit(600);
-        
-        if (!isteacher($course->id)) {
-            error("Only teachers can look at this page");
-        }
-
-        // this analysis does not use bias or reliability...
-        set_field("workshop", "biasweight", 0, "id", $workshop->id);
-        set_field("workshop", "reliabilityweight", 0, "id", $workshop->id);
-        // ...and unity weights for teacher and peer assessments
-        set_field("workshop", "teacherweight", 5, "id", $workshop->id);
-        set_field("workshop", "peerweight", 5, "id", $workshop->id);
-
-        echo "<form name=\"optionsform\" method=\"post\" action=\"submissions.php\">\n";
-        echo "<INPUT TYPE=\"hidden\" NAME=\"id\" VALUE=\"$cm->id\">\n";
-        echo "<input type=\"hidden\" name=\"action\" value=\"saveanalysisoptions\">\n";
+       /*************** display final grades (by teacher) ***************************/
+       elseif ($action == 'displayfinalgrades') {
 
-        // get the options from the database...
-        $teacherloading = get_field("workshop", "teacherloading", "id", $workshop->id);
-        $gradingweight = get_field("workshop", "gradingweight", "id", $workshop->id);
-        $assessmentstodrop = get_field("workshop", "assessmentstodrop", "id", $workshop->id);
-
-        // ...now show the options used in a table
-        print_heading_with_help(get_string("analysisofassessments", "workshop"), "analysisofassessments",
-                "workshop");
-        echo "<center><TABLE WIDTH=\"50%\" BORDER=\"1\">\n";
-        echo "<TR><td COLSPAN=\"2\" bgcolor=\"$THEME->cellheading2\"><CENTER><B>".
-            get_string("optionsusedinanalysis", "workshop")."</B></CENTER></TD></TR>\n";
-        echo "<tr><td align=\"right\">".get_string("loadingforteacherassessments", "workshop", 
-                $course->teacher).":</td>\n";
-        echo "<TD>";
-        workshop_choose_from_menu($WORKSHOP_FWEIGHTS, "teacherloading", $teacherloading, "");
-        echo "</TD></TR>\n";
-        echo "<tr><td align=\"right\">".get_string("weightforgradingofassessments", "workshop").":</td>\n";
-        echo "<TD>";
-        workshop_choose_from_menu($WORKSHOP_FWEIGHTS, "gradingweight", $gradingweight, "");
-        echo "</TD></TR>\n";
-        echo "<TR><TD ALIGN=\"right\">".get_string("percentageofassessments", "workshop").":</TD>\n";
-        echo "<TD>";
-        for ($i = 0; $i <= 100; $i++) {
-            $numbers[$i] = $i;
-        }
-        choose_from_menu($numbers, "assessmentstodrop", $assessmentstodrop, "");
-        echo "</TD></TR>\n";
-        echo "</TABLE><br />\n";
-        echo "<INPUT TYPE=submit VALUE=\"".get_string("repeatanalysis", "workshop")."\">\n";
-        echo "</FORM>\n";
-
-
-        // set up the array of users who have made assessments
-        if (!$students = get_course_students($course->id, "u.lastname, u.firstname")) {
-            print_heading(get_string("nostudentsyet"));
-            print_footer($course);
-            exit;
-        }
-        $teachers = get_course_teachers($course->id);
-        $users = array_merge($students, $teachers);
-        $nassessments = 0;
-        foreach ($users as $user) {
-            if ($assessments = workshop_get_user_assessments_done($workshop, $user)) {
-                // the value put into the array element is not particularly important at this stage
-                // it will hold the user's assessment error after the first iteration 
-                $n = count($assessments);
-                $assessors[$user->id] = $n;
-                $nassessments += $n;
-            }
-        }
-
-        $ntodrop = intval(($assessmentstodrop * $nassessments / 100.0) + 0.5); 
-
-        // set minumim value for the variance (of the elements)
-        $minvar = 0.05;
-           
-        flush();
-        // we now do up to five iterations, the first with all users. The second and subsequent if
-        // the number of assessors is not the full set. Two or three iterations with the reduced set
-        // should be enough to stablise the list of dropped assessments.
-        if ($ntodrop == 0) {
-            $loopcount = 1;
+        if (groupmode($course, $cm) == SEPARATEGROUPS) {
+            $groupid = get_current_group($course->id);
         } else {
-            $loopcount = 7;  // max loops, should finish before that loop
-        }
-        for ($loop = 0; $loop < $loopcount; $loop++) {
-            // calculate the means for each submission using just the "good" assessments 
-            // on the first iteration all the assessments are included
-            unset($num);
-            unset($sum);
-            foreach ($assessors as $userid => $error) {
-                if (!$user = get_record("user", "id", $userid)) {
-                    error("Analysis of assessments: User record not found");
-                }
-                $assessments = workshop_get_user_assessments_done($workshop, $user);
-                foreach ($assessments as $assessment) {
-                    if (isset($drop[$assessment->id])) {
-                        continue;
-                    }
-                    if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) {
-                        error("Analysis of Assessments: submission record not found");
-                    }
-                    if (isset($num[$submission->id])) {
-                        if (isteacher($course->id, $userid)) {
-                            $num[$submission->id] += $WORKSHOP_FWEIGHTS[$workshop->teacherloading];
-                        } else {
-                            $num[$submission->id]++;
-                        }
-                    } else {
-                        if (isteacher($course->id, $userid)) {
-                            $num[$submission->id] = $WORKSHOP_FWEIGHTS[$workshop->teacherloading];
-                        } else {
-                            $num[$submission->id] = 1;
-                        }
-                    }
-                    for ($i = 0; $i < $workshop->nelements; $i++) {
-                        $grade =  get_field("workshop_grades", "grade",
-                                    "assessmentid", $assessment->id, "elementno", $i);
-                        if (isset($sum[$submission->id][$i])) {
-                            if (isteacher($course->id, $userid)) {
-                                $sum[$submission->id][$i] += $grade * $WORKSHOP_FWEIGHTS[$workshop->teacherloading];
-                            } else {
-                                $sum[$submission->id][$i] += $grade;
-                            }
-                        } else {
-                            if (isteacher($course->id, $userid)) {
-                                $sum[$submission->id][$i] = $grade * $WORKSHOP_FWEIGHTS[$workshop->teacherloading];
-                            } else {
-                                $sum[$submission->id][$i] = $grade;
-                            }
-                        }
-                    }
-                }
-            }
-            reset($num);
-            if (!$loop) {
-                echo "<p>".get_string("numberofsubmissions", "workshop", count($num))."</p>\n";
-            }
-
-            // (re)calculate the means for each submission
-            foreach ($num as $submissionid => $n) {
-                for ($i = 0; $i < $workshop->nelements; $i++) {
-                    $mean[$submissionid][$i] = $sum[$submissionid][$i] / $n;
-                    // echo "Submission: $submissionid; Element: $i; Mean: {$mean[$submissionid][$i]}<br />\n";
-                }
-            }
-
-            // only calculate the sd's and the error from guessing once
-            if (!$loop) {
-                // now get an estimate of the standard deviation of each element in the assessment
-                $n = 0;
-                for ($i = 0; $i < $workshop->nelements; $i++) {
-                    $var[$i] = 0;
-                }
-                foreach ($assessors as $userid => $error) {
-                    if (!$user = get_record("user", "id", $userid)) {
-                        error("Submissions: User record not found");
-                    }
-                    $assessments = workshop_get_user_assessments_done($workshop, $user);
-                    foreach ($assessments as $assessment) {
-                        if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) {
-                            error("Analysis of Assessments: submission record not found");
-                        }
-                        $n++;
-                        for ($i = 0; $i < $workshop->nelements; $i++) {
-                            $grade =  get_field("workshop_grades", "grade",
-                                        "assessmentid", $assessment->id, "elementno", $i);
-                            $temp = $mean[$submission->id][$i] - $grade;
-                            $var[$i] += $temp * $temp;
-                        }
-                    }
-                }
-                for ($i = 0; $i < $workshop->nelements; $i++) {
-                    $sd[$i] = sqrt($var[$i] / ($n - 1));
-                    echo get_string("standarddeviation", "workshop", $i+1)." $sd[$i]<br />";
-                    if ($sd[$i] <= $minvar) {
-                            get_string("standarddeviationnote", "workshop")."<br />\n";
-                    }
-                echo "<br />\n";
-                }
-
-                // calculate the mean variance (error) if just guessing
-                // first get the assignment elements for maxscores...
-                $elementsraw = get_records("workshop_elements", "workshopid", $workshop->id, "elementno ASC");
-                foreach ($elementsraw as $element) {
-                    $maxscore[] = $element->maxscore;   // to renumber index 0,1,2...
-                    $weight[] = $element->weight;   // to renumber index 0,1,2...
-                }
-                $n = 0;
-                $totvar = 0;
-                foreach ($assessors as $userid => $error) {
-                    if (!$user = get_record("user", "id", $userid)) {
-                        error("Submissions: User record not found");
-                    }
-                    $assessments = workshop_get_user_assessments_done($workshop, $user);
-                    foreach ($assessments as $assessment) {
-                        if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) {
-                            error("Analysis of Assessments: submission record not found");
-                        }
-                        $n++;
-                        for ($i = 0; $i < $workshop->nelements; $i++) {
-                            $grade = mt_rand(0, $maxscore[$i]);
-                            if ($sd[$i] > $minvar) {
-                                $temp = ($mean[$submission->id][$i] - $grade) * 
-                                    $WORKSHOP_EWEIGHTS[$weight[$i]] / $sd[$i]; 
-                            } else {
-                                $temp = 0;
-                            }
-                            $totvar += $temp * $temp;
-                        }
-                    }
-                }
-                // take the average of these variances
-                $varguess = $totvar / $n;
-            }
-            
-            // calculate the variance (error) for each assessment (adjusted after the first loop)
-            // and work out the user's average error with all their assessments and without
-            // the dropped assessments (their "good" assessments)
-            foreach ($assessors as $userid => $error) {
-                if (!$user = get_record("user", "id", $userid)) {
-                    error("Submissions: User record not found");
-                }
-                $assessments = workshop_get_user_assessments_done($workshop, $user);
-                $n = 0;
-                $ngood = 0;
-                $totvar = 0;
-                $totvargood = 0;
-                foreach ($assessments as $assessment) {
-                    if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) {
-                        error("Analysis of Assessments: submission record not found");
-                    }
-                    $n++;
-                    $var = 0;
-                    for ($i = 0; $i < $workshop->nelements; $i++) {
-                        $grade =  get_field("workshop_grades", "grade",
-                                    "assessmentid", $assessment->id, "elementno", $i);
-                        if ($sd[$i] > $minvar) {
-                            $temp = ($mean[$submission->id][$i] - $grade) * 
-                                $WORKSHOP_EWEIGHTS[$weight[$i]] / $sd[$i];
-                        } else {
-                            $temp = 0;
-                        }
-                        $var += $temp * $temp;
-                    }
-                    // the variances are adjusted by the user's overall error (once it's calculated)
-                    if ($loop) {
-                        $assessmentvar[$assessment->id] = $var * $error;
-                    } else {
-                        $assessmentvar[$assessment->id] = $var;
-                    }
-                    $totvar += $var;
-                    if (empty($drop[$assessment->id])) {
-                        $ngood++;
-                        $totvargood += $var;
-                    }
-                }
-                $nsubmissions[$userid] = $n;
-                $newassessors[$userid] = $totvar / $n;
-                if ($ngood) {
-                    $vargood[$userid] = $totvargood / $ngood;
-                } else {
-                    $vargood[$userid] = 0;
-                }
-                // echo fullname($user)." Error: {$newassessors[$userid]}; n: $n<br />\n";
-            }
-            
-            // echo "<hr>\n";
-            
-            
-            // now drop the assessments with the largest (adjusted) variances
-            $nchanged = 0;
-            if ($ntodrop) {
-                asort($assessmentvar);
-                $n = 1;
-                foreach ($assessmentvar as $assessmentid => $adjvar) {
-                    if ($n <= ($nassessments - $ntodrop)) {
-                        if (isset($drop[$assessmentid])) {
-                            unset($drop[$assessmentid]);
-                            $nchanged++;
-                        }
-                    } else {
-                        if (empty($drop[$assessmentid])) {
-                            $drop[$assessmentid] = 1;
-                            $nchanged++;
-                        }
-                    }
-                    $n++;
-                }
-            }
-            
-            // reset the assessors array
-            $assessors = $newassessors;
-            // put the assessors in order (for the next iteration, if there is one)
-            asort($assessors);
-            reset($assessors);
-            $i = $loop + 1;
-            echo get_string("iteration", "workshop", "$i / $loopcount")."<br />\n";
-            echo get_string("numberofassessmentschanged", "workshop", $nchanged)."<br />\n";
-            flush();
-            if (!$nchanged) {
-                break;
-            }
-        } // end of iteration loop
-        
-        // flag the assessments which were classed as outliers
-        // but first clear any existing flags
-        execute_sql("UPDATE {$CFG->prefix}workshop_assessments SET donotuse = 0 
-                WHERE workshopid = $workshop->id", false);
-        if ($ntodrop) {
-            foreach ($drop as $assessmentid => $flag) {
-                if (!set_field("workshop_assessments", "donotuse", 1, "id", $assessmentid)) {
-                    error("Analysis of assessments: unable to set donotuse field");
-                }
-                $userid = get_field("workshop_assessments", "userid", "id", $assessmentid);
-                if (empty($ndropped[$userid])) {
-                    $ndropped[$userid] = 1;
-                } else {
-                    $ndropped[$userid]++;
-                }
-            }
-        }
-
-        // echo "<p>".get_string("expectederror", "workshop", $varguess)."</p>\n";
-        print_heading(get_string("errortable", "workshop"));
-        $table->head = array(" ",get_string("name"), get_string("averageerror", "workshop"), 
-                get_string("averageerror", "workshop")."<br />".
-                get_string("excludingdroppedassessments", "workshop"),
-                get_string("numberofassessments", "workshop"));
-        $table->align = array ("left","left", "center", "center", "center");
-        $table->size = array ("*", "*", "*", "*", "*");
-        $table->cellpadding = 2;
-        $table->cellspacing = 0;
-        $n = 1;
-        foreach ($assessors as $userid => $error) {
-            if (!$user = get_record("user", "id", $userid)) {
-                error("Assessment analysis: user record not found");
-            }
-            if ($vargood[$userid]) {
-                $vargoodtext = number_format($vargood[$userid] * 100 / $varguess, 2)."%";
-            } else {
-                $vargoodtext = "-";
-            }
-            if (empty($ndropped[$userid])) {
-                $numtext = "$nsubmissions[$userid]";
-            } else {
-                $numtext = "$nsubmissions[$userid] &lt;$ndropped[$userid]&gt;";
-            } 
-            $table->data[] = array($n, fullname($user), 
-                    number_format($error * 100 / $varguess, 2)."%", $vargoodtext, 
-                    $numtext);
-            $n++;
-        }
-        print_table($table);
-        echo "<p>&lt; &gt; ".get_string("assessmentsexcluded", "workshop", $course->student)."</p>\n";
-        echo "<p>".get_string("submissionsused", "workshop", count($num))."</p>\n";;
-        
-        // display student grades
-        print_heading(get_string("gradetable", "workshop"));
-        unset($table);
-        $table->head = array(get_string("name"), get_string("submission", "workshop"),
-                get_string("assessmentsdone", "workshop"), get_string("assessments", "workshop"), 
-                get_string("studentassessments", "workshop", $course->teacher),
-                get_string("studentassessments", "workshop", $course->student),
-                get_string("submission", "workshop"), get_string("overallgrade", "workshop"));
-        $table->align = array ("left", "center", "center", "center", "center", "center", "center", "center");
-        $table->size = array ("*", "*", "*", "*", "*", "*", "*", "*");
-        $table->cellpadding = 2;
-        $table->cellspacing = 0;
-        $table->data[] = array("<b>".get_string("weight", "workshop")."</b>", " ", " ",  
-                "<b>".$WORKSHOP_FWEIGHTS[$workshop->gradingweight]."</b>", " ", " ","<b>1</b>", " ");
-        $maxassessments = $workshop->nsassessments + $workshop->ntassessments;
-        foreach ($students as $user) {
-            if ($assessments = workshop_get_user_assessments_done($workshop, $user)) {
-                $n = 0;
-                foreach ($assessments as $assessment) {
-                    if (!$assessment->donotuse) {
-                        $n++;
-                    }
-                }
-                if ($maxassessments) {
-                    $assessmentgrade = ($n / $maxassessments) * $workshop->grade;
-                } else {
-                    $assessmentgrade = 0;
-                }
-            } else {
-                // no assessments
-                $assessmentgrade = 0;
-            }
-            if ($submissions = workshop_get_user_submissions($workshop, $user)) {
-                foreach ($submissions as $submission) {
-                    $submissiongrade = 0;
-                    $n = 0;
-                    if ($assessments = workshop_get_assessments($submission)) {
-                        $sum = 0;
-                        foreach ($assessments as $assessment) {
-                            if (!$assessment->donotuse) {
-                                $n++;
-                                $sum += $assessment->grade;
-                            }
-                        }
-                        if ($n) {
-                            $submissiongrade = $sum / $n;
-                        }
-                    }
-                    $finalgrade = ($assessmentgrade * $WORKSHOP_FWEIGHTS[$workshop->gradingweight] +
-                        $submissiongrade) / ($WORKSHOP_FWEIGHTS[$workshop->gradingweight] + 1.0);
-                    if ($n) {
-                        $table->data[] = array(fullname($user), 
-                            workshop_print_submission_title($workshop, $submission),
-                            workshop_print_user_assessments($workshop, $user),
-                            number_format($assessmentgrade, 2),
-                            workshop_print_submission_assessments($workshop, $submission, "teacher"),
-                            workshop_print_submission_assessments($workshop, $submission, "student"),
-                            number_format($submissiongrade, 2),
-                            number_format($finalgrade, 2));
-                    } else {
-                        $table->data[] = array(fullname($user), 
-                            workshop_print_submission_title($workshop, $submission),
-                            workshop_print_user_assessments($workshop, $user),
-                            number_format($assessmentgrade, 2),  
-                            workshop_print_submission_assessments($workshop, $submission, "teacher"),
-                            workshop_print_submission_assessments($workshop, $submission, "student"),
-                            "<b>".get_string("noassessments", "workshop")."</b>",
-                            number_format($finalgrade, 2));
-                    }
-                    // save grades in submission record
-                    set_field("workshop_submissions", "teachergrade", intval($submissiongrade + 0.5), "id", 
-                            $submission->id);
-                    set_field("workshop_submissions", "peergrade", intval($submissiongrade + 0.5), "id", 
-                            $submission->id);
-                    set_field("workshop_submissions", "finalgrade", intval($finalgrade + 0.5), "id", 
-                            $submission->id);
-                    set_field("workshop_submissions", "gradinggrade", intval($assessmentgrade + 0.5), "id", 
-                            $submission->id);
-                }       
-            } else {
-                // no submissions
-                $finalgrade = ($assessmentgrade * $WORKSHOP_FWEIGHTS[$workshop->gradingweight]) /
-                    ($WORKSHOP_FWEIGHTS[$workshop->gradingweight] + 1.0);
-                $table->data[] = array(fullname($user),
-                            "-", workshop_print_user_assessments($workshop, $user),
-                            number_format($assessmentgrade, 2), "-", "-",
-                            get_string("nosubmission", "workshop"), 
-                            number_format($finalgrade,2));
-            }
-        }
-        print_table($table);
-        echo "<p>&lt; &gt; ".get_string("assessmentdropped", "workshop")."</p>\n";
-        echo "</CENTER>";
-        print_continue("view.php?a=$workshop->id");
-    }
-
-
-    /*************** calculate final grades (by teacher) ***************************/
-    elseif ($action == 'calculatefinalgrades') {
-
-        $form = (object)$_POST;
-        
-        if (!isteacher($course->id)) {
-            error("Only teachers can look at this page");
-            }
+            $groupid = 0;
+        }
+               // Get all the students
+               if (!$users = get_course_students($course->id, "u.lastname, u.firstname")) {
+                       print_heading(get_string("nostudentsyet"));
+                       print_footer($course);
+                       exit;
+               }
+               
+               // show the final grades as stored in the tables...
+               print_heading_with_help(get_string("displayoffinalgrades", "workshop"), "finalgrades", "workshop");
+               echo "<center><table border=\"1\" width=\"90%\"><tr>
+                       <td bgcolor=\"$THEME->cellheading2\"><b>".$course->student."</b></td>";
+               echo "<td bgcolor=\"$THEME->cellheading2\"><b>".get_string("submission", "workshop")."</b></td>";
+               echo "<td bgcolor=\"$THEME->cellheading2\" align=\"center\"><b>".get_string("assessmentsdone", "workshop").
+                "</b></td>";
+               echo "<td bgcolor=\"$THEME->cellheading2\" align=\"center\"><b>".get_string("gradeforassessments", 
+                "workshop")."</b></td>";
+               echo "<td bgcolor=\"$THEME->cellheading2\" align=\"center\"><b>".get_string("assessmentsby", "workshop", 
+                $course->teachers)."</b></td>";
+           echo "<td bgcolor=\"$THEME->cellheading2\" align=\"center\"><b>".get_string("assessmentsby", "workshop", 
+                $course->students)."</b></td>";
+               echo "<td bgcolor=\"$THEME->cellheading2\" align=\"center\"><b>".get_string("gradeforsubmission", 
+                "workshop")."</b></td>";
+               echo "<td bgcolor=\"$THEME->cellheading2\" align=\"center\"><b>".get_string("overallgrade", "workshop").
+                "</b></td></TR>\n";
 
-        // Get all the students in surname order
-        if (!$users = get_course_students($course->id, "u.firstname, u.lastname")) {
-            print_heading(get_string("nostudentsyet"));
-            print_footer($course);
-            exit;
-            }
-        
-        // set up the weights from the calculate final grades form...
-        if (isset($form->teacherweight)) {
-            $teacherweight = $form->teacherweight;
-            // ...and save them 
-            set_field("workshop", "teacherweight", $teacherweight, "id", "$workshop->id");
-            }
-        
-        if (isset($form->peerweight)) {
-            $peerweight = $form->peerweight;
-            // ...and save them 
-            set_field("workshop", "peerweight", $peerweight, "id", "$workshop->id");
-            }
-        
-        // get the include teachers grade flag
-        if (isset($form->includeteachersgrade)) {
-            $includeteachersgrade = $form->includeteachersgrade;
-            set_field("workshop", "includeteachersgrade", $includeteachersgrade, "id", "$workshop->id");
-            }
-            
-        if (isset($form->biasweight)) {
-            $biasweight = $form->biasweight;
-            // ...and save them 
-            set_field("workshop", "biasweight", $biasweight, "id", "$workshop->id");
-            }
-    
-        if (isset($form->reliabilityweight)) {
-            $reliabilityweight = $form->reliabilityweight;
-            // ...and save them 
-            set_field("workshop", "reliabilityweight", $reliabilityweight, "id", "$workshop->id");
-            }
-    
-        if (isset($form->gradingweight)) {
-            $gradingweight = $form->gradingweight;
-            // ...and save them 
-            set_field("workshop", "gradingweight", $gradingweight, "id", "$workshop->id");
-            }
-    
-        // save number of entries in showleaguetable option
-        if ($form->nentries == 'All') {
-            $form->nentries = 99;
-            }
-        set_field("workshop", "showleaguetable", $form->nentries, "id", "$workshop->id");
-        
-        // save the anonymous option
-        set_field("workshop", "anonymous", $form->anonymous, "id", "$workshop->id");
-        
-        // work out what to show in the final grades tables and what to include in the calculation of the final grade
-        // teacher grades?
-        if ($workshop->gradingstrategy and $teacherweight) {
-            $useteachersgrades = 1;
-            }
-        else {
-            $useteachersgrades = 0;
-            }
-        // peergrades?
-        if ($workshop->gradingstrategy and $workshop->nsassessments and $peerweight) {
-            $usepeergrades = 1;
-            }
-        else {
-            $usepeergrades = 0;
-            }
-        // bias grades?
-        if ((($workshop->ntassessments >= 3) or ($workshop->nsassessments >= 3))  and ($useteachersgrades or $usepeergrades)
-                and $biasweight ) {
-            $usebiasgrades = 1;
-            }
-        else {
-            $usebiasgrades = 0;
-            }
-        // reliability grades?
-        if ((($workshop->ntassessments >= 3) or ($workshop->nsassessments >= 3)) and ($useteachersgrades or $usepeergrades)
-                and $reliabilityweight ) {
-            $usereliabilitygrades = 1;
-            }
-        else {
-            $usereliabilitygrades = 0;
-            }
-        // grading grades?
-        if (($workshop->ntassessments or $workshop->nsassessments) and $gradingweight ) {
-            $usegradinggrades = 1;
-            }
-        else {
-            $usegradinggrades = 0;
-            }
-        
-        // start to calculate the grand means
-        $sumallteachergrades = 0.0;
-        $nallteachergrades = 0;
-        $sumallpeergrades = 0.0;
-        $nallpeergrades = 0;
-        // get the grades of each student's submission...
-        // the method used allowed a submission to be graded by more than one teacher
-        if (workshop_count_student_submissions($workshop)) {
-            echo "<CENTER><B>".get_string("studentsubmissions", "workshop", $course->student);
-            echo "<BR><TABLE BORDER=1 WIDTH=\"90%\"><TR>\n";
-            echo "<TD BGCOLOR=\"$THEME->cellheading2\"><B>$course->student</B></TD>\n";
-            echo "<TD BGCOLOR=\"$THEME->cellheading2\"><B>".get_string("submissions","workshop")."</B></TD>\n";
-            if ($useteachersgrades) {
-                echo "<TD BGCOLOR=\"$THEME->cellheading2\"><B>".get_string("assessmentsby", "workshop", $course->teachers)."</B></TD>\n";
-                echo "<TD BGCOLOR=\"$THEME->cellheading2\"><B>".get_string("numberofassessments", "workshop")."</B></TD>\n";
-                }
-            if ($usepeergrades) {
-                echo "<TD BGCOLOR=\"$THEME->cellheading2\"><B>".get_string("assessmentsby", "workshop", $course->students)."</B></TD>\n";
-                echo "<TD BGCOLOR=\"$THEME->cellheading2\"><B>".get_string("numberofassessments", "workshop")."</B></TD>\n";
-                }
-            if ($useteachersgrades or $usepeergrades) {
-                echo "<TD BGCOLOR=\"$THEME->cellheading2\"><B>".get_string("gradeofsubmission", "workshop")."</B></TD></TR>\n";
-                }
-            // display weights
-            echo "<TR><TD BGCOLOR=\"$THEME->cellheading2\"><B>".get_string("weights","workshop")."</B></TD>\n";
-            echo "<TD BGCOLOR=\"$THEME->cellheading2\">&nbsp;</TD>\n";
-            if ($useteachersgrades) {
-                echo "<TD COLSPAN=\"2\" BGCOLOR=\"$THEME->cellheading2\"><CENTER><B>$WORKSHOP_FWEIGHTS[$teacherweight]</B></CENTER></TD>\n";
-                }
-            if ($usepeergrades) {
-                echo "<TD COLSPAN=\"2\" BGCOLOR=\"$THEME->cellheading2\"><CENTER><B>$WORKSHOP_FWEIGHTS[$peerweight]</B></CENTER></TD>\n";
-                }
-            if ($useteachersgrades or $usepeergrades) {
-                echo "<TD BGCOLOR=\"$THEME->cellheading2\">&nbsp;</TD>\n";
-                }
-            echo "<TR>\n";
-            // go through the submissions in "user" order, makes comparing the two tables easier
-            foreach ($users as $user) {
-                if ($submissions = workshop_get_user_submissions($workshop, $user)) {
-                    foreach ($submissions as $submission) {
-                        $sumteachergrades = 0.0;
-                        $nteachergrades = 0;
-                        $sumpeergrades = 0.0;
-                        $npeergrades = 0;
-                        // have a look at each assessment and add to arrays
-                        if ($assessments = workshop_get_assessments($submission)) {
-                            foreach ($assessments as $assessment) {
-                                if (isteacher($workshop->course, $assessment->userid)) { 
-                                    // it's a teacher's
-                                    $sumteachergrades += $assessment->grade;
-                                    $nteachergrades++;
-                                    if ($includeteachersgrade) { // add it to the student grades
-                                        $sumpeergrades += $assessment->grade;
-                                        $npeergrades++;
-                                        }
-                                    }
-                                else {
-                                    // its' a student's
-                                    $sumpeergrades += $assessment->grade;
-                                    $npeergrades++;
-                                    }
-                                }
-                            }
-                        if ($nteachergrades) {
-                            $teachergrade = intval($sumteachergrades / $nteachergrades + 0.5);
-                            $sumallteachergrades += $teachergrade;
-                            $nallteachergrades++;
-                            }
-                        else {
-                            $teachergrade = 0;
-                            }
-                        if ($npeergrades) {
-                            $peergrade = intval($sumpeergrades / $npeergrades + 0.5);
-                            $sumallpeergrades += $peergrade;
-                            $nallpeergrades++;
-                            }
-                        else {
-                            $peergrade = 0;
-                            }
-                        if ($teacherweight + $peerweight > 0) {
-                            $grade = intval((($useteachersgrades * $teachergrade * $WORKSHOP_FWEIGHTS[$teacherweight] + 
-                                $usepeergrades * $peergrade * $WORKSHOP_FWEIGHTS[$peerweight]) / 
-                                ($useteachersgrades * $WORKSHOP_FWEIGHTS[$teacherweight] + 
-                                $usepeergrades * $WORKSHOP_FWEIGHTS[$peerweight])) + 0.5);
-                            }
-                        else {
-                            $grade = 0;
-                            }
-                        // display the grades...
-                        echo "<TR><TD>".fullname($user)."</TD>\n";
-                        echo "<TD>".workshop_print_submission_title($workshop, $submission)."</TD>\n";
-                        if ($useteachersgrades) {
-                            echo "<TD>$teachergrade</TD>\n";
-                            echo "<TD>[$nteachergrades]</TD>\n";
-                            }
-                        if ($usepeergrades) {
-                            echo "<TD>$peergrade</TD>\n";
-                            echo "<TD>[$npeergrades]</TD>\n";
-                            }
-                        if ($useteachersgrades or $usepeergrades) {
-                            echo "<TD>$grade</TD></TR>\n";
-                            }
-                        // ...and save in the database 
-                        set_field("workshop_submissions", "teachergrade", $teachergrade, "id", $submission->id);
-                        set_field("workshop_submissions", "peergrade", $peergrade, "id", $submission->id);
-                        }
-                    }
-                }
-            echo "</TABLE></CENTER>\n";
-            }
-        // now display the overall teacher and peer means
-        if ($nallteachergrades) {
-            $grandteachergrade = $sumallteachergrades / $nallteachergrades;
-            }
-        else {
-            $grandteachergrade = 0;
-            }
-        if ($nallpeergrades) {
-            $grandpeergrade = $sumallpeergrades / $nallpeergrades;
-            }
-        else {
-            $grandpeergrade = 0;
-            }
-        if ($useteachersgrades) {
-            echo "<P><B>".get_string("overallteachergrade", "workshop", number_format($grandteachergrade, 2))." [$nallteachergrades]</B>\n";
-            }
-        if ($usepeergrades) {
-            echo "<P><B>".get_string("overallpeergrade", "workshop", number_format($grandpeergrade, 2))." [$nallpeergrades]</B><BR>\n"; 
-            }
-        // run thru each users and see how their assessments faired, we may junk the grading stats but what the heck!
         foreach ($users as $user) {
-            // we need to calculate a user bias before we can calculate their reliability
-            $sumbias = 0.0;
-            // nbias is used later to show how many peer assessments the user has done
-            $nbias[$user->id] = 0;
-            if ($workshop->nsassessments) { // peer assessments?
-                // run thru this user's assessments on the STUDENT submissions
-                if ($assessments = workshop_get_student_assessments($workshop, $user)) {
-                    foreach ($assessments as $assessment) {
-                        $submission = get_record("workshop_submissions", "id", $assessment->submissionid);
-                        // calculate the sum of "validity" values, the bias in a user's grading...
-                        $sumbias += $submission->peergrade - $assessment->grade;
-                        $nbias[$user->id]++;
-                        }
-                    }
-                }
-            if ($nbias[$user->id] > 1) {
-                // we could divide by n-1 to remove own score from calculation of mean but we don't because we re-use bias
-                // values in the calculation of reliability, and it's all relative anyway
-                $bias[$user->id] = $sumbias / $nbias[$user->id];
-                }
-            else {
-                $bias[$user->id] = 0.0;
-                }
-            // now look at all the user's assessments of both the TEACHER's submissions and the STUDENT submissions
-            // to calculate their overall grading grade
-            $sumgradinggrade = 0.0;
-            $ngradinggrades = 0;
-            if ($workshop->ntassessments or $workshop->nsassessments) { // worth looking?
-                if ($assessments = workshop_get_user_assessments($workshop, $user)) {
-                    foreach ($assessments as $assessment) {
-                        if ($assessment->timegraded > 0) {
-                            $sumgradinggrade += $assessment->gradinggrade;
-                            $ngradinggrades++;
-                            }
-                        }
-                    }
-                }
-            if ($ngradinggrades) {
-                $gradinggrade[$user->id] = $sumgradinggrade / $ngradinggrades;
-                }
-            else {
-                $gradinggrade[$user->id] = 0.0;
-                }
-            }
-        
-        // calculate the mean value of "reliability", the accuracy of a user's grading (disregarding bias)
-        // use a linear function rather than a squared function for reliability
-        // at the same time calculate a reliability of a "dumb user" whose grades everything at the grand mean value
-        $sumdumbreliability = 0.0;
-        $ndumbreliability =0;
-        foreach ($users as $user) {
-            $sumreliability = 0.0;
-            $nreliability = 0;
-            if ($workshop->nsassessments) { // worth a look?
-                // look only at the user's assessment of STUDENT submissions
-                if ($assessments = workshop_get_student_assessments($workshop, $user)) {
-                    foreach ($assessments as $assessment) {
-                        $submission = get_record("workshop_submissions", "id", $assessment->submissionid);
-                        $sumreliability += abs($submission->peergrade - $assessment->grade - $bias[$user->id]);
-                        $nreliability++;
-                        $sumdumbreliability += abs($submission->peergrade - $grandpeergrade);
-                        $ndumbreliability++;
-                        }
-                    }
-                }
-            // calculate the mean reliability values
-            if ($nreliability) {
-                $reliability[$user->id] = $sumreliability / $nreliability;
-                }
-            else {
-                $reliability[$user->id] = 999999; // big number
-                }
-            }
-        if ($ndumbreliability) {
-            $dumbreliability = $sumdumbreliability / $ndumbreliability;
-            }
-        else {
-            $dumbreliability = 999999; // big number
-            }
-
-        // convert bias and reliability values into scales where 1 is prefect, 0 is no grading done...
-        // ...but first find the largest (absolute) value of the bias measures
-        if (max($bias) > abs(min($bias))) {
-            $maxbias = max($bias);
-            }
-        else {
-            $maxbias = abs(min($bias));
-            }
-
-        echo "<P><CENTER>".get_string("studentgrades", "workshop", $course->student)."<BR>\n";
-        echo "<CENTER><TABLE BORDER=1 WIDTH=\"90%\"><TR>
-            <TD BGCOLOR=\"$THEME->cellheading2\"><B>$course->student</B></TD>\n";
-        if ($useteachersgrades) {
-            echo "<TD BGCOLOR=\"$THEME->cellheading2\"><B>".get_string("assessmentsby", "workshop", $course->teachers)."</B></TD>\n";
-            }
-        if ($usepeergrades) {
-            echo "<TD BGCOLOR=\"$THEME->cellheading2\"><B>".get_string("assessmentsby", "workshop", $course->students)."</B></TD>\n";
-            }
-        if ($usebiasgrades) {
-            echo "<TD BGCOLOR=\"$THEME->cellheading2\"><B>".get_string("gradeforbias", "workshop")."</B></TD>\n";
-            }
-        if ($usereliabilitygrades) {
-                echo "<TD BGCOLOR=\"$THEME->cellheading2\"><B>".get_string("gradeforreliability", "workshop")."</B></TD>\n";
-            }
-        if ($usegradinggrades) {
-            echo "<TD BGCOLOR=\"$THEME->cellheading2\"><B>".get_string("gradeforassessments", "workshop")."</B></TD>\n";
-            }
-        echo "<TD BGCOLOR=\"$THEME->cellheading2\"><B>".get_string("overallgrade", "workshop")."</B></TD></TR>\n";
-        // now display the weights
-        echo "<TR><TD BGCOLOR=\"$THEME->cellheading2\"><B>".get_string("weights","workshop")."</B></TD>\n";
-        if ($useteachersgrades) {
-            echo "<TD BGCOLOR=\"$THEME->cellheading2\"><B>$WORKSHOP_FWEIGHTS[$teacherweight]</B></TD>\n";
-            }
-        if ($usepeergrades) {
-            echo "<TD BGCOLOR=\"$THEME->cellheading2\"><B>$WORKSHOP_FWEIGHTS[$peerweight]</B></TD>\n";
-            }
-        if ($usebiasgrades) {
-            echo "<TD BGCOLOR=\"$THEME->cellheading2\"><B>$WORKSHOP_FWEIGHTS[$biasweight]</B></TD>\n";
-            }
-        if ($usereliabilitygrades) {
-            echo "<TD BGCOLOR=\"$THEME->cellheading2\"><B>$WORKSHOP_FWEIGHTS[$reliabilityweight]</B></TD>\n";
-            }
-        if ($usegradinggrades) {
-            echo "<TD BGCOLOR=\"$THEME->cellheading2\"><B>$WORKSHOP_FWEIGHTS[$gradingweight]</B></TD>\n";
-            }
-        echo "<TD BGCOLOR=\"$THEME->cellheading2\"><B>&nbsp;</B></TD></TR>\n";
-        foreach ($users as $user) {
-            // get user's best submission
-            $bestgrade = -1;
-            $teachergrade = 0;
-            $peergrade = 0;
-            if ($submissions = workshop_get_user_submissions($workshop, $user)) {
-                foreach ($submissions as $submission) {
-                    $grade = ($submission->teachergrade * $WORKSHOP_FWEIGHTS[$teacherweight] + 
-                            $submission->peergrade * $WORKSHOP_FWEIGHTS[$peerweight]) / 
-                            ($WORKSHOP_FWEIGHTS[$teacherweight] + $WORKSHOP_FWEIGHTS[$peerweight]);
-                    if ($grade > $bestgrade) {
-                        $bestgrade = $grade;
-                        $teachergrade = $submission->teachergrade;
-                        $peergrade = $submission->peergrade;
-                        $bestsubmission = $submission;
-                        }
-                    }
-                }
-            else { // funny this user did not submit - create a dummy submission to hold any grades they might have
-                unset($bestsubmission);
-                $bestsubmission->workshopid = $workshop->id;
-                $bestsubmission->userid = $user->id;
-                $bestsubmission->title = "No Submission";
-                $bestsubmission->timecreated = 0;
-                if (!$bestsubmission->id = insert_record("workshop_submissions", $bestsubmission)) {
-                    error("Unable to create dummy submission record");
-                    }
-                }
-            // biasgrade is scaled between zero and one NEED TO ADD TEST FOR NO PEER ASSESSMENTS OF SUBMITTED WORK
-            if ($maxbias) {
-                $biasgrade = max(($nbias[$user->id] / $workshop->nsassessments) - (abs($bias[$user->id]) / $maxbias),
-                    0.0);
-                }
-            else {
-                $biasgrade = 0;
-                }
-            // reliabilitygrade is scaled between zero and one
-            
-            if ($dumbreliability and $workshop->nsassessments) {
-                // nbias used here as it contains the number of assessments the user has done
-                $reliabilitygrade = max(($nbias[$user->id] / $workshop->nsassessments) - 
-                            ($reliability[$user->id] / $dumbreliability), 0.0);
-                }
-            else {
-                $reliabilitygrade = 0;
-                }
-            $biasscaled = intval($biasgrade * $workshop->grade + 0.5);
-            $reliabilityscaled = intval($reliabilitygrade * $workshop->grade + 0.5);
-            $gradingscaled = intval($gradinggrade[$user->id] * $workshop->grade / COMMENTSCALE + 0.5);
-            $finalgrade = intval((($teachergrade * $WORKSHOP_FWEIGHTS[$teacherweight] * $useteachersgrades) + 
-                ($peergrade * $WORKSHOP_FWEIGHTS[$peerweight] * $usepeergrades) + 
-                ($biasscaled * $WORKSHOP_FWEIGHTS[$biasweight] * $usebiasgrades) + 
-                ($reliabilityscaled * $WORKSHOP_FWEIGHTS[$reliabilityweight] * $usereliabilitygrades) + 
-                ($gradingscaled * $WORKSHOP_FWEIGHTS[$gradingweight] * $usegradinggrades) + 0.5) / 
-                (($WORKSHOP_FWEIGHTS[$teacherweight] * $useteachersgrades) + 
-                ($WORKSHOP_FWEIGHTS[$peerweight] * $usepeergrades) + 
-                ($WORKSHOP_FWEIGHTS[$biasweight] * $usebiasgrades) +
-                ($WORKSHOP_FWEIGHTS[$reliabilityweight] * $usereliabilitygrades) +
-                ($WORKSHOP_FWEIGHTS[$gradingweight] * $usegradinggrades)));
-            echo "<TR><TD>".fullname($user)."</TD>";
-            if ($useteachersgrades) {
-                echo "<TD>$teachergrade</TD>";
-                }
-            if ($usepeergrades) {
-                echo "<TD>$peergrade</TD>";
-                }
-            if ($usebiasgrades) {
-                echo "<TD>$biasscaled</TD>";
-                }
-            if ($usereliabilitygrades) {
-                echo "<TD>$reliabilityscaled</TD>";
-                }
-            if ($usegradinggrades) {
-                echo "<TD>$gradingscaled</TD>";
-                }
-            echo "<TD>$finalgrade</TD></TR>\n";
-
-            // save the grades
-            set_field("workshop_submissions", "biasgrade", $biasscaled, "id", $bestsubmission->id);
-            set_field("workshop_submissions", "reliabilitygrade", $reliabilityscaled, "id", $bestsubmission->id);
-            set_field("workshop_submissions", "gradinggrade", $gradingscaled, "id", $bestsubmission->id);
-            set_field("workshop_submissions", "finalgrade", $finalgrade, "id", $bestsubmission->id);
-            }
-        echo "</TABLE><BR CLEAR=ALL>\n";
-        print_string("allgradeshaveamaximumof", "workshop", $workshop->grade);
-        echo "</CENTER><BR>\n";
-
-        print_continue("view.php?a=$workshop->id");
-        }
-                
-    
-    /*************** display final grades (by teacher) ***************************/
-    elseif ($action == 'displayfinalgrades') {
-        // Get all the students
-        if (!$users = get_course_students($course->id, "u.lastname, u.firstname")) {
-            print_heading(get_string("nostudentsyet"));
-            print_footer($course);
-            exit;
-        }
-        
-        // get the final weights from the database
-        $teacherweight = get_field("workshop","teacherweight", "id", $workshop->id);
-        $peerweight = get_field("workshop","peerweight", "id", $workshop->id);
-        $includeteachersgrade = get_field("workshop","includeteachersgrade", "id", $workshop->id);
-        $biasweight = get_field("workshop","biasweight", "id", $workshop->id);
-        $reliabilityweight = get_field("workshop","reliabilityweight", "id", $workshop->id);
-        $gradingweight = get_field("workshop","gradingweight", "id", $workshop->id);
-        // work out what to show in the final grades tables and what to include in the calculation of the final grade
-        // teacher grades?
-        if ($workshop->gradingstrategy and $teacherweight) {
-            $useteachersgrades = 1;
-        }
-        else {
-            $useteachersgrades = 0;
-        }
-        // peergrades?
-        if ($workshop->gradingstrategy and $workshop->nsassessments and $peerweight) {
-            $usepeergrades = 1;
-        }
-        else {
-            $usepeergrades = 0;
-        }
-        // bias grades?
-        if ((($workshop->ntassessments >= 3) or ($workshop->nsassessments >= 3)) and ($useteachersgrades or $usepeergrades) 
-                and $biasweight ) {
-            $usebiasgrades = 1;
-        }
-        else {
-            $usebiasgrades = 0;
-        }
-        // reliability grades?
-        if ((($workshop->ntassessments >= 3) or ($workshop->nsassessments >= 3)) and ($useteachersgrades or $usepeergrades) 
-                and $reliabilityweight ) {
-            $usereliabilitygrades = 1;
-        }
-        else {
-            $usereliabilitygrades = 0;
-        }
-        // grading grades?
-        if (($workshop->ntassessments or $workshop->nsassessments) and $gradingweight ) {
-            $usegradinggrades = 1;
-        }
-        else {
-            $usegradinggrades = 0;
-        }
-        
-        // show the final grades as stored in the tables...
-        print_heading_with_help(get_string("displayoffinalgrades", "workshop"), "finalgrades", "workshop");
-        echo "<center><table border=\"1\" width=\"90%\"><tr>
-            <td bgcolor=\"$THEME->cellheading2\"><b>".$course->student."</b></td>";
-        echo "<td bgcolor=\"$THEME->cellheading2\"><b>".get_string("submission", "workshop")."</b></td>";
-        if ($useteachersgrades) {
-            echo "<td bgcolor=\"$THEME->cellheading2\" align=\"center\"><b>".get_string("assessmentsby", "workshop", $course->teachers)."</b></td>";
-        }
-        if ($usepeergrades) {
-            echo "<td bgcolor=\"$THEME->cellheading2\" align=\"center\"><b>".get_string("assessmentsby", "workshop", $course->students)."</b></td>";
-        }
-        echo "<td bgcolor=\"$THEME->cellheading2\" align=\"center\"><b>".get_string("assessmentsdone", "workshop")."</b></td>";
-        if ($usebiasgrades) {
-            echo "<td bgcolor=\"$THEME->cellheading2\" align=\"center\"><b>".get_string("gradeforbias", "workshop")."</b></td>";
-        }
-        if ($usereliabilitygrades) {
-            echo "<td bgcolor=\"$THEME->cellheading2\" align=\"center\"><b>".get_string("gradeforreliability", "workshop")."</b></td>";
-        }
-        if ($usegradinggrades) {
-            echo "<td bgcolor=\"$THEME->cellheading2\" align=\"center\"><b>".get_string("gradeforassessments", "workshop")."</b></td>";
-        }
-        echo "<td bgcolor=\"$THEME->cellheading2\" align=\"center\"><b>".get_string("overallgrade", "workshop")."</b></td></TR>\n";
-        // now the weights
-        echo "<TR><td bgcolor=\"$THEME->cellheading2\"><b>".get_string("weights", "workshop")."</b></td>";
-        echo "<td bgcolor=\"$THEME->cellheading2\" align=\"center\"><b>&nbsp;</b></td>\n";
-        if ($useteachersgrades) {
-            echo "<td bgcolor=\"$THEME->cellheading2\" align=\"center\"><b>$WORKSHOP_FWEIGHTS[$teacherweight]</b></td>\n";
-        }
-        if ($usepeergrades) {
-            echo "<td bgcolor=\"$THEME->cellheading2\" align=\"center\"><b>$WORKSHOP_FWEIGHTS[$peerweight]</b></td>\n";
-        }
-        echo "<td bgcolor=\"$THEME->cellheading2\" align=\"center\"><b>&nbsp;</b></td>\n";
-        if ($usebiasgrades) {
-            echo "<td bgcolor=\"$THEME->cellheading2\" align=\"center\"><b>$WORKSHOP_FWEIGHTS[$biasweight]</b></td>\n";
-        }
-        if ($usereliabilitygrades) {
-            echo "<td bgcolor=\"$THEME->cellheading2\" align=\"center\"><b>$WORKSHOP_FWEIGHTS[$reliabilityweight]</b></td>\n";
-        }
-        if ($usegradinggrades) {
-            echo "<td bgcolor=\"$THEME->cellheading2\" align=\"center\"><b>$WORKSHOP_FWEIGHTS[$gradingweight]</b></td>\n";
-        }
-        echo "<td bgcolor=\"$THEME->cellheading2\"><b>&nbsp;</b></td></tr>\n";
-        foreach ($users as $user) {
-            if ($submissions = workshop_get_user_submissions($workshop, $user)) {
-                foreach ($submissions as $submission) {
-                    echo "<tr><td>".fullname($user)."</td>";
-                    echo "<td>".workshop_print_submission_title($workshop, $submission)."</td>\n";
-                    if ($useteachersgrades) {
-                        echo "<td align=\"center\">".workshop_print_submission_assessments($workshop, $submission, "teacher")."</td>";
-                    }
-                    if ($usepeergrades) {
-                        echo "<td align=\"center\">".workshop_print_submission_assessments($workshop, $submission, "student")."</td>";
-                    }
-                    echo "<td align=\"center\">".workshop_print_user_assessments($workshop, $user)."</td>";
-                    if ($usebiasgrades) {
-                        echo "<td align=\"center\">$submission->biasgrade</td>";
-                    }
-                    if ($usereliabilitygrades) {
-                        echo "<td align=\"center\">$submission->reliabilitygrade</td>";
-                    }
-                    if ($usegradinggrades) {
-                        echo "<td align=\"center\">$submission->gradinggrade</td>";
-                    }
-                    echo "<td align=\"center\">$submission->finalgrade</td></tr>\n";
-                }
-            }
-        }
-        echo "</table><br clear=\"all\">\n";
-        if ($workshop->showleaguetable) {
-            workshop_print_league_table($workshop);
-            if ($workshop->anonymous) {
-                echo "<p>".get_string("namesnotshowntostudents", "workshop", $course->students)."</p>\n";
-            }
-        }
-        echo "<p>".get_string("allgradeshaveamaximumof", "workshop", $workshop->grade)."</p>\n";
-        print_continue("view.php?a=$workshop->id");
-    }
-
-
-    /*************** display final weights (by teacher) ***************************/
-    elseif ($action == 'displayfinalweights') {
-
-        if (!isteacher($course->id)) {
-            error("Only teachers can look at this page");
-        }
-
-        if ($workshop->phase != 5) { // is this at the expected phase?
-            print_heading(get_string("assignmentnotinthecorrectphase", "workshop"));
-            print_continue("view.php?a=$workshop->id");
-            }
-        else {
-            
-            ?>
-            <form name="weightsform" method="post" action="submissions.php">
-            <INPUT TYPE="hidden" NAME="id" VALUE="<?PHP echo $cm->id ?>">
-            <input type="hidden" name="action" value="calculatefinalgrades">
-            <CENTER>
-            <?PHP
-    
-            // get the final weights from the database
-            $teacherweight = get_field("workshop","teacherweight", "id", $workshop->id);
-            $peerweight = get_field("workshop","peerweight", "id", $workshop->id);
-            $includeteachersgrade = get_field("workshop","includeteachersgrade", "id", $workshop->id);
-            $biasweight = get_field("workshop","biasweight", "id", $workshop->id);
-            $reliabilityweight = get_field("workshop","reliabilityweight", "id", $workshop->id);
-            $gradingweight = get_field("workshop","gradingweight", "id", $workshop->id);
-    
-            // now show the weights used in the final grades
-            print_heading_with_help(get_string("calculationoffinalgrades", "workshop"), "calculatingfinalgrade", "workshop");
-            echo "<TABLE WIDTH=\"50%\" BORDER=\"1\">\n";
-            echo "<TR><td COLSPAN=\"2\" bgcolor=\"$THEME->cellheading2\"><CENTER><B>".
-                get_string("weightsusedforfinalgrade", "workshop")."</B></CENTER></TD></TR>\n";
-            echo "<tr><td align=\"right\">".get_string("weightforteacherassessments", "workshop", $course->teacher).":</td>\n";
-            echo "<TD>";
-            workshop_choose_from_menu($WORKSHOP_FWEIGHTS, "teacherweight", $teacherweight, "");
-            echo "</TD></TR>\n";
-            echo "<TR><TD ALIGN=\"right\">".get_string("weightforpeerassessments", "workshop").":</TD>\n";
-            echo "<TD>";
-            workshop_choose_from_menu($WORKSHOP_FWEIGHTS, "peerweight", $peerweight, "");
-            echo "</TD></TR>\n";
-            echo "<TR><TD ALIGN=\"right\">".get_string("weightforbias", "workshop").":</TD>\n";
-            echo "<TD>";
-            workshop_choose_from_menu($WORKSHOP_FWEIGHTS, "biasweight", $biasweight, "");
-            echo "</TD></TR>\n";
-            echo "<TR><TD ALIGN=\"right\">".get_string("weightforreliability", "workshop").":</TD>\n";
-            echo "<TD>";
-            workshop_choose_from_menu($WORKSHOP_FWEIGHTS, "reliabilityweight", $reliabilityweight, "");
-            echo "</TD></TR>\n";
-            echo "<TR><TD ALIGN=\"right\">".get_string("weightforgradingofassessments", "workshop").":</TD>\n";
-            echo "<TD>";
-            workshop_choose_from_menu($WORKSHOP_FWEIGHTS, "gradingweight", $gradingweight, "");
-            echo "</TD></TR>\n";
-            echo "<TR><TD COLSPAN=\"2\" bgcolor=\"$THEME->cellheading2\"><CENTER><B>".
-                get_string("optionforpeergrade", "workshop")."</B></CENTER></TD></TR>\n";
-            echo "<TR><TD ALIGN=\"right\">".get_string("includeteachersgrade", "workshop").":</TD>\n";
-            echo "<TD>";
-            $options[0] = get_string("no"); $options[1] = get_string("yes");
-            choose_from_menu($options, "includeteachersgrade", $includeteachersgrade, "");
-            helpbutton("includeteachersgrade", get_string("includeteachersgrade", "workshop"), "workshop");
-            echo "</TD></TR>\n";
-            echo "</TABLE>\n";
-
-            print_heading_with_help(get_string("leaguetable", "workshop"), "leaguetable", "workshop");
-            echo "<TABLE WIDTH=\"50%\" BORDER=\"1\">\n";
-            echo "<tr><td align=\"right\">".get_string("numberofentries", "workshop").":</td>\n";
-            echo "<TD>";
-            $numbers[22] = 'All';
-            $numbers[21] = 50;
-            for ($i=20; $i>=0; $i--) {
-                $numbers[$i] = $i;
-                }
-            $nentries = $workshop->showleaguetable;
-            if ($nentries == 99) {
-                $nentries = 'All';
-                }
-            choose_from_menu($numbers, "nentries", "$nentries", "");
-            echo "</td></tr>\n";
-            echo "<tr><td align=right><p>".get_string("hidenamesfromstudents", "workshop", $course->students)."</p></td><td>\n";
-            $options[0] = get_string("no"); $options[1] = get_string("yes");
-            choose_from_menu($options, "anonymous", $workshop->anonymous, "");
-            echo "</td></tr>\n";
-            echo "</table><br />\n";
-            echo "<INPUT TYPE=submit VALUE=\"".get_string("calculationoffinalgrades", "workshop")."\">\n";
-            echo "</CENTER>";
-            echo "</FORM>\n";
-        }
-    }
-
-
-    /******************* list all submissions ************************************/
-    elseif ($action == 'listallsubmissions' ) {
-        if (!$users = get_course_students($course->id)) {
-            print_heading(get_string("nostudentsyet"));
-            print_footer($course);
-            exit;
-            }
-        print_heading(get_string("listofallsubmissions", "workshop").":", "CENTER");
-        workshop_list_all_submissions($workshop, $USER);
-        print_continue("view.php?id=$cm->id");
-        
-        }
-    
-
-    /******************* list for assessment student (submissions) ************************************/
-    elseif ($action == 'listforassessmentstudent' ) {
-        if (!$users = get_course_students($course->id)) {
-            print_heading(get_string("nostudentsyet"));
-            print_footer($course);
-            exit;
-            }
-        workshop_list_unassessed_student_submissions($workshop, $USER);
-        print_continue("view.php?id=$cm->id");
-        
-        }
-    
-
-    /******************* list for assessment teacher (submissions) ************************************/
-    elseif ($action == 'listforassessmentteacher' ) {
-        if (!$users = get_course_students($course->id)) {
-            print_heading(get_string("nostudentsyet"));
-            print_footer($course);
-            exit;
-            }
-        workshop_list_unassessed_teacher_submissions($workshop, $USER);
-        print_continue("view.php?id=$cm->id");
-        
-        }
-    
-
-    /******************* save analysis options (for teachers only) ************************************/
-    elseif ($action == 'saveanalysisoptions' ) {
-    
+            // skip if student not in group
+            if ($groupid) {
+                if (!ismember($groupid, $user->id)) {
+                    continue;
+                }
+            }
+                       if ($submissions = workshop_get_user_submissions($workshop, $user)) {
+                $gradinggrade = workshop_gradinggrade($workshop, $user);
+                               foreach ($submissions as $submission) {
+                    $grade = workshop_submission_grade($workshop, $submission);
+                                       echo "<tr><td>$user->firstname $user->lastname</td>";
+                                       echo "<td>".workshop_print_submission_title($workshop, $submission)."</td>\n";
+                                       echo "<td align=\"center\">".workshop_print_user_assessments($workshop, $user)."</td>";
+                                       echo "<td align=\"center\">$gradinggrade</td>";
+                                       echo "<td align=\"center\">".workshop_print_submission_assessments($workshop, $submission, 
+                            "teacher")."</td>";
+                                       echo "<td align=\"center\">".workshop_print_submission_assessments($workshop, $submission, 
+                            "student")."</td>";
+                                       echo "<td align=\"center\">$grade</td>";
+                                       echo "<td align=\"center\">".number_format($gradinggrade + $grade, 1)."</td></tr>\n";
+                               }
+                       }
+               }
+               echo "</table><br clear=\"all\">\n";
+        workshop_print_key($workshop);
+               if ($workshop->showleaguetable) {
+                       workshop_print_league_table($workshop);
+                       if ($workshop->anonymous) {
+                               echo "<p>".get_string("namesnotshowntostudents", "workshop", $course->students)."</p>\n";
+                       }
+               }
+               echo "<p>".get_string("allgradeshaveamaximumof", "workshop", $workshop->grade)."</p>\n";
+               print_continue("view.php?id=$cm->id");
+       }
+
+
+       /******************* list all submissions ************************************/
+       elseif ($action == 'listallsubmissions' ) {
+               if (!$users = get_course_students($course->id)) {
+                       print_heading(get_string("nostudentsyet"));
+                       print_footer($course);
+                       exit;
+                       }
+               print_heading(get_string("listofallsubmissions", "workshop").":", "CENTER");
+               workshop_list_all_submissions($workshop, $USER);
+               print_continue("view.php?id=$cm->id");
+               
+               }
+       
+
+       /******************* list for assessment student (submissions) ************************************/
+       elseif ($action == 'listforassessmentstudent' ) {
+               if (!$users = get_course_students($course->id)) {
+                       print_heading(get_string("nostudentsyet"));
+                       print_footer($course);
+                       exit;
+                       }
+               workshop_list_unassessed_student_submissions($workshop, $USER);
+               print_continue("view.php?id=$cm->id");
+               
+               }
+       
+
+       /******************* list for assessment teacher (submissions) ************************************/
+       elseif ($action == 'listforassessmentteacher' ) {
+   
         if (!isteacher($course->id)) {
-            error("Only teachers can look at this page");
-            }
+                       error("Only teachers can look at this page");
+                       }
 
-        set_field("workshop", "teacherloading", $_POST['teacherloading'], "id", "$workshop->id");
-        set_field("workshop", "gradingweight", $_POST['gradingweight'], "id", "$workshop->id");
-        set_field("workshop", "assessmentstodrop", $_POST['assessmentstodrop'], "id", "$workshop->id");
-        redirect("submissions.php?id=$cm->id&action=analysisofassessments", 
-                get_string("savedok", "workshop"));
-        
-        }
-    
+               workshop_list_unassessed_teacher_submissions($workshop, $USER);
+               print_continue("view.php?id=$cm->id");
+               
+               }
+       
 
     /*************** update (league table options teacher) ***************************/
     elseif ($action == 'updateleaguetable') {
         }
 
 
-    /*************** update over allocation (by teacher) ***************************/
-    elseif ($action == 'updateoverallocation') {
-        
-        if (!isteacher($course->id)) {
-            error("Only teachers can look at this page");
-        }
-
-        $form = (object)$_POST;
-        
-        set_field("workshop", "overallocation", $form->overallocation, "id", $workshop->id);
-        echo "<p align=\"center\"><b>".get_string("overallocation", "workshop").": $form->overallocation</b></p>\n";
-        add_to_log($course->id, "workshop", "over allocation", "view.php?id=$cm->id", $form->overallocation,$cm->id);
-
-        redirect("submissions.php?action=adminlist&id=$cm->id");
-        }
-
-
     /******************* user confirm delete ************************************/
     elseif ($action == 'userconfirmdelete' ) {
 
index 29fb776110298e5e1297269e44845790977c80d9..8ed2171494c2a481bdcb41ca92367f3ae9210d5f 100644 (file)
     if (! $cm = get_record("course_modules", "id", $id)) {
         error("Course Module ID was incorrect");
     }
-
     if (! $course = get_record("course", "id", $cm->course)) {
         error("Course is misconfigured");
     }
-
     if (! $workshop = get_record("workshop", "id", $cm->instance)) {
         error("Course module is incorrect");
     }
         else {
             notify(get_string("uploadnofilefound", "assignment"));
         }
-    }
-    print_continue("view.php?a=$workshop->id");
+       }
+    print_continue("view.php?id=$cm->id");
 
     print_footer($course);
 
index fa67847064b5fc94d3f68864985bbb0a46d9c17c..bfc90b1b04b265eddbf1e4f7c23a5a42e6b542a4 100644 (file)
@@ -5,7 +5,7 @@
 //  This fragment is called by /admin/index.php
 ////////////////////////////////////////////////////////////////////////////////
 
-$module->version  = 2004060400;
+$module->version  = 2004081100;
 $module->requires = 2004052505;  // Requires this Moodle version
 $module->cron     = 60;
 
index d6dcc523a0bfc1089b1469b1ff0c14a94f1da235..cd9ee17b76a841f959ac1045525c3799e2fad1e1 100644 (file)
     require("../../config.php");
     require("lib.php");
     require("locallib.php");
-    
-    optional_variable($id);    // Course Module ID
-    optional_variable($a);    // workshop ID
+       
+       require_variable($id);    // Course Module ID
 
     // get some useful stuff...
-    if ($id) {
-        if (! $cm = get_record("course_modules", "id", $id)) {
-            error("Course Module ID was incorrect");
-        }
-    
-        if (! $course = get_record("course", "id", $cm->course)) {
-            error("Course is misconfigured");
-        }
-    
-        if (! $workshop = get_record("workshop", "id", $cm->instance)) {
-            error("Course module is incorrect");
-        }
-
-    } else {
-        if (! $workshop = get_record("workshop", "id", $a)) {
-            error("Course module is incorrect");
-        }
-        if (! $course = get_record("course", "id", $workshop->course)) {
-            error("Course is misconfigured");
-        }
-        if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $course->id)) {
-            error("Course Module ID was incorrect");
-        }
+    if (! $cm = get_record("course_modules", "id", $id)) {
+        error("Course Module ID was incorrect");
+    }
+    if (! $course = get_record("course", "id", $cm->course)) {
+        error("Course is misconfigured");
+    }
+    if (! $workshop = get_record("workshop", "id", $cm->instance)) {
+        error("Course module is incorrect");
     }
 
     require_login($course->id);
     
     optional_variable($action);
     if (isteacher($course->id)) {
-        if (empty($action)) { // no action specified, either go straight to elements page else the admin page
-            // has the assignment any elements
-            if (count_records("workshop_elements", "workshopid", $workshop->id) >= $workshop->nelements) {
-                $action = "teachersview";
-            }
-            else {
-                redirect("assessments.php?action=editelements&id=$cm->id");
-            }
-        }
-    }
-    elseif (!isguest()) { // it's a student then
-        if (!$cm->visible) {
-            notice(get_string("activityiscurrentlyhidden"));
-        }
-        switch ($workshop->phase) {
-            case 0 :
-            case 1 : $action = 'notavailable'; break;
-            case 2 :
-            case 3 :
-            case 4 : $action = 'studentsview'; break;
-            case 5 : $action = 'notavailable'; break;
-            case 6 : $action = 'displayfinalgrade';
-        }
-    }
-    else { // it's a guest, oh no!
-        $action = 'notavailable';
-    }
-    
-    
-    /************** allow (peer) assessments only (move to phase 4) (for teachers)**/
-    if ($action == 'allowassessments') {
-
-        if (!isteacher($course->id)) {
-            error("Only teachers can look at this page");
-        }
-
-        // move to phase 4
-        set_field("workshop", "phase", 4, "id", "$workshop->id");
-        add_to_log($course->id, "workshop", "assessments only", "view.php?id=$cm->id", "$workshop->id", $cm->id);
-        redirect("view.php?a=$workshop->id", get_string("movingtophase", "workshop", 4));
-    }
-    
-
-    /************** allow both (submissions and assessments) (move to phase 3) (for teachers)**/
-    if ($action == 'allowboth') {
-
-        if (!isteacher($course->id)) {
-            error("Only teachers can look at this page");
-        }
-
-        // move to phase 3
-        set_field("workshop", "phase", 3, "id", "$workshop->id");
-        add_to_log($course->id, "workshop", "allow both", "view.php?id=$cm->id", "$workshop->id", $cm->id);
-        redirect("view.php?a=$workshop->id", get_string("movingtophase", "workshop", 3));
-    }
-    
-
-    /************** allow submissions only (move to phase 2) (for teachers)**/
-    if ($action == 'allowsubmissions') {
-
-        if (!isteacher($course->id)) {
-            error("Only teachers can look at this page");
-        }
+               if (empty($action)) { // no action specified, either go straight to elements page else the admin page
+                       // has the assignment any elements
+                       if (count_records("workshop_elements", "workshopid", $workshop->id) >= $workshop->nelements) {
+                               $action = "teachersview";
+                       }
+                       else {
+                       redirect("assessments.php?action=editelements&id=$cm->id");
+                       }
+               }
+       }
+       elseif (!isguest()) { // it's a student then
+               if (!$cm->visible) {
+                       notice(get_string("activityiscurrentlyhidden"));
+               }
+               switch ($workshop->phase) {
+                       case 0 :
+                       case 1 : $action = 'notavailable'; break;
+                       case 2 :
+                       case 3 :
+                       case 4 : $action = 'studentsview'; break;
+                       case 5 : $action = 'displayfinalgrade';
+               }
+       }
+       else { // it's a guest, oh no!
+               $action = 'notavailable';
+       }
+       
+       
+       /************** allow (peer) assessments only (move to phase 4) (for teachers)**/
+       if ($action == 'allowassessments') {
+
+               if (!isteacher($course->id)) {
+                       error("Only teachers can look at this page");
+               }
+
+               // move to phase 4
+               set_field("workshop", "phase", 4, "id", "$workshop->id");
+               add_to_log($course->id, "workshop", "assessments only", "view.php?id=$cm->id", "$workshop->id", $cm->id);
+               redirect("view.php?id=$cm->id", get_string("movingtophase", "workshop", 4));
+       }
+       
+
+       /************** allow both (submissions and assessments) (move to phase 3) (for teachers)**/
+       if ($action == 'allowboth') {
+
+               if (!isteacher($course->id)) {
+                       error("Only teachers can look at this page");
+               }
+
+               // move to phase 3
+               set_field("workshop", "phase", 3, "id", "$workshop->id");
+               add_to_log($course->id, "workshop", "allow both", "view.php?id=$cm->id", "$workshop->id", $cm->id);
+               redirect("view.php?id=$cm->id", get_string("movingtophase", "workshop", 3));
+       }
+       
+
+       /************** allow submissions only (move to phase 2) (for teachers)**/
+       if ($action == 'allowsubmissions') {
+
+               if (!isteacher($course->id)) {
+                       error("Only teachers can look at this page");
+               }
 
         // move to phase 2, check that teacher has made enough submissions
         if (workshop_count_teacher_submissions($workshop) < $workshop->ntassessments) {
             redirect("view.php?id=$cm->id", get_string("notenoughexamplessubmitted", "workshop", 
                         $course->teacher));
-        }
-        else {
+               }
+               else {
+                       if ($n = workshop_count_teacher_submissions_for_assessment($workshop, $USER)) {
+                notify(get_string("teachersubmissionsforassessment", "workshop", $n));
+            }
             set_field("workshop", "phase", 2, "id", "$workshop->id");
-            add_to_log($course->id, "workshop", "submissions", "view.php?id=$cm->id", "$workshop->id", $cm->id);
-            redirect("view.php?id=$cm->id", get_string("movingtophase", "workshop", 2));
-        }
-    }
-    
-
-    /****************** close workshop for student assessments/submissions (move to phase 5) (for teachers)**/
-    elseif ($action == 'closeworkshop') {
-
-        if (!isteacher($course->id)) {
-            error("Only teachers can look at this page");
-        }
-
-        // move to phase 5
-        set_field("workshop", "phase", 5, "id", "$workshop->id");
-        add_to_log($course->id, "workshop", "close", "view.php?id=$cm->id", "$workshop->id", $cm->id);
-        redirect("view.php?a=$workshop->id", get_string("movingtophase", "workshop", 5));
-    }
-    
-
-    /****************** display final grade (for students) ************************************/
-    elseif ($action == 'displayfinalgrade' ) {
-
-        // get the final weights from the database
-        $teacherweight = get_field("workshop","teacherweight", "id", $workshop->id);
-        $peerweight = get_field("workshop","peerweight", "id", $workshop->id);
-        $includeteachersgrade = get_field("workshop","includeteachersgrade", "id", $workshop->id);
-        $biasweight = get_field("workshop","biasweight", "id", $workshop->id);
-        $reliabilityweight = get_field("workshop","reliabilityweight", "id", $workshop->id);
-        $gradingweight = get_field("workshop","gradingweight", "id", $workshop->id);
-        // work out what to show in the final grades tables and what to include in the calculation of the final grade
-        // teacher grades?
-        if ($workshop->gradingstrategy and $teacherweight) {
-            $useteachersgrades = 1;
-        }
-        else {
-            $useteachersgrades = 0;
-        }
-        // peergrades?
-        if ($workshop->gradingstrategy and $workshop->nsassessments and $peerweight) {
-            $usepeergrades = 1;
-        }
-        else {
-            $usepeergrades = 0;
-        }
-        // bias grades?
-        if ((($workshop->ntassessments >= 3) or ($workshop->nsassessments >= 3)) and $biasweight ) {
-            $usebiasgrades = 1;
-        }
-        else {
-            $usebiasgrades = 0;
-        }
-        // reliability grades?
-        if ((($workshop->ntassessments >= 3) or ($workshop->nsassessments >= 3)) and $reliabilityweight ) {
-            $usereliabilitygrades = 1;
-        }
-        else {
-            $usereliabilitygrades = 0;
-        }
-        // grading grades?
-        if (($workshop->ntassessments or $workshop->nsassessments) and $gradingweight ) {
-            $usegradinggrades = 1;
-        }
-        else {
-            $usegradinggrades = 0;
-        }
-        
-        // show the final grades as stored in the tables...
-        print_heading_with_help(get_string("displayoffinalgrades", "workshop"), "finalgrades", "workshop");
-        if ($submissions = workshop_get_user_submissions($workshop, $USER)) { // any submissions from user?
-            echo "<center><table border=\"1\" width=\"90%\"><tr>";
-            echo "<td><b>".get_string("submissions", "workshop")."</b></td>";
-            if ($useteachersgrades) {
-                echo "<td align=\"center\"><b>".get_string("teacherassessments", "workshop", 
+                       add_to_log($course->id, "workshop", "submissions", "view.php?id=$cm->id", "$workshop->id", $cm->id);
+                       redirect("view.php?id=$cm->id", get_string("movingtophase", "workshop", 2));
+               }
+       }
+       
+
+       /****************** display final grade (for students) ************************************/
+       elseif ($action == 'displayfinalgrade' ) {
+
+       
+               // show the final grades as stored in the tables...
+               print_heading_with_help(get_string("displayoffinalgrades", "workshop"), "finalgrades", "workshop");
+               if ($submissions = workshop_get_user_submissions($workshop, $USER)) { // any submissions from user?
+                       echo "<center><table border=\"1\" width=\"90%\"><tr>";
+                       echo "<td><b>".get_string("submissions", "workshop")."</b></td>";
+            echo "<td align=\"center\"><b>".get_string("assessmentsdone", "workshop")."</b></td>";
+            echo "<td align=\"center\"><b>".get_string("gradeforassessments", "workshop")."</b></td>";
+                       echo "<td align=\"center\"><b>".get_string("teacherassessments", "workshop", 
                         $course->teacher)."</b></td>";
-            }
-            if ($usepeergrades) {
-                echo "<td align=\"center\"><b>".get_string("studentassessments", "workshop", 
+            echo "<td align=\"center\"><b>".get_string("studentassessments", "workshop", 
                         $course->student)."</b></td>";
-            }
-            echo "<td align=\"center\"><b>".get_string("assessmentsdone", "workshop")."</b></td>";
-            if ($usebiasgrades) {
-                echo "<td align=\"center\"><b>".get_string("gradeforbias", "workshop")."</b></td>";
-            }
-            if ($usereliabilitygrades) {
-                echo "<td align=\"center\"><b>".get_string("gradeforreliability", "workshop")."</b></td>";
-            }
-            if ($usegradinggrades) {
-                echo "<td align=\"center\"><b>".get_string("gradeforassessments", "workshop")."</b></td>";
-            }
+            echo "<td align=\"center\"><b>".get_string("gradeforsubmission", "workshop")."</b></td>";
             echo "<td align=\"center\"><b>".get_string("overallgrade", "workshop")."</b></td></TR>\n";
-            // now the weights
-            echo "<TR><td><b>".get_string("weights", "workshop")."</b></td>";
-            if ($useteachersgrades) {
-                echo "<td align=\"center\"><b>$WORKSHOP_FWEIGHTS[$teacherweight]</b></td>\n";
-            }
-            if ($usepeergrades) {
-                echo "<td align=\"center\"><b>$WORKSHOP_FWEIGHTS[$peerweight]</b></td>\n";
-            }
-            echo "<td><b>&nbsp;</b></td>\n";
-            if ($usebiasgrades) {
-                echo "<td align=\"center\"><b>$WORKSHOP_FWEIGHTS[$biasweight]</b></td>\n";
-            }
-            if ($usereliabilitygrades) {
-                echo "<td align=\"center\"><b>$WORKSHOP_FWEIGHTS[$reliabilityweight]</b></td>\n";
-            }
-            if ($usegradinggrades) {
-                echo "<td align=\"center\"><b>$WORKSHOP_FWEIGHTS[$gradingweight]</b></td>\n";
-            }
-            echo "<td><b>&nbsp;</b></td></TR>\n";
+            $gradinggrade = workshop_gradinggrade($workshop, $USER);
             foreach ($submissions as $submission) {
+                $grade = workshop_submission_grade($workshop, $submission);
                 echo "<TR><td>".workshop_print_submission_title($workshop, $submission)."</td>\n";
-                if ($useteachersgrades) {
-                    echo "<td align=\"center\">".workshop_print_submission_assessments($workshop, 
+                echo "<td align=\"center\">".workshop_print_user_assessments($workshop, $USER)."</td>";
+                echo "<td align=\"center\">$gradinggrade</td>";
+                echo "<td align=\"center\">".workshop_print_submission_assessments($workshop, 
                             $submission, "teacher")."</td>";
-                }
-                if ($usepeergrades) {
-                    echo "<td align=\"center\">".workshop_print_submission_assessments($workshop, 
+                echo "<td align=\"center\">".workshop_print_submission_assessments($workshop, 
                             $submission, "student")."</td>";
-                }
-                echo "<td align=\"center\">".workshop_print_user_assessments($workshop, $USER)."</td>";
-                if ($usebiasgrades) {
-                    echo "<td align=\"center\">$submission->biasgrade</td>";
-                }
-                if ($usereliabilitygrades) {
-                    echo "<td align=\"center\">$submission->reliabilitygrade</td>";
-                }
-                if ($usegradinggrades) {
-                    echo "<td align=\"center\">$submission->gradinggrade</td>";
-                }
-                echo "<td align=\"center\">$submission->finalgrade</td></TR>\n";
+                echo "<td align=\"center\">$grade</td>";
+                echo "<td align=\"center\">".number_format($gradinggrade + $grade, 1)."</td></TR>\n";
             }
         }
         echo "</TABLE><BR CLEAR=ALL>\n";
-        echo "<p>&lt; &gt; ".get_string("assessmentdropped", "workshop")."</p>\n";
+               workshop_print_key($workshop);
         if ($workshop->showleaguetable) {
-            workshop_print_league_table($workshop);
-        }
-        echo "<br />".get_string("allgradeshaveamaximumof", "workshop", $workshop->grade);
-    }
-
-
-    /****************** make final grades available (go to phase 6) (for teachers only)********/
-    elseif ($action == 'makefinalgradesavailable') {
-
-        if (!isteacher($course->id)) {
-            error("Only teachers can look at this page");
-        }
-
-        set_field("workshop", "phase", 6, "id", "$workshop->id");
-        add_to_log($course->id, "workshop", "display grades", "view.php?id=$cm->id", "$workshop->id", $cm->id);
-        redirect("view.php?a=$workshop->id", get_string("movingtophase", "workshop", 6));
-    }
-    
-    
-    /****************** assignment not available (for students)***********************/
-    elseif ($action == 'notavailable') {
-        print_heading(get_string("notavailable", "workshop"));
-    }
-
-
-    /****************** set up assignment (move back to phase 1) (for teachers)***********************/
-    elseif ($action == 'setupassignment') {
-
-        if (!isteacher($course->id)) {
-            error("Only teachers can look at this page");
-        }
-
-        set_field("workshop", "phase", 1, "id", "$workshop->id");
-        add_to_log($course->id, "workshop", "set up", "view.php?id=$cm->id", "$workshop->id", $cm->id);
-        redirect("view.php?a=$workshop->id", get_string("movingtophase", "workshop", 1));
-    }
-    
-    
-    /****************** student's view could be in 1 of 4 stages ***********************/
-    elseif ($action == 'studentsview') {
-        workshop_print_assignment_info($workshop);
-        // in Stage 1? - are there any teacher's submissions? and...
-        // ...has student assessed the required number of the teacher's submissions 
-        if ($workshop->ntassessments and (!workshop_test_user_assessments($workshop, $USER))) {
-            print_heading(get_string("pleaseassesstheseexamplesfromtheteacher", "workshop", 
+                       workshop_print_league_table($workshop);
+               }
+       }
+
+
+       /****************** make final grades available (go to phase 5) (for teachers only)********/
+       elseif ($action == 'makefinalgradesavailable') {
+
+               if (!isteacher($course->id)) {
+                       error("Only teachers can look at this page");
+               }
+
+               set_field("workshop", "phase", 5, "id", "$workshop->id");
+               add_to_log($course->id, "workshop", "display grades", "view.php?id=$cm->id", "$workshop->id", $cm->id);
+               redirect("view.php?id=$cm->id", get_string("movingtophase", "workshop", 5));
+       }
+       
+       
+       /****************** assignment not available (for students)***********************/
+       elseif ($action == 'notavailable') {
+               print_heading(get_string("notavailable", "workshop"));
+       }
+
+
+       /****************** set up assignment (move back to phase 1) (for teachers)***********************/
+       elseif ($action == 'setupassignment') {
+
+               if (!isteacher($course->id)) {
+                       error("Only teachers can look at this page");
+               }
+
+               set_field("workshop", "phase", 1, "id", "$workshop->id");
+               add_to_log($course->id, "workshop", "set up", "view.php?id=$cm->id", "$workshop->id", $cm->id);
+               redirect("view.php?id=$cm->id", get_string("movingtophase", "workshop", 1));
+       }
+       
+       
+       /****************** student's view could be in 1 of 4 stages ***********************/
+       elseif ($action == 'studentsview') {
+               workshop_print_assignment_info($workshop);
+               // in Stage 1? - are there any teacher's submissions? and...
+               // ...has student assessed the required number of the teacher's submissions 
+               if ($workshop->ntassessments and (!workshop_test_user_assessments($workshop, $USER))) {
+                       print_heading(get_string("pleaseassesstheseexamplesfromtheteacher", "workshop", 
                         $course->teacher));
             workshop_list_teacher_submissions($workshop, $USER);
         }
             }   
             // in stage 3? - grade other student's submissions, resubmit and list all submissions
             else {
-                // list any assessments by teachers
-                if (workshop_count_teacher_assessments($workshop, $USER)) {
-                    print_heading(get_string("assessmentsby", "workshop", $course->teachers));
-                    workshop_list_teacher_assessments($workshop, $USER);
-                }
                 // is self assessment used in this workshop?
                 if ($workshop->includeself) {
                     // prints a table if there are any submissions which have not been self assessed yet
                     print_heading(get_string("yourassessments", "workshop"));
                     workshop_list_assessed_submissions($workshop, $USER);
                 }
+                // list any assessments by teachers
+                if (workshop_count_teacher_assessments($workshop, $USER)) {
+                    print_heading(get_string("assessmentsby", "workshop", $course->teachers));
+                    workshop_list_teacher_assessments($workshop, $USER);
+                }
                 // ... and show peer assessments
                 if (workshop_count_peer_assessments($workshop, $USER)) {
                     print_heading(get_string("assessmentsby", "workshop", $course->students));
                             echo "<hr size=\"1\" noshade>";
                         }
                     }
-                }
-                // allow user to list their submissions and assessments in a general way????
-                // print_heading("<A HREF=\"submissions.php?action=listallsubmissions&id=$cm->id\">".
-                //  get_string("listofallsubmissions", "workshop"));
-            }
-        }
-    }
-
-
-    /****************** submission of assignment by teacher only***********************/
-    elseif ($action == 'submitassignment') {
-    
-        if (!isteacher($course->id)) {
-            error("Only teachers can look at this page");
-        }
-            
-        $strdifference = format_time($workshop->deadline - time());
-        if (($workshop->deadline - time()) < 0) {
-            $strdifference = "<FONT COLOR=RED>$strdifference</FONT>";
-        }
-        $strduedate = userdate($workshop->deadline)." ($strdifference)";
-    
-        workshop_print_assignment_info($workshop);
+                               }
+                               // allow user to list their submissions and assessments in a general way????
+                               // print_heading("<A HREF=\"submissions.php?action=listallsubmissions&id=$cm->id\">".
+                               //      get_string("listofallsubmissions", "workshop"));
+                       }
+               }
+       }
+
+
+       /****************** submission of assignment by teacher only***********************/
+       elseif ($action == 'submitassignment') {
+       
+               if (!isteacher($course->id)) {
+                       error("Only teachers can look at this page");
+               }
+                       
+               $strdifference = format_time($workshop->deadline - time());
+               if (($workshop->deadline - time()) < 0) {
+                       $strdifference = "<FONT COLOR=RED>$strdifference</FONT>";
+               }
+               $strduedate = userdate($workshop->deadline)." ($strdifference)";
+       
+               workshop_print_assignment_info($workshop);
+               
+               // list previous submissions from teacher 
+               workshop_list_user_submissions($workshop, $USER);
+       
+               echo "<HR SIZE=1 NOSHADE>";
+       
+               // print upload form
+               print_heading(get_string("submitassignment", "assignment").":");
+               workshop_print_upload_form($workshop);
+       }
+
+
+       /****************** teacher's view - display admin page (current phase options) ************/
+       elseif ($action == 'teachersview') {
+
+               if (!isteacher($course->id)) {
+                       error("Only teachers can look at this page");
+               }
+
+           /// Check to see if groups are being used in this workshop
+        /// and if so, set $currentgroup to reflect the current group
+        $changegroup = isset($_GET['group']) ? $_GET['group'] : -1;  // Group change requested?
+        $groupmode = groupmode($course, $cm);   // Groups are being used?
+        $currentgroup = get_and_set_current_group($course, $groupmode, $changegroup);
         
-        // list previous submissions from teacher 
-        workshop_list_user_submissions($workshop, $USER);
-    
-        echo "<HR SIZE=1 NOSHADE>";
-    
-        // print upload form
-        print_heading(get_string("submitassignment", "assignment").":");
-        workshop_print_upload_form($workshop);
-    }
-
-
-    /****************** teacher's view - display admin page (current phase options) ************/
-    elseif ($action == 'teachersview') {
-
-        if (!isteacher($course->id)) {
-            error("Only teachers can look at this page");
+        /// Allow the teacher to change groups (for this session)
+        if ($groupmode) {
+            if ($groups = get_records_menu("groups", "courseid", $course->id, "name ASC", "id,name")) {
+                print_group_menu($groups, $groupmode, $currentgroup, "view.php?id=$cm->id");
+            }
         }
-
-        print_heading_with_help(get_string("managingassignment", "workshop"), "managing", "workshop");
-        
-        workshop_print_assignment_info($workshop);
-        
-        $tabs->names = array("1. ".get_string("phase1", "workshop"), 
+               
+       print_heading_with_help(get_string("managingassignment", "workshop"), "managing2", "workshop");
+               
+               workshop_print_assignment_info($workshop);
+               
+               $tabs->names = array("1. ".get_string("phase1", "workshop"), 
                         "2. ".get_string("phase2", "workshop", $course->student), 
                         "3. ".get_string("phase3", "workshop", $course->student), 
                         "4. ".get_string("phase4", "workshop", $course->student), 
-                        "5. ".get_string("phase5", "workshop"),
-                        "6. ".get_string("phase6", "workshop"));
+                        "5. ".get_string("phase5", "workshop"));
         $tabs->urls = array("view.php?id=$cm->id&action=setupassignment", 
             "view.php?id=$cm->id&action=allowsubmissions",
             "view.php?id=$cm->id&action=allowboth",
             "view.php?id=$cm->id&action=allowassessments",
-            "view.php?id=$cm->id&action=closeworkshop",
             "view.php?id=$cm->id&action=makefinalgradesavailable");
         if ($workshop->phase) { // phase 1 or more
             $tabs->highlight = $workshop->phase - 1;
                 case 2: // submissions and assessments
                 case 3:
                 case 4:
-                    if ($workshop->ntassessments) { // if teacher example show student assessments link
-                        echo "<p><b><a href=\"assessments.php?id=$cm->id&action=listungradedteachersubmissions\">".
-                          get_string("ungradedassessmentsofteachersubmissions", "workshop", 
-                          workshop_count_ungraded_assessments_teacher($workshop))."</a></b> \n";
-                        helpbutton("ungradedassessments_teacher", 
-                               get_string("ungradedassessmentsofteachersubmissions", "workshop"), "workshop");
-                    }
-                    echo "<p><b><a href=\"assessments.php?id=$cm->id&action=listungradedstudentsubmissions\">".
-                          get_string("ungradedassessmentsofstudentsubmissions", "workshop", 
-                          workshop_count_ungraded_assessments_student($workshop))."</a></b> \n";
-                    helpbutton("ungradedassessments_student", 
-                            get_string("ungradedassessmentsofstudentsubmissions", "workshop"), "workshop");
+                                       if ($workshop->ntassessments) { // if teacher examples show student assessments link
+                                               if ($n = workshop_count_teacher_submissions_for_assessment($workshop, $USER)) {
+                            echo "<p><b><a href=\"submissions.php?id=$cm->id&action=listforassessmentteacher\">".
+                                                               get_string("teachersubmissionsforassessment", "workshop", $n)."</a></b> \n";
+                                               helpbutton("assessmentofexamples", get_string("teachersubmissionsforassessment", 
+                                    "workshop"), "workshop");
+                        }
+                                       }
+                                       echo "<p><b><a href=\"assessments.php?id=$cm->id&action=gradeallassessments\">".
+                                                 get_string("ungradedassessments", "workshop", 
+                                                 workshop_count_ungraded_assessments($workshop))."</a></b> \n";
+                                       helpbutton("ungradedassessments", 
+                            get_string("ungradedassessments", "workshop"), "workshop");
                     echo "<p><b><a href=\"submissions.php?id=$cm->id&action=listforassessmentstudent\">".
                           get_string("studentsubmissionsforassessment", "workshop", 
                           workshop_count_student_submissions_for_assessment($workshop, $USER))."</a></b> \n";
                             get_string("studentsubmissionsforassessment", "workshop"), "workshop");
                     break;
                     
-                case 5: // calculate final grades
-                    if ($workshop->ntassessments) { // if teacher example show student assessments link
-                        echo "<p><b><a href=\"assessments.php?id=$cm->id&action=listungradedteachersubmissions\">".
-                          get_string("ungradedassessmentsofteachersubmissions", "workshop", 
-                          workshop_count_ungraded_assessments_teacher($workshop))."</a></b> \n";
-                        helpbutton("ungradedassessments_teacher", 
-                               get_string("ungradedassessmentsofteachersubmissions", "workshop"), "workshop");
-                    }
-                    echo "<p><b><a href=\"assessments.php?id=$cm->id&action=listungradedstudentsubmissions\">".
-                          get_string("ungradedassessmentsofstudentsubmissions", "workshop", 
-                          workshop_count_ungraded_assessments_student($workshop))."</a></b> \n";
-                    helpbutton("ungradedassessments_student", 
-                            get_string("ungradedassessmentsofstudentsubmissions", "workshop"), "workshop");
+                case 5: // Show "Final" Grades
+                                       if ($workshop->ntassessments) { // if teacher examples show student assessments link
+                                               if ($n = workshop_count_teacher_submissions_for_assessment($workshop, $USER)) {
+                            echo "<p><b><a href=\"submissions.php?id=$cm->id&action=listforassessmentteacher\">".
+                                                               get_string("teachersubmissionsforassessment", "workshop", $n)."</a></b> \n";
+                                               helpbutton("assessmentofexamples", get_string("teachersubmissionsforassessment", 
+                                    "workshop"), "workshop");
+                        }
+                                       }
+                                       echo "<p><b><a href=\"assessments.php?id=$cm->id&action=gradeallassessments\">".
+                                                 get_string("ungradedassessments", "workshop", 
+                                                 workshop_count_ungraded_assessments($workshop))."</a></b> \n";
+                                       helpbutton("ungradedassessments", get_string("ungradedassessments", "workshop"), "workshop");
                     echo "<p><b><a href=\"submissions.php?id=$cm->id&action=listforassessmentstudent\">".
                           get_string("studentsubmissionsforassessment", "workshop", 
                           workshop_count_student_submissions_for_assessment($workshop, $USER))."</a></b> \n";
                     helpbutton("gradingsubmissions", 
                             get_string("studentsubmissionsforassessment", "workshop"), "workshop");
-                    print_heading("<a href=\"submissions.php?id=$cm->id&action=displayfinalweights\">".
-                          get_string("calculationoffinalgrades", "workshop")."</a>");
-                    print_heading("<a href=\"submissions.php?id=$cm->id&action=analysisofassessments\">".
-                          get_string("analysisofassessments", "workshop")."</a>");
-                    break;
-                    
-                case 6: // show final grades
                     print_heading("<A HREF=\"submissions.php?id=$cm->id&action=displayfinalgrades\">".
                           get_string("displayoffinalgrades", "workshop")."</A>");
         }