]> git.mjollnir.org Git - moodle.git/commitdiff
Fixed a bug with re-submissions. Added options for the League table of submissions...
authorrkingdon <rkingdon>
Wed, 5 Nov 2003 18:02:06 +0000 (18:02 +0000)
committerrkingdon <rkingdon>
Wed, 5 Nov 2003 18:02:06 +0000 (18:02 +0000)
mod/exercise/assessments.php
mod/exercise/lib.php
mod/exercise/submissions.php
mod/exercise/view.php

index 8bbc778b662c73da871789a81b9232e9b0bd70ac..8d59c6deddc819403eaef95d20fdc1cc6433aa89 100644 (file)
                
                if (! $submission = get_record("exercise_submissions", "id", $sid)) {
                        error("Assess submission is misconfigured - no submission record!");
-                       }
+               }
                if (!$submissionowner = get_record("user", "id", $submission->userid)) {
                        error("Assess resubmission: user record not found");
-                       }
+               }
                
                // there can be an assessment record, if there isn't...
                if (!$assessment = exercise_get_submission_assessment($submission, $USER)) {
                        if (!$submissions = exercise_get_user_submissions($exercise, $submissionowner)) {
                                error("Assess resubmission: submission records not found");
-                               }
-                       $n = 0;
-                       foreach ($submissions as $prevsubmission) {
-                               if ($n == 1) {
-                                       break;
-                                       }
-                               $n++;
-                               }
+                       }
+                       $lastone= '';
+            // just the last but one submission
+                       foreach ($submissions as $submission) {
+                           $prevsubmission = $lastone;
+                $lastone = $submission;
+            }
                        // get the teacher's assessment of the student's previous submission
                        if (!$prevassessment = exercise_get_submission_assessment($prevsubmission, $USER)) {
                                error("Assess resubmission: Previous assessment record not found");
-                               }
+                       }
                        // copy this assessment with comments...
                        $assessment = exercise_copy_assessment($prevassessment, $submission, true);
-                       }
+               }
                
                print_heading(get_string("thisisaresubmission", "exercise", 
             "$submissionowner->firstname $submissionowner->lastname"));
                // show assessment and allow changes
                exercise_print_assessment_form($exercise, $assessment, true, $_SERVER["HTTP_REFERER"]);
-               }
+       }
 
 
        /****************** Assess submission (by teacher or student) ***************************/
                
                if (! $submission = get_record("exercise_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 = exercise_get_submission_assessment($submission, $USER)) {
                        $assessment->timegraded = 0;
                        if (!$assessment->id = insert_record("exercise_assessments", $assessment)) {
                                error("Could not insert exercise assessment!");
-                               }
                        }
+               }
                
                // show assessment and allow changes
                exercise_print_assessment_form($exercise, $assessment, true, $_SERVER["HTTP_REFERER"]);
-               }
+       }
 
 
        /****************** display grading form (viewed by student) *********************************/
        
        exercise_print_assessment_form($exercise); // called with no assessment
        print_continue("view.php?id=$cm->id");
-       }\r
+       }
 
 
        /****************** edit assessment elements (for teachers) ***********************/
 
                if (!isteacher($course->id)) {
                        error("Only teachers can look at this page");
-                       }
+               }
                
                $count = count_records("exercise_grades", "exercise", $exercise->id);
                if ($exercise->phase > 1 and $count) {
                        notify(get_string("warningonamendingelements", "exercise"));
-                       }
+               }
                // set up heading, form and table
                print_heading_with_help(get_string("editingassessmentelements", "exercise"), "elements", "exercise");
                ?>
                if ($elementsraw = get_records("exercise_elements", "exerciseid", $exercise->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<$exercise->nelements; $i++) {
                                $elements[$i]->scale =0;
                                $elements[$i]->maxscore = 0;
                                $elements[$i]->weight = 11;
-                               }
                        }
