From: michaelpenne <michaelpenne> Date: Mon, 1 Nov 2004 20:41:55 +0000 (+0000) Subject: added a link to report, changed conditions for displaying essay link, modified the... X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=2e7551866789f73290669b9be8996f3b20fe9f3b;p=moodle.git added a link to report, changed conditions for displaying essay link, modified the essay functions to reflect the new view of an essay question, and updated view.php to work with modattempts option --- diff --git a/mod/lesson/view.php b/mod/lesson/view.php index 4675f073ee..c250552d1c 100644 --- a/mod/lesson/view.php +++ b/mod/lesson/view.php @@ -103,7 +103,7 @@ } else { $pixpath = $path .'/../theme/'. $CFG->theme .'/pix'; } - + /************** navigation **************************************/ if ($action == 'navigation') { //CDC Chris Berri added this echo call for left menu. must match that in lesson.php for styles @@ -131,7 +131,7 @@ } /// CDC-FLAG /// password protected lesson code - if ($lesson->usepassword) { + if ($lesson->usepassword && !isteacher($course->id)) { $correctpass = false; if (isset($_POST['userpassword'])) { if ($lesson->password == md5(trim($_POST['userpassword']))) { @@ -208,8 +208,13 @@ $retries = 0; } if ($retries) { - print_heading(get_string('attempt', 'lesson', $retries + 1)); + print_heading(get_string('attempt', 'lesson', $retries + 1)); } + + if (isset($USER->modattempts[$lesson->id])) { + unset($USER->modattempts[$lesson->id]); // if no pageid, then student is NOT reviewing + } + // if there are any questions have been answered correctly in this attempt if ($attempts = get_records_select('lesson_attempts', "lessonid = $lesson->id AND userid = $USER->id AND retry = $retries AND @@ -248,7 +253,8 @@ print_simple_box('<p align="center">'. get_string('leftduringtimed', 'lesson') .'</p>', 'center'); echo '<p align="center"><input type="button" value="'. get_string('continue', 'lesson'). "\" onclick=\"document.queryform.pageid.value='$firstpageid';document.queryform.startlastseen.value='no';document.queryform.submit();\"></p>\n"; /// CDC-FLAG added document.queryform.startlastseen.value='yes' - echo '</form>' . "\n"; echo '</div></div>';///CDC Chris Berri added close div tag + echo '</form>' . "\n"; + echo '</div></div>';///CDC Chris Berri added close div tag } else { print_simple_box_start('center'); echo '<div align="center">'; @@ -271,9 +277,10 @@ echo "</form>\n"; echo "</div></div>";///CDC Chris Berri added close div tag } print_footer($course); - exit(); + exit(); } } + if ($grades) { foreach ($grades as $grade) { $bestgrade = $grade->grade; @@ -296,9 +303,9 @@ } } // start at the first page - if (!$pageid = get_field('lesson_pages', 'id', 'lessonid', $lesson->id, 'prevpageid', 0)) { - error('Navigation: first page not found'); - } + if (!$pageid = get_field('lesson_pages', 'id', 'lessonid', $lesson->id, 'prevpageid', 0)) { + error('Navigation: first page not found'); + } /// CDC-FLAG /// -- This is the code for starting a timed test if($lesson->timed && !isset($USER->startlesson[$lesson->id])) { unset($startlesson); @@ -382,7 +389,10 @@ } if ((($timer->starttime + $lesson->maxtime * 60) - time()) > 0) { // code for the clock - echo "<table align=\"right\"><tr><td>"; + 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"; @@ -390,14 +400,16 @@ 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><br><br>"; + 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")); } // update clock when viewing a new page... no special treatment if ((($timer->starttime + $lesson->maxtime * 60) - time()) < 60) { - echo "<div align=\"center\"><table><tr><td align=\"center\">".get_string('studentoneminwarning', 'lesson'). - '</td></tr></table></div>'; + echo "<table align=\"center\"><tr><td align=\"center\">".get_string('studentoneminwarning', 'lesson'). + '</td></tr></table>'; } unset($newtime); @@ -413,10 +425,9 @@ 'prevpageid', 0)) { error('Navigation: first page not found'); } - if ($pageid == $firstpageid) { + if ($pageid == $firstpageid && !isset($USER->modattempts[$lesson->id])) { print_simple_box(get_string('maxtimewarning', 'lesson', $lesson->maxtime), 'center'); } - } } /// CDC-FLAG /// @@ -425,15 +436,15 @@ if (!$page = get_record('lesson_pages', 'id', $pageid)) { error('Navigation: the page record not found'); } - /// CDC-FLAG 6/21/04 /// - this only gets called when a user starts up a new lesson and the first page is a cluster page - if ($page->qtype == LESSON_CLUSTER) { + /// CDC-FLAG 6/21/04 /// + if ($page->qtype == LESSON_CLUSTER) { //this only gets called when a user starts up a new lesson and the first page is a cluster page if (!isteacher($course->id)) { - // get new id - $pageid = lesson_cluster_jump($lesson->id, $USER->id, $pageid); - // get new page info - if (!$page = get_record('lesson_pages', 'id', $pageid)) { - error('Navigation: the page record not found'); - } + // get new id + $pageid = lesson_cluster_jump($lesson->id, $USER->id, $pageid); + // get new page info + if (!$page = get_record('lesson_pages', 'id', $pageid)) { + error('Navigation: the page record not found'); + } } else { // get the next page $pageid = $page->nextpageid; @@ -489,7 +500,11 @@ if (isteacher($course->id)) { echo "<div align=\"center\">".get_string('teacherongoingwarning', 'lesson').'<br /></div>'; } 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 /// @@ -552,6 +567,18 @@ } /// CDC-FLAG /// echo "<br />\n"; + + // this is for modattempts option. Find the users previous answer to this page, + // and then display it below in answer processing + if (isset($USER->modattempts[$lesson->id])) { + $retries = count_records('lesson_grades', "lessonid", $lesson->id, "userid", $USER->id); + $retries--; + if (! $attempts = get_records_select("lesson_attempts", "lessonid = $lesson->id AND userid = $USER->id AND pageid = $page->id AND retry = $retries", "timeseen")) { + error("Previous attempt record could not be found!"); + } + $attempt = end($attempts); + } + // get the answers in a set order, the id order if ($answers = get_records("lesson_answers", "pageid", $page->id, "id")) { echo "<form name=\"answerform\" method =\"post\" action=\"lesson.php\">"; @@ -567,8 +594,13 @@ switch ($page->qtype) { case LESSON_SHORTANSWER : case LESSON_NUMERICAL : + if (isset($USER->modattempts[$lesson->id])) { + $value = "value=\"$attempt->useranswer\""; + } else { + $value = ""; + } echo "<tr><td align=\"center\">".get_string("youranswer", "lesson"). - ": <label for=\"answer\" class=\"hidden-label\">Answer</label><input type=\"text\" id=\"answer\" name=\"answer\" size=\"50\" maxlength=\"200\">\n"; //CDC hidden label added. + ": <label for=\"answer\" class=\"hidden-label\">Answer</label><input type=\"text\" id=\"answer\" name=\"answer\" size=\"50\" maxlength=\"200\" $value>\n"; //CDC hidden label added. echo '</table>'; print_simple_box_end(); if (!$lesson->slideshow) { @@ -580,7 +612,12 @@ shuffle($answers); foreach ($answers as $answer) { echo "<tr><td valign=\"top\">"; - echo "<label for=\"answerid\" class=\"hidden-label\">Answer ID</label><input type=\"radio\" id=\"answerid\" name=\"answerid\" value=\"{$answer->id}\">"; //CDC hidden label added. + if (isset($USER->modattempts[$lesson->id]) && $answer->id == $attempt->answerid) { + $checked = "CHECKED"; + } else { + $checked = ""; + } + echo "<label for=\"answerid\" class=\"hidden-label\">Answer ID</label><input type=\"radio\" id=\"answerid\" name=\"answerid\" value=\"{$answer->id}\" $checked>"; //CDC hidden label added. echo "</td><td>"; $options->para = false; // no <p></p> echo format_text(trim($answer->answer), FORMAT_MOODLE, $options); @@ -602,11 +639,25 @@ foreach ($answers as $answer) { echo "<tr><td valign=\"top\">"; if ($page->qoption) { + $checked = ""; + if (isset($USER->modattempts[$lesson->id])) { + $answerids = explode(",", $attempt->useranswer); + if (in_array($answer->id, $answerids)) { + $checked = "CHECKED"; + } else { + $checked = ""; + } + } // more than one answer allowed - echo "<label for=\"answer[$i]\" class=\"hidden-label\">answer[$i]</label><input type=\"checkbox\" id=\"answer[$i]\" name=\"answer[$i]\" value=\"{$answer->id}\">"; //CDC hidden label added. + echo "<label for=\"answer[$i]\" class=\"hidden-label\">answer[$i]</label><input type=\"checkbox\" id=\"answer[$i]\" name=\"answer[$i]\" value=\"{$answer->id}\" $checked>"; //CDC hidden label added. } else { + if (isset($USER->modattempts[$lesson->id]) && $answer->id == $attempt->answerid) { + $checked = "CHECKED"; + } else { + $checked = ""; + } // only one answer allowed - echo "<label for=\"answerid\" class=\"hidden-label\">answer id</label><input type=\"radio\" id=\"answerid\" name=\"answerid\" value=\"{$answer->id}\">"; //CDC hidden label added. + echo "<label for=\"answerid\" class=\"hidden-label\">answer id</label><input type=\"radio\" id=\"answerid\" name=\"answerid\" value=\"{$answer->id}\" $checked>"; //CDC hidden label added. } echo "</td><td>"; $options->para = false; // no <p></p> @@ -643,16 +694,32 @@ } } shuffle($responses); + $responses = array_unique($responses); + + if (isset($USER->modattempts[$lesson->id])) { + $useranswers = explode(",", $attempt->useranswer); + $t = 0; + } foreach ($answers as $answer) { if ($answer->response != NULL) { echo "<tr><td align=\"right\">"; echo "<b>$answer->answer: </b></td><td valign=\"bottom\">"; echo "<label for=\"response[$answer->id]\" class=\"hidden-label\">response[$answer->id]</label><select id=\"response[$answer->id]\" name=\"response[$answer->id]\">"; //CDC hidden label added. - echo "<option value=\"0\" selected=\"selected\">Choose...</option>"; - $responses = array_unique($responses); - foreach ($responses as $response) { - echo "<option value=\"$response\">$response</option>"; - } + if (isset($USER->modattempts[$lesson->id])) { + $selected = trim($answers[$useranswers[$t]]->response); + echo "<option value=\"$selected\" selected=\"selected\">$selected</option>"; + foreach ($responses as $response) { + if (trim($answers[$useranswers[$t]]->response) != $response) { + echo "<option value=\"$response\">$response</option>"; + } + } + $t++; + } else { + echo "<option value=\"0\" selected=\"selected\">Choose...</option>"; + foreach ($responses as $response) { + echo "<option value=\"$response\">$response</option>"; + } + } echo "</select>"; echo "</td></tr>"; if ($answer != end($answers)) { @@ -688,8 +755,14 @@ print_simple_box_end(); break; case LESSON_ESSAY : + if (isset($USER->modattempts[$lesson->id])) { + $essayinfo = unserialize($attempt->useranswer); + $value = $essayinfo->answer; + } else { + $value = ""; + } echo "<tr><td align=\"center\" valign=\"top\" nowrap>".get_string("youranswer", "lesson").":</td><td>". - "<label for=\"answer\" class=\"hidden-label\">Answer</label><textarea id=\"answer\" name=\"answer\" rows=\"15\" cols=\"60\"></textarea>\n"; //CDC hidden label added. + "<label for=\"answer\" class=\"hidden-label\">Answer</label><textarea id=\"answer\" name=\"answer\" rows=\"15\" cols=\"60\">$value</textarea>\n"; //CDC hidden label added. echo "</td></tr></table>"; print_simple_box_end(); if (!$lesson->slideshow) { @@ -761,7 +834,7 @@ } else { // end of lesson reached work out grade /// CDC-FLAG /// - if ($lesson->timed) { + if ($lesson->timed && !isteacher($course->id)) { unset($USER->startlesson[$lesson->id]); // take this variable out that I put in for timed tests if (isset($_GET["outoftime"])) { if ($_GET["outoftime"] == "normal") { @@ -776,6 +849,9 @@ print_heading(get_string("congratulations", "lesson")); print_simple_box_start("center"); $ntries = count_records("lesson_grades", "lessonid", $lesson->id, "userid", $USER->id); + if (isset($USER->modattempts[$lesson->id])) { + $ntries--; // need to look at the old attempts :) + } if (isstudent($course->id)) { if ($nviewed = count_records("lesson_attempts", "lessonid", $lesson->id, "userid", $USER->id, "retry", $ntries)) { @@ -892,9 +968,20 @@ $grade->grade = $thegrade; $grade->completed = time(); if (!$lesson->practice) { - if (!$newgradeid = insert_record("lesson_grades", $grade)) { - error("Navigation: grade not inserted"); - } + if (isset($USER->modattempts[$lesson->id])) { // if reviewing, make sure update old grade record + if (!$grades = get_records_select("lesson_grades", "lessonid = $lesson->id and userid = $USER->id", "completed")) { + error("Could not find Grade Records"); + } + $oldgrade = end($grades); + $grade->id = $oldgrade->id; + if (!$update = update_record("lesson_grades", $grade)) { + error("Navigation: grade not updated"); + } + } else { + if (!$newgradeid = insert_record("lesson_grades", $grade)) { + error("Navigation: grade not inserted"); + } + } } else { if (!delete_records("lesson_attempts", "lessonid", $lesson->id, "userid", $USER->id, "retry", $ntries)) { error("Could not delete lesson attempts"); @@ -960,8 +1047,27 @@ echo "</div>"; } /// CDC-FLAG /// + if ($lesson->modattempts && !isteacher($course->id)) { + // make sure if the student is reviewing, that he/she sees the same pages/page path that he/she saw the first time + // look at the attempt records to find the first QUESTION page that the user answered, then use that page id + // to pass to view again. This is slick cause it wont call the empty($pageid) code + // $ntries is decremented above + $attempts = get_records_select("lesson_attempts", "lessonid = $lesson->id AND userid = $USER->id AND retry = $ntries", "timeseen"); + $firstattempt = current($attempts); + $pageid = $firstattempt->pageid; + // IF the student wishes to review, need to know the last question page that the student answered. This will help to make + // sure that the student can leave the lesson via pushing the continue button. + $lastattempt = end($attempts); + $USER->modattempts[$lesson->id] = $lastattempt->pageid; + echo "<form name=\"reviewform\" method=\"post\" action=\"view.php?id=$cm->id\">"; + echo "<input type=\"hidden\" name=\"pageid\" value=\"$pageid\">"; + echo "</form>"; + echo "<p align=\"center\"><a href=\"javascript:document.reviewform.submit();\">".get_string("reviewlesson", "lesson")."</a></p>\n"; + } elseif ($lesson->modattempts && isteacher($course->id)) { + echo "<p align=\"center\">".get_string("modattemptsnoteacher", "lesson")."</p>"; + } echo "<p align=\"center\"><a href=\"../../course/view.php?id=$course->id\">".get_string("mainmenu", "lesson")."</a></p>\n"; //CDC Back to the menu (course view). - echo "<p align=\"center\"><a href=\"../../course/grade.php?id=$course->id\">".get_string("viewgrades", "lesson")."</a></p>\n"; //CDC Back to the menu (course view). + echo "<p align=\"center\"><a href=\"../../course/grade.php?id=$course->id\">".get_string("viewgrades", "lesson")."</a></p>\n"; //CDC view grades } /// CDC-FLAG /// if($lesson->slideshow) { @@ -1002,57 +1108,59 @@ get_string("pleaseenteryouranswerinthebox", "lesson")."\"></p></td></tr>\n"; break; case LESSON_BRANCHTABLE : - $nextprevious = array(); - $otherjumps = array(); - // seperate out next and previous jumps from the other jumps - foreach ($answers as $answer) { - if($answer->jumpto == LESSON_NEXTPAGE || $answer->jumpto == LESSON_PREVIOUSPAGE) { - $nextprevious[] = $answer; - } else { - $otherjumps[] = $answer; - } - } - if ($page->layout) { - echo "<tr>"; - // next 3 foreach loops print out the links in correct order - foreach ($nextprevious as $jump) { - if ($jump->jumpto == LESSON_PREVIOUSPAGE) { - echo "<td align=\"left\"><input type=\"button\" onclick=\"document.answerform.jumpto.value=$jump->jumpto;document.answerform.submit();\"". - "value = \"$jump->answer\"></td>"; - } - } - echo "<td align=\"center\"><table><tr>"; - foreach ($otherjumps as $otherjump) { - echo "<td><input type=\"button\" onclick=\"document.answerform.jumpto.value=$otherjump->jumpto;document.answerform.submit();\"". - "value = \"$otherjump->answer\"></td>"; - } - echo "</tr></table></td>"; - foreach ($nextprevious as $jump) { - if ($jump->jumpto == LESSON_NEXTPAGE) { - echo "<td align=\"right\"><input type=\"button\" onclick=\"document.answerform.jumpto.value=$jump->jumpto;document.answerform.submit();\"". - "value = \"$jump->answer\"></td>"; - } - } - echo "</tr>"; - } else { - // next 3 foreach loops print out the links in correct order - foreach ($nextprevious as $jump) { - if ($jump->jumpto == LESSON_NEXTPAGE) { - echo "<tr><td><input type=\"button\" onclick=\"document.answerform.jumpto.value=$jump->jumpto;document.answerform.submit();\"". - "value = \"$jump->answer\"></td></tr>"; - } - } - foreach ($otherjumps as $otherjump) { - echo "<tr><td><input type=\"button\" onclick=\"document.answerform.jumpto.value=$otherjump->jumpto;document.answerform.submit();\"". - "value = \"$otherjump->answer\"></td></tr>"; - } - foreach ($nextprevious as $jump) { - if ($jump->jumpto == LESSON_PREVIOUSPAGE) { - echo "<tr><td><input type=\"button\" onclick=\"document.answerform.jumpto.value=$jump->jumpto;document.answerform.submit();\"". - "value = \"$jump->answer\"></td></tr>"; - } - } - } + if (!empty($answers)) { + $nextprevious = array(); + $otherjumps = array(); + // seperate out next and previous jumps from the other jumps + foreach ($answers as $answer) { + if($answer->jumpto == LESSON_NEXTPAGE || $answer->jumpto == LESSON_PREVIOUSPAGE) { + $nextprevious[] = $answer; + } else { + $otherjumps[] = $answer; + } + } + if ($page->layout) { + echo "<tr>"; + // next 3 foreach loops print out the links in correct order + foreach ($nextprevious as $jump) { + if ($jump->jumpto == LESSON_PREVIOUSPAGE) { + echo "<td align=\"left\"><input type=\"button\" onclick=\"document.answerform.jumpto.value=$jump->jumpto;document.answerform.submit();\"". + "value = \"$jump->answer\"></td>"; + } + } + echo "<td align=\"center\"><table><tr>"; + foreach ($otherjumps as $otherjump) { + echo "<td><input type=\"button\" onclick=\"document.answerform.jumpto.value=$otherjump->jumpto;document.answerform.submit();\"". + "value = \"$otherjump->answer\"></td>"; + } + echo "</tr></table></td>"; + foreach ($nextprevious as $jump) { + if ($jump->jumpto == LESSON_NEXTPAGE) { + echo "<td align=\"right\"><input type=\"button\" onclick=\"document.answerform.jumpto.value=$jump->jumpto;document.answerform.submit();\"". + "value = \"$jump->answer\"></td>"; + } + } + echo "</tr>"; + } else { + // next 3 foreach loops print out the links in correct order + foreach ($nextprevious as $jump) { + if ($jump->jumpto == LESSON_NEXTPAGE) { + echo "<tr><td><input type=\"button\" onclick=\"document.answerform.jumpto.value=$jump->jumpto;document.answerform.submit();\"". + "value = \"$jump->answer\"></td></tr>"; + } + } + foreach ($otherjumps as $otherjump) { + echo "<tr><td><input type=\"button\" onclick=\"document.answerform.jumpto.value=$otherjump->jumpto;document.answerform.submit();\"". + "value = \"$otherjump->answer\"></td></tr>"; + } + foreach ($nextprevious as $jump) { + if ($jump->jumpto == LESSON_PREVIOUSPAGE) { + echo "<tr><td><input type=\"button\" onclick=\"document.answerform.jumpto.value=$jump->jumpto;document.answerform.submit();\"". + "value = \"$jump->answer\"></td></tr>"; + } + } + } + } break; } echo "</table></form>\n"; @@ -1069,7 +1177,7 @@ /*******************teacher view **************************************/ elseif ($action == 'teacherview') { - print_heading_with_help($lesson->name, "overview", "lesson"); + print_heading_with_help($lesson->name, "overview", "lesson"); // get number of pages if ($page = get_record_select("lesson_pages", "lessonid = $lesson->id AND prevpageid = 0")) { $npages = 1; @@ -1109,10 +1217,17 @@ echo "<input type=\"hidden\" name=\"id\" value=\"$cm->id\" />\n"; echo "<input type=\"hidden\" name=\"action\" value=\"navigation\" />\n"; echo "<input type=\"hidden\" name=\"pageid\" />\n"; - /// CDC-FLAG /// link to grade essay questions - if (count_records("lesson_essay", "lessonid", $lesson->id) > 0) { - echo "<div align=\"center\"><a href=\"view.php?id=$cm->id&action=essayview\">".get_string("gradeessay", "lesson")."</a></div><br />"; - } + /// CDC-FLAG /// link to grade essay questions and to report + if ($testattempts = get_records("lesson_attempts", "lessonid", $lesson->id)) { // just check to see if anyone has answered any questions. + echo "<div align=\"center\"><a href=\"report.php?id=$cm->id\">".get_string("viewlessonstats", "lesson")."</a></div>"; + } + if ($essaypages = get_records_select("lesson_pages", "lessonid = $lesson->id AND qtype = ".LESSON_ESSAY)) { // get pages that are essay + // get only the attempts that are in response to essay questions + $essaypageids = implode(",", array_keys($essaypages)); // all the pageids in comma seperated list + if ($essayattempts = get_records_select("lesson_attempts", "lessonid = $lesson->id AND pageid IN($essaypageids)")) { + echo "<div align=\"center\"><a href=\"view.php?id=$cm->id&action=essayview\">".get_string("gradeessay", "lesson")."</a></div><br />"; + } + } /// CDC-FLAG /// tree code - in final release, will use lang file for all text output. // NoticeFix next two lines and bowth viewAlls $branch = false; @@ -1223,9 +1338,7 @@ break; case LESSON_MATCHING : echo $LESSON_QUESTION_TYPE[$page->qtype]; - if (!lesson_iscorrect($page->id, $answer->jumpto)) { - echo " - ".get_string("firstanswershould", "lesson"); - } + echo get_string("firstanswershould", "lesson"); break; case LESSON_TRUEFALSE : case LESSON_NUMERICAL : @@ -1462,109 +1575,148 @@ /*******************essay view **************************************/ // 6/29/04 elseif ($action == 'essayview') { print_heading_with_help($lesson->name, "overview", "lesson"); - if (!$essays = get_records_select("lesson_essay", "lessonid = $lesson->id", "timesubmitted")) { - error("No one has answered essay questions yet..."); - } - if (!$pages = get_records_select("lesson_pages", "lessonid = $lesson->id")) { + + // get lesson pages that are essay + if (!$pages = get_records_select("lesson_pages", "lessonid = $lesson->id AND qtype = ".LESSON_ESSAY)) { error("Error: could not find lesson pages"); } - if (!$users = lesson_get_participants($lesson->id)) { + + // get all the users who have taken this lesson, order by their last name + if (!$users = get_records_sql("SELECT DISTINCT u.* + FROM {$CFG->prefix}user u, + {$CFG->prefix}lesson_attempts a + WHERE a.lessonid = '$lesson->id' and + u.id = a.userid + ORDER BY u.lastname")) { error("Error: could not find users"); } - - echo "<div align=\"center\"><a href=\"view.php?id=$cm->id\">Go Back to Lesson</a></div><br>"; - - foreach ($essays as $essay) { - $studentname = $users[$essay->userid]->lastname.", ".$users[$essay->userid]->firstname; - $essay->studentname = $studentname; - $temp[$studentname][] = $essay; + + // get only the attempts that are in response to essay questions + $pageids = implode(",", array_keys($pages)); // all the pageids in comma seperated list + if (!$essayattempts = get_records_select("lesson_attempts", "lessonid = $lesson->id AND pageid IN($pageids)")) { + error ("No one has answered essay questions yet..."); + } + // group all the essays by userid + foreach ($essayattempts as $essay) { + // not very nice :) but basically + // this organizes the essays so I know how many times a student answered an essay per try and per page + $studentessays[$essay->userid][$essay->pageid][$essay->retry][] = $essay; } - ksort($temp); - echo "<table width=\"100%\" align=\"center\" cellspacing=\"10\">"; - echo "<tr align=\"center\" bgcolor=\"$THEME->cellheading2\"><td width=\"100px\"><b>$course->students</b></td><td><b>".get_string("essays", "lesson")."</b></td><td width=\"155px\"><b>".get_string("email", "lesson")."</b></td></tr>"; - foreach ($temp as $student) { - echo "<tr><td>".$student[0]->studentname."</td><td>"; - $end = end($student); - foreach ($student as $essay) { - if (!$essay->graded) { - $style = "style='color:#DF041E;text-decoration:underline;'"; - } elseif (!$essay->sent) { - $style = "style='color:#006600;text-decoration:underline;'"; - } else { - $style = "style='color:#999999;'"; - } - $output = "<a $style href=\"view.php?id=$cm->id&action=essaygrade&essayid=$essay->id\">".$pages[$essay->pageid]->title."</a>"; - if ($essay->id != $end->id) { - $output .= ", "; - } - echo $output; + print_heading("<a href=\"view.php?id=$cm->id\">".get_string("gobacktolesson", "lesson")."</a>"); + + $table->head = array($course->students, get_string("essays", "lesson"), get_string("email", "lesson")); + $table->align = array("left", "left", "left"); + $table->wrap = array("nowrap", "wrap", "nowrap"); + $table->width = "90%"; + $table->size = array("*", "70%", "*"); + + // get the student ids of the students who have answered the essay question + $studentids = array_keys($studentessays); + + // cycle through all the ids + foreach ($studentids as $id) { + $studentname = $users[$id]->lastname.", ".$users[$id]->firstname; + unset($essaylinks); + // go through each essay + foreach ($studentessays[$id] as $page => $tries) { + // go through each essay per page + foreach($tries as $try) { + // make sure they didn't answer it more than the max number of attmepts + if (count($try) > $lesson->maxattempts) { + $essay = $try[$lesson->maxattempts-1]; + } else { + $essay = end($try); + } + $essayinfo = unserialize($essay->useranswer); + // different colors for all the states of an essay (graded, if sent, not graded) + if (!$essayinfo->graded) { + $style = "style='color:#DF041E;text-decoration:underline;'"; + } elseif (!$essayinfo->sent) { + $style = "style='color:#006600;text-decoration:underline;'"; + } else { + $style = "style='color:#999999;'"; + } + // link for each essay + $essaylinks[] = "<a $style href=\"view.php?id=$cm->id&action=essaygrade&attemptid=$essay->id\">".$pages[$essay->pageid]->title."</a>"; + } } - echo "</td><td><a href=\"view.php?id=$cm->id&action=emailessay&userid=".$essay->userid."\">".get_string("emailgradedessays", "lesson")."</a></td></tr>"; - } - echo "<td><td><td><a href=\"view.php?id=$cm->id&action=emailessay\">".get_string("emailallgradedessays", "lesson")."</a></td>"; - echo "</table>"; + // email link for this user + $emaillink = "<a href=\"view.php?id=$cm->id&action=emailessay&userid=".$id."\">".get_string("emailgradedessays", "lesson")."</a>"; + $table->data[] = array($studentname, implode(", ", $essaylinks), $emaillink); + } + // email link for all users + $emailalllink = "<a href=\"view.php?id=$cm->id&action=emailessay\">".get_string("emailallgradedessays", "lesson")."</a>"; + + $table->data[] = array(" ", " ", $emailalllink); + + print_table($table); } /*******************grade essays **************************************/ // 6/29/04 elseif ($action == 'essaygrade') { print_heading_with_help($lesson->name, "overview", "lesson"); - if (!$essays = get_records_select("lesson_essay", "lessonid = $lesson->id", "timesubmitted")) { - error("Error: could not find essays"); + + require_variable($attemptid); + + if (!$essay = get_record("lesson_attempts", "id", $attemptid)) { + error("Error: could not find essay"); } - if (!$pages = get_records_select("lesson_pages", "lessonid = $lesson->id")) { + if (!$page = get_record("lesson_pages", "id", $essay->pageid)) { error("Error: could not find lesson pages"); } - if (!$users = lesson_get_participants($lesson->id)) { + if (!$student = get_record("user", "id", $essay->userid)) { error("Error: could not find users"); } - if (!$answers = get_records_select("lesson_answers", "lessonid = $lesson->id")) { - error("Error: could not find essays"); + if (!$answer = get_record("lesson_answers", "lessonid", $lesson->id, "pageid", $page->id)) { + error("Error: could not find answer"); } - $essayid = $_GET['essayid']; echo "<form name=\"essaygrade\" method=\"post\" action=\"view.php\">\n"; echo "<input type=\"hidden\" name=\"id\" value=\"$cm->id\">\n"; echo "<input type=\"hidden\" name=\"action\">\n"; - echo "<input type=\"hidden\" name=\"essayid\" value=\"$essayid\">\n"; - echo "<input type=\"hidden\" name=\"userid\" value=\"".$essays[$essayid]->userid."\">\n"; + echo "<input type=\"hidden\" name=\"attemptid\" value=\"$attemptid\">\n"; + + // all tables will have these + $table->align = array("left"); + $table->wrap = array("wrap"); + $table->width = "70%"; + $table->size = array("100%"); - $style = "style=\"padding-left:40px;\""; - - - echo "<table cellspacing=\"10\" align=\"center\">"; - echo "<tr><td>".get_string("question", "lesson").":</td></tr><tr><td $style>"; - print_simple_box_start("left"); - echo $pages[$essays[$essayid]->pageid]->contents; - print_simple_box_end(); - echo "</td></tr>"; + + $table->head = array(get_string("question", "lesson")); + $table->data[] = array(format_text($page->contents)); - $studentname = $users[$essays[$essayid]->userid]->firstname." ".$users[$essays[$essayid]->userid]->lastname; - echo "<tr><td>".get_string("studentresponse", "lesson", $studentname).":</td></tr><tr><td $style>"; - print_simple_box_start("left"); - echo $essays[$essayid]->answer; - print_simple_box_end(); - echo "</td></tr>"; - echo "<tr><td>".get_string("comments", "lesson").":<br></td></tr>"; - echo "<tr><td $style>"; - echo "<textarea id=\"answer\" name=\"response\" align=\"center\" rows=\"10\" cols=\"50\">".$essays[$essayid]->response."</textarea>\n"; - echo "</td></tr>"; - - echo "<tr><td>".get_string("essayscore", "lesson").": </td></tr><tr><td $style>"; + print_table($table); + echo "<br />"; + + unset($table->data); + $essayinfo = unserialize($essay->useranswer); + + $studentname = $student->firstname." ".$student->lastname; + $table->head = array(get_string("studentresponse", "lesson", $studentname)); + $table->data[] = array(format_text($essayinfo->answer)); + + print_table($table); + echo "<br />"; + + unset($table->data); + + $table->head = array(get_string("comments", "lesson")); + $table->data[] = array("<textarea id=\"answer\" name=\"response\" align=\"center\" rows=\"15\" cols=\"60\">".$essayinfo->response."</textarea>\n"); if ($lesson->custom) { - for ($i=$answers[$essays[$essayid]->answerid]->score; $i>=0; $i--) { - $grades[$i] = $i; + for ($i=$answer->score; $i>=0; $i--) { + $options[$i] = $i; } - lesson_choose_from_menu($grades, "score", $essays[$essayid]->score, ""); } else { $options[0] = "incorrect"; $options[1] = "correct"; - lesson_choose_from_menu($options, "score", $essays[$essayid]->score, ""); } - echo "</td></tr>"; - echo "</table>"; - + $table->data[] = array(get_string("essayscore", "lesson").": ".lesson_choose_from_menu($options, "score", $essayinfo->score, "", "", "", true)); + + print_table($table); + echo "<br />"; echo "<table align=\"center\"><tr><td>"; echo "<input type=\"button\" value=\"Cancel\" onclick=\"document.essaygrade.action.value='essayview';". "document.essaygrade.submit();\">"; @@ -1572,113 +1724,120 @@ echo "<input type=\"button\" value=\"Submit Grade\" onclick=\"document.essaygrade.action.value='updategrade';". "document.essaygrade.submit();\">"; echo "</td></tr></table>"; - echo "</form>"; + echo "</form>"; + + } /*******************update grade**************************************/ // 6/29/04 elseif ($action == 'updategrade') { print_heading_with_help($lesson->name, "overview", "lesson"); - $userid = $_POST['userid']; + $form = data_submitted(); - if (!$essays = get_records_select("lesson_essay", "lessonid = $lesson->id", "timesubmitted")) { - error("Error: could not find essays"); + if (!$essay = get_record("lesson_attempts", "id", $form->attemptid)) { + error("Error: could not find essay"); } - if (!$grades = get_records_select("lesson_grades", "lessonid = $lesson->id and userid= $userid", "completed")) { + + if (!$grades = get_records_select("lesson_grades", "lessonid = $lesson->id and userid = $essay->userid", "completed", "*", $essay->retry, 1)) { error("Error: could not find grades"); } + + $essayinfo = unserialize($essay->useranswer); - echo "<div align=\"center\">"; - echo "Please wait while updating...<br>"; + $grade = current($grades); - $form = data_submitted(); - - $update->id = $form->essayid; - $update->graded = true; - $update->score = $form->score; - $update->response = $form->response; - $update->sent = false; - - for ($i = 0; $i < $essays[$form->essayid]->try; $i++) { - next($grades); - } - $grade = current($grades); - // if teacher goes back and changes score, then need to take the old score off - $resetgrade = $grade->grade - ($essays[$form->essayid]->score / $lesson->grade * 100); - // now add the new score - $newgrade = ($form->score / $lesson->grade * 100) + $resetgrade; - if ($newgrade > 100) { - $newgrade = 100; - } elseif ($newgrade < 0) { - $newgrade = 0; - } - $updategrade->id = $grade->id; - $updategrade->grade = $newgrade; + // I modded this function a bit so it would work here... :) ;) :P + $score = lesson_calculate_ongoing_score($lesson, $essay->userid, $essay->retry, true); // this function ignores essay questions + $score += $form->score; + if ($score > $lesson->grade) { + $score = $lesson->grade; + } elseif ($score < 0) { + $score = 0; + } + $updategrade->grade = intval(100 * $score / $lesson->grade); + $updategrade->id = $grade->id; - if(update_record("lesson_essay", $update) && update_record("lesson_grades", $updategrade)) { + $essayinfo->graded = 1; + $essayinfo->score = $form->score; + $essayinfo->response = $form->response; + $essayinfo->sent = 0; + $essay->useranswer = serialize($essayinfo); + + if(update_record("lesson_attempts", $essay) && update_record("lesson_grades", $updategrade)) { redirect("view.php?id=$cm->id&action=essayview", get_string("updatesuccess", "lesson")); } else { echo get_string("updatefailed", "lesson")."!<br>"; echo "<a href=\"view.php?id=$cm->id&action=essayview\">".get_string("continue", "lesson")."</a>"; exit(); } - echo "</div>"; } /*******************email essay **************************************/ // 6/29/04 elseif ($action == 'emailessay') { print_heading_with_help($lesson->name, "overview", "lesson"); - - echo "<div align=\"center\">"; - echo "Please wait while emailing...<br>"; - + if (isset($_GET['userid'])) { - $queryadd = "and userid = ".$_GET['userid']; + $queryadd = " AND userid = ".$_GET['userid']; + if (! $users = get_records("user", "id", $_GET['userid'])) { + error("Error: could not find users"); + } } else { $queryadd = ""; + if (!$users = lesson_get_participants($lesson->id)) { + error("Error: could not find users"); + } } - - if (!$essays = get_records_select("lesson_essay", "lessonid = $lesson->id $queryadd", "timesubmitted")) { - error("Error: could not find essays"); - } - if (!$pages = get_records_select("lesson_pages", "lessonid = $lesson->id")) { + + // get lesson pages that are essay + if (!$pages = get_records_select("lesson_pages", "lessonid = $lesson->id AND qtype = ".LESSON_ESSAY)) { error("Error: could not find lesson pages"); } - if (!$users = lesson_get_participants($lesson->id)) { - error("Error: could not find users"); - } - if (!$answers = get_records_select("lesson_answers", "lessonid = $lesson->id")) { - error("Error: could not find essays"); - } + + // get only the attempts that are in response to essay questions + $pageids = implode(",", array_keys($pages)); // all the pageids in comma seperated list + if (!$essayattempts = get_records_select("lesson_attempts", "lessonid = $lesson->id AND pageid IN($pageids)".$queryadd)) { + error ("No one has answered essay questions yet..."); + } + + if (!$essayanswers = get_records_select("lesson_answers", "lessonid = $lesson->id AND pageid IN($pageids)", "", "pageid, score")) { + error ("Could not find answer records."); + } + // NoticeFix big fix, change $essay[]'s that use $USER to just $USER - foreach ($essays as $essay) { - if ($essay->graded && !$essay->sent) { - $subject = "Your grade for ".$pages[$essay->pageid]->title." question"; - $message = "Question:<br>\r\n"; + foreach ($essayattempts as $essay) { + $essayinfo = unserialize($essay->useranswer); + if ($essayinfo->graded && !$essayinfo->sent) { + $subject = get_string('essayemailsubject', 'lesson', $pages[$essay->pageid]->title); + $message = get_string('question', 'lesson').":<br>"; $message .= $pages[$essay->pageid]->contents; - $message .= "<br><br>\r\n\r\n"; - $message .= "Your response:<br>\r\n"; - $message .= $essay->answer; - $message .= "<br><br>\r\n\r\n"; - $message .= $USER->firstname." ".$USER->lastname."'s comments:<br>\r\n"; - $message .= $essay->response; - $message .= "<br><br>\r\n\r\n"; - $grades = get_records_select("lesson_grades", "lessonid = $lesson->id and userid = $essay->userid", "completed"); - for ($i = 0; $i < $essay->try; $i++) { - next($grades); - } - $grade = current($grades); - reset($grades); + $message .= "<br><br>"; + $message .= get_string('yourresponse', 'lesson').":<br>"; + $message .= $essayinfo->answer; + $message .= "<br><br>"; + $message .= get_string('commentswithname', 'lesson', $USER).":<br>"; + $message .= $essayinfo->response; + $message .= "<br><br>"; + $grades = get_records_select("lesson_grades", "lessonid = $lesson->id and userid = $essay->userid", "completed", "*", $essay->retry, 1); + $grade = current($grades); if ($lesson->custom) { - $message .= "You have received $essay->score points out of $lesson->grade".".<br>\r\n"; - $message .= "Your grade for the lesson has been changed to $grade->grade"."%.\r\n"; - } else { - // cannot think of a way to update if not custom... - } - if(email_to_user($users[$essay->userid], $USER, $subject, $message, $message)) { - $updateessay->id = $essay->id; - $updateessay->sent = true; - update_record("lesson_essay", $updateessay); + $points->score = $essayinfo->score; + $points->outof = $essayanswers[$essay->pageid]->score; + $message .= get_string("youhavereceived", "lesson", $points)."<br>"; + } else { + $points->score = $essayinfo->score; + $points->outof = 1; + $message .= get_string("youhavereceived", "lesson", $points)."<br>"; + } + $message .= "<br><br>"; + $message .= get_string("yourgradeisnow", "lesson", $grade->grade)."%."; + + $plaintxt = format_text_email($message, FORMAT_HTML); + + if(email_to_user($users[$essay->userid], $USER, $subject, $message, $plaintxt)) { + $essayinfo->sent = 1; + $essay->useranswer = serialize($essayinfo); + update_record("lesson_attempts", $essay); } else { echo "Email Failed!<br>"; echo "<a href=\"view.php?id=$cm->id&action=essayview\">".get_string("continue", "lesson")."</a>";