2001-02-17 08:37:32 +00:00
< ? php
2003-08-29 18:06:56 +00:00
// -------------------------------------------------------------
//
// $Id$
//
// FILENAME : posting.php
// STARTED : Sat Feb 17, 2001
// COPYRIGHT : <20> 2001, 2003 phpBB Group
// WWW : http://www.phpbb.com/
// LICENCE : GPL vs2.0 [ see /docs/COPYING ]
//
// -------------------------------------------------------------
2001-08-30 22:20:23 +00:00
2002-03-18 13:35:43 +00:00
define ( 'IN_PHPBB' , true );
2002-03-31 00:06:34 +00:00
$phpbb_root_path = './' ;
2001-07-13 16:14:37 +00:00
include ( $phpbb_root_path . 'extension.inc' );
include ( $phpbb_root_path . 'common.' . $phpEx );
2003-08-30 12:21:31 +00:00
include ( $phpbb_root_path . 'includes/functions_admin.' . $phpEx );
2002-07-14 14:45:26 +00:00
include ( $phpbb_root_path . 'includes/functions_posting.' . $phpEx );
2003-02-27 23:37:02 +00:00
include ( $phpbb_root_path . 'includes/message_parser.' . $phpEx );
2001-04-17 07:14:50 +00:00
2003-06-23 14:00:57 +00:00
2002-10-28 00:08:18 +00:00
// Start session management
$user -> start ();
$auth -> acl ( $user -> data );
2003-06-23 14:00:57 +00:00
2003-01-22 16:35:06 +00:00
// Grab only parameters needed here
2003-06-17 19:34:17 +00:00
$mode = ( ! empty ( $_REQUEST [ 'mode' ])) ? strval ( $_REQUEST [ 'mode' ]) : '' ;
$post_id = ( ! empty ( $_REQUEST [ 'p' ])) ? intval ( $_REQUEST [ 'p' ]) : false ;
$topic_id = ( ! empty ( $_REQUEST [ 't' ])) ? intval ( $_REQUEST [ 't' ]) : false ;
$forum_id = ( ! empty ( $_REQUEST [ 'f' ])) ? intval ( $_REQUEST [ 'f' ]) : false ;
$lastclick = ( isset ( $_POST [ 'lastclick' ])) ? intval ( $_POST [ 'lastclick' ]) : 0 ;
$submit = ( isset ( $_POST [ 'post' ])) ? true : false ;
$preview = ( isset ( $_POST [ 'preview' ])) ? true : false ;
$save = ( isset ( $_POST [ 'save' ])) ? true : false ;
$cancel = ( isset ( $_POST [ 'cancel' ])) ? true : false ;
$confirm = ( isset ( $_POST [ 'confirm' ])) ? true : false ;
$delete = ( isset ( $_POST [ 'delete' ])) ? true : false ;
2003-08-30 12:21:31 +00:00
$refresh = isset ( $_POST [ 'add_file' ]) || isset ( $_POST [ 'delete_file' ]) || isset ( $_POST [ 'edit_comment' ]) || isset ( $_POST [ 'cancel_unglobalise' ]);
2003-06-17 19:34:17 +00:00
if ( $delete && ! $preview && ! $refresh && $submit )
2003-03-10 19:39:50 +00:00
{
$mode = 'delete' ;
}
2003-02-26 19:53:10 +00:00
2003-06-24 16:46:30 +00:00
$error = array ();
2002-10-20 19:19:07 +00:00
// Was cancel pressed? If so then redirect to the appropriate page
2003-05-25 14:32:20 +00:00
if ( $cancel || time () - $lastclick < 2 )
2001-09-06 00:29:07 +00:00
{
2003-06-17 19:34:17 +00:00
$redirect = ( $post_id ) ? " viewtopic. $phpEx $SID &p= $post_id # $post_id " : (( $topic_id ) ? " viewtopic. $phpEx $SID &t= $topic_id " : (( $forum_id ) ? " viewforum. $phpEx $SID &f= $forum_id " : " index. $phpEx $SID " ));
2002-10-20 19:19:07 +00:00
redirect ( $redirect );
2001-09-06 00:29:07 +00:00
}
2003-08-30 12:21:31 +00:00
if ( in_array ( $mode , array ( 'post' , 'reply' , 'quote' , 'edit' , 'delete' , 'topicreview' )) && ! $forum_id )
{
trigger_error ( $user -> lang [ 'NO_FORUM' ]);
}
2002-10-28 00:08:18 +00:00
// What is all this following SQL for? Well, we need to know
// some basic information in all cases before we do anything.
2003-01-22 16:35:06 +00:00
switch ( $mode )
2002-02-18 12:34:38 +00:00
{
2002-10-28 00:08:18 +00:00
case 'post' :
2003-06-17 19:34:17 +00:00
$sql = ' SELECT *
FROM ' . FORUMS_TABLE . "
WHERE forum_id = $forum_id " ;
2002-10-04 13:09:10 +00:00
break ;
2002-10-30 00:57:27 +00:00
2002-10-04 13:09:10 +00:00
case 'reply' :
2003-02-26 13:17:45 +00:00
if ( ! $topic_id )
2002-03-21 01:03:47 +00:00
{
2003-02-26 00:37:43 +00:00
trigger_error ( $user -> lang [ 'NO_TOPIC' ]);
2002-03-21 01:03:47 +00:00
}
2003-06-17 19:34:17 +00:00
$sql = ' SELECT t .* , f .*
FROM ' . TOPICS_TABLE . ' t , ' . FORUMS_TABLE . " f
WHERE t . topic_id = $topic_id
2003-07-07 23:43:57 +00:00
AND ( f . forum_id = t . forum_id
OR f . forum_id = $forum_id ) " ;
2003-02-27 23:37:02 +00:00
break ;
2002-10-04 13:09:10 +00:00
case 'quote' :
2002-10-28 00:08:18 +00:00
case 'edit' :
2002-10-04 13:09:10 +00:00
case 'delete' :
2003-02-26 13:17:45 +00:00
if ( ! $post_id )
2002-10-04 13:09:10 +00:00
{
2003-02-26 00:37:43 +00:00
trigger_error ( $user -> lang [ 'NO_POST' ]);
2002-10-04 13:09:10 +00:00
}
2001-09-06 00:29:07 +00:00
2003-06-24 16:46:30 +00:00
$sql = ' SELECT p .* , t .* , f .* , u . username , u . user_sig , u . user_sig_bbcode_uid , u . user_sig_bbcode_bitfield
2003-06-17 19:34:17 +00:00
FROM ' . POSTS_TABLE . ' p , ' . TOPICS_TABLE . ' t , ' . FORUMS_TABLE . ' f , ' . USERS_TABLE . " u
WHERE p . post_id = $post_id
2002-10-04 13:09:10 +00:00
AND t . topic_id = p . topic_id
2003-02-28 12:57:10 +00:00
AND u . user_id = p . poster_id
2003-07-07 23:43:57 +00:00
AND ( f . forum_id = t . forum_id
OR f . forum_id = $forum_id ) " ;
2003-02-28 12:57:10 +00:00
break ;
case 'topicreview' :
if ( ! $topic_id )
{
trigger_error ( $user -> lang [ 'NO_TOPIC' ]);
}
2003-06-23 14:00:57 +00:00
topic_review ( $topic_id , $forum_id , false );
2002-10-30 18:59:09 +00:00
break ;
case 'smilies' :
generate_smilies ( 'window' );
2002-10-04 13:09:10 +00:00
break ;
2001-09-06 00:29:07 +00:00
2002-10-04 13:09:10 +00:00
default :
2003-06-24 16:46:30 +00:00
$sql = '' ;
2003-02-26 00:37:43 +00:00
trigger_error ( $user -> lang [ 'NO_MODE' ]);
2002-02-18 12:34:38 +00:00
}
2001-07-06 01:09:42 +00:00
2002-10-30 00:57:27 +00:00
if ( $sql != '' )
2002-10-28 00:08:18 +00:00
{
$result = $db -> sql_query ( $sql );
2003-01-22 16:35:06 +00:00
2003-03-12 16:34:40 +00:00
$row = $db -> sql_fetchrow ( $result );
2002-10-28 00:08:18 +00:00
$db -> sql_freeresult ( $result );
2003-08-30 12:21:31 +00:00
extract ( $row );
2003-02-27 23:37:02 +00:00
2003-08-30 12:21:31 +00:00
$quote_username = ( ! empty ( $username )) ? $username : (( isset ( $post_username )) ? $post_username : '' );
2003-04-23 22:00:32 +00:00
2003-08-30 12:21:31 +00:00
$forum_id = ( int ) $forum_id ;
$topic_id = ( int ) $topic_id ;
$post_id = ( int ) $post_id ;
2003-03-12 16:34:40 +00:00
2003-08-30 12:21:31 +00:00
$post_edit_locked = ( int ) $post_edit_locked ;
2003-05-08 01:14:14 +00:00
2003-08-30 12:21:31 +00:00
$user -> setup ( false , $forum_style );
if ( $forum_password )
2003-05-03 23:58:45 +00:00
{
login_forum_box ( $row );
}
2003-06-17 19:34:17 +00:00
2003-08-30 12:21:31 +00:00
$post_subject = ( in_array ( $mode , array ( 'quote' , 'edit' , 'delete' ))) ? $post_subject : $topic_title ;
2003-03-12 16:34:40 +00:00
2003-06-23 14:00:57 +00:00
2003-03-12 16:34:40 +00:00
$poll_length = ( $poll_length ) ? $poll_length / 3600 : $poll_length ;
2003-03-10 19:39:50 +00:00
$poll_options = array ();
// Get Poll Data
if ( $poll_start )
{
2003-06-17 19:34:17 +00:00
$sql = ' SELECT poll_option_text
FROM ' . POLL_OPTIONS_TABLE . "
WHERE topic_id = $topic_id
2003-03-20 13:21:58 +00:00
ORDER BY poll_option_id " ;
2003-03-10 19:39:50 +00:00
$result = $db -> sql_query ( $sql );
while ( $row = $db -> sql_fetchrow ( $result ))
{
$poll_options [] = trim ( $row [ 'poll_option_text' ]);
}
$db -> sql_freeresult ( $result );
}
2003-02-27 23:37:02 +00:00
2003-06-23 14:00:57 +00:00
$message_parser = new parse_message ( 0 ); // <- TODO: add constant (MSG_POST/MSG_PM)
2003-05-25 14:32:20 +00:00
$message_parser -> filename_data [ 'filecomment' ] = ( isset ( $_POST [ 'filecomment' ])) ? trim ( strip_tags ( $_POST [ 'filecomment' ])) : '' ;
$message_parser -> filename_data [ 'filename' ] = ( $_FILES [ 'fileupload' ][ 'name' ] != 'none' ) ? trim ( $_FILES [ 'fileupload' ][ 'name' ]) : '' ;
2003-03-22 15:48:46 +00:00
// Get Attachment Data
2003-05-01 18:24:18 +00:00
$message_parser -> attachment_data = ( isset ( $_POST [ 'attachment_data' ])) ? $_POST [ 'attachment_data' ] : array ();
2003-08-29 18:06:56 +00:00
// Make sure we do not add slashes twice...
foreach ( $message_parser -> attachment_data as $pos => $var )
{
$message_parser -> attachment_data [ $pos ][ 'comment' ] = stripslashes ( $message_parser -> attachment_data [ $pos ][ 'comment' ]);
}
2003-05-02 15:50:11 +00:00
if ( $post_attachment && ! $submit && ! $refresh && ! $preview && $mode == 'edit' )
2003-03-22 15:48:46 +00:00
{
2003-05-01 18:24:18 +00:00
$sql = ' SELECT d .*
2003-06-17 19:34:17 +00:00
FROM ' . ATTACHMENTS_TABLE . ' a , ' . ATTACHMENTS_DESC_TABLE . " d
WHERE a . post_id = $post_id
2003-03-22 15:48:46 +00:00
AND a . attach_id = d . attach_id
2003-06-17 19:34:17 +00:00
ORDER BY d . filetime " . ((! $config['display_order'] ) ? 'DESC' : 'ASC');
2003-03-22 15:48:46 +00:00
$result = $db -> sql_query ( $sql );
2003-05-01 18:24:18 +00:00
$message_parser -> attachment_data = array_merge ( $message_parser -> attachment_data , $db -> sql_fetchrowset ( $result ));
2003-03-22 15:48:46 +00:00
$db -> sql_freeresult ( $result );
}
2003-06-23 14:00:57 +00:00
2003-05-02 15:50:11 +00:00
if ( $poster_id == ANONYMOUS || ! $poster_id )
2003-02-28 12:57:10 +00:00
{
2003-08-30 12:21:31 +00:00
$username = ( in_array ( $mode , array ( 'quote' , 'edit' , 'delete' ))) ? trim ( $post_username ) : '' ;
2003-02-28 12:57:10 +00:00
}
else
{
2003-08-30 12:21:31 +00:00
$username = ( in_array ( $mode , array ( 'quote' , 'edit' , 'delete' ))) ? trim ( $username ) : '' ;
2003-02-28 12:57:10 +00:00
}
2002-10-30 00:57:27 +00:00
2003-03-12 16:34:40 +00:00
$enable_urls = $enable_magic_url ;
2003-06-23 14:00:57 +00:00
2003-08-30 12:21:31 +00:00
if ( ! in_array ( $mode , array ( 'quote' , 'edit' , 'delete' )))
2003-03-12 16:34:40 +00:00
{
2003-06-23 14:00:57 +00:00
$enable_sig = ( $config [ 'allow_sig' ] && $user -> data [ 'user_attachsig' ]) ? true : false ;
$enable_smilies = ( $config [ 'allow_smilies' ] && $user -> data [ 'user_allowsmile' ]) ? true : false ;
$enable_bbcode = ( $config [ 'allow_bbcode' ] && $user -> data [ 'user_allowbbcode' ]) ? true : false ;
2003-06-17 19:34:17 +00:00
$enable_urls = true ;
2003-03-12 16:34:40 +00:00
}
2003-03-02 13:32:53 +00:00
$enable_magic_url = false ;
2003-02-28 12:57:10 +00:00
}
2003-02-27 23:37:02 +00:00
2003-06-23 14:00:57 +00:00
2002-10-30 00:57:27 +00:00
// Notify user checkbox
2003-01-22 16:35:06 +00:00
if ( $mode != 'post' && $user -> data [ 'user_id' ] != ANONYMOUS )
2002-10-30 00:57:27 +00:00
{
2003-06-17 19:34:17 +00:00
$sql = ' SELECT topic_id
FROM ' . TOPICS_WATCH_TABLE . '
WHERE topic_id = ' . $topic_id . '
AND user_id = ' . $user->data[' user_id ' ];
2002-10-30 00:57:27 +00:00
$result = $db -> sql_query ( $sql );
2003-06-06 19:05:21 +00:00
$notify_set = ( $db -> sql_fetchrow ( $result )) ? 1 : 0 ;
2002-10-30 00:57:27 +00:00
$db -> sql_freeresult ( $result );
}
2003-06-06 19:05:21 +00:00
else
{
$notify_set = - 1 ;
}
2002-10-30 00:57:27 +00:00
2003-06-23 14:00:57 +00:00
2003-05-02 15:50:11 +00:00
if ( ! $auth -> acl_get ( 'f_' . $mode , $forum_id ) && $forum_type == FORUM_POST )
2002-10-20 19:19:07 +00:00
{
2003-02-26 00:37:43 +00:00
trigger_error ( $user -> lang [ 'USER_CANNOT_' . strtoupper ( $mode )]);
2002-10-28 00:08:18 +00:00
}
2001-05-27 03:11:27 +00:00
2003-06-23 14:00:57 +00:00
2002-11-01 12:23:08 +00:00
// Forum/Topic locked?
2003-06-17 19:34:17 +00:00
if (( $forum_status == ITEM_LOCKED || $topic_status == ITEM_LOCKED ) && ! $auth -> acl_get ( 'm_edit' , $forum_id ))
2002-11-01 12:23:08 +00:00
{
2003-02-27 23:37:02 +00:00
$message = ( $forum_status == ITEM_LOCKED ) ? 'FORUM_LOCKED' : 'TOPIC_LOCKED' ;
2002-11-01 12:23:08 +00:00
trigger_error ( $user -> lang [ $message ]);
}
2003-06-23 14:00:57 +00:00
2002-10-30 00:57:27 +00:00
// Can we edit this post?
2003-06-17 19:34:17 +00:00
if (( $mode == 'edit' || $mode == 'delete' ) && ! $auth -> acl_get ( 'm_edit' , $forum_id ) && $config [ 'edit_time' ] && $post_time < time () - $config [ 'edit_time' ])
2002-10-28 00:08:18 +00:00
{
2003-02-26 00:37:43 +00:00
trigger_error ( $user -> lang [ 'CANNOT_EDIT_TIME' ]);
2002-10-04 13:09:10 +00:00
}
2001-05-26 00:25:50 +00:00
2003-06-23 14:00:57 +00:00
2003-02-26 19:53:10 +00:00
// Do we want to edit our post ?
2003-06-17 19:34:17 +00:00
if ( $mode == 'edit' && ! $auth -> acl_get ( 'm_edit' , $forum_id ) && $user -> data [ 'user_id' ] != $poster_id )
2003-02-26 19:53:10 +00:00
{
2003-02-27 23:37:02 +00:00
trigger_error ( $user -> lang [ 'USER_CANNOT_EDIT' ]);
2003-02-26 19:53:10 +00:00
}
2003-06-23 14:00:57 +00:00
2003-04-12 14:30:21 +00:00
// Is edit posting locked ?
2003-05-02 15:50:11 +00:00
if ( $mode == 'edit' && $post_edit_locked && ! $auth -> acl_get ( 'm_' , $forum_id ))
2003-04-12 14:30:21 +00:00
{
trigger_error ( $user -> lang [ 'CANNOT_EDIT_POST_LOCKED' ]);
}
2003-06-23 14:00:57 +00:00
2003-04-16 21:16:57 +00:00
if ( $mode == 'edit' )
{
$message_parser -> bbcode_uid = $row [ 'bbcode_uid' ];
}
2003-06-23 14:00:57 +00:00
2003-03-02 13:32:53 +00:00
// Delete triggered ?
2003-06-17 19:34:17 +00:00
if ( $mode == 'delete' && (( $poster_id == $user -> data [ 'user_id' ] && $user -> data [ 'user_id' ] != ANONYMOUS && $auth -> acl_get ( 'f_delete' , $forum_id ) && $post_id == $topic_last_post_id ) || $auth -> acl_get ( 'm_delete' , $forum_id )))
2003-03-02 13:32:53 +00:00
{
// Do we need to confirm ?
if ( $confirm )
{
$post_data = array (
2003-06-17 19:34:17 +00:00
'topic_first_post_id' => $topic_first_post_id ,
'topic_last_post_id' => $topic_last_post_id ,
'user_id' => $poster_id
2003-03-02 13:32:53 +00:00
);
2003-04-18 13:07:19 +00:00
$search = new fulltext_search ();
2003-04-19 10:28:37 +00:00
$topic_sql = array ();
2003-05-05 22:48:17 +00:00
$forum_update_sql = $user_update_sql = '' ;
2003-04-19 10:28:37 +00:00
$topic_update_sql = 'topic_replies = topic_replies - 1, topic_replies_real = topic_replies_real - 1' ;
2003-04-18 13:07:19 +00:00
// User tries to delete the post twice ? Exit... we do not want the topics table screwed up.
2003-04-19 10:28:37 +00:00
if ( ! delete_posts ( 'post_id' , array ( $post_id ), FALSE ))
2003-04-18 13:07:19 +00:00
{
trigger_error ( $user -> lang [ 'ALREADY_DELETED' ]);
}
// Only one post... delete topic
if ( $post_data [ 'topic_first_post_id' ] == $post_data [ 'topic_last_post_id' ])
{
2003-04-19 10:28:37 +00:00
delete_topics ( 'topic_id' , array ( $topic_id ), FALSE );
$forum_update_sql .= ( $forum_update_sql != '' ) ? ', ' : '' ;
$forum_update_sql .= 'forum_topics = forum_topics - 1, forum_topics_real = forum_topics_real - 1' ;
2003-04-18 13:07:19 +00:00
}
2003-04-19 10:28:37 +00:00
// Sync last post informations
$db -> sql_transaction ();
$forum_update_sql .= ( $forum_update_sql != '' ) ? ', forum_posts = forum_posts - 1' : 'forum_posts = forum_posts - 1' ;
if ( $auth -> acl_get ( 'f_postcount' , $forum_id ))
{
$user_update_sql .= ( $user_update_sql != '' ) ? ', user_posts = user_posts - 1' : 'user_posts = user_posts - 1' ;
}
2003-05-25 14:32:20 +00:00
$sql = ' SELECT p . post_id , p . poster_id , p . post_username , u . username
2003-06-17 19:34:17 +00:00
FROM ' . POSTS_TABLE . ' p , ' . USERS_TABLE . " u
WHERE p . topic_id = $topic_id
2003-04-19 10:28:37 +00:00
AND p . poster_id = u . user_id
AND p . post_approved = 1
2003-06-17 19:34:17 +00:00
ORDER BY p . post_time DESC " ;
2003-04-19 10:28:37 +00:00
$result = $db -> sql_query_limit ( $sql , 1 );
$row = $db -> sql_fetchrow ( $result );
$db -> sql_freeresult ( $result );
// If Post is first post, but not the only post... make next post the topic starter one. ;)
2003-05-02 15:50:11 +00:00
if ( $post_data [ 'topic_first_post_id' ] != $post_data [ 'topic_last_post_id' ] && $post_id == $post_data [ 'topic_first_post_id' ])
2003-04-19 10:28:37 +00:00
{
$topic_sql = array (
2003-06-23 14:00:57 +00:00
'topic_first_post_id' => ( int ) $row [ 'post_id' ],
2003-05-02 15:50:11 +00:00
'topic_first_poster_name' => ( $row [ 'poster_id' ] == ANONYMOUS ) ? trim ( $row [ 'post_username' ]) : trim ( $row [ 'username' ])
2003-04-19 10:28:37 +00:00
);
}
2003-05-25 14:32:20 +00:00
$post_data [ 'next_post_id' ] = $row [ 'post_id' ];
2003-04-19 10:28:37 +00:00
// Update Forum, Topic and User with the gathered Informations
if ( $forum_update_sql != '' )
{
2003-06-17 19:34:17 +00:00
$sql = " UPDATE " . FORUMS_TABLE . "
SET $forum_update_sql
WHERE forum_id = $forum_id " ;
2003-04-19 10:28:37 +00:00
$db -> sql_query ( $sql );
}
if ( $topic_update_sql != '' || count ( $topic_sql ) > 0 )
{
$sql = 'UPDATE ' . TOPICS_TABLE . '
SET ' . ( (count($topic_sql) > 0) ? $db->sql_build_array(' UPDATE ', $topic_sql) : ' ') . ( ($topic_update_sql != ' ') ? ((count($topic_sql) > 0) ? ' , ' . $topic_update_sql : $topic_update_sql) : ' ') . '
WHERE topic_id = ' . $topic_id ;
$db -> sql_query ( $sql );
}
if ( $user_update_sql != '' )
{
$sql = 'UPDATE ' . USERS_TABLE . '
SET ' . $user_update_sql . '
WHERE user_id = ' . $post_data[' user_id ' ];
$db -> sql_query ( $sql );
}
// Update Forum stats...
if ( $post_data [ 'topic_first_post_id' ] != $post_data [ 'topic_last_post_id' ])
{
update_last_post_information ( 'topic' , $topic_id );
}
update_last_post_information ( 'forum' , $forum_id );
2003-05-05 22:48:17 +00:00
2003-04-19 10:28:37 +00:00
$db -> sql_transaction ( 'commit' );
2003-06-23 14:00:57 +00:00
2003-04-18 13:07:19 +00:00
if ( $post_data [ 'topic_first_post_id' ] == $post_data [ 'topic_last_post_id' ])
{
2003-05-05 22:48:17 +00:00
$meta_info = " viewforum. $phpEx $SID &f= $forum_id " ;
2003-04-18 13:07:19 +00:00
$message = $user -> lang [ 'DELETED' ];
}
else
{
2003-05-05 22:48:17 +00:00
$meta_info = " viewtopic. $phpEx $SID &f= $forum_id &t= $topic_id &p= " . $post_data [ 'next_post_id' ] . '#' . $post_data [ 'next_post_id' ];
$message = $user -> lang [ 'DELETED' ] . '<br /><br />' . sprintf ( $user -> lang [ 'RETURN_TOPIC' ], " <a href= \" viewtopic. $phpEx $SID &f= $forum_id &t= $topic_id &p= " . $post_data [ 'next_post_id' ] . '#' . $post_data [ 'next_post_id' ] . '">' , '</a>' );
2003-04-18 13:07:19 +00:00
}
2003-05-05 22:48:17 +00:00
meta_refresh ( 3 , $meta_info );
$message .= '<br /><br />' . sprintf ( $user -> lang [ 'RETURN_FORUM' ], " <a href= \" viewforum. $phpEx $SID &f= $forum_id\ " > " , '</a>');
2003-04-18 13:07:19 +00:00
trigger_error ( $message );
2003-03-02 13:32:53 +00:00
}
else
{
2003-06-26 16:46:17 +00:00
$s_hidden_fields = '<input type="hidden" name="p" value="' . $post_id . '" /><input type="hidden" name="f" value="' . $forum_id . '" /><input type="hidden" name="mode" value="delete" />' ;
2003-03-02 13:32:53 +00:00
2003-05-03 23:58:45 +00:00
page_header ( $user -> lang [ 'DELETE_MESSAGE' ]);
2003-03-02 13:32:53 +00:00
$template -> set_filenames ( array (
'body' => 'confirm_body.html' )
);
$template -> assign_vars ( array (
2003-05-02 15:50:11 +00:00
'MESSAGE_TITLE' => $user -> lang [ 'DELETE_MESSAGE' ],
'MESSAGE_TEXT' => $user -> lang [ 'CONFIRM_DELETE' ],
2003-03-02 13:32:53 +00:00
2003-06-23 14:00:57 +00:00
'S_CONFIRM_ACTION' => " posting. $phpEx $SID " ,
2003-05-02 15:50:11 +00:00
'S_HIDDEN_FIELDS' => $s_hidden_fields )
2003-03-02 13:32:53 +00:00
);
2003-05-03 23:58:45 +00:00
page_footer ();
2003-03-02 13:32:53 +00:00
}
}
2003-06-23 14:00:57 +00:00
2003-06-17 19:34:17 +00:00
if ( $mode == 'delete' && $poster_id != $user -> data [ 'user_id' ] && ! $auth -> acl_get ( 'f_delete' , $forum_id ))
2003-03-02 13:32:53 +00:00
{
trigger_error ( $user -> lang [ 'DELETE_OWN_POSTS' ]);
}
2003-06-23 14:00:57 +00:00
2003-06-17 19:34:17 +00:00
if ( $mode == 'delete' && $poster_id == $user -> data [ 'user_id' ] && $auth -> acl_get ( 'f_delete' , $forum_id ) && $post_id != $topic_last_post_id )
2003-03-02 13:32:53 +00:00
{
trigger_error ( $user -> lang [ 'CANNOT_DELETE_REPLIED' ]);
}
if ( $mode == 'delete' )
{
trigger_error ( 'USER_CANNOT_DELETE' );
}
2002-11-07 22:02:49 +00:00
2003-06-23 14:00:57 +00:00
2003-05-22 01:35:48 +00:00
// HTML, BBCode, Smilies, Images and Flash status
2003-06-23 14:00:57 +00:00
$html_status = ( $config [ 'allow_html' ] && $auth -> acl_get ( 'f_html' , $forum_id )) ? true : false ;
$bbcode_status = ( $config [ 'allow_bbcode' ] && $auth -> acl_get ( 'f_bbcode' , $forum_id )) ? true : false ;
$smilies_status = ( $config [ 'allow_smilies' ] && $auth -> acl_get ( 'f_smilies' , $forum_id )) ? true : false ;
$img_status = ( $config [ 'allow_img' ] && $auth -> acl_get ( 'f_img' , $forum_id )) ? true : false ;
$flash_status = ( $config [ 'allow_flash' ] && $auth -> acl_get ( 'f_flash' , $forum_id )) ? true : false ;
2003-05-22 01:35:48 +00:00
2003-06-24 16:46:30 +00:00
2003-05-02 15:50:11 +00:00
if ( $submit || $preview || $refresh )
2002-10-04 13:09:10 +00:00
{
2003-02-27 23:37:02 +00:00
$topic_cur_post_id = ( isset ( $_POST [ 'topic_cur_post_id' ])) ? intval ( $_POST [ 'topic_cur_post_id' ]) : false ;
$subject = ( ! empty ( $_POST [ 'subject' ])) ? trim ( htmlspecialchars ( strip_tags ( $_POST [ 'subject' ]))) : '' ;
2003-03-10 19:39:50 +00:00
2003-05-05 22:48:17 +00:00
if ( strcmp ( $subject , strtoupper ( $subject )) == 0 && $subject != '' )
2003-03-10 19:39:50 +00:00
{
$subject = phpbb_strtolower ( $subject );
}
2003-07-22 14:01:41 +00:00
$message_parser -> message = ( ! empty ( $_POST [ 'message' ])) ? trim ( str_replace ( array ( '\\\'' , '\\"' , '\\0' , '\\\\' ), array ( '\'' , '"' , '\0' , '\\' ), $_POST [ 'message' ])) : '' ;
2003-04-22 16:47:34 +00:00
2003-06-24 16:46:30 +00:00
$username = ( ! empty ( $_POST [ 'username' ])) ? trim ( $_POST [ 'username' ]) : (( ! empty ( $username )) ? $username : '' );
2003-06-23 14:00:57 +00:00
$topic_type = ( ! empty ( $_POST [ 'topic_type' ])) ? ( int ) $_POST [ 'topic_type' ] : (( $mode != 'post' ) ? $topic_type : POST_NORMAL );
2003-08-30 12:21:31 +00:00
$icon_id = ( ! empty ( $_POST [ 'icon' ])) ? ( int ) $_POST [ 'icon' ] : 0 ;
2003-02-27 23:37:02 +00:00
2003-05-22 01:35:48 +00:00
$enable_html = ( ! $html_status || ! empty ( $_POST [ 'disable_html' ])) ? FALSE : TRUE ;
$enable_bbcode = ( ! $bbcode_status || ! empty ( $_POST [ 'disable_bbcode' ])) ? FALSE : TRUE ;
$enable_smilies = ( ! $smilies_status || ! empty ( $_POST [ 'disable_smilies' ])) ? FALSE : TRUE ;
2003-03-02 13:32:53 +00:00
$enable_urls = ( isset ( $_POST [ 'disable_magic_url' ])) ? 0 : 1 ;
2003-05-05 22:48:17 +00:00
$enable_sig = ( ! $config [ 'allow_sig' ]) ? false : (( ! empty ( $_POST [ 'attach_sig' ])) ? true : false );
2003-04-23 22:00:32 +00:00
2003-03-10 19:39:50 +00:00
$notify = ( ! empty ( $_POST [ 'notify' ])) ? true : false ;
2003-04-12 14:30:21 +00:00
$topic_lock = ( isset ( $_POST [ 'lock_topic' ])) ? true : false ;
$post_lock = ( isset ( $_POST [ 'lock_post' ])) ? true : false ;
2003-03-10 19:39:50 +00:00
$poll_delete = ( isset ( $_POST [ 'poll_delete' ])) ? true : false ;
2003-06-23 14:00:57 +00:00
2003-06-06 19:05:21 +00:00
// Faster than crc32
2003-08-30 12:21:31 +00:00
$check_value = (( $preview || $refresh ) && isset ( $_POST [ 'status_switch' ])) ? ( int ) $_POST [ 'status_switch' ] : (( $enable_html + 1 ) << 16 ) + (( $enable_bbcode + 1 ) << 8 ) + (( $enable_smilies + 1 ) << 4 ) + (( $enable_urls + 1 ) << 2 ) + (( $enable_sig + 1 ) << 1 );
$status_switch = ( isset ( $_POST [ 'status_switch' ]) && ( int ) $_POST [ 'status_switch' ] != $check_value ) ? TRUE : FALSE ;
2003-06-06 19:05:21 +00:00
2003-06-23 14:00:57 +00:00
2003-06-17 19:34:17 +00:00
if ( $poll_delete && (( $mode == 'edit' && ! empty ( $poll_options ) && empty ( $poll_last_vote ) && $poster_id == $user -> data [ 'user_id' ] && $auth -> acl_get ( 'f_delete' , $forum_id )) || $auth -> acl_get ( 'm_delete' , $forum_id )))
2003-03-10 19:39:50 +00:00
{
2003-04-18 13:07:19 +00:00
// Delete Poll
2003-06-17 19:34:17 +00:00
$sql = 'DELETE FROM ' . POLL_OPTIONS_TABLE . "
WHERE topic_id = $topic_id " ;
2003-04-18 13:07:19 +00:00
$db -> sql_query ( $sql );
2003-06-17 19:34:17 +00:00
$sql = 'DELETE FROM ' . POLL_VOTES_TABLE . "
WHERE topic_id = $topic_id " ;
2003-04-18 13:07:19 +00:00
$db -> sql_query ( $sql );
$topic_sql = array (
2003-04-22 16:47:34 +00:00
'poll_title' => '' ,
'poll_start' => 0 ,
'poll_length' => 0 ,
'poll_last_vote' => 0 ,
'poll_max_options' => 0
2003-04-18 13:07:19 +00:00
);
2003-05-02 15:50:11 +00:00
$sql = 'UPDATE ' . TOPICS_TABLE . '
2003-06-17 19:34:17 +00:00
SET ' . $db->sql_build_array(' UPDATE ' , $topic_sql ) . "
WHERE topic_id = $topic_id " ;
2003-04-18 13:07:19 +00:00
$db -> sql_query ( $sql );
2003-03-10 19:39:50 +00:00
2003-05-05 22:48:17 +00:00
$poll_title = $poll_length = $poll_option_text = $poll_max_options = '' ;
2003-03-10 19:39:50 +00:00
}
else
{
$poll_title = ( ! empty ( $_POST [ 'poll_title' ])) ? trim ( $_POST [ 'poll_title' ]) : '' ;
2003-06-17 19:34:17 +00:00
$poll_length = ( ! empty ( $_POST [ 'poll_length' ])) ? intval ( $_POST [ 'poll_length' ]) : 0 ;
$poll_option_text = ( ! empty ( $_POST [ 'poll_option_text' ])) ? trim ( $_POST [ 'poll_option_text' ]) : '' ;
$poll_max_options = ( ! empty ( $_POST [ 'poll_max_options' ])) ? intval ( $_POST [ 'poll_max_options' ]) : 1 ;
2003-03-10 19:39:50 +00:00
}
2003-02-27 23:37:02 +00:00
2003-06-24 16:46:30 +00:00
2003-02-27 23:37:02 +00:00
$current_time = time ();
2003-06-24 16:46:30 +00:00
2002-11-21 01:35:53 +00:00
// If replying/quoting and last post id has changed
2003-06-06 19:05:21 +00:00
// give user option to continue submit or return to post
2003-02-26 13:17:45 +00:00
// notify and show user the post made between his request and the final submit
2003-05-02 15:50:11 +00:00
if (( $mode == 'reply' || $mode == 'quote' ) && $topic_cur_post_id != $topic_last_post_id )
2002-11-21 01:35:53 +00:00
{
2003-04-20 16:49:26 +00:00
$template -> assign_vars ( array (
'S_POST_REVIEW' => true )
);
// Define censored word matches
if ( empty ( $censors ))
{
$censors = array ();
obtain_word_list ( $censors );
}
// Go ahead and pull all data for the remaining posts
2003-05-25 14:32:20 +00:00
$sql = ' SELECT u . username , u . user_id , p .*
2003-06-17 19:34:17 +00:00
FROM ' . POSTS_TABLE . ' p , ' . USERS_TABLE . " u
WHERE p . topic_id = $topic_id
2003-04-20 16:49:26 +00:00
AND p . poster_id = u . user_id
2003-06-17 19:34:17 +00:00
AND p . post_id > $topic_cur_post_id
2003-04-20 19:46:15 +00:00
AND p . post_approved = 1
2003-06-17 19:34:17 +00:00
ORDER BY p . post_time DESC " ;
2003-04-20 16:49:26 +00:00
$result = $db -> sql_query_limit ( $sql , $config [ 'posts_per_page' ]);
if ( $row = $db -> sql_fetchrow ( $result ))
{
$i = 0 ;
do
{
2003-06-26 16:46:17 +00:00
$user_id = $row [ 'user_id' ];
2003-04-20 16:49:26 +00:00
$poster = $row [ 'username' ];
// Handle anon users posting with usernames
2003-06-26 16:46:17 +00:00
if ( $user_id == ANONYMOUS && $row [ 'post_username' ] != '' )
2003-04-20 16:49:26 +00:00
{
$poster = $row [ 'post_username' ];
$poster_rank = $user -> lang [ 'GUEST' ];
}
$post_subject = ( $row [ 'post_subject' ] != '' ) ? $row [ 'post_subject' ] : '' ;
2003-06-17 19:34:17 +00:00
$message = ( empty ( $row [ 'enable_smilies' ]) || empty ( $config [ 'allow_smilies' ])) ? preg_replace ( '#<!\-\- s(.*?) \-\-><img src="\{SMILE_PATH\}\/.*? \/><!\-\- s\1 \-\->#' , '\1' , $row [ 'post_text' ]) : str_replace ( '<img src="{SMILE_PATH}' , '<img src="' . $phpbb_root_path . $config [ 'smilies_path' ], $row [ 'post_text' ]);
2003-04-20 16:49:26 +00:00
if ( count ( $censors [ 'match' ]))
{
$post_subject = preg_replace ( $censors [ 'match' ], $censors [ 'replace' ], $post_subject );
$message = preg_replace ( $censors [ 'match' ], $censors [ 'replace' ], $message );
}
$template -> assign_block_vars ( 'post_postrow' , array (
'MINI_POST_IMG' => $user -> img ( 'icon_post' , $user -> lang [ 'POST' ]),
'POSTER_NAME' => $poster ,
'POST_DATE' => $user -> format_date ( $row [ 'post_time' ]),
'POST_SUBJECT' => $post_subject ,
2003-06-06 19:05:21 +00:00
'MESSAGE' => str_replace ( " \n " , '<br />' , $message ),
2003-04-20 16:49:26 +00:00
2003-05-25 14:32:20 +00:00
'S_ROW_COUNT' => $i ++ )
2003-04-20 16:49:26 +00:00
);
}
while ( $row = $db -> sql_fetchrow ( $result ));
}
$db -> sql_freeresult ( $result );
$submit = FALSE ;
$refresh = TRUE ;
2002-11-21 01:35:53 +00:00
}
2003-06-24 16:46:30 +00:00
2003-01-22 16:35:06 +00:00
// Grab md5 'checksum' of new message
2003-04-11 19:51:38 +00:00
$message_md5 = md5 ( $message_parser -> message );
2002-10-30 00:57:27 +00:00
// Check checksum ... don't re-parse message if the same
2003-06-07 16:37:16 +00:00
if ( $mode != 'edit' || $message_md5 != $post_checksum || $status_switch || $preview )
2002-10-04 13:09:10 +00:00
{
2002-10-28 00:08:18 +00:00
// Parse message
2003-06-29 10:59:36 +00:00
$message_parser -> parse ( $enable_html , $enable_bbcode , $enable_urls , $enable_smilies , $img_status , $flash_status );
2002-10-28 00:08:18 +00:00
}
2003-06-29 10:59:36 +00:00
$message_parser -> parse_attachments ( $mode , $post_id , $submit , $preview , $refresh );
2003-03-22 15:48:46 +00:00
2003-06-17 19:34:17 +00:00
if ( $mode != 'edit' && ! $preview && ! $refresh && ! $auth -> acl_get ( 'f_ignoreflood' , $forum_id ))
2002-10-28 00:08:18 +00:00
{
// Flood check
2003-06-06 19:05:21 +00:00
$sql = ' SELECT MAX ( post_time ) AS last_post_time
FROM ' . POSTS_TABLE . '
WHERE ' . (($user->data[' user_id '] == ANONYMOUS) ? "poster_ip = ' " . $user->ip . " '" : ' poster_id = ' . $user->data[' user_id ' ]);
2002-10-28 00:08:18 +00:00
$result = $db -> sql_query ( $sql );
if ( $row = $db -> sql_fetchrow ( $result ))
{
2003-04-10 19:11:09 +00:00
if ( intval ( $row [ 'last_post_time' ]) && ( $current_time - intval ( $row [ 'last_post_time' ])) < intval ( $config [ 'flood_interval' ]))
2002-10-28 00:08:18 +00:00
{
2003-06-23 14:00:57 +00:00
$error [] = $user -> lang [ 'FLOOD_ERROR' ];
2002-10-28 00:08:18 +00:00
}
}
}
// Validate username
2003-06-23 14:00:57 +00:00
// TODO
2003-01-22 16:35:06 +00:00
if (( $username != '' && $user -> data [ 'user_id' ] == ANONYMOUS ) || ( $mode == 'edit' && $post_username != '' ))
2002-10-28 00:08:18 +00:00
{
2003-04-22 19:44:00 +00:00
include ( $phpbb_root_path . 'includes/functions_user.' . $phpEx );
2002-10-28 00:08:18 +00:00
$username = strip_tags ( htmlspecialchars ( $username ));
2003-06-17 19:34:17 +00:00
2003-07-07 23:43:57 +00:00
if (( $result = validate_username ( $username )) != false )
2002-10-28 00:08:18 +00:00
{
2003-06-23 14:00:57 +00:00
$error [] = $result ;
2002-10-28 00:08:18 +00:00
}
}
2001-08-15 22:54:48 +00:00
2002-10-28 00:08:18 +00:00
// Parse subject
2003-05-02 15:50:11 +00:00
if ( $subject == '' && ( $mode == 'post' || ( $mode == 'edit' && $topic_first_post_id == $post_id )))
2002-10-28 00:08:18 +00:00
{
2003-06-23 14:00:57 +00:00
$error [] = $user -> lang [ 'EMPTY_SUBJECT' ];
2002-02-18 12:34:38 +00:00
}
2003-02-27 23:37:02 +00:00
2003-03-10 19:39:50 +00:00
$poll_data = array (
'poll_title' => $poll_title ,
'poll_length' => $poll_length ,
2003-04-22 16:47:34 +00:00
'poll_max_options' => $poll_max_options ,
2003-03-10 19:39:50 +00:00
'poll_option_text' => $poll_option_text ,
'poll_start' => $poll_start ,
'poll_last_vote' => $poll_last_vote ,
'enable_html' => $enable_html ,
'enable_bbcode' => $enable_bbcode ,
2003-04-11 19:51:38 +00:00
'bbcode_uid' => $message_parser -> bbcode_uid ,
2003-03-10 19:39:50 +00:00
'enable_urls' => $enable_urls ,
'enable_smilies' => $enable_smilies
);
2003-02-27 23:37:02 +00:00
$poll = array ();
2003-06-29 10:59:36 +00:00
$message_parser -> parse_poll ( $poll , $poll_data );
2003-03-10 19:39:50 +00:00
$poll_options = $poll [ 'poll_options' ];
$poll_title = $poll [ 'poll_title' ];
2002-10-30 00:57:27 +00:00
// Check topic type
if ( $topic_type != POST_NORMAL )
{
switch ( $topic_type )
{
2003-05-05 22:48:17 +00:00
case POST_GLOBAL :
2003-02-26 19:53:10 +00:00
case POST_ANNOUNCE :
2003-06-23 14:00:57 +00:00
$auth_option = 'f_announce' ;
2002-10-30 00:57:27 +00:00
break ;
2003-02-26 19:53:10 +00:00
case POST_STICKY :
2003-06-23 14:00:57 +00:00
$auth_option = 'f_sticky' ;
2002-10-30 00:57:27 +00:00
break ;
2003-06-23 14:00:57 +00:00
default :
$auth_option = '' ;
2002-10-30 00:57:27 +00:00
}
2003-06-23 14:00:57 +00:00
if ( ! $auth -> acl_get ( $auth_option , $forum_id ))
2002-10-30 00:57:27 +00:00
{
2003-06-23 14:00:57 +00:00
$error [] = $user -> lang [ 'CANNOT_POST_' . strtoupper ( $auth_option )];
2002-10-30 00:57:27 +00:00
}
}
2003-06-29 10:59:36 +00:00
if ( sizeof ( $message_parser -> warn_msg ))
{
$error [] = implode ( '<br />' , $message_parser -> warn_msg );
}
2002-10-28 20:39:06 +00:00
// Store message, sync counters
2003-06-23 14:00:57 +00:00
if ( ! sizeof ( $error ) && $submit )
2002-10-28 00:08:18 +00:00
{
2003-08-30 12:21:31 +00:00
// Check if we want to de-globalize the topic... and ask for new forum
if ( $topic_type != POST_GLOBAL )
2003-04-12 14:30:21 +00:00
{
2003-08-30 12:21:31 +00:00
$sql = ' SELECT forum_id
FROM ' . TOPICS_TABLE . "
WHERE topic_id = $topic_id " ;
$result = $db -> sql_query_limit ( $sql , 1 );
2003-04-12 14:30:21 +00:00
2003-08-30 12:21:31 +00:00
$row = $db -> sql_fetchrow ( $result );
2003-04-12 14:30:21 +00:00
2003-08-30 12:21:31 +00:00
if (( int ) $row [ 'forum_id' ] == 0 )
{
$to_forum_id = ( ! empty ( $_REQUEST [ 'to_forum_id' ])) ? ( int ) $_REQUEST [ 'to_forum_id' ] : 0 ;
if ( ! $to_forum_id )
{
$template -> assign_vars ( array (
'S_FORUM_SELECT' => make_forum_select (),
'S_UNGLOBALISE' => TRUE )
);
$submit = FALSE ;
$refresh = TRUE ;
}
else
{
$forum_id = $to_forum_id ;
}
}
2003-04-12 14:30:21 +00:00
}
2003-08-30 12:21:31 +00:00
if ( $submit )
2003-04-12 14:30:21 +00:00
{
2003-08-30 12:21:31 +00:00
// Lock/Unlock Topic
$change_topic_status = $topic_status ;
2003-04-12 14:30:21 +00:00
2003-08-30 12:21:31 +00:00
if ( $topic_status == ITEM_LOCKED && ! $topic_lock && $auth -> acl_get ( 'm_lock' , $forum_id ))
{
$change_topic_status = ITEM_UNLOCKED ;
}
else if ( $topic_status == ITEM_UNLOCKED && $topic_lock && $auth -> acl_get ( 'm_lock' , $forum_id ))
{
$change_topic_status = ITEM_LOCKED ;
}
if ( $change_topic_status != $topic_status )
{
$sql = 'UPDATE ' . TOPICS_TABLE . "
SET topic_status = $change_topic_status
WHERE topic_id = $topic_id
AND topic_moved_id = 0 " ;
$db -> sql_query ( $sql );
add_log ( 'mod' , $forum_id , $topic_id , 'logm_' . (( $change_topic_status == ITEM_LOCKED ) ? 'lock' : 'unlock' ));
}
// Lock/Unlock Post Edit
if ( $mode == 'edit' && $post_edit_locked == ITEM_LOCKED && ! $post_lock && $auth -> acl_get ( 'm_edit' , $forum_id ))
{
$post_edit_locked = ITEM_UNLOCKED ;
}
else if ( $mode == 'edit' && $post_edit_locked == ITEM_UNLOCKED && $post_lock && $auth -> acl_get ( 'm_edit' , $forum_id ))
{
$post_edit_locked = ITEM_LOCKED ;
}
$post_data = array (
'topic_first_post_id' => $topic_first_post_id ,
'topic_last_post_id' => $topic_last_post_id ,
'post_id' => $post_id ,
'topic_id' => $topic_id ,
'forum_id' => $forum_id ,
'icon_id' => $icon_id ,
'poster_id' => $poster_id ,
'enable_sig' => $enable_sig ,
'enable_bbcode' => $enable_bbcode ,
'enable_html' => $enable_html ,
'enable_smilies' => $enable_smilies ,
'enable_urls' => $enable_urls ,
'message_md5' => $message_md5 ,
'post_checksum' => $post_checksum ,
'forum_parents' => $forum_parents ,
'notify' => $notify ,
'notify_set' => $notify_set ,
'post_edit_locked' => $post_edit_locked ,
'bbcode_bitfield' => $message_parser -> bbcode_bitfield
);
submit_post ( $mode , $message_parser -> message , $subject , $username , $topic_type , $message_parser -> bbcode_uid , $poll , $message_parser -> attachment_data , $message_parser -> filename_data , $post_data );
}
2003-02-27 23:37:02 +00:00
}
2002-11-27 13:24:46 +00:00
2003-04-13 23:20:26 +00:00
$post_text = $message_parser -> message ;
2003-02-27 23:37:02 +00:00
$post_subject = $topic_title = stripslashes ( $subject );
}
2002-10-28 00:08:18 +00:00
2003-06-17 19:34:17 +00:00
// Preview
2003-06-23 14:00:57 +00:00
if ( ! sizeof ( $error ) && $preview )
2003-02-27 23:37:02 +00:00
{
2003-02-26 19:53:10 +00:00
if ( empty ( $censors ))
{
$censors = array ();
obtain_word_list ( $censors );
}
2003-06-24 16:46:30 +00:00
$post_time = ( $mode == 'edit' ) ? $post_time : $current_time ;
2003-04-11 00:19:29 +00:00
2003-06-24 16:46:30 +00:00
$preview_subject = ( sizeof ( $censors )) ? preg_replace ( $censors [ 'match' ], $censors [ 'replace' ], $subject ) : $subject ;
2003-06-23 14:00:57 +00:00
2003-06-24 16:46:30 +00:00
$preview_signature = ( $mode == 'edit' ) ? $user_sig : $user -> data [ 'user_sig' ];
$preview_signature_uid = ( $mode == 'edit' ) ? $user_sig_bbcode_uid : $user -> data [ 'user_sig_bbcode_uid' ];
$preview_signature_bitfield = ( $mode == 'edit' ) ? $user_sig_bbcode_bitfield : $user -> data [ 'user_sig_bbcode_bitfield' ];
2003-06-23 14:00:57 +00:00
2003-06-24 16:46:30 +00:00
include ( $phpbb_root_path . 'includes/bbcode.' . $phpEx );
$bbcode = new bbcode ( $message_parser -> bbcode_bitfield | $preview_signature_bitfield );
2003-03-10 19:39:50 +00:00
2003-06-24 16:46:30 +00:00
$preview_message = $message_parser -> message ;
format_display ( $preview_message , $preview_signature , $message_parser -> bbcode_uid , $preview_signature_uid , $enable_html , $enable_bbcode , $enable_urls , $enable_smilies , $enable_sig );
2003-06-23 14:00:57 +00:00
2003-03-10 19:39:50 +00:00
// Poll Preview
2003-06-23 14:00:57 +00:00
if (( $mode == 'post' || ( $mode == 'edit' && $post_id == $topic_first_post_id && empty ( $poll_last_vote ))) && ( $auth -> acl_get ( 'f_poll' , $forum_id ) || $auth -> acl_get ( 'm_edit' , $forum_id )))
2003-02-27 23:37:02 +00:00
{
2003-04-11 19:51:38 +00:00
decode_text ( $poll_title , $message_parser -> bbcode_uid );
2003-06-24 16:46:30 +00:00
$preview_poll_title = format_display ( stripslashes ( $poll_title ), $null , $message_parser -> bbcode_uid , false , $enable_html , $enable_bbcode , $enable_urls , $enable_smilies , false , false );
2003-03-10 19:39:50 +00:00
$template -> assign_vars ( array (
'S_HAS_POLL_OPTIONS' => ( sizeof ( $poll_options )) ? true : false ,
2003-05-05 22:48:17 +00:00
'POLL_QUESTION' => $preview_poll_title )
2003-03-10 19:39:50 +00:00
);
foreach ( $poll_options as $option )
{
$template -> assign_block_vars ( 'poll_option' , array (
2003-06-17 19:34:17 +00:00
'POLL_OPTION_CAPTION' => format_display ( stripslashes ( $option ), $enable_html , $enable_bbcode , $message_parser -> bbcode_uid , $enable_urls , $enable_smilies , false , false ))
2003-03-10 19:39:50 +00:00
);
}
2003-02-27 23:37:02 +00:00
}
2003-06-17 19:34:17 +00:00
// Attachment Preview
if ( sizeof ( $message_parser -> attachment_data ))
{
include ( $phpbb_root_path . 'includes/functions_display.' . $phpEx );
$extensions = $update_count = array ();
$template -> assign_block_vars ( 'postrow' , array (
'S_HAS_ATTACHMENTS' => true )
);
display_attachments ( $message_parser -> attachment_data , $update_count , true );
}
2003-02-26 19:53:10 +00:00
}
2001-12-16 18:13:34 +00:00
2003-06-23 14:00:57 +00:00
2003-03-10 19:39:50 +00:00
// Decode text for message display
2003-04-17 23:47:26 +00:00
$bbcode_uid = ( $mode == 'quote' && ! $preview ) ? $row [ 'bbcode_uid' ] : $message_parser -> bbcode_uid ;
2003-06-23 14:00:57 +00:00
2003-04-17 23:47:26 +00:00
decode_text ( $post_text , $bbcode_uid );
2003-04-16 21:16:57 +00:00
if ( $subject )
{
2003-04-17 23:47:26 +00:00
decode_text ( $subject , $bbcode_uid );
2003-04-16 21:16:57 +00:00
}
2003-02-27 23:37:02 +00:00
2003-06-23 14:00:57 +00:00
2003-03-12 14:21:57 +00:00
// Save us some processing time. ;)
2003-04-20 16:49:26 +00:00
if ( count ( $poll_options ))
2003-04-16 21:16:57 +00:00
{
$poll_options_tmp = implode ( " \n " , $poll_options );
decode_text ( $poll_options_tmp );
$poll_options = explode ( " \n " , $poll_options_tmp );
}
2003-03-10 19:39:50 +00:00
2003-06-23 14:00:57 +00:00
2003-06-17 19:34:17 +00:00
if ( $mode == 'quote' && ! $preview && ! $refresh )
2003-02-27 23:37:02 +00:00
{
2003-04-23 22:00:32 +00:00
$post_text = '[quote="' . $quote_username . '"]' . trim ( $post_text ) . " [/quote] \n " ;
2003-02-27 23:37:02 +00:00
}
2001-08-10 22:00:12 +00:00
2003-06-23 14:00:57 +00:00
2003-06-17 19:34:17 +00:00
if (( $mode == 'reply' || $mode == 'quote' ) && ! $preview && ! $refresh )
2003-03-10 19:39:50 +00:00
{
2003-06-17 19:34:17 +00:00
$post_subject = (( ! preg_match ( '/^Re:/' , $post_subject )) ? 'Re: ' : '' ) . $post_subject ;
2003-03-10 19:39:50 +00:00
}
2003-06-23 14:00:57 +00:00
2002-10-04 13:09:10 +00:00
// MAIN POSTING PAGE BEGINS HERE
2002-11-07 22:02:49 +00:00
// Forum moderators?
2003-02-27 23:37:02 +00:00
get_moderators ( $moderators , $forum_id );
2001-06-13 17:36:58 +00:00
2003-06-23 14:00:57 +00:00
2002-10-04 13:09:10 +00:00
// Generate smilies and topic icon listings
generate_smilies ( 'inline' );
2001-08-10 22:00:12 +00:00
2003-06-23 14:00:57 +00:00
2003-02-27 23:37:02 +00:00
// Generate Topic icons
2003-04-18 13:07:19 +00:00
$s_topic_icons = false ;
if ( $enable_icons )
{
// Grab icons
$icons = array ();
obtain_icons ( $icons );
if ( sizeof ( $icons ))
{
foreach ( $icons as $id => $data )
{
if ( $data [ 'display' ])
{
$template -> assign_block_vars ( 'topic_icon' , array (
'ICON_ID' => $id ,
'ICON_IMG' => $phpbb_root_path . $config [ 'icons_path' ] . '/' . $data [ 'img' ],
'ICON_WIDTH' => $data [ 'width' ],
'ICON_HEIGHT' => $data [ 'height' ],
'S_ICON_CHECKED' => ( $id == $icon_id && $mode != 'reply' ) ? ' checked="checked"' : '' )
);
}
}
$s_topic_icons = true ;
}
}
2002-10-28 00:08:18 +00:00
2003-02-26 19:53:10 +00:00
// Topic type selection ... only for first post in topic.
2002-02-18 12:34:38 +00:00
$topic_type_toggle = '' ;
2003-06-17 19:34:17 +00:00
if ( $mode == 'post' || ( $mode == 'edit' && $post_id == $topic_first_post_id ))
2001-06-13 17:36:58 +00:00
{
2003-02-26 19:53:10 +00:00
$topic_types = array (
'sticky' => array ( 'const' => POST_STICKY , 'lang' => 'POST_STICKY' ),
2003-06-23 14:00:57 +00:00
'announce' => array ( 'const' => POST_ANNOUNCE , 'lang' => 'POST_ANNOUNCEMENT' ),
'global' => array ( 'const' => POST_GLOBAL , 'lang' => 'POST_GLOBAL' )
2003-02-26 19:53:10 +00:00
);
2003-03-20 13:21:58 +00:00
foreach ( $topic_types as $auth_key => $topic_value )
2001-06-13 17:36:58 +00:00
{
2003-08-30 12:21:31 +00:00
// Temp - we do not have a special post global announcement permission
$auth_key = ( $auth_key == 'global' ) ? 'announce' : $auth_key ;
2003-06-17 19:34:17 +00:00
if ( $auth -> acl_get ( 'f_' . $auth_key , $forum_id ))
2001-06-07 07:56:45 +00:00
{
2003-02-26 19:53:10 +00:00
$topic_type_toggle .= '<input type="radio" name="topic_type" value="' . $topic_value [ 'const' ] . '"' ;
2003-06-23 14:00:57 +00:00
if ( $topic_type == $topic_value [ 'const' ] || ( $forum_id == 0 && $topic_value [ 'const' ] == POST_GLOBAL ))
2003-02-26 19:53:10 +00:00
{
$topic_type_toggle .= ' checked="checked"' ;
}
$topic_type_toggle .= ' /> ' . $user -> lang [ $topic_value [ 'lang' ]] . ' ' ;
2001-06-07 07:56:45 +00:00
}
2001-07-04 00:34:33 +00:00
}
2002-11-01 12:23:08 +00:00
if ( $topic_type_toggle != '' )
2001-07-04 00:34:33 +00:00
{
2003-02-27 23:37:02 +00:00
$topic_type_toggle = (( $mode == 'edit' ) ? $user -> lang [ 'CHANGE_TOPIC_TO' ] : $user -> lang [ 'POST_TOPIC_AS' ]) . ': <input type="radio" name="topic_type" value="' . POST_NORMAL . '"' . (( $topic_type == POST_NORMAL ) ? ' checked="checked"' : '' ) . ' /> ' . $user -> lang [ 'POST_NORMAL' ] . ' ' . $topic_type_toggle ;
2001-06-13 17:36:58 +00:00
}
}
2001-04-17 07:14:50 +00:00
2003-06-17 19:34:17 +00:00
$html_checked = ( isset ( $enable_html )) ? ! $enable_html : (( intval ( $config [ 'allow_html' ])) ? ! $user -> data [ 'user_allowhtml' ] : 1 );
$bbcode_checked = ( isset ( $enable_bbcode )) ? ! $enable_bbcode : (( intval ( $config [ 'allow_bbcode' ])) ? ! $user -> data [ 'user_allowbbcode' ] : 1 );
$smilies_checked = ( isset ( $enable_smilies )) ? ! $enable_smilies : (( intval ( $config [ 'allow_smilies' ])) ? ! $user -> data [ 'user_allowsmile' ] : 1 );
$urls_checked = ( isset ( $enable_urls )) ? ! $enable_urls : 0 ;
$sig_checked = $enable_sig ;
$notify_checked = ( isset ( $notify )) ? $notify : (( $notify_set == - 1 ) ? (( $user -> data [ 'user_id' ] != ANONYMOUS ) ? $user -> data [ 'user_notify' ] : 0 ) : $notify_set );
$lock_topic_checked = ( isset ( $topic_lock )) ? $topic_lock : (( $topic_status == ITEM_LOCKED ) ? 1 : 0 );
$lock_post_checked = ( isset ( $post_lock )) ? $post_lock : $post_edit_locked ;
2002-10-04 13:09:10 +00:00
2003-01-20 05:12:38 +00:00
// Page title & action URL, include session_id for security purpose
2003-06-17 19:34:17 +00:00
$s_action = " posting. $phpEx ?sid= " . $user -> session_id . " &mode= $mode &f= $forum_id " ;
$s_action .= ( $topic_id ) ? " &t= $topic_id " : '' ;
$s_action .= ( $post_id ) ? " &p= $post_id " : '' ;
2003-02-28 12:57:10 +00:00
2003-01-22 16:35:06 +00:00
switch ( $mode )
2001-08-10 22:00:12 +00:00
{
2002-10-28 00:08:18 +00:00
case 'post' :
2002-11-09 00:47:14 +00:00
$page_title = $user -> lang [ 'POST_TOPIC' ];
2001-09-06 00:29:07 +00:00
break ;
2001-08-09 22:21:55 +00:00
2003-02-26 19:53:10 +00:00
case 'quote' :
2001-09-06 00:29:07 +00:00
case 'reply' :
2002-11-09 00:47:14 +00:00
$page_title = $user -> lang [ 'POST_REPLY' ];
2001-09-06 00:29:07 +00:00
break ;
2003-02-28 12:57:10 +00:00
case 'delete' :
2002-10-28 00:08:18 +00:00
case 'edit' :
2002-11-18 21:04:45 +00:00
$page_title = $user -> lang [ 'EDIT_POST' ];
2001-08-10 22:00:12 +00:00
}
2001-08-09 22:21:55 +00:00
2003-02-26 00:37:43 +00:00
// Build navigation links
2003-02-26 19:53:10 +00:00
$forum_data = array (
2003-06-17 19:34:17 +00:00
'parent_id' => $parent_id ,
'forum_parents' => $forum_parents ,
'forum_name' => $forum_name ,
'forum_id' => $forum_id ,
'forum_desc' => ''
2003-02-26 19:53:10 +00:00
);
2003-02-26 00:37:43 +00:00
generate_forum_nav ( $forum_data );
2003-01-22 16:35:06 +00:00
2003-03-10 19:39:50 +00:00
$s_hidden_fields = ( $mode == 'reply' || $mode == 'quote' ) ? '<input type="hidden" name="topic_cur_post_id" value="' . $topic_last_post_id . '" />' : '' ;
$s_hidden_fields .= '<input type="hidden" name="lastclick" value="' . time () . '" />' ;
2003-06-06 19:05:21 +00:00
$s_hidden_fields .= ( isset ( $check_value )) ? '<input type="hidden" name="status_switch" value="' . $check_value . '" />' : '' ;
2003-03-10 19:39:50 +00:00
2003-06-17 19:34:17 +00:00
$form_enctype = ( @ ini_get ( 'file_uploads' ) == '0' || strtolower ( @ ini_get ( 'file_uploads' )) == 'off' || @ ini_get ( 'file_uploads' ) == '0' || ! $config [ 'allow_attachments' ] || ! $auth -> acl_get ( 'f_attach' , $forum_id )) ? '' : 'enctype="multipart/form-data"' ;
2003-03-10 19:39:50 +00:00
2002-10-04 13:09:10 +00:00
// Start assigning vars for main posting page ...
2002-02-18 12:34:38 +00:00
$template -> assign_vars ( array (
2003-02-27 23:37:02 +00:00
'L_POST_A' => $page_title ,
2003-01-22 16:35:06 +00:00
'L_ICON' => ( $mode == 'reply' || $mode == 'quote' ) ? $user -> lang [ 'POST_ICON' ] : $user -> lang [ 'TOPIC_ICON' ],
2003-02-27 23:37:02 +00:00
'L_MESSAGE_BODY_EXPLAIN' => ( intval ( $config [ 'max_post_chars' ])) ? sprintf ( $user -> lang [ 'MESSAGE_BODY_EXPLAIN' ], intval ( $config [ 'max_post_chars' ])) : '' ,
2002-10-28 00:08:18 +00:00
2003-02-27 23:37:02 +00:00
'FORUM_NAME' => $forum_name ,
'FORUM_DESC' => ( ! empty ( $forum_desc )) ? strip_tags ( $forum_desc ) : '' ,
'TOPIC_TITLE' => $topic_title ,
2003-04-15 23:12:28 +00:00
'MODERATORS' => ( sizeof ( $moderators )) ? implode ( ', ' , $moderators [ $forum_id ]) : '' ,
2003-06-26 16:46:17 +00:00
'USERNAME' => (( ! $preview && $mode != 'quote' ) || $preview ) ? stripslashes ( $username ) : '' ,
2003-03-10 19:39:50 +00:00
'SUBJECT' => $post_subject ,
2003-02-27 23:37:02 +00:00
'MESSAGE' => trim ( $post_text ),
2003-06-24 16:46:30 +00:00
'PREVIEW_SUBJECT' => ( $preview && ! sizeof ( $error )) ? $preview_subject : '' ,
'PREVIEW_MESSAGE' => ( $preview && ! sizeof ( $error )) ? $preview_message : '' ,
'PREVIEW_SIGNATURE' => ( $preview && ! sizeof ( $error )) ? $preview_signature : '' ,
2003-02-27 23:37:02 +00:00
'HTML_STATUS' => ( $html_status ) ? $user -> lang [ 'HTML_IS_ON' ] : $user -> lang [ 'HTML_IS_OFF' ],
'BBCODE_STATUS' => ( $bbcode_status ) ? sprintf ( $user -> lang [ 'BBCODE_IS_ON' ], '<a href="' . " faq. $phpEx $SID &mode=bbcode " . '" target="_phpbbcode">' , '</a>' ) : sprintf ( $user -> lang [ 'BBCODE_IS_OFF' ], '<a href="' . " faq. $phpEx $SID &mode=bbcode " . '" target="_phpbbcode">' , '</a>' ),
'IMG_STATUS' => ( $img_status ) ? $user -> lang [ 'IMAGES_ARE_ON' ] : $user -> lang [ 'IMAGES_ARE_OFF' ],
'FLASH_STATUS' => ( $flash_status ) ? $user -> lang [ 'FLASH_IS_ON' ] : $user -> lang [ 'FLASH_IS_OFF' ],
'SMILIES_STATUS' => ( $smilies_status ) ? $user -> lang [ 'SMILIES_ARE_ON' ] : $user -> lang [ 'SMILIES_ARE_OFF' ],
2003-04-11 19:51:38 +00:00
'MINI_POST_IMG' => $user -> img ( 'icon_post' , $user -> lang [ 'POST' ]),
2003-02-27 23:37:02 +00:00
'POST_DATE' => ( $post_time ) ? $user -> format_date ( $post_time ) : '' ,
2003-06-24 16:46:30 +00:00
'ERROR' => ( sizeof ( $error )) ? implode ( '<br />' , $error ) : '' ,
2003-02-27 23:37:02 +00:00
'U_VIEW_FORUM' => " viewforum. $phpEx $SID &f= " . $forum_id ,
2003-06-17 19:34:17 +00:00
'U_VIEWTOPIC' => ( $mode != 'post' ) ? " viewtopic. $phpEx $SID & $forum_id &t= $topic_id " : '' ,
'U_REVIEW_TOPIC' => ( $mode != 'post' ) ? " posting. $phpEx $SID &mode=topicreview&f= $forum_id &t= $topic_id " : '' ,
2003-02-27 23:37:02 +00:00
2003-06-23 14:00:57 +00:00
'S_DISPLAY_PREVIEW' => ( $preview && ! sizeof ( $error )),
2003-02-28 12:57:10 +00:00
'S_DISPLAY_REVIEW' => ( $mode == 'reply' || $mode == 'quote' ) ? true : false ,
2003-06-26 16:46:17 +00:00
'S_DISPLAY_USERNAME' => ( $user -> data [ 'user_id' ] == ANONYMOUS || ( $mode == 'edit' && $post_username != '' )) ? true : false ,
2003-02-27 23:37:02 +00:00
'S_SHOW_TOPIC_ICONS' => $s_topic_icons ,
2003-06-17 19:34:17 +00:00
'S_DELETE_ALLOWED' => ( $mode == 'edit' && (( $post_id == $topic_last_post_id && $poster_id == $user -> data [ 'user_id' ] && $auth -> acl_get ( 'f_delete' , $forum_id )) || $auth -> acl_get ( 'm_delete' , $forum_id ))) ? true : false ,
2003-02-27 23:37:02 +00:00
'S_HTML_ALLOWED' => $html_status ,
2002-10-30 00:57:27 +00:00
'S_HTML_CHECKED' => ( $html_checked ) ? 'checked="checked"' : '' ,
2003-02-27 23:37:02 +00:00
'S_BBCODE_ALLOWED' => $bbcode_status ,
2002-10-30 00:57:27 +00:00
'S_BBCODE_CHECKED' => ( $bbcode_checked ) ? 'checked="checked"' : '' ,
2003-02-27 23:37:02 +00:00
'S_SMILIES_ALLOWED' => $smilies_status ,
2002-10-30 00:57:27 +00:00
'S_SMILIES_CHECKED' => ( $smilies_checked ) ? 'checked="checked"' : '' ,
2003-06-17 19:34:17 +00:00
'S_SIG_ALLOWED' => ( $auth -> acl_get ( 'f_sigs' , $forum_id ) && $config [ 'allow_sig' ]) ? true : false ,
2002-10-30 00:57:27 +00:00
'S_SIGNATURE_CHECKED' => ( $sig_checked ) ? 'checked="checked"' : '' ,
2003-02-27 23:37:02 +00:00
'S_NOTIFY_ALLOWED' => ( $user -> data [ 'user_id' ] != ANONYMOUS ) ? true : false ,
2002-10-30 00:57:27 +00:00
'S_NOTIFY_CHECKED' => ( $notify_checked ) ? 'checked="checked"' : '' ,
2003-06-17 19:34:17 +00:00
'S_LOCK_TOPIC_ALLOWED' => (( $mode == 'edit' || $mode == 'reply' || $mode == 'quote' ) && $auth -> acl_get ( 'm_lock' , $forum_id )) ? true : false ,
2003-02-27 23:37:02 +00:00
'S_LOCK_TOPIC_CHECKED' => ( $lock_topic_checked ) ? 'checked="checked"' : '' ,
2003-06-17 19:34:17 +00:00
'S_LOCK_POST_ALLOWED' => ( $mode == 'edit' && $auth -> acl_get ( 'm_edit' , $forum_id )) ? true : false ,
2003-04-12 14:30:21 +00:00
'S_LOCK_POST_CHECKED' => ( $lock_post_checked ) ? 'checked="checked"' : '' ,
2003-02-27 23:37:02 +00:00
'S_MAGIC_URL_CHECKED' => ( $urls_checked ) ? 'checked="checked"' : '' ,
'S_TYPE_TOGGLE' => $topic_type_toggle ,
2003-06-17 19:34:17 +00:00
'S_SAVE_ALLOWED' => ( $auth -> acl_get ( 'f_save' , $forum_id )) ? true : false ,
2003-03-22 15:48:46 +00:00
'S_FORM_ENCTYPE' => $form_enctype ,
2003-02-27 23:37:02 +00:00
'S_POST_ACTION' => $s_action ,
2003-03-10 19:39:50 +00:00
'S_HIDDEN_FIELDS' => $s_hidden_fields )
2001-06-13 17:36:58 +00:00
);
2003-03-10 19:39:50 +00:00
// Poll entry
2003-06-17 19:34:17 +00:00
if (( $mode == 'post' || ( $mode == 'edit' && $post_id == $topic_first_post_id && empty ( $poll_last_vote ))) && ( $auth -> acl_get ( 'f_poll' , $forum_id ) || $auth -> acl_get ( 'm_edit' , $forum_id )))
2003-03-10 19:39:50 +00:00
{
$template -> assign_vars ( array (
2003-06-17 19:34:17 +00:00
'S_SHOW_POLL_BOX' => true ,
'S_POLL_DELETE' => ( $mode == 'edit' && ! empty ( $poll_options ) && (( empty ( $poll_last_vote ) && $poster_id == $user -> data [ 'user_id' ] && $auth -> acl_get ( 'f_delete' , $forum_id )) || $auth -> acl_get ( 'm_delete' , $forum_id ))) ? true : false ,
2003-03-10 19:39:50 +00:00
'L_POLL_OPTIONS_EXPLAIN' => sprintf ( $user -> lang [ 'POLL_OPTIONS_EXPLAIN' ], $config [ 'max_poll_options' ]),
2003-06-17 19:34:17 +00:00
'POLL_TITLE' => $poll_title ,
'POLL_OPTIONS' => ( ! empty ( $poll_options )) ? implode ( " \n " , $poll_options ) : '' ,
'POLL_MAX_OPTIONS' => ( ! empty ( $poll_max_options )) ? $poll_max_options : 1 ,
'POLL_LENGTH' => $poll_length )
2003-03-10 19:39:50 +00:00
);
}
2003-06-29 10:59:36 +00:00
else if ( $mode == 'edit' && ! empty ( $poll_last_vote ) && ( $auth -> acl_get ( 'f_poll' , $forum_id ) || $auth -> acl_get ( 'm_edit' , $forum_id )))
{
$template -> assign_vars ( array (
'S_POLL_DELETE' => ( $mode == 'edit' && ! empty ( $poll_options ) && ( $auth -> acl_get ( 'f_delete' , $forum_id ) || $auth -> acl_get ( 'm_delete' , $forum_id ))) ? true : false )
);
}
2003-03-10 19:39:50 +00:00
2003-03-22 15:48:46 +00:00
// Attachment entry
2003-06-17 19:34:17 +00:00
if ( $auth -> acl_get ( 'f_attach' , $forum_id ) || $auth -> acl_get ( 'm_edit' , $forum_id ))
2003-03-22 15:48:46 +00:00
{
$template -> assign_vars ( array (
2003-06-17 19:34:17 +00:00
'S_SHOW_ATTACH_BOX' => true )
2003-03-22 15:48:46 +00:00
);
2003-05-01 18:24:18 +00:00
if ( count ( $message_parser -> attachment_data ))
2003-03-22 15:48:46 +00:00
{
$template -> assign_vars ( array (
2003-06-17 19:34:17 +00:00
'S_HAS_ATTACHMENTS' => true )
2003-03-22 15:48:46 +00:00
);
2003-05-01 18:24:18 +00:00
$count = 0 ;
foreach ( $message_parser -> attachment_data as $attach_row )
2003-03-22 15:48:46 +00:00
{
2003-05-01 18:24:18 +00:00
$hidden = '' ;
$attach_row [ 'real_filename' ] = stripslashes ( $attach_row [ 'real_filename' ]);
foreach ( $attach_row as $key => $value )
2003-03-22 15:48:46 +00:00
{
2003-05-01 18:24:18 +00:00
$hidden .= '<input type="hidden" name="attachment_data[' . $count . '][' . $key . ']" value="' . $value . '" />' ;
2003-03-22 15:48:46 +00:00
}
2003-05-01 18:24:18 +00:00
2003-06-17 19:34:17 +00:00
$download_link = ( $attach_row [ 'attach_id' ] == '-1' ) ? $config [ 'upload_dir' ] . '/' . $attach_row [ 'physical_filename' ] : $phpbb_root_path . " download. $phpEx $SID &id= " . intval ( $attach_row [ 'attach_id' ]);
2003-05-01 18:24:18 +00:00
2003-03-22 15:48:46 +00:00
$template -> assign_block_vars ( 'attach_row' , array (
2003-06-17 19:34:17 +00:00
'FILENAME' => $attach_row [ 'real_filename' ],
'ATTACH_FILENAME' => $attach_row [ 'physical_filename' ],
'FILE_COMMENT' => stripslashes ( htmlspecialchars ( $attach_row [ 'comment' ])),
'ATTACH_ID' => $attach_row [ 'attach_id' ],
'ASSOC_INDEX' => $count ,
2003-03-22 15:48:46 +00:00
'U_VIEW_ATTACHMENT' => $download_link ,
2003-06-17 19:34:17 +00:00
'S_HIDDEN' => $hidden )
2003-03-22 15:48:46 +00:00
);
2003-05-01 18:24:18 +00:00
$count ++ ;
2003-03-22 15:48:46 +00:00
}
}
$template -> assign_vars ( array (
2003-06-17 19:34:17 +00:00
'FILE_COMMENT' => stripslashes ( htmlspecialchars ( $message_parser -> filename_data [ 'filecomment' ])),
'FILESIZE' => $config [ 'max_filesize' ],
'FILENAME' => $message_parser -> filename_data [ 'filename' ])
2003-03-22 15:48:46 +00:00
);
}
2002-10-04 13:09:10 +00:00
// Output page ...
2003-05-03 23:58:45 +00:00
page_header ( $page_title );
2002-10-04 13:09:10 +00:00
$template -> set_filenames ( array (
2002-11-21 01:35:53 +00:00
'body' => 'posting_body.html' )
2002-10-04 13:09:10 +00:00
);
2003-02-27 23:37:02 +00:00
make_jumpbox ( 'viewforum.' . $phpEx );
2001-10-16 11:12:32 +00:00
2003-02-28 12:57:10 +00:00
// Topic review
if ( $mode == 'reply' || $mode == 'quote' )
{
2003-06-23 14:00:57 +00:00
topic_review ( $topic_id , $forum_id , true );
2003-02-28 12:57:10 +00:00
}
2003-05-03 23:58:45 +00:00
page_footer ();
2001-06-13 17:36:58 +00:00
2003-06-23 14:00:57 +00:00
// ---------
2003-04-18 13:07:19 +00:00
// FUNCTIONS
2003-06-23 14:00:57 +00:00
//
// Submit Post
function submit_post ( $mode , $message , $subject , $username , $topic_type , $bbcode_uid , $poll , $attach_data , $filename_data , $data )
{
global $db , $auth , $user , $config , $phpEx , $SID , $template ;
$current_time = time ();
$db -> sql_transaction ();
2003-06-26 16:46:17 +00:00
$poster_id = ( $mode == 'edit' ) ? $data [ 'poster_id' ] : ( int ) $user -> data [ 'user_id' ];
$post_username = (( $mode == 'edit' && $username != '' && $data [ 'poster_id' ] == ANONYMOUS ) || ( $mode != 'edit' && $user -> data [ 'user_id' ] == ANONYMOUS )) ? stripslashes ( $username ) : '' ;
2003-07-15 16:47:36 +00:00
$stat_username = ( $mode != 'edit' ) ? (( $user -> data [ 'user_id' ] == ANONYMOUS && ! empty ( $username )) ? stripslashes ( $username ) : stripslashes ( $user -> data [ 'username' ])) : (( $username ) ? stripslashes ( $username ) : '' );
2003-06-26 16:46:17 +00:00
2003-06-23 14:00:57 +00:00
// Initial Topic table info
if ( $mode == 'post' || ( $mode == 'edit' && $data [ 'topic_first_post_id' ] == $data [ 'post_id' ]))
{
$topic_sql = array (
'forum_id' => ( $topic_type == POST_GLOBAL ) ? 0 : $data [ 'forum_id' ],
'topic_title' => stripslashes ( $subject ),
'topic_time' => $current_time ,
'topic_type' => $topic_type ,
2003-07-02 22:41:05 +00:00
'topic_approved' => ( $auth -> acl_get ( 'f_moderate' , $data [ 'forum_id' ])) ? 0 : 1 ,
2003-06-23 14:00:57 +00:00
'icon_id' => $data [ 'icon_id' ],
'topic_attachment' => ( sizeof ( $filename_data [ 'physical_filename' ])) ? 1 : 0
);
if ( ! empty ( $poll [ 'poll_options' ]))
{
$topic_sql = array_merge ( $topic_sql , array (
'poll_title' => stripslashes ( $poll [ 'poll_title' ]),
'poll_start' => ( $poll [ 'poll_start' ]) ? $poll [ 'poll_start' ] : $current_time ,
'poll_max_options' => $poll [ 'poll_max_options' ],
'poll_length' => $poll [ 'poll_length' ] * 86400 )
);
}
if ( $mode == 'post' )
{
$topic_sql = array_merge ( $topic_sql , array (
2003-06-26 16:46:17 +00:00
'topic_poster' => $poster_id ,
'topic_first_poster_name' => $stat_username )
2003-06-23 14:00:57 +00:00
);
}
$sql = ( $mode == 'post' ) ? 'INSERT INTO ' . TOPICS_TABLE . ' ' . $db -> sql_build_array ( 'INSERT' , $topic_sql ) : 'UPDATE ' . TOPICS_TABLE . ' SET ' . $db -> sql_build_array ( 'UPDATE' , $topic_sql ) . ' WHERE topic_id = ' . $data [ 'topic_id' ];
$db -> sql_query ( $sql );
$data [ 'topic_id' ] = ( $mode == 'post' ) ? $db -> sql_nextid () : $data [ 'topic_id' ];
}
// Post table info
$post_sql = array (
'topic_id' => $data [ 'topic_id' ],
'forum_id' => ( $topic_type == POST_GLOBAL ) ? 0 : $data [ 'forum_id' ],
2003-06-26 16:46:17 +00:00
'poster_id' => $poster_id ,
'post_username' => $post_username ,
2003-06-23 14:00:57 +00:00
'post_subject' => stripslashes ( $subject ),
'icon_id' => $data [ 'icon_id' ],
'poster_ip' => $user -> ip ,
2003-07-02 22:41:05 +00:00
'post_approved' => ( $auth -> acl_get ( 'f_moderate' , $data [ 'forum_id' ])) ? 0 : 1 ,
2003-06-23 14:00:57 +00:00
'post_edit_time' => ( $mode == 'edit' && $data [ 'poster_id' ] == $user -> data [ 'user_id' ]) ? $current_time : 0 ,
'enable_sig' => $data [ 'enable_sig' ],
'enable_bbcode' => $data [ 'enable_bbcode' ],
'enable_html' => $data [ 'enable_html' ],
'enable_smilies' => $data [ 'enable_smilies' ],
'enable_magic_url' => $data [ 'enable_urls' ],
'bbcode_uid' => $bbcode_uid ,
'bbcode_bitfield' => $data [ 'bbcode_bitfield' ],
'post_edit_locked' => $data [ 'post_edit_locked' ],
'post_text' => $message
);
if ( $mode != 'edit' )
{
$post_sql [ 'post_time' ] = $current_time ;
}
if ( $mode != 'edit' || $data [ 'message_md5' ] != $data [ 'post_checksum' ])
{
$post_sql = array_merge ( $post_sql , array (
'post_checksum' => $data [ 'message_md5' ],
'post_encoding' => $user -> lang [ 'ENCODING' ])
);
}
if ( $mode == 'edit' )
{
$sql = 'UPDATE ' . POSTS_TABLE . '
SET ' . $db->sql_build_array(' UPDATE ' , $post_sql ) .
2003-06-26 20:40:32 +00:00
(( $data [ 'poster_id' ] == $user -> data [ 'user_id' ] && $data [ 'post_id' ] != $data [ 'topic_last_post_id' ]) ? ' , post_edit_count = post_edit_count + 1' : '' ) . '
2003-06-23 14:00:57 +00:00
WHERE post_id = ' . $data[' post_id ' ];
}
else
{
$sql = 'INSERT INTO ' . POSTS_TABLE . ' ' .
$db -> sql_build_array ( 'INSERT' , $post_sql );
}
$db -> sql_query ( $sql );
$data [ 'post_id' ] = ( $mode == 'edit' ) ? $data [ 'post_id' ] : $db -> sql_nextid ();
// Submit Poll
if ( ! empty ( $poll [ 'poll_options' ]))
{
$cur_poll_options = array ();
if ( $poll [ 'poll_start' ] && $mode == 'edit' )
{
$sql = 'SELECT * FROM ' . POLL_OPTIONS_TABLE . '
WHERE topic_id = ' . $data[' topic_id '] . '
ORDER BY poll_option_id ' ;
$result = $db -> sql_query ( $sql );
while ( $cur_poll_options [] = $db -> sql_fetchrow ( $result ));
$db -> sql_freeresult ( $result );
}
for ( $i = 0 ; $i < sizeof ( $poll [ 'poll_options' ]); $i ++ )
{
if ( trim ( $poll [ 'poll_options' ][ $i ]))
{
if ( empty ( $cur_poll_options [ $i ]))
{
$sql = 'INSERT INTO ' . POLL_OPTIONS_TABLE . " (poll_option_id, topic_id, poll_option_text)
VALUES ( $i , " . $data['topic_id'] . " , '" . $db->sql_escape($poll[' poll_options '][$i]) . "' ) " ;
$db -> sql_query ( $sql );
}
else if ( $poll [ 'poll_options' ][ $i ] != $cur_poll_options [ $i ])
{
$sql = " UPDATE " . POLL_OPTIONS_TABLE . "
SET poll_option_text = '" . $db->sql_escape($poll[' poll_options '][$i]) . "'
WHERE poll_option_id = " . $cur_poll_options[$i] ['poll_option_id'] . "
AND topic_id = " . $data['topic_id'] ;
$db -> sql_query ( $sql );
}
}
}
if ( sizeof ( $poll [ 'poll_options' ]) < sizeof ( $cur_poll_options ))
{
$sql = 'DELETE FROM ' . POLL_OPTIONS_TABLE . '
WHERE poll_option_id > ' . sizeof($poll[' poll_options ']) . '
AND topic_id = ' . $data[' topic_id ' ];
$db -> sql_query ( $sql );
}
}
// Submit Attachments
if ( count ( $attach_data ) && ! empty ( $data [ 'post_id' ]) && ( $mode == 'post' || $mode == 'reply' || $mode == 'edit' ))
{
foreach ( $attach_data as $attach_row )
{
if ( $attach_row [ 'attach_id' ] != '-1' )
{
// update entry in db if attachment already stored in db and filespace
$attach_sql = array (
'comment' => trim ( $attach_row [ 'comment' ])
);
$sql = 'UPDATE ' . ATTACHMENTS_DESC_TABLE . '
SET ' . $db->sql_build_array(' UPDATE ', $attach_sql) . '
WHERE attach_id = ' . (int) $attach_row[' attach_id ' ];
$db -> sql_query ( $sql );
}
else
{
// insert attachment into db
$attach_sql = array (
'physical_filename' => $attach_row [ 'physical_filename' ],
'real_filename' => $attach_row [ 'real_filename' ],
'comment' => trim ( $attach_row [ 'comment' ]),
'extension' => $attach_row [ 'extension' ],
'mimetype' => $attach_row [ 'mimetype' ],
'filesize' => $attach_row [ 'filesize' ],
'filetime' => $attach_row [ 'filetime' ],
'thumbnail' => $attach_row [ 'thumbnail' ]
);
$sql = 'INSERT INTO ' . ATTACHMENTS_DESC_TABLE . ' ' .
$db -> sql_build_array ( 'INSERT' , $attach_sql );
$db -> sql_query ( $sql );
$attach_sql = array (
'attach_id' => $db -> sql_nextid (),
'post_id' => $data [ 'post_id' ],
'privmsgs_id' => 0 ,
2003-06-26 16:46:17 +00:00
'user_id_from' => $poster_id ,
2003-06-23 14:00:57 +00:00
'user_id_to' => 0
);
$sql = 'INSERT INTO ' . ATTACHMENTS_TABLE . ' ' .
$db -> sql_build_array ( 'INSERT' , $attach_sql );
$db -> sql_query ( $sql );
}
}
if ( count ( $attach_data ))
{
$sql = 'UPDATE ' . POSTS_TABLE . '
SET post_attachment = 1
WHERE post_id = ' . $data[' post_id ' ];
$db -> sql_query ( $sql );
$sql = 'UPDATE ' . TOPICS_TABLE . '
SET topic_attachment = 1
WHERE topic_id = ' . $data[' topic_id ' ];
$db -> sql_query ( $sql );
}
}
// Fulltext parse
if ( $data [ 'message_md5' ] != $data [ 'post_checksum' ])
{
$search = new fulltext_search ();
$result = $search -> add ( $mode , $data [ 'post_id' ], $message , $subject );
}
// Sync forums, topics and users ...
if ( $mode != 'edit' )
{
if ( $topic_type != POST_GLOBAL )
{
$forum_topics_sql = ( $mode == 'post' ) ? ', forum_topics = forum_topics + 1, forum_topics_real = forum_topics_real + 1' : '' ;
$forum_sql = array (
'forum_last_post_id' => $data [ 'post_id' ],
'forum_last_post_time' => $current_time ,
2003-06-26 16:46:17 +00:00
'forum_last_poster_id' => $poster_id ,
'forum_last_poster_name' => $stat_username ,
2003-06-23 14:00:57 +00:00
);
$sql = 'UPDATE ' . FORUMS_TABLE . '
SET ' . $db->sql_build_array(' UPDATE ', $forum_sql) . ' , forum_posts = forum_posts + 1 ' . $forum_topics_sql . '
WHERE forum_id = ' . $data[' forum_id ' ];
$db -> sql_query ( $sql );
}
// Update topic: first/last post info, replies
$topic_sql = array (
'topic_last_post_id' => $data [ 'post_id' ],
'topic_last_post_time' => $current_time ,
2003-06-26 16:46:17 +00:00
'topic_last_poster_id' => $poster_id ,
'topic_last_poster_name' => $stat_username
2003-06-23 14:00:57 +00:00
);
if ( $mode == 'post' )
{
$topic_sql = array_merge ( $topic_sql , array (
'topic_first_post_id' => $data [ 'post_id' ])
);
}
$topic_replies_sql = ( $mode == 'reply' || $mode == 'quote' ) ? ', topic_replies = topic_replies + 1, topic_replies_real = topic_replies_real + 1' : '' ;
$sql = 'UPDATE ' . TOPICS_TABLE . '
SET ' . $db->sql_build_array(' UPDATE ', $topic_sql) . $topic_replies_sql . '
WHERE topic_id = ' . $data[' topic_id ' ];
$db -> sql_query ( $sql );
// Update user post count ... if appropriate
if ( $user -> data [ 'user_id' ] != ANONYMOUS && $auth -> acl_get ( 'f_postcount' , $data [ 'forum_id' ]))
{
$sql = 'UPDATE ' . USERS_TABLE . '
SET user_posts = user_posts + 1
WHERE user_id = ' . intval($user->data[' user_id ' ]);
$db -> sql_query ( $sql );
}
// post counts for index, etc.
if ( $mode == 'post' )
{
set_config ( 'num_topics' , $config [ 'num_topics' ] + 1 , TRUE );
}
set_config ( 'num_posts' , $config [ 'num_posts' ] + 1 , TRUE );
}
2003-06-26 20:40:32 +00:00
else if ( $mode == 'edit' && $data [ 'post_id' ] == $data [ 'topic_last_post_id' ] && $poster_id == ANONYMOUS )
{
$sql = 'UPDATE ' . TOPICS_TABLE . "
SET topic_last_poster_name = '$stat_username'
WHERE topic_id = " . $data['topic_id'] ;
$db -> sql_query ( $sql );
}
2003-06-23 14:00:57 +00:00
// Topic Notification
if (( $data [ 'notify_set' ] == 0 || $data [ 'notify_set' ] == - 1 ) && $data [ 'notify' ])
{
$sql = 'INSERT INTO ' . TOPICS_WATCH_TABLE . ' ( user_id , topic_id )
VALUES ( ' . $user->data[' user_id '] . ' , ' . $data[' topic_id '] . ' ) ' ;
$db -> sql_query ( $sql );
}
else if ( $data [ 'notify_set' ] == 1 && ! $data [ 'notify' ])
{
$sql = 'DELETE FROM ' . TOPICS_WATCH_TABLE . '
WHERE user_id = ' . $user->data[' user_id '] . '
AND topic_id = ' . $data[' topic_id ' ];
$db -> sql_query ( $sql );
}
// Mark this topic as read and posted to.
$mark_mode = ( $mode == 'post' || $mode == 'reply' || $mode == 'quote' ) ? 'post' : 'topic' ;
markread ( $mark_mode , $data [ 'forum_id' ], $data [ 'topic_id' ], $data [ 'post_time' ]);
$db -> sql_transaction ( 'commit' );
// Send Notifications
if ( $mode != 'edit' && $mode != 'delete' )
{
user_notification ( $mode , stripslashes ( $subject ), $data [ 'forum_id' ], $data [ 'topic_id' ], $data [ 'post_id' ]);
}
meta_refresh ( 3 , " viewtopic. $phpEx $SID &f= " . $data [ 'forum_id' ] . '&t=' . $data [ 'topic_id' ] . '&p=' . $data [ 'post_id' ] . '#' . $data [ 'post_id' ]);
2003-07-02 22:41:05 +00:00
$message = ( $auth -> acl_get ( 'f_moderate' , $data [ 'forum_id' ])) ? 'POST_STORED_MOD' : 'POST_STORED' ;
2003-06-23 14:00:57 +00:00
$message = $user -> lang [ $message ] . '<br /><br />' . sprintf ( $user -> lang [ 'VIEW_MESSAGE' ], '<a href="viewtopic.' . $phpEx . $SID . '&f=' . $data [ 'forum_id' ] . '&t=' . $data [ 'topic_id' ] . '&p=' . $data [ 'post_id' ] . '#' . $data [ 'post_id' ] . '">' , '</a>' ) . '<br /><br />' . sprintf ( $user -> lang [ 'RETURN_FORUM' ], '<a href="viewforum.' . $phpEx . $SID . '&f=' . $data [ 'forum_id' ] . '">' , '</a>' );
trigger_error ( $message );
}
// User Notification
function user_notification ( $mode , $subject , $forum_id , $topic_id , $post_id )
{
global $db , $user , $config , $phpEx ;
$topic_notification = ( $mode == 'reply' || $mode == 'quote' ) ? true : false ;
$newtopic_notification = ( $mode == 'post' ) ? true : false ;
if ( empty ( $censors ))
{
$censors = array ();
obtain_word_list ( $censors );
}
// Get banned User ID's
$sql = ' SELECT ban_userid
FROM ' . BANLIST_TABLE ;
$result = $db -> sql_query ( $sql );
$sql_ignore_users = ANONYMOUS . ', ' . $user -> data [ 'user_id' ];
while ( $row = $db -> sql_fetchrow ( $result ))
{
if ( isset ( $row [ 'ban_userid' ]))
{
$sql_ignore_users .= ', ' . $row [ 'ban_userid' ];
}
}
2003-07-06 18:46:52 +00:00
$notify_rows = $allowed_users = $user_ids = $delete_ids = array ();
//
if ( $topic_notification )
{
$sql = ' SELECT u . user_id , u . username , u . user_email , u . user_lang , t . topic_title , f . forum_name
FROM ' . TOPICS_WATCH_TABLE . ' tw , ' . TOPICS_TABLE . ' t , ' . USERS_TABLE . ' u , ' . FORUMS_TABLE . " f
WHERE tw . topic_id = $topic_id
AND tw . user_id NOT IN ( $sql_ignore_users )
AND tw . notify_status = 0
AND f . forum_id = $forum_id
AND t . topic_id = tw . topic_id
AND u . user_id = tw . user_id " ;
}
else if ( $newtopic_notification )
{
$sql = ' SELECT u . user_id , u . username , u . user_email , u . user_lang , f . forum_name
FROM ' . USERS_TABLE . ' u , ' . FORUMS_WATCH_TABLE . ' fw , ' . FORUMS_TABLE . " f
WHERE fw . forum_id = $forum_id
AND fw . user_id NOT IN ( $sql_ignore_users )
AND fw . notify_status = 0
AND f . forum_id = fw . forum_id
AND u . user_id = fw . user_id " ;
}
else
{
trigger_error ( 'WRONG_NOTIFICATION_MODE' );
}
2003-06-23 14:00:57 +00:00
$result = $db -> sql_query ( $sql );
2003-07-06 18:46:52 +00:00
if ( $row = $db -> sql_fetchrow ( $result ))
2003-06-23 14:00:57 +00:00
{
2003-07-06 18:46:52 +00:00
if ( $topic_notification )
{
decode_text ( $row [ 'topic_title' ]);
$topic_title = ( sizeof ( $censors )) ? preg_replace ( $censors [ 'match' ], $censors [ 'replace' ], $row [ 'topic_title' ]) : $row [ 'topic_title' ];
}
else
{
decode_text ( $subject );
$topic_title = ( sizeof ( $censors )) ? preg_replace ( $censors [ 'match' ], $censors [ 'replace' ], $subject ) : $subject ;
$forum_name = $row [ 'forum_name' ];
}
do
{
$user_ids [] = $row [ 'user_id' ];
$notify_rows [] = $row ;
}
while ( $row = $db -> sql_fetchrow ( $result ));
2003-06-23 14:00:57 +00:00
}
$db -> sql_freeresult ( $result );
2003-07-06 18:46:52 +00:00
if ( sizeof ( $user_ids ))
2003-06-23 14:00:57 +00:00
{
2003-07-06 18:46:52 +00:00
$sql = ' SELECT a . user_id
FROM ' . ACL_OPTIONS_TABLE . ' ao , ' . ACL_USERS_TABLE . " a
WHERE a . user_id IN ( " . implode(', ', $user_ids ) . " )
2003-06-23 14:00:57 +00:00
AND ao . auth_option_id = a . auth_option_id
AND ao . auth_option = 'f_read'
2003-07-06 18:46:52 +00:00
AND a . forum_id = $forum_id " ;
2003-06-23 14:00:57 +00:00
$result = $db -> sql_query ( $sql );
while ( $row = $db -> sql_fetchrow ( $result ))
{
$allowed_users [] = $row [ 'user_id' ];
}
$db -> sql_freeresult ( $result );
2003-07-06 18:46:52 +00:00
// Now grab group settings...
2003-06-23 14:00:57 +00:00
$sql = " SELECT ug.user_id, MIN(a.auth_setting) as min_setting
FROM " . USER_GROUP_TABLE . " ug , " . ACL_OPTIONS_TABLE . " ao , " . ACL_GROUPS_TABLE . " a
2003-07-06 18:46:52 +00:00
WHERE ug . user_id IN ( " . implode(', ', $user_ids ) . " )
2003-06-23 14:00:57 +00:00
AND a . group_id = ug . group_id
AND ao . auth_option_id = a . auth_option_id
AND ao . auth_option = 'f_read'
2003-07-06 18:46:52 +00:00
AND a . forum_id = $forum_id
GROUP BY ug . user_id " ;
2003-06-23 14:00:57 +00:00
$result = $db -> sql_query ( $sql );
while ( $row = $db -> sql_fetchrow ( $result ))
{
if ( $row [ 'min_setting' ] == 1 )
{
$allowed_users [] = $row [ 'user_id' ];
}
}
$db -> sql_freeresult ( $result );
$allowed_users = array_unique ( $allowed_users );
}
else
{
2003-07-06 18:46:52 +00:00
return ;
2003-06-23 14:00:57 +00:00
}
2003-07-06 18:46:52 +00:00
unset ( $user_ids );
2003-06-23 14:00:57 +00:00
$email_users = array ();
2003-07-06 18:46:52 +00:00
$update_watched_sql_topic = $update_watched_sql_forum = '' ;
2003-06-23 14:00:57 +00:00
//
2003-07-06 18:46:52 +00:00
$which_sql = ( $topic_notification ) ? 'update_watched_sql_topic' : 'update_watched_sql_forum' ;
foreach ( $notify_rows as $row )
2003-06-23 14:00:57 +00:00
{
2003-07-06 18:46:52 +00:00
if ( trim ( $row [ 'user_email' ]) != '' && in_array ( $row [ 'user_id' ], $allowed_users ))
2003-06-23 14:00:57 +00:00
{
2003-07-06 18:46:52 +00:00
$row [ 'email_template' ] = ( $topic_notification ) ? 'topic_notify' : 'newtopic_notify' ;
$email_users [] = $row ;
$$which_sql .= ( $$which_sql != '' ) ? ', ' . $row [ 'user_id' ] : $row [ 'user_id' ];
2003-06-23 14:00:57 +00:00
}
else
{
2003-07-06 18:46:52 +00:00
$delete_ids [] = $row [ 'user_id' ];
2003-06-23 14:00:57 +00:00
}
}
// Handle remaining Notifications (Forum)
if ( $topic_notification )
{
$already_notified = ( $update_watched_sql_topic == '' ) ? '' : $update_watched_sql_topic . ', ' ;
$already_notified .= ( $update_watched_sql_forum == '' ) ? '' : $update_watched_sql_forum . ', ' ;
$sql = ' SELECT u . user_id , u . username , u . user_email , u . user_lang , t . topic_title , f . forum_name
2003-07-06 18:46:52 +00:00
FROM ' . TOPICS_TABLE . ' t , ' . USERS_TABLE . ' u , ' . FORUMS_WATCH_TABLE . ' fw , ' . FORUMS_TABLE . " f
WHERE fw . forum_id = $forum_id
AND fw . user_id NOT IN ( $already_notified " . ((sizeof( $delete_ids )) ? implode(',', $delete_ids ) . ',' : '') . " $sql_ignore_users )
2003-06-23 14:00:57 +00:00
AND fw . notify_status = 0
2003-07-06 18:46:52 +00:00
AND t . topic_id = $topic_id
2003-06-23 14:00:57 +00:00
AND f . forum_id = fw . forum_id
2003-07-06 18:46:52 +00:00
AND u . user_id = fw . user_id " ;
2003-06-23 14:00:57 +00:00
$result = $db -> sql_query ( $sql );
if ( $row = $db -> sql_fetchrow ( $result ))
{
$forum_name = $row [ 'forum_name' ];
do
{
2003-07-06 18:46:52 +00:00
if ( trim ( $row [ 'user_email' ]) != '' && in_array ( $row [ 'user_id' ], $allowed_users ))
2003-06-23 14:00:57 +00:00
{
$row [ 'email_template' ] = 'forum_notify' ;
$email_users [] = $row ;
$update_watched_sql_forum .= ( $update_watched_sql_forum != '' ) ? ', ' . $row [ 'user_id' ] : $row [ 'user_id' ];
}
}
while ( $row = $db -> sql_fetchrow ( $result ));
}
2003-07-06 18:46:52 +00:00
$db -> sql_freeresult ( $result );
2003-06-23 14:00:57 +00:00
}
// We are using an email queue here, no emails are sent now, only queued.
if ( sizeof ( $email_users ) && $config [ 'email_enable' ])
{
2003-08-30 12:21:31 +00:00
global $phpbb_root_path ;
2003-06-23 14:00:57 +00:00
@ set_time_limit ( 60 );
include ( $phpbb_root_path . 'includes/emailer.' . $phpEx );
$emailer = new emailer ( true ); // use queue
$email_list_ary = array ();
foreach ( $email_users as $row )
{
$pos = sizeof ( $email_list_ary [ $row [ 'email_template' ]]);
$email_list_ary [ $row [ 'email_template' ]][ $pos ][ 'email' ] = $row [ 'user_email' ];
$email_list_ary [ $row [ 'email_template' ]][ $pos ][ 'name' ] = $row [ 'username' ];
$email_list_ary [ $row [ 'email_template' ]][ $pos ][ 'lang' ] = $row [ 'user_lang' ];
}
unset ( $email_users );
foreach ( $email_list_ary as $email_template => $email_list )
{
foreach ( $email_list as $addr )
{
$emailer -> template ( $email_template , $addr [ 'lang' ]);
$emailer -> replyto ( $config [ 'board_email' ]);
$emailer -> to ( $addr [ 'email' ], $addr [ 'name' ]);
$emailer -> assign_vars ( array (
'EMAIL_SIG' => str_replace ( '<br />' , " \n " , " -- \n " . $config [ 'board_email_sig' ]),
'SITENAME' => $config [ 'sitename' ],
'TOPIC_TITLE' => trim ( $topic_title ),
'FORUM_NAME' => trim ( $forum_name ),
2003-07-06 18:46:52 +00:00
'U_TOPIC' => generate_board_url () . '/viewtopic.' . $phpEx . '?t=' . $topic_id . '&p=' . $post_id . '#' . $post_id ,
'U_FORUM' => generate_board_url () . '/viewforum.' . $phpEx . '?f=' . $forum_id ,
'U_STOP_WATCHING_TOPIC' => generate_board_url () . '/viewtopic.' . $phpEx . '?t=' . $topic_id . '&unwatch=topic' ,
'U_STOP_WATCHING_FORUM' => generate_board_url () . '/viewforum.' . $phpEx . '?f=' . $forum_id . '&unwatch=forum' )
2003-06-23 14:00:57 +00:00
);
$emailer -> send ();
$emailer -> reset ();
}
}
2003-07-06 18:46:52 +00:00
$emailer -> mail_queue -> save ();
2003-06-23 14:00:57 +00:00
}
unset ( $email_list_ary );
if ( $update_watched_sql_topic != '' )
{
2003-08-13 16:58:48 +00:00
$sql = 'UPDATE ' . TOPICS_WATCH_TABLE . "
2003-06-23 14:00:57 +00:00
SET notify_status = 1
2003-08-13 16:58:48 +00:00
WHERE topic_id = $topic_id
2003-06-23 14:00:57 +00:00
AND user_id IN ( " . $update_watched_sql_topic . " ) " ;
$db -> sql_query ( $sql );
}
if ( $update_watched_sql_forum != '' )
{
2003-08-13 16:58:48 +00:00
$sql = 'UPDATE ' . FORUMS_WATCH_TABLE . "
2003-06-23 14:00:57 +00:00
SET notify_status = 1
2003-08-13 16:58:48 +00:00
WHERE forum_id = $forum_id
2003-06-23 14:00:57 +00:00
AND user_id IN ( " . $update_watched_sql_forum . " ) " ;
$db -> sql_query ( $sql );
}
2003-08-13 16:58:48 +00:00
if ( sizeof ( $delete_ids ))
{
$sql = " DELETE FROM " . TOPICS_WATCH_TABLE . "
WHERE topic_id = $topic_id
AND user_id IN ( " . implode(', ', $delete_ids ) . " ) " ;
$db -> sql_query ( $sql );
}
2003-06-23 14:00:57 +00:00
}
2003-04-18 13:07:19 +00:00
// Topic Review
2003-06-23 14:00:57 +00:00
function topic_review ( $topic_id , $forum_id , $is_inline_review = false )
2003-04-18 13:07:19 +00:00
{
2003-05-17 17:33:44 +00:00
global $template ;
if ( $is_inline_review )
{
$template -> assign_vars ( array (
'S_DISPLAY_INLINE' => true )
);
return ;
}
2003-04-23 22:00:32 +00:00
global $user , $auth , $db , $template , $bbcode ;
2003-04-24 18:21:29 +00:00
global $censors , $config , $phpbb_root_path , $phpEx , $SID ;
2003-04-18 13:07:19 +00:00
// Define censored word matches
if ( empty ( $censors ))
{
$censors = array ();
obtain_word_list ( $censors );
}
2003-05-17 17:33:44 +00:00
// Get topic info ...
2003-07-22 14:01:41 +00:00
$sql = ' SELECT t . topic_title , f . forum_id , f . forum_style
2003-06-17 19:34:17 +00:00
FROM ' . TOPICS_TABLE . ' t , ' . FORUMS_TABLE . " f
2003-05-17 17:33:44 +00:00
WHERE t . topic_id = $topic_id
2003-06-23 14:00:57 +00:00
AND f . forum_id IN ( t . forum_id , $forum_id ) " ;
2003-05-17 17:33:44 +00:00
$result = $db -> sql_query ( $sql );
2003-04-18 13:07:19 +00:00
2003-05-17 17:33:44 +00:00
if ( ! ( $row = $db -> sql_fetchrow ( $result )))
{
trigger_error ( $user -> lang [ 'NO_TOPIC' ]);
}
2003-04-18 13:07:19 +00:00
2003-05-23 16:15:03 +00:00
$forum_id = $row [ 'forum_id' ];
2003-05-17 17:33:44 +00:00
$topic_title = $row [ 'topic_title' ];
2003-04-18 13:07:19 +00:00
2003-07-22 14:01:41 +00:00
$user -> setup ( false , $row [ 'forum_style' ]);
2003-05-17 17:33:44 +00:00
if ( ! $auth -> acl_get ( 'f_read' , $forum_id ))
{
trigger_error ( $user -> lang [ 'SORRY_AUTH_READ' ]);
2003-04-18 13:07:19 +00:00
}
2003-05-17 17:33:44 +00:00
if ( count ( $censors [ 'match' ]))
2003-04-18 13:07:19 +00:00
{
2003-05-17 17:33:44 +00:00
$topic_title = preg_replace ( $censors [ 'match' ], $censors [ 'replace' ], $topic_title );
2003-04-18 13:07:19 +00:00
}
2003-05-17 17:33:44 +00:00
$page_title = $user -> lang [ 'TOPIC_REVIEW' ] . ' - ' . $topic_title ;
2003-04-18 13:07:19 +00:00
// Go ahead and pull all data for this topic
2003-05-22 01:35:48 +00:00
$sql = ' SELECT u . username , u . user_id , p . post_id , p . post_username , p . post_subject , p . post_text , p . enable_smilies , p . bbcode_uid , p . bbcode_bitfield , p . post_time
FROM ' . POSTS_TABLE . ' p , ' . USERS_TABLE . " u
2003-04-18 13:07:19 +00:00
WHERE p . topic_id = $topic_id
AND p . poster_id = u . user_id
2003-05-22 01:35:48 +00:00
" . ((! $auth->acl_get ('m_approve', $forum_id )) ? 'AND p.post_approved = 1' : '') . '
ORDER BY p . post_time DESC ' ;
2003-04-18 13:07:19 +00:00
$result = $db -> sql_query_limit ( $sql , $config [ 'posts_per_page' ]);
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
2003-05-22 01:35:48 +00:00
if ( ! $row = $db -> sql_fetchrow ( $result ))
2003-04-18 13:07:19 +00:00
{
2003-05-22 01:35:48 +00:00
trigger_error ( $user -> lang [ 'NO_TOPIC' ]);
}
2003-04-18 13:07:19 +00:00
2003-05-22 01:35:48 +00:00
$bbcode_bitfield = 0 ;
do
{
$rowset [] = $row ;
$bbcode_bitfield |= $row [ 'bbcode_bitfield' ];
}
while ( $row = $db -> sql_fetchrow ( $result ));
$db -> sql_freeresult ( $result );
2003-04-18 13:07:19 +00:00
2003-05-22 01:35:48 +00:00
// Instantiate BBCode class
if ( ! isset ( $bbcode ) && $bbcode_bitfield )
{
include ( $phpbb_root_path . 'includes/bbcode.' . $phpEx );
$bbcode = new bbcode ( $bbcode_bitfield );
}
2003-04-18 13:07:19 +00:00
2003-05-22 01:35:48 +00:00
foreach ( $rowset as $i => $row )
{
$poster_id = $row [ 'user_id' ];
$poster = $row [ 'username' ];
2003-04-18 13:07:19 +00:00
2003-05-22 01:35:48 +00:00
// Handle anon users posting with usernames
if ( $poster_id == ANONYMOUS && $row [ 'post_username' ] != '' )
{
$poster = $row [ 'post_username' ];
$poster_rank = $user -> lang [ 'GUEST' ];
}
2003-04-18 13:07:19 +00:00
2003-05-22 01:35:48 +00:00
$post_subject = ( $row [ 'post_subject' ] != '' ) ? $row [ 'post_subject' ] : '' ;
2003-06-17 19:34:17 +00:00
$message = ( empty ( $row [ 'enable_smilies' ]) || empty ( $config [ 'allow_smilies' ])) ? preg_replace ( '#<!\-\- s(.*?) \-\-><img src="\{SMILE_PATH\}\/.*? \/><!\-\- s\1 \-\->#' , '\1' , $row [ 'post_text' ]) : str_replace ( '<img src="{SMILE_PATH}' , '<img src="' . $phpbb_root_path . $config [ 'smilies_path' ], $row [ 'post_text' ]);
2003-04-18 13:07:19 +00:00
2003-05-22 01:35:48 +00:00
if ( $row [ 'bbcode_bitfield' ])
{
$bbcode -> bbcode_second_pass ( & $message , $row [ 'bbcode_uid' ], $row [ 'bbcode_bitfield' ]);
2003-04-18 13:07:19 +00:00
}
2003-05-22 01:35:48 +00:00
if ( count ( $censors [ 'match' ]))
{
$post_subject = preg_replace ( $censors [ 'match' ], $censors [ 'replace' ], $post_subject );
$message = preg_replace ( $censors [ 'match' ], $censors [ 'replace' ], $message );
}
$template -> assign_block_vars ( 'postrow' , array (
2003-05-23 16:15:03 +00:00
'MINI_POST_IMG' => $user -> img ( 'icon_post' , $user -> lang [ 'POST' ]),
'POSTER_NAME' => $poster ,
'POST_DATE' => $user -> format_date ( $row [ 'post_time' ]),
'POST_SUBJECT' => $post_subject ,
'POST_ID' => $row [ 'post_id' ],
'MESSAGE' => str_replace ( " \n " , '<br />' , $message ),
'U_QUOTE' => ( $auth -> acl_get ( 'f_quote' , $forum_id )) ? " javascript:addquote( " . $row [ 'post_id' ] . " , ' $poster ') " : '' ,
2003-05-22 01:35:48 +00:00
'S_ROW_COUNT' => $i )
);
unset ( $rowset [ $i ]);
2003-04-18 13:07:19 +00:00
}
2003-05-23 16:15:03 +00:00
//
$template -> assign_var ( 'QUOTE_IMG' , $user -> img ( 'btn_quote' , $user -> lang [ 'QUOTE_POST' ]));
//
2003-05-17 17:33:44 +00:00
page_header ( $page_title );
2003-04-18 13:07:19 +00:00
2003-05-17 17:33:44 +00:00
$template -> set_filenames ( array (
'body' => 'posting_topic_review.html' )
);
2003-04-18 13:07:19 +00:00
2003-05-17 17:33:44 +00:00
page_footer ();
2003-04-18 13:07:19 +00:00
}
2003-06-17 19:34:17 +00:00
// Temp Function - strtolower - borrowed from php.net
2003-04-20 16:49:26 +00:00
function phpbb_strtolower ( $string )
{
$new_string = '' ;
for ( $i = 0 ; $i < strlen ( $string ); $i ++ )
{
if ( ord ( substr ( $string , $i , 1 )) > 0xa0 )
{
$new_string .= strtolower ( substr ( $string , $i , 2 ));
$i ++ ;
}
else
{
2003-05-22 01:35:48 +00:00
$new_string .= strtolower ( $string { $i });
2003-04-20 16:49:26 +00:00
}
}
return $new_string ;
}
2003-04-18 13:07:19 +00:00
2003-06-23 14:00:57 +00:00
//
// FUNCTIONS
// ---------
2003-01-08 17:00:37 +00:00
?>