2020-12-26 01:42:23 +08:00
< ? php
2021-01-13 19:32:26 +08:00
require " ../include/bittorrent.php " ;
2020-12-26 01:42:23 +08:00
dbconn ();
require_once ( get_langfile_path ());
loggedinorreturn ();
parked ();
if ( $enableextforum == 'yes' ) //check whether internal forum is disabled
permissiondenied ();
// ------------- start: functions ------------------//
//print forum stats
function forum_stats ()
{
global $lang_forums , $Cache , $today_date ;
if ( ! $activeforumuser_num = $Cache -> get_value ( 'active_forum_user_count' )){
$secs = 900 ;
$dt = date ( " Y-m-d H:i:s " ,( TIMENOW - $secs ));
$activeforumuser_num = get_row_count ( " users " , " WHERE forum_access >= " . sqlesc ( $dt ));
$Cache -> cache_value ( 'active_forum_user_count' , $activeforumuser_num , 300 );
}
if ( $activeforumuser_num ){
$forumusers = $lang_forums [ 'text_there' ] . is_or_are ( $activeforumuser_num ) . " <b> " . $activeforumuser_num . " </b> " . $lang_forums [ 'text_online_user' ] . add_s ( $activeforumuser_num ) . $lang_forums [ 'text_in_forum_now' ];
}
else
$forumusers = $lang_forums [ 'text_no_active_users' ];
?>
< h2 align = " left " >< ? php echo $lang_forums [ 'text_stats' ] ?> </h2>
< table width = " 100% " >< tr >< td class = " text " >
< ? php
if ( ! $postcount = $Cache -> get_value ( 'total_posts_count' )){
$postcount = get_row_count ( " posts " );
$Cache -> cache_value ( 'total_posts_count' , $postcount , 96400 );
}
if ( ! $topiccount = $Cache -> get_value ( 'total_topics_count' )){
$topiccount = get_row_count ( " topics " );
$Cache -> cache_value ( 'total_topics_count' , $topiccount , 96500 );
}
if ( ! $todaypostcount = $Cache -> get_value ( 'today_' . $today_date . '_posts_count' )) {
$todaypostcount = get_row_count ( " posts " , " WHERE added > " . sqlesc ( date ( " Y-m-d " )));
$Cache -> cache_value ( 'today_' . $today_date . '_posts_count' , $todaypostcount , 700 );
}
print ( $lang_forums [ 'text_our_members_have' ] . " <b> " . $postcount . " </b> " . $lang_forums [ 'text_posts_in_topics' ] . " <b> " . $topiccount . " </b> " . $lang_forums [ 'text_in_topics' ] . " <b><font class= \" new \" > " . $todaypostcount . " </font></b> " . $lang_forums [ 'text_new_post' ] . add_s ( $todaypostcount ) . $lang_forums [ 'text_posts_today' ] . " <br /><br /> " );
print ( $forumusers );
?>
</ td ></ tr ></ table >
< ? php
}
//set all topics as read
function catch_up ()
{
global $CURUSER , $Cache ;
if ( ! $CURUSER )
die ;
sql_query ( " DELETE FROM readposts WHERE userid= " . sqlesc ( $CURUSER [ 'id' ]));
$Cache -> delete_value ( 'user_' . $CURUSER [ 'id' ] . '_last_read_post_list' );
$lastpostid = get_single_value ( " posts " , " id " , " ORDER BY id DESC " );
if ( $lastpostid ){
$CURUSER [ 'last_catchup' ] = $lastpostid ;
sql_query ( " UPDATE users SET last_catchup = " . sqlesc ( $lastpostid ) . " WHERE id= " . sqlesc ( $CURUSER [ 'id' ]));
}
}
//return image
function get_topic_image ( $status = " read " ){
global $lang_forums ;
switch ( $status ){
case " read " : {
return " <img class= \" unlocked \" src= \" pic/trans.gif \" alt= \" read \" title= \" " . $lang_forums [ 'title_read' ] . " \" /> " ;
break ;
}
case " unread " : {
return " <img class= \" unlockednew \" src= \" pic/trans.gif \" alt= \" unread \" title= \" " . $lang_forums [ 'title_unread' ] . " \" /> " ;
break ;
}
case " locked " : {
return " <img class= \" locked \" src= \" pic/trans.gif \" alt= \" locked \" title= \" " . $lang_forums [ 'title_locked' ] . " \" /> " ;
break ;
}
case " lockednew " : {
return " <img class= \" lockednew \" src= \" pic/trans.gif \" alt= \" lockednew \" title= \" " . $lang_forums [ 'title_locked_new' ] . " \" /> " ;
break ;
}
}
}
function highlight_topic ( $subject , $hlcolor = 0 )
{
$colorname = get_hl_color ( $hlcolor );
if ( $colorname )
$subject = " <b><font color= \" " . $colorname . " \" > " . $subject . " </font></b> " ;
return $subject ;
}
function check_whether_exist ( $id , $place = 'forum' ){
global $lang_forums ;
int_check ( $id , true );
switch ( $place ){
case 'forum' :
{
$count = get_row_count ( " forums " , " WHERE id= " . sqlesc ( $id ));
if ( ! $count )
stderr ( $lang_forums [ 'std_error' ], $lang_forums [ 'std_no_forum_id' ]);
break ;
}
case 'topic' :
{
$count = get_row_count ( " topics " , " WHERE id= " . sqlesc ( $id ));
if ( ! $count )
stderr ( $lang_forums [ 'std_error' ], $lang_forums [ 'std_bad_topic_id' ]);
$forumid = get_single_value ( " topics " , " forumid " , " WHERE id= " . sqlesc ( $id ));
check_whether_exist ( $forumid , 'forum' );
break ;
}
case 'post' :
{
$count = get_row_count ( " posts " , " WHERE id= " . sqlesc ( $id ));
if ( ! $count )
stderr ( $lang_forums [ 'std_error' ], $lang_forums [ 'std_no_post_id' ]);
$topicid = get_single_value ( " posts " , " topicid " , " WHERE id= " . sqlesc ( $id ));
check_whether_exist ( $topicid , 'topic' );
break ;
}
}
}
//update the last post of a topic
function update_topic_last_post ( $topicid )
{
global $lang_forums ;
$res = sql_query ( " SELECT id FROM posts WHERE topicid= " . sqlesc ( $topicid ) . " ORDER BY id DESC LIMIT 1 " ) or sqlerr ( __FILE__ , __LINE__ );
$arr = mysql_fetch_row ( $res ) or die ( $lang_forums [ 'std_no_post_found' ]);
$postid = $arr [ 0 ];
sql_query ( " UPDATE topics SET lastpost= " . sqlesc ( $postid ) . " WHERE id= " . sqlesc ( $topicid )) or sqlerr ( __FILE__ , __LINE__ );
}
function get_forum_row ( $forumid = 0 )
{
global $Cache ;
if ( ! $forums = $Cache -> get_value ( 'forums_list' )){
$forums = array ();
$res2 = sql_query ( " SELECT * FROM forums ORDER BY forid ASC, sort ASC " ) or sqlerr ( __FILE__ , __LINE__ );
while ( $row2 = mysql_fetch_array ( $res2 ))
$forums [ $row2 [ 'id' ]] = $row2 ;
$Cache -> cache_value ( 'forums_list' , $forums , 86400 );
}
if ( ! $forumid )
return $forums ;
else return $forums [ $forumid ];
}
function get_last_read_post_id ( $topicid ) {
global $CURUSER , $Cache ;
static $ret ;
if ( ! $ret && ! $ret = $Cache -> get_value ( 'user_' . $CURUSER [ 'id' ] . '_last_read_post_list' )){
$ret = array ();
$res = sql_query ( " SELECT * FROM readposts WHERE userid= " . sqlesc ( $CURUSER [ 'id' ]));
if ( mysql_num_rows ( $res ) != 0 ){
while ( $row = mysql_fetch_array ( $res ))
$ret [ $row [ 'topicid' ]] = $row [ 'lastpostread' ];
$Cache -> cache_value ( 'user_' . $CURUSER [ 'id' ] . '_last_read_post_list' , $ret , 900 );
}
else $Cache -> cache_value ( 'user_' . $CURUSER [ 'id' ] . '_last_read_post_list' , 'no record' , 900 );
}
2020-12-29 03:02:34 +08:00
if ( $ret != " no record " && isset ( $ret [ $topicid ]) && $CURUSER [ 'last_catchup' ] < $ret [ $topicid ]){
2020-12-26 01:42:23 +08:00
return $ret [ $topicid ];
}
elseif ( $CURUSER [ 'last_catchup' ])
return $CURUSER [ 'last_catchup' ];
else return 0 ;
}
//-------- Inserts a compose frame
function insert_compose_frame ( $id , $type = 'new' )
{
global $maxsubjectlength , $CURUSER ;
global $lang_forums ;
$hassubject = false ;
$subject = " " ;
$body = " " ;
print ( " <form id= \" compose \" method= \" post \" name= \" compose \" action= \" ?action=post \" > \n " );
switch ( $type ){
case 'new' :
{
$forumname = get_single_value ( " forums " , " name " , " WHERE id= " . sqlesc ( $id ));
$title = $lang_forums [ 'text_new_topic_in' ] . " <a href= \" " . htmlspecialchars ( " ?action=viewforum&forumid= " . $id ) . " \" > " . htmlspecialchars ( $forumname ) . " </a> " . $lang_forums [ 'text_forum' ];
$hassubject = true ;
break ;
}
case 'reply' :
{
$topicname = get_single_value ( " topics " , " subject " , " WHERE id= " . sqlesc ( $id ));
$title = $lang_forums [ 'text_reply_to_topic' ] . " <a href= \" " . htmlspecialchars ( " ?action=viewtopic&topicid= " . $id ) . " \" > " . htmlspecialchars ( $topicname ) . " </a> " ;
break ;
}
case 'quote' :
{
$topicid = get_single_value ( " posts " , " topicid " , " WHERE id= " . sqlesc ( $id ));
$topicname = get_single_value ( " topics " , " subject " , " WHERE id= " . sqlesc ( $topicid ));
$title = $lang_forums [ 'text_reply_to_topic' ] . " <a href= \" " . htmlspecialchars ( " ?action=viewtopic&topicid= " . $topicid ) . " \" > " . htmlspecialchars ( $topicname ) . " </a> " ;
$res = sql_query ( " SELECT posts.body, users.username FROM posts LEFT JOIN users ON posts.userid = users.id WHERE posts.id= $id " ) or sqlerr ( __FILE__ , __LINE__ );
if ( mysql_num_rows ( $res ) != 1 )
stderr ( $lang_forums [ 'std_error' ], $lang_forums [ 'std_no_post_id' ]);
$arr = mysql_fetch_assoc ( $res );
$body = " [quote= " . htmlspecialchars ( $arr [ " username " ]) . " ] " . htmlspecialchars ( unesc ( $arr [ " body " ])) . " [/quote] " ;
2025-09-17 21:22:42 +07:00
$postid = $id ;
2020-12-26 01:42:23 +08:00
$id = $topicid ;
$type = 'reply' ;
2025-09-16 00:32:45 +08:00
print ( " <input type= \" hidden \" name= \" postid \" value= \" " . $postid . " \" /> " );
2020-12-26 01:42:23 +08:00
break ;
}
case 'edit' :
{
$res = sql_query ( " SELECT topicid, body FROM posts WHERE id= " . sqlesc ( $id ) . " LIMIT 1 " ) or sqlerr ( __FILE__ , __LINE__ );
$row = mysql_fetch_array ( $res );
$topicid = $row [ 'topicid' ];
$firstpost = get_single_value ( " posts " , " MIN(id) " , " WHERE topicid= " . sqlesc ( $topicid ));
if ( $firstpost == $id ){
$subject = get_single_value ( " topics " , " subject " , " WHERE id= " . sqlesc ( $topicid ));
$hassubject = true ;
}
$body = htmlspecialchars ( unesc ( $row [ " body " ]));
$title = $lang_forums [ 'text_edit_post' ];
break ;
}
default :
{
die ;
}
}
print ( " <input type= \" hidden \" name= \" id \" value= \" " . $id . " \" /> " );
print ( " <input type= \" hidden \" name= \" type \" value= \" " . $type . " \" /> " );
begin_compose ( $title , $type , $body , $hassubject , $subject );
end_compose ();
print ( " </form> " );
}
// ------------- end: functions ------------------//
// ------------- start: Global variables ------------------//
$maxsubjectlength = 100 ;
$postsperpage = $CURUSER [ " postsperpage " ];
if ( ! $postsperpage ){
if ( is_numeric ( $forumpostsperpage ))
$postsperpage = $forumpostsperpage ; //system-wide setting
else $postsperpage = 10 ;
}
//get topics per page
$topicsperpage = $CURUSER [ " topicsperpage " ];
if ( ! $topicsperpage ){
if ( is_numeric ( $forumtopicsperpage_main ))
$topicsperpage = $forumtopicsperpage_main ; //system-wide setting
else $topicsperpage = 20 ;
}
$today_date = date ( " Y-m-d " , TIMENOW );
// ------------- end: Global variables ------------------//
2020-12-28 20:52:54 +08:00
$action = htmlspecialchars ( trim ( $_GET [ " action " ] ? ? '' ));
2020-12-26 01:42:23 +08:00
//-------- Action: New topic
if ( $action == " newtopic " )
{
2021-01-06 00:56:13 +08:00
$forumid = intval ( $_GET [ " forumid " ] ? ? 0 );
2020-12-26 01:42:23 +08:00
check_whether_exist ( $forumid , 'forum' );
stdhead ( $lang_forums [ 'head_new_topic' ]);
begin_main_frame ();
insert_compose_frame ( $forumid , 'new' );
end_main_frame ();
stdfoot ();
die ;
}
if ( $action == " quotepost " )
{
2021-01-06 00:56:13 +08:00
$postid = intval ( $_GET [ " postid " ] ? ? 0 );
2020-12-26 01:42:23 +08:00
check_whether_exist ( $postid , 'post' );
2023-04-20 02:08:09 +08:00
if ( ! can_view_post ( $CURUSER [ 'id' ], $postid )) {
permissiondenied ();
}
2020-12-26 01:42:23 +08:00
stdhead ( $lang_forums [ 'head_post_reply' ]);
begin_main_frame ();
insert_compose_frame ( $postid , 'quote' );
end_main_frame ();
stdfoot ();
die ;
}
//-------- Action: Reply
if ( $action == " reply " )
{
2021-01-06 00:56:13 +08:00
$topicid = intval ( $_GET [ " topicid " ] ? ? 0 );
2020-12-26 01:42:23 +08:00
check_whether_exist ( $topicid , 'topic' );
stdhead ( $lang_forums [ 'head_post_reply' ]);
begin_main_frame ();
insert_compose_frame ( $topicid , 'reply' );
end_main_frame ();
stdfoot ();
die ;
}
//-------- Action: Edit post
if ( $action == " editpost " )
{
2021-01-06 00:56:13 +08:00
$postid = intval ( $_GET [ " postid " ] ? ? 0 );
2020-12-26 01:42:23 +08:00
check_whether_exist ( $postid , 'post' );
$res = sql_query ( " SELECT userid, topicid FROM posts WHERE id= " . sqlesc ( $postid )) or sqlerr ( __FILE__ , __LINE__ );
$arr = mysql_fetch_assoc ( $res );
$res2 = sql_query ( " SELECT locked FROM topics WHERE id = " . $arr [ " topicid " ]) or sqlerr ( __FILE__ , __LINE__ );
$arr2 = mysql_fetch_assoc ( $res2 );
$locked = ( $arr2 [ " locked " ] == 'yes' );
$ismod = is_forum_moderator ( $postid , 'post' );
2022-08-20 19:11:28 +08:00
if (( $CURUSER [ " id " ] != $arr [ " userid " ] || $locked ) && ! user_can ( 'postmanage' ) && ! $ismod )
2020-12-26 01:42:23 +08:00
permissiondenied ();
stdhead ( $lang_forums [ 'text_edit_post' ]);
begin_main_frame ();
insert_compose_frame ( $postid , 'edit' );
end_main_frame ();
stdfoot ();
die ;
}
//-------- Action: Post
if ( $action == " post " )
{
if ( $CURUSER [ " forumpost " ] == 'no' )
{
stderr ( $lang_forums [ 'std_sorry' ], $lang_forums [ 'std_unauthorized_to_post' ], false );
die ;
}
$id = $_POST [ " id " ];
$type = $_POST [ " type " ];
2020-12-29 03:02:34 +08:00
$subject = $_POST [ " subject " ] ? ? '' ;
2020-12-26 01:42:23 +08:00
$body = trim ( $_POST [ " body " ]);
$hassubject = false ;
switch ( $type ){
case 'new' :
{
check_whether_exist ( $id , 'forum' );
$forumid = $id ;
$hassubject = true ;
break ;
}
case 'reply' :
{
check_whether_exist ( $id , 'topic' );
$topicid = $id ;
$forumid = get_single_value ( " topics " , " forumid " , " WHERE id= " . sqlesc ( $topicid ));
2025-09-16 00:32:45 +08:00
$quotepostid = $_POST [ " postid " ];
2020-12-26 01:42:23 +08:00
break ;
}
case 'edit' :
{
check_whether_exist ( $id , 'post' );
$res = sql_query ( " SELECT topicid FROM posts WHERE id= " . sqlesc ( $id ) . " LIMIT 1 " ) or sqlerr ( __FILE__ , __LINE__ );
$row = mysql_fetch_array ( $res );
$topicid = $row [ 'topicid' ];
$forumid = get_single_value ( " topics " , " forumid " , " WHERE id= " . sqlesc ( $topicid ));
$firstpost = get_single_value ( " posts " , " MIN(id) " , " WHERE topicid= " . sqlesc ( $topicid ));
if ( $firstpost == $id ){
$hassubject = true ;
}
break ;
}
default :
{
die ;
}
}
if ( $hassubject ){
$subject = trim ( $subject );
if ( ! $subject )
stderr ( $lang_forums [ 'std_error' ], $lang_forums [ 'std_must_enter_subject' ]);
if ( strlen ( $subject ) > $maxsubjectlength )
stderr ( $lang_forums [ 'std_error' ], $lang_forums [ 'std_subject_limited' ]);
}
//------ Make sure sure user has write access in forum
$arr = get_forum_row ( $forumid ) or die ( $lang_forums [ 'std_bad_forum_id' ]);
2022-12-08 20:43:33 +08:00
if (
get_user_class () < $arr [ " minclassread " ]
|| get_user_class () < $arr [ " minclasswrite " ]
|| ( $type == 'new' && get_user_class () < $arr [ " minclasscreate " ])
) {
permissiondenied ();
}
2020-12-26 01:42:23 +08:00
if ( $body == " " )
stderr ( $lang_forums [ 'std_error' ], $lang_forums [ 'std_no_body_text' ]);
2021-01-06 00:56:13 +08:00
$userid = intval ( $CURUSER [ " id " ] ? ? 0 );
2020-12-26 01:42:23 +08:00
$date = date ( " Y-m-d H:i:s " );
if ( $type != 'new' ){
//---- Make sure topic is unlocked
$res = sql_query ( " SELECT locked FROM topics WHERE id= $topicid " ) or sqlerr ( __FILE__ , __LINE__ );
$arr = mysql_fetch_assoc ( $res ) or die ( " Topic id n/a " );
2022-08-20 19:11:28 +08:00
if ( $arr [ " locked " ] == 'yes' && ! user_can ( 'postmanage' ) && ! is_forum_moderator ( $topicid , 'topic' ))
2020-12-26 01:42:23 +08:00
stderr ( $lang_forums [ 'std_error' ], $lang_forums [ 'std_topic_locked' ]);
}
if ( $type == 'edit' )
{
2022-12-08 20:43:33 +08:00
$postid = $id ;
$topicInfo = \App\Models\Topic :: query () -> findOrFail ( $topicid );
$postInfo = \App\Models\Post :: query () -> findOrFail ( $id );
if ( $postInfo -> userid != $CURUSER [ 'id' ] && ! is_forum_moderator ( $postid , 'post' ) && ! user_can ( 'postmanage' )) {
permissiondenied ();
}
2020-12-26 01:42:23 +08:00
if ( $hassubject ){
sql_query ( " UPDATE topics SET subject= " . sqlesc ( $subject ) . " WHERE id= " . sqlesc ( $topicid )) or sqlerr ( __FILE__ , __LINE__ );
$forum_last_replied_topic_row = $Cache -> get_value ( 'forum_' . $forumid . '_last_replied_topic_content' );
if ( $forum_last_replied_topic_row && $forum_last_replied_topic_row [ 'id' ] == $topicid )
$Cache -> delete_value ( 'forum_' . $forumid . '_last_replied_topic_content' );
}
2020-12-29 03:02:34 +08:00
sql_query ( " UPDATE posts SET body= " . sqlesc ( $body ) . " , editdate= " . sqlesc ( $date ) . " , editedby= " . sqlesc ( $CURUSER [ 'id' ]) . " WHERE id= " . sqlesc ( $id )) or sqlerr ( __FILE__ , __LINE__ );
2020-12-26 01:42:23 +08:00
$Cache -> delete_value ( 'post_' . $postid . '_content' );
2022-06-18 13:16:36 +08:00
//send pm
2025-10-02 20:08:42 +07:00
$postUrl = sprintf ( '[url=forums.php?action=viewtopic&topicid=%s&page=p%s#pid%s]%s[/url]' , $topicid , $id , $id , $topicInfo -> subject );
2025-09-16 16:30:42 +08:00
if ( ! empty ( $postInfo -> userid ) && $postInfo -> userid != $CURUSER [ 'id' ]) {
2022-06-18 13:16:36 +08:00
$receiver = $postInfo -> user ;
2025-10-02 20:08:42 +07:00
if ( $receiver ) {
$locale = $receiver -> locale ;
$notify = [
'sender' => 0 ,
'receiver' => $receiver -> id ,
'subject' => nexus_trans ( 'forum.post.edited_notify_subject' , [], $locale ),
'msg' => nexus_trans ( 'forum.post.edited_notify_body' , [ 'topic_subject' => $postUrl , 'editor' => $CURUSER [ 'username' ]], $locale ),
'added' => now (),
];
\App\Models\Message :: add ( $notify );
}
2022-06-18 13:16:36 +08:00
}
2020-12-26 01:42:23 +08:00
}
else
{
// Anti Flood Code
// To ensure that posts are not entered within 10 seconds limiting posts
// to a maximum of 360*6 per hour.
2022-08-20 19:11:28 +08:00
if ( ! user_can ( 'postmanage' )) {
2020-12-26 01:42:23 +08:00
if ( strtotime ( $CURUSER [ 'last_post' ]) > ( TIMENOW - 10 ))
{
$secs = 10 - ( TIMENOW - strtotime ( $CURUSER [ 'last_post' ]));
stderr ( $lang_forums [ 'std_error' ], $lang_forums [ 'std_post_flooding' ] . $secs . $lang_forums [ 'std_seconds_before_making' ], false );
}
}
if ( $type == 'new' ){ //new topic
//add bonus
KPS ( " + " , $starttopic_bonus , $userid );
//---- Create topic
sql_query ( " INSERT INTO topics (userid, forumid, subject) VALUES( $userid , $forumid , " . sqlesc ( $subject ) . " ) " ) or sqlerr ( __FILE__ , __LINE__ );
$topicid = mysql_insert_id () or stderr ( $lang_forums [ 'std_error' ], $lang_forums [ 'std_no_topic_id_returned' ]);
sql_query ( " UPDATE forums SET topiccount=topiccount+1, postcount=postcount+1 WHERE id= " . sqlesc ( $forumid ));
}
else // new post
{
//add bonus
KPS ( " + " , $makepost_bonus , $userid );
sql_query ( " UPDATE forums SET postcount=postcount+1 WHERE id= " . sqlesc ( $forumid ));
}
sql_query ( " INSERT INTO posts (topicid, userid, added, body, ori_body) VALUES ( $topicid , $userid , " . sqlesc ( $date ) . " , " . sqlesc ( $body ) . " , " . sqlesc ( $body ) . " ) " ) or sqlerr ( __FILE__ , __LINE__ );
$postid = mysql_insert_id () or die ( $lang_forums [ 'std_post_id_not_available' ]);
2022-06-18 13:16:36 +08:00
//send pm
$topicInfo = \App\Models\Topic :: query () -> findOrFail ( $topicid );
2025-10-02 20:08:42 +07:00
$postUrl = sprintf ( '[url=forums.php?action=viewtopic&topicid=%s&page=p%s#pid%s]%s[/url]' , $topicid , $postid , $postid , $topicInfo -> subject );
2025-09-16 00:32:45 +08:00
if ( $type == 'reply' ) {
/** @var \App\Models\User $receiver */
if ( ! empty ( $topicInfo -> userid ) && $topicInfo -> userid != $CURUSER [ 'id' ])
{
$receiver = $topicInfo -> user ;
2025-10-02 20:08:42 +07:00
if ( $receiver && $receiver -> acceptNotification ( 'topic_reply' )) {
2025-09-16 00:32:45 +08:00
$locale = $receiver -> locale ;
$notify = [
'sender' => 0 ,
'receiver' => $receiver -> id ,
'subject' => nexus_trans ( 'forum.topic.replied_notify_subject' , [], $locale ),
'msg' => nexus_trans ( 'forum.topic.replied_notify_body' , [ 'topic_subject' => $postUrl ], $locale ),
'added' => now (),
];
2025-09-16 16:30:42 +08:00
\App\Models\Message :: add ( $notify );
2025-09-16 00:32:45 +08:00
}
}
2025-09-17 21:22:42 +07:00
if ( ! empty ( $quotepostid )) {
$quotePostInfo = \App\Models\Post :: query () -> find ( $quotepostid );
if ( $quotePostInfo && $quotePostInfo -> userid != $CURUSER [ 'id' ]) {
$receiver = $quotePostInfo -> user ;
2025-10-02 20:15:32 +07:00
if ( $receiver && $receiver -> acceptNotification ( 'topic_reply' )) {
2025-09-17 21:22:42 +07:00
$locale = $receiver -> locale ;
$notify = [
'sender' => 0 ,
'receiver' => $receiver -> id ,
'subject' => nexus_trans ( 'forum.reply.replied_notify_subject' , [], $locale ),
'msg' => nexus_trans ( 'forum.reply.replied_notify_body' , [ 'topic_subject' => $postUrl , 'replyer' => $CURUSER [ 'username' ]], $locale ),
'added' => now (),
];
\App\Models\Message :: add ( $notify );
}
}
}
2022-06-18 13:16:36 +08:00
}
2020-12-26 01:42:23 +08:00
$Cache -> delete_value ( 'forum_' . $forumid . '_post_' . $today_date . '_count' );
$Cache -> delete_value ( 'today_' . $today_date . '_posts_count' );
$Cache -> delete_value ( 'forum_' . $forumid . '_last_replied_topic_content' );
$Cache -> delete_value ( 'topic_' . $topicid . '_post_count' );
$Cache -> delete_value ( 'user_' . $userid . '_post_count' );
if ( $type == 'new' )
{
// update the first post of topic
sql_query ( " UPDATE topics SET firstpost= $postid , lastpost= $postid WHERE id= " . sqlesc ( $topicid )) or sqlerr ( __FILE__ , __LINE__ );
}
else
{
sql_query ( " UPDATE topics SET lastpost= $postid WHERE id= " . sqlesc ( $topicid )) or sqlerr ( __FILE__ , __LINE__ );
}
sql_query ( " UPDATE users SET last_post= " . sqlesc ( $date ) . " WHERE id= " . sqlesc ( $CURUSER [ 'id' ])) or sqlerr ( __FILE__ , __LINE__ );
}
//------ All done, redirect user to the post
$headerstr = " Location: " . get_protocol_prefix () . " $BASEURL /forums.php?action=viewtopic&topicid= $topicid " ;
if ( $type == 'edit' )
header ( $headerstr . " &page=p " . $postid . " #pid " . $postid );
else
header ( $headerstr . " &page=last#pid $postid " );
die ;
}
//-------- Action: View topic
if ( $action == " viewtopic " )
{
2020-12-29 03:02:34 +08:00
$highlight = htmlspecialchars ( trim ( $_GET [ " highlight " ] ? ? '' ));
2020-12-26 01:42:23 +08:00
2021-01-06 00:56:13 +08:00
$topicid = intval ( $_GET [ " topicid " ] ? ? 0 );
2020-12-26 01:42:23 +08:00
int_check ( $topicid , true );
2022-06-18 13:16:36 +08:00
$page = $_GET [ " page " ] ? ? 0 ;
2021-01-06 00:56:13 +08:00
$authorid = intval ( $_GET [ " authorid " ] ? ? 0 );
2020-12-26 01:42:23 +08:00
if ( $authorid )
{
$where = " WHERE topicid= " . sqlesc ( $topicid ) . " AND userid= " . sqlesc ( $authorid );
$addparam = " action=viewtopic&topicid= " . $topicid . " &authorid= " . $authorid ;
}
else
{
$where = " WHERE topicid= " . sqlesc ( $topicid );
$addparam = " action=viewtopic&topicid= " . $topicid ;
}
$userid = $CURUSER [ " id " ];
//------ Get topic info
$res = sql_query ( " SELECT * FROM topics WHERE id= " . sqlesc ( $topicid ) . " LIMIT 1 " ) or sqlerr ( __FILE__ , __LINE__ );
$arr = mysql_fetch_assoc ( $res ) or stderr ( $lang_forums [ 'std_forum_error' ], $lang_forums [ 'std_topic_not_found' ]);
$forumid = $arr [ 'forumid' ];
$locked = $arr [ 'locked' ] == " yes " ;
$orgsubject = $arr [ 'subject' ];
$subject = htmlspecialchars ( $arr [ 'subject' ]);
if ( $highlight ){
$subject = highlight ( $highlight , $orgsubject );
}
$sticky = $arr [ 'sticky' ] == " yes " ;
$hlcolor = $arr [ 'hlcolor' ];
$views = $arr [ 'views' ];
$forumid = $arr [ " forumid " ];
2022-11-24 20:34:13 +08:00
$base_posterid = $arr [ 'userid' ];
2020-12-26 01:42:23 +08:00
$row = get_forum_row ( $forumid );
//------ Get forum name, moderators
$forumname = $row [ 'name' ];
$is_forummod = is_forum_moderator ( $forumid , 'forum' );
if ( get_user_class () < $row [ " minclassread " ])
stderr ( $lang_forums [ 'std_error' ], $lang_forums [ 'std_unpermitted_viewing_topic' ]);
2022-08-20 19:11:28 +08:00
if ((( get_user_class () >= $row [ " minclasswrite " ] && ! $locked ) || user_can ( 'postmanage' ) || $is_forummod ) && $CURUSER [ " forumpost " ] == 'yes' )
2020-12-26 01:42:23 +08:00
$maypost = true ;
else $maypost = false ;
//------ Update hits column
sql_query ( " UPDATE topics SET views = views + 1 WHERE id= $topicid " ) or sqlerr ( __FILE__ , __LINE__ );
//------ Get post count
$postcount = get_row_count ( " posts " , $where );
if ( ! $authorid )
$Cache -> cache_value ( 'topic_' . $topicid . '_post_count' , $postcount , 3600 );
//------ Make page menu
$pagerarr = array ();
$perpage = $postsperpage ;
$pages = ceil ( $postcount / $perpage );
2020-12-29 03:02:34 +08:00
if ( isset ( $page [ 0 ]) && $page [ 0 ] == " p " )
2020-12-26 01:42:23 +08:00
{
$findpost = substr ( $page , 1 );
$res = sql_query ( " SELECT id FROM posts $where ORDER BY added " ) or sqlerr ( __FILE__ , __LINE__ );
$i = 0 ;
while ( $arr = mysql_fetch_row ( $res ))
{
if ( $arr [ 0 ] == $findpost )
break ;
++ $i ;
}
$page = floor ( $i / $perpage );
}
if ( $page === " last " ){
$page = $pages - 1 ;
}
elseif ( isset ( $page ))
{
if ( $page < 0 ){
$page = 0 ;
}
elseif ( $page > $pages - 1 ){
$page = $pages - 1 ;
}
}
else { if ( $CURUSER [ " clicktopic " ] == " firstpage " )
$page = 0 ;
else $page = $pages - 1 ;
}
$offset = $page * $perpage ;
$dotted = 0 ;
$dotspace = 3 ;
$dotend = $pages - $dotspace ;
$curdotend = $page - $dotspace ;
$curdotstart = $page + $dotspace ;
for ( $i = 0 ; $i < $pages ; ++ $i )
{
if (( $i >= $dotspace && $i <= $curdotend ) || ( $i >= $curdotstart && $i < $dotend )) {
if ( ! $dotted )
$pagerarr [] = " ... " ;
$dotted = 1 ;
continue ;
}
$dotted = 0 ;
if ( $i != $page )
$pagerarr [] .= " <a href= \" " . htmlspecialchars ( " ? " . $addparam . " &page= " . $i ) . " \" ><b> " . ( $i + 1 ) . " </b></a> \n " ;
else
$pagerarr [] .= " <font class= \" gray \" ><b> " . ( $i + 1 ) . " </b></font> \n " ;
}
if ( $page == 0 )
$pager = " <font class= \" gray \" ><b><< " . $lang_forums [ 'text_prev' ] . " </b></font> " ;
else
$pager = " <a href= \" " . htmlspecialchars ( " ? " . $addparam . " &page= " . ( $page - 1 )) .
" \" ><b><< " . $lang_forums [ 'text_prev' ] . " </b></a> " ;
$pager .= " " ;
if ( $page == $pages - 1 )
$pager .= " <font class= \" gray \" ><b> " . $lang_forums [ 'text_next' ] . " >></b></font> \n " ;
else
$pager .= " <a href= \" " . htmlspecialchars ( " ? " . $addparam . " &page= " . ( $page + 1 )) .
" \" ><b> " . $lang_forums [ 'text_next' ] . " >></b></a> \n " ;
$pagerstr = join ( " | " , $pagerarr );
$pagertop = " <p align= \" center \" > " . $pager . " <br /> " . $pagerstr . " </p> \n " ;
$pagerbottom = " <p align= \" center \" > " . $pagerstr . " <br /> " . $pager . " </p> \n " ;
//------ Get posts
$res = sql_query ( " SELECT * FROM posts $where ORDER BY id LIMIT $offset , $perpage " ) or sqlerr ( __FILE__ , __LINE__ );
stdhead ( $lang_forums [ 'head_view_topic' ] . " \" " . $orgsubject . " \" " );
begin_main_frame ( " " , true );
print ( " <h1 align= \" center \" ><a class= \" faqlink \" href= \" forums.php \" > " . $SITENAME . " " . $lang_forums [ 'text_forums' ] . " </a>--><a class= \" faqlink \" href= \" " . htmlspecialchars ( " ?action=viewforum&forumid= " . $forumid ) . " \" > " . $forumname . " </a><b>--></b><span id= \" top \" > " . $subject . ( $locked ? " <b>[<font class= \" striking \" > " . $lang_forums [ 'text_locked' ] . " </font>]</b> " : " " ) . " </span></h1> \n " );
end_main_frame ();
print ( $pagertop );
//------ Print table
begin_main_frame ();
2021-05-26 21:38:39 +08:00
print ( " <table border= \" 0 \" class= \" main \" cellspacing= \" 0 \" cellpadding= \" 5 \" width= \" 97% \" ><tr> \n " );
2020-12-26 01:42:23 +08:00
print ( " <td class= \" embedded \" width= \" 99% \" > " . $lang_forums [ 'there_is' ] . " <b> " . $views . " </b> " . $lang_forums [ 'hits_on_this_topic' ]);
print ( " </td> \n " );
print ( " <td class= \" embedded nowrap \" width= \" 1% \" align= \" right \" > " );
if ( $maypost )
{
print ( " <a href= \" " . htmlspecialchars ( " ?action=reply&topicid= " . $topicid ) . " \" ><img class= \" f_reply \" src= \" pic/trans.gif \" alt= \" Add Reply \" title= \" " . $lang_forums [ 'title_reply_directly' ] . " \" /></a> " );
}
print ( " </td> " );
print ( " </tr></table> \n " );
begin_frame ();
$pc = mysql_num_rows ( $res );
2022-01-19 23:54:55 +08:00
$allPosts = $uidArr = [];
while ( $arr = mysql_fetch_assoc ( $res )) {
$allPosts [] = $arr ;
$uidArr [ $arr [ 'userid' ]] = 1 ;
}
$uidArr = array_keys ( $uidArr );
unset ( $arr );
$neededColumns = array ( 'id' , 'noad' , 'class' , 'enabled' , 'privacy' , 'avatar' , 'signature' , 'uploaded' , 'downloaded' , 'last_access' , 'username' , 'donor' , 'leechwarn' , 'warned' , 'title' );
2022-08-10 17:38:05 +08:00
$userInfoArr = \App\Models\User :: query () -> find ( $uidArr , $neededColumns ) -> keyBy ( 'id' );
2020-12-26 01:42:23 +08:00
$pn = 0 ;
$lpr = get_last_read_post_id ( $topicid );
if ( $Advertisement -> enable_ad ())
$forumpostad = $Advertisement -> get_ad ( 'forumpost' );
2022-11-24 20:34:13 +08:00
//check if privacy protection enabled in this forum
2023-04-20 02:08:09 +08:00
// $protected_forums = Nexus\Database\NexusDB::remember("setting_protected_forum", 600, function () {
// return \App\Models\Setting::getByName('misc.protected_forum');
// });
//
// if ($protected_forums and in_array(strval($forumid),explode(",",$protected_forums))){
// $protected_enabled=true;
// }else{
// $protected_enabled=false;
// }
2022-11-24 20:34:13 +08:00
2022-01-19 23:54:55 +08:00
foreach ( $allPosts as $arr )
2020-12-26 01:42:23 +08:00
{
if ( $pn >= 1 )
{
if ( $Advertisement -> enable_ad ()){
2020-12-29 03:02:34 +08:00
if ( ! empty ( $forumpostad [ $pn - 1 ]))
2022-05-07 22:11:24 +08:00
echo " <div align= \" center \" style= \" margin-top: 10px \" id= \" \" > " . $forumpostad [ $pn - 1 ] . " </div> " ;
2020-12-26 01:42:23 +08:00
}
}
++ $pn ;
$postid = $arr [ " id " ];
$posterid = $arr [ " userid " ];
$added = gettime ( $arr [ " added " ], true , false );
//---- Get poster details
2022-01-19 23:54:55 +08:00
// $arr2 = get_user_row($posterid);
2022-03-11 23:33:34 +08:00
$userInfo = $userInfoArr -> get ( $posterid ) ? : \App\Models\User :: defaultUser ();
2022-01-19 23:54:55 +08:00
$arr2 = $userInfo -> toArray ();
2020-12-26 01:42:23 +08:00
$uploaded = mksize ( $arr2 [ " uploaded " ]);
$downloaded = mksize ( $arr2 [ " downloaded " ]);
$ratio = get_ratio ( $arr2 [ 'id' ]);
if ( ! $forumposts = $Cache -> get_value ( 'user_' . $posterid . '_post_count' )){
$forumposts = get_row_count ( " posts " , " WHERE userid= " . $posterid );
$Cache -> cache_value ( 'user_' . $posterid . '_post_count' , $forumposts , 3600 );
}
$signature = ( $CURUSER [ " signatures " ] == " yes " ? $arr2 [ " signature " ] : " " );
$avatar = ( $CURUSER [ " avatars " ] == " yes " ? htmlspecialchars ( $arr2 [ " avatar " ]) : " " );
$uclass = get_user_class_image ( $arr2 [ " class " ]);
2022-08-10 17:38:05 +08:00
$by = get_username ( $posterid , false , true , true , false , false , true );
2020-12-26 01:42:23 +08:00
if ( ! $avatar )
$avatar = " pic/default_avatar.png " ;
if ( $pn == $pc )
{
print ( " <span id= \" last \" ></span> \n " );
if ( $postid > $lpr ){
if ( $lpr == $CURUSER [ 'last_catchup' ]) // There is no record of this topic
sql_query ( " INSERT INTO readposts(userid, topicid, lastpostread) VALUES ( " . $userid . " , " . $topicid . " , " . $postid . " ) " ) or sqlerr ( __FILE__ , __LINE__ );
elseif ( $lpr > $CURUSER [ 'last_catchup' ]) //There is record of this topic
sql_query ( " UPDATE readposts SET lastpostread= $postid WHERE userid= $userid AND topicid= $topicid " ) or sqlerr ( __FILE__ , __LINE__ );
$Cache -> delete_value ( 'user_' . $CURUSER [ 'id' ] . '_last_read_post_list' );
}
}
print ( " <div style= \" margin-top: 8pt; margin-bottom: 8pt; \" ><table id= \" pid " . $postid . " \" border= \" 0 \" cellspacing= \" 0 \" cellpadding= \" 0 \" width= \" 100% \" ><tr><td class= \" embedded \" width= \" 99% \" ><a href= \" " . htmlspecialchars ( " forums.php?action=viewtopic&topicid= " . $topicid . " &page=p " . $postid . " #pid " . $postid ) . " \" ># " . $postid . " </a> <font color= \" gray \" > " . $lang_forums [ 'text_by' ] . " </font> " . $by . " <font color= \" gray \" > " . $lang_forums [ 'text_at' ] . " </font> " . $added );
if ( is_valid_id ( $arr [ 'editedby' ]))
print ( " " );
print ( " <font color= \" gray \" >|</font> " );
if ( $authorid )
print ( " <a href= \" ?action=viewtopic&topicid= " . $topicid . " \" > " . $lang_forums [ 'text_view_all_posts' ] . " </a> " );
else
print ( " <a href= \" " . htmlspecialchars ( " ?action=viewtopic&topicid= " . $topicid . " &authorid= " . $posterid ) . " \" > " . $lang_forums [ 'text_view_this_author_only' ] . " </a> " );
print ( " </td><td class= \" embedded nowrap \" width= \" 1% \" ><font class= \" big \" > " . $lang_forums [ 'text_number' ] . " <b> " . ( $pn + $offset ) . " </b> " . $lang_forums [ 'text_lou' ] . " </font><a href= \" #top \" ><img class= \" top \" src= \" pic/trans.gif \" alt= \" Top \" title= \" " . $lang_forums [ 'text_back_to_top' ] . " \" /></a> </td></tr> " );
print ( " </table></div> \n " );
print ( " <table class= \" main \" width= \" 100% \" border= \" 1 \" cellspacing= \" 0 \" cellpadding= \" 5 \" > \n " );
2023-04-20 02:08:09 +08:00
2024-10-12 12:53:48 +08:00
$body = " <div id= \" pid " . $postid . " body \" style= \" word-break: break-all; \" > " ;
2023-04-20 02:08:09 +08:00
//hidden content applied to second or higher floor post (for whose user class below Ad , not poster , not mods ,not reply's author)
// if ($protected_enabled && $pn+$offset>1 && get_user_class()<UC_ADMINISTRATOR && $userid != $base_posterid && $posterid!=$userid && !$is_forummod){
if ( $pn + $offset > 1 && ! can_view_post ( $userid , $arr )){
2022-11-24 20:34:13 +08:00
//enable content protection
$bodyContent = format_comment ( $lang_forums [ " text_post_protected " ]);
2023-04-20 02:08:09 +08:00
$canViewProtected = false ;
2022-11-24 20:34:13 +08:00
} else {
//display normal content
$bodyContent = format_comment ( $arr [ " body " ]);
2023-04-20 02:08:09 +08:00
$canViewProtected = true ;
2022-11-24 20:34:13 +08:00
}
2020-12-26 01:42:23 +08:00
if ( $highlight ){
2023-04-09 19:37:53 +08:00
$bodyContent = highlight ( $highlight , $bodyContent );
2020-12-26 01:42:23 +08:00
}
if ( is_valid_id ( $arr [ 'editedby' ]))
{
$lastedittime = gettime ( $arr [ 'editdate' ], true , false );
2022-06-10 01:25:13 +08:00
$bodyContent .= " <br /><p><font class= \" small \" > " . $lang_forums [ 'text_last_edited_by' ] . get_username ( $arr [ 'editedby' ]) . $lang_forums [ 'text_last_edit_at' ] . $lastedittime . " </font></p> \n " ;
2020-12-26 01:42:23 +08:00
}
2022-06-10 01:25:13 +08:00
$bodyContent = apply_filter ( 'post_body' , $bodyContent , $arr , $allPosts );
$body .= $bodyContent . " </div> " ;
2020-12-26 01:42:23 +08:00
if ( $signature )
$body .= " <p style='vertical-align:bottom'><br />____________________<br /> " . format_comment ( $signature , false , false , false , true , 500 , true , false , 1 , 200 ) . " </p> " ;
$stats = " <br /> " . " " . $lang_forums [ 'text_posts' ] . " $forumposts <br /> " . " " . $lang_forums [ 'text_ul' ] . " $uploaded <br /> " . " " . $lang_forums [ 'text_dl' ] . " $downloaded <br /> " . " " . $lang_forums [ 'text_ratio' ] . " $ratio " ;
print ( " <tr><td class= \" rowfollow \" width= \" 150 \" valign= \" top \" align= \" left \" style='padding: 0px'> " .
return_avatar_image ( $avatar ) . " <br /><br /><br /> <img alt= \" " . get_user_class_name ( $arr2 [ " class " ], false , false , true ) . " \" title= \" " . get_user_class_name ( $arr2 [ " class " ], false , false , true ) . " \" src= \" " . $uclass . " \" /> " . $stats . " </td><td class= \" rowfollow \" valign= \" top \" ><br /> " . $body . " </td></tr> \n " );
$secs = 900 ;
$dt = sqlesc ( date ( " Y-m-d H:i:s " ,( TIMENOW - $secs ))); // calculate date.
print ( " <tr><td class= \" rowfollow \" align= \" center \" valign= \" middle \" > " . ( " ' " . $arr2 [ 'last_access' ] . " ' " > $dt ? " <img class= \" f_online \" src= \" pic/trans.gif \" alt= \" Online \" title= \" " . $lang_forums [ 'title_online' ] . " \" /> " : " <img class= \" f_offline \" src= \" pic/trans.gif \" alt= \" Offline \" title= \" " . $lang_forums [ 'title_offline' ] . " \" /> " ) . " <a href= \" sendmessage.php?receiver= " . htmlspecialchars ( trim ( $arr2 [ " id " ])) . " \" ><img class= \" f_pm \" src= \" pic/trans.gif \" alt= \" PM \" title= \" " . $lang_forums [ 'title_send_message_to' ] . htmlspecialchars ( $arr2 [ " username " ]) . " \" /></a><a href= \" report.php?forumpost= $postid\ " >< img class = \ " f_report \" src= \" pic/trans.gif \" alt= \" Report \" title= \" " . $lang_forums [ 'title_report_this_post' ] . " \" /></a></td> " );
print ( " <td class= \" toolbox \" align= \" right \" > " );
2022-06-03 03:42:53 +08:00
do_action ( 'post_toolbox' , $arr , $allPosts , $CURUSER [ 'id' ]);
2023-04-20 02:08:09 +08:00
if ( $maypost && $canViewProtected )
2020-12-26 01:42:23 +08:00
print ( " <a href= \" " . htmlspecialchars ( " ?action=quotepost&postid= " . $postid ) . " \" ><img class= \" f_quote \" src= \" pic/trans.gif \" alt= \" Quote \" title= \" " . $lang_forums [ 'title_reply_with_quote' ] . " \" /></a> " );
2022-08-20 19:11:28 +08:00
if ( user_can ( 'postmanage' ) || $is_forummod )
2020-12-26 01:42:23 +08:00
print ( " <a href= \" " . htmlspecialchars ( " ?action=deletepost&postid= " . $postid ) . " \" ><img class= \" f_delete \" src= \" pic/trans.gif \" alt= \" Delete \" title= \" " . $lang_forums [ 'title_delete_post' ] . " \" /></a> " );
2022-08-20 19:11:28 +08:00
if (( $CURUSER [ " id " ] == $posterid && ! $locked ) || user_can ( 'postmanage' ) || $is_forummod )
2020-12-26 01:42:23 +08:00
print ( " <a href= \" " . htmlspecialchars ( " ?action=editpost&postid= " . $postid ) . " \" ><img class= \" f_edit \" src= \" pic/trans.gif \" alt= \" Edit \" title= \" " . $lang_forums [ 'title_edit_post' ] . " \" /></a> " );
print ( " </td></tr></table> " );
}
//------ Mod options
2022-08-20 19:11:28 +08:00
if ( user_can ( 'postmanage' ) || $is_forummod )
2020-12-26 01:42:23 +08:00
{
print ( " </td></tr><tr><td class= \" toolbox \" align= \" center \" > \n " );
print ( " <table border= \" 0 \" cellspacing= \" 0 \" cellpadding= \" 0 \" align= \" left \" > \n " );
print ( " <tr><td class= \" embedded \" ><form method= \" post \" action= \" ?action=setsticky \" > \n " );
print ( " <input type= \" hidden \" name= \" topicid \" value= \" " . $topicid . " \" /> \n " );
2020-12-29 03:02:34 +08:00
print ( " <input type= \" hidden \" name= \" returnto \" value= \" " . htmlspecialchars ( $_SERVER [ 'REQUEST_URI' ]) . " \" /> \n " );
2020-12-26 01:42:23 +08:00
print ( " <input type= \" hidden \" name= \" sticky \" value= \" " . ( $sticky ? 'no' : 'yes' ) . " \" /><input type= \" submit \" class= \" medium \" value= \" " . ( $sticky ? $lang_forums [ 'submit_unsticky' ] : $lang_forums [ 'submit_sticky' ]) . " \" /></form></td> \n " );
print ( " <td class= \" embedded \" ><form method= \" post \" action= \" ?action=setlocked \" > \n " );
print ( " <input type= \" hidden \" name= \" topicid \" value= \" " . $topicid . " \" /> \n " );
2020-12-29 03:02:34 +08:00
print ( " <input type= \" hidden \" name= \" returnto \" value= \" " . htmlspecialchars ( $_SERVER [ 'REQUEST_URI' ]) . " \" /> \n " );
2020-12-26 01:42:23 +08:00
print ( " <input type= \" hidden \" name= \" locked \" value= \" " . ( $locked ? 'no' : 'yes' ) . " \" /><input type= \" submit \" class= \" medium \" value= \" " . ( $locked ? $lang_forums [ 'submit_unlock' ] : $lang_forums [ 'submit_lock' ]) . " \" /></form></td> \n " );
print ( " <td class= \" embedded \" ><form method= \" get \" action= \" ? \" > \n " );
print ( " <input type= \" hidden \" name= \" action \" value= \" deletetopic \" /> \n " );
print ( " <input type= \" hidden \" name= \" topicid \" value= \" " . $topicid . " \" /> \n " );
print ( " <input type= \" hidden \" name= \" forumid \" value= \" " . $forumid . " \" /> \n " );
print ( " <input type= \" submit \" class= \" medium \" value= \" " . $lang_forums [ 'submit_delete_topic' ] . " \" /></form></td> \n " );
print ( " <td class= \" embedded \" ><form method= \" post \" action= \" " . htmlspecialchars ( " ?action=movetopic&topicid= " . $topicid ) . " \" > \n " . " " . $lang_forums [ 'text_move_thread_to' ] . " <select class= \" med \" name= \" forumid \" > " );
$forums = get_forum_row ();
foreach ( $forums as $arr ){
if ( $arr [ " id " ] != $forumid && get_user_class () >= $arr [ " minclasswrite " ])
print ( " <option value= \" " . $arr [ " id " ] . " \" > " . htmlspecialchars ( $arr [ " name " ]) . " </option> \n " );
}
print ( " </select> <input type= \" submit \" class= \" medium \" value= \" " . $lang_forums [ 'submit_move' ] . " \" /></form></td> " );
print ( " <td class= \" embedded \" ><form method= \" post \" action= \" " . htmlspecialchars ( " ?action=hltopic&topicid= " . $topicid ) . " \" > \n " . " " . $lang_forums [ 'text_highlight_topic' ] . " <select class= \" med \" name= \" color \" > " );
print ( " <option value='0'> " . $lang_forums [ 'select_color' ] . " </option>
< option style = 'background-color: black' value = \ " 1 \" >Black</option>
< option style = 'background-color: sienna' value = \ " 2 \" >Sienna</option>
< option style = 'background-color: darkolivegreen' value = \ " 3 \" >Dark Olive Green</option>
< option style = 'background-color: darkgreen' value = \ " 4 \" >Dark Green</option>
< option style = 'background-color: darkslateblue' value = \ " 5 \" >Dark Slate Blue</option>
< option style = 'background-color: navy' value = \ " 6 \" >Navy</option>
< option style = 'background-color: indigo' value = \ " 7 \" >Indigo</option>
< option style = 'background-color: darkslategray' value = \ " 8 \" >Dark Slate Gray</option>
< option style = 'background-color: darkred' value = \ " 9 \" >Dark Red</option>
< option style = 'background-color: darkorange' value = \ " 10 \" >Dark Orange</option>
< option style = 'background-color: olive' value = \ " 11 \" >Olive</option>
< option style = 'background-color: green' value = \ " 12 \" >Green</option>
< option style = 'background-color: teal' value = \ " 13 \" >Teal</option>
< option style = 'background-color: blue' value = \ " 14 \" >Blue</option>
< option style = 'background-color: slategray' value = \ " 15 \" >Slate Gray</option>
< option style = 'background-color: dimgray' value = \ " 16 \" >Dim Gray</option>
< option style = 'background-color: red' value = \ " 17 \" >Red</option>
< option style = 'background-color: sandybrown' value = \ " 18 \" >Sandy Brown</option>
< option style = 'background-color: yellowgreen' value = \ " 19 \" >Yellow Green</option>
< option style = 'background-color: seagreen' value = \ " 20 \" >Sea Green</option>
< option style = 'background-color: mediumturquoise' value = \ " 21 \" >Medium Turquoise</option>
< option style = 'background-color: royalblue' value = \ " 22 \" >Royal Blue</option>
< option style = 'background-color: purple' value = \ " 23 \" >Purple</option>
< option style = 'background-color: gray' value = \ " 24 \" >Gray</option>
< option style = 'background-color: magenta' value = \ " 25 \" >Magenta</option>
< option style = 'background-color: orange' value = \ " 26 \" >Orange</option>
< option style = 'background-color: yellow' value = \ " 27 \" >Yellow</option>
< option style = 'background-color: lime' value = \ " 28 \" >Lime</option>
< option style = 'background-color: cyan' value = \ " 29 \" >Cyan</option>
< option style = 'background-color: deepskyblue' value = \ " 30 \" >Deep Sky Blue</option>
< option style = 'background-color: darkorchid' value = \ " 31 \" >Dark Orchid</option>
< option style = 'background-color: silver' value = \ " 32 \" >Silver</option>
< option style = 'background-color: pink' value = \ " 33 \" >Pink</option>
< option style = 'background-color: wheat' value = \ " 34 \" >Wheat</option>
< option style = 'background-color: lemonchiffon' value = \ " 35 \" >Lemon Chiffon</option>
< option style = 'background-color: palegreen' value = \ " 36 \" >Pale Green</option>
< option style = 'background-color: paleturquoise' value = \ " 37 \" >Pale Turquoise</option>
< option style = 'background-color: lightblue' value = \ " 38 \" >Light Blue</option>
< option style = 'background-color: plum' value = \ " 39 \" >Plum</option>
< option style = 'background-color: white' value = \ " 40 \" >White</option> " );
print ( " </select> " );
2020-12-29 03:02:34 +08:00
print ( " <input type= \" hidden \" name= \" returnto \" value= \" " . htmlspecialchars ( $_SERVER [ 'REQUEST_URI' ]) . " \" /> \n " );
2020-12-26 01:42:23 +08:00
print ( " <input type= \" submit \" class= \" medium \" value= \" " . $lang_forums [ 'submit_change' ] . " \" /></form></td> " );
print ( " </tr> \n " );
print ( " </table> \n " );
}
end_frame ();
end_main_frame ();
print ( $pagerbottom );
if ( $maypost ){
print ( " <br /><table style='border:1px solid #000000;'><tr> " .
" <td class= \" text \" align= \" center \" ><b> " . $lang_forums [ 'text_quick_reply' ] . " </b><br /><br /> " .
" <form id= \" compose \" name= \" compose \" method= \" post \" action= \" ?action=post \" onsubmit= \" return postvalid(this); \" > " .
" <input type= \" hidden \" name= \" id \" value= \" " . $topicid . " \" /><input type= \" hidden \" name= \" type \" value= \" reply \" /><br /> " );
quickreply ( 'compose' , 'body' , $lang_forums [ 'submit_add_reply' ]);
print ( " </form></td></tr></table> " );
print ( " <p align= \" center \" ><a class= \" index \" href= \" " . htmlspecialchars ( " ?action=reply&topicid= " . $topicid ) . " \" > " . $lang_forums [ 'text_add_reply' ] . " </a></p> \n " );
}
elseif ( $locked )
print ( $lang_forums [ 'text_topic_locked_new_denied' ]);
else print ( $lang_forums [ 'text_unpermitted_posting_here' ]);
print ( key_shortcut ( $page , $pages - 1 ));
stdfoot ();
die ;
}
//-------- Action: Move topic
if ( $action == " movetopic " )
{
2021-01-06 00:56:13 +08:00
$forumid = intval ( $_POST [ " forumid " ] ? ? 0 );
2020-12-26 01:42:23 +08:00
2021-01-06 00:56:13 +08:00
$topicid = intval ( $_GET [ " topicid " ] ? ? 0 );
2020-12-26 01:42:23 +08:00
$ismod = is_forum_moderator ( $topicid , 'topic' );
2022-08-20 19:11:28 +08:00
if ( ! is_valid_id ( $forumid ) || ! is_valid_id ( $topicid ) || ( ! user_can ( 'postmanage' ) && ! $ismod ))
2020-12-26 01:42:23 +08:00
permissiondenied ();
// Make sure topic and forum is valid
$res = @ sql_query ( " SELECT minclasswrite FROM forums WHERE id= $forumid " ) or sqlerr ( __FILE__ , __LINE__ );
if ( mysql_num_rows ( $res ) != 1 )
stderr ( $lang_forums [ 'std_error' ], $lang_forums [ 'std_forum_not_found' ]);
$arr = mysql_fetch_row ( $res );
if ( get_user_class () < $arr [ 0 ])
permissiondenied ();
$res = @ sql_query ( " SELECT forumid FROM topics WHERE id= $topicid " ) or sqlerr ( __FILE__ , __LINE__ );
if ( mysql_num_rows ( $res ) != 1 )
stderr ( $lang_forums [ 'std_error' ], $lang_forums [ 'std_topic_not_found' ]);
$arr = mysql_fetch_row ( $res );
$old_forumid = $arr [ 0 ];
// get posts count
$res = sql_query ( " SELECT COUNT(id) AS nb_posts FROM posts WHERE topicid= $topicid " ) or sqlerr ( __FILE__ , __LINE__ );
if ( mysql_num_rows ( $res ) != 1 )
stderr ( $lang_forums [ 'std_error' ], $lang_forums [ 'std_cannot_get_posts_count' ]);
$arr = mysql_fetch_row ( $res );
$nb_posts = $arr [ 0 ];
// move topic
if ( $old_forumid != $forumid )
{
@ sql_query ( " UPDATE topics SET forumid= $forumid WHERE id= $topicid " ) or sqlerr ( __FILE__ , __LINE__ );
// update counts
@ sql_query ( " UPDATE forums SET topiccount=topiccount-1, postcount=postcount- $nb_posts WHERE id= $old_forumid " ) or sqlerr ( __FILE__ , __LINE__ );
$Cache -> delete_value ( 'forum_' . $old_forumid . '_post_' . $today_date . '_count' );
$Cache -> delete_value ( 'forum_' . $old_forumid . '_last_replied_topic_content' );
@ sql_query ( " UPDATE forums SET topiccount=topiccount+1, postcount=postcount+ $nb_posts WHERE id= $forumid " ) or sqlerr ( __FILE__ , __LINE__ );
$Cache -> delete_value ( 'forum_' . $forumid . '_post_' . $today_date . '_count' );
$Cache -> delete_value ( 'forum_' . $forumid . '_last_replied_topic_content' );
}
// Redirect to forum page
header ( " Location: " . get_protocol_prefix () . " $BASEURL /forums.php?action=viewforum&forumid= $forumid " );
die ;
}
//-------- Action: Delete topic
if ( $action == " deletetopic " )
{
2021-01-06 00:56:13 +08:00
$topicid = intval ( $_GET [ " topicid " ] ? ? 0 );
2020-12-26 01:42:23 +08:00
$res1 = sql_query ( " SELECT forumid, userid FROM topics WHERE id= " . sqlesc ( $topicid ) . " LIMIT 1 " ) or sqlerr ( __FILE__ , __LINE__ );
$row1 = mysql_fetch_array ( $res1 );
if ( ! $row1 ){
die ;
}
else {
$forumid = $row1 [ 'forumid' ];
$userid = $row1 [ 'userid' ];
}
$ismod = is_forum_moderator ( $topicid , 'topic' );
2022-08-20 19:11:28 +08:00
if ( ! is_valid_id ( $topicid ) || ( ! user_can ( 'postmanage' ) && ! $ismod ))
2020-12-26 01:42:23 +08:00
permissiondenied ();
2021-01-06 00:56:13 +08:00
$sure = intval ( $_GET [ " sure " ] ? ? 0 );
2020-12-26 01:42:23 +08:00
if ( ! $sure )
{
stderr ( $lang_forums [ 'std_delete_topic' ], $lang_forums [ 'std_delete_topic_note' ] .
" <a class=altlink href=?action=deletetopic&topicid= $topicid &sure=1> " . $lang_forums [ 'std_here_if_sure' ], false );
}
$postcount = get_row_count ( " posts " , " WHERE topicid= " . sqlesc ( $topicid ));
sql_query ( " DELETE FROM topics WHERE id= $topicid " ) or sqlerr ( __FILE__ , __LINE__ );
sql_query ( " DELETE FROM posts WHERE topicid= $topicid " ) or sqlerr ( __FILE__ , __LINE__ );
sql_query ( " DELETE FROM readposts WHERE topicid= $topicid " ) or sqlerr ( __FILE__ , __LINE__ );
@ sql_query ( " UPDATE forums SET topiccount=topiccount-1, postcount=postcount- $postcount WHERE id= " . sqlesc ( $forumid )) or sqlerr ( __FILE__ , __LINE__ );
$Cache -> delete_value ( 'forum_' . $forumid . '_post_' . $today_date . '_count' );
$forum_last_replied_topic_row = $Cache -> get_value ( 'forum_' . $forumid . '_last_replied_topic_content' );
if ( $forum_last_replied_topic_row && $forum_last_replied_topic_row [ 'id' ] == $topicid )
$Cache -> delete_value ( 'forum_' . $forumid . '_last_replied_topic_content' );
//===remove karma
KPS ( " - " , $starttopic_bonus , $userid );
//===end
header ( " Location: " . get_protocol_prefix () . " $BASEURL /forums.php?action=viewforum&forumid= $forumid " );
die ;
}
//-------- Action: Delete post
if ( $action == " deletepost " )
{
2021-01-06 00:56:13 +08:00
$postid = intval ( $_GET [ " postid " ] ? ? 0 );
$sure = intval ( $_GET [ " sure " ] ? ? 0 );
2020-12-26 01:42:23 +08:00
$ismod = is_forum_moderator ( $postid , 'post' );
2022-08-20 19:11:28 +08:00
if (( ! user_can ( 'postmanage' ) && ! $ismod ) || ! is_valid_id ( $postid ))
2020-12-26 01:42:23 +08:00
permissiondenied ();
//------- Get topic id
$res = sql_query ( " SELECT topicid, userid FROM posts WHERE id= $postid " ) or sqlerr ( __FILE__ , __LINE__ );
$arr = mysql_fetch_array ( $res ) or stderr ( $lang_forums [ 'std_error' ], $lang_forums [ 'std_post_not_found' ]);
$topicid = $arr [ 'topicid' ];
$userid = $arr [ 'userid' ];
//------- Get the id of the last post before the one we're deleting
$res = sql_query ( " SELECT id FROM posts WHERE topicid= $topicid AND id < $postid ORDER BY id DESC LIMIT 1 " ) or sqlerr ( __FILE__ , __LINE__ );
if ( mysql_num_rows ( $res ) == 0 ) // This is the first post of a topic
stderr ( $lang_forums [ 'std_error' ], $lang_forums [ 'std_cannot_delete_post' ] .
" <a class=altlink href=?action=deletetopic&topicid= $topicid &sure=1> " . $lang_forums [ 'std_delete_topic_instead' ], false );
else
{
$arr = mysql_fetch_row ( $res );
$redirtopost = " &page=p $arr[0] #pid $arr[0] " ;
}
//------- Make sure we know what we do :-)
if ( ! $sure )
{
stderr ( $lang_forums [ 'std_delete_post' ], $lang_forums [ 'std_delete_post_note' ] .
" <a class=altlink href=?action=deletepost&postid= $postid &sure=1> " . $lang_forums [ 'std_here_if_sure' ], false );
}
//------- Delete post
sql_query ( " DELETE FROM posts WHERE id= $postid " ) or sqlerr ( __FILE__ , __LINE__ );
$Cache -> delete_value ( 'user_' . $userid . '_post_count' );
$Cache -> delete_value ( 'topic_' . $topicid . '_post_count' );
// update forum
$forumid = get_single_value ( " topics " , " forumid " , " WHERE id= " . sqlesc ( $topicid ));
if ( ! $forumid )
die ();
else {
sql_query ( " UPDATE forums SET postcount=postcount-1 WHERE id= " . sqlesc ( $forumid ));
}
$forum_last_replied_topic_row = $Cache -> get_value ( 'forum_' . $forumid . '_last_replied_topic_content' );
if ( $forum_last_replied_topic_row && $forum_last_replied_topic_row [ 'lastpost' ] == $postid )
$Cache -> delete_value ( 'forum_' . $forumid . '_last_replied_topic_content' );
//------- Update topic
update_topic_last_post ( $topicid );
//===remove karma
KPS ( " - " , $makepost_bonus , $userid );
header ( " Location: " . get_protocol_prefix () . " $BASEURL /forums.php?action=viewtopic&topicid= $topicid $redirtopost " );
die ;
}
//-------- Action: Set locked on/off
if ( $action == " setlocked " )
{
2021-01-06 00:56:13 +08:00
$topicid = intval ( $_POST [ " topicid " ] ? ? 0 );
2020-12-26 01:42:23 +08:00
$ismod = is_forum_moderator ( $topicid , 'topic' );
2022-08-20 19:11:28 +08:00
if ( ! $topicid || ( ! user_can ( 'postmanage' ) && ! $ismod ))
2020-12-26 01:42:23 +08:00
permissiondenied ();
$locked = sqlesc ( $_POST [ " locked " ]);
sql_query ( " UPDATE topics SET locked= $locked WHERE id= $topicid " ) or sqlerr ( __FILE__ , __LINE__ );
header ( " Location: $_POST[returnto] " );
die ;
}
if ( $action == 'hltopic' )
{
2021-01-06 00:56:13 +08:00
$topicid = intval ( $_GET [ " topicid " ] ? ? 0 );
2020-12-26 01:42:23 +08:00
$ismod = is_forum_moderator ( $topicid , 'topic' );
2022-08-20 19:11:28 +08:00
if ( ! $topicid || ( ! user_can ( 'postmanage' ) && ! $ismod ))
2020-12-26 01:42:23 +08:00
permissiondenied ();
$color = $_POST [ " color " ];
if ( $color == 0 || get_hl_color ( $color ))
sql_query ( " UPDATE topics SET hlcolor= " . sqlesc ( $color ) . " WHERE id= " . sqlesc ( $topicid )) or sqlerr ( __FILE__ , __LINE__ );
$forumid = get_single_value ( " topics " , " forumid " , " WHERE id= " . sqlesc ( $topicid ));
$forum_last_replied_topic_row = $Cache -> get_value ( 'forum_' . $forumid . '_last_replied_topic_content' );
if ( $forum_last_replied_topic_row && $forum_last_replied_topic_row [ 'id' ] == $topicid )
$Cache -> delete_value ( 'forum_' . $forumid . '_last_replied_topic_content' );
header ( " Location: $_POST[returnto] " );
die ;
}
//-------- Action: Set sticky on/off
if ( $action == " setsticky " )
{
2021-01-06 00:56:13 +08:00
$topicid = intval ( $_POST [ " topicid " ] ? ? 0 );
2020-12-26 01:42:23 +08:00
$ismod = is_forum_moderator ( $topicid , 'topic' );
2022-08-20 19:11:28 +08:00
if ( ! $topicid || ( ! user_can ( 'postmanage' ) && ! $ismod ))
2020-12-26 01:42:23 +08:00
permissiondenied ();
$sticky = sqlesc ( $_POST [ " sticky " ]);
sql_query ( " UPDATE topics SET sticky= $sticky WHERE id= $topicid " ) or sqlerr ( __FILE__ , __LINE__ );
header ( " Location: $_POST[returnto] " );
die ;
}
//-------- Action: View forum
if ( $action == " viewforum " )
{
2021-01-06 00:56:13 +08:00
$forumid = intval ( $_GET [ " forumid " ] ? ? 0 );
2020-12-26 01:42:23 +08:00
int_check ( $forumid , true );
2021-01-06 00:56:13 +08:00
$userid = intval ( $CURUSER [ " id " ] ? ? 0 );
2020-12-26 01:42:23 +08:00
//------ Get forum name, moderators
$row = get_forum_row ( $forumid );
if ( ! $row ){
write_log ( " User " . $CURUSER [ " username " ] . " , " . $CURUSER [ " ip " ] . " is trying to visit forum that doesn't exist " , 'mod' );
stderr ( $lang_forums [ 'std_forum_error' ], $lang_forums [ 'std_forum_not_found' ]);
}
if ( get_user_class () < $row [ " minclassread " ])
permissiondenied ();
2021-05-26 21:38:39 +08:00
2020-12-26 01:42:23 +08:00
$forumname = $row [ 'name' ];
$forummoderators = get_forum_moderators ( $forumid , false );
2020-12-29 03:02:34 +08:00
$search = mysql_real_escape_string ( trim ( $_GET [ " search " ] ? ? '' ));
2020-12-26 01:42:23 +08:00
if ( $search ){
$wherea = " AND subject LIKE '% $search %' " ;
$addparam .= " &search= " . rawurlencode ( $search );
}
else {
$wherea = " " ;
$addparam = " " ;
}
$num = get_row_count ( " topics " , " WHERE forumid= " . sqlesc ( $forumid ) . $wherea );
list ( $pagertop , $pagerbottom , $limit ) = pager ( $topicsperpage , $num , " ? " . " action=viewforum&forumid= " . $forumid . $addparam . " & " );
2020-12-29 03:02:34 +08:00
if ( isset ( $_GET [ " sort " ])){
2020-12-26 01:42:23 +08:00
switch ( $_GET [ " sort " ]){
2021-05-26 21:38:39 +08:00
case 'firstpostasc' :
2020-12-26 01:42:23 +08:00
{
$orderby = " firstpost ASC " ;
break ;
}
2021-05-26 21:38:39 +08:00
case 'firstpostdesc' :
2020-12-26 01:42:23 +08:00
{
$orderby = " firstpost DESC " ;
break ;
}
case 'lastpostasc' :
{
$orderby = " lastpost ASC " ;
break ;
}
case 'lastpostdesc' :
{
$orderby = " lastpost DESC " ;
break ;
}
default :
{
$orderby = " lastpost DESC " ;
}
}
}
else
{
$orderby = " lastpost DESC " ;
}
//------ Get topics data
$topicsres = sql_query ( " SELECT * FROM topics WHERE forumid= " . sqlesc ( $forumid ) . $wherea . " ORDER BY sticky DESC, " . $orderby . " " . $limit ) or sqlerr ( __FILE__ , __LINE__ );
$numtopics = mysql_num_rows ( $topicsres );
stdhead ( $lang_forums [ 'head_forum' ] . " " . $forumname );
begin_main_frame ( " " , true );
print ( " <h1 align= \" center \" ><a class= \" faqlink \" href= \" forums.php \" > " . $SITENAME . " " . $lang_forums [ 'text_forums' ] . " </a>--><a class= \" faqlink \" href= \" " . htmlspecialchars ( " forums.php?action=viewforum&forumid= " . $forumid ) . " \" > " . $forumname . " </a></h1> \n " );
end_main_frame ();
print ( " <br /> " );
$maypost = get_user_class () >= $row [ " minclasswrite " ] && get_user_class () >= $row [ " minclasscreate " ] && $CURUSER [ " forumpost " ] == 'yes' ;
if ( ! $maypost )
print ( " <p><i> " . $lang_forums [ 'text_unpermitted_starting_new_topics' ] . " </i></p> \n " );
2021-05-26 21:38:39 +08:00
print ( " <table border= \" 0 \" class= \" main \" cellspacing= \" 0 \" cellpadding= \" 5 \" width= \" 97% \" ><tr> \n " );
2020-12-26 01:42:23 +08:00
print ( " <td class= \" embedded \" width= \" 90% \" > " );
print ( $forummoderators ? " <img class= \" forum_mod \" src= \" pic/trans.gif \" alt= \" Moderator \" title= \" " . $lang_forums [ 'col_moderator' ] . " \" > " . $forummoderators : " " );
print ( " </td><td class= \" embedded nowrap \" width= \" 1% \" > " );
if ( $maypost )
print ( " <a href= \" " . htmlspecialchars ( " ?action=newtopic&forumid= " . $forumid ) . " \" ><img class= \" f_new \" src= \" pic/trans.gif \" alt= \" New Topic \" title= \" " . $lang_forums [ 'title_new_topic' ] . " \" /></a> " );
print ( " </td> " );
print ( " </tr></table> \n " );
if ( $numtopics > 0 )
{
2021-05-26 21:38:39 +08:00
print ( " <table border= \" 1 \" cellspacing= \" 0 \" cellpadding= \" 5 \" width= \" 97% \" > " );
2020-12-26 01:42:23 +08:00
2020-12-29 03:02:34 +08:00
print ( " <tr><td class= \" colhead \" align= \" center \" width= \" 99% \" > " . $lang_forums [ 'col_topic' ] . " </td><td class= \" colhead \" align= \" center \" ><a href= \" " . htmlspecialchars ( " ?action=viewforum&forumid= " . $forumid . $addparam . " &sort= " . ( isset ( $_GET [ " sort " ]) && $_GET [ " sort " ] == 'firstpostdesc' ? " firstpostasc " : " firstpostdesc " )) . " \" title= \" " . ( isset ( $_GET [ " sort " ]) && $_GET [ " sort " ] == 'firstpostdesc' ? $lang_forums [ 'title_order_topic_asc' ] : $lang_forums [ 'title_order_topic_desc' ]) . " \" > " . $lang_forums [ 'col_author' ] . " </a></td><td class= \" colhead \" align= \" center \" > " . $lang_forums [ 'col_replies' ] . " / " . $lang_forums [ 'col_views' ] . " </td><td class= \" colhead \" align= \" center \" ><a href= \" " . htmlspecialchars ( " ?action=viewforum&forumid= " . $forumid . $addparam . " &sort= " . ( isset ( $_GET [ " sort " ]) && $_GET [ " sort " ] == 'lastpostasc' ? " lastpostdesc " : " lastpostasc " )) . " \" title= \" " . ( isset ( $_GET [ " sort " ]) && $_GET [ " sort " ] == 'lastpostasc' ? $lang_forums [ 'title_order_post_desc' ] : $lang_forums [ 'title_order_post_asc' ]) . " \" > " . $lang_forums [ 'col_last_post' ] . " </a></td> \n " );
2020-12-26 01:42:23 +08:00
print ( " </tr> \n " );
$counter = 0 ;
while ( $topicarr = mysql_fetch_assoc ( $topicsres ))
{
$topicid = $topicarr [ " id " ];
$topic_userid = $topicarr [ " userid " ];
$topic_views = $topicarr [ " views " ];
$views = number_format ( $topic_views );
$locked = $topicarr [ " locked " ] == " yes " ;
$sticky = $topicarr [ " sticky " ] == " yes " ;
$hlcolor = $topicarr [ " hlcolor " ];
//---- Get reply count
if ( ! $posts = $Cache -> get_value ( 'topic_' . $topicid . '_post_count' )){
$posts = get_row_count ( " posts " , " WHERE topicid= " . sqlesc ( $topicid ));
$Cache -> cache_value ( 'topic_' . $topicid . '_post_count' , $posts , 3600 );
}
$replies = max ( 0 , $posts - 1 );
$tpages = floor ( $posts / $postsperpage );
if ( $tpages * $postsperpage != $posts )
++ $tpages ;
if ( $tpages > 1 )
{
$topicpages = " [<img class= \" multipage \" src= \" pic/trans.gif \" alt= \" multi-page \" /> " ;
$dotted = 0 ;
$dotspace = 4 ;
$dotend = $tpages - $dotspace ;
for ( $i = 1 ; $i <= $tpages ; ++ $i ){
if ( $i > $dotspace && $i <= $dotend ) {
if ( ! $dotted )
$topicpages .= " ... " ;
$dotted = 1 ;
continue ;
}
$topicpages .= " <a href= \" " . htmlspecialchars ( " ?action=viewtopic&topicid= " . $topicid . " &page= " . ( $i - 1 )) . " \" > $i </a> " ;
}
$topicpages .= " ] " ;
}
else
$topicpages = " " ;
//---- Get userID and date of last post
$arr = get_post_row ( $topicarr [ 'lastpost' ]);
2021-01-06 00:56:13 +08:00
$lppostid = intval ( $arr [ " id " ] ? ? 0 );
$lpuserid = intval ( $arr [ " userid " ] ? ? 0 );
2020-12-26 01:42:23 +08:00
$lpusername = get_username ( $lpuserid );
$lpadded = gettime ( $arr [ " added " ], true , false );
$onmouseover = " " ;
if ( $enabletooltip_tweak == 'yes' && $CURUSER [ 'showlastpost' ] != 'no' ){
if ( $CURUSER [ 'timetype' ] != 'timealive' )
$lastposttime = $lang_forums [ 'text_at_time' ] . $arr [ " added " ];
else
$lastposttime = $lang_forums [ 'text_blank' ] . gettime ( $arr [ " added " ], true , false , true );
$lptext = format_comment ( mb_substr ( $arr [ 'body' ], 0 , 100 , " UTF-8 " ) . ( mb_strlen ( $arr [ 'body' ], " UTF-8 " ) > 100 ? " ...... " : " " ), true , false , false , true , 600 , false , false );
$lastpost_tooltip [ $counter ][ 'id' ] = " lastpost_ " . $counter ;
$lastpost_tooltip [ $counter ][ 'content' ] = $lang_forums [ 'text_last_posted_by' ] . $lpusername . $lastposttime . " <br /> " . $lptext ;
$onmouseover = " onmouseover= \" domTT_activate(this, event, 'content', document.getElementById(' " . $lastpost_tooltip [ $counter ][ 'id' ] . " '), 'trail', false,'lifetime', 5000,'styleClass','niceTitle','fadeMax', 87,'maxWidth', 400); \" " ;
}
$arr = get_post_row ( $topicarr [ 'firstpost' ]);
2021-01-06 00:56:13 +08:00
$fpuserid = intval ( $arr [ " userid " ] ? ? 0 );
2020-12-26 01:42:23 +08:00
$fpauthor = get_username ( $arr [ " userid " ]);
$subject = ( $sticky ? " <img class= \" sticky \" src= \" pic/trans.gif \" alt= \" Sticky \" title= \" " . $lang_forums [ 'title_sticky' ] . " \" /> " : " " ) . " <a href= \" " . htmlspecialchars ( " ?action=viewtopic&forumid= " . $forumid . " &topicid= " . $topicid ) . " \" " . $onmouseover . " > " . highlight_topic ( highlight ( $search , htmlspecialchars ( $topicarr [ " subject " ])), $hlcolor ) . " </a> " . $topicpages ;
$lastpostread = get_last_read_post_id ( $topicid );
if ( $lastpostread >= $lppostid )
$img = get_topic_image ( $locked ? " locked " : " read " );
else {
$img = get_topic_image ( $locked ? " lockednew " : " unread " );
if ( $lastpostread != $CURUSER [ 'last_catchup' ])
$subject .= " <a href= \" " . htmlspecialchars ( " ?action=viewtopic&forumid= " . $forumid . " &topicid= " . $topicid . " &page=p " . $lastpostread . " #pid " . $lastpostread ) . " \" title= \" " . $lang_forums [ 'title_jump_to_unread' ] . " \" ><font class= \" small new \" ><b> " . $lang_forums [ 'text_new' ] . " </b></font></a> " ;
}
2021-05-26 21:38:39 +08:00
2020-12-26 01:42:23 +08:00
$topictime = substr ( $arr [ 'added' ], 0 , 10 );
if ( strtotime ( $arr [ 'added' ]) + 86400 > TIMENOW )
$topictime = " <font class= \" new small \" > " . $topictime . " </font> " ;
else
$topictime = " <font color= \" gray \" class= \" small \" > " . $topictime . " </font> " ;
print ( " <tr><td class= \" rowfollow \" align= \" left \" ><table border= \" 0 \" cellspacing= \" 0 \" cellpadding= \" 0 \" ><tr> " .
" <td class= \" embedded \" style='padding-right: 10px'> " . $img .
" </td><td class= \" embedded \" align= \" left \" > \n " .
$subject . " </td></tr></table></td><td class= \" rowfollow \" align= \" center \" > " . get_username ( $fpuserid ) . " <br /> " . $topictime . " </td><td class= \" rowfollow \" align= \" center \" > " . $replies . " / <font color= \" gray \" > " . $views . " </font></td> \n " .
" <td class= \" rowfollow nowrap \" align= \" center \" > " . $lpadded . " <br /> " . $lpusername . " </td> \n " );
print ( " </tr> \n " );
$counter ++ ;
} // while
//print("</table>\n");
2021-05-26 21:38:39 +08:00
//print("<table border=\"0\" cellspacing=\"0\" cellpadding=\"5\" width=\"97%\">");
2020-12-26 01:42:23 +08:00
print ( " <tr><td align= \" left \" > \n " );
print ( " <form method= \" get \" action= \" forums.php \" ><b> " . $lang_forums [ 'text_fast_search' ] . " </b><input type= \" hidden \" name= \" action \" value= \" viewforum \" /><input type= \" hidden \" name= \" forumid \" value= \" " . $forumid . " \" /><input type= \" text \" style= \" width: 180px \" name= \" search \" /> <input type= \" submit \" value= \" " . $lang_forums [ 'text_go' ] . " \" /></form> " );
print ( " </td> " );
?>
< td align = " left " colspan = " 3 " >
< span id = " order " onclick = " dropmenu(this); " >< span style = " cursor: pointer; " >< b >< ? php echo $lang_forums [ 'text_order' ] ?> </b></span>
< span id = " orderlist " class = " dropmenu " style = " display: none " >< ul >
< li >< a href = " ?action=viewforum&forumid=<?php echo $forumid . $addparam ?>&sort=firstpostdesc " >< ? php echo $lang_forums [ 'text_topic_desc' ] ?> </a></li>
< li >< a href = " ?action=viewforum&forumid=<?php echo $forumid . $addparam ?>&sort=firstpostasc " >< ? php echo $lang_forums [ 'text_topic_asc' ] ?> </a></li>
< li >< a href = " ?action=viewforum&forumid=<?php echo $forumid . $addparam ?>&sort=lastpostdesc " >< ? php echo $lang_forums [ 'text_post_desc' ] ?> </a></li>
< li >< a href = " ?action=viewforum&forumid=<?php echo $forumid . $addparam ?>&sort=lastpostasc " >< ? php echo $lang_forums [ 'text_post_asc' ] ?> </a></li>
</ ul >
</ span >
</ span >
</ td >
< ? php
print ( " </tr></table> " );
print ( $pagerbottom );
if ( $enabletooltip_tweak == 'yes' && $CURUSER [ 'showlastpost' ] != 'no' )
create_tooltip_container ( $lastpost_tooltip , 400 );
} // if
else
print ( " <p> " . $lang_forums [ 'text_no_topics_found' ] . " </p> " );
stdfoot ();
die ;
}
//-------- Action: View unread posts
if ( $action == " viewunread " )
{
$userid = $CURUSER [ 'id' ];
2021-01-06 00:56:13 +08:00
$beforepostid = intval ( $_GET [ 'beforepostid' ] ? ? 0 );
2020-12-26 01:42:23 +08:00
$maxresults = 25 ;
$res = sql_query ( " SELECT id, forumid, subject, lastpost, hlcolor FROM topics WHERE lastpost > " . $CURUSER [ 'last_catchup' ] . ( $beforepostid ? " AND lastpost < " . sqlesc ( $beforepostid ) : " " ) . " ORDER BY lastpost DESC LIMIT 100 " ) or sqlerr ( __FILE__ , __LINE__ );
stdhead ( $lang_forums [ 'head_view_unread' ]);
print ( " <h1 align= \" center \" ><a class= \" faqlink \" href= \" forums.php \" > " . $SITENAME . " " . $lang_forums [ 'text_forums' ] . " </a>--> " . $lang_forums [ 'text_topics_with_unread_posts' ] . " </h1> " );
$n = 0 ;
$uc = get_user_class ();
while ( $arr = mysql_fetch_assoc ( $res ))
{
$topiclastpost = $arr [ 'lastpost' ];
$topicid = $arr [ 'id' ];
//---- Check if post is read
$lastpostread = get_last_read_post_id ( $topicid );
if ( $lastpostread >= $topiclastpost )
continue ;
$forumid = $arr [ 'forumid' ];
//---- Check access & get forum name
$a = get_forum_row ( $forumid );
if ( $uc < $a [ 'minclassread' ])
continue ;
++ $n ;
if ( $n > $maxresults )
break ;
$forumname = $a [ 'name' ];
if ( $n == 1 )
{
print ( " <table border= \" 1 \" cellspacing= \" 0 \" cellpadding= \" 5 \" > \n " );
print ( " <tr><td class= \" colhead \" align= \" left \" > " . $lang_forums [ 'col_topic' ] . " </td><td class= \" colhead \" align= \" left \" > " . $lang_forums [ 'col_forum' ] . " </td></tr> \n " );
}
print ( " <tr><td class= \" rowfollow \" align= \" left \" ><table border= \" 0 \" cellspacing= \" 0 \" cellpadding= \" 0 \" ><tr><td class= \" embedded \" style='padding-right: 10px'> " .
get_topic_image ( " unread " ) . " </td><td class= \" embedded \" > " .
" <a href= \" " . htmlspecialchars ( " ?action=viewtopic&topicid= " . $topicid . ( $lastpostread > 0 && $lastpostread != $CURUSER [ 'last_catchup' ] ? " &page=p " . $lastpostread . " #pid " . $lastpostread : " " )) . " \" > " . highlight_topic ( htmlspecialchars ( $arr [ " subject " ]), $arr [ " hlcolor " ]) .
" </a></td></tr></table></td><td class= \" rowfollow \" align= \" left \" ><a href= \" " . htmlspecialchars ( " ?action=viewforum&forumid= " . $forumid ) . " \" ><b> " . $forumname . " </b></a></td></tr> \n " );
}
if ( $n > 0 )
{
print ( " </table> \n " );
print ( " <table border= \" 0 \" class= \" main \" cellspacing= \" 0 \" cellpadding= \" 5 \" width= \" 1% \" ><tr><td class= \" embedded \" ><form method= \" get \" action= \" ? \" ><input type= \" hidden \" name= \" catchup \" value= \" 1 \" /><input type= \" submit \" value= \" " . $lang_forums [ 'text_catch_up' ] . " \" class= \" btn \" /></form></td> " );
if ( $n > $maxresults ){
print ( " <td class= \" embedded \" ><form method= \" get \" action= \" ? \" ><input type= \" hidden \" name= \" action \" value= \" viewunread \" /><input type= \" hidden \" name= \" beforepostid \" value= \" " . $topiclastpost . " \" /><input type= \" submit \" value= \" " . $lang_forums [ 'submit_show_more' ] . " \" class= \" btn \" /></form></td> " );
}
print ( " </tr></table> " );
}
else
print ( " <p> " . $lang_forums [ 'text_nothing_found' ] . " </p> " );
stdfoot ();
die ;
}
if ( $action == " search " )
{
stdhead ( $lang_forums [ 'head_forum_search' ]);
unset ( $error );
$error = true ;
$found = " " ;
$keywords = htmlspecialchars ( trim ( $_GET [ " keywords " ]));
if ( $keywords != " " )
{
$extraSql = " LIKE '% " . mysql_real_escape_string ( $keywords ) . " %' " ;
$res = sql_query ( " SELECT COUNT(posts.id) FROM posts LEFT JOIN topics ON posts.topicid = topics.id LEFT JOIN forums ON topics.forumid = forums.id WHERE forums.minclassread <= " . sqlesc ( get_user_class ()) . " AND ((topics.subject $extraSql AND posts.id=topics.firstpost) OR posts.body $extraSql ) " ) or sqlerr ( __FILE__ , __LINE__ );
$arr = mysql_fetch_row ( $res );
2021-01-06 00:56:13 +08:00
$hits = intval ( $arr [ 0 ] ? ? 0 );
2020-12-26 01:42:23 +08:00
if ( $hits ){
$error = false ;
$found = " [<b><font class= \" striking \" > " . $lang_forums [ 'text_found' ] . $hits . $lang_forums [ 'text_num_posts' ] . " </font></b>] " ;
}
}
?>
< style type = " text/css " >
. search {
background - image : url ( pic / search . gif );
background - repeat : no - repeat ;
width : 579 px ;
height : 95 px ;
margin : 5 px 0 5 px 0 ;
text - align : left ;
}
. search_title {
color : #0062AE;
background - color : #DAF3FB;
font - size : 12 px ;
font - weight : bold ;
text - align : left ;
padding : 7 px 0 0 15 px ;
}
. search_table {
border - collapse : collapse ;
border : none ;
2021-05-26 21:38:39 +08:00
background - color : #ffffff;
2020-12-26 01:42:23 +08:00
}
</ style >
< div class = " search " >
< div class = " search_title " >< ? php echo $lang_forums [ 'text_search_on_forum' ] ?> <?php echo ($error && $keywords != "" ? "[<b><font color=striking> ".$lang_forums['text_nothing_found']."</font></b> ]" : $found)?></div>
< div style = " margin-left: 53px; margin-top: 13px; " >
< form method = " get " action = " forums.php " id = " search_form " style = " margin: 0pt; padding: 0pt; font-family: Tahoma,Arial,Helvetica,sans-serif; font-size: 11px; " >
< input type = " hidden " name = " action " value = " search " />
< table border = " 0 " cellpadding = " 0 " cellspacing = " 0 " width = " 512 " class = " search_table " >
< tbody >
< tr >
< td style = " padding-bottom: 3px; border: 0; " valign = " top " >< ? php echo $lang_forums [ 'text_by_keyword' ] ?> </td>
</ tr >
< tr >
2021-05-26 21:38:39 +08:00
< td style = " padding-bottom: 3px; border: 0; " valign = " top " >
2020-12-26 01:42:23 +08:00
< input name = " keywords " type = " text " value = " <?php echo $keywords ?> " style = " width: 400px; " /></ td >
< td style = " padding-bottom: 3px; border: 0; " valign = " top " >< input name = " image " type = " image " style = " vertical-align: middle; padding-bottom: 0px; margin-left: 0px; " src = " <?php echo get_forum_pic_folder()?>/search_button.gif " alt = " Search " /></ td >
</ tr >
</ tbody >
</ table >
</ form >
</ div >
</ div >
< ? php
if ( ! $error )
{
$perpage = $topicsperpage ;
list ( $pagertop , $pagerbottom , $limit ) = pager ( $perpage , $hits , " forums.php?action=search&keywords= " . rawurlencode ( $keywords ) . " & " );
$res = sql_query ( " SELECT posts.id, posts.topicid, posts.userid, posts.added, topics.subject, topics.hlcolor, forums.id AS forumid, forums.name AS forumname FROM posts LEFT JOIN topics ON posts.topicid = topics.id LEFT JOIN forums ON topics.forumid = forums.id WHERE forums.minclassread <= " . sqlesc ( get_user_class ()) . " AND ((topics.subject $extraSql AND posts.id=topics.firstpost) OR posts.body $extraSql ) ORDER BY posts.id DESC $limit " ) or sqlerr ( __FILE__ , __LINE__ );
print ( $pagertop );
2021-05-26 21:38:39 +08:00
print ( " <table border= \" 1 \" cellspacing= \" 0 \" cellpadding= \" 5 \" width= \" 97% \" > \n " );
2020-12-26 01:42:23 +08:00
print ( " <tr><td class= \" colhead \" align= \" center \" > " . $lang_forums [ 'col_post' ] . " </td><td class= \" colhead \" align= \" center \" width= \" 70% \" > " . $lang_forums [ 'col_topic' ] . " </td><td class= \" colhead \" align= \" left \" > " . $lang_forums [ 'col_forum' ] . " </td><td class= \" colhead \" align= \" left \" > " . $lang_forums [ 'col_posted_by' ] . " </td></tr> \n " );
while ( $post = mysql_fetch_array ( $res ))
{
2021-06-08 20:43:47 +08:00
print ( " <tr><td class= \" rowfollow \" align= \" center \" width= \" 1% \" > " . $post [ 'id' ] . " </td><td class= \" rowfollow \" align= \" left \" ><a href= \" " . htmlspecialchars ( " ?action=viewtopic&topicid= " . $post [ 'topicid' ] . " &highlight= " . rawurlencode ( $keywords ) . " &page=p " . $post [ 'id' ] . " #pid " . $post [ 'id' ]) . " \" > " . highlight_topic ( highlight ( $keywords , htmlspecialchars ( $post [ 'subject' ])), $post [ 'hlcolor' ]) . " </a></td><td class= \" rowfollow nowrap \" align= \" left \" ><a href= \" " . htmlspecialchars ( " ?action=viewforum&forumid= " . $post [ 'forumid' ]) . " \" ><b> " . htmlspecialchars ( $post [ " forumname " ]) . " </b></a></td><td class= \" rowfollow nowrap \" align= \" left \" > " . gettime ( $post [ 'added' ], true , false ) . " | " . get_username ( $post [ 'userid' ]) . " </td></tr> \n " );
2020-12-26 01:42:23 +08:00
}
print ( " </table> \n " );
print ( $pagerbottom );
}
stdfoot ();
die ;
}
2020-12-28 20:52:54 +08:00
if ( isset ( $_GET [ " catchup " ]) && $_GET [ " catchup " ] == 1 ){
2020-12-26 01:42:23 +08:00
catch_up ();
}
//-------- Handle unknown action
if ( $action != " " )
stderr ( $lang_forums [ 'std_forum_error' ], $lang_forums [ 'std_unknown_action' ]);
//-------- Default action: View forums
//-------- Get forums
if ( $CURUSER )
$USERUPDATESET [] = " forum_access = " . sqlesc ( date ( " Y-m-d H:i:s " ));
stdhead ( $lang_forums [ 'head_forums' ]);
begin_main_frame ();
print ( " <h1 align= \" center \" > " . $SITENAME . " " . $lang_forums [ 'text_forums' ] . " </h1> " );
2022-08-20 19:11:28 +08:00
print ( " <p align= \" center \" ><a href= \" ?action=search \" ><b> " . $lang_forums [ 'text_search' ] . " </b></a> | <a href= \" ?action=viewunread \" ><b> " . $lang_forums [ 'text_view_unread' ] . " </b></a> | <a href= \" ?catchup=1 \" ><b> " . $lang_forums [ 'text_catch_up' ] . " </b></a> " . ( user_can ( 'forummanage' ) ? " | <a href= \" forummanage.php \" ><b> " . $lang_forums [ 'text_forum_manager' ] . " </b></a> " : " " ) . " </p> " );
2020-12-26 01:42:23 +08:00
print ( " <table border= \" 1 \" cellspacing= \" 0 \" cellpadding= \" 5 \" width= \" 100% \" > \n " );
if ( ! $overforums = $Cache -> get_value ( 'overforums_list' )){
$overforums = array ();
$res = sql_query ( " SELECT * FROM overforums ORDER BY sort ASC " ) or sqlerr ( __FILE__ , __LINE__ );
while ( $row = mysql_fetch_array ( $res ))
$overforums [] = $row ;
$Cache -> cache_value ( 'overforums_list' , $overforums , 86400 );
}
$count = 0 ;
if ( $Advertisement -> enable_ad ())
$interoverforumsad = $Advertisement -> get_ad ( 'interoverforums' );
foreach ( $overforums as $a )
{
if ( get_user_class () < $a [ " minclassview " ])
continue ;
if ( $count >= 1 )
if ( $Advertisement -> enable_ad ()){
2020-12-29 03:02:34 +08:00
if ( ! empty ( $interoverforumsad [ $count - 1 ]))
2022-05-07 22:11:24 +08:00
echo " <tr><td colspan= \" 5 \" align= \" center \" id= \" \" > " . $interoverforumsad [ $count - 1 ] . " </td></tr> " ;
2020-12-26 01:42:23 +08:00
}
$forid = $a [ " id " ];
$overforumname = $a [ " name " ];
print ( " <tr><td align= \" left \" class= \" colhead \" width= \" 99% \" > " . htmlspecialchars ( $overforumname ) . " </td><td align= \" center \" class= \" colhead \" > " . $lang_forums [ 'col_topics' ] . " </td> " .
" <td align= \" center \" class= \" colhead \" > " . $lang_forums [ 'col_posts' ] . " </td> " .
" <td align= \" left \" class= \" colhead \" > " . $lang_forums [ 'col_last_post' ] . " </td><td class= \" colhead \" align= \" left \" > " . $lang_forums [ 'col_moderator' ] . " </td></tr> \n " );
$forums = get_forum_row ();
foreach ( $forums as $forums_arr )
{
if ( $forums_arr [ 'forid' ] != $forid )
continue ;
if ( get_user_class () < $forums_arr [ " minclassread " ])
continue ;
$forumid = $forums_arr [ " id " ];
$forumname = htmlspecialchars ( $forums_arr [ " name " ]);
$forumdescription = htmlspecialchars ( $forums_arr [ " description " ]);
$forummoderators = get_forum_moderators ( $forums_arr [ 'id' ], false );
if ( ! $forummoderators )
$forummoderators = " <a href= \" contactstaff.php \" ><i> " . $lang_forums [ 'text_apply_now' ] . " </i></a> " ;
$topiccount = number_format ( $forums_arr [ " topiccount " ]);
$postcount = number_format ( $forums_arr [ " postcount " ]);
// Find last post ID
//Returns the ID of the last post of a forum
if ( ! $arr = $Cache -> get_value ( 'forum_' . $forumid . '_last_replied_topic_content' )){
$res = sql_query ( " SELECT * FROM topics WHERE forumid= " . sqlesc ( $forumid ) . " ORDER BY lastpost DESC LIMIT 1 " ) or sqlerr ( __FILE__ , __LINE__ );
$arr = mysql_fetch_array ( $res );
$Cache -> cache_value ( 'forum_' . $forumid . '_last_replied_topic_content' , $arr , 900 );
}
if ( $arr )
{
$lastpostid = $arr [ 'lastpost' ];
// Get last post info
$post_arr = get_post_row ( $lastpostid );
$lastposterid = $post_arr [ " userid " ];
$lastpostdate = gettime ( $post_arr [ " added " ], true , false );
$lasttopicid = $arr [ 'id' ];
$hlcolor = $arr [ 'hlcolor' ];
$lasttopicdissubject = $lasttopicsubject = $arr [ 'subject' ];
$max_length_of_topic_subject = 35 ;
$count_dispname = mb_strlen ( $lasttopicdissubject , " UTF-8 " );
if ( $count_dispname > $max_length_of_topic_subject )
$lasttopicdissubject = mb_substr ( $lasttopicdissubject , 0 , $max_length_of_topic_subject - 2 , " UTF-8 " ) . " .. " ;
$lasttopic = highlight_topic ( htmlspecialchars ( $lasttopicdissubject ), $hlcolor );
$lastpost = " <a href= \" " . htmlspecialchars ( " ?action=viewtopic&topicid= " . $lasttopicid . " &page=last#last " ) . " \" title= \" " . htmlspecialchars ( $lasttopicsubject ) . " \" > " . $lasttopic . " </a><br /> " . $lastpostdate . " | " . get_username ( $lastposterid );
$lastreadpost = get_last_read_post_id ( $lasttopicid );
if ( $lastreadpost >= $lastpostid )
$img = get_topic_image ( " read " );
else
$img = get_topic_image ( " unread " );
}
else
{
$lastpost = " N/A " ;
$img = get_topic_image ( " read " );
}
$posttodaycount = $Cache -> get_value ( 'forum_' . $forumid . '_post_' . $today_date . '_count' );
if ( $posttodaycount == " " ){
$res3 = sql_query ( " SELECT COUNT(posts.id) FROM posts LEFT JOIN topics ON posts.topicid = topics.id WHERE posts.added > " . sqlesc ( date ( " Y-m-d " )) . " AND topics.forumid= " . sqlesc ( $forumid )) or sqlerr ( __FILE__ , __LINE__ );
$row3 = mysql_fetch_row ( $res3 );
$posttodaycount = $row3 [ 0 ];
$Cache -> cache_value ( 'forum_' . $forumid . '_post_' . $today_date . '_count' , $posttodaycount , 1800 );
}
if ( $posttodaycount > 0 )
$posttoday = " ( " . $lang_forums [ 'text_today' ] . " <b><font class= \" new \" > " . $posttodaycount . " </font></b>) " ;
else $posttoday = " " ;
print ( " <tr><td class= \" rowfollow \" align= \" left \" ><table border= \" 0 \" cellspacing= \" 0 \" cellpadding= \" 0 \" ><tr><td class= \" embedded \" style='padding-right: 10px'> " . $img . " </td><td class= \" embedded \" ><a href= \" " . htmlspecialchars ( " ?action=viewforum&forumid= " . $forumid ) . " \" ><font class= \" big \" ><b> " . $forumname . " </b></font></a> " . $posttoday .
" <br /> " . $forumdescription . " </td></tr></table></td><td class= \" rowfollow \" align= \" center \" width= \" 1% \" > " . $topiccount . " </td><td class= \" rowfollow \" align= \" center \" width= \" 1% \" > " . $postcount . " </td> " .
" <td class= \" rowfollow nowrap \" align= \" left \" > " . $lastpost . " </td><td class= \" rowfollow \" align= \" left \" > " . $forummoderators . " </td></tr> \n " );
}
$count ++ ;
}
// End Table Mod
print ( " </table> " );
if ( $showforumstats_main == " yes " )
forum_stats ();
end_main_frame ();
stdfoot ();
?>