<?php
require('global-php.php');
$verbindung = database_connection($lang_database_failure[$language]);
$PHP_AUTH_USER = $_SERVER["PHP_AUTH_USER"];
$PHP_AUTH_PW = $_SERVER["PHP_AUTH_PW"];
$ergebnis = db_exec($verbindung,
"SELECT id FROM staff_authorization "
. "WHERE "
. login_query_clauses(
$PHP_AUTH_USER,
$PHP_AUTH_PW)
. ";");
if (pg_numrows($ergebnis) < 1) {
header('WWW-Authenticate: Basic realm="Kursverwaltung"');
header("HTTP/1.0 401 Unauthorized");
echo $lang_authentication_failure[$language];
exit;
}
$authorization = pg_result($ergebnis, 0, 0);
$ergebnis = db_exec($verbindung, "SELECT * FROM superuser,capability "
. "WHERE account=$authorization "
. "AND capability=capability.id "
. "AND name='registrants';");
$may_modify = pg_numrows($ergebnis) > 0;
require('local-criteria.php');
if ($_REQUEST["show_frame_layout"] == "no") {
$show_frame_layout = false;
}
$course_period = option_value($course_period_option);
$javascript = '<script type="text/javascript" src="global-javascript.php">
</script>
<script type="text/javascript">
var aktueller_kurs;'
. $debug_mark[6]
. course_relations_filtered($verbindung, " AND EXISTS ("
. "SELECT true FROM authorized_course "
. "WHERE authorized_course.course"
. "=$course_date_readable.id "
. "AND account=$authorization)")
. $debug_mark[0]
. '
function fuelle_kursmenue(menue, wahl) {'; /* passt das Kursmenü
menue fuer die Wahl des
Kurses an die
Kategorie wahl an */
$javascript .= $debug_mark[1] . '
entferne_kindknoten(menue);
menue.appendChild(menu_option("","'
. lang_choose($language,$lang_course[$language]) . '"));
if (-1 == wahl) {
menue.appendChild(menu_option("-1","Alle Kurse"));
}
var kurse_lokal = kategorien[wahl];
if (kurse_lokal) {
initialize_menu(menue,kurse_lokal,kurse,set_kurs);
}' . ($internet_explorer_buggy ? ' else {
menue.selectedIndex = 0;
}' : '') . '
}
function set_kategorie(menue) {'; /* passt die
Auswahlmöglichkeiten
für die Wahl des Kurses
an die durch event
gewählte Kategorie an.*/
$javascript .= $debug_mark[2] . '
var target = menue;' . ($debug['javascript'] ? '
alert("menu is " + introspect(target));' : '') . '
var wahl = target.value;
fuelle_kursmenue(document.getElementById("kurs"), wahl);
}
function teilnehmerattribut(teilnehmer, attribut) {';
/* extrahiert das Attribut attribut aus dem Teilnehmer-
Knoten teilnehmer */
$javascript .= $debug_mark[3] . '
var tag = teilnehmer.getElementsByTagName(attribut)[0];
var kind = tag && tag.firstChild;
return kind ? kind.nodeValue : "";
}
function teilnehmerflag(teilnehmer, flag) {';
/* prüft die Existenz des Flags flag im Teilnehmer-
Knoten teilnehmer */
$javascript .= $debug_mark[4] . '
return teilnehmer.getElementsByTagName(flag).length > 0;
}
function teilnehmerattributknoten(teilnehmer, attribut) {';
/* extrahiert das Attribut attribut aus dem Teilnehmer-
Knoten teilnehmer als Textknoten für das
Einfügen in die Arbeitsmaske */
$javascript .= $debug_mark[19] . '
return document.createTextNode(teilnehmerattribut(teilnehmer, attribut));
}
function flagknoten(wert) {';
/* erzeugt einen Textknoten als Indikator fuer den Wahrheits-
wert von wert */
$javascript .= $debug_mark[20] . '
return document.createTextNode(wert ? "X" : "");
}
function teilnehmerflagknoten(teilnehmer, flag) {';
/* extrahiert das Flag flag aus dem Teilnehmer-
Knoten teilnehmer als Textknoten für das
Einfügen in die Arbeitsmaske */
$javascript .= $debug_mark[5] . '
return flagknoten(teilnehmerflag(teilnehmer, flag));
}
function spalte(inhalt) {';
/* erzeugt einen Spaltenknoten mit dem Inhalt inhalt
für eine Tabelle */
$javascript .= $debug_mark[21] . '
var spalte = document.createElement("td");
spalte.appendChild(inhalt);
return spalte;
}
function attributspalte(teilnehmer, attribut) {';
/* extrahiert das Attribut attribut aus dem Teilnehmer-
Knoten teilnehmer als Spaltenknoten für das
Einfügen in die Arbeitsmaske */
$javascript .= '
return spalte(teilnehmerattributknoten(teilnehmer, attribut));
}
function teilnehmerflagspalte(teilnehmer, flag) {';
/* extrahiert das Flag flag aus dem Teilnehmer-
Knoten teilnehmer als Spaltenknoten für das
Einfügen in die Arbeitsmaske */
$javascript .= '
return spalte(teilnehmerflagknoten(teilnehmer, flag));
}
function ueberschriftenspalte(titel) {';
/* erzeugt einen Ãberschriftenspaltenknoten mit der
Ãberschrift titel */
$javascript .= '
var spalte = document.createElement("th");
spalte.appendChild(document.createTextNode(titel));
return spalte;
}
var unsaved_changes = false;
function sortiere_liste(event) {'; /* sortiert die Teilnehmerliste nach
dem von event referenzierten
Kriterium */
$javascript .= $debug_mark[22] . '
if (window.event) {
event = window.event;
}
var target = event.srcElement;
if (!target) {
target = event.target;
}
if (unsaved_changes) {
if (confirm("' . $lang_suggest_saving[$language] . '\n"
+ "' . $lang_warn_loss[$language] . '!")) {
aktualisiere_liste(0);
}
}
lade_kurs(aktueller_kurs,target.name);
}
function sortierende_ueberschriftenspalte(titel,kriterium) {';
/* erzeugt einen Ãberschriftenspaltenknoten mit der
Ãberschrift titel, die beim Klicken die Liste
nach kriterium sortiert */
$javascript .= $debug_mark[24] . '
var spalte = document.createElement("th");
var sortierung = document.createElement("a");
sortierung.appendChild(document.createTextNode(titel));'
. set_attribute('sortierung','name','kriterium','
') . js_event_listener('sortierung', 'click', 'sortiere_liste', '
') . '
spalte.appendChild(sortierung);
return spalte;
}
function aktualisiere_liste(ignored) {' . $debug_mark[25] . '
var xmlHTTP = get_xmlHTTP();
if (xmlHTTP) {
xmlHTTP.onreadystatechange = function () {
if (xmlHTTP.readyState == 4) {
lade_kurs(aktueller_kurs, "");
}
};' . $debug_mark[26] . '
xmlHTTP.open("POST", "aktualisieren.php", true);
xmlHTTP.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
var request = "kurs=" + (parseInt(aktueller_kurs) + ' . $date_offset . ');
var knoten = document.getElementById("teilnehmerzeilen");
var registrations = knoten.childNodes;
for (var i = 0; i < registrations.length; i++) {
var registration = registrations[i];
for (var j = 0; j < ' . $attender_priorities . '; j++) {
var priority = registration.childNodes[j];
if (priority) {' . ($debug["ajax"] ? '
trace("priority data: " + introspect(priority));' : '') . '
var checkmark = priority.childNodes[0];
if (checkmark.checked) {
request = request + "&" + checkmark.name + "=angemeldet";
}
}
}
}' . ($debug["ajax"] ? '
trace("POST data: " + request);' : '') . '
xmlHTTP.send(request);
}
}
function lade_aktualisierten_view(view_link) {';
/* laed die im angeklickten Link verknuepfte Seite, nachdem
der Seitenzustand mit der Datenbank synchronisiert
wurde */
$javascript .= $debug_mark[23] . '
aktualisiere_liste(0);
if (window.event) {
event = window.event;
}
var target = event.srcElement;
if (!target) {
target = event.target;
}
window.open(target.href, "_start", "");
}' . $debug_mark[27] . '
function lade_teilnehmer(menue) {
var target = menue;
var wahl = target.value;
aktueller_kurs = wahl;
lade_kurs(wahl,"");
}
var ausgewaehlte;
function mark_changes() {'; /* registriert die Existenz von Aenderungen, die
noch nicht auf dem Server gespeichert wurden. */
$javascript .= '
unsaved_changes = true;
var erinnerung = document.getElementById("erinnerung");
entferne_kindknoten(erinnerung);
erinnerung.appendChild(document.createTextNode("'
. lang_suggest_loss_prevention($language,'"
+ "') . '"));
}
function aktualisiere_zaehler(event) {'; /* passt den Zaehler fuer die
gewaehlten Teilnehmer an die
geaenderte Checkbox an */
$javascript .= '
if (window.event) {
event = window.event;
}
var target = event.srcElement;
if (!target) {
target = event.target;
}
if (target.checked == true) {
ausgewaehlte = ausgewaehlte + 1;
} else {
ausgewaehlte = ausgewaehlte - 1;
}' . $debug_mark[28] . '
var zaehler = document.getElementById("zaehler");
entferne_kindknoten(zaehler);
zaehler.appendChild(document.createTextNode(ausgewaehlte));
mark_changes();
}';
if ($may_modify) {
$javascript .= '
var person_name = new Array();
function delete_registration(event) {'; /* loescht komplette Anmeldung der
Person */
$javascript .= '
if (window.event) {
event = window.event;
}
var target = event.srcElement;
if (!target) {
target = event.target;
}
var person = target.name;
if (confirm("' . lang_confirm_course_deletion($language,'"
+ person_name[person]
+ "') . '")) {
var xmlHTTP = get_xmlHTTP();
if (xmlHTTP) {
xmlHTTP.onreadystatechange = function () {
if (xmlHTTP.readyState == 4) {
aktualisiere_liste(0);
}
};
xmlHTTP.open("GET", "delete_registration.php?person=" + person, true);
xmlHTTP.send(null);
}
}
}
function modify_registration(event) {'; /* bestaetigt die Aenderung der Anmeldung
der Person */
$javascript .= '
if (window.event) {
event = window.event;
}
var target = event.srcElement;
if (!target) {
target = event.target;
}
var person = target.name;
if (confirm("' . lang_confirm_registration_modification($language,'"
+ "','"
+ person_name[person]
+ "') . '")) {
window.open("admin-registration-edit.php?person=" + person, "_start", "");
}
}';
}
$javascript .= '
function set_kurs(menue) {'; /* passt die
Auswahlmöglichkeiten
für die Wahl des Termins
an den durch event
gewählten Kurs an.*/
$javascript .= '
var target = menue;
var wahl = target.value;
var terminmenue = document.getElementById("termin");
entferne_kindknoten(terminmenue);
terminmenue.appendChild(menu_option("","'
. lang_choose($language,$lang_date[$language]) . '"));
if (-1 == wahl) {
terminmenue.appendChild(menu_option("'
. (-1 - $date_offset)
. '","' . $lang_all[$language] . ' '
. $plural[$lang_date[$language]] . '"));
}
var termine_lokal = kurs_termine[wahl];
if (termine_lokal) {
initialize_menu(terminmenue,termine_lokal,termine,lade_teilnehmer);
}' . ($internet_explorer_buggy ? ' else {
menue.selectedIndex = 0;
}' : '') . '
}' . $debug_mark[33];
$javascript .= '
function lade_kurs(wahl,sortierung) {
var xmlHTTP = get_xmlHTTP();
if ((wahl != "") && xmlHTTP) {
xmlHTTP.onreadystatechange = function () {' . $debug_mark[29] . '
if (xmlHTTP.readyState == 4) {
var ort = document.getElementById("teilnehmerliste");
entferne_kindknoten(ort);
var tabelle = document.createElement("table");
tabelle.border = 1;
var kopf = document.createElement("thead");
var zeile = document.createElement("tr");
for (var j = 1; j <= ' . $attender_priorities . '; j++) {
var column = document.createElement("td");
var descriptor = "";
for (var star = 0; star < j; star++) {
descriptor = descriptor + "*";
}
column.appendChild(document.createTextNode(descriptor));
zeile.appendChild(column);
}';
foreach ($admin_columns as $column) {
$javascript .= '
zeile.appendChild(sortierende_ueberschriftenspalte("'
. $column
. '","'
. $column_identifiers[$column]
. '"));';
}
$javascript .= '
zeile.appendChild(ueberschriftenspalte("'
. $lang_secondary_abbrev[$language] . '"));
zeile.appendChild(ueberschriftenspalte("'
. $lang_comments[$language] . '"));';
if ($may_modify) {
$javascript .= '
zeile.appendChild(ueberschriftenspalte(""));';
}
$javascript .= '
kopf.appendChild(zeile);
tabelle.appendChild(kopf);
var daten = document.createElement("tbody");'
. set_attribute('daten','id','"teilnehmerzeilen"','
') . '
ausgewaehlte = 0;
var erste_wahl = 0;
var teilnehmer = xmlHTTP.responseXML.getElementsByTagName("person");
for (var i = 0; i < teilnehmer.length; i++) {
var zeile = document.createElement("tr");
zeile.style.backgroundColor = "#A0A0A0";
var teilnahme_alternative = teilnehmerflag(teilnehmer[i],
"attending_alternative");
if (teilnahme_alternative) {
zeile.style.backgroundColor = "#D0D0D0";
}' . $debug_mark[30] . '
for (var j = 1; j <= ' . $attender_priorities . '; j++) {
var markierung = document.createElement("input");'
. js_event_listener('markierung', 'click',
'aktualisiere_zaehler', '
') . '
markierung.type = "CHECKBOX";
var id = teilnehmerattribut(teilnehmer[i], "id");
markierung.name = "person" + j + "_" + id;
var teilnahme = (j == teilnehmerattribut(teilnehmer[i],
"attending"));
if (teilnahme) {' . $debug_mark[34] . '
zeile.style.backgroundColor = "#FFFFFF";'
. set_attribute('markierung','checked','"true"','
') . '
ausgewaehlte = ausgewaehlte + 1;
}' . $debug_mark[35] . '
zeile.appendChild(spalte(markierung));
}';
foreach ($admin_columns as $column) {
$javascript .= '
zeile.appendChild(attributspalte(teilnehmer[i], "'
. $column_identifiers[$column]
. '"));';
}
$javascript .= '
var ist_zweite_wahl = teilnehmerflag(teilnehmer[i], "secondary");
if (!ist_zweite_wahl) {' . $debug_mark[36] . '
erste_wahl = erste_wahl + 1;
}
zeile.appendChild(spalte(flagknoten(ist_zweite_wahl)));'
. $debug_mark[41] . '
zeile.appendChild(attributspalte(teilnehmer[i], "commentary"));';
if ($may_modify) {
$javascript .= $debug_mark[42] . '
var delete_link = document.createElement("a");
delete_link.appendChild(document.createTextNode("'
. $lang_delete[$language] . '"));'
. js_event_listener('delete_link', 'click',
'delete_registration', '
') . '
delete_link.name = id;
var first_name = teilnehmerattribut(teilnehmer[i], "first_name");
var name = teilnehmerattribut(teilnehmer[i], "name");
person_name[id] = first_name + " " + name;
zeile.appendChild(spalte(delete_link));';
$javascript .= $debug_mark[42] . '
var modify_link = document.createElement("a");
modify_link.appendChild(document.createTextNode("'
. $lang_modify[$language] . '"));'
. js_event_listener('modify_link', 'click',
'modify_registration', '
') . '
modify_link.name = id;
var first_name = teilnehmerattribut(teilnehmer[i], "first_name");
var name = teilnehmerattribut(teilnehmer[i], "name");
person_name[id] = first_name + " " + name;
zeile.appendChild(spalte(modify_link));';
}
$javascript .= '
daten.appendChild(zeile);
}' . $debug_mark[38] . '
tabelle.appendChild(daten);
ort.appendChild(tabelle);
if (teilnehmer.length > 0) {
var sende_button = document.createElement("input");
sende_button.type = "SUBMIT";
sende_button.value = "' . $lang_apply[$language] . '";'
. js_event_listener('sende_button', 'click',
'aktualisiere_liste', '
') . '
ort.appendChild(document.createTextNode("'
. lang_count_registrations($language,'"
+ teilnehmer.length + "','"
+ erste_wahl + "') . '. '
. lang_count_selections($language,'"));
var zaehler = document.createElement("span");'
. set_attribute('zaehler','id','"zaehler"','
') . '
zaehler.appendChild(document.createTextNode(ausgewaehlte));
ort.appendChild(zaehler);
ort.appendChild(document.createTextNode(
"') . '. "));
unsaved_changes = false;
var erinnerung = document.createElement("span");'
. set_attribute('erinnerung','id','"erinnerung"','
') . '
erinnerung.className = "hinweis";
ort.appendChild(erinnerung);' . $debug_mark[40] . '
ort.appendChild(document.createElement("br"));
ort.appendChild(sende_button);
var liste_link = document.createElement("a");
var template = "teilnehmerliste-kontakt.php?kurs=";
liste_link.href = template +
(parseInt(wahl) + ' . $date_offset . ');
liste_link.target = "_blank";'
. js_event_listener('liste_link', 'click',
'lade_aktualisierten_view', '
') . '
liste_link.appendChild(document.createTextNode(
"' . $lang_contact_details[$language] . '"));
ort.appendChild(liste_link);
ort.appendChild(document.createTextNode(" "));'
. local_course_list_operations() . '
}
}
};
xmlHTTP.open("GET", "kursteilnehmer.php?kurs=" + (parseInt(wahl) + '
. $date_offset . ') + "&sort=" + sortierung, true);
xmlHTTP.send(null);
}
}';
$javascript .= '
window.onload = function() {
set_kategorie(document.getElementById("kategorie"));
}
hook_onchange("kategorie",set_kategorie);
hook_onchange("kurs",set_kurs);
hook_onchange("termin",lade_teilnehmer);
</script>';
$ergebnis = db_exec($verbindung, "SELECT priority,translation
FROM priority_translation,language
WHERE code='$language'
AND language=language.id;");
for ($row = 0; $row < pg_numrows($ergebnis); $row++) {
$priorities[pg_result($ergebnis, $row, 0)] = pg_result($ergebnis, $row, 1);
}
$optionen_kategorien .= ("<option value=\"-1\">"
. $lang_all[$language] . " "
. $plural[$application_specific_category]
. "</option>
");
$ergebnis = db_exec($verbindung,
"SELECT DISTINCT category.id,category.name "
. "FROM category,$course_date_readable,"
. "course "
. "WHERE category=category.id "
. "AND course=course.id "
. "AND course_period=$course_period "
. "ORDER BY name");
for ($lt = 0; $lt < pg_numrows($ergebnis); $lt++) {
$id = pg_result($ergebnis, $lt, 0);
$name = pg_result($ergebnis, $lt, 1);
$optionen_kategorien .= ("<option value=\"$id\">$name</option>
");
}
db_close($verbindung);
for ($priority = 1; $priority <= $attender_priorities; $priority++) {
$priority_description .= '
<tr>
<td>';
for ($star = 0; $star < $priority; $star++) {
$priority_description .= '*';
}
$priority_description .= '</td>
<td>' . $priorities[$priority] . '</td>
</tr>';
}
require('template-kursverwaltung.php');
?>