2004-02-02 23:34:39 +00:00
< ? php
2005-01-12 13:39:05 +00:00
$cvs_version_tracker [] = " \$ Id $ " ; //Generated automatically - do not edit
2004-02-02 23:34:39 +00:00
require_once ( '../inc/db.inc' );
2005-05-04 08:46:46 +00:00
require_once ( '../inc/db_forum.inc' );
2004-05-24 03:40:38 +00:00
require_once ( '../inc/time.inc' );
2005-01-18 13:00:38 +00:00
require_once ( '../inc/forum_moderators.inc' );
2005-05-13 19:11:04 +00:00
require_once ( '../inc/text_transform.inc' );
2006-07-10 17:18:42 +00:00
require_once ( '../inc/util.inc' );
2004-02-02 23:34:39 +00:00
2004-09-04 23:37:49 +00:00
define ( 'AVATAR_WIDTH' , 100 );
define ( 'AVATAR_HEIGHT' , 100 );
2005-01-18 13:00:38 +00:00
$special_user_bitfield [ 0 ] = " Forum moderator " ;
$special_user_bitfield [ 1 ] = " Project administrator " ;
$special_user_bitfield [ 2 ] = " Project developer " ;
$special_user_bitfield [ 3 ] = " Project tester " ;
$special_user_bitfield [ 4 ] = " Volunteer developer " ;
$special_user_bitfield [ 5 ] = " Volunteer tester " ;
$special_user_bitfield [ 6 ] = " Project scientist " ;
2004-09-04 23:37:49 +00:00
define ( 'ST_NEW_TIME' , 1209600 ); //3600*24*14 - 14 days
define ( 'ST_NEW' , 'New member' );
2005-01-18 13:00:38 +00:00
define ( 'MAXIMUM_EDIT_TIME' , 3600 ); //Maximally allow edits of forums posts up till one hour after posting.
2004-09-04 23:37:49 +00:00
define ( 'FORUM_OPEN_LINK_IN_NEW_WINDOW' , 1 );
2006-06-16 23:53:56 +00:00
define ( 'MAX_FORUM_LOGGING_TIME' , 2419200 ); //3600*24*28 - 28 days
2004-02-02 23:34:39 +00:00
define ( 'NO_CONTROLS' , 0 );
define ( 'FORUM_CONTROLS' , 1 );
define ( 'HELPDESK_CONTROLS' , 2 );
define ( " EXCERPT_LENGTH " , " 120 " );
2005-04-20 20:56:58 +00:00
define ( 'NEW_IMAGE' , 'img/unread_post.png' );
define ( 'NEW_IMAGE_STICKY' , 'img/unread_sticky.png' );
define ( 'STICKY_IMAGE' , 'img/sticky_post.png' );
2004-10-10 03:04:29 +00:00
define ( 'NEW_IMAGE_HEIGHT' , '15' );
2005-04-20 20:56:58 +00:00
define ( 'EMPHASIZE_IMAGE' , 'img/emphasized_post.png' );
2004-10-25 22:04:15 +00:00
define ( 'EMPHASIZE_IMAGE_HEIGHT' , '15' );
2005-04-20 20:56:58 +00:00
define ( 'FILTER_IMAGE' , 'img/filtered_post.png' );
2004-12-18 18:13:46 +00:00
define ( 'FILTER_IMAGE_HEIGHT' , '15' );
2005-04-30 09:04:00 +00:00
define ( 'RATE_POSITIVE_IMAGE' , 'img/rate_positive.png' );
define ( 'RATE_POSITIVE_IMAGE_HEIGHT' , '9' );
define ( 'RATE_NEGATIVE_IMAGE' , 'img/rate_negative.png' );
define ( 'RATE_NEGATIVE_IMAGE_HEIGHT' , '9' );
2005-10-01 11:11:53 +00:00
define ( 'REPORT_POST_IMAGE' , 'img/report_post.png' );
define ( 'REPORT_POST_IMAGE_HEIGHT' , '9' );
2004-02-02 23:34:39 +00:00
define ( 'SOLUTION' , 'This answered my question' );
define ( 'SUFFERER' , 'I also have this question' );
define ( 'OFF_TOPIC' , 'Off-topic' );
2004-10-25 22:04:15 +00:00
define ( 'DEFAULT_LOW_RATING_THRESHOLD' , - 25 );
define ( 'DEFAULT_HIGH_RATING_THRESHOLD' , 5 );
2004-09-04 23:37:49 +00:00
$thread_sort_styles [ 'timestamp' ] = " Newest first " ;
$thread_sort_styles [ 'timestamp_asc' ] = " Oldest first " ;
$thread_sort_styles [ 'score' ] = " Highest rated first " ;
2004-02-02 23:34:39 +00:00
$faq_sort_styles [ 'create_time' ] = " Most recent question first " ;
$faq_sort_styles [ 'timestamp' ] = " Most recent answer first " ;
2004-03-26 18:37:46 +00:00
$faq_sort_styles [ 'activity' ] = " Most frequently asked first " ;
2004-02-02 23:34:39 +00:00
$answer_sort_styles [ 'score' ] = " Highest score first " ;
$answer_sort_styles [ 'timestamp' ] = " Most recent first " ;
2004-09-04 23:37:49 +00:00
$answer_sort_styles [ 'timestamp_asc' ] = " Oldest first " ;
2004-02-02 23:34:39 +00:00
$thread_filter_styles [ '2' ] = " \" Very helpful \" " ;
$thread_filter_styles [ '1' ] = " At least \" helpful \" " ;
$thread_filter_styles [ '0' ] = " At least \" neutral \" " ;
$thread_filter_styles [ '-1' ] = " At least \" unhelpful \" " ;
$thread_filter_styles [ '-2' ] = " All posts " ;
$post_ratings [ '2' ] = " Very helpful (+2) " ;
$post_ratings [ '1' ] = " Helpful (+1) " ;
$post_ratings [ '0' ] = " Neutral " ;
2004-12-28 05:25:44 +00:00
$post_ratings [ '-1' ] = " Not helpful (-1) " ;
2004-02-02 23:34:39 +00:00
$post_ratings [ '-2' ] = " Off topic (-2) " ;
2006-07-10 17:18:42 +00:00
$config = get_config ();
$no_forum_rating = parse_element ( $config , " <no_forum_rating/> " );
2006-06-16 23:53:56 +00:00
/**
* Process a user - supplied title to remove HTML stuff
**/
2005-01-09 21:52:22 +00:00
function cleanup_title ( $title ) {
$x = trim ( htmlspecialchars ( strip_tags ( $title )));
2005-01-14 19:45:43 +00:00
$x = stripslashes ( $x ); // clean up funky old titles in DB
2005-01-09 21:52:22 +00:00
if ( strlen ( $x ) == 0 ) return " (no title) " ;
else return $x ;
}
2006-06-16 23:53:56 +00:00
/**
* Check if user has special user bit enabled
**/
2005-01-18 13:00:38 +00:00
function isSpecialUser ( $user , $specialbit ){
return ( substr ( $user -> special_user , $specialbit , 1 ) == 1 );
}
2006-06-16 23:53:56 +00:00
/**
* Check to see if a specific user has rated a specific post before
**/
2004-10-25 22:04:15 +00:00
function getHasRated ( $user , $postid ){
2005-04-20 20:56:58 +00:00
return ( strstr ( $user -> rated_posts , " | " . $postid ));
2004-10-25 22:04:15 +00:00
}
2006-06-16 23:53:56 +00:00
/**
* Get the user ' s preferred sorting style .
**/
2004-09-04 23:37:49 +00:00
function getSortStyle ( $user , $place ){
2004-09-05 19:26:27 +00:00
if ( $user -> id != " " ){
2004-10-10 03:04:29 +00:00
list ( $forum , $thread , $faq , $answer ) = explode ( " | " , $user -> sorting );
2004-09-05 19:26:27 +00:00
} else {
list ( $forum , $thread , $faq , $answer ) = explode ( " | " , $_COOKIE [ 'sorting' ]);
}
2006-06-16 23:53:56 +00:00
return $$place ; // Huh?
2004-09-04 23:37:49 +00:00
}
2004-03-26 22:56:45 +00:00
2006-06-16 23:53:56 +00:00
/*** display functions ***/
2004-02-02 23:34:39 +00:00
2006-06-16 23:53:56 +00:00
/**
* Show the posts in a thread for a user .
* It ' s a big one .
**/
function show_posts ( $thread , $sort_style , $filter , $logged_in_user , $show_controls = true ) {
2004-02-02 23:34:39 +00:00
$n = 1 ;
2006-06-16 23:53:56 +00:00
if ( $show_controls ) {
2004-02-02 23:34:39 +00:00
$controls = FORUM_CONTROLS ;
} else {
$controls = NO_CONTROLS ;
}
2005-09-20 17:54:52 +00:00
// If logged in user is moderator,
// let him see all posts - including hidden ones
2006-06-16 23:53:56 +00:00
if ( $logged_in_user && $logged_in_user -> isSpecialUser ( S_MODERATOR )){
2005-09-20 17:54:52 +00:00
$show_hidden_posts = true ;
2005-01-18 13:00:38 +00:00
} else {
2005-09-20 17:54:52 +00:00
$show_hidden_posts = false ;
2005-01-18 13:00:38 +00:00
}
2006-06-16 23:53:56 +00:00
$posts = $thread -> getPosts ( $sort_style , $show_hidden_posts );
$postcount = ( sizeof ( $posts ) - 1 );
if ( $logged_in_user ) $last_visit = $thread -> getLastReadTimestamp ( $logged_in_user );
2004-02-02 23:34:39 +00:00
2005-11-28 00:24:32 +00:00
$postnumber = 0 ; $previous_post = 0 ;
2005-11-24 16:26:05 +00:00
$no_wraparound = get_str ( " nowrap " , true );
2006-06-16 23:53:56 +00:00
foreach ( $posts as $key => $post ){
$postnumber ++ ;
// There *HAS* to be a better way to do this. WOW.
if (( ! $logged_in_user ) // If the user isn't logged in
|| ( ! $logged_in_user -> getMinimumWrapPostcount ()) //or If the user hasn't enabled the feature to display only a certain amount of posts, simply display all of them.
|| ( $postcount <= $logged_in_user -> getMinimumWrapPostcount ()) //If it is enabled and we havent yet hit the limit, simply display all
|| ( $no_wraparound ) // If the user has asked to display all the posts just display them
||
(
( $postcount > $logged_in_user -> getMinimumWrapPostcount ()) //If it is enabled and we have hit the limit AND we have the minimum wraparound number of posts or more
&&
(
( $postnumber == 1 || $postnumber == ( $postcount + 1 )) // Let's display the post only if it is the first post
||
(
(( $postnumber > $postcount - $logged_in_user -> getDisplayWrapPostcount ()) //or it is one of the last wrap_display_postcount posts.
&& ( $sort_style == CREATE_TIME_OLD ))
||
(( $postnumber <= $logged_in_user -> getDisplayWrapPostcount ()) //or it is one of the last wrap_display_postcount posts.
&& ( $sort_style == CREATE_TIME_NEW ))
|| ( $sort_style != CREATE_TIME_NEW && $sort_style != CREATE_TIME_OLD )
)
|| ( $post -> getTimestamp () > $last_visit ) //or if this post is unread
)
)
) {
if ( $postnumber != $previous_post + 1 ){
//A number of posts were hidden, display a way to unhide them:
echo " <tr class= \" postseperator \" ><td></td><td colspan= \" 2 \" >
Only the first post and the last " .( $logged_in_user->getDisplayWrapPostcount ()). " posts
( of the " .( $postcount ). " posts in this thread ) are displayed . < br />
< a href = \ " ?id= " . $thread -> getID () . " &nowrap=true \" >Click here to also display the remaining posts</a>.</td></tr> " ;
}
$previous_post = $postnumber ;
show_post ( $post , $thread , $logged_in_user , $n , $controls , $filter );
// To allow users to start reading a thread even though our DB layer is super slow
$n = ( $n + 1 ) % 2 ;
if (( $post -> getTimestamp () > $last_visit ) &&
(( ! $first_unread_post ) || ( $post -> getTimestamp () < $first_unread_post -> getTimestamp ()))
){
$first_unread_post = $post ;
}
}
2004-02-02 23:34:39 +00:00
}
2005-01-09 21:52:22 +00:00
2006-06-16 23:53:56 +00:00
if ( $logged_in_user && $logged_in_user -> hasJumpToUnread ()){
if ( $first_unread_post ){
echo " <script>function jumpToUnread() { location.href='# " . $first_unread_post -> getID () . " ';}</script> " ;
2004-10-10 03:04:29 +00:00
} else {
echo " <script>function jumpToUnread() { };</script> " ;
}
}
2006-06-16 23:53:56 +00:00
if ( $logged_in_user ) $thread -> setLastReadTimestamp ( $logged_in_user );
2004-02-02 23:34:39 +00:00
}
2006-06-16 23:53:56 +00:00
/**
* Display an individual post , as though in a thread .
**/
function show_post ( $post , $thread , $logged_in_user , $n , $controls = FORUM_CONTROLS , $filter = true ) {
$user = $post -> getOwner ();
2006-07-10 17:18:42 +00:00
global $no_forum_rating ;
2006-06-16 23:53:56 +00:00
//If the user that made this post is on the list of people to ignore, change thresholds to be much more strict
if ( $logged_in_user ){
if ( in_array ( $user -> getID (), $logged_in_user -> getIgnoreList ())){
$user_is_on_ignorelist = true ;
$rated_below_threshold = ( $logged_in_user -> getHighRatingThreshold () > $post -> getRating ());
$rated_above_threshold = ( $logged_in_user -> getHighRatingThreshold () + abs ( $logged_in_user -> getLowRatingThreshold ()) < ( $post -> getRating ()));
} else { //Use normal threshold values
$rated_below_threshold = ( $logged_in_user -> getLowRatingThreshold () > ( $post -> getRating ()));
$rated_above_threshold = ( $logged_in_user -> getHighRatingThreshold () < ( $post -> getRating ()));
}
2005-01-06 11:47:44 +00:00
}
2006-08-01 21:45:05 +00:00
// The creator can edit the post, but only in a specified amount of time;
// moderator can edit all posts at any time
//
$can_edit = ( $logged_in_user && ( $logged_in_user -> isSpecialUser ( S_MODERATOR ) || ( $user -> getID () == $logged_in_user -> getID () && ( time () < ( $post -> getTimestamp () + MAXIMUM_EDIT_TIME - 60 )))));
2004-02-02 23:34:39 +00:00
echo "
2004-09-04 23:37:49 +00:00
< tr class = \ " row $n\ " valign = \ " top \" >
2006-06-16 23:53:56 +00:00
< td rowspan = \ " 3 \" ><div class= \" authorcol \" >
< a name = \ " " . $post -> getID () . " \" ></a>
2004-02-02 23:34:39 +00:00
" ;
2006-06-16 23:53:56 +00:00
// Print the user links
echo re_user_links ( $user , URL_BASE );
2005-02-08 21:20:00 +00:00
echo " <br> " ;
2006-06-16 23:53:56 +00:00
// Print the special user lines, if any
2005-01-18 13:00:38 +00:00
global $special_user_bitfield ;
2005-05-11 08:59:42 +00:00
$fstatus = " " ;
2006-06-16 23:53:56 +00:00
$keys = array_keys ( $special_user_bitfield );
for ( $i = 0 ; $i < sizeof ( $special_user_bitfield ); $i ++ ) {
if ( $user -> isSpecialUser ( $keys [ $i ])) {
$fstatus .= $special_user_bitfield [ $keys [ $i ]] . " <br> " ;
2005-09-20 17:54:52 +00:00
}
2004-09-04 23:37:49 +00:00
}
2006-06-16 23:53:56 +00:00
if ( $user -> create_time > time () - ST_NEW_TIME ) $fstatus .= ST_NEW . " <br> " ;
2005-02-08 21:20:00 +00:00
if ( $fstatus ) echo " <font size= \" -2 \" > $fstatus </font> " ;
2004-12-21 23:06:31 +00:00
2006-06-16 23:53:56 +00:00
echo " <span class= \" authorinfo \" > " ;
2004-10-25 22:04:15 +00:00
if ( ! $filter || ! $rated_below_threshold ){
2006-06-16 23:53:56 +00:00
if ( $user -> hasAvatar () && ( ! $logged_in_user || ( $logged_in_user -> hasHideAvatars () == false ))) {
echo " <img width= \" " . AVATAR_WIDTH . " \" height= \" " . AVATAR_HEIGHT . " \" src= \" " . $user -> getAvatar () . " \" alt= \" Avatar \" ><br> " ;
2005-01-09 21:52:22 +00:00
}
2006-06-16 23:53:56 +00:00
echo " Joined: " , gmdate ( 'M j, Y' , $user -> getCreateTime ()), " <br>Posts: " . $user -> getPostCount () . " <br> " ;
2004-10-25 22:04:15 +00:00
}
2005-01-14 19:45:43 +00:00
// circumvent various forms of identity spoofing
// by displaying the user id of the poster.
// its cheap, easy, and doesn't require any additional database calls.
2006-06-16 23:53:56 +00:00
echo " ID: " . $user -> getID () . " <br> " ;
echo " Credit: " . number_format ( $user -> getTotalCredit ()) . " <br> " ;
echo " RAC: " . number_format ( $user -> getExpavgCredit ()) . " <br> " ;
echo " </span></div></td> " ;
2005-01-14 19:45:43 +00:00
2006-06-16 23:53:56 +00:00
if ( $controls == FORUM_CONTROLS ) {
echo " <form action= \" forum_rate.php?post= " , $post -> getID (), " \" method= \" post \" > " ;
echo " <td colspan= \" 2 \" class= \" postheader \" > " ;
2005-11-24 16:26:05 +00:00
} else {
2006-06-16 23:53:56 +00:00
echo " <td class= \" postheader \" > " ;
2005-11-24 16:26:05 +00:00
}
2004-09-04 23:37:49 +00:00
2006-06-16 23:53:56 +00:00
if ( $logged_in_user && $post -> getTimestamp () > $thread -> getLastReadTimestamp ( $logged_in_user )){
2004-10-10 03:04:29 +00:00
echo " <img src= \" " . NEW_IMAGE . " \" alt= \" Unread post \" height= \" " . NEW_IMAGE_HEIGHT . " \" > " ;
2004-09-04 23:37:49 +00:00
}
2004-10-25 22:04:15 +00:00
if ( $rated_above_threshold ){
echo " <img src= \" " . EMPHASIZE_IMAGE . " \" alt= \" ! \" height= \" " . EMPHASIZE_IMAGE_HEIGHT . " \" > " ;
}
2005-01-09 21:52:22 +00:00
2006-06-16 23:53:56 +00:00
echo " <a href= \" forum_thread.php?id= " . $thread -> getID () . " &nowrap=true# $post->id\ " > Message " . $post->getID (). " </ a > - " ;
if ( $post -> isHidden ()) echo " <font color=red>[deleted] </font> " ;
2005-01-09 21:52:22 +00:00
echo "
2006-06-16 23:53:56 +00:00
Posted " , pretty_time_str( $post->getTimestamp ());
2004-02-02 23:34:39 +00:00
;
2006-06-16 23:53:56 +00:00
if ( $post -> getParentPostID ()) echo " - in response to <a href= \" forum_thread.php?id= " . $thread -> getID () . " &nowrap=true# " . $post -> getParentPostID () . " \" >Message ID " . $post -> getParentPostID () . " </a>. " ;
if ( $can_edit && $controls != NO_CONTROLS ) echo " <a href= \" forum_edit.php?id= " . $post -> getID () . " \" >[Edit this post]</a> " ;
if ( $logged_in_user && $logged_in_user -> isSpecialUser ( S_MODERATOR )) echo post_moderation_links ( $post ); //If user is moderator, show links
if ( $post -> getModificationTimestamp ()) echo " <br>Last modified: " , pretty_time_Str ( $post -> getModificationTimestamp ());
2004-10-25 22:04:15 +00:00
if ( $rated_below_threshold && $filter ){
2005-01-09 21:52:22 +00:00
if ( $user_is_on_ignorelist ) $andtext = " and the user is on your ignore list " ;
2006-06-16 23:53:56 +00:00
echo " <br>This post has been filtered (rating: " . ( $post -> getRating ()) . " ) $andtext , press <a href= \" ?id= " . $thread -> getID () . " &filter=false# " . $post -> getID () . " \" >here</a> to view this thread without filtering " ;
2004-02-02 23:34:39 +00:00
}
2006-06-16 23:53:56 +00:00
echo " </td></tr></form> " ;
2005-11-24 16:26:05 +00:00
echo " <tr class= \" row $n\ " >< td class = \ " postbody \" colspan= \" 2 \" > " ;
2006-06-16 23:53:56 +00:00
//If either filtering is turned off or this post is not below the threshold
2005-01-09 21:52:22 +00:00
if ( ! $filter || ! $rated_below_threshold ){
2006-06-16 23:53:56 +00:00
$posttext = $post -> getContent ();
2005-09-20 17:54:52 +00:00
// If the creator of this post has a signature and
// wants it to be shown for this post AND the logged in
// user has signatures enabled: show it
//
2006-06-16 23:53:56 +00:00
if ( $post -> hasSignature () && ( ! $logged_in_user || ! $logged_in_user -> hasHideSignatures ())){
$posttext .= " \n ____________ \n " . $user -> getSignature ();
2005-09-20 17:54:52 +00:00
}
2006-06-16 23:53:56 +00:00
if ( $logged_in_user ){
$options = $logged_in_user -> getTextTransformSettings ();
} else {
$options = new output_options ;
}
2005-09-20 17:54:52 +00:00
$posttext = output_transform ( $posttext , $options );
2005-05-13 19:11:04 +00:00
2005-05-17 08:53:29 +00:00
echo " <p> " , $posttext , " </p> " ;
2006-06-16 23:53:56 +00:00
echo " </td></tr><tr><td class= \" postfooter \" >ID: <i> " , $post -> id ;
2006-07-10 17:18:42 +00:00
if ( $no_forum_rating != NULL ) {
echo " | <a href= \" forum_report_post.php?post= " . $post -> getID () . " \" ><img src= \" " . REPORT_POST_IMAGE . " \" alt= \" Report this post as offensive \" height= \" " . REPORT_POST_IMAGE_HEIGHT . " \" border=0></a></td> " ;
} else {
2006-06-16 23:53:56 +00:00
$rating = $post -> getRating ();
echo " | Rating: " , $rating , " </i> | rate: <a href= \" forum_rate.php?post= " . $post -> getID () . " &choice=p \" ><img src= \" " . RATE_POSITIVE_IMAGE . " \" alt= \" + \" height= \" " . RATE_POSITIVE_IMAGE_HEIGHT . " \" border=0></a> / <a href= \" forum_rate.php?post= " . $post -> getID () . " &choice=n \" ><img src= \" " . RATE_NEGATIVE_IMAGE . " \" alt= \" - \" height= \" " . RATE_NEGATIVE_IMAGE_HEIGHT . " \" border=0></a> - <a href= \" forum_report_post.php?post= " . $post -> getID () . " \" ><img src= \" " . REPORT_POST_IMAGE . " \" alt= \" Report this post as offensive \" height= \" " . REPORT_POST_IMAGE_HEIGHT . " \" border=0></a></td> " ;
2006-07-10 17:18:42 +00:00
}
2004-10-25 22:04:15 +00:00
if ( $controls == FORUM_CONTROLS ) {
2006-06-16 23:53:56 +00:00
echo " <td align=right class= \" postfooter \" >[<a href= \" forum_reply.php?thread= " . $thread -> getID () . " &post= " . $post -> getID () . " #input \" >Reply to this post</a>]</td> " ;
2005-11-24 16:26:05 +00:00
} else {
2006-06-16 23:53:56 +00:00
echo " <td class= \" postfooter \" ></td> " ;
}
2005-11-24 16:26:05 +00:00
echo " </tr> " ;
2004-02-02 23:34:39 +00:00
}
2004-10-25 22:04:15 +00:00
echo " </td></tr> " ;
2005-11-24 16:26:05 +00:00
echo " <tr class= \" postseperator \" ><td colspan=3></td></tr> " ;
2004-02-02 23:34:39 +00:00
}
2006-06-16 23:53:56 +00:00
/*** utility functions ***/
2004-02-02 23:34:39 +00:00
2006-06-16 23:53:56 +00:00
/**
* Start the forum table , output the proper headings and such .
**/
2005-05-13 19:11:04 +00:00
function start_forum_table ( $headings , $extra = " width=100% " ) {
2006-06-16 23:53:56 +00:00
start_table ( $extra . " cellspacing=0 cellpadding=2 " );
2005-01-18 19:56:18 +00:00
echo " <tr> " ;
2004-02-02 23:34:39 +00:00
2005-01-18 19:56:18 +00:00
for ( $i = 0 ; $i < count ( $headings ); $i ++ ) {
2005-09-20 17:54:52 +00:00
if ( is_array ( $headings [ $i ])){
$title = $headings [ $i ][ 0 ];
2006-06-16 23:53:56 +00:00
$class = $headings [ $i ][ 1 ] ? $headings [ $i ][ 1 ] : " heading " ;
if ( $headings [ $i ][ 2 ]) $span = " colspan= \" " . $headings [ $i ][ 2 ] . " \" " ;
2005-09-20 17:54:52 +00:00
} else {
$title = $headings [ $i ];
$class = " heading " ;
2006-06-16 23:53:56 +00:00
$span = " " ;
2005-09-20 17:54:52 +00:00
}
2006-06-16 23:53:56 +00:00
echo " <th class= $class $span > $title </th> " ;
2004-02-02 23:34:39 +00:00
}
echo " </tr> \n " ;
}
2006-06-16 23:53:56 +00:00
/**
* End the forum table , currently just close the open table tag .
**/
2004-02-02 23:34:39 +00:00
function end_forum_table () {
2004-12-18 18:13:46 +00:00
echo " </table> \n " ;
2004-02-02 23:34:39 +00:00
}
2006-06-16 23:53:56 +00:00
/**
* generate a " select " HTML element from an array of values
**/
2004-09-04 23:37:49 +00:00
function select_from_array ( $name , $array , $selection ) {
$out = " <select name= \" $name\ " > " ;
2004-02-02 23:34:39 +00:00
foreach ( $array as $key => $value ) {
2004-09-04 23:37:49 +00:00
$out .= " <option " ;
2004-02-02 23:34:39 +00:00
if ( $key == $selection ) {
2004-09-04 23:37:49 +00:00
$out .= " selected " ;
2004-02-02 23:34:39 +00:00
}
2004-09-04 23:37:49 +00:00
$out .= " value= \" " . $key . " \" > " . $value . " </option> " ;
2004-02-02 23:34:39 +00:00
}
2004-09-04 23:37:49 +00:00
$out .= " </select> " ;
return $out ;
}
2006-06-16 23:53:56 +00:00
/**
* Call and output the above . Why is this a function , exactly ?
**/
2004-09-04 23:37:49 +00:00
function show_select_from_array ( $name , $array , $selection ) {
echo select_from_array ( $name , $array , $selection );
2004-02-02 23:34:39 +00:00
}
2006-06-16 23:53:56 +00:00
/**
* Output the forum / thread title .
**/
function show_forum_title ( $forum = NULL , $thread = NULL ) {
2004-02-02 23:34:39 +00:00
echo " <p> \n " ;
2006-07-12 16:18:12 +00:00
$category = getCategory ( $forum -> category );
$where = $category -> is_helpdesk ? tr ( LINKS_QA ) : tr ( FORUM_TITLE_SHORT );
$top_url = $category -> is_helpdesk ? " forum_help_desk.php " : " forum_index.php " ;
2004-02-02 23:34:39 +00:00
if ( ! $forum && ! $thread ) {
echo " <p class= \" title \" > " ;
2006-07-12 16:18:12 +00:00
echo $where ;
2006-06-16 23:53:56 +00:00
2004-02-02 23:34:39 +00:00
} else if ( $forum && ! $thread ) {
echo " <span class=title> " ;
2006-07-12 16:18:12 +00:00
echo " <a href= \" $top_url\ " > $where </ a > : " ;
2006-06-16 23:53:56 +00:00
echo $forum -> getTitle ();
2004-02-02 23:34:39 +00:00
echo " </span><br> " ;
} else if ( $forum && $thread ) {
echo " <span class=title> " ;
2006-07-12 16:18:12 +00:00
echo " <a href= \" $top_url\ " > $where </ a > : " ;
2006-06-16 23:53:56 +00:00
echo " <a href= \" forum_forum.php?id= " . $forum -> getID () . " \" > " , $forum -> getTitle (), " </a> : " ;
echo cleanup_title ( $thread -> getTitle ());
2004-02-02 23:34:39 +00:00
echo " </span><br> " ;
} else {
2006-06-16 23:53:56 +00:00
echo " Invalid input to show_forum_title<br> " ; // TODO: handle this condition gracefully
2004-02-02 23:34:39 +00:00
}
echo " </p> \n " ;
}
2006-06-16 23:53:56 +00:00
/**
* show a thread with its context ( e . g . for search results )
**/
2004-02-02 23:34:39 +00:00
function show_thread ( $thread , $n ) {
$forum = getForum ( $thread -> forum );
$category = getCategory ( $forum -> category );
$first_post = getFirstPost ( $thread -> id );
2005-01-09 21:52:22 +00:00
$title = cleanup_title ( $thread -> title );
2004-02-02 23:34:39 +00:00
$where = $category -> is_helpdesk ? " Questions and answers " : " Message boards " ;
2004-05-31 19:15:23 +00:00
$top_url = $category -> is_helpdesk ? " forum_help_desk.php " : " forum_index.php " ;
2004-02-02 23:34:39 +00:00
$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 "
2004-12-18 18:13:46 +00:00
< tr class = \ " row $m\ " >
< td >< font size = \ " -2 \" >
2004-02-02 23:34:39 +00:00
$n ) Posted $posted
< br >
Last response $last
</ td >
< td valign = top >
2004-12-18 18:13:46 +00:00
< a href = \ " $top_url\ " > $where </ a > : $category -> name :
< a href = \ " forum_forum.php?id= $forum->id\ " > $forum -> title </ a > :
< a href = \ " forum_thread.php?id= $thread->id\ " > $title </ a >
2004-02-02 23:34:39 +00:00
< br >
2004-12-18 18:13:46 +00:00
< font size = \ " -2 \" > $excerpt </font>
2004-02-02 23:34:39 +00:00
</ td >
</ tr >
" ;
}
2006-06-16 23:53:56 +00:00
/**
* Show a post with its context ( e . g . for search results )
**/
2005-09-20 17:54:52 +00:00
function show_post2 ( $post , $n ) {
$thread = getThread ( $post -> thread );
2004-02-02 23:34:39 +00:00
$forum = getForum ( $thread -> forum );
$category = getCategory ( $forum -> category );
$where = $category -> is_helpdesk ? " Questions and answers " : " Message boards " ;
2004-05-31 19:15:23 +00:00
$top_url = $category -> is_helpdesk ? " forum_help_desk.php " : " forum_index.php " ;
2005-05-13 19:11:04 +00:00
$content = output_transform ( $post -> content );
2004-02-02 23:34:39 +00:00
$when = time_diff_str ( $post -> timestamp , time ());
$user = lookup_user_id ( $post -> user );
2005-01-09 21:52:22 +00:00
$title = cleanup_title ( $thread -> title );
2004-02-02 23:34:39 +00:00
$m = $n % 2 ;
2005-01-23 10:05:15 +00:00
if ( $post -> hidden ) {
2005-09-20 17:54:52 +00:00
//Todo: factor this array out, it is also used elsewhere
2006-07-11 19:27:52 +00:00
$deleted_text = array ( " Obscene " , " Flame/Hate " , " Commercial spam " , " Flamebait " , " Doublepost " , " Other " );
2005-01-23 10:05:15 +00:00
$deleted = " <br><font color=red>[Deleted " .
" by a moderator as " . $deleted_text [ $post -> hidden - 1 ] .
" ] </font> " ;
} else {
$deleted = " " ;
2005-09-20 17:54:52 +00:00
}
2004-02-02 23:34:39 +00:00
echo "
< tr class = row $m >
< td >
2004-12-18 18:13:46 +00:00
$n ) < a href = \ " $top_url\ " > $where </ a > : $category -> name :
< a href = \ " forum_forum.php?id= $forum->id\ " > $forum -> title </ a > :
< a href = \ " forum_thread.php?id= $thread->id\ " > $title </ a >
2004-02-02 23:34:39 +00:00
< br >
2005-01-23 10:05:15 +00:00
Posted $when by $user -> name $deleted
2004-02-02 23:34:39 +00:00
< hr >
$content
</ td >
</ tr >
" ;
}
2004-05-24 03:40:38 +00:00
2006-06-16 23:53:56 +00:00
function post_rules () {
return "
2006-06-12 18:53:09 +00:00
< ul >
< li > No commercial advertisements .
< li > No messages whose only intention is to annoy or antagonize other people .
< li > No messages whose only intention is to hijack a thread .
< li > No messages that are deliberately hostile or insulting .
< li > No abusive comments involving race , religion ,
nationality , gender , class or sexuality .
< li > No obscene language .
</ ul >
2006-06-16 23:53:56 +00:00
" ;
}
function post_warning () {
return " <br><br>
< table >< tr >< td >
< font size =- 2 >
Rules :
" .post_rules(). "
2006-06-12 18:53:09 +00:00
< a href = moderation . php > More info </ a >
</ font >
</ td ></ tr ></ table >
2005-02-16 00:24:53 +00:00
" ;
}
2004-02-02 23:34:39 +00:00
?>