我目前正在为Moodle编写一个问题类型插件。
我遇到的问题是,在复制课程(站点管理-〉课程-〉管理课程和类别-〉...)后,没有在$DB中创建第二个条目,错误如下:“在数据库表'...'中找不到数据记录"。
我的$DB在复制课程之前和之后。条目是在保存问题之后。
Database
Debug info: SELECT * FROM {qtype_aligator_options} WHERE questionid = ?
[array (
0 => '169',
)]
Error code: invalidrecord
Stack trace:
line 1599 of \lib\dml\moodle_database.php: dml_missing_record_exception thrown
line 1575 of \lib\dml\moodle_database.php: call to moodle_database->get_record_select()
line 23 of \question\type\aligator\questiontype.php: call to moodle_database->get_record()
line 913 of \lib\questionlib.php: call to qtype_aligator->get_question_options()
line 982 of \lib\questionlib.php: call to _tidy_question()
line 126 of \question\question.php: call to get_question_options()
通常在复制课程后应该有第二个条目,带有不同的questionid(i.E. 169)。(我想)。
我不确定我在哪里犯了错误。如果我没有完全错的话,$DB的保存是在questiontype.php中管理的,不是吗?
也许有人有耐心查看我的代码片段,或者给予我一些输入,这可能是这个错误的问题。我个人认为我在保存_question_options中做错了什么。
问题类型.php
public function get_question_options($question)
{
global $DB;
$question->options = $DB->get_record(
'qtype_aligator_options',
array('questionid' => $question->id),
'*',
MUST_EXIST
);
parent::get_question_options($question);
}
public function save_question_options($formdata)
{
global $DB;
$options = $DB->get_record('qtype_aligator_options', array('questionid' => $formdata->id));
if (!$options) {
$options = new stdClass();
$options->questionid = $formdata->id;
$options->id = $DB->insert_record('qtype_aligator_options', $options);
}
$options->custom_input = $formdata->custom_input;
$options->wkz = $formdata->wkz;
$DB->update_record('qtype_aligator_options', $options);
}
protected function initialise_question_instance(question_definition $question, $questiondata)
{
parent::initialise_question_instance($question, $questiondata);
$question->custom_input = $questiondata->options->custom_input;
$questiondata->formatwkz = $questiondata->options->formatwkz;
}
编辑表格.php
class qtype_aligator_edit_form extends question_edit_form
{
protected function definition_inner($mform)
{
$qtype = question_bank::get_qtype('aligator');
// Header
$mform->addElement('header', 'header_1', get_string('header_1', 'qtype_aligator'));
$mform->setExpanded('header_1');
// input field
$mform->addElement('text', 'custom_input', get_string('custom_input', 'qtype_aligator'));
$mform->setType('custom_input', PARAM_RAW);
// WKZ drop down
$wkz_options = array(
get_string('formateur', 'qtype_aligator'),
get_string('formatusd', 'qtype_aligator'),
);
$mform->addElement(
'select',
'wkz',
get_string('formatwkz', 'qtype_aligator'),
$wkz_options,
);
$mform->setDefault('wkz', get_config('qtype_aligator', 'formateur'));
}
public function data_preprocessing($question)
{
$question = parent::data_preprocessing($question);
if (empty($question->options)) {
return $question;
}
$question->custom_input = $question->options->custom_input;
$question->wkz = $question->options->wkz;
return $question;
}
public function qtype()
{
return 'aligator';
}
}
提前感谢!
另外,我使用的是bitnami moodle堆栈3.9.2
1条答案
按热度按时间9gm1akwq1#
感谢Russell England(https://stackoverflow.com/users/1603711/russell-england),我设法解决了这个问题。他完全正确地假设我缺少了backup/moodle2/backup.class.php和/restore. class. php
如果有人遇到同样的问题:我能够重用来自Moodle +的qtype_essay中的一些代码,修改了其中的一些部分。