Commit Graph

13 Commits

Author SHA1 Message Date
Maxim Dolgolyov 61e30bedf9 feat(materials): Фаза 3 (часть 1) — универсальный буфер + источник «Экзамен»
- /js/material-save.js — общий модуль: MaterialSave.note/link/image поверх LS.saveMaterial/uploadFile.
- exam-prep/task-card.js: кнопка «В мои материалы» на карточке задачи (вариант/тренажёр/тема) —
  сохраняет условие+ответ+решение как заметку (sourceTitle = название экзамена). В пробнике скрыта.
- Подключён material-save.js на 4 страницах экзамена.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 12:13:44 +03:00
Maxim Dolgolyov 0b2e7c8880 fix(exam-prep): стилизованное окно завершения пробника вместо нативного confirm
Окно подтверждения завершения пробника использовало нативный confirm()
(и alert() при ошибке) — без стилей. Заменено на LS.confirm (стилизованный
модал) и LS.toast для ошибки завершения.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 08:47:12 +03:00
Maxim Dolgolyov 471171b77c feat(access): доступ к учебникам и экзаменам по классам/ученикам из админ-панели
Модель allowlist (закрыто по умолчанию), правило ученика важнее класса.
Управляют админ (все) и учителя (свои классы/ученики).

- миграция 040: таблица content_access + непрерывный переход
  (всем существующим классам открыт текущий контент)
- сервис contentAccess: резолвинг доступа, главы наследуют хаб
- API /api/access (catalog/targets/rules) для admin+teacher
- гейты: каталог учебников, router.param slug/examKey, фильтр tracks
- клиентские редиректы на /403 (textbook-tracker, exam-prep boot)
- раздел админки «Доступ к учебникам»: классы + ученики (tri-state)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 12:33:05 +03:00
Maxim Dolgolyov 3cc52e21b0 feat(exam9): link tasks to textbook + difficulty-ordered random + topic exclusion
Practice (random) now picks tasks by ascending difficulty so the first
slot is always level 1 and the session ramps up. Adds ?exclude= to drop
specific subtopics from the random pool, with a per-section checkbox
modal in the UI.

Each task carries a topic_ref (textbook chapter + paragraph) shown as
a 'Учить тему · §N' button next to the solution, deep-linking to the
right section of /textbook/<slug>. Mapping seeded for all 15 math9
subtopics in migration 028.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 14:55:47 +03:00
Maxim Dolgolyov 54b8d06c61 feat(exam-prep F8): слабые темы на дашборде + strategy=weak в тренажёре 2026-05-29 11:38:55 +03:00
Maxim Dolgolyov fe7d44aa83 feat(exam-prep F7): карта тем + тематический тренажёр (API /topics + /topics/:slug/tasks + UI) 2026-05-29 11:35:28 +03:00
Maxim Dolgolyov c590c32b41 feat(exam-prep F10): план по дате экзамена — виджет на дашборде + модалка + GET/PUT/DELETE /plan 2026-05-29 11:17:28 +03:00
Maxim Dolgolyov 294b3622b5 feat(exam-prep F4): живой дашборд — streak + последние попытки + точность 7д + хитмап активности + пробники 2026-05-29 11:12:23 +03:00
Maxim Dolgolyov cfcb233b6c feat(exam-prep F9): пробный экзамен — setup/active/result + таймер + балл по сетке + серверный чекер 2026-05-29 11:06:57 +03:00
Maxim Dolgolyov 4652f9a73d feat(exam-prep F5): тренажёр случайных задач + /practice/next API (random|unsolved) 2026-05-29 10:57:22 +03:00
Maxim Dolgolyov da14b9cb68 feat(exam-prep F3): интерактивный тренажёр — task-card + автопроверка ответа + retry + auto-open решения 2026-05-29 10:51:38 +03:00
Maxim Dolgolyov 7c33d4ce11 feat(exam-prep F2): порт браузера вариантов + API /variants + POST /attempts + редирект /exam9 2026-05-29 10:43:10 +03:00
Maxim Dolgolyov 1b79965fce feat(geom9 ch3 wave2 + final): §12 «Герон» + Финал Главы 3 2026-05-29 10:13:29 +03:00