Интеграция с Moodle
1. Настройка Moodle
Интеграция системы прокторинга ProctorEdu с Moodle осуществляется по стандарту IMS LTI. Поддерживаются версии Moodle 3.x и выше.
1.1 SSL-сертификат
На веб-сервере Moodle должен быть установлен валидный SSL-сертификат, чтобы страницы системы Moodle открывались по протоколу HTTPS. Проверить валидность сертификата на сервере можно с помощью сервиса SSLChecker.com. Это требование политики безопасности браузера, которая не позволяет получить доступ к камере и микрофону по незащищенному протоколу HTTP. Можно выпустить бесплатный SSL-сертификат Let’s Encrypt.
1.2 Версия Moodle
Начиная с версии Chrome 80 (касается всех браузеров на движке Chromium) ужесточается политика безопасности браузера SameSite и по умолчанию при открытии страницы в IFRAME файлы cookies не передаются. В связи с этим нужно, чтобы версия Moodle была не ниже 3.5.11, 3.6.9, 3.7.5, 3.8.2, т.к. начиная только с этих версий внесено соответствующее исправление MDL-67175. Уже настроенную сборку последней версии Moodle можно получить на странице ресурса Bitnami.
Если обновить версию Moodle нет возможности, то требуется добавить в файл ".htaccess" (в корневом каталоге Moodle на сервере) блок настроек, меняющих заголовки ответа веб-сервера через модуль mod_headers для Apache:
Если обновить версию Moodle нет возможности, то требуется добавить в файл ".htaccess" (в корневом каталоге Moodle на сервере) блок настроек, меняющих заголовки ответа веб-сервера через модуль mod_headers для Apache:
<!--.htaccess-->
<IfModule headers_module>
Header edit Set-Cookie (.*) "$1; Secure; SameSite=none"
</IfModule>
Модуль "headers" должен быть включен в Apache, для этого можно использовать команду "a2enmod headers".
1.3 Настройка сервера
Иногда при передаче оценки по прокторингу в Moodle через LTI Outcome Service может возникать ошибка "Message signature not valid" или "Missing or invalid consumer key or access token". Это ошибка является следствием неправильной настройки сервера.
Важно, чтобы время на сервере Moodle было выставлено правильно, иначе авторизация OAuth в LTI не будет работать.
Данная ошибка также может являться следствием отсутствия возможности прочитать заголовок "Authorization" в PHP. Чтобы это исправить, нужно добавить следующее правило в конфигурационный файл Apache в секцию , связанную с Moodle:
Важно, чтобы время на сервере Moodle было выставлено правильно, иначе авторизация OAuth в LTI не будет работать.
Данная ошибка также может являться следствием отсутствия возможности прочитать заголовок "Authorization" в PHP. Чтобы это исправить, нужно добавить следующее правило в конфигурационный файл Apache в секцию , связанную с Moodle:
<!--httpd.conf-->
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1Если это правило не сработало, то на форуме Moodle рекомендуют добавить в файл ".htaccess" (в корневом каталоге Moodle на сервере) следующее правило mod_rewrite для Apache:
<!--.htaccess-->
<IfModule rewrite_module>
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.+)
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>Модуль "rewrite" должен быть включен в Apache, для этого можно использовать команду "a2enmod rewrite". А директория Moodle должна поддерживать переопределение параметров из файла .htaccess:
<!--httpd.conf-->
<Directory />
AllowOverride All
Options FollowSymLinks
</Directory>
1.4 Разрешить внедрение во фрейм
Чтобы заработало отображение страницы Moodle во фрейме системы прокторинга, под пользователем с ролью "Администратор" нужно включить опцию "Администрирование" → "Основные" → "Безопасность" → "Безопасность HTTP" → "Разрешить внедрение во фрейм". А также необходимо включить опцию "Администрирование" → "Безопасность" → "Безопасность HTTP" → "Устанавливать поле «Secure»":
Если этот параметр не включен, то в IFRAME под прокторингом страница теста не сможет корректно отобразится.
1.5 Настроить внешний инструмент
В разделе "Администрирование" → "Плагины" → "Модули элементов курса" → "Внешний инструмент" → "Управление инструментами" нужно перейти по ссылке "настроить инструмент вручную". И там нужно указать следующие параметры:
Название инструмента:
➔Прокторинг
Базовый URL-адрес:
➔https://demo.proctoring.online/api/auth/lti
сервер demo.proctoring.online используется только в качестве примера, вместо него укажите адрес вашего сервера прокторинга
LTI version:
➔LTI 1.0/1.1
Ключ клиента:
➔demo
этот ключ для вашего сервере прокторинга выдается менеджером
Общий секретный ключ:
➔secret
этот ключ для вашего сервере прокторинга выдается менеджером
Показывать при создании элементов:
➔Показать в выборе элемента и как предварительно настроенный инструмент
Контейнер для запуска приложения по умолчанию:
➔Имеющееся окно
IMS LTI Assignment and Grade Services:
➔Использовать эту службу только для синхронизации оценок
➔Прокторинг
Базовый URL-адрес:
➔https://demo.proctoring.online/api/auth/lti
сервер demo.proctoring.online используется только в качестве примера, вместо него укажите адрес вашего сервера прокторинга
LTI version:
➔LTI 1.0/1.1
Ключ клиента:
➔demo
этот ключ для вашего сервере прокторинга выдается менеджером
Общий секретный ключ:
➔secret
этот ключ для вашего сервере прокторинга выдается менеджером
Показывать при создании элементов:
➔Показать в выборе элемента и как предварительно настроенный инструмент
Контейнер для запуска приложения по умолчанию:
➔Имеющееся окно
IMS LTI Assignment and Grade Services:
➔Использовать эту службу только для синхронизации оценок
1.6 Автоматическое завершение сеанса
Опционально можно настроить автоматическое завершение сеанса прокторинга при завершении тестового элемента в Moodle. По умолчанию завершение сеанса происходит по кнопке "Завершить" в верхней панели прокторинга (при включенном дополнении "finish") и не связано с завершением тестирования.
Для настройки автоматического завершения сеанса нужно добавить специальный JavaScript-сценарий на страницу Moodle, для этого в поле "Администрирование" → "Внешний вид" → "Дополнительный HTML" → "Перед закрывающим тегом BODY" нужно добавить следующий код:
Для настройки автоматического завершения сеанса нужно добавить специальный JavaScript-сценарий на страницу Moodle, для этого в поле "Администрирование" → "Внешний вид" → "Дополнительный HTML" → "Перед закрывающим тегом BODY" нужно добавить следующий код:
<!--HTML-->
<script src="//demo.proctoring.online/sdk/supervisor.js" data-supervisor="start"></script>
<script>
if (window.supervisor) {
supervisor.on('load', function (iframe) {
var pathname = iframe.contentWindow.location.pathname;
var search = iframe.contentWindow.location.search;
if (
(pathname === '/mod/quiz/review.php') ||
(pathname === '/mod/assign/view.php' && search.includes('action=view'))
) {
supervisor.stop()
.then(function () {
return supervisor.logout({ redirect: true });
})
.catch(function (err) {
alert(err.message);
location.href = '/';
});
}
});
}
</script>* demo.proctoring.online — домен вашего сервера прокторинга.
Также нужно изменить настройку внешнего инструмента, добавив параметр "redirect" в базовый URL-адрес, чтобы получилось следующее:
Также нужно изменить настройку внешнего инструмента, добавив параметр "redirect" в базовый URL-адрес, чтобы получилось следующее:
https://demo.proctoring.online/api/auth/lti?redirect=https://your-moodle-domain/где demo.proctoring.online — домен вашего сервера прокторинга, "your-moodle-domain" — домен вашего сервера Moodle.
Автоматическое завершение прокторинга будет происходить в момент открытия страницы просмотра попытки после завершения теста, эту страницу необходимо включить в настройках тестового элемента "Настройки просмотра" → "Сразу после попытки" → "Попытка".
Автоматическое завершение прокторинга будет происходить в момент открытия страницы просмотра попытки после завершения теста, эту страницу необходимо включить в настройках тестового элемента "Настройки просмотра" → "Сразу после попытки" → "Попытка".
Теперь после авторизации пользователь будет перенаправлен обратно на страницу Moodle, где запустится прокторинг и в IFRAME откроется связанный с прокторингом тестовый элемент. После завершения тестового элемента прокторинг тоже автоматически завершится.
2. Настройка элементов курса
2.1 Настроить тестовый элемент
В настройках самого теста в разделе "Дополнительные ограничения на попытки" → "Безопасность браузера" нужно выставить "None", иначе Moodle будет пытаться открыть тест в новом окне, а это поведение блокируется в IFRAME и участник не сможет увидеть тест.
2.2 Получить ссылку на тестовый элемент
Нужно найти в курсе тестовый элемент, нажать на нем правой кнопкой мыши и выбрать "Копировать адрес ссылки". Эта ссылка понадобится при настройке элемента прокторинга.
2.3 Добавить элемент прокторинга
Для каждого тестового элемента, к которому требуется подключить прокторинг, нужно добавить новый элемент "Прокторинг" (создается администратором в разделе 1.4). Для этого требуется роль "Управляющий" и включить режим редактирования. Добавить элемент прокторинга нужно в отдельную от тестового элемента тему, чтобы потом можно было бы скрыть тест с сохранением доступа к нему.
После выбора внешнего инструмента вас попросят ввести название элемента курса. Это название будет отображаться в Moodle и в протоколе прокторинга.
Далее нужно нажать "Сохранить и вернуться к курсу".
2.4 Настроить элемент прокторинга
Сконфигурировать элемент прокторинга, указав в поле "Пользовательские параметры" соответствующие параметры в формате КЛЮЧ=ЗНАЧЕНИЕ:
➔url=https://your-moodle-domain/mod/quiz/view.php?id=ID
Указывается ссылка на тестовый элемент (см. раздел 2.2), который система прокторинга откроет в IFRAME сразу после запуска сеанса (если не задан, то в IFRAME откроется страница курса, где размещен элемент прокторинга).
➔template=default
Указывается идентификатор шаблона (из поля "identifier"), который следует использовать при создании сеансов прокторинга (если не задан, то используется шаблон с идентификатором "default"). Настройки указанного шаблона используются при создании каждого индивидуального сеанса. Шаблон должен быть создан заранее в системе прокторинга под пользователем с ролью "Администратор".
➔members=@
Указывается список логинов прокторов (или группы пользователей) через запятую, а если указать символ "@", то перейдя по ссылке элемента прокторинга проктор получит доступ ко всем сеансам, которые были созданы и пройдены участниками по той же ссылке.
Через параметр "members" можно управлять назначением прокторов на сеансы тремя способами:
1.Параметр "members=@"
Пользователи Moodle с ролью "Учитель", которые прикреплены к курсу, смогут зайти в систему прокторинга как прокторы через данный внешний инструмент в курсе. Эти прокторы смогут наблюдать (или получить доступ к протоколам) только тех участников, которые начали сеанс прокторинга через тот же внешний инструмент в курсе.
2.Параметр "members=proctor1,proctor2,..."
Доступ к сеансам, начатым через данный внешний инструмент в курсе, будет предоставлен только прокторам с перечисленными логинами (через запятую указывается список логинов прокторов в системе прокторинга). Прокторы могут быть либо созданы через админку системы прокторинга, либо это могут быть пользователи Moodle с ролью "Учитель". Во втором случае логином проктора будет идентификатор пользователя в Moodle.
3.Параметр "members" не указан
Правила назначения прокторов на сеансы настраиваются в шаблоне сеанса через админку системы прокторинга. В этом случае можно либо указать список логинов прокторов на вкладке "Участники", либо определить правила назначения прокторов на сеансы из списка на вкладке "Приглашения".
➔url=https://your-moodle-domain/mod/quiz/view.php?id=ID
Указывается ссылка на тестовый элемент (см. раздел 2.2), который система прокторинга откроет в IFRAME сразу после запуска сеанса (если не задан, то в IFRAME откроется страница курса, где размещен элемент прокторинга).
➔template=default
Указывается идентификатор шаблона (из поля "identifier"), который следует использовать при создании сеансов прокторинга (если не задан, то используется шаблон с идентификатором "default"). Настройки указанного шаблона используются при создании каждого индивидуального сеанса. Шаблон должен быть создан заранее в системе прокторинга под пользователем с ролью "Администратор".
➔members=@
Указывается список логинов прокторов (или группы пользователей) через запятую, а если указать символ "@", то перейдя по ссылке элемента прокторинга проктор получит доступ ко всем сеансам, которые были созданы и пройдены участниками по той же ссылке.
Через параметр "members" можно управлять назначением прокторов на сеансы тремя способами:
1.Параметр "members=@"
Пользователи Moodle с ролью "Учитель", которые прикреплены к курсу, смогут зайти в систему прокторинга как прокторы через данный внешний инструмент в курсе. Эти прокторы смогут наблюдать (или получить доступ к протоколам) только тех участников, которые начали сеанс прокторинга через тот же внешний инструмент в курсе.
2.Параметр "members=proctor1,proctor2,..."
Доступ к сеансам, начатым через данный внешний инструмент в курсе, будет предоставлен только прокторам с перечисленными логинами (через запятую указывается список логинов прокторов в системе прокторинга). Прокторы могут быть либо созданы через админку системы прокторинга, либо это могут быть пользователи Moodle с ролью "Учитель". Во втором случае логином проктора будет идентификатор пользователя в Moodle.
3.Параметр "members" не указан
Правила назначения прокторов на сеансы настраиваются в шаблоне сеанса через админку системы прокторинга. В этом случае можно либо указать список логинов прокторов на вкладке "Участники", либо определить правила назначения прокторов на сеансы из списка на вкладке "Приглашения".
ОБРАТИТЕ ВНИМАНИЕ!
1. Ключи это "url", "template" и "members", а значения это "https://your-moodle-domain/mod/quiz/view.php?id=ID", "default" и "@". Все пользовательские параметры являются опциональными, сеанс прокторинга сможет запуститься даже если они не будут указаны.
2. Если предварительные настройки внешнего инструмента не применяются или работают некорректно, то рекомендуется удалить текущий внешний инструмент и настроить его заново (см. раздел 1.5).
3. Для тестирования внешнего инструмента через аккаунт участника нужно выбрать: "переключиться к роли" → "студент". Вернуться обратно в аккаунт администратора: "переключиться к моей обычной роли".
1. Ключи это "url", "template" и "members", а значения это "https://your-moodle-domain/mod/quiz/view.php?id=ID", "default" и "@". Все пользовательские параметры являются опциональными, сеанс прокторинга сможет запуститься даже если они не будут указаны.
2. Если предварительные настройки внешнего инструмента не применяются или работают некорректно, то рекомендуется удалить текущий внешний инструмент и настроить его заново (см. раздел 1.5).
3. Для тестирования внешнего инструмента через аккаунт участника нужно выбрать: "переключиться к роли" → "студент". Вернуться обратно в аккаунт администратора: "переключиться к моей обычной роли".
2.5 Скрыть тестовый элемент
Чтобы участник не начал тест до того как запустится прокторинг, нужно скрыть тестовый элемент со страницы курса, при этом оставив доступ к нему.
Для этого можно скрыть тему в режиме редактирования:
Для этого можно скрыть тему в режиме редактирования:
А затем сделать доступным тестовый элемент:
После этих действий тема с тестовым элементом должна выглядеть так:
Чтобы скрытая тема никак не отображалась в курсе, нужно указать следующую настройку "Настройки курса" → "Формат курса" → "Отображение скрытых разделов" → "Полностью невидимы".
2.6 Ограничить доступ к тестовому элементу
Сразу после начала сеанса прокторинга для элемента прокторинга устанавливается оценка 0, а после завершения прокторинга она всегда больше 0 (от 0.1 до 100 при стобалльной шкале). Это можно использовать в условиях ограничения доступа связанного тестового элемента. Данная настройка выполняется не для элемента прокторинга, а у связанного с ним тестового элемента.
Если эту настройку пропустить, то студент сможет найти ссылку на тест в своем расписании и пройти тест по прямой ссылке без прокторинга.
2.7 Использовать прокторинг
Теперь при переходе по элементу прокторинга участник приступит к выполнению связанного тестового элемента по процедуре прокторинга. При переходе по элементу прокторинга преподаватель или администратор попадут в интерфейс проктора, где получат доступ ко всем сеансам, которые были созданы при переходе по данному элементу.
После завершения сеанса прокторинга в Moodle будет передана оценка за прокторинг от 0 до 1. Если сеанс оценивается проктором, то положительное заключения соответствует оценке 1, а отрицательное — 0. Результаты прокторинга по каждому студенту возвращаются в журнал оценок Moodle (раздел "Оценки"). Поле "API" настройках шаблона сеанса прокторинга не используется при интеграции с Moodle.
После завершения сеанса прокторинга в Moodle будет передана оценка за прокторинг от 0 до 1. Если сеанс оценивается проктором, то положительное заключения соответствует оценке 1, а отрицательное — 0. Результаты прокторинга по каждому студенту возвращаются в журнал оценок Moodle (раздел "Оценки"). Поле "API" настройках шаблона сеанса прокторинга не используется при интеграции с Moodle.
2.8 Дополнительные попытки
Для выдачи участнику нескольких попыток сдать тест с прокторингом в Moodle нужно выполнить следующие действия:
1) Со стороны Moodle нужно изменить количество попыток (до нужного количества). Для этого нужно перейти в настройки тестового элемента и указать количество попыток в поле "Настройки" → "Оценка" → "Количество попыток". Если выбрать вариант "Не ограничено", тогда участник может пройти тест в Moodle сколько угодно раз. На скриншоте ниже участник может пройти тест Moodle только один раз:
1) Со стороны Moodle нужно изменить количество попыток (до нужного количества). Для этого нужно перейти в настройки тестового элемента и указать количество попыток в поле "Настройки" → "Оценка" → "Количество попыток". Если выбрать вариант "Не ограничено", тогда участник может пройти тест в Moodle сколько угодно раз. На скриншоте ниже участник может пройти тест Moodle только один раз:
2) Со стороны системы прокторинга под администратором нужно установить в шаблоне сеанса количество дополнительных попыток. Если количество попыток не указано, то у участника только одна попытка пройти сеанс прокторинга. На скриншоте ниже у сеанса всего три попытки (одна основная и две дополнительных):
Такая настройка необходима как со стороны Moodle, так и со стороны системы прокторинга. Однако если в Moodle для теста количество попыток не ограничено, то ограничить количество попыток прохождения сеанса можно только со стороны прокторинга.
Если конкретному участнику потребовалось больше попыток, чем было выставлено в шаблоне сеанса прокторинга, то изменение количества попыток нужно делать не в шаблоне, а в параметрах конкретного сеанса данного участника. Все изменения в шаблоне применяются только для вновь создаваемых сеансов и не распространяются на уже созданные ранее сеансы.
Есть три способа разрешить участнику пройти сеанс прокторинга повторно:
1. добавить дополнительные попытки в сеансе;
2. поменять идентификатор сеанса (или сгенерировать случайный);
3. удалить сеанс.
Если конкретному участнику потребовалось больше попыток, чем было выставлено в шаблоне сеанса прокторинга, то изменение количества попыток нужно делать не в шаблоне, а в параметрах конкретного сеанса данного участника. Все изменения в шаблоне применяются только для вновь создаваемых сеансов и не распространяются на уже созданные ранее сеансы.
Есть три способа разрешить участнику пройти сеанс прокторинга повторно:
1. добавить дополнительные попытки в сеансе;
2. поменять идентификатор сеанса (или сгенерировать случайный);
3. удалить сеанс.
3. Настройка интеграции в системе прокторинга
Данный пункт необходимо выполнять только при использовании коробочной версии системы.
Чтобы подключить интеграцию с Moodle в системе прокторинга необходимо импортировать следующую конфигурацию хоста по аккаунтом менеджера:
Чтобы подключить интеграцию с Moodle в системе прокторинга необходимо импортировать следующую конфигурацию хоста по аккаунтом менеджера:
<!--JSON-->
{
"id": "<Host_ID>",
"key": "<License_Key>",
"params": {
"webhooks": {
"moodle": {
"authorizer": "lti",
"integrator": "lti",
"consumerKey": "demo",
"consumerSecret": "secret",
"callbackURL": "query.redirect",
"profile": {
"username": "payload.user_id",
"role": "payload.roles.find(v=>/Instructor/.test(v))?'proctor':'student'",
"nickname": "payload.lis_person_name_full",
"lang": "(payload.launch_presentation_locale||'').slice(0,2)",
"group": "['G',payload.context_id,payload.resource_link_id].join('-')",
"referrer": "payload.launch_presentation_return_url",
"labels": "payload.lis_person_contact_email_primary"
},
"register": {
"identifier": "[payload.user_id,payload.context_id,payload.resource_link_id].join('-').replace(/[^A-Za-z0-9_-]+/g,'_')",
"template": "payload.custom_template||'default'",
"subject": "payload.resource_link_title",
"members": "payload.custom_members==='@'?user.group:payload.custom_members",
"url": "payload.custom_url||payload.launch_presentation_return_url",
"tags": "payload.lis_person_contact_email_primary"
},
"start": true,
"stop": true,
"pause": true,
"submit": true
}
},
"sdk": {
"iframe": {
"sandbox": "allow-scripts allow-forms allow-modals allow-same-origin allow-popups allow-downloads"
}
}
}
}где поля "consumerKey" и "consumerSecret" нужно заменить на случайно сгенерированную последовательность символов (латинские буквы разного регистра и цифры, рекомендуемая длина 24 символа); "id" — идентификатор хоста (если его не указывать, создастся новый хост); "key" — лицензионный ключ данного хоста.