+               }
                switch ($exercise->gradingstrategy) {
                        case 0: // no grading
                                for ($i=0; $i<$exercise->nelements; $i++) {
                                        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 ($EXERCISE_SCALES as $KEY => $SCALE) {
                                        $SCALES[] = $SCALE['name'];
-                                       }
+                               }
                                for ($i=0; $i<$exercise->nelements; $i++) {
                                        $iplus1 = $i+1;
                                        echo "<TR 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", "exercise").
                         ":</B></TD><TD>\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
                                        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", "exercise").
                         ":</B></TD><TD>\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","exercise")."</B></CENTER>\n";
                                echo "<CENTER><TABLE cellpadding=5 border=1><TR><TD ALIGN=\"CENTER\">".
                                echo "</TD><TD>". get_string("suggestedgrade", "exercise")."</TD></TR>\n";
                                for ($j = 100; $j >= 0; $j--) {
                                        $numbers[$j] = $j;
-                                       }
+                               }
                                for ($i=0; $i<=$exercise->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";
-                                       }
+                               }
                                break;
                                
                        case 3: // criterion grading
                                for ($j = 100; $j >= 0; $j--) {
                                        $numbers[$j] = $j;
-                                       }
+                               }
                                for ($i=0; $i<$exercise->nelements; $i++) {
                                        $iplus1 = $i+1;
                                        echo "<TR valign=top>\n";\r
                                        echo "<TR valign=top>\n";\r
                                        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("exercise_rubrics", "exerciseid", $exercise->id)) {
                                        foreach ($rubricsraw as $rubric) {
                                                $rubrics[$rubric->elementno][$rubric->rubricno] = $rubric->description; // reindex 0,1,2...
-                                               }
                                        }
+                               }
                                for ($i=0; $i<$exercise->nelements; $i++) {
                                        $iplus1 = $i+1;
                                        echo "<TR valign=top>\n";
                                                $jplus1 = $j+1;
                                                if (empty($rubrics[$i][$j])) {
                                                        $rubrics[$i][$j] = "";
-                                                       }
-                                               echo "<TR valign=top>\n";\r
-                                               echo "  <TD ALIGN=RIGHT><P><B>". get_string("grade","exercise")." $j:</B></TD>\n";\r
-                                               echo "<TD><textarea name=\"rubric[$i][$j]\" rows=3 cols=75 wrap=\"virtual\">".$rubrics[$i][$j]."</textarea>\n";\r
-                                               echo "  </TD></TR>\n";
                                                }
+                                               echo "<TR valign=top>\n";
+                                               echo "  <TD ALIGN=RIGHT><P><B>". get_string("grade","exercise")." $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><br />
                </center>\r
                </form>
                <?PHP
-               }
+       }
        
        
        /****************** insert/update assignment elements (for teachers)***********************/
 
                if (!isteacher($course->id)) {
                        error("Only teachers can look at this page");
-                       }
+               }
 
                $form = (object)$HTTP_POST_VARS;
                
                                                $element->elementno = $key;
                                                if (!$element->id = insert_record("exercise_elements", $element)) {
                                                        error("Could not insert exercise element!");
-                                                       }
                                                }
                                        }
+                               }
                                break;
                                
                        case 1: // accumulative grading
                                                                                                break;
                                                                case 'selection' :      $element->maxscore = $EXERCISE_SCALES[$form->scale[$key]]['size'];
                                                                                                        break;
-                                                               }
                                                        }
+                                               }
                                                if (isset($form->weight[$key])) {
                                                        $element->weight = $form->weight[$key];
-                                                       }
+                                               }
                                                if (!$element->id = insert_record("exercise_elements", $element)) {
                                                        error("Could not insert exercise element!");
-                                                       }
                                                }
                                        }
+                               }
                                break;
                                
                        case 2: // error banded grading...
                                        $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("exercise_elements", $element)) {
                                                error("Could not insert exercise element!");
-                                               }
                                        }
+                               }
                                break;
                                
                        case 4: // ...and criteria grading
                                        for ($j=0;$j<5;$j++) {
                                                if (empty($form->rubric[$key][$j]))
                                                        break;
-                                               }
+                                       }
                                        $element->maxscore = $j - 1;
                                        if (!$element->id = insert_record("exercise_elements", $element)) {
                                                error("Could not insert exercise element!");
-                                               }
                                        }
