diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index 44c37c26fb..34c688ff24 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -835,6 +835,7 @@ $lang = array_merge($lang, array( 'UNREAD_MESSAGES' => 'Unread messages', 'UNREAD_POST' => 'Unread post', 'UNREAD_POSTS' => 'Unread posts', + 'UNRECOGNISED_PAGE' => 'Unrecognised page', 'UNWATCH_FORUM_CONFIRM' => 'Are you sure you wish to unsubscribe from this forum?', 'UNWATCH_FORUM_DETAILED' => 'Are you sure you wish to unsubscribe from the forum ā€œ%sā€?', 'UNWATCH_TOPIC_CONFIRM' => 'Are you sure you wish to unsubscribe from this topic?', diff --git a/phpBB/viewonline.php b/phpBB/viewonline.php index 1b28750a0b..e5affc8e2f 100644 --- a/phpBB/viewonline.php +++ b/phpBB/viewonline.php @@ -263,6 +263,55 @@ while ($row = $db->sql_fetchrow($result)) case 'viewtopic': $forum_id = $row['session_forum_id']; + if (!$forum_id) + { + $array_match_index = 5; + // find the forum_id from the page URI + $matches = array(); + + $pattern = '#(viewtopic|posting)\.' . $phpEx . '((\?|&)\w+=\w+)*(\?|&)'; + preg_match($pattern . 'f=(\d+)#', $row['session_page'], $matches, PREG_UNMATCHED_AS_NULL); + if ($matches[$array_match_index]) + { + $forum_id = (int) $matches[$array_match_index]; + } + else + { + preg_match($pattern . 't=(\d+)#', $row['session_page'], $matches, PREG_UNMATCHED_AS_NULL); + if ($matches[$array_match_index]) + { + $topic_id = $matches[$array_match_index]; + + $sql = 'SELECT forum_id + FROM ' . TOPICS_TABLE . " + WHERE topic_id = $topic_id"; + $db->sql_query($sql); + $forum_id = (int) $db->sql_fetchfield('forum_id'); + } + else + { + preg_match($pattern . 'p=(\d+)#', $row['session_page'], $matches, PREG_UNMATCHED_AS_NULL); + if ($matches[$array_match_index]) + { + $post_id = $matches[$array_match_index]; + + $topic_forum = array(); + + $sql = 'SELECT t.forum_id + FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE . ' p + WHERE p.post_id = ' . $post_id . ' + AND t.topic_id = p.topic_id'; + $db->sql_query($sql); + $forum_id = (int) $db->sql_fetchfield('forum_id'); + } + else + { + $forum_id = 0; + } + } + } + } + if ($forum_id && $auth->acl_get('f_list', $forum_id)) { $location = ''; @@ -304,7 +353,7 @@ while ($row = $db->sql_fetchrow($result)) } else { - $location = $user->lang['INDEX']; + $location = $user->lang['UNRECOGNISED_PAGE']; $location_url = append_sid("{$phpbb_root_path}index.$phpEx"); } break; @@ -377,17 +426,23 @@ while ($row = $db->sql_fetchrow($result)) break; default: - $location = $user->lang['INDEX']; - $location_url = append_sid("{$phpbb_root_path}index.$phpEx"); - if ($row['session_page'] === 'app.' . $phpEx . '/help/faq' || $row['session_page'] === 'app.' . $phpEx . '/help/bbcode') { $location = $user->lang['VIEWING_FAQ']; $location_url = $controller_helper->route('phpbb_help_faq_controller'); } + else + { + $location = $user->lang['UNRECOGNISED_PAGE']; + $location_url = append_sid("{$phpbb_root_path}index.$phpEx"); + } break; } + if ($auth->acl_get('a_')) + { + $location .= '
' . substr($row['session_page'], 0, 99); + } /** * Overwrite the location's name and URL, which are displayed in the list @@ -405,7 +460,7 @@ while ($row = $db->sql_fetchrow($result)) extract($phpbb_dispatcher->trigger_event('core.viewonline_overwrite_location', compact($vars))); $template_row = array( - 'USERNAME' => $row['username'], + 'USERNAME' => $row['username'], 'USERNAME_COLOUR' => $row['user_colour'], 'USERNAME_FULL' => $username_full, 'LASTUPDATE' => $user->format_date($row['session_time']),