以编程方式完成课程并在Moodle中设置等级

时间:2019-07-12 19:28:53

标签: phpunit moodle moodle-api

我是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.

1 个答案:

答案 0 :(得分:1)

请注意,评分和完成情况跟踪不一定是相关的。例如,您可以将活动和课程标记为已完成,而无需进行任何评分,例如:

$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. 使用基于成绩的完成情况跟踪(自动完成跟踪,完成情况使用成绩为true)创建活动(将其添加到课程中)。
  3. 使用全局帮助器grade_update创建新的评分项目(与活动和用户有关)。
  4. 计算活动的内部完成状态(例如,使用公共方法$completion->internal_get_state
  5. 测试活动状态(通过或失败完成)。