+                               }
                                // let's not fool around here, dump the junk!
                                delete_records("exercise_rubrics", "exerciseid", $exercise->id);
                                for ($i=0;$i<$exercise->nelements;$i++) {
                                                unset($element);
                                                if (empty($form->rubric[$i][$j])) {  // OK to have an element with fewer than 5 items
                                                         break;
-                                                        }
+                                           }
                                                $element->exerciseid = $exercise->id;
                                                $element->elementno = $i;
                                                $element->rubricno = $j;
                                                $element->description   = $form->rubric[$i][$j];
                                                if (!$element->id = insert_record("exercise_rubrics", $element)) {
                                                        error("Could not insert exercise element!");
-                                                       }
                                                }
                                        }
+                               }
                                break;
-                       } // end of switch
-
+               } // end of switch
                echo "<P>\n";
                notice_yesno(get_string("amendassessmentelements","exercise")." ".get_string("again"), 
                        "assessments.php?id=$cm->id&action=editelements", "view.php?id=$cm->id");
-               }
+       }
 
 
        /****************** list assessments for grading (Student submissions)(by teachers)*********************/
 
                if (!isteacher($course->id)) {
                        error("Only teachers can look at this page");
-                       }
+               }
                exercise_list_ungraded_assessments($exercise, "student");
                print_continue("view.php?id=$cm->id");
-               }
+       }
 
 
        /***************** list assessments for grading student assessments ( linked to the 
 
                if (!isteacher($course->id)) {
                        error("Only teachers can look at this page");
-                       }
+               }
                exercise_list_ungraded_assessments($exercise, "teacher");
                print_continue("view.php?id=$cm->id");
-               }
+       }
 
 
        /****************** list teacher submissions ***********************/
 
                exercise_list_teacher_submissions($exercise, $USER);
                print_continue("view.php?id=$cm->id");
-               }
+       }
 
 
        /****************** teacher assessment : grading of assessment and submission (from student) ************/
                
                if (!isteacher($course->id)) {
                        error("Only teachers can look at this page");
-                       }
+               }
 
                require_variable($aid);
                require_variable($sid);
                if (!$assessment = get_record("exercise_assessments", "id", $aid)) {
                        error("Teacher assessment: User's assessment record not found");
-                       }
+               }
                if (!$submission = get_record("exercise_submissions", "id", $sid)) {
                        error("Teacher assessment: User's submission record not found");
-                       }
-               exercise_print_dual_assessment_form($exercise, $assessment, $submission, $_SERVER["HTTP_REFERER"]);
                }
+               exercise_print_dual_assessment_form($exercise, $assessment, $submission, $_SERVER["HTTP_REFERER"]);
+       }
 
 
        /****************** teacher table : show assessments by exercise and teacher ************/
                
                if (!isteacher($course->id)) {
                        error("Only teachers can look at this page");
-                       }
+               }
 
                exercise_print_teacher_table($course);
         print_continue("index.php?id=$course->id");
-               }
+       }
 
 
        /****************** update assessment (by teacher or student) ***************************/
                require_variable($aid);
                if (! $assessment = get_record("exercise_assessments", "id", $aid)) {
                        error("exercise assessment is misconfigured");
-                       }
+               }
 
                // first get the assignment elements for maxscores and weights...
                if (!$elementsraw = get_records("exercise_elements", "exerciseid", $exercise->id, "elementno ASC")) {
                        print_string("noteonassignmentelements", "exercise");
-                       }
-               else {
+               }
+       else {
                        foreach ($elementsraw as $element) {
                                $elements[] = $element;   // to renumber index 0,1,2...
-                               }
                        }
+               }
 
         // don't fiddle about, delete all the old and then add the new!
                delete_records("exercise_grades", "assessmentid",  $assessment->id);
                                        $element->grade = $thegrade;
                                        if (!$element->id = insert_record("exercise_grades", $element)) {
                                                error("Could not insert exercise element!");
-                                               }
                                        }
+                               }
                                // now work out the grade...
                                $rawgrade=0;
                                $totalweight=0;
                                        $weight = $EXERCISE_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;
 
                                        $element->grade = $form->grade[$i];
                                        if (!$element->id = insert_record("exercise_grades", $element)) {
                                                error("Could not insert exercise element!");
-                                               }
+                                       }
                                        if (empty($form->grade[$i])){
                                                $error += $EXERCISE_EWEIGHTS[$elements[$i]->weight];
-                                               }
                                        }
