Erstversion Studienplan ansicht für Studierende

This commit is contained in:
Andreas Österreicher
2013-12-09 09:14:41 +00:00
parent 7fc9e3354d
commit f75645b6c3
9 changed files with 486 additions and 4 deletions
+312
View File
@@ -0,0 +1,312 @@
<?php
/*
* Copyright 2013 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 2 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*
*
* Authors: Andreas Österreicher <andreas.oesterreicher@technikum-wien.at>
*
* 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 '<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Studienplan</title>
<link rel="stylesheet" href="../../../skin/fhcomplete.css" />
<link rel="stylesheet" href="../../../skin/style.css.php" />
<style>
.empfehlung
{
background-color: #FFCECE;
}
</style>
</head>
<body>
';
$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 '<h1>'.$p->t('studienplan/studienplan').": $studienplan->bezeichnung ($studienplan_id) - $student->vorname $student->nachname</h1>";
echo '<table style="border: 1px solid black">
<thead>
<tr>
<th>'.$p->t('global/lehrveranstaltung').'</th>
<th>'.$p->t('studienplan/ects').'</th>
<th>'.$p->t('studienplan/status').'</th>';
foreach($stsem_arr as $stsem)
{
echo '<th>'.$stsem.'</th>';
}
echo '
</tr>
</thead>
<tbody>';
// 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 '<tr>';
echo '<td>';
// Einrückung für Subtree
for($i=0;$i<$depth;$i++)
echo '&nbsp;&nbsp;&nbsp;&nbsp;';
// Bezeichnung der Lehrveranstaltung
echo $row_tree->bezeichnung;
echo '</td>';
// ECTS Punkte
echo '<td>'.$row_tree->ects.'</td>';
// Status der LV (absolviert, offen)
echo '<td>';
// 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 '<span class="ok">'.$p->t('studienplan/abgeschlossen').'</span>';
else
echo '<span class="error">'.$p->t('studienplan/negativ').'</span>';
}
else
{
echo '<span>'.$p->t('studienplan/offen').'</span>';
}
echo '</td>';
// 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 '<td align="center" '.$empfehlung.'>';
// 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 '<span class="ok">'.$note_pruef_arr[$noten_arr[$row_tree->lehrveranstaltung_id][$stsem]]->anmerkung.'</span>';
else
echo '<span class="error">'.$note_pruef_arr[$noten_arr[$row_tree->lehrveranstaltung_id][$stsem]]->anmerkung.'</span>';
}
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 '<img src="../../../skin/images/lock.png" title="'.$p->t('studienplan/anmeldunggesperrt').'">';
}
else
{
if($lvregel->isZugangsberechtigt($uid, $row_tree->studienplan_lehrveranstaltung_id, $stsem))
{
echo '<a href="lv_anmeldung.php">'.$p->t('studienplan/anmelden').'</a>';
}
else
{
// LV wird angeboten, Regeln für Anmeldung nicht erfüllt
echo '<span title="'.$p->t('studienplan/regelnichterfuellt').'">X</span>';
}
}
}
else
{
// LV wird angeboten - Anmeldung aber noch nicht moeglich
echo '<span title="'.$anmeldeinformation.'">X</a>';
}
}
else
{
// LV wird in diesem Studiensemester nicht angeboten
echo '-';
}
}
echo '</td>';
}
echo '</tr>';
// Wenn Subtree vorhanden, dann anzeigen
if(isset($row_tree->childs))
drawTree($row_tree->childs, $depth+1);
}
}
echo '</table>';
echo '<br><br>'.$p->t('studienplan/legende').':<br>
<table>
<tr>
<td><span class="empfehlung">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></td>
<td>'.$p->t('studienplan/legendeEmpfehlung').'</td>
</tr>
<tr>
<td>X</td>
<td>'.$p->t('studienplan/legendeLVwirdAngeboten').'</td>
</tr>
<tr>
<td><img src="../../../skin/images/lock.png"></td>
<td>'.$p->t('studienplan/legendeLock').'</td>
</tr>
</table>
';
echo '</body>
</html>';
?>
+41 -1
View File
@@ -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
}
}
?>
?>
+46
View File
@@ -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;
}
}
?>
+34 -2
View File
@@ -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;
}
}
?>
+35
View File
@@ -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;
}
}
}
}
?>
+16
View File
@@ -0,0 +1,16 @@
<?php
$this->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';
?>
Binary file not shown.

After

Width:  |  Height:  |  Size: 992 B

+1
View File
@@ -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')
);
+1 -1
View File
@@ -178,7 +178,7 @@ echo '
<p>Klicken Sie auf eine Lehrveranstaltung um die Details anzuzeigen</p>
</div>
<div id="tab-regel">
<p>Klicken Sie auf eine Lehrveranstaltung um dei Regeln anzuzeigen</p>
<p>Klicken Sie auf eine Lehrveranstaltung um die Regeln anzuzeigen</p>
</div>
<div id="tab-kompatibel">
<p>Kompatibilität</p>