Add flash messaging for newsletter actions in index.php and wiki.php. Implemented session handling for success and error messages, and added redirection after form submissions to enhance user experience.

This commit is contained in:
smueller
2026-07-07 10:44:07 +02:00
parent 7e3c186419
commit ecd7d2b341
2 changed files with 58 additions and 2 deletions

View File

@@ -726,6 +726,15 @@ $error = '';
$previewHtml = ''; $previewHtml = '';
$previewClipboardHtml = ''; $previewClipboardHtml = '';
$flash = $_SESSION['wiki_newsletter_flash'] ?? null;
if (is_array($flash)) {
$message = (string)($flash['message'] ?? '');
$error = (string)($flash['error'] ?? '');
$previewHtml = (string)($flash['preview_html'] ?? '');
$previewClipboardHtml = (string)($flash['preview_clipboard_html'] ?? '');
unset($_SESSION['wiki_newsletter_flash']);
}
$isCron = (PHP_SAPI === 'cli' && cliArg('cron') !== null) || isset($_GET['cron']); $isCron = (PHP_SAPI === 'cli' && cliArg('cron') !== null) || isset($_GET['cron']);
if ($isCron) { if ($isCron) {
@@ -755,6 +764,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'login
} }
if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') !== 'login') { if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') !== 'login') {
$redirectUrl = strtok($_SERVER['REQUEST_URI'], '?');
try { try {
requireAdmin(); requireAdmin();
$config = configFromPost($config); $config = configFromPost($config);
@@ -774,9 +785,24 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') !== 'login
} elseif ($action === 'monthly_send') { } elseif ($action === 'monthly_send') {
$message = sendMonthlyIfDue($config); $message = sendMonthlyIfDue($config);
} }
$_SESSION['wiki_newsletter_flash'] = [
'message' => $message,
'error' => '',
'preview_html' => $previewHtml,
'preview_clipboard_html' => $previewClipboardHtml,
];
} catch (Throwable $e) { } catch (Throwable $e) {
$error = $e->getMessage(); $_SESSION['wiki_newsletter_flash'] = [
'message' => '',
'error' => $e->getMessage(),
'preview_html' => '',
'preview_clipboard_html' => '',
];
} }
header('Location: ' . $redirectUrl);
exit;
} }
$isLoggedIn = isAdminLoggedIn(); $isLoggedIn = isAdminLoggedIn();

View File

@@ -170,6 +170,10 @@ function fetchLatestArticles(string $wikiUrl, int $limit = 150): array
$nodes = $xpath->query('//li'); $nodes = $xpath->query('//li');
foreach ($nodes as $li) { foreach ($nodes as $li) {
if (!$li instanceof DOMElement) {
continue;
}
$text = trim(preg_replace('/\s+/', ' ', $li->textContent ?? '')); $text = trim(preg_replace('/\s+/', ' ', $li->textContent ?? ''));
if (!preg_match('/\((\d{2}\.\d{2}\.\d{4})\)/', $text, $dateMatch)) { if (!preg_match('/\((\d{2}\.\d{2}\.\d{4})\)/', $text, $dateMatch)) {
@@ -722,6 +726,15 @@ $error = '';
$previewHtml = ''; $previewHtml = '';
$previewClipboardHtml = ''; $previewClipboardHtml = '';
$flash = $_SESSION['wiki_newsletter_flash'] ?? null;
if (is_array($flash)) {
$message = (string)($flash['message'] ?? '');
$error = (string)($flash['error'] ?? '');
$previewHtml = (string)($flash['preview_html'] ?? '');
$previewClipboardHtml = (string)($flash['preview_clipboard_html'] ?? '');
unset($_SESSION['wiki_newsletter_flash']);
}
$isCron = (PHP_SAPI === 'cli' && cliArg('cron') !== null) || isset($_GET['cron']); $isCron = (PHP_SAPI === 'cli' && cliArg('cron') !== null) || isset($_GET['cron']);
if ($isCron) { if ($isCron) {
@@ -751,6 +764,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'login
} }
if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') !== 'login') { if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') !== 'login') {
$redirectUrl = strtok($_SERVER['REQUEST_URI'], '?');
try { try {
requireAdmin(); requireAdmin();
$config = configFromPost($config); $config = configFromPost($config);
@@ -770,9 +785,24 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') !== 'login
} elseif ($action === 'monthly_send') { } elseif ($action === 'monthly_send') {
$message = sendMonthlyIfDue($config); $message = sendMonthlyIfDue($config);
} }
$_SESSION['wiki_newsletter_flash'] = [
'message' => $message,
'error' => '',
'preview_html' => $previewHtml,
'preview_clipboard_html' => $previewClipboardHtml,
];
} catch (Throwable $e) { } catch (Throwable $e) {
$error = $e->getMessage(); $_SESSION['wiki_newsletter_flash'] = [
'message' => '',
'error' => $e->getMessage(),
'preview_html' => '',
'preview_clipboard_html' => '',
];
} }
header('Location: ' . $redirectUrl);
exit;
} }
$isLoggedIn = isAdminLoggedIn(); $isLoggedIn = isAdminLoggedIn();