+                               }
                                // now save the adjustment
                                unset($element);
                                $i = $exercise->nelements;
                                $element->grade = $form->grade[$i];
                                if (!$element->id = insert_record("exercise_grades", $element)) {
                                        error("Could not insert exercise element!");
-                                       }
+                               }
                                $grade = $elements[intval($error + 0.5)]->maxscore + $form->grade[$i];
                                // echo "<P><B>".get_string("weightederrorcount", "exercise", intval($error + 0.5)).
                                //      " ".get_string("adjustment", "exercise").": ".$form->grade[$i]."</B>\n";
                                // check the grade for sanity!
                                if ($grade >100.0) {
                                        $grade = 100.0;
-                                       }
+                               }
                                if ($grade < 0.0) {
                                        $grade = 0.0;
-                                       }
+                               }
                                break;
                        
                        case 3: // criteria grading
                                $element->grade = $form->grade[0];
                                if (!$element->id = insert_record("exercise_grades", $element)) {
                                        error("Could not insert exercise element!");
-                                       }
+                               }
                                // now save the adjustment in element one
                                unset($element);
                                $element->exerciseid = $exercise->id;
                                $element->grade = $form->grade[1];
                                if (!$element->id = insert_record("exercise_grades", $element)) {
                                        error("Could not insert exercise element!");
-                                       }
+                               }
                                $grade = ($elements[$form->grade[0]]->maxscore + $form->grade[1]);
                                // check the grade for sanity!
                                if ($grade >100.0) {
                                        $grade = 100.0;
-                                       }
+                               }
                                if ($grade < 0.0) {
                                        $grade = 0.0;
-                                       }
+                               }
                                break;
 
                        case 4: // rubric grading (identical to accumulative grading)
                                        $element->grade = $thegrade;
                                        if (!$element->id = insert_record("exercise_grades", $element)) {
                                                error("Could not insert exercise element!");
-                                               }
                                        }
+                               }
                                // now work out the grade...
                                $rawgrade=0;
                                $totalweight=0;
                                        $weight = $EXERCISE_EWEIGHTS[$elements[$key]->weight];
                                        if ($weight > 0) { 
                                                $totalweight += $weight;
-                                               }
-                                       $rawgrade += ($grade / $maxscore) * $weight;
                                        }
+                                       $rawgrade += ($grade / $maxscore) * $weight;
+                               }
                                $grade = 100.0 * ($rawgrade / $totalweight);
                                break;
 
-                       } // end of switch
+               } // end of switch
                        
                // update the time of the assessment record (may be re-edited)...
                set_field("exercise_assessments", "timecreated", $timenow, "id", $assessment->id);
                // any comment?
                if (!empty($form->generalcomment)) {
                        set_field("exercise_assessments", "generalcomment", $form->generalcomment, "id", $assessment->id);
-                       }
+               }
                        
                // is user allowed to resubmit?
                if (isteacher($course->id)) {
                        if (!$submission = get_record("exercise_submissions", "id", $assessment->submissionid)) {
                                error ("Updateassessment: submission record not found");
-                               }
+                       }
                        if ($form->resubmit == 1) {
                                set_field("exercise_submissions", "resubmit", 1, "id", $submission->id);
-                               }
+                       }
                        else {
                                // clear resubmit flag
                                set_field("exercise_submissions", "resubmit", 0, "id", $submission->id);
-                               }
                        }
+               }
                
            add_to_log($course->id, "exercise", "assess", "view.php?id=$cm->id", "$assessment->id");
                
                // set up return address
                if (!$returnto = $form->returnto) {
                        $returnto = "view.php?id=$cm->id";
-                       }
+               }
                        
                // show grade if grading strategy is not zero
                if ($exercise->gradingstrategy) {
                        redirect($returnto, "<p align=\"center\"><b>".get_string("thegradeis", "exercise").": ".
                 number_format($grade * $exercise->grade / 100.0, 1)."% (".get_string("maximumgrade").
                                " ".number_format($exercise->grade)."%)</b></p>", 1);
-                       }
+               }
                else {
                        redirect($returnto);
-                       }
                }
