From 8d283b9c24ce5e670dd02a39451c40427c1ac236 Mon Sep 17 00:00:00 2001 From: Gero Lueckemeyer <gero.lueckemeyer@hft-stuttgart.de> Date: Wed, 8 Nov 2023 23:16:11 +0100 Subject: [PATCH] added competency explanations --- dta.zip | Bin 19157 -> 19339 bytes dta/lang/en/assignsubmission_dta.php | 50 ++++++++++++++++++--------- dta/utils/view.php | 25 +++++++++++--- 3 files changed, 54 insertions(+), 21 deletions(-) diff --git a/dta.zip b/dta.zip index ab0c893d2e51d8616d3cd6dae3d04b24be444f01..b35770daf7870b735d46f7150169198a2a38df19 100644 GIT binary patch delta 5240 zcmV-;6o>28l>v*F0kFUY4)eKaS7GM4iu4Eo0BRwV&IK!fT4~P{ArSuVub3D=sL|H@ zzUpn_6|EYhrlGsEMOoMY>ude>&H#I~?5?*lF?kC+Gdy#`fY)x8oAS_f3iFMyuo993 z{w<ktpjYrj>l|lJ!p6Ds%5+-z@kE>T6nXGpO+mbdbFg~l4w&IrV5=+0m;%FdVVx1n z$|0Eprt+zOHc;qXthOkD<|>tQ18&2?aZ^}a*$*B(eFYD=;)Y3hUM;1_;IYWKvK$y< zq#3*6IV?$z=eSQ8UIq*}(kPfYq16fC0>2yh%#Fn{oQ-SL0#AT8B;+V_gxr8GiSHP~ z-GXGUWt}97H~JwIp}f?ME;;@{VW{1KkP?<0D$7@Yl{`VrNDOZt%^yB{HHX>LxA126 z;>GOg{OwgFb{maf`DY$PiK3JOC8I`$DYr%7e))SZ?mR@6+3iP<AI;w)e7OH;{`B6< zmvH~t3z)(4*^Bw3JFgzkUcmELFP=Ypd2a&nl5-M@0>+HH^8P^s=G-wMZLRWKbg4yj zGKUR+`^?d`85f@s8-q-j+wZ%LgfOYq+N&8&h_D{5KxuaZEW*1ML+#+;V6s+~k2M+C z?exav(4pz^<A>llyhNL;wI#5)dQob{m4m~~TCrBPS{A~RyB4`)hfkmj)w*J94u`oq zjO--gR>`tYGzZYf<w?TIMA8F`l$Lzurt4CFPByNPLG|a4;qzH^NQfI0Gd+Zg*Cv@9 zI$}NacZW+^t%Xvo;D<lJbvS%iXP>wcU(up-ZXMFVY)x7ny*r;BJAAd_L?zf#^4zoa zio5EUyerV!Ys_jcb40V`<jaP>qptrJK;Tl)enHc!l~`BCrx7XjRg@>ma0s$A`XkSO zTnj9fx!7=72Eq4223Doij6%jDgQSfA;;8J<N*Ha5v_@Y7;du4p5tLdeZwjY<bQxZ1 zE1Wi4A4DNr<FXMV!SnMqLi8`;rrJ}lFC6Br!EbUqfmehDrMGCB^2PF8km^jzEe%Li zK}Dfb0_~cgbOLQb06p5H1ieHxrBM8T7!rFy2Uw?kpsqO2mxK;=(q7Fv)q)tiwT>5d zGGJ269j#>d{pB!Pc0Kh&0y@s=IKyuO!M0EfC*6ADuOk3cI8L63DoYuvgwu`B`<#ul zpP3Z-&pF(K!q^s>cWTa8wXobL5tdELY^~yWQ!T0flKVWbsT5}81m61SaaE3gX=Zmp z^PPCb-+~HF&Z)+;5KboB2ww*+FP5^7A^xSrxWctM$Z5sQRmMA<;YytLge?W=XOSak zG>%wB+yAs#0>IYS!8(USA-IF)Mh!d3Pe!l{TV)xyc2&h-f_9?o?iKC=6>1rY;;>6W z6<A0gdJArhHZ^VM1NaYJu1bA>Qu+YH(qW|x3_+Rr0sMz9N5r=vu^d&(M2+fYgIsRO z#pHm7${X4T-mb8sU}hWn!=U@!X~*P3P(}utIZc3{=mTYf7A+Vsd+_6i8Z$Qxy5Cc^ z?zA&IlyUD`w7bXixSKu2nO!3b*CBg_!<MFvhAs{6J}C|PqN<G@ey1USvT)ln3b`L< zV2(3=l!h~_)h_J|Ki8$ktU@JqAbX4hcv=-pZg#CE8<IO(R)y*z!fc6l!n8?Bq(kF5 z!?N0cG=@1%G#OOzGWub%>#z{M1?E>|ZiZL)2$vFzQ6RcaKNEtL)CbWb_zMqIK68zh z38mCJR^AsJ1H@~T5Mh;nwGq@E`pJ4QeP$+5yk<sF0Z%Aem!d1v&v?RSO?iuvjZ^S4 z&ZQgzi;-D1#(orsDItY!8@0h4c}j-4oh>TM)^#S}nCBEvuW)jJo(_Eb<S%iK^+J|n zX_`{;I1C1)V-;VpQp7{g7t~E*(U?7dG(d0ZgkQ&<KkaA2Z4)wowzL$W<mW&;YbWX$ zZEHn17YppGzTh!NW>qM`dy#v}OBxL3JqV`*bsEtL<rz<zhIT@D))S_Yoe-W2glTjq zl;=HV65|Qo1y7eodO~>76As6G%5kaTNMk;wzU-;fz)$TT+%**YDSdF*K<uaFjn~q+ zPl+4PrIDW!*WOEi!#<@A{u_z?y;$GUc?;V+AK$~Jc|lYmaWFFq$_GwO$W}QLocZ&8 zrj4O?q2UTWJO)~9@NIqivbfFAf_2Zk7Syk!aj}3Flm5crfzZTGeWFCM15gSaLgm}K z94IdAKB!;BL<!kvl>p=maOCo*;&tUus9t6kwj&^BIxKE~;w{IYFcKwx2T)~GC<gaB zMyKG`MfOj_@MWcgLr`ykcU9DA^g9WE`33~d6L#4_ABCGPBJmc*KR=5OOW7}C`yBW8 zKNUYzEIUxbD)seVw$a++s6_S>*Tq$+W&$#Wy(tX2-1i}^y#0M}-2(mdC~MAt0=3>5 z`e6d4K}`~W@knOY+=OC)i})Jyr?Y^B_X7GStGBz_UP0hrM7S6W^{}m@zQWqrI-_8I zGC<Dp<`p}7p-sq<c*6TTh)H^4wEqrj+|vgvTl*KAD#`tpOJ4r(l!#}IJtcf)WhSRP z)K()N58?m2PT@$@Q7JP#98>(4pO)7-HuVavRx5#jy@H}mqNZ)upi0xX$k_2K?K=8T zWyCVtdqlWbd-w*skP)7teq@AYs52R18SGI;cm}$a5ssn0WrXFs9n1*tST8fiH`LXP zuzaV#8Q~o7bVeA*dY%!svF>MtZKMwx;rd=j6j?)FzF~&$!Mho!^a4wgzjj|7gwOG^ zp}i}A#sKn9nePYRpxz($kCsaBy$F%mct_6jSRC#dL(dxAlH0mamh^6<@`svk8?~e7 zh<LGtb!PDOD{|p2_+!F|j12}_a!1ql{`+t0tGgHN%`-r2g%%RM8ZI(PMK;`vFA5vs z%plB%YjMz7M*6_fhx7S!IQQktu|$sL1|Ok+Q#oP2SI+r9Iq`Nq5u}=XcjDcXr&Z$! zj67vm+(dWJ@&cbk>ZhgF-E{t8m5eUF7hZ?x(W9Qfnvm{1D3Qn$xCIH@wRXYrfjn;> z)p;V;??KcwD}E3kcKyLU?2l<A#{1Z)+e>dt)G0R@zx^y-n2~Ubx8>n@{9K3sIuXeU zqjONuH&9Ch1e1+M7_+1fODGP4xoB5X&Ku-?3IG7mMw9(E8-H)pFcAMAiSKYkJX$C% z4<V$D0%N=;!9eQ(A%rS7b=QbAsS;<UJia@3wo~WT*4^4M9z$$x?7RE<e7-yToClA_ z!|}xntri>(y%+|b&jJ6AStKAF!0RyV<CB{(6k@#9YK`RgW*8l{kVyVd`w(@+ImF>W zOjyLXU>YXivVQ;~-uGe=dA&qnHvuf@x55ZUVc#1}i3L4Of<BKx3^@oMjbaoozr5Ig z2QPTQBj&@~r007syz*Qg#2gsHq$lx^_n{{lNs{M;qN7mYw-7lq;e|m1xQFc#9P=o~ z?{HTONjWwkj3k#D69hhja7=`CL_7tb2}9eg82xOJ2!F>5B;#Q?=J)~G;Rq+5??aD6 z67xagHzYOoh7Ws(FW<a7gq{75@L}iRU}yjE<2Lpd!w_5fF;~32(b)HpHI6D`ftVtA z1>o7i?n|WEd9wFv@9-mz0iN$2?mz2v;Q5;a*nzh@2ZwvR?_TX3z}t5RZ{KvDH32%D z6IbG}NPouzIZvp@J{QdMV>9lLIJq$*^!qSm#~dfw<=!#kW8jA4>GJuLT$mpQM{=xM zkqB*X06{1k5F^9~+U_QkN%JU3q~ZCBK5jikG#4+pK8s^`@9{||>5aUYrsthNtni(h z0e?`?lPF|;e~QXiv*U+Hp4%WhXCsc&_6;A?V1GG_J)CBD$buu@l;k*`AQrIu=Jne* z`_J|dyZbw@pFtZOhO&-=cqX;m7tGn73B7(@eSqt5BsCy-42+b9Yb#DhBNk0@U5$L* z&2)b(VIfQbO2&u>!s}<gRCP5#u&en3A_O<$C>@1Ie2mg*q=rMpMG^%-#v2^v0JYSI zv45O5?7#&686<&At70}NJrp9WA%Xglh%RT*HwtZ8xT>kXr9qgP)3f)S3wH>(j9Jq> zzpMr0R6Om;8Q<DE;^F`S`J$uRo=4&6DU$VA%xif#c?9+C3}YG!O|Y|Fz_H7GHz7xW z`gL87c1H?mfJY{aF6>JXPSD>;1UMEs<9}g<1~eLbNJd)YQ4~gTb{Lu!aU!9Q90P?I z*V1v`e5eKNqDvFCI<(tx3$9)T(;*}18Oh1^tiyN3caGqQ9AzydO*f;jO4+nBqSPRD zOC9a#_N`kDxC2>5{w%2Pg|--JWX+<&n{8Mmya`Ur*{&d}*^QqxwNRDyym}s$2Y+jj zK+VBFSq;+DD|IL3VScvMl$LR$t#*~Y*Bmqy5qHg?9ddvEU~4Pyb)@VEy$D(liDlMK zY}D|uWCaF}g%ve(kTboy%Bbx?XN<$r&MjeUs%o^lu`3tlDS%#%hscJ;&IJ!#kH@%l z_}8%?_Ib_OM$T0>Ow*gC$$6Xbn17<9Z^u)0UdS-RT8zfhkC|2(<Z72a%(lL^ZxLq< zeQj6j%#6*j1=aO|?3aGKaicUJind*5@kx<<-Y)c~KJ9eu76j-%_EbtS>paC=2qUU1 z5@a!@=!n{uxghm3(NbodAeUGJSRdo)Ec{|)G}WHS*rL|NrM7d+DUQ@Awtv|!tp{=n z3jP8M!+%Zkme&V<$iy-8wYYlAJRoMW^A+q}wn}4}6(5(l8f}%`jLsLVTshQvUPosR zB&9ovJj{=`w))<2P0DS6gZYrj$#g_^Qd9l8Fj3M8C(h<EW_G_nO|nac6zG2;6MD)A zUO=iE;Ow}V2)Vvoe{!jfQGb85_mb31q+37QxJ+YGbdR${cmuUgahEerM0Plc(&t0Y z`V?0tDFf*iKRHs61MP>>z7DDDOWE}xoH(Dii)^eIlt@*;FVI$T%o6DslOwr?BGf#* zQ?1vw%c<WSijHc{Q4G+&l8Dctc&=J=6qz_J!}J`|-9pg6R-EyUwtq3HgXV%DWBg;@ zGYCeB&d_P(-H~ED&jU3U&A9WqzDy_|jm5N^ie81AvOlOCM1-73Tw}hiTJxedWT*QO zS%$C|_NP_KEj?Rq<FxqE$So!*A7mVX@N$pxnQJJR-$mll+$d6@zMNOmIsjE?>h^+9 zwA?F*K3$WFzxEla7k{?T@_@3_s4#%$5+gLC@*_O)B1HwCXnWGg>UineBw1=U7j66+ z>z=pretVUj2>keAu~o`$S<b*<W?3L`Kjvq@(N7hZlk@=Y86|8$5%U9^MwZt~6~O!V zHVIJ2>Ls`~2%wZ+SnVIqiO<p6i`VCCimqlLHy9goGh}T=QGaLP9kkX~@eb<|T(-6I zY+Uw-SEo0#VvINwgZmAE$;u!9x53qpBu{UCTFjYPoz21RdZzjWS<rd}pMM)GKknhv zsw2Q?f#IFN@|JGXDv&MC{Y#mVssiEfnuV{ktNP3>^pvHqSoxV%f9jjviF$wEmgWCu zVwJ@1U)W4YK7W;LsD(Ju-+Jl%w~|J-m_s*cD(X4MgX&<gTvpK%iU*}TSYeXKj)1ig zS#OKS%%#Kp9v2hNgS7fYXXUDz6{vESWLK<<FFMjh0TpMO9TZnQ&dgt9NJ~Fy(ToZK zTKY*2AMH<jZHi8-9Mb+RN4_c9A6jT$P*hH(p0KREYJZt{)jITg%gSgD`s$xvP36im ziOCn13vl-NWOjp&igjQNOjXdDb}oKt+OTLzTP$s~;MMEj^IUyV?#f73s;5_{YL3k8 z6s-(<Et4A1_qsC&{pt1ArA2ru<q?FXDm+yzwvF|x#b_1b)*qv-;;>orw3O33uA2zM z`P#XXvw!YNs)GMNtgcW=C4-RCuq8-*KYve(GrVe1D{c;Bi~zVuX70OSaf&5gq>o~u z?u81;x>?@fT=L>BHPsA`I<j4`a81YJf~2vYGLWnkL`u?jhur-FlcDDhXZJzqt_MX% zQl^fvKB~13J|Bpiy)dGwWUh-J(1NM6gb=H%vwsyDyBytoDBEc3zM1{tHCS|G!|b%m zcy4bRkG>CLi|5X!@#xzows`Jt8c*p8OVuK=$$TtNxC*CS^KMAslKsMtcsIZ|4J@xn zl+K9C&Fe-?Q>Bp-(B**E4IqCs?ukD@U(yPHzqU}sX|=U(c%&UW#jGzu{T*wYoLgdh z@qg(I^!_yUh4KPuhg|PIPJ?m87MM0QBWkOy!hwe|KExNVh7|YlHNXLn<Pp>mUl%l| z84aM#7-bM1Id$gK20LDu7hF<tcul)p)zwn>_)~R(p)022RaWLwD_JjMQk_P6h(PTC zt#@a6o+b;E{x}T&i0L|zQ0*XXdctsRzkdn*samf--VAS0uAhtobss#8<pKsz9<@#B zjnVWySitj{gr|#o?iPv0O?>y0Q4jZaRMyKs%GIw{v8NNvPhpOh*%pE92H}cEWo1~K z0iV~bJwAH0UQ3&?F)6%-p(xYKn2LFL?u`Xu{&BXVRQsn|OX{7prI-ij*h<FXDt}4m zIWUn_r}pT6lX;wd>Jbavc8iF)=Qv9&aWJRNa(c}eD$c=YZBI4LXUh?7Zu+avOFLY^ z?0i+FCFCr~PsjtzfPWS0@;uHGy-!H?T(KFkKGikC796!l^N!ln@`7b;W`l*64-p%i zS0JSXda*IYLvY-)QT3%%Ole!bG!L3uOug#8Q%RA1n-qWj0<%Ct-2@KvxoB5m=DCXW z2mk<TA(JacL<S^;#u<?klaWUrlaods0qm2qMqB}klMhE>0fCcoM_d7_lg>wJ0!k*6 zIY?ju_LG`OUjjQTllw?o0%I$aS4m|8Br%h|Nk|}qxoB5X&Ku-?3IG7mMgRa303-ka y0000003ZMW07*BK0XGzrI!X)%xT=wwkP?%TM;?=EN*)3BlZi@32A4zt0000C{vMnF delta 5063 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 diff --git a/dta/lang/en/assignsubmission_dta.php b/dta/lang/en/assignsubmission_dta.php index d80eaa8..2b8d945 100644 --- a/dta/lang/en/assignsubmission_dta.php +++ b/dta/lang/en/assignsubmission_dta.php @@ -73,22 +73,22 @@ $string["comp_simple"] = "Simplicity"; $string["comp_abstraction"] = "Abstraction"; // Competencies for index calculation. -$string["comp1"] = $string["comp_statement"]; -$string["comp2"] = $string["comp_block"]; -$string["comp3"] = $string["comp_flow"]; -$string["comp4"] = $string["comp_loop"]; -$string["comp5"] = $string["comp_const"]; -$string["comp6"] = $string["comp_var"]; -$string["comp7"] = $string["comp_type"]; -$string["comp8"] = $string["comp_datastructure"]; -$string["comp9"] = $string["comp_interface"]; -$string["comp10"] = $string["comp_unit"]; -$string["comp11"] = $string["comp_proc_usage"]; -$string["comp12"] = $string["comp_proc_sign"]; -$string["comp13"] = $string["comp_library"]; -$string["comp14"] = $string["comp_ext_api"]; -$string["comp15"] = $string["comp_simple"]; -$string["comp16"] = $string["comp_abstraction"]; +$string["comp0"] = $string["comp_statement"]; +$string["comp1"] = $string["comp_block"]; +$string["comp2"] = $string["comp_flow"]; +$string["comp3"] = $string["comp_loop"]; +$string["comp4"] = $string["comp_const"]; +$string["comp5"] = $string["comp_var"]; +$string["comp6"] = $string["comp_type"]; +$string["comp7"] = $string["comp_datastructure"]; +$string["comp8"] = $string["comp_interface"]; +$string["comp9"] = $string["comp_unit"]; +$string["comp10"] = $string["comp_proc_usage"]; +$string["comp11"] = $string["comp_proc_sign"]; +$string["comp12"] = $string["comp_library"]; +$string["comp13"] = $string["comp_ext_api"]; +$string["comp14"] = $string["comp_simple"]; +$string["comp15"] = $string["comp_abstraction"]; // Competency explanations. $string["comp_statement_expl"] = "formulate a syntactically correct statement that contributes to the solution of the given problem."; @@ -108,6 +108,24 @@ $string["comp_ext_api_expl"] = "use standardized existing external collections o $string["comp_simple_expl"] = "create a simple solution of the given problem."; $string["comp_abstraction_expl"] = "create a sufficiently abstract solution for the given problem."; +// Competency explanations for index calculations. +$string["comp_expl0"] = $string["comp_statement_expl"]; +$string["comp_expl1"] = $string["comp_block_expl"]; +$string["comp_expl2"] = $string["comp_flow_expl"]; +$string["comp_expl3"] = $string["comp_loop_expl"]; +$string["comp_expl4"] = $string["comp_const_expl"]; +$string["comp_expl5"] = $string["comp_var_expl"]; +$string["comp_expl6"] = $string["comp_type_expl"]; +$string["comp_expl7"] = $string["comp_datastructure_expl"]; +$string["comp_expl8"] = $string["comp_interface_expl"]; +$string["comp_expl9"] = $string["comp_unit_expl"]; +$string["comp_expl10"] = $string["comp_proc_usage_expl"]; +$string["comp_expl11"] = $string["comp_proc_sign_expl"]; +$string["comp_expl12"] = $string["comp_library_expl"]; +$string["comp_expl13"] = $string["comp_ext_api_expl"]; +$string["comp_expl14"] = $string["comp_simple_expl"]; +$string["comp_expl15"] = $string["comp_abstraction_expl"]; + // Warnings. $string["no_testfile_warning"] = "Submission type is \"Dockerized Testing Agent\" but no configuration file uploaded"; diff --git a/dta/utils/view.php b/dta/utils/view.php index bddc748..98af5c3 100644 --- a/dta/utils/view.php +++ b/dta/utils/view.php @@ -46,17 +46,30 @@ class ViewSubmissionUtils { $html .= ($summary->compilationErrorCount() == 0 && $summary->unknownCount() == 0) ? $summary->resultCount() . " (" . $successrate . "%)" : "?"; - $html .= get_string("tests_successful", self::COMPONENT_NAME) . "<br>"; + $html .= get_string("tests_successful", self::COMPONENT_NAME) . "<br />"; if ($summary->compilationErrorCount() > 0) { - $html .= $summary->compilationErrorCount() . get_string("compilation_errors", self::COMPONENT_NAME) . "<br>"; + $html .= $summary->compilationErrorCount() . get_string("compilation_errors", self::COMPONENT_NAME) . "<br />"; } if ($summary->unknownCount() > 0) { - $html .= $summary->unknownCount() . get_string("unknown_state", self::COMPONENT_NAME) . "<br>"; + $html .= $summary->unknownCount() . get_string("unknown_state", self::COMPONENT_NAME) . "<br />"; } - $html .= get_string("success_competencies", self::COMPONENT_NAME) . $summary->successfultestcompetencies . "<br>"; + $showncompetencies = explode(";", $summary->successfultestcompetencies); + $overallcompetencies = explode(";", $summary->overalltestcompetencies); + + $tmp = ""; + for ($index=0, $size=count($showncompetencies); $index<$size; $index++) { + $shown=$showncompetencies[$index]; + $comp=$overallcompetencies[$index]; + // If the competency was actually assessed by the assignment and tests, add a summary entry. + if($shown!="0") { + $tmp .= get_string("comp" . $index, self::COMPONENT_NAME) . " " . 100*floatval($shown)/floatval($comp) . "% " . "<br />"; + } + } + + $html .= get_string("success_competencies", self::COMPONENT_NAME) . $tmp . "<br />"; return html_writer::div($html, "dtaSubmissionSummary"); } @@ -199,6 +212,7 @@ class ViewSubmissionUtils { // 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"]); @@ -218,8 +232,9 @@ class ViewSubmissionUtils { $resultrowattributes = $tablerowattributes; $tmp = ""; $tmp .= html_writer::tag("td", get_string("comp" . $index, self::COMPONENT_NAME), $resultrowattributes); - $tmp .= html_writer::tag("td", floatval($shown)/floatval ($comp) . "% " . + $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); } -- GitLab