Merge branch 'sportsmanager2-dev' into sportsmanager2-issue244

This commit is contained in:
MarvinF
2026-02-03 19:02:23 +01:00
committed by GitHub
2 changed files with 53 additions and 55 deletions
@@ -112,27 +112,58 @@ function renderTemplate($template, $vars = []): string
); );
} }
function CSVfromArray($rows,$dateiname) function exportCSV(array $rows, string $dateiname): void
{ {
$dateiname = bereinigterDateiname($dateiname); if (empty($rows)) {
ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind // Keine Daten → nichts exportieren
Header("Content-Type: text/x-csv"); return;
Header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
Header('Content-Disposition: attachment; filename="' . $dateiname . '"');
Header("Pragma: no-cache");
$data = "";
$trennzeichen = ";";
$header = "";
$header .= implode(';', array_keys($rows[0]));
foreach ($rows as $row) {
$data .= implode(';', $row)."\n";
} }
echo $header . "\n" . utf8_decode(trim($data)); // Dateiname absichern
$dateiname = bereinigterDateiname($dateiname);
die(); // Output Buffer nur beenden, wenn aktiv
if (ob_get_level() > 0) {
ob_end_clean();
}
// CSV-Header für Browser
header('Content-Type: text/csv; charset=UTF-8');
header('Content-Disposition: attachment; filename="' . $dateiname . '"; filename*=UTF-8\'\'' . rawurlencode($dateiname));
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');
// BOM für Excel
echo "\xEF\xBB\xBF";
// Stream öffnen
$out = fopen('php://output', 'w');
$delimiter = ';';
$enclosure = '"';
$escape = '\\';
// Header-Zeile: keys aus erstem Datensatz (Array oder stdClass)
$firstRow = $rows[0] instanceof stdClass ? (array) $rows[0] : $rows[0];
$header = array_keys($firstRow);
fputcsv($out, $header, $delimiter, $enclosure, $escape);
// Datenzeilen
foreach ($rows as $row) {
$rowArray = $row instanceof stdClass ? (array) $row : $row;
// Sicherstellen, dass alle Header-Spalten vorhanden sind
$line = [];
foreach ($header as $key) {
$line[] = $rowArray[$key] ?? '';
}
fputcsv($out, $line, $delimiter, $enclosure, $escape);
}
fclose($out);
exit;
} }
function adminUebersicht(): void function adminUebersicht(): void
@@ -5062,7 +5093,7 @@ function adminEditSpielverlegung(): void
$zeile++; $zeile++;
} }
CSVfromArray($rows,"Spielverlegungen.csv"); exportCSV($rows,"Spielverlegungen.csv");
} }
function adminSpielverlegungMailen(): void function adminSpielverlegungMailen(): void
@@ -12261,41 +12292,8 @@ function adminBegegnungenExportForm(): void
} }
$dateiname .= ".csv"; $dateiname .= ".csv";
$dateiname = bereinigterDateiname($dateiname);
ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind
Header("Content-Type: text/x-csv");
Header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
Header('Content-Disposition: attachment; filename="' . $dateiname . '"');
Header("Pragma: no-cache");
$data = ""; exportCSV($rows, $dateiname);
$trennzeichen = ";";
$spalte = 0;
$header = "";
foreach ($rows[0] as $field => $value) {
if ($spalte != 0) {
$header .= $trennzeichen;
}
$header .= $field;
$spalte++;
}
foreach ($rows as $row) {
$line = '';
$spalte = 0;
foreach ($row as $value) {
if ($spalte != 0) {
$line .= $trennzeichen;
}
$line .= $value;
$spalte++;
}
$data .= trim($line) . "\n";
}
echo $header . "\n" . utf8_decode($data);
die();
} }
function adminEditTurnier(): void function adminEditTurnier(): void
@@ -10323,14 +10323,14 @@ class HTML_sportsmanager_admin
:</label> :</label>
</td> </td>
<td nowrap> <td nowrap>
<?php if ($neuer_eintrag) {$row->spiel_nr = "";} ?> <?php $spiel_nr = ($neuer_eintrag || $row == null) ? null : ($row->spiel_nr ?? null); ?>
<select class="uk-select uk-form-width-xsmall" id="game_nr" size="1" <select class="uk-select uk-form-width-xsmall" id="game_nr" size="1"
title="Spielnummer (optional)" name="spiel_nr"> title="Spielnummer (optional)" name="spiel_nr">
<option value=""></option> <option value=""></option>
<?php <?php
for ($i = 1; $i <= 99; $i++) for ($i = 1; $i <= 99; $i++)
{ {
echo "<option value=\"" . $i . "\"" . ($row->spiel_nr == $i ? " selected" : "") . ">" . $i . "</option>"; echo "<option value=\"" . $i . "\"" . ($spiel_nr == $i ? " selected" : "") . ">" . $i . "</option>";
} }
?> ?>
</select> </select>