From 06788bafc8a59579fa4a55c94bbb3f2a8d96b039 Mon Sep 17 00:00:00 2001 From: kindlm Date: Tue, 7 Oct 2025 18:42:50 +0200 Subject: [PATCH 01/26] =?UTF-8?q?ParseHTML=20bei=20statistik.class=20erg?= =?UTF-8?q?=C3=A4nzt.=20SVNR=20aus=20BIS-Checks=20entfernt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/statistik.class.php | 9 ++++++++- vilesci/bis/lehrgangsmeldung.php | 32 +++++++++++++++++++++++--------- vilesci/bis/studentenmeldung.php | 16 +++++++++++----- 3 files changed, 42 insertions(+), 15 deletions(-) diff --git a/include/statistik.class.php b/include/statistik.class.php index fd48e7d28..364c6d1a0 100644 --- a/include/statistik.class.php +++ b/include/statistik.class.php @@ -513,6 +513,7 @@ class statistik extends basis_db $this->json=array(); $this->countRows=0; set_time_limit(600); + $parseHtml = (strpos($this->preferences, 'parseHTML: true') !== false); // In case a decryption function is used then perform password substitution $this->sql = $this->replaceSQLDecryptionPassword($this->sql); @@ -565,7 +566,13 @@ class statistik extends basis_db for($spalte=0;$spalte<$anzahl_spalten;$spalte++) { $name = $this->db_field_name($this->data,$spalte); - $this->html.= ''.$this->convert_html_chars($row->$name).''; + if ($parseHtml) { + // HTML direkt rendern + $this->html .= ''.($row->$name).''; + } else { + // wie bisher escapen + $this->html .= ''.$this->convert_html_chars($row->$name).''; + } // Umwandeln von Punkt in Komma bei Float-Werten if (is_numeric($row->$name)) { diff --git a/vilesci/bis/lehrgangsmeldung.php b/vilesci/bis/lehrgangsmeldung.php index dd7597689..f16dafc91 100644 --- a/vilesci/bis/lehrgangsmeldung.php +++ b/vilesci/bis/lehrgangsmeldung.php @@ -390,30 +390,34 @@ if($result = $db->db_query($qry)) $error_log.=(!empty($error_log)?', ':'')."Matrikelnummer ('".trim($row->matr_nr)."') ist nicht 8 Zeichen lang"; } //SVNR mu߸ 10-stellig sein + /* Alle SVNR Checks entfernt if($row->svnr!='' && $row->svnr!=null && mb_strlen(trim($row->svnr))!=10) { $error_log.=(!empty($error_log)?', ':'')."SVNR ('".trim($row->svnr)."') ist nicht 10 Zeichen lang"; - } + }*/ //Ersatzkennzeichen muß 10-stellig sein if($row->ersatzkennzeichen!='' && $row->ersatzkennzeichen!=null && mb_strlen(trim($row->ersatzkennzeichen))!=10) { $error_log.=(!empty($error_log)?', ':'')."Ersatzkennzeichen ('".trim($row->ersatzkennzeichen)."') ist nicht 10 Zeichen lang"; } + //Vergleich der letzten 6 Stellen der SVNR mit Geburtsdatum - ausser bei 01.01. und 01.07. + /* Alle SVNR Checks entfernt if($row->svnr!='' && $row->svnr!=null && substr($row->svnr,4,6)!=$row->vdat && substr($row->vdat,0,4)!='0101' && substr($row->vdat,0,4)!='0107') { $error_log_hinweis.=(!empty($error_log_hinweis)?', ':'')."SVNR ('".$row->svnr."') enthält Geburtsdatum (".$row->gebdatum.") nicht"; - } + }*/ //Vergleich der letzten 6 Stellen des Ersatzkennzeichen mit Geburtsdatum if($row->ersatzkennzeichen!='' && $row->ersatzkennzeichen!=null && substr($row->ersatzkennzeichen,4,6)!=$row->vdat) { $error_log.=(!empty($error_log)?', ':'')."Ersatzkennzeichen ('".$row->ersatzkennzeichen."') enthält Geburtsdatum (".$row->gebdatum.") nicht"; } // Wenn SVNR fehlt, darf Ersatzkennzeichen nicht fehlen (und umgekehrt) + /* Alle SVNR Checks entfernt if(($row->svnr=='' || $row->svnr==null)&&($row->ersatzkennzeichen=='' || $row->ersatzkennzeichen==null)) { $error_log.=(!empty($error_log)?', ':'')."SVNR ('".$row->svnr."') bzw. ErsKz ('".$row->ersatzkennzeichen."') fehlt"; - } + }*/ if($row->staatsbuergerschaft=='' || $row->staatsbuergerschaft==null) { $error_log.=(!empty($error_log)?', ':'')."Staatsbürgerschaft ('".$row->staatsbuergerschaft."')"; @@ -714,7 +718,7 @@ if($result = $db->db_query($qry)) $qry_ap="SELECT * FROM lehre.tbl_abschlusspruefung WHERE student_uid=".$db->db_add_param($row->student_uid)." AND abschlussbeurteilung_kurzbz!='nicht' AND abschlussbeurteilung_kurzbz IS NOT NULL"; if($result_ap = $db->db_query($qry_ap)) { - $ap=0; + $ap = array(); while($row_ap = $db->db_fetch_object($result_ap)) { if($row_ap->datum=='' || $row_ap->datum==null) @@ -725,12 +729,19 @@ if($result = $db->db_query($qry)) { $error_log.=(!empty($error_log)?', ':'')."Datum der Sponsion ('".$row_ap->sponsion."')"; } - $ap++; + if (!isset($ap[$row_ap->pruefungstyp_kurzbz])) + { + $ap[$row_ap->pruefungstyp_kurzbz] = 0; + } + $ap[$row_ap->pruefungstyp_kurzbz]++; $sponsion=$row_ap->sponsion; } - if($ap!=1) + foreach ($ap as $typ => $count) { - $error_log.=(!empty($error_log)?', ':'').$ap." bestandene Abschlussprüfungen"; + if ($count > 1) + { + $error_log.=(!empty($error_log)?', ':'').$count." bestandene Abschlussprüfungen desselben Typs"; + } } } } @@ -815,13 +826,16 @@ if($result = $db->db_query($qry)) ".$row->vorname." ".$row->nachname.""; + /* Alle SVNR Checks entfernt if($row->svnr!='') { $datei.=" ".$row->svnr.""; - } + }*/ // Ersatzkennzeichen nur inkludieren wenn svnr nicht gesetzt - if($row->ersatzkennzeichen!='' && $row->svnr == null) + // Alle SVNR Checks entfernt + // if($row->ersatzkennzeichen!='' && $row->svnr == null) + if($row->ersatzkennzeichen!='') { $datei.=" ".$row->ersatzkennzeichen.""; diff --git a/vilesci/bis/studentenmeldung.php b/vilesci/bis/studentenmeldung.php index 8c7e31d36..7e06726ec 100644 --- a/vilesci/bis/studentenmeldung.php +++ b/vilesci/bis/studentenmeldung.php @@ -930,26 +930,29 @@ function GenerateXMLStudentBlock($row) { $error_log.=(!empty($error_log)?', ':'')."Matrikelnummer ('".trim($row->matr_nr)."') ist nicht 8 Zeichen lang"; } + /* Alle SVNR Checks entfernt if($row->svnr!='' && $row->svnr!=null && mb_strlen(trim($row->svnr))!=10) { $error_log.=(!empty($error_log)?', ':'')."SVNR ('".trim($row->svnr)."') ist nicht 10 Zeichen lang"; - } + }*/ if($row->ersatzkennzeichen!='' && $row->ersatzkennzeichen!=null && mb_strlen(trim($row->ersatzkennzeichen))!=10) { $error_log.=(!empty($error_log)?', ':'')."Ersatzkennzeichen ('".trim($row->ersatzkennzeichen)."') ist nicht 10 Zeichen lang"; } + /* Alle SVNR Checks entfernt if($row->svnr!='' && $row->svnr!=null && substr($row->svnr,4,6)!=$row->vdat && substr($row->vdat,0,4)!='0101' && substr($row->vdat,0,4)!='0107') { $error_log_hinweis.=(!empty($error_log_hinweis)?', ':'')."SVNR ('".$row->svnr."') enthält Geburtsdatum (".$datum_obj->formatDatum($row->gebdatum,'d.m.Y').") nicht (Nicht BIS-Relevant)"; - } + }*/ if($row->ersatzkennzeichen!='' && $row->ersatzkennzeichen!=null && substr($row->ersatzkennzeichen,4,6)!=$row->vdat) { $error_log.=(!empty($error_log)?', ':'')."Ersatzkennzeichen ('".$row->ersatzkennzeichen."') enthält Geburtsdatum (".$datum_obj->formatDatum($row->gebdatum,'d.m.Y').") nicht"; } + /* Alle SVNR Checks entfernt if(($row->svnr=='' || $row->svnr==null)&&($row->ersatzkennzeichen=='' || $row->ersatzkennzeichen==null)) { $error_log.=(!empty($error_log)?', ':'')."SVNR ('".$row->svnr."') bzw. ErsKz ('".$row->ersatzkennzeichen."') fehlt"; - } + }*/ if($row->staatsbuergerschaft=='' || $row->staatsbuergerschaft==null) { $error_log.=(!empty($error_log)?', ':'')."Staatsbürgerschaft ('".$row->staatsbuergerschaft."')"; @@ -1510,14 +1513,17 @@ function GenerateXMLStudentBlock($row) " . $row->vorname . " " . $row->nachname . ""; + /* Alle SVNR Checks entfernt if ($row->svnr != '') { $datei .= " " . $row->svnr . ""; - } + }*/ // Ersatzkennzeichen nur inkludieren wenn svnr nicht gesetzt - if ($row->ersatzkennzeichen != '' && $row->svnr == null) + // Alle SVNR Checks entfernt + // if ($row->ersatzkennzeichen != '' && $row->svnr == null) + if ($row->ersatzkennzeichen != '') { $datei .= " " . $row->ersatzkennzeichen . ""; From c724c6a20f1dabaf4f0cb2c5c5924b4bb9fecc01 Mon Sep 17 00:00:00 2001 From: kindlm Date: Tue, 27 Jan 2026 16:53:33 +0100 Subject: [PATCH 02/26] =?UTF-8?q?MathML=20auf=20Darstellungs-Testseite=20?= =?UTF-8?q?=C3=BCberarbeitet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/public/testtool_test/MathML_Beispiel.png | Bin 0 -> 4923 bytes cis/public/testtool_test/testseite.php | 129 +++++++++++-------- 2 files changed, 75 insertions(+), 54 deletions(-) create mode 100644 cis/public/testtool_test/MathML_Beispiel.png diff --git a/cis/public/testtool_test/MathML_Beispiel.png b/cis/public/testtool_test/MathML_Beispiel.png new file mode 100644 index 0000000000000000000000000000000000000000..d6ef2403f2a84eccaa333fdbfe306fdf6b08ba2a GIT binary patch literal 4923 zcmb_gXH-*Lw+%KFRK%cIX%dQ*XrxNJO6U+kq(ivUJJM^wLYHC^I-xfK2}o}N>4eaG zN9hn+=%K#cckdYQdq3}Z@5d=W_Bm^=J@%Sw&K05tleBWP^*TUyKE;KC=NPAR{%wy-Hw|R&P|1F0;-{XBbTk?t4Z+wqz};s*)Q= zxUEk!VP9o%!$y_G72B#I0&z%iYB2E;V`X!G|F&q*Ak92{qh++%lyD@L;JMg$u+tH< zw-g&vx6>)U)45Zt#>H?IV6dTz;RgVCKd@ii0w`ShMTNTl^CJ8G57hDy0Nqzp022!y zApQr6%Hv-wF!%_$(>;&jzmQ5l<5Uf3L{%nYO$wDNT#&b`R zq&3HECbslsd9Cob-i_m-%Jam%yUbfD(U!U~%v^XX{fXDY_7b!0fp^xF*dR&-OSpQe)$I>)xYwW*Z1g= zXQlJEWM_Iiyi4pB(+ji*y}FW;O-)#N10h**{pJ?m(THS9IG5%-IBasmhe&y}_Lm7Y zPZl8g!snZp@tXP$k#_{$y-*>+LK<@|C9`Ev+xYfA4PM#AC=6C3%SK58iF}vdHF%Oh zE~Oyq+mdfi%dh00@PeAEcYzsRB0#&S1{WxF{-I%qP`ygD|2?#Rbwn0>bKKfs?*h$D z2j+paf=uO*9}69R)@x0Q)V@MZ;rcxZ2}o0$vgG-QVJDOrV+8g;PH(HBbE9~Z?XSz% zU1^`Q#9m8L6)Yy}#Nkq}k5dkNs>-52XM$!1jPW;I(4om3E@u>QTjs|R@U5oAzC#RC zWZ7GViNWuA*-y=4;h(T_dxXL3_CL$*aT)JjZv6ZlVUL~wJdxJ>gk)7|@`P~qx=-ES zHM|I*?d5R3fEeL(^qUd*c`YQJizxvU4C2*pce0a-xjQ!K zBz)rG%gKJVv0+?11$Oll%T=IUtW+_&s0(Sf&FmImjtRRI%+Q1}uW?t|DjV`v}8$yN+4~3qs z;IbaX$|A-Mdef8`y@^bUCDc6KN}NQ%e1(d%~H-|T2-Fz#t=f`%hZ7$G}Yn1AjbbYwf?(5EbAz~W{^?84!#G|Hl|{~ zFJi&#-;&OqH4i?^Oo(Y`ytg|@mfW*|#}|83e`LSd6UF_!QZPNi9HbWk8df~R47hH4 zdGnsO8*uQ3{xDOTDY+>R+3J)k$QwAr8C|(>8+o>ynk&GBwM3l4iIUwqSHFx{%Bm<0 z<1CWCnl2k0#Vn!&#Y;!NhNkNb8w+;>yYk$hxIX@_zpfAS;rehfEWoo0T*tt7MMYPa zW7C$T&0WB88f~e!H+iFl;zSKOjegdga|(Kz z0`JAEJuA~al2^k_oc{pV&8zL`>wcsnqSIO|V2pk7l1aBNy_?nWmRuvx%Dk$qJe*8c z<=Iyj9NHdjNvQOz6-;VLaMd#w4n{06IW3i*3rs6{(J~s}?^N@GX zF?hi((fF@ip$&r^>V+d4Znk`^)2lNMQqj$40bB^BjJiWqHN)l;^2aypk0${V@W(1M z{olaPOxMlgq@Ci6L}0>i%OoVKJEF!OvG12yZV2wX3sfn4g!Q*H{VKcTdG5+Xn5S&j z{C$*9X>IyfREmYriLBKztrj2v-3CVKJIRg!nD;;7Mb! zlwy3Z$duX;4uM8i#qCnlX6Fu}bnD)AFu$qI?r&ekRVy zuoN6PKpopKevJZ_x1zdOK@u-sF1bAAs7@W{r?&^Bzj68KO)j5de5jp)I+{A@UUK`C z$v#`wF(d7P;QFMUW>5z4X10SRrN+!HC6GL~=@m-y^ol~>p;@WPmr+p)2rP!P!t1aEBdc|I%ooS_&s`9 zhg};!zhHC%->*!Dx+68cHygS{#Zb+N$Ww#19R?}F*PZh#& zuIA@Uv=!$X1@k4x75rq_pzn*nn=vk4(YEaL(EM=H|HOEA|CA0}XRR7`o|*~wtJ*(x zNAbhJ|N={m7vh5^Y=dcj#)XFwYzeQp )<~E|0>W8a?1}e_ZTw-seRMeb$u)1v+ z@b1ir?bXfKNTZoEv#@QsDI8Jj4|)XK{4ZURFomm48R**mnMn=od>Gkg)heE_WfXBN z9}z9yub!|`vk%Rd^Z6?l%k%ThZFKc#`rKMwp}UR7TpHC)Z<*Sm>`7+Fsmp#+b;-lu zjvG6BPKBC1I4h1|%ad86pqZcC*Xik9$vGUE*jkK-cbQkr9$)yrL)RW=`?eJi-3>Mn zYq^~Z6gCoKsZ^0ywF@oD)9W9Yrc{IV*psBpfPA$aeiht1d&r#Ib~&6R=HAFG;y&Nd zHRwV5Wx+?U&$0R?@|lF1sT_G}FvIXAg4{LWiUF6Jx*wAYl%%}Y1J9al#scy!9-LRA zFG`Uon8xc;^u)~%6rqb(IUn3yTbHDkrR;UrWf@1%pNNqR(Pc%3E>>V-E{mM=#U z^$EX|lU5#YlV0fxKO+*i(b>eES6sMPvlQA%i|V@Al}K8sH=@7vn|dzg#OPRxn6H}c z=QW46n4t*L*>Y?tn;P0wBF3-(^`lr#_{AUDaHv$?*=9jHqq z8( z9USadHV6$QT+Hqnl7r48@NFG}ISF1czxpqh+Uj-ht8W)65inC-_)9kIRCnMC=_DLQ%=mRS+ zZ0@lwre+TlysY~8*t95KMsCE2XXN~M`Ku{LdvN%2arHYz-xk=HAllhlE6wqEzfce2#v^N|gawYWmt#&9ep>?cxg8mW ze1+>CMoY}6M^n*u6k8#@>3i5biap+Ft*yoa`%-tcZI!Jq2wC#sYrM?avew;{UToGL z;jX|f+5`w3N*wxU(=)ZAlQN}8zl$FiY)_B1{j5rv@+lSW;HW=>35Xmz;RU*fESXK2 zfv!e}HLN4o!3Ej)&)mbX*|313(K<2N+%oSpUq3O5IORbTjWj*`{iaTSu!Iq^Di*|z zC~68#Ebwue8|L)CE4e#nyiEORt0TPU+|o+jZfj_@Ir7r0!?tMab8dTeyB~>rA;sRS z98XV1AQf7$E^rz-GH=%*H;XLfxl}^bwjZt|!@ap4LOIXBXL>%%(cR#KmGDB!Hot%8 zgaCKc&zeX^gP8Cp^@)z~iiLH1Zi$7ncWxA?sf?{{Z_s-!kaLNL-x21tCjVvRM8Uv> zurTO%w5XbAWhLr%qCGV+V>=>SqA;zM?MHGv^9P?z51BaB%}n77acB`em(K&djCAO{ zqIck5*QUGN?M>k+-e{E)UU{MfcZ>_EG_ZkDBo4ArZ~Uj z-2P~_37c|ay&@&~i?tQnnm4KDocEn~;MLBb#s}=(1{(HtZ%Wok`$AO*R+Jtt{NV8u zQWEwvft8}9>9al=hf>7Zi;aghTXvhhqczeduvqoreb`Q{hZ~HvT^B#@VjufUOm_MHIujs_ahbhth^n=Q+VFxj z9I5=JCm|$>K~N6ytu4$(SLxDHX$HNSSHUBStu{T)eRVMgVYLod$u>bpm)`%hr{yjOh(R6VS#X`g;^#rO6BG9&Q*P(8!7?n8Ncx}bm(R(!>1(@s+x3Vgg zeNIh5&n+T}R#U$reO&9ZlEnc*CVe=08j zWO48_8gjK5Uerij?3?`f3!_zA6G19-ieUE1W{3W$`aLEOdG@U}-FZ>ZxXr|;;E{>u zu%$=yxQV~kNGiZG(v7d&AhvwpqX5+W9M=&#+w}_dQB!jx_5E`YYwNC%L2qN9V39RT zZnxrgT%1n+sX^?hSg&Q9t5qrf=SwriFuRu6jp2K=?II?uk1#vg6GE03{+jpvFL(U^ gF#P!shjPX&a}T4$KiJtunT7!rWMEM2>pwsJ7YZ=8c>n+a literal 0 HcmV?d00001 diff --git a/cis/public/testtool_test/testseite.php b/cis/public/testtool_test/testseite.php index a200b95b2..34ea12818 100644 --- a/cis/public/testtool_test/testseite.php +++ b/cis/public/testtool_test/testseite.php @@ -86,67 +86,88 @@ echo '';

