From 20685b287df1d66f0a1dba8e7b1224d6d2e37723 Mon Sep 17 00:00:00 2001
From: Adrian Greeve <adrian@moodle.com>
Date: Wed, 23 Apr 2014 11:43:38 +0800
Subject: [PATCH 1/3] MDL-45127 mod_lesson: Updated question edit screen with
 more help text.

Unless the custom scores is selected in the lesson settings the score section
in the question settings will be disabled. A help link has been added with
a description similar to this one.
---
 mod/lesson/lang/en/lesson.php | 1 +
 mod/lesson/locallib.php       | 6 ++++++
 2 files changed, 7 insertions(+)

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 0eb7e06e287..b790693ea7f 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);
+        }
     }
 
     /**

From 0aec842e5884ceb560b4fa3d1921c6ce2d06efa8 Mon Sep 17 00:00:00 2001
From: Adrian Greeve <adrian@moodle.com>
Date: Thu, 24 Apr 2014 10:14:13 +0800
Subject: [PATCH 2/3] MDL-45127 mod_lesson: Fixed reviewing lesson answers
 changing the lesson grade.

---
 mod/lesson/continue.php | 2 ++
 mod/lesson/locallib.php | 9 +++++++--
 2 files changed, 9 insertions(+), 2 deletions(-)

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/locallib.php b/mod/lesson/locallib.php
index b790693ea7f..042beac2ec5 100644
--- a/mod/lesson/locallib.php
+++ b/mod/lesson/locallib.php
@@ -1989,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

From 028f535fd9f9f3b84881d28e9894340e7f3a824a Mon Sep 17 00:00:00 2001
From: Adrian Greeve <adrian@moodle.com>
Date: Fri, 2 May 2014 11:21:45 +0800
Subject: [PATCH 3/3] MDL-45127 mod_lesson: Behat test for reviewing a lesson.

---
 mod/lesson/tests/behat/lesson_review.feature | 86 ++++++++++++++++++++
 1 file changed, 86 insertions(+)
 create mode 100644 mod/lesson/tests/behat/lesson_review.feature

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."