From 7628ebc9ca7dc20bfbdd5f7afe54e0edbf7585de Mon Sep 17 00:00:00 2001 From: Johann Hoffmann Date: Wed, 1 Apr 2026 16:05:51 +0200 Subject: [PATCH] remove unnecessary LE join in diplomasupplement.xml.php; fix studiensemester_kurzbz col datatype in dbupdate script; stv projektarbeit dropdown selection also by studienplan of current prestudent_status history entry --- .../api/frontend/v1/stv/Projektarbeit.php | 32 ++++++++++++++++-- .../education/Lehrveranstaltung_model.php | 33 +++++++++++++++++++ rdf/diplomasupplement.xml.php | 5 ++- .../75469_le_optional_4_projektarbeit.php | 2 +- 4 files changed, 67 insertions(+), 5 deletions(-) diff --git a/application/controllers/api/frontend/v1/stv/Projektarbeit.php b/application/controllers/api/frontend/v1/stv/Projektarbeit.php index a18365c17..e259d0517 100644 --- a/application/controllers/api/frontend/v1/stv/Projektarbeit.php +++ b/application/controllers/api/frontend/v1/stv/Projektarbeit.php @@ -42,6 +42,8 @@ class Projektarbeit extends FHCAPI_Controller $this->load->model('education/Note_model', 'NoteModel'); $this->load->model('education/Projektbetreuer_model', 'BetreuerModel'); $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + $this->load->model('crm/Student_model', 'StudentModel'); + $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); // load libraries $this->load->library('PermissionLib'); @@ -251,12 +253,36 @@ class Projektarbeit extends FHCAPI_Controller if (!isset($student_uid)) $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Student UID']), self::ERROR_TYPE_GENERAL); if (!isset($studiensemester_kurzbz)) $this->terminateWithError('Studiensemester missing', self::ERROR_TYPE_GENERAL); - // get Lvs + // get prestudent_id from student model + $studentRes = $this->StudentModel->load(['student_uid' => $student_uid]); + if(hasData($studentRes)) { + $student = getData($studentRes); + } else { + $this->terminateWithError($studentRes, self::ERROR_TYPE_GENERAL); + } + + // to get prestudent_status history + $historyRes = $this->PrestudentstatusModel->getHistoryPrestudent($student[0]->prestudent_id); + if(hasData($historyRes)) { + $history = getData($historyRes); + } else { + $this->terminateWithError($historyRes, self::ERROR_TYPE_GENERAL); + } + + // query for every lva of a studiengang that has projektarbeit flag true $lvsResult = $this->LehrveranstaltungModel->getLvsForProjektarbeit($student_uid, $studiengang_kz, $additional_lehrveranstaltung_id); - if (isError($lvsResult)) return $this->terminateWithError($lvsResult, self::ERROR_TYPE_GENERAL); - $lvs = hasData($lvsResult) ? getData($lvsResult) : []; + + $lvsIDs = array_column($lvs, 'lehrveranstaltung_id'); + + // get current studienplan_id from status history to find out which lva options are actually assigned to the students studienplan + // important so the projektarbeit has the correct lva assigned to be able to find and print the thesis title on the degree documents! + $currentStatus = $history[0]; + $lvByStudienPlanRes = $this->LehrveranstaltungModel->getLvsByStudienplanByLvaIDs($currentStatus->studienplan_id, $lvsIDs); + if(hasData($lvByStudienPlanRes)) { + $lvs = getData($lvByStudienPlanRes); + } foreach ($lvs as $lv) { diff --git a/application/models/education/Lehrveranstaltung_model.php b/application/models/education/Lehrveranstaltung_model.php index ccac33bc7..d74d3f315 100644 --- a/application/models/education/Lehrveranstaltung_model.php +++ b/application/models/education/Lehrveranstaltung_model.php @@ -1260,6 +1260,39 @@ class Lehrveranstaltung_model extends DB_Model "; } + /** + * Gets lehrveranstaltungen of Studienplan of a certain lva_id set + * used if a bigger set of lva id is already available and it needs to be checked against a certain studienplan aswell + * @param $studienplan_id ID des Studienplans + * @param $lva_ids LVA_ID welche abgegleicht werden sollen + * @return array|null + */ + public function getLvsByStudienplanByLvaIDs($studienplan_id, $lva_ids) + { + $params = array($studienplan_id, $lva_ids); + + $qry = "SELECT tbl_lehrveranstaltung.*, + tbl_studienplan_lehrveranstaltung.studienplan_lehrveranstaltung_id, + tbl_studienplan_lehrveranstaltung.semester as stpllv_semester, + tbl_studienplan_lehrveranstaltung.pflicht as stpllv_pflicht, + tbl_studienplan_lehrveranstaltung.koordinator as stpllv_koordinator, + tbl_studienplan_lehrveranstaltung.studienplan_lehrveranstaltung_id_parent, + tbl_studienplan_lehrveranstaltung.sort stpllv_sort, + tbl_studienplan_lehrveranstaltung.curriculum, + tbl_studienplan_lehrveranstaltung.export, + tbl_studienplan_lehrveranstaltung.genehmigung + FROM lehre.tbl_lehrveranstaltung + JOIN lehre.tbl_studienplan_lehrveranstaltung + USING(lehrveranstaltung_id) + WHERE tbl_studienplan_lehrveranstaltung.studienplan_id = ? + AND tbl_studienplan_lehrveranstaltung.lehrveranstaltung_id IN ? + "; + + $qry .= " ORDER BY stpllv_sort, semester, sort"; + + return $this->execQuery($qry, $params); + } + public function getAllOe($lv_id) { $qry = "SELECT DISTINCT oe_kurzbz diff --git a/rdf/diplomasupplement.xml.php b/rdf/diplomasupplement.xml.php index 2945018cb..80e2051b7 100644 --- a/rdf/diplomasupplement.xml.php +++ b/rdf/diplomasupplement.xml.php @@ -954,7 +954,6 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml") lehre.tbl_projektarbeit.lehrveranstaltung_id, titel, themenbereich, note, titel_english FROM lehre.tbl_projektarbeit - LEFT JOIN lehre.tbl_lehreinheit ON(lehre.tbl_projektarbeit.lehrveranstaltung_id = lehre.tbl_lehreinheit.lehrveranstaltung_id AND lehre.tbl_projektarbeit.studiensemester_kurzbz = lehre.tbl_lehreinheit.studiensemester_kurzbz) WHERE student_uid=".$db->db_add_param($uid_arr[$i])." @@ -972,6 +971,10 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml") while($row_thesis = $db->db_fetch_object($result_thesis)) { $bezeichnung.= ": \"".$row_thesis->titel."\""; + // hier sollt nicht $titel_english verwendet werden, da in der projektarbeitsbeurteilung ein + // feature zum aktualisieren des projektarbeit titel existiert und nur das feld 'titel' editiert. + // um divergente thesisnamen zu vermeiden wird in beiden Fällen der (ohnehin öfters englische) Wert + // aus 'titel' verwendet. $bezeichnung_englisch.= ": \"".$row_thesis->titel."\""; } } diff --git a/system/dbupdate_3.4/75469_le_optional_4_projektarbeit.php b/system/dbupdate_3.4/75469_le_optional_4_projektarbeit.php index 939b1ea7e..fe4a8e117 100644 --- a/system/dbupdate_3.4/75469_le_optional_4_projektarbeit.php +++ b/system/dbupdate_3.4/75469_le_optional_4_projektarbeit.php @@ -3,7 +3,7 @@ if (! defined('DB_NAME')) exit('No direct script access allowed'); $cols_to_add = [ 'lehrveranstaltung_id' => "INTEGER", - 'studiensemester_kurzbz' => "INTEGER" + 'studiensemester_kurzbz' => "VARCHAR(16)" ]; foreach ($cols_to_add as $col => $type) {