mirror of
https://github.com/phpbb/phpbb.git
synced 2025-07-31 05:50:42 +02:00
Merge branch '3.2.x' into ticket/16159
This commit is contained in:
@@ -32,7 +32,7 @@ $topic_id = $request->variable('t', 0);
|
||||
$post_id = $request->variable('p', 0);
|
||||
$voted_id = $request->variable('vote_id', array('' => 0));
|
||||
|
||||
$voted_id = (sizeof($voted_id) > 1) ? array_unique($voted_id) : $voted_id;
|
||||
$voted_id = (count($voted_id) > 1) ? array_unique($voted_id) : $voted_id;
|
||||
|
||||
|
||||
$start = $request->variable('start', 0);
|
||||
@@ -263,8 +263,26 @@ if (!$topic_data)
|
||||
|
||||
$forum_id = (int) $topic_data['forum_id'];
|
||||
|
||||
/**
|
||||
* Modify the forum ID to handle the correct display of viewtopic if needed
|
||||
*
|
||||
* @event core.viewtopic_modify_forum_id
|
||||
* @var string forum_id forum ID
|
||||
* @var array topic_data array of topic's data
|
||||
* @since 3.2.5-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'forum_id',
|
||||
'topic_data',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.viewtopic_modify_forum_id', compact($vars)));
|
||||
|
||||
// If the request is missing the f parameter, the forum id in the user session data is 0 at the moment.
|
||||
// Let's fix that now so that the user can't hide from the forum's Who Is Online list.
|
||||
$user->page['forum'] = $forum_id;
|
||||
|
||||
// Now we know the forum_id and can check the permissions
|
||||
if ($topic_data['topic_visibility'] != ITEM_APPROVED && !$auth->acl_get('m_approve', $forum_id))
|
||||
if (!$phpbb_content_visibility->is_visible('topic', $forum_id, $topic_data))
|
||||
{
|
||||
trigger_error('NO_TOPIC');
|
||||
}
|
||||
@@ -338,6 +356,12 @@ if (($topic_data['topic_type'] != POST_NORMAL) && $topic_data['topic_time_limit'
|
||||
// Setup look and feel
|
||||
$user->setup('viewtopic', $topic_data['forum_style']);
|
||||
|
||||
if ($view == 'print' && !$auth->acl_get('f_print', $forum_id))
|
||||
{
|
||||
send_status_line(403, 'Forbidden');
|
||||
trigger_error('NO_AUTH_PRINT_TOPIC');
|
||||
}
|
||||
|
||||
$overrides_f_read_check = false;
|
||||
$overrides_forum_password_check = false;
|
||||
$topic_tracking_info = isset($topic_tracking_info) ? $topic_tracking_info : null;
|
||||
@@ -429,6 +453,38 @@ $join_user_sql = array('a' => true, 't' => false, 's' => false);
|
||||
|
||||
$s_limit_days = $s_sort_key = $s_sort_dir = $u_sort_param = '';
|
||||
|
||||
/**
|
||||
* Event to add new sorting options
|
||||
*
|
||||
* @event core.viewtopic_gen_sort_selects_before
|
||||
* @var array limit_days Limit results by time
|
||||
* @var array sort_by_text Language strings for sorting options
|
||||
* @var array sort_by_sql SQL conditions for sorting options
|
||||
* @var array join_user_sql SQL joins required for sorting options
|
||||
* @var int sort_days User selected sort days
|
||||
* @var string sort_key User selected sort key
|
||||
* @var string sort_dir User selected sort direction
|
||||
* @var string s_limit_days Initial value of limit days selectbox
|
||||
* @var string s_sort_key Initial value of sort key selectbox
|
||||
* @var string s_sort_dir Initial value of sort direction selectbox
|
||||
* @var string u_sort_param Initial value of sorting form action
|
||||
* @since 3.2.8-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'limit_days',
|
||||
'sort_by_text',
|
||||
'sort_by_sql',
|
||||
'join_user_sql',
|
||||
'sort_days',
|
||||
'sort_key',
|
||||
'sort_dir',
|
||||
's_limit_days',
|
||||
's_sort_key',
|
||||
's_sort_dir',
|
||||
'u_sort_param',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.viewtopic_gen_sort_selects_before', compact($vars)));
|
||||
|
||||
gen_sort_selects($limit_days, $sort_by_text, $sort_days, $sort_key, $sort_dir, $s_limit_days, $s_sort_key, $s_sort_dir, $u_sort_param, $default_sort_days, $default_sort_key, $default_sort_dir);
|
||||
|
||||
// Obtain correct post count and ordering SQL if user has
|
||||
@@ -736,7 +792,7 @@ $template->assign_vars(array(
|
||||
|
||||
'TOTAL_POSTS' => $user->lang('VIEW_TOPIC_POSTS', (int) $total_posts),
|
||||
'U_MCP' => ($auth->acl_get('m_', $forum_id)) ? append_sid("{$phpbb_root_path}mcp.$phpEx", "i=main&mode=topic_view&f=$forum_id&t=$topic_id" . (($start == 0) ? '' : "&start=$start") . ((strlen($u_sort_param)) ? "&$u_sort_param" : ''), true, $user->session_id) : '',
|
||||
'MODERATORS' => (isset($forum_moderators[$forum_id]) && sizeof($forum_moderators[$forum_id])) ? implode($user->lang['COMMA_SEPARATOR'], $forum_moderators[$forum_id]) : '',
|
||||
'MODERATORS' => (isset($forum_moderators[$forum_id]) && count($forum_moderators[$forum_id])) ? implode($user->lang['COMMA_SEPARATOR'], $forum_moderators[$forum_id]) : '',
|
||||
|
||||
'POST_IMG' => ($topic_data['forum_status'] == ITEM_LOCKED) ? $user->img('button_topic_locked', 'FORUM_LOCKED') : $user->img('button_topic_new', 'POST_NEW_TOPIC'),
|
||||
'QUOTE_IMG' => $user->img('icon_post_quote', 'REPLY_WITH_QUOTE'),
|
||||
@@ -759,7 +815,7 @@ $template->assign_vars(array(
|
||||
'S_SELECT_SORT_DIR' => $s_sort_dir,
|
||||
'S_SELECT_SORT_KEY' => $s_sort_key,
|
||||
'S_SELECT_SORT_DAYS' => $s_limit_days,
|
||||
'S_SINGLE_MODERATOR' => (!empty($forum_moderators[$forum_id]) && sizeof($forum_moderators[$forum_id]) > 1) ? false : true,
|
||||
'S_SINGLE_MODERATOR' => (!empty($forum_moderators[$forum_id]) && count($forum_moderators[$forum_id]) > 1) ? false : true,
|
||||
'S_TOPIC_ACTION' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id" . (($start == 0) ? '' : "&start=$start")),
|
||||
'S_MOD_ACTION' => $s_quickmod_action,
|
||||
|
||||
@@ -776,7 +832,7 @@ $template->assign_vars(array(
|
||||
|
||||
'U_TOPIC' => "{$server_path}viewtopic.$phpEx?f=$forum_id&t=$topic_id",
|
||||
'U_FORUM' => $server_path,
|
||||
'U_VIEW_TOPIC' => $viewtopic_url,
|
||||
'U_VIEW_TOPIC' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id" . (($start == 0) ? '' : "&start=$start") . (strlen($u_sort_param) ? "&$u_sort_param" : '')),
|
||||
'U_CANONICAL' => generate_board_url() . '/' . append_sid("viewtopic.$phpEx", "t=$topic_id" . (($start) ? "&start=$start" : ''), true, ''),
|
||||
'U_VIEW_FORUM' => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id),
|
||||
'U_VIEW_OLDER_TOPIC' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id&view=previous"),
|
||||
@@ -852,9 +908,9 @@ if (!empty($topic_data['poll_start']))
|
||||
(($topic_data['poll_length'] != 0 && $topic_data['poll_start'] + $topic_data['poll_length'] > time()) || $topic_data['poll_length'] == 0) &&
|
||||
$topic_data['topic_status'] != ITEM_LOCKED &&
|
||||
$topic_data['forum_status'] != ITEM_LOCKED &&
|
||||
(!sizeof($cur_voted_id) ||
|
||||
(!count($cur_voted_id) ||
|
||||
($auth->acl_get('f_votechg', $forum_id) && $topic_data['poll_vote_change']))) ? true : false;
|
||||
$s_display_results = (!$s_can_vote || ($s_can_vote && sizeof($cur_voted_id)) || $view == 'viewpoll') ? true : false;
|
||||
$s_display_results = (!$s_can_vote || ($s_can_vote && count($cur_voted_id)) || $view == 'viewpoll') ? true : false;
|
||||
|
||||
/**
|
||||
* Event to manipulate the poll data
|
||||
@@ -889,16 +945,16 @@ if (!empty($topic_data['poll_start']))
|
||||
if ($update && $s_can_vote)
|
||||
{
|
||||
|
||||
if (!sizeof($voted_id) || sizeof($voted_id) > $topic_data['poll_max_options'] || in_array(VOTE_CONVERTED, $cur_voted_id) || !check_form_key('posting'))
|
||||
if (!count($voted_id) || count($voted_id) > $topic_data['poll_max_options'] || in_array(VOTE_CONVERTED, $cur_voted_id) || !check_form_key('posting'))
|
||||
{
|
||||
$redirect_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id" . (($start == 0) ? '' : "&start=$start"));
|
||||
|
||||
meta_refresh(5, $redirect_url);
|
||||
if (!sizeof($voted_id))
|
||||
if (!count($voted_id))
|
||||
{
|
||||
$message = 'NO_VOTE_OPTION';
|
||||
}
|
||||
else if (sizeof($voted_id) > $topic_data['poll_max_options'])
|
||||
else if (count($voted_id) > $topic_data['poll_max_options'])
|
||||
{
|
||||
$message = 'TOO_MANY_VOTE_OPTIONS';
|
||||
}
|
||||
@@ -992,8 +1048,31 @@ if (!empty($topic_data['poll_start']))
|
||||
'user_votes' => array_flip($valid_user_votes),
|
||||
'vote_counts' => $vote_counts,
|
||||
'total_votes' => array_sum($vote_counts),
|
||||
'can_vote' => !sizeof($valid_user_votes) || ($auth->acl_get('f_votechg', $forum_id) && $topic_data['poll_vote_change']),
|
||||
'can_vote' => !count($valid_user_votes) || ($auth->acl_get('f_votechg', $forum_id) && $topic_data['poll_vote_change']),
|
||||
);
|
||||
|
||||
/**
|
||||
* Event to manipulate the poll data sent by AJAX response
|
||||
*
|
||||
* @event core.viewtopic_modify_poll_ajax_data
|
||||
* @var array data JSON response data
|
||||
* @var array valid_user_votes Valid user votes
|
||||
* @var array vote_counts Vote counts
|
||||
* @var int forum_id Forum ID
|
||||
* @var array topic_data Topic data
|
||||
* @var array poll_info Array with the poll information
|
||||
* @since 3.2.4-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'data',
|
||||
'valid_user_votes',
|
||||
'vote_counts',
|
||||
'forum_id',
|
||||
'topic_data',
|
||||
'poll_info',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.viewtopic_modify_poll_ajax_data', compact($vars)));
|
||||
|
||||
$json_response = new \phpbb\json_response();
|
||||
$json_response->send($data);
|
||||
}
|
||||
@@ -1012,7 +1091,7 @@ if (!empty($topic_data['poll_start']))
|
||||
|
||||
$parse_flags = ($poll_info[0]['bbcode_bitfield'] ? OPTION_FLAG_BBCODE : 0) | OPTION_FLAG_SMILIES;
|
||||
|
||||
for ($i = 0, $size = sizeof($poll_info); $i < $size; $i++)
|
||||
for ($i = 0, $size = count($poll_info); $i < $size; $i++)
|
||||
{
|
||||
$poll_info[$i]['poll_option_text'] = generate_text_for_display($poll_info[$i]['poll_option_text'], $poll_info[$i]['bbcode_uid'], $poll_option['bbcode_bitfield'], $parse_flags, true);
|
||||
}
|
||||
@@ -1144,6 +1223,29 @@ $sql = 'SELECT p.post_id
|
||||
" . (($join_user_sql[$sort_key]) ? 'AND u.user_id = p.poster_id': '') . "
|
||||
$limit_posts_time
|
||||
ORDER BY $sql_sort_order";
|
||||
|
||||
/**
|
||||
* Event to modify the SQL query that gets post_list
|
||||
*
|
||||
* @event core.viewtopic_modify_post_list_sql
|
||||
* @var string sql The SQL query to generate the post_list
|
||||
* @var int sql_limit The number of posts the query fetches
|
||||
* @var int sql_start The index the query starts to fetch from
|
||||
* @var string sort_key Key the posts are sorted by
|
||||
* @var string sort_days Display posts of previous x days
|
||||
* @var int forum_id Forum ID
|
||||
* @since 3.2.4-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'sql',
|
||||
'sql_limit',
|
||||
'sql_start',
|
||||
'sort_key',
|
||||
'sort_days',
|
||||
'forum_id',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.viewtopic_modify_post_list_sql', compact($vars)));
|
||||
|
||||
$result = $db->sql_query_limit($sql, $sql_limit, $sql_start);
|
||||
|
||||
$i = ($store_reverse) ? $sql_limit - 1 : 0;
|
||||
@@ -1154,7 +1256,7 @@ while ($row = $db->sql_fetchrow($result))
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
if (!sizeof($post_list))
|
||||
if (!count($post_list))
|
||||
{
|
||||
if ($sort_days)
|
||||
{
|
||||
@@ -1478,7 +1580,7 @@ if ($config['load_cpf_viewtopic'])
|
||||
}
|
||||
|
||||
// Generate online information for user
|
||||
if ($config['load_onlinetrack'] && sizeof($id_cache))
|
||||
if ($config['load_onlinetrack'] && count($id_cache))
|
||||
{
|
||||
$sql = 'SELECT session_user_id, MAX(session_time) as online_time, MIN(session_viewonline) AS viewonline
|
||||
FROM ' . SESSIONS_TABLE . '
|
||||
@@ -1496,7 +1598,7 @@ if ($config['load_onlinetrack'] && sizeof($id_cache))
|
||||
unset($id_cache);
|
||||
|
||||
// Pull attachment data
|
||||
if (sizeof($attach_list))
|
||||
if (count($attach_list))
|
||||
{
|
||||
if ($auth->acl_get('u_download') && $auth->acl_get('f_download', $forum_id))
|
||||
{
|
||||
@@ -1514,7 +1616,7 @@ if (sizeof($attach_list))
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
// No attachments exist, but post table thinks they do so go ahead and reset post_attach flags
|
||||
if (!sizeof($attachments))
|
||||
if (!count($attachments))
|
||||
{
|
||||
$sql = 'UPDATE ' . POSTS_TABLE . '
|
||||
SET post_attachment = 0
|
||||
@@ -1522,7 +1624,7 @@ if (sizeof($attach_list))
|
||||
$db->sql_query($sql);
|
||||
|
||||
// We need to update the topic indicator too if the complete topic is now without an attachment
|
||||
if (sizeof($rowset) != $total_posts)
|
||||
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_msg_id as post_id
|
||||
@@ -1572,19 +1674,27 @@ if (sizeof($attach_list))
|
||||
}
|
||||
}
|
||||
|
||||
// Get the list of users who can receive private messages
|
||||
$can_receive_pm_list = $auth->acl_get_list(array_keys($user_cache), 'u_readpm');
|
||||
$can_receive_pm_list = (empty($can_receive_pm_list) || !isset($can_receive_pm_list[0]['u_readpm'])) ? array() : $can_receive_pm_list[0]['u_readpm'];
|
||||
if ($config['enable_accurate_pm_button'])
|
||||
{
|
||||
// Get the list of users who can receive private messages
|
||||
$can_receive_pm_list = $auth->acl_get_list(array_keys($user_cache), 'u_readpm');
|
||||
$can_receive_pm_list = (empty($can_receive_pm_list) || !isset($can_receive_pm_list[0]['u_readpm'])) ? array() : $can_receive_pm_list[0]['u_readpm'];
|
||||
|
||||
// Get the list of permanently banned users
|
||||
$permanently_banned_users = phpbb_get_banned_user_ids(array_keys($user_cache), false);
|
||||
// Get the list of permanently banned users
|
||||
$permanently_banned_users = phpbb_get_banned_user_ids(array_keys($user_cache), false);
|
||||
}
|
||||
else
|
||||
{
|
||||
$can_receive_pm_list = array_keys($user_cache);
|
||||
$permanently_banned_users = [];
|
||||
}
|
||||
|
||||
$i_total = sizeof($rowset) - 1;
|
||||
$i_total = count($rowset) - 1;
|
||||
$prev_post_id = '';
|
||||
|
||||
$template->assign_vars(array(
|
||||
'S_HAS_ATTACHMENTS' => $topic_data['topic_attachment'],
|
||||
'S_NUM_POSTS' => sizeof($post_list))
|
||||
'S_NUM_POSTS' => count($post_list))
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -1629,7 +1739,7 @@ extract($phpbb_dispatcher->trigger_event('core.viewtopic_modify_post_data', comp
|
||||
|
||||
// Output the posts
|
||||
$first_unread = $post_unread = false;
|
||||
for ($i = 0, $end = sizeof($post_list); $i < $end; ++$i)
|
||||
for ($i = 0, $end = count($post_list); $i < $end; ++$i)
|
||||
{
|
||||
// A non-existing rowset only happens if there was no user present for the entered poster_id
|
||||
// This could be a broken posts table.
|
||||
@@ -1672,7 +1782,7 @@ for ($i = 0, $end = sizeof($post_list); $i < $end; ++$i)
|
||||
if (($row['post_edit_count'] && $config['display_last_edited']) || $row['post_edit_reason'])
|
||||
{
|
||||
// Get usernames for all following posts if not already stored
|
||||
if (!sizeof($post_edit_list) && ($row['post_edit_reason'] || ($row['post_edit_user'] && !isset($user_cache[$row['post_edit_user']]))))
|
||||
if (!count($post_edit_list) && ($row['post_edit_reason'] || ($row['post_edit_user'] && !isset($user_cache[$row['post_edit_user']]))))
|
||||
{
|
||||
// Remove all post_ids already parsed (we do not have to check them)
|
||||
$post_storage_list = (!$store_reverse) ? array_slice($post_list, $i) : array_slice(array_reverse($post_list), $i);
|
||||
@@ -1736,7 +1846,7 @@ for ($i = 0, $end = sizeof($post_list); $i < $end; ++$i)
|
||||
if ($row['post_visibility'] == ITEM_DELETED && $row['post_delete_user'])
|
||||
{
|
||||
// Get usernames for all following posts if not already stored
|
||||
if (!sizeof($post_delete_list) && ($row['post_delete_reason'] || ($row['post_delete_user'] && !isset($user_cache[$row['post_delete_user']]))))
|
||||
if (!count($post_delete_list) && ($row['post_delete_reason'] || ($row['post_delete_user'] && !isset($user_cache[$row['post_delete_user']]))))
|
||||
{
|
||||
// Remove all post_ids already parsed (we do not have to check them)
|
||||
$post_storage_list = (!$store_reverse) ? array_slice($post_list, $i) : array_slice(array_reverse($post_list), $i);
|
||||
@@ -1980,7 +2090,7 @@ for ($i = 0, $end = sizeof($post_list); $i < $end; ++$i)
|
||||
|
||||
|
||||
'S_HAS_ATTACHMENTS' => (!empty($attachments[$row['post_id']])) ? true : false,
|
||||
'S_MULTIPLE_ATTACHMENTS' => !empty($attachments[$row['post_id']]) && sizeof($attachments[$row['post_id']]) > 1,
|
||||
'S_MULTIPLE_ATTACHMENTS' => !empty($attachments[$row['post_id']]) && count($attachments[$row['post_id']]) > 1,
|
||||
'S_POST_UNAPPROVED' => ($row['post_visibility'] == ITEM_UNAPPROVED || $row['post_visibility'] == ITEM_REAPPROVE) ? true : false,
|
||||
'S_POST_DELETED' => ($row['post_visibility'] == ITEM_DELETED) ? true : false,
|
||||
'L_POST_DELETED_MESSAGE' => $l_deleted_message,
|
||||
@@ -1989,8 +2099,9 @@ for ($i = 0, $end = sizeof($post_list); $i < $end; ++$i)
|
||||
'S_FRIEND' => ($row['friend']) ? true : false,
|
||||
'S_UNREAD_POST' => $post_unread,
|
||||
'S_FIRST_UNREAD' => $s_first_unread,
|
||||
'S_CUSTOM_FIELDS' => (isset($cp_row['row']) && sizeof($cp_row['row'])) ? true : false,
|
||||
'S_CUSTOM_FIELDS' => (isset($cp_row['row']) && count($cp_row['row'])) ? true : false,
|
||||
'S_TOPIC_POSTER' => ($topic_data['topic_poster'] == $poster_id) ? true : false,
|
||||
'S_FIRST_POST' => ($topic_data['topic_first_post_id'] == $row['post_id']) ? true : false,
|
||||
|
||||
'S_IGNORE_POST' => ($row['foe']) ? true : false,
|
||||
'L_IGNORE_POST' => ($row['foe']) ? sprintf($user->lang['POST_BY_FOE'], get_username_string('full', $poster_id, $row['username'], $row['user_colour'], $row['post_username'])) : '',
|
||||
@@ -2045,7 +2156,7 @@ for ($i = 0, $end = sizeof($post_list); $i < $end; ++$i)
|
||||
|
||||
$i = $current_row_number;
|
||||
|
||||
if (isset($cp_row['row']) && sizeof($cp_row['row']))
|
||||
if (isset($cp_row['row']) && count($cp_row['row']))
|
||||
{
|
||||
$post_row = array_merge($post_row, $cp_row['row']);
|
||||
}
|
||||
@@ -2057,7 +2168,7 @@ for ($i = 0, $end = sizeof($post_list); $i < $end; ++$i)
|
||||
array(
|
||||
'ID' => 'pm',
|
||||
'NAME' => $user->lang['SEND_PRIVATE_MESSAGE'],
|
||||
'U_CONTACT' => $u_pm,
|
||||
'U_CONTACT' => $post_row['U_PM'],
|
||||
),
|
||||
array(
|
||||
'ID' => 'email',
|
||||
@@ -2158,7 +2269,7 @@ if (isset($user->data['session_page']) && !$user->data['is_bot'] && (strpos($use
|
||||
$db->sql_query($sql);
|
||||
|
||||
// Update the attachment download counts
|
||||
if (sizeof($update_count))
|
||||
if (count($update_count))
|
||||
{
|
||||
$sql = 'UPDATE ' . ATTACHMENTS_TABLE . '
|
||||
SET download_count = download_count + 1
|
||||
@@ -2237,7 +2348,6 @@ if ($s_can_vote || $s_quick_reply)
|
||||
|
||||
$qr_hidden_fields = array(
|
||||
'topic_cur_post_id' => (int) $topic_data['topic_last_post_id'],
|
||||
'lastclick' => (int) time(),
|
||||
'topic_id' => (int) $topic_data['topic_id'],
|
||||
'forum_id' => (int) $forum_id,
|
||||
);
|
||||
|
Reference in New Issue
Block a user