<?php

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

/**
 * <?xml version="1.0" encoding="UTF-8"?>
 * <thread tid="1" name="Thread1">
 *   .
 *   .
 *   .
 * </thread>
 */

class Thread {
	public $tid;
	public $name;
	public $lastseen = array();
	public $lastpost;

	public function show()
	{
		global $fid, $current_user;
		echo "    <div class=\"thread\">\n";
		if($this->lastseen[$current_user->uid] < $this->lastpost) echo "  <div class=\"new\"></div>";
		else echo "      <div class=\"nonew\"></div>\n";
		echo "      <a href=\"?fid=" . $fid . "&amp;tid=" .	$this->tid . "\">" . $this->name . "</a>\n";
		echo "    </div>\n";
	}

	private function loadLastSeen($lastseen)
	{
		if($lastseen == "") return;
		$list = explode(",", $lastseen);
		foreach($list as $l) {
			$pair = explode("=", $l);
			if($pair[0] != "" && $pair[1] != "") {
				$this->lastseen[$pair[0]] = $pair[1];
			} 
		}
	}

	public function Thread($tid, $name, $lastpost, $lastseen)
	{
		$this->tid = $tid;
		$this->name = $name;
		$this->lastpost = $lastpost;
		$this->loadLastSeen($lastseen);
	}
}

class Threads {

	private $dir;
	public $threads = array();
	
	public function add($thread) {
		//		$key = $thread->name;
		//		$key = sprintf("%d-%d", $thread->lastpost, $thread->tid);
		//		$key = sprintf("%d", $thread->lastpost);
		$key = $thread->lastpost . "-" . $thread->tid;//name;
		//		echo "[" . $key . "]";
		$this->threads[$key] = $thread;
	}
	
	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, "<members>\n");
		foreach($this->members as $member) {
			fwrite($fp, "  <member id=\"" .
						 htmlspecialchars($member->id, ENT_QUOTES, "UTF-8") . "\"\n");
			fwrite($fp, "          name=\"" . 
						 htmlspecialchars($member->name, ENT_QUOTES, "UTF-8") . "\"\n");
			fwrite($fp, "          description=\"" . 
						 htmlspecialchars($member->description, ENT_QUOTES, "UTF-8") . "\"\n");
			fwrite($fp, "          image=\"" . 
						 htmlspecialchars($member->image, ENT_QUOTES, "UTF-8") . "\">\n");


			fwrite($fp, "  </member>\n");
		}
		fwrite($fp, "</members>\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 getThread($tid)
	{
		$thread = $this->threads[$tid]; 
		return $thread;
	}

	public function show()
	{
		foreach($this->threads as $thread) {
			$thread->show();
		}
	}

	public function newStuff()
	{
		global $current_user;

		foreach($this->threads as $thread) {
			if($thread->lastseen[$current_user->uid] < $thread->lastpost) return true;
		}

		return false;
	}

	private function read()
	{
		$dh = opendir($this->dir);
		while($file = readdir($dh)) {
			if($file == "." || $file == "..") continue;
			$dom = new DomDocument;
			$dom->preserveWhiteSpace = FALSE;
			$dom->load($this->dir . "/" . $file);
			$threads = $dom->getElementsByTagName('thread');
			
			foreach($threads as $f) {
				$thread = new Thread($f->getAttribute('tid'),
														 $f->getAttribute('name'),
														 $f->getAttribute('lastpost'),
														 $f->getAttribute('lastseen'));

				$this->add($thread);
			}
		}
	}

	public function Threads($dir)
	{
		$this->dir = $dir;
		$this->read();
		krsort($this->threads);
	}

}
?>