view register.inc.php @ 0:8019b357cc03

Initial import.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 04 Dec 2012 19:07:18 +0200
parents
children 6da681d1f62a
line wrap: on
line source

<?
$mode = stGetRequestItem("mode", "start");

$botCheckIDs = "aBcdefghIjklmnopqrsTuvxyz0123456";
$botCheckOPs = "bit";
$botCheckROPs = "+-*";


function stPrintFormData($button, $mode = "start")
{
  echo
  "<form name=\"register\" action=\"register\" method=\"post\">\n".
  " <input type=\"submit\" value=\"".chentities($button)."\" />\n";

  stPrintFormHiddenInput("mode", $mode);
  
  foreach (array("name", "groups", "email", "oneliner", "hash", "botcheck") as $name)
    stPrintFormHiddenInput($name, stGetRequestItem($name));

  echo "</form>\n";
}


function intValueToHash($val)
{
  global $botCheckIDs;
  $str = "";
  do
  {
    $str = $botCheckIDs[$val & 31].$str;
    $val >>= 5;
  }
  while ($val > 0);
  return $str;
}


function intHashToValue($hash)
{
  global $botCheckIDs;
  for ($val = 0, $i = 0; $i < strlen($hash); $i++)
  {
    $val *= 32;
    $n = strpos($botCheckIDs, $hash[$i]);
    if ($n !== FALSE)
      $val += $n;
    else
      return -2;
  }
  return $val;
}


function splitHash($hash)
{
  global $botCheckOPs;
  return preg_split("/([".$botCheckOPs."])/", $hash, -1, PREG_SPLIT_DELIM_CAPTURE);
}


function hashToCheckStr($hash)
{
  global $botCheckOPs, $botCheckROPs;
  $out = "";
  
  foreach (splitHash($hash) as $val)
  {
    $i = strpos($botCheckOPs, $val);
    if ($i !== FALSE)
      $out .= " ".$botCheckROPs[$i]." ";
    else
      $out .= intHashToValue($val);
  }
  return $out;
}


function hashToAnswer($hash)
{
  eval("\$res = ".hashToCheckStr($hash).";");
  return $res;
}

// Check if registration is enabled
if (!stChkSetting("allowRegister"))
{
?>
<h1>Sorry, registration disabled!</h1>
<p>
Registration to the event is not available at this time.
</p>
<?
}
else
if ($mode == "start")
{
  $botCheckHash =
    intValueToHash(rand(1,5)).
    $botCheckOPs[rand(0,2)].
    intValueToHash(rand(1,5)).
    $botCheckOPs[rand(0,2)].
    intValueToHash(5 * rand(1,5));

?>
<h1>Registration</h1>

<form name="register" action="register" method="post">
 <input type="hidden" name="mode" value="check">
 <input type="hidden" name="hash" value="<? echo $botCheckHash ?>">
 <table>
<?
stPrintFormTextInput("Handle:", "(elite)", 30, 30, "name");
stPrintFormTextInput("Group(s):", "(elite crew^supahmen)", 40, 64, "groups");
stPrintFormTextInput("E-mail:", "(to be informed of location etc)", 40, 64, "email");
stPrintFormTextInput("Oneliner:", "(whatever)", 64, 64, "oneliner");
stPrintFormTextInput(hashToCheckStr($botCheckHash)." = ", "(I.Q. / robot check".
//" [".hashToAnswer($botCheckHash)."]".
")", 20, 20, "botcheck");
?>
  <tr><td colspan="2"></td><td><input type="submit" value="Register" /></td></tr>
 </table>
</form>
<p>
Only your <b>handle</b> and the answer to the botcheck are strictly required. If you plan on joining the IRC channel
(<? stPrintSpecURL("irc") ?>) or staying up to date by other means,
<b>e-mail</b> is not required either.
</p>

<?
}
else
if ($mode == "check")
{
  if (stChkDataItem("name") || strlen(stGetRequestItem("name")) < 3)
    stError("Handle / name not given, or too short.");

  if (stChkDataItem("hash"))
    stError("Invalid data.");

  $hash = stGetRequestItem("hash");
  $answer = stGetRequestItem("botcheck");
  if (hashToAnswer($hash) != intval($answer))
    stError("Incorrect answer to I.Q. / bot check.");

  if ($errorSet)
  {
    echo "<p>Following errors occured:</p>\n".
    "<ul>\n".$errorMsg."</ul>\n";
    stPrintFormData("Go back");
  }
  else
  {
    $sql = stPrepareSQL(
      "INSERT INTO attendees (regtime,name,groups,oneliner,email) VALUES (%d,%S,%S,%S,%S)",
      time(), "name", "groups", "oneliner", "email");

    if (stExecSQL($sql) !== FALSE)
    {
      echo "<h1>Registration successful</h1>\n";
      echo "<p>Now go make a demo about it!</p>\n";
      if (stChkDataItem("email"))
      {
        echo "<h2>By the way ...</h2>".
        "<p>As you did not specify an e-mail contact address, you'll have to get updates ".
        "and information about the location (if you don't already know it) by ".
        "some other means (<b>".stSpecURL("irc").", for example.</b>)</p>";
      }
    }
    else
    {
      echo "<h1>An error occured.</h1>\n";
      echo "<p>Oh noes! SQL error happenstance!</p>";
    }
  }
}
?>