diff --git a/phpBB/viewtopic.php b/phpBB/viewtopic.php index e0b500ea21..10e928e7ba 100644 --- a/phpBB/viewtopic.php +++ b/phpBB/viewtopic.php @@ -23,10 +23,6 @@ define('IN_PHPBB', true); $phpbb_root_path = './'; include($phpbb_root_path . 'extension.inc'); include($phpbb_root_path . 'common.'.$phpEx); -include($phpbb_root_path . 'includes/bbcode.'.$phpEx); - -// Instantiate BBCode class -$bbcode = new bbcode(); // Initial var setup $forum_id = (isset($_GET['f'])) ? max(intval($_GET['f']), 0) : 0; @@ -38,6 +34,9 @@ $start = (isset($_GET['start'])) ? max(intval($_GET['start']), 0) : 0; // parameters are not directly used in SQL I'm tempted to say // if someone wishes to screw their view up by entering unknown data // good luck to them :D + +// If, for some reason, the SQL query would not fail and $sort vars were +// displayed in $pagination_url they could be used for XSS -- Ashe $sort_days = (!empty($_REQUEST['st'])) ? max(intval($_REQUEST['st']), 0) : 0; $sort_key = (!empty($_REQUEST['sk'])) ? htmlspecialchars($_REQUEST['sk']) : 't'; $sort_dir = (!empty($_REQUEST['sd'])) ? htmlspecialchars($_REQUEST['sd']) : 'a'; @@ -248,17 +247,44 @@ $sort_order = $sort_by_sql[$sort_key] . ' ' . (($sort_dir == 'd') ? 'DESC' : 'AS // Cache this? ... it is after all doing a simple data grab -$sql = "SELECT * - FROM " . RANKS_TABLE . " - ORDER BY rank_special, rank_min DESC"; -$result = $db->sql_query($sql, 120); -$ranksrow = array(); -while ($row = $db->sql_fetchrow($result)) +// Only good if there are lots of ranks IMHO (we save the sorting) +// Moved to global cache but could be simply obtained dynamically if we see +// the cache is growing too big -- Ashe +if ($cache->exists('ranks')) { - $ranksrow[] = $row; + $ranks = $cache->get('ranks'); +} +else +{ + $sql = 'SELECT * + FROM ' . RANKS_TABLE . ' + ORDER BY rank_min DESC'; + $result = $db->sql_query($sql); + + $ranks = array(); + while ($row = $db->sql_fetchrow($result)) + { + if ($row['rank_special']) + { + $ranks['special'][$row['rank_id']] = array( + 'rank_title' => $row['rank_title'], + 'rank_image' => $row['rank_image'] + ); + } + else + { + $ranks['normal'][] = array( + 'rank_title' => $row['rank_title'], + 'rank_min' => $row['rank_min'], + 'rank_image' => $row['rank_image'] + ); + } + } + $db->sql_freeresult($result); + + $cache->put('ranks', $ranks); } -$db->sql_freeresult($result); // Grab icons @@ -473,33 +499,12 @@ if (!empty($poll_start)) // Container for user details, only process once -$user_cache = $attachments = $attach_list = array(); +$user_cache = $attachments = $attach_list = $rowset = array(); +$has_attachments = FALSE; $force_encoding = ''; +$bbcode_bitfield = 0; $i = 0; -// Pull attachment data -if ( ($config['allow_attachments']) && ($topic_attachment) && ($auth->acl_get('f_download', $forum_id)) ) -{ - $sql = "SELECT a.post_id, p.topic_id, d.* - FROM " . ATTACHMENTS_TABLE . " a, " . ATTACHMENTS_DESC_TABLE . " d, " . POSTS_TABLE . " p - WHERE p.topic_id = " . $topic_id . " - AND p.post_id = a.post_id - AND a.attach_id = d.attach_id - AND p.post_attachment = 1 - ORDER BY d.filetime " . ((!$config['display_order']) ? "ASC" : "DESC") . ", a.post_id ASC"; - $result = $db->sql_query($sql); - - if ($row = $db->sql_fetchrow($result)) - { - do - { - $attachments[$row['post_id']][] = $row; - } - while ($row = $db->sql_fetchrow($result)); - } - $db->sql_freeresult($result); -} - // Go ahead and pull all data for this topic $sql = "SELECT u.username, u.user_id, u.user_posts, u.user_from, u.user_karma, u.user_website, u.user_email, u.user_icq, u.user_aim, u.user_yim, u.user_regdate, u.user_msnm, u.user_viewemail, u.user_rank, u.user_sig, u.user_avatar, u.user_avatar_type, u.user_avatar_width, u.user_avatar_height, p.* FROM " . POSTS_TABLE . " p, " . USERS_TABLE . " u @@ -510,64 +515,218 @@ $sql = "SELECT u.username, u.user_id, u.user_posts, u.user_from, u.user_karma, u ORDER BY $sort_order"; $result = (isset($_GET['view']) && $_GET['view'] == 'print') ? $db->sql_query($sql) : $db->sql_query_limit($sql, intval($config['posts_per_page']), $start); -if ($row = $db->sql_fetchrow($result)) +if (!$row = $db->sql_fetchrow($result)) { - do + trigger_error($user->lang['NO_TOPIC']); +} + + +// Posts are stored in the $rowset array while $attach_list and the global +// bbcode_bitfield are built +do +{ + $rowset[] = $row; + + // Does post have an attachment? If so, add it to the list + if ($row['post_attachment'] && $config['allow_attachments'] && $auth->acl_get('f_download', $forum_id)) { - $poster_id = $row['user_id']; - $poster = ($poster_id == ANONYMOUS) ? $user->lang['GUEST'] : $row['username']; + $attach_list[] = $row['post_id']; + + if ($row['post_approved']) + { + $has_attachments = TRUE; + } + } + + // Define the global bbcode bitfield, will be used to load bbcodes + $bbcode_bitfield |= $row['bbcode_bitfield']; +} +while ($row = $db->sql_fetchrow($result)); +$db->sql_freeresult($result); - // Three situations can prevent a post being display: - // i) The posters karma is below the minimum of the user - // ii) The poster is on the users ignore list - // iii) The post was made in a codepage different from the users - if ($row['user_karma'] < $user->data['user_min_karma'] && (empty($_GET['view']) || $_GET['view'] != 'karma' || $post_id != $row['post_id'])) +// Pull attachment data +if (count($attach_list)) +{ + $sql = 'SELECT a.post_id, d.* + FROM ' . ATTACHMENTS_TABLE . ' a, ' . ATTACHMENTS_DESC_TABLE . ' d + WHERE a.post_id IN (' . implode(', ', $attach_list) . ') + AND a.attach_id = d.attach_id + ORDER BY d.filetime ' . ((!$config['display_order']) ? 'ASC' : 'DESC') . ', a.post_id ASC'; + $result = $db->sql_query($sql); + + while ($row = $db->sql_fetchrow($result)) + { + $attachments[$row['post_id']][] = $row; + } + $db->sql_freeresult($result); + + // No attachments exist, but post table thinks they do + // so go ahead and reset post_attach flags + if (!count($attachments)) + { + $sql = 'UPDATE ' . POSTS_TABLE . ' + SET post_attachment = 0 + WHERE post_id IN (' . implode(', ', $attach_list) . ')'; + $db->sql_query($sql); + + // We need to update the topic indicator too if the + // complete topic is now without an attachment + if (count($rowset) != $total_posts) + { + // Not all posts are displayed so we query the db to find if there's any attachment for this topic + $sql = 'SELECT a.post_id + FROM ' . ATTACHMENTS_TABLE . ' a, ' . POSTS_TABLE . " p + WHERE p.topic_id = $topic_id + AND p.post_approved = 1 + AND p.post_id = a.post_id"; + $result = $db->sql_query_limit($sql, 1); + + if (!$db->sql_fetchrow($result)) + { + $db->sql_query('UPDATE ' . TOPICS_TABLE . " SET topic_attachment = 0 WHERE topic_id = $topic_id"); + } + } + else + { + $db->sql_query('UPDATE ' . TOPICS_TABLE . " SET topic_attachment = 0 WHERE topic_id = $topic_id"); + } + } + elseif ($has_attachments && !$topic_data['topic_attachment']) + { + // Topic has approved attachments but its flag is wrong + $db->sql_query('UPDATE ' . TOPICS_TABLE . " SET topic_attachment = 1 WHERE topic_id = $topic_id"); + } +} + +if ($bbcode_bitfield) +{ + // Instantiate BBCode class + include($phpbb_root_path . 'includes/bbcode.'.$phpEx); + $bbcode = new bbcode($bbcode_bitfield); +} + +foreach ($rowset as $row) +{ + $poster_id = $row['user_id']; + $poster = ($poster_id == ANONYMOUS) ? ((!empty($row['post_username'])) ? $row['post_username'] : $user->lang['GUEST']) : $row['username']; + + // Three situations can prevent a post being display: + // i) The posters karma is below the minimum of the user + // ii) The poster is on the users ignore list + // iii) The post was made in a codepage different from the users + if ($row['user_karma'] < $user->data['user_min_karma'] && (empty($_GET['view']) || $_GET['view'] != 'karma' || $post_id != $row['post_id'])) + { + $template->assign_block_vars('postrow', array( + 'S_BELOW_MIN_KARMA' => true, + 'S_ROW_COUNT' => $i++, + + 'L_IGNORE_POST' => sprintf($user->lang['POST_BELOW_KARMA'], $poster, intval($row['user_karma']), '', '')) + ); + + continue; + } + else if ($row['post_encoding'] != $user->lang['ENCODING']) + { + if (!empty($_GET['view']) && $_GET['view'] == 'encoding' && $post_id == $row['post_id']) + { + $force_encoding = $row['post_encoding']; + } + else { $template->assign_block_vars('postrow', array( - 'S_BELOW_MIN_KARMA' => true, + 'S_WRONG_ENCODING' => true, 'S_ROW_COUNT' => $i++, - 'L_IGNORE_POST' => sprintf($user->lang['POST_BELOW_KARMA'], $poster, intval($row['user_karma']), '', '')) + 'L_IGNORE_POST' => sprintf($user->lang['POST_ENCODING'], $poster, '', '')) ); continue; } - else if ($row['post_encoding'] != $user->lang['ENCODING']) + } + + // Cache various user specific data ... so we don't have to recompute + // this each time the same user appears on this page + if (!isset($user_cache[$poster_id])) + { + if ($poster_id == ANONYMOUS) { - if (!empty($_GET['view']) && $_GET['view'] == 'encoding' && $post_id == $row['post_id']) - { - $force_encoding = $row['post_encoding']; - } - else - { - $template->assign_block_vars('postrow', array( - 'S_WRONG_ENCODING' => true, - 'S_ROW_COUNT' => $i++, - - 'L_IGNORE_POST' => sprintf($user->lang['POST_ENCODING'], $poster, '', '')) - ); - - continue; - } + $user_cache[$poster_id] = array( + 'joined' => '', + 'posts' => '', + 'from' => '', + 'avatar' => '', + 'rank_title' => '', + 'rank_image' => '', + 'posts' => '', + 'profile_img' => '', + 'profile' => '', + 'pm_img' => '', + 'pm' => '', + 'email_img' => '', + 'email' => '', + 'www_img' => '', + 'www' => '', + 'icq_status_img'=> '', + 'icq_img' => '', + 'icq' => '', + 'aim_img' => '', + 'aim' => '', + 'msn_img' => '', + 'msn' => '', + 'search_img' => '', + 'search' => '' + ); } - - - // Display the post - Cache this - $poster_posts = ($row['user_id'] != ANONYMOUS) ? $user->lang['POSTS'] . ': ' . $row['user_posts'] : ''; - - - // Cache this - $poster_from = ($row['user_from'] && $row['user_id'] != ANONYMOUS) ? $user->lang['LOCATION'] . ': ' . $row['user_from'] : ''; - - - if (!isset($user_cache[$poster_id]['joined']) && $poster_id != ANONYMOUS) + else { - $user_cache[$poster_id]['joined'] = ($row['user_id']) ? $user->lang['JOINED'] . ': ' . $user->format_date($row['user_regdate'], $user->lang['DATE_FORMAT']) : ''; - } + $user_sig = ($row['user_sig'] && $config['allow_sig']) ? $row['user_sig'] : ''; + if ($user_sig && $auth->acl_get('f_sigs', $forum_id)) + { + if (!$auth->acl_get('f_html', $forum_id) && $user->data['user_allowhtml']) + { + $user_sig = preg_replace('#(<)([\/]?.*?)(>)#is', "<\\2>", $user_sig); + } + + $user_sig = (empty($row['user_allowsmile']) || empty($config['enable_smilies'])) ? preg_replace('#(((?>([^><]+|(?R)))*)\<))#se', "preg_replace(\$censors['match'], \$censors['replace'], '\\0')", '>' . $user_sig . '<'), 1, -1)); + } + + $user_sig = '
_________________
' . nl2br($user_sig); + } + + $profile_url = "memberlist.$phpEx$SID&mode=viewprofile&u=$poster_id"; + $pm_url = "ucp.$phpEx$SID&mode=message&action=send&u=$poster_id"; + $aim_url = "memberlist.$phpEx$SID&mode=contact&action=aim&u=$poster_id"; + $msn_url = "memberlist.$phpEx$SID&mode=contact&action=msnm&u=$poster_id"; + $yim_url = 'http://edit.yahoo.com/config/send_webmesg?.target=' . $row['user_yim'] . '&.src=pg'; + $search_url = 'search.' . $phpEx . $SID . '&search_author=' . urlencode($row['username']) .'"&showresults=posts'; + + $user_cache[$poster_id] = array( + 'joined' => $user->lang['JOINED'] . ': ' . $user->format_date($row['user_regdate'], $user->lang['DATE_FORMAT']), + 'posts' => $user->lang['POSTS'] . ': ' . $row['user_posts'], + 'from' => ($row['user_from']) ? $user->lang['LOCATION'] . ': ' . $row['user_from'] : '', + 'sig' => $user_sig, + 'profile_img' => '' . $user->img('btn_profile', $user->lang['READ_PROFILE']) . '', + 'profile' => '' . $user->lang['READ_PROFILE'] . '', + 'pm_img' => '' . $user->img('btn_pm', $user->lang['SEND_PRIVATE_MESSAGE']) . '', + 'pm' => '' . $user->lang['SEND_PRIVATE_MESSAGE'] . '', + 'www_img' => ($row['user_website']) ? '' . $user->img('btn_www', $user->lang['VISIT_WEBSITE']) . '' : '', + 'www' => ($row['user_website']) ? '' . $user->lang['VISIT_WEBSITE'] . '' : '', + 'aim_img' => ($row['user_aim']) ? '' . $user->img('btn_aim', $user->lang['AIM']) . '' : '', + 'aim' => ($row['user_aim']) ? '' . $user->lang['AIM'] . '' : '', + 'msn_img' => ($row['user_msnm']) ? '' . $user->img('btn_msnm', $user->lang['MSNM']) . '' : '', + 'msn' => ($row['user_msnm']) ? '' . $user->lang['MSNM'] . '' : '', + 'yim_img' => ($row['user_yim']) ? '' . $user->img('btn_yim', $user->lang['YIM']) . '' : '', + 'yim' => ($row['user_yim']) ? '' . $user->lang['YIM'] . '' : '', + 'search_img' => ($auth->acl_get('f_search', $forum_id)) ? '' . $user->img('btn_search', $user->lang['SEARCH_USER_POSTS']) . '' : '', + 'search' => ($auth->acl_get('f_search', $forum_id)) ? '' . $user->lang['SEARCH_USER_POSTS'] . '' : '' + + ); - if (!isset($user_cache[$poster_id]['avatar'])) - { if ($row['user_avatar_type'] && $auth->acl_get('u_setavatar')) { switch ($row['user_avatar_type']) @@ -585,62 +744,30 @@ if ($row = $db->sql_fetchrow($result)) break; } } + + if (!empty($row['user_rank'])) + { + $user_cache[$poster_id]['rank_title'] = $ranks['special'][$row['user_rank']]['rank_title']; + $user_cache[$poster_id]['rank_image'] = (!empty($ranks['special'][$row['user_rank']]['rank_image'])) ? '' . $ranks['special'][$row['user_rank']]['rank_title'] . '
' : ''; + } else { - $user_cache[$poster_id]['avatar'] = ''; - } - } - - - // Set poster rank - if (!isset($user_cache[$poster_id]['rank_title']) && $poster_id != ANONYMOUS) - { - foreach ($ranksrow as $rank) - { - if (empty($row['user_rank']) && $row['user_posts'] >= $rank['rank_min']) + foreach ($ranks['normal'] as $rank) { - $user_cache[$poster_id]['rank_title'] = $rank['rank_title']; - $user_cache[$poster_id]['rank_image'] = (!empty($rank['rank_image'])) ? '' . $user_cache[$poster_id]['rank_title'] . '
' : ''; - break; - } - - if (!empty($rank['rank_special']) && $row['user_rank'] == $rank['rank_id']) - { - $user_cache[$poster_id]['rank_title'] = $rank['rank_title']; - $user_cache[$poster_id]['rank_image'] = (!empty($rank['rank_image'])) ? '' . $user_cache[$poster_id]['rank_title'] . '
' : ''; - break; + if ($row['user_posts'] >= $rank['rank_min']) + { + $user_cache[$poster_id]['rank_title'] = $rank['rank_title']; + $user_cache[$poster_id]['rank_image'] = (!empty($rank['rank_image'])) ? '' . $rank['rank_title'] . '
' : ''; + break; + } } } - } - - - // Handle anon users posting with usernames - if ($poster_id == ANONYMOUS && $row['post_username'] != '') - { - $poster = $row['post_username']; - $user_cache[$poster_id]['rank_title'] = $user->lang['GUEST']; - $user_cache[$poster_id]['rank_image'] = ''; - } - - - // Cache various user specific data ... so we don't have to recompute - // this each time the same user appears on this page - if (!isset($user_cache[$poster_id]['profile']) && $poster_id != ANONYMOUS) - { - $temp_url = "memberlist.$phpEx$SID&mode=viewprofile&u=$poster_id"; - $user_cache[$poster_id]['profile_img'] = '' . $user->img('btn_profile', $user->lang['READ_PROFILE']) . ''; - $user_cache[$poster_id]['profile'] = '' . $user->lang['READ_PROFILE'] . ''; - - $temp_url = "ucp.$phpEx$SID&mode=message&action=send&u=$poster_id"; - $user_cache[$poster_id]['pm_img'] = '' . $user->img('btn_pm', $user->lang['SEND_PRIVATE_MESSAGE']) . ''; - $user_cache[$poster_id]['pm'] = '' . $user->lang['SEND_PRIVATE_MESSAGE'] . ''; if (!empty($row['user_viewemail']) || $auth->acl_gets('m_', 'a_', $forum_id)) { - $email_uri = ($config['board_email_form'] && $config['email_enable']) ? "ucp.$phpEx$SID&mode=email&u=" . $poster_id : 'mailto:' . $row['user_email']; - - $user_cache[$poster_id]['email_img'] = '' . $user->img('btn_email', $user->lang['SEND_EMAIL']) . ''; - $user_cache[$poster_id]['email'] = '' . $user->lang['SEND_EMAIL'] . ''; + $email_url = ($config['board_email_form'] && $config['email_enable']) ? "ucp.$phpEx$SID&mode=email&u=" . $poster_id : 'mailto:' . $row['user_email']; + $user_cache[$poster_id]['email_img'] = '' . $user->img('btn_email', $user->lang['SEND_EMAIL']) . ''; + $user_cache[$poster_id]['email'] = '' . $user->lang['SEND_EMAIL'] . ''; } else { @@ -648,15 +775,12 @@ if ($row = $db->sql_fetchrow($result)) $user_cache[$poster_id]['email'] = ''; } - $user_cache[$poster_id]['www_img'] = ($row['user_website']) ? '' . $user->img('btn_www', $user->lang['VISIT_WEBSITE']) . '' : ''; - $user_cache[$poster_id]['www'] = ($row['user_website']) ? '' . $user->lang['VISIT_WEBSITE'] . '' : ''; - if (!empty($row['user_icq'])) { - $temp_url = "memberlist.$phpEx$SID&mode=contact&action=icq&u=$poster_id"; - $user_cache[$poster_id]['icq_status_img'] = ''; - $user_cache[$poster_id]['icq_img'] = '' . $user->img('btn_icq', $user->lang['ICQ']) . ''; - $user_cache[$poster_id]['icq'] = '' . $user->lang['ICQ'] . ''; + $icq_url = "memberlist.$phpEx$SID&mode=contact&action=icq&u=$poster_id"; + $user_cache[$poster_id]['icq_status_img'] = ''; + $user_cache[$poster_id]['icq_img'] = '' . $user->img('btn_icq', $user->lang['ICQ']) . ''; + $user_cache[$poster_id]['icq'] = '' . $user->lang['ICQ'] . ''; } else { @@ -664,516 +788,422 @@ if ($row = $db->sql_fetchrow($result)) $user_cache[$poster_id]['icq_img'] = ''; $user_cache[$poster_id]['icq'] = ''; } - - $temp_url = "memberlist.$phpEx$SID&mode=contact&action=aim&u=$poster_id"; - $user_cache[$poster_id]['aim_img'] = ($row['user_aim']) ? '' . $user->img('btn_aim', $user->lang['AIM']) . '' : ''; - $user_cache[$poster_id]['aim'] = ($row['user_aim']) ? '' . $user->lang['AIM'] . '' : ''; - - $temp_url = "memberlist.$phpEx$SID&mode=contact&action=msnm&u=$poster_id"; - $user_cache[$poster_id]['msn_img'] = ($row['user_msnm']) ? '' . $user->img('btn_msnm', $user->lang['MSNM']) . '' : ''; - $user_cache[$poster_id]['msn'] = ($row['user_msnm']) ? '' . $user->lang['MSNM'] . '' : ''; - - $temp_url = 'http://edit.yahoo.com/config/send_webmesg?.target=' . $row['user_yim'] . '&.src=pg'; - $user_cache[$poster_id]['yim_img'] = ($row['user_yim']) ? '' . $user->img('btn_yim', $user->lang['YIM']) . '' : ''; - $user_cache[$poster_id]['yim'] = ($row['user_yim']) ? '' . $user->lang['YIM'] . '' : ''; - - if ($auth->acl_get('f_search', $forum_id)) - { - $temp_url = 'search.' . $phpEx . $SID . '&search_author=' . urlencode($row['username']) .'"&showresults=posts'; - $search_img = '' . $user->img('btn_search', $user->lang['SEARCH_USER_POSTS']) . ''; - $search ='' . $user->lang['SEARCH_USER_POSTS'] . ''; - } - else - { - $search_img = ''; - $search = ''; - } - } - else if (!$poster_id) + } + + // Non-user specific images/text + $temp_url = 'posting.' . $phpEx . $SID . '&mode=quote&p=' . $row['post_id']; + $quote_img = '' . $user->img('btn_quote', $user->lang['REPLY_WITH_QUOTE']) . ''; + $quote = '' . $user->lang['REPLY_WITH_QUOTE'] . ''; + + if (($user->data['user_id'] == $poster_id && $auth->acl_get('f_edit', $forum_id)) || $auth->acl_get('m_edit', $forum_id)) + { + $temp_url = "posting.$phpEx$SID&mode=edit&f=" . $row['forum_id'] . "&p=" . $row['post_id']; + $edit_img = '' . $user->img('btn_edit', $user->lang['EDIT_DELETE_POST']) . ''; + $edit = '' . $user->lang['EDIT_DELETE_POST'] . ''; + } + else + { + $edit_img = ''; + $edit = ''; + } + + if ($auth->acl_get('m_ip', $forum_id)) + { + $temp_url = "mcp.$phpEx?sid=" . $user->session_id . "&mode=post_details&p=" . $row['post_id'] . "&t=$topic_id#ip"; + $ip_img = '' . $user->img('btn_ip', $user->lang['VIEW_IP']) . ''; + $ip = '' . $user->lang['VIEW_IP'] . ''; + } + else + { + $ip_img = ''; + $ip = ''; + } + + if (($user->data['user_id'] == $poster_id && $auth->acl_get('f_delete', $forum_id) && $topic_data['topic_last_post_id'] == $row['post_id']) || $auth->acl_get('m_delete', $forum_id)) + { + $temp_url = "posting.$phpEx$SID&mode=delete&p=" . $row['post_id']; + $delpost_img = '' . $user->img('btn_delete', $user->lang['DELETE_POST']) . ''; + $delpost = '' . $user->lang['DELETE_POST'] . ''; + } + else + { + $delpost_img = ''; + $delpost = ''; + } + + + // Parse the message and subject + $post_subject = ($row['post_subject'] != '') ? $row['post_subject'] : ''; + $message = $row['post_text']; + + // If the board has HTML off but the post has HTML + // on then we process it, else leave it alone + if (!$auth->acl_get('f_html', $forum_id)) + { + if ($row['enable_html'] && $auth->acl_get('f_bbcode', $forum_id)) { - $user_cache[$poster_id]['profile_img'] = ''; - $user_cache[$poster_id]['profile'] = ''; - $user_cache[$poster_id]['pm_img'] = ''; - $user_cache[$poster_id]['pm'] = ''; - $user_cache[$poster_id]['email_img'] = ''; - $user_cache[$poster_id]['email'] = ''; - $user_cache[$poster_id]['www_img'] = ''; - $user_cache[$poster_id]['www'] = ''; - $user_cache[$poster_id]['icq_status_img'] = ''; - $user_cache[$poster_id]['icq_img'] = ''; - $user_cache[$poster_id]['icq'] = ''; - $user_cache[$poster_id]['aim_img'] = ''; - $user_cache[$poster_id]['aim'] = ''; - $user_cache[$poster_id]['msn_img'] = ''; - $user_cache[$poster_id]['msn'] = ''; - $user_cache[$poster_id]['search_img'] = ''; - $user_cache[$poster_id]['search'] = ''; + $message = preg_replace('#(<)([\/]?.*?)(>)#is', "<\\2>", $message); } + } - // Non-user specific images/text - $temp_url = 'posting.' . $phpEx . $SID . '&mode=quote&p=' . $row['post_id']; - $quote_img = '' . $user->img('btn_quote', $user->lang['REPLY_WITH_QUOTE']) . ''; - $quote = '' . $user->lang['REPLY_WITH_QUOTE'] . ''; - - if (($user->data['user_id'] == $poster_id && $auth->acl_get('f_edit', $forum_id)) || $auth->acl_get('m_edit', $forum_id)) - { - $temp_url = "posting.$phpEx$SID&mode=edit&f=" . $row['forum_id'] . "&p=" . $row['post_id']; - $edit_img = '' . $user->img('btn_edit', $user->lang['EDIT_DELETE_POST']) . ''; - $edit = '' . $user->lang['EDIT_DELETE_POST'] . ''; - } - else - { - $edit_img = ''; - $edit = ''; - } - - if ($auth->acl_get('m_ip', $forum_id)) - { - $temp_url = "mcp.$phpEx?sid=" . $user->session_id . "&mode=post_details&p=" . $row['post_id'] . "&t=$topic_id#ip"; - $ip_img = '' . $user->img('btn_ip', $user->lang['VIEW_IP']) . ''; - $ip = '' . $user->lang['VIEW_IP'] . ''; - } - else - { - $ip_img = ''; - $ip = ''; - } - - if (($user->data['user_id'] == $poster_id && $auth->acl_get('f_delete', $forum_id) && $forum_topic_data['topic_last_post_id'] == $row['post_id']) || $auth->acl_get('m_delete', $forum_id)) - { - $temp_url = "posting.$phpEx$SID&mode=delete&p=" . $row['post_id']; - $delpost_img = '' . $user->img('btn_delete', $user->lang['DELETE_POST']) . ''; - $delpost = '' . $user->lang['DELETE_POST'] . ''; - } - else - { - $delpost_img = ''; - $delpost = ''; - } + // Second parse bbcode here + if ($row['bbcode_bitfield']) + { + $bbcode->bbcode_second_pass(&$message, $row['bbcode_uid'], $row['bbcode_bitfield']); + } - // Does post have an attachment? If so, add it to the list - if ( ($row['post_attachment']) && ($config['allow_attachments']) && ($auth->acl_get('f_download', $forum_id)) ) - { - $attach_list[] = $row['post_id']; - } + // If we allow users to disable display of emoticons + // we'll need an appropriate check and preg_replace here + $message = (empty($row['enable_smilies']) || empty($config['allow_smilies'])) ? preg_replace('#(((?>([^><]+|(?R)))*)\<))#se', "preg_replace('#\b(" . $highlight_match . ")\b#i', '\\\\1', '\\0')", '>' . $message . '<'), 1, -1)); + } - // If the board has HTML off but the post has HTML - // on then we process it, else leave it alone - if (!$auth->acl_get('f_html', $forum_id)) - { - if ($row['enable_html'] && $auth->acl_get('f_bbcode', $forum_id)) - { - $message = preg_replace('#(<)([\/]?.*?)(>)#is', "<\\2>", $message); - } - } + // Replace naughty words such as farty pants + if (sizeof($censors)) + { + $post_subject = preg_replace($censors['match'], $censors['replace'], $post_subject); + $message = str_replace('\"', '"', substr(preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "preg_replace(\$censors['match'], \$censors['replace'], '\\0')", '>' . $message . '<'), 1, -1)); + } - // Second parse bbcode here - $bbcode->bbcode_second_pass(&$message, $bbcode_uid, $row['bbcode_bitfield']); + $message = nl2br($message); - - // If we allow users to disable display of emoticons - // we'll need an appropriate check and preg_replace here - $message = (empty($row['enable_smilies']) || empty($config['allow_smilies'])) ? preg_replace('#(((?>([^><]+|(?R)))*)\<))#se', "preg_replace('#\b(" . $highlight_match . ")\b#i', '\\\\1', '\\0')", '>' . $message . '<'), 1, -1)); - } - - - // Replace naughty words such as farty pants - if (sizeof($censors)) - { - $post_subject = preg_replace($censors['match'], $censors['replace'], $post_subject); - $message = str_replace('\"', '"', substr(preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "preg_replace(\$censors['match'], \$censors['replace'], '\\0')", '>' . $message . '<'), 1, -1)); - } - - - $message = nl2br($message); - - - // Editing information - if (intval($row['post_edit_count'])) - { - $l_edit_time_total = (intval($row['post_edit_count']) == 1) ? $user->lang['Edited_time_total'] : $user->lang['Edited_times_total']; - - $l_edited_by = '

