Location: PHPKode > projects > Course-manager > courseman-0.1.1/anmeldung.php
<?php
  require('global-php.php');
  require('local-criteria.php');
  $max_kursanzahl = 4; // maximale Zahl der wählbaren Kurse
  $verbindung = database_connection($lang_database_failure[$language]);
  $angemeldete_person = $_POST["user"];
  $aenderungsschluessel = $_POST["key"];
  $javascript='<script type="text/javascript" src="global-javascript.php">
</script>
<script type="text/javascript">';
  $course_period = static_option_value($course_period_option);
  $javascript .= $debug_mark[72] . course_relations($verbindung, false);
  $javascript .= '
  var window_initializers = new Array();' . $debug_mark[59];
  $javascript .= $personal_data['calls']($personal_data,
                                         'auxiliary_javascript',
                                         array());
  $javascript .= $debug_mark[61] . '
  function get_kurs(menuname) {';
  					/* extrahiert den Kurs-Index, der vom
  						Menü mit dem übergebenen
						Namen bearbeitet wird. */
  $javascript .= '
    return menuname.substr(menuname.search("[0-9]"));
  }' . $debug_mark[62] . '
  function get_suffix(menuname) {'; /* extrahiert den bei der Erzeugung
  						verwendeten suffix aus dem
						Namen der Menüs */
  $javascript .= '
    if (menuname.indexOf("_alternative") != -1) {' . $debug_mark[63] . '
      return "_alternative";
    } else {' . $debug_mark[60] . '
      return "";
    }
  }' . ($internet_explorer_buggy ? ('
  function erneuere_kursmenue(paragraph, wahl, name) {' /* erzeugt das
  						Kursmenue unter
  						paragraph fuer die Wahl des
						Kurses an die Kategorie Wahl
						neu, mit Namen name */
	. '
    var menue = document.createElement("select");'
    	. set_attribute('menue','name','name','
    ') . set_attribute('menue','id','name','
    ') . '
    hook_onchange(name,set_kurs_von);'
	. js_event_listener('menue', 'change', 'execute_onchange_by_event', '
    ')) : ('
  function fuelle_kursmenue(menue, wahl) {' /* passt das Kursmenü
  							menue fuer die Wahl des
							Kurses an die
							Kategorie wahl an */
	 . '
    entferne_kindknoten(menue);')) . '
    menue.appendChild(menu_option("","'
		. lang_choose($language,$lang_course[$language]) . '"));
    var kurse_lokal = kategorien[wahl];
    if (kurse_lokal) {
      initialize_menu(menue,kurse_lokal,kurse,set_kurs_von);
    }' . ($internet_explorer_buggy ? ' else {
      menue.selectedIndex = 0;
    }
    entferne_kindknoten(paragraph);
    paragraph.appendChild(menue);' : '') . '
  }
  function set_kategorie_auf(kurs, wahl) {'; /* passt die
  							Auswahlmöglichkeiten
							für die Wahl des Kurses
							kurs an die gewählte
							Kategorie wahl an.*/
  $javascript .= ($internet_explorer_buggy ? '
    erneuere_kursmenue(
    	document.getElementById("paragraph_kurs_kurs" + kurs),
	                        wahl,
				"kurs_kurs" + kurs);
    erneuere_kursmenue(
    	document.getElementById("paragraph_kurs_kurs_alternative" + kurs),
    			        wahl,
				"kurs_kurs_alternative" + kurs);' : '
    fuelle_kursmenue(document.getElementById("kurs_kurs" + kurs), wahl);
    fuelle_kursmenue(document.getElementById("kurs_kurs_alternative" + kurs),
    			wahl);') . '
  }
  function set_kategorie(menu) {'; /* passt die
  							Auswahlmöglichkeiten
							für die Wahl des Kurses
							an die durch in menu
							gewählte Kategorie an.*/
  $javascript .= '
    var kurs = get_kurs(menu.name);
    var wahl = menu.value;
    set_kategorie_auf(kurs, wahl);
  }
  function set_kurs_auf(kurs, wahl, suffix) {'; /* passt die
  							Auswahlmöglichkeiten
							für die Wahl des Termins
							des Kurses kurs
							an die Veranstaltung
							wahl an. Bezieht sich
							auf die mit suffix
							markierte Alternative.
									*/
  $javascript .= '
    var menue_name = "termin_kurs" + suffix + kurs;'
    		. ($internet_explorer_buggy ? ('
    var paragraph_name = "paragraph_termin_kurs" + suffix + kurs;
    var terminparagraph = document.getElementById(paragraph_name);
    var terminmenue = document.createElement("select");'
    	. set_attribute('terminmenue','name','menue_name','
    ') . set_attribute('terminmenue','id','menue_name','
    ')) : '
    var terminmenue = document.getElementById(menue_name);
    entferne_kindknoten(terminmenue);') . '
    terminmenue.appendChild(menu_option("","'
			. lang_choose($language,$lang_date[$language]) . '"));
    var termine_lokal = kurs_termine[wahl];
    if (termine_lokal) {' . ($internet_explorer_buggy ? '
      initialize_menu(terminmenue,
                      termine_lokal,
                      termine,
                      disable_menu_alternative);' : '
      initialize_referencable_menu(terminmenue,
                                   termine_lokal,
                                   termine,
                                   disable_menu_alternative,
                                   menue_name + "_");') . '
    }' . ($internet_explorer_buggy ? ' else {
      menue.selectedIndex = 0;
    }
    entferne_kindknoten(terminparagraph);
    terminparagraph.appendChild(terminmenue);' : '') . '
  }' . $debug_mark[44] . '
  function set_kurs_von(menue) {'; /* passt die
					Auswahlmöglichkeiten für die Wahl des
					Termins an den in Menue menue
					gewählten Kurs an.*/
  $javascript .= '
    var kurs = get_kurs(menue.name);
    var wahl = menue.value;
    var suffix = get_suffix(menue.name);
    set_kurs_auf(kurs, wahl, suffix);
  }
  function set_counter(event) {'; /* passt den Zaehler fuer die verbleibenden
					Zeichen bei der Kommentareingabe an.*/
  $javascript .= '
    if (window.event) {
      event = window.event;
    }
    var target = event.srcElement;
    if (!target) {
      target = event.target;
    }
    var kurs = get_kurs(target.name);
    var counter = document.getElementById("kommentarzaehler_kurs" + kurs);
    entferne_kindknoten(counter);
    var remaining = ' . $max_comment_length . ' - target.value.length;
    if (remaining < 0) {
      target.value = target.value.substring(0, ' . $max_comment_length . ');
      remaining = 0;
    }
    counter.appendChild(document.createTextNode(remaining));
  }
  function kursauswahl_anhaengen(kurs, kursauswahl, suffix) {';  /*
  						hängt das Kursauswahlmenü für
						die Wahl des kurs. Kurses an
						den Knoten kursauswahl an.
						wahl an. suffix wählt
						zwischen erster Wahl
						und Alternative */
  $javascript .= '
    var paragraph = document.createElement("p");
    var menue;
    if (suffix == "") {'; /* erste Wahl => Kategorie wählbar */
  $javascript .= '
      menue = document.createElement("select");'
	. set_attribute('menue','name','"kategorie_kurs" + suffix + kurs','
      ') . set_attribute('menue','id','"kategorie_kurs" + suffix + kurs','
      ') . set_attribute('paragraph',
                         'id',
			 '"paragraph_kategorie_kurs" + suffix + kurs',
			 '
      ') . '
      hook_onchange("kategorie_kurs" + suffix + kurs,set_kategorie);'
	. js_event_listener('menue', 'change', 'execute_onchange_by_event', '
      ') . '
      menue.appendChild(menu_option("","'
      		. lang_choose($language,$application_specific_category)
		. '"));';
        $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);
          $javascript .= ("
      menue.appendChild(menu_option(\"$id\",\"$name\"));");
        }
  $javascript .= '
      paragraph.appendChild(menue);
      kursauswahl.appendChild(paragraph);
      paragraph = document.createElement("p");
    }' . $debug_mark[47] . '
    menue = document.createElement("select");'
	. set_attribute('menue','id','"kurs_kurs" + suffix + kurs','
    ') . set_attribute('menue','name','"kurs_kurs" + suffix + kurs','
    ') . set_attribute('paragraph',
                       'id',
		       '"paragraph_kurs_kurs" + suffix + kurs',
		       '
    ') . '
    hook_onchange("kurs_kurs" + suffix + kurs,set_kurs_von);'
	. js_event_listener('menue', 'change', 'execute_onchange_by_event', '
    ') . '
    menue.appendChild(menu_option("","'
			. lang_choose($language,$lang_course[$language]) . '"));
    paragraph.appendChild(menue);' . ($internet_explorer_buggy ? '
    menue.selectedIndex = 0;' : '') . '
    kursauswahl.appendChild(paragraph);
    paragraph = document.createElement("p");
    menue = document.createElement("select");'
	. set_attribute('menue','id','"termin_kurs" + suffix + kurs','
    ') . set_attribute('menue','name','"termin_kurs" + suffix + kurs','
    ') . set_attribute('paragraph',
                       'id',
		       '"paragraph_termin_kurs" + suffix + kurs',
		       '
    ') . '
    menue.appendChild(menu_option("","'
		. lang_choose($language,$lang_date[$language]) . '"));
    hook_onchange("termin_kurs" + suffix + kurs,disable_menu_alternative);'
	. js_event_listener('menue', 'change', 'execute_onchange_by_event', '
    ') . '
    paragraph.appendChild(menue);' . ($internet_explorer_buggy ? '
    menue.selectedIndex = 0;' : '') . '
    kursauswahl.appendChild(paragraph);
  }
  var kursanzahl = 0;
  function prep_course_menu(course) {'; /* erzeugt ein Menue zur Auswahl eines
  					besuchten Vorkurses fuer den gewaehlten
					Kurs course */
  $javascript .= '
    var menu = document.createElement("select");'
	. set_attribute('menu','name','"vorkurs_kurs" + course','
    ') . '
    var option = menu_option("", "'
		. lang_enter($language,
			$lang_attended_prep_course[$language]) . '");
    menu.appendChild(option);';
  foreach ($prep_course_conditions as $key => $description) {
    $javascript .= '
    option = menu_option("' . $key . '", "' . $description . '");
    menu.appendChild(option);';
  }
  $javascript .= '
    return menu;
  }' . $debug_mark[48] . '
  function set_kursanzahl(anzahl) {'; /* erzeugt bzw. löscht Menüs für die
  						Anmeldung von anzahl Kursen*/
  $javascript .= '
    kursanzahl = anzahl;
    for (var kurs = 1; kurs <= ' . $max_kursanzahl . '; kurs++) {
      var auswahlknoten = document.getElementById("kurs" + kurs);
      if (kurs <= anzahl) {' . $debug_mark[53] . '
	if (auswahlknoten.getElementsByTagName("h2").length < 1) {
          var kursauswahl = document.createElement("p");' . $debug_mark[54] . '
          var ueberschrift = document.createElement("h2");
          var text = document.createTextNode(ordinal_number(kurs) + " '
		. $lang_course[$language] . '");
          ueberschrift.appendChild(text);' . $debug_mark[55] . '
          kursauswahl.appendChild(ueberschrift);
	  var marker = document.createElement("span");'
		. ($internet_explorer_buggy
			? ''
			:set_attribute('marker','class','"hinweis"','
          ')) . '
	  marker.appendChild(document.createTextNode("*"));
	  kursauswahl.appendChild(marker);' . $debug_mark[56] . '
	  text = document.createTextNode("' . $lang_primary[$language] . ':");
	  kursauswahl.appendChild(text);
	  kursauswahl_anhaengen(kurs, kursauswahl, "");' . $debug_mark[57] . '
	  text = document.createTextNode("'
		. lang_alternative($language,$application_specific_category)
		. ':");' . $debug_mark[58] . '
	  kursauswahl.appendChild(text);
	  kursauswahl_anhaengen(kurs, kursauswahl, "_alternative");
          auswahlknoten.appendChild(kursauswahl);' . $debug_mark[49] . '
	  text = document.createTextNode("'
			. $lang_attended[$language] . ' '
			. $lang_prep_course[$language] . ':");
	  auswahlknoten.appendChild(text);
	  auswahlknoten.appendChild(document.createElement("br"));
	  auswahlknoten.appendChild(prep_course_menu(kurs));
	  auswahlknoten.appendChild(document.createElement("br"));
	  text = document.createTextNode("' . $lang_comments[$language] . ': ");
	  auswahlknoten.appendChild(text);
	  kursiv = document.createElement("i");
	  text = document.createTextNode("(' . $lang_freeform[$language] . ')");
	  kursiv.appendChild(text);
	  auswahlknoten.appendChild(kursiv);
	  auswahlknoten.appendChild(document.createElement("br"));
	  var kommentarfeld = document.createElement("textarea");'
		. set_attribute('kommentarfeld',
                                'name',
                                '"kommentar_kurs" + kurs',
                                '
          ') . set_attribute('kommentarfeld',
                             'id',
                             '"kommentar_kurs" + kurs',
                             '
          ') . set_attribute('kommentarfeld',
                             'rows',
                             '"6"',
                             '
          ') . set_attribute('kommentarfeld',
                             'cols',
                             '"50"',
                             '
          ') . js_event_listener('kommentarfeld', 'keydown', 'set_counter', '
          ') . js_event_listener('kommentarfeld', 'keyup', 'set_counter', '
          ') . '
	  auswahlknoten.appendChild(kommentarfeld);' . $debug_mark[50] . '
	  auswahlknoten.appendChild(document.createElement("br"));
          auswahlknoten.appendChild(document.createTextNode("'
			. lang_characters_left($language,'"));
          var counter = document.createElement("span");'
		. set_attribute('counter',
                                'id',
                                '"kommentarzaehler_kurs" + kurs','
          ') . '
          counter.appendChild(document.createTextNode("'
		. $max_comment_length . '"));
          auswahlknoten.appendChild(counter);
          auswahlknoten.appendChild(document.createTextNode(
			"') . '"));
        }
      } else {
	if (auswahlknoten.getElementsByTagName("h2").length > 0) {
	  entferne_kindknoten(auswahlknoten);
        }
      }
    }
  }
  function alle_kurse_ausgewaehlt() {
    for (var kurs = 1; kurs <= kursanzahl; kurs++) {
      var auswahl = document.getElementsByName("termin_kurs" + kurs)[0].value;
      if (auswahl == "") {' . $debug_mark[51] . '
        alert("' . lang_no_course_chosen($language,'" + kurs + "') . '");
        return false;
      }
    }
    return true;
  }
  function erlaubt() {
    ' . ($client_side_input_checking ? ('if ('
	. $personal_data['calls']($personal_data,'input_check',array())
	. '!alle_kurse_ausgewaehlt()) {
      return false;' . (($angemeldete_person == "") ? '
    } else if (kursanzahl == 0) {
      alert("' . $lang_no_courses_chosen[$language] . '");
      return false;' : '') . '
    } else if (!local_erlaubt()) {
      return false;
    } else {' . $debug_mark[52] . '
      return true;
    }') : 'return true;') . '
  }';
  prepare_personal_information_choices($verbindung);
  $javascript .= $local_javascript;
  db_exec($verbindung, "START TRANSACTION;");
  db_exec($verbindung, "LOCK TABLE registration_person;");
  db_exec($verbindung, "LOCK TABLE valid_registration;");
  db_exec($verbindung, "LOCK TABLE person_password;");
  db_exec($verbindung, "LOCK TABLE person_login;");
  $ergebnis = db_exec($verbindung, "SELECT valid_registration.registration "
    				. "FROM valid_registration,person_login,"
				. "registration_person,person_password "
				. "WHERE valid_registration.registration="
				. "registration_person.registration "
				. "AND registration_person.person="
				. "person_password.person "
				. "AND registration_person.person="
				. "person_login.person "
				. "AND course_period=$course_period "
				. "AND login='"
				. pg_escape_string($angemeldete_person)
				. "' AND hash=md5('"
				. pg_escape_string($aenderungsschluessel)
				. "');");
  db_exec($verbindung, "COMMIT;");
  $javascript .= ("
  window.onload = function() {
    for (var i = 0; i < window_initializers.length; i++) {
      window_initializers[i]();
    }");
  for ($lt = 0; $lt < pg_numrows($ergebnis); $lt++) {
    $registration_id = pg_result($ergebnis, $lt, 0);
    $personal_data['calls']($personal_data,
                            'input_reload',
                            array($registration_id));
    $javascript .= local_saved_personal_data($verbindung, $registration_id);
    $anmeldungsdaten = db_exec($verbindung,
    				"SELECT course,secondary,commentary "
    				. "FROM registration_course "
				. "WHERE registration=$registration_id;");
    $kursanzahl = pg_numrows($anmeldungsdaten);
    $kurse = array();
    for ($kurszeile = 0; $kurszeile < $kursanzahl; $kurszeile++) {
      $course = array();
      $course['zeile'] = $kurszeile + 1;
      $erster = pg_result($anmeldungsdaten, $kurszeile, 0);
      $zweiter = pg_result($anmeldungsdaten, $kurszeile, 1);
      $kommentar = pg_result($anmeldungsdaten, $kurszeile, 2);
      $course['kommentar'] = $kommentar;
      $kursdaten = db_exec($verbindung,
      				"SELECT category,course,"
				. "$course_date_readable.id "
				. "FROM $course_date_readable,course"
				. ($course_date_translated ? ",language" : "")
				. " WHERE $course_date_readable.id=$erster "
				. "AND course.id=course"
				. ($course_date_translated
					? (" AND code='$language' "
						. "AND language=language.id")
					: "")
				. ";");
      for ($datenzeile = 0;
      		$datenzeile < pg_numrows($kursdaten);
		$datenzeile++) {
        $kategorie = pg_result($kursdaten, $datenzeile, 0);
        $kurs = pg_result($kursdaten, $datenzeile, 1) - $course_offset;
        $termin = pg_result($kursdaten, $datenzeile, 2) - $date_offset;
	$course['erster'] = array(
		'kategorie' => $kategorie,
		'kurs' => $kurs,
		'termin' => $termin);
      }
      if ($zweiter != "") {
        if ($debug['retrieval']) {
          $javascript .= "
    // course $kurszeile: secondary choice found";
        }
        $kursdaten = db_exec($verbindung,
      				"SELECT course,$course_date_readable.id "
				. "FROM $course_date_readable"
				. ($course_date_translated ? ",language" : "")
				. " WHERE $course_date_readable.id=$zweiter"
				. ($course_date_translated
					? (" AND code='$language' "
						. "AND language=language.id")
					: "")
				. ";");
        for ($datenzeile = 0;
      		$datenzeile < pg_numrows($kursdaten);
		$datenzeile++) {
          $kurs = pg_result($kursdaten, $datenzeile, 0) - $course_offset;
          $termin = pg_result($kursdaten, $datenzeile, 1) - $date_offset;
          if ($debug['retrieval']) {
            $javascript .= "
    // course $kurszeile: secondary choice: $kurs - $termin";
          }
	  $course['zweiter'] = array(
		'kurs' => $kurs,
		'termin' => $termin);
        }
      }
      array_push($kurse,$course);
    }
  }
  if ($kursanzahl == 0) {
    $kursanzahl = intval($_REQUEST['kursanzahl']);
    $kurse = array();
    for ($kurs_id = 1; $kurs_id <= $kursanzahl; $kurs_id++) {
      $kurs = array();
      $kurs['zeile'] = $kurs_id;
      $kurs['kommentar'] = $_REQUEST['kommentar_kurs' . $kurs_id];
      $kurs['erster'] = array(
		'kategorie' => intval($_REQUEST['kategorie_kurs' . $kurs_id]),
		'kurs' => intval($_REQUEST['kurs_kurs' . $kurs_id]),
		'termin' => intval($_REQUEST['termin_kurs' . $kurs_id]));
      if ($_REQUEST['termin_kurs_alternative' . $kurs_id] != "") {
        $kurs['zweiter'] = array(
		'kurs' => intval($_REQUEST['kurs_kurs_alternative' . $kurs_id]),
		'termin' => intval($_REQUEST['termin_kurs_alternative'
							. $kurs_id]));
      }
      array_push($kurse,$kurs);
    }
  }
  if ($kursanzahl != 0) {
    $javascript .= ("
    set_kursanzahl($kursanzahl);
    if (typeof(document.daten.kursanzahl["
    		. ($kursanzahl - 1)
		. "]) != 'undefined') {
      document.daten.kursanzahl[" . ($kursanzahl - 1) . "].checked = true;
    }");
  }
  foreach ($kurse as $course) {
    $zeile = $course['zeile'];
    $kommentar = $course['kommentar'];
    if (array_key_exists('kategorie',$course['erster'])
	&& array_key_exists('kurs',$course['erster'])
	&& array_key_exists('termin',$course['erster'])) {
      $kategorie = $course['erster']['kategorie'];
      $kurs = $course['erster']['kurs'];
      $termin = $course['erster']['termin'];
      $javascript .= ("
    document.getElementById('kategorie_kurs" . $zeile . "').value = $kategorie;
    set_kategorie_auf(" . $zeile . ", $kategorie);
    document.getElementById('kurs_kurs" . $zeile . "').value = $kurs;
    set_kurs_auf(" . $zeile . ", $kurs, '');
    document.getElementById('termin_kurs" . $zeile . "').value = $termin;
    if (document.daten.kommentar_kurs" /* nicht bei internet explorer */
    		. $zeile
		. ".value) {
      document.daten.kommentar_kurs"
    		. $zeile
		. ".value = "
		. javascript_string($kommentar)
		. ";
    } else {
      var feld = document.getElementById('kommentar_kurs"
      		. $zeile
		. "');
      entferne_kindknoten(feld);
      feld.appendChild(document.createTextNode("
      		. javascript_string($kommentar)
		. "));
    }");
    }
    if ($course['zweiter']) {
      $kurs = $course['zweiter']['kurs'];
      $termin = $course['zweiter']['termin'];
      if ($debug['retrieval']) {
            $javascript .= "
    // course $kurszeile: secondary choice retrieved: $kurs - $termin";
      }
      $javascript .= "
    document.daten.kurs_kurs_alternative" . $zeile . ".value = $kurs;
    set_kurs_auf(" . $zeile . ", $kurs, '_alternative');
    document.daten.termin_kurs_alternative" . $zeile . ".value = $termin;";
    }
  }
  $javascript .= ("
  }");
  $javascript .= ("
</script>");
  if ($aenderung_gewuenscht = ($angemeldete_person != "")) {
    $aenderung_gestattet = (pg_numrows(db_exec($verbindung,
    				"SELECT * "
    				. "FROM person_password,person_login "
				. "WHERE person_password.person="
				. "person_login.person "
				. "AND login='"
				. pg_escape_string($angemeldete_person)
				. "' AND hash=md5('"
				. pg_escape_string($aenderungsschluessel)
				. "');")) > 0);
  }
  $input_layout = $personal_data['calls']($personal_data,
                                          'annotated_layout',
                                          array());
  offer_local_options($verbindung);
  db_close($verbindung);
  $authentication = value_pass('user') . value_pass('key');

  function course_count($count) {
		// a number of courses with a corresponding chooser radio button
    return "<input
	type='RADIO'
	name='kursanzahl'
	value='$count'
	onclick='set_kursanzahl($count)'/>
$count";
  }
  $course_number_chooser = lang_register_for($language,
					     lang_count($lang_course[$language],
							course_count,
							1,
							$max_kursanzahl));
  require_once('template-anmeldung.php');
?>
Return current item: Course-manager