Merge pull request #84 from Deutscher-Tischfussballbund/feature/auto-email-missing-results

email reminder for tournament results
This commit is contained in:
MarvinF
2025-09-26 16:51:54 +02:00
committed by GitHub
9 changed files with 262 additions and 44 deletions
@@ -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">&nbsp; <td nowrap colspan="2">&nbsp;
@@ -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"
+9 -4
View File
@@ -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);