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();
|
||||
Reference in New Issue
Block a user