Moodle File API получает папку для модуля SCORM по идентификатору модуля

#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, '/');