-1) { $sql .= ' LIMIT '.$min; if ($nRec > -1) { $sql .= ', '.$nRec; } } else if ($nRec > -1) { $sql .= ' LIMIT '.$nRec; } return mysql_query($sql); } function getPosts($threadID, $min = -1, $nRec = -1, $sort_style="timestamp") { $sql = 'SELECT * FROM post WHERE thread = '. $threadID; switch($sort_style) { case 'timestamp': $sql = $sql . ' ORDER BY timestamp desc'; break; case 'timestamp_asc': $sql = $sql . ' ORDER BY timestamp asc'; break; case 'score': $sql = $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->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 getHasRated($user, $postid){ return (strstr($user->rated_posts,"|".$postid)); } function setHasRated($user, $postid){ mysql_query("UPDATE forum_preferences SET rated_posts = concat('|$postid',rated_posts) WHERE userid = '".$user->id."'"); return mysql_error(); } function getSortStyle($user,$place){ if ($user->id!=""){ list($forum,$thread,$faq,$answer)=explode("|",$user->sorting); } else { list($forum,$thread,$faq,$answer)=explode("|",$_COOKIE['sorting']); } return $$place; } 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->timestampforum . " LIMIT 1"; mysql_query($sql); } function addPost($threadID, $userID, $parentID, $content, $add_signature=false) { if ($add_signature){$sig=1;} else {$sig=0;}; if ($parentID) { $sql = "INSERT INTO post (thread, user, timestamp, content, parent_post, signature) VALUES (" . $threadID . ", " . $userID . ", UNIX_TIMESTAMP(), '" . $content . "', " . $parentID . ", ".$sig.")"; } else { $sql = "INSERT INTO post (thread, user, timestamp, content, signature) VALUES (" . $threadID . ", " . $userID . ", UNIX_TIMESTAMP(), '" . $content . "', ".$sig.")"; } $result = mysql_query($sql); if (!$result) return false; //return ($post->id = mysql_insert_id()); mysql_insert_id(); return true; } function updatePost($postID, $content) { $x = addslashes(sanitize_html(stripslashes($content))); $sql = "UPDATE post SET content = \"$x\", modified = UNIX_TIMESTAMP() WHERE id = " . $postID; $result = mysql_query($sql); if (!$result) return false; return true; } function updateThread($threadID, $title) { $title = addslashes(sanitize_html(stripslashes($title))); $title = trim($title); if (strlen($title) == 0) { return false; } $sql = "UPDATE thread SET title = \"$title\" WHERE id = " . $threadID; $result = mysql_query($sql); if (!$result) return false; return true; } /* display functions */ function show_posts($thread, $sort_style, $filter, $show_controls=true, $do_coloring=true, $is_helpdesk=false) { global $logged_in_user; $n = 1; if ($show_controls && !$is_helpdesk) { $controls = FORUM_CONTROLS; } else if ($show_controls && $is_helpdesk) { $controls = HELPDESK_CONTROLS; } else { $controls = NO_CONTROLS; } $posts = getPosts($thread->id, -1, -1, $sort_style); $logged_in_user = getThreadLastVisited($logged_in_user,$thread); setThreadLastVisited($logged_in_user,$thread); $firstPost = getFirstPost($thread->id); if ($is_helpdesk) { if ($firstPost) { show_post($firstPost, $thread, $logged_in_user, $n, $controls, true,$filter); if ($firstPost->timestamp>$logged_in_user->thread_last_visited){ $first_unread_post=$firstPost; } } } while ($post = mysql_fetch_object($posts)) { if (!$is_helpdesk || ($is_helpdesk && $post->id != $firstPost->id)) { show_post($post, $thread, $logged_in_user, $n, $controls, false, $filter); if ($do_coloring) $n = ($n+1)%2; if (($post->timestamp>$logged_in_user->thread_last_visited) && (($post->timestamp<$first_unread_post->timestamp) || $first_unread_post->timestamp==0)){ $first_unread_post=$post; } } } if ($logged_in_user->jump_to_unread){ if ($first_unread_post->id!=""){ echo ""; } else { echo ""; } } } function show_post($post, $thread, $logged_in_user, $n, $controls=FORUM_CONTROLS, $separate=false, $filter=true) { global $post_ratings; // <------ Old obsolete rating method (remove someday) $user = lookup_user_id($post->user); $user = getForumPreferences($user); $data = mysql_query("SELECT userid FROM profile WHERE userid = " . $user->id); //Lookup existance of profile for user $user->has_profile = (mysql_numrows($data) > 0); //and store this info in the user object $user->has_avatar = ($user->avatar != ""); //for later access //If the user that made this post is on the list of people to ignore, change thresholds to be more strict if (in_array($user->id,explode("|",$logged_in_user->ignorelist))){ $user_is_on_ignorelist=true; $rated_below_threshold = ($logged_in_user->high_rating_threshold>($post->score*$post->votes)); $rated_above_threshold = ($logged_in_user->high_rating_threshold+abs($logged_in_user->low_rating_threshold)<($post->score*$post->votes)); } else { //Use normal threshold values $rated_below_threshold = ($logged_in_user->low_rating_threshold>($post->score*$post->votes)); $rated_above_threshold = ($logged_in_user->high_rating_threshold<($post->score*$post->votes)); } $can_edit = $logged_in_user && $user->id == $logged_in_user->id; echo " id\"> "; echo user_links($user, URL_BASE); if ($user->special_user) { //If this user is somehow special if ($user->special_user==1) $fstatus=ST_ADMIN; //this is displayed in the forums if ($user->special_user==2) $fstatus=ST_MODERATOR; //so that people know who they are if ($user->special_user==3) $fstatus=ST_DEV; //talking to. if ($user->special_user==4) $fstatus=ST_VOLDEV; if ($user->special_user==5) $fstatus=ST_SCIENT; if ($user->special_user==6) $fstatus=ST_TEST; if ($user->special_user==7) $fstatus=ST_VOLTEST; /*...*/ } else { if ($user->create_time>time()-ST_NEW_TIME) $fstatus=ST_NEW; /*...*/ } if ($fstatus) echo "
$fstatus"; echo "
", $user->id, ""; // Try and circumvent various forms of // of identity spoofing by displaying the // user id of the poster, its cheep, easy, // and doesn't require any additional database // calls. if (!$filter || !$rated_below_threshold){ echo "

"; if ($user->has_avatar and $logged_in_user->hide_avatars!=1) echo "avatar."\" alt=\"Avatar\">
"; echo "Joined: ", gmdate('M j, Y', $user->create_time), "
Posts: ", $user->posts, "

"; } echo " "; if ($controls == FORUM_CONTROLS || $controls == HELPDESK_CONTROLS) { echo "
id, "\" method=\"post\">"; } echo " \n"; if ($controls == FORUM_CONTROLS) { //no special controls in forum } else if ($controls == HELPDESK_CONTROLS && $separate) { echo " "; } else if ($controls == HELPDESK_CONTROLS && !$separate) { echo " "; } echo "\n
"; //cellborder=0 deleted - what did it do? if ($post->timestamp>$logged_in_user->thread_last_visited){ echo "\"Unread"; } if ($rated_above_threshold){ echo "\"!\""; } echo " Posted: ", pretty_time_str($post->timestamp); ; if ($post->parent_post) echo " - in response to parent_post\">Message ID $post->parent_post."; if ($can_edit && $controls != NO_CONTROLS) echo " id\">[Edit this post]"; if ($post->modified) echo "
Last modified: ", pretty_time_Str($post->modified); if ($rated_below_threshold && $filter){ if ($user_is_on_ignorelist) $andtext=" and the user is on your ignore list"; echo "
This post has been filtered (rating: ".($post->score * $post->votes).")$andtext, press id."&filter=false#".$post->id."\">here to view this thread without filtering"; } echo "\n
\n"; if ($controls == FORUM_CONTROLS || $controls == HELPDESK_CONTROLS) { echo "
"; } if (!$filter || !$rated_below_threshold){ //If either filtering is turned off of this post is not below the threshold $posttext=nl2br(stripslashes($post->content)); if ($post->signature && !$logged_in_user->hide_signatures){ //If the creator of this post has a signature and $posttext.=nl2br("\n".stripslashes($user->signature)); //wants it to be shown for this post AND the logged in } //user has signatures enabled: show it if ($logged_in_user->images_as_links==1){ $posttext=image_as_link($posttext); } if ($logged_in_user->link_popup==1){ $posttext=externalize_links($posttext); } echo "

