Files
FHC-Core/application/controllers/api/frontend/v1/Studium.php
T

257 lines
11 KiB
PHP

<?php
/**
* Copyright (C) 2024 fhcomplete.org
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
if (! defined('BASEPATH')) exit('No direct script access allowed');
class Studium extends FHCAPI_Controller
{
/**
* Object initialization
*/
public function __construct()
{
parent::__construct([
'getStudienAllSemester'=> self::PERM_LOGGED,
'getStudiengaengeForStudienSemester'=> self::PERM_LOGGED,
'getStudienplaeneBySemester'=> self::PERM_LOGGED,
]);
$this->load->model('crm/Student_model', 'StudentModel');
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$this->load->model('organisation/Studienordnung_model','StudienordnungModel');
$this->load->model('organisation/Studiensemester_model',"StudiensemesterModel");
$this->load->model('organisation/Studienplan_model', 'StudienplanModel');
$this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel');
$this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
$this->load->model('codex/Orgform_model','OrgformModel');
}
//------------------------------------------------------------------------------------------------------------------
// Public methods
public function getStudienAllSemester(){
$parameter_studiensemester = $this->input->get('studiensemester',true);
$parameter_studiengang = $this->input->get('studiengang',true);
$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])));
}
if(isset($parameter_studiengang)){
$parameter_studiengang = current($this->getDataOrTerminateWithError($this->StudiengangModel->loadWhere(["studiengang_kz" => $parameter_studiengang])));
}
if(isset($parameter_studienplan)){
$this->StudienplanModel->addJoin("lehre.tbl_studienordnung", "studienordnung_id");
$this->StudienplanModel->addJoin("lehre.tbl_studienplan_semester", "studienplan_id");
$parameter_studienplan = $this->StudienplanModel->loadWhere(["studienplan_id" => $parameter_studienplan, "aktiv" => TRUE]);
$parameter_studienplan = current($this->getDataOrTerminateWithError($parameter_studienplan));
}
// 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;
}
// fetch studiengaenge
$studiengaenge = $this->computeStudiengaenge($aktuelles_studiensemester->studiensemester_kurzbz);
$aktuelles_studiengang = current($studiengaenge);
if(!$aktuelles_studiengang){
$aktuelles_studiengang = null;
}
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;
}
// compute semester and studienplaene
if($aktuelles_studiengang){
$studienplaene = $this->computeStudienplaene($aktuelles_studiengang->studiengang_kz, $aktuelles_studiensemester->studiensemester_kurzbz);
}else{
$studienplaene =[];
}
$semester = array_values(array_unique(array_map(function($item){
return $item->semester;
}, $studienplaene)));
$aktuelles_semester = current($semester);
if(!$aktuelles_semester){
$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){
$aktuelles_studienplan = null;
}
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);
$aktuelles_lehrveranstaltungen = $lehrveranstaltungen;
}else{
$aktuelles_lehrveranstaltungen = [];
}
// result object
$result = new stdClass();
$result->studienSemester = [];
$result->studienSemester["all"]= $allStudienSemester;
$result->studienSemester["preselected"]=$aktuelles_studiensemester;
$result->studiengang["all"]=$studiengaenge;
$result->studiengang["preselected"]=$aktuelles_studiengang;
$result->semester["all"] =$semester;
$result->semester["preselected"] =$aktuelles_semester;
$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]);
$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());
//set the preselected semester
$preselectedSemester = $preselectedStudienplan->semester;
//get the studienordnung for the studienplan
$preselectedStudienordnung = $this->getStudienOrdnungForStudienplan($preselectedStudienplan->studienplan_id);
} */
$this->terminateWithSuccess($result);
}
public function getStudiengaengeForStudienSemester($studiensemester){
$studiengaenge = $this->computeStudiengaenge($studiensemester);
$this->terminateWithSuccess($studiengaenge);
}
public function getStudienplaeneBySemester(){
$this->load->library('form_validation');
$this->form_validation->set_data($this->input->get());
$this->form_validation->set_rules('studiengang', 'studiengang', 'required');
$this->form_validation->set_rules('studiensemester', 'studiensemester', 'required');
if($this->form_validation->run() == FALSE) $this->terminateWithValidationErrors($this->form_validation->error_array());
$studiengang = $this->input->get('studiengang',true);
$studiensemester = $this->input->get('studiensemester',true);
$studienplaene = $this->computeStudienplaene($studiengang, $studiensemester);
$this->terminateWithSuccess($studienplaene);
}
//------------------------------------------------------------------------------------------------------------------
// Private methods
private function computeStudienplaene($studiengang, $studiensemester){
$studienplaene = $this->StudienplanModel->getStudienplaeneBySemester($studiengang, $studiensemester);
$studienplaene = $this->getDataOrTerminateWithError($studienplaene);
$studienplaene = array_map(function($studienplan){
$orgform = current($this->getDataOrTerminateWithError($this->OrgformModel->loadWhere(["orgform_kurzbz" => $studienplan->orgform_kurzbz])));
$studienplan->orgform_bezeichnung = $orgform->bezeichnung;
return $studienplan;
},$studienplaene);
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"){
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);
return $studiengang_studiensemester_result;
}
private function getStudienPlanFromPrestudentStatus($person_id){
$studienplan_id = current($this->getDataOrTerminateWithError($this->PrestudentstatusModel->getLastStatusPerson($person_id)))->studienplan_id;
$studienplan =current($this->getDataOrTerminateWithError($this->StudienplanModel->loadWhere(["studienplan_id"=>$studienplan_id])));
return $studienplan;
}
}