#php #moodle
#php #moodle
Вопрос:
Я разрабатываю плагин веб-службы Moodle. Мне нужно получить папку, в которой был разархивирован урок 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
Где $module_id
возвращается стандартным методом веб-сервиса moodle core_course_get_contents
Ответ №1:
Существует много разных способов работы модуля 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, '/');