mirrored from git://git.moodle.org/moodle.git
/
restore_qtype_randomsamatch_plugin.class.php
131 lines (113 loc) · 4.79 KB
/
restore_qtype_randomsamatch_plugin.class.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* @package moodlecore
* @subpackage backup-moodle2
* @copyright 2010 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* restore plugin class that provides the necessary information
* needed to restore one randomsamatch qtype plugin
*
* @copyright 2010 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class restore_qtype_randomsamatch_plugin extends restore_qtype_plugin {
/**
* Returns the paths to be handled by the plugin at question level
*/
protected function define_question_plugin_structure() {
$paths = array();
// Add own qtype stuff.
$elename = 'randomsamatch';
$elepath = $this->get_pathfor('/randomsamatch');
$paths[] = new restore_path_element($elename, $elepath);
return $paths; // And we return the interesting paths.
}
/**
* Process the qtype/randomsamatch element
*/
public function process_randomsamatch($data) {
global $DB;
$data = (object)$data;
$oldid = $data->id;
// Detect if the question is created or mapped.
$oldquestionid = $this->get_old_parentid('question');
$newquestionid = $this->get_new_parentid('question');
$questioncreated = $this->get_mappingid('question_created', $oldquestionid) ? true : false;
// If the question has been created by restore, we need to create its
// qtype_randomsamatch_options too.
if ($questioncreated) {
// Fill in some field that were added in 2.1, and so which may be missing
// from backups made in older versions of Moodle.
if (!isset($data->subcats)) {
$data->subcats = 1;
}
if (!isset($data->correctfeedback)) {
$data->correctfeedback = '';
$data->correctfeedbackformat = FORMAT_HTML;
}
if (!isset($data->partiallycorrectfeedback)) {
$data->partiallycorrectfeedback = '';
$data->partiallycorrectfeedbackformat = FORMAT_HTML;
}
if (!isset($data->incorrectfeedback)) {
$data->incorrectfeedback = '';
$data->incorrectfeedbackformat = FORMAT_HTML;
}
if (!isset($data->shownumcorrect)) {
$data->shownumcorrect = 0;
}
// Adjust some columns.
$data->questionid = $newquestionid;
// Insert record.
$newitemid = $DB->insert_record('qtype_randomsamatch_options', $data);
// Create mapping.
$this->set_mapping('qtype_randomsamatch_options', $oldid, $newitemid);
}
}
/**
* Given one question_states record, return the answer
* recoded pointing to all the restored stuff for randomsamatch questions
*
* answer is one comma separated list of hypen separated pairs
* containing question->id and question_answers->id
*/
public function recode_legacy_state_answer($state) {
$answer = $state->answer;
$resultarr = array();
foreach (explode(',', $answer) as $pair) {
$pairarr = explode('-', $pair);
$questionid = $pairarr[0];
$answerid = $pairarr[1];
$newquestionid = $questionid ? $this->get_mappingid('question', $questionid) : 0;
$newanswerid = $answerid ? $this->get_mappingid('question_answer', $answerid) : 0;
$resultarr[] = implode('-', array($newquestionid, $newanswerid));
}
return implode(',', $resultarr);
}
/**
* Return the contents of this qtype to be processed by the links decoder.
*/
public static function define_decode_contents() {
$contents = array();
$fields = array('correctfeedback', 'partiallycorrectfeedback', 'incorrectfeedback');
$contents[] = new restore_decode_content('qtype_randomsamatch_options', $fields, 'qtype_randomsamatch_options');
return $contents;
}
}