From e7dbfa64022bcd51b50476b45cd00a416b0e33c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Meyer?= Date: Thu, 11 Dec 2025 17:52:36 +0100 Subject: [PATCH 01/28] Ordnungsstrafen implementiert --- .../components/com_sportsmanager/admin.php | 613 ++++++++++++- .../com_sportsmanager/database/update.php | 78 ++ .../com_sportsmanager/sportsmanager.php | 45 + .../views/sportsmanager/view_admin.php | 844 +++++++++++++++++- .../de-DE/de-DE.com_sportsmanager.ini | 34 + .../en-GB/en-GB.com_sportsmanager.ini | 38 +- src/structure/script.php | 88 +- 7 files changed, 1731 insertions(+), 9 deletions(-) diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index 704be08..28d38ec 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -61,6 +61,56 @@ function detectFileEncoding(string $filename): string { return $encoding ?: 'UTF-8'; // Fallback auf UTF-8 } +// Verarbeitung von Vorlagen +function renderTemplate($template, $vars = []) { + + // 1. IF_NOT mit optionalem ELSE + $template = preg_replace_callback( + '/\{IF_NOT ([A-Z0-9_]+)\}(.*?)((\{ELSE\}(.*?))?)\{END_IF\}/si', + function($m) use ($vars) { + $var = $m[1]; + $ifText = $m[2]; + $elseText = isset($m[5]) ? $m[5] : ''; + + if (empty($vars[$var])) { + return $ifText; + } else { + return $elseText; + } + }, + $template + ); + + // 2. IF mit optionalem ELSE + $template = preg_replace_callback( + '/\{IF ([A-Z0-9_]+)\}(.*?)((\{ELSE\}(.*?))?)\{END_IF\}/si', + function($m) use ($vars) { + $var = $m[1]; + $ifText = $m[2]; + $elseText = isset($m[5]) ? $m[5] : ''; + + if (!empty($vars[$var])) { + return $ifText; + } else { + return $elseText; + } + }, + $template + ); + + // 3. Einzelne Variablen ersetzen + $template = preg_replace_callback( + '/\{([A-Z0-9_]+)\}/i', + function($m) use ($vars) { + $var = $m[1]; + return $vars[$var] ?? ""; + }, + $template + ); + + return $template; +} + function adminUebersicht(): void { $db = getDatabase(); @@ -684,6 +734,7 @@ function adminEinstellungen(): void $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'); + $ordnungsstrafen_verwenden = $jInput->get('ordnungsstrafen_verwenden', 0, 'INT'); $termine_beantragen = $jInput->get('termine_beantragen', 0, 'INT'); $enableEmailReminders = $jInput->get('enable_email_reminders', 0, 'INT'); @@ -763,6 +814,14 @@ function adminEinstellungen(): void die($db->stderr(true)); } + $query = "REPLACE #__sportsmanager_einstellungen" + . "\n SET name = 'ordnungsstrafen_verwenden'" + . ", wert = '$ordnungsstrafen_verwenden'"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + $query = "REPLACE #__sportsmanager_einstellungen" . "\n SET name = 'ansprechpartner_ausblenden'" . ", wert = '$ansprechpartner_ausblenden'"; @@ -6079,6 +6138,546 @@ function adminEditSaison(): void redirectSportsManagerURL('&task=admin_saisons'); } +function adminOrdnungsstrafeMailen(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + $id = $jInput->get('id', 0, 'INT'); + + if (!benutzerZugriff("benutzerVeranstalterModerator")) + keinZugriff(true); + + + $query = "SELECT *, t2.verstoss, t2.paragraph_spo, t2.paragraph_go, t2.zusatztext, t10.regelwerk," + . "\n t4.teamname, t9.verein_id, t9.vereinsname, t8.name AS aussteller, t1.ausstelldatum, t1.status," + . "\n t7.bezeichnung as veranstaltung, CONCAT(t3.spieltag, '. Spieltag') as spieltag," + . "\n t3.spieltag_titel, DATE_FORMAT(t3.zeitpunkt, '%d.%m.%Y') AS spieldatum," + . "\n CONCAT(t5.teamname, ' - ', t6.teamname) AS begegnung," + . "\n (t1.multiplikator * t2.gebuehr + t2.zusatzgebuehr) AS gebuehr" + . "\n FROM #__sportsmanager_ordnungsstrafen AS t1" + . "\n LEFT JOIN #__sportsmanager_verstoesse AS t2 ON t1.verstoesse_id = t2.verstoesse_id" + . "\n LEFT JOIN #__sportsmanager_begegnung AS t3 ON t1.begegnung_id = t3.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_team AS t4 ON t1.team_id = t4.team_id" + . "\n LEFT JOIN #__sportsmanager_regelwerke AS t10 ON t2.regelwerke_id = t10.regelwerke_id" + . "\n LEFT JOIN #__sportsmanager_verein AS t9 ON t4.verein_id = t9.verein_id" + . "\n LEFT JOIN #__sportsmanager_team AS t5 ON t3.heim_team_id = t5.team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t6 ON t3.gast_team_id = t6.team_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t7 ON t4.veranstaltung_id = t7.veranstaltung_id" + . "\n LEFT JOIN #__users AS t8 ON t1.aussteller_id = t8.id" + . "\n WHERE t1.ordnungsstrafen_id = '$id'"; + + $rows = loadObjectList($db, $query); + $ordnungsstrafe = $rows[0]; + + $query = "SELECT * FROM #__sportsmanager_vereinsansprechpartner" + . "\n WHERE verein_id = '" . $rows[0]->verein_id . "'" + . "\n GROUP BY email" + . "\n ORDER BY vereinsansprechpartner_id;"; + $vereinsansprechpartner = loadObjectList($db, $query); + + $var["Ansprechpartner"] = ""; + $to = ""; + + foreach ($vereinsansprechpartner AS $ansprechpartner){ + if ($var["Ansprechpartner"] == "") + $var["Ansprechpartner"] = $ansprechpartner->vorname . " " . $ansprechpartner->nachname; + else + $var["Ansprechpartner"] .= ", " . $ansprechpartner->vorname . " " . $ansprechpartner->nachname; + if ($to == "") + $to = $ansprechpartner->email; + else + $to .= ";" . $ansprechpartner->email; + } + + $query = "SELECT * FROM #__sportsmanager_email_vorlagen WHERE vorlage = 'Ordnungsstrafe';"; + $vorlagen = loadObjectList($db, $query); + $template = $vorlagen[0]->email_text; + + $var["SPO"] = $ordnungsstrafe->paragraph_spo; + $var["GO"] = $ordnungsstrafe->paragraph_go; + $var["Regelwerk"] = $ordnungsstrafe->regelwerk; + $var["Verstoss"] = $ordnungsstrafe->verstoss; + $var["Begegnung"] = $ordnungsstrafe->begegnung; + $var["Liga"] = $ordnungsstrafe->veranstaltung; + $var["Spieltag"] = $ordnungsstrafe->spieltag; + $var["Spieldatum"] = $ordnungsstrafe->spieldatum; + $var["Verein"] = $ordnungsstrafe->vereinsname; + $var["Gebuehr"] = $ordnungsstrafe->gebuehr; + $var["Zusatztext"] = $ordnungsstrafe->zusatztext; + $var["Erweitert"] = $ordnungsstrafe->weitere_angaben; + $var["Aussteller"] = $ordnungsstrafe->aussteller; + + $cc = $vorlagen[0]->cc; + $bcc = $vorlagen[0]->bcc; + $subject = $vorlagen[0]->betreff; + $message = renderTemplate($template, $var); + $back = "admin_ordnungsstrafen"; + + HTML_sportsmanager_admin::adminMailto($to,$cc,$bcc,$subject,$message,$back); +} + +function adminOrdnungsstrafen(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) + keinZugriff(); + + $filter['saison'] = $jInput->get('filter_saison_id', 0, 'INT'); + $filter['verein'] = $jInput->get('filter_verein_id', 0, 'INT'); + $filter['veranstaltung'] = $jInput->get('filter_veranstaltung_id', 0, 'INT'); + $filter['aussteller'] = $jInput->get('filter_aussteller_id', 0, 'INT'); + + $query = "SELECT * FROM #__sportsmanager_saison ORDER BY saisonbezeichnung DESC;"; + $saisons = loadObjectList($db, $query); + + $query = "SELECT t7.veranstaltung_id, t7.bezeichnung" + . "\n FROM #__sportsmanager_ordnungsstrafen AS t1" + . "\n LEFT JOIN #__sportsmanager_team AS t4 ON t1.team_id = t4.team_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t7 ON t4.veranstaltung_id = t7.veranstaltung_id" + . "\n WHERE t7.veranstaltung_id <> '' " + . "\n GROUP BY t7.veranstaltung_id" + . "\n ORDER BY t7.bezeichnung"; + $veranstaltungen = loadObjectList($db, $query); + + $query = "SELECT t9.verein_id, t9.vereinsname" + . "\n FROM #__sportsmanager_ordnungsstrafen AS t1" + . "\n LEFT JOIN #__sportsmanager_team AS t4 ON t1.team_id = t4.team_id" + . "\n LEFT JOIN #__sportsmanager_verein AS t9 ON t4.verein_id = t9.verein_id" + . "\n WHERE t9.verein_id <> '' " + . "\n GROUP BY t9.verein_id" + . "\n ORDER BY t9.vereinsname"; + $vereine = loadObjectList($db, $query); + + $query = "SELECT t8.id, t8.name" + . "\n FROM #__sportsmanager_ordnungsstrafen AS t1" + . "\n LEFT JOIN #__users AS t8 ON t1.aussteller_id = t8.id" + . "\n WHERE t8.id <> '' " + . "\n GROUP BY t8.id" + . "\n ORDER BY t8.name"; + $aussteller = loadObjectList($db, $query); + + if (empty($filter['saison'])) + $filter['saison'] = $saisons[0]->saison_id; + if (!isset($filter['verein'])) + $filter['verein'] = 0; + if (!isset($filter['veranstaltung'])) + $filter['veranstaltung'] = 0; + if (!isset($filter['aussteller'])) + $filter['aussteller'] = 0; + + $query = "SELECT *, t2.verstoss, t4.teamname, t9.vereinsname, t8.name, t1.ausstelldatum, t1.status," + . "\n CONCAT(t5.teamname, ' - ', t6.teamname, ' (', t7.bezeichnung, ')') AS begegnung," + . "\n (t1.multiplikator * t2.gebuehr + t2.zusatzgebuehr) AS gebuehr" + . "\n FROM #__sportsmanager_ordnungsstrafen AS t1" + . "\n LEFT JOIN #__sportsmanager_verstoesse AS t2 ON t1.verstoesse_id = t2.verstoesse_id" + . "\n LEFT JOIN #__sportsmanager_begegnung AS t3 ON t1.begegnung_id = t3.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_team AS t4 ON t1.team_id = t4.team_id" + . "\n LEFT JOIN #__sportsmanager_verein AS t9 ON t4.verein_id = t9.verein_id" + . "\n LEFT JOIN #__sportsmanager_team AS t5 ON t3.heim_team_id = t5.team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t6 ON t3.gast_team_id = t6.team_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t7 ON t4.veranstaltung_id = t7.veranstaltung_id" + . "\n LEFT JOIN #__users AS t8 ON t1.aussteller_id = t8.id" + . "\n WHERE t7.saison_id = '" . $filter['saison'] . "'"; + if (!empty($filter['verein'])) + $query .= "\n AND t9.verein_id = '" . $filter['verein'] . "'"; + if (!empty($filter['veranstaltung'])) + $query .= "\n AND t7.veranstaltung_id = '" . $filter['veranstaltung'] . "'"; + if (!empty($filter['aussteller'])) + $query .= "\n AND t8.id = '" . $filter['aussteller'] . "'"; + $query .= "\n ORDER BY ordnungsstrafen_id"; + $rows = loadObjectList($db, $query); + + HTML_sportsmanager_admin::adminOrdnungsstrafen($rows,$saisons,$veranstaltungen,$vereine,$aussteller,$filter); +} + +function adminEditOrdnungsstrafe(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) + keinZugriff(); + + $id = $jInput->get('id', 0, 'INT'); + $begegnungid = $jInput->get('begegnungid', 0, 'INT'); + $veranstaltungid = $jInput->get('veranstaltungid', 0, 'INT'); + + if ($id == 0){ + $row = null; + $user_id = isExternalDatabase() ? 0 : (isJson() ? getUserID() : Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id); + } else { + $query = "SELECT * FROM #__sportsmanager_ordnungsstrafen WHERE ordnungsstrafen_id = $id"; + $rows = loadObjectList($db, $query); + if (count($rows) < 1) die("Wrong id!"); + $row = $rows[0]; + $begegnungid = $row->begegnung_id; + $user_id = $row->aussteller_id; + } + + if ($begegnungid == 0) + redirectSportsManagerURL('&task=admin_ordnungsstrafen', 'Missing id'); + + $query = "SELECT * FROM #__users WHERE id = '$user_id';"; + $aussteller = loadObjectList($db, $query); + + $query = "SELECT t1.begegnung_id, t1.heim_team_id, t1.gast_team_id, t1.gast_team_id," + . "\n t2.teamname AS heim_name, t3.teamname AS gast_name," + . "\n t1.zeitpunkt, t1.spieltag, t1.spieltag_titel, t1.spiel_nr," + . "\n t4.veranstaltung_id as veranstaltung_id, t4.bezeichnung AS veranstaltung, t4.regelwerke_id," + . "\n CONCAT(t2.teamname, ' - ', t3.teamname, ' (', t4.bezeichnung, ')') AS begegnung" + . "\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_veranstaltung AS t4 ON t2.veranstaltung_id = t4.veranstaltung_id" + . "\n WHERE t1.begegnung_id = $begegnungid;"; + $begegnungen = loadObjectList($db, $query); + + $query = "SELECT t1.verstoesse_id," + . "\n IF (t1.regelwerke_id = '0', t1.verstoss, CONCAT (t1.verstoss, ' (', t2.regelwerk, ')')) AS verstoss" + . "\n FROM #__sportsmanager_verstoesse AS t1" + . "\n LEFT JOIN #__sportsmanager_regelwerke AS t2 ON t1.regelwerke_id = t2.regelwerke_id "; + $query .= "WHERE zur_auswahl = 1 "; + if ($begegnungen[0]->regelwerke_id != 0) + $query .= "AND t1.regelwerke_id = '" . $begegnungen[0]->regelwerke_id . "' "; + $query .= "ORDER BY t1.regelwerke_id, t1.verstoesse_id;"; + $verstoesse = loadObjectList($db, $query); + + HTML_sportsmanager_admin::adminEditOrdnungsstrafe($row,$begegnungen[0],$teams,$verstoesse,$aussteller[0]); +} + +#[NoReturn] function adminSaveOrdnungsstrafe(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) + keinZugriff(); + + if ($jInput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_ordnungsstrafen'); + } + + $id = $jInput->get('id', 0, 'INT'); + $verstoesse_id = $jInput->get('verstoesse_id', 0, 'INT'); + $begegnung_id = $jInput->get('begegnung_id', 0, 'INT'); + $team_id = $jInput->get('team_id', 0, 'INT'); + $aussteller_id = $jInput->get('aussteller_id', 0, 'INT'); + $ausstelldatum = $db->escape(trim($jInput->get('ausstelldatum', '', 'RAW'))); + $multiplikator = $jInput->get('multiplikator', 0, 'INT'); + $weitere_angaben = $db->escape(trim($jInput->get('weitere_angaben', '', 'RAW'))); + $status = $db->escape($jInput->get('status', '', 'RAW')); + + if ($id == 0) + $query = "INSERT INTO #__sportsmanager_ordnungsstrafen" + . "\n (ordnungsstrafen_id,verstoesse_id,begegnung_id,team_id,aussteller_id,ausstelldatum,multiplikator,weitere_angaben,status)" + . "\n VALUES (NULL,'$verstoesse_id','$begegnung_id','$team_id','$aussteller_id','$ausstelldatum','$multiplikator','$weitere_angaben','$status');"; + else { + $query = "UPDATE #__sportsmanager_ordnungsstrafen" + . "\n SET verstoesse_id = '$verstoesse_id'," + . "\n begegnung_id = '$begegnung_id'," + . "\n team_id = '$team_id'," + . "\n aussteller_id = '$aussteller_id'," + . "\n ausstelldatum = '$ausstelldatum'," + . "\n multiplikator = '$multiplikator'," + . "\n weitere_angaben = '$weitere_angaben'," + . "\n status = '$status'" + . "\n WHERE ordnungsstrafen_id = $id"; + } + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_ordnungsstrafen'); +} + +#[NoReturn] function adminRemoveOrdnungsstrafe(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) + keinZugriff(); + + $id = $jInput->get('id', 0, 'INT'); + + $query = "DELETE FROM #__sportsmanager_ordnungsstrafen WHERE ordnungsstrafen_id = $id;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_ordnungsstrafen'); +} + +function adminRegelwerke(): void +{ + $db = getDatabase(); + + if (!benutzerZugriff("benutzerVeranstalterModerator")) + keinZugriff(true); + + $query = "SELECT *," + . "\n IF(EXISTS(SELECT * FROM #__sportsmanager_veranstaltung WHERE #__sportsmanager_regelwerke.regelwerke_id = regelwerke_id), 1, 0) AS veranstaltungen," + . "\n IF(EXISTS(SELECT * FROM #__sportsmanager_verstoesse WHERE #__sportsmanager_regelwerke.regelwerke_id = regelwerke_id), 1, 0) AS verstoesse" + . "\n FROM #__sportsmanager_regelwerke" + . "\n ORDER BY regelwerke_id"; + $rows = loadObjectList($db, $query); + HTML_sportsmanager_admin::adminRegelwerke($rows); +} + +function adminEditRegelwerk(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("benutzerVeranstalterModerator")) + keinZugriff(true); + + $id = $jInput->get('id', 0, 'INT'); + if ($id == 0) + $row = null; + else { + $query = "SELECT * FROM #__sportsmanager_regelwerke WHERE regelwerke_id = $id"; + $rows = loadObjectList($db, $query); + if (count($rows) < 1) die("Wrong id!"); + $row = $rows[0]; + } + + HTML_sportsmanager_admin::adminEditRegelwerk($row); +} + +#[NoReturn] function adminSaveRegelwerk(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("benutzerVeranstalterModerator")) + keinZugriff(); + + if ($jInput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_regelwerke'); + } + + $id = $jInput->get('id', 0, 'INT'); + $regelwerk = $db->escape(trim($jInput->get('regelwerk', '', 'RAW'))); + + if ($id == 0) + $query = "INSERT INTO #__sportsmanager_regelwerke (regelwerk) VALUES ('$regelwerk');"; + else { + $query = "UPDATE #__sportsmanager_regelwerke" + . "\n SET regelwerk = '$regelwerk'" + . "\n WHERE regelwerke_id = $id"; + } + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_regelwerke'); +} + +#[NoReturn] function adminRemoveRegelwerk(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("benutzerVeranstalterModerator")) + keinZugriff(true); + + $id = $jInput->get('id', 0, 'INT'); + + $query ="SELECT IF(" + . "\n EXISTS(SELECT * FROM #__sportsmanager_veranstaltung WHERE regelwerke_id = $id)" + . "\n OR EXISTS(SELECT * FROM #__sportsmanager_verstoesse WHERE regelwerke_id = $id)," + . "\n 1, 0);"; + + if (loadResult($db, $query)) + redirectSportsManagerURL('&task=admin_regelwerke',Text::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); + + $query = "DELETE FROM #__sportsmanager_regelwerke WHERE regelwerke_id = $id;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_regelwerke'); +} + +function adminVerstoesse(): void +{ + $db = getDatabase(); + + if (!benutzerZugriff("benutzerVeranstalterModerator")) + keinZugriff(true); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_verstoesse" + . "\n ORDER BY verstoesse_id"; + $rows = loadObjectList($db, $query); + + $query = "SELECT *," + . "\n IF(EXISTS(SELECT * FROM #__sportsmanager_ordnungsstrafen WHERE #__sportsmanager_ordnungsstrafen.verstoesse_id = verstoesse_id), 1, 0) AS ordnungsstrafen" + . "\n FROM #__sportsmanager_regelwerke" + . "\n ORDER BY regelwerke_id"; + $liste = loadObjectList($db, $query); + foreach($liste as $value){ + $regelwerke[$value->regelwerke_id] = $value->regelwerk; + } + HTML_sportsmanager_admin::adminVerstoesse($rows,$regelwerke); +} + +function adminEditVerstoss(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("benutzerVeranstalterModerator")) + keinZugriff(true); + + $id = $jInput->get('id', 0, 'INT'); + if ($id == 0) + $row = null; + else { + $query = "SELECT * FROM #__sportsmanager_verstoesse WHERE verstoesse_id = $id"; + $rows = loadObjectList($db, $query); + if (count($rows) < 1) die("Wrong id!"); + $row = $rows[0]; + } + + $query = "SELECT *," + . "\n IF(EXISTS(SELECT * FROM #__sportsmanager_ordnungsstrafen WHERE #__sportsmanager_ordnungsstrafen.verstoesse_id = verstoesse_id), 1, 0) AS ordnungsstrafen" + . "\n FROM #__sportsmanager_regelwerke" + . "\n ORDER BY regelwerke_id"; + $regelwerke = loadObjectList($db, $query); + + HTML_sportsmanager_admin::adminEditVerstoss($row,$regelwerke); +} + +#[NoReturn] function adminSaveVerstoss(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("benutzerVeranstalterModerator")) + keinZugriff(); + + if ($jInput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_verstoesse'); + } + + $id = $jInput->get('id', 0, 'INT'); + $regelwerke_id = $jInput->get('regelwerke_id', 0, 'INT'); + $paragraph_spo = $db->escape(trim($jInput->get('paragraph_spo', '', 'RAW'))); + $paragraph_go = $db->escape(trim($jInput->get('paragraph_go', '', 'RAW'))); + $verstoss = $db->escape(trim($jInput->get('verstoss', '', 'RAW'))); + $haupttext = $db->escape(trim($jInput->get('haupttext', '', 'RAW'))); + $zusatztext = $db->escape(trim($jInput->get('zusatztext', '', 'RAW'))); + $gebuehr = $jInput->get('gebuehr', 0, 'INT'); + $zusatzgebuehr = $jInput->get('zusatzgebuehr', 0, 'INT'); + $zur_auswahl = $jInput->get('zur_auswahl', 0, 'INT'); + + if ($id == 0) + $query = "INSERT INTO #__sportsmanager_verstoesse" + . "\n (regelwerke_id,paragraph_spo,paragraph_go,verstoss,haupttext,zusatztext,gebuehr,zusatzgebuehr,zur_auswahl)" + . "\n VALUES ('$regelwerke_id','$paragraph_spo','$paragraph_go','$verstoss','$haupttext'," + . "\n '$zusatztext','$gebuehr','$zusatzgebuehr','$zur_auswahl');"; + else { + $query = "UPDATE #__sportsmanager_verstoesse" + . "\n SET regelwerke_id = '$regelwerke_id'," + . "\n paragraph_spo = '$paragraph_spo'," + . "\n paragraph_go = '$paragraph_go'," + . "\n verstoss = '$verstoss'," + . "\n haupttext = '$haupttext'," + . "\n zusatztext = '$zusatztext'," + . "\n gebuehr = '$gebuehr'," + . "\n zusatzgebuehr = '$zusatzgebuehr'," + . "\n zur_auswahl = '$zur_auswahl'" + . "\n WHERE verstoesse_id = $id"; + } + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_verstoesse'); +} + +#[NoReturn] function adminRemoveVerstoss(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("benutzerVeranstalterModerator")) + keinZugriff(true); + + $id = $jInput->get('id', 0, 'INT'); + + $query ="SELECT IF(" + . "\n EXISTS(SELECT * FROM #__sportsmanager_ordnungsstrafen WHERE verstoesse_id = $id)," + . "\n 1, 0);"; + + if (loadResult($db, $query)) + redirectSportsManagerURL('&task=admin_verstoesse',Text::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); + + $query = "DELETE FROM #__sportsmanager_verstoesse WHERE verstoesse_id = $id;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_verstoesse'); +} + +function adminEditEmailVorlage($vorlage): void +{ + $db = getDatabase(); + + if (!benutzerZugriff("benutzerVeranstalterModerator")) + keinZugriff(true); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_email_vorlagen" + . "\n WHERE vorlage = '" . $vorlage . "'"; + $rows = loadObjectList($db, $query); + $row = $rows[0]; + + $vars = "Ansprechpartner, SPO, GO, Regelwerk, Verstoss, Begegnung, Liga, Spieltag, +
Spieldatum, Verein, Gebuehr, Zusatztext, Erweitert, Aussteller"; + HTML_sportsmanager_admin::adminEditEmailVorlage($vorlage,$row,$vars); +} + +function adminSaveEmailVorlage(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + $Fehlertext = ""; + if (!benutzerZugriff("benutzerVeranstalterModerator")) + keinZugriff(); + + if ($jInput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_ordnungsstrafen'); + } + + $vorlage = $db->escape(trim($jInput->get('vorlage', '', 'RAW'))); + $betreff = $db->escape(trim($jInput->get('betreff', '', 'RAW'))); + $cc = $db->escape(trim($jInput->get('cc', '', 'RAW'))); + $bcc = $db->escape(trim($jInput->get('bcc', '', 'RAW'))); + $email_text = $db->escape(trim($jInput->get('email_text', '', 'RAW'))); + + $query = "UPDATE #__sportsmanager_email_vorlagen" + . "\n SET betreff = '$betreff'," + . "\n cc = '$cc'," + . "\n bcc = '$bcc'," + . "\n email_text = '$email_text'" + . "\n WHERE vorlage = '" . $vorlage . "'"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_ordnungsstrafen'); +} + function adminEditVeranstaltung(): void { $db = getDatabase(); @@ -6100,6 +6699,8 @@ function adminEditVeranstaltung(): void $query = "SELECT * FROM #__sportsmanager_veranstalter ORDER BY veranstalterbezeichnung"; $veranstalter = loadObjectList($db, $query); + $query = "SELECT * FROM #__sportsmanager_regelwerke ORDER BY regelwerk"; + $regelwerke = 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"; @@ -6121,7 +6722,7 @@ function adminEditVeranstaltung(): void $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); + HTML_sportsmanager_admin::adminEditVeranstaltung($row, $veranstalter, $regelwerke, $spielmodi, $verschieberegeln, $kategorien, $saisons, $users, $berechtigt_fuer_veranstaltung, $vorlage); } #[NoReturn] function adminSaveVeranstaltung(): void @@ -6145,7 +6746,8 @@ function adminEditVeranstaltung(): void $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'); + $regelwerke_id = $jInput->get('regelwerke_id', 0, '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'); @@ -6169,8 +6771,8 @@ function adminEditVeranstaltung(): void $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');"; + $query = "INSERT INTO #__sportsmanager_veranstaltung (veranstalter_id, saison_id, bezeichnung, erster_tag " . ($letzter_tag != null ? ", letzter_tag" : "") . ", regelwerke_id, 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', " : "") . "'$regelwerke_id', '$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)); @@ -6190,7 +6792,8 @@ function adminEditVeranstaltung(): void . "\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 regelwerke_id = '$regelwerke_id'," + . "\n modus_id = '$modus_id'," . "\n verschieberegel_id = '$verschieberegel_id'," . "\n tabellenwertung = '$tabellenwertung'," . "\n direktervergleich = '$direktervergleich'," diff --git a/src/structure/components/com_sportsmanager/database/update.php b/src/structure/components/com_sportsmanager/database/update.php index 60dae7a..edddbfc 100644 --- a/src/structure/components/com_sportsmanager/database/update.php +++ b/src/structure/components/com_sportsmanager/database/update.php @@ -5414,6 +5414,84 @@ function updateDatabase(): void } } + if ($datenbank_version < 114) { + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_regelwerke` (" + . "\n `regelwerke_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `regelwerk` varchar(32) NOT NULL," + . "\n PRIMARY KEY (`regelwerke_id`)," + . "\n UNIQUE KEY `regelwerk` (`regelwerk`)" + . "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_verstoesse` (" + . "\n `verstoesse_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `regelwerke_id` int(11) NOT NULL DEFAULT 0," + . "\n `paragraph_spo` varchar(32) NOT NULL DEFAULT ''," + . "\n `paragraph_go` varchar(32) NOT NULL DEFAULT ''," + . "\n `verstoss` varchar(64) NOT NULL DEFAULT ''," + . "\n `haupttext` text NOT NULL DEFAULT ''," + . "\n `zusatztext` text NOT NULL DEFAULT ''," + . "\n `gebuehr` smallint(3) NOT NULL DEFAULT 0," + . "\n `zusatzgebuehr` smallint(2) NOT NULL DEFAULT 0," + . "\n `zur_auswahl` tinyint(1) NOT NULL DEFAULT 1," + . "\n PRIMARY KEY (`verstoesse_id`)" + . "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_ordnungsstrafen` (" + . "\n `ordnungsstrafen_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `verstoesse_id` int(11) NOT NULL DEFAULT 0," + . "\n `begegnung_id` int(11) NOT NULL DEFAULT 0," + . "\n `team_id` int(11) NOT NULL DEFAULT 0," + . "\n `aussteller_id` int(11) NOT NULL DEFAULT 0," + . "\n `ausstelldatum` date NOT NULL DEFAULT current_timestamp()," + . "\n `multiplikator` tinyint(1) NOT NULL DEFAULT 1," + . "\n `weitere_angaben` text NOT NULL DEFAULT ''," + . "\n `status` varchar(16) NOT NULL DEFAULT ''," + . "\n PRIMARY KEY (`ordnungsstrafen_id`)" + . "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_email_vorlagen` (" + . "\n `email_vorlagen_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `vorlage` varchar(64) NOT NULL," + . "\n `betreff` varchar(256) NOT NULL DEFAULT ''," + . "\n `von` varchar(64) NOT NULL DEFAULT ''," + . "\n `an` varchar(256) NOT NULL DEFAULT ''," + . "\n `cc` varchar(256) NOT NULL DEFAULT ''," + . "\n `bcc` varchar(256) NOT NULL DEFAULT ''," + . "\n `email_text` text NOT NULL DEFAULT ''," + . "\n PRIMARY KEY (`email_vorlagen_id`)," + . "\n UNIQUE KEY `vorlage` (`vorlage`)" + . "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$db->execute()) { die($db->stderr(true)); } + + $query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'ordnungsstrafen_verwenden', wert = '0';"; + $db->setQuery( $query ); + if (!$db->execute()) { die($db->stderr(true)); } + + $query = "INSERT IGNORE INTO `#__sportsmanager_email_vorlagen` (`email_vorlagen_id`, `vorlage`) VALUES (NULL, 'Ordnungsstrafe');"; + $db->setQuery($query); + if (!$db->execute()) { die($db->stderr(true)); } + + $query = "ALTER TABLE `#__sportsmanager_veranstaltung` ADD COLUMN IF NOT EXISTS `regelwerke_id` INT(11) NOT NULL DEFAULT '0' AFTER `bezeichnung`;"; + $db->setQuery($query); + if (!$db->execute()) { die($db->stderr(true)); } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '114'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + } + if ($termin_aktionen_email_setzen) { $query = "SELECT aktion_user_id, termin_aktion_id" . "\n FROM #__sportsmanager_termin_aktion"; diff --git a/src/structure/components/com_sportsmanager/sportsmanager.php b/src/structure/components/com_sportsmanager/sportsmanager.php index 79d999f..3fe698c 100644 --- a/src/structure/components/com_sportsmanager/sportsmanager.php +++ b/src/structure/components/com_sportsmanager/sportsmanager.php @@ -350,6 +350,51 @@ if ($task == "spielerbild") { case 'admin_rechnung_remove': adminRemoveRechnung(); break; + case 'admin_regelwerke': + adminRegelwerke(); + break; + case 'admin_regelwerk_edit': + adminEditRegelwerk(); + break; + case 'admin_regelwerk_save': + adminSaveRegelwerk(); + break; + case 'admin_regelwerk_remove': + adminRemoveRegelwerk(); + break; + case 'admin_ordnungsstrafe_mailen': + adminOrdnungsstrafeMailen(); + break; + case 'admin_ordnungsstrafen': + adminOrdnungsstrafen(); + break; + case 'admin_ordnungsstrafe_edit': + adminEditOrdnungsstrafe(); + break; + case 'admin_ordnungsstrafe_save': + adminSaveOrdnungsstrafe(); + break; + case 'admin_ordnungsstrafe_remove': + adminRemoveOrdnungsstrafe(); + break; + case 'admin_verstoesse': + adminVerstoesse(); + break; + case 'admin_verstoss_edit': + adminEditVerstoss(); + break; + case 'admin_verstoss_save': + adminSaveVerstoss(); + break; + case 'admin_verstoss_remove': + adminRemoveVerstoss(); + break; + case 'admin_ordnungsstrafen_vorlage': + adminEditEmailVorlage('Ordnungsstrafe'); + break; + case 'admin_email_vorlage_save': + adminSaveEmailVorlage(); + break; case 'admin_moderatoren': adminModeratoren(); break; diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php b/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php index a3e0b14..9f063f7 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php @@ -204,6 +204,15 @@ class HTML_sportsmanager_admin + + + +
@@ -808,6 +817,24 @@ class HTML_sportsmanager_admin + + + + + + + +