diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index 8ab3ac1..8aa1bc3 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -7967,6 +7967,7 @@ function adminEditVeranstaltung(): void $unterteilung = $jInput->get('unterteilung', 0, 'INT'); $spieltag_titel_zeigen = $jInput->get('spieltag_titel_zeigen', 0, 'INT'); $elo_wertung = $jInput->get('elo_wertung', 0, 'INT'); + $explizite_strafen = $jInput->get('explizite_strafen', 0, 'INT'); $logo_url = $db->escape(trim($jInput->get('logo_url', '', 'RAW'))); $ticker_logo_url = $db->escape(trim($jInput->get('ticker_logo_url', '', 'RAW'))); $status = $jInput->get('status', 0, 'INT'); @@ -7984,8 +7985,8 @@ function adminEditVeranstaltung(): void $elo_aktualisieren = false; $spielerstatistik_aktualisieren = false; if ($id == 0) { - $query = "INSERT INTO #__sportsmanager_veranstaltung (veranstalter_id, saison_id, bezeichnung, erster_tag " . ($letzter_tag != null ? ", letzter_tag" : "") . ", regelwerke_id, modus_id, verschieberegel_id, tabellenwertung, direktervergleich, unterteilung, spieltag_titel_zeigen, elo_wertung, logo_url, ticker_logo_url, status, reihenfolge, kategorie) VALUES - ('$veranstalterId', '$saison_id', '$bezeichnung', '$erster_tag', " . ($letzter_tag != null ? "'$letzter_tag', " : "") . "'$regelwerke_id', '$modus_id', '$verschieberegel_id', '$tabellenwertung', '$direktervergleich', '$unterteilung', '$spieltag_titel_zeigen', '$elo_wertung', '$logo_url', '$ticker_logo_url', '$status', '$reihenfolge', '$kategorie');"; + $query = "INSERT INTO #__sportsmanager_veranstaltung (veranstalter_id, saison_id, bezeichnung, erster_tag " . ($letzter_tag != null ? ", letzter_tag" : "") . ", regelwerke_id, modus_id, verschieberegel_id, tabellenwertung, direktervergleich, unterteilung, spieltag_titel_zeigen, elo_wertung, explizite_strafen, logo_url, ticker_logo_url, status, reihenfolge, kategorie) VALUES + ('$veranstalterId', '$saison_id', '$bezeichnung', '$erster_tag', " . ($letzter_tag != null ? "'$letzter_tag', " : "") . "'$regelwerke_id', '$modus_id', '$verschieberegel_id', '$tabellenwertung', '$direktervergleich', '$unterteilung', '$spieltag_titel_zeigen', '$elo_wertung', '$explizite_strafen', '$logo_url', '$ticker_logo_url', '$status', '$reihenfolge', '$kategorie');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); @@ -8013,6 +8014,7 @@ function adminEditVeranstaltung(): void . "\n unterteilung = '$unterteilung'," . "\n spieltag_titel_zeigen = '$spieltag_titel_zeigen'," . "\n elo_wertung = '$elo_wertung'," + . "\n explizite_strafen = '$explizite_strafen'," . "\n logo_url = '$logo_url'," . "\n ticker_logo_url = '$ticker_logo_url'," . "\n status = '$status'," @@ -8493,6 +8495,61 @@ function adminEditMannschaft(): void redirectSportsManagerURL('&task=admin_teams&veranstaltungid=' . $veranstaltungId); } +function veranstaltungid_for_teamid( $db, $teamid ) +{ + $query = "SELECT veranstaltung_id FROM #__sportsmanager_team WHERE team_id = $teamid"; + $veranstaltungid = loadResult($db, $query); + if ($veranstaltungid == 0) { die("invalid team id"); } + return $veranstaltungid; +} + +function adminMannschaftStrafen() +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + $teamid = $jInput->get('teamid', 0, 'INT'); + if ($teamid == 0) die("Missing id!"); + $veranstaltungid = veranstaltungid_for_teamid($db, $teamid); + + $query = "SELECT teamname FROM #__sportsmanager_team WHERE team_id = $teamid"; + $teamname = loadResult($db, $query); + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungid)) + keinZugriff(); + + $query = "SELECT strafen.zeitpunkt, strafen.strafe, strafen.beschreibung, users.name AS moderator_name" + . "\n FROM #__sportsmanager_team_strafen as strafen" + . "\n LEFT JOIN #__users as users ON users.id = strafen.moderator_user_id" + . "\n WHERE strafen.team_id = $teamid"; + $rows = loadObjectList($db, $query); + + HTML_sportsmanager_admin::adminMannschaftStrafen($teamid, $veranstaltungid, $teamname, $rows); +} + +function adminMannschaftAddStrafe() +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + $teamid = $jInput->get('teamid', 0, 'INT'); + if ($teamid == 0) die("Missing id!"); + $veranstaltungid = veranstaltungid_for_teamid($db, $teamid); + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungid)) + keinZugriff(); + + if ($jInput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL("&task=admin_team_edit&veranstaltungid=$veranstaltungid&id=$teamid"); + } else if ($jInput->get('add', false, 'BOOL')) { + $user_id = Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id; + $strafe = $jInput->get('strafe', 0, 'FLOAT'); + $beschreibung = $jInput->get('beschreibung', 0, 'RAW'); + neueTeamStrafe($teamid, $veranstaltungid, $strafe, $user_id, $beschreibung); + redirectSportsManagerURL('&task=admin_team_strafen&teamid=' . $teamid); + } else { + redirectSportsManagerURL('&task=admin_teams&veranstaltungid=' . $veranstaltungid); + } +} + function mannschaftsgruppe_hinzufuegen($quelle_team_id, $ziel_veranstaltung_id) { $db = getDatabase(); diff --git a/src/structure/components/com_sportsmanager/database/update.php b/src/structure/components/com_sportsmanager/database/update.php index c4022fb..bcc9efd 100644 --- a/src/structure/components/com_sportsmanager/database/update.php +++ b/src/structure/components/com_sportsmanager/database/update.php @@ -5568,40 +5568,63 @@ function updateDatabase(): void } } + if ($datenbank_version < 117) { + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_team_strafen` (" + . "\n `team_strafen_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `zeitpunkt` datetime NOT NULL," + . "\n `moderator_user_id` int(11) DEFAULT NULL," + . "\n `team_id` int(11) NOT NULL DEFAULT '0'," + . "\n `strafe` float(6,2) NOT NULL DEFAULT '0'," + . "\n `beschreibung` text NOT NULL," + . "\n PRIMARY KEY (`team_strafen_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$db->execute()) { die($db->stderr(true)); } + + $query = "ALTER TABLE #__sportsmanager_veranstaltung" + . "\n ADD IF NOT EXISTS explizite_strafen tinyint(4) DEFAULT '0' AFTER elo_wertung"; + $db->setQuery($query); + if (!$db->execute()) { die($db->stderr(true)); } + + $query = "UPDATE #__sportsmanager_einstellungen SET wert = '117' WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$db->execute()) { die($db->stderr(true)); } + } + if ($datenbank_version < 118) { - $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_verbandsorgane` (" - . "\n `verbandsorgane_id` int(11) NOT NULL AUTO_INCREMENT," - . "\n `veranstalter_id` int(11) DEFAULT NULL," - . "\n `verbandsorgan` varchar(32) DEFAULT NULL," - . "\n `kategorie` int(4) DEFAULT NULL," - . "\n `reihenfolge` int(4) DEFAULT NULL," - . "\n `email` varchar(64) DEFAULT NULL," - . "\n `beschreibung` text NOT NULL," - . "\n PRIMARY KEY (`verbandsorgane_id`)," - . "\n KEY (`veranstalter_id`)" - . "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $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;"; + $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)); @@ -5613,7 +5636,6 @@ function updateDatabase(): void $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); - } } if ($termin_aktionen_email_setzen) { diff --git a/src/structure/components/com_sportsmanager/sportsmanager.php b/src/structure/components/com_sportsmanager/sportsmanager.php index 40abc39..6b8b7bc 100644 --- a/src/structure/components/com_sportsmanager/sportsmanager.php +++ b/src/structure/components/com_sportsmanager/sportsmanager.php @@ -488,6 +488,12 @@ if ($task == "spielerbild") { case 'admin_team_edit': adminEditMannschaft(); break; + case 'admin_team_strafen': + adminMannschaftStrafen(); + break; + case 'admin_team_add_strafe': + adminMannschaftAddStrafe(); + break; case 'admin_team_save': adminSaveMannschaft(); break; @@ -4897,6 +4903,54 @@ function begegnungVerlegen(): void } } +function neueTeamStrafe($teamid, $veranstaltungid, $strafe, $moderator_user_id, $beschreibung) { + $app = Factory::getContainer()->get(SiteApplication::class); + $db = getDatabase(); + + $zeitpunkt = date('Y-m-d H:i:s'); + $query = "INSERT INTO #__sportsmanager_team_strafen" + . "\n (team_id, zeitpunkt, moderator_user_id, strafe, beschreibung)" + . "\n VALUES ($teamid, '$zeitpunkt', $moderator_user_id, $strafe, '$beschreibung')"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "UPDATE #__sportsmanager_team" + . "\n SET zusatzpunkte = (" + . "\n SELECT SUM(#__sportsmanager_team_strafen.strafe)" + . "\n FROM #__sportsmanager_team_strafen" + . "\n WHERE #__sportsmanager_team_strafen.team_id = $teamid" + . "\n ) WHERE #__sportsmanager_team.team_id = $teamid"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + teamstatistikAktualisieren($veranstaltungid); + + $query = "SELECT teamname FROM #__sportsmanager_team WHERE team_id = $teamid"; + $teamname = loadResult($db, $query); + + $mailfrom = $app->getCfg('mailfrom'); + $fromname = $app->getCfg('fromname'); + $penaltycc = $app->getCfg('penaltycc'); + $subject = JText::sprintf('COM_SPORTSMANAGER_EXPLICIT_PENALTIES_EMAIL_SUBJECT', $teamname); + $body = JText::sprintf('COM_SPORTSMANAGER_EXPLICIT_PENALTIES_EMAIL_BODY', $teamname, $strafe, $beschreibung); + + $query = "SELECT t1.email FROM #__users AS t1, #__sportsmanager_berechtigt_fuer_team AS t2 WHERE t1.id = t2.berechtigt_user_id AND t2.berechtigt_team_id = $teamid"; + $rows = loadObjectList($db, $query); + if(!empty($rows)) { + $mailer = Factory::getContainer()->get(MailerFactoryInterface::class)->createMailer(); + $mailer->setSender($mailfrom, $fromname); + if (!empty($penaltycc)) { + $mailer->addCc($penaltycc); + } + $mailer->setSubject($subject); + $mailer->setBody($body); + foreach ($rows as $row) { + $mailer->addBcc($row->email); + } + $mailer->send(); + } +} + function teamstatistikAktualisieren($geaenderte_veranstaltung_id = 0, $geaenderter_teamspiel_modus_id = 0): void { $db = getDatabase(); diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php b/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php index 0e6022d..8d7b5a7 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php @@ -9064,6 +9064,23 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void + + + + + + + + : @@ -9543,15 +9560,19 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void : - + explizite_strafen == 0) { ?> + + team_id) . "\">" . ($row->zusatzpunkte ? $row->zusatzpunkte : 0.0) . ""; + } ?> +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
zeitpunkt ?> moderator_name ? htmlentities_utf8($row->moderator_name) : "-" ?> strafe ?> beschreibung) ?>
+ + + + + +
+ + + + +
+ setQuery( $query ); if (!$db->execute()) { die($db->stderr(true)); } + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_team_strafen` (" + . "\n `team_strafen_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `zeitpunkt` datetime NOT NULL," + . "\n `moderator_user_id` int(11) DEFAULT NULL," + . "\n `team_id` int(11) NOT NULL DEFAULT '0'," + . "\n `strafe` float(6,2) NOT NULL DEFAULT '0'," + . "\n `beschreibung` text NOT NULL," + . "\n PRIMARY KEY (`team_strafen_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$db->execute()) { die($db->stderr(true)); } + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_teamansprechpartner` (" . "\n `kontaktperson_id` int(11) NOT NULL AUTO_INCREMENT," . "\n `team_id` int(11) NOT NULL DEFAULT '0'," @@ -1049,6 +1061,7 @@ return new class () implements InstallerScriptInterface . "\n `erster_tag` date NOT NULL DEFAULT '0000-00-00'," . "\n `letzter_tag` date DEFAULT NULL," . "\n `elo_wertung` tinyint(4) DEFAULT NULL," + . "\n `explizite_strafen` tinyint(4) DEFAULT '0'," . "\n `logo_url` TINYTEXT NOT NULL," . "\n `ticker_logo_url` TINYTEXT NOT NULL," . "\n `status` tinyint(4) NOT NULL DEFAULT '0'," @@ -1710,6 +1723,10 @@ return new class () implements InstallerScriptInterface $db->setQuery( $query ); if (!$db->execute()) { die($db->stderr(true)); } + $query = "DROP TABLE IF EXISTS `#__sportsmanager_team_strafen`;"; + $db->setQuery( $query ); + if (!$db->execute()) { die($db->stderr(true)); } + $query = "DROP TABLE IF EXISTS `#__sportsmanager_turnier`;"; $db->setQuery( $query ); if (!$db->execute()) { die($db->stderr(true)); }