- 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
|
// Create Group from array
|
||||||
static function fromArray(GroupMgr &$groupMgr, array $a): Group
|
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
|
// Convert Group to array
|
||||||
@ -170,6 +171,16 @@ class Group extends AutoStoring
|
|||||||
$this->storeMods(); // store changes
|
$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.
|
// Include/exclude games.
|
||||||
function changeGames(array $gameids_add, array $gameids_remove): void
|
function changeGames(array $gameids_add, array $gameids_remove): void
|
||||||
{
|
{
|
||||||
@ -266,7 +277,7 @@ class GroupMgr
|
|||||||
"owner" => $owner,
|
"owner" => $owner,
|
||||||
"description" => $description,
|
"description" => $description,
|
||||||
"editors" => [],
|
"editors" => [],
|
||||||
"members" => [],
|
"users" => [],
|
||||||
"games" => []
|
"games" => []
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -221,4 +221,10 @@ class UserMgr
|
|||||||
$qb = $this->db->createQueryBuilder();
|
$qb = $this->db->createQueryBuilder();
|
||||||
return array_map(fn($c): string => $c["nickname"], $qb->select(["nickname"])->getQuery()->fetch());
|
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
|
<?php
|
||||||
|
|
||||||
function explode_list(string $str) : array {
|
function explode_list(string $str) : array {
|
||||||
return explode(",", str_replace(" ", "", $str));
|
if (trim($str) !== "") {
|
||||||
|
return explode(",", str_replace(" ", "", $str));
|
||||||
|
} else {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function alter_array_contents(array &$a, $add, $remove) {
|
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>
|
<td><input type="text" id="group_editors"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><label for="group_members">Tagok:</label></td>
|
<td>
|
||||||
<td><textarea id="group_members" readonly></textarea></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>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<section style="display: block; text-align: right">
|
<section style="display: block; text-align: right">
|
||||||
@ -74,6 +80,16 @@ if (!get_autologin_state() || ($user_data["privilege"] !== PRIVILEGE_QUIZMASTER)
|
|||||||
</section>
|
</section>
|
||||||
</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>
|
<script>
|
||||||
list_all_groups();
|
list_all_groups();
|
||||||
</script>
|
</script>
|
||||||
|
@ -322,10 +322,8 @@ $requester_nickname = $is_quizmaster ? "*" : $nickname; // "*" means every game
|
|||||||
|
|
||||||
function create_update_game(ReqHandler &$rh, array $params): array
|
function create_update_game(ReqHandler &$rh, array $params): array
|
||||||
{
|
{
|
||||||
global $userMgr;
|
|
||||||
global $user;
|
global $user;
|
||||||
global $nickname;
|
global $nickname;
|
||||||
global $is_quizmaster;
|
|
||||||
global $gameMgr;
|
global $gameMgr;
|
||||||
|
|
||||||
$update = $params[ReqHandler::ACTION_KEY] === "update_game";
|
$update = $params[ReqHandler::ACTION_KEY] === "update_game";
|
||||||
@ -340,20 +338,8 @@ function create_update_game(ReqHandler &$rh, array $params): array
|
|||||||
$description = $data["description"];
|
$description = $data["description"];
|
||||||
$contributors = explode_list($data["contributors"] ?? "");
|
$contributors = explode_list($data["contributors"] ?? "");
|
||||||
$owner = $update ? trim($data["owner"] ?? $nickname) : $nickname;
|
$owner = $update ? trim($data["owner"] ?? $nickname) : $nickname;
|
||||||
$groups = explode_list($data["groups"] ?? "");
|
|
||||||
$properties = $data["properties"] ?? [];
|
$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
|
||||||
$result = [];
|
$result = [];
|
||||||
|
|
||||||
@ -364,21 +350,6 @@ function create_update_game(ReqHandler &$rh, array $params): array
|
|||||||
$game = $gameMgr->getGame($gameid); // fetch game
|
$game = $gameMgr->getGame($gameid); // fetch game
|
||||||
|
|
||||||
if (($game !== null) && $game->isUserContributorOrOwner($nickname) || $user->hasQuizmasterPrivilege()) {
|
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
|
// disable autostoring
|
||||||
$game->disableAutoStoring();
|
$game->disableAutoStoring();
|
||||||
|
|
||||||
@ -644,31 +615,13 @@ function create_update_user(ReqHandler &$rh, array $params): string
|
|||||||
$realname = trim($params["realname"]);
|
$realname = trim($params["realname"]);
|
||||||
$privilege = trim($params["privilege"]);
|
$privilege = trim($params["privilege"]);
|
||||||
|
|
||||||
// $groupids = get_groupids_by_compounds($groups); // convert group compounds to _ids FIXME!!!
|
|
||||||
|
|
||||||
$success = false;
|
$success = false;
|
||||||
if (($target_nickname !== "")) {
|
if (($target_nickname !== "")) {
|
||||||
if ((!$update) && ($password !== "")) { // CREATE
|
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
|
} else if ($update) { // UPDATE
|
||||||
$tuser = $userMgr->getUser($target_nickname); // load user data
|
$tuser = $userMgr->getUser($target_nickname); // load user data
|
||||||
if ($tuser !== null) {
|
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
|
// further field update
|
||||||
$tuser->disableAutoStoring();
|
$tuser->disableAutoStoring();
|
||||||
$tuser->setRealname($realname);
|
$tuser->setRealname($realname);
|
||||||
@ -727,6 +680,26 @@ function get_game_groups(ReqHandler &$rh, array $params): array {
|
|||||||
return $groups;
|
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
|
function import_users_from_csv(ReqHandler &$rh, array $params): string
|
||||||
{
|
{
|
||||||
if (!isset($_FILES["users_table"])) {
|
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("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("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("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(["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.");
|
$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) {
|
function create_edit_group(group = null) {
|
||||||
let update = group !== null;
|
let update = group !== null;
|
||||||
|
|
||||||
|
EDITED_GROUP = group;
|
||||||
|
|
||||||
let groupnameF = document.getElementById("groupname");
|
let groupnameF = document.getElementById("groupname");
|
||||||
let group_descriptionF = document.getElementById("group_description");
|
let group_descriptionF = document.getElementById("group_description");
|
||||||
let submit_btn = document.getElementById("group_editor_submit_btn");
|
let submit_btn = document.getElementById("group_editor_submit_btn");
|
||||||
@ -122,4 +126,42 @@ function print_group_name(group_data) {
|
|||||||
record += "#" + group_data["_id"];
|
record += "#" + group_data["_id"];
|
||||||
}
|
}
|
||||||
return record;
|
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,11 +204,13 @@ function toggle_test_selection() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function delete_tests() {
|
function delete_tests() {
|
||||||
let req = {
|
if (confirm("Biztosan törölni kívánja a kijelölt eredményeket?")) {
|
||||||
action: "delete_tests",
|
let req = {
|
||||||
ids: get_selected_ids().join(",")
|
action: "delete_tests",
|
||||||
};
|
ids: get_selected_ids().join(",")
|
||||||
request(req).then(resp => {
|
};
|
||||||
fetch_results(); // refresh results
|
request(req).then(resp => {
|
||||||
});
|
fetch_results(); // refresh results
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user