diff --git a/html/inc/db_forum.inc b/html/inc/db_forum.inc
new file mode 100644
index 0000000000..ea0505194c
--- /dev/null
+++ b/html/inc/db_forum.inc
@@ -0,0 +1,340 @@
+ -1) {
+ $sql .= ' LIMIT '.$min;
+ if ($nRec > -1) {
+ $sql .= ', '.$nRec;
+ }
+ } else if ($nRec > -1) {
+ $sql .= ' LIMIT '.$nRec;
+ }
+
+ $data = mysql_query($sql);
+ echo mysql_error();
+ return $data;
+}
+
+function getPosts($threadID, $min = -1, $nRec = -1, $sort_style="timestamp", $show_hidden = false) {
+ /* Calling function: Set $show_hidden = true when it is a moderator reading */
+ $sql = 'SELECT * FROM post WHERE thread = '. $threadID;
+ if (!$show_hidden) {
+ $sql .= ' AND hidden = 0';
+ }
+ switch($sort_style) {
+ case 'timestamp':
+ $sql .= ' ORDER BY timestamp desc';
+ break;
+ case 'timestamp_asc':
+ $sql .= ' ORDER BY timestamp asc';
+ break;
+ case 'score':
+ $sql .= ' ORDER BY score DESC';
+ break;
+ }
+
+ if ($min > -1) {
+ $sql .= ' LIMIT '.$min;
+ if ($nRec > -1) {
+ $sql .= ', '.$nRec;
+ }
+ } elseif ($nRec > -1) {
+ $sql .= ' LIMIT '.$nRec;
+ }
+ return mysql_query($sql);
+}
+
+/* specific database functions */
+
+function getCategory($categoryID) {
+ $sql = "SELECT * FROM category WHERE id = ".$categoryID;
+ $result = mysql_query($sql);
+ if ($result) {
+ return mysql_fetch_object($result);
+ } else {
+ return NULL;
+ }
+}
+
+function getForum($forumID) {
+ $sql = "SELECT * FROM forum WHERE id = " . $forumID;
+ $result = mysql_query($sql);
+ if ($result) {
+ return mysql_fetch_object($result);
+ } else {
+ return NULL;
+ }
+}
+
+function getThread($threadID) {
+ $sql = "SELECT * FROM thread WHERE id = ".$threadID;
+ $result = mysql_query($sql);
+ if ($result) {
+ return mysql_fetch_object($result);
+ } else {
+ return NULL;
+ }
+}
+
+function getPost($postID) {
+ $sql = "SELECT * FROM post WHERE id = ".$postID;
+ $result = mysql_query($sql);
+ if ($result) {
+ return mysql_fetch_object($result);
+ } else {
+ return NULL;
+ }
+}
+
+// Returns the post that started the thread with id = $threadId
+function getFirstPost($threadID) {
+ $sql = "SELECT * FROM post WHERE thread = " . $threadID ." ORDER BY id ASC limit 1";
+ $result = mysql_query($sql);
+ if ($result) {
+ return mysql_fetch_object($result);
+ } else {
+ return NULL;
+ }
+}
+
+function getForumPreferences($user){
+ $sql = "SELECT * FROM forum_preferences WHERE userid = '".$user->id."'";
+ $result = mysql_query($sql);
+ if (mysql_num_rows($result)>0) {
+ $prefs=mysql_fetch_object($result);
+
+ //Todo - find out how to simply merge two objects instead of specifying all the fields manually here
+ $user->avatar=$prefs->avatar;
+ $user->hide_avatars=$prefs->hide_avatars;
+ $user->sorting=$prefs->sorting;
+ $user->images_as_links=$prefs->images_as_links;
+ $user->signature=$prefs->signature;
+ $user->posts=$prefs->posts;
+ $user->avatar_type=$prefs->avatar_type;
+ $user->no_signature_by_default=$prefs->no_signature_by_default;
+ $user->link_popup=$prefs->link_popup;
+ $user->mark_as_read_timestamp=$prefs->mark_as_read_timestamp;
+ $user->special_user=$prefs->special_user;
+ $user->jump_to_unread=$prefs->jump_to_unread;
+ $user->hide_signatures=$prefs->hide_signatures;
+ $user->rated_posts=$prefs->rated_posts;
+ $user->low_rating_threshold=$prefs->low_rating_threshold;
+ $user->high_rating_threshold=$prefs->high_rating_threshold;
+ $user->ignorelist=$prefs->ignorelist;
+ $user->last_post=$prefs->last_post;
+ $user->ignore_sticky_posts=$prefs->ignore_sticky_posts;
+ $user->forum_preferences=1;
+
+ //Set defaults in certain cases:
+ if ($user->low_rating_threshold==0 and $user->high_rating_threshold==0){
+ $user->low_rating_threshold=DEFAULT_LOW_RATING_THRESHOLD;
+ $user->high_rating_threshold=DEFAULT_HIGH_RATING_THRESHOLD;
+ }
+ } else {
+ mysql_query("insert into forum_preferences set userid='".$user->id."'");
+ $user->forum_preferences=0;
+ }
+ return $user;
+}
+
+function setHasRated($user, $postid){
+ mysql_query("UPDATE forum_preferences SET rated_posts = concat('|$postid',rated_posts) WHERE userid = '".$user->id."'");
+ return mysql_error();
+}
+
+function setSortStyle($user,$place,$new_style){
+ if ($user->id!=""){
+ list($forum,$thread,$faq,$answer)=explode("|",$user->sorting);
+ $$place=$new_style;
+ $user->sorting=implode("|",array($forum,$thread,$faq,$answer));
+ $sql = "UPDATE forum_preferences SET sorting = '".$user->sorting."' where userid = '".$user->id."'";
+ mysql_query($sql);
+ } else {
+ list($forum,$thread,$faq,$answer)=explode("|",$_COOKIE['sorting']);
+ $$place=$new_style;
+ setcookie('sorting', implode("|",array($forum,$thread,$faq,$answer)), time()+3600*24*365);
+ }
+}
+
+function getThreadLastVisited($user, $thread){
+ if ($user->id==""){ //Disable read/unread stuff for users that are not logged in
+ $user->thread_last_visited=time(); //Always display as visited
+ return $user;
+ }
+ $sql = "SELECT timestamp from forum_logging where userid='".$user->id."' and threadid='".$thread->id."'";
+ $result = mysql_query($sql);
+ if ($result) {
+ $data=mysql_fetch_object($result);
+ $user->thread_last_visited=$data->timestamp;
+ } else {
+ }
+ $user->thread_last_visited= max(time()-MAX_FORUM_LOGGING_TIME,$user->thread_last_visited,$user->mark_as_read_timestamp);
+ //echo $user->thread_last_visited." - ".time();
+ return $user;
+}
+
+function setThreadLastVisited($user, $thread, $timestamp=""){
+ if ($timestamp==""){$timestamp=time();};
+ $sql = "REPLACE DELAYED into forum_logging set userid='".$user->id."', threadid='".$thread->id."', timestamp='$timestamp'";
+ mysql_query($sql);
+}
+
+
+function incThreadViews($threadID) {
+ $sql = "UPDATE thread SET views = views + 1 WHERE id = " . $threadID . " LIMIT 1";
+ mysql_query($sql);
+}
+
+function cleanup_forum_log(){
+ $sql = "SELECT timestamp FROM forum_logging where userid=0 and threadid=0";
+ $result=mysql_query($sql);
+ if (mysql_num_rows($result)>0) {
+ $data=mysql_fetch_object($result);
+ if ($data->timestamp