From 11fe90b0f41d48f5078eb30b85bdd1d046d44eed Mon Sep 17 00:00:00 2001 From: Stefan Puraner Date: Wed, 26 Mar 2014 10:01:31 +0000 Subject: [PATCH] =?UTF-8?q?Pr=C3=BCfungsverwaltung;=20Student=20kann=20sic?= =?UTF-8?q?h=20zu=20Pr=C3=BCfung=20anmelden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/private/lehre/pruefung/pruefung.js | 345 +++++--- .../pruefung/pruefungsanmeldung.json.php | 237 +++++- .../lehre/pruefung/pruefungsanmeldung.php | 260 ++++-- include/js/jquery.tablesorter.min.js | 752 ++++++++++++++++++ include/lehrveranstaltung.class.php | 1 + include/organisationseinheit.class.php | 29 + include/pruefungCis.class.php | 38 +- include/pruefungsanmeldung.class.php | 21 +- 8 files changed, 1477 insertions(+), 206 deletions(-) create mode 100644 include/js/jquery.tablesorter.min.js diff --git a/cis/private/lehre/pruefung/pruefung.js b/cis/private/lehre/pruefung/pruefung.js index 2dad5aefd..7a5f9520b 100644 --- a/cis/private/lehre/pruefung/pruefung.js +++ b/cis/private/lehre/pruefung/pruefung.js @@ -28,15 +28,9 @@ function getUrlVars() { function setDatePicker(ele) { var start = $("#pruefungsfenster option:selected").attr("start"); -// console.log(start); start = start.split('-'); -// console.log(start); -// console.log(new Date(start[0],start[1]-1,start[2])); var ende = $("#pruefungsfenster option:selected").attr("ende"); -// console.log(ende); ende = ende.split('-'); -// console.log(ende); -// console.log(new Date(ende[0],ende[1]-1,ende[2])); $("#prfTermin input[type=text]").each(function(i,v){ $("#"+v.id).datepicker("destroy"); $("#"+v.id).datepicker({ @@ -50,16 +44,8 @@ function setDatePicker(ele) function terminHinzufuegen(inputTag) { inputTag = (inputTag===undefined ? "" : inputTag); -// var start = $("#pruefungsfenster option:selected").attr("start"); -// start = start.split('-'); -// var ende = $("#pruefungsfenster option:selected").attr("ende"); -// ende = ende.split('-'); var count = $("#prfTermin tr").length+1; $("#prfTermin").append(''); -// $("#termin"+count).datepicker({ -// minDate: new Date(start[0],start[1]-1,start[2]), -// maxDate: new Date(ende[0],ende[1]-1,ende[2]) -// }); setDatePicker(); } @@ -160,79 +146,129 @@ function writePrfFensterDetails(){ function loadPruefungen() { - //TODO student_uid - var student_uid = $("#uid").val(); - var student_uid = "if11b044"; $.ajax({ dataType: 'json', - url: "../../../../soap/fhcomplete.php", + url: "./pruefungsanmeldung.json.php", + type: "POST", data: { - typ: "json", - class: "lehrveranstaltung", - method: "load_lva_student", - parameter_0: student_uid + method: "getPruefungByLv" }, error: loadError }).success(function(data){ - var lvIds = []; - data.result.forEach(function(e){ - lvIds.push(e.lehrveranstaltung_id); - }); - $.ajax({ - dataType: 'json', - url: "./pruefungsanmeldung.json.php", - type: "POST", - data: { - method: "getPruefungByLv", - lvIds: lvIds //IDs der beuschten LVs eines Studenten - }, - error: loadError - }).success(function(data){ - data.result.forEach(function(e){ - $("#pruefungen").append(""); + $("#pruefungen").empty(); + if(data.error === 'false') + { + data.result.pruefungen.forEach(function(e){ + var table = writePruefungsTable(e, data); + $("#pruefungen").append(table); }); - }); + } + else + { + $("#pruefungen").append("Keine Daten vorhanden."); + } + }).complete(function(event, xhr, settings){ + setTablesorter("table1"); }); } -function loadTermine(pruefung_id) +function loadPruefungenOfStudiengang() { - if($("#prfTermine").attr("disabled") === "disabled") - { - $("#prfTermine").attr("disabled", false); - } - if(pruefung_id!=="null" && pruefung_id!==null) - { - $.ajax({ - dataType: 'json', - url: "./pruefungsanmeldung.json.php", - type: "POST", - data: { - method: "loadTermine", - pruefung_id: pruefung_id - }, - error: loadError - }).success(function(data){ - $("#prfTermine").html(""); - data.result.forEach(function(e){ - var termin = e.von.split(" "); - termin = termin[0].split("-"); - termin = new Date(termin[0], termin[1]-1,termin[2]); - termin = termin.getDate()+"."+(termin.getMonth()+1)+"."+termin.getFullYear(); - $("#prfTermine").append(""); + $.ajax({ + dataType: 'json', + url: "./pruefungsanmeldung.json.php", + type: "POST", + data: { + method: "getPruefungByLvFromStudiengang" + }, + error: loadError + }).success(function(data){ + if(data.error === 'false') + { + data.result.pruefungen.forEach(function(e){ + var table = writePruefungsTable(e, data); + $("#pruefungenStudiengang").append(table); }); - - }); - } - else - { - $("#prfTermine").html(""); - } + } + else + { + $("#pruefungenStudiengang").append("Keine Daten vorhanden."); + } + }).complete(function(event, xhr, settings){ + setTablesorter("table2"); + }); } -function showPruefungsDetails() +function loadPruefungenGesamt() { - var prfId = $("#pruefungen option:selected").val(); + $.ajax({ + dataType: 'json', + url: "./pruefungsanmeldung.json.php", + type: "POST", + data: { + method: "getAllPruefungen", + }, + error: loadError + }).success(function(data){ + data.result.pruefungen.forEach(function(e){ + var table = writePruefungsTable(e, data); + $("#pruefungenGesamt").append(table); + }); + }).complete(function(event, xhr, settings){ + setTablesorter("table3"); + }); + +} + +function writePruefungsTable(e, data) +{ + var row = ""; + var teilnehmer = ""; + var button = ""; + row += ""+e.organisationseinheit+""+e.lehrveranstaltung[0].bezeichnung+""; + e.pruefung.termine.forEach(function(d){ + var termin = d.von.split(" "); + termin = termin[0].split("-"); + termin = new Date(termin[0], termin[1]-1,termin[2]); + termin = termin.getDate()+"."+(termin.getMonth()+1)+"."+termin.getFullYear(); + row += termin+"
"; + + if(d.max === null) + { + teilnehmer += "unbegrenzt
"; + } + else + { + teilnehmer += (d.max - d.teilnehmer)+"/"+d.max+"
"; + } + var storno = false; + var anmeldung_id = null; + data.result.anmeldungen.forEach(function(anmeldung){ + if((anmeldung.pruefungstermin_id === d.pruefungstermin_id) && (anmeldung.lehrveranstaltung_id === e.lehrveranstaltung[0].lehrveranstaltung_id)) + { + storno = true; + anmeldung_id= anmeldung.pruefungsanmeldung_id; + } + }); + if(storno) + { + button += "
"; + } + else + { +// button += "
"; + button += "
"; + + } + }); + row += ""+teilnehmer+""; + row += ""+button+""; + return row; +} + +function showPruefungsDetails(prfId, lvId) +{ + var prfId = prfId; if(prfId!=="null") { $.ajax({ @@ -245,20 +281,34 @@ function showPruefungsDetails() }, error: loadError }).success(function(data){ - var e = data.result[0]; - loadTermine(e.pruefung_id); - $("#prfTyp").html(e.pruefungstyp_kurzbz); - $("#prfMethode").html(e.methode); - $("#prfBeschreibung").html(e.beschreibung); - if(e.einzeln === true) - { - $("#prfEinzeln").html("Einzelprüfung!"); - } - else - { - $("#prfEinzeln").html(""); - } - }); + data.result.forEach(function(e){ + if(e.lehrveranstaltung.lehrveranstaltung_id === lvId) + { + var p = e.pruefung; + var l = e.lehrveranstaltung + $("#prfTyp").html(p.pruefungstyp_kurzbz); + $("#prfMethode").html(p.methode); + $("#prfBeschreibung").html(p.beschreibung); + if(p.einzeln === true) + { + $("#prfEinzeln").html("Einzelprüfung!"); + } + else + { + $("#prfEinzeln").html(""); + } + $("#lvBez").html(l.bezeichnung); + if(l.ects !== null) + { + $("#lvEcts").html(l.ects); + } + else + { + $("#lvEcts").html("0"); + } + } + }); + }); } else { @@ -268,12 +318,38 @@ function showPruefungsDetails() } } -function saveAnmeldung() +function openDialog(lehrveranstaltung_id, termin_id, lvBezeichnung, terminVon, terminBis) { - var lehrveranstaltung_id = $("#pruefungen option:selected").attr("lv"); - var termin_id = $("#prfTermine option:selected").val(); - var bemerkungen = $("#prfWuensche").val(); - var studiensemester_kurzbz = $("#studiensemester").val(); + $("#lehrveranstaltungHidden").val(lehrveranstaltung_id); + $("#terminHidden").val(termin_id); + $("#lehrveranstaltung").html(lvBezeichnung); + + var start = terminVon; + var ende = terminBis; + start = start.split(' '); + ende = ende.split(' '); + var startTime = start[1]; + var endeTime = ende[1]; + start = start[0].split('-'); + ende = ende[0].split('-'); + start = new Date(start[0], start[1]-1,start[2]); + ende = new Date(ende[0], ende[1]-1,ende[2]); + start = start.getDate()+"."+(start.getMonth()+1)+"."+start.getFullYear(); + ende = ende.getDate()+"."+(ende.getMonth()+1)+"."+ende.getFullYear(); + + start += " "+startTime.substr(0,5)+" Uhr"; + ende += " "+endeTime.substr(0,5)+" Uhr"; + $("#terminVon").html(start); + $("#terminBis").html(ende); + $("#saveDialog").dialog("open"); +} + +function saveAnmeldung(lehrveranstaltung_id, termin_id) +{ + var lehrveranstaltung_id = $("#lehrveranstaltungHidden").val(); + var termin_id = $("#terminHidden").val(); + var bemerkungen = $("#anmeldungBemerkung").val(); +// var studiensemester_kurzbz = $("#studiensemesterHidden").val(); $.ajax({ dataType: 'json', @@ -283,22 +359,68 @@ function saveAnmeldung() method: "saveAnmeldung", termin_id: termin_id, lehrveranstaltung_id: lehrveranstaltung_id, - bemerkung: bemerkungen, - studiensemester_kurzbz: studiensemester_kurzbz + bemerkung: bemerkungen +// studiensemester_kurzbz: studiensemester_kurzbz }, error: loadError }).success(function(data){ if(data.error === 'false') { $("#message").html(data.result); + $("#message").effect("highlight", { + duration: 4000, + color: "green" + }); } else { $("#message").html(data.errormsg); + $("#message").effect("highlight", { + duration: 4000, + color: "red" + }); } resetForm(); + }).complete(function(event, xhr, settings){ + $("#saveDialog").dialog("close"); + refresh(); }); - +} + +function stornoAnmeldung(pruefungsanmeldung_id) +{ + if(confirm("Anmeldung wirklich stornieren?")) + { + $.ajax({ + dataType: 'json', + url: "./pruefungsanmeldung.json.php", + type: "POST", + data: { + method: "stornoAnmeldung", + pruefungsanmeldung_id: pruefungsanmeldung_id + }, + error: loadError + }).success(function(data){ + if(data.error === 'false') + { + $("#message").html(data.result); + $("#message").effect("highlight", { + duration: 4000, + color: "green" + }); + } + else + { + $("#message").html(data.errormsg); + $("#message").effect("highlight", { + duration: 4000, + color: "red" + }); + } + }).complete(function(event, xhr, settings){ + refresh(); + }); + } } function clearPrfDetails() @@ -312,8 +434,37 @@ function clearPrfDetails() function resetForm() { $("form").find("input[type=text], textarea").val(""); - $("#prfTermine").val("null"); - $("#pruefungen").val("null"); - $("#prfTermine").attr("disabled", true); clearPrfDetails(); +} + +function setTablesorter(tableId) +{ + if($("#"+tableId)[0].hasInitialized !== true) + { + $("#"+tableId).tablesorter({ + widgets: ["zebra"], + sortList: [[1,0]] + }); + } + else + { + $("#"+tableId).trigger("updateAll"); + var sorting = [[1,0],[0,0]]; + $("#"+tableId).trigger("sorton",[sorting]); + } +} + +function clearAccordion() +{ + $("#accordion tbody").each(function(i, v){ + $("#"+v.id).empty(); + }); +} + +function refresh() +{ + clearAccordion(); + loadPruefungen(); + loadPruefungenOfStudiengang(); + loadPruefungenGesamt(); } \ No newline at end of file diff --git a/cis/private/lehre/pruefung/pruefungsanmeldung.json.php b/cis/private/lehre/pruefung/pruefungsanmeldung.json.php index da765fc81..1d5a0f8e7 100644 --- a/cis/private/lehre/pruefung/pruefungsanmeldung.json.php +++ b/cis/private/lehre/pruefung/pruefungsanmeldung.json.php @@ -14,44 +14,143 @@ 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'); $uid = get_uid(); $rechte = new benutzerberechtigung(); $rechte->getBerechtigungen($uid); -//TODO Berechtigung -//if(!$rechte->isBerechtigt('lehre/pruefungsanmeldung')) -// die('Sie haben keine Berechtigung für diese Seite'); +$studiensemester = new studiensemester(); +$aktStudiensemester = $studiensemester->getakt(); $method = isset($_REQUEST['method'])?$_REQUEST['method']:''; switch($method) { case 'getPruefungByLv': - $lehrveranstaltungen=$_REQUEST['lvIds']; + $lehrveranstaltungen = new lehrveranstaltung(); + //TODO + $lehrveranstaltungen->load_lva_student($uid); + $lvIds = array(); + foreach($lehrveranstaltungen->lehrveranstaltungen as $lvs) + { + array_push($lvIds, $lvs->lehrveranstaltung_id); + } + $lehrveranstaltungen=$lvIds; $pruefung = new pruefungCis(); + //TODO nur Prüfungen des aktuellen Studiensemesters if($pruefung->getPruefungByLv($lehrveranstaltungen)) { - $pruefungen = array(); - foreach($pruefung->lehrveranstaltungen as $lv) - { - //TODO Datenoverhead beseitigen - $lehrveranstaltung = new lehrveranstaltung($lv->lehrveranstaltung_id); - $prf = new stdClass(); - $prf->pruefung = new pruefungCis($lv->pruefung_id); - $prf->lehrveranstaltung = $lehrveranstaltung; - array_push($pruefungen, $prf); - } - - $data['result']=$pruefungen; - $data['error']='false'; - $data['errormsg']=''; + $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; + $lveranstaltung = new lehrveranstaltung($lehreinheiten[0]->lehrfach_id); + $oe = new organisationseinheit($lveranstaltung->oe_kurzbz); + $prf->organisationseinheit = $oe->bezeichnung; + 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; + $data['error']='true'; + $data['errormsg']=$pruefung->errormsg; + } + break; + case 'getPruefungByLvFromStudiengang': + $lehrveranstaltungen = new lehrveranstaltung(); + $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(); + //TODO nur Prüfungen des aktuellen Studiensemesters + if($pruefung->getPruefungByLv($lehrveranstaltungen)) + { + $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; + $lveranstaltung = new lehrveranstaltung($lehreinheiten[0]->lehrfach_id); + $oe = new organisationseinheit($lveranstaltung->oe_kurzbz); + $prf->organisationseinheit = $oe->bezeichnung; + 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; } break; case 'loadPruefung': @@ -59,8 +158,20 @@ switch($method) $pruefung = new pruefungCis(); if($pruefung->load($pruefung_id)) { + $temp = array(); + $pruefung->getLehrveranstaltungenByPruefung(); + foreach($pruefung->lehrveranstaltungen as $lv) + { + $lehrveranstaltung = new lehrveranstaltung($lv->lehrveranstaltung_id); + $lehrveranstaltung = $lehrveranstaltung->cleanResult(); + $prf = new stdClass(); + $prf->lehrveranstaltung = $lehrveranstaltung[0]; + $prf->pruefung = $pruefung; + array_push($temp, $prf); + } + $data['result'] = array(); - array_push($data['result'], $pruefung); + $data['result'] = $temp; $data['error']='false'; $data['errormsg']=''; } @@ -91,20 +202,23 @@ switch($method) $termin = new pruefungstermin($_REQUEST["termin_id"]); 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->status = "angemeldet"; + $anmeldung->reihung = $reihung+1; + $anmeldung->status_kurzbz = "angemeldet"; - $studiensemester_kurbz = $_REQUEST['studiensemester_kurzbz']; +// $studiensemester_kurbz = $_REQUEST['studiensemester_kurzbz']; $lehrveranstaltung = new lehrveranstaltung($_REQUEST["lehrveranstaltung_id"]); $konto = new konto(); - $creditpoints = $konto->getCreditPoints($uid, $studiensemester_kurzbz); - $creditpoints = 1.5; + $creditpoints = $konto->getCreditPoints($uid, $aktStudiensemester); +// $creditpoints = 1.5; if($creditpoints !== false) { if($creditpoints < $lehrveranstaltung->ects) @@ -116,7 +230,7 @@ switch($method) } //Kollisionsprüfung - $anmeldungen = $anmeldung->getAnmeldungenByStudent($uid); + $anmeldungen = $anmeldung->getAnmeldungenByStudent($uid, $aktStudiensemester); foreach($anmeldungen as $temp) { $datum = new datum(); @@ -140,6 +254,7 @@ switch($method) } if($anmeldung->save(true)) +// if(true) { $data['result'] = "Anmeldung erfolgreich!"; $data['error']='false'; @@ -151,6 +266,76 @@ switch($method) $data['errormsg']=$anmeldung->errormsg; } break; + case 'getAllPruefungen': + $pruefung = new pruefungCis(); + //TODO Prüfungen des aktuellen Studiensemesters??? + 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; + $lveranstaltung = new lehrveranstaltung($lehreinheiten[0]->lehrfach_id); + $oe = new organisationseinheit($lveranstaltung->oe_kurzbz); + $prf->organisationseinheit = $oe->bezeichnung; + 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['result']=$pruefungen; + $data['error']='false'; + $data['errormsg']=''; + } + else + { + $data['error']='true'; + $data['errormsg']=$pruefung->errormsg; + } + break; + case 'stornoAnmeldung': + $pruefungsanmeldung_id=$_REQUEST['pruefungsanmeldung_id']; + $pruefungsanmeldung = new pruefungsanmeldung(); + if($pruefungsanmeldung->delete($pruefungsanmeldung_id, $uid)) + { + $data['result']='Anmeldung erfolgreich gelöscht.'; + $data['error']='false'; + $data['errormsg']=''; + } + else + { + $data['error']='true'; + $data['errormsg']=$pruefung->errormsg; + } + break; default: break; } diff --git a/cis/private/lehre/pruefung/pruefungsanmeldung.php b/cis/private/lehre/pruefung/pruefungsanmeldung.php index e259a6595..d244e1d25 100644 --- a/cis/private/lehre/pruefung/pruefungsanmeldung.php +++ b/cis/private/lehre/pruefung/pruefungsanmeldung.php @@ -28,6 +28,7 @@ require_once('../../../../include/benutzerberechtigung.class.php'); require_once('../../../../include/lehrveranstaltung.class.php'); require_once('../../../../include/konto.class.php'); require_once('../../../../include/studiensemester.class.php'); +require_once('../../../../include/student.class.php'); $uid = get_uid(); @@ -35,16 +36,19 @@ $db = new basis_db(); $rechte = new benutzerberechtigung(); $rechte->getBerechtigungen($uid); + +//TODO Berechtigung //if(!$rechte->isBerechtigt('lehre/pruefungsanmeldung')) // die('Sie haben keine Berechtigung für diese Seite'); -//TODO $lehrveranstaltung = new lehrveranstaltung(); -$lehrveranstaltung->load_lva_student("if11b044"); +$lehrveranstaltung->load_lva_student($uid); $studiensemester = new studiensemester(); $studiensemester->getAll(); +$benutzer = new student($uid); + ?> @@ -52,6 +56,7 @@ $studiensemester->getAll(); Prüfungsanmeldung + @@ -59,101 +64,196 @@ $studiensemester->getAll(); -

Prüfungsanmeldung

-
-
- - - - - - - - - - - - - - - - - - - - - -
Studiensemester: - -
- Prüfung: - - - -
- Termin: - - -
- Bemerkungen: - - -
-
-
- +

Prüfungsanmeldung für vorname." ".$benutzer->nachname." (".$uid.")"; ?>

+
+
+

LV-Details

+ Bezeichnung:
+ ECTS:
-
-
-

Prüfungsdetails

+
- Typ:
- Methode:
- Beschreibung:
-
+

Prüfungsdetails

+ Typ:
+ Methode:
+ Beschreibung:
+
- +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
  + + + +
Lehrveranstaltung: + +
Von: + + +
Bis: + +
Bemerkung: + +
+
+
diff --git a/include/js/jquery.tablesorter.min.js b/include/js/jquery.tablesorter.min.js new file mode 100644 index 000000000..7d196f8ad --- /dev/null +++ b/include/js/jquery.tablesorter.min.js @@ -0,0 +1,752 @@ +/*! + * TableSorter 2.15.11 min - Client-side table sorting with ease! + * Copyright (c) 2007 Christian Bach + */ +!function(g) { + g.extend({tablesorter: new function() { + function d() { + var a = arguments[0], b = 1 < arguments.length ? Array.prototype.slice.call(arguments) : a; + if ("undefined" !== typeof console && "undefined" !== typeof console.log) + console[/error/i.test(a) ? "error" : /warn/i.test(a) ? "warn" : "log"](b); + else + alert(b) + } + function t(a, b) { + d(a + " (" + ((new Date).getTime() - b.getTime()) + "ms)") + } + function m(a) { + for (var b in a) + return!1; + return!0 + } + function q(a, b, c) { + if (!b) + return""; + var h = a.config, e = h.textExtraction, f = "", f = "simple" === e ? h.supportsTextContent ? b.textContent : g(b).text() : "function" === typeof e ? e(b, a, c) : "object" === typeof e && e.hasOwnProperty(c) ? e[c](b, a, c) : h.supportsTextContent ? b.textContent : g(b).text(); + return g.trim(f) + } + function s(a) { + var b = a.config, c = b.$tbodies = b.$table.children("tbody:not(." + b.cssInfoBlock + ")"), h, e, w, k, n, g, l, z = ""; + if (0 === c.length) + return b.debug ? d("Warning: *Empty table!* Not building a parser cache") : ""; + b.debug && (l = new Date, d("Detecting parsers for each column")); + c = c[0].rows; + if (c[0]) + for (h = [], e = c[0].cells.length, w = 0; w < e; w++) { + k = b.$headers.filter(":not([colspan])"); + k = k.add(b.$headers.filter('[colspan="1"]')).filter('[data-column="' + w + '"]:last'); + n = b.headers[w]; + g = f.getParserById(f.getData(k, n, "sorter")); + b.empties[w] = f.getData(k, n, "empty") || b.emptyTo || (b.emptyToBottom ? "bottom" : "top"); + b.strings[w] = f.getData(k, n, "string") || b.stringTo || "max"; + if (!g) + a:{ + k = a; + n = c; + g = -1; + for (var m = w, y = void 0, x = f.parsers.length, r = !1, s = "", y = !0; "" === s && y; ) + g++, n[g] ? (r = n[g].cells[m], s = q(k, r, m), k.config.debug && d("Checking if value was empty on row " + g + ", column: " + m + ': "' + s + '"')) : y = !1; + for (; 0 <= --x; ) + if ((y = f.parsers[x]) && "text" !== y.id && y.is && y.is(s, k, r)) { + g = y; + break a + } + g = f.getParserById("text") + } + b.debug && (z += "column:" + w + "; parser:" + g.id + "; string:" + b.strings[w] + "; empty: " + b.empties[w] + "\n"); + h.push(g) + } + b.debug && (d(z), t("Completed detecting parsers", l)); + b.parsers = h + } + function v(a) { + var b = a.tBodies, c = a.config, h, e, w = c.parsers, k, n, p, l, z, m, y, x = []; + c.cache = {}; + if (!w) + return c.debug ? d("Warning: *Empty table!* Not building a cache") : ""; + c.debug && (y = new Date); + c.showProcessing && f.isProcessing(a, !0); + for (l = 0; l < b.length; l++) + if (c.cache[l] = {row: [], normalized: []}, !g(b[l]).hasClass(c.cssInfoBlock)) { + h = b[l] && b[l].rows.length || 0; + e = b[l].rows[0] && b[l].rows[0].cells.length || 0; + for (n = 0; n < h; ++n) + if (z = g(b[l].rows[n]), m = [], z.hasClass(c.cssChildRow)) + c.cache[l].row[c.cache[l].row.length - 1] = c.cache[l].row[c.cache[l].row.length - 1].add(z); + else { + c.cache[l].row.push(z); + for (p = 0; p < e; ++p) + "undefined" === typeof w[p] ? c.debug && d("No parser found for cell:", z[0].cells[p], "does it have a header?") : (k = q(a, z[0].cells[p], p), k = w[p].format(k, a, z[0].cells[p], p), m.push(k), "numeric" === (w[p].type || "").toLowerCase() && (x[p] = Math.max(Math.abs(k) || 0, x[p] || 0))); + m.push(c.cache[l].normalized.length); + c.cache[l].normalized.push(m) + } + c.cache[l].colMax = x + } + c.showProcessing && f.isProcessing(a); + c.debug && t("Building cache for " + h + " rows", y) + } + function A(a, b) { + var c = a.config, h = c.widgetOptions, e = a.tBodies, w = [], k = c.cache, d, p, l, z, q, y, x, r, s, u, v; + if (m(k)) + return c.appender ? c.appender(a, w) : a.isUpdating ? c.$table.trigger("updateComplete", a) : ""; + c.debug && (v = new Date); + for (r = 0; r < e.length; r++) + if (d = g(e[r]), d.length && !d.hasClass(c.cssInfoBlock)) { + q = f.processTbody(a, d, !0); + d = k[r].row; + p = k[r].normalized; + z = (l = p.length) ? p[0].length - 1 : 0; + for (y = 0; y < l; y++) + if (u = p[y][z], w.push(d[u]), !c.appender || c.pager && !(c.pager.removeRows && h.pager_removeRows || c.pager.ajax)) + for (s = d[u].length, x = 0; x < s; x++) + q.append(d[u][x]); + f.processTbody(a, q, !1) + } + c.appender && c.appender(a, w); + c.debug && t("Rebuilt table", v); + b || c.appender || f.applyWidget(a); + a.isUpdating && c.$table.trigger("updateComplete", a) + } + function D(a) { + var b = [], c = {}, h = 0, e = g(a).children("thead, tfoot").children("tr"), f, d, n, p, l, m, t, q, s, r; + for (f = 0; f < e.length; f++) + for (l = e[f].cells, d = 0; d < l.length; d++) { + p = l[d]; + m = p.parentNode.rowIndex; + t = m + "-" + p.cellIndex; + q = p.rowSpan || 1; + s = p.colSpan || 1; + "undefined" === typeof b[m] && (b[m] = []); + for (n = 0; n < b[m].length + 1; n++) + if ("undefined" === typeof b[m][n]) { + r = n; + break + } + c[t] = r; + h = Math.max(r, h); + g(p).attr({"data-column": r}); + for (n = m; n < m + q; n++) + for ("undefined" === typeof b[n] && (b[n] = []), t = b[n], p = r; p < r + s; p++) + t[p] = "x" + } + a.config.columns = h + 1; + return c + } + function C(a) { + return/^d/i.test(a) || 1 === a + } + function E(a) { + var b = D(a), c, h, e, w, k, n, p, l = a.config; + l.headerList = []; + l.headerContent = []; + l.debug && (p = new Date); + w = l.cssIcon ? '' : ""; + l.$headers = g(a).find(l.selectorHeaders).each(function(a) { + h = g(this); + c = l.headers[a]; + l.headerContent[a] = g(this).html(); + k = l.headerTemplate.replace(/\{content\}/g, g(this).html()).replace(/\{icon\}/g, w); + l.onRenderTemplate && (e = l.onRenderTemplate.apply(h, [a, k])) && "string" === typeof e && (k = e); + g(this).html('
' + k + "
"); + l.onRenderHeader && l.onRenderHeader.apply(h, [a]); + this.column = b[this.parentNode.rowIndex + "-" + this.cellIndex]; + this.order = C(f.getData(h, c, "sortInitialOrder") || l.sortInitialOrder) ? [1, 0, 2] : [0, 1, 2]; + this.count = -1; + this.lockedOrder = !1; + n = f.getData(h, c, "lockedOrder") || !1; + "undefined" !== typeof n && !1 !== n && (this.order = this.lockedOrder = C(n) ? [1, 1, 1] : [0, 0, 0]); + h.addClass(f.css.header + " " + l.cssHeader); + l.headerList[a] = this; + h.parent().addClass(f.css.headerRow + " " + l.cssHeaderRow).attr("role", "row"); + l.tabIndex && h.attr("tabindex", 0) + }).attr({scope: "col", role: "columnheader"}); + G(a); + l.debug && (t("Built headers:", p), d(l.$headers)) + } + function B(a, b, c) { + var h = a.config; + h.$table.find(h.selectorRemove).remove(); + s(a); + v(a); + H(h.$table, b, c) + } + function G(a) { + var b, c, h = a.config; + h.$headers.each(function(e, d) { + c = g(d); + b = "false" === f.getData(d, h.headers[e], "sorter"); + d.sortDisabled = b; + c[b ? "addClass" : "removeClass"]("sorter-false").attr("aria-disabled", "" + b); + a.id && (b ? c.removeAttr("aria-controls") : c.attr("aria-controls", a.id)) + }) + } + function F(a) { + var b, c, h, e = a.config, d = e.sortList, k = f.css.sortNone + " " + e.cssNone, n = [f.css.sortAsc + " " + e.cssAsc, f.css.sortDesc + " " + e.cssDesc], p = ["ascending", "descending"], l = g(a).find("tfoot tr").children().removeClass(n.join(" ")); + e.$headers.removeClass(n.join(" ")).addClass(k).attr("aria-sort", "none"); + h = d.length; + for (b = 0; b < h; b++) + if (2 !== d[b][1] && (a = e.$headers.not(".sorter-false").filter('[data-column="' + d[b][0] + '"]' + (1 === h ? ":last" : "")), a.length)) + for (c = 0; c < a.length; c++) + a[c].sortDisabled || (a.eq(c).removeClass(k).addClass(n[d[b][1]]).attr("aria-sort", p[d[b][1]]), l.length && l.filter('[data-column="' + d[b][0] + '"]').eq(c).addClass(n[d[b][1]])); + e.$headers.not(".sorter-false").each(function() { + var a = g(this), b = this.order[(this.count + 1) % (e.sortReset ? 3 : 2)], b = a.text() + ": " + f.language[a.hasClass(f.css.sortAsc) ? "sortAsc" : a.hasClass(f.css.sortDesc) ? "sortDesc" : "sortNone"] + f.language[0 === b ? "nextAsc" : 1 === b ? "nextDesc" : "nextNone"]; + a.attr("aria-label", b) + }) + } + function L(a) { + if (a.config.widthFixed && 0 === g(a).find("colgroup").length) { + var b = g(""), c = g(a).width(); + g(a.tBodies[0]).find("tr:first").children("td:visible").each(function() { + b.append(g("").css("width", parseInt(g(this).width() / c * 1E3, 10) / 10 + "%")) + }); + g(a).prepend(b) + } + } + function M(a, b) { + var c, h, e, d = a.config, f = b || d.sortList; + d.sortList = []; + g.each(f, function(a, b) { + c = [parseInt(b[0], 10), parseInt(b[1], 10)]; + if (e = d.$headers[c[0]]) + d.sortList.push(c), h = g.inArray(c[1], e.order), e.count = 0 <= h ? h : c[1] % (d.sortReset ? 3 : 2) + }) + } + function N(a, b) { + return a && a[b] ? a[b].type || "" : "" + } + function O(a, b, c) { + var h, e, d, k = a.config, n = !c[k.sortMultiSortKey], p = k.$table; + p.trigger("sortStart", a); + b.count = c[k.sortResetKey] ? 2 : (b.count + 1) % (k.sortReset ? 3 : 2); + k.sortRestart && (e = b, k.$headers.each(function() { + this === e || !n && g(this).is("." + f.css.sortDesc + ",." + f.css.sortAsc) || (this.count = -1) + })); + e = b.column; + if (n) { + k.sortList = []; + if (null !== k.sortForce) + for (h = k.sortForce, c = 0; c < h.length; c++) + h[c][0] !== e && k.sortList.push(h[c]); + h = b.order[b.count]; + if (2 > h && (k.sortList.push([e, h]), 1 < b.colSpan)) + for (c = 1; c < b.colSpan; c++) + k.sortList.push([e + c, h]) + } else { + if (k.sortAppend && 1 < k.sortList.length) + for (c = 0; c < k.sortAppend.length; c++) + d = f.isValueInArray(k.sortAppend[c][0], k.sortList), 0 <= d && k.sortList.splice(d, 1); + if (0 <= f.isValueInArray(e, k.sortList)) + for (c = 0; c < k.sortList.length; c++) + d = k.sortList[c], h = k.$headers[d[0]], d[0] === e && (d[1] = h.order[b.count], 2 === d[1] && (k.sortList.splice(c, 1), h.count = -1)); + else if (h = b.order[b.count], 2 > h && (k.sortList.push([e, h]), 1 < b.colSpan)) + for (c = 1; c < b.colSpan; c++) + k.sortList.push([e + c, h]) + } + if (null !== k.sortAppend) + for (h = k.sortAppend, c = 0; c < h.length; c++) + h[c][0] !== e && k.sortList.push(h[c]); + p.trigger("sortBegin", a); + setTimeout(function() { + F(a); + I(a); + A(a); + p.trigger("sortEnd", a) + }, 1) + } + function I(a) { + var b, c, h, e, d, k, g, p, l, q, s, u, x = 0, r = a.config, v = r.textSorter || "", A = r.sortList, B = A.length, C = a.tBodies.length; + if (!r.serverSideSorting && !m(r.cache)) { + r.debug && (l = new Date); + for (c = 0; c < C; c++) + d = r.cache[c].colMax, p = (k = r.cache[c].normalized) && k[0] ? k[0].length - 1 : 0, k.sort(function(c, k) { + for (b = 0; b < B; b++) { + e = A[b][0]; + g = A[b][1]; + x = 0 === g; + if (r.sortStable && c[e] === k[e] && 1 === B) + break; + (h = /n/i.test(N(r.parsers, e))) && r.strings[e] ? (h = "boolean" === typeof r.string[r.strings[e]] ? (x ? 1 : -1) * (r.string[r.strings[e]] ? -1 : 1) : r.strings[e] ? r.string[r.strings[e]] || 0 : 0, q = r.numberSorter ? r.numberSorter(c[e], k[e], x, d[e], a) : f["sortNumeric" + (x ? "Asc" : "Desc")](c[e], k[e], h, d[e], e, a)) : (s = x ? c : k, u = x ? k : c, q = "function" === typeof v ? v(s[e], u[e], x, e, a) : "object" === typeof v && v.hasOwnProperty(e) ? v[e](s[e], u[e], x, e, a) : f["sortNatural" + (x ? "Asc" : "Desc")](c[e], k[e], e, a, r)); + if (q) + return q + } + return c[p] - k[p] + }); + r.debug && t("Sorting on " + A.toString() + " and dir " + g + " time", l) + } + } + function J(a, b) { + a[0].isUpdating && a.trigger("updateComplete"); + "function" === typeof b && b(a[0]) + } + function H(a, b, c) { + var h = a[0].config.sortList; + !1 !== b && !a[0].isProcessing && h.length ? a.trigger("sorton", [h, function() { + J(a, c) + }, !0]) : J(a, c) + } + function K(a) { + var b = a.config, c = b.$table; + c.unbind("sortReset update updateRows updateCell updateAll addRows updateComplete sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave ".split(" ").join(b.namespace + " ")).bind("sortReset" + b.namespace, function(c) { + c.stopPropagation(); + b.sortList = []; + F(a); + I(a); + A(a) + }).bind("updateAll" + b.namespace, function(c, e, d) { + c.stopPropagation(); + a.isUpdating = !0; + f.refreshWidgets(a, !0, !0); + f.restoreHeaders(a); + E(a); + f.bindEvents(a, b.$headers); + K(a); + B(a, e, d) + }).bind("update" + b.namespace + " updateRows" + b.namespace, function(b, c, d) { + b.stopPropagation(); + a.isUpdating = !0; + G(a); + B(a, c, d) + }).bind("updateCell" + b.namespace, function(h, e, d, f) { + h.stopPropagation(); + a.isUpdating = !0; + c.find(b.selectorRemove).remove(); + var n, p, l; + n = c.find("tbody"); + h = n.index(g(e).parents("tbody").filter(":first")); + var m = g(e).parents("tr").filter(":first"); + e = g(e)[0]; + n.length && 0 <= h && (p = n.eq(h).find("tr").index(m), l = e.cellIndex, n = b.cache[h].normalized[p].length - 1, b.cache[h].row[a.config.cache[h].normalized[p][n]] = m, b.cache[h].normalized[p][l] = b.parsers[l].format(q(a, e, l), a, e, l), H(c, d, f)) + }).bind("addRows" + b.namespace, function(h, e, d, f) { + h.stopPropagation(); + a.isUpdating = !0; + if (m(b.cache)) + G(a), B(a, d, f); + else { + var g, p = e.filter("tr").length, l = [], t = e[0].cells.length, v = c.find("tbody").index(e.parents("tbody").filter(":first")); + b.parsers || s(a); + for (h = 0; h < p; h++) { + for (g = 0; g < t; g++) + l[g] = b.parsers[g].format(q(a, e[h].cells[g], g), a, e[h].cells[g], g); + l.push(b.cache[v].row.length); + b.cache[v].row.push([e[h]]); + b.cache[v].normalized.push(l); + l = [] + } + H(c, d, f) + } + }).bind("updateComplete" + b.namespace, function() { + a.isUpdating = !1 + }).bind("sorton" + b.namespace, function(b, e, d, f) { + var g = a.config; + b.stopPropagation(); + c.trigger("sortStart", this); + M(a, e); + F(a); + g.delayInit && m(g.cache) && v(a); + c.trigger("sortBegin", this); + I(a); + A(a, f); + c.trigger("sortEnd", this); + "function" === typeof d && d(a) + }).bind("appendCache" + b.namespace, function(b, c, d) { + b.stopPropagation(); + A(a, d); + "function" === typeof c && c(a) + }).bind("updateCache" + b.namespace, function(c, e) { + b.parsers || s(a); + v(a); + "function" === typeof e && e(a) + }).bind("applyWidgetId" + b.namespace, function(c, e) { + c.stopPropagation(); + f.getWidgetById(e).format(a, b, b.widgetOptions) + }).bind("applyWidgets" + b.namespace, function(b, c) { + b.stopPropagation(); + f.applyWidget(a, c) + }).bind("refreshWidgets" + b.namespace, function(b, c, d) { + b.stopPropagation(); + f.refreshWidgets(a, c, d) + }).bind("destroy" + b.namespace, function(b, c, d) { + b.stopPropagation(); + f.destroy(a, c, d) + }) + } + var f = this; + f.version = "2.15.11"; + f.parsers = []; + f.widgets = []; + f.defaults = {theme: "default", widthFixed: !1, showProcessing: !1, headerTemplate: "{content}", onRenderTemplate: null, onRenderHeader: null, cancelSelection: !0, tabIndex: !0, dateFormat: "mmddyyyy", sortMultiSortKey: "shiftKey", sortResetKey: "ctrlKey", usNumberFormat: !0, delayInit: !1, serverSideSorting: !1, headers: {}, ignoreCase: !0, sortForce: null, sortList: [], sortAppend: null, sortStable: !1, sortInitialOrder: "asc", sortLocaleCompare: !1, sortReset: !1, sortRestart: !1, emptyTo: "bottom", stringTo: "max", textExtraction: "simple", textSorter: null, numberSorter: null, widgets: [], widgetOptions: {zebra: ["even", "odd"]}, initWidgets: !0, initialized: null, tableClass: "", cssAsc: "", cssDesc: "", cssNone: "", cssHeader: "", cssHeaderRow: "", cssProcessing: "", cssChildRow: "tablesorter-childRow", cssIcon: "tablesorter-icon", cssInfoBlock: "tablesorter-infoOnly", selectorHeaders: "> thead th, > thead td", selectorSort: "th, td", selectorRemove: ".remove-me", debug: !1, headerList: [], empties: {}, strings: {}, parsers: []}; + f.css = {table: "tablesorter", childRow: "tablesorter-childRow", header: "tablesorter-header", headerRow: "tablesorter-headerRow", headerIn: "tablesorter-header-inner", icon: "tablesorter-icon", info: "tablesorter-infoOnly", processing: "tablesorter-processing", sortAsc: "tablesorter-headerAsc", sortDesc: "tablesorter-headerDesc", sortNone: "tablesorter-headerUnSorted"}; + f.language = {sortAsc: "Ascending sort applied, ", sortDesc: "Descending sort applied, ", sortNone: "No sort applied, ", nextAsc: "activate to apply an ascending sort", nextDesc: "activate to apply a descending sort", nextNone: "activate to remove the sort"}; + f.log = d; + f.benchmark = t; + f.construct = function(a) { + return this.each(function() { + var b = g.extend(!0, {}, f.defaults, a); + !this.hasInitialized && f.buildTable && "TABLE" !== this.tagName ? f.buildTable(this, b) : f.setup(this, b) + }) + }; + f.setup = function(a, b) { + if (!a || !a.tHead || 0 === a.tBodies.length || !0 === a.hasInitialized) + return b.debug ? d("ERROR: stopping initialization! No table, thead, tbody or tablesorter has already been initialized") : ""; + var c = "", h = g(a), e = g.metadata; + a.hasInitialized = !1; + a.isProcessing = !0; + a.config = b; + g.data(a, "tablesorter", b); + b.debug && g.data(a, "startoveralltimer", new Date); + b.supportsTextContent = "x" === g("x")[0].textContent; + b.supportsDataObject = function(a) { + a[0] = parseInt(a[0], 10); + return 1 < a[0] || 1 === a[0] && 4 <= parseInt(a[1], 10) + }(g.fn.jquery.split(".")); + b.string = {max: 1, min: -1, "max+": 1, "max-": -1, zero: 0, none: 0, "null": 0, top: !0, bottom: !1}; + /tablesorter\-/.test(h.attr("class")) || (c = "" !== b.theme ? " tablesorter-" + b.theme : ""); + b.$table = h.addClass(f.css.table + " " + b.tableClass + c).attr({role: "grid"}); + b.namespace = b.namespace ? "." + b.namespace.replace(/\W/g, "") : ".tablesorter" + Math.random().toString(16).slice(2); + b.$tbodies = h.children("tbody:not(." + b.cssInfoBlock + ")").attr({"aria-live": "polite", "aria-relevant": "all"}); + b.$table.find("caption").length && b.$table.attr("aria-labelledby", "theCaption"); + b.widgetInit = {}; + E(a); + L(a); + s(a); + b.delayInit || v(a); + f.bindEvents(a, b.$headers); + K(a); + b.supportsDataObject && "undefined" !== typeof h.data().sortlist ? b.sortList = h.data().sortlist : e && h.metadata() && h.metadata().sortlist && (b.sortList = h.metadata().sortlist); + f.applyWidget(a, !0); + 0 < b.sortList.length ? h.trigger("sorton", [b.sortList, {}, !b.initWidgets, !0]) : (F(a), b.initWidgets && f.applyWidget(a)); + b.showProcessing && h.unbind("sortBegin" + b.namespace + " sortEnd" + b.namespace).bind("sortBegin" + b.namespace + " sortEnd" + b.namespace, function(b) { + f.isProcessing(a, "sortBegin" === b.type) + }); + a.hasInitialized = !0; + a.isProcessing = !1; + b.debug && f.benchmark("Overall initialization time", g.data(a, "startoveralltimer")); + h.trigger("tablesorter-initialized", a); + "function" === typeof b.initialized && b.initialized(a) + }; + f.isProcessing = function(a, b, c) { + a = g(a); + var h = a[0].config; + a = c || a.find("." + f.css.header); + b ? ("undefined" !== typeof c && 0 < h.sortList.length && (a = a.filter(function() { + return this.sortDisabled ? !1 : 0 <= f.isValueInArray(parseFloat(g(this).attr("data-column")), h.sortList) + })), a.addClass(f.css.processing + " " + h.cssProcessing)) : a.removeClass(f.css.processing + " " + h.cssProcessing) + }; + f.processTbody = function(a, b, c) { + a = g(a)[0]; + if (c) + return a.isProcessing = !0, b.before(''), c = g.fn.detach ? b.detach() : b.remove(); + c = g(a).find("span.tablesorter-savemyplace"); + b.insertAfter(c); + c.remove(); + a.isProcessing = !1 + }; + f.clearTableBody = function(a) { + g(a)[0].config.$tbodies.empty() + }; + f.bindEvents = function(a, b) { + a = g(a)[0]; + var c, h = a.config; + b.find(h.selectorSort).add(b.filter(h.selectorSort)).unbind(["mousedown", "mouseup", "sort", "keyup", ""].join(h.namespace + " ")).bind(["mousedown", "mouseup", "sort", "keyup", ""].join(h.namespace + " "), function(e, d) { + var f; + f = e.type; + if (!(1 !== (e.which || e.button) && !/sort|keyup/.test(f) || "keyup" === f && 13 !== e.which || "mouseup" === f && !0 !== d && 250 < (new Date).getTime() - c)) { + if ("mousedown" === f) + return c = (new Date).getTime(), "INPUT" === e.target.tagName ? "" : !h.cancelSelection; + h.delayInit && m(h.cache) && v(a); + f = /TH|TD/.test(this.tagName) ? this : g(this).parents("th, td")[0]; + f = h.$headers[b.index(f)]; + f.sortDisabled || O(a, f, e) + } + }); + h.cancelSelection && b.attr("unselectable", "on").bind("selectstart", !1).css({"user-select": "none", MozUserSelect: "none"}) + }; + f.restoreHeaders = function(a) { + var b = g(a)[0].config; + b.$table.find(b.selectorHeaders).each(function(a) { + g(this).find("." + f.css.headerIn).length && g(this).html(b.headerContent[a]) + }) + }; + f.destroy = function(a, b, c) { + a = g(a)[0]; + if (a.hasInitialized) { + f.refreshWidgets(a, !0, !0); + var h = g(a), e = a.config, d = h.find("thead:first"), k = d.find("tr." + f.css.headerRow).removeClass(f.css.headerRow + " " + e.cssHeaderRow), n = h.find("tfoot:first > tr").children("th, td"); + d.find("tr").not(k).remove(); + h.removeData("tablesorter").unbind("sortReset update updateAll updateRows updateCell addRows updateComplete sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave keypress sortBegin sortEnd ".split(" ").join(e.namespace + " ")); + e.$headers.add(n).removeClass([f.css.header, e.cssHeader, e.cssAsc, e.cssDesc, f.css.sortAsc, f.css.sortDesc, f.css.sortNone].join(" ")).removeAttr("data-column"); + k.find(e.selectorSort).unbind(["mousedown", "mouseup", "keypress", ""].join(e.namespace + " ")); + f.restoreHeaders(a); + !1 !== b && h.removeClass(f.css.table + " " + e.tableClass + " tablesorter-" + e.theme); + a.hasInitialized = !1; + "function" === typeof c && c(a) + } + }; + f.regex = {chunk: /(^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi, chunks: /(^\\0|\\0$)/, hex: /^0x[0-9a-f]+$/i}; + f.sortNatural = function(a, b) { + if (a === b) + return 0; + var c, d, e, g, k, n; + d = f.regex; + if (d.hex.test(b)) { + c = parseInt(a.match(d.hex), 16); + e = parseInt(b.match(d.hex), 16); + if (c < e) + return-1; + if (c > e) + return 1 + } + c = a.replace(d.chunk, "\\0$1\\0").replace(d.chunks, "").split("\\0"); + d = b.replace(d.chunk, "\\0$1\\0").replace(d.chunks, "").split("\\0"); + n = Math.max(c.length, d.length); + for (k = 0; k < n; k++) { + e = isNaN(c[k]) ? c[k] || 0 : parseFloat(c[k]) || 0; + g = isNaN(d[k]) ? d[k] || 0 : parseFloat(d[k]) || 0; + if (isNaN(e) !== isNaN(g)) + return isNaN(e) ? 1 : -1; + typeof e !== typeof g && (e += "", g += ""); + if (e < g) + return-1; + if (e > g) + return 1 + } + return 0 + }; + f.sortNaturalAsc = function(a, b, c, d, e) { + if (a === b) + return 0; + c = e.string[e.empties[c] || e.emptyTo]; + return"" === a && 0 !== c ? "boolean" === typeof c ? c ? -1 : 1 : -c || -1 : "" === b && 0 !== c ? "boolean" === typeof c ? c ? 1 : -1 : c || 1 : f.sortNatural(a, b) + }; + f.sortNaturalDesc = function(a, b, c, d, e) { + if (a === b) + return 0; + c = e.string[e.empties[c] || e.emptyTo]; + return"" === a && 0 !== c ? "boolean" === typeof c ? c ? -1 : 1 : c || 1 : "" === b && 0 !== c ? "boolean" === typeof c ? c ? 1 : -1 : -c || -1 : f.sortNatural(b, a) + }; + f.sortText = function(a, b) { + return a > b ? 1 : a < b ? -1 : 0 + }; + f.getTextValue = function(a, b, c) { + if (c) { + var d = a ? a.length : 0, e = c + b; + for (c = 0; c < d; c++) + e += a.charCodeAt(c); + return b * e + } + return 0 + }; + f.sortNumericAsc = function(a, b, c, d, e, g) { + if (a === b) + return 0; + g = g.config; + e = g.string[g.empties[e] || g.emptyTo]; + if ("" === a && 0 !== e) + return"boolean" === typeof e ? e ? -1 : 1 : -e || -1; + if ("" === b && 0 !== e) + return"boolean" === typeof e ? e ? 1 : -1 : e || 1; + isNaN(a) && (a = f.getTextValue(a, c, d)); + isNaN(b) && (b = f.getTextValue(b, c, d)); + return a - b + }; + f.sortNumericDesc = function(a, b, c, d, e, g) { + if (a === b) + return 0; + g = g.config; + e = g.string[g.empties[e] || g.emptyTo]; + if ("" === a && 0 !== e) + return"boolean" === typeof e ? e ? -1 : 1 : e || 1; + if ("" === b && 0 !== e) + return"boolean" === typeof e ? e ? 1 : -1 : -e || -1; + isNaN(a) && (a = f.getTextValue(a, c, d)); + isNaN(b) && (b = f.getTextValue(b, c, d)); + return b - a + }; + f.sortNumeric = function(a, b) { + return a - b + }; + f.characterEquivalents = {a: "\u00e1\u00e0\u00e2\u00e3\u00e4\u0105\u00e5", A: "\u00c1\u00c0\u00c2\u00c3\u00c4\u0104\u00c5", c: "\u00e7\u0107\u010d", C: "\u00c7\u0106\u010c", e: "\u00e9\u00e8\u00ea\u00eb\u011b\u0119", E: "\u00c9\u00c8\u00ca\u00cb\u011a\u0118", i: "\u00ed\u00ec\u0130\u00ee\u00ef\u0131", I: "\u00cd\u00cc\u0130\u00ce\u00cf", o: "\u00f3\u00f2\u00f4\u00f5\u00f6", O: "\u00d3\u00d2\u00d4\u00d5\u00d6", ss: "\u00df", SS: "\u1e9e", u: "\u00fa\u00f9\u00fb\u00fc\u016f", U: "\u00da\u00d9\u00db\u00dc\u016e"}; + f.replaceAccents = function(a) { + var b, c = "[", d = f.characterEquivalents; + if (!f.characterRegex) { + f.characterRegexArray = {}; + for (b in d) + "string" === typeof b && (c += d[b], f.characterRegexArray[b] = RegExp("[" + d[b] + "]", "g")); + f.characterRegex = RegExp(c + "]") + } + if (f.characterRegex.test(a)) + for (b in d) + "string" === typeof b && (a = a.replace(f.characterRegexArray[b], b)); + return a + }; + f.isValueInArray = function(a, b) { + var c, d = b.length; + for (c = 0; c < d; c++) + if (b[c][0] === a) + return c; + return-1 + }; + f.addParser = function(a) { + var b, c = f.parsers.length, d = !0; + for (b = 0; b < c; b++) + f.parsers[b].id.toLowerCase() === a.id.toLowerCase() && (d = !1); + d && f.parsers.push(a) + }; + f.getParserById = function(a) { + var b, c = f.parsers.length; + for (b = 0; b < c; b++) + if (f.parsers[b].id.toLowerCase() === a.toString().toLowerCase()) + return f.parsers[b]; + return!1 + }; + f.addWidget = function(a) { + f.widgets.push(a) + }; + f.getWidgetById = function(a) { + var b, c, d = f.widgets.length; + for (b = 0; b < d; b++) + if ((c = f.widgets[b]) && c.hasOwnProperty("id") && c.id.toLowerCase() === a.toLowerCase()) + return c + }; + f.applyWidget = function(a, b) { + a = g(a)[0]; + var c = a.config, d = c.widgetOptions, e = [], m, k, n; + c.debug && (m = new Date); + c.widgets.length && (c.widgets = g.grep(c.widgets, function(a, b) { + return g.inArray(a, c.widgets) === b + }), g.each(c.widgets || [], function(a, b) { + (n = f.getWidgetById(b)) && n.id && (n.priority || (n.priority = 10), e[a] = n) + }), e.sort(function(a, b) { + return a.priority < b.priority ? -1 : a.priority === b.priority ? 0 : 1 + }), g.each(e, function(e, f) { + if (f) { + if (b || !c.widgetInit[f.id]) + f.hasOwnProperty("options") && (d = a.config.widgetOptions = g.extend(!0, {}, f.options, d)), f.hasOwnProperty("init") && f.init(a, f, c, d), c.widgetInit[f.id] = !0; + !b && f.hasOwnProperty("format") && f.format(a, c, d, !1) + } + })); + c.debug && (k = c.widgets.length, t("Completed " + (!0 === b ? "initializing " : "applying ") + k + " widget" + (1 !== k ? "s" : ""), m)) + }; + f.refreshWidgets = function(a, b, c) { + a = g(a)[0]; + var h, e = a.config, m = e.widgets, k = f.widgets, n = k.length; + for (h = 0; h < n; h++) + k[h] && k[h].id && (b || 0 > g.inArray(k[h].id, m)) && (e.debug && d('Refeshing widgets: Removing "' + k[h].id + '"'), k[h].hasOwnProperty("remove") && e.widgetInit[k[h].id] && (k[h].remove(a, e, e.widgetOptions), e.widgetInit[k[h].id] = !1)); + !0 !== c && f.applyWidget(a, b) + }; + f.getData = function(a, b, c) { + var d = ""; + a = g(a); + var e, f; + if (!a.length) + return""; + e = g.metadata ? a.metadata() : !1; + f = " " + (a.attr("class") || ""); + "undefined" !== typeof a.data(c) || "undefined" !== typeof a.data(c.toLowerCase()) ? d += a.data(c) || a.data(c.toLowerCase()) : e && "undefined" !== typeof e[c] ? d += e[c] : b && "undefined" !== typeof b[c] ? d += b[c] : " " !== f && f.match(" " + c + "-") && (d = f.match(RegExp("\\s" + c + "-([\\w-]+)"))[1] || ""); + return g.trim(d) + }; + f.formatFloat = function(a, b) { + if ("string" !== typeof a || "" === a) + return a; + var c; + a = (b && b.config ? !1 !== b.config.usNumberFormat : "undefined" !== typeof b ? b : 1) ? a.replace(/,/g, "") : a.replace(/[\s|\.]/g, "").replace(/,/g, "."); + /^\s*\([.\d]+\)/.test(a) && (a = a.replace(/^\s*\(([.\d]+)\)/, "-$1")); + c = parseFloat(a); + return isNaN(c) ? g.trim(a) : c + }; + f.isDigit = function(a) { + return isNaN(a) ? /^[\-+(]?\d+[)]?$/.test(a.toString().replace(/[,.'"\s]/g, "")) : !0 + } + }}); + var q = g.tablesorter; + g.fn.extend({tablesorter: q.construct}); + q.addParser({id: "text", is: function() { + return!0 + }, format: function(d, t) { + var m = t.config; + d && (d = g.trim(m.ignoreCase ? d.toLocaleLowerCase() : d), d = m.sortLocaleCompare ? q.replaceAccents(d) : d); + return d + }, type: "text"}); + q.addParser({id: "digit", is: function(d) { + return q.isDigit(d) + }, format: function(d, t) { + var m = q.formatFloat((d || "").replace(/[^\w,. \-()]/g, ""), t); + return d && "number" === typeof m ? m : d ? g.trim(d && t.config.ignoreCase ? d.toLocaleLowerCase() : d) : d + }, type: "numeric"}); + q.addParser({id: "currency", is: function(d) { + return/^\(?\d+[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]|[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]\d+\)?$/.test((d || "").replace(/[+\-,. ]/g, "")) + }, format: function(d, t) { + var m = q.formatFloat((d || "").replace(/[^\w,. \-()]/g, ""), t); + return d && "number" === typeof m ? m : d ? g.trim(d && t.config.ignoreCase ? d.toLocaleLowerCase() : d) : d + }, type: "numeric"}); + q.addParser({id: "ipAddress", is: function(d) { + return/^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}$/.test(d) + }, format: function(d, g) { + var m, u = d ? d.split(".") : "", s = "", v = u.length; + for (m = 0; m < v; m++) + s += ("00" + u[m]).slice(-3); + return d ? q.formatFloat(s, g) : d + }, type: "numeric"}); + q.addParser({id: "url", is: function(d) { + return/^(https?|ftp|file):\/\//.test(d) + }, format: function(d) { + return d ? g.trim(d.replace(/(https?|ftp|file):\/\//, "")) : d + }, type: "text"}); + q.addParser({id: "isoDate", is: function(d) { + return/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}/.test(d) + }, format: function(d, g) { + return d ? q.formatFloat("" !== d ? (new Date(d.replace(/-/g, "/"))).getTime() || d : "", g) : d + }, type: "numeric"}); + q.addParser({id: "percent", is: function(d) { + return/(\d\s*?%|%\s*?\d)/.test(d) && 15 > d.length + }, format: function(d, g) { + return d ? q.formatFloat(d.replace(/%/g, ""), g) : d + }, type: "numeric"}); + q.addParser({id: "usLongDate", is: function(d) { + return/^[A-Z]{3,10}\.?\s+\d{1,2},?\s+(\d{4})(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?$/i.test(d) || /^\d{1,2}\s+[A-Z]{3,10}\s+\d{4}/i.test(d) + }, format: function(d, g) { + return d ? q.formatFloat((new Date(d.replace(/(\S)([AP]M)$/i, "$1 $2"))).getTime() || d, g) : d + }, type: "numeric"}); + q.addParser({id: "shortDate", is: function(d) { + return/(^\d{1,2}[\/\s]\d{1,2}[\/\s]\d{4})|(^\d{4}[\/\s]\d{1,2}[\/\s]\d{1,2})/.test((d || "").replace(/\s+/g, " ").replace(/[\-.,]/g, "/")) + }, format: function(d, g, m, u) { + if (d) { + m = g.config; + var s = m.$headers.filter("[data-column=" + u + "]:last"); + u = s.length && s[0].dateFormat || q.getData(s, m.headers[u], "dateFormat") || m.dateFormat; + d = d.replace(/\s+/g, " ").replace(/[\-.,]/g, "/"); + "mmddyyyy" === u ? d = d.replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/, "$3/$1/$2") : "ddmmyyyy" === u ? d = d.replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/, "$3/$2/$1") : "yyyymmdd" === u && (d = d.replace(/(\d{4})[\/\s](\d{1,2})[\/\s](\d{1,2})/, "$1/$2/$3")) + } + return d ? q.formatFloat((new Date(d)).getTime() || d, g) : d + }, type: "numeric"}); + q.addParser({id: "time", is: function(d) { + return/^(([0-2]?\d:[0-5]\d)|([0-1]?\d:[0-5]\d\s?([AP]M)))$/i.test(d) + }, format: function(d, g) { + return d ? q.formatFloat((new Date("2000/01/01 " + d.replace(/(\S)([AP]M)$/i, "$1 $2"))).getTime() || d, g) : d + }, type: "numeric"}); + q.addParser({id: "metadata", is: function() { + return!1 + }, format: function(d, q, m) { + d = q.config; + d = d.parserMetadataName ? d.parserMetadataName : "sortValue"; + return g(m).metadata()[d] + }, type: "numeric"}); + q.addWidget({id: "zebra", priority: 90, format: function(d, t, m) { + var u, s, v, A, D, C, E = RegExp(t.cssChildRow, "i"), B = t.$tbodies; + t.debug && (D = new Date); + for (d = 0; d < B.length; d++) + u = B.eq(d), C = u.children("tr").length, 1 < C && (v = 0, u = u.children("tr:visible").not(t.selectorRemove), u.each(function() { + s = g(this); + E.test(this.className) || v++; + A = 0 === v % 2; + s.removeClass(m.zebra[A ? 1 : 0]).addClass(m.zebra[A ? 0 : 1]) + })); + t.debug && q.benchmark("Applying Zebra widget", D) + }, remove: function(d, q, m) { + var u; + q = q.$tbodies; + var s = (m.zebra || ["even", "odd"]).join(" "); + for (m = 0; m < q.length; m++) + u = g.tablesorter.processTbody(d, q.eq(m), !0), u.children().removeClass(s), g.tablesorter.processTbody(d, u, !1) + }}) +}(jQuery); diff --git a/include/lehrveranstaltung.class.php b/include/lehrveranstaltung.class.php index 588c48240..1814286a2 100644 --- a/include/lehrveranstaltung.class.php +++ b/include/lehrveranstaltung.class.php @@ -1228,6 +1228,7 @@ class lehrveranstaltung extends basis_db $obj->stpllv_semester = $this->stpllv_semester; $obj->stpllv_pflicht = $this->stpllv_pflicht; $obj->stpllv_koordinator = $this->stpllv_koordinator; + $obj->oe_kurzbz = $this->oe_kurzbz; $obj->lvnr = $this->lvnr; $values[] = $obj; diff --git a/include/organisationseinheit.class.php b/include/organisationseinheit.class.php index e77b7c43d..435a5597d 100644 --- a/include/organisationseinheit.class.php +++ b/include/organisationseinheit.class.php @@ -516,5 +516,34 @@ class organisationseinheit extends basis_db } return $data; } + + public function getByTyp($oetyp_kurzbz) + { + $qry = 'SELECT * FROM public.tbl_organisationseinheit WHERE organisationseinheittyp_kurzbz='.$this->db_add_param($oetyp_kurzbz).';'; + + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $obj = new organisationseinheit(); + + $obj->oe_kurzbz = $row->oe_kurzbz; + $obj->oe_parent_kurzbz = $row->oe_parent_kurzbz; + $obj->bezeichnung = $row->bezeichnung; + $obj->organisationseinheittyp_kurzbz = $row->organisationseinheittyp_kurzbz; + $obj->aktiv = $this->db_parse_bool($row->aktiv); + $obj->mailverteiler = $this->db_parse_bool($row->mailverteiler); + $obj->lehre = $this->db_parse_bool($row->lehre); + + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Organisationseinheiten'; + return false; + } + } } ?> diff --git a/include/pruefungCis.class.php b/include/pruefungCis.class.php index fd61ce30c..ef2b6a31e 100644 --- a/include/pruefungCis.class.php +++ b/include/pruefungCis.class.php @@ -586,7 +586,7 @@ class pruefungCis extends basis_db } $in = substr($in, 0, -2); - $qry = 'SELECT * FROM campus.tbl_lehrveranstaltung_pruefung WHERE lehrveranstaltung_id IN ('.$in.')'; + $qry = 'SELECT * FROM campus.tbl_lehrveranstaltung_pruefung WHERE lehrveranstaltung_id IN ('.$in.');'; if($this->db_query($qry)) { @@ -602,4 +602,40 @@ class pruefungCis extends basis_db } return false; } + + public function getAll() + { + $qry = 'SELECT * FROM campus.tbl_lehrveranstaltung_pruefung;'; + + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $obj = new stdClass(); + $obj->lehrveranstaltung_pruefung_id = $row->lehrveranstaltung_pruefung_id; + $obj->lehrveranstaltung_id = $row->lehrveranstaltung_id; + $obj->pruefung_id = $row->pruefung_id; + array_push($this->lehrveranstaltungen, $obj); + } + return true; + } + return false; + } + + public function getLastOfReihung($pruefungstermin_id) + { + $qry = 'SELECT MAX(reihung) FROM campus.tbl_pruefungsanmeldung WHERE ' + . 'pruefungstermin_id='.$this->db_add_param($pruefungstermin_id).';'; + + if($this->db_query($qry)) + { + $row = $this->db_fetch_object(); + return $row->max; + } + else + { + $this->errormsg = 'Reihung konnte nicht geladen werden.'; + return false; + } + } } \ No newline at end of file diff --git a/include/pruefungsanmeldung.class.php b/include/pruefungsanmeldung.class.php index 1c3ee23b6..b1bb5d933 100644 --- a/include/pruefungsanmeldung.class.php +++ b/include/pruefungsanmeldung.class.php @@ -173,9 +173,26 @@ class pruefungsanmeldung extends basis_db { } } - public function checkAnmeldung() + public function delete($pruefungsanmeldung_id, $uid=null) { - + $qry = 'DELETE FROM campus.tbl_pruefungsanmeldung WHERE pruefungsanmeldung_id='.$this->db_add_param($pruefungsanmeldung_id); + + if(!is_null($uid)) + { + $qry .= ' AND uid='.$this->db_add_param($uid); + } + + $qry .= ' ;'; + + if($this->db_query($qry)) + { + return true; + } + else + { + $this->errormsg = 'Anmeldung konnte nicht gelöscht werden.'; + return false; + } } }