From 31af9b27e7c4ba0fbe37e4a7cebe4cc4b7d2224d Mon Sep 17 00:00:00 2001 From: Thomas Spohr Date: Wed, 27 Aug 2025 14:12:48 +0200 Subject: [PATCH] =?UTF-8?q?Jetzt=20mit=20einem=20Ordner=20f=C3=BCr=20neue?= =?UTF-8?q?=20Dokumente?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- com_eis/.DS_Store | Bin 10244 -> 10244 bytes com_eis/Archiv.zip | Bin 6380595 -> 6380702 bytes com_eis/administrator/.DS_Store | Bin 6148 -> 6148 bytes com_eis/administrator/src/.DS_Store | Bin 6148 -> 6148 bytes .../src/Controller/DisplayController.php | 13 +- mod_pdf_tree/Archiv.zip | Bin 6409 -> 7356 bytes mod_pdf_tree/helper.php | 157 ++++++++++++++---- mod_pdf_tree/tmpl/default.php | 4 +- 8 files changed, 140 insertions(+), 34 deletions(-) diff --git a/com_eis/.DS_Store b/com_eis/.DS_Store index 5ccbf1b576c44f3c56c4ba4b2c5f210e63c4c26e..1efc6c669e7a798b666862aaed48ea6ba5d9450d 100644 GIT binary patch delta 19 acmZn(XbIS0A;84NI{BcO+~x>@HR1q2Dh3z; delta 19 acmZn(XbIS0A;83RYw|%cxy=y*Ys3LZBnIUG diff --git a/com_eis/Archiv.zip b/com_eis/Archiv.zip index 390d08d209ee3cf4b6406aef93b3e875f854cfa1..8321fab855db2c4d701bb8d027f66173ccce8064 100644 GIT binary patch delta 13796 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 BA;$m! delta 13681 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 TlAMV$=CT#|dtylV8=n6I|9X}q diff --git a/com_eis/administrator/.DS_Store b/com_eis/administrator/.DS_Store index 13107773304de99372206cb3a4ee3f9ed2036554..2431bac0ec3ac8bd8aa2d15a4651acb375ba0c60 100644 GIT binary patch delta 15 WcmZoMXffDugq5jUaq}@&J0SorD+Nvf delta 15 WcmZoMXffDugq5lI+va1ec0vF$@dg_J diff --git a/com_eis/administrator/src/.DS_Store b/com_eis/administrator/src/.DS_Store index 9398dad44a855e5439a17e41658baf807a2894f9..889bb740a85580a1b89b5b7249e93ec7d47262f9 100644 GIT binary patch delta 27 icmZoMXffDe#KNTLKRJO#YO^1U3L}$}`Q{SV2|@sAg9jx5 delta 27 jcmZoMXffDe#KI&se{uqg)Mh^x6-Fk-J)28dCkO!makU5X diff --git a/com_eis/administrator/src/Controller/DisplayController.php b/com_eis/administrator/src/Controller/DisplayController.php index ab8e989..faa372f 100644 --- a/com_eis/administrator/src/Controller/DisplayController.php +++ b/com_eis/administrator/src/Controller/DisplayController.php @@ -34,7 +34,10 @@ class DisplayController extends BaseController $path = SettingsHelper::getSetting('document_root', '/var/www/pdf'); if (!$path || !is_dir($path)) { - $app->enqueueMessage(Text::sprintf('COM_EIS_MSG_PATH_NOT_EXISTS', $path) ?: ('Pfad ungültig oder nicht gesetzt: ' . $path), 'error'); + $app->enqueueMessage( + Text::sprintf('COM_EIS_MSG_PATH_NOT_EXISTS', $path) ?: ('Pfad ungültig oder nicht gesetzt: ' . $path), + 'error' + ); $this->setRedirect(Route::_('index.php?option=com_eis&view=main', false)); return; } @@ -45,12 +48,16 @@ class DisplayController extends BaseController // Alte Einträge löschen (Hinweis: Dann sind ALLE eingefügten „neu“) $db->truncateTable('#__eis_documents'); - // In Datenbank speichern und neue IDs sammeln + // In Datenbank speichern und neue IDs sammeln (nur Dateien) $newIds = $this->saveToDb($data, null, $db); // Neue IDs im UserState für die View -> virtueller Ordner "Neue Dokumente" $app->setUserState('com_eis.new_ids', $newIds); + // NEU: dauerhaft speichern (für das Frontend-Modul) + SettingsHelper::setSetting('last_new_ids', json_encode($newIds, JSON_UNESCAPED_SLASHES)); + SettingsHelper::setSetting('last_scan_at', date('Y-m-d H:i:s')); + // Erfolgsmeldung $app->enqueueMessage(Text::_('COM_EIS_MSG_SCAN_DONE') ?: 'PDF-Struktur erfolgreich gespeichert.', 'message'); $this->setRedirect(Route::_('index.php?option=com_eis&view=main', false)); @@ -90,7 +97,7 @@ class DisplayController extends BaseController } } - // Alphabetisch stabil sortieren (Ordner/Dateien je Ebene) + // Alphabetisch stabil sortieren usort($result, static function ($a, $b) { return strcasecmp((string)$a['name'], (string)$b['name']); }); diff --git a/mod_pdf_tree/Archiv.zip b/mod_pdf_tree/Archiv.zip index a9941396b4276bfe1a5bca9b5059020c9087f38d..58762ba89f1a56f6d3ef4576fe67fd62502f2fcc 100644 GIT binary patch delta 5333 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 delta 4396 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 diff --git a/mod_pdf_tree/helper.php b/mod_pdf_tree/helper.php index 0068002..91cee9d 100644 --- a/mod_pdf_tree/helper.php +++ b/mod_pdf_tree/helper.php @@ -31,16 +31,55 @@ class ModEisAnzeigeHelper // Sortieren nach name (case-insensitive) foreach ($grouped as &$group) { - usort($group, fn($a, $b) => strcasecmp($a['name'], $b['name'])); + usort($group, fn($a, $b) => strcasecmp((string)$a['name'], (string)$b['name'])); } return $grouped; } + /** Liest param/value aus #__eis_settings (Key/Value) */ + private static function getSetting(string $param, $default = '') + { + $db = Factory::getDbo(); + try { + $q = $db->getQuery(true) + ->select($db->quoteName('value')) + ->from($db->quoteName('#__eis_settings')) + ->where($db->quoteName('param') . ' = ' . $db->quote($param)) + ->setLimit(1); + $db->setQuery($q); + $val = $db->loadResult(); + return ($val !== null && $val !== '') ? $val : $default; + } catch (\Throwable $e) { + return $default; + } + } + + /** Holt die zuletzt gespeicherten neuen Datei-IDs (vom Backend-Scan) */ + private static function getLastNewIds(): array + { + $json = (string) self::getSetting('last_new_ids', '[]'); + $arr = json_decode($json, true); + if (!is_array($arr)) return []; + return array_values(array_unique(array_map('intval', $arr))); + } + + /** Baut einen flachen Index id => row über alle Items */ + private static function buildFlatIndex(array $grouped): array + { + $idx = []; + foreach ($grouped as $group) { + foreach ($group as $row) { + $idx[(int) $row['id']] = $row; + } + } + return $idx; + } + /** - * Hauptfunktion zum Rendern des Baums + * Hauptfunktion zum Rendern des Baums (klassisch, ohne „Neue Dokumente“) * - Nutzt title als alternativen Anzeigenamen (Fallback name) - * - Fügt für Ordner eine klickbare Label-Zeile hinzu (bessere Tap-Ziele auf iPad) + * - Fügt für Ordner eine klickbare Label-Zeile hinzu * - Liefert data-* Attribute für spätere Inline-Edits / Preview */ public static function renderTree(array $items, ?int $parentId = null): string @@ -61,46 +100,23 @@ class ModEisAnzeigeHelper $displayName = htmlspecialchars($displayName, ENT_QUOTES, 'UTF-8'); if ($isFolder) { - $fileCount = self::countFilesRecursive($items, $item['id']); + $fileCount = self::countFilesRecursive($items, (int)$item['id']); // Ordner-
  • inkl. Data-Attribute + große Tap-Ziele (toggle + folder-label) $html .= '
  • '; $html .= ' '; $html .= '📁 ' . $displayName . ' (' . (int) $fileCount . ')'; // Kindknoten - $html .= self::renderTree($items, $item['id']); + $html .= self::renderTree($items, (int)$item['id']); $html .= '
  • '; } else { - $link = Route::_('index.php?option=com_eis&task=download.download&id=' . $fileId); - - // Tooltip + (optional) inline-Anzeige der Dateigröße - $tooltip = ''; - $sizeStr = ''; - if (!empty($item['path']) && is_file($item['path'])) { - $size = @filesize($item['path']); - if ($size !== false) { - $formatted = self::formatFileSize((int) $size); - $tooltip = ' title="Größe: ' . $formatted . '"'; - // Wenn du die Größe auch sichtbar möchtest, Zeile darunter einkommentieren: - // $sizeStr = ' (' . $formatted . ')'; - } - } - - // Datei-
  • inkl. Data-Attribute + data-filename am Link (für Preview-Anzeige) - $html .= '
  • '; - $html .= '📄 ' - . $displayName . '' . $sizeStr; - $html .= '
  • '; + $html .= self::renderSingleFileLi($item, $displayName); } } @@ -108,6 +124,87 @@ class ModEisAnzeigeHelper return $html; } + /** + * NEU: Rendert (falls vorhanden) zuerst einen virtuellen Ordner „Neue Dokumente“, + * danach den normalen Baum. + */ + public static function renderTreeWithNew(array $items): string + { + $html = ''; + + // 1) Virtueller Ordner „Neue Dokumente“ + $newIds = self::getLastNewIds(); + if (!empty($newIds)) { + $idx = self::buildFlatIndex($items); + $files = []; + + foreach ($newIds as $id) { + if (!isset($idx[$id])) continue; + $row = $idx[$id]; + if (!empty($row['is_folder'])) continue; // nur Dateien + $files[] = $row; + } + + if (!empty($files)) { + $label = 'Neue Dokumente'; // optional via Sprachschlüssel ersetzen + + $html .= '
      '; + $html .= '
    • '; + $html .= ' '; + $html .= '🆕 ' . htmlspecialchars($label, ENT_QUOTES, 'UTF-8') . ' (' . (int) count($files) . ')'; + + // Kinder direkt sichtbar + $html .= '
        '; + foreach ($files as $fileRow) { + $html .= self::renderSingleFileLi($fileRow); + } + $html .= '
      '; + + $html .= '
    • '; + $html .= '
    '; + } + } + + // 2) Normaler Baum + $html .= self::renderTree($items, null); + + return $html; + } + + /** Einzelnes
  • für Datei (wiederverwendbar) */ + private static function renderSingleFileLi(array $item, ?string $displayNameEscaped = null): string + { + $fileId = (int) $item['id']; + $rawName = $item['title'] ?: $item['name']; + $display = $displayNameEscaped ?? htmlspecialchars(preg_replace('/\.pdf$/i', '', (string)$rawName), ENT_QUOTES, 'UTF-8'); + + // Tooltip + (optional) inline-Anzeige der Dateigröße + $tooltip = ''; + $sizeStr = ''; + if (!empty($item['path']) && is_file((string)$item['path'])) { + $bytes = @filesize((string)$item['path']); + if ($bytes !== false) { + $formatted = self::formatFileSize((int)$bytes); + $tooltip = ' title="Größe: ' . $formatted . '"'; + // $sizeStr = ' (' . $formatted . ')'; + } + } + + $link = Route::_('index.php?option=com_eis&task=download.download&id=' . $fileId); + + $html = '
  • '; + $html .= '📄 ' + . $display . '' . $sizeStr; + $html .= '
  • '; + + return $html; + } + /** * Zählt alle PDF-Dateien unterhalb eines Ordners rekursiv */ diff --git a/mod_pdf_tree/tmpl/default.php b/mod_pdf_tree/tmpl/default.php index c6027fd..2bde82e 100644 --- a/mod_pdf_tree/tmpl/default.php +++ b/mod_pdf_tree/tmpl/default.php @@ -71,7 +71,9 @@ $pdfjsViewer = Uri::root() . 'media/com_eis/pdfjs/web/viewer.html';
    - + >> einzige Änderung: mit virtuellem Ordner "Neue Dokumente" + echo ModEisAnzeigeHelper::renderTreeWithNew($items); + ?>