' . sprintf($l_edit_time_total, $poster, $user->format_date($row['post_edit_time']), $row['post_edit_count']); - } - else - { - $l_edited_by = ''; - } - - - // Signature - if (!isset($user_cache[$poster_id]['sig'])) - { - $user_sig = ($row['enable_sig'] && $row['user_sig'] != '' && $config['allow_sig']) ? $row['user_sig'] : ''; - - if ($user_sig != '' && $auth->acl_get('f_sigs', $forum_id)) - { - if (!$auth->acl_get('f_html', $forum_id) && $user->data['user_allowhtml']) - { - $user_sig = preg_replace('#(<)([\/]?.*?)(>)#is', "<\\2>", $user_sig); - } - - $user_cache[$poster_id]['sig'] = (empty($row['user_allowsmile']) || empty($config['enable_smilies'])) ? preg_replace('#(((?>([^><]+|(?R)))*)\<))#se', "preg_replace(\$censors['match'], \$censors['replace'], '\\0')", '>' . $user_sig . '<'), 1, -1)); - } - - $user_cache[$poster_id]['sig'] = '
_________________
' . nl2br($user_cache[$poster_id]['sig']); - } - else - { - $user_cache[$poster_id]['sig'] = ''; - } - } - - - // Define the little post icon - $mini_post_img = ($row['post_time'] > $user->data['user_lastvisit'] && $row['post_time'] > $topic_last_read) ? $user->img('icon_post_new', $user->lang['New_post']) : $user->img('icon_post', $user->lang['Post']); - - // Little post link and anchor name - $mini_post_url = 'viewtopic.' . $phpEx . $SID . '&p=' . $row['post_id'] . '#' . $row['post_id']; - $u_post_id = (!empty($newest_post_id) && $newest_post_id == $row['post_id']) ? 'newest' : $row['post_id']; - - - // Dump vars into template - $template->assign_block_vars('postrow', array( - 'POSTER_NAME' => $poster, - 'POSTER_RANK' => $user_cache[$poster_id]['rank_title'], - 'RANK_IMAGE' => $user_cache[$poster_id]['rank_image'], - 'POSTER_JOINED' => $user_cache[$poster_id]['joined'], - 'POSTER_POSTS' => $poster_posts, - 'POSTER_FROM' => $poster_from, - 'POSTER_AVATAR' => $user_cache[$poster_id]['avatar'], - 'POST_DATE' => $user->format_date($row['post_time']), - - 'POST_SUBJECT' => $post_subject, - 'MESSAGE' => $message, - 'SIGNATURE' => $user_cache[$poster_id]['sig'], - 'EDITED_MESSAGE'=> $l_edited_by, - - 'RATING' => $rating, - - 'MINI_POST_IMG' => $mini_post_img, - 'EDIT_IMG' => $edit_img, - 'EDIT' => $edit, - 'QUOTE_IMG' => $quote_img, - 'QUOTE' => $quote, - 'IP_IMG' => $ip_img, - 'IP' => $ip, - 'DELETE_IMG' => $delpost_img, - 'DELETE' => $delpost, - - 'PROFILE_IMG' => $user_cache[$poster_id]['profile_img'], - 'PROFILE' => $user_cache[$poster_id]['profile'], - 'SEARCH_IMG' => $user_cache[$poster_id]['search_img'], - 'SEARCH' => $user_cache[$poster_id]['search'], - 'PM_IMG' => $user_cache[$poster_id]['pm_img'], - 'PM' => $user_cache[$poster_id]['pm'], - 'EMAIL_IMG' => $user_cache[$poster_id]['email_img'], - 'EMAIL' => $user_cache[$poster_id]['email'], - 'WWW_IMG' => $user_cache[$poster_id]['www_img'], - 'WWW' => $user_cache[$poster_id]['www'], - 'ICQ_STATUS_IMG'=> $user_cache[$poster_id]['icq_status_img'], - 'ICQ_IMG' => $user_cache[$poster_id]['icq_img'], - 'ICQ' => $user_cache[$poster_id]['icq'], - 'AIM_IMG' => $user_cache[$poster_id]['aim_img'], - 'AIM' => $user_cache[$poster_id]['aim'], - 'MSN_IMG' => $user_cache[$poster_id]['msn_img'], - 'MSN' => $user_cache[$poster_id]['msn'], - 'YIM_IMG' => $user_cache[$poster_id]['yim_img'], - 'YIM' => $user_cache[$poster_id]['yim'], - - 'S_POST_REPORTED' => ($row['post_reported'] && $auth->acl_get('m_', $forum_id)) ? TRUE : FALSE, - 'U_REPORT' => "report.$phpEx$SID&p=" . $row['post_id'], - 'U_MCP_REPORT' => ($auth->acl_get('f_report', $forum_id)) ? "mcp.$phpEx$SID&mode=post_details&p=" . $row['post_id'] : '', - - 'POST_ICON' => (!empty($row['icon_id'])) ? '' : '', - - 'L_MINI_POST_ALT' => $mini_post_alt, - - 'S_ROW_COUNT' => $i++, - - 'S_HAS_ATTACHMENTS' => ($row['post_attachment']) ? TRUE : FALSE, - 'S_POST_UNAPPROVED' => ($row['post_approved']) ? FALSE : TRUE, - 'U_MCP_APPROVE' => "mcp.$phpEx$SID&mode=approve&p=" . $row['post_id'], - - 'U_MINI_POST' => $mini_post_url, - 'U_POST_ID' => $u_post_id - )); - // Process Attachments for this post - if (sizeof($attachments[$row['post_id']]) && $row['post_attachment']) + // Editing information + if (intval($row['post_edit_count'])) + { + $l_edit_time_total = (intval($row['post_edit_count']) == 1) ? $user->lang['Edited_time_total'] : $user->lang['Edited_times_total']; + + $l_edited_by = '

