diff --git a/mod/quiz/classes/structure.php b/mod/quiz/classes/structure.php index ba7f3a337fa..aae5c245ac4 100644 --- a/mod/quiz/classes/structure.php +++ b/mod/quiz/classes/structure.php @@ -715,7 +715,8 @@ class structure { } $followingslotnumber = $moveafterslotnumber + 1; - if ($followingslotnumber == $movingslotnumber) { + // Prevent checking against non-existance slot when already at the last slot. + if ($followingslotnumber == $movingslotnumber && !$this->is_last_slot_in_quiz($followingslotnumber)) { $followingslotnumber += 1; } diff --git a/mod/quiz/tests/structure_test.php b/mod/quiz/tests/structure_test.php index dd13daad623..9874635ee70 100644 --- a/mod/quiz/tests/structure_test.php +++ b/mod/quiz/tests/structure_test.php @@ -315,6 +315,24 @@ class mod_quiz_structure_testcase extends advanced_testcase { ), $structure); } + public function test_move_last_slot_to_previous_page_emptying_the_last_page() { + $quizobj = $this->create_test_quiz(array( + array('TF1', 1, 'truefalse'), + array('TF2', 2, 'truefalse'), + )); + $structure = \mod_quiz\structure::create_for_quiz($quizobj); + + $idtomove = $structure->get_question_in_slot(2)->slotid; + $idmoveafter = $structure->get_question_in_slot(1)->slotid; + $structure->move_slot($idtomove, $idmoveafter, '1'); + + $structure = \mod_quiz\structure::create_for_quiz($quizobj); + $this->assert_quiz_layout(array( + array('TF1', 1, 'truefalse'), + array('TF2', 1, 'truefalse'), + ), $structure); + } + public function test_end_of_one_section_to_start_of_next() { $quizobj = $this->create_test_quiz(array( array('TF1', 1, 'truefalse'),