+       }
 
 
        /****************** update dual assessment (by teacher only) ***************************/
                // first do the teacher's comments and grading grade of the user's assessment
                if (!$assessment = get_record("exercise_assessments", "id", $form->aid)) {
                        error("Update dual assessment: user's assessment record not found");
-                       }
+               }
                //save the comment and grade for the assessment 
                if (isset($form->teachercomment)) {
                        set_field("exercise_assessments", "teachercomment", $form->teachercomment, "id", $assessment->id);
                        echo "<CENTRE><B>".get_string("savedok", "exercise")."</B></CENTRE><BR>\n";
                        
                        add_to_log($course->id, "exercise", "grade", "view.php?id=$cm->id", "$assessment->id");
-                       }
+               }
                
                // now do the assessment of a user's submission
                if (! $submission = get_record("exercise_submissions", "id", $form->sid)) {
                        error("Update dual assessment: user's submission record not found");
-                       }
+               }
                if (!$assessment = exercise_get_submission_assessment($submission, $USER)) {
                        error("Update dual assessment: teacher's assessment record not found");
-                       }
+               }
 
                // first get the assignment elements for maxscores and weights...
                if (!$elementsraw = get_records("exercise_elements", "exerciseid", $exercise->id, "elementno ASC")) {
                        print_string("noteonassignmentelements", "exercise");
-                       }
+               }
                else {
                        foreach ($elementsraw as $element) {
                                $elements[] = $element;   // to renumber index 0,1,2...
-                               }
                        }
+               }
 
         // don't fiddle about, delete all the old and then add the new!
                delete_records("exercise_grades", "assessmentid",  $assessment->id);
                                        $element->feedback   = $thefeedback;
                                        if (!$element->id = insert_record("exercise_grades", $element)) {
                                                error("Could not insert exercise element!");
-                                               }
                                        }
+                               }
                                $grade = 0; // set to satisfy save to db
                                break;
                                
                                        $element->grade = $thegrade;
                                        if (!$element->id = insert_record("exercise_grades", $element)) {
                                                error("Could not insert exercise element!");
-                                               }
                                        }
+                               }
                                // now work out the grade...
                                $rawgrade=0;
                                $totalweight=0;
                                        $weight = $EXERCISE_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;
 
                                        $element->grade = $form->grade[$i];
                                        if (!$element->id = insert_record("exercise_grades", $element)) {
                                                error("Could not insert exercise element!");
-                                               }
+                                       }
                                        if (empty($form->grade[$i])){
                                                $error += $EXERCISE_EWEIGHTS[$elements[$i]->weight];
-                                               }
                                        }
+                               }
                                // now save the adjustment
                                unset($element);
                                $i = $exercise->nelements;
                                $element->grade = $form->grade[$i];
                                if (!$element->id = insert_record("exercise_grades", $element)) {
                                        error("Could not insert exercise element!");
-                                       }
+                               }
                                $grade = ($elements[intval($error + 0.5)]->maxscore + $form->grade[$i]);
                                echo "<P><B>".get_string("weightederrorcount", "exercise", intval($error + 0.5))."</B>\n";
                                break;
                                $element->grade = $form->grade[0];
                                if (!$element->id = insert_record("exercise_grades", $element)) {
                                        error("Could not insert exercise element!");
-                                       }
+                               }
                                // now save the adjustment in element one
                                unset($element);
                                $element->exerciseid = $exercise->id;
                                $element->grade = $form->grade[1];
                                if (!$element->id = insert_record("exercise_grades", $element)) {
                                        error("Could not insert exercise element!");
-                                       }
+                               }
                                $grade = ($elements[$form->grade[0]]->maxscore + $form->grade[1]);
                                break;
 
                                        $element->grade = $thegrade;
                                        if (!$element->id = insert_record("exercise_grades", $element)) {
                                                error("Could not insert exercise element!");
-                                               }
                                        }
+                               }
                                // now work out the grade...
                                $rawgrade=0;
                                $totalweight=0;
                                        $weight = $EXERCISE_EWEIGHTS[$elements[$key]->weight];
                                        if ($weight > 0) { 
                                                $totalweight += $weight;
-                                               }
-                                       $rawgrade += ($grade / $maxscore) * $weight;
                                        }
+                                       $rawgrade += ($grade / $maxscore) * $weight;
+                               }
                                $grade = 100.0 * ($rawgrade / $totalweight);
                                break;
 
