Files
com_sportsmanager/src/structure/components/com_sportsmanager/admin.php
T

16574 lines
808 KiB
PHP

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