- Add/remove members to a group added
This commit is contained in:
parent
4ea8aca8c2
commit
550d60f71f
@ -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" => []
|
||||
];
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -1,7 +1,11 @@
|
||||
<?php
|
||||
|
||||
function explode_list(string $str) : array {
|
||||
if (trim($str) !== "") {
|
||||
return explode(",", str_replace(" ", "", $str));
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
function alter_array_contents(array &$a, $add, $remove) {
|
||||
|
@ -63,8 +63,14 @@ if (!get_autologin_state() || ($user_data["privilege"] !== PRIVILEGE_QUIZMASTER)
|
||||
<td><input type="text" id="group_editors"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="group_members">Tagok:</label></td>
|
||||
<td><textarea id="group_members" readonly></textarea></td>
|
||||
<td>
|
||||
<label for="group_members">Tagok:</label><br>
|
||||
<input type="button" value="+" onclick="open_member_change_window('add')">
|
||||
<input type="button" value="-" onclick="open_member_change_window('remove')">
|
||||
</td>
|
||||
<td>
|
||||
<textarea id="group_members" readonly></textarea>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<section style="display: block; text-align: right">
|
||||
@ -74,6 +80,16 @@ if (!get_autologin_state() || ($user_data["privilege"] !== PRIVILEGE_QUIZMASTER)
|
||||
</section>
|
||||
</section>
|
||||
|
||||
<section class="window" shown="false" id="member_manager_window">
|
||||
<section class="window-inner">
|
||||
<section id="member_manager_window_title">
|
||||
</section>
|
||||
<textarea id="add_remove_member_area"></textarea><br>
|
||||
<input type="button" value="OK" onclick="change_group_members()">
|
||||
<input type="button" value="Mégse" onclick="hide('member_manager_window')">
|
||||
</section>
|
||||
</section>
|
||||
|
||||
<script>
|
||||
list_all_groups();
|
||||
</script>
|
||||
|
@ -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.");
|
||||
|
@ -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");
|
||||
@ -123,3 +127,41 @@ function print_group_name(group_data) {
|
||||
}
|
||||
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");
|
||||
});
|
||||
}
|
@ -204,6 +204,7 @@ function toggle_test_selection() {
|
||||
}
|
||||
|
||||
function delete_tests() {
|
||||
if (confirm("Biztosan törölni kívánja a kijelölt eredményeket?")) {
|
||||
let req = {
|
||||
action: "delete_tests",
|
||||
ids: get_selected_ids().join(",")
|
||||
@ -212,3 +213,4 @@ function delete_tests() {
|
||||
fetch_results(); // refresh results
|
||||
});
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user