-                       } // end of switch
+               } // end of switch
                        
                // update the time of the assessment record (may be re-edited)...
                set_field("exercise_assessments", "timecreated", $timenow, "id", $assessment->id);
                // any comment?
                if (!empty($form->generalcomment)) {
                        set_field("exercise_assessments", "generalcomment", $form->generalcomment, "id", $assessment->id);
-                       }
+               }
                        
                // is user allowed to resubmit?
                if ($form->resubmit == 1) {
                        set_field("exercise_submissions", "resubmit", 1, "id", $submission->id);
-                       }
+               }
                else {
                        // clear resubmit flag
                        set_field("exercise_submissions", "resubmit", 0, "id", $submission->id);
-                       }
+               }
                
            add_to_log($course->id, "exercise", "assess", "view.php?id=$cm->id", "$assessment->id");
                
                // set up return address
                if (!$returnto = $form->returnto) {
                        $returnto = "view.php?id=$cm->id";
-                       }
+               }
                        
                // show grade if grading strategy is not zero
                if ($exercise->gradingstrategy) {
                        redirect($returnto, "<p align=\"center\"><b>".get_string("thegradeis", "exercise").": ".
                 number_format($grade * $exercise->grade / 100.0, 1)."% (".get_string("maximumgrade").
                                " ".number_format($exercise->grade)."%)</b></p>", 1);
-                       }
+               }
                else {
                        redirect($returnto);
-                       }
                }
+       }
 
 
        /****************** user confirm delete ************************************/
 
                if (empty($_GET['aid'])) {
                        error("User confirm delete: assessment id missing");
-                       }
+               }
                        
                notice_yesno(get_string("confirmdeletionofthisitem","exercise", get_string("assessment", "exercise")), 
                         "assessments.php?action=userdelete&id=$cm->id&aid=$_GET[aid]", "view.php?id=$cm->id");
-               }
+       }
        
 
        /****************** user delete ************************************/
 
                if (empty($_GET['aid'])) {
                        error("User delete: assessment id missing");
-                       }
+               }
                        
                print_string("deleting", "exercise");
                // first delete all the associated records...
                delete_records("exercise_assessments", "id", $_GET['aid']);
                
                print_continue("view.php?id=$cm->id");
-               }
+       }
        
 
        /****************** view assessment ***********************/
                // get the assessment record
                if (!$assessment = get_record("exercise_assessments", "id", $_GET['aid'])) {
                        error("Assessment record not found");
-                       }               
+               }               
 
                // show assessment but don't allow changes
                exercise_print_assessment_form($exercise, $assessment);
                
                print_continue("view.php?id=$cm->id");
-               }
+       }
 
 
        /*************** no man's land **************************************/
        else {
                error("Fatal Error: Unknown Action: ".$action."\n");
-               }
+       }
 
        print_footer($course);
  
index 099b630ea1bb00a53081e7a78c7a4f1e7328dbda..74edda231501567bd36182ec09e41e762a0fa242 100644 (file)
@@ -1360,22 +1360,57 @@ function exercise_list_submissions_for_admin($exercise, $order) {
 
        // now show the weights used in the grades
        echo "<TABLE WIDTH=\"50%\" BORDER=\"1\">\n";
-       echo "<TR><td COLSPAN=\"2\" bgcolor=\"$THEME->cellheading2\"><CENTER><B>".
-               get_string("weightsusedforoverallgrade", "exercise")."</B></CENTER></TD></TR>\n";
+       echo "<tr><td colspan=\"2\" bgcolor=\"$THEME->cellheading2\" align=\"center\"><b>".
+               get_string("weightsusedforoverallgrade", "exercise")."</b></td></tr>\n";
        echo "<TR><TD ALIGN=\"right\">".get_string("weightforgradingofassessments", "exercise").":</TD>\n";
        echo "<TD>";
        exercise_choose_from_menu($EXERCISE_FWEIGHTS, "gradingweight", $gradingweight, "");
        echo "</TD></TR>\n";
-       echo "<tr><td align=\"right\">".get_string("weightforteacherassessments", "exercise", $course->teacher).":</td>\n";
-       echo "<TD>";
+       echo "<tr><td align=\"right\">".get_string("weightforteacherassessments", "exercise", 
+            $course->teacher).":</td>\n";
+       echo "<td>";
        exercise_choose_from_menu($EXERCISE_FWEIGHTS, "teacherweight", $teacherweight, "");
-       echo "</TD></TR>\n";
+       echo "</td></tr>\n";
        echo "</TABLE>\n";
        echo "<INPUT TYPE=submit VALUE=\"".get_string("saveweights", "exercise")."\">\n";
+       echo "</CENTER><br />";
+       echo "</FORM>\n";
+
+       ?>
+       <form name="leagueform" method="post" action="submissions.php">
+       <INPUT TYPE="hidden" NAME="id" VALUE="<?PHP echo $cm->id ?>">
+       <input type="hidden" name="action" value="saveleaguetable">
+       <CENTER>
+       <?PHP
+
+    echo "<TABLE WIDTH=\"50%\" BORDER=\"1\">\n";
+    echo "<tr><td align=\"center\" colspan=\"2\" bgcolor=\"$THEME->cellheading2\"><b>".
+        get_string("leaguetable", "exercise")."</b></td></tr>\n";
+    echo "<tr><td align=\"right\">".get_string("numberofentries", "exercise").":</td>\n";
+    echo "<TD>";
+    $numbers[22] = 'All';
+    $numbers[21] = 50;
+    for ($i=20; $i>=0; $i--) {
+        $numbers[$i] = $i;
+    }
+    $nentries = $exercise->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", "exercise", 
+            $course->students)."</p></td><td>\n";
+    $options[0] = get_string("no"); $options[1] = get_string("yes");
+    choose_from_menu($options, "anonymous", $exercise->anonymous, "");
+    echo "</td></tr>\n";
+    echo "</table>\n";
+       echo "<INPUT TYPE=submit VALUE=\"".get_string("saveentries", "exercise")."\">\n";
        echo "</CENTER>";
        echo "</FORM>\n";
 
