From 266fd69afbec0201d53f994b3f8ab6f519cf0bcf Mon Sep 17 00:00:00 2001 From: Thomas Spohr Date: Thu, 31 Jul 2025 12:22:10 +0200 Subject: [PATCH] Dokumenteninfo wird jetzt in DB geschrieben. --- .DS_Store | Bin 6148 -> 6148 bytes com_eis/.DS_Store | Bin 6148 -> 6148 bytes com_eis/Archiv.zip | Bin 10774 -> 24078 bytes com_eis/eis.xml | 28 ++-- com_eis/install/.DS_Store | Bin 6148 -> 6148 bytes com_eis/install/sql/.DS_Store | Bin 6148 -> 6148 bytes com_eis/install/sql/mysql/install.utf8.sql | 10 ++ .../sql/mysql/uninstall.mysql.utf8.sql | 2 + com_eis/language/.DS_Store | Bin 0 -> 6148 bytes com_eis/language/en-GB/en-GB.com_eis.ini | 2 +- com_eis/src/.DS_Store | Bin 6148 -> 6148 bytes com_eis/src/Controller/ConfigController.php | 46 +++++++ com_eis/src/Controller/DisplayController.php | 85 ++++++++---- com_eis/src/View/.DS_Store | Bin 0 -> 6148 bytes com_eis/src/View/Config/HtmlView.php | 32 +++++ com_eis/tmpl/.DS_Store | Bin 0 -> 6148 bytes com_eis/tmpl/config/default.php | 38 ++++++ com_eis/tmpl/main/default.php | 12 +- mod_pdf_tree/.DS_Store | Bin 6148 -> 6148 bytes mod_pdf_tree/Archiv.zip | Bin 4692 -> 5359 bytes mod_pdf_tree/helper.php | 125 ++++++++++-------- mod_pdf_tree/mod_eis_anzeige.php | 11 +- mod_pdf_tree/tmpl/default.php | 2 +- 23 files changed, 278 insertions(+), 115 deletions(-) create mode 100644 com_eis/install/sql/mysql/uninstall.mysql.utf8.sql create mode 100644 com_eis/language/.DS_Store create mode 100644 com_eis/src/Controller/ConfigController.php create mode 100644 com_eis/src/View/.DS_Store create mode 100644 com_eis/src/View/Config/HtmlView.php create mode 100644 com_eis/tmpl/.DS_Store create mode 100644 com_eis/tmpl/config/default.php diff --git a/.DS_Store b/.DS_Store index 9b2ae09efc2054f6ad4d6d41811de0d1649d03e1..8ef6a8a130650c122bbdf4276fc2d7d6aa97adf4 100644 GIT binary patch delta 50 zcmZoMXfc=&$5s|xl$Vn~nUPU_vVjQ8#D0Drh)7;K0|Nu&#$CSblLZ(BHnVg5R z$jQx5aY@R_PXdZ?fUT6BtiWbs<8BC5QpAv)o9}|A1vM9n?qLX`A_?QA1CLdrC znY@98pHUphQetcP`BD0~BakUJ`5y}p3y3?Jk2Qy-;R}#a$EpHjh)v$Z>ZH{02c(*T zfq|K!n4yp%CpSOEB`GIA2`IwBzyOk+tiWbsqsj(VQpAv)o9_Zwve#W{Rk{q^0I)2= z0Eq1532ahw0YLo>EDR+KxeNsiIXUTu!O8i#1t38N2DZq__t+#rHne?`p8SVR3dWRS Qmtho`SomZ!JI7ys0K;)n8UO$Q diff --git a/com_eis/Archiv.zip b/com_eis/Archiv.zip index b55cef6969d82d8c60712fdc3c26a5271edae7a3..f9d4b23dc602417c543ac4485695cab9fae08e2e 100644 GIT binary patch literal 24078 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 delta 6090 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 A-T(jq diff --git a/com_eis/eis.xml b/com_eis/eis.xml index fef6bb4..fff3d50 100644 --- a/com_eis/eis.xml +++ b/com_eis/eis.xml @@ -1,13 +1,15 @@ - - - - - install/sql/mysql/install.utf8.sql - - - + + + install/sql/mysql/install.utf8.sql + + + + + install/sql/mysql/uninstall.mysql.utf8.sql + + com_eis 2025-07-23 Thomas Spohr powert by OpenAI @@ -15,17 +17,17 @@ EIS Minimal-Komponente EIS\Component\EIS - COM_EIS_MENU + COM_EIS_MENU - - COM_EIS_MAIN + COM_EIS_MAIN + COM_EIS_CONFIG - + sql src tmpl - install + install language services diff --git a/com_eis/install/.DS_Store b/com_eis/install/.DS_Store index 98fec11761a3dd2f3d93e89d96d9e625959522c7..2ea210a743cf4fb26d25f30bd1ec901b7dd29a28 100644 GIT binary patch delta 63 zcmZoMXfc?uL{_Swfq{XUp_rkNAtyKA#U&{xKM5$p0mK`WCLWYzg)r_*GdgT$WMpHX MSirWKo#QV*00guUH~;_u delta 63 zcmZoMXfc?uL{?Infq{XUp_rkNAtyKA#U&{xKM5$p5!;lKra1ASBrAk*Uz*WiGb1A# N`@{ma&Fmb1`2ir{5vu?I diff --git a/com_eis/install/sql/.DS_Store b/com_eis/install/sql/.DS_Store index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..8c581de5dcd8053840263534ef36610762d6470b 100644 GIT binary patch delta 207 zcmZoMXfc=|#>B`mF;Q%yo}w@d0|Nsi1A_nqLrzY*VQ_MOZo$OFmGvNDR)$=LN`_*F zLWC4h6bP8QfdrClZoZ34QcivnP?RHKa_7`dvd10KRiqG5QIG+#9HAjHu~2NHo+1YW5HK<@2yC9nSjM(_0izY;W_AvK4xj>{$am(+{342+ UKzW7)kiy9(Jj$D6L{=~Z03gE-+W-In diff --git a/com_eis/install/sql/mysql/install.utf8.sql b/com_eis/install/sql/mysql/install.utf8.sql index 518d930..4fa17c6 100644 --- a/com_eis/install/sql/mysql/install.utf8.sql +++ b/com_eis/install/sql/mysql/install.utf8.sql @@ -4,5 +4,15 @@ CREATE TABLE IF NOT EXISTS `#__eis_documents` ( `path` TEXT NOT NULL, `parent_id` INT UNSIGNED DEFAULT NULL, `is_folder` TINYINT(1) DEFAULT 0, + `title` VARCHAR(255) DEFAULT NULL, + `description` TEXT DEFAULT NULL, + `ordering` INT DEFAULT 0, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + + +CREATE TABLE IF NOT EXISTS `#__eis_settings` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `pdf_path` TEXT NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; \ No newline at end of file diff --git a/com_eis/install/sql/mysql/uninstall.mysql.utf8.sql b/com_eis/install/sql/mysql/uninstall.mysql.utf8.sql new file mode 100644 index 0000000..b6bd761 --- /dev/null +++ b/com_eis/install/sql/mysql/uninstall.mysql.utf8.sql @@ -0,0 +1,2 @@ +DROP TABLE IF EXISTS `#__eis_settings`; +DROP TABLE IF EXISTS `#__eis_documents`; \ No newline at end of file diff --git a/com_eis/language/.DS_Store b/com_eis/language/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..2f0642a78a9443ef342574240c964c2d6dbee7d2 GIT binary patch literal 6148 zcmeH~O-chn5QVEWLcmQnLN-F<-bHTE876puTtH$(7fB`?_kE#==~fseki*0M=ltAb{fo!`{ghBbcvuh!0zn`M1c8eZz?n@O z-i_$I*pA)!#SYcZ``2dbI^KzWU>hBk8v#w6G5T1+tmQwxP!sCtT_7LM`c ze%ZB{TDYhuAL>v3N?x=+9qXs+E}BiF4gx`-PvF|R6Q2JI{4#?{em^97K_CeHGXgql zmu-WO^0W2F=kcsfD9uU Ffg{{NBtrlI literal 0 HcmV?d00001 diff --git a/com_eis/language/en-GB/en-GB.com_eis.ini b/com_eis/language/en-GB/en-GB.com_eis.ini index 65491ea..69c1898 100644 --- a/com_eis/language/en-GB/en-GB.com_eis.ini +++ b/com_eis/language/en-GB/en-GB.com_eis.ini @@ -4,5 +4,5 @@ COM_EIS_DOCUMENT_PATH_LABEL="Pfad zu den PDF-Dokumenten" COM_EIS_SCAN_DOCUMENTS="Dokumente einlesen" COM_EIS_MAIN="EIS Hauptansicht" COM_EIS_MENU="EIS" -COM_EIS_SETTINGS="Einstellungen" +COM_EIS_CONFIG="Einstellungen" COM_EIS_MAINTENANCE="Wartung" diff --git a/com_eis/src/.DS_Store b/com_eis/src/.DS_Store index b368cc3bafecbf43be9f8822c968d20685678246..07ebed829128b0b2867c63bfe1a7469036b24458 100644 GIT binary patch delta 178 zcmZoMXfc@J&&azmU^gQp@8kp~34xq+!{Frn+yVwL5OM+vN=^1-;$oA1ZSAp9c5)n( z8iFY$P>_MFT!CS-9<$iwQ%oi-3>%bWC+jdvOqOEigK?agWGp8aFiWsKzH~?hXjUJy s6pXo!Sw_kMWF-qj7(*sQDnof$a8X`PeqK6IjB)ctW@VPm>>Pjj0ZOoJQ>KE-6h((v!2^kf}oiOEvTd@zm^6XT-E1^ diff --git a/com_eis/src/Controller/ConfigController.php b/com_eis/src/Controller/ConfigController.php new file mode 100644 index 0000000..3f05047 --- /dev/null +++ b/com_eis/src/Controller/ConfigController.php @@ -0,0 +1,46 @@ +getInput(); + $db = Factory::getDbo(); + + // Eingabe + $pdfPath = $input->getString('pdf_path', ''); + + // Existiert ein Eintrag? + $query = $db->getQuery(true) + ->select('COUNT(*)') + ->from($db->quoteName('#__eis_settings')); + $db->setQuery($query); + $exists = (int) $db->loadResult() > 0; + + if ($exists) { + // Update + $query = $db->getQuery(true) + ->update($db->quoteName('#__eis_settings')) + ->set($db->quoteName('pdf_path') . ' = ' . $db->quote($pdfPath)); + } else { + // Insert + $query = $db->getQuery(true) + ->insert($db->quoteName('#__eis_settings')) + ->columns([$db->quoteName('pdf_path')]) + ->values($db->quote($pdfPath)); + } + + $db->setQuery($query)->execute(); + + $app->enqueueMessage('Pfad gespeichert: ' . $pdfPath, 'message'); + $this->setRedirect(Route::_('index.php?option=com_eis&view=config', false)); + } +} diff --git a/com_eis/src/Controller/DisplayController.php b/com_eis/src/Controller/DisplayController.php index ebdee98..019c7c7 100644 --- a/com_eis/src/Controller/DisplayController.php +++ b/com_eis/src/Controller/DisplayController.php @@ -3,51 +3,53 @@ namespace EIS\Component\EIS\Administrator\Controller; \defined('_JEXEC') or die; -use Joomla\CMS\MVC\Controller\BaseController; use Joomla\CMS\Factory; +use Joomla\CMS\MVC\Controller\BaseController; +use Joomla\Database\DatabaseDriver; class DisplayController extends BaseController { protected $default_view = 'main'; /** - * Endpoint to generate JSON of PDF directory tree + * Button-Aktion: PDF-Verzeichnis scannen und in Datenbank speichern */ public function scan(): void { - $input = Factory::getApplication()->input; - // Default to PDF folder if no path provided - $defaultPath = JPATH_ROOT . DIRECTORY_SEPARATOR . 'pdf'; - $path = $input->getString('path', $defaultPath); - $data = $this->scanFolder($path); + $db = Factory::getDbo(); - // Encode JSON - $json = json_encode($data, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT); + // Pfad aus Tabelle laden + $query = $db->getQuery(true) + ->select($db->quoteName('pdf_path')) + ->from($db->quoteName('#__eis_settings')) + ->order('id ASC') + ->setLimit(1); - // Determine output file path - $outputFile = JPATH_ROOT . DIRECTORY_SEPARATOR . 'media' . DIRECTORY_SEPARATOR . 'com_eis' . DIRECTORY_SEPARATOR . 'documents.json'; - // Ensure directory exists - $dir = dirname($outputFile); - if (!is_dir($dir)) { - mkdir($dir, 0755, true); + $db->setQuery($query); + $path = $db->loadResult(); + + if (!$path || !is_dir($path)) { + Factory::getApplication()->enqueueMessage('Pfad ungültig oder nicht gesetzt: ' . $path, 'error'); + $this->setRedirect('index.php?option=com_eis&view=main'); + return; } - // Write JSON to file - file_put_contents($outputFile, $json); - // Provide feedback and redirect - Factory::getApplication() - ->enqueueMessage('JSON file saved to ' . $outputFile, 'message'); - // Ausgabe auch im Bachkend - Factory::getApplication()->setUserState('com_eis.pdfdata', $data); + // Verzeichnis rekursiv scannen + $data = $this->scanFolder($path); + + // Alte Einträge löschen + $db->truncateTable('#__eis_documents'); + + // In Datenbank speichern + $this->saveToDb($data, null, $db); + + // Erfolgsmeldung + Factory::getApplication()->enqueueMessage('PDF-Struktur erfolgreich gespeichert.', 'message'); $this->setRedirect('index.php?option=com_eis&view=main'); } /** - * Recursively scans a directory and returns an array structure - * with names and absolute paths for PDF files. - * - * @param string $dir Absolute filesystem path - * @return array Structure: [ ['name'=>'FolderName','children'=>[...] ], ['name'=>'file.pdf','path'=>'/abs/path/file.pdf'] ] + * Rekursive Verzeichnisanalyse */ private function scanFolder(string $dir): array { @@ -63,13 +65,11 @@ class DisplayController extends BaseController $fullPath = $dir . DIRECTORY_SEPARATOR . $file; if (is_dir($fullPath)) { - // Directory: include name and children $result[] = [ 'name' => $file, 'children' => $this->scanFolder($fullPath) ]; } elseif (is_file($fullPath) && strtolower(pathinfo($file, PATHINFO_EXTENSION)) === 'pdf') { - // File: include name and absolute path $result[] = [ 'name' => $file, 'path' => $fullPath @@ -79,4 +79,31 @@ class DisplayController extends BaseController return $result; } + + /** + * Struktur rekursiv in die Datenbank schreiben + */ + private function saveToDb(array $items, ?int $parentId, DatabaseDriver $db): void + { + foreach ($items as $item) { + $name = $db->quote($item['name']); + $path = $db->quote($item['path'] ?? ''); // Leerer String statt NULL + $parent = $parentId !== null ? (int) $parentId : 'NULL'; + $isFolder = isset($item['children']) ? 1 : 0; + + $query = $db->getQuery(true) + ->insert($db->quoteName('#__eis_documents')) + ->columns(['name', 'path', 'parent_id', 'is_folder']) + ->values("$name, $path, $parent, $isFolder"); + + $db->setQuery($query); + $db->execute(); + + $insertedId = $db->insertid(); + + if ($isFolder && !empty($item['children'])) { + $this->saveToDb($item['children'], $insertedId, $db); + } + } + } } diff --git a/com_eis/src/View/.DS_Store b/com_eis/src/View/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b8dba7aba410845d04f9fc1705731ec80c589243 GIT binary patch literal 6148 zcmeHKK~BUl40K9`7P#z@%SsVPZu^6>lq08p0G1U6sclwBaPA*?01_{NSMV*yc2u?7 zB5nwfEjiOp?8co&Nkc?#^|)CQ&539RXG{*zOc?jGk1UDIA<)S)?y0QGWpNYg?I_xa z->3k8yL~#RKn>l}==&wlyZv>@^K}*0;Aix*IDKDyoQ-2P-^Oh3`tyY6->{CS;-RTR zQ-a6bqLeP_8uc~9`Q={weS_MF-cGc(F1HT7x+eN3YU*-#>cOyPrhqA63jA3GcwL3f zjufpm1xx``pi_X?2M=e=BDRXMbfA$V05AnDhHLqk19~QaS;STm49saNP*YtzVmM6) z?_*pRu~pP`axyZW6GwLOgyLj$@Ls~nWs26C0;a%FfjzyQ^ZtMF_4$98WOt^3De$ip zaA{uTE4)(NTSqU)d##6G!Pz*jRqRr5AzLwGc`H7Ki-Gri0n8${ieO;&BOo$ZV+#DJ F0-p!`OSS+2 literal 0 HcmV?d00001 diff --git a/com_eis/src/View/Config/HtmlView.php b/com_eis/src/View/Config/HtmlView.php new file mode 100644 index 0000000..b0f1f90 --- /dev/null +++ b/com_eis/src/View/Config/HtmlView.php @@ -0,0 +1,32 @@ +getQuery(true) + ->select('*') + ->from($db->quoteName('#__eis_settings')) + ->setLimit(1); + + $db->setQuery($query); + $this->item = $db->loadAssoc(); + + parent::display($tpl); + } + + public function getItem() + { + return $this->item; + } +} diff --git a/com_eis/tmpl/.DS_Store b/com_eis/tmpl/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ad922ebce35d9d55462127e8378390d7b391b5fd GIT binary patch literal 6148 zcmeHKK~BRk5L}lC1-SIc17|jlN&@vOnJVqFB{_1wMCA&+ogl*Nbt?=G&Ov9|aS=ZF~L`_}pUOh-xQw3B3Rp8Gm!0Re3 zKM~Yc6;K6KfldKlA1s{FB@BXb=|B^Y0Kg1%H1y-Y9MCcWbP0nX7?_b%pro2~#4wT$ z-ljO0FbGOInfPSfCq3Du6N-sX2XA9I87HW%DxeAs6*!Q~Iq(0MU!VVnNqVIUr~>~= z0h1MFvBWE-y>;|*yw_Uz6`YOZf?$_|PTYzS%Ukg&JQ{e*9iU4X1i`@cMgetItem(); +$pdfPath = $item['pdf_path'] ?? ''; +?> + +

