]> git.mjollnir.org Git - moodle.git/commitdiff
endofcluster pages are not displayed anymore, shortanswer wrong answers are interpret...
authormichaelpenne <michaelpenne>
Mon, 1 Nov 2004 20:15:11 +0000 (20:15 +0000)
committermichaelpenne <michaelpenne>
Mon, 1 Nov 2004 20:15:11 +0000 (20:15 +0000)
mod/lesson/lesson.php

index 0cb3c30b31752969c10f8b46ada8cf2119c44f6b..ff64a9fae92725bb679699c0d6de74634071a342 100644 (file)
                        } else {
                                lesson_qtype_menu($LESSON_QUESTION_TYPE, LESSON_MULTICHOICE, 
                                                                  "lesson.php?id=$cm->id&action=addpage&pageid=".$_GET['pageid'].$linkadd);
+                               echo "<br><br><b>".get_string("multianswer", "lesson").":</b> \n";
+                               echo " <label for=\"qoption\" class=\"hidden-label\">Question Option</label><input type=\"checkbox\" id=\"qoption\" name=\"qoption\" value=\"1\"/>"; //CDC hidden label added.
+                               helpbutton("questionoption", get_string("questionoption", "lesson"), "lesson");
                        }
                        echo "</td></tr>\n";
                ?>
                                }
                                if ((($timer->starttime + $lesson->maxtime * 60) - time()) > 0) {
                                        // code for the clock
-                                       echo "<table align=\"right\"><tr><td>";
-                                       echo "<script language=\"javascript\">\n";
-                                               echo "var starttime = ". $timer->starttime . ";\n";
-                                               echo "var servertime = ". time() . ";\n";
-                                               echo "var testlength = ". $lesson->maxtime * 60 .";\n";
-                                               echo "document.write('<SCRIPT LANGUAGE=\"JavaScript\" SRC=\"timer.js\"><\/SCRIPT>');\n";
-                                               echo "window.onload = function () { show_clock(); }";
-                                       echo "</script>\n";
-                                       echo "</td></tr></table><br><br>";
+                                               print_simple_box_start("right", "150px", "#ffffff", 0);
+                        echo "<table border=\"0\" valign=\"top\" align=\"center\" class=\"generaltable\" width=\"100%\" cellspacing=\"0\">".
+                                                       "<tr><th valign=\"top\" class=\"generaltableheader\">".get_string("timeremaining", "lesson").
+                                                       "</th></tr><tr><td align=\"center\" class=\"generaltablecell\">";
+                        echo "<script language=\"javascript\">\n";
+                            echo "var starttime = ". $timer->starttime . ";\n";
+                            echo "var servertime = ". time() . ";\n";
+                            echo "var testlength = ". $lesson->maxtime * 60 .";\n";
+                            echo "document.write('<SCRIPT LANGUAGE=\"JavaScript\" SRC=\"timer.js\"><\/SCRIPT>');\n";
+                            echo "window.onload = function () { show_clock(); }\n";
+                        echo "</script>\n";
+                        echo "</td></tr></table>";
+                                               print_simple_box_end();
+                                               echo "<br /><br /><br /><br />";
                                } else {
                                                redirect("view.php?id=$cm->id&action=navigation&pageid=".LESSON_EOL."&outoftime=normal", get_string("outoftime", "lesson"));
                                }
                                        $newpageid = $answer->jumpto;
                                }
                                /// 6/29/04 //
-                   $nretakes = count_records("lesson_grades", "lessonid", $lesson->id, "userid", $USER->id); 
-
-                               $newessay->lessonid = $lesson->id;
-                               $newessay->pageid = $pageid;
-                               $newessay->answerid = $answerid;
-                               $newessay->try = $nretakes;
-                               $newessay->userid = $USER->id;
-                               $newessay->answer = $useranswer;
-                               $newessay->timesubmitted = time();
-                               if (!isteacher($course->id)) {
-                                       if (!insert_record("lesson_essay", $newessay)) {
-                                               error("Error: could not submit essay");
-                                       }
-                               }
+                               $userresponse->sent=0;
+                               $userresponse->graded = 0;
+                               $userresponse->score = 0;
+                               $userresponse->answer = $useranswer;
+                               $userresponse->response = "";
+                               $userresponse = serialize($userresponse);
+                               
                                break;
                        /// CDC-FLAG ///
                     case LESSON_SHORTANSWER :
                     $noanswer = true;
                     break;
                 }