-       // list any teacher submissions
+    // list any teacher submissions
        $table->head = array (get_string("title", "exercise"), get_string("submitted", "exercise"), get_string("action", "exercise"));
        $table->align = array ("left", "left", "left");
        $table->size = array ("*", "*", "*");
@@ -1785,14 +1820,10 @@ function exercise_list_unassessed_student_submissions($exercise, $user) {
                                if (!$submissions = exercise_get_user_submissions($exercise, $submissionowner)) {
                                        error("List unassessed student submissions: submission records not found");
                                        }
-                        // get the last but one submission (prevsubmission)
-                               $n = 0;
+                        // get the oldest submission, exercise_get_user_submissions returns that first
                                    foreach ($submissions as $tempsubmission) {
-                                       if ($n == 1) {
-                                $prevsubmission = $tempsubmission;
-                                               break;
-                                           }
-                                       $n++;
+                            $prevsubmission = $tempsubmission;
+                                           break;
                                        }
                                // get the teacher's assessment of the student's previous submission
                                if ($assessments = get_records("exercise_assessments", "submissionid", 
@@ -3546,26 +3577,47 @@ function exercise_print_league_table($exercise) {
        if (! $course = get_record("course", "id", $exercise->course)) {
                error("Print league table: Course is misconfigured");
        }
-       $table->head = array (get_string("title", "exercise"),  get_string("name"), get_string("grade"));
-       $table->align = array ("left", "left", "center");
-       $table->size = array ("*", "*", "*");
-       $table->cellpadding = 2;
-       $table->cellspacing = 0;
+       $nentries = $exercise->showleaguetable;
+       if ($nentries == 99) {
+               $nentries = 999999; // a large number
+               }
+
+       if ($exercise->anonymous and isstudent($course->id)) {
+        $table->head = array (get_string("title", "exercise"), get_string("grade"));
+        $table->align = array ("left", "center");
+        $table->size = array ("*", "*");
+    } else { // show names
+        $table->head = array (get_string("title", "exercise"),  get_string("name"), get_string("grade"));
+        $table->align = array ("left", "left", "center");
+        $table->size = array ("*", "*", "*");
+    }
+    $table->cellpadding = 2;
+    $table->cellspacing = 0;
 
        if ($submissions = exercise_get_student_submissions($exercise, "grade")) {
+        $n = 1;
                foreach ($submissions as $submission) {
                        if (empty($done[$submission->userid])) {
                                if (!$user = get_record("user", "id", $submission->userid)) {
                                        error("Print league table: user not found");
                                        }
-                               $table->data[] = array(exercise_print_submission_title($exercise, $submission), $user->firstname." ".
-                                       $user->lastname, number_format($submission->grade * $exercise->grade / 100.0, 1)) ;
-                               $done[$submission->userid] = 'ok';
+                   if ($exercise->anonymous and isstudent($course->id)) {
+                               $table->data[] = array(exercise_print_submission_title($exercise, $submission),
+                            number_format($submission->grade * $exercise->grade / 100.0, 1));
+                } else {
+                               $table->data[] = array(exercise_print_submission_title($exercise, $submission), 
+                            $user->firstname." ".$user->lastname, 
+                            number_format($submission->grade * $exercise->grade / 100.0, 1));
+                }
+                               $n++;
+                if ($n > $nentries) {
+                    break;
+                }
+                $done[$submission->userid] = 'ok';
                                }
                        }
                print_heading(get_string("leaguetable", "exercise"));
                print_table($table);
-               echo "<br />".get_string("allgradeshaveamaximumof", "exercise", $exercise->grade)."%<br />\n";
                }
        }
        
index c6f24f27eddfb3fe76cb99b4f0216a4582167b38..169d6d62d8588870075677a4b44d257b3fca838d 100644 (file)
                        print_heading(get_string("nostudentsyet"));
                        print_footer($course);
                        exit;
-                       }
+               }
                
                // get the final weights from the database
                $teacherweight = get_field("exercise","teacherweight", "id", $exercise->id);
                        if ($ownassessments = exercise_get_user_assessments($exercise, $user)) {
                                foreach ($ownassessments as $ownassessment) {
                                        break; // there should only be one
-                                       }
                                }
+                       }
                        else {
                                $ownassessment->gradinggrade = 0;
-                               }
+                       }
                        if ($submissions = exercise_get_user_submissions($exercise, $user)) {
                                foreach ($submissions as $submission) {
                                        if ($assessments = exercise_get_assessments($submission)) {
                                                                / COMMENTSCALE )) * $exercise->grade) / 
                                                                ($EXERCISE_FWEIGHTS[$teacherweight] + $EXERCISE_FWEIGHTS[$gradingweight]), 1).
                                                                "</td></tr>\n";
