edit.php

Go to the documentation of this file.
00001 <?php
00002 
00003 // This file is part of the web-based "Application Form for New Users" 
00004 // of University Library Braunschweig, Germany
00005 //
00006 // Copyright (C) 2004 University Library Braunschweig, Germany
00007 
00024 
00025 require_once('text.php');
00026 require_once ('config.php');
00027 require_once('util.php');
00028 require_once('fields.php');
00029 
00030 session_start();
00031 
00032 // select language
00033 
00034 $lang = (isset($_GET['lang'])) ? $_GET['lang'] : $lang_default;
00035 
00036 if (!isset($text_multi[$lang]))
00037         $lang = $lang_default;
00038 
00039 $text    = $text_multi[$lang];
00040 $buttons = $buttons_multi[$lang];
00041 $months =  $months_multi[$lang];
00042 
00043 // init db
00044 
00045 ($link = mysql_pconnect($dbhost, $dbuser, $dbpass)) or db_error_mysql();
00046 mysql_select_db($dbname,$link) or db_error_mysql();
00047 
00048 // init $fields[]
00049 
00050 fields_init($link, $lang);
00051 
00052 
00053 // print "<body>button: " . $buttons['ok'];
00054 
00055 
00071 
00072 $pageinfo = array(
00073 
00074         1 => array (    // page 1
00075 
00076            "edit" => array (
00077                 array( label => $fields["last_name"]["label"], 
00078                        fields => array("last_name")),
00079                 array( label => $fields["first_name"]["label"], 
00080                        fields => array("first_name")),
00081                 array( label => $fields["title"]["label"], 
00082                        fields => array("title")),
00083                 array( label => $fields["sex"]["label"], 
00084                        fields => array("sex")),
00085                 array( label => $fields["birthday"]["label"], 
00086                        fields => array("birthday")),
00087                 array( label => $text["i_am"],
00088                        fields => array("usertype")),
00089                 array( label => $fields["student_id"]["label"], 
00090                        fields => array("student_id")),
00091                 ),
00092         
00093            "valid_params" => array (
00094                 "button" => "/^(" . $buttons['next'] . "|" .
00095                                     $buttons['cancel'] . "|" . 
00096                             ")$/",
00097                 "last_name" => $fields["last_name"]["valid"],
00098                 "first_name" => $fields["first_name"]["valid"],
00099                 "title" => $fields["title"]["valid"],
00100                 "sex" => $fields["sex"]["valid"],
00101                 "birthday_day" => "/^[0-9][0-9]$/",
00102                 "birthday_month" => "/^[0-9][0-9]$/",
00103                 "birthday_year" => "/^[0-9][0-9][0-9][0-9]$/",
00104                 "usertype" => $fields["usertype"]["valid"],
00105                 "student_id" => $fields["student_id"]["valid"],
00106                 "lang" => "/^(de|en)$/",
00107                 "finishURL" => "/^.*$/",
00108                 "cancelURL" => "/^.*$/"
00109            ) 
00110         ),
00111 
00112         2 => array (    // page 2
00113 
00114             "edit" => array(
00115                 array( label => $fields["carry_over_1"]["label"], 
00116                        fields => array("carry_over_1")),
00117                 array(  "label" => 
00118                         $fields['street_1']['label'] . " / " .
00119                         $fields['house_1']['label'] . " / " .
00120                         $fields['room_1']['label'],
00121                         "fields" => array("street_1","house_1","room_1") ),
00122                 array(  "label" => 
00123                         $fields['zip_1']['label'] . " / " .
00124                         $fields['town_1']['label'],
00125                         "fields" => array("zip_1", "town_1") ),
00126                 array(  "label" => $fields["phone_1"]["label"], 
00127                         "fields" => array("phone_1")),
00128                 array(  "label" => $fields["mobile_1"]["label"], 
00129                         "fields" => array("mobile_1"))
00130             ),
00131 
00132             "valid_params" => array (
00133                 "button" => "/^(" . $buttons['next'] . "|" .
00134                                     $buttons['prev'] . "|" . 
00135                                     $buttons['cancel'] . "|" . 
00136                             ")$/",
00137                 "carry_over_1" => $fields["carry_over_1"]["valid"],
00138                 "street_1" => $fields["street_1"]["valid"],
00139                 "house_1" => $fields["house_1"]["valid"],
00140                 "room_1" => $fields["room_1"]["valid"],
00141                 "zip_1" => $fields["zip_1"]["valid"],
00142                 "town_1" => $fields["town_1"]["valid"],
00143                 "phone_1" => $fields["phone_1"]["valid"],
00144                 "mobile_1" => $fields["mobile_1"]["valid"],
00145                 "lang" => "/^(de|en)$/",
00146                 "finishURL" => "/^.*$/",
00147                 "cancelURL" => "/^.*$/"
00148               ) 
00149         ),
00150         3 => array (    // page 3
00151 
00152             "edit" => array(
00153                 array( label => $fields["carry_over_2"]["label"], 
00154                        fields => array("carry_over_2")),
00155                 array(  "label" => 
00156                         $fields['street_2']['label'] . " / " .
00157                         $fields['house_2']['label'] . " / " .
00158                         $fields['room_2']['label'],
00159                         "fields" => array("street_2","house_2","room_2") ),
00160                 array(  "label" => 
00161                         $fields['zip_2']['label'] . " / " .
00162                         $fields['town_2']['label'],
00163                         "fields" => array("zip_2", "town_2") ),
00164                 array(  "label" => $fields["phone_2"]["label"], 
00165                         "fields" => array("phone_2")),
00166                 array(  "label" => $fields["mobile_2"]["label"], 
00167                         "fields" => array("mobile_2"))
00168             ),
00169 
00170             "valid_params" => array (
00171                 "button" => "/^(" . $buttons['next'] . "|" .
00172                                     $buttons['prev'] . "|" . 
00173                                     $buttons['cancel'] . "|" . 
00174                             ")$/",
00175                 "carry_over_2" => $fields["carry_over_2"]["valid"],
00176                 "street_2" => $fields["street_2"]["valid"],
00177                 "house_2" => $fields["house_2"]["valid"],
00178                 "room_2" => $fields["room_2"]["valid"],
00179                 "zip_2" => $fields["zip_2"]["valid"],
00180                 "town_2" => $fields["town_2"]["valid"],
00181                 "phone_2" => $fields["phone_2"]["valid"],
00182                 "mobile_2" => $fields["mobile_2"]["valid"],
00183                 "lang" => "/^(de|en)$/",
00184                 "finishURL" => "/^.*$/",
00185                 "cancelURL" => "/^.*$/"
00186               ) 
00187         ),
00188 
00189         4 => array (    // page 4
00190             "edit" => array(),
00191             "valid_params" => array(
00192                 "button" => "/^(" . $buttons['next'] . "|" .
00193                                     $buttons['finish'] . "|" . 
00194                                     $buttons['cancel'] . "|" . 
00195                             ")$/",
00196                 "lang" => "/^(de|en)$/",
00197                 "finishURL" => "/^.*$/",
00198                 "cancelURL" => "/^.*$/"
00199             )
00200         )
00201 
00202 );
00203 
00204 
00205 // parameters
00206 
00207 // a parameter is considered valid if the corresponding 
00208 // regular expression matches
00209 
00210 
00211 // default values for the parameters
00212 
00213 $default_params = array(
00214         "button" => "",
00215         "page" => "1",
00216         "lang" => $lang_default
00217 );
00218 
00219 // initialize parameters
00220 
00221 foreach ($default_params as  $k => $v) {
00222         if (!isset($_SESSION[$k]))
00223                 $_SESSION[$k] = $v;
00224 }
00225 
00226 
00227 // check user input
00228 
00229 $_SESSION["error"] = array();
00230 
00231 
00232 
00233 foreach ( array_merge($_POST, $_GET) as $k => $v)  {
00234 
00235         $v = normalize_input($v);       // strip blanks, accents, etc.
00236 
00237         // match against regexp for valid input (see $pageinfo[]) 
00238 
00239         if (!param_ok($pageinfo[$_SESSION['page']]["valid_params"], $k, $v )) { 
00240                 $_SESSION["error"][$k] = TRUE; 
00241         }
00242 
00243         $_SESSION[$k] = $v;
00244 
00245         // print "$k ->  $v <br>\n"; 
00246 }
00247 
00248 // special case: check date of birth
00249 
00250 if (isset($_SESSION["birthday_month"]))  {
00251 
00252         $year = (isset($_SESSION["birthday_year"])) ? 
00253                         $_SESSION["birthday_year"] : "0000";
00254         $month = (isset($_SESSION["birthday_month"])) ? 
00255                         $_SESSION["birthday_month"] : "00";
00256         $day = (isset($_SESSION["birthday_day"])) ? 
00257                         $_SESSION["birthday_day"] : "00";
00258 
00259 
00260         if (!checkdate($month, $day, $year) ) {
00261                  $_SESSION["error"]["birthday"] = TRUE; // invalid date
00262         } else {
00263 
00264                 if (strlen($day) == 1)
00265                         $day = "0$day";
00266 
00267                 if (strlen($year) == 1)
00268                         $year = "000$year";
00269                 else if (strlen($year) == 2)
00270                         $year = "00$year";
00271                 else if (strlen($year) == 3)
00272                         $year = "0$year";
00273 
00274                 $thisyear = strftime('%Y');
00275 
00276                 if ($year < 1900 or (($thisyear - $year) < 16) )
00277                         $_SESSION["error"]["birthday"] = TRUE;  
00278         }
00279 
00280         $_SESSION["birthday"] = "$year-$month-$day";
00281 
00282         unset($_SESSION["error"]["birthday_day"]);
00283         unset($_SESSION["error"]["birthday_month"]);
00284         unset($_SESSION["error"]["birthday_year"]);
00285 }
00286 
00287 // special case: check student id
00288 
00289 if (isset($_SESSION["student_id"]))  {
00290 
00291         $user_type = $_SESSION["usertype"];
00292 
00293         // only students can specify a student id
00294 
00295         // a student
00296         if ( $user_type <= 3  and empty($_SESSION["student_id"]))         
00297                 $_SESSION["error"]["student_id"] = TRUE;
00298 
00299         // no student
00300         if ( $user_type > 3  and !empty($_SESSION["student_id"]))  { 
00301                 $_SESSION["student_id"] = "";
00302                 unset($_SESSION["error"]["student_id"]);
00303         }
00304 }
00305 
00306 
00307 // evaluate button that the user pressed ("next", "previous", "cancel", etc.)
00308 
00309 if (!empty($_SESSION["button"])) {
00310         $b = $_SESSION["button"];
00311 
00312         // print "b=$b<br>";
00313 
00314 
00315         if ($b == $buttons['prev']) 
00316                 $_SESSION['page']--;
00317         else if (($b == $buttons['next']) or ($b == $buttons['finish'])) {
00318                 if (empty($_SESSION['error']))
00319                         $_SESSION['page']++;
00320         }
00321         else if ($b == $buttons['cancel'])  {
00322                 $url = strtr($_SESSION['cancelURL'], 
00323                              array('@lang@' => $lang));
00324                 session_destroy();
00325                 redirect($url);
00326         }
00327 
00328         unset($_SESSION["button"]);
00329 }
00330 
00331 
00332 // finished
00333 
00334 if ($_SESSION['page'] > 4) {
00335         $_SESSION['edit_finished'] = true;
00336         $url = strtr($_SESSION['finishURL'], array('@lang@' => $lang));
00337         redirect($url);
00338 }
00339 
00340 // display web page header 
00341 
00342 print strtr($text['html_header'], array( "@notabene@" => "", "@bodyattr@" => "",
00343         "@url-de@" => "edit.php?lang=de", "@url-en@" => "edit.php?lang=en" ));
00344 print $text['user_info'];
00345 print '<form method="POST">';
00346 
00347 
00348 // display content
00349 
00350 if ($_SESSION["page"] < 1) $_SESSION["page"] = 1;
00351 if ($_SESSION["page"] > 5) $_SESSION["page"] = 5;
00352 
00353 $p = $_SESSION["page"];
00354 
00355 
00356 $pi_entry = $pageinfo[$p]["edit"];
00357 
00358 // show incorrect entries by marking them with a big red cross
00359 
00360 $errors=FALSE;
00361 
00362 if (!empty($_SESSION["error"])) {
00363 
00364         foreach ($pi_entry as $k => $v) {
00365 
00366                 $is_err = FALSE;
00367 
00368                 foreach ( $v["fields"] as $f) {
00369                         // print "field: $f<br>";
00370 
00371                         if (!empty($_SESSION["error"][$f]))
00372                                 $is_err = TRUE;
00373                 } 
00374 
00375                 // mark with a red cross
00376 
00377                 if ($is_err) {
00378                         $pi_entry[$k]["label"] = 
00379                                 $text["error"] .  $pi_entry[$k]["label"];
00380                         $errors=TRUE;
00381                 }
00382         }
00383 }
00384 
00385 // print the table that contains the HTML form
00386 
00387 // print "page: $p <br>";
00388 
00389 if (($p == 2)  or ($p == 3)) {
00390         
00391         $x = ($p == 2) ? "primary" : "secondary";
00392 
00393         $q = "select address_types.name  " .
00394              "from address_types, usertypes " .
00395              "where address_types.id = usertypes.${x}_address_type " .
00396              "and usertypes.id='@id@' and lang='@lang@'";
00397 
00398 
00399         // foreach ($_SESSION as $k => $v) {
00400         //      print "$k -> $v <br>";
00401         //}
00402 
00403         $r = db_query_mysql($link, $q, 
00404                 array('@id@' => $_SESSION['usertype'], '@lang@' => $lang));
00405 
00406         $usertype_name = (empty($r)) ? "" : $r[1][0];
00407         
00408         print "<h1>" . htmlentities($usertype_name) . "</h1>";
00409 
00410 // xxx
00411 //      if (($user_type == "Institutsanschrift") and ($p == 2 or $p == 3)) 
00412 //              $pi_entry[0]["label"] = "Institut:";
00413 
00414 
00415 }
00416 
00417 if ($p == 4) {
00418         // table with user data
00419 
00420 //      \brief HTML table templates for use with print_table()
00421 
00422         $table1 = array(
00423                 array(  "label" => $fields['last_name']["label"],
00424                         "value" =>  $_SESSION['last_name'],
00425                      ),
00426                 array(  "label" => $fields['first_name']["label"],
00427                         "value" =>  $_SESSION['first_name'],
00428                      ),
00429                 array(  "label" => $fields['title']["label"],
00430                         "value" =>  $_SESSION['title'],
00431                      ),
00432                 array(  "label" => $fields['sex']["label"],
00433                         "value" =>  ($_SESSION['sex'] == m ) ? $text['sex_m'] : $text['sex_w'],
00434                      )
00435         );
00436 
00437 
00438         list( $year, $month, $day ) =  split('-',$_SESSION['birthday']);
00439 
00440         $table2 = array(
00441                 array(  "label" => $fields['birthday']["label"],
00442                         "value" =>  $day . "-" . $month . "-" . $year
00443                      ),
00444 
00445                 array(  "label" => $fields['usertype']["label"], 
00446                         "query"  => "select usertype_names.name " . 
00447                                     "from usertype_names " . 
00448                                     "where usertype_id = @usertype@ " . 
00449                                     "and usertype_names.type = '@sex@' " .
00450                                     "and lang='@lang@'"
00451                      ),
00452         
00453                 array(  "label" => $fields['student_id']["label"],
00454                         "value" => $_SESSION['student_id']
00455                      ),
00456                 array(  "label" => "&nbsp;",
00457                         "value" => ""
00458                      )
00459         );
00460 
00461 
00462         $table3 = array(
00463                 array(  "label" => "&nbsp",
00464                         "query" => "select address_types.name  " .
00465                                    "from address_types, usertypes " .
00466                                    "where address_types.id = usertypes.primary_address_type " .
00467                                    "and usertypes.id='@usertype@' and lang='@lang@'"
00468                      ),
00469                 array(  "label" => $fields['carry_over_1']['label'],
00470                         "value" => $_SESSION['carry_over_1'] 
00471                      ),
00472         
00473                 array(  "label" => $fields['street_1']['label'] . " / " . 
00474                                    $fields['house_1']['label'],
00475                         "value" => $_SESSION['street_1'] . " " . $_SESSION['house_1']
00476                      ),
00477                 array(  "label" => $fields['room_1']['label'],
00478                         "value" => $_SESSION['room_1'] 
00479                      ),
00480                 array(  "label" => $fields['zip_1']['label'] . " / " .
00481                                    $fields['town_1']['label'],
00482                         "value" => $_SESSION['zip_1'] . " " . $_SESSION['town_1'] 
00483                      ),
00484                 array(  "label" => $fields['phone_1']["label"],
00485                         "value" => $_SESSION['phone_1']
00486                      ),
00487                 array(  "label" => $fields['mobile_1']["label"],
00488                         "value" => $_SESSION['mobile_1']
00489              )
00490         );
00491 
00492         $table4 = array(
00493                 array(  "label" => "&nbsp;",
00494                         "query" => "select address_types.name  " .
00495                                    "from address_types, usertypes " .
00496                                    "where address_types.id = usertypes.secondary_address_type " .
00497                                    "and usertypes.id='@usertype@' and lang='@lang@'"
00498                      ),
00499                 array(  "label" => $fields['carry_over_2']['label'],
00500                         "value" => $_SESSION['carry_over_2'] 
00501                      ),
00502         
00503                 array(  "label" => $fields['street_2']['label'] . " / " . 
00504                                    $fields['house_2']['label'],
00505                         "value" => $_SESSION['street_2'] . " " . $_SESSION['house_2']
00506                      ),
00507                 array(  "label" => $fields['room_2']['label'],
00508                         "value" => $_SESSION['room_2'] 
00509                      ),
00510                 array(  "label" => $fields['zip_2']['label'] . " / " .
00511                                    $fields['town_2']['label'],
00512                         "value" => $_SESSION['zip_2'] . " " . $_SESSION['town_2'] 
00513                      ),
00514                 array(  "label" => $fields['phone_2']["label"],
00515                         "value" => $_SESSION['phone_2']
00516                      ),
00517                 array(  "label" => $fields['mobile_2']["label"],
00518                         "value" => $_SESSION['mobile_2']
00519                      )
00520         );
00521 
00522         // print table 
00523 
00524         $kw = array('@id@' => $_SESSION['id'], '@lang@' => $lang,
00525                     '@usertype@' => $_SESSION['usertype'], '@sex@' => $_SESSION['sex'] );
00526 
00527         print '<table width="100%" border="1" ><tr><td width="50%">';
00528         print_table($table1, 1 , "border=0", $link, $kw);
00529         print '</td><td>';
00530         print_table($table2, 1 , "border=0", $link, $kw);
00531         print '</td></tr><tr><td>';
00532         print_table($table3, 1 , "border=0", $link, $kw);
00533         print '</td><td>';
00534         print_table($table4, 1 , "border=0", $link, $kw);
00535         print '</td></tr></table>';
00536 
00537         print $text['info_1']; // info for user
00538 
00539 } else {
00540 
00541         $kw = array('@lang@' => $lang);
00542         print_table($pi_entry, 1, "border=\"0\"", $link, $kw); 
00543 
00544 
00545         // explain to the user what the big red cross means
00546         if ($errors) {
00547                 print $text["error"];
00548                 print $text["error_msg"];
00549         } else {
00550                 print "<br><br>";
00551         } 
00552 }
00553 
00554 
00555 // display "next", "previous", "cancel" buttons
00556         
00557 $x = ($p >  1) ? "" : 'disabled="yes"';
00558 $val = ($p ==  4) ? $buttons['finish'] : $buttons['next'];
00559 
00560 print "<input type=\"submit\" name=\"button\" " .
00561       "value=\"" . $buttons['prev'] . "\" $x>"; 
00562 
00563 print "<input type=\"submit\" name=\"button\" value=\"$val\" >";
00564 
00565 print '&nbsp; &nbsp; <input name="button" ' .
00566       'type="submit" value="' . $buttons['cancel'] . '"> &nbsp;';
00567 
00568 
00569 print $text['html_footer'];
00570 mysql_close($link); 
00571 
00572 ?>

Generated on Mon Aug 28 09:46:09 2006 for anmeldung by  doxygen 1.4.7