'use strict';
/* admin → permissions section (role-based teacher/student permissions) */
(function () {
'use strict';
let inited = false;
let _permData = null;
async function load() {
try {
_permData = await LS.getPermissions();
renderPermissions();
} catch(e) {
document.getElementById('perm-teacher').innerHTML =
`
Ошибка загрузки: ${esc(e.message)}
`;
}
}
function renderPermissions() {
if (!_permData) return;
const { permissions, definitions } = _permData;
['teacher', 'student'].forEach(role => {
const container = document.getElementById('perm-' + role);
const defs = definitions.filter(d => d.role === role);
container.innerHTML = defs.map(def => {
const enabled = permissions[role]?.[def.key] ?? def.default;
const isModified = (enabled ? 1 : 0) !== def.default;
const modDot = isModified
? ``
: '';
return `
`;
}).join('');
});
}
async function togglePermission(role, key, enabled, checkbox) {
if (!enabled) {
const def = (_permData.definitions || []).find(d => d.role === role && d.key === key);
if (def && def.requireConfirmOff) {
const roleLabel = role === 'teacher' ? 'Учитель' : 'Ученик';
const ok = await LS.confirm(
`Выключение «${def.label}» затронет всех пользователей роли «${roleLabel}». Они потеряют доступ. Продолжить?`,
{ title: 'Подтвердите выключение права', confirmText: 'Выключить' }
);
if (!ok) { checkbox.checked = true; return; }
}
}
checkbox.disabled = true;
try {
await LS.setPermission(role, key, enabled);
if (!_permData.permissions[role]) _permData.permissions[role] = {};
_permData.permissions[role][key] = enabled;
const safeKey = key.replace('.', '_');
const card = document.getElementById(`perm-card-${role}-${safeKey}`);
if (card) card.classList.toggle('enabled', enabled);
// Re-render to refresh the modified-dot indicator across all cards.
renderPermissions();
LS.toast(enabled ? 'Право включено' : 'Право отключено', 'success');
} catch(e) {
checkbox.checked = !enabled;
LS.toast('Ошибка: ' + e.message, 'error');
} finally {
checkbox.disabled = false;
}
}
function filterPermissions(query) {
const q = (query || '').trim().toLowerCase();
['teacher', 'student'].forEach(role => {
const block = document.querySelector(`#perm-${role}`)?.closest('.perm-role-block');
const cards = document.querySelectorAll(`#perm-${role} .perm-card`);
let visibleCount = 0;
cards.forEach(card => {
const label = (card.querySelector('.perm-label')?.textContent || '').toLowerCase();
const desc = (card.querySelector('.perm-desc')?.textContent || '').toLowerCase();
const show = !q || label.includes(q) || desc.includes(q);
card.style.display = show ? '' : 'none';
if (show) visibleCount++;
});
if (block) block.style.display = visibleCount === 0 ? 'none' : '';
});
}
window.togglePermission = togglePermission;
window.filterPermissions = filterPermissions;
window.AdminSections = window.AdminSections || {};
window.AdminSections.permissions = {
init: async () => { if (inited) return; inited = true; await load(); },
reload: load,
};
})();