mirror of
https://github.com/Deutscher-Tischfussballbund/com_sportsmanager.git
synced 2026-06-10 06:27:52 +00:00
Merge pull request #84 from Deutscher-Tischfussballbund/feature/auto-email-missing-results
email reminder for tournament results
This commit is contained in:
@@ -21,14 +21,14 @@ require_once JPATH_SITE . '/components/com_sportsmanager/database/init.php';
|
|||||||
function UhrzeitWandlerDE(string $input): string {
|
function UhrzeitWandlerDE(string $input): string {
|
||||||
// mögliche Datumsformate
|
// mögliche Datumsformate
|
||||||
$formats = [
|
$formats = [
|
||||||
'Y-m-d H:i',
|
'Y-m-d H:i',
|
||||||
'd.m.Y H:i',
|
'd.m.Y H:i',
|
||||||
'd.m.Y H:i:s',
|
'd.m.Y H:i:s',
|
||||||
];
|
];
|
||||||
|
|
||||||
foreach ($formats as $format) {
|
foreach ($formats as $format) {
|
||||||
$dt = DateTime::createFromFormat($format, $input);
|
$dt = DateTime::createFromFormat($format, $input);
|
||||||
|
|
||||||
// prüfen, ob Parsing erfolgreich war UND das Datum exakt passt
|
// prüfen, ob Parsing erfolgreich war UND das Datum exakt passt
|
||||||
if ($dt && $dt->format($format) === $input) {
|
if ($dt && $dt->format($format) === $input) {
|
||||||
return $dt->format('Y-m-d H:i:s');
|
return $dt->format('Y-m-d H:i:s');
|
||||||
@@ -684,15 +684,12 @@ function adminEinstellungen(): void
|
|||||||
$spalte_mitglieder_zeigen = $jInput->get('spalte_mitglieder_zeigen', 0, 'INT');
|
$spalte_mitglieder_zeigen = $jInput->get('spalte_mitglieder_zeigen', 0, 'INT');
|
||||||
$turnierbaum_zeigen = $jInput->get('turnierbaum_zeigen', 0, 'INT');
|
$turnierbaum_zeigen = $jInput->get('turnierbaum_zeigen', 0, 'INT');
|
||||||
$termine_beantragen = $jInput->get('termine_beantragen', 0, 'INT');
|
$termine_beantragen = $jInput->get('termine_beantragen', 0, 'INT');
|
||||||
|
$enableEmailReminders = $jInput->get('enable_email_reminders', 0, 'INT');
|
||||||
|
|
||||||
$spielerimport_persoenliche_daten_vorauswahl = $jInput->get('spielerimport_persoenliche_daten_vorauswahl', 0, 'INT');
|
$spielerimport_persoenliche_daten_vorauswahl = $jInput->get('spielerimport_persoenliche_daten_vorauswahl', 0, 'INT');
|
||||||
|
|
||||||
$api_push_key = $jInput->get('api_push_key', '', 'RAW');
|
$api_push_key = $jInput->get('api_push_key', '', 'RAW');
|
||||||
|
|
||||||
/*
|
|
||||||
$twitter_benutzername = $db->escape(trim( $jInput->get('twitter_benutzername', '', 'RAW') ));
|
|
||||||
$twitter_kennwort = !empty($twitter_benutzername) ? $db->escape(trim( $jInput->get('twitter_kennwort', '', 'RAW') )) : "";
|
|
||||||
*/
|
|
||||||
|
|
||||||
$query = "REPLACE #__sportsmanager_einstellungen"
|
$query = "REPLACE #__sportsmanager_einstellungen"
|
||||||
. "\n SET name = 'basis_spielernr'"
|
. "\n SET name = 'basis_spielernr'"
|
||||||
. ", wert = '$basis_spielernr'";
|
. ", wert = '$basis_spielernr'";
|
||||||
@@ -803,6 +800,12 @@ function adminEinstellungen(): void
|
|||||||
die($db->stderr(true));
|
die($db->stderr(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$query = "REPLACE #__sportsmanager_einstellungen SET name = 'enable_email_reminders', wert = '$enableEmailReminders'";
|
||||||
|
$db->setQuery($query);
|
||||||
|
if (!$db->execute()) {
|
||||||
|
die($db->stderr(true));
|
||||||
|
}
|
||||||
|
|
||||||
redirectSportsManagerURL('&task=admin_uebersicht');
|
redirectSportsManagerURL('&task=admin_uebersicht');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -9615,7 +9618,7 @@ function adminBegegnungenImportieren(): void
|
|||||||
if ($encoding == "UTF-8")
|
if ($encoding == "UTF-8")
|
||||||
echo $data[$Titelzeile['Heim']];
|
echo $data[$Titelzeile['Heim']];
|
||||||
else
|
else
|
||||||
echo utf8_encode($data[$Titelzeile['Heim']]);
|
echo utf8_encode($data[$Titelzeile['Heim']]);
|
||||||
echo "</td>";
|
echo "</td>";
|
||||||
if ($Begegnung[$Zeile]['gast_team_id'] == "") {
|
if ($Begegnung[$Zeile]['gast_team_id'] == "") {
|
||||||
if ($data[$Titelzeile['Gast']] == "spielfrei") {
|
if ($data[$Titelzeile['Gast']] == "spielfrei") {
|
||||||
@@ -10260,7 +10263,7 @@ function adminBegegnungenPokalrundeAuslosenForm(): void
|
|||||||
if (!$db->execute()) {
|
if (!$db->execute()) {
|
||||||
die($db->stderr(true));
|
die($db->stderr(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId);
|
redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
@@ -10606,6 +10609,7 @@ function adminEditTurnier(): void
|
|||||||
$turnierort = $db->escape(trim($jInput->get('turnierort', '', 'RAW')));
|
$turnierort = $db->escape(trim($jInput->get('turnierort', '', 'RAW')));
|
||||||
$erster_tag = normalisiertesDatum(sprintf("%04d-%02d-%02d", $jInput->get('erster_tag_jahr', 2000, 'INT'), $jInput->get('erster_tag_monat', 1, 'INT'), $jInput->get('erster_tag_tag', 1, 'INT')));
|
$erster_tag = normalisiertesDatum(sprintf("%04d-%02d-%02d", $jInput->get('erster_tag_jahr', 2000, 'INT'), $jInput->get('erster_tag_monat', 1, 'INT'), $jInput->get('erster_tag_tag', 1, 'INT')));
|
||||||
$mehrtaegig = $jInput->get('mehrtaegig', 0, 'INT');
|
$mehrtaegig = $jInput->get('mehrtaegig', 0, 'INT');
|
||||||
|
$reminder_count = $jInput->get('reminder_count', 0, 'INT');
|
||||||
if (!$mehrtaegig)
|
if (!$mehrtaegig)
|
||||||
$letzter_tag = $erster_tag;
|
$letzter_tag = $erster_tag;
|
||||||
else
|
else
|
||||||
@@ -10629,7 +10633,20 @@ function adminEditTurnier(): void
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($id == 0) {
|
if ($id == 0) {
|
||||||
$query = "INSERT INTO #__sportsmanager_turnier (veranstalter_id, turnierbezeichnung, saison_id, turnierort, erster_tag" . ($letzter_tag != null ? ", letzter_tag" : "") . ", kategorie) VALUES ('$veranstalterId', '$turnierbezeichnung', '$saison_id', '$turnierort', '$erster_tag'" . ($letzter_tag != null ? ", '$letzter_tag'" : "") . ", '$kategorie');";
|
$query = $db->getQuery(true)
|
||||||
|
->select('wert')
|
||||||
|
->from('#__sportsmanager_einstellungen')
|
||||||
|
->where('name = ' . $db->quote('enable_email_reminders'));
|
||||||
|
$remindersEnabled = loadResult($db, $query);
|
||||||
|
|
||||||
|
$query = "INSERT INTO #__sportsmanager_turnier (veranstalter_id, turnierbezeichnung, saison_id, turnierort, erster_tag"
|
||||||
|
. ($letzter_tag != null ? ", letzter_tag" : "")
|
||||||
|
. ", kategorie, reminder_count) VALUES ('$veranstalterId', '$turnierbezeichnung', '$saison_id', '$turnierort', '$erster_tag'"
|
||||||
|
. ($letzter_tag != null ? ", '$letzter_tag'" : "")
|
||||||
|
. ", '$kategorie', "
|
||||||
|
. (!$remindersEnabled ? "'3'" : "'0'")
|
||||||
|
. ")";
|
||||||
|
|
||||||
$db->setQuery($query);
|
$db->setQuery($query);
|
||||||
if (!$db->execute()) {
|
if (!$db->execute()) {
|
||||||
die($db->stderr(true));
|
die($db->stderr(true));
|
||||||
@@ -10643,7 +10660,8 @@ function adminEditTurnier(): void
|
|||||||
. "\n turnierort = '$turnierort',"
|
. "\n turnierort = '$turnierort',"
|
||||||
. "\n erster_tag = '$erster_tag',"
|
. "\n erster_tag = '$erster_tag',"
|
||||||
. "\n letzter_tag = " . ($letzter_tag != null ? "'$letzter_tag'" : "NULL") . ","
|
. "\n letzter_tag = " . ($letzter_tag != null ? "'$letzter_tag'" : "NULL") . ","
|
||||||
. "\n kategorie = '$kategorie'"
|
. "\n kategorie = '$kategorie',"
|
||||||
|
. "\n reminder_count = '$reminder_count'"
|
||||||
. "\n WHERE turnier_id = $id";
|
. "\n WHERE turnier_id = $id";
|
||||||
$db->setQuery($query);
|
$db->setQuery($query);
|
||||||
if (!$db->execute()) {
|
if (!$db->execute()) {
|
||||||
|
|||||||
@@ -5300,11 +5300,11 @@ function updateDatabase(): void
|
|||||||
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'verband_anzeigen', wert = '1';";
|
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'verband_anzeigen', wert = '1';";
|
||||||
$db->setQuery( $query );
|
$db->setQuery( $query );
|
||||||
if (!$db->execute()) { die($db->stderr(true)); }
|
if (!$db->execute()) { die($db->stderr(true)); }
|
||||||
|
|
||||||
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'turnierbaum_zeigen', wert = '0';";
|
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'turnierbaum_zeigen', wert = '0';";
|
||||||
$db->setQuery( $query );
|
$db->setQuery( $query );
|
||||||
if (!$db->execute()) { die($db->stderr(true)); }
|
if (!$db->execute()) { die($db->stderr(true)); }
|
||||||
|
|
||||||
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'spalte_mitglieder_zeigen', wert = '1';";
|
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'spalte_mitglieder_zeigen', wert = '1';";
|
||||||
$db->setQuery( $query );
|
$db->setQuery( $query );
|
||||||
if (!$db->execute()) { die($db->stderr(true)); }
|
if (!$db->execute()) { die($db->stderr(true)); }
|
||||||
@@ -5331,7 +5331,7 @@ function updateDatabase(): void
|
|||||||
. "\n DROP INDEX `begegnung_id`, ADD UNIQUE `begegnung_id` (`begegnung_id`) USING BTREE;";
|
. "\n DROP INDEX `begegnung_id`, ADD UNIQUE `begegnung_id` (`begegnung_id`) USING BTREE;";
|
||||||
$db->setQuery( $query );
|
$db->setQuery( $query );
|
||||||
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 = '108'"
|
||||||
. "\n WHERE name = 'datenbank_version'";
|
. "\n WHERE name = 'datenbank_version'";
|
||||||
@@ -5341,6 +5341,30 @@ function updateDatabase(): void
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($datenbank_version < 109) {
|
||||||
|
$query = "ALTER TABLE #__sportsmanager_turnier ADD COLUMN `reminder_count` TINYINT DEFAULT '0'";
|
||||||
|
$db->setQuery($query);
|
||||||
|
if (!$db->execute()) { die($db->stderr(true)); }
|
||||||
|
|
||||||
|
// set all existing tournaments to 3 to prevent email flooding
|
||||||
|
$query = "UPDATE #__sportsmanager_turnier SET `reminder_count` = '3'";
|
||||||
|
$db->setQuery($query);
|
||||||
|
if (!$db->execute()) { die($db->stderr(true)); }
|
||||||
|
|
||||||
|
// 3: prevent email flood for past tournaments
|
||||||
|
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'enable_email_reminders', wert = '0';";
|
||||||
|
$db->setQuery( $query );
|
||||||
|
if (!$db->execute()) { die($db->stderr(true)); }
|
||||||
|
|
||||||
|
$query = "UPDATE #__sportsmanager_einstellungen"
|
||||||
|
. "\n SET wert = '109'"
|
||||||
|
. "\n WHERE name = 'datenbank_version'";
|
||||||
|
$db->setQuery($query);
|
||||||
|
if (!$db->execute()) {
|
||||||
|
die($db->stderr(true));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ($termin_aktionen_email_setzen) {
|
if ($termin_aktionen_email_setzen) {
|
||||||
$query = "SELECT aktion_user_id, termin_aktion_id"
|
$query = "SELECT aktion_user_id, termin_aktion_id"
|
||||||
. "\n FROM #__sportsmanager_termin_aktion";
|
. "\n FROM #__sportsmanager_termin_aktion";
|
||||||
|
|||||||
@@ -42,11 +42,14 @@ require_once JPATH_SITE . '/components/com_sportsmanager/views/sportsmanager/vie
|
|||||||
require_once JPATH_SITE . '/components/com_sportsmanager/views/sportsmanager/view_admin.php';
|
require_once JPATH_SITE . '/components/com_sportsmanager/views/sportsmanager/view_admin.php';
|
||||||
require_once JPATH_SITE . '/components/com_sportsmanager/views/sportsmanager/view_ticker.php';
|
require_once JPATH_SITE . '/components/com_sportsmanager/views/sportsmanager/view_ticker.php';
|
||||||
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/util/email.php';
|
||||||
require_once JPATH_SITE . '/components/com_sportsmanager/database/update.php'; // will also include init.php and util.php
|
require_once JPATH_SITE . '/components/com_sportsmanager/database/update.php'; // will also include init.php and util.php
|
||||||
|
|
||||||
initDatabase();
|
initDatabase();
|
||||||
updateDatabase();
|
updateDatabase();
|
||||||
|
|
||||||
|
sentEmailReminders();
|
||||||
|
|
||||||
if (isset($_POST['filter_saison_id']))
|
if (isset($_POST['filter_saison_id']))
|
||||||
setcookie('sportsmanager_filter_saison_id', $_POST['filter_saison_id'], time() + (60 * 60 * 24));
|
setcookie('sportsmanager_filter_saison_id', $_POST['filter_saison_id'], time() + (60 * 60 * 24));
|
||||||
else if (isset($_REQUEST['filter_saison_id']))
|
else if (isset($_REQUEST['filter_saison_id']))
|
||||||
@@ -1186,7 +1189,7 @@ function benutzerVeranstaltungModerator($veranstaltung_id = NULL): bool
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
$user_id = Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id;
|
$user_id = Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id;
|
||||||
$query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_veranstaltung INNER JOIN #__sportsmanager_veranstaltung ON veranstaltung_id = berechtigt_veranstaltung_id WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -14";
|
$query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_veranstaltung INNER JOIN #__sportsmanager_veranstaltung ON veranstaltung_id = berechtigt_veranstaltung_id WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -21";
|
||||||
if ($veranstaltung_id != NULL)
|
if ($veranstaltung_id != NULL)
|
||||||
$query .= " AND berechtigt_veranstaltung_id = $veranstaltung_id";
|
$query .= " AND berechtigt_veranstaltung_id = $veranstaltung_id";
|
||||||
$rows = loadObjectList($db, $query);
|
$rows = loadObjectList($db, $query);
|
||||||
@@ -1204,7 +1207,7 @@ function benutzerVeranstaltungIdsModerator(): array
|
|||||||
return array();
|
return array();
|
||||||
|
|
||||||
$user_id = Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id;
|
$user_id = Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id;
|
||||||
$query = "SELECT DISTINCT veranstaltung_id FROM #__sportsmanager_berechtigt_fuer_veranstaltung INNER JOIN #__sportsmanager_veranstaltung ON veranstaltung_id = berechtigt_veranstaltung_id WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -14";
|
$query = "SELECT DISTINCT veranstaltung_id FROM #__sportsmanager_berechtigt_fuer_veranstaltung INNER JOIN #__sportsmanager_veranstaltung ON veranstaltung_id = berechtigt_veranstaltung_id WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -21";
|
||||||
$rows = loadObjectList($db, $query);
|
$rows = loadObjectList($db, $query);
|
||||||
|
|
||||||
$ids = array();
|
$ids = array();
|
||||||
@@ -1222,7 +1225,7 @@ function benutzerTurnierModerator($turnier_id = NULL): bool
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
$user_id = Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id;
|
$user_id = Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id;
|
||||||
$query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_turnier INNER JOIN #__sportsmanager_turnier ON turnier_id = berechtigt_turnier_id WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -14";
|
$query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_turnier INNER JOIN #__sportsmanager_turnier ON turnier_id = berechtigt_turnier_id WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -21";
|
||||||
if ($turnier_id != NULL)
|
if ($turnier_id != NULL)
|
||||||
$query .= " AND berechtigt_turnier_id = $turnier_id";
|
$query .= " AND berechtigt_turnier_id = $turnier_id";
|
||||||
$rows = loadObjectList($db, $query);
|
$rows = loadObjectList($db, $query);
|
||||||
|
|||||||
@@ -201,7 +201,7 @@ function kategorieFilter($prefix, $suffix = ""): string
|
|||||||
function turnierFilter($prefix): string
|
function turnierFilter($prefix): string
|
||||||
{
|
{
|
||||||
$user_id = isExternalDatabase() ? 0 : Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id;
|
$user_id = isExternalDatabase() ? 0 : Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id;
|
||||||
return " " . $prefix . " (SELECT berechtigt_turnier_id FROM #__sportsmanager_berechtigt_fuer_turnier WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -14) ";
|
return " " . $prefix . " (SELECT berechtigt_turnier_id FROM #__sportsmanager_berechtigt_fuer_turnier WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -21) ";
|
||||||
}
|
}
|
||||||
|
|
||||||
function vereinFilter($prefix): string
|
function vereinFilter($prefix): string
|
||||||
@@ -219,7 +219,7 @@ function veranstalterFilter($prefix): string
|
|||||||
function veranstaltungFilter($prefix): string
|
function veranstaltungFilter($prefix): string
|
||||||
{
|
{
|
||||||
$user_id = isExternalDatabase() ? 0 : Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id;
|
$user_id = isExternalDatabase() ? 0 : Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id;
|
||||||
return " " . $prefix . " (SELECT berechtigt_veranstaltung_id FROM #__sportsmanager_berechtigt_fuer_veranstaltung INNER JOIN #__sportsmanager_veranstaltung ON veranstaltung_id = berechtigt_veranstaltung_id WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -14) ";
|
return " " . $prefix . " (SELECT berechtigt_veranstaltung_id FROM #__sportsmanager_berechtigt_fuer_veranstaltung INNER JOIN #__sportsmanager_veranstaltung ON veranstaltung_id = berechtigt_veranstaltung_id WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -21) ";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Berechnet Datum zum Montag der ersten Kalenderwoche eines Jahres
|
// Berechnet Datum zum Montag der ersten Kalenderwoche eines Jahres
|
||||||
|
|||||||
@@ -0,0 +1,125 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Joomla\CMS\Factory;
|
||||||
|
use Joomla\CMS\Log\Log;
|
||||||
|
use Joomla\CMS\Mail\MailerFactoryInterface;
|
||||||
|
use Joomla\CMS\Application\SiteApplication;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @since 2.2
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
function sentEmailReminders(): void
|
||||||
|
{
|
||||||
|
$app = Factory::getContainer()->get(SiteApplication::class);
|
||||||
|
$db = getDatabase();
|
||||||
|
|
||||||
|
$query = $db->getQuery(true)
|
||||||
|
->select('wert')
|
||||||
|
->from('#__sportsmanager_einstellungen')
|
||||||
|
->where('name = ' . $db->quote('enable_email_reminders'));
|
||||||
|
$row = loadResult($db, $query);
|
||||||
|
|
||||||
|
if (!$row) {
|
||||||
|
return; // quit when email reminders are disabled
|
||||||
|
}
|
||||||
|
|
||||||
|
$query = $db->getQuery(true)
|
||||||
|
->select('tournament.turnier_id, tournament.turnierbezeichnung, tournament.letzter_tag, tournament.reminder_count, GROUP_CONCAT(user.email SEPARATOR ", ") as emails')
|
||||||
|
->from($db->quoteName('#__sportsmanager_turnier', 'tournament'))
|
||||||
|
->join('INNER', $db->quoteName('#__sportsmanager_berechtigt_fuer_turnier', 'entitled') . ' ON tournament.turnier_id = entitled.berechtigt_turnier_id')
|
||||||
|
->join('INNER', $db->quoteName('#__users', 'user') . ' ON entitled.berechtigt_user_id = user.id')
|
||||||
|
->where('tournament.reminder_count < 3')
|
||||||
|
->group('tournament.turnier_id, tournament.turnierbezeichnung');
|
||||||
|
$rows = loadObjectList($db, $query);
|
||||||
|
|
||||||
|
if(!empty($rows)) {
|
||||||
|
$mailFrom = $app->getCfg('mailfrom');
|
||||||
|
$fromName = $app->getCfg('fromname');
|
||||||
|
|
||||||
|
$mailer = Factory::getContainer()->get(MailerFactoryInterface::class)->createMailer();
|
||||||
|
$mailer->setSender($mailFrom, $fromName);
|
||||||
|
foreach ($rows as $row) {
|
||||||
|
$currentReminder = $row->reminder_count + 1;
|
||||||
|
|
||||||
|
if (hasResultsAlready($db, $row)) {
|
||||||
|
updateDBReminders($db, $row, 3); // do not sent any more reminders
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isset($row->emails) || $row->emails == "" || $row->emails == NULL) {
|
||||||
|
Log::add('can\'t sent ' . $currentReminder .'. email reminder for tournament ' . $row->turnierbezeichnung . ': no recipient set', Log::WARNING, 'com_sportsmanager');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$now = new DateTime();
|
||||||
|
$last_day = new DateTime($row->letzter_tag);
|
||||||
|
$last_day->modify('+1 day'); // start to count at the end of the day, not at the beginning
|
||||||
|
$diff = $now->getTimestamp() - $last_day->getTimestamp();
|
||||||
|
|
||||||
|
$reminderDelays = [
|
||||||
|
1 => 24*60*60, // 24h
|
||||||
|
2 => 3*24*60*60, // 3d
|
||||||
|
3 => 13*24*60*60 // 13d
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach ($reminderDelays as $count => $delay) {
|
||||||
|
if ($diff >= $delay && $row->reminder_count < $count) {
|
||||||
|
$subject = ($row->reminder_count == 2 ? "Letzte " : "") . "Erinnerung: " . $row->turnierbezeichnung . " Ergebnisse einreichen!";
|
||||||
|
$body = "Hi,"
|
||||||
|
. "\n\nDies ist die " . $currentReminder . ". " . ($row->reminder_count == 2 ? "*und damit letzte* " : "") . "Erinnerung die Turnierergebnisse einzureichen."
|
||||||
|
. "\n\nTurnier: " . $row->turnierbezeichnung
|
||||||
|
. "\nTurnierende: " . FormatiertesDatum($row->letzter_tag, false, false)
|
||||||
|
. "\n\nLaut Turnierordnung müssen die Ergebnisse spätestens 24 Stunden nach Turnierende eingetragen werden. Bitte reich die Ergebnisse umgehend nach."
|
||||||
|
. "\n\nDu erhältst diese Mail, weil du als Berechtigter für das Turnier eingetragen wurdest. Falls du nicht der Veranstalter bist, leite diese Email bitte entsprechend weiter."
|
||||||
|
. "\n\nHochladen der Ergebnisse über " . SportsManagerURL('&task=admin_turnierdisziplinen&turnierid=' . $row->turnier_id, -1) . ".";
|
||||||
|
|
||||||
|
$mailer->setSubject($subject);
|
||||||
|
$mailer->setBody($body);
|
||||||
|
|
||||||
|
$emailArray = explode(", ", $row->emails);
|
||||||
|
foreach ($emailArray as $email) {
|
||||||
|
$mailer->addBcc($email);
|
||||||
|
}
|
||||||
|
$mailer->send();
|
||||||
|
|
||||||
|
updateDBReminders($db, $currentReminder, $row->turnier_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateDBReminders($db, $reminder, $tournamentId): void
|
||||||
|
{
|
||||||
|
$query = $db->getQuery(true)
|
||||||
|
->update($db->quoteName('#__sportsmanager_turnier'))
|
||||||
|
->set($db->quoteName('reminder_count') . ' = ' . $db->quote($reminder))
|
||||||
|
->where($db->quoteName('turnier_id') . ' = ' . $db->quote($tournamentId));
|
||||||
|
|
||||||
|
$db->setQuery($query);
|
||||||
|
$db->execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* checks if a tournament has at least one result entry for a discipline
|
||||||
|
* @param $db
|
||||||
|
* @param $row mixed tournament entry
|
||||||
|
* @return bool true if at least one result is given, else false
|
||||||
|
* @since 2.2
|
||||||
|
*/
|
||||||
|
function hasResultsAlready($db, mixed $row): bool
|
||||||
|
{
|
||||||
|
$subQuery = $db->getQuery(true)
|
||||||
|
->select($db->quoteName('turnierdisziplin_id'))
|
||||||
|
->from($db->quoteName('#__sportsmanager_turnierdisziplin'))
|
||||||
|
->where($db->quoteName('turnier_id') . ' = ' . $db->quote($row->turnier_id));
|
||||||
|
|
||||||
|
$query = $db->getQuery(true)
|
||||||
|
->select('COUNT(*) AS count')
|
||||||
|
->from($db->quoteName('#__sportsmanager_turniermeldung', 'tm'))
|
||||||
|
->where($db->quoteName('tm.turnierdisziplin_id') . ' IN (' . $subQuery . ')');
|
||||||
|
|
||||||
|
$result = loadResult($db, $query);
|
||||||
|
return $result && $result[0]->count > 0;
|
||||||
|
}
|
||||||
@@ -737,8 +737,9 @@ class HTML_sportsmanager_admin
|
|||||||
</td>
|
</td>
|
||||||
<td nowrap>
|
<td nowrap>
|
||||||
<input style='height: 34px;' class="uk-select uk-form-width-medium" type="text"
|
<input style='height: 34px;' class="uk-select uk-form-width-medium" type="text"
|
||||||
|
id="show_member_count"
|
||||||
value= <?php echo $einstellungen["anzahl_mitglieder_zeigen"]; ?>
|
value= <?php echo $einstellungen["anzahl_mitglieder_zeigen"]; ?>
|
||||||
id="show_member_count" name="anzahl_mitglieder_zeigen" placeholder="Zahl eingeben">
|
name="anzahl_mitglieder_zeigen" placeholder="Zahl eingeben">
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -876,6 +877,22 @@ class HTML_sportsmanager_admin
|
|||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td nowrap style="width: 20%; text-align: right">
|
||||||
|
<label
|
||||||
|
for="enable_email_reminders"><?php echo Text::_('COM_SPORTSMANAGER_USE_EMAIL_REMINDERS'); ?>
|
||||||
|
:</label>
|
||||||
|
</td>
|
||||||
|
<td nowrap>
|
||||||
|
<select class="uk-select uk-form-width-medium" name="enable_email_reminders"
|
||||||
|
id="enable_email_reminders" size="1">
|
||||||
|
<?php
|
||||||
|
echo "<option value='1'" . (isset($einstellungen['enable_email_reminders']) && $einstellungen['enable_email_reminders'] == 1 ? " selected" : "") . ">" . htmlentities_utf8(Text::_('JYES')) . "</option>";
|
||||||
|
echo "<option value='0'" . (isset($einstellungen['enable_email_reminders']) && $einstellungen['enable_email_reminders'] == 0 ? " selected" : "") . ">" . htmlentities_utf8(Text::_('JNO')) . "</option>";
|
||||||
|
?>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td nowrap colspan="2">
|
<td nowrap colspan="2">
|
||||||
|
|
||||||
@@ -11369,20 +11386,6 @@ class HTML_sportsmanager_admin
|
|||||||
class="componentheading<?php echo $params->get('pageclass_sfx'); ?>"><?php echo Text::_('COM_SPORTSMANAGER_TOURNAMENT'); ?>
|
class="componentheading<?php echo $params->get('pageclass_sfx'); ?>"><?php echo Text::_('COM_SPORTSMANAGER_TOURNAMENT'); ?>
|
||||||
: <?php echo($row != null ? ($vorlage ? Text::_('COM_SPORTSMANAGER_ADD_VIA_TEMPLATE') : Text::_('COM_SPORTSMANAGER_CHANGING')) : Text::_('COM_SPORTSMANAGER_ADD')); ?></div>
|
: <?php echo($row != null ? ($vorlage ? Text::_('COM_SPORTSMANAGER_ADD_VIA_TEMPLATE') : Text::_('COM_SPORTSMANAGER_CHANGING')) : Text::_('COM_SPORTSMANAGER_ADD')); ?></div>
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
function letzter_tag_anzeigen() {
|
|
||||||
if (document.getElementById("row_letzter_tag").style.display !== '') {
|
|
||||||
document.getElementById("row_letzter_tag").style.display = '';
|
|
||||||
document.getElementById("button_mehrtaegig").value = 'Eintägig'
|
|
||||||
document.adminForm.mehrtaegig.value = 1;
|
|
||||||
} else {
|
|
||||||
document.getElementById("row_letzter_tag").style.display = 'none';
|
|
||||||
document.getElementById("button_mehrtaegig").value = 'Mehrtägig'
|
|
||||||
document.adminForm.mehrtaegig.value = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<form action="<?php echo SportsManagerURL(); ?>" method="post" name="adminForm" id="adminForm">
|
<form action="<?php echo SportsManagerURL(); ?>" method="post" name="adminForm" id="adminForm">
|
||||||
<div class="uk-overflow-auto">
|
<div class="uk-overflow-auto">
|
||||||
<table class="uk-table" style="width: 100%">
|
<table class="uk-table" style="width: 100%">
|
||||||
@@ -11565,8 +11568,8 @@ class HTML_sportsmanager_admin
|
|||||||
<td nowrap>
|
<td nowrap>
|
||||||
<select class="uk-select uk-form-width-medium"
|
<select class="uk-select uk-form-width-medium"
|
||||||
name="berechtigt_fuer_turnier_user_<?php echo $nummer; ?>_id"
|
name="berechtigt_fuer_turnier_user_<?php echo $nummer; ?>_id"
|
||||||
aria-label="<?php echo Text::_('COM_SPORTSMANAGER_ARIA_LABEL_ELIGIBLE_USER'); ?>"
|
id="eligible_for_tournament_<?php echo $nummer; ?>_id"
|
||||||
size="1">
|
aria-label="<?php echo Text::_('COM_SPORTSMANAGER_ARIA_LABEL_ELIGIBLE_USER'); ?>">
|
||||||
<option value="0"></option>
|
<option value="0"></option>
|
||||||
<?php
|
<?php
|
||||||
foreach ($users as $user)
|
foreach ($users as $user)
|
||||||
@@ -11579,6 +11582,7 @@ class HTML_sportsmanager_admin
|
|||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr id='eligible_for_tournament-error'></tr>
|
||||||
</table>
|
</table>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -11595,14 +11599,51 @@ class HTML_sportsmanager_admin
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<input type="submit" name="save" value="<?php echo Text::_('COM_SPORTSMANAGER_SAVE'); ?>" class="button"/>
|
<input type="submit" name="save" value="<?php echo Text::_('COM_SPORTSMANAGER_SAVE'); ?>" class="button"/>
|
||||||
<input type="submit" name="cancel" value="<?php echo Text::_('COM_SPORTSMANAGER_CANCEL'); ?>"
|
<input type="button" name="cancel" value="<?php echo Text::_('COM_SPORTSMANAGER_CANCEL'); ?>"
|
||||||
|
onclick="window.location.href='<?php echo SportsManagerURL(); ?>'"
|
||||||
class="button"/>
|
class="button"/>
|
||||||
<input type="hidden" name="task" value="admin_turnier_save"/>
|
<input type="hidden" name="task" value="admin_turnier_save"/>
|
||||||
<input type="hidden" name="id" value="<?php echo($row != null ? $row->turnier_id : "0"); ?>"/>
|
<input type="hidden" name="id" value="<?php echo($row != null ? $row->turnier_id : "0"); ?>"/>
|
||||||
<input type="hidden" name="vorlage" value="<?php echo $vorlage; ?>"/>
|
<input type="hidden" name="vorlage" value="<?php echo $vorlage; ?>"/>
|
||||||
<input type="hidden" name="mehrtaegig"
|
<input type="hidden" name="mehrtaegig"
|
||||||
value="<?php echo !empty($row) && $row->erster_tag != $row->letzter_tag ? "1" : "0"; ?>"/>
|
value="<?php echo !empty($row) && $row->erster_tag != $row->letzter_tag ? "1" : "0"; ?>"/>
|
||||||
|
<input type="hidden" name="reminder_count"
|
||||||
|
value="<?php echo !empty($row) ? $row->reminder_count : "0"; ?>"/>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
function letzter_tag_anzeigen() {
|
||||||
|
if (document.getElementById("row_letzter_tag").style.display !== '') {
|
||||||
|
document.getElementById("row_letzter_tag").style.display = '';
|
||||||
|
document.getElementById("button_mehrtaegig").value = 'Eintägig'
|
||||||
|
document.adminForm.mehrtaegig.value = 1;
|
||||||
|
} else {
|
||||||
|
document.getElementById("row_letzter_tag").style.display = 'none';
|
||||||
|
document.getElementById("button_mehrtaegig").value = 'Mehrtägig'
|
||||||
|
document.adminForm.mehrtaegig.value = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
document.getElementById('adminForm').addEventListener('submit', function(e) {
|
||||||
|
// Get all selects
|
||||||
|
const selects = this.querySelectorAll('[id^="eligible_for_tournament_"]');
|
||||||
|
let valid = false;
|
||||||
|
|
||||||
|
// Check if at least one has a value
|
||||||
|
selects.forEach(select => {
|
||||||
|
if (select.value !== '0') {
|
||||||
|
valid = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!valid) {
|
||||||
|
e.preventDefault(); // Stop form submission
|
||||||
|
document.getElementById('eligible_for_tournament-error').innerHTML = "<td colspan='2' style='color: red'>Please select at least one organizer.</td>";
|
||||||
|
} else {
|
||||||
|
document.getElementById('eligible_for_tournament-error').innerHTML = ""; // Clear error
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
<?php
|
<?php
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
; Sports Manager (C) 2006-2020, Sven Nickel (Test)
|
; Sports Manager (C) 2006-2020, Sven Nickel (Test)
|
||||||
COM_SPORTSMANAGER="Sports Manager"
|
COM_SPORTSMANAGER="Sports Manager"
|
||||||
COM_SPORTSMANAGER_PLAYERS="Spieler"
|
COM_SPORTSMANAGER_PLAYERS="Spieler"
|
||||||
COM_SPORTSMANAGER_CLUBS="Vereine"
|
COM_SPORTSMANAGER_CLUBS="Vereine"
|
||||||
@@ -1013,3 +1013,4 @@ COM_SPORTSMANAGER_ARIA_LABEL_CLUB="Verein"
|
|||||||
COM_SPORTSMANAGER_NUM_REQUESTED_SHIFTS="Verschiebungen"
|
COM_SPORTSMANAGER_NUM_REQUESTED_SHIFTS="Verschiebungen"
|
||||||
COM_SPORTSMANAGER_NUM_REQUESTED_SHFITS_TOOLTIP="Spielverschiebungen durch diese Mannschaft"
|
COM_SPORTSMANAGER_NUM_REQUESTED_SHFITS_TOOLTIP="Spielverschiebungen durch diese Mannschaft"
|
||||||
COM_SPORTSMANAGER_GAME_RESULT_DELAYS="Verzögerung"
|
COM_SPORTSMANAGER_GAME_RESULT_DELAYS="Verzögerung"
|
||||||
|
COM_SPORTSMANAGER_USE_EMAIL_REMINDERS="Verwende Email Erinnerungen"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
; Sports Manager (C) 2006-2020, Sven Nickel
|
; Sports Manager (C) 2006-2020, Sven Nickel
|
||||||
COM_SPORTSMANAGER="Sports Manager"
|
COM_SPORTSMANAGER="Sports Manager"
|
||||||
COM_SPORTSMANAGER_PLAYERS="Players"
|
COM_SPORTSMANAGER_PLAYERS="Players"
|
||||||
COM_SPORTSMANAGER_CLUBS="Clubs"
|
COM_SPORTSMANAGER_CLUBS="Clubs"
|
||||||
@@ -1011,3 +1011,4 @@ COM_SPORTSMANAGER_ARIA_LABEL_CLUB="Club"
|
|||||||
COM_SPORTSMANAGER_NUM_REQUESTED_SHIFTS="Shifts"
|
COM_SPORTSMANAGER_NUM_REQUESTED_SHIFTS="Shifts"
|
||||||
COM_SPORTSMANAGER_NUM_REQUESTED_SHFITS_TOOLTIP="Game shifts caused by this team"
|
COM_SPORTSMANAGER_NUM_REQUESTED_SHFITS_TOOLTIP="Game shifts caused by this team"
|
||||||
COM_SPORTSMANAGER_GAME_RESULT_DELAYS="Delay"
|
COM_SPORTSMANAGER_GAME_RESULT_DELAYS="Delay"
|
||||||
|
COM_SPORTSMANAGER_USE_EMAIL_REMINDERS="Use email reminders"
|
||||||
|
|||||||
@@ -905,6 +905,7 @@ return new class () implements InstallerScriptInterface
|
|||||||
. "\n `erster_tag` date NOT NULL DEFAULT '0000-00-00',"
|
. "\n `erster_tag` date NOT NULL DEFAULT '0000-00-00',"
|
||||||
. "\n `letzter_tag` date DEFAULT NULL,"
|
. "\n `letzter_tag` date DEFAULT NULL,"
|
||||||
. "\n `kategorie` tinyint(4) DEFAULT '1',"
|
. "\n `kategorie` tinyint(4) DEFAULT '1',"
|
||||||
|
. "\n `reminder_count` tinyint DEFAULT '0',"
|
||||||
. "\n PRIMARY KEY (`turnier_id`),"
|
. "\n PRIMARY KEY (`turnier_id`),"
|
||||||
. "\n KEY `saison_id` (`saison_id`),"
|
. "\n KEY `saison_id` (`saison_id`),"
|
||||||
. "\n KEY `veranstalter_id` (`veranstalter_id`)"
|
. "\n KEY `veranstalter_id` (`veranstalter_id`)"
|
||||||
@@ -1117,7 +1118,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 = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'datenbank_version', wert = '107';";
|
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'datenbank_version', wert = '108';";
|
||||||
$db->setQuery( $query );
|
$db->setQuery( $query );
|
||||||
if (!$db->execute()) { die($db->stderr(true)); }
|
if (!$db->execute()) { die($db->stderr(true)); }
|
||||||
|
|
||||||
@@ -1144,15 +1145,19 @@ return new class () implements InstallerScriptInterface
|
|||||||
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'verband_anzeigen', wert = '1';";
|
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'verband_anzeigen', wert = '1';";
|
||||||
$db->setQuery( $query );
|
$db->setQuery( $query );
|
||||||
if (!$db->execute()) { die($db->stderr(true)); }
|
if (!$db->execute()) { die($db->stderr(true)); }
|
||||||
|
|
||||||
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'turnierbaum_zeigen', wert = '0';";
|
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'turnierbaum_zeigen', wert = '0';";
|
||||||
$db->setQuery( $query );
|
$db->setQuery( $query );
|
||||||
if (!$db->execute()) { die($db->stderr(true)); }
|
if (!$db->execute()) { die($db->stderr(true)); }
|
||||||
|
|
||||||
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'spalte_mitglieder_zeigen', wert = '1';";
|
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'spalte_mitglieder_zeigen', wert = '1';";
|
||||||
$db->setQuery( $query );
|
$db->setQuery( $query );
|
||||||
if (!$db->execute()) { die($db->stderr(true)); }
|
if (!$db->execute()) { die($db->stderr(true)); }
|
||||||
|
|
||||||
|
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'enable_email_reminders', wert = '0';";
|
||||||
|
$db->setQuery( $query );
|
||||||
|
if (!$db->execute()) { die($db->stderr(true)); }
|
||||||
|
|
||||||
$query = "INSERT INTO #__sportsmanager_verschieberegel (bezeichnung, initial_ohne_termin, keine_gegenvorschlaege, vorlaufzeit_tage, termine_minimal, termine_maximal, ablehnen)"
|
$query = "INSERT INTO #__sportsmanager_verschieberegel (bezeichnung, initial_ohne_termin, keine_gegenvorschlaege, vorlaufzeit_tage, termine_minimal, termine_maximal, ablehnen)"
|
||||||
. "\n VALUES ('Beliebig', '0', '0', '0', '1', '3', '0');";
|
. "\n VALUES ('Beliebig', '0', '0', '0', '1', '3', '0');";
|
||||||
$db->setQuery($query);
|
$db->setQuery($query);
|
||||||
|
|||||||
Reference in New Issue
Block a user