Location: PHPKode > projects > Course-manager > courseman-0.1.1/kursverwaltung.php
<?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');
?>
Return current item: Course-manager