Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Minor
-
Resolution: Fixed
-
Affects Version/s: 1.8.3
-
Fix Version/s: None
-
Component/s: Questions
-
Labels:None
-
Affected Branches:MOODLE_18_STABLE
Description
When saving the questions, it reuse the same subquestion without checking that the qtype has changed.
So if the first subquestion is a numerical one and in the modifed question this became a shortanswer the question_numerical database item always exist and refers to a question that is a shortanswer.
Unused subquestions are simply deleted by
// Delete redundant wrapped questions
if(is_array($oldwrappedids) && count($oldwrappedids)){
$oldwrappedids = implode(',', $oldwrappedids);
delete_records_select('question', "id IN ($oldwrappedids)");
}
the other database items are ignored...
As I am writing a new code for multiquestion i will solve this.
qtype question where not deleted when deleting unused questions or when the qtype change when using existing one.
here the diffs
— questiontype.php 6 Oct 2007 20:51:28 -0000 1.41
+++ questiontype.php 20 Nov 2007 03:12:44 -0000
@@ -74,6 +74,24 @@
// if we still have some old wrapped question ids, reuse the next of them
if ($oldwrappedid = array_shift($oldwrappedids)) {
$wrapped->id = $oldwrappedid;
+ //
+ $oldqtype = get_field('question', 'qtype', 'id',$oldwrappedid) ;
+ if($oldqtype != $wrapped->qtype ) {
+ echo "<p>oldqtype $oldqtype newqtype".$wrapped->qtype."</p>";
+ switch ($oldqtype) { + case 'multichoice': + delete_records('question_multichoice', 'question', $oldwrappedid); + break; + case 'shortanswer': + delete_records('question_shortanswer', 'question', $oldwrappedid); + break; + case 'numerical': + delete_records('question_numerical', 'question', $oldwrappedid); + break; + default: + error("questiontype $wrapped->qtype not recognized"); + }
+ }
}
$wrapped->name = $question->name;
$wrapped->parent = $question->id;
@@ -85,8 +103,9 @@
// Delete redundant wrapped questions
if(is_array($oldwrappedids) && count($oldwrappedids)){
+ foreach ($oldwrappedids as $id) { + delete_question($id) ; + }
}
if (!empty($sequence)) {
- $oldwrappedids = implode(',', $oldwrappedids);
- delete_records_select('question', "id IN ($oldwrappedids)");
+ foreach ($oldwrappedids as $id) {
+ delete_question($id) ;
+ }
}
if (!empty($sequence)) {