diff --git a/application/controllers/api/frontend/v1/stv/Student.php b/application/controllers/api/frontend/v1/stv/Student.php index 943577bb3..2721bbd6f 100644 --- a/application/controllers/api/frontend/v1/stv/Student.php +++ b/application/controllers/api/frontend/v1/stv/Student.php @@ -136,14 +136,9 @@ class Student extends FHCAPI_Controller ); } $this->PrestudentModel->addSelect( - "( - SELECT status_kurzbz - FROM public.tbl_prestudentstatus pss - WHERE pss.prestudent_id = public.tbl_prestudent.prestudent_id - AND pss.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . " - ORDER BY GREATEST(pss.datum, '0001-01-01') DESC - LIMIT 1 - ) AS statusofsemester" + "public.get_rolle_prestudent(public.tbl_prestudent.prestudent_id, " + . $this->PrestudentModel->escape($studiensemester_kurzbz) + . ") AS statusofsemester" ); $this->PrestudentModel->addJoin('public.tbl_student s', 'prestudent_id', 'LEFT'); diff --git a/application/controllers/api/frontend/v1/stv/Students.php b/application/controllers/api/frontend/v1/stv/Students.php index 9dbea65f2..acacca052 100644 --- a/application/controllers/api/frontend/v1/stv/Students.php +++ b/application/controllers/api/frontend/v1/stv/Students.php @@ -801,14 +801,9 @@ class Students extends FHCAPI_Controller //add status per semester $this->PrestudentModel->addSelect( - "( - SELECT status_kurzbz - FROM public.tbl_prestudentstatus pss - WHERE pss.prestudent_id = public.tbl_prestudent.prestudent_id - AND pss.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . " - ORDER BY GREATEST(pss.datum, '0001-01-01') DESC - LIMIT 1 - ) AS statusofsemester" + "public.get_rolle_prestudent(public.tbl_prestudent.prestudent_id, " + . $this->PrestudentModel->escape($studiensemester_kurzbz) + . ") AS statusofsemester" ); $this->addSelectPrioRel(); @@ -897,14 +892,9 @@ class Students extends FHCAPI_Controller //add status per semester $this->PrestudentModel->addSelect( - "( - SELECT status_kurzbz - FROM public.tbl_prestudentstatus pss - WHERE pss.prestudent_id = public.tbl_prestudent.prestudent_id - AND pss.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . " - ORDER BY GREATEST(pss.datum, '0001-01-01') DESC - LIMIT 1 - ) AS statusofsemester" + "public.get_rolle_prestudent(public.tbl_prestudent.prestudent_id, " + . $this->PrestudentModel->escape($studiensemester_kurzbz) + . ") AS statusofsemester" ); $this->PrestudentModel->addSelect('UPPER(stg.typ || stg.kurzbz) AS studiengang'); diff --git a/application/controllers/api/frontend/v1/stv/Vertrag.php b/application/controllers/api/frontend/v1/stv/Vertrag.php index f94fe795e..c2b0f713c 100644 --- a/application/controllers/api/frontend/v1/stv/Vertrag.php +++ b/application/controllers/api/frontend/v1/stv/Vertrag.php @@ -76,9 +76,7 @@ class Vertrag extends FHCAPI_Controller if (isError($allOe)) $this->terminateWithError(getError($allOe), self::ERROR_TYPE_GENERAL); - $allOe = hasData($allOe) ? getData($allOe) : []; - - $this->addMeta('oe', $allOe); + $allOe = hasData($allOe) ? array_column(getData($allOe), 'oe_kurzbz') : []; // * then check if the user has permissions to cancel the corresponding lv-organisational units if (!$this->permissionlib->isBerechtigtMultipleOe('admin', $allOe, 'suid') && 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]); + } } diff --git a/application/models/ressource/Stundenplan_model.php b/application/models/ressource/Stundenplan_model.php index 067e2b790..d0a97ed9d 100644 --- a/application/models/ressource/Stundenplan_model.php +++ b/application/models/ressource/Stundenplan_model.php @@ -470,12 +470,12 @@ class Stundenplan_model extends DB_Model } foreach($studentlehrverbaende[$sem_date] as $key=>$lehrverband) { - $query .= "((sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND sp.verband = ".$this->escape($lehrverband->verband)." AND sp.gruppe = ".$this->escape($lehrverband->gruppe)." AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)." AND ".$this->escape($sem_date_range->ende).")"; + $query .= "(((sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND sp.verband = ".$this->escape($lehrverband->verband)." AND sp.gruppe = ".$this->escape($lehrverband->gruppe)." AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)." AND ".$this->escape($sem_date_range->ende).")"; // Eintraege fuer den ganzen Verband $query .= "OR (sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND sp.verband = ".$this->escape($lehrverband->verband)." AND (sp.gruppe is null OR sp.gruppe='') AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)." AND ".$this->escape($sem_date_range->ende).")"; // Eintraege fuer das ganze Semester $query .= "OR (sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND (sp.verband is null OR sp.verband='') AND sp.datum BETWEEN ".$this->escape($sem_date_range->start) - ." AND ".$this->escape($sem_date_range->ende).")". $stringGroupLv. ")"; + ." AND ".$this->escape($sem_date_range->ende).")) AND gruppe_kurzbz is null)"; $query .="OR"; } diff --git a/application/models/system/Message_model.php b/application/models/system/Message_model.php index e0a185f9b..19129b606 100644 --- a/application/models/system/Message_model.php +++ b/application/models/system/Message_model.php @@ -242,74 +242,89 @@ class Message_model extends DB_Model */ public function getMessagesForTable($person_id, $offset, $limit) { - $sql_base = " - SELECT + $sql = <<execQuery($sql, $parametersArray); - - if (isError($count)) - return $count; - - $count = ceil(current(getData($count))->count/$limit); - $sql = " - SELECT * FROM ( - " . $sql_base . " - ) a - ORDER BY insertamum DESC - LIMIT ? - OFFSET ? - "; + (COALESCE(ps.titelpre,'') || ' ' || COALESCE(ps.vorname,'') || ' ' || COALESCE(ps.nachname,'') || ' ' || COALESCE(ps.titelpost,'')) as sender, + (COALESCE(pr.titelpre,'') || ' ' || COALESCE(pr.vorname,'') || ' ' || COALESCE(pr.nachname,'') || ' ' || COALESCE(pr.titelpost,'')) as recipient, + fm.sender_id, + fm.recipient_id, + ms.status, + ms.insertamum as statusdatum + from + filtered_messages fm + join + public.tbl_msg_message m on fm.message_id = m.message_id + join + lastmsgstatus ms on fm.message_id = ms.message_id and fm.recipient_id = ms.person_id + left join + public.tbl_person ps on ps.person_id = fm.sender_id + left join + public.tbl_person pr on pr.person_id = fm.recipient_id + order by + m.insertamum DESC + limit ? + offset ?; +EOSQL; $parametersArray = array($person_id, $person_id, $limit, $offset); + $count = 0; $data = $this->execQuery($sql, $parametersArray); if (isError($data)) return $data; $data = getData($data); + if($data) + { + $count = ceil($data[0]->total_msgs / $limit); + } return success(['data' => $data, 'count' => $count]); } diff --git a/application/models/vertragsbestandteil/Gehaltsbestandteil_model.php b/application/models/vertragsbestandteil/Gehaltsbestandteil_model.php index c50627697..2669105a1 100644 --- a/application/models/vertragsbestandteil/Gehaltsbestandteil_model.php +++ b/application/models/vertragsbestandteil/Gehaltsbestandteil_model.php @@ -286,7 +286,13 @@ EOSQL; foreach( $rows as $row ) { $tmpgb = new Gehaltsbestandteil(); $tmpgb->hydrateByStdClass($row, true); - + + if ($row->betrag_valorisiert != null && $row->valorisierungsdatum != null + && $row->valorisierungsdatum == $row->von) { + // neuer Gehaltsbestandteil mit Valorisierungsdatum aber auch valorisiert + $tmpgb->setGrundbetrag($row->betrag_valorisiert); + } + // prevent duplication (caused by the join with historic values) if (!isset($lastRecords[(string)$row->gehaltsbestandteil_id])) { $gehaltsbestandteile[] = $tmpgb; diff --git a/cis/public/testtool_test/MathML_Beispiel.png b/cis/public/testtool_test/MathML_Beispiel.png new file mode 100644 index 000000000..d6ef2403f Binary files /dev/null and b/cis/public/testtool_test/MathML_Beispiel.png differ 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
diff --git a/cis/testtool/admin/index.php b/cis/testtool/admin/index.php index 4f010784f..f8e8d36ed 100644 --- a/cis/testtool/admin/index.php +++ b/cis/testtool/admin/index.php @@ -1172,8 +1172,8 @@ if ($frage_id != '') echo ""; //Vorschau fuer das Text-Feld echo "Vorschau:
-
$frage->text
- Derzeit:
$frage->text
+
$frage->text
+ Derzeit:
$frage->text
"; echo ""; echo ''; @@ -1280,8 +1280,8 @@ if ($frage_id != '') echo "/>"; echo "".($vorschlag_id != ''?"frage_id'\" />":'').""; //Vorschau fuer das Text-Feld - echo "Vorschau:
$vorschlag->text
- Derzeit:
$vorschlag->text
"; + echo "Vorschau:
$vorschlag->text
+ Derzeit:
$vorschlag->text
"; echo ""; echo ""; echo ''; diff --git a/cis/testtool/frage.php b/cis/testtool/frage.php index bf2ee24c5..a5f4100c9 100644 --- a/cis/testtool/frage.php +++ b/cis/testtool/frage.php @@ -581,14 +581,14 @@ if($frage->frage_id!='') else $value=$p->t('testtool/blaettern').' >>'; - echo " $value"; + echo "$value"; } else { if(!$demo) { //Wenns der letzte Eintrag ist, wieder zum ersten springen - echo " ".$p->t('testtool/blaettern')." >>"; + echo "".$p->t('testtool/blaettern')." >>"; } } } diff --git a/cis/testtool/login.php b/cis/testtool/login.php index d028a41ff..cfc1ba63b 100644 --- a/cis/testtool/login.php +++ b/cis/testtool/login.php @@ -340,13 +340,26 @@ else } } -if ((isset($_SESSION['prestudent_id']) && !isset($_SESSION['pruefling_id']) && - !isset($_SESSION['confirmation_needed']) && !isset($_SESSION['confirmed_code'])) || - (isset($_SESSION['confirmation_needed']) && $_SESSION['confirmation_needed'] === true && - isset($_SESSION['confirmed_code']) && $_SESSION['confirmed_code'] === true && - isset($_SESSION['externe_ueberwachung']) && $_SESSION['externe_ueberwachung'] === true && - isset($_SESSION['externe_ueberwachung_verified']) && $_SESSION['externe_ueberwachung_verified'] === true && - isset($_SESSION['prestudent_id']) && !isset($_SESSION['pruefling_id']))) +if ( + ( + isset($_SESSION['prestudent_id']) && !isset($_SESSION['pruefling_id']) && + !isset($_SESSION['confirmation_needed']) && !isset($_SESSION['confirmed_code']) && + !isset($_SESSION['externe_ueberwachung']) && !isset($_SESSION['externe_ueberwachung_verified']) + ) + || + ( + isset($_SESSION['confirmation_needed']) && $_SESSION['confirmation_needed'] === true && + isset($_SESSION['confirmed_code']) && $_SESSION['confirmed_code'] === true && + isset($_SESSION['prestudent_id']) && !isset($_SESSION['pruefling_id']) + ) + || + ( + isset($_SESSION['externe_ueberwachung']) && $_SESSION['externe_ueberwachung'] === true && + isset($_SESSION['externe_ueberwachung_verified']) && $_SESSION['externe_ueberwachung_verified'] === true && + isset($_SESSION['prestudent_id']) && !isset($_SESSION['pruefling_id']) + ) + +) { $pruefling = new pruefling(); @@ -665,10 +678,11 @@ elseif (isset($prestudent_id)) else { // Letzten Status für des Prestudenten einholen - $ps_master = new Prestudent(); + $ps_master = new Prestudent($prestudent_id); $ps_master->getLastStatus($prestudent_id); $sto = new Studienordnung(); $sto->getStudienordnungFromStudienplan($ps_master->studienplan_id); + $stg = new Studiengang($ps_master->studiengang_kz); // Name des Studiengangs aus Studienordnung laden, ansonsten Fallback auf Studiengang $stg_name = $sto->studiengangbezeichnung; $stg_name_eng = $sto->studiengangbezeichnung_englisch; diff --git a/include/anwesenheit.class.php b/include/anwesenheit.class.php index 2b8389c79..9493a3d4b 100644 --- a/include/anwesenheit.class.php +++ b/include/anwesenheit.class.php @@ -479,91 +479,182 @@ class anwesenheit extends basis_db */ public function loadAnwesenheitStudiensemester($studiensemester_kurzbz, $student_uid=null, $lehrveranstaltung_id=null) { - $qry = "SELECT - lehrveranstaltung_id, vorname, nachname, wahlname, student_uid as uid, bezeichnung, - gesamt as gesamtstunden, anwesend, nichtanwesend, trunc(100-(nichtanwesend/gesamt)*100,2) as prozent - FROM - ( - SELECT - vorname, nachname, wahlname, lehrveranstaltung_id, bezeichnung, gruppe, student_uid, - count(stundenplan_id) as gesamt, - case when anwesend.summe is null then 0 else anwesend.summe end as anwesend, - case when nichtanwesend.summe is null then 0 else nichtanwesend.summe end as nichtanwesend + $qry = "SELECT + lehrveranstaltung_id, + vorname, + nachname, + wahlname, + student_uid AS uid, + bezeichnung, + gesamt AS gesamtstunden, + anwesend, + nichtanwesend, + CASE WHEN gesamt = 0 THEN 100.00 ELSE trunc(100-(nichtanwesend/(gesamt))*100,2) END AS prozent + + FROM( + SELECT + vorname, + nachname, + wahlname, + lehrveranstaltung_id, + bezeichnung, + student_uid, + --COUNT(stundenplan_id) AS gesamts, + COALESCE(anwesend.summe, 0) + COALESCE(nichtanwesend.summe, 0) AS gesamt, + COALESCE(anwesend.summe, 0) AS anwesend, + COALESCE(nichtanwesend.summe, 0) AS nichtanwesend + FROM ( - SELECT - sum(stundenplan_id) as stundenplan_id, datum, stunde, lehrveranstaltung_id, - bezeichnung, studiensemester_kurzbz, studiengang_kz, - TRIM( - CASE WHEN stp.gruppe_kurzbz is not null then stp.gruppe_kurzbz - else stp.semester||(case when verband is null then '' else stp.verband end)||(case when stp.gruppe is null then '' else stp.gruppe end) end) as gruppe + SELECT + SUM(stundenplan_id) AS stundenplan_id, + datum, + stunde, + lehrveranstaltung_id, + bezeichnung, + studiensemester_kurzbz, + studiengang_kz + FROM lehre.tbl_lehrveranstaltung lv - JOIN lehre.tbl_lehreinheit le using (lehrveranstaltung_id) - JOIN lehre.tbl_stundenplan stp using (lehreinheit_id,studiengang_kz) + JOIN + lehre.tbl_lehreinheit le USING (lehrveranstaltung_id) + JOIN + lehre.tbl_stundenplan stp USING (lehreinheit_id,studiengang_kz) + WHERE studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." - AND (titel not like '%Nebenprüfung%' OR titel is null) - - group by datum, stunde, lehrveranstaltung_id, bezeichnung, studiensemester_kurzbz, studiengang_kz, stp.gruppe_kurzbz, stp.semester, stp.verband, stp.gruppe + AND (titel NOT LIKE '%Nebenprüfung%' OR titel IS NULL) + + GROUP BY + datum, + stunde, + lehrveranstaltung_id, + bezeichnung, + studiensemester_kurzbz, + studiengang_kz, + stp.gruppe_kurzbz, + stp.semester, + stp.verband, + stp.gruppe )x JOIN ( - SELECT semester::text as gruppe, public.tbl_studentlehrverband.studiensemester_kurzbz, student_uid, studiengang_kz - FROM - public.tbl_studentlehrverband - WHERE studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." - - UNION - - SELECT semester||verband as gruppe, public.tbl_studentlehrverband.studiensemester_kurzbz, student_uid, studiengang_kz - FROM - public.tbl_studentlehrverband - WHERE - studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." - - UNION - - SELECT semester||verband||gruppe as gruppe, public.tbl_studentlehrverband.studiensemester_kurzbz, student_uid, studiengang_kz - FROM - public.tbl_studentlehrverband - WHERE - studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." - - UNION - - SELECT gruppe_kurzbz as gruppe, public.tbl_benutzergruppe.studiensemester_kurzbz, uid as student_uid, studiengang_kz - FROM - public.tbl_benutzergruppe - JOIN - public.tbl_gruppe using (gruppe_kurzbz) - WHERE studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." - - )a using (gruppe, studiensemester_kurzbz, studiengang_kz) - JOIN public.tbl_benutzer b on b.uid = student_uid - JOIN public.tbl_person p using(person_id) - LEFT JOIN( SELECT - lehrveranstaltung_id, studiensemester_kurzbz, uid as student_uid, sum(einheiten) as summe - FROM - campus.tbl_anwesenheit a - JOIN lehre.tbl_lehreinheit le using (lehreinheit_id) - JOIN lehre.tbl_lehrveranstaltung lv using (lehrveranstaltung_id) - WHERE - anwesend = true AND studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." + le.lehrveranstaltung_id, + slv.student_uid, + le.studiensemester_kurzbz, + st.prestudent_id + + FROM + public.tbl_studentlehrverband slv + JOIN + lehre.tbl_lehreinheitgruppe leg + ON slv.studiengang_kz = leg.studiengang_kz + AND slv.semester = leg.semester + AND ( + NULLIF(btrim(leg.verband::text), '') IS NULL + OR NULLIF(btrim(slv.verband::text), '') = NULLIF(btrim(leg.verband::text), '') + ) + AND ( + NULLIF(btrim(leg.gruppe::text), '') IS NULL + OR NULLIF(btrim(slv.gruppe::text), '') = NULLIF(btrim(leg.gruppe::text), '') + ) + JOIN + lehre.tbl_lehreinheit le USING (lehreinheit_id, studiensemester_kurzbz) + JOIN + public.tbl_student st USING(student_uid) + + WHERE + leg.gruppe_kurzbz IS NULL + AND le.studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." + GROUP BY - lehrveranstaltung_id, bezeichnung, uid, studiensemester_kurzbz - )anwesend using(lehrveranstaltung_id, student_uid, studiensemester_kurzbz) + le.lehrveranstaltung_id, + slv.student_uid, + le.studiensemester_kurzbz, + st.prestudent_id + + UNION + + SELECT + le.lehrveranstaltung_id, + bg.uid AS student_uid, + bg.studiensemester_kurzbz, + st.prestudent_id + + FROM + public.tbl_benutzergruppe bg + JOIN + lehre.tbl_lehreinheitgruppe leg USING (gruppe_kurzbz) + JOIN + lehre.tbl_lehreinheit le USING(lehreinheit_id, studiensemester_kurzbz) + JOIN + public.tbl_student st ON bg.uid = st.student_uid + + WHERE + bg.studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." + + GROUP BY + le.lehrveranstaltung_id, + bg.uid, + bg.studiensemester_kurzbz, + st.prestudent_id + + )a USING (lehrveranstaltung_id, studiensemester_kurzbz) + JOIN + public.tbl_benutzer b on b.uid = student_uid + JOIN + public.tbl_person p using(person_id) LEFT JOIN( - SELECT lehrveranstaltung_id, studiensemester_kurzbz, uid as student_uid, sum(einheiten) as summe + SELECT + lehrveranstaltung_id, + studiensemester_kurzbz, + uid AS student_uid, + SUM(einheiten) AS summe + FROM campus.tbl_anwesenheit a - JOIN lehre.tbl_lehreinheit le using (lehreinheit_id) - JOIN lehre.tbl_lehrveranstaltung lv using (lehrveranstaltung_id) + JOIN + lehre.tbl_lehreinheit le USING(lehreinheit_id) + JOIN + lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id) + WHERE - anwesend = false AND studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." + anwesend = true + AND studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." + GROUP BY - lehrveranstaltung_id, bezeichnung, uid, studiensemester_kurzbz - )nichtanwesend using(lehrveranstaltung_id, student_uid, studiensemester_kurzbz) + lehrveranstaltung_id, + bezeichnung, + uid, + studiensemester_kurzbz + + )anwesend USING(lehrveranstaltung_id, student_uid, studiensemester_kurzbz) + LEFT JOIN( + SELECT + lehrveranstaltung_id, + studiensemester_kurzbz, + uid AS student_uid, + SUM(einheiten) AS summe + + FROM + campus.tbl_anwesenheit a + JOIN + lehre.tbl_lehreinheit le USING (lehreinheit_id) + JOIN + lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id) + + WHERE + anwesend = false + AND studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." + + GROUP BY + lehrveranstaltung_id, + bezeichnung, + uid, + studiensemester_kurzbz + )nichtanwesend USING(lehrveranstaltung_id, student_uid, studiensemester_kurzbz) + WHERE lehrveranstaltung_id > 0 "; @@ -573,8 +664,15 @@ class anwesenheit extends basis_db if(!is_null($lehrveranstaltung_id)) $qry.=" AND lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id); - $qry.="group by - vorname, nachname, wahlname, lehrveranstaltung_id, bezeichnung, gruppe, student_uid, anwesend.summe, nichtanwesend.summe + $qry.=" GROUP BY + vorname, + nachname, + wahlname, + lehrveranstaltung_id, + bezeichnung, + student_uid, + anwesend.summe, + nichtanwesend.summe )m"; if($lehrveranstaltung_id != '') diff --git a/include/gebiet.class.php b/include/gebiet.class.php index a4df72338..fd2bfd198 100644 --- a/include/gebiet.class.php +++ b/include/gebiet.class.php @@ -345,6 +345,7 @@ class gebiet extends basis_db } //Pruefen ob jede Fragen mindestens 2 Vorschlaege hat + //Angepasst am 28.01.2026 auf ein Warning. $qry = "SELECT frage_id, nummer FROM testtool.tbl_frage WHERE (SELECT count(*) as anzahl FROM testtool.tbl_vorschlag WHERE frage_id=tbl_frage.frage_id)<2 AND gebiet_id=".$this->db_add_param($gebiet_id, FHC_INTEGER)." AND NOT demo;"; @@ -352,7 +353,7 @@ class gebiet extends basis_db { while($row = $this->db_fetch_object()) { - $this->errormsg .= "Frage Nummer $row->nummer (ID: $row->frage_id) hat weniger als 2 Vorschlaege.\n"; + $this->warningmsg .= "Frage Nummer $row->nummer (ID: $row->frage_id) hat weniger als 2 Vorschlaege.\n"; } } @@ -448,6 +449,52 @@ class gebiet extends basis_db } } + //Pruefen ob es leere Fragen (ohne Text, Bild oder Audio) gibt + $qry = "SELECT + fr.frage_id, + fr.nummer, + fs.sprache + FROM + testtool.tbl_frage fr + JOIN testtool.tbl_frage_sprache fs + USING (frage_id) + WHERE + (fs.text IS NULL + OR fs.text = '') + AND fs.bild IS NULL + AND fs.audio IS NULL + AND demo = false + AND gebiet_id=".$this->db_add_param($gebiet_id, FHC_INTEGER)." + AND EXISTS ( + SELECT + 1 + FROM + testtool.tbl_frage fr2 + JOIN testtool.tbl_frage_sprache fs2 + USING (frage_id) + WHERE + fs2.sprache = fs.sprache + AND fr2.gebiet_id = fr.gebiet_id + AND fr2.frage_id != fr.frage_id + AND ( + (fs2.text IS NOT NULL + AND fs2.text != '') + OR fs2.bild IS NOT NULL + OR fs2.audio IS NOT NULL + ) + AND demo = false + ) + ORDER BY + fs.sprache, + fr.nummer;"; + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $this->warningmsg .= "Frage Nummer $row->nummer (ID: $row->frage_id), Sprache $row->sprache hat keinen Text, Bild oder Audio.\n"; + } + } + if($this->errormsg=='') return true; else 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/public/css/tags.css b/public/css/tags.css index 9e0d7ee4b..e92f415b2 100644 --- a/public/css/tags.css +++ b/public/css/tags.css @@ -51,6 +51,14 @@ background-color: #6d4c41; } +.tag_dark_grey { + background-color: #595959; +} + +.tag_light_grey { + background-color: #9a9a9a; +} + .tag_blau { background-color: #508498; } diff --git a/public/js/api/factory/studiengang.js b/public/js/api/factory/studiengang.js index 12322cb3a..6d5ae15aa 100644 --- a/public/js/api/factory/studiengang.js +++ b/public/js/api/factory/studiengang.js @@ -16,10 +16,17 @@ */ export default { - getAllStudiensemesterAndAktOrNext() { + studiengangInformation() { return { method: 'get', - url: '/api/frontend/v1/Studiensemester/getStudiengangInfo' + url: '/api/frontend/v1/Studgang/getStudiengangInfo' }; }, + getStudiengangByKz(studiengang_kz) { + return { + method: 'get', + url: '/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz', + params: { studiengang_kz } + }; + } }; \ No newline at end of file diff --git a/public/js/components/Bootstrap/Modal.js b/public/js/components/Bootstrap/Modal.js index 15253cfe8..e320d4429 100644 --- a/public/js/components/Bootstrap/Modal.js +++ b/public/js/components/Bootstrap/Modal.js @@ -137,10 +137,16 @@ export default {