diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php
index 8aa1bc3..3a7fc16 100644
--- a/src/structure/components/com_sportsmanager/admin.php
+++ b/src/structure/components/com_sportsmanager/admin.php
@@ -5414,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;
@@ -5443,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)) {
@@ -7614,6 +7616,415 @@ function adminEditVerbandsorganMitglied(): void
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();
diff --git a/src/structure/components/com_sportsmanager/database/update.php b/src/structure/components/com_sportsmanager/database/update.php
index ed3b64a..e965805 100644
--- a/src/structure/components/com_sportsmanager/database/update.php
+++ b/src/structure/components/com_sportsmanager/database/update.php
@@ -5639,6 +5639,55 @@ function updateDatabase(): void
}
}
+ 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 6b8b7bc..1e2f20f 100644
--- a/src/structure/components/com_sportsmanager/sportsmanager.php
+++ b/src/structure/components/com_sportsmanager/sportsmanager.php
@@ -398,6 +398,30 @@ if ($task == "spielerbild") {
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;
@@ -1103,6 +1127,15 @@ if ($task == "spielerbild") {
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') {
@@ -4345,6 +4378,110 @@ function verbandsorganeDetails($uebergabe_id = 0): void
}
}
+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();
diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php b/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php
index ab1cf35..6e54938 100644
--- a/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php
+++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php
@@ -4114,6 +4114,11 @@ static function verbandsorganeDetails($titel, $beschreibung, $verbandsorgan, $ro
email); ?>
+
+ telefon); ?>
+ telefon && $row->mobil){ echo " "; }?>
+ mobil); ?>
+
funktion); ?>
@@ -4135,6 +4140,190 @@ static function verbandsorganeDetails($titel, $beschreibung, $verbandsorgan, $ro
+
+
+
+
+
+ ") ? $beschreibung : htmlentities_utf8($beschreibung); ?>
+
+
+
+ 0) {
+ ?>
+
+
+
+
+
+
+ halloffame)); ?>
+
+
+
+ zeitspanne; ?>
+
+
+
+
+
+
+
+
+
+
+
+
+ ") ? $beschreibung : htmlentities_utf8($beschreibung); ?>
+
+
+
+ " . htmlentities_utf8($halloffame->halloffame) . "";
+
+ if ($rows != null) {
+ ?>
+
+
+
+
+
+ get('pageclass_sfx');
+ $k = ($k + 1) % 2;
+
+ if ($halloffame->spielform == 2) {
+ ?>
+
+
+
+
+ jahr; ?>
+
+
+ platz2_zeigen) continue;
+ if ($i == 3 && !$halloffame->platz3_zeigen) continue;
+ $spieler1_id = "spieler1_id_" . $i;
+ $spieler1 = "spieler1_" . $i;
+ ?>
+
+ $spieler1_id, 45, 60, 0, 0, 'border="0"'); ?>
+
+
+ $spieler1); ?>
+
+
+
+
+
+ platz2_zeigen) continue;
+ if ($i == 3 && !$halloffame->platz3_zeigen) continue;
+ $spieler2_id = "spieler2_id_" . $i;
+ $spieler2 = "spieler2_" . $i;
+ ?>
+
+ $spieler2_id, 45, 60, 0, 0, 'border="0"'); ?>
+
+
+ $spieler2); ?>
+
+
+
+
+
+
+
+ jahr; ?>
+
+ 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";
+ }
+ ?>
+
+ $id, 45, 60, 0, 0, 'border="0"'); ?>
+
+
+ $txt); ?>
+
+
+
+
+
+
+
+ ">
+
+
+
+
@@ -5253,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) {
+ ?>
+
+
+
+ :
+
+
+
+
+
+ halloffame); ?>
+ :
+
+
+
+
+
+
+
+
+
+
+ get('pageclass_sfx');
+ $k = ($k + 1) % 2;
+
+ if ($halloffame->spielform == 2) {
+ ?>
+
+
+
+
+
+
+ jahr; ?>
+
+
+
+ platz2_zeigen) continue;
+ if ($i == 3 && !$halloffame->platz3_zeigen) continue;
+ $spieler1_id = "spieler1_id_" . $i;
+ $spieler1 = "spieler1_" . $i;
+ ?>
+
+ $spieler1_id, 45, 60, 0, 0, 'border="0"'); ?>
+
+
+ $spieler1); ?>
+
+
+
+
+
+
+ X
+
+
+
+
+
+
+ platz2_zeigen) continue;
+ if ($i == 3 && !$halloffame->platz3_zeigen) continue;
+ $spieler2_id = "spieler2_id_" . $i;
+ $spieler2 = "spieler2_" . $i;
+ ?>
+
+ $spieler2_id, 45, 60, 0, 0, 'border="0"'); ?>
+
+
+ $spieler2); ?>
+
+
+
+
+
+
+
+
+
+ jahr; ?>
+
+
+
+ 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";
+ }
+ ?>
+
+ $id, 45, 60, 0, 0, 'border="0"'); ?>
+
+
+ $txt); ?>
+
+
+
+
+
+
+ X
+
+
+
+
+
+
+
+
halloffame); ?>
+ :
+
+
+ Telefon, Mobil, E-Mail werden aus der Spielerliste übernommen, wenn sie hier nicht ausgefüllt sind."
\ No newline at end of file
+COM_SPORTSMANAGER_HELP_EDIT_ASSOCIATION_BODY_MEMBER="Wird ein Name aus der Spielerliste ausgewählt, werden Nachname und Vorname übernommen.
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 2601ee9..ff6434f 100644
--- a/src/structure/language/en-GB/en-GB.com_sportsmanager.ini
+++ b/src/structure/language/en-GB/en-GB.com_sportsmanager.ini
@@ -1083,4 +1083,13 @@ 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
+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 f184368..6bebe14 100644
--- a/src/structure/script.php
+++ b/src/structure/script.php
@@ -1230,11 +1230,49 @@ return new class () implements InstallerScriptInterface
$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 = '118';";
+ $query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'datenbank_version', wert = '119';";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
@@ -1806,5 +1844,13 @@ return new class () implements InstallerScriptInterface
$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)); }
}
};