Выгрузка поля профиля пользователя в результатах теста

Выгрузка поля профиля пользователя в результатах теста

от Mihail Omelin -
Количество ответов: 6

Здравствуйте.

Прошу помощи вот с какой проблемой. Необходимо, чтобы в выгружаемых, например, в Excel, результатах теста была колонка со значением из поля профиля пользователя. Важно: речь идёт не о собственных полях Moodle, а о созданных локально через Администрирование --> Пользователи --> Учётные записи --> Поля профиля пользователя. С полями, входящими в состав ядра Moodle, такими как «Отчество», проблемы не существует, они вставляются легко: в файле \mod\quiz\report\attemptsreport.php в функцию 'protected function add_user_columns' добавил строки

            $columns[] = 'middlename';
            $headers[] = get_string('middlename');

- и в выгрузке появился столбец с отчествами.

А вот с полями, созданными в рамках конкретного сайта, такой способ не работает (точнее, столбец добавляется, но пустой, без значений, в заголовке - имя поля в двойных квадратных скобках).

Кто знает, не сочтите за труд, подскажите, пожалуйста, как добавить такое поле в выгружаемые результаты тестирования. Какой именно файл нужно отредактировать, что туда дописать?

Moodle 4.0.1.

В ответ на Mihail Omelin

Re: Выгрузка поля профиля пользователя в результатах теста

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle
IMHO такого функционала не предусмотрено.
Теоретически, используя блок configurable reports, такой функционал можно создать.
Оценки есть в таблице mdl_quiz_grade. Дополнительные поля пользователя находятся в таблице mdl_user_info_data, имена полей в mdl_user_info_field.
Проблема в том, что отчет можно привязать к курсу, а не к тесту.
Запрос примерно такой:

select q.name,ug.grade,u.email,ud.data as d1 , ud2.data as d2 from {quiz_grades} as ug
inner join {user} as u on u.id = ug.userid
inner join {quiz} as q on q.id = ug.quiz
left join {user_info_data} as ud on ud.userid = ug.userid and ud.fieldid = (select id from {user_info_field} where name='test22' )
left join {user_info_data} as ud2 on ud2.userid = ug.userid and ud2.fieldid = (select id from {user_info_field} where name='iprestrict' )
where q.course = %%COURSEID%%

отчет должен быть разрешен глобально. У меня есть 2 доп. поля: test22 и iprestrict.
В ответ на Mihail Omelin

Re: Выгрузка поля профиля пользователя в результатах теста

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

А вы как эти дополнительные поля называете? Доп поля профиля должны начинаться с 'profile_'

В ответ на Vadim Dvorovenko

Re: Выгрузка поля профиля пользователя в результатах теста

от Mihail Omelin -
Вадим, у меня поля начинались с префикса 'profile_field_', сейчас попробовал сделать, как посоветовали вы, с 'profile_' - безрезультатно.
В ответ на Vadim Dvorovenko

Re: Выгрузка поля профиля пользователя в результатах теста

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle
IMHO mod/quiz/report/attemptsreport.php не имеет такого функционала.
В отчет в курсе возможно умеет это.
В ответ на Виталий Лавров

Re: Выгрузка поля профиля пользователя в результатах теста

от Mihail Omelin -
Виталий, спасибо за возможный вариант решения проблемы. Но я, к стыду своему, не очень понимаю, где и как это делается...
И ещё один очень важный момент. Заметил, что некоторые поля профиля пользователя без проблем отображаются, даже ничего в mod/quiz/report/attemptsreport.php включать не требуется. Это, как я понял, зависит от типа поля. Обычное текстовое отображается по умолчанию, а вот поле, представляющее собой выпадающий список - ни в какую! У вас поле 'test22' какого типа?
В ответ на Mihail Omelin

Re: Выгрузка поля профиля пользователя в результатах теста

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

У меня нет 4.0.1. Если там что-то добавили, то мне не посмотреть.