conn->prepare("SELECT COUNT(*) AS count FROM $table WHERE uuid=:uuid");
        $count_st->bindParam(":uuid", $uuid, PDO::PARAM_STR);
        if ($count_st->execute() && ($row = $count_st->fetch()) !== null) {
            $counts[$table] = $row['count'];
        }
        $st = $page->conn->prepare("SELECT * FROM $table WHERE uuid=:uuid ORDER BY time");
        $st->bindParam(":uuid", $uuid, PDO::PARAM_STR);
        // Incompatible with pager as rows are usort()'d
        // $st->bindParam(':limit', $limit, PDO::PARAM_INT);
        if ($st->execute()) {
            while ($row = $st->fetch(PDO::FETCH_ASSOC)) {
                $row['__table__'] = $table;
                array_push($array, $row);
            }
        }
    }
    /**
     * usort() function for rows in the database
     * @param PDORow $a
     * @param PDORow $b
     * @return int
     */
    static function cmp_row_date($a, $b) {
        $a = $a['time'];
        $b = $b['time'];
        if ($a === $b) {
            return 0;
        }
        return ($a < $b) ? 1 : -1;
    }
}
$page = new Page("history");
if (!isset($_GET['uuid'])) {
    die("Missing arguments (uuid).");
}
$uuid = $_GET['uuid'];
$name = $page->get_name($uuid);
if ($name === null) {
    die("Player not found in database.");
}
$page->name = "Recent Punishments for $name";
$page->print_title();
$page->print_page_header();
try {
    $all = array();
    $counts = array();
    History::push($page, $all, 'bans', $uuid, $counts);
    History::push($page, $all, 'mutes', $uuid, $counts);
    History::push($page, $all, 'warnings', $uuid, $counts);
    History::push($page, $all, 'kicks', $uuid, $counts);
    $total = 0;
    foreach ($counts as $count) {
        $total += $count;
    }
    usort($all, array("litebans\\History", "cmp_row_date"));
    if (!empty($all)) {
        $page->table_begin();
        $page->table_print_headers(array("Type", "Player", "Moderator", "Reason", "Date", "Expires"));
        $offset = 0;
        $limit = $page->settings->limit_per_page;
        if ($page->settings->show_pager) {
            $current_page = $page->page - 1;
            $offset = ($limit * $current_page);
            $limit += $offset;
        }
        $i = 0;
        foreach ($all as $row) {
            $i++;
            if ($page->settings->show_pager && $i < $offset) {
                continue;
            }
            if ($i > $limit) break;
            $type = $row['__table__'];
            $page->set_info($page->type_info($type));
            $style = 'style="font-size: 13px;"';
            $label_type = $page->type;
            $label_name = Info::create($row, $page, $label_type)->name(); //ucfirst($label_type);
            $label = "$label_name";
            $page->print_table_rows($row, array(
                'Type'      => $label,
                'Player'    => $page->get_avatar($name, $row['uuid']),
                'Moderator' => $page->get_avatar($page->get_banner_name($row), $row['banned_by_uuid']),
                'Reason'    => $page->clean($row['reason']),
                'Date'      => $page->millis_to_date($row['time']),
                'Expires'   => $page->expiry($row),
            ));
        }
        $page->table_end();
        // print pager
        if ($page->settings->show_pager) {
            $page->name = "history";
            $page->print_pager($total, "&uuid=$uuid");
        }
    } else {
        echo "No punishments found.
";
    }
    if (isset($_GET['from'])) {
        // sanitize $_GET['from']
        $info = $page->type_info($_GET['from']);
        if ($info['type'] !== null) {
            $title = $info['title'];
            $href = lcfirst($title) . ".php";
            echo "Return to $title";
        }
    }
    $page->print_footer();
} catch (PDOException $ex) {
    die($ex->getMessage());
}