связь пользователя с курсом

связь пользователя с курсом

от Иван Сергеев -
Количество ответов: 11

Добрый день!

Подскажите, как в Moodle осуществляется связь между пользователем и курсами, которые ему доступны. Никак не могу найти в БД таблицу, которая отвечает за эту связь. Т.е. я предположил, что есть таблица, в которой информация какие курсы доступны пользователю, либо какие пользователи записаны на курс.

Сначала думал, что это m_course_display, но поэкспериментировав сообразил, что не то. Может, я просто не замечаю очевидного, что лежит под носом. С радостью позволю тыкнуть себя в него улыбаюсь

В ответ на Иван Сергеев

Re: связь пользователя с курсом

от Vadim Tabunshchik -
Изображение пользователя Developers

Таблица mdl_role_assignments содержит назначения ролей (roleid) пользователям (userid) в определенном контексте (contextid).

contextid связан с id таблицы mdl_context, поле instanceid которой связано с id таблицы mdl_course.

Т. е., приблизительно таким запросом можно узнать, кому назначена роль "Студент" и в каких курсах:

SELECT
r.name AS `РОЛЬ`,
cr.id AS `ID курса`,
cr.fullname AS `НАЗВАНИЕ КУРСА`,
u.lastname AS `ФАМИЛИЯ`,
u.firstname AS `ИМЯ`
FROM
mdl_user AS u,
mdl_role AS r,
mdl_role_assignments AS ra,
mdl_context AS cn,
mdl_course AS cr
WHERE ra.userid = u.id AND ra.roleid = r.id AND cn.id = ra.contextid AND cr.id = cn.instanceid AND
r.id = 5
ORDER BY
cr.shortname ASC,
u.lastname ASC

В ответ на Vadim Tabunshchik

Re: связь пользователя с курсом

от Иван Сергеев -

Спасибо! Это именно то, что нужно!

В ответ на Иван Сергеев

Re: связь пользователя с курсом

от Ильгизар Гайнутдинов -

А если какая-нибудь уже встроенная функция, которая даст данные пользователя (firstname, lastname) когда ей отдают $course->id и $role->id? 

 

В ответ на Ильгизар Гайнутдинов

Re: связь пользователя с курсом

от Vadim Tabunshchik -
Изображение пользователя Developers

Не совсем понятен вопрос, разве данные пользователя меняются в зависимости от courseid или roleid? улыбаюсь

По-моему, логин, ФИО у любого пользователя постоянны, не смотря на контекст системы показываю язык

В ответ на Vadim Tabunshchik

Re: связь пользователя с курсом

от Ильгизар Гайнутдинов -

Опишу на проблеме.

Студент открывает "Мои курсы" где светится блок course_overview (обзор курса), где отображены названия курсов и их "внутренности". Хотелось бы рядышком иметь ФИО препода, имя на руках только курс.id и роль.id=3 

В ответ на Ильгизар Гайнутдинов

Re: связь пользователя с курсом

от Vadim Tabunshchik -
Изображение пользователя Developers

Теперь понятнее улыбаюсь

Решение вопроса зависит от версии Мудл. В старых версиях (до 1.9.х включительно) была функция isteacher, в новых - перешли на определение разрешений, т. е. нужно "выкручиваться" через has_capability (или писáть свою функцию).

В ответ на Vadim Tabunshchik

Re: связь пользователя с курсом

от Ильгизар Гайнутдинов -

версия 2.4

нарыл таоке coursecontact в Администрирование / Внешний вид / Курсы

он отображает ФИО пользователей выбранных ролей.

Думаю украсть код, но пока все безуспешно 

В ответ на Ильгизар Гайнутдинов

Re: связь пользователя с курсом

от Vadim Tabunshchik -
Изображение пользователя Developers

Думаю украсть код, но пока все безуспешно

Ну да, не всё так однозначно на первый взгляд. При выводе пользователя система сначала должна определиться, где она находится (узнать контекст), потом найти все назначения ролей в данном контексте, и только после этого найти пользователей с этими ролями.

В course/lib.php есть функция print_course, она выводит пользователя с ролью, указанной в параметре coursecontact на странице списка курсов в отдельной категории (ваш_сайт/course/category.php?id=х). Посмотрите код ниже комментария "/// first find all roles that are supposed to be displayed", это как раз вывод "контактных лиц" курса.

В ответ на Ильгизар Гайнутдинов

Re: связь пользователя с курсом

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

Ваша задача не имеет однозначного решения, поскольку в модели уже заложено то, что в одном курсе много людей могут быть преподавателями. Вам нужно решить, нужны ли вам все эти люди, или достаточно одного.

Кроме того, в moodle права наследуются, поэтому преподавателем в курсе может также являются те, кому роль преподавателя назначена во всех вышестоящих категориях. Если они тоже вам нужны, нужно проверять категории.

Если вам просто требуется узнать, кому назначена роль учителя в конкретном курсе достаточно сделать запрос к таблице mdl_role_assignments, предварительно получив id контектса по id курса. А оттуда по userid можете получить все его данные

Но взять фрагмент кода из coursecontacts наиболее правильноее решение.

В ответ на Vadim Dvorovenko

Re: связь пользователя с курсом

от Виктор Демчучен -

Добрый Вечер Всем!!! Подскажите пожалуста в чем может быть проблема?? "Moodle установлен на локалке, был перепад напряжения и после чего пропал журнал с пользователями и связь с курсами".Как можна исправить даную проблему?

В ответ на Виктор Демчучен

Re: связь пользователя с курсом

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle

Использовать простенький ИБП - очень хорошо помогает от кратковременных бросков напряжения.

Если есть свежий бекап, то восстановить из него.

Журнал лежит в базе. Посмотреть в логах нет ли ругани про базу, если есть то попробовать ее исправить. Как исправлять - зависит от того, какой используется сервер БД.