-                                                       }
                                                }
                                        }
                                }
                        }
+               }
                echo "</table><br clear=\"all\">\n";
-               exercise_print_league_table($exercise);
-               echo "<br \>".get_string("allgradeshaveamaximumof", "exercise", $exercise->grade)."%\n";
+               if ($exercise->showleaguetable) {
+            exercise_print_league_table($exercise);
+                   echo "<br \>\n";
+        }
+        print_string("allgradeshaveamaximumof", "exercise", $exercise->grade)."%\n";
                print_continue("view.php?id=$cm->id");
-               }\r
+       }
 
 
        /******************* list for assessment student (submissions) ************************************/
                }
        
 
-       /*************** save weights (by teacher) ***************************/
+       /****************** save league table entries and anonimity setting (by teacher) **************/
+       elseif ($action == 'saveleaguetable') {
+
+               $form = (object)$_POST;
+               
+               if (!isteacher($course->id)) {
+                       error("Only teachers can look at this page");
+                       }
+
+               // save the number of league table entries from the form...
+               if ($form->nentries == 'All') {
+            $nentries = 99;
+        } else {
+            $nentries = $form->nentries;
+        }
+               // ...and save it 
+               set_field("exercise", "showleaguetable", $nentries, "id", "$exercise->id");
+               
+               // ...and save the anonimity setting 
+               set_field("exercise", "anonymous", $form->anonymous, "id", "$exercise->id");
+       
+               redirect("submissions.php?id=$cm->id&action=adminlist", get_string("entriessaved", "exercise"));
+               }
+                               
+               /*************** save weights (by teacher) ***************************/
        elseif ($action == 'saveweights') {
 
                $form = (object)$_POST;
index 0ee21b5dc6cbff87efd652d0c0aee447b86999f1..10ea88ebede040b60db41eb64982d0c8be158079 100644 (file)
                        }
                }
                echo "</TABLE><BR CLEAR=ALL>\n";
-               exercise_print_league_table($exercise);
+               if ($exercise->showleaguetable) {
+            exercise_print_league_table($exercise);
+        }
+           echo "<br />".get_string("allgradeshaveamaximumof", "exercise", $exercise->grade)."%<br />\n";
        }