mirror of
https://github.com/phpbb/phpbb.git
synced 2025-07-30 21:40:43 +02:00
These changes should let olympus scale a little bit better.
i haven't adjusted the schemas but added the details to create_schema_files - david is able to build them then in line with his changes. :) git-svn-id: file:///svn/phpbb/trunk@6411 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
@@ -409,7 +409,7 @@ class dbal
|
||||
{
|
||||
global $cache, $starttime, $phpbb_root_path, $user;
|
||||
|
||||
if (empty($_GET['explain']))
|
||||
if (empty($_REQUEST['explain']))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
@@ -1388,6 +1388,8 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
|
||||
break;
|
||||
}
|
||||
|
||||
$forum_ids = array_values($forum_ids);
|
||||
|
||||
// 2: Get topic counts for each forum
|
||||
$sql = 'SELECT forum_id, topic_approved, COUNT(topic_id) AS forum_topics
|
||||
FROM ' . TOPICS_TABLE . '
|
||||
@@ -1408,16 +1410,27 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
// 3: Get post count and last_post_id for each forum
|
||||
$sql = 'SELECT forum_id, COUNT(post_id) AS forum_posts, MAX(post_id) AS last_post_id
|
||||
FROM ' . POSTS_TABLE . '
|
||||
WHERE ' . $db->sql_in_set('forum_id', $forum_ids) . '
|
||||
AND post_approved = 1
|
||||
GROUP BY forum_id';
|
||||
if (sizeof($forum_ids) == 1)
|
||||
{
|
||||
$sql = 'SELECT COUNT(post_id) AS forum_posts, MAX(post_id) AS last_post_id
|
||||
FROM ' . POSTS_TABLE . '
|
||||
WHERE ' . $db->sql_in_set('forum_id', $forum_ids) . '
|
||||
AND post_approved = 1';
|
||||
}
|
||||
else
|
||||
{
|
||||
$sql = 'SELECT forum_id, COUNT(post_id) AS forum_posts, MAX(post_id) AS last_post_id
|
||||
FROM ' . POSTS_TABLE . '
|
||||
WHERE ' . $db->sql_in_set('forum_id', $forum_ids) . '
|
||||
AND post_approved = 1
|
||||
GROUP BY forum_id';
|
||||
}
|
||||
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
$forum_id = (int) $row['forum_id'];
|
||||
$forum_id = (sizeof($forum_ids) == 1) ? (int) $forum_ids[0] : (int) $row['forum_id'];
|
||||
|
||||
$forum_data[$forum_id]['posts'] = (int) $row['forum_posts'];
|
||||
$forum_data[$forum_id]['last_post_id'] = (int) $row['last_post_id'];
|
||||
@@ -1519,6 +1532,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
|
||||
$topic_id = (int) $row['topic_id'];
|
||||
$topic_data[$topic_id] = $row;
|
||||
$topic_data[$topic_id]['replies_real'] = -1;
|
||||
$topic_data[$topic_id]['replies'] = 0;
|
||||
$topic_data[$topic_id]['first_post_id'] = 0;
|
||||
$topic_data[$topic_id]['last_post_id'] = 0;
|
||||
unset($topic_data[$topic_id]['topic_id']);
|
||||
@@ -1538,19 +1552,8 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
|
||||
// NOTE: 't.post_approved' in the GROUP BY is causing a major slowdown.
|
||||
$sql = 'SELECT t.topic_id, t.post_approved, COUNT(t.post_id) AS total_posts, MIN(t.post_id) AS first_post_id, MAX(t.post_id) AS last_post_id
|
||||
FROM ' . POSTS_TABLE . " t
|
||||
$where_sql";
|
||||
|
||||
switch (SQL_LAYER)
|
||||
{
|
||||
case 'mssql':
|
||||
case 'mssql_odbc':
|
||||
$sql .= ' GROUP BY t.topic_id, t.post_approved';
|
||||
break;
|
||||
|
||||
default:
|
||||
$sql .= ' GROUP BY t.topic_id';
|
||||
break;
|
||||
}
|
||||
$where_sql
|
||||
GROUP BY t.topic_id, t.post_approved";
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
@@ -1755,7 +1758,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
|
||||
// batch processing.
|
||||
if ($resync_parents && sizeof($resync_forums) && $where_type != 'range')
|
||||
{
|
||||
sync('forum', 'forum_id', $resync_forums, true);
|
||||
sync('forum', 'forum_id', array_values($resync_forums), true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@@ -1018,6 +1018,12 @@ function display_user_activity(&$userdata)
|
||||
global $auth, $template, $db, $user;
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
// Do not display user activity for users having more than 5000 posts...
|
||||
if ($userdata['user_posts'] > 5000)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$forum_ary = array();
|
||||
|
||||
// Do not include those forums the user is not having read access to...
|
||||
@@ -1070,7 +1076,7 @@ function display_user_activity(&$userdata)
|
||||
}
|
||||
|
||||
// Obtain active topic
|
||||
$sql = 'SELECT topic_id, COUNT(post_id) AS num_posts
|
||||
$sql = 'SELECT topic_id, COUNT(post_id) AS num_posts
|
||||
FROM ' . POSTS_TABLE . '
|
||||
WHERE poster_id = ' . $userdata['user_id'] . "
|
||||
AND post_postcount = 1
|
||||
@@ -1133,7 +1139,8 @@ function display_user_activity(&$userdata)
|
||||
'ACTIVE_TOPIC_POSTS' => ($active_t_count == 1) ? sprintf($user->lang['USER_POST'], 1) : sprintf($user->lang['USER_POSTS'], $active_t_count),
|
||||
'ACTIVE_TOPIC_PCT' => sprintf($user->lang['POST_PCT_ACTIVE'], $active_t_pct),
|
||||
'U_ACTIVE_FORUM' => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $active_f_id),
|
||||
'U_ACTIVE_TOPIC' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", 't=' . $active_t_id))
|
||||
'U_ACTIVE_TOPIC' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", 't=' . $active_t_id),
|
||||
'S_SHOW_ACTIVITY' => true)
|
||||
);
|
||||
}
|
||||
|
||||
|
@@ -117,15 +117,15 @@ function update_post_information($type, $ids, $return_update_sql = false)
|
||||
{
|
||||
$sql = 'SELECT MAX(post_id) as last_post_id
|
||||
FROM ' . POSTS_TABLE . '
|
||||
WHERE post_approved = 1
|
||||
AND ' . $db->sql_in_set($type . '_id', $ids);
|
||||
WHERE ' . $db->sql_in_set($type . '_id', $ids) . '
|
||||
AND post_approved = 1';
|
||||
}
|
||||
else
|
||||
{
|
||||
$sql = 'SELECT ' . $type . '_id, MAX(post_id) as last_post_id
|
||||
FROM ' . POSTS_TABLE . '
|
||||
WHERE post_approved = 1
|
||||
AND ' . $db->sql_in_set($type . '_id', $ids) . "
|
||||
WHERE ' . $db->sql_in_set($type . '_id', $ids) . "
|
||||
AND post_approved = 1
|
||||
GROUP BY {$type}_id";
|
||||
}
|
||||
$result = $db->sql_query($sql);
|
||||
|
@@ -611,13 +611,12 @@ function place_pm_into_folder(&$global_privmsgs_rules, $release = false)
|
||||
}
|
||||
else if ($full_folder_action == FULL_FOLDER_DELETE)
|
||||
{
|
||||
// Delete some messages ;)
|
||||
$sql = 'SELECT t.msg_id
|
||||
FROM ' . PRIVMSGS_TO_TABLE . ' t, ' . PRIVMSGS_TABLE . " p
|
||||
WHERE t.msg_id = p.msg_id
|
||||
AND t.user_id = $user_id
|
||||
AND t.folder_id = $dest_folder
|
||||
ORDER BY p.message_time ASC";
|
||||
// Delete some messages. NOTE: Ordered by msg_id here instead of message_time!
|
||||
$sql = 'SELECT msg_id
|
||||
FROM ' . PRIVMSGS_TO_TABLE . "
|
||||
WHERE user_id = $user_id
|
||||
AND folder_id = $dest_folder
|
||||
ORDER BY msg_id ASC";
|
||||
$result = $db->sql_query_limit($sql, (($folder[$dest_folder] + sizeof($msg_ary)) - $user->data['message_limit']));
|
||||
|
||||
$delete_ids = array();
|
||||
|
@@ -191,7 +191,7 @@ function mcp_resync_topics($topic_ids)
|
||||
|
||||
$redirect = request_var('redirect', $user->data['session_page']);
|
||||
|
||||
meta_refresh(2, $redirect);
|
||||
meta_refresh(3, $redirect);
|
||||
trigger_error($msg . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $redirect . '">', '</a>'));
|
||||
|
||||
return;
|
||||
|
@@ -89,7 +89,7 @@ function mcp_post_details($id, $mode, $action)
|
||||
}
|
||||
|
||||
// Set some vars
|
||||
$users_ary = array();
|
||||
$users_ary = $usernames_ary = array();
|
||||
$post_id = $post_info['post_id'];
|
||||
$poster = ($post_info['user_colour']) ? '<span style="color:#' . $post_info['user_colour'] . '">' . $post_info['username'] . '</span>' : $post_info['username'];
|
||||
|
||||
@@ -217,69 +217,83 @@ function mcp_post_details($id, $mode, $action)
|
||||
}
|
||||
|
||||
// Get other users who've posted under this IP
|
||||
$sql = 'SELECT poster_id, COUNT(poster_id) as postings
|
||||
FROM ' . POSTS_TABLE . "
|
||||
WHERE poster_ip = '" . $db->sql_escape($post_info['poster_ip']) . "'
|
||||
GROUP BY poster_id";
|
||||
|
||||
// Firebird does not support ORDER BY on aliased columns
|
||||
// MySQL does not support ORDER BY on functions
|
||||
switch (SQL_LAYER)
|
||||
{
|
||||
case 'firebird':
|
||||
$sql = 'SELECT u.user_id, u.username, COUNT(*) as postings
|
||||
FROM ' . USERS_TABLE . ' u, ' . POSTS_TABLE . " p
|
||||
WHERE p.poster_id = u.user_id
|
||||
AND p.poster_ip = '" . $db->sql_escape($post_info['poster_ip']) . "'
|
||||
AND p.poster_id <> {$post_info['user_id']}
|
||||
GROUP BY u.user_id, u.username
|
||||
ORDER BY COUNT(*) DESC";
|
||||
$sql .= ' ORDER BY COUNT(poster_id) DESC';
|
||||
break;
|
||||
|
||||
default:
|
||||
$sql = 'SELECT u.user_id, u.username, COUNT(*) as postings
|
||||
FROM ' . USERS_TABLE . ' u, ' . POSTS_TABLE . " p
|
||||
WHERE p.poster_id = u.user_id
|
||||
AND p.poster_ip = '" . $db->sql_escape($post_info['poster_ip']) . "'
|
||||
AND p.poster_id <> {$post_info['user_id']}
|
||||
GROUP BY u.user_id, u.username
|
||||
ORDER BY postings DESC";
|
||||
$sql .= ' ORDER BY postings DESC';
|
||||
break;
|
||||
}
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
// Fill the user select list with users who have posted
|
||||
// under this IP
|
||||
if ($row['user_id'] != $post_info['poster_id'])
|
||||
// Fill the user select list with users who have posted under this IP
|
||||
if ($row['poster_id'] != $post_info['poster_id'])
|
||||
{
|
||||
$users_ary[strtolower($row['username'])] = $row;
|
||||
$users_ary[$row['poster_id']] = $row;
|
||||
}
|
||||
|
||||
$template->assign_block_vars('userrow', array(
|
||||
'USERNAME' => ($row['user_id'] == ANONYMOUS) ? $user->lang['GUEST'] : $row['username'],
|
||||
'NUM_POSTS' => $row['postings'],
|
||||
'L_POST_S' => ($row['postings'] == 1) ? $user->lang['POST'] : $user->lang['POSTS'],
|
||||
|
||||
'U_PROFILE' => ($row['user_id'] == ANONYMOUS) ? '' : append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&u=' . $row['user_id']),
|
||||
'U_SEARCHPOSTS' => append_sid("{$phpbb_root_path}search.$phpEx", 'author=' . urlencode($row['username']) . '&sr=topics'))
|
||||
);
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
if (sizeof($users_ary))
|
||||
{
|
||||
// Get the usernames
|
||||
$sql = 'SELECT user_id, username
|
||||
FROM ' . USERS_TABLE . '
|
||||
WHERE ' . $db->sql_in_set('user_id', array_keys($users_ary));
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
$users_ary[$row['user_id']]['username'] = strtolower($row['username']);
|
||||
$usernames_ary[strtolower($row['username'])] = $users_ary[$row['user_id']];
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
foreach ($users_ary as $user_id => $user_row)
|
||||
{
|
||||
$template->assign_block_vars('userrow', array(
|
||||
'USERNAME' => ($user_id == ANONYMOUS) ? $user->lang['GUEST'] : $user_row['username'],
|
||||
'NUM_POSTS' => $user_row['postings'],
|
||||
'L_POST_S' => ($user_row['postings'] == 1) ? $user->lang['POST'] : $user->lang['POSTS'],
|
||||
|
||||
'U_PROFILE' => ($user_id == ANONYMOUS) ? '' : append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&u=' . $user_id),
|
||||
'U_SEARCHPOSTS' => append_sid("{$phpbb_root_path}search.$phpEx", 'author=' . urlencode($user_row['username']) . '&sr=topics'))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Get other IP's this user has posted under
|
||||
|
||||
// A compound index on poster_id, poster_ip (posts table) would help speed up this query a lot,
|
||||
// but the extra size is only valuable if there are persons having more than a thousands posts.
|
||||
// This is better left to the really really big forums.
|
||||
|
||||
// Firebird does not support ORDER BY on aliased columns
|
||||
// MySQL does not support ORDER BY on functions
|
||||
switch (SQL_LAYER)
|
||||
{
|
||||
case 'firebird':
|
||||
$sql = 'SELECT poster_ip, COUNT(*) AS postings
|
||||
$sql = 'SELECT poster_ip, COUNT(poster_ip) AS postings
|
||||
FROM ' . POSTS_TABLE . '
|
||||
WHERE poster_id = ' . $post_info['poster_id'] . '
|
||||
GROUP BY poster_ip
|
||||
ORDER BY COUNT(*) DESC';
|
||||
ORDER BY COUNT(poster_ip) DESC';
|
||||
break;
|
||||
|
||||
default:
|
||||
$sql = 'SELECT poster_ip, COUNT(*) AS postings
|
||||
$sql = 'SELECT poster_ip, COUNT(poster_ip) AS postings
|
||||
FROM ' . POSTS_TABLE . '
|
||||
WHERE poster_id = ' . $post_info['poster_id'] . '
|
||||
GROUP BY poster_ip
|
||||
@@ -305,12 +319,17 @@ function mcp_post_details($id, $mode, $action)
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
$user_select = '';
|
||||
ksort($users_ary);
|
||||
|
||||
foreach ($users_ary as $row)
|
||||
if (sizeof($usernames_ary))
|
||||
{
|
||||
$user_select .= '<option value="' . $row['user_id'] . '">' . $row['username'] . "</option>\n";
|
||||
ksort($usernames_ary);
|
||||
|
||||
foreach ($usernames_ary as $row)
|
||||
{
|
||||
$user_select .= '<option value="' . $row['poster_id'] . '">' . $row['username'] . "</option>\n";
|
||||
}
|
||||
}
|
||||
|
||||
$template->assign_var('S_USER_SELECT', $user_select);
|
||||
}
|
||||
|
||||
|
@@ -286,8 +286,8 @@ class mcp_queue
|
||||
{
|
||||
$sql = 'SELECT t.forum_id, t.topic_id, t.topic_title, t.topic_title AS post_subject, t.topic_time AS post_time, t.topic_poster AS poster_id, t.topic_first_post_id AS post_id, t.topic_first_poster_name AS username
|
||||
FROM ' . TOPICS_TABLE . " t
|
||||
WHERE topic_approved = 0
|
||||
AND forum_id IN (0, $forum_list)
|
||||
WHERE forum_id IN (0, $forum_list)
|
||||
AND topic_approved = 0
|
||||
$limit_time_sql
|
||||
ORDER BY $sort_order_sql";
|
||||
$result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
|
||||
@@ -412,6 +412,8 @@ function approve_post($post_id_list, $mode)
|
||||
$total_topics = $total_posts = $forum_topics = $forum_posts = 0;
|
||||
$topic_approve_sql = $topic_replies_sql = $post_approve_sql = $topic_id_list = array();
|
||||
|
||||
$update_forum_information = false;
|
||||
|
||||
foreach ($post_info as $post_id => $post_data)
|
||||
{
|
||||
$topic_id_list[$post_data['topic_id']] = 1;
|
||||
@@ -446,6 +448,12 @@ function approve_post($post_id_list, $mode)
|
||||
}
|
||||
|
||||
$post_approve_sql[] = $post_id;
|
||||
|
||||
// If the post is newer than the last post information stored we need to update the forum information
|
||||
if ($post_data['post_time'] >= $post_data['forum_last_post_time'])
|
||||
{
|
||||
$update_forum_information = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (sizeof($topic_approve_sql))
|
||||
@@ -499,7 +507,11 @@ function approve_post($post_id_list, $mode)
|
||||
unset($topic_approve_sql, $topic_replies_sql, $post_approve_sql);
|
||||
|
||||
update_post_information('topic', array_keys($topic_id_list));
|
||||
update_post_information('forum', $forum_id);
|
||||
|
||||
if ($update_forum_information)
|
||||
{
|
||||
update_post_information('forum', $forum_id);
|
||||
}
|
||||
unset($topic_id_list);
|
||||
|
||||
$messenger = new messenger();
|
||||
|
@@ -177,7 +177,6 @@ class ucp_main
|
||||
'INTERESTS' => (!empty($row['user_interests'])) ? $row['user_interests'] : '',
|
||||
|
||||
// 'S_GROUP_OPTIONS' => $group_options,
|
||||
'S_SHOW_ACTIVITY' => ($config['load_user_activity']) ? true : false,
|
||||
|
||||
'U_SEARCH_USER' => ($auth->acl_get('u_search')) ? append_sid("{$phpbb_root_path}search.$phpEx", 'author_id=' . $user->data['user_id'] . '&sr=posts') : '')
|
||||
);
|
||||
|
Reference in New Issue
Block a user