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 0e7576c..8aa1bc3 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 @@ -7295,45 +7316,304 @@ 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 adminRegelwerke(): void { $db = getDatabase(); @@ -12169,30 +12449,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; @@ -12200,17 +12492,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; @@ -12218,10 +12513,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 ea5fe16..bcc9efd 100644 --- a/src/structure/components/com_sportsmanager/database/update.php +++ b/src/structure/components/com_sportsmanager/database/update.php @@ -5567,7 +5567,7 @@ 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," @@ -5591,6 +5591,53 @@ function updateDatabase(): void 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 ($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 dd98bca..6b8b7bc 100644 --- a/src/structure/components/com_sportsmanager/sportsmanager.php +++ b/src/structure/components/com_sportsmanager/sportsmanager.php @@ -371,6 +371,33 @@ 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_regelwerke': adminRegelwerke(); break; @@ -1067,6 +1094,15 @@ 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 == 'login') { userAuth(); } else if ($content == 'login_refresh') { @@ -4224,6 +4260,91 @@ 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 begegnungSpielplan($teamansicht = false): 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 ?> + @@ -2905,7 +2911,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 +3045,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,139 @@ 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); ?> + + funktion); ?> + + zusatzinfo); ?> +
+ +   + +
+ +
+ + + +
+ +
+ + + + + + + + + + + + + + +
+ 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 +3113,7 @@ class HTML_sportsmanager_admin - + @@ -7029,9 +7084,7 @@ class HTML_sportsmanager_admin - - 0) { ?> @@ -7477,6 +7530,405 @@ 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); ?> + :
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
  + +
+ +
+ + + + + "/> +
+ Telefon, Mobil, E-Mail werden aus der Spielerliste übernommen, wenn sie hier nicht ausgefüllt sind." \ 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 6153ad5..2601ee9 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" @@ -1073,4 +1073,14 @@ 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." \ No newline at end of file diff --git a/src/structure/script.php b/src/structure/script.php index 6d4faa9..f184368 100644 --- a/src/structure/script.php +++ b/src/structure/script.php @@ -1195,13 +1195,46 @@ 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 = "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 = '117';"; + $query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'datenbank_version', wert = '118';"; $db->setQuery( $query ); if (!$db->execute()) { die($db->stderr(true)); } @@ -1765,5 +1798,13 @@ 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)); } } };