From 35c7dea6d201de9fd72ba5920119ffe09257e3af Mon Sep 17 00:00:00 2001 From: Jamie Pratt Date: Mon, 2 Apr 2012 16:33:09 +0700 Subject: [PATCH] MDL-47494 ddmarker: NOBUG added script needed for upgrading attempt data from imagetarget qs --- question/type/ddmarker/db/upgradelib.php | 85 ++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 question/type/ddmarker/db/upgradelib.php diff --git a/question/type/ddmarker/db/upgradelib.php b/question/type/ddmarker/db/upgradelib.php new file mode 100644 index 00000000000..2ab9118ddb7 --- /dev/null +++ b/question/type/ddmarker/db/upgradelib.php @@ -0,0 +1,85 @@ +. + +/** + * Upgrade library code for the ddmarker question type. This will only get triggered by the code + * to convert imagetarget questions to ddmarker. + * + * @package qtype + * @subpackage ddmarker + * @copyright 2012 Jamie Pratt + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + + +defined('MOODLE_INTERNAL') || die(); + + +/** + * Class for converting attempt data from imagetarget questions when converting + * attempts to the new question engine. + * + * This class is used by the code in question/engine/upgrade/upgradelib.php. + * + * @copyright 2010 The Open University + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class qtype_ddmarker_qe2_attempt_updater extends question_qtype_attempt_updater { + public function right_answer() { + $drag = reset($this->question->options->drags); + return '{'.get_string('dropzone', 'qtype_ddmarker', '1')." -> ".$drag->label.'}'; + } + + public function was_answered($state) { + return !empty($state->answer); + } + + public function response_summary($state) { + if (!empty($state->answer)) { + $drag = reset($this->question->options->drags); + foreach ($this->question->options->drops as $drop) { + list($xy, $wh) = explode(';', $drop->coords); + list($x, $y) = explode(',', $xy); + list($w, $h) = explode(',', $wh); + list($answerx, $answery) = explode(',', $state->answer); + if (($answerx >= $x && $answerx <= ($x + $w)) && ($answery >= $y && $answery <= ($y + $h))) { + return '{'.get_string('dropzone', 'qtype_ddmarker', $drop->no)." -> ".$drag->label.'}'; + } + } + return ''; + } else { + return null; + } + } + + public function question_summary() { + $drag = reset($this->question->options->drags); + return parent::question_summary().'[['.get_string('dropzone', 'qtype_ddmarker', '1')."]] -> {".$drag->label.'}'; + } + + public function set_first_step_data_elements($state, &$data) { + $data['_choiceorder1'] = '1'; + } + + public function supply_missing_first_step_data(&$data) { + } + + public function set_data_elements_for_step($state, &$data) { + if (!empty($state->answer)) { + $data['c1'] = $state->answer; + } + } +}