From 812cd760385ea63cfac8a0ea998626c08c7af779 Mon Sep 17 00:00:00 2001
From: Kurzenberger <01kuni1bif@hft-stuttgart.de>
Date: Tue, 15 Oct 2024 15:27:10 +0200
Subject: [PATCH] deployed recommendations

---
 dta.zip                              | Bin 31473 -> 32932 bytes
 dta/classes/database.php             |  71 +++-
 dta/classes/privacy/provider.php     |   1 -
 dta/classes/view.php                 | 573 +++++++++++++--------------
 dta/db/install.xml                   |  18 +-
 dta/lang/en/assignsubmission_dta.php |  10 +-
 dta/locallib.php                     | 118 +++---
 dta/models/DtaResult.php             |  30 ++
 dta1.0.zip                           | Bin 0 -> 31473 bytes
 9 files changed, 466 insertions(+), 355 deletions(-)
 create mode 100644 dta1.0.zip

diff --git a/dta.zip b/dta.zip
index 26b39cf40a3686ca39a9f8b767a05ad14afe7802..80696317da532464fcf04be1712d79690ebb3986 100644
GIT binary patch
delta 18587
zcmZ6SV{m5O7Oi93wr$(#*tTusjqSH%Cmq{P$F^;&<BoH`bM8I&RGnQl_uBLCu9~aH
zGuBvlPoTeo!IJ2~%jl7S%5GS|TPqm!svk-^Aph@i<pcpi0U-e<yI}$Dv5~C)Qy$*%
zAfOOu;2<FXeogCLx@~fyec${BJG~oHmrC<pbW*%lzawAHHG5~U;LGGF4wjJ_2q)74
z`+05n@Ozhuh@vl&q3qn?i8M{dxMA(o3408=u1TYnn;_*p2EK8RmHd{wxP#(6q+4zg
zCXXOF^(SEc&beLlH?&PJ!2m&yrPSV54lCJ0cy}2uKUJcQs907~j->ur&MZ9aAVr}p
zhrC;(B6+X31l(=43|Sg_hp9xPKcln7$KCUrpwA>)+G55Q)<Z_*QA{KQYMk;OYJL=E
z?3n(1KW_Ti;LxoIlNyOUr4mrcgka~?e9#s2_c-9MC!%=0(gHy=ggV(NuPl4cD!3=H
zth@!M$K0BC%kQXL2^E79+$#&nA!Dz<0tw?e$zt`AsDEA95U7L`%Y?VP^Hb)Zpzj~f
zZXDeOKX2inCN<!k)+20G{d0#2Xa*Bpv&N*2^%(&!UeD<AxIMT=@nyt80j|7xhDP#K
zNB4k}gt)QmGe<rlKLBSZdE1{qj!snA;9^t=>!vcsvCh~(gh~3MWGBo_+CD(l>4Lg=
z$mlyw3O17N5O1YqGb|I8st}{+cofoXv!%lNR=h=1)Ssh4o&#A*Jplk=ZL09b7HuW$
z!NvX^!yzmI6BXx|o0F4|3sbJ%Ji{%6#99E7-_hS)QCx<zo{hoOkxK?h_MN$$vTzcH
zWP%~+XK8CFHpEnmBpw5>Q0tfa*_=<^+nnhI3iJN{_2bRr#i&!CtRHM7k;Y&1NpSt?
z<H{HhoY>YVgEFfAgQlzk>5mD~WNF~HmEwDcRj?7P0+EEFp9{R0SJ|jJi?{4@MNR-I
zr@{3e%2sawSJ%XD3fBBn4giI199!ALd6YVY3>LPWGv+f%FecJ-!KyWGh~KJv5X-_B
zYbfFzCA(TBF8kgOM3xmX7#mhfj-?F7Bj?QF&{X}=4SlD&u@gUcvg1n;%l5L&)vBov
z3xq=lC&bO~_07<y=oIKc!xV0xAH{$d)Z!pG^og4{9Gmkj(T^8IqT*jTm;^-%?M34$
zh*MXEZ}_FrNk>;F+t<@i!%yy>g1%m&ierJ<6wgM>xIDAxViz#T{mGTX&de#Wv{CXJ
zQ4^+ns^RMB2{te$P4V&b=4^p}f<E6T+c>@3`m-X#O%Gl3$L^lIy`4DQ25|t(#n^ES
zTy?oAGV_Amwn^dCDyBfs!=VOQ#xqWdl+!u`L1`qqqO?RlayhCRWC~-_=etB+pd?Zr
z7!{B~kco}Z4qFnfatsQ?l85t*FnixPZO9)1m!NnT^4*s+ry;SB$B=;dy>(@A;ca2>
ziSZWBBvWiJG+Gsm_xd@tPanX#L2BvS!Fdc%MgLK?w|_dxVFV0)0{bop^buKOpklHA
zihfo}pQJjT2dXw8KwR4ecPGV>GmcS_Yje{XSSz4MiSn|Au|plpDD0nMtaZ=nLml&f
zT=6&kecz#Hyf^rq$iKXphlTJgZpxU^*(%Y@S63Zs_&yQ=;}YN-<^&|YXO2jbCHeIG
z9*^ZUm`EGaV_8LcP>dN=A%*Hw25B~YLI8Kld3%q7s4mXRWnStao47<oltkVFhX+$R
zk$VpIvSG0`zo`8l&mDlS0r!|;_h4#iaJ_vLM?qXS{w?mX&s4z-U@TWV>=M28^C9F*
zg%25$3U{^MLnE<PV*pHQe>Ks(lBC;IaxjmmgZ<Mo%3v9D%V+ns0-ofg#^jBxAN8OJ
z{C%8fgVg>oFlsf>9QyMI`IZv+!!Ewe>aDD%k}Vd=y0*ji&6{)W#@bA<z~!o-u;MN4
zb}G>U96k``5Nwg@A@nIOK7FwYib5n-43vsax>l7sE%*#=9DqOycw$KnDGKW`!=z4H
z87Vk=M8Vxa{tg}}>%<_t$SdY<jDy8W+9XQekDJcjV7wVhy}>JVPT$f4Oy8ui%5f5K
zK{D^W;N_e{EYI+g{J}yxP7JN7_`R3f0~OZP^YI8mf<3>OuH+RMof3XRMo?^-pcv6V
zXU#&z(=%R*&;ULCEB^1(QSl@;5MLJ=Ma6NieBIEPy7$CcwLWU)3i=GD#4O`sZ9WK`
z`Bh_Z(qeYVN#wbR%ML(Z>7C{vcAt3aM}VpEJ<l$gmzk28!2(}*ZJ!o!$xZ$d^a?ja
z=I#$z9|_J{#BxAi<}dwypOioi)lg&N4@8I&^8#;SK7d2v?j`R{EHOFd)COh+^NuGq
z+GL;x0#Guq*6yol4@s$@Rta6xjfiq{!VN<erOPslt<>985=!|E2Md~0>1xA+TriG&
zGu`=TRErhx%xE;a%T+kSSehTDk3Fp|tSK}c<be(}8>A(~J7kC6DvZo6MEpsp&AKMV
zMEi&r4p6TG`}t&k_APMaaaLc@U~CW~B>pQXP|Cxz3%ah&;;ipMymjWttYCQExx+~8
zw#*2`=QjMDn~=CkK<S|m@=BI(Fh;%NBJTuN;40)I0qU+PRIYfu;3Vm-PfOTZ*orR7
z`X&HXKBJ$w5{}!T*!R<$=^X#_qUWfAM+oZ{6Tl6QXLMU4KRr}nf)g+;&JFf(DZnjF
zl4U!KZ1)8s`&EFKeKJYlu1S@!+tBG^BYL(%?hFgDTpD^=-5_UD8M7_Z(#Wu=r<Oio
zj3qG4qX60YTtPr^17Zs$kGBGPXQlVGc=a<xjdB(E#4?k)&ii5)aTHog@J=Xpw%WSd
z2Kdm_S#Dr}U(iqG63<APi%y&hgHV=#us#|3;FB6W4p>cB_s5FtT5hJJd(4Zx`HBnD
z6s)^jXue)$L}r~yIlPew*?Ee5!-<@^vQ#)J^(iMoj{`V%7*$xbrp{nuEtS|&kvM#q
z4C)le2IVIxj<MsB&=A=ux`!!sujBWJ0Q9pJ?Z~d`>j<-{X0H>s8niWd>7Ymm>Yf<z
z(43y>TDkZ<&z<}&%!-r8vvBuw_RmR_Kw8U(^x=s+H^j?+37}r=&E#BUyvB=Mr4cS`
zZKhkt*Nzd_)?y(nf;Idi`Q5O!@_8+q7MnQ&>k!Lr_Dg4eElGETgxxADM0GZf5+La6
zD%N|6c8kmOE1O8RAx~Ue1{=yzO!JpTlH+U-ot(y%=!Z*KWtVKPehr_x)f))xLpdGi
z6oPq0Ev$aUjPbfW4SM@*^}O5+_u2q0=HWzZLvZi$M7Re4MfV#QWZii^ljfq1uiiP9
zpYBfmww?{&ZLTcFH?>?ryLB{m8DL_NKH1W{q7l$j1by71abGi|E={KCA(SH%zBJuU
zjUtJtz>zdmOJnK<(O|G?6iZ-hA}-i=v0{L<ss*Xi|Kl%<%#a(_#M&=N2A?U%iGq`n
zMnm>EPP5M1A9U#+2aleAH)?Dd=~o<<FCGZ)07Y1%a{|aUbQ;oDPjIQL@PMV7;q#er
zo8f)-$wlg)f6{+#PR!SooPkb_sR~>R+tf*JH~D1Fw5Aq6E!keGO%Bhl$&|u@qjlNu
z-T<j2#_Li9+o6#Ve_(C;i&wNV<u`Gx*XwKkwfkb^U|OHUkrTn(200WtgOmF`zTAVZ
zQoZW^ASNqrB$;_8JvxdCzX*sTWsEG-@|>@7*KrJ~&O}+#7p^}VbVm$X_**fQ2KfaF
zzvWZhbBw{;GQpsj4r*>L)90gXR8WV6?cz_Hrq>-rN%GX>XX+U%M(Z?I?sDo@<!^7{
zE0$bAxRDxOBOm{_Eh9|2{%FQ7yBw?Xg1gcU7e>6jMF0&e)81?in*bod_YKA1M-e~r
zB<zQ%^x3#Nw5@N>dKG4hnP#@N!eyx&vUW}TWRllmV~DP@3cqZ@`zzdQM8d}cqz>ij
zi5F3EMHWM2l89|=CM~SyWA6KLnuEj)tCa+RUF|e6zM%}+k9-T+i2iWIJ}+2Jwu(J`
zON2`#ns!`%GE=WNS`L6((bds;-HR`-Nd;pPVsGLDnSsw&K+f^~$j8ZD2~E%`j*AWF
z>MQANg1%U)BCl%MnNXx!3m22y3(lWu&F5_G49PDxngv-_q7Pj507I=HIw%mgdMfc!
z)Ah4ijeAjoF=GDuPVPA_jM2wP>_-#<CgP&M;SiWeMULWfHv&%m!Mb&grsh_;SlLH#
zhA!JeKg@)uX^=ocodi6x;LF`CA#_{0FE`Y)*9<>7ox5fQF-~;R9G{>Er>$@667%}*
z4)fcd@&Ei?eH87_4j{PwdlDp$7r`*7=0fQ#NzHS6toGhbMf?}~Ui1cF8xXKHU^$+U
zwR%+K`;9-#w*vrNv^dv=|G7;7Y40w+RC-wwiLLc+GvK0s7aW*^SY7c9m#WGu{=J5-
zldAi4?Ky8tbrcnsGI8bbM<i*F-48?11C!j8Y^p;g!1zYi9udC8hgMfqj^!5fp_>gX
z{4(T8MwPlYYCYs;<!0;2yT(B<AlWrNRmh{_flH~F%p8#LWiK8nm+H7YoB{2Ts<&M}
z>PN3kMWI^d-LD;1PE;%j?s=8MR9fR*!U{gizNGymDbB}|P1X<JV<4r037zLaiV?RK
z+B+YEoP(dYsURz`{wVS+AXCtU168Hun0UdwI{YS8MmAl7Olida^sV51_@!NZ2e}f_
z78^|~h6*UX;H&p+gqQgip!{1cF^iSSw1D%?E++*#9U@yfNz%He!R=$@=k8uoUTNrs
zys?)|f_9ON%{-R&cWrr@zry7lr%$>izEZ2i394$7|7B5F>q`trc{3M>4fPRfR@b!d
zb=nfNM@DNXLo@xp@B1{4)S4a*GTd~?L0XxNJ&PGb2b#_MK2LcF<c0-WpErf(vc*+$
zI#!3x`#||{at8paEC&s<k5$2Tfd~TP$_d;@<N(K1Kx)E4dV~1a2av@Yqlp&%4*TCt
zpF2hqEBz_h|8JO?jKQG(;ZUnv$YfT0BrV(jQm8d4u$P4#kfwxW^`H750A1G6aoUtZ
z3H)1!0|UhXo$#2%P3=<kCIj(ONm0xKCSEX>+B|*VccYqsa`fBFvI8SMJpsc(MQ~}~
z)zUM;iRpQed7O>+;;%{L5!{JBOW*HkYR)0I_Si!ZrJVuQ%cJgH<Y|B#b6Tv>JxX>7
ziQza-xp%FR;P{LQVcDJ^stlHM31xl>-Z+Q1%3LC4m`mTOT}qIZ4F(IW@3;s%E?s9P
zk<hkqKQ$KXIjpz5Rmi*ZWB?W|6w!qYwe2`q1}^WAi#T6g4U#i@v9Zzv4<Go*T~8P$
z5H5e;ATScs8>)eV)BvCaJV84Mdr?%`=7dqguI|a&4-Wvn9g{H_f!%17FtOgI#|E=R
zP#r$0;32o9h!Bnd&LS(J<7^2J5{J%PI}7^+CJy=H9_qE4X3`K*g%q1N%lIZ679X6v
zUCtj{nd5$NbrUM)sRXp+D&EwMnzj4j^n(yV7mwfGpL?=|i~`E$4+md5p;;_{VUdIC
z<?wUgi9$ok`{|c&9a$k%h+Rv7$T<zOGz%TlFHM6BE3R}6N{I=eO2eC#dXQFf=7?il
zvMZPGK*P7JuCDHo{Xkri7^!{3?kO(*%I227g+haiTwu7zg|dzZ{lSS%KzIbNL`y+h
zX@oxeeZdIB5(8i+OPvv`rHNY<@r&r2fC`F;9cSo2>HIAt;Zz}>jQiIczRK&!H57q7
zf`-zFfisKAtX(1VJ2gD+QEVu5!KRN4F*@$syjLp6kMw*^m~CTV`3km0>-O^uh7;6`
z{Bx&|2T@$97Bu*3T0kA+o8*R!*<4U=ksE+Mu2qf{K?YF8L&0fVUA$Y|-Zp+jATC@y
z3aXe0^V-pJB4ka4`*cfBs2x>m1FrCwpvG%CqB_4idwB%_I5QB4Z$|YfUR`k5vJdI7
z&ol0#Z7f)HNI6md8u!yq!c}xQ@bVW)`;t<%L>z|1K(lmD^cxa5Wl$_u#0A}B+CiKC
zw5EsqnG49Ej9z$|iS)sHl>mn?t)fyqWkV|SQSX#$nBtTv_HowKdV1Wly%+342f(Aw
zvT!HX1vU|}8(t3np%pJk){xvXQw0ZVa&#tHS1CdeJ#wigM$19LnMJMk^o%(S6xW)X
z1_tin+_S$lqKf_o4vf(vEAAai4&Sh~gaUImo&d5^pRO0$PG)IU*~f#4czIZ1)Y%+5
zh~%>*@F9HB#X)8^ledWF=|}PoqCf3GFp$rLUAs*49@CGGbFCR(d&5`pyh}XNHhgrF
z8AQWnq1AivCInTobnLgqV75Wr4|n-gC+qb6rtrhAQ=ca~Z=`M!7p=JskbjLrjUtiM
zWC3&vF6$Wz7t&_w@c1b?JUt5<)WponAmceDi1g|#$Gg}A%8$ONeT!C^DT~o=9N0q5
z82{F@u5KqpNL;mGZQPu{<DGB9Pm4!{41`TF4^R874rTO%8@(H~JUWY%KUh&LhLp-C
z{0PXW4Ohz^nXLbyjDtdwzl4g0yjv=<PXXZ9S@Ud2(<Ij$mx;t;V%#2=uyVE190#jd
z(%gZmF|vi3B-$bqYoeW)Sb9vB57B;TPpDC|5*}%aUyrPj`uUkibKo(JfvY+ul)A4B
zSe#I$j}q7)I!Cu9sRVD%WkzBR@Xn0Tt}J^rlD0{!@omn8f2nH=()+L5beSUM)c`y>
zAJcL%Vmac9ICAz0vfjsY6q*LHg!;)fPl|xo0<zWZ=P*79*G-|);zp3y>DYrNL~!%M
z7d`82Cq0>8n+w37Qr!s?4>1XKUz%EUh8AnWj#+2*b~UC~{nNR0!e*)?u5<^I*kwl5
z(~WwVo~0HOiVg$q=O0m@S(=*{EPx0bd+Z_wDXob5kWQTOa_u7t$Cz}BYzF3BPV?^T
z(w}!fpwoZGBEsflwy5eA?RAk_@6&RYRV!mP*zC`{gp|K%FMmx&`?%aM45a;-9|{|-
zVYtEv3Tf%|+nO?=Hpjre_|F7Pg?a$v4jigLju$s}`s@rj8ke1uPss(_Ujf=7rl9*X
zm<Qr6_SB$OEVe0YmpMcrfs;#FV1pZM;o>}|+}hyp5wOlspy+E1q*$QU0?DRr*{mUd
z(X#V^m=SoRJ1dwaevPvmKKD)x^pAcOe4(?fdi0u0szCV(g2qe&z)ba^0{@i2>JZcr
zW)s44Mq}e^<FY_K$Fh*#BA{}|)mShN1Bk~Kp;+>hGqfFIT@|Dq)sv<=E<z(xyG@;2
zO_KPi@pC%C=#|4tNSIVaLI^U;G1*Cq7w`<rg}!%H6tQl=jJ#nL52HYw)<GAo67(>n
zC3Sd8x>@sj5;B!Zh&i*->8+n@mCMvIYiU;+wcuEF_`7W#t4=p{8(<b^odr!p%|+~B
zyRNL~ySd@+@wwKdwyIUwljU)#c*-EA$KA7HQA<(KiRif4<q}RWYqtyAhNHQA@Pke7
zxnIoq0j6E{q^6iy<r?qRHuhIV;x~|W)&OhzOjVawFC)fbzR~`991AMa9bThBp!GTd
zH@AyM*VQU_tN-XK0gxKdXh84fw$;g_`?p=r^oG<b)853bRbo=zKE+|)ZB@$4u3DL&
z#W7piPOWJ8UP&QRar3nzG3@&YLpu)yzB3@=_jW!a^6D20yshR{v2ASnH>1G=;M@AG
zeTC14)BWI$W6j#4BQ%F=`O4M8=@p~xvs2(}NGG4YioBFL<45GAW)=nz>VO&bJS01r
zDSoPe5@ND!sOE4vLI5bTu=uO%^sI@wu~;3(t9KpS0{VXW>u>7utl;b68S}riN&htD
zC@KsH$Ukx-j9cX2!b8*(qiK`701A=W;lFYN6c{B$0=Q5|vieW`kJ`A#-*nuRdfqm2
zp=)nBno!*+(C$mv?(C(ILL05Oz_3w<!QlNFr7Uj3(@fX)350y6+^ts%cu2hFWf#Az
z?b-m*1CM5OJ=yxh?tAxX&9Y(BR>*!U<}8>G`bDH8Cbl=QN#YE+9S24DML^iPDgM-f
z85M~CcaEzm<QZ;+1VNv-6@ouZ7A4rh1!d|^jJDg5!X*<Tmj7C$kHuNQOAO^!XNZtW
z1PMomDuUFc6q&j1&pzd$ytdGmgy3$|e!LYs5nFwdlrI`m2Dl((q^CX_qE`e|I|52Q
zWls=yu+NKOA2>RIG%(_n6$!i^HkgFOLk{g2EClu1j-&(qmNC=b0TV~*#jWoU?t%n|
zlo=c%Vk=&7H<Bon#@z9U+lHMfBEOceZfDzT@9|CW!`;`<&v)Ag5Egq((${tsY@@v6
zeB=j%%ZrAUj!vOp_`6-uFI-O%(CzEC?2~vjc&u^yc5nkgV%psvpxw&Z@vNP>+0EG*
znEt$;?&^xg>LVm?!~xA9)z><QhCE}j@d?Cf`XJK4BlGA52fqw1v~@TUByqr6>$hez
za)21R2j9`M$3rF4(PFw4;Ubl|H^foHPaLfgO8i;#>g%^AWOIGh{P(YyF)`WsD^bkg
za}A3+MZOn6ku=U%oLQZY=v8Hx{2iX$C?!Rzm$N^&`86`x0?_<sE?u~KI$m2#&e+md
z01<@d8>N@u(YQ_gS`$q0mUWuVeS4e3QHTK5-|WTVflP$&r6v>gj1suHE_z$=QkWm`
zq5_e2s5GYfllE0~w<-H5ekG|eUhu%|;HOSuB$f>TnPJC@v8k&ja1#`nGN;GS@8Ra{
zpmVWDD8LVNRGHqa*;Bospze`MCyGx}!wdtacz+HJorG(;()$iMhJ`|Xpf*C-T;CUo
zf_Ng0N@8!}=YTm#t8o;83p^Lu(byG6h%p-)!Px3tkm`~3i1fySSTvGTD85TJ0gs7H
zljtVk!k739gT~3ysDxI-2``d0uvmbymrI|`1{uUGemP5MC!W#^;k3tZ;bq?>e_YQZ
z(d%uy1SaCNy~--QI<JHxw#VgXp9WMUUHr0@HBXa2KiQ;s<_4E|6M1j;Ub34>)aO{}
z-4daUe7SiuB|lDrfRUuEu^0r|RDA&nD#-xgC4i9>ynn?E3t182g*~plaVO}|%p1xm
z0CGG8BMW{Y#c*B3M(lz*Qd1eHt}H2Y6-VBT<{E=)y3l7)Wb*Z7y@|>no)+~h8Ffp}
zjBKJ*mzTFK!3667YiXmU+tFDmfOV#cjSkh6oIK-C)fxp~f#IML?)v^BGkyyK%o{IY
z%GUJ<hpv@YwpUNY3hAKZfOC9N(;p%tOYzu&k0R=VfE2FLY8Q3cy<ZYfl7(8=juvMM
zH5az*hEWG-u^BdNvB^1`KTDRnujsJ#Q^yPtX3P}j*~i<j3z><*-#w0?k*Zb`Y^PPL
zC`(HJ{wn@)D+0S|gz!s8AB-84CXyT-P;wysv-6^h2+QyHLADhHiW=UR4ZSF)k1av4
z&X-tSyfEO?gVl1*l7}gI3cBYsz4!`BSL{*_hj}-+@Zg6Q&teNY!z7Ew2AdcR`h*{i
zwMKHKhpb3hBlb@v&VJW&)0igkUJRfnRC24x@GLe>zg3GsliKS^PTHBOs7SIAz(yBR
zo3p?GhniKlGthV(dXgJM*<OJN70e>rsFF|;ec4jivfe^;MB9>^@f}highzcVJ)B65
z3Z?T#+gm$|kce+b+yHeh3~xoyYjMbS!FifzfVjff+UOLrx~bed&dwxXh~0bH=lx{w
zXJnpW(vsfo9MN7?*|#w)TTp&6U=FWn#b60A^seCT@Zx8_7M*ihl$Ax)j+3Czb?bsU
zIAW@sou;KxwulU^b^4l`Swv@oqQ%u8@TP`C1o06iK)Rf9DLy_I-hhEUqu9`=%8*z1
zr;5*0(W4|Bh@piUuF+6VhoOFE4)=gbtSyr>DtNB5c3QZFyDQ5;tMR=Dz^X2+H)!-F
zb3N3+ukAIJxAO9WuB#}Q_Wvd70ISL!v{a-}PioGzkc$$B<IiQBCLV2LpE*p|8(3a}
zR0uUnJ;A}>{Ftiiiyvo41!e;Sf35H*>vvXrJ`;B|ZId0cmTl(tWt*RLgLmqsCPVL{
z)8Q}^p0q?s!1;mPCzoLkVB&}_S?h{#G8NJ<I^p@R8&Q<yrnsI}!#ukqACdkCA5KT&
z)WiA=M<taGJyK()H5p@NA{0(}V}pETO3dwYPRYdvb3E?LnllCUHpHb^P;-YU?RkhR
zuc@tO_6eEs8KLNcovP5n{K5%w{ujNJyq9xVPhaLy_cNt9qin1&Ko=Y!d(O{$J}IIb
zh^>V{k1oT0jnZ_KYg}I5`jEsy(?jv+7iF!VddJsb-on)mvjk9aLb5LIjy5=LF;CSQ
zHtlCAQyBhBKtBsP%bBuIV=WPuJ^qTSR3YMKoY;>ngWQ%A4v5?LKk&`;9Wy3~PgOr4
zGl&~Gx*h&bNx{LU0I+Wj8nAVfsxENyFFZM7DZRg+wky5iqsxOFIoreSGaNTkzPS&Y
z(zRKhaWQkSQjPFk^vKh%hZMnPauhmkSIF6KwVs;bCTZT*eX$xu`MqoWVJ7A2oXcaQ
z*smuv>t7Ho82!qllJx515JwMuR4&=M()@PJh#6<jNiLDH0qxe?Q4Mn#c8u)fR2z)i
zqgV4gBj}G-X7HV7YUA#Z<TOGzn0%yy%c$%OX1t3Ta4N|xpX!Peaaq*B&E+$q?>Z-Y
zO(VhlS#m>H&BTKrSJv;2w>lWj-%Hu~vOPAPKHePcnCznC?oX7r=ZJ*`yK3K5p$tZf
zPAMi}cQW|&fCxg{sboB;R#P*j*&s!~jO=#sL^I@Ai;*%jSoZf!#~Qp=o*nV==3__m
zb<4Swy(}beKl`b$98T9C$YRaPnz=lTY@FY}arqq{MeK_sO&%0`emFCF-?VI@uBcL*
zm;P4fs!@aqk_Lk!0>r&d1-vyeXR}!5h@Y{}NzGEk0m%33?IE-%((+9ivs+8wW2j@@
z1j?%CGyN1bH47P{?9PGBVjFdtV4@Xqa1ov<V`px~tx!HbD(>U;>1onfhkTh-P^$6<
z@K$LH+P#{Vuaj<3LfF;v`1ED4Zqa}85t5a<3m3q|Mk598KZ|+v*(Zs9(VIK8kQ(r9
zW1iDQ0DS4Sqe8!#B=Voyr6a>KtzW{iJz>=Z`?qN%hSz{8oX6ZEX;FDLAwY2XGo3f>
zWl(z8<l91A#Jzlzm`LT(fS5PlKu<_2wF;^ki`DiM%qBl&m(Fr+h15eEj@{}|DnBM(
z`02LGg7G}-8L<a{LJmsl0*eS$`E<D>Xg8Hsz+}z7s#zZ7ToMU_cStYU&nx8#;AW9}
zg|WE1YDGIEpH)h`r*M0(XgJ-Fea79x8s!ota*XK}-f_~4F6Ul+6vW}htjf!ytkBy9
z%~OmS9`1z?`08J$_6`pqpYt%|{W<z<`qbjft)xz~Ue^mJdvtA1Tw3dINQb$CGm?l*
zKoS?(`}7Y;AOPp~dg54f|HY0%JWaMuk7v{t3Z5!fn5|Cf@0|V>j<`3>5Xfb^x@qDy
z3$137>+azdAKr6)j;h<-RB@wT1ABAhFH0Dubm*#bbI}%xoGHlGXs*b>FB)rDKQN=(
zDk}clV$xY!x=-h>N-_D(W%aDo-zr+%0MWCG_eA<i8}nx+4GiJ6T3?h&ED!XDTd%jI
zAy-v6`|Q%Jb>}RYGMv^VvY15R&bB%vl+U<~$=l2p^GJf99d4-vIA2I+pso?m$V8-Y
zKqEBi_OxIk#I|<75WD$3>#8)<0#;eq(*$i;d6w8ODkj*w@$dZeW?Fu<2}7Jj05VQ1
zOEevstP)5{Rnz(A<v8WT(Y?>JSgWz8$f@)jeuv48sVDc}&dV6%HIKB8+?s*vgZ4b>
zl`#c}ysvmz2nz-QE!&C3Zi;EqlA^y*vwzu=O_(EH>Mr*9H#z0&CZNc@ut+Ohv<shp
z^yu1?(S#;j)o~;1qq4uJ!fwK!0^-qIWke|~w`8};3`gAzW=FI;PY~}g=OaByR#3cC
zNj0ew&6nl(E;ivba;9^xOR+RNe)a|ktya03nY_tb_PrLANcCk}4MS}s7|X%Ozid~l
z(t&^NN%&k|RhmMU<0|Q6`<}3Rsu4eg@bifNrY{7`pP|jrG-h;Zi4WCu1aQ2QFf>%?
z45#+zzPXJ=Yxiqf{iI#A;H{$>Kexc<!>ELu$d-rrVUnwHW*u>G02)j9kjsm~48OnS
zCu1Ac`(`QgA=pK8MLu4^MlG#-y!w8i%99rU8j-E**Bsis_xt<be(jCROJgkp2neVo
z2#B&AI0VMOgFm6_V!%sTCMYr{B&+9t*|CTddW!!)6vPgc{=opKK0>hi$JMp^*ZMzv
zw2k)<AC25^8?jQe;L#@4MD~ui=ux(+fhHUt!iSI`MPYWNtleVWEF>r&?aodaj#0Lx
zXz(&3(Lu0|Z)fJd$A28JnyOqOMml#zK~5cnfqyY-(~{=*cL^l^Lq!a~7^DVG0F^h$
z53WKIIAHAjFs(-f5<<Yl>LYUP6U;D%&=l#0BnyEW3P)gHqjg4l(us<I9vYOtrUfdq
zC=-v2VQGkBX?9z>*KL|rw>hl7#v%pMJ{gh^6%Wg=<h&@zMB~a^lp)@EXEW=d2Le=f
z+|zXs@3>1!fm_u*!4Lac78vLxKzi7(Q3@49F+&u6;&B790dsKQ_5trfBM6t$dZv3Y
z9~~05qZ?L5v<%mBh<uIlpdc4^|BS7#udf@dk#yqy!Iw8*f1md|816~QgsP8VJ9QUb
z3RY98gdb_+lxVdH!d-z6{2_5hN=#I3#L50V`CEp0+gp9F?{+wY%P()9fcujhQ-4G)
zuT`x-PBTcLjy%c3u>DZ`Gd}~BgHY2M6vHfD$t%@KJY*r@pZio=NE3;ZxS&i78S*vp
zNlj$)rZNAC0m-bGL+LO<lO%N;#Z?Fj2@%aS{aDv6>L0#6a&}@iqs4}VABT|;n3dpE
zFcYnWB^$qqWeYUkzqfWm1{}w`rwXtn-T(#6#{**I3pMKBS(MO-QnC_Pt{GofW8i(h
zwMVSMlpNt7<nNu(rd2O`tdE0B7ZyC~oI=SePF%2X#)4qPQX=aNulwm~CO$~1(n%EN
z&~U8ve?9FceKOnMqz7#nQ$T?bxui6r2>}Ovk_nj1v#e7M4EhFV0p>CjJD7MIIwKF^
z65(mQ`sxB718Thz3v-F0V{`|Z6u#dgvPFLz)k*f8ndOt3Baqol!zO<Py(`c)fP@ON
z{C;mCb8p{4Mc`ClslPqV3(=%2*rn$wvyKW5vk@%7!!suLJvg7cBCh;x4K6nDa$<S^
z{Le3c>Vh@w`Hi6H1Q_jqJvy-W58y(|I(0^1#`_iW`1im%90fD`j@TzX^&h+G7oEnw
z!n|~>kROPHZQ2jEyp)nTZQ(2a)v)0X$@E&}p`)a7>nbjrYQ`1#>nkxb71F6n`NIr1
zTx|-$?}pE0zq9-nyj(_TYK9mva|MR*Bb%h5^>o9Y<Ur<B3xEn7Ix}=ls#5;uU*>q(
zI0hYZ=;obu?wDINF=aI>?;rr$4(U)C6osIIPRCWsN~c@Fc;mqtB|*OT*tUCLIi#@m
z@NUp`#Bazy{mf<vb15amOk?=Q$R|E2N;+tJzAut#8DO5gCYaG$QYK^Jeg1@DKDy51
zO)OG}YqI)*>Hwi}(n|r~=V&30(4G|+CB7jk^sg@cUq?khj(+co%fBI&|9qu?Y4Mk0
zbVl|~_4ksz0r6A*6Xj0G_XD$QZ_$}3jJ;Zm9^u$k=PINPvKLfv1%hlg&m~B74|^P`
zzb1Jyq96iEw?rpN<NRlOSB4b)jvL5{c`v^&_QokkM-+gz{px@P%l#HSqyScRb6DgG
z$~)7fvrsIZ=(6*ek~FKR);j|9U>D~g%VQbC!gZR|&aRa@^)P0xDlTQR(mpj)+V=W=
z<Be~sVSJU+aZ#AV0HH-d{mpbz)3nXbFQ|`p&mnc2wzWY!y<X{4ieTTy7E5{HNPQND
zNFzP?$pe5jyoR66q^hj3TeHz`!y4UmVric)vOPgC_a)-5fUypzJEvxgc?EktV<G<P
z2m%Iy#DNX!aoaHIH@ojrpElF0w!K+_{$&O$HDnFT&Loa^J~biW;qLqrcA!n>s^wRy
zqFdaLLn((hRB4^t>c3rVDgSV&pV%OsRe6#QkquCyjAd6XQmN0f$mH_zbHNAME*MEZ
zb5NQ~O#NeCdg5)nQC!JW$e4x^6Bi<+MbohnysIA{NCABm6eiEk%Bji@a}`D}5knCj
zv(BU{%5aU~Fx<fbrYjy#l_An$EBh39gi1b0mbh~MQ^p~zq_&#862E5HfzuoZStenH
z-xtt3A3=y%L$o`;WWf~7HEKO@x#aR(GbR^3A>SNu-m3rf#nJ5W^lI?6I-6^pPv3p<
z_VY{p2z59nYEb}dkxhW<z*$8aN41R%<gc?hy3oXOltv=&_1(=+FfV3r)wBKl2=Py+
zV@%&RGlUK9B^eX`8NP$BKGNz5G)5*Ju`s2Q;9v76#q9ek^Qx{9U#dmRDa*?oK-3Z4
zuSm!H)dOD7SwS8bFzY&ix>KUnoZh;${?prSzS&qMg^P_R8y+L4cP}>tO)d!yAk2@n
zm>Vdm!U>?Dg{JmBRlz5igf!^Lgo8rO?d=7+kV%nCEa;NgwQk$Z!d&l#Eo2SC37)kf
zi*|JuddSv+MMV#;H0F^dN|}GRNLF)W9t~v(7V2(C{aW&ama;Z*RdgCH(6Ixm7BlfG
z_<1z#=%J?QDdNUy!Df$E$4PFm0w|ABz<c%*$bqja0-z8;E>&`xNc201!!GXZTfQY}
zg2{!G;k1y#TYNgbgmtF#k*$jCXdtos$=skPFjy5EDl)tt@U{WWQzZg~qPt=Bl-GlL
z2?i35bRTltOSA<z%oi;<aE>2qA+>c#?&|!WYvzff(YFCI%*Rg1oY5`6D~hkCDBcJL
z7{CvR{N<X(*<Z9x+%_G4s=uCJRr{*B^ZW3GuX7M+jVyunOq3j-gGQ-Ov@4Zhed-9*
z(pv0@oxD)<2roB+1J4GiVmc|QSgjQlZcNpq)g;{^K(E-_Kki2K{hkfba5>32O0zE&
zIAePI?7U<(D4#}BD|WGB5#reHEI)SWf=+J{_{vyo%!1L2d(OvZHI^?9AsdCXrP81u
zcpQVEpQTm0A3c@C+_g*aAT3}&(9Ilg!7<AJ_KH#bX34EmQM3bgs!@Q}19#O3;j^5f
z8Tdj><7bGqfzav<%;Pe$``}$$b+8K+)HMMyqep3cLC|C5aH*6^3!FjO--ZxchnII<
z*?X=ZH&>72KvQ)(N@}v3SVb;Eokx~lfpE<PiUFhcpMU&)(Pi@eK5UJ<=^o09W;cNi
z>ex8Q4eC8ShXO^|<d3vkZoR+Hn$(I`nonDSd+JzVzAnHQby}v4fk`cCy$R%0N`4E}
z@vpsK4N&>Wwe2Z?+h$bSLU(#*?!WlZ>l}0n{&+8O_X3qP7(v~D0UCJV35kfnEDchk
zm-K|&UxM#%>cpzhRe$`x!T;rIABV53F~Ng?umjgMSpOa5HqpTVviyKUy3+Wsr+tP3
z<kchu5HcWH{ips%v|VdEC>@BPd^sKf)~>8d`i65@F+x@U#Fh9eGo6-M+O*X-IGsB}
zet#k|mN0g9N5iHQkj^=H<z?pjoS2AR`kwfmrH<r;2gl&I@JVshi$_A5VIog=J;=q?
zZkAEk2n+W3g#z;UPLwd;3yV=^)_Ih@+3s=k_2?5wV%P`H+E$3Sgz@McSF+=Mi@ykq
zH%ASX*yS;;XqX;oTnBNU2Ihk0Xo-XbMQ=lJzymoC<%iKpi|8dY70X)A+jMafQ!RUT
zltH|VmCBW7bowA+?X$97Ju$<e?r0OE6q*!#t<jT-+5wts6HbZo7|tgQLU!yoAc}rS
z%WVAIom|#d_3LoBxp}1r43A{4@MLY?2k#Vt^tnBDo=FAzL$X2lW$-*8-Ce7XH^v<^
ze;D*xpvfOzZ2~c2;@qcSSeYfjCoBZAMwC}I5c)8RgP-lnaoaXbYsOHT3Igz8?1-Jy
zz5Nk=X#u!KA&#3r-MH@<_#esXf*RxQw-N<OUG~o!udKmuy9JhbIcUJ|VGpDm1!NdU
z4SC4&AV;2Kqk?;RLkiec*z9QOuWSUZXEB-jeS>j_84fKXn)NMVXcvDbGHzp6ktjGK
z8_4f#n*1K9>h(--{qaT8qjs;+9LZZ)&LZVQOb%c*5%`0Rp_V9;oCLEfp_8P9cMK=2
zRa`An4WS?3zD5JztVye0!NN%S)X`Ejgy9X_;i7tdP_l#wk&{?_0R>@nbO~7+bwFE;
z=35|A2GH|DNqKU`VSP7~wKml67B@U8HDZj<?3YOtwc=>SEz<-M*7s{)#Cjf+xh@Gz
zSp&Qyyw%s$fqG?Jvhm*ysoIAO5zl)&Fz)c5rx_o4v=xF29a|=mUXfJhCodPHu3)Mp
z!(Oq<Rtp?~|6qh37`Nokh&Qp$WmaiT{?0#q7K@Dj2#;&i>OgdEg&ya@SW}#!pUnrc
zb<E_ZjgreqA6i0ln$Jq&${PK7TV&(~vL??1s9hm_L=&!e#oci^d(sy9+Y&D}BO&|q
zC?b+DbC%A)Tk|@LoS=+-o$t%$%^*jQ_T#|!tGwjbH&637*uTb&x}&0r@Sl4R{|pql
z4*$Onk(x|&4#2?wK_%d>_rGpXKmh+q@&CL3&mck>{TH5a>4Dw)%z*BT|4UE*TK{Jd
zr}6BZHhJ#-0wGZe=AcziZ#w-F-T&+>EUt(!aoV5896TG(p*gt8MT5z%-+jGh<Eo-D
zPF_$d#0JL5PWwd+;wlEdNjESl&djdcGcxM^pv3uLY<H1oUjN;!XmSdv$FHTI1IV{(
zCbDkggC>xGM~SivGuC9@PQ!QU_v|!>oy|n8Xr399JO`O#%_}?IsFyEu?GT5n*E*?S
znW}+w8!*S>Jv_LcX7r<XHEB0JbS*R=sI?$-rN@EBbs4RdoWPQRX5A@3SR?`WD-LGy
zQa!bjmw9nqlfr?wdu}{Hg~?-e03?m6-6*>bx(9pDifj?8ZE==|f)C?=s#3WXb*@03
zHA0ydY-`dDV}+z@GRS#EjDbuE#aaH@*_~OtJt2Q*$&ruXZc3~JS*zjn$Hd>49j{hK
zqY0IYICX>$L4U6rKjs&~{SxRTnidLqxtg~2bmPoz<o-i#KQ=NrZtw2n2N2Auzq>a7
z2=wJNwx?5O2!`;D>!SD$0#(~@S8r8)C2wB}ai_De>qXt$kQhT88__9>-9FupkZ50c
zjafpVf@qMEOSAJDVTk&x2Gerw$*+A(Ih=KW_WbcD6bO7comE<M<ATgSrI#C^;-hzG
zavfFdXmL&5bWN6xy~!#|0OaQd!#`+@YlY;-d|=Ea4+z8O`40$=bk@UAI71~NH7MIq
zrrr2!l=p8~OjHT=T4tx8p~T>mg(gYWt{@?pada_B-piVsLYqLI2J2{*(gc`1){(h5
z!+BeR-hG4#96RvxyyjBoe!J<GyHY;nSRFk6zH+*HY=Lr>`hu#>0Ki^?L?CL(+@4>q
z->#omL8%@27fSrF&OI_jom@rRY7TKH>06CqhJX@9Bwmm1g(S5UU-1XcKa%U9L(CO!
z9&u{)4#t8e4b5vXcF1~YQ4Xi}KTdSip_yh~VIZNA$Mj0L$8-*1nO3ob0gG_mQk1Hm
zW208%Q82NQD6Dbc09^S$&a);$K%uG#{5J9dyGIyPP=x!~7b!y{+pX9R+SWC#Pxw`F
zPo$(4UFlZh*)F1rYYAjaH(q@V2O7hpp_Bx~6k!*XrgV5m^vPJm!zPgV(@J!ToQqH^
z*lJoW0UP))B`l$(<!!^o6<e>Fq30X_RD8#Z9OaDRem#?H0vfY;&Q?$XsGvOWCJzkd
z2<s^e@HD#b-IMD%4(%!Dp9G3xqW0pdVr8YKI;e8zD5AZ?KSA#HRxe$HqqDan+e@eR
zIgnVevo5wa0t$x>y9b=2ap^F<d7X(BsdVIi6lj_!k%%KicYz(ic}u2{j}E0q5FoMH
zLmE=?Bh1Ci1A30E2|B9n0Y**Upv9pgE4)w9duUULcv6wX@y4gE@@OWETUI-<3>#5f
zJz<yN=53%f3}!I$+o~#O)8VWe>h<%`QpBd!Y~MdG8N*6KG4N4jGH-)lk^LIv@28Wi
zK~m9lWI1anBST|0g28QR*f=0}gc=wQEw%RFB_FqK0He$L2hoo#>|4fx#o{z-cBo+{
zrIdl~(SzfNv1zz}mpkLU$i|${r?WTB2x|NBx7OJk-BH&V8IX<V3{eqwgrHf@VjJ07
zzXNc{+}h~DlDPvTr=82d7hoJoRj&ILKMWz_ecbcxkUbIMJ=HAXO`dB?ZIk3`CK&#J
zge;<60m4R0bIAyCW^wbPbcJOW*f+`*m8oL(BKvy>{a-Add+`omEGC;C!b8lDf&)wQ
z9fC?0HjPnV!c%eb^oy54e=YEt??eZI@XkdAkxc4ptwRRhBV}@Jc}D@<$XSDlML3uo
zx>AJ1ZDuYXvB>aS>l@+y91vv82N>+k5-%+90Vv|!F}iHhzA#W${F&)kA;R7`D`dmo
zoh8$X-qjeJdunTkxn%SmEFP8Z&#~l7q_ML;q~h~#(4C@peG!NAsNS(PqL^MwR1^!>
zNPRB@ra>wBu%0*$ORT!5aCF=h9OhoiBjvvyY1=V7e(y4qZ1!)V?IRP;krwGC0j`1`
z0fpOO{_CJ;<Xw<2;?TxXH&{oBgh?2OjP1f6eXlZ3pkE!}^_UNgalhS-C0KVuzU-iz
zkw02LyS6Y#1Mzz&O;oPh`n$R{M+5NNC*3@b+Jd{fwZa4NTPFd24ZAT<ge!V;*sA`-
zO4Dv(_t4Oa|LlyS#^{Zqd>Am)>buk%0Asm6TZY{avxW;JD0__nopwuq>7(r9)FCP2
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

delta 17166
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
b+aSmEHh*$#gA_C?h)tf*z{e(33~~zqGI2Hu

diff --git a/dta/classes/database.php b/dta/classes/database.php
index a444dee..a384b96 100644
--- a/dta/classes/database.php
+++ b/dta/classes/database.php
@@ -32,6 +32,26 @@ class DbUtils {
      */
     private const TABLE_RESULT = "assignsubmission_dta_result";
 
+    private const TABLE_RECOMMENDATIONS = "assignsubmission_dta_recommendations";
+
+    /**
+     * Gets the recommendations for a given submission.
+     *
+     * @param int $submissionid ID of the submission
+     * @return array list of recommendations
+     */
+    public static function get_recommendations_from_database(int $assignmentid,int $submissionid ): array {
+        global $DB;
+
+        // Query the database to get all recommendations for the given submission id.
+        $records = $DB->get_records(self::TABLE_RECOMMENDATIONS, [
+            'assignment_id' => $assignmentid,
+            'submission_id' => $submissionid,
+    ]);
+
+        return $records;
+    }
+
     /**
      * gets summary with all corresponding result entries
      *
@@ -83,6 +103,52 @@ class DbUtils {
 
         return $summary;
     }
+    public static function storeRecommendationstoDatabase(
+        int $assignmentid,
+        int $submissionid,
+        array $recommendations
+    ): void {
+        global $DB;
+        error_log(print_r($recommendations,true));
+    
+        // Prepare recommendations to persist to array.
+        $recommendationrecords = [];
+        foreach ($recommendations as $recommendation) {
+            $record = new stdClass();
+            $record->assignment_id = $assignmentid;
+            $record->submission_id = $submissionid;
+            $record->topic = $recommendation['topic'];
+            $record->url = $recommendation['url'];
+            $record->exercise_name = $recommendation['exercise_name'];
+            $record->difficulty = $recommendation['difficulty'];
+            $record->score = $recommendation['score'];
+            $recommendationrecords[] = $record;
+        }
+    
+        error_log("Das sind die Recommendationrecords.");
+        error_log(print_r($recommendationrecords,true));
+    
+        // If recommendations already exist, delete old values beforehand.
+        $existingrecords = $DB->get_record('assignsubmission_dta_recommendations', [
+            'assignment_id' => $assignmentid,
+            'submission_id' => $submissionid,
+        ]);
+    
+        if ($existingrecords) {
+            $DB->delete_records('assignsubmission_dta_recommendations', [
+                'assignment_id' => $assignmentid,
+                'submission_id' => $submissionid,
+            ]);
+        }
+    
+        // Create new recommendation entries.
+        foreach ($recommendationrecords as $rec) {
+            error_log("Insert record");
+            error_log(print_r($rec,true));
+            $DB->insert_record('assignsubmission_dta_recommendations', $rec);
+        }
+    }
+    
 
     /**
      * save given result summary and single results to database
@@ -107,8 +173,7 @@ class DbUtils {
         $summaryrecord->global_stacktrace = $summary->globalstacktrace;
         $summaryrecord->successful_competencies = $summary->successfultestcompetencies;
         $summaryrecord->tested_competencies = $summary->overalltestcompetencies;
-        $summaryrecord->recommendations = $summary->recommendations;
-
+        
         // Prepare results to persist to array.
         $resultrecords = [];
         foreach ($summary->results as $r) {
@@ -161,6 +226,8 @@ class DbUtils {
 
         $DB->delete_records(self::TABLE_RESULT, null);
         $DB->delete_records(self::TABLE_SUMMARY, null);
+        $DB->delete_records(self::TABLE_RECOMMENDATIONS, null);
+
     }
 
 }
diff --git a/dta/classes/privacy/provider.php b/dta/classes/privacy/provider.php
index ca26121..7eb66e4 100644
--- a/dta/classes/privacy/provider.php
+++ b/dta/classes/privacy/provider.php
@@ -57,7 +57,6 @@ class provider implements \core_privacy\local\metadata\provider,
                 'global_stacktrace' => 'privacy:metadata:assignsubmission_dta_summary:global_stacktrace',
                 'successful_competencies' => 'privacy:metadata:assignsubmission_dta_summary:successful_competencies',
                 'tested_competencies' => 'privacy:metadata:assignsubmission_dta_summary:tested_competencies',
-                'recommendations' => 'privacy:metadata:assignsubmission_dta_summary:recommendations',
 
             ],
             'privacy:metadata:assignsubmission_dta_summary'
diff --git a/dta/classes/view.php b/dta/classes/view.php
index b93d3e5..eb1d8a9 100644
--- a/dta/classes/view.php
+++ b/dta/classes/view.php
@@ -19,7 +19,6 @@
  *
  * @package assignsubmission_dta
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- * @copyright Gero Lueckemeyer and student project teams
  */
 class view_submission_utils {
 
@@ -85,342 +84,318 @@ class view_submission_utils {
     }
 
     /**
-     * generates detailed view html
-     *
-     * @param int $assignmentid assignment
-     * @param int $submissionid submission to create a report for
-     */
-    public static function generatedetailhtml(
-        int $assignmentid,
-        int $submissionid
-    ): string {
-
-        // Fetch data.
-        $summary = DbUtils::getResultSummaryFromDatabase($assignmentid, $submissionid);
-        $html = "";
-
-        // Define a few css classes and prepare html attribute arrays to beautify the output.
-        $tableheaderrowattributes = ["class" => "dtaTableHeaderRow"];
-        $tablerowattributes = ["class" => "dtaTableRow"];
-        $resultrowattributes = $tablerowattributes;
-        $unknownattributes = 'dtaResultUnknown';
-        $successattributes = 'dtaResultSuccess';
-        $failureattributes = 'dtaResultFailure';
-        $compilationerrorattributes = 'dtaResultCompilationError';
-
-        // Summary table.
-        $tmp = "";
-        $tmp .= html_writer::tag("th", get_string("summary", self::COMPONENT_NAME), ["class" => "dtaTableHeader"]);
-        $tmp .= html_writer::empty_tag("th", ["class" => "dtaTableHeader"]);
-        $header = html_writer::tag("tr", $tmp, $tableheaderrowattributes);
-        $header = html_writer::tag("thead", $header);
+ * Generiert die detaillierte HTML-Ansicht, einschließlich Zusammenfassung, Kompetenzen, Details und Empfehlungen.
+ *
+ * @param int $assignmentid Assignment-ID
+ * @param int $submissionid Submission-ID, für die der Bericht erstellt wird
+ * @return string HTML-Code
+ */
+public static function generatedetailhtml(
+    int $assignmentid,
+    int $submissionid
+): string {
+
+    // HTML-Inhalt initialisieren
+    $html = "";
+
+    // Daten abrufen
+    $summary = DbUtils::getResultSummaryFromDatabase($assignmentid, $submissionid);
+
+    // CSS-Klassen und HTML-Attributarrays definieren
+    $tableheaderrowattributes = ["class" => "dtaTableHeaderRow"];
+    $tablerowattributes = ["class" => "dtaTableRow"];
+    $attributes = ["class" => "dtaTableData"];
+    $unknownattributes = 'dtaResultUnknown';
+    $successattributes = 'dtaResultSuccess';
+    $failureattributes = 'dtaResultFailure';
+    $compilationerrorattributes = 'dtaResultCompilationError';
+
+    // **Zusammenfassungstabelle erstellen**
+    // Kopfzeile
+    $tmp = "";
+    $tmp .= html_writer::tag("th", get_string("summary", self::COMPONENT_NAME), ["class" => "dtaTableHeader"]);
+    $tmp .= html_writer::empty_tag("th", ["class" => "dtaTableHeader"]);
+    $header = html_writer::tag("tr", $tmp, $tableheaderrowattributes);
+    $header = html_writer::tag("thead", $header);
+
+    // Tabellenkörper
+    $body = "";
+
+    // Gesamtanzahl
+    $tmp = "";
+    $tmp .= html_writer::tag("td", get_string("total_items", self::COMPONENT_NAME), $attributes);
+    $tmp .= html_writer::tag("td", $summary->resultCount(), $attributes);
+
+    $resultrowattributes = $tablerowattributes;
+    $resultrowattributes['class'] .= " " . $unknownattributes;
+
+    $body .= html_writer::tag("tr", $tmp, $resultrowattributes);
+
+    // Erfolgreiche Tests
+    $tmp = "";
+    $tmp .= html_writer::tag("td", get_string("tests_successful", self::COMPONENT_NAME), $attributes);
+    $tmp .= html_writer::tag("td", $summary->successfulCount(), $attributes);
+
+    $resultrowattributes = $tablerowattributes;
+    $successrate = "?";
+
+    if ($summary->unknownCount() > 0 || $summary->compilationErrorCount() > 0) {
+        $resultrowattributes['class'] .= " " . $unknownattributes;
+    } else {
+        $successrate = round(($summary->successfulCount() / $summary->resultCount()) * 100, 2 );
+        if ($successrate < 50) {
+            $resultrowattributes['class'] .= " " . $compilationerrorattributes;
+        } else if ($successrate < 75) {
+            $resultrowattributes['class'] .= " " . $failureattributes;
+        } else {
+            $resultrowattributes['class'] .= " " . $successattributes;
+        }
+    }
+    $body .= html_writer::tag("tr", $tmp, $resultrowattributes);
+
+    // Fehlgeschlagene Tests
+    $tmp = "";
+    $tmp .= html_writer::tag("td", get_string("failures", self::COMPONENT_NAME), $attributes);
+    $tmp .= html_writer::tag("td", $summary->failedCount(), $attributes);
+
+    $resultrowattributes = $tablerowattributes;
+    if ($summary->failedCount() > 0) {
+        $resultrowattributes['class'] .= " " . $failureattributes;
+    } else {
+        $resultrowattributes['class'] .= " " . $successattributes;
+    }
+    $body .= html_writer::tag("tr", $tmp, $resultrowattributes);
+
+    // Kompilierungsfehler
+    $tmp = "";
+    $tmp .= html_writer::tag("td", get_string("compilation_errors", self::COMPONENT_NAME), $attributes);
+    $tmp .= html_writer::tag("td", $summary->compilationErrorCount(), $attributes);
+
+    $resultrowattributes = $tablerowattributes;
+    if ($summary->compilationErrorCount() > 0) {
+        $resultrowattributes['class'] .= " " . $compilationerrorattributes;
+    } else {
+        $resultrowattributes['class'] .= " " . $successattributes;
+    }
+    $body .= html_writer::tag("tr", $tmp, $resultrowattributes);
+
+    // Unbekannter Status
+    $tmp = "";
+    $tmp .= html_writer::tag("td", get_string("unknown_state", self::COMPONENT_NAME), $attributes);
+    $tmp .= html_writer::tag("td", $summary->unknownCount(), $attributes);
+
+    $resultrowattributes = $tablerowattributes;
+    if ($summary->unknownCount() > 0) {
+        $resultrowattributes['class'] .= " " . $unknownattributes;
+    } else {
+        $resultrowattributes['class'] .= " " . $successattributes;
+    }
+    $body .= html_writer::tag("tr", $tmp, $resultrowattributes);
+
+    // Erfolgsrate
+    $tmp = "";
+    $tmp .= html_writer::tag("td", html_writer::tag("b", get_string("success_rate", self::COMPONENT_NAME)), $attributes);
+    $tmp .= html_writer::tag(
+        "td",
+        html_writer::tag("b", $summary->successfulCount()
+            . "/" . (($summary->compilationErrorCount() == 0 && $summary->unknownCount() == 0) ? $summary->resultCount()
+            . " (" . $successrate . "%)"
+                : "?")),
+        $attributes);
+
+    $resultrowattributes = $tablerowattributes;
+    if ($summary->unknownCount() > 0 || $summary->compilationErrorCount() > 0) {
+        $resultrowattributes['class'] .= " " . $unknownattributes;
+    } else {
+        if ($successrate < 50) {
+            $resultrowattributes['class'] .= " " . $compilationerrorattributes;
+        } else if ($successrate < 75) {
+            $resultrowattributes['class'] .= " " . $failureattributes;
+        } else {
+            $resultrowattributes['class'] .= " " . $successattributes;
+        }
+    }
+    $body .= html_writer::tag("tr", $tmp, $resultrowattributes);
 
-        $body = "";
-        $tmp = "";
-        $attributes = ["class" => "dtaTableData"];
-        $tmp .= html_writer::tag(
-            "td",
-            get_string("total_items", self::COMPONENT_NAME),
-            $attributes);
+    // Tabelle zusammenstellen
+    $body = html_writer::tag("tbody", $body);
+    $table = html_writer::tag("table", $header . $body, ["class" => "dtaTable"]);
 
-        $tmp .= html_writer::tag(
-            "td",
-            $summary->resultCount(),
-            $attributes);
+    $html .= $table;
 
-        $resultrowattributes = $tablerowattributes;
-        $resultrowattributes['class'] = $resultrowattributes['class'] . " " . $unknownattributes;
+    // **Abstand zwischen Tabellen**
+    $html .= html_writer::empty_tag("div", ["class" => "dtaSpacer"]);
 
-        $body .= html_writer::tag("tr", $tmp, $resultrowattributes);
+    // **Kompetenzbewertungstabelle erstellen**
+    $body = "";
+    $tmp = "";
+    $tmp .= html_writer::tag("th", get_string("competencies", self::COMPONENT_NAME), ["class" => "dtaTableHeader"]);
+    $tmp .= html_writer::empty_tag("th", ["class" => "dtaTableHeader"]);
+    $header = html_writer::tag("tr", $tmp, $tableheaderrowattributes);
+    $header = html_writer::tag("thead", $header);
 
-        $tmp = "";
-        $tmp .= html_writer::tag("td", get_string("tests_successful", self::COMPONENT_NAME), $attributes);
-        $tmp .= html_writer::tag( "td", $summary->successfulCount(), $attributes);
+    $showncompetencies = explode(";", $summary->successfultestcompetencies);
+    $overallcompetencies = explode(";", $summary->overalltestcompetencies);
 
-        $resultrowattributes = $tablerowattributes;
-        $successrate = "?";
+    for ($index = 0, $size = count($overallcompetencies); $index < $size; $index++) {
+        $comp = $overallcompetencies[$index];
+        $shown = $showncompetencies[$index];
+        // Kompetenz wird nur hinzugefügt, wenn sie bewertet wurde
+        if ($comp != "0") {
+            $resultrowattributes = $tablerowattributes;
+            $tmp = "";
+            $tmp .= html_writer::tag("td", get_string("comp" . $index, self::COMPONENT_NAME), $attributes);
+            $tmp .= html_writer::tag("td", 100 * floatval($shown) / floatval($comp) . "% " .
+                "(" . $shown . " / " . $comp . ")", $attributes);
+            $tmp .= html_writer::tag("td", get_string("comp_expl" . $index, self::COMPONENT_NAME), $attributes);
 
-        if ($summary->unknownCount() > 0 || $summary->compilationErrorCount() > 0) {
-            $resultrowattributes['class'] = $resultrowattributes['class'] . " " . $unknownattributes;
-        } else {
-            $successrate = round(($summary->successfulCount() / $summary->resultCount()) * 100, 2 );
-            if ($successrate < 50) {
-                $resultrowattributes['class'] = $resultrowattributes['class'] . " " . $compilationerrorattributes;
-            } else if ($successrate < 75) {
-                $resultrowattributes['class'] = $resultrowattributes['class'] . " " . $failureattributes;
-            } else {
-                $resultrowattributes['class'] = $resultrowattributes['class'] . " " . $successattributes;
-            }
+            $body .= html_writer::tag("tr", $tmp, $resultrowattributes);
         }
-        $body .= html_writer::tag("tr", $tmp, $resultrowattributes);
-
-        $tmp = "";
-        $tmp .= html_writer::tag("td", get_string("failures", self::COMPONENT_NAME), $attributes);
-        $tmp .= html_writer::tag("td", $summary->failedCount(), $attributes);
-
-        $resultrowattributes = $tablerowattributes;
-        if ($summary->failedCount() > 0) {
-            $resultrowattributes['class'] = $resultrowattributes['class'] . " " . $failureattributes;
-        } else {
-            $resultrowattributes['class'] = $resultrowattributes['class'] . " " . $successattributes;
+    }
+    $body = html_writer::tag("tbody", $body);
+    $html .= html_writer::tag("table", $header . $body, ["class" => "dtaTable"]);
+
+    // **Abstand zwischen Tabellen**
+    $html .= html_writer::empty_tag("div", ["class" => "dtaSpacer"]);
+
+    // **Detailtabelle erstellen**
+    $tmp = "";
+    $tmp .= html_writer::tag("th", get_string("details", self::COMPONENT_NAME), ["class" => "dtaTableHeader"]);
+    $tmp .= html_writer::empty_tag("th", ["class" => "dtaTableHeader"]);
+    $header = html_writer::tag("tr", $tmp, $tableheaderrowattributes);
+    $header = html_writer::tag("thead", $header);
+
+    $body = "";
+    $spacerrow = null;
+    foreach ($summary->results as $r) {
+        // Abstand zwischen den Ergebnissen
+        if (!is_null($spacerrow)) {
+            $body .= $spacerrow;
         }
-        $body .= html_writer::tag("tr", $tmp, $resultrowattributes);
-
-        $tmp = "";
-        $tmp .= html_writer::tag("td", get_string("compilation_errors", self::COMPONENT_NAME), $attributes);
-        $tmp .= html_writer::tag("td", $summary->compilationErrorCount(), $attributes);
 
         $resultrowattributes = $tablerowattributes;
-        if ($summary->compilationErrorCount() > 0) {
-            $resultrowattributes['class'] = $resultrowattributes['class'] . " " . $compilationerrorattributes;
-        } else {
-            $resultrowattributes['class'] = $resultrowattributes['class'] . " " . $successattributes;
-        }
-        $body .= html_writer::tag("tr", $tmp, $resultrowattributes);
-
-        $tmp = "";
-        $tmp .= html_writer::tag("td", get_string("unknown_state", self::COMPONENT_NAME), $attributes);
-        $tmp .= html_writer::tag("td", $summary->unknownCount(), $attributes);
 
-        $resultrowattributes = $tablerowattributes;
-        if ($summary->unknownCount() > 0) {
-            $resultrowattributes['class'] = $resultrowattributes['class'] . " " . $unknownattributes;
-        } else {
-            $resultrowattributes['class'] = $resultrowattributes['class'] . " " . $successattributes;
+        // CSS-Klasse basierend auf dem Status des Ergebnisses hinzufügen
+        if ($r->state == 0) {
+            $resultrowattributes['class'] .= ' dtaResultUnknown';
+        } else if ($r->state == 1) {
+            $resultrowattributes['class'] .= ' dtaResultSuccess';
+        } else if ($r->state == 2) {
+            $resultrowattributes['class'] .= ' dtaResultFailure';
+        } else if ($r->state == 3) {
+            $resultrowattributes['class'] .= ' dtaResultCompilationError';
         }
-        $body .= html_writer::tag("tr", $tmp, $resultrowattributes);
 
         $tmp = "";
-        $tmp .= html_writer::tag("td", html_writer::tag("b", get_string("success_rate", self::COMPONENT_NAME)), $attributes);
-        $tmp .= html_writer::tag(
-            "td",
-            html_writer::tag("b", $summary->successfulCount()
-                . "/" . (($summary->compilationErrorCount() == 0 && $summary->unknownCount() == 0) ? $summary->resultCount()
-                . " (" . $successrate . "%)"
-                    : "?")),
-            $attributes);
-
-        $resultrowattributes = $tablerowattributes;
-        if ($summary->unknownCount() > 0 || $summary->compilationErrorCount() > 0) {
-            $resultrowattributes['class'] = $resultrowattributes['class'] . " " . $unknownattributes;
-        } else {
-            if ($successrate < 50) {
-                $resultrowattributes['class'] = $resultrowattributes['class'] . " " . $compilationerrorattributes;
-            } else if ($successrate < 75) {
-                $resultrowattributes['class'] = $resultrowattributes['class'] . " " . $failureattributes;
-            } else {
-                $resultrowattributes['class'] = $resultrowattributes['class'] . " " . $successattributes;
-            }
-        }
+        $tmp .= html_writer::tag("td", get_string("package_name", self::COMPONENT_NAME), $attributes);
+        $tmp .= html_writer::tag("td", $r->packagename, $attributes);
+        $tmp .= html_writer::tag("td", get_string("unit_name", self::COMPONENT_NAME), $attributes);
+        $tmp .= html_writer::tag("td", $r->classname, $attributes);
+        $tmp .= html_writer::tag("td", get_string("test_name", self::COMPONENT_NAME), $attributes);
+        $tmp .= html_writer::tag("td", $r->name, $attributes);
         $body .= html_writer::tag("tr", $tmp, $resultrowattributes);
 
-        $body = html_writer::tag("tbody", $body);
-        $table = html_writer::tag("table", $header . $body, ["class" => "dtaTable"]);
-
-        $html .= $table;
-
-        // Add empty div for spacing between summary and compentency table.
-        $html .= html_writer::empty_tag("div", ["class" => "dtaSpacer"]);
-
-        // Competency assessment table.
-        $body = "";
         $tmp = "";
-        $tmp .= html_writer::tag("th", get_string("competencies", self::COMPONENT_NAME), ["class" => "dtaTableHeader"]);
-        $tmp .= html_writer::empty_tag("th", ["class" => "dtaTableHeader"]);
-        $header = html_writer::tag("tr", $tmp, $tableheaderrowattributes);
-        $header = html_writer::tag("thead", $header);
-
-        $showncompetencies = explode(";", $summary->successfultestcompetencies);
-        $overallcompetencies = explode(";", $summary->overalltestcompetencies);
-
-        for ($index = 0, $size = count($overallcompetencies); $index < $size; $index++) {
-            $comp = $overallcompetencies[$index];
-            $shown = $showncompetencies[$index];
-            // If the competency was actually assessed by the assignment and tests, add a row in the table.
-            if ($comp != "0") {
-                // New copy of base attributes array.
-                $resultrowattributes = $tablerowattributes;
-                $tmp = "";
-                $tmp .= html_writer::tag("td", get_string("comp" . $index, self::COMPONENT_NAME), $resultrowattributes);
-                $tmp .= html_writer::tag("td", 100 * floatval($shown) / floatval($comp) . "% " .
-                    "(" . $shown . " / " . $comp . ")", $resultrowattributes);
-                $tmp .= html_writer::tag("td", get_string("comp_expl" . $index, self::COMPONENT_NAME), $resultrowattributes);
-
-                $body .= html_writer::tag("tr", $tmp, $resultrowattributes);
-            }
-        }
-        $body = html_writer::tag("tbody", $body);
-        $html .= html_writer::tag("table", $header . $body, ["class" => "dtaTable"]);
-
-        // Add empty div for spacing between competency and details table.
-        $html .= html_writer::empty_tag("div", ["class" => "dtaSpacer"]);
-
-        // Details table.
-        $tmp = "";
-        $tmp .= html_writer::tag("th", get_string("details", self::COMPONENT_NAME), ["class" => "dtaTableHeader"]);
-        $tmp .= html_writer::empty_tag("th", ["class" => "dtaTableHeader"]);
-        $header = html_writer::tag("tr", $tmp, $tableheaderrowattributes);
-        $header = html_writer::tag("thead", $header);
-
-        $body = "";
-        $spacerrow = null;
-        foreach ($summary->results as $r) {
-            // Add spacer first if not null.
-            if (!is_null($spacerrow)) {
-                $body .= $spacerrow;
-            }
-
-            // New copy of base attributes array.
-            $resultrowattributes = $tablerowattributes;
-
-            // Check which css class to add for the colored left-border according to resuls state.
-            if ($r->state == 0) {
-                $resultrowattributes['class'] = $resultrowattributes['class'] . ' dtaResultUnknown';
-            } else if ($r->state == 1) {
-                $resultrowattributes['class'] = $resultrowattributes['class'] . ' dtaResultSuccess';
-            } else if ($r->state == 2) {
-                $resultrowattributes['class'] = $resultrowattributes['class'] . ' dtaResultFailure';
-            } else if ($r->state == 3) {
-                $resultrowattributes['class'] = $resultrowattributes['class'] . ' dtaResultCompilationError';
-            }
+        $tmp .= html_writer::tag("td", get_string("status", self::COMPONENT_NAME), $attributes);
+        $tmp .= html_writer::tag("td", DtaResult::getStateName($r->state), $attributes);
+        $body .= html_writer::tag("tr", $tmp, $resultrowattributes);
 
+        // Zusätzliche Informationen für nicht erfolgreiche Zustände
+        if ($r->state != 1) {
             $tmp = "";
-            $tmp .= html_writer::tag(
-                "td",
-                get_string("package_name", self::COMPONENT_NAME),
-                $attributes);
-
-            $tmp .= html_writer::tag(
-                "td",
-                $r->packagename,
-                $attributes);
-
-            $tmp .= html_writer::tag(
-                "td",
-                get_string("unit_name", self::COMPONENT_NAME),
-                $attributes);
-
-            $tmp .= html_writer::tag(
-                "td",
-                $r->classname,
-                $attributes);
-
-            $tmp .= html_writer::tag(
-                "td",
-                get_string("test_name", self::COMPONENT_NAME),
-                $attributes);
-
-            $tmp .= html_writer::tag(
-                "td",
-                $r->name,
-                $attributes);
+            $tmp .= html_writer::tag("td", get_string("failure_type", self::COMPONENT_NAME), $attributes);
+            $tmp .= html_writer::tag("td", $r->failureType, $attributes);
             $body .= html_writer::tag("tr", $tmp, $resultrowattributes);
 
             $tmp = "";
-            $tmp .= html_writer::tag(
-                "td",
-                get_string("status", self::COMPONENT_NAME),
-                $attributes);
-
-            $tmp .= html_writer::tag(
-                "td",
-                DtaResult::getStateName($r->state),
-                $attributes);
+            $tmp .= html_writer::tag("td", get_string("failure_reason", self::COMPONENT_NAME), $attributes);
+            $tmp .= html_writer::tag("td", $r->failureReason, $attributes);
             $body .= html_writer::tag("tr", $tmp, $resultrowattributes);
 
-            // If state is something different than successful, show additional rows.
-            if ($r->state != 1) {
+            // Zeilennummer anzeigen, falls vorhanden
+            if (!is_null($r->lineNumber) && $r->lineNumber > 0) {
                 $tmp = "";
-                $tmp .= html_writer::tag(
-                    "td",
-                    get_string("failure_type", self::COMPONENT_NAME),
-                    $attributes);
-
-                $tmp .= html_writer::tag(
-                    "td",
-                    $r->failureType,
-                    $attributes);
+                $tmp .= html_writer::tag("td", get_string("line_no", self::COMPONENT_NAME), $attributes);
+                $tmp .= html_writer::tag("td", $r->lineNumber, $attributes);
                 $body .= html_writer::tag("tr", $tmp, $resultrowattributes);
+            }
 
+            // Spaltennummer anzeigen, falls vorhanden
+            if (!is_null($r->columnNumber) && $r->columnNumber > 0) {
                 $tmp = "";
-                $tmp .= html_writer::tag(
-                    "td",
-                    get_string("failure_reason", self::COMPONENT_NAME),
-                    $attributes);
-
-                $tmp .= html_writer::tag(
-                    "td",
-                    $r->failureReason,
-                    $attributes);
+                $tmp .= html_writer::tag("td", get_string("col_no", self::COMPONENT_NAME), $attributes);
+                $tmp .= html_writer::tag("td", $r->columnNumber, $attributes);
                 $body .= html_writer::tag("tr", $tmp, $resultrowattributes);
+            }
 
-                // Only show line, column and position if they have useful values.
-                if (!is_null($r->lineNumber) && $r->lineNumber > 0) {
-                    $tmp = "";
-                    $tmp .= html_writer::tag(
-                        "td",
-                        get_string("line_no", self::COMPONENT_NAME),
-                        $attributes);
-
-                    $tmp .= html_writer::tag(
-                        "td",
-                        $r->lineNumber,
-                        $attributes);
-                    $body .= html_writer::tag("tr", $tmp, $resultrowattributes);
-                }
-
-                if (!is_null($r->columnNumber) && $r->columnNumber > 0) {
-                    $tmp = "";
-                    $tmp .= html_writer::tag(
-                        "td",
-                        get_string("col_no", self::COMPONENT_NAME),
-                        $attributes);
-
-                    $tmp .= html_writer::tag(
-                        "td",
-                        $r->columnNumber,
-                        $attributes);
-                    $body .= html_writer::tag("tr", $tmp, $resultrowattributes);
-                }
-
-                if (!is_null($r->position) && $r->position > 0) {
-                    $tmp = "";
-                    $tmp .= html_writer::tag(
-                        "td",
-                        get_string("pos", self::COMPONENT_NAME),
-                        $attributes);
-
-                    $tmp .= html_writer::tag(
-                        "td",
-                        $r->position,
-                        $attributes);
-                    $body .= html_writer::tag("tr", $tmp, $resultrowattributes);
-                }
-
+            // Position anzeigen, falls vorhanden
+            if (!is_null($r->position) && $r->position > 0) {
                 $tmp = "";
-                $tmp .= html_writer::tag(
-                    "td",
-                    get_string("stacktrace", self::COMPONENT_NAME),
-                    $attributes);
-
-                $tmp .= html_writer::tag(
-                    "td",
-                    html_writer::tag("details", $r->stacktrace, ["class" => "dtaStacktraceDetails"]),
-                    $attributes);
+                $tmp .= html_writer::tag("td", get_string("pos", self::COMPONENT_NAME), $attributes);
+                $tmp .= html_writer::tag("td", $r->position, $attributes);
                 $body .= html_writer::tag("tr", $tmp, $resultrowattributes);
             }
 
-            // Set spacerrow value if null for next round separation.
-            if (is_null($spacerrow)) {
-                $spacerrow = html_writer::empty_tag("tr", ["class" => "dtaTableSpacer"]);
-            }
+            // Stacktrace anzeigen
+            $tmp = "";
+            $tmp .= html_writer::tag("td", get_string("stacktrace", self::COMPONENT_NAME), $attributes);
+            $tmp .= html_writer::tag("td", html_writer::tag("details", $r->stacktrace, ["class" => "dtaStacktraceDetails"]), $attributes);
+            $body .= html_writer::tag("tr", $tmp, $resultrowattributes);
         }
-        $html .= html_writer::tag("table", $header . $body, ["class" => "dtaTable"]);
 
-        // Wrap generated html into final div.
-        $html = html_writer::div($html, "dtaSubmissionDetails");
+        // Spacerrow für den nächsten Durchlauf setzen
+        if (is_null($spacerrow)) {
+            $spacerrow = html_writer::empty_tag("tr", ["class" => "dtaTableSpacer"]);
+        }
+    }
+    $body = html_writer::tag("tbody", $body);
+    $html .= html_writer::tag("table", $header . $body, ["class" => "dtaTable"]);
+
+    // **Abstand zwischen Detailtabelle und Empfehlungstabelle**
+    $html .= html_writer::empty_tag("div", ["class" => "dtaSpacer"]);
+
+    // **Empfehlungstabelle hinzufügen**
+    // Empfehlungen für die Submission abrufen
+    $recommendations = DbUtils::get_recommendations_from_database($assignmentid, $submissionid);
+
+    if (!empty($recommendations)) {
+        // Überschrift für Empfehlungen
+        $html .= html_writer::tag('h3', get_string('recommendations', self::COMPONENT_NAME));
+
+        // Tabellenkopf für Empfehlungen
+        $tableheader = "";
+        $tableheader .= html_writer::tag("th", get_string("topic", self::COMPONENT_NAME), ["class" => "dtaTableHeader"]);
+        $tableheader .= html_writer::tag("th", get_string("exercise_name", self::COMPONENT_NAME), ["class" => "dtaTableHeader"]);
+        $tableheader .= html_writer::tag("th", get_string("url", self::COMPONENT_NAME), ["class" => "dtaTableHeader"]);
+        $tableheader .= html_writer::tag("th", get_string("difficulty", self::COMPONENT_NAME), ["class" => "dtaTableHeader"]);
+        $tableheader .= html_writer::tag("th", get_string("score", self::COMPONENT_NAME), ["class" => "dtaTableHeader"]);
+
+        $tableheader = html_writer::tag("tr", $tableheader, ["class" => "dtaTableHeaderRow"]);
+        $tableheader = html_writer::tag("thead", $tableheader);
+
+        // Tabellenkörper für Empfehlungen
+        $tablebody = "";
+        foreach ($recommendations as $recommendation) {
+            $tablerow = "";
+            $tablerow .= html_writer::tag("td", $recommendation->topic, $attributes);
+            $tablerow .= html_writer::tag("td", $recommendation->exercise_name, $attributes);
+            $tablerow .= html_writer::tag("td", html_writer::link($recommendation->url, $recommendation->url), $attributes);
+            $tablerow .= html_writer::tag("td", $recommendation->difficulty, $attributes);
+            $tablerow .= html_writer::tag("td", $recommendation->score, $attributes);
+
+            $tablebody .= html_writer::tag("tr", $tablerow, $tablerowattributes);
+        }
+        $tablebody = html_writer::tag("tbody", $tablebody);
 
-        return $html;
+        // Empfehlungstabelle zusammenstellen
+        $html .= html_writer::tag("table", $tableheader . $tablebody, ["class" => "dtaTable"]);
     }
 
+    // Abschließendes Div für die gesamte HTML-Ausgabe
+    $html = html_writer::div($html, "dtaSubmissionDetails");
+
+    return $html;
+}
+
+
 }
diff --git a/dta/db/install.xml b/dta/db/install.xml
index 4b74456..56126cf 100644
--- a/dta/db/install.xml
+++ b/dta/db/install.xml
@@ -11,7 +11,6 @@
         <FIELD NAME="submission_id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
         <FIELD NAME="successful_competencies" TYPE="char" LENGTH="80" NOTNULL="false"/>
         <FIELD NAME="tested_competencies" TYPE="char" LENGTH="80" NOTNULL="false"/>
-        <FIELD NAME="recommendations" TYPE="char" LENGTH="160" NOTNULL="false"/>
         <FIELD NAME="timestamp" TYPE="int" LENGTH="10"/>
         <FIELD NAME="global_stacktrace" TYPE="text"/>
       </FIELDS>
@@ -21,6 +20,23 @@
         <KEY NAME="fk_submission" TYPE="foreign" FIELDS="submission_id" REFTABLE="assign_submission" REFFIELDS="id"  COMMENT="The submission this summary relates to."/>
       </KEYS>
     </TABLE>
+    <TABLE NAME="assignsubmission_dta_recommendations" COMMENT="Stores recommendation data">
+      <FIELDS>
+        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true" COMMENT="Primary Key" />
+        <FIELD NAME="assignment_id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="submission_id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>  
+        <FIELD NAME="topic" TYPE="char" LENGTH="255" NOTNULL="true" COMMENT="Recommendation Topic" />
+        <FIELD NAME="exercise_name" TYPE="char" LENGTH="255" NOTNULL="true" COMMENT="Exercise Name" />
+        <FIELD NAME="url" TYPE="char" LENGTH="255" NOTNULL="true" COMMENT="Exercise URL" />
+        <FIELD NAME="difficulty" TYPE="number" LENGTH="10" NOTNULL="true" COMMENT="Exercise Difficulty" />
+        <FIELD NAME="score" TYPE="number" LENGTH="10" NOTNULL="true" COMMENT="Exercise Score" />
+      </FIELDS>
+      <KEYS>
+          <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
+          <KEY NAME="fk_assignment" TYPE="foreign" FIELDS="assignment_id" REFTABLE="assign" REFFIELDS="id" COMMENT="The assignment instance this recommendations relates to"/>
+          <KEY NAME="fk_submission" TYPE="foreign" FIELDS="submission_id" REFTABLE="assign_submission" REFFIELDS="id"  COMMENT="The submission this recommendations relates to."/>
+      </KEYS>
+    </TABLE>
     <TABLE NAME="assignsubmission_dta_result" COMMENT="DTA testrun single test results">
       <FIELDS>
         <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
diff --git a/dta/lang/en/assignsubmission_dta.php b/dta/lang/en/assignsubmission_dta.php
index e0ddb29..9e55c4e 100644
--- a/dta/lang/en/assignsubmission_dta.php
+++ b/dta/lang/en/assignsubmission_dta.php
@@ -151,7 +151,6 @@ $string["privacy:metadata:assignsubmission_dta_summary:timestamp"] = "Date and t
 $string["privacy:metadata:assignsubmission_dta_summary"] = "Stack trace of the compilation and test if major problems occur";
 $string["privacy:metadata:assignsubmission_dta_summary:successful_competencies"] = "List of the successfully tested competencies";
 $string["privacy:metadata:assignsubmission_dta_summary:tested_competencies"] = "List of the tested competencies";
-$string["privacy:metadata:assignsubmission_dta_summary:recommendations"] = "List of recommendations after submitting the code";
 $string["privacy:metadata:assignsubmission_dta_summary"] = "Summary of Dockerized Test Agent (DTA) results";
 $string["privacy:metadata:assignsubmission_dta_result:package_name"] = "Package name of individual test";
 $string["privacy:metadata:assignsubmission_dta_result:class_name"] = "Class name of individual test";
@@ -165,3 +164,12 @@ $string["privacy:metadata:assignsubmission_dta_result:line_number"] = "Line numb
 $string["privacy:metadata:assignsubmission_dta_result:position"] = "Position of failed individual compilation or test";
 $string["privacy:metadata:assignsubmission_dta_result"] = "Individual Dockerized Test Agent (DTA) results";
 $string["privacy:metadata:dta_backend"] = "Dockerized Test Agent (DTA) backend ReST web service";
+
+//PLUGIN
+$string['recommendations'] = 'Recommendations';
+$string['topic'] = 'Topic';
+$string['exercise_name'] = 'Exercise Name';
+$string['url'] = 'URL';
+$string['difficulty'] = 'Difficulty';
+$string['score'] = 'Score';
+
diff --git a/dta/locallib.php b/dta/locallib.php
index 1a3ab59..68d2641 100644
--- a/dta/locallib.php
+++ b/dta/locallib.php
@@ -240,66 +240,82 @@ class assign_submission_dta extends assign_submission_plugin {
         return count($files);
     }
 
-    /**
-     * Save data to the database
-     *
-     * @param stdClass $submission
-     * @param stdClass $data
-     * @return bool
-     */
-    public function save(stdClass $submission, stdClass $data) {
-        $data = file_postupdate_standard_filemanager(
-            $data,
-            'tasks',
-            $this->get_file_options(false),
-            $this->assignment->get_context(),
-            self::COMPONENT_NAME,
-            self::ASSIGNSUBMISSION_DTA_FILEAREA_SUBMISSION,
-            $submission->id
-        );
+   /**
+ * Save data to the database
+ *
+ * @param stdClass $submission
+ * @param stdClass $data
+ * @return bool
+ */
+public function save(stdClass $submission, stdClass $data) {
+    $data = file_postupdate_standard_filemanager(
+        $data,
+        'tasks',
+        $this->get_file_options(false),
+        $this->assignment->get_context(),
+        self::COMPONENT_NAME,
+        self::ASSIGNSUBMISSION_DTA_FILEAREA_SUBMISSION,
+        $submission->id
+    );
+
+    // If submission is empty leave directly.
+    if ($this->is_empty($submission)) {
+        return true;
+    }
 
-        // If submission is empty leave directly.
-        if ($this->is_empty($submission)) {
-            return true;
-        }
+    // Get submitted files.
+    $fs = get_file_storage();
+    $files = $fs->get_area_files(
+        // Id of current assignment.
+        $this->assignment->get_context()->id,
+        self::COMPONENT_NAME,
+        self::ASSIGNSUBMISSION_DTA_FILEAREA_SUBMISSION,
+        $submission->id,
+        'id',
+        false
+    );
+
+    // Check if a file is uploaded.
+    if (empty($files)) {
+        \core\notification::error(get_string("no_submissionfile_warning", self::COMPONENT_NAME));
+        return true;
+    }
 
-        // Get submitted files.
-        $fs = get_file_storage();
-        $files = $fs->get_area_files(
-            // Id of current assignment.
-            $this->assignment->get_context()->id,
-            self::COMPONENT_NAME,
-            self::ASSIGNSUBMISSION_DTA_FILEAREA_SUBMISSION,
-            $submission->id,
-            'id',
-            false
-        );
+    // Get the file.
+    $file = reset($files);
 
-        // Check if a file is uploaded.
-        if (empty($files)) {
-            \core\notification::error(get_string("no_submissionfile_warning", self::COMPONENT_NAME));
-            return true;
-        }
+    // Send file to backend.
+    $response = DtaBackendUtils::send_submission_to_backend($this->assignment, $submission->id, $file);
 
-        // Get the file.
-        $file = reset($files);
+    // With a null response, return an error.
+    if (is_null($response)) {
+        return false;
+    }
 
-        // Send file to backend.
-        $response = DtaBackendUtils::send_submission_to_backend($this->assignment, $submission->id, $file);
+    // Convert received json to valid class instances.
+    $resultsummary = DtaResultSummary::decodejson($response);
+    // Log an error message.
+   
+    $recommendations = DtaResultSummary::decodeJsonRecommendation($response);
 
-        // With a null response, return an error.
-        if (is_null($response)) {
-            return false;
-        }
+    error_log(print_r($recommendations,true));
 
-        // Convert received json to valid class instances.
-        $resultsummary = DtaResultSummary::decodejson($response);
 
-        // Persist new results to database.
-        DbUtils::storeresultsummarytodatabase($this->assignment->get_instance()->id, $submission->id, $resultsummary);
 
-        return true;
-    }
+    // Persist new results to database.
+    DbUtils::storeresultsummarytodatabase($this->assignment->get_instance()->id, $submission->id, $resultsummary);
+
+
+
+   
+        // Store the array of records in the database.
+    DbUtils::storeRecommendationstoDatabase($this->assignment->get_instance()->id, $submission->id, $recommendations);
+    
+    
+
+    return true;
+}
+
 
     /**
      * Display a short summary of the test results of the submission
diff --git a/dta/models/DtaResult.php b/dta/models/DtaResult.php
index bd7d4b0..867ee81 100644
--- a/dta/models/DtaResult.php
+++ b/dta/models/DtaResult.php
@@ -147,6 +147,7 @@ class DtaResultSummary {
      */
     public static function decodejson(string $jsonstring): DtaResultSummary {
         $response = json_decode($jsonstring);
+        
 
         $summary = new DtaResultSummary();
         $summary->timestamp = $response->timestamp;
@@ -160,6 +161,35 @@ class DtaResultSummary {
         return $summary;
     }
 
+    public static function decodeJsonRecommendation(string $jsonstring): array {
+        // Decode the JSON string into a PHP object
+        $response = json_decode($jsonstring);
+        error_log("decodeJsonRecommendation");
+        error_log(print_r($response, true));
+
+        
+        // Initialize an empty array to store recommendations
+        $recommendations = [];
+    
+        // Loop through the recommendations in the response
+        if (!empty($response->recommendations)) {
+            foreach ($response->recommendations as $recommendation) {
+                // For each recommendation, create an associative array with the properties
+                $recommendations[] = [
+                    'topic' => $recommendation->topic ?? null,
+                    'url' => $recommendation->exerciseName ?? null,
+                    'exercise_name' => $recommendation->url ?? null,
+                    'difficulty' => $recommendation->difficulty ?? null,
+                    'score' => $recommendation->score ?? null
+                ];
+            }
+        }
+        error_log(print_r($recommendations,true));
+        // Return the array of recommendations
+        return $recommendations;
+    }
+    
+
     /**
      * Decodes the array of JSON detail results returned by the backend service call into the plugin PHP data structure.
      * @param array $jsonarray decoded json array of results array
diff --git a/dta1.0.zip b/dta1.0.zip
new file mode 100644
index 0000000000000000000000000000000000000000..26b39cf40a3686ca39a9f8b767a05ad14afe7802
GIT binary patch
literal 31473
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

literal 0
HcmV?d00001

-- 
GitLab