diff --git a/src/structure/administrator/language/de-DE/de-DE.com_sportsmanager.sys.ini b/src/structure/administrator/language/de-DE/de-DE.com_sportsmanager.sys.ini index f83385e..d1a32f5 100644 --- a/src/structure/administrator/language/de-DE/de-DE.com_sportsmanager.sys.ini +++ b/src/structure/administrator/language/de-DE/de-DE.com_sportsmanager.sys.ini @@ -22,6 +22,8 @@ COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_CLUBS="Vereine" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_VENUES="Spielorte" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_APPOINTMENTS="Termine" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_MATCH_RESCHEDULING="Spielverlegungen" +COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_ASSOCIATION_BODIES="Verbandsorgane" +COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_HALL_OF_FAME="Hall Of Fame" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_TITLE="Titel" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_TITLE_DESC="Titel, der im Fenster oben angezeigt wird" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_DESCRIPTION="Beschreibung" diff --git a/src/structure/administrator/language/en-GB/en-GB.com_sportsmanager.sys.ini b/src/structure/administrator/language/en-GB/en-GB.com_sportsmanager.sys.ini index 7d4373d..959ced9 100644 --- a/src/structure/administrator/language/en-GB/en-GB.com_sportsmanager.sys.ini +++ b/src/structure/administrator/language/en-GB/en-GB.com_sportsmanager.sys.ini @@ -22,6 +22,8 @@ COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_CLUBS="Clubs" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_VENUES="Venues" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_APPOINTMENTS="Appointments" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_MATCH_RESCHEDULING="Match reschedulings" +COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_ASSOCIATION_BODIES="Association bodies" +COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_HALL_OF_FAME="Hall of fame" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_TITLE="Title" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_TITLE_DESC="Title which will be shows on top" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_DESCRIPTION="Description" diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index 9c46a5e..3a7fc16 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -340,6 +340,27 @@ function adminVerteiler(): void } } + $query = "SELECT *" + . "\n FROM #__sportsmanager_verbandsorgane AS t1" + . "\n ORDER BY reihenfolge, kategorie"; + $verbandsorgane = loadObjectList($db, $query); + $verbandsorgane_mailverteiler = array(); + foreach ($verbandsorgane as $verbandsorgan) { + $query = "SELECT vorname, nachname, email" + . "\n FROM #__sportsmanager_mitglied_von_verbandsorgan" + . "\n WHERE verbandsorgane_id = " . $verbandsorgan->verbandsorgane_id + . "\n ORDER BY reihenfolge, nachname, vorname, email"; + $rows = loadObjectList($db, $query); + $verbandsorgane_mailverteiler[$verbandsorgan->verbandsorgane_id] = ""; + $verbandsorgane_mailverteiler[$verbandsorgan->verbandsorgane_id . "p"] = ""; + foreach ($rows as $row) { + if (!empty($row->email)){ + $verbandsorgane_mailverteiler[$verbandsorgan->verbandsorgane_id] .= (!empty($verbandsorgane_mailverteiler[$verbandsorgan->verbandsorgane_id]) ? "; " : "") . $row->email; + $verbandsorgane_mailverteiler[$verbandsorgan->verbandsorgane_id . "p"] .= (!empty($verbandsorgane_mailverteiler[$verbandsorgan->verbandsorgane_id . "p"]) ? "; " : "") . "\"" . $row->vorname . " " . $row->nachname . "\" <" . $row->email . ">"; + } + } + } + $query = "SELECT t1.*, veranstalterbezeichnung" . "\n FROM #__sportsmanager_veranstaltung AS t1" . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" @@ -361,7 +382,7 @@ function adminVerteiler(): void } } - HTML_sportsmanager_admin::adminVerteiler($verteiler, $organisationen, $organisationen_mailverteiler, $veranstaltungen, $veranstaltungen_mailverteiler, $saisons, $filter_saison_id, benutzerZugriff("verteiler_aendern")); + HTML_sportsmanager_admin::adminVerteiler($verteiler, $organisationen, $organisationen_mailverteiler, $verbandsorgane, $verbandsorgane_mailverteiler, $veranstaltungen, $veranstaltungen_mailverteiler, $saisons, $filter_saison_id, benutzerZugriff("verteiler_aendern")); } function adminEditVerteiler(): void @@ -5393,6 +5414,7 @@ function adminKategorien(): void $kategorien[5] = array(); $kategorien[6] = array(); $kategorien[7] = array(); + $kategorien[8] = array(); foreach ($rows as $row) $kategorien[$row->typ][$row->nummer] = $row->bezeichnung; @@ -5422,13 +5444,14 @@ function adminKategorien(): void $kategorien[5] = array(); $kategorien[6] = array(); $kategorien[7] = array(); + $kategorien[8] = array(); - $anzahl = array(0,50,100,50,50,100,50,50); + $anzahl = array(0,50,100,50,50,100,50,50,100); foreach ($rows as $row) $kategorien[$row->typ][$row->nummer] = $row->bezeichnung; - for ($typ = 1; $typ <= 7; $typ++) { + for ($typ = 1; $typ <= 8; $typ++) { for ($nummer = 1; $nummer <= $anzahl[$typ]; $nummer++) { $bezeichnung = $db->escape($jInput->get('bezeichnung_' . $typ . '_' . $nummer, '', 'RAW')); if (empty($bezeichnung)) { @@ -7295,45 +7318,713 @@ function adminEditOrdnungsstrafe(): void $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); + + exportCSV($rows, "Ordnungsstrafen.csv"); die(); } +function adminVerbandsorgane(): void +{ + $db = getDatabase(); + + if (!benutzerZugriff("organisationen_aendern")) + keinZugriff(true); + + $query = "SELECT t1.*, COUNT(t2.verbandsorgane_id) AS anzahl" + . "\n FROM #__sportsmanager_verbandsorgane t1" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_verbandsorgan t2 ON t2.verbandsorgane_id = t1.verbandsorgane_id" + . "\n GROUP BY t1.verbandsorgane_id" + . "\n ORDER BY t1.reihenfolge;"; + $rows = loadObjectList($db, $query); + HTML_sportsmanager_admin::adminVerbandsorgane($rows); +} + +function adminEditVerbandsorgan(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("organisationen_aendern")) + keinZugriff(true); + + $id = $jInput->get('id', 0, 'INT'); + if ($id == 0) + $row = null; + else { + $query = "SELECT * FROM #__sportsmanager_verbandsorgane WHERE verbandsorgane_id = $id"; + $rows = loadObjectList($db, $query); + if (count($rows) < 1) die("Wrong id!"); + $row = $rows[0]; + } + + $query = "SELECT *" + . "\n FROM #__sportsmanager_veranstalter" + . "\n ORDER BY veranstalterbezeichnung"; + $veranstalter = loadObjectList($db, $query); + + $query = "SELECT nummer, bezeichnung FROM #__sportsmanager_kategorie WHERE typ = 7 ORDER BY nummer"; + $rows_kategorien = loadObjectList($db, $query); + $kategorien = array(); + foreach ($rows_kategorien as $kategorie) + $kategorien[$kategorie->nummer] = $kategorie->bezeichnung; + + HTML_sportsmanager_admin::adminEditVerbandsorgan($row,$veranstalter,$kategorien); +} + +#[NoReturn] function adminSaveVerbandsorgan(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("organisationen_aendern")) + keinZugriff(); + + if ($jInput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_verbandsorgane'); + } + + $id = $jInput->get('id', 0, 'INT'); + $verbandsorgan = $db->escape(trim($jInput->get('verbandsorgan', '', 'RAW'))); + $veranstalter_id = $jInput->get('veranstalter_id', 0, 'INT'); + $kategorie = $jInput->get('kategorie', 0, 'INT'); + $reihenfolge = $jInput->get('reihenfolge', 0, 'INT'); + $email = $db->escape(trim($jInput->get('email', '', 'RAW'))); + $beschreibung = $db->escape(trim($jInput->get('beschreibung', '', 'RAW'))); + + if (strlen($verbandsorgan) < 3) { + redirectSportsManagerURL('&task=admin_verbandsorgane',Text::_('COM_SPORTSMANAGER_INVALID_ASSOCIATION_BODY_NAME')); + } + + if ($id == 0) + $query = "INSERT INTO #__sportsmanager_verbandsorgane" + . "\n (verbandsorgan,veranstalter_id,kategorie,reihenfolge,email,beschreibung) VALUES" + . "\n ('$verbandsorgan'," . ($veranstalter_id != 0 ? "'$veranstalter_id'" : "NULL") . ",$kategorie,$reihenfolge,'$email','$beschreibung');"; + else { + $query = "UPDATE #__sportsmanager_verbandsorgane" + . "\n SET verbandsorgan = '$verbandsorgan'," + . "\n veranstalter_id = " . ($veranstalter_id != 0 ? "'$veranstalter_id'" : "NULL") . "," + . "\n kategorie = $kategorie," + . "\n reihenfolge = $reihenfolge," + . "\n email = '$email'," + . "\n beschreibung = '$beschreibung'" + . "\n WHERE verbandsorgane_id = $id"; + } + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_verbandsorgane'); +} + +#[NoReturn] function adminRemoveVerbandsorgan(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("organisationen_aendern")) + keinZugriff(true); + + $id = $jInput->get('id', 0, 'INT'); + + $query = "DELETE FROM #__sportsmanager_verbandsorgane WHERE verbandsorgane_id = $id;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + //Alle Mitglieder löschen + $query = "DELETE FROM #__sportsmanager_mitglied_von_verbandsorgan WHERE verbandsorgane_id = $id;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_verbandsorgane'); +} + +#[NoReturn] function adminExportVerbandsorgane(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("organisationen_aendern")) + keinZugriff(true); + + $query = "SELECT t1.verbandsorgan AS Verbandsorgan, t2.funktion As Funktion, t2.zusatzinfo As Zusatzinfo, t3.spielernr AS Passnummer," + . "\n t2.nachname AS Nachname, t2.vorname AS Vorname, t2.email AS 'E-Mail', t2.telefon AS Telefon, t2.mobil AS Mobil" + . "\n FROM #__sportsmanager_verbandsorgane t1" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_verbandsorgan t2 ON t2.verbandsorgane_id = t1.verbandsorgane_id" + . "\n LEFT JOIN #__sportsmanager_spieler t3 ON t3.spieler_id = t2.spieler_id" + . "\n ORDER BY t1.reihenfolge, t2.reihenfolge, t2.nachname, t2.vorname;"; + $rows = loadObjectList($db, $query); + + exportCSV($rows, "Verbandsorgane.csv"); + + die(); +} + +function adminVerbandsorganMitglieder(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("organisationen_aendern")) + keinZugriff(true); + + $id = $jInput->get('id', 0, 'INT'); + + $query = "SELECT * FROM #__sportsmanager_verbandsorgane WHERE verbandsorgane_id = $id"; + $verbandsorgane = loadObjectList($db, $query); + if (count($verbandsorgane) < 1) { + abortWithError("Wrong id!"); + } + $verbandsorgan = $verbandsorgane[0]; + + $query = "SELECT t2.*, t1.verbandsorgan" + . "\n FROM #__sportsmanager_verbandsorgane t1" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_verbandsorgan t2 ON t2.verbandsorgane_id = t1.verbandsorgane_id" + . "\n WHERE t2.verbandsorgane_id = $id" + . "\n ORDER BY t2.reihenfolge, t2.nachname, t2.vorname;"; + $rows = loadObjectList($db, $query); + + HTML_sportsmanager_admin::adminVerbandsorganMitglieder($rows,$verbandsorgan); +} + +function adminEditVerbandsorganMitglied(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("organisationen_aendern")) + keinZugriff(true); + + $id = $jInput->get('id', 0, 'INT'); + $verbandsorgane_id = $jInput->get('verbandsorgane_id', 0, 'INT'); + + if ($id == 0) + $row = null; + else { + $query = "SELECT * FROM #__sportsmanager_mitglied_von_verbandsorgan WHERE mitglied_von_verbandsorgan_id = $id"; + $rows = loadObjectList($db, $query); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $row = $rows[0]; + } + + $query = "SELECT * FROM #__sportsmanager_verbandsorgane WHERE verbandsorgane_id = $verbandsorgane_id"; + $rows = loadObjectList($db, $query); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $verbandsorgan = $rows[0]; + + $query = "SELECT spieler_id, CONCAT(nachname, ', ', vorname, ' (', spielernr, ')') AS spieler" + . "\n FROM #__sportsmanager_spieler" + . "\n ORDER BY nachname, vorname, spielernr"; + $spieler = loadObjectList($db, $query); + + HTML_sportsmanager_admin::adminEditVerbandsorganMitglied($row,$verbandsorgan,$spieler); +} + +#[NoReturn] function adminSaveVerbandsorganMitglied(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("organisationen_aendern")) + keinZugriff(); + + $id = $jInput->get('id', 0, 'INT'); + $verbandsorgane_id = $jInput->get('verbandsorgane_id', 0, 'INT'); + $spieler_id = $jInput->get('spieler_id', 0, 'INT'); + $nachname = $db->escape(trim($jInput->get('nachname', '', 'RAW'))); + $vorname = $db->escape(trim($jInput->get('vorname', '', 'RAW'))); + $funktion = $db->escape(trim($jInput->get('funktion', '', 'RAW'))); + $zusatzinfo = $db->escape(trim($jInput->get('zusatzinfo', '', 'RAW'))); + $email = $db->escape(trim($jInput->get('email', '', 'RAW'))); + $telefon = $db->escape(trim($jInput->get('telefon', '', 'RAW'))); + $mobil = $db->escape(trim($jInput->get('mobil', '', 'RAW'))); + $reihenfolge = $jInput->get('reihenfolge', 0, 'INT'); + $beschreibung = $db->escape(trim($jInput->get('beschreibung', '', 'RAW'))); + + if ($jInput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_verbandsorgan_mitglieder&id=' . $verbandsorgane_id); + } + + if ($spieler_id != 0){ + $query = "SELECT * FROM #__sportsmanager_spieler WHERE spieler_id = $spieler_id"; + $spieler = loadObjectList($db, $query); + if (!empty($spieler)) { + if (empty($nachname)) $nachname = $spieler[0]->nachname; + if (empty($vorname)) $vorname = $spieler[0]->vorname; + if (empty($telefon) && !empty($spieler[0]->telefon)) $telefon = $spieler[0]->telefon; + if (empty($mobil) && !empty($spieler[0]->mobil)) $mobil = $spieler[0]->mobil; + if (empty($email) && !empty($spieler[0]->email)) $email = $spieler[0]->email; + } + } + + if (empty($nachname)) { + redirectSportsManagerURL('&task=admin_verbandsorgan_mitglieder&id=' . $verbandsorgane_id,Text::_('COM_SPORTSMANAGER_NAME_NOT_COMPLETE')); + } + + if ($id == 0) + $query = "INSERT INTO #__sportsmanager_mitglied_von_verbandsorgan" + . "\n (verbandsorgane_id,spieler_id,reihenfolge,nachname,vorname,funktion,zusatzinfo,email,telefon,mobil) VALUES" + . "\n ($verbandsorgane_id," . ($spieler_id != 0 ? "'$spieler_id'" : "NULL") . ",$reihenfolge,'$nachname','$vorname','$funktion','$zusatzinfo','$email','$telefon','$mobil');"; + else { + $query = "UPDATE #__sportsmanager_mitglied_von_verbandsorgan" + . "\n SET verbandsorgane_id = '$verbandsorgane_id'," + . "\n spieler_id = " . ($spieler_id != 0 ? "'$spieler_id'" : "NULL") . "," + . "\n reihenfolge = $reihenfolge," + . "\n nachname = '$nachname'," + . "\n vorname = '$vorname'," + . "\n funktion = '$funktion'," + . "\n zusatzinfo = '$zusatzinfo'," + . "\n email = '$email'," + . "\n telefon = '$telefon'," + . "\n mobil = '$mobil'" + . "\n WHERE mitglied_von_verbandsorgan_id = $id"; + } + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_verbandsorgan_mitglieder&id=' . $verbandsorgane_id); +} + +#[NoReturn] function adminRemoveVerbandsorganMitglied(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("organisationen_aendern")) + keinZugriff(true); + + $id = $jInput->get('id', 0, 'INT'); + $verbandsorgane_id = $jInput->get('verbandsorgane_id', 0, 'INT'); + + $query = "DELETE FROM #__sportsmanager_mitglied_von_verbandsorgan WHERE mitglied_von_verbandsorgan_id = $id;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_verbandsorgan_mitglieder&id=' . $verbandsorgane_id); +} + +function adminHalloffame(): void +{ + $db = getDatabase(); + + if (!benutzerZugriff("organisationen_aendern")) + keinZugriff(true); + + $query = "SELECT t1.*, COUNT(DISTINCT t2.jahr) AS anzahl," + . "\n IF (COUNT(DISTINCT t2.jahr) > 0, CONCAT(min(t2.jahr), ' - ', max(t2.jahr)), " . $db->quote(Text::_('COM_SPORTSMANAGER_NO_ENTRY')) . ") AS zeitspanne" + . "\n FROM #__sportsmanager_halloffame t1" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_halloffame t2 ON t2.halloffame_id = t1.halloffame_id" + . "\n GROUP BY t1.halloffame_id" + . "\n ORDER BY t1.reihenfolge;"; + $rows = loadObjectList($db, $query); + + HTML_sportsmanager_admin::adminHalloffame($rows); +} + +function adminEditHalloffame(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("organisationen_aendern")) + keinZugriff(true); + + $id = $jInput->get('id', 0, 'INT'); + $anzahl_eintraege = 0; + + if ($id == 0) + $row = null; + else { + $query = "SELECT * FROM #__sportsmanager_halloffame WHERE halloffame_id = $id"; + $rows = loadObjectList($db, $query); + if (count($rows) < 1) die("Wrong id!"); + $row = $rows[0]; + + $query = "SELECT * FROM #__sportsmanager_mitglied_von_halloffame WHERE halloffame_id = $id"; + $rows = loadObjectList($db, $query); + $anzahl_eintraege = count($rows); + } + + $query = "SELECT *" + . "\n FROM #__sportsmanager_veranstalter" + . "\n ORDER BY veranstalterbezeichnung"; + $veranstalter = loadObjectList($db, $query); + + $query = "SELECT nummer, bezeichnung FROM #__sportsmanager_kategorie WHERE typ = 8 ORDER BY nummer"; + $rows_kategorien = loadObjectList($db, $query); + $kategorien = array(); + foreach ($rows_kategorien as $kategorie) + $kategorien[$kategorie->nummer] = $kategorie->bezeichnung; + + $spielform_array = [1 => Text::_('COM_SPORTSMANAGER_TEAMS'), + 2 => Text::_('COM_SPORTSMANAGER_DOUBLES'), + 3 => Text::_('COM_SPORTSMANAGER_SINGLES')]; + + if ($anzahl_eintraege == 0) + $spielformen = $spielform_array; + else + $spielformen[$row->spielform] = $spielform_array[$row->spielform]; + + HTML_sportsmanager_admin::adminEditHalloffame($row,$veranstalter,$kategorien,$spielformen); +} + +#[NoReturn] function adminSaveHalloffame(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("organisationen_aendern")) + keinZugriff(); + + if ($jInput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_halloffame'); + } + + $id = $jInput->get('id', 0, 'INT'); + $halloffame = $db->escape(trim($jInput->get('halloffame', '', 'RAW'))); + $veranstalter_id = $jInput->get('veranstalter_id', 0, 'INT'); + $kategorie = $jInput->get('kategorie', 0, 'INT'); + $spielform = $jInput->get('spielform', 0, 'INT'); + $reihenfolge = $jInput->get('reihenfolge', 0, 'INT'); + + if (strlen($halloffame) < 3) { + redirectSportsManagerURL('&task=admin_halloffame',Text::_('COM_SPORTSMANAGER_INVALID_HALL_OF_FAME_NAME')); + } + + if ($id == 0) + $query = "INSERT INTO #__sportsmanager_halloffame" + . "\n (halloffame,veranstalter_id,kategorie,spielform,reihenfolge) VALUES" + . "\n ('$halloffame'," . ($veranstalter_id != 0 ? "'$veranstalter_id'" : "NULL") . ",$kategorie,$spielform,$reihenfolge);"; + else { + $query = "UPDATE #__sportsmanager_halloffame" + . "\n SET halloffame = '$halloffame'," + . "\n veranstalter_id = " . ($veranstalter_id != 0 ? "'$veranstalter_id'" : "NULL") . "," + . "\n kategorie = $kategorie," + . "\n spielform = $spielform," + . "\n reihenfolge = $reihenfolge" + . "\n WHERE halloffame_id = $id"; + } + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_halloffame'); +} + +#[NoReturn] function adminRemoveHalloffame(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("organisationen_aendern")) + keinZugriff(true); + + $id = $jInput->get('id', 0, 'INT'); + + $query = "DELETE FROM #__sportsmanager_halloffame WHERE halloffame_id = $id;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + //Alle Mitglieder löschen + $query = "DELETE FROM #__sportsmanager_mitglied_von_halloffame WHERE halloffame_id = $id;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_halloffame'); +} + +function adminHalloffameMitglieder(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("organisationen_aendern")) + keinZugriff(true); + + $id = $jInput->get('id', 0, 'INT'); + $mitglieder = null; + + $query = "SELECT * FROM #__sportsmanager_halloffame WHERE halloffame_id = $id"; + $rows = loadObjectList($db, $query); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $halloffame = $rows[0]; + $halloffame->platz2_zeigen = 0; + $halloffame->platz3_zeigen = 0; + + $query = "SELECT t2.*, t1.halloffame" + . "\n FROM #__sportsmanager_halloffame t1" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_halloffame t2 ON t2.halloffame_id = t1.halloffame_id" + . "\n WHERE t2.halloffame_id = $id" + . "\n ORDER BY t2.jahr DESC, platz ASC;"; + $rows = loadObjectList($db, $query); + + if (count($rows) > 0){ + $mitglieder = []; + if ($halloffame->spielform == 1){ + foreach ($rows as $row) { + $index_vereinid = "verein_id_" . $row->platz; + $index_team = "teamname_" . $row->platz; + if (!isset($mitglieder[$row->jahr])) { + $mitglieder[$row->jahr] = new stdClass(); + } + $mitglieder[$row->jahr]->jahr = $row->jahr; + $mitglieder[$row->jahr]->$index_vereinid = $row->verein_id; + $mitglieder[$row->jahr]->$index_team = $row->teamname; + if ($row->platz == 2 && !empty($row->teamname)) + $halloffame->platz2_zeigen = 1; + if ($row->platz == 3 && !empty($row->teamname)) + $halloffame->platz3_zeigen = 1; + } + } + if ($halloffame->spielform == 2 || $halloffame->spielform == 3){ + foreach ($rows as $row) { + $index_spieler1id = "spieler1_id_" . $row->platz; + $index_spieler1 = "spieler1_" . $row->platz; + $index_spieler2id = "spieler2_id_" . $row->platz; + $index_spieler2 = "spieler2_" . $row->platz; + + if (!isset($mitglieder[$row->jahr])) { + $mitglieder[$row->jahr] = new stdClass(); + } + $mitglieder[$row->jahr]->jahr = $row->jahr; + $mitglieder[$row->jahr]->$index_spieler1id = $row->spieler1_id; + $mitglieder[$row->jahr]->$index_spieler1 = $row->spieler1; + $mitglieder[$row->jahr]->$index_spieler2id = $row->spieler2_id; + $mitglieder[$row->jahr]->$index_spieler2 = $row->spieler2; + if ($row->platz == 2 && (!empty($row->spieler1) || !empty($row->spieler2))) + $halloffame->platz2_zeigen = 1; + if ($row->platz == 3 && (!empty($row->spieler1) || !empty($row->spieler2))) + $halloffame->platz3_zeigen = 1; + } + } + } + + HTML_sportsmanager_admin::adminHalloffameMitglieder($mitglieder,$halloffame); +} + +function adminEditHalloffameMitglied(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("organisationen_aendern")) + keinZugriff(true); + + $halloffame_id = $jInput->get('halloffame_id', 0, 'INT'); + $jahr = $jInput->get('jahr', 0, 'INT'); + $mitglieder = null; + + $query = "SELECT * FROM #__sportsmanager_halloffame WHERE halloffame_id = $halloffame_id"; + $rows = loadObjectList($db, $query); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $halloffame = $rows[0]; + + $query = "SELECT verein_id, vereinsname As verein" + . "\n FROM #__sportsmanager_verein" + . "\n ORDER BY vereinsname"; + $vereine = loadObjectList($db, $query); + + $query = "SELECT spieler_id, CONCAT(nachname, ', ', vorname, ' (', spielernr, ')') AS spieler" + . "\n FROM #__sportsmanager_spieler" + . "\n ORDER BY nachname, vorname, spielernr"; + $spieler = loadObjectList($db, $query); + + $query = "SELECT t2.*, t1.halloffame" + . "\n FROM #__sportsmanager_halloffame t1" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_halloffame t2 ON t2.halloffame_id = t1.halloffame_id" + . "\n WHERE t2.halloffame_id = $halloffame_id" + . "\n AND t2.jahr = $jahr" + . "\n ORDER BY platz ASC;"; + $rows = loadObjectList($db, $query); + + if (count($rows) > 0){ + if ($halloffame->spielform == 1){ + $mitglieder = new stdClass(); + foreach ($rows as $row) { + $index_vereinid = "verein_id_" . $row->platz; + $index_team = "teamname_" . $row->platz; + $mitglieder->jahr = $row->jahr; + $mitglieder->$index_vereinid = $row->verein_id; + $mitglieder->$index_team = $row->teamname; + } + } + if ($halloffame->spielform == 2 || $halloffame->spielform == 3){ + $mitglieder = new stdClass(); + foreach ($rows as $row) { + $index_spieler1id = "spieler1_id_" . $row->platz; + $index_spieler1 = "spieler1_" . $row->platz; + $index_spieler2id = "spieler2_id_" . $row->platz; + $index_spieler2 = "spieler2_" . $row->platz; + $mitglieder->jahr = $row->jahr; + $mitglieder->$index_spieler1id = $row->spieler1_id; + $mitglieder->$index_spieler1 = $row->spieler1; + $mitglieder->$index_spieler2id = $row->spieler2_id; + $mitglieder->$index_spieler2 = $row->spieler2; + } + } + } + + if ($jahr != 0){ + $jahre = array((int) $jahr); + } else { + // Generate list of years in PHP instead of using WITH RECURSIVE (for MySQL < 8 compatibility) + $startYear = 1965; + $currentYear = (int) date('Y'); + $jahre = array(); + for ($y = $startYear; $y <= $currentYear; $y++) { + $jahre[] = $y; + } + + // Load years already used for this hall of fame + $query = "SELECT jahr FROM #__sportsmanager_mitglied_von_halloffame WHERE halloffame_id = " . (int) $halloffame_id; + $db->setQuery($query); + $usedYears = $db->loadColumn(); + if (!is_array($usedYears)) { + $usedYears = array(); + } + $usedYears = array_map('intval', $usedYears); + + // Remove already used years and sort remaining years descending + $jahre = array_values(array_diff($jahre, $usedYears)); + rsort($jahre, SORT_NUMERIC); + } + + HTML_sportsmanager_admin::adminEditHalloffameMitglied($mitglieder,$halloffame,$vereine,$spieler,$jahre); +} + +#[NoReturn] function adminSaveHalloffameMitglied(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("organisationen_aendern")) + keinZugriff(); + + $halloffame_id = $jInput->get('halloffame_id', 0, 'INT'); + $spielform = $jInput->get('spielform', 0, 'INT'); + $jahr = $jInput->get('jahr', 0, 'INT'); + + if ($jInput->get('cancel', false, 'BOOL')) + redirectSportsManagerURL('&task=admin_halloffame_mitglieder&id=' . $halloffame_id); + + if ($spielform == 1){ + for ($p = 1; $p <= 3; $p++){ + $verein_id[$p] = $jInput->get('verein_id_' . $p, 0, 'INT'); + $teamname[$p] = $db->escape(trim($jInput->get('teamname_' . $p, '', 'RAW'))); + if (empty($teamname[$p]) && !empty($verein_id[$p])){ + $query = "SELECT vereinsname FROM #__sportsmanager_verein WHERE verein_id = '" . $verein_id[$p] . "';"; + $verein = loadObjectList($db, $query); + $teamname[$p] = $verein[0]->vereinsname; + } + if (!empty($teamname[$p])){ + $query = "INSERT INTO #__sportsmanager_mitglied_von_halloffame" + . "\n (halloffame_id,jahr,platz,verein_id,teamname) VALUES" + . "\n ($halloffame_id,$jahr,$p," . (($verein_id[$p] != 0) ? $verein_id[$p] : 'NULL') . ",'" . $teamname[$p] . "')" + . "\n ON DUPLICATE KEY UPDATE verein_id = " . (($verein_id[$p] != 0) ? $verein_id[$p] : 'NULL') . "," + . "\n teamname = '" . $teamname[$p] . "';"; + + } else { + $query = "DELETE FROM #__sportsmanager_mitglied_von_halloffame" + . "\n WHERE halloffame_id = $halloffame_id" + . "\n AND jahr = $jahr" + . "\n AND platz = $p"; + } + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + } + } + + if ($spielform == 2 || $spielform == 3){ + for ($p = 1; $p <= 3; $p++){ + $spieler1_id[$p] = $jInput->get('spieler1_id_' . $p, 0, 'INT'); + $spieler2_id[$p] = $jInput->get('spieler2_id_' . $p, 0, 'INT'); + $spieler1[$p] = $db->escape(trim($jInput->get('spieler1_' . $p, '', 'RAW'))); + $spieler2[$p] = $db->escape(trim($jInput->get('spieler2_' . $p, '', 'RAW'))); + if (!empty($spieler1_id[$p])){ + $query = "SELECT CONCAT(nachname,', ', vorname) AS name" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE spieler_id = '" . $spieler1_id[$p] . "';"; + $spieler = loadObjectList($db, $query); + $spieler1[$p] = $spieler[0]->name; + } + if (!empty($spieler2_id[$p])){ + $query = "SELECT CONCAT(nachname,', ', vorname) AS name" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE spieler_id = '" . $spieler2_id[$p] . "';"; + $spieler = loadObjectList($db, $query); + $spieler2[$p] = $spieler[0]->name; + } + if (!empty($spieler1[$p])){ + $query = "INSERT INTO #__sportsmanager_mitglied_von_halloffame" + . "\n (halloffame_id,jahr,platz,spieler1_id,spieler1,spieler2_id,spieler2) VALUES" + . "\n ($halloffame_id,$jahr,$p," . (($spieler1_id[$p] != 0) ? $spieler1_id[$p] : 'NULL') . ",'" . $spieler1[$p] . "'," . (($spieler2_id[$p] != 0) ? $spieler2_id[$p] : 'NULL') . ",'" . $spieler2[$p] . "')" + . "\n ON DUPLICATE KEY UPDATE" + . "\n spieler1_id = " . (($spieler1_id[$p] != 0) ? $spieler1_id[$p] : 'NULL') . "," + . "\n spieler1 = '" . $spieler1[$p] . "'," + . "\n spieler2_id = " . (($spieler2_id[$p] != 0) ? $spieler2_id[$p] : 'NULL') . "," + . "\n spieler2 = '" . $spieler2[$p] . "';"; + } else { + $query = "DELETE FROM #__sportsmanager_mitglied_von_halloffame" + . "\n WHERE halloffame_id = $halloffame_id" + . "\n AND jahr = $jahr" + . "\n AND platz = $p"; + } + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + } + } + + redirectSportsManagerURL('&task=admin_halloffame_mitglieder&id=' . $halloffame_id); +} + +#[NoReturn] function adminRemoveHalloffameMitglied(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("organisationen_aendern")) + keinZugriff(true); + + $halloffame_id = $jInput->get('halloffame_id', 0, 'INT'); + $jahr = $jInput->get('jahr', 0, 'INT'); + + $query = "DELETE FROM #__sportsmanager_mitglied_von_halloffame" + . "\n WHERE halloffame_id = $halloffame_id" + . "\n AND jahr = $jahr;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_halloffame_mitglieder&id=' . $halloffame_id); +} + function adminRegelwerke(): void { $db = getDatabase(); @@ -7687,6 +8378,7 @@ function adminEditVeranstaltung(): void $unterteilung = $jInput->get('unterteilung', 0, 'INT'); $spieltag_titel_zeigen = $jInput->get('spieltag_titel_zeigen', 0, 'INT'); $elo_wertung = $jInput->get('elo_wertung', 0, 'INT'); + $explizite_strafen = $jInput->get('explizite_strafen', 0, 'INT'); $logo_url = $db->escape(trim($jInput->get('logo_url', '', 'RAW'))); $ticker_logo_url = $db->escape(trim($jInput->get('ticker_logo_url', '', 'RAW'))); $status = $jInput->get('status', 0, 'INT'); @@ -7704,8 +8396,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" : "") . ", 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');"; + $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, explizite_strafen, 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', '$explizite_strafen', '$logo_url', '$ticker_logo_url', '$status', '$reihenfolge', '$kategorie');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); @@ -7733,6 +8425,7 @@ function adminEditVeranstaltung(): void . "\n unterteilung = '$unterteilung'," . "\n spieltag_titel_zeigen = '$spieltag_titel_zeigen'," . "\n elo_wertung = '$elo_wertung'," + . "\n explizite_strafen = '$explizite_strafen'," . "\n logo_url = '$logo_url'," . "\n ticker_logo_url = '$ticker_logo_url'," . "\n status = '$status'," @@ -8213,6 +8906,61 @@ function adminEditMannschaft(): void redirectSportsManagerURL('&task=admin_teams&veranstaltungid=' . $veranstaltungId); } +function veranstaltungid_for_teamid( $db, $teamid ) +{ + $query = "SELECT veranstaltung_id FROM #__sportsmanager_team WHERE team_id = $teamid"; + $veranstaltungid = loadResult($db, $query); + if ($veranstaltungid == 0) { die("invalid team id"); } + return $veranstaltungid; +} + +function adminMannschaftStrafen() +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + $teamid = $jInput->get('teamid', 0, 'INT'); + if ($teamid == 0) die("Missing id!"); + $veranstaltungid = veranstaltungid_for_teamid($db, $teamid); + + $query = "SELECT teamname FROM #__sportsmanager_team WHERE team_id = $teamid"; + $teamname = loadResult($db, $query); + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungid)) + keinZugriff(); + + $query = "SELECT strafen.zeitpunkt, strafen.strafe, strafen.beschreibung, users.name AS moderator_name" + . "\n FROM #__sportsmanager_team_strafen as strafen" + . "\n LEFT JOIN #__users as users ON users.id = strafen.moderator_user_id" + . "\n WHERE strafen.team_id = $teamid"; + $rows = loadObjectList($db, $query); + + HTML_sportsmanager_admin::adminMannschaftStrafen($teamid, $veranstaltungid, $teamname, $rows); +} + +function adminMannschaftAddStrafe() +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + $teamid = $jInput->get('teamid', 0, 'INT'); + if ($teamid == 0) die("Missing id!"); + $veranstaltungid = veranstaltungid_for_teamid($db, $teamid); + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungid)) + keinZugriff(); + + if ($jInput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL("&task=admin_team_edit&veranstaltungid=$veranstaltungid&id=$teamid"); + } else if ($jInput->get('add', false, 'BOOL')) { + $user_id = Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id; + $strafe = $jInput->get('strafe', 0, 'FLOAT'); + $beschreibung = $jInput->get('beschreibung', 0, 'RAW'); + neueTeamStrafe($teamid, $veranstaltungid, $strafe, $user_id, $beschreibung); + redirectSportsManagerURL('&task=admin_team_strafen&teamid=' . $teamid); + } else { + redirectSportsManagerURL('&task=admin_teams&veranstaltungid=' . $veranstaltungid); + } +} + function mannschaftsgruppe_hinzufuegen($quelle_team_id, $ziel_veranstaltung_id) { $db = getDatabase(); @@ -12112,30 +12860,42 @@ function adminBegegnungenExportForm(): void $Bestaetigt = []; $Bestaetigt = []; $Moderator = []; + $value->vorgeschlagen_um = ""; + $value->vorgeschlagen_von = ""; + $value->bestaetigt_um = ""; + $value->bestaetigt_von = ""; + $value->moderator_um = ""; + $value->moderator_von = ""; // Endergebnis vorgeschlagen $query = " - SELECT t1.eingetragen AS gespeichert_um, t2.name AS gespeichert_von + SELECT t1.eingetragen AS gespeichert_um, + t2.name AS gespeichert_von_user, + t3.teamname AS gespeichert_von_team FROM #__sportsmanager_begegnung_historie AS t1 LEFT JOIN #__users AS t2 ON t1.user_id = t2.id + LEFT JOIN #__sportsmanager_team AS t3 ON t1.team_id = t3.team_id WHERE begegnung_id = " . $value->ID . " AND aktion IN (6) ORDER BY eingetragen DESC LIMIT 1; "; - $Bestaetigt = loadObjectList($db, $query); - if (!empty($Bestaetigt)) { - $value->vorgeschlagen_um = $Bestaetigt[0]->gespeichert_um; - $value->vorgeschlagen_von = $Bestaetigt[0]->gespeichert_von; - } else { - $value->vorgeschlagen_um = $Bestaetigt[0]->gespeichert_um; - $value->vorgeschlagen_von = $Bestaetigt[0]->gespeichert_von; + $Vorgeschlagen = loadObjectList($db, $query); + if (!empty($Vorgeschlagen)) { + $value->vorgeschlagen_um = $Vorgeschlagen[0]->gespeichert_um; + if (!empty($Vorgeschlagen[0]->gespeichert_von_user)) + $value->vorgeschlagen_von = $Vorgeschlagen[0]->gespeichert_von_user; + if (!empty($Vorgeschlagen[0]->gespeichert_von_team)) + $value->vorgeschlagen_von = $Vorgeschlagen[0]->gespeichert_von_team; } // Endergebnis bestätigen Gegner $query = " - SELECT t1.eingetragen AS gespeichert_um, t2.name AS gespeichert_von + SELECT t1.eingetragen AS gespeichert_um, + t2.name AS gespeichert_von_user, + t3.teamname AS gespeichert_von_team FROM #__sportsmanager_begegnung_historie AS t1 LEFT JOIN #__users AS t2 ON t1.user_id = t2.id + LEFT JOIN #__sportsmanager_team AS t3 ON t1.team_id = t3.team_id WHERE begegnung_id = " . $value->ID . " AND aktion IN (7) ORDER BY eingetragen DESC LIMIT 1; @@ -12143,17 +12903,20 @@ function adminBegegnungenExportForm(): void $Bestaetigt = loadObjectList($db, $query); if (!empty($Bestaetigt)) { $value->bestaetigt_um = $Bestaetigt[0]->gespeichert_um; - $value->bestaetigt_von = $Bestaetigt[0]->gespeichert_von; - } else { - $value->bestaetigt_um = $Bestaetigt[0]->gespeichert_um; - $value->bestaetigt_von = $Bestaetigt[0]->gespeichert_von; + if (!empty($Bestaetigt[0]->gespeichert_von_user)) + $value->bestaetigt_von = $Bestaetigt[0]->gespeichert_von_user; + if (!empty($Bestaetigt[0]->gespeichert_von_team)) + $value->bestaetigt_von = $Bestaetigt[0]->gespeichert_von_team; } - + // Endergebnis bestätigen Moderator $query = " - SELECT t1.eingetragen AS gespeichert_um, t2.name AS gespeichert_von + SELECT t1.eingetragen AS gespeichert_um, + t2.name AS gespeichert_von_user, + t3.teamname AS gespeichert_von_team FROM #__sportsmanager_begegnung_historie AS t1 LEFT JOIN #__users AS t2 ON t1.user_id = t2.id + LEFT JOIN #__sportsmanager_team AS t3 ON t1.team_id = t3.team_id WHERE begegnung_id = " . $value->ID . " AND aktion IN (8) ORDER BY eingetragen DESC LIMIT 1; @@ -12161,10 +12924,10 @@ function adminBegegnungenExportForm(): void $Moderator = loadObjectList($db, $query); if (!empty($Moderator)) { $value->moderator_um = $Moderator[0]->gespeichert_um; - $value->moderator_von = $Moderator[0]->gespeichert_von; - } else { - $value->moderator_um = $Moderator[0]->gespeichert_um; - $value->moderator_von = $Moderator[0]->gespeichert_von; + if (!empty($Moderator[0]->gespeichert_von_user)) + $value->moderator_von = $Moderator[0]->gespeichert_von_user; + if (!empty($Moderator[0]->gespeichert_von_team)) + $value->moderator_von = $Moderator[0]->gespeichert_von_team; } // Spielbericht diff --git a/src/structure/components/com_sportsmanager/database/update.php b/src/structure/components/com_sportsmanager/database/update.php index 0127c0a..e965805 100644 --- a/src/structure/components/com_sportsmanager/database/update.php +++ b/src/structure/components/com_sportsmanager/database/update.php @@ -5567,7 +5567,127 @@ function updateDatabase(): void die($db->stderr(true)); } } - + + if ($datenbank_version < 117) { + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_team_strafen` (" + . "\n `team_strafen_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `zeitpunkt` datetime NOT NULL," + . "\n `moderator_user_id` int(11) DEFAULT NULL," + . "\n `team_id` int(11) NOT NULL DEFAULT '0'," + . "\n `strafe` float(6,2) NOT NULL DEFAULT '0'," + . "\n `beschreibung` text NOT NULL," + . "\n PRIMARY KEY (`team_strafen_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$db->execute()) { die($db->stderr(true)); } + + $query = "ALTER TABLE #__sportsmanager_veranstaltung" + . "\n ADD IF NOT EXISTS explizite_strafen tinyint(4) DEFAULT '0' AFTER elo_wertung"; + $db->setQuery($query); + if (!$db->execute()) { die($db->stderr(true)); } + + $query = "UPDATE #__sportsmanager_einstellungen SET wert = '117' WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$db->execute()) { die($db->stderr(true)); } + } + + if ($datenbank_version < 118) { + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_verbandsorgane` (" + . "\n `verbandsorgane_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `veranstalter_id` int(11) DEFAULT NULL," + . "\n `verbandsorgan` varchar(32) DEFAULT NULL," + . "\n `kategorie` int(4) DEFAULT NULL," + . "\n `reihenfolge` int(4) DEFAULT NULL," + . "\n `email` varchar(64) DEFAULT NULL," + . "\n `beschreibung` text NOT NULL," + . "\n PRIMARY KEY (`verbandsorgane_id`)," + . "\n KEY (`veranstalter_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_mitglied_von_verbandsorgan` (" + . "\n `mitglied_von_verbandsorgan_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `verbandsorgane_id` int(11) DEFAULT NULL," + . "\n `funktion` varchar(32) DEFAULT NULL," + . "\n `zusatzinfo` varchar(64) DEFAULT NULL," + . "\n `spieler_id` int(11) DEFAULT NULL," + . "\n `nachname` varchar(32) DEFAULT NULL," + . "\n `vorname` varchar(32) DEFAULT NULL," + . "\n `email` varchar(64) DEFAULT NULL," + . "\n `telefon` varchar(32) DEFAULT NULL," + . "\n `mobil` varchar(32) DEFAULT NULL," + . "\n `reihenfolge` int(11) DEFAULT NULL," + . "\n PRIMARY KEY (`mitglied_von_verbandsorgan_id`)," + . "\n KEY (`verbandsorgane_id`)," + . "\n KEY (`spieler_id`)" + . "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '118'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 119) { + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_halloffame` (" + . "\n `halloffame_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `veranstalter_id` int(11) DEFAULT NULL," + . "\n `halloffame` varchar(64) DEFAULT NULL," + . "\n `kategorie` int(4) DEFAULT NULL," + . "\n `spielform` int(11) DEFAULT NULL," + . "\n `reihenfolge` int(4) DEFAULT NULL," + . "\n PRIMARY KEY (`halloffame_id`)," + . "\n KEY `veranstalter_id` (`veranstalter_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_mitglied_von_halloffame` (" + . "\n `mitglied_halloffame_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `halloffame_id` int(11) NOT NULL," + . "\n `jahr` int(4) DEFAULT NULL," + . "\n `platz` int(11) DEFAULT NULL," + . "\n `verein_id` int(11) DEFAULT NULL," + . "\n `teamname` varchar(64) DEFAULT NULL," + . "\n `spieler1_id` int(11) DEFAULT NULL," + . "\n `spieler1` varchar(64) DEFAULT NULL," + . "\n `spieler2_id` int(11) DEFAULT NULL," + . "\n `spieler2` varchar(64) DEFAULT NULL," + . "\n PRIMARY KEY (`mitglied_halloffame_id`)," + . "\n UNIQUE KEY `halloffame_jahr_platz` (`halloffame_id`,`jahr`,`platz`)," + . "\n KEY `halloffame_id` (`halloffame_id`)," + . "\n KEY `verein_id` (`verein_id`)," + . "\n KEY `spieler1_id` (`spieler1_id`)," + . "\n KEY `spieler2_id` (`spieler2_id`)" + . "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '119'" + . "\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 367e16a..1e2f20f 100644 --- a/src/structure/components/com_sportsmanager/sportsmanager.php +++ b/src/structure/components/com_sportsmanager/sportsmanager.php @@ -371,6 +371,57 @@ if ($task == "spielerbild") { case 'admin_joomla_mail_senden': sendJoomlaMail(); break; + case 'admin_verbandsorgane': + adminVerbandsorgane(); + break; + case 'admin_verbandsorgan_edit': + adminEditVerbandsorgan(); + break; + case 'admin_verbandsorgan_save': + adminSaveVerbandsorgan(); + break; + case 'admin_verbandsorgan_remove': + adminRemoveVerbandsorgan(); + break; + case 'admin_verbandsorgane_export': + adminExportVerbandsorgane(); + break; + case 'admin_verbandsorgan_mitglieder': + adminVerbandsorganMitglieder(); + break; + case 'admin_verbandsorgan_mitglied_edit': + adminEditVerbandsorganMitglied(); + break; + case 'admin_verbandsorgan_mitglied_save': + adminSaveVerbandsorganMitglied(); + break; + case 'admin_verbandsorgan_mitglied_remove': + adminRemoveVerbandsorganMitglied(); + break; + case 'admin_halloffame': + adminHalloffame(); + break; + case 'admin_halloffame_edit': + adminEditHalloffame(); + break; + case 'admin_halloffame_save': + adminSaveHalloffame(); + break; + case 'admin_halloffame_remove': + adminRemoveHalloffame(); + break; + case 'admin_halloffame_mitglieder': + adminHalloffameMitglieder(); + break; + case 'admin_halloffame_mitglied_edit': + adminEditHalloffameMitglied(); + break; + case 'admin_halloffame_mitglied_save': + adminSaveHalloffameMitglied(); + break; + case 'admin_halloffame_mitglied_remove': + adminRemoveHalloffameMitglied(); + break; case 'admin_regelwerke': adminRegelwerke(); break; @@ -461,6 +512,12 @@ if ($task == "spielerbild") { case 'admin_team_edit': adminEditMannschaft(); break; + case 'admin_team_strafen': + adminMannschaftStrafen(); + break; + case 'admin_team_add_strafe': + adminMannschaftAddStrafe(); + break; case 'admin_team_save': adminSaveMannschaft(); break; @@ -1061,6 +1118,24 @@ if ($task == "spielerbild") { } } else if ($content == 'spielverlegungen') { spielverlegungen(); +} else if ($content == 'verbandsorgane') { + switch ($task) { + case 'verbandsorgane_details': + verbandsorganeDetails(); + break; + default: + verbandsorgane(); + break; + } +} else if ($content == 'hall_of_fame') { + switch ($task) { + case 'hall_of_fame_details': + halloffameDetails(); + break; + default: + halloffame(); + break; + } } else if ($content == 'login') { userAuth(); } else if ($content == 'login_refresh') { @@ -4218,6 +4293,195 @@ function spielverlegungen(): void } } +function verbandsorgane(): void +{ + $db = getDatabase(); + global $params; + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + $query = "SELECT t1.*, COUNT(t2.verbandsorgane_id) AS anzahl, t3.veranstalterbezeichnung AS organisation" + . "\n FROM #__sportsmanager_verbandsorgane t1" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_verbandsorgan t2 ON t2.verbandsorgane_id = t1.verbandsorgane_id" + . "\n LEFT JOIN #__sportsmanager_veranstalter t3 ON t3.veranstalter_id = t1.veranstalter_id" + . "\n GROUP BY t1.verbandsorgane_id" + . kategorieFilter("HAVING t1.kategorie IN") + . "\n ORDER BY t1.reihenfolge;"; + $verbandsorgane = loadObjectList($db, $query); + + $query = "SELECT COUNT(veranstalter_id) AS anzahl" + . "\n FROM #__sportsmanager_verbandsorgane" + . "\n GROUP BY veranstalter_id" + . kategorieFilter("WHERE kategorie IN"); + $organisationen = loadObjectList($db, $query); + if (count($organisationen) > 1) + $organisation_zeigen = true; + else + $organisation_zeigen = false; + + if (count($verbandsorgane) == 1){ + verbandsorganeDetails($verbandsorgane[0]->verbandsorgane_id); + } else { + if (isJson()) { + echo json_encode($verbandsorgane); + } else { + HTML_sportsmanager::verbandsorgane($params->get('titel'), $params->get('beschreibung'), $verbandsorgane, $organisation_zeigen); + } + } +} + +function verbandsorganeDetails($uebergabe_id = 0): void +{ + $db = getDatabase(); + $app = Factory::getContainer()->get(SiteApplication::class); + $jInput = $app->input; + + global $params; + + + $user_id = isExternalDatabase() ? 0 : (isJson() ? getUserID() : $app->getIdentity()->id); + if ($user_id > 0) + $erweiterte_anzeige = true; + else + $erweiterte_anzeige = false; + + if ($uebergabe_id == 0) + $id = $jInput->get('id', 0, 'INT'); + else + $id = $uebergabe_id; + + $query = "SELECT * FROM #__sportsmanager_verbandsorgane WHERE verbandsorgane_id = $id"; + $rows = loadObjectList($db, $query); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $verbandsorgan = $rows[0]; + + $query = "SELECT * FROM #__sportsmanager_mitglied_von_verbandsorgan" + . "\n WHERE verbandsorgane_id = $id" + . "\n ORDER BY reihenfolge, nachname, vorname"; + $mitglieder = loadObjectList($db, $query); + + $query = "SELECT zusatzinfo FROM #__sportsmanager_mitglied_von_verbandsorgan" + . "\n WHERE verbandsorgane_id = $id" + . "\n AND zusatzinfo IS NOT NULL AND TRIM(zusatzinfo) <> ''" + . "\n ORDER BY reihenfolge, nachname, vorname"; + $zusatzinfos = loadObjectList($db, $query); + if (count($zusatzinfos) > 0) + $zusatzinfos_vorhanden = true; + else + $zusatzinfos_vorhanden = false; + + if (isJson()) { + echo json_encode($mitglieder); + } else { + HTML_sportsmanager::verbandsorganeDetails($params->get('titel'), $params->get('beschreibung'), $verbandsorgan, $mitglieder, $erweiterte_anzeige, $zusatzinfos_vorhanden); + } +} + +function halloffame(): void +{ + $db = getDatabase(); + global $params; + + $query = "SELECT t1.*, COUNT(DISTINCT t2.jahr) AS anzahl," + . "\n IF (COUNT(DISTINCT t2.jahr) > 0, CONCAT(min(t2.jahr), ' - ', max(t2.jahr)), '" . Text::_('COM_SPORTSMANAGER_NO_ENTRY') . "') AS zeitspanne" + . "\n FROM #__sportsmanager_halloffame t1" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_halloffame t2 ON t2.halloffame_id = t1.halloffame_id" + . "\n GROUP BY t1.halloffame_id" + . kategorieFilter("HAVING t1.kategorie IN") + . "\n ORDER BY t1.reihenfolge;"; + $halloffame = loadObjectList($db, $query); + + if (count($halloffame) == 1){ + halloffameDetails($halloffame[0]->halloffame_id); + } else { + if (isJson()) { + echo json_encode($halloffame); + } else { + HTML_sportsmanager::halloffame($params->get('titel'), $params->get('beschreibung'), $halloffame); + } + } +} + +function halloffameDetails($uebergabe_id = 0): void +{ + $db = getDatabase(); + $app = Factory::getContainer()->get(SiteApplication::class); + $jInput = $app->input; + + global $params; + + if ($uebergabe_id == 0) + $id = $jInput->get('id', 0, 'INT'); + else + $id = $uebergabe_id; + + $mitglieder = null; + + $query = "SELECT * FROM #__sportsmanager_halloffame WHERE halloffame_id = $id"; + $rows = loadObjectList($db, $query); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $halloffame = $rows[0]; + $halloffame->platz2_zeigen = 0; + $halloffame->platz3_zeigen = 0; + + $query = "SELECT t2.*, t1.halloffame" + . "\n FROM #__sportsmanager_halloffame t1" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_halloffame t2 ON t2.halloffame_id = t1.halloffame_id" + . "\n WHERE t2.halloffame_id = $id" + . "\n ORDER BY t2.jahr DESC, platz ASC;"; + $rows = loadObjectList($db, $query); + + if (count($rows) > 0){ + $mitglieder = []; + if ($halloffame->spielform == 1){ + foreach ($rows as $row) { + $index_vereinid = "verein_id_" . $row->platz; + $index_team = "teamname_" . $row->platz; + if (!isset($mitglieder[$row->jahr])) { + $mitglieder[$row->jahr] = new stdClass(); + } + $mitglieder[$row->jahr]->jahr = $row->jahr; + $mitglieder[$row->jahr]->$index_vereinid = $row->verein_id; + $mitglieder[$row->jahr]->$index_team = $row->teamname; + if ($row->platz == 2 && !empty($row->teamname)) + $halloffame->platz2_zeigen = 1; + if ($row->platz == 3 && !empty($row->teamname)) + $halloffame->platz3_zeigen = 1; + } + } + if ($halloffame->spielform == 2 || $halloffame->spielform == 3){ + foreach ($rows as $row) { + $index_spieler1id = "spieler1_id_" . $row->platz; + $index_spieler1 = "spieler1_" . $row->platz; + $index_spieler2id = "spieler2_id_" . $row->platz; + $index_spieler2 = "spieler2_" . $row->platz; + + if (!isset($mitglieder[$row->jahr])) { + $mitglieder[$row->jahr] = new stdClass(); + } + $mitglieder[$row->jahr]->jahr = $row->jahr; + $mitglieder[$row->jahr]->$index_spieler1id = $row->spieler1_id; + $mitglieder[$row->jahr]->$index_spieler1 = $row->spieler1; + $mitglieder[$row->jahr]->$index_spieler2id = $row->spieler2_id; + $mitglieder[$row->jahr]->$index_spieler2 = $row->spieler2; + if ($row->platz == 2 && (!empty($row->spieler1) || !empty($row->spieler2))) + $halloffame->platz2_zeigen = 1; + if ($row->platz == 3 && (!empty($row->spieler1) || !empty($row->spieler2))) + $halloffame->platz3_zeigen = 1; + } + } + } + + if (isJson()) { + echo json_encode($mitglieder); + } else { + HTML_sportsmanager::halloffameDetails($params->get('titel'), $params->get('beschreibung'), $mitglieder, $halloffame); + } +} + function begegnungSpielplan($teamansicht = false): void { $db = getDatabase(); @@ -4776,6 +5040,54 @@ function begegnungVerlegen(): void } } +function neueTeamStrafe($teamid, $veranstaltungid, $strafe, $moderator_user_id, $beschreibung) { + $app = Factory::getContainer()->get(SiteApplication::class); + $db = getDatabase(); + + $zeitpunkt = date('Y-m-d H:i:s'); + $query = "INSERT INTO #__sportsmanager_team_strafen" + . "\n (team_id, zeitpunkt, moderator_user_id, strafe, beschreibung)" + . "\n VALUES ($teamid, '$zeitpunkt', $moderator_user_id, $strafe, '$beschreibung')"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "UPDATE #__sportsmanager_team" + . "\n SET zusatzpunkte = (" + . "\n SELECT SUM(#__sportsmanager_team_strafen.strafe)" + . "\n FROM #__sportsmanager_team_strafen" + . "\n WHERE #__sportsmanager_team_strafen.team_id = $teamid" + . "\n ) WHERE #__sportsmanager_team.team_id = $teamid"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + teamstatistikAktualisieren($veranstaltungid); + + $query = "SELECT teamname FROM #__sportsmanager_team WHERE team_id = $teamid"; + $teamname = loadResult($db, $query); + + $mailfrom = $app->getCfg('mailfrom'); + $fromname = $app->getCfg('fromname'); + $penaltycc = $app->getCfg('penaltycc'); + $subject = JText::sprintf('COM_SPORTSMANAGER_EXPLICIT_PENALTIES_EMAIL_SUBJECT', $teamname); + $body = JText::sprintf('COM_SPORTSMANAGER_EXPLICIT_PENALTIES_EMAIL_BODY', $teamname, $strafe, $beschreibung); + + $query = "SELECT t1.email FROM #__users AS t1, #__sportsmanager_berechtigt_fuer_team AS t2 WHERE t1.id = t2.berechtigt_user_id AND t2.berechtigt_team_id = $teamid"; + $rows = loadObjectList($db, $query); + if(!empty($rows)) { + $mailer = Factory::getContainer()->get(MailerFactoryInterface::class)->createMailer(); + $mailer->setSender($mailfrom, $fromname); + if (!empty($penaltycc)) { + $mailer->addCc($penaltycc); + } + $mailer->setSubject($subject); + $mailer->setBody($body); + foreach ($rows as $row) { + $mailer->addBcc($row->email); + } + $mailer->send(); + } +} + function teamstatistikAktualisieren($geaenderte_veranstaltung_id = 0, $geaenderter_teamspiel_modus_id = 0): void { $db = getDatabase(); diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/default.xml b/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/default.xml index abbb926..e199df8 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/default.xml +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/default.xml @@ -25,6 +25,8 @@ + +
- +
- - - - - + + + + + 0) { @@ -3983,10 +3984,10 @@ static function spielverlegungen($titel, $beschreibung, $rows): void ?> + @@ -202,16 +208,22 @@ class HTML_sportsmanager_admin + + @@ -2905,7 +2917,7 @@ class HTML_sportsmanager_admin } } - static function adminVerteiler($verteiler, $organisationen, $organisationen_mailverteiler, $veranstaltungen, $veranstaltungen_mailverteiler, $saisons, $filter_saison_id, $moderator_zugriff): void + static function adminVerteiler($verteiler, $organisationen, $organisationen_mailverteiler, $verbandsorgane, $verbandsorgane_mailverteiler, $veranstaltungen, $veranstaltungen_mailverteiler, $saisons, $filter_saison_id, $moderator_zugriff): void { global $params; @@ -3039,6 +3051,55 @@ class HTML_sportsmanager_admin 0) { + ?> +
- ", date('d.m.Y h:i', strtotime($row->Termin_alt))); ?> + ", date('d.m.Y H:i', strtotime($row->Termin_alt))); ?> - Termin_neu == "" ? "" : str_replace(" ", "
", date('d.m.Y h:i', strtotime($row->Termin_neu))); ?> + Termin_neu == "" ? "" : str_replace(" ", "
", date('d.m.Y H:i', strtotime($row->Termin_neu))); ?>
Begruendung_beantragt); ?> @@ -4001,6 +4002,328 @@ static function spielverlegungen($titel, $beschreibung, $rows): void + +
+
+ + + + +
") ? $beschreibung : htmlentities_utf8($beschreibung); ?>
+
+ 0) { + ?> + + + + + + + + + + + + + + + + + + + +
+ + verbandsorgan)); ?> + + + anzahl; ?> + + email; ?> + + organisation; ?> +
+ +   + + +
+
+ + + + +
") ? $beschreibung : htmlentities_utf8($beschreibung); ?>
+
+ " . $verbandsorgan->verbandsorgan . ""; + + echo $verbandsorgan->beschreibung; + + if (count($rows) > 0) { + ?> +

