Интеграция с Moodle: различия между версиями

Материал из Апекс-ВУЗ
Нет описания правки
 
(не показаны 4 промежуточные версии 1 участника)
Строка 1: Строка 1:
==Аутентификация через БД Апекс-ВУЗ==
== Конвертация БД Moodle в кодировку utf8mb4 ==
На сервере Moodle выполните конвертацию согласно официальной инструкции: <nowiki>https://docs.moodle.org/403/en/MySQL_full_unicode_support</nowiki>
 
== Конвертация БД Апекс-ВУЗ в кодировку utf8mb4 ==
На сервере Апекс-ВУЗ для конвертации БД создайте файл /etc/my.cnf.d/utf8mb4.cnf со следующим содержимым:
 
 
[client]
 
default-character-set = utf8mb4
 
 
[mysqld]
 
innodb_file_format = Barracuda
 
innodb_file_per_table = 1
 
innodb_large_prefix = true
 
 
character-set-server = utf8mb4
 
collation-server = utf8mb4_unicode_ci
 
skip-character-set-client-handshake
 
 
[mysql]
 
default-character-set = utf8mb4
 
 
После сохранения файла выполните перезагрузку сервера БД командой systemctl restart mysqld.
 
 
Создайте файл gen_utf8mb4_queries.sql со следующим содержимым:
 
 
USE information_schema;
 
SELECT CONCAT("ALTER DATABASE `",table_schema,"` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;") AS _sql
 
FROM `TABLES` WHERE table_schema LIKE "avtor" AND TABLE_TYPE='BASE TABLE' GROUP BY table_schema UNION
 
SELECT CONCAT("ALTER TABLE `",table_schema,"`.`",table_name,"` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;") AS _sql  
 
FROM `TABLES` WHERE table_schema LIKE "avtor" AND TABLE_TYPE='BASE TABLE' GROUP BY table_schema, table_name UNION
 
SELECT CONCAT("ALTER TABLE `",`COLUMNS`.table_schema,"`.`",`COLUMNS`.table_name, "` CHANGE `",column_name,"` `",column_name,"` ",data_type,"(",character_maximum_length,") CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci",IF(is_nullable="YES"," NULL"," NOT NULL"),";") AS _sql
 
FROM `COLUMNS` INNER JOIN `TABLES` ON `TABLES`.table_name = `COLUMNS`.table_name WHERE `COLUMNS`.table_schema like "avtor" and data_type in ('varchar','char') AND TABLE_TYPE='BASE TABLE' UNION
 
SELECT CONCAT("ALTER TABLE `",`COLUMNS`.table_schema,"`.`",`COLUMNS`.table_name, "` CHANGE `",column_name,"` `",column_name,"` ",data_type," CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci",IF(is_nullable="YES"," NULL"," NOT NULL"),";") AS _sql
 
FROM `COLUMNS` INNER JOIN `TABLES` ON `TABLES`.table_name = `COLUMNS`.table_name WHERE `COLUMNS`.table_schema like "avtor" and data_type in ('text','tinytext','mediumtext','longtext') AND TABLE_TYPE='BASE TABLE';
 
 
Выполните команду для генерации запросов на изменение кодировки:
 
 
mysql avtor -u root -p -N < gen_utf8mb4_queries.sql > exec_utf8mb4_queries.sql
 
 
Выполните команды для изменения кодировки:
 
 
mysql avtor -u root -p < exec_utf8mb4_queries.sql
 
== Периодическая очистка кэша для категорий и курсов ==
Для правильной работы синхронизации категорий и курсов необходимо периодически очищать кэш события changesincoursecat после процедуры синхронизации, иначе изменения не будут отражаться сразу (Апекс-ВУЗ отдает данные каждые 10 минут). Это можно сделать следующими способами:
 
1. Вручную через меню Администрирование — Разработка — Очистить кэши
 
2. Через запуск скрипта admin/cli/purge_caches.php (вручную или по cron)
 
3. С помощью плагина для очистки по cron (данный вариант предпочтителен, так как будет стирать только нужный участок кэша, а не выполнять полную очистку). Скопируйте содержимое папки api-samples/moodle на сервере Апекс-ВУЗ в папку /var/www/html на сервере Moodle и убедитесь, что в разделе Администрирование — Сервер — Планировщик задач появилась и периодически запускается задача \local_apeks_vuz\task\cache.
 
== Аутентификация через БД Апекс-ВУЗ ==
В разделе Администрирование – Плагины – Аутентификация включаем плагин «Внешняя база данных». Настройки:
В разделе Администрирование – Плагины – Аутентификация включаем плагин «Внешняя база данных». Настройки:


Сервер базы данных, Название базы данных, Пользователь базы данных, Пароль – указать как параметры подключения к БД Апекс-ВУЗ
Сервер базы данных, Название базы данных, Пользователь базы данных, Пароль – указать как параметры подключения к БД Апекс-ВУЗ


Таблица:
(select u.login, u.password, s.family_name, CONCAT('student-', s.id) as id, s.name, s.surname from student_students s left join system_users u on u.id = s.user_id where s.user_id IS NOT NULL AND s.active = 1 union all select u.login, u.password, s.family_name, CONCAT('staff-', s.id) as id, s.name, s.surname from state_staff s left join system_users u on u.id = s.user_id where s.user_id IS NOT NULL AND s.active = 1) auth


Поле логина: ''login''
Таблица: student_moodle_users
 
Поле логина: login


Поле пароля: ''password''
Поле пароля: password


Формат пароля: Шифровать строки с помощью односторонней хэш-функции
Формат пароля: Шифровать строки с помощью односторонней хэш-функции


Команда настройки ''SQL: SET NAMES 'utf8'''
Команда настройки SQL: SET NAMES 'utf8mb4'


При удалении пользователя во внешнем источнике: Заблокировать внешнюю учетную запись
При удалении пользователя во внешнем источнике: Заблокировать внешнюю учетную запись


Обновить пользователей: ''Да''
Обновить пользователей: Да
 
 
Сопоставление данных (Имя): name


Обновление локальной учетной записи (Имя): При каждом входе


Сопоставление данных (Имя): ''name''
Сопоставление данных (Фамилия): family_name


Обновление локальной учетной записи (Имя): ''При каждом входе''
Обновление локальной учетной записи (Фамилия): При каждом входе


Сопоставление данных (Фамилия): ''family_name''
Сопоставление данных (Отчество или второе имя): surname


Обновление локальной учетной записи (Фамилия): ''При каждом входе''
Обновление локальной учетной записи (Отчество или второе имя): При каждом входе


Сопоставление данных (Индивидуальный номер): ''id''
Сопоставление данных (Индивидуальный номер): id


Обновление локальной учетной записи (Индивидуальный номер): ''При каждом входе''
Обновление локальной учетной записи (Индивидуальный номер): При каждом входе
 
Сопоставление данных (Адрес электронной почты): email
 
Обновление локальной учетной записи (Адрес электронной почты): При создании




Проверяем настройки нажатием на кнопку «Проверить настройки»
Проверяем настройки нажатием на кнопку «Проверить настройки»


==Синхронизация базы данных пользователей==


Внимание: Апекс-ВУЗ предоставляет для аутентификации список пользователей, привязанных к сотрудникам и обучающимся. Если к пользователю не привязан сотрудник из модуля Штаты, то данный пользователь не может быть авторизован в Moodle. Также действуют ограничения по возможным символам в логине — только маленькие латинские буквы, цифры, знак подчеркивания, дефис, точка, @. (Администрирование — Безопасность — Параметры безопасности сайта - Разрешить в логинах дополнительные символы).
== Синхронизация базы данных пользователей ==
Администрирование – Сервер – Задачи – Планировщик задач. Включаем раз в 5 минут запуск скрипта синхронизации - Задача синхронизации пользователей (\auth_db\task\sync_users):
Администрирование – Сервер – Задачи – Планировщик задач. Включаем раз в 5 минут запуск скрипта синхронизации - Задача синхронизации пользователей (\auth_db\task\sync_users):


Минута - */5
Минута - */5
Строка 47: Строка 137:


Добавляем в crontab запуск скрипта планировщика Moodle:
Добавляем в crontab запуск скрипта планировщика Moodle:
Запускаем команду ''crontab -e'', добавляем строку, если ее нет


* * * * * /usr/bin/php /var/www/html/admin/cli/cron.php
Запускаем команду crontab -e, добавляем строку, если ее нет
 
 
<nowiki>*</nowiki> * * * * /usr/bin/php /var/www/html/admin/cli/cron.php
 


(/var/www/html нужно заменить на адрес папки Moodle).
(/var/www/html нужно заменить на адрес папки Moodle).


Через 5 минут проверяем, появились ли новые пользователи в разделе Администрирование – Пользователи – Учетные записи – Список пользователей, пробуем авторизоваться под одним из них.
Через 5 минут проверяем, появились ли новые пользователи в разделе Администрирование – Пользователи – Учетные записи – Список пользователей, пробуем авторизоваться под одним из них.


==Создание категории курсов==
== Автоматическое создание курсов и записи на курс ==
В разделе Администрирование – Плагины – Зачисления на курсы включаем плагин «Внешняя база данных». Настройки:


