From a1ae678f6dce688aada0a4feecc4b86457d54100 Mon Sep 17 00:00:00 2001 From: Marvin Flock Date: Sun, 4 May 2025 22:38:33 +0200 Subject: [PATCH] fix: replace sendMail loop with bcc loop in order to send one mail instead of way too many --- .../components/com_sportsmanager/admin.php | 80 +++++++++++-------- .../com_sportsmanager/sportsmanager.php | 12 ++- 2 files changed, 57 insertions(+), 35 deletions(-) diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index 4e159b8..21117ea 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -5217,7 +5217,7 @@ function adminKategorien(): void $kategorien[5] = array(); $kategorien[6] = array(); - + foreach ($rows as $row) $kategorien[$row->typ][$row->nummer] = $row->bezeichnung; @@ -9943,9 +9943,13 @@ function adminSaveBegegnungSpielplan(): void } $rows = $db->loadObjectList(); $mailer = Factory::getContainer()->get(MailerFactoryInterface::class)->createMailer(); + $mailer->setSender($mailfrom, $fromname); + $mailer->setSubject($subject); + $mailer->setBody($body); foreach ($rows as $row) { - $mailer->sendMail($mailfrom, $fromname, $row->email, $subject, $body); + $mailer->addBcc($row->email); } + $mailer->send(); } begegnungChanged($begegnung, $begegnung_alt, $modus, $heim_team, $gast_team, $spiele); @@ -10274,9 +10278,13 @@ function adminBegegnungSpielplanBestaetigen(): void } $rows = $db->loadObjectList(); $mailer = Factory::getContainer()->get(MailerFactoryInterface::class)->createMailer(); + $mailer->setSender($mailfrom, $fromname); + $mailer->setSubject($subject); + $mailer->setBody($body); foreach ($rows as $row) { - $mailer->sendMail($mailfrom, $fromname, $row->email, $subject, $body); + $mailer->addBcc($row->email); } + $mailer->send(); if (isJson()) { begegnungSpielplan(); @@ -11213,8 +11221,8 @@ function adminBegegnungenExportForm(): void $veranstaltung = $rows[0]; //Alle Ligen einer Saison ermitteln - $query = "SELECT * FROM #__sportsmanager_veranstaltung - WHERE saison_id = " . $veranstaltung->saison_id . " + $query = "SELECT * FROM #__sportsmanager_veranstaltung + WHERE saison_id = " . $veranstaltung->saison_id . " AND #__sportsmanager_veranstaltung.bezeichnung NOT IN ('Schiedsrichter') ORDER BY #__sportsmanager_veranstaltung.reihenfolge;"; $db->setQuery($query); @@ -11224,7 +11232,7 @@ function adminBegegnungenExportForm(): void $rows = $db->loadObjectList(); if (count($rows) < 1) die("Wrong id!"); $saison = $rows; - + HTML_sportsmanager_admin::adminBegegnungenExport($veranstaltung,$saison); } @@ -11260,8 +11268,8 @@ function adminBegegnungenExportForm(): void $dateiname = ""; if ($export == "spieler") { $query = " - SELECT t5.bezeichnung AS Veranstaltung, t2.vereinsname AS Verein, t1.teamname AS Team, - t4.spielernr AS Passnummer, t4.nachname AS Nachname, t4.vorname AS Vorname, t4.geburtsjahr AS Geburtsjahr, + SELECT t5.bezeichnung AS Veranstaltung, t2.vereinsname AS Verein, t1.teamname AS Team, + t4.spielernr AS Passnummer, t4.nachname AS Nachname, t4.vorname AS Vorname, t4.geburtsjahr AS Geburtsjahr, t6.saisonbezeichnung AS Saison, t3.erster_spieltag AS Spielberechtigt_von, t3.letzter_spieltag AS Spielberechtigt_bis FROM #__sportsmanager_team AS t1 LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t1.veranstaltung_id = t5.veranstaltung_id @@ -11284,10 +11292,10 @@ function adminBegegnungenExportForm(): void if ($export == "spielplan" or $export == "spielberichte") { $query = " SELECT t1.begegnung_id AS ID, t5.saisonbezeichnung AS Saison, - t4.bezeichnung AS Liga, t1.zeitpunkt AS Spielstart, t2.teamname AS Heim, t3.teamname AS Gast, - t1.spieltag AS Spieltag_Nr, t1.heim_punkte AS Heim_Tore, t1.gast_punkte AS Gast_Tore, + t4.bezeichnung AS Liga, t1.zeitpunkt AS Spielstart, t2.teamname AS Heim, t3.teamname AS Gast, + t1.spieltag AS Spieltag_Nr, t1.heim_punkte AS Heim_Tore, t1.gast_punkte AS Gast_Tore, t1.heim_spielpunkte AS Heim_Satzpunkte, t1.gast_spielpunkte AS Gast_Satzpunkte - FROM #__sportsmanager_begegnung AS t1 + FROM #__sportsmanager_begegnung AS t1 LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id LEFT JOIN #__sportsmanager_team AS t3 ON t1.gast_team_id = t3.team_id LEFT JOIN #__sportsmanager_veranstaltung AS t4 ON t2.veranstaltung_id = t4.veranstaltung_id @@ -11326,7 +11334,7 @@ function adminBegegnungenExportForm(): void foreach ($rows as $value) { - + // letze Änderung $query = " SELECT t1.eingetragen AS gespeichert_um, t2.name AS gespeichert_von @@ -11337,16 +11345,16 @@ function adminBegegnungenExportForm(): void ORDER BY eingetragen DESC LIMIT 1; "; - + $letzterEintrag = null; $db->setQuery($query); if ($db->execute()) { $letzterEintrag = $db->loadObjectList(); } - + $value->gespeichert_um = $letzterEintrag[0]->gespeichert_um; $value->gespeichert_von = $letzterEintrag[0]->gespeichert_von; - + // Spielbericht $query = " SELECT @@ -11355,13 +11363,13 @@ function adminBegegnungenExportForm(): void t5.spielernr AS Pass_Gast1, t6.spielernr AS Pass_Gast2, t1.teamspiel_heim_punkte AS Heim_Tore, t1.teamspiel_gast_punkte AS Gast_Tore, t1.teamspiel_heim_spielpunkte AS Heim_Punkte, t1.teamspiel_gast_spielpunkte AS Gast_Punkte - FROM #__sportsmanager_teamspiel AS t1 + FROM #__sportsmanager_teamspiel AS t1 LEFT JOIN #__sportsmanager_begegnung AS t2 ON t1.begegnung_id = t2.begegnung_id LEFT JOIN #__sportsmanager_spieler AS t3 ON t1.heim_spieler_1_id = t3.spieler_id LEFT JOIN #__sportsmanager_spieler AS t4 ON t1.heim_spieler_2_id = t4.spieler_id LEFT JOIN #__sportsmanager_spieler AS t5 ON t1.gast_spieler_1_id = t5.spieler_id LEFT JOIN #__sportsmanager_spieler AS t6 ON t1.gast_spieler_2_id = t6.spieler_id - WHERE t1.begegnung_id = " . $value->ID . " + WHERE t1.begegnung_id = " . $value->ID . " ORDER BY t1.teamspiel_nummer; "; @@ -11392,7 +11400,7 @@ function adminBegegnungenExportForm(): void } $dateiname = "Spielberichte " . $veranstaltung->bezeichnung; } - + $dateiname .= ".csv"; $dateiname = bereinigterDateiname($dateiname); ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind @@ -16348,12 +16356,6 @@ function termineEmailBenachrichtigung($termin_aktion_id, $ueberarbeiten = false) $from = $app->getCfg('mailfrom'); $fromName = $app->getCfg('fromname'); - $mode = 1; - $cc = null; - $bcc = null; - $attachment = null; - $replyTo = null; - $replyToName = null; if ($terminaktion->status == 2) { $subject = "Termin " . $aktion[$terminaktion->typ] . " beantragt: " . $terminaktion->bezeichnung . " am " . FormatierterTermin($terminaktion->erster_tag, $terminaktion->letzter_tag, true); $body = "

Das " . htmlentities_utf8($aktion[$terminaktion->typ]) . " des folgenden Termins wurde beantragt und wird nun von den Moderatoren geprüft. Sobald der Termin bearbeitet wurde, wird eine E-Mail-Benachrichtigung verschickt.

"; @@ -16363,17 +16365,16 @@ function termineEmailBenachrichtigung($termin_aktion_id, $ueberarbeiten = false) } $body .= "\r\n" . $termin_beschreibung . $termin_moderationsstatus . "
\r\n"; $mailer = Factory::getContainer()->get(MailerFactoryInterface::class)->createMailer(); + $mailer->setSender($from, $fromName); + $mailer->setSubject($subject); + $mailer->isHtml(true); + $mailer->setBody($body); foreach ($benachrichtigung_emails as $email) - $mailer->sendMail($from, $fromName, $email, $subject, $body, $mode, $cc, $bcc, $attachment, $replyTo, $replyToName); + $mailer->addBcc($email); + $mailer->send(); $from = $app->getCfg('mailfrom'); $fromName = $app->getCfg('fromname'); - $mode = 1; - $cc = null; - $bcc = null; - $attachment = null; - $replyTo = null; - $replyToName = null; if ($terminaktion->status == 2) { $subject = "Termin " . $aktion[$terminaktion->typ] . " beantragt von " . $terminaktion->aktion_user_name . ": " . $terminaktion->bezeichnung . " am " . FormatierterTermin($terminaktion->erster_tag, $terminaktion->letzter_tag, true); $body = "

Termin " . htmlentities_utf8($aktion[$terminaktion->typ]) . " beantragt:

\r\n"; @@ -16385,12 +16386,25 @@ function termineEmailBenachrichtigung($termin_aktion_id, $ueberarbeiten = false) $body = "

Termin " . htmlentities_utf8($aktion[$terminaktion->typ]) . " abgelehnt:

"; } $body .= "\r\n" . $termin_beschreibung . $termin_moderationsstatus . "
\r\n"; + $mailer = Factory::getContainer()->get(MailerFactoryInterface::class)->createMailer(); + $mailer->setSender($from, $fromName); + $mailer->setSubject($subject); + $mailer->isHtml(true); + $mailer->setBody($body); foreach ($benachrichtigung_moderatoren_informieren as $email) - $mailer->sendMail($from, $fromName, $email, $subject, $body, $mode, $cc, $bcc, $attachment, $replyTo, $replyToName); + $mailer->addBcc($email); + $mailer->send(); $body .= "

Bitte termin_aktion_id, -1) . "\">hier klicken, um den Termin zu moderieren.

