/** * Installation code for the ddmarker question type. It converts all existing imagetarget questions to ddmarker */ function xmldb_qtype_ddmarker_install() { global $DB, $OUTPUT; $from = 'FROM {question_categories} cat, {question} q'; $where = ' WHERE q.qtype = \'imagetarget\' AND q.category = cat.id '; $sql = 'SELECT q.*, cat.contextid ' . $from . $where . 'ORDER BY cat.id, q.name'; $questions = $DB->get_records_sql($sql); if (!empty($questions)) { require_once dirname(__FILE__) . '/../lib.php'; $dragssql = 'SELECT drag.* ' . $from . ', {qtype_ddmarker_drags} drag' . $where . ' AND drag.questionid = q.id'; $drags = xmldb_qtype_ddmarker_index_array_of_records_by_key('questionid', $DB->get_records_sql($dragssql)); $dropssql = 'SELECT drp.* ' . $from . ', {qtype_ddmarker_drops} drp' . $where . ' AND drp.questionid = q.id'; $drops = xmldb_qtype_ddmarker_index_array_of_records_by_key('questionid', $DB->get_records_sql($dropssql)); $answerssql = 'SELECT answer.* ' . $from . ', {question_answers} answer' . $where . ' AND answer.question = q.id'; $answers = xmldb_qtype_ddmarker_index_array_of_records_by_key('question', $DB->get_records_sql($answerssql)); $imgfiles = $DB->get_records_sql_menu('SELECT question, qimage FROM {question_imagetarget}'); $progressbar = new progress_bar('qtype_ddmarker_convert_from_imagetarget'); $progressbar->create(); $done = 0; foreach ($questions as $question) { qtype_ddmarker_convert_image_target_question($question, $imgfiles[$question->id], $answers[$question->id]); $done++; $progressbar->update($done, count($questions), get_string('convertingimagetargetquestion', 'qtype_ddmarker', $question)); } list($qsql, $qparams) = $DB->get_in_or_equal(array_keys($questions)); $DB->delete_records_select('question_answers', 'question ' . $qsql, $qparams); $dbman = $DB->get_manager(); $dbman->drop_table(new xmldb_table('question_imagetarget')); } }
public function process($renderer) { qtype_ddmarker_convert_image_target_question($this->record, $this->imagetargetrecord->qimage, $this->answers); parent::process($renderer); //outputs progress message }