В разделе Администрирование – Курсы – Управление курсами и категориями создаем категорию «Дисциплины из Апекс-ВУЗ» с идентификационным номером av.


==Автоматическое создание курсов и записи на курс==
Драйвер базы данных - mysqli


В разделе Администрирование Плагины – Зачисления на курсы включаем плагин «Внешняя база данных». Настройки:
Сервер базы данных, Название базы данных, Пользователь базы данных, Пароль указать как параметры подключения к БД Апекс-ВУЗ


Сервер базы данных, Название базы данных, Пользователь базы данных, Пароль – указать как параметры подключения к БД Апекс-ВУЗ


Команда настройки SQL: ''SET NAMES 'utf8'''
Команда настройки SQL: SET NAMES 'utf8mb4'


Локальное поле категории: ''idnumber''


Внешняя таблица информацией о записи на курсы:
Внешняя таблица информацией о записи на курсы: student_moodle_enrollments


((SELECT CONCAT(‘student-‘, s.id), CONCAT("av-course-", cd.discipline_id) AS discipline FROM student_students s LEFT JOIN load_groups g ON s.group_id = g.id LEFT JOIN plan_curriculum_disciplines cd ON g.education_plan_id = cd.education_plan_id WHERE g.education_plan_id IS NOT NULL AND cd.discipline_id IS NOT NULL) UNION ALL (SELECT s.id, CONCAT("av-course-", cd.discipline_id, '/', dccd.discipline_course_id) AS discipline FROM student_students s LEFT JOIN load_groups g ON s.group_id = g.id LEFT JOIN plan_curriculum_disciplines cd ON g.education_plan_id = cd.education_plan_id LEFT JOIN plan_discipline_courses_curriculum_disciplines dccd ON cd.id = dccd.curriculum_discipline_id WHERE g.education_plan_id IS NOT NULL AND cd.discipline_id IS NOT NULL AND dccd.discipline_course_id IS NOT NULL)) courses
Поле курса во внешней таблице: course


Поле курса во внешней таблице: ''discipline''
Поле пользователя во внешней таблице: user_id


Поле пользователя во внешней таблице: ''id''
Поле для роли во внешней таблице: role


Отдаленная таблица новых курсов:


((SELECT DISTINCT(CONCAT("av-course-", cd.discipline_id)) as discipline, d.name, d.name_short FROM plan_curriculum_disciplines cd LEFT JOIN plan_disciplines d ON d.id = cd.discipline_id LEFT JOIN plan_education_plans p ON p.id = cd.education_plan_id WHERE p.status = 1 AND cd.level = 3 AND cd.type NOT IN (8, 16)) UNION ALL (SELECT DISTINCT(CONCAT("av-course-", dc.discipline_id, '/', dc.id)) as discipline, dc.name, dc.name_short FROM plan_discipline_courses dc WHERE dc.discipline_id IN (SELECT DISTINCT(cd.discipline_id) as discipline FROM plan_curriculum_disciplines cd LEFT JOIN plan_disciplines d ON d.id = cd.discipline_id LEFT JOIN plan_education_plans p ON p.id = cd.education_plan_id WHERE p.status = 1 AND cd.level = 3 AND cd.type NOT IN (8, 16)))) courses
Отдаленная таблица новых курсов: student_moodle_courses


Поле полного имени нового курса: ''name''
Поле полного имени нового курса: name


Поле, содержащее название нового курса: ''name_short''
Поле, содержащее название нового курса: name_short


Поле номера ID нового курса: ''discipline''
Поле номера ID нового курса: code


Категория нового курса по умолчанию: Дисциплины из Апекс-ВУЗ
Поле категории нового курса: category




По желанию – создать шаблон нового курса и указать его короткое имя в поле «Шаблон нового курса».
Проверяем настройки нажатием на кнопку «Проверить настройки»


== Синхронизация курсов ==
Администрирование – Сервер – Задачи – Планировщик задач. Включаем раз в сутки запуск скрипта синхронизации - Synchronise external database enrolments task (\enrol_database\task\sync_enrolments):


Проверяем настройки нажатием на кнопку «Проверить настройки»


==Синхронизация курсов==
Минута – 0


Администрирование Сервер – Задачи – Планировщик задач. Включаем раз в 5 минут запуск скрипта синхронизации - Synchronise external database enrolments task (\enrol_database\task\sync_enrolments):
Час 3


Минута - */5
Остальные поля - *
Остальные поля - *
Снимаем флажок «Отключить задачу»
Снимаем флажок «Отключить задачу»


