diff options
Diffstat (limited to 'phpBB/viewtopic.php')
-rw-r--r-- | phpBB/viewtopic.php | 135 |
1 files changed, 99 insertions, 36 deletions
diff --git a/phpBB/viewtopic.php b/phpBB/viewtopic.php index 8a59d5e6b4..3040857c49 100644 --- a/phpBB/viewtopic.php +++ b/phpBB/viewtopic.php @@ -160,9 +160,11 @@ if ($user->data['user_id'] != ANONYMOUS) break; default: - $extra_fields .= ', tw.notify_status'; + $extra_fields .= ', tw.notify_status, bm.order_id as bookmarked'; $join_sql_table .= ' LEFT JOIN ' . TOPICS_WATCH_TABLE . ' tw ON (tw.user_id = ' . $user->data['user_id'] . ' AND t.topic_id = tw.topic_id)'; + $join_sql_table .= ' LEFT JOIN ' . BOOKMARKS_TABLE . ' bm ON (bm.user_id = ' . $user->data['user_id'] . ' + AND t.topic_id = bm.topic_id)'; } } @@ -262,11 +264,20 @@ if ($forum_password) login_forum_box($topic_data); } -// Redirect to login upon emailed notification links -if (isset($_GET['e']) && $user->data['user_id'] == ANONYMOUS) +// Redirect to login or to the correct post upon emailed notification links +if (isset($_GET['e'])) { - $redirect_url = htmlspecialchars(str_replace('&e=' . $_GET['e'], '', $_SERVER['REQUEST_URI'])) . (($_GET['e']) ? '#' . (int) $_GET['e'] : ''); - login_box(preg_replace('#.*?([a-z]+?\.' . $phpEx . '.*?)$#i', '\1', $redirect_url), '', $user->lang['LOGIN_NOTIFY_TOPIC']); + $jump_to = (int) $_GET['e']; + $redirect_url = htmlspecialchars(str_replace('&e=' . $jump_to, '', $_SERVER['REQUEST_URI'])) . (($jump_to) ? '#' . $jump_to : ''); + if ($user->data['user_id'] == ANONYMOUS) + { + login_box(preg_replace('#.*?([a-z]+?\.' . $phpEx . '.*?)$#i', '\1', $redirect_url), '', $user->lang['LOGIN_NOTIFY_TOPIC']); + } + else if ($jump_to > 0) + { + // We direct the already logged in user to the correct post... + redirect($redirect_url); + } } // What is start equal to? @@ -310,19 +321,69 @@ else $limit_posts_time = ''; } -// Fill extension informations, if this topic has attachments -$extensions = array(); -if ($topic_attachment) +// Was a highlight request part of the URI? +$highlight_match = $highlight = ''; +if ($hilit_words) { - obtain_attach_extensions($extensions); + foreach (explode(' ', trim($hilit_words)) as $word) + { + if (trim($word)) + { + $highlight_match .= (($highlight_match != '') ? '|' : '') . str_replace('\*', '\w*?', preg_quote($word, '#')); + } + } + + $highlight = htmlspecialchars(urlencode($hilit_words)); } +// General Viewtopic URL for return links +$viewtopic_url = "{$phpbb_root_path}viewtopic.$phpEx$SID&f=$forum_id&t=$topic_id&start=$start&$u_sort_param" . (($highlight_match) ? "&hilit=$highlight" : ''); + // Are we watching this topic? $s_watching_topic = $s_watching_topic_img = array(); $s_watching_topic['link'] = $s_watching_topic['title'] = ''; if ($config['email_enable'] && $config['allow_topic_notify'] && $user->data['user_id'] != ANONYMOUS) { - watch_topic_forum('topic', $s_watching_topic, $s_watching_topic_img, $user->data['user_id'], $topic_id, $notify_status); + watch_topic_forum('topic', $s_watching_topic, $s_watching_topic_img, $user->data['user_id'], $topic_id, $notify_status, $start); +} + +// Bookmarks +if ($config['allow_bookmarks'] && $user->data['user_id'] != ANONYMOUS && request_var('bookmark', 0)) +{ + if (!$bookmarked) + { + $sql = 'INSERT INTO ' . BOOKMARKS_TABLE . ' ' . $db->sql_build_array('INSERT', array( + 'user_id' => $user->data['user_id'], + 'topic_id' => $topic_id, + 'order_id' => 0) + ); + $db->sql_query($sql); + + $where_sql = ''; + $sign = '+'; + } + else + { + $sql = 'DELETE FROM ' . BOOKMARKS_TABLE . " + WHERE user_id = {$user->data['user_id']} + AND topic_id = $topic_id"; + $db->sql_query($sql); + + // Works because of current order_id selected as bookmark value (please do not change because of simplicity) + $where_sql = " AND order_id > $bookmarked"; + $sign = '-'; + } + + // Re-Sort Bookmarks + $sql = 'UPDATE ' . BOOKMARKS_TABLE . " + SET order_id = order_id $sign 1 + WHERE user_id = {$user->data['user_id']} + $where_sql"; + $db->sql_query($sql); + + meta_refresh(3, $viewtopic_url); + $message = (($bookmarked) ? $user->lang['BOOKMARK_REMOVED'] : $user->lang['BOOKMARK_ADDED']) . '<br /><br />' . sprintf($user->lang['RETURN_TOPIC'], '<a href="' . $viewtopic_url . '">', '</a>'); + trigger_error($message); } // Grab ranks @@ -333,19 +394,11 @@ obtain_ranks($ranks); $icons = array(); obtain_icons($icons); -// Was a highlight request part of the URI? -$highlight_match = $highlight = ''; -if ($hilit_words) +// Grab extensions +$extensions = array(); +if ($topic_attachment) { - foreach (explode(' ', trim($hilit_words)) as $word) - { - if (trim($word)) - { - $highlight_match .= (($highlight_match != '') ? '|' : '') . str_replace('\*', '\w*?', preg_quote($word, '#')); - } - } - - $highlight = htmlspecialchars(urlencode($hilit_words)); + obtain_attach_extensions($extensions); } // Forum rules listing @@ -367,8 +420,7 @@ $topic_mod .= ($auth->acl_get('f_announce', $forum_id) && $topic_type != POST_GL $topic_mod .= ($auth->acl_get('m_', $forum_id)) ? '<option value="viewlogs">' . $user->lang['VIEW_TOPIC_LOGS'] . '</option>' : ''; // If we've got a hightlight set pass it on to pagination. -$pagination_url = "viewtopic.$phpEx$SID&f=$forum_id&t=$topic_id&sk=$sort_key&st=$sort_days&sd=$sort_dir" . (($highlight_match) ? "&hilit=$highlight" : ''); -$pagination = generate_pagination($pagination_url, $total_posts, $config['posts_per_page'], $start); +$pagination = generate_pagination($viewtopic_url, $total_posts, $config['posts_per_page'], $start); // Navigation links generate_forum_nav($topic_data); @@ -432,16 +484,19 @@ $template->assign_vars(array( 'U_TOPIC' => "{$server_path}viewtopic.$phpEx?f=$forum_id&t=$topic_id", 'U_FORUM' => $server_path, 'U_VIEW_UNREAD_POST' => "viewtopic.$phpEx$SID&f=$forum_id&t=$topic_id&view=unread#unread", - 'U_VIEW_TOPIC' => "viewtopic.$phpEx$SID&f=$forum_id&t=$topic_id&start=$start&$u_sort_param&hilit=$highlight", + 'U_VIEW_TOPIC' => $viewtopic_url, 'U_VIEW_FORUM' => "viewforum.$phpEx$SID&f=$forum_id", 'U_VIEW_OLDER_TOPIC' => "viewtopic.$phpEx$SID&f=$forum_id&t=$topic_id&view=previous", 'U_VIEW_NEWER_TOPIC' => "viewtopic.$phpEx$SID&f=$forum_id&t=$topic_id&view=next", - 'U_PRINT_TOPIC' => ($auth->acl_get('f_print', $forum_id)) ? "viewtopic.$phpEx$SID&f=$forum_id&t=$topic_id&$u_sort_param&view=print" : '', + 'U_PRINT_TOPIC' => ($auth->acl_get('f_print', $forum_id)) ? $viewtopic_url . '&view=print' : '', 'U_EMAIL_TOPIC' => ($auth->acl_get('f_email', $forum_id) && $config['email_enable']) ? "memberlist.$phpEx$SID&mode=email&t=$topic_id" : '', 'U_WATCH_TOPIC' => $s_watching_topic['link'], 'L_WATCH_TOPIC' => $s_watching_topic['title'], + 'U_BOOKMARK_TOPIC' => ($user->data['user_id'] != ANONYMOUS && $config['allow_bookmarks']) ? $viewtopic_url . '&bookmark=1' : '', + 'L_BOOKMARK_TOPIC' => ($bookmarked) ? $user->lang['BOOKMARK_TOPIC_REMOVE'] : $user->lang['BOOKMARK_TOPIC'], + 'U_POST_NEW_TOPIC' => "posting.$phpEx$SID&mode=post&f=$forum_id", 'U_POST_REPLY_TOPIC' => "posting.$phpEx$SID&mode=reply&f=$forum_id&t=$topic_id", 'U_BUMP_TOPIC' => (bump_topic_allowed($forum_id, $topic_bumped, $topic_last_post_time, $topic_poster, $topic_last_poster_id)) ? "posting.$phpEx$SID&mode=bump&f=$forum_id&t=$topic_id" : '') @@ -602,9 +657,9 @@ if (!empty($poll_start)) 'S_CAN_VOTE' => $s_can_vote, 'S_DISPLAY_RESULTS' => $s_display_results, 'S_IS_MULTI_CHOICE' => ($poll_max_options > 1) ? true : false, - 'S_POLL_ACTION' => "viewtopic.$phpEx$SID&t=$topic_id&$u_sort_param", + 'S_POLL_ACTION' => $viewtopic_url, - 'U_VIEW_RESULTS' => "viewtopic.$phpEx$SID&t=$topic_id&$u_sort_param&view=viewpoll") + 'U_VIEW_RESULTS' => $viewtopic_url . '&view=viewpoll') ); unset($poll_info); @@ -829,15 +884,23 @@ while ($row = $db->sql_fetchrow($result)) } else { - foreach ($ranks['normal'] as $rank) + if (sizeof($ranks['normal'])) { - if ($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'])) ? '<img src="' . $config['ranks_path'] . '/' . $rank['rank_image'] . '" border="0" alt="' . $rank['rank_title'] . '" title="' . $rank['rank_title'] . '" /><br />' : ''; - 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'])) ? '<img src="' . $config['ranks_path'] . '/' . $rank['rank_image'] . '" border="0" alt="' . $rank['rank_title'] . '" title="' . $rank['rank_title'] . '" /><br />' : ''; + break; + } } } + else + { + $user_cache[$poster_id]['rank_title'] = ''; + $user_cache[$poster_id]['rank_image'] = ''; + } } if (!empty($row['user_allow_viewemail']) || $auth->acl_get('a_email')) @@ -1189,9 +1252,9 @@ for ($i = 0; $i < count($post_list); ++$i) 'U_RATE_GOOD' => "viewtopic.$phpEx$SID&rate=good&p=" . $row['post_id'], 'U_RATE_BAD' => "viewtopic.$phpEx$SID&rate=bad&p=" . $row['post_id'], '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'] : '', - 'U_MCP_APPROVE' => "mcp.$phpEx$SID&i=queue&mode=approve&p=" . $row['post_id'], - 'U_MCP_DETAILS' => "mcp.$phpEx$SID&mode=post_details&p=" . $row['post_id'], + 'U_MCP_REPORT' => ($auth->acl_gets('m_', 'a_', 'f_report', $forum_id)) ? "mcp.$phpEx$SID&mode=post_details&p=" . $row['post_id'] : '', + 'U_MCP_APPROVE' => ($auth->acl_get('m_approve', $forum_id)) ? "mcp.$phpEx$SID&i=queue&mode=approve&p=" . $row['post_id'] : '', + 'U_MCP_DETAILS' => ($auth->acl_gets('a_', 'm_', $forum_id)) ? "mcp.$phpEx$SID&mode=post_details&p=" . $row['post_id'] : '', 'U_MINI_POST' => "viewtopic.$phpEx$SID&p=" . $row['post_id'] . '#' . $row['post_id'], 'U_POST_ID' => ($unread_post_id == $row['post_id']) ? 'unread' : $row['post_id'], 'POST_ID' => $row['post_id'], |