Главная страница LMS: настройка без веб-админки (без участия заказчика)
Проект: Главная страница LMS (lms.cdto.life)
Задачи: 1.3 (#67), 1.4 (#68)
Требование: не привлекать заказчика (CDTO Dkvark) к вводу данных через админку. У исполнителя есть доступ к серверу, файлам и БД.
1. Подход
Все изменения главной страницы (название сайта, краткое описание, список элементов на главной, расстановка блоков) выполняются автоматически одним из способов:
- Рекомендуемый: один скрипт из репозитория, запускаемый с хоста или из контейнера — настраивает конфиг Moodle и добавляет блоки через Moodle API (CLI).
- Альтернатива: только настройки через
admin/cli/cfg.phpи прямой SQL для блоков — если PHP-скрипт по какой-то причине не подходит.
Участие заказчика не требуется: ни вход в браузер, ни ручное редактирование страницы.
2. Рекомендуемое решение: скрипты из репозитория
2.1 Что делают скрипты
| Скрипт | Назначение |
|---|---|
| scripts/moodle-lms-frontpage-setup.php | Выполняется внутри контейнера moodle от пользователя www-data. Устанавливает в БД/конфиг: название сайта (fullname), короткое имя (shortname), краткое описание главной (summary курса id=1), при необходимости frontpage/frontpageloggedin; добавляет блоки на главную (Вход, Календарь — слева; Новости, Навигация — справа) через block_manager. В конце вызывает purge_all_caches(). |
| scripts/moodle-lms-frontpage-setup.sh | Запускается на хосте. По умолчанию копирует PHP-скрипт в контейнер по постоянному пути $MOODLE_DIR/admin/cli/moodle-lms-frontpage-setup.php и запускает от www-data. С опцией --no-push запускает уже разложенный в контейнере скрипт (не зависит от push). Передаёт тексты и регионы через переменные окружения или значения по умолчанию. |
2.2 Запуск с хоста (без входа в контейнер вручную)
В CLI тема не отрисовывает страницу, поэтому регионы блоков по умолчанию пусты. Нужно передать имена регионов вашей темы (через переменные или параметры). Для темы Boost используются side-pre и side-post — они подставлены в обёртке по умолчанию. Для Moove, Adaptable и др. уточните регионы в настройках темы или в её layout (например side-pre, side-post, pre, post).
cd /home/cdto/DENKART
# Сохранение состояния перед изменениями (по правилу проекта)
./scripts/save-state-before-migration.sh pre-lms-front-page-changes
# Запуск настройки главной (контейнер moodle должен быть запущен)
# По умолчанию регионы: side-pre, side-post (Boost)
./scripts/moodle-lms-frontpage-setup.sh
# Для другой темы задайте регионы (пример):
# MOODLE_BLOCK_REGION_PRE=side-pre MOODLE_BLOCK_REGION_POST=side-post ./scripts/moodle-lms-frontpage-setup.sh
# Запуск без копирования (скрипт уже в контейнере по пути admin/cli/moodle-lms-frontpage-setup.php):
# ./scripts/moodle-lms-frontpage-setup.sh --no-push
Тексты по умолчанию (из видения):
- Название сайта: LMS cdto.life
- Короткое имя: LMS
- Краткое описание: Платформа обучения на базе Moodle 4.5.
Их можно переопределить без правки кода:
MOODLE_FRONTPAGE_FULLNAME="Обучение — lms.cdto.life" \
MOODLE_FRONTPAGE_SUMMARY="Краткое описание для главной страницы." \
./scripts/moodle-lms-frontpage-setup.sh
Проверка без записи (сухой прогон):
./scripts/moodle-lms-frontpage-setup.sh --dry-run
2.3 Запуск из контейнера (если скрипт уже скопирован)
Если по какой-то причине обёртка .sh не используется (например, нет lxc на машине, где запускают):
- Скопировать
scripts/moodle-lms-frontpage-setup.phpв контейнер (например в/tmp/). - В контейнере выполнить:
bash sudo -u www-data php /tmp/moodle-lms-frontpage-setup.php --moodle-dir=/var/www/moodle - Тексты задать через опции или переменные окружения (см. вывод
--helpу скрипта).
2.4 Требования
- Контейнер moodle запущен, доступ по
lxc exec moodle -- ...(для варианта с .sh). - Пользователь www-data в контейнере имеет права на запись в moodledata и на выполнение PHP в каталоге Moodle.
- Moodle уже установлен (есть config.php, БД настроена).
3. Альтернатива: только CLI и БД (без PHP-скрипта блоков)
Если нужно обойтись без единого PHP-скрипта (например, политика запрещает выполнение своего PHP в окружении Moodle):
3.1 Настройки Front page (1.3)
В контейнере от пользователя www-data:
cd /var/www/moodle
# Название и короткое имя сайта
sudo -u www-data php admin/cli/cfg.php --name=fullname --set="LMS cdto.life"
sudo -u www-data php admin/cli/cfg.php --name=shortname --set="LMS"
# Краткое описание главной хранится в поле summary курса с id=1 (сайт)
# Выполнить от пользователя с доступом к БД (в контейнере):
mysql -u moodle -p moodle -e "UPDATE mdl_course SET summary='Платформа обучения на базе Moodle 4.5.', summaryformat=1 WHERE id=1;"
(Префикс таблицы может быть не mdl_, а задан в config.php — проверьте $CFG->prefix.)
3.2 Блоки на главной (1.4)
Добавление блоков без веб-интерфейса и без вызова block_manager возможно только через прямые вставки в БД (таблицы block_instances, при необходимости block_positions). Структура таблиц и значения region/weight зависят от темы и версии Moodle; при обновлении Moodle возможны изменения. Поэтому рекомендуется использовать PHP-скрипт (раздел 2). Если всё же используется только SQL — нужно получить contextid для главной (контекст курса id=1), затем вставлять записи в block_instances с правильными blockname, pagetypepattern=site-index, defaultregion (например side-pre, side-post). Детали см. в Moodle Blocks FAQ и в схеме БД вашей версии.
4. Итог
- Участие заказчика не требуется: все данные задаются в скрипте или переменных окружения, выполняет исполнитель с доступом к серверу/контейнеру.
- Рекомендуемый способ:
./scripts/moodle-lms-frontpage-setup.shпосле save-state (и при необходимости правки MOODLE_FRONTPAGE_* в окружении). - Документация по веб-админке (раздел 4 в lms-front-page-theme-and-tasks.md) остаётся как запасной вариант для тех, у кого нет доступа к CLI, но для проекта главной LMS выполнение через скрипты исключает привлечение заказчика к вводу данных через админку.
После выполнения скрипта — обновить задачи #67 и #68 в Redmine (комментарий: «Выполнено скриптом moodle-lms-frontpage-setup.sh без веб-админки», при необходимости указать использованные тексты).