Интеграция

Материал из Апекс-ВУЗ

Интеграция Moodle и Апекс-ВУЗ

Конвертация БД 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 будет запрашивать смену адреса электронной почты и требовать ее подтверждения. Если не все пользователи имеют электронную почту, желательно отключить подтверждение, чтобы они могли указывать любую непроверенную почту.


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