mirror of
https://github.com/Deutscher-Tischfussballbund/com_sportsmanager.git
synced 2026-06-10 06:27:52 +00:00
feat: add email reminder functionality
This commit is contained in:
@@ -1,45 +0,0 @@
|
|||||||
<?php
|
|
||||||
// Migration script to add reminder fields to #__sportsmanager_turnier
|
|
||||||
// Usage: php scripts/migrate_add_reminder_fields.php
|
|
||||||
|
|
||||||
use Joomla\CMS\Factory;
|
|
||||||
|
|
||||||
if (!defined('_JEXEC')) {
|
|
||||||
define('_JEXEC', 1);
|
|
||||||
define('JPATH_BASE', dirname(__DIR__, 6));
|
|
||||||
require_once JPATH_BASE . '/includes/defines.php';
|
|
||||||
require_once JPATH_BASE . '/includes/framework.php';
|
|
||||||
}
|
|
||||||
|
|
||||||
function addReminderFieldsToTurnierTable()
|
|
||||||
{
|
|
||||||
$db = Factory::getDbo();
|
|
||||||
$columns = [
|
|
||||||
'reminder_24h_sent',
|
|
||||||
'reminder_3d_sent',
|
|
||||||
'reminder_7d_sent',
|
|
||||||
];
|
|
||||||
// Check if columns already exist
|
|
||||||
$db->setQuery("SHOW COLUMNS FROM #__sportsmanager_turnier");
|
|
||||||
$existing = array_column($db->loadAssocList(), 'Field');
|
|
||||||
$alter = [];
|
|
||||||
if (!in_array('reminder_24h_sent', $existing)) {
|
|
||||||
$alter[] = 'ADD COLUMN `reminder_24h_sent` DATETIME DEFAULT NULL';
|
|
||||||
}
|
|
||||||
if (!in_array('reminder_3d_sent', $existing)) {
|
|
||||||
$alter[] = 'ADD COLUMN `reminder_3d_sent` DATETIME DEFAULT NULL';
|
|
||||||
}
|
|
||||||
if (!in_array('reminder_7d_sent', $existing)) {
|
|
||||||
$alter[] = 'ADD COLUMN `reminder_7d_sent` DATETIME DEFAULT NULL';
|
|
||||||
}
|
|
||||||
if ($alter) {
|
|
||||||
$query = 'ALTER TABLE #__sportsmanager_turnier ' . implode(', ', $alter);
|
|
||||||
$db->setQuery($query);
|
|
||||||
$db->execute();
|
|
||||||
echo "Migration successful: reminder fields added.\n";
|
|
||||||
} else {
|
|
||||||
echo "Migration skipped: fields already exist.\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
addReminderFieldsToTurnierTable();
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
<?php
|
|
||||||
// CLI script to send reminder emails for missing tournament results
|
|
||||||
use Joomla\CMS\Factory;
|
|
||||||
use Joomla\CMS\Mail\MailerFactoryInterface;
|
|
||||||
|
|
||||||
// Bootstrap Joomla if needed
|
|
||||||
if (!defined('_JEXEC')) {
|
|
||||||
define('_JEXEC', 1);
|
|
||||||
define('JPATH_BASE', dirname(__DIR__, 6));
|
|
||||||
require_once JPATH_BASE . '/includes/defines.php';
|
|
||||||
require_once JPATH_BASE . '/includes/framework.php';
|
|
||||||
}
|
|
||||||
|
|
||||||
function sendMissingTournamentResultsReminders()
|
|
||||||
{
|
|
||||||
$db = Factory::getDbo();
|
|
||||||
$now = date('Y-m-d H:i:s');
|
|
||||||
$oneDayAgo = date('Y-m-d H:i:s', strtotime('-1 day'));
|
|
||||||
$twoWeeksAgo = date('Y-m-d H:i:s', strtotime('-2 week'));
|
|
||||||
|
|
||||||
// Query tournaments that ended between 2 weeks ago and 1 day ago, with missing results
|
|
||||||
$query = $db->getQuery(true)
|
|
||||||
->select('t.*, u.email AS user_email, v.email AS verband_email')
|
|
||||||
->from('#__sportsmanager_turnier AS t')
|
|
||||||
->leftJoin('#__users AS u ON t.responsible_user_id = u.id')
|
|
||||||
->leftJoin('#__sportsmanager_verband AS v ON t.verband_id = v.verband_id')
|
|
||||||
->where('t.letzter_tag BETWEEN ' . $db->quote($twoWeeksAgo) . ' AND ' . $db->quote($oneDayAgo))
|
|
||||||
->where('NOT EXISTS (SELECT 1 FROM #__sportsmanager_turnierergebnis e WHERE e.turnier_id = t.turnier_id)')
|
|
||||||
->where('(t.reminder_sent IS NULL OR t.reminder_sent < DATE_SUB(' . $db->quote($now) . ', INTERVAL 1 DAY))');
|
|
||||||
$db->setQuery($query);
|
|
||||||
$tournaments = $db->loadObjectList();
|
|
||||||
|
|
||||||
foreach ($tournaments as $tournament) {
|
|
||||||
$mailer = Factory::getContainer()->get(MailerFactoryInterface::class)->createMailer();
|
|
||||||
$config = Factory::getConfig();
|
|
||||||
$mailer->setSender([$config->get('mailfrom'), $config->get('fromname')]);
|
|
||||||
$mailer->setSubject('Erinnerung: Turnierergebnisse fehlen für ' . $tournament->turnierbezeichnung);
|
|
||||||
$body = "Für das Turnier '" . $tournament->turnierbezeichnung . "' am " . $tournament->letzter_tag .
|
|
||||||
" wurden noch keine Ergebnisse hochgeladen. Laut Turnierordnung müssen die Ergebnisse spätestens 24 Stunden nach Turnierende eingetragen werden. Bitte reichen Sie die Ergebnisse umgehend nach.";
|
|
||||||
$mailer->setBody($body);
|
|
||||||
$mailer->addRecipient($tournament->user_email);
|
|
||||||
if (!empty($tournament->verband_email)) {
|
|
||||||
$mailer->addBcc($tournament->verband_email);
|
|
||||||
}
|
|
||||||
$mailer->send();
|
|
||||||
|
|
||||||
// Mark reminder as sent (or log in a separate table for multiple reminders)
|
|
||||||
$db->setQuery('UPDATE #__sportsmanager_turnier SET reminder_sent = ' . $db->quote($now) . ' WHERE turnier_id = ' . (int)$tournament->turnier_id);
|
|
||||||
$db->execute();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sendMissingTournamentResultsReminders();
|
|
||||||
@@ -661,15 +661,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'";
|
||||||
@@ -780,6 +777,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');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10218,7 +10221,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{
|
||||||
@@ -10564,6 +10567,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
|
||||||
@@ -10587,7 +10591,7 @@ 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 = "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', '0');";
|
||||||
$db->setQuery($query);
|
$db->setQuery($query);
|
||||||
if (!$db->execute()) {
|
if (!$db->execute()) {
|
||||||
die($db->stderr(true));
|
die($db->stderr(true));
|
||||||
@@ -10601,7 +10605,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)); }
|
||||||
@@ -5318,6 +5318,24 @@ function updateDatabase(): void
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($datenbank_version < 108) {
|
||||||
|
$query = "ALTER TABLE #__sportsmanager_turnier ADD COLUMN `reminder_count` TINYINT DEFAULT '3'"; // 3: prevent email flood for past tournaments
|
||||||
|
$db->setQuery($query);
|
||||||
|
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 = "UPDATE #__sportsmanager_einstellungen"
|
||||||
|
. "\n SET wert = '108'"
|
||||||
|
. "\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']))
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -727,9 +727,10 @@ class HTML_sportsmanager_admin
|
|||||||
:</label>
|
:</label>
|
||||||
</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>
|
||||||
@@ -867,6 +868,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">
|
||||||
|
|
||||||
@@ -10455,7 +10472,7 @@ class HTML_sportsmanager_admin
|
|||||||
</datalist>
|
</datalist>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<?php if ($veranstaltung->tabellenwertung == -4){ ?>
|
<?php if ($veranstaltung->tabellenwertung == -4){ ?>
|
||||||
<tr>
|
<tr>
|
||||||
<td nowrap style="width: 20%; text-align: right">
|
<td nowrap style="width: 20%; text-align: right">
|
||||||
<label for="heimrecht_losen"><?php echo Text::_('COM_SPORTSMANAGER_DRAW_FOR_HOME'); ?>
|
<label for="heimrecht_losen"><?php echo Text::_('COM_SPORTSMANAGER_DRAW_FOR_HOME'); ?>
|
||||||
@@ -10472,7 +10489,7 @@ class HTML_sportsmanager_admin
|
|||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
<?php if ($veranstaltung->letzteRunde == $veranstaltung->naechsteRunde) {$display = "";} else {$display = "none";} ?>
|
<?php if ($veranstaltung->letzteRunde == $veranstaltung->naechsteRunde) {$display = "";} else {$display = "none";} ?>
|
||||||
<tr style='display: <?php echo $display; ?>;'>
|
<tr style='display: <?php echo $display; ?>;'>
|
||||||
<td nowrap style="width: 20%; text-align: right">
|
<td nowrap style="width: 20%; text-align: right">
|
||||||
@@ -11360,20 +11377,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%">
|
||||||
@@ -11556,8 +11559,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)
|
||||||
@@ -11570,6 +11573,7 @@ class HTML_sportsmanager_admin
|
|||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr id='eligible_for_tournament-error'></tr>
|
||||||
</table>
|
</table>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -11586,14 +11590,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