- gameid type inconsistency in Test fixed

- delete_tests action added
This commit is contained in:
Wiesner András 2024-09-25 16:04:38 +02:00
parent bd7079bded
commit 4ea8aca8c2
6 changed files with 34 additions and 5 deletions

View File

@ -371,7 +371,7 @@ class GroupMgr
// Check if a user has access to a game, i.e. there's at least a single group that contains both the user and the game.
function doesUserAccessGame(string $gameid, string $nickname): bool {
$intersection = $this->db->findOneBy([["games", "CONTAINS", $gameid], "AND", ["users", "CONTAINS", $nickname]]);
$intersection = $this->db->findOneBy([["games", "CONTAINS", (int)$gameid], "AND", ["users", "CONTAINS", $nickname]]);
return $intersection !== null;
}

View File

@ -59,7 +59,7 @@ class Test extends AutoStoring
// ---------
public int $id; // ID
public string $gameId; // ID of associated game
public int $gameId; // ID of associated game
public string $gameName; // Name of the associated game
public string $nickname; // Associated user's nickname
public string $state; // State of the test (ongoing/concluded)
@ -142,6 +142,8 @@ class Test extends AutoStoring
$this->startTime = $now;
if ($this->timeLimited) {
$this->endLimitTime = $now + $gp["time_limit"];
} else {
$this->endLimitTime = -1; // dummy value, not used, since timeLimited is false
}
$this->repeatable = $gp["repeatable"];
@ -151,7 +153,7 @@ class Test extends AutoStoring
}
// auto-conclude time-constrained test if expired
if ($this->isOngoing() && ($this->endLimitTime <= time())) {
if ($this->timeLimited && $this->isOngoing() && ($this->endLimitTime <= time())) {
$this->concludeTest();
}
}
@ -261,7 +263,7 @@ class Test extends AutoStoring
return $this->nickname;
}
public function getGameId(): string
public function getGameId(): int
{
return $this->gameId;
}

View File

@ -537,6 +537,15 @@ function generate_detailed_game_stats(ReqHandler &$rh, array $params): array
return $stats;
}
function delete_tests(ReqHandler &$rh, array $params): string {
global $testMgr;
$ids = explode_list(trim($params["ids"]));
foreach ($ids as $id) {
$testMgr->deleteTest($id);
}
return "OK";
}
$rh->add(["create_game", "update_game"], ["data"], PRIVILEGE_CREATOR, "create_update_game", RESP_JSON, "Create or update game.");
$rh->add("get_all_game_headers", [], PRIVILEGE_CREATOR, "get_all_game_headers", RESP_JSON, "Get all game headers.");
$rh->add("get_challenges", [], PRIVILEGE_CREATOR, "get_challenges", RESP_PLAIN, "Get game challenges.");
@ -544,6 +553,7 @@ $rh->add("delete_games", ["ids"], PRIVILEGE_CREATOR, "delete_games", RESP_PLAIN,
$rh->add("export_game_file_csv", ["gameid"], PRIVILEGE_CREATOR, "export_game_file_csv", RESP_NONE, "Export game CSV file.");
$rh->add("get_results_by_gameid", ["gameid"], PRIVILEGE_CREATOR, "get_player_results_by_gameid", RESP_JSON, "Get game results.");
$rh->add("generate_detailed_stats", ["gameid", "testids"], PRIVILEGE_CREATOR, "generate_detailed_game_stats", RESP_JSON, "Generate detailed game stats.");
$rh->add("delete_tests", ["ids"], PRIVILEGE_CREATOR, "delete_tests", RESP_PLAIN, "Delete tests.");
// execute processing if user is a creator
if ($privilege === PRIVILEGE_CREATOR) {

View File

@ -110,7 +110,7 @@ function fetch_results() {
});
}
function generate_report() {
function get_selected_ids() {
let testids = [];
let game_selectChks = document.getElementsByName("game_select");
game_selectChks.forEach((chk) => {
@ -118,6 +118,11 @@ function generate_report() {
testids.push(chk.record["_id"]);
}
});
return testids;
}
function generate_report() {
let testids = get_selected_ids();
let req = {
action: "generate_detailed_stats",
@ -196,4 +201,14 @@ function toggle_test_selection() {
game_selectChks.forEach((chk) => {
chk.checked = !chk.checked;
});
}
function delete_tests() {
let req = {
action: "delete_tests",
ids: get_selected_ids().join(",")
};
request(req).then(resp => {
fetch_results(); // refresh results
});
}

View File

@ -48,6 +48,7 @@ $privilege = $user_data["privilege"];
<?php if ($privilege != PRIVILEGE_PLAYER) { ?>
<section id="action_panel" class="info-pane-element">
<?php if (($privilege === PRIVILEGE_CREATOR) || ($privilege === PRIVILEGE_QUIZMASTER)) { ?>
<input type="button" value="Nyitólap" onclick="open_in_content_frame('default_frame.php')">
<input type="button" value="Tartalmak kezelése" onclick="open_in_content_frame('game_manager_frame.php')">
<?php } ?>
<?php if ($privilege === PRIVILEGE_QUIZMASTER) { ?>

View File

@ -49,6 +49,7 @@ if (!is_user_contributor_to_game($game_id, $user_data["nickname"]) && ($user_dat
<input type="text" placeholder="Rendezés" id="orderby" style="font-family: 'Monaco', monospace; width: 50em;">
<input type="button" value="Szűrés" onclick="fetch_results()">
<input type="button" value="Jelentés előállítása" onclick="generate_report()">
<input type="button" value="Kijelöltek törlése" onclick="delete_tests()">
</section>
<section>
<section id="table_section">