2016-10-13 6 views
0

Я разрабатываю плагин веб-сервиса Moodle. Мне нужно получить папку, в которой урок SCORM был распакован, имея module_id в качестве входного параметра.Moodle File API получить папку для модуля SCORM moduleid

что-то вроде:

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 методом WebService core_course_get_contents

ответ

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