SpreadQuiz/js/groupmgr.js

170 lines
5.4 KiB
JavaScript

function list_all_groups() {
let req = {action: "get_all_groups"};
let tbody = document.getElementById("group_manager_table");
tbody.innerHTML = "";
request(req).then(resp => {
let groups = JSON.parse(resp);
for (let i = 0; i < groups.length; i++) {
let g = groups[i];
let row = document.createElement("tr");
let chkbox = document.createElement("input");
chkbox.type = "checkbox";
chkbox.name = "group_chkbox";
chkbox.group = g;
let tdChkBox = document.createElement("td");
tdChkBox.appendChild(chkbox);
tdChkBox.classList.add("checkbox");
let tdGroupName = create_table_cell(print_group_name(g));
let tdGroupDescription = create_table_cell(g["description"]);
let tdOwner = create_table_cell(g["owner"]);
row.append(tdChkBox, tdGroupName, tdGroupDescription, tdOwner);
tbody.appendChild(row);
let edit_group_action = () => {
create_edit_group(g);
};
tdGroupName.addEventListener("click", edit_group_action);
tdGroupDescription.addEventListener("click", edit_group_action);
tdOwner.addEventListener("click", edit_group_action);
}
});
}
let EDITED_GROUP = null;
function create_edit_group(group = null) {
let update = group !== null;
EDITED_GROUP = group;
let groupnameF = document.getElementById("groupname");
let group_descriptionF = document.getElementById("group_description");
let submit_btn = document.getElementById("group_editor_submit_btn");
let group_ownerF = document.getElementById("group_owner");
let group_editorsF = document.getElementById("group_editors");
let group_membersF = document.getElementById("group_members");
if (!update) { // create a new group
groupnameF.value = "";
group_descriptionF.value = "";
submit_btn.value = "Létrehozás"
group_ownerF.value = USERDATA["nickname"];
group_ownerF.readOnly = true;
group_editorsF.value = "";
group_membersF.value = "";
hide("group_editor_additional_fields");
} else { // update and existing one
groupnameF.value = group["groupname"];
group_descriptionF.value = group["description"];
submit_btn.value = "Mentés"
group_ownerF.value = group["owner"];
group_ownerF.readOnly = false;
group_editorsF.value = group["editors"].join(", ");
group_membersF.value = group["users"].join(", ");
show("group_editor_additional_fields");
}
submit_btn.onclick = () => {
let groupname = document.getElementById("groupname").value.trim();
if (groupname !== "") {
let req = {
action: update ? "update_group" : "create_group",
groupname: groupname,
description: group_descriptionF.value.trim(),
editors: group_editorsF.value.trim()
};
if (update) {
req["id"] = group["_id"];
req["owner"] = group_ownerF.value
}
request(req).then(resp => {
list_all_groups();
});
hide("group_editor_window");
}
};
show("group_editor_window");
}
function get_selected_groups() {
let selected_chkboxes = document.getElementsByName("group_chkbox");
let selected_groups = [];
selected_chkboxes.forEach((chkbox) => {
if (chkbox.checked) {
selected_groups.push(chkbox.group);
}
});
return selected_groups;
}
function delete_groups() {
let groups = get_selected_groups();
if (groups.length === 0) {
return;
}
let group_names = [];
let group_ids = [];
groups.forEach((g) => {
group_names.push(g["groupname"]);
group_ids.push(g["_id"]);
});
let msg = "Biztosan törölni kívánja a következő csoporto(ka)t?\n\n" + group_names.join(", ") + "\n\n"
+ "A törlés nem vonható vissza!";
if (confirm(msg)) {
let req = {action: "delete_groups", ids: group_ids.join(",")};
request(req).then(resp => {
list_all_groups();
});
}
}
function print_group_name(group_data) {
let record = group_data["groupname"];
if (!group_data["unique"]) {
record += "#" + group_data["_id"];
}
return record;
}
let MEMBER_ACTION = "";
function open_member_change_window(action) {
MEMBER_ACTION = action;
let winCap = document.getElementById("member_manager_window_title");
// print window title
if (action === "add") {
winCap.innerText = "Tagok hozzáadása";
} else if (action === "remove") {
winCap.innerText = "Tagok eltávolítása";
}
show("member_manager_window");
}
function change_group_members() {
let userListTA = document.getElementById("add_remove_member_area");
let req = {
action: "change_group_members",
groupid: EDITED_GROUP["_id"],
add: [],
remove: []
};
if (MEMBER_ACTION === "add") {
req["add"] = userListTA.value;
} else if (MEMBER_ACTION === "remove") {
req["remove"] = userListTA.value;
}
request(req).then(resp => {
userListTA.value = "";
hide("member_manager_window");
hide("group_editor_window");
list_all_groups();
});
}