Главная страница 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 на машине, где запускают):

  1. Скопировать scripts/moodle-lms-frontpage-setup.php в контейнер (например в /tmp/).
  2. В контейнере выполнить:
    bash sudo -u www-data php /tmp/moodle-lms-frontpage-setup.php --moodle-dir=/var/www/moodle
  3. Тексты задать через опции или переменные окружения (см. вывод --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 без веб-админки», при необходимости указать использованные тексты).