diff --git a/class/GroupMgr.php b/class/GroupMgr.php
index c1b5c75..36cd02d 100644
--- a/class/GroupMgr.php
+++ b/class/GroupMgr.php
@@ -42,7 +42,8 @@ class Group extends AutoStoring
// Create Group from array
static function fromArray(GroupMgr &$groupMgr, array $a): Group
{
- return new Group($groupMgr, $a["groupname"], $a["description"], $a["owner"], $a["_id"], $a["unique"], $a["editors"], $a["users"], $a["games"]);
+ $id = $a["_id"] ?? -1;
+ return new Group($groupMgr, $a["groupname"], $a["description"], $a["owner"], $id, $a["unique"], $a["editors"], $a["users"], $a["games"]);
}
// Convert Group to array
@@ -170,6 +171,16 @@ class Group extends AutoStoring
$this->storeMods(); // store changes
}
+ // Add members
+ function addMembers(array $nicknames) : void {
+ $this->changeMembers($nicknames, []);
+ }
+
+ // Remove members
+ function removeMembers(array $nicknames) : void {
+ $this->changeMembers([], $nicknames);
+ }
+
// Include/exclude games.
function changeGames(array $gameids_add, array $gameids_remove): void
{
@@ -266,7 +277,7 @@ class GroupMgr
"owner" => $owner,
"description" => $description,
"editors" => [],
- "members" => [],
+ "users" => [],
"games" => []
];
diff --git a/class/UserMgr.php b/class/UserMgr.php
index 2886b38..402faf8 100644
--- a/class/UserMgr.php
+++ b/class/UserMgr.php
@@ -221,4 +221,10 @@ class UserMgr
$qb = $this->db->createQueryBuilder();
return array_map(fn($c): string => $c["nickname"], $qb->select(["nickname"])->getQuery()->fetch());
}
+
+ // Sanitize nicknames. Clear non-existent nicknames from the array.
+ function sanitizeNicknames(array $nicknames): array {
+ $a = $this->db->findBy(["nickname", "IN", $nicknames]);
+ return array_map(fn($a) => $a["nickname"], $a);
+ }
}
\ No newline at end of file
diff --git a/common_func.php b/common_func.php
index 0523946..5c5a463 100644
--- a/common_func.php
+++ b/common_func.php
@@ -1,7 +1,11 @@
- |
- |
+
+
+
+
+ |
+
+
+ |
@@ -74,6 +80,16 @@ if (!get_autologin_state() || ($user_data["privilege"] !== PRIVILEGE_QUIZMASTER)
+
+
diff --git a/interface.php b/interface.php
index acc2031..e9c04da 100644
--- a/interface.php
+++ b/interface.php
@@ -322,10 +322,8 @@ $requester_nickname = $is_quizmaster ? "*" : $nickname; // "*" means every game
function create_update_game(ReqHandler &$rh, array $params): array
{
- global $userMgr;
global $user;
global $nickname;
- global $is_quizmaster;
global $gameMgr;
$update = $params[ReqHandler::ACTION_KEY] === "update_game";
@@ -340,20 +338,8 @@ function create_update_game(ReqHandler &$rh, array $params): array
$description = $data["description"];
$contributors = explode_list($data["contributors"] ?? "");
$owner = $update ? trim($data["owner"] ?? $nickname) : $nickname;
- $groups = explode_list($data["groups"] ?? "");
$properties = $data["properties"] ?? [];
- // convert group compounds to group IDs
- $groupids = get_groupids_by_compounds($groups); // convert group compounds to _ids
-
- // remove group ID's this user cannot edit
-// $groupids_with_editor_access = [];
-// foreach ($groupids as $groupid) {
-// if (is_user_editor_to_group($groupid, $nickname) || $is_quizmaster) {
-// $groupids_with_editor_access[] = $groupid;
-// }
-// }
-
// result
$result = [];
@@ -364,21 +350,6 @@ function create_update_game(ReqHandler &$rh, array $params): array
$game = $gameMgr->getGame($gameid); // fetch game
if (($game !== null) && $game->isUserContributorOrOwner($nickname) || $user->hasQuizmasterPrivilege()) {
- // group management TODO: átkerül a csoportkezelőbe
-// $old_groupids = $game_data["groups"]; // retain old groupids
-// $new_groupids = $groupids; // get new groupids
-// $groupids_add = array_diff($new_groupids, $old_groupids); // groups this user needs to be added to
-// $groupids_remove = array_diff($old_groupids, $new_groupids); // groups this user need to be removed from
-// foreach ($groupids_add as $groupid) { // execute insertion and removal
-// change_group_game_assignments($groupid, $gameid, null);
-// }
-// foreach ($groupids_remove as $groupid) {
-// change_group_game_assignments($groupid, null, $gameid);
-// }
-
- // re-fetch game data
-// $game_data = get_game($gameid);
-
// disable autostoring
$game->disableAutoStoring();
@@ -644,31 +615,13 @@ function create_update_user(ReqHandler &$rh, array $params): string
$realname = trim($params["realname"]);
$privilege = trim($params["privilege"]);
- // $groupids = get_groupids_by_compounds($groups); // convert group compounds to _ids FIXME!!!
-
$success = false;
if (($target_nickname !== "")) {
if ((!$update) && ($password !== "")) { // CREATE
- $success = $userMgr->addUser($target_nickname, $password, $realname, $privilege); // FIXME!!!
+ $success = $userMgr->addUser($target_nickname, $password, $realname, $privilege);
} else if ($update) { // UPDATE
$tuser = $userMgr->getUser($target_nickname); // load user data
if ($tuser !== null) {
-
- // group management FIXME!!!
-// $old_groupids = $tuser->getGroups(); // retain old groupids
-// $new_groupids = $groupids; // get new groupids
-// $groupids_add = array_diff($new_groupids, $old_groupids); // groups this user needs to be added to
-// $groupids_remove = array_diff($old_groupids, $new_groupids); // groups this user need to be removed from
-// foreach ($groupids_add as $groupid) { // execute insertion and removal
-// change_group_user_assignments($groupid, $target_nickname, null);
-// }
-// foreach ($groupids_remove as $groupid) {
-// change_group_user_assignments($groupid, null, $target_nickname);
-// }
-
- // re-fetch user
- //$tuser = get_user($target_nickname); // load user data
-
// further field update
$tuser->disableAutoStoring();
$tuser->setRealname($realname);
@@ -727,6 +680,26 @@ function get_game_groups(ReqHandler &$rh, array $params): array {
return $groups;
}
+function change_group_members(ReqHandler &$rh, array $params): string {
+ global $groupMgr;
+ global $user;
+ global $userMgr;
+
+ $group = $groupMgr->getGroup($params["groupid"]);
+ if ($group !== null) {
+ if ($group->isUserContributor($user->getNickname())) {
+ $add = explode_list(trim($params["add"]));
+ $add = $userMgr->sanitizeNicknames($add);
+ $remove = explode_list(trim($params["remove"]));
+ $remove = $userMgr->sanitizeNicknames($remove);
+ $group->changeMembers($add, $remove);
+ return "OK";
+ }
+ }
+
+ return "FAIL";
+}
+
function import_users_from_csv(ReqHandler &$rh, array $params): string
{
if (!isset($_FILES["users_table"])) {
@@ -740,6 +713,7 @@ $rh->add("update_group", ["groupname", "description", "owner", "editors", "id"],
$rh->add("delete_groups", ["ids"], PRIVILEGE_QUIZMASTER, "delete_groups", RESP_PLAIN, "Delete group.");
$rh->add("get_all_groups", [], PRIVILEGE_QUIZMASTER, "get_all_player_groups", RESP_JSON, "Get all player groups.");
$rh->add("search_groups", ["needle"], PRIVILEGE_QUIZMASTER, "search_player_groups", RESP_JSON, "Serach and fetch player groups.");
+$rh->add("change_group_members", ["groupid", "add", "remove"], PRIVILEGE_QUIZMASTER,"change_group_members", RESP_PLAIN, "Change group members.");
$rh->add(["create_user", "update_user"], ["nickname", "password", "realname", "privilege"], PRIVILEGE_QUIZMASTER, "create_update_user", RESP_PLAIN, "Create or update user.");
$rh->add("delete_users", ["users"], PRIVILEGE_QUIZMASTER, "delete_users", RESP_PLAIN, "Delete users.");
diff --git a/js/groupmgr.js b/js/groupmgr.js
index c489886..172de25 100644
--- a/js/groupmgr.js
+++ b/js/groupmgr.js
@@ -31,9 +31,13 @@ function list_all_groups() {
});
}
+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");
@@ -122,4 +126,42 @@ function print_group_name(group_data) {
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");
+ });
}
\ No newline at end of file
diff --git a/js/result_analyzer.js b/js/result_analyzer.js
index b526cab..fec5b8c 100644
--- a/js/result_analyzer.js
+++ b/js/result_analyzer.js
@@ -204,11 +204,13 @@ function toggle_test_selection() {
}
function delete_tests() {
- let req = {
- action: "delete_tests",
- ids: get_selected_ids().join(",")
- };
- request(req).then(resp => {
- fetch_results(); // refresh results
- });
+ if (confirm("Biztosan törölni kívánja a kijelölt eredményeket?")) {
+ let req = {
+ action: "delete_tests",
+ ids: get_selected_ids().join(",")
+ };
+ request(req).then(resp => {
+ fetch_results(); // refresh results
+ });
+ }
}
\ No newline at end of file