You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Moodle3.11批量同步Cohort到课程的PHP脚本求助(PHP7.4)

Moodle 3.11 批量关联Cohort到课程的PHP脚本修复

原脚本的核心问题是调用了错误的方法:sync_cohort()仅用于同步已关联课程的Cohort用户,而非建立Cohort与课程的关联。要完成关联操作,需先为课程创建Cohort enrolment实例,再绑定Cohort到该实例。以下是修复后的完整脚本:

<?php
define('CLI_SCRIPT', true);

require_once('/var/www/moodle/config.php');
require_once($CFG->dirroot . '/lib/clilib.php');
require_once($CFG->dirroot . '/cohort/lib.php');
require_once($CFG->dirroot . '/enrol/cohort/lib.php');
require_once($CFG->dirroot . '/enrol/lib.php');

// 配置参数
$courseId = 205;
$cohortId = 167;
$roleId = 5; // 默认学生角色ID,可根据需求修改

// 验证课程和Cohort是否存在
$course = get_course($courseId);
if (!$course) {
    cli_error("课程ID {$courseId} 不存在");
}

$cohort = cohort_get_cohort($cohortId);
if (!$cohort) {
    cli_error("Cohort ID {$cohortId} 不存在");
}

$courseContext = context_course::instance($courseId);

// 确保课程启用了Cohort enrol插件
$pluginEnabled = enrol_is_enabled('cohort');
if (!$pluginEnabled) {
    cli_error("Cohort enrolment插件未全局启用");
}

$instanceEnabled = enrol_get_instances($courseId, true)['cohort'] ?? false;
if (!$instanceEnabled) {
    // 创建Cohort enrol实例
    $enrolPlugin = enrol_get_plugin('cohort');
    $enrolPlugin->add_instance($course, [
        'name' => 'Cohort同步',
        'status' => ENROL_INSTANCE_ENABLED,
    ]);
}

// 获取课程的Cohort enrol实例
$instances = enrol_get_instances($courseId, true);
$cohortInstance = null;
foreach ($instances as $instance) {
    if ($instance->enrol == 'cohort') {
        $cohortInstance = $instance;
        break;
    }
}

if (!$cohortInstance) {
    cli_error("无法获取或创建课程的Cohort enrol实例");
}

// 关联Cohort到课程的enrol实例
$enrolPlugin = enrol_get_plugin('cohort');
try {
    $enrolPlugin->add_cohort($cohortInstance, $cohort, $roleId);
    echo "Cohort ID {$cohortId} 已成功关联到课程 ID {$courseId}\n";

    // 可选:立即同步Cohort中的用户到课程
    $enrolPlugin->sync_cohort($cohortInstance->id, $cohortId);
    echo "已同步Cohort用户到课程\n";
} catch (Exception $e) {
    cli_error("关联失败:" . $e->getMessage());
}

关键说明:

  1. 参数配置:修改$courseId、$cohortId和$roleId为实际需要的值(角色ID可在Moodle后台“站点管理→用户→角色”中查看)。
  2. 实例检查:脚本会自动检查课程是否启用了Cohort enrol插件,未启用则创建实例。
  3. 关联逻辑:通过add_cohort()方法将Cohort绑定到课程的enrol实例,这才是建立关联的核心操作。
  4. 同步用户:如果需要立即将Cohort中的用户同步到课程,保留sync_cohort()调用即可;若仅需建立关联(后续自动同步),可注释掉该部分。

内容的提问来源于stack exchange,提问作者Albert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 19:52:51