MDL-10899 - There is some data associated with some questons that needs to be udpated when moving questions between categories. This commit deals with subquestions, and lays the foundation for fixing the other problem - datasets - which is files as bug 14767.

This commit is contained in:
tjhunt 2008-05-09 15:05:36 +00:00
parent 08121fadcb
commit 7fb1b88dc7
5 changed files with 34 additions and 10 deletions

View File

@ -32,6 +32,7 @@ $string['editingquestion'] = 'Editing a question';
$string['erroraccessingcontext'] = 'Cannot access context';
$string['errorfilecannotbecopied'] = 'Error cannot copy file $a.';
$string['errorfilecannotbemoved'] = 'Error cannot move file $a.';
$string['errormovingquestions'] = 'Error while moving questions with ids $a.';
$string['errorfileschanged'] = 'Error files linked to from questions have changed since form was displayed.';
$string['exportcategory'] = 'Export category';
$string['filesareasite']= 'the site files area';

View File

@ -559,6 +559,30 @@ function question_delete_activity($cm, $feedback=true) {
}
return true;
}
/**
* This function should be considered private to the question bank, it is called from
* question/editlib.php question/contextmoveq.php and a few similar places to to the work of
* acutally moving questions and associated data. However, callers of this function also have to
* do other work, which is why you should not call this method directly from outside the questionbank.
*
* @param string $questionids a comma-separated list of question ids.
* @param integer $newcategory the id of the category to move to.
*/
function question_move_questions_to_category($questionids, $newcategory) {
$result = true;
// Move the questions themselves.
$result = $result && set_field_select('question', 'category', $newcategory, "id IN ($questionids)");
// Move any subquestions belonging to them.
$result = $result && set_field_select('question', 'category', $newcategory, "parent IN ($questionids)");
// TODO Deal with datasets.
return $result;
}
/**
* @param array $row tab objects
* @param question_edit_contexts $contexts object representing contexts available from this context

View File

@ -352,8 +352,9 @@ class question_category_object {
}
function move_questions($oldcat, $newcat){
if (!set_field('question', 'category', $newcat, 'category', $oldcat)) {
print_error("Error while moving questions from category '$oldcat' to '$newcat'", '', $this->pageurl->out());
$questionids = get_records_select_menu('question', "category = $oldcat AND parent = 0", '', 'id,1');
if (!question_move_questions_to_category(implode(',', array_keys($questionids)), $newcat)) {
print_error('errormovingquestions', 'question', $returnurl, $ids);
}
}

View File

@ -159,9 +159,10 @@ if ($contextmoveform->is_cancelled()){
}
}
//now move questions
if (!execute_sql("UPDATE {$CFG->prefix}question SET category = {$tocat->id} WHERE id IN ({$ids})", false)){
print_error("Could not move the questions {$ids} to category ".$tocat->name, '', $returnurl);
/// Now move questions.
if (!question_move_questions_to_category($ids, $tocat->id)) {
print_error('errormovingquestions', 'question', $returnurl, $ids);
}
redirect($returnurl);
}

View File

@ -447,11 +447,8 @@ function question_showbank_actions($pageurl, $cm){
}
$returnurl = $pageurl->out(false, array('category'=>"$tocategoryid,$contextid"));
if (!$checkforfiles){
foreach ($questionids as $questionid){
//move question
if (!set_field('question', 'category', $tocategory->id, 'id', $questionid)) {
error('Could not update category field');
}
if (!question_move_questions_to_category(implode(',', $questionids), $tocategory->id)) {
print_error('errormovingquestions', 'question', $returnurl, $questionids);
}
redirect($returnurl);
} else {