创建Moodle插件

时间:2016-06-02 08:34:56

标签: php moodle

我想控制用户在测试中做的操作(点击答案,完成测试等)?有可能吗?

我认为,对于这项任务需要创建插件吗?我对吗? 亲爱的社区,你能帮我一些材料 - 如何开发插件?也许可以推荐一些网站的文章?因为现在我不理解这个过程。

例如,我知道插件需要在Moodle中安装吗?但是在安装之前创建插件的地方?还在moodle吗?但是如何在Moodle插件中创建导出来安装包?

对我来说非常重要的问题 - 如何使用插件创建安装包,其他用户可以安装它。

对不起,很多问题,谢谢你的帮助。

1 个答案:

答案 0 :(得分:4)

这些是开发人员文档 - https://docs.moodle.org/dev/Main_Page

取决于您需要开发哪个插件 - https://docs.moodle.org/dev/Plugin_types

如果它是课程的一部分,那么您将需要开发一个活动模块 - https://docs.moodle.org/dev/Activity_modules

如果没有,那么您可能需要一个本地插件 - https://docs.moodle.org/dev/Local_plugins

更新:

使用本地插件并回复其中一个测验事件。

https://docs.moodle.org/dev/Event_2#Event_observers

这是一个概述:

创建本地插件 - https://docs.moodle.org/dev/Local_plugins

然后在local/yourpluginname/db/events/php中有类似

的内容
defined('MOODLE_INTERNAL') || die();

$observers = array(
    array(
        'eventname' => '\mod_quiz\event\attempt_submitted',
        'includefile' => '/local/yourpluginname/locallib.php',
        'callback' => 'local_yourpluginname_attempt_submitted',
        'internal' => false
     ),
);

当用户提交测验时,这将响应attempt_submitted事件。我猜这是你需要使用的事件。如果没有,那么这里有其他/mod/quiz/classes/event/

然后在/local/yourpluginname/locallib.php中有类似

的内容
/**
 * Handle the quiz_attempt_submitted event.
 *
 * @global moodle_database $DB
 * @param mod_quiz\event\attempt_submitted $event
 * @return boolean
 */
function local_yourpluginname_attempt_submitted(mod_quiz\event\attempt_submitted $event) {
    global $DB;

    $course  = $DB->get_record('course', array('id' => $event->courseid));
    $attempt = $event->get_record_snapshot('quiz_attempts', $event->objectid);
    $quiz    = $event->get_record_snapshot('quiz', $attempt->quiz);
    $cm      = get_coursemodule_from_id('quiz', $event->get_context()->instanceid, $event->courseid);

    if (!($course && $quiz && $cm && $attempt)) {
        // Something has been deleted since the event was raised. Therefore, the
        // event is no longer relevant.
        return true;
    }

    // Your code here to send the data to an external server.

    return true;
}

这应该让你开始。