From 381b203e85d53bb089f65e5bce64492147f7c5e6 Mon Sep 17 00:00:00 2001 From: Thomas Spohr Date: Mon, 18 Aug 2025 14:55:06 +0200 Subject: [PATCH] OK --- com_eis/.DS_Store | Bin 6148 -> 6148 bytes com_eis/Archiv.zip | Bin 25447 -> 30680 bytes com_eis/language/.DS_Store | Bin 6148 -> 6148 bytes com_eis/language/en-GB/en-GB.com_eis.ini | 1 + com_eis/services/provider.php | 2 +- com_eis/site/.DS_Store | Bin 0 -> 6148 bytes com_eis/site/src/.DS_Store | Bin 0 -> 6148 bytes com_eis/src/.DS_Store | Bin 6148 -> 6148 bytes com_eis/src/Controller/DisplayController.php | 32 +++ com_eis/src/Helper/TreeHelper.php | 112 +++++++++ com_eis/src/View/.DS_Store | Bin 6148 -> 6148 bytes com_eis/src/View/Main/HtmlView.php | 11 +- com_eis/tmpl/.DS_Store | Bin 6148 -> 6148 bytes com_eis/tmpl/main/default.php | 250 ++++++++++++++++--- 14 files changed, 374 insertions(+), 34 deletions(-) create mode 100644 com_eis/site/.DS_Store create mode 100644 com_eis/site/src/.DS_Store create mode 100644 com_eis/src/Helper/TreeHelper.php diff --git a/com_eis/.DS_Store b/com_eis/.DS_Store index 9e68a391c786e131992fb81eb23beaa8048045aa..5a1479c5265457db3cd86da57ae15667a360960c 100644 GIT binary patch delta 210 zcmZoMXffEZpM}w8@&T6Vj58)Tu!>F2W37la?`2?MU|}d`$YdyCNX^Z6aY@R_PXdZ@ zsC_uHW1i-5M^yO~yz&JZhQZ1CxdlKyKoBt5nXQv4#&_~LHZl8yN@rlkF$1kDVo1)- fM;L}Fi)z$?$;#}8Ocs5U!`P!312%7D4;BCbM0PvQ delta 203 zcmZoMXffEZpM_C!@&T6VjQNurSj8siu~x*gw=ys=urL%eWHOX6q~_+kxFqG|CjrGc zfcQl(kUTb(h>rK5>k?iAR+bb za$oM%`+o24GtcZ!oSFHZGc#w-IU9XQv)_=C#UZD31=aUngCR)t1wfThaIG^W8|nIw z1#>Vkz=Q{+qlDa40?rV;+G5m#e;N#-=iXG-e#IENsh|K{MZ;@#unBJpD1m64#haGM zT;8{hfo)ttSSD40Lk>J4^4-i9w=O7Q)D=*qRmer%LTk7~H7nYz$xcnnt>LLj7ET$J_e7oV2Qgle{RE-Wh8un9$LCEa#(3H{n#1#B)31_J zueNtT#VwiijIS?q1?QssWbMLzw~RfmvyS{84EC;O-Y|%=f%K_kbtb?4cM|g|OVX(Q z?=kEFO>U%7mY--nVc)&;o$IS4o=?ir$OnkNuQ!_Idaf;6K()JhZ^p^ZsB2Y5_(0Gf zA6|FvJP@@H6)Q0jyOLDjxPo`*NhP*TvChD&i?J^^&!}`o`_3WF(olvV6N1p;-)pS61<3#lJXWk5yb#Q?V5R`f zB?Yc|bbuH2H@Jrn;NV{3--oGC6ga5D6C!s_lEMvx65c<~eX+T~;H{~Qf1CAw99Isz zxod=yL(B4^AXfybpX7nvrApV9(*6rw$C2hZtP*l|udvA(z61;L+0CMW-1GX9)IEPi z4+2gHj8|y!+5Ge6%L22!>}{LA+94gYNS~&S$EEQoxzo0x{;rl!nHL@+ay>wtG$87RWt%PC-`~|3qq91gzx|#qDMC{L4LU2 z2E2$xVY9aj96rJmA}`nOjGKqzwVrXTYsBE-1gJN#@hj39r*q<@Q6tN8s8eeC+c1iJ zY}je{+i}?uR+IKE;c6(%I$jVP`4oI-T9z6i!1v1pI~`yblW+c-2&c;eJGyiaX3wQ!&=!VW(LNqkzMMw!^FALQZ;LPCtqIH z1X;?1TKfrrb(xHYmIsJigxkapLc7Bg1b0b8CubvlAwC^efLO${-Qvtd;tsO zH|l)NNHj~}k?A-_=c$eKR{Lzx2AQICQq(iUtUQOpf+aeya3(lokH0y!hWUjosoD{; zeDfEjbN_;s&{w;{9>sIFQfM%pQ~ zmrSwu(w%UOhk45uavs0=s#UmJ=<*mw=f?H=0}DmsR-gYOhOuTb*6kB$NkCa1^_w1f zqTr7d9el;pg)$Zpku}lh7oHMqQ)pzbnI#I2Jw{tj?jm(7_VwtioMQP;bbd`U3wlxTWg47(L4&gE!R-k?}Z_yp-+h$_bPv9 z9)7D=eO_9hh8&B5e8pn8=pk`dGusvuL%bND5`&*&61FBUI>2MZ=;2GfHAAYp@u6tX z>?K-W&Y)TYuQ~V1`I`%vjrNl@7t@hI7+vMc0Q{^8>KX5ibZCv!4{CocER9aLiZq^o zzSdxiC%uOUlQ5X=RIQ?a)?t`tZGm;S5kqfSc?o;e5@HN5hvIU|9z35l9Dn{Qlyj%z zmyPtZDE@aRXII*f&S28-AO(gZoLHyM=td_k)6e?#bEgi_6}rZ{r1;0WaNWX~PVs10 z_0GWvs8!xnk(|Q8{qx*Hpa*cXkV6oN(V0@=;(*X@K)cza@Z$^e#O^lGPRhmo3(kX^ z^bZe;{>6ja|KR~QV9G!TBmEB(5czJVs#-S`Pp%y!CB|ZfNjaY45Va_R;1K+(j{V6* zk#yB@RIMkmo7AUM%#;ZQ+b5U9@n!Y{E3^AuN5~-wl6DLoNUZtkIv-^^C+G?eru@&6 zgr;6)+b>M1h4UX%hzTB;t+a|?Iq_t_ohnU?GKC%WmczDca`k=^&dbIv4xLp-U(SB) ztj?J^I&q7s=fUoVjuL1Rz3GNeDuID<_trC9Zyl_8K2i6do^{0#st;X_38R}~zSqA$ z)kO?Md#sxNpnuC2U)N$N1d;%^AUPVGAKYFKtZ#U7gW+#H zsfCb*BmaGHB6I)}>c4b=8=ZiaCgJ8FO=ZKYm8A{4x#(dK#5gMStmHQv3X%WAP{a-d zlIVG{ZmJRE!u1a1XkU1RDgzJflI|~^0Fm!zNUC?;BaMbdCzdqk#(O5OTA6&Z@fE3N z++iF=ReoQn5e7qx4#sJZ{Dp7w=>jt;7@7E6RE=0zUqxSqGo>jd46$XYS~=j}P~Dz7JQnyDv_^?(z2u6;Y%Ma>ynXv9Spl%yh z8+bJa9j1{(*1YSKA6RQQV`SSmuz|!HjF(?#8u#Y=6I~lt)zREjsSr!z-fLk(ws$KC z_%C6)W)>MU4KS=vj@Z};UcniONN~Lbp*N->iE4?C27?# zY|t;3*u|o;_u6j3)m-CGa~XLTzTQdoS&b=n^_Nd(*xc_|GWLVdfJ%vtbafPlfI!#1?;Sl3-(~)^&@SKc}W8fY^Id?{4(96e~U0q1* zm^+v{fvA^uZTmwcvy22XTtR0t1D zTFGwpEQB;K9$UY3#kc;8T^f%)lcR?s(cC6Zb9BLEr#WDGTqf=?Sz2Q3l?&*+G-bN| z@)LtpDwiHxYJo-vMlAURAdn&Hr- zJ7PhYX|$rTsT^8PPS4^EQ{|sy*zb;iYrP!bEIbRI+PxJ}9Q0s5D(q3uoI#)v`0+#c zGxfHTs-K!dGfYd(l;txYYZfxZ6kVT2QDkI=p^SGB_A>bB|41w6oBcv=4f_xQ`Jyt3 z&zjpzB53JTRV~)wOKmW%Uh$4N$-k7o-4qg2jOMtfzDoCk;i}~3j{goj(lUc8D#SeZK z0TcYZbYIT+FK?v=&5}yxc?rVC+15$-`enz%H$ zX!1IBe&+V0Q@p-hY%)$;g|E(C>R&CQkrb?g9SxxR&)WC1aEwn#QXzPxvxHNuiU3TFGQJhXPI=J zcl;bTtH4}ni2B$vEmO_5XF4>p2rC)XBG=rHChL{f0S3FL^P773j&*+>4khPs?cigq zpDU_-t!ex``HIR@cGCGXKcKaT;lIBBUiFsh0xUQ;NblYHKA{tqNw(8QgTv?3U!nWI zh+i3~2vI&J=569V#+rSNld`QY+7)>!(@E%$-Tfn7^V8IOxw=nt1{nitZ5KPqu$Fxq zgcfCSlJkKX6$FaMzj;9XeZf5E)5f~FVE(%CuI(LvsW8v^1+P^Y#N*&vg~{ZBtAK=2 zuxNA?1Kt{)A6;G3DV%9g-ZiiWJy?reUje!Sa-j_2^T1@bQ|ov~6|+LK%Fh;4g0jG3 zn73-*&s}5NkCe|WbV?e7bl(HF0jkh5!I1wZ=f#}8$#d3tPhU5?gJpXR=cuPGs+67i zU9vFPW!PEo$#CIj9l!Rh>^^i3Mk!8pG{3sokY)aBW%lPx;-cM*uH$R)?woWCL9W10 zT_MSzTm9#s_MY8ZFgu#_Y<+lX8%SF`HY+U=MvLA~wr4#)>NJUmY>88S7G6Zq?5mf6 z=Kb|&tfMN6_iouNSH6ts3u~iE4AZ+_lUi>Btyq)F9?EF)ly9!eSKdLtioz+LeRkD9 z^zAB)_S{k@({2-a2<9?dt0%N}SO96J0heKYoTlz=F>6K8PQQgDWkB=|!GlU!iI;-^ zzw*H?D24T>*727$WJvJKjb_S*&<6gt7Qlay{ibBtKH%1QU~7xeH*6oIniIj`3dapk z5&5pZsT+k5UhoVX^Xuf#^-M!*lcLF-BA2efI$8-;euxeF6c-c05|J@*^Ly?Z z`ISMNWRF4@3R%A5i^@3JIx>mKg|zvY-%0I0J!>ONI==Oz^sU~I!Jz7>6>jm^C|W=J zh;AR>-TV)hsc|YW($Xy5N8dR!L}mi&=V+I$Q}!9LqsG)>!s58}8sxV-_sgJ^&p4ha z2?_`MO9)%@n6)nCEJ|9YCuT0!(y$o4^^3C}NC?FmX?ml3R)Ts`FC@6sYYt;1ZX?BQ zf_C5Um5o!&W>)b|*$8vSB8#u2wI@H0rVpi8?qGHO{84Tm#x@wALdZipbmx+c#Ly*j z(4uRXZ%CU!j>^KQ)|q9;HRC9+&7Pc?DoT!*U0_mvh)acG&s$@AKp_&pPXKtR?-7(J z%{sUByo16hT8~658)JNCi;T!k#f?9^g9v>`c4No-n78o7z(BO_j0MIR`7&kZ#^DrQg6<*frl9Y3Nt- z3S&Er%km_C(PYvx)RZ6ZJ$1`21~udTt}h)&VFcu=81np`OWmEOH?Q2cRPqSTkGPAQ z-6P%HsNCO#4xGm&HWHzV`;@&PH^i4AV~E;+&;2@uum{#rVnNVnIBTKmkU;b3-vRw~7BeL+GJ2NsC0|!!ey38`NwUEct=rb< zH0a?vm=_nY%N^!EyDdD72<^ z<eC&YOZ5&za_esB;W9W2cJ13Q}b=6 zvjmw_(hzBBt@vzL47n>lKM$5FdXQQ{R=Gnf^I*~d%>PbiLS?3)rT=Wiq&`Wvkh{5g z?z4iqHzfAuEK<7o#Q9gvwy~-O=ImV3-s$B|s(=y|%@NM{rx#6G{ zhLl0%2@HfEr?+urCKpR)bHG)A#rW%vajV6*im5NO$xjCAop@8;;u>l4%0&5xHyNG=N-Sx1RSzN|5O z^JlpeBO^b*>+yJ#?4ek_Y!dE~n@P`UDbnOdvTo(tarqY9boOv#prBvVQH)~(e@3RV zk8vC(!fZhO1Z9*n_EEQB31dT z+uVx%Yn!UOMMvC-L!9g&cUlZ?g`>p-+Sw^nCIo&;0|%m#*H5DC zV%hw`yjOr{CNiv9k6zoWG~L;|G!E?48t*0uWu?AIUhP||bxGTQf~U1I`f#fE#8RXs z@52g41o9m1adQH!3cJ&gY1@t|M^#*5W7UNwWYD9SH+bWN=KkW5$XtwK1;H1*A4Suz zbC-L1Nu(=b-Mu-WhFRBgN6VShbd~Rcj!Am0#0+u76&-%lYDy0==i~o11ug|v<(cCFb}JPUJb}dpxy@Yye+_QxLu1K^A)IgR|kl|s` z*mSoK8^`Gr&W3usOCPM1S+&@fZ+FZ3?C`v;`C%)0!$7-hZR4$e&qZ^|%S_Jgni8zC zc1{PK#@(&$;NT5+%R9s69Hq*VZg^wu3CCW%=++dc=x}|(t}&^%_)Jv>F9On2ek-cM zd%K+Uu>+MD@c#PuEY}MGs!0r22jw>lCUu0|G;s_Z3mQ5m(iC%-U!R~XFM6y#X}q|4 zbbMis7a^H2;h3&gb=Ds>@2sltCP8!Winc>^q`{3t0&5G$b#vMn7aUf_Edh7GprPL* zz2Jua59Nb}3@Ems`)|t!MXk9c);~6ivwOpT$U5@1eZu9w$iM6ppWWt#iQA5~tM)8x zZ^^0oP1z`lv>vYni?m>zA9-w^hrP)y8q*N9)ZFUzXpC zKTg#h^b9jOZuDI3=8g~_cu_SYre#FGg@Qkk(DK=E$dc~4AJwdItX0r(ydK|Rk2xdp z5Va-!`bir@Nd2V5eU^UJx);1L3YBCqd1*n-82!4L9-Cfirsi1EY8bT;o+$l}_zz*? z7c)ATO;Tx9(X45i+d;z1e1oz1yply^CnAubh)EQjfoj_bUh{bm!M1E1ZkF24lbs`{ zhvH8^9~P6yeJ*HC;Ic2E6qru8T9744U{>gP+#ddBJn=C`SIIpYVoXI5bs1V&m~dde zia6_IC+dKv<|Y4D3$n)4y+x&$8zpI)ncqfiW0u+}SX?53Gv?G|9%1#u10nzgKiRd~ z^TBjG7xq(91~10|Ig<(|hnJtt#nN1crY47<6yN1Fnz-{02a2DrV}%m?YbtFK*+7Lr zN%NL?L8-yQo3<1rg1zd9UaY1sQ82-~BY{(o(t)}bxsd|l<4EN0Pee9!16~&K<1;H0 zs~=BKjvj&PeI{f_eO6H%6rXRsr!^|#AXkbrh(V9=3Sq+85H|6B&jwUoCQsZ~I9!{7 zW!Q(NX-jo;w_hqpF2K$y8TogFvy2}feOVc%9z^+|_sW*;n~1=pZ$a^LC)BVljG&fc z5>XBDim^?qU-rbAWpT|4<_6{l7dPLgP-@J zk^3V-KIEC5G-|eKe7V-{O$smg8BGsA!OAb=%2|;}kQ4)>@Ar^NjbYGzFcs>Ic$q&W zWx`5jEp5;U>N0UR=26Nl+dPDUFOP1SrBS|CI=#HQSFmLJoG|TkSY$;)$1yj1KV3qx zuqlyLLTn|KY4QW+!qSxmSxdr+Zp@*ur!O^i?+x&*-R1QW`N?E3?XPR6__XDTDO31F zk+H&$h*3xM6O^X5eC4DS0|^13HXCSuRjaP=!*CuWLz{$jhZxIDv|pJ3hA(yaC5A1u z$%%$EC6tI<+3?lfS4MuL4DMO((s{}zQX)TB$(=DjuFtPMR6F(iNF4rPD$nlJIW9<6 zYxxN-|6LQ__{J|k&zF`gCjD>m8cWbUy!hoK4kb`TN)l#d%h#aBxs`2o+f#FF#vi${ zEi5MR>h-fV6vb&Lr!)*>WDA&8{|oI`>B||9aF5ET>lZ)GS-7Ka)Nal%LuJfQHebK+ zR4K+e!jUhfSl5^xzWdUtoq?E(En6d`xq_|vMeVc#Rw2jT*FN+@pZ9XJNT%>!Y+rHp z(RuQ0_}2=cW&cdSqqiOp)_(EGYrreW`O!hQL*N|ENR;H~!%DQ;ONTTO*vmXjQ|tH2 zsjyx zB(HH}wOy5OijKdShC}iImdWR4%WP(hTd`H)DL{wK40cU-a0KrZmI}LZpBxM=J3w3Z z%-1T&Ao)0`=* zc*czovU>FOLC+75VSbvfP_b`|Nkv({R|-J?*uw3K+*>}GX7h$yNOKqK8GO)V$@r|1 zp9&8#;$MDbNh#*mrpi=_{+7;kYE{2`_|>`j=z_aF-+oZU^`2Q4v!$nvyLv0W zf4*2DSoP=9qO3is+H)RSOcNN=>W^3&;c`Xf$9(P>o5~KxtSWiv+2*^_-FdE@=^PwU($PvqXReB7xkjj8*#Yhw z;6yXD96YtOrTG$WBuDXGYBgMqDu_C@lxy5UTI9sXvmDl}T{$B&T26kpg_gpUHhup! z%M-hkEQbdwwzgkxDM%->Q$hFyOQBX_t^^iTQL&@pd8+D^0?)IRHO^1M* zz)J%*tVSDHU`J>PI8-g3tUf+i=LzcW{8(JKfNViPle7L-gHy?LS9&%Z*QXY};Ylt3 zBBz&8!c1s#Drq3nUs}xAqExOT$jW8o1|{n{=k`)ta)a0qA^dGkH-d7c@3~VAy@$z3 z&pbkM@pHV!S>uB0t@2n~?s?wlb`@TMOvR_Kjfm;OBpO_o-1L~EnW6O?x|b&yQQ`{k z(yvbLZfI?&@*F)!lgU|eUT{!rKnlcJoH4L%39OaU=7r8NT(n2c=~jN4 z^U}4o68;pbyNda>U5x)84C;84w^1i`VH4Au|Kve0T~M4l8MPt)e5`*cUnFt~@|30Q zibAjdy}J*4gO|Tw9mJ#VNRDylJ!|d_q}g55cDam_WE|F)`3}2Q!Pud9T9Gk8pfQU7 zvcX-VkpcAb9RH6UE}(W#UKJG+5jXQ!L=BK{LI@bDu|pBjGaAZBU_!`0p*2`B9l`=| z+t5RJq5{DqZ~pTs3>C%$pc;gLBOWCx3J3|_7ofGI0$L1kk!ArRbsaDh{&hV}or4w; zneuzg3hi%%>O#Na1J5;R;6W;cd~iaDIF;Wgf#{1GntV4LKJYv|as1I2l>k176a?N0 z@Ydh}g9+iJ9KZ>L@KSc*4k2l(E&*VnNsZ(Jz%i_QV$Ni0VVd(Nr*A5eE zLWHybW(b7o^g19Q#DW}OkQ@XuH&>OCQP(!$z8;Crl$PN4=7<>~;sUC*D8Lisz^E1t z86q^`cWMZC_O+uM$TK0rCW8wIg3`5P8$P%U!mIu7=Kq`3L6rZR(SID|v=BHQ;JX$F zn2HLZ(l!9QQvrV3Zm6_$@Zmgx6dggl-vPJ?wW0%fbhIFJ^dNwoni>dEU;z4caKX;> zz>JO&gqHyXaL_Pb7Y8WApBfB6ysiaUoe|j8wTFZ=fq+1|dvJ~-Uvr~Ej~va489or) zR}W_e&%arLXryp!#@HGTRuw$`Ig>(W5b%_qmJ%*;|L%xz-d?+P0Zn}(G;5Z>hCr|k zVNm@YwQD!8rU5B(U8o2f(4x-;fw#Ec1{emo5HLFk_{2ney&O{mT(BBD;A&t3A>jZ4 z`^q8%zR$yMlpV zh8*B9PJqS83hc!N#2dLnRJlRG0=obJHRb`I@c>dLlmN_Fm=5vC`rUfZ_?wK@g^uuo z05dK@#8yPud4FFnqT}ydk^7I1wj%HmWXb;B34zhIof;vC5L;0YP{q%Pp#J}X`M*W* z>@I+7%6EG7 zH_COP)^dP?IrN%FfH?=`t2_t@79#;V%y}Rj3Lv0Uj1K;r00RNd^(z|Su^@tM!)rpt zX-WPEGywc)0Q)Hcxfa~lD2!TgfC-d=GYbufsWM!mBq^^2EzuGe{8AZsYH0v*QUL*% z_t^e3b!>e4KjwI-1_EMa_~Eq#*Q@#cF8T9B+)xMJT5%Bmo3RK8fHNy{u$m!2Vl7Di XS3L^cB?JO#!oT5EAdsXH;@|%PR0Qp3 delta 6379 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 diff --git a/com_eis/language/.DS_Store b/com_eis/language/.DS_Store index 2f0642a78a9443ef342574240c964c2d6dbee7d2..58951d748ce268b4725106c2d4532e1c1feb37c8 100644 GIT binary patch delta 14 VcmZoMXffEJ$;fE2S&Q+O7yu!f1WEt^ delta 14 VcmZoMXffEJ$;c?WS&Q+O7yuy11SbFh 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 69c1898..b1a830b 100644 --- a/com_eis/language/en-GB/en-GB.com_eis.ini +++ b/com_eis/language/en-GB/en-GB.com_eis.ini @@ -6,3 +6,4 @@ COM_EIS_MAIN="EIS Hauptansicht" COM_EIS_MENU="EIS" COM_EIS_CONFIG="Einstellungen" COM_EIS_MAINTENANCE="Wartung" +COM_EIS_PDF_TREE="Verzeichnisbaum" diff --git a/com_eis/services/provider.php b/com_eis/services/provider.php index e081340..761779a 100644 --- a/com_eis/services/provider.php +++ b/com_eis/services/provider.php @@ -23,7 +23,7 @@ return new class implements ServiceProviderInterface $container->registerServiceProvider(new MVCFactory('\\EIS\\Component\\EIS')); $container->registerServiceProvider(new RouterFactory('\\EIS\\Component\\EIS')); - // DownloadController explizit registrieren + // Optional: DownloadController explizit registrieren (kann auch weggelassen werden) $container->set( DownloadController::class, fn(Container $c) => new DownloadController() diff --git a/com_eis/site/.DS_Store b/com_eis/site/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..6479e22fb436660f6134a5835ec679ae9fd76f54 GIT binary patch literal 6148 zcmeHKyH3ME5ZomxEK!h>j%(?N#0NN$X=w8UD2W6`B1fR~?hrr0pHTB#%sv1|7AYxU zR@xii?#`V&h1V-0I^VCSA`=m*;D+*S%g`)uKCqLFjDc!rOc$$myBpLU3mA7KPx2_M z&3&JL@$#M7woS9#v`a*)v+LWp*UR@=Kf6AX-97YAy#kF!1*iZOpaN9jUn_u~ZC0HI za-{-PfC_vmVBd!VH>?x8K>u`L@eu%MzwvH(_E`d0EC8$%yFf%>8dP9VHAf5$I^rek z>clQE=%Riz&dHlKClvMD5iedYS_g8a0#x8ofl+KH*8gwdKg|D!B<`pH75GyM=(t%l zbG%aa*1^kJuPyL9_@|-P%dvPX26`*T##-@tuddiL@^xYt=yb%L4&;x3=|ZCdzoEbf DLNq0X literal 0 HcmV?d00001 diff --git a/com_eis/site/src/.DS_Store b/com_eis/site/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..83806afbed63e823f6890932004f9bf2fe55c716 GIT binary patch literal 6148 zcmeHKOHRWu5S@WaRIurirNs?;gHXZ=dI40504Z&%3ijS`HqOE=c=Ms6B9&MmgwUJF ze)fE9=SA_@BBHbBY0JLMY3)+5G1r}2Po5UIj4MZap z7@?Y142^K;OZqj5H88?OeP)c4Gk;uOG*8M}++DN@WK9Ohz&-=V(VbZSzs9dLc*)-n zVUG-ufq%w;j@o%U!%Jmu{qlO2YYWN^ii!DEYe3NUR1EY~jE?Oi=WYypu{P{YVhyxW SOz+`99t4~aR%GB87B!ku~2NHo+6{*#(>?7i&&T#1t%vkNeJYm8wMxm=N2%4f!J@LpwwhP zrW7UvhRJ%&Vv|oX_13d7crc_gzFttSs20?GJ*D&quMW1v$=qopJ_8Y2R{eUkDEU-e`lV|FXG6- Q$iTn^w3cCWgvc6Z0Ju^-kpKVy delta 109 zcmZoMXfc=|#>B)qu~2NHo+2af#(>?7jJ%T*SR@2;(hY-?^K%Orz(B|eC@3}Ak0pgk zfnl;9tJvgIEWMNOvq~^pZ2rN@&$O|jgK0B62R{eUu+4%T-input->get('id'); + $title = trim((string) $app->input->get('title', '', 'STRING')); + + if ($id <= 0) { + $app->enqueueMessage('Ungültige ID', 'error'); + $this->setRedirect('index.php?option=com_eis&view=main'); + return; + } + + /** @var \Joomla\Database\DatabaseDriver $db */ + $db = \Joomla\CMS\Factory::getDbo(); + $query = $db->getQuery(true) + ->update($db->quoteName('#__eis_documents')) + ->set($db->quoteName('title') . ' = ' . ($title === '' ? 'NULL' : $db->quote($title))) + ->where($db->quoteName('id') . ' = ' . (int) $id); + + try { + $db->setQuery($query)->execute(); + $app->enqueueMessage('Anzeigename gespeichert', 'message'); + } catch (\Throwable $e) { + $app->enqueueMessage('Fehler beim Speichern: ' . $e->getMessage(), 'error'); + } + + $this->setRedirect('index.php?option=com_eis&view=main'); + } } diff --git a/com_eis/src/Helper/TreeHelper.php b/com_eis/src/Helper/TreeHelper.php new file mode 100644 index 0000000..ba62edd --- /dev/null +++ b/com_eis/src/Helper/TreeHelper.php @@ -0,0 +1,112 @@ +getQuery(true) + ->select('*') + ->from($db->quoteName('#__eis_documents')) + ->order($db->quoteName('ordering') . ' ASC'); + + $rows = $db->setQuery($query)->loadAssocList(); + + $grouped = []; + foreach ($rows as $row) { + $pid = $row['parent_id'] === null ? null : (int) $row['parent_id']; + $grouped[$pid][] = $row; + } + + // alphabetisch nach name + foreach ($grouped as &$group) { + usort($group, fn($a, $b) => strcasecmp($a['name'], $b['name'])); + } + + return $grouped; + } + + /** Baum rendern (nutzt title als alternativen Anzeigenamen) */ + public static function renderTree(array $items, ?int $parentId = null): string + { + if (!isset($items[$parentId])) { + return ''; + } + + $html = '
    '; + + foreach ($items[$parentId] as $item) { + $isFolder = (bool) $item['is_folder']; + $rawName = $item['title'] ?: $item['name']; + $display = preg_replace('/\.pdf$/i', '', (string) $rawName); + $display = htmlspecialchars($display, ENT_QUOTES, 'UTF-8'); + $id = (int) $item['id']; + if ($isFolder) { + $fileCount = self::countFilesRecursive($items, $id); + + $html .= '
  • '; + $html .= ' '; + $html .= '📁 ' . $display . ' (' . (int)$fileCount . ')'; + $html .= self::renderTree($items, $id); + $html .= '
  • '; + } else { + $sizeStr = ''; + if (!empty($item['path']) && is_file($item['path'])) { + $size = @filesize($item['path']); + if ($size !== false) { + $sizeStr = ' (' . self::formatFileSize((int) $size) . ')'; + } + } + + $html .= '
  • '; + $html .= '📄 ' . $display . $sizeStr . ''; + $html .= '
  • '; + } + } + + $html .= '