+                               $userresponse = $useranswer;
                 if (!$answers = get_records("lesson_answers", "pageid", $pageid, "id")) {
                     error("Continue: No answers found");
                 }
                 foreach ($answers as $answer) {
                                        /// CDC-FLAG ///
-                                       if ($lesson->custom) {
-                                               if($answer->score > 0) {
-                                                       if ($page->qoption) {
-                                                               // case sensitive
-                                                               if ($answer->answer == $useranswer) {
-                                                                       $correctanswer = true;
-                                                                       $answerid = $answer->id;
-                                                                       $newpageid = $answer->jumpto;
-                                                                       if (trim(strip_tags($answer->response))) {
-                                                                               $response = $answer->response;
-                                                                       }
+                                       if ($lesson->custom && $answer->score > 0) {
+                                               if ($page->qoption) {
+                                                       // case sensitive
+                                                       if ($answer->answer == $useranswer) {
+                                                               $correctanswer = true;
+                                                               $answerid = $answer->id;
+                                                               $newpageid = $answer->jumpto;
+                                                               if (trim(strip_tags($answer->response))) {
+                                                                       $response = $answer->response;
                                                                }
-                                                       } else {
-                                                               // case insensitive
-                                                               if (strcasecmp($answer->answer, $useranswer) == 0) {
-                                                                       $correctanswer = true;
-                                                                       $answerid = $answer->id;
-                                                                       $newpageid = $answer->jumpto;
-                                                                       if (trim(strip_tags($answer->response))) {
-                                                                               $response = $answer->response;
-                                                                       }
+                                                       }
+                                               } else {
+                                                       // case insensitive
+                                                       if (strcasecmp($answer->answer, $useranswer) == 0) {
+                                                               $correctanswer = true;
+                                                               $answerid = $answer->id;
+                                                               $newpageid = $answer->jumpto;
+                                                               if (trim(strip_tags($answer->response))) {
+                                                                       $response = $answer->response;
                                                                }
                                                        }
                                                }
-                                       } elseif (lesson_iscorrect($pageid, $answer->jumpto)) {  /// CDC-FLAG 6/21/04 ///
+                                       } elseif (lesson_iscorrect($pageid, $answer->jumpto) && !$lesson->custom) {  /// CDC-FLAG 6/21/04 ///
                         if ($page->qoption) {
                             // case sensitive
                             if ($answer->answer == $useranswer) {
                         $noanswer = true;
                         break;
                     }
+                                       // get what the user answered
+                                       $userresponse = implode(",", $useranswers);
                     // get the answers in a set order, the id order
                     if (!$answers = get_records("lesson_answers", "pageid", $pageid, "id")) {
                         error("Continue: No answers found");
                     }
                     $i++;
                 }
+                               // get he users exact responses for record keeping
+                               foreach ($response as $value) {
+                                       foreach($answers as $answer) {
+                                               if ($value == $answer->response) {
+                                                       $userresponse[] = $answer->id;
+                                               }
+                                       }
+                               }
+                               $userresponse = implode(",", $userresponse);
+
                 if ($ncorrect == count($answers)-2) {  // dont count correct/wrong responses in the total.
                        $response = get_string("thatsthecorrectanswer", "lesson");
                                        foreach ($answers as $answer) {
                     if (isset($correctpageid)) {
                                                $newpageid = $correctpageid;
                                        }
-                                       if (isset($correctasnwerid)) {
+                                       if (isset($correctanswerid)) {
                                                $answerid = $correctanswerid;
                                        }
                     $correctanswer = true;
                     $noanswer = true;
                     break;
                 }
+                               $userresponse = $useranswer;
                 if (!$answers = get_records("lesson_answers", "pageid", $pageid, "id")) {
                     error("Continue: No answers found");
                 }
                                                        if ($answer->score > 0) {
                                                                $correctanswer = true;
                                                                $answerid = $answer->id;
+                                                       } else {
+                                                               $correctanswer = false;
                                                        }
                                                }
                                                /// CDC-FLAG ///
                         break;
                     }
                 }
-                
                 if ($correctanswer) {
                     if (!$response) {
                         $response = get_string("thatsthecorrectanswer", "lesson");
                                        $newpageid = lesson_unseen_branch_jump($lesson->id, $USER->id);
                                }
                                /// CDC-FLAG ///
-                // no need to record anything in lesson_attempts                                
+                // no need to record anything in lesson_attempts                       
                 redirect("view.php?id=$cm->id&amp;action=navigation&amp;pageid=$newpageid");
                print_footer($course);
                 exit();
                 $attempt->answerid = $answerid;
                 $attempt->retry = $nretakes;
                 $attempt->correct = $correctanswer;
+                               if(isset($userresponse)) {
+                                       $attempt->useranswer = $userresponse;
+                               }
                 $attempt->timeseen = time();
                                /// CDC-FLAG /// -- dont want to insert the attempt if they ran out of time
                                if (!$outoftime) {
+                                       // if allow modattempts, then update the old attempt record, otherwise, insert new answer record
+                    if (isset($USER->modattempts[$lesson->id])) {
+                                               $attempt->retry = $nretakes - 1; // they are going through on review, $nretakes will be too high
+                                       }
                                        if (!$newattemptid = insert_record("lesson_attempts", $attempt)) {
                                                error("Continue: attempt not inserted");
                                        }
                                if (isteacher($course->id)) {
                                        echo "<div align=\"center\">".get_string("teacherongoingwarning", "lesson")."</div><br>";
                                } else {
-                                       lesson_calculate_ongoing_score($lesson, $USER);
+                                       $ntries = count_records("lesson_grades", "lessonid", $lesson->id, "userid", $USER->id);
+                                       if (isset($USER->modattempts[$lesson->id])) {
+                                               $ntries--;
+                                       }
+                                       lesson_calculate_ongoing_score($lesson, $USER->id, $ntries);
                                }
                        }
                        /// CDC-FLAG ///
 
                
                /// CDC-FLAG 6/18/04 ///  - this is where some jump numbers are interpreted
-               if ($newpageid != LESSON_CLUSTERJUMP && $pageid != 0 && $newpageid > 0) {  // going to check to see if the page that the user is going to view next, is a cluster page.  If so, dont display, go into the cluster.  The $newpageid > 0 is used to filter out all of the negative code jumps.
+               if($outoftime) {
+                       $newpageid = LESSON_EOL;  // ran out of time for the test, so go to eol
+               } elseif (isset($USER->modattempts[$lesson->id])) {
+                       // make sure if the student is reviewing, that he/she sees the same pages/page path that he/she saw the first time
+                       if ($USER->modattempts[$lesson->id] == $pageid) {  // remember, this session variable holds the pageid of the last page that the user saw
+                               $newpageid = LESSON_EOL;
+                       } else {
+                               $nretakes--; // make sure we are looking at the right try.
+                               $attempts = get_records_select("lesson_attempts", "lessonid = $lesson->id AND userid = $USER->id AND retry = $nretakes", "timeseen", "id, pageid");
+                               $found = false;
+                               $temppageid = 0;
+                               foreach($attempts as $attempt) {
+                                       if ($found && $temppageid != $attempt->pageid) { // now try to find the next page, make sure next few attempts do no belong to current page
+                                               $newpageid = $attempt->pageid;
+                                               break;
+                                       }
+                                       if ($attempt->pageid == $pageid) {
+                                               $found = true; // if found current page
+                                               $temppageid = $attempt->pageid;
+                                       }
+                               }
+                       }
+               } elseif ($newpageid != LESSON_CLUSTERJUMP && $pageid != 0 && $newpageid > 0) {  // going to check to see if the page that the user is going to view next, is a cluster page.  If so, dont display, go into the cluster.  The $newpageid > 0 is used to filter out all of the negative code jumps.
                        if (!$page = get_record("lesson_pages", "id", $newpageid)) {
                                error("Error: could not find page");
                        }
                        if ($page->qtype == LESSON_CLUSTER) {
                                $newpageid = LESSON_CLUSTERJUMP;
-                               $pageid = $page->id;
+                       } elseif ($page->qtype == LESSON_ENDOFCLUSTER) {
+                               $jump = get_field("lesson_answers", "jumpto", "pageid", $page->id, "lessonid", $lesson->id);
+                               if ($jump == LESSON_NEXTPAGE) {
+                                       if ($page->nextpageid == 0) {
+                                               $newpageid = LESSON_EOL;
+                                       } else {
+                                               $newpageid = $page->nextpageid;
+                                       }
+                               } else {
+                                       $newpageid = $jump;
+                               }
                        }
-               }
-               if($outoftime) {
-                       $newpageid = LESSON_EOL;  // ran out of time for the test, so go to eol
-               } elseif($newpageid == LESSON_UNSEENBRANCHPAGE) {
+               } elseif ($newpageid == LESSON_UNSEENBRANCHPAGE) {
                        if (isteacher($course->id)) {
                                if ($page->nextpageid == 0) {
                                        $newpageid = LESSON_EOL;
                        echo "</div>"; //Close Mark's big div tag???
                        
                        echo "<table width=\"$lesson->width\" cellpadding=\"5\" cellspacing=\"5\"><tr><td>\n";
+                       if (isset($USER->modattempts[$lesson->id])) {
+                               echo "<p align=\"center\">".
+                                       get_string("savechangesandeol", "lesson")."<br /><br />".
+                                       "<input type=\"submit\" onClick='pageform.pageid.value=".LESSON_EOL.";' name=\"save\" value=\"".
+                                       get_string("savechanges", "lesson")."\"></p>\n";
+                               echo "<p align=\"center\">".get_string("or", "lesson")."<br /><br />".
+                                       get_string("continuetoanswer", "lesson")."</p>\n";
+                       }
                        if ($lesson->review && !$correctanswer && !$noanswer) {
                                echo "<p class=\"lessonAbutton\" align=\"center\"><input type=\"submit\" onClick='pageform.pageid.value=$pageid;' name=\"review\" value=\"".
                                        get_string("reviewquestionback", "lesson")."\"></p>\n";
-                               echo "<p class=\"lessonAbutton\" align=\"center\"><input type=\"submit\" name=\"continue\" value=\"".
+                               echo "<p align=\"center\"><input type=\"submit\" name=\"continue\" value=\"".
                                        get_string("reviewquestioncontinue", "lesson")."\"></p>\n";
                        } else {
-                               echo "<p class=\"lessonAbutton\" align=\"center\"><input type=\"submit\" name=\"continue\" value=\"".
+                               echo "<p align=\"center\"><input type=\"submit\" name=\"continue\" value=\"".
                                        get_string("continue", "lesson")."\"></p>\n";
                        }
                        echo "</td></tr></table>";
 
                } else {
+                       if (isset($USER->modattempts[$lesson->id])) {
+                               echo "<p align=\"center\">".
+                                       get_string("savechangesandeol", "lesson")."<br /><br />".
+                                       "<input type=\"submit\" onClick='pageform.pageid.value=".LESSON_EOL.";' name=\"save\" value=\"".
+                                       get_string("savechanges", "lesson")."\"></p>\n";
+                               echo "<p align=\"center\">".get_string("or", "lesson")."<br /><br />".
+                                       get_string("continuetoanswer", "lesson")."</p>\n";
+                       }
                        if ($lesson->review && !$correctanswer && !$noanswer) {
-                               echo "<p class=\"lessonAbutton\" align=\"center\"><input type=\"submit\" onClick='pageform.pageid.value=$pageid;' name=\"review\" value=\"".
+                               echo "<p align=\"center\"><input type=\"submit\" onClick='pageform.pageid.value=$pageid;' name=\"review\" value=\"".
                                        get_string("reviewquestionback", "lesson")."\"></p>\n";
-                               echo "<p class=\"lessonAbutton\" align=\"center\"><input type=\"submit\" name=\"continue\" value=\"".
+                               echo "<p align=\"center\"><input type=\"submit\" name=\"continue\" value=\"".
                                        get_string("reviewquestioncontinue", "lesson")."\"></p>\n";
                        } else {
-                               echo "<p class=\"lessonAbutton\" align=\"center\"><input type=\"submit\" name=\"continue\" value=\"".
+                               echo "<p align=\"center\"><input type=\"submit\" name=\"continue\" value=\"".
                                        get_string("continue", "lesson")."\"></p>\n";
                        }
                }