2002-07-14 14:37:47 +00:00
< ? php
2005-04-09 12:26:45 +00:00
/**
*
* @ package phpBB3
* @ version $Id $
* @ copyright ( c ) 2005 phpBB Group
* @ license http :// opensource . org / licenses / gpl - license . php GNU Public License
*
*/
/**
2007-01-21 18:33:45 +00:00
* Fill smiley templates ( or just the variables ) with smilies , either in a window or inline
2005-04-09 12:26:45 +00:00
*/
2003-10-10 12:11:18 +00:00
function generate_smilies ( $mode , $forum_id )
2002-07-14 14:37:47 +00:00
{
2006-06-06 20:53:46 +00:00
global $auth , $db , $user , $config , $template ;
2003-10-10 12:11:18 +00:00
global $phpEx , $phpbb_root_path ;
2003-02-27 23:37:02 +00:00
2002-11-07 22:02:04 +00:00
if ( $mode == 'window' )
2002-07-14 14:37:47 +00:00
{
2004-05-02 13:06:57 +00:00
if ( $forum_id )
2003-10-10 12:11:18 +00:00
{
2004-05-02 13:06:57 +00:00
$sql = ' SELECT forum_style
FROM ' . FORUMS_TABLE . "
WHERE forum_id = $forum_id " ;
$result = $db -> sql_query_limit ( $sql , 1 );
$row = $db -> sql_fetchrow ( $result );
$db -> sql_freeresult ( $result );
2003-10-10 12:11:18 +00:00
2004-05-02 13:06:57 +00:00
$user -> setup ( 'posting' , ( int ) $row [ 'forum_style' ]);
}
else
{
$user -> setup ( 'posting' );
}
2003-08-27 16:31:54 +00:00
2005-03-21 23:10:11 +00:00
page_header ( $user -> lang [ 'SMILIES' ]);
2002-07-14 14:37:47 +00:00
2002-10-04 13:09:10 +00:00
$template -> set_filenames ( array (
2002-10-30 18:59:09 +00:00
'body' => 'posting_smilies.html' )
2002-10-04 13:09:10 +00:00
);
}
2002-07-14 14:37:47 +00:00
2004-01-25 14:30:15 +00:00
$display_link = false ;
2003-10-10 12:11:18 +00:00
if ( $mode == 'inline' )
{
2005-03-21 23:10:11 +00:00
$sql = ' SELECT smiley_id
2003-10-10 15:59:45 +00:00
FROM ' . SMILIES_TABLE . '
2003-10-10 16:08:46 +00:00
WHERE display_on_posting = 0 ' ;
2003-10-10 12:11:18 +00:00
$result = $db -> sql_query_limit ( $sql , 1 , 0 , 3600 );
2003-10-12 11:59:23 +00:00
2003-10-10 16:08:46 +00:00
if ( $row = $db -> sql_fetchrow ( $result ))
{
2004-01-25 14:30:15 +00:00
$display_link = true ;
2003-10-10 16:08:46 +00:00
}
2003-10-12 11:59:23 +00:00
$db -> sql_freeresult ( $result );
2003-10-10 12:11:18 +00:00
}
2006-04-22 18:54:41 +00:00
$last_url = '' ;
2003-08-28 17:32:18 +00:00
$sql = ' SELECT *
2003-05-25 14:32:20 +00:00
FROM ' . SMILIES_TABLE .
(( $mode == 'inline' ) ? ' WHERE display_on_posting = 1 ' : '' ) . '
2005-03-21 23:10:11 +00:00
ORDER BY smiley_order ' ;
2003-10-10 12:11:18 +00:00
$result = $db -> sql_query ( $sql , 3600 );
2002-07-14 14:37:47 +00:00
2003-10-10 16:08:46 +00:00
while ( $row = $db -> sql_fetchrow ( $result ))
2002-10-04 13:09:10 +00:00
{
2006-04-22 18:54:41 +00:00
if ( $row [ 'smiley_url' ] !== $last_url )
{
$template -> assign_block_vars ( 'smiley' , array (
2006-05-06 15:15:40 +00:00
'SMILEY_CODE' => $row [ 'code' ],
'A_SMILEY_CODE' => addslashes ( $row [ 'code' ]),
'SMILEY_IMG' => $phpbb_root_path . $config [ 'smilies_path' ] . '/' . $row [ 'smiley_url' ],
'SMILEY_WIDTH' => $row [ 'smiley_width' ],
'SMILEY_HEIGHT' => $row [ 'smiley_height' ],
'SMILEY_DESC' => $row [ 'emotion' ])
2006-04-22 18:54:41 +00:00
);
}
$last_url = $row [ 'smiley_url' ];
2002-07-14 14:37:47 +00:00
}
2003-10-10 12:11:18 +00:00
$db -> sql_freeresult ( $result );
2002-07-14 14:37:47 +00:00
2003-10-10 16:08:46 +00:00
if ( $mode == 'inline' && $display_link )
{
$template -> assign_vars ( array (
2005-03-21 23:10:11 +00:00
'S_SHOW_SMILEY_LINK' => true ,
2006-06-06 20:53:46 +00:00
'U_MORE_SMILIES' => append_sid ( " { $phpbb_root_path } posting. $phpEx " , 'mode=smilies&f=' . $forum_id ))
2003-10-10 16:08:46 +00:00
);
}
2002-10-30 18:59:09 +00:00
if ( $mode == 'window' )
2002-07-14 14:37:47 +00:00
{
2003-05-25 14:32:20 +00:00
page_footer ();
2002-07-14 14:37:47 +00:00
}
}
2005-04-09 12:26:45 +00:00
/**
2006-12-21 10:37:50 +00:00
* Update last post information
2006-11-24 14:59:26 +00:00
* Should be used instead of sync () if only the last post information are out of sync ... faster
2006-05-12 20:52:58 +00:00
*
2007-04-15 10:59:26 +00:00
* @ param string $type Can be forum | topic
* @ param mixed $ids topic / forum ids
* @ param bool $return_update_sql true : SQL query shall be returned , false : execute SQL
* @ param int $min_post_id 0 : no bottom limit known , 1. . n : MAX ( post_id ) >= n
2005-04-09 12:26:45 +00:00
*/
2007-04-15 10:59:26 +00:00
function update_post_information ( $type , $ids , $return_update_sql = false , $min_post_id = 0 )
2003-04-19 10:28:37 +00:00
{
global $db ;
2006-01-22 13:06:13 +00:00
if ( ! is_array ( $ids ))
{
$ids = array ( $ids );
}
2003-04-19 10:28:37 +00:00
2006-10-19 13:55:48 +00:00
$update_sql = $empty_forums = $not_empty_forums = array ();
2005-01-29 14:46:16 +00:00
2007-04-15 10:59:26 +00:00
$min_post_id_sql = ( $min_post_id ) ? ' AND p.post_id >= ' . $min_post_id : '' ;
2007-03-14 21:40:52 +00:00
if ( $type != 'topic' )
{
$topic_join = ', ' . TOPICS_TABLE . ' t' ;
$topic_condition = 'AND t.topic_id = p.topic_id AND t.topic_approved = 1' ;
}
else
{
$topic_join = '' ;
$topic_condition = '' ;
}
2006-09-13 16:08:36 +00:00
if ( sizeof ( $ids ) == 1 )
{
2007-03-14 21:40:52 +00:00
$sql = ' SELECT MAX ( p . post_id ) as last_post_id
FROM ' . POSTS_TABLE . " p $topic_join
WHERE " . $db->sql_in_set ('p.' . $type . '_id', $ids ) . "
$topic_condition
2007-04-15 10:59:26 +00:00
AND p . post_approved = 1
$min_post_id_sql " ;
2006-09-13 16:08:36 +00:00
}
else
{
2007-03-14 21:40:52 +00:00
$sql = 'SELECT p.' . $type . ' _id , MAX ( p . post_id ) as last_post_id
FROM ' . POSTS_TABLE . " p $topic_join
WHERE " . $db->sql_in_set ('p.' . $type . '_id', $ids ) . "
$topic_condition
AND p . post_approved = 1
2007-04-15 10:59:26 +00:00
$min_post_id_sql
2007-03-14 21:40:52 +00:00
GROUP BY p . { $type } _id " ;
2006-09-13 16:08:36 +00:00
}
2003-11-22 12:43:07 +00:00
$result = $db -> sql_query ( $sql );
2003-04-19 10:28:37 +00:00
2006-01-22 13:06:13 +00:00
$last_post_ids = array ();
while ( $row = $db -> sql_fetchrow ( $result ))
{
2006-09-13 16:08:36 +00:00
if ( sizeof ( $ids ) == 1 )
{
$row [ $type . '_id' ] = $ids [ 0 ];
}
2006-01-22 13:06:13 +00:00
if ( $type == 'forum' )
{
2006-10-19 13:55:48 +00:00
$not_empty_forums [] = $row [ 'forum_id' ];
if ( empty ( $row [ 'last_post_id' ]))
{
$empty_forums [] = $row [ 'forum_id' ];
}
2006-01-22 13:06:13 +00:00
}
$last_post_ids [] = $row [ 'last_post_id' ];
}
$db -> sql_freeresult ( $result );
if ( $type == 'forum' )
{
2006-10-19 13:55:48 +00:00
$empty_forums = array_merge ( $empty_forums , array_diff ( $ids , $not_empty_forums ));
2006-01-22 13:06:13 +00:00
foreach ( $empty_forums as $void => $forum_id )
{
$update_sql [ $forum_id ][] = 'forum_last_post_id = 0' ;
2006-09-08 18:00:38 +00:00
$update_sql [ $forum_id ][] = " forum_last_post_subject = '' " ;
2006-08-22 11:01:56 +00:00
$update_sql [ $forum_id ][] = 'forum_last_post_time = 0' ;
2006-01-22 13:06:13 +00:00
$update_sql [ $forum_id ][] = 'forum_last_poster_id = 0' ;
$update_sql [ $forum_id ][] = " forum_last_poster_name = '' " ;
2006-08-22 11:01:56 +00:00
$update_sql [ $forum_id ][] = " forum_last_poster_colour = '' " ;
2006-01-22 13:06:13 +00:00
}
}
if ( sizeof ( $last_post_ids ))
2003-09-07 15:23:55 +00:00
{
2006-09-08 18:00:38 +00:00
$sql = 'SELECT p.' . $type . ' _id , p . post_id , p . post_subject , p . post_time , p . poster_id , p . post_username , u . user_id , u . username , u . user_colour
2003-11-22 12:43:07 +00:00
FROM ' . POSTS_TABLE . ' p , ' . USERS_TABLE . ' u
WHERE p . poster_id = u . user_id
2006-08-12 13:14:39 +00:00
AND ' . $db->sql_in_set(' p . post_id ' , $last_post_ids );
2003-11-22 12:43:07 +00:00
$result = $db -> sql_query ( $sql );
2006-01-22 13:06:13 +00:00
while ( $row = $db -> sql_fetchrow ( $result ))
{
$update_sql [ $row [ " { $type } _id " ]][] = $type . '_last_post_id = ' . ( int ) $row [ 'post_id' ];
2006-09-08 18:00:38 +00:00
$update_sql [ $row [ " { $type } _id " ]][] = " { $type } _last_post_subject = ' " . $db -> sql_escape ( $row [ 'post_subject' ]) . " ' " ;
2006-01-22 13:06:13 +00:00
$update_sql [ $row [ " { $type } _id " ]][] = $type . '_last_post_time = ' . ( int ) $row [ 'post_time' ];
$update_sql [ $row [ " { $type } _id " ]][] = $type . '_last_poster_id = ' . ( int ) $row [ 'poster_id' ];
2006-08-22 11:01:56 +00:00
$update_sql [ $row [ " { $type } _id " ]][] = " { $type } _last_poster_colour = ' " . $db -> sql_escape ( $row [ 'user_colour' ]) . " ' " ;
2006-01-22 13:06:13 +00:00
$update_sql [ $row [ " { $type } _id " ]][] = " { $type } _last_poster_name = ' " . (( $row [ 'poster_id' ] == ANONYMOUS ) ? $db -> sql_escape ( $row [ 'post_username' ]) : $db -> sql_escape ( $row [ 'username' ])) . " ' " ;
}
$db -> sql_freeresult ( $result );
2003-09-07 15:23:55 +00:00
}
2006-01-22 13:06:13 +00:00
unset ( $empty_forums , $ids , $last_post_ids );
2006-05-12 20:52:58 +00:00
if ( $return_update_sql || ! sizeof ( $update_sql ))
2003-09-07 15:23:55 +00:00
{
2006-05-12 20:52:58 +00:00
return $update_sql ;
2003-09-07 15:23:55 +00:00
}
2003-11-22 12:43:07 +00:00
2006-01-22 13:06:13 +00:00
$table = ( $type == 'forum' ) ? FORUMS_TABLE : TOPICS_TABLE ;
foreach ( $update_sql as $update_id => $update_sql_ary )
{
$sql = " UPDATE $table
SET " . implode(', ', $update_sql_ary ) . "
WHERE { $type } _id = $update_id " ;
$db -> sql_query ( $sql );
}
2006-05-26 15:04:27 +00:00
return ;
2003-04-19 10:28:37 +00:00
}
2006-05-12 20:52:58 +00:00
/**
* Generate Topic Icons for display
*/
function posting_gen_topic_icons ( $mode , $icon_id )
{
global $phpbb_root_path , $config , $template , $cache ;
// Grab icons
2006-11-12 15:35:43 +00:00
$icons = $cache -> obtain_icons ();
2006-05-12 20:52:58 +00:00
if ( ! $icon_id )
{
$template -> assign_var ( 'S_NO_ICON_CHECKED' , ' checked="checked"' );
}
2006-06-06 20:53:46 +00:00
2006-05-12 20:52:58 +00:00
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' ],
2006-06-06 20:53:46 +00:00
'ICON_HEIGHT' => $data [ 'height' ],
2006-05-12 20:52:58 +00:00
'S_CHECKED' => ( $id == $icon_id ) ? true : false ,
'S_ICON_CHECKED' => ( $id == $icon_id ) ? ' checked="checked"' : '' )
);
}
}
return true ;
}
return false ;
}
/**
* Build topic types able to be selected
*/
function posting_gen_topic_types ( $forum_id , $cur_topic_type = POST_NORMAL )
{
global $auth , $user , $template , $topic_type ;
$toggle = false ;
$topic_types = array (
'sticky' => array ( 'const' => POST_STICKY , 'lang' => 'POST_STICKY' ),
'announce' => array ( 'const' => POST_ANNOUNCE , 'lang' => 'POST_ANNOUNCEMENT' ),
'global' => array ( 'const' => POST_GLOBAL , 'lang' => 'POST_GLOBAL' )
);
2006-06-06 20:53:46 +00:00
2006-05-12 20:52:58 +00:00
$topic_type_array = array ();
2006-06-06 20:53:46 +00:00
2006-05-12 20:52:58 +00:00
foreach ( $topic_types as $auth_key => $topic_value )
{
// We do not have a special post global announcement permission
$auth_key = ( $auth_key == 'global' ) ? 'announce' : $auth_key ;
if ( $auth -> acl_get ( 'f_' . $auth_key , $forum_id ))
{
$toggle = true ;
$topic_type_array [] = array (
'VALUE' => $topic_value [ 'const' ],
'S_CHECKED' => ( $cur_topic_type == $topic_value [ 'const' ] || ( $forum_id == 0 && $topic_value [ 'const' ] == POST_GLOBAL )) ? ' checked="checked"' : '' ,
'L_TOPIC_TYPE' => $user -> lang [ $topic_value [ 'lang' ]]
);
}
}
if ( $toggle )
{
$topic_type_array = array_merge ( array ( 0 => array (
'VALUE' => POST_NORMAL ,
'S_CHECKED' => ( $topic_type == POST_NORMAL ) ? ' checked="checked"' : '' ,
'L_TOPIC_TYPE' => $user -> lang [ 'POST_NORMAL' ])),
2006-06-06 20:53:46 +00:00
2006-05-12 20:52:58 +00:00
$topic_type_array
);
foreach ( $topic_type_array as $array )
{
$template -> assign_block_vars ( 'topic_type' , $array );
}
$template -> assign_vars ( array (
'S_TOPIC_TYPE_STICKY' => ( $auth -> acl_get ( 'f_sticky' , $forum_id )),
'S_TOPIC_TYPE_ANNOUNCE' => ( $auth -> acl_get ( 'f_announce' , $forum_id )))
);
}
return $toggle ;
}
//
// Attachment related functions
//
2005-04-09 12:26:45 +00:00
/**
* Upload Attachment - filedata is generated here
* Uses upload class
*/
2007-02-09 14:31:17 +00:00
function upload_attachment ( $form_name , $forum_id , $local = false , $local_storage = '' , $is_message = false , $local_filedata = false )
2003-04-19 12:58:37 +00:00
{
2005-10-02 18:17:06 +00:00
global $auth , $user , $config , $db , $cache ;
2006-06-06 20:53:46 +00:00
global $phpbb_root_path , $phpEx ;
2003-03-12 14:21:57 +00:00
2006-05-12 20:52:58 +00:00
$filedata = array (
'error' => array ()
);
2005-03-21 23:10:11 +00:00
2006-06-06 20:53:46 +00:00
include_once ( $phpbb_root_path . 'includes/functions_upload.' . $phpEx );
2005-03-21 23:10:11 +00:00
$upload = new fileupload ();
2006-06-06 20:53:46 +00:00
2005-05-05 16:55:05 +00:00
if ( ! $local )
{
$filedata [ 'post_attach' ] = ( $upload -> is_valid ( $form_name )) ? true : false ;
}
else
{
$filedata [ 'post_attach' ] = true ;
}
2003-03-12 14:21:57 +00:00
2003-04-19 12:58:37 +00:00
if ( ! $filedata [ 'post_attach' ])
2003-03-12 14:21:57 +00:00
{
2006-09-13 16:08:36 +00:00
$filedata [ 'error' ][] = $user -> lang [ 'NO_UPLOAD_FORM_FOUND' ];
2003-04-20 16:49:26 +00:00
return $filedata ;
2003-03-12 14:21:57 +00:00
}
2003-04-19 12:58:37 +00:00
2006-12-27 17:43:55 +00:00
$extensions = $cache -> obtain_attach_extensions ((( $is_message ) ? false : ( int ) $forum_id ));
2005-03-21 23:10:11 +00:00
$upload -> set_allowed_extensions ( array_keys ( $extensions [ '_allowed_' ]));
2004-05-02 13:06:57 +00:00
2007-02-09 14:31:17 +00:00
$file = ( $local ) ? $upload -> local_upload ( $local_storage , $local_filedata ) : $upload -> form_upload ( $form_name );
2004-12-12 14:07:02 +00:00
2005-03-21 23:10:11 +00:00
if ( $file -> init_error )
2004-12-12 14:07:02 +00:00
{
$filedata [ 'post_attach' ] = false ;
return $filedata ;
}
2005-03-21 23:10:11 +00:00
$cat_id = ( isset ( $extensions [ $file -> get ( 'extension' )][ 'display_cat' ])) ? $extensions [ $file -> get ( 'extension' )][ 'display_cat' ] : ATTACHMENT_CATEGORY_NONE ;
2004-12-12 14:07:02 +00:00
2006-09-13 16:08:36 +00:00
// Make sure the image category only holds valid images...
if ( $cat_id == ATTACHMENT_CATEGORY_IMAGE && ! $file -> is_image ())
{
$file -> remove ();
// If this error occurs a user tried to exploit an IE Bug by renaming extensions
// Since the image category is displaying content inline we need to catch this.
2007-02-07 16:32:25 +00:00
trigger_error ( $user -> lang [ 'ATTACHED_IMAGE_NOT_IMAGE' ]);
2006-09-13 16:08:36 +00:00
}
2005-03-21 23:10:11 +00:00
// Do we have to create a thumbnail?
$filedata [ 'thumbnail' ] = ( $cat_id == ATTACHMENT_CATEGORY_IMAGE && $config [ 'img_create_thumbnail' ]) ? 1 : 0 ;
2004-12-12 14:07:02 +00:00
2003-04-19 12:58:37 +00:00
// Check Image Size, if it is an image
2006-06-10 23:53:20 +00:00
if ( ! $auth -> acl_get ( 'a_' ) && ! $auth -> acl_get ( 'm_' , $forum_id ) && $cat_id == ATTACHMENT_CATEGORY_IMAGE )
2003-03-22 15:48:46 +00:00
{
2006-11-18 16:27:35 +00:00
$file -> upload -> set_allowed_dimensions ( 0 , 0 , $config [ 'img_max_width' ], $config [ 'img_max_height' ]);
2003-04-19 12:58:37 +00:00
}
2003-05-11 16:21:35 +00:00
2006-07-10 15:55:10 +00:00
// Admins and mods are allowed to exceed the allowed filesize
2006-06-10 23:53:20 +00:00
if ( ! $auth -> acl_get ( 'a_' ) && ! $auth -> acl_get ( 'm_' , $forum_id ))
2003-04-19 12:58:37 +00:00
{
2006-07-10 15:55:10 +00:00
if ( ! empty ( $extensions [ $file -> get ( 'extension' )][ 'max_filesize' ]))
{
$allowed_filesize = $extensions [ $file -> get ( 'extension' )][ 'max_filesize' ];
}
else
{
$allowed_filesize = ( $is_message ) ? $config [ 'max_filesize_pm' ] : $config [ 'max_filesize' ];
}
2005-03-21 23:10:11 +00:00
$file -> upload -> set_max_filesize ( $allowed_filesize );
}
2006-06-06 20:53:46 +00:00
2005-03-21 23:10:11 +00:00
$file -> clean_filename ( 'unique' , $user -> data [ 'user_id' ] . '_' );
$file -> move_file ( $config [ 'upload_path' ]);
2006-06-06 20:53:46 +00:00
2005-03-21 23:10:11 +00:00
if ( sizeof ( $file -> error ))
{
$file -> remove ();
$filedata [ 'error' ] = array_merge ( $filedata [ 'error' ], $file -> error );
2004-01-25 14:30:15 +00:00
$filedata [ 'post_attach' ] = false ;
2004-12-12 14:07:02 +00:00
2003-04-20 16:49:26 +00:00
return $filedata ;
2003-03-22 15:48:46 +00:00
}
2003-04-19 12:58:37 +00:00
2005-03-21 23:10:11 +00:00
$filedata [ 'filesize' ] = $file -> get ( 'filesize' );
$filedata [ 'mimetype' ] = $file -> get ( 'mimetype' );
$filedata [ 'extension' ] = $file -> get ( 'extension' );
$filedata [ 'physical_filename' ] = $file -> get ( 'realname' );
$filedata [ 'real_filename' ] = $file -> get ( 'uploadname' );
$filedata [ 'filetime' ] = time ();
2003-04-19 12:58:37 +00:00
// Check our complete quota
2003-11-16 21:53:56 +00:00
if ( $config [ 'attachment_quota' ])
2003-03-22 15:48:46 +00:00
{
2005-03-21 23:10:11 +00:00
if ( $config [ 'upload_dir_size' ] + $file -> get ( 'filesize' ) > $config [ 'attachment_quota' ])
2003-03-22 15:48:46 +00:00
{
2003-05-11 16:21:35 +00:00
$filedata [ 'error' ][] = $user -> lang [ 'ATTACH_QUOTA_REACHED' ];
2004-01-25 14:30:15 +00:00
$filedata [ 'post_attach' ] = false ;
2004-12-12 14:07:02 +00:00
2005-03-21 23:10:11 +00:00
$file -> remove ();
2004-12-12 14:07:02 +00:00
2003-04-20 16:49:26 +00:00
return $filedata ;
2003-03-22 15:48:46 +00:00
}
2003-04-19 12:58:37 +00:00
}
2003-03-22 15:48:46 +00:00
2005-04-09 12:26:45 +00:00
// Check free disk space
if ( $free_space = @ disk_free_space ( $phpbb_root_path . $config [ 'upload_path' ]))
2003-11-16 21:53:56 +00:00
{
2005-03-21 23:10:11 +00:00
if ( $free_space <= $file -> get ( 'filesize' ))
2003-11-16 21:53:56 +00:00
{
$filedata [ 'error' ][] = $user -> lang [ 'ATTACH_QUOTA_REACHED' ];
2004-01-25 14:30:15 +00:00
$filedata [ 'post_attach' ] = false ;
2003-03-22 15:48:46 +00:00
2005-03-21 23:10:11 +00:00
$file -> remove ();
2006-06-06 20:53:46 +00:00
2004-12-12 14:07:02 +00:00
return $filedata ;
}
2003-03-22 15:48:46 +00:00
}
2003-04-19 12:58:37 +00:00
2005-03-21 23:10:11 +00:00
// Create Thumbnail
2003-06-20 17:20:22 +00:00
if ( $filedata [ 'thumbnail' ])
2003-03-22 15:48:46 +00:00
{
2005-03-21 23:10:11 +00:00
$source = $file -> get ( 'destination_file' );
$destination = $file -> get ( 'destination_path' ) . '/thumb_' . $file -> get ( 'realname' );
2003-03-22 15:48:46 +00:00
2005-03-21 23:10:11 +00:00
if ( ! create_thumbnail ( $source , $destination , $file -> get ( 'mimetype' )))
2003-03-22 15:48:46 +00:00
{
2005-03-21 23:10:11 +00:00
$filedata [ 'thumbnail' ] = 0 ;
2003-03-22 15:48:46 +00:00
}
2003-06-20 17:20:22 +00:00
}
2003-08-27 16:31:54 +00:00
2005-03-21 23:10:11 +00:00
return $filedata ;
2003-04-19 12:58:37 +00:00
}
2005-04-09 12:26:45 +00:00
/**
* Calculate the needed size for Thumbnail
*/
2003-06-20 17:20:22 +00:00
function get_img_size_format ( $width , $height )
{
2006-08-28 15:50:33 +00:00
global $config ;
2004-07-08 22:41:04 +00:00
// Maximum Width the Image can take
2006-08-28 15:50:33 +00:00
$max_width = ( $config [ 'img_max_thumb_width' ]) ? $config [ 'img_max_thumb_width' ] : 400 ;
2003-06-20 17:20:22 +00:00
2004-07-08 22:41:04 +00:00
if ( $width > $height )
2003-06-20 17:20:22 +00:00
{
2004-07-08 22:41:04 +00:00
return array (
round ( $width * ( $max_width / $width )),
round ( $height * ( $max_width / $width ))
);
2006-06-06 20:53:46 +00:00
}
else
2003-06-20 17:20:22 +00:00
{
2004-07-08 22:41:04 +00:00
return array (
round ( $width * ( $max_width / $height )),
round ( $height * ( $max_width / $height ))
);
2003-06-20 17:20:22 +00:00
}
}
2005-04-09 12:26:45 +00:00
/**
* Return supported image types
*/
2005-01-02 19:08:07 +00:00
function get_supported_image_types ( $type = false )
2003-06-20 17:20:22 +00:00
{
if ( @ extension_loaded ( 'gd' ))
{
2004-07-08 22:41:04 +00:00
$format = imagetypes ();
$new_type = 0 ;
2005-01-02 19:08:07 +00:00
if ( $type !== false )
2003-06-20 17:20:22 +00:00
{
2005-01-02 19:08:07 +00:00
switch ( $type )
{
2006-06-07 08:35:13 +00:00
// GIF
2005-01-02 19:08:07 +00:00
case 1 :
2006-06-07 08:35:13 +00:00
$new_type = ( $format & IMG_GIF ) ? IMG_GIF : false ;
2006-05-12 20:52:58 +00:00
break ;
2006-06-07 08:35:13 +00:00
// JPG, JPC, JP2
2005-01-02 19:08:07 +00:00
case 2 :
case 9 :
case 10 :
case 11 :
case 12 :
2006-06-07 08:35:13 +00:00
$new_type = ( $format & IMG_JPG ) ? IMG_JPG : false ;
2006-05-12 20:52:58 +00:00
break ;
2006-06-06 20:53:46 +00:00
2006-06-07 08:35:13 +00:00
// PNG
2005-01-02 19:08:07 +00:00
case 3 :
2006-06-07 08:35:13 +00:00
$new_type = ( $format & IMG_PNG ) ? IMG_PNG : false ;
2006-05-12 20:52:58 +00:00
break ;
2006-06-06 20:53:46 +00:00
2006-06-07 08:35:13 +00:00
// BMP, WBMP
2005-01-02 19:08:07 +00:00
case 6 :
case 15 :
2006-06-07 08:35:13 +00:00
$new_type = ( $format & IMG_WBMP ) ? IMG_WBMP : false ;
2006-05-12 20:52:58 +00:00
break ;
2005-01-02 19:08:07 +00:00
}
}
else
{
$new_type = array ();
$go_through_types = array ( IMG_GIF , IMG_JPG , IMG_PNG , IMG_WBMP );
foreach ( $go_through_types as $check_type )
{
if ( $format & $check_type )
{
$new_type [] = $check_type ;
}
}
2003-06-20 17:20:22 +00:00
}
2006-06-06 20:53:46 +00:00
2004-07-08 22:41:04 +00:00
return array (
'gd' => ( $new_type ) ? true : false ,
'format' => $new_type ,
'version' => ( function_exists ( 'imagecreatetruecolor' )) ? 2 : 1
);
}
return array ( 'gd' => false );
2003-06-20 17:20:22 +00:00
}
2005-04-09 12:26:45 +00:00
/**
* Create Thumbnail
*/
2005-03-21 23:10:11 +00:00
function create_thumbnail ( $source , $destination , $mimetype )
2003-06-20 17:20:22 +00:00
{
global $config ;
2003-06-25 19:49:59 +00:00
$min_filesize = ( int ) $config [ 'img_min_thumb_filesize' ];
2004-01-25 14:30:15 +00:00
$img_filesize = ( file_exists ( $source )) ? @ filesize ( $source ) : false ;
2003-06-20 17:20:22 +00:00
2003-06-25 19:49:59 +00:00
if ( ! $img_filesize || $img_filesize <= $min_filesize )
2003-06-20 17:20:22 +00:00
{
2004-01-25 14:30:15 +00:00
return false ;
2003-06-20 17:20:22 +00:00
}
2006-05-12 20:52:58 +00:00
2007-03-08 15:49:13 +00:00
$dimension = getimagesize ( $source );
2003-06-20 17:20:22 +00:00
2007-03-08 15:49:13 +00:00
if ( $dimension === false )
{
return false ;
}
list ( $width , $height , $type , ) = $dimension ;
if ( $width < 2 || $height < 2 )
2003-06-20 17:20:22 +00:00
{
2004-01-25 14:30:15 +00:00
return false ;
2003-06-20 17:20:22 +00:00
}
2004-07-08 22:41:04 +00:00
list ( $new_width , $new_height ) = get_img_size_format ( $width , $height );
2003-06-20 17:20:22 +00:00
2006-11-18 16:27:35 +00:00
// Do not create a thumbnail if the resulting width/height is bigger than the original one
if ( $new_width > $width && $new_height > $height )
{
return false ;
}
2004-01-25 14:30:15 +00:00
$used_imagick = false ;
2003-06-20 17:20:22 +00:00
2006-07-01 19:11:52 +00:00
// Only use imagemagick if defined and the passthru function not disabled
if ( $config [ 'img_imagick' ] && function_exists ( 'passthru' ))
2003-06-20 17:20:22 +00:00
{
2006-08-25 15:15:53 +00:00
@ passthru ( escapeshellcmd ( $config [ 'img_imagick' ]) . 'convert' . (( defined ( 'PHP_OS' ) && preg_match ( '#^win#i' , PHP_OS )) ? '.exe' : '' ) . ' -quality 85 -antialias -sample ' . $new_width . 'x' . $new_height . ' "' . str_replace ( '\\' , '/' , $source ) . '" +profile "*" "' . str_replace ( '\\' , '/' , $destination ) . '"' );
2005-03-21 23:10:11 +00:00
if ( file_exists ( $destination ))
2003-06-20 17:20:22 +00:00
{
2004-07-08 22:41:04 +00:00
$used_imagick = true ;
2003-06-20 17:20:22 +00:00
}
2006-05-12 20:52:58 +00:00
}
2003-06-20 17:20:22 +00:00
if ( ! $used_imagick )
{
2004-07-08 22:41:04 +00:00
$type = get_supported_image_types ( $type );
2006-05-12 20:52:58 +00:00
2004-07-08 22:41:04 +00:00
if ( $type [ 'gd' ])
2003-06-20 17:20:22 +00:00
{
2006-06-07 08:35:13 +00:00
// If the type is not supported, we are not able to create a thumbnail
if ( $type [ 'format' ] === false )
{
return false ;
}
2004-07-08 22:41:04 +00:00
switch ( $type [ 'format' ])
2003-06-20 17:20:22 +00:00
{
2004-07-08 22:41:04 +00:00
case IMG_GIF :
2006-06-07 08:35:13 +00:00
$image = @ imagecreatefromgif ( $source );
2006-05-12 20:52:58 +00:00
break ;
2004-07-08 22:41:04 +00:00
case IMG_JPG :
2006-06-07 08:35:13 +00:00
$image = @ imagecreatefromjpeg ( $source );
2006-05-12 20:52:58 +00:00
break ;
2006-06-06 20:53:46 +00:00
2004-07-08 22:41:04 +00:00
case IMG_PNG :
2006-06-07 08:35:13 +00:00
$image = @ imagecreatefrompng ( $source );
2006-05-12 20:52:58 +00:00
break ;
2006-06-06 20:53:46 +00:00
2004-07-08 22:41:04 +00:00
case IMG_WBMP :
2006-06-07 08:35:13 +00:00
$image = @ imagecreatefromwbmp ( $source );
2006-05-12 20:52:58 +00:00
break ;
2004-07-08 22:41:04 +00:00
}
if ( $type [ 'version' ] == 1 )
{
$new_image = imagecreate ( $new_width , $new_height );
imagecopyresized ( $new_image , $image , 0 , 0 , 0 , 0 , $new_width , $new_height , $width , $height );
}
else
{
$new_image = imagecreatetruecolor ( $new_width , $new_height );
imagecopyresampled ( $new_image , $image , 0 , 0 , 0 , 0 , $new_width , $new_height , $width , $height );
}
2006-06-06 20:53:46 +00:00
2006-08-03 15:23:34 +00:00
// If we are in safe mode create the destination file prior to using the gd functions to circumvent a PHP bug
if ( @ ini_get ( 'safe_mode' ) || @ strtolower ( ini_get ( 'safe_mode' )) == 'on' )
{
@ touch ( $destination );
}
2004-07-08 22:41:04 +00:00
switch ( $type [ 'format' ])
{
case IMG_GIF :
2005-03-21 23:10:11 +00:00
imagegif ( $new_image , $destination );
2006-05-12 20:52:58 +00:00
break ;
2006-06-06 20:53:46 +00:00
2004-07-08 22:41:04 +00:00
case IMG_JPG :
2005-03-21 23:10:11 +00:00
imagejpeg ( $new_image , $destination , 90 );
2006-05-12 20:52:58 +00:00
break ;
2006-06-06 20:53:46 +00:00
2004-07-08 22:41:04 +00:00
case IMG_PNG :
2005-03-21 23:10:11 +00:00
imagepng ( $new_image , $destination );
2006-05-12 20:52:58 +00:00
break ;
2006-06-06 20:53:46 +00:00
2004-07-08 22:41:04 +00:00
case IMG_WBMP :
2005-03-21 23:10:11 +00:00
imagewbmp ( $new_image , $destination );
2006-05-12 20:52:58 +00:00
break ;
2003-06-20 17:20:22 +00:00
}
2004-07-08 22:41:04 +00:00
imagedestroy ( $new_image );
2003-06-20 17:20:22 +00:00
}
2006-06-07 08:35:13 +00:00
else
{
return false ;
}
2003-06-20 17:20:22 +00:00
}
2005-03-21 23:10:11 +00:00
if ( ! file_exists ( $destination ))
2003-06-20 17:20:22 +00:00
{
2004-01-25 14:30:15 +00:00
return false ;
2003-06-20 17:20:22 +00:00
}
2005-03-21 23:10:11 +00:00
@ chmod ( $destination , 0666 );
2003-11-16 21:53:56 +00:00
2004-01-25 14:30:15 +00:00
return true ;
2003-06-20 17:20:22 +00:00
}
2005-04-09 12:26:45 +00:00
/**
* Assign Inline attachments ( build option fields )
*/
2004-09-16 18:33:22 +00:00
function posting_gen_inline_attachments ( & $attachment_data )
2004-05-02 13:06:57 +00:00
{
global $template ;
2004-09-04 19:32:23 +00:00
if ( sizeof ( $attachment_data ))
2004-05-02 13:06:57 +00:00
{
$s_inline_attachment_options = '' ;
2006-06-06 20:53:46 +00:00
2004-09-04 19:32:23 +00:00
foreach ( $attachment_data as $i => $attachment )
2004-05-02 13:06:57 +00:00
{
2006-09-13 16:08:36 +00:00
$s_inline_attachment_options .= '<option value="' . $i . '">' . basename ( $attachment [ 'real_filename' ]) . '</option>' ;
2004-05-02 13:06:57 +00:00
}
$template -> assign_var ( 'S_INLINE_ATTACHMENT_OPTIONS' , $s_inline_attachment_options );
return true ;
}
return false ;
}
2005-04-09 12:26:45 +00:00
/**
* Generate inline attachment entry
*/
2006-11-21 18:15:53 +00:00
function posting_gen_attachment_entry ( $attachment_data , & $filename_data )
2004-05-02 13:06:57 +00:00
{
2006-09-13 16:08:36 +00:00
global $template , $config , $phpbb_root_path , $phpEx , $user ;
2006-06-06 20:53:46 +00:00
2004-05-02 13:06:57 +00:00
$template -> assign_vars ( array (
'S_SHOW_ATTACH_BOX' => true )
);
2004-09-04 19:32:23 +00:00
if ( sizeof ( $attachment_data ))
2004-05-02 13:06:57 +00:00
{
$template -> assign_vars ( array (
'S_HAS_ATTACHMENTS' => true )
);
2006-06-06 20:53:46 +00:00
2006-11-21 18:15:53 +00:00
// We display the posted attachments within the desired order.
( $config [ 'display_order' ]) ? krsort ( $attachment_data ) : ksort ( $attachment_data );
foreach ( $attachment_data as $count => $attach_row )
2004-05-02 13:06:57 +00:00
{
$hidden = '' ;
2006-06-06 20:53:46 +00:00
$attach_row [ 'real_filename' ] = basename ( $attach_row [ 'real_filename' ]);
2004-05-02 13:06:57 +00:00
foreach ( $attach_row as $key => $value )
{
$hidden .= '<input type="hidden" name="attachment_data[' . $count . '][' . $key . ']" value="' . $value . '" />' ;
}
2006-06-06 20:53:46 +00:00
2007-04-30 10:46:17 +00:00
$download_link = append_sid ( " { $phpbb_root_path } download. $phpEx " , 'mode=view&id=' . ( int ) $attach_row [ 'attach_id' ], false , ( $attach_row [ 'is_orphan' ]) ? $user -> session_id : false );
2006-06-06 20:53:46 +00:00
2004-05-02 13:06:57 +00:00
$template -> assign_block_vars ( 'attach_row' , array (
2004-12-12 14:07:02 +00:00
'FILENAME' => basename ( $attach_row [ 'real_filename' ]),
- renamed the following columns:
comment -> attach_comment
new, forwarded, unread, marked, deleted -> pm_new, pm_forwarded, pm_unread, pm_marked, pm_deleted
module_name -> module_basename
value -> lang_value
- every column is now NOT NULL
- every column is now having a DEFAULT value
- hopefully mostly consistent across every db schema
- untested schemas: sqlite, oracle, firebird
git-svn-id: file:///svn/phpbb/trunk@6177 89ea8834-ac86-4346-8a33-228a782c2dd0
2006-07-13 12:51:56 +00:00
'FILE_COMMENT' => $attach_row [ 'attach_comment' ],
2004-05-02 13:06:57 +00:00
'ATTACH_ID' => $attach_row [ 'attach_id' ],
2006-09-13 16:08:36 +00:00
'S_IS_ORPHAN' => $attach_row [ 'is_orphan' ],
2004-05-02 13:06:57 +00:00
'ASSOC_INDEX' => $count ,
2006-05-12 20:52:58 +00:00
'U_VIEW_ATTACHMENT' => $download_link ,
2004-05-02 13:06:57 +00:00
'S_HIDDEN' => $hidden )
);
}
}
$template -> assign_vars ( array (
2004-09-04 19:32:23 +00:00
'FILE_COMMENT' => $filename_data [ 'filecomment' ],
2005-03-21 23:10:11 +00:00
'FILESIZE' => $config [ 'max_filesize' ])
2004-05-02 13:06:57 +00:00
);
2004-09-04 19:32:23 +00:00
return sizeof ( $attachment_data );
2004-05-02 13:06:57 +00:00
}
2006-05-12 20:52:58 +00:00
//
// General Post functions
//
2005-04-09 12:26:45 +00:00
/**
* Load Drafts
*/
2004-05-02 13:06:57 +00:00
function load_drafts ( $topic_id = 0 , $forum_id = 0 , $id = 0 )
{
2006-05-12 20:52:58 +00:00
global $user , $db , $template , $auth ;
2006-06-06 20:53:46 +00:00
global $phpbb_root_path , $phpEx ;
2006-05-12 20:52:58 +00:00
2006-05-20 18:39:35 +00:00
$topic_ids = $forum_ids = $draft_rows = array ();
2004-05-02 13:06:57 +00:00
2006-01-17 18:14:37 +00:00
// Load those drafts not connected to forums/topics
2006-05-17 16:58:56 +00:00
// If forum_id == 0 AND topic_id == 0 then this is a PM draft
2006-05-20 18:39:35 +00:00
if ( ! $topic_id && ! $forum_id )
{
2006-05-21 16:54:19 +00:00
$sql_and = ' AND d.forum_id = 0 AND d.topic_id = 0' ;
2006-05-20 18:39:35 +00:00
}
else
{
$sql_and = '' ;
2006-06-06 20:53:46 +00:00
$sql_and .= ( $forum_id ) ? ' AND d.forum_id = ' . ( int ) $forum_id : '' ;
$sql_and .= ( $topic_id ) ? ' AND d.topic_id = ' . ( int ) $topic_id : '' ;
2006-05-20 18:39:35 +00:00
}
$sql = ' SELECT d .* , f . forum_id , f . forum_name
FROM ' . DRAFTS_TABLE . ' d
LEFT JOIN ' . FORUMS_TABLE . ' f ON ( f . forum_id = d . forum_id )
WHERE d . user_id = ' . $user->data[' user_id ' ] . "
$sql_and
ORDER BY d . save_time DESC " ;
2004-05-02 13:06:57 +00:00
$result = $db -> sql_query ( $sql );
while ( $row = $db -> sql_fetchrow ( $result ))
{
if ( $row [ 'topic_id' ])
{
$topic_ids [] = ( int ) $row [ 'topic_id' ];
}
2006-05-12 20:52:58 +00:00
$draft_rows [] = $row ;
2004-05-02 13:06:57 +00:00
}
$db -> sql_freeresult ( $result );
2006-01-17 18:14:37 +00:00
2006-05-12 20:52:58 +00:00
if ( ! sizeof ( $draft_rows ))
2006-01-17 18:14:37 +00:00
{
return ;
}
2006-05-12 20:52:58 +00:00
$topic_rows = array ();
2004-05-02 13:06:57 +00:00
if ( sizeof ( $topic_ids ))
{
$sql = ' SELECT topic_id , forum_id , topic_title
FROM ' . TOPICS_TABLE . '
2006-08-12 13:14:39 +00:00
WHERE ' . $db->sql_in_set(' topic_id ' , array_unique ( $topic_ids ));
2004-05-02 13:06:57 +00:00
$result = $db -> sql_query ( $sql );
while ( $row = $db -> sql_fetchrow ( $result ))
{
$topic_rows [ $row [ 'topic_id' ]] = $row ;
}
$db -> sql_freeresult ( $result );
}
unset ( $topic_ids );
2006-05-20 18:39:35 +00:00
2006-01-17 18:14:37 +00:00
$template -> assign_var ( 'S_SHOW_DRAFTS' , true );
2006-05-12 20:52:58 +00:00
foreach ( $draft_rows as $draft )
2004-05-02 13:06:57 +00:00
{
2006-01-17 18:14:37 +00:00
$link_topic = $link_forum = $link_pm = false ;
$insert_url = $view_url = $title = '' ;
2004-05-02 13:06:57 +00:00
2006-01-17 18:14:37 +00:00
if ( isset ( $topic_rows [ $draft [ 'topic_id' ]]) && $auth -> acl_get ( 'f_read' , $topic_rows [ $draft [ 'topic_id' ]][ 'forum_id' ]))
2004-05-02 13:06:57 +00:00
{
2006-01-17 18:14:37 +00:00
$link_topic = true ;
2006-06-06 20:53:46 +00:00
$view_url = append_sid ( " { $phpbb_root_path } viewtopic. $phpEx " , 'f=' . $topic_rows [ $draft [ 'topic_id' ]][ 'forum_id' ] . '&t=' . $draft [ 'topic_id' ]);
2006-01-17 18:14:37 +00:00
$title = $topic_rows [ $draft [ 'topic_id' ]][ 'topic_title' ];
2004-05-02 13:06:57 +00:00
2006-06-06 20:53:46 +00:00
$insert_url = append_sid ( " { $phpbb_root_path } posting. $phpEx " , 'f=' . $topic_rows [ $draft [ 'topic_id' ]][ 'forum_id' ] . '&t=' . $draft [ 'topic_id' ] . '&mode=reply&d=' . $draft [ 'draft_id' ]);
2006-01-17 18:14:37 +00:00
}
2006-05-17 16:58:56 +00:00
else if ( $draft [ 'forum_id' ] && $auth -> acl_get ( 'f_read' , $draft [ 'forum_id' ]))
2006-01-17 18:14:37 +00:00
{
$link_forum = true ;
2006-06-06 20:53:46 +00:00
$view_url = append_sid ( " { $phpbb_root_path } viewforum. $phpEx " , 'f=' . $draft [ 'forum_id' ]);
2006-01-17 18:14:37 +00:00
$title = $draft [ 'forum_name' ];
2004-05-02 13:06:57 +00:00
2006-06-06 20:53:46 +00:00
$insert_url = append_sid ( " { $phpbb_root_path } posting. $phpEx " , 'f=' . $draft [ 'forum_id' ] . '&mode=post&d=' . $draft [ 'draft_id' ]);
2006-01-17 18:14:37 +00:00
}
else
{
2006-05-17 16:58:56 +00:00
// Either display as PM draft if forum_id and topic_id are empty or if access to the forums has been denied afterwards...
2006-01-17 18:14:37 +00:00
$link_pm = true ;
2006-06-06 20:53:46 +00:00
$insert_url = append_sid ( " { $phpbb_root_path } ucp. $phpEx " , " i= $id &mode=compose&d= { $draft [ 'draft_id' ] } " );
2004-05-02 13:06:57 +00:00
}
2006-05-12 20:52:58 +00:00
2006-01-17 18:14:37 +00:00
$template -> assign_block_vars ( 'draftrow' , array (
'DRAFT_ID' => $draft [ 'draft_id' ],
'DATE' => $user -> format_date ( $draft [ 'save_time' ]),
'DRAFT_SUBJECT' => $draft [ 'draft_subject' ],
'TITLE' => $title ,
'U_VIEW' => $view_url ,
'U_INSERT' => $insert_url ,
'S_LINK_PM' => $link_pm ,
'S_LINK_TOPIC' => $link_topic ,
'S_LINK_FORUM' => $link_forum )
);
2004-05-02 13:06:57 +00:00
}
}
2005-04-09 12:26:45 +00:00
/**
* Topic Review
*/
2004-07-11 15:20:35 +00:00
function topic_review ( $topic_id , $forum_id , $mode = 'topic_review' , $cur_post_id = 0 , $show_quote_button = true )
{
2006-05-12 20:52:58 +00:00
global $user , $auth , $db , $template , $bbcode ;
2006-06-06 20:53:46 +00:00
global $config , $phpbb_root_path , $phpEx ;
2004-07-11 15:20:35 +00:00
// Go ahead and pull all data for this topic
2007-02-13 23:20:34 +00:00
$sql = ' SELECT p . post_id
FROM ' . POSTS_TABLE . ' p ' . "
2004-07-11 15:20:35 +00:00
WHERE p . topic_id = $topic_id
" . ((! $auth->acl_get ('m_approve', $forum_id )) ? 'AND p.post_approved = 1' : '') . '
' . (($mode == ' post_review ') ? " AND p.post_id > $cur_post_id" : ' ') . '
ORDER BY p . post_time DESC ' ;
$result = $db -> sql_query_limit ( $sql , $config [ 'posts_per_page' ]);
2007-02-13 23:20:34 +00:00
$post_list = array ();
while ( $row = $db -> sql_fetchrow ( $result ))
{
$post_list [] = $row [ 'post_id' ];
}
$db -> sql_freeresult ( $result );
if ( ! sizeof ( $post_list ))
2004-07-11 15:20:35 +00:00
{
return false ;
}
2007-02-13 23:20:34 +00:00
$sql = $db -> sql_build_query ( 'SELECT' , array (
'SELECT' => 'u.username, u.user_id, u.user_colour, p.*' ,
'FROM' => array (
USERS_TABLE => 'u' ,
POSTS_TABLE => 'p' ,
),
'WHERE' => $db -> sql_in_set ( 'p.post_id' , $post_list ) . '
AND u . user_id = p . poster_id '
));
$result = $db -> sql_query ( $sql );
2006-07-24 10:08:36 +00:00
$bbcode_bitfield = '' ;
2007-02-13 23:22:42 +00:00
$rowset = array ();
2007-02-13 23:20:34 +00:00
while ( $row = $db -> sql_fetchrow ( $result ))
2004-07-11 15:20:35 +00:00
{
2007-03-01 21:43:27 +00:00
$rowset [ $row [ 'post_id' ]] = $row ;
2006-08-11 21:52:46 +00:00
$bbcode_bitfield = $bbcode_bitfield | base64_decode ( $row [ 'bbcode_bitfield' ]);
2004-07-11 15:20:35 +00:00
}
$db -> sql_freeresult ( $result );
// Instantiate BBCode class
2006-08-15 02:13:05 +00:00
if ( ! isset ( $bbcode ) && $bbcode_bitfield !== '' )
2004-07-11 15:20:35 +00:00
{
2006-06-06 20:53:46 +00:00
include_once ( $phpbb_root_path . 'includes/bbcode.' . $phpEx );
2006-08-15 02:13:05 +00:00
$bbcode = new bbcode ( base64_encode ( $bbcode_bitfield ));
2004-07-11 15:20:35 +00:00
}
2007-03-01 21:43:27 +00:00
for ( $i = 0 , $end = sizeof ( $post_list ); $i < $end ; ++ $i )
2004-07-11 15:20:35 +00:00
{
2007-03-01 21:43:27 +00:00
// A non-existing rowset only happens if there was no user present for the entered poster_id
// This could be a broken posts table.
if ( ! isset ( $rowset [ $post_list [ $i ]]))
{
continue ;
}
$row =& $rowset [ $post_list [ $i ]];
2006-11-16 16:51:19 +00:00
$poster_id = $row [ 'user_id' ];
$post_subject = $row [ 'post_subject' ];
$message = censor_text ( $row [ 'post_text' ]);
2004-07-11 15:20:35 +00:00
2006-06-17 11:54:42 +00:00
$decoded_message = false ;
if ( $show_quote_button && $auth -> acl_get ( 'f_reply' , $forum_id ))
{
$decoded_message = $message ;
decode_message ( $decoded_message , $row [ 'bbcode_uid' ]);
$decoded_message = censor_text ( $decoded_message );
$decoded_message = str_replace ( " \n " , " <br /> " , $decoded_message );
}
2004-07-11 15:20:35 +00:00
if ( $row [ 'bbcode_bitfield' ])
{
$bbcode -> bbcode_second_pass ( $message , $row [ 'bbcode_uid' ], $row [ 'bbcode_bitfield' ]);
}
2007-04-29 02:16:29 +00:00
$message = str_replace ( " \n " , '<br />' , $message );
2005-03-21 23:10:11 +00:00
$message = smiley_text ( $message , ! $row [ 'enable_smilies' ]);
2004-07-11 15:20:35 +00:00
$post_subject = censor_text ( $post_subject );
$template -> assign_block_vars ( $mode . '_row' , array (
2006-11-16 16:51:19 +00:00
'POST_AUTHOR_FULL' => get_username_string ( 'full' , $poster_id , $row [ 'username' ], $row [ 'user_colour' ], $row [ 'post_username' ]),
'POST_AUTHOR_COLOUR' => get_username_string ( 'colour' , $poster_id , $row [ 'username' ], $row [ 'user_colour' ], $row [ 'post_username' ]),
'POST_AUTHOR' => get_username_string ( 'username' , $poster_id , $row [ 'username' ], $row [ 'user_colour' ], $row [ 'post_username' ]),
'U_POST_AUTHOR' => get_username_string ( 'profile' , $poster_id , $row [ 'username' ], $row [ 'user_colour' ], $row [ 'post_username' ]),
2006-06-17 11:54:42 +00:00
'POST_SUBJECT' => $post_subject ,
2006-08-05 15:49:28 +00:00
'MINI_POST_IMG' => $user -> img ( 'icon_post_target' , $user -> lang [ 'POST' ]),
2006-06-17 11:54:42 +00:00
'POST_DATE' => $user -> format_date ( $row [ 'post_time' ]),
2006-08-28 17:20:21 +00:00
'MESSAGE' => $message ,
2006-06-17 11:54:42 +00:00
'DECODED_MESSAGE' => $decoded_message ,
'U_POST_ID' => $row [ 'post_id' ],
'U_MINI_POST' => append_sid ( " { $phpbb_root_path } viewtopic. $phpEx " , 'p=' . $row [ 'post_id' ]) . '#p' . $row [ 'post_id' ],
'U_MCP_DETAILS' => ( $auth -> acl_get ( 'm_info' , $forum_id )) ? append_sid ( " { $phpbb_root_path } mcp. $phpEx " , 'i=main&mode=post_details&f=' . $forum_id . '&p=' . $row [ 'post_id' ], true , $user -> session_id ) : '' ,
2006-11-17 19:40:21 +00:00
'POSTER_QUOTE' => ( $show_quote_button && $auth -> acl_get ( 'f_reply' , $forum_id )) ? addslashes ( get_username_string ( 'username' , $poster_id , $row [ 'username' ], $row [ 'user_colour' ], $row [ 'post_username' ])) : '' )
2004-07-11 15:20:35 +00:00
);
unset ( $rowset [ $i ]);
}
if ( $mode == 'topic_review' )
{
2006-08-05 15:49:28 +00:00
$template -> assign_var ( 'QUOTE_IMG' , $user -> img ( 'icon_post_quote' , $user -> lang [ 'REPLY_WITH_QUOTE' ]));
2004-07-11 15:20:35 +00:00
}
return true ;
}
2005-04-09 12:26:45 +00:00
/**
* User Notification
*/
2004-07-19 20:13:18 +00:00
function user_notification ( $mode , $subject , $topic_title , $forum_name , $forum_id , $topic_id , $post_id )
{
global $db , $user , $config , $phpbb_root_path , $phpEx , $auth ;
2006-09-13 16:08:36 +00:00
$topic_notification = ( $mode == 'reply' || $mode == 'quote' ) ? true : false ;
$forum_notification = ( $mode == 'post' ) ? true : false ;
2004-07-19 20:13:18 +00:00
if ( ! $topic_notification && ! $forum_notification )
{
trigger_error ( 'WRONG_NOTIFICATION_MODE' );
}
2006-05-20 16:23:25 +00:00
if ( ! $config [ 'allow_topic_notify' ])
{
return ;
}
2004-07-19 20:13:18 +00:00
$topic_title = ( $topic_notification ) ? $topic_title : $subject ;
$topic_title = censor_text ( $topic_title );
// 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' ];
}
}
$db -> sql_freeresult ( $result );
$notify_rows = array ();
// -- get forum_userids || topic_userids
$sql = ' SELECT u . user_id , u . username , u . user_email , u . user_lang , u . user_notify_type , u . user_jabber
FROM ' . (($topic_notification) ? TOPICS_WATCH_TABLE : FORUMS_WATCH_TABLE) . ' w , ' . USERS_TABLE . ' u
WHERE w . ' . (($topic_notification) ? ' topic_id ' : ' forum_id ') . ' = ' . (( $topic_notification ) ? $topic_id : $forum_id ) . "
AND w . user_id NOT IN ( $sql_ignore_users )
AND w . notify_status = 0
2005-04-10 18:07:12 +00:00
AND u . user_type IN ( " . USER_NORMAL . ', ' . USER_FOUNDER . ')
AND u . user_id = w . user_id ' ;
2004-07-19 20:13:18 +00:00
$result = $db -> sql_query ( $sql );
while ( $row = $db -> sql_fetchrow ( $result ))
{
$notify_rows [ $row [ 'user_id' ]] = array (
'user_id' => $row [ 'user_id' ],
'username' => $row [ 'username' ],
'user_email' => $row [ 'user_email' ],
'user_jabber' => $row [ 'user_jabber' ],
'user_lang' => $row [ 'user_lang' ],
'notify_type' => ( $topic_notification ) ? 'topic' : 'forum' ,
'template' => ( $topic_notification ) ? 'topic_notify' : 'newtopic_notify' ,
'method' => $row [ 'user_notify_type' ],
'allowed' => false
);
}
$db -> sql_freeresult ( $result );
2006-06-06 20:53:46 +00:00
2006-05-12 20:52:58 +00:00
// forum notification is sent to those not already receiving topic notifications
if ( $topic_notification )
2004-07-19 20:13:18 +00:00
{
if ( sizeof ( $notify_rows ))
{
$sql_ignore_users .= ', ' . implode ( ', ' , array_keys ( $notify_rows ));
}
$sql = ' SELECT u . user_id , u . username , u . user_email , u . user_lang , u . user_notify_type , u . user_jabber
FROM ' . FORUMS_WATCH_TABLE . ' fw , ' . USERS_TABLE . " u
WHERE fw . forum_id = $forum_id
AND fw . user_id NOT IN ( $sql_ignore_users )
AND fw . notify_status = 0
2005-04-10 18:07:12 +00:00
AND u . user_type IN ( " . USER_NORMAL . ', ' . USER_FOUNDER . ')
AND u . user_id = fw . user_id ' ;
2004-07-19 20:13:18 +00:00
$result = $db -> sql_query ( $sql );
while ( $row = $db -> sql_fetchrow ( $result ))
{
$notify_rows [ $row [ 'user_id' ]] = array (
'user_id' => $row [ 'user_id' ],
'username' => $row [ 'username' ],
'user_email' => $row [ 'user_email' ],
'user_jabber' => $row [ 'user_jabber' ],
'user_lang' => $row [ 'user_lang' ],
'notify_type' => 'forum' ,
'template' => 'forum_notify' ,
'method' => $row [ 'user_notify_type' ],
'allowed' => false
);
}
$db -> sql_freeresult ( $result );
}
if ( ! sizeof ( $notify_rows ))
{
return ;
}
2006-05-12 20:52:58 +00:00
// Make sure users are allowed to read the forum
2004-07-19 20:13:18 +00:00
foreach ( $auth -> acl_get_list ( array_keys ( $notify_rows ), 'f_read' , $forum_id ) as $forum_id => $forum_ary )
{
foreach ( $forum_ary as $auth_option => $user_ary )
{
foreach ( $user_ary as $user_id )
{
$notify_rows [ $user_id ][ 'allowed' ] = true ;
}
}
}
// Now, we have to do a little step before really sending, we need to distinguish our users a little bit. ;)
$msg_users = $delete_ids = $update_notification = array ();
foreach ( $notify_rows as $user_id => $row )
{
if ( ! $row [ 'allowed' ] || ! trim ( $row [ 'user_email' ]))
{
$delete_ids [ $row [ 'notify_type' ]][] = $row [ 'user_id' ];
}
else
{
$msg_users [] = $row ;
$update_notification [ $row [ 'notify_type' ]][] = $row [ 'user_id' ];
}
}
unset ( $notify_rows );
// Now, we are able to really send out notifications
if ( sizeof ( $msg_users ))
{
include_once ( $phpbb_root_path . 'includes/functions_messenger.' . $phpEx );
$messenger = new messenger ();
$msg_list_ary = array ();
foreach ( $msg_users as $row )
{
2004-11-06 14:22:04 +00:00
$pos = ( ! isset ( $msg_list_ary [ $row [ 'template' ]])) ? 0 : sizeof ( $msg_list_ary [ $row [ 'template' ]]);
2004-07-19 20:13:18 +00:00
$msg_list_ary [ $row [ 'template' ]][ $pos ][ 'method' ] = $row [ 'method' ];
$msg_list_ary [ $row [ 'template' ]][ $pos ][ 'email' ] = $row [ 'user_email' ];
$msg_list_ary [ $row [ 'template' ]][ $pos ][ 'jabber' ] = $row [ 'user_jabber' ];
$msg_list_ary [ $row [ 'template' ]][ $pos ][ 'name' ] = $row [ 'username' ];
$msg_list_ary [ $row [ 'template' ]][ $pos ][ 'lang' ] = $row [ 'user_lang' ];
}
unset ( $msg_users );
foreach ( $msg_list_ary as $email_template => $email_list )
{
foreach ( $email_list as $addr )
{
$messenger -> template ( $email_template , $addr [ 'lang' ]);
$messenger -> to ( $addr [ 'email' ], $addr [ 'name' ]);
$messenger -> im ( $addr [ 'jabber' ], $addr [ 'name' ]);
$messenger -> assign_vars ( array (
2006-11-03 21:05:25 +00:00
'USERNAME' => htmlspecialchars_decode ( $addr [ 'name' ]),
'TOPIC_TITLE' => htmlspecialchars_decode ( $topic_title ),
'FORUM_NAME' => htmlspecialchars_decode ( $forum_name ),
2004-07-19 20:13:18 +00:00
'U_FORUM' => generate_board_url () . " /viewforum. $phpEx ?f= $forum_id &e=0 " ,
'U_TOPIC' => generate_board_url () . " /viewtopic. $phpEx ?f= $forum_id &t= $topic_id &e=0 " ,
'U_NEWEST_POST' => generate_board_url () . " /viewtopic. $phpEx ?f= $forum_id &t= $topic_id &p= $post_id &e= $post_id " ,
2006-06-06 20:53:46 +00:00
'U_STOP_WATCHING_TOPIC' => generate_board_url () . " /viewtopic. $phpEx ?f= $forum_id &t= $topic_id &unwatch=topic " ,
'U_STOP_WATCHING_FORUM' => generate_board_url () . " /viewforum. $phpEx ?f= $forum_id &unwatch=forum " ,
2004-07-19 20:13:18 +00:00
));
$messenger -> send ( $addr [ 'method' ]);
}
}
unset ( $msg_list_ary );
2005-04-09 12:26:45 +00:00
$messenger -> save_queue ();
2004-07-19 20:13:18 +00:00
}
// Handle the DB updates
2006-06-06 20:53:46 +00:00
$db -> sql_transaction ( 'begin' );
2004-07-19 20:13:18 +00:00
2006-05-12 20:52:58 +00:00
if ( ! empty ( $update_notification [ 'topic' ]))
2004-07-19 20:13:18 +00:00
{
2006-06-06 20:53:46 +00:00
$sql = 'UPDATE ' . TOPICS_WATCH_TABLE . "
2004-07-19 20:13:18 +00:00
SET notify_status = 1
WHERE topic_id = $topic_id
2006-08-12 13:14:39 +00:00
AND " . $db->sql_in_set ('user_id', $update_notification['topic'] );
2006-06-06 20:53:46 +00:00
$db -> sql_query ( $sql );
2004-07-19 20:13:18 +00:00
}
2006-05-12 20:52:58 +00:00
if ( ! empty ( $update_notification [ 'forum' ]))
2004-07-19 20:13:18 +00:00
{
2006-06-06 20:53:46 +00:00
$sql = 'UPDATE ' . FORUMS_WATCH_TABLE . "
2004-07-19 20:13:18 +00:00
SET notify_status = 1
WHERE forum_id = $forum_id
2006-08-12 13:14:39 +00:00
AND " . $db->sql_in_set ('user_id', $update_notification['forum'] );
2006-06-06 20:53:46 +00:00
$db -> sql_query ( $sql );
2004-07-19 20:13:18 +00:00
}
2007-03-30 14:24:55 +00:00
// Now delete the user_ids not authorised to receive notifications on this topic/forum
2006-05-12 20:52:58 +00:00
if ( ! empty ( $delete_ids [ 'topic' ]))
2004-07-19 20:13:18 +00:00
{
2006-06-06 20:53:46 +00:00
$sql = 'DELETE FROM ' . TOPICS_WATCH_TABLE . "
2004-07-19 20:13:18 +00:00
WHERE topic_id = $topic_id
2006-08-12 13:14:39 +00:00
AND " . $db->sql_in_set ('user_id', $delete_ids['topic'] );
2006-06-06 20:53:46 +00:00
$db -> sql_query ( $sql );
2004-07-19 20:13:18 +00:00
}
2006-05-12 20:52:58 +00:00
if ( ! empty ( $delete_ids [ 'forum' ]))
2004-07-19 20:13:18 +00:00
{
2006-06-06 20:53:46 +00:00
$sql = 'DELETE FROM ' . FORUMS_WATCH_TABLE . "
2004-07-19 20:13:18 +00:00
WHERE forum_id = $forum_id
2006-08-12 13:14:39 +00:00
AND " . $db->sql_in_set ('user_id', $delete_ids['forum'] );
2006-06-06 20:53:46 +00:00
$db -> sql_query ( $sql );
2004-07-19 20:13:18 +00:00
}
$db -> sql_transaction ( 'commit' );
}
2006-05-12 20:52:58 +00:00
//
// Post handling functions
//
/**
* Delete Post
*/
function delete_post ( $forum_id , $topic_id , $post_id , & $data )
{
global $db , $user , $auth ;
2006-06-06 20:53:46 +00:00
global $config , $phpEx , $phpbb_root_path ;
2006-05-12 20:52:58 +00:00
// Specify our post mode
$post_mode = ( $data [ 'topic_first_post_id' ] == $data [ 'topic_last_post_id' ]) ? 'delete_topic' : (( $data [ 'topic_first_post_id' ] == $post_id ) ? 'delete_first_post' : (( $data [ 'topic_last_post_id' ] == $post_id ) ? 'delete_last_post' : 'delete' ));
$sql_data = array ();
$next_post_id = 0 ;
include_once ( $phpbb_root_path . 'includes/functions_admin.' . $phpEx );
2006-06-06 20:53:46 +00:00
$db -> sql_transaction ( 'begin' );
2006-05-12 20:52:58 +00:00
2006-05-27 16:24:21 +00:00
if ( ! delete_posts ( 'post_id' , array ( $post_id ), false , false ))
2006-05-12 20:52:58 +00:00
{
// Try to delete topic, we may had an previous error causing inconsistency
2006-06-14 18:59:12 +00:00
if ( $post_mode == 'delete_topic' )
2006-05-12 20:52:58 +00:00
{
delete_topics ( 'topic_id' , array ( $topic_id ), false );
}
trigger_error ( 'ALREADY_DELETED' );
}
$db -> sql_transaction ( 'commit' );
2006-06-14 18:59:12 +00:00
// Collect the necessary information for updating the tables
2006-05-12 20:52:58 +00:00
$sql_data [ FORUMS_TABLE ] = '' ;
switch ( $post_mode )
{
case 'delete_topic' :
delete_topics ( 'topic_id' , array ( $topic_id ), false );
if ( $data [ 'topic_type' ] != POST_GLOBAL )
{
$sql_data [ FORUMS_TABLE ] .= 'forum_posts = forum_posts - 1, forum_topics_real = forum_topics_real - 1' ;
$sql_data [ FORUMS_TABLE ] .= ( $data [ 'topic_approved' ]) ? ', forum_topics = forum_topics - 1' : '' ;
}
$update_sql = update_post_information ( 'forum' , $forum_id , true );
if ( sizeof ( $update_sql ))
{
$sql_data [ FORUMS_TABLE ] .= ( $sql_data [ FORUMS_TABLE ]) ? ', ' : '' ;
$sql_data [ FORUMS_TABLE ] .= implode ( ', ' , $update_sql [ $forum_id ]);
}
break ;
case 'delete_first_post' :
2006-08-21 15:58:48 +00:00
$sql = ' SELECT p . post_id , p . poster_id , p . post_username , u . username , u . user_colour
2006-05-12 20:52:58 +00:00
FROM ' . POSTS_TABLE . ' p , ' . USERS_TABLE . " u
WHERE p . topic_id = $topic_id
AND p . poster_id = u . user_id
ORDER BY p . post_time ASC " ;
$result = $db -> sql_query_limit ( $sql , 1 );
$row = $db -> sql_fetchrow ( $result );
$db -> sql_freeresult ( $result );
if ( $data [ 'topic_type' ] != POST_GLOBAL )
{
$sql_data [ FORUMS_TABLE ] = 'forum_posts = forum_posts - 1' ;
}
2006-11-19 21:00:48 +00:00
$sql_data [ TOPICS_TABLE ] = 'topic_first_post_id = ' . intval ( $row [ 'post_id' ]) . " , topic_first_poster_colour = ' " . $db -> sql_escape ( $row [ 'user_colour' ]) . " ', topic_first_poster_name = ' " . (( $row [ 'poster_id' ] == ANONYMOUS ) ? $db -> sql_escape ( $row [ 'post_username' ]) : $db -> sql_escape ( $row [ 'username' ])) . " ' " ;
2006-05-12 20:52:58 +00:00
$sql_data [ TOPICS_TABLE ] .= ', topic_replies_real = topic_replies_real - 1' . (( $data [ 'post_approved' ]) ? ', topic_replies = topic_replies - 1' : '' );
$next_post_id = ( int ) $row [ 'post_id' ];
break ;
case 'delete_last_post' :
if ( $data [ 'topic_type' ] != POST_GLOBAL )
{
$sql_data [ FORUMS_TABLE ] = 'forum_posts = forum_posts - 1' ;
}
$update_sql = update_post_information ( 'forum' , $forum_id , true );
if ( sizeof ( $update_sql ))
{
$sql_data [ FORUMS_TABLE ] .= ( $sql_data [ FORUMS_TABLE ]) ? ', ' : '' ;
$sql_data [ FORUMS_TABLE ] .= implode ( ', ' , $update_sql [ $forum_id ]);
}
2006-06-06 20:53:46 +00:00
2006-05-12 20:52:58 +00:00
$sql_data [ TOPICS_TABLE ] = 'topic_bumped = 0, topic_bumper = 0, topic_replies_real = topic_replies_real - 1' . (( $data [ 'post_approved' ]) ? ', topic_replies = topic_replies - 1' : '' );
$update_sql = update_post_information ( 'topic' , $topic_id , true );
if ( sizeof ( $update_sql ))
{
$sql_data [ TOPICS_TABLE ] .= ', ' . implode ( ', ' , $update_sql [ $topic_id ]);
$next_post_id = ( int ) str_replace ( 'topic_last_post_id = ' , '' , $update_sql [ $topic_id ][ 0 ]);
}
else
{
$sql = ' SELECT MAX ( post_id ) as last_post_id
FROM ' . POSTS_TABLE . "
WHERE topic_id = $topic_id " .
(( ! $auth -> acl_get ( 'm_approve' , $forum_id )) ? 'AND post_approved = 1' : '' );
$result = $db -> sql_query ( $sql );
$row = $db -> sql_fetchrow ( $result );
$db -> sql_freeresult ( $result );
$next_post_id = ( int ) $row [ 'last_post_id' ];
}
break ;
case 'delete' :
$sql = ' SELECT post_id
FROM ' . POSTS_TABLE . "
WHERE topic_id = $topic_id " .
(( ! $auth -> acl_get ( 'm_approve' , $forum_id )) ? 'AND post_approved = 1' : '' ) . '
AND post_time > ' . $data[' post_time '] . '
ORDER BY post_time ASC ' ;
$result = $db -> sql_query_limit ( $sql , 1 );
$row = $db -> sql_fetchrow ( $result );
$db -> sql_freeresult ( $result );
if ( $data [ 'topic_type' ] != POST_GLOBAL )
{
$sql_data [ FORUMS_TABLE ] = 'forum_posts = forum_posts - 1' ;
}
$sql_data [ TOPICS_TABLE ] = 'topic_replies_real = topic_replies_real - 1' . (( $data [ 'post_approved' ]) ? ', topic_replies = topic_replies - 1' : '' );
$next_post_id = ( int ) $row [ 'post_id' ];
break ;
}
2006-08-01 15:29:47 +00:00
// $sql_data[USERS_TABLE] = ($data['post_postcount']) ? 'user_posts = user_posts - 1' : '';
2006-05-12 20:52:58 +00:00
2006-06-06 20:53:46 +00:00
$db -> sql_transaction ( 'begin' );
2006-05-12 20:52:58 +00:00
$where_sql = array (
FORUMS_TABLE => " forum_id = $forum_id " ,
TOPICS_TABLE => " topic_id = $topic_id " ,
USERS_TABLE => 'user_id = ' . $data [ 'poster_id' ]
);
foreach ( $sql_data as $table => $update_sql )
{
if ( $update_sql )
{
$db -> sql_query ( " UPDATE $table SET $update_sql WHERE " . $where_sql [ $table ]);
}
}
2006-05-27 16:24:21 +00:00
// Adjust posted info for this user by looking for a post by him/her within this topic...
2006-12-15 14:54:52 +00:00
if ( $post_mode != 'delete_topic' && $config [ 'load_db_track' ] && $data [ 'poster_id' ] != ANONYMOUS )
2006-05-27 16:24:21 +00:00
{
$sql = ' SELECT poster_id
FROM ' . POSTS_TABLE . '
WHERE topic_id = ' . $topic_id . '
2006-12-15 14:54:52 +00:00
AND poster_id = ' . $data[' poster_id ' ];
2006-05-27 16:24:21 +00:00
$result = $db -> sql_query_limit ( $sql , 1 );
$poster_id = ( int ) $db -> sql_fetchfield ( 'poster_id' );
$db -> sql_freeresult ( $result );
// The user is not having any more posts within this topic
if ( ! $poster_id )
{
$sql = 'DELETE FROM ' . TOPICS_POSTED_TABLE . '
WHERE topic_id = ' . $topic_id . '
2006-12-15 14:54:52 +00:00
AND user_id = ' . $data[' poster_id ' ];
2006-05-27 16:24:21 +00:00
$db -> sql_query ( $sql );
}
}
2007-05-05 10:22:24 +00:00
$db -> sql_transaction ( 'commit' );
2006-06-14 18:59:12 +00:00
if ( $data [ 'post_reported' ] && ( $post_mode != 'delete_topic' ))
{
sync ( 'topic_reported' , 'topic_id' , array ( $topic_id ));
}
2006-05-12 20:52:58 +00:00
return $next_post_id ;
}
/**
* Submit Post
*/
function submit_post ( $mode , $subject , $username , $topic_type , & $poll , & $data , $update_message = true )
{
2006-06-06 20:53:46 +00:00
global $db , $auth , $user , $config , $phpEx , $template , $phpbb_root_path ;
2006-05-12 20:52:58 +00:00
// We do not handle erasing posts here
if ( $mode == 'delete' )
{
2006-05-26 15:04:27 +00:00
return false ;
2006-05-12 20:52:58 +00:00
}
$current_time = time ();
if ( $mode == 'post' )
{
$post_mode = 'post' ;
$update_message = true ;
}
else if ( $mode != 'edit' )
{
$post_mode = 'reply' ;
$update_message = true ;
}
else if ( $mode == 'edit' )
{
$post_mode = ( $data [ 'topic_first_post_id' ] == $data [ 'topic_last_post_id' ]) ? 'edit_topic' : (( $data [ 'topic_first_post_id' ] == $data [ 'post_id' ]) ? 'edit_first_post' : (( $data [ 'topic_last_post_id' ] == $data [ 'post_id' ]) ? 'edit_last_post' : 'edit' ));
}
2006-08-01 15:29:47 +00:00
// First of all make sure the subject and topic title are having the correct length.
// To achive this without cutting off between special chars we convert to an array and then count the elements.
$subject = truncate_string ( $subject );
$data [ 'topic_title' ] = truncate_string ( $data [ 'topic_title' ]);
2006-11-24 14:59:26 +00:00
// Collect some basic information about which tables and which rows to update/insert
2006-05-12 20:52:58 +00:00
$sql_data = array ();
$poster_id = ( $mode == 'edit' ) ? $data [ 'poster_id' ] : ( int ) $user -> data [ 'user_id' ];
2006-11-24 14:59:26 +00:00
// Collect Information
2006-05-12 20:52:58 +00:00
switch ( $post_mode )
{
case 'post' :
case 'reply' :
$sql_data [ POSTS_TABLE ][ 'sql' ] = array (
2006-06-06 20:53:46 +00:00
'forum_id' => ( $topic_type == POST_GLOBAL ) ? 0 : $data [ 'forum_id' ],
'poster_id' => ( int ) $user -> data [ 'user_id' ],
2006-05-12 20:52:58 +00:00
'icon_id' => $data [ 'icon_id' ],
2006-06-06 20:53:46 +00:00
'poster_ip' => $user -> ip ,
2006-05-12 20:52:58 +00:00
'post_time' => $current_time ,
2006-06-06 20:53:46 +00:00
'post_approved' => ( ! $auth -> acl_get ( 'f_noapprove' , $data [ 'forum_id' ]) && ! $auth -> acl_get ( 'm_approve' , $data [ 'forum_id' ])) ? 0 : 1 ,
'enable_bbcode' => $data [ 'enable_bbcode' ],
'enable_smilies' => $data [ 'enable_smilies' ],
'enable_magic_url' => $data [ 'enable_urls' ],
'enable_sig' => $data [ 'enable_sig' ],
2006-05-12 20:52:58 +00:00
'post_username' => ( ! $user -> data [ 'is_registered' ]) ? $username : '' ,
'post_subject' => $subject ,
2006-06-06 20:53:46 +00:00
'post_text' => $data [ 'message' ],
2006-05-12 20:52:58 +00:00
'post_checksum' => $data [ 'message_md5' ],
2006-09-28 15:04:59 +00:00
'post_attachment' => ( ! empty ( $data [ 'attachment_data' ])) ? 1 : 0 ,
2006-05-12 20:52:58 +00:00
'bbcode_bitfield' => $data [ 'bbcode_bitfield' ],
'bbcode_uid' => $data [ 'bbcode_uid' ],
2006-08-02 09:36:31 +00:00
'post_postcount' => ( $auth -> acl_get ( 'f_postcount' , $data [ 'forum_id' ])) ? 1 : 0 ,
2006-05-12 20:52:58 +00:00
'post_edit_locked' => $data [ 'post_edit_locked' ]
);
break ;
case 'edit_first_post' :
case 'edit' :
2006-06-06 20:53:46 +00:00
2006-05-12 20:52:58 +00:00
case 'edit_last_post' :
case 'edit_topic' :
2007-05-02 16:19:35 +00:00
// If edit reason is given always display edit info
// If editing last post then display no edit info
// If m_edit permission then display no edit info
// If normal edit display edit info
// Display edit info if edit reason given or user is editing his post, which is not the last within the topic.
if ( $data [ 'post_edit_reason' ] || ( ! $auth -> acl_get ( 'm_edit' , $data [ 'forum_id' ]) && ( $post_mode == 'edit' || $post_mode == 'edit_first_post' )))
2006-05-12 20:52:58 +00:00
{
$sql_data [ POSTS_TABLE ][ 'sql' ] = array (
2007-05-02 16:19:35 +00:00
'post_edit_time' => $current_time ,
'post_edit_reason' => $data [ 'post_edit_reason' ],
'post_edit_user' => ( int ) $data [ 'post_edit_user' ],
2006-05-12 20:52:58 +00:00
);
$sql_data [ POSTS_TABLE ][ 'stat' ][] = 'post_edit_count = post_edit_count + 1' ;
}
if ( ! isset ( $sql_data [ POSTS_TABLE ][ 'sql' ]))
{
$sql_data [ POSTS_TABLE ][ 'sql' ] = array ();
}
$sql_data [ POSTS_TABLE ][ 'sql' ] = array_merge ( $sql_data [ POSTS_TABLE ][ 'sql' ], array (
2006-06-06 20:53:46 +00:00
'forum_id' => ( $topic_type == POST_GLOBAL ) ? 0 : $data [ 'forum_id' ],
'poster_id' => $data [ 'poster_id' ],
2006-05-12 20:52:58 +00:00
'icon_id' => $data [ 'icon_id' ],
2006-06-06 20:53:46 +00:00
'post_approved' => ( ! $auth -> acl_get ( 'f_noapprove' , $data [ 'forum_id' ]) && ! $auth -> acl_get ( 'm_approve' , $data [ 'forum_id' ])) ? 0 : 1 ,
'enable_bbcode' => $data [ 'enable_bbcode' ],
'enable_smilies' => $data [ 'enable_smilies' ],
'enable_magic_url' => $data [ 'enable_urls' ],
'enable_sig' => $data [ 'enable_sig' ],
2006-05-12 20:52:58 +00:00
'post_username' => ( $username && $data [ 'poster_id' ] == ANONYMOUS ) ? $username : '' ,
'post_subject' => $subject ,
'post_checksum' => $data [ 'message_md5' ],
2006-09-28 15:04:59 +00:00
'post_attachment' => ( ! empty ( $data [ 'attachment_data' ])) ? 1 : 0 ,
2006-05-12 20:52:58 +00:00
'bbcode_bitfield' => $data [ 'bbcode_bitfield' ],
'bbcode_uid' => $data [ 'bbcode_uid' ],
'post_edit_locked' => $data [ 'post_edit_locked' ])
);
if ( $update_message )
{
$sql_data [ POSTS_TABLE ][ 'sql' ][ 'post_text' ] = $data [ 'message' ];
}
break ;
}
2007-04-30 16:18:59 +00:00
$post_approved = $sql_data [ POSTS_TABLE ][ 'sql' ][ 'post_approved' ];
2006-05-12 20:52:58 +00:00
// And the topic ladies and gentlemen
switch ( $post_mode )
{
case 'post' :
$sql_data [ TOPICS_TABLE ][ 'sql' ] = array (
'topic_poster' => ( int ) $user -> data [ 'user_id' ],
'topic_time' => $current_time ,
2006-06-06 20:53:46 +00:00
'forum_id' => ( $topic_type == POST_GLOBAL ) ? 0 : $data [ 'forum_id' ],
2006-05-12 20:52:58 +00:00
'icon_id' => $data [ 'icon_id' ],
2006-06-06 20:53:46 +00:00
'topic_approved' => ( ! $auth -> acl_get ( 'f_noapprove' , $data [ 'forum_id' ]) && ! $auth -> acl_get ( 'm_approve' , $data [ 'forum_id' ])) ? 0 : 1 ,
'topic_title' => $subject ,
2006-05-12 20:52:58 +00:00
'topic_first_poster_name' => ( ! $user -> data [ 'is_registered' ] && $username ) ? $username : (( $user -> data [ 'user_id' ] != ANONYMOUS ) ? $user -> data [ 'username' ] : '' ),
2006-08-21 15:58:48 +00:00
'topic_first_poster_colour' => (( $user -> data [ 'user_id' ] != ANONYMOUS ) ? $user -> data [ 'user_colour' ] : '' ),
2006-05-12 20:52:58 +00:00
'topic_type' => $topic_type ,
'topic_time_limit' => ( $topic_type == POST_STICKY || $topic_type == POST_ANNOUNCE ) ? ( $data [ 'topic_time_limit' ] * 86400 ) : 0 ,
2006-09-28 15:04:59 +00:00
'topic_attachment' => ( ! empty ( $data [ 'attachment_data' ])) ? 1 : 0 ,
2006-05-12 20:52:58 +00:00
);
if ( isset ( $poll [ 'poll_options' ]) && ! empty ( $poll [ 'poll_options' ]))
{
$sql_data [ TOPICS_TABLE ][ 'sql' ] = array_merge ( $sql_data [ TOPICS_TABLE ][ 'sql' ], array (
'poll_title' => $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 ),
'poll_vote_change' => $poll [ 'poll_vote_change' ])
);
}
$sql_data [ USERS_TABLE ][ 'stat' ][] = " user_lastpost_time = $current_time " . (( $auth -> acl_get ( 'f_postcount' , $data [ 'forum_id' ])) ? ', user_posts = user_posts + 1' : '' );
if ( $topic_type != POST_GLOBAL )
{
2006-06-06 20:53:46 +00:00
if ( $auth -> acl_get ( 'f_noapprove' , $data [ 'forum_id' ]) || $auth -> acl_get ( 'm_approve' , $data [ 'forum_id' ]))
2006-05-12 20:52:58 +00:00
{
$sql_data [ FORUMS_TABLE ][ 'stat' ][] = 'forum_posts = forum_posts + 1' ;
}
2006-06-06 20:53:46 +00:00
$sql_data [ FORUMS_TABLE ][ 'stat' ][] = 'forum_topics_real = forum_topics_real + 1' . (( $auth -> acl_get ( 'f_noapprove' , $data [ 'forum_id' ]) || $auth -> acl_get ( 'm_approve' , $data [ 'forum_id' ])) ? ', forum_topics = forum_topics + 1' : '' );
2006-05-12 20:52:58 +00:00
}
break ;
case 'reply' :
2007-03-03 17:41:21 +00:00
$sql_data [ TOPICS_TABLE ][ 'stat' ][] = 'topic_replies_real = topic_replies_real + 1, topic_bumped = 0, topic_bumper = 0' . (( $auth -> acl_get ( 'f_noapprove' , $data [ 'forum_id' ]) || $auth -> acl_get ( 'm_approve' , $data [ 'forum_id' ])) ? ', topic_replies = topic_replies + 1' : '' ) . (( ! empty ( $data [ 'attachment_data' ]) || ( isset ( $data [ 'topic_attachment' ]) && $data [ 'topic_attachment' ])) ? ', topic_attachment = 1' : '' );
2006-05-12 20:52:58 +00:00
$sql_data [ USERS_TABLE ][ 'stat' ][] = " user_lastpost_time = $current_time " . (( $auth -> acl_get ( 'f_postcount' , $data [ 'forum_id' ])) ? ', user_posts = user_posts + 1' : '' );
2006-06-06 20:53:46 +00:00
if (( $auth -> acl_get ( 'f_noapprove' , $data [ 'forum_id' ]) || $auth -> acl_get ( 'm_approve' , $data [ 'forum_id' ])) && $topic_type != POST_GLOBAL )
2006-05-12 20:52:58 +00:00
{
$sql_data [ FORUMS_TABLE ][ 'stat' ][] = 'forum_posts = forum_posts + 1' ;
}
break ;
case 'edit_topic' :
case 'edit_first_post' :
$sql_data [ TOPICS_TABLE ][ 'sql' ] = array (
2006-06-06 20:53:46 +00:00
'forum_id' => ( $topic_type == POST_GLOBAL ) ? 0 : $data [ 'forum_id' ],
2006-05-12 20:52:58 +00:00
'icon_id' => $data [ 'icon_id' ],
2006-06-06 20:53:46 +00:00
'topic_approved' => ( ! $auth -> acl_get ( 'f_noapprove' , $data [ 'forum_id' ]) && ! $auth -> acl_get ( 'm_approve' , $data [ 'forum_id' ])) ? 0 : 1 ,
'topic_title' => $subject ,
2006-05-12 20:52:58 +00:00
'topic_first_poster_name' => $username ,
'topic_type' => $topic_type ,
'topic_time_limit' => ( $topic_type == POST_STICKY || $topic_type == POST_ANNOUNCE ) ? ( $data [ 'topic_time_limit' ] * 86400 ) : 0 ,
'poll_title' => ( isset ( $poll [ 'poll_options' ])) ? $poll [ 'poll_title' ] : '' ,
'poll_start' => ( isset ( $poll [ 'poll_options' ])) ? (( $poll [ 'poll_start' ]) ? $poll [ 'poll_start' ] : $current_time ) : 0 ,
'poll_max_options' => ( isset ( $poll [ 'poll_options' ])) ? $poll [ 'poll_max_options' ] : 1 ,
'poll_length' => ( isset ( $poll [ 'poll_options' ])) ? ( $poll [ 'poll_length' ] * 86400 ) : 0 ,
'poll_vote_change' => ( isset ( $poll [ 'poll_vote_change' ])) ? $poll [ 'poll_vote_change' ] : 0 ,
2006-09-28 15:04:59 +00:00
'topic_attachment' => ( ! empty ( $data [ 'attachment_data' ])) ? 1 : ( isset ( $data [ 'topic_attachment' ]) ? $data [ 'topic_attachment' ] : 0 ),
2006-05-12 20:52:58 +00:00
);
2007-03-08 15:49:13 +00:00
// no break;
case 'edit' :
case 'edit_last_post' :
// Correctly set back the topic replies and forum posts...
if ( ! $auth -> acl_get ( 'f_noapprove' , $data [ 'forum_id' ]) && ! $auth -> acl_get ( 'm_approve' , $data [ 'forum_id' ]))
{
$sql_data [ TOPICS_TABLE ][ 'stat' ][] = 'topic_replies = topic_replies - 1' ;
$sql_data [ FORUMS_TABLE ][ 'stat' ][] = 'forum_posts = forum_posts - 1' ;
}
2006-05-12 20:52:58 +00:00
break ;
}
2006-06-06 20:53:46 +00:00
$db -> sql_transaction ( 'begin' );
2006-05-12 20:52:58 +00:00
// Submit new topic
if ( $post_mode == 'post' )
{
$sql = 'INSERT INTO ' . TOPICS_TABLE . ' ' .
$db -> sql_build_array ( 'INSERT' , $sql_data [ TOPICS_TABLE ][ 'sql' ]);
$db -> sql_query ( $sql );
$data [ 'topic_id' ] = $db -> sql_nextid ();
$sql_data [ POSTS_TABLE ][ 'sql' ] = array_merge ( $sql_data [ POSTS_TABLE ][ 'sql' ], array (
'topic_id' => $data [ 'topic_id' ])
);
unset ( $sql_data [ TOPICS_TABLE ][ 'sql' ]);
}
// Submit new post
if ( $post_mode == 'post' || $post_mode == 'reply' )
{
if ( $post_mode == 'reply' )
{
$sql_data [ POSTS_TABLE ][ 'sql' ] = array_merge ( $sql_data [ POSTS_TABLE ][ 'sql' ], array (
'topic_id' => $data [ 'topic_id' ])
);
}
2007-01-11 05:44:22 +00:00
$sql = 'INSERT INTO ' . POSTS_TABLE . ' ' . $db -> sql_build_array ( 'INSERT' , $sql_data [ POSTS_TABLE ][ 'sql' ]);
2006-05-12 20:52:58 +00:00
$db -> sql_query ( $sql );
$data [ 'post_id' ] = $db -> sql_nextid ();
if ( $post_mode == 'post' )
{
$sql_data [ TOPICS_TABLE ][ 'sql' ] = array (
'topic_first_post_id' => $data [ 'post_id' ],
'topic_last_post_id' => $data [ 'post_id' ],
'topic_last_post_time' => $current_time ,
'topic_last_poster_id' => ( int ) $user -> data [ 'user_id' ],
2006-08-21 15:58:48 +00:00
'topic_last_poster_name' => ( ! $user -> data [ 'is_registered' ] && $username ) ? $username : (( $user -> data [ 'user_id' ] != ANONYMOUS ) ? $user -> data [ 'username' ] : '' ),
'topic_last_poster_colour' => (( $user -> data [ 'user_id' ] != ANONYMOUS ) ? $user -> data [ 'user_colour' ] : '' ),
2006-05-12 20:52:58 +00:00
);
}
unset ( $sql_data [ POSTS_TABLE ][ 'sql' ]);
}
$make_global = false ;
// Are we globalising or unglobalising?
if ( $post_mode == 'edit_first_post' || $post_mode == 'edit_topic' )
{
$sql = ' SELECT topic_type , topic_replies_real , topic_approved
FROM ' . TOPICS_TABLE . '
WHERE topic_id = ' . $data[' topic_id ' ];
$result = $db -> sql_query ( $sql );
$row = $db -> sql_fetchrow ( $result );
$db -> sql_freeresult ( $result );
// globalise
if ( $row [ 'topic_type' ] != POST_GLOBAL && $topic_type == POST_GLOBAL )
{
// Decrement topic/post count
$make_global = true ;
$sql_data [ FORUMS_TABLE ][ 'stat' ] = array ();
$sql_data [ FORUMS_TABLE ][ 'stat' ][] = 'forum_posts = forum_posts - ' . ( $row [ 'topic_replies_real' ] + 1 );
$sql_data [ FORUMS_TABLE ][ 'stat' ][] = 'forum_topics_real = forum_topics_real - 1' . (( $row [ 'topic_approved' ]) ? ', forum_topics = forum_topics - 1' : '' );
// Update forum_ids for all posts
$sql = 'UPDATE ' . POSTS_TABLE . '
SET forum_id = 0
WHERE topic_id = ' . $data[' topic_id ' ];
$db -> sql_query ( $sql );
}
// unglobalise
else if ( $row [ 'topic_type' ] == POST_GLOBAL && $topic_type != POST_GLOBAL )
{
// Increment topic/post count
$make_global = true ;
$sql_data [ FORUMS_TABLE ][ 'stat' ] = array ();
$sql_data [ FORUMS_TABLE ][ 'stat' ][] = 'forum_posts = forum_posts + ' . ( $row [ 'topic_replies_real' ] + 1 );
$sql_data [ FORUMS_TABLE ][ 'stat' ][] = 'forum_topics_real = forum_topics_real + 1' . (( $row [ 'topic_approved' ]) ? ', forum_topics = forum_topics + 1' : '' );
// Update forum_ids for all posts
$sql = 'UPDATE ' . POSTS_TABLE . '
SET forum_id = ' . $data[' forum_id '] . '
WHERE topic_id = ' . $data[' topic_id ' ];
$db -> sql_query ( $sql );
}
}
// Update the topics table
if ( isset ( $sql_data [ TOPICS_TABLE ][ 'sql' ]))
{
2006-06-06 20:53:46 +00:00
$sql = 'UPDATE ' . TOPICS_TABLE . '
2006-05-12 20:52:58 +00:00
SET ' . $db->sql_build_array(' UPDATE ', $sql_data[TOPICS_TABLE][' sql ']) . '
2006-06-06 20:53:46 +00:00
WHERE topic_id = ' . $data[' topic_id ' ];
$db -> sql_query ( $sql );
2006-05-12 20:52:58 +00:00
}
// Update the posts table
if ( isset ( $sql_data [ POSTS_TABLE ][ 'sql' ]))
{
2006-06-06 20:53:46 +00:00
$sql = 'UPDATE ' . POSTS_TABLE . '
2006-08-06 05:52:41 +00:00
SET ' . $db->sql_build_array(' UPDATE ', $sql_data[POSTS_TABLE][' sql ']) . '
2006-06-06 20:53:46 +00:00
WHERE post_id = ' . $data[' post_id ' ];
$db -> sql_query ( $sql );
2006-05-12 20:52:58 +00:00
}
// Update Poll Tables
if ( isset ( $poll [ 'poll_options' ]) && ! empty ( $poll [ 'poll_options' ]))
{
$cur_poll_options = array ();
if ( $poll [ 'poll_start' ] && $mode == 'edit' )
{
2007-04-02 16:05:48 +00:00
$sql = ' SELECT *
FROM ' . POLL_OPTIONS_TABLE . '
2006-05-12 20:52:58 +00:00
WHERE topic_id = ' . $data[' topic_id '] . '
ORDER BY poll_option_id ' ;
$result = $db -> sql_query ( $sql );
$cur_poll_options = array ();
while ( $row = $db -> sql_fetchrow ( $result ))
{
$cur_poll_options [] = $row ;
}
$db -> sql_freeresult ( $result );
}
$sql_insert_ary = array ();
for ( $i = 0 , $size = sizeof ( $poll [ 'poll_options' ]); $i < $size ; $i ++ )
{
if ( trim ( $poll [ 'poll_options' ][ $i ]))
{
2006-05-21 16:54:19 +00:00
if ( empty ( $cur_poll_options [ $i ]))
2006-05-12 20:52:58 +00:00
{
2007-04-02 16:05:48 +00:00
// If we add options we need to put them to the end to be able to preserve votes...
2006-05-12 20:52:58 +00:00
$sql_insert_ary [] = array (
2007-04-02 16:05:48 +00:00
'poll_option_id' => ( int ) sizeof ( $cur_poll_options ) + 1 + sizeof ( $sql_insert_ary ),
2006-05-12 20:52:58 +00:00
'topic_id' => ( int ) $data [ 'topic_id' ],
'poll_option_text' => ( string ) $poll [ 'poll_options' ][ $i ]
);
}
else if ( $poll [ 'poll_options' ][ $i ] != $cur_poll_options [ $i ])
{
2007-04-02 16:05:48 +00:00
$sql = 'UPDATE ' . POLL_OPTIONS_TABLE . "
2006-05-12 20:52:58 +00:00
SET poll_option_text = '" . $db->sql_escape($poll[' poll_options '][$i]) . "'
2007-04-02 16:05:48 +00:00
WHERE poll_option_id = " . $cur_poll_options[$i] ['poll_option_id'] . '
AND topic_id = ' . $data[' topic_id ' ];
2006-05-12 20:52:58 +00:00
$db -> sql_query ( $sql );
}
}
}
2006-10-14 14:56:46 +00:00
$db -> sql_multi_insert ( POLL_OPTIONS_TABLE , $sql_insert_ary );
2006-05-12 20:52:58 +00:00
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 );
}
2007-04-02 16:05:48 +00:00
// If edited, we would need to reset votes (since options can be re-ordered above, you can't be sure if the change is for changing the text or adding an option
if ( $mode == 'edit' && sizeof ( $poll [ 'poll_options' ]) != sizeof ( $cur_poll_options ))
{
$db -> sql_query ( 'DELETE FROM ' . POLL_VOTES_TABLE . ' WHERE topic_id = ' . $data [ 'topic_id' ]);
$db -> sql_query ( 'UPDATE ' . POLL_OPTIONS_TABLE . ' SET poll_option_total = 0 WHERE topic_id = ' . $data [ 'topic_id' ]);
}
2006-05-12 20:52:58 +00:00
}
// Submit Attachments
2006-09-28 15:04:59 +00:00
if ( ! empty ( $data [ 'attachment_data' ]) && $data [ 'post_id' ] && in_array ( $mode , array ( 'post' , 'reply' , 'quote' , 'edit' )))
2006-05-12 20:52:58 +00:00
{
$space_taken = $files_added = 0 ;
2006-09-13 16:08:36 +00:00
$orphan_rows = array ();
2006-05-12 20:52:58 +00:00
foreach ( $data [ 'attachment_data' ] as $pos => $attach_row )
{
2006-09-13 16:08:36 +00:00
$orphan_rows [( int ) $attach_row [ 'attach_id' ]] = array ();
}
if ( sizeof ( $orphan_rows ))
{
$sql = ' SELECT attach_id , filesize , physical_filename
FROM ' . ATTACHMENTS_TABLE . '
WHERE ' . $db->sql_in_set(' attach_id ', array_keys($orphan_rows)) . '
AND is_orphan = 1
AND poster_id = ' . $user->data[' user_id ' ];
$result = $db -> sql_query ( $sql );
$orphan_rows = array ();
while ( $row = $db -> sql_fetchrow ( $result ))
{
$orphan_rows [ $row [ 'attach_id' ]] = $row ;
}
$db -> sql_freeresult ( $result );
}
foreach ( $data [ 'attachment_data' ] as $pos => $attach_row )
{
if ( $attach_row [ 'is_orphan' ] && ! in_array ( $attach_row [ 'attach_id' ], array_keys ( $orphan_rows )))
{
continue ;
}
if ( ! $attach_row [ 'is_orphan' ])
2006-05-12 20:52:58 +00:00
{
// update entry in db if attachment already stored in db and filespace
$sql = 'UPDATE ' . ATTACHMENTS_TABLE . "
- renamed the following columns:
comment -> attach_comment
new, forwarded, unread, marked, deleted -> pm_new, pm_forwarded, pm_unread, pm_marked, pm_deleted
module_name -> module_basename
value -> lang_value
- every column is now NOT NULL
- every column is now having a DEFAULT value
- hopefully mostly consistent across every db schema
- untested schemas: sqlite, oracle, firebird
git-svn-id: file:///svn/phpbb/trunk@6177 89ea8834-ac86-4346-8a33-228a782c2dd0
2006-07-13 12:51:56 +00:00
SET attach_comment = '" . $db->sql_escape($attach_row[' attach_comment ']) . "'
2006-09-13 16:08:36 +00:00
WHERE attach_id = " . (int) $attach_row['attach_id'] . '
AND is_orphan = 0 ' ;
2006-05-12 20:52:58 +00:00
$db -> sql_query ( $sql );
}
else
{
// insert attachment into db
2006-09-13 16:08:36 +00:00
if ( !@ file_exists ( $phpbb_root_path . $config [ 'upload_path' ] . '/' . basename ( $orphan_rows [ $attach_row [ 'attach_id' ]][ 'physical_filename' ])))
2006-05-12 20:52:58 +00:00
{
continue ;
}
2006-06-06 20:53:46 +00:00
2006-09-13 16:08:36 +00:00
$space_taken += $orphan_rows [ $attach_row [ 'attach_id' ]][ 'filesize' ];
$files_added ++ ;
2006-05-12 20:52:58 +00:00
$attach_sql = array (
'post_msg_id' => $data [ 'post_id' ],
'topic_id' => $data [ 'topic_id' ],
2006-09-13 16:08:36 +00:00
'is_orphan' => 0 ,
2006-05-12 20:52:58 +00:00
'poster_id' => $poster_id ,
- renamed the following columns:
comment -> attach_comment
new, forwarded, unread, marked, deleted -> pm_new, pm_forwarded, pm_unread, pm_marked, pm_deleted
module_name -> module_basename
value -> lang_value
- every column is now NOT NULL
- every column is now having a DEFAULT value
- hopefully mostly consistent across every db schema
- untested schemas: sqlite, oracle, firebird
git-svn-id: file:///svn/phpbb/trunk@6177 89ea8834-ac86-4346-8a33-228a782c2dd0
2006-07-13 12:51:56 +00:00
'attach_comment' => $attach_row [ 'attach_comment' ],
2006-05-12 20:52:58 +00:00
);
2006-09-13 16:08:36 +00:00
$sql = 'UPDATE ' . ATTACHMENTS_TABLE . ' SET ' . $db -> sql_build_array ( 'UPDATE' , $attach_sql ) . '
WHERE attach_id = ' . $attach_row[' attach_id '] . '
AND is_orphan = 1
AND poster_id = ' . $user->data[' user_id ' ];
2006-05-12 20:52:58 +00:00
$db -> sql_query ( $sql );
}
}
2006-09-13 16:08:36 +00:00
if ( $space_taken && $files_added )
2006-05-12 20:52:58 +00:00
{
2006-09-13 16:08:36 +00:00
set_config ( 'upload_dir_size' , $config [ 'upload_dir_size' ] + $space_taken , true );
set_config ( 'num_files' , $config [ 'num_files' ] + $files_added , true );
2006-05-12 20:52:58 +00:00
}
}
2007-02-24 12:31:21 +00:00
if ( $post_mode == 'post' || $post_mode == 'reply' || $post_mode == 'edit_last_post' || $post_mode == 'edit_topic' )
2006-05-12 20:52:58 +00:00
{
if ( $topic_type != POST_GLOBAL )
{
2007-04-30 16:18:59 +00:00
if ( $post_approved )
{
$update_sql = update_post_information ( 'forum' , $data [ 'forum_id' ], true , $data [ 'post_id' ]);
2007-05-04 16:37:01 +00:00
if ( sizeof ( $update_sql ))
{
$sql_data [ FORUMS_TABLE ][ 'stat' ][] = implode ( ', ' , $update_sql [ $data [ 'forum_id' ]]);
}
2006-05-12 20:52:58 +00:00
}
}
2007-04-30 16:18:59 +00:00
if ( $post_approved )
{
$update_sql = update_post_information ( 'topic' , $data [ 'topic_id' ], true , $data [ 'post_id' ]);
2007-05-04 16:37:01 +00:00
if ( sizeof ( $update_sql ))
{
$sql_data [ TOPICS_TABLE ][ 'stat' ][] = implode ( ', ' , $update_sql [ $data [ 'topic_id' ]]);
}
2006-05-12 20:52:58 +00:00
}
}
if ( $make_global )
{
2007-05-04 16:37:01 +00:00
$update_sql = update_post_information ( 'forum' , $data [ 'forum_id' ], true );
2006-05-12 20:52:58 +00:00
if ( sizeof ( $update_sql ))
{
$sql_data [ FORUMS_TABLE ][ 'stat' ][] = implode ( ', ' , $update_sql [ $data [ 'forum_id' ]]);
}
}
// Update total post count, do not consider moderated posts/topics
2006-06-06 20:53:46 +00:00
if ( $auth -> acl_get ( 'f_noapprove' , $data [ 'forum_id' ]) || $auth -> acl_get ( 'm_approve' , $data [ 'forum_id' ]))
2006-05-12 20:52:58 +00:00
{
if ( $post_mode == 'post' )
{
set_config ( 'num_topics' , $config [ 'num_topics' ] + 1 , true );
set_config ( 'num_posts' , $config [ 'num_posts' ] + 1 , true );
}
if ( $post_mode == 'reply' )
{
set_config ( 'num_posts' , $config [ 'num_posts' ] + 1 , true );
}
}
// Update forum stats
$where_sql = array ( POSTS_TABLE => 'post_id = ' . $data [ 'post_id' ], TOPICS_TABLE => 'topic_id = ' . $data [ 'topic_id' ], FORUMS_TABLE => 'forum_id = ' . $data [ 'forum_id' ], USERS_TABLE => 'user_id = ' . $user -> data [ 'user_id' ]);
foreach ( $sql_data as $table => $update_ary )
{
if ( isset ( $update_ary [ 'stat' ]) && implode ( '' , $update_ary [ 'stat' ]))
{
$db -> sql_query ( " UPDATE $table SET " . implode ( ', ' , $update_ary [ 'stat' ]) . ' WHERE ' . $where_sql [ $table ]);
}
}
// Delete topic shadows (if any exist). We do not need a shadow topic for an global announcement
if ( $make_global )
{
2006-06-06 20:53:46 +00:00
$sql = 'DELETE FROM ' . TOPICS_TABLE . '
WHERE topic_moved_id = ' . $data[' topic_id ' ];
$db -> sql_query ( $sql );
2006-05-12 20:52:58 +00:00
}
// Index message contents
if ( $update_message && $data [ 'enable_indexing' ])
{
// Select the search method and do some additional checks to ensure it can actually be utilised
2006-06-06 20:53:46 +00:00
$search_type = basename ( $config [ 'search_type' ]);
2006-05-12 20:52:58 +00:00
if ( ! file_exists ( $phpbb_root_path . 'includes/search/' . $search_type . '.' . $phpEx ))
{
trigger_error ( 'NO_SUCH_SEARCH_MODULE' );
}
2006-06-06 20:53:46 +00:00
2006-10-03 18:35:59 +00:00
require_once ( " { $phpbb_root_path } includes/search/ $search_type . $phpEx " );
2006-05-12 20:52:58 +00:00
$error = false ;
$search = new $search_type ( $error );
2006-06-06 20:53:46 +00:00
2006-05-12 20:52:58 +00:00
if ( $error )
{
trigger_error ( $error );
}
2006-09-17 22:02:28 +00:00
$search -> index ( $mode , $data [ 'post_id' ], $data [ 'message' ], $subject , $poster_id , ( $topic_type == POST_GLOBAL ) ? 0 : $data [ 'forum_id' ]);
2006-05-12 20:52:58 +00:00
}
// Delete draft if post was loaded...
$draft_id = request_var ( 'draft_loaded' , 0 );
if ( $draft_id )
{
2006-06-06 20:53:46 +00:00
$sql = 'DELETE FROM ' . DRAFTS_TABLE . "
WHERE draft_id = $draft_id
AND user_id = { $user -> data [ 'user_id' ]} " ;
$db -> sql_query ( $sql );
2006-05-12 20:52:58 +00:00
}
// Topic Notification, do not change if moderator is changing other users posts...
if ( $user -> data [ 'user_id' ] == $poster_id )
{
if ( ! $data [ 'notify_set' ] && $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' ] && ! $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 );
}
}
2007-05-05 10:22:24 +00:00
$db -> sql_transaction ( 'commit' );
2006-05-12 20:52:58 +00:00
if ( $mode == 'post' || $mode == 'reply' || $mode == 'quote' )
{
// Mark this topic as posted to
markread ( 'post' , $data [ 'forum_id' ], $data [ 'topic_id' ], $data [ 'post_time' ]);
}
// Mark this topic as read
// We do not use post_time here, this is intended (post_time can have a date in the past if editing a message)
markread ( 'topic' , $data [ 'forum_id' ], $data [ 'topic_id' ], time ());
2006-08-09 21:03:46 +00:00
//
if ( $config [ 'load_db_lastread' ] && $user -> data [ 'is_registered' ])
{
$sql = ' SELECT mark_time
FROM ' . FORUMS_TRACK_TABLE . '
WHERE user_id = ' . $user->data[' user_id '] . '
AND forum_id = ' . $data[' forum_id ' ];
$result = $db -> sql_query ( $sql );
$f_mark_time = ( int ) $db -> sql_fetchfield ( 'mark_time' );
$db -> sql_freeresult ( $result );
}
else if ( $config [ 'load_anon_lastread' ] || $user -> data [ 'is_registered' ])
{
$f_mark_time = false ;
}
2006-08-18 20:44:25 +00:00
if (( $config [ 'load_db_lastread' ] && $user -> data [ 'is_registered' ]) || $config [ 'load_anon_lastread' ] || $user -> data [ 'is_registered' ])
2006-08-09 21:03:46 +00:00
{
// Update forum info
$sql = ' SELECT forum_last_post_time
FROM ' . FORUMS_TABLE . '
WHERE forum_id = ' . $data[' forum_id ' ];
$result = $db -> sql_query ( $sql );
$forum_last_post_time = ( int ) $db -> sql_fetchfield ( 'forum_last_post_time' );
$db -> sql_freeresult ( $result );
update_forum_tracking_info ( $data [ 'forum_id' ], $forum_last_post_time , $f_mark_time , false );
}
2006-05-12 20:52:58 +00:00
// Send Notifications
2006-06-06 20:53:46 +00:00
if ( $mode != 'edit' && $mode != 'delete' && ( $auth -> acl_get ( 'f_noapprove' , $data [ 'forum_id' ]) || $auth -> acl_get ( 'm_approve' , $data [ 'forum_id' ])))
2006-05-12 20:52:58 +00:00
{
user_notification ( $mode , $subject , $data [ 'topic_title' ], $data [ 'forum_name' ], $data [ 'forum_id' ], $data [ 'topic_id' ], $data [ 'post_id' ]);
}
if ( $mode == 'post' )
{
2006-06-06 20:53:46 +00:00
$url = ( $auth -> acl_get ( 'f_noapprove' , $data [ 'forum_id' ]) || $auth -> acl_get ( 'm_approve' , $data [ 'forum_id' ])) ? append_sid ( " { $phpbb_root_path } viewtopic. $phpEx " , 'f=' . $data [ 'forum_id' ] . '&t=' . $data [ 'topic_id' ]) : append_sid ( " { $phpbb_root_path } viewforum. $phpEx " , 'f=' . $data [ 'forum_id' ]);
2006-05-12 20:52:58 +00:00
}
else
{
2007-01-26 16:09:51 +00:00
$url = ( $auth -> acl_get ( 'f_noapprove' , $data [ 'forum_id' ]) || $auth -> acl_get ( 'm_approve' , $data [ 'forum_id' ])) ? append_sid ( " { $phpbb_root_path } viewtopic. $phpEx " , " f= { $data [ 'forum_id' ] } &t= { $data [ 'topic_id' ] } &p= { $data [ 'post_id' ] } " ) . " #p { $data [ 'post_id' ] } " : append_sid ( " { $phpbb_root_path } viewtopic. $phpEx " , " f= { $data [ 'forum_id' ] } &t= { $data [ 'topic_id' ] } " );
2006-05-12 20:52:58 +00:00
}
return $url ;
}
2002-07-14 14:37:47 +00:00
?>