'; + return $html; + } + + private static function countFilesRecursive(array $items, int $parentId): int + { + $count = 0; + if (!isset($items[$parentId])) { + return 0; + } + foreach ($items[$parentId] as $item) { + if ((bool) $item['is_folder']) { + $count += self::countFilesRecursive($items, (int)$item['id']); + } else { + $count++; + } + } + return $count; + } + + private static function formatFileSize(int $bytes): string + { + if ($bytes >= 1073741824) return number_format($bytes / 1073741824, 2) . ' GB'; + if ($bytes >= 1048576) return number_format($bytes / 1048576, 1) . ' MB'; + if ($bytes >= 1024) return number_format($bytes / 1024, 0) . ' KB'; + return $bytes . ' B'; + } +} diff --git a/com_eis/src/View/.DS_Store b/com_eis/src/View/.DS_Store index 264a6c7946c76c2356570fe6c22e2a870eb690fd..d3f08b2311aac4584664bdbe375d3fe86b0993b8 100644 GIT binary patch delta 14 VcmZoMXffDunu+o0<}*wdq5v$Y1)2Z= delta 14 VcmZoMXffDunu&4Y<}*wdq5vxp1y%q6 diff --git a/com_eis/src/View/Main/HtmlView.php b/com_eis/src/View/Main/HtmlView.php index 4637434..d1eb580 100644 --- a/com_eis/src/View/Main/HtmlView.php +++ b/com_eis/src/View/Main/HtmlView.php @@ -1,15 +1,20 @@ Willkommen bei EIS"; - $this->data = Factory::getApplication()->getUserState('com_eis.pdfdata'); + // Baumdaten laden und fürs Template bereitstellen + $items = TreeHelper::getItems(); + $this->treeHtml = TreeHelper::renderTree($items); + parent::display($tpl); } } diff --git a/com_eis/tmpl/.DS_Store b/com_eis/tmpl/.DS_Store index ad922ebce35d9d55462127e8378390d7b391b5fd..be3cf99baa4c80250afba314ecc457fb1743d6bc 100644 GIT binary patch delta 21 dcmZoMXffDuiit`3{NyuCQH%#003832YUbj delta 21 dcmZoMXffDuiiwHk*5orxQH%nc)tT>#0034`2VVdH diff --git a/com_eis/tmpl/main/default.php b/com_eis/tmpl/main/default.php index 55a7148..7ecccf5 100644 --- a/com_eis/tmpl/main/default.php +++ b/com_eis/tmpl/main/default.php @@ -4,41 +4,231 @@ use Joomla\CMS\HTML\HTMLHelper; use Joomla\CMS\Router\Route; use Joomla\CMS\Language\Text; -use Joomla\CMS\Session\Session; - ?> +
-
-
- +
+
+ + +
-
-
- -
+
+
- +
+
-data)) : ?> -
-

-
    - data); ?> -
- -' . htmlspecialchars($item['name']) . '
    ' . renderTree($item['children']) . '
'; - } else { - $html .= '
  • ' . htmlspecialchars($item['name']) . '
  • '; - } +
    + +treeHtml); ?> + + +

    + +

    + + + + +

    + +
    + + +
    +
    + + +
    + +
    + treeHtml; ?> +
    +
    + + +
    +

    +
    +
    + + +
    + +
    + + +
    + + + +
    + + +
    + + +
    +
    +
    + + + + \ No newline at end of file