<?php

include_once($UTIL_DIR . "/convert.php");

class User {
	public $uid;
	public $gid;
	public $enabled;
	public $username;
	public $password;
	public $name;
	public $avatar;
	public $email;
	public $notified;
	public $signature;

	public function checkPassword($password)
	{
		return $this->password == sha1(md5($password));
	}

	public function write($fp)
	{
		fwrite($fp, "  <user enabled=\"" . $this->enabled . "\"\n");
		fwrite($fp, "        uid=\"" . $this->uid . "\"\n");
		fwrite($fp, "        gid=\"" . $this->gid . "\"\n");
		fwrite($fp, "        notified=\"" . $this->notified . "\"\n");
		fwrite($fp, "        username=\"" . htmlspecialchars($this->username, ENT_QUOTES, "UTF-8") . "\"\n");
		fwrite($fp, "        password=\"" . $this->password . "\"\n");
		fwrite($fp, "        name=\"" . htmlspecialchars($this->name, ENT_QUOTES, "UTF-8") . "\"\n");
		fwrite($fp, "        avatar=\"" . htmlspecialchars($this->avatar, ENT_QUOTES, "UTF-8") . "\"\n");
		fwrite($fp, "        email=\"" . htmlspecialchars($this->email, ENT_QUOTES, "UTF-8") . "\">");
		fwrite($fp, htmlspecialchars($this->signature, ENT_QUOTES, "UTF-8"));
		fwrite($fp, "</user>\n");
	}

	public function User($enabled, $uid, $gid, $username, $password, $name, $email, $avatar, $signature, $notified)
	{
		$this->enabled = $enabled;
		$this->gid = $gid;
		$this->uid = $uid;
		$this->username = $username;
		$this->password = $password;
		$this->email = $email;
		$this->name = $name;
		$this->avatar = $avatar;
		$this->signature = $signature;
		if($notified == "") $notified = 0;
		$this->notified = $notified;
	}
}

class Users {

	private $file;
	public $users = array();
	
	public function add($user) {
		$key = $user->uid;
		$this->users[$key] = $user;
	}
	
	public function write()
	{
		$fp = fopen($this->file, "w");

		$block = TRUE;
		flock($fp, LOCK_EX, $block); // do an exclusive lock

		fwrite($fp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");

		fwrite($fp, "<users>\n");
		foreach($this->users as $user) {
			$user->write($fp);
		}
		fwrite($fp, "</users>\n");

		fclose($fp);
	}

	/*
	public function deleteForumUser($id)
	{
		if($this->members[$id]) {
			unset($this->members[$id]); 
			//			$this->write();
		} else {
			echo "<p>ERROR: User! <em>".$id."</em> does not exist!</p>\n";
			return false;
		}
		return true;
	}
	*/

	public function getUserID($username)
	{
		foreach($this->users as $user) {
			if($user->username == $username) return $user->uid;
		}
		return -1;
	}

	public function getUser($uid)
	{
		$user = $this->users[$uid]; 
		return $user;
	}

	private function read()
	{
		$dom = new DomDocument;
		$dom->preserveWhiteSpace = FALSE;
		$dom->load($this->file);
		$users = $dom->getElementsByTagName('user');

		foreach ($users as $u) {
			$user = new User($u->getAttribute('enabled'),
											 $u->getAttribute('uid'),
											 $u->getAttribute('gid'),
											 $u->getAttribute('username'),
											 $u->getAttribute('password'),
											 $u->getAttribute('name'),
											 $u->getAttribute('email'),
											 $u->getAttribute('avatar'),
											 $u->textContent,
											 $u->getAttribute('notified'));

			$this->add($user);
		}

	}

	public function Users($file)
	{
		$this->file = $file;
		if(file_exists($file)) $this->read();
		else {
			// Create default users.xml file.
			$user = new User(true, 0, 0, "admin", "8456c0209aaa9ca04730a3160caf6e5e6b5ea389", "Administrator", "", "", 0);
			$this->add($user);
			$this->write();
		}
	}

}
?>