From 9541bc0652b3a60af847d964417772bb9e092c08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Meyer?= Date: Fri, 28 Aug 2026 15:52:39 +0200 Subject: [PATCH 1/2] Export von kompletten Ligen im json-Format --- .../components/com_sportsmanager/admin.php | 606 ++++++++++-------- .../views/sportsmanager/view_admin.php | 10 +- 2 files changed, 347 insertions(+), 269 deletions(-) diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index f19d03b..120fe0b 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -166,6 +166,32 @@ function exportCSV(array $rows, string $dateiname): void exit; } +function exportJSON(array $rows, string $dateiname): void +{ + if (empty($rows)) { + // Keine Daten → nichts exportieren + return; + } + + // Dateiname absichern + $dateiname = bereinigterDateiname($dateiname); + + // Output Buffer nur beenden, wenn aktiv + if (ob_get_level() > 0) { + ob_end_clean(); + } + + // JSON-Header für Browser + header('Content-Type: application/json; 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'); + + echo json_encode($rows, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); + exit; +} + function adminUebersicht(): void { $db = getDatabase(); @@ -12969,6 +12995,294 @@ function adminBegegnungenExportForm(): void HTML_sportsmanager_admin::adminBegegnungenExport($veranstaltung,$saison); } +function sportsmanagerExportErmittleTeams($db, int $veranstaltungId): array +{ + $query = "SELECT t2.verein_id, t2.vereinsname AS Verein, t2.vereinssitz AS Vereinssitz," + . "\n t2.vereinssitz_ortsteil AS Vereinssitz_Ortsteil, t2.url AS Vereinswebseite," + . "\n t1.team_id, t1.teamname AS Team, t3.bezeichnung AS Liga, t1.tischtyp AS Tisch," + . "\n t4.name AS Spielort, t4.strasse AS Spielort_Strasse, t4.plz AS Spielort_PLZ," + . "\n t4.ortsname AS Spielort_Ort, t4.ortsteil AS Spielort_Ortsteil, t4.telefon AS Spielort_Telefon," + . "\n t4.url AS Spielort_Url, t1.trainingstage AS Trainingstage, t4.ruhetage AS Spielort_Ruhetage" + . "\n FROM #__sportsmanager_team AS t1" + . "\n LEFT JOIN #__sportsmanager_verein AS t2 ON t1.verein_id = t2.verein_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t3 ON t1.veranstaltung_id = t3.veranstaltung_id" + . "\n LEFT JOIN #__sportsmanager_spielort AS t4 ON t1.heimspielort_id = t4.spielort_id" + . "\n WHERE t1.veranstaltung_id = " . $veranstaltungId . ";"; + + $rows = loadObjectList($db, $query); + + foreach ($rows AS $value) + { + $query = "SELECT * FROM #__sportsmanager_vereinsansprechpartner" + . "\n WHERE verein_id = ".$value->verein_id." ORDER BY vereinsansprechpartner_id;"; + $ansprechpartner = loadObjectList($db, $query); + for ($i = 0; $i <= 2; $i++){ + $index = $i + 1; + if (isset($ansprechpartner[$i])){ + $property = "VAP{$index}_Nachname"; + $value->$property = $ansprechpartner[$i]->nachname; + $property = "VAP{$index}_Vorname"; + $value->$property = $ansprechpartner[$i]->vorname; + $property = "VAP{$index}_Telefon"; + $value->$property = $ansprechpartner[$i]->telefon; + $property = "VAP{$index}_Mobil"; + $value->$property = $ansprechpartner[$i]->mobil; + $property = "VAP{$index}_EMail"; + $value->$property = $ansprechpartner[$i]->email; + } else { + $property = "VAP{$index}_Nachname"; + $value->$property = ""; + $property = "VAP{$index}_Vorname"; + $value->$property = ""; + $property = "VAP{$index}_Telefon"; + $value->$property = ""; + $property = "VAP{$index}_Mobil"; + $value->$property = ""; + $property = "VAP{$index}_EMail"; + $value->$property = ""; + } + } + + $query = "SELECT * FROM #__sportsmanager_teamansprechpartner" + . "\n WHERE team_id = ".$value->team_id." ORDER BY kontaktperson_id;"; + $ansprechpartner = loadObjectList($db, $query); + for ($i = 0; $i <= 1; $i++){ + $index = $i + 1; + if (isset($ansprechpartner[$i])){ + $property = "TAP{$index}_Nachname"; + $value->$property = $ansprechpartner[$i]->nachname; + $property = "TAP{$index}_Vorname"; + $value->$property = $ansprechpartner[$i]->vorname; + $property = "TAP{$index}_Telefon"; + $value->$property = $ansprechpartner[$i]->telefon; + $property = "TAP{$index}_Mobil"; + $value->$property = $ansprechpartner[$i]->mobil; + $property = "TAP{$index}_EMail"; + $value->$property = $ansprechpartner[$i]->email; + } else { + $property = "TAP{$index}_Nachname"; + $value->$property = ""; + $property = "TAP{$index}_Vorname"; + $value->$property = ""; + $property = "TAP{$index}_Telefon"; + $value->$property = ""; + $property = "TAP{$index}_Mobil"; + $value->$property = ""; + $property = "TAP{$index}_EMail"; + $value->$property = ""; + } + } + } + + return $rows; +} + +function sportsmanagerExportErmittleSpieler($db, int $veranstaltungId): array +{ + $query = " + SELECT t5.bezeichnung AS Veranstaltung, t2.vereinsname AS Verein, t1.teamname AS Team, t4.spielernr AS Passnummer, + t4.nachname AS Nachname, t4.vorname AS Vorname, t4.geburtsjahr AS Geburtsjahr, LOWER(LEFT(geschlecht, 1)) AS Geschlecht, + t6.saisonbezeichnung AS Saison, t3.erster_spieltag AS Spielberechtigt_von, t3.letzter_spieltag AS Spielberechtigt_bis + FROM #__sportsmanager_team AS t1 + LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t1.veranstaltung_id = t5.veranstaltung_id + LEFT JOIN #__sportsmanager_verein AS t2 ON t1.verein_id = t2.verein_id + LEFT JOIN #__sportsmanager_mitglied_von_team AS t3 ON t1.team_id = t3.team_id + LEFT JOIN #__sportsmanager_spieler AS t4 ON t3.spieler_id = t4.spieler_id + LEFT JOIN #__sportsmanager_saison AS t6 ON t5.saison_id = t6.saison_id + WHERE t1.veranstaltung_id = " . $veranstaltungId . "; + "; + + return loadObjectList($db, $query); +} + +function sportsmanagerExportErmittleSpielplan($db, int $veranstaltungId): array +{ + $query = " + SELECT t1.begegnung_id AS ID, "; + if (einstellungswert("verbands_kuerzel") == "STFV"){ + $query .= " + CONCAT(t5.saisonbezeichnung,LPAD(t4.kategorie,2,'0'),LPAD(t1.spieltag,2,'0'),LPAD(IFNULL(t1.spiel_nr, '0'),2,'0')) AS stfv_id, "; + } + $query .= " + t5.saisonbezeichnung AS Saison, + t4.bezeichnung AS Liga, t1.spieltag AS Spieltag_Nr, t1.spiel_nr AS Spiel_Nr, + t1.zeitpunkt AS Spielstart, '' AS verlegt_auf, t2.teamname AS Heim, t3.teamname AS Gast, + t1.heim_punkte AS Heim_Tore, t1.gast_punkte AS Gast_Tore, + t1.heim_spielpunkte AS Heim_Satzpunkte, t1.gast_spielpunkte AS Gast_Satzpunkte + FROM #__sportsmanager_begegnung AS t1 + LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id + LEFT JOIN #__sportsmanager_team AS t3 ON t1.gast_team_id = t3.team_id + LEFT JOIN #__sportsmanager_veranstaltung AS t4 ON t2.veranstaltung_id = t4.veranstaltung_id + LEFT JOIN #__sportsmanager_saison AS t5 ON t4.saison_id = t5.saison_id + WHERE t4.veranstaltung_id = " . $veranstaltungId . " + ORDER BY t4.veranstaltung_id, t1.spieltag, t1.spiel_nr, t1.zeitpunkt; + "; + $rows = loadObjectList($db, $query); + + // Spielverlegungen + foreach ($rows as $value) { + + $beantragt = []; + $genehmigt = []; + + // Spielverlegung vorgeschlagen + $query = " + SELECT t1.zeitpunkt AS Termin_alt + FROM #__sportsmanager_begegnung_historie AS t1 + WHERE begegnung_id = " . $value->ID . " + AND aktion IN (2) + ORDER BY eingetragen ASC LIMIT 1; + "; + $beantragt = loadObjectList($db, $query); + if (!empty($beantragt)) + $value->Spielstart = $beantragt[0]->Termin_alt; + + // Spielverlegung vorgeschlagen + $query = " + SELECT t1.zeitpunkt AS Termin_neu + FROM #__sportsmanager_begegnung_historie AS t1 + WHERE begegnung_id = " . $value->ID . " + AND aktion IN (1) + ORDER BY eingetragen DESC LIMIT 1; + "; + $genehmigt = loadObjectList($db, $query); + if (!empty($genehmigt)) + $value->verlegt_auf = $genehmigt[0]->Termin_neu; + } + + return $rows; +} + +function sportsmanagerExportErgaenzeSpielberichte($db, int $veranstaltungId, array $rows): array +{ + // Modus ermitteln + $query = " + SELECT t2.* FROM #__sportsmanager_veranstaltung AS t1 + LEFT JOIN #__sportsmanager_teamspiel_modus AS t2 ON t1.modus_id = t2.teamspiel_modus_id + WHERE t1.veranstaltung_id = " . $veranstaltungId . " + "; + + $spielmodus = loadObjectList($db, $query); + $Anzahl_Saetze = count(explode(",", $spielmodus[0]->modus)); + + + foreach ($rows as $value) { + + $Bestaetigt = []; + $Bestaetigt = []; + $Moderator = []; + $value->vorgeschlagen_um = ""; + $value->vorgeschlagen_von = ""; + $value->bestaetigt_um = ""; + $value->bestaetigt_von = ""; + $value->moderator_um = ""; + $value->moderator_von = ""; + + // Endergebnis vorgeschlagen + $query = " + SELECT t1.eingetragen AS gespeichert_um, + t2.name AS gespeichert_von_user, + t3.teamname AS gespeichert_von_team + FROM #__sportsmanager_begegnung_historie AS t1 + LEFT JOIN #__users AS t2 ON t1.user_id = t2.id + LEFT JOIN #__sportsmanager_team AS t3 ON t1.team_id = t3.team_id + WHERE begegnung_id = " . $value->ID . " + AND aktion IN (6) + ORDER BY eingetragen DESC LIMIT 1; + "; + $Vorgeschlagen = loadObjectList($db, $query); + if (!empty($Vorgeschlagen)) { + $value->vorgeschlagen_um = $Vorgeschlagen[0]->gespeichert_um; + if (!empty($Vorgeschlagen[0]->gespeichert_von_user)) + $value->vorgeschlagen_von = $Vorgeschlagen[0]->gespeichert_von_user; + if (!empty($Vorgeschlagen[0]->gespeichert_von_team)) + $value->vorgeschlagen_von = $Vorgeschlagen[0]->gespeichert_von_team; + } + + // Endergebnis bestätigen Gegner + $query = " + SELECT t1.eingetragen AS gespeichert_um, + t2.name AS gespeichert_von_user, + t3.teamname AS gespeichert_von_team + FROM #__sportsmanager_begegnung_historie AS t1 + LEFT JOIN #__users AS t2 ON t1.user_id = t2.id + LEFT JOIN #__sportsmanager_team AS t3 ON t1.team_id = t3.team_id + WHERE begegnung_id = " . $value->ID . " + AND aktion IN (7) + ORDER BY eingetragen DESC LIMIT 1; + "; + $Bestaetigt = loadObjectList($db, $query); + if (!empty($Bestaetigt)) { + $value->bestaetigt_um = $Bestaetigt[0]->gespeichert_um; + if (!empty($Bestaetigt[0]->gespeichert_von_user)) + $value->bestaetigt_von = $Bestaetigt[0]->gespeichert_von_user; + if (!empty($Bestaetigt[0]->gespeichert_von_team)) + $value->bestaetigt_von = $Bestaetigt[0]->gespeichert_von_team; + } + + // Endergebnis bestätigen Moderator + $query = " + SELECT t1.eingetragen AS gespeichert_um, + t2.name AS gespeichert_von_user, + t3.teamname AS gespeichert_von_team + FROM #__sportsmanager_begegnung_historie AS t1 + LEFT JOIN #__users AS t2 ON t1.user_id = t2.id + LEFT JOIN #__sportsmanager_team AS t3 ON t1.team_id = t3.team_id + WHERE begegnung_id = " . $value->ID . " + AND aktion IN (8) + ORDER BY eingetragen DESC LIMIT 1; + "; + $Moderator = loadObjectList($db, $query); + if (!empty($Moderator)) { + $value->moderator_um = $Moderator[0]->gespeichert_um; + if (!empty($Moderator[0]->gespeichert_von_user)) + $value->moderator_von = $Moderator[0]->gespeichert_von_user; + if (!empty($Moderator[0]->gespeichert_von_team)) + $value->moderator_von = $Moderator[0]->gespeichert_von_team; + } + + // Spielbericht + $query = " + SELECT + t1.teamspiel_nummer AS Satz_Nr, + t3.spielernr AS Pass_Heim1, t4.spielernr AS Pass_Heim2, + t5.spielernr AS Pass_Gast1, t6.spielernr AS Pass_Gast2, + t1.teamspiel_heim_punkte AS Heim_Tore, t1.teamspiel_gast_punkte AS Gast_Tore, + t1.teamspiel_heim_spielpunkte AS Heim_Punkte, t1.teamspiel_gast_spielpunkte AS Gast_Punkte + FROM #__sportsmanager_teamspiel AS t1 + LEFT JOIN #__sportsmanager_begegnung AS t2 ON t1.begegnung_id = t2.begegnung_id + LEFT JOIN #__sportsmanager_spieler AS t3 ON t1.heim_spieler_1_id = t3.spieler_id + LEFT JOIN #__sportsmanager_spieler AS t4 ON t1.heim_spieler_2_id = t4.spieler_id + LEFT JOIN #__sportsmanager_spieler AS t5 ON t1.gast_spieler_1_id = t5.spieler_id + LEFT JOIN #__sportsmanager_spieler AS t6 ON t1.gast_spieler_2_id = t6.spieler_id + WHERE t1.begegnung_id = " . $value->ID . " + ORDER BY t1.teamspiel_nummer; + "; + + $spielbericht = loadObjectList($db, $query); + for ($i = 1; $i <= $Anzahl_Saetze; $i++) { + $variable = "S" . $i . "_Pass_Heim1"; + $value->$variable = $spielbericht[$i - 1]->Pass_Heim1; + $variable = "S" . $i . "_Pass_Heim2"; + $value->$variable = $spielbericht[$i - 1]->Pass_Heim2; + $variable = "S" . $i . "_Pass_Gast1"; + $value->$variable = $spielbericht[$i - 1]->Pass_Gast1; + $variable = "S" . $i . "_Pass_Gast2"; + $value->$variable = $spielbericht[$i - 1]->Pass_Gast2; + $variable = "S" . $i . "_Heim_Tore"; + $value->$variable = $spielbericht[$i - 1]->Heim_Tore; + $variable = "S" . $i . "_Gast_Tore"; + $value->$variable = $spielbericht[$i - 1]->Gast_Tore; + $variable = "S" . $i . "_Heim_Punkte"; + $value->$variable = $spielbericht[$i - 1]->Heim_Punkte; + $variable = "S" . $i . "_Gast_Punkte"; + $value->$variable = $spielbericht[$i - 1]->Gast_Punkte; + } + } + + return $rows; +} + #[NoReturn] function adminBegegnungenExport(): void { $db = getDatabase(); @@ -12976,6 +13290,7 @@ function adminBegegnungenExportForm(): void $veranstaltungId = $jInput->get('veranstaltungId', 0, 'INT'); $export = $jInput->get('export', '', 'RAW'); + $exportformat = $jInput->get('exportformat', 'csvdatei', 'RAW'); if ($veranstaltungId == 0) die("Missing id!"); @@ -12995,22 +13310,28 @@ function adminBegegnungenExportForm(): void unset($rows); + // JSON-Export: Teams, Spieler und Spielberichte gemeinsam in dieser Reihenfolge exportieren + if ($exportformat == "jsondatei") { + $teams = sportsmanagerExportErmittleTeams($db, $veranstaltungId); + $spieler = sportsmanagerExportErmittleSpieler($db, $veranstaltungId); + $spielberichte = sportsmanagerExportErgaenzeSpielberichte($db, $veranstaltungId, sportsmanagerExportErmittleSpielplan($db, $veranstaltungId)); + + if (empty($teams) && empty($spieler) && empty($spielberichte)) { + redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=1', "Zu dieser Auswahl sind keine Daten vorhanden!"); + } + + $daten = [ + 'teams' => $teams, + 'spieler' => $spieler, + 'spielberichte' => $spielberichte, + ]; + + exportJSON($daten, "Export " . $veranstaltung->bezeichnung . ".json"); + } + $dateiname = ""; if ($export == "spieler") { - $query = " - SELECT t5.bezeichnung AS Veranstaltung, t2.vereinsname AS Verein, t1.teamname AS Team, t4.spielernr AS Passnummer, - t4.nachname AS Nachname, t4.vorname AS Vorname, t4.geburtsjahr AS Geburtsjahr, LOWER(LEFT(geschlecht, 1)) AS Geschlecht, - t6.saisonbezeichnung AS Saison, t3.erster_spieltag AS Spielberechtigt_von, t3.letzter_spieltag AS Spielberechtigt_bis - FROM #__sportsmanager_team AS t1 - LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t1.veranstaltung_id = t5.veranstaltung_id - LEFT JOIN #__sportsmanager_verein AS t2 ON t1.verein_id = t2.verein_id - LEFT JOIN #__sportsmanager_mitglied_von_team AS t3 ON t1.team_id = t3.team_id - LEFT JOIN #__sportsmanager_spieler AS t4 ON t3.spieler_id = t4.spieler_id - LEFT JOIN #__sportsmanager_saison AS t6 ON t5.saison_id = t6.saison_id - WHERE t1.veranstaltung_id = " . $veranstaltungId . "; - "; - - $rows = loadObjectList($db, $query); + $rows = sportsmanagerExportErmittleSpieler($db, $veranstaltungId); if (!isset($rows) or count($rows) == 0) { redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=1', "Zu dieser Auswahl sind keine Daten vorhanden!"); } @@ -13018,58 +13339,7 @@ function adminBegegnungenExportForm(): void } if ($export == "spielplan" or $export == "spielberichte") { - $query = " - SELECT t1.begegnung_id AS ID, "; - if (einstellungswert("verbands_kuerzel") == "STFV"){ - $query .= " - CONCAT(t5.saisonbezeichnung,LPAD(t4.kategorie,2,'0'),LPAD(t1.spieltag,2,'0'),LPAD(IFNULL(t1.spiel_nr, '0'),2,'0')) AS stfv_id, "; - } - $query .= " - t5.saisonbezeichnung AS Saison, - t4.bezeichnung AS Liga, t1.spieltag AS Spieltag_Nr, t1.spiel_nr AS Spiel_Nr, - t1.zeitpunkt AS Spielstart, '' AS verlegt_auf, t2.teamname AS Heim, t3.teamname AS Gast, - t1.heim_punkte AS Heim_Tore, t1.gast_punkte AS Gast_Tore, - t1.heim_spielpunkte AS Heim_Satzpunkte, t1.gast_spielpunkte AS Gast_Satzpunkte - FROM #__sportsmanager_begegnung AS t1 - LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id - LEFT JOIN #__sportsmanager_team AS t3 ON t1.gast_team_id = t3.team_id - LEFT JOIN #__sportsmanager_veranstaltung AS t4 ON t2.veranstaltung_id = t4.veranstaltung_id - LEFT JOIN #__sportsmanager_saison AS t5 ON t4.saison_id = t5.saison_id - WHERE t4.veranstaltung_id = " . $veranstaltungId . " - ORDER BY t4.veranstaltung_id, t1.spieltag, t1.spiel_nr, t1.zeitpunkt; - "; - $rows = loadObjectList($db, $query); - - // Spielverlegungen - foreach ($rows as $value) { - - $beantragt = []; - $genehmigt = []; - - // Spielverlegung vorgeschlagen - $query = " - SELECT t1.zeitpunkt AS Termin_alt - FROM #__sportsmanager_begegnung_historie AS t1 - WHERE begegnung_id = " . $value->ID . " - AND aktion IN (2) - ORDER BY eingetragen ASC LIMIT 1; - "; - $beantragt = loadObjectList($db, $query); - if (!empty($beantragt)) - $value->Spielstart = $beantragt[0]->Termin_alt; - - // Spielverlegung vorgeschlagen - $query = " - SELECT t1.zeitpunkt AS Termin_neu - FROM #__sportsmanager_begegnung_historie AS t1 - WHERE begegnung_id = " . $value->ID . " - AND aktion IN (1) - ORDER BY eingetragen DESC LIMIT 1; - "; - $genehmigt = loadObjectList($db, $query); - if (!empty($genehmigt)) - $value->verlegt_auf = $genehmigt[0]->Termin_neu; - } + $rows = sportsmanagerExportErmittleSpielplan($db, $veranstaltungId); $dateiname = "Spielplan " . $veranstaltung->bezeichnung; if (!isset($rows) or count($rows) == 0) { @@ -13078,219 +13348,21 @@ function adminBegegnungenExportForm(): void } if ($export == "spielberichte") { - // Modus ermitteln - $query = " - SELECT t2.* FROM #__sportsmanager_veranstaltung AS t1 - LEFT JOIN #__sportsmanager_teamspiel_modus AS t2 ON t1.modus_id = t2.teamspiel_modus_id - WHERE t1.veranstaltung_id = " . $veranstaltungId . " - "; - - $spielmodus = loadObjectList($db, $query); - $Anzahl_Saetze = count(explode(",", $spielmodus[0]->modus)); - - - foreach ($rows as $value) { - - $Bestaetigt = []; - $Bestaetigt = []; - $Moderator = []; - $value->vorgeschlagen_um = ""; - $value->vorgeschlagen_von = ""; - $value->bestaetigt_um = ""; - $value->bestaetigt_von = ""; - $value->moderator_um = ""; - $value->moderator_von = ""; - - // Endergebnis vorgeschlagen - $query = " - SELECT t1.eingetragen AS gespeichert_um, - t2.name AS gespeichert_von_user, - t3.teamname AS gespeichert_von_team - FROM #__sportsmanager_begegnung_historie AS t1 - LEFT JOIN #__users AS t2 ON t1.user_id = t2.id - LEFT JOIN #__sportsmanager_team AS t3 ON t1.team_id = t3.team_id - WHERE begegnung_id = " . $value->ID . " - AND aktion IN (6) - ORDER BY eingetragen DESC LIMIT 1; - "; - $Vorgeschlagen = loadObjectList($db, $query); - if (!empty($Vorgeschlagen)) { - $value->vorgeschlagen_um = $Vorgeschlagen[0]->gespeichert_um; - if (!empty($Vorgeschlagen[0]->gespeichert_von_user)) - $value->vorgeschlagen_von = $Vorgeschlagen[0]->gespeichert_von_user; - if (!empty($Vorgeschlagen[0]->gespeichert_von_team)) - $value->vorgeschlagen_von = $Vorgeschlagen[0]->gespeichert_von_team; - } - - // Endergebnis bestätigen Gegner - $query = " - SELECT t1.eingetragen AS gespeichert_um, - t2.name AS gespeichert_von_user, - t3.teamname AS gespeichert_von_team - FROM #__sportsmanager_begegnung_historie AS t1 - LEFT JOIN #__users AS t2 ON t1.user_id = t2.id - LEFT JOIN #__sportsmanager_team AS t3 ON t1.team_id = t3.team_id - WHERE begegnung_id = " . $value->ID . " - AND aktion IN (7) - ORDER BY eingetragen DESC LIMIT 1; - "; - $Bestaetigt = loadObjectList($db, $query); - if (!empty($Bestaetigt)) { - $value->bestaetigt_um = $Bestaetigt[0]->gespeichert_um; - if (!empty($Bestaetigt[0]->gespeichert_von_user)) - $value->bestaetigt_von = $Bestaetigt[0]->gespeichert_von_user; - if (!empty($Bestaetigt[0]->gespeichert_von_team)) - $value->bestaetigt_von = $Bestaetigt[0]->gespeichert_von_team; - } - - // Endergebnis bestätigen Moderator - $query = " - SELECT t1.eingetragen AS gespeichert_um, - t2.name AS gespeichert_von_user, - t3.teamname AS gespeichert_von_team - FROM #__sportsmanager_begegnung_historie AS t1 - LEFT JOIN #__users AS t2 ON t1.user_id = t2.id - LEFT JOIN #__sportsmanager_team AS t3 ON t1.team_id = t3.team_id - WHERE begegnung_id = " . $value->ID . " - AND aktion IN (8) - ORDER BY eingetragen DESC LIMIT 1; - "; - $Moderator = loadObjectList($db, $query); - if (!empty($Moderator)) { - $value->moderator_um = $Moderator[0]->gespeichert_um; - if (!empty($Moderator[0]->gespeichert_von_user)) - $value->moderator_von = $Moderator[0]->gespeichert_von_user; - if (!empty($Moderator[0]->gespeichert_von_team)) - $value->moderator_von = $Moderator[0]->gespeichert_von_team; - } - - // Spielbericht - $query = " - SELECT - t1.teamspiel_nummer AS Satz_Nr, - t3.spielernr AS Pass_Heim1, t4.spielernr AS Pass_Heim2, - t5.spielernr AS Pass_Gast1, t6.spielernr AS Pass_Gast2, - t1.teamspiel_heim_punkte AS Heim_Tore, t1.teamspiel_gast_punkte AS Gast_Tore, - t1.teamspiel_heim_spielpunkte AS Heim_Punkte, t1.teamspiel_gast_spielpunkte AS Gast_Punkte - FROM #__sportsmanager_teamspiel AS t1 - LEFT JOIN #__sportsmanager_begegnung AS t2 ON t1.begegnung_id = t2.begegnung_id - LEFT JOIN #__sportsmanager_spieler AS t3 ON t1.heim_spieler_1_id = t3.spieler_id - LEFT JOIN #__sportsmanager_spieler AS t4 ON t1.heim_spieler_2_id = t4.spieler_id - LEFT JOIN #__sportsmanager_spieler AS t5 ON t1.gast_spieler_1_id = t5.spieler_id - LEFT JOIN #__sportsmanager_spieler AS t6 ON t1.gast_spieler_2_id = t6.spieler_id - WHERE t1.begegnung_id = " . $value->ID . " - ORDER BY t1.teamspiel_nummer; - "; - - $spielbericht = loadObjectList($db, $query); - for ($i = 1; $i <= $Anzahl_Saetze; $i++) { - $variable = "S" . $i . "_Pass_Heim1"; - $value->$variable = $spielbericht[$i - 1]->Pass_Heim1; - $variable = "S" . $i . "_Pass_Heim2"; - $value->$variable = $spielbericht[$i - 1]->Pass_Heim2; - $variable = "S" . $i . "_Pass_Gast1"; - $value->$variable = $spielbericht[$i - 1]->Pass_Gast1; - $variable = "S" . $i . "_Pass_Gast2"; - $value->$variable = $spielbericht[$i - 1]->Pass_Gast2; - $variable = "S" . $i . "_Heim_Tore"; - $value->$variable = $spielbericht[$i - 1]->Heim_Tore; - $variable = "S" . $i . "_Gast_Tore"; - $value->$variable = $spielbericht[$i - 1]->Gast_Tore; - $variable = "S" . $i . "_Heim_Punkte"; - $value->$variable = $spielbericht[$i - 1]->Heim_Punkte; - $variable = "S" . $i . "_Gast_Punkte"; - $value->$variable = $spielbericht[$i - 1]->Gast_Punkte; - } - } + $rows = sportsmanagerExportErgaenzeSpielberichte($db, $veranstaltungId, $rows); $dateiname = "Spielberichte " . $veranstaltung->bezeichnung; } if ($export == "teams") { - $query = "SELECT t2.verein_id, t2.vereinsname AS Verein, t2.vereinssitz AS Vereinssitz," - . "\n t2.vereinssitz_ortsteil AS Vereinssitz_Ortsteil, t2.url AS Vereinswebseite," - . "\n t1.team_id, t1.teamname AS Team, t3.bezeichnung AS Liga, t1.tischtyp AS Tisch," - . "\n t4.name AS Spielort, t4.strasse AS Spielort_Strasse, t4.plz AS Spielort_PLZ," - . "\n t4.ortsname AS Spielort_Ort, t4.ortsteil AS Spielort_Ortsteil, t4.telefon AS Spielort_Telefon," - . "\n t4.url AS Spielort_Url, t1.trainingstage AS Trainingstage, t4.ruhetage AS Spielort_Ruhetage" - . "\n FROM #__sportsmanager_team AS t1" - . "\n LEFT JOIN #__sportsmanager_verein AS t2 ON t1.verein_id = t2.verein_id" - . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t3 ON t1.veranstaltung_id = t3.veranstaltung_id" - . "\n LEFT JOIN #__sportsmanager_spielort AS t4 ON t1.heimspielort_id = t4.spielort_id" - . "\n WHERE t1.veranstaltung_id = " . $veranstaltungId . ";"; - - $rows = loadObjectList($db, $query); + $rows = sportsmanagerExportErmittleTeams($db, $veranstaltungId); if (!isset($rows) or count($rows) == 0) { redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=1', "Zu dieser Auswahl sind keine Daten vorhanden!"); } - - foreach ($rows AS $value) - { - $query = "SELECT * FROM #__sportsmanager_vereinsansprechpartner" - . "\n WHERE verein_id = ".$value->verein_id." ORDER BY vereinsansprechpartner_id;"; - $ansprechpartner = loadObjectList($db, $query); - for ($i = 0; $i <= 2; $i++){ - $index = $i + 1; - if (isset($ansprechpartner[$i])){ - $property = "VAP{$index}_Nachname"; - $value->$property = $ansprechpartner[$i]->nachname; - $property = "VAP{$index}_Vorname"; - $value->$property = $ansprechpartner[$i]->vorname; - $property = "VAP{$index}_Telefon"; - $value->$property = $ansprechpartner[$i]->telefon; - $property = "VAP{$index}_Mobil"; - $value->$property = $ansprechpartner[$i]->mobil; - $property = "VAP{$index}_EMail"; - $value->$property = $ansprechpartner[$i]->email; - } else { - $property = "VAP{$index}_Nachname"; - $value->$property = ""; - $property = "VAP{$index}_Vorname"; - $value->$property = ""; - $property = "VAP{$index}_Telefon"; - $value->$property = ""; - $property = "VAP{$index}_Mobil"; - $value->$property = ""; - $property = "VAP{$index}_EMail"; - $value->$property = ""; - } - } - - $query = "SELECT * FROM #__sportsmanager_teamansprechpartner" - . "\n WHERE team_id = ".$value->team_id." ORDER BY kontaktperson_id;"; - $ansprechpartner = loadObjectList($db, $query); - for ($i = 0; $i <= 1; $i++){ - $index = $i + 1; - if (isset($ansprechpartner[$i])){ - $property = "TAP{$index}_Nachname"; - $value->$property = $ansprechpartner[$i]->nachname; - $property = "TAP{$index}_Vorname"; - $value->$property = $ansprechpartner[$i]->vorname; - $property = "TAP{$index}_Telefon"; - $value->$property = $ansprechpartner[$i]->telefon; - $property = "TAP{$index}_Mobil"; - $value->$property = $ansprechpartner[$i]->mobil; - $property = "TAP{$index}_EMail"; - $value->$property = $ansprechpartner[$i]->email; - } else { - $property = "TAP{$index}_Nachname"; - $value->$property = ""; - $property = "TAP{$index}_Vorname"; - $value->$property = ""; - $property = "TAP{$index}_Telefon"; - $value->$property = ""; - $property = "TAP{$index}_Mobil"; - $value->$property = ""; - $property = "TAP{$index}_EMail"; - $value->$property = ""; - } - } - } $dateiname = "Teams " . $veranstaltung->bezeichnung; } $dateiname .= ".csv"; - exportCSV($rows, $dateiname); + exportCSV($rows, $dateiname); } function adminEditTurnier(): void diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php b/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php index 345561a..84fa83d 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php @@ -12843,6 +12843,11 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void { global $params; ?> +
@@ -12862,7 +12867,7 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void - + @@ -12880,8 +12885,9 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void From d39dc45cec1f17f78d038b8c9682fcbcd3b054f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Meyer?= Date: Sun, 30 Aug 2026 11:57:17 +0200 Subject: [PATCH 2/2] =?UTF-8?q?=C3=84nderungsvorschl=C3=A4ge=20abgearbeite?= =?UTF-8?q?t.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/com_sportsmanager/admin.php | 102 +++++++----------- .../views/sportsmanager/view_admin.php | 1 + 2 files changed, 39 insertions(+), 64 deletions(-) diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index 120fe0b..66edaa2 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -169,8 +169,10 @@ function exportCSV(array $rows, string $dateiname): void function exportJSON(array $rows, string $dateiname): void { if (empty($rows)) { - // Keine Daten → nichts exportieren - return; + // Keine Daten → Request hier beenden, damit der Aufrufer nicht in + // nachfolgenden Code (z. B. einen CSV-Export mit undefiniertem $rows) durchläuft + http_response_code(204); + exit; } // Dateiname absichern @@ -13168,9 +13170,6 @@ function sportsmanagerExportErgaenzeSpielberichte($db, int $veranstaltungId, arr foreach ($rows as $value) { - $Bestaetigt = []; - $Bestaetigt = []; - $Moderator = []; $value->vorgeschlagen_um = ""; $value->vorgeschlagen_von = ""; $value->bestaetigt_um = ""; @@ -13178,67 +13177,42 @@ function sportsmanagerExportErgaenzeSpielberichte($db, int $veranstaltungId, arr $value->moderator_um = ""; $value->moderator_von = ""; - // Endergebnis vorgeschlagen + // Endergebnis vorgeschlagen / bestätigt (Gegner) / bestätigt (Moderator) $query = " - SELECT t1.eingetragen AS gespeichert_um, + SELECT t1.aktion, + t1.eingetragen AS gespeichert_um, t2.name AS gespeichert_von_user, t3.teamname AS gespeichert_von_team FROM #__sportsmanager_begegnung_historie AS t1 LEFT JOIN #__users AS t2 ON t1.user_id = t2.id LEFT JOIN #__sportsmanager_team AS t3 ON t1.team_id = t3.team_id WHERE begegnung_id = " . $value->ID . " - AND aktion IN (6) - ORDER BY eingetragen DESC LIMIT 1; + AND aktion IN (6,7,8) + ORDER BY eingetragen DESC; "; - $Vorgeschlagen = loadObjectList($db, $query); - if (!empty($Vorgeschlagen)) { - $value->vorgeschlagen_um = $Vorgeschlagen[0]->gespeichert_um; - if (!empty($Vorgeschlagen[0]->gespeichert_von_user)) - $value->vorgeschlagen_von = $Vorgeschlagen[0]->gespeichert_von_user; - if (!empty($Vorgeschlagen[0]->gespeichert_von_team)) - $value->vorgeschlagen_von = $Vorgeschlagen[0]->gespeichert_von_team; - } - - // Endergebnis bestätigen Gegner - $query = " - SELECT t1.eingetragen AS gespeichert_um, - t2.name AS gespeichert_von_user, - t3.teamname AS gespeichert_von_team - FROM #__sportsmanager_begegnung_historie AS t1 - LEFT JOIN #__users AS t2 ON t1.user_id = t2.id - LEFT JOIN #__sportsmanager_team AS t3 ON t1.team_id = t3.team_id - WHERE begegnung_id = " . $value->ID . " - AND aktion IN (7) - ORDER BY eingetragen DESC LIMIT 1; - "; - $Bestaetigt = loadObjectList($db, $query); - if (!empty($Bestaetigt)) { - $value->bestaetigt_um = $Bestaetigt[0]->gespeichert_um; - if (!empty($Bestaetigt[0]->gespeichert_von_user)) - $value->bestaetigt_von = $Bestaetigt[0]->gespeichert_von_user; - if (!empty($Bestaetigt[0]->gespeichert_von_team)) - $value->bestaetigt_von = $Bestaetigt[0]->gespeichert_von_team; - } - - // Endergebnis bestätigen Moderator - $query = " - SELECT t1.eingetragen AS gespeichert_um, - t2.name AS gespeichert_von_user, - t3.teamname AS gespeichert_von_team - FROM #__sportsmanager_begegnung_historie AS t1 - LEFT JOIN #__users AS t2 ON t1.user_id = t2.id - LEFT JOIN #__sportsmanager_team AS t3 ON t1.team_id = t3.team_id - WHERE begegnung_id = " . $value->ID . " - AND aktion IN (8) - ORDER BY eingetragen DESC LIMIT 1; - "; - $Moderator = loadObjectList($db, $query); - if (!empty($Moderator)) { - $value->moderator_um = $Moderator[0]->gespeichert_um; - if (!empty($Moderator[0]->gespeichert_von_user)) - $value->moderator_von = $Moderator[0]->gespeichert_von_user; - if (!empty($Moderator[0]->gespeichert_von_team)) - $value->moderator_von = $Moderator[0]->gespeichert_von_team; + $Historie = loadObjectList($db, $query); + foreach ($Historie as $eintrag) { + if ($eintrag->aktion == 6 && empty($value->vorgeschlagen_um)) { + $value->vorgeschlagen_um = $eintrag->gespeichert_um; + if (!empty($eintrag->gespeichert_von_user)) + $value->vorgeschlagen_von = $eintrag->gespeichert_von_user; + if (!empty($eintrag->gespeichert_von_team)) + $value->vorgeschlagen_von = $eintrag->gespeichert_von_team; + } + if ($eintrag->aktion == 7 && empty($value->bestaetigt_um)) { + $value->bestaetigt_um = $eintrag->gespeichert_um; + if (!empty($eintrag->gespeichert_von_user)) + $value->bestaetigt_von = $eintrag->gespeichert_von_user; + if (!empty($eintrag->gespeichert_von_team)) + $value->bestaetigt_von = $eintrag->gespeichert_von_team; + } + if ($eintrag->aktion == 8 && empty($value->moderator_um)) { + $value->moderator_um = $eintrag->gespeichert_um; + if (!empty($eintrag->gespeichert_von_user)) + $value->moderator_von = $eintrag->gespeichert_von_user; + if (!empty($eintrag->gespeichert_von_team)) + $value->moderator_von = $eintrag->gespeichert_von_team; + } } // Spielbericht @@ -13289,8 +13263,8 @@ function sportsmanagerExportErgaenzeSpielberichte($db, int $veranstaltungId, arr $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $veranstaltungId = $jInput->get('veranstaltungId', 0, 'INT'); - $export = $jInput->get('export', '', 'RAW'); - $exportformat = $jInput->get('exportformat', 'csvdatei', 'RAW'); + $export = $jInput->get('export', '', 'CMD'); + $exportformat = $jInput->get('exportformat', 'csvdatei', 'CMD'); if ($veranstaltungId == 0) die("Missing id!"); @@ -13317,7 +13291,7 @@ function sportsmanagerExportErgaenzeSpielberichte($db, int $veranstaltungId, arr $spielberichte = sportsmanagerExportErgaenzeSpielberichte($db, $veranstaltungId, sportsmanagerExportErmittleSpielplan($db, $veranstaltungId)); if (empty($teams) && empty($spieler) && empty($spielberichte)) { - redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=1', "Zu dieser Auswahl sind keine Daten vorhanden!"); + redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=$veranstaltungId', "Zu dieser Auswahl sind keine Daten vorhanden!"); } $daten = [ @@ -13333,7 +13307,7 @@ function sportsmanagerExportErgaenzeSpielberichte($db, int $veranstaltungId, arr if ($export == "spieler") { $rows = sportsmanagerExportErmittleSpieler($db, $veranstaltungId); if (!isset($rows) or count($rows) == 0) { - redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=1', "Zu dieser Auswahl sind keine Daten vorhanden!"); + redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=$veranstaltungId', "Zu dieser Auswahl sind keine Daten vorhanden!"); } $dateiname = "Spieler " . $veranstaltung->bezeichnung; } @@ -13343,7 +13317,7 @@ function sportsmanagerExportErgaenzeSpielberichte($db, int $veranstaltungId, arr $dateiname = "Spielplan " . $veranstaltung->bezeichnung; if (!isset($rows) or count($rows) == 0) { - redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=1', "Zu dieser Auswahl sind keine Daten vorhanden!"); + redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=$veranstaltungId', "Zu dieser Auswahl sind keine Daten vorhanden!"); } } @@ -13355,7 +13329,7 @@ function sportsmanagerExportErgaenzeSpielberichte($db, int $veranstaltungId, arr if ($export == "teams") { $rows = sportsmanagerExportErmittleTeams($db, $veranstaltungId); if (!isset($rows) or count($rows) == 0) { - redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=1', "Zu dieser Auswahl sind keine Daten vorhanden!"); + redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=$veranstaltungId', "Zu dieser Auswahl sind keine Daten vorhanden!"); } $dateiname = "Teams " . $veranstaltung->bezeichnung; } diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php b/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php index 84fa83d..7c088b0 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php @@ -12847,6 +12847,7 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void function anzeige_aktualisieren() { document.getElementById("export_row").style.display = document.adminForm.exportformat.value !== "jsondatei" ? '' : 'none'; } + window.addEventListener("pageshow", anzeige_aktualisieren);
- +