feat(lessons): «Мои материалы» — ученик сохраняет материалы урока к себе
Ученик на странице «Мои уроки» может сохранить к себе страницу доски (PNG) и свою заметку из прошлой онлайн-сессии. Копия хранится у ученика и переживает удаление сессии учителем. - Миграция 060: student_materials (kind board/note/link/image, denormalized source_title, source_session_id ON DELETE SET NULL). - API /api/materials (GET/POST/DELETE, авторизация + проверка владельца) + helpers в js/api.js. - my-lessons.html: кнопки «К себе» на доске и заметке (Whiteboard.exportBlob → /api/files → saveMaterial). - Новая страница /my-materials (просмотр/открыть/скачать/удалить) + пункт сайдбара (ученик). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1048,6 +1048,7 @@ window.LS = {
|
||||
crJoin, crLeave, crSendChat, crGetChat, crGetAttendance, crSignal, crGetOnlineStudents, crGetMySession,
|
||||
crGetMyHistory, crGetClassHistory, crGetSessionSummary, crExportChatUrl, crGetAllNotes, crDeleteHistory,
|
||||
crAdminGetAllHistory, crAdminGetTeachersList,
|
||||
listMaterials, saveMaterial, deleteMaterial,
|
||||
escapeHtml, esc,
|
||||
parseDate, fmtRelTime, safeHref,
|
||||
initPage,
|
||||
@@ -1242,6 +1243,9 @@ async function uploadFile(formData) {
|
||||
return data;
|
||||
}
|
||||
function downloadFileUrl(id) { return `${API}/files/${id}/download`; }
|
||||
async function listMaterials() { return req('GET', '/materials'); }
|
||||
async function saveMaterial(data) { return req('POST', '/materials', data); }
|
||||
async function deleteMaterial(id) { return req('DELETE', `/materials/${id}`); }
|
||||
async function deleteFile(id) { return req('DELETE', `/files/${id}`); }
|
||||
async function getFileAccess(id) { return req('GET', `/files/${id}/access`); }
|
||||
async function assignFile(id, data) { return req('POST', `/files/${id}/assign`, data); }
|
||||
|
||||
@@ -69,6 +69,7 @@
|
||||
${L('/my-students', 'user-plus', 'Мои ученики', { cls: 'sb-teacher-only', hidden: !isTch })}
|
||||
${L('/classroom', 'presentation', 'Онлайн-урок', { id: 'btn-classroom', cls: 'sb-link-cr' })}
|
||||
${L('/lesson-history','archive', 'Архив уроков')}
|
||||
${L('/my-materials', 'bookmark', 'Мои материалы', { hidden: !isStu })}
|
||||
${L('/live-quiz', 'radio', 'Live-квиз', { cls: 'sb-teacher-only', hidden: !isTch })}
|
||||
${L('/board', 'layout-dashboard', 'Доска', { id: 'btn-board', hidden: true })}
|
||||
`)}
|
||||
|
||||
Reference in New Issue
Block a user