MDL-57696 mod_lesson: Remove redirects from API

In this commit I removed redirects that potentially could break the Web
Services layer.
Instead doing redirect inside APIs I return a special flag that is
properly checked.
This commit is contained in:
Juan Leyva 2017-03-06 17:59:41 +01:00
parent 61b51764b8
commit 8d6748380c
6 changed files with 26 additions and 7 deletions

View File

@ -69,8 +69,8 @@ $reviewmode = $lesson->is_in_review_mode();
// Process the page responses.
$result = $lesson->process_page_responses($page);
if ($result->nodefaultresponse) {
// Don't display feedback
if ($result->nodefaultresponse || $result->inmediatejump) {
// Don't display feedback or force a redirecto to newpageid.
redirect(new moodle_url('/mod/lesson/view.php', array('id'=>$cm->id,'pageid'=>$result->newpageid)));
}

View File

@ -2699,7 +2699,9 @@ class lesson extends lesson_base {
$result->nodefaultresponse = true;
}
if (isset($USER->modattempts[$lesson->id])) {
if ($result->inmediatejump) {
return $result;
} else if (isset($USER->modattempts[$this->properties->id])) {
// Make sure if the student is reviewing, that he/she sees the same pages/page path that he/she saw the first time.
if ($USER->modattempts[$lesson->id]->pageid == $page->id && $page->nextpageid == 0) {
// Remember, this session variable holds the pageid of the last page that the user saw.
@ -3228,6 +3230,11 @@ abstract class lesson_page extends lesson_base {
*/
$result = $this->check_answer();
// Processes inmediate jumps.
if ($result->inmediatejump) {
return $result;
}
$result->attemptsremaining = 0;
$result->maxattemptsreached = false;
@ -3743,6 +3750,7 @@ abstract class lesson_page extends lesson_base {
$result->userresponse = null;
$result->feedback = '';
$result->nodefaultresponse = false; // Flag for redirecting when default feedback is turned off
$result->inmediatejump = false; // Flag to detect when we should do a jump from the page without further processing.
return $result;
}

View File

@ -160,6 +160,8 @@ class lesson_page_type_branchtable extends lesson_page {
public function check_answer() {
global $USER, $DB, $PAGE, $CFG;
$result = parent::check_answer();
require_sesskey();
$newpageid = optional_param('jumpto', null, PARAM_INT);
// going to insert into lesson_branch
@ -210,7 +212,10 @@ class lesson_page_type_branchtable extends lesson_page {
$branch->nextpageid = $newpageid;
$DB->insert_record("lesson_branch", $branch);
redirect(new moodle_url('/mod/lesson/view.php', array('id' => $PAGE->cm->id, 'pageid' => $newpageid)));
// This will force to redirect to the newpageid.
$result->inmediatejump = true;
$result->newpageid = $newpageid;
return $result;
}
public function display_answers(html_table $table) {

View File

@ -120,7 +120,9 @@ class lesson_page_type_essay extends lesson_page {
require_sesskey();
if (!$data) {
redirect(new moodle_url('/mod/lesson/view.php', array('id'=>$PAGE->cm->id, 'pageid'=>$this->properties->id)));
$result->inmediatejump = true;
$result->newpageid = $this->properties->id;
return $result;
}
if (is_array($data->answer)) {

View File

@ -181,7 +181,9 @@ class lesson_page_type_matching extends lesson_page {
require_sesskey();
if (!$data) {
redirect(new moodle_url('/mod/lesson/view.php', array('id'=>$PAGE->cm->id, 'pageid'=>$this->properties->id)));
$result->inmediatejump = true;
$result->newpageid = $this->properties->id;
return $result;
}
$response = $data->response;

View File

@ -135,7 +135,9 @@ class lesson_page_type_multichoice extends lesson_page {
require_sesskey();
if (!$data) {
redirect(new moodle_url('/mod/lesson/view.php', array('id'=>$PAGE->cm->id, 'pageid'=>$this->properties->id)));
$result->inmediatejump = true;
$result->newpageid = $this->properties->id;
return $result;
}
if ($this->properties->qoption) {