diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php
index 8bf3e9b..b8fd46a 100644
--- a/src/structure/components/com_sportsmanager/admin.php
+++ b/src/structure/components/com_sportsmanager/admin.php
@@ -61,6 +61,55 @@ function detectFileEncoding(string $filename): string {
return $encoding ?: 'UTF-8'; // Fallback auf UTF-8
}
+// Verarbeitung von Vorlagen
+function renderTemplate($template, $vars = []): string
+{
+
+ // 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 = $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 = $m[5] ?? '';
+
+ if (!empty($vars[$var])) {
+ return $ifText;
+ } else {
+ return $elseText;
+ }
+ },
+ $template
+ );
+
+ // 3. Einzelne Variablen ersetzen (muss immer am Ende bleiben!!!)
+ return preg_replace_callback(
+ '/\{([A-Z0-9_]+)\}/i',
+ function($m) use ($vars) {
+ $var = $m[1];
+ return $vars[$var] ?? "";
+ },
+ $template
+ );
+}
+
function adminUebersicht(): void
{
$db = getDatabase();
@@ -684,6 +733,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 +813,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'";
@@ -6083,6 +6141,742 @@ 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.ordnungsstrafen_id,"
+ . "\n t7.bezeichnung as veranstaltung, CONCAT(t3.spieltag, '. Spieltag') as spieltag, t7.saison_id,"
+ . "\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 nachname, vorname, email"
+ . "\n FROM #__sportsmanager_vereinsansprechpartner"
+ . "\n WHERE verein_id = '" . $rows[0]->verein_id . "'"
+ . "\n GROUP BY email"
+ . "\n ORDER BY nachname, vorname;";
+ $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);
+ $backtomail = "admin_ordnungsstrafe_mailen&id=" . $id;
+ $backtosender = "admin_ordnungsstrafen";
+
+ $vorlage = new stdClass();
+ $vorlage->id = $ordnungsstrafe->ordnungsstrafen_id;
+ $vorlage->name = 'Ordnungsstrafe';
+
+ HTML_sportsmanager_admin::adminMailto($to,$cc,$bcc,$subject,$message,$backtomail,$backtosender,$vorlage);
+}
+
+function sendJoomlaMail(): void
+{
+ $db = getDatabase();
+ $app = Factory::getContainer()->get(SiteApplication::class);
+ $jInput = $app->input;
+
+ $back = $db->escape(trim($jInput->get('back', '', 'RAW')));
+ $to = $db->escape(trim($jInput->get('an', '', 'RAW')));
+ $cc = $db->escape(trim($jInput->get('cc', '', 'RAW')));
+ $bcc = $db->escape(trim($jInput->get('bcc', '', 'RAW')));
+ $subject = $db->escape(trim($jInput->get('betreff', '', 'RAW')));
+ $body = nl2br(trim($jInput->get('nachricht', '', 'RAW')));
+
+ $user_id = isExternalDatabase() ? 0 : (isJson() ? getUserID() : $app->getIdentity()->id);
+ $query = "SELECT name, email FROM #__users WHERE id = '$user_id';";
+ $absender = loadObjectList($db, $query);
+
+ // Joomla From-Adresse aus Konfiguration
+ $fromName = $absender[0]->name;
+ $fromEmail = $app->getCfg('mailfrom');
+
+ // Mailer erstellen über FactoryInterface
+ $mailer = Factory::getContainer()
+ ->get(MailerFactoryInterface::class)
+ ->createMailer();
+
+ // From setzen
+ $mailer->setSender([$fromEmail, $fromName]);
+
+ // Hauptempfänger
+ $toAddresses = array_map('trim', explode(';', $to));
+ foreach ($toAddresses as $recipient) {
+ if (!empty($recipient)) {
+ $mailer->addRecipient($recipient);
+ }
+ }
+
+ // CC-Empfänger
+ $ccAddresses = array_map('trim', explode(';', $cc));
+ foreach ($ccAddresses as $recipient) {
+ if (!empty($recipient)) {
+ $mailer->addCc($recipient);
+ }
+ }
+
+ // BCC-Empfänger
+ $bccAddresses = array_map('trim', explode(';', $bcc));
+ foreach ($bccAddresses as $recipient) {
+ if (!empty($recipient)) {
+ $mailer->addBcc($recipient);
+ }
+ }
+
+ //Checkmail für Absender
+ $mailer->addBcc($absender[0]->email);
+
+ // Betreff und Body
+ $mailer->setSubject($subject);
+ $mailer->setBody($body);
+ $mailer->isHtml(true);
+
+ // Senden
+ $result = $mailer->send();
+
+ //return ($result === true) ? true : 'Fehler beim Versand: ' . $result->__toString();
+
+ if ($result === true)
+ redirectSportsManagerURL('&task=' . $back, Text::_('COM_SPORTSMANAGER_EMAIL_WAS_SEND'));
+ else
+ redirectSportsManagerURL('&task=' . $back, Text::_('COM_SPORTSMANAGER_EMAIL_WAS_NOT_SEND'));
+}
+
+function adminOrdnungsstrafen(): void
+{
+ $db = getDatabase();
+ $jInput = Factory::getContainer()->get(SiteApplication::class)->input;
+
+ if (!benutzerZugriff("mannschaftswettbewerb_aendern"))
+ 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,"
+ . "\n CONCAT(t5.teamname, ' - ', t6.teamname, ' (', t7.bezeichnung, ')') AS begegnung,"
+ . "\n (t1.multiplikator * t2.gebuehr + t2.zusatzgebuehr) AS gebuehr,"
+ . "\n if (t1.rechnungsdatum IS NOT NULL, 'Rechnung erstellt', if (t1.versendedatum IS NOT NULL, 'Versendet', 'ausgestellt')) AS status"
+ . "\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"))
+ keinZugriff();
+
+ $id = $jInput->get('id', 0, 'INT');
+ $begegnungid = $jInput->get('begegnungid', 0, 'INT');
+ $user_id = isExternalDatabase() ? 0 : (isJson() ? getUserID() : Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id);
+
+ if ($id == 0){
+ $row = null;
+ } else {
+ $query = "SELECT t1.*, t2.name as aussteller, t3.name as versender, t4.name as rechnungssteller"
+ . "\n FROM #__sportsmanager_ordnungsstrafen AS t1"
+ . "\n LEFT JOIN #__users AS t2 ON t1.aussteller_id = t2.id"
+ . "\n LEFT JOIN #__users AS t3 ON t1.versender_id = t3.id"
+ . "\n LEFT JOIN #__users AS t4 ON t1.rechnungssteller_id = t4.id"
+ . "\n 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 id, name 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, t4.saison_id,"
+ . "\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],$verstoesse,$aussteller[0]);
+}
+
+#[NoReturn] function adminSaveOrdnungsstrafe(): void
+{
+ $db = getDatabase();
+ $jInput = Factory::getContainer()->get(SiteApplication::class)->input;
+
+ if (!benutzerZugriff("mannschaftswettbewerb_aendern"))
+ keinZugriff();
+
+ if ($jInput->get('cancel', false, 'BOOL')) {
+ redirectSportsManagerURL('&task=admin_ordnungsstrafen');
+ }
+
+ $filter_saison_id = $jInput->get('filter_saison_id', 0, 'INT');
+ $user_id = isExternalDatabase() ? 0 : (isJson() ? getUserID() : Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id);
+ $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')));
+
+ if ($jInput->get('save', false, 'BOOL')) {
+ if ($id == 0) {
+ $query = "INSERT INTO #__sportsmanager_ordnungsstrafen"
+ . "\n (ordnungsstrafen_id,verstoesse_id,begegnung_id,team_id,aussteller_id,ausstelldatum,multiplikator,weitere_angaben)"
+ . "\n VALUES (NULL,'$verstoesse_id','$begegnung_id','$team_id','$aussteller_id','$ausstelldatum','$multiplikator','$weitere_angaben');";
+ } 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 WHERE ordnungsstrafen_id = $id;";
+ }
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ die($db->stderr(true));
+ }
+ redirectSportsManagerURL('&task=admin_ordnungsstrafen&filter_saison_id='.$filter_saison_id);
+ }
+
+ $query = "";
+ if ($jInput->get('set_versender', '', 'RAW') == 'set') {
+ $query = "UPDATE #__sportsmanager_ordnungsstrafen"
+ . "\n SET versender_id = '$user_id',"
+ . "\n versendedatum = CURTIME()"
+ . "\n WHERE ordnungsstrafen_id = $id;";
+ }
+ if ($jInput->get('set_versender', '', 'RAW') == 'reset') {
+ $query = "UPDATE #__sportsmanager_ordnungsstrafen"
+ . "\n SET versender_id = NULL,"
+ . "\n versendedatum = NULL,"
+ . "\n rechnungssteller_id = NULL,"
+ . "\n rechnungsdatum = NULL"
+ . "\n WHERE ordnungsstrafen_id = $id;";
+ }
+ if ($jInput->get('set_rechnung', '', 'RAW') == 'set') {
+ $query = "UPDATE #__sportsmanager_ordnungsstrafen"
+ . "\n SET rechnungssteller_id = '$user_id',"
+ . "\n rechnungsdatum = CURTIME()"
+ . "\n WHERE ordnungsstrafen_id = $id;";
+ }
+ if ($jInput->get('set_rechnung', '', 'RAW') == 'reset') {
+ $query = "UPDATE #__sportsmanager_ordnungsstrafen"
+ . "\n SET rechnungssteller_id = NULL,"
+ . "\n rechnungsdatum = NULL"
+ . "\n WHERE ordnungsstrafen_id = $id;";
+ }
+
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ die($db->stderr(true));
+ }
+ redirectSportsManagerURL('&task=admin_ordnungsstrafe_edit&id='.$id);
+}
+
+#[NoReturn] function adminRemoveOrdnungsstrafe(): void
+{
+ $db = getDatabase();
+ $jInput = Factory::getContainer()->get(SiteApplication::class)->input;
+
+ if (!benutzerZugriff("mannschaftswettbewerb_aendern"))
+ 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');
+}
+
+#[NoReturn] function adminExportOrdnungsstrafen(): void
+{
+ $db = getDatabase();
+ $jInput = Factory::getContainer()->get(SiteApplication::class)->input;
+
+ $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');
+
+ if (!benutzerZugriff("benutzerVeranstalterModerator"))
+ keinZugriff(true);
+
+ $query = "SELECT t1.ordnungsstrafen_id AS ID, t3.begegnung_id AS Spiel_ID, t7.bezeichnung AS Liga,"
+ . "\n t3.spieltag AS Spieltag, t9.vereinsname AS Verein, t2.verstoss AS Verstoss,"
+ . "\n (t1.multiplikator * t2.gebuehr + t2.zusatzgebuehr) AS Gebuehr,"
+ . "\n t8.name AS Aussteller, t1.ausstelldatum AS Ausstelldatum,"
+ . "\n t10.name AS Versender, t1.versendedatum AS Versendedatum,"
+ . "\n t11.name AS Rechnung, t1.rechnungsdatum AS Rechnungsdatum"
+ . "\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 LEFT JOIN #__users AS t10 ON t1.versender_id = t10.id"
+ . "\n LEFT JOIN #__users AS t11 ON t1.rechnungssteller_id = t11.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);
+
+ $dateiname = "Ordnungsstrafen.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 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);
+ $regelwerke = [];
+ 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;
+ 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();
@@ -6104,6 +6898,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";
@@ -6125,7 +6921,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
@@ -6149,7 +6945,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');
@@ -6173,8 +6970,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));
@@ -6194,7 +6991,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',"
@@ -7939,9 +8737,9 @@ function adminEditBegegnung(): void
}
}
- if ($begegnung->heim_team_id != $heim_team_id || $begegnung->gast_team_id != $gast_team_id ||
- $begegnung->zeitpunkt != $zeitpunkt || $begegnung->spieltag != $runde || $begegnung->spiel_nr != $spiel_nr ||
- $begegnung->spieltag_titel != $spieltag_titel || $begegnung->spielort_id != $spielort_id || (empty($begegnung->tisch) != empty($tisch) ||
+ if ($begegnung->heim_team_id != $heim_team_id || $begegnung->gast_team_id != $gast_team_id ||
+ $begegnung->zeitpunkt != $zeitpunkt || $begegnung->spieltag != $runde || $begegnung->spiel_nr != $spiel_nr ||
+ $begegnung->spieltag_titel != $spieltag_titel || $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") . ","
@@ -10496,8 +11294,8 @@ function adminBegegnungenExportForm(): void
if (einstellungswert("verbands_kuerzel") == "STFV"){
$query .= "
CONCAT(t5.saisonbezeichnung,LPAD(t4.kategorie,2,'0'),LPAD(t1.spieltag,2,'0'),LPAD(IFNULL(t1.spiel_nr, '0'),2,'0')) AS stfv_id, ";
- }
- $query .= "
+ }
+ $query .= "
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,
@@ -10589,7 +11387,7 @@ function adminBegegnungenExportForm(): void
}
$dateiname = "Spielberichte " . $veranstaltung->bezeichnung;
}
-
+
$dateiname .= ".csv";
$dateiname = bereinigterDateiname($dateiname);
ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind
@@ -10597,12 +11395,12 @@ function adminBegegnungenExportForm(): void
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;
@@ -10622,9 +11420,9 @@ function adminBegegnungenExportForm(): void
}
$data .= trim($line) . "\n";
}
-
+
echo $header . "\n" . utf8_decode($data);
-
+
die();
}
@@ -10708,7 +11506,7 @@ function adminSaveTurnier(): void
echo "$Fehlertext\n";
return;
}
-
+
if ($vorlage) {
$vorlage_id = $id;
$id = 0;
@@ -10753,7 +11551,7 @@ function adminSaveTurnier(): void
if (!$db->execute()) {
die($db->stderr(true));
}
-
+
if ($letzter_tag == $erster_tag){
$query = "UPDATE #__sportsmanager_turnierdisziplin"
. "\n SET beginn = CONCAT('$erster_tag', ' ', TIME(beginn))"
@@ -12578,7 +13376,7 @@ function adminImportTurnierdisziplinMeldungenSpieleForm(): void
}
}
}
-
+
if ($turniersystemHauptrunde != "Monster-DYP") {
$matchingNodes = $disziplin->getElementsByTagName("runde");
if ($matchingNodes != null) {
diff --git a/src/structure/components/com_sportsmanager/database/update.php b/src/structure/components/com_sportsmanager/database/update.php
index 4edc1af..c45acc4 100644
--- a/src/structure/components/com_sportsmanager/database/update.php
+++ b/src/structure/components/com_sportsmanager/database/update.php
@@ -5435,6 +5435,87 @@ 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,"
+ . "\n `zusatztext` text NOT NULL,"
+ . "\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` datetime NOT NULL DEFAULT current_timestamp(),"
+ . "\n `versender_id` int(11) DEFAULT NULL,"
+ . "\n `versendedatum` datetime DEFAULT NULL,"
+ . "\n `rechnungssteller_id` int(11) DEFAULT NULL,"
+ . "\n `rechnungsdatum` datetime DEFAULT NULL,"
+ . "\n `multiplikator` tinyint(1) NOT NULL DEFAULT 1,"
+ . "\n `weitere_angaben` text NOT NULL,"
+ . "\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,"
+ . "\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 4ed5d18..e6bc4fa 100644
--- a/src/structure/components/com_sportsmanager/sportsmanager.php
+++ b/src/structure/components/com_sportsmanager/sportsmanager.php
@@ -350,6 +350,57 @@ if ($task == "spielerbild") {
case 'admin_rechnung_remove':
adminRemoveRechnung();
break;
+ case 'admin_joomla_mail_senden':
+ sendJoomlaMail();
+ 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_ordnungsstrafen_export':
+ adminExportOrdnungsstrafen();
+ 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 4d7f129..0173690 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
+