From 7396cf9f51fca0a99bbe3c9b1e648b955a05af98 Mon Sep 17 00:00:00 2001 From: Thomas Spohr Date: Mon, 18 Aug 2025 11:58:50 +0200 Subject: [PATCH] =?UTF-8?q?=C3=84nderungen=20im=20Modul.=20Ausklappen=20de?= =?UTF-8?q?sd=20Baumes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mod_pdf_tree/.DS_Store | Bin 6148 -> 6148 bytes mod_pdf_tree/Archiv.zip | Bin 4823 -> 5110 bytes mod_pdf_tree/helper.php | 92 +++++++++++++++++++--------------- mod_pdf_tree/tmpl/default.php | 1 + 4 files changed, 53 insertions(+), 40 deletions(-) diff --git a/mod_pdf_tree/.DS_Store b/mod_pdf_tree/.DS_Store index e70023aff7bfe469038c8bd10bc18041ec7ebd1e..b7184eb264853c7be94d729ceb721e68a07ec03f 100644 GIT binary patch delta 14 VcmZoMXffDe!^qgR*_QFR7yu+!1g`)9 delta 14 VcmZoMXffDe!^oJq*_QFR7yu)Y1dadz diff --git a/mod_pdf_tree/Archiv.zip b/mod_pdf_tree/Archiv.zip index 8c02f50207b294a1278a8f44c4cedf46d80241b0..841218f51a50551ec1c2cd9bde8ffa8b8f36a687 100644 GIT binary patch delta 3062 zcmV@6aWYS2mqm85|IrrfB*NQXaxA8X#e-3Xth_(Zrer>zUwI_ zs$i0~WI1Wt1hT38_$P7F{Mtc_I)<4W&Bn@|&yvILKHlYt` zoKeyGtp)h&udbRWtir=IRzTvI!tQ9Lj88DX>)^n>1I%>QV3EF)rMoAdGtV~(`o zb%OWm_vN2(y~Ld4w; z=|X4hfj`8m7FtP=WO#byXtmCzt!WRPqI@s%QCDH=O&?ZOb(q{s zW8HInaK~vHdzR+NK|Dt0rdm%OLEdTTfi5CTr0&6mGutb5RO8nHmKhBgiGwK-(yiWiVfX3b=*6pNhr0(T@YUg7@Ah1`(dnIqa{<&k z2HRR8>(#>F53Jhll$Qe+F=vP9`xe=Lb;6 zqw~Kf7_6_qf5gIO93CCO^!ziQD3~IsAryqq+hvMsT~}4i%Br$?H#N0{R%V2k)XEsq z29d_pZ;x}OQr^Z%#7Hm39vS=XXCmaN95IGrjd8TK0VfedD82XF8|~rOzrJkswa6hX zRr$}SkAGl`U!TvJfA0EQGQmkYboFIXUKhbe0uN;y3TH8rkI{$|j`L(mRBWaysBcct zk|_0KR*m5q&=~iKT4BVDpI}XxMPo1+xsHj;I&Lv{(o8oUKS&cj9#<5RCw`c|<9cwd zmw#4R=$p7$lr@ygA;Ma*4A#KqH21Jqp-$Q>R+QPo!6xGTf6MtNEc6JYWfzg>5kb_w z$N7lWqvj1)g;;;qsAgA^eV_+QG+db;NRv#RxxqNW%`SXlwxa?pv|O&v-z4JiJu zrq};#Jevy~2AziM8jex)P|_yBMmYA+geYa^x2*tsqQQEgl@(>C#Wkp^M+Z!c^xF?? zdWIre%lymKw{#g-^$qH!LX?%Z1ssf zFTDRoPx)U|U%DYIj(1Cz&w^jBH~Mn3wYb;(dj5G@fBlpw1}IKT{CdG=JJv%1Hyqo7 zCCWQ7qh@~D!4CrDTiAA*Ce%099^7~Ez4rCd35ub&Q5%()+Jq`0*l1k;uDI@$%9pM> zjm^fouy*yqU6s<<{V&9?t<}iCwd@*>WvlL<0kiJcbgr)h?gpY92A9fzt?QX&k53hq z7n|*TWU@_@H54%P;rhm{?{D3_e*4DFB`M{3GNxi=)s&3=3SSp)*e|;W_ZQ}9UDwUq zKivB9s)`I#7p_|^PySoW)qT-kY*_h^7v(n#E7 {f2&V*7_GvO9u!aYBX3r1^@u& z5R*#>9J8PW1p)#K_>=z%9kav-IRgR<_>=z%f&=-8qNxfd|& zMHx#%qXEJ@O@FftH2K&gXqIP!-j7HkU^B)AD)>@{+`uX?7sK38ZS12Z%|_$|R`z;9 z7KyPQ$RxLmeoN;A-Sn{7z01ZU)!G1fi_HD$a&q+zxxR}n9zOx=yh zfILU9lL7wd<%0TyXYLyf&Vq68q1P!WR?<+Upe)HIZGXK7 zTc>tStwATk!qCDf7w_1{%QUPx+;sw-xDZ^1cbu7YM1CF&%3OCt9;h{r<9)J{WZWfQ zDhd1eJkfLoE{zKJWKdR9!`AmTY#FB$cp+4LYa=&Axp0E#CUiZ~`mCs4a*3pE?creC zxe$NjAAbr+Y+}(_x%u5dhYD^(3+_TUX+)>6D&c!kq6F4QW+XCdxfEp)aiMdCMQ4gj z1A5${sl;y3xD?nKVMPWZMUGvUgMiqyskE6yD=?INB(V}U{_$`)91~2V|CGGR3|Eq3 z25X)dAn@X?1}O`{%Ae1Ge*HLx)ugIH;5L$tirD1+1CkPTfX zjprz}J$l$5I|;O{tE31v8I=sjKnR-U(BU#%C}Y&hQtCG4Vc&RBpoQ%E=(52Ymr1{p zkly4;7?MlpfHQkhO1BY2(VZ`Z$sm$X<}uE;y3^Ejo&UW&V#Smt=hpwSp-f=1_4 za--Os=NIw=jwHMUfdNJ%Yzf>P>_CNnOTpi zxLAQS5l+*5jTf(R009&6z3VqOSD2PvQ-72J^PZ8Ukg@F%;sCwr?3&zfuC&YhJtp!AbDYP8-+@pS<_$L8*2O6u7Q^|AeB|D)Yq%&x6 z-WQ!3LvDOea0J{+%l8UV7hQjB@r4L>!nUDN1^B|IiXf4jkf>4}GM!F|=Oo7)?|JWA zH=)jnXQja-qsQH=Vyq@qo4+04>!;7o|LdnOJKhh?-9uHX{om~7PXW2GqSlV$_CD_R zOFO<^aQ+>e^N$+CZb#D-b`xiZcz>%%>TKMRmuhPOUDjkS2ye*z8O@f)L&3b2MDK_ zy8fR8004>%002-+0Rj{Q6aWYS2mqm85?dc?G*~_c008C?lYbC01ONA;le7>k0+t4o z;Sg5>T?msp5n=)#36q`?R|A0y0F#ai7n2VXF$2U40F%)QA(Iah6CnCs5?iO3y8fR8 z004>%000mG7ytkO00000005+chYXXK5+)kS_M&J|O9ci10000700#hE0ssJn5dZ)H E0IK)4bN~PV delta 2767 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' . $fileCount . ')'; - $html .= self::renderTree($items, $item['id']); - $html .= ''; - } else { - $link = Route::_('index.php?option=com_eis&task=download.download&id=' . $fileId); - - // Tooltip mit Dateigröße - $tooltip = ''; - if (!empty($item['path']) && file_exists($item['path'])) { - $size = filesize($item['path']); - $tooltip = ' title="Größe: ' . self::formatFileSize($size) . '"'; - } - - $html .= '
  • '; - $html .= '📄 ' . $displayName . ''; - $html .= '
  • '; - } - } - - $html .= ''; - return $html; +{ + if (!isset($items[$parentId])) { + return ''; } + $html = '
      '; + + foreach ($items[$parentId] as $item) { + $isFolder = (bool) $item['is_folder']; + $rawName = $item['title'] ?: $item['name']; + $fileId = (int) $item['id']; + + // Dateiendung .pdf entfernen und escapen + $displayName = preg_replace('/\.pdf$/i', '', $rawName); + $displayName = htmlspecialchars($displayName, ENT_QUOTES, 'UTF-8'); + + if ($isFolder) { + $fileCount = self::countFilesRecursive($items, $item['id']); + + // WICHTIG: Toggle-Element einfügen – dein JS hängt hier dran + $html .= '
    • '; + $html .= ' '; + $html .= '📁 ' . $displayName . ' (' . (int) $fileCount . ')'; + + // Kindknoten + $html .= self::renderTree($items, $item['id']); + $html .= '
    • '; + } else { + $link = Route::_('index.php?option=com_eis&task=download.download&id=' . $fileId); + + // Tooltip + (neu) inline-Anzeige der Dateigröße, falls der Pfad existiert + $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 . '"'; + // Sichtbar neben dem Dateinamen anzeigen + //$sizeStr = ' (' . $formatted . ')'; + } + } + + $html .= '
    • '; + //$html .= '📄 ' . $displayName . '' . $sizeStr; + $html .= '📄 ' . $displayName . ''; + $html .= '
    • '; + } + } + + $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 e5cd84a..444a9e7 100644 --- a/mod_pdf_tree/tmpl/default.php +++ b/mod_pdf_tree/tmpl/default.php @@ -55,6 +55,7 @@ display: inline-block; user-select: none; } +.pdf-tree .meta { color: #666; } /* Optionale visuelle Trennung bei Dateien */ .file-link {