- 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(",")
 | 
			
		||||
@ -211,4 +212,5 @@ function delete_tests() {
 | 
			
		||||
        request(req).then(resp => {
 | 
			
		||||
            fetch_results(); // refresh results
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user