diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php
index 6cef26844d..29b627bccc 100644
--- a/phpBB/includes/functions.php
+++ b/phpBB/includes/functions.php
@@ -121,7 +121,7 @@ function get_userdata($user)
// list if currently null, assign basic forum info to template
function generate_forum_nav(&$forum_data)
{
- global $db, $user, $template, $phpEx, $SID;
+ global $db, $user, $template, $phpEx, $SID, $phpbb_root_path;
// Get forum parents
$forum_parents = get_forum_parents($forum_data);
@@ -136,7 +136,8 @@ function generate_forum_nav(&$forum_data)
'S_IS_LINK' => ($parent_type == FORUM_LINK) ? true : false,
'S_IS_POST' => ($parent_type == FORUM_POST) ? true : false,
'FORUM_NAME' => $parent_name,
- 'U_VIEW_FORUM' => "viewforum.$phpEx$SID&f=$parent_forum_id")
+ 'FORUM_ID' => $parent_forum_id,
+ 'U_VIEW_FORUM' => "{$phpbb_root_path}viewforum.$phpEx$SID&f=$parent_forum_id")
);
}
@@ -145,7 +146,8 @@ function generate_forum_nav(&$forum_data)
'S_IS_LINK' => ($forum_data['forum_type'] == FORUM_LINK) ? true : false,
'S_IS_POST' => ($forum_data['forum_type'] == FORUM_POST) ? true : false,
'FORUM_NAME' => $forum_data['forum_name'],
- 'U_VIEW_FORUM' => "viewforum.$phpEx$SID&f=" . $forum_data['forum_id'])
+ 'FORUM_ID' => $forum_data['forum_id'],
+ 'U_VIEW_FORUM' => "{$phpbb_root_path}viewforum.$phpEx$SID&f=" . $forum_data['forum_id'])
);
$template->assign_vars(array(
@@ -438,7 +440,7 @@ function tz_select($default = '')
// Topic and forum watching common code
function watch_topic_forum($mode, &$s_watching, &$s_watching_img, $user_id, $match_id, $notify_status = 'unset')
{
- global $template, $db, $user, $phpEx, $SID, $start;
+ global $template, $db, $user, $phpEx, $SID, $start, $phpbb_root_path;
$table_sql = ($mode == 'forum') ? FORUMS_WATCH_TABLE : TOPICS_WATCH_TABLE;
$where_sql = ($mode == 'forum') ? 'forum_id' : 'topic_id';
@@ -524,7 +526,7 @@ function watch_topic_forum($mode, &$s_watching, &$s_watching_img, $user_id, $mat
{
if ($_GET['unwatch'] == $mode)
{
- login_box(preg_replace('#.*?([a-z]+?\.' . $phpEx . '.*?)$#i', '\1', htmlspecialchars($_SERVER['REQUEST_URI'])));
+ login_box($user->cur_page);
}
}
else
@@ -536,7 +538,8 @@ function watch_topic_forum($mode, &$s_watching, &$s_watching_img, $user_id, $mat
if ($can_watch)
{
- $s_watching = ($is_watching) ? "" . $user->lang['STOP_WATCHING_' . strtoupper($mode)] . '' : "" . $user->lang['START_WATCHING_' . strtoupper($mode)] . '';
+ $s_watching['link'] = "{$phpbb_root_path}view$mode.$phpEx$SID&$u_url=$match_id&" . (($is_watching) ? 'unwatch' : 'watch') . "=$mode&start=$start";
+ $s_watching['title'] = $user->lang[(($is_watching) ? 'STOP' : 'START') . '_WATCHING_' . strtoupper($mode)];
}
return;
@@ -650,9 +653,9 @@ function markread($mode, $forum_id = 0, $topic_id = 0, $marktime = false)
if ($config['load_db_lastread'] || ($config['load_db_track'] && $type == TRACK_POSTED))
{
$sql = 'UPDATE ' . TOPICS_TRACK_TABLE . "
- SET mark_type = $type, mark_time = $current_time
+ SET mark_type = $type, mark_time = $current_time
WHERE topic_id = $topic_id
- AND user_id = " . $user->data['user_id'] . "
+ AND user_id = " . $user->data['user_id'] . "
AND mark_time < $current_time";
if (!$db->sql_query($sql) || !$db->sql_affectedrows())
{
@@ -708,6 +711,8 @@ function generate_pagination($base_url, $num_items, $per_page, $start_item, $add
{
global $template, $user;
+ $seperator = $user->theme['primary']['pagination_sep'];
+
$total_pages = ceil($num_items/$per_page);
if ($total_pages == 1 || !$num_items)
@@ -717,44 +722,47 @@ function generate_pagination($base_url, $num_items, $per_page, $start_item, $add
$on_page = floor($start_item / $per_page) + 1;
- $page_string = ($on_page == 1) ? '1' : '' . $user->lang['PREVIOUS'] . ' 1';
+ $page_string = ($on_page == 1) ? '1' : '' . $user->lang['PREVIOUS'] . ' 1';
if ($total_pages > 5)
{
$start_cnt = min(max(1, $on_page - 4), $total_pages - 5);
$end_cnt = max(min($total_pages, $on_page + 4), 6);
- $page_string .= ($start_cnt > 1) ? ' ... ' : ', ';
+ $page_string .= ($start_cnt > 1) ? ' ... ' : $seperator;
for($i = $start_cnt + 1; $i < $end_cnt; $i++)
{
- $page_string .= ($i == $on_page) ? '' . $i . '' : '' . $i . '';
+ $page_string .= ($i == $on_page) ? '' . $i . '' : '' . $i . '';
if ($i < $end_cnt - 1)
{
- $page_string .= ', ';
+ $page_string .= $seperator;
}
}
- $page_string .= ($end_cnt < $total_pages) ? ' ... ' : ', ';
+ $page_string .= ($end_cnt < $total_pages) ? ' ... ' : $seperator;
}
else
{
- $page_string .= ', ';
+ $page_string .= $seperator;
for($i = 2; $i < $total_pages; $i++)
{
- $page_string .= ($i == $on_page) ? '' . $i . '' : '' . $i . '';
+ $page_string .= ($i == $on_page) ? '' . $i . '' : '' . $i . '';
if ($i < $total_pages)
{
- $page_string .= ', ';
+ $page_string .= $seperator;
}
}
}
- $page_string .= ($on_page == $total_pages) ? '' . $total_pages . '' : '' . $total_pages . ' ' . $user->lang['NEXT'] . '';
+ $page_string .= ($on_page == $total_pages) ? '' . $total_pages . '' : '' . $total_pages . ' ' . $user->lang['NEXT'] . '';
// $page_string = $user->lang['GOTO_PAGE'] . ' ' . $page_string;
- $page_string = '' . $user->lang['GOTO_PAGE'] . ' ' . $page_string;
+ if ($user->theme['primary']['pagination_goto_page'])
+ {
+ $page_string = '' . $user->lang['GOTO_PAGE'] . ' ' . $page_string;
+ }
$template->assign_var('BASE_URL', $base_url);
$template->assign_var('PER_PAGE', $per_page);
@@ -979,25 +987,51 @@ function meta_refresh($time, $url)
);
}
-// Build Confirm box with session id and user id check
-function confirm_box($check, $title = '', $url = '', $hidden = '')
+// Build Confirm box
+function confirm_box($check, $title = '', $hidden = '')
{
- global $user, $template;
+ global $user, $template, $_POST, $SID, $db;
- if ($check)
+ if (isset($_POST['cancel']))
+ {
+ return false;
+ }
+
+ $confirm = false;
+ if (isset($_POST['confirm']))
+ {
+ // language frontier
+ if ($_POST['confirm'] == $user->lang['YES'])
+ {
+ $confirm = true;
+ }
+ }
+
+ if ($check && $confirm)
{
$user_id = request_var('user_id', 0);
- $session_id = request_var('sess', 0);
+ $session_id = request_var('sess', '');
- if ($user_id != $user->data['user_id'] || $session_id != $user->session_id)
+ // The session page is already updated, but the user array holds the data before the update took place, therefore it is working here...
+ if ($user_id != $user->data['user_id'] ||
+ $session_id != $user->session_id ||
+ substr(basename(str_replace('&', '&', $user->data['session_page'])), 0, 199) != substr(basename(str_replace('&', '&', $user->cur_page)), 0, 199) ||
+ !preg_match('#^(.*?)[&|\?]act_key=[A-Z0-9]{10}(.*?)#', str_replace('&', '&', $user->cur_page)))
{
return false;
}
return true;
}
+ else if ($check)
+ {
+ return false;
+ }
- $s_hidden_fields = '';
+ $s_hidden_fields = '';
+
+ // generate activation key
+ $act_key = gen_rand_string(10);
page_header($user->lang[$title]);
@@ -1005,14 +1039,29 @@ function confirm_box($check, $title = '', $url = '', $hidden = '')
'body' => 'confirm_body.html')
);
+ // If activation key already exist, we better do not re-use the key (something very strange is going on...)
+ if (request_var('act_key', ''))
+ {
+ $user->cur_page = preg_replace('#^(.*?)[&|\?]act_key=[A-Z0-9]{10}(.*?)#', '\1\2', str_replace('&', '&', $user->cur_page));
+ }
+ $user_page = $user->cur_page . ((strstr($user->cur_page, '?')) ? '&' : '?') . 'act_key=' . $act_key;
+ $user_page = str_replace('&', '&', $user_page);
+
$template->assign_vars(array(
'MESSAGE_TITLE' => $user->lang[$title],
'MESSAGE_TEXT' => $user->lang[$title . '_CONFIRM'],
- 'S_CONFIRM_ACTION' => $url,
+ 'YES_VALUE' => $user->lang['YES'],
+ 'S_CONFIRM_ACTION' => $user_page,
'S_HIDDEN_FIELDS' => $hidden . $s_hidden_fields)
);
-
+
+ // Here we update the lastpage of the user, only here
+ $sql = 'UPDATE ' . SESSIONS_TABLE . "
+ SET session_page = '" . $db->sql_escape($user_page) . "'
+ WHERE session_id = '" . $db->sql_escape($user->session_id) . "'";
+ $db->sql_query($sql);
+
page_footer();
}
@@ -1146,8 +1195,7 @@ function bump_topic_allowed($forum_id, $topic_bumped, $last_post_time, $topic_po
}
// Check bump time range, is the user really allowed to bump the topic at this time?
- preg_match('#^([0-9]+)(m|h|d)$#', $config['bump_interval'], $match);
- $bump_time = ($match[2] == 'm') ? $match[1] * 60 : (($match[2] == 'h') ? $match[1] * 3600 : $match[1] * 86400);
+ $bump_time = ($config['bump_type'] == 'm') ? $config['bump_interval'] * 60 : (($config['bump_type'] == 'h') ? $config['bump_interval'] * 3600 : $config['bump_interval'] * 86400);
// Check bump time
if ($last_post_time + $bump_time > time())
@@ -1241,6 +1289,17 @@ function msg_handler($errno, $msg_text, $errfile, $errline)
switch ($errno)
{
+ case E_NOTICE:
+ case E_WARNING:
+ if (defined('DEBUG_EXTRA'))
+ {
+ if (!strstr($errfile, '/cache/'))
+ {
+ echo "PHP Notice: in file $errfile on line $errline: $msg_text
";
+ }
+ }
+ break;
+
case E_USER_ERROR:
if (isset($db))
{
@@ -1311,6 +1370,15 @@ function msg_handler($errno, $msg_text, $errfile, $errline)
}
exit;
break;
+ default:
+ if (defined('DEBUG_EXTRA'))
+ {
+ if (!strstr($errfile, '/cache/'))
+ {
+ echo "Another Error: in file $errfile on line $errline: $msg_text
";
+ }
+ }
+ break;
}
}
@@ -1352,7 +1420,7 @@ function page_header($page_title = '')
{
$userlist_ary = $userlist_visible = array();
$logged_visible_online = $logged_hidden_online = $guests_online = $prev_user_id = 0;
- $prev_user_ip = $reading_sql = '';
+ $prev_user_ip = $prev_session_ip = $reading_sql = '';
if (!empty($_REQUEST['f']))
{
@@ -1474,6 +1542,9 @@ function page_header($page_title = '')
$l_online_time = sprintf($user->lang[$l_online_time], $config['load_online_time']);
}
+ $l_privmsgs_text = $l_privmsgs_text_unread = '';
+ $s_privmsg_new = false;
+
// Obtain number of new private messages if user is logged in
if ($user->data['user_id'] != ANONYMOUS)
{
@@ -1603,7 +1674,7 @@ function page_footer()
if ($auth->acl_get('a_'))
{
- $debug_output .= ' | Explain';
+ $debug_output .= ' | Explain';
}
}