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;
Keine Aushänge vorhanden.
'; - } else { - foreach ($aushangData as $aushang) { - echo '
';
- 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 '