Files
FHC-Core/cis/private/lehre/pruefung/pruefungsanmeldung.json.php
T
ma0048 e2147c8f1f regeln von kompatiblen lvs wird geprueft
zusammen legen von pruefungsterminen ermoeglicht
2025-08-27 08:40:57 +02:00

1755 lines
50 KiB
PHP

<?php
header( 'Expires: -1' );
header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
header( 'Cache-Control: no-store, no-cache, must-revalidate' );
header( 'Pragma: no-cache' );
header('Content-Type: text/html;charset=UTF-8');
require_once('../../../../config/cis.config.inc.php');
require_once('../../../../config/global.config.inc.php');
require_once('../../../../include/functions.inc.php');
require_once('../../../../include/pruefungCis.class.php');
require_once('../../../../include/lehrveranstaltung.class.php');
require_once('../../../../include/benutzerberechtigung.class.php');
require_once('../../../../include/pruefungsanmeldung.class.php');
require_once('../../../../include/pruefungstermin.class.php');
require_once('../../../../include/datum.class.php');
require_once('../../../../include/konto.class.php');
require_once('../../../../include/student.class.php');
require_once('../../../../include/studiensemester.class.php');
require_once('../../../../include/lehreinheit.class.php');
require_once('../../../../include/studiengang.class.php');
require_once('../../../../include/ort.class.php');
require_once('../../../../include/stunde.class.php');
require_once('../../../../include/reservierung.class.php');
require_once('../../../../include/mitarbeiter.class.php');
require_once('../../../../include/pruefung.class.php');
require_once('../../../../include/pruefungsfenster.class.php');
require_once('../../../../include/note.class.php');
require_once('../../../../include/addon.class.php');
require_once('../../../../include/mail.class.php');
require_once('../../../../include/anrechnung.class.php');
require_once('../../../../include/prestudent.class.php');
require_once('../../../../include/person.class.php');
require_once('../../../../include/phrasen.class.php');
require_once('../../../../include/globals.inc.php');
require_once('../../../../include/sprache.class.php');
$sprache = getSprache();
$lang = new sprache();
$lang->load($sprache);
$p = new phrasen($sprache);
$uid = get_uid();
$rechte = new benutzerberechtigung();
$rechte->getBerechtigungen($uid);
$studiensemester = new studiensemester();
$aktStudiensemester = $studiensemester->getaktorNext();
$method = isset($_REQUEST['method'])?$_REQUEST['method']:'';
switch($method)
{
case 'getPruefungByLv':
$studiensemester = isset($_REQUEST['studiensemester']) && $_REQUEST['studiensemester'] != '0' ? $_REQUEST['studiensemester'] : NULL;
$data = getPruefungByLv($studiensemester, $uid);
break;
case 'getPruefungByLvFromStudiengang':
$studiensemester = isset($_REQUEST['studiensemester']) ? $_REQUEST['studiensemester'] : NULL;
$data = getPruefungByLvFromStudiengang($studiensemester, $uid);
break;
case 'loadPruefung':
$data = loadPruefung();
break;
case 'loadTermine':
$data = loadTermine();
break;
case 'saveAnmeldung':
$student_uid = filter_input(INPUT_POST,"uid");
if($student_uid !== "" && !is_null($student_uid))
{
$uid = $student_uid;
}
if($student_uid === "")
{
$data['result']="";
$data['error']='true';
$data['errormsg']='Studenten UID fehlt.';
break;
}
$data = saveAnmeldung($aktStudiensemester, $uid);
break;
case 'getAllPruefungen':
$data = getAllPruefungen($aktStudiensemester, $uid);
break;
case 'stornoAnmeldung':
$data = stornoAnmeldung($uid);
break;
case 'getAnmeldungenTermin':
$data = getAnmeldungenTermin();
break;
case 'saveReihung':
$data = saveReihung();
break;
case 'anmeldungBestaetigen':
$data = anmeldungBestaetigen($uid);
break;
case 'anmeldungLoeschen':
$data = anmeldungLoeschen();
break;
case 'alleBestaetigen':
$data = alleBestaetigen($uid);
break;
case 'getStudiengaenge':
$data = getStudiengaenge();
break;
case 'getPruefungenStudiensemester':
$studiensemester = filter_input(INPUT_POST,"studiensemester");
$data = getPruefungenStudiengangBySemester($studiensemester);
break;
case 'terminezusammenlegen':
$termine = filter_input(INPUT_POST, 'termine', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
$lv_id = filter_input(INPUT_POST, 'lv_id');
$data = terminezusammenlegen($termine, $lv_id);
break;
case 'saveKommentar':
$data = saveKommentar();
break;
case 'getAllFreieRaeume':
$terminId = $_REQUEST["terminId"];
$data = getAllFreieRaeume($terminId);
break;
case 'saveRaum':
$terminId = $_REQUEST["terminId"];
$ort_kurzbz = $_REQUEST["ort_kurzbz"];
$anderer_raum = $_REQUEST["anderer_raum"];
$data = saveRaum($terminId, $ort_kurzbz, $uid, $anderer_raum);
break;
case 'getLvKompatibel':
$lvid = filter_input(INPUT_POST, "lehrveranstaltung_id");
$data = getLvKompatibel($lvid, $uid);
break;
case 'getPrestudenten':
$data = getPrestudenten($uid, $aktStudiensemester);
break;
default:
$data['error']='true';
$data['errormsg']="unknown method: ".$method;
break;
}
echo json_encode($data);
//Funktionen
/**
* Lädt alle Prüfungen eines Studenten zu deren LVs er angemeldet ist
* @param string $aktStudiensemester kurzbz des aktuellen Studiensemester (kann auch eine älteres sein)
* @param string $uid UID des Studenten
* @return Array
*/
function getPruefungByLv($aktStudiensemester = null, $uid = null)
{
$lehrveranstaltungen = new lehrveranstaltung();
$lehrveranstaltungen->load_lva_student($uid, $aktStudiensemester);
$lvIds = array();
foreach($lehrveranstaltungen->lehrveranstaltungen as $lvs)
{
array_push($lvIds, $lvs->lehrveranstaltung_id);
}
$lehrveranstaltungen=$lvIds;
$pruefung = new pruefungCis();
if($pruefung->getPruefungByLv($lehrveranstaltungen, $uid))
{
$pruefungen = array();
foreach($pruefung->lehrveranstaltungen as $key=>$lv)
{
$lehrveranstaltung = new lehrveranstaltung($lv->lehrveranstaltung_id);
$lehrveranstaltung = $lehrveranstaltung->cleanResult();
$lehreinheit = new lehreinheit();
if ($aktStudiensemester == null)
$lehreinheit->load_all_lehreinheiten($lehrveranstaltung[0]->lehrveranstaltung_id);
else
$lehreinheit->load_lehreinheiten($lehrveranstaltung[0]->lehrveranstaltung_id, $aktStudiensemester);
$lehreinheiten = $lehreinheit->lehreinheiten;
$prf = new stdClass();
$temp = new pruefungCis($lv->pruefung_id);
$temp->getTermineByPruefung($lv->pruefung_id);
for($i=0; $i < sizeof($temp->termine); $i++)
{
$termin = new pruefungstermin($temp->termine[$i]->pruefungstermin_id);
$temp->termine[$i]->teilnehmer = $termin->getNumberOfParticipants();
}
$prf->pruefung = $temp;
$prf->lehrveranstaltung = $lehrveranstaltung;
if(!empty($lehreinheiten))
{
$lveranstaltung = new lehrveranstaltung($lehreinheiten[0]->lehrfach_id);
$oe = new organisationseinheit($lveranstaltung->oe_kurzbz);
$prf->organisationseinheit = $oe->bezeichnung;
// nur hinzufügen wenn zumindest 1 Termin vorhanden ist
if (!empty($prf->pruefung->termine))
array_push($pruefungen, $prf);
}
}
$anmeldung = new pruefungsanmeldung();
$anmeldungen = $anmeldung->getAnmeldungenByStudent($uid, $aktStudiensemester);
$anmeldungsIds = array();
foreach($anmeldungen as $anm)
{
$a = new stdClass();
$a->pruefungsanmeldung_id = $anm->pruefungsanmeldung_id;
$a->pruefungstermin_id = $anm->pruefungstermin_id;
$a->lehrveranstaltung_id = $anm->lehrveranstaltung_id;
array_push($anmeldungsIds, $a);
}
$return = new stdClass();
$return->pruefungen = $pruefungen;
$return->anmeldungen = $anmeldungsIds;
$data['result']=$return;
$data['error']='false';
$data['errormsg']='';
}
else
{
$data['error']='true';
$data['errormsg']=$pruefung->errormsg;
}
return $data;
}
/**
* Lädt alle Prüfungen die im Studiengang eines Studenten angeboten werden
* @param string $aktStudiensemester kurzbz des aktuellen Studiensemester (kann auch eine älteres sein)
* @param string $uid UID des Studenten
* @return Array
*/
function getPruefungByLvFromStudiengang($aktStudiensemester = null, $uid = null)
{
$lehrveranstaltungen = new lehrveranstaltung();
$lv_angemeldet = new lehrveranstaltung();
$lv_angemeldet->load_lva_student($uid, $aktStudiensemester);
$lvIds_angemeldet = array();
foreach($lv_angemeldet->lehrveranstaltungen as $lv)
{
array_push($lvIds_angemeldet, $lv->lehrveranstaltung_id);
}
$student = new student($uid);
$lehrveranstaltungen->load_lva($student->studiengang_kz);
$lvIds = array();
foreach($lehrveranstaltungen->lehrveranstaltungen as $lvs)
{
array_push($lvIds, $lvs->lehrveranstaltung_id);
}
$lehrveranstaltungen=$lvIds;
$pruefung = new pruefungCis();
if($pruefung->getPruefungByLv($lehrveranstaltungen))
{
$pruefungen = array();
foreach($pruefung->lehrveranstaltungen as $key=>$lv)
{
$lehrveranstaltung = new lehrveranstaltung($lv->lehrveranstaltung_id);
$lehrveranstaltung = $lehrveranstaltung->cleanResult();
if(in_array($lehrveranstaltung[0]->lehrveranstaltung_id, $lvIds_angemeldet))
{
$lehrveranstaltung[0]->angemeldet = true;
}
else
{
$lehrveranstaltung[0]->angemeldet = false;
}
$lehreinheit = new lehreinheit();
$lehreinheit->load_lehreinheiten($lehrveranstaltung[0]->lehrveranstaltung_id, $aktStudiensemester);
$lehreinheiten = $lehreinheit->lehreinheiten;
if(!empty($lehreinheiten) && $lehreinheiten !== null)
{
$prf = new stdClass();
$temp = new pruefungCis($lv->pruefung_id);
$temp->getTermineByPruefung($lv->pruefung_id);
for($i=0; $i < sizeof($temp->termine); $i++)
{
$termin = new pruefungstermin($temp->termine[$i]->pruefungstermin_id);
$temp->termine[$i]->teilnehmer = $termin->getNumberOfParticipants();
}
$prf->pruefung = $temp;
$prf->lehrveranstaltung = $lehrveranstaltung;
$lveranstaltung = new lehrveranstaltung($lehreinheiten[0]->lehrfach_id);
$oe = new organisationseinheit($lveranstaltung->oe_kurzbz);
$prf->organisationseinheit = $oe->bezeichnung;
// nur hinzufügen wenn zumindest 1 Termin vorhanden ist
if (!empty($prf->pruefung->termine))
array_push($pruefungen, $prf);
}
}
$anmeldung = new pruefungsanmeldung();
$anmeldungen = $anmeldung->getAnmeldungenByStudent($uid, $aktStudiensemester);
$anmeldungsIds = array();
foreach($anmeldungen as $anm)
{
$a = new stdClass();
$a->pruefungsanmeldung_id = $anm->pruefungsanmeldung_id;
$a->pruefungstermin_id = $anm->pruefungstermin_id;
$a->lehrveranstaltung_id = $anm->lehrveranstaltung_id;
array_push($anmeldungsIds, $a);
}
$return = new stdClass();
$return->pruefungen = $pruefungen;
$return->anmeldungen = $anmeldungsIds;
$data['result']=$return;
$data['error']='false';
$data['errormsg']='';
}
else
{
$data['error']='true';
$data['errormsg']=$pruefung->errormsg;
}
return $data;
}
/**
* Lädt die Daten zu einer einzelnen Prüfung
* @return Array
*/
function loadPruefung()
{
$pruefung_id=$_REQUEST["pruefung_id"];
$pruefung = new pruefungCis();
if($pruefung->load($pruefung_id))
{
$temp = array();
$pruefung->getLehrveranstaltungenByPruefung();
$pruefung->getTermineByPruefung();
$studiengang = new studiengang();
if(!empty($pruefung->lehrveranstaltungen))
{
foreach($pruefung->lehrveranstaltungen as $lv)
{
$lehrveranstaltung = new lehrveranstaltung($lv->lehrveranstaltung_id);
$lehrveranstaltung = $lehrveranstaltung->cleanResult();
$studiengang->load($lehrveranstaltung[0]->studiengang_kz);
$stg = new stdClass();
$stg->bezeichnung = $studiengang->bezeichnung;
$stg->studiengang_kz = $studiengang->studiengang_kz;
$stg->kurzbzlang = $studiengang->kurzbzlang;
$lehrveranstaltung[0]->studiengang = $stg;
$prf = new stdClass();
$prf->lehrveranstaltung = $lehrveranstaltung[0];
$prf->pruefung = $pruefung;
array_push($temp, $prf);
}
}
else
{
$prf = new stdClass();
$prf->pruefung = $pruefung;
array_push($temp, $prf);
}
$data['result'] = array();
$data['result'] = $temp;
$data['error']='false';
$data['errormsg']='';
}
else
{
$data['error']='true';
$data['errormsg']=$pruefung->errormsg;
}
return $data;
}
/**
* Lädt die Termine zu einer Prüfung
* @return Array
*/
function loadTermine()
{
$pruefung_id=$_REQUEST["pruefung_id"];
$pruefung = new pruefungCis($pruefung_id);
if($pruefung->getTermineByPruefung($pruefung_id))
{
$data['result'] = $pruefung->termine;
$data['error']='false';
$data['errormsg']='';
}
else
{
$data['error']='true';
$data['errormsg']=$pruefung->errormsg;
}
return $data;
}
/**
* speichert eine Prüfungsanmeldung
* @param type $aktStudiensemester kurzbz des aktuellen Studiensemesters (wird für Berechnung auf ausreichend CreditPoints benötigt)
* @param type $uid UID des Studenten
* @return Array
*/
function saveAnmeldung($aktStudiensemester = null, $uid = null)
{
global $p;
$termin = new pruefungstermin($_REQUEST["termin_id"]);
$pruefung = new pruefung();
$lehrveranstaltung = new lehrveranstaltung($_REQUEST["lehrveranstaltung_id"]);
$studiensemester = new studiensemester();
$stdsem = $studiensemester->getLastOrAktSemester(0);
$lv_besucht = false;
$studienverpflichtung_id = filter_input(INPUT_POST, "studienverpflichtung_id");
$studiengang_kz = filter_input(INPUT_POST, "studiengang_kz");
$ects = filter_input(INPUT_POST, "ects");
//Defaulteinstellung für Anzahlprüfungsversuche (wird durch Addon "ktu" überschrieben)
$maxAnzahlVersuche = 0;
//Defaulteinstellung für Code Note "unetnschuldigt ferngeblieben" (wird durch Addon "ktu" überschrieben)
$noteCode_uef = -1;
$addon = new addon();
foreach ($addon->aktive_addons as $a)
{
if($a === "ku")
{
require '../../../../addons/'.$a.'/cis/prfVerwaltung_array.php';
switch($lehrveranstaltung->oe_kurzbz)
{
case $fakultaeten[0]["fakultaet"]:
$semCounter = $fakultaeten[0]["sem"];
break;
case $fakultaeten[1]["fakultaet"]:
$semCounter = $fakultaeten[1]["sem"];
break;
default:
$semCounter = 3;
break;
}
}
else
{
$semCounter = 99;
}
}
$i=0;
$stdsem_lv_besuch = null;
do
{
$lehrveranstaltung->load_lva_student($uid, $stdsem);
foreach($lehrveranstaltung->lehrveranstaltungen as $lv)
{
if($lv->lehrveranstaltung_id === $lehrveranstaltung->lehrveranstaltung_id)
{
$lv_besucht = true;
$stdsem_lv_besuch = $stdsem;
}
}
$stdsem = $studiensemester->getPreviousFrom($stdsem);
$lehrveranstaltung->lehrveranstaltungen = array();
$i++;
}
while($i<=$semCounter && $lv_besucht === FALSE);
if(!$lv_besucht)
{
$data['error']='true';
$data['errormsg']='Besuch der Lehrveranstaltung liegt zu weit in der Vergangenheit.';
return $data;
}
$pruefung->getPruefungen($uid, NULL, $lehrveranstaltung->lehrveranstaltung_id);
$anmeldung_moeglich = true;
$anzahlPruefungen = count($pruefung->result);
// Defaulteinstellung für Prüfungstypen - schauen, ob bereits aus KTU-Addon geladen
if(!isset($pruefungstyp_kurzbzArray))
$pruefungstyp_kurzbzArray = array("Termin1","Termin2","kommPruef");
if(isset($pruefungstyp_kurzbzArray))
{
if($anzahlPruefungen < count($pruefungstyp_kurzbzArray))
{
$pruefungstyp_kurzbz = $pruefungstyp_kurzbzArray[$anzahlPruefungen];
}
}
else
{
$pruefungstyp_kurzbz = null;
}
foreach($pruefung->result as $prf)
{
$note = new note($prf->note);
if($note->note === $noteCode_uef)
{
$pruefungsanmeldung = new pruefungsanmeldung($prf->pruefungsanmeldung_id);
$pruefungstermin = new pruefungstermin($pruefungsanmeldung->pruefungstermin_id);
$pf = new pruefungCis($pruefungstermin->pruefung_id);
$pruefungsfenster = new pruefungsfenster($pf->pruefungsfenster_id);
$studiensemester = new studiensemester();
$stdsem = $studiensemester->getaktorNext();
$i=0;
while($i<2)
{
if($stdsem === $pruefungsfenster->studiensemester_kurzbz)
{
$anmeldung_moeglich = false;
}
$stdsem = $studiensemester->getPreviousFrom($stdsem);
$i++;
}
}
else
{
if($note->positiv === FALSE && $anzahlPruefungen >= $maxAnzahlVersuche)
{
$anmeldung_moeglich = false;
}
}
}
if($anmeldung_moeglich)
{
if($termin->teilnehmer_max > $termin->getNumberOfParticipants() || $termin->teilnehmer_max == NULL)
{
$pruefung = new pruefungCis();
$reihung = $pruefung->getLastOfReihung($_REQUEST["termin_id"]);
$anmeldung = new pruefungsanmeldung();
$anmeldung->lehrveranstaltung_id = $_REQUEST["lehrveranstaltung_id"];
$anmeldung->pruefungstermin_id = $_REQUEST["termin_id"];
$anmeldung->wuensche = $_REQUEST["bemerkung"];
$anmeldung->uid = $uid;
$anmeldung->reihung = $reihung+1;
$anmeldung->status_kurzbz = "angemeldet";
$anmeldung->pruefungstyp_kurzbz = $pruefungstyp_kurzbz;
$lehrveranstaltung = new lehrveranstaltung($_REQUEST["lehrveranstaltung_id"]);
// $konto = new konto();
// $creditpoints = $konto->getCreditPoints($uid, $aktStudiensemester);
//
// if($creditpoints !== false)
// {
// if($creditpoints <= $lehrveranstaltung->ects)
// {
// $data['error'] = 'true';
// $data['errormsg'] = $p->t('pruefung/zuWenigeCreditPoints');
// return $data;
// }
// }
//Kollisionsprüfung und Prüfung auf ausreichen Creditpoints
$pruefungstermin = new pruefungstermin($_REQUEST["termin_id"]);
$pf = new pruefungCis($pruefungstermin->pruefung_id);
$pruefungsfenster = new pruefungsfenster($pf->pruefungsfenster_id);
$anmeldungen = $anmeldung->getAnmeldungenByStudent($uid, $pruefungsfenster->studiensemester_kurzbz);
if($anmeldungen !== false)
{
$ects_verwendet = 0;
foreach($anmeldungen as $temp)
{
$lehrveranstaltung = new lehrveranstaltung($temp->lehrveranstaltung_id);
$ects_verwendet += $lehrveranstaltung->ects;
$datum = new datum();
if(($datum->between($termin->von, $termin->bis, $temp->von)) || ($datum->between($termin->von, $termin->bis, $temp->bis)))
{
$data['result'][$temp->pruefungstermin_id] = "true";
$data['error'] = 'true';
$data['errormsg'] = $p->t('pruefung/kollisionMitAndererAnmeldung');
}
}
$konto = new konto();
$creditPoints = $konto->getCreditPointsOfStudiensemester($uid, $pruefungsfenster->studiensemester_kurzbz);
if(($creditPoints !== false))
{
$cpVerbleibend = $creditPoints - $ects_verwendet;
if(($lehrveranstaltung->ects > $cpVerbleibend))
{
$data['error'] = 'true';
$data['errormsg'] = $p->t('pruefung/zuWenigeCreditPoints');
return $data;
}
}
elseif($konto->errormsg !== null)
{
$data['error'] = 'true';
$data['errormsg'] = 'Fehler beim Laden der Credit Points.';
}
if(isset($data['error']) && $data['error'] = 'true')
{
return $data;
}
}
else
{
$data['error'] = 'true';
$data['errormsg'] = $anmeldung->errormsg;
return $data;
}
}
else
{
$data['error']='true';
$data['errormsg']=$p->t('pruefung/keineFreienPlaetzeVorhanden');
return $data;
}
}
else
{
$data['error']='true';
$data['errormsg']=$p->t('pruefung/anmeldungAufgrundVonSperreNichtMoeglich');
return $data;
}
$anrechnung = new anrechnung();
$lv_komp = new lehrveranstaltung($studienverpflichtung_id);
$lehrveranstaltung = new lehrveranstaltung($_REQUEST["lehrveranstaltung_id"]);
$person = new person();
$person->getPersonFromBenutzer($uid);
$prestudent = new prestudent();
$prestudent->getPrestudenten($person->person_id);
$studiensemester = new studiensemester();
$stdsem = $studiensemester->getaktorNext();
if ($aktStudiensemester)
$stdsem = $aktStudiensemester;
$prestudenten = array();
$gueltigerStatus = array("Student", "Unterbrecher", "Absolvent");
foreach ($prestudent->result as $ps)
{
// prüfen ob Student zum Zeitpunkt der LV oder zumindest irgendwann Student im Studiengang war/ist
if ($ps->getLaststatus($ps->prestudent_id, $stdsem_lv_besuch) || $ps->studiengang_kz == $studiengang_kz)
{
if (in_array($ps->status_kurzbz, $gueltigerStatus) || ($ps->status_kurzbz == ""))
{
array_push($prestudenten, $ps);
}
}
}
if (count($prestudenten) > 0)
{
$prestudent_id = "";
if (count($prestudenten) != 1)
{
foreach ($prestudenten as $ps)
{
if ($ps->getLaststatus($ps->prestudent_id, $stdsem))
{
if (in_array($ps->status_kurzbz, $gueltigerStatus))
{
$prestudent_id = $ps->prestudent_id;
}
else
{
if ($ps->getLaststatus($ps->prestudent_id, $stdsem_lv_besuch))
{
if (in_array($ps->status_kurzbz, $gueltigerStatus))
{
$prestudent_id = $ps->prestudent_id;
}
}
}
}
else
{
if ($ps->getLaststatus($ps->prestudent_id, $stdsem_lv_besuch))
{
if (in_array($ps->status_kurzbz, $gueltigerStatus))
{
$prestudent_id = $ps->prestudent_id;
}
}
}
}
}
else
{
foreach ($prestudenten as $ps)
{
if ($ps->getLaststatus($ps->prestudent_id, $stdsem))
{
if (in_array($ps->status_kurzbz, $gueltigerStatus))
{
$prestudent_id = $ps->prestudent_id;
}
else
{
if ($ps->getLaststatus($ps->prestudent_id, $stdsem_lv_besuch))
{
if (in_array($ps->status_kurzbz, $gueltigerStatus))
{
$prestudent_id = $ps->prestudent_id;
}
}
}
}
else
{
if ($ps->getLaststatus($ps->prestudent_id, $stdsem_lv_besuch))
{
if (in_array($ps->status_kurzbz, $gueltigerStatus))
{
$prestudent_id = $ps->prestudent_id;
}
}
}
}
}
if($prestudent_id != "")
{
$anrechungSaveResult = false;
if(!defined('CIS_PRUEFUNGSANMELDUNG_ANRECHNUNG') || CIS_PRUEFUNGSANMELDUNG_ANRECHNUNG == true)
{
if($lv_komp->lehrveranstaltung_id != null && ($lv_komp->lehrveranstaltung_id != $lehrveranstaltung->lehrveranstaltung_id))
{
$anrechnung->lehrveranstaltung_id = $lv_komp->lehrveranstaltung_id;
$anrechnung->lehrveranstaltung_id_kompatibel = $lehrveranstaltung->lehrveranstaltung_id;
$anrechnung->prestudent_id = $prestudent_id;
$anrechnung->begruendung_id = "2";
$anrechnung->genehmigt_von = CIS_PRUEFUNGSANMELDUNG_USER;
$anrechnung->new = true;
$anrechungSaveResult = $anrechnung->save();
}
else
{
$anrechungSaveResult = true;
}
}
else
{
$anrechungSaveResult = true;
}
if($anrechungSaveResult)
{
if($anrechnung->anrechnung_id == "")
$anmeldung->anrechnung_id = null;
else
$anmeldung->anrechnung_id = $anrechnung->anrechnung_id;
if (defined('CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE') && (CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE === true))
{
$anmeldung->ects = $ects;
}
if($anmeldung->save(true))
{
$pruefung = new pruefungCis($termin->pruefung_id);
if(defined('CIS_PRUEFUNG_MAIL_EMPFAENGER_ANMEDLUNG') && (CIS_PRUEFUNG_MAIL_EMPFAENGER_ANMEDLUNG !== ""))
$to = CIS_PRUEFUNG_MAIL_EMPFAENGER_ANMEDLUNG."@".DOMAIN;
else
$to = $pruefung->mitarbeiter_uid."@".DOMAIN;
$from = "noreply@".DOMAIN;
$subject = $p->t('pruefung/emailLektorSubjectAnmeldung');
$mail = new mail($to, $from, $subject, $p->t('pruefung/emailBodyBitteHtmlSicht'));
$student = new student($uid);
$datum = new datum();
$lv = new lehrveranstaltung($anmeldung->lehrveranstaltung_id);
$html = $p->t('pruefung/emailLektorStudentIn')." ".$student->vorname." ".$student->nachname." ".$p->t('pruefung/emailLektorHatSichZurPruefung')." ".$lv->bezeichnung." ".$p->t('pruefung/emailLektorAm')." ".$datum->formatDatum($termin->von, "d.m.Y")." ".$p->t('pruefung/emailLektorVon')." ".$datum->formatDatum($termin->von,"H:i")." ".$p->t('pruefung/emailLektorUhrBis')." ".$datum->formatDatum($termin->bis,"H:i")." ".$p->t('pruefung/emailLektorUhrAngemeldet');
$mail->setHTMLContent($html);
$mail->send();
$data['result'] = $p->t('pruefung/anmeldungErfolgreich');
$data['error']='false';
$data['errormsg']='';
}
else
{
$data['error']='true';
$data['errormsg']=$anmeldung->errormsg;
}
}
else
{
$data['error']='true';
$data['errormsg']=$anrechnung->errormsg;
}
}
else
{
$data['error']='true';
$data['errormsg']=$p->t('pruefung/prestudentNichtGefunden');
}
}
else
{
$data['error']='true';
$data['errormsg']=$p->t('pruefung/prestudentNichtGefunden');
}
return $data;
}
/**
* Lädt alle vorhandenen Prüfungen
* @param type $aktStudiensemester kurzbz des Studiensemesters (Filter nach Studiensemester)
* @param type $uid UID eines Studenten
* @return Array
*/
function getAllPruefungen($aktStudiensemester = null, $uid = null)
{
$pruefung = new pruefungCis();
if($pruefung->getAll())
{
$pruefungen = array();
foreach($pruefung->lehrveranstaltungen as $lv)
{
$lehrveranstaltung = new lehrveranstaltung($lv->lehrveranstaltung_id);
$lehrveranstaltung = $lehrveranstaltung->cleanResult();
$lehreinheit = new lehreinheit();
$lehreinheit->load_lehreinheiten($lehrveranstaltung[0]->lehrveranstaltung_id, $aktStudiensemester);
$lehreinheiten = $lehreinheit->lehreinheiten;
$prf = new stdClass();
$temp = new pruefungCis($lv->pruefung_id);
$temp->getTermineByPruefung($lv->pruefung_id);
for($i=0; $i < sizeof($temp->termine); $i++)
{
$termin = new pruefungstermin($temp->termine[$i]->pruefungstermin_id);
$temp->termine[$i]->teilnehmer = $termin->getNumberOfParticipants();
}
$prf->pruefung = $temp;
$prf->lehrveranstaltung = $lehrveranstaltung;
if(!empty($lehreinheiten))
{
$lveranstaltung = new lehrveranstaltung($lehreinheiten[0]->lehrfach_id);
$oe = new organisationseinheit($lveranstaltung->oe_kurzbz);
$prf->organisationseinheit = $oe->bezeichnung;
// nur hinzufügen wenn zumindest 1 Termin vorhanden ist
if (!empty($prf->pruefung->termine))
array_push($pruefungen, $prf);
}
}
$anmeldung = new pruefungsanmeldung();
$anmeldungen = $anmeldung->getAnmeldungenByStudent($uid, $aktStudiensemester);
$anmeldungsIds = array();
foreach($anmeldungen as $anm)
{
$a = new stdClass();
$a->pruefungsanmeldung_id = $anm->pruefungsanmeldung_id;
$a->pruefungstermin_id = $anm->pruefungstermin_id;
$a->lehrveranstaltung_id = $anm->lehrveranstaltung_id;
array_push($anmeldungsIds, $a);
}
$return = new stdClass();
$return->pruefungen = $pruefungen;
$return->anmeldungen = $anmeldungsIds;
$data['result']=$return;
$data['error']='false';
$data['errormsg']='';
}
else
{
$data['error']='true';
$data['errormsg']=$pruefung->errormsg;
}
return $data;
}
/**
* Storniert eine Prüfungsanmeldung
* @param type $uid UID eines Studenten
* @return Array
*/
function stornoAnmeldung($uid = null)
{
global $p;
$pruefungsanmeldung_id=$_REQUEST['pruefungsanmeldung_id'];
$pruefungsanmeldung = new pruefungsanmeldung($pruefungsanmeldung_id);
$anrechnung = new anrechnung($pruefungsanmeldung->anrechnung_id);
if($pruefungsanmeldung->delete($pruefungsanmeldung_id, $uid))
{
if($anrechnung->delete($anrechnung->anrechnung_id))
{
$data['result'] = $p->t('pruefung/anmeldungErfolgreichGeloescht');
$data['error'] = 'false';
$data['errormsg'] = '';
}
}
else
{
$data['error']='true';
$data['errormsg']=$pruefung->errormsg;
}
return $data;
}
/**
* Lädt alle Anmeldungen zu einem Prüfungstermin
* @return Array
*/
function getAnmeldungenTermin()
{
global $p;
$lehrveranstaltung_id = $_REQUEST["lehrveranstaltung_id"];
$pruefungstermin_id = $_REQUEST["pruefungstermin_id"];
$pruefungstermin = new pruefungstermin($pruefungstermin_id);
$pruefungsanmeldung = new pruefungsanmeldung();
$pruefungstermin->anmeldungen = $pruefungsanmeldung->getAnmeldungenByTermin($pruefungstermin_id, $lehrveranstaltung_id);
$lv = new lehrveranstaltung($lehrveranstaltung_id);
$pruefungstermin->lv_bezeichnung = $lv->bezeichnung;
$pruefungstermin->lv_lehrtyp = $lv->lehrtyp_kurzbz;
$datum = new DateTime($pruefungstermin->von);
$pruefungstermin->datum = $datum->format('d.m.Y');
foreach($pruefungstermin->anmeldungen as $a)
{
$student = new student($a->uid);
$temp = new stdClass();
$temp->vorname = $student->vorname;
$temp->nachname = $student->nachname;
$temp->uid = $student->uid;
$a->student = $temp;
}
if(!empty($pruefungstermin->anmeldungen))
{
$data['result']=$pruefungstermin;
$data['error']='false';
$data['errormsg']='';
}
else
{
$data['error']='true';
if($pruefungsanmeldung->errormsg !== null)
{
$data['errormsg']=$pruefungsanmeldung->errormsg;
}
else
{
$data['errormsg']= $p->t('pruefung/keineAnmeldungenVorhanden');
$data['lv_id'] = $lehrveranstaltung_id;
$data['termin_id'] = $pruefungstermin_id;
$data['termin_datum'] = $pruefungstermin->datum;
$data['lv_bezeichnung'] = $pruefungstermin->lv_bezeichnung;
}
}
return $data;
}
/**
* speichert die Reihung der Studenten eines Prüfungstermines
* @return Array
*/
function saveReihung()
{
$anmeldung = new pruefungsanmeldung();
$reihung = $_REQUEST["reihung"];
if($anmeldung->saveReihung($reihung))
{
$data['result']=true;
$data['error']='false';
$data['errormsg']=$anmeldung->errormsg;
}
else
{
$data['error']='true';
$data['errormsg']=$anmeldung->errormsg;
}
return $data;
}
/**
* Ändert den Status aller Prüfungsanmeldungen eines Termins/LV auf "bestaetigt"
* @return Array
*/
function alleBestaetigen($uid)
{
global $p;
$lehrveranstaltung_id = $_REQUEST["lehrveranstaltung_id"];
$pruefungstermin_id = $_REQUEST["termin_id"];
$emails = $_REQUEST["emails"];
$pruefungstermin = new pruefungstermin($pruefungstermin_id);
$pruefungsanmeldung = new pruefungsanmeldung();
$pranmeldungen = $pruefungsanmeldung->getAnmeldungenByTermin($pruefungstermin_id, $lehrveranstaltung_id);
$mail_benutzer = [];
$mail_inhalt = [];
foreach($pranmeldungen as $a)
{
$anmeldung = new pruefungsanmeldung($a->pruefungsanmeldung_id);
if ($anmeldung->status_kurzbz == 'angemeldet')
{
if ($anmeldung->changeState($a->pruefungsanmeldung_id, 'bestaetigt', $uid))
{
$anm = new pruefungsanmeldung($a->pruefungsanmeldung_id);
$termin = new pruefungstermin($anm->pruefungstermin_id);
$lv = new lehrveranstaltung($anm->lehrveranstaltung_id);
$ma = new mitarbeiter($uid);
$datum = new datum();
$ort = new ort($termin->ort_kurzbz);
$ortbezeichnung = $ort->bezeichnung;
if (is_null($termin->ort_kurzbz) && !is_null($termin->anderer_raum))
{
$ortbezeichnung = $termin->anderer_raum;
}
$pruefung = new pruefungCis($termin->pruefung_id);
$to = $anm->uid."@".DOMAIN;
$from = "noreply@".DOMAIN;
$subject = $p->t('pruefung/emailSubjectAnmeldungBestaetigung');
$html = $p->t('pruefung/emailBody1')." ".$ma->vorname." ".$ma->nachname." ".$p->t('pruefung/emailBody2')."<br>";
$html .= "<br>";
$html .= $p->t('pruefung/emailBodyPruefung')." ".$lv->bezeichnung."<br>";
if($pruefung->einzeln)
{
$date = $datum->formatDatum($termin->von, "Y-m-d H:i:s");
$date = strtotime($date);
$date = $date+(60*$pruefung->pruefungsintervall*($anmeldung->reihung-1));
$von = date("H:i",$date);
$html .= $p->t('pruefung/emailBodyTermin')." ".$datum->formatDatum($termin->von, "d.m.Y")." ".$p->t('pruefung/emailBodyUm')." ".$von."<br>";
$html .= $p->t('pruefung/emailBodyDauer')." ".$pruefung->pruefungsintervall." ".$p->t('pruefung/emailBodyMinuten')."<br />";
}
else
$html .= $p->t('pruefung/emailBodyTermin')." ".$datum->formatDatum($termin->von, "d.m.Y")." ".$p->t('pruefung/emailBodyUm')." ".$datum->formatDatum($termin->von, "H:i")."<br>";
$html .= $p->t('pruefung/anmeldungErfolgreich')." ".$ortbezeichnung."<br>";
$html .= "<br>";
$html .= "<a href='".APP_ROOT."cis/private/lehre/pruefung/pruefungsanmeldung.php'>".$p->t('pruefung/emailBodyLinkZurAnmeldung')."</a><br>";
$html .= "<br>";
$mail_benutzer[] = [
'uid' => $anm->uid
];
if (empty($mail_inhalt))
{
$mail_inhalt = array(
'von' => $ma->vorname." ".$ma->nachname,
'lv' => $lv->bezeichnung,
'ort' => $ortbezeichnung,
'datum' => $datum->formatDatum($termin->von, "d.m.Y") . ' ' . $p->t('pruefung/emailBodyUm') . ' ' . (isset($von) ? $von : $datum->formatDatum($termin->von, "H:i")),
'dauer' => $pruefung->einzeln ? ($pruefung->pruefungsintervall . ' ' . $p->t('pruefung/emailBodyMinuten')): '');
}
$mail = new mail($to, $from, $subject,$p->t('pruefung/emailBodyBitteHtmlSicht'));
$mail->setHTMLContent($html);
$mail->send();
}
}
}
if (!empty($emails) && !empty($mail_inhalt))
{
foreach ($emails as $email)
{
$from = "noreply@".DOMAIN;
$subject = $p->t('pruefung/emailSubjectAnmeldungBestaetigung');
$html = $p->t('pruefung/sammelemailBody',array($mail_inhalt['lv'], $mail_inhalt['datum'], $mail_inhalt['von']));
if ($mail_inhalt['ort'])
{
$html .= $p->t('pruefung/sammelemailBody2',array($mail_inhalt['ort']));
}
$html .= "<br /><table border='1'>
<thead>
<tr>
<th>UID</th>
</tr>
</thead>
<tbody>";
foreach($mail_benutzer as $benutzer)
{
$html .= "<tr>
<td>" . htmlspecialchars($benutzer['uid']) . "</td>
</tr>";
}
$html .= "</tbody></table><br />";
$mail = new mail($email, $from, $subject, $p->t('pruefung/emailBodyBitteHtmlSicht'));
$mail->setHTMLContent($html);
$mail->send();
}
}
$data['result']=true;
$data['error']='false';
$data['errormsg']='';
return $data;
}
/**
* Ändert den Status einer Prüfungsanmeldung auf "bestaetigt"
* @return Array
*/
function anmeldungBestaetigen($uid)
{
global $p;
$pruefungsanmeldung_id = $_REQUEST["pruefungsanmeldung_id"];
$status = "bestaetigt";
$anmeldung = new pruefungsanmeldung();
if($anmeldung->changeState($pruefungsanmeldung_id, $status, $uid))
{
$anmeldung = new pruefungsanmeldung($pruefungsanmeldung_id);
$termin = new pruefungstermin($anmeldung->pruefungstermin_id);
$lv = new lehrveranstaltung($anmeldung->lehrveranstaltung_id);
$ma = new mitarbeiter($uid);
$datum = new datum();
$ort = new ort($termin->ort_kurzbz);
$pruefung = new pruefungCis($termin->pruefung_id);
$ortbezeichnung = $ort->bezeichnung;
if (is_null($termin->ort_kurzbz) && !is_null($termin->anderer_raum))
{
$ortbezeichnung = $termin->anderer_raum;
}
$to = $anmeldung->uid."@".DOMAIN;
$from = "noreply@".DOMAIN;
$subject = $p->t('pruefung/emailSubjectAnmeldungBestaetigung');
$html = $p->t('pruefung/emailBody1')." ".$ma->vorname." ".$ma->nachname." ".$p->t('pruefung/emailBody2')."<br>";
$html .= "<br>";
$html .= $p->t('pruefung/emailBodyPruefung')." ".$lv->bezeichnung."<br>";
if($pruefung->einzeln)
{
$date = $datum->formatDatum($termin->von, "Y-m-d H:i:s");
$date = strtotime($date);
$date = $date+(60*$pruefung->pruefungsintervall*($anmeldung->reihung-1));
$von = date("H:i",$date);
$html .= $p->t('pruefung/emailBodyTermin')." ".$datum->formatDatum($termin->von, "d.m.Y")." ".$p->t('pruefung/emailBodyUm')." ".$von."<br>";
$html .= $p->t('pruefung/emailBodyDauer')." ".$pruefung->pruefungsintervall." ".$p->t('pruefung/emailBodyMinuten')."<br />";
}
else
$html .= $p->t('pruefung/emailBodyTermin')." ".$datum->formatDatum($termin->von, "d.m.Y")." ".$p->t('pruefung/emailBodyUm')." ".$datum->formatDatum($termin->von, "H:i")."<br>";
$html .= $p->t('pruefung/anmeldungErfolgreich')." ".$ortbezeichnung."<br>";
$html .= "<br>";
$html .= "<a href='".APP_ROOT."cis/private/lehre/pruefung/pruefungsanmeldung.php'>".$p->t('pruefung/emailBodyLinkZurAnmeldung')."</a><br>";
$html .= "<br>";
$mail = new mail($to, $from, $subject,$p->t('pruefung/emailBodyBitteHtmlSicht'));
$mail->setHTMLContent($html);
$mail->send();
$data['result']=true;
$data['error']='false';
$data['errormsg']='';
}
else
{
$data['error']='true';
$data['errormsg']=$anmeldung->errormsg;
}
return $data;
}
/**
* Löscht eine Prüfungsanmeldung
* @return Array
*/
function anmeldungLoeschen()
{
$pruefungsanmeldung_id = $_REQUEST["pruefungsanmeldung_id"];
$anmeldung = new pruefungsanmeldung();
if($anmeldung->delete($pruefungsanmeldung_id))
{
$data['result']=true;
$data['error']='false';
$data['errormsg']='';
}
else
{
$data['error']='true';
$data['errormsg']=$anmeldung->errormsg;
}
return $data;
}
/**
* Lädt alle Studiengänge
* @return Array
*/
function getStudiengaenge()
{
$studiengang = new studiengang();
if($studiengang->getAll("bezeichnung", true))
{
$result = array();
foreach($studiengang->result as $stg)
{
$studiengangTemp = new StdClass();
$studiengangTemp->studiengang_kz = $stg->studiengang_kz;
$studiengangTemp->bezeichnung = $stg->bezeichnung;
$studiengangTemp->kurzbz = $stg->kurzbz;
$studiengangTemp->typ = $stg->typ;
array_push($result, $studiengangTemp);
}
$data['result']=$result;
$data['error']='false';
$data['errormsg']='';
}
else
{
$data['error']='true';
$data['errormsg']=$studiengang->errormsg;
}
return $data;
}
/**
* Lädt alle Prüfungen eines Studienganges
* @return Array
*/
function getPruefungenStudiengang($uid, $aktStudiensemester)
{
$lehrveranstaltung = new lehrveranstaltung();
$lehrveranstaltung->load_lva($_REQUEST["studiengang_kz"], null, null, true, true);
$result = array();
foreach($lehrveranstaltung->lehrveranstaltungen as $lv)
{
$pruefung = new pruefungCis();
$pruefung->getPruefungByLv($lv->lehrveranstaltung_id);
if((!empty($pruefung->lehrveranstaltungen)))
{
$lv->pruefung = array();
foreach ($pruefung->lehrveranstaltungen as $key=>$prf)
{
$pruefung->load($prf->pruefung_id);
// var_dump($aktStudiensemester);
// var_dump($pruefung->studiensemester_kurzbz);
if(($pruefung->storniert === true))
{
unset($pruefung->lehrveranstaltungen[$key]);
}
else
{
$pruefung->getTermineByPruefung();
array_push($lv->pruefung, $pruefung);
}
}
if($pruefung->studiensemester_kurzbz === $aktStudiensemester)
array_push($result, $lv);
}
}
$data['result']=$result;
$data['error']='false';
$data['errormsg']='';
return $data;
}
function getPruefungenStudiengangBySemester($aktStudiensemester)
{
$result = array();
$pruefungen = new pruefungCis();
$pruefungen->getPruefungByStudiensemester($aktStudiensemester);
if(!empty($pruefungen->lehrveranstaltungen))
{
$lehrveranstaltungen = [];
foreach ($pruefungen->lehrveranstaltungen as $prf)
{
$pruefung = new pruefungCis();
$pruefung->load($prf->pruefung_id);
if ($pruefung->storniert)
continue;
$pruefung->getTermineByPruefung();
$lvid = $prf->lehrveranstaltung_id;
if (!isset($lehrveranstaltungen[$lvid]))
{
$lv = new stdClass();
$lehrveranstaltung = new lehrveranstaltung();
$lehrveranstaltung->load($lvid);
$studiengang = new studiengang();
$studiengang->load($lehrveranstaltung->studiengang_kz);
$lv->bezeichnung = $lehrveranstaltung->bezeichnung;
$lv->lehrveranstaltung_id = $lvid;
$lv->studiengang = $studiengang->kuerzel;
$lv->pruefung = [];
$lehrveranstaltungen[$lvid] = $lv;
}
$lehrveranstaltungen[$lvid]->pruefung[] = $pruefung;
}
$result = array_values($lehrveranstaltungen);
}
$data['result']=$result;
$data['error']='false';
$data['errormsg']='';
return $data;
}
function terminezusammenlegen($termine, $lv_id)
{
$result = array();
$alle_termine = array();
$error = false;
$terminkollision = defined('CIS_PRUEFUNGSANMELDUNG_ERLAUBE_TERMINKOLLISION') ? CIS_PRUEFUNGSANMELDUNG_ERLAUBE_TERMINKOLLISION : false;
foreach($termine as $termin)
{
$pruefungstermin = new pruefungstermin();
$pruefungstermin->load($termin);
$pruefung = new pruefungCis();
$pruefung->load($pruefungstermin->pruefung_id);
$pruefung->getLehrveranstaltungenByPruefung();
$lehrveranstaltungen = array_column($pruefung->lehrveranstaltungen, 'lehrveranstaltung_id');
if (!in_array($lv_id, $lehrveranstaltungen))
continue;
$pruefung->lehrveranstaltung_id = $lv_id;
$pruefung->termin = $pruefungstermin;
$alle_termine[] = $pruefung;
}
if (count($alle_termine) >= 1)
{
usort($alle_termine, function($a, $b) {
return strcmp($a->termin->von, $b->termin->von);
});
$first_termin = $alle_termine[0];
$first_mitarbeiter = $first_termin->mitarbeiter_uid;
$first_date = date('Y-m-d', strtotime($first_termin->termin->von));
$first_studiensemester = $first_termin->studiensemester_kurzbz;
$first_sammelklausur = $first_termin->termin->sammelklausur;
$first_ort = $first_termin->termin->ort_kurzbz;
$first_raum = $first_termin->termin->anderer_raum;
$first_lv = $first_termin->lehrveranstaltung_id;
$first_titel = $first_termin->titel;
$max_von = strtotime($first_termin->termin->von);
$max_bis = strtotime($first_termin->termin->bis);
$teilnehmer_min = (int)$first_termin->termin->teilnehmer_min;
$teilnehmer_max = (int)$first_termin->termin->teilnehmer_max;
$prevEnd = $max_bis;
foreach ($alle_termine as $termin)
{
if (date('Y-m-d', strtotime($termin->termin->von)) !== $first_date)
{
$data['errormsg'] = 'Nicht der gleiche Tag!';
$error = true;
}
if ($termin->mitarbeiter_uid !== $first_mitarbeiter)
{
$data['errormsg'] = 'Unterschiedliche Lektoren!';
$error = true;
}
if ($termin->studiensemester_kurzbz !== $first_studiensemester)
{
$data['errormsg'] = 'Unterschiedliche Studiensemester!';
$error = true;
}
if ($termin->termin->sammelklausur !== $first_sammelklausur)
{
$data['errormsg'] = 'Sammelklausur unterschiedlich!';
$error = true;
}
if (!($termin->termin->ort_kurzbz === $first_ort || $first_termin->termin->anderer_raum = $first_raum))
{
$data['errormsg'] = 'Ort/Raum unterschiedlich!';
$error = true;
}
if ($termin->lehrveranstaltung_id !== $first_lv)
{
$data['errormsg'] = 'Lehrveranstaltungen unterscheiden sich!';
$error = true;
}
$start = strtotime($termin->termin->von);
$max_von = min($max_von, $start);
$max_bis = max($max_bis, strtotime($termin->termin->bis));
$teilnehmer_min = min($teilnehmer_min, (int)$termin->termin->teilnehmer_min);
$teilnehmer_max = max($teilnehmer_max, (int)$termin->termin->teilnehmer_max);
if (($start - $prevEnd > 0) && $first_ort)
{
$stunde = new stunde();
$gapStartStr = date('Y-m-d H:i:s', $prevEnd);
$gapEndStr = date('Y-m-d H:i:s', $start);
$gapStartArr = explode(' ', $gapStartStr);
$gapEndArr = explode(' ', $gapEndStr);
$stunden = $stunde->getStunden($gapStartArr[1], $gapEndArr[1]);
$reservierung = new reservierung();
$reserviert = false;
$reservierungs_stunden = $reservierung->getReservierungen($first_ort, $gapStartArr[0]);
$need_stunden = array_diff($stunden, $reservierungs_stunden);
foreach ($need_stunden as $h)
{
if ($reservierung->isReserviert($first_ort, $gapStartArr[0], $h))
$reserviert = true;
}
if (!$terminkollision && $reserviert && !$first_sammelklausur)
{
$error = true;
$data['errormsg'] = 'Kann nicht zusammengelegt werden, da der Raum reserviert ist';
}
else
{
$reservierung->studiengang_kz = "0";
$reservierung->ort_kurzbz = $first_ort;
$reservierung->uid = $first_mitarbeiter;
$reservierung->datum = $gapStartArr[0];
$reservierung->titel = $first_titel;
if (strlen($first_titel) > 10)
{
$reservierung->titel = "Prüfung";
}
$reservierung->beschreibung = "Prüfung";
$reservierung->insertamum = date('Y-m-d G:i:s');
$reservierung->insertvon = get_uid();
$reservierungError = false;
foreach ($need_stunden as $h)
{
$reservierung->stunde = $h;
if (!$reservierungError)
{
if (!$reservierung->save(true))
{
$error = true;
$data['errormsg'] = $reservierung->errormsg;
$reservierungError = true;
}
}
}
}
}
$prevEnd = strtotime($termin->termin->bis);
}
if (!$error)
{
$first_pruefungstermin = new pruefungstermin();
$first_pruefungstermin->load($first_termin->termin->pruefungstermin_id);
$first_pruefungstermin->von = date('Y-m-d H:i:s', $max_von);
$first_pruefungstermin->bis = date('Y-m-d H:i:s', $max_bis);
$first_pruefungstermin->teilnehmer_min = $teilnehmer_min;
$first_pruefungstermin->teilnehmer_max = $teilnehmer_max;
$first_pruefungstermin->save();
$alle_termine = array_slice($alle_termine, 1);
foreach ($alle_termine as $termin)
{
$anmeldung_termin = new pruefungsanmeldung();
$anmeldungen_termine = $anmeldung_termin->getAnmeldungenByTermin($termin->termin->pruefungstermin_id);
if (count($anmeldungen_termine) === 0)
{
$first_pruefungstermin->delete($termin->termin->pruefungstermin_id);
}
$i = 0;
$anmeldungen_termine_count = count($anmeldungen_termine);
foreach ($anmeldungen_termine as $anmeldungtermin)
{
$anmeldung = new pruefungsanmeldung();
$anmeldung->load($anmeldungtermin->pruefungsanmeldung_id);
$old_pruefuengstermin_id = $anmeldung->pruefungstermin_id;
$anmeldung->pruefungstermin_id = $first_termin->termin->pruefungstermin_id;
if ($anmeldung->save(false) && ($i === $anmeldungen_termine_count - 1))
{
$first_pruefungstermin->delete($old_pruefuengstermin_id);
}
$i ++;
}
}
}
}
$data['result']= $result;
$data['error']= $error ? 'true' : 'false';
$data['errormsg']='';
return $data;
}
/**
*
* @return typespeichert ein Kommentar zu einer Prüfungsanmeldung
*/
function saveKommentar()
{
$kommentar = $_REQUEST["kommentar"];
$pruefungsanmeldung_id = $_REQUEST["pruefungsanmeldung_id"];
$pruefungsanmeldung = new pruefungsanmeldung($pruefungsanmeldung_id);
$pruefungsanmeldung->kommentar = $kommentar;
if($pruefungsanmeldung->save())
{
$data['result']=true;
$data['error']='false';
$data['errormsg']='';
}
else
{
$data['error']='true';
$data['errormsg']=$pruefungsanmeldung->errormsg;
}
return $data;
}
/**
* liefert alle freien Räume für einen Prüfungstermin
*/
function getAllFreieRaeume($terminId)
{
$pruefungstermin = new pruefungstermin();
$pruefungstermin->load($terminId);
$ort = new ort();
$datum_von = explode(" ", $pruefungstermin->von);
$datum_bis = explode(" ", $pruefungstermin->bis);
$teilnehmer = $pruefungstermin->getNumberOfParticipants();
$teilnehmer = $teilnehmer !== false ? $teilnehmer : 0;
$pruefungstermin->getAll($pruefungstermin->von, $pruefungstermin->bis, TRUE);
if(defined('CIS_PRUEFUNGSANMELDUNG_ERLAUBE_TERMINKOLLISION') && CIS_PRUEFUNGSANMELDUNG_ERLAUBE_TERMINKOLLISION)
$ortSuccess = $ort->getOrte(true, null, true);
else
$ortSuccess = $ort->search($datum_von[0], $datum_von[1], $datum_bis[1], null, $teilnehmer, true);
if($ortSuccess)
{
foreach($pruefungstermin->result as $termin)
{
if($termin->pruefungstermin_id != $pruefungstermin->pruefungstermin_id && !is_null($termin->ort_kurzbz))
{
$o = new ort($termin->ort_kurzbz);
$o->ort_kurzbz .= " (Sammelklausur)";
array_push($ort->result, $o);
}
}
usort($ort->result, "compareRaeume");
$data['result']=$ort->result;
$data['error']='false';
$data['errormsg']='';
}
else
{
$data['error']='true';
$data['errormsg']=$ort->errormsg;
}
return $data;
}
/**
* vergleicht die Kurzbezeichnungen von 2 Räumen
* @param $a Ort-Objekt
* @param $b Ort-Objekt
* @return $a < $b Wert < 0; $a > $b Wert > 0; $a = $b Wert 0
*/
function compareRaeume($a, $b)
{
return strcmp($a->ort_kurzbz, $b->ort_kurzbz);
}
function saveRaum($terminId, $ort_kurzbz, $uid, $anderer_raum = '')
{
$terminkollision = defined('CIS_PRUEFUNGSANMELDUNG_ERLAUBE_TERMINKOLLISION') ? CIS_PRUEFUNGSANMELDUNG_ERLAUBE_TERMINKOLLISION : false;
$pruefungstermin = new pruefungstermin($terminId);
$stunde = new stunde();
$datum_von = explode(" ", $pruefungstermin->von);
$datum_bis = explode(" ", $pruefungstermin->bis);
$stunden = $stunde->getStunden($datum_von[1], $datum_bis[1]);
$reservierung = new reservierung();
$reserviert = false;
foreach($stunden as $h)
{
if($reservierung->isReserviert($ort_kurzbz, $datum_von[0], $h))
$reserviert = true;
}
if($terminkollision || !$reserviert || $pruefungstermin->sammelklausur == TRUE)
{
$pruefung = new pruefungCis($pruefungstermin->pruefung_id);
$mitarbeiter = new mitarbeiter($pruefung->mitarbeiter_uid);
if ($ort_kurzbz === "" && $anderer_raum !== "")
{
$pruefungstermin->anderer_raum = $anderer_raum;
if($pruefungstermin->save(false))
{
$data['result']="reserviert";
$data['error']='false';
$data['errormsg']='';
}
else
{
$data['error']='true';
$data['errormsg']=$pruefungstermin->errormsg;
}
}
else if($ort_kurzbz === "buero")
{
$pruefungstermin->ort_kurzbz = $mitarbeiter->ort_kurzbz;
if($pruefungstermin->save(false))
{
$data['result']="reserviert";
$data['error']='false';
$data['errormsg']='';
}
else
{
$data['error']='true';
$data['errormsg']=$pruefungstermin->errormsg;
}
}
else
{
$reservierung->studiengang_kz = "0";
$reservierung->ort_kurzbz = $ort_kurzbz;
$reservierung->uid = $pruefung->mitarbeiter_uid;
$reservierung->datum = $datum_von[0];
$reservierung->titel = $pruefung->titel;
if(strlen($pruefung->titel) > 10)
{
$reservierung->titel = "Prüfung";
}
$reservierung->beschreibung = "Prüfung";
$reservierung->insertamum = date('Y-m-d G:i:s');
$reservierung->insertvon = $uid;
$reservierungError = false;
foreach($stunden as $h)
{
$reservierung->stunde = $h;
if(!$reservierung->save(true))
{
$reservierungError = true;
}
}
if(!$reservierungError)
{
$pruefungstermin->ort_kurzbz = $reservierung->ort_kurzbz;
if($pruefungstermin->save(false))
{
$data['result']="reserviert";
$data['error']='false';
$data['errormsg']='';
}
else
{
$data['error']='true';
$data['errormsg']=$pruefungstermin->errormsg;
}
}
else
{
$data['error']='true';
$data['errormsg']=$reservierung->errormsg;
}
}
}
else
{
$data['error']='true';
$data['errormsg']="Reservierung nicht möglich.";
}
return $data;
}
function getLvKompatibel($lvid, $uid)
{
$person = new person();
$person->getPersonFromBenutzer($uid);
$prestudent = new prestudent();
$prestudent->getPrestudenten($person->person_id);
$stplIds = array();
foreach ($prestudent->result as $ps)
{
if ($ps->getLaststatus($ps->prestudent_id))
{
if (($ps->status_kurzbz == "Student") || ($ps->status_kurzbz == "Unterbrecher"))
{
array_push($stplIds, $ps->studienplan_id);
}
}
}
$lv = new lehrveranstaltung();
if($lv->getLVkompatibelTo($lvid, $stplIds))
{
$data['result']=$lv->lehrveranstaltungen;
$data['error']='false';
$data['errormsg']='';
}
else
{
$data['result']="";
$data['error']='true';
$data['errormsg']=$lv->errormsg;
}
return $data;
}
function getPrestudenten($uid, $aktStudiensemester)
{
$person = new person();
$person->getPersonFromBenutzer($uid);
$prestudent = new prestudent();
$prestudent->getPrestudenten($person->person_id);
$result = array();
if (count($prestudent->result) > 0)
{
foreach ($prestudent->result as $key=>$ps)
{
if ($ps->getLaststatus($ps->prestudent_id))
{
if(($ps->status_kurzbz === 'Student') || ($ps->status_kurzbz == 'Unterbrecher'))
{
$studiengang = new studiengang($ps->studiengang_kz);
array_push($result, $studiengang);
}
}
}
$data['result']=$result;
$data['error']='false';
$data['errormsg']='';
}
else
{
$data['result']="";
$data['error']='true';
$data['errormsg']=$lv->errormsg;
}
return $data;
}
?>