format($format) == $date; } function adminUebersicht(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerModerator() && !benutzerVeranstaltungModerator() && !benutzerTurnierModerator() && !benutzerIndividualwettbewerbModerator()) keinZugriff(true); $filter_saison_id = $jInput->get('filter_saison_id', 0, 'INT'); if ($filter_saison_id == 0) $filter_saison_id = $jInput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); $query = "SELECT saison_id, saisonbezeichnung" . "\n FROM #__sportsmanager_saison" . "\n ORDER BY saisonbezeichnung DESC"; $saisons = loadObjectList($db, $query); if (count($saisons) != 0) { $gefunden = false; foreach ($saisons as $saison) { if ($saison->saison_id == $filter_saison_id) { $gefunden = true; break; } } if (!$gefunden) $filter_saison_id = $saisons[0]->saison_id; } $beschraenkter_zugriff_veranstaltungen = benutzerZugriff("mannschaftswettbewerb_aendern") ? 0 : 1; if ($beschraenkter_zugriff_veranstaltungen) { $query = "SELECT t1.*, t2.veranstalterbezeichnung, t2.veranstalterkuerzel," . "\n (SELECT COUNT(*) FROM #__sportsmanager_team AS tt1 WHERE tt1.veranstaltung_id = t1.veranstaltung_id) AS teams," . "\n (SELECT COUNT(*) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_team AS tt2 ON tt1.heim_team_id = tt2.team_id WHERE tt2.veranstaltung_id = t1.veranstaltung_id) AS begegnungen" . "\n FROM #__sportsmanager_veranstaltung AS t1" . "\n LEFT JOIN #__sportsmanager_veranstalter AS t2 ON t1.veranstalter_id = t2.veranstalter_id" . "\n WHERE " . veranstaltungFilter("t1.veranstaltung_id IN") . ($filter_saison_id != 0 ? " AND saison_id = $filter_saison_id" : "") . "\n ORDER BY t1.reihenfolge, t1.letzter_tag DESC, t1.bezeichnung, t1.kategorie"; } else { $query = "SELECT t1.*, t2.veranstalterbezeichnung, t2.veranstalterkuerzel," . "\n (SELECT COUNT(*) FROM #__sportsmanager_team AS tt1 WHERE tt1.veranstaltung_id = t1.veranstaltung_id) AS teams," . "\n (SELECT COUNT(*) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_team AS tt2 ON tt1.heim_team_id = tt2.team_id WHERE tt2.veranstaltung_id = t1.veranstaltung_id) AS begegnungen" . "\n FROM #__sportsmanager_veranstaltung AS t1" . "\n LEFT JOIN #__sportsmanager_veranstalter AS t2 ON t1.veranstalter_id = t2.veranstalter_id" . ($filter_saison_id != 0 ? "\n WHERE saison_id = $filter_saison_id" : "") . "\n ORDER BY t1.reihenfolge, t1.letzter_tag DESC, t1.bezeichnung, t1.kategorie"; } $veranstaltungen = loadObjectList($db, $query); $query = "SELECT *," . "\n (SELECT COUNT(*) FROM #__sportsmanager_bestenliste_veranstaltung AS t2 WHERE t1.bestenliste_id = t2.bestenliste_id) + (SELECT COUNT(*) FROM #__sportsmanager_bestenliste_individualwettbewerb AS t2 WHERE t1.bestenliste_id = t2.bestenliste_id) AS veranstaltungen" . "\n FROM #__sportsmanager_bestenliste AS t1" . ($filter_saison_id != 0 ? "\n WHERE saison_id = $filter_saison_id" : "") . "\n ORDER BY t1.reihenfolge, t1.letzter_tag DESC, t1.bezeichnung, t1.kategorie"; $spielerstatistiken = loadObjectList($db, $query); $beschraenkter_zugriff_turniere = benutzerZugriff("turniere_aendern") ? 0 : 1; if ($beschraenkter_zugriff_turniere) { $query = "SELECT #__sportsmanager_turnier.*, veranstalterbezeichnung, veranstalterkuerzel, GROUP_CONCAT(disziplintitel ORDER BY disziplintitel SEPARATOR ', ') AS disziplinen, COUNT(turnierdisziplin_id) AS disziplinen_anzahl, COALESCE(SUM(meldung_vorhanden), 0) AS disziplinen_mit_meldung_anzahl" . "\n FROM #__sportsmanager_turnier" . "\n LEFT JOIN (SELECT turnier_id, turnierdisziplin_id, status, IF(COALESCE(kuerzel, '') <> '', kuerzel, disziplin) AS disziplintitel, IF(EXISTS(SELECT * FROM #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id), 1, 0) AS meldung_vorhanden FROM #__sportsmanager_turnierdisziplin) AS turnierdisziplin USING (turnier_id)" . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" . "\n WHERE " . turnierFilter("#__sportsmanager_turnier.turnier_id IN") . ($filter_saison_id != 0 ? " AND saison_id = $filter_saison_id" : "") . "\n GROUP BY turnier_id" . "\n ORDER BY erster_tag DESC, turnierbezeichnung"; } else { $query = "SELECT #__sportsmanager_turnier.*, veranstalterbezeichnung, veranstalterkuerzel, GROUP_CONCAT(disziplintitel ORDER BY disziplintitel SEPARATOR ', ') AS disziplinen, COUNT(turnierdisziplin_id) AS disziplinen_anzahl, COALESCE(SUM(meldung_vorhanden), 0) AS disziplinen_mit_meldung_anzahl" . "\n FROM #__sportsmanager_turnier" . "\n LEFT JOIN (SELECT turnier_id, turnierdisziplin_id, status, IF(COALESCE(kuerzel, '') <> '', kuerzel, disziplin) AS disziplintitel, IF(EXISTS(SELECT * FROM #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id), 1, 0) AS meldung_vorhanden FROM #__sportsmanager_turnierdisziplin) AS turnierdisziplin USING (turnier_id)" . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" . ($filter_saison_id != 0 ? "\n WHERE saison_id = $filter_saison_id" : "") . "\n GROUP BY turnier_id" . "\n ORDER BY erster_tag DESC, turnierbezeichnung"; } $turniere = loadObjectList($db, $query); $beschraenkter_zugriff_individualwettbewerbe = benutzerZugriff("individualwettbewerbe_aendern") ? 0 : 1; if ($beschraenkter_zugriff_individualwettbewerbe) { $query = "SELECT #__sportsmanager_individualwettbewerb.*, veranstalterbezeichnung, veranstalterkuerzel," . "\n (SELECT COUNT(*) FROM #__sportsmanager_individualwettbewerb_spiel WHERE individualwettbewerb_id = #__sportsmanager_individualwettbewerb.individualwettbewerb_id) AS spiele" . "\n FROM #__sportsmanager_individualwettbewerb" . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" . "\n WHERE " . individualwettbewerbFilter("individualwettbewerb_id IN") . ($filter_saison_id != 0 ? " AND saison_id = $filter_saison_id" : "") . "\n ORDER BY reihenfolge, bezeichnung, kategorie"; } else { $query = "SELECT #__sportsmanager_individualwettbewerb.*, veranstalterbezeichnung, veranstalterkuerzel," . "\n (SELECT COUNT(*) FROM #__sportsmanager_individualwettbewerb_spiel WHERE individualwettbewerb_id = #__sportsmanager_individualwettbewerb.individualwettbewerb_id) AS spiele" . "\n FROM #__sportsmanager_individualwettbewerb" . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" . ($filter_saison_id != 0 ? "\n WHERE saison_id = $filter_saison_id" : "") . "\n ORDER BY reihenfolge, bezeichnung, kategorie"; } $individualwettbewerbe = loadObjectList($db, $query); $query = "SELECT *," . "\n (SELECT COUNT(*) FROM #__sportsmanager_rangliste_turnierdisziplin AS t2 WHERE t1.rangliste_id = t2.rangliste_id) AS turnierdisziplinen" . "\n FROM #__sportsmanager_rangliste AS t1" . ($filter_saison_id != 0 ? "\n WHERE saison_id = $filter_saison_id" : "") . "\n ORDER BY t1.reihenfolge, t1.letzter_tag DESC, t1.bezeichnung, t1.kategorie"; $ranglisten = loadObjectList($db, $query); $statistik = array(); $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_saison), 1, 0)"; $statistik["saisons"] = loadResult($db, $query); $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_teamspiel_modus), 1, 0)"; $statistik["teamspielmodi"] = loadResult($db, $query); $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_veranstalter), 1, 0)"; $statistik["veranstalter"] = loadResult($db, $query); $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_rangliste_system), 1, 0)"; $statistik["ranglistensysteme"] = loadResult($db, $query); $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_turnierdisziplin), 1, 0)"; $statistik["turnierdisziplinen"] = loadResult($db, $query); $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb), 1, 0)"; $statistik["individualwettbewerbe"] = loadResult($db, $query); HTML_sportsmanager_admin::adminUebersicht($veranstaltungen, $spielerstatistiken, $turniere, $ranglisten, $individualwettbewerbe, $statistik, $saisons, $filter_saison_id, isExternalDatabase()); } function adminVerteiler(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("verteiler_aendern") && !benutzerZugriff("verteiler_lesen")) keinZugriff(true); $filter_saison_id = $jInput->get('filter_saison_id', 0, 'INT'); if ($filter_saison_id == 0) $filter_saison_id = $jInput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); $query = "SELECT saison_id, saisonbezeichnung" . "\n FROM #__sportsmanager_saison" . "\n ORDER BY saisonbezeichnung DESC"; $saisons = loadObjectList($db, $query); if (count($saisons) != 0) { $gefunden = false; foreach ($saisons as $saison) { if ($saison->saison_id == $filter_saison_id) { $gefunden = true; break; } } if (!$gefunden) $filter_saison_id = $saisons[0]->saison_id; } $query = "SELECT *" . "\n FROM #__sportsmanager_verteiler" . "\n ORDER BY bezeichnung"; $verteiler = loadObjectList($db, $query); $query = "SELECT *" . "\n FROM #__sportsmanager_veranstalter" . "\n ORDER BY veranstalterbezeichnung"; $organisationen = loadObjectList($db, $query); $organisationen_mailverteiler = array(); foreach ($organisationen as $organisation) { $query = "SELECT vorname, nachname, email" . "\n FROM #__sportsmanager_vereinsansprechpartner" . "\n LEFT JOIN #__sportsmanager_verein USING (verein_id)" . "\n WHERE " . ($organisation->veranstalter_id != null ? "veranstalter_id = $organisation->veranstalter_id" : "ISNULL(veranstalter_id)") . " AND NOT ausgetreten AND email != ''" . "\n ORDER BY vorname, nachname, email"; $rows = loadObjectList($db, $query); $organisationen_mailverteiler[$organisation->veranstalter_id] = ""; $organisationen_mailverteiler[$organisation->veranstalter_id . "p"] = ""; foreach ($rows as $row) { $organisationen_mailverteiler[$organisation->veranstalter_id] .= (!empty($organisationen_mailverteiler[$organisation->veranstalter_id]) ? "; " : "") . $row->email; $organisationen_mailverteiler[$organisation->veranstalter_id . "p"] .= (!empty($organisationen_mailverteiler[$organisation->veranstalter_id . "p"]) ? "; " : "") . "\"" . $row->vorname . " " . $row->nachname . "\" <" . $row->email . ">"; } } $query = "SELECT t1.*, veranstalterbezeichnung" . "\n FROM #__sportsmanager_veranstaltung AS t1" . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" . ($filter_saison_id != 0 ? "\n WHERE saison_id = $filter_saison_id" : "") . "\n ORDER BY t1.reihenfolge, t1.letzter_tag DESC, bezeichnung, t1.kategorie"; $veranstaltungen = loadObjectList($db, $query); $veranstaltungen_mailverteiler = array(); foreach ($veranstaltungen as $veranstaltung) { $query = "SELECT vorname, nachname, email" . "\n FROM #__sportsmanager_teamansprechpartner, #__sportsmanager_team" . "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id AND #__sportsmanager_teamansprechpartner.team_id = #__sportsmanager_team.team_id AND email != ''" . "\n ORDER BY vorname, nachname, email"; $rows = loadObjectList($db, $query); $veranstaltungen_mailverteiler[$veranstaltung->veranstaltung_id] = ""; $veranstaltungen_mailverteiler[$veranstaltung->veranstaltung_id . "p"] = ""; foreach ($rows as $row) { $veranstaltungen_mailverteiler[$veranstaltung->veranstaltung_id] .= (!empty($veranstaltungen_mailverteiler[$veranstaltung->veranstaltung_id]) ? "; " : "") . $row->email; $veranstaltungen_mailverteiler[$veranstaltung->veranstaltung_id . "p"] .= (!empty($veranstaltungen_mailverteiler[$veranstaltung->veranstaltung_id . "p"]) ? "; " : "") . "\"" . $row->vorname . " " . $row->nachname . "\" <" . $row->email . ">"; } } HTML_sportsmanager_admin::adminVerteiler($verteiler, $organisationen, $organisationen_mailverteiler, $veranstaltungen, $veranstaltungen_mailverteiler, $saisons, $filter_saison_id, benutzerZugriff("verteiler_aendern")); } function adminEditVerteiler(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("verteiler_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); if ($id == null) $row = null; else { $query = "SELECT * FROM #__sportsmanager_verteiler WHERE verteiler_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $row = $rows[0]; } HTML_sportsmanager_admin::adminEditVerteiler($row); } #[NoReturn] function adminSaveVerteiler(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("verteiler_aendern")) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_verteiler'); } $id = $jInput->get('id', 0, 'INT'); $bezeichnung = $db->escape(trim($jInput->get('bezeichnung', '', 'RAW'))); $verteiler = $db->escape(trim($jInput->get('verteiler', '', 'RAW'))); if ($id == 0) $query = "INSERT INTO #__sportsmanager_verteiler (bezeichnung, verteiler) VALUES ('$bezeichnung', '$verteiler');"; else { $query = "UPDATE #__sportsmanager_verteiler" . "\n SET bezeichnung = '$bezeichnung'," . "\n verteiler = '$verteiler'" . "\n WHERE verteiler_id = $id"; } $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } redirectSportsManagerURL('&task=admin_verteiler'); } #[NoReturn] function adminRemoveVerteiler(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("verteiler_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $query = "DELETE FROM #__sportsmanager_verteiler WHERE verteiler_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } redirectSportsManagerURL('&task=admin_verteiler'); } function adminRechnungen(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("rechnungen_aendern")) keinZugriff(true); $filter_saison_id = $jInput->get('filter_saison_id', 0, 'INT'); if ($filter_saison_id == 0) $filter_saison_id = $jInput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); $query = "SELECT saison_id, saisonbezeichnung" . "\n FROM #__sportsmanager_saison" . "\n ORDER BY saisonbezeichnung DESC"; $saisons = loadObjectList($db, $query); if (count($saisons) == 0) die("Wrong id!"); $gefunden = false; $filter_saison = null; foreach ($saisons as $saison) { if ($saison->saison_id == $filter_saison_id) { $filter_saison = $saison; $gefunden = true; break; } } if (!$gefunden) { $filter_saison_id = $saisons[0]->saison_id; $filter_saison = $saisons[0]; } $query = "SELECT #__sportsmanager_rechnung.*, IF(ISNULL(#__sportsmanager_verein.verein_id), #__sportsmanager_veranstalter.veranstalterbezeichnung, #__sportsmanager_verein.vereinsname) AS zuordnungbezeichnung," . " (SELECT COUNT(*) FROM #__sportsmanager_rechnung_spieler WHERE #__sportsmanager_rechnung_spieler.rechnung_id = #__sportsmanager_rechnung.rechnung_id) AS mitglieder" . "\n FROM #__sportsmanager_rechnung" . "\n LEFT JOIN #__sportsmanager_verein USING (verein_id)" . "\n LEFT JOIN #__sportsmanager_veranstalter ON #__sportsmanager_rechnung.veranstalter_id = #__sportsmanager_veranstalter.veranstalter_id" . "\n WHERE saison_id = $filter_saison_id" . "\n ORDER BY bezeichnung, zuordnungbezeichnung, notiz"; $rechnungen = loadObjectList($db, $query); $query = "SELECT DISTINCT IF(ISNULL(#__sportsmanager_verein.verein_id), #__sportsmanager_veranstalter.veranstalter_id, #__sportsmanager_verein.verein_id) AS zuordnung_id, IF(ISNULL(#__sportsmanager_verein.verein_id), #__sportsmanager_veranstalter.veranstalterbezeichnung, #__sportsmanager_verein.vereinsname) AS zuordnungbezeichnung," . " IF(ISNULL(#__sportsmanager_verein.verein_id), IF(ISNULL(#__sportsmanager_veranstalter.veranstalter_id), 0," . "\n (SELECT COUNT(DISTINCT spieler_id)" . "\n FROM #__sportsmanager_veranstalter AS va1" . "\n LEFT JOIN #__sportsmanager_verein AS ve1 USING (veranstalter_id)" . "\n LEFT JOIN #__sportsmanager_mitglied_von_verein AS mve1 USING (verein_id)" . "\n WHERE va1.veranstalter_id = #__sportsmanager_veranstalter.veranstalter_id AND NOT ve1.ausgetreten AND NOT mve1.ausgetreten AND mve1.spieler_id NOT IN (SELECT DISTINCT spieler_id FROM #__sportsmanager_rechnung AS re1 INNER JOIN #__sportsmanager_rechnung_spieler AS res1 ON re1.rechnung_id = res1.rechnung_id WHERE saison_id = $filter_saison_id))" . ")," . "\n (SELECT COUNT(DISTINCT spieler_id)" . "\n FROM #__sportsmanager_verein AS ve1" . "\n LEFT JOIN #__sportsmanager_mitglied_von_verein AS mve1 USING (verein_id)" . "\n WHERE ve1.verein_id = #__sportsmanager_verein.verein_id AND NOT ve1.ausgetreten AND NOT mve1.ausgetreten AND mve1.spieler_id NOT IN (SELECT DISTINCT spieler_id FROM #__sportsmanager_rechnung AS re1 INNER JOIN #__sportsmanager_rechnung_spieler AS res1 ON re1.rechnung_id = res1.rechnung_id WHERE saison_id = $filter_saison_id))" . ") AS neuzugaenge" . "\n FROM #__sportsmanager_rechnung" . "\n LEFT JOIN #__sportsmanager_verein USING (verein_id)" . "\n LEFT JOIN #__sportsmanager_veranstalter ON #__sportsmanager_rechnung.veranstalter_id = #__sportsmanager_veranstalter.veranstalter_id" . "\n WHERE saison_id = $filter_saison_id" . "\n HAVING neuzugaenge > 0" . "\n ORDER BY zuordnungbezeichnung"; $neuzugaenge = loadObjectList($db, $query); $query = "SELECT DISTINCT IF(ISNULL(#__sportsmanager_verein.verein_id), #__sportsmanager_veranstalter.veranstalter_id, #__sportsmanager_verein.verein_id) AS zuordnung_id, IF(ISNULL(#__sportsmanager_verein.verein_id), #__sportsmanager_veranstalter.veranstalterbezeichnung, #__sportsmanager_verein.vereinsname) AS zuordnungbezeichnung," . " IF(ISNULL(#__sportsmanager_verein.verein_id), IF(ISNULL(#__sportsmanager_veranstalter.veranstalter_id), 0," . "\n (SELECT COUNT(DISTINCT spieler_id)" . "\n FROM #__sportsmanager_veranstalter AS va1" . "\n INNER JOIN #__sportsmanager_verein AS ve1 USING (veranstalter_id)" . "\n INNER JOIN #__sportsmanager_mitglied_von_verein AS mve1 USING (verein_id)" . "\n INNER JOIN #__sportsmanager_rechnung_spieler USING (spieler_id)" . "\n INNER JOIN #__sportsmanager_rechnung USING (rechnung_id)" . "\n WHERE #__sportsmanager_rechnung.saison_id = $filter_saison_id AND #__sportsmanager_rechnung.veranstalter_id = #__sportsmanager_veranstalter.veranstalter_id)" . ")," . "\n (SELECT COUNT(DISTINCT spieler_id)" . "\n FROM #__sportsmanager_verein AS ve1" . "\n INNER JOIN #__sportsmanager_mitglied_von_verein AS mve1 USING (verein_id)" . "\n INNER JOIN #__sportsmanager_rechnung_spieler USING (spieler_id)" . "\n INNER JOIN #__sportsmanager_rechnung USING (rechnung_id)" . "\n WHERE #__sportsmanager_rechnung.saison_id = $filter_saison_id AND #__sportsmanager_rechnung.verein_id = #__sportsmanager_verein.verein_id)" . ") AS mitglieder" . "\n FROM #__sportsmanager_rechnung" . "\n LEFT JOIN #__sportsmanager_verein USING (verein_id)" . "\n LEFT JOIN #__sportsmanager_veranstalter ON #__sportsmanager_rechnung.veranstalter_id = #__sportsmanager_veranstalter.veranstalter_id" . "\n WHERE saison_id = $filter_saison_id" . "\n ORDER BY zuordnungbezeichnung"; $aufsummierung = loadObjectList($db, $query); HTML_sportsmanager_admin::adminRechnungen($rechnungen, $neuzugaenge, $aufsummierung, $filter_saison); } function adminEditRechnung(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("rechnungen_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); if ($id == null) $row = null; else { $query = "SELECT #__sportsmanager_rechnung.*, IF(ISNULL(#__sportsmanager_verein.verein_id), #__sportsmanager_veranstalter.veranstalterbezeichnung, #__sportsmanager_verein.vereinsname) AS zuordnungbezeichnung" . "\n FROM #__sportsmanager_rechnung" . "\n LEFT JOIN #__sportsmanager_verein USING (verein_id)" . "\n LEFT JOIN #__sportsmanager_veranstalter ON #__sportsmanager_rechnung.veranstalter_id = #__sportsmanager_veranstalter.veranstalter_id" . "\n WHERE rechnung_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $row = $rows[0]; } $query = "SELECT *" . "\n FROM #__sportsmanager_veranstalter" . "\n ORDER BY veranstalterbezeichnung"; $veranstalter = loadObjectList($db, $query); $query = "SELECT #__sportsmanager_verein.verein_id, #__sportsmanager_verein.veranstalter_id, vereinsname, veranstalterbezeichnung" . "\n FROM #__sportsmanager_verein" . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" . "\n WHERE NOT ausgetreten" . "\n ORDER BY veranstalterbezeichnung, vereinsname"; $vereine = loadObjectList($db, $query); HTML_sportsmanager_admin::adminEditRechnung($row, $veranstalter, $vereine); } #[NoReturn] function adminSaveRechnung(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("rechnungen_aendern")) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_rechnungen'); } $filter_saison_id = $jInput->get('filter_saison_id', 0, 'INT'); if ($filter_saison_id == 0) $filter_saison_id = $jInput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); $query = "SELECT saison_id, saisonbezeichnung" . "\n FROM #__sportsmanager_saison" . "\n ORDER BY saisonbezeichnung DESC"; $saisons = loadObjectList($db, $query); if (count($saisons) != 0) { $gefunden = false; foreach ($saisons as $saison) { if ($saison->saison_id == $filter_saison_id) { $gefunden = true; break; } } if (!$gefunden) $filter_saison_id = $saisons[0]->saison_id; } if ($filter_saison_id == 0) die ("Wrong id"); $id = $jInput->get('id', 0, 'INT'); $bezeichnung = $db->escape(trim($jInput->get('bezeichnung', '', 'RAW'))); $notiz = $db->escape(trim($jInput->get('notiz', '', 'RAW'))); $veranstalterId = $db->escape($jInput->get('veranstalterid', 0, 'RAW')); $mitgliedsstatus = $jInput->get('mitgliedsstatus', 0, 'INT'); $wertungskategorie = $jInput->get('wertungskategorie', 0, 'INT'); if ($id == 0) { $filter_mitgliedsstatus = ""; for ($i = 1; $i <= 3; $i++) { if (pow(2, $i) & $mitgliedsstatus) { if (!empty($filter_mitgliedsstatus)) $filter_mitgliedsstatus .= " OR "; $filter_mitgliedsstatus .= "mitgliedsstatus = " . $i; } } if (!empty($filter_mitgliedsstatus)) $filter_mitgliedsstatus = " AND (" . $filter_mitgliedsstatus . ")"; $filter_kategorie = ""; if ($wertungskategorie != 15) { $kategorien = array(); foreach (array(1 => "H", 2 => "D", 4 => "J", 8 => "S") as $b => $wert) { if ($b & $wertungskategorie) $kategorien[] = "\"" . $wert . "\""; } $jahr = date("Y"); if (!empty($kategorien)) $filter_kategorie = " AND IF(ISNULL(geburtsjahr), IF(geschlecht = 'M', 'H', 'D'), IF(" . ($jahr - 18) . " <= geburtsjahr, 'J', IF(" . ($jahr - 50) . " > geburtsjahr, 'S', IF(geschlecht = 'M', 'H', 'D')))) IN (" . implode(", ", $kategorien) . ")"; else $filter_kategorie = " AND FALSE"; } if (strlen($veranstalterId) > 1 && $veranstalterId[0] == "v") { $verein_id = substr($veranstalterId, 1); $query = "INSERT INTO #__sportsmanager_rechnung (saison_id, bezeichnung, notiz, verein_id, mitgliedsstatus, wertungskategorie) VALUES ('$filter_saison_id', '$bezeichnung', '$notiz', '$verein_id', '$mitgliedsstatus', '$wertungskategorie');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $id = $db->insertid(); $query = "INSERT INTO #__sportsmanager_rechnung_spieler (spieler_id, rechnung_id)" . "\n SELECT DISTINCT #__sportsmanager_mitglied_von_verein.spieler_id, '$id'" . "\n FROM #__sportsmanager_mitglied_von_verein" . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" . "\n WHERE #__sportsmanager_mitglied_von_verein.verein_id = $verein_id" . $filter_mitgliedsstatus . $filter_kategorie . " AND spieler_id NOT IN (SELECT DISTINCT #__sportsmanager_rechnung_spieler.spieler_id FROM #__sportsmanager_rechnung INNER JOIN #__sportsmanager_rechnung_spieler ON #__sportsmanager_rechnung.rechnung_id = #__sportsmanager_rechnung_spieler.rechnung_id WHERE saison_id = $filter_saison_id)"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } else if (strlen($veranstalterId) > 1 && $veranstalterId[0] == "a") { $veranstalter_id = substr($veranstalterId, 1); $query = "SELECT verein_id, (SELECT COUNT(*) FROM #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_mitglied_von_verein.verein_id = #__sportsmanager_verein.verein_id AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten) AS mitglieder" . "\n FROM #__sportsmanager_verein" . "\n WHERE veranstalter_id = $veranstalter_id AND not ausgetreten" . "\n ORDER BY mitglieder, vereinsname"; $veranstalter = loadObjectList($db, $query); foreach ($veranstalter as $row) { $verein_id = $row->verein_id; $query = "INSERT INTO #__sportsmanager_rechnung (saison_id, bezeichnung, notiz, verein_id, mitgliedsstatus, wertungskategorie) VALUES ('$filter_saison_id', '$bezeichnung', '$notiz', '$verein_id', '$mitgliedsstatus', '$wertungskategorie');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $id = $db->insertid(); $query = "INSERT INTO #__sportsmanager_rechnung_spieler (spieler_id, rechnung_id)" . "\n SELECT DISTINCT #__sportsmanager_mitglied_von_verein.spieler_id, '$id'" . "\n FROM #__sportsmanager_mitglied_von_verein" . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" . "\n WHERE #__sportsmanager_mitglied_von_verein.verein_id = $verein_id" . $filter_mitgliedsstatus . $filter_kategorie . " AND spieler_id NOT IN (SELECT DISTINCT #__sportsmanager_rechnung_spieler.spieler_id FROM #__sportsmanager_rechnung INNER JOIN #__sportsmanager_rechnung_spieler ON #__sportsmanager_rechnung.rechnung_id = #__sportsmanager_rechnung_spieler.rechnung_id WHERE saison_id = $filter_saison_id)"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } else if ($veranstalterId == "0") { $query = "SELECT veranstalter_id, (SELECT COUNT(*) FROM #__sportsmanager_verein LEFT JOIN #__sportsmanager_mitglied_von_verein USING (verein_id) WHERE #__sportsmanager_verein.veranstalter_id = #__sportsmanager_veranstalter.veranstalter_id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten) AS mitglieder" . "\n FROM #__sportsmanager_veranstalter" . "\n ORDER BY mitglieder, veranstalterbezeichnung"; $veranstalter = loadObjectList($db, $query); foreach ($veranstalter as $row) { $veranstalterId = $row->veranstalter_id; $query = "INSERT INTO #__sportsmanager_rechnung (saison_id, bezeichnung, notiz, veranstalter_id, mitgliedsstatus, wertungskategorie) VALUES ('$filter_saison_id', '$bezeichnung', '$notiz', '$veranstalterId', '$mitgliedsstatus', '$wertungskategorie');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $id = $db->insertid(); $query = "INSERT INTO #__sportsmanager_rechnung_spieler (spieler_id, rechnung_id)" . "\n SELECT DISTINCT #__sportsmanager_mitglied_von_verein.spieler_id, '$id'" . "\n FROM #__sportsmanager_veranstalter" . "\n LEFT JOIN #__sportsmanager_verein USING (veranstalter_id)" . "\n LEFT JOIN #__sportsmanager_mitglied_von_verein USING (verein_id)" . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" . "\n WHERE #__sportsmanager_veranstalter.veranstalter_id = $veranstalterId AND NOT #__sportsmanager_verein.ausgetreten" . $filter_mitgliedsstatus . $filter_kategorie . " AND spieler_id NOT IN (SELECT DISTINCT #__sportsmanager_rechnung_spieler.spieler_id FROM #__sportsmanager_rechnung INNER JOIN #__sportsmanager_rechnung_spieler ON #__sportsmanager_rechnung.rechnung_id = #__sportsmanager_rechnung_spieler.rechnung_id WHERE saison_id = $filter_saison_id)"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } else { $query = "INSERT INTO #__sportsmanager_rechnung (saison_id, bezeichnung, notiz, veranstalter_id, mitgliedsstatus, wertungskategorie) VALUES ('$filter_saison_id', '$bezeichnung', '$notiz', '$veranstalterId', '$mitgliedsstatus', '$wertungskategorie');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $id = $db->insertid(); $query = "INSERT INTO #__sportsmanager_rechnung_spieler (spieler_id, rechnung_id)" . "\n SELECT DISTINCT #__sportsmanager_mitglied_von_verein.spieler_id, '$id'" . "\n FROM #__sportsmanager_veranstalter" . "\n LEFT JOIN #__sportsmanager_verein USING (veranstalter_id)" . "\n LEFT JOIN #__sportsmanager_mitglied_von_verein USING (verein_id)" . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" . "\n WHERE #__sportsmanager_veranstalter.veranstalter_id = $veranstalterId AND NOT #__sportsmanager_verein.ausgetreten" . $filter_mitgliedsstatus . $filter_kategorie . " AND spieler_id NOT IN (SELECT DISTINCT #__sportsmanager_rechnung_spieler.spieler_id FROM #__sportsmanager_rechnung INNER JOIN #__sportsmanager_rechnung_spieler ON #__sportsmanager_rechnung.rechnung_id = #__sportsmanager_rechnung_spieler.rechnung_id WHERE saison_id = $filter_saison_id)"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } else { $query = "UPDATE #__sportsmanager_rechnung" . "\n SET bezeichnung = '$bezeichnung'," . "\n notiz = '$notiz'" . "\n WHERE rechnung_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } redirectSportsManagerURL('&task=admin_rechnungen'); } #[NoReturn] function adminRemoveRechnung(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("rechnungen_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $query = "DELETE FROM #__sportsmanager_rechnung_spieler WHERE rechnung_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_rechnung WHERE rechnung_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } redirectSportsManagerURL('&task=admin_rechnungen'); } function adminEinstellungen(): void { $db = getDatabase(); if (!benutzerZugriff("basiseinstellungen_aendern")) keinZugriff(true); $query = "SELECT * FROM #__sportsmanager_einstellungen"; $rows = loadObjectList($db, $query); $einstellungen = array(); foreach ($rows as $row) $einstellungen[$row->name] = $row->wert; HTML_sportsmanager_admin::adminEinstellungen($einstellungen); } #[NoReturn] function adminSaveEinstellungen(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("basiseinstellungen_aendern")) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_uebersicht'); } $basis_spielernr = $db->escape(trim($jInput->get('basis_spielernr', '', 'RAW'))); $ansprechpartner_ausblenden = $jInput->get('ansprechpartner_ausblenden', 0, 'INT'); $ansprechpartner_spielerdaten = $jInput->get('ansprechpartner_spielerdaten', 0, 'INT'); $ansprechpartner_importieren = $jInput->get('ansprechpartner_importieren', 0, 'INT'); $ansprechpartner_exportieren = $jInput->get('ansprechpartner_exportieren', 0, 'INT'); $spielerliste_elo = $jInput->get('spielerliste_elo', 0, 'INT'); $lizenz_anzeigen = $jInput->get('lizenz_anzeigen', 0, 'INT'); $anzahl_mitglieder_zeigen = $jInput->get('anzahl_mitglieder_zeigen', 0, 'INT'); $verband_anzeigen = $jInput->get('verband_anzeigen', 0, 'INT'); $spalte_mitglieder_zeigen = $jInput->get('spalte_mitglieder_zeigen', 0, 'INT'); $turnierbaum_zeigen = $jInput->get('turnierbaum_zeigen', 0, 'INT'); $termine_beantragen = $jInput->get('termine_beantragen', 0, 'INT'); $spielerimport_persoenliche_daten_vorauswahl = $jInput->get('spielerimport_persoenliche_daten_vorauswahl', 0, 'INT'); $api_push_key = $jInput->get('api_push_key', '', 'RAW'); /* $twitter_benutzername = $db->escape(trim( $jInput->get('twitter_benutzername', '', 'RAW') )); $twitter_kennwort = !empty($twitter_benutzername) ? $db->escape(trim( $jInput->get('twitter_kennwort', '', 'RAW') )) : ""; */ $query = "REPLACE #__sportsmanager_einstellungen" . "\n SET name = 'basis_spielernr'" . ", wert = '$basis_spielernr'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "REPLACE #__sportsmanager_einstellungen" . "\n SET name = 'termine_beantragen'" . ", wert = '$termine_beantragen'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "REPLACE #__sportsmanager_einstellungen" . "\n SET name = 'spielerliste_elo'" . ", wert = '$spielerliste_elo'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "REPLACE #__sportsmanager_einstellungen" . "\n SET name = 'lizenz_anzeigen'" . ", wert = '$lizenz_anzeigen'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "REPLACE #__sportsmanager_einstellungen" . "\n SET name = 'anzahl_mitglieder_zeigen'" . ", wert = '$anzahl_mitglieder_zeigen'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "REPLACE #__sportsmanager_einstellungen" . "\n SET name = 'verband_anzeigen'" . ", wert = '$verband_anzeigen'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "REPLACE #__sportsmanager_einstellungen" . "\n SET name = 'spalte_mitglieder_zeigen'" . ", wert = '$spalte_mitglieder_zeigen'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "REPLACE #__sportsmanager_einstellungen" . "\n SET name = 'turnierbaum_zeigen'" . ", wert = '$turnierbaum_zeigen'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "REPLACE #__sportsmanager_einstellungen" . "\n SET name = 'ansprechpartner_ausblenden'" . ", wert = '$ansprechpartner_ausblenden'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "REPLACE #__sportsmanager_einstellungen" . "\n SET name = 'ansprechpartner_spielerdaten'" . ", wert = '$ansprechpartner_spielerdaten'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "REPLACE #__sportsmanager_einstellungen" . "\n SET name = 'ansprechpartner_importieren'" . ", wert = '$ansprechpartner_importieren'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "REPLACE #__sportsmanager_einstellungen" . "\n SET name = 'ansprechpartner_exportieren'" . ", wert = '$ansprechpartner_exportieren'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "REPLACE #__sportsmanager_einstellungen" . "\n SET name = 'spielerimport_persoenliche_daten_vorauswahl'" . ", wert = '$spielerimport_persoenliche_daten_vorauswahl'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "REPLACE #__sportsmanager_einstellungen SET name = 'api_push_key', wert = '$api_push_key'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } redirectSportsManagerURL('&task=admin_uebersicht'); } function adminDatenbank(): void { $db = getDatabase(true); if (!benutzerZugriff("basiseinstellungen_aendern")) keinZugriff(true); $query = "SELECT * FROM #__sportsmanager_einstellungen"; $rows = loadObjectList($db, $query); $einstellungen = array(); foreach ($rows as $row) $einstellungen[$row->name] = $row->wert; HTML_sportsmanager_admin::adminDatenbank($einstellungen); } #[NoReturn] function adminSaveDatenbank(): void { $db = getDatabase(true); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("basiseinstellungen_aendern")) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_uebersicht'); } $database_driver = $db->escape(trim($jInput->get('database_driver', '', 'RAW'))); $database_host = $db->escape(trim($jInput->get('database_host', '', 'RAW'))); $database_user = $db->escape(trim($jInput->get('database_user', '', 'RAW'))); $database_password = $db->escape(trim($jInput->get('database_password', '', 'RAW'))); $database_database = $db->escape(trim($jInput->get('database_database', '', 'RAW'))); $database_prefix = $db->escape(trim($jInput->get('database_prefix', '', 'RAW'))); $joomla_path = $db->escape(trim($jInput->get('joomla_path', '', 'RAW'))); $joomla_path = $joomla_path == "/" && $joomla_path != "\\" ? $joomla_path : rtrim(rtrim($joomla_path, "\\"), "/"); $joomla_url = $db->escape(trim($jInput->get('joomla_url', '', 'RAW'))); if (strlen($joomla_url) > 0 && !str_ends_with($joomla_url, "/")) $joomla_url .= "/"; $query = "REPLACE #__sportsmanager_einstellungen" . "\n SET name = 'database_driver'" . ", wert = '$database_driver'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "REPLACE #__sportsmanager_einstellungen" . "\n SET name = 'database_host'" . ", wert = '$database_host'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "REPLACE #__sportsmanager_einstellungen" . "\n SET name = 'database_user'" . ", wert = '$database_user'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "REPLACE #__sportsmanager_einstellungen" . "\n SET name = 'database_password'" . ", wert = '$database_password'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "REPLACE #__sportsmanager_einstellungen" . "\n SET name = 'database_database'" . ", wert = '$database_database'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "REPLACE #__sportsmanager_einstellungen" . "\n SET name = 'database_prefix'" . ", wert = '$database_prefix'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "REPLACE #__sportsmanager_einstellungen" . "\n SET name = 'joomla_path'" . ", wert = '$joomla_path'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "REPLACE #__sportsmanager_einstellungen" . "\n SET name = 'joomla_url'" . ", wert = '$joomla_url'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } redirectSportsManagerURL('&task=admin_uebersicht'); } function adminSpieler($admin_uebersicht): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $ansprechpartner_importieren = einstellungswert("ansprechpartner_importieren"); $ansprechpartner_exportieren = einstellungswert("ansprechpartner_exportieren"); $ansprechpartner_spielerdaten = einstellungswert("ansprechpartner_spielerdaten"); $ansprechpartner_spielerdaten_bearbeiten = $ansprechpartner_spielerdaten == "1" || $ansprechpartner_spielerdaten == "2" || $ansprechpartner_spielerdaten == "3"; $ansprechpartner_bilder_bearbeiten = $ansprechpartner_spielerdaten == "1" || $ansprechpartner_spielerdaten == "3"; if (benutzerZugriff("spieler_aendern")) $beschraenkter_zugriff = 0; else if (benutzerVeranstalterModerator()) $beschraenkter_zugriff = 1; else if (benutzerVereinModerator()) $beschraenkter_zugriff = 2; else keinZugriff(true); $filter = $jInput->get('filter', '', 'RAW'); if (empty($filter)) $filter = $jInput->get('spezialfilter', '', 'RAW'); $anzahlSpieler = array(); $query = "SELECT COUNT(DISTINCT spieler_id)" . "\n FROM #__sportsmanager_spieler"; if ($beschraenkter_zugriff == 0) $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND mitgliedsstatus = 1 GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; if ($beschraenkter_zugriff == 1) $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND mitgliedsstatus = 1 AND" . veranstalterFilter("#__sportsmanager_verein.veranstalter_id IN") . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; else if ($beschraenkter_zugriff == 2) $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND mitgliedsstatus = 1 AND" . vereinFilter("#__sportsmanager_verein.verein_id IN") . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; $anzahlSpieler["aktiv"] = loadResult($db, $query); $jahr = date("Y"); $anzahlSpieler["J aktiv"] = loadResult($db, $query . "\n WHERE " . ($jahr - 18) . " <= geburtsjahr"); $anzahlSpieler["S aktiv"] = loadResult($db, $query . "\n WHERE " . ($jahr - 50) . " > geburtsjahr"); $anzahlSpieler["H aktiv"] = loadResult($db, $query . "\n WHERE geschlecht = 'M' AND (ISNULL(geburtsjahr) OR (" . ($jahr - 18) . " > geburtsjahr AND " . ($jahr - 50) . " <= geburtsjahr))"); $anzahlSpieler["D aktiv"] = loadResult($db, $query . "\n WHERE geschlecht <> 'M' AND (ISNULL(geburtsjahr) OR (" . ($jahr - 18) . " > geburtsjahr AND " . ($jahr - 50) . " <= geburtsjahr))"); $query = "SELECT COUNT(DISTINCT spieler_id)" . "\n FROM #__sportsmanager_spieler"; if ($beschraenkter_zugriff == 0) $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND mitgliedsstatus = 2 GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; if ($beschraenkter_zugriff == 1) $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND mitgliedsstatus = 2 AND" . veranstalterFilter("#__sportsmanager_verein.veranstalter_id IN") . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; else if ($beschraenkter_zugriff == 2) $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND mitgliedsstatus = 2 AND" . vereinFilter("#__sportsmanager_verein.verein_id IN") . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; $anzahlSpieler["eingeschraenkt"] = loadResult($db, $query); $query = "SELECT COUNT(DISTINCT spieler_id)" . "\n FROM #__sportsmanager_spieler"; if ($beschraenkter_zugriff == 0) $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND mitgliedsstatus = 3 GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; if ($beschraenkter_zugriff == 1) $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND mitgliedsstatus = 3 AND" . veranstalterFilter("#__sportsmanager_verein.veranstalter_id IN") . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; else if ($beschraenkter_zugriff == 2) $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND mitgliedsstatus = 3 AND" . vereinFilter("#__sportsmanager_verein.verein_id IN") . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; $anzahlSpieler["passiv"] = loadResult($db, $query); $search = stripslashes($filter); if ($beschraenkter_zugriff == 0 && $search == "_____DOPPELT") { $jahr = date("Y"); $query = "SELECT #__sportsmanager_spieler.spieler_id, vorname, nachname, geschlecht, pseudonym, aktueller_verein_id, spielernr, lizenznr, geburtsjahr," . "\n IF(ISNULL(geburtsjahr), IF(geschlecht = 'M', 'H', 'D'), IF(" . ($jahr - 18) . " <= geburtsjahr, 'J', IF(" . ($jahr - 50) . " > geburtsjahr, 'S', IF(geschlecht = 'M', 'H', 'D')))) AS kategorie," . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_teamspiel WHERE heim_spieler_1_id = #__sportsmanager_spieler.spieler_id OR heim_spieler_2_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_1_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_2_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS teamspiele," . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_turniermeldung_spieler WHERE #__sportsmanager_turniermeldung_spieler.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS turniermeldungen," . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_mitglied_von_team WHERE #__sportsmanager_mitglied_von_team.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS teammitgliedschaften," . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb_spiel WHERE heim_spieler_1_id = #__sportsmanager_spieler.spieler_id OR heim_spieler_2_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_1_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_2_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS individualwettbewerbspiele," . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung WHERE #__sportsmanager_individualwettbewerb_ausgangsplatzierung.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS individualwettbewerbausgangsplatzierungen," . "\n vereinsname" . "\n FROM (SELECT COUNT(*) AS identische_namen, nachname, vorname" . "\n FROM #__sportsmanager_spieler" . "\n GROUP BY nachname, vorname" . "\n HAVING identische_namen > 1) AS identische_namen" . "\n INNER JOIN #__sportsmanager_spieler USING (nachname, vorname)" . "\n LEFT JOIN #__sportsmanager_verein ON aktueller_verein_id = verein_id" . "\n ORDER BY nachname, vorname"; $rows = loadObjectList($db, $query); } else if ($beschraenkter_zugriff == 0 && $search == "_____DOPPELT_JAHR") { $jahr = date("Y"); $query = "SELECT #__sportsmanager_spieler.spieler_id, vorname, nachname, geschlecht, pseudonym, aktueller_verein_id, spielernr, lizenznr, geburtsjahr," . "\n IF(ISNULL(geburtsjahr), IF(geschlecht = 'M', 'H', 'D'), IF(" . ($jahr - 18) . " <= geburtsjahr, 'J', IF(" . ($jahr - 50) . " > geburtsjahr, 'S', IF(geschlecht = 'M', 'H', 'D')))) AS kategorie," . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_teamspiel WHERE heim_spieler_1_id = #__sportsmanager_spieler.spieler_id OR heim_spieler_2_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_1_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_2_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS teamspiele," . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_turniermeldung_spieler WHERE #__sportsmanager_turniermeldung_spieler.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS turniermeldungen," . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_mitglied_von_team WHERE #__sportsmanager_mitglied_von_team.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS teammitgliedschaften," . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb_spiel WHERE heim_spieler_1_id = #__sportsmanager_spieler.spieler_id OR heim_spieler_2_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_1_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_2_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS individualwettbewerbspiele," . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung WHERE #__sportsmanager_individualwettbewerb_ausgangsplatzierung.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS individualwettbewerbausgangsplatzierungen," . "\n vereinsname" . "\n FROM (SELECT COUNT(*) AS identische_namen, nachname, vorname, geburtsjahr" . "\n FROM #__sportsmanager_spieler" . "\n GROUP BY nachname, vorname, geburtsjahr" . "\n HAVING identische_namen > 1) AS identische_namen" . "\n INNER JOIN #__sportsmanager_spieler USING (nachname, vorname, geburtsjahr)" . "\n LEFT JOIN #__sportsmanager_verein ON aktueller_verein_id = verein_id" . "\n ORDER BY nachname, vorname, geburtsjahr"; $rows = loadObjectList($db, $query); } else if ($beschraenkter_zugriff == 0 && $search == "_____KEINE_SPIELERNR") { $jahr = date("Y"); $query = "SELECT #__sportsmanager_spieler.spieler_id, vorname, nachname, geschlecht, pseudonym, aktueller_verein_id, spielernr, lizenznr, geburtsjahr," . "\n IF (ISNULL(geburtsjahr), IF(geschlecht = 'M', 'H', 'D'), IF(" . ($jahr - 18) . " <= geburtsjahr, 'J', IF(" . ($jahr - 50) . " > geburtsjahr, 'S', IF(geschlecht = 'M', 'H', 'D')))) AS kategorie," . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_teamspiel WHERE heim_spieler_1_id = #__sportsmanager_spieler.spieler_id OR heim_spieler_2_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_1_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_2_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS teamspiele," . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_turniermeldung_spieler WHERE #__sportsmanager_turniermeldung_spieler.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS turniermeldungen," . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_mitglied_von_team WHERE #__sportsmanager_mitglied_von_team.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS teammitgliedschaften," . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb_spiel WHERE heim_spieler_1_id = #__sportsmanager_spieler.spieler_id OR heim_spieler_2_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_1_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_2_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS individualwettbewerbspiele," . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung WHERE #__sportsmanager_individualwettbewerb_ausgangsplatzierung.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS individualwettbewerbausgangsplatzierungen," . "\n vereinsname" . "\n FROM #__sportsmanager_spieler" . "\n LEFT JOIN #__sportsmanager_verein ON aktueller_verein_id = verein_id" . "\n WHERE #__sportsmanager_spieler.spielernr = ''" . "\n ORDER BY nachname, vorname"; $rows = loadObjectList($db, $query); } else if ($search != "" && ($beschraenkter_zugriff == 0 || $ansprechpartner_spielerdaten_bearbeiten)) { $searchEscapedWildcards = str_contains($search, "*") ? ($db->escape(trim(mb_strtolower(str_replace("*", "%", $search), 'UTF-8')))) : ("%" . $db->escape(trim(mb_strtolower($search, 'UTF-8'))) . "%"); $searchEscaped = $db->escape(trim($search)); $jahr = date("Y"); $query = "SELECT #__sportsmanager_spieler.spieler_id, vorname, nachname, geschlecht, pseudonym, aktueller_verein_id, spielernr, lizenznr, geburtsjahr," . "\n IF(ISNULL(geburtsjahr), IF(geschlecht = 'M', 'H', 'D'), IF(" . ($jahr - 18) . " <= geburtsjahr, 'J', IF(" . ($jahr - 50) . " > geburtsjahr, 'S', IF(geschlecht = 'M', 'H', 'D')))) AS kategorie," . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_teamspiel WHERE heim_spieler_1_id = #__sportsmanager_spieler.spieler_id OR heim_spieler_2_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_1_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_2_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS teamspiele," . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_turniermeldung_spieler WHERE #__sportsmanager_turniermeldung_spieler.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS turniermeldungen," . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_mitglied_von_team WHERE #__sportsmanager_mitglied_von_team.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS teammitgliedschaften," . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb_spiel WHERE heim_spieler_1_id = #__sportsmanager_spieler.spieler_id OR heim_spieler_2_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_1_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_2_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS individualwettbewerbspiele," . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung WHERE #__sportsmanager_individualwettbewerb_ausgangsplatzierung.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS individualwettbewerbausgangsplatzierungen," . "\n vereinsname" . "\n FROM #__sportsmanager_spieler"; if ($beschraenkter_zugriff == 1) $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND" . veranstalterFilter("#__sportsmanager_verein.veranstalter_id IN") . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; else if ($beschraenkter_zugriff == 2) $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND" . vereinFilter("#__sportsmanager_verein.verein_id IN") . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; else $query .= "\n LEFT JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; $query .= "\n LEFT JOIN #__sportsmanager_verein ON aktueller_verein_id = verein_id"; $query .= "\n WHERE (CONCAT_WS(', ', nachname, vorname) LIKE '$searchEscapedWildcards' OR CONCAT_WS(' ', vorname, nachname) LIKE '$searchEscapedWildcards' OR spielernr = '$searchEscaped' OR lizenznr = '$searchEscaped')"; $query .= "\n ORDER BY nachname, vorname LIMIT 101"; $rows = loadObjectList($db, $query); if (count($rows) > 100) { redirectSportsManagerURL('&task=admin_spieler', "Mehr als 100 Spieler gefunden, bitte genaueren Filter verwenden."); } } else if ($anzahlSpieler["aktiv"] <= 100 && ($beschraenkter_zugriff == 0 || $ansprechpartner_spielerdaten_bearbeiten)) { $jahr = date("Y"); $query = "SELECT #__sportsmanager_spieler.spieler_id, vorname, nachname, geschlecht, pseudonym, aktueller_verein_id, spielernr, lizenznr, geburtsjahr," . "\n IF(ISNULL(geburtsjahr), IF(geschlecht = 'M', 'H', 'D'), IF(" . ($jahr - 18) . " <= geburtsjahr, 'J', IF(" . ($jahr - 50) . " > geburtsjahr, 'S', IF(geschlecht = 'M', 'H', 'D')))) AS kategorie," . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_teamspiel WHERE heim_spieler_1_id = #__sportsmanager_spieler.spieler_id OR heim_spieler_2_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_1_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_2_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS teamspiele," . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_turniermeldung_spieler WHERE #__sportsmanager_turniermeldung_spieler.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS turniermeldungen," . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_mitglied_von_team WHERE #__sportsmanager_mitglied_von_team.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS teammitgliedschaften," . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb_spiel WHERE heim_spieler_1_id = #__sportsmanager_spieler.spieler_id OR heim_spieler_2_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_1_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_2_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS individualwettbewerbspiele," . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung WHERE #__sportsmanager_individualwettbewerb_ausgangsplatzierung.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS individualwettbewerbausgangsplatzierungen," . "\n vereinsname" . "\n FROM #__sportsmanager_spieler"; if ($beschraenkter_zugriff == 1) $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND" . veranstalterFilter("#__sportsmanager_verein.veranstalter_id IN") . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; else if ($beschraenkter_zugriff == 2) $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND" . vereinFilter("#__sportsmanager_verein.verein_id IN") . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; else $query .= "\n LEFT JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; $query .= "\n LEFT JOIN #__sportsmanager_verein ON aktueller_verein_id = verein_id"; $query .= "\n ORDER BY nachname, vorname LIMIT 101"; $rows = loadObjectList($db, $query); if (count($rows) > 100) $rows = null; } else $rows = null; HTML_sportsmanager_admin::adminSpieler($filter, $rows, $anzahlSpieler, $admin_uebersicht, $beschraenkter_zugriff, $ansprechpartner_importieren, $ansprechpartner_exportieren, $ansprechpartner_spielerdaten_bearbeiten, $ansprechpartner_bilder_bearbeiten); } function adminEditSpieler(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $ansprechpartner_spielerdaten = einstellungswert("ansprechpartner_spielerdaten"); $ansprechpartner_spielerdaten_bearbeiten = $ansprechpartner_spielerdaten == "1" || $ansprechpartner_spielerdaten == "2" || $ansprechpartner_spielerdaten == "3"; if (benutzerZugriff("spieler_aendern")) $beschraenkter_zugriff = 0; else if (benutzerVeranstalterModerator() && $ansprechpartner_spielerdaten_bearbeiten) $beschraenkter_zugriff = 1; else if (benutzerVereinModerator() && $ansprechpartner_spielerdaten_bearbeiten) $beschraenkter_zugriff = 2; else keinZugriff(true); $filter = $jInput->get('filter', '', 'RAW'); $id = $jInput->get('id', 0, 'INT'); if ($id == 0) $spieler = null; else { $query = "SELECT * FROM #__sportsmanager_spieler WHERE spieler_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) == 1) $spieler = $rows[0]; else $spieler = null; } if ($beschraenkter_zugriff != 0) { if ($id == 0) keinZugriff(true); if ($beschraenkter_zugriff == 1) $query = "SELECT IF(EXISTS( SELECT 1 FROM #__sportsmanager_mitglied_von_verein, #__sportsmanager_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = $id AND " . veranstalterFilter("#__sportsmanager_verein.veranstalter_id IN") . " AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_verein.ausgetreten),1, 0)"; else // $beschraenkter_zugriff == 2 $query = "SELECT IF(EXISTS( SELECT 1 FROM #__sportsmanager_mitglied_von_verein, #__sportsmanager_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = $id AND " . vereinFilter("#__sportsmanager_verein.verein_id IN") . " AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_verein.ausgetreten), 1, 0)"; $n = loadResult($db, $query); if ($n == 0) keinZugriff(true); } // Vereine ermitteln $query = "SELECT #__sportsmanager_verein.verein_id, vereinsname, ausgetreten AS verein_ausgetreten, veranstalterbezeichnung" . "\n FROM #__sportsmanager_verein" . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" . "\n ORDER BY veranstalterbezeichnung, vereinsname"; $vereine = loadObjectList($db, $query); $vereinsmitgliedschaften = null; if (!empty($id)) { $query = "SELECT DISTINCT verein_id, mitgliedsstatus" . "\n FROM #__sportsmanager_verein" . "\n INNER JOIN (SELECT verein_id, mitgliedsstatus FROM #__sportsmanager_mitglied_von_verein WHERE spieler_id = $id) AS mitgliedschaft USING (verein_id)" . "\n ORDER BY IF(mitgliedsstatus <> 0, 0, 1), mitgliedsstatus, vereinsname"; $vereinsmitgliedschaften = loadObjectList($db, $query); } // Nächste Spieler-Nr. ermitteln $query = "SELECT * FROM #__sportsmanager_einstellungen WHERE name = 'basis_spielernr'"; $rows = loadObjectList($db, $query); if (count($rows) == 0) die("Fehler: Inkonsistenz in den MySQL-Tabellen!"); $naechste_spielernr = $rows[0]->wert; if (empty($naechste_spielernr)) $naechste_spielernr = "1"; for ($i = strlen($naechste_spielernr) - 1; $i >= 0; $i--) { if ($naechste_spielernr[$i] < '0' || $naechste_spielernr[$i] > '9') break; } $spielernr_praefix = substr($naechste_spielernr, 0, $i + 1); $query = "SELECT spielernr" . "\n FROM #__sportsmanager_spieler" . "\n WHERE Left(spielernr, " . strlen($spielernr_praefix) . ") = '" . $db->escape($spielernr_praefix) . "'" . "\n ORDER BY LENGTH(spielernr) DESC, spielernr DESC"; $rows = loadObjectList($db, $query); if (count($rows) > 0) { $naechste_spielernr = $rows[0]->spielernr; for ($i = strlen($naechste_spielernr) - 1; $i >= 0; $i--) { if ($naechste_spielernr[$i] < '0' || $naechste_spielernr[$i] > '9') { $naechste_spielernr = substr($naechste_spielernr, 0, $i + 1) . "1" . substr($naechste_spielernr, $i + 1); break; } if ($naechste_spielernr[$i] <= '8') { $naechste_spielernr[$i] = $naechste_spielernr[$i] + 1; break; } $naechste_spielernr[$i] = '0'; } if ($i < 0) $naechste_spielernr = "1" . $naechste_spielernr; } HTML_sportsmanager_admin::adminEditSpieler($spieler, $naechste_spielernr, $filter, $vereine, $vereinsmitgliedschaften, $beschraenkter_zugriff, $ansprechpartner_spielerdaten); } #[NoReturn] function adminSaveSpieler(): void { $db = getDatabase(); global $_FILES; global $sportsmanager_joomla_path; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $ansprechpartner_spielerdaten = einstellungswert("ansprechpartner_spielerdaten"); $ansprechpartner_spielerdaten_bearbeiten = $ansprechpartner_spielerdaten == "1" || $ansprechpartner_spielerdaten == "2" || $ansprechpartner_spielerdaten == "3"; if (benutzerZugriff("spieler_aendern")) $beschraenkter_zugriff = 0; else if (benutzerVeranstalterModerator() && $ansprechpartner_spielerdaten_bearbeiten) $beschraenkter_zugriff = 1; else if (benutzerVereinModerator() && $ansprechpartner_spielerdaten_bearbeiten) $beschraenkter_zugriff = 2; else keinZugriff(); $filter = $jInput->get('filter', '', 'RAW'); $id = $jInput->get('id', 0, 'INT'); $vorname = $db->escape(trim($jInput->get('vorname', '', 'RAW'))); $nachname = $db->escape(trim($jInput->get('nachname', '', 'RAW'))); $lizenz = $db->escape(trim($jInput->get('lizenz', '', 'RAW'))); $pseudonym = $db->escape(trim($jInput->get('pseudonym', '', 'RAW'))); $geschlecht = $db->escape(trim($jInput->get('geschlecht', 'M', 'RAW'))); $geburtsjahr = $jInput->get('datum_jahr', 0, 'INT') == 0 ? null : sprintf("%d", $jInput->get('datum_jahr', 0, 'INT')); $strasse = $db->escape(trim($jInput->get('strasse', '', 'RAW'))); $plz = $db->escape(trim($jInput->get('plz', '', 'RAW'))); $ort = $db->escape(trim($jInput->get('ort', '', 'RAW'))); $landeskennung = $db->escape(trim($jInput->get('landeskennung', '', 'RAW'))); $telefon = $db->escape(trim($jInput->get('telefon', '', 'RAW'))); $mobil = $db->escape(trim($jInput->get('mobil', '', 'RAW'))); $email = $db->escape(trim($jInput->get('email', '', 'RAW'))); $spielernr = $db->escape(trim($jInput->get('spielernr', '', 'RAW'))); $lizenznr = $db->escape(trim($jInput->get('lizenznr', '', 'RAW'))); $bild_ausblenden = $jInput->get('bild_ausblenden', 0, 'INT'); $bildbeibehalten = $jInput->get('bildbeibehalten', 0, 'INT'); $elo_startwert_einzel = max(min($jInput->get('elo_startwert_einzel', 0, 'INT'), 9999), 0); $elo_startwert_doppel = max(min($jInput->get('elo_startwert_doppel', 0, 'INT'), 9999), 0); $vereinsauswahl_anzahl = $jInput->get('vereinsauswahl_anzahl', 0, 'INT'); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_spieler&filter=' . urlencode($filter) . '#id' . $id); } $vereinsmitgliedschaften = array(); $verein_mitgliedsstatus = array(); for ($i = 0; $i < $vereinsauswahl_anzahl; $i++) { $verein_id = $jInput->get('verein_id_' . $i, 0, 'INT'); if (empty($verein_id)) continue; $vereinsmitgliedschaften[] = $verein_id; $verein_mitgliedsstatus[] = $jInput->get('verein_mitgliedsstatus_' . $i, 0, 'INT'); } if ($beschraenkter_zugriff != 0) { if ($id == 0) keinZugriff(true); if ($beschraenkter_zugriff == 1) $query = "SELECT IF(EXISTS( SELECT * FROM #__sportsmanager_mitglied_von_verein, #__sportsmanager_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = $id AND " . veranstalterFilter("#__sportsmanager_verein.veranstalter_id IN") . " AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_verein.ausgetreten), 1, 0)"; else // $beschraenkter_zugriff == 2 $query = "SELECT IF(EXISTS( SELECT * FROM #__sportsmanager_mitglied_von_verein, #__sportsmanager_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = $id AND " . vereinFilter("#__sportsmanager_verein.verein_id IN") . " AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_verein.ausgetreten), 1, 0)"; $n = loadResult($db, $query); if ($n == 0) keinZugriff(); } if (strlen($spielernr) > 0) { $query = "SELECT COUNT(*) FROM #__sportsmanager_spieler WHERE spielernr = '$spielernr' AND spieler_id != $id"; $n = loadResult($db, $query); if ($n > 0) { redirectSportsManagerURL('&task=admin_spieler', Text::_('COM_SPORTSMANAGER_PLAYER_NO_USED')); } } $rangliste_aktualisieren = false; $elo_aktualisieren = false; // Vereinsmitgliedschaften prüfen und ggf. aktualisieren if ($id != 0 && !$beschraenkter_zugriff) { $query = "SELECT verein_id, #__sportsmanager_mitglied_von_verein.ausgetreten, mitgliedsstatus" . "\n FROM #__sportsmanager_mitglied_von_verein" . "\n INNER JOIN #__sportsmanager_verein USING (verein_id)" . "\n WHERE #__sportsmanager_mitglied_von_verein.spieler_id = $id"; $bestehende_vereinsmitgliedschaften = loadObjectList($db, $query); foreach ($bestehende_vereinsmitgliedschaften as $bestehende_vereinsmitgliedschaft) { $ist_mitglied = false; foreach ($vereinsmitgliedschaften as $verein_id) { if ($bestehende_vereinsmitgliedschaft->verein_id == $verein_id) { $ist_mitglied = true; break; } } if (!$ist_mitglied) { $query = "DELETE FROM #__sportsmanager_mitglied_von_verein WHERE verein_id = $bestehende_vereinsmitgliedschaft->verein_id AND spieler_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } $mitgliedsstatus = null; foreach ($vereinsmitgliedschaften as $index => $verein_id) { $ist_mitglied = false; foreach ($bestehende_vereinsmitgliedschaften as $bestehende_vereinsmitgliedschaft) { if ($bestehende_vereinsmitgliedschaft->verein_id == $verein_id) { $ist_mitglied = true; $mitgliedsstatus = $bestehende_vereinsmitgliedschaft->mitgliedsstatus; break; } } if (!$ist_mitglied) { $query = "SELECT COUNT(*)" . "\n FROM #__sportsmanager_verein" . "\n WHERE verein_id = $verein_id"; $n = loadResult($db, $query); if ($n > 0) { $query = "INSERT INTO #__sportsmanager_mitglied_von_verein (spieler_id, verein_id, mitgliedsstatus, ausgetreten) VALUES ('$id', '$verein_id', '" . ($verein_mitgliedsstatus[$index]) . "', " . ($verein_mitgliedsstatus[$index] == 0 ? "TRUE" : "FALSE") . ");"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } else if ($mitgliedsstatus != $verein_mitgliedsstatus[$index]) { $query = "UPDATE #__sportsmanager_mitglied_von_verein" . "\n SET mitgliedsstatus = '" . ($verein_mitgliedsstatus[$index]) . "'," . "\n ausgetreten = " . ($verein_mitgliedsstatus[$index] == 0 ? "TRUE" : "FALSE") . "\n WHERE verein_id = $verein_id AND spieler_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } } if ($id == 0 && !$beschraenkter_zugriff) { $query = "INSERT INTO #__sportsmanager_spieler " . "(vorname, nachname, lizenz, pseudonym, geschlecht, geburtsjahr, strasse, plz, ort, landeskennung, telefon, mobil, email, spielernr, lizenznr, elo_einzel_startwert, elo_doppel_startwert, bild_ausblenden) " . "VALUES ('$vorname', " . "'$nachname', " . "'$lizenz', " . "'$pseudonym', " . "'$geschlecht', " . ($geburtsjahr == null ? "NULL" : "'$geburtsjahr'") . ", " . "'$strasse', " . "'$plz', " . "'$ort', " . "'$landeskennung', " . "'$telefon', " . "'$mobil', " . "'$email', " . "'$spielernr', " . "'$lizenznr', " . "'$elo_startwert_einzel', " . "'$elo_startwert_doppel', " . ($bild_ausblenden ? "TRUE" : "FALSE") . ");"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $id = $db->insertid(); // Vereinsmitgliedschaften erzeugen foreach ($vereinsmitgliedschaften as $index => $verein_id) { $query = "SELECT COUNT(*)" . "\n FROM #__sportsmanager_verein" . "\n WHERE verein_id = $verein_id"; $n = loadResult($db, $query); if ($n > 0) { $query = "INSERT INTO #__sportsmanager_mitglied_von_verein (spieler_id, verein_id, mitgliedsstatus, ausgetreten) VALUES ('$id', '$verein_id', '" . ($verein_mitgliedsstatus[$index]) . "', " . ($verein_mitgliedsstatus[$index] == 0 ? "TRUE" : "FALSE") . ");"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } } $spieler = null; if ($id != 0 && (!$beschraenkter_zugriff || $ansprechpartner_spielerdaten == "1" || $ansprechpartner_spielerdaten == "2")) { $query = "SELECT * FROM #__sportsmanager_spieler WHERE spieler_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) { redirectSportsManagerURL('&task=admin_spieler', "Der Spieler existiert nicht mehr!"); } $spieler = $rows[0]; if ($spieler->elo_einzel_startwert != $elo_startwert_einzel || $spieler->elo_doppel_startwert != $elo_startwert_doppel) $elo_aktualisieren = true; $query = "UPDATE #__sportsmanager_spieler" . "\n SET pseudonym = '$pseudonym'," . "\n strasse = '$strasse'," . "\n plz = '$plz'," . "\n ort = '$ort'," . "\n landeskennung = '$landeskennung'," . "\n telefon = '$telefon'," . "\n mobil = '$mobil'," . "\n bild_ausblenden = " . ($bild_ausblenden ? "TRUE" : "FALSE") . ","; if (!$beschraenkter_zugriff) { $query .= "\n vorname = '$vorname'," . "\n nachname = '$nachname'," . "\n lizenz = '$lizenz'," . "\n geschlecht = '$geschlecht'," . "\n geburtsjahr = " . ($geburtsjahr == null ? "NULL" : "'$geburtsjahr'") . "," . "\n spielernr = '$spielernr'," . "\n lizenznr = '$lizenznr'," . "\n elo_einzel_startwert = " . ($elo_startwert_einzel == null ? "NULL" : "'$elo_startwert_einzel'") . "," . "\n elo_doppel_startwert = " . ($elo_startwert_doppel == null ? "NULL" : "'$elo_startwert_doppel'") . ","; } $query .= "\n email = '$email'" . "\n WHERE spieler_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } if ($geburtsjahr != $spieler->geburtsjahr || $geschlecht != $spieler->geschlecht) $rangliste_aktualisieren = true; } if ($elo_aktualisieren) eloAktualisieren($spieler->erstmals_gespielt); if ($bildbeibehalten == 0 && (!$beschraenkter_zugriff || $ansprechpartner_spielerdaten == "1" || $ansprechpartner_spielerdaten == "3")) { bildLoeschen('spieler', $id); if (!empty($_FILES["bild"]["tmp_name"])) { if (is_uploaded_file($_FILES["bild"]["tmp_name"])) { $size = getimagesize($_FILES["bild"]["tmp_name"]); if (!$size || ($size[2] != IMAGETYPE_JPEG && $size[2] != IMAGETYPE_PNG) || ($size[0] < 60 || $size[1] < 60 || $size[0] > 8192 || $size[1] > 8192)) { redirectSportsManagerURL('&task=admin_spieler', Text::_('COM_SPORTSMANAGER_PLAYER_WRONG_IMAGE_FORMAT')); } $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'spieler'; if (!bildKopierenAngepasst($_FILES["bild"]["tmp_name"], $bilder_pfad . DIRECTORY_SEPARATOR . $id . ($size[2] == IMAGETYPE_PNG ? '.png' : '.jpg'), 180, 240, 1)) { redirectSportsManagerURL('&task=admin_spieler', Text::_('COM_SPORTSMANAGER_IMAGE_COULD_NOT_COPIED')); } } } } aktuellerVereinAktualisieren($id); if ($rangliste_aktualisieren) { ranglisteAktualisieren(0, 0, $id); einstufungAktualisieren(); } redirectSportsManagerURL('&task=admin_spieler&filter=' . urlencode($filter) . '#id' . $id); } #[NoReturn] function adminRemoveSpieler(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("spieler_aendern")) keinZugriff(true); $filter = $jInput->get('filter', '', 'RAW'); $id = $jInput->get('id', 0, 'INT'); $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_teamspiel WHERE heim_spieler_1_id = $id OR heim_spieler_2_id = $id OR gast_spieler_1_id = $id OR gast_spieler_2_id = $id), 1, 0)"; $n = loadResult($db, $query); if ($n > 0) die(Text::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_turniermeldung_spieler WHERE spieler_id = $id), 1, 0)"; $n = loadResult($db, $query); if ($n > 0) die(Text::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_mitglied_von_team WHERE spieler_id = $id), 1, 0)"; $n = loadResult($db, $query); if ($n > 0) die(Text::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb_spiel WHERE heim_spieler_1_id = $id OR heim_spieler_2_id = $id OR gast_spieler_1_id = $id OR gast_spieler_2_id = $id), 1, 0)"; $n = loadResult($db, $query); if ($n > 0) die(Text::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung WHERE spieler_id = $id), 1, 0)"; $n = loadResult($db, $query); if ($n > 0) die(Text::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); $query = "DELETE FROM #__sportsmanager_mitglied_von_verein WHERE spieler_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_spieler WHERE spieler_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } bildLoeschen("spieler", $id); spielerstatistikAktualisieren(); redirectSportsManagerURL('&task=admin_spieler&filter=' . urlencode($filter)); } #[NoReturn] function adminGroomingMehrfacheMitgliedschaften(): void { $db = getDatabase(); if (!benutzerZugriff("spieler_aendern")) keinZugriff(true); $query = "SELECT spieler_id, COUNT(*) AS mehrfach" . "\n FROM #__sportsmanager_mitglied_von_verein" . "\n GROUP BY spieler_id, verein_id" . "\n HAVING mehrfach > 1" . "\n ORDER BY spieler_id"; $mitglieder = loadObjectList($db, $query); foreach ($mitglieder as $mitglied) { $query = "SELECT mitglied_von_verein_id, verein_id" . "\n FROM #__sportsmanager_mitglied_von_verein" . "\n WHERE spieler_id = $mitglied->spieler_id" . "\n ORDER BY verein_id, ausgetreten, mitgliedsstatus"; $rows = loadObjectList($db, $query); $mitglied_verein_id = -1; foreach ($rows as $row) { if ($mitglied_verein_id != $row->verein_id) { $mitglied_verein_id = $row->verein_id; continue; } $query = "DELETE FROM #__sportsmanager_mitglied_von_verein WHERE mitglied_von_verein_id = '$row->mitglied_von_verein_id';"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } redirectSportsManagerURL('&task=admin_uebersicht'); } function adminSpielerZusammenlegenForm(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("spieler_aendern")) keinZugriff(true); $filter = $jInput->get('filter', '', 'RAW'); $query = "SELECT spieler_id, vorname, nachname, spielernr, aktueller_verein_id" . "\n FROM #__sportsmanager_spieler" . "\n ORDER BY nachname, vorname, spielernr, aktueller_verein_id"; $spieler = loadObjectList($db, $query); HTML_sportsmanager_admin::adminSpielerZusammenlegen($spieler, $filter); } #[NoReturn] function adminSpielerZusammenlegen(): void { $db = getDatabase(); global $_FILES; global $sportsmanager_joomla_path; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("spieler_aendern")) keinZugriff(); $spieler_beizubehalten_id = $jInput->get('spieler_beizubehalten_id', 0, 'INT'); $spieler_zu_entfernen_id = $jInput->get('spieler_zu_entfernen_id', 0, 'INT'); $filter = $jInput->get('filter', '', 'RAW'); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_spieler&filter=' . urlencode($filter)); } if ($spieler_beizubehalten_id == $spieler_zu_entfernen_id) { redirectSportsManagerURL('&task=admin_spieler&filter=' . urlencode($filter) . '#id' . $spieler_beizubehalten_id, "Zum Zusammanlegen müssen zwei unterschiedliche Spieler gewählt werden"); } if (!ini_get('safe_mode')) set_time_limit(300); $query = "SELECT * FROM #__sportsmanager_spieler WHERE spieler_id = $spieler_beizubehalten_id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) { redirectSportsManagerURL('&task=admin_spieler&filter=' . urlencode($filter), "Beizubehaltender Spieler existiert nicht."); } $query = "SELECT * FROM #__sportsmanager_spieler WHERE spieler_id = $spieler_zu_entfernen_id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) { redirectSportsManagerURL('&task=admin_spieler&filter=' . urlencode($filter) . '#id' . $spieler_beizubehalten_id, "Zu entfernender Spieler existiert nicht."); } $spieler_zu_entfernen = $rows[0]; $query = "DELETE FROM #__sportsmanager_rangliste_turnierdisziplin_punkte" . "\n WHERE spieler_id = $spieler_zu_entfernen_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_rangliste_punkte" . "\n WHERE spieler_id = $spieler_zu_entfernen_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "UPDATE #__sportsmanager_turniermeldung_spieler" . "\n SET spieler_id = $spieler_beizubehalten_id" . "\n WHERE spieler_id = $spieler_zu_entfernen_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "UPDATE #__sportsmanager_teamspiel" . "\n SET heim_spieler_1_id = $spieler_beizubehalten_id" . "\n WHERE heim_spieler_1_id = $spieler_zu_entfernen_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "UPDATE #__sportsmanager_teamspiel" . "\n SET heim_spieler_2_id = $spieler_beizubehalten_id" . "\n WHERE heim_spieler_2_id = $spieler_zu_entfernen_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "UPDATE #__sportsmanager_teamspiel" . "\n SET gast_spieler_1_id = $spieler_beizubehalten_id" . "\n WHERE gast_spieler_1_id = $spieler_zu_entfernen_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "UPDATE #__sportsmanager_teamspiel" . "\n SET gast_spieler_2_id = $spieler_beizubehalten_id" . "\n WHERE gast_spieler_2_id = $spieler_zu_entfernen_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "UPDATE #__sportsmanager_individualwettbewerb_spiel" . "\n SET heim_spieler_1_id = $spieler_beizubehalten_id" . "\n WHERE heim_spieler_1_id = $spieler_zu_entfernen_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "UPDATE #__sportsmanager_individualwettbewerb_spiel" . "\n SET heim_spieler_2_id = $spieler_beizubehalten_id" . "\n WHERE heim_spieler_2_id = $spieler_zu_entfernen_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "UPDATE #__sportsmanager_individualwettbewerb_spiel" . "\n SET gast_spieler_1_id = $spieler_beizubehalten_id" . "\n WHERE gast_spieler_1_id = $spieler_zu_entfernen_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "UPDATE #__sportsmanager_individualwettbewerb_spiel" . "\n SET gast_spieler_2_id = $spieler_beizubehalten_id" . "\n WHERE gast_spieler_2_id = $spieler_zu_entfernen_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "SELECT DISTINCT individualwettbewerb_id" . "\n FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung" . "\n WHERE spieler_id = $spieler_zu_entfernen_id"; $individualwettbewerbe = loadObjectList($db, $query); foreach ($individualwettbewerbe as $individualwettbewerb) { $individualwettbewerbId = $individualwettbewerb->individualwettbewerb_id; $query = "SELECT *" . "\n FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung" . "\n WHERE individualwettbewerb_id = $individualwettbewerbId" . "\n ORDER BY platz"; $ausgangsplatzierungen = loadObjectList($db, $query); $platzierungen = array(); foreach ($ausgangsplatzierungen as $ausgangsplatzierung) $platzierungen[] = $ausgangsplatzierung->spieler_id; $spieler_beizubehalten_platzierung = in_array($spieler_beizubehalten_id, $platzierungen); $spieler_zu_entfernen_platzierung = array_search($spieler_zu_entfernen_id, $platzierungen); if ($spieler_beizubehalten_platzierung !== false && $spieler_zu_entfernen_platzierung !== false) array_splice($platzierungen, $spieler_zu_entfernen_platzierung, 1); else if ($spieler_beizubehalten_platzierung === false) array_splice($platzierungen, $spieler_zu_entfernen_platzierung, 1, $spieler_beizubehalten_id); $platzierungen_uebrig = $platzierungen; foreach ($ausgangsplatzierungen as $platzierung_vorhanden) { $index = array_search($platzierung_vorhanden->spieler_id, $platzierungen); if ($index !== false) { $platz = $index + 1; if ($platzierung_vorhanden->platz != $platz) { $query = "UPDATE #__sportsmanager_individualwettbewerb_ausgangsplatzierung" . "\n SET platz = '$platz'" . "\n WHERE individualwettbewerb_ausgangsplatzierung_id = " . $platzierung_vorhanden->individualwettbewerb_ausgangsplatzierung_id; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } $index_uebrig = array_search($platzierung_vorhanden->spieler_id, $platzierungen_uebrig); unset($platzierungen_uebrig[$index_uebrig]); } else { $query = "DELETE FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung WHERE individualwettbewerb_ausgangsplatzierung_id = " . $platzierung_vorhanden->individualwettbewerb_ausgangsplatzierung_id; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } foreach ($platzierungen_uebrig as $platzierung_uebrig) { $index = array_search($platzierung_uebrig, $platzierungen); $platz = $index + 1; $query = "INSERT #__sportsmanager_individualwettbewerb_ausgangsplatzierung" . "\n SET individualwettbewerb_id = '$individualwettbewerbId'," . "\n spieler_id = '$platzierung_uebrig'," . "\n platz = '$platz'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } $query = "UPDATE #__sportsmanager_mitglied_von_team" . "\n SET spieler_id = $spieler_beizubehalten_id" . "\n WHERE spieler_id = $spieler_zu_entfernen_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "SELECT mitglied_von_verein_id, verein_id" . "\n FROM #__sportsmanager_mitglied_von_verein" . "\n WHERE spieler_id = $spieler_beizubehalten_id OR spieler_id = $spieler_zu_entfernen_id" . "\n ORDER BY verein_id, ausgetreten, IF(spieler_id = $spieler_beizubehalten_id, 0, 1), mitgliedsstatus"; $rows = loadObjectList($db, $query); $mitglied_verein_id = -1; foreach ($rows as $row) { if ($mitglied_verein_id != $row->verein_id) { $mitglied_verein_id = $row->verein_id; continue; } $query = "DELETE FROM #__sportsmanager_mitglied_von_verein WHERE mitglied_von_verein_id = '$row->mitglied_von_verein_id';"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } $query = "UPDATE #__sportsmanager_mitglied_von_verein" . "\n SET spieler_id = $spieler_beizubehalten_id" . "\n WHERE spieler_id = $spieler_zu_entfernen_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_spieler WHERE spieler_id = $spieler_zu_entfernen_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'spieler'; $neues_bild_pfad = $bilder_pfad . DIRECTORY_SEPARATOR . $spieler_beizubehalten_id . '.'; if (!(file_exists($neues_bild_pfad . 'png') && is_file($neues_bild_pfad . 'png')) && !(file_exists($neues_bild_pfad . 'jpg') && is_file($neues_bild_pfad . 'jpg'))) { $altes_bild_pfad = $bilder_pfad . DIRECTORY_SEPARATOR . $spieler_zu_entfernen_id . '.'; if (file_exists($altes_bild_pfad . 'png') && is_file($altes_bild_pfad . 'png')) File::copy($altes_bild_pfad . 'png', $neues_bild_pfad . 'png'); else if (file_exists($altes_bild_pfad . 'jpg') && is_file($altes_bild_pfad . 'jpg')) File::copy($altes_bild_pfad . 'jpg', $neues_bild_pfad . 'jpg'); } bildLoeschen("spieler", $spieler_zu_entfernen_id); if (!empty($spieler_zu_entfernen->erstmals_gespielt)) { wannGespieltAktualisieren(); individualwettbewerbTabelleAktualisieren(); eloAktualisieren($spieler_zu_entfernen->erstmals_gespielt); } spielerstatistikAktualisieren(); aktuellerVereinAktualisieren($spieler_beizubehalten_id); ranglisteAktualisieren(); einstufungAktualisieren(); redirectSportsManagerURL('&task=admin_spieler&filter=' . urlencode($filter) . '#id' . $spieler_beizubehalten_id); } function adminRemoveInaktiveSpielerForm(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("spieler_aendern")) keinZugriff(true); $filter = $jInput->get('filter', '', 'RAW'); $query = "SELECT #__sportsmanager_spieler.spieler_id, vorname, nachname, spielernr, lizenznr" . "\n FROM #__sportsmanager_spieler" . "\n LEFT JOIN #__sportsmanager_turniermeldung_spieler USING (spieler_id)" . "\n LEFT JOIN #__sportsmanager_individualwettbewerb_ausgangsplatzierung USING (spieler_id)" . "\n LEFT JOIN #__sportsmanager_mitglied_von_team USING (spieler_id)" . "\n LEFT JOIN #__sportsmanager_teamspiel AS teamspiel1 ON #__sportsmanager_spieler.spieler_id = teamspiel1.heim_spieler_1_id" . "\n LEFT JOIN #__sportsmanager_teamspiel AS teamspiel2 ON #__sportsmanager_spieler.spieler_id = teamspiel2.heim_spieler_2_id" . "\n LEFT JOIN #__sportsmanager_teamspiel AS teamspiel3 ON #__sportsmanager_spieler.spieler_id = teamspiel3.gast_spieler_1_id" . "\n LEFT JOIN #__sportsmanager_teamspiel AS teamspiel4 ON #__sportsmanager_spieler.spieler_id = teamspiel4.gast_spieler_2_id" . "\n LEFT JOIN #__sportsmanager_individualwettbewerb_spiel AS individualspiel1 ON #__sportsmanager_spieler.spieler_id = individualspiel1.heim_spieler_1_id" . "\n LEFT JOIN #__sportsmanager_individualwettbewerb_spiel AS individualspiel2 ON #__sportsmanager_spieler.spieler_id = individualspiel2.heim_spieler_2_id" . "\n LEFT JOIN #__sportsmanager_individualwettbewerb_spiel AS individualspiel3 ON #__sportsmanager_spieler.spieler_id = individualspiel3.gast_spieler_1_id" . "\n LEFT JOIN #__sportsmanager_individualwettbewerb_spiel AS individualspiel4 ON #__sportsmanager_spieler.spieler_id = individualspiel4.gast_spieler_2_id" . "\n WHERE ISNULL(aktueller_verein_id)" . "\n AND ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id)" . "\n AND ISNULL(#__sportsmanager_individualwettbewerb_ausgangsplatzierung.spieler_id)" . "\n AND ISNULL(#__sportsmanager_mitglied_von_team.team_id)" . "\n AND ISNULL(teamspiel1.heim_spieler_1_id)" . "\n AND ISNULL(teamspiel2.heim_spieler_2_id)" . "\n AND ISNULL(teamspiel3.gast_spieler_1_id)" . "\n AND ISNULL(teamspiel4.gast_spieler_2_id)" . "\n AND ISNULL(individualspiel1.heim_spieler_1_id)" . "\n AND ISNULL(individualspiel2.heim_spieler_2_id)" . "\n AND ISNULL(individualspiel3.gast_spieler_1_id)" . "\n AND ISNULL(individualspiel4.gast_spieler_2_id)" . "\n ORDER BY nachname, vorname"; $spieler = loadObjectList($db, $query); HTML_sportsmanager_admin::adminRemoveInaktiveSpieler($spieler, $filter); } #[NoReturn] function adminRemoveInaktiveSpieler(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("spieler_aendern")) keinZugriff(); $spieler_beizubehalten_ids = $jInput->get('spielerids', array(), 'ARRAY'); $filter = $jInput->get('filter', '', 'RAW'); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_spieler&filter=' . urlencode($filter)); } $query = "SELECT #__sportsmanager_spieler.spieler_id" . "\n FROM #__sportsmanager_spieler" . "\n LEFT JOIN #__sportsmanager_turniermeldung_spieler USING (spieler_id)" . "\n LEFT JOIN #__sportsmanager_individualwettbewerb_ausgangsplatzierung USING (spieler_id)" . "\n LEFT JOIN #__sportsmanager_mitglied_von_team USING (spieler_id)" . "\n LEFT JOIN #__sportsmanager_teamspiel AS teamspiel1 ON #__sportsmanager_spieler.spieler_id = teamspiel1.heim_spieler_1_id" . "\n LEFT JOIN #__sportsmanager_teamspiel AS teamspiel2 ON #__sportsmanager_spieler.spieler_id = teamspiel2.heim_spieler_2_id" . "\n LEFT JOIN #__sportsmanager_teamspiel AS teamspiel3 ON #__sportsmanager_spieler.spieler_id = teamspiel3.gast_spieler_1_id" . "\n LEFT JOIN #__sportsmanager_teamspiel AS teamspiel4 ON #__sportsmanager_spieler.spieler_id = teamspiel4.gast_spieler_2_id" . "\n LEFT JOIN #__sportsmanager_individualwettbewerb_spiel AS individualspiel1 ON #__sportsmanager_spieler.spieler_id = individualspiel1.heim_spieler_1_id" . "\n LEFT JOIN #__sportsmanager_individualwettbewerb_spiel AS individualspiel2 ON #__sportsmanager_spieler.spieler_id = individualspiel2.heim_spieler_2_id" . "\n LEFT JOIN #__sportsmanager_individualwettbewerb_spiel AS individualspiel3 ON #__sportsmanager_spieler.spieler_id = individualspiel3.gast_spieler_1_id" . "\n LEFT JOIN #__sportsmanager_individualwettbewerb_spiel AS individualspiel4 ON #__sportsmanager_spieler.spieler_id = individualspiel4.gast_spieler_2_id" . "\n WHERE ISNULL(aktueller_verein_id)" . "\n AND ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id)" . "\n AND ISNULL(#__sportsmanager_individualwettbewerb_ausgangsplatzierung.spieler_id)" . "\n AND ISNULL(#__sportsmanager_mitglied_von_team.team_id)" . "\n AND ISNULL(teamspiel1.heim_spieler_1_id)" . "\n AND ISNULL(teamspiel2.heim_spieler_2_id)" . "\n AND ISNULL(teamspiel3.gast_spieler_1_id)" . "\n AND ISNULL(teamspiel4.gast_spieler_2_id)" . "\n AND ISNULL(individualspiel1.heim_spieler_1_id)" . "\n AND ISNULL(individualspiel2.heim_spieler_2_id)" . "\n AND ISNULL(individualspiel3.gast_spieler_1_id)" . "\n AND ISNULL(individualspiel4.gast_spieler_2_id)" . "\n ORDER BY nachname, vorname"; $spieler = loadObjectList($db, $query); $bilder_spieler_ids = array(); foreach ($spieler as $s) { $id = $s->spieler_id; if (in_array($id, $spieler_beizubehalten_ids)) continue; $bilder_spieler_ids[] = $id; $query = "DELETE FROM #__sportsmanager_mitglied_von_verein WHERE spieler_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_spieler WHERE spieler_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } spielerstatistikAktualisieren(); foreach ($bilder_spieler_ids as $id) bildLoeschen("spieler", $id); redirectSportsManagerURL('&task=admin_spieler&filter=' . urlencode($filter)); } function adminImportSpielerForm(): void { $ansprechpartner_importieren = einstellungswert("ansprechpartner_importieren"); if (!benutzerZugriff("spieler_aendern") && !(($ansprechpartner_importieren == 1 || $ansprechpartner_importieren == 2) && benutzerVeranstalterModerator())) keinZugriff(true); HTML_sportsmanager_admin::adminImportSpieler(); } function adminImportSpielerDetailsForm(): void { $db = getDatabase(); global $_FILES; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $ansprechpartner_importieren = einstellungswert("ansprechpartner_importieren"); if (benutzerZugriff("spieler_aendern")) $beschraenkter_zugriff = 0; else if (($ansprechpartner_importieren == 1 || $ansprechpartner_importieren == 2) && benutzerVeranstalterModerator()) $beschraenkter_zugriff = 1; else keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_spieler'); } $query = "SELECT DISTINCT session_id" . "\n FROM #__sportsmanager_spieler_import" . "\n WHERE session_id < SUBTIME(NOW(), '00:05:00')"; $rows = loadObjectList($db, $query); foreach ($rows as $row) { adminDeleteSpielerImport($row->session_id); } if (empty($_FILES["daten"]["tmp_name"]) || !is_uploaded_file($_FILES["daten"]["tmp_name"])) { redirectSportsManagerURL('&task=admin_spieler', Text::_('COM_SPORTSMANAGER_NO_FILE_SPECIFIED')); } $handle = fopen($_FILES["daten"]["tmp_name"], "r"); if (!$handle) { redirectSportsManagerURL('&task=admin_spieler', Text::_('COM_SPORTSMANAGER_COULD_NOT_OPEN_FILE')); } if (feof($handle)) { redirectSportsManagerURL('&task=admin_spieler', Text::_('COM_SPORTSMANAGER_FILE_IS_EMPTY')); } $titelzeile = chop(utf8_encode(fgets($handle, 4096))); if (str_starts_with($titelzeile, "sep=")) { $trennzeichen = substr($titelzeile, 4); if ($trennzeichen == "") // TAB am Ende wird aus irgendwelchen Gründen weggekürzt $trennzeichen = "\t"; $titelzeile = chop(utf8_encode(fgets($handle, 4096))); } else if ($titelzeile == "NAME#VORNAME#GESCHLECHT#VEREIN#STRASSE#PLZ/ORT#TELEFON#FAX#MOBILE#EMAIL#BEMERKUNG#SPIELERPASS#GEBURTSDATUM") $trennzeichen = "#"; else if (str_contains($titelzeile, "\t")) $trennzeichen = "\t"; else if (str_contains($titelzeile, ";")) $trennzeichen = ";"; else $trennzeichen = ","; $spalte = array(); if (str_starts_with($titelzeile, ";All licensees") || str_starts_with($titelzeile, ";All validated licensees")) { // ITSF-Export $lizenz_import = true; $buffer = $titelzeile; while (!feof($handle) && !str_contains($buffer, "Profession")) $buffer = chop(utf8_encode(fgets($handle, 4096))); $spalte["nachname"] = 3; $spalte["vorname"] = 2; $spalte["geschlecht"] = 1; $spalte["spielernr"] = 6; $spalte["lizenznr"] = 0; $spalte["geburtsjahr"] = 5; } else { $lizenz_import = false; $titel = explode($trennzeichen, strtolower($titelzeile)); foreach ($titel as $index => $bezeichnung) { $bezeichnung = trim($bezeichnung); $len = strlen($bezeichnung); if ($len >= 2 && $bezeichnung[0] == '"' && $bezeichnung[$len - 1] == '"') $bezeichnung = trim(str_replace('""', '"', substr($bezeichnung, 1, $len - 2))); if ($bezeichnung == "name" || $bezeichnung == "nachname") $spalte["nachname"] = $index; else if ($bezeichnung == "vorname") $spalte["vorname"] = $index; else if ($bezeichnung == "name, vorname" || $bezeichnung == "name,vorname") $spalte["name,vorname"] = $index; else if ($bezeichnung == "pseudonym") $spalte["pseudonym"] = $index; else if ($bezeichnung == "geschlecht" || $bezeichnung == "anrede") $spalte["geschlecht"] = $index; else if ($bezeichnung == "spielernr" || $bezeichnung == "spielernr." || $bezeichnung == "spielerpass") $spalte["spielernr"] = $index; else if ($bezeichnung == "spielernr alt" || $bezeichnung == "spielernr. alt" || $bezeichnung == "spielernr_alt") $spalte["spielernr_alt"] = $index; else if ($bezeichnung == "lizenznr" || $bezeichnung == "lizenznr.") $spalte["lizenznr"] = $index; else if ($bezeichnung == "organisation") $spalte["organisation"] = $index; else if ($bezeichnung == "vereinssitz") $spalte["vereinssitz"] = $index; else if ($bezeichnung == "vereinsname" || $bezeichnung == "verein") $spalte["vereinsname"] = $index; else if ($bezeichnung == "geburtsdatum") $spalte["geburtsdatum"] = $index; else if ($bezeichnung == "geburtsjahr") $spalte["geburtsjahr"] = $index; else if ($bezeichnung == "email" || $bezeichnung == "e-mail") $spalte["email"] = $index; else if (str_starts_with($bezeichnung, "stra")) $spalte["strasse"] = $index; else if ($bezeichnung == "plz/ort") $spalte["plz/ort"] = $index; else if ($bezeichnung == "plz") $spalte["plz"] = $index; else if ($bezeichnung == "ort") $spalte["ort"] = $index; else if ($bezeichnung == "landeskennung") $spalte["landeskennung"] = $index; else if ($bezeichnung == "telefon") $spalte["telefon"] = $index; else if ($bezeichnung == "mobil") $spalte["mobil"] = $index; else if ($bezeichnung == "austritt" || $bezeichnung == "ausgetreten") $spalte["ausgetreten"] = $index; else if ($bezeichnung == "mitgliedsstatus") $spalte["mitgliedsstatus"] = $index; } if (((!isset($spalte["nachname"]) || !isset($spalte["vorname"])) && !isset($spalte["name,vorname"])) || !isset($spalte["spielernr"])) { redirectSportsManagerURL('&task=admin_spieler', "Die übergebene Datei ist keine Spielerdatei."); } } $session_id = date('Y-m-d H:i:s'); while (!feof($handle)) { $buffer = chop(utf8_encode(fgets($handle, 4096))); $daten = explode($trennzeichen, $buffer); foreach ($daten as $index => $wert) { $wert = trim($wert); $len = strlen($wert); if ($len < 2 || $wert[$len - 1] != '"' || !($wert[0] == '"' || ($wert[0] == '=' && $wert[1] == '"'))) $daten[$index] = $wert; else if ($wert[0] == '"') $daten[$index] = trim(str_replace('""', '"', substr($wert, 1, $len - 2))); else $daten[$index] = trim(str_replace('""', '"', substr($wert, 2, $len - 3))); } if (isset($spalte["vorname"]) && isset($spalte["nachname"]) && isset($daten[$spalte["vorname"]]) && isset($daten[$spalte["nachname"]])) { $nachname = $daten[$spalte["nachname"]]; $vorname = $daten[$spalte["vorname"]]; } else if (isset($spalte["name,vorname"]) && isset($daten[$spalte["name,vorname"]])) { $pos = strpos($daten[$spalte["name,vorname"]], ","); if ($pos === false) continue; $nachname = trim(substr($daten[$spalte["name,vorname"]], 0, $pos)); $vorname = trim(substr($daten[$spalte["name,vorname"]], $pos + 1)); } else continue; if ($vorname == "" || $nachname == "") continue; $mitgliedsstatus = 1; if (isset($spalte["mitgliedsstatus"]) && !empty($daten[$spalte["mitgliedsstatus"]])) { $s = strtolower($daten[$spalte["mitgliedsstatus"]]); if ($s == "ausgetreten") $mitgliedsstatus = 0; else if ($s == "passiv") $mitgliedsstatus = 3; else if (str_starts_with($s, "eingeschr")) $mitgliedsstatus = 2; } else if (isset($spalte["ausgetreten"]) && !empty($daten[$spalte["ausgetreten"]])) { if (strtolower($daten[$spalte["ausgetreten"]]) == "ja") $mitgliedsstatus = 0; } if ($mitgliedsstatus == 0) continue; $geschlecht = isset($spalte["geschlecht"]) && isset($daten[$spalte["geschlecht"]]) ? (($daten[$spalte["geschlecht"]][0] == "M" || $daten[$spalte["geschlecht"]][0] == "m" || $daten[$spalte["geschlecht"]][0] == "H" || $daten[$spalte["geschlecht"]][0] == "h") ? "M" : "W") : "M"; $spielernr = isset($daten[$spalte["spielernr"]]) ? trim($daten[$spalte["spielernr"]]) : ""; if (!empty($spielernr) && !ctype_digit(substr($spielernr, strlen($spielernr) - 1, 1))) $spielernr = ""; $spielernr_alt = isset($spalte["spielernr_alt"]) && isset($daten[$spalte["spielernr_alt"]]) ? trim($daten[$spalte["spielernr_alt"]]) : ""; $lizenznr = isset($spalte["lizenznr"]) && isset($daten[$spalte["lizenznr"]]) ? $daten[$spalte["lizenznr"]] : ""; if (!empty($lizenznr) && !ctype_digit(substr($lizenznr, strlen($lizenznr) - 1, 1))) $lizenznr = ""; $pseudonym = isset($spalte["pseudonym"]) && isset($daten[$spalte["pseudonym"]]) ? $daten[$spalte["pseudonym"]] : ""; $organisation = isset($spalte["organisation"]) && isset($daten[$spalte["organisation"]]) ? $daten[$spalte["organisation"]] : ""; $vereinssitz = isset($spalte["vereinssitz"]) && isset($daten[$spalte["vereinssitz"]]) ? $daten[$spalte["vereinssitz"]] : ""; $vereinsname = isset($spalte["vereinsname"]) && isset($daten[$spalte["vereinsname"]]) ? $daten[$spalte["vereinsname"]] : ""; $geburtsdatum = isset($spalte["geburtsdatum"]) && isset($daten[$spalte["geburtsdatum"]]) ? normalisiertesDatum($daten[$spalte["geburtsdatum"]]) : null; $geburtsjahr = isset($spalte["geburtsjahr"]) && isset($daten[$spalte["geburtsjahr"]]) ? $daten[$spalte["geburtsjahr"]] : null; if (empty($geburtsjahr) || !ctype_digit($geburtsjahr) || $geburtsjahr < 1800) $geburtsjahr = null; $email = isset($spalte["email"]) && isset($daten[$spalte["email"]]) ? $daten[$spalte["email"]] : ""; $strasse = isset($spalte["strasse"]) && isset($daten[$spalte["strasse"]]) ? $daten[$spalte["strasse"]] : ""; if (isset($spalte["plz/ort"]) && isset($daten[$spalte["plz/ort"]])) { $pos = strpos($daten[$spalte["plz/ort"]], ' '); if (!$pos) { $plz = ""; $ort = ""; } else { $plz = substr($daten[$spalte["plz/ort"]], 0, $pos); $ort = substr($daten[$spalte["plz/ort"]], $pos + 1); } } else { $plz = ""; $ort = ""; } if (isset($spalte["plz"])) $plz = $daten[$spalte["plz"]] ?? ""; if (isset($spalte["ort"])) $ort = $daten[$spalte["ort"]] ?? ""; $landeskennung = isset($spalte["landeskennung"]) && isset($daten[$spalte["landeskennung"]]) ? $daten[$spalte["landeskennung"]] : ""; $telefon = isset($spalte["telefon"]) && isset($daten[$spalte["telefon"]]) ? $daten[$spalte["telefon"]] : ""; $mobil = isset($spalte["mobil"]) && isset($daten[$spalte["mobil"]]) ? $daten[$spalte["mobil"]] : ""; $query = "INSERT #__sportsmanager_spieler_import" . "\n SET session_id = '" . $db->escape($session_id) . "'," . "\n vorname = '" . $db->escape($vorname) . "'," . "\n nachname = '" . $db->escape($nachname) . "'," . "\n spielernr = '" . $db->escape($spielernr) . "'"; if (isset($spalte["spielernr_alt"])) $query .= ",\n spielernr_alt = '" . $db->escape($spielernr_alt) . "'"; if (isset($spalte["lizenznr"])) $query .= ",\n lizenznr = '" . $db->escape($lizenznr) . "'"; if (isset($spalte["pseudonym"])) $query .= ",\n pseudonym = '" . $db->escape($pseudonym) . "'"; $query .= ",\n geschlecht = '" . $db->escape($geschlecht) . "'"; if (isset($spalte["geburtsjahr"]) || isset($spalte["geburtsdatum"])) $query .= ",\n geburtsjahr = " . ($geburtsjahr == null ? ($geburtsdatum == null ? "NULL" : ("YEAR('" . $db->escape($geburtsdatum) . "')")) : ("'" . $db->escape($geburtsjahr) . "'")); if (isset($spalte["strasse"])) $query .= ",\n strasse = '" . $db->escape($strasse) . "'"; if (isset($spalte["plz"])) $query .= ",\n plz = '" . $db->escape($plz) . "'"; if (isset($spalte["ort"])) $query .= ",\n ort = '" . $db->escape($ort) . "'"; if (isset($spalte["landeskennung"])) $query .= ",\n landeskennung = '" . $db->escape($landeskennung) . "'"; if (isset($spalte["telefon"])) $query .= ",\n telefon = '" . $db->escape($telefon) . "'"; if (isset($spalte["mobil"])) $query .= ",\n mobil = '" . $db->escape($mobil) . "'"; if (isset($spalte["email"])) $query .= ",\n email = '" . $db->escape($email) . "'"; if (isset($spalte["vereinsname"])) $query .= ",\n vereinsname = '" . $db->escape($vereinsname) . "'"; if (isset($spalte["vereinssitz"])) $query .= ",\n vereinssitz = '" . $db->escape($vereinssitz) . "'"; if (isset($spalte["organisation"])) $query .= ",\n veranstalterbezeichnung = '" . $db->escape($organisation) . "'"; $query .= ",\n mitgliedsstatus = '" . $mitgliedsstatus . "'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } // if (!isset($veranstalter_import[$organisation])) // $veranstalter_import[$organisation] = TRUE; } fclose($handle); if ($lizenz_import) { $query = "SELECT COUNT(*)" . "\n FROM #__sportsmanager_spieler_import" . "\n INNER JOIN #__sportsmanager_spieler USING (spielernr)" . "\n WHERE session_id = '" . $db->escape($session_id) . "' AND #__sportsmanager_spieler_import.spielernr <> '' AND #__sportsmanager_spieler_import.lizenznr <> ''"; $lizenzen_aktualisiert = loadResult($db, $query); $query = "UPDATE #__sportsmanager_spieler_import" . "\n INNER JOIN #__sportsmanager_spieler USING (spielernr)" . "\n SET #__sportsmanager_spieler.lizenznr = #__sportsmanager_spieler_import.lizenznr" . "\n WHERE session_id = '" . $db->escape($session_id) . "' AND #__sportsmanager_spieler_import.spielernr <> '' AND #__sportsmanager_spieler_import.lizenznr <> ''"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } adminDeleteSpielerImport($session_id); HTML_sportsmanager_admin::adminImportSpielerBericht($lizenzen_aktualisiert, array(), 0, array(), array(), array(), false, redirectSessionIdEmpty() ? null : redirectSessionIdSetzen()); return; } $spalten = array(); if (isset($spalte["pseudonym"])) $spalten[] = "pseudonym"; if (isset($spalte["geschlecht"])) $spalten[] = "geschlecht"; $spalten[] = "spielernr"; if (isset($spalte["spielernr_alt"])) $spalten[] = "spielernr_alt"; if (isset($spalte["lizenznr"])) $spalten[] = "lizenznr"; if (isset($spalte["organisation"])) $spalten[] = "organisation"; if (isset($spalte["vereinssitz"])) $spalten[] = "vereinssitz"; if (isset($spalte["vereinsname"])) $spalten[] = "vereinsname"; if (isset($spalte["geburtsdatum"])) $spalten[] = "geburtsdatum"; if (isset($spalte["geburtsjahr"]) || isset($spalte["geburtsdatum"])) $spalten[] = "geburtsjahr"; if (isset($spalte["email"])) $spalten[] = "email"; if (isset($spalte["strasse"])) $spalten[] = "strasse"; if (isset($spalte["strasse"])) $spalten[] = "strasse"; if (isset($spalte["plz/ort"]) || isset($spalte["plz"])) $spalten[] = "plz"; if (isset($spalte["plz/ort"]) || isset($spalte["ort"])) $spalten[] = "ort"; if (isset($spalte["landeskennung"])) $spalten[] = "landeskennung"; if (isset($spalte["telefon"])) $spalten[] = "telefon"; if (isset($spalte["mobil"])) $spalten[] = "mobil"; $spalten[] = "mitgliedsstatus"; $query = "SELECT *" . "\n FROM #__sportsmanager_veranstalter"; if ($beschraenkter_zugriff) $query .= "\n WHERE" . veranstalterFilter("veranstalter_id IN"); $query .= "\n ORDER BY veranstalterbezeichnung"; $veranstalter = loadObjectList($db, $query); $query = "SELECT DISTINCT veranstalterbezeichnung" . "\n FROM #__sportsmanager_spieler_import" . "\n WHERE session_id = '" . $db->escape($session_id) . "'" . "\n ORDER BY veranstalterbezeichnung"; $veranstalter_import = loadObjectList($db, $query); $veranstalter_zugehoerigkeit = array(); foreach ($veranstalter_import as $v) { $query = "SELECT #__sportsmanager_veranstalter.veranstalter_id, COUNT(*) AS spieler" . "\n FROM #__sportsmanager_spieler_import" . "\n INNER JOIN #__sportsmanager_spieler ON #__sportsmanager_spieler_import.spielernr = #__sportsmanager_spieler.spielernr" . "\n INNER JOIN #__sportsmanager_mitglied_von_verein USING (spieler_id)" . "\n INNER JOIN #__sportsmanager_verein USING (verein_id)" . "\n INNER JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" . "\n WHERE session_id = '" . $db->escape($session_id) . "' AND #__sportsmanager_spieler_import.spielernr != '' AND " . (empty($v->veranstalterbezeichnung) ? "ISNULL(#__sportsmanager_spieler_import.veranstalterbezeichnung)" : ("#__sportsmanager_spieler_import.veranstalterbezeichnung = '" . $db->escape($v->veranstalterbezeichnung) . "'")) . " AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten" . "\n GROUP BY #__sportsmanager_veranstalter.veranstalter_id" . "\n ORDER BY spieler DESC" . "\n LIMIT 1"; $rows = loadObjectList($db, $query); if (count($rows) > 0) $veranstalter_zugehoerigkeit[$v->veranstalterbezeichnung] = $rows[0]->veranstalter_id; } $query = "SELECT DISTINCT vereinsname, veranstalterbezeichnung" . "\n FROM #__sportsmanager_spieler_import" . "\n WHERE session_id = '" . $db->escape($session_id) . "'"; $vereine_import = loadObjectList($db, $query); if (!$beschraenkter_zugriff && count($vereine_import) == 1) { $verein_import = $vereine_import[0]->vereinsname; $query = "SELECT #__sportsmanager_verein.verein_id, vereinsname, veranstalterbezeichnung" . "\n FROM #__sportsmanager_verein" . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" . "\n WHERE NOT ausgetreten" . "\n ORDER BY veranstalterbezeichnung, vereinsname"; $vereine = loadObjectList($db, $query); } else { $verein_import = ""; $vereine = array(); } HTML_sportsmanager_admin::adminImportSpielerDetails($beschraenkter_zugriff, $ansprechpartner_importieren, $veranstalter, $veranstalter_import, $veranstalter_zugehoerigkeit, $session_id, implode(",", $spalten), $verein_import, $vereine, einstellungswert("spielerimport_persoenliche_daten_vorauswahl")); } function adminDeleteSpielerImport($session_id): void { $db = getDatabase(); $query = "DELETE FROM #__sportsmanager_spieler_import" . "\n WHERE session_id = '" . $db->escape($session_id) . "'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } function adminImportSpielerVorschau(): void { $db = getDatabase(); global $_FILES; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $ansprechpartner_importieren = einstellungswert("ansprechpartner_importieren"); if (benutzerZugriff("spieler_aendern")) $beschraenkter_zugriff = 0; else if (($ansprechpartner_importieren == 1 || $ansprechpartner_importieren == 2) && benutzerVeranstalterModerator()) $beschraenkter_zugriff = 1; else keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_spieler'); } if (!ini_get('safe_mode')) set_time_limit(300); $session_id = $jInput->get('session_id', '', 'RAW'); $query = "SELECT DISTINCT veranstalterbezeichnung" . "\n FROM #__sportsmanager_spieler_import" . "\n WHERE session_id = '" . $db->escape($session_id) . "'" . "\n ORDER BY veranstalterbezeichnung"; $veranstalter_import = loadObjectList($db, $query); $spalten = array(); foreach (explode(",", $jInput->get('spalten', '', 'RAW')) as $s) $spalten[$s] = true; $veranstalter = array(); $n = 1; foreach ($veranstalter_import as $v) { $veranstalter_id = $jInput->get('veranstalter_' . $n . '_id', '', 'INT'); if (!$beschraenkter_zugriff || (!empty($veranstalter_id) && benutzerVeranstalterModerator($veranstalter_id))) $veranstalter[$v->veranstalterbezeichnung] = $veranstalter_id; else $veranstalter[$v->veranstalterbezeichnung] = ""; $n++; } //check Passnummer auf gueltiges Format $query = "SELECT nachname, vorname, spielernr, spielernr_alt" . "\n FROM #__sportsmanager_spieler_import" . "\n WHERE session_id = '" . $db->escape($session_id) . "'" . "\n AND ((spielernr NOT REGEXP '^[0-9]{2}-[0-9]{4,6}$' AND spielernr <> '')" . "\n OR (spielernr_alt NOT REGEXP '^[0-9]{2}-[0-9]{4,6}$' AND spielernr_alt <> ''));"; $spielerfehler = loadObjectList($db, $query); if (count($spielerfehler) > 0) { adminDeleteSpielerImport($session_id); HTML_sportsmanager_admin::adminImportSpielerFehler($spielerfehler, $fehler="Passnummer"); return; } $spielernr_aendern = false; if (isset($spalten["spielernr_alt"])) { $query = "SELECT nachname, vorname, spielernr, spielernr_alt" . "\n FROM #__sportsmanager_spieler_import" . "\n WHERE session_id = '" . $db->escape($session_id) . "' AND mitgliedsstatus <> 0 AND spielernr != spielernr_alt AND NOT ISNULL(spielernr) AND NOT ISNULL(spielernr_alt) AND spielernr != '' AND spielernr_alt != ''" . "\n LIMIT 1"; $spielervergleich = loadObjectList($db, $query); if (count($spielervergleich) > 0) { $spielernr_aendern = true; $s1 = $spielervergleich[0]; $query = "SELECT nachname, vorname, spielernr" . "\n FROM #__sportsmanager_spieler" . "\n WHERE spielernr = '$s1->spielernr'"; $spieler = loadObjectList($db, $query); if (count($spieler) > 0) { $s2 = $spieler[0]; if ($s1->vorname == $s2->vorname && $s1->nachname == $s2->nachname) { $query = "UPDATE #__sportsmanager_spieler_import" . "\n SET spielernr_alt = NULL"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $spielernr_aendern = false; } } if ($spielernr_aendern) { $query = "SELECT nachname, vorname, bestand.spielernr" . "\n FROM" . "\n (SELECT nachname, vorname, spielernr, spielernr_alt" . "\n FROM #__sportsmanager_spieler_import" . "\n WHERE session_id = '" . $db->escape($session_id) . "' AND mitgliedsstatus <> 0 AND spielernr != spielernr_alt AND NOT ISNULL(spielernr) AND NOT ISNULL(spielernr_alt) AND spielernr != '' AND spielernr_alt != '') AS import" . "\n INNER JOIN" . "\n (SELECT spielernr" . "\n FROM #__sportsmanager_spieler" . "\n ) AS bestand" . "\n ON bestand.spielernr = import.spielernr" . "\n WHERE NOT EXISTS(SELECT * FROM #__sportsmanager_spieler_import WHERE spielernr_alt = bestand.spielernr AND spielernr != spielernr_alt AND NOT ISNULL(spielernr) AND NOT ISNULL(spielernr_alt) AND spielernr != '' AND spielernr_alt != '')" . "\n ORDER BY nachname, vorname"; $konflikte = loadObjectList($db, $query); if (count($konflikte) > 0) { adminDeleteSpielerImport($session_id); HTML_sportsmanager_admin::adminImportSpielerFehler($konflikte, $fehler="konflikt"); return; } } } } $query = "SELECT #__sportsmanager_spieler_import.*, #__sportsmanager_spieler.spieler_id, IF(#__sportsmanager_spieler.nachname != #__sportsmanager_spieler_import.nachname, #__sportsmanager_spieler.nachname, NULL) AS nachname_alt, IF(#__sportsmanager_spieler.vorname != #__sportsmanager_spieler_import.vorname, #__sportsmanager_spieler.vorname, NULL) AS vorname_alt," . "\n IF(#__sportsmanager_spieler_import.spielernr = '', (SELECT COUNT(*) FROM #__sportsmanager_spieler AS t1 WHERE (#__sportsmanager_spieler_import.vorname = t1.vorname AND #__sportsmanager_spieler_import.nachname = t1.nachname AND ((ISNULL(#__sportsmanager_spieler_import.geburtsjahr) AND ISNULL(t1.geburtsjahr)) OR #__sportsmanager_spieler_import.geburtsjahr = t1.geburtsjahr))), 0) AS namensgleich" . "\n FROM #__sportsmanager_spieler_import" . "\n LEFT JOIN #__sportsmanager_spieler ON #__sportsmanager_spieler_import.spielernr != '' AND " . ($spielernr_aendern ? "IF(NOT ISNULL(#__sportsmanager_spieler_import.spielernr_alt) AND #__sportsmanager_spieler_import.spielernr_alt != '', #__sportsmanager_spieler_import.spielernr_alt = #__sportsmanager_spieler.spielernr, #__sportsmanager_spieler_import.spielernr = #__sportsmanager_spieler.spielernr)" : "#__sportsmanager_spieler_import.spielernr = #__sportsmanager_spieler.spielernr") . "\n WHERE session_id = '" . $db->escape($session_id) . "'" . "\n HAVING namensgleich > 0 OR NOT ISNULL(nachname_alt) OR NOT ISNULL(vorname_alt)" // "namensgleich" kann in der "ORDER"-Anweisung" nicht verwendet werden, da MySQL 5.0.x dies nicht akzeptiert . "\n ORDER BY IF(#__sportsmanager_spieler_import.spielernr = '', (SELECT COUNT(*) FROM #__sportsmanager_spieler AS t1 WHERE (#__sportsmanager_spieler_import.vorname = t1.vorname AND #__sportsmanager_spieler_import.nachname = t1.nachname AND ((ISNULL(#__sportsmanager_spieler_import.geburtsjahr) AND ISNULL(t1.geburtsjahr)) OR #__sportsmanager_spieler_import.geburtsjahr = t1.geburtsjahr))), 0) > 0 DESC, nachname, vorname"; $spieler_import = loadObjectList($db, $query); $import_verweigern = false; if ($beschraenkter_zugriff) { foreach ($spieler_import as $s) { if ($s->namensgleich > 0) { $import_verweigern = true; break; } $p1 = $p2 = 100; if ($s->nachname_alt != null) similar_text($s->nachname, $s->nachname_alt, $p1); if ($s->vorname_alt != null) similar_text($s->vorname, $s->vorname_alt, $p2); if (floor($p1) < 75 && floor($p2) < 75) { $p1 = $p2 = 100; if ($s->nachname_alt != null) similar_text($s->vorname, $s->nachname_alt, $p1); if ($s->vorname_alt != null) similar_text($s->nachname, $s->vorname_alt, $p2); if (floor($p1) < 75 && floor($p2) < 75) { $import_verweigern = true; break; } } } if (!$import_verweigern) { $query = "SELECT SUM(IF(ISNULL(spieler_id), 0, 1)) AS zugeordnet, SUM(IF(ISNULL(spieler_id), 1, 0)) AS nicht_zugeordnet" . "\n FROM #__sportsmanager_spieler_import" . "\n LEFT JOIN #__sportsmanager_spieler ON #__sportsmanager_spieler_import.spielernr != '' AND " . ($spielernr_aendern ? "IF(NOT ISNULL(#__sportsmanager_spieler_import.spielernr_alt) AND #__sportsmanager_spieler_import.spielernr_alt != '', #__sportsmanager_spieler_import.spielernr_alt = #__sportsmanager_spieler.spielernr, #__sportsmanager_spieler_import.spielernr = #__sportsmanager_spieler.spielernr)" : "#__sportsmanager_spieler_import.spielernr = #__sportsmanager_spieler.spielernr") . "\n WHERE session_id = '" . $db->escape($session_id) . "'"; $spieler_zugeordnet = loadObjectList($db, $query); if (count($spieler_zugeordnet) > 0 && $spieler_zugeordnet[0]->nicht_zugeordnet > ($spieler_zugeordnet[0]->zugeordnet / 2)) $import_verweigern = true; } } if ($import_verweigern) { adminDeleteSpielerImport($session_id); } HTML_sportsmanager_admin::adminImportSpielerVorschau($import_verweigern, $spieler_import, $veranstalter, $session_id, $jInput->get('persoenliche_daten', 0, 'INT'), $jInput->get('lizenznr_beibehalten', 0, 'INT'), $jInput->get('spalten', '', 'RAW')); } function adminImportSpieler(): void { $db = getDatabase(); global $_FILES; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $ansprechpartner_importieren = einstellungswert("ansprechpartner_importieren"); if (benutzerZugriff("spieler_aendern")) $beschraenkter_zugriff = 0; else if (($ansprechpartner_importieren == 1 || $ansprechpartner_importieren == 2) && benutzerVeranstalterModerator()) $beschraenkter_zugriff = 1; else keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_spieler'); } if (!ini_get('safe_mode')) set_time_limit(300); if (!$beschraenkter_zugriff || $ansprechpartner_importieren != 1) $persoenliche_daten = $jInput->get('persoenliche_daten', 0, 'INT'); // 0: "Vor- und Nachname, Geschlecht, Spielernr., Lizenznr.", 1: "Vor- und Nachname, Geschlecht, Spielernr., Lizenznr., Geburtsdatum", "Alle" else $persoenliche_daten = 0; $lizenznr_beibehalten = $jInput->get('lizenznr_beibehalten', 0, 'INT'); $session_id = $jInput->get('session_id', '', 'RAW'); $query = "SELECT DISTINCT veranstalterbezeichnung" . "\n FROM #__sportsmanager_spieler_import" . "\n WHERE session_id = '" . $db->escape($session_id) . "'" . "\n ORDER BY veranstalterbezeichnung"; $veranstalter_import = loadObjectList($db, $query); $spalten = array(); foreach (explode(",", $jInput->get('spalten', '', 'RAW')) as $s) $spalten[$s] = true; $veranstalter = array(); $n = 1; $verein_explizit = 0; foreach ($veranstalter_import as $v) { if (isset($_POST["veranstalter_" . $n . "_id"])) { $veranstalter_id = $jInput->get('veranstalter_' . $n . '_id', '', 'INT'); if (!$beschraenkter_zugriff || (!empty($veranstalter_id) && benutzerVeranstalterModerator($veranstalter_id))) { if ($veranstalter_id == "") $veranstalter_id = -1; else if ($veranstalter_id < 0) { $verein_explizit = abs($veranstalter_id); break; } else $veranstalter_id = intval($veranstalter_id); $veranstalter[$v->veranstalterbezeichnung] = $veranstalter_id; } else { $veranstalter[$v->veranstalterbezeichnung] = -1; } } $n++; } /* * TODO: Importinhalt um Spielernummern ergänzen, dann UPDATE aller gegebenen Spalten. So kein Vorgehen Spieler für Spieler erforderlich. * Immer Spieler neu hinzufügen, wenn Spieler über Spielernr. nicht gefunden werden konnte, d.h. * wenn keine Spielernr. vorhanden, dann Spielernr. generieren * sonst Spielernr. übernehmen */ if (isset($spalten["spielernr_alt"])) { $query = "SELECT nachname, vorname, bestand.spielernr" . "\n FROM" . "\n (SELECT nachname, vorname, spielernr, spielernr_alt" . "\n FROM #__sportsmanager_spieler_import" . "\n WHERE session_id = '" . $db->escape($session_id) . "' AND mitgliedsstatus <> 0 AND spielernr != spielernr_alt AND NOT ISNULL(spielernr) AND NOT ISNULL(spielernr_alt) AND spielernr != '' AND spielernr_alt != '') AS import" . "\n INNER JOIN" . "\n (SELECT spielernr" . "\n FROM #__sportsmanager_spieler" . "\n ) AS bestand" . "\n ON bestand.spielernr = import.spielernr" . "\n WHERE NOT EXISTS(SELECT * FROM #__sportsmanager_spieler_import AS it1 WHERE spielernr_alt = bestand.spielernr AND spielernr != spielernr_alt AND NOT ISNULL(spielernr) AND NOT ISNULL(spielernr_alt) AND spielernr != '' AND spielernr_alt != '')" . "\n ORDER BY nachname, vorname"; $konflikte = loadObjectList($db, $query); if (count($konflikte) > 0) { HTML_sportsmanager_admin::adminImportSpielerFehler($konflikte, $fehler="konflikt"); return; } $query = "UPDATE #__sportsmanager_spieler" . "\n INNER JOIN #__sportsmanager_spieler_import ON NOT ISNULL(spielernr_alt) AND spielernr_alt != '' AND spielernr_alt = #__sportsmanager_spieler.spielernr" . "\n SET #__sportsmanager_spieler.spielernr = #__sportsmanager_spieler_import.spielernr" . "\n WHERE session_id = '" . $db->escape($session_id) . "' AND mitgliedsstatus <> 0 AND #__sportsmanager_spieler.spielernr = #__sportsmanager_spieler_import.spielernr_alt"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } $query = "SELECT IF(EXISTS(" . "\n SELECT * FROM #__sportsmanager_spieler" . "\n INNER JOIN #__sportsmanager_spieler_import ON NOT ISNULL(#__sportsmanager_spieler_import.spielernr) AND #__sportsmanager_spieler_import.spielernr != '' AND #__sportsmanager_spieler_import.spielernr = #__sportsmanager_spieler.spielernr" . "\n WHERE #__sportsmanager_spieler_import.geschlecht != #__sportsmanager_spieler.geschlecht OR #__sportsmanager_spieler_import.geburtsjahr != #__sportsmanager_spieler.geburtsjahr" . "\n), 1, 0)"; $kategorie_potentiell_geaendert = loadResult($db, $query); $query = "SELECT #__sportsmanager_spieler_import.*, #__sportsmanager_spieler.spieler_id, IF(#__sportsmanager_spieler.nachname != #__sportsmanager_spieler_import.nachname, #__sportsmanager_spieler.nachname, NULL) AS nachname_alt, IF(#__sportsmanager_spieler.vorname != #__sportsmanager_spieler_import.vorname, #__sportsmanager_spieler.vorname, NULL) AS vorname_alt," . "\n IF(#__sportsmanager_spieler_import.spielernr = '', (SELECT COUNT(*) FROM #__sportsmanager_spieler AS tt1 WHERE (#__sportsmanager_spieler_import.vorname = tt1.vorname AND #__sportsmanager_spieler_import.nachname = tt1.nachname AND ((ISNULL(#__sportsmanager_spieler_import.geburtsjahr) AND ISNULL(tt1.geburtsjahr)) OR #__sportsmanager_spieler_import.geburtsjahr = tt1.geburtsjahr))), 0) AS namensgleich" . "\n FROM #__sportsmanager_spieler_import" . "\n LEFT JOIN #__sportsmanager_spieler ON #__sportsmanager_spieler_import.spielernr != '' AND #__sportsmanager_spieler_import.spielernr = #__sportsmanager_spieler.spielernr" . "\n WHERE session_id = '" . $db->escape($session_id) . "' AND 1 = 1" . "\n ORDER BY IF(#__sportsmanager_spieler_import.spielernr = '', (SELECT COUNT(*) FROM #__sportsmanager_spieler AS tt2 WHERE (#__sportsmanager_spieler_import.vorname = tt2.vorname AND #__sportsmanager_spieler_import.nachname = tt2.nachname AND ((ISNULL(#__sportsmanager_spieler_import.geburtsjahr) AND ISNULL(tt2.geburtsjahr)) OR #__sportsmanager_spieler_import.geburtsjahr = tt2.geburtsjahr))), 0) > 0 DESC, IF(NOT ISNULL(IF(#__sportsmanager_spieler.nachname != #__sportsmanager_spieler_import.nachname, #__sportsmanager_spieler.nachname, NULL)) OR NOT ISNULL(IF(#__sportsmanager_spieler.vorname != #__sportsmanager_spieler_import.vorname, #__sportsmanager_spieler.vorname, NULL)), 0, 1), nachname, vorname"; $spieler_import = loadObjectList($db, $query); if (empty($verein_explizit)) { // Alle Vereinsmitgliedschaften des Verbandes vorsorglich beenden, damit diese beim Import ggf. wieder aktiviert werden können foreach ($veranstalter as $veranstalterId) { if ($veranstalterId != -1) { $query = "UPDATE #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id)" . "\n SET mitgliedsstatus = 0," . "\n #__sportsmanager_mitglied_von_verein.ausgetreten = TRUE" . "\n WHERE " . ($veranstalterId == 0 ? "ISNULL(veranstalter_id)" : "veranstalter_id = $veranstalterId"); $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } } else if ($verein_explizit != -1) { $query = "SELECT * FROM #__sportsmanager_verein WHERE verein_id = $verein_explizit"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id!"); // Alle Vereinsmitgliedschaften des Vereins vorsorglich beenden, damit diese beim Import ggf. wieder aktiviert werden können $query = "UPDATE #__sportsmanager_mitglied_von_verein" . "\n SET mitgliedsstatus = 0," . "\n ausgetreten = TRUE" . "\n WHERE verein_id = $verein_explizit"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } // Nächste Spieler-Nr. ermitteln $query = "SELECT * FROM #__sportsmanager_einstellungen WHERE name = 'basis_spielernr'"; $rows = loadObjectList($db, $query); if (count($rows) == 0) die("Fehler: Inkonsistenz in den MySQL-Tabellen!"); $naechste_spielernr = $rows[0]->wert; if (empty($naechste_spielernr)) $naechste_spielernr = "1"; for ($i = strlen($naechste_spielernr) - 1; $i >= 0; $i--) { if ($naechste_spielernr[$i] < '0' || $naechste_spielernr[$i] > '9') break; } $spielernr_praefix = substr($naechste_spielernr, 0, $i + 1); $query = "SELECT spielernr" . "\n FROM #__sportsmanager_spieler" . "\n WHERE Left(spielernr, " . strlen($spielernr_praefix) . ") = '" . $db->escape($spielernr_praefix) . "'" . "\n ORDER BY LENGTH(spielernr) DESC, spielernr DESC" . "\n LIMIT 1"; $rows = loadObjectList($db, $query); if (count($rows) > 0) { $naechste_spielernr = $rows[0]->spielernr; for ($i = strlen($naechste_spielernr) - 1; $i >= 0; $i--) { if ($naechste_spielernr[$i] < '0' || $naechste_spielernr[$i] > '9') { $naechste_spielernr = substr($naechste_spielernr, 0, $i + 1) . "1" . substr($naechste_spielernr, $i + 1); break; } if ($naechste_spielernr[$i] <= '8') { $naechste_spielernr[$i] = $naechste_spielernr[$i] + 1; break; } // $naechste_spielernr[$i] == '9' $naechste_spielernr[$i] = '0'; } if ($i < 0) $naechste_spielernr = "1" . $naechste_spielernr; } $aktualisierungen = 0; $spielerHinzugefuegt = array(); $vereineHinzugefuegt = 0; $vereineManuell = array(); $spielerIdsHinzugefuegt = array(); $organisation = -1; $veranstalterId = -1; foreach ($spieler_import as $t) { // wenn der Spieler ausgetreten ist, dann nicht prüfen $mitgliedsstatus = $t->mitgliedsstatus; if ($mitgliedsstatus == 0) continue; if (empty($verein_explizit)) { if ($organisation != $t->veranstalterbezeichnung) { $organisation = $t->veranstalterbezeichnung; $veranstalterId = $veranstalter[$organisation] ?? -1; } if ($veranstalterId == -1) continue; } $spieler_id = $t->spieler_id; $nachname = $t->nachname; $vorname = $t->vorname; $name = $t->vorname . " " . $t->nachname; $geschlecht = $t->geschlecht; $lizenznr = $t->lizenznr; $pseudonym = $t->pseudonym; $vereinsname = $t->vereinsname; $geburtsjahr = $t->geburtsjahr; $email = $t->email; $strasse = $t->strasse; $plz = $t->plz; $ort = $t->ort; $landeskennung = $t->landeskennung; $telefon = $t->telefon; $mobil = $t->mobil; $spielernr = $t->spielernr; if ($spieler_id == null && !empty($spielernr) && isset($spielerIdsHinzugefuegt[$spielernr])) $spieler_id = $spielerIdsHinzugefuegt[$spielernr]; // Wenn Spieler schon hinzugefügt wurde, dann vorhandenen Eintrag verwenden; verhindert doppeltes Hinterlegen von Spielernr. // Wenn kein Vereinsname angegeben ist, aber eine Organisation gewählt wurde, dann Spieler nicht ergänzen if ($spieler_id == null && empty($vereinsname) && empty($verein_explizit)) continue; // Spieler aktualisieren bzw. ergänzen if ($spieler_id != null) { // Spieler aktualisieren $query = "UPDATE #__sportsmanager_spieler" . "\n SET vorname = '" . $db->escape($vorname) . "'," . "\n nachname = '" . $db->escape($nachname) . "'"; //. "\n spielernr = '" . $db->escape($spielernr) . "'"; if (isset($spalten["lizenznr"]) && ($lizenznr_beibehalten == 0 || !empty($lizenznr))) $query .= ",\n lizenznr = '" . $db->escape($lizenznr) . "'"; if (isset($spalten["pseudonym"])) $query .= ",\n pseudonym = '" . $db->escape($pseudonym) . "'"; if (isset($spalten["geschlecht"])) $query .= ",\n geschlecht = '" . $db->escape($geschlecht) . "'"; if ((isset($spalten["geburtsdatum"]) || isset($spalten["geburtsjahr"])) && $geburtsjahr != null) $query .= ",\n geburtsjahr = " . ("'" . $db->escape($geburtsjahr) . "'"); if ($persoenliche_daten == 2) { if (isset($spalten["strasse"])) $query .= ",\n strasse = '" . $db->escape($strasse) . "'"; if (isset($spalten["plz"])) $query .= ",\n plz = '" . $db->escape($plz) . "'"; if (isset($spalten["ort"])) $query .= ",\n ort = '" . $db->escape($ort) . "'"; if (isset($spalten["landeskennung"])) $query .= ",\n landeskennung = '" . $db->escape($landeskennung) . "'"; if (isset($spalten["telefon"])) $query .= ",\n telefon = '" . $db->escape($telefon) . "'"; if (isset($spalten["mobil"])) $query .= ",\n mobil = '" . $db->escape($mobil) . "'"; if (isset($spalten["email"])) $query .= ",\n email = '" . $db->escape($email) . "'"; } $query .= "\n WHERE spieler_id = $spieler_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $aktualisierungen++; } else { // Spieler ergänzen // Neuen Spieler anlegen $query = "INSERT #__sportsmanager_spieler" . "\n SET vorname = '" . $db->escape($vorname) . "'" . ",\n nachname = '" . $db->escape($nachname) . "'" . ",\n spielernr = '" . $db->escape(!empty($spielernr) ? $spielernr : $naechste_spielernr) . "'" . ",\n lizenznr = '" . $db->escape($lizenznr) . "'" . ",\n geschlecht = '" . $db->escape($geschlecht) . "'" . ",\n geburtsjahr = " . ($geburtsjahr == null ? "NULL" : ("'" . $db->escape($geburtsjahr) . "'")); if ($persoenliche_daten == 2) $query .= ",\n pseudonym = '" . $db->escape($pseudonym) . "'" . ",\n strasse = '" . $db->escape($strasse) . "'" . ",\n plz = '" . $db->escape($plz) . "'" . ",\n ort = '" . $db->escape($ort) . "'" . ",\n landeskennung = '" . $db->escape($landeskennung) . "'" . ",\n telefon = '" . $db->escape($telefon) . "'" . ",\n mobil = '" . $db->escape($mobil) . "'" . ",\n email = '" . $db->escape($email) . "'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $spieler_id = $db->insertid(); $spielerHinzugefuegt[] = array($nachname, $vorname, !empty($spielernr) ? $spielernr : $naechste_spielernr); $spielerIdsHinzugefuegt[!empty($spielernr) ? $spielernr : $naechste_spielernr] = $spieler_id; if (empty($spielernr)) { do { for ($i = strlen($naechste_spielernr) - 1; $i >= 0; $i--) { if ($naechste_spielernr[$i] < '0' || $naechste_spielernr[$i] > '9') { $naechste_spielernr = substr($naechste_spielernr, 0, $i + 1) . "1" . substr($naechste_spielernr, $i + 1); break; } if ($naechste_spielernr[$i] <= '8') { $naechste_spielernr[$i] = $naechste_spielernr[$i] + 1; break; } $naechste_spielernr[$i] = '0'; } if ($i < 0) $naechste_spielernr = "1" . $naechste_spielernr; } while (isset($spielerIdsHinzugefuegt[$naechste_spielernr])); } } // Wenn nicht ausgetreten und Vereisname angegeben, dann Vereinsmitgliedschaft herstellen if (!empty($vereinsname) || !empty($verein_explizit)) { // Prüfen, ob Vereinsmitgliedschaft besteht if (!empty($verein_explizit)) { $query = "SELECT spieler_id" . "\n FROM #__sportsmanager_mitglied_von_verein" . "\n WHERE spieler_id = $spieler_id AND #__sportsmanager_mitglied_von_verein.verein_id = $verein_explizit"; $rows = loadObjectList($db, $query); if (count($rows) > 0) { $query = "UPDATE #__sportsmanager_mitglied_von_verein" . "\n SET mitgliedsstatus = '$mitgliedsstatus'," . "\n ausgetreten = FALSE" . "\n WHERE spieler_id = $spieler_id AND verein_id = $verein_explizit"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } else { // Vereinsmitgliedschaft besteht nicht, deshalb prüfen, ob Verein überhaupt existiert $query = "SELECT verein_id" . "\n FROM #__sportsmanager_verein" . "\n WHERE verein_id = $verein_explizit"; $rows = loadObjectList($db, $query); // Wenn Verein existiert, dann Mitgliedschaft ergänzen if (count($rows) > 0) { $query = "INSERT #__sportsmanager_mitglied_von_verein" . "\n SET spieler_id = $spieler_id, verein_id = $verein_explizit, mitgliedsstatus = '$mitgliedsstatus', ausgetreten = FALSE"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } } else { $query = "SELECT spieler_id" . "\n FROM #__sportsmanager_mitglied_von_verein, #__sportsmanager_verein" . "\n WHERE spieler_id = $spieler_id AND vereinsname = '" . $db->escape($vereinsname) . "' AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id" . " AND " . ($veranstalterId == 0 ? "ISNULL(veranstalter_id)" : "veranstalter_id = $veranstalterId"); $rows = loadObjectList($db, $query); if (count($rows) > 0) { $query = "UPDATE #__sportsmanager_mitglied_von_verein, #__sportsmanager_verein" . "\n SET mitgliedsstatus = '$mitgliedsstatus', #__sportsmanager_mitglied_von_verein.ausgetreten = FALSE" . "\n WHERE spieler_id = $spieler_id AND vereinsname = '" . $db->escape($vereinsname) . "' AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id" . " AND " . ($veranstalterId == 0 ? "ISNULL(veranstalter_id)" : "veranstalter_id = $veranstalterId"); } else { // Vereinsmitgliedschaft besteht nicht, deshalb prüfen, ob Verein überhaupt existiert $query = "SELECT verein_id" . "\n FROM #__sportsmanager_verein" . "\n WHERE vereinsname = '" . $db->escape($vereinsname) . "'" . " AND " . ($veranstalterId == 0 ? "ISNULL(veranstalter_id)" : "veranstalter_id = $veranstalterId"); $rows = loadObjectList($db, $query); // Wenn mehrere Vereine existieren, dann Aktualisierung auslassen if (count($rows) > 1) { $vereineManuell[] = $name; continue; } // Wenn Verein nicht existiert, dann ergänzen if (count($rows) == 0) { $query = "INSERT #__sportsmanager_verein" . "\n SET vereinsname = '" . $db->escape($vereinsname) . "'"; if (!empty($vereinssitz)) $query .= ",\n vereinssitz = '" . $db->escape($vereinssitz) . "'"; $query .= ",\n veranstalter_id = " . ($veranstalterId == 0 ? "NULL" : "$veranstalterId"); $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $verein_id = $db->insertid(); $vereineHinzugefuegt++; } // Sonst Verein merken else { $verein_id = $rows[0]->verein_id; } // Vereinsmitgliedschaft setzen $query = "INSERT #__sportsmanager_mitglied_von_verein" . "\n SET spieler_id = $spieler_id, verein_id = $verein_id, mitgliedsstatus = '$mitgliedsstatus', ausgetreten = FALSE"; } $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } } $ausgetreteneVereineMitAktivenMitgliedern = array(); /* if ($verein_explizit != 0) { // Alle Spieler austreten lassen, die nicht aktives Mitglied irgendeines Vereins sind, aber Mitglied des importierten Vereins waren $query = "UPDATE #__sportsmanager_spieler" . "\n SET ausgetreten = TRUE" . "\n WHERE (SELECT COUNT(*) FROM #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_mitglied_von_verein.verein_id = $verein_explizit AND #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id) > 0" . " AND (SELECT COUNT(*) FROM #__sportsmanager_mitglied_von_verein AS t1 WHERE t1.spieler_id = #__sportsmanager_spieler.spieler_id AND NOT t1.ausgetreten) = 0" . " AND NOT ausgetreten"; $db->setQuery( $query ); if (!$db->execute()) { die($db->stderr(true)); } } else { // Alle Spieler austreten lassen, die nicht aktives Mitglied irgendeines Vereins sind, aber Mitglied in einem Verein des Verbandes waren oder sind foreach ($veranstalter as $v => $veranstalterId) { if ($veranstalterId != -1) { $query = "UPDATE #__sportsmanager_spieler" . "\n SET ausgetreten = TRUE" . "\n WHERE (SELECT COUNT(*) FROM #__sportsmanager_mitglied_von_verein, #__sportsmanager_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id AND #__sportsmanager_mitglied_von_verein.verein_id = #__sportsmanager_verein.verein_id AND " . ($veranstalterId == 0 ? "ISNULL(veranstalter_id)" : "veranstalter_id = $veranstalterId") . ") > 0" . " AND (SELECT COUNT(*) FROM #__sportsmanager_mitglied_von_verein AS t1 WHERE t1.spieler_id = #__sportsmanager_spieler.spieler_id AND NOT t1.ausgetreten) = 0" . " AND NOT ausgetreten"; $db->setQuery( $query ); if (!$db->execute()) { die($db->stderr(true)); } } } */ if ($verein_explizit == 0) { // Vereine der Organisation als ausgetreten notieren, die keine aktiven Mitglieder haben foreach ($veranstalter as $veranstalterId) { if ($veranstalterId != -1) { $query = "UPDATE #__sportsmanager_verein" . "\n SET ausgetreten = TRUE" . "\n WHERE NOT EXISTS(SELECT * FROM #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten) AND NOT ausgetreten AND " . ($veranstalterId == 0 ? "ISNULL(veranstalter_id)" : "veranstalter_id = $veranstalterId"); $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } // Vereine der Organisation aus nicht ausgetreten notieren, die aktive Mitglieder haben, aber als ausgetreten notiert sind foreach ($veranstalter as $v => $veranstalterId) { if ($veranstalterId != -1) { $query = "SELECT vereinsname" . "\n FROM #__sportsmanager_verein" . "\n WHERE EXISTS(SELECT * FROM #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten) AND ausgetreten AND " . ($veranstalterId == 0 ? "ISNULL(veranstalter_id)" : "veranstalter_id = $veranstalterId"); $rows = loadObjectList($db, $query); $query = "UPDATE #__sportsmanager_verein" . "\n SET ausgetreten = FALSE" . "\n WHERE EXISTS(SELECT * FROM #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten) AND ausgetreten AND " . ($veranstalterId == 0 ? "ISNULL(veranstalter_id)" : "veranstalter_id = $veranstalterId"); $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } foreach ($rows as $row) $ausgetreteneVereineMitAktivenMitgliedern[] = $row->vereinsname; $query = "SELECT DISTINCT verein_id, #__sportsmanager_spieler_import.vereinsname, #__sportsmanager_spieler_import.vereinssitz" . "\n FROM #__sportsmanager_spieler_import" . "\n INNER JOIN #__sportsmanager_verein ON #__sportsmanager_verein.vereinsname = #__sportsmanager_spieler_import.vereinsname" . "\n WHERE session_id = '" . $db->escape($session_id) . "' AND " . ($v == null ? "ISNULL(#__sportsmanager_spieler_import.veranstalterbezeichnung)" : ("#__sportsmanager_spieler_import.veranstalterbezeichnung = '" . $db->escape($v) . "'")) . " AND #__sportsmanager_spieler_import.vereinsname != '' AND #__sportsmanager_spieler_import.vereinssitz != '' AND (ISNULL(#__sportsmanager_verein.vereinssitz) OR #__sportsmanager_verein.vereinssitz != #__sportsmanager_spieler_import.vereinssitz) AND NOT #__sportsmanager_verein.ausgetreten AND " . ($veranstalterId == 0 ? "ISNULL(veranstalter_id)" : "veranstalter_id = $veranstalterId"); $rows = loadObjectList($db, $query); foreach ($rows as $row) { $query = "UPDATE #__sportsmanager_verein" . "\n SET vereinssitz = '" . $db->escape($row->vereinssitz) . "'" . "\n WHERE verein_id = $row->verein_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } } } adminDeleteSpielerImport($session_id); sort($vereineManuell); sort($ausgetreteneVereineMitAktivenMitgliedern); aktuellerVereinAktualisieren(); if ($kategorie_potentiell_geaendert) { ranglisteAktualisieren(); einstufungAktualisieren(); } HTML_sportsmanager_admin::adminImportSpielerBericht($aktualisierungen, $spielerHinzugefuegt, $vereineHinzugefuegt, $spieler_import, $vereineManuell, $ausgetreteneVereineMitAktivenMitgliedern, $kategorie_potentiell_geaendert, redirectSessionIdEmpty() ? null : redirectSessionIdSetzen()); } function adminExportSpielerInternationalForm(): void { if (!benutzerZugriff("spieler_aendern")) keinZugriff(true); HTML_sportsmanager_admin::adminExportSpielerInternational(); } function csvFilter($value, $decode = true): string { if ($value === null) return ""; if ($decode) $value = utf8_decode($value); $value = str_replace('"', '""', $value); // escape tab characters $value = preg_replace("/\t/", "\\t", $value); // escape new lines $value = preg_replace("/\r?\n/", "\\n", $value); return '="' . $value . '"'; } #[NoReturn] function adminExportSpielerInternational(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("spieler_aendern")) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_spieler'); } $persoenliche_daten = $jInput->get('persoenliche_daten', 0, 'INT'); // 0: "Vor- und Nachname, Geschlecht, Spielernr., Lizenznr.", 1: "Vor- und Nachname, Geschlecht, Spielernr., Lizenznr., Geburtsdatum", "Alle" $landeskennung = $db->escape(trim($jInput->get('landeskennung', '', 'RAW'))); $query = "SELECT lizenznr, vorname, nachname, spielernr, geschlecht, geburtsjahr"; if ($persoenliche_daten == 1) $query .= ",\n email, strasse, plz, ort, landeskennung, telefon, mobil, pseudonym"; $query .= "\n FROM #__sportsmanager_spieler"// . "\n WHERE EXISTS(SELECT * FROM #__sportsmanager_mitglied_von_verein AS t1 LEFT JOIN #__sportsmanager_verein AS t2 USING (verein_id) WHERE t1.spieler_id = #__sportsmanager_spieler.spieler_id AND t2.veranstalter_id = $veranstalterId AND NOT t1.ausgetreten AND NOT t2.ausgetreten)" . "\n WHERE NOT ISNULL(aktueller_verein_id)" . "\n ORDER BY nachname, vorname"; $rows = loadObjectList($db, $query); if (count($rows) == 0) { redirectSportsManagerURL('&task=admin_spieler_export_international_form', "Zu dieser Auswahl sind keine Spielerdaten vorhanden!"); } $dateiname = "Spieler international " . date('Y-m-d') . ".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"); $trennzeichen = "\t"; $header = "ITSF Number\tGender\tFirst Name\tLAST NAME\tNationality\tYear of birth\tNational Code\tPlayer in wheelchair ?\tE-mail\tCountry of residence\tAddress\tZip/Postal Code\tCity\tPhone\tProfession"; echo "sep=" . $trennzeichen . "\n" . $header . "\n"; foreach ($rows as $row) { echo csvFilter($row->lizenznr) . $trennzeichen . csvFilter($row->geschlecht == "M" ? "M" : "F") . $trennzeichen . csvFilter($row->vorname) . $trennzeichen . csvFilter($row->nachname) . $trennzeichen . csvFilter($landeskennung) . $trennzeichen . csvFilter($row->geburtsjahr) . $trennzeichen . csvFilter($row->spielernr) . $trennzeichen . "N" . $trennzeichen; if ($persoenliche_daten == 1) { echo csvFilter($row->email) . $trennzeichen . csvFilter($row->landeskennung) . $trennzeichen . csvFilter($row->strasse) . $trennzeichen . csvFilter($row->plz) . $trennzeichen . csvFilter($row->ort) . $trennzeichen . csvFilter($row->telefon) . $trennzeichen . "\n"; } else { echo $trennzeichen . $trennzeichen . $trennzeichen . $trennzeichen . $trennzeichen . $trennzeichen . "\n"; } } die(); } function adminExportSpielerForm(): void { $db = getDatabase(); $ansprechpartner_exportieren = einstellungswert("ansprechpartner_exportieren"); if (benutzerZugriff("spieler_aendern")) $beschraenkter_zugriff = 0; else if (($ansprechpartner_exportieren == 1 || $ansprechpartner_exportieren == 2) && benutzerVeranstalterModerator()) $beschraenkter_zugriff = 1; else keinZugriff(true); $query = "SELECT *" . "\n FROM #__sportsmanager_veranstalter" . "\n WHERE EXISTS(SELECT * FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE #__sportsmanager_verein.veranstalter_id = #__sportsmanager_veranstalter.veranstalter_id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten)"; if ($beschraenkter_zugriff) $query .= " AND" . veranstalterFilter("veranstalter_id IN"); $query .= "\n ORDER BY veranstalterbezeichnung"; $veranstalter = loadObjectList($db, $query); if (!$beschraenkter_zugriff) { $query = "SELECT #__sportsmanager_verein.verein_id, vereinsname, veranstalterbezeichnung" . "\n FROM #__sportsmanager_verein" . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" . "\n WHERE NOT ausgetreten AND EXISTS(SELECT * FROM #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_mitglied_von_verein.verein_id = #__sportsmanager_verein.verein_id AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten)" . "\n ORDER BY veranstalterbezeichnung, vereinsname"; $vereine = loadObjectList($db, $query); } else { $vereine = array(); } HTML_sportsmanager_admin::adminExportSpieler($beschraenkter_zugriff, $ansprechpartner_exportieren, $veranstalter, $vereine); } #[NoReturn] function adminExportSpieler(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $ansprechpartner_exportieren = einstellungswert("ansprechpartner_exportieren"); $beschraenkter_zugriff = null; if (benutzerZugriff("spieler_aendern")) $beschraenkter_zugriff = 0; else if (($ansprechpartner_exportieren == 1 || $ansprechpartner_exportieren == 2) && benutzerVeranstalterModerator()) $beschraenkter_zugriff = 1; else keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_spieler'); } $veranstalterId = $jInput->get('veranstalterid', 0, 'INT'); if ($beschraenkter_zugriff) { if (!benutzerVeranstalterModerator($veranstalterId)) $veranstalterId = 0; $verein_explizit = 0; $ausgetretene = 0; if ($ansprechpartner_exportieren != 1) $persoenliche_daten = $jInput->get('persoenliche_daten', 0, 'INT'); // 0: "Vor- und Nachname, Geschlecht, Spielernr., Lizenznr.", 1: "Vor- und Nachname, Geschlecht, Spielernr., Lizenznr., Geburtsdatum", "Alle" else $persoenliche_daten = 0; $organisatorische_daten = 0; $statistische_daten = 1; } else { $verein_explizit = $veranstalterId < 0 ? abs($veranstalterId) : 0; $ausgetretene = $jInput->get('ausgetretene', 0, 'INT'); // "Nein", "Ja" $persoenliche_daten = $jInput->get('persoenliche_daten', 0, 'INT'); // 0: "Vor- und Nachname, Geschlecht, Spielernr., Lizenznr.", 1: "Vor- und Nachname, Geschlecht, Spielernr., Lizenznr., Geburtsdatum", "Alle" $organisatorische_daten = $jInput->get('organisatorische_daten', 0, 'INT'); // 0: "Verein, Vereinssitz, Wettbewerb, Mannschaft, Ausgetreten", 1: "Ausgetreten" $statistische_daten = $jInput->get('statistische_daten', 0, 'INT'); // 0: "Elo-Werte, Kategorie, Zuletzt gespielt", 1: "Kategorie", 2: "Keine" } $verein = null; $veranstalter = null; if ($verein_explizit != 0) { $query = "SELECT * FROM #__sportsmanager_verein WHERE verein_id = $verein_explizit"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $verein = $rows[0]; } else if ($veranstalterId != 0) { $query = "SELECT * FROM #__sportsmanager_veranstalter WHERE veranstalter_id = $veranstalterId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $veranstalter = $rows[0]; } $jahr = date("Y"); $query = "SELECT nachname, vorname, spielernr, lizenznr, lizenz, geschlecht"; if ($statistische_daten != 2) $query .= ",\n IF(ISNULL(geburtsjahr), IF(geschlecht = 'M', 'H', 'D'), IF(" . ($jahr - 18) . " <= geburtsjahr, 'J', IF(" . ($jahr - 50) . " > geburtsjahr, 'S', IF(geschlecht = 'M', 'H', 'D')))) AS kategorie"; if ($organisatorische_daten != 2) $query .= ",\n vereinsname as verein, vereinssitz, veranstalterbezeichnung as organisation, IF(mitgliedsstatus = 1, 'Aktiv', IF(mitgliedsstatus = 0, 'Ausgetreten', IF(mitgliedsstatus = 2, 'Eingeschränkt', 'Passiv'))) AS mitgliedsstatus"; else if ($ausgetretene != 0) $query .= ", IF(ISNULL(aktueller_verein_id), 'Ausgetreten', 'Aktiv') as mitgliedsstatus"; $query .= ",\n geburtsjahr"; if ($persoenliche_daten == 2) $query .= ",\n email, strasse, plz, ort, landeskennung, telefon, mobil, pseudonym"; if ($organisatorische_daten == 1) $query .= ",\n (SELECT bezeichnung FROM #__sportsmanager_mitglied_von_team, #__sportsmanager_team, #__sportsmanager_veranstaltung WHERE #__sportsmanager_spieler.spieler_id = #__sportsmanager_mitglied_von_team.spieler_id AND NOT #__sportsmanager_mitglied_von_team.ausgetreten AND #__sportsmanager_team.team_id = #__sportsmanager_mitglied_von_team.team_id AND #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id AND #__sportsmanager_veranstaltung.status > 0 AND CURDATE() BETWEEN erster_tag AND letzter_tag ORDER BY YEAR(#__sportsmanager_veranstaltung.letzter_tag) DESC, #__sportsmanager_veranstaltung.reihenfolge, #__sportsmanager_veranstaltung.letzter_tag DESC, #__sportsmanager_veranstaltung.bezeichnung, #__sportsmanager_team.teamname, #__sportsmanager_veranstaltung.kategorie LIMIT 1) AS wettbewerb," . "\n (SELECT teamname FROM #__sportsmanager_mitglied_von_team, #__sportsmanager_team, #__sportsmanager_veranstaltung WHERE #__sportsmanager_spieler.spieler_id = #__sportsmanager_mitglied_von_team.spieler_id AND NOT #__sportsmanager_mitglied_von_team.ausgetreten AND #__sportsmanager_team.team_id = #__sportsmanager_mitglied_von_team.team_id AND #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id AND #__sportsmanager_veranstaltung.status > 0 AND CURDATE() BETWEEN erster_tag AND letzter_tag ORDER BY YEAR(#__sportsmanager_veranstaltung.letzter_tag) DESC, #__sportsmanager_veranstaltung.reihenfolge, #__sportsmanager_veranstaltung.letzter_tag DESC, #__sportsmanager_veranstaltung.bezeichnung, #__sportsmanager_team.teamname, #__sportsmanager_veranstaltung.kategorie LIMIT 1) AS mannschaft"; if ($statistische_daten == 0) $query .= ",\n zuletzt_gespielt, elo_einzel, elo_einzel_spiele, elo_doppel, elo_doppel_spiele"; $query .= "\n FROM #__sportsmanager_spieler"; if ($organisatorische_daten != 2) { $query .= "\n LEFT JOIN #__sportsmanager_mitglied_von_verein USING (spieler_id)" . "\n LEFT JOIN #__sportsmanager_verein USING (verein_id)" . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)"; } if ($verein_explizit != 0) { if ($ausgetretene != 0) $query .= "\n WHERE #__sportsmanager_verein.verein_id = $verein_explizit"; else $query .= "\n WHERE #__sportsmanager_verein.verein_id = $verein_explizit AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten"; } else if ($veranstalterId != 0) { if ($ausgetretene != 0) { if ($organisatorische_daten == 0) $query .= "\n WHERE #__sportsmanager_verein.veranstalter_id = $veranstalterId"; else $query .= "\n WHERE (SELECT COUNT(*) FROM #__sportsmanager_mitglied_von_verein AS t1 LEFT JOIN #__sportsmanager_verein AS t2 USING (verein_id) WHERE t1.spieler_id = #__sportsmanager_spieler.spieler_id AND t2.veranstalter_id = $veranstalterId) > 0"; } else { if ($organisatorische_daten == 0) $query .= "\n WHERE #__sportsmanager_verein.veranstalter_id = $veranstalterId AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten"; else $query .= "\n WHERE EXISTS(SELECT * FROM #__sportsmanager_mitglied_von_verein AS t1 LEFT JOIN #__sportsmanager_verein AS t2 USING (verein_id) WHERE t1.spieler_id = #__sportsmanager_spieler.spieler_id AND t2.veranstalter_id = $veranstalterId AND NOT t1.ausgetreten AND NOT t2.ausgetreten)"; } } else if ($ausgetretene == 0) { $query .= "\n WHERE NOT ISNULL(aktueller_verein_id)"; if ($organisatorische_daten == 0) $query .= " AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten"; } if ($organisatorische_daten == 0) $query .= "\n ORDER BY nachname, vorname, IF(ISNULL(IF(ISNULL(aktueller_verein_id), #__sportsmanager_mitglied_von_verein.ausgetreten, NULL)), 1, 0), IF(ISNULL(aktueller_verein_id), #__sportsmanager_mitglied_von_verein.ausgetreten, NULL), verein"; else $query .= "\n ORDER BY nachname, vorname"; $rows = loadObjectList($db, $query); if (count($rows) == 0) { redirectSportsManagerURL('&task=admin_spieler_export_form', "Zu dieser Auswahl sind keine Spielerdaten vorhanden!"); } $dateiname = "Spieler"; if ($verein_explizit != 0) $dateiname .= " " . utf8_decode($verein->vereinsname); else if ($veranstalterId != 0) $dateiname .= " " . utf8_decode($veranstalter->veranstalterbezeichnung); $dateiname .= " " . date('Y-m-d') . ".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"); $trennzeichen = "\t"; $header = ""; foreach ($rows[0] as $field => $value) $header .= $field . $trennzeichen; $data = ""; foreach ($rows as $row) { $line = ''; foreach ($row as $value) { if ((!isset($value)) or ($value == "")) { $value = $trennzeichen; } else { $value = str_replace('"', '""', $value); $value = str_replace("\t", ' ', $value); $value = str_replace("\r", '', $value); $value = str_replace("\n", ' ', $value); $value = '="' . $value . '"' . $trennzeichen; } $line .= $value; } $data .= trim($line) . "\n"; } $data = str_replace("\r", "", $data); echo "sep=" . $trennzeichen . "\n" . $header . "\n" . utf8_decode($data); die(); } #[NoReturn] function adminExportSpielerSport(): void { $db = getDatabase(); if (!benutzerZugriff("spieler_aendern") && !benutzerVeranstalterModerator()) keinZugriff(true); $jahr = date("Y"); $query = "SELECT *," . " IF(ISNULL(geburtsjahr), IF(geschlecht = 'M', 'H', 'D'), IF(" . ($jahr - 18) . " <= geburtsjahr, 'J', IF(" . ($jahr - 50) . " > geburtsjahr, 'S', IF(geschlecht = 'M', 'H', 'D')))) AS kategorie, vereinsname" . "\n FROM #__sportsmanager_spieler"; $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; $query .= "\n INNER JOIN #__sportsmanager_verein ON aktueller_verein_id = verein_id" . "\n ORDER BY nachname, vorname"; $rows = loadObjectList($db, $query); $dateiname = "Spieler " . date('Y-m-d') . ".csv"; ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind Header("Content-Type: text/x-csv; charset=utf-8;"); Header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT'); Header('Content-Disposition: attachment; filename="' . $dateiname . '"'); Header("Pragma: no-cache"); echo "NAME#VORNAME#GESCHLECHT#VEREIN#STRASSE#PLZ/ORT#TELEFON#FAX#MOBILE#EMAIL#BEMERKUNG#SPIELERPASS#GEBURTSDATUM\r\n"; $wiederholung_zaehler = 0; foreach ($rows as $index => $row) { $spielernr = $row->spielernr != null && $row->spielernr != "" ? $row->spielernr : "N/A"; $lizenznr = $row->lizenznr != null && $row->lizenznr != "" ? $row->lizenznr : "N/A"; $kategorie = array("H" => "Herren", "D" => "Damen", "J" => "Junioren", "S" => "Senioren"); $kommentar = $kategorie[$row->kategorie]; if ($lizenznr != null && $row->lizenznr != "") $kommentar .= " / " . $lizenznr; $vorname = $row->vorname; $nachname = $row->nachname; $naechster_name = isset($rows[$index + 1]) ? ($rows[$index + 1]->nachname . ", " . $rows[$index + 1]->vorname) : null; $name = $nachname . ", " . $vorname; if ($name == $naechster_name || $wiederholung_zaehler > 0) // Sports Manager macht einen case sensitive-Vergleich $vorname .= " (" . ($wiederholung_zaehler + 1) . ")"; if ($name == $naechster_name) $wiederholung_zaehler++; else $wiederholung_zaehler = 0; echo utf8_decode($nachname . "#" . $vorname . "#" . ($row->geschlecht == 'M' ? "M" : "F") . "#" . ($row->vereinsname != null ? $row->vereinsname : "Keiner") . "#######" . $kommentar . "#" . $spielernr . "#\r\n"); } die(); } function adminVereine(): void { $db = getDatabase(); if (!benutzerZugriff("vereine_aendern")) keinZugriff(true); $query = "SELECT COUNT(DISTINCT veranstalter_id) FROM #__sportsmanager_verein WHERE NOT ausgetreten"; $organisationAnzeigen = loadResult($db, $query) > 1; $query = "SELECT *," . "\n (SELECT COUNT(*) FROM #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten) AS mitglieder" . "\n FROM #__sportsmanager_verein" . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" . "\n ORDER BY IF(ISNULL(#__sportsmanager_veranstalter.veranstalter_id), 1, 0), veranstalterbezeichnung, ausgetreten, vereinsname"; $vereine = loadObjectList($db, $query); HTML_sportsmanager_admin::adminVereine($vereine, $organisationAnzeigen); } function adminEditVerein(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("vereine_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $row = null; if ($id == null) { $berechtigt_fuer_verein = null; $vereinsansprechpartner = null; } else { $query = "SELECT * FROM #__sportsmanager_verein WHERE verein_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) == 1) $row = $rows[0]; $query = "SELECT t1.* FROM #__sportsmanager_berechtigt_fuer_verein AS t1, #__users AS t2 WHERE t1.berechtigt_user_id = t2.id AND berechtigt_verein_id = $id ORDER BY username, name"; $berechtigt_fuer_verein = loadObjectList($db, $query); $query = "SELECT * FROM #__sportsmanager_vereinsansprechpartner WHERE verein_id = $id ORDER BY vereinsansprechpartner_id"; $vereinsansprechpartner = loadObjectList($db, $query); } $query = "SELECT * FROM #__users ORDER BY name, username"; $users = loadObjectList($db, $query); $query = "SELECT *" . "\n FROM #__sportsmanager_veranstalter" . "\n ORDER BY veranstalterbezeichnung"; $veranstalter = loadObjectList($db, $query); HTML_sportsmanager_admin::adminEditVerein($row, $users, $veranstalter, $berechtigt_fuer_verein, $vereinsansprechpartner); } #[NoReturn] function adminSaveVerein(): void { $db = getDatabase(); global $_FILES; global $sportsmanager_joomla_path; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("vereine_aendern")) keinZugriff(); $id = $jInput->get('id', 0, 'INT'); $vereinsname = $db->escape(trim($jInput->get('vereinsname', '', 'RAW'))); $vereinssitz = $db->escape(trim($jInput->get('vereinssitz', '', 'RAW'))); $vereinssitz_ortsteil = $db->escape(trim($jInput->get('vereinssitz_ortsteil', '', 'RAW'))); $veranstalter_id = $jInput->get('veranstalter_id', 0, 'INT'); $url = $db->escape(trim($jInput->get('url', '', 'RAW'))); $beschreibung = $db->escape(trim($jInput->get('beschreibung', '', 'RAW'))); $ausgetreten = $jInput->get('ausgetreten', 0, 'INT'); $verstecken = $jInput->get('verstecken', 0, 'INT'); $bildbeibehalten = $jInput->get('bildbeibehalten', 0, 'INT'); $berechtigt_fuer_verein_user_ids = array($jInput->get('berechtigt_fuer_verein_user_1_id', 0, 'INT'), $jInput->get('berechtigt_fuer_verein_user_2_id', 0, 'INT'), $jInput->get('berechtigt_fuer_verein_user_3_id', 0, 'INT'), $jInput->get('berechtigt_fuer_verein_user_4_id', 0, 'INT'), $jInput->get('berechtigt_fuer_verein_user_5_id', 0, 'INT'), $jInput->get('berechtigt_fuer_verein_user_6_id', 0, 'INT')); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_vereine#id' . $id); } if ($id == 0) { $query = "INSERT INTO #__sportsmanager_verein (vereinsname, vereinssitz, vereinssitz_ortsteil, veranstalter_id, url, beschreibung, ausgetreten, verstecken)" . "\n VALUES ('$vereinsname', '$vereinssitz', '$vereinssitz_ortsteil', " . ($veranstalter_id != 0 ? "'$veranstalter_id'" : "NULL") . ", '$url', '$beschreibung', " . ($ausgetreten ? "TRUE" : "FALSE") . ", $verstecken);"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $id = $db->insertid(); } else { $query = "UPDATE #__sportsmanager_verein" . "\n SET vereinsname = '$vereinsname'," . "\n vereinssitz = '$vereinssitz'," . "\n vereinssitz_ortsteil = '$vereinssitz_ortsteil'," . "\n veranstalter_id = " . ($veranstalter_id != 0 ? "'$veranstalter_id'" : "NULL") . "," . "\n url = '$url'," . "\n beschreibung = '$beschreibung'," . "\n ausgetreten = " . ($ausgetreten ? "TRUE" : "FALSE") . "," . "\n verstecken = '$verstecken'" . "\n WHERE verein_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } // Vereinsvertreter speichern $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_verein WHERE berechtigt_verein_id = $id AND berechtigt_user_id != $berechtigt_fuer_verein_user_ids[0] AND berechtigt_user_id != $berechtigt_fuer_verein_user_ids[1] AND berechtigt_user_id != $berechtigt_fuer_verein_user_ids[2] AND berechtigt_user_id != $berechtigt_fuer_verein_user_ids[3] AND berechtigt_user_id != $berechtigt_fuer_verein_user_ids[4] AND berechtigt_user_id != $berechtigt_fuer_verein_user_ids[5];"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_verein WHERE berechtigt_verein_id = $id"; $rows = loadObjectList($db, $query); for ($nummer = 0; $nummer <= 5; $nummer++) { $berechtigt_user_id = $berechtigt_fuer_verein_user_ids[$nummer]; if ($berechtigt_user_id != 0) { $gefunden = false; foreach ($rows as $row) { if ($row->berechtigt_user_id == $berechtigt_user_id) $gefunden = true; } if (!$gefunden) { $query = "INSERT INTO #__sportsmanager_berechtigt_fuer_verein (berechtigt_user_id, berechtigt_verein_id) VALUES ('$berechtigt_user_id', '$id');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } } // Ansprechpartner speichern for ($nummer = 1; $nummer <= 3; $nummer++) { $vereinsansprechpartner_id = $jInput->get('vereinsansprechpartner_' . $nummer . '_id', 0, 'INT'); $vereinsansprechpartner_vorname = trim($jInput->get('vereinsansprechpartner_' . $nummer . '_vorname', '', 'RAW')); $vereinsansprechpartner_nachname = trim($jInput->get('vereinsansprechpartner_' . $nummer . '_nachname', '', 'RAW')); $vereinsansprechpartner_telefon = trim($jInput->get('vereinsansprechpartner_' . $nummer . '_telefon', '', 'RAW')); $vereinsansprechpartner_mobil = trim($jInput->get('vereinsansprechpartner_' . $nummer . '_mobil', '', 'RAW')); $vereinsansprechpartner_email = trim($jInput->get('vereinsansprechpartner_' . $nummer . '_email', '', 'RAW')); if ($vereinsansprechpartner_id == 0) { if (strlen($vereinsansprechpartner_vorname) > 0 || strlen($vereinsansprechpartner_nachname) > 0) { $query = "INSERT INTO #__sportsmanager_vereinsansprechpartner (verein_id, vorname, nachname, telefon, mobil, email) VALUES ('$id', '$vereinsansprechpartner_vorname', '$vereinsansprechpartner_nachname', '$vereinsansprechpartner_telefon', '$vereinsansprechpartner_mobil', '$vereinsansprechpartner_email');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } else { if (strlen($vereinsansprechpartner_vorname) > 0 || strlen($vereinsansprechpartner_nachname) > 0) { $query = "UPDATE #__sportsmanager_vereinsansprechpartner" . "\n SET vorname = '$vereinsansprechpartner_vorname'," . "\n nachname = '$vereinsansprechpartner_nachname'," . "\n telefon = '$vereinsansprechpartner_telefon'," . "\n mobil = '$vereinsansprechpartner_mobil'," . "\n email = '$vereinsansprechpartner_email'" . "\n WHERE vereinsansprechpartner_id = $vereinsansprechpartner_id"; } else { $query = "DELETE FROM #__sportsmanager_vereinsansprechpartner WHERE vereinsansprechpartner_id = $vereinsansprechpartner_id;"; } $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } if ($bildbeibehalten == 0) { bildLoeschen("vereine", $id); if (!empty($_FILES["bild"]["tmp_name"])) { if (is_uploaded_file($_FILES["bild"]["tmp_name"])) { $size = getimagesize($_FILES["bild"]["tmp_name"]); if (!$size || ($size[2] != IMAGETYPE_JPEG && $size[2] != IMAGETYPE_PNG) || ($size[0] < 60 || $size[1] < 60 || $size[0] > 8192 || $size[1] > 8192)) { redirectSportsManagerURL('&task=admin_vereine', "Das Bild wurde nicht gespeichert, da es nicht im JPG/PNG-Format mit mindestens 90*90 und maximal 8192*8192 Bildpunkten vorliegt."); } $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'vereine'; if (!bildKopierenAngepasst($_FILES["bild"]["tmp_name"], $bilder_pfad . DIRECTORY_SEPARATOR . $id . ($size[2] == IMAGETYPE_PNG ? '.png' : '.jpg'), 240, 240, 0)) { redirectSportsManagerURL('&task=admin_vereine', "Das Bild konnte nicht an die Zielposition kopiert werden."); } } } } aktuellerVereinAktualisieren(); redirectSportsManagerURL('&task=admin_vereine#id' . $id); } #[NoReturn] function adminRemoveVerein(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("vereine_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $query = "UPDATE #__sportsmanager_team SET verein_id = NULL WHERE verein_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "UPDATE #__sportsmanager_rechnung SET verein_id = NULL WHERE verein_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_mitglied_von_verein WHERE verein_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_verein WHERE berechtigt_verein_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_vereinsansprechpartner WHERE verein_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_verein WHERE verein_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } bildLoeschen("vereine", $id); aktuellerVereinAktualisieren(); redirectSportsManagerURL('&task=admin_vereine'); } function adminVereineZusammenlegenForm(): void { $db = getDatabase(); if (!benutzerZugriff("vereine_aendern")) keinZugriff(true); $query = "SELECT verein_id, vereinsname, veranstalterbezeichnung, ausgetreten" . "\n FROM #__sportsmanager_verein" . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" . "\n ORDER BY veranstalterbezeichnung, vereinsname, ausgetreten"; $vereine = loadObjectList($db, $query); HTML_sportsmanager_admin::adminVereineZusammenlegen($vereine); } #[NoReturn] function adminVereineZusammenlegen(): void { $db = getDatabase(); global $_FILES; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("vereine_aendern")) keinZugriff(true); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_vereine'); } $verein_beizubehalten_id = $jInput->get('verein_beizubehalten_id', 0, 'INT'); $verein_zu_entfernen_id = $jInput->get('verein_zu_entfernen_id', 0, 'INT'); if ($verein_beizubehalten_id == $verein_zu_entfernen_id) { redirectSportsManagerURL('&task=admin_vereine#id' . $verein_beizubehalten_id, "Zum Zusammanlegen müssen zwei unterschiedliche Vereine gewählt werden"); } $query = "UPDATE #__sportsmanager_mitglied_von_verein" . "\n SET verein_id = $verein_beizubehalten_id" . "\n WHERE verein_id = $verein_zu_entfernen_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "SELECT mitglied_von_verein_id, ausgetreten, spieler_id" . "\n FROM #__sportsmanager_mitglied_von_verein" . "\n WHERE #__sportsmanager_mitglied_von_verein.verein_id = $verein_beizubehalten_id" . "\n ORDER BY spieler_id, IF(ausgetreten, 1, 0), ausgetreten DESC"; $rows = loadObjectList($db, $query); $spieler_id = null; foreach ($rows as $row) { if ($row->spieler_id == $spieler_id) { $query = "DELETE FROM #__sportsmanager_mitglied_von_verein WHERE mitglied_von_verein_id = $row->mitglied_von_verein_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } else $spieler_id = $row->spieler_id; } $query = "UPDATE #__sportsmanager_team" . "\n SET verein_id = $verein_beizubehalten_id" . "\n WHERE verein_id = $verein_zu_entfernen_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "UPDATE #__sportsmanager_rechnung" . "\n SET verein_id = $verein_beizubehalten_id" . "\n WHERE verein_id = $verein_zu_entfernen_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_mitglied_von_verein WHERE verein_id = $verein_zu_entfernen_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_vereinsansprechpartner WHERE verein_id = $verein_zu_entfernen_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_verein WHERE berechtigt_verein_id = $verein_zu_entfernen_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_verein WHERE verein_id = $verein_zu_entfernen_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } bildLoeschen("vereine", $verein_zu_entfernen_id); aktuellerVereinAktualisieren(); redirectSportsManagerURL('&task=admin_vereine#id' . $verein_beizubehalten_id); } function adminVereinsmitglieder(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("vereine_aendern")) keinZugriff(true); $vereinId = $jInput->get('vereinid', 0, 'INT'); if ($vereinId == 0) die ("Wrong id!"); $query = "SELECT * FROM #__sportsmanager_verein WHERE verein_id = $vereinId"; $vereine = loadObjectList($db, $query); if (count($vereine) < 1) die ("Wrong id"); $verein = $vereine[0]; $berechtigt_spieler_aendern = benutzerZugriff("spieler_aendern"); $query = "SELECT mitglied_von_verein_id, mitgliedsstatus, vorname, nachname, spielernr, #__sportsmanager_spieler.spieler_id" . "\n FROM #__sportsmanager_mitglied_von_verein" . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" . "\n WHERE #__sportsmanager_mitglied_von_verein.verein_id = $vereinId" . "\n ORDER BY IF(mitgliedsstatus <> 0, 0, 1), mitgliedsstatus, nachname, vorname"; $vereinsmitglieder = loadObjectList($db, $query); HTML_sportsmanager_admin::adminVereinsmitglieder($verein, $vereinsmitglieder, $berechtigt_spieler_aendern); } function adminEditVereinsmitglied(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("vereine_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $vereinId = $jInput->get('vereinid', 0, 'INT'); $row = null; if ($id !== 0) { $query = "SELECT t1.*, t2.vorname, t2.nachname FROM #__sportsmanager_mitglied_von_verein AS t1 LEFT JOIN #__sportsmanager_spieler AS t2 ON t1.spieler_id = t2.spieler_id WHERE mitglied_von_verein_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) == 1) $row = $rows[0]; } $query = "SELECT * FROM #__sportsmanager_verein WHERE verein_id = $vereinId"; $vereine = loadObjectList($db, $query); if (count($vereine) < 1) die ("Wrong id"); $verein = $vereine[0]; $query = "SELECT spieler_id, vorname, nachname, spielernr FROM #__sportsmanager_spieler ORDER BY nachname, vorname, spielernr"; $spieler = loadObjectList($db, $query); HTML_sportsmanager_admin::adminEditVereinsmitglied($row, $verein, $spieler); } #[NoReturn] function adminSaveVereinsmitglied(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("vereine_aendern")) keinZugriff(); $id = $jInput->get('id', 0, 'INT'); $spielerId = $jInput->get('spielerid', 0, 'INT'); $vereinId = $jInput->get('vereinid', 0, 'INT'); $mitgliedsstatus = $jInput->get('mitgliedsstatus', 0, 'INT'); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_vereinsmitglieder&vereinid=' . $vereinId); } if (empty($id)) { $query = "INSERT INTO #__sportsmanager_mitglied_von_verein (spieler_id, verein_id, mitgliedsstatus, ausgetreten) VALUES ('$spielerId', '$vereinId', '1', FALSE);"; } else { $query = "UPDATE #__sportsmanager_mitglied_von_verein" . "\n SET mitgliedsstatus = '" . $mitgliedsstatus . "'," . "\n ausgetreten = " . ($mitgliedsstatus == 0 ? "TRUE" : "FALSE") . "\n WHERE mitglied_von_verein_id = $id"; } $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } aktuellerVereinAktualisieren($spielerId); redirectSportsManagerURL('&task=admin_vereinsmitglieder&vereinid=' . $vereinId); } #[NoReturn] function adminRemoveVereinsmitglied(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("vereine_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $vereinId = $jInput->get('vereinid', 0, 'INT'); $query = "DELETE FROM #__sportsmanager_mitglied_von_verein WHERE mitglied_von_verein_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } aktuellerVereinAktualisieren(); redirectSportsManagerURL('&task=admin_vereinsmitglieder&vereinid=' . $vereinId); } function adminSpielorte(): void { $db = getDatabase(); if (!benutzerZugriff("spielorte_aendern")) keinZugriff(true); $query = "SELECT *" . "\n FROM #__sportsmanager_spielort" . "\n ORDER BY ortsname, name, ortsteil"; $spielorte = loadObjectList($db, $query); HTML_sportsmanager_admin::adminSpielorte($spielorte); } function adminEditSpielort(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("spielorte_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $row = null; if ($id !== null) { $query = "SELECT * FROM #__sportsmanager_spielort WHERE spielort_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) == 1) $row = $rows[0]; } HTML_sportsmanager_admin::adminEditSpielort($row); } #[NoReturn] function adminSaveSpielort(): void { $db = getDatabase(); global $_FILES; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("spielorte_aendern")) keinZugriff(); $id = $jInput->get('id', 0, 'INT'); $name = $db->escape(trim($jInput->get('name', '', 'RAW'))); $strasse = $db->escape(trim($jInput->get('strasse', '', 'RAW'))); $plz = $db->escape(trim($jInput->get('plz', '', 'RAW'))); $ortsname = $db->escape(trim($jInput->get('ortsname', '', 'RAW'))); $ortsteil = $db->escape(trim($jInput->get('ortsteil', '', 'RAW'))); $url = $db->escape(trim($jInput->get('url', '', 'RAW'))); $beschreibung = $db->escape(trim($jInput->get('beschreibung', '', 'RAW'))); $status = $jInput->get('status', 0, 'INT'); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_spielorte#id' . $id); } if ($id == 0) { $query = "INSERT INTO #__sportsmanager_spielort (name, strasse, plz, ortsname, ortsteil, url, beschreibung, status)" . "\n VALUES ('$name', '$strasse', '$plz', '$ortsname', '$ortsteil', '$url', '$beschreibung', '$status');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $id = $db->insertid(); } else { $query = "UPDATE #__sportsmanager_spielort" . "\n SET name = '$name'," . "\n strasse = '$strasse'," . "\n plz = '$plz'," . "\n ortsname = '$ortsname'," . "\n ortsteil = '$ortsteil'," . "\n url = '$url'," . "\n beschreibung = '$beschreibung'," . "\n status = '$status'" . "\n WHERE spielort_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } redirectSportsManagerURL('&task=admin_spielorte#id' . $id); } #[NoReturn] function adminRemoveSpielort(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("spielorte_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $query = "UPDATE #__sportsmanager_team SET heimspielort_id = NULL WHERE heimspielort_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "UPDATE #__sportsmanager_begegnung SET spielort_id = NULL WHERE spielort_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_spielort WHERE spielort_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } redirectSportsManagerURL('&task=admin_spielorte'); } function adminSpielorteZusammenlegenForm(): void { $db = getDatabase(); if (!benutzerZugriff("spielorte_aendern")) keinZugriff(true); $query = "SELECT *" . "\n FROM #__sportsmanager_spielort" . "\n ORDER BY ortsname, name, ortsteil"; $spielorte = loadObjectList($db, $query); HTML_sportsmanager_admin::adminSpielorteZusammenlegen($spielorte); } #[NoReturn] function adminSpielorteZusammenlegen(): void { $db = getDatabase(); global $_FILES; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("spielorte_aendern")) keinZugriff(true); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_spielorte'); } $spielort_beizubehalten_id = $jInput->get('spielort_beizubehalten_id', 0, 'INT'); $spielort_zu_entfernen_id = $jInput->get('spielort_zu_entfernen_id', 0, 'INT'); if ($spielort_beizubehalten_id == $spielort_zu_entfernen_id) { redirectSportsManagerURL('&task=admin_spielorte#id' . $spielort_beizubehalten_id, "Zum Zusammanlegen müssen zwei unterschiedliche Spielorte gewählt werden"); } $query = "UPDATE #__sportsmanager_team" . "\n SET heimspielort_id = $spielort_beizubehalten_id" . "\n WHERE heimspielort_id = $spielort_zu_entfernen_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "UPDATE #__sportsmanager_begegnung" . "\n SET spielort_id = $spielort_beizubehalten_id" . "\n WHERE spielort_id = $spielort_zu_entfernen_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_spielort WHERE spielort_id = $spielort_zu_entfernen_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } redirectSportsManagerURL('&task=admin_spielorte#id' . $spielort_beizubehalten_id); } function adminEinstufungen(): void { $db = getDatabase(); if (!benutzerZugriff("einstufungen_aendern")) keinZugriff(true); $query = "SELECT *, (SELECT COUNT(*) FROM #__sportsmanager_einstufung_rangliste WHERE #__sportsmanager_einstufung.einstufung_id = #__sportsmanager_einstufung_rangliste.einstufung_id) AS ranglisten" . "\n FROM #__sportsmanager_einstufung" . "\n ORDER BY typ, prioritaet, bezeichnung"; $einstufungen = loadObjectList($db, $query); HTML_sportsmanager_admin::adminEinstufungen($einstufungen); } function adminEditEinstufung(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("einstufungen_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $row = null; if ($id !== null) { $query = "SELECT * FROM #__sportsmanager_einstufung WHERE einstufung_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) == 1) $row = $rows[0]; } // Ranglisten ermitteln if ($id == 0) { $query = "SELECT #__sportsmanager_rangliste.rangliste_id, bezeichnung, saisonbezeichnung" . "\n FROM #__sportsmanager_rangliste" . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" . "\n ORDER BY saisonbezeichnung DESC, reihenfolge, bezeichnung, kategorie"; } else { $query = "SELECT DISTINCT #__sportsmanager_rangliste.rangliste_id, ranglisten.einstufung_rangliste_id, ranglisten.platz_min, ranglisten.platz_max, bezeichnung, saisonbezeichnung" . "\n FROM #__sportsmanager_rangliste" . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" . "\n LEFT JOIN (SELECT rangliste_id, einstufung_rangliste_id, platz_min, platz_max FROM #__sportsmanager_einstufung_rangliste WHERE einstufung_id = $id) AS ranglisten USING (rangliste_id)" . "\n ORDER BY saisonbezeichnung DESC, reihenfolge, bezeichnung, kategorie"; } $ranglisten = loadObjectList($db, $query); HTML_sportsmanager_admin::adminEditEinstufung($row, $ranglisten); } #[NoReturn] function adminSaveEinstufung(): void { $db = getDatabase(); global $_FILES; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("einstufungen_aendern")) keinZugriff(); $id = $jInput->get('id', 0, 'INT'); $bezeichnung = $db->escape(trim($jInput->get('bezeichnung', '', 'RAW'))); $prioritaet = $jInput->get('prioritaet', 0, 'INT'); $typ = $jInput->get('typ', 0, 'INT'); $elo_min = $jInput->get('elo_min', 0, 'INT'); $elo_max = $jInput->get('elo_max', 0, 'INT'); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_einstufungen#id' . $id); } $ranglisten_beruecksichtigt = array(); $ranglisten_beruecksichtigt_platz_min = array(); $ranglisten_beruecksichtigt_platz_max = array(); $i = 0; $rangliste_id = $jInput->get('rangliste_id_' . $i, 0, 'INT'); $rangliste_platz_min = $jInput->get('rangliste_platz_min_' . $i, 0, 'INT'); $rangliste_platz_max = $jInput->get('rangliste_platz_max_' . $i, 0, 'INT'); while ($rangliste_id != 0 && !in_array($rangliste_id, $ranglisten_beruecksichtigt)) { $ranglisten_beruecksichtigt[] = $rangliste_id; $ranglisten_beruecksichtigt_platz_min[] = $rangliste_platz_min; $ranglisten_beruecksichtigt_platz_max[] = $rangliste_platz_max; $i++; $rangliste_id = $jInput->get('rangliste_id_' . $i, 0, 'INT'); $rangliste_platz_min = $jInput->get('rangliste_platz_min_' . $i, 0, 'INT'); $rangliste_platz_max = $jInput->get('rangliste_platz_max_' . $i, 0, 'INT'); } if ($id == 0) { $query = "INSERT INTO #__sportsmanager_einstufung (bezeichnung, prioritaet, typ, elo_min, elo_max)" . "\n VALUES ('$bezeichnung', '$prioritaet', '$typ', '$elo_min', '$elo_max');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $id = $db->insertid(); } else { $query = "UPDATE #__sportsmanager_einstufung" . "\n SET bezeichnung = '$bezeichnung'," . "\n prioritaet = '$prioritaet'," . "\n typ = '$typ'," . "\n elo_min = '$elo_min'," . "\n elo_max = '$elo_max'" . "\n WHERE einstufung_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } // Berücksichtige Ranglisten prüfen und ggf. aktualisieren $query = "SELECT *" . "\n FROM #__sportsmanager_einstufung_rangliste" . "\n WHERE einstufung_id = $id"; $bestehende_ranglisten_beruecksichtigt = loadObjectList($db, $query); foreach ($bestehende_ranglisten_beruecksichtigt as $bestehende_rangliste_beruecksichtigt) { $ist_beruecksichtigt = false; foreach ($ranglisten_beruecksichtigt as $rangliste_id) { if ($bestehende_rangliste_beruecksichtigt->rangliste_id == $rangliste_id) { $ist_beruecksichtigt = true; break; } } if (!$ist_beruecksichtigt) { $query = "DELETE FROM #__sportsmanager_einstufung_rangliste WHERE rangliste_id = $bestehende_rangliste_beruecksichtigt->rangliste_id AND einstufung_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } foreach ($ranglisten_beruecksichtigt as $index => $rangliste_id) { $ist_beruecksichtigt = false; $bestehende_rangliste_platz_min = null; $bestehende_rangliste_platz_max = null; foreach ($bestehende_ranglisten_beruecksichtigt as $bestehende_rangliste_beruecksichtigt) { if ($bestehende_rangliste_beruecksichtigt->rangliste_id == $rangliste_id) { $ist_beruecksichtigt = true; $bestehende_rangliste_platz_min = $bestehende_rangliste_beruecksichtigt->platz_min; $bestehende_rangliste_platz_max = $bestehende_rangliste_beruecksichtigt->platz_max; break; } } $platz_min = $ranglisten_beruecksichtigt_platz_min[$index]; $platz_max = $ranglisten_beruecksichtigt_platz_max[$index]; if (!$ist_beruecksichtigt) { $query = "SELECT COUNT(*)" . "\n FROM #__sportsmanager_rangliste" . "\n WHERE rangliste_id = $rangliste_id"; $n = loadResult($db, $query); if ($n > 0) { $query = "INSERT INTO #__sportsmanager_einstufung_rangliste (einstufung_id, rangliste_id, platz_min, platz_max) VALUES ('$id', '$rangliste_id', '$platz_min', '$platz_max');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } else if ($platz_min != $bestehende_rangliste_platz_min || $platz_max != $bestehende_rangliste_platz_max) { $query = "UPDATE #__sportsmanager_einstufung_rangliste" . "\n SET platz_min = '$platz_min'," . "\n platz_max = '$platz_max'" . "\n WHERE einstufung_id = $id AND rangliste_id = $rangliste_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } einstufungAktualisieren(); redirectSportsManagerURL('&task=admin_einstufungen#id' . $id); } #[NoReturn] function adminRemoveEinstufung(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("einstufungen_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $query = "DELETE FROM #__sportsmanager_einstufung_rangliste WHERE einstufung_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_einstufung WHERE einstufung_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } einstufungAktualisieren(); redirectSportsManagerURL('&task=admin_einstufungen'); } function einstufungAktualisieren($berechnungen_auswerten = false): void { $db = getDatabase(); if ($berechnungen_auswerten) { $session_id = redirectRequestGetSessionId(); $query = "SELECT IF(EXISTS(" . "\n SELECT *" . "\n FROM #__sportsmanager_berechnung" . "\n WHERE typ = 'einstufung' AND " . (empty($session_id) ? ("session_id < SUBTIME(NOW(), '00:10:00')") : ("session_id = '" . $session_id . "'")) . "\n ), 1, 0)"; $berechnungen = loadResult($db, $query); if (empty($berechnungen) || laufzeit() >= 5) { return; } } else if (!redirectSessionIdEmpty() || laufzeit() >= 5) { $session_id = redirectSessionIdSetzen(); $query = "INSERT INTO #__sportsmanager_berechnung (session_id, typ, id) VALUES ('$session_id', 'einstufung', NULL);"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } return; } $query = "SELECT einstufung_id, prioritaet, typ, elo_min, elo_max" . "\n FROM #__sportsmanager_einstufung"; $rows = loadObjectList($db, $query); $einstufung_prioritaet = array(); $einstufung_typ = array(); foreach ($rows as $row) { $einstufung_prioritaet[$row->einstufung_id] = $row->prioritaet; $einstufung_typ[$row->einstufung_id] = $row->typ; } $spieler_einstufung_allgemein = array(); $spieler_einstufung_einzel = array(); $spieler_einstufung_doppel = array(); $query = "SELECT rangliste_id, einstufung_id, platz_min, platz_max" . "\n FROM #__sportsmanager_einstufung_rangliste" . "\n ORDER BY rangliste_id, platz_min, platz_max"; $einstufung_ranglisten = loadObjectList($db, $query); $einstufungen_per_ranglisten = array(); foreach ($einstufung_ranglisten as $einstufung_rangliste) { $platz_min = $einstufung_rangliste->platz_min; $platz_max = $einstufung_rangliste->platz_max; if (empty($platz_min) && empty($platz_max)) continue; if (!isset($einstufungen_per_ranglisten[$einstufung_rangliste->rangliste_id])) $einstufungen_per_ranglisten[$einstufung_rangliste->rangliste_id] = array(); $einstufungen_per_ranglisten[$einstufung_rangliste->rangliste_id][] = array($einstufung_rangliste->einstufung_id, $platz_min, $platz_max); } foreach ($einstufungen_per_ranglisten as $rangliste_id => $einstufung) { $query = "SELECT spieler_id, platz" . "\n FROM #__sportsmanager_rangliste_punkte" . "\n WHERE rangliste_id = $rangliste_id" . "\n ORDER BY platz"; $rangliste_punkte = loadObjectList($db, $query); foreach ($rangliste_punkte as $punkte) { foreach ($einstufung as $einstufung_platzierung) { $platz_min = $einstufung_platzierung[1]; $platz_max = $einstufung_platzierung[2]; if (($punkte->platz >= $platz_min || $platz_min == 0) && ($punkte->platz <= $platz_max || $platz_max == 0)) { $einstufung_id = $einstufung_platzierung[0]; if ($einstufung_typ[$einstufung_id] == 0) { if (!isset($spieler_einstufung_allgemein[$punkte->spieler_id]) || ($einstufung_prioritaet[$spieler_einstufung_allgemein[$punkte->spieler_id]] > $einstufung_prioritaet[$einstufung_id])) $spieler_einstufung_allgemein[$punkte->spieler_id] = $einstufung_id; } else if ($einstufung->typ == 1) { if (!isset($spieler_einstufung_einzel[$punkte->spieler_id]) || ($einstufung_prioritaet[$spieler_einstufung_einzel[$punkte->spieler_id]] > $einstufung_prioritaet[$einstufung_id])) $spieler_einstufung_einzel[$punkte->spieler_id] = $einstufung_id; } else { if (!isset($spieler_einstufung_doppel[$punkte->spieler_id]) || ($einstufung_prioritaet[$spieler_einstufung_doppel[$punkte->spieler_id]] > $einstufung_prioritaet[$einstufung_id])) $spieler_einstufung_doppel[$punkte->spieler_id] = $einstufung_id; } } } } } $query = "SELECT spieler_id, elo_einzel, elo_doppel" . "\n FROM #__sportsmanager_spieler" . "\n WHERE NOT ISNULL(elo_einzel) OR NOT ISNULL(elo_doppel) OR elo_einzel > 0 OR elo_doppel > 0"; $spieler = loadObjectList($db, $query); foreach ($spieler as $s) { $spieler_id = $s->spieler_id; $elo_einzel = $s->elo_einzel; $elo_doppel = $s->elo_doppel; foreach ($rows as $einstufung) { $einstufung_id = $einstufung->einstufung_id; $elo_min = $einstufung->elo_min; $elo_max = $einstufung->elo_max; if (empty($elo_min) && empty($elo_max)) continue; if ($einstufung_typ[$einstufung_id] == 0) { if (($elo_einzel > 0 && ($elo_einzel >= $elo_min || empty($elo_min)) && ($elo_einzel <= $elo_max || empty($elo_max))) || ($elo_doppel > 0 && ($elo_doppel >= $elo_min || empty($elo_min)) && ($elo_doppel <= $elo_max || empty($elo_max)))) { if (!isset($spieler_einstufung_allgemein[$spieler_id]) || ($einstufung_prioritaet[$einstufung_id] > $einstufung_prioritaet[$spieler_einstufung_allgemein[$spieler_id]])) $spieler_einstufung_allgemein[$spieler_id] = $einstufung_id; } } else if ($einstufung->typ == 1) { if ($elo_einzel > 0 && ($elo_einzel >= $elo_min || empty($elo_min)) && ($elo_einzel <= $elo_max || empty($elo_max))) { if (!isset($spieler_einstufung_einzel[$spieler_id]) || ($einstufung_prioritaet[$einstufung_id] > $einstufung_prioritaet[$spieler_einstufung_einzel[$spieler_id]])) $spieler_einstufung_einzel[$spieler_id] = $einstufung_id; } } else { if ($elo_doppel > 0 && ($elo_doppel >= $elo_min || empty($elo_min)) && ($elo_doppel <= $elo_max || empty($elo_max))) { if (!isset($spieler_einstufung_doppel[$spieler_id]) || ($einstufung_prioritaet[$einstufung_id] > $einstufung_prioritaet[$spieler_einstufung_doppel[$spieler_id]])) $spieler_einstufung_doppel[$spieler_id] = $einstufung_id; } } } } $db->transactionStart(); $query = "UPDATE #__sportsmanager_spieler" . "\n SET einstufung_allgemein_id = NULL," . "\n einstufung_einzel_id = NULL," . "\n einstufung_doppel_id = NULL"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $spieler_ids = array_keys($spieler_einstufung_allgemein) + array_keys($spieler_einstufung_einzel) + array_keys($spieler_einstufung_doppel); foreach ($spieler_ids as $spieler_id) { $query = "UPDATE #__sportsmanager_spieler" . "\n SET einstufung_allgemein_id = " . ($spieler_einstufung_allgemein[$spieler_id] ?? "NULL") . "," . "\n einstufung_einzel_id = " . ($spieler_einstufung_einzel[$spieler_id] ?? "NULL") . "," . "\n einstufung_doppel_id = " . ($spieler_einstufung_doppel[$spieler_id] ?? "NULL"); $query .= "\n WHERE spieler_id = $spieler_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } $db->transactionCommit(); if ($berechnungen_auswerten) { $query = "DELETE FROM #__sportsmanager_berechnung WHERE typ = 'einstufung' AND " . (empty($session_id) ? ("session_id < SUBTIME(NOW(), '00:10:00')") : ("session_id = '" . $session_id . "'")); $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } function adminTeamspielmodi(): void { $db = getDatabase(); if (!benutzerZugriff("mannschaftsspielplaene_aendern")) keinZugriff(true); $query = "SELECT *, IF(EXISTS(SELECT * FROM #__sportsmanager_veranstaltung WHERE teamspiel_modus_id = modus_id), 1, 0) AS veranstaltungen" . "\n FROM #__sportsmanager_teamspiel_modus" . "\n ORDER BY status DESC, bezeichnung"; $rows = loadObjectList($db, $query); HTML_sportsmanager_admin::adminTeamspielmodi($rows); } function adminEditTeamspielmodus(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("mannschaftsspielplaene_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $row = null; if ($id !== null) { $query = "SELECT * FROM #__sportsmanager_teamspiel_modus WHERE teamspiel_modus_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) == 1) $row = $rows[0]; } HTML_sportsmanager_admin::adminEditTeamspielmodus($row); } #[NoReturn] function adminSaveTeamspielmodus(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("mannschaftsspielplaene_aendern")) keinZugriff(); $id = $jInput->get('id', 0, 'INT'); $bezeichnung = $db->escape(trim($jInput->get('bezeichnung', '', 'RAW'))); $punktetyp = $jInput->get('punktetyp', 0, 'INT'); $punkte_sieg_einzel = $jInput->get('punkte_sieg_einzel', 0, 'INT'); $punkte_sieg_doppel_separat = $jInput->get('punkte_sieg_doppel_separat', 0, 'INT'); $punkte_sieg_doppel = $punkte_sieg_doppel_separat ? $jInput->get('punkte_sieg_doppel', 0, 'INT') : $punkte_sieg_einzel; $heimtausch = $jInput->get('heimtausch', 0, 'INT'); $status = $jInput->get('status', 0, 'INT'); $spielpunkte_wertung_einzel = $jInput->get('spielpunkte_wertung_einzel', 0, 'INT'); $spielpunkte_wertung_doppel_separat = $jInput->get('spielpunkte_wertung_doppel_separat', 0, 'INT'); $spielpunkte_wertung_doppel = $spielpunkte_wertung_doppel_separat ? $jInput->get('spielpunkte_wertung_doppel', 0, 'INT') : $spielpunkte_wertung_einzel; $spielpunkte_bedingung = $jInput->get('spielpunkte_bedingung', 0, 'INT'); $spielernamen = $jInput->get('spielernamen', 0, 'INT'); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_teamspiel_modi'); } $modus = ""; $spiel_nr = 1; do { $spiel_heim = $jInput->get('spiel_' . $spiel_nr . '_heim', '', 'RAW'); $spiel_gast = $jInput->get('spiel_' . $spiel_nr . '_gast', '', 'RAW'); $spiel_auflage = $jInput->get('spiel_' . $spiel_nr . '_auflage', '', 'RAW'); if (strlen($spiel_heim) != 0 && strlen($spiel_gast) != 0 && ($spiel_auflage == "" || $spiel_auflage == "H" || $spiel_auflage == "G")) { if (strlen($modus) != 0) $modus .= ","; $modus .= $spiel_heim . $spiel_gast . $spiel_auflage; } $spiel_nr++; } while (strlen($spiel_heim) != 0 && strlen($spiel_gast) != 0); $verknuepfungen = ""; $verknuepfung_nr = 1; for (; ;) { $verknuepfung_doppel = $jInput->get('verknuepfung_' . $verknuepfung_nr . '_doppel', '', 'RAW'); $verknuepfung_einzel1 = $jInput->get('verknuepfung_' . $verknuepfung_nr . '_einzel1', '', 'RAW'); $verknuepfung_einzel2 = $jInput->get('verknuepfung_' . $verknuepfung_nr . '_einzel2', '', 'RAW'); if (strlen($verknuepfung_doppel) == 0 || strlen($verknuepfung_einzel1) == 0 || strlen($verknuepfung_einzel2) == 0) break; if (str_contains($verknuepfungen, $verknuepfung_doppel) || str_contains($verknuepfungen, $verknuepfung_einzel1) || str_contains($verknuepfungen, $verknuepfung_einzel2) || $verknuepfung_einzel1 == $verknuepfung_einzel2) break; if (strlen($verknuepfungen) != 0) $verknuepfungen .= ","; $verknuepfungen .= $verknuepfung_doppel . $verknuepfung_einzel1 . $verknuepfung_einzel2; $verknuepfung_nr++; } if (strlen($verknuepfungen) > 0) $modus .= "|" . $verknuepfungen; $modus = $db->escape($modus); if ($id == 0) { $query = "INSERT INTO #__sportsmanager_teamspiel_modus (bezeichnung, punktetyp, punkte_sieg_einzel, punkte_sieg_doppel, spielpunkte_wertung_einzel, spielpunkte_wertung_doppel, spielpunkte_bedingung, spielernamen, heimtausch, modus, status) VALUES ('$bezeichnung', '$punktetyp', '$punkte_sieg_einzel', '$punkte_sieg_doppel', '$spielpunkte_wertung_einzel', '$spielpunkte_wertung_doppel', '$spielpunkte_bedingung', '$spielernamen', '$heimtausch', '$modus', '$status');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $id = $db->insertid(); } else { $query = "UPDATE #__sportsmanager_teamspiel_modus" . "\n SET bezeichnung = '$bezeichnung'," . "\n punktetyp = '$punktetyp'," . "\n punkte_sieg_einzel = '$punkte_sieg_einzel'," . "\n punkte_sieg_doppel = '$punkte_sieg_doppel'," . "\n spielpunkte_wertung_einzel = '$spielpunkte_wertung_einzel'," . "\n spielpunkte_wertung_doppel = '$spielpunkte_wertung_doppel'," . "\n spielpunkte_bedingung = '$spielpunkte_bedingung'," . "\n spielernamen = '$spielernamen'," . "\n heimtausch = '$heimtausch'," . "\n modus = '$modus'," . "\n status = '$status'" . "\n WHERE teamspiel_modus_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } begegnungenAktualisieren(0, $id); teamstatistikAktualisieren(0, $id); spielerstatistikAktualisieren(0, 0, 0, $id); redirectSportsManagerURL('&task=admin_teamspiel_modi'); } #[NoReturn] function adminRemoveTeamspielmodus(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("mannschaftsspielplaene_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_veranstaltung WHERE modus_id = $id), 1, 0)"; $n = loadResult($db, $query); if ($n > 0) die(Text::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); $query = "DELETE FROM #__sportsmanager_teamspiel_modus WHERE teamspiel_modus_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } redirectSportsManagerURL('&task=admin_teamspiel_modi'); } #[NoReturn] function adminKopierenTeamspielmodus(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("mannschaftsspielplaene_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $query = "SELECT * FROM #__sportsmanager_teamspiel_modus WHERE teamspiel_modus_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $teamspiel_modus = $rows[0]; $query = "INSERT INTO #__sportsmanager_teamspiel_modus (bezeichnung, punktetyp, punkte_sieg_einzel, punkte_sieg_doppel, spielpunkte_wertung_einzel, spielpunkte_wertung_doppel, spielpunkte_bedingung, spielernamen, heimtausch, modus, status) VALUES ('" . $db->escape($teamspiel_modus->bezeichnung) . " (Kopie)', '$teamspiel_modus->punktetyp', '$teamspiel_modus->punkte_sieg_einzel', '$teamspiel_modus->punkte_sieg_doppel', '$teamspiel_modus->spielpunkte_wertung_einzel', '$teamspiel_modus->spielpunkte_wertung_doppel', '$teamspiel_modus->spielpunkte_bedingung', '$teamspiel_modus->spielernamen', '$teamspiel_modus->heimtausch', '$teamspiel_modus->modus', '$teamspiel_modus->status');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $db->insertid(); redirectSportsManagerURL('&task=admin_teamspiel_modi'); } function adminVerschiebenModi(): void { $db = getDatabase(); if (!benutzerZugriff("verschieberegeln_aendern")) keinZugriff(true); $query = "SELECT *, IF(EXISTS(SELECT * FROM #__sportsmanager_veranstaltung WHERE #__sportsmanager_veranstaltung.verschieberegel_id = #__sportsmanager_verschieberegel.verschieberegel_id), 1, 0) AS veranstaltungen" . "\n FROM #__sportsmanager_verschieberegel" . "\n ORDER BY bezeichnung"; $rows = loadObjectList($db, $query); HTML_sportsmanager_admin::adminVerschiebenModi($rows); } function adminEditVerschiebenModus(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("verschieberegeln_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); if ($id == null) $row = null; else { $query = "SELECT * FROM #__sportsmanager_verschieberegel WHERE verschieberegel_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) == 1) $row = $rows[0]; } if (!empty($row)) { HTML_sportsmanager_admin::adminEditVerschiebenModus($row); } } #[NoReturn] function adminSaveVerschiebenModus(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("verschieberegeln_aendern")) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_verschieben_modi'); } $id = $jInput->get('id', 0, 'INT'); $bezeichnung = $db->escape(trim($jInput->get('bezeichnung', '', 'RAW'))); $initial_ohne_termin = $jInput->get('initial_ohne_termin', 0, 'INT'); $keine_gegenvorschlaege = $jInput->get('keine_gegenvorschlaege', 0, 'INT'); $vorlaufzeit_tage = $jInput->get('vorlaufzeit_tage', 0, 'INT'); $termine_minimal = $jInput->get('termine_minimal', 1, 'INT'); $termine_maximal = $jInput->get('termine_maximal', 3, 'INT'); $ablehnen = $jInput->get('ablehnen', 0, 'INT'); if ($termine_minimal > 0 && $termine_maximal > 0 && $termine_minimal > $termine_maximal) { $t = $termine_minimal; $termine_minimal = $termine_maximal; $termine_maximal = $t; } if ($id == 0) $query = "INSERT INTO #__sportsmanager_verschieberegel (bezeichnung, initial_ohne_termin, keine_gegenvorschlaege, vorlaufzeit_tage, termine_minimal, termine_maximal, ablehnen) VALUES ('$bezeichnung', '$initial_ohne_termin', '$keine_gegenvorschlaege', '$vorlaufzeit_tage', '$termine_minimal', '$termine_maximal', '$ablehnen');"; else { $query = "UPDATE #__sportsmanager_verschieberegel" . "\n SET bezeichnung = '$bezeichnung'," . "\n initial_ohne_termin = '$initial_ohne_termin'," . "\n keine_gegenvorschlaege = '$keine_gegenvorschlaege'," . "\n vorlaufzeit_tage = '$vorlaufzeit_tage'," . "\n termine_minimal = '$termine_minimal'," . "\n termine_maximal = '$termine_maximal'," . "\n ablehnen = '$ablehnen'" . "\n WHERE verschieberegel_id = $id"; } $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } redirectSportsManagerURL('&task=admin_verschieben_modi'); } #[NoReturn] function adminRemoveVerschiebenModus(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("verschieberegeln_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_veranstaltung WHERE verschieberegel_id = $id), 1, 0)"; $n = loadResult($db, $query); if ($n > 0) die(Text::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); $query = "DELETE FROM #__sportsmanager_verschieberegel WHERE verschieberegel_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } redirectSportsManagerURL('&task=admin_verschieben_modi'); } function adminKategorien(): void { $db = getDatabase(); if (!benutzerZugriff("kategorien_aendern")) keinZugriff(true); $query = "SELECT * FROM #__sportsmanager_kategorie ORDER BY typ, nummer"; $rows = loadObjectList($db, $query); $kategorien = array(); $kategorien[1] = array(); $kategorien[2] = array(); $kategorien[3] = array(); $kategorien[4] = array(); $kategorien[5] = array(); $kategorien[6] = array(); $kategorien[7] = array(); foreach ($rows as $row) $kategorien[$row->typ][$row->nummer] = $row->bezeichnung; HTML_sportsmanager_admin::adminKategorien($kategorien); } #[NoReturn] function adminSaveKategorien(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("kategorien_aendern")) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_uebersicht'); } $query = "SELECT * FROM #__sportsmanager_kategorie ORDER BY typ, nummer"; $rows = loadObjectList($db, $query); $kategorien = array(); $kategorien[1] = array(); $kategorien[2] = array(); $kategorien[3] = array(); $kategorien[4] = array(); $kategorien[5] = array(); $kategorien[6] = array(); $kategorien[7] = array(); foreach ($rows as $row) $kategorien[$row->typ][$row->nummer] = $row->bezeichnung; for ($typ = 1; $typ <= 7; $typ++) { for ($nummer = 1; $nummer <= 50; $nummer++) { $bezeichnung = $db->escape($jInput->get('bezeichnung_' . $typ . '_' . $nummer, '', 'RAW')); if (empty($bezeichnung)) { if (isset($kategorien[$typ][$nummer])) { $query = "DELETE FROM #__sportsmanager_kategorie WHERE typ = $typ AND nummer = $nummer;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } else { if (isset($kategorien[$typ][$nummer])) { $query = "UPDATE #__sportsmanager_kategorie" . "\n SET bezeichnung = '$bezeichnung'" . "\n WHERE typ = $typ AND nummer = $nummer"; } else { $query = "INSERT INTO #__sportsmanager_kategorie (typ, nummer, bezeichnung) VALUES ('$typ', '$nummer', '$bezeichnung');"; } $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } } redirectSportsManagerURL('&task=admin_uebersicht'); } function adminRanglistensysteme(): void { $db = getDatabase(); if (!benutzerZugriff("ranglistenwertungen_aendern")) keinZugriff(true); $query = "SELECT *, (SELECT COUNT(*) FROM #__sportsmanager_rangliste WHERE rangliste_system_id = system_id) AS ranglisten, (SELECT COUNT(*) FROM #__sportsmanager_rangliste_turnierdisziplin WHERE rangliste_system_id = system_id) AS ranglistenturnierdisziplinen FROM #__sportsmanager_rangliste_system ORDER BY status DESC, systembezeichnung"; $rows = loadObjectList($db, $query); $error_level = error_reporting(E_ERROR); $math = new MathParserSM; try { $math->setVariable('n', 100); $math->setVariable('m', 1); $math->setVariable('p', 5); } catch (Exception $e) { Log::add("variable could not be set: " . $e->getMessage(), Log::WARNING, "com_sportsmanager"); return; } $pruefung = array(); foreach ($rows as $row) { $korrekt = true; $pruefung[$row->rangliste_system_id] = true; if (!empty($row->funktion)) { try { $math->setExpression($row->funktion); } catch (Exception $e) { $korrekt = false; Log::add("expression could not be set: " . $e->getMessage(), Log::WARNING, "com_sportsmanager"); } } $pruefung[$row->rangliste_system_id] = $korrekt; } error_reporting($error_level); HTML_sportsmanager_admin::adminRanglistensysteme($rows, $pruefung); } function adminEditRanglistensystem(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("ranglistenwertungen_aendern")) keinZugriff(true); $row = null; $punkte = null; $id = $jInput->get('id', 0, 'INT'); $typ = $jInput->get('typ', 0, 'INT'); if ($id != null) { $query = "SELECT * FROM #__sportsmanager_rangliste_system WHERE rangliste_system_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $row = $rows[0]; $query = "SELECT * FROM #__sportsmanager_rangliste_system_punkte WHERE system_id = $id ORDER BY rangliste_system_punkte_id"; $punkte = loadObjectList($db, $query); } HTML_sportsmanager_admin::adminEditRanglistensystem($row, $punkte, $row != null ? ($row->funktion != null) : $typ); } #[NoReturn] function adminSaveRanglistensystem(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("ranglistenwertungen_aendern")) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_ranglistensysteme'); } $id = $jInput->get('id', 0, 'INT'); $bezeichnung = $db->escape(trim($jInput->get('bezeichnung', '', 'RAW'))); $status = $jInput->get('status', 0, 'INT'); $funktion = $db->escape(trim($jInput->get('funktion', '', 'RAW'))); $typ = $jInput->get('typ', 0, 'INT'); if ($id == 0) { if ($typ != 1) $query = "INSERT INTO #__sportsmanager_rangliste_system (systembezeichnung, status) VALUES ('$bezeichnung', '$status');"; else $query = "INSERT INTO #__sportsmanager_rangliste_system (systembezeichnung, status, funktion) VALUES ('$bezeichnung', '$status', '$funktion');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $id = $db->insertid(); } else { $query = "UPDATE #__sportsmanager_rangliste_system" . "\n SET systembezeichnung = '$bezeichnung'," . "\n status = '$status'"; if ($typ == 1) $query .= ",\n funktion = '$funktion'"; $query .= "\n WHERE rangliste_system_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } $query = "DELETE FROM #__sportsmanager_rangliste_system_punkte WHERE system_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } if ($typ != 1) { for ($punkte_nr = 1; $punkte_nr <= 50; $punkte_nr++) { $platz_min = $jInput->get('punkte_' . $punkte_nr . '_platz_min', 0, 'INT'); $platz_max = $jInput->get('punkte_' . $punkte_nr . '_platz_max', 0, 'INT'); $teilnehmer_min = $jInput->get('punkte_' . $punkte_nr . '_teilnehmer_min', 0, 'INT'); $teilnehmer_max = $jInput->get('punkte_' . $punkte_nr . '_teilnehmer_max', 0, 'INT'); $punkte = $jInput->get('punkte_' . $punkte_nr . '_punkte', 0, 'INT'); if ($punkte != 0) { $query = "INSERT INTO #__sportsmanager_rangliste_system_punkte (system_id, platz_min, platz_max, teilnehmer_min, teilnehmer_max, punkte) VALUES ('$id', '$platz_min', '$platz_max', '$teilnehmer_min', '$teilnehmer_max', '$punkte');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } } ranglisteAktualisieren(); einstufungAktualisieren(); redirectSportsManagerURL('&task=admin_ranglistensysteme'); } function adminRanglistensystemAuswertung(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("ranglistenwertungen_aendern")) keinZugriff(true); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_ranglistensysteme'); } $id = $jInput->get('id', 0, 'INT'); $teilnehmer = $jInput->get('teilnehmer', 100, 'INT'); $multiplikator = $jInput->get('multiplikator', 1, 'FLOAT'); $query = "SELECT * FROM #__sportsmanager_rangliste_system WHERE rangliste_system_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $system = $rows[0]; $query = "SELECT * FROM #__sportsmanager_rangliste_system_punkte WHERE system_id = $id ORDER BY rangliste_system_punkte_id"; $systempunkte = loadObjectList($db, $query); $math = new MathParserSM; if ($system->funktion != NULL) { try { $math->setVariable('n', $teilnehmer); $math->setVariable('m', $multiplikator); $math->setExpression($system->funktion); } catch (Exception $e) { Log::add("variables/expression could not be set: " . $e->getMessage(), Log::WARNING, "com_sportsmanager"); return; } } $teilnehmerpunkte = array(); for ($platz = 1; $platz <= $teilnehmer; $platz++) { $p = 0; if ($system->funktion == NULL) { foreach ($systempunkte as $sp) { if (($sp->platz_min == 0 || $sp->platz_min <= $platz) && ($sp->platz_max == 0 || $platz <= $sp->platz_max) && ($sp->teilnehmer_min == 0 || $sp->teilnehmer_min <= $teilnehmer) && ($sp->teilnehmer_max == 0 || $teilnehmer <= $sp->teilnehmer_max)) { $p = round($sp->punkte * $multiplikator); break; } } } else { try { $math->setVariable('p', $platz); $p = round($math->getValue()); } catch (Exception $e) { Log::add("variable could not be set: " . $e->getMessage(), Log::WARNING, "com_sportsmanager"); return; } } $teilnehmerpunkte[$platz] = $p; } HTML_sportsmanager_admin::adminRanglistensystemAuswertung($system, $teilnehmer, $multiplikator, $teilnehmerpunkte); } #[NoReturn] function adminRemoveRanglistensystem(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("ranglistenwertungen_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_rangliste WHERE system_id = $id), 1, 0)"; $n = loadResult($db, $query); if ($n > 0) die(Text::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_rangliste_turnierdisziplin WHERE system_id = $id), 1, 0)"; $n = loadResult($db, $query); if ($n > 0) die(Text::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); $query = "DELETE FROM #__sportsmanager_rangliste_system_punkte WHERE system_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_rangliste_system WHERE rangliste_system_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } redirectSportsManagerURL('&task=admin_ranglistensysteme'); } function adminEditRangliste(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("ranglisten_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); if ($id == 0) $rangliste = null; else { $query = "SELECT * FROM #__sportsmanager_rangliste WHERE rangliste_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $rangliste = $rows[0]; if (isset($rangliste->lizenzen)) { $rangliste->lizenzen = explode(',', $rangliste->lizenzen); } } $query = "SELECT * FROM #__sportsmanager_rangliste_system WHERE status > 0 " . ($id != 0 ? "OR rangliste_system_id = $rangliste->system_id " : "") . "ORDER BY systembezeichnung"; $systeme = loadObjectList($db, $query); $query = "SELECT nummer, bezeichnung FROM #__sportsmanager_kategorie WHERE typ = 4 ORDER BY nummer"; $rows_kategorien = loadObjectList($db, $query); $query = "SELECT * FROM #__sportsmanager_saison ORDER BY saisonbezeichnung DESC"; $saisons = loadObjectList($db, $query); $kategorien = array(); foreach ($rows_kategorien as $kategorie) $kategorien[$kategorie->nummer] = $kategorie->bezeichnung; HTML_sportsmanager_admin::adminEditRangliste($rangliste, $systeme, $kategorien, $saisons); } #[NoReturn] function adminSaveRangliste(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("ranglisten_aendern")) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_uebersicht'); } $id = $jInput->get('id', 0, 'INT'); $bezeichnung = $db->escape(trim($jInput->get('bezeichnung', '', 'RAW'))); $saison_id = $jInput->get('saison_id', 0, 'INT'); $erster_tag = normalisiertesDatum(sprintf("%04d-%02d-%02d", $jInput->get('erster_tag_jahr', 2000, 'INT'), $jInput->get('erster_tag_monat', 1, 'INT'), $jInput->get('erster_tag_tag', 1, 'INT'))); $letzter_tag = normalisiertesDatum(sprintf("%04d-%02d-%02d", $jInput->get('letzter_tag_jahr', 2000, 'INT'), $jInput->get('letzter_tag_monat', 1, 'INT'), $jInput->get('letzter_tag_tag', 1, 'INT'))); $system_id = $jInput->get('system_id', 0, 'INT'); $maximal_gewertet_typ = $jInput->get('maximal_gewertet_typ', 0, 'INT'); if ($maximal_gewertet_typ == 0) $maximal_gewertet_zahl = 0; else if ($maximal_gewertet_typ == 1) $maximal_gewertet_zahl = -$jInput->get('maximal_gewertet_zahl', 0, 'INT'); else $maximal_gewertet_zahl = max(0, 100 - $jInput->get('maximal_gewertet_zahl', 0, 'INT')); $minalter = $jInput->get('minalter', 0, 'INT'); $maxalter = $jInput->get('maxalter', 0, 'INT'); $ohnealter = $jInput->get('ohnealter', 0, 'INT'); $geschlecht = $jInput->get('geschlecht', 0, 'INT'); $lizenzen = $jInput->get('lizenzen', [], 'ARRAY'); $status = $jInput->get('status', 0, 'INT'); $reihenfolge = $jInput->get('reihenfolge', 0, 'INT'); $kategorie = $jInput->get('kategorie', 0, 'INT'); if ($id == 0) $query = "INSERT INTO #__sportsmanager_rangliste (bezeichnung, saison_id, erster_tag " . ($letzter_tag != null ? ", letzter_tag" : "") . ", system_id, streichergebnisse, geschlecht, lizenzen, minalter, maxalter, ohnealter, status, reihenfolge, kategorie) VALUES ('$bezeichnung', '$saison_id', '$erster_tag', " . ($letzter_tag != null ? "'$letzter_tag', " : "") . "'$system_id', '$maximal_gewertet_zahl', " . ($geschlecht == null ? "null" : "'$geschlecht'") . ", " . (count((array)$lizenzen) ? implode(',', $lizenzen) : "null") . ", " . ($minalter == null ? "null" : "'$minalter'") . ", " . ($maxalter == null ? "null" : "'$maxalter'") . ", '$ohnealter', '$status', '$reihenfolge', '$kategorie');"; else { $query = "UPDATE #__sportsmanager_rangliste" . "\n SET bezeichnung = '$bezeichnung'," . "\n saison_id = '$saison_id'," . "\n erster_tag = '$erster_tag'," . "\n letzter_tag = " . ($letzter_tag != null ? "'$letzter_tag'," : "NULL,") . "\n system_id = '$system_id'," . "\n streichergebnisse = '$maximal_gewertet_zahl'," . "\n geschlecht = " . ($geschlecht != null ? "'$geschlecht'," : "NULL,") . "\n lizenzen = " . (count((array)$lizenzen) ? "'" . implode(',', $lizenzen) . "'," : "NULL,") . "\n minalter = " . ($minalter != null ? "'$minalter'," : "NULL,") . "\n maxalter = " . ($maxalter != null ? "'$maxalter'," : "NULL,") . "\n ohnealter = '$ohnealter'," . "\n status = '$status'," . "\n reihenfolge = '$reihenfolge'," . "\n kategorie = '$kategorie'" . "\n WHERE rangliste_id = $id"; } $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } if ($id == 0) $id = $db->insertid(); ranglisteAktualisieren($id); einstufungAktualisieren(); redirectSportsManagerURL('&task=admin_uebersicht'); } #[NoReturn] function adminRemoveRangliste(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("ranglisten_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $query = "DELETE FROM #__sportsmanager_einstufung_rangliste WHERE rangliste_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_rangliste_turnierdisziplin_punkte WHERE rangliste_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_rangliste_punkte WHERE rangliste_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_rangliste_turnierdisziplin WHERE rangliste_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "UPDATE #__sportsmanager_turnierdisziplin" . "\n SET voranmeldungen_rangliste_id = NULL" . "\n WHERE voranmeldungen_rangliste_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_rangliste WHERE rangliste_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } ranglisteAktualisieren($id); einstufungAktualisieren(); redirectSportsManagerURL('&task=admin_uebersicht'); } #[NoReturn] function adminKopierenRangliste(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("ranglisten_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $query = "SELECT * FROM #__sportsmanager_rangliste WHERE rangliste_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $rangliste = $rows[0]; $query = "INSERT INTO #__sportsmanager_rangliste (saison_id, system_id, streichergebnisse, geschlecht, lizenzen, minalter, maxalter, ohnealter, bezeichnung, erster_tag, letzter_tag, status, reihenfolge, kategorie)" . "\n VALUES ('$rangliste->saison_id', " . ($rangliste->system_id == null ? "null" : "'$rangliste->system_id'") . ", '" . $db->escape($rangliste->streichergebnisse) . "', " . ($rangliste->geschlecht == null ? "null" : "'$rangliste->geschlecht'") . ", " . ($rangliste->lizenzen == null ? "null" : "'$rangliste->lizenzen'") . "," . ($rangliste->minalter == null ? "null" : "'$rangliste->minalter'") . ", " . ($rangliste->maxalter == null ? "null" : "'$rangliste->maxalter'") . ", '$rangliste->ohnealter', '" . $db->escape($rangliste->bezeichnung . " (Kopie)") . "', '" . $db->escape($rangliste->erster_tag) . "', '" . $db->escape($rangliste->letzter_tag) . "', '0', '" . $db->escape($rangliste->reihenfolge) . "', '" . $db->escape($rangliste->kategorie) . "');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $ziel_rangliste_id = $db->insertid(); // Disziplinen kopieren $query = "SELECT * FROM #__sportsmanager_rangliste_turnierdisziplin WHERE rangliste_id = $id"; $rows = loadObjectList($db, $query); foreach ($rows as $row) { $query = "INSERT INTO #__sportsmanager_rangliste_turnierdisziplin (rangliste_id, turnierdisziplin_id, system_id, wertung, doppel_teilwertung)" . "\n VALUES ($ziel_rangliste_id, '$row->turnierdisziplin_id', " . ($row->system_id == null ? "null" : "'$row->system_id'") . ", '$row->wertung', '$row->doppel_teilwertung');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } redirectSportsManagerURL('&task=admin_uebersicht'); } function adminRanglisteTurnierdisziplinen(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("ranglisten_aendern")) keinZugriff(true); $rangliste_id = $jInput->get('rangliste_id', 0, 'INT'); if ($rangliste_id == 0) die ("Wrong id!"); $query = "SELECT * FROM #__sportsmanager_rangliste WHERE rangliste_id = $rangliste_id"; $ranglisten = loadObjectList($db, $query); if (count($ranglisten) < 1) die ("Wrong id"); $rangliste = $ranglisten[0]; $query = "SELECT #__sportsmanager_rangliste_turnierdisziplin.*, disziplin, turnierbezeichnung, turnierort, systembezeichnung, beginn" . "\n FROM #__sportsmanager_rangliste_turnierdisziplin" . "\n LEFT JOIN #__sportsmanager_turnierdisziplin USING (turnierdisziplin_id)" . "\n LEFT JOIN #__sportsmanager_turnier USING (turnier_id)" . "\n LEFT JOIN #__sportsmanager_rangliste_system ON system_id = rangliste_system_id" . "\n WHERE rangliste_id = $rangliste_id" . "\n ORDER BY #__sportsmanager_turnier.erster_tag DESC, disziplin"; $turnierdisziplinen = loadObjectList($db, $query); HTML_sportsmanager_admin::adminRanglisteTurnierdisziplinen($rangliste, $turnierdisziplinen); } function adminEditRanglisteTurnierdisziplin(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("ranglisten_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $rangliste_id = $jInput->get('rangliste_id', 0, 'INT'); if ($id == 0) $ranglisteTurnierdisziplin = null; else { $query = "SELECT * FROM #__sportsmanager_rangliste_turnierdisziplin WHERE rangliste_turnierdisziplin_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $ranglisteTurnierdisziplin = $rows[0]; } $query = "SELECT * FROM #__sportsmanager_rangliste WHERE rangliste_id = $rangliste_id"; $ranglisten = loadObjectList($db, $query); if (count($ranglisten) < 1) die ("Wrong id"); $rangliste = $ranglisten[0]; $query = "SELECT *" . "\n FROM #__sportsmanager_turnierdisziplin, #__sportsmanager_turnier" . "\n WHERE #__sportsmanager_turnierdisziplin.turnier_id = #__sportsmanager_turnier.turnier_id"; if ($rangliste->erster_tag != null) $query .= " AND (ISNULL(erster_tag) OR DATEDIFF(erster_tag, '$rangliste->erster_tag') >= -1096" . ($ranglisteTurnierdisziplin != null ? " OR $ranglisteTurnierdisziplin->turnierdisziplin_id = turnierdisziplin_id" : "") . ")"; if ($rangliste->letzter_tag != null) $query .= " AND (ISNULL(erster_tag) OR DATEDIFF('$rangliste->letzter_tag', letzter_Tag) >= -366" . ($ranglisteTurnierdisziplin != null ? " OR $ranglisteTurnierdisziplin->turnierdisziplin_id = turnierdisziplin_id" : "") . ")"; $query .= "\n ORDER BY erster_tag DESC, turnierbezeichnung, reihenfolge, disziplin"; $turnierdisziplinen = loadObjectList($db, $query); $query = "SELECT * FROM #__sportsmanager_rangliste_system WHERE status != 0 " . ($id != 0 && $ranglisteTurnierdisziplin->system_id != null ? "OR rangliste_system_id = $ranglisteTurnierdisziplin->system_id " : "") . "ORDER BY systembezeichnung"; $systeme = loadObjectList($db, $query); HTML_sportsmanager_admin::adminEditRanglisteTurnierdisziplin($rangliste, $ranglisteTurnierdisziplin, $turnierdisziplinen, $systeme); } #[NoReturn] function adminSaveRanglisteTurnierdisziplin(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("ranglisten_aendern")) keinZugriff(); $id = $jInput->get('id', 0, 'INT'); $rangliste_id = $jInput->get('rangliste_id', 0, 'INT'); $turnierdisziplin_id = $db->escape($jInput->get('turnierdisziplin_id', 0, 'INT')); $system_id = $jInput->get('system_id', 0, 'INT'); $wertung = $jInput->get('wertung', 0, 'RAW'); $doppel_teilwertung = $jInput->get('doppel_teilwertung', 0, 'RAW'); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_rangliste_turnierdisziplinen&rangliste_id=' . $rangliste_id); } $query = ($id == 0 ? "INSERT" : "UPDATE") . " #__sportsmanager_rangliste_turnierdisziplin" . "\n SET rangliste_id = '$rangliste_id'," . "\n turnierdisziplin_id = '$turnierdisziplin_id'," . "\n system_id = " . ($system_id != 0 ? "'$system_id'" : "NULL") . "," . "\n wertung = '" . $db->escape($wertung) . "'," . "\n doppel_teilwertung = '" . $db->escape($doppel_teilwertung) . "'"; if ($id != 0) $query .= "\n WHERE rangliste_turnierdisziplin_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } ranglisteAktualisieren($rangliste_id); einstufungAktualisieren(); redirectSportsManagerURL('&task=admin_rangliste_turnierdisziplinen&rangliste_id=' . $rangliste_id); } #[NoReturn] function adminRemoveRanglisteTurnierdisziplin(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("ranglisten_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $rangliste_id = $jInput->get('rangliste_id', 0, 'INT'); $query = "DELETE FROM #__sportsmanager_rangliste_turnierdisziplin WHERE rangliste_turnierdisziplin_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } ranglisteAktualisieren($rangliste_id); einstufungAktualisieren(); redirectSportsManagerURL('&task=admin_rangliste_turnierdisziplinen&rangliste_id=' . $rangliste_id); } #[NoReturn] function adminRanglisteDisziplinenEntfernen(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("ranglisten_aendern")) keinZugriff(true); $rangliste_id = $jInput->get('rangliste_id', 0, 'INT'); $query = "DELETE FROM #__sportsmanager_rangliste_turnierdisziplin WHERE rangliste_id = $rangliste_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } ranglisteAktualisieren($rangliste_id); einstufungAktualisieren(); redirectSportsManagerURL('&task=admin_rangliste_turnierdisziplinen&rangliste_id=' . $rangliste_id); } #[NoReturn] function adminRanglisteSystemZuruecksetzen(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("ranglisten_aendern")) keinZugriff(true); $rangliste_id = $jInput->get('rangliste_id', 0, 'INT'); $query = "UPDATE #__sportsmanager_rangliste_turnierdisziplin" . "\n SET system_id = NULL," . "\n wertung = 1" . "\n WHERE rangliste_id = $rangliste_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } ranglisteAktualisieren($rangliste_id); einstufungAktualisieren(); redirectSportsManagerURL('&task=admin_rangliste_turnierdisziplinen&rangliste_id=' . $rangliste_id); } function adminEditSpielerstatistik(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("spielerstatistiken_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); if ($id == 0) $spielerstatistik = null; else { $query = "SELECT * FROM #__sportsmanager_bestenliste WHERE bestenliste_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $spielerstatistik = $rows[0]; } $query = "SELECT nummer, bezeichnung FROM #__sportsmanager_kategorie WHERE typ = 5 ORDER BY nummer"; $rows_kategorien = loadObjectList($db, $query); $kategorien = array(); foreach ($rows_kategorien as $kategorie) $kategorien[$kategorie->nummer] = $kategorie->bezeichnung; $query = "SELECT * FROM #__sportsmanager_saison ORDER BY saisonbezeichnung DESC"; $saisons = loadObjectList($db, $query); HTML_sportsmanager_admin::adminEditSpielerstatistik($spielerstatistik, $kategorien, $saisons); } #[NoReturn] function adminSaveSpielerstatistik(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("spielerstatistiken_aendern")) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_uebersicht'); } $id = $jInput->get('id', 0, 'INT'); $bezeichnung = $db->escape(trim($jInput->get('bezeichnung', '', 'RAW'))); $saison_id = $jInput->get('saison_id', 0, 'INT'); $erster_tag = normalisiertesDatum(sprintf("%04d-%02d-%02d", $jInput->get('erster_tag_jahr', 2000, 'INT'), $jInput->get('erster_tag_monat', 1, 'INT'), $jInput->get('erster_tag_tag', 1, 'INT'))); $letzter_tag = normalisiertesDatum(sprintf("%04d-%02d-%02d", $jInput->get('letzter_tag_jahr', 2000, 'INT'), $jInput->get('letzter_tag_monat', 1, 'INT'), $jInput->get('letzter_tag_tag', 1, 'INT'))); $tabellenwertung = $jInput->get('tabellenwertung', 0, 'INT'); $typ = $jInput->get('typ', 0, 'INT'); $status = $jInput->get('status', 0, 'INT'); $reihenfolge = $jInput->get('reihenfolge', 0, 'INT'); $kategorie = $jInput->get('kategorie', 0, 'INT'); $spielerstatistik_aktualisieren = false; if ($id == 0) { $query = "INSERT INTO #__sportsmanager_bestenliste (bezeichnung, saison_id, erster_tag " . ($letzter_tag != null ? ", letzter_tag" : "") . " , tabellenwertung, typ, status, reihenfolge, kategorie) VALUES ('$bezeichnung', '$saison_id', '$erster_tag', " . ($letzter_tag != null ? "'$letzter_tag', " : "") . "'$tabellenwertung', '$typ', '$status', '$reihenfolge', '$kategorie');"; } else { $query = "SELECT * FROM #__sportsmanager_bestenliste WHERE bestenliste_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $spielerstatistik = $rows[0]; $query = "UPDATE #__sportsmanager_bestenliste" . "\n SET bezeichnung = '$bezeichnung'," . "\n saison_id = '$saison_id'," . "\n erster_tag = '$erster_tag'," . "\n letzter_tag = " . ($letzter_tag != null ? "'$letzter_tag'," : "NULL,") . "\n tabellenwertung = '$tabellenwertung'," . "\n typ = '$typ'," . "\n status = '$status'," . "\n reihenfolge = '$reihenfolge'," . "\n kategorie = '$kategorie'" . "\n WHERE bestenliste_id = $id"; if ($spielerstatistik->tabellenwertung != $tabellenwertung || $spielerstatistik->typ != $typ) $spielerstatistik_aktualisieren = true; } $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } if ($id == 0) $id = $db->insertid(); if ($spielerstatistik_aktualisieren) spielerstatistikAktualisieren($id); redirectSportsManagerURL('&task=admin_uebersicht'); } #[NoReturn] function adminRemoveSpielerstatistik(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("spielerstatistiken_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $query = "DELETE FROM #__sportsmanager_bestenliste_punkte WHERE bestenliste_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_bestenliste_veranstaltung WHERE bestenliste_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_bestenliste_individualwettbewerb WHERE bestenliste_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_bestenliste WHERE bestenliste_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } redirectSportsManagerURL('&task=admin_uebersicht'); } #[NoReturn] function adminKopierenSpielerstatistik(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("spielerstatistiken_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $query = "SELECT * FROM #__sportsmanager_bestenliste WHERE bestenliste_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $spielerstatistik = $rows[0]; $query = "INSERT INTO #__sportsmanager_bestenliste (saison_id, bezeichnung, tabellenwertung, typ, erster_tag, letzter_tag, status, reihenfolge, kategorie)" . "\n VALUES ('$spielerstatistik->saison_id', '" . $db->escape($spielerstatistik->bezeichnung . " (Kopie)") . "', '$spielerstatistik->tabellenwertung', '$spielerstatistik->typ', '" . $db->escape($spielerstatistik->erster_tag) . "', '" . $db->escape($spielerstatistik->letzter_tag) . "', '0', '" . $db->escape($spielerstatistik->reihenfolge) . "', '" . $db->escape($spielerstatistik->kategorie) . "');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $ziel_spielerstatistik_id = $db->insertid(); $query = "SELECT * FROM #__sportsmanager_bestenliste_veranstaltung WHERE bestenliste_id = $id"; $rows = loadObjectList($db, $query); foreach ($rows as $row) { $query = "INSERT INTO #__sportsmanager_bestenliste_veranstaltung (bestenliste_id, veranstaltung_id)" . "\n VALUES ($ziel_spielerstatistik_id, $row->veranstaltung_id);"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } $query = "SELECT * FROM #__sportsmanager_bestenliste_individualwettbewerb WHERE bestenliste_id = $id"; $rows = loadObjectList($db, $query); foreach ($rows as $row) { $query = "INSERT INTO #__sportsmanager_bestenliste_individualwettbewerb (bestenliste_id, individualwettbewerb_id)" . "\n VALUES ($ziel_spielerstatistik_id, $row->individualwettbewerb_id);"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } spielerstatistikAktualisieren($ziel_spielerstatistik_id); redirectSportsManagerURL('&task=admin_uebersicht'); } function adminSpielerstatistikVeranstaltungen(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("spielerstatistiken_aendern")) keinZugriff(true); $spielerstatistik_id = $jInput->get('spielerstatistik_id', 0, 'INT'); if ($spielerstatistik_id == 0) die ("Wrong id!"); $query = "SELECT * FROM #__sportsmanager_bestenliste WHERE bestenliste_id = $spielerstatistik_id"; $spielerstatistiken = loadObjectList($db, $query); if (count($spielerstatistiken) < 1) die ("Wrong id"); $spielerstatistik = $spielerstatistiken[0]; $query = "SELECT #__sportsmanager_bestenliste_veranstaltung.*, bezeichnung, erster_tag, letzter_tag, saisonbezeichnung" . "\n FROM #__sportsmanager_bestenliste_veranstaltung" . "\n LEFT JOIN #__sportsmanager_veranstaltung USING (veranstaltung_id)" . "\n LEFT JOIN #__sportsmanager_saison ON #__sportsmanager_saison.saison_id = #__sportsmanager_veranstaltung.saison_id" . "\n WHERE bestenliste_id = $spielerstatistik_id" . "\n ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; $veranstaltungen = loadObjectList($db, $query); $query = "SELECT #__sportsmanager_bestenliste_individualwettbewerb.*, bezeichnung, saisonbezeichnung" . "\n FROM #__sportsmanager_bestenliste_individualwettbewerb" . "\n LEFT JOIN #__sportsmanager_individualwettbewerb USING (individualwettbewerb_id)" . "\n LEFT JOIN #__sportsmanager_saison ON #__sportsmanager_saison.saison_id = #__sportsmanager_individualwettbewerb.saison_id" . "\n WHERE bestenliste_id = $spielerstatistik_id" . "\n ORDER BY saisonbezeichnung, reihenfolge, bezeichnung, kategorie"; $individualwettbewerbe = loadObjectList($db, $query); HTML_sportsmanager_admin::adminSpielerstatistikVeranstaltungen($spielerstatistik, $veranstaltungen, $individualwettbewerbe); } function adminEditSpielerstatistikVeranstaltung(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("spielerstatistiken_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $spielerstatistik_id = $jInput->get('spielerstatistik_id', 0, 'INT'); if ($id == 0) $spielerstatistikVeranstaltung = null; else { $query = "SELECT * FROM #__sportsmanager_bestenliste_veranstaltung WHERE bestenliste_veranstaltung_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $spielerstatistikVeranstaltung = $rows[0]; } $query = "SELECT * FROM #__sportsmanager_bestenliste WHERE bestenliste_id = $spielerstatistik_id"; $spielerstatistiken = loadObjectList($db, $query); if (count($spielerstatistiken) < 1) die ("Wrong id"); $spielerstatistik = $spielerstatistiken[0]; $query = "SELECT * FROM #__sportsmanager_veranstaltung"; if ($spielerstatistik->erster_tag != null) $query .= "\n WHERE (ISNULL(erster_tag) OR DATEDIFF(erster_tag, '$spielerstatistik->erster_tag') >= -1096" . ($spielerstatistikVeranstaltung != null ? " OR $spielerstatistikVeranstaltung->veranstaltung_id = veranstaltung_id" : "") . ")"; if ($spielerstatistik->letzter_tag != null) $query .= ($spielerstatistik->erster_tag != null ? " AND" : "\n WHERE") . " (ISNULL(erster_tag) OR DATEDIFF('$spielerstatistik->letzter_tag', letzter_Tag) >= -366" . ($spielerstatistikVeranstaltung != null ? " OR $spielerstatistikVeranstaltung->veranstaltung_id = veranstaltung_id" : "") . ")"; $query .= "\n ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; $veranstaltungen = loadObjectList($db, $query); HTML_sportsmanager_admin::adminEditSpielerstatistikVeranstaltung($spielerstatistik, $spielerstatistikVeranstaltung, $veranstaltungen); } #[NoReturn] function adminSaveSpielerstatistikVeranstaltung(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("spielerstatistiken_aendern")) keinZugriff(); $id = $jInput->get('id', 0, 'INT'); $spielerstatistik_id = $jInput->get('spielerstatistik_id', 0, 'INT'); $veranstaltung_id = $jInput->get('veranstaltung_id', 0, 'INT'); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_spielerstatistik_veranstaltungen&spielerstatistik_id=' . $spielerstatistik_id); } $query = ($id == 0 ? "INSERT" : "UPDATE") . " #__sportsmanager_bestenliste_veranstaltung" . "\n SET bestenliste_id = '$spielerstatistik_id'," . "\n veranstaltung_id = '$veranstaltung_id'"; if ($id != 0) $query .= "\n WHERE bestenliste_veranstaltung_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } spielerstatistikAktualisieren($spielerstatistik_id); redirectSportsManagerURL('&task=admin_spielerstatistik_veranstaltungen&spielerstatistik_id=' . $spielerstatistik_id); } #[NoReturn] function adminRemoveSpielerstatistikVeranstaltung(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("spielerstatistiken_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $spielerstatistik_id = $jInput->get('spielerstatistik_id', 0, 'INT'); $query = "DELETE FROM #__sportsmanager_bestenliste_veranstaltung WHERE bestenliste_veranstaltung_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } spielerstatistikAktualisieren($spielerstatistik_id); redirectSportsManagerURL('&task=admin_spielerstatistik_veranstaltungen&spielerstatistik_id=' . $spielerstatistik_id); } function adminEditSpielerstatistikIndividualwettbewerb(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("spielerstatistiken_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $spielerstatistik_id = $jInput->get('spielerstatistik_id', 0, 'INT'); if ($id == 0) $spielerstatistikIndividualwettbewerb = null; else { $query = "SELECT * FROM #__sportsmanager_bestenliste_individualwettbewerb WHERE bestenliste_individualwettbewerb_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $spielerstatistikIndividualwettbewerb = $rows[0]; } $query = "SELECT * FROM #__sportsmanager_bestenliste WHERE bestenliste_id = $spielerstatistik_id"; $spielerstatistiken = loadObjectList($db, $query); if (count($spielerstatistiken) < 1) die ("Wrong id"); $spielerstatistik = $spielerstatistiken[0]; $query = "SELECT * FROM #__sportsmanager_individualwettbewerb" . "\n LEFT JOIN #__sportsmanager_saison USING (saison_id)" . "\n ORDER BY saisonbezeichnung DESC, reihenfolge, bezeichnung, kategorie"; $individualwettbewerbe = loadObjectList($db, $query); HTML_sportsmanager_admin::adminEditSpielerstatistikIndividualwettbewerb($spielerstatistik, $spielerstatistikIndividualwettbewerb, $individualwettbewerbe); } #[NoReturn] function adminSaveSpielerstatistikIndividualwettbewerb(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("spielerstatistiken_aendern")) keinZugriff(); $id = $jInput->get('id', 0, 'INT'); $spielerstatistik_id = $jInput->get('spielerstatistik_id', 0, 'INT'); $individualwettbewerb_id = $jInput->get('individualwettbewerb_id', 0, 'INT'); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_spielerstatistik_veranstaltungen&spielerstatistik_id=' . $spielerstatistik_id); } $query = ($id == 0 ? "INSERT" : "UPDATE") . " #__sportsmanager_bestenliste_individualwettbewerb" . "\n SET bestenliste_id = '$spielerstatistik_id'," . "\n individualwettbewerb_id = '$individualwettbewerb_id'"; if ($id != 0) $query .= "\n WHERE bestenliste_individualwettbewerb_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } spielerstatistikAktualisieren($spielerstatistik_id); redirectSportsManagerURL('&task=admin_spielerstatistik_veranstaltungen&spielerstatistik_id=' . $spielerstatistik_id); } #[NoReturn] function adminRemoveSpielerstatistikIndividualwettbewerb(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("spielerstatistiken_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $spielerstatistik_id = $jInput->get('spielerstatistik_id', 0, 'INT'); $query = "DELETE FROM #__sportsmanager_bestenliste_individualwettbewerb WHERE bestenliste_individualwettbewerb_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } spielerstatistikAktualisieren($spielerstatistik_id); redirectSportsManagerURL('&task=admin_spielerstatistik_veranstaltungen&spielerstatistik_id=' . $spielerstatistik_id); } #[NoReturn] function adminSpielerstatistikVeranstaltungenEntfernen(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("spielerstatistiken_aendern")) keinZugriff(true); $spielerstatistik_id = $jInput->get('spielerstatistik_id', 0, 'INT'); $query = "DELETE FROM #__sportsmanager_bestenliste_veranstaltung WHERE bestenliste_id = $spielerstatistik_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_bestenliste_individualwettbewerb WHERE bestenliste_id = $spielerstatistik_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } spielerstatistikAktualisieren($spielerstatistik_id); redirectSportsManagerURL('&task=admin_spielerstatistik_veranstaltungen&spielerstatistik_id=' . $spielerstatistik_id); } function adminModeratoren(): void { $db = getDatabase(); if (!benutzerZugriff("moderatoren_aendern")) keinZugriff(true); $query = "SELECT t1.moderator_id, t1.moderator_user_id, t2.name, t2.username, (SELECT COUNT(*) FROM #__sportsmanager_moderator_zugriff WHERE #__sportsmanager_moderator_zugriff.moderator_id = t1.moderator_id) AS zugriffe FROM #__sportsmanager_moderator as t1 LEFT JOIN #__users AS t2 ON t1.moderator_user_id=t2.id ORDER BY name, username"; $rows = loadObjectList($db, $query); HTML_sportsmanager_admin::adminModeratoren($rows); } function adminEditModerator(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("moderatoren_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $row = null; if ($id != 0) { $query = "SELECT * FROM #__sportsmanager_moderator WHERE moderator_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $row = $rows[0]; } if (empty($id)) { $zugriffe = null; } else { $query = "SELECT * FROM #__sportsmanager_moderator_zugriff WHERE moderator_id = $id"; $zugriffe = loadObjectList($db, $query); } $query = "SELECT * FROM #__users ORDER BY name, username"; $users = loadObjectList($db, $query); HTML_sportsmanager_admin::adminEditModerator($row, $zugriffe, $users); } #[NoReturn] function adminSaveModerator(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("moderatoren_aendern")) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_moderatoren'); } $id = $jInput->get('id', 0, 'INT'); $userid = $jInput->get('userid', 0, 'INT'); $zugriffe = $jInput->get('zugriffe', array(), 'ARRAY'); if ($id == 0) { $query = "INSERT INTO #__sportsmanager_moderator (moderator_user_id)" . "\n VALUES ('$userid');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $id = $db->insertid(); } else { $query = "UPDATE #__sportsmanager_moderator" . "\n SET moderator_user_id = '$userid'" . "\n WHERE moderator_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } $query = "SELECT * FROM #__sportsmanager_moderator_zugriff WHERE moderator_id = $id"; $alte_zugriffe = loadObjectList($db, $query); foreach ($alte_zugriffe as $alter_zugriff) { if (!in_array($alter_zugriff->zugriff, $zugriffe)) { $alter_zugriff_id = $alter_zugriff->moderator_zugriff_id; $query = "DELETE FROM #__sportsmanager_moderator_zugriff WHERE moderator_zugriff_id = $alter_zugriff_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } else { $index = array_search($alter_zugriff->zugriff, $zugriffe); if ($index !== false) { unset($zugriffe[$index]); } } } foreach ($zugriffe as $zugriff) { $query = "INSERT #__sportsmanager_moderator_zugriff" . "\n SET moderator_id = '$id'," . "\n zugriff = '$zugriff'," . "\n zusatz = ''"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } redirectSportsManagerURL('&task=admin_moderatoren'); } #[NoReturn] function adminRemoveModerator(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("moderatoren_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $query = "DELETE FROM #__sportsmanager_moderator WHERE moderator_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_moderator_zugriff WHERE moderator_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } redirectSportsManagerURL('&task=admin_moderatoren'); } function adminVeranstalter(): void { $db = getDatabase(); if (!benutzerZugriff("organisationen_aendern")) keinZugriff(true); $query = "SELECT *," . "\n (SELECT COUNT(*) FROM #__sportsmanager_veranstaltung WHERE #__sportsmanager_veranstalter.veranstalter_id = #__sportsmanager_veranstaltung.veranstalter_id) AS veranstaltungen," . "\n (SELECT COUNT(*) FROM #__sportsmanager_verein WHERE #__sportsmanager_veranstalter.veranstalter_id = #__sportsmanager_verein.veranstalter_id) AS vereine," . "\n (SELECT COUNT(*) FROM #__sportsmanager_turnier WHERE #__sportsmanager_veranstalter.veranstalter_id = #__sportsmanager_turnier.veranstalter_id) AS turniere," . "\n (SELECT COUNT(*) FROM #__sportsmanager_individualwettbewerb WHERE #__sportsmanager_veranstalter.veranstalter_id = #__sportsmanager_individualwettbewerb.veranstalter_id) AS individualwettbewerbe" . "\n FROM #__sportsmanager_veranstalter" . "\n ORDER BY veranstalterbezeichnung"; $rows = loadObjectList($db, $query); HTML_sportsmanager_admin::adminVeranstalter($rows); } function adminEditVeranstalter(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("organisationen_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $row = null; if ($id == 0) { $berechtigt_fuer_veranstalter = array(); } else { $query = "SELECT * FROM #__sportsmanager_veranstalter WHERE veranstalter_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) == 1) $row = $rows[0]; $query = "SELECT #__sportsmanager_berechtigt_fuer_veranstalter.* FROM #__sportsmanager_berechtigt_fuer_veranstalter, #__users WHERE berechtigt_user_id = id AND berechtigt_veranstalter_id = $id ORDER BY username, name"; $berechtigt_fuer_veranstalter = loadObjectList($db, $query); } $query = "SELECT * FROM #__users ORDER BY name, username"; $users = loadObjectList($db, $query); $query = "SELECT nummer, bezeichnung FROM #__sportsmanager_kategorie WHERE typ = 1 ORDER BY nummer"; $rows_kategorien = loadObjectList($db, $query); $kategorien = array(); foreach ($rows_kategorien as $kategorie) $kategorien[$kategorie->nummer] = $kategorie->bezeichnung; HTML_sportsmanager_admin::adminEditVeranstalter($row, $berechtigt_fuer_veranstalter, $users, $kategorien); } #[NoReturn] function adminSaveVeranstalter(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("organisationen_aendern")) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_veranstalter'); } $id = $jInput->get('id', 0, 'INT'); $bezeichnung = $db->escape(trim($jInput->get('bezeichnung', '', 'RAW'))); $kuerzel = $db->escape(trim($jInput->get('kuerzel', '', 'RAW'))); $kategorie = $jInput->get('kategorie', 0, 'INT'); $berechtigt_fuer_veranstalter_user_ids = array($jInput->get('berechtigt_fuer_veranstalter_user_1_id', 0, 'INT'), $jInput->get('berechtigt_fuer_veranstalter_user_2_id', 0, 'INT'), $jInput->get('berechtigt_fuer_veranstalter_user_3_id', 0, 'INT'), $jInput->get('berechtigt_fuer_veranstalter_user_4_id', 0, 'INT'), $jInput->get('berechtigt_fuer_veranstalter_user_5_id', 0, 'INT'), $jInput->get('berechtigt_fuer_veranstalter_user_6_id', 0, 'INT')); if ($id == 0) $query = "INSERT INTO #__sportsmanager_veranstalter (veranstalterbezeichnung, veranstalterkuerzel, kategorie) VALUES ('$bezeichnung', '$kuerzel', '$kategorie');"; else { $query = "UPDATE #__sportsmanager_veranstalter" . "\n SET veranstalterbezeichnung = '$bezeichnung'," . "\n veranstalterkuerzel = '$kuerzel'," . "\n kategorie = '$kategorie'" . "\n WHERE veranstalter_id = $id"; } $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } if ($id == 0) $id = $db->insertid(); $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_veranstalter WHERE berechtigt_veranstalter_id = $id AND berechtigt_user_id != $berechtigt_fuer_veranstalter_user_ids[0] AND berechtigt_user_id != $berechtigt_fuer_veranstalter_user_ids[1] AND berechtigt_user_id != $berechtigt_fuer_veranstalter_user_ids[2] AND berechtigt_user_id != $berechtigt_fuer_veranstalter_user_ids[3] AND berechtigt_user_id != $berechtigt_fuer_veranstalter_user_ids[4] AND berechtigt_user_id != $berechtigt_fuer_veranstalter_user_ids[5];"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_veranstalter WHERE berechtigt_veranstalter_id = $id"; $rows = loadObjectList($db, $query); for ($nummer = 0; $nummer <= 5; $nummer++) { $berechtigt_user_id = $berechtigt_fuer_veranstalter_user_ids[$nummer]; if ($berechtigt_user_id != 0) { $gefunden = false; foreach ($rows as $row) { if ($row->berechtigt_user_id == $berechtigt_user_id) $gefunden = true; } if (!$gefunden) { $query = "INSERT INTO #__sportsmanager_berechtigt_fuer_veranstalter (berechtigt_user_id, berechtigt_veranstalter_id) VALUES ('$berechtigt_user_id', '$id');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } } redirectSportsManagerURL('&task=admin_veranstalter'); } #[NoReturn] function adminRemoveVeranstalter(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("organisationen_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstalter_id = $id), 1, 0)"; $n = loadResult($db, $query); if ($n > 0) die(Text::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_verein WHERE veranstalter_id = $id), 1, 0)"; $n = loadResult($db, $query); if ($n > 0) die(Text::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_turnier WHERE veranstalter_id = $id), 1, 0)"; $n = loadResult($db, $query); if ($n > 0) die(Text::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb WHERE veranstalter_id = $id), 1, 0)"; $n = loadResult($db, $query); if ($n > 0) die(Text::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); $query = "UPDATE #__sportsmanager_rechnung SET veranstalter_id = NULL WHERE veranstalter_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_veranstalter WHERE berechtigt_veranstalter_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_veranstalter WHERE veranstalter_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } redirectSportsManagerURL('&task=admin_veranstalter'); } function adminSaisons(): void { $db = getDatabase(); if (!benutzerZugriff("saisons_aendern")) keinZugriff(true); $query = "SELECT *," . "\n IF(EXISTS(SELECT * FROM #__sportsmanager_veranstaltung WHERE #__sportsmanager_veranstaltung.saison_id = #__sportsmanager_saison.saison_id), 1, 0) AS veranstaltungen," . "\n IF(EXISTS(SELECT * FROM #__sportsmanager_turnier WHERE #__sportsmanager_turnier.saison_id = #__sportsmanager_saison.saison_id), 1, 0) AS turniere," . "\n IF(EXISTS(SELECT * FROM #__sportsmanager_rangliste WHERE #__sportsmanager_rangliste.saison_id = #__sportsmanager_saison.saison_id), 1, 0) AS ranglisten," . "\n IF(EXISTS(SELECT * FROM #__sportsmanager_bestenliste WHERE #__sportsmanager_bestenliste.saison_id = #__sportsmanager_saison.saison_id), 1, 0) AS bestenlisten" . "\n FROM #__sportsmanager_saison" . "\n ORDER BY saisonbezeichnung DESC"; $rows = loadObjectList($db, $query); HTML_sportsmanager_admin::adminSaisons($rows); } function adminEditSaison(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("saisons_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); if ($id == 0) $row = null; else { $query = "SELECT * FROM #__sportsmanager_saison WHERE saison_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $row = $rows[0]; } HTML_sportsmanager_admin::adminEditSaison($row); } #[NoReturn] function adminSaveSaison(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("saisons_aendern")) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_saisons'); } $id = $jInput->get('id', 0, 'INT'); $saisonbezeichnung = $db->escape(trim($jInput->get('saisonbezeichnung', '', 'RAW'))); if ($id == 0) $query = "INSERT INTO #__sportsmanager_saison (saisonbezeichnung) VALUES ('$saisonbezeichnung');"; else { $query = "UPDATE #__sportsmanager_saison" . "\n SET saisonbezeichnung = '$saisonbezeichnung'" . "\n WHERE saison_id = $id"; } $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } redirectSportsManagerURL('&task=admin_saisons'); } #[NoReturn] function adminRemoveSaison(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("saisons_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $query = "SELECT *," . "\n IF(EXISTS(SELECT * FROM #__sportsmanager_veranstaltung WHERE #__sportsmanager_veranstaltung.saison_id = #__sportsmanager_saison.saison_id), 1, 0) AS veranstaltungen," . "\n IF(EXISTS(SELECT * FROM #__sportsmanager_turnier WHERE #__sportsmanager_turnier.saison_id = #__sportsmanager_saison.saison_id), 1, 0) AS turniere," . "\n IF(EXISTS(SELECT * FROM #__sportsmanager_rangliste WHERE #__sportsmanager_rangliste.saison_id = #__sportsmanager_saison.saison_id), 1, 0) AS ranglisten," . "\n IF(EXISTS(SELECT * FROM #__sportsmanager_bestenliste WHERE #__sportsmanager_bestenliste.saison_id = #__sportsmanager_saison.saison_id), 1, 0) AS bestenlisten" . "\n FROM #__sportsmanager_saison" . "\n WHERE saison_id = $id"; $rows = loadObjectList($db, $query); $row = $rows[0]; if ($row->veranstaltungen != 0 || $row->turniere != 0 || $row->ranglisten != 0 || $row->bestenlisten != 0) die(Text::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); $query = "DELETE FROM #__sportsmanager_saison WHERE saison_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } redirectSportsManagerURL('&task=admin_saisons'); } function adminEditVeranstaltung(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $id = $jInput->get('id', 0, 'INT'); if (!benutzerZugriff("mannschaftswettbewerb_aendern")) keinZugriff(true); if ($id == 0) $row = null; else { $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $row = $rows[0]; } $vorlage = $jInput->get('vorlage', 0, 'INT'); $query = "SELECT * FROM #__sportsmanager_veranstalter ORDER BY veranstalterbezeichnung"; $veranstalter = loadObjectList($db, $query); $query = "SELECT * FROM #__sportsmanager_teamspiel_modus WHERE status != 0 " . ($id != 0 ? "OR teamspiel_modus_id = $row->modus_id " : "") . "ORDER BY bezeichnung"; $spielmodi = loadObjectList($db, $query); $query = "SELECT * FROM #__sportsmanager_verschieberegel ORDER BY bezeichnung"; // WHERE status != 0 " . ($id != 0 ? "OR teamspiel_modus_id = $row->modus_id " : "") . "ORDER BY bezeichnung"; $verschieberegeln = loadObjectList($db, $query); $query = "SELECT nummer, bezeichnung FROM #__sportsmanager_kategorie WHERE typ = 2 ORDER BY nummer"; $rows_kategorien = loadObjectList($db, $query); $kategorien = array(); foreach ($rows_kategorien as $kategorie) $kategorien[$kategorie->nummer] = $kategorie->bezeichnung; $query = "SELECT * FROM #__sportsmanager_saison ORDER BY saisonbezeichnung DESC"; $saisons = loadObjectList($db, $query); if (empty($id)) { $berechtigt_fuer_veranstaltung = array(); } else { $query = "SELECT #__sportsmanager_berechtigt_fuer_veranstaltung.* FROM #__sportsmanager_berechtigt_fuer_veranstaltung, #__users WHERE berechtigt_user_id = id AND berechtigt_veranstaltung_id = $id ORDER BY username, name"; $berechtigt_fuer_veranstaltung = loadObjectList($db, $query); } $query = "SELECT * FROM #__users ORDER BY name, username"; $users = loadObjectList($db, $query); HTML_sportsmanager_admin::adminEditVeranstaltung($row, $veranstalter, $spielmodi, $verschieberegeln, $kategorien, $saisons, $users, $berechtigt_fuer_veranstaltung, $vorlage); } #[NoReturn] function adminSaveVeranstaltung(): void { $db = getDatabase(); global $_FILES; global $sportsmanager_joomla_path; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("mannschaftswettbewerb_aendern")) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_uebersicht'); } $vorlage = $jInput->get('vorlage', 0, 'INT'); $id = $vorlage ? 0 : $jInput->get('id', 0, 'INT'); $veranstalterId = $jInput->get('veranstalterid', 0, 'INT'); $bezeichnung = $db->escape(trim($jInput->get('bezeichnung', '', 'RAW'))); $saison_id = $jInput->get('saison_id', 0, 'INT'); $erster_tag = normalisiertesDatum(sprintf("%04d-%02d-%02d", $jInput->get('erster_tag_jahr', 2000, 'INT'), $jInput->get('erster_tag_monat', 1, 'INT'), $jInput->get('erster_tag_tag', 1, 'INT'))); $letzter_tag = normalisiertesDatum(sprintf("%04d-%02d-%02d", $jInput->get('letzter_tag_jahr', 2000, 'INT'), $jInput->get('letzter_tag_monat', 1, 'INT'), $jInput->get('letzter_tag_tag', 1, 'INT'))); $modus_id = $jInput->get('modus_id', 0, 'INT'); $verschieberegel_id = $jInput->get('verschieberegel_id', 0, 'INT'); $tabellenwertung = $jInput->get('tabellenwertung', 0, 'INT'); $direktervergleich = $jInput->get('direktervergleich', 0, 'INT'); $unterteilung = $jInput->get('unterteilung', 0, 'INT'); $spieltag_titel_zeigen = $jInput->get('spieltag_titel_zeigen', 0, 'INT'); $elo_wertung = $jInput->get('elo_wertung', 0, 'INT'); $logo_url = $db->escape(trim($jInput->get('logo_url', '', 'RAW'))); $ticker_logo_url = $db->escape(trim($jInput->get('ticker_logo_url', '', 'RAW'))); $status = $jInput->get('status', 0, 'INT'); $reihenfolge = $jInput->get('reihenfolge', 0, 'INT'); $kategorie = $jInput->get('kategorie', 0, 'INT'); $bildbeibehalten_ticker_logo = $jInput->get('bildbeibehalten_ticker_logo', 0, 'INT'); $aktualisieren_ab_datum = $erster_tag; $berechtigt_fuer_veranstaltung_user_ids = array(); for ($i = 1; $i <= 6; $i++) { $berechtigt_user_id = $jInput->get('berechtigt_fuer_veranstaltung_user_' . $i . '_id', 0, 'INT'); if (!empty($berechtigt_user_id) && !in_array($berechtigt_user_id, $berechtigt_fuer_veranstaltung_user_ids)) $berechtigt_fuer_veranstaltung_user_ids[] = $berechtigt_user_id; } $elo_aktualisieren = false; $spielerstatistik_aktualisieren = false; if ($id == 0) { $query = "INSERT INTO #__sportsmanager_veranstaltung (veranstalter_id, saison_id, bezeichnung, erster_tag " . ($letzter_tag != null ? ", letzter_tag" : "") . ", modus_id, verschieberegel_id, tabellenwertung, direktervergleich, unterteilung, spieltag_titel_zeigen, elo_wertung, logo_url, ticker_logo_url, status, reihenfolge, kategorie) VALUES ('$veranstalterId', '$saison_id', '$bezeichnung', '$erster_tag', " . ($letzter_tag != null ? "'$letzter_tag', " : "") . "'$modus_id', '$verschieberegel_id', '$tabellenwertung', '$direktervergleich', '$unterteilung', '$spieltag_titel_zeigen', '$elo_wertung', '$logo_url', '$ticker_logo_url', '$status', '$reihenfolge', '$kategorie');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $id = $db->insertid(); } else { $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) { redirectSportsManagerURL('&task=admin_uebersicht', "Die Veranstaltung existiert nicht mehr!"); } $row = $rows[0]; $query = "UPDATE #__sportsmanager_veranstaltung" . "\n SET veranstalter_id = '$veranstalterId'," . "\n bezeichnung = '$bezeichnung'," . "\n saison_id = '$saison_id'," . "\n erster_tag = '$erster_tag'," . "\n letzter_tag = " . ($letzter_tag != null ? "'$letzter_tag'," : "NULL,") . "\n modus_id = '$modus_id'," . "\n verschieberegel_id = '$verschieberegel_id'," . "\n tabellenwertung = '$tabellenwertung'," . "\n direktervergleich = '$direktervergleich'," . "\n unterteilung = '$unterteilung'," . "\n spieltag_titel_zeigen = '$spieltag_titel_zeigen'," . "\n elo_wertung = '$elo_wertung'," . "\n logo_url = '$logo_url'," . "\n ticker_logo_url = '$ticker_logo_url'," . "\n status = '$status'," . "\n reihenfolge = '$reihenfolge'," . "\n kategorie = '$kategorie'" . "\n WHERE veranstaltung_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } if (($elo_wertung != 0 && $status != 0) != ($row->elo_wertung != 0 && $row->status != 0)) $elo_aktualisieren = true; if ((($modus_id != 0 || $row->modus_id != 0) && $status != $row->status) || (($status != 0 || $row->status != 0) && $modus_id != $row->modus_id)) $spielerstatistik_aktualisieren = true; } $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_veranstaltung WHERE berechtigt_veranstaltung_id = $id"; if (!empty($berechtigt_fuer_veranstaltung_user_ids)) $query .= " AND berechtigt_user_id NOT IN (" . implode(", ", $berechtigt_fuer_veranstaltung_user_ids) . ")"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_veranstaltung WHERE berechtigt_veranstaltung_id = $id"; $rows = loadObjectList($db, $query); foreach ($rows as $row) { $index = array_search($row->berechtigt_user_id, $berechtigt_fuer_veranstaltung_user_ids); if ($index !== false) { unset($berechtigt_fuer_veranstaltung_user_ids[$index]); } } foreach ($berechtigt_fuer_veranstaltung_user_ids as $berechtigt_user_id) { $query = "INSERT INTO #__sportsmanager_berechtigt_fuer_veranstaltung (berechtigt_user_id, berechtigt_veranstaltung_id) VALUES ('$berechtigt_user_id', '$id');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } if ($elo_aktualisieren) { eloAktualisieren($aktualisieren_ab_datum); einstufungAktualisieren(); } teamstatistikAktualisieren($id); if ($spielerstatistik_aktualisieren) { begegnungenAktualisieren($id); spielerstatistikAktualisieren(0, $id); } if ($bildbeibehalten_ticker_logo == 0) { bildLoeschen("mannschaftswettbewerbe/ticker_logo", $id); if (!empty($_FILES["bild_ticker_logo"]["tmp_name"])) { if (is_uploaded_file($_FILES["bild_ticker_logo"]["tmp_name"])) { $size = getimagesize($_FILES["bild_ticker_logo"]["tmp_name"]); if (!$size || ($size[2] != IMAGETYPE_JPEG && $size[2] != IMAGETYPE_PNG) || ($size[0] > 8192 || $size[1] > 8192)) { redirectSportsManagerURL('&task=admin_ubersicht', "Das Bild wurde nicht gespeichert, da es nicht im JPG/PNG-Format mit maximal 8192*8192 Bildpunkten vorliegt."); } $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'mannschaftswettbewerbe'; if (!File::copy($_FILES["bild_ticker_logo"]["tmp_name"], $bilder_pfad . DIRECTORY_SEPARATOR . 'ticker_logo' . $id . ($size[2] == IMAGETYPE_PNG ? '.png' : '.jpg'))) { redirectSportsManagerURL('&task=admin_uebersicht', "Das Bild konnte nicht an die Zielposition kopiert werden."); } } } } redirectSportsManagerURL('&task=admin_uebersicht'); } #[NoReturn] function adminRemoveVeranstaltung(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("mannschaftswettbewerb_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_team WHERE veranstaltung_id = $id), 1, 0)"; $n = loadResult($db, $query); if ($n > 0) die(Text::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); $query = "DELETE FROM #__sportsmanager_bestenliste_veranstaltung WHERE veranstaltung_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_veranstaltung WHERE berechtigt_veranstaltung_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } spielerstatistikAktualisieren(0, $id); bildLoeschen("mannschaftswettbewerbe/logo", $id); bildLoeschen("mannschaftswettbewerbe/ticker_logo", $id); redirectSportsManagerURL('&task=admin_uebersicht'); } function adminMannschaften(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(true); $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $veranstaltung = $rows[0]; $query = "SELECT #__sportsmanager_team.*, #__sportsmanager_verein.vereinsname, #__sportsmanager_spielort.*," . "\n (SELECT COUNT(*) FROM #__sportsmanager_mitglied_von_team WHERE #__sportsmanager_team.team_id = #__sportsmanager_mitglied_von_team.team_id AND NOT ausgetreten) AS mitglieder_aktiv," . "\n (SELECT COUNT(*) FROM #__sportsmanager_mitglied_von_team WHERE #__sportsmanager_team.team_id = #__sportsmanager_mitglied_von_team.team_id) AS mitglieder," . "\n (SELECT COUNT(*) FROM #__sportsmanager_begegnung WHERE heim_team_id = #__sportsmanager_team.team_id OR gast_team_id = #__sportsmanager_team.team_id) AS begegnungen," . "\n (SELECT COUNT(team_id) FROM #__sportsmanager_begegnung_historie" . "\n WHERE begegnung_historie_id IN (" . "\n SELECT MIN(begegnung_historie_id) AS historie_id FROM #__sportsmanager_begegnung_historie " . "\n WHERE aktion IN (0, 3) AND team_id in " . "\n (SELECT team_id FROM #__sportsmanager_team WHERE veranstaltung_id = $veranstaltungId)" . "\n GROUP BY begegnung_id" . "\n )" . "\n AND team_id = #__sportsmanager_team.team_id" . "\n ) AS anzahl_verschiebungen" . "\n FROM #__sportsmanager_team" . "\n LEFT JOIN #__sportsmanager_verein ON #__sportsmanager_verein.verein_id = #__sportsmanager_team.verein_id" . "\n LEFT JOIN #__sportsmanager_spielort ON #__sportsmanager_spielort.spielort_id = #__sportsmanager_team.heimspielort_id" . "\n WHERE #__sportsmanager_team.veranstaltung_id = $veranstaltungId" . "\n ORDER BY teamname"; $rows = loadObjectList($db, $query); HTML_sportsmanager_admin::adminMannschaften($veranstaltung, $rows); } function adminEditMannschaft(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $id = $jInput->get('id', 0, 'INT'); $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(true); $row = null; if ($id == 0) { $berechtigt_fuer_team = null; $teamansprechpartner = null; } else { $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) == 1) $row = $rows[0]; if ($veranstaltungId != $row->veranstaltung_id) die("Wrong id!"); $query = "SELECT t1.* FROM #__sportsmanager_berechtigt_fuer_team AS t1, #__users AS t2 WHERE t1.berechtigt_user_id = t2.id AND berechtigt_team_id = $id ORDER BY username, name"; $berechtigt_fuer_team = loadObjectList($db, $query); $query = "SELECT * FROM #__sportsmanager_teamansprechpartner WHERE team_id = $id ORDER BY kontaktperson_id"; $teamansprechpartner = loadObjectList($db, $query); } $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $veranstaltung = $rows[0]; $query = "SELECT verein_id, vereinsname, veranstalterbezeichnung, ausgetreten" . "\n FROM #__sportsmanager_verein" . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" . "\n WHERE NOT ausgetreten" . (!empty($row) && !empty($row->verein_id) ? " OR verein_id = $row->verein_id" : "") . "\n ORDER BY veranstalterbezeichnung, vereinsname"; $vereine = loadObjectList($db, $query); $query = "SELECT * FROM #__users ORDER BY name, username"; $users = loadObjectList($db, $query); $query = "SELECT *" . "\n FROM #__sportsmanager_spielort" . "\n ORDER BY ortsname, name, ortsteil"; $spielorte = loadObjectList($db, $query); $beschraenkter_zugriff_veranstaltungen = benutzerZugriff("mannschaftswettbewerb_aendern") ? 0 : 1; if ($beschraenkter_zugriff_veranstaltungen) { if (empty($id) || empty($row->teamgruppe_id)) { $query = "SELECT veranstaltung_id, bezeichnung, erster_tag, letzter_tag, saison_id, IF(" . veranstaltungFilter("veranstaltung_id IN") . ", 1, 0) AS veranstaltung_moderator" . "\n FROM #__sportsmanager_veranstaltung" . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" . "\n WHERE veranstaltung_id != $veranstaltung->veranstaltung_id AND saison_id = $veranstaltung->saison_id AND " . veranstaltungFilter("veranstaltung_id IN") . "\n ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; } else { $query = "SELECT DISTINCT veranstaltung_id, bezeichnung, erster_tag, letzter_tag, saison_id, team_id, team_begegnungen, IF(" . veranstaltungFilter("veranstaltung_id IN") . ", 1, 0) AS veranstaltung_moderator" . "\n FROM #__sportsmanager_veranstaltung" . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" . "\n LEFT JOIN (SELECT veranstaltung_id, team_id, IF(EXISTS(SELECT * FROM #__sportsmanager_begegnung WHERE heim_team_id = team_id OR gast_team_id = team_id), 1, 0) AS team_begegnungen FROM #__sportsmanager_team WHERE teamgruppe_id = $row->teamgruppe_id) AS veranstaltungen USING (veranstaltung_id)" . "\n WHERE veranstaltung_id != $veranstaltung->veranstaltung_id AND ((saison_id = $veranstaltung->saison_id AND " . veranstaltungFilter("veranstaltung_id IN") . ") OR NOT ISNULL(team_id))" . "\n ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; } } else { if (empty($id) || empty($row->teamgruppe_id)) { $query = "SELECT veranstaltung_id, bezeichnung, erster_tag, letzter_tag, saison_id" . "\n FROM #__sportsmanager_veranstaltung" . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" . "\n WHERE veranstaltung_id != $veranstaltung->veranstaltung_id AND saison_id = $veranstaltung->saison_id" . "\n ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; } else { $query = "SELECT DISTINCT veranstaltung_id, bezeichnung, erster_tag, letzter_tag, saison_id, team_id, team_begegnungen" . "\n FROM #__sportsmanager_veranstaltung" . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" . "\n LEFT JOIN (SELECT veranstaltung_id, team_id, IF(EXISTS(SELECT * FROM #__sportsmanager_begegnung WHERE heim_team_id = team_id OR gast_team_id = team_id), 1, 0) AS team_begegnungen FROM #__sportsmanager_team WHERE teamgruppe_id = $row->teamgruppe_id) AS veranstaltungen USING (veranstaltung_id)" . "\n WHERE veranstaltung_id != $veranstaltung->veranstaltung_id AND (saison_id = $veranstaltung->saison_id OR NOT ISNULL(team_id))" . "\n ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; } } $veranstaltungen = loadObjectList($db, $query); HTML_sportsmanager_admin::adminEditMannschaft($veranstaltung, $row, $veranstaltungen, $vereine, $users, $berechtigt_fuer_team, $teamansprechpartner, $spielorte, $beschraenkter_zugriff_veranstaltungen); } #[NoReturn] function adminSaveMannschaft(): void { $db = getDatabase(); global $_FILES; global $sportsmanager_joomla_path; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $id = $jInput->get('id', 0, 'INT'); $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_teams&veranstaltungid=' . $veranstaltungId); } $beschraenkter_zugriff_veranstaltungen = benutzerZugriff("mannschaftswettbewerb_aendern") ? 0 : 1; $beschraenkter_zugriff_veranstaltungen_ids = $beschraenkter_zugriff_veranstaltungen ? benutzerVeranstaltungIdsModerator() : null; $teamname = $db->escape(trim($jInput->get('teamname', '', 'RAW'))); $teamname_kurz = $db->escape(trim($jInput->get('teamname_kurz', '', 'RAW'))); $platz = $jInput->get('platz', 0, 'INT'); $verein_id = $jInput->get('verein_id', 0, 'INT'); $tischtyp = $db->escape(trim($jInput->get('tischtyp', '', 'RAW'))); $tischeigenschaften = $db->escape(trim($jInput->get('tischeigenschaften', '', 'RAW'))); $heimspiel_wochentag = $jInput->get('heimspiel_wochentag', 0, 'INT'); $heimspiel_uhrzeit = sprintf("%02d%02d", $jInput->get('heimspiel_uhrzeit_stunden', 0, 'INT'), $jInput->get('heimspiel_uhrzeit_minuten', 0, 'INT')); $heimspielort_id = $jInput->get('heimspielort_id', 0, 'INT'); $nichtraucherschutz = $jInput->get('nichtraucherschutz', 0, 'INT'); $zusatzpunkte = $jInput->get('zusatzpunkte', 0, 'FLOAT'); $bildbeibehalten = $jInput->get('bildbeibehalten', 0, 'INT'); $berechtigt_fuer_team_user_ids = array($jInput->get('berechtigt_fuer_team_user_1_id', 0, 'INT'), $jInput->get('berechtigt_fuer_team_user_2_id', 0, 'INT'), $jInput->get('berechtigt_fuer_team_user_3_id', 0, 'INT'), $jInput->get('berechtigt_fuer_team_user_4_id', 0, 'INT'), $jInput->get('berechtigt_fuer_team_user_5_id', 0, 'INT'), $jInput->get('berechtigt_fuer_team_user_6_id', 0, 'INT')); $pin = $db->escape(trim($jInput->get('pin', '', 'RAW'))); $weitere_veranstaltungen_anzahl = $jInput->get('weitere_veranstaltungen_anzahl', 0, 'INT'); $weitere_veranstaltungen_beruecksichtigt = array(); for ($i = 0; $i < $weitere_veranstaltungen_anzahl; $i++) { $weitere_veranstaltung_id = $jInput->get('weitere_veranstaltung_id_' . $i, 0, 'INT'); if ($weitere_veranstaltung_id != 0 && !in_array($weitere_veranstaltung_id, $weitere_veranstaltungen_beruecksichtigt)) $weitere_veranstaltungen_beruecksichtigt[] = $weitere_veranstaltung_id; } $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $veranstaltung = $rows[0]; if ($id == 0) { $query = "INSERT INTO #__sportsmanager_team (verein_id, veranstaltung_id, teamname, teamname_kurz, tischtyp, tischeigenschaften, heimspiel_wochentag, heimspiel_uhrzeit, heimspielort_id, nichtraucherschutz, zusatzpunkte" . ($veranstaltung->tabellenwertung == -2 ? ", platz" : "") . ", pin)" . "\n VALUES (" . ($verein_id != 0 ? "'$verein_id'" : "NULL") . ", '$veranstaltungId', '$teamname', '$teamname_kurz', '$tischtyp', '$tischeigenschaften', '$heimspiel_wochentag', '$heimspiel_uhrzeit', " . ($heimspielort_id != 0 ? "'$heimspielort_id'" : "NULL") . ", '$nichtraucherschutz', '$zusatzpunkte'" . ($veranstaltung->tabellenwertung == -2 ? ($platz != 0 ? ", '$platz'" : ", NULL") : "") . ", '$pin');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $id = $db->insertid(); $teamgruppe_id = $id; $team_alt = null; } else { $query = "SELECT * FROM #__sportsmanager_team" . "\n WHERE team_id = $id"; $teams = loadObjectList($db, $query); if (count($teams) == 0) die("Wrong id!"); $team_alt = $teams[0]; $teamgruppe_id = $team_alt->teamgruppe_id != null ? $team_alt->teamgruppe_id : $id; if ($veranstaltungId != $team_alt->veranstaltung_id) die("Wrong id!"); $query = "UPDATE #__sportsmanager_team" . "\n SET verein_id = " . ($verein_id != 0 ? "'$verein_id'" : "NULL") . "," . "\n teamname = '$teamname'," . "\n teamname_kurz = '$teamname_kurz'," . "\n tischtyp = '$tischtyp'," . "\n tischeigenschaften = '$tischeigenschaften'," . "\n heimspiel_wochentag = '$heimspiel_wochentag'," . "\n heimspiel_uhrzeit = '$heimspiel_uhrzeit'," . "\n heimspielort_id = " . ($heimspielort_id != 0 ? "'$heimspielort_id'" : "NULL") . "," . "\n nichtraucherschutz = '$nichtraucherschutz'," . ($veranstaltung->tabellenwertung == -2 ? ($platz != 0 ? "\n platz = '$platz'," : "\n platz = NULL,") : "") . "\n zusatzpunkte = '$zusatzpunkte'," . "\n pin = '$pin'" . "\n WHERE team_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } // Teamvertreter speichern $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_team WHERE berechtigt_team_id = $id AND berechtigt_user_id != $berechtigt_fuer_team_user_ids[0] AND berechtigt_user_id != $berechtigt_fuer_team_user_ids[1] AND berechtigt_user_id != $berechtigt_fuer_team_user_ids[2] AND berechtigt_user_id != $berechtigt_fuer_team_user_ids[3] AND berechtigt_user_id != $berechtigt_fuer_team_user_ids[4] AND berechtigt_user_id != $berechtigt_fuer_team_user_ids[5];"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_team WHERE berechtigt_team_id = $id"; $rows = loadObjectList($db, $query); for ($nummer = 0; $nummer <= 5; $nummer++) { $berechtigt_user_id = $berechtigt_fuer_team_user_ids[$nummer]; if ($berechtigt_user_id != 0) { $gefunden = false; foreach ($rows as $row) { if ($row->berechtigt_user_id == $berechtigt_user_id) $gefunden = true; } if (!$gefunden) { $query = "INSERT INTO #__sportsmanager_berechtigt_fuer_team (berechtigt_user_id, berechtigt_team_id) VALUES ('$berechtigt_user_id', '$id');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } } // Ansprechpartner speichern for ($nummer = 1; $nummer <= 2; $nummer++) { $teamansprechpartner_id = $jInput->get('teamansprechpartner_' . $nummer . '_id', 0, 'INT'); $teamansprechpartner_vorname = trim($jInput->get('teamansprechpartner_' . $nummer . '_vorname', '', 'RAW')); $teamansprechpartner_nachname = trim($jInput->get('teamansprechpartner_' . $nummer . '_nachname', '', 'RAW')); $teamansprechpartner_telefon = trim($jInput->get('teamansprechpartner_' . $nummer . '_telefon', '', 'RAW')); $teamansprechpartner_mobil = trim($jInput->get('teamansprechpartner_' . $nummer . '_mobil', '', 'RAW')); $teamansprechpartner_email = trim($jInput->get('teamansprechpartner_' . $nummer . '_email', '', 'RAW')); if ($teamansprechpartner_id == 0) { if (strlen($teamansprechpartner_vorname) > 0 || strlen($teamansprechpartner_nachname) > 0) { $query = "INSERT INTO #__sportsmanager_teamansprechpartner (team_id, vorname, nachname, telefon, mobil, email) VALUES ('$id', '$teamansprechpartner_vorname', '$teamansprechpartner_nachname', '$teamansprechpartner_telefon', '$teamansprechpartner_mobil', '$teamansprechpartner_email');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } else { if (strlen($teamansprechpartner_vorname) > 0 || strlen($teamansprechpartner_nachname) > 0) { $query = "UPDATE #__sportsmanager_teamansprechpartner" . "\n SET vorname = '$teamansprechpartner_vorname'," . "\n nachname = '$teamansprechpartner_nachname'," . "\n telefon = '$teamansprechpartner_telefon'," . "\n mobil = '$teamansprechpartner_mobil'," . "\n email = '$teamansprechpartner_email'" . "\n WHERE kontaktperson_id = $teamansprechpartner_id"; } else { $query = "DELETE FROM #__sportsmanager_teamansprechpartner WHERE kontaktperson_id = $teamansprechpartner_id;"; } $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } if ($team_alt != null && ($team_alt->heimspiel_wochentag != $heimspiel_wochentag || $team_alt->heimspiel_uhrzeit != $heimspiel_uhrzeit)) heimspieltag_aktualisieren($id); $bild_aktualisieren_gescheitert = 0; if ($bildbeibehalten == 0) { bildLoeschen("mannschaften", $id); if (!empty($_FILES["bild"]["tmp_name"])) { if (is_uploaded_file($_FILES["bild"]["tmp_name"])) { $size = getimagesize($_FILES["bild"]["tmp_name"]); if (!$size || ($size[2] != IMAGETYPE_JPEG && $size[2] != IMAGETYPE_PNG) || ($size[0] < 60 || $size[1] < 60 || $size[0] > 8192 || $size[1] > 8192)) { $bild_aktualisieren_gescheitert = 1; } else { $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'mannschaften'; $ziel_pfad = $bilder_pfad . DIRECTORY_SEPARATOR . $id . ($size[2] == IMAGETYPE_PNG ? '.png' : '.jpg'); if (!bildKopierenAngepasst($_FILES["bild"]["tmp_name"], $ziel_pfad, 240, 240, 0)) $bild_aktualisieren_gescheitert = 2; } } } } // Weitere Wettbewerbe aktualisieren $query = "SELECT team_id, veranstaltung_id" . "\n FROM #__sportsmanager_team" . "\n WHERE team_id != $id AND teamgruppe_id = $teamgruppe_id"; $bestehende_weitere_veranstaltungen_beruecksichtigt = loadObjectList($db, $query); $veranstaltungen_aktualisieren = array(); foreach ($bestehende_weitere_veranstaltungen_beruecksichtigt as $bestehende_weitere_veranstaltung_beruecksichtigt) { if ($beschraenkter_zugriff_veranstaltungen && !in_array($bestehende_weitere_veranstaltung_beruecksichtigt->veranstaltung_id, $beschraenkter_zugriff_veranstaltungen_ids)) continue; $ist_beruecksichtigt = false; foreach ($weitere_veranstaltungen_beruecksichtigt as $weitere_veranstaltung_id) { if ($bestehende_weitere_veranstaltung_beruecksichtigt->veranstaltung_id == $weitere_veranstaltung_id) { $ist_beruecksichtigt = true; break; } } if (!$ist_beruecksichtigt) mannschaftsgruppe_entfernen($bestehende_weitere_veranstaltung_beruecksichtigt->team_id); else { mannschaftsgruppe_verknuepfen($id, $bestehende_weitere_veranstaltung_beruecksichtigt->team_id, true, false, $bildbeibehalten == 0); if ($team_alt != null && ($team_alt->heimspiel_wochentag != $heimspiel_wochentag || $team_alt->heimspiel_uhrzeit != $heimspiel_uhrzeit)) heimspieltag_aktualisieren($bestehende_weitere_veranstaltung_beruecksichtigt->team_id); } if (!in_array($bestehende_weitere_veranstaltung_beruecksichtigt->veranstaltung_id, $veranstaltungen_aktualisieren)) $veranstaltungen_aktualisieren[] = $bestehende_weitere_veranstaltung_beruecksichtigt->veranstaltung_id; } foreach ($weitere_veranstaltungen_beruecksichtigt as $weitere_veranstaltung_id) { if ($beschraenkter_zugriff_veranstaltungen && !in_array($weitere_veranstaltung_id, $beschraenkter_zugriff_veranstaltungen_ids)) continue; $ist_beruecksichtigt = false; foreach ($bestehende_weitere_veranstaltungen_beruecksichtigt as $bestehende_weitere_veranstaltung_beruecksichtigt) { if ($bestehende_weitere_veranstaltung_beruecksichtigt->veranstaltung_id == $weitere_veranstaltung_id) { $ist_beruecksichtigt = true; break; } } if (!$ist_beruecksichtigt) mannschaftsgruppe_hinzufuegen($id, $weitere_veranstaltung_id); if (!in_array($weitere_veranstaltung_id, $veranstaltungen_aktualisieren)) $veranstaltungen_aktualisieren[] = $weitere_veranstaltung_id; } teamstatistikAktualisieren($veranstaltungId); foreach ($veranstaltungen_aktualisieren as $weitere_veranstaltung_id) teamstatistikAktualisieren($weitere_veranstaltung_id); if ($bild_aktualisieren_gescheitert > 0) { redirectSportsManagerURL('&task=admin_teams&veranstaltungid=' . $veranstaltungId, $bild_aktualisieren_gescheitert == 1 ? "Das Bild wurde nicht gespeichert, da es nicht im JPG/PNG-Format mit mindestens 90*90 und maximal 8192*8192 Bildpunkten vorliegt." : "Das Bild konnte nicht an die Zielposition kopiert werden."); } redirectSportsManagerURL('&task=admin_teams&veranstaltungid=' . $veranstaltungId); } function mannschaftsgruppe_hinzufuegen($quelle_team_id, $ziel_veranstaltung_id) { $db = getDatabase(); $query = "SELECT * FROM #__sportsmanager_team" . "\n WHERE team_id = $quelle_team_id"; $teams = loadObjectList($db, $query); if (count($teams) == 0) die("Wrong id!"); $team = $teams[0]; $teamgruppe_id = $team->teamgruppe_id != null ? $team->teamgruppe_id : $quelle_team_id; $query = "SELECT COUNT(*)" . "\n FROM #__sportsmanager_team" . "\n WHERE teamgruppe_id = $teamgruppe_id AND veranstaltung_id = $ziel_veranstaltung_id"; $n = loadResult($db, $query); if ($n > 0) return false; $query = "SELECT COUNT(*)" . "\n FROM #__sportsmanager_veranstaltung" . "\n WHERE veranstaltung_id = $ziel_veranstaltung_id"; $n = loadResult($db, $query); if ($n == 0) die("Wrong id!"); $query = "INSERT INTO #__sportsmanager_team (verein_id, veranstaltung_id, teamname, tischtyp, tischeigenschaften, heimspiel_wochentag, heimspiel_uhrzeit, heimspielort_id, nichtraucherschutz, pin)" . "\n VALUES (" . ($team->verein_id == null ? "NULL" : "'$team->verein_id'") . ", '$ziel_veranstaltung_id', '" . $db->escape($team->teamname) . "', '" . $db->escape($team->tischtyp) . "', '" . $db->escape($team->tischeigenschaften) . "', '" . $db->escape($team->heimspiel_wochentag) . "', '" . $db->escape($team->heimspiel_uhrzeit) . "', " . ($team->heimspielort_id != 0 ? "'$team->heimspielort_id'" : "NULL") . ", '$team->nichtraucherschutz', '" . $db->escape($team->pin) . "');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $ziel_team_id = $db->insertid(); return mannschaftsgruppe_verknuepfen($quelle_team_id, $ziel_team_id, true, true, true); } function mannschaftsgruppe_verknuepfen($quelle_team_id, $ziel_team_id, $mannschaftsdaten_aktualisieren, $mannschaftsspieler_aktualisieren, $mannschaftsbild_aktualisieren) { $db = getDatabase(); global $sportsmanager_joomla_path; if ($quelle_team_id == $ziel_team_id) return false; $query = "SELECT * FROM #__sportsmanager_team" . "\n WHERE team_id = $quelle_team_id"; $teams = loadObjectList($db, $query); if (count($teams) === 0) die("Wrong id!"); $team = $teams[0]; $teamgruppe_id = $team->teamgruppe_id != null ? $team->teamgruppe_id : $quelle_team_id; if ($team->teamgruppe_id == null) { $query = "UPDATE #__sportsmanager_team" . "\n SET teamgruppe_id = '$teamgruppe_id'" . "\n WHERE team_id = $quelle_team_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } // Mannschaftsdaten aktualisieren if ($mannschaftsdaten_aktualisieren) { $query = "UPDATE #__sportsmanager_team" . "\n SET teamgruppe_id = '$teamgruppe_id'," . "\n verein_id = " . ($team->verein_id == null ? "NULL" : "'$team->verein_id'") . "," . "\n teamname = '" . $db->escape($team->teamname) . "'," . "\n teamname_kurz = '" . $db->escape($team->teamname_kurz) . "'," . "\n tischtyp = '" . $db->escape($team->tischtyp) . "'," . "\n tischeigenschaften = '" . $db->escape($team->tischeigenschaften) . "'," . "\n heimspiel_wochentag = '" . $db->escape($team->heimspiel_wochentag) . "'," . "\n heimspiel_uhrzeit = '" . $db->escape($team->heimspiel_uhrzeit) . "'," . "\n heimspielort_id = " . ($team->heimspielort_id != 0 ? "'$team->heimspielort_id'" : "NULL") . "," . "\n nichtraucherschutz = '$team->nichtraucherschutz'," . "\n pin = '" . $db->escape($team->pin) . "'" . "\n WHERE team_id = $ziel_team_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } // Teamvertreter kopieren $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_team WHERE berechtigt_team_id = $quelle_team_id ORDER BY berechtigt_fuer_team_id"; $quelle_teamvertreter = loadObjectList($db, $query); $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_team WHERE berechtigt_team_id = $ziel_team_id ORDER BY berechtigt_fuer_team_id"; $ziel_teamvertreter = loadObjectList($db, $query); $quelle_teamvertreter_anzahl = count($quelle_teamvertreter); $ziel_teamvertreter_anzahl = count($ziel_teamvertreter); for ($i = 0; $i < $quelle_teamvertreter_anzahl; $i++) { $berechtigt_user_id = $quelle_teamvertreter[$i]->berechtigt_user_id; if ($i < $ziel_teamvertreter_anzahl) { $berechtigt_fuer_team_id = $ziel_teamvertreter[$i]->berechtigt_fuer_team_id; $query = "UPDATE #__sportsmanager_berechtigt_fuer_team" . "\n SET berechtigt_user_id = '$berechtigt_user_id'" . "\n WHERE berechtigt_fuer_team_id = $berechtigt_fuer_team_id"; } else { $query = "INSERT INTO #__sportsmanager_berechtigt_fuer_team (berechtigt_user_id, berechtigt_team_id)" . "\n VALUES ('$berechtigt_user_id', '$ziel_team_id');"; } $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } for ($i = $quelle_teamvertreter_anzahl; $i < $ziel_teamvertreter_anzahl; $i++) { $berechtigt_fuer_team_id = $ziel_teamvertreter[$i]->berechtigt_fuer_team_id; $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_team WHERE berechtigt_fuer_team_id = $berechtigt_fuer_team_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } // Ansprechpartner kopieren $query = "SELECT * FROM #__sportsmanager_teamansprechpartner WHERE team_id = $quelle_team_id ORDER BY kontaktperson_id"; $quelle_ansprechpartner = loadObjectList($db, $query); $query = "SELECT * FROM #__sportsmanager_teamansprechpartner WHERE team_id = $ziel_team_id ORDER BY kontaktperson_id"; $ziel_ansprechpartner = loadObjectList($db, $query); $quelle_ansprechpartner_anzahl = count($quelle_ansprechpartner); $ziel_ansprechpartner_anzahl = count($ziel_ansprechpartner); for ($i = 0; $i < $quelle_ansprechpartner_anzahl; $i++) { if ($i < $ziel_ansprechpartner_anzahl) { $kontaktperson_id = $ziel_ansprechpartner[$i]->kontaktperson_id; $query = "UPDATE #__sportsmanager_teamansprechpartner" . "\n SET nachname = '" . $db->escape($quelle_ansprechpartner[$i]->nachname) . "'," . "\n vorname = '" . $db->escape($quelle_ansprechpartner[$i]->vorname) . "'," . "\n telefon = '" . $db->escape($quelle_ansprechpartner[$i]->telefon) . "'," . "\n mobil = '" . $db->escape($quelle_ansprechpartner[$i]->mobil) . "'," . "\n email = '" . $db->escape($quelle_ansprechpartner[$i]->email) . "'" . "\n WHERE kontaktperson_id = $kontaktperson_id"; } else { $query = "INSERT INTO #__sportsmanager_teamansprechpartner (team_id, nachname, vorname, telefon, mobil, email)" . "\n VALUES ('$ziel_team_id', '" . $db->escape($quelle_ansprechpartner[$i]->nachname) . "', '" . $db->escape($quelle_ansprechpartner[$i]->vorname) . "', '" . $db->escape($quelle_ansprechpartner[$i]->telefon) . "', '" . $db->escape($quelle_ansprechpartner[$i]->mobil) . "', '" . $db->escape($quelle_ansprechpartner[$i]->email) . "');"; } $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } for ($i = $quelle_ansprechpartner_anzahl; $i < $ziel_ansprechpartner_anzahl; $i++) { $kontaktperson_id = $ziel_ansprechpartner[$i]->kontaktperson_id; $query = "DELETE FROM #__sportsmanager_teamansprechpartner WHERE kontaktperson_id = $kontaktperson_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } // Mitglieder aktualisieren if ($mannschaftsspieler_aktualisieren) { $query = "SELECT spieler_id, ausgetreten, SUM(IF(team_id = $quelle_team_id, 1, 0)) AS mitglied_quelle, SUM(IF(team_id = $ziel_team_id, 1, 0)) AS mitglied_ziel" // , SUM(IF(team_id = $quelle_team_id, 1, IF(team_id = $ziel_team_id, 10000, 0))) AS teammitgliedschaften" . "\n FROM #__sportsmanager_mitglied_von_team" . "\n WHERE team_id = $quelle_team_id OR team_id = $ziel_team_id" . "\n GROUP BY spieler_id, ausgetreten"; $vereinte_mitglieder = loadObjectList($db, $query); $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'mannschaftsmitglieder'; foreach ($vereinte_mitglieder as $mitglied) { $query = "SELECT mitglied_von_team_id" . "\n FROM #__sportsmanager_mitglied_von_team" . "\n WHERE spieler_id = $mitglied->spieler_id AND team_id = $ziel_team_id AND ausgetreten = $mitglied->ausgetreten"; $ziel_mitglieder = loadObjectList($db, $query); foreach ($ziel_mitglieder as $ziel_mitglied) bildLoeschen("mannschaftsmitglieder", $ziel_mitglied->mitglied_von_team_id); if ($mitglied->mitglied_quelle == 0 && $mitglied->mitglied_ziel > 0) { $query = "DELETE FROM #__sportsmanager_mitglied_von_team WHERE spieler_id = $mitglied->spieler_id AND team_id = $ziel_team_id AND ausgetreten = $mitglied->ausgetreten;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } continue; } if ($mitglied->mitglied_quelle > 0 && $mitglied->mitglied_ziel == 0) { $query = "INSERT INTO #__sportsmanager_mitglied_von_team (spieler_id, team_id, ausgetreten)" . "\n VALUES ('$mitglied->spieler_id', '$ziel_team_id', '$mitglied->ausgetreten');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "SELECT mitglied_von_team_id" . "\n FROM #__sportsmanager_mitglied_von_team" . "\n WHERE spieler_id = $mitglied->spieler_id AND team_id = $ziel_team_id AND ausgetreten = $mitglied->ausgetreten"; $ziel_mitglieder = loadObjectList($db, $query); } $query = "SELECT mitglied_von_team_id" . "\n FROM #__sportsmanager_mitglied_von_team" . "\n WHERE spieler_id = $mitglied->spieler_id AND team_id = $quelle_team_id AND ausgetreten = $mitglied->ausgetreten"; $quelle_mitglieder = loadObjectList($db, $query); $bild_kopiert = false; foreach ($quelle_mitglieder as $quelle_mitglied) { foreach ($ziel_mitglieder as $ziel_mitglied) { $pfad = $bilder_pfad . DIRECTORY_SEPARATOR . $quelle_mitglied->mitglied_von_team_id . '.'; if (file_exists($pfad . 'png') && is_file($pfad . 'png')) { File::copy($pfad . 'png', $bilder_pfad . DIRECTORY_SEPARATOR . $ziel_mitglied->mitglied_von_team_id . '.png'); $bild_kopiert = true; } else if (file_exists($pfad . 'jpg') && is_file($pfad . 'jpg')) { File::copy($pfad . 'jpg', $bilder_pfad . DIRECTORY_SEPARATOR . $ziel_mitglied->mitglied_von_team_id . '.jpg'); $bild_kopiert = true; } } if ($bild_kopiert) break; } } } // Mannschaftsbild aktualisieren if ($mannschaftsbild_aktualisieren) { bildLoeschen("mannschaften", $ziel_team_id); $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'mannschaften'; $quelle_pfad = $bilder_pfad . DIRECTORY_SEPARATOR . $quelle_team_id . '.'; $ziel_pfad = $bilder_pfad . DIRECTORY_SEPARATOR . $ziel_team_id . '.'; if (file_exists($quelle_pfad . 'png') && is_file($quelle_pfad . 'png')) $ext = "png"; else if (file_exists($quelle_pfad . 'jpg') && is_file($quelle_pfad . 'jpg')) $ext = "jpg"; else $ext = ""; if (!empty($ext) && !File::copy($quelle_pfad . $ext, $ziel_pfad . $ext)) return false; } return true; } function mannschaftsgruppe_entfernen($ziel_team_id) { $db = getDatabase(); $query = "SELECT * FROM #__sportsmanager_team" . "\n WHERE team_id = $ziel_team_id"; $teams = loadObjectList($db, $query); if (count($teams) === 0) die("Wrong id!"); $team = $teams[0]; $teamgruppe_id = $team->teamgruppe_id; if ($teamgruppe_id == null) return false; $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_begegnung WHERE heim_team_id = $ziel_team_id OR gast_team_id = $ziel_team_id), 1, 0)"; $n = loadResult($db, $query); if ($n > 0) return false; $query = "SELECT *" . "\n FROM #__sportsmanager_mitglied_von_team" . "\n WHERE team_id = $ziel_team_id"; $rows = loadObjectList($db, $query); foreach ($rows as $row) bildLoeschen("mannschaftsmitglieder", $row->mitglied_von_team_id); $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_team WHERE berechtigt_team_id = $ziel_team_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_teamansprechpartner WHERE team_id = $ziel_team_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_mitglied_von_team WHERE team_id = $ziel_team_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_team WHERE team_id = $ziel_team_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "SELECT COUNT(*)" . "\n FROM #__sportsmanager_team" . "\n WHERE teamgruppe_id = $teamgruppe_id"; $n = loadResult($db, $query); if ($n == 1) { $query = "UPDATE #__sportsmanager_team" . "\n SET teamgruppe_id = NULL" . "\n WHERE teamgruppe_id = $teamgruppe_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } return true; } function heimspieltag_aktualisieren($team_id): void { $db = getDatabase(); $query = "SELECT * FROM #__sportsmanager_team" . "\n WHERE team_id = $team_id"; $teams = loadObjectList($db, $query); if (count($teams) === 0) die("Wrong id!"); $team = $teams[0]; if ($team->heimspiel_wochentag < 1 || $team->heimspiel_wochentag > 7) return; $query = "SELECT begegnung_id, zeitpunkt" . "\n FROM #__sportsmanager_begegnung" . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis USING (begegnung_id)" . "\n WHERE heim_team_id = $team_id AND COALESCE(heim_spielpunkte, 0) = 0 AND COALESCE(gast_spielpunkte, 0) = 0 AND NOT ISNULL(zeitpunkt) AND ISNULL(spielort_id) AND ISNULL(#__sportsmanager_unbestaetigtes_ergebnis.begegnung_id) AND NOT EXISTS(SELECT * FROM #__sportsmanager_begegnung_historie WHERE #__sportsmanager_begegnung_historie.begegnung_id = #__sportsmanager_begegnung.begegnung_id)" . "\n ORDER BY spieltag DESC"; $begegnungen = loadObjectList($db, $query); foreach ($begegnungen as $begegnung) { $ts = getdate(geaenderterWochentag(strtotime($begegnung->zeitpunkt), $team->heimspiel_wochentag - 1)); $neuer_zeitpunkt = sprintf("%04d-%02d-%02d %02d:%02d", $ts["year"], $ts["mon"], $ts["mday"], floor($team->heimspiel_uhrzeit / 100), $team->heimspiel_uhrzeit % 100); $query = "UPDATE #__sportsmanager_begegnung" . "\n SET zeitpunkt = '$neuer_zeitpunkt'" . "\n WHERE begegnung_id = $begegnung->begegnung_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } function termin_aktualisieren($begegnung_id): void { $db = getDatabase(); $query = "SELECT heim_team_id, zeitpunkt" . "\n FROM #__sportsmanager_begegnung" . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis USING (begegnung_id)" . "\n WHERE begegnung_id = $begegnung_id AND COALESCE(heim_spielpunkte, 0) = 0 AND COALESCE(gast_spielpunkte, 0) = 0 AND NOT ISNULL(zeitpunkt) AND ISNULL(spielort_id) AND ISNULL(#__sportsmanager_unbestaetigtes_ergebnis.begegnung_id) AND NOT EXISTS(SELECT * FROM #__sportsmanager_begegnung_historie WHERE #__sportsmanager_begegnung_historie.begegnung_id = #__sportsmanager_begegnung.begegnung_id)" . "\n ORDER BY spieltag DESC"; $begegnungen = loadObjectList($db, $query); if (count($begegnungen) < 1) return; $begegnung = $begegnungen[0]; $query = "SELECT * FROM #__sportsmanager_team" . "\n WHERE team_id = $begegnung->heim_team_id"; $teams = loadObjectList($db, $query); if (count($teams) === 0) die("Wrong id!"); $team = $teams[0]; if ($team->heimspiel_wochentag < 1 || $team->heimspiel_wochentag > 7) return; $ts = getdate(geaenderterWochentag(strtotime($begegnung->zeitpunkt), $team->heimspiel_wochentag - 1)); $neuer_zeitpunkt = sprintf("%04d-%02d-%02d %02d:%02d", $ts["year"], $ts["mon"], $ts["mday"], floor($team->heimspiel_uhrzeit / 100), $team->heimspiel_uhrzeit % 100); $query = "UPDATE #__sportsmanager_begegnung" . "\n SET zeitpunkt = '$neuer_zeitpunkt'" . "\n WHERE begegnung_id = $begegnung_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } #[NoReturn] function adminRemoveMannschaft(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $id = $jInput->get('id', 0, 'INT'); $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(true); $query = "SELECT teamgruppe_id, veranstaltung_id FROM #__sportsmanager_team WHERE team_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); if ($veranstaltungId != $rows[0]->veranstaltung_id) die("Wrong id!"); $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_begegnung WHERE heim_team_id = $id OR gast_team_id = $id), 1, 0)"; $n = loadResult($db, $query); if ($n > 0) die(Text::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); if ($rows[0]->teamgruppe_id != null) { mannschaftsgruppe_entfernen($id); } else { $query = "SELECT *" . "\n FROM #__sportsmanager_mitglied_von_team" . "\n WHERE team_id = $id"; $rows = loadObjectList($db, $query); foreach ($rows as $row) bildLoeschen("mannschaftsmitglieder", $row->mitglied_von_team_id); $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_team WHERE berechtigt_team_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_teamansprechpartner WHERE team_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_mitglied_von_team WHERE team_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_team WHERE team_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } bildLoeschen("mannschaften", $id); } teamstatistikAktualisieren($veranstaltungId); redirectSportsManagerURL('&task=admin_teams&veranstaltungid=' . $veranstaltungId); } function adminKopierenMannschaftForm(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(true); $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $veranstaltung = $rows[0]; $query = "SELECT #__sportsmanager_team.*, vereinsname" . "\n FROM #__sportsmanager_team" . "\n LEFT JOIN #__sportsmanager_verein USING (verein_id)" . "\n WHERE #__sportsmanager_team.veranstaltung_id = $veranstaltungId" . "\n ORDER BY teamname"; $teams = loadObjectList($db, $query); $beschraenkter_zugriff_veranstaltungen = benutzerZugriff("mannschaftswettbewerb_aendern") ? 0 : 1; if ($beschraenkter_zugriff_veranstaltungen) { $query = "SELECT *" . "\n FROM #__sportsmanager_veranstaltung" . "\n WHERE " . veranstaltungFilter("veranstaltung_id IN") . "\n ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; } else { $query = "SELECT *" . "\n FROM #__sportsmanager_veranstaltung" . "\n ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; } $veranstaltungen = loadObjectList($db, $query); HTML_sportsmanager_admin::adminKopierenMannschaft($veranstaltung, $teams, $veranstaltungen); } #[NoReturn] function adminKopierenMannschaft(): void { $db = getDatabase(); global $sportsmanager_joomla_path; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $ids = $jInput->get('ids', array(), 'ARRAY'); $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); $mitglieder_kopieren = $jInput->get('mitglieder_kopieren', 0, 'INT'); if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_teams&veranstaltungid=' . $veranstaltungId); } $beschraenkter_zugriff = benutzerZugriff("mannschaftswettbewerb_aendern") ? 0 : 1; $ziel_veranstaltungen_ids = array(); for ($i = 1; $i <= 4; $i++) { $ziel_veranstaltungid = $jInput->get('ziel_veranstaltungid_' . $i, 0, 'INT'); if (empty($ziel_veranstaltungid) || ($beschraenkter_zugriff && !benutzerVeranstaltungModerator($ziel_veranstaltungid))) continue; if (!in_array($ziel_veranstaltungid, $ziel_veranstaltungen_ids)) $ziel_veranstaltungen_ids[] = $ziel_veranstaltungid; } foreach ($ziel_veranstaltungen_ids as $ziel_veranstaltungid) { foreach ($ids as $id) { $query = "SELECT * FROM #__sportsmanager_team" . "\n WHERE team_id = $id"; $teams = loadObjectList($db, $query); if (count($teams) === 0) die("Wrong id!"); $team = $teams[0]; if ($veranstaltungId != $team->veranstaltung_id) die("Wrong id!"); $query = "INSERT INTO #__sportsmanager_team (verein_id, veranstaltung_id, teamname, tischtyp, tischeigenschaften, heimspiel_wochentag, heimspiel_uhrzeit, heimspielort_id, nichtraucherschutz, pin)" . "\n VALUES (" . ($team->verein_id == null ? "NULL" : "'$team->verein_id'") . ", '$ziel_veranstaltungid', '" . $db->escape($team->teamname) . "', '" . $db->escape($team->tischtyp) . "', '" . $db->escape($team->tischeigenschaften) . "', '" . $db->escape($team->heimspiel_wochentag) . "', '" . $db->escape($team->heimspiel_uhrzeit) . "', " . ($team->heimspielort_id != 0 ? "'$team->heimspielort_id'" : "NULL") . ", '$team->nichtraucherschutz', '" . $db->escape($team->pin) . "');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $ziel_teamid = $db->insertid(); // Mitglieder kopieren if ($mitglieder_kopieren) { $query = "SELECT * FROM #__sportsmanager_mitglied_von_team WHERE team_id = $id AND NOT ausgetreten"; $rows = loadObjectList($db, $query); foreach ($rows as $row) { $query = "INSERT INTO #__sportsmanager_mitglied_von_team (spieler_id, team_id)" . "\n VALUES ('$row->spieler_id', '$ziel_teamid');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $ziel_mitglied_von_team_id = $db->insertid(); $pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'mannschaftsmitglieder' . DIRECTORY_SEPARATOR . $row->mitglied_von_team_id . '.'; if (file_exists($pfad . 'png') && is_file($pfad . 'png')) File::copy($pfad . 'png', $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'mannschaftsmitglieder' . DIRECTORY_SEPARATOR . $ziel_mitglied_von_team_id . '.png'); else if (file_exists($pfad . 'jpg') && is_file($pfad . 'jpg')) File::copy($pfad . 'jpg', $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'mannschaftsmitglieder' . DIRECTORY_SEPARATOR . $ziel_mitglied_von_team_id . '.jpg'); } } // Teamvertreter kopieren $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_team WHERE berechtigt_team_id = $id ORDER BY berechtigt_fuer_team_id"; $rows = loadObjectList($db, $query); foreach ($rows as $row) { $query = "INSERT INTO #__sportsmanager_berechtigt_fuer_team (berechtigt_user_id, berechtigt_team_id)" . "\n VALUES ('$row->berechtigt_user_id', '$ziel_teamid');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } // Ansprechpartner kopieren $query = "SELECT * FROM #__sportsmanager_teamansprechpartner WHERE team_id = $id ORDER BY kontaktperson_id"; $rows = loadObjectList($db, $query); foreach ($rows as $row) { $query = "INSERT INTO #__sportsmanager_teamansprechpartner (team_id, nachname, vorname, telefon, mobil, email)" . "\n VALUES ('$ziel_teamid', '" . $db->escape($row->nachname) . "', '" . $db->escape($row->vorname) . "', '" . $db->escape($row->telefon) . "', '" . $db->escape($row->mobil) . "', '" . $db->escape($row->email) . "');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } $pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'mannschaften' . DIRECTORY_SEPARATOR . $id . '.'; if (file_exists($pfad . 'png') && is_file($pfad . 'png')) File::copy($pfad . "png", $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'mannschaften' . DIRECTORY_SEPARATOR . $ziel_teamid . '.png'); else if (file_exists($pfad . 'jpg') && is_file($pfad . 'jpg')) File::copy($pfad . "jpg", $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'mannschaften' . DIRECTORY_SEPARATOR . $ziel_teamid . '.jpg'); } } teamstatistikAktualisieren($ziel_veranstaltungid); redirectSportsManagerURL('&task=admin_teams&veranstaltungid=' . $veranstaltungId); } function adminVerknuepfenMannschaftForm(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(true); $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $veranstaltung = $rows[0]; $query = "SELECT #__sportsmanager_team.*, vereinsname" . "\n FROM #__sportsmanager_team" . "\n LEFT JOIN #__sportsmanager_verein USING (verein_id)" . "\n WHERE #__sportsmanager_team.veranstaltung_id = $veranstaltungId" . "\n ORDER BY teamname"; $teams = loadObjectList($db, $query); $beschraenkter_zugriff_veranstaltungen = benutzerZugriff("mannschaftswettbewerb_aendern") ? 0 : 1; if ($beschraenkter_zugriff_veranstaltungen) { $query = "SELECT *" . "\n FROM #__sportsmanager_veranstaltung" . "\n WHERE saison_id = $veranstaltung->saison_id AND " . veranstaltungFilter("veranstaltung_id IN") . "\n ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; } else { $query = "SELECT *" . "\n FROM #__sportsmanager_veranstaltung" . "\n WHERE saison_id = $veranstaltung->saison_id" . "\n ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; } $veranstaltungen = loadObjectList($db, $query); HTML_sportsmanager_admin::adminVerknuepfenMannschaft($veranstaltung, $teams, $veranstaltungen); } #[NoReturn] function adminVerknuepfenMannschaft(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $ids = $jInput->get('ids', array(), 'ARRAY'); $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(true); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_teams&veranstaltungid=' . $veranstaltungId); } $beschraenkter_zugriff = benutzerZugriff("mannschaftswettbewerb_aendern") ? 0 : 1; $ziel_veranstaltungen_ids = array(); for ($i = 1; $i <= 4; $i++) { $ziel_veranstaltungid = $jInput->get('ziel_veranstaltungid_' . $i, 0, 'INT'); if (empty($ziel_veranstaltungid) || ($beschraenkter_zugriff && !benutzerVeranstaltungModerator($ziel_veranstaltungid))) continue; if (!in_array($ziel_veranstaltungid, $ziel_veranstaltungen_ids)) $ziel_veranstaltungen_ids[] = $ziel_veranstaltungid; } foreach ($ziel_veranstaltungen_ids as $ziel_veranstaltungid) { foreach ($ids as $id) { $query = "SELECT * FROM #__sportsmanager_team" . "\n WHERE team_id = $id"; $teams = loadObjectList($db, $query); if (count($teams) === 0) die("Wrong id!"); $team = $teams[0]; if ($veranstaltungId != $team->veranstaltung_id) die("Wrong id!"); mannschaftsgruppe_hinzufuegen($id, $ziel_veranstaltungid); } } teamstatistikAktualisieren($ziel_veranstaltungid); redirectSportsManagerURL('&task=admin_teams&veranstaltungid=' . $veranstaltungId); } function adminMitglieder(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator()) keinZugriff(true); $berechtigt_spieler_aendern = benutzerZugriff("spieler_aendern"); $teamid = $jInput->get('teamid', 0, 'INT'); if ($teamid == 0) die ("Wrong id!"); $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $teamid"; $teams = loadObjectList($db, $query); if (count($teams) < 1) die ("Wrong id"); $team = $teams[0]; $teamgruppe_id = $team->teamgruppe_id != null ? $team->teamgruppe_id : $teamid; if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($team->veranstaltung_id)) keinZugriff(true); $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $team->veranstaltung_id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $veranstaltung = $rows[0]; $query = "SELECT mitglied_von_team_id, spieler_id, aktueller_verein_id, MAX(IF(team_id = $teamid, #__sportsmanager_mitglied_von_team.ausgetreten, 0)) AS ausgetreten, MAX(IF(team_id = $teamid, erster_spieltag, NULL)) AS erster_spieltag, MAX(IF(team_id = $teamid, letzter_spieltag, NULL)) AS letzter_spieltag, vorname, nachname, spielernr, MIN(IF(team_id = $teamid, 0, 1)) AS anderes_team" . "\n FROM #__sportsmanager_mitglied_von_team" . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" . "\n INNER JOIN #__sportsmanager_team USING (team_id)" . "\n WHERE (team_id = $teamid OR teamgruppe_id = $teamgruppe_id)" . "\n GROUP BY spieler_id" . "\n ORDER BY anderes_team, IF(#__sportsmanager_mitglied_von_team.ausgetreten, 1, 0), nachname, vorname, erster_spieltag"; $mitglieder = loadObjectList($db, $query); HTML_sportsmanager_admin::adminMitglieder($team, $veranstaltung, $mitglieder, $berechtigt_spieler_aendern); } function adminEditMitglied(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator()) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $teamid = $jInput->get('teamid', 0, 'INT'); $alle_anzeigen = $jInput->get('alle_anzeigen', 0, 'INT'); $entfernen = $jInput->get('entfernen', 0, 'INT'); $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $teamid"; $teams = loadObjectList($db, $query); if (count($teams) < 1) die ("Wrong id"); $team = $teams[0]; $teamgruppe_id = $team->teamgruppe_id != null ? $team->teamgruppe_id : $teamid; if (empty($id)) $row = null; else { $query = "SELECT #__sportsmanager_mitglied_von_team.*, vorname, nachname FROM #__sportsmanager_mitglied_von_team LEFT JOIN #__sportsmanager_spieler USING (spieler_id) INNER JOIN #__sportsmanager_team USING (team_id) WHERE spieler_id = $id AND (team_id = $teamid OR teamgruppe_id = $teamgruppe_id)"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $row = $rows[0]; } if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($team->veranstaltung_id)) keinZugriff(true); $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $team->veranstaltung_id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $veranstaltung = $rows[0]; if (empty($id)) { $query = "SELECT DISTINCT veranstaltung_id, bezeichnung, unterteilung, saison_id, team_id, NULL AS mitglied_von_team_id, NULL AS erster_spieltag, NULL AS letzter_spieltag, NULL AS ausgetreten" . "\n FROM #__sportsmanager_veranstaltung" . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" . "\n LEFT JOIN (SELECT veranstaltung_id, team_id, teamgruppe_id FROM #__sportsmanager_team WHERE team_id = $teamid" . (!empty($team->teamgruppe_id) ? " OR teamgruppe_id = $team->teamgruppe_id" : "") . ") AS veranstaltungen USING (veranstaltung_id)" . "\n WHERE team_id = $teamid" . (!empty($team->teamgruppe_id) ? " OR teamgruppe_id = $team->teamgruppe_id" : "") . "\n ORDER BY IF(veranstaltung_id = $team->veranstaltung_id, 0, 1), bezeichnung"; } else { $query = "SELECT DISTINCT veranstaltung_id, bezeichnung, unterteilung, saison_id, veranstaltungen.team_id, mitglied_von_team_id, erster_spieltag, letzter_spieltag, #__sportsmanager_mitglied_von_team.ausgetreten" . "\n FROM #__sportsmanager_veranstaltung" . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" . "\n LEFT JOIN (SELECT veranstaltung_id, team_id, teamgruppe_id FROM #__sportsmanager_team WHERE #__sportsmanager_team.team_id = $teamid" . (!empty($team->teamgruppe_id) ? " OR teamgruppe_id = $team->teamgruppe_id" : "") . ") AS veranstaltungen USING (veranstaltung_id)" . "\n LEFT JOIN #__sportsmanager_mitglied_von_team ON veranstaltungen.team_id = #__sportsmanager_mitglied_von_team.team_id AND spieler_id = " . $row->spieler_id . "\n WHERE veranstaltungen.team_id = $teamid" . (!empty($team->teamgruppe_id) ? " OR teamgruppe_id = $team->teamgruppe_id" : "") . "\n ORDER BY IF(veranstaltung_id = $team->veranstaltung_id, 0, 1), bezeichnung"; } $veranstaltungen = loadObjectList($db, $query); $veranstaltungen_begegnungen = array(); foreach ($veranstaltungen as $v) { $query = "SELECT spieltag, zeitpunkt" . "\n FROM #__sportsmanager_begegnung" . "\n WHERE (heim_team_id = " . $v->team_id . " OR gast_team_id = " . $v->team_id . ") AND zeitpunkt < CURDATE()" . "\n ORDER BY zeitpunkt DESC" . "\n LIMIT 2"; $begegnungen = loadObjectList($db, $query); $veranstaltungen_begegnungen[$v->veranstaltung_id] = array(); $begegnungen = array_reverse($begegnungen); foreach ($begegnungen as $begegnung) $veranstaltungen_begegnungen[$v->veranstaltung_id][] = array($begegnung->spieltag, $begegnung->zeitpunkt); $query = "SELECT spieltag, zeitpunkt" . "\n FROM #__sportsmanager_begegnung" . "\n WHERE (heim_team_id = " . $v->team_id . " OR gast_team_id = " . $v->team_id . ") AND zeitpunkt >= CURDATE()" . "\n ORDER BY zeitpunkt" . "\n LIMIT 4"; $begegnungen = loadObjectList($db, $query); foreach ($begegnungen as $begegnung) $veranstaltungen_begegnungen[$v->veranstaltung_id][] = array($begegnung->spieltag, $begegnung->zeitpunkt); } if ($team->verein_id != null) { $query = "SELECT * FROM #__sportsmanager_verein WHERE verein_id = $team->verein_id"; $vereine = loadObjectList($db, $query); if (count($vereine) < 1) die ("Wrong id"); } if (empty($id)) { if (!empty($team->verein_id) && !$alle_anzeigen) { $query = "SELECT DISTINCT #__sportsmanager_spieler.spieler_id, vorname, nachname, spielernr, 1 AS aktives_mitglied" . "\n FROM #__sportsmanager_mitglied_von_verein" . "\n INNER JOIN #__sportsmanager_spieler USING (spieler_id)" . "\n WHERE verein_id = $team->verein_id AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten" . " AND spieler_id NOT IN (SELECT spieler_id FROM #__sportsmanager_team INNER JOIN #__sportsmanager_mitglied_von_team USING (team_id) WHERE team_id = $teamid OR teamgruppe_id = $teamgruppe_id)" . "\n ORDER BY nachname, vorname"; } else { $query = "SELECT spieler_id, vorname, nachname, spielernr" . "\n FROM #__sportsmanager_spieler" . "\n WHERE NOT ISNULL(aktueller_verein_id)" . " AND spieler_id NOT IN (SELECT spieler_id FROM #__sportsmanager_team INNER JOIN #__sportsmanager_mitglied_von_team USING (team_id) WHERE team_id = $teamid OR teamgruppe_id = $teamgruppe_id)" . "\n ORDER BY nachname, vorname"; } $spieler = loadObjectList($db, $query); if (!empty($team->verein_id) && !$alle_anzeigen) { $query = "SELECT spieler_id, veranstaltung_id, unterteilung, erster_spieltag, letzter_spieltag, team_id, ausgetreten" . "\n FROM #__sportsmanager_veranstaltung" . "\n INNER JOIN #__sportsmanager_team USING (veranstaltung_id)" . "\n INNER JOIN #__sportsmanager_mitglied_von_team USING (team_id)" . "\n INNER JOIN #__sportsmanager_spieler USING (spieler_id)" . "\n WHERE saison_id = $veranstaltung->saison_id AND (unterteilung = 0 OR unterteilung = 1)" . " AND EXISTS(SELECT * FROM #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_mitglied_von_verein.verein_id = $team->verein_id AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten)" . "\n ORDER BY reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; } else { $query = "SELECT spieler_id, veranstaltung_id, unterteilung, erster_spieltag, letzter_spieltag, team_id, ausgetreten" . "\n FROM #__sportsmanager_veranstaltung" . "\n INNER JOIN #__sportsmanager_team USING (veranstaltung_id)" . "\n INNER JOIN #__sportsmanager_mitglied_von_team USING (team_id)" . "\n INNER JOIN #__sportsmanager_spieler USING (spieler_id)" . "\n WHERE saison_id = $veranstaltung->saison_id AND (unterteilung = 0 OR unterteilung = 1) AND NOT ISNULL(aktueller_verein_id)" . "\n ORDER BY reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; } $mitgliedschaften = loadObjectList($db, $query); $spielberechtigungen = array(); foreach ($mitgliedschaften as $mitgliedschaft) { if (!isset($spielberechtigungen[$mitgliedschaft->spieler_id])) $spielberechtigungen[$mitgliedschaft->spieler_id] = array(); $spielberechtigungen[$mitgliedschaft->spieler_id][] = array($mitgliedschaft->veranstaltung_id, $mitgliedschaft->unterteilung, $mitgliedschaft->erster_spieltag, $mitgliedschaft->letzter_spieltag, $mitgliedschaft->team_id, $mitgliedschaft->ausgetreten); } // Veranstaltungsbezeichnungen ermitteln $query = "SELECT veranstaltung_id, bezeichnung" . "\n FROM #__sportsmanager_veranstaltung" . "\n WHERE saison_id = $veranstaltung->saison_id"; $rows = loadObjectList($db, $query); $veranstaltungsbezeichnungen = array(); foreach ($rows as $v) $veranstaltungsbezeichnungen[$v->veranstaltung_id] = $v->bezeichnung; // Mannschaftsbezeichnungen ermitteln $query = "SELECT team_id, teamname" . "\n FROM #__sportsmanager_team" . "\n LEFT JOIN #__sportsmanager_veranstaltung USING (veranstaltung_id)" . "\n WHERE saison_id = $veranstaltung->saison_id"; $rows = loadObjectList($db, $query); foreach ($rows as $m) $veranstaltungsbezeichnungen[$m->team_id] = $m->teamname; } else { $spieler = array(); $spielberechtigungen = null; $veranstaltungsbezeichnungen = null; } HTML_sportsmanager_admin::adminEditMitglied($row, $team, $spieler, $spielberechtigungen, $veranstaltungsbezeichnungen, $veranstaltungen, $veranstaltungen_begegnungen, $entfernen); } #[NoReturn] function adminSaveMitglied(): void { $db = getDatabase(); global $sportsmanager_joomla_path; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator()) keinZugriff(); $id = $jInput->get('id', 0, 'INT'); $spielerids = $id != 0 ? array($id) : $jInput->get('spielerids', array(), 'ARRAY'); $teamid = $jInput->get('teamid', 0, 'INT'); $bildbeibehalten = $jInput->get('bildbeibehalten', 0, 'INT'); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_mitglieder&teamid=' . $teamid); } $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $teamid"; $teams = loadObjectList($db, $query); if (count($teams) < 1) die ("Wrong id"); $team = $teams[0]; $teamgruppe_id = $team->teamgruppe_id != null ? $team->teamgruppe_id : $teamid; if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($team->veranstaltung_id)) keinZugriff(); // Sicherstellen, dass Mannschaftsmitglied zum Team gehört if (!empty($id)) { $query = "SELECT * FROM #__sportsmanager_mitglied_von_team INNER JOIN #__sportsmanager_team USING (team_id) WHERE spieler_id = $id AND (team_id = $teamid OR teamgruppe_id = $teamgruppe_id)"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); } $query = "SELECT DISTINCT veranstaltung_id, team_id" . "\n FROM #__sportsmanager_team" . "\n WHERE team_id = $teamid" . (!empty($teamgruppe_id) ? " OR teamgruppe_id = $teamgruppe_id" : null); $veranstaltungen = loadObjectList($db, $query); foreach ($veranstaltungen as $v) { $status = $jInput->get('status_' . $v->veranstaltung_id, -1, 'INT'); if ($status == -1) continue; $erste_runde_typ = $jInput->get('erste_runde_typ_' . $v->veranstaltung_id, -1, 'INT'); $erste_runde = max(min(abs($jInput->get('erste_runde_' . $v->veranstaltung_id, 1, 'INT')), $erste_runde_typ == -2 ? 99 : 9999), 1); $erste_runde_platzierung_ende = max(min(abs($jInput->get('erste_runde_platzierung_ende_' . $v->veranstaltung_id, 0, 'INT')), $erste_runde + 99), 1); if ($erste_runde_typ >= 10000) $erste_runde = $erste_runde_typ; else if ($erste_runde_typ == -2) $erste_runde = 20000 + ((99 - abs($erste_runde_platzierung_ende - $erste_runde)) * 100) + 99 - min($erste_runde, $erste_runde_platzierung_ende); else if ($erste_runde_typ == 0) $erste_runde = 0; $letzte_runde_typ = $jInput->get('letzte_runde_typ_' . $v->veranstaltung_id, -1, 'INT'); $letzte_runde = max(min(abs($jInput->get('letzte_runde_' . $v->veranstaltung_id, 1, 'INT')), $letzte_runde_typ == -2 ? 99 : 9999), 1); $letzte_runde_platzierung_ende = max(min(abs($jInput->get('letzte_runde_platzierung_ende_' . $v->veranstaltung_id, 0, 'INT')), $letzte_runde + 99), 1); if ($letzte_runde_typ >= 10000) $letzte_runde = $letzte_runde_typ; else if ($letzte_runde_typ == -2) $letzte_runde = 20000 + ((99 - abs($letzte_runde_platzierung_ende - $letzte_runde)) * 100) + 99 - min($letzte_runde, $letzte_runde_platzierung_ende); else if ($letzte_runde_typ == 0) $letzte_runde = 0; if ($letzte_runde != 0 && $erste_runde != 0 && $erste_runde > $letzte_runde) { $t = $erste_runde; $erste_runde = $letzte_runde; $letzte_runde = $t; } if ($id == 0) { foreach ($spielerids as $spielerid) { if ($status == 0) continue; $query = "SELECT mitglied_von_team_id FROM #__sportsmanager_mitglied_von_team WHERE team_id = $v->team_id AND spieler_id = '" . $db->escape($spielerid) . "'"; $rows = loadObjectList($db, $query); if (count($rows) > 0) continue; $query = "INSERT #__sportsmanager_mitglied_von_team" . "\n SET spieler_id = '" . $db->escape($spielerid) . "'," . "\n team_id = '$v->team_id'," . "\n erster_spieltag = " . ($erste_runde == 0 ? "NULL" : "'$erste_runde'") . "," . "\n letzter_spieltag = " . ($letzte_runde == 0 ? "NULL" : "'$letzte_runde'") . "," . "\n ausgetreten = " . ($status == 2 ? "TRUE" : "FALSE") . ";"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } else { $query = "SELECT mitglied_von_team_id FROM #__sportsmanager_mitglied_von_team WHERE team_id = $v->team_id AND spieler_id = $id"; $rows = loadObjectList($db, $query); if ($status == 0) { foreach ($rows as $row) { $query = "DELETE FROM #__sportsmanager_mitglied_von_team WHERE mitglied_von_team_id = " . $row->mitglied_von_team_id; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } bildLoeschen("mannschaftsmitglieder", $row->mitglied_von_team_id); } } else { if (count($rows) == 0) { $query = "INSERT #__sportsmanager_mitglied_von_team" . "\n SET spieler_id = '$id'," . "\n team_id = '$v->team_id'," . "\n erster_spieltag = " . ($erste_runde == 0 ? "NULL" : "'$erste_runde'") . "," . "\n letzter_spieltag = " . ($letzte_runde == 0 ? "NULL" : "'$letzte_runde'") . "," . "\n ausgetreten = " . ($status == 2 ? "TRUE" : "FALSE"); } else { $query = "UPDATE #__sportsmanager_mitglied_von_team" . "\n SET erster_spieltag = " . ($erste_runde == 0 ? "NULL" : "'$erste_runde'") . "," . "\n letzter_spieltag = " . ($letzte_runde == 0 ? "NULL" : "'$letzte_runde'") . "," . "\n ausgetreten = " . ($status == 2 ? "TRUE" : "FALSE") . "\n WHERE mitglied_von_team_id = " . $rows[0]->mitglied_von_team_id; } $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } if ($bildbeibehalten == 0) { foreach ($rows as $row) { bildLoeschen("mannschaftsmitglieder", $row->mitglied_von_team_id); if (!empty($_FILES["bild"]["tmp_name"])) { if (is_uploaded_file($_FILES["bild"]["tmp_name"])) { $size = getimagesize($_FILES["bild"]["tmp_name"]); if (!$size || ($size[2] != IMAGETYPE_JPEG && $size[2] != IMAGETYPE_PNG) || ($size[0] < 60 || $size[1] < 60 || $size[0] > 8192 || $size[1] > 8192)) { redirectSportsManagerURL('&task=admin_mitglieder&teamid=' . $teamid, "Das Bild wurde nicht gespeichert, da es nicht im JPG/PNG-Format mit mindestens 90*90 und maximal 8192*8192 Bildpunkten vorliegt."); } $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'mannschaftsmitglieder'; if (!bildKopierenAngepasst($_FILES["bild"]["tmp_name"], $bilder_pfad . DIRECTORY_SEPARATOR . $row->mitglied_von_team_id . ($size[2] == IMAGETYPE_PNG ? '.png' : '.jpg'), 180, 240, 1)) { redirectSportsManagerURL('&task=admin_mitglieder&teamid=' . $teamid, "Das Bild konnte nicht an die Zielposition kopiert werden."); } } } } } } } } $query = "SELECT team_id" . "\n FROM #__sportsmanager_team" . "\n WHERE team_id != $teamid AND teamgruppe_id = $teamgruppe_id"; $bestehende_weitere_veranstaltungen_beruecksichtigt = loadObjectList($db, $query); foreach ($bestehende_weitere_veranstaltungen_beruecksichtigt as $bestehende_weitere_veranstaltung_beruecksichtigt) mannschaftsgruppe_verknuepfen($teamid, $bestehende_weitere_veranstaltung_beruecksichtigt->team_id, false, false, false); redirectSportsManagerURL('&task=admin_mitglieder&teamid=' . $teamid); } function adminBegegnungen(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(true); $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $veranstaltung = $rows[0]; $modus_id = $veranstaltung->modus_id; $query = "SELECT * FROM #__sportsmanager_teamspiel_modus WHERE teamspiel_modus_id = $modus_id"; $rows = loadObjectList($db, $query); $modus = null; if (count($rows) == 1) $modus = $rows[0]; $query = "SELECT t1.*, t2.teamname AS heim_name, t3.teamname AS gast_name, t4.unbestaetigtes_ergebnis_id, t4.zwischenergebnis, t2.nichtraucherschutz AS heim_nichtraucherschutz, t3.nichtraucherschutz AS gast_nichtraucherschutz," . "\n EXISTS(SELECT * FROM #__sportsmanager_begegnung_historie USE INDEX (begegnung_id) WHERE #__sportsmanager_begegnung_historie.begegnung_id = t1.begegnung_id AND aktion IN (1, 5)) AS verlegt," . "\n (SELECT IF(#__sportsmanager_begegnung_historie.aktion NOT IN (0, 3, 4), NULL, #__sportsmanager_begegnung_historie.eingetragen) AS eingetragen FROM #__sportsmanager_begegnung_historie USE INDEX (begegnung_id) WHERE #__sportsmanager_begegnung_historie.begegnung_id = t1.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) AS verlegung_eingetragen," . "\n UNIX_TIMESTAMP(t1.zeitpunkt) AS termin_spiel," . "\n (" . "\n SELECT UNIX_TIMESTAMP(zeitpunkt)" . "\n FROM #__sportsmanager_begegnung_historie" . "\n WHERE begegnung_id = t1.begegnung_id AND aktion = 2" . "\n ORDER BY begegnung_historie_id ASC" . "\n LIMIT 1" . "\n ) AS termin_original," . "\n (" . "\n SELECT team_id" . "\n FROM #__sportsmanager_begegnung_historie" . "\n WHERE begegnung_id = t1.begegnung_id AND aktion IN (0, 3)" . "\n ORDER BY begegnung_historie_id ASC" . "\n LIMIT 1" . "\n ) AS verantwortliches_team," . "\n (" . "\n SELECT UNIX_TIMESTAMP(zeitpunkt)" . "\n FROM #__sportsmanager_begegnung_historie" . "\n WHERE begegnung_id = t1.begegnung_id AND aktion = 1" . "\n ORDER BY begegnung_historie_id ASC" . "\n LIMIT 1" . "\n ) AS termin_akzeptiert," . "\n (" . "\n SELECT UNIX_TIMESTAMP(eingetragen)" . "\n FROM #__sportsmanager_begegnung_historie" . "\n WHERE begegnung_id = t1.begegnung_id AND aktion = 6" . "\n ORDER BY begegnung_historie_id ASC" . "\n LIMIT 1" . "\n ) AS ergebnis_vorgeschlagen," . "\n (" . "\n SELECT UNIX_TIMESTAMP(eingetragen)" . "\n FROM #__sportsmanager_begegnung_historie" . "\n WHERE begegnung_id = t1.begegnung_id AND aktion = 7" . "\n ORDER BY begegnung_historie_id ASC" . "\n LIMIT 1" . "\n ) AS ergebnis_akzeptiert," . "\n (" . "\n SELECT COUNT(*) FROM #__sportsmanager_teamspiel" . "\n WHERE begegnung_id = t1.begegnung_id" . "\n AND (heim_spieler_1_id = 0 OR heim_spieler_2_id = 0 OR gast_spieler_1_id = 0 OR gast_spieler_2_id = 0)" . "\n ) AS fehlende_spieler" . "\n FROM #__sportsmanager_begegnung AS t1" . "\n LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id" . "\n LEFT JOIN #__sportsmanager_team AS t3 ON t1.gast_team_id = t3.team_id" . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS t4 ON t1.begegnung_id = t4.begegnung_id" . "\n WHERE t2.veranstaltung_id = $veranstaltungId" . "\n ORDER BY " . (($veranstaltung->unterteilung == 0 || $veranstaltung->unterteilung == 1) ? "t1.spieltag, t1.spiel_nr, " : "") . "t1.zeitpunkt, heim_name"; $rows = loadObjectList($db, $query); HTML_sportsmanager_admin::adminBegegnungen($veranstaltung, $modus, $rows); } function adminEditBegegnung(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $id = $jInput->get('id', 0, 'INT'); $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(true); if (empty($id)) { $query = "SELECT #__sportsmanager_begegnung.*" . "\n FROM #__sportsmanager_veranstaltung" . "\n INNER JOIN #__sportsmanager_team USING (veranstaltung_id)" . "\n INNER JOIN #__sportsmanager_begegnung ON team_id = heim_team_id" . "\n WHERE veranstaltung_id = $veranstaltungId" . "\n ORDER BY zeitpunkt DESC LIMIT 1"; $rows = loadObjectList($db, $query); $row = count($rows) < 1 ? null : $rows[0]; // Falls keine Begegnung als Vorlage verfügbar ist } else { $query = "SELECT * FROM #__sportsmanager_begegnung WHERE begegnung_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id!"); $row = $rows[0]; // Sicherstellen, dass mindestens ein Team zu Veranstaltung gehört $query = "SELECT *" . "\n FROM #__sportsmanager_team" . "\n WHERE team_id = $row->heim_team_id AND veranstaltung_id = $veranstaltungId"; $teams = loadObjectList($db, $query); if (count($teams) < 1) die ("Wrong id!"); } $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $veranstaltung = $rows[0]; $query = "SELECT *" . "\n FROM #__sportsmanager_team" . "\n WHERE veranstaltung_id = $veranstaltungId" . "\n ORDER BY teamname"; $teams = loadObjectList($db, $query); // Vorgeschlagene Termine ermitteln $query = "SELECT #__sportsmanager_begegnung_historie.*, team.teamname as team, user.username, user.name, verantwortlich_team.teamname as verantwortlich_team" . "\n FROM #__sportsmanager_begegnung_historie" . "\n LEFT JOIN #__sportsmanager_team AS team USING (team_id)" . "\n LEFT JOIN #__sportsmanager_team AS verantwortlich_team ON verantwortlich_team.team_id = verantwortlich_team_id" . "\n LEFT JOIN #__users AS user ON user.id = user_id" . "\n WHERE begegnung_id = $id" . "\n ORDER BY begegnung_historie_id DESC"; $verlegen_aktionen = loadObjectList($db, $query); $query = "SELECT *" . "\n FROM #__sportsmanager_spielort" . "\n ORDER BY ortsname, name, ortsteil"; $spielorte = loadObjectList($db, $query); HTML_sportsmanager_admin::adminEditBegegnung($veranstaltung, $row, $id == null, $teams, $spielorte); HTML_sportsmanager_admin::adminVerlegenVerlauf($verlegen_aktionen); } #[NoReturn] function adminSaveBegegnung(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $id = $jInput->get('id', 0, 'INT'); $update = $id != 0; $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId . '#id' . $id); } $datum = normalisiertesDatum($jInput->get('datum_jahr', 0, 'INT') == 0 ? null : sprintf("%04d-%02d-%02d", $jInput->get('datum_jahr', 0, 'INT'), $jInput->get('datum_monat', 0, 'INT'), $jInput->get('datum_tag', 0, 'INT'))); $uhrzeit = normalisierteUhrzeit(sprintf(" %02d-%02d-00", $jInput->get('uhrzeit_stunden', 0, 'INT'), $jInput->get('uhrzeit_minuten', 0, 'INT'))); $zeitpunkt = $datum == null || $uhrzeit == null ? null : ($datum . " " . $uhrzeit); $heim_team_id = $jInput->get('heim_team_id', 0, 'INT'); $gast_team_id = $jInput->get('gast_team_id', 0, 'INT'); $spielort_id = $jInput->get('spielort_id', 0, 'INT'); $tisch = $db->escape(trim($jInput->get('tisch', '', 'RAW'))); $nichtraucherschutz = $jInput->get('nichtraucherschutz', 0, 'INT'); $rundentyp = $jInput->get('rundentyp', -1, 'INT'); $runde = max(min(abs($jInput->get('runde', 1, 'INT')), $rundentyp == -2 ? 99 : 9999), 1); $platzierung_ende = max(min(abs($jInput->get('platzierung_ende', 0, 'INT')), $runde + 99), 1); $aktualisieren_ab_datum = $datum; if ($rundentyp >= 10000) $runde = $rundentyp; else if ($rundentyp == -2) $runde = 20000 + ((99 - abs($platzierung_ende - $runde)) * 100) + 99 - min($runde, $platzierung_ende); else if ($rundentyp == 0) $runde = 0; $query = "SELECT status, elo_wertung" . "\n FROM #__sportsmanager_veranstaltung" . "\n WHERE veranstaltung_id = $veranstaltungId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong Id!"); $veranstaltung = $rows[0]; // Sicherstellen, dass Teams zu Veranstaltung gehören $query = "SELECT *" . "\n FROM #__sportsmanager_team" . "\n WHERE team_id = $heim_team_id AND veranstaltung_id = $veranstaltungId"; $teams = loadObjectList($db, $query); if (count($teams) < 1) die ("Wrong id!"); $heim_team = $teams[0]; $query = "SELECT *" . "\n FROM #__sportsmanager_team" . "\n WHERE team_id = $gast_team_id AND veranstaltung_id = $veranstaltungId"; $teams = loadObjectList($db, $query); if (count($teams) < 1) die ("Wrong id!"); $gast_team = $teams[0]; $begegnung = null; $user_id = isExternalDatabase() ? 0 : Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id; if ($id == 0) { $query = "INSERT INTO #__sportsmanager_begegnung (zeitpunkt, spieltag, heim_team_id, gast_team_id, spielort_id, tisch, nichtraucherschutz)" . "\n VALUES (" . ($zeitpunkt != null ? "'$zeitpunkt'" : "NULL") . ", " . ($runde != null ? "'$runde'" : "NULL") . ", '$heim_team_id', '$gast_team_id', " . ($spielort_id != 0 ? "'$spielort_id'" : "NULL") . ", '$tisch', '$nichtraucherschutz');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $id = $db->insertid(); } else { // Begegnung ermitteln $query = "SELECT *," . "\n (SELECT COUNT(*) FROM #__sportsmanager_begegnung_historie WHERE #__sportsmanager_begegnung_historie.begegnung_id = #__sportsmanager_begegnung.begegnung_id) AS verlegen_aktionen" . "\n FROM #__sportsmanager_begegnung" . "\n WHERE begegnung_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id!"); $begegnung = $rows[0]; if (!empty($begegnung->zeitpunkt) && substr($begegnung->zeitpunkt, 0, 10) < $aktualisieren_ab_datum) $aktualisieren_ab_datum = substr($begegnung->zeitpunkt, 0, 10); if ($begegnung->heim_team_id != $heim_team_id || $begegnung->gast_team_id != $gast_team_id) { $query = "DELETE FROM #__sportsmanager_begegnung_historie WHERE begegnung_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } else if ($begegnung->zeitpunkt != $zeitpunkt && $begegnung->verlegen_aktionen != 0) { $aktueller_zeitpunkt = date('Y-m-d H:i:s'); $query = "INSERT INTO #__sportsmanager_begegnung_historie (begegnung_id, aktion, zeitpunkt, user_id, team_id, verantwortlich_team_id, kommentar, eingetragen)" . "\n VALUES ($id, 5, " . ($zeitpunkt != null ? "'$zeitpunkt'" : "NULL") . ", '$user_id', NULL, NULL, NULL, '$aktueller_zeitpunkt');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } if ($begegnung->heim_team_id != $heim_team_id || $begegnung->gast_team_id != $gast_team_id || $begegnung->zeitpunkt != $zeitpunkt || $begegnung->spieltag != $runde || $begegnung->spielort_id != $spielort_id || (empty($begegnung->tisch) != empty($tisch) || $begegnung->tisch != $tisch) || $begegnung->nichtraucherschutz != $nichtraucherschutz) { $query = "UPDATE #__sportsmanager_begegnung" . "\n SET zeitpunkt = " . ($zeitpunkt != null ? "'$zeitpunkt'" : "NULL") . "," . "\n spieltag = " . ($runde != null ? "'$runde'" : "NULL") . "," . "\n heim_team_id = '$heim_team_id'," . "\n gast_team_id = '$gast_team_id'," . "\n spielort_id = " . ($spielort_id != 0 ? "'$spielort_id'" : "NULL") . "," . "\n tisch = '$tisch'," . "\n nichtraucherschutz = '$nichtraucherschutz'" . "\n WHERE begegnung_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } if ($veranstaltung->status > 0) { if ($update && (empty($begegnung->tisch) != empty($tisch) || $begegnung->tisch != $tisch)) { $query = "SELECT *," . "\n (SELECT COUNT(*) FROM #__sportsmanager_begegnung_historie WHERE #__sportsmanager_begegnung_historie.begegnung_id = #__sportsmanager_begegnung.begegnung_id) AS verlegen_aktionen" . "\n FROM #__sportsmanager_begegnung" . "\n WHERE begegnung_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id!"); $begegnung = $rows[0]; begegnungTischChanged($begegnung, $heim_team, $gast_team); } if ($veranstaltung->elo_wertung > 0) { wannGespieltAktualisieren(); eloAktualisieren($aktualisieren_ab_datum); einstufungAktualisieren(); } } redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId . '#id' . $id); } function adminRemoveBegegnung(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $id = $jInput->get('id', 0, 'INT'); $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(true); // Sicherstellen, dass Begegnung zu Veranstaltung gehört und Elo-Status abrufen $query = "SELECT status, elo_wertung, zeitpunkt" . "\n FROM #__sportsmanager_begegnung" . "\n INNER JOIN #__sportsmanager_team ON heim_team_id = team_id" . "\n INNER JOIN #__sportsmanager_veranstaltung USING (veranstaltung_id)" . "\n WHERE begegnung_id = $id AND veranstaltung_id = $veranstaltungId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) { return; } $row = $rows[0]; $elo_aktualisieren = $row->status != 0 && $row->elo_wertung != 0; $aktualisieren_ab_datum = !empty($row->zeitpunkt) ? substr($row->zeitpunkt, 0, 10) : null; $query = "DELETE FROM #__sportsmanager_begegnung_historie WHERE begegnung_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_unbestaetigtes_ergebnis WHERE begegnung_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_teamspiel WHERE begegnung_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_begegnung WHERE begegnung_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } if ($elo_aktualisieren) { wannGespieltAktualisieren(); eloAktualisieren($aktualisieren_ab_datum); einstufungAktualisieren(); } spielerstatistikAktualisieren(0, $veranstaltungId); teamstatistikAktualisieren($veranstaltungId); redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId); } #[NoReturn] function adminHeimtauschBegegnung(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $id = $jInput->get('id', 0, 'INT'); $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(true); $query = "SELECT * FROM #__sportsmanager_begegnung WHERE begegnung_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id!"); $row = $rows[0]; // Sicherstellen, dass mindestens ein Team zur Veranstaltung gehört $query = "SELECT *" . "\n FROM #__sportsmanager_team" . "\n WHERE team_id = $row->heim_team_id AND veranstaltung_id = $veranstaltungId" . "\n ORDER BY teamname"; $teams = loadObjectList($db, $query); if (count($teams) < 1) die ("Wrong id!"); $query = "UPDATE #__sportsmanager_begegnung" . "\n SET heim_team_id = (@temp_heim_team_id := heim_team_id), heim_team_id = gast_team_id," . "\n gast_team_id = @temp_heim_team_id," . "\n heim_punkte = (@temp_heim_punkte := heim_punkte), heim_punkte = gast_punkte," . "\n gast_punkte = @temp_heim_punkte," . "\n heim_spielpunkte = (@temp_heim_spielpunkte := heim_spielpunkte), heim_spielpunkte = gast_spielpunkte," . "\n gast_spielpunkte = @temp_heim_spielpunkte" . "\n WHERE begegnung_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "UPDATE #__sportsmanager_teamspiel" . "\n SET heim_spieler_1_id = (@temp_heim_spieler_1_id := heim_spieler_1_id), heim_spieler_1_id = gast_spieler_1_id," . "\n gast_spieler_1_id = @temp_heim_spieler_1_id," . "\n heim_spieler_2_id = (@temp_heim_spieler_2_id := heim_spieler_2_id), heim_spieler_2_id = gast_spieler_2_id," . "\n gast_spieler_2_id = @temp_heim_spieler_2_id," . "\n teamspiel_heim_punkte = (@temp_teamspiel_heim_punkte := teamspiel_heim_punkte), teamspiel_heim_punkte = teamspiel_gast_punkte," . "\n teamspiel_gast_punkte = @temp_teamspiel_heim_punkte," . "\n teamspiel_heim_spielpunkte = (@temp_teamspiel_heim_spielpunkte := teamspiel_heim_spielpunkte), teamspiel_heim_spielpunkte = teamspiel_gast_spielpunkte," . "\n teamspiel_gast_spielpunkte = @temp_teamspiel_heim_spielpunkte" . "\n WHERE begegnung_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } termin_aktualisieren($id); redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId . '#id' . $id); } function adminEditBegegnungSpielplan($bestaetigen): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $user_id = isExternalDatabase() ? 0 : (isJson() ? getUserID() : Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id); $erneut_oeffnen = $jInput->get('erneut_oeffnen', 0, 'INT'); if ($bestaetigen == 2) { $pin = $db->escape(trim($jInput->get('pin', '', 'RAW'))); if (empty($pin)) { $encrypted_pin = $db->escape($jInput->get('epin', '', 'RAW')); if (empty($encrypted_pin)) { redirectSportsManagerURL(null, "Keine PIN eingegeben."); } $id = $jInput->get('id', 0, 'INT'); if ($id == 0) die("Missing id!"); $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); $pin = decrypt($encrypted_pin, "a9cZ" . $veranstaltungId . "oDS7" . $id . "2eA"); } $query = "SELECT t1.begegnung_id, t5.veranstaltung_id, IF(t2.pin = '$pin', heim_team_id, gast_team_id) AS aktion_team_id, IF(t2.pin = '$pin', gast_team_id, heim_team_id) AS anderes_team_id" . "\n FROM #__sportsmanager_begegnung AS t1" . "\n LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id" . "\n LEFT JOIN #__sportsmanager_team AS t3 ON t1.gast_team_id = t3.team_id" . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS t4 ON t1.begegnung_id = t4.begegnung_id" . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t2.veranstaltung_id = t5.veranstaltung_id" . "\n WHERE t5.status > 0 " . kategorieFilter("AND t5.kategorie IN") . " AND ((ISNULL(heim_punkte) AND ISNULL(gast_punkte)) OR zwischenergebnis OR NOT ISNULL(unbestaetigtes_ergebnis_id)) AND ((NOT ISNULL(t2.pin) AND t2.pin = '$pin') OR (NOT ISNULL(t3.pin) AND t3.pin = '$pin'))" . "\n ORDER BY t1.zeitpunkt" . "\n LIMIT 1"; $rows = loadObjectList($db, $query); if (count($rows) == 0) { redirectSportsManagerURL(null, "Keine offene Begegnung zur PIN gefunden."); } $id = $rows[0]->begegnung_id; $veranstaltungId = $rows[0]->veranstaltung_id; $aus_uebersicht = 0; $anderes_team_id = $rows[0]->anderes_team_id; } else { $pin = ""; $id = $jInput->get('id', 0, 'INT'); if ($id == 0) die("Missing id!"); $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); $aus_uebersicht = $jInput->get('aus_uebersicht', 0, 'INT'); } $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $veranstaltung = $rows[0]; $teamspiel_modus_id = $veranstaltung->modus_id; $query = "SELECT * FROM #__sportsmanager_teamspiel_modus WHERE teamspiel_modus_id = $teamspiel_modus_id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $teamspiel_modus = $rows[0]; $query = "SELECT t1.*, t2.unbestaetigtes_ergebnis_id, t2.kommentar, t2.zwischenergebnis,"; $query .= "\n (SELECT COUNT(*) FROM #__sportsmanager_berechtigt_fuer_team AS tt1 WHERE tt1.berechtigt_user_id = $user_id AND (tt1.berechtigt_team_id = t1.heim_team_id OR tt1.berechtigt_team_id = t1.gast_team_id)) AS berechtigt_fuer_team_eintragen,"; if ($bestaetigen != 2) { $query .= "\n (SELECT COUNT(*) FROM #__sportsmanager_berechtigt_fuer_team AS tt1 WHERE tt1.berechtigt_user_id = $user_id AND ((tt1.berechtigt_team_id = t1.heim_team_id AND t4.vorschlagendes_team_id = t1.gast_team_id) OR (tt1.berechtigt_team_id = t1.gast_team_id AND t4.vorschlagendes_team_id = t1.heim_team_id))) AS berechtigt_fuer_team_akzeptieren"; } else { $query .= "\n IF(t4.vorschlagendes_team_id = $anderes_team_id, 1, 0) AS berechtigt_fuer_team_akzeptieren"; } $query .= "\n FROM #__sportsmanager_begegnung AS t1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS t2 ON t1.begegnung_id = t2.begegnung_id" . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS t4 ON t1.begegnung_id = t4.begegnung_id" . "\n WHERE t1.begegnung_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id!"); $begegnung = $rows[0]; // Vorgeschlagene Termine ermitteln $query = "SELECT #__sportsmanager_begegnung_historie.*, team.teamname as team, user.username, user.name, verantwortlich_team.teamname as verantwortlich_team" . "\n FROM #__sportsmanager_begegnung_historie" . "\n LEFT JOIN #__sportsmanager_team AS team USING (team_id)" . "\n LEFT JOIN #__sportsmanager_team AS verantwortlich_team ON verantwortlich_team.team_id = verantwortlich_team_id" . "\n LEFT JOIN #__users AS user ON user.id = user_id" . "\n WHERE begegnung_id = $id" . "\n ORDER BY begegnung_historie_id DESC"; $verlegen_aktionen = loadObjectList($db, $query); if ($bestaetigen == 1) { if ($begegnung->unbestaetigtes_ergebnis_id == null && ($begegnung->heim_punkte != 0 || $begegnung->gast_punkte != 0)) keinZugriff(); $query = "SELECT t1.berechtigt_team_id FROM #__sportsmanager_berechtigt_fuer_team AS t1, #__sportsmanager_begegnung WHERE begegnung_id = $id AND berechtigt_user_id = $user_id AND (berechtigt_team_id = heim_team_id OR berechtigt_team_id = gast_team_id)"; $rows = loadObjectList($db, $query); if (count($rows) == 0) keinZugriff(true); } else if ($bestaetigen !== 2) { if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(true); } $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $begegnung->heim_team_id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $heim_team = $rows[0]; if ($veranstaltungId != $heim_team->veranstaltung_id) die("Wrong id!"); $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $begegnung->gast_team_id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $gast_team = $rows[0]; $query = "SELECT * FROM #__sportsmanager_teamspiel WHERE begegnung_id = $id ORDER BY teamspiel_nummer"; $spiele = loadObjectList($db, $query); $query = "SELECT *" . "\n FROM #__sportsmanager_mitglied_von_team as t1" . "\n INNER JOIN #__sportsmanager_spieler AS t2 USING (spieler_id)" . "\n WHERE team_id = $begegnung->heim_team_id AND NOT t1.ausgetreten " . ($begegnung->spieltag != null ? "AND (ISNULL(t1.erster_spieltag) OR t1.erster_spieltag <= $begegnung->spieltag) AND (ISNULL(t1.letzter_spieltag) OR $begegnung->spieltag <= t1.letzter_spieltag) " : "") . "\n ORDER BY nachname, vorname"; $heim_spieler = loadObjectList($db, $query); $query = "SELECT *" . "\n FROM #__sportsmanager_mitglied_von_team as t1" . "\n INNER JOIN #__sportsmanager_spieler AS t2 USING (spieler_id)" . "\n WHERE team_id = $begegnung->gast_team_id AND NOT t1.ausgetreten " . ($begegnung->spieltag != null ? "AND (ISNULL(t1.erster_spieltag) OR t1.erster_spieltag <= $begegnung->spieltag) AND (ISNULL(t1.letzter_spieltag) OR $begegnung->spieltag <= t1.letzter_spieltag) " : "") . "\n ORDER BY nachname, vorname"; $gast_spieler = loadObjectList($db, $query); $encrypted_pin = encrypt($pin, "a9cZ" . $veranstaltung->veranstaltung_id . "oDS7" . $id . "2eA"); // Spielort ermitteln $spielortQuery = "SELECT name FROM #__sportsmanager_spielort WHERE spielort_id = \"" . (Factory::getContainer()->get(SiteApplication::class)->input->getCmd('spielort_heim') == 1 ? $heim_team->heimspielort_id : $begegnung->spielort_id) . "\""; $begegnung->spielort_name = loadResult($db, $spielortQuery); if (isJson()) { $response = JSON_sportsmanager::adminEditBegegnungSpielplan($bestaetigen, $veranstaltung, $begegnung, $heim_team, $gast_team, $spiele, $heim_spieler, $gast_spieler, $teamspiel_modus); JSON_sportsmanager::JSON($response); } else { HTML_sportsmanager_admin::adminEditBegegnungSpielplan($bestaetigen, $veranstaltung, $begegnung, $heim_team, $gast_team, $spiele, $heim_spieler, $gast_spieler, $teamspiel_modus, $encrypted_pin, count($verlegen_aktionen), $erneut_oeffnen, $aus_uebersicht); HTML_sportsmanager_admin::adminVerlegenVerlauf($verlegen_aktionen); } } function adminSaveBegegnungSpielplan(): void { $app = Factory::getContainer()->get(SiteApplication::class); $db = getDatabase(); $jInput = $app->input; $begegnung_input = isJson() ? $jInput->json : $jInput; $user_id = isExternalDatabase() ? 0 : (isJson() ? getUserID() : Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id); $id = $jInput->get('id', 0, 'INT'); $bestaetigen = $begegnung_input->get('bestaetigen', 0, 'INT'); $zwischenergebnis = isJson() && $jInput->getMethod() === 'PATCH' ? true : $begegnung_input->get('live', false, 'BOOL'); $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) { abortWithError("Missing id!"); } $kommentar = $db->escape($jInput->get('kommentar', '', 'RAW')); $aus_uebersicht = $jInput->get('aus_uebersicht', 0, 'INT'); $anzahl_historie = $jInput->get('anzahl_historie', 0, 'INT'); $erneut_oeffnen = $jInput->get('erneut_oeffnen', 0, 'INT'); $heim_team_id = $jInput->get('heim_team_id', 0, 'INT'); $gast_team_id = $jInput->get('gast_team_id', 0, 'INT'); if ($jInput->get('cancel', false, 'BOOL')) { if ($bestaetigen == 1) { if ($aus_uebersicht) { redirectSportsManagerURL('#id' . $id); } else { redirectSportsManagerURL('&task=veranstaltung&veranstaltungid=' . $veranstaltungId . '#id' . $id); } } else if ($bestaetigen == 2) { if ($aus_uebersicht) { redirectSportsManagerURL(); } else { redirectSportsManagerURL('&task=veranstaltung&veranstaltungid=' . $veranstaltungId); } } else { redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId . '#id' . $id); } } $benutzer_ist_moderator = benutzerZugriff("mannschaftswettbewerb_aendern") || benutzerVeranstaltungModerator($veranstaltungId); // Abfrage muss vor LOCK erfolgen, da sonst die Abfrage mangels Lock auf Moderator-Tabelle scheitert $query = "SELECT #__sportsmanager_begegnung.*, unbestaetigtes_ergebnis_id, zwischenergebnis," . " (SELECT COUNT(*) FROM #__sportsmanager_begegnung_historie WHERE #__sportsmanager_begegnung_historie.begegnung_id = #__sportsmanager_begegnung.begegnung_id) AS verlegen_aktionen" . "\n FROM #__sportsmanager_begegnung" . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id" . "\n WHERE #__sportsmanager_begegnung.begegnung_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) { abortWithError("Wrong id!"); } $begegnung = $rows[0]; $mannschaften_vertauscht = $begegnung->heim_team_id == $gast_team_id || $begegnung->gast_team_id == $heim_team_id; $aktualisieren_ab_datum = !empty($begegnung->zeitpunkt) ? substr($begegnung->zeitpunkt, 0, 10) : null; // Veranstaltung ermitteln $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) { abortWithError("Wrong id!"); } $veranstaltung = $rows[0]; // Sicherstellen, dass mindestens ein Team zu Veranstaltung gehört $query = "SELECT *" . "\n FROM #__sportsmanager_team" . "\n WHERE team_id = $begegnung->heim_team_id AND veranstaltung_id = $veranstaltungId"; $teams = loadObjectList($db, $query); if (count($teams) < 1) { abortWithError("Wrong id!"); } // Spielmodus ermitteln $modus_id = $veranstaltung->modus_id; $query = "SELECT * FROM #__sportsmanager_teamspiel_modus WHERE teamspiel_modus_id = $modus_id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) { abortWithError("Wrong id!"); } $teamspiel_modus = $rows[0]; $spielpunkte_wertung_einzel = $teamspiel_modus->spielpunkte_wertung_einzel; $spielpunkte_wertung_doppel = $teamspiel_modus->spielpunkte_wertung_doppel; $modus = explode("|", $teamspiel_modus->modus); $spieltypen = isset($modus[0]) ? explode(",", $modus[0]) : array(); $vorschlagendes_team_id = null; if ($bestaetigen == 1) { if ($begegnung->unbestaetigtes_ergebnis_id == null && ($begegnung->heim_punkte != 0 || $begegnung->gast_punkte != 0)) { keinZugriff(); } $query = "SELECT #__sportsmanager_berechtigt_fuer_team.berechtigt_team_id FROM #__sportsmanager_berechtigt_fuer_team, #__sportsmanager_begegnung WHERE begegnung_id = $id AND berechtigt_user_id = $user_id AND (berechtigt_team_id = heim_team_id OR berechtigt_team_id = gast_team_id)"; $rows = loadObjectList($db, $query); if (count($rows) == 0) { keinZugriff(); } $vorschlagendes_team_id = $rows[0]->berechtigt_team_id; } else if ($bestaetigen == 2) { if ($begegnung->unbestaetigtes_ergebnis_id == null && ($begegnung->heim_punkte != 0 || $begegnung->gast_punkte != 0)) { keinZugriff(); } $encrypted_pin = $db->escape($jInput->get('pin', '', 'RAW')); $pin = decrypt($encrypted_pin, "a9cZ" . $veranstaltungId . "oDS7" . $id . "2eA"); if (empty($pin)) { keinZugriff(); } $query = "SELECT team_id FROM #__sportsmanager_begegnung LEFT JOIN #__sportsmanager_team ON heim_team_id = team_id OR gast_team_id = team_id WHERE begegnung_id = $id AND (team_id = $begegnung->heim_team_id OR team_id = $begegnung->gast_team_id) AND NOT ISNULL(pin) AND pin = '$pin'"; $rows = loadObjectList($db, $query); if (count($rows) == 0) { keinZugriff(); } $vorschlagendes_team_id = $rows[0]->team_id; } else { if (!$benutzer_ist_moderator) { keinZugriff(); } } $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) { abortWithError("Missing id!"); } $query = "DELETE FROM #__sportsmanager_unbestaetigtes_ergebnis WHERE begegnung_id = $id;"; $db->setQuery($query); if (!$db->execute()) { abortWithError($db->stderr(true)); } if ($zwischenergebnis) { $query = "INSERT IGNORE INTO #__sportsmanager_unbestaetigtes_ergebnis (begegnung_id, vorschlagendes_team_id, zwischenergebnis, kommentar, vorgeschlagen)" . "\n VALUES ('$id', " . ($bestaetigen != 0 ? "'$vorschlagendes_team_id'" : "'0'") . ", '1', '$kommentar', now());"; $db->setQuery($query); if (!$db->execute()) { abortWithError($db->stderr(true)); } $query = "INSERT INTO #__sportsmanager_begegnung_historie (begegnung_id, aktion, zeitpunkt, user_id, team_id, verantwortlich_team_id, kommentar, eingetragen)" . "\n VALUES ($id, 9, NULL, " . ($bestaetigen != 2 ? "'$user_id'" : "NULL") . ", " . ($bestaetigen != 0 ? "'$vorschlagendes_team_id'" : "NULL") . ", NULL, NULL, now());"; $db->setQuery($query); if (!$db->execute()) { abortWithError($db->stderr(true)); } } else if ($bestaetigen != 0) { $query = "INSERT IGNORE INTO #__sportsmanager_unbestaetigtes_ergebnis (begegnung_id, vorschlagendes_team_id, kommentar, vorgeschlagen)" . "\n VALUES ('$id', '$vorschlagendes_team_id', '$kommentar', now());"; $db->setQuery($query); if (!$db->execute()) { abortWithError($db->stderr(true)); } $query = "INSERT INTO #__sportsmanager_begegnung_historie (begegnung_id, aktion, zeitpunkt, user_id, team_id, verantwortlich_team_id, kommentar, eingetragen)" . "\n VALUES ($id, 6, NULL, " . ($bestaetigen != 2 ? "'$user_id'" : "NULL") . ", '$vorschlagendes_team_id', '" . ($vorschlagendes_team_id == $begegnung->heim_team_id ? $begegnung->gast_team_id : $begegnung->heim_team_id) . "', NULL, now());"; $db->setQuery($query); if (!$db->execute()) { abortWithError($db->stderr(true)); } } else { $query = "INSERT INTO #__sportsmanager_begegnung_historie (begegnung_id, aktion, zeitpunkt, user_id, team_id, verantwortlich_team_id, kommentar, eingetragen)" . "\n VALUES ($id, 8, NULL, '$user_id', NULL, NULL, NULL, now());"; $db->setQuery($query); if (!$db->execute()) { abortWithError($db->stderr(true)); } } $query = "SELECT * FROM #__sportsmanager_teamspiel WHERE begegnung_id = $id ORDER BY teamspiel_nummer"; $spiele = loadObjectList($db, $query); $spiele_nummern = array(); foreach ($spiele as $spiel) { $spiele_nummern[$spiel->teamspiel_nummer] = $spiel; } $total_heim_punkte = 0; $total_gast_punkte = 0; $total_heim_spielpunkte = 0; $total_gast_spielpunkte = 0; $spiel_nr = 1; do { $spieltyp = $spieltypen[$spiel_nr - 1] ?? ''; $skip_spiel = $begegnung_input->get('spiel_' . $spiel_nr . '_typ', '', 'RAW') == '' && $jInput->getMethod() === 'PATCH'; $spieler_angegeben = false; $spiel_heim_spieler_1_id = null; $spiel_gast_spieler_1_id = null; $spiel_heim_spieler_2_id = null; $spiel_gast_spieler_2_id = null; if ($skip_spiel) { if (isset($spiele_nummern[$spiel_nr])) { $spiel_heim_punkte = $spiele_nummern[$spiel_nr]->teamspiel_heim_punkte; $spiel_gast_punkte = $spiele_nummern[$spiel_nr]->teamspiel_gast_punkte; } else { $spiel_heim_punkte = 0; $spiel_gast_punkte = 0; } } else { $spiel_heim_punkte_detailliert = $begegnung_input->get('spiel_' . $spiel_nr . '_heim_punkte_detailliert', array(), 'ARRAY'); $spiel_gast_punkte_detailliert = $begegnung_input->get('spiel_' . $spiel_nr . '_gast_punkte_detailliert', array(), 'ARRAY'); if (empty($spiel_heim_punkte_detailliert)) { $spiel_heim_punkte = $begegnung_input->get('spiel_' . $spiel_nr . '_heim_punkte', 0, 'INT'); $spiel_gast_punkte = $begegnung_input->get('spiel_' . $spiel_nr . '_gast_punkte', 0, 'INT'); $ergebnis_detailliert = $spiel_heim_punkte == 0 && $spiel_gast_punkte == 0 ? '' : ($spiel_heim_punkte . ":" . $spiel_gast_punkte); } else { $ergebnis_detailliert = ""; $spiel_heim_punkte = 0; $spiel_gast_punkte = 0; for ($i = 0; $i < count($spiel_heim_punkte_detailliert); $i++) { if (($spiel_heim_punkte_detailliert[$i] == 0 || empty($spiel_heim_punkte_detailliert[$i])) && ($spiel_gast_punkte_detailliert[$i] == 0 || empty($spiel_gast_punkte_detailliert[$i]))) { continue; } if (!empty($ergebnis_detailliert)) { $ergebnis_detailliert .= " "; } $punkte_heim = empty($spiel_heim_punkte_detailliert[$i]) ? "0" : $spiel_heim_punkte_detailliert[$i]; $punkte_gast = empty($spiel_gast_punkte_detailliert[$i]) ? "0" : $spiel_gast_punkte_detailliert[$i]; if ($punkte_heim > $punkte_gast) { $spiel_heim_punkte++; } else if ($punkte_gast > $punkte_heim) { $spiel_gast_punkte++; } $ergebnis_detailliert .= $punkte_heim . ":" . $punkte_gast; } } if ($spieltyp[0] == "S") { $spiel_heim_spieler_1_id = 0; $spiel_gast_spieler_1_id = 0; $spiel_heim_spieler_2_id = 0; $spiel_gast_spieler_2_id = 0; } else { $spiel_heim_spieler_1_id = $begegnung_input->get('spiel_' . $spiel_nr . '_heim_spieler_1_id', 0, 'INT'); $spiel_gast_spieler_1_id = $begegnung_input->get('spiel_' . $spiel_nr . '_gast_spieler_1_id', 0, 'INT'); if ($spieltyp[0] == "E") { $spiel_heim_spieler_2_id = 0; $spiel_gast_spieler_2_id = 0; } else { $spiel_heim_spieler_2_id = $begegnung_input->get('spiel_' . $spiel_nr . '_heim_spieler_2_id', 0, 'INT'); $spiel_gast_spieler_2_id = $begegnung_input->get('spiel_' . $spiel_nr . '_gast_spieler_2_id', 0, 'INT'); } $spieler_angegeben = $spiel_heim_spieler_1_id != 0 || $spiel_gast_spieler_1_id != 0 || $spiel_heim_spieler_2_id != 0 || $spiel_gast_spieler_2_id != 0; } if ($mannschaften_vertauscht) { $t = $spiel_heim_punkte; $spiel_heim_punkte = $spiel_gast_punkte; $spiel_gast_punkte = $t; $ergebnis_detailliert = runden_detailliert_invers($ergebnis_detailliert); $t = $spiel_heim_spieler_1_id; $spiel_heim_spieler_1_id = $spiel_gast_spieler_1_id; $spiel_gast_spieler_1_id = $t; $t = $spiel_heim_spieler_2_id; $spiel_heim_spieler_2_id = $spiel_gast_spieler_2_id; $spiel_gast_spieler_2_id = $t; } if ($zwischenergebnis && $begegnung->verlegen_aktionen != $anzahl_historie && isset($spiele_nummern[$spiel_nr])) { $spiel = $spiele_nummern[$spiel_nr]; if ($spiel_heim_punkte == 0 && $spiel_gast_punkte == 0) { $spiel_heim_punkte = $spiel->teamspiel_heim_punkte; $spiel_gast_punkte = $spiel->teamspiel_gast_punkte; } if ($spiel_heim_spieler_1_id == 0) $spiel_heim_spieler_1_id = $spiel->heim_spieler_1_id; if ($spiel_gast_spieler_1_id == 0) $spiel_gast_spieler_1_id = $spiel->gast_spieler_1_id; $spieler_angegeben = $spiel_heim_spieler_1_id != 0 || $spiel_gast_spieler_1_id != 0; if ((!empty($spieltyp) && $spieltyp[0] == "D")) { if ($spiel_heim_spieler_2_id == 0) $spiel_heim_spieler_2_id = $spiel->heim_spieler_2_id; if ($spiel_gast_spieler_2_id == 0) $spiel_gast_spieler_2_id = $spiel->gast_spieler_2_id; if (!$spieler_angegeben) $spieler_angegeben = $spiel_heim_spieler_2_id != 0 || $spiel_gast_spieler_2_id != 0; } } } if ($skip_spiel || $spiel_heim_punkte != 0 || $spiel_gast_punkte != 0 || ($zwischenergebnis && $spieler_angegeben)) { $total_heim_punkte += $spiel_heim_punkte; $total_gast_punkte += $spiel_gast_punkte; if ($spieltyp[0] != "D") { if ($spielpunkte_wertung_einzel == 2) { $spiel_heim_spielpunkte = $spiel_heim_punkte; $spiel_gast_spielpunkte = $spiel_gast_punkte; } else { if ($spiel_heim_punkte > $spiel_gast_punkte) { $spiel_heim_spielpunkte = $spielpunkte_wertung_einzel == 0 ? 2 : ($spielpunkte_wertung_einzel == 1 ? 3 : 1); $spiel_gast_spielpunkte = 0; } else if ($spiel_heim_punkte < $spiel_gast_punkte) { $spiel_heim_spielpunkte = 0; $spiel_gast_spielpunkte = $spielpunkte_wertung_einzel == 0 ? 2 : ($spielpunkte_wertung_einzel == 1 ? 3 : 1); } else if ($spiel_heim_punkte == 0 && $spiel_gast_punkte == 0) { $spiel_heim_spielpunkte = 0; $spiel_gast_spielpunkte = 0; } else if ($spielpunkte_wertung_einzel != 3) { $spiel_heim_spielpunkte = 1; $spiel_gast_spielpunkte = 1; } else { $spiel_heim_spielpunkte = 0; $spiel_gast_spielpunkte = 0; } } } else { if ($spielpunkte_wertung_doppel == 2) { $spiel_heim_spielpunkte = $spiel_heim_punkte; $spiel_gast_spielpunkte = $spiel_gast_punkte; } else { if ($spiel_heim_punkte > $spiel_gast_punkte) { $spiel_heim_spielpunkte = $spielpunkte_wertung_doppel == 0 ? 2 : ($spielpunkte_wertung_doppel == 1 ? 3 : 1); $spiel_gast_spielpunkte = 0; } else if ($spiel_heim_punkte < $spiel_gast_punkte) { $spiel_heim_spielpunkte = 0; $spiel_gast_spielpunkte = $spielpunkte_wertung_doppel == 0 ? 2 : ($spielpunkte_wertung_doppel == 1 ? 3 : 1); } else if ($spiel_heim_punkte == 0 && $spiel_gast_punkte == 0) { $spiel_heim_spielpunkte = 0; $spiel_gast_spielpunkte = 0; } else if ($spielpunkte_wertung_doppel != 3) { $spiel_heim_spielpunkte = 1; $spiel_gast_spielpunkte = 1; } else { $spiel_heim_spielpunkte = 0; $spiel_gast_spielpunkte = 0; } } } $total_heim_spielpunkte += $spiel_heim_spielpunkte; $total_gast_spielpunkte += $spiel_gast_spielpunkte; if (!$skip_spiel) { if (!isset($spiele_nummern[$spiel_nr])) { $query = "INSERT INTO #__sportsmanager_teamspiel (begegnung_id, teamspiel_nummer, heim_spieler_1_id, heim_spieler_2_id, gast_spieler_1_id, gast_spieler_2_id, teamspiel_heim_punkte, teamspiel_gast_punkte, teamspiel_heim_spielpunkte, teamspiel_gast_spielpunkte, ergebnis_detailliert)" . "\n VALUES ('$id', '$spiel_nr', '$spiel_heim_spieler_1_id', " . ($spieltyp[0] == "D" ? "'$spiel_heim_spieler_2_id'" : "NULL") . ", '$spiel_gast_spieler_1_id', " . ($spieltyp[0] == "D" ? "'$spiel_gast_spieler_2_id'" : "NULL") . ", '$spiel_heim_punkte', '$spiel_gast_punkte', '$spiel_heim_spielpunkte', '$spiel_gast_spielpunkte', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ");"; } else { $teamspiel_id = $spiele_nummern[$spiel_nr]->teamspiel_id; $query = "UPDATE #__sportsmanager_teamspiel" . "\n SET heim_spieler_1_id = '$spiel_heim_spieler_1_id'," . "\n heim_spieler_2_id = " . ($spieltyp[0] == "D" ? "'$spiel_heim_spieler_2_id'" : "NULL") . "," . "\n gast_spieler_1_id = '$spiel_gast_spieler_1_id'," . "\n gast_spieler_2_id = " . ($spieltyp[0] == "D" ? "'$spiel_gast_spieler_2_id'" : "NULL") . "," . "\n teamspiel_heim_punkte = '$spiel_heim_punkte'," . "\n teamspiel_gast_punkte = '$spiel_gast_punkte'," . "\n teamspiel_heim_spielpunkte = '$spiel_heim_spielpunkte'," . "\n teamspiel_gast_spielpunkte = '$spiel_gast_spielpunkte'," . "\n ergebnis_detailliert = " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . "\n WHERE teamspiel_id = $teamspiel_id"; } $db->setQuery($query); if (!$db->execute()) { abortWithError($db->stderr(true)); } } $spiel_nr++; } } while (isset($spieltypen[$spiel_nr - 1]) && ($skip_spiel || $spiel_heim_punkte != 0 || $spiel_gast_punkte != 0 || ($zwischenergebnis && $spieler_angegeben))); $query = "DELETE FROM #__sportsmanager_teamspiel WHERE begegnung_id = $id AND teamspiel_nummer >= $spiel_nr;"; $db->setQuery($query); if (!$db->execute()) { abortWithError($db->stderr(true)); } if ($spiel_nr > 1) { $query = "UPDATE #__sportsmanager_begegnung" . "\n SET heim_punkte = '$total_heim_punkte'," . "\n gast_punkte = '$total_gast_punkte'," . "\n heim_spielpunkte = '$total_heim_spielpunkte'," . "\n gast_spielpunkte = '$total_gast_spielpunkte'" . "\n WHERE begegnung_id = $id"; } else { $query = "UPDATE #__sportsmanager_begegnung" . "\n SET heim_punkte = NULL," . "\n gast_punkte = NULL," . "\n heim_spielpunkte = NULL," . "\n gast_spielpunkte = NULL" . "\n WHERE begegnung_id = $id"; } $db->setQuery($query); if (!$db->execute()) { abortWithError($db->stderr(true)); } // Benachrichtigung schreiben $heim_team = null; $gast_team = null; $begegnung_alt = null; if ($bestaetigen != 0) { // Begegnung ermitteln $query = "SELECT #__sportsmanager_begegnung.*, unbestaetigtes_ergebnis_id, zwischenergebnis" . "\n FROM #__sportsmanager_begegnung" . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id" . "\n WHERE #__sportsmanager_begegnung.begegnung_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id!"); $begegnung_alt = $begegnung; $begegnung = $rows[0]; // Heimteam ermitteln $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $begegnung->heim_team_id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) { abortWithError("Wrong id!"); } $heim_team = $rows[0]; // Gastteam ermitteln $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $begegnung->gast_team_id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) { abortWithError("Wrong id!"); } $gast_team = $rows[0]; } if ($bestaetigen != 0 && !$zwischenergebnis) { $mailfrom = $app->getCfg('mailfrom'); $fromname = $app->getCfg('fromname'); $subject = $heim_team->teamname . " vs. " . $gast_team->teamname . ": Ergebnis vorgeschlagen"; $body = "Zur Begegnung " . $heim_team->teamname . " gegen " . $gast_team->teamname . " am " . FormatiertesDatum($begegnung->zeitpunkt) . " in der " . $veranstaltung->bezeichnung . " wurde von " . ($vorschlagendes_team_id == $heim_team->team_id ? $heim_team->teamname : $gast_team->teamname) . " ein Ergebnis eingetragen.\n\nBestaetigen des Ergebnisses ueber " . SportsManagerURL('&task=admin_begegnung_spielplan_edit_bestaetigen&veranstaltungid=' . $veranstaltungId . '&id=' . $id, -1) . "."; $query = "SELECT * FROM #__users AS t1, #__sportsmanager_berechtigt_fuer_team AS t2 WHERE t1.id = t2.berechtigt_user_id AND (t2.berechtigt_team_id = " . $begegnung->heim_team_id . " OR t2.berechtigt_team_id = " . $begegnung->gast_team_id . ")"; $rows = loadObjectList($db, $query); if(!empty($rows)) { $mailer = Factory::getContainer()->get(MailerFactoryInterface::class)->createMailer(); $mailer->setSender($mailfrom, $fromname); $mailer->setSubject($subject); $mailer->setBody($body); foreach ($rows as $row) { $mailer->addBcc($row->email); } $mailer->send(); } } begegnungChanged($begegnung, $begegnung_alt, $modus, $heim_team, $gast_team, $spiele); if ($bestaetigen == 0) { if ($veranstaltung->status != 0) { if ($veranstaltung->elo_wertung != 0) { wannGespieltAktualisieren(); eloAktualisieren($aktualisieren_ab_datum); einstufungAktualisieren(); } } spielerstatistikAktualisieren(0, $veranstaltungId); teamstatistikAktualisieren($veranstaltungId); } if (isJson()) { begegnungSpielplan(); } else { if ($erneut_oeffnen) { redirectSportsManagerURL('&task=' . ($bestaetigen != 0 ? ($bestaetigen == 1 ? 'admin_begegnung_spielplan_edit_bestaetigen' : 'pineingabe') : 'admin_begegnung_spielplan_edit') . '&id=' . $id . '&veranstaltungid=' . $veranstaltungId . ($bestaetigen != 0 ? '_bestaetigen' : '') . '&veranstaltungid=' . $veranstaltungId . '&id=' . $id . '&erneut_oeffnen=1' . (!empty($encrypted_pin) ? ('&epin=' . $encrypted_pin) : "") . ($aus_uebersicht ? '&aus_uebersicht=1' : '')); } else if ($bestaetigen == 1) { if ($aus_uebersicht) redirectSportsManagerURL('#id' . $id); else redirectSportsManagerURL('&task=veranstaltung&veranstaltungid=' . $veranstaltungId . '#id' . $id); } else if ($bestaetigen == 2) { if ($aus_uebersicht) redirectSportsManagerURL(); else redirectSportsManagerURL('&task=veranstaltung&veranstaltungid=' . $veranstaltungId); } else { redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId . '#id' . $id); } } } #[NoReturn] function adminBegegnungSpielplanHeimtausch(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $user_id = isExternalDatabase() ? 0 : Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id; $id = $jInput->get('id', 0, 'INT'); $bestaetigen = $jInput->get('bestaetigen', 0, 'INT'); $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); $aus_uebersicht = $jInput->get('aus_uebersicht', 0, 'INT'); $heim_team_id = $jInput->get('heim_team_id', 0, 'INT'); $gast_team_id = $jInput->get('gast_team_id', 0, 'INT'); $benutzer_ist_moderator = benutzerZugriff("mannschaftswettbewerb_aendern") || benutzerVeranstaltungModerator($veranstaltungId); // Abfrage muss vor LOCK erfolgen, da sonst die Abfrage mangels Lock auf Moderator-Tabelle scheitert $query = "SELECT #__sportsmanager_begegnung.*, unbestaetigtes_ergebnis_id, zwischenergebnis," . " (SELECT COUNT(*) FROM #__sportsmanager_begegnung_historie WHERE #__sportsmanager_begegnung_historie.begegnung_id = #__sportsmanager_begegnung.begegnung_id) AS verlegen_aktionen" . "\n FROM #__sportsmanager_begegnung" . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id" . "\n WHERE #__sportsmanager_begegnung.begegnung_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id!"); $begegnung = $rows[0]; $mannschaften_vertauscht = $begegnung->heim_team_id == $gast_team_id || $begegnung->gast_team_id == $heim_team_id; // Veranstaltung ermitteln $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $veranstaltung = $rows[0]; // Sicherstellen, dass mindestens ein Team zu Veranstaltung gehört $query = "SELECT *" . "\n FROM #__sportsmanager_team" . "\n WHERE team_id = $begegnung->heim_team_id AND veranstaltung_id = $veranstaltungId"; $teams = loadObjectList($db, $query); if (count($teams) < 1) die ("Wrong id!"); // Spielmodus ermitteln $modus_id = $veranstaltung->modus_id; $query = "SELECT * FROM #__sportsmanager_teamspiel_modus WHERE teamspiel_modus_id = $modus_id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $modus = $rows[0]; if ($bestaetigen == 1) { if ($begegnung->unbestaetigtes_ergebnis_id == null && ($begegnung->heim_punkte != 0 || $begegnung->gast_punkte != 0)) keinZugriff(); $query = "SELECT #__sportsmanager_berechtigt_fuer_team.berechtigt_team_id FROM #__sportsmanager_berechtigt_fuer_team, #__sportsmanager_begegnung WHERE begegnung_id = $id AND berechtigt_user_id = $user_id AND (berechtigt_team_id = heim_team_id OR berechtigt_team_id = gast_team_id)"; $rows = loadObjectList($db, $query); if (count($rows) == 0) keinZugriff(); } else if ($bestaetigen == 2) { if ($begegnung->unbestaetigtes_ergebnis_id == null && ($begegnung->heim_punkte != 0 || $begegnung->gast_punkte != 0)) keinZugriff(); $encrypted_pin = $db->escape($jInput->get('pin', '', 'RAW')); $pin = decrypt($encrypted_pin, "a9cZ" . $veranstaltungId . "oDS7" . $id . "2eA"); if (empty($pin)) keinZugriff(); $query = "SELECT team_id FROM #__sportsmanager_begegnung LEFT JOIN #__sportsmanager_team ON heim_team_id = team_id OR gast_team_id = team_id WHERE begegnung_id = $id AND (team_id = $begegnung->heim_team_id OR team_id = $begegnung->gast_team_id) AND NOT ISNULL(pin) AND pin = '$pin'"; $rows = loadObjectList($db, $query); if (count($rows) == 0) keinZugriff(); } else { if (!$benutzer_ist_moderator) keinZugriff(); } if (!$benutzer_ist_moderator && !$modus->heimtausch) keinZugriff(); if (!$mannschaften_vertauscht) { $query = "UPDATE #__sportsmanager_begegnung" . "\n SET heim_team_id = (@temp_heim_team_id := heim_team_id), heim_team_id = gast_team_id," . "\n gast_team_id = @temp_heim_team_id," . "\n heim_punkte = (@temp_heim_punkte := heim_punkte), heim_punkte = gast_punkte," . "\n gast_punkte = @temp_heim_punkte," . "\n heim_spielpunkte = (@temp_heim_spielpunkte := heim_spielpunkte), heim_spielpunkte = gast_spielpunkte," . "\n gast_spielpunkte = @temp_heim_spielpunkte" . "\n WHERE begegnung_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "UPDATE #__sportsmanager_teamspiel" . "\n SET heim_spieler_1_id = (@temp_heim_spieler_1_id := heim_spieler_1_id), heim_spieler_1_id = gast_spieler_1_id," . "\n gast_spieler_1_id = @temp_heim_spieler_1_id," . "\n heim_spieler_2_id = (@temp_heim_spieler_2_id := heim_spieler_2_id), heim_spieler_2_id = gast_spieler_2_id," . "\n gast_spieler_2_id = @temp_heim_spieler_2_id," . "\n teamspiel_heim_punkte = (@temp_teamspiel_heim_punkte := teamspiel_heim_punkte), teamspiel_heim_punkte = teamspiel_gast_punkte," . "\n teamspiel_gast_punkte = @temp_teamspiel_heim_punkte," . "\n teamspiel_heim_spielpunkte = (@temp_teamspiel_heim_spielpunkte := teamspiel_heim_spielpunkte), teamspiel_heim_spielpunkte = teamspiel_gast_spielpunkte," . "\n teamspiel_gast_spielpunkte = @temp_teamspiel_heim_spielpunkte" . "\n WHERE begegnung_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } redirectSportsManagerURL('&task=' . ($bestaetigen != 0 ? ($bestaetigen == 1 ? 'admin_begegnung_spielplan_edit_bestaetigen' : 'pineingabe') : 'admin_begegnung_spielplan_edit') . '&id=' . $id . '&veranstaltungid=' . $veranstaltungId . ($bestaetigen != 0 ? '_bestaetigen' : '') . '&veranstaltungid=' . $veranstaltungId . '&id=' . $id . '&erneut_oeffnen=1' . (!empty($encrypted_pin) ? ('&epin=' . $encrypted_pin) : "") . ($aus_uebersicht ? '&aus_uebersicht=1' : '')); } function adminBegegnungSpielplanBestaetigen(): void { $app = Factory::getContainer()->get(SiteApplication::class); $db = getDatabase(); $jInput = $app->input; $user_id = isExternalDatabase() ? 0 : (isJson() ? getUserID() : Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id); $id = $jInput->get('id', 0, 'INT'); $bestaetigen = $jInput->get('bestaetigen', 0, 'INT'); $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); $aus_uebersicht = $jInput->get('aus_uebersicht', 0, 'INT'); // Begegnung ermitteln $query = "SELECT #__sportsmanager_begegnung.*, unbestaetigtes_ergebnis_id, zwischenergebnis," . " (SELECT COUNT(*) FROM #__sportsmanager_begegnung_historie WHERE #__sportsmanager_begegnung_historie.begegnung_id = #__sportsmanager_begegnung.begegnung_id) AS verlegen_aktionen" . "\n FROM #__sportsmanager_begegnung" . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id" . "\n WHERE #__sportsmanager_begegnung.begegnung_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) { abortWithError("Wrong id!"); } $begegnung = $rows[0]; $aktualisieren_ab_datum = !empty($begegnung->zeitpunkt) ? substr($begegnung->zeitpunkt, 0, 10) : null; if ($bestaetigen == 2) { $encrypted_pin = $db->escape($jInput->get('pin', '', 'RAW')); $pin = decrypt($encrypted_pin, "a9cZ" . $veranstaltungId . "oDS7" . $id . "2eA"); if (empty($pin)) { keinZugriff(); } if ($begegnung->unbestaetigtes_ergebnis_id == null && ($begegnung->heim_punkte != 0 || $begegnung->gast_punkte != 0)) { keinZugriff(); } $query = "SELECT t1.begegnung_id, t5.veranstaltung_id, IF(t2.pin = '$pin', heim_team_id, gast_team_id) AS aktion_team_id, IF(t2.pin = '$pin', gast_team_id, heim_team_id) AS anderes_team_id," . "\n IF(t4.vorschlagendes_team_id = IF(t2.pin = '$pin', gast_team_id, heim_team_id), 1, 0) AS berechtigt_fuer_team_akzeptieren" . "\n FROM #__sportsmanager_begegnung AS t1" . "\n LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id" . "\n LEFT JOIN #__sportsmanager_team AS t3 ON t1.gast_team_id = t3.team_id" . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS t4 ON t1.begegnung_id = t4.begegnung_id" . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t2.veranstaltung_id = t5.veranstaltung_id" . "\n WHERE t5.status > 0 " . kategorieFilter("AND t5.kategorie IN") . " AND ((ISNULL(heim_punkte) AND ISNULL(gast_punkte)) OR zwischenergebnis OR NOT ISNULL(unbestaetigtes_ergebnis_id)) AND ((NOT ISNULL(t2.pin) AND t2.pin = '$pin') OR (NOT ISNULL(t3.pin) AND t3.pin = '$pin'))" . "\n ORDER BY t1.zeitpunkt" . "\n LIMIT 1"; $rows = loadObjectList($db, $query); if (count($rows) == 0) { keinZugriff(); } if (!$rows[0]->berechtigt_fuer_team_akzeptieren) { keinZugriff(); } $aktion_team_id = $rows[0]->aktion_team_id; } else { if ($begegnung->unbestaetigtes_ergebnis_id == null && ($begegnung->heim_punkte != 0 || $begegnung->gast_punkte != 0)) { keinZugriff(); } $query = "SELECT t1.berechtigt_team_id FROM #__sportsmanager_berechtigt_fuer_team AS t1, #__sportsmanager_begegnung AS t2 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis t3 ON t2.begegnung_id = t3.begegnung_id WHERE NOT t3.zwischenergebnis AND t2.begegnung_id = $id AND t1.berechtigt_user_id = $user_id AND ((t1.berechtigt_team_id = t2.heim_team_id AND t3.vorschlagendes_team_id = t2.gast_team_id) OR (t1.berechtigt_team_id = t2.gast_team_id AND t3.vorschlagendes_team_id = t2.heim_team_id))"; $rows = loadObjectList($db, $query); if (count($rows) == 0) { keinZugriff(); } $aktion_team_id = $rows[0]->berechtigt_team_id; } $query = "DELETE FROM #__sportsmanager_unbestaetigtes_ergebnis WHERE begegnung_id = $id;"; $db->setQuery($query); if (!$db->execute()) { abortWithError($db->stderr(true)); } // Veranstaltung ermitteln $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) { abortWithError("Wrong id!"); } $veranstaltung = $rows[0]; $query = "INSERT INTO #__sportsmanager_begegnung_historie (begegnung_id, aktion, zeitpunkt, user_id, team_id, verantwortlich_team_id, kommentar, eingetragen)" . "\n VALUES ($id, 7, NULL, " . ($bestaetigen != 2 ? "'$user_id'" : "NULL") . ", '$aktion_team_id', NULL, NULL, now());"; $db->setQuery($query); if (!$db->execute()) { abortWithError($db->stderr(true)); } // Heimteam ermitteln $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $begegnung->heim_team_id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) { abortWithError("Wrong id!"); } $heim_team = $rows[0]; // Gastteam ermitteln $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $begegnung->gast_team_id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) { abortWithError("Wrong id!"); } $gast_team = $rows[0]; if ($veranstaltung->status != 0) { if ($veranstaltung->elo_wertung != 0) { wannGespieltAktualisieren(); eloAktualisieren($aktualisieren_ab_datum); einstufungAktualisieren(); } } spielerstatistikAktualisieren(0, $veranstaltungId); teamstatistikAktualisieren($veranstaltungId); $mailfrom = $app->getCfg('mailfrom'); $fromname = $app->getCfg('fromname'); $subject = $heim_team->teamname . " vs. " . $gast_team->teamname . ": Ergebnis akzeptiert"; $body = "Zur Begegnung " . $heim_team->teamname . " gegen " . $gast_team->teamname . " am " . FormatiertesDatum($begegnung->zeitpunkt) . " in der " . $veranstaltung->bezeichnung . " wurde von " . ($aktion_team_id == $heim_team->team_id ? $heim_team->teamname : $gast_team->teamname) . " das Ergebnis akzeptiert."; $query = "SELECT * FROM #__users AS t1, #__sportsmanager_berechtigt_fuer_team AS t2 WHERE t1.id = t2.berechtigt_user_id AND (t2.berechtigt_team_id = " . $begegnung->heim_team_id . " OR t2.berechtigt_team_id = " . $begegnung->gast_team_id . ")"; $rows = loadObjectList($db, $query); if(!empty($rows)) { $mailer = Factory::getContainer()->get(MailerFactoryInterface::class)->createMailer(); $mailer->setSender($mailfrom, $fromname); $mailer->setSubject($subject); $mailer->setBody($body); foreach ($rows as $row) { $mailer->addBcc($row->email); } $mailer->send(); } if (isJson()) { begegnungSpielplan(); } else { if ($aus_uebersicht) { redirectSportsManagerURL('#id' . $id); } else { redirectSportsManagerURL('&task=veranstaltung&veranstaltungid=' . $veranstaltungId . '#id' . $id); } } } /* Generiert Gruppenspiele zu einer beliebigen geraden Anzahl Teams * bei denen jedes Team genau einmal gegen jedes andere Team spielt, * die Spiele an Anzahl Teams - 1 Spieltagen ausgetragen werden und * jedes Team an jedem Tag genau ein Spiel austrägt * * Rückgabewert: Dreidimensionales Array mit Spieltag als erstem Index (1, ..., Anzahl Teams - 1), * Spiel-Nr. als zweitem Index (1, ..., Anzahl Teams / 2) und als drittem Index 0 für das erste * und 1 für das zweite Team, wobei jeweils die Teamnummer enthalten ist (1, ..., Anzahl Teams) * * (C) Sven Nickel 2006 */ function Gruppenspiele($anzahlteams) { if ($anzahlteams % 2 == 1) { die ("Gruppenspiele(): Eine ungerade Anzahl an Teams ist nicht zulässig!"); } $begegnungen = null; $b = 1; for ($i = 1; $i < $anzahlteams; $i++) { for ($j = $i + 1; $j <= $anzahlteams; $j++) { $begegnungen[$b++] = array($i, $j); } } $spiele = []; $rueckschritt = false; for ($spieltag = 1; $spieltag < $anzahlteams;) { for ($spielnr = 1; $spielnr <= $anzahlteams / 2;) { // Nächste noch nicht eingetragene Begegnung ermitteln, in der // keine Mannschaft am aktuellen Spieltag bereits spielt for ($b = 1; $b <= ($anzahlteams - 1) * $anzahlteams / 2; $b++) { if ($rueckschritt) { if ($begegnungen[$b][0] != $spiele[$spieltag][$spielnr][0] || $begegnungen[$b][1] != $spiele[$spieltag][$spielnr][1]) continue; $rueckschritt = false; continue; } $nicht_zulaessig = false; for ($i = 1; $i <= $spieltag && !$nicht_zulaessig; $i++) { for ($j = 1; $j <= ($i != $spieltag ? $anzahlteams / 2 : $spielnr - 1); $j++) { if (($spiele[$i][$j][0] == $begegnungen[$b][0] && $spiele[$i][$j][1] == $begegnungen[$b][1]) || ($spiele[$i][$j][0] == $begegnungen[$b][1] && $spiele[$i][$j][1] == $begegnungen[$b][0])) { $nicht_zulaessig = true; break; } if ($spielnr > 1 && $spieltag < $anzahlteams - 1) { if (($spiele[$i][$j][0] == $spiele[$spieltag][$spielnr - 1][1] && $spiele[$i][$j][1] == $begegnungen[$b][0]) || ($spiele[$i][$j][0] == $begegnungen[$b][0] && $spiele[$i][$j][1] == $spiele[$spieltag][$spielnr - 1][1])) { $nicht_zulaessig = true; break; } if ($spielnr == $anzahlteams / 2) { if (($spiele[$i][$j][0] == $begegnungen[$b][1] && $spiele[$i][$j][1] == $spiele[$spieltag][1][0]) || ($spiele[$i][$j][0] == $spiele[$spieltag][1][0] && $spiele[$i][$j][1] == $begegnungen[$b][1])) { $nicht_zulaessig = true; break; } } } if ($i == $spieltag) if ($begegnungen[$b][0] == $spiele[$i][$j][0] || $begegnungen[$b][0] == $spiele[$i][$j][1] || $begegnungen[$b][1] == $spiele[$i][$j][0] || $begegnungen[$b][1] == $spiele[$i][$j][1]) { $nicht_zulaessig = true; break; } } } if (!$nicht_zulaessig) break; } if ($b <= ($anzahlteams - 1) * $anzahlteams / 2) { // Begegnung gefunden $spiele[$spieltag][$spielnr][0] = $begegnungen[$b][0]; $spiele[$spieltag][$spielnr][1] = $begegnungen[$b][1]; if ($spieltag < ($anzahlteams - 1)) { $spiele[$spieltag + 1][$spielnr == 1 ? $anzahlteams / 2 : $spielnr - 1][1] = $begegnungen[$b][0]; $spiele[$spieltag + 1][$spielnr][0] = $begegnungen[$b][1]; } $spielnr++; } else { // Keine weitere Begegnung gefunden // Rückschritt durchführen if ($spielnr > 1) { $spielnr--; } else { $spielnr = $anzahlteams / 2; $spieltag -= 2; } $rueckschritt = true; } } $spieltag += 2; } return $spiele; } function GruppenspieleMatrix($anzahlteams): array { /* Generiert Gruppenspiele von 4 bis 14 Teams über eine Setzliste * bei denen jedes Team genau einmal gegen jedes andere Team spielt, * die Spiele an Anzahl Teams - 1 Spieltagen ausgetragen werden und * jedes Team an jedem Tag genau ein Spiel austrägt * Manschaften die am selben Spieltag auf 1,2 oder 3,4 oder 5,6 usw. haben nie gleichzeitig Heimspiel. * * Rückgabewert: Dreidimensionales Array mit Spieltag als erstem Index (1, ..., Anzahl Teams - 1), * Spiel-Nr. als zweitem Index (1, ..., Anzahl Teams / 2) und als drittem Index 0 für das erste * und 1 für das zweite Team, wobei jeweils die Teamnummer enthalten ist (1, ..., Anzahl Teams) * * (C) Jürgen Meyer 09.03.2025 */ switch ($anzahlteams) { case 4: $Spalte_Heim = 12; break; case 6: $Spalte_Heim = 10; break; case 8: $Spalte_Heim = 8; break; case 10: $Spalte_Heim = 6; break; case 12: $Spalte_Heim = 4; break; case 14: $Spalte_Heim = 2; break; default: die("This case is invalid: Nr of teams " . $anzahlteams); } //Spieltag_Nr;Spiel_Nr;Heim14;Gast14;Heim12;Gast12;Heim10;Gast10;Heim8;Gast8;Heim6;Gast6;Heim4;Gast4 //Folgende Zeilen dürfen nicht eingrückt werden. $str_Setzliste_Matrix = "1;1;1;4;1;4;1;4;1;4;1;4;1;4 1;2;3;2;3;2;3;2;3;2;3;2;3;2 1;3;5;14;5;12;5;10;5;8;5;6;; 1;4;7;12;7;10;7;8;7;6;;;; 1;5;9;10;9;8;9;6;;;;;; 1;6;11;8;11;6;;;;;;;; 1;7;13;6;;;;;;;;;; 2;1;3;1;3;1;3;1;8;1;2;5;2;1 2;2;2;5;2;5;2;5;2;5;3;4;3;4 2;3;6;4;6;4;6;4;3;7;6;1;; 2;4;8;13;8;11;8;9;6;4;;;; 2;5;10;11;10;9;10;7;;;;;; 2;6;12;9;12;7;;;;;;;; 2;7;14;7;;;;;;;;;; 3;1;1;6;1;6;1;6;1;6;1;2;1;3 3;2;4;8;4;8;4;8;4;2;4;6;4;2 3;3;5;3;5;3;5;3;5;3;5;3;; 3;4;7;2;7;2;7;2;7;8;;;; 3;5;9;14;9;12;9;10;;;;;; 3;6;11;12;11;10;;;;;;;; 3;7;13;10;;;;;;;;;; 4;1;5;1;5;1;5;9;5;1;5;1;; 4;2;2;9;2;9;2;4;2;7;2;4;; 4;3;3;7;3;7;3;7;3;4;3;6;; 4;4;8;6;8;6;8;6;8;6;;;; 4;5;10;4;10;4;10;1;;;;;; 4;6;12;13;12;11;;;;;;;; 4;7;14;11;;;;;;;;;; 5;1;1;8;1;8;1;8;1;3;1;3;; 5;2;4;12;4;12;4;10;4;8;4;5;; 5;3;6;10;6;10;6;3;6;2;6;2;; 5;4;7;5;7;5;7;5;7;5;;;; 5;5;9;3;9;3;9;2;;;;;; 5;6;11;2;11;2;;;;;;;; 5;7;13;14;;;;;;;;;; 6;1;7;1;7;1;7;9;7;4;;;; 6;2;2;13;2;4;2;6;2;1;;;; 6;3;3;11;3;11;3;4;3;8;;;; 6;4;5;9;5;9;5;1;5;6;;;; 6;5;10;8;10;8;10;8;;;;;; 6;6;12;6;12;6;;;;;;;; 6;7;14;4;;;;;;;;;; 7;1;1;10;1;10;1;2;1;7;;;; 7;2;4;2;4;3;4;7;4;5;;;; 7;3;6;14;6;2;6;10;6;3;;;; 7;4;8;12;8;12;8;5;8;2;;;; 7;5;9;7;9;7;9;3;;;;;; 7;6;11;5;11;5;;;;;;;; 7;7;13;3;;;;;;;;;; 8;1;9;1;9;1;7;1;;;;;; 8;2;2;6;2;8;2;8;;;;;; 8;3;3;4;3;6;3;10;;;;;; 8;4;5;13;5;4;5;6;;;;;; 8;5;7;11;7;11;9;4;;;;;; 8;6;12;10;12;10;;;;;;;; 8;7;14;8;;;;;;;;;; 9;1;1;12;1;12;4;5;;;;;; 9;2;4;5;4;7;1;9;;;;;; 9;3;6;3;6;5;6;7;;;;;; 9;4;8;2;8;3;8;3;;;;;; 9;5;10;14;10;2;10;2;;;;;; 9;6;11;9;11;9;;;;;;;; 9;7;13;7;;;;;;;;;; 10;1;11;1;11;1;;;;;;;; 10;2;2;10;2;12;;;;;;;; 10;3;3;8;3;10;;;;;;;; 10;4;5;6;5;8;;;;;;;; 10;5;7;4;7;6;;;;;;;; 10;6;9;13;9;4;;;;;;;; 10;7;14;12;;;;;;;;;; 11;1;1;14;1;2;;;;;;;; 11;2;4;9;4;11;;;;;;;; 11;3;6;7;6;9;;;;;;;; 11;4;8;5;8;7;;;;;;;; 11;5;10;3;10;5;;;;;;;; 11;6;12;2;12;3;;;;;;;; 11;7;13;11;;;;;;;;;; 12;1;13;1;;;;;;;;;; 12;2;2;14;;;;;;;;;; 12;3;3;12;;;;;;;;;; 12;4;5;10;;;;;;;;;; 12;5;7;8;;;;;;;;;; 12;6;9;6;;;;;;;;;; 12;7;11;4;;;;;;;;;; 13;1;1;2;;;;;;;;;; 13;2;4;13;;;;;;;;;; 13;3;6;11;;;;;;;;;; 13;4;8;9;;;;;;;;;; 13;5;10;7;;;;;;;;;; 13;6;12;5;;;;;;;;;; 13;7;14;3;;;;;;;;;;"; $Spieltage = explode("\n", $str_Setzliste_Matrix); $Matrix = null; foreach ($Spieltage as $value) { $Spiel = explode(";", $value); if ($Spiel[$Spalte_Heim] == "") continue; $Matrix[$Spiel[0]][$Spiel[1]][0] = $Spiel[$Spalte_Heim]; $Matrix[$Spiel[0]][$Spiel[1]][1] = $Spiel[$Spalte_Heim + 1]; } return $Matrix; } function adminBegegnungenGenerierenForm(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(true); $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $veranstaltung = $rows[0]; $query = "SELECT *" . "\n FROM #__sportsmanager_team" . "\n WHERE veranstaltung_id = $veranstaltungId" . "\n ORDER BY teamname"; $rows = loadObjectList($db, $query); HTML_sportsmanager_admin::adminBegegnungenGenerieren($veranstaltung, $rows); } #[NoReturn] function adminBegegnungenGenerieren(): void { //geändert am 07.03.2025 von Jürgen Meyer $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId); } $anzahlteams = $jInput->get('anzahlteams', 0, 'INT'); if ($anzahlteams == 0) die("Wrong number of teams!"); $query = "SELECT t1.*" . "\n FROM #__sportsmanager_team AS t1" . "\n WHERE veranstaltung_id = $veranstaltungId" . "\n ORDER BY t1.teamname"; $teams = loadObjectList($db, $query); //Erstellen des Array Teams mit Überprüfung der Mannschaften $teams_ok = true; $teamIds = null; for ($i = 1; $i <= $anzahlteams; $i++) { $team_id_form = $jInput->get('team_id_' . $i, 0, 'INT'); if ($team_id_form == "") { $teams_ok = false; } else { if (!isset($teamIds)) { $teamIds[$i] = $team_id_form; } else { if (!in_array($team_id_form, $teamIds)) { $teamIds[$i] = $team_id_form; } else { $teams_ok = false; } } } } //Bei 1 wird nur Hinrunde gespielt, bei 2 wird Rückrunde gespielt $runden = $jInput->get('runden', 0, 'INT'); $generierung = $jInput->get('generierung', 0, 'var'); //Bei 1 wird Datum überprüft, bei 0 nicht. $datumscheck = $jInput->get('datumscheck', 0, 'INT'); $spieltage = $anzahlteams % 2 != 0 ? $anzahlteams : $anzahlteams - 1; $spieltag_basis = array(); for ($i = 1; $i <= ($spieltage * $runden); $i++) { $jahr = $jInput->get('datum_jahr_' . $i, 0, 'INT'); $kw = $jInput->get('datum_kw_' . $i, 0, 'INT'); $spieltag_nr = $jInput->get('spieltag_nr_' . $i, 0, 'INT'); $startzeit = $jInput->get('startzeit_' . $i, 0, 'var'); $startzeit = UhrzeitWandlerDE($startzeit); if (!validateDate($startzeit)) { $startzeit = ""; } if ($jahr == 0 && $kw == 0) die("Wrong date!"); $spieltag_basis[$i] = array(); $spieltag_basis[$i]["jahr"] = $jahr; $spieltag_basis[$i]["kw"] = $kw; $spieltag_basis[$i]["startzeit"] = $startzeit; $spieltag_basis[$i]["spieltag_nr"] = $spieltag_nr; } //Überprüfung der Spieltag Nummer $spieltage_ok = true; foreach ($spieltag_basis as $value) { $spieltag_nr_form = $value["spieltag_nr"]; if ($spieltag_nr_form == "") { $spieltage_ok = false; } else { if (!isset($spieltage_check)) { $spieltage_check[] = $spieltag_nr_form; } else { if (!in_array($spieltag_nr_form, $spieltage_check)) { $spieltage_check[] = $spieltag_nr_form; } else { $spieltage_ok = false; } } } } $spiele = null; if ($generierung == "Setzliste") { //Generieren des Spielplans über Setzliste $spiele = GruppenspieleMatrix($anzahlteams % 2 != 0 ? $anzahlteams + 1 : $anzahlteams); } if ($generierung == "Automatisch") { //Automatisches generieren des Spielplans $spiele = Gruppenspiele($anzahlteams % 2 != 0 ? $anzahlteams + 1 : $anzahlteams); } $Zeile = 0; $datumsangaben = true; $Begegnung = array(); for ($spieltag = 1; $spieltag <= $spieltage; $spieltag++) { for ($spielnr = 1; $spielnr <= ($anzahlteams % 2 != 0 ? $anzahlteams + 1 : $anzahlteams) / 2; $spielnr++) { if ($spiele[$spieltag][$spielnr][0] > $anzahlteams || $spiele[$spieltag][$spielnr][1] > $anzahlteams) continue; $heim_team_id = $teamIds[trim($spiele[$spieltag][$spielnr][0])]; $gast_team_id = $teamIds[trim($spiele[$spieltag][$spielnr][1])]; $heim_team = null; foreach ($teams as $t) { if ($t->team_id == $heim_team_id) { $heim_team = $t; break; } } if ($heim_team == null) continue; $gast_team = null; foreach ($teams as $t) { if ($t->team_id == $gast_team_id) { $gast_team = $t; break; } } if ($gast_team == null) continue; if ($spieltag_basis[$spieltag]["startzeit"] != "") { $zeitpunkt = $spieltag_basis[$spieltag]["startzeit"]; } else { if ($heim_team->heimspiel_wochentag == 0 or $spieltag_basis[$spieltag]["kw"] == 0) $zeitpunkt = NULL; else { $ts = getdate(mondaykw($spieltag_basis[$spieltag]["kw"], $spieltag_basis[$spieltag]["jahr"], $heim_team->heimspiel_wochentag - 1)); $zeitpunkt = sprintf("%04d-%02d-%02d %02d:%02d:00", $ts["year"], $ts["mon"], $ts["mday"], floor($heim_team->heimspiel_uhrzeit / 100), $heim_team->heimspiel_uhrzeit % 100); } } $spieltag_nr = $spieltag_basis[$spieltag]["spieltag_nr"]; if (!validateDate($zeitpunkt)) { $zeitpunkt = NULL; if ($datumscheck) $datumsangaben = false; } $Begegnung[$Zeile]['spieltag'] = $spieltag_nr; $Begegnung[$Zeile]['zeitpunkt'] = $zeitpunkt; $Begegnung[$Zeile]['heim_team_id'] = $heim_team_id; $Begegnung[$Zeile]['gast_team_id'] = $gast_team_id; $Begegnung[$Zeile]['spiel_nr'] = $spielnr; $Zeile++; if ($runden == 2) { $weiterer_spieltag = $spieltag + $spieltage; if ($spieltag_basis[$weiterer_spieltag]["startzeit"] != "") { $zeitpunkt = $spieltag_basis[$weiterer_spieltag]["startzeit"]; } else { if ($gast_team->heimspiel_wochentag == 0 or $spieltag_basis[$weiterer_spieltag]["kw"] == 0) $zeitpunkt = NULL; else { $ts = getdate(mondaykw($spieltag_basis[$weiterer_spieltag]["kw"], $spieltag_basis[$weiterer_spieltag]["jahr"], $gast_team->heimspiel_wochentag - 1)); $zeitpunkt = sprintf("%04d-%02d-%02d %02d:%02d:00", $ts["year"], $ts["mon"], $ts["mday"], floor($gast_team->heimspiel_uhrzeit / 100), $gast_team->heimspiel_uhrzeit % 100); } } $spieltag_nr = $spieltag_basis[$weiterer_spieltag]["spieltag_nr"]; if (!validateDate($zeitpunkt)) { $zeitpunkt = NULL; if ($datumscheck) $datumsangaben = false; } $Begegnung[$Zeile]['spieltag'] = $spieltag_nr; $Begegnung[$Zeile]['zeitpunkt'] = $zeitpunkt; $Begegnung[$Zeile]['heim_team_id'] = $gast_team_id; $Begegnung[$Zeile]['gast_team_id'] = $heim_team_id; $Begegnung[$Zeile]['spiel_nr'] = $spielnr; $Zeile++; } } } if ($datumsangaben and $teams_ok and $spieltage_ok) { $Zeile = 1; $query = "INSERT INTO #__sportsmanager_begegnung (spieltag, spiel_nr, zeitpunkt, heim_team_id, gast_team_id) VALUES "; foreach ($Begegnung as $value) { if ($Zeile > 1) { $query .= ", "; } $query .= "(" . $value['spieltag'] . "," . $value['spiel_nr'] . "," . ($value['zeitpunkt'] != NULL ? "'" . $value['zeitpunkt'] . "'" : "NULL") . "," . $value['heim_team_id'] . "," . $value['gast_team_id'] . ") "; $Zeile++; } $query .= ";"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } else { redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId, count($Begegnung) . " " . Text::_('COM_SPORTSMANAGER_IMPORT_GROUP_GAME_CREATED')); } } else { if (!$datumsangaben) { echo "
Der Datumscheck war nicht OK!!!
"; } if (!$teams_ok) { echo "
Jede Mannschaft muss genau einmal existieren!!!
"; } if (!$spieltage_ok) { echo "
Jeder Spieltag darf nur einmal existieren!!!
"; } ?>Zurückget(SiteApplication::class)->input; $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(true); $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $veranstaltung = $rows[0]; HTML_sportsmanager_admin::adminBegegnungenImportieren($veranstaltung); } function vergleich($text1, $text2): bool { $suchen = ["_","-"," "]; $ersetzen = ["","",""]; $begriffe = explode(",", $text2); foreach($begriffe as $begriff) { $text1 = strtolower(str_replace($suchen,$ersetzen,$text1)); $begriff = strtolower(str_replace($suchen,$ersetzen,$begriff)); if ($text1 == $begriff) return true; } return false; } function erstelleZeitpunkt($datum_jahr, $datum_kw, $heimspiel_wochentag, $heimspiel_uhrzeit): bool|string { if (!empty($datum_jahr) && !empty($datum_kw) && !empty($heimspiel_wochentag) && !empty($heimspiel_uhrzeit)) { $ts = getdate(mondaykw($datum_kw, $datum_jahr, $heimspiel_wochentag - 1)); return sprintf("%04d-%02d-%02d %02d:%02d:%02d", $ts["year"], $ts["mon"], $ts["mday"], floor($heimspiel_uhrzeit / 100), $heimspiel_uhrzeit % 100, 0); } else return false; } function adminBegegnungenImportieren(): void { $db = getDatabase(); global $_FILES; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $veranstaltungId = $_POST['veranstaltung_id']; if ($veranstaltungId == 0) die("Missing id!"); if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId); } echo Text::_('COM_SPORTSMANAGER_IMPORT_GROUP_GAME2') . "

"; $query = "SELECT team_id, teamname, heimspiel_wochentag, heimspiel_uhrzeit" . "\n FROM #__sportsmanager_team" . "\n WHERE veranstaltung_id = " . $veranstaltungId . ";"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $Mannschaften = null; foreach ($rows as $value) { $Mannschaften[$value->teamname]['team_id'] = $value->team_id; $Mannschaften[$value->teamname]['heimspiel_wochentag'] = $value->heimspiel_wochentag; $Mannschaften[$value->teamname]['heimspiel_uhrzeit'] = $value->heimspiel_uhrzeit; } if (empty($_FILES["daten"]["tmp_name"]) || !is_uploaded_file($_FILES["daten"]["tmp_name"])) { redirectSportsManagerURL('&task=admin_spieler', Text::_('COM_SPORTSMANAGER_NO_FILE_SPECIFIED')); } $handle = fopen($_FILES["daten"]["tmp_name"], "r"); if (!$handle) { redirectSportsManagerURL('&task=admin_spieler', Text::_('COM_SPORTSMANAGER_COULD_NOT_OPEN_FILE')); } if (feof($handle)) { redirectSportsManagerURL('&task=admin_spieler', Text::_('COM_SPORTSMANAGER_FILE_IS_EMPTY')); } $Zeile = 1; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; $import = true; $Begegnung = array(); $Titelzeile = null; $import_zeile = false; while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) { if ($Zeile == 1) { foreach($data as $spalte_nr => $spalte) { if (vergleich($spalte,"spieltagnr,spieltagnummer")) $Titelzeile['Spieltag_Nr'] = $spalte_nr; if (vergleich($spalte,"spielstart,zeitpunkt")) $Titelzeile['Spielstart'] = $spalte_nr; if (vergleich($spalte,"heim,heimteam,heimmannschaft")) $Titelzeile['Heim'] = $spalte_nr; if (vergleich($spalte,"gast,gastteam,gastmannschaft")) $Titelzeile['Gast'] = $spalte_nr; if (vergleich($spalte,"spielnr,spielnummer")) $Titelzeile['Spiel_Nr'] = $spalte_nr; if (vergleich($spalte,"spieltagtitel")) $Titelzeile['Spieltag_Titel'] = $spalte_nr; if (vergleich($spalte,"jahr,spieljahr")) $Titelzeile['Spieljahr'] = $spalte_nr; if (vergleich($spalte,"kalenderwoche,woche,kw")) $Titelzeile['Kalenderwoche'] = $spalte_nr; } } else { $import_zeile = true; $bgcolor = "green"; $Begegnung[$Zeile]['spieltag'] = $data[$Titelzeile['Spieltag_Nr']]; $Begegnung[$Zeile]['zeitpunkt'] = UhrzeitWandlerDE($data[$Titelzeile['Spielstart']]); $Begegnung[$Zeile]['heim_team_id'] = $Mannschaften[$data[$Titelzeile['Heim']]]['team_id']; $Begegnung[$Zeile]['gast_team_id'] = $Mannschaften[$data[$Titelzeile['Gast']]]['team_id']; if (isset($data[$Titelzeile['Spiel_Nr']])) $Begegnung[$Zeile]['spiel_nr'] = $data[$Titelzeile['Spiel_Nr']]; if (isset($data[$Titelzeile['Spieltag_Titel']])) $Begegnung[$Zeile]['spieltag_titel'] = $data[$Titelzeile['Spieltag_Titel']]; echo ""; if ($Begegnung[$Zeile]['spieltag'] > 99 or $Begegnung[$Zeile]['spieltag'] < 1) { $bgcolor = "red"; $import = false; } echo ""; if (empty($data[$Titelzeile['Spielstart']]) AND !empty($data[$Titelzeile['Spieljahr']]) AND !empty($data[$Titelzeile['Kalenderwoche']]) AND !empty($Mannschaften[$data[$Titelzeile['Heim']]]['heimspiel_wochentag']) AND !empty($Mannschaften[$data[$Titelzeile['Heim']]]['heimspiel_uhrzeit'])) { $data[$Titelzeile['Spielstart']] = erstelleZeitpunkt($data[$Titelzeile['Spieljahr']], $data[$Titelzeile['Kalenderwoche']], $Mannschaften[$data[$Titelzeile['Heim']]]['heimspiel_wochentag'], $Mannschaften[$data[$Titelzeile['Heim']]]['heimspiel_uhrzeit']); } $Begegnung[$Zeile]['zeitpunkt'] = $data[$Titelzeile['Spielstart']]; if (!validateDate($Begegnung[$Zeile]['zeitpunkt'])) { $bgcolor = "red"; $import = false; } else { $bgcolor = "green"; } echo ""; if ($Begegnung[$Zeile]['heim_team_id'] == "") { if ($data[$Titelzeile['Heim']] == "spielfrei") { $bgcolor = "orange"; $import_zeile = false; } else { $bgcolor = "red"; $import = false; } } else { $bgcolor = "green"; } echo ""; if ($Begegnung[$Zeile]['gast_team_id'] == "") { if ($data[$Titelzeile['Gast']] == "spielfrei") { $bgcolor = "orange"; $import_zeile = false; } else { $bgcolor = "red"; $import = false; } } else { $bgcolor = "green"; } echo ""; echo ""; } if (!$import_zeile) { unset($Begegnung[$Zeile]); } $Zeile++; } echo "
SpieltagSpielstartHeimGast
" . $data[$Titelzeile['Spieltag_Nr']] . "" . $data[$Titelzeile['Spielstart']] . "" . $data[$Titelzeile['Heim']] . "" . $data[$Titelzeile['Gast']] . "
"; fclose($handle); if ($import) { $Zeile = 1; $query = "INSERT INTO #__sportsmanager_begegnung (spieltag, zeitpunkt, spieltag_titel, spiel_nr, heim_team_id, gast_team_id) VALUES "; foreach ($Begegnung as $value) { if ($Zeile > 1) { $query .= ", "; } $query .= "(" . $value['spieltag'] . ",'" . $value['zeitpunkt'] . "','" . ($value['spieltag_titel'] ?? "") . "', " . ($value['spiel_nr'] ?? "NULL") . " ," . $value['heim_team_id'] . "," . $value['gast_team_id'] . ") "; $Zeile++; } $query .= ";"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } else { redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId, count($Begegnung) . " " . Text::_('COM_SPORTSMANAGER_IMPORT_GROUP_GAME_IMPORTED')); } } else { echo "
Die csv-Datei ist fehlerhaft und konnte nicht importiert werden! Siehe Tabelle oben!
"; } ?>
size="4"/>
get(SiteApplication::class)->input; $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(true); $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $veranstaltung = $rows[0]; $query = "SELECT #__sportsmanager_begegnung.*" . "\n FROM #__sportsmanager_veranstaltung" . "\n INNER JOIN #__sportsmanager_team USING (veranstaltung_id)" . "\n INNER JOIN #__sportsmanager_begegnung ON team_id = heim_team_id" . "\n WHERE veranstaltung_id = $veranstaltungId" . "\n ORDER BY zeitpunkt DESC LIMIT 1"; $rows = loadObjectList($db, $query); $row = count($rows) < 1 ? null : $rows[0]; // Falls keine Begegnung als Vorlage verfügbar $query = "SELECT *" . "\n FROM #__sportsmanager_team" . "\n WHERE veranstaltung_id = $veranstaltungId" . "\n ORDER BY teamname"; $rows = loadObjectList($db, $query); $query = "SELECT *" . "\n FROM #__sportsmanager_spielort" . "\n ORDER BY ortsname, name, ortsteil"; $spielorte = loadObjectList($db, $query); HTML_sportsmanager_admin::adminBegegnungenRundeErzeugen($veranstaltung, $rows, $row, $spielorte); } #[NoReturn] function adminBegegnungenRundeErzeugen(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId); } $anzahlteams = $jInput->get('anzahlteams', 0, 'INT'); if ($anzahlteams == 0) die("Wrong number of teams!"); $datum_jahr = null; $zeitpunkt = null; if ($jInput->get('datum_tag', 0, 'INT') >= 0) { $datum = normalisiertesDatum($jInput->get('datum_jahr', 0, 'INT') == 0 ? null : sprintf("%04d-%02d-%02d", $jInput->get('datum_jahr', 0, 'INT'), $jInput->get('datum_monat', 0, 'INT'), $jInput->get('datum_tag', 0, 'INT'))); $uhrzeit = normalisierteUhrzeit(sprintf(" %02d-%02d-00", $jInput->get('uhrzeit_stunden', 0, 'INT'), $jInput->get('uhrzeit_minuten', 0, 'INT'))); $zeitpunkt = $datum == null || $uhrzeit == null ? null : ($datum . " " . $uhrzeit); $datum_kw = 0; } else { $datum_jahr = $jInput->get('datum_jahr', 0, 'INT'); $datum_kw = abs($jInput->get('datum_tag', 0, 'INT')); } $rundentyp = $jInput->get('rundentyp', -1, 'INT'); $runde = max(min(abs($jInput->get('runde', 1, 'INT')), $rundentyp == -2 ? 99 : 9999), 1); $platzierung_ende = max(min(abs($jInput->get('platzierung_ende', 0, 'INT')), $runde + 99), 1); if ($rundentyp >= 10000) $runde = $rundentyp; else if ($rundentyp == -2) $runde = 20000 + ((99 - abs($platzierung_ende - $runde)) * 100) + 99 - min($runde, $platzierung_ende); else if ($rundentyp == 0) $runde = 0; $query = "SELECT t1.*" . "\n FROM #__sportsmanager_team AS t1" . "\n WHERE veranstaltung_id = $veranstaltungId" . "\n ORDER BY t1.teamname"; $teams = loadObjectList($db, $query); $teamIds = []; for ($i = 1; $i <= $anzahlteams; $i++) $teamIds[$i] = $jInput->get('team_id_' . $i, 0, 'INT'); $spielort_ids = array(); for ($i = 1; $i <= $anzahlteams; $i += 2) $spielort_ids[$i] = $jInput->get('spielort_id_' . $i, 0, 'INT'); for ($teamNr = 1; $teamNr < $anzahlteams; $teamNr += 2) { $heim_team_id = $teamIds[$teamNr]; $gast_team_id = $teamIds[$teamNr + 1]; if ($heim_team_id == 0 || $gast_team_id == 0) continue; $heim_team = null; foreach ($teams as $t) { if ($t->team_id == $heim_team_id) { $heim_team = $t; break; } } if ($heim_team == null) die("Team id not found!"); $gast_team = null; foreach ($teams as $t) { if ($t->team_id == $gast_team_id) { $gast_team = $t; break; } } if ($gast_team == null) die("Team id not found!"); if ($datum_kw != null && $heim_team->heimspiel_wochentag !== 0) { $ts = getdate(mondaykw($datum_kw, $datum_jahr, $heim_team->heimspiel_wochentag - 1)); $zeitpunkt = sprintf("%04d-%02d-%02d %02d:%02d", $ts["year"], $ts["mon"], $ts["mday"], floor($heim_team->heimspiel_uhrzeit / 100), $heim_team->heimspiel_uhrzeit % 100); } $query = "INSERT INTO #__sportsmanager_begegnung (zeitpunkt, spieltag, heim_team_id, gast_team_id, spielort_id)" . "\n VALUES (" . ($zeitpunkt != null ? "'$zeitpunkt'" : "NULL") . ", " . ($runde != null ? "'$runde'" : "NULL") . ", '$heim_team_id', '$gast_team_id', " . ($spielort_ids[$teamNr] != 0 ? "'$spielort_ids[$teamNr]'" : "NULL") . ");"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId); } function getAuswahlSpieltagtitel() { $db = getDatabase(); $query = "SELECT spieltag_titel FROM #__sportsmanager_begegnung" . "\n WHERE spieltag_titel <> ''" . "\n GROUP BY spieltag_titel ORDER BY spieltag_titel;"; return loadObjectList($db, $query); } function adminBegegnungenPokalrundeAuslosenForm(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(true); $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $veranstaltung = $rows[0]; $query = "SELECT COUNT(teamname)" . "\n FROM #__sportsmanager_team" . "\n WHERE veranstaltung_id = $veranstaltungId" . "\n ORDER BY teamname"; $anzahlteams = loadResult($db, $query); $veranstaltung->letzteRunde = getAnzahlRunden($anzahlteams); $query = "SELECT t1.spieltag AS Runden_Nr 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 WHERE t4.veranstaltung_id = ".$veranstaltungId." GROUP BY t1.spieltag ORDER BY t1.spieltag DESC LIMIT 1;"; $Runde = loadObjectList($db, $query); if (!isset($Runde[0])) $veranstaltung->naechsteRunde = 1; else $veranstaltung->naechsteRunde = $Runde[0]->Runden_Nr + 1; $veranstaltung->titelVorschlag = getRundenTitel(pow(2, $veranstaltung->letzteRunde - $veranstaltung->naechsteRunde) * 2); // Spieltage ermitteln, die noch nicht abgeschlossen sind $query = "SELECT COUNT(DISTINCT spieltag) AS Anzahl" . "\n FROM #__sportsmanager_begegnung" . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis USING (begegnung_id)" . "\n INNER JOIN #__sportsmanager_team ON heim_team_id = team_id" . "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id" . "\n AND (heim_spielpunkte IS NULL OR gast_spielpunkte IS NULL" . "\n OR #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id IS NOT NULL)" . "\n ORDER BY spieltag DESC"; $veranstaltung->nicht_abgeschlossene_spiele = loadResult($db, $query); $query = "SELECT *" . "\n FROM #__sportsmanager_spielort" . "\n ORDER BY ortsname, name, ortsteil"; $spielorte = loadObjectList($db, $query); HTML_sportsmanager_admin::adminBegegnungenPokalrundeAuslosenForm($veranstaltung,getAuswahlSpieltagtitel(),$spielorte); } #[NoReturn] function adminBegegnungenPokalrundeAuslosen(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $sperren = false; $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); $spielort_id = $jInput->get('spielort_id', 0, 'INT'); $rundenNr = $jInput->get('runde', 0, 'INT'); $rundenTitel = $jInput->get('rundentitel', 0, 'STRING'); $spielumplatz3 = $jInput->get('spielumplatz3', 0, 'INT'); $teams = []; if ($veranstaltungId == 0) die("Missing id!"); if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId); } $query = "SELECT COUNT(teamname)" . "\n FROM #__sportsmanager_team" . "\n WHERE veranstaltung_id = $veranstaltungId" . "\n ORDER BY teamname"; $anzahlteams = loadResult($db, $query); $anzahlrunden = getAnzahlRunden($anzahlteams); $Verlierer = ""; //Alle Teams einlesen $query = "SELECT *" . "\n FROM #__sportsmanager_team" . "\n WHERE veranstaltung_id = $veranstaltungId "; $teams_komplett = json_decode(json_encode(loadObjectList($db, $query)), true); foreach($teams_komplett AS $team) { $teams[$team['team_id']] = $team; } if ($rundenNr == 1){ $anzahlmatches = $anzahlteams - pow(2, $anzahlrunden - 1 ); } else{ $anzahlmatches = pow(2, $anzahlrunden - $rundenNr); //Verlierer rausfiltern $query = "SELECT IF(t1.heim_punkte > t1.gast_punkte, t3.team_id, t2.team_id) AS Verlierer" . "\n FROM #__sportsmanager_begegnung AS t1" . "\n LEFT JOIN #__sportsmanager_team AS t2" . "\n ON t1.heim_team_id = t2.team_id LEFT JOIN #__sportsmanager_team AS t3" . "\n ON t1.gast_team_id = t3.team_id LEFT JOIN #__sportsmanager_veranstaltung AS t4" . "\n ON t2.veranstaltung_id = t4.veranstaltung_id" . "\n WHERE t4.veranstaltung_id = $veranstaltungId;"; $loosers = loadObjectList($db, $query); $Zeile = 0; foreach($loosers AS $looser) { if ($Zeile > 0) $Verlierer .= ","; $Verlierer .= $looser->Verlierer; $Zeile++; } } $query = "SELECT team_id" . "\n FROM #__sportsmanager_team" . "\n WHERE veranstaltung_id = $veranstaltungId "; if ($Verlierer != "") $query .= "\n AND team_id NOT IN (".$Verlierer.");"; $teams_auslosung = json_decode(json_encode(loadObjectList($db, $query)), true); // Teams durchmischen shuffle($teams_auslosung); if ($anzahlteams < 2) { $Fehlertext = "Zu wenige Teams vorhanden!!!"; $sperren = true; } if ($anzahlteams > 128) { $Fehlertext = "Zu viele Teams vorhanden!!!"; $sperren = true; } $datum_jahr = null; $zeitpunkt = ""; if ($jInput->get('datum_tag', 0, 'STRING') > 0 && $jInput->get('datum_jahr', 0, 'STRING') >= 0 && $jInput->get('datum_monat', 0, 'STRING') >= 0 && $jInput->get('uhrzeit_stunden', 0, 'STRING') >= 0 && $jInput->get('uhrzeit_minuten', 0, 'STRING') >= 0) { $datum = normalisiertesDatum($jInput->get('datum_jahr', 0, 'INT') == 0 ? null : sprintf("%04d-%02d-%02d", $jInput->get('datum_jahr', 0, 'INT'), $jInput->get('datum_monat', 0, 'INT'), $jInput->get('datum_tag', 0, 'INT'))); $uhrzeit = normalisierteUhrzeit(sprintf(" %02d-%02d-00", $jInput->get('uhrzeit_stunden', 0, 'INT'), $jInput->get('uhrzeit_minuten', 0, 'INT'))); $zeitpunkt = $datum == null || $uhrzeit == null ? null : ($datum . " " . $uhrzeit); $datum_kw = 0; } else { $datum_jahr = $jInput->get('datum_jahr', 0, 'INT'); $datum_kw = abs($jInput->get('datum_tag', 0, 'INT')); } if (!((($jInput->get('datum_tag', 0, 'STRING') <= 0 && $jInput->get('datum_jahr', 0, 'STRING') >= 2000)) || $zeitpunkt != "")) { $Fehlertext = "Bitte ein gültiges Datum eingeben!!!"; $sperren = true; } for ($matchNr = 0; $matchNr < $anzahlmatches; $matchNr++) { $team_heim = $matchNr * 2 ; $team_gast = $team_heim + 1; $matches[$matchNr]['heim'] = $teams_auslosung[$team_heim]['team_id']; $matches[$matchNr]['gast'] = $teams_auslosung[$team_gast]['team_id']; } if ($spielumplatz3) { //Verlierer Halbfinale ermitteln $query = "SELECT IF(t1.heim_punkte > t1.gast_punkte, t3.team_id, t2.team_id) AS Verlierer" . "\n FROM #__sportsmanager_begegnung AS t1" . "\n LEFT JOIN #__sportsmanager_team AS t2" . "\n ON t1.heim_team_id = t2.team_id LEFT JOIN #__sportsmanager_team AS t3" . "\n ON t1.gast_team_id = t3.team_id LEFT JOIN #__sportsmanager_veranstaltung AS t4" . "\n ON t2.veranstaltung_id = t4.veranstaltung_id" . "\n WHERE t4.veranstaltung_id = $veranstaltungId" . "\n AND t1.spieltag = " . ($rundenNr - 1) . " ORDER BY RAND();"; $loosers = loadObjectList($db, $query); $matches[2]['heim'] = $loosers[0]->Verlierer; $matches[2]['gast'] = $loosers[1]->Verlierer; $matches[2]['rundentitel'] = "Spiel um Platz 3"; } $Fehlertext = ""; foreach($matches AS $spiel_nr => $match) { $matches[$spiel_nr]['rundentitel'] = $matches[$spiel_nr]['rundentitel'] ?? $rundenTitel; $matches[$spiel_nr]['zeitpunkt'] = $zeitpunkt; $matches[$spiel_nr]['heimspielort_id'] = $teams[$teams_setzliste[$setzung[0]]]['heimspielort_id']; $team_heim = $match['heim']; if ($datum_kw != null && $teams[$team_heim]['heimspiel_wochentag'] !== 0) { $ts = getdate(mondaykw($datum_kw, $datum_jahr, $teams[$team_heim]['heimspiel_wochentag'] - 1)); $matches[$spiel_nr]['zeitpunkt'] = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $ts["year"], $ts["mon"], $ts["mday"], floor($teams[$team_heim]['heimspiel_uhrzeit'] / 100), $teams[$team_heim]['heimspiel_uhrzeit'] % 100, 0); } if (!validateDate($matches[$spiel_nr]['zeitpunkt'])){ $sperren = true; $Fehlertext .= "Bitte die Heimspiel Uhrzeit des " . $teams[$matches[$spiel_nr]['heim']]['teamname'] . " überprüfen!!!
"; } } if (!$sperren){ $Zeile = 0; $query = "INSERT INTO #__sportsmanager_begegnung (zeitpunkt, spieltag, spieltag_titel, spiel_nr, heim_team_id, gast_team_id, spielort_id) values "; foreach ($matches AS $key => $match) { if (++$Zeile > 1) $query .= ", "; $query .= "('" . $match['zeitpunkt'] . "', " . $rundenNr . ", '" . $match['rundentitel'] . "', " . $key . ", '" . $match['heim'] . "', '" . $match['gast'] . "'" . ", " . ($spielort_id != 0 ? "'" . $spielort_id . "'" : "NULL") . ")"; } $query .= "; "; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId); } else{ echo " $Fehlertext\n"; } } #[NoReturn] function adminBegegnungenPokalrundeSetzliste(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $teams = []; $setzliste = []; $setzung = []; $matches = []; $sperren = false; $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); $spielort_id = $jInput->get('spielort_id', 0, 'INT'); $rundenNr = $jInput->get('runde', 0, 'INT'); $rundenTitel = $jInput->get('rundentitel', 0, 'STRING'); $spielumplatz3 = $jInput->get('spielumplatz3', 0, 'INT'); $heimrecht_losen = $jInput->get('heimrecht_losen', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId); } $query = "SELECT COUNT(teamname)" . "\n FROM #__sportsmanager_team" . "\n WHERE veranstaltung_id = $veranstaltungId" . "\n ORDER BY teamname"; $anzahlteams = loadResult($db, $query); $anzahlrunden = getAnzahlRunden($anzahlteams); //Vergabe der Setzliste if ($rundenNr == 1){ $query = "UPDATE #__sportsmanager_team AS t JOIN ( SELECT team_id, (@r := @r + 1) AS rnd_num FROM ( SELECT team_id FROM #__sportsmanager_team WHERE veranstaltung_id = $veranstaltungId ORDER BY RAND() ) AS shuffled JOIN (SELECT @r := 0) AS init ) AS x ON t.team_id = x.team_id SET t.setzliste_nr = x.rnd_num;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } $query = "SELECT *" . "\n FROM #__sportsmanager_team" . "\n WHERE veranstaltung_id = $veranstaltungId" . "\n ORDER BY setzliste_nr;"; $teams_array = json_decode(json_encode(loadObjectList($db, $query)), true); foreach($teams_array AS $team) { $teams_setzliste[$team['setzliste_nr']] = $team['team_id']; $teams[$team['team_id']] = $team; } if ($anzahlteams < 2) { $Fehlertext = "Zu wenige Teams vorhanden!!!"; $sperren = true; } $datum_jahr = null; $zeitpunkt = ""; if ($jInput->get('datum_tag', 0, 'STRING') > 0 && $jInput->get('datum_jahr', 0, 'STRING') >= 0 && $jInput->get('datum_monat', 0, 'STRING') >= 0 && $jInput->get('uhrzeit_stunden', 0, 'STRING') >= 0 && $jInput->get('uhrzeit_minuten', 0, 'STRING') >= 0) { $datum = normalisiertesDatum($jInput->get('datum_jahr', 0, 'INT') == 0 ? null : sprintf("%04d-%02d-%02d", $jInput->get('datum_jahr', 0, 'INT'), $jInput->get('datum_monat', 0, 'INT'), $jInput->get('datum_tag', 0, 'INT'))); $uhrzeit = normalisierteUhrzeit(sprintf(" %02d-%02d-00", $jInput->get('uhrzeit_stunden', 0, 'INT'), $jInput->get('uhrzeit_minuten', 0, 'INT'))); $zeitpunkt = $datum == null || $uhrzeit == null ? null : ($datum . " " . $uhrzeit); $datum_kw = 0; } else { $datum_jahr = $jInput->get('datum_jahr', 0, 'INT'); $datum_kw = abs($jInput->get('datum_tag', 0, 'INT')); } if (!((($jInput->get('datum_tag', 0, 'STRING') <= 0 && $jInput->get('datum_jahr', 0, 'STRING') >= 2000)) || $zeitpunkt != "")) { $Fehlertext = "Bitte ein gültiges Datum eingeben!!!"; $sperren = true; } $matches = []; if ($rundenNr == 1){ $setzliste = getSetzliste($anzahlrunden); $spiel_nr = 0; foreach($setzliste AS $setzung){ $spiel_nr++; if ($setzung[0] <= $anzahlteams && $setzung[1] <= $anzahlteams){ $matches[$spiel_nr]['heim'] = $teams_setzliste[$setzung[0]]; $matches[$spiel_nr]['gast'] = $teams_setzliste[$setzung[1]]; } } } //Freilose Runde 1 ermitteln if ($rundenNr == 2){ $setzliste = getSetzliste($anzahlrunden); $spiel_nr = 0; foreach($setzliste AS $setzung){ $spiel_nr++; if ($setzung[0] > $anzahlteams || $setzung[1] > $anzahlteams){ if ($spiel_nr % 2) $matches[round($spiel_nr/2)]['heim'] = $teams_setzliste[min($setzung[0],$setzung[1])]; else $matches[round($spiel_nr/2)]['gast'] = $teams_setzliste[min($setzung[0],$setzung[1])]; } } } //Sieger der vorherigen Runde ermitteln if ($rundenNr >= 2){ $query = "SELECT t4.bezeichnung AS Liga, t1.zeitpunkt AS Spielstart, t2.teamname AS Heim, t3.teamname AS Gast, t1.heim_team_id, t1.gast_team_id, t1.spieltag_titel AS Runde, t1.spieltag AS Spieltag_Nr, t1.spiel_nr AS Spiel_Nr, 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 WHERE t4.veranstaltung_id = " . $veranstaltungId . " AND t1.spieltag = " . ($rundenNr - 1) . " ORDER BY t4.veranstaltung_id, t1.spieltag, t1.spiel_nr;"; $begegnungen = json_decode(json_encode(loadObjectList($db, $query)), true); foreach($begegnungen AS $begegnung) { if ($begegnung['Heim_Satzpunkte'] > $begegnung['Gast_Satzpunkte']) $sieger = $begegnung['heim_team_id']; else $sieger = $begegnung['gast_team_id']; if ($begegnung['Spiel_Nr'] % 2) $matches[round($begegnung['Spiel_Nr']/2)]['heim'] = $sieger; else $matches[round($begegnung['Spiel_Nr']/2)]['gast'] = $sieger; } } if ($spielumplatz3) { //Verlierer Halbfinale ermitteln $query = "SELECT IF(t1.heim_punkte > t1.gast_punkte, t3.team_id, t2.team_id) AS Verlierer" . "\n FROM #__sportsmanager_begegnung AS t1" . "\n LEFT JOIN #__sportsmanager_team AS t2" . "\n ON t1.heim_team_id = t2.team_id LEFT JOIN #__sportsmanager_team AS t3" . "\n ON t1.gast_team_id = t3.team_id LEFT JOIN #__sportsmanager_veranstaltung AS t4" . "\n ON t2.veranstaltung_id = t4.veranstaltung_id" . "\n WHERE t4.veranstaltung_id = $veranstaltungId" . "\n AND t1.spieltag = " . ($rundenNr - 1) . ";"; $loosers = loadObjectList($db, $query); $matches[2]['heim'] = $loosers[0]->Verlierer; $matches[2]['gast'] = $loosers[1]->Verlierer; $matches[2]['rundentitel'] = "Spiel um Platz 3"; } if ($heimrecht_losen) { foreach ($matches as $key => $match) { if (random_int(0, 1) === 1) { $tmp = $matches[$key]['heim']; $matches[$key]['heim'] = $matches[$key]['gast']; $matches[$key]['gast'] = $tmp; } } } $Fehlertext = ""; foreach($matches AS $spiel_nr => $match) { $matches[$spiel_nr]['rundentitel'] = $matches[$spiel_nr]['rundentitel'] ?? $rundenTitel; $matches[$spiel_nr]['zeitpunkt'] = $zeitpunkt; $team_heim = $match['heim']; if ($datum_kw != null && $teams[$team_heim]['heimspiel_wochentag'] !== 0) { $ts = getdate(mondaykw($datum_kw, $datum_jahr, $teams[$team_heim]['heimspiel_wochentag'] - 1)); $matches[$spiel_nr]['zeitpunkt'] = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $ts["year"], $ts["mon"], $ts["mday"], floor($teams[$team_heim]['heimspiel_uhrzeit'] / 100), $teams[$team_heim]['heimspiel_uhrzeit'] % 100, 0); } if (!validateDate($matches[$spiel_nr]['zeitpunkt'])){ $sperren = true; $Fehlertext .= "Bitte die Heimspiel Uhrzeit des " . $teams[$matches[$spiel_nr]['heim']]['teamname'] . " überprüfen!!!
"; } } if (!$sperren){ $Zeile = 0; $query = "INSERT INTO #__sportsmanager_begegnung (zeitpunkt, spieltag, spieltag_titel, spiel_nr, heim_team_id, gast_team_id, spielort_id) values "; foreach ($matches AS $key => $match) { if (++$Zeile > 1) $query .= ", "; $query .= "('" . $match['zeitpunkt'] . "', " . $rundenNr . ", '" . $match['rundentitel'] . "', " . $key . ", '" . $match['heim'] . "', '" . $match['gast'] . "'" . ", " . ($spielort_id != 0 ? "'" . $spielort_id . "'" : "NULL") . ")"; } $query .= "; "; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId); } else{ echo " $Fehlertext\n"; } } #[NoReturn] function adminBegegnungenAlleEntfernen(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(); // Veranstaltung ermitteln $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $veranstaltung = $rows[0]; $query = "SELECT MIN(DATE(zeitpunkt))" . "\n FROM #__sportsmanager_begegnung" . "\n LEFT JOIN #__sportsmanager_team ON heim_team_id = team_id" . "\n WHERE veranstaltung_id = $veranstaltungId"; $aktualisieren_ab_datum = loadResult($db, $query); $query = "SELECT *" . "\n FROM #__sportsmanager_begegnung" . "\n LEFT JOIN #__sportsmanager_team ON heim_team_id = team_id" . "\n WHERE veranstaltung_id = $veranstaltungId"; $rows = loadObjectList($db, $query); foreach ($rows as $row) { $id = $row->begegnung_id; $query = "DELETE FROM #__sportsmanager_begegnung_historie WHERE begegnung_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_unbestaetigtes_ergebnis WHERE begegnung_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_teamspiel WHERE begegnung_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_begegnung WHERE begegnung_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "UPDATE #__sportsmanager_team SET setzliste_nr = NULL WHERE veranstaltung_id = $veranstaltungId;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } if ($veranstaltung->status != 0 && $veranstaltung->elo_wertung != 0) { wannGespieltAktualisieren(); eloAktualisieren($aktualisieren_ab_datum); einstufungAktualisieren(); } redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId); } function adminBegegnungenExportForm(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); if ($veranstaltungId == 0) die("Missing id!"); if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(); // Veranstaltung ermitteln $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $veranstaltung = $rows[0]; //Alle Ligen einer Saison ermitteln $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE saison_id = " . $veranstaltung->saison_id . " AND #__sportsmanager_veranstaltung.bezeichnung NOT IN ('Schiedsrichter') ORDER BY #__sportsmanager_veranstaltung.reihenfolge;"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $saison = $rows; HTML_sportsmanager_admin::adminBegegnungenExport($veranstaltung,$saison); } #[NoReturn] function adminBegegnungenExport(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $veranstaltungId = $jInput->get('veranstaltungId', 0, 'INT'); $export = $jInput->get('export', '', 'RAW'); if ($veranstaltungId == 0) die("Missing id!"); if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) keinZugriff(); // Veranstaltung ermitteln $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $veranstaltung = $rows[0]; if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId); } unset($rows); $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, 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); $dateiname = "Spieler " . $veranstaltung->bezeichnung; } if ($export == "spielplan" or $export == "spielberichte") { $query = " SELECT t1.begegnung_id AS ID, t5.saisonbezeichnung AS Saison, t4.bezeichnung AS Liga, t1.zeitpunkt AS Spielstart, t2.teamname AS Heim, t3.teamname AS Gast, t1.spieltag AS Spieltag_Nr, t1.spiel_nr AS Spiel_Nr, 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.zeitpunkt; "; $rows = loadObjectList($db, $query); $dateiname = "Spielplan " . $veranstaltung->bezeichnung; } if (!isset($rows) or count($rows) == 0) { redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=1', "Zu dieser Auswahl sind keine Daten vorhanden!"); } 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) { // letze Änderung $query = " SELECT t1.eingetragen AS gespeichert_um, t2.name AS gespeichert_von FROM #__sportsmanager_begegnung_historie AS t1 LEFT JOIN #__users AS t2 ON t1.user_id = t2.id WHERE begegnung_id = " . $value->ID . " AND aktion IN (5,6,7,8,9) ORDER BY eingetragen DESC LIMIT 1; "; $letzterEintrag = loadObjectList($db, $query); $value->gespeichert_um = $letzterEintrag[0]->gespeichert_um; $value->gespeichert_von = $letzterEintrag[0]->gespeichert_von; // 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; } } $dateiname = "Spielberichte " . $veranstaltung->bezeichnung; } $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 = ""; $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 { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("turniere_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); if ($id == null) $row = null; else { $query = "SELECT * FROM #__sportsmanager_turnier WHERE turnier_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $row = $rows[0]; } $vorlage = $jInput->get('vorlage', 0, 'INT'); $query = "SELECT * FROM #__sportsmanager_veranstalter ORDER BY veranstalterbezeichnung"; $veranstalter = loadObjectList($db, $query); $query = "SELECT * FROM #__sportsmanager_saison ORDER BY saisonbezeichnung DESC"; $saisons = loadObjectList($db, $query); if (empty($id)) { $berechtigt_fuer_turnier = array(); } else { $query = "SELECT #__sportsmanager_berechtigt_fuer_turnier.* FROM #__sportsmanager_berechtigt_fuer_turnier, #__users WHERE berechtigt_user_id = id AND berechtigt_turnier_id = $id ORDER BY username, name"; $berechtigt_fuer_turnier = loadObjectList($db, $query); } $query = "SELECT * FROM #__users ORDER BY name, username"; $users = loadObjectList($db, $query); $query = "SELECT nummer, bezeichnung FROM #__sportsmanager_kategorie WHERE typ = 3 ORDER BY nummer"; $rows_kategorien = loadObjectList($db, $query); $kategorien = array(); foreach ($rows_kategorien as $kategorie) $kategorien[$kategorie->nummer] = $kategorie->bezeichnung; HTML_sportsmanager_admin::adminEditTurnier($row, $veranstalter, $saisons, $vorlage, $users, $berechtigt_fuer_turnier, $kategorien); } #[NoReturn] function adminSaveTurnier(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("turniere_aendern")) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_uebersicht'); } $id = $jInput->get('id', 0, 'INT'); $veranstalterId = $jInput->get('veranstalterid', 0, 'INT'); $turnierbezeichnung = $db->escape(trim($jInput->get('turnierbezeichnung', '', 'RAW'))); $saison_id = $jInput->get('saison_id', 0, 'INT'); $turnierort = $db->escape(trim($jInput->get('turnierort', '', 'RAW'))); $erster_tag = normalisiertesDatum(sprintf("%04d-%02d-%02d", $jInput->get('erster_tag_jahr', 2000, 'INT'), $jInput->get('erster_tag_monat', 1, 'INT'), $jInput->get('erster_tag_tag', 1, 'INT'))); $mehrtaegig = $jInput->get('mehrtaegig', 0, 'INT'); if (!$mehrtaegig) $letzter_tag = $erster_tag; else $letzter_tag = normalisiertesDatum(sprintf("%04d-%02d-%02d", $jInput->get('letzter_tag_jahr', 2000, 'INT'), $jInput->get('letzter_tag_monat', 1, 'INT'), $jInput->get('letzter_tag_tag', 1, 'INT'))); $kategorie = $jInput->get('kategorie', 0, 'INT'); $vorlage = $jInput->get('vorlage', 0, 'INT'); $berechtigt_fuer_turnier_user_ids = array(); for ($i = 1; $i <= 6; $i++) { $berechtigt_user_id = $jInput->get('berechtigt_fuer_turnier_user_' . $i . '_id', 0, 'INT'); if (!empty($berechtigt_user_id) && !in_array($berechtigt_user_id, $berechtigt_fuer_turnier_user_ids)) $berechtigt_fuer_turnier_user_ids[] = $berechtigt_user_id; } if ($vorlage) { $vorlage_id = $id; $id = 0; $query = "SELECT erster_tag FROM #__sportsmanager_turnier WHERE turnier_id = $vorlage_id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $vorlage_erster_tag = $rows[0]->erster_tag; } if ($id == 0) { $query = "INSERT INTO #__sportsmanager_turnier (veranstalter_id, turnierbezeichnung, saison_id, turnierort, erster_tag" . ($letzter_tag != null ? ", letzter_tag" : "") . ", kategorie) VALUES ('$veranstalterId', '$turnierbezeichnung', '$saison_id', '$turnierort', '$erster_tag'" . ($letzter_tag != null ? ", '$letzter_tag'" : "") . ", '$kategorie');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $id = $db->insertid(); } else { $query = "UPDATE #__sportsmanager_turnier" . "\n SET veranstalter_id = '$veranstalterId'," . "\n turnierbezeichnung = '$turnierbezeichnung'," . "\n saison_id = '$saison_id'," . "\n turnierort = '$turnierort'," . "\n erster_tag = '$erster_tag'," . "\n letzter_tag = " . ($letzter_tag != null ? "'$letzter_tag'" : "NULL") . "," . "\n kategorie = '$kategorie'" . "\n WHERE turnier_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_turnier WHERE berechtigt_turnier_id = $id"; if (!empty($berechtigt_fuer_turnier_user_ids)) $query .= " AND berechtigt_user_id NOT IN (" . implode(",", $berechtigt_fuer_turnier_user_ids) . ")"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_turnier WHERE berechtigt_turnier_id = $id"; $rows = loadObjectList($db, $query); foreach ($rows as $row) { $index = array_search($row->berechtigt_user_id, $berechtigt_fuer_turnier_user_ids); if ($index !== false) { unset($berechtigt_fuer_turnier_user_ids[$index]); } } foreach ($berechtigt_fuer_turnier_user_ids as $berechtigt_user_id) { $query = "INSERT INTO #__sportsmanager_berechtigt_fuer_turnier (berechtigt_user_id, berechtigt_turnier_id) VALUES ('$berechtigt_user_id', '$id');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } if ($vorlage) { $query = "SELECT *" . "\n FROM #__sportsmanager_turnierdisziplin" . "\n WHERE turnier_id = $vorlage_id"; $disziplinen = loadObjectList($db, $query); foreach ($disziplinen as $disziplin) { $ts = getdate(strtotime($erster_tag) - strtotime($vorlage_erster_tag) + strtotime($disziplin->beginn)); $neuer_beginn = $disziplin->beginn == null ? null : sprintf("%04d-%02d-%02d %02d:%02d", $ts["year"], $ts["mon"], $ts["mday"], $ts["hours"], $ts["minutes"]); $query = "INSERT INTO #__sportsmanager_turnierdisziplin (turnier_id, disziplin, kuerzel, beginn, typ, elo_wertung, voranmeldung, voranmeldungen_rangliste_id, voranmeldungen_reihenfolge, reihenfolge, status)" . "\n VALUES ('$id', '" . $db->escape($disziplin->disziplin) . "', '" . $db->escape($disziplin->kuerzel) . "', " . ($neuer_beginn == null ? "NULL" : "'$neuer_beginn'") . ", '$disziplin->typ', '$disziplin->elo_wertung', " . ($disziplin->voranmeldung == null ? "NULL" : ("'" . $disziplin->voranmeldung . "'")) . ", " . ($disziplin->voranmeldungen_rangliste_id == 0 ? "NULL" : ("'" . $disziplin->voranmeldungen_rangliste_id . "'")) . ", '$disziplin->voranmeldungen_reihenfolge', '$disziplin->reihenfolge', '$disziplin->status');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $disziplin_id = $db->insertid(); $query = "SELECT *" . "\n FROM #__sportsmanager_rangliste_turnierdisziplin" . "\n WHERE turnierdisziplin_id = $disziplin->turnierdisziplin_id"; $ranglisten = loadObjectList($db, $query); foreach ($ranglisten as $rangliste) { $query = "INSERT INTO #__sportsmanager_rangliste_turnierdisziplin (rangliste_id, turnierdisziplin_id, system_id, wertung, doppel_teilwertung) VALUES ('$rangliste->rangliste_id', '$disziplin_id', " . ($rangliste->system_id != null ? "'$rangliste->system_id'" : "NULL") . ", '" . $db->escape($rangliste->wertung) . "', '" . $db->escape($rangliste->doppel_teilwertung) . "');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } } redirectSportsManagerURL('&task=admin_uebersicht'); } #[NoReturn] function adminRemoveTurnier(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("turniere_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_turnierdisziplin WHERE turnier_id = $id AND elo_wertung > 0), 1, 0)"; $elo_aktualisieren = loadResult($db, $query); $query = "SELECT MIN(DATE(beginn))" . "\n FROM #__sportsmanager_turnierdisziplin" . "\n WHERE turnier_id = $id AND elo_wertung > 0"; $aktualisieren_ab_datum = loadResult($db, $query); $query = "DELETE #__sportsmanager_turnierspiel FROM #__sportsmanager_turnierspiel, #__sportsmanager_turnierdisziplin WHERE #__sportsmanager_turnierspiel.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND turnier_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE #__sportsmanager_turniermeldung_spieler_name FROM #__sportsmanager_turniermeldung_spieler_name, #__sportsmanager_turniermeldung_spieler, #__sportsmanager_turniermeldung, #__sportsmanager_turnierdisziplin WHERE #__sportsmanager_turniermeldung_spieler_name.turniermeldung_spieler_id = #__sportsmanager_turniermeldung_spieler.turniermeldung_spieler_id AND #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id AND #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND turnier_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE #__sportsmanager_turniermeldung_spieler FROM #__sportsmanager_turniermeldung_spieler, #__sportsmanager_turniermeldung, #__sportsmanager_turnierdisziplin WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id AND #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND turnier_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE #__sportsmanager_turniermeldung FROM #__sportsmanager_turniermeldung, #__sportsmanager_turnierdisziplin WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND turnier_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE #__sportsmanager_rangliste_turnierdisziplin FROM #__sportsmanager_rangliste_turnierdisziplin, #__sportsmanager_turnierdisziplin WHERE #__sportsmanager_rangliste_turnierdisziplin.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND turnier_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE #__sportsmanager_turnier_rundenstufe FROM #__sportsmanager_turnier_rundenstufe, #__sportsmanager_turnierdisziplin WHERE #__sportsmanager_turnier_rundenstufe.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND turnier_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_turnierdisziplin WHERE turnier_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_turnier WHERE berechtigt_turnier_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_turnier WHERE turnier_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } if ($elo_aktualisieren) { wannGespieltAktualisieren(); eloAktualisieren($aktualisieren_ab_datum); } ranglisteAktualisieren(); einstufungAktualisieren(); redirectSportsManagerURL('&task=admin_uebersicht'); } function adminTurnierdisziplinen(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $turnierid = $jInput->get('turnierid', 0, 'INT'); if ($turnierid == 0) die("Missing id!"); if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierid)) keinZugriff(true); $beschraenkter_zugriff_turniere = benutzerZugriff("turniere_aendern") ? 0 : 1; $query = "SELECT * FROM #__sportsmanager_turnier WHERE turnier_id = $turnierid"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $turnier = $rows[0]; $query = "SELECT t1.*," . "\n (SELECT COUNT(*) FROM #__sportsmanager_turniermeldung AS t2 WHERE t1.turnierdisziplin_id = t2.turnierdisziplin_id AND rundenstufe = 20) AS voranmeldungen," . "\n (SELECT COUNT(*) FROM #__sportsmanager_turniermeldung AS t2 WHERE t1.turnierdisziplin_id = t2.turnierdisziplin_id AND rundenstufe = 0) AS meldungen," . "\n (SELECT COUNT(*) FROM #__sportsmanager_turnierspiel AS t2 WHERE t1.turnierdisziplin_id = t2.turnierdisziplin_id) AS spiele" . "\n FROM #__sportsmanager_turnierdisziplin AS t1" . "\n WHERE turnier_id = $turnierid" . "\n ORDER BY reihenfolge, disziplin, beginn"; $rows = loadObjectList($db, $query); HTML_sportsmanager_admin::adminTurnierdisziplinen($turnier, $rows, $beschraenkter_zugriff_turniere); } function adminEditTurnierdisziplin(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("turniere_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $turnierid = $jInput->get('turnierid', 0, 'INT'); if ($turnierid == 0) die("Missing id!"); if ($id == null) $row = null; else { $query = "SELECT * FROM #__sportsmanager_turnierdisziplin WHERE turnierdisziplin_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $row = $rows[0]; } $query = "SELECT * FROM #__sportsmanager_turnier WHERE turnier_id = $turnierid"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $turnier = $rows[0]; // Ranglisten ermitteln if ($id == 0) { $query = "SELECT #__sportsmanager_rangliste.rangliste_id, bezeichnung, saisonbezeichnung" . "\n FROM #__sportsmanager_rangliste" . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" . "\n ORDER BY saisonbezeichnung DESC, reihenfolge, bezeichnung, kategorie"; } else { $query = "SELECT DISTINCT #__sportsmanager_rangliste.rangliste_id, turnierdisziplin_id, ranglisten.system_id, wertung, doppel_teilwertung, bezeichnung, saisonbezeichnung" . "\n FROM #__sportsmanager_rangliste" . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" . "\n LEFT JOIN (SELECT rangliste_id, turnierdisziplin_id, system_id, wertung, doppel_teilwertung FROM #__sportsmanager_rangliste_turnierdisziplin WHERE turnierdisziplin_id = $id) AS ranglisten USING (rangliste_id)" . "\n ORDER BY saisonbezeichnung DESC, reihenfolge, bezeichnung, kategorie"; } $ranglisten = loadObjectList($db, $query); if ($id == 0) { $query = "SELECT *" . "\n FROM #__sportsmanager_rangliste_system" . "\n WHERE status != 0" . "\n ORDER BY systembezeichnung"; } else { $query = "SELECT DISTINCT rangliste_system_id, #__sportsmanager_rangliste_system.*" . "\n FROM #__sportsmanager_rangliste_system" . "\n LEFT JOIN #__sportsmanager_rangliste_turnierdisziplin ON turnierdisziplin_id = $id AND system_id = rangliste_system_id" . "\n WHERE status != 0 OR NOT ISNULL(turnierdisziplin_id)" . "\n ORDER BY systembezeichnung"; } $systeme = loadObjectList($db, $query); HTML_sportsmanager_admin::adminEditTurnierdisziplin($turnier, $row, $ranglisten, $systeme); } #[NoReturn] function adminSaveTurnierdisziplin(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("turniere_aendern")) keinZugriff(); $id = $jInput->get('id', 0, 'INT'); $turnierId = $jInput->get('turnierid', 0, 'INT'); if ($turnierId == 0) die("Missing id!"); $disziplin = $db->escape(trim($jInput->get('disziplin', '', 'RAW'))); $kuerzel = $db->escape(trim($jInput->get('kuerzel', '', 'RAW'))); $datum = normalisiertesDatum($jInput->get('datum_jahr', 0, 'INT') == 0 ? null : sprintf("%04d-%02d-%02d", $jInput->get('datum_jahr', 0, 'INT'), $jInput->get('datum_monat', 0, 'INT'), $jInput->get('datum_tag', 0, 'INT'))); $uhrzeit = normalisierteUhrzeit(sprintf(" %02d-%02d-00", $jInput->get('uhrzeit_stunden', 0, 'INT'), $jInput->get('uhrzeit_minuten', 0, 'INT'))); $beginn = $datum == null || $uhrzeit == null ? null : ($datum . " " . $uhrzeit); $reihenfolge = $jInput->get('reihenfolge', 0, 'INT'); $aktualisieren_ab_datum = $datum; if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_turnierdisziplinen&turnierid=' . $turnierId); } $typ = $jInput->get('typ', 0, 'INT'); $elo_wertung = $jInput->get('elo_wertung', 0, 'INT'); $voranmeldung_datum = normalisiertesDatum($jInput->get('voranmeldung_datum_jahr', 0, 'INT') == 0 ? null : sprintf("%04d-%02d-%02d", $jInput->get('voranmeldung_datum_jahr', 0, 'INT'), $jInput->get('voranmeldung_datum_monat', 0, 'INT'), $jInput->get('voranmeldung_datum_tag', 0, 'INT'))); $voranmeldung_uhrzeit = normalisierteUhrzeit(sprintf(" %02d-%02d-00", $jInput->get('voranmeldung_uhrzeit_stunden', 0, 'INT'), $jInput->get('voranmeldung_uhrzeit_minuten', 0, 'INT'))); $voranmeldung = $voranmeldung_datum == null || $voranmeldung_uhrzeit == null ? null : ($voranmeldung_datum . " " . $voranmeldung_uhrzeit); $status = $jInput->get('status', 0, 'INT'); $voranmeldungen_rangliste_id = $jInput->get('voranmeldungen_rangliste_id', 0, 'INT'); $voranmeldungen_reihenfolge = $jInput->get('voranmeldungen_reihenfolge', 0, 'INT'); $i = 0; $rangliste_id = $jInput->get('rangliste_id_' . $i, 0, 'INT'); $rangliste_system_id = $jInput->get('rangliste_system_id_' . $i, 0, 'INT'); $rangliste_wertung = $jInput->get('rangliste_wertung_' . $i, 0, 'RAW'); $rangliste_doppel_teilwertung = $jInput->get('doppel_teilwertung_' . $i, 0, 'RAW'); $ranglisten_beruecksichtigt = array(); $ranglisten_beruecksichtigt_system_id = array(); $ranglisten_beruecksichtigt_wertung = array(); $ranglisten_beruecksichtigt_doppel_teilwertung = array(); while ($rangliste_id != 0 && !in_array($rangliste_id, $ranglisten_beruecksichtigt)) { $ranglisten_beruecksichtigt[] = $rangliste_id; $ranglisten_beruecksichtigt_system_id[] = $rangliste_system_id; $ranglisten_beruecksichtigt_wertung[] = $rangliste_wertung; $ranglisten_beruecksichtigt_doppel_teilwertung[] = $rangliste_doppel_teilwertung; $i++; $rangliste_id = $jInput->get('rangliste_id_' . $i, 0, 'INT'); $rangliste_system_id = $jInput->get('rangliste_system_id_' . $i, 0, 'INT'); $rangliste_wertung = $jInput->get('rangliste_wertung_' . $i, 0, 'RAW'); $rangliste_doppel_teilwertung = $jInput->get('doppel_teilwertung_' . $i, 0, 'RAW'); } $elo_aktualisieren = false; if ($id == 0) { $aktualisieren = false; $query = "INSERT INTO #__sportsmanager_turnierdisziplin (turnier_id, disziplin, kuerzel, beginn, typ, elo_wertung, voranmeldung, voranmeldungen_rangliste_id, voranmeldungen_reihenfolge, reihenfolge, status)" . "\n VALUES ('$turnierId', '$disziplin', '$kuerzel', '$beginn', '$typ', '$elo_wertung', " . ($voranmeldung == null ? "NULL" : ("'" . $voranmeldung . "'")) . ", " . ($voranmeldungen_rangliste_id == 0 ? "NULL" : ("'" . $voranmeldungen_rangliste_id . "'")) . ", '$voranmeldungen_reihenfolge', '$reihenfolge', '$status');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $id = $db->insertid(); } else { $aktualisieren = true; $query = "SELECT * FROM #__sportsmanager_turnierdisziplin WHERE turnierdisziplin_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $row = $rows[0]; $elo_aktualisieren = $row->elo_wertung || $elo_wertung; if ($row->typ != $typ) { $query = "DELETE FROM #__sportsmanager_turnierspiel WHERE turnierdisziplin_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE #__sportsmanager_turniermeldung_spieler_name FROM #__sportsmanager_turniermeldung_spieler_name, #__sportsmanager_turniermeldung_spieler, #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung_spieler_name.turniermeldung_spieler_id = #__sportsmanager_turniermeldung_spieler.turniermeldung_spieler_id AND #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id AND turnierdisziplin_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE #__sportsmanager_turniermeldung_spieler FROM #__sportsmanager_turniermeldung_spieler, #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id AND turnierdisziplin_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_turniermeldung WHERE turnierdisziplin_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } $query = "UPDATE #__sportsmanager_turnierdisziplin" . "\n SET turnier_id = '$turnierId'," . "\n disziplin = '$disziplin'," . "\n kuerzel = '$kuerzel'," . "\n beginn = " . ($beginn == null ? "NULL" : ("'" . $beginn . "'")) . "," . "\n typ = '$typ'," . "\n elo_wertung = '$elo_wertung'," . "\n voranmeldung = " . ($voranmeldung == null ? "NULL" : ("'" . $voranmeldung . "'")) . "," . "\n voranmeldungen_rangliste_id = " . ($voranmeldungen_rangliste_id == 0 ? "NULL" : ("'" . $voranmeldungen_rangliste_id . "'")) . "," . "\n voranmeldungen_reihenfolge = '$voranmeldungen_reihenfolge'," . "\n reihenfolge = '$reihenfolge'," . "\n status = '$status'" . "\n WHERE turnierdisziplin_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } // Berücksichtige Ranglisten prüfen und ggf. aktualisieren $query = "SELECT rangliste_id, system_id, wertung, doppel_teilwertung" . "\n FROM #__sportsmanager_rangliste_turnierdisziplin" . "\n WHERE turnierdisziplin_id = $id"; $bestehende_ranglisten_beruecksichtigt = loadObjectList($db, $query); foreach ($bestehende_ranglisten_beruecksichtigt as $bestehende_rangliste_beruecksichtigt) { $ist_beruecksichtigt = false; foreach ($ranglisten_beruecksichtigt as $rangliste_id) { if ($bestehende_rangliste_beruecksichtigt->rangliste_id == $rangliste_id) { $ist_beruecksichtigt = true; break; } } if (!$ist_beruecksichtigt) { $query = "DELETE FROM #__sportsmanager_rangliste_turnierdisziplin WHERE rangliste_id = $bestehende_rangliste_beruecksichtigt->rangliste_id AND turnierdisziplin_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } foreach ($ranglisten_beruecksichtigt as $index => $rangliste_id) { $ist_beruecksichtigt = false; $bestehende_rangliste_system_id = null; $bestehende_rangliste_wertung = null; $bestehende_rangliste_doppel_teilwertung = null; foreach ($bestehende_ranglisten_beruecksichtigt as $bestehende_rangliste_beruecksichtigt) { if ($bestehende_rangliste_beruecksichtigt->rangliste_id == $rangliste_id) { $ist_beruecksichtigt = true; $bestehende_rangliste_system_id = $bestehende_rangliste_beruecksichtigt->system_id; $bestehende_rangliste_wertung = $bestehende_rangliste_beruecksichtigt->wertung; $bestehende_rangliste_doppel_teilwertung = $bestehende_rangliste_beruecksichtigt->doppel_teilwertung; break; } } $system_id = $ranglisten_beruecksichtigt_system_id[$index]; $wertung = $ranglisten_beruecksichtigt_wertung[$index]; $doppel_teilwertung = $ranglisten_beruecksichtigt_doppel_teilwertung[$index]; if (!$ist_beruecksichtigt) { $query = "SELECT COUNT(*)" . "\n FROM #__sportsmanager_rangliste" . "\n WHERE rangliste_id = $rangliste_id"; $n = loadResult($db, $query); if ($n > 0) { $query = "INSERT INTO #__sportsmanager_rangliste_turnierdisziplin (rangliste_id, turnierdisziplin_id, system_id, wertung, doppel_teilwertung) VALUES ('$rangliste_id', '$id', " . ($system_id != 0 ? "'$system_id'" : "NULL") . ", '" . $db->escape($wertung) . "', '" . $db->escape($doppel_teilwertung) . "');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } else if ($system_id != $bestehende_rangliste_system_id || $wertung != $bestehende_rangliste_wertung || $doppel_teilwertung != $bestehende_rangliste_doppel_teilwertung) { $query = "UPDATE #__sportsmanager_rangliste_turnierdisziplin" . "\n SET system_id = " . ($system_id != 0 ? "'$system_id'" : "NULL") . "," . "\n wertung = '" . $db->escape($wertung) . "'," . "\n doppel_teilwertung = '" . $db->escape($doppel_teilwertung) . "'" . "\n WHERE rangliste_id = $rangliste_id AND turnierdisziplin_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } if ($aktualisieren) { if ($elo_aktualisieren) { wannGespieltAktualisieren(); eloAktualisieren($aktualisieren_ab_datum); } ranglisteAktualisieren(0, $id); einstufungAktualisieren(); } redirectSportsManagerURL('&task=admin_turnierdisziplinen&turnierid=' . $turnierId); } #[NoReturn] function adminRemoveTurnierdisziplin(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("turniere_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); if ($id == 0) die("Missing id!"); $turnierId = $jInput->get('turnierid', 0, 'INT'); if ($turnierId == 0) die("Missing id!"); $query = "SELECT * FROM #__sportsmanager_turnierdisziplin WHERE turnierdisziplin_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $row = $rows[0]; $elo_aktualisieren = $row->elo_wertung; $aktualisieren_ab_datum = !empty($row->beginn) ? substr($row->beginn, 0, 10) : null; $query = "DELETE FROM #__sportsmanager_turnierspiel WHERE turnierdisziplin_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE #__sportsmanager_turniermeldung_spieler_name FROM #__sportsmanager_turniermeldung_spieler_name, #__sportsmanager_turniermeldung_spieler, #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung_spieler_name.turniermeldung_spieler_id = #__sportsmanager_turniermeldung_spieler.turniermeldung_spieler_id AND #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id AND turnierdisziplin_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE #__sportsmanager_turniermeldung_spieler FROM #__sportsmanager_turniermeldung_spieler, #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id AND turnierdisziplin_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_turniermeldung WHERE turnierdisziplin_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_rangliste_turnierdisziplin WHERE turnierdisziplin_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_turnier_rundenstufe WHERE turnierdisziplin_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_turnierdisziplin WHERE turnierdisziplin_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } if ($elo_aktualisieren) { wannGespieltAktualisieren(); eloAktualisieren($aktualisieren_ab_datum); } ranglisteAktualisieren(); einstufungAktualisieren(); redirectSportsManagerURL('&task=admin_turnierdisziplinen&turnierid=' . $turnierId); } function adminExportTurniervoranmeldungenForm(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) keinZugriff(true); $turnierDisziplinId = $jInput->get('turnierdisziplinid', 0, 'INT'); if ($turnierDisziplinId == 0) die ("Wrong id!"); $query = "SELECT #__sportsmanager_turnierdisziplin.turnierdisziplin_id, disziplin, typ, turnierbezeichnung, turnierort, beginn, voranmeldungen_rangliste_id, voranmeldungen_reihenfolge, turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $turnierdisziplin = $rows[0]; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierdisziplin->turnier_id)) keinZugriff(true); $query = "SELECT DISTINCT #__sportsmanager_rangliste.rangliste_id, turnierdisziplin_id, ranglisten.system_id, wertung, bezeichnung, saisonbezeichnung" . "\n FROM #__sportsmanager_rangliste" . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" . "\n LEFT JOIN (SELECT rangliste_id, turnierdisziplin_id, system_id, wertung FROM #__sportsmanager_rangliste_turnierdisziplin WHERE turnierdisziplin_id = $turnierDisziplinId) AS ranglisten USING (rangliste_id)" . "\n ORDER BY saisonbezeichnung DESC, reihenfolge, bezeichnung, kategorie"; $ranglisten = loadObjectList($db, $query); HTML_sportsmanager_admin::adminExportTurniervoranmeldungen($turnierdisziplin, $ranglisten); } #[NoReturn] function adminExportTurniervoranmeldungen(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) keinZugriff(); $turnierDisziplinId = $jInput->get('turnierdisziplinid', 0, 'INT'); $ranglisteId = $jInput->get('ranglisteid', 0, 'INT'); $sortierung = $jInput->get('sortierung', 0, 'INT'); $format = $jInput->get('format', 0, 'INT'); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierDisziplinId); } $query = "SELECT #__sportsmanager_turnierdisziplin.turnierdisziplin_id, disziplin, turnierbezeichnung, beginn, typ FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $turnierdisziplin = $rows[0]; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierdisziplin->turnier_id)) keinZugriff(); if ($turnierdisziplin->typ == 0) { $query = "SELECT *" . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_spieler.nachname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS Nachname" . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), #__sportsmanager_turniermeldung_spieler_name.vorname, #__sportsmanager_spieler.vorname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS Vorname" . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), '', #__sportsmanager_spieler.spielernr) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS Spielernr" . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), #__sportsmanager_turniermeldung_spieler_name.vereinsname, (SELECT #__sportsmanager_verein.vereinsname FROM #__sportsmanager_verein, #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten LIMIT 1)) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS Verein"; if ($format != 0) $query .= ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), 'M', #__sportsmanager_spieler.geschlecht) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS Geschlecht"; if ($ranglisteId != 0) $query .= ", COALESCE((SELECT punkte FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_rangliste_punkte ON #__sportsmanager_rangliste_punkte.rangliste_id = $ranglisteId AND #__sportsmanager_rangliste_punkte.spieler_id = #__sportsmanager_turniermeldung_spieler.spieler_id WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1), 0) AS Punkte"; $query .= "\n FROM #__sportsmanager_turniermeldung" . "\n WHERE turnierdisziplin_id = $turnierDisziplinId AND rundenstufe = '20'" . "\n ORDER BY " . ($ranglisteId != 0 ? "Punkte DESC, " : "") . "Nachname, Vorname"; } else { $query = "SELECT (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_spieler.nachname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS Nachname1" . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), #__sportsmanager_turniermeldung_spieler_name.vorname, #__sportsmanager_spieler.vorname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS Vorname1" . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), '', #__sportsmanager_spieler.spielernr) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS Spielernr1" . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), #__sportsmanager_turniermeldung_spieler_name.vereinsname, (SELECT #__sportsmanager_verein.vereinsname FROM #__sportsmanager_verein, #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten LIMIT 1)) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS Verein1"; if ($format != 0) $query .= ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), 'M', #__sportsmanager_spieler.geschlecht) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS Geschlecht1"; if ($ranglisteId != 0) $query .= ", COALESCE((SELECT punkte FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_rangliste_punkte ON #__sportsmanager_rangliste_punkte.rangliste_id = $ranglisteId AND #__sportsmanager_rangliste_punkte.spieler_id = #__sportsmanager_turniermeldung_spieler.spieler_id WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1), 0) AS Punkte1"; $query .= ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_spieler.nachname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS Nachname2" . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), #__sportsmanager_turniermeldung_spieler_name.vorname, #__sportsmanager_spieler.vorname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS Vorname2" . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), '', #__sportsmanager_spieler.spielernr) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS Spielernr2" . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), #__sportsmanager_turniermeldung_spieler_name.vereinsname, (SELECT #__sportsmanager_verein.vereinsname FROM #__sportsmanager_verein, #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten LIMIT 1)) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS Verein2"; if ($format != 0) $query .= ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), 'M', #__sportsmanager_spieler.geschlecht) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS Geschlecht2"; if ($ranglisteId != 0) { $query .= ", COALESCE((SELECT punkte FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_rangliste_punkte ON #__sportsmanager_rangliste_punkte.rangliste_id = $ranglisteId AND #__sportsmanager_rangliste_punkte.spieler_id = #__sportsmanager_turniermeldung_spieler.spieler_id WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1), 0) AS Punkte2"; if ($sortierung == 0) { $query .= ", COALESCE((SELECT punkte FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_rangliste_punkte ON #__sportsmanager_rangliste_punkte.rangliste_id = $ranglisteId AND #__sportsmanager_rangliste_punkte.spieler_id = #__sportsmanager_turniermeldung_spieler.spieler_id WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1), 0)" . "+ COALESCE((SELECT punkte FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_rangliste_punkte ON #__sportsmanager_rangliste_punkte.rangliste_id = $ranglisteId AND #__sportsmanager_rangliste_punkte.spieler_id = #__sportsmanager_turniermeldung_spieler.spieler_id WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1), 0) AS Summe"; } else { $query .= ", GREATEST(COALESCE((SELECT punkte FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_rangliste_punkte ON #__sportsmanager_rangliste_punkte.rangliste_id = $ranglisteId AND #__sportsmanager_rangliste_punkte.spieler_id = #__sportsmanager_turniermeldung_spieler.spieler_id WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1), 0)" . ", COALESCE((SELECT punkte FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_rangliste_punkte ON #__sportsmanager_rangliste_punkte.rangliste_id = $ranglisteId AND #__sportsmanager_rangliste_punkte.spieler_id = #__sportsmanager_turniermeldung_spieler.spieler_id WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1), 0)) AS Maximum"; } } $query .= "\n FROM #__sportsmanager_turniermeldung" . "\n WHERE turnierdisziplin_id = $turnierDisziplinId AND rundenstufe = '20'" . "\n ORDER BY " . ($ranglisteId != 0 ? ($sortierung == 0 ? "Summe DESC, " : "Maximum DESC, ") : "") . "Nachname1, Vorname1"; } $voranmeldungen = loadObjectList($db, $query); $dateiname = 'Voranmeldungen ' . $turnierdisziplin->turnierbezeichnung . ' - ' . $turnierdisziplin->disziplin . '.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"); if ($format == 0) { $trennzeichen = "\t"; $header = ""; foreach ($voranmeldungen[0] as $field => $value) $header .= $field . $trennzeichen; $data = ""; foreach ($voranmeldungen as $row) { $line = ''; foreach ($row as $value) { if ((!isset($value)) or ($value == "")) { $value = $trennzeichen; } else { $value = str_replace('"', '""', $value); $value = str_replace("\t", ' ', $value); $value = str_replace("\r", '', $value); $value = str_replace("\n", ' ', $value); $value = '"' . $value . '"' . $trennzeichen; } $line .= $value; } $data .= trim($line) . "\n"; } $data = str_replace("\r", "", $data); echo "sep=" . $trennzeichen . "\n" . $header . "\n" . $data; } else { $gesetzt = ($format - 1) * 4; if ($turnierdisziplin->typ == 0) { echo "1\r\n"; echo "NAME1#VORNAME1#GESCHLECHT1#VEREIN1#PSEUDONYM#SETZPOSITION\r\n"; } else { echo "2\r\n"; echo "NAME1#VORNAME1#GESCHLECHT1#VEREIN1#NAME2#VORNAME2#GESCHLECHT2#VEREIN2#PSEUDONYM#SETZPOSITION\r\n"; } $platz = 1; $punkte = 0; $tatsaechlicher_platz = 0; foreach ($voranmeldungen as $row) { $row_punkte = $ranglisteId != 0 ? ($turnierdisziplin->typ == 0 ? $row->Punkte : ($sortierung == 0 ? $row->Summe : $row->Maximum)) : 0; if ($row_punkte != $punkte) { $tatsaechlicher_platz = $platz; $punkte = $row_punkte; } if ($turnierdisziplin->typ == 0) { echo utf8_decode(str_replace("#", ' ', $row->Nachname) . "#" . str_replace("#", ' ', $row->Vorname) . "#" . ($row->Geschlecht == "M" ? "M" : "F") . "#" . str_replace("#", ' ', $row->Verein) . "#" . "#" . ($gesetzt != 0 && $tatsaechlicher_platz <= $gesetzt ? $tatsaechlicher_platz : "0") . "\r\n"); } else { echo utf8_decode(str_replace("#", ' ', $row->Nachname1) . "#" . str_replace("#", ' ', $row->Vorname1) . "#" . ($row->Geschlecht1 == "M" ? "M" : "F") . "#" . str_replace("#", ' ', $row->Verein1) . "#" . str_replace("#", ' ', $row->Nachname2) . "#" . str_replace("#", ' ', $row->Vorname2) . "#" . ($row->Geschlecht2 == "M" ? "M" : "F") . "#" . str_replace("#", ' ', $row->Verein2) . "#" . "#" . ($gesetzt != 0 && $tatsaechlicher_platz <= $gesetzt ? $tatsaechlicher_platz : "0") . "\r\n"); } $platz++; } } die(); } function adminTurnierdisziplinMeldungenSpiele(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) keinZugriff(true); $turnierDisziplinId = $jInput->get('turnierdisziplinid', 0, 'INT'); if ($turnierDisziplinId == 0) die ("Wrong id!"); $query = "SELECT #__sportsmanager_turnierdisziplin.turnierdisziplin_id, typ, turnier_id, disziplin, turnierbezeichnung, turnierort, beginn FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) != 1) die("Wrong id!"); $disziplin = $rows[0]; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($disziplin->turnier_id)) keinZugriff(true); $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_turniermeldung WHERE turnierdisziplin_id = $turnierDisziplinId AND platz > 0), 1, 0)"; $platzierung_anzeigen = loadResult($db, $query) > 0; $meldungen = array(); $meldungenSpielerNamen = array(); foreach (array(0, 1, 2, 3, 10, 20) as $rundenstufe) { $query = "SELECT platz, turniermeldung_id" . "\n FROM #__sportsmanager_turniermeldung" . "\n WHERE turnierdisziplin_id = $turnierDisziplinId AND rundenstufe = '$rundenstufe'" . "\n ORDER BY platz, turniermeldung_id"; $meldungen[$rundenstufe] = loadObjectList($db, $query); } $query = "SELECT turniermeldung_id, spieler_id, IF(ISNULL(spieler_id), #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_spieler.nachname) AS nachname, IF(ISNULL(spieler_id), #__sportsmanager_turniermeldung_spieler_name.vorname, #__sportsmanager_spieler.vorname) AS vorname" . "\n FROM #__sportsmanager_turniermeldung" . "\n INNER JOIN #__sportsmanager_turniermeldung_spieler USING (turniermeldung_id)" . "\n LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id)" . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" . "\n WHERE turnierdisziplin_id = $turnierDisziplinId" . "\n ORDER BY turniermeldung_spieler_id"; $meldungenSpieler = loadObjectList($db, $query); foreach ($meldungenSpieler as $s) { $spielername = $s->spieler_id == null ? hervorheben($s->nachname . ", " . $s->vorname) : ($s->nachname . ", " . $s->vorname); if (empty($meldungenSpielerNamen[$s->turniermeldung_id])) $meldungenSpielerNamen[$s->turniermeldung_id] = $spielername; else $meldungenSpielerNamen[$s->turniermeldung_id] = StringsZusammenfassen($meldungenSpielerNamen[$s->turniermeldung_id], $spielername); } $query = "SELECT *" . "\n FROM #__sportsmanager_turnier_rundenstufe" . "\n WHERE turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); $rundenstufen_details = array(); foreach ($rows as $row) { $rundenstufen_details[$row->rundenstufe] = $row; } $spiele = array(); foreach (array(1, 2, 3, 10) as $rundenstufe) { $query = "SELECT *" . "\n FROM #__sportsmanager_turnierspiel" . "\n WHERE turnierdisziplin_id = $turnierDisziplinId AND rundenstufe = '$rundenstufe'" . "\n ORDER BY runde DESC, spiel_nummer"; $spiele[$rundenstufe] = loadObjectList($db, $query); } HTML_sportsmanager_admin::adminTurnierdisziplinMeldungenSpiele($disziplin, $rundenstufen_details, $meldungen, $meldungenSpielerNamen, $spiele, $platzierung_anzeigen); } #[NoReturn] function adminTurnierdisziplinMeldungenSpieleAlleEntfernen(): void { $db = getDatabase(); global $_FILES; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) keinZugriff(); $id = $jInput->get('turnierdisziplinid', 0, 'INT'); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id); } // Sicherstellen, dass Turnierdisziplin zum Turnier gehört $query = "SELECT turnierdisziplin_id, disziplin, turnierbezeichnung, turnierort, beginn, typ, turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $turnierdisziplin = $rows[0]; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierdisziplin->turnier_id)) keinZugriff(); $query = "SELECT #__sportsmanager_turnierdisziplin.turnierdisziplin_id, disziplin, turnierbezeichnung, turnierort, beginn, elo_wertung FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $turnierdisziplin = $rows[0]; $elo_aktualisieren = $turnierdisziplin->elo_wertung; $aktualisieren_ab_datum = !empty($turnierdisziplin->beginn) ? substr($turnierdisziplin->beginn, 0, 10) : null; $query = "DELETE FROM #__sportsmanager_turnierspiel WHERE turnierdisziplin_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE #__sportsmanager_turniermeldung_spieler_name FROM #__sportsmanager_turniermeldung_spieler_name, #__sportsmanager_turniermeldung_spieler, #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung_spieler_name.turniermeldung_spieler_id = #__sportsmanager_turniermeldung_spieler.turniermeldung_spieler_id AND #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id AND turnierdisziplin_id = $id AND rundenstufe <> 20;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE #__sportsmanager_turniermeldung_spieler FROM #__sportsmanager_turniermeldung_spieler, #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id AND turnierdisziplin_id = $id AND rundenstufe <> 20;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_turniermeldung WHERE turnierdisziplin_id = $id AND rundenstufe <> 20;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_turnier_rundenstufe WHERE turnierdisziplin_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } if ($elo_aktualisieren) { wannGespieltAktualisieren(); eloAktualisieren($aktualisieren_ab_datum); } ranglisteAktualisieren(0, $id); einstufungAktualisieren(); redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id); } function adminImportTurnierdisziplinMeldungenSpieleForm(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) keinZugriff(true); $turnierDisziplinId = $jInput->get('turnierdisziplinid', 0, 'INT'); $query = "SELECT #__sportsmanager_turnierdisziplin.turnierdisziplin_id, disziplin, turnierbezeichnung, turnierort, beginn, turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $row = $rows[0]; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($row->turnier_id)) { keinZugriff(true); } $query = "SELECT *" . "\n FROM #__sportsmanager_veranstalter" . "\n ORDER BY veranstalterbezeichnung"; $veranstalter = loadObjectList($db, $query); HTML_sportsmanager_admin::adminImportTurnierdisziplinMeldungenSpieleForm($row, $veranstalter); } #[NoReturn] function adminImportTurnierdisziplinMeldungenSpiele(): void { $db = getDatabase(); global $_FILES; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) keinZugriff(); $id = $jInput->get('turnierdisziplinid', 0, 'INT'); $veranstalter_id = $jInput->get('veranstalterid', 0, 'INT'); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id); } // Sicherstellen, dass Turnierdisziplin zum Turnier gehört $query = "SELECT turnierdisziplin_id, disziplin, turnierbezeichnung, turnierort, beginn, typ, turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $turnierdisziplin = $rows[0]; if (benutzerZugriff("turniere_aendern")) $zugriffsebene = 2; else if (benutzerTurnierModerator($turnierdisziplin->turnier_id)) $zugriffsebene = 1; else keinZugriff(); if ($zugriffsebene == 2 && $veranstalter_id != 0) $wertungsbedingung = "(SELECT COUNT(*) FROM #__sportsmanager_mitglied_von_verein LEFT JOIN #__sportsmanager_verein USING (verein_id) WHERE #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id AND veranstalter_id = $veranstalter_id) > 0 AND "; else $wertungsbedingung = "NOT ISNULL(aktueller_verein_id) AND "; $query = "SELECT #__sportsmanager_turnierdisziplin.turnierdisziplin_id, disziplin, turnierbezeichnung, turnierort, beginn, elo_wertung FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $turnierdisziplin = $rows[0]; $elo_aktualisieren = $turnierdisziplin->elo_wertung; $aktualisieren_ab_datum = !empty($turnierdisziplin->beginn) ? substr($turnierdisziplin->beginn, 0, 10) : null; if (!empty($_FILES["daten"]["tmp_name"])) { if (is_uploaded_file($_FILES["daten"]["tmp_name"])) { $query = "DELETE FROM #__sportsmanager_turnierspiel WHERE turnierdisziplin_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE #__sportsmanager_turniermeldung_spieler_name FROM #__sportsmanager_turniermeldung_spieler_name, #__sportsmanager_turniermeldung_spieler, #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung_spieler_name.turniermeldung_spieler_id = #__sportsmanager_turniermeldung_spieler.turniermeldung_spieler_id AND #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id AND turnierdisziplin_id = $id AND rundenstufe <> 20;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE #__sportsmanager_turniermeldung_spieler FROM #__sportsmanager_turniermeldung_spieler, #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id AND turnierdisziplin_id = $id AND rundenstufe <> 20;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_turniermeldung WHERE turnierdisziplin_id = $id AND rundenstufe <> 20;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_turnier_rundenstufe WHERE turnierdisziplin_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $handle = fopen($_FILES["daten"]["tmp_name"], "r"); if (!$handle) { redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Die übergebene Datei kann nicht geöffnet werden."); } if (feof($handle)) { redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Die übergebene Datei ist leer."); } $titelzeile = chop(utf8_encode(fgets($handle, 4096))); if (str_starts_with($titelzeile, "sep=")) { $titelzeile = chop(utf8_encode(fgets($handle, 4096))); } if (str_contains($titelzeile, "\t")) $trennzeichen = "\t"; else if (str_contains($titelzeile, ";")) $trennzeichen = ";"; else $trennzeichen = ","; $spalte = array(); $titel = explode($trennzeichen, strtolower($titelzeile)); foreach ($titel as $index => $bezeichnung) { if ($bezeichnung == "platz" || $bezeichnung == "platzierung") $spalte["platz"] = $index; else if ($bezeichnung == "itsf") $spalte["itsf"] = $index; else if ($bezeichnung == "name" || $bezeichnung == "nachname" || $bezeichnung == "name1" || $bezeichnung == "nachname1" || $bezeichnung == "nachname 1") $spalte["nachname1"] = $index; else if ($bezeichnung == "vorname" || $bezeichnung == "vorname1" || $bezeichnung == "vorname 1") $spalte["vorname1"] = $index; else if ($bezeichnung == "spielernr" || $bezeichnung == "spielernr1" || $bezeichnung == "spielernr. 1") $spalte["spielernr1"] = $index; else if ($bezeichnung == "verein" || $bezeichnung == "verein1" || $bezeichnung == "vereinsname" || $bezeichnung == "vereinsname1" || $bezeichnung == "vereinsname 1") $spalte["verein1"] = $index; else if ($bezeichnung == "name2" || $bezeichnung == "nachname2" || $bezeichnung == "nachname 2") $spalte["nachname2"] = $index; else if ($bezeichnung == "vorname2" || $bezeichnung == "vorname 2") $spalte["vorname2"] = $index; else if ($bezeichnung == "spielernr2" || $bezeichnung == "spielernr. 2") $spalte["spielernr2"] = $index; else if ($bezeichnung == "verein2" || $bezeichnung == "vereinsname2" || $bezeichnung == "vereinsname 2") $spalte["verein1"] = $index; } // CSV-Import if ((isset($spalte["platz"]) && isset($spalte["vorname1"]) && isset($spalte["nachname1"])) || isset($spalte["itsf"])) { $spielerMeldungen = array(); $ist_doppel = false; if (isset($spalte["vorname2"]) && isset($spalte["nachname2"])) $ist_doppel = true; while (!feof($handle)) { $buffer = chop(utf8_encode(fgets($handle, 4096))); $daten = explode($trennzeichen, $buffer); foreach ($daten as $index => $wert) { $wert = trim($wert); $len = strlen($wert); if ($len < 2 || $wert[0] != '"' || $wert[$len - 1] != '"') $daten[$index] = $wert; else $daten[$index] = str_replace('""', '"', substr($wert, 1, $len - 2)); } $vorname2 = null; $nachname2 = null; $verein2 = null; if (isset($spalte["itsf"])) { if (!isset($daten[$spalte["itsf"]])) continue; $itsf_daten = $daten[$spalte["itsf"]]; if (empty($itsf_daten)) continue; if (!$ist_doppel && str_contains($itsf_daten, " - ")) { if (count($spielerMeldungen) != 0) continue; $ist_doppel = true; } $nachname1 = ""; $vorname1 = ""; $spielernr1 = ""; $verein1 = ""; if ($ist_doppel) { $nachname2 = ""; $vorname2 = ""; $spielernr2 = ""; $verein2 = ""; } $itsf_felder = explode(" ", $itsf_daten); $position = 0; // 0: Platz, 1: Vorname1, 2: Nachname1, 3: Land1, 4: Vorname2, 5: Nachname2, 6: Land2 foreach ($itsf_felder as $feld) { if ($position == 0) { if (!is_numeric($feld)) break; $platz = $feld; $position++; continue; } if ($position == 1) { if (strtoupper($feld) != $feld) { if (!empty($vorname1)) $vorname1 .= " "; $vorname1 .= $feld; continue; } $position = 2; } if ($position == 2) { if ($feld != "-" && !str_starts_with($feld, "(")) { if (!empty($nachname1)) $nachname1 .= " "; $nachname1 .= substr($feld, 0, 1) . strtolower(substr($feld, 1)); continue; } $position = 3; } if ($position == 3) { if ($feld == "-") continue; if (str_starts_with($feld, "(") && substr($feld, 4) == ")") { $verein1 = substr($feld, 1, 3); continue; } if (!$ist_doppel) break; $position = 4; } if ($position == 4) { if (strtoupper($feld) != $feld) { if (!empty($vorname2)) $vorname2 .= " "; $vorname2 .= $feld; continue; } $position = 5; } if ($position == 5) { if ($feld != "-" && !str_starts_with($feld, "(")) { if (ctype_digit($feld)) continue; if (!empty($nachname2)) $nachname2 .= " "; $nachname2 .= substr($feld, 0, 1) . strtolower(substr($feld, 1)); continue; } $position = 6; } if ($position == 6) { if ($feld == "-") continue; if (str_starts_with($feld, "(") && substr($feld, 4) == ")") { $verein2 = substr($feld, 1, 3); continue; } break; } } if (empty($platz) || empty($vorname1) || empty($nachname1)) continue; if ($ist_doppel && (empty($vorname2) || empty($nachname2))) continue; } else { $platz = str_replace(".", "", $daten[$spalte["platz"]]); if (empty($platz)) continue; if (!isset($daten[$spalte["vorname1"]]) || !isset($daten[$spalte["nachname1"]])) continue; $nachname1 = $daten[$spalte["nachname1"]]; $vorname1 = $daten[$spalte["vorname1"]]; $spielernr1 = isset($spalte["spielernr1"]) && isset($daten[$spalte["spielernr1"]]) ? $daten[$spalte["spielernr1"]] : ""; $verein1 = isset($spalte["verein1"]) && isset($daten[$spalte["verein1"]]) ? $daten[$spalte["verein1"]] : ""; if ($vorname1 == "" || $nachname1 == "") continue; if ($ist_doppel) { if (!isset($daten[$spalte["vorname2"]]) || !isset($daten[$spalte["nachname2"]])) continue; $nachname2 = $daten[$spalte["nachname2"]]; $vorname2 = $daten[$spalte["vorname2"]]; $spielernr2 = isset($spalte["spielernr2"]) && isset($daten[$spalte["spielernr2"]]) ? $daten[$spalte["spielernr2"]] : ""; $verein2 = isset($spalte["verein2"]) && isset($daten[$spalte["verein2"]]) ? $daten[$spalte["verein2"]] : ""; if ($vorname2 == "" || $nachname2 == "") continue; } } if ($ist_doppel) { // Spielernummern und -namen ermitteln $spieler2_id = null; if (!empty($spielernr2)) { $query = "SELECT spieler_id" . "\n FROM #__sportsmanager_spieler" . "\n WHERE " . $wertungsbedingung . "STRCMP(spielernr, '" . $db->escape($spielernr2) . "') = 0" . "\n LIMIT 2"; $s = loadObjectList($db, $query); if (count($s) == 1) $spieler2_id = $s[0]->spieler_id; } if ($spieler2_id == null) { $query = "SELECT spieler_id" . "\n FROM #__sportsmanager_spieler" . "\n WHERE " . $wertungsbedingung . "STRCMP(vorname, '" . $db->escape($vorname2) . "') = 0 AND STRCMP(nachname, '" . $db->escape($nachname2) . "') = 0" . "\n LIMIT 2"; $s = loadObjectList($db, $query); if (count($s) == 1) $spieler2_id = $s[0]->spieler_id; } } // Spielernummern und -namen ermitteln $spieler1_id = null; if (!empty($spielernr1)) { $query = "SELECT spieler_id" . "\n FROM #__sportsmanager_spieler" . "\n WHERE " . $wertungsbedingung . "STRCMP(spielernr, '" . $db->escape($spielernr1) . "') = 0" . "\n LIMIT 2"; $s = loadObjectList($db, $query); if (count($s) == 1) $spieler1_id = $s[0]->spieler_id; } if ($spieler1_id == null) { $query = "SELECT spieler_id" . "\n FROM #__sportsmanager_spieler" . "\n WHERE " . $wertungsbedingung . "STRCMP(vorname, '" . $db->escape($vorname1) . "') = 0 AND STRCMP(nachname, '" . $db->escape($nachname1) . "') = 0" . "\n LIMIT 2"; $s = loadObjectList($db, $query); if (count($s) == 1) $spieler1_id = $s[0]->spieler_id; } $spielerMeldung = array(); $spielerMeldung["p"] = $platz; if ($spieler1_id == null) { $spielerMeldung["1n"] = $nachname1; $spielerMeldung["1v"] = $vorname1; $spielerMeldung["1vn"] = $verein1; } else $spielerMeldung["1"] = $spieler1_id; if ($ist_doppel) { if ($spieler2_id == null) { $spielerMeldung["2n"] = $nachname2; $spielerMeldung["2v"] = $vorname2; $spielerMeldung["2vn"] = $verein2; } else $spielerMeldung["2"] = $spieler2_id; } $spielerMeldungen[] = $spielerMeldung; } fclose($handle); foreach ($spielerMeldungen as $spielerMeldung) { $platz = $spielerMeldung["p"]; $spieler1_id = $spielerMeldung["1"] ?? null; if ($ist_doppel) $spieler2_id = $spielerMeldung["2"] ?? null; $query = "INSERT INTO #__sportsmanager_turniermeldung (turnierdisziplin_id, rundenstufe, platz)" . "\n VALUES ('$id', '0', '$platz');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $meldungId = $db->insertid(); $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler (turniermeldung_id, spieler_id)" . "\n VALUES ('$meldungId', " . ($spieler1_id != null ? "'$spieler1_id'" : "NULL") . ");"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $meldungSpielerId = $db->insertid(); if ($spieler1_id == null) { $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler_name (turniermeldung_spieler_id, nachname, vorname, vereinsname)" . "\n VALUES ('$meldungSpielerId', '" . $db->escape($spielerMeldung["1n"]) . "', '" . $db->escape($spielerMeldung["1v"]) . "', '" . $db->escape($spielerMeldung["1vn"]) . "');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } if ($ist_doppel) { $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler (turniermeldung_id, spieler_id)" . "\n VALUES ('$meldungId', " . ($spieler2_id != null ? "'$spieler2_id'" : "NULL") . ");"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $meldungSpielerId = $db->insertid(); if ($spieler2_id == null) { $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler_name (turniermeldung_spieler_id, nachname, vorname, vereinsname)" . "\n VALUES ('$meldungSpielerId', '" . $db->escape($spielerMeldung["2n"]) . "', '" . $db->escape($spielerMeldung["2v"]) . "', '" . $db->escape($spielerMeldung["2vn"]) . "');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } } } else { // XML-Import fclose($handle); // Daten zu Vorrunde laden $disziplinVorrunde = null; if (!empty($_FILES["daten_vorrunde"]["tmp_name"])) { if (is_uploaded_file($_FILES["daten_vorrunde"]["tmp_name"])) { $disziplinVorrunde = new DOMDocument(); $disziplinVorrunde->recover = true; $success = $disziplinVorrunde->load($_FILES["daten_vorrunde"]["tmp_name"]); if (!$success) { redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei ist keine XML-Datei."); } } } // Daten zu Zusatzrunde laden $disziplinZusatzrunde = null; if (!empty($_FILES["daten_zusatzrunde"]["tmp_name"])) { if (is_uploaded_file($_FILES["daten_zusatzrunde"]["tmp_name"])) { $disziplinZusatzrunde = new DOMDocument(); $disziplinZusatzrunde->recover = true; $success = $disziplinZusatzrunde->load($_FILES["daten_zusatzrunde"]["tmp_name"]); if (!$success) { redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei ist keine XML-Datei."); } } } // Daten zu 2. Zusatzrunde laden $disziplinZusatzrunde2 = null; if (!empty($_FILES["daten_zusatzrunde2"]["tmp_name"])) { if (is_uploaded_file($_FILES["daten_zusatzrunde2"]["tmp_name"])) { $disziplinZusatzrunde2 = new DOMDocument(); $disziplinZusatzrunde2->recover = true; $success = $disziplinZusatzrunde2->load($_FILES["daten_zusatzrunde2"]["tmp_name"]); if (!$success) { redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei ist keine XML-Datei."); } } } // Daten zu Hauptrunde laden $disziplin = new DOMDocument(); $disziplin->recover = true; $success = $disziplin->load($_FILES["daten"]["tmp_name"]); if (!$success) { redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei ist keine XML-Datei."); } if ($disziplinVorrunde != null) { $matchingNodes = $disziplinVorrunde->getElementsByTagName("disziplin"); if ($matchingNodes == null) { redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei enthaelt keine Disziplin."); } if ($matchingNodes->length != 1) { redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei darf nur eine Disziplin enthalten."); } } if ($disziplinZusatzrunde != null) { $matchingNodes = $disziplinZusatzrunde->getElementsByTagName("disziplin"); if ($matchingNodes == null) { redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei enthaelt keine Disziplin."); } if ($matchingNodes->length != 1) { redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei darf nur eine Disziplin enthalten."); } } if ($disziplinZusatzrunde2 != null) { $matchingNodes = $disziplinZusatzrunde2->getElementsByTagName("disziplin"); if ($matchingNodes == null) { redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei enthaelt keine Disziplin."); } if ($matchingNodes->length != 1) { redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei darf nur eine Disziplin enthalten."); } } $matchingNodes = $disziplin->getElementsByTagName("disziplin"); if ($matchingNodes == null) { redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Die uebergebene Datei enthaelt keine Disziplin."); } if ($matchingNodes->length != 1) { redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Die uebergebene Datei darf nur eine Disziplin enthalten."); } // Spieler-Ids über Spielerliste ermitteln $meldungenSpieler = array(); $meldungenPlatz = array(); foreach (array(0, 1, 2, 3, 10) as $rundenstufe) $meldungenPlatz[$rundenstufe] = array(); $meldungenIds = array(); $matchingNodes = $disziplin->getElementsByTagName("meldung"); if ($matchingNodes != null) { $totalHauptrunde = $matchingNodes->length; for ($i = 0; $i < $totalHauptrunde; $i++) { $currNode = $matchingNodes->item($i); $meldungName = $currNode->getAttribute("name"); $meldungPlatz = (int)$currNode->getAttribute("platz"); $meldungenSpieler[$meldungName] = array(); $meldungenPlatz[0][$meldungName] = $meldungPlatz; $meldungenPlatz[1][$meldungName] = $meldungPlatz; $spielerNodes = $currNode->getElementsByTagName("spieler"); foreach ($spielerNodes as $spieler) { $spielernr = $spieler->getAttribute("spielerpass"); if (!empty($spielernr)) { // Spielernummern und -namen ermitteln $query = "SELECT spieler_id" . "\n FROM #__sportsmanager_spieler" . "\n WHERE " . $wertungsbedingung . "STRCMP(spielernr, '$spielernr') = 0" . "\n LIMIT 2"; $s = loadObjectList($db, $query); $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; } else $gefunden = null; $spielerNachname = null; $spielerVorname = null; $spielerVerein = null; if (!$gefunden) { $spielerVorname = $spieler->hasAttribute("vorname") ? trim($spieler->getAttribute("vorname")) : ""; $spielerNachname = trim($spieler->getAttribute("nachname")); $spielerVerein = trim($spieler->getAttribute("verein")); $query = "SELECT spieler_id" . "\n FROM #__sportsmanager_spieler" . "\n WHERE " . $wertungsbedingung . "STRCMP(nachname, '" . $db->escape($spielerNachname) . "') = 0 AND STRCMP(vorname, '" . $db->escape($spielerVorname) . "') = 0" . "\n LIMIT 2"; $s = loadObjectList($db, $query); $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; } if ($gefunden != -1 && $gefunden != null) $meldungenSpieler[$meldungName][] = $gefunden; else $meldungenSpieler[$meldungName][] = array($spielerNachname, $spielerVorname, $spielerVerein); } } $neueMeldungenZusatzrunde = 0; if ($disziplinZusatzrunde != null) { $matchingNodesZusatzrunde = $disziplinZusatzrunde->getElementsByTagName("meldung"); if ($matchingNodesZusatzrunde != null) { $totalZusatzrunde = $matchingNodesZusatzrunde->length; for ($i = 0; $i < $totalZusatzrunde; $i++) { $currNode = $matchingNodesZusatzrunde->item($i); $meldungName = $currNode->getAttribute("name"); $meldungPlatz = (int)$currNode->getAttribute("platz"); $meldungenPlatz[2][$meldungName] = $meldungPlatz; if (!isset($meldungenSpieler[$meldungName])) { $neueMeldungenZusatzrunde++; $meldungenSpieler[$meldungName] = array(); $meldungenPlatz[0][$meldungName] = $totalHauptrunde + $meldungPlatz; $spielerNodes = $currNode->getElementsByTagName("spieler"); foreach ($spielerNodes as $spieler) { $spielernr = $spieler->getAttribute("spielerpass"); if (!empty($spielernr)) { // Spielernummern und -namen ermitteln $query = "SELECT spieler_id" . "\n FROM #__sportsmanager_spieler" . "\n WHERE " . $wertungsbedingung . "STRCMP(spielernr, '" . $db->escape($spielernr) . "') = 0" . "\n LIMIT 2"; $s = loadObjectList($db, $query); $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; } else $gefunden = null; $spielerVorname = null; $spielerNachname = null; $spielerVerein = null; if (!$gefunden) { $spielerVorname = $spieler->hasAttribute("vorname") ? trim($spieler->getAttribute("vorname")) : ""; $spielerNachname = trim($spieler->getAttribute("nachname")); $spielerVerein = trim($spieler->getAttribute("verein")); $query = "SELECT spieler_id" . "\n FROM #__sportsmanager_spieler" . "\n WHERE " . $wertungsbedingung . "STRCMP(nachname, '" . $db->escape($spielerNachname) . "') = 0 AND STRCMP(vorname, '" . $db->escape($spielerVorname) . "') = 0" . "\n LIMIT 2"; $s = loadObjectList($db, $query); $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; } if ($gefunden != -1 && $gefunden != null) $meldungenSpieler[$meldungName][] = $gefunden; else $meldungenSpieler[$meldungName][] = array($spielerNachname, $spielerVorname, $spielerVerein); } } } } } $neueMeldungenZusatzrunde2 = 0; if ($disziplinZusatzrunde2 != null) { $matchingNodesZusatzrunde2 = $disziplinZusatzrunde2->getElementsByTagName("meldung"); if ($matchingNodesZusatzrunde2 != null) { $totalZusatzrunde2 = $matchingNodesZusatzrunde2->length; for ($i = 0; $i < $totalZusatzrunde2; $i++) { $currNode = $matchingNodesZusatzrunde2->item($i); $meldungName = $currNode->getAttribute("name"); $meldungPlatz = (int)$currNode->getAttribute("platz"); $meldungenPlatz[3][$meldungName] = $meldungPlatz; if (!isset($meldungenSpieler[$meldungName])) { $neueMeldungenZusatzrunde2++; $meldungenSpieler[$meldungName] = array(); $meldungenPlatz[0][$meldungName] = $totalHauptrunde + $neueMeldungenZusatzrunde + $meldungPlatz; $spielerNodes = $currNode->getElementsByTagName("spieler"); foreach ($spielerNodes as $spieler) { $spielernr = $spieler->getAttribute("spielerpass"); if (!empty($spielernr)) { // Spielernummern und -namen ermitteln $query = "SELECT spieler_id" . "\n FROM #__sportsmanager_spieler" . "\n WHERE " . $wertungsbedingung . "STRCMP(spielernr, '" . $db->escape($spielernr) . "') = 0" . "\n LIMIT 2"; $s = loadObjectList($db, $query); $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; } else $gefunden = null; $spielerVorname = null; $spielerNachname = null; $spielerVerein = null; if (!$gefunden) { $spielerVorname = $spieler->hasAttribute("vorname") ? trim($spieler->getAttribute("vorname")) : ""; $spielerNachname = trim($spieler->getAttribute("nachname")); $spielerVerein = trim($spieler->getAttribute("verein")); $query = "SELECT spieler_id" . "\n FROM #__sportsmanager_spieler" . "\n WHERE " . $wertungsbedingung . "STRCMP(nachname, '" . $db->escape($spielerNachname) . "') = 0 AND STRCMP(vorname, '" . $db->escape($spielerVorname) . "') = 0" . "\n LIMIT 2"; $s = loadObjectList($db, $query); $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; } if ($gefunden != -1 && $gefunden != null) $meldungenSpieler[$meldungName][] = $gefunden; else $meldungenSpieler[$meldungName][] = array($spielerNachname, $spielerVorname, $spielerVerein); } } } } } $disziplinVorrundeErsterPlatz = 0; if ($disziplinVorrunde != null) { $matchingNodesVorrunde = $disziplinVorrunde->getElementsByTagName("meldung"); if ($matchingNodesVorrunde != null) { $totalVorrunde = $matchingNodesVorrunde->length; for ($i = 0; $i < $totalVorrunde; $i++) { $currNode = $matchingNodesVorrunde->item($i); $meldungName = $currNode->getAttribute("name"); if (isset($meldungenSpieler[$meldungName])) continue; $meldungPlatz = $currNode->getAttribute("platz"); if ($meldungPlatz < $disziplinVorrundeErsterPlatz || $disziplinVorrundeErsterPlatz == 0) $disziplinVorrundeErsterPlatz = $meldungPlatz; } for ($i = 0; $i < $totalVorrunde; $i++) { $currNode = $matchingNodesVorrunde->item($i); $meldungName = $currNode->getAttribute("name"); $meldungPlatz = (int)$currNode->getAttribute("platz"); $meldungenPlatz[10][$meldungName] = $meldungPlatz; if ($disziplinVorrundeErsterPlatz == 0) $disziplinVorrundeErsterPlatz = $meldungPlatz; if (!isset($meldungenSpieler[$meldungName])) { $meldungenSpieler[$meldungName] = array(); $meldungenPlatz[0][$meldungName] = $totalHauptrunde + $neueMeldungenZusatzrunde + $neueMeldungenZusatzrunde2 + $meldungPlatz - $disziplinVorrundeErsterPlatz + 1; $spielerNodes = $currNode->getElementsByTagName("spieler"); foreach ($spielerNodes as $spieler) { $spielernr = $spieler->getAttribute("spielerpass"); if (!empty($spielernr)) { // Spielernummern und -namen ermitteln $query = "SELECT spieler_id" . "\n FROM #__sportsmanager_spieler" . "\n WHERE " . $wertungsbedingung . "STRCMP(spielernr, '" . $db->escape($spielernr) . "') = 0" . "\n LIMIT 2"; $s = loadObjectList($db, $query); $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; } else $gefunden = null; $spielerVorname = null; $spielerNachname = null; $spielerVerein = null; if (!$gefunden) { $spielerVorname = $spieler->hasAttribute("vorname") ? trim($spieler->getAttribute("vorname")) : ""; $spielerNachname = trim($spieler->getAttribute("nachname")); $spielerVerein = trim($spieler->getAttribute("verein")); $query = "SELECT spieler_id" . "\n FROM #__sportsmanager_spieler" . "\n WHERE " . $wertungsbedingung . "STRCMP(nachname, '" . $db->escape($spielerNachname) . "') = 0 AND STRCMP(vorname, '" . $db->escape($spielerVorname) . "') = 0" . "\n LIMIT 2"; $s = loadObjectList($db, $query); $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; } if ($gefunden != -1 && $gefunden != null) $meldungenSpieler[$meldungName][] = $gefunden; else $meldungenSpieler[$meldungName][] = array($spielerNachname, $spielerVorname, $spielerVerein); } } } } } // Meldungen speichern foreach ($meldungenSpieler as $meldungName => $spielerIds) { $meldungPlatz = $meldungenPlatz[0][$meldungName]; $query = "INSERT INTO #__sportsmanager_turniermeldung (turnierdisziplin_id, rundenstufe, platz)" . "\n VALUES ('$id', '0', '$meldungPlatz');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $meldungId = $db->insertid(); $meldungenIds[$meldungName] = $meldungId; foreach ($spielerIds as $spielerId) { $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler (turniermeldung_id, spieler_id)" . "\n VALUES ('$meldungId', " . (!is_array($spielerId) ? "'$spielerId'" : "NULL") . ");"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $meldungSpielerId = $db->insertid(); if (is_array($spielerId)) { $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler_name (turniermeldung_spieler_id, nachname, vorname, vereinsname)" . "\n VALUES ('$meldungSpielerId', '" . $db->escape($spielerId[0]) . "', '" . $db->escape($spielerId[1]) . "', '" . $db->escape($spielerId[2]) . "');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } $rundenstufen = array(0); $platzierungen = array(0 => $meldungenPlatz[0][$meldungName]); foreach (array(1, 2, 3, 10) as $rundenstufe) { if (isset($meldungenPlatz[$rundenstufe][$meldungName])) { $rundenstufen[] = $rundenstufe; $platzierungen[$rundenstufe] = $meldungenPlatz[$rundenstufe][$meldungName]; } } meldungsgruppe_verknuepfen($meldungId, $rundenstufen, $platzierungen); } } // Spiele speichern $totalVorrunde = 0; if ($disziplinVorrunde != null) { $matchingNodes = $disziplinVorrunde->getElementsByTagName("runde"); if ($matchingNodes != null) { $totalVorrunde = $matchingNodes->length; $ergebnis_saetze_maximum = 0; for ($i = 0; $i < $totalVorrunde; $i++) { $currNode = $matchingNodes->item($i); $rundenNr = $currNode->getAttribute("no"); $spielNodes = $currNode->getElementsByTagName("spiel"); foreach ($spielNodes as $spiel) { $heim = $spiel->getAttribute("heim"); $gast = $spiel->getAttribute("gast"); $heimGewonneneSaetze = 0; $gastGewonneneSaetze = 0; $ergebnis_detailliert = ""; $ergebnis_saetze = 0; $satzNodes = $spiel->getElementsByTagName("satz"); foreach ($satzNodes as $satz) { $heimPunkte = $satz->getAttribute("heim"); $gastPunkte = $satz->getAttribute("gast"); if ($heimPunkte > $gastPunkte) $heimGewonneneSaetze++; else if ($heimPunkte < $gastPunkte) $gastGewonneneSaetze++; if ($heimPunkte > 1 || $gastPunkte > 1) { if (!empty($ergebnis_detailliert)) $ergebnis_detailliert .= " "; $ergebnis_detailliert .= $heimPunkte . ":" . $gastPunkte; $ergebnis_saetze++; } } if ($ergebnis_saetze > $ergebnis_saetze_maximum) $ergebnis_saetze_maximum = $ergebnis_saetze; $heimId = $meldungenIds[$heim]; $gastId = $meldungenIds[$gast]; $spielNr = $i + 1; if ($heimGewonneneSaetze > $gastGewonneneSaetze) $ergebnis = 1; else if ($heimGewonneneSaetze < $gastGewonneneSaetze) $ergebnis = 2; else $ergebnis = 0; $query = "INSERT INTO #__sportsmanager_turnierspiel (turnierdisziplin_id, spiel_nummer, runde, rundenstufe, heim_meldung_id, gast_meldung_id, ergebnis, ergebnis_detailliert)" . "\n VALUES ('$id', '$spielNr', '$rundenNr', '10', '$heimId', '$gastId', '$ergebnis', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ");"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } if ($ergebnis_saetze_maximum > 0) { $query = "INSERT #__sportsmanager_turnier_rundenstufe" . "\n SET bezeichnung = ''," . "\n typ = null," . "\n runden = null," . "\n tabellenwertung = null," . "\n saetze = " . "'$ergebnis_saetze_maximum'" . "," . "\n tore = null," . "\n spielfelder = null," . "\n turnierdisziplin_id = '$id'," . "\n rundenstufe = '10'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } } // Spiele speichern if ($disziplinZusatzrunde != null) { $matchingNodes = $disziplinZusatzrunde->getElementsByTagName("runde"); if ($matchingNodes != null) { $totalZusatzrunde = $matchingNodes->length; $ergebnis_saetze_maximum = 0; for ($i = 0; $i < $totalZusatzrunde; $i++) { $currNode = $matchingNodes->item($i); $rundenNr = $currNode->getAttribute("no"); $spielNodes = $currNode->getElementsByTagName("spiel"); foreach ($spielNodes as $spiel) { $heim = $spiel->getAttribute("heim"); $gast = $spiel->getAttribute("gast"); $heimGewonneneSaetze = 0; $gastGewonneneSaetze = 0; $ergebnis_detailliert = ""; $ergebnis_saetze = 0; $satzNodes = $spiel->getElementsByTagName("satz"); foreach ($satzNodes as $satz) { $heimPunkte = $satz->getAttribute("heim"); $gastPunkte = $satz->getAttribute("gast"); if ($heimPunkte > $gastPunkte) $heimGewonneneSaetze++; else if ($heimPunkte < $gastPunkte) $gastGewonneneSaetze++; if ($heimPunkte > 1 || $gastPunkte > 1) { if (!empty($ergebnis_detailliert)) $ergebnis_detailliert .= " "; $ergebnis_detailliert .= $heimPunkte . ":" . $gastPunkte; $ergebnis_saetze++; } } if ($ergebnis_saetze > $ergebnis_saetze_maximum) $ergebnis_saetze_maximum = $ergebnis_saetze; $heimId = $meldungenIds[$heim]; $gastId = $meldungenIds[$gast]; $spielNr = $i + 1; if ($heimGewonneneSaetze > $gastGewonneneSaetze) $ergebnis = 1; else if ($heimGewonneneSaetze < $gastGewonneneSaetze) $ergebnis = 2; else $ergebnis = 0; $query = "INSERT INTO #__sportsmanager_turnierspiel (turnierdisziplin_id, spiel_nummer, runde, rundenstufe, heim_meldung_id, gast_meldung_id, ergebnis, ergebnis_detailliert)" . "\n VALUES ('$id', '$spielNr', '$rundenNr', '2', '$heimId', '$gastId', '$ergebnis', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ");"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } if ($ergebnis_saetze_maximum > 0) { $query = "INSERT #__sportsmanager_turnier_rundenstufe" . "\n SET bezeichnung = ''," . "\n typ = null," . "\n runden = null," . "\n tabellenwertung = null," . "\n saetze = " . "'$ergebnis_saetze_maximum'" . "," . "\n tore = null," . "\n spielfelder = null," . "\n turnierdisziplin_id = '$id'," . "\n rundenstufe = '2'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } } // Spiele speichern if ($disziplinZusatzrunde2 != null) { $matchingNodes = $disziplinZusatzrunde2->getElementsByTagName("runde"); if ($matchingNodes != null) { $totalZusatzrunde2 = $matchingNodes->length; $ergebnis_saetze_maximum = 0; for ($i = 0; $i < $totalZusatzrunde2; $i++) { $currNode = $matchingNodes->item($i); $rundenNr = $currNode->getAttribute("no"); $spielNodes = $currNode->getElementsByTagName("spiel"); foreach ($spielNodes as $spiel) { $heim = $spiel->getAttribute("heim"); $gast = $spiel->getAttribute("gast"); $heimGewonneneSaetze = 0; $gastGewonneneSaetze = 0; $ergebnis_detailliert = ""; $ergebnis_saetze = 0; $satzNodes = $spiel->getElementsByTagName("satz"); foreach ($satzNodes as $satz) { $heimPunkte = $satz->getAttribute("heim"); $gastPunkte = $satz->getAttribute("gast"); if ($heimPunkte > $gastPunkte) $heimGewonneneSaetze++; else if ($heimPunkte < $gastPunkte) $gastGewonneneSaetze++; if ($heimPunkte > 1 || $gastPunkte > 1) { if (!empty($ergebnis_detailliert)) $ergebnis_detailliert .= " "; $ergebnis_detailliert .= $heimPunkte . ":" . $gastPunkte; $ergebnis_saetze++; } } if ($ergebnis_saetze > $ergebnis_saetze_maximum) $ergebnis_saetze_maximum = $ergebnis_saetze; $heimId = $meldungenIds[$heim]; $gastId = $meldungenIds[$gast]; $spielNr = $i + 1; if ($heimGewonneneSaetze > $gastGewonneneSaetze) $ergebnis = 1; else if ($heimGewonneneSaetze < $gastGewonneneSaetze) $ergebnis = 2; else $ergebnis = 0; $query = "INSERT INTO #__sportsmanager_turnierspiel (turnierdisziplin_id, spiel_nummer, runde, rundenstufe, heim_meldung_id, gast_meldung_id, ergebnis, ergebnis_detailliert)" . "\n VALUES ('$id', '$spielNr', '$rundenNr', '3', '$heimId', '$gastId', '$ergebnis', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ");"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } if ($ergebnis_saetze_maximum > 0) { $query = "INSERT #__sportsmanager_turnier_rundenstufe" . "\n SET bezeichnung = ''," . "\n typ = null," . "\n runden = null," . "\n tabellenwertung = null," . "\n saetze = " . "'$ergebnis_saetze_maximum'" . "," . "\n tore = null," . "\n spielfelder = null," . "\n turnierdisziplin_id = '$id'," . "\n rundenstufe = '3'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } } $matchingNodes = $disziplin->getElementsByTagName("runde"); if ($matchingNodes != null) { $total = $matchingNodes->length; $ergebnis_saetze_maximum = 0; for ($i = 0; $i < $total; $i++) { $currNode = $matchingNodes->item($i); $rundenNr = $currNode->getAttribute("no"); $spielNodes = $currNode->getElementsByTagName("spiel"); foreach ($spielNodes as $spiel) { $heim = $spiel->getAttribute("heim"); $gast = $spiel->getAttribute("gast"); $heimGewonneneSaetze = 0; $gastGewonneneSaetze = 0; $ergebnis_detailliert = ""; $ergebnis_saetze = 0; $satzNodes = $spiel->getElementsByTagName("satz"); foreach ($satzNodes as $satz) { $heimPunkte = $satz->getAttribute("heim"); $gastPunkte = $satz->getAttribute("gast"); if ($heimPunkte > $gastPunkte) $heimGewonneneSaetze++; else if ($heimPunkte < $gastPunkte) $gastGewonneneSaetze++; if ($heimPunkte > 1 || $gastPunkte > 1) { if (!empty($ergebnis_detailliert)) $ergebnis_detailliert .= " "; $ergebnis_detailliert .= $heimPunkte . ":" . $gastPunkte; $ergebnis_saetze++; } } if ($ergebnis_saetze > $ergebnis_saetze_maximum) $ergebnis_saetze_maximum = $ergebnis_saetze; $heimId = $meldungenIds[$heim]; $gastId = $meldungenIds[$gast]; $spielNr = $totalVorrunde + $i + 1; if ($heimGewonneneSaetze > $gastGewonneneSaetze) $ergebnis = 1; else if ($heimGewonneneSaetze < $gastGewonneneSaetze) $ergebnis = 2; else $ergebnis = 0; $query = "INSERT INTO #__sportsmanager_turnierspiel (turnierdisziplin_id, spiel_nummer, runde, rundenstufe, heim_meldung_id, gast_meldung_id, ergebnis, ergebnis_detailliert)" . "\n VALUES ('$id', '$spielNr', '$rundenNr', '1', '$heimId', '$gastId', '$ergebnis', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ");"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } if ($ergebnis_saetze_maximum > 0) { $query = "INSERT #__sportsmanager_turnier_rundenstufe" . "\n SET bezeichnung = ''," . "\n typ = null," . "\n runden = null," . "\n tabellenwertung = null," . "\n saetze = " . "'$ergebnis_saetze_maximum'" . "," . "\n tore = null," . "\n spielfelder = null," . "\n turnierdisziplin_id = '$id'," . "\n rundenstufe = '1'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } } } } foreach (array(1, 2, 3, 10) as $rundenstufe) { $query = "SELECT runde, COUNT(*) AS spiele" . "\n FROM #__sportsmanager_turnierspiel" . "\n WHERE turnierdisziplin_id = $id AND rundenstufe = $rundenstufe" . "\n GROUP BY runde" . "\n ORDER BY runde DESC"; $runden = loadObjectList($db, $query); if (count($runden) < 2 || ($runden[0]->spiele != 1 && $runden[0]->spiele != 2) || $runden[1]->spiele != 2) continue; if (count($runden) >= 3 && ($runden[2]->spiele > 4)) continue; if (count($runden) >= 4 && ($runden[2]->spiele != 4 || $runden[3]->spiele > 8)) continue; if (count($runden) >= 5 && ($runden[3]->spiele != 8 || $runden[4]->spiele > 16)) continue; $query = "SELECT turnierspiel_id" . "\n FROM #__sportsmanager_turnierspiel" . "\n WHERE turnierdisziplin_id = $id AND rundenstufe = $rundenstufe AND runde = " . $runden[0]->runde . "\n ORDER BY turnierspiel_id"; $rows = loadObjectList($db, $query); $query = "UPDATE #__sportsmanager_turnierspiel" . "\n SET runde = '19999'" . "\n WHERE turnierspiel_id = '" . $rows[0]->turnierspiel_id . "'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } if (count($rows) >= 2) { $query = "UPDATE #__sportsmanager_turnierspiel" . "\n SET runde = '19998'" . "\n WHERE turnierspiel_id = '" . $rows[1]->turnierspiel_id . "'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } for ($i = 1; $i < count($runden) && $i <= 6; $i++) { $query = "UPDATE #__sportsmanager_turnierspiel" . "\n SET runde = '" . (19998 - $i) . "'" . "\n WHERE turnierdisziplin_id = $id AND rundenstufe = $rundenstufe AND runde = " . $runden[$i]->runde; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } if ($elo_aktualisieren) { wannGespieltAktualisieren(); eloAktualisieren($aktualisieren_ab_datum); } ranglisteAktualisieren(0, $id); einstufungAktualisieren(); redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id); } function adminEditTurnierdisziplinSpiel(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $turnierDisziplinId = $jInput->get('turnierdisziplinid', 0, 'INT'); $rundenstufe = $jInput->get('rundenstufe', 0, 'INT'); if ($rundenstufe != 10 && $rundenstufe != 1 && $rundenstufe != 2 && $rundenstufe != 3) die("Wrong id!"); // Sicherstellen, dass Turnierdisziplin zu Turnier gehört $query = "SELECT #__sportsmanager_turnierdisziplin.turnierdisziplin_id, disziplin, typ, turnierbezeichnung, turnierort, beginn, turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) != 1) die("Wrong id!"); $disziplin = $rows[0]; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($disziplin->turnier_id)) keinZugriff(true); if (empty($id)) $row = null; else { $query = "SELECT * FROM #__sportsmanager_turnierspiel WHERE turnierspiel_id = $id AND turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $row = $rows[0]; } $query = "SELECT *" . "\n FROM #__sportsmanager_turnier_rundenstufe" . "\n WHERE turnierdisziplin_id = $turnierDisziplinId AND rundenstufe = $rundenstufe"; $rows = loadObjectList($db, $query); $rundenstufen_details = count($rows) >= 1 ? $rows[0] : null; $query = "SELECT *" . ", (SELECT CONCAT_WS(', ', #__sportsmanager_spieler.nachname, #__sportsmanager_spieler.vorname, #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_turniermeldung_spieler_name.vorname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS name1" . ", (SELECT CONCAT_WS(', ', #__sportsmanager_spieler.nachname, #__sportsmanager_spieler.vorname, #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_turniermeldung_spieler_name.vorname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS name2" . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), 0, 1) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS verknuepft1" . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), 0, 1) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS verknuepft2" . "\n FROM #__sportsmanager_turniermeldung" . "\n WHERE turnierdisziplin_id = $turnierDisziplinId AND (rundenstufe = '$rundenstufe'" . ($rundenstufe != 0 ? " OR rundenstufe = 0" : "") . ")" . "\n ORDER BY rundenstufe, name1, name2"; $meldungen = loadObjectList($db, $query); HTML_sportsmanager_admin::adminEditTurnierdisziplinSpiel($row, $disziplin, $rundenstufen_details, $meldungen, $rundenstufe); } #[NoReturn] function adminSaveTurnierdisziplinSpiel(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) keinZugriff(); $id = $jInput->get('id', 0, 'INT'); $ergebnis = $jInput->get('ergebnis', 0, 'INT'); $ergebnis_punkte_heim = $jInput->get('ergebnis_punkte_heim', array(), 'ARRAY'); $ergebnis_punkte_gast = $jInput->get('ergebnis_punkte_gast', array(), 'ARRAY'); $turnierDisziplinId = $jInput->get('turnierdisziplinid', 0, 'INT'); $spiel_nummer = $jInput->get('spiel_nummer', 0, 'INT'); $rundenstufe = $jInput->get('rundenstufe', 0, 'INT'); if ($rundenstufe != 10 && $rundenstufe != 1 && $rundenstufe != 2 && $rundenstufe != 3) die("Wrong id!"); $rundentyp = $jInput->get('rundentyp', -1, 'INT'); $runde = max(min(abs($jInput->get('runde', 1, 'INT')), $rundentyp == -2 ? 99 : 9999), 1); $platzierung_ende = max(min(abs($jInput->get('platzierung_ende', 0, 'INT')), $runde + 99), 1); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierDisziplinId . '#sid' . $id); } // Sicherstellen, dass Turnierdisziplin zu Turnier gehört $query = "SELECT turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) != 1) die("Wrong id!"); $turnierdisziplin = $rows[0]; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierdisziplin->turnier_id)) keinZugriff(); $ergebnis_detailliert = ""; $saetze_heim = 0; $saetze_gast = 0; for ($i = 0; $i < count($ergebnis_punkte_heim); $i++) { if (($ergebnis_punkte_heim[$i] == 0 || empty($ergebnis_punkte_heim[$i])) && ($ergebnis_punkte_gast[$i] == 0 || empty($ergebnis_punkte_gast[$i]))) continue; if (!empty($ergebnis_detailliert)) $ergebnis_detailliert .= " "; $punkte_heim = empty($ergebnis_punkte_heim[$i]) ? "0" : $ergebnis_punkte_heim[$i]; $punkte_gast = empty($ergebnis_punkte_gast[$i]) ? "0" : $ergebnis_punkte_gast[$i]; if ($punkte_heim > $punkte_gast) $saetze_heim++; else if ($punkte_gast > $punkte_heim) $saetze_gast++; $ergebnis_detailliert .= $punkte_heim . ":" . $punkte_gast; } if ($saetze_heim > 0 || $saetze_gast > 0) $ergebnis = $saetze_heim > $saetze_gast ? 1 : ($saetze_heim < $saetze_gast ? 2 : 0); if ($rundentyp >= 10000) $runde = $rundentyp; else if ($rundentyp == -2) $runde = 20000 + ((99 - abs($platzierung_ende - $runde)) * 100) + 99 - min($runde, $platzierung_ende); $gewinner_meldung_id = $jInput->get('gewinner_meldung_id', 0, 'INT'); $verlierer_meldung_id = $jInput->get('verlierer_meldung_id', 0, 'INT'); $query = "SELECT #__sportsmanager_turnierdisziplin.turnierdisziplin_id, disziplin, turnierbezeichnung, turnierort, beginn, elo_wertung FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $turnierdisziplin = $rows[0]; $elo_aktualisieren = $turnierdisziplin->elo_wertung; $aktualisieren_ab_datum = !empty($turnierdisziplin->beginn) ? substr($turnierdisziplin->beginn, 0, 10) : null; if ($id == 0) { $query = "INSERT INTO #__sportsmanager_turnierspiel (turnierdisziplin_id, spiel_nummer, runde, rundenstufe, heim_meldung_id, gast_meldung_id, ergebnis, ergebnis_detailliert) VALUES ('$turnierDisziplinId', " . ($spiel_nummer != 0 ? "'$spiel_nummer'" : "NULL") . ", '$runde', '$rundenstufe', '$gewinner_meldung_id', '$verlierer_meldung_id', '$ergebnis', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ")"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $id = $db->insertid(); } else { $query = "UPDATE #__sportsmanager_turnierspiel" . "\n SET spiel_nummer = " . ($spiel_nummer != 0 ? "'$spiel_nummer'" : "NULL") . "," . "\n runde = '$runde'," . "\n heim_meldung_id = '$gewinner_meldung_id'," . "\n gast_meldung_id = '$verlierer_meldung_id'," . "\n ergebnis = '$ergebnis'," . "\n ergebnis_detailliert = " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . "\n WHERE turnierspiel_id = $id AND turnierdisziplin_id = $turnierDisziplinId"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } if ($elo_aktualisieren) { wannGespieltAktualisieren(); eloAktualisieren($aktualisieren_ab_datum); einstufungAktualisieren(); } redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierDisziplinId . '#sid' . $id); } #[NoReturn] function adminRemoveTurnierdisziplinSpiel(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $turnierDisziplinId = $jInput->get('turnierdisziplinid', 0, 'INT'); // Sicherstellen, dass Turnierdisziplin zu Turnier gehört $query = "SELECT turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) != 1) die("Wrong id!"); $turnierdisziplin = $rows[0]; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierdisziplin->turnier_id)) keinZugriff(true); $query = "SELECT #__sportsmanager_turnierdisziplin.turnierdisziplin_id, disziplin, turnierbezeichnung, turnierort, beginn, elo_wertung FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $turnierdisziplin = $rows[0]; $elo_aktualisieren = $turnierdisziplin->elo_wertung; $aktualisieren_ab_datum = !empty($turnierdisziplin->beginn) ? substr($turnierdisziplin->beginn, 0, 10) : null; $query = "DELETE FROM #__sportsmanager_turnierspiel WHERE turnierspiel_id = $id AND turnierdisziplin_id = $turnierDisziplinId;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } if ($elo_aktualisieren) { eloAktualisieren($aktualisieren_ab_datum); einstufungAktualisieren(); } redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierDisziplinId); } function adminEditTurnierdisziplinRunde(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) keinZugriff(true); $runde = $jInput->get('runde', 0, 'INT'); $rundenstufe = $jInput->get('rundenstufe', 0, 'INT'); if ($rundenstufe != 10 && $rundenstufe != 1 && $rundenstufe != 2 && $rundenstufe != 3) die("Wrong id!"); $id = $jInput->get('id', 0, 'INT'); $turnierDisziplinId = $jInput->get('turnierdisziplinid', 0, 'INT'); // Sicherstellen, dass Turnierdisziplin zu Turnier gehört $query = "SELECT turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $turnierdisziplin = $rows[0]; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierdisziplin->turnier_id)) keinZugriff(true); $query = "SELECT #__sportsmanager_turnierdisziplin.turnierdisziplin_id, disziplin, turnierbezeichnung, turnierort, beginn FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $turnierdisziplin = $rows[0]; HTML_sportsmanager_admin::adminEditTurnierdisziplinRunde($runde, $rundenstufe, $id, $turnierdisziplin); } #[NoReturn] function adminSaveTurnierdisziplinRunde(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) keinZugriff(); $id = $jInput->get('id', 0, 'INT'); $turnierDisziplinId = $jInput->get('turnierdisziplinid', 0, 'INT'); $runde_alt = $jInput->get('runde_alt', 0, 'INT'); $rundenstufe = $jInput->get('rundenstufe', 0, 'INT'); if ($rundenstufe != 10 && $rundenstufe != 1 && $rundenstufe != 2 && $rundenstufe != 3) die("Wrong id!"); $rundentyp = $jInput->get('rundentyp', -1, 'INT'); $runde = max(min(abs($jInput->get('runde', 1, 'INT')), $rundentyp == -2 ? 99 : 9999), 1); $platzierung_ende = max(min(abs($jInput->get('platzierung_ende', 0, 'INT')), $runde + 99), 1); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierDisziplinId . '#sid' . $id); } // Sicherstellen, dass Turnierdisziplin zu Turnier gehört $query = "SELECT turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $turnierdisziplin = $rows[0]; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierdisziplin->turnier_id)) keinZugriff(); if ($rundentyp >= 10000) $runde = $rundentyp; else if ($rundentyp == -2) $runde = 20000 + ((99 - abs($platzierung_ende - $runde)) * 100) + 99 - min($runde, $platzierung_ende); else if ($runde_alt >= 0 && $rundentyp == 0) $runde = 0; if ($runde_alt < 0) $runde = -$runde; if ($runde != $runde_alt) { $query = "UPDATE #__sportsmanager_turnierspiel" . "\n SET runde = '$runde'" . "\n WHERE turnierdisziplin_id = $turnierDisziplinId AND runde = $runde_alt AND rundenstufe = $rundenstufe"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierDisziplinId . '#sid' . $id); } function adminEditTurnierdisziplinMeldung(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $turnierDisziplinId = $jInput->get('turnierdisziplinid', 0, 'INT'); $weitere = $jInput->get('weitere', 0, 'INT'); $rundenstufe = $jInput->get('rundenstufe', 0, 'INT'); if ($rundenstufe != 0 && $rundenstufe != 20 && $rundenstufe != 10 && $rundenstufe != 1 && $rundenstufe != 2 && $rundenstufe != 3) die("Wrong id!"); $query = "SELECT turnierdisziplin_id, disziplin, turnierbezeichnung, turnierort, beginn, typ, turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $turnierdisziplin = $rows[0]; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierdisziplin->turnier_id)) keinZugriff(true); $rundenstufen = array(); $platzierungen = array(0 => "0", 1 => "0", 2 => "0", 3 => "0", 10 => "0", 20 => "0"); if ($id == null) { $meldung = null; $meldung_spieler = null; $query = "SELECT * FROM #__sportsmanager_turniermeldung WHERE turnierdisziplin_id = $turnierDisziplinId ORDER BY rundenstufe, platz DESC"; $rows = loadObjectList($db, $query); if (count($rows) > 0) { $rundenstufen[] = $rows[0]->rundenstufe; $platzierungen[$rows[0]->rundenstufe] = $rows[0]->platz; } } else { $query = "SELECT * FROM #__sportsmanager_turniermeldung WHERE turniermeldung_id = $id AND turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $meldung = $rows[0]; if ($meldung->meldungsgruppe_id != null) { $query = "SELECT * FROM #__sportsmanager_turniermeldung WHERE turnierdisziplin_id = $meldung->turnierdisziplin_id AND meldungsgruppe_id = $meldung->meldungsgruppe_id"; $rows = loadObjectList($db, $query); foreach ($rows as $row) { $rundenstufen[] = $row->rundenstufe; $platzierungen[$row->rundenstufe] = $row->platz; } } else { $rundenstufen[] = $meldung->rundenstufe; $platzierungen[$meldung->rundenstufe] = $meldung->platz; } $query = "SELECT spieler_id, IF(ISNULL(spieler_id), #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_spieler.nachname) AS nachname, IF(ISNULL(spieler_id), #__sportsmanager_turniermeldung_spieler_name.vorname, #__sportsmanager_spieler.vorname) AS vorname, " . "\n IF(ISNULL(spieler_id), #__sportsmanager_turniermeldung_spieler_name.vereinsname, (SELECT #__sportsmanager_verein.vereinsname FROM #__sportsmanager_verein, #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten LIMIT 1)) AS vereinsname" . "\n FROM #__sportsmanager_turniermeldung_spieler" . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" . "\n LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id)" . "\n WHERE turniermeldung_id = $meldung->turniermeldung_id"; $meldung_spieler = loadObjectList($db, $query); } $query = "SELECT DISTINCT spieler_id, vorname, nachname, spielernr" . "\n FROM #__sportsmanager_spieler" . "\n WHERE NOT ISNULL(aktueller_verein_id)" . "\n ORDER BY nachname, vorname"; $spieler = loadObjectList($db, $query); HTML_sportsmanager_admin::adminEditTurnierdisziplinMeldung($meldung, $meldung_spieler, $turnierdisziplin, $spieler, $rundenstufen, $platzierungen, $weitere); } #[NoReturn] function adminSaveTurnierdisziplinMeldung(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) keinZugriff(); $id = $jInput->get('id', 0, 'INT'); $turnierDisziplinId = $jInput->get('turnierdisziplinid', 0, 'INT'); $spieler_1_id = $jInput->get('spieler_1_id', 0, 'INT'); $spieler_1_nachname = $db->escape($jInput->get('spieler_1_nachname', '', 'RAW')); $spieler_1_vorname = $db->escape($jInput->get('spieler_1_vorname', '', 'RAW')); $spieler_1_verein = $db->escape($jInput->get('spieler_1_verein', '', 'RAW')); $spieler_2_id = $jInput->get('spieler_2_id', 0, 'INT'); $spieler_2_nachname = $db->escape($jInput->get('spieler_2_nachname', '', 'RAW')); $spieler_2_vorname = $db->escape($jInput->get('spieler_2_vorname', '', 'RAW')); $spieler_2_verein = $db->escape($jInput->get('spieler_2_verein', '', 'RAW')); $weitere = $jInput->get('weitere', 0, 'INT'); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierDisziplinId . '#mid' . $id); } $rundenstufen = $jInput->get('rundenstufen', array(), 'ARRAY'); $platzierungen = $jInput->get('platzierungen', array(), 'ARRAY'); $platzierungen = array(0 => $platzierungen[0], 1 => $platzierungen[1], 2 => $platzierungen[2], 3 => $platzierungen[3], 10 => $platzierungen[4], 20 => 0); $query = "SELECT turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $turnierdisziplin = $rows[0]; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierdisziplin->turnier_id)) keinZugriff(true); $query = "SELECT * FROM #__sportsmanager_turnierdisziplin WHERE turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $turnierdisziplin = $rows[0]; $elo_aktualisieren = $turnierdisziplin->elo_wertung; $aktualisieren_ab_datum = !empty($turnierdisziplin->beginn) ? substr($turnierdisziplin->beginn, 0, 10) : null; if ($id == 0) { $rundenstufe = count($rundenstufen) > 0 ? $rundenstufen[0] : 0; $platz = $platzierungen[$rundenstufe]; $query = "INSERT INTO #__sportsmanager_turniermeldung (turnierdisziplin_id, rundenstufe, platz)" . "\n VALUES ('$turnierDisziplinId', '$rundenstufe', " . ($platz != 0 ? "'$platz'" : "NULL") . ");"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $id = $db->insertid(); $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler (turniermeldung_id, spieler_id)" . "\n VALUES ('$id', " . ($spieler_1_id != 0 ? "'$spieler_1_id'" : "NULL") . ");"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $turniermeldung_spieler_id = $db->insertid(); if ($spieler_1_id == 0) { $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler_name (turniermeldung_spieler_id, nachname, vorname, vereinsname)" . "\n VALUES ($turniermeldung_spieler_id, '$spieler_1_nachname', '$spieler_1_vorname', '$spieler_1_verein');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } if ($turnierdisziplin->typ == 1) { $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler (turniermeldung_id, spieler_id)" . "\n VALUES ('$id', " . ($spieler_2_id != 0 ? "'$spieler_2_id'" : "NULL") . ");"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $turniermeldung_spieler_id = $db->insertid(); if ($spieler_2_id == 0) { $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler_name (turniermeldung_spieler_id, nachname, vorname, vereinsname)" . "\n VALUES ($turniermeldung_spieler_id, '$spieler_2_nachname', '$spieler_2_vorname', '$spieler_2_verein');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } } else { $query = "SELECT * FROM #__sportsmanager_turniermeldung" . "\n WHERE turniermeldung_id = $id AND turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $meldung = $rows[0]; $rundenstufe = $meldung->rundenstufe; $platz = $platzierungen[$rundenstufe]; $query = "UPDATE #__sportsmanager_turniermeldung" . "\n SET platz = " . ($platz != 0 ? "'$platz'" : "NULL") . "\n WHERE turniermeldung_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "SELECT * FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE turniermeldung_id = $id"; $rows = loadObjectList($db, $query); if ($rows[0]->spieler_id == 0 && $spieler_1_id == 0) { $query = "UPDATE #__sportsmanager_turniermeldung_spieler_name" . "\n SET nachname = '$spieler_1_nachname'," . "\n vorname = '$spieler_1_vorname'," . "\n vereinsname = '$spieler_1_verein'" . "\n WHERE turniermeldung_spieler_name_id = " . $rows[0]->turniermeldung_spieler_name_id; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } else if ($rows[0]->spieler_id == 0 && $spieler_1_id != 0) { $query = "DELETE FROM #__sportsmanager_turniermeldung_spieler_name" . "\n WHERE turniermeldung_spieler_name_id = " . $rows[0]->turniermeldung_spieler_name_id; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } else if ($rows[0]->spieler_id != 0 && $spieler_1_id == 0) { $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler_name (turniermeldung_spieler_id, nachname, vorname, vereinsname)" . "\n VALUES (" . $rows[0]->turniermeldung_spieler_id . ", '$spieler_1_nachname', '$spieler_1_vorname', '$spieler_1_verein');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } $query = "UPDATE #__sportsmanager_turniermeldung_spieler" . "\n SET spieler_id = " . ($spieler_1_id != 0 ? "'$spieler_1_id'" : "NULL") . "\n WHERE turniermeldung_spieler_id = " . $rows[0]->turniermeldung_spieler_id; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } if ($turnierdisziplin->typ == 1) { if ($rows[1]->spieler_id == 0 && $spieler_2_id == 0) { $query = "UPDATE #__sportsmanager_turniermeldung_spieler_name" . "\n SET nachname = '$spieler_2_nachname'," . "\n vorname = '$spieler_2_vorname'," . "\n vereinsname = '$spieler_2_verein'" . "\n WHERE turniermeldung_spieler_name_id = " . $rows[1]->turniermeldung_spieler_name_id; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } else if ($rows[1]->spieler_id == 0 && $spieler_2_id != 0) { $query = "DELETE FROM #__sportsmanager_turniermeldung_spieler_name" . "\n WHERE turniermeldung_spieler_name_id = " . $rows[1]->turniermeldung_spieler_name_id; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } else if ($rows[1]->spieler_id != 0 && $spieler_2_id == 0) { $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler_name (turniermeldung_spieler_id, nachname, vorname, vereinsname)" . "\n VALUES (" . $rows[1]->turniermeldung_spieler_id . ", '$spieler_2_nachname', '$spieler_2_vorname', '$spieler_2_verein');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } $query = "UPDATE #__sportsmanager_turniermeldung_spieler" . "\n SET spieler_id = " . ($spieler_2_id != 0 ? "'$spieler_2_id'" : "NULL") . "\n WHERE turniermeldung_spieler_id = " . $rows[1]->turniermeldung_spieler_id; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } meldungsgruppe_verknuepfen($id, $rundenstufen, $platzierungen); if ($elo_aktualisieren) { wannGespieltAktualisieren(); eloAktualisieren($aktualisieren_ab_datum); } ranglisteAktualisieren(0, $turnierDisziplinId); einstufungAktualisieren(); if (!$weitere) redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierDisziplinId . '#mid' . $id); else redirectSportsManagerURL('&task=admin_turnierdisziplin_meldung_edit&turnierdisziplinid=' . $turnierDisziplinId . '&id=' . $id . '&weitere=1'); } #[NoReturn] function adminRemoveTurnierdisziplinMeldung(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $turnierDisziplinId = $jInput->get('turnierdisziplinid', 0, 'INT'); $query = "SELECT turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $turnierdisziplin = $rows[0]; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierdisziplin->turnier_id)) keinZugriff(true); // Sicherstellen, dass Meldung zur Turnierdisziplin und damit zum Turnier gehört $query = "SELECT * FROM #__sportsmanager_turniermeldung" . "\n WHERE turniermeldung_id = $id AND turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); meldungssgruppe_entfernen($id); ranglisteAktualisieren(0, $turnierDisziplinId); einstufungAktualisieren(); redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierDisziplinId); } function adminVerknuepfenTurnierdisziplinMeldungForm(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) keinZugriff(true); $turnierDisziplinId = $jInput->get('turnierdisziplinid', 0, 'INT'); $query = "SELECT #__sportsmanager_turnierdisziplin.turnierdisziplin_id, typ, turnier_id, disziplin, turnierbezeichnung, turnierort, beginn FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) != 1) die("Wrong id!"); $disziplin = $rows[0]; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($disziplin->turnier_id)) keinZugriff(true); $meldungen = array(); foreach (array(0, 1, 2, 3, 10, 20) as $rundenstufe) { $query = "SELECT *" . ", (SELECT CONCAT_WS(', ', #__sportsmanager_spieler.nachname, #__sportsmanager_spieler.vorname, #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_turniermeldung_spieler_name.vorname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS name1" . ", (SELECT CONCAT_WS(', ', #__sportsmanager_spieler.nachname, #__sportsmanager_spieler.vorname, #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_turniermeldung_spieler_name.vorname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS name2" . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), 0, 1) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS verknuepft1" . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), 0, 1) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS verknuepft2" . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), #__sportsmanager_turniermeldung_spieler_name.vereinsname, (SELECT #__sportsmanager_verein.vereinsname FROM #__sportsmanager_verein, #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten LIMIT 1)) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS vereinsname1" . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), #__sportsmanager_turniermeldung_spieler_name.vereinsname, (SELECT #__sportsmanager_verein.vereinsname FROM #__sportsmanager_verein, #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten LIMIT 1)) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS vereinsname2" . "\n FROM #__sportsmanager_turniermeldung" . "\n WHERE turnierdisziplin_id = $turnierDisziplinId AND rundenstufe = '$rundenstufe'" . "\n ORDER BY platz, name1, name2"; $meldungen[$rundenstufe] = loadObjectList($db, $query); } HTML_sportsmanager_admin::adminVerknuepfenTurnierdisziplinMeldung($disziplin, $meldungen); } #[NoReturn] function adminVerknuepfenTurnierdisziplinMeldung(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) keinZugriff(); $ids = array(); foreach (array(0, 1, 2, 3, 10, 20) as $rundenstufe) $ids[$rundenstufe] = $jInput->get('ids' . $rundenstufe, array(), 'ARRAY'); $turnierDisziplinId = $jInput->get('turnierdisziplinid', 0, 'INT'); if ($turnierDisziplinId == 0) die("Missing id!"); $rundenstufen = $jInput->get('rundenstufen', array(), 'ARRAY'); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierDisziplinId); } // Sicherstellen, dass Turnierdisziplin zu Turnier gehört $query = "SELECT turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) != 1) die("Wrong id!"); if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($rows[0]->turnier_id)) keinZugriff(); foreach (array(0, 1, 2, 3, 10, 20) as $rundenstufe) { foreach ($ids[$rundenstufe] as $meldung_id) { // Sicherstellen, dass Meldung zu Turnierdisziplin und damit zu Turnier gehört $query = "SELECT * FROM #__sportsmanager_turniermeldung WHERE turniermeldung_id = $meldung_id AND turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); meldungsgruppe_erweitern($meldung_id, $rundenstufen); } } ranglisteAktualisieren(0, $turnierDisziplinId); einstufungAktualisieren(); redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierDisziplinId); } function meldungsgruppe_erweitern($quelle_turniermeldung_id, $rundenstufen): void { $db = getDatabase(); $query = "SELECT * FROM #__sportsmanager_turniermeldung" . "\n WHERE turniermeldung_id = $quelle_turniermeldung_id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $quelle_meldung = $rows[0]; $meldungsgruppe_id = $quelle_meldung->meldungsgruppe_id != null ? $quelle_meldung->meldungsgruppe_id : $quelle_turniermeldung_id; if ($quelle_meldung->meldungsgruppe_id != null) { $query = "SELECT DISTINCT rundenstufe FROM #__sportsmanager_turniermeldung" . "\n WHERE meldungsgruppe_id = $meldungsgruppe_id"; $rows = loadObjectList($db, $query); foreach ($rows as $row) { if (!in_array($row->rundenstufe, $rundenstufen)) $rundenstufen[] = $row->rundenstufe; } } else { if (!in_array($quelle_meldung->rundenstufe, $rundenstufen)) $rundenstufen[] = $quelle_meldung->rundenstufe; } meldungsgruppe_verknuepfen($quelle_turniermeldung_id, $rundenstufen, null); } function meldungsgruppe_verknuepfen($quelle_turniermeldung_id, $rundenstufen, $platzierungen): void { $db = getDatabase(); $query = "SELECT * FROM #__sportsmanager_turniermeldung" . "\n WHERE turniermeldung_id = $quelle_turniermeldung_id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $quelle_meldung = $rows[0]; $meldungsgruppe_id = $quelle_meldung->meldungsgruppe_id != null ? $quelle_meldung->meldungsgruppe_id : $quelle_turniermeldung_id; $query = "SELECT * FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE turniermeldung_id = $quelle_turniermeldung_id ORDER BY turniermeldung_spieler_id"; $quelle_meldung_spieler = loadObjectList($db, $query); if ($quelle_meldung->meldungsgruppe_id == null && count($rundenstufen) > 1) { $query = "UPDATE #__sportsmanager_turniermeldung" . "\n SET meldungsgruppe_id = '$meldungsgruppe_id'" . "\n WHERE turniermeldung_id = $quelle_turniermeldung_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } foreach (array(0, 1, 2, 3, 10, 20) as $rundenstufe) { $query = "SELECT *" . "\n FROM #__sportsmanager_turniermeldung" . "\n WHERE meldungsgruppe_id = '$meldungsgruppe_id' AND turnierdisziplin_id = '$quelle_meldung->turnierdisziplin_id' AND rundenstufe = '$rundenstufe'"; $rows = loadObjectList($db, $query); if (empty($rundenstufen) || !in_array($rundenstufe, $rundenstufen)) { if (count($rows) == 0) continue; $ziel_meldung = $rows[0]; $query = "DELETE FROM #__sportsmanager_turnierspiel WHERE heim_meldung_id = $ziel_meldung->turniermeldung_id OR gast_meldung_id = $ziel_meldung->turniermeldung_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE #__sportsmanager_turniermeldung_spieler_name FROM #__sportsmanager_turniermeldung_spieler_name, #__sportsmanager_turniermeldung_spieler WHERE #__sportsmanager_turniermeldung_spieler_name.turniermeldung_spieler_id = #__sportsmanager_turniermeldung_spieler.turniermeldung_spieler_id AND turniermeldung_id = $ziel_meldung->turniermeldung_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_turniermeldung_spieler WHERE turniermeldung_id = $ziel_meldung->turniermeldung_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_turniermeldung WHERE turniermeldung_id = $ziel_meldung->turniermeldung_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } else if ($quelle_meldung->rundenstufe == $rundenstufe) { continue; } else if (count($rows) == 0) { $platz = (empty($platzierungen) || !isset($platzierungen[$rundenstufe])) ? 0 : $platzierungen[$rundenstufe]; $query = "INSERT INTO #__sportsmanager_turniermeldung (turnierdisziplin_id, meldungsgruppe_id, rundenstufe, platz)" . "\n VALUES ('$quelle_meldung->turnierdisziplin_id', " . (count($rundenstufen) > 1 ? "'$meldungsgruppe_id'" : "NULL") . ", '$rundenstufe', " . ($platz != 0 ? "'$platz'" : "NULL") . ");"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $ziel_turniermeldung_id = $db->insertid(); for ($i = 0; $i < count($quelle_meldung_spieler); $i++) { $row = $quelle_meldung_spieler[$i]; $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler (turniermeldung_id, spieler_id)" . "\n VALUES ('$ziel_turniermeldung_id', " . ($row->spieler_id != null ? "'$row->spieler_id'" : "NULL") . ");"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $turniermeldung_spieler_id = $db->insertid(); if ($row->spieler_id == null) { $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler_name (turniermeldung_spieler_id, nachname, vorname, vereinsname)" . "\n VALUES ($turniermeldung_spieler_id, '" . $db->escape($row->nachname) . "', '" . $db->escape($row->vorname) . "', '" . $db->escape($row->vereinsname) . "');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } } else { $ziel_meldung = $rows[0]; if (!empty($platzierungen)) { $platz = !isset($platzierungen[$rundenstufe]) ? 0 : $platzierungen[$rundenstufe]; $query = "UPDATE #__sportsmanager_turniermeldung" . "\n SET platz = " . ($platz != 0 ? "'$platz'" : "NULL") . "\n WHERE turniermeldung_id = $ziel_meldung->turniermeldung_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } $query = "SELECT * FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE turniermeldung_id = $ziel_meldung->turniermeldung_id ORDER BY turniermeldung_spieler_id"; $ziel_meldung_spieler = loadObjectList($db, $query); if (count($ziel_meldung_spieler) != count($quelle_meldung_spieler)) die("Wrong id!"); for ($i = 0; $i < count($quelle_meldung_spieler); $i++) { $quelle_row = $quelle_meldung_spieler[$i]; $ziel_row = $ziel_meldung_spieler[$i]; $query = "UPDATE #__sportsmanager_turniermeldung_spieler" . "\n SET spieler_id = " . ($quelle_row->spieler_id != null ? "'$quelle_row->spieler_id'" : "NULL") . "\n WHERE turniermeldung_spieler_id = $ziel_row->turniermeldung_spieler_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } if ($quelle_row->spieler_id == null && $ziel_row->spieler_id == null) { $query = "UPDATE #__sportsmanager_turniermeldung_spieler_name" . "\n SET nachname = '" . $db->escape($quelle_row->nachname) . "'," . "\n vorname = '" . $db->escape($quelle_row->vorname) . "'," . "\n vereinsname = '" . $db->escape($quelle_row->vereinsname) . "'" . "\n WHERE turniermeldung_spieler_name_id = $ziel_row->turniermeldung_spieler_name_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } else if ($quelle_row->spieler_id == null && $ziel_row->spieler_id != null) { $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler_name (turniermeldung_spieler_id, nachname, vorname, vereinsname)" . "\n VALUES ($ziel_row->turniermeldung_spieler_id, '" . $db->escape($quelle_row->nachname) . "', '" . $db->escape($quelle_row->vorname) . "', '" . $db->escape($quelle_row->vereinsname) . "');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } else if ($quelle_row->spieler_id != null && $ziel_row->spieler_id == null) { $query = "DELETE FROM #__sportsmanager_turniermeldung_spieler_name" . "\n WHERE turniermeldung_spieler_name_id = $ziel_row->turniermeldung_spieler_name_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } } } $query = "SELECT COUNT(*)" . "\n FROM #__sportsmanager_turniermeldung" . "\n WHERE meldungsgruppe_id = $meldungsgruppe_id"; $n = loadResult($db, $query); if ($n == 1) { $query = "UPDATE #__sportsmanager_turniermeldung" . "\n SET meldungsgruppe_id = NULL" . "\n WHERE meldungsgruppe_id = $meldungsgruppe_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } function meldungssgruppe_entfernen($turniermeldung_id): void { $db = getDatabase(); $query = "SELECT * FROM #__sportsmanager_turniermeldung" . "\n WHERE turniermeldung_id = $turniermeldung_id"; $rows = loadObjectList($db, $query); if (count($rows) === 0) die("Wrong id!"); $meldung = $rows[0]; $meldungsgruppe_id = $meldung->meldungsgruppe_id != null ? $meldung->meldungsgruppe_id : $turniermeldung_id; $query = "DELETE FROM #__sportsmanager_turnierspiel WHERE heim_meldung_id = $turniermeldung_id OR gast_meldung_id = $turniermeldung_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE #__sportsmanager_turniermeldung_spieler_name FROM #__sportsmanager_turniermeldung_spieler_name, #__sportsmanager_turniermeldung_spieler WHERE #__sportsmanager_turniermeldung_spieler_name.turniermeldung_spieler_id = #__sportsmanager_turniermeldung_spieler.turniermeldung_spieler_id AND turniermeldung_id = $turniermeldung_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_turniermeldung_spieler WHERE turniermeldung_id = $turniermeldung_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_turniermeldung WHERE turniermeldung_id = $turniermeldung_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "SELECT COUNT(*)" . "\n FROM #__sportsmanager_turniermeldung" . "\n WHERE meldungsgruppe_id = $meldungsgruppe_id"; $n = loadResult($db, $query); if ($n == 1) { $query = "UPDATE #__sportsmanager_turniermeldung" . "\n SET meldungsgruppe_id = NULL" . "\n WHERE meldungsgruppe_id = $meldungsgruppe_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } function adminEditTurnierdisziplinRundenstufe(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) keinZugriff(true); $turnierDisziplinId = $jInput->get('turnierdisziplinid', 0, 'INT'); $rundenstufe = $jInput->get('rundenstufe', 0, 'INT'); if ($rundenstufe != 10 && $rundenstufe != 1 && $rundenstufe != 2 && $rundenstufe != 3) die("Wrong id!"); $query = "SELECT turnierdisziplin_id, disziplin, turnierbezeichnung, turnierort, beginn, typ, turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $turnierdisziplin = $rows[0]; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierdisziplin->turnier_id)) keinZugriff(true); $query = "SELECT *" . "\n FROM #__sportsmanager_turnier_rundenstufe" . "\n WHERE turnierdisziplin_id = $turnierDisziplinId AND rundenstufe = $rundenstufe"; $rows = loadObjectList($db, $query); $rundenstufen_details = count($rows) >= 1 ? $rows[0] : null; HTML_sportsmanager_admin::adminEditTurnierdisziplinRundenstufe($turnierdisziplin, $rundenstufe, $rundenstufen_details); } #[NoReturn] function adminSaveTurnierdisziplinRundenstufe(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) keinZugriff(); $turnierDisziplinId = $jInput->get('turnierdisziplinid', 0, 'INT'); $rundenstufe = $jInput->get('rundenstufe', 0, 'INT'); if ($rundenstufe != 10 && $rundenstufe != 1 && $rundenstufe != 2 && $rundenstufe != 3) die("Wrong id!"); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierDisziplinId); } $bezeichnung = $db->escape($jInput->get('bezeichnung', '', 'RAW')); $typ = $jInput->get('typ', 0, 'INT'); $runden = $jInput->get('runden', 0, 'INT'); $tabellenwertung = $jInput->get('tabellenwertung', 0, 'INT'); $saetze = $jInput->get('saetze', 0, 'INT'); $tore = $jInput->get('tore', 0, 'INT'); // Sicherstellen, dass Turnierdisziplin zum Turnier gehört $query = "SELECT turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $turnierdisziplin = $rows[0]; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierdisziplin->turnier_id)) keinZugriff(); $query = "SELECT * FROM #__sportsmanager_turnierdisziplin WHERE turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $query = "SELECT *" . "\n FROM #__sportsmanager_turnier_rundenstufe" . "\n WHERE turnierdisziplin_id = $turnierDisziplinId AND rundenstufe = $rundenstufe"; $rows = loadObjectList($db, $query); $rundenstufen_details = count($rows) >= 1 ? $rows[0] : null; if ($rundenstufen_details == null) { $query = "INSERT #__sportsmanager_turnier_rundenstufe" . "\n SET bezeichnung = '$bezeichnung'," . "\n typ = " . ($typ != 0 ? "'$typ'" : "null") . "," . "\n runden = " . ($runden != 0 ? "'$runden'" : "null") . "," . "\n tabellenwertung = " . ($tabellenwertung != 0 ? "'$tabellenwertung'" : "null") . "," . "\n saetze = " . ($saetze != 0 ? "'$saetze'" : "null") . "," . "\n tore = " . ($tore != 0 ? "'$tore'" : "null") . "," . "\n spielfelder = null," . "\n turnierdisziplin_id = '$turnierDisziplinId'," . "\n rundenstufe = '$rundenstufe'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } else { $query = "UPDATE #__sportsmanager_turnier_rundenstufe" . "\n SET bezeichnung = '$bezeichnung'," . "\n typ = " . ($typ != 0 ? "'$typ'" : "null") . "," . "\n runden = " . ($runden != 0 ? "'$runden'" : "null") . "," . "\n tabellenwertung = " . ($tabellenwertung != 0 ? "'$tabellenwertung'" : "null") . "," . "\n saetze = " . ($saetze != 0 ? "'$saetze'" : "null") . "," . "\n tore = " . ($tore != 0 ? "'$tore'" : "null") . "," . "\n spielfelder = null" . "\n WHERE turnierdisziplin_id = $turnierDisziplinId AND rundenstufe = $rundenstufe"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } if (($rundenstufen_details->typ == null && $typ != 0) || ($rundenstufen_details->typ != null && $typ != 0 && $rundenstufen_details->typ != $typ)) { $query = "DELETE FROM #__sportsmanager_turnierspiel WHERE turnierdisziplin_id = $turnierDisziplinId AND rundenstufe = $rundenstufe;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } else if ($rundenstufen_details->saetze != null && $rundenstufen_details->saetze > $saetze) { $query = "UPDATE #__sportsmanager_turnierspiel" . "\n SET ergebnis_detailliert = null" . "\n WHERE turnierdisziplin_id = $turnierDisziplinId AND rundenstufe = $rundenstufe"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierDisziplinId); } #[NoReturn] function adminRemoveTurnierdisziplinRundenstufe(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) keinZugriff(); $turnierDisziplinId = $jInput->get('turnierdisziplinid', 0, 'INT'); $rundenstufe = $jInput->get('rundenstufe', 0, 'INT'); if ($rundenstufe != 10 && $rundenstufe != 1 && $rundenstufe != 2 && $rundenstufe != 3) die("Wrong id!"); // Sicherstellen, dass Turnierdisziplin zum Turnier gehört $query = "SELECT turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierDisziplinId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $turnierdisziplin = $rows[0]; if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierdisziplin->turnier_id)) keinZugriff(); $query = "DELETE FROM #__sportsmanager_turnier_rundenstufe" . "\n WHERE turnierdisziplin_id = $turnierDisziplinId AND rundenstufe = $rundenstufe"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierDisziplinId); } function adminSpielerExportBilderForm(): void { $db = getDatabase(); $ansprechpartner_bilder_bearbeiten = einstellungswert("ansprechpartner_spielerdaten") == "1" || einstellungswert("ansprechpartner_spielerdaten") == "3"; if (benutzerZugriff("spieler_aendern")) $beschraenkter_zugriff = 0; else if (benutzerVeranstalterModerator() && $ansprechpartner_bilder_bearbeiten) $beschraenkter_zugriff = 1; else keinZugriff(true); $query = "SELECT DISTINCT veranstalter_id, #__sportsmanager_veranstalter.*" . "\n FROM #__sportsmanager_veranstalter"; if ($beschraenkter_zugriff == 1) $query .= "\n WHERE" . veranstalterFilter("veranstalter_id IN"); $query .= "\n ORDER BY veranstalterbezeichnung"; $veranstalter = loadObjectList($db, $query); HTML_sportsmanager_admin::adminSpielerExportBilder($veranstalter, $beschraenkter_zugriff); } #[NoReturn] function adminSpielerExportBilder(): void { $db = getDatabase(); global $sportsmanager_joomla_path; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_spieler'); } $ansprechpartner_bilder_bearbeiten = einstellungswert("ansprechpartner_spielerdaten") == "1" || einstellungswert("ansprechpartner_spielerdaten") == "3"; if (benutzerZugriff("spieler_aendern")) $beschraenkter_zugriff = 0; else if (benutzerVeranstalterModerator() && $ansprechpartner_bilder_bearbeiten) $beschraenkter_zugriff = 1; else keinZugriff(); setMinMemoryLimit('256M'); if (!ini_get('safe_mode')) set_time_limit(300); $filter = $jInput->get('filter', 0, 'INT'); $veranstalter_id = $jInput->get('veranstalter_id', 0, 'INT'); if ($veranstalter_id != 0) { $query = "SELECT veranstalterbezeichnung FROM #__sportsmanager_veranstalter WHERE veranstalter_id = $veranstalter_id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $veranstalter = $rows[0]; } else $veranstalter = null; if ($beschraenkter_zugriff == 1) { $query = "SELECT DISTINCT veranstalter_id" . "\n FROM #__sportsmanager_veranstalter" . "\n WHERE veranstalter_id = $veranstalter_id" . " AND" . veranstalterFilter("veranstalter_id IN") . "\n ORDER BY veranstalterbezeichnung"; $veranstalter = loadObjectList($db, $query); if (count($veranstalter) == 0) keinZugriff(); } $ziel_bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'export'; if (!is_dir($ziel_bilder_pfad) && !Folder::create($ziel_bilder_pfad, 0777)) { redirectSportsManagerURL('&task=admin_spieler', "Der Ordner 'images/sportsmanager/export' konnte nicht neu erstellt werden."); } $alte_bilder = Folder::files($ziel_bilder_pfad); foreach ($alte_bilder as $fn) { if (!File::delete($ziel_bilder_pfad . DIRECTORY_SEPARATOR . $fn)) { redirectSportsManagerURL('&task=admin_spieler', "Im Ordner 'images/sportsmanager/export' konnten nicht alle Dateien gelöscht werden.rstellt werden."); } } $query = "SELECT spieler_id, vorname, nachname, spielernr" . "\n FROM #__sportsmanager_spieler"; if ($veranstalter_id != 0) $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND veranstalter_id = $veranstalter_id GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; $query .= "\n WHERE NOT ISNULL(aktueller_verein_id)"; if ($filter != 0) $query .= " AND NOT bild_ausblenden"; $spieler = loadObjectList($db, $query); foreach ($spieler as $s) { $pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'spieler' . DIRECTORY_SEPARATOR . $s->spieler_id . '.'; if (file_exists($pfad . 'png') && is_file($pfad . 'png')) $ext = "png"; else if (file_exists($pfad . 'jpg') && is_file($pfad . 'jpg')) $ext = "jpg"; else continue; if (!File::copy($pfad . $ext, $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'export' . DIRECTORY_SEPARATOR . 'Spieler ' . utf8_decode(bereinigterDateiname($s->nachname . ", " . $s->vorname . (!empty($s->spielernr) ? (" (" . $s->spielernr . ")") : "") . '.' . $ext)))) { redirectSportsManagerURL('&task=admin_spieler', "Ein Bild (" . $s->spieler_id . ") konnte nicht an die Zielposition kopiert werden."); } } $zip_dateien = array(); $neue_bilder = Folder::files($ziel_bilder_pfad); foreach ($neue_bilder as $fn) { $data = file_get_contents($ziel_bilder_pfad . DIRECTORY_SEPARATOR . $fn); $zip_dateien[] = array('name' => iconv("ISO-8859-1", "CP437", $fn), 'data' => $data); } $file = tempnam("tmp", "zip"); $zip = new Zip(); $zip->create($file, $zip_dateien); foreach ($neue_bilder as $fn) File::delete($ziel_bilder_pfad . DIRECTORY_SEPARATOR . $fn); $dateiname = "Spielerbilder" . ($veranstalter != null ? (" " . utf8_decode($veranstalter->veranstalterbezeichnung)) : "") . ".zip"; $dateiname = bereinigterDateiname($dateiname); ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind header("Content-Type: application/zip"); header("Content-Length: " . filesize($file)); header("Content-Disposition: attachment; filename=\"" . $dateiname . "\""); readfile($file); unlink($file); die(); } function adminVereineExportBilderForm(): void { $db = getDatabase(); if (!benutzerZugriff("vereine_aendern")) keinZugriff(true); $query = "SELECT *" . "\n FROM #__sportsmanager_veranstalter" . "\n ORDER BY veranstalterbezeichnung"; $veranstalter = loadObjectList($db, $query); HTML_sportsmanager_admin::adminVereineExportBilder($veranstalter); } #[NoReturn] function adminVereineExportBilder(): void { $db = getDatabase(); global $sportsmanager_joomla_path; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("vereine_aendern")) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_vereine'); } setMinMemoryLimit('256M'); if (!ini_get('safe_mode')) set_time_limit(300); $veranstalter_id = $jInput->get('veranstalter_id', 0, 'INT'); if ($veranstalter_id != 0) { $query = "SELECT veranstalterbezeichnung FROM #__sportsmanager_veranstalter WHERE veranstalter_id = $veranstalter_id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $veranstalter = $rows[0]; } else $veranstalter = null; $ziel_bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'export'; if (!is_dir($ziel_bilder_pfad) && !Folder::create($ziel_bilder_pfad, 0777)) { redirectSportsManagerURL('&task=admin_vereine', "Der Ordner 'images/sportsmanager/export' konnte nicht neu erstellt werden."); } $alte_bilder = Folder::files($ziel_bilder_pfad); foreach ($alte_bilder as $fn) { if (!File::delete($ziel_bilder_pfad . DIRECTORY_SEPARATOR . $fn)) { redirectSportsManagerURL('&task=admin_vereine', "Im Ordner 'images/sportsmanager/export' konnten nicht alle Dateien gelöscht werden."); } } $query = "SELECT verein_id, vereinsname" . "\n FROM #__sportsmanager_verein" . "\n WHERE NOT ausgetreten"; if ($veranstalter_id != 0) $query .= " AND veranstalter_id = $veranstalter_id"; $vereine = loadObjectList($db, $query); foreach ($vereine as $v) { $pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'vereine' . DIRECTORY_SEPARATOR . $v->verein_id . '.'; if (file_exists($pfad . 'png') && is_file($pfad . 'png')) $ext = "png"; else if (file_exists($pfad . 'jpg') && is_file($pfad . 'jpg')) $ext = "jpg"; else continue; if (!File::copy($pfad . $ext, $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'export' . DIRECTORY_SEPARATOR . 'Verein ' . utf8_decode(bereinigterDateiname($v->vereinsname)) . '.' . $ext)) { redirectSportsManagerURL('&task=admin_vereine', "Ein Bild (" . $v->verein_id . ") konnte nicht an die Zielposition kopiert werden."); } } $neue_bilder = Folder::files($ziel_bilder_pfad); $zip_dateien = array(); foreach ($neue_bilder as $fn) { $data = file_get_contents($ziel_bilder_pfad . DIRECTORY_SEPARATOR . $fn); $zip_dateien[] = array('name' => iconv("ISO-8859-1", "CP437", $fn), 'data' => $data); } $file = tempnam("tmp", "zip"); $zip = new Zip(); $zip->create($file, $zip_dateien); foreach ($neue_bilder as $fn) File::delete($ziel_bilder_pfad . DIRECTORY_SEPARATOR . $fn); $dateiname = "Vereinsbilder" . ($veranstalter != null ? (" " . utf8_decode($veranstalter->veranstalterbezeichnung)) : "") . ".zip"; $dateiname = bereinigterDateiname($dateiname); ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind header("Content-Type: application/zip"); header("Content-Length: " . filesize($file)); header("Content-Disposition: attachment; filename=\"" . $dateiname . "\""); readfile($file); unlink($file); die(); } function adminSpielerImportBilderForm(): void { $db = getDatabase(); $ansprechpartner_bilder_bearbeiten = einstellungswert("ansprechpartner_spielerdaten") == "1" || einstellungswert("ansprechpartner_spielerdaten") == "3"; if (benutzerZugriff("spieler_aendern")) $beschraenkter_zugriff = 0; else if (benutzerVeranstalterModerator() && $ansprechpartner_bilder_bearbeiten) $beschraenkter_zugriff = 1; else keinZugriff(true); $query = "SELECT DISTINCT veranstalter_id, #__sportsmanager_veranstalter.*" . "\n FROM #__sportsmanager_veranstalter"; if ($beschraenkter_zugriff == 1) $query .= "\n WHERE" . veranstalterFilter("veranstalter_id IN"); $query .= "\n ORDER BY veranstalterbezeichnung"; $veranstalter = loadObjectList($db, $query); HTML_sportsmanager_admin::adminSpielerImportBilder($veranstalter, $beschraenkter_zugriff); } function adminSpielerImportBilder(): void { $db = getDatabase(); global $_FILES; global $sportsmanager_joomla_path; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $ansprechpartner_bilder_bearbeiten = einstellungswert("ansprechpartner_spielerdaten") == "1" || einstellungswert("ansprechpartner_spielerdaten") == "3"; if (benutzerZugriff("spieler_aendern")) $beschraenkter_zugriff = 0; else if (benutzerVeranstalterModerator() && $ansprechpartner_bilder_bearbeiten) $beschraenkter_zugriff = 1; else keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_spieler'); } $veranstalter_id = $jInput->get('veranstalter_id', 0, 'INT'); $bilder_beibehalten = $jInput->get('bilder_beibehalten', 0, 'INT'); if ($beschraenkter_zugriff == 1) { $query = "SELECT DISTINCT veranstalter_id" . "\n FROM #__sportsmanager_veranstalter" . "\n WHERE veranstalter_id = $veranstalter_id" . " AND" . veranstalterFilter("veranstalter_id IN") . "\n ORDER BY veranstalterbezeichnung"; $veranstalter = loadObjectList($db, $query); if (count($veranstalter) == 0) keinZugriff(); } $quelle_bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'import'; if (!is_dir($quelle_bilder_pfad) && !Folder::create($quelle_bilder_pfad, 0777)) { redirectSportsManagerURL('&task=admin_spieler', "Der Ordner 'images/sportsmanager/import' existiert nicht."); } $alte_bilder = Folder::files($quelle_bilder_pfad); foreach ($alte_bilder as $fn) { if (!File::delete($quelle_bilder_pfad . DIRECTORY_SEPARATOR . $fn)) { redirectSportsManagerURL('&task=admin_spieler', "Im Ordner 'images/sportsmanager/import' konnten nicht alle Dateien gelöscht werden."); } } $alte_bilder = Folder::folders($quelle_bilder_pfad); foreach ($alte_bilder as $fn) { if (!Folder::delete($quelle_bilder_pfad . DIRECTORY_SEPARATOR . $fn)) { redirectSportsManagerURL('&task=admin_spieler', "Im Ordner 'images/sportsmanager/import' konnten nicht alle Dateien gelöscht werden."); } } $zip = new Zip(); if (empty($_FILES["bilder_archiv"]["tmp_name"]) || !is_uploaded_file($_FILES["bilder_archiv"]["tmp_name"]) || !$zip->extract($_FILES["bilder_archiv"]["tmp_name"], $quelle_bilder_pfad)) { redirectSportsManagerURL('&task=admin_spieler', "Die ZIP-Datei kann nicht geöffnet werden (Z)."); } if (!ini_get('safe_mode')) set_time_limit(300); $anzahlSpieler = 0; $ziel_bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'spieler'; $neue_bilder_alle = Folder::files($quelle_bilder_pfad, '(?i)(\.jpg|\.png)$'); foreach ($neue_bilder_alle as $index => $bild) { $ppos = strrpos($bild, "."); if ($ppos === false) continue; $len = strlen($bild); $ext = strtolower(substr($bild, $ppos + 1)); if ($ext != "jpg" && $ext != "png") continue; $lpos = strrpos($bild, "("); $rpos = $lpos !== false ? strpos($bild, ")", $lpos + 1) : false; $spielernr = ""; $name = ""; if ($lpos !== false && $rpos !== false && $rpos - $lpos > 2) { $spielernr = substr($bild, $lpos + 1, $rpos - $lpos - 1); } else if (str_contains($bild, ",")) { $name = substr($bild, 0, $len - 4); } else $spielernr = substr($bild, 0, $len - 4); if (!empty($spielernr)) { // Spielernummern und -namen ermitteln $query = "SELECT spieler_id" . "\n FROM #__sportsmanager_spieler"; if ($veranstalter_id != 0) $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND veranstalter_id = $veranstalter_id GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; $query .= "\n WHERE NOT ISNULL(aktueller_verein_id) AND STRCMP(spielernr, '" . $db->escape($spielernr) . "') = 0" . "\n LIMIT 2"; $rows = loadObjectList($db, $query); if (count($rows) != 1) continue; $spieler_id = $rows[0]->spieler_id; } else if (!empty($name)) { // Spielernummern und -namen ermitteln $query = "SELECT spieler_id" . "\n FROM #__sportsmanager_spieler"; if ($veranstalter_id != 0) $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND veranstalter_id = $veranstalter_id GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; $query .= "\n WHERE NOT ISNULL(aktueller_verein_id) AND STRCMP(CONCAT_WS(', ', nachname, vorname), '" . $db->escape($name) . "') = 0" . "\n LIMIT 2"; $rows = loadObjectList($db, $query); if (count($rows) != 1) continue; $spieler_id = $rows[0]->spieler_id; } else continue; if ($bilder_beibehalten) { $ziel_pfad = $ziel_bilder_pfad . DIRECTORY_SEPARATOR . $spieler_id . '.'; if (file_exists($ziel_pfad . 'jpg') && is_file($ziel_pfad . 'jpg') || file_exists($ziel_pfad . 'png') && is_file($ziel_pfad . 'png')) continue; } $quelle_pfad = $quelle_bilder_pfad . DIRECTORY_SEPARATOR . $bild; $ziel_pfad = $ziel_bilder_pfad . DIRECTORY_SEPARATOR . $spieler_id . '.' . $ext; if (!files_identical($quelle_pfad, $ziel_pfad)) { bildLoeschen("spieler", $spieler_id); if (!bildKopierenAngepasst($quelle_pfad, $ziel_pfad, 180, 240, 1)) continue; } $anzahlSpieler++; unset($neue_bilder_alle[$index]); } $alte_bilder = Folder::files($quelle_bilder_pfad); foreach ($alte_bilder as $fn) File::delete($quelle_bilder_pfad . DIRECTORY_SEPARATOR . $fn); $alte_bilder = Folder::folders($quelle_bilder_pfad); foreach ($alte_bilder as $fn) Folder::delete($quelle_bilder_pfad . DIRECTORY_SEPARATOR . $fn); sort($neue_bilder_alle); HTML_sportsmanager_admin::adminSpielerImportBilderBericht($anzahlSpieler, $neue_bilder_alle); } function adminVereineImportBilderForm(): void { $db = getDatabase(); if (!benutzerZugriff("vereine_aendern")) keinZugriff(true); $query = "SELECT *" . "\n FROM #__sportsmanager_veranstalter" . "\n ORDER BY veranstalterbezeichnung"; $veranstalter = loadObjectList($db, $query); HTML_sportsmanager_admin::adminVereineImportBilder($veranstalter); } function adminVereineImportBilder(): void { $db = getDatabase(); global $_FILES; global $sportsmanager_joomla_path; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("vereine_aendern")) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_vereine'); } $veranstalter_id = $jInput->get('veranstalter_id', 0, 'INT'); $bilder_beibehalten = $jInput->get('bilder_beibehalten', 0, 'INT'); $quelle_bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'import'; if (!is_dir($quelle_bilder_pfad) && !Folder::create($quelle_bilder_pfad, 0777)) { redirectSportsManagerURL('&task=admin_uebersicht', "Der Ordner 'images/sportsmanager/import' existiert nicht."); } $alte_bilder = Folder::files($quelle_bilder_pfad); foreach ($alte_bilder as $fn) { if (!File::delete($quelle_bilder_pfad . DIRECTORY_SEPARATOR . $fn)) { redirectSportsManagerURL('&task=admin_vereine', "Im Ordner 'images/sportsmanager/import' konnten nicht alle Dateien gelöscht werden."); } } $alte_bilder = Folder::folders($quelle_bilder_pfad); foreach ($alte_bilder as $fn) { if (!Folder::delete($quelle_bilder_pfad . DIRECTORY_SEPARATOR . $fn)) { redirectSportsManagerURL('&task=admin_uebersicht', "Im Ordner 'images/sportsmanager/import' konnten nicht alle Dateien gelöscht werden."); } } $zip = new Zip(); if (empty($_FILES["bilder_archiv"]["tmp_name"]) || !is_uploaded_file($_FILES["bilder_archiv"]["tmp_name"]) || !$zip->extract($_FILES["bilder_archiv"]["tmp_name"], $quelle_bilder_pfad)) { redirectSportsManagerURL('&task=admin_uebersicht', "Die ZIP-Datei kann nicht geöffnet werden (Z)."); } if (!ini_get('safe_mode')) set_time_limit(300); $anzahlVereine = 0; $ziel_bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'vereine'; $neue_bilder_alle = Folder::files($quelle_bilder_pfad, '(?i)(\.jpg|\.png)$'); foreach ($neue_bilder_alle as $index => $bild) { $ppos = strrpos($bild, "."); if ($ppos === false) continue; $len = strlen($bild); $ext = strtolower(substr($bild, $ppos + 1)); if ($ext != "jpg" && $ext != "png") continue; if (!str_starts_with($bild, "Verein ")) continue; $name = substr($bild, 7, $len - 11); if (empty($name)) continue; $query = "SELECT verein_id" . "\n FROM #__sportsmanager_verein" . "\n WHERE NOT ausgetreten AND STRCMP(vereinsname, '" . $db->escape($name) . "') = 0"; if ($veranstalter_id != 0) $query .= " AND veranstalter_id = $veranstalter_id"; $query .= "\n LIMIT 2"; $rows = loadObjectList($db, $query); if (count($rows) != 1) continue; $verein_id = $rows[0]->verein_id; if ($bilder_beibehalten) { $ziel_pfad = $ziel_bilder_pfad . DIRECTORY_SEPARATOR . $verein_id . '.'; if (file_exists($ziel_pfad . 'jpg') && is_file($ziel_pfad . 'jpg') || file_exists($ziel_pfad . 'png') && is_file($ziel_pfad . 'png')) continue; } $quelle_pfad = $quelle_bilder_pfad . DIRECTORY_SEPARATOR . $bild; $ziel_pfad = $ziel_bilder_pfad . DIRECTORY_SEPARATOR . $verein_id . '.' . $ext; if (!files_identical($quelle_pfad, $ziel_pfad)) { bildLoeschen("vereine", $verein_id); if (!bildKopierenAngepasst($quelle_pfad, $ziel_pfad, 240, 240, 0)) continue; } $anzahlVereine++; unset($neue_bilder_alle[$index]); } $alte_bilder = Folder::files($quelle_bilder_pfad); foreach ($alte_bilder as $fn) File::delete($quelle_bilder_pfad . DIRECTORY_SEPARATOR . $fn); $alte_bilder = Folder::folders($quelle_bilder_pfad); foreach ($alte_bilder as $fn) Folder::delete($quelle_bilder_pfad . DIRECTORY_SEPARATOR . $fn); sort($neue_bilder_alle); HTML_sportsmanager_admin::adminVereineImportBilderBericht($anzahlVereine, $neue_bilder_alle); } function adminTermine($admin_uebersicht): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (benutzerZugriff("termine_aendern")) $zugriffsebene = 2; else if (einstellungswert("termine_beantragen") == "1" && !Factory::getContainer()->get(SiteApplication::class)->getIdentity()->guest && !isExternalDatabase()) $zugriffsebene = 1; else $zugriffsebene = 0; $filter_jahr = $jInput->get('filter_jahr', 0, 'INT'); if (empty($filter_jahr)) $filter_jahr = date('Y'); $filter_veranstaltung = $jInput->get('filter_veranstaltung', '', 'RAW'); $filter_zusatz = $jInput->get('filter_zusatz', '', 'RAW'); $filter_land = $jInput->get('filter_land', '', 'RAW'); $filter_ort = $jInput->get('filter_ort', '', 'RAW'); $query = "SELECT DISTINCT YEAR(erster_tag) AS jahr" . "\n FROM #__sportsmanager_termin" . "\n ORDER BY erster_tag DESC"; $jahre = loadObjectList($db, $query); $jahr_gefunden = false; foreach ($jahre as $jahr) { if ($jahr->jahr == $filter_jahr) { $jahr_gefunden = true; break; } } if (!$jahr_gefunden && !empty($jahre)) $filter_jahr = $jahre[0]->jahr; $query = "SELECT *, DATEDIFF(erster_tag, NOW()) AS datumsdifferenz, GROUP_CONCAT(zusatz ORDER BY zusatz SEPARATOR ', ') AS zusaetze" . "\n FROM #__sportsmanager_termin" . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" . "\n LEFT JOIN #__sportsmanager_termin_zusatz USING (termin_id)" . "\n WHERE YEAR(erster_tag) = '$filter_jahr' AND status = 0 AND (typ = 0 OR typ = 1)"; if (!empty($filter_veranstaltung)) $query .= " AND bezeichnung = '" . $db->escape($filter_veranstaltung) . "'"; if (!empty($filter_zusatz)) $query .= " AND EXISTS(SELECT * FROM #__sportsmanager_termin_zusatz WHERE termin_id = #__sportsmanager_termin.termin_id AND zusatz = '" . $db->escape($filter_zusatz) . "')"; if (!empty($filter_land)) $query .= " AND land = '" . $db->escape($filter_land) . "'"; if (!empty($filter_ort)) $query .= " AND ort = '" . $db->escape($filter_ort) . "'"; $query .= "\n GROUP BY termin_id" . "\n ORDER BY erster_tag, bezeichnung"; $termine = loadObjectList($db, $query); $query = "SELECT termin_id, termin_symbol_id" . "\n FROM #__sportsmanager_termin" . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" . "\n INNER JOIN #__sportsmanager_termin_symbolanzeige USING (termin_id)" . "\n WHERE YEAR(erster_tag) = '$filter_jahr' AND status = 0 AND (typ = 0 OR typ = 1)" . "\n ORDER BY termin_symbolanzeige_id"; $terminsymbole = loadObjectList($db, $query); $termineSymbole = array(); foreach ($terminsymbole as $termin) { $termin_id = $termin->termin_id; $termin_symbol_id = $termin->termin_symbol_id; if (!isset($termineSymbole[$termin_id])) $termineSymbole[$termin_id] = array(); $termineSymbole[$termin_id][] = $termin_symbol_id; } $query = "SELECT COUNT(*)" . "\n FROM #__sportsmanager_termin_aktion" . "\n WHERE status = 2"; $anzahl_beantragte_termine = loadResult($db, $query); $query = "SELECT bezeichnung" . "\n FROM #__sportsmanager_termin" . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" . "\n INNER JOIN #__sportsmanager_termin_bezeichnung USING (bezeichnung)" . "\n WHERE YEAR(erster_tag) = '$filter_jahr' AND status = 0 AND (typ = 0 OR typ = 1)" . "\n GROUP BY bezeichnung" . "\n ORDER BY bezeichnung"; $veranstaltungen = loadObjectList($db, $query); $query = "SELECT bezeichnungszusatz, titel" . "\n FROM #__sportsmanager_termin" . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" . "\n INNER JOIN #__sportsmanager_termin_zusatz USING (termin_id)" . "\n INNER JOIN #__sportsmanager_termin_bezeichnungszusatz ON bezeichnungszusatz = zusatz" . "\n WHERE YEAR(erster_tag) = '$filter_jahr' AND status = 0 AND (typ = 0 OR typ = 1)" . "\n GROUP BY bezeichnungszusatz" . "\n ORDER BY IF(titel = '', bezeichnungszusatz, titel)"; $zusaetze = loadObjectList($db, $query); $query = "SELECT land" . "\n FROM #__sportsmanager_termin" . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" . "\n WHERE YEAR(erster_tag) = '$filter_jahr' AND status = 0 AND (typ = 0 OR typ = 1) AND land <> ''" . "\n GROUP BY land" . "\n ORDER BY land"; $laender = loadObjectList($db, $query); $query = "SELECT ort" . "\n FROM #__sportsmanager_termin" . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" . "\n WHERE YEAR(erster_tag) = '$filter_jahr' AND status = 0 AND (typ = 0 OR typ = 1) AND ort <> ''" . "\n GROUP BY ort" . "\n ORDER BY ort"; $orte = loadObjectList($db, $query); if (isJson()) { $jsonexport = array_map( function ($termin) { return [ "bestaetigt" => $termin->bestaetigt, "erster_tag" => $termin->erster_tag, "letzter_tag" => $termin->letzter_tag, "bezeichnung" => $termin->bezeichnung, "ort" => $termin->ort, "land" => $termin->land, "zusaetze" => $termin->zusaetze, "url" => $termin->url, "ergebnisse_url" => $termin->ergebnisse_url, "email" => $termin->email, ]; }, $termine); JSON_sportsmanager::JSON($jsonexport); } else { HTML_sportsmanager_admin::adminTermine($termine, $termineSymbole, $jahre, $filter_jahr, $filter_veranstaltung, $filter_zusatz, $filter_land, $filter_ort, $veranstaltungen, $zusaetze, $laender, $orte, $anzahl_beantragte_termine, $zugriffsebene, $admin_uebersicht, isExternalDatabase()); if (!$admin_uebersicht) { administrationFooter(); } } } function adminEditTermin($admin_uebersicht): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (benutzerZugriff("termine_aendern")) $zugriffsebene = 2; else if (einstellungswert("termine_beantragen") == "1" && !Factory::getContainer()->get(SiteApplication::class)->getIdentity()->guest && !isExternalDatabase()) $zugriffsebene = 1; else $zugriffsebene = 0; if ($zugriffsebene == 0) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $uebersicht = $jInput->get('uebersicht', 0, 'INT'); $ueberarbeiten = $jInput->get('ueberarbeiten', 0, 'INT'); $nur_beantragte = $jInput->get('nur_beantragte', 0, 'INT'); if (empty($id)) { $termin = null; $terminsymbolanzeige = null; } else { $query = "SELECT *" . "\n FROM #__sportsmanager_termin" . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" . "\n WHERE termin_id = $id" . ($zugriffsebene != 2 ? " AND status = 0" : " AND (status = 0 OR status = 2)") . " AND (typ = 0 OR typ = 1)"; $rows = loadObjectList($db, $query); if (count($rows) < 1) { redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . ($uebersicht ? 'termine' : 'termine_verlauf') . ($nur_beantragte ? '&nur_beantragte=1' : ''), "Der bisherige Termin existiert nicht mehr."); } $termin = $rows[0]; $query = "SELECT termin_symbol_id" . "\n FROM #__sportsmanager_termin" . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" . "\n INNER JOIN #__sportsmanager_termin_symbolanzeige USING (termin_id)" . "\n WHERE termin_id = $termin->termin_id" . "\n ORDER BY termin_symbolanzeige_id"; $terminsymbolanzeige = loadObjectList($db, $query); } $query = "SELECT termin_symbol_id, symboltitel, status" . "\n FROM #__sportsmanager_termin_symbol" . "\n ORDER BY status DESC, symboltitel"; $terminsymbole = loadObjectList($db, $query); $benachrichtigung_email = ""; if (empty($id)) { $aktion_user = Factory::getContainer()->get(SiteApplication::class)->getIdentity(); if (!empty($aktion_user->id) && !empty($aktion_user->email)) { $benachrichtigung_email = $aktion_user->email; } } else { $benachrichtigung_email = $termin->benachrichtigung_email; } $query = "SELECT * FROM #__sportsmanager_termin_bezeichnung ORDER BY bezeichnung"; $bezeichnungen = loadObjectList($db, $query); if (!empty($id)) { $bezeichnung_vorauswahl = null; } else { // Häufigste Bezeichnung suchen $query = "SELECT bezeichnung" . "\n FROM #__sportsmanager_termin" . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" . "\n WHERE DATEDIFF(erster_tag, CURDATE()) >= -365 AND status = 0 AND (typ = 0 OR typ = 1)" . "\n GROUP BY bezeichnung" . "\n ORDER BY COUNT(*) DESC" . "\n LIMIT 1"; $rows = loadObjectList($db, $query); $bezeichnung_vorauswahl = count($rows) > 0 ? $rows[0]->bezeichnung : null; } if (empty($id)) { $zusaetze = null; } else { $query = "SELECT *" . "\n FROM #__sportsmanager_termin_zusatz" . "\n LEFT JOIN #__sportsmanager_termin_bezeichnungszusatz ON zusatz = bezeichnungszusatz" . "\n WHERE termin_id = $id AND ISNULL(termin_bezeichnungszusatz_id)" . "\n ORDER BY zusatz"; $zusaetze = loadObjectList($db, $query); } if (empty($id)) { $query = "SELECT *, NULL AS termin_zusatz_id" . "\n FROM #__sportsmanager_termin_bezeichnungszusatz" . "\n ORDER BY bezeichnungszusatz"; } else { $query = "SELECT *" . "\n FROM #__sportsmanager_termin_bezeichnungszusatz" . "\n LEFT JOIN #__sportsmanager_termin_zusatz ON termin_id = $id AND bezeichnungszusatz = zusatz" . "\n ORDER BY bezeichnungszusatz"; } $bezeichnungszusaetze = loadObjectList($db, $query); $query = "SELECT * FROM #__sportsmanager_termin_bundesland ORDER BY bundesland"; $bundeslaender = loadObjectList($db, $query); $query = "SELECT * FROM #__sportsmanager_termin_land ORDER BY land"; $laender = loadObjectList($db, $query); $query = "SELECT ort FROM #__sportsmanager_termin WHERE ort <> '' GROUP BY ort ORDER BY ort"; $orte = loadObjectList($db, $query); HTML_sportsmanager_admin::adminEditTermin($termin, $terminsymbolanzeige, $terminsymbole, $benachrichtigung_email, $bezeichnungen, $zusaetze, $bezeichnungszusaetze, $bundeslaender, $laender, $orte, $zugriffsebene, $admin_uebersicht, $bezeichnung_vorauswahl, $uebersicht, $ueberarbeiten, $nur_beantragte); } function adminSaveTermin($admin_uebersicht): void { $db = getDatabase(); global $_FILES; global $sportsmanager_joomla_path; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (benutzerZugriff("termine_aendern")) $zugriffsebene = 2; else if (einstellungswert("termine_beantragen") == "1" && !Factory::getContainer()->get(SiteApplication::class)->getIdentity()->guest && !isExternalDatabase()) $zugriffsebene = 1; else $zugriffsebene = 0; if ($zugriffsebene == 0 || isExternalDatabase()) keinZugriff(); $uebersicht = $jInput->get('uebersicht', 0, 'INT'); $nur_beantragte = $jInput->get('nur_beantragte', 0, 'INT'); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . ($uebersicht ? 'termine' : 'termine_verlauf') . ($nur_beantragte ? '&nur_beantragte=1' : '')); } $id = $jInput->get('id', 0, 'INT'); $vorhandener_termin = !empty($id); $erster_tag = normalisiertesDatum(sprintf("%04d-%02d-%02d", $jInput->get('erster_tag_jahr', 2000, 'INT'), $jInput->get('erster_tag_monat', 1, 'INT'), $jInput->get('erster_tag_tag', 1, 'INT'))); $mehrtaegig = $jInput->get('mehrtaegig', 0, 'INT'); if (!$mehrtaegig) $letzter_tag = $erster_tag; else $letzter_tag = normalisiertesDatum(sprintf("%04d-%02d-%02d", $jInput->get('letzter_tag_jahr', 2000, 'INT'), $jInput->get('letzter_tag_monat', 1, 'INT'), $jInput->get('letzter_tag_tag', 1, 'INT'))); if (empty($erster_tag) || empty($letzter_tag)) die("Wrong date!"); $bezeichnung = $db->escape(trim($jInput->get('bezeichnung', '', 'RAW'))); $bezeichnungszusaetze = $jInput->get('bezeichnungszusaetze', array(), 'ARRAY'); $bezeichnungszusatz_benutzerdefiniert = trim($jInput->get('bezeichnungszusatz_benutzerdefiniert', '', 'RAW')); if (!empty($bezeichnungszusatz_benutzerdefiniert)) $bezeichnungszusaetze[] = $bezeichnungszusatz_benutzerdefiniert; $ort = $db->escape(trim($jInput->get('ort', '', 'RAW'))); $land = $db->escape(trim($jInput->get('land', '', 'RAW'))); $beschreibung = $db->escape(trim($jInput->get('beschreibung', '', 'RAW'))); $info = $jInput->get('info', 0, 'INT'); $url = $info == 0 ? $db->escape(trim($jInput->get('url', '', 'RAW'))) : ''; $email = $db->escape(trim($jInput->get('email', '', 'RAW'))); $ergebnisse_url = $db->escape(trim($jInput->get('ergebnisse_url', '', 'RAW'))); $bestaetigt = $jInput->get('bestaetigt', 0, 'INT'); $kommentar = $db->escape(trim($jInput->get('kommentar', '', 'RAW'))); $ueberarbeiten = $jInput->get('ueberarbeiten', 0, 'INT'); $ergebnisse_live = $jInput->get('ergebnisse_live', 0, 'INT'); $benachrichtigung_email = $db->escape(trim(str_replace(';', ',', $jInput->get('benachrichtigung_email', '', 'RAW')))); // Sicherstellen, dass Überarbeitenaktionen nur durchgeführt werden wenn tatsächlich ein bestehender Termin dahinter steht und der Benutzer Moderator ist if ($ueberarbeiten && (empty($id) || $zugriffsebene != 2)) die ("Wrong id"); $termin_bezug_id = 0; $termin = null; if (!empty($id)) { $query = "SELECT *" . "\n FROM #__sportsmanager_termin" . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" . "\n WHERE termin_id = $id" . ($zugriffsebene != 2 ? " AND status = 0" : " AND (status = 0 OR status = 2)") . " AND (typ = 0 OR typ = 1)"; $rows = loadObjectList($db, $query); if (count($rows) < 1) { redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . ($uebersicht ? 'termine' : 'termine_verlauf'), "Der bisherige Termin existiert nicht mehr."); } $termin = $rows[0]; $termin_bezug_id = $termin->termin_bezug_id; } $query = "INSERT #__sportsmanager_termin" . "\n SET termin_bezug_id = '$termin_bezug_id'," . "\n erster_tag = '$erster_tag'," . "\n letzter_tag = '$letzter_tag'," . "\n bezeichnung = '$bezeichnung'," . "\n beschreibung = '$beschreibung'," . "\n ort = '$ort'," . "\n land = '$land'," . "\n url = '$url'," . "\n email = '$email'," . "\n ergebnisse_url = '$ergebnisse_url'," . "\n ergebnisse_live = '$ergebnisse_live'," . "\n bestaetigt = '$bestaetigt'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $neuer_termin_id = $db->insertid(); foreach ($bezeichnungszusaetze as $bezeichnungszusatz) { $query = "INSERT #__sportsmanager_termin_zusatz" . "\n SET termin_id = $neuer_termin_id," . "\n zusatz = '" . $db->escape($bezeichnungszusatz) . "'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } for ($i = 0; $i <= 5; $i++) { $input = Factory::getContainer()->get(SiteApplication::class)->input; $symbol_id = $input->getInt('symbol_id_' . $i, 0); if ($symbol_id != 0) { $query = "INSERT #__sportsmanager_termin_symbolanzeige" . "\n SET termin_id = $neuer_termin_id," . "\n termin_symbol_id = $symbol_id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } if (!$vorhandener_termin) { $query = "UPDATE #__sportsmanager_termin" . "\n SET termin_bezug_id = $neuer_termin_id" . "\n WHERE termin_id = $neuer_termin_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'termine'; $dokument_kopieren_gescheitert = 0; $info_dokument = $_FILES['info_dokument']; if ($info == 1 && !empty($id)) { $dokumente = Folder::files($bilder_pfad, '^' . $id . ' '); if (empty($dokumente)) { $dokument_kopieren_gescheitert = 2; } else { $info_dokument_dateiname = substr($dokumente[0], strlen((string)$id) + 1); $quelle_pfad = $bilder_pfad . DIRECTORY_SEPARATOR . $dokumente[0]; $ziel_pfad = $bilder_pfad . DIRECTORY_SEPARATOR . $neuer_termin_id . " " . $info_dokument_dateiname; if (!File::copy($quelle_pfad, $ziel_pfad)) $dokument_kopieren_gescheitert = 2; } } else if ($info == 2 && isset($info_dokument) && !$info_dokument['error']) { $info_dokument_dateiname = File::makeSafe($info_dokument["name"]); if ($info_dokument["size"] > 8388608) { $dokument_kopieren_gescheitert = 1; } else { $ziel_pfad = $bilder_pfad . DIRECTORY_SEPARATOR . $neuer_termin_id . " " . $info_dokument_dateiname; if (!File::upload($info_dokument["tmp_name"], $ziel_pfad)) $dokument_kopieren_gescheitert = 2; } } if (!empty($dokument_kopieren_gescheitert)) { $query = "DELETE FROM #__sportsmanager_termin_symbolanzeige WHERE termin_id = $neuer_termin_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_termin_zusatz WHERE termin_id = $neuer_termin_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_termin WHERE termin_id = $neuer_termin_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine', "Der Termin wurde nicht erstellt weil der Anhang " . ($dokument_kopieren_gescheitert == 1 ? "zu groß ist." : "nicht kopiert werden konnte.")); } if ($vorhandener_termin && $zugriffsebene != 1) { $query = "SELECT DISTINCT termin_id" . "\n FROM #__sportsmanager_termin_aktion" . "\n INNER JOIN #__sportsmanager_termin USING (termin_id)" . "\n WHERE termin_bezug_id = $termin_bezug_id AND " . ($ueberarbeiten ? "(status = 0 OR termin_id = $id)" : "status = 0") . ";"; $rows = loadObjectList($db, $query); foreach ($rows as $row) { $dokumente = Folder::files($bilder_pfad, '^' . $row->termin_id . ' '); foreach ($dokumente as $dokument) File::delete($bilder_pfad . DIRECTORY_SEPARATOR . $dokument); } $query = "UPDATE #__sportsmanager_termin_aktion" . "\n INNER JOIN #__sportsmanager_termin USING (termin_id)" . "\n SET status = 1" . "\n WHERE termin_bezug_id = $termin_bezug_id AND " . ($ueberarbeiten ? "(status = 0 OR termin_id = $id)" : "status = 0") . ";"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } $user_id = Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id; $query = "INSERT #__sportsmanager_termin_aktion" . "\n SET termin_id = $neuer_termin_id," . "\n typ = '" . ($vorhandener_termin ? 1 : 0) . "'," // 0: Hinzufügen, 1: Ändern, 2: Entfernen . "\n benachrichtigung_email = '$benachrichtigung_email'," . "\n aktion_user_id = '" . ($ueberarbeiten ? $termin->aktion_user_id : $user_id) . "'," . "\n aktion_zeitpunkt = " . ($ueberarbeiten ? ("'$termin->aktion_zeitpunkt'") : "NOW()") . "," . "\n aktion_kommentar = '" . ($ueberarbeiten ? $db->escape($termin->aktion_kommentar) : $kommentar) . "'," . "\n moderation_user_id = " . ($zugriffsebene != 1 ? "'$user_id'" : "NULL") . "," . "\n moderation_zeitpunkt = " . ($zugriffsebene != 1 ? "NOW()" : "NULL") . "," . "\n moderation_kommentar = '" . ($ueberarbeiten ? $kommentar : "") . "'," . "\n status = " . ($zugriffsebene != 1 ? "0" : "2"); // 0: Akzeptiert, 1: Archiviert, 2: Beantragt, 3: Abgelehnt $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $termin_aktion_id = $db->insertid(); termineEmailBenachrichtigung($termin_aktion_id, $ueberarbeiten); if ($zugriffsebene == 1) { HTML_sportsmanager_admin::adminTermineBeantragtBestaetigung($admin_uebersicht); } else { redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . ($uebersicht ? 'termine' : 'termine_verlauf') . ($nur_beantragte ? '&nur_beantragte=1' : '')); } } function adminRemoveTerminForm($admin_uebersicht): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (benutzerZugriff("termine_aendern")) $zugriffsebene = 2; else if (einstellungswert("termine_beantragen") == "1" && !Factory::getContainer()->get(SiteApplication::class)->getIdentity()->guest && !isExternalDatabase()) $zugriffsebene = 1; else $zugriffsebene = 0; if ($zugriffsebene == 0 || isExternalDatabase()) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $nur_beantragte = $jInput->get('nur_beantragte', 0, 'INT'); $query = "SELECT #__sportsmanager_termin.*, #__sportsmanager_termin_aktion.*, GROUP_CONCAT(zusatz ORDER BY zusatz SEPARATOR ', ') AS zusaetze" . "\n FROM #__sportsmanager_termin" . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" . "\n LEFT JOIN #__sportsmanager_termin_zusatz USING (termin_id)" . "\n WHERE termin_id = $id AND status = 0 AND (typ = 0 OR typ = 1)" . "\n GROUP BY #__sportsmanager_termin_aktion.termin_aktion_id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) { redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine', "Der bisherige Termin existiert nicht mehr."); } $terminaktion = $rows[0]; HTML_sportsmanager_admin::adminRemoveTermin($terminaktion, $nur_beantragte, $zugriffsebene, $admin_uebersicht); } function adminCheckRelativerPfad($Url) { if (str_starts_with($Url, "index.php")) { $Scriptname = $_SERVER['REQUEST_SCHEME'] . "://" . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']; $Url = str_replace('index.php', $Scriptname, $Url); } return $Url; } function adminRemoveTermin($admin_uebersicht): void { $db = getDatabase(); global $sportsmanager_joomla_path; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (benutzerZugriff("termine_aendern")) $zugriffsebene = 2; else if (einstellungswert("termine_beantragen") == "1" && !Factory::getContainer()->get(SiteApplication::class)->getIdentity()->guest && !isExternalDatabase()) $zugriffsebene = 1; else $zugriffsebene = 0; if ($zugriffsebene == 0 || isExternalDatabase()) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine'); } $id = $jInput->get('id', 0, 'INT'); $kommentar = $db->escape(trim($jInput->get('kommentar', '', 'RAW'))); $query = "SELECT *" . "\n FROM #__sportsmanager_termin_aktion" . "\n INNER JOIN #__sportsmanager_termin USING (termin_id)" . "\n WHERE termin_id = $id AND status = 0 AND (typ = 0 OR typ = 1);"; $rows = loadObjectList($db, $query); if (count($rows) < 1) { redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine', "Der bisherige Termin existiert nicht mehr."); } $termin = $rows[0]; $termin_bezug_id = $termin->termin_bezug_id; if ($zugriffsebene != 1) { $query = "SELECT DISTINCT termin_id" . "\n FROM #__sportsmanager_termin_aktion" . "\n INNER JOIN #__sportsmanager_termin USING (termin_id)" . "\n WHERE termin_bezug_id = $termin_bezug_id AND status = 0;"; $rows = loadObjectList($db, $query); $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'termine'; foreach ($rows as $row) { $dokumente = Folder::files($bilder_pfad, '^' . $row->termin_id . ' '); foreach ($dokumente as $dokument) File::delete($bilder_pfad . DIRECTORY_SEPARATOR . $dokument); } $query = "UPDATE #__sportsmanager_termin_aktion" . "\n INNER JOIN #__sportsmanager_termin USING (termin_id)" . "\n SET status = 1" . "\n WHERE termin_bezug_id = $termin_bezug_id AND status = 0;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } $benachrichtigung_email = $db->escape(trim(str_replace(';', ',', $jInput->get('benachrichtigung_email', '', 'RAW')))); $user_id = Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id; $query = "INSERT #__sportsmanager_termin_aktion" . "\n SET termin_id = $id," . "\n typ = '2'," // 0: Hinzufügen, 1: Ändern, 2: Entfernen . "\n benachrichtigung_email = '$benachrichtigung_email'," . "\n aktion_user_id = '$user_id'," . "\n aktion_zeitpunkt = NOW()," . "\n aktion_kommentar = '$kommentar'," . "\n moderation_user_id = " . ($zugriffsebene != 1 ? "'$user_id'" : "NULL") . "," . "\n moderation_zeitpunkt = " . ($zugriffsebene != 1 ? "NOW()" : "NULL") . "," . "\n moderation_kommentar = ''," . "\n status = " . ($zugriffsebene != 1 ? "0" : "2"); // 0: Akzeptiert, 1: Archiviert, 2: Beantragt, 3: Abgelehnt $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $termin_aktion_id = $db->insertid(); termineEmailBenachrichtigung($termin_aktion_id); if ($zugriffsebene == 1) { HTML_sportsmanager_admin::adminTermineBeantragtBestaetigung($admin_uebersicht); } else { redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine'); } } // $aktion = 0: Beantragt, 1: ... function termineEmailBenachrichtigung($termin_aktion_id, $ueberarbeiten = false): bool { $db = getDatabase(); $app = Factory::getContainer()->get(SiteApplication::class); $query = "SELECT #__sportsmanager_termin.*, #__sportsmanager_termin_aktion.*, aktion_user.name AS aktion_user_name, aktion_user.email AS aktion_user_email, moderation_user.name AS moderation_user_name, moderation_user.email AS moderation_user_email, GROUP_CONCAT(zusatz ORDER BY zusatz SEPARATOR ', ') AS zusaetze" . "\n FROM #__sportsmanager_termin" . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" . "\n LEFT JOIN #__sportsmanager_termin_zusatz USING (termin_id)" . "\n LEFT JOIN #__users AS aktion_user ON aktion_user_id = aktion_user.id" . "\n LEFT JOIN #__users AS moderation_user ON moderation_user_id = moderation_user.id" . "\n WHERE termin_aktion_id = $termin_aktion_id" . "\n GROUP BY #__sportsmanager_termin.termin_id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) return false; $terminaktion = $rows[0]; $benachrichtigung_moderatoren_informieren = array(); $benachrichtigung_moderatoren_aendern = array(); $query = "SELECT DISTINCT email, IF(EXISTS(SELECT * FROM #__sportsmanager_moderator_zugriff AS m2 WHERE zugriff = 'termine_aendern' AND m2.moderator_id = #__sportsmanager_moderator_zugriff.moderator_id), 1, 0) AS termine_aendern" . "\n FROM #__sportsmanager_moderator" . "\n INNER JOIN #__sportsmanager_moderator_zugriff USING (moderator_id)" . "\n INNER JOIN #__users ON moderator_user_id = id" . "\n WHERE zugriff = 'termine_benachrichtigung'"; $rows = loadObjectList($db, $query); foreach ($rows as $row) { if ($row->termine_aendern) $benachrichtigung_moderatoren_aendern[] = $row->email; else $benachrichtigung_moderatoren_informieren[] = $row->email; } $benachrichtigung_emails = explode(",", $terminaktion->benachrichtigung_email); $termin_beschreibung = "\r\n" . "Datum:\r\n" . "" . FormatierterTermin($terminaktion->erster_tag, $terminaktion->letzter_tag, true) . ($terminaktion->bestaetigt ? "" : " (in Planung)") . "\r\n" . "\r\n" . "\r\n" . "Veranstaltung:\r\n" . "" . htmlentities_utf8($terminaktion->bezeichnung) . "\r\n" . "\r\n"; if (!empty($terminaktion->zusaetze)) { $termin_beschreibung .= "\r\n" . "Zusätze:\r\n" . "" . htmlentities_utf8($terminaktion->zusaetze) . "\r\n" . "\r\n"; } if (!empty($terminaktion->ort)) { $termin_beschreibung .= "\r\n" . "Ort:\r\n" . "" . htmlentities_utf8($terminaktion->ort) . "\r\n" . "\r\n"; } if (!empty($terminaktion->land)) { $termin_beschreibung .= "\r\n" . "Land:\r\n" . "" . htmlentities_utf8($terminaktion->land) . "\r\n" . "\r\n"; } if (!empty($terminaktion->beschreibung)) { $termin_beschreibung .= "\r\n" . "Beschreibung:\r\n" . "" . htmlentities_utf8($terminaktion->beschreibung) . "\r\n" . "\r\n"; } $info_dokument_dateiname = terminDokumentname($terminaktion->termin_id); if ($info_dokument_dateiname !== false) { $termin_beschreibung .= "\r\n" . "Weitere Informationen:\r\n" . "termin_id, -1) . "\" target=\"_blank\">" . htmlentities_utf8(NichtLeererString($info_dokument_dateiname)) . "\r\n" . "\r\n"; } else if (!empty($terminaktion->url)) { $terminaktion->url = adminCheckRelativerPfad($terminaktion->url); if (!str_contains($terminaktion->url, "://")) { $termin_url_anzeige = $terminaktion->url; $termin_url = "https://" . $terminaktion->url; } else { $termin_url_anzeige = str_starts_with($terminaktion->url, "https://") ? substr($terminaktion->url, 8) : $terminaktion->url; $termin_url = $terminaktion->url; } $termin_beschreibung .= "\r\n" . "Weitere Informationen:\r\n" . "" . htmlentities_utf8($termin_url_anzeige) . "\r\n" . "\r\n"; } if (!empty($terminaktion->email)) { $termin_beschreibung .= "\r\n" . "E-Mail öffentlich:\r\n" . "email) . "\">" . htmlentities_utf8($terminaktion->email) . "\r\n" . "\r\n"; } if (!empty($benachrichtigung_emails)) { $termin_beschreibung .= "\r\n" . "E-Mail bei Änderungen:\r\n" . ""; foreach ($benachrichtigung_emails as $index => $email) { $email_trimmed = trim($email); $termin_beschreibung .= ($index > 0 ? ", " : "") . "" . htmlentities_utf8($email_trimmed) . ""; } $termin_beschreibung .= "\r\n" . "\r\n"; } if (!empty($terminaktion->ergebnisse_url)) { $terminaktion->ergebnisse_url = adminCheckRelativerPfad($terminaktion->ergebnisse_url); if (!str_contains($terminaktion->ergebnisse_url, "://")) { $termin_url_anzeige = $terminaktion->ergebnisse_url; $termin_url = "https://" . $terminaktion->ergebnisse_url; } else { $termin_url_anzeige = str_starts_with($terminaktion->ergebnisse_url, "https://") ? substr($terminaktion->ergebnisse_url, 8) : $terminaktion->ergebnisse_url; $termin_url = $terminaktion->ergebnisse_url; } $termin_beschreibung .= "\r\n" . "" . ($terminaktion->ergebnisse_live ? "Live-" : "") . "Ergebnisse:\r\n" . "" . htmlentities_utf8($termin_url_anzeige) . "\r\n" . "\r\n"; } $status = array(0 => "Akzeptiert", 1 => "Archiviert", 2 => "Beantragt", 3 => "Abgelehnt"); $aktion = array(0 => "Hinzufügen", 1 => "Ändern", 2 => "Entfernen"); if (empty($terminaktion->aktion_user_email)) $aktion_user = htmlentities_utf8($terminaktion->aktion_user_name); else $aktion_user = "aktion_user_email) . "\">" . htmlentities_utf8($terminaktion->aktion_user_name) . ""; if (empty($terminaktion->moderation_zeitpunkt)) $moderation_user = ""; else if (empty($terminaktion->aktion_user_email)) $moderation_user = htmlentities_utf8($terminaktion->moderation_user_name); else $moderation_user = "moderation_user_email) . "\">" . htmlentities_utf8($terminaktion->moderation_user_name) . ""; $termin_moderationsstatus = "\r\n" . " \r\n" . "\r\n" . "\r\n" . "Status:\r\n" . "" . htmlentities_utf8($status[$terminaktion->status]) . "\r\n" . "\r\n" . "\r\n" . "Aktionstyp:\r\n" . "" . htmlentities_utf8($aktion[$terminaktion->typ]) . "\r\n" . "\r\n" . "\r\n" . "Erstellung:\r\n" . "" . FormatiertesDatum($terminaktion->aktion_zeitpunkt, true, false) . " von " . $aktion_user . "\r\n" . "\r\n"; if (!empty($terminaktion->aktion_kommentar)) { $termin_moderationsstatus .= "\r\n" . "Erstellerkommentar:\r\n" . "" . nl2br(htmlentities_utf8($terminaktion->aktion_kommentar)) . "\r\n" . "\r\n"; } $termin_moderationsstatus .= "\r\n" . "Moderation:\r\n" . "" . (empty($terminaktion->moderation_zeitpunkt) ? "Nicht erfolgt" : (FormatiertesDatum($terminaktion->moderation_zeitpunkt, true, false) . " von " . $moderation_user)) . "\r\n" . "\r\n"; if (!empty($terminaktion->moderation_kommentar)) { $termin_moderationsstatus .= "\r\n" . "Moderatorkommentar:\r\n" . "" . nl2br(htmlentities_utf8($terminaktion->moderation_kommentar)) . "\r\n" . "\r\n"; } $from = $app->getCfg('mailfrom'); $fromName = $app->getCfg('fromname'); if ($terminaktion->status == 2) { $subject = "Termin " . $aktion[$terminaktion->typ] . " beantragt: " . $terminaktion->bezeichnung . " am " . FormatierterTermin($terminaktion->erster_tag, $terminaktion->letzter_tag, true); $body = "

Das " . htmlentities_utf8($aktion[$terminaktion->typ]) . " des folgenden Termins wurde beantragt und wird nun von den Moderatoren geprüft. Sobald der Termin bearbeitet wurde, wird eine E-Mail-Benachrichtigung verschickt.

"; } else { $subject = "Termin " . $aktion[$terminaktion->typ] . " " . ($terminaktion->status == 0 ? "akzeptiert" : "abgelehnt") . ": " . $terminaktion->bezeichnung . " am " . FormatierterTermin($terminaktion->erster_tag, $terminaktion->letzter_tag, true); $body = "

Das " . htmlentities_utf8($aktion[$terminaktion->typ]) . " des folgenden Termins wurde " . ($terminaktion->status == 0 ? ($ueberarbeiten ? "in überarbeiteter Form akzeptiert" : "akzeptiert") : "abgelehnt") . ".

"; } $body .= "\r\n" . $termin_beschreibung . $termin_moderationsstatus . "
\r\n"; if(!empty($benachrichtigung_emails)) { $mailer = Factory::getContainer()->get(MailerFactoryInterface::class)->createMailer(); $mailer->setSender($from, $fromName); $mailer->setSubject($subject); $mailer->isHtml(true); $mailer->setBody($body); foreach ($benachrichtigung_emails as $email) $mailer->addBcc($email); $mailer->send(); } $from = $app->getCfg('mailfrom'); $fromName = $app->getCfg('fromname'); if ($terminaktion->status == 2) { $subject = "Termin " . $aktion[$terminaktion->typ] . " beantragt von " . $terminaktion->aktion_user_name . ": " . $terminaktion->bezeichnung . " am " . FormatierterTermin($terminaktion->erster_tag, $terminaktion->letzter_tag, true); $body = "

Termin " . htmlentities_utf8($aktion[$terminaktion->typ]) . " beantragt:

\r\n"; } else if ($terminaktion->status == 0) { $subject = "Termin " . $aktion[$terminaktion->typ] . " akzeptiert von " . $terminaktion->moderation_user_name . ": " . $terminaktion->bezeichnung . " am " . FormatierterTermin($terminaktion->erster_tag, $terminaktion->letzter_tag, true); $body = "

Termin " . htmlentities_utf8($aktion[$terminaktion->typ]) . " akzeptiert:

"; } else { $subject = "Termin " . $aktion[$terminaktion->typ] . " abgelehnt von " . $terminaktion->moderation_user_name . ": " . $terminaktion->bezeichnung . " am " . FormatierterTermin($terminaktion->erster_tag, $terminaktion->letzter_tag, true); $body = "

Termin " . htmlentities_utf8($aktion[$terminaktion->typ]) . " abgelehnt:

"; } $body .= "\r\n" . $termin_beschreibung . $termin_moderationsstatus . "
\r\n"; if(!empty($benachrichtigung_moderatoren_informieren)) { $mailer = Factory::getContainer()->get(MailerFactoryInterface::class)->createMailer(); $mailer->setSender($from, $fromName); $mailer->setSubject($subject); $mailer->isHtml(true); $mailer->setBody($body); foreach ($benachrichtigung_moderatoren_informieren as $email) $mailer->addBcc($email); $mailer->send(); } $body .= "

Bitte termin_aktion_id, -1) . "\">hier klicken, um den Termin zu moderieren.

\r\n"; if(!empty($benachrichtigung_moderatoren_aendern)) { $mailer = Factory::getContainer()->get(MailerFactoryInterface::class)->createMailer(); $mailer->setSender($from, $fromName); $mailer->setSubject($subject); $mailer->isHtml(true); $mailer->setBody($body); foreach ($benachrichtigung_moderatoren_aendern as $email) $mailer->addBcc($email); $mailer->send(); } return true; } #[NoReturn] function adminTerminModerieren($admin_uebersicht): void { $db = getDatabase(); global $sportsmanager_joomla_path; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("termine_aendern") || isExternalDatabase()) keinZugriff(); $id = $jInput->get('id', 0, 'INT'); $nur_beantragte = $jInput->get('nur_beantragte', 0, 'INT'); $uebersicht = $jInput->get('uebersicht', 0, 'INT'); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . ($uebersicht ? 'termine' : 'termine_verlauf') . ($nur_beantragte ? '&nur_beantragte=1' : '')); } if ($jInput->get('ueberarbeiten', false, 'BOOL')) { $termin_id = $jInput->get('termin_id', 0, 'INT'); redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termin_edit&ueberarbeiten=1&id=' . $termin_id . ($nur_beantragte ? '&nur_beantragte=1' : '')); } $akzeptieren = $jInput->get('akzeptieren', false, 'BOOL'); $kommentar = $db->escape(trim($jInput->get('kommentar', '', 'RAW'))); $query = "SELECT *" . "\n FROM #__sportsmanager_termin" . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" . "\n WHERE termin_aktion_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $terminaktion = $rows[0]; $termin_bezug_id = $terminaktion->termin_bezug_id; if ($terminaktion->status != 2) { redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . ($uebersicht ? 'termine' : 'termine_verlauf') . ($nur_beantragte ? '&nur_beantragte=1' : ''), "Die Moderation wurde nicht umgesetzt weil der Termin nicht mehr im Beantragt-Status war."); } $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'termine'; if ($akzeptieren) { $query = "SELECT DISTINCT termin_id" . "\n FROM #__sportsmanager_termin_aktion" . "\n INNER JOIN #__sportsmanager_termin USING (termin_id)" . "\n WHERE termin_bezug_id = $termin_bezug_id AND status = 0;"; $rows = loadObjectList($db, $query); foreach ($rows as $row) { $dokumente = Folder::files($bilder_pfad, '^' . $row->termin_id . ' '); foreach ($dokumente as $dokument) File::delete($bilder_pfad . DIRECTORY_SEPARATOR . $dokument); } if ($terminaktion->typ == 2) { $dokumente = Folder::files($bilder_pfad, '^' . $terminaktion->termin_id . ' '); foreach ($dokumente as $dokument) File::delete($bilder_pfad . DIRECTORY_SEPARATOR . $dokument); } $query = "UPDATE #__sportsmanager_termin_aktion" . "\n INNER JOIN #__sportsmanager_termin USING (termin_id)" . "\n SET status = 1" . "\n WHERE termin_bezug_id = $termin_bezug_id AND status = 0;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } else { if ($terminaktion->typ != 2) { $dokumente = Folder::files($bilder_pfad, '^' . $terminaktion->termin_id . ' '); foreach ($dokumente as $dokument) File::delete($bilder_pfad . DIRECTORY_SEPARATOR . $dokument); } } $user_id = Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id; $query = "UPDATE #__sportsmanager_termin_aktion" . "\n INNER JOIN #__sportsmanager_termin USING (termin_id)" . "\n SET status = " . ($akzeptieren ? 0 : 3) . "," . "\n moderation_user_id = $user_id," . "\n moderation_zeitpunkt = NOW()," . "\n moderation_kommentar = '$kommentar'" . "\n WHERE termin_aktion_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } termineEmailBenachrichtigung($id); redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . ($uebersicht ? 'termine' : 'termine_verlauf') . ($nur_beantragte ? '&nur_beantragte=1' : '')); } function adminTermineVerlauf($admin_uebersicht): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("termine_aendern")) keinZugriff(true); $nur_beantragte = $jInput->get('nur_beantragte', 0, 'INT'); if ($nur_beantragte) { $query = "SELECT #__sportsmanager_termin.*, #__sportsmanager_termin_aktion.*, DATEDIFF(erster_tag, NOW()) AS datumsdifferenz, aktion_user.name AS aktion_user_name, moderation_user.name AS moderation_user_name, GROUP_CONCAT(zusatz ORDER BY zusatz SEPARATOR ', ') AS zusaetze" . "\n FROM #__sportsmanager_termin" . "\n LEFT JOIN #__sportsmanager_termin_aktion USING (termin_id)" . "\n LEFT JOIN #__sportsmanager_termin_zusatz USING (termin_id)" . "\n LEFT JOIN #__users AS aktion_user ON aktion_user_id = aktion_user.id" . "\n LEFT JOIN #__users AS moderation_user ON moderation_user_id = moderation_user.id" . "\n WHERE status = 2" . "\n GROUP BY #__sportsmanager_termin_aktion.termin_aktion_id" . "\n ORDER BY aktion_zeitpunkt, bezeichnung" . "\n LIMIT 1000"; } else { $query = "SELECT #__sportsmanager_termin.*, #__sportsmanager_termin_aktion.*, DATEDIFF(erster_tag, NOW()) AS datumsdifferenz, aktion_user.name AS aktion_user_name, moderation_user.name AS moderation_user_name, GROUP_CONCAT(zusatz ORDER BY zusatz SEPARATOR ', ') AS zusaetze" . "\n FROM #__sportsmanager_termin" . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" . "\n LEFT JOIN #__sportsmanager_termin_zusatz USING (termin_id)" . "\n LEFT JOIN #__users AS aktion_user ON aktion_user_id = aktion_user.id" . "\n LEFT JOIN #__users AS moderation_user ON moderation_user_id = moderation_user.id" . "\n GROUP BY #__sportsmanager_termin_aktion.termin_aktion_id" . "\n ORDER BY aktion_zeitpunkt DESC, bezeichnung" . "\n LIMIT 1000"; } $terminaktionen = loadObjectList($db, $query); HTML_sportsmanager_admin::adminTermineVerlauf($terminaktionen, $nur_beantragte, $admin_uebersicht); } #[NoReturn] function terminDokument(): void { $db = getDatabase(); global $sportsmanager_joomla_path; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $id = $jInput->get('id', 0, 'INT'); $bezug_id = $jInput->get('bezug_id', 0, 'INT'); if (benutzerZugriff("termine_aendern") || benutzerZugriff("termine_benachrichtigung")) $zugriffsebene = 1; else $zugriffsebene = 0; if (!empty($bezug_id)) { $query = "SELECT termin_id" . "\n FROM #__sportsmanager_termin" . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" . "\n WHERE termin_bezug_id = $bezug_id AND status = 0 AND (typ = 0 OR typ = 1)"; $rows = loadObjectList($db, $query); $termin_vorhanden = count($rows) > 0; if ($termin_vorhanden) $id = $rows[0]->termin_id; } else { $query = "SELECT IF (EXISTS (SELECT *" . "\n FROM #__sportsmanager_termin" . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" . "\n WHERE termin_id = $id" . ($zugriffsebene == 0 ? " AND status = 0 AND (typ = 0 OR typ = 1)" : "") . "), 1, 0)"; $termin_vorhanden = loadResult($db, $query); } if (!$termin_vorhanden) keinZugriff(true); $pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'termine'; $dokumente = Folder::files($pfad, '^' . $id . ' '); if (empty($dokumente)) { redirectSportsManagerURL(null, "Der Anhang existiert nicht mehr."); } $extension = strtolower(File::getExt($dokumente[0])); $mimeTypes = [ 'jpg' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'png' => 'image/png', 'webp' => 'image/webp', 'pdf' => 'application/pdf', 'txt' => 'text/plain' // Add more as needed ]; // Return the corresponding MIME type or a default $mm_type = $mimeTypes[$extension] ?? 'application/octet-stream'; ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-Type: " . $mm_type); header("Content-Length: " . filesize($pfad . DIRECTORY_SEPARATOR . $dokumente[0])); header('Content-Disposition: inline; filename="' . substr($dokumente[0], strlen((string)$id) + 1) . '"'); header("Content-Transfer-Encoding: binary\n"); readfile($pfad . DIRECTORY_SEPARATOR . $dokumente[0]); exit(); } function adminTerminDetails($admin_uebersicht): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("termine_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $nur_beantragte = $jInput->get('nur_beantragte', 0, 'INT'); $uebersicht = $jInput->get('uebersicht', 0, 'INT'); $query = "SELECT #__sportsmanager_termin.*, #__sportsmanager_termin_aktion.*, aktion_user.name AS aktion_user_name, aktion_user.email AS aktion_user_email, moderation_user.name AS moderation_user_name, moderation_user.email AS moderation_user_email, GROUP_CONCAT(zusatz ORDER BY zusatz SEPARATOR ', ') AS zusaetze" . "\n FROM #__sportsmanager_termin" . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" . "\n LEFT JOIN #__sportsmanager_termin_zusatz USING (termin_id)" . "\n LEFT JOIN #__users AS aktion_user ON aktion_user_id = aktion_user.id" . "\n LEFT JOIN #__users AS moderation_user ON moderation_user_id = moderation_user.id" . "\n WHERE termin_aktion_id = $id" . "\n GROUP BY #__sportsmanager_termin_aktion.termin_aktion_id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $terminaktion = $rows[0]; $query = "SELECT #__sportsmanager_termin.*, #__sportsmanager_termin_aktion.*, DATEDIFF(erster_tag, NOW()) AS datumsdifferenz, aktion_user.name AS aktion_user_name, moderation_user.name AS moderation_user_name, GROUP_CONCAT(zusatz ORDER BY zusatz SEPARATOR ', ') AS zusaetze" . "\n FROM #__sportsmanager_termin" . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" . "\n LEFT JOIN #__sportsmanager_termin_zusatz USING (termin_id)" . "\n LEFT JOIN #__users AS aktion_user ON aktion_user_id = aktion_user.id" . "\n LEFT JOIN #__users AS moderation_user ON moderation_user_id = moderation_user.id" . "\n WHERE termin_bezug_id = $terminaktion->termin_bezug_id" . "\n GROUP BY #__sportsmanager_termin_aktion.termin_aktion_id" . "\n ORDER BY aktion_zeitpunkt DESC, bezeichnung"; $terminaktionen = loadObjectList($db, $query); HTML_sportsmanager_admin::adminTerminDetails($terminaktion, $terminaktionen, $nur_beantragte, $admin_uebersicht, $uebersicht, isExternalDatabase()); } function adminTermineBezeichnungen($admin_uebersicht): void { $db = getDatabase(); if (!benutzerZugriff("termine_aendern")) keinZugriff(true); $query = "SELECT *" . "\n FROM #__sportsmanager_termin_bezeichnung" . "\n ORDER BY bezeichnung"; $bezeichnungen = loadObjectList($db, $query); HTML_sportsmanager_admin::adminTermineBezeichnungen($bezeichnungen, $admin_uebersicht); } function adminEditTermineBezeichnung($admin_uebersicht): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("termine_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); if (empty($id)) { $bezeichnung = null; } else { $query = "SELECT * FROM #__sportsmanager_termin_bezeichnung WHERE termin_bezeichnung_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $bezeichnung = $rows[0]; } HTML_sportsmanager_admin::adminEditTermineBezeichnung($bezeichnung, $admin_uebersicht); } #[NoReturn] function adminSaveTermineBezeichnung($admin_uebersicht): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("termine_aendern")) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_bezeichnungen'); } $id = $jInput->get('id', 0, 'INT'); $bezeichnung = $db->escape(trim($jInput->get('bezeichnung', '', 'RAW'))); $termine_umbenennen = $jInput->get('termine_umbenennen', 0, 'INT'); if (!empty($id) && $termine_umbenennen) { $query = "SELECT * FROM #__sportsmanager_termin_bezeichnung WHERE termin_bezeichnung_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $alte_bezeichnung = $db->escape($rows[0]->bezeichnung); $query = "UPDATE #__sportsmanager_termin" . "\n SET bezeichnung = '$bezeichnung'" . "\n WHERE bezeichnung = '$alte_bezeichnung'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } $query = "SELECT * FROM #__sportsmanager_termin_bezeichnung WHERE bezeichnung = '$bezeichnung' AND termin_bezeichnung_id != $id"; $rows = loadObjectList($db, $query); // Datenbankeintrag verwerfen, falls Bezeichnung schon existiert if (count($rows) > 0) { if (!empty($id)) { $query = "DELETE FROM #__sportsmanager_termin_bezeichnung WHERE termin_bezeichnung_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } else { if (empty($id)) { $query = "INSERT #__sportsmanager_termin_bezeichnung" . "\n SET bezeichnung = '$bezeichnung'"; } else { $query = "UPDATE #__sportsmanager_termin_bezeichnung" . "\n SET bezeichnung = '$bezeichnung'" . "\n WHERE termin_bezeichnung_id = $id"; } $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_bezeichnungen'); } #[NoReturn] function adminRemoveTermineBezeichnung($admin_uebersicht): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("termine_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $query = "DELETE FROM #__sportsmanager_termin_bezeichnung WHERE termin_bezeichnung_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_bezeichnungen'); } function adminTermineBezeichnungszusaetze($admin_uebersicht): void { $db = getDatabase(); if (!benutzerZugriff("termine_aendern")) keinZugriff(true); $query = "SELECT *" . "\n FROM #__sportsmanager_termin_bezeichnungszusatz" . "\n ORDER BY bezeichnungszusatz"; $bezeichnungszusaetze = loadObjectList($db, $query); HTML_sportsmanager_admin::adminTermineBezeichnungszusaetze($bezeichnungszusaetze, $admin_uebersicht); } function adminEditTermineBezeichnungszusatz($admin_uebersicht): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("termine_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); if (empty($id)) { $bezeichnungszusatz = null; } else { $query = "SELECT * FROM #__sportsmanager_termin_bezeichnungszusatz WHERE termin_bezeichnungszusatz_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $bezeichnungszusatz = $rows[0]; } HTML_sportsmanager_admin::adminEditTermineBezeichnungszusatz($bezeichnungszusatz, $admin_uebersicht); } #[NoReturn] function adminSaveTermineBezeichnungszusatz($admin_uebersicht): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("termine_aendern")) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_bezeichnungszusaetze'); } $id = $jInput->get('id', 0, 'INT'); $bezeichnungszusatz = $db->escape(trim($jInput->get('bezeichnungszusatz', '', 'RAW'))); $titel = $db->escape(trim($jInput->get('titel', '', 'RAW'))); $termine_umbenennen = $jInput->get('termine_umbenennen', 0, 'INT'); if (!empty($id) && $termine_umbenennen) { $query = "SELECT * FROM #__sportsmanager_termin_bezeichnungszusatz WHERE termin_bezeichnungszusatz_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $alter_bezeichnungszusatz = $db->escape($rows[0]->bezeichnungszusatz); $query = "UPDATE #__sportsmanager_termin_zusatz" . "\n SET zusatz = '$bezeichnungszusatz'" . "\n WHERE zusatz = '$alter_bezeichnungszusatz'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } $query = "SELECT * FROM #__sportsmanager_termin_bezeichnungszusatz WHERE bezeichnungszusatz = '$bezeichnungszusatz' AND termin_bezeichnungszusatz_id != $id"; $rows = loadObjectList($db, $query); // Datenbankeintrag verwerfen, falls Bezeichnungszusatz schon existiert if (count($rows) > 0) { if (!empty($id)) { $query = "DELETE FROM #__sportsmanager_termin_bezeichnungszusatz WHERE termin_bezeichnungszusatz_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } else { if (empty($id)) { $query = "INSERT #__sportsmanager_termin_bezeichnungszusatz" . "\n SET bezeichnungszusatz = '$bezeichnungszusatz'," . "\n titel = '$titel'"; } else { $query = "UPDATE #__sportsmanager_termin_bezeichnungszusatz" . "\n SET bezeichnungszusatz = '$bezeichnungszusatz'," . "\n titel = '$titel'" . "\n WHERE termin_bezeichnungszusatz_id = $id"; } $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_bezeichnungszusaetze'); } #[NoReturn] function adminRemoveTermineBezeichnungszusatz($admin_uebersicht): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("termine_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $query = "DELETE FROM #__sportsmanager_termin_bezeichnungszusatz WHERE termin_bezeichnungszusatz_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_bezeichnungszusaetze'); } function adminTermineBundeslaender($admin_uebersicht): void { $db = getDatabase(); if (!benutzerZugriff("termine_aendern")) keinZugriff(true); $query = "SELECT *" . "\n FROM #__sportsmanager_termin_bundesland" . "\n ORDER BY bundesland"; $bundeslaender = loadObjectList($db, $query); HTML_sportsmanager_admin::adminTermineBundeslaender($bundeslaender, $admin_uebersicht); } function adminEditTermineBundesland($admin_uebersicht): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("termine_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); if (empty($id)) { $bundesland = null; } else { $query = "SELECT * FROM #__sportsmanager_termin_bundesland WHERE termin_bundesland_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $bundesland = $rows[0]; } HTML_sportsmanager_admin::adminEditTermineBundesland($bundesland, $admin_uebersicht); } #[NoReturn] function adminSaveTermineBundesland($admin_uebersicht): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("termine_aendern")) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_bundeslaender'); } $id = $jInput->get('id', 0, 'INT'); $bundesland = $db->escape(trim($jInput->get('bundesland', '', 'RAW'))); $termine_umbenennen = $jInput->get('termine_umbenennen', 0, 'INT'); if ($termine_umbenennen) { $query = "SELECT * FROM #__sportsmanager_termin_bundesland WHERE termin_bundesland_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $altes_bundesland = $db->escape($rows[0]->bundesland); $query = "UPDATE #__sportsmanager_termin" . "\n SET land = '$bundesland'" . "\n WHERE land = '$altes_bundesland'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } $query = "SELECT * FROM #__sportsmanager_termin_bundesland WHERE bundesland = '$bundesland' AND termin_bundesland_id != $id"; $rows = loadObjectList($db, $query); // Datenbankeintrag verwerfen, falls Bundesland schon existiert if (count($rows) > 0) { if (!empty($id)) { $query = "DELETE FROM #__sportsmanager_termin_bundesland WHERE termin_bundesland_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } else { if (empty($id)) { $query = "INSERT #__sportsmanager_termin_bundesland" . "\n SET bundesland = '$bundesland'"; } else { $query = "UPDATE #__sportsmanager_termin_bundesland" . "\n SET bundesland = '$bundesland'" . "\n WHERE termin_bundesland_id = $id"; } $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_bundeslaender'); } #[NoReturn] function adminRemoveTermineBundesland($admin_uebersicht): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("termine_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $query = "DELETE FROM #__sportsmanager_termin_bundesland WHERE termin_bundesland_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_bundeslaender'); } function adminTermineLaender($admin_uebersicht): void { $db = getDatabase(); if (!benutzerZugriff("termine_aendern")) keinZugriff(true); $query = "SELECT *" . "\n FROM #__sportsmanager_termin_land" . "\n ORDER BY land"; $laender = loadObjectList($db, $query); HTML_sportsmanager_admin::adminTermineLaender($laender, $admin_uebersicht); } function adminEditTermineLand($admin_uebersicht): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("termine_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); if (empty($id)) { $land = null; } else { $query = "SELECT * FROM #__sportsmanager_termin_land WHERE termin_land_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $land = $rows[0]; } HTML_sportsmanager_admin::adminEditTermineLand($land, $admin_uebersicht); } #[NoReturn] function adminSaveTermineLand($admin_uebersicht): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("termine_aendern")) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_laender'); } $id = $jInput->get('id', 0, 'INT'); $land = $db->escape(trim($jInput->get('land', '', 'RAW'))); $termine_umbenennen = $jInput->get('termine_umbenennen', 0, 'INT'); if ($termine_umbenennen) { $query = "SELECT * FROM #__sportsmanager_termin_land WHERE termin_land_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $altes_land = $db->escape($rows[0]->land); $query = "UPDATE #__sportsmanager_termin" . "\n SET land = '$land'" . "\n WHERE land = '$altes_land'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } $query = "SELECT * FROM #__sportsmanager_termin_land WHERE land = '$land' AND termin_land_id != $id"; $rows = loadObjectList($db, $query); // Datenbankeintrag verwerfen, falls Bundesland schon existiert if (count($rows) > 0) { if (!empty($id)) { $query = "DELETE FROM #__sportsmanager_termin_land WHERE termin_land_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } else { if (empty($id)) { $query = "INSERT #__sportsmanager_termin_land" . "\n SET land = '$land'"; } else { $query = "UPDATE #__sportsmanager_termin_land" . "\n SET land = '$land'" . "\n WHERE termin_land_id = $id"; } $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_laender'); } #[NoReturn] function adminRemoveTermineLand($admin_uebersicht): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("termine_aendern")) keinZugriff(); $id = $jInput->get('id', 0, 'INT'); $query = "DELETE FROM #__sportsmanager_termin_land WHERE termin_land_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_laender'); } function adminTermineSymbole($admin_uebersicht): void { $db = getDatabase(); if (!benutzerZugriff("termine_aendern")) keinZugriff(true); $query = "SELECT *" . "\n FROM #__sportsmanager_termin_symbol" . "\n ORDER BY status DESC, symboltitel"; $symbole = loadObjectList($db, $query); HTML_sportsmanager_admin::adminTermineSymbole($symbole, $admin_uebersicht); } function adminEditTermineSymbol($admin_uebersicht): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("termine_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); if (empty($id)) { $symbol = null; } else { $query = "SELECT * FROM #__sportsmanager_termin_symbol WHERE termin_symbol_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $symbol = $rows[0]; } HTML_sportsmanager_admin::adminEditTermineSymbol($symbol, $admin_uebersicht); } #[NoReturn] function adminSaveTermineSymbol($admin_uebersicht): void { $db = getDatabase(); global $_FILES; global $sportsmanager_joomla_path; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("termine_aendern")) keinZugriff(); $input = Factory::getContainer()->get(SiteApplication::class)->input; if ($input->getBool('cancel')) { redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_symbole'); } $id = $jInput->get('id', 0, 'INT'); $symboltitel = $db->escape(trim($jInput->get('symboltitel', '', 'RAW'))); $bildbeibehalten = $jInput->get('bildbeibehalten', 0, 'INT'); $status = $jInput->get('status', 0, 'INT'); if ($id == 0) { $query = "INSERT INTO #__sportsmanager_termin_symbol (symboltitel,status)" . "\n VALUES ('$symboltitel', '$status');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $id = $db->insertid(); } else { $query = "UPDATE #__sportsmanager_termin_symbol" . "\n SET symboltitel = '$symboltitel', " . "\n status = '$status'" . "\n WHERE termin_symbol_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } if ($bildbeibehalten == 0) { bildLoeschen('terminsymbole', $id); if (!empty($_FILES["bild"]["tmp_name"])) { if (is_uploaded_file($_FILES["bild"]["tmp_name"])) { $size = getimagesize($_FILES["bild"]["tmp_name"]); if (!$size || ($size[2] != IMAGETYPE_JPEG && $size[2] != IMAGETYPE_PNG) || ($size[0] > 8192 || $size[1] > 8192)) { redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_symbole', Text::_('COM_SPORTSMANAGER_PLAYER_WRONG_IMAGE_FORMAT')); } $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'terminsymbole'; if (!File::copy($_FILES["bild"]["tmp_name"], $bilder_pfad . DIRECTORY_SEPARATOR . $id . ($size[2] == IMAGETYPE_PNG ? '.png' : '.jpg'))) { redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_symbole', Text::_('COM_SPORTSMANAGER_IMAGE_COULD_NOT_COPIED')); } } } } redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_symbole'); } #[NoReturn] function adminRemoveTermineSymbol($admin_uebersicht): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("termine_aendern")) keinZugriff(); $id = $jInput->get('id', 0, 'INT'); $query = "DELETE FROM #__sportsmanager_termin_symbolanzeige WHERE termin_symbol_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_termin_symbol WHERE termin_symbol_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } bildLoeschen("terminsymbole", $id); redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_symbole'); } function adminEditIndividualwettbewerb(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $id = $jInput->get('id', 0, 'INT'); $vorlage = $jInput->get('vorlage', 0, 'INT'); if (!benutzerZugriff("individualwettbewerbe_aendern")) keinZugriff(true); if ($id == 0) $row = null; else { $query = "SELECT * FROM #__sportsmanager_individualwettbewerb WHERE individualwettbewerb_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $row = $rows[0]; } $query = "SELECT * FROM #__sportsmanager_veranstalter ORDER BY veranstalterbezeichnung"; $veranstalter = loadObjectList($db, $query); $query = "SELECT nummer, bezeichnung FROM #__sportsmanager_kategorie WHERE typ = 6 ORDER BY nummer"; $rows_kategorien = loadObjectList($db, $query); $kategorien = array(); foreach ($rows_kategorien as $kategorie) $kategorien[$kategorie->nummer] = $kategorie->bezeichnung; $query = "SELECT * FROM #__sportsmanager_saison ORDER BY saisonbezeichnung DESC"; $saisons = loadObjectList($db, $query); if (empty($id)) { $berechtigt_fuer_individualwettbewerb = array(); } else { $query = "SELECT #__sportsmanager_berechtigt_fuer_individualwettbewerb.* FROM #__sportsmanager_berechtigt_fuer_individualwettbewerb, #__users WHERE berechtigt_user_id = id AND berechtigt_individualwettbewerb_id = $id ORDER BY username, name"; $berechtigt_fuer_individualwettbewerb = loadObjectList($db, $query); } $query = "SELECT * FROM #__users ORDER BY name, username"; $users = loadObjectList($db, $query); HTML_sportsmanager_admin::adminEditIndividualwettbewerb($row, $veranstalter, $kategorien, $saisons, $users, $berechtigt_fuer_individualwettbewerb, $vorlage); } #[NoReturn] function adminSaveIndividualwettbewerb(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("individualwettbewerbe_aendern")) keinZugriff(); $id = $jInput->get('id', 0, 'INT'); $vorlage = $jInput->get('vorlage', 0, 'INT'); $veranstalterId = $jInput->get('veranstalterid', 0, 'INT'); $bezeichnung = $db->escape(trim($jInput->get('bezeichnung', '', 'RAW'))); $saison_id = $jInput->get('saison_id', 0, 'INT'); $saetze = $jInput->get('saetze', 0, 'INT'); $tore = $jInput->get('tore', 0, 'INT'); $tabellenwertung = $jInput->get('tabellenwertung', 0, 'INT'); $elo_wertung = $jInput->get('elo_wertung', 0, 'INT'); $status = $jInput->get('status', 0, 'INT'); $reihenfolge = $jInput->get('reihenfolge', 0, 'INT'); $kategorie = $jInput->get('kategorie', 0, 'INT'); $berechtigt_fuer_individualwettbewerb_user_ids = array(); for ($i = 1; $i <= 6; $i++) { $berechtigt_user_id = $jInput->get('berechtigt_fuer_individualwettbewerb_user_' . $i . '_id', 0, 'INT'); if (!empty($berechtigt_user_id) && !in_array($berechtigt_user_id, $berechtigt_fuer_individualwettbewerb_user_ids)) $berechtigt_fuer_individualwettbewerb_user_ids[] = $berechtigt_user_id; } $elo_aktualisieren = false; if ($vorlage) { $query = "SELECT * FROM #__sportsmanager_individualwettbewerb_platzierung WHERE individualwettbewerb_id = $id"; $rows = loadObjectList($db, $query); $query = "INSERT #__sportsmanager_individualwettbewerb" . "\n SET veranstalter_id = '$veranstalterId'," . "\n bezeichnung = '$bezeichnung'," . "\n saison_id = '$saison_id'," . "\n saetze = " . ($saetze != 0 ? "'$saetze'" : "null") . "," . "\n tore = " . ($tore != 0 ? "'$tore'" : "null") . "," . "\n tabellenwertung = '$tabellenwertung'," . "\n elo_wertung = '$elo_wertung'," . "\n status = '$status'," . "\n reihenfolge = '$reihenfolge'," . "\n kategorie = '$kategorie'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $id = $db->insertid(); foreach ($rows as $row) { $query = "INSERT #__sportsmanager_individualwettbewerb_ausgangsplatzierung" . "\n SET individualwettbewerb_id = '$id'," . "\n spieler_id = '" . $row->spieler_id . "'," . "\n platz = '" . $row->platz . "'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } else if ($id == 0) { $query = "INSERT #__sportsmanager_individualwettbewerb" . "\n SET veranstalter_id = '$veranstalterId'," . "\n bezeichnung = '$bezeichnung'," . "\n saison_id = '$saison_id'," . "\n saetze = " . ($saetze != 0 ? "'$saetze'" : "null") . "," . "\n tore = " . ($tore != 0 ? "'$tore'" : "null") . "," . "\n tabellenwertung = '$tabellenwertung'," . "\n elo_wertung = '$elo_wertung'," . "\n status = '$status'," . "\n reihenfolge = '$reihenfolge'," . "\n kategorie = '$kategorie'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $id = $db->insertid(); } else { $query = "SELECT * FROM #__sportsmanager_individualwettbewerb WHERE individualwettbewerb_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) { redirectSportsManagerURL('&task=admin_uebersicht', "Der Individualwettbewerb existiert nicht mehr!"); } $row = $rows[0]; $query = "UPDATE #__sportsmanager_individualwettbewerb" . "\n SET veranstalter_id = '$veranstalterId'," . "\n bezeichnung = '$bezeichnung'," . "\n saison_id = '$saison_id'," . "\n saetze = " . ($saetze != 0 ? "'$saetze'" : "null") . "," . "\n tore = " . ($tore != 0 ? "'$tore'" : "null") . "," . "\n tabellenwertung = '$tabellenwertung'," . "\n elo_wertung = '$elo_wertung'," . "\n status = '$status'," . "\n reihenfolge = '$reihenfolge'," . "\n kategorie = '$kategorie'" . "\n WHERE individualwettbewerb_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } if (($elo_wertung != 0 && $status != 0) != ($row->elo_wertung != 0 && $row->status != 0)) $elo_aktualisieren = true; } $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_individualwettbewerb WHERE berechtigt_individualwettbewerb_id = $id"; if (!empty($berechtigt_fuer_individualwettbewerb_user_ids)) $query .= " AND berechtigt_user_id NOT IN (" . implode(", ", $berechtigt_fuer_individualwettbewerb_user_ids) . ")"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_individualwettbewerb WHERE berechtigt_individualwettbewerb_id = $id"; $rows = loadObjectList($db, $query); foreach ($rows as $row) { $index = array_search($row->berechtigt_user_id, $berechtigt_fuer_individualwettbewerb_user_ids); if ($index !== false) { unset($berechtigt_fuer_individualwettbewerb_user_ids[$index]); } } foreach ($berechtigt_fuer_individualwettbewerb_user_ids as $berechtigt_user_id) { $query = "INSERT INTO #__sportsmanager_berechtigt_fuer_individualwettbewerb (berechtigt_user_id, berechtigt_individualwettbewerb_id) VALUES ('$berechtigt_user_id', '$id');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } $query = "SELECT DATE(MIN(zeitpunkt)) FROM #__sportsmanager_individualwettbewerb_spiel WHERE individualwettbewerb_id = $id"; $aktualisieren_ab_datum = loadResult($db, $query); if ($elo_aktualisieren && $aktualisieren_ab_datum != null) { eloAktualisieren($aktualisieren_ab_datum); einstufungAktualisieren(); } individualwettbewerbTabelleAktualisieren($id); spielerstatistikAktualisieren(0, 0, $id); redirectSportsManagerURL('&task=admin_uebersicht'); } function individualwettbewerbTabelleAktualisieren($id = null): void { $db = getDatabase(); $query = "SELECT * FROM #__sportsmanager_individualwettbewerb"; if (!empty($id)) $query .= "\n WHERE individualwettbewerb_id = $id"; $individualwettbewerbe = loadObjectList($db, $query); foreach ($individualwettbewerbe as $individualwettbewerb) { $individualwettbewerb_id = $individualwettbewerb->individualwettbewerb_id; if ($individualwettbewerb->tabellenwertung == 0) { $query = "DELETE FROM #__sportsmanager_individualwettbewerb_platzierung WHERE individualwettbewerb_id = $individualwettbewerb_id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } continue; } $query = "SELECT heim_spieler_1_id, heim_spieler_2_id, gast_spieler_1_id, gast_spieler_2_id, ergebnis FROM #__sportsmanager_individualwettbewerb_spiel" . "\n WHERE individualwettbewerb_id = $individualwettbewerb_id" . "\n ORDER BY zeitpunkt, individualwettbewerb_spiel_id"; $spiele = loadObjectList($db, $query); $query = "SELECT *" . "\n FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung" . "\n WHERE individualwettbewerb_id = $individualwettbewerb_id" . "\n ORDER BY platz"; $ausgangsplatzierungen = loadObjectList($db, $query); $platzierungen = array(); foreach ($ausgangsplatzierungen as $ausgangsplatzierung) $platzierungen[] = $ausgangsplatzierung->spieler_id; foreach ($spiele as $spiel) { if ($spiel->ergebnis == 0) continue; if ($spiel->heim_spieler_2_id != null) // Bis auf Weiteres keine Doppelspiele für Tabelle berücksichtigen continue; $sieger_spieler_id = $spiel->ergebnis == 1 ? $spiel->heim_spieler_1_id : $spiel->gast_spieler_1_id; $verlierer_spieler_id = $spiel->ergebnis != 1 ? $spiel->heim_spieler_1_id : $spiel->gast_spieler_1_id; if (!in_array($verlierer_spieler_id, $platzierungen)) $platzierungen[] = $verlierer_spieler_id; $sieger_platzierung = array_search($sieger_spieler_id, $platzierungen); $verlierer_platzierung = array_search($verlierer_spieler_id, $platzierungen); if ($sieger_platzierung !== false) { if ($sieger_platzierung < $verlierer_platzierung) continue; array_splice($platzierungen, $sieger_platzierung, 1); } array_splice($platzierungen, $verlierer_platzierung, 0, $sieger_spieler_id); } $query = "SELECT * FROM #__sportsmanager_individualwettbewerb_platzierung" . "\n WHERE individualwettbewerb_id = $individualwettbewerb_id"; $platzierungen_vorhanden = loadObjectList($db, $query); $platzierungen_uebrig = $platzierungen; foreach ($platzierungen_vorhanden as $platzierung_vorhanden) { $index = array_search($platzierung_vorhanden->spieler_id, $platzierungen); if ($index !== false) { $platz = $index + 1; if ($platzierung_vorhanden->platz != $platz) { $query = "UPDATE #__sportsmanager_individualwettbewerb_platzierung" . "\n SET platz = '$platz'" . "\n WHERE individualwettbewerb_platzierung_id = " . $platzierung_vorhanden->individualwettbewerb_platzierung_id; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } $index_uebrig = array_search($platzierung_vorhanden->spieler_id, $platzierungen_uebrig); unset($platzierungen_uebrig[$index_uebrig]); } else { $query = "DELETE FROM #__sportsmanager_individualwettbewerb_platzierung WHERE individualwettbewerb_platzierung_id = " . $platzierung_vorhanden->individualwettbewerb_platzierung_id; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } foreach ($platzierungen_uebrig as $platzierung_uebrig) { $index = array_search($platzierung_uebrig, $platzierungen); $platz = $index + 1; $query = "INSERT #__sportsmanager_individualwettbewerb_platzierung" . "\n SET individualwettbewerb_id = '$individualwettbewerb_id'," . "\n spieler_id = '$platzierung_uebrig'," . "\n platz = '$platz'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } } #[NoReturn] function adminRemoveIndividualwettbewerb(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("individualwettbewerbe_aendern")) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $query = "SELECT * FROM #__sportsmanager_individualwettbewerb WHERE individualwettbewerb_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) { redirectSportsManagerURL('&task=admin_uebersicht', "Der Individualwettbewerb existiert nicht mehr!"); } $row = $rows[0]; $query = "SELECT DATE(MIN(zeitpunkt)) FROM #__sportsmanager_individualwettbewerb_spiel WHERE individualwettbewerb_id = $id"; $aktualisieren_ab_datum = loadResult($db, $query); $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_individualwettbewerb WHERE berechtigt_individualwettbewerb_id = $id"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_individualwettbewerb_spiel WHERE individualwettbewerb_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_individualwettbewerb_platzierung WHERE individualwettbewerb_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung WHERE individualwettbewerb_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $query = "DELETE FROM #__sportsmanager_individualwettbewerb WHERE individualwettbewerb_id = $id;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } if ($row->elo_wertung && $aktualisieren_ab_datum != null) { wannGespieltAktualisieren(); eloAktualisieren($aktualisieren_ab_datum); einstufungAktualisieren(); } spielerstatistikAktualisieren(0, 0, $id); redirectSportsManagerURL('&task=admin_uebersicht'); } function adminIndividualwettbewerbSpiele(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $individualwettbewerbId = $jInput->get('individualwettbewerbid', 0, 'INT'); if (!benutzerZugriff("individualwettbewerbe_aendern") && !benutzerIndividualwettbewerbModerator()) keinZugriff(true); $query = "SELECT * FROM #__sportsmanager_individualwettbewerb WHERE individualwettbewerb_id = $individualwettbewerbId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $row = $rows[0]; if (!benutzerZugriff("individualwettbewerbe_aendern") && !benutzerIndividualwettbewerbModerator($individualwettbewerbId)) keinZugriff(true); $query = "SELECT *," . " theim1.vorname AS heim_spieler_1_vorname, theim1.nachname AS heim_spieler_1_nachname," . " theim2.vorname AS heim_spieler_2_vorname, theim2.nachname AS heim_spieler_2_nachname," . " tgast1.vorname AS gast_spieler_1_vorname, tgast1.nachname AS gast_spieler_1_nachname," . " tgast2.vorname AS gast_spieler_2_vorname, tgast2.nachname AS gast_spieler_2_nachname" . "\n FROM #__sportsmanager_individualwettbewerb_spiel" . "\n LEFT JOIN #__sportsmanager_spieler AS theim1 ON theim1.spieler_id = heim_spieler_1_id" . "\n LEFT JOIN #__sportsmanager_spieler AS theim2 ON theim2.spieler_id = heim_spieler_2_id" . "\n LEFT JOIN #__sportsmanager_spieler AS tgast1 ON tgast1.spieler_id = gast_spieler_1_id" . "\n LEFT JOIN #__sportsmanager_spieler AS tgast2 ON tgast2.spieler_id = gast_spieler_2_id" . "\n WHERE individualwettbewerb_id = $individualwettbewerbId" . "\n ORDER BY zeitpunkt DESC, individualwettbewerb_spiel_id DESC"; $spiele = loadObjectList($db, $query); if ($row->tabellenwertung) { $query = "SELECT spieler_id, nachname, vorname, vereinsname, aktueller_verein_id, platz, bild_ausblenden" . "\n FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung" . "\n INNER JOIN #__sportsmanager_spieler USING (spieler_id)" . "\n LEFT JOIN #__sportsmanager_verein ON aktueller_verein_id = verein_id" . "\n WHERE individualwettbewerb_id = $individualwettbewerbId" . "\n ORDER BY platz, nachname, vorname"; $ausgangsplatzierungen = loadObjectList($db, $query); } else { $ausgangsplatzierungen = null; } HTML_sportsmanager_admin::adminIndividualwettbewerbSpiele($row, $spiele, $ausgangsplatzierungen); } function adminEditIndividualwettbewerbSpiel(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("individualwettbewerbe_aendern") && !benutzerIndividualwettbewerbModerator()) keinZugriff(true); $individualwettbewerbId = $jInput->get('individualwettbewerbid', 0, 'INT'); $query = "SELECT * FROM #__sportsmanager_individualwettbewerb WHERE individualwettbewerb_id = $individualwettbewerbId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $individualwettbewerb = $rows[0]; if (!benutzerZugriff("individualwettbewerbe_aendern") && !benutzerIndividualwettbewerbModerator($individualwettbewerbId)) keinZugriff(true); $id = $jInput->get('id', 0, 'INT'); $typ = $jInput->get('typ', 0, 'RAW'); if (empty($id)) { $row = null; $spiel_spieler_ids = null; } else { $query = "SELECT * FROM #__sportsmanager_individualwettbewerb_spiel WHERE individualwettbewerb_spiel_id = $id AND individualwettbewerb_id = $individualwettbewerbId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $row = $rows[0]; $spiel_spieler_ids = array($row->heim_spieler_1_id, $row->gast_spieler_1_id); if ($row->heim_spieler_2_id != null) array_push($spiel_spieler_ids, $row->heim_spieler_2_id, $row->gast_spieler_2_id); $typ = $row->heim_spieler_2_id != null ? "doppel" : "einzel"; } $query = "SELECT DISTINCT spieler_id, vorname, nachname, spielernr" . "\n FROM #__sportsmanager_spieler" . "\n WHERE NOT ISNULL(aktueller_verein_id)" . (!empty($spiel_spieler_ids) ? (" OR spieler_id IN (" . implode(", ", $spiel_spieler_ids) . ")") : "") . "\n ORDER BY nachname, vorname"; $spieler = loadObjectList($db, $query); HTML_sportsmanager_admin::adminEditIndividualwettbewerbSpiel($row, $typ, $individualwettbewerb, $spieler); } #[NoReturn] function adminSaveIndividualwettbewerbSpiel(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $individualwettbewerbId = $jInput->get('individualwettbewerbid', 0, 'INT'); if (!benutzerZugriff("individualwettbewerbe_aendern") && !benutzerIndividualwettbewerbModerator($individualwettbewerbId)) keinZugriff(); $id = $jInput->get('id', 0, 'INT'); $typ = $jInput->get('typ', 0, 'RAW'); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_individualwettbewerb_spiele&individualwettbewerbid=' . $individualwettbewerbId . '#sid' . $id); } $datum = normalisiertesDatum($jInput->get('datum_jahr', 0, 'INT') == 0 ? null : sprintf("%04d-%02d-%02d", $jInput->get('datum_jahr', 0, 'INT'), $jInput->get('datum_monat', 0, 'INT'), $jInput->get('datum_tag', 0, 'INT'))); $uhrzeit = normalisierteUhrzeit(sprintf(" %02d-%02d-00", $jInput->get('uhrzeit_stunden', 0, 'INT'), $jInput->get('uhrzeit_minuten', 0, 'INT'))); $zeitpunkt = $datum == null || $uhrzeit == null ? null : ($datum . " " . $uhrzeit); if ($zeitpunkt == null) { redirectSportsManagerURL('&task=admin_individualwettbewerb_spiele&individualwettbewerbid=' . $individualwettbewerbId . '#sid' . $id, "Es muss ein gültiges Datum angegeben werden."); } $ergebnis_punkte_heim = $jInput->get('ergebnis_punkte_heim', array(), 'ARRAY'); $ergebnis_punkte_gast = $jInput->get('ergebnis_punkte_gast', array(), 'ARRAY'); $ergebnis_detailliert = ""; $saetze_heim = 0; $saetze_gast = 0; for ($i = 0; $i < count($ergebnis_punkte_heim); $i++) { if (($ergebnis_punkte_heim[$i] == 0 || empty($ergebnis_punkte_heim[$i])) && ($ergebnis_punkte_gast[$i] == 0 || empty($ergebnis_punkte_gast[$i]))) continue; if (!empty($ergebnis_detailliert)) $ergebnis_detailliert .= " "; $punkte_heim = empty($ergebnis_punkte_heim[$i]) ? "0" : $ergebnis_punkte_heim[$i]; $punkte_gast = empty($ergebnis_punkte_gast[$i]) ? "0" : $ergebnis_punkte_gast[$i]; if ($punkte_heim > $punkte_gast) $saetze_heim++; else if ($punkte_gast > $punkte_heim) $saetze_gast++; $ergebnis_detailliert .= $punkte_heim . ":" . $punkte_gast; } $ergebnis = $saetze_heim > $saetze_gast ? 1 : ($saetze_heim < $saetze_gast ? 2 : 0); $heim_spieler_1_id = $jInput->get('heim_spieler_1_id', 0, 'INT'); $heim_spieler_2_id = $jInput->get('heim_spieler_2_id', 0, 'INT'); $gast_spieler_1_id = $jInput->get('gast_spieler_1_id', 0, 'INT'); $gast_spieler_2_id = $jInput->get('gast_spieler_2_id', 0, 'INT'); if (!empty($id)) { $query = "SELECT * FROM #__sportsmanager_individualwettbewerb_spiel WHERE individualwettbewerb_spiel_id = $id AND individualwettbewerb_id = $individualwettbewerbId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $spiel = $rows[0]; $typ = $spiel->heim_spieler_2_id != null ? "doppel" : "einzel"; } if (empty($heim_spieler_1_id) || empty($gast_spieler_1_id) || ($typ != "einzel" && (empty($heim_spieler_2_id) || empty($gast_spieler_2_id)))) { redirectSportsManagerURL('&task=admin_individualwettbewerb_spiele&individualwettbewerbid=' . $individualwettbewerbId . '#sid' . $id, "Es müssen Spieler ausgewählt werden."); } $query = "SELECT * FROM #__sportsmanager_individualwettbewerb WHERE individualwettbewerb_id = $individualwettbewerbId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $individualwettbewerb = $rows[0]; $elo_aktualisieren = $individualwettbewerb->elo_wertung; $aktualisieren_ab_datum = $zeitpunkt; if ($id == 0) { $query = "INSERT #__sportsmanager_individualwettbewerb_spiel" . "\n SET individualwettbewerb_id = $individualwettbewerbId," . "\n zeitpunkt = '$zeitpunkt'," . "\n heim_spieler_1_id = '$heim_spieler_1_id'," . "\n heim_spieler_2_id = " . ($typ != "einzel" ? "'$heim_spieler_2_id'" : "NULL") . "," . "\n gast_spieler_1_id = '$gast_spieler_1_id'," . "\n gast_spieler_2_id = " . ($typ != "einzel" ? "'$gast_spieler_2_id'" : "NULL") . "," . "\n ergebnis = '$ergebnis'," . "\n ergebnis_detailliert = " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'"); $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $id = $db->insertid(); } else { $query = "UPDATE #__sportsmanager_individualwettbewerb_spiel" . "\n SET zeitpunkt = '$zeitpunkt'," . "\n heim_spieler_1_id = '$heim_spieler_1_id'," . "\n heim_spieler_2_id = " . ($typ != "einzel" ? "'$heim_spieler_2_id'" : "NULL") . "," . "\n gast_spieler_1_id = '$gast_spieler_1_id'," . "\n gast_spieler_2_id = " . ($typ != "einzel" ? "'$gast_spieler_2_id'" : "NULL") . "," . "\n ergebnis = '$ergebnis'," . "\n ergebnis_detailliert = " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . "\n WHERE individualwettbewerb_spiel_id = $id AND individualwettbewerb_id = $individualwettbewerbId"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } individualwettbewerbTabelleAktualisieren($individualwettbewerbId); if ($elo_aktualisieren) { wannGespieltAktualisieren(); eloAktualisieren($aktualisieren_ab_datum); einstufungAktualisieren(); } spielerstatistikAktualisieren(0, 0, $individualwettbewerbId); redirectSportsManagerURL('&task=admin_individualwettbewerb_spiele&individualwettbewerbid=' . $individualwettbewerbId . '#sid' . $id); } #[NoReturn] function adminRemoveIndividualwettbewerbSpiel(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $id = $jInput->get('id', 0, 'INT'); $individualwettbewerbId = $jInput->get('individualwettbewerbid', 0, 'INT'); if (!benutzerZugriff("individualwettbewerbe_aendern") && !benutzerIndividualwettbewerbModerator($individualwettbewerbId)) keinZugriff(true); $query = "SELECT * FROM #__sportsmanager_individualwettbewerb WHERE individualwettbewerb_id = $individualwettbewerbId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $individualwettbewerb = $rows[0]; $query = "SELECT * FROM #__sportsmanager_individualwettbewerb_spiel WHERE individualwettbewerb_spiel_id = $id AND individualwettbewerb_id = $individualwettbewerbId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $spiel = $rows[0]; $elo_aktualisieren = $individualwettbewerb->elo_wertung; $aktualisieren_ab_datum = $spiel->zeitpunkt; $query = "DELETE FROM #__sportsmanager_individualwettbewerb_spiel WHERE individualwettbewerb_spiel_id = $id AND individualwettbewerb_id = $individualwettbewerbId;"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } individualwettbewerbTabelleAktualisieren($individualwettbewerbId); if ($elo_aktualisieren && $aktualisieren_ab_datum != null) { wannGespieltAktualisieren(); eloAktualisieren($aktualisieren_ab_datum); einstufungAktualisieren(); } spielerstatistikAktualisieren(0, 0, $individualwettbewerbId); redirectSportsManagerURL('&task=admin_individualwettbewerb_spiele&individualwettbewerbid=' . $individualwettbewerbId); } function adminEditIndividualwettbewerbAusgangsplatzierung(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; if (!benutzerZugriff("individualwettbewerbe_aendern") && !benutzerIndividualwettbewerbModerator()) keinZugriff(true); $individualwettbewerbId = $jInput->get('individualwettbewerbid', 0, 'INT'); $query = "SELECT * FROM #__sportsmanager_individualwettbewerb WHERE individualwettbewerb_id = $individualwettbewerbId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $individualwettbewerb = $rows[0]; if (!benutzerZugriff("individualwettbewerbe_aendern") && !benutzerIndividualwettbewerbModerator($individualwettbewerbId)) keinZugriff(true); if (!$individualwettbewerb->tabellenwertung) die("Wrong id!"); $id = $jInput->get('id', 0, 'INT'); $query = "SELECT spieler_id, nachname, vorname, vereinsname, aktueller_verein_id, platz, bild_ausblenden" . "\n FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung" . "\n INNER JOIN #__sportsmanager_spieler USING (spieler_id)" . "\n LEFT JOIN #__sportsmanager_verein ON aktueller_verein_id = verein_id" . "\n WHERE individualwettbewerb_id = $individualwettbewerbId" . "\n ORDER BY platz, nachname, vorname"; $ausgangsplatzierungen = loadObjectList($db, $query); $row = null; if (!empty($id)) { foreach ($ausgangsplatzierungen as $ausgangsplatzierung) { if ($ausgangsplatzierung->spieler_id == $id) { $row = $ausgangsplatzierung; break; } } if ($row == null) die("Wrong id!"); } $query = "SELECT DISTINCT spieler_id, vorname, nachname, spielernr" . "\n FROM #__sportsmanager_spieler" . "\n WHERE NOT ISNULL(aktueller_verein_id)" . (!empty($spiel_spieler_ids) ? (" OR spieler_id IN (" . implode($spiel_spieler_ids, ", ") . ")") : "") . "\n ORDER BY nachname, vorname"; $spieler = loadObjectList($db, $query); HTML_sportsmanager_admin::adminEditIndividualwettbewerbAusgangsplatzierung($row, $individualwettbewerb, $ausgangsplatzierungen, $spieler); } #[NoReturn] function adminSaveIndividualwettbewerbAusgangsplatzierung(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $individualwettbewerbId = $jInput->get('individualwettbewerbid', 0, 'INT'); if (!benutzerZugriff("individualwettbewerbe_aendern") && !benutzerIndividualwettbewerbModerator($individualwettbewerbId)) keinZugriff(); $id = $jInput->get('id', 0, 'INT'); $nach_id = $jInput->get('nach_id', 0, 'INT'); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=admin_individualwettbewerb_spiele&individualwettbewerbid=' . $individualwettbewerbId . '#pid' . $id); } if ($id == $nach_id) { redirectSportsManagerURL('&task=admin_individualwettbewerb_spiele&individualwettbewerbid=' . $individualwettbewerbId . '#pid' . $id); } $query = "SELECT * FROM #__sportsmanager_spieler WHERE spieler_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $query = "SELECT *" . "\n FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung" . "\n WHERE individualwettbewerb_id = $individualwettbewerbId" . "\n ORDER BY platz"; $ausgangsplatzierungen = loadObjectList($db, $query); $platzierungen = array(); foreach ($ausgangsplatzierungen as $ausgangsplatzierung) $platzierungen[] = $ausgangsplatzierung->spieler_id; if (!empty($nach_id) && !in_array($nach_id, $platzierungen)) die("Wrong id!"); $id_platzierung = array_search($id, $platzierungen); if ($id_platzierung !== false) array_splice($platzierungen, $id_platzierung, 1); $nach_id_platzierung = !empty($nach_id) ? (array_search($nach_id, $platzierungen) + 1) : 0; array_splice($platzierungen, $nach_id_platzierung, 0, $id); $platzierungen_uebrig = $platzierungen; foreach ($ausgangsplatzierungen as $platzierung_vorhanden) { $index = array_search($platzierung_vorhanden->spieler_id, $platzierungen); if ($index !== false) { $platz = $index + 1; if ($platzierung_vorhanden->platz != $platz) { $query = "UPDATE #__sportsmanager_individualwettbewerb_ausgangsplatzierung" . "\n SET platz = '$platz'" . "\n WHERE individualwettbewerb_ausgangsplatzierung_id = " . $platzierung_vorhanden->individualwettbewerb_ausgangsplatzierung_id; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } $index_uebrig = array_search($platzierung_vorhanden->spieler_id, $platzierungen_uebrig); unset($platzierungen_uebrig[$index_uebrig]); } else { $query = "DELETE FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung WHERE individualwettbewerb_ausgangsplatzierung_id = " . $platzierung_vorhanden->individualwettbewerb_ausgangsplatzierung_id; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } foreach ($platzierungen_uebrig as $platzierung_uebrig) { $index = array_search($platzierung_uebrig, $platzierungen); $platz = $index + 1; $query = "INSERT #__sportsmanager_individualwettbewerb_ausgangsplatzierung" . "\n SET individualwettbewerb_id = '$individualwettbewerbId'," . "\n spieler_id = '$platzierung_uebrig'," . "\n platz = '$platz'"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } individualwettbewerbTabelleAktualisieren($individualwettbewerbId); redirectSportsManagerURL('&task=admin_individualwettbewerb_spiele&individualwettbewerbid=' . $individualwettbewerbId . '#pid' . $id); } #[NoReturn] function adminRemoveIndividualwettbewerbAusgangsplatzierung(): void { $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $id = $jInput->get('id', 0, 'INT'); $individualwettbewerbId = $jInput->get('individualwettbewerbid', 0, 'INT'); if (!benutzerZugriff("individualwettbewerbe_aendern") && !benutzerIndividualwettbewerbModerator($individualwettbewerbId)) keinZugriff(true); $query = "SELECT * FROM #__sportsmanager_individualwettbewerb WHERE individualwettbewerb_id = $individualwettbewerbId"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $query = "SELECT *" . "\n FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung" . "\n WHERE individualwettbewerb_id = $individualwettbewerbId" . "\n ORDER BY platz"; $ausgangsplatzierungen = loadObjectList($db, $query); $platzierungen = array(); foreach ($ausgangsplatzierungen as $ausgangsplatzierung) $platzierungen[] = $ausgangsplatzierung->spieler_id; if (!empty($nach_id) && !in_array($nach_id, $platzierungen)) die("Wrong id!"); $id_platzierung = array_search($id, $platzierungen); if ($id_platzierung !== false) array_splice($platzierungen, $id_platzierung, 1); foreach ($ausgangsplatzierungen as $platzierung_vorhanden) { $index = array_search($platzierung_vorhanden->spieler_id, $platzierungen); if ($index !== false) { $platz = $index + 1; if ($platzierung_vorhanden->platz != $platz) { $query = "UPDATE #__sportsmanager_individualwettbewerb_ausgangsplatzierung" . "\n SET platz = '$platz'" . "\n WHERE individualwettbewerb_ausgangsplatzierung_id = " . $platzierung_vorhanden->individualwettbewerb_ausgangsplatzierung_id; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } else { $query = "DELETE FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung WHERE individualwettbewerb_ausgangsplatzierung_id = " . $platzierung_vorhanden->individualwettbewerb_ausgangsplatzierung_id; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } } } individualwettbewerbTabelleAktualisieren($individualwettbewerbId); redirectSportsManagerURL('&task=admin_individualwettbewerb_spiele&individualwettbewerbid=' . $individualwettbewerbId); }