121 lines
8.7 KiB
Markdown
121 lines
8.7 KiB
Markdown
# Порядок наполнения LMS данными (через интерфейс)
|
||
|
||
Всё делается в админке, порядок: администратор → курс (bootstrap) → группы
|
||
и студенты → лабораторная → раздача вариантов → защита → материалы.
|
||
|
||
## Шаг 1. Деплой
|
||
|
||
См. [`DEPLOY.md`](DEPLOY.md): Docker + nginx + HTTPS. После старта сервисов
|
||
откройте домен — попадёте на `/setup`, создайте администратора (логин и пароль
|
||
храните в секрете, в репозиторий их не писать).
|
||
|
||
## Шаг 2. Курс
|
||
|
||
Откройте **Курсы** (`/admin/courses`). Все лабораторные принадлежат курсу,
|
||
поэтому курс должен существовать до импорта лабораторных.
|
||
|
||
* **Существующая база:** если курсов ещё нет, нажмите «Создать курс и перенести
|
||
данные». Bootstrap создаст курс «Промышленное программирование на языке C»,
|
||
привяжет к нему все активные группы и перенесёт существующие лабораторные
|
||
и главы. Повторный запуск безопасен и не создаёт дублей.
|
||
* **Новая база:** создайте курс кнопкой «+ Новый курс» (номер присвоится
|
||
автоматически) либо тем же bootstrap.
|
||
* После импорта групп (шаг 3) привяжите их к курсу на странице курса, если их
|
||
не было в момент bootstrap: блок «Привязать группу». Там же назначаются
|
||
преподаватели — по UUID аккаунта со страницы «Пользователи».
|
||
|
||
Архивированный курс нельзя выбрать для новой лабораторной или копирования.
|
||
Без курса создание и импорт лабораторной недоступны: в форме нужно выбрать курс.
|
||
|
||
## Шаг 3. Группы и студенты
|
||
|
||
**Группы → Импорт** — загрузите `.xls`/`.xlsx`/`.csv` со списком группы.
|
||
Обязательные столбцы:
|
||
|
||
```text
|
||
поток | курс | номер | степень | год набора | ФИО | № | база
|
||
```
|
||
|
||
Все строки файла должны относиться к одной группе. Группа создаётся по полям
|
||
(имя собирается автоматически, например `ПИ-11БО`). Логином студента становится
|
||
номер (`№`), пароль генерируется (временный, с обязательной сменой при первом
|
||
входе). Ключ слияния — `student_no`: повторный импорт обновляет студента, а не
|
||
дублирует.
|
||
|
||
Импорт атомарный: при ошибке в любой строке данные не меняются, а в интерфейсе
|
||
показывается отчёт с номерами строк.
|
||
|
||
Дальше по каждому студенту при необходимости:
|
||
* **«Сбросить пароль»** — выдать новый временный пароль;
|
||
* **«Добавить существующего»** — перевести студента из другой группы;
|
||
* **«Отчислить из группы»** — убрать из группы, студент получает статус
|
||
«отчислен»; аккаунт, сдачи и оценки сохраняются.
|
||
|
||
Выгрузить логины: **«Логины XLSX» / «CSV»**.
|
||
|
||
## Шаг 4. Лабораторная
|
||
|
||
**Лабораторные → Импорт** — сначала выберите **курс** (обязательно), затем
|
||
загрузите ZIP со структурой:
|
||
|
||
```text
|
||
lab.yaml # номер, название, points_max, уровни (code/title), сроки, статус
|
||
README.md # общее условие (markdown)
|
||
variants/01.md # вариант: front-matter (level, number, title) + текст задания
|
||
```
|
||
|
||
Примеры — в личном рабочем каталоге (не в репозитории). После импорта на
|
||
странице лабораторной:
|
||
|
||
* «Настроить» — срок сдачи, дата защиты, максимум баллов, статус;
|
||
* уровни/варианты можно править и добавлять прямо там же;
|
||
* «Копировать в курс» — создать копию лабораторной (с уровнями и вариантами)
|
||
в другом курсе; номер и название можно изменить. Прогресс студентов не
|
||
копируется, копия создаётся черновиком.
|
||
|
||
## Шаг 5. Раздача вариантов
|
||
|
||
На странице лабораторной — **«Распределить»**: выбрать группы, при необходимости
|
||
«пересоздать заново». Логика: случайная очередь по всем вариантам выбранного
|
||
уровня; без повторов, пока в уровне есть невыданные варианты; закрепленные
|
||
вручную не трогаются. Частично/точно — в списке назначений (уровень и вариант по
|
||
каждому студенту) или массово чекбоксами.
|
||
|
||
## Шаг 6. Оценки и защита
|
||
|
||
На странице группы (матрица):
|
||
|
||
* **«опубликовать оценки»** — показать/скрыть оценки и комментарии студентам;
|
||
* **«поставить оценку»** — балл + комментарии (позитивный/негативный/нейтральный);
|
||
* раздел «Индивидуальные задания (защита)»: «Назначить задание» или импорт CSV
|
||
(`студент;ЛР;задание` или `студент;задание` при выбранной ЛР), «выдать код»,
|
||
«изменить», «текст», после готовности — «доп. задание: начать заново».
|
||
|
||
## Шаг 7. Учебные материалы
|
||
|
||
**Лабораторные → материалы (`/learn`)** доступны гостям. Для наполнения:
|
||
создание глав/разделов/статей в админке или **импорт ZIP** со структурой:
|
||
|
||
```text
|
||
chapters/01-глава/01-раздел/01-статья.md # front-matter: title, slug
|
||
assets/ # картинки для md
|
||
```
|
||
|
||
Материалы видны всем; для редактирования — «Материалы» с правами администратора.
|
||
|
||
Импорт бывает в двух режимах: с галочкой «Удалять разделы и статьи, которых нет в архиве»
|
||
(синхронизация — архив считается источником истины) и без неё (merge — только добавить и
|
||
обновить, правки в приложении сохраняются). Для догрузки отдельных статей используйте merge.
|
||
|
||
Медиа в материалах: картинки и видео кладутся в `assets/` архива и вставляются директивами
|
||
`:::figure assets/имя.png | Подпись` и `:::video assets/имя.mp4 | Подпись`. Лимиты: картинки —
|
||
до 10 МБ (`png/jpg/jpeg/gif/svg/webp`), видео — до 100 МБ (`mp4/webm/ogg`). Nginx и сервисы
|
||
настроены на загрузку до 200 МБ; подробности — в [`docs/06-authoring.md`](../docs/06-authoring.md).
|
||
|
||
## Замечания
|
||
|
||
* Данные в `*.xls`/PDF/PDF-пароли содержат персональные сведения — храните их во
|
||
временном каталоге и не коммитьте в репозиторий.
|
||
* Пароли студентов выдаются автоматически; временный пароль нужно менять при
|
||
первом входе (до смены другие страницы недоступны).
|