diff --git a/application/controllers/api/frontend/v1/Studium.php b/application/controllers/api/frontend/v1/Studium.php index b14a852a6..c50915ced 100644 --- a/application/controllers/api/frontend/v1/Studium.php +++ b/application/controllers/api/frontend/v1/Studium.php @@ -39,6 +39,7 @@ class Studium extends FHCAPI_Controller $this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel'); $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); $this->load->model('codex/Orgform_model','OrgformModel'); + $this->load->model('person/Person_model','PersonModel'); } @@ -53,11 +54,6 @@ class Studium extends FHCAPI_Controller $parameter_semester = $this->input->get('semester',true); $parameter_studienplan = $this->input->get('studienplan',true); - $test1=null; - $test2=null; - $test3=null; - $test4=null; - if(isset($parameter_studiensemester)){ $parameter_studiensemester = current($this->getDataOrTerminateWithError($this->StudiensemesterModel->loadWhere(["studiensemester_kurzbz" => $parameter_studiensemester]))); } @@ -80,7 +76,6 @@ class Studium extends FHCAPI_Controller if(isset($parameter_studiensemester) && !empty(array_filter($allStudienSemester, function($studiensemester) use($parameter_studiensemester){ return $studiensemester->studiensemester_kurzbz == $parameter_studiensemester->studiensemester_kurzbz; }))){ - $test1=true; $aktuelles_studiensemester = $parameter_studiensemester; } @@ -93,7 +88,6 @@ class Studium extends FHCAPI_Controller if(isset($parameter_studiengang) && !empty(array_filter( $studiengaenge,function($studiengang)use($parameter_studiengang){ return $studiengang->studiengang_kz == $parameter_studiengang->studiengang_kz; }))){ - $test2=true; $aktuelles_studiengang = $parameter_studiengang; } @@ -112,14 +106,13 @@ class Studium extends FHCAPI_Controller $aktuelles_semester = null; } if(isset($parameter_semester) && in_array($parameter_semester, $semester)){ - $test3=true; $aktuelles_semester = $parameter_semester; } $semester_studienplan = array_filter($studienplaene, function($item) use($aktuelles_semester){ return $item->semester == $aktuelles_semester; }); - + // fetch current studienplan based on semester $aktuelles_studienplan = current($semester_studienplan); if(!$aktuelles_studienplan){ @@ -128,13 +121,19 @@ class Studium extends FHCAPI_Controller if(isset($parameter_studienplan) && !empty(array_filter( $semester_studienplan, function($stundenplan) use($parameter_studienplan){ return $stundenplan->studienplan_id == $parameter_studienplan->studienplan_id; }))){ - $test4=true; $aktuelles_studienplan = $parameter_studienplan ; } // fetch studienplan lehrveranstaltungen if($aktuelles_studienplan){ $lehrveranstaltungen = $this->computeStudienplanLehrveranstaltungen($aktuelles_studienplan->studienplan_id, $aktuelles_semester); + foreach($lehrveranstaltungen as $lehrv){ + foreach($lehrv->lehrveranstaltungen as $lv){ + $lvLektoren =$this->computeLektorenFromLehrveranstaltung($lv->lehrveranstaltung_id,$aktuelles_semester, $aktuelles_studiengang->studiengang_kz, $aktuelles_studiensemester->studiensemester_kurzbz); + $lv->lektoren = $lvLektoren; + } + + } $aktuelles_lehrveranstaltungen = $lehrveranstaltungen; }else{ $aktuelles_lehrveranstaltungen = []; @@ -152,10 +151,6 @@ class Studium extends FHCAPI_Controller $result->studienplan["all"]=$semester_studienplan; $result->studienplan["preselected"]=$aktuelles_studienplan; $result->lehrveranstaltungen=$aktuelles_lehrveranstaltungen; - $result->test1=$test1; - $result->test2=$test2; - $result->test3=$test3; - $result->test4=$test4; /* if($this->getDataOrTerminateWithError($this->StudentModel->isStudent(getAuthUID()))){ $studentLehrverband =$this->StudentlehrverbandModel->loadWhere(["student_uid" => getAuthUID(), "studiensemester_kurzbz" => $aktuelles_studiensemester_kz]); @@ -224,6 +219,7 @@ class Studium extends FHCAPI_Controller }); $lehrveranstaltungen= array_reduce($lehrveranstaltungen,function($carry, $lehrv){ if($lehrv->lehrtyp_kurzbz == "modul"){ + $lehrv->lehrveranstaltungen = []; array_push($carry, $lehrv); } else{ @@ -251,6 +247,18 @@ class Studium extends FHCAPI_Controller $studienplan =current($this->getDataOrTerminateWithError($this->StudienplanModel->loadWhere(["studienplan_id"=>$studienplan_id]))); return $studienplan; } + + private function computeLektorenFromLehrveranstaltung($lehreinheit_id, $semester, $studiengang, $studiensemester){ + $this->load->library('StundenplanLib'); + $lektoren = $this->stundenplanlib->getLektorenFromLehrveranstaltung($lehreinheit_id,$semester, $studiengang,$studiensemester); + if(!$lektoren){ + return []; + } + $lektoren = array_map(function($lektor){ + return ["name"=>$this->getDataOrTerminateWithError($this->PersonModel->getFullName($lektor)), "email"=>$lektor."@".DOMAIN]; + },$lektoren); + return $lektoren; + } } diff --git a/application/libraries/StundenplanLib.php b/application/libraries/StundenplanLib.php index e0691ecab..b64fd226e 100644 --- a/application/libraries/StundenplanLib.php +++ b/application/libraries/StundenplanLib.php @@ -21,6 +21,8 @@ class StundenplanLib{ $this->_ci->load->model('organisation/Studiensemester_model','StudiensemesterModel'); $this->_ci->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel'); $this->_ci->load->model('person/Benutzergruppe_model','BenutzergruppeModel'); + $this->_ci->load->model('ressource/Stundenplan_model', 'StundenplanModel'); + $student_uid = getAuthUID(); if(is_null($student_uid)) @@ -55,7 +57,7 @@ class StundenplanLib{ // query lv itself in case its Stundenplan is being queried and it has no entries $this->_ci->load->model('education/Lehrveranstaltung_model','LehrveranstaltungModel'); - $lv_result = $this->LehrveranstaltungModel->load($lv_id); + $lv_result = $this->_ci->LehrveranstaltungModel->load($lv_id); if(isError($lv_result)) { return error(getData($lv_result)); @@ -143,6 +145,39 @@ class StundenplanLib{ return success($reservierungen); } + public function getLektorenFromLehrveranstaltung($lehrveranstaltung_id, $semester, $studiengang_kz, $studiensemester_kurzbz){ + $this->_ci =& get_instance(); + $this->_ci->load->model('ressource/Stundenplan_model', 'StundenplanModel'); + $this->_ci->load->model('organisation/Studiensemester_model','StudiensemesterModel'); + + $studiensemester = $this->_ci->StudiensemesterModel->loadWhere(["studiensemester_kurzbz"=>$studiensemester_kurzbz]); + if(isError($studiensemester)) + { + return error(getData($studiensemester)); + } + $studiensemester = current(getData($studiensemester)); + $lektoren = $this->_ci->StundenplanModel->execReadOnlyQuery(" + SELECT DISTINCT uid + FROM campus.vw_stundenplan + WHERE lehrveranstaltung_id = ? AND + studiengang_kz = ? AND + semester = ? AND + (datum BETWEEN ? AND ?) + ",[$lehrveranstaltung_id, $studiengang_kz, $semester, $studiensemester->start, $studiensemester->ende]); + + if(isError($lektoren)) + { + return error(getData($lektoren)); + } + $lektoren = getData($lektoren); + if(isset($lektoren)){ + $lektoren = array_map(function($lektor){ + return $lektor->uid; + },$lektoren); + + } + return $lektoren; + } public function expand_object_information($data){ $this->_ci =& get_instance(); diff --git a/application/views/CisRouterView/CisRouterView.php b/application/views/CisRouterView/CisRouterView.php index 231e25696..f70274f6e 100644 --- a/application/views/CisRouterView/CisRouterView.php +++ b/application/views/CisRouterView/CisRouterView.php @@ -22,6 +22,7 @@ $includesArray = array( 'public/css/components/Profil.css', 'public/css/components/FormUnderline.css', 'public/css/Cis4/Cms.css', + 'public/css/Cis4/Studium.css', ), 'customJSs' => array( 'vendor/npm-asset/primevue/accordion/accordion.min.js', diff --git a/public/css/Cis4/Cis.css b/public/css/Cis4/Cis.css index aa24641f8..f3beeddec 100644 --- a/public/css/Cis4/Cis.css +++ b/public/css/Cis4/Cis.css @@ -59,6 +59,25 @@ html { color:white; } +/* lvMenu entry disabled style */ +[disabled="true"].menu-entry { + pointer-events: none; + cursor: default; + background-color: #dadada !important; + color: black !important; + -webkit-touch-callout: none; + /* iOS Safari */ + -webkit-user-select: none; + /* Safari */ + -khtml-user-select: none; + /* Konqueror HTML */ + -moz-user-select: none; + /* Old versions of Firefox */ + -ms-user-select: none; + /* Internet Explorer/Edge */ + user-select: none; +} + /* buttons */ #cis-header .btn-level-1, #cis-header .btn-level-1 + .btn, diff --git a/public/css/Cis4/Studium.css b/public/css/Cis4/Studium.css new file mode 100644 index 000000000..c0c58e1d0 --- /dev/null +++ b/public/css/Cis4/Studium.css @@ -0,0 +1,60 @@ +.lvUebersicht{ + display:grid; + gap: 1rem; +} + +@media (min-width: 992px) { + .lvUebersicht { + grid-template-columns: 1fr 1fr 1fr; + } +} + +@media (max-width: 992px){ + .lvUebersicht{ + grid-template-columns: 1fr 1fr; + } +} + +@media (max-width: 576px){ + .lvUebersicht{ + grid-template-columns: 1fr; + } +} + +.lvOptions { + display: grid; + gap: 1rem; +} + +.lvOptions > div { + flex-basis: auto; + flex-grow: 1; + flex-shrink: 1; + +} + +.lvOptions button { + flex-shrink: 0; + +} + +@media (min-width: 1200px) { + .lvOptions { + grid-template-columns: 1fr 1fr 1fr 1fr; + } +} + +@media (max-width: 1200px) { + .lvOptions { + grid-template-columns: 1fr 1fr; + } +} + +@media (max-width: 576px) { + .lvOptions { + grid-template-columns: 1fr; + } +} + + + diff --git a/public/js/api/studium.js b/public/js/api/studium.js index 1789c449d..cb59482e7 100644 --- a/public/js/api/studium.js +++ b/public/js/api/studium.js @@ -8,7 +8,6 @@ export default { }, getAllStudienSemester: function (studiensemester=undefined, studiengang=undefined, semester=undefined, studienplan=undefined) { - console.log(studiensemester, studiengang, semester, studienplan) return this.$fhcApi.get( '/api/frontend/v1/Studium/getStudienAllSemester', {studiensemester, studiengang, semester, studienplan} diff --git a/public/js/components/Cis/Mylv/LvUebersicht.js b/public/js/components/Cis/Mylv/LvUebersicht.js index fddf97d38..dcab9acf5 100644 --- a/public/js/components/Cis/Mylv/LvUebersicht.js +++ b/public/js/components/Cis/Mylv/LvUebersicht.js @@ -11,6 +11,16 @@ export default { required:true, default:null, }, + studiensemester: { + type: String, + required: false, + default: null, + }, + titel: { + type: String, + required: false, + default: null, + }, // prop used to preselect a menu item and skip the grid overview preselectedMenu: { type: Object, @@ -39,7 +49,7 @@ export default { showModal: function(){ if (!this.preselectedMenu) { this.$api - .call(ApiAddons.getLvMenu(this.event.lehrveranstaltung_id, this.event.studiensemester_kurzbz)) + .call(ApiAddons.getLvMenu(this.event.lehrveranstaltung_id, (this.studiensemester ?? this.event.studiensemester_kurzbz))) .then(res => { if (res.data) { this.menu = res.data; @@ -53,14 +63,24 @@ export default { mounted(){ this.modal = this.$refs.modalContainer; }, + beforeUnmount(){ + this.$refs.modalContainer.hide(); + }, template:/*html*/` -