diff options
Diffstat (limited to 'phpBB/includes')
-rw-r--r-- | phpBB/includes/ucp/ucp_main.php | 66 |
1 files changed, 38 insertions, 28 deletions
diff --git a/phpBB/includes/ucp/ucp_main.php b/phpBB/includes/ucp/ucp_main.php index e65e7f1cc4..898103043c 100644 --- a/phpBB/includes/ucp/ucp_main.php +++ b/phpBB/includes/ucp/ucp_main.php @@ -772,42 +772,52 @@ class ucp_main $forum_read_ary = $auth->acl_getf('!f_read'); $forum_ary = array(); - foreach ($post_count_ary as $forum_id => $allowed) + + // Do not include those forums the user is not having read access to... + foreach ($forum_read_ary as $forum_id => $not_allowed) { - if ($allowed['f_postcount'] || $forum_read_ary[$forum_id]['f_read']) + if ($not_allowed['f_read']) { - $forum_ary[] = $forum_id; + $forum_ary[] = (int) $forum_id; } } - $post_count_sql = (sizeof($forum_ary)) ? 'AND f.forum_id NOT IN (' . implode(', ', $forum_ary) . ')' : ''; - - if ($post_count_sql) + // Now do not include those forums where the posts do not count... + foreach ($post_count_ary as $forum_id => $not_counted) { - $sql = 'SELECT f.forum_id, f.forum_name, COUNT(post_id) AS num_posts - FROM ' . POSTS_TABLE . ' p, ' . FORUMS_TABLE . ' f - WHERE p.poster_id = ' . $user->data['user_id'] . " - AND f.forum_id = p.forum_id - $post_count_sql - GROUP BY f.forum_id, f.forum_name - ORDER BY num_posts DESC"; - $result = $db->sql_query_limit($sql, 1); - $active_f_row = $db->sql_fetchrow($result); - $db->sql_freeresult($result); - - $sql = 'SELECT t.topic_id, t.topic_title, COUNT(p.post_id) AS num_posts - FROM ' . POSTS_TABLE . ' p, ' . TOPICS_TABLE . ' t, ' . FORUMS_TABLE . ' f - WHERE p.poster_id = ' . $user->data['user_id'] . " - AND t.topic_id = p.topic_id - AND f.forum_id = t.forum_id - $post_count_sql - GROUP BY t.topic_id, t.topic_title - ORDER BY num_posts DESC"; - $result = $db->sql_query_limit($sql, 1); - $active_t_row = $db->sql_fetchrow($result); - $db->sql_freeresult($result); + if ($not_counted['f_postcount']) + { + $forum_ary[] = (int) $forum_id; + } } + $forum_ary = array_unique($forum_ary); + + $post_count_sql = (sizeof($forum_ary)) ? 'AND f.forum_id NOT IN (' . implode(', ', $forum_ary) . ')' : ''; + + $sql = 'SELECT f.forum_id, f.forum_name, COUNT(post_id) AS num_posts + FROM ' . POSTS_TABLE . ' p, ' . FORUMS_TABLE . ' f + WHERE p.poster_id = ' . $user->data['user_id'] . " + AND f.forum_id = p.forum_id + $post_count_sql + GROUP BY f.forum_id, f.forum_name + ORDER BY num_posts DESC"; + $result = $db->sql_query_limit($sql, 1); + $active_f_row = $db->sql_fetchrow($result); + $db->sql_freeresult($result); + + $sql = 'SELECT t.topic_id, t.topic_title, COUNT(p.post_id) AS num_posts + FROM ' . POSTS_TABLE . ' p, ' . TOPICS_TABLE . ' t, ' . FORUMS_TABLE . ' f + WHERE p.poster_id = ' . $user->data['user_id'] . " + AND t.topic_id = p.topic_id + AND f.forum_id = t.forum_id + $post_count_sql + GROUP BY t.topic_id, t.topic_title + ORDER BY num_posts DESC"; + $result = $db->sql_query_limit($sql, 1); + $active_t_row = $db->sql_fetchrow($result); + $db->sql_freeresult($result); + $active_f_name = $active_f_id = $active_f_count = $active_f_pct = ''; if (!empty($active_f_row['num_posts'])) { |