+ +
+
+
+ + +
+ +
+ +
+
+ +
+
+ +
+ +
+ + +
diff --git a/com_eis/tmpl/main/default.php b/com_eis/tmpl/main/default.php index 32dde48..55a7148 100644 --- a/com_eis/tmpl/main/default.php +++ b/com_eis/tmpl/main/default.php @@ -1,5 +1,6 @@
-
- -
- -
-
+
-
+
@@ -45,4 +41,4 @@ function renderTree($items) } return $html; } -?> +?> \ No newline at end of file diff --git a/mod_pdf_tree/.DS_Store b/mod_pdf_tree/.DS_Store index 26e52f35dd06402d4618ae77871714f18b0fae6d..d95efbed1a8cb93bdb42ef796ab786e712c9dbf2 100644 GIT binary patch delta 12 TcmZoMXfc?uoY8pWiWqSK9>oNp delta 12 TcmZoMXfc?uoKbb-iWqSK9)ARq diff --git a/mod_pdf_tree/Archiv.zip b/mod_pdf_tree/Archiv.zip index af13493d4e3e0eaf9c15f6f0d51f834ddddf40ff..80322468535e29b646707e03d269f76c0a56403e 100644 GIT binary patch delta 2236 zcmah~3pkT)AAf8!<~WOLEHu z6s8WyO9$S6AywIoeZ!U$bW2)`GtcvI$nbjg`APTk5P(d^C@0Rp=N>Xdq;+R)vIufb zKHwq*ozE;M?(^4oC~aFNQL5X{6oQges)-pH>|zI`G3Ue&XGGhcj-DW#N~fiK5=-88 zn*}m!qvgpcc%A2?)mUb%_t7sSPtJ~;jaqiuia)Tkz836hk2k))kh3#P5tVU}lA)_( z&k}Ty!&DjY6@MK|DS1JKu?Oe*U(+I4xN5`nV_2_((MuL8icOZtV0H3#l%=wdeMPq0 zRz}UXnuHCU1mT`xJkh84VpEfngcle4KE^cHO}H7q?~}<~nodZeMQ?oOgh48Ce?s?2 zbUNE8{9e!pOH|Y|dWk+?GbMcWnQNDD3bO&v`CRyEYSa8CJ6VkX+la5?S7hVH`{8iD zX6~Tg{^-fb&6gnV?e+}<-Q3#W+?^d^hn!m9-eSZNx9DnbtPupShjRT3i;jC}FjIFt zL$hqaWjy=Y%SLtF!zkSyKL%Tg&nUs6Y3QfTzfX;!uFy7#xDzG4gc$VR2jEnGWgY4dZyMf4 z>td&I?5-1HeIsJc4sQPjZhy8c+9vLJV3VtZuX}|{>rg=`^@@J<*5o zw?Rqe))Gxi?+jKuk8q>EuZZA2db-zX3pPq0rm9eL^Xx38zu9xlvR#CLHwbvFc=X6r z&d!kwS?@4~zxS0eXiZT}RB^8jTj(GC$NU+C2!`@1z4cl>$wfmRlzaW&0U`?tel6tu zNL_4e+GJ%7<=UW9+i`#WeJ9 z;UR8Yy+0x0hopW4hhH{!^Vyxc;o{P3s=7AiYkYB<$yGaQXCg70D=q};O+5C|%Oq$C z>gxBO{M)3d6-maK_n43dvOxx-t?4p$IgYP>e}sh=KaCX{cN9I4gul?CUA5!o_2vn7 zK-bZSi2OChh_b+gSx?+dysqy`Hy=w?_bF*1rN_W^wxCAC<0kW}*rv%FDQY@}ouSQ= zzOw0U#lt6y2cO$ueDeQ^Vo?s(YV&$`DSs%b{ko>W zZd}L3NlqSVL>H#R0D!3k085gL3jFeD09e4!&)LRqx4XBQsb8wLw&K52uG*FZMyVcF z{3QfIIvfW+fUWqJge5*`Jl|UGas8SHL$NM4B`GV-`8L_J z{7*jEZyL|lws>(++b=|?$gY#1AUeL~+PSNhB(#lV0#2g-uF@f6Ek85z@nsQ^gI72o zLAJOf>`=gIBUOToCD?P=ix11PPF7c-PEC)oPd?hHbV_3l-O<{IezWm4@gH%G<6mTr z)l{*?Uykf%nzf`HpKBeMFsu)M#(ZQo6On{=0(RSSp#;~%u8v-;j$9W?m%$p1xP%7y zuz>DFnr9_w?0qXqbtPDlHBDb9EVllBn;qDK{%49*w-4iv6R3 z?dwM}fqpK|$r>}i`QrM_r#{SKOWoEJ_bUQ2YQkvJxzVsaGVy z??Ry8*DxRrL4zi{Er3rDM8(~BPLQj#q;rL`!VGNl5yL5$`-*R>*L?nrUX>`0LZyEY znV{wd90XS)7NCo}YdMP{smlU@h03p+TLiRF-To8sd$VII(o2>4ACrO$s_U#5t>@w- z15tD~NO6H<3C@vfGIEFkmWFn-YXjkRS|gTrAQ!p{50asDTL7TFvjDW#Nl_Af#g@6aebg7T^8_ DAqcP= delta 1870 zcmY*a2{hFE7ay}Q#xldqBi<7R^B5E*CS}bMvai{aT|G-fL&8|fzLa0tN@HI}C{qfJ zU6`b28(WsVvL=Lt@W$!<-~YYuJ@?%6J>UEJ+|T!X@A=*pnL$b57+mT9_DqzI`X0cj*f-+uK9dm}AgCaUL1cX8AUX;d)askxQ{TlGVI&n| z)Q?%rlvyYl?C9ue>%cgo?pe1K2CQTqTvJBBFZ_<_iV*{x84{d<7pg5BaVGce3LnIs z?7hLWVTpXHIp4DBL?#m#Qe)dVA2xRkc?YNqrAClCV;c6$Ohp$QwBn8Cgr2}ioqn%E z^=8-z`oeEJrb5zjsZoAPhAkVGMf+bOmbcw27rcWC+ybNphm$0SW`ul~txBY3+L#&z|$>@+3oDhEKD3wU_-0uU_GYF1pAhnRj~Ncfw4=-2$mkj6M&9M?6WcV#6j<^aVi{}|c*H<)p65tuHYjj2^!W&KOonaHdA!&edRKe) z_B7_=6X+s2J=9h{(5a@FSG2;olZ9xQ~WP`MU?g!sg zNOhYf8zM*W6zcfxJH@Na3pG4k@+cDtoKyZyaY6N==0^YKB*7;c?aU>-f7?XTiERFD zsP3Q3IRn31_}8>GwO)7XK|2|@*bZ@HwH}veILwlFPK%FAdJ;Wy_15e17zca1lv0ts z8O^4%h7SfRE9m>erV|-^lItbuvV>ao+3N*?Zsa@B?WwBfm-IVy^R-6bf$zh1ld`u8 zik6({BTL3-p~G?ve+mfZ`_z|h9!A~jR(5`DtAk7&*>Rt08x9p)&6#~t@!Q)w{*~oQHkJpPL&P=M zX)BCQZ5%#Lt4v{jC^<1GXT!r6az3E0EJ}0_uiO5EZ2QqCE?j)FYIeo(k`&#&;B$>V z_n6C+t3pox_B)^c0ive({Hl$f64UG1$>~dL>!SH1JFuFkn38AmL#;2ZRM<)@^qOwj zN!vsz3r5W#H#V6#Y2#`JPON!R*p8<$^OEA)0YyA4Y#KA^z1(;+*X^jNXx=UBrj$rRcds)^f~5DWUn7T2|}+WU2o{jqCr=STp=z}czMKv zVX7*I(OqApb2;n$V~yU>{?S|;tASRz^76XX-R^0ex$xyro8~%UJo9sl+JpJ8aD+a~ zs$w+NK)dJ9;xneuJ_%1Xk*8#C_gdnWlD77Ug2}(!XnB3{$#b0VnrOkVk1s8RLILWD z()A3|n9j!77xaFUuMu6tSlDASog<)5h`NWE(4f4**Ao}4d{N1SI@L$jJW1A;`+S#2 zQT-dIC5-F21ebOGSoKP(yjU+0u4?|EYiDqS>+mu5j-Sl)W&?rp*uXS7_#zl`J2xIs zhy4be;_`rOyX*nET&K8#StH;E%UO{&!LhCO%f|J4-Zd?$biG&k-Le0cPa zL@)@11|0$YZxuz|XLS*<&;R>jI-rQgLY&z_fDv2@xQSK-*TaD-v;lYz4s4@OiLq4J z|63pGKSa%(fC&btcz91UqyGy#1n~geZ8ofug)IN|KOh_u1c>sgetQuery(true) + ->select('*') + ->from($db->quoteName('#__eis_documents')) + ->order($db->quoteName('ordering') . ' ASC'); + + $rows = $db->setQuery($query)->loadAssocList(); + + // Nach parent_id gruppieren + $grouped = []; + foreach ($rows as $row) { + $pid = $row['parent_id'] === null ? null : (int) $row['parent_id']; + $grouped[$pid][] = $row; } - $json = file_get_contents($file); - $data = json_decode($json, true); - - if (json_last_error() !== JSON_ERROR_NONE || !is_array($data)) { - return []; - } - - return $data; + return $grouped; } /** - * Baumstruktur als HTML generieren (rekursiv) - * @param array $items Eingelesene JSON-Daten - * @return string HTML-Ausgabe + * Hauptfunktion zum Rendern des Baums */ - public static function renderTree(array $items): string + + public static function renderTree(array $items, int $parentId = null): string { + if (!isset($items[$parentId])) { + return ''; + } + $html = '
    '; - foreach ($items as $node) { - $name = htmlspecialchars($node['name'], ENT_QUOTES, 'UTF-8'); + foreach ($items[$parentId] as $item) { + $isFolder = (bool) $item['is_folder']; + $title = htmlspecialchars($item['title'] ?: $item['name']); + // $path = htmlspecialchars($item['path'] ?? ''); + $path = htmlspecialchars(self::convertToRelativeUrl($item['path'] ?? '')); - // Ordner: hat Kinder - if (isset($node['children']) && is_array($node['children'])) { - $count = self::countFiles($node['children']); - - $html .= '
  • ' - . '' - . '' - . '' - . $name . ' (' . $count . ')' - . ''; - - // Rekursiver Aufruf - $html .= self::renderTree($node['children']); + if ($isFolder) { + $fileCount = self::countFilesRecursive($items, $item['id']); + $html .= '
  • '; + $html .= ''; + $html .= '' . $title . ' (' . $fileCount . ')'; + $html .= self::renderTree($items, $item['id']); $html .= '
  • '; } else { - // Datei - $path = $node['path'] ?? ''; - $relative = str_replace(JPATH_ROOT, '', $path); - $url = Uri::root(true) . '/' . ltrim(str_replace(DIRECTORY_SEPARATOR, '/', $relative), '/'); - - $html .= '
  • ' - . '' - . '' - . $name . '' - . '
  • '; + $html .= '
  • '; + $html .= '' . $title . ''; + $html .= '
  • '; } } @@ -77,18 +68,36 @@ class ModEisAnzeigeHelper return $html; } + /** - * Dateien im aktuellen Knotenbaum zählen - * @param array $items Unterknoten - * @return int Anzahl Dateien + * Konvertiert absoluten Serverpfad in URL */ - private static function countFiles(array $items): int + private static function convertToRelativeUrl(string $fullPath): string + { + // <== HIER den absoluten Pfad zu deinem Webroot anpassen + $webRoot = '/var/www/vhosts/ts-it24.net/stbv.ts-it24.net'; + $webBase = ''; // ggf. '/subdir' falls Joomla in Unterordner + + if (str_starts_with($fullPath, $webRoot)) { + return $webBase . str_replace($webRoot, '', $fullPath); + } + + return $fullPath; // Fallback: Original verwenden + } + /** + * Zählt alle PDF-Dateien unterhalb eines Ordners rekursiv + */ + private static function countFilesRecursive(array $items, int $parentId): int { $count = 0; - foreach ($items as $node) { - if (isset($node['children']) && is_array($node['children'])) { - $count += self::countFiles($node['children']); + if (!isset($items[$parentId])) { + return 0; + } + + foreach ($items[$parentId] as $item) { + if ((bool)$item['is_folder']) { + $count += self::countFilesRecursive($items, $item['id']); } else { $count++; } diff --git a/mod_pdf_tree/mod_eis_anzeige.php b/mod_pdf_tree/mod_eis_anzeige.php index 0d15e90..15fe4b1 100644 --- a/mod_pdf_tree/mod_eis_anzeige.php +++ b/mod_pdf_tree/mod_eis_anzeige.php @@ -6,12 +6,13 @@ defined('_JEXEC') or die; require_once __DIR__ . '/helper.php'; // Retrieve JSON path and access params -$jsonPath = $params->get('json_path', 'media/com_eis/documents.json'); -$confidentialLevel = $params->get('confidential_level'); -$privateUserId = $params->get('private_user'); +// $jsonPath = $params->get('json_path', 'media/com_eis/documents.json'); +// $confidentialLevel = $params->get('confidential_level'); +// $privateUserId = $params->get('private_user'); + +// Load and parse document tree +$items = ModEisAnzeigeHelper::getItems(); -// Load and parse JSON document tree -$items = ModEisAnzeigeHelper::getItems($jsonPath); // TODO: Apply access filtering // $items = ModEisAnzeigeHelper::filterByAccess($items, $confidentialLevel, $privateUserId); diff --git a/mod_pdf_tree/tmpl/default.php b/mod_pdf_tree/tmpl/default.php index 2c21390..b518678 100644 --- a/mod_pdf_tree/tmpl/default.php +++ b/mod_pdf_tree/tmpl/default.php @@ -148,4 +148,4 @@ document.addEventListener('DOMContentLoaded', function() { }); }); }); - + \ No newline at end of file