diff --git a/application/controllers/api/frontend/v1/Studium.php b/application/controllers/api/frontend/v1/Studium.php index 7541a823b..be2e79800 100644 --- a/application/controllers/api/frontend/v1/Studium.php +++ b/application/controllers/api/frontend/v1/Studium.php @@ -17,6 +17,9 @@ */ if (! defined('BASEPATH')) exit('No direct script access allowed'); + +use CI3_Events as Events; + class Studium extends FHCAPI_Controller { @@ -29,6 +32,7 @@ class Studium extends FHCAPI_Controller 'getStudienAllSemester'=> self::PERM_LOGGED, 'getStudiengaengeForStudienSemester'=> self::PERM_LOGGED, 'getStudienplaeneBySemester'=> self::PERM_LOGGED, + 'getLvEvaluierungInfo'=> self::PERM_LOGGED, ]); $this->load->model('crm/Student_model', 'StudentModel'); @@ -39,6 +43,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,10 +58,26 @@ 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; + $aktuelles_studiensemester = current($this->getDataOrTerminateWithError($this->StudiensemesterModel->getAkt())); + + if($this->getDataOrTerminateWithError($this->StudentModel->isStudent(getAuthUID()))){ + $studentLehrverband =$this->StudentlehrverbandModel->loadWhere(["student_uid" => getAuthUID(), "studiensemester_kurzbz" => $aktuelles_studiensemester->studiensemester_kurzbz]); + $studentLehrverband = current($this->getDataOrTerminateWithError($studentLehrverband)); + + $student_studiensemester = $studentLehrverband->studiensemester_kurzbz; + $student_studiengang = $studentLehrverband->studiengang_kz; + $student_semester = $studentLehrverband->semester; + $student_studienplan = $this->getStudienPlanFromPrestudentStatus(getAuthPersonId())->studienplan_id; + + if(!isset($parameter_studiensemester)) + $parameter_studiensemester = $student_studiensemester; + if(!isset($parameter_studiengang)) + $parameter_studiengang = $student_studiengang; + if(!isset($parameter_semester)) + $parameter_semester = $student_semester; + if(!isset($parameter_studienplan)) + $parameter_studienplan = $student_studienplan; + } if(isset($parameter_studiensemester)){ $parameter_studiensemester = current($this->getDataOrTerminateWithError($this->StudiensemesterModel->loadWhere(["studiensemester_kurzbz" => $parameter_studiensemester]))); @@ -76,11 +97,10 @@ class Studium extends FHCAPI_Controller // fetch studiensemester $allStudienSemester = $this->getDataOrTerminateWithError($this->StudiensemesterModel->load()); - $aktuelles_studiensemester = current($this->getDataOrTerminateWithError($this->StudiensemesterModel->getAkt())); + 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 +113,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 +131,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,10 +146,24 @@ 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 = []; + } + // result object $result = new stdClass(); $result->studienSemester = []; @@ -142,30 +174,18 @@ class Studium extends FHCAPI_Controller $result->semester["all"] =$semester; $result->semester["preselected"] =$aktuelles_semester; $result->studienplan["all"]=$semester_studienplan; - $result->studienplan["preselected"]=$aktuelles_studienplan; - $result->test1=$test1; - $result->test2=$test2; - $result->test3=$test3; - $result->test4=$test4; + $result->studienplan["preselected"]=$aktuelles_studienplan; + $result->lehrveranstaltungen=$aktuelles_lehrveranstaltungen; - /* if($this->getDataOrTerminateWithError($this->StudentModel->isStudent(getAuthUID()))){ - $studentLehrverband =$this->StudentlehrverbandModel->loadWhere(["student_uid" => getAuthUID(), "studiensemester_kurzbz" => $aktuelles_studiensemester_kz]); - $studentLehrverband = current($this->getDataOrTerminateWithError($studentLehrverband)); - $result->studentLehrverband = $studentLehrverband; - //$currentStudienplan = $this->StudienplanModel->loadWhere(["studiengang_kz"=>$studentLehrverband->studiengang_kz,"semester"=>$studentLehrverband->semester, "verband"=>$studentLehrverband->verband, "gruppe"=>$studentLehrverband->gruppe]); - $studienplaene = $this->getDataOrTerminateWithError($this->computeStudienplaene($studentLehrverband->studiengang_kz, $studentLehrverband->studiensemester_kurzbz)); - $result->studienPleane = $studienplaene; - - //get the studienplan for the user - $preselectedStudienplan = $this->getStudienPlanFromPrestudentStatus(getAuthPersonId()); + + $this->terminateWithSuccess($result); + } - //set the preselected semester - $preselectedSemester = $preselectedStudienplan->semester; - - //get the studienordnung for the studienplan - $preselectedStudienordnung = $this->getStudienOrdnungForStudienplan($preselectedStudienplan->studienplan_id); - - } */ + public function getLvEvaluierungInfo($studiensemester_kurzbz, $lehrveranstaltung_id){ + $result = []; + Events::trigger('lvEvaluierungsInfo', function & () use (&$result) { + return $result; + },$lehrveranstaltung_id, $studiensemester_kurzbz); $this->terminateWithSuccess($result); } @@ -201,6 +221,37 @@ class Studium extends FHCAPI_Controller return $studienplaene; } + private function computeStudienplanLehrveranstaltungen($studienplan_id, $semester){ + $lehrveranstaltungen = $this->StudienplanModel->getStudienplanLehrveranstaltung($studienplan_id, $semester); + $lehrveranstaltungen = $this->getDataOrTerminateWithError($lehrveranstaltungen); + usort($lehrveranstaltungen, function($a, $b){ + if($a->lehrtyp_kurzbz == "modul"){ + return -1; + } + else if($b->lehrtyp_kurzbz == "modul"){ + return 1; + } + return 0; + }); + $lehrveranstaltungen= array_reduce($lehrveranstaltungen,function($carry, $lehrv){ + if($lehrv->lehrtyp_kurzbz == "modul"){ + $lehrv->lehrveranstaltungen = []; + array_push($carry, $lehrv); + } + else{ + $parent =array_filter($carry, function($item)use($lehrv){ + return $item->studienplan_lehrveranstaltung_id == $lehrv->studienplan_lehrveranstaltung_id_parent; + }); + $parent = current($parent); + if($parent){ + $parent->lehrveranstaltungen[] = $lehrv; + } + } + return $carry; + }, []); + return $lehrveranstaltungen; + } + private function computeStudiengaenge($studiensemester){ $studiengang_studiensemester_result = $this->StudiengangModel->getStudiengaengeByStudiensemester($studiensemester); $studiengang_studiensemester_result = $this->getDataOrTerminateWithError($studiengang_studiensemester_result); @@ -212,6 +263,21 @@ 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/controllers/api/frontend/v1/Stundenplan.php b/application/controllers/api/frontend/v1/Stundenplan.php index 61a9e8f54..11a8a7034 100644 --- a/application/controllers/api/frontend/v1/Stundenplan.php +++ b/application/controllers/api/frontend/v1/Stundenplan.php @@ -36,6 +36,7 @@ class Stundenplan extends FHCAPI_Controller 'StundenplanEvents' => self::PERM_LOGGED, 'getLehreinheitStudiensemester' => self::PERM_LOGGED, 'studiensemesterDateInterval' => self::PERM_LOGGED, + 'getLvStundenplanForStudiensemester' => self::PERM_LOGGED, ]); $this->load->library('LogLib'); @@ -85,11 +86,6 @@ class Stundenplan extends FHCAPI_Controller { $stundenplan_events = array(); } - else - { - $stundenplan_events = $this->getDataOrTerminateWithError($stundenplan_events); - } - // fetching moodle events $moodle_events = []; Events::trigger( @@ -126,6 +122,19 @@ class Stundenplan extends FHCAPI_Controller $studiensemester =current($this->getDataOrTerminateWithError($studiensemester)); $this->terminateWithSuccess($studiensemester); } + + public function getLvStundenplanForStudiensemester($studiensemester,$lvid){ + $this->load->library('StundenplanLib'); + $this->load->model('organisation/Studiensemester_model','StudiensemesterModel'); + + $studiensemester_result = $this->StudiensemesterModel->loadWhere(["studiensemester_kurzbz"=>$studiensemester]); + $studiensemester_result = current($this->getDataOrTerminateWithError($studiensemester_result)); + $timespan_start = new DateTime($studiensemester_result->start); + $timespan_ende = new DateTime($studiensemester_result->ende); + $stundenplan = $this->stundenplanlib->getStundenplan(date_format($timespan_start, 'Y-m-d'),date_format($timespan_ende, 'Y-m-d'), $lvid); + $this->terminateWithSuccess($stundenplan); + + } /** 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 500292e19..ea96f5c9a 100644 --- a/public/css/Cis4/Cis.css +++ b/public/css/Cis4/Cis.css @@ -178,6 +178,25 @@ html { color:var(--fhc-light); } +/* 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..92bb58698 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} @@ -30,4 +29,19 @@ export default { } ); }, + getLvStundenplanForStudiensemester: function (studiensemester, lvid) { + return this.$fhcApi.get( + `/api/frontend/v1/Stundenplan/getLvStundenplanForStudiensemester/${studiensemester}/${lvid}`, + { + } + ); + }, + getLvEvaluierungInfo: function (studiensemester_kurzbz, lvid) { + return this.$fhcApi.get( + `/api/frontend/v1/Studium/getLvEvaluierungInfo/${studiensemester_kurzbz}/${lvid}`, + { + } + ); + }, + } \ No newline at end of file diff --git a/public/js/components/Cis/Mylv/LvInfo.js b/public/js/components/Cis/Mylv/LvInfo.js index 01e64ce25..7120c5821 100644 --- a/public/js/components/Cis/Mylv/LvInfo.js +++ b/public/js/components/Cis/Mylv/LvInfo.js @@ -58,13 +58,13 @@ export default {
| {{ $p.t('global','datum')? $p.t('global','datum')+':' :'' }} | -{{methodFormatDate(event.datum)}} | +{{methodFormatDate(event?.datum)}} |
|---|---|---|
| {{$p.t('global','aktivitaet')}}: | @@ -100,7 +100,7 @@ export default { -||
{{
$p.t('global','datum')?
$p.t('global','datum')+':'
diff --git a/public/js/components/Cis/Mylv/LvMenu.js b/public/js/components/Cis/Mylv/LvMenu.js
index d554b0e95..e7a96f6d8 100644
--- a/public/js/components/Cis/Mylv/LvMenu.js
+++ b/public/js/components/Cis/Mylv/LvMenu.js
@@ -7,6 +7,11 @@ export default {
},
containerStyles: Array,
rowStyles: Array,
+ hasLvStundenplanEintraege: {
+ required:false,
+ default:true,
+ type:Boolean,
+ },
},
data(){
return{
@@ -18,6 +23,9 @@ export default {
if (!this.c4_link(menuItem) && !menuItem.c4_moodle_links?.length) {
return true;
}
+ if (menuItem.id == "addon_fhtw_menu_lvplan_lva" && !this.hasLvStundenplanEintraege){
+ return true;
+ }
return null;
},
c4_target: function (menuItem) {
diff --git a/public/js/components/Cis/Mylv/LvModal.js b/public/js/components/Cis/Mylv/LvModal.js
index 19c444a21..435caa97c 100644
--- a/public/js/components/Cis/Mylv/LvModal.js
+++ b/public/js/components/Cis/Mylv/LvModal.js
@@ -51,7 +51,7 @@ export default {
if (this.event.type == 'lehreinheit') {
this.$api
- .call(ApiStundenplan.getLehreinheitStudiensemester(this.event.lehreinheit_id[0]))
+ .call(ApiStundenplan.getLehreinheitStudiensemester(Array.isArray(this.event.lehreinheit_id) ? this.event.lehreinheit_id[0] : this.event.lehreinheit_id))
.then(res => res.data)
.then(studiensemester_kurzbz => this.$api.call(
ApiAddons.getLvMenu(
diff --git a/public/js/components/Cis/Mylv/LvUebersicht.js b/public/js/components/Cis/Mylv/LvUebersicht.js
index fddf97d38..e5162730c 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,
@@ -23,7 +33,8 @@ export default {
result: false,
menu: [],
isMenuSelected:false,
-
+ hasLvStundenplanEintraege: true,
+ lvEvaluierungMessage: "",
}
},
mixins:[BsModal],
@@ -31,6 +42,7 @@ export default {
BsModal,
LvMenu,
},
+ inject: ["studium_studiensemester"],
methods:{
hiddenModal: function(){
@@ -39,7 +51,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;
@@ -48,20 +60,54 @@ export default {
} else {
this.isMenuSelected = true;
}
+
+ // check lv evaluierung info
+ if (this.studium_studiensemester) {
+ this.$fhcApi.factory.studium.getLvEvaluierungInfo(this.studium_studiensemester, this.event.lehreinheit_id ?? this.event.lehrveranstaltung_id)
+ .then(data => data.data)
+ .then(res => {
+ this.lvEvaluierungMessage = res.message;
+ })
+ }
+
+ // check if the lv has stundenplan entries for this studiensemester
+ if (this.studiensemester && this.event) {
+ return this.$fhcApi.factory.studium.getLvStundenplanForStudiensemester(this.studiensemester, this.event.lehreinheit_id ?? this.event.lehrveranstaltung_id)
+ .then(data => data.data)
+ .then(res => {
+ if (Array.isArray(res) && res.length > 0) {
+ this.hasLvStundenplanEintraege = true;
+ } else {
+ this.hasLvStundenplanEintraege = false;
+ }
+ });
+ }
+
},
},
- mounted(){
+ mounted(){
this.modal = this.$refs.modalContainer;
},
+ beforeUnmount(){
+ this.$refs.modalContainer.hide();
+ },
template:/*html*/`
this is a test titel-
-
-
-
+
+ Studium++
+
+ Lektoren:+ {{lektor.name}} +Menu:+ +
+
-
+
+
+ Studiensemester:+
+
+
+
+
+
+
+
+ Studiengang:+
+
+
+
+
+
+
+
+ Semester:+
+
+
+
+
+
+
Studienordnung:+
+
+
+
+
+
-
-
-
+ + +
+
+
-
+
+
+
+ {{lehrveranstaltung.bezeichnung}}+{{lehrveranstaltung.lehrform_kurzbz}}+
+
+
-
-
-
-
-
-
-
-
`
|