", $posttext, "

"; echo ""; } else if ($controls == HELPDESK_CONTROLS && !$separate) { echo " / Score: ", round(($post->score * $post->votes),0), ""; } else { echo " / Rating: ", round(intval(($post->score * $post->votes)+0.01),0), " - rate: id."&choice=p\">+ / id."&choice=n\">-"; } if ($controls == FORUM_CONTROLS) { echo ""; } else if ($controls == HELPDESK_CONTROLS && !$separate) { echo ""; } echo "
ID: ", $post->id; if ($controls == HELPDESK_CONTROLS && $separate) { echo "[id . "&post=" . $post->id . "#input\">Reply to this post][id . "&post=" . $post->id . "&helpdesk=1#input\">Reply to this answer]
"; } echo ""; if ($separate) { echo "

"; } } /* utility functions */ function externalize_links($text){ $i=0;$linkpos=true; while (true){ //Find a link $linkpos=strpos($text,"",$imgpos)+1; //Or the end of the tag if ($temp1<$temp2){ //If source was found within tag $temp3=strpos($text,"\"",$temp1); //Find the end of source $out.=substr($text,$temp1,$temp3-$temp1); //output the source } $out.=">[Image link]"; $i=$temp2; //Now move to end of tag to continue } $out.=substr($text,$i); //Output the rest return $out; } function start_forum_table($headings, $span=NULL) { echo "