==Отключение подтверждения e-mail==
== Отключение подтверждения e-mail ==
Апекс-ВУЗ не требует обязательного заполнения адреса электронной почты пользователей, поэтому при интеграции они будут переданы в Moodle только при наличии. При первой авторизации Moodle будет запрашивать смену адреса электронной почты и требовать ее подтверждения. Если не все пользователи имеют электронную почту, желательно отключить подтверждение, чтобы они могли указывать любую непроверенную почту.


Апекс-ВУЗ не хранит адреса электронной почты обучающихся, поэтому при интеграции они не будут переданы в Moodle. При первой авторизации Moodle будет запрашивать смену адреса электронной почты и требовать ее подтверждения. Если не все обучающиеся имеют электронную почту, желательно отключить подтверждение, чтобы они могли указывать любую непроверенную почту.


Для этого необходимо перейти в раздел Администрирование – Безопасность – Политики безопасности сайта и снять флажок «Подтверждение изменения электронной почты».
Для этого необходимо перейти в раздел Администрирование – Безопасность – Политики безопасности сайта и снять флажок «Подтверждение изменения электронной почты».

Текущая версия от 10:02, 11 января 2024

Конвертация БД Moodle в кодировку utf8mb4

На сервере Moodle выполните конвертацию согласно официальной инструкции: https://docs.moodle.org/403/en/MySQL_full_unicode_support

Конвертация БД Апекс-ВУЗ в кодировку utf8mb4

На сервере Апекс-ВУЗ для конвертации БД создайте файл /etc/my.cnf.d/utf8mb4.cnf со следующим содержимым:


[client]

default-character-set = utf8mb4


[mysqld]

innodb_file_format = Barracuda

innodb_file_per_table = 1

innodb_large_prefix = true


character-set-server = utf8mb4

collation-server = utf8mb4_unicode_ci

skip-character-set-client-handshake


[mysql]

default-character-set = utf8mb4


После сохранения файла выполните перезагрузку сервера БД командой systemctl restart mysqld.


Создайте файл gen_utf8mb4_queries.sql со следующим содержимым:


USE information_schema;

SELECT CONCAT("ALTER DATABASE `",table_schema,"` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;") AS _sql

FROM `TABLES` WHERE table_schema LIKE "avtor" AND TABLE_TYPE='BASE TABLE' GROUP BY table_schema UNION

SELECT CONCAT("ALTER TABLE `",table_schema,"`.`",table_name,"` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;") AS _sql  

FROM `TABLES` WHERE table_schema LIKE "avtor" AND TABLE_TYPE='BASE TABLE' GROUP BY table_schema, table_name UNION

SELECT CONCAT("ALTER TABLE `",`COLUMNS`.table_schema,"`.`",`COLUMNS`.table_name, "` CHANGE `",column_name,"` `",column_name,"` ",data_type,"(",character_maximum_length,") CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci",IF(is_nullable="YES"," NULL"," NOT NULL"),";") AS _sql

FROM `COLUMNS` INNER JOIN `TABLES` ON `TABLES`.table_name = `COLUMNS`.table_name WHERE `COLUMNS`.table_schema like "avtor" and data_type in ('varchar','char') AND TABLE_TYPE='BASE TABLE' UNION

SELECT CONCAT("ALTER TABLE `",`COLUMNS`.table_schema,"`.`",`COLUMNS`.table_name, "` CHANGE `",column_name,"` `",column_name,"` ",data_type," CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci",IF(is_nullable="YES"," NULL"," NOT NULL"),";") AS _sql

FROM `COLUMNS` INNER JOIN `TABLES` ON `TABLES`.table_name = `COLUMNS`.table_name WHERE `COLUMNS`.table_schema like "avtor" and data_type in ('text','tinytext','mediumtext','longtext') AND TABLE_TYPE='BASE TABLE';


Выполните команду для генерации запросов на изменение кодировки:


mysql avtor -u root -p -N < gen_utf8mb4_queries.sql > exec_utf8mb4_queries.sql


Выполните команды для изменения кодировки:


mysql avtor -u root -p < exec_utf8mb4_queries.sql

Периодическая очистка кэша для категорий и курсов

Для правильной работы синхронизации категорий и курсов необходимо периодически очищать кэш события changesincoursecat после процедуры синхронизации, иначе изменения не будут отражаться сразу (Апекс-ВУЗ отдает данные каждые 10 минут). Это можно сделать следующими способами:

1. Вручную через меню Администрирование — Разработка — Очистить кэши

2. Через запуск скрипта admin/cli/purge_caches.php (вручную или по cron)

