mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-01 20:29:29 +00:00
257 lines
11 KiB
PHP
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;
|
|
}
|
|
|
|
}
|
|
|