+ + + + + + + + + + + + + + + +
+ spieler_id, 45, 60, 0, 0, 'border="1"'); ?> + + nachname . ", " . $row->vorname); ?> + + email); ?> + + telefon); ?> + telefon && $row->mobil){ echo "
"; }?> + mobil); ?> +
+ funktion); ?> + + zusatzinfo); ?> +
+ +   + + +
+
+ + + + +
") ? $beschreibung : htmlentities_utf8($beschreibung); ?>
+
+ 0) { + ?> + + + + + + + + + + + +
+ + halloffame)); ?> + + + zeitspanne; ?> +
+ +   + + +
+
+ + + + +
") ? $beschreibung : htmlentities_utf8($beschreibung); ?>
+
+ " . htmlentities_utf8($halloffame->halloffame) . ""; + + if ($rows != null) { + ?> + + + + + + + platz2_zeigen) continue; + if ($i == 3 && !$halloffame->platz3_zeigen) continue; + ?> + + + + + get('pageclass_sfx'); + $k = ($k + 1) % 2; + + if ($halloffame->spielform == 2) { + ?> + + + + + + platz2_zeigen) continue; + if ($i == 3 && !$halloffame->platz3_zeigen) continue; + $spieler1_id = "spieler1_id_" . $i; + $spieler1 = "spieler1_" . $i; + ?> + + + + + + + platz2_zeigen) continue; + if ($i == 3 && !$halloffame->platz3_zeigen) continue; + $spieler2_id = "spieler2_id_" . $i; + $spieler2 = "spieler2_" . $i; + ?> + + + + + + + + + platz2_zeigen) continue; + if ($i == 3 && !$halloffame->platz3_zeigen) continue; + if ($halloffame->spielform == 1) { + $id = "verein_id_" . $i; + $txt = "teamname_" . $i; + $type = "vereine"; + } else { + $id = "spieler1_id_" . $i; + $txt = "spieler1_" . $i; + $type = "spieler"; + } + ?> + + + + + +
+ + + +
+ jahr; ?> + + $spieler1_id, 45, 60, 0, 0, 'border="0"'); ?> + + $spieler1); ?> +
+ $spieler2_id, 45, 60, 0, 0, 'border="0"'); ?> + + $spieler2); ?> +
+ jahr; ?> + + $id, 45, 60, 0, 0, 'border="0"'); ?> + + $txt); ?> +
+ +   + +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + +
+ verbandsorgan); ?> + + verbandsorgane_id]) && !empty($verbandsorgane_mailverteiler[$verbandsorgan->verbandsorgane_id])) { + ?> + + + + verbandsorgane_id . "p"]) && !empty($verbandsorgane_mailverteiler[$verbandsorgan->verbandsorgane_id . "p"])) + echo htmlentities_utf8($verbandsorgane_mailverteiler[$verbandsorgan->verbandsorgane_id . "p"]); + ?> +
+   + 0) { ?> @@ -3058,7 +3119,7 @@ class HTML_sportsmanager_admin - + @@ -5198,7 +5259,7 @@ class HTML_sportsmanager_admin static function adminKategorien($kategorien): void { global $params; - $anzahl = array(0,50,100,50,50,100,50,50); + $anzahl = array(0,50,100,50,50,100,50,50,100); ?>
- - - + + +
-
- - - - - - - - - - - - - - + + + + + + + + + + + - - -
-
-

- -

-
-
- - - -
  + +
+
+

+ +

+
+
+ + + +
  -
-
-
- + - - 0) { ?> @@ -7477,6 +7529,848 @@ class HTML_sportsmanager_admin +
+ :
+ + + + + + + +
+
+
+ 0) { + ?> + + + + + + + + + + + + + +
+ + verbandsorgan)); ?> + + + + anzahl; ?> + + X +
+ +
+ + +
+ + +
+ :
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
  + +
