prefix . AEROMC_FRIENDS_REPORTS_TABLE; $neu = (int) $wpdb->get_var("SELECT COUNT(*) FROM $table WHERE status = 'neu'"); $titel = 'AeroMC Fehler' . ($neu ? ' ' . $neu . '' : ''); add_menu_page('AeroMC Fehlerberichte', $titel, 'manage_options', 'aeromc-reports', 'aeromc_friends_reports_page', 'dashicons-sos', 81); }); function aeromc_friends_reports_page() { global $wpdb; if (!current_user_can('manage_options')) { return; } $table = $wpdb->prefix . AEROMC_FRIENDS_REPORTS_TABLE; $basis = admin_url('admin.php?page=aeromc-reports'); // Löschen (einzeln oder alle erledigten) if (isset($_POST['aeromc_loeschen']) && check_admin_referer('aeromc_reports')) { $id = (int) $_POST['aeromc_loeschen']; $wpdb->delete($table, ['id' => $id]); echo '

Bericht #' . esc_html($id) . ' gelöscht.

'; } if (isset($_POST['aeromc_status'], $_POST['aeromc_id']) && check_admin_referer('aeromc_reports')) { $status = in_array($_POST['aeromc_status'], ['neu', 'gelesen', 'erledigt'], true) ? $_POST['aeromc_status'] : 'gelesen'; $wpdb->update($table, ['status' => $status], ['id' => (int) $_POST['aeromc_id']]); } echo '

AeroMC Fehlerberichte

'; // Detailansicht if (isset($_GET['report'])) { $id = (int) $_GET['report']; $r = $wpdb->get_row($wpdb->prepare("SELECT * FROM $table WHERE id = %d", $id)); if (!$r) { echo '

Bericht nicht gefunden.

'; return; } if ($r->status === 'neu') { $wpdb->update($table, ['status' => 'gelesen'], ['id' => $id]); $r->status = 'gelesen'; } echo '

← Zur Liste

'; echo '

Bericht #' . esc_html($r->id) . '

'; echo ''; $zeile = function ($k, $v) { echo ''; }; $zeile('Eingegangen (UTC)', $r->created_at); $zeile('Spieler', $r->username ? $r->username . ' (' . $r->uuid . ')' : 'anonym'); $zeile('Launcher-Version', $r->launcher_version); $zeile('Minecraft', $r->mc_version); $zeile('Loader', trim($r->loader . ' ' . $r->loader_version)); $zeile('System', $r->system); $zeile('Status', $r->status); echo '
' . esc_html($k) . '' . esc_html($v !== null && $v !== '' ? $v : '–') . '
'; if ($r->kommentar) { echo '

Kommentar

' . esc_html($r->kommentar) . '
'; } $funde = json_decode((string) $r->funde, true) ?: []; echo '

Erkannte Ursachen (' . count($funde) . ')

'; if ($funde) { echo ''; } else { echo '

Keine – der Assistent konnte die Ursache nicht eindeutig erkennen.

'; } $mods = json_decode((string) $r->mods, true) ?: []; echo '

Mods (' . count($mods) . ')

'; if ($mods) { echo ''; foreach ($mods as $m) { echo ''; } echo '
DateiNameVersionAktiv
' . esc_html($m['datei'] ?? '') . '' . esc_html($m['name'] ?? '') . '' . esc_html($m['version'] ?? '') . '' . (!empty($m['aktiv']) ? 'ja' : 'nein') . '
'; } echo '

Bericht / Protokoll

'; echo '
'; wp_nonce_field('aeromc_reports'); echo ''; echo ''; echo ''; echo ''; echo '
'; return; } // Liste $rows = $wpdb->get_results("SELECT id, created_at, username, launcher_version, mc_version, loader, funde, kommentar, status FROM $table ORDER BY id DESC LIMIT 200"); if (!$rows) { echo '

Noch keine Fehlerberichte eingegangen.

'; return; } echo ''; foreach ($rows as $r) { $funde = json_decode((string) $r->funde, true) ?: []; $ursache = $funde ? ($funde[0]['titel'] ?? '') . (count($funde) > 1 ? ' (+' . (count($funde) - 1) . ')' : '') : '–'; $fett = $r->status === 'neu' ? 'font-weight:600' : ''; echo '' . '' . '' . '' . '' . '' . '' . ''; } echo '
#Eingegangen (UTC)SpielerLauncherMinecraftErkannte UrsacheKommentarStatus
#' . esc_html($r->id) . '' . esc_html($r->created_at) . '' . esc_html($r->username ?: 'anonym') . '' . esc_html($r->launcher_version) . '' . esc_html(trim($r->mc_version . ' ' . $r->loader)) . '' . esc_html($ursache) . '' . esc_html(mb_strimwidth((string) $r->kommentar, 0, 60, '…')) . '' . esc_html($r->status) . '
'; }