我正在开发一个Moodle Web服务插件。
我需要获取解压缩SCORM课程的文件夹,其中module_id
为输入参数。
类似的东西:
function get_root_folder_for_scorm_module($module_id){
global $USER;
$context = get_context_instance(CONTEXT_USER, $USER->id);
self::validate_context($context);
$fs = get_file_storage();
$manifest = $fs->get_file($context->id, 'mod_scorm', 'content', $module_id, '/', 'imsmanifest.xml');
return $manifest->get_filepath(); // Exception here. $manifest is null
}
这不会起作用,因为$manifest
是null
标准moodle webservice方法$module_id
core_course_get_contents
的位置
答案 0 :(得分:0)
scorm模块有许多不同的工作方式。据我所知,内容并不总是在本地提供,也不总是来自zip文件。
如果你知道你的软件包将在本地可用,那么你已经走上正轨,尽管传递给get_file
的参数似乎是错误的。
不看源,我可以说使用的上下文不正确。很可能存储文件的上下文将是模块上下文。此外,简要介绍scorm_pluginfile
中的scorm_get_file_info
和mod/scorm/lib.php
函数,似乎itemid
(您使用$module_id
的位置始终为0。
我建议您还查看scorm_parse
中的mod/scorm/locallib.php
,我们可以在这里找到:
$packagefile->extract_to_storage($packer, $context->id, 'mod_scorm', 'content', 0, '/');