mirror of
https://github.com/moodle/moodle.git
synced 2025-08-05 17:06:53 +02:00
MDL-65399 mod_quiz: remove_slot should update the existing info
The remove_slot method should update the remaining slot's slot attribute. It also should update the remaining slot's question number and section info.
This commit is contained in:
parent
8affd823a4
commit
a834294228
2 changed files with 30 additions and 0 deletions
|
@ -900,7 +900,9 @@ class structure {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove a slot from a quiz
|
* Remove a slot from a quiz
|
||||||
|
*
|
||||||
* @param int $slotnumber The number of the slot to be deleted.
|
* @param int $slotnumber The number of the slot to be deleted.
|
||||||
|
* @throws \coding_exception
|
||||||
*/
|
*/
|
||||||
public function remove_slot($slotnumber) {
|
public function remove_slot($slotnumber) {
|
||||||
global $DB;
|
global $DB;
|
||||||
|
@ -923,6 +925,9 @@ class structure {
|
||||||
for ($i = $slot->slot + 1; $i <= $maxslot; $i++) {
|
for ($i = $slot->slot + 1; $i <= $maxslot; $i++) {
|
||||||
$DB->set_field('quiz_slots', 'slot', $i - 1,
|
$DB->set_field('quiz_slots', 'slot', $i - 1,
|
||||||
array('quizid' => $this->get_quizid(), 'slot' => $i));
|
array('quizid' => $this->get_quizid(), 'slot' => $i));
|
||||||
|
$this->slotsinorder[$i]->slot = $i - 1;
|
||||||
|
$this->slotsinorder[$i - 1] = $this->slotsinorder[$i];
|
||||||
|
unset($this->slotsinorder[$i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$qtype = $DB->get_field('question', 'qtype', array('id' => $slot->questionid));
|
$qtype = $DB->get_field('question', 'qtype', array('id' => $slot->questionid));
|
||||||
|
@ -932,6 +937,13 @@ class structure {
|
||||||
}
|
}
|
||||||
|
|
||||||
quiz_update_section_firstslots($this->get_quizid(), -1, $slotnumber);
|
quiz_update_section_firstslots($this->get_quizid(), -1, $slotnumber);
|
||||||
|
foreach ($this->sections as $key => $section) {
|
||||||
|
if ($section->firstslot > $slotnumber) {
|
||||||
|
$this->sections[$key]->firstslot--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->populate_slots_with_sections();
|
||||||
|
$this->populate_question_numbers();
|
||||||
unset($this->questions[$slot->questionid]);
|
unset($this->questions[$slot->questionid]);
|
||||||
|
|
||||||
$this->refresh_page_numbers_and_update_db();
|
$this->refresh_page_numbers_and_update_db();
|
||||||
|
|
|
@ -720,6 +720,24 @@ class mod_quiz_structure_testcase extends advanced_testcase {
|
||||||
$this->assertFalse($DB->record_exists('question', array('id' => $randomq->id)));
|
$this->assertFalse($DB->record_exists('question', array('id' => $randomq->id)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unit test to make sue it is not possible to remove all slots in a section at once.
|
||||||
|
*
|
||||||
|
* @expectedException coding_exception
|
||||||
|
*/
|
||||||
|
public function test_cannot_remove_all_slots_in_a_section() {
|
||||||
|
$quizobj = $this->create_test_quiz(array(
|
||||||
|
array('TF1', 1, 'truefalse'),
|
||||||
|
array('TF2', 1, 'truefalse'),
|
||||||
|
'Heading 2',
|
||||||
|
array('TF3', 2, 'truefalse'),
|
||||||
|
));
|
||||||
|
$structure = \mod_quiz\structure::create_for_quiz($quizobj);
|
||||||
|
|
||||||
|
$structure->remove_slot(1);
|
||||||
|
$structure->remove_slot(2);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @expectedException coding_exception
|
* @expectedException coding_exception
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue