phpmyadmin 复制Moodle课程(Qtype)后出错

ulmd4ohb  于 2022-11-09  发布在  PHP
关注(0)|答案(1)|浏览(200)

我目前正在为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

9gm1akwq

9gm1akwq1#

感谢Russell England(https://stackoverflow.com/users/1603711/russell-england),我设法解决了这个问题。他完全正确地假设我缺少了backup/moodle2/backup.class.php和/restore. class. php
如果有人遇到同样的问题:我能够重用来自Moodle +的qtype_essay中的一些代码,修改了其中的一些部分。

相关问题