function has_wildcards_in_responses($question, $subqid) {
return false;
}
-
+
/**
* @return whether the question_answers.answer field needs to have
* restore_decode_content_links_worker called on it.
return null;
}
+ /**
+ * If you use extra_question_fields, overload this function to return question id field name
+ * in case you table use another name for this column
+ */
+ function questionid_column_name() {
+ return 'questionid';
+ }
+
/**
* If your question type has a table that extends the question_answers table,
* make this method return an array wherer the first element is the table name,
$question_extension_table = array_shift($extra_question_fields);
$function = 'update_record';
- $options = $DB->get_record($question_extension_table, array('questionid' => $question->id));
+ $questionidcolname = $this->questionid_column_name();
+ $options = $DB->get_record($question_extension_table, array($questionidcolname => $question->id));
if (!$options) {
$function = 'insert_record';
$options = new stdClass;
- $options->questionid = $question->id;
+ $options->$questionidcolname = $question->id;
}
foreach ($extra_question_fields as $field) {
if (!isset($question->$field)) {
$extra_question_fields = $this->extra_question_fields();
if (is_array($extra_question_fields)) {
$question_extension_table = array_shift($extra_question_fields);
- $extra_data = $DB->get_record($question_extension_table, array('questionid' => $question->id), '', implode(', ', $extra_question_fields));
+ $extra_data = $DB->get_record($question_extension_table, array($this->questionid_column_name() => $question->id), implode(', ', $extra_question_fields));
if ($extra_data) {
foreach ($extra_question_fields as $field) {
$question->options->$field = $extra_data->$field;
$extra_question_fields = $this->extra_question_fields();
if (is_array($extra_question_fields)) {
$question_extension_table = array_shift($extra_question_fields);
- $success = $success && $DB->delete_records($question_extension_table, array('questionid' => $questionid));
+ $success = $success && $DB->delete_records($question_extension_table,
+ array($this->questionid_column_name() => $questionid));
}
$extra_answer_fields = $this->extra_answer_fields();
return true;
}
- function get_question_options(&$question) {
- global $DB;
- // Get additional information from database
- // and attach it to the question object
- if (!$question->options = $DB->get_record('question_shortanswer', array('question' => $question->id))) {
- notify('Error: Missing question options!');
- return false;
- }
+ function extra_question_fields() {
+ return array('question_shortanswer','answers','usecase');
+ }
- if (!$question->options->answers = $DB->get_records('question_answers', array('question' => $question->id), 'id ASC')) {
- notify('Error: Missing question answers for shortanswer question ' . $question->id . '!');
- return false;
- }
- return true;
+ function questionid_column_name() {
+ return 'question';
}
function save_question_options($question) {
}
}
- if ($options = $DB->get_record("question_shortanswer", array("question" => $question->id))) {
- $options->answers = implode(",",$answers);
- $options->usecase = $question->usecase;
- if (!$DB->update_record("question_shortanswer", $options)) {
- $result->error = "Could not update quiz shortanswer options! (id=$options->id)";
- return $result;
- }
- } else {
- unset($options);
- $options->question = $question->id;
- $options->answers = implode(",",$answers);
- $options->usecase = $question->usecase;
- if (!$DB->insert_record("question_shortanswer", $options)) {
- $result->error = "Could not insert quiz shortanswer options!";
- return $result;
- }
+ $question->answers = implode(',', $answers);
+ $parentresult = parent::save_question_options($question);
+ if($parentresult !== null) { // Parent function returns null if all is OK
+ return $parentresult;
}
// delete old answer records
}
}
- /**
- * Deletes question from the question-type specific tables
- *
- * @return boolean Success/Failure
- * @param object $question The question being deleted
- */
- function delete_question($questionid) {
- global $DB;
- $DB->delete_records("question_shortanswer", array("question" => $questionid));
- return true;
- }
-
function print_question_formulation_and_controls(&$question, &$state, $cmoptions, $options) {
global $CFG;
/// This implementation is also used by question type 'numerical'