Formel / Formula

- - 5 - 3 - - - + - - 7 - 6 - - = - - - 10 - 6 - - + - - - 7 - 6 - - = - - 17 - - 6 - + + + 5 + 3 + + + + + 7 + 6 + + = + + 10 + 6 + + + + + 7 + 6 + + = + + 17 + 6 + +

- - - - k=1 - 5 - - - - (-1) - k+1 - - - - - - x - 2k + 1 - - - - (2k+1)! - - - - + + + + + k + = + 1 + + 5 + + + + + ( + - + 1 + ) + + + k + + + 1 + + + + + + x + + 2 + k + + + 1 + + + + + ( + 2 + k + + + 1 + ) + ! + + + +

Bild / Picture

- Beispielbild + Beispielbild
From fbe10cc2a1301626b9d553bd9096e7b6a28fd7f7 Mon Sep 17 00:00:00 2001 From: Johann Hoffmann Date: Thu, 29 Jan 2026 15:08:24 +0100 Subject: [PATCH 03/26] PersonModel loadAllStudentUIDSForPersonID used in anw extension AdministrationApi aka Entschuldigungsmanagement --- application/models/person/Person_model.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/application/models/person/Person_model.php b/application/models/person/Person_model.php index 233cfc751..e72b24de4 100644 --- a/application/models/person/Person_model.php +++ b/application/models/person/Person_model.php @@ -420,4 +420,17 @@ class Person_model extends DB_Model return success($result); } } + + public function loadAllStudentUIDSForPersonID($person_id) { + $qry = "SELECT + CONCAT(tp.vorname, ' ', tp.nachname) AS name, + ARRAY_AGG(DISTINCT b.uid ORDER BY b.uid) AS uids + FROM public.tbl_student s + JOIN public.tbl_benutzer b ON s.student_uid = b.uid + JOIN public.tbl_person tp ON b.person_id = tp.person_id + GROUP BY tp.vorname, tp.nachname, b.aktiv, b.person_id + HAVING b.person_id = ? AND b.aktiv IS TRUE;"; + + return $this->execReadOnlyQuery($qry, [$person_id]); + } } From 366cb16b618308af2cc2199d59f5008956f8871c Mon Sep 17 00:00:00 2001 From: Johann Hoffmann Date: Fri, 30 Jan 2026 14:10:28 +0100 Subject: [PATCH 04/26] anw phrasen "studentByLVATitle" & "kontrolliertVon", slight adjustment of fullscreen modal button so it looks similar --- public/js/components/Bootstrap/Modal.js | 14 ++++++--- system/phrasesupdate.php | 40 +++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 4 deletions(-) diff --git a/public/js/components/Bootstrap/Modal.js b/public/js/components/Bootstrap/Modal.js index a84d9d8d7..f1df2a6b1 100644 --- a/public/js/components/Bootstrap/Modal.js +++ b/public/js/components/Bootstrap/Modal.js @@ -135,10 +135,16 @@ export default {