<?php
/*******************************************************************************
 * Copyright (c) 2007 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Paul Colton (Aptana)- initial API and implementation
 *    Eclipse Foundation
 *    IBM corporation (Matthew Mazaika) - bug 242915 
*******************************************************************************/
include("global.php");
InitPage("");

require_once(dirname(__FILE__) . "/../classes/system/user.class.php");
require_once(dirname(__FILE__) . "/../classes/system/session.class.php");

$pageTitle 		= "Contribute Translations to Babel";
$pageKeywords 	= "translation,language,nlpack,pack,eclipse,babel";

$USERNAME 	= getHTTPParameter("username", "POST");
$PASSWORD 	= getHTTPParameter("password", "POST");
$REMEMBER 	= getHTTPParameter("remember", "POST");
$SUBMIT 	= getHTTPParameter("submit");

if(!isset($_SESSION['login_failed_attempts'])){
	$_SESSION['login_failed_attempts'] = array();
}

if($SUBMIT == "Login") {
	if($USERNAME != "" && $PASSWORD != ""){
		$User = new User();
		if(!$User->load($USERNAME, $PASSWORD)) {
			foreach($_SESSION['login_failed_attempts'] as $timestamp){
				if($timestamp < strtotime("2 minute ago")){
					unset($_SESSION['login_failed_attempts'][$timestamp]);
				}
			}
			$_SESSION['login_failed_attempts'][] = strtotime('now');
			if(count($_SESSION['login_failed_attempts']) > 2){
				$GLOBALS['g_ERRSTRS'][0] = "Authentication failed.  <b>If you just created a NEW BUGZILLA ACCOUNT wait a few minutes and try again</b>.";
			}else{
				$GLOBALS['g_ERRSTRS'][0] = "Authentication failed.  Please verify your username and/or password are correct.";
			}
			// we couldn't authenticate, therefore we don't have a user anymore
			$User = null;
		}
		else {
			# create session
			$Session = new Session();
			$Session->create($User->userid, $REMEMBER);
			SetSessionVar('User', $User);
			if(isset($_SESSION['s_pageLast'])) {
				if($_SESSION['s_pageLast'] != "") {
					exitTo($_SESSION['s_pageLast']);
				}
				else {
					exitTo("translate.php");
				}
			}
			else {
				exitTo("translate.php");
			}
		}
	}
	else {
		$GLOBALS['g_ERRSTRS'][0] = "Your username and password must not be empty.";
	}
}
if($SUBMIT == "Logout") {
	$Session = new Session();
	$Session->destroy();
	// we're logging out, therefore we don't have a user anymore
	$User = null;
	$GLOBALS['g_ERRSTRS'][0] = "You have successfully logged out.  You can login again using the form below.";
}

# TODO: finish the intro text


global $addon;
$addon->callHook("head");

include("content/en_login.php");

global $addon;
$addon->callHook("footer");
?>