3. С помощью плагина для очистки по cron (данный вариант предпочтителен, так как будет стирать только нужный участок кэша, а не выполнять полную очистку). Скопируйте содержимое папки api-samples/moodle на сервере Апекс-ВУЗ в папку /var/www/html на сервере Moodle и убедитесь, что в разделе Администрирование — Сервер — Планировщик задач появилась и периодически запускается задача \local_apeks_vuz\task\cache.

Аутентификация через БД Апекс-ВУЗ

В разделе Администрирование – Плагины – Аутентификация включаем плагин «Внешняя база данных». Настройки:


Сервер базы данных, Название базы данных, Пользователь базы данных, Пароль – указать как параметры подключения к БД Апекс-ВУЗ


Таблица: student_moodle_users

Поле логина: login

Поле пароля: password

Формат пароля: Шифровать строки с помощью односторонней хэш-функции

Команда настройки SQL: SET NAMES 'utf8mb4'

При удалении пользователя во внешнем источнике: Заблокировать внешнюю учетную запись

Обновить пользователей: Да


Сопоставление данных (Имя): name

Обновление локальной учетной записи (Имя): При каждом входе

Сопоставление данных (Фамилия): family_name

Обновление локальной учетной записи (Фамилия): При каждом входе

Сопоставление данных (Отчество или второе имя): surname

Обновление локальной учетной записи (Отчество или второе имя): При каждом входе

Сопоставление данных (Индивидуальный номер): id

Обновление локальной учетной записи (Индивидуальный номер): При каждом входе

Сопоставление данных (Адрес электронной почты): email

Обновление локальной учетной записи (Адрес электронной почты): При создании


Проверяем настройки нажатием на кнопку «Проверить настройки»


Внимание: Апекс-ВУЗ предоставляет для аутентификации список пользователей, привязанных к сотрудникам и обучающимся. Если к пользователю не привязан сотрудник из модуля Штаты, то данный пользователь не может быть авторизован в Moodle. Также действуют ограничения по возможным символам в логине — только маленькие латинские буквы, цифры, знак подчеркивания, дефис, точка, @. (Администрирование — Безопасность — Параметры безопасности сайта - Разрешить в логинах дополнительные символы).

Синхронизация базы данных пользователей

Администрирование – Сервер – Задачи – Планировщик задач. Включаем раз в 5 минут запуск скрипта синхронизации - Задача синхронизации пользователей (\auth_db\task\sync_users):


Минута - */5

Остальные поля - *

Снимаем флажок «Отключить задачу»


Добавляем в crontab запуск скрипта планировщика Moodle:

Запускаем команду crontab -e, добавляем строку, если ее нет


* * * * * /usr/bin/php /var/www/html/admin/cli/cron.php


(/var/www/html нужно заменить на адрес папки Moodle).


Через 5 минут проверяем, появились ли новые пользователи в разделе Администрирование – Пользователи – Учетные записи – Список пользователей, пробуем авторизоваться под одним из них.

Автоматическое создание курсов и записи на курс

В разделе Администрирование – Плагины – Зачисления на курсы включаем плагин «Внешняя база данных». Настройки:


Драйвер базы данных - mysqli

Сервер базы данных, Название базы данных, Пользователь базы данных, Пароль – указать как параметры подключения к БД Апекс-ВУЗ


Команда настройки SQL: SET NAMES 'utf8mb4'


Внешняя таблица информацией о записи на курсы: student_moodle_enrollments

Поле курса во внешней таблице: course

Поле пользователя во внешней таблице: user_id

Поле для роли во внешней таблице: role


Отдаленная таблица новых курсов: student_moodle_courses

Поле полного имени нового курса: name

Поле, содержащее название нового курса: name_short

Поле номера ID нового курса: code

Поле категории нового курса: category


Проверяем настройки нажатием на кнопку «Проверить настройки»

Синхронизация курсов

Администрирование – Сервер – Задачи – Планировщик задач. Включаем раз в сутки запуск скрипта синхронизации - Synchronise external database enrolments task (\enrol_database\task\sync_enrolments):


Минута – 0

Час – 3

Остальные поля - *

Снимаем флажок «Отключить задачу»

Отключение подтверждения e-mail

Апекс-ВУЗ не требует обязательного заполнения адреса электронной почты пользователей, поэтому при интеграции они будут переданы в Moodle только при наличии. При первой авторизации Moodle будет запрашивать смену адреса электронной почты и требовать ее подтверждения. Если не все пользователи имеют электронную почту, желательно отключить подтверждение, чтобы они могли указывать любую непроверенную почту.


Для этого необходимо перейти в раздел Администрирование – Безопасность – Политики безопасности сайта и снять флажок «Подтверждение изменения электронной почты».