run( "SELECT TimeCreated FROM InviteTickets WHERE CreatedBy = :UserID AND TimeCreated + 5 > UNIX_TIMESTAMP()", [":UserID" => SESSION["user"]["id"]] ); if($LastTicket->rowCount()) { $Alert = ["Text" => "Please wait ".GetReadableTime($LastTicket->fetchColumn(), ["RelativeTime" => "5 seconds"])." before creating a new invite ticket", "Color" => "danger"]; } else { $Ticket = sprintf("PolygonTicket(%s)", bin2hex(random_bytes(16))); Database::singleton()->run( "INSERT INTO InviteTickets (Ticket, TimeCreated, CreatedBy) VALUES (:Ticket, UNIX_TIMESTAMP(), :UserID)", [":Ticket" => $Ticket, ":UserID" => SESSION["user"]["id"]] ); Users::LogStaffAction(sprintf( "[ Create Invite Ticket ] %s created an invite ticket with the key \"%s\"", SESSION["user"]["username"], $Ticket )); $Alert = ["Text" => sprintf("Your key has been created! %s", $Ticket), "Color" => "success"]; } } $Page = $_GET["Page"] ?? 1; $TicketCount = Database::singleton()->run("SELECT COUNT(*) FROM InviteTickets")->fetchColumn(); $Pagination = Pagination($Page, $TicketCount, 20); $Tickets = Database::singleton()->run( "SELECT InviteTickets.*, Users1.username AS CreatedByName, Users2.username AS UsedByName FROM InviteTickets INNER JOIN users AS Users1 ON Users1.id = InviteTickets.CreatedBy LEFT JOIN users AS Users2 ON Users2.id = InviteTickets.UsedBy ORDER BY TimeCreated DESC LIMIT 20 OFFSET :Offset", [":Offset" => $Pagination->Offset] ); // idk y i decided to code this on my 15th birthday for mercury but i did $InviteTree = []; function GenerateTree($UserName, $UserID, &$Node) { $CurrentNode = ["UserName" => $UserName, "UserID" => $UserID, "Invited" => []]; // $query = $pdo->prepare("SELECT users.username, users.id FROM invitekeys INNER JOIN users ON users.id = usedById WHERE creatorId = :uid AND keyUsed"); // $query->bindParam(":uid", $UserID, PDO::PARAM_INT); // $query->execute(); $query = Database::singleton()->run( "SELECT UsedBy.username, UsedBy.id FROM InviteTickets INNER JOIN users AS UsedBy ON UsedBy.id = InviteTickets.UsedBy WHERE CreatedBy = :UserID ORDER BY id DESC", [":UserID" => $UserID] ); while ($row = $query->fetch(PDO::FETCH_OBJ)) { GenerateTree($row->username, $row->id, $CurrentNode["Invited"]); } $Node[] = $CurrentNode; } function DisplayTree($Tree) { echo ""; } $RootUsers = Database::singleton()->run("SELECT id, username FROM users WHERE keyUsed NOT LIKE \"PolygonTicket%\" OR keyUsed IS NULL"); while ($RootUser = $RootUsers->fetch(PDO::FETCH_OBJ)) { GenerateTree($RootUser->username, $RootUser->id, $InviteTree); } $pageBuilder = new PageBuilder(["title" => "Invite Tickets"]); $pageBuilder->buildHeader(); ?>
px-2 py-1" role="alert">

Invitations

fetch(\PDO::FETCH_OBJ)) { ?> UsedBy == NULL) { ?>
Ticket Creator Used By Created
Ticket)?> CreatedByName?> No One UsedByName?> TimeCreated)?>
Pages > 1) { ?>
buildFooter(); ?>