如何通过Moodle WebService复制课程并指定同步角色选课信息?
解决Moodle WebService复制课程时指定同步角色的问题
核心参数修正
你之前尝试的enrolments参数仅能控制是否复制全部选课数据,若要仅同步指定角色ID的选课信息,需使用rolestosync作为选项名,对应的value传入目标角色ID列表即可。
正确参数传递方式
在Moodle REST API中传递数组类型参数时,需按索引式格式构造:
- 在
options数组中新增元素,将name设为rolestosync,value按索引逐个传入角色ID。
修改后的bash脚本
更新你的脚本如下,添加rolestosync相关参数:
#!/bin/bash API="http://10.1.1.13/sm/webservice/rest/server.php" # WS入口点 COURSEID=25 # 待复制课程ID CATEGORYID=1 # 目标分类ID TOKEN="490b48f8cd71e88a37fa70cc6eff3fb2" # WS令牌 # 脚本执行逻辑 SUFFIX=`date +"%s"` echo "复制课程并同步指定角色用户数据" SHORTNAME="Duplicated${COURSEID}_${SUFFIX}" curl $API \ -d moodlewsrestformat=json \ -d wstoken=$TOKEN \ -d wsfunction=core_course_duplicate_course \ -d courseid=$COURSEID \ -d fullname="Duplicated $COURSEID (同步指定角色) - $SUFFIX" \ -d shortname="$SHORTNAME" \ -d categoryid=$CATEGORYID \ -d 'options[0][name]=users' \ -d 'options[0][value]=1' \ -d 'options[1][name]=rolestosync' \ -d 'options[1][value][0]=10' \ -d 'options[1][value][1]=11' echo
关键说明
rolestosync的作用:仅复制指定角色ID对应的用户选课数据到新课程- 数组传递细节:curl中无法直接传入数组字面量,必须用
options[1][value][0]、options[1][value][1]这种索引式写法逐个传递元素 - 依赖
users参数:需确保users选项设为1(开启用户数据复制),rolestosync才能生效
内容的提问来源于stack exchange,提问作者Madamadam
相关产品推荐
相关产品推荐

