Merge branch 'MDL-48675' of git://github.com/jmvedrine/moodle

Conflicts:
	mod/lesson/upgrade.txt
This commit is contained in:
Dan Poltawski 2015-01-13 14:08:05 +00:00
commit 63cc7cfc61
6 changed files with 313 additions and 109 deletions

View File

@ -2243,45 +2243,77 @@ abstract class lesson_page extends lesson_base {
$properties->timemodified = time();
$properties = file_postupdate_standard_editor($properties, 'contents', array('noclean'=>true, 'maxfiles'=>EDITOR_UNLIMITED_FILES, 'maxbytes'=>$maxbytes), $context, 'mod_lesson', 'page_contents', $properties->id);
$DB->update_record("lesson_pages", $properties);
for ($i = 0; $i < $this->lesson->maxanswers; $i++) {
if (!array_key_exists($i, $this->answers)) {
$this->answers[$i] = new stdClass;
$this->answers[$i]->lessonid = $this->lesson->id;
$this->answers[$i]->pageid = $this->id;
$this->answers[$i]->timecreated = $this->timecreated;
if ($this->type == self::TYPE_STRUCTURE && $this->get_typeid() != LESSON_PAGE_BRANCHTABLE) {
if (count($answers) > 1) {
$answer = array_shift($answers);
foreach ($answers as $a) {
$DB->delete_record('lesson_answers', array('id' => $a->id));
}
} else if (count($answers) == 1) {
$answer = array_shift($answers);
} else {
$answer = new stdClass;
$answer->lessonid = $properties->lessonid;
$answer->pageid = $properties->id;
$answer->timecreated = time();
}
if (!empty($properties->answer_editor[$i]) && is_array($properties->answer_editor[$i])) {
$this->answers[$i]->answer = $properties->answer_editor[$i]['text'];
$this->answers[$i]->answerformat = $properties->answer_editor[$i]['format'];
$answer->timemodified = time();
if (isset($properties->jumpto[0])) {
$answer->jumpto = $properties->jumpto[0];
}
if (!empty($properties->response_editor[$i]) && is_array($properties->response_editor[$i])) {
$this->answers[$i]->response = $properties->response_editor[$i]['text'];
$this->answers[$i]->responseformat = $properties->response_editor[$i]['format'];
if (isset($properties->score[0])) {
$answer->score = $properties->score[0];
}
// we don't need to check for isset here because properties called it's own isset method.
if ($this->answers[$i]->answer != '') {
if (isset($properties->jumpto[$i])) {
$this->answers[$i]->jumpto = $properties->jumpto[$i];
}
if ($this->lesson->custom && isset($properties->score[$i])) {
$this->answers[$i]->score = $properties->score[$i];
}
if (!isset($this->answers[$i]->id)) {
$this->answers[$i]->id = $DB->insert_record("lesson_answers", $this->answers[$i]);
} else {
$DB->update_record("lesson_answers", $this->answers[$i]->properties());
if (!empty($answer->id)) {
$DB->update_record("lesson_answers", $answer->properties());
} else {
$DB->insert_record("lesson_answers", $answer);
}
} else {
for ($i = 0; $i < $this->lesson->maxanswers; $i++) {
if (!array_key_exists($i, $this->answers)) {
$this->answers[$i] = new stdClass;
$this->answers[$i]->lessonid = $this->lesson->id;
$this->answers[$i]->pageid = $this->id;
$this->answers[$i]->timecreated = $this->timecreated;
}
// Save files in answers and responses.
$this->save_answers_files($context, $maxbytes, $this->answers[$i],
$properties->answer_editor[$i], $properties->response_editor[$i]);
if (!empty($properties->answer_editor[$i]) && is_array($properties->answer_editor[$i])) {
$this->answers[$i]->answer = $properties->answer_editor[$i]['text'];
$this->answers[$i]->answerformat = $properties->answer_editor[$i]['format'];
}
if (!empty($properties->response_editor[$i]) && is_array($properties->response_editor[$i])) {
$this->answers[$i]->response = $properties->response_editor[$i]['text'];
$this->answers[$i]->responseformat = $properties->response_editor[$i]['format'];
}
} else if (isset($this->answers[$i]->id)) {
$DB->delete_records('lesson_answers', array('id'=>$this->answers[$i]->id));
unset($this->answers[$i]);
if (isset($this->answers[$i]->answer) && $this->answers[$i]->answer != '') {
if (isset($properties->jumpto[$i])) {
$this->answers[$i]->jumpto = $properties->jumpto[$i];
}
if ($this->lesson->custom && isset($properties->score[$i])) {
$this->answers[$i]->score = $properties->score[$i];
}
if (!isset($this->answers[$i]->id)) {
$this->answers[$i]->id = $DB->insert_record("lesson_answers", $this->answers[$i]);
} else {
$DB->update_record("lesson_answers", $this->answers[$i]->properties());
}
// Save files in answers and responses.
if (isset($properties->response_editor[$i])) {
$this->save_answers_files($context, $maxbytes, $this->answers[$i],
$properties->answer_editor[$i], $properties->response_editor[$i]);
} else {
$this->save_answers_files($context, $maxbytes, $this->answers[$i],
$properties->answer_editor[$i]);
}
} else if (isset($this->answers[$i]->id)) {
$DB->delete_records('lesson_answers', array('id' => $this->answers[$i]->id));
unset($this->answers[$i]);
}
}
}
return true;

View File

@ -98,44 +98,7 @@ class lesson_page_type_endofbranch extends lesson_page {
public function get_grayout() {
return 1;
}
public function update($properties, $context = null, $maxbytes = null) {
global $DB, $PAGE;
$properties->id = $this->properties->id;
$properties->lessonid = $this->lesson->id;
if (empty($properties->qoption)) {
$properties->qoption = '0';
}
$properties->timemodified = time();
$properties = file_postupdate_standard_editor($properties, 'contents', array('noclean'=>true, 'maxfiles'=>EDITOR_UNLIMITED_FILES, 'maxbytes'=>$PAGE->course->maxbytes), context_module::instance($PAGE->cm->id), 'mod_lesson', 'page_contents', $properties->id);
$DB->update_record("lesson_pages", $properties);
$answers = $this->get_answers();
if (count($answers)>1) {
$answer = array_shift($answers);
foreach ($answers as $a) {
$DB->delete_record('lesson_answers', array('id'=>$a->id));
}
} else if (count($answers)==1) {
$answer = array_shift($answers);
} else {
$answer = new stdClass;
}
$answer->timemodified = time();
if (isset($properties->jumpto[0])) {
$answer->jumpto = $properties->jumpto[0];
}
if (isset($properties->score[0])) {
$answer->score = $properties->score[0];
}
if (!empty($answer->id)) {
$DB->update_record("lesson_answers", $answer->properties());
} else {
$DB->insert_record("lesson_answers", $answer);
}
return true;
}
public function add_page_link($previd) {
global $PAGE, $CFG;
if ($previd != 0) {

View File

@ -67,44 +67,7 @@ class lesson_page_type_endofcluster extends lesson_page {
public function get_grayout() {
return 1;
}
public function update($properties, $context = null, $maxbytes = null) {
global $DB, $PAGE;
$properties->id = $this->properties->id;
$properties->lessonid = $this->lesson->id;
if (empty($properties->qoption)) {
$properties->qoption = '0';
}
$properties->timemodified = time();
$properties = file_postupdate_standard_editor($properties, 'contents', array('noclean'=>true, 'maxfiles'=>EDITOR_UNLIMITED_FILES, 'maxbytes'=>$PAGE->course->maxbytes), context_module::instance($PAGE->cm->id), 'mod_lesson', 'page_contents', $properties->id);
$DB->update_record("lesson_pages", $properties);
$answers = $this->get_answers();
if (count($answers)>1) {
$answer = array_shift($answers);
foreach ($answers as $a) {
$DB->delete_record('lesson_answers', array('id'=>$a->id));
}
} else if (count($answers)==1) {
$answer = array_shift($answers);
} else {
$answer = new stdClass;
}
$answer->timemodified = time();
if (isset($properties->jumpto[0])) {
$answer->jumpto = $properties->jumpto[0];
}
if (isset($properties->score[0])) {
$answer->score = $properties->score[0];
}
if (!empty($answer->id)) {
$DB->update_record("lesson_answers", $answer->properties());
} else {
$DB->insert_record("lesson_answers", $answer);
}
return true;
}
public function override_next_page() {
global $DB;
$jump = $DB->get_field("lesson_answers", "jumpto", array("pageid" => $this->properties->id, "lessonid" => $this->lesson->id));

View File

@ -0,0 +1,113 @@
@mod @mod_lesson
Feature: In a lesson activity, teacher can edit a cluster page
In order to modify an existing lesson and change navigation
As a teacher
I need to edit cluster pages in the lesson
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
And I add a "Lesson" to section "1" and I fill the form with:
| Name | Lesson with cluster |
| Description | Test lesson description |
And I follow "Lesson with cluster"
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 an end of cluster" "link" in the "//div[contains(concat(' ', normalize-space(@class), ' '), ' addlinks ')][5]" "xpath_element"
And I click on "Add a content page" "link" in the "//div[contains(concat(' ', normalize-space(@class), ' '), ' addlinks ')][6]" "xpath_element"
And I set the following fields to these values:
| Page title | Second page name |
| Page contents | Content page after cluster |
| id_answer_editor_0 | Next page |
| id_jumpto_0 | Next page |
And I press "Save page"
@javascript
Scenario: Edit lesson cluster page
Given I click on "//th[normalize-space(.)='Cluster']/descendant::a[2]" "xpath_element"
When I set the following fields to these values:
| Page title | Modified name |
| Page contents | Modified contents |
And I press "Save page"
Then I should see "Modified name"
And I click on "//th[normalize-space(.)='Modified name']/descendant::a[2]" "xpath_element"
And I should see "Unseen question within a cluster"
And I press "Cancel"
And I click on "//th[normalize-space(.)='End of cluster']/descendant::a[2]" "xpath_element"
And I set the following fields to these values:
| Page title | Modified end |
| Page contents | Modified end contents |
| id_jumpto_0 | Second page name |
And I press "Save page"
And I should see "Modified end"
And I log out
And I log in as "student1"
And I follow "Course 1"
And I follow "Lesson with cluster"
And 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 "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 2 (out of 2)."

View File

@ -0,0 +1,129 @@
@mod @mod_lesson
Feature: In a lesson activity, teacher can edit lesson's pages
In order to modify an existing lesson
As a teacher
I need to edit pages in the lesson
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
And I add a "Lesson" to section "1" and I fill the form with:
| Name | Test lesson name |
| Description | Test lesson description |
And I follow "Test lesson name"
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 set the field "qtype" to "Add a content page"
And I set the following fields to these values:
| Page title | Second page name |
| Page contents | Second page contents |
| id_answer_editor_0 | Previous page |
| id_jumpto_0 | Previous page |
| id_answer_editor_1 | Next page |
| id_jumpto_1 | Next page |
And I press "Save page"
And I follow "Expanded"
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 "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 | End of lesson |
| id_score_0 | 1 |
| id_answer_editor_1 | 1 |
| id_response_editor_1 | Incorrect answer |
| id_jumpto_1 | Second page name |
| id_score_1 | 0 |
And I press "Save page"
@javascript
Scenario: Edit lesson content page
Given I click on "//th[normalize-space(.)='Second page name']/descendant::a[2]" "xpath_element"
When I set the following fields to these values:
| Page title | Modified second page |
| Page contents | Modified contents |
| id_answer_editor_0 | Forward |
| id_jumpto_0 |Next page |
| id_answer_editor_1 | Backward |
| id_jumpto_1 | Previous page |
And I press "Save page"
Then I should see "Modified second page"
And I should not see "Second page name"
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 "First page contents"
And I press "Next page"
And I should see "Modified contents"
And I should not see "Second page contents"
And I press "Backward"
And I should see "First page contents"
And I press "Next page"
And I should see "Modified contents"
And I press "Forward"
And I should see "1 + 1?"
And I set the following fields to these values:
| Your answer | 2 |
And I press "Submit"
And I should see "Correct answer"
And I should not see "Incorrect answer"
And I press "Continue"
And I should see "Congratulations - end of lesson reached"
And I should see "Your score is 1 (out of 1)."
@javascript
Scenario: Edit lesson question page
Given I click on "//th[normalize-space(.)='Hardest question ever']/descendant::a[2]" "xpath_element"
When I set the following fields to these values:
| Page title | New hardest question |
| Page contents | 1 + 2? |
| id_answer_editor_0 | 2 |
| id_response_editor_0 | Your answer is incorrect |
| id_jumpto_0 | End of lesson |
| id_score_0 | 0 |
| id_answer_editor_1 | 3 |
| id_response_editor_1 | Your answer is correct |
| id_jumpto_1 | End of lesson |
| id_score_1 | 1 |
And I press "Save page"
Then I should see "New hardest question"
And I should not see "Hardest question ever"
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 "First page contents"
And I press "Next page"
And I should see "Second page contents"
And I press "Next page"
And I should see "1 + 2?"
And I should not see "1 + 1?"
And I set the following fields to these values:
| Your answer | 3 |
And I press "Submit"
And I should see "Your answer is correct"
And I should not see "Incorrect answer"
And I press "Continue"
And I should see "Congratulations - end of lesson reached"
And I should see "Your score is 1 (out of 1)."

View File

@ -1,9 +1,13 @@
This files describes API changes in the lesson code.
=== 2.9 ===
The grade_item_delete function in mod/lesson/lib.php was removed because it was not doing anything and was never called.
A third optional boolean parameter $endreached was added to lesson::update_timer to indicate that end of lesson was reached. This is used by 'completionendreached' custom completion rule.
* The grade_item_delete function in mod/lesson/lib.php was removed because it was not doing anything and was never called.
* A third optional boolean parameter $endreached was added to lesson::update_timer to indicate that end of lesson was reached. This is used by 'completionendreached' custom completion rule.
* lesson_page_type_endofbranch::update in mod/lesson/pagetypes/endofbranch.php
and lesson_page_type_endofcluster::update in mod/lesson/pagetypes/endofcluster.php
have been removed, this is now handled by the base class: lesson_page::update in
locallib.php and the exact same code is executed (it is also executed by the
lesson_page_type_cluster class that previously had no update function).
=== Earlier changes ===