From 9aba486423ef84bac549ffdcfa80478a5278f51f Mon Sep 17 00:00:00 2001 From: rkingdon Date: Tue, 17 Feb 2004 11:11:00 +0000 Subject: [PATCH] Added sanity check before calculating grade. --- mod/lesson/lesson.php | 1 + mod/lesson/view.php | 89 ++++++++++++++++++++++++++++++++----------- 2 files changed, 68 insertions(+), 22 deletions(-) diff --git a/mod/lesson/lesson.php b/mod/lesson/lesson.php index 96ef5a8f27..0af5be3177 100644 --- a/mod/lesson/lesson.php +++ b/mod/lesson/lesson.php @@ -5,6 +5,7 @@ addpage confirmdelete + continue delete editpage insertpage diff --git a/mod/lesson/view.php b/mod/lesson/view.php index 964de2c72c..fc57d81bc3 100644 --- a/mod/lesson/view.php +++ b/mod/lesson/view.php @@ -175,28 +175,73 @@ print_simple_box_start("center"); $ntries = count_records("lesson_grades", "lessonid", $lesson->id, "userid", $USER->id); if (isstudent($course->id)) { - $ncorrect = count_records_select("lesson_attempts", "lessonid = $lesson->id AND - userid = $USER->id AND retry = $ntries AND correct = 1"); - $nviewed = count_records("lesson_attempts", "lessonid", $lesson->id, "userid", $USER->id, - "retry", $ntries); - if ($nviewed) { - $thegrade = intval(100 * $ncorrect / $nviewed); + // do a sanity check on the user's path through the lesson + if ($attempts = get_records_select("lesson_attempts", "lessonid = $lesson->id AND + userid = $USER->id AND retry = $ntries", "timeseen ASC")) { + $check = true; + if (!$thispageid = get_field("lesson_pages", "id", "lessonid", $lesson->id, + "prevpageid", 0)) { + error("Navigation Check: first page not found"); + } + foreach ($attempts as $attempt) { + // skip any page without answers + while (!$answers = get_records("lesson_answers", "pageid", $thispageid)) { + if (!$thispageid = get_field("lesson_pages", "nextpageid", "id", $thispageid)) { + error("Navigation Check: nextpageid not found"); + } + } + if ($attempt->pageid != $thispageid) { + // something odd + // echo "

\$thispageid: $thispageid; \$attempt->pageid: $attempt->pageid

\n"; + $check = false; + break; + } + if (!$answer = get_record("lesson_answers", "id", $attempt->answerid)) { + error("Navigation Check: answer not found"); + } + if ($answer->jumpto) { + if ($answer->jumpto == NEXTPAGE) { + if (!$thispageid = get_field("lesson_pages", "nextpageid", "id", + $thispageid)) { + $thispageid = EOL; // end of foreach loop should have been reached + } + } else { + $thispageid = $answer->jumpto; + } + } + } + if ($check) { + $ncorrect = count_records_select("lesson_attempts", "lessonid = $lesson->id AND + userid = $USER->id AND retry = $ntries AND correct = 1"); + $nviewed = count_records("lesson_attempts", "lessonid", $lesson->id, "userid", + $USER->id, "retry", $ntries); + if ($nviewed) { + $thegrade = intval(100 * $ncorrect / $nviewed); + } else { + $thegrade = 0; + } + echo "

".get_string("numberofpagesviewed", "lesson", $nviewed). + "

\n"; + echo "

".get_string("numberofcorrectanswers", "lesson", $ncorrect). + "

\n"; + echo "

".get_string("gradeis", "lesson", + number_format($thegrade * $lesson->grade / 100, 1)). + " (".get_string("outof", "lesson", $lesson->grade).")

\n"; + $grade->lessonid = $lesson->id; + $grade->userid = $USER->id; + $grade->grade = $thegrade; + $grade->completed = time(); + if (!$newgradeid = insert_record("lesson_grades", $grade)) { + error("Navigation: grade not inserted"); + } + } else { + print_string("sanitycheckfailed", "lesson"); + delete_records("lesson_attempts", "lessonid", $lesson->id, "userid", $USER->id, + "retry", $ntries); + } } else { - $thegrade = 0; - } - echo "

".get_string("numberofpagesviewed", "lesson", $nviewed)."

\n"; - echo "

".get_string("numberofcorrectanswers", "lesson", $ncorrect). - "

\n"; - echo "

".get_string("gradeis", "lesson", - number_format($thegrade * $lesson->grade / 100, 1)). - " (".get_string("outof", "lesson", $lesson->grade).")

\n"; - $grade->lessonid = $lesson->id; - $grade->userid = $USER->id; - $grade->grade = $thegrade; - $grade->completed = time(); - if (!$newgradeid = insert_record("lesson_grades", $grade)) { - error("Navigation: grade not inserted"); - } + print_string("noattemptrecordsfound", "lesson"); + } } else { // display for teacher echo "

".get_string("displayofgrade", "lesson")."

\n"; @@ -272,7 +317,7 @@ } else { // print the pages echo "
\n"; - if (isteacheredit($course>id)) { + if (isteacheredit($course->id)) { echo "\n"; } -- 2.39.5
id&action=addpage&pageid=0\">". get_string("addpagehere", "lesson")."