<?php
/*******************************************************************************
 * Copyright (c) 2007-2008 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 
 *    Matthew Mazaika <mmazaik  us.ibm.com> - bug 242011
*******************************************************************************/

require_once(dirname(__FILE__) . "/backend_functions.php");

class User {
  public $errStrs;
  
  public $userid              = 0;
  public $username            = '';
  public $first_name          = '';
  public $last_name           = '';
  public $email               = '';
  public $primary_language_id = 0;
  public $hours_per_week      = 0;
  public $is_committer		  = 0;
  public $updated_on          = '';
  public $updated_at          = '';
  public $created_on          = '';
  public $created_at          = '';

	function load($email, $password) {
		if($email != "" && $password != "") {
		    if (preg_match('^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z.]{2,5}$', $email)) {
				global $addon;
				$addon->callHook('user_authentication', array(&$this, $email, $password));
			}
		}
		
		if($this->userid > 0) {
			$Event = new EventLog("users", "userid", $this->userid, "__auth_success");
			$Event->add();
		}
		else {
			$Event = new EventLog("users", "userid", $_SERVER['REMOTE_ADDR'] . ":" . $email, "__auth_failure");
			$Event->add();
		}
		return $this->userid;
	}
	
	function loadFromID($_userid) {
		$rValue = false;
		if($_userid != "") {
			global $dbh;
			
			$_userid	= sqlSanitize($_userid, $dbh);

			$sql = "SELECT *
				FROM 
					users 
				WHERE userid = $_userid";
			$result = mysqli_query($dbh, $sql);
			if($result && mysqli_num_rows($result) > 0) {
				$rValue = true;
				$myrow = mysqli_fetch_assoc($result);
				
				$this->userid              = $myrow['userid'];
				$this->username            = $myrow['username'];
				$this->first_name          = $myrow['first_name'];
				$this->last_name           = $myrow['last_name'];
				$this->email               = $myrow['email'];
				$this->primary_language_id = $myrow['primary_language_id'];
				$this->is_committer			= $myrow['is_committer'];
				$this->hours_per_week      = $myrow['hours_per_week'];
				$this->updated_on          = $myrow['updated_on'];
				$this->updated_at          = $myrow['updated_at'];
				$this->created_on          = $myrow['created_on'];
				$this->created_at			= $myrow['created_at'];
			}
			else {
				$GLOBALS['g_ERRSTRS'][1] = mysqli_error($dbh);
			}
		}
		return $rValue;
	}
}
?>