\r\n"; + $mailer = Factory::getContainer()->get(MailerFactoryInterface::class)->createMailer(); + $mailer->setSender($from, $fromName); + $mailer->setSubject($subject); + $mailer->isHtml(true); + $mailer->setBody($body); foreach ($benachrichtigung_moderatoren_aendern as $email) - $mailer->sendMail($from, $fromName, $email, $subject, $body, $mode, $cc, $bcc, $attachment, $replyTo, $replyToName); + $mailer->addBcc($email); + $mailer->send(); + return true; } diff --git a/src/structure/components/com_sportsmanager/sportsmanager.php b/src/structure/components/com_sportsmanager/sportsmanager.php index 7e32269..8af4d69 100644 --- a/src/structure/components/com_sportsmanager/sportsmanager.php +++ b/src/structure/components/com_sportsmanager/sportsmanager.php @@ -4562,9 +4562,13 @@ function begegnungVerlegen(): void } $rows = $db->loadObjectList(); $mailer = Factory::getContainer()->get(MailerFactoryInterface::class)->createMailer(); + $mailer->setSender($mailfrom, $fromname); + $mailer->setSubject($subject); + $mailer->setBody($body); foreach ($rows as $row) { - $mailer->sendMail($mailfrom, $fromname, $row->email, $subject, $body); + $mailer->addBcc($row->email); } + $mailer->send(); begegnungVerlegenNotify($begegnung, $rows, $vorschlagendes_team_id, $heim_team, $gast_team); @@ -4711,9 +4715,13 @@ function begegnungVerlegen(): void } $rows = $db->loadObjectList(); $mailer = Factory::getContainer()->get(MailerFactoryInterface::class)->createMailer(); + $mailer->setSender($mailfrom, $fromname); + $mailer->setSubject($subject); + $mailer->setBody($body); foreach ($rows as $row) { - $mailer->sendMail($mailfrom, $fromname, $row->email, $subject, $body); + $mailer->addBcc($row->email); } + $mailer->send(); if (isJson()) { JSON_sportsmanager::JSON([]);