mirror of
https://github.com/moodle/moodle.git
synced 2025-01-19 06:18:28 +01:00
Merge branch 'MDL-27865' of git://github.com/timhunt/moodle
This commit is contained in:
commit
3420de9f97
@ -188,64 +188,53 @@ class qtype_calculated extends question_type {
|
||||
if (isset($question->answer) && !isset($question->answers)) {
|
||||
$question->answers = $question->answer;
|
||||
}
|
||||
foreach ($question->answers as $key => $dataanswer) {
|
||||
if (is_array($dataanswer)) {
|
||||
$dataanswer = $dataanswer['text'];
|
||||
foreach ($question->answers as $key => $answerdata) {
|
||||
if (is_array($answerdata)) {
|
||||
$answerdata = $answerdata['text'];
|
||||
}
|
||||
if (trim($dataanswer) != '') {
|
||||
if (trim($answerdata) == '') {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Update an existing answer if possible.
|
||||
$answer = array_shift($oldanswers);
|
||||
if (!$answer) {
|
||||
$answer = new stdClass();
|
||||
$answer->question = $question->id;
|
||||
$answer->answer = trim($dataanswer);
|
||||
$answer->fraction = $question->fraction[$key];
|
||||
$answer->feedbackformat = $question->feedback[$key]['format'];
|
||||
if (isset($question->feedback[$key]['files'])) {
|
||||
$files = $question->feedback[$key]['files'];
|
||||
}
|
||||
$answer->answer = '';
|
||||
$answer->feedback = '';
|
||||
$answer->id = $DB->insert_record('question_answers', $answer);
|
||||
}
|
||||
|
||||
if ($oldanswer = array_shift($oldanswers)) { // Existing answer, so reuse it
|
||||
$answer->id = $oldanswer->id;
|
||||
$answer->feedback = file_save_draft_area_files(
|
||||
$question->feedback[$key]['itemid'], $context->id, 'question',
|
||||
'answerfeedback', $oldanswer->id, $this->fileoptionsa,
|
||||
trim($question->feedback[$key]['text']));
|
||||
$DB->update_record('question_answers', $answer);
|
||||
} else { // This is a completely new answer
|
||||
$answer->feedback = trim($question->feedback[$key]['text']);
|
||||
$answer->id = $DB->insert_record('question_answers', $answer);
|
||||
if (isset($files)) {
|
||||
foreach ($files as $file) {
|
||||
$this->import_file($context, 'question', 'answerfeedback',
|
||||
$answer->id, $file);
|
||||
}
|
||||
} else {
|
||||
$answer->feedback = file_save_draft_area_files(
|
||||
$question->feedback[$key]['itemid'], $context->id, 'question',
|
||||
'answerfeedback', $answer->id, $this->fileoptionsa ,
|
||||
trim($question->feedback[$key]['text']));
|
||||
}
|
||||
$DB->set_field('question_answers', 'feedback', $answer->feedback,
|
||||
array('id' => $answer->id));
|
||||
}
|
||||
$answer->answer = trim($answerdata);
|
||||
$answer->fraction = $question->fraction[$key];
|
||||
$answer->feedback = $this->import_or_save_files($question->feedback[$key],
|
||||
$context, 'question', 'answerfeedback', $answer->id);
|
||||
$answer->feedbackformat = $question->feedback[$key]['format'];
|
||||
|
||||
// Set up the options object
|
||||
if (!$options = array_shift($oldoptions)) {
|
||||
$options = new stdClass();
|
||||
}
|
||||
$options->question = $question->id;
|
||||
$options->answer = $answer->id;
|
||||
$options->tolerance = trim($question->tolerance[$key]);
|
||||
$options->tolerancetype = trim($question->tolerancetype[$key]);
|
||||
$options->correctanswerlength = trim($question->correctanswerlength[$key]);
|
||||
$options->correctanswerformat = trim($question->correctanswerformat[$key]);
|
||||
$DB->update_record("question_answers", $answer);
|
||||
|
||||
// Save options
|
||||
if (isset($options->id)) { // reusing existing record
|
||||
$DB->update_record('question_calculated', $options);
|
||||
} else { // new options
|
||||
$DB->insert_record('question_calculated', $options);
|
||||
}
|
||||
// Set up the options object
|
||||
if (!$options = array_shift($oldoptions)) {
|
||||
$options = new stdClass();
|
||||
}
|
||||
$options->question = $question->id;
|
||||
$options->answer = $answer->id;
|
||||
$options->tolerance = trim($question->tolerance[$key]);
|
||||
$options->tolerancetype = trim($question->tolerancetype[$key]);
|
||||
$options->correctanswerlength = trim($question->correctanswerlength[$key]);
|
||||
$options->correctanswerformat = trim($question->correctanswerformat[$key]);
|
||||
|
||||
// Save options
|
||||
if (isset($options->id)) {
|
||||
// reusing existing record
|
||||
$DB->update_record('question_calculated', $options);
|
||||
} else {
|
||||
// new options
|
||||
$DB->insert_record('question_calculated', $options);
|
||||
}
|
||||
}
|
||||
|
||||
// delete old answer records
|
||||
if (!empty($oldanswers)) {
|
||||
foreach ($oldanswers as $oa) {
|
||||
@ -1268,7 +1257,8 @@ class qtype_calculated extends question_type {
|
||||
global $CFG;
|
||||
$sql = "SELECT i.*
|
||||
FROM {question_datasets} d, {question_dataset_definitions} i
|
||||
WHERE d.question = ? AND d.datasetdefinition = i.id";
|
||||
WHERE d.question = ? AND d.datasetdefinition = i.id
|
||||
ORDER BY i.id";
|
||||
if ($records = $DB->get_records_sql($sql, array($questionid))) {
|
||||
foreach ($records as $r) {
|
||||
$datasetdefs["$r->type-$r->category-$r->name"] = $r;
|
||||
|
@ -45,55 +45,31 @@ class qtype_calculatedmulti extends qtype_calculated {
|
||||
public function save_question_options($question) {
|
||||
global $CFG, $DB;
|
||||
$context = $question->context;
|
||||
if (isset($question->answer) && !isset($question->answers)) {
|
||||
$question->answers = $question->answer;
|
||||
}
|
||||
// calculated options
|
||||
|
||||
// Calculated options
|
||||
$update = true;
|
||||
$options = $DB->get_record('question_calculated_options',
|
||||
array('question' => $question->id));
|
||||
if (!$options) {
|
||||
$update = false;
|
||||
$options = new stdClass();
|
||||
$options->question = $question->id;
|
||||
$options->correctfeedback = '';
|
||||
$options->partiallycorrectfeedback = '';
|
||||
$options->incorrectfeedback = '';
|
||||
$options->id = $DB->insert_record('question_calculated_options', $options);
|
||||
}
|
||||
$options->synchronize = $question->synchronize;
|
||||
$options->single = $question->single;
|
||||
$options->answernumbering = $question->answernumbering;
|
||||
$options->shuffleanswers = $question->shuffleanswers;
|
||||
|
||||
// save question feedback files
|
||||
foreach (array('correct', 'partiallycorrect', 'incorrect') as $feedbacktype) {
|
||||
$feedbackname = $feedbacktype . 'feedback';
|
||||
$feedbackformat = $feedbackname . 'format';
|
||||
$feedback = $question->$feedbackname;
|
||||
$options->$feedbackformat = $feedback['format'];
|
||||
if (isset($feedback['files'])) {
|
||||
$options->$feedbackname = trim($feedback['text']);
|
||||
$files = $feedback['files'];
|
||||
foreach ($files as $file) {
|
||||
$this->import_file($question->context, 'qtype_calculatedmulti',
|
||||
$feedbackname, $question->id, $file);
|
||||
}
|
||||
} else {
|
||||
$options->$feedbackname = file_save_draft_area_files($feedback['itemid'],
|
||||
$context->id, 'qtype_calculatedmulti', $feedbackname,
|
||||
$question->id, $this->fileoptionsa, trim($feedback['text']));
|
||||
}
|
||||
}
|
||||
|
||||
if ($update) {
|
||||
$DB->update_record('question_calculated_options', $options);
|
||||
} else {
|
||||
$DB->insert_record('question_calculated_options', $options);
|
||||
}
|
||||
$options = $this->save_combined_feedback_helper($options, $question, $context, true);
|
||||
$DB->update_record('question_calculated_options', $options);
|
||||
|
||||
// Get old versions of the objects
|
||||
if (!$oldanswers = $DB->get_records('question_answers',
|
||||
array('question' => $question->id), 'id ASC')) {
|
||||
$oldanswers = array();
|
||||
}
|
||||
|
||||
if (!$oldoptions = $DB->get_records('question_calculated',
|
||||
array('question' => $question->id), 'answer ASC')) {
|
||||
$oldoptions = array();
|
||||
@ -103,80 +79,76 @@ class qtype_calculatedmulti extends qtype_calculated {
|
||||
if (isset($question->answer) && !isset($question->answers)) {
|
||||
$question->answers = $question->answer;
|
||||
}
|
||||
foreach ($question->answers as $key => $dataanswer) {
|
||||
if (is_array($dataanswer)) {
|
||||
$dataanswer = $dataanswer['text'];
|
||||
foreach ($question->answers as $key => $answerdata) {
|
||||
if (is_array($answerdata)) {
|
||||
$answerdata = $answerdata['text'];
|
||||
}
|
||||
if (trim($dataanswer) != '') {
|
||||
if (trim($answerdata) == '') {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Update an existing answer if possible.
|
||||
$answer = array_shift($oldanswers);
|
||||
if (!$answer) {
|
||||
$answer = new stdClass();
|
||||
$answer->question = $question->id;
|
||||
$answer->answer = trim($dataanswer);
|
||||
$answer->fraction = $question->fraction[$key];
|
||||
$answer->feedback = trim($question->feedback[$key]['text']);
|
||||
$answer->feedbackformat = $question->feedback[$key]['format'];
|
||||
if (isset($question->feedback[$key]['files'])) {
|
||||
$files = $question->feedback[$key]['files'];
|
||||
}
|
||||
$answer->answer = '';
|
||||
$answer->feedback = '';
|
||||
$answer->id = $DB->insert_record('question_answers', $answer);
|
||||
}
|
||||
|
||||
if ($oldanswer = array_shift($oldanswers)) {
|
||||
// Existing answer, so reuse it
|
||||
$answer->id = $oldanswer->id;
|
||||
$answer->feedback = file_save_draft_area_files(
|
||||
$question->feedback[$key]['itemid'], $context->id, 'question',
|
||||
'answerfeedback', $answer->id, $this->fileoptionsa, $answer->feedback);
|
||||
$DB->update_record('question_answers', $answer);
|
||||
} else {
|
||||
// This is a completely new answer
|
||||
$answer->id = $DB->insert_record('question_answers', $answer);
|
||||
if (isset($files)) {
|
||||
$feedbacktext = $answer->feedback;
|
||||
foreach ($files as $file) {
|
||||
$this->import_file($context, 'question', 'answerfeedback',
|
||||
$answer->id, $file);
|
||||
}
|
||||
} else {
|
||||
$feedbacktext = file_save_draft_area_files(
|
||||
$question->feedback[$key]['itemid'], $context->id,
|
||||
'question', 'answerfeedback', $answer->id,
|
||||
$this->fileoptionsa, $answer->feedback);
|
||||
}
|
||||
$DB->set_field('question_answers', 'feedback', $feedbacktext,
|
||||
array('id'=>$answer->id));
|
||||
}
|
||||
if (is_array($answerdata)) {
|
||||
// Doing an import
|
||||
$answer->answer = $this->import_or_save_files($answerdata,
|
||||
$context, 'question', 'answer', $answer->id);
|
||||
$answer->answerformat = $answerdata['format'];
|
||||
} else {
|
||||
// Saving the form
|
||||
$answer->answer = $answerdata;
|
||||
$answer->answerformat = FORMAT_HTML;
|
||||
}
|
||||
$answer->fraction = $question->fraction[$key];
|
||||
$answer->feedback = $this->import_or_save_files($question->feedback[$key],
|
||||
$context, 'question', 'answerfeedback', $answer->id);
|
||||
$answer->feedbackformat = $question->feedback[$key]['format'];
|
||||
|
||||
// Set up the options object
|
||||
if (!$options = array_shift($oldoptions)) {
|
||||
$options = new stdClass();
|
||||
}
|
||||
$options->question = $question->id;
|
||||
$options->answer = $answer->id;
|
||||
$options->tolerance = trim($question->tolerance[$key]);
|
||||
$options->tolerancetype = trim($question->tolerancetype[$key]);
|
||||
$options->correctanswerlength = trim($question->correctanswerlength[$key]);
|
||||
$options->correctanswerformat = trim($question->correctanswerformat[$key]);
|
||||
$DB->update_record("question_answers", $answer);
|
||||
|
||||
// Save options
|
||||
if (isset($options->id)) { // reusing existing record
|
||||
$DB->update_record('question_calculated', $options);
|
||||
} else { // new options
|
||||
$DB->insert_record('question_calculated', $options);
|
||||
}
|
||||
// Set up the options object
|
||||
if (!$options = array_shift($oldoptions)) {
|
||||
$options = new stdClass();
|
||||
}
|
||||
$options->question = $question->id;
|
||||
$options->answer = $answer->id;
|
||||
$options->tolerance = trim($question->tolerance[$key]);
|
||||
$options->tolerancetype = trim($question->tolerancetype[$key]);
|
||||
$options->correctanswerlength = trim($question->correctanswerlength[$key]);
|
||||
$options->correctanswerformat = trim($question->correctanswerformat[$key]);
|
||||
|
||||
// Save options
|
||||
if (isset($options->id)) {
|
||||
// reusing existing record
|
||||
$DB->update_record('question_calculated', $options);
|
||||
} else {
|
||||
// new options
|
||||
$DB->insert_record('question_calculated', $options);
|
||||
}
|
||||
}
|
||||
|
||||
// delete old answer records
|
||||
if (!empty($oldanswers)) {
|
||||
foreach ($oldanswers as $oa) {
|
||||
$DB->delete_records('question_answers', array('id' => $oa->id));
|
||||
}
|
||||
}
|
||||
|
||||
// delete old answer records
|
||||
if (!empty($oldoptions)) {
|
||||
foreach ($oldoptions as $oo) {
|
||||
$DB->delete_records('question_calculated', array('id' => $oo->id));
|
||||
}
|
||||
}
|
||||
|
||||
$this->save_hints($question, true);
|
||||
|
||||
if (isset($question->import_process) && $question->import_process) {
|
||||
$this->import_datasets($question);
|
||||
}
|
||||
@ -185,8 +157,6 @@ class qtype_calculatedmulti extends qtype_calculated {
|
||||
return $result;
|
||||
}
|
||||
|
||||
$this->save_hints($question, true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -658,6 +658,10 @@ class qtype_calculatedsimple_edit_form extends qtype_calculated_edit_form {
|
||||
public function validation($data, $files) {
|
||||
$errors = parent::validation($data, $files);
|
||||
|
||||
if (empty($data['definition'])) {
|
||||
$errors['selectadd'] = get_string('youmustaddatleastonevalue', 'qtype_calculatedsimple');
|
||||
}
|
||||
|
||||
return $errors;
|
||||
}
|
||||
}
|
||||
|
@ -72,66 +72,53 @@ class qtype_calculatedsimple extends qtype_calculated {
|
||||
if (isset($question->answer) && !isset($question->answers)) {
|
||||
$question->answers = $question->answer;
|
||||
}
|
||||
foreach ($question->answers as $key => $dataanswer) {
|
||||
if (is_array($dataanswer)) {
|
||||
$dataanswer = $dataanswer['text'];
|
||||
foreach ($question->answers as $key => $answerdata) {
|
||||
if (is_array($answerdata)) {
|
||||
$answerdata = $answerdata['text'];
|
||||
}
|
||||
if (trim($dataanswer) != '') {
|
||||
if (trim($answerdata) == '') {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Update an existing answer if possible.
|
||||
$answer = array_shift($oldanswers);
|
||||
if (!$answer) {
|
||||
$answer = new stdClass();
|
||||
$answer->question = $question->id;
|
||||
$answer->answer = trim($dataanswer);
|
||||
$answer->fraction = $question->fraction[$key];
|
||||
$answer->feedbackformat = $question->feedback[$key]['format'];
|
||||
if (isset($question->feedback[$key]['files'])) {
|
||||
$files = $question->feedback[$key]['files'];
|
||||
}
|
||||
$answer->answer = '';
|
||||
$answer->feedback = '';
|
||||
$answer->id = $DB->insert_record('question_answers', $answer);
|
||||
}
|
||||
|
||||
if ($oldanswer = array_shift($oldanswers)) {
|
||||
// Existing answer, so reuse it
|
||||
$answer->id = $oldanswer->id;
|
||||
$answer->feedback = file_save_draft_area_files(
|
||||
$question->feedback[$key]['itemid'], $context->id, 'question',
|
||||
'answerfeedback', $answer->id, $this->fileoptionsa,
|
||||
trim($question->feedback[$key]['text']));
|
||||
$DB->update_record("question_answers", $answer);
|
||||
} else {
|
||||
// This is a completely new answer
|
||||
$answer->feedback = trim($question->feedback[$key]['text']);
|
||||
$answer->id = $DB->insert_record("question_answers", $answer);
|
||||
if (isset($files)) {
|
||||
foreach ($files as $file) {
|
||||
$this->import_file($context, 'question', 'answerfeedback',
|
||||
$answer->id, $file);
|
||||
}
|
||||
} else {
|
||||
$answer->feedback = file_save_draft_area_files(
|
||||
$question->feedback[$key]['itemid'], $context->id, 'question',
|
||||
'answerfeedback', $answer->id, $this->fileoptionsa,
|
||||
trim($question->feedback[$key]['text']));
|
||||
}
|
||||
$DB->set_field('question_answers', 'feedback', $answer->feedback,
|
||||
array('id'=>$answer->id));
|
||||
}
|
||||
$answer->answer = trim($answerdata);
|
||||
$answer->fraction = $question->fraction[$key];
|
||||
$answer->feedback = $this->import_or_save_files($question->feedback[$key],
|
||||
$context, 'question', 'answerfeedback', $answer->id);
|
||||
$answer->feedbackformat = $question->feedback[$key]['format'];
|
||||
|
||||
// Set up the options object
|
||||
if (!$options = array_shift($oldoptions)) {
|
||||
$options = new stdClass();
|
||||
}
|
||||
$options->question = $question->id;
|
||||
$options->answer = $answer->id;
|
||||
$options->tolerance = trim($question->tolerance[$key]);
|
||||
$options->tolerancetype = trim($question->tolerancetype[$key]);
|
||||
$options->correctanswerlength = trim($question->correctanswerlength[$key]);
|
||||
$options->correctanswerformat = trim($question->correctanswerformat[$key]);
|
||||
$DB->update_record("question_answers", $answer);
|
||||
|
||||
// Save options
|
||||
if (isset($options->id)) { // reusing existing record
|
||||
$DB->update_record('question_calculated', $options);
|
||||
} else { // new options
|
||||
$DB->insert_record('question_calculated', $options);
|
||||
}
|
||||
// Set up the options object
|
||||
if (!$options = array_shift($oldoptions)) {
|
||||
$options = new stdClass();
|
||||
}
|
||||
$options->question = $question->id;
|
||||
$options->answer = $answer->id;
|
||||
$options->tolerance = trim($question->tolerance[$key]);
|
||||
$options->tolerancetype = trim($question->tolerancetype[$key]);
|
||||
$options->correctanswerlength = trim($question->correctanswerlength[$key]);
|
||||
$options->correctanswerformat = trim($question->correctanswerformat[$key]);
|
||||
|
||||
// Save options
|
||||
if (isset($options->id)) {
|
||||
// reusing existing record
|
||||
$DB->update_record('question_calculated', $options);
|
||||
} else {
|
||||
// new options
|
||||
$DB->insert_record('question_calculated', $options);
|
||||
}
|
||||
}
|
||||
|
||||
// delete old answer records
|
||||
if (!empty($oldanswers)) {
|
||||
foreach ($oldanswers as $oa) {
|
||||
@ -146,7 +133,7 @@ class qtype_calculatedsimple extends qtype_calculated {
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($question->import_process)&&$question->import_process) {
|
||||
if (isset($question->import_process) && $question->import_process) {
|
||||
$this->import_datasets($question);
|
||||
} else {
|
||||
//save datasets and datatitems from form i.e in question
|
||||
@ -174,7 +161,7 @@ class qtype_calculatedsimple extends qtype_calculated {
|
||||
continue;
|
||||
}
|
||||
$datasetdef->id = $DB->insert_record('question_dataset_definitions', $datasetdef);
|
||||
$datasetdefs[]= clone($datasetdef);
|
||||
$datasetdefs[] = clone($datasetdef);
|
||||
$questiondataset = new stdClass();
|
||||
$questiondataset->question = $question->id;
|
||||
$questiondataset->datasetdefinition = $datasetdef->id;
|
||||
@ -225,10 +212,12 @@ class qtype_calculatedsimple extends qtype_calculated {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->save_hints($question);
|
||||
|
||||
// Report any problems.
|
||||
//convert to calculated
|
||||
if (!empty($question->makecopy) && !empty($question->convert)) {
|
||||
$DB->set_field('question', 'qtype', 'calculated', array('id'=> $question->id));
|
||||
$DB->set_field('question', 'qtype', 'calculated', array('id' => $question->id));
|
||||
}
|
||||
|
||||
$result = $virtualqtype->save_unit_options($question);
|
||||
@ -240,8 +229,6 @@ class qtype_calculatedsimple extends qtype_calculated {
|
||||
return $result;
|
||||
}
|
||||
|
||||
$this->save_hints($question);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -135,7 +135,7 @@ class qtype_multichoice extends question_type {
|
||||
|
||||
$this->save_hints($question, true);
|
||||
|
||||
/// Perform sanity checks on fractional grades
|
||||
// Perform sanity checks on fractional grades
|
||||
if ($options->single) {
|
||||
if ($maxfraction != 1) {
|
||||
$result->noticeyesno = get_string('fractionsnomax', 'qtype_multichoice',
|
||||
|
Loading…
x
Reference in New Issue
Block a user