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 "
| Spieltag | "; echo "Spielstart | "; echo "Heim | "; echo "Gast | "; echo "
|---|---|---|---|
| " . $data[$Titelzeile['Spieltag_Nr']] . " | "; 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 "" . $data[$Titelzeile['Spielstart']] . " | "; 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 "" . $data[$Titelzeile['Heim']] . " | "; 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 "" . $data[$Titelzeile['Gast']] . " | "; echo "
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 .= "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 .= "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); }