diff --git a/mod/lesson/continue.php b/mod/lesson/continue.php index 9144edc6c9b..9106cfb7f7a 100644 --- a/mod/lesson/continue.php +++ b/mod/lesson/continue.php @@ -94,6 +94,8 @@ if (isset($USER->modattempts[$lesson->id])) { $attempts = $DB->get_records("lesson_attempts", array("lessonid"=>$lesson->id, "userid"=>$USER->id, "retry"=>$nretakes), "timeseen", "id, pageid"); $found = false; $temppageid = 0; + // Make sure that the newpageid always defaults to something valid. + $result->newpageid = LESSON_EOL; 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 $result->newpageid = $attempt->pageid; diff --git a/mod/lesson/lang/en/lesson.php b/mod/lesson/lang/en/lesson.php index dcfb162d4b4..dd9dcf8102b 100644 --- a/mod/lesson/lang/en/lesson.php +++ b/mod/lesson/lang/en/lesson.php @@ -385,6 +385,7 @@ $string['savechanges'] = 'Save changes'; $string['savechangesandeol'] = 'Save all changes and go to the end of the lesson.'; $string['savepage'] = 'Save page'; $string['score'] = 'Score'; +$string['score_help'] = 'Score is only used when custom scoring is enabled. Each answer can then be given a numerical point value (positive or negative).'; $string['scores'] = 'Scores'; $string['secondpluswrong'] = 'Not quite. Would you like to try again?'; $string['selectaqtype'] = 'Select a question type'; diff --git a/mod/lesson/locallib.php b/mod/lesson/locallib.php index e9945af7627..9517df2402c 100644 --- a/mod/lesson/locallib.php +++ b/mod/lesson/locallib.php @@ -770,6 +770,12 @@ abstract class lesson_add_page_form_base extends moodleform { if ($value !== null) { $this->_form->setDefault($name, $value); } + $this->_form->addHelpButton($name, 'score', 'lesson'); + + // Score is only used for custom scoring. Disable the element when not in use to stop some confusion. + if (!$this->_customdata['lesson']->custom) { + $this->_form->freeze($name); + } } /** @@ -1983,12 +1989,17 @@ abstract class lesson_page extends lesson_base { $attempt->timeseen = time(); // if allow modattempts, then update the old attempt record, otherwise, insert new answer record + $userisreviewing = false; if (isset($USER->modattempts[$this->lesson->id])) { $attempt->retry = $nretakes - 1; // they are going through on review, $nretakes will be too high + $userisreviewing = true; } - if ($this->lesson->retake || (!$this->lesson->retake && $nretakes == 0)) { - $DB->insert_record("lesson_attempts", $attempt); + // Only insert a record if we are not reviewing the lesson. + if (!$userisreviewing) { + if ($this->lesson->retake || (!$this->lesson->retake && $nretakes == 0)) { + $DB->insert_record("lesson_attempts", $attempt); + } } // "number of attempts remaining" message if $this->lesson->maxattempts > 1 // displaying of message(s) is at the end of page for more ergonomic display diff --git a/mod/lesson/tests/behat/lesson_review.feature b/mod/lesson/tests/behat/lesson_review.feature new file mode 100644 index 00000000000..053c3076f41 --- /dev/null +++ b/mod/lesson/tests/behat/lesson_review.feature @@ -0,0 +1,86 @@ +@mod @mod_lesson +Feature: In a lesson activity, students can review the answers they gave to questions + To review questions of a lesson + As a student + I need to complete a lesson answering all of the questions. + + @javascript + Scenario: Student answers questions and then reviews them. + Given the following "users" exist: + | username | firstname | lastname | email | + | teacher1 | Teacher | 1 | teacher1@asd.com | + | student1 | Student | 1 | student1@asd.com | + And the following "courses" exist: + | fullname | shortname | category | + | Course 1 | C1 | 0 | + And the following "course enrolments" exist: + | user | course | role | + | teacher1 | C1 | editingteacher | + | student1 | C1 | student | + And I log in as "teacher1" + And I follow "Course 1" + And I turn editing mode on + And I add a "Lesson" to section "1" and I fill the form with: + | Name | Test lesson name | + | Display ongoing score | Yes | + | Slideshow | Yes | + | Maximum number of answers | 10 | + | Allow student review | Yes | + | Maximum number of attempts | 3 | + | Custom scoring | No | + | Re-takes allowed | Yes | + And I follow "Test lesson name" + And I follow "Add a question page" + And I set the field "Select a question type" to "Numerical" + And I press "Add a question page" + And I set the following fields to these values: + | Page title | Hardest question ever | + | Page contents | 1 + 1? | + | id_answer_editor_0 | 2 | + | id_response_editor_0 | Correct answer | + | id_jumpto_0 | Next page | + | id_answer_editor_1 | 1 | + | id_response_editor_1 | Incorrect answer | + | id_jumpto_1 | This page | + And I press "Save page" + And I set the field "qtype" to "Question" + And I set the field "Select a question type" to "True/false" + And I press "Add a question page" + And I set the following fields to these values: + | Page title | Next question | + | Page contents | Paper is made from trees. | + | id_answer_editor_0 | True | + | id_response_editor_0 | Correct | + | id_jumpto_0 | Next page | + | id_answer_editor_1 | False | + | id_response_editor_1 | Wrong | + | id_jumpto_1 | This page | + And I press "Save page" + And I log out + And I log in as "student1" + And I follow "Course 1" + And I follow "Test lesson name" + And I should see "You have answered 0 correctly out of 0 attempts." + And I set the following fields to these values: + | Your answer | 1 | + And I press "Submit" + And I should see "You have answered 0 correctly out of 1 attempts." + And I press "Continue" + And I set the following fields to these values: + | Your answer | 2 | + And I press "Submit" + And I should see "You have answered 1 correctly out of 2 attempts." + And I press "Continue" + And I set the following fields to these values: + | True | 1 | + And I press "Submit" + And I should see "You have answered 2 correctly out of 3 attempts." + And I press "Continue" + When I follow "Review lesson" + Then I should see "You have answered 2 correctly out of 3 attempts." + And I press "Next page" + And I should see "You have answered 2 correctly out of 3 attempts." + And I press "Continue" + And I should see "You have answered 2 correctly out of 3 attempts." + And I press "Next page" + And I should see "You have answered 2 correctly out of 3 attempts."