diff --git a/web/intranet_repo/projects/contentpanel/insertion/insert.php b/web/intranet_repo/projects/contentpanel/insertion/insert.php index 53c01d9..83866ab 100644 --- a/web/intranet_repo/projects/contentpanel/insertion/insert.php +++ b/web/intranet_repo/projects/contentpanel/insertion/insert.php @@ -8,7 +8,7 @@ if (!isset($groups["Allgemein"]) || $groups["Allgemein"] != 1) { exit(); } -// Abgelaufene News samt PDF und PNGs entfernen +// Abgelaufene Aushänge entfernen cleanupExpiredNews(); @@ -22,11 +22,6 @@ function sanitizeFileName($fileName) { return preg_replace('/[^A-Za-z0-9_\-]/', '_', str_replace(' ', '_', $fileName)); } -// Hilfsfunktion, um den Dateinamen zu generieren -function generateFileName($date, $name, $extension) { - return $date . '-' . $name . '.' . $extension; -} - /** PDF -> Text per pdftotext (Poppler) */ function pdfToText($pdfFullPath) { $bin = trim(shell_exec('command -v pdftotext')); @@ -186,23 +181,18 @@ if ( exit(); } -// Neuen Aushang als PDF hochladen und in PNG-Seiten umwandeln +// Neuen Aushang hochladen und direkt in PNG-Seiten umwandeln if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['fileToUpload'])) { $date = (string) ($_POST['date'] ?? ''); $dateObject = DateTimeImmutable::createFromFormat('!Y-m-d', $date); - if ( - $dateObject === false || - $dateObject->format('Y-m-d') !== $date - ) { + if ($dateObject === false || $dateObject->format('Y-m-d') !== $date) { $_SESSION['meldung_dateien'] = 'Ungültiges Verfallsdatum.'; header('Location: insert.php#dateien'); exit(); } - // Bereinige den eingegebenen Namen. - $name = sanitizeFileName((string) ($_POST['name'] ?? '')); - $name = trim($name, '_-'); + $name = trim(sanitizeFileName((string) ($_POST['name'] ?? '')), '_-'); if ($name === '') { $_SESSION['meldung_dateien'] = 'Bitte einen gültigen Titel eingeben.'; @@ -210,68 +200,30 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['fileToUpload'])) { exit(); } - if ($_FILES['fileToUpload']['error'] !== UPLOAD_ERR_OK) { - $_SESSION['meldung_dateien'] = 'Fehler beim Upload der PDF-Datei.'; - header('Location: insert.php#dateien'); - exit(); - } - - $fileExtension = strtolower( - pathinfo($_FILES['fileToUpload']['name'], PATHINFO_EXTENSION) - ); - - if ($fileExtension !== 'pdf') { - $_SESSION['meldung_dateien'] = 'Nur PDF-Dateien sind erlaubt.'; - header('Location: insert.php#dateien'); - exit(); - } - - $directoryPath = - '/var/www/html/intranet_repo/projects/contentpanel/insertion/news/'; - $imageOutputDirectory = $directoryPath . 'png/'; - if ( - !is_dir($imageOutputDirectory) && - !mkdir($imageOutputDirectory, 0755, true) && - !is_dir($imageOutputDirectory) + $_FILES['fileToUpload']['error'] !== UPLOAD_ERR_OK || + strtolower(pathinfo($_FILES['fileToUpload']['name'], PATHINFO_EXTENSION)) !== 'pdf' ) { - $_SESSION['meldung_dateien'] = - 'Das Aushang-Verzeichnis konnte nicht angelegt werden.'; + $_SESSION['meldung_dateien'] = 'Bitte eine gültige PDF-Datei hochladen.'; header('Location: insert.php#dateien'); exit(); } - $fileName = generateFileName($date, $name, 'pdf'); - $targetFilePath = $directoryPath . $fileName; - $baseFileName = pathinfo($fileName, PATHINFO_FILENAME); + $baseFileName = $date . '-' . $name; - if (!isValidNewsFileBase($baseFileName)) { - $_SESSION['meldung_dateien'] = 'Ungültiger Dateiname.'; - header('Location: insert.php#dateien'); - exit(); - } - - if (!move_uploaded_file( - $_FILES['fileToUpload']['tmp_name'], - $targetFilePath - )) { - $_SESSION['meldung_dateien'] = 'Fehler beim Speichern der PDF-Datei.'; + if (!is_dir(NEWS_PNG_DIRECTORY) && !mkdir(NEWS_PNG_DIRECTORY, 0755, true)) { + $_SESSION['meldung_dateien'] = 'Das Aushang-Verzeichnis konnte nicht angelegt werden.'; header('Location: insert.php#dateien'); exit(); } if (!convertPDFtoPNG( - $targetFilePath, - $imageOutputDirectory, + $_FILES['fileToUpload']['tmp_name'], + NEWS_PNG_DIRECTORY, $baseFileName )) { - // Fehlgeschlagenen Upload vollständig aufräumen. deleteNewsFiles($baseFileName); - - $_SESSION['meldung_dateien'] = - 'Fehler bei der Umwandlung der PDF. ' - . 'Die unvollständigen Dateien wurden entfernt.'; - + $_SESSION['meldung_dateien'] = 'Fehler bei der Umwandlung der PDF.'; header('Location: insert.php#dateien'); exit(); } @@ -281,6 +233,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['fileToUpload'])) { exit(); } + // Löschen eines Gottesdienstes if (isset($_POST['delete_id'])) { $delete_id = $_POST['delete_id']; @@ -898,51 +851,29 @@ $pdo = null;
format('d.m.Y') : $expiryDate; - - $numPages = 0; - foreach ($pngFiles as $png) { - if (strpos($png, $baseFileName . '_page_') !== false) $numPages++; - } - - $aushangData[] = [ - 'fileBase' => $baseFileName, - 'formattedExpiry' => $formattedExpiryDate, - 'title' => $title, - 'numPages' => $numPages, - ]; - } - } - - if (empty($aushangData)) { - echo '

Keine Aushänge vorhanden.

'; - } else { - foreach ($aushangData as $aushang) { - echo '
'; - echo 'Aushang'; - echo '
' . htmlspecialchars($aushang['title']) . '
'; - echo '
' . $aushang['numPages'] . ($aushang['numPages'] == 1 ? ' Seite' : ' Seiten') . ' · Verfällt ' . $aushang['formattedExpiry'] . '
'; - echo '
'; - echo ''; - echo ''; - echo '
'; - echo '
'; - } - } + if (!$aushangFiles) { + echo '

Keine Aushänge vorhanden.

'; } else { - echo '

Verzeichnis nicht gefunden.

'; + foreach ($aushangFiles as $file) { + $baseFileName = basename($file, '_page_1.png'); + $expiryDate = substr($baseFileName, 0, 10); + $title = substr($baseFileName, 11); + $numPages = count(glob(NEWS_PNG_DIRECTORY . '/' . $baseFileName . '_page_*.png') ?: []); + $formattedExpiryDate = DateTime::createFromFormat('!Y-m-d', $expiryDate)?->format('d.m.Y') ?? $expiryDate; + $safeBase = htmlspecialchars($baseFileName, ENT_QUOTES, 'UTF-8'); + + echo '
'; + echo 'Aushang'; + echo '
' . htmlspecialchars($title) . '
'; + echo '
' . $numPages . ($numPages === 1 ? ' Seite' : ' Seiten') . ' · Verfällt ' . $formattedExpiryDate . '
'; + echo '
'; + echo ''; + echo ''; + echo '
'; + echo '
'; + } } ?>
diff --git a/web/intranet_repo/projects/contentpanel/insertion/news_cleanup.php b/web/intranet_repo/projects/contentpanel/insertion/news_cleanup.php index d9b301f..dc7fe84 100644 --- a/web/intranet_repo/projects/contentpanel/insertion/news_cleanup.php +++ b/web/intranet_repo/projects/contentpanel/insertion/news_cleanup.php @@ -1,133 +1,49 @@ format('Y-m-d') !== $expiryDateString + $expiryDate !== false && + $expiryDate->format('Y-m-d') === $dateString && + $today > $expiryDate ) { - error_log( - 'Ungültiges Ablaufdatum bei News-Datei: ' . $fileBase - ); - continue; - } - - /* - * Aushang bleibt den gesamten angegebenen Tag sichtbar. - * Beispiel Ablaufdatum 2026-09-05: - * Löschung ab 2026-09-06 00:00 Uhr. - */ - $deleteFrom = $expiryDate->modify('+1 day'); - - if ($now >= $deleteFrom) { - if (!deleteNewsFiles($fileBase)) { - error_log( - 'Abgelaufene News konnte nicht vollständig gelöscht werden: ' - . $fileBase - ); - } + deleteNewsFiles($fileBase); } } -} \ No newline at end of file +}