2013-05-28 08:01:02 +00:00
< ? php
2011-03-28 14:21:28 +00:00
//TODO: Normalize thread_*_info don't need to waste all that ram on things that are already in other caches
/**********|| Page to show individual threads || ******************************** \
Things to expect in $_GET :
ThreadID : ID of the forum curently being browsed
page : The page the user ' s on .
page = 1 is the same as no page
********************************************************************************/
//---------- Things to sort out before it can start printing/generating content
2013-12-12 08:01:01 +00:00
// Enable TOC
Text :: $TOC = true ;
2011-03-28 14:21:28 +00:00
// Check for lame SQL injection attempts
2013-05-05 08:00:31 +00:00
if ( ! isset ( $_GET [ 'threadid' ]) || ! is_number ( $_GET [ 'threadid' ])) {
if ( isset ( $_GET [ 'topicid' ]) && is_number ( $_GET [ 'topicid' ])) {
2011-03-28 14:21:28 +00:00
$ThreadID = $_GET [ 'topicid' ];
2013-05-05 08:00:31 +00:00
} elseif ( isset ( $_GET [ 'postid' ]) && is_number ( $_GET [ 'postid' ])) {
2013-07-02 08:01:37 +00:00
$DB -> query ( "
SELECT TopicID
FROM forums_posts
WHERE ID = $_GET [ postid ] " );
2011-10-06 08:00:12 +00:00
list ( $ThreadID ) = $DB -> next_record ();
2013-05-05 08:00:31 +00:00
if ( $ThreadID ) {
2011-10-06 08:00:12 +00:00
header ( " Location: forums.php?action=viewthread&threadid= $ThreadID &postid= $_GET[postid] #post $_GET[postid] " );
die ();
} else {
error ( 404 );
}
} else {
error ( 404 );
}
2011-03-28 14:21:28 +00:00
} else {
$ThreadID = $_GET [ 'threadid' ];
}
if ( isset ( $LoggedUser [ 'PostsPerPage' ])) {
$PerPage = $LoggedUser [ 'PostsPerPage' ];
} else {
$PerPage = POSTS_PER_PAGE ;
}
//---------- Get some data to start processing
// Thread information, constant across all pages
2013-08-28 23:08:41 +00:00
$ThreadInfo = Forums :: get_thread_info ( $ThreadID , true , true );
2013-10-01 23:08:42 +00:00
if ( $ThreadInfo === null ) {
error ( 404 );
}
2011-03-28 14:21:28 +00:00
$ForumID = $ThreadInfo [ 'ForumID' ];
2013-08-28 23:08:41 +00:00
$IsDonorForum = $ForumID == DONOR_FORUM ? true : false ;
2011-03-28 14:21:28 +00:00
// Make sure they're allowed to look at the page
2013-08-28 23:08:41 +00:00
if ( ! Forums :: check_forumperm ( $ForumID )) {
2011-05-15 12:06:04 +00:00
error ( 403 );
2011-03-28 14:21:28 +00:00
}
2012-06-16 08:00:18 +00:00
//Escape strings for later display
$ThreadTitle = display_str ( $ThreadInfo [ 'Title' ]);
$ForumName = display_str ( $Forums [ $ForumID ][ 'Name' ]);
2011-03-28 14:21:28 +00:00
//Post links utilize the catalogue & key params to prevent issues with custom posts per page
2013-05-05 08:00:31 +00:00
if ( $ThreadInfo [ 'Posts' ] > $PerPage ) {
if ( isset ( $_GET [ 'post' ]) && is_number ( $_GET [ 'post' ])) {
2011-03-28 14:21:28 +00:00
$PostNum = $_GET [ 'post' ];
2013-05-05 08:00:31 +00:00
} elseif ( isset ( $_GET [ 'postid' ]) && is_number ( $_GET [ 'postid' ]) && $_GET [ 'postid' ] != $ThreadInfo [ 'StickyPostID' ]) {
$SQL = "
SELECT COUNT ( ID )
FROM forums_posts
WHERE TopicID = $ThreadID
AND ID <= $_GET [ postid ] " ;
2012-11-09 08:00:18 +00:00
if ( $ThreadInfo [ 'StickyPostID' ] < $_GET [ 'postid' ]) {
$SQL .= " AND ID != $ThreadInfo[StickyPostID] " ;
}
$DB -> query ( $SQL );
2011-03-28 14:21:28 +00:00
list ( $PostNum ) = $DB -> next_record ();
} else {
$PostNum = 1 ;
}
} else {
$PostNum = 1 ;
}
2013-05-28 08:01:02 +00:00
list ( $Page , $Limit ) = Format :: page_limit ( $PerPage , min ( $ThreadInfo [ 'Posts' ], $PostNum ));
2013-05-05 08:00:31 +00:00
if (( $Page - 1 ) * $PerPage > $ThreadInfo [ 'Posts' ]) {
$Page = ceil ( $ThreadInfo [ 'Posts' ] / $PerPage );
2012-07-17 08:00:18 +00:00
}
2013-07-02 08:01:37 +00:00
list ( $CatalogueID , $CatalogueLimit ) = Format :: catalogue_limit ( $Page , $PerPage , THREAD_CATALOGUE );
2011-03-28 14:21:28 +00:00
// Cache catalogue from which the page is selected, allows block caches and future ability to specify posts per page
2013-07-02 08:01:37 +00:00
if ( ! $Catalogue = $Cache -> get_value ( " thread_ { $ThreadID } _catalogue_ $CatalogueID " )) {
2013-05-05 08:00:31 +00:00
$DB -> query ( "
SELECT
p . ID ,
p . AuthorID ,
p . AddedTime ,
p . Body ,
p . EditedUserID ,
p . EditedTime ,
ed . Username
2013-11-17 08:00:47 +00:00
FROM forums_posts AS p
2013-05-05 08:00:31 +00:00
LEFT JOIN users_main AS ed ON ed . ID = p . EditedUserID
WHERE p . TopicID = '$ThreadID'
AND p . ID != '".$ThreadInfo[' StickyPostID ']."'
2011-03-28 14:21:28 +00:00
LIMIT $CatalogueLimit " );
2013-07-02 08:01:37 +00:00
$Catalogue = $DB -> to_array ( false , MYSQLI_ASSOC );
2011-03-28 14:21:28 +00:00
if ( ! $ThreadInfo [ 'IsLocked' ] || $ThreadInfo [ 'IsSticky' ]) {
2013-07-02 08:01:37 +00:00
$Cache -> cache_value ( " thread_ { $ThreadID } _catalogue_ $CatalogueID " , $Catalogue , 0 );
2011-03-28 14:21:28 +00:00
}
}
2013-07-02 08:01:37 +00:00
$Thread = Format :: catalogue_select ( $Catalogue , $Page , $PerPage , THREAD_CATALOGUE );
2013-08-28 23:08:41 +00:00
$LastPost = end ( $Thread );
$LastPost = $LastPost [ 'ID' ];
$FirstPost = reset ( $Thread );
$FirstPost = $FirstPost [ 'ID' ];
if ( $ThreadInfo [ 'Posts' ] <= $PerPage * $Page && $ThreadInfo [ 'StickyPostID' ] > $LastPost ) {
$LastPost = $ThreadInfo [ 'StickyPostID' ];
}
2012-02-09 08:00:20 +00:00
2013-08-28 23:08:41 +00:00
//Handle last read
2013-05-16 16:15:57 +00:00
2013-08-28 23:08:41 +00:00
if ( ! $ThreadInfo [ 'IsLocked' ] || $ThreadInfo [ 'IsSticky' ]) {
2013-05-16 16:15:57 +00:00
2013-08-28 23:08:41 +00:00
$DB -> query ( "
SELECT PostID
FROM forums_last_read_topics
WHERE UserID = '$LoggedUser[ID]'
AND TopicID = '$ThreadID' " );
list ( $LastRead ) = $DB -> next_record ();
if ( $LastRead < $LastPost ) {
2013-05-05 08:00:31 +00:00
$DB -> query ( "
2013-09-06 08:00:41 +00:00
INSERT INTO forums_last_read_topics
( UserID , TopicID , PostID )
VALUES
( '$LoggedUser[ID]' , '$ThreadID' , '".db_string($LastPost)."' )
ON DUPLICATE KEY UPDATE
PostID = '$LastPost' " );
2011-03-28 14:21:28 +00:00
}
}
//Handle subscriptions
2013-08-28 23:08:41 +00:00
$UserSubscriptions = Subscriptions :: get_subscriptions ();
2011-03-28 14:21:28 +00:00
2013-04-13 08:00:19 +00:00
if ( empty ( $UserSubscriptions )) {
2011-03-28 14:21:28 +00:00
$UserSubscriptions = array ();
}
2013-04-13 08:00:19 +00:00
if ( in_array ( $ThreadID , $UserSubscriptions )) {
2011-03-28 14:21:28 +00:00
$Cache -> delete_value ( 'subscriptions_user_new_' . $LoggedUser [ 'ID' ]);
}
2012-10-30 08:00:18 +00:00
2013-03-21 08:00:33 +00:00
$QuoteNotificationsCount = $Cache -> get_value ( 'notify_quoted_' . $LoggedUser [ 'ID' ]);
2013-09-05 08:00:49 +00:00
if ( $QuoteNotificationsCount === false || $QuoteNotificationsCount > 0 ) {
$DB -> query ( "
UPDATE users_notify_quoted
SET UnRead = false
WHERE UserID = '$LoggedUser[ID]'
AND Page = 'forums'
AND PageID = '$ThreadID'
AND PostID >= '$FirstPost'
AND PostID <= '$LastPost' " );
2013-03-21 08:00:33 +00:00
$Cache -> delete_value ( 'notify_quoted_' . $LoggedUser [ 'ID' ]);
2012-10-30 08:00:18 +00:00
}
2013-01-20 08:00:39 +00:00
// Start printing
2013-08-28 23:08:41 +00:00
View :: show_header ( $ThreadInfo [ 'Title' ] . ' < ' . $Forums [ $ForumID ][ 'Name' ] . ' < Forums' , 'comments,subscriptions,bbcode' , $IsDonorForum ? 'donor' : '' );
2011-03-28 14:21:28 +00:00
?>
< div class = " thin " >
< h2 >
< a href = " forums.php " > Forums </ a > & gt ;
2012-06-16 08:00:18 +00:00
< a href = " forums.php?action=viewforum&forumid=<?= $ThreadInfo['ForumID'] ?> " >< ? = $ForumName ?> </a> >
< ? = $ThreadTitle ?>
2011-03-28 14:21:28 +00:00
</ h2 >
< div class = " linkbox " >
< div class = " center " >
2013-03-02 08:00:34 +00:00
< a href = " reports.php?action=report&type=thread&id=<?= $ThreadID ?> " class = " brackets " > Report thread </ a >
2013-01-24 08:00:24 +00:00
< a href = " # " onclick = " Subscribe(<?= $ThreadID ?>);return false; " id = " subscribelink<?= $ThreadID ?> " class = " brackets " >< ? = ( in_array ( $ThreadID , $UserSubscriptions ) ? 'Unsubscribe' : 'Subscribe' ) ?> </a>
2013-06-17 08:01:02 +00:00
< a href = " # " onclick = " $ ('#searchthread').gtoggle(); this.innerHTML = (this.innerHTML == 'Search this thread' ? 'Hide search' : 'Search this thread'); return false; " class = " brackets " > Search this thread </ a >
2011-10-27 08:00:15 +00:00
</ div >
< div id = " searchthread " class = " hidden center " >
< div style = " display: inline-block; " >
< h3 > Search this thread :</ h3 >
2012-09-15 08:00:25 +00:00
< form class = " search_form " name = " forum_thread " action = " forums.php " method = " get " >
2013-05-21 08:01:09 +00:00
< input type = " hidden " name = " action " value = " search " />
< input type = " hidden " name = " threadid " value = " <?= $ThreadID ?> " />
2013-02-10 08:00:29 +00:00
< table cellpadding = " 6 " cellspacing = " 1 " border = " 0 " class = " layout border " >
2011-10-27 08:00:15 +00:00
< tr >
2013-01-16 08:00:31 +00:00
< td >< strong > Search for :</ strong ></ td >
2014-03-23 08:00:50 +00:00
< td >< input type = " search " id = " searchbox " name = " search " size = " 70 " /></ td >
2011-10-27 08:00:15 +00:00
</ tr >
< tr >
2014-03-23 08:00:50 +00:00
< td >< strong > Posted by :</ strong ></ td >
< td >< input type = " search " id = " username " name = " user " placeholder = " Username " size = " 70 " /></ td >
2011-10-27 08:00:15 +00:00
</ tr >
2012-09-09 08:00:26 +00:00
< tr >
2013-05-05 08:00:31 +00:00
< td colspan = " 2 " style = " text-align: center; " >
2012-09-09 08:00:26 +00:00
< input type = " submit " name = " submit " value = " Search " />
</ td >
</ tr >
2011-10-27 08:00:15 +00:00
</ table >
</ form >
< br />
</ div >
2011-03-28 14:21:28 +00:00
</ div >
< ?
2013-05-15 08:00:54 +00:00
$Pages = Format :: get_pages ( $Page , $ThreadInfo [ 'Posts' ], $PerPage , 9 );
2011-03-28 14:21:28 +00:00
echo $Pages ;
?>
</ div >
< ?
if ( $ThreadInfo [ 'NoPoll' ] == 0 ) {
2013-07-02 08:01:37 +00:00
if ( ! list ( $Question , $Answers , $Votes , $Featured , $Closed ) = $Cache -> get_value ( " polls_ $ThreadID " )) {
2013-05-05 08:00:31 +00:00
$DB -> query ( "
SELECT Question , Answers , Featured , Closed
FROM forums_polls
2013-07-02 08:01:37 +00:00
WHERE TopicID = '$ThreadID' " );
2011-03-28 14:21:28 +00:00
list ( $Question , $Answers , $Featured , $Closed ) = $DB -> next_record ( MYSQLI_NUM , array ( 1 ));
$Answers = unserialize ( $Answers );
2013-05-05 08:00:31 +00:00
$DB -> query ( "
SELECT Vote , COUNT ( UserID )
FROM forums_polls_votes
2013-07-02 08:01:37 +00:00
WHERE TopicID = '$ThreadID'
2013-05-05 08:00:31 +00:00
GROUP BY Vote " );
2011-03-28 14:21:28 +00:00
$VoteArray = $DB -> to_array ( false , MYSQLI_NUM );
2012-10-27 08:00:09 +00:00
2011-03-28 14:21:28 +00:00
$Votes = array ();
foreach ( $VoteArray as $VoteSet ) {
2012-10-27 08:00:09 +00:00
list ( $Key , $Value ) = $VoteSet ;
2011-03-28 14:21:28 +00:00
$Votes [ $Key ] = $Value ;
}
2012-10-27 08:00:09 +00:00
2013-05-05 08:00:31 +00:00
foreach ( array_keys ( $Answers ) as $i ) {
2011-03-28 14:21:28 +00:00
if ( ! isset ( $Votes [ $i ])) {
$Votes [ $i ] = 0 ;
}
}
2013-07-02 08:01:37 +00:00
$Cache -> cache_value ( " polls_ $ThreadID " , array ( $Question , $Answers , $Votes , $Featured , $Closed ), 0 );
2011-03-28 14:21:28 +00:00
}
2012-10-27 08:00:09 +00:00
2011-03-28 14:21:28 +00:00
if ( ! empty ( $Votes )) {
$TotalVotes = array_sum ( $Votes );
$MaxVotes = max ( $Votes );
} else {
$TotalVotes = 0 ;
$MaxVotes = 0 ;
}
2012-10-27 08:00:09 +00:00
2011-05-13 08:00:07 +00:00
$RevealVoters = in_array ( $ForumID , $ForumsRevealVoters );
2011-03-28 14:21:28 +00:00
//Polls lose the you voted arrow thingy
2013-05-05 08:00:31 +00:00
$DB -> query ( "
SELECT Vote
FROM forums_polls_votes
2013-07-02 08:01:37 +00:00
WHERE UserID = '".$LoggedUser[' ID ']."'
AND TopicID = '$ThreadID' " );
2011-03-28 14:21:28 +00:00
list ( $UserResponse ) = $DB -> next_record ();
if ( ! empty ( $UserResponse ) && $UserResponse != 0 ) {
$Answers [ $UserResponse ] = '» ' . $Answers [ $UserResponse ];
} else {
2013-05-05 08:00:31 +00:00
if ( ! empty ( $UserResponse ) && $RevealVoters ) {
2011-03-28 14:21:28 +00:00
$Answers [ $UserResponse ] = '» ' . $Answers [ $UserResponse ];
}
}
?>
< div class = " box thin clear " >
2013-06-17 08:01:02 +00:00
< div class = " head colhead_dark " >< strong > Poll < ? if ( $Closed ) { echo ' [Closed]' ; } ?> <? if ($Featured && $Featured !== '0000-00-00 00:00:00') { echo ' [Featured]'; } ?></strong> <a href="#" onclick="$('#threadpoll').gtoggle(); log_hit(); return false;" class="brackets">View</a></div>
2011-03-28 14:21:28 +00:00
< div class = " pad<? if (/* $LastRead !== null || */ $ThreadInfo['IsLocked'] ) { echo ' hidden'; } ?> " id = " threadpoll " >
< p >< strong >< ? = display_str ( $Question ) ?> </strong></p>
2013-08-28 23:08:41 +00:00
< ? if ( $UserResponse !== null || $Closed || $ThreadInfo [ 'IsLocked' ] || ! Forums :: check_forumperm ( $ForumID )) { ?>
2011-03-28 14:21:28 +00:00
< ul class = " poll nobullet " >
2012-10-27 08:00:09 +00:00
< ?
2013-04-30 18:18:07 +00:00
if ( ! $RevealVoters ) {
foreach ( $Answers as $i => $Answer ) {
2011-03-28 14:21:28 +00:00
if ( ! empty ( $Votes [ $i ]) && $TotalVotes > 0 ) {
2013-04-30 18:18:07 +00:00
$Ratio = $Votes [ $i ] / $MaxVotes ;
$Percent = $Votes [ $i ] / $TotalVotes ;
2011-03-28 14:21:28 +00:00
} else {
2013-04-30 18:18:07 +00:00
$Ratio = 0 ;
$Percent = 0 ;
2011-03-28 14:21:28 +00:00
}
?>
2013-07-02 08:01:37 +00:00
< li >< ? = display_str ( $Answer ) ?> (<?=number_format($Percent * 100, 2)?>%)</li>
2011-03-28 14:21:28 +00:00
< li class = " graph " >
< span class = " left_poll " ></ span >
2013-04-30 18:18:07 +00:00
< span class = " center_poll " style = " width: <?=round( $Ratio * 750)?>px; " ></ span >
2011-03-28 14:21:28 +00:00
< span class = " right_poll " ></ span >
</ li >
< ? }
if ( $Votes [ 0 ] > 0 ) {
?>
2013-06-12 08:00:46 +00:00
< li >< ? = ( $UserResponse == '0' ? '» ' : '' ) ?> (Blank) (<?=number_format((float)($Votes[0] / $TotalVotes * 100), 2)?>%)</li>
2011-03-28 14:21:28 +00:00
< li class = " graph " >
< span class = " left_poll " ></ span >
2013-04-30 18:18:07 +00:00
< span class = " center_poll " style = " width: <?=round(( $Votes[0] / $MaxVotes ) * 750)?>px; " ></ span >
2011-03-28 14:21:28 +00:00
< span class = " right_poll " ></ span >
</ li >
< ? } ?>
</ ul >
< br />
< strong > Votes :</ strong > < ? = number_format ( $TotalVotes ) ?> <br /><br />
< ?
} else {
//Staff forum, output voters, not percentages
include ( SERVER_ROOT . '/sections/staff/functions.php' );
$Staff = get_staff ();
$StaffNames = array ();
2013-05-05 08:00:31 +00:00
foreach ( $Staff as $Staffer ) {
2011-03-28 14:21:28 +00:00
$StaffNames [] = $Staffer [ 'Username' ];
}
2013-05-05 08:00:31 +00:00
$DB -> query ( "
SELECT
fpv . Vote AS Vote ,
GROUP_CONCAT ( um . Username SEPARATOR ', ' )
FROM users_main AS um
LEFT JOIN forums_polls_votes AS fpv ON um . ID = fpv . UserID
2013-07-02 08:01:37 +00:00
WHERE TopicID = $ThreadID
2013-05-05 08:00:31 +00:00
GROUP BY fpv . Vote " );
2012-10-27 08:00:09 +00:00
2011-03-28 14:21:28 +00:00
$StaffVotesTmp = $DB -> to_array ();
$StaffCount = count ( $StaffNames );
$StaffVotes = array ();
2013-05-05 08:00:31 +00:00
foreach ( $StaffVotesTmp as $StaffVote ) {
2011-03-28 14:21:28 +00:00
list ( $Vote , $Names ) = $StaffVote ;
$StaffVotes [ $Vote ] = $Names ;
2013-05-05 08:00:31 +00:00
$Names = explode ( ', ' , $Names );
2011-03-28 14:21:28 +00:00
$StaffNames = array_diff ( $StaffNames , $Names );
}
?> <ul style="list-style: none;" id="poll_options">
< ?
2013-05-05 08:00:31 +00:00
foreach ( $Answers as $i => $Answer ) {
2011-03-28 14:21:28 +00:00
?>
2011-07-13 08:00:06 +00:00
< li >
2013-10-07 08:01:03 +00:00
< a href = " forums.php?action=change_vote&threadid=<?= $ThreadID ?>&auth=<?= $LoggedUser['AuthKey'] ?>&vote=<?=(int) $i ?> " >< ? = display_str ( $Answer == '' ? 'Blank' : $Answer ) ?> </a>
- < ? = $StaffVotes [ $i ] ?> (<?=number_format(((float)$Votes[$i] / $TotalVotes) * 100, 2)?>%)
2016-01-23 08:00:28 +00:00
< a href = " forums.php?action=delete_poll_option&threadid=<?= $ThreadID ?>&auth=<?= $LoggedUser['AuthKey'] ?>&vote=<?=(int) $i ?> " onclick = " return confirm('Are you sure you want to delete this poll option?'); " class = " brackets tooltip " title = " Delete poll option " > X </ a >
2013-10-07 08:01:03 +00:00
</ li >
2011-03-28 14:21:28 +00:00
< ? } ?>
2013-10-07 08:01:03 +00:00
< li >
< a href = " forums.php?action=change_vote&threadid=<?= $ThreadID ?>&auth=<?= $LoggedUser['AuthKey'] ?>&vote=0 " >< ? = ( $UserResponse == '0' ? '» ' : '' ) ?> Blank</a> - <?=$StaffVotes[0]?> (<?=number_format(((float)$Votes[0] / $TotalVotes) * 100, 2)?>%)
</ li >
2011-03-28 14:21:28 +00:00
</ ul >
2011-05-13 08:00:07 +00:00
< ?
2013-04-30 18:18:07 +00:00
if ( $ForumID == STAFF_FORUM ) {
2011-05-13 08:00:07 +00:00
?>
2011-03-28 14:21:28 +00:00
< br />
2014-03-10 08:00:42 +00:00
< strong > Votes :</ strong > < ? = number_format ( $StaffCount - count ( $StaffNames )) ?> / <?=$StaffCount?> current staff, <?=number_format($TotalVotes)?> total
2011-03-28 14:21:28 +00:00
< br />
2013-10-07 08:01:03 +00:00
< strong > Missing votes :</ strong > < ? = implode ( " , " , $StaffNames ); echo " \n " ; ?>
2011-03-28 14:21:28 +00:00
< br />< br />
2011-05-13 08:00:07 +00:00
< ?
}
?>
2013-02-09 08:01:01 +00:00
< a href = " # " onclick = " AddPollOption(<?= $ThreadID ?>); return false; " class = " brackets " >+</ a >
2011-03-28 14:21:28 +00:00
< ?
}
2012-10-27 08:00:09 +00:00
} else {
2011-03-28 14:21:28 +00:00
//User has not voted
?>
2012-09-15 08:00:25 +00:00
< div id = " poll_container " >
2013-01-15 08:00:37 +00:00
< form class = " vote_form " name = " poll " id = " poll " action = " " >
2012-09-18 08:00:29 +00:00
< input type = " hidden " name = " action " value = " poll " />
2011-03-28 14:21:28 +00:00
< input type = " hidden " name = " auth " value = " <?= $LoggedUser['AuthKey'] ?> " />
2012-09-18 08:00:29 +00:00
< input type = " hidden " name = " large " value = " 1 " />
2011-03-28 14:21:28 +00:00
< input type = " hidden " name = " topicid " value = " <?= $ThreadID ?> " />
< ul style = " list-style: none; " id = " poll_options " >
2013-05-04 08:00:48 +00:00
< ? foreach ( $Answers as $i => $Answer ) { //for ($i = 1, $il = count($Answers); $i <= $il; $i++) { ?>
2011-03-28 14:21:28 +00:00
< li >
< input type = " radio " name = " vote " id = " answer_<?= $i ?> " value = " <?= $i ?> " />
< label for = " answer_<?= $i ?> " >< ? = display_str ( $Answer ) ?> </label>
</ li >
2012-10-29 08:00:20 +00:00
< ? } ?>
2011-03-28 14:21:28 +00:00
< li >
< br />
2013-06-15 08:00:45 +00:00
< input type = " radio " name = " vote " id = " answer_0 " value = " 0 " /> < label for = " answer_0 " > Blank & #8202;— Show the results!</label><br />
2011-03-28 14:21:28 +00:00
</ li >
</ ul >
2013-05-04 08:00:48 +00:00
< ? if ( $ForumID == STAFF_FORUM ) { ?>
2013-02-09 08:01:01 +00:00
< a href = " # " onclick = " AddPollOption(<?= $ThreadID ?>); return false; " class = " brackets " >+</ a >
2011-03-28 14:21:28 +00:00
< br />
< br />
2012-10-29 08:00:20 +00:00
< ? } ?>
2013-05-04 08:00:48 +00:00
< input type = " button " style = " float: left; " onclick = " ajax.post('index.php','poll',function(response) { $ ('#poll_container').raw().innerHTML = response}); " value = " Vote " />
2011-03-28 14:21:28 +00:00
</ form >
</ div >
2013-05-04 08:00:48 +00:00
< ? }
if ( check_perms ( 'forums_polls_moderate' ) && ! $RevealVoters ) {
2012-10-29 08:00:20 +00:00
if ( ! $Featured || $Featured == '0000-00-00 00:00:00' ) {
?>
2012-09-15 08:00:25 +00:00
< form class = " manage_form " name = " poll " action = " forums.php " method = " post " >
2012-09-18 08:00:29 +00:00
< input type = " hidden " name = " action " value = " poll_mod " />
2011-03-28 14:21:28 +00:00
< input type = " hidden " name = " auth " value = " <?= $LoggedUser['AuthKey'] ?> " />
< input type = " hidden " name = " topicid " value = " <?= $ThreadID ?> " />
2012-09-18 08:00:29 +00:00
< input type = " hidden " name = " feature " value = " 1 " />
< input type = " submit " style = " float: left; " onclick = " return confirm('Are you sure you want to feature this poll?'); " value = " Feature " />
2011-03-28 14:21:28 +00:00
</ form >
2012-10-29 08:00:20 +00:00
< ? } ?>
2012-09-15 08:00:25 +00:00
< form class = " manage_form " name = " poll " action = " forums.php " method = " post " >
2012-09-18 08:00:29 +00:00
< input type = " hidden " name = " action " value = " poll_mod " />
2011-03-28 14:21:28 +00:00
< input type = " hidden " name = " auth " value = " <?= $LoggedUser['AuthKey'] ?> " />
< input type = " hidden " name = " topicid " value = " <?= $ThreadID ?> " />
2012-09-18 08:00:29 +00:00
< input type = " hidden " name = " close " value = " 1 " />
< input type = " submit " style = " float: left; " value = " <?=(! $Closed ? 'Close' : 'Open')?> " />
2011-03-28 14:21:28 +00:00
</ form >
2012-10-29 08:00:20 +00:00
< ? } ?>
2011-03-28 14:21:28 +00:00
</ div >
</ div >
2012-10-27 08:00:09 +00:00
< ?
2011-03-28 14:21:28 +00:00
} //End Polls
//Sqeeze in stickypost
2013-05-04 08:00:48 +00:00
if ( $ThreadInfo [ 'StickyPostID' ]) {
if ( $ThreadInfo [ 'StickyPostID' ] != $Thread [ 0 ][ 'ID' ]) {
2011-03-28 14:21:28 +00:00
array_unshift ( $Thread , $ThreadInfo [ 'StickyPost' ]);
}
2013-05-04 08:00:48 +00:00
if ( $ThreadInfo [ 'StickyPostID' ] != $Thread [ count ( $Thread ) - 1 ][ 'ID' ]) {
2011-03-28 14:21:28 +00:00
$Thread [] = $ThreadInfo [ 'StickyPost' ];
}
}
2012-10-29 08:00:20 +00:00
foreach ( $Thread as $Key => $Post ) {
2011-03-28 14:21:28 +00:00
list ( $PostID , $AuthorID , $AddedTime , $Body , $EditedUserID , $EditedTime , $EditedUsername ) = array_values ( $Post );
2012-10-11 08:00:15 +00:00
list ( $AuthorID , $Username , $PermissionID , $Paranoia , $Artist , $Donor , $Warned , $Avatar , $Enabled , $UserTitle ) = array_values ( Users :: user_info ( $AuthorID ));
2014-06-01 08:00:28 +00:00
2011-03-28 14:21:28 +00:00
?>
2013-03-30 08:00:31 +00:00
< table class = " forum_post wrap_overflow box vertical_margin<?
2014-03-19 08:00:54 +00:00
if ((( ! $ThreadInfo [ 'IsLocked' ] || $ThreadInfo [ 'IsSticky' ])
&& $PostID > $LastRead
&& strtotime ( $AddedTime ) > $LoggedUser [ 'CatchupTime' ]
) || ( isset ( $RequestKey ) && $Key == $RequestKey )
) {
2012-10-29 08:00:20 +00:00
echo ' forum_unread' ;
}
2012-11-01 08:00:21 +00:00
if ( ! Users :: has_avatars_enabled ()) {
2012-10-29 08:00:20 +00:00
echo ' noavatar' ;
}
if ( $ThreadInfo [ 'OP' ] == $AuthorID ) {
echo ' important_user' ;
2012-11-09 08:00:18 +00:00
}
if ( $PostID == $ThreadInfo [ 'StickyPostID' ]) {
echo ' sticky_post' ;
2012-10-29 08:00:20 +00:00
} ?> " id="post<?=$PostID?>">
< colgroup >
2012-11-01 08:00:21 +00:00
< ? if ( Users :: has_avatars_enabled ()) { ?>
2012-10-29 08:00:20 +00:00
< col class = " col_avatar " />
< ? } ?>
< col class = " col_post_body " />
</ colgroup >
2011-03-28 14:21:28 +00:00
< tr class = " colhead_dark " >
2012-11-01 08:00:21 +00:00
< td colspan = " <?=Users::has_avatars_enabled() ? 2 : 1?> " >
2013-05-05 08:00:31 +00:00
< div style = " float: left; " >< a class = " post_id " href = " forums.php?action=viewthread&threadid=<?= $ThreadID ?>&postid=<?= $PostID ?>#post<?= $PostID ?> " > #<?=$PostID?></a>
2013-10-07 08:01:03 +00:00
< ? = Users :: format_username ( $AuthorID , true , true , true , true , true , $IsDonorForum ); echo " \n " ; ?>
< ? = time_diff ( $AddedTime , 2 ); echo " \n " ; ?>
- < a href = " #quickpost " id = " quote_<?= $PostID ?> " onclick = " Quote('<?= $PostID ?>', '<?= $Username ?>', true); " class = " brackets " > Quote </ a >
2013-08-28 23:08:41 +00:00
< ? if (( ! $ThreadInfo [ 'IsLocked' ] && Forums :: check_forumperm ( $ForumID , 'Write' ) && $AuthorID == $LoggedUser [ 'ID' ]) || check_perms ( 'site_moderate_forums' )) { ?>
2013-10-07 08:01:03 +00:00
- < a href = " #post<?= $PostID ?> " onclick = " Edit_Form('<?= $PostID ?>', '<?= $Key ?>'); " class = " brackets " > Edit </ a >
< ?
}
2013-05-04 08:00:48 +00:00
if ( check_perms ( 'site_admin_forums' ) && $ThreadInfo [ 'Posts' ] > 1 ) { ?>
2013-02-09 08:01:01 +00:00
- < a href = " #post<?= $PostID ?> " onclick = " Delete('<?= $PostID ?>'); " class = " brackets " > Delete </ a >
2013-10-07 08:01:03 +00:00
< ?
}
2013-05-04 08:00:48 +00:00
if ( $PostID == $ThreadInfo [ 'StickyPostID' ]) { ?>
2013-02-09 08:01:01 +00:00
< strong >< span class = " sticky_post_label " class = " brackets " > Sticky </ span ></ strong >
2013-05-04 08:00:48 +00:00
< ? if ( check_perms ( 'site_moderate_forums' )) { ?>
2013-11-04 08:01:08 +00:00
- < a href = " forums.php?action=sticky_post&threadid=<?= $ThreadID ?>&postid=<?= $PostID ?>&remove=true&auth=<?= $LoggedUser['AuthKey'] ?> " title = " Unsticky this post " class = " brackets tooltip " > X </ a >
2013-10-07 08:01:03 +00:00
< ?
}
2012-10-29 08:00:20 +00:00
} else {
2013-11-04 08:01:08 +00:00
if ( check_perms ( 'site_moderate_forums' )) {
?>
- < a href = " forums.php?action=sticky_post&threadid=<?= $ThreadID ?>&postid=<?= $PostID ?>&auth=<?= $LoggedUser['AuthKey'] ?> " title = " Sticky this post " class = " brackets tooltip " >& #x21d5;</a>
2013-10-07 08:01:03 +00:00
< ?
}
2012-10-29 08:00:20 +00:00
}
2011-03-28 14:21:28 +00:00
?>
2012-10-06 08:00:19 +00:00
</ div >
2013-05-05 08:00:31 +00:00
< div id = " bar<?= $PostID ?> " style = " float: right; " >
2013-02-09 08:01:01 +00:00
< a href = " reports.php?action=report&type=post&id=<?= $PostID ?> " class = " brackets " > Report </ a >
2013-10-07 08:01:03 +00:00
< ?
if ( check_perms ( 'users_warn' ) && $AuthorID != $LoggedUser [ 'ID' ]) {
2012-10-29 08:00:20 +00:00
$AuthorInfo = Users :: user_info ( $AuthorID );
2013-05-04 08:00:48 +00:00
if ( $LoggedUser [ 'Class' ] >= $AuthorInfo [ 'Class' ]) {
2012-10-29 08:00:20 +00:00
?>
< form class = " manage_form hidden " name = " user " id = " warn<?= $PostID ?> " action = " " method = " post " >
< input type = " hidden " name = " action " value = " warn " />
< input type = " hidden " name = " postid " value = " <?= $PostID ?> " />
< input type = " hidden " name = " userid " value = " <?= $AuthorID ?> " />
< input type = " hidden " name = " key " value = " <?= $Key ?> " />
</ form >
2013-02-09 08:01:01 +00:00
- < a href = " # " onclick = " $ ('#warn<?= $PostID ?>').raw().submit(); return false; " class = " brackets " > Warn </ a >
2012-10-29 08:00:20 +00:00
< ? }
}
2012-08-27 08:00:24 +00:00
?>
2012-10-29 08:00:20 +00:00
& nbsp ;
2011-03-28 14:21:28 +00:00
< a href = " # " >& uarr ; </ a >
2012-10-06 08:00:19 +00:00
</ div >
2011-03-28 14:21:28 +00:00
</ td >
</ tr >
< tr >
2012-11-01 08:00:21 +00:00
< ? if ( Users :: has_avatars_enabled ()) { ?>
2011-03-28 14:21:28 +00:00
< td class = " avatar " valign = " top " >
2013-08-28 23:08:41 +00:00
< ? = Users :: show_avatar ( $Avatar , $AuthorID , $Username , $HeavyInfo [ 'DisableAvatars' ], 150 , true ) ?>
2012-10-29 08:00:20 +00:00
</ td >
< ? } ?>
2013-05-04 08:00:48 +00:00
< td class = " body " valign = " top " < ? if ( ! Users :: has_avatars_enabled ()) { echo ' colspan="2"' ; } ?> >
2011-03-28 14:21:28 +00:00
< div id = " content<?= $PostID ?> " >
2013-12-12 08:01:01 +00:00
< ? = Text :: full_format ( $Body ) ?>
2012-10-29 08:00:20 +00:00
< ? if ( $EditedUserID ) { ?>
2011-03-28 14:21:28 +00:00
< br />
< br />
2013-05-05 08:00:31 +00:00
< ? if ( check_perms ( 'site_admin_forums' )) { ?>
2012-10-27 08:00:09 +00:00
< a href = " #content<?= $PostID ?> " onclick = " LoadEdit('forums', <?= $PostID ?>, 1); return false; " >& laquo ; </ a >
2012-10-29 08:00:20 +00:00
< ? } ?>
2011-03-28 14:21:28 +00:00
Last edited by
2013-11-04 08:01:08 +00:00
< ? = Users :: format_username ( $EditedUserID , false , false , false , false , false , $IsDonorForum ) ?> <?=time_diff($EditedTime, 2, true, true)?>
2012-10-29 08:00:20 +00:00
< ? } ?>
2011-03-28 14:21:28 +00:00
</ div >
</ td >
</ tr >
</ table >
2012-10-29 08:00:20 +00:00
< ? } ?>
2011-12-13 08:00:17 +00:00
< div class = " breadcrumbs " >
< a href = " forums.php " > Forums </ a > & gt ;
2012-06-16 08:00:18 +00:00
< a href = " forums.php?action=viewforum&forumid=<?= $ThreadInfo['ForumID'] ?> " >< ? = $ForumName ?> </a> >
< ? = $ThreadTitle ?>
2011-12-13 08:00:17 +00:00
</ div >
2011-03-28 14:21:28 +00:00
< div class = " linkbox " >
< ? = $Pages ?>
</ div >
< ?
2012-10-29 08:00:20 +00:00
if ( ! $ThreadInfo [ 'IsLocked' ] || check_perms ( 'site_moderate_forums' )) {
2013-08-28 23:08:41 +00:00
if ( Forums :: check_forumperm ( $ForumID , 'Write' ) && ! $LoggedUser [ 'DisablePosting' ]) {
2013-01-23 08:00:38 +00:00
View :: parse ( 'generic/reply/quickreply.php' , array (
'InputTitle' => 'Post reply' ,
'InputName' => 'thread' ,
'InputID' => $ThreadID ,
'ForumID' => $ForumID ,
'TextareaCols' => 90
));
2011-03-28 14:21:28 +00:00
}
}
2013-05-04 08:00:48 +00:00
if ( check_perms ( 'site_moderate_forums' )) {
2013-10-23 08:01:03 +00:00
G :: $DB -> query ( "
SELECT ID , AuthorID , AddedTime , Body
FROM forums_topic_notes
WHERE TopicID = $ThreadID
ORDER BY ID ASC " );
2013-10-14 08:00:53 +00:00
$Notes = G :: $DB -> to_array ();
2011-03-28 14:21:28 +00:00
?>
2013-10-14 08:00:53 +00:00
< br />
2013-10-25 08:00:59 +00:00
< h3 id = " thread_notes " > Thread notes </ h3 > < a href = " # " onclick = " $ ('#thread_notes_table').gtoggle(); return false; " class = " brackets " > Toggle </ a >
2013-10-14 08:00:53 +00:00
< form action = " forums.php " method = " post " >
< input type = " hidden " name = " action " value = " take_topic_notes " />
< input type = " hidden " name = " auth " value = " <?= $LoggedUser['AuthKey'] ?> " />
< input type = " hidden " name = " topicid " value = " <?= $ThreadID ?> " />
2013-10-25 08:00:59 +00:00
< table cellpadding = " 6 " cellspacing = " 1 " border = " 0 " width = " 100% " class = " layout border hidden " id = " thread_notes_table " >
2013-10-14 08:00:53 +00:00
< ?
foreach ( $Notes as $Note ) {
?>
2013-12-12 08:01:01 +00:00
< tr >< td >< ? = Users :: format_username ( $Note [ 'AuthorID' ]) ?> (<?=time_diff($Note['AddedTime'], 2, true, true)?>)</td><td><?=Text::full_format($Note['Body'])?></td></tr>
2013-10-14 08:00:53 +00:00
< ?
}
?>
< tr >
< td colspan = " 2 " class = " center " >
2013-10-25 08:00:59 +00:00
< div class = " field_div textarea_wrap " >< textarea id = " topic_notes " name = " body " cols = " 90 " rows = " 3 " onkeyup = " resize('threadnotes'); " style = " margin: 0px; width: 735px; " ></ textarea ></ div >
2013-10-14 08:00:53 +00:00
< input type = " submit " value = " Save " />
</ td >
</ tr >
</ table >
</ form >
2011-03-28 14:21:28 +00:00
< br />
< h3 > Edit thread </ h3 >
2012-09-15 08:00:25 +00:00
< form class = " edit_form " name = " forum_thread " action = " forums.php " method = " post " >
2011-03-28 14:21:28 +00:00
< div >
< input type = " hidden " name = " action " value = " mod_thread " />
< input type = " hidden " name = " auth " value = " <?= $LoggedUser['AuthKey'] ?> " />
< input type = " hidden " name = " threadid " value = " <?= $ThreadID ?> " />
< input type = " hidden " name = " page " value = " <?= $Page ?> " />
</ div >
2012-09-01 08:00:24 +00:00
< table cellpadding = " 6 " cellspacing = " 1 " border = " 0 " width = " 100% " class = " layout border " >
2011-03-28 14:21:28 +00:00
< tr >
2013-11-05 08:01:12 +00:00
< td class = " label " >< label for = " sticky_thread_checkbox " > Sticky </ label ></ td >
2011-03-28 14:21:28 +00:00
< td >
2013-11-05 08:01:12 +00:00
< input type = " checkbox " id = " sticky_thread_checkbox " onclick = " $ ('#ranking_row').gtoggle(); " name = " sticky " < ? if ( $ThreadInfo [ 'IsSticky' ]) { echo ' checked="checked"' ; } ?> tabindex="2" />
2013-07-01 08:01:00 +00:00
</ td >
</ tr >
2013-07-02 08:01:37 +00:00
< tr id = " ranking_row " < ? =! $ThreadInfo [ 'IsSticky' ] ? ' class="hidden"' : '' ?> >
2013-11-05 08:01:12 +00:00
< td class = " label " >< label for = " thread_ranking_textbox " > Ranking </ label ></ td >
2013-07-01 08:01:00 +00:00
< td >
2013-11-05 08:01:12 +00:00
< input type = " text " id = " thread_ranking_textbox " name = " ranking " value = " <?= $ThreadInfo['Ranking'] ?> " tabindex = " 2 " />
2011-03-28 14:21:28 +00:00
</ td >
</ tr >
< tr >
2013-11-05 08:01:12 +00:00
< td class = " label " >< label for = " locked_thread_checkbox " > Locked </ label ></ td >
2011-03-28 14:21:28 +00:00
< td >
2013-11-05 08:01:12 +00:00
< input type = " checkbox " id = " locked_thread_checkbox " name = " locked " < ? if ( $ThreadInfo [ 'IsLocked' ]) { echo ' checked="checked"' ; } ?> tabindex="2" />
2011-03-28 14:21:28 +00:00
</ td >
</ tr >
< tr >
2013-11-05 08:01:12 +00:00
< td class = " label " >< label for = " thread_title_textbox " > Title </ label ></ td >
2011-03-28 14:21:28 +00:00
< td >
2013-11-05 08:01:12 +00:00
< input type = " text " id = " thread_title_textbox " name = " title " style = " width: 75%; " value = " <?=display_str( $ThreadInfo['Title'] )?> " tabindex = " 2 " />
2011-03-28 14:21:28 +00:00
</ td >
</ tr >
< tr >
2013-11-05 08:01:12 +00:00
< td class = " label " >< label for = " move_thread_selector " > Move thread </ label ></ td >
2011-03-28 14:21:28 +00:00
< td >
2013-11-05 08:01:12 +00:00
< select name = " forumid " id = " move_thread_selector " tabindex = " 2 " >
2012-10-27 08:00:09 +00:00
< ?
2012-10-29 08:00:20 +00:00
$OpenGroup = false ;
$LastCategoryID = - 1 ;
2011-03-28 14:21:28 +00:00
2012-10-29 08:00:20 +00:00
foreach ( $Forums as $Forum ) {
if ( $Forum [ 'MinClassRead' ] > $LoggedUser [ 'Class' ]) {
continue ;
}
2011-03-28 14:21:28 +00:00
2012-10-29 08:00:20 +00:00
if ( $Forum [ 'CategoryID' ] != $LastCategoryID ) {
$LastCategoryID = $Forum [ 'CategoryID' ];
2013-05-04 08:00:48 +00:00
if ( $OpenGroup ) { ?>
2011-03-28 14:21:28 +00:00
</ optgroup >
2012-10-29 08:00:20 +00:00
< ? } ?>
2011-03-28 14:21:28 +00:00
< optgroup label = " <?= $ForumCats[$Forum['CategoryID'] ]?> " >
2012-10-29 08:00:20 +00:00
< ? $OpenGroup = true ;
}
2011-03-28 14:21:28 +00:00
?>
2013-05-04 08:00:48 +00:00
< option value = " <?= $Forum['ID'] ?> " < ? if ( $ThreadInfo [ 'ForumID' ] == $Forum [ 'ID' ]) { echo ' selected="selected"' ;} ?> ><?=display_str($Forum['Name'])?></option>
2012-10-29 08:00:20 +00:00
< ? } ?>
2011-03-28 14:21:28 +00:00
</ optgroup >
</ select >
</ td >
</ tr >
2013-05-04 08:00:48 +00:00
< ? if ( check_perms ( 'site_admin_forums' )) { ?>
2011-03-28 14:21:28 +00:00
< tr >
2013-11-05 08:01:12 +00:00
< td class = " label " >< label for = " delete_thread_checkbox " > Delete thread </ label ></ td >
2011-03-28 14:21:28 +00:00
< td >
2013-11-05 08:01:12 +00:00
< input type = " checkbox " id = " delete_thread_checkbox " name = " delete " tabindex = " 2 " />
2011-03-28 14:21:28 +00:00
</ td >
</ tr >
2012-10-29 08:00:20 +00:00
< ? } ?>
2011-03-28 14:21:28 +00:00
< tr >
< td colspan = " 2 " class = " center " >
< input type = " submit " value = " Edit thread " tabindex = " 2 " />
2013-10-14 08:00:53 +00:00
< span style = " float: right; " >
< input type = " submit " name = " trash " value = " Trash " tabindex = " 2 " />
</ span >
2011-03-28 14:21:28 +00:00
</ td >
</ tr >
</ table >
</ form >
< ?
} // If user is moderator
?>
</ div >
2012-10-11 08:00:15 +00:00
< ? View :: show_footer ();