diff --git a/cis/private/profile/studienplan.php b/cis/private/profile/studienplan.php new file mode 100644 index 000000000..bae271ea0 --- /dev/null +++ b/cis/private/profile/studienplan.php @@ -0,0 +1,312 @@ + + * + * Zeigt den Studienplan eines Studierenden an + * und bietet die Möglichkeit zur Anmeldung zu Lehrveranstaltungen. + * Dabei werden Regeln und Anmeldezeiträume der Lehrveranstaltungen berücksichtigt. + */ +require_once('../../../config/cis.config.inc.php'); +require_once('../../../include/functions.inc.php'); +require_once('../../../include/studienordnung.class.php'); +require_once('../../../include/studienplan.class.php'); +require_once('../../../include/lvregel.class.php'); +require_once('../../../include/studiensemester.class.php'); +require_once('../../../include/lehrveranstaltung.class.php'); +require_once('../../../include/prestudent.class.php'); +require_once('../../../include/zeugnisnote.class.php'); +require_once('../../../include/lvangebot.class.php'); +require_once('../../../include/datum.class.php'); +require_once('../../../include/phrasen.class.php'); +require_once('../../../include/note.class.php'); +require_once('../../../include/benutzerberechtigung.class.php'); + +echo ' + + + + Studienplan + + + + + +'; + +$uid = get_uid(); + +if(isset($_GET['uid'])) +{ + $rechte = new benutzerberechtigung(); + $rechte->getBerechtigungen($uid); + if($rechte->isBerechtigt('admin')) + $uid=$_GET['uid']; + else + die('Keine Berechtigung für UID übergabe'); +} +$p = new phrasen(getSprache()); + +$db = new basis_db(); +$datum_obj = new datum(); +// Student Laden +$student = new student(); +$student->load($uid); + +// ersten Status holen +$prestudent = new prestudent(); +$prestudent->getFirstStatus($student->prestudent_id, 'Student'); + +$studiensemester_start = $prestudent->studiensemester_kurzbz; +$ausbildungssemester_start = $prestudent->ausbildungssemester; +$orgform_kurzbz = $prestudent->orgform_kurzbz; + +$studienplan = new studienplan(); +$studienplan_id = $studienplan->getStudienplan($student->studiengang_kz, $studiensemester_start, $ausbildungssemester_start, $orgform_kurzbz); +$studienplan->loadStudienplan($studienplan_id); + +// Studienplan laden +$lehrveranstaltung = new lehrveranstaltung(); +$lehrveranstaltung->loadLehrveranstaltungStudienplan($studienplan_id); +$tree = $lehrveranstaltung->getLehrveranstaltungTree(); + + +// Angezeigte Studiensemester holen +$stsem = new studiensemester(); +$stsem_arr[0]=$studiensemester_start; +$studiensemester_prev=$studiensemester_start; +for($i=1;$i<=$studienplan->regelstudiendauer;$i++) +{ + $stsem_arr[$i]=$stsem->getNextFrom($studiensemester_prev); + $studiensemester_prev=$stsem_arr[$i]; +} + +// Noten des Studierenden holen +$noten_arr=array(); +$zeugnisnote = new zeugnisnote(); +if($zeugnisnote->getZeugnisnoten('',$uid,'')) +{ + foreach($zeugnisnote->result as $row_note) + { + if($row_note->note!='') + $noten_arr[$row_note->lehrveranstaltung_id][$row_note->studiensemester_kurzbz]=$row_note->note; + } +} + +$note_pruef_arr = array(); +$note = new note(); +$note->getAll(); +foreach($note->result as $row_note) + $note_pruef_arr[$row_note->note]=$row_note; + +// LV Angebot holen +$lvangebot_arr = array(); +$lvangebot = new lvangebot(); +$lvangebot->getLVAngebotFromStudienplan($studienplan_id, $stsem_arr); +foreach($lvangebot->result as $row_lvangebot) + $lvangebot_arr[$row_lvangebot->lehrveranstaltung_id][$row_lvangebot->studiensemester_kurzbz]=$row_lvangebot; + +// LVs des Studienplans laden +$lv_arr = array(); +$lv = new lehrveranstaltung(); +$lv->loadLehrveranstaltungStudienplan($studienplan_id); +foreach($lv->lehrveranstaltungen as $row_lva) + $lv_arr[$row_lva->lehrveranstaltung_id]=$row_lva; + +echo '