' . sprintf($l_edit_time_total, $poster, $user->format_date($row['post_edit_time']), $row['post_edit_count']); + } + else + { + $l_edited_by = ''; + } + + + // Define the little post icon + $mini_post_img = ($row['post_time'] > $user->data['user_lastvisit'] && $row['post_time'] > $topic_last_read) ? $user->img('icon_post_new', $user->lang['New_post']) : $user->img('icon_post', $user->lang['Post']); + + // Little post link and anchor name + $mini_post_url = 'viewtopic.' . $phpEx . $SID . '&p=' . $row['post_id'] . '#' . $row['post_id']; + $u_post_id = (!empty($newest_post_id) && $newest_post_id == $row['post_id']) ? 'newest' : $row['post_id']; + + + // Dump vars into template + $template->assign_block_vars('postrow', array( + 'POSTER_NAME' => $poster, + 'POSTER_RANK' => $user_cache[$poster_id]['rank_title'], + 'RANK_IMAGE' => $user_cache[$poster_id]['rank_image'], + 'POSTER_JOINED' => $user_cache[$poster_id]['joined'], + 'POSTER_POSTS' => $user_cache[$poster_id]['posts'], + 'POSTER_FROM' => $user_cache[$poster_id]['from'], + 'POSTER_AVATAR' => $user_cache[$poster_id]['avatar'], + 'POST_DATE' => $user->format_date($row['post_time']), + + 'POST_SUBJECT' => $post_subject, + 'MESSAGE' => $message, + 'SIGNATURE' => ($row['enable_sig']) ? $user_cache[$poster_id]['sig'] : '', + 'EDITED_MESSAGE'=> $l_edited_by, + + 'RATING' => $rating, + + 'MINI_POST_IMG' => $mini_post_img, + 'EDIT_IMG' => $edit_img, + 'EDIT' => $edit, + 'QUOTE_IMG' => $quote_img, + 'QUOTE' => $quote, + 'IP_IMG' => $ip_img, + 'IP' => $ip, + 'DELETE_IMG' => $delpost_img, + 'DELETE' => $delpost, + + 'PROFILE_IMG' => $user_cache[$poster_id]['profile_img'], + 'PROFILE' => $user_cache[$poster_id]['profile'], + 'SEARCH_IMG' => $user_cache[$poster_id]['search_img'], + 'SEARCH' => $user_cache[$poster_id]['search'], + 'PM_IMG' => $user_cache[$poster_id]['pm_img'], + 'PM' => $user_cache[$poster_id]['pm'], + 'EMAIL_IMG' => $user_cache[$poster_id]['email_img'], + 'EMAIL' => $user_cache[$poster_id]['email'], + 'WWW_IMG' => $user_cache[$poster_id]['www_img'], + 'WWW' => $user_cache[$poster_id]['www'], + 'ICQ_STATUS_IMG'=> $user_cache[$poster_id]['icq_status_img'], + 'ICQ_IMG' => $user_cache[$poster_id]['icq_img'], + 'ICQ' => $user_cache[$poster_id]['icq'], + 'AIM_IMG' => $user_cache[$poster_id]['aim_img'], + 'AIM' => $user_cache[$poster_id]['aim'], + 'MSN_IMG' => $user_cache[$poster_id]['msn_img'], + 'MSN' => $user_cache[$poster_id]['msn'], + 'YIM_IMG' => $user_cache[$poster_id]['yim_img'], + 'YIM' => $user_cache[$poster_id]['yim'], + + 'S_POST_REPORTED' => ($row['post_reported'] && $auth->acl_get('m_', $forum_id)) ? TRUE : FALSE, + 'U_REPORT' => "report.$phpEx$SID&p=" . $row['post_id'], + 'U_MCP_REPORT' => ($auth->acl_get('f_report', $forum_id)) ? "mcp.$phpEx$SID&mode=post_details&p=" . $row['post_id'] : '', + + 'POST_ICON' => (!empty($row['icon_id'])) ? '' : '', + + 'L_MINI_POST_ALT' => $mini_post_alt, + + 'S_ROW_COUNT' => $i++, + + 'S_HAS_ATTACHMENTS' => ($row['post_attachment']) ? TRUE : FALSE, + 'S_POST_UNAPPROVED' => ($row['post_approved']) ? FALSE : TRUE, + 'U_MCP_APPROVE' => "mcp.$phpEx$SID&mode=approve&p=" . $row['post_id'], + + 'U_MINI_POST' => $mini_post_url, + 'U_POST_ID' => $u_post_id + )); + + // Process Attachments for this post + if (sizeof($attachments[$row['post_id']]) && $row['post_attachment']) + { + foreach($attachments[$row['post_id']] as $attachment) { - foreach($attachments[$row['post_id']] as $attachment) + // Some basics... + $attachment['extension'] = strtolower(trim($attachment['extension'])); + $filename = $config['upload_dir'] . '/' . $attachment['physical_filename']; + $thumbnail_filename = $config['upload_dir'] . '/thumbs/t_' . $attachment['physical_filename']; + + $upload_image = ''; + + if ( ($user->img('icon_attach', '') != '') && (trim($extensions[$attachment['extension']]['upload_icon']) == '') ) { - // Some basics... - $attachment['extension'] = strtolower(trim($attachment['extension'])); - $filename = $config['upload_dir'] . '/' . $attachment['physical_filename']; - $thumbnail_filename = $config['upload_dir'] . '/thumbs/t_' . $attachment['physical_filename']; + $upload_image = $user->img('icon_attach', ''); + } + else if (trim($extensions[$attachment['extension']]['upload_icon']) != '') + { + $upload_image = ''; + } + + $filesize = $attachment['filesize']; + $size_lang = ($filesize >= 1048576) ? $user->lang['MB'] : ( ($filesize >= 1024) ? $user->lang['KB'] : $user->lang['BYTES'] ); + if ($filesize >= 1048576) + { + $filesize = (round((round($filesize / 1048576 * 100) / 100), 2)); + } + else if ($filesize >= 1024) + { + $filesize = (round((round($filesize / 1024 * 100) / 100), 2)); + } - $upload_image = ''; + $display_name = $attachment['real_filename']; + $comment = stripslashes(trim(nl2br($attachment['comment']))); - if ( ($user->img('icon_attach', '') != '') && (trim($extensions[$attachment['extension']]['upload_icon']) == '') ) + $denied = false; + $update_count = false; + + // Admin is allowed to view forbidden Attachments, but the error-message is displayed too to inform the Admin + if ( (!in_array($attachment['extension'], $extensions['_allowed_'])) ) + { + $denied = true; + + $template->assign_block_vars('postrow.attachment', array( + 'IS_DENIED' => true, + 'L_DENIED' => sprintf($user->lang['EXTENSION_DISABLED_AFTER_POSTING'], $attachment['extension'])) + ); + } + + if (!$denied) + { + // define category + $image = FALSE; + $stream = FALSE; +// $swf = FALSE; + $thumbnail = FALSE; + $link = FALSE; + + $l_downloaded_viewed = ''; + $download_link = ''; + $additional_array = array(); + + switch (intval($extensions[$attachment['extension']]['display_cat'])) { - $upload_image = $user->img('icon_attach', ''); - } - else if (trim($extensions[$attachment['extension']]['upload_icon']) != '') - { - $upload_image = ''; + case STREAM_CAT: + $stream = TRUE; + break; +/* case SWF_CAT: + $swf = TRUE; + break;*/ + case IMAGE_CAT: + if (intval($config['img_display_inlined'])) + { + if ( (intval($config['img_link_width']) != 0) || (intval($config['img_link_height']) != 0) ) + { + list($width, $height) = image_getdimension($filename); + + $image = (($width == 0) && ($height == 0)) ? true : ((($width <= intval($config['img_link_width'])) && ($height <= intval($config['img_link_height']))) ? true : false); + } + } + else + { + $image = TRUE; + } + + if ($attachment['thumbnail']) + { + $thumbnail = TRUE; + $image = FALSE; + } + break; } - $filesize = $attachment['filesize']; - $size_lang = ($filesize >= 1048576) ? $user->lang['MB'] : ( ($filesize >= 1024) ? $user->lang['KB'] : $user->lang['BYTES'] ); - if ($filesize >= 1048576) + + if ( (!$image) && (!$stream) /*&& (!$swf)*/ && (!$thumbnail) ) { - $filesize = (round((round($filesize / 1048576 * 100) / 100), 2)); - } - else if ($filesize >= 1024) - { - $filesize = (round((round($filesize / 1024 * 100) / 100), 2)); + $link = TRUE; } - $display_name = $attachment['real_filename']; - $comment = stripslashes(trim(nl2br($attachment['comment']))); - - $denied = false; - $update_count = false; - - // Admin is allowed to view forbidden Attachments, but the error-message is displayed too to inform the Admin - if ( (!in_array($attachment['extension'], $extensions['_allowed_'])) ) + if ($image) { - $denied = true; + // Images + // NOTE: If you want to use the download.php everytime an image is displayed inlined, replace the + // Section between BEGIN and END with (Without the // of course): + // $img_source = $phpbb_root_path . 'download.' . $phpEx . $SID . '&id=' . $attachment['attach_id']; + // $download_link = TRUE; + // + // BEGIN + if ((intval($config['ftp_upload'])) && (trim($config['upload_dir']) == '')) + { + $img_source = $phpbb_root_path . 'download.' . $phpEx . $SID . '&id=' . $attachment['attach_id']; + $download_link = TRUE; + } + else + { + $img_source = $filename; + $download_link = FALSE; + } + // END - $template->assign_block_vars('postrow.attachment', array( - 'IS_DENIED' => true, - 'L_DENIED' => sprintf($user->lang['EXTENSION_DISABLED_AFTER_POSTING'], $attachment['extension'])) + $l_downloaded_viewed = $user->lang['VIEWED']; + $download_link = $img_source; + + // Directly Viewed Image ... update the download count + if (!$download_link) + { + $update_count = true; + } + } + + if ($thumbnail) + { + // Images, but display Thumbnail + // NOTE: If you want to use the download.php everytime an thumnmail is displayed inlined, replace the + // Section between BEGIN and END with (Without the // of course): + // $thumb_source = $phpbb_root_path . 'download.' . $phpEx . $SID . '&id=' . $attachment['attach_id'] . '&thumb=1'; + // + // BEGIN + if ( (intval($config['allow_ftp_upload'])) && (trim($config['upload_dir']) == '') ) + { + $thumb_source = $phpbb_root_path . 'download.' . $phpEx . $SID . '&id=' . $attachment['attach_id'] . '&thumb=1'; + } + else + { + $thumb_source = $thumbnail_filename; + } + // END + + $l_downloaded_viewed = $user->lang['VIEWED']; + $download_link = $phpbb_root_path . 'download.' . $phpEx . $SID . '&id=' . $attachment['attach_id']; + + $additional_array = array( + 'IMG_THUMB_SRC' => $thumb_source ); - } + } - if (!$denied) + if ($stream) { - // define category - $image = FALSE; - $stream = FALSE; -// $swf = FALSE; - $thumbnail = FALSE; - $link = FALSE; - - $l_downloaded_viewed = ''; - $download_link = ''; - $additional_array = array(); - - switch (intval($extensions[$attachment['extension']]['display_cat'])) - { - case STREAM_CAT: - $stream = TRUE; - break; -/* case SWF_CAT: - $swf = TRUE; - break;*/ - case IMAGE_CAT: - if (intval($config['img_display_inlined'])) - { - if ( (intval($config['img_link_width']) != 0) || (intval($config['img_link_height']) != 0) ) - { - list($width, $height) = image_getdimension($filename); - - $image = (($width == 0) && ($height == 0)) ? true : ((($width <= intval($config['img_link_width'])) && ($height <= intval($config['img_link_height']))) ? true : false); - } - } - else - { - $image = TRUE; - } - - if ($attachment['thumbnail']) - { - $thumbnail = TRUE; - $image = FALSE; - } - break; - } - - - if ( (!$image) && (!$stream) /*&& (!$swf)*/ && (!$thumbnail) ) - { - $link = TRUE; - } - - if ($image) - { - // Images - // NOTE: If you want to use the download.php everytime an image is displayed inlined, replace the - // Section between BEGIN and END with (Without the // of course): - // $img_source = $phpbb_root_path . 'download.' . $phpEx . $SID . '&id=' . $attachment['attach_id']; - // $linked_image = TRUE; - // - // BEGIN - if ((intval($config['ftp_upload'])) && (trim($config['upload_dir']) == '')) - { - $img_source = $phpbb_root_path . 'download.' . $phpEx . $SID . '&id=' . $attachment['attach_id']; - $linked_image = TRUE; - } - else - { - $img_source = $filename; - $linked_image = FALSE; - } - // END - - $l_downloaded_viewed = $user->lang['VIEWED']; - $download_link = $img_source; - - // Directly Viewed Image ... update the download count - if (!$linked_image) - { - $update_count = TRUE; - } - } - - if ($thumbnail) - { - // Images, but display Thumbnail - // NOTE: If you want to use the download.php everytime an thumnmail is displayed inlined, replace the - // Section between BEGIN and END with (Without the // of course): - // $thumb_source = $phpbb_root_path . 'download.' . $phpEx . $SID . '&id=' . $attachment['attach_id'] . '&thumb=1'; - // - // BEGIN - if ( (intval($config['allow_ftp_upload'])) && (trim($config['upload_dir']) == '') ) - { - $thumb_source = $phpbb_root_path . 'download.' . $phpEx . $SID . '&id=' . $attachment['attach_id'] . '&thumb=1'; - } - else - { - $thumb_source = $thumbnail_filename; - } - // END - - $l_downloaded_viewed = $user->lang['VIEWED']; - $download_link = $phpbb_root_path . 'download.' . $phpEx . $SID . '&id=' . $attachment['attach_id']; - - $additional_array = array( - 'IMG_THUMB_SRC' => $thumb_source - ); - } - - if ($stream) - { - // Streams - $l_downloaded_viewed = $user->lang['VIEWED']; - $download_link = $filename; + // Streams + $l_downloaded_viewed = $user->lang['VIEWED']; + $download_link = $filename; // $download_link = $phpbb_root_path . 'download.' . $phpEx . $SID . '&id=' . $attachment['attach_id']; - // Viewed/Heared File ... update the download count (download.php is not called here) - $update_count = true; - } + // Viewed/Heared File ... update the download count (download.php is not called here) + $update_count = true; + } /* - if ($swf) - { - // Macromedia Flash Files - list($width, $height) = swf_getdimension($filename); + if ($swf) + { + // Macromedia Flash Files + list($width, $height) = swf_getdimension($filename); - $l_downloaded_viewed = $user->lang['VIEWED']; - $download_link = $filename; - - $additional_array = array( - 'WIDTH' => $width, - 'HEIGHT' => $height - ); - - // Viewed/Heared File ... update the download count (download.php is not called here) - $update_count = true; - } -*/ - if ($link) - { - $l_downloaded_viewed = $user->lang['DOWNLOADED']; - $download_link = $phpbb_root_path . 'download.' . $phpEx . $SID . '&id=' . $attachment['attach_id']; - } + $l_downloaded_viewed = $user->lang['VIEWED']; + $download_link = $filename; - if ($image || $thumbnail || $stream || $thumbnail || $link) - { - $template_array = array_merge($additional_array, array( -// 'IS_FLASH' => ($swf) ? true : false, - 'IS_STREAM' => ($stream) ? true : false, - 'IS_THUMBNAIL' => ($thumbnail) ? true : false, - 'IS_IMAGE' => ($image) ? true : false, - 'U_DOWNLOAD_LINK' => $download_link, - 'UPLOAD_IMG' => $upload_image, - 'DOWNLOAD_NAME' => $display_name, - 'FILESIZE' => $filesize, - 'SIZE_VAR' => $size_lang, - 'COMMENT' => $comment, - 'L_DOWNLOADED_VIEWED' => $l_downloaded_viewed, - 'L_DOWNLOAD_COUNT' => sprintf($user->lang['DOWNLOAD_NUMBER'], $attachment['download_count'])) - ); - - $template->assign_block_vars('postrow.attachment', $template_array); - } + $additional_array = array( + 'WIDTH' => $width, + 'HEIGHT' => $height + ); - if ($update_count) - { - $sql = "UPDATE " . ATTACHMENTS_DESC_TABLE . " - SET download_count = download_count + 1 - WHERE attach_id = " . $attachment['attach_id']; - $db->sql_query($sql); - } + // Viewed/Heared File ... update the download count (download.php is not called here) + $update_count = true; + } +*/ + if ($link) + { + $l_downloaded_viewed = $user->lang['DOWNLOADED']; + $download_link = $phpbb_root_path . 'download.' . $phpEx . $SID . '&id=' . $attachment['attach_id']; + } + + if ($image || $thumbnail || $stream || $thumbnail || $link) + { + $template_array = array_merge($additional_array, array( +// 'IS_FLASH' => ($swf) ? true : false, + 'IS_STREAM' => ($stream) ? true : false, + 'IS_THUMBNAIL' => ($thumbnail) ? true : false, + 'IS_IMAGE' => ($image) ? true : false, + 'U_DOWNLOAD_LINK' => $download_link, + 'UPLOAD_IMG' => $upload_image, + 'DOWNLOAD_NAME' => $display_name, + 'FILESIZE' => $filesize, + 'SIZE_VAR' => $size_lang, + 'COMMENT' => $comment, + 'L_DOWNLOADED_VIEWED' => $l_downloaded_viewed, + 'L_DOWNLOAD_COUNT' => sprintf($user->lang['DOWNLOAD_NUMBER'], $attachment['download_count'])) + ); + + $template->assign_block_vars('postrow.attachment', $template_array); + } + + // NOTE: rather store attach_id in an array then update all download counts at once, outside of the loop -- Ashe + if ($update_count) + { + $sql = 'UPDATE ' . ATTACHMENTS_DESC_TABLE . ' + SET download_count = download_count + 1 + WHERE attach_id = ' . $attachment['attach_id']; + $db->sql_query($sql); } } } } - while ($row = $db->sql_fetchrow($result)); - - unset($user_cache); -} -else -{ - trigger_error($user->lang['NO_TOPIC']); -} - -// No attachments exist, but post table thinks they do -// so go ahead and reset post_attach flags -if ( (sizeof($attach_list)) && (count($attachments) == 0) ) -{ - $sql = "UPDATE " . POSTS_TABLE . " - SET post_attachment = 0 - WHERE post_id IN (" . implode(', ', $attach_list) . ")"; - $db->sql_query($sql); - - // We need to update the topic indicator too if the - // complete topic is now without an attachment } +unset($rowset); +unset($user_cache); // Mark topics read -markread('topic', $forum_id, $topic_id, $forum_topic_data['topic_last_post_id']); +markread('topic', $forum_id, $topic_id, $topic_data['topic_last_post_id']); -// Update the topic view counter -$sql = "UPDATE " . TOPICS_TABLE . " - SET topic_views = topic_views + 1 - WHERE topic_id = $topic_id"; -$db->sql_query($sql); +// Update the topic view counter, excepted when the user was already reading it +if (!preg_match("/&t=$topic_id\\b/", $user->data['session_page'] . ' ')) +{ + $sql = "UPDATE " . TOPICS_TABLE . " + SET topic_views = topic_views + 1 + WHERE topic_id = $topic_id"; + $db->sql_query($sql); +} // Mozilla navigation bar