ТЛ; др; Попытка получить экземпляр модуля курса через модуль курса через mysql или официальный API Moodle. Мое решение, в конце концов, кажется довольно неаккуратным, поэтому я хотел бы получить совет.
Привет Moodle люди
Я пытаюсь получить соответствующий экземпляр модуля курса для каждой строки в mdl_course_modules, экземпляр в этом контексте будет одной строкой из mdl_quiz, mdl_wiki или некоторого другого экземпляра course_modules.
Я попробовал несколько вещей, одна, которую я ожидал, была:
function get_all_course_modules($course_id) {
global $DB;
$course = $DB->get_record('course', array('id' => $course_id));
$mod_info = get_fast_modinfo($course);
}
Я не смог получить экземпляр модулей курса из $ mod_info.
Так что я попытался сделать несколько пользовательских MySQL вместо этого,
SELECT course.id, course.fullname, cm.course, cm.section, m.name
FROM mdl_course AS course
JOIN mdl_course_modules AS cm ON cm.course = course.id
JOIN mdl_modules AS m ON m.id = cm.module
JOIN CONCAT('mdl_', m.name) AS module_type ON ...somethingsomething
WHERE course.id = 2;
Sql еще не закончен, я наткнулся на тот факт, что я заранее не знаю всех различных модулей курса, это означает, что мне нужно динамически использовать имя модуля course_module, чтобы выбрать, к какой таблице экземпляров я хочу присоединиться, или просто LEFT JOIN на всех возможных таблицах экземпляров модулей курса, но это займет вечность и перестанет работать, если кто-то вставит новый экземпляр модуля курса.
Прямо сейчас я делаю следующее:
$result = array();
$course_mods = get_course_mods($course_id);
if($course_mods) {
foreach($course_mods as $course_mod) {
$DB->get_records_sql('some sql that selects the instance');
}
}
return $result;
Этот последний фрагмент кода в конечном итоге сработает, и я смогу динамически создавать запрос из переменных $ course_mod, таких как $ course_mod-> instance, $ course_mod-> mod_name и т. Д.
Но я думаю, что это кажется сложным. Кто-нибудь из вас, ребята, преуспел в получении экземпляра course_module более простым способом?
Спасибо!!
Это функция, которую я использовал для извлечения экземпляров модуля курса, она не такая красивая, но как угодно.
function get_all_course_modules($course_id) {
global $DB;
$course_mods = get_course_mods($course_id);
$result = array();
if($course_mods) {
foreach($course_mods as $course_mod) {
$course_mod->course_module_instance = $DB->get_record($course_mod->modname, array('id' =>$course_mod->instance ));
$result[$course_mod->id] = $course_mod;
}
}
return $result;
}
Других решений пока нет …