#include "party.style"
#include "passwd.inc"

<auth>

<?
  # Only the admin is permitted to edit an id different to his own
  if ($DEBIAN_AUTH['admin'] != 1 || !isset ($id)) {
    $id = $DEBIAN_AUTH['id'];
  }

  $problem = '';

  if ($delete == 1) {
    $query = sprintf ("DELETE FROM party_person WHERE id = %d", $id);
    pg_exec ($dbh, $query);
  } else {
  if ((strlen ($pass) > 0) && (strlen ($retype) > 0)) {
    if ($pass != $retype) {
      $problem .= "<p>You mistyped one or both passwords.</p>";
    } else {
      $query = sprintf ("UPDATE party_person SET passwd = '%s' WHERE id = %d",
		        md5 ($pass),
			$id);

      $sth = pg_exec ($dbh, $query) or die("Cannot update password.");
    }
  } else {
    if (!strlen ($name)) {
      $problem .= "<p>No name given, baaaaaaad.</p>";
    }

    $query  = "SELECT day FROM party_dates ORDER BY day";
    $sth = pg_exec ($dbh, $query) or die("Datenbank-Abfrage!");

    $days = array ();
    for ($nr=0; $nr < pg_NumRows ($sth); $nr++) {
      $row = pg_fetch_array ($sth, $nr);
      if ($GLOBALS[$row['day']] == 1) { $days[]=$row['day']; }
    }

    if (count ($days) == 0) {
      $problem .= "<p>No days selected.</p>";
    }

    if (strlen ($email)) {
      $query = sprintf ("SELECT id FROM party_person WHERE email = '%s' AND NOT id = %d",
			addslashes ($email), $id);
      $sth = pg_exec ($dbh, $query) or die("Cannot execute query.");
      if (pg_NumRows ($sth) > 0) {
	$problem .= "<p>This mail address is already in use, please use a different one.</p>";
      }
    }

    if (strlen ($login)) {
      $query = sprintf ("SELECT id FROM party_person WHERE login = '%s' AND NOT id = %d",
			addslashes ($login), $id);
      $sth = pg_exec ($dbh, $query) or die("Cannot execute query.");
      if (pg_NumRows ($sth) > 0) {
	$problem .= "<p>This login is already in use, please use a different one.</p>";
      }
    }

    if (!strlen ($problem)) {
      $sth = pg_exec ($dbh, "BEGIN TRANSACTION") or die("Cannot begin transaction!");

      $query = sprintf ("UPDATE party_person SET "
		       ."name = '%s',"
		       ."email = '%s',"
		       ."login = '%s',"
		       ."city = '%s',"
		       ."country = '%s',"
		       ."food = '%s',"
		       ."type = '%s' "
		       ."WHERE id = %d",
		       addslashes ($name),
		       addslashes ($email),
		       addslashes ($login),
		       addslashes ($city),
		       addslashes ($country),
		       addslashes ($food),
		       addslashes ($type),
		       $id);
      $sth = pg_exec ($dbh, $query) or die("Cannot update your personal data.");

      $query = sprintf ("DELETE FROM party_attend WHERE person = %d", $id);
      $sth = pg_exec ($dbh, $query) or die("Cannot clear attendance.");

      reset ($days);
      while (list(,$day) = each($days)) {
	$query = sprintf ("INSERT INTO party_attend (person,day) VALUES (%d,'%s')",
			  $id,
			  addslashes ($day));
	$sth = pg_exec ($dbh, $query) or die("Cannot assign a day for you.");
      }

      # Only the admin is permitted to regenerate a password
      if ($DEBIAN_AUTH['admin'] == 1) {
        if (isset ($newpass) && $newpass == 1) {
	  if (!empty($email)) {
	    $passwd = randpass();

	    $query = sprintf ("UPDATE party_person SET "
			     ."passwd = '%s' WHERE id = %d",
			     md5 ($passwd),
			     $id);
	    $sth = pg_exec ($dbh, $query) or die("Cannot update your personal data.");
	    mail_password ($email, $passwd);
	  }
	}
      }
      $sth = pg_exec ($dbh, "COMMIT") or die("Cannot finish transaction!");
    }
  }
  }	# if ($delete)... else...

?>

#include <infodrom.style>
#include <debian.style>

<page title="Debian Birthday Party -- Update Data">

<h1 align=center>Debian Birthday Party</h1>

<?
  if (strlen ($problem)) {
    echo "<p>An error is occurred.  Please go back to the formular and fix the problem.</p>";
    echo $problem;
  } else {
    if ($DEBIAN_AUTH['admin'] != 1) {
      printf ("<p>Hello %s!</p><p>You've successfully updated your information.</p>", $name);
    } else {
      printf ("<p>Hello Admin!</p><p>You've successfully updated the user's information.</p>", $name);
    }
  }
?>

</page>

# Local variables:
# mode: indented-text
# mode: auto-fill
# end:
