diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php
index 3a7fc16..deff560 100644
--- a/src/structure/components/com_sportsmanager/admin.php
+++ b/src/structure/components/com_sportsmanager/admin.php
@@ -1655,6 +1655,7 @@ function adminEditSpieler(): void
bildLoeschen("spieler", $id);
spielerstatistikAktualisieren();
+ halloffameAktualisieren();
redirectSportsManagerURL('&task=admin_spieler&filter=' . urlencode($filter));
}
@@ -1962,7 +1963,8 @@ function adminSpielerZusammenlegenForm(): void
aktuellerVereinAktualisieren($spieler_beizubehalten_id);
ranglisteAktualisieren();
einstufungAktualisieren();
-
+ halloffameAktualisieren();
+
redirectSportsManagerURL('&task=admin_spieler&filter=' . urlencode($filter) . '#id' . $spieler_beizubehalten_id);
}
@@ -2072,7 +2074,8 @@ function adminRemoveInaktiveSpielerForm(): void
}
spielerstatistikAktualisieren();
-
+ halloffameAktualisieren();
+
foreach ($bilder_spieler_ids as $id)
bildLoeschen("spieler", $id);
@@ -3713,7 +3716,8 @@ function adminEditVerein(): void
bildLoeschen("vereine", $id);
aktuellerVereinAktualisieren();
-
+ halloffameAktualisieren();
+
redirectSportsManagerURL('&task=admin_vereine');
}
@@ -3821,7 +3825,8 @@ function adminVereineZusammenlegenForm(): void
bildLoeschen("vereine", $verein_zu_entfernen_id);
aktuellerVereinAktualisieren();
-
+ halloffameAktualisieren();
+
redirectSportsManagerURL('&task=admin_vereine#id' . $verein_beizubehalten_id);
}
@@ -10312,6 +10317,12 @@ function adminRemoveBegegnung(): void
die($db->stderr(true));
}
+ $query = "DELETE FROM #__sportsmanager_ordnungsstrafen WHERE begegnung_id = $id;";
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ die($db->stderr(true));
+ }
+
$query = "DELETE FROM #__sportsmanager_teamspiel WHERE begegnung_id = $id;";
$db->setQuery($query);
if (!$db->execute()) {
@@ -10323,7 +10334,7 @@ function adminRemoveBegegnung(): void
if (!$db->execute()) {
die($db->stderr(true));
}
-
+
if ($elo_aktualisieren) {
wannGespieltAktualisieren();
eloAktualisieren($aktualisieren_ab_datum);
@@ -10340,6 +10351,7 @@ function adminRemoveBegegnung(): void
$db = getDatabase();
$jInput = Factory::getContainer()->get(SiteApplication::class)->input;
+ $user_id = isExternalDatabase() ? 0 : (isJson() ? getUserID() : Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id);
$id = $jInput->get('id', 0, 'INT');
$veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT');
if ($veranstaltungId == 0) die("Missing id!");
@@ -10388,6 +10400,14 @@ function adminRemoveBegegnung(): void
die($db->stderr(true));
}
+ $query = "INSERT INTO #__sportsmanager_begegnung_historie"
+ . "\n (begegnung_historie_id,begegnung_id,aktion,user_id,eingetragen)"
+ . "\n VALUES (NULL,$id,11,$user_id,NOW());";
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ die($db->stderr(true));
+ }
+
termin_aktualisieren($id);
redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId . '#id' . $id);
@@ -10395,6 +10415,10 @@ function adminRemoveBegegnung(): void
function adminEditBegegnungSpielplan($bestaetigen): void
{
+ //$bestaetigen = 0: Eingabe Moderator
+ //$bestaetigen = 1: Bestätigung Ergebnis
+ //$bestaetigen = 2: Pineingabe
+
$db = getDatabase();
$jInput = Factory::getContainer()->get(SiteApplication::class)->input;
@@ -10503,7 +10527,7 @@ function adminEditBegegnungSpielplan($bestaetigen): void
if (count($rows) < 1) die("Wrong id!");
$gast_team = $rows[0];
- $query = "SELECT * FROM #__sportsmanager_teamspiel WHERE begegnung_id = $id ORDER BY teamspiel_nummer";
+ $query = "SELECT * FROM #__sportsmanager_teamspiel WHERE begegnung_id = $id ORDER BY teamspiel_nummer, teamspiel_id";
$spiele = loadObjectList($db, $query);
$query = "SELECT *"
. "\n FROM #__sportsmanager_mitglied_von_team as t1"
@@ -10525,7 +10549,6 @@ function adminEditBegegnungSpielplan($bestaetigen): void
: $begegnung->spielort_id) . "\"";
$begegnung->spielort_name = loadResult($db, $spielortQuery);
-
if (isJson()) {
$response = JSON_sportsmanager::adminEditBegegnungSpielplan($bestaetigen, $veranstaltung, $begegnung, $heim_team, $gast_team, $spiele, $heim_spieler, $gast_spieler, $teamspiel_modus);
JSON_sportsmanager::JSON($response);
@@ -10558,6 +10581,7 @@ function adminSaveBegegnungSpielplan(): void
$erneut_oeffnen = $jInput->get('erneut_oeffnen', 0, 'INT');
$heim_team_id = $jInput->get('heim_team_id', 0, 'INT');
$gast_team_id = $jInput->get('gast_team_id', 0, 'INT');
+ $loeschen = $jInput->getString('loeschen', '');
if ($jInput->get('cancel', false, 'BOOL')) {
if ($bestaetigen == 1) {
@@ -10579,6 +10603,13 @@ function adminSaveBegegnungSpielplan(): void
$benutzer_ist_moderator = benutzerZugriff("mannschaftswettbewerb_aendern") || benutzerVeranstaltungModerator($veranstaltungId); // Abfrage muss vor LOCK erfolgen, da sonst die Abfrage mangels Lock auf Moderator-Tabelle scheitert
+ //Spielbericht komplett loeschen
+ if ($benutzer_ist_moderator && $loeschen !== '') {
+ adminDeleteMatchReportBegegnung($id,$veranstaltungId);
+ redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId . '#id' . $id, Text::_('COM_SPORTSMANAGER_MATCH_REPORT_WAS_DELETED'));
+ }
+
+
$query = "SELECT #__sportsmanager_begegnung.*, unbestaetigtes_ergebnis_id, zwischenergebnis,"
. " (SELECT COUNT(*) FROM #__sportsmanager_begegnung_historie WHERE #__sportsmanager_begegnung_historie.begegnung_id = #__sportsmanager_begegnung.begegnung_id) AS verlegen_aktionen"
. "\n FROM #__sportsmanager_begegnung"
@@ -10928,6 +10959,32 @@ function adminSaveBegegnungSpielplan(): void
if (!$db->execute()) {
abortWithError($db->stderr(true));
}
+
+ // Spielbericht auf Fehler (doppelte Einträge) überprüfen
+ $query = "DELETE t1"
+ . "\n FROM #__sportsmanager_teamspiel t1"
+ . "\n INNER JOIN #__sportsmanager_teamspiel t2"
+ . "\n ON t1.begegnung_id = t2.begegnung_id"
+ . "\n AND t1.teamspiel_nummer = t2.teamspiel_nummer"
+ . "\n AND t1.teamspiel_id < t2.teamspiel_id"
+ . "\n WHERE t1.begegnung_id = $id;";
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ abortWithError($db->stderr(true));
+ }
+
+ // In Historie eintragen, wenn doppelte Einträge gelöscht wurden
+ $deleted = $db->getAffectedRows();
+ if ($deleted > 0) {
+ $query = "INSERT INTO #__sportsmanager_begegnung_historie"
+ . "\n (begegnung_historie_id, begegnung_id, aktion, team_id, user_id, eingetragen)"
+ . "\n VALUES (NULL, $id, 13, NULL, NULL, NOW());";
+
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ abortWithError($db->stderr(true));
+ }
+ }
// Benachrichtigung schreiben
$heim_team = null;
@@ -11016,6 +11073,70 @@ function adminSaveBegegnungSpielplan(): void
}
}
+function adminDeleteMatchReportBegegnung($id,$veranstaltungId): void
+{
+ $db = getDatabase();
+ $user_id = isExternalDatabase() ? 0 : (isJson() ? getUserID() : Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id);
+
+ $query = "DELETE FROM #__sportsmanager_teamspiel WHERE begegnung_id = $id;";
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ abortWithError($db->stderr(true));
+ }
+
+ $query = "UPDATE #__sportsmanager_begegnung"
+ . "\n SET heim_punkte = NULL,"
+ . "\n gast_punkte = NULL,"
+ . "\n heim_spielpunkte = NULL,"
+ . "\n gast_spielpunkte = NULL"
+ . "\n WHERE begegnung_id = $id";
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ abortWithError($db->stderr(true));
+ }
+
+ $query = "DELETE FROM #__sportsmanager_unbestaetigtes_ergebnis WHERE begegnung_id = $id;";
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ abortWithError($db->stderr(true));
+ }
+
+ $query = "DELETE FROM #__sportsmanager_begegnung_historie WHERE begegnung_id = $id AND aktion IN (6,7,8,9,10,13);";
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ abortWithError($db->stderr(true));
+ }
+
+ spielerstatistikAktualisieren(0, $veranstaltungId);
+ teamstatistikAktualisieren($veranstaltungId);
+
+ // Elo-bezogene Auswertungen aktualisieren, falls für die Veranstaltung aktiviert
+ $query = "SELECT elo_wertung FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = " . $veranstaltungId . " LIMIT 1;";
+ $db->setQuery($query);
+ $eloWertung = (int) $db->loadResult();
+ if ($eloWertung === 1) {
+ // Startdatum der Veranstaltung für Elo-Berechnung ermitteln
+ $query = "SELECT erster_tag FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = " . $veranstaltungId . " LIMIT 1;";
+ $db->setQuery($query);
+ $aktualisieren_ab_datum = $db->loadResult();
+
+ // Funktionen mit korrekten Parametern aufrufen
+ wannGespieltAktualisieren();
+ eloAktualisieren($aktualisieren_ab_datum);
+ einstufungAktualisieren();
+ }
+
+ $query = "INSERT INTO #__sportsmanager_begegnung_historie"
+ . "\n (begegnung_historie_id,begegnung_id,aktion,user_id,eingetragen)"
+ . "\n VALUES (NULL,$id,12,$user_id,NOW());";
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ abortWithError($db->stderr(true));
+ }
+
+ return;
+}
+
#[NoReturn] function adminBegegnungSpielplanHeimtausch(): void
{
$db = getDatabase();
@@ -11122,6 +11243,24 @@ function adminSaveBegegnungSpielplan(): void
if (!$db->execute()) {
die($db->stderr(true));
}
+
+ $encrypted_pin = $db->escape($jInput->get('pin', '', 'RAW'));
+ $pin = decrypt($encrypted_pin, "a9cZ" . $veranstaltungId . "oDS7" . $id . "2eA");
+
+ $query = "SELECT team_id FROM #__sportsmanager_team"
+ . "\n WHERE pin = " . $db->quote($pin) . " AND veranstaltung_id = $veranstaltungId;";
+ $team_id = loadResult($db, $query);
+
+ if (empty($user_id) OR !empty($team_id)) $user_id = "NULL";
+ if (empty($team_id)) $team_id = "NULL";
+
+ $query = "INSERT INTO #__sportsmanager_begegnung_historie"
+ . "\n (begegnung_historie_id,begegnung_id,aktion,team_id,user_id,eingetragen)"
+ . "\n VALUES (NULL,$id,11,$team_id,$user_id,NOW());";
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ die($db->stderr(true));
+ }
}
redirectSportsManagerURL('&task=' . ($bestaetigen != 0 ? ($bestaetigen == 1 ? 'admin_begegnung_spielplan_edit_bestaetigen' : 'pineingabe') : 'admin_begegnung_spielplan_edit') . '&id=' . $id . '&veranstaltungid=' . $veranstaltungId . ($bestaetigen != 0 ? '_bestaetigen' : '') . '&veranstaltungid=' . $veranstaltungId . '&id=' . $id . '&erneut_oeffnen=1' . (!empty($encrypted_pin) ? ('&epin=' . $encrypted_pin) : "") . ($aus_uebersicht ? '&aus_uebersicht=1' : ''));
@@ -12678,6 +12817,12 @@ function adminBegegnungenPokalrundeAuslosenForm(): void
die($db->stderr(true));
}
+ $query = "DELETE FROM #__sportsmanager_ordnungsstrafen WHERE begegnung_id = $id;";
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ die($db->stderr(true));
+ }
+
$query = "DELETE FROM #__sportsmanager_teamspiel WHERE begegnung_id = $id;";
$db->setQuery($query);
if (!$db->execute()) {
diff --git a/src/structure/components/com_sportsmanager/sportsmanager.php b/src/structure/components/com_sportsmanager/sportsmanager.php
index 1e2f20f..cac7242 100644
--- a/src/structure/components/com_sportsmanager/sportsmanager.php
+++ b/src/structure/components/com_sportsmanager/sportsmanager.php
@@ -6028,6 +6028,56 @@ function spielerstatistikAktualisieren($geaenderte_spielerstatistik_id = 0, $gea
}
}
+function halloffameAktualisieren(): void
+{
+ //Beim Löschen von Spieler bzw. Vereine werden die entsprechenden ids in Hall of Fame und Verbandsorgane gelöscht
+ $db = getDatabase();
+
+ // spieler1_id prüfen
+ $query = "UPDATE #__sportsmanager_mitglied_von_halloffame h"
+ . "\n LEFT JOIN #__sportsmanager_spieler s ON s.spieler_id = h.spieler1_id"
+ . "\n SET h.spieler1_id = NULL"
+ . "\n WHERE h.spieler1_id IS NOT NULL"
+ . "\n AND s.spieler_id IS NULL;";
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ die($db->stderr(true));
+ }
+
+ // spieler2_id prüfen
+ $query = "UPDATE #__sportsmanager_mitglied_von_halloffame h"
+ . "\n LEFT JOIN #__sportsmanager_spieler s ON s.spieler_id = h.spieler2_id"
+ . "\n SET h.spieler2_id = NULL"
+ . "\n WHERE h.spieler2_id IS NOT NULL"
+ . "\n AND s.spieler_id IS NULL;";
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ die($db->stderr(true));
+ }
+
+ // verein_id prüfen
+ $query = "UPDATE #__sportsmanager_mitglied_von_halloffame h"
+ . "\n LEFT JOIN #__sportsmanager_verein v ON v.verein_id = h.verein_id"
+ . "\n SET h.verein_id = NULL"
+ . "\n WHERE h.verein_id IS NOT NULL"
+ . "\n AND v.verein_id IS NULL;";
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ die($db->stderr(true));
+ }
+
+ // Verbandsorgan-Spieler prüfen
+ $query = "UPDATE #__sportsmanager_mitglied_von_verbandsorgan h"
+ . "\n LEFT JOIN #__sportsmanager_spieler s ON s.spieler_id = h.spieler_id"
+ . "\n SET h.spieler_id = NULL"
+ . "\n WHERE h.spieler_id IS NOT NULL"
+ . "\n AND s.spieler_id IS NULL;";
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ die($db->stderr(true));
+ }
+}
+
function wannGespieltAktualisieren(): 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 6e54938..6b2fe1d 100644
--- a/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php
+++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php
@@ -4023,6 +4023,7 @@ static function verbandsorgane($titel, $beschreibung, $rows, $organisation_zeige
if (count($rows) > 0) {
?>
+
";
echo "" . $verbandsorgan->verbandsorgan . "
";
echo $verbandsorgan->beschreibung;
@@ -4136,6 +4139,7 @@ static function verbandsorganeDetails($titel, $beschreibung, $verbandsorgan, $ro
+
0) {
?>
+
@@ -4217,7 +4223,7 @@ static function halloffameDetails($titel, $beschreibung, $rows, $halloffame): vo
if ($rows != null) {
?>
-
+
@@ -4320,6 +4326,7 @@ static function halloffameDetails($titel, $beschreibung, $rows, $halloffame): vo
+
0) {
?>
+
-
0) {
?>
-
+
0) {
?>
+
-
+
@@ -8253,6 +8260,7 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void
}
?>
+
0) {
?>
+
+ href="veranstaltung_id . '&id=' . $row->begegnung_id); ?>"
+ onclick="return confirm('');">
+
|
Text::_('COM_SPORTSMANAGER_MODIFIED_RESULTS'),
9 => Text::_('COM_SPORTSMANAGER_LIVE_RESULTS'),
10 => Text::_('COM_SPORTSMANAGER_REJECTED_SHIFT'),
+ 11 => Text::_('COM_SPORTSMANAGER_SWAP_MATCH'),
+ 12 => Text::_('COM_SPORTSMANAGER_MATCH_REPORT_DELETED'),
+ 13 => Text::_('COM_SPORTSMANAGER_MATCH_REPORT_CORRECTED'),
default => Text::_('COM_SPORTSMANAGER_PROPOSED_APPOINTMENT'),
};
?>
@@ -11562,6 +11577,7 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void
?>
/>
+ class="button" />
+
-
+
"/>
@@ -12020,7 +12037,6 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void
static function adminBegegnungenGenerieren($veranstaltung, $rows): void
{
- //geändert am 07.03.2025 von Jürgen Meyer
global $params;
$anzahlteams = count($rows);
if ($anzahlteams % 2)
diff --git a/src/structure/language/de-DE/de-DE.com_sportsmanager.ini b/src/structure/language/de-DE/de-DE.com_sportsmanager.ini
index eb72b6a..e93e999 100644
--- a/src/structure/language/de-DE/de-DE.com_sportsmanager.ini
+++ b/src/structure/language/de-DE/de-DE.com_sportsmanager.ini
@@ -1092,4 +1092,10 @@ 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
+COM_SPORTSMANAGER_NO_ENTRY="kein Eintrag"
+COM_SPORTSMANAGER_REALLY_SWAP_MATCH="Willst Du wirklich das Heimrecht tauschen?"
+COM_SPORTSMANAGER_SWAP_MATCH="Heimrechttausch"
+COM_SPORTSMANAGER_REALLY_DELETE_MATCH_REPORT="Der Spielbericht wird zusammen mit allen historischen Einträgen gelöscht. Willst du den Spielbericht wirklich löschen?"
+COM_SPORTSMANAGER_MATCH_REPORT_DELETED="Spielbericht gelöscht"
+COM_SPORTSMANAGER_MATCH_REPORT_WAS_DELETED="Der Spielbericht wurde erfolgreich gelöscht!"
+COM_SPORTSMANAGER_MATCH_REPORT_CORRECTED="Spielberichtskorrektur"
\ 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 ff6434f..c4eb5f9 100644
--- a/src/structure/language/en-GB/en-GB.com_sportsmanager.ini
+++ b/src/structure/language/en-GB/en-GB.com_sportsmanager.ini
@@ -1092,4 +1092,10 @@ 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
+COM_SPORTSMANAGER_NO_ENTRY="no entry"
+COM_SPORTSMANAGER_REALLY_SWAP_MATCH="Do you really want to swap the home advantage?"
+COM_SPORTSMANAGER_SWAP_MATCH="Swap home advantage"
+COM_SPORTSMANAGER_REALLY_DELETE_MATCH_REPORT="The match report and all its history will be deleted. Are you sure you want to delete the match report?"
+COM_SPORTSMANAGER_MATCH_REPORT_DELETED="Match report deleted"
+COM_SPORTSMANAGER_MATCH_REPORT_WAS_DELETED="The match report has been successfully deleted!"
+COM_SPORTSMANAGER_MATCH_REPORT_CORRECTED="Match report corrected"
\ No newline at end of file
|