'.$p->t('studienplan/studienplan').": $studienplan->bezeichnung ($studienplan_id) - $student->vorname $student->nachname

"; + +echo ' + + + + + '; + +foreach($stsem_arr as $stsem) +{ + echo ''; +} +echo ' + + + '; + +// Lehrveranstaltungen anzeigen +drawTree($tree,0); + +function drawTree($tree, $depth) +{ + global $uid, $stsem_arr, $noten_arr, $lvangebot_arr; + global $datum_obj, $db, $lv_arr, $p, $note_pruef_arr; + + foreach($tree as $row_tree) + { + echo ''; + echo ''; + + // ECTS Punkte + echo ''; + + // Status der LV (absolviert, offen) + echo ''; + + // Spalten für die einzelnen Studiensemester + foreach($stsem_arr as $key=>$stsem) + { + $semester=$key+1; + + $empfehlung=""; + //Empfehlung holen + if(isset($lv_arr[$row_tree->lehrveranstaltung_id])) + { + $empfohlenesSemester = $lv_arr[$row_tree->lehrveranstaltung_id]->semester; + if($semester==$empfohlenesSemester) + $empfehlung='class="empfehlung"'; + } + + echo ''; + } + echo ''; + + // Wenn Subtree vorhanden, dann anzeigen + if(isset($row_tree->childs)) + drawTree($row_tree->childs, $depth+1); + } +} +echo '
'.$p->t('global/lehrveranstaltung').''.$p->t('studienplan/ects').''.$p->t('studienplan/status').''.$stsem.'
'; + + // Einrückung für Subtree + for($i=0;$i<$depth;$i++) + echo '    '; + + // Bezeichnung der Lehrveranstaltung + echo $row_tree->bezeichnung; + echo ''.$row_tree->ects.''; + + // Note zu dieser LV vorhanden? + if(isset($noten_arr[$row_tree->lehrveranstaltung_id])) + { + // Positive Note fuer diese LV vorhanden? + $positiv=false; + foreach($noten_arr[$row_tree->lehrveranstaltung_id] as $note) + { + if($note_pruef_arr[$note]->positiv) + $positiv=true; + } + if($positiv) + echo ''.$p->t('studienplan/abgeschlossen').''; + else + echo ''.$p->t('studienplan/negativ').''; + } + else + { + echo ''.$p->t('studienplan/offen').''; + } + echo ''; + + + // Ist bereits eine Note für diese LV in diesem Stsem vorhanden? + if(isset($noten_arr[$row_tree->lehrveranstaltung_id][$stsem])) + { + if($note_pruef_arr[$noten_arr[$row_tree->lehrveranstaltung_id][$stsem]]->positiv) + echo ''.$note_pruef_arr[$noten_arr[$row_tree->lehrveranstaltung_id][$stsem]]->anmerkung.''; + else + echo ''.$note_pruef_arr[$noten_arr[$row_tree->lehrveranstaltung_id][$stsem]]->anmerkung.''; + } + else + { + // Angebot der LV pruefen + if(isset($lvangebot_arr[$row_tree->lehrveranstaltung_id]) + && isset($lvangebot_arr[$row_tree->lehrveranstaltung_id][$stsem])) + { + // LV findet statt + $angebot = $lvangebot_arr[$row_tree->lehrveranstaltung_id][$stsem]; + + // Pruefen ob eine Anmeldung möglich ist + $anmeldungmoeglich=true; + + // Anmelde Zeitfenster pruefen + if(!$datum_obj->between($angebot->anmeldefenster_start, $angebot->anmeldefenster_ende, date('Y-m-d H:i:s'))) + { + $anmeldeinformation=$p->t('studienplan/anmeldungvonbis',array($datum_obj->formatDatum($angebot->anmeldefenster_start,'d.m.Y H:i'),$datum_obj->formatDatum($angebot->anmeldefenster_ende,'d.m.Y H:i'))); + $anmeldungmoeglich=false; + } + + if($anmeldungmoeglich) + { + // Regeln Pruefen + $lvregel = new lvregel(); + + // Pruefen ob Semestersperre vorhanden ist + if(!$lvregel->checkSemester($row_tree->studienplan_lehrveranstaltung_id, $semester)) + { + echo ''; + } + else + { + if($lvregel->isZugangsberechtigt($uid, $row_tree->studienplan_lehrveranstaltung_id, $stsem)) + { + echo ''.$p->t('studienplan/anmelden').''; + } + else + { + // LV wird angeboten, Regeln für Anmeldung nicht erfüllt + echo 'X'; + } + } + } + else + { + // LV wird angeboten - Anmeldung aber noch nicht moeglich + echo 'X'; + } + } + else + { + // LV wird in diesem Studiensemester nicht angeboten + echo '-'; + } + } + echo '
'; +echo '

