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
+