<?php

// +----------------------------------------------------------------------+
// | OpenConf                                                             |
// +----------------------------------------------------------------------+
// | Copyright (c) 2002-2008 Zakon Group LLC.  All Rights Reserved.       |
// +----------------------------------------------------------------------+
// | This source file is subject to the OpenConf License, available on    |
// | the OpenConf web site: www.OpenConf.com                              |
// +----------------------------------------------------------------------+

require_once "../include.php";

function signInClosed() {
	printHeader("Sign In",3);
	print '<p align="center"><span class="warn">Committee sign-in is closed.</span></p>';
	printFooter();
	exit;
}

$vformar[1] = "lkalskjo24uakd";
$vformar[2] = "lkiqwje0913284";
$vformar[3] = "loj0923489wefs";

$errmsg = "";

// Keep session active if it exists for recovery purposes
session_name('OPENCONF');
session_start();

if (isset($_POST['submit']) && ($_POST['submit'] == "Sign In")) {
  // Check for bad uname or pwd
  if (!preg_match("/^[\w\.\-]{5,30}$/",$_POST['uname']) || empty($_POST['upwd'])) {
    $errmsg =  '<span class="err">Username and/or password not valid.  Please try again.  If you continue to have a problem signing in, please contact the <a href="mailto:' . $OC_configAR['OC_pcemail'] . '?subject=sign-in problem">Program Chair</a>.</span><p>';
  } else {
    $lowusername = oc_strtolower($_POST['uname']);
    $q = "SELECT reviewerid, password, onprogramcommittee FROM " . OCC_TABLE_REVIEWER . " WHERE username='$lowusername'";
    $r = ocsql_query($q) or err("Unable to query database ".mysql_errno());
    // Check for multiple matching usernames
    if (($rnum=mysql_num_rows($r)) > 1) { 
		printHeader("Sign In");
		err("Multiple usernames"); 
	}
    // Check for unknown username
    if ($rnum == 0) { $errmsg = '<span class="err">Incorrect username or password.  Please try again.  If you continue to have a problem signing in, please contact the <a href="mailto:' . $OC_configAR['OC_pcemail'] . '?subject=sign-in problem">Program Chair</a>.</span><p>'; }
    else {
		$p = mysql_fetch_array($r);
		// Check that sign-in is still open for user
		if (!$OC_statusAR['OC_rev_signin_open']) {
			if ($p['onprogramcommittee'] == "F") {
				signInClosed();
			} elseif (!$OC_statusAR['OC_pc_signin_open']) {
				signInClosed();
			}
		}
		// Check for bad pwd
		if ((hashPassword($_POST['upwd'], $p['password']) != $p['password']) && (md5($_POST['upwd']) != $p['password']) && ((OCC_CHAIR_PWD_TRUMPS == 0) || (hashPassword($_POST['upwd'], $OC_configAR['OC_chair_pwd']) != $OC_configAR['OC_chair_pwd'])) && (!defined('OCC_SUPERCHAIR_PASSWORD') || (hashPassword($_POST['upwd'], OCC_SUPERCHAIR_PASSWORD) != OCC_SUPERCHAIR_PASSWORD))) {
			$errmsg =  '
<span class="err">Incorrect username or password.  Please try again below or <a href="reset.php">click here to reset your password</a>.</span>
<p>
			';
		}
		else {  // We have a winner!
			// If session timed out, is it same reviewer coming back?
			if (isset($_SESSION[OCC_SESSION_VAR_NAME]['acreviewerid']) && ($_SESSION[OCC_SESSION_VAR_NAME]['acreviewerid'] == $p['reviewerid'])) {
			    $sameid = True;
			} else {
				$sameid = False;
			}
			// Set session vars
			$_SESSION[OCC_SESSION_VAR_NAME]['acusername'] = $lowusername;
			$_SESSION[OCC_SESSION_VAR_NAME]['acreviewerid'] = $p['reviewerid'];
			$_SESSION[OCC_SESSION_VAR_NAME]['aclast'] = time();
			$_SESSION[OCC_SESSION_VAR_NAME]['acpc'] = $p['onprogramcommittee'];
			$_SESSION[OCC_SESSION_VAR_NAME]['actoken'] = generateID();

			// Route user to recover submission if timed out or onwards to main page
			if ($sameid && isset($_SESSION[OCC_SESSION_VAR_NAME]['POST']['submit'])) {
				$_SESSION[OCC_SESSION_VAR_NAME]['POST']['token'] = $_SESSION[OCC_SESSION_VAR_NAME]['actoken']; // reset token
				session_write_close();
			    header('Location: recover.php?' . strip_tags(SID));
			} else {
				// Remove POST if set
				if (isset($_SESSION[OCC_SESSION_VAR_NAME]['POST'])) {
					unset($_SESSION[OCC_SESSION_VAR_NAME]['POST']);
				}
				session_write_close();
				header('Location: reviewer.php?' . strip_tags(SID));
			}
			exit;

		}
	}
  }
  // Weak attempt at catching multiple failed logins
  if ($_POST['validform'] == $vformar[1]) { $vform = $vformar[2]; }
  else { 
    $vform = $vformar[3]; 
    if ($_POST['validform'] == $vformar[3]) {
      $errmsg .= '
<span class="err">Hummm... 3+ failed attempts.  Why don\'t you click the "<i>I forgot it</li>" link and we will be glad to help you out.</span><p>
      ';
    }
  }
}
else { 
	$vform = $vformar[1]; 
}

printHeader("Sign In",3);

if (!empty($errmsg)) { 
	print $errmsg;
}
elseif (isset($_GET['e']) && ($_GET['e'] == "exp")) {
	print '<p class="err">Your session has timed out or you did not sign in properly.  Please sign in again.</p>';
	if (isset($_SESSION[OCC_SESSION_VAR_NAME]['POST']['submit'])) {
		print '<p class="warn">It appears you were filling out a review &#8211; by signing back in right now with the same username, you will have the option to save the review.</p>';
	}
	
}

print '
<br>
<center>
<form method="post" action="' . $_SERVER['PHP_SELF'] . '?' . strip_tags(SID) . '">
<table border=0>
<tr><td><b>Username:</b></td><td><input size=20 name="uname" value="' . (isset($_POST['uname']) ? $_POST['uname'] : '') . '" tabindex="1"></td><td><font size="-1">( <a href="email_username.php">forgot username?</a> )</font></td></tr>
<tr><td><b>Password:</b></td><td><input type="password" size=20 name="upwd" tabindex="2"></td><td><font size="-1">( <a href="reset.php">forgot password?</a> )</font></td></tr>
<tr><th align="center" colspan=2><br><input type="submit" name="submit" value="Sign In" tabindex="3"></th><td>&nbsp;</td></tr>
</table>
<input type="hidden" name="validform" value="' . $vform . '">
</form>
<p>
<br>
<script language="javascript">
<!--
document.forms[0].elements[0].focus();
// -->
</script>
';

if ($OC_configAR['OC_ReviewerTimeout'] > 0) {
    print '
<p>
<span class="note">Note: Session times out after ' . $OC_configAR['OC_ReviewerTimeout'] . ' minutes of inactivity</span>
';
}

print '
</center>
<p>
';

printFooter();

?>
