row = $row; $this->page = $page; $this->table = $page->table; } static function create($row, $page, $type) { switch ($type) { case "ban": return new BanInfo($row, $page); case "mute": return new MuteInfo($row, $page); case "warn": return new WarnInfo($row, $page); case "kick": return new KickInfo($row, $page); } return null; } function name() { return ucfirst($this->page->type); } function permanent() { return ((int)$this->row['until']) <= 0; } function punished_avatar($player_name, $row) { return $this->page->get_avatar($player_name, $row['uuid'], true, $this->history_link($player_name, $row['uuid']), $name_left = false); } function history_link($player_name, $uuid, $args = "") { return "$player_name"; } function moderator_avatar($row) { $banner_name = $this->page->get_banner_name($row); return $this->page->get_avatar($banner_name, $row['banned_by_uuid'], true, $this->history_link($banner_name, $row['banned_by_uuid'], "&staffhistory=1"), $name_left = false); } abstract function basic_info($row, $player_name); } class BanInfo extends Info { function basic_info($row, $player_name) { $page = $this->page; return array( $page->t("info_banned_player") => $this->punished_avatar($player_name, $row), $page->t("info_banned_by") => $this->moderator_avatar($row), $page->t("info_banned_reason") => $page->clean($row['reason']), $page->t("info_banned_when") => $page->millis_to_date($row['time']), $page->t("info_banned_expiry") => $page->expiry($row), $page->t("column_server") => $page->server($row), ); } } class MuteInfo extends Info { function basic_info($row, $player_name) { $page = $this->page; return array( $page->t("info_muted_player") => $this->punished_avatar($player_name, $row), $page->t("info_muted_by") => $this->moderator_avatar($row), $page->t("info_muted_reason") => $page->clean($row['reason']), $page->t("info_muted_when") => $page->millis_to_date($row['time']), $page->t("info_muted_expiry") => $page->expiry($row), $page->t("column_server") => $page->server($row), ); } } class WarnInfo extends Info { function name() { return $this->page->t("info_warn_name"); } function basic_info($row, $player_name) { $page = $this->page; return array( $page->t("info_warn_player") => $this->punished_avatar($player_name, $row), $page->t("info_warn_by") => $this->moderator_avatar($row), $page->t("info_warn_reason") => $page->clean($row['reason']), $page->t("info_warn_when") => $page->millis_to_date($row['time']), $page->t("info_warn_expiry") => $page->expiry($row), $page->t("column_server") => $page->server($row), ); } } class KickInfo extends Info { function basic_info($row, $player_name) { $page = $this->page; return array( $page->t("info_kick_player") => $this->punished_avatar($player_name, $row), $page->t("info_kick_by") => $this->moderator_avatar($row), $page->t("info_kick_reason") => $page->clean($row['reason']), $page->t("info_kick_when") => $page->millis_to_date($row['time']), $page->t("column_server") => $page->server($row), ); } } // check if info.php is requested, otherwise it's included if ((substr($_SERVER['SCRIPT_NAME'], -strlen("info.php"))) !== "info.php") { return; } isset($_GET['type'], $_GET['id']) && is_string($_GET['type']) && is_string($_GET['id']) or die($page->t("info_error_missingarg")); $type = $_GET['type']; $id = $_GET['id']; $page = new Page($type); ($page->type !== null) or die($page->t("info_error_unknown")); filter_var($id, FILTER_VALIDATE_INT) or die($page->t("info_error_invalidid")); $id = (int)$id; $type = $page->type; $table = $page->table; $sel = $page->get_selection($table); $query = "SELECT $sel FROM $table WHERE id=? LIMIT 1"; $st = $page->conn->prepare($query); if ($st->execute(array($id))) { ($row = $st->fetch()) or die($page->t("info_error_notfound1") . $type . $page->t("info_error_notfound2")); $st->closeCursor(); $player_name = $page->get_name($row['uuid']); ($player_name !== null) or die($page->t("info_error_notplayer")); $info = Info::create($row, $page, $type); $name = $info->name(); $permanent = $info->permanent(); $page->name = $page->title = "$name #$id"; $page->print_title(); $header = $page->name; if (!($info instanceof KickInfo)) { $style = 'style="margin-left: 13px; font-size: 16px;"'; $active = $page->active($row); if ($active === true) { $header .= "" . $page->t("info_tag_active") . ""; if ($permanent) { $header .= "" . $page->t("info_tag_permanent") . ""; } } else { $header .= "" . $page->t("info_tag_inactive") . ""; } } $page->print_header(true, $header); $map = $info->basic_info($row, $player_name); $permanent_val = $info->page->permanent[$type]; $page->table_begin(); foreach ($map as $key => $val) { if ($permanent && ($key === $page->t("info_banned_expiry") || $key === $page->t("info_muted_expiry") || $key === $page->t("info_warn_expiry")) && $val === $permanent_val ) { // skip "Expires" row if punishment is permanent continue; } echo "