Merge branch 'sportsmanager2-dev' into feature/auto-email-missing-results

# Conflicts:
#	src/structure/components/com_sportsmanager/database/update.php
#	src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php
This commit is contained in:
Marvin Flock
2025-09-25 18:16:42 +02:00
5 changed files with 164 additions and 113 deletions
@@ -18,18 +18,25 @@ defined('_JEXEC') or die('Restricted access');
require_once JPATH_SITE . '/components/com_sportsmanager/util/image.php'; require_once JPATH_SITE . '/components/com_sportsmanager/util/image.php';
require_once JPATH_SITE . '/components/com_sportsmanager/database/init.php'; require_once JPATH_SITE . '/components/com_sportsmanager/database/init.php';
function UhrzeitWandlerDE($Zeitstempel): mixed function UhrzeitWandlerDE(string $input): string {
{ // mögliche Datumsformate
$Temp = explode(' ', $Zeitstempel); $formats = [
$Datum = $Temp[0]; 'Y-m-d H:i',
$Uhrzeit = $Temp[1]; 'd.m.Y H:i',
if (preg_match("/\d{2}\.\d{2}\.\d{4}/", $Datum)) { 'd.m.Y H:i:s',
$Datum = substr($Datum, 6, 4) . "-" . substr($Datum, 3, 2) . "-" . substr($Datum, 0, 2); ];
} else if (preg_match("/\d{4}-\d{2}-\d{2}/", $Datum)) {
return $Zeitstempel;
}
return $Datum . " " . $Uhrzeit;
foreach ($formats as $format) {
$dt = DateTime::createFromFormat($format, $input);
// prüfen, ob Parsing erfolgreich war UND das Datum exakt passt
if ($dt && $dt->format($format) === $input) {
return $dt->format('Y-m-d H:i:s');
}
}
// falls kein bekanntes Format -> Original zurückgeben
return $input;
} }
function validateDate($date, $format = 'Y-m-d H:i:s'): bool function validateDate($date, $format = 'Y-m-d H:i:s'): bool
@@ -38,6 +45,22 @@ function validateDate($date, $format = 'Y-m-d H:i:s'): bool
return $d && $d->format($format) == $date; return $d && $d->format($format) == $date;
} }
function detectFileEncoding(string $filename): string {
$handle = fopen($filename, "r");
if (!$handle) {
throw new Exception("Datei konnte nicht geöffnet werden: $filename");
}
// Erstes Stück der Datei lesen (nicht alles, reicht für Erkennung)
$sample = fread($handle, 1000);
fclose($handle);
// Encoding bestimmen
$encoding = mb_detect_encoding($sample, ['UTF-8', 'ISO-8859-1', 'Windows-1252'], true);
return $encoding ?: 'UTF-8'; // Fallback auf UTF-8
}
function adminUebersicht(): void function adminUebersicht(): void
{ {
$db = getDatabase(); $db = getDatabase();
@@ -8330,7 +8353,7 @@ function adminSaveBegegnungSpielplan(): void
} }
if ($zwischenergebnis) { if ($zwischenergebnis) {
$query = "INSERT INTO #__sportsmanager_unbestaetigtes_ergebnis (begegnung_id, vorschlagendes_team_id, zwischenergebnis, kommentar, vorgeschlagen)" $query = "INSERT IGNORE INTO #__sportsmanager_unbestaetigtes_ergebnis (begegnung_id, vorschlagendes_team_id, zwischenergebnis, kommentar, vorgeschlagen)"
. "\n VALUES ('$id', " . ($bestaetigen != 0 ? "'$vorschlagendes_team_id'" : "'0'") . ", '1', '$kommentar', now());"; . "\n VALUES ('$id', " . ($bestaetigen != 0 ? "'$vorschlagendes_team_id'" : "'0'") . ", '1', '$kommentar', now());";
$db->setQuery($query); $db->setQuery($query);
if (!$db->execute()) { if (!$db->execute()) {
@@ -8344,7 +8367,7 @@ function adminSaveBegegnungSpielplan(): void
abortWithError($db->stderr(true)); abortWithError($db->stderr(true));
} }
} else if ($bestaetigen != 0) { } else if ($bestaetigen != 0) {
$query = "INSERT INTO #__sportsmanager_unbestaetigtes_ergebnis (begegnung_id, vorschlagendes_team_id, kommentar, vorgeschlagen)" $query = "INSERT IGNORE INTO #__sportsmanager_unbestaetigtes_ergebnis (begegnung_id, vorschlagendes_team_id, kommentar, vorgeschlagen)"
. "\n VALUES ('$id', '$vorschlagendes_team_id', '$kommentar', now());"; . "\n VALUES ('$id', '$vorschlagendes_team_id', '$kommentar', now());";
$db->setQuery($query); $db->setQuery($query);
if (!$db->execute()) { if (!$db->execute()) {
@@ -9502,6 +9525,8 @@ function adminBegegnungenImportieren(): void
redirectSportsManagerURL('&task=admin_spieler', Text::_('COM_SPORTSMANAGER_NO_FILE_SPECIFIED')); redirectSportsManagerURL('&task=admin_spieler', Text::_('COM_SPORTSMANAGER_NO_FILE_SPECIFIED'));
} }
$encoding = detectFileEncoding($_FILES["daten"]["tmp_name"]);
$handle = fopen($_FILES["daten"]["tmp_name"], "r"); $handle = fopen($_FILES["daten"]["tmp_name"], "r");
if (!$handle) { if (!$handle) {
redirectSportsManagerURL('&task=admin_spieler', Text::_('COM_SPORTSMANAGER_COULD_NOT_OPEN_FILE')); redirectSportsManagerURL('&task=admin_spieler', Text::_('COM_SPORTSMANAGER_COULD_NOT_OPEN_FILE'));
@@ -9523,6 +9548,7 @@ function adminBegegnungenImportieren(): void
$Titelzeile = null; $Titelzeile = null;
$import_zeile = false; $import_zeile = false;
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
if (empty($data[0])){continue;}
if ($Zeile == 1) { if ($Zeile == 1) {
foreach($data as $spalte_nr => $spalte) foreach($data as $spalte_nr => $spalte)
{ {
@@ -9531,7 +9557,7 @@ function adminBegegnungenImportieren(): void
if (vergleich($spalte,"heim,heimteam,heimmannschaft")) $Titelzeile['Heim'] = $spalte_nr; if (vergleich($spalte,"heim,heimteam,heimmannschaft")) $Titelzeile['Heim'] = $spalte_nr;
if (vergleich($spalte,"gast,gastteam,gastmannschaft")) $Titelzeile['Gast'] = $spalte_nr; if (vergleich($spalte,"gast,gastteam,gastmannschaft")) $Titelzeile['Gast'] = $spalte_nr;
if (vergleich($spalte,"spielnr,spielnummer")) $Titelzeile['Spiel_Nr'] = $spalte_nr; if (vergleich($spalte,"spielnr,spielnummer")) $Titelzeile['Spiel_Nr'] = $spalte_nr;
if (vergleich($spalte,"spieltagtitel")) $Titelzeile['Spieltag_Titel'] = $spalte_nr; if (vergleich($spalte,"spieltagtitel,spieltitel")) $Titelzeile['Spieltag_Titel'] = $spalte_nr;
if (vergleich($spalte,"jahr,spieljahr")) $Titelzeile['Spieljahr'] = $spalte_nr; if (vergleich($spalte,"jahr,spieljahr")) $Titelzeile['Spieljahr'] = $spalte_nr;
if (vergleich($spalte,"kalenderwoche,woche,kw")) $Titelzeile['Kalenderwoche'] = $spalte_nr; if (vergleich($spalte,"kalenderwoche,woche,kw")) $Titelzeile['Kalenderwoche'] = $spalte_nr;
} }
@@ -9540,10 +9566,16 @@ function adminBegegnungenImportieren(): void
$bgcolor = "green"; $bgcolor = "green";
$Begegnung[$Zeile]['spieltag'] = $data[$Titelzeile['Spieltag_Nr']]; $Begegnung[$Zeile]['spieltag'] = $data[$Titelzeile['Spieltag_Nr']];
$Begegnung[$Zeile]['zeitpunkt'] = UhrzeitWandlerDE($data[$Titelzeile['Spielstart']]); $Begegnung[$Zeile]['zeitpunkt'] = UhrzeitWandlerDE($data[$Titelzeile['Spielstart']]);
$Begegnung[$Zeile]['heim_team_id'] = $Mannschaften[$data[$Titelzeile['Heim']]]['team_id']; if ($encoding == "UTF-8"){
$Begegnung[$Zeile]['gast_team_id'] = $Mannschaften[$data[$Titelzeile['Gast']]]['team_id']; $Begegnung[$Zeile]['heim_team_id'] = $Mannschaften[$data[$Titelzeile['Heim']]]['team_id'];
$Begegnung[$Zeile]['gast_team_id'] = $Mannschaften[$data[$Titelzeile['Gast']]]['team_id'];
if (isset($data[$Titelzeile['Spieltag_Titel']])) $Begegnung[$Zeile]['spieltag_titel'] = $data[$Titelzeile['Spieltag_Titel']];
} else {
$Begegnung[$Zeile]['heim_team_id'] = $Mannschaften[utf8_encode($data[$Titelzeile['Heim']])]['team_id'];
$Begegnung[$Zeile]['gast_team_id'] = $Mannschaften[utf8_encode($data[$Titelzeile['Gast']])]['team_id'];
if (isset($data[$Titelzeile['Spieltag_Titel']])) $Begegnung[$Zeile]['spieltag_titel'] = utf8_encode($data[$Titelzeile['Spieltag_Titel']]);
}
if (isset($data[$Titelzeile['Spiel_Nr']])) $Begegnung[$Zeile]['spiel_nr'] = $data[$Titelzeile['Spiel_Nr']]; if (isset($data[$Titelzeile['Spiel_Nr']])) $Begegnung[$Zeile]['spiel_nr'] = $data[$Titelzeile['Spiel_Nr']];
if (isset($data[$Titelzeile['Spieltag_Titel']])) $Begegnung[$Zeile]['spieltag_titel'] = $data[$Titelzeile['Spieltag_Titel']];
echo "<tr style='color: white;'>"; echo "<tr style='color: white;'>";
if ($Begegnung[$Zeile]['spieltag'] > 99 or $Begegnung[$Zeile]['spieltag'] < 1) { if ($Begegnung[$Zeile]['spieltag'] > 99 or $Begegnung[$Zeile]['spieltag'] < 1) {
$bgcolor = "red"; $bgcolor = "red";
@@ -9563,7 +9595,6 @@ function adminBegegnungenImportieren(): void
$Mannschaften[$data[$Titelzeile['Heim']]]['heimspiel_uhrzeit']); $Mannschaften[$data[$Titelzeile['Heim']]]['heimspiel_uhrzeit']);
} }
$Begegnung[$Zeile]['zeitpunkt'] = $data[$Titelzeile['Spielstart']];
if (!validateDate($Begegnung[$Zeile]['zeitpunkt'])) { if (!validateDate($Begegnung[$Zeile]['zeitpunkt'])) {
$bgcolor = "red"; $bgcolor = "red";
$import = false; $import = false;
@@ -9583,7 +9614,12 @@ function adminBegegnungenImportieren(): void
} else { } else {
$bgcolor = "green"; $bgcolor = "green";
} }
echo "<td style='text-align: center; background-color:" . $bgcolor . "'>" . $data[$Titelzeile['Heim']] . "</td>"; echo "<td style='text-align: center; background-color:" . $bgcolor . "'>";
if ($encoding == "UTF-8")
echo $data[$Titelzeile['Heim']];
else
echo utf8_encode($data[$Titelzeile['Heim']]);
echo "</td>";
if ($Begegnung[$Zeile]['gast_team_id'] == "") { if ($Begegnung[$Zeile]['gast_team_id'] == "") {
if ($data[$Titelzeile['Gast']] == "spielfrei") { if ($data[$Titelzeile['Gast']] == "spielfrei") {
$bgcolor = "orange"; $bgcolor = "orange";
@@ -9595,7 +9631,12 @@ function adminBegegnungenImportieren(): void
} else { } else {
$bgcolor = "green"; $bgcolor = "green";
} }
echo "<td style='text-align: center; background-color:" . $bgcolor . "'>" . $data[$Titelzeile['Gast']] . "</td>"; echo "<td style='text-align: center; background-color:" . $bgcolor . "'>";
if ($encoding == "UTF-8")
echo $data[$Titelzeile['Gast']];
else
echo utf8_encode($data[$Titelzeile['Gast']]);
echo "</td>";
echo "</tr>"; echo "</tr>";
} }
if (!$import_zeile) { if (!$import_zeile) {
@@ -9603,6 +9644,7 @@ function adminBegegnungenImportieren(): void
} }
$Zeile++; $Zeile++;
} }
echo "<tr><td colspan=4 style='text-align: center;'>Dateiformat: $encoding</td></tr>";
echo "</table>"; echo "</table>";
fclose($handle); fclose($handle);
@@ -5319,6 +5319,29 @@ function updateDatabase(): void
} }
if ($datenbank_version < 108) { if ($datenbank_version < 108) {
$query = "DELETE t1 FROM #__sportsmanager_unbestaetigtes_ergebnis t1"
. "\n INNER JOIN #__sportsmanager_unbestaetigtes_ergebnis t2"
. "\n ON t1.begegnung_id = t2.begegnung_id"
. "\n AND t1.unbestaetigtes_ergebnis_id < t2.unbestaetigtes_ergebnis_id;";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = " ALTER TABLE `#__sportsmanager_unbestaetigtes_ergebnis`"
. "\n DROP INDEX `begegnung_id`, ADD UNIQUE `begegnung_id` (`begegnung_id`) USING BTREE;";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "UPDATE #__sportsmanager_einstellungen"
. "\n SET wert = '108'"
. "\n WHERE name = 'datenbank_version'";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
if ($datenbank_version < 109) {
$query = "ALTER TABLE #__sportsmanager_turnier ADD COLUMN `reminder_count` TINYINT DEFAULT '0'"; $query = "ALTER TABLE #__sportsmanager_turnier ADD COLUMN `reminder_count` TINYINT DEFAULT '0'";
$db->setQuery($query); $db->setQuery($query);
if (!$db->execute()) { die($db->stderr(true)); } if (!$db->execute()) { die($db->stderr(true)); }
@@ -5334,7 +5357,7 @@ function updateDatabase(): void
if (!$db->execute()) { die($db->stderr(true)); } if (!$db->execute()) { die($db->stderr(true)); }
$query = "UPDATE #__sportsmanager_einstellungen" $query = "UPDATE #__sportsmanager_einstellungen"
. "\n SET wert = '108'" . "\n SET wert = '109'"
. "\n WHERE name = 'datenbank_version'"; . "\n WHERE name = 'datenbank_version'";
$db->setQuery($query); $db->setQuery($query);
if (!$db->execute()) { if (!$db->execute()) {
@@ -444,7 +444,14 @@ static function turniere($turniere): void
if (!empty($turnier->disziplinen)) { if (!empty($turnier->disziplinen)) {
?> ?>
<br/> <br/>
<small><?php echo $turnier->disziplinen; ?></small> <small>
<?php
$parts = preg_split('/,(?![^()]*\))/m', $turnier->disziplinen);
$parts = array_map('trim', $parts); // remove extra spaces
foreach ($parts as $discipline) {
echo $discipline . "<br>";
} ?>
</small>
<?php <?php
} }
?> ?>
@@ -1731,8 +1738,8 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
<table style='width: 100%; border-collapse: collapse;' <table style='width: 100%; border-collapse: collapse;'
class="uk-table-hover uk-table-divider uk-table-middle dtfl-table-medium contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>"> class="uk-table-hover uk-table-divider uk-table-middle dtfl-table-medium contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>">
<tr class="sectiontableheader<?php echo $params->get('pageclass_sfx'); ?>"> <tr class="sectiontableheader<?php echo $params->get('pageclass_sfx'); ?>">
<th><strong><?php echo Text::_('COM_SPORTSMANAGER_PLACE'); ?></strong></th> <th style="text-align: center; width: 80px;"><strong><?php echo Text::_('COM_SPORTSMANAGER_PLACE'); ?></strong></th>
<th style="text-align: left; width: 280px;"> <th style="text-align: left; width: 320px;">
<strong><?php echo Text::_('COM_SPORTSMANAGER_TEAM'); ?></strong></th> <strong><?php echo Text::_('COM_SPORTSMANAGER_TEAM'); ?></strong></th>
<?php <?php
if ($bilder_anzeigen) { if ($bilder_anzeigen) {
@@ -1998,38 +2005,39 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
?> ?>
<!-- Gruppentabelle Hauptrunde --> <!-- Gruppentabelle Hauptrunde -->
<div class="uk-overflow-auto"> <div class="uk-overflow-auto">
<table <table style='width: 450px; border-collapse: collapse;'
class="uk-table uk-table-hover uk-table-divider uk-table-middle dtfl-table-small contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>"> class="uk-table-hover uk-table-divider uk-table-middle dtfl-table-small contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>">
<tr class="sectiontableheader<?php echo $params->get('pageclass_sfx'); ?>"> <tr class="sectiontableheader<?php echo $params->get('pageclass_sfx'); ?>">
<th><strong><?php echo Text::_('COM_SPORTSMANAGER_PLACE'); ?></strong></th> <th style="text-align: center; width: 80px;"><strong><?php echo Text::_('COM_SPORTSMANAGER_PLACE'); ?></strong></th>
<th style="text-align: left"> <th style="text-align: left; width: 320px;">
<strong><?php echo Text::_('COM_SPORTSMANAGER_TEAM'); ?></strong></th> <strong><?php echo Text::_('COM_SPORTSMANAGER_TEAM'); ?></strong></th>
<?php if ($bilder_anzeigen) { ?>
<th style="text-align: center; width: 70px;"></th>
<?php } ?>
</tr> </tr>
<?php <?php
$laufende_veranstaltung = $teams[count($teams) - 1]->platz == null; $laufende_veranstaltung = $teams[count($teams) - 1]->platz == null;
$platz = -1; $platz = -1;
$k = 0; $k = 0;
foreach ($teams foreach ($teams as $team) {
if ($laufende_veranstaltung && $team->platz != $platz && $team->platz == null) {
as $team) { ?>
if ($laufende_veranstaltung && $team->platz != $platz && $team->platz == null) { <tr>
?> <td nowrap height="4"></td>
<tr> </tr>
<td nowrap height="4"></td> <tr class="sectiontableheader<?php echo $params->get('pageclass_sfx'); ?>"
</tr> style="text-align: center">
<tr class="sectiontableheader<?php echo $params->get('pageclass_sfx'); ?>" <th nowrap><span
style="text-align: center"> style="font-size: 70%; "><i><?php echo "offen"; ?></i></span>
<th nowrap><span <!-- TODO: always "offen"?? -->
style="font-size: 70%; "><i><?php echo "offen"; ?></i></span> </th>
<!-- TODO: always "offen"?? --> </tr>
</th> <?php
</tr> }
<?php ?>
} <tr class="sectiontableentry<?php echo $k + 1;
?> $k = ($k + 1) % 2; ?><?php echo $params->get('pageclass_sfx'); ?>">
<tr class="sectiontableentry<?php echo $k + 1;
$k = ($k + 1) % 2; ?><?php echo $params->get('pageclass_sfx'); ?>">
<td nowrap style="text-align: center"> <td nowrap style="text-align: center">
<?php <?php
if ($team->platz != $platz) { if ($team->platz != $platz) {
@@ -2040,63 +2048,32 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
?> ?>
</td> </td>
<td nowrap> <td nowrap>
<?php
<table style="width: 100%; border: none; border-spacing: 0; padding: 0"> echo "<a href=\"" . SportsManagerURL('&task=team_details&id=' . $team->team_id) . "\">" . htmlentities_utf8(NichtLeererString($team->teamname)) . "</a>";
<tr> ?>
<td> </td>
<?php <?php
echo "<a href=\"" . SportsManagerURL('&task=team_details&id=' . $team->team_id) . "\">" . htmlentities_utf8(NichtLeererString($team->teamname)) . "</a>"; if ($bilder_anzeigen) {
?> ?>
</td> <td style="text-align: center;">
<?php <?php
if ($bilder_anzeigen) { $bild = bildHTML("mannschaften", $team->team_id, 50, 50, 0, 0, 'border="0"');
?> if ($bild != null) {
<td style="width: 50px" height="50" style="text-align: right"> echo $bild;
<?php } else if ($team->verein_id != null) {
$bild = bildHTML("mannschaften", $team->team_id, 50, 50, 0, 0, 'border="0"'); $bild = bildHTML("vereine", $team->verein_id, 50, 50, 0, 0, 'border="0"');
if ($bild != null) { if ($bild != null)
echo $bild; echo $bild;
} else if ($team->verein_id != null) { }
$bild = bildHTML("vereine", $team->verein_id, 50, 50, 0, 0, 'border="0"'); ?>
if ($bild != null) </td>
echo $bild; <?php
} }
?> ?>
</td> </tr>
<?php <?php
} }
?> ?>
</tr>
</table>
</td>
<?php
/*
<td nowrap style="text-align: center">
<?php
echo Rundenbezeichnung($team->letzter_spieltag);
?>
</td>
<td nowrap style="text-align: center">
<?php
echo $team->letzter_spieltag;
?>
</td>
<td nowrap style="text-align: center">
<?php
echo $team->zuletzt_gewonnen;
?>
</td>
<td nowrap style="text-align: center">
<?php
echo $spieltag_verlorene_begegnungen . " | " . $spieltag_einmal_vollstaendig . " = ". $spieltag_mannschaften;
?>
</td>
</tr>
<?php
*/
}
?>
</table> </table>
</div> </div>
<?php <?php
@@ -374,7 +374,16 @@ class HTML_sportsmanager_admin
echo htmlentities_utf8($row->turnierbezeichnung); echo htmlentities_utf8($row->turnierbezeichnung);
if (!empty($row->disziplinen)) { if (!empty($row->disziplinen)) {
?> ?>
<br/><small><?php echo $row->disziplinen; ?></small> <br/>
<small>
<?php
$parts = preg_split('/,(?![^()]*\))/m', $row->disziplinen);
$parts = array_map('trim', $parts); // remove extra spaces
foreach ($parts as $discipline) {
echo $discipline . "<br>";
}
?>
</small>
<?php <?php
} }
?> ?>
+2 -2
View File
@@ -1006,7 +1006,7 @@ return new class () implements InstallerScriptInterface
$db->setQuery( $query ); $db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); } if (!$db->execute()) { die($db->stderr(true)); }
$query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_unbestaetigtes_ergebnis` (" $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_unbestaetigtes_ergebnis` ("
. "\n `unbestaetigtes_ergebnis_id` int(11) NOT NULL AUTO_INCREMENT," . "\n `unbestaetigtes_ergebnis_id` int(11) NOT NULL AUTO_INCREMENT,"
. "\n `begegnung_id` int(11) NOT NULL DEFAULT '0'," . "\n `begegnung_id` int(11) NOT NULL DEFAULT '0',"
. "\n `vorschlagendes_team_id` int(11) NOT NULL DEFAULT '0'," . "\n `vorschlagendes_team_id` int(11) NOT NULL DEFAULT '0',"
@@ -1014,7 +1014,7 @@ return new class () implements InstallerScriptInterface
. "\n `kommentar` varchar(255) DEFAULT NULL," . "\n `kommentar` varchar(255) DEFAULT NULL,"
. "\n `vorgeschlagen` datetime DEFAULT NULL," . "\n `vorgeschlagen` datetime DEFAULT NULL,"
. "\n PRIMARY KEY (`unbestaetigtes_ergebnis_id`)," . "\n PRIMARY KEY (`unbestaetigtes_ergebnis_id`),"
. "\n KEY `begegnung_id` (`begegnung_id`)," . "\n UNIQUE KEY `begegnung_id` (`begegnung_id`),"
. "\n KEY `vorschlagendes_team_id` (`vorschlagendes_team_id`)" . "\n KEY `vorschlagendes_team_id` (`vorschlagendes_team_id`)"
. "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
$db->setQuery( $query ); $db->setQuery( $query );