diff options
Diffstat (limited to 'forum/utils/threads.php')
| -rw-r--r-- | forum/utils/threads.php | 162 | 
1 files changed, 162 insertions, 0 deletions
| diff --git a/forum/utils/threads.php b/forum/utils/threads.php new file mode 100644 index 0000000..e3f0996 --- /dev/null +++ b/forum/utils/threads.php @@ -0,0 +1,162 @@ +<?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\">"; +		if($this->lastseen[$current_user->uid] < $this->lastpost) echo "<div class=\"new\"></div>"; +		else echo "<div class=\"nonew\"></div>"; +		echo "<a href=\"?fid=" . $fid . "&tid=" .	$this->tid . "\">" . $this->name . "</a>"; +		echo "</div>"; +	} + +	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); +	} + +} +?>
\ No newline at end of file | 
