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