'.$p->t('studienplan/legende').':
+ + + + + + + + + + + + + +
      '.$p->t('studienplan/legendeEmpfehlung').'
X'.$p->t('studienplan/legendeLVwirdAngeboten').'
'.$p->t('studienplan/legendeLock').'
+'; + +echo ' +'; +?> diff --git a/include/datum.class.php b/include/datum.class.php index e04535c8d..b288ecb96 100644 --- a/include/datum.class.php +++ b/include/datum.class.php @@ -160,7 +160,47 @@ class datum return false; } + public function DateDiff($datum1, $datum2) + { + $datetime1 = new DateTime($datum1); + $datetime2 = new DateTime($datum2); + $interval = $datetime1->diff($datetime2); + return $interval->format('%R%d'); + } + /** + * Prueft ob ein Datum / Datum und Uhrzeit zwischen 2 anderen liegt + * Unterstuetzt auch offenes (leeres) Start und Ende Datum + * + * @param $start Startdatum + * @param $ende Endedatum + * @param $datum Datum das geprueft wird + * @return true wenn dazwischen sonst false + */ + public function between($start, $ende, $datum) + { + $datestart = new DateTime($start); + $dateende = new DateTime($ende); + $dateref = new DateTime($datum); + + // Start und Ende nicht gesetzt + if($start=='' && $ende=='') + return true; + + // Start nicht gesetzt; Ende gesetzt + if($start=='' && $ende!='' && $dateende>=$dateref) + return true; + + // Ende nicht gesetzt; Start gesetzt + if($ende=='' && $start!='' && $datestart<=$dateref) + return true; + + // Start und Ende gesetzt + if($ende!='' && $start!='' && $datestart<=$dateref && $dateende>=$dateref) + return true; + + return false; + } #------------------------------------------------------------------------------------------------ /** @@ -277,4 +317,4 @@ class datum } } -?> \ No newline at end of file +?> diff --git a/include/lvangebot.class.php b/include/lvangebot.class.php index 041d3a580..13c59020f 100644 --- a/include/lvangebot.class.php +++ b/include/lvangebot.class.php @@ -328,5 +328,51 @@ class lvangebot extends basis_db return false; } } + + /** + * Laedt das LV-Angebot eines gesammten Studienplanes + * @param $studienplan_id ID des Studienplanes + */ + public function getLVAngebotFromStudienplan($studienplan_id, $studiensemester_arr=null) + { + $qry = "SELECT + * + FROM + lehre.tbl_studienplan_lehrveranstaltung + JOIN lehre.tbl_lvangebot USING(lehrveranstaltung_id) + WHERE + tbl_studienplan_lehrveranstaltung.studienplan_id=".$this->db_add_param($studienplan_id); + + if(!is_null($studiensemester_arr)) + $qry.=" AND tbl_lvangebot.studiensemester_kurzbz IN(".$this->implode4SQL($studiensemester_arr).")"; + + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $lvangebot=new lvangebot(); + $lvangebot->lvangebot_id=$row->lvangebot_id; + $lvangebot->lehrveranstaltung_id=$row->lehrveranstaltung_id; + $lvangebot->studiensemester_kurzbz=$row->studiensemester_kurzbz; + $lvangebot->gruppe_kurzbz=$row->gruppe_kurzbz; + $lvangebot->incomingplaetze=$row->incomingplaetze; + $lvangebot->gesamtplaetze=$row->gesamtplaetze; + $lvangebot->anmeldefenster_start=$row->anmeldefenster_start; + $lvangebot->anmeldefenster_ende=$row->anmeldefenster_ende; + $lvangebot->insertamum=$row->insertamum; + $lvangebot->insertvon=$row->insertvon; + $lvangebot->updatenamum=$row->updateamum; + $lvangebot->updatevon=$row->updatevon; + + $this->result[]=$lvangebot; + } + } + else + { + $this->errormsg = 'Datensätze konnten nicht geladen werden'; + return false; + } + return true; + } } ?> diff --git a/include/lvregel.class.php b/include/lvregel.class.php index 424da7778..b5b4d9198 100644 --- a/include/lvregel.class.php +++ b/include/lvregel.class.php @@ -483,6 +483,7 @@ class lvregel extends basis_db { return $this->TestRegeln($uid, $result, $studiensemester_kurzbz); } + return true; } /** @@ -572,7 +573,7 @@ class lvregel extends basis_db $prestudent = new prestudent(); if($prestudent->getLastStatus($student->prestudent_id, $studiensemester_kurzbz)) { - $this->cache[$uid][$studiensemester_kurzbz]=$prestudent->semester; + $this->cache[$uid][$studiensemester_kurzbz]=$prestudent->ausbildungssemester; } } $ausbildungssemester = $this->cache[$uid][$studiensemester_kurzbz]; @@ -645,9 +646,40 @@ class lvregel extends basis_db return $retval; } + /** + * Prueft ob eine minimale Semesteranforderung für diese Lehrveranstaltungszuordnung benötigt wird + * @param $studienplan_lehrveranstaltung_id + * @param $semester + * @return boolean + */ + public function checkSemester($studienplan_lehrveranstaltung_id, $semester) + { + $qry = "SELECT + 1 + FROM + lehre.tbl_lvregel + WHERE + studienplan_lehrveranstaltung_id=".$this->db_add_param($studienplan_lehrveranstaltung_id)." + AND lvregeltyp_kurzbz='ausbsemmin' + AND parameter::integer>".$this->db_add_param($semester, FHC_INTEGER); + + if($result = $this->db_query($qry)) + { + if($this->db_num_rows($result)>0) + return false; + else + return true; + } + else + { + $this->errormsg='Fehler beim Laden der Daten'; + return false; + } + } + public function debug($msg) { - echo ' '.$msg; + //echo ' '.$msg; } } ?> diff --git a/include/studienplan.class.php b/include/studienplan.class.php index fc414e8a6..f1c8e3fac 100644 --- a/include/studienplan.class.php +++ b/include/studienplan.class.php @@ -645,5 +645,40 @@ class studienplan extends basis_db return false; } } + + /** + * Holt den aktiven Studienplan eines Studiensemester / Ausbildungssemesters + * @param studiensemester_kurzbz + * @param $ausbuldungssemester + * @param $orgform_kurzbz + */ + function getStudienplan($studiengang_kz, $studiensemester_kurzbz, $ausbildungssemester, $orgform_kurzbz) + { + $qry = "SELECT + tbl_studienplan.studienplan_id + FROM + lehre.tbl_studienplan + JOIN lehre.tbl_studienordnung USING(studienordnung_id) + JOIN lehre.tbl_studienordnung_semester USING(studienordnung_id) + WHERE + tbl_studienplan.aktiv + AND tbl_studienordnung.studiengang_kz=".$this->db_add_param($studiengang_kz, FHC_INTEGER)." + AND tbl_studienordnung_semester.studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." + AND tbl_studienordnung_semester.semester=".$this->db_add_param($ausbildungssemester); + + if($orgform_kurzbz!='') + { + $qry.=" AND orgform_kurzbz=".$this->db_add_param($orgform_kurzbz); + } + + if($result = $this->db_query($qry)) + { + if($row = $this->db_fetch_object($result)) + { + return $row->studienplan_id; + } + } + } + } ?> diff --git a/locale/de-AT/studienplan.php b/locale/de-AT/studienplan.php new file mode 100644 index 000000000..7d48b1205 --- /dev/null +++ b/locale/de-AT/studienplan.php @@ -0,0 +1,16 @@ +phrasen['studienplan/studienplan']='Studienplan'; +$this->phrasen['studienplan/ects']='ECTS'; +$this->phrasen['studienplan/status']='Status'; +$this->phrasen['studienplan/offen']='offen'; +$this->phrasen['studienplan/abgeschlossen']='abgeschlossen'; +$this->phrasen['studienplan/negativ']='negativ'; +$this->phrasen['studienplan/anmelden']='anmelden'; +$this->phrasen['studienplan/anmeldungvonbis']='Die Anmeldung ist nur von %s bis %s möglich'; +$this->phrasen['studienplan/regelnichterfuellt']='Lehrveranstaltung wird angeboten. Regeln für die Anmeldung sind (noch) nicht erfüllt'; +$this->phrasen['studienplan/anmeldunggesperrt']='Anmeldung gesperrt für dieses Semester'; +$this->phrasen['studienplan/legende']='Legende'; +$this->phrasen['studienplan/legendeLVwirdAngeboten']='Lehrveranstaltung wird in diesem Semester angeboten'; +$this->phrasen['studienplan/legendeLock']='Lehrveranstaltung für dieses Semester gesperrt'; +$this->phrasen['studienplan/legendeEmpfehlung']='Empfehlung'; +?> diff --git a/skin/images/lock.png b/skin/images/lock.png new file mode 100644 index 000000000..8886cfd47 Binary files /dev/null and b/skin/images/lock.png differ diff --git a/system/checksystem.php b/system/checksystem.php index da868c1dd..218cbc0cf 100644 --- a/system/checksystem.php +++ b/system/checksystem.php @@ -1061,6 +1061,7 @@ $webservicerecht = array( array('soap/studienordnung','save','studienordnung'), array('soap/studienordnung','loadStudienplanSTO','studienplan'), array('soap/studienordnung','loadStudienordnungSTG','studienordnung'), + array('soap/studienordnung','loadStudienplan','studienplan') array('soap/studienordnung','saveSemesterZuordnung','studienordnung'), array('soap/studienordnung','deleteSemesterZuordnung','studienordnung') ); diff --git a/vilesci/lehre/studienordnung.php b/vilesci/lehre/studienordnung.php index 5bb850003..8e1bff38e 100644 --- a/vilesci/lehre/studienordnung.php +++ b/vilesci/lehre/studienordnung.php @@ -178,7 +178,7 @@ echo '

Klicken Sie auf eine Lehrveranstaltung um die Details anzuzeigen

-

Klicken Sie auf eine Lehrveranstaltung um dei Regeln anzuzeigen

+

Klicken Sie auf eine Lehrveranstaltung um die Regeln anzuzeigen

Kompatibilität