+
+ + + + "/> +
+ +
verbandsorgan); ?> + :
+ + + + + + + +
+
+
+ 0) { + ?> + + + + + + + + + + + + + + + + +
+ + nachname . ", " . $row->vorname); ?> + + + spieler_id, 45, 60, 0, 0, 'border="1"'); ?> + + funktion); ?> + + zusatzinfo); ?> + X +
+ +
verbandsorgan); ?> + :
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
  + +
+ +
+ + + + + "/> +
+ +
+ :
+ + + + + + + +
+
+
+ 0) { + ?> + + + + + + + + + + + + + +
+ + halloffame)); ?> + + + + zeitspanne; ?> + + X +
+ +
+ :
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
  + +
+
+ + + + "/> +
+ + +
+ halloffame); ?> + : +
+ + + + + + + + +
+ + + +
+ + + +
+ + + + + + + + + platz2_zeigen) continue; + if ($i == 3 && !$halloffame->platz3_zeigen) continue; + ?> + + + + + + + get('pageclass_sfx'); + $k = ($k + 1) % 2; + + if ($halloffame->spielform == 2) { + ?> + + + + + + + platz2_zeigen) continue; + if ($i == 3 && !$halloffame->platz3_zeigen) continue; + $spieler1_id = "spieler1_id_" . $i; + $spieler1 = "spieler1_" . $i; + ?> + + + + + + + + + platz2_zeigen) continue; + if ($i == 3 && !$halloffame->platz3_zeigen) continue; + $spieler2_id = "spieler2_id_" . $i; + $spieler2 = "spieler2_" . $i; + ?> + + + + + + + + + + + platz2_zeigen) continue; + if ($i == 3 && !$halloffame->platz3_zeigen) continue; + if ($halloffame->spielform == 1) { + $id = "verein_id_" . $i; + $txt = "teamname_" . $i; + $type = "vereine"; + } else { + $id = "spieler1_id_" . $i; + $txt = "spieler1_" . $i; + $type = "spieler"; + } + ?> + + + + + + + +
+ + + +
+ + jahr; ?> + + + $spieler1_id, 45, 60, 0, 0, 'border="0"'); ?> + + $spieler1); ?> + + + + X + + +
+ $spieler2_id, 45, 60, 0, 0, 'border="0"'); ?> + + $spieler2); ?> +
+ + jahr; ?> + + + $id, 45, 60, 0, 0, 'border="0"'); ?> + + $txt); ?> + + + + X + + +
+ +
halloffame); ?> + :
+ +
+
+ + + + + + spielform == 1){ + $index_vereinid = "verein_id_" . $p; + $index_team = "teamname_" . $p; + ?> + + + + + spielform == 2 || $halloffame->spielform == 3){ + $index_spieler1id = "spieler1_id_" . $p; + $index_spieler1 = "spieler1_" . $p; + $index_spieler2id = "spieler2_id_" . $p; + $index_spieler2 = "spieler2_" . $p; + ?> + + + + + + + + +
+ + + +
+ + + + +
+ + + + + spielform == 2){ ?> +
+ + + +
 
+ +
+ + + + + +
+ + + + + + + + + : @@ -9091,15 +10002,19 @@ class HTML_sportsmanager_admin : - + explizite_strafen == 0) { ?> + + team_id) . "\">" . ($row->zusatzpunkte ? $row->zusatzpunkte : 0.0) . ""; + } ?> +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
zeitpunkt ?> moderator_name ? htmlentities_utf8($row->moderator_name) : "-" ?> strafe ?> beschreibung) ?>
+ + + + + +
+ + + + +
+ Telefon, Mobil, E-Mail werden aus der Spielerliste übernommen, wenn sie hier nicht ausgefüllt sind." +COM_SPORTSMANAGER_HALL_OF_FAME="Hall of Fame" +COM_SPORTSMANAGER_ADD_HALL_OF_FAME="Hall of Fame hinzufügen" +COM_SPORTSMANAGER_INVALID_HALL_OF_FAME_NAME="Invalider Name für Hall of Fame" +COM_SPORTSMANAGER_REALLY_REMOVE_HALL_OF_FAME="Willst Du wirklich diese Hall of Fame mit allen Mitgliedern löschen?" +COM_SPORTSMANAGER_MATCH_TYPE="Spielform" +COM_SPORTSMANAGER_REALLY_REMOVE_HALL_OF_FAME_YEAR="Willst Du wirklich dieses Hall of Fame Jahr löschen?" +COM_SPORTSMANAGER_YEARS="Jahre" +COM_SPORTSMANAGER_ADD_HALL_OF_FAME_YEAR="Hall of Fame Jahr hinzufügen" +COM_SPORTSMANAGER_NO_ENTRY="kein Eintrag" \ No newline at end of file diff --git a/src/structure/language/en-GB/en-GB.com_sportsmanager.ini b/src/structure/language/en-GB/en-GB.com_sportsmanager.ini index ee0e151..ff6434f 100644 --- a/src/structure/language/en-GB/en-GB.com_sportsmanager.ini +++ b/src/structure/language/en-GB/en-GB.com_sportsmanager.ini @@ -39,6 +39,7 @@ COM_SPORTSMANAGER_ORGANISATION="Organisation" COM_SPORTSMANAGER_TEAM_MEMBERS="Team members" COM_SPORTSMANAGER_TEAM_MEMBERS2="Club members" COM_SPORTSMANAGER_MEMBERS="Members" +COM_SPORTSMANAGER_MEMBER="Member" COM_SPORTSMANAGER_ACTIVE_MEMBERS="Active members" COM_SPORTSMANAGER_TEAMS="Teams" COM_SPORTSMANAGER_CURRENT_TEAMS="Current teams" @@ -72,7 +73,6 @@ COM_SPORTSMANAGER_CONFIRM_REMOVE_RANKING="Do you really want to remove the ranki COM_SPORTSMANAGER_ADD_INDIVIDUAL_COMPETITION="Add individual competition" COM_SPORTSMANAGER_INDIVIDUAL_COMPETITION="Individual competition" COM_SPORTSMANAGER_INDIVIDUAL_COMPETITIONS="Individual competitions" -COM_SPORTSMANAGER_ASSOCIATION_BODIES="Association bodies" COM_SPORTSMANAGER_GAME="Game" COM_SPORTSMANAGER_GAMES="Games" COM_SPORTSMANAGER_GAMES_SHORTCUT="G" @@ -900,6 +900,9 @@ COM_SPORTSMANAGER_RESULT_ONLY="Result only" COM_SPORTSMANAGER_GAME_NUMBER="Game %d" COM_SPORTSMANAGER_LABEL_GAME_NUMBER="Game nr" COM_SPORTSMANAGER_LABEL_GAME_TITLE="Gameday title" +COM_SPORTSMANAGER_EXPLICIT_PENALTIES="Explicit Penalties" +COM_SPORTSMANAGER_EXPLICIT_PENALTIES_EMAIL_SUBJECT="%s: received penalty" +COM_SPORTSMANAGER_EXPLICIT_PENALTIES_EMAIL_BODY="%s received a penalty of %f points based on the following justification: %s" COM_SPORTSMANAGER_EMAIL_SHIFT_GAME_APPOINTMENT_SUBJECT="%s vs %s: Shift game appointment" COM_SPORTSMANAGER_EMAIL_SHIFT_GAME_APPOINTMENT_BODY="For match %s versus %s on %s in %s the game appointment is shifted by %s.\n\nAlternative appointments:\n\n" COM_SPORTSMANAGER_EMAIL_SHIFT_GAME_APPOINTMENT_REQUESTED_BODY="For match %s on %s in %s the game appointment is shifted by %s.\n\nPlease propose alternative appointments under %s" @@ -1070,4 +1073,23 @@ COM_SPORTSMANAGER_NOT_VALID_TIME="Not valid time" COM_SPORTSMANAGER_REALLY_MATCH_RESCHEDULING="Do you really want to remove this match rescheduling?" COM_SPORTSMANAGER_REST_DAYS="Rest days" COM_SPORTSMANAGER_TRAINING_DAYS="Training days" -COM_SPORTSMANAGER_NOT_ACTUALIZED_DATA="Data not updated" \ No newline at end of file +COM_SPORTSMANAGER_NOT_ACTUALIZED_DATA="Data not updated" +COM_SPORTSMANAGER_ASSOCIATION_BODIES="Association bodies" +COM_SPORTSMANAGER_ASSOCIATION_BODY="Association body" +COM_SPORTSMANAGER_ADD_ASSOCIATION_BODY="Add association body" +COM_SPORTSMANAGER_REALLY_REMOVE_ASSOCIATION_BODY="Do you really want to remove this association body?" +COM_SPORTSMANAGER_INVALID_ASSOCIATION_BODY_NAME="Invalid association body name" +COM_SPORTSMANAGER_NAME_NOT_COMPLETE="The name is not completely filled in" +COM_SPORTSMANAGER_ADDITIONAL_INFO="Additional information" +COM_SPORTSMANAGER_USE_HTML="HTML-formatted text should be used here." +COM_SPORTSMANAGER_REALLY_REMOVE_ASSOCIATION_BODY_MEMBER="Do you really want to remove this association body member?" +COM_SPORTSMANAGER_HELP_EDIT_ASSOCIATION_BODY_MEMBER="Selecting a name from the player list will fill in the first and last name.
Phone, mobile, and email are filled from the player list if left blank here." +COM_SPORTSMANAGER_HALL_OF_FAME="Hall of Fame" +COM_SPORTSMANAGER_ADD_HALL_OF_FAME="Add Hall of Fame" +COM_SPORTSMANAGER_INVALID_HALL_OF_FAME_NAME="Invalid Hall of Fame name" +COM_SPORTSMANAGER_REALLY_REMOVE_HALL_OF_FAME="Are you sure you want to delete this Hall of Fame including all its members?" +COM_SPORTSMANAGER_MATCH_TYPE="Game Type" +COM_SPORTSMANAGER_REALLY_REMOVE_HALL_OF_FAME_YEAR="Are you sure you want to delete this Hall of Fame year?" +COM_SPORTSMANAGER_YEARS="Years" +COM_SPORTSMANAGER_ADD_HALL_OF_FAME_YEAR="Add Hall of Fame Year" +COM_SPORTSMANAGER_NO_ENTRY="no entry" \ No newline at end of file diff --git a/src/structure/script.php b/src/structure/script.php index d1f2266..6bebe14 100644 --- a/src/structure/script.php +++ b/src/structure/script.php @@ -722,6 +722,18 @@ return new class () implements InstallerScriptInterface $db->setQuery( $query ); if (!$db->execute()) { die($db->stderr(true)); } + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_team_strafen` (" + . "\n `team_strafen_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `zeitpunkt` datetime NOT NULL," + . "\n `moderator_user_id` int(11) DEFAULT NULL," + . "\n `team_id` int(11) NOT NULL DEFAULT '0'," + . "\n `strafe` float(6,2) NOT NULL DEFAULT '0'," + . "\n `beschreibung` text NOT NULL," + . "\n PRIMARY KEY (`team_strafen_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_teamansprechpartner` (" . "\n `kontaktperson_id` int(11) NOT NULL AUTO_INCREMENT," . "\n `team_id` int(11) NOT NULL DEFAULT '0'," @@ -1049,6 +1061,7 @@ return new class () implements InstallerScriptInterface . "\n `erster_tag` date NOT NULL DEFAULT '0000-00-00'," . "\n `letzter_tag` date DEFAULT NULL," . "\n `elo_wertung` tinyint(4) DEFAULT NULL," + . "\n `explizite_strafen` tinyint(4) DEFAULT '0'," . "\n `logo_url` TINYTEXT NOT NULL," . "\n `ticker_logo_url` TINYTEXT NOT NULL," . "\n `status` tinyint(4) NOT NULL DEFAULT '0'," @@ -1182,13 +1195,84 @@ return new class () implements InstallerScriptInterface . "\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 = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_verbandsorgane` (" + . "\n `verbandsorgane_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `veranstalter_id` int(11) DEFAULT NULL," + . "\n `verbandsorgan` varchar(32) DEFAULT NULL," + . "\n `kategorie` int(4) DEFAULT NULL," + . "\n `reihenfolge` int(4) DEFAULT NULL," + . "\n `email` varchar(64) DEFAULT NULL," + . "\n `beschreibung` text NOT NULL," + . "\n PRIMARY KEY (`verbandsorgane_id`)," + . "\n KEY (`veranstalter_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_mitglied_von_verbandsorgan` (" + . "\n `mitglied_von_verbandsorgan_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `verbandsorgane_id` int(11) DEFAULT NULL," + . "\n `funktion` varchar(32) DEFAULT NULL," + . "\n `zusatzinfo` varchar(64) DEFAULT NULL," + . "\n `spieler_id` int(11) DEFAULT NULL," + . "\n `nachname` varchar(32) DEFAULT NULL," + . "\n `vorname` varchar(32) DEFAULT NULL," + . "\n `email` varchar(64) DEFAULT NULL," + . "\n `telefon` varchar(32) DEFAULT NULL," + . "\n `mobil` varchar(32) DEFAULT NULL," + . "\n `reihenfolge` int(11) DEFAULT NULL," + . "\n PRIMARY KEY (`mitglied_von_verbandsorgan_id`)," + . "\n KEY (`verbandsorgane_id`)," + . "\n KEY (`spieler_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_halloffame` (" + . "\n `halloffame_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `veranstalter_id` int(11) DEFAULT NULL," + . "\n `halloffame` varchar(64) DEFAULT NULL," + . "\n `kategorie` int(4) DEFAULT NULL," + . "\n `spielform` int(11) DEFAULT NULL," + . "\n `reihenfolge` int(4) DEFAULT NULL," + . "\n PRIMARY KEY (`halloffame_id`)," + . "\n KEY `veranstalter_id` (`veranstalter_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_mitglied_von_halloffame` (" + . "\n `mitglied_halloffame_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `halloffame_id` int(11) NOT NULL," + . "\n `jahr` int(4) DEFAULT NULL," + . "\n `platz` int(11) DEFAULT NULL," + . "\n `verein_id` int(11) DEFAULT NULL," + . "\n `teamname` varchar(64) DEFAULT NULL," + . "\n `spieler1_id` int(11) DEFAULT NULL," + . "\n `spieler1` varchar(64) DEFAULT NULL," + . "\n `spieler2_id` int(11) DEFAULT NULL," + . "\n `spieler2` varchar(64) DEFAULT NULL," + . "\n PRIMARY KEY (`mitglied_halloffame_id`)," + . "\n UNIQUE KEY `halloffame_jahr_platz` (`halloffame_id`,`jahr`,`platz`)," + . "\n KEY `halloffame_id` (`halloffame_id`)," + . "\n KEY `verein_id` (`verein_id`)," + . "\n KEY `spieler1_id` (`spieler1_id`)," + . "\n KEY `spieler2_id` (`spieler2_id`)" + . "\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 = 'verbands_kuerzel', wert = 'tbe.';"; $db->setQuery( $query ); if (!$db->execute()) { die($db->stderr(true)); } - $query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'datenbank_version', wert = '116';"; + $query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'datenbank_version', wert = '119';"; $db->setQuery( $query ); if (!$db->execute()) { die($db->stderr(true)); } @@ -1677,6 +1761,10 @@ return new class () implements InstallerScriptInterface $db->setQuery( $query ); if (!$db->execute()) { die($db->stderr(true)); } + $query = "DROP TABLE IF EXISTS `#__sportsmanager_team_strafen`;"; + $db->setQuery( $query ); + if (!$db->execute()) { die($db->stderr(true)); } + $query = "DROP TABLE IF EXISTS `#__sportsmanager_turnier`;"; $db->setQuery( $query ); if (!$db->execute()) { die($db->stderr(true)); } @@ -1748,5 +1836,21 @@ return new class () implements InstallerScriptInterface $query = "DROP TABLE IF EXISTS `#__sportsmanager_email_vorlagen`;"; $db->setQuery( $query ); if (!$db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_verbandsorgane`;"; + $db->setQuery( $query ); + if (!$db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_mitglied_von_verbandsorgan`;"; + $db->setQuery( $query ); + if (!$db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_halloffame`;"; + $db->setQuery( $query ); + if (!$db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_mitglied_von_halloffame`;"; + $db->setQuery( $query ); + if (!$db->execute()) { die($db->stderr(true)); } } };