From 476fa05c083a31f89c866cb740491c9f07406af3 Mon Sep 17 00:00:00 2001 From: Jean-Michel Vedrine Date: Sat, 27 Dec 2014 18:15:51 +0100 Subject: [PATCH] MDL-48709 mod_lesson: subclusters are not working --- mod/lesson/locallib.php | 18 +- .../behat/lesson_with_subcluster.feature | 176 ++++++++++++++++++ 2 files changed, 193 insertions(+), 1 deletion(-) create mode 100644 mod/lesson/tests/behat/lesson_with_subcluster.feature diff --git a/mod/lesson/locallib.php b/mod/lesson/locallib.php index a5e39807c5c..8b9c8ebcfd5 100644 --- a/mod/lesson/locallib.php +++ b/mod/lesson/locallib.php @@ -1459,8 +1459,24 @@ class lesson extends lesson_base { $clusterpages = $this->get_sub_pages_of($pageid, array(LESSON_PAGE_ENDOFCLUSTER)); $unseen = array(); foreach ($clusterpages as $key=>$cluster) { - if ($cluster->type !== lesson_page::TYPE_QUESTION) { + // Remove the page if it is in a branch table or is an endofbranch. + if ($this->is_sub_page_of_type($cluster->id, + array(LESSON_PAGE_BRANCHTABLE), array(LESSON_PAGE_ENDOFBRANCH, LESSON_PAGE_CLUSTER)) + || $cluster->qtype == LESSON_PAGE_ENDOFBRANCH) { unset($clusterpages[$key]); + } else if ($cluster->qtype == LESSON_PAGE_BRANCHTABLE) { + // If branchtable, check to see if any pages inside have been viewed. + $branchpages = $this->get_sub_pages_of($cluster->id, array(LESSON_PAGE_BRANCHTABLE, LESSON_PAGE_ENDOFBRANCH)); + $flag = true; + foreach ($branchpages as $branchpage) { + if (array_key_exists($branchpage->id, $seenpages)) { // Check if any of the pages have been viewed. + $flag = false; + } + } + if ($flag && count($branchpages) > 0) { + // Add branch table. + $unseen[] = $cluster; + } } elseif ($cluster->is_unseen($seenpages)) { $unseen[] = $cluster; } diff --git a/mod/lesson/tests/behat/lesson_with_subcluster.feature b/mod/lesson/tests/behat/lesson_with_subcluster.feature new file mode 100644 index 00000000000..a697f465a5b --- /dev/null +++ b/mod/lesson/tests/behat/lesson_with_subcluster.feature @@ -0,0 +1,176 @@ +@mod @mod_lesson +Feature: In a lesson activity, students can see questions in random order and a single question drawn from a branch + In order to create a lesson with a cluster and a subcluster + As a teacher + I need to add content pages and questions with cluster, branchtable and end of branchtable and end of cluster pages + + Background: + 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 + + @javascript + Scenario: Lesson with subcluster + Given I add a "Lesson" to section "1" and I fill the form with: + | Name | Lesson with subcluster | + And I follow "Lesson with subcluster" + And I follow "Add a content page" + And I set the following fields to these values: + | Page title | First page name | + | Page contents | First page contents | + | id_answer_editor_0 | Next page | + | id_jumpto_0 | Next page | + And I press "Save page" + And I follow "Expanded" + And I click on "Add a cluster" "link" in the "//div[contains(concat(' ', normalize-space(@class), ' '), ' addlinks ')][2]" "xpath_element" + And I click on "Add a question page here" "link" in the "//div[contains(concat(' ', normalize-space(@class), ' '), ' addlinks ')][3]" "xpath_element" + And I set the field "Select a question type" to "Multichoice" + And I press "Add a question page" + And I set the following fields to these values: + | Page title | question 1 | + | Page contents | Question from cluster | + | id_answer_editor_0 | Correct answer | + | id_response_editor_0 | Good | + | id_jumpto_0 | Cluster | + | id_score_0 | 1 | + | id_answer_editor_1 | Incorrect answer | + | id_response_editor_1 | Bad | + | id_jumpto_1 | This page | + | id_score_1 | 0 | + And I press "Save page" + And I click on "Add a question page here" "link" in the "//div[contains(concat(' ', normalize-space(@class), ' '), ' addlinks ')][4]" "xpath_element" + And I set the field "Select a question type" to "Multichoice" + And I press "Add a question page" + And I set the following fields to these values: + | Page title | question 2 | + | Page contents | Question from cluster | + | id_answer_editor_0 | Correct answer | + | id_response_editor_0 | Good | + | id_jumpto_0 | Cluster | + | id_score_0 | 1 | + | id_answer_editor_1 | Incorrect answer | + | id_response_editor_1 | Bad | + | id_jumpto_1 | This page | + | id_score_1 | 0 | + And I press "Save page" + And I click on "Add a content page" "link" in the "//div[contains(concat(' ', normalize-space(@class), ' '), ' addlinks ')][5]" "xpath_element" + And I set the following fields to these values: + | Page title | Second page name | + | Page contents | This page mark the the beginning of the subcluster it should not be seen by students | + | id_answer_editor_0 | Next page | + | id_jumpto_0 | Next page | + And I press "Save page" + And I click on "Add a question page here" "link" in the "//div[contains(concat(' ', normalize-space(@class), ' '), ' addlinks ')][6]" "xpath_element" + And I set the field "Select a question type" to "Multichoice" + And I press "Add a question page" + And I set the following fields to these values: + | Page title | question 3 | + | Page contents | Question from cluster | + | id_answer_editor_0 | Correct answer | + | id_response_editor_0 | Good | + | id_jumpto_0 | Cluster | + | id_score_0 | 1 | + | id_answer_editor_1 | Incorrect answer | + | id_response_editor_1 | Bad | + | id_jumpto_1 | This page | + | id_score_1 | 0 | + And I press "Save page" + And I click on "Add a question page here" "link" in the "//div[contains(concat(' ', normalize-space(@class), ' '), ' addlinks ')][7]" "xpath_element" + And I set the field "Select a question type" to "Multichoice" + And I press "Add a question page" + And I set the following fields to these values: + | Page title | question 4 | + | Page contents | Question from cluster | + | id_answer_editor_0 | Correct answer | + | id_response_editor_0 | Good | + | id_jumpto_0 | Cluster | + | id_score_0 | 1 | + | id_answer_editor_1 | Incorrect answer | + | id_response_editor_1 | Bad | + | id_jumpto_1 | This page | + | id_score_1 | 0 | + And I press "Save page" + And I click on "Add a question page here" "link" in the "//div[contains(concat(' ', normalize-space(@class), ' '), ' addlinks ')][8]" "xpath_element" + And I set the field "Select a question type" to "Multichoice" + And I press "Add a question page" + And I set the following fields to these values: + | Page title | question 5 | + | Page contents | Question from cluster | + | id_answer_editor_0 | Correct answer | + | id_response_editor_0 | Good | + | id_jumpto_0 | Cluster | + | id_score_0 | 1 | + | id_answer_editor_1 | Incorrect answer | + | id_response_editor_1 | Bad | + | id_jumpto_1 | This page | + | id_score_1 | 0 | + And I press "Save page" + And I click on "Add an end of branch" "link" in the "//div[contains(concat(' ', normalize-space(@class), ' '), ' addlinks ')][9]" "xpath_element" + And I click on "Add a question page here" "link" in the "//div[contains(concat(' ', normalize-space(@class), ' '), ' addlinks ')][10]" "xpath_element" + And I set the field "Select a question type" to "Multichoice" + And I press "Add a question page" + And I set the following fields to these values: + | Page title | question 6 | + | Page contents | Question from cluster | + | id_answer_editor_0 | Correct answer | + | id_response_editor_0 | Good | + | id_jumpto_0 | Cluster | + | id_score_0 | 1 | + | id_answer_editor_1 | Incorrect answer | + | id_response_editor_1 | Bad | + | id_jumpto_1 | This page | + | id_score_1 | 0 | + And I press "Save page" + And I click on "Add an end of cluster" "link" in the "//div[contains(concat(' ', normalize-space(@class), ' '), ' addlinks ')][11]" "xpath_element" + And I click on "Add a content page" "link" in the "//div[contains(concat(' ', normalize-space(@class), ' '), ' addlinks ')][12]" "xpath_element" + And I set the following fields to these values: + | Page title | Third page name | + | Page contents | Content page after cluster | + | id_answer_editor_0 | Next page | + | id_jumpto_0 | Next page | + And I press "Save page" + And I log out + And I log in as "student1" + And I follow "Course 1" + When I follow "Lesson with subcluster" + Then I should see "First page contents" + And I press "Next page" + And I should see "Question from cluster" + And I set the following fields to these values: + | Correct answer | 1 | + And I press "Submit" + And I should see "Good" + And I press "Continue" + And I should see "Question from cluster" + And I set the following fields to these values: + | Correct answer | 1 | + And I press "Submit" + And I should see "Good" + And I press "Continue" + And I should see "Question from cluster" + And I set the following fields to these values: + | Correct answer | 1 | + And I press "Submit" + And I should see "Good" + And I press "Continue" + And I should see "Question from cluster" + And I set the following fields to these values: + | Correct answer | 1 | + And I press "Submit" + And I should see "Good" + And I press "Continue" + And I should see "Content page after cluster" + And I press "Next page" + And I should see "Congratulations - end of lesson reached" + And I should see "Your score is 4 (out of 4)."