#moodle #moodle-api
#moodle #moodle-api
Вопрос:
Я пытаюсь создать ограничения доступа к папке или ресурсу внутри раздела в курсе Moodle с помощью скрипта. Это ограничение должно быть для групп пользователей, и если вы не принадлежите к этой группе, вы не сможете видеть существующие ресурсы.
Программная операция, которую я хочу выполнить, заключается в следующем:
Я искал информацию, и документации очень мало, в документации указано только, как это сделать по веб-ссылке.
Я знаю, как создавать группы, папки и разделы программно из скрипта, но я не могу определить таблицы, которые будут использоваться для этих ограничений, или какие шаги необходимо выполнить.
Так что, если кто-нибудь знает, как это сделать, или у него есть какие-либо примеры или документация, которые могут быть полезны, это было бы полезно.
Заранее спасибо.
Ответ №1:
Классы, которые будут использоваться для создания пользовательского интерфейса и проверки того, имеет ли пользователь доступ к вашему ресурсу, расположены по адресу:
availability/condition/group/classes/condition.php
availability/condition/group/classes/frontend.php
Данные, относящиеся к условиям, форматируются в формате JSON из пользовательского интерфейса в Javascript, затем отправляются и сохраняются. Мое первое предположение заключается в том, что вам нужно воссоздать структуру JSON и сохранить ее в таблице / столбце course_modules::availability
. Как только это будет сделано, я думаю, вам придется очистить кеш, из cm_info
которого availability
используются данные, чтобы подтвердить, может ли текущий пользователь получить доступ к вашему ресурсу.
- update_moduleinfo — сохраняет отправленные данные формы модуля
- cm_info — проверяет, выполняются ли условия
Ответ №2:
Я последовал вашему совету @FMC и выполнил эту функцию в своем скрипте, который отвечает за предоставление разрешений группе для определенного раздела курса
и это код:
/**
* giving permits to a group for a particular section of a course
*
* @param $course course that contains the section to restrict access
* @param $sectionid id of the section to restrict access
* @param $groupid id of the group will have access
* @param $module id of the mdl_module to restrict access
*
*/
function grantPermission($course, $sectionid, $groupid, $module ){
global $DB;
$restriction = '{"op":"amp;","c":[{"type":"group","id":'. $groupid .'}],"showc":[true]}';
$cm= $DB->get_record('course_modules', array('course' => $course , 'section' => $sectionid, 'module' => $module ), '*', MUST_EXIST);
$course_module = new stdClass();
$course_module->id = $cm->id;
$course_module->course = $course;
$course_module->section = $sectionid;
$course_module->availability = $restriction;
$res = $DB->update_record('course_modules', $course_module);
if($res)
rebuild_course_cache($course, true);
return $res;
}
Можете ли вы проверить, действительно ли это то, что вы имели в виду @FMC? Это работает, но я не знаю, лучший ли это способ.
Спасибо!
Комментарии:
1. Да, хотя я бы предложил использовать
cm_info
для сохранения данных, если это возможно. Также вы заметили, что вы извлекаете случайный модуль из раздела в своем запросе?2. Вы правы, я забыл указать модуль в запросе, спасибо!
3. Я не знаю, как использовать cm_info, я немного новичок в создании сценариев без пользовательского интерфейса, и я не знаю, как их использовать, можете ли вы привести мне какой-нибудь пример? Спасибо
4. Мой плохой, похоже, это не
cm_info
может создать запрос на обновление для вас.5. Хорошо, спасибо за помощь!!