首页 > 解决方案 > 在 Moodle 中以编程方式完成课程并设置成绩

问题描述

我是 Moodle 的新手,我正在开发一个旧应用程序,以下是规格:

$version  = 2016120502.05;             
$release  = '3.2.2+ (Build: 20170407)'; 
$branch   = '32';  

我的最终目标是能够创建一个生成器类来为一些 PHPUnit 单元测试创​​建虚拟数据。( https://docs.moodle.org/dev/Writing_PHPUnit_tests ) 我发现有一个用于创建课程和用户的预构建。但我还需要能够用他们的成绩标记他们在课程中完成。

我在看这个https://docs.moodle.org/dev/Gradebook_API可能至少是我需要的一部分。但是,系统中有很多表,我不确定这是我需要的。

这是我的代码,直到最后一点:

// Create user;
    $this->user = $this->getDataGenerator()->create_user();
    // Create courses.
    $courseCount = 0;
    $courses = [];
    while ($courseCount < 5) {
        $courses[] = $this->getDataGenerator()->create_course();
        $courseCount++;
    }
    /** @var \myGlobal_generator $generator */
    $generator = $this->getDataGenerator()->get_plugin_generator('myGlobal_generator');
    // Create curriculum.
    $this->curriculum = $generator->createCurriculum($courses);
    // Now we need to set a user to have completed each one 
    // of the courses and set their grades for each as well.

标签: phpunitmoodlemoodle-api

解决方案


请注意,评分和完成跟踪不一定是相关的事情。例如,您可以将活动和课程标记为已完成而不涉及任何评分,如下所示:

$cmassign = get_coursemodule_from_id('assign', $cmid);
$completion = new completion_info($course);
$completion->update_state($cmassign, COMPLETION_COMPLETE, $user->id);
$ccompletion = new completion_completion(['course' => $course->id, 'userid' => $user->id]);
$ccompletion->mark_complete();

如果您确实需要通过评分和基于成绩的完成来测试/生成数据,您可能需要按照以下方式对其进行编码:

  1. 创建启用完成跟踪的课程。
  2. 使用基于成绩的完成跟踪(自动完成跟踪,完成使用成绩为真)创建活动(将其添加到课程中)。
  3. 使用全局助手创建新的评分项目(与活动和用户相关)grade_update
  4. 计算活动的内部完成状态(例如使用公共方法$completion->internal_get_state
  5. 测试活动的状态(完成通过或完成失败)。

推荐阅读