Author Answers
"; for ($i = 0; $i < count($headings); $i++) { $cell = ""; echo $cell, $headings[$i], "\n"; } echo "\n"; } function end_forum_table() { echo "
\n"; } // generate a "select" element from an array of values // function select_from_array($name, $array, $selection) { $out= ""; return $out; } function show_select_from_array($name, $array, $selection) { echo select_from_array($name,$array,$selection); } function show_forum_title($forum=NULL, $thread=NULL, $helpdesk=false) { echo "

\n"; if (!$forum && !$thread) { echo "

"; if ($helpdesk) { echo " Questions and problems

"; } else { echo " Message boards

"; } } else if ($forum && !$thread) { echo ""; if ($helpdesk) { echo "", " Questions and problems : "; } else { echo "", " Message boards : "; } echo $forum->title; echo "
"; } else if ($forum && $thread) { echo ""; if ($helpdesk) { echo "", " Questions and problems : "; } else { echo "", " Message boards : "; } echo "id\">", $forum->title, " : "; echo strip_tags(stripslashes($thread->title)); echo "
"; } else { echo "Invalid input to show_forum_title
"; } echo "

\n"; } // show a thread with its context (e.g. for search results) // function show_thread($thread, $n) { $forum = getForum($thread->forum); $category = getCategory($forum->category); $first_post = getFirstPost($thread->id); $title = stripslashes($thread->title); $where = $category->is_helpdesk?"Questions and answers":"Message boards"; $top_url = $category->is_helpdesk?"forum_help_desk.php":"forum_index.php"; $excerpt = sub_sentence(stripslashes($first_post->content), ' ', EXCERPT_LENGTH, true); $posted = time_diff_str($thread->create_time, time()); $last = time_diff_str($thread->timestamp, time()); $m = $n%2; echo " $n) Posted $posted
Last response $last $where : $category->name : id\">$forum->title : id\">$title
$excerpt "; } // show a post with its context (e.g. for search results) // function show_post2($post, $n) { $thread = getThread($post->thread); $forum = getForum($thread->forum); $category = getCategory($forum->category); $where = $category->is_helpdesk?"Questions and answers":"Message boards"; $top_url = $category->is_helpdesk?"forum_help_desk.php":"forum_index.php"; $content = nl2br(stripslashes($post->content)); $when = time_diff_str($post->timestamp, time()); $user = lookup_user_id($post->user); $title = stripslashes($thread->title); $m = $n%2; echo " $n) $where : $category->name : id\">$forum->title : id\">$title
Posted $when by $user->name
$content "; } function show_forum_summary($forum) { $x = time_diff_str($forum->timestamp, time()); echo " id\">", $forum->title, "
", $forum->description, " ", $forum->threads, " ", $forum->posts, " ", $x, " "; } ?>