phpBB
Statistics
| Revision:

root / trunk / phpBB / mcp.php

History | View | Annotate | Download (23.4 kB)

1 3281 psotfx
<?php
2 7736 acydburn
/**
3 5114 acydburn
*
4 5114 acydburn
* @package mcp
5 7736 acydburn
* @copyright (c) 2005 phpBB Group
6 11653 git-gate
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
7 5114 acydburn
*
8 5114 acydburn
*/
9 3281 psotfx
10 5114 acydburn
/**
11 5114 acydburn
* @ignore
12 5114 acydburn
*/
13 3281 psotfx
define('IN_PHPBB', true);
14 7954 acydburn
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
15 4473 psotfx
$phpEx = substr(strrchr(__FILE__, '.'), 1);
16 6015 acydburn
include($phpbb_root_path . 'common.' . $phpEx);
17 6015 acydburn
include($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
18 6015 acydburn
require($phpbb_root_path . 'includes/functions_module.' . $phpEx);
19 3281 psotfx
20 4496 ludovic_arnaud
// Start session management
21 5247 acydburn
$user->session_begin();
22 4496 ludovic_arnaud
$auth->acl($user->data);
23 4844 acydburn
$user->setup('mcp');
24 3784 ludovic_arnaud
25 5305 grahamje
$module = new p_master();
26 4694 ludovic_arnaud
27 6104 acydburn
// Setting a variable to let the style designer know where he is...
28 6104 acydburn
$template->assign_var('S_IN_MCP', true);
29 6104 acydburn
30 4496 ludovic_arnaud
// Basic parameter data
31 5300 grahamje
$id = request_var('i', '');
32 4921 acydburn
33 10801 git-gate
$mode = request_var('mode', array(''));
34 10801 git-gate
$mode = sizeof($mode) ? array_shift($mode) : request_var('mode', '');
35 4937 acydburn
36 4921 acydburn
// Only Moderators can go beyond this point
37 5117 acydburn
if (!$user->data['is_registered'])
38 4694 ludovic_arnaud
{
39 5117 acydburn
        if ($user->data['is_bot'])
40 4921 acydburn
        {
41 6015 acydburn
                redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
42 4921 acydburn
        }
43 5117 acydburn
44 5117 acydburn
        login_box('', $user->lang['LOGIN_EXPLAIN_MCP']);
45 4694 ludovic_arnaud
}
46 4921 acydburn
47 4921 acydburn
$quickmod = (isset($_REQUEST['quickmod'])) ? true : false;
48 4921 acydburn
$action = request_var('action', '');
49 5152 acydburn
$action_ary = request_var('action', array('' => 0));
50 4921 acydburn
51 7539 davidmj
$forum_action = request_var('forum_action', '');
52 10801 git-gate
if ($forum_action !== '' && $request->variable('sort', false, false, phpbb_request_interface::POST))
53 7539 davidmj
{
54 7539 davidmj
        $action = $forum_action;
55 7539 davidmj
}
56 7539 davidmj
57 5152 acydburn
if (sizeof($action_ary))
58 3796 ludovic_arnaud
{
59 5526 naderman
        list($action, ) = each($action_ary);
60 4496 ludovic_arnaud
}
61 5152 acydburn
unset($action_ary);
62 3796 ludovic_arnaud
63 5460 grahamje
if ($mode == 'topic_logs')
64 5460 grahamje
{
65 5460 grahamje
        $id = 'logs';
66 5460 grahamje
        $quickmod = false;
67 5460 grahamje
}
68 5460 grahamje
69 5526 naderman
$post_id = request_var('p', 0);
70 5526 naderman
$topic_id = request_var('t', 0);
71 5526 naderman
$forum_id = request_var('f', 0);
72 9675 nickvergessen
$report_id = request_var('r', 0);
73 5526 naderman
$user_id = request_var('u', 0);
74 7920 acydburn
$username = utf8_normalize_nfc(request_var('username', '', true));
75 5526 naderman
76 5526 naderman
if ($post_id)
77 4923 acydburn
{
78 5526 naderman
        // We determine the topic and forum id here, to make sure the moderator really has moderative rights on this post
79 5526 naderman
        $sql = 'SELECT topic_id, forum_id
80 5526 naderman
                FROM ' . POSTS_TABLE . "
81 5526 naderman
                WHERE post_id = $post_id";
82 5526 naderman
        $result = $db->sql_query($sql);
83 5526 naderman
        $row = $db->sql_fetchrow($result);
84 5526 naderman
        $db->sql_freeresult($result);
85 5526 naderman
86 5526 naderman
        $topic_id = (int) $row['topic_id'];
87 11100 git-gate
        $forum_id = (int) $row['forum_id'];
88 4923 acydburn
}
89 7394 vic_delfant
else if ($topic_id)
90 4924 acydburn
{
91 5526 naderman
        $sql = 'SELECT forum_id
92 5526 naderman
                FROM ' . TOPICS_TABLE . "
93 5526 naderman
                WHERE topic_id = $topic_id";
94 5526 naderman
        $result = $db->sql_query($sql);
95 5526 naderman
        $row = $db->sql_fetchrow($result);
96 5526 naderman
        $db->sql_freeresult($result);
97 5526 naderman
98 5526 naderman
        $forum_id = (int) $row['forum_id'];
99 4924 acydburn
}
100 4924 acydburn
101 5584 naderman
// If the user doesn't have any moderator powers (globally or locally) he can't access the mcp
102 6028 naderman
if (!$auth->acl_getf_global('m_'))
103 4921 acydburn
{
104 5986 naderman
        // Except he is using one of the quickmod tools for users
105 5986 naderman
        $user_quickmod_actions = array(
106 5986 naderman
                'lock'                        => 'f_user_lock',
107 5986 naderman
                'make_sticky'        => 'f_sticky',
108 5986 naderman
                'make_announce'        => 'f_announce',
109 5986 naderman
                'make_global'        => 'f_announce',
110 6015 acydburn
                'make_normal'        => array('f_announce', 'f_sticky')
111 6015 acydburn
        );
112 5986 naderman
113 5986 naderman
        $allow_user = false;
114 5986 naderman
        if ($quickmod && isset($user_quickmod_actions[$action]) && $user->data['is_registered'] && $auth->acl_gets($user_quickmod_actions[$action], $forum_id))
115 5986 naderman
        {
116 5986 naderman
                $topic_info = get_topic_data(array($topic_id));
117 5986 naderman
                if ($topic_info[$topic_id]['topic_poster'] == $user->data['user_id'])
118 5986 naderman
                {
119 5986 naderman
                        $allow_user = true;
120 5986 naderman
                }
121 5986 naderman
        }
122 5986 naderman
123 5986 naderman
        if (!$allow_user)
124 5986 naderman
        {
125 7919 kellanved
                trigger_error('NOT_AUTHORISED');
126 5986 naderman
        }
127 5526 naderman
}
128 5024 acydburn
129 6045 naderman
// if the user cannot read the forum he tries to access then we won't allow mcp access either
130 6045 naderman
if ($forum_id && !$auth->acl_get('f_read', $forum_id))
131 6045 naderman
{
132 7919 kellanved
        trigger_error('NOT_AUTHORISED');
133 6045 naderman
}
134 6045 naderman
135 5585 acydburn
if ($forum_id)
136 5526 naderman
{
137 6015 acydburn
        $module->acl_forum_id = $forum_id;
138 5526 naderman
}
139 5024 acydburn
140 5526 naderman
// Instantiate module system and generate list of available modules
141 5526 naderman
$module->list_modules('mcp');
142 5024 acydburn
143 5526 naderman
if ($quickmod)
144 5526 naderman
{
145 5526 naderman
        $mode = 'quickmod';
146 5024 acydburn
147 5526 naderman
        switch ($action)
148 5432 grahamje
        {
149 5526 naderman
                case 'lock':
150 5526 naderman
                case 'unlock':
151 5526 naderman
                case 'lock_post':
152 5526 naderman
                case 'unlock_post':
153 5526 naderman
                case 'make_sticky':
154 5526 naderman
                case 'make_announce':
155 5526 naderman
                case 'make_global':
156 5526 naderman
                case 'make_normal':
157 5526 naderman
                case 'fork':
158 5526 naderman
                case 'move':
159 5526 naderman
                case 'delete_post':
160 5526 naderman
                case 'delete_topic':
161 5526 naderman
                        $module->load('mcp', 'main', 'quickmod');
162 8957 acydburn
                        return;
163 6015 acydburn
                break;
164 5432 grahamje
165 5526 naderman
                case 'topic_logs':
166 9414 acydburn
                        // Reset start parameter if we jumped from the quickmod dropdown
167 9414 acydburn
                        if (request_var('start', 0))
168 9414 acydburn
                        {
169 10801 git-gate
                                $request->overwrite('start', 0);
170 9414 acydburn
                        }
171 9414 acydburn
172 5526 naderman
                        $module->set_active('logs', 'topic_logs');
173 5526 naderman
                break;
174 4921 acydburn
175 7261 naderman
                case 'merge_topic':
176 7261 naderman
                        $module->set_active('main', 'forum_view');
177 7261 naderman
                break;
178 7261 naderman
179 5986 naderman
                case 'split':
180 5986 naderman
                case 'merge':
181 5986 naderman
                        $module->set_active('main', 'topic_view');
182 5986 naderman
                break;
183 5986 naderman
184 5526 naderman
                default:
185 8957 acydburn
                        trigger_error("$action not allowed as quickmod", E_USER_ERROR);
186 8957 acydburn
                break;
187 5526 naderman
        }
188 5526 naderman
}
189 5526 naderman
else
190 5526 naderman
{
191 5300 grahamje
        // Select the active module
192 5300 grahamje
        $module->set_active($id, $mode);
193 5526 naderman
}
194 5300 grahamje
195 5526 naderman
// Hide some of the options if we don't have the relevant information to use them
196 5526 naderman
if (!$post_id)
197 5526 naderman
{
198 5570 naderman
        $module->set_display('main', 'post_details', false);
199 5570 naderman
        $module->set_display('warn', 'warn_post', false);
200 7432 vic_delfant
}
201 5986 naderman
202 7432 vic_delfant
if ($mode == '' || $mode == 'unapproved_topics' || $mode == 'unapproved_posts')
203 7432 vic_delfant
{
204 7432 vic_delfant
        $module->set_display('queue', 'approve_details', false);
205 5526 naderman
}
206 5585 acydburn
207 9814 naderman
if ($mode == '' || $mode == 'reports' || $mode == 'reports_closed' || $mode == 'pm_reports' || $mode == 'pm_reports_closed' || $mode == 'pm_report_details')
208 7432 vic_delfant
{
209 7432 vic_delfant
        $module->set_display('reports', 'report_details', false);
210 7432 vic_delfant
}
211 7432 vic_delfant
212 9814 naderman
if ($mode == '' || $mode == 'reports' || $mode == 'reports_closed' || $mode == 'pm_reports' || $mode == 'pm_reports_closed' || $mode == 'report_details')
213 9814 naderman
{
214 9814 naderman
        $module->set_display('pm_reports', 'pm_report_details', false);
215 9814 naderman
}
216 9814 naderman
217 5526 naderman
if (!$topic_id)
218 5526 naderman
{
219 5570 naderman
        $module->set_display('main', 'topic_view', false);
220 5570 naderman
        $module->set_display('logs', 'topic_logs', false);
221 5526 naderman
}
222 5585 acydburn
223 5526 naderman
if (!$forum_id)
224 5526 naderman
{
225 5570 naderman
        $module->set_display('main', 'forum_view', false);
226 5570 naderman
        $module->set_display('logs', 'forum_logs', false);
227 5526 naderman
}
228 5585 acydburn
229 5526 naderman
if (!$user_id && $username == '')
230 5526 naderman
{
231 5570 naderman
        $module->set_display('notes', 'user_notes', false);
232 5570 naderman
        $module->set_display('warn', 'warn_user', false);
233 5526 naderman
}
234 5305 grahamje
235 5526 naderman
// Load and execute the relevant module
236 5526 naderman
$module->load_active();
237 5300 grahamje
238 5526 naderman
// Assign data to the template engine for the list of modules
239 6015 acydburn
$module->assign_tpl_vars(append_sid("{$phpbb_root_path}mcp.$phpEx"));
240 5300 grahamje
241 7007 acydburn
// Generate urls for letting the moderation control panel being accessed in different modes
242 7007 acydburn
$template->assign_vars(array(
243 7007 acydburn
        'U_MCP'                        => append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=main'),
244 7384 acydburn
        'U_MCP_FORUM'        => ($forum_id) ? append_sid("{$phpbb_root_path}mcp.$phpEx", "i=main&amp;mode=forum_view&amp;f=$forum_id") : '',
245 7384 acydburn
        'U_MCP_TOPIC'        => ($forum_id && $topic_id) ? append_sid("{$phpbb_root_path}mcp.$phpEx", "i=main&amp;mode=topic_view&amp;t=$topic_id") : '',
246 7384 acydburn
        'U_MCP_POST'        => ($forum_id && $topic_id && $post_id) ? append_sid("{$phpbb_root_path}mcp.$phpEx", "i=main&amp;mode=post_details&amp;t=$topic_id&amp;p=$post_id") : '',
247 7007 acydburn
));
248 7007 acydburn
249 6054 acydburn
// Generate the page, do not display/query online list
250 6054 acydburn
$module->display($module->get_page_title(), false);
251 5300 grahamje
252 5305 grahamje
/**
253 5305 grahamje
* Functions used to generate additional URL paramters
254 5305 grahamje
*/
255 6787 acydburn
function _module__url($mode, &$module_row)
256 5763 grahamje
{
257 5763 grahamje
        return extra_url();
258 5763 grahamje
}
259 5763 grahamje
260 7384 acydburn
function _module_notes_url($mode, &$module_row)
261 7384 acydburn
{
262 7384 acydburn
        if ($mode == 'front')
263 7384 acydburn
        {
264 7384 acydburn
                return '';
265 7384 acydburn
        }
266 7384 acydburn
267 7384 acydburn
        global $user_id;
268 7384 acydburn
        return ($user_id) ? "&amp;u=$user_id" : '';
269 7384 acydburn
}
270 7384 acydburn
271 7384 acydburn
function _module_warn_url($mode, &$module_row)
272 7384 acydburn
{
273 7384 acydburn
        if ($mode == 'front' || $mode == 'list')
274 7384 acydburn
        {
275 7663 davidmj
                global $forum_id;
276 7663 davidmj
277 7663 davidmj
                return ($forum_id) ? "&amp;f=$forum_id" : '';
278 7384 acydburn
        }
279 7384 acydburn
280 7384 acydburn
        if ($mode == 'warn_post')
281 7384 acydburn
        {
282 7384 acydburn
                global $forum_id, $post_id;
283 7384 acydburn
284 7384 acydburn
                $url_extra = ($forum_id) ? "&amp;f=$forum_id" : '';
285 7384 acydburn
                $url_extra .= ($post_id) ? "&amp;p=$post_id" : '';
286 7384 acydburn
287 7384 acydburn
                return $url_extra;
288 7384 acydburn
        }
289 7384 acydburn
        else
290 7384 acydburn
        {
291 7384 acydburn
                global $user_id;
292 7384 acydburn
293 7384 acydburn
                return ($user_id) ? "&amp;u=$user_id" : '';
294 7384 acydburn
        }
295 7384 acydburn
}
296 7384 acydburn
297 6787 acydburn
function _module_main_url($mode, &$module_row)
298 5305 grahamje
{
299 5305 grahamje
        return extra_url();
300 5305 grahamje
}
301 5325 acydburn
302 6787 acydburn
function _module_logs_url($mode, &$module_row)
303 6787 acydburn
{
304 6787 acydburn
        return extra_url();
305 6787 acydburn
}
306 6787 acydburn
307 6787 acydburn
function _module_ban_url($mode, &$module_row)
308 6787 acydburn
{
309 6787 acydburn
        return extra_url();
310 6787 acydburn
}
311 6787 acydburn
312 7007 acydburn
function _module_queue_url($mode, &$module_row)
313 7007 acydburn
{
314 7007 acydburn
        return extra_url();
315 7007 acydburn
}
316 7007 acydburn
317 7663 davidmj
function _module_reports_url($mode, &$module_row)
318 7663 davidmj
{
319 7663 davidmj
        return extra_url();
320 7663 davidmj
}
321 7663 davidmj
322 5305 grahamje
function extra_url()
323 5305 grahamje
{
324 9675 nickvergessen
        global $forum_id, $topic_id, $post_id, $report_id, $user_id;
325 6015 acydburn
326 5305 grahamje
        $url_extra = '';
327 5305 grahamje
        $url_extra .= ($forum_id) ? "&amp;f=$forum_id" : '';
328 5305 grahamje
        $url_extra .= ($topic_id) ? "&amp;t=$topic_id" : '';
329 5305 grahamje
        $url_extra .= ($post_id) ? "&amp;p=$post_id" : '';
330 6787 acydburn
        $url_extra .= ($user_id) ? "&amp;u=$user_id" : '';
331 9675 nickvergessen
        $url_extra .= ($report_id) ? "&amp;r=$report_id" : '';
332 6015 acydburn
333 5305 grahamje
        return $url_extra;
334 5305 grahamje
}
335 4924 acydburn
336 5114 acydburn
/**
337 5114 acydburn
* Get simple topic data
338 5114 acydburn
*/
339 6936 naderman
function get_topic_data($topic_ids, $acl_list = false, $read_tracking = false)
340 4924 acydburn
{
341 6936 naderman
        global $auth, $db, $config, $user;
342 5986 naderman
        static $rowset = array();
343 6015 acydburn
344 5986 naderman
        $topics = array();
345 4924 acydburn
346 5986 naderman
        if (!sizeof($topic_ids))
347 4924 acydburn
        {
348 4924 acydburn
                return array();
349 4924 acydburn
        }
350 4924 acydburn
351 6936 naderman
        // cache might not contain read tracking info, so we can't use it if read
352 6936 naderman
        // tracking information is requested
353 6936 naderman
        if (!$read_tracking)
354 6936 naderman
        {
355 6936 naderman
                $cache_topic_ids = array_intersect($topic_ids, array_keys($rowset));
356 6936 naderman
                $topic_ids = array_diff($topic_ids, array_keys($rowset));
357 6936 naderman
        }
358 6936 naderman
        else
359 6936 naderman
        {
360 6936 naderman
                $cache_topic_ids = array();
361 6936 naderman
        }
362 4970 psotfx
363 5986 naderman
        if (sizeof($topic_ids))
364 4924 acydburn
        {
365 6936 naderman
                $sql_array = array(
366 6936 naderman
                        'SELECT'        => 't.*, f.*',
367 6936 naderman
368 6936 naderman
                        'FROM'                => array(
369 6936 naderman
                                TOPICS_TABLE        => 't',
370 6936 naderman
                        ),
371 6936 naderman
372 6936 naderman
                        'LEFT_JOIN'        => array(
373 6936 naderman
                                array(
374 6936 naderman
                                        'FROM'        => array(FORUMS_TABLE => 'f'),
375 6936 naderman
                                        'ON'        => 'f.forum_id = t.forum_id'
376 6936 naderman
                                )
377 6936 naderman
                        ),
378 6936 naderman
379 6936 naderman
                        'WHERE'                => $db->sql_in_set('t.topic_id', $topic_ids)
380 6936 naderman
                );
381 6936 naderman
382 6936 naderman
                if ($read_tracking && $config['load_db_lastread'])
383 6936 naderman
                {
384 6936 naderman
                        $sql_array['SELECT'] .= ', tt.mark_time, ft.mark_time as forum_mark_time';
385 6936 naderman
386 6936 naderman
                        $sql_array['LEFT_JOIN'][] = array(
387 6936 naderman
                                'FROM'        => array(TOPICS_TRACK_TABLE => 'tt'),
388 6936 naderman
                                'ON'        => 'tt.user_id = ' . $user->data['user_id'] . ' AND t.topic_id = tt.topic_id'
389 6936 naderman
                        );
390 6936 naderman
391 6936 naderman
                        $sql_array['LEFT_JOIN'][] = array(
392 6936 naderman
                                'FROM'        => array(FORUMS_TRACK_TABLE => 'ft'),
393 6936 naderman
                                'ON'        => 'ft.user_id = ' . $user->data['user_id'] . ' AND t.forum_id = ft.forum_id'
394 6936 naderman
                        );
395 6936 naderman
                }
396 6936 naderman
397 6936 naderman
                $sql = $db->sql_build_query('SELECT', $sql_array);
398 5986 naderman
                $result = $db->sql_query($sql);
399 8655 acydburn
400 5986 naderman
                while ($row = $db->sql_fetchrow($result))
401 4924 acydburn
                {
402 5986 naderman
                        $rowset[$row['topic_id']] = $row;
403 5986 naderman
404 5986 naderman
                        if ($acl_list && !$auth->acl_gets($acl_list, $row['forum_id']))
405 5986 naderman
                        {
406 5986 naderman
                                continue;
407 5986 naderman
                        }
408 5986 naderman
409 5986 naderman
                        $topics[$row['topic_id']] = $row;
410 4924 acydburn
                }
411 6015 acydburn
                $db->sql_freeresult($result);
412 5986 naderman
        }
413 4924 acydburn
414 5986 naderman
        foreach ($cache_topic_ids as $id)
415 5986 naderman
        {
416 5986 naderman
                if (!$acl_list || $auth->acl_gets($acl_list, $rowset[$id]['forum_id']))
417 5986 naderman
                {
418 5986 naderman
                        $topics[$id] = $rowset[$id];
419 5986 naderman
                }
420 4924 acydburn
        }
421 4924 acydburn
422 5986 naderman
        return $topics;
423 4924 acydburn
}
424 4924 acydburn
425 5114 acydburn
/**
426 5114 acydburn
* Get simple post data
427 5114 acydburn
*/
428 6936 naderman
function get_post_data($post_ids, $acl_list = false, $read_tracking = false)
429 4924 acydburn
{
430 6936 naderman
        global $db, $auth, $config, $user;
431 6015 acydburn
432 4924 acydburn
        $rowset = array();
433 4924 acydburn
434 5986 naderman
        if (!sizeof($post_ids))
435 5986 naderman
        {
436 5986 naderman
                return array();
437 5986 naderman
        }
438 5986 naderman
439 6936 naderman
        $sql_array = array(
440 5885 davidmj
                'SELECT'        => 'p.*, u.*, t.*, f.*',
441 5885 davidmj
442 5885 davidmj
                'FROM'                => array(
443 5885 davidmj
                        USERS_TABLE                => 'u',
444 6938 acydburn
                        POSTS_TABLE                => 'p',
445 5885 davidmj
                        TOPICS_TABLE        => 't',
446 5885 davidmj
                ),
447 5885 davidmj
448 5885 davidmj
                'LEFT_JOIN'        => array(
449 5885 davidmj
                        array(
450 5885 davidmj
                                'FROM'        => array(FORUMS_TABLE => 'f'),
451 6938 acydburn
                                'ON'        => 'f.forum_id = t.forum_id'
452 5885 davidmj
                        )
453 5885 davidmj
                ),
454 5885 davidmj
455 6271 acydburn
                'WHERE'                => $db->sql_in_set('p.post_id', $post_ids) . '
456 6015 acydburn
                        AND u.user_id = p.poster_id
457 6015 acydburn
                        AND t.topic_id = p.topic_id',
458 6936 naderman
        );
459 6936 naderman
460 6936 naderman
        if ($read_tracking && $config['load_db_lastread'])
461 6936 naderman
        {
462 6936 naderman
                $sql_array['SELECT'] .= ', tt.mark_time, ft.mark_time as forum_mark_time';
463 6936 naderman
464 6936 naderman
                $sql_array['LEFT_JOIN'][] = array(
465 6936 naderman
                        'FROM'        => array(TOPICS_TRACK_TABLE => 'tt'),
466 6936 naderman
                        'ON'        => 'tt.user_id = ' . $user->data['user_id'] . ' AND t.topic_id = tt.topic_id'
467 6936 naderman
                );
468 6936 naderman
469 6936 naderman
                $sql_array['LEFT_JOIN'][] = array(
470 6936 naderman
                        'FROM'        => array(FORUMS_TRACK_TABLE => 'ft'),
471 6936 naderman
                        'ON'        => 'ft.user_id = ' . $user->data['user_id'] . ' AND t.forum_id = ft.forum_id'
472 6936 naderman
                );
473 6936 naderman
        }
474 6936 naderman
475 6936 naderman
        $sql = $db->sql_build_query('SELECT', $sql_array);
476 4924 acydburn
        $result = $db->sql_query($sql);
477 6936 naderman
        unset($sql_array);
478 4970 psotfx
479 4924 acydburn
        while ($row = $db->sql_fetchrow($result))
480 4924 acydburn
        {
481 5986 naderman
                if ($acl_list && !$auth->acl_gets($acl_list, $row['forum_id']))
482 4924 acydburn
                {
483 4924 acydburn
                        continue;
484 4924 acydburn
                }
485 4924 acydburn
486 4924 acydburn
                if (!$row['post_approved'] && !$auth->acl_get('m_approve', $row['forum_id']))
487 4924 acydburn
                {
488 4924 acydburn
                        // Moderators without the permission to approve post should at least not see them. ;)
489 4924 acydburn
                        continue;
490 4924 acydburn
                }
491 4924 acydburn
492 4924 acydburn
                $rowset[$row['post_id']] = $row;
493 4924 acydburn
        }
494 6015 acydburn
        $db->sql_freeresult($result);
495 4924 acydburn
496 4924 acydburn
        return $rowset;
497 4924 acydburn
}
498 4924 acydburn
499 5114 acydburn
/**
500 5114 acydburn
* Get simple forum data
501 5114 acydburn
*/
502 6936 naderman
function get_forum_data($forum_id, $acl_list = 'f_list', $read_tracking = false)
503 4924 acydburn
{
504 6936 naderman
        global $auth, $db, $user, $config;
505 6015 acydburn
506 4924 acydburn
        $rowset = array();
507 4924 acydburn
508 6271 acydburn
        if (!is_array($forum_id))
509 6271 acydburn
        {
510 6271 acydburn
                $forum_id = array($forum_id);
511 6271 acydburn
        }
512 6271 acydburn
513 5986 naderman
        if (!sizeof($forum_id))
514 5986 naderman
        {
515 5986 naderman
                return array();
516 5986 naderman
        }
517 5986 naderman
518 6936 naderman
        if ($read_tracking && $config['load_db_lastread'])
519 6936 naderman
        {
520 6936 naderman
                $read_tracking_join = ' LEFT JOIN ' . FORUMS_TRACK_TABLE . ' ft ON (ft.user_id = ' . $user->data['user_id'] . '
521 6936 naderman
                        AND ft.forum_id = f.forum_id)';
522 6936 naderman
                $read_tracking_select = ', ft.mark_time';
523 6936 naderman
        }
524 6936 naderman
        else
525 6936 naderman
        {
526 6936 naderman
                $read_tracking_join = $read_tracking_select = '';
527 6936 naderman
        }
528 6936 naderman
529 6937 naderman
        $sql = "SELECT f.* $read_tracking_select
530 6936 naderman
                FROM " . FORUMS_TABLE . " f$read_tracking_join
531 6936 naderman
                WHERE " . $db->sql_in_set('f.forum_id', $forum_id);
532 4924 acydburn
        $result = $db->sql_query($sql);
533 4970 psotfx
534 4924 acydburn
        while ($row = $db->sql_fetchrow($result))
535 4924 acydburn
        {
536 5986 naderman
                if ($acl_list && !$auth->acl_gets($acl_list, $row['forum_id']))
537 4924 acydburn
                {
538 4924 acydburn
                        continue;
539 4924 acydburn
                }
540 6015 acydburn
541 4924 acydburn
                if ($auth->acl_get('m_approve', $row['forum_id']))
542 4924 acydburn
                {
543 4924 acydburn
                        $row['forum_topics'] = $row['forum_topics_real'];
544 4924 acydburn
                }
545 4924 acydburn
546 4924 acydburn
                $rowset[$row['forum_id']] = $row;
547 4924 acydburn
        }
548 6015 acydburn
        $db->sql_freeresult($result);
549 4924 acydburn
550 4924 acydburn
        return $rowset;
551 4924 acydburn
}
552 4924 acydburn
553 5114 acydburn
/**
554 9814 naderman
* Get simple pm data
555 9814 naderman
*/
556 9814 naderman
function get_pm_data($pm_ids)
557 9814 naderman
{
558 9814 naderman
        global $db, $auth, $config, $user;
559 9814 naderman
560 9814 naderman
        $rowset = array();
561 9814 naderman
562 9814 naderman
        if (!sizeof($pm_ids))
563 9814 naderman
        {
564 9814 naderman
                return array();
565 9814 naderman
        }
566 9814 naderman
567 9814 naderman
        $sql_array = array(
568 9814 naderman
                'SELECT'        => 'p.*, u.*',
569 9814 naderman
570 9814 naderman
                'FROM'                => array(
571 9814 naderman
                        USERS_TABLE                        => 'u',
572 9814 naderman
                        PRIVMSGS_TABLE                => 'p',
573 9814 naderman
                ),
574 9814 naderman
575 9814 naderman
                'WHERE'                => $db->sql_in_set('p.msg_id', $pm_ids) . '
576 9814 naderman
                        AND u.user_id = p.author_id',
577 9814 naderman
        );
578 9814 naderman
579 9814 naderman
        $sql = $db->sql_build_query('SELECT', $sql_array);
580 9814 naderman
        $result = $db->sql_query($sql);
581 9814 naderman
        unset($sql_array);
582 9814 naderman
583 9814 naderman
        while ($row = $db->sql_fetchrow($result))
584 9814 naderman
        {
585 9814 naderman
                $rowset[$row['msg_id']] = $row;
586 9814 naderman
        }
587 9814 naderman
        $db->sql_freeresult($result);
588 9814 naderman
589 9814 naderman
        return $rowset;
590 9814 naderman
}
591 9814 naderman
592 9814 naderman
/**
593 5114 acydburn
* sorting in mcp
594 5986 naderman
*
595 5986 naderman
* @param string $where_sql should either be WHERE (default if ommited) or end with AND or OR
596 9739 nickvergessen
*
597 9739 nickvergessen
* $mode reports and reports_closed: the $where parameters uses aliases p for posts table and r for report table
598 9739 nickvergessen
* $mode unapproved_posts: the $where parameters uses aliases p for posts table and t for topic table
599 5114 acydburn
*/
600 4924 acydburn
function mcp_sorting($mode, &$sort_days, &$sort_key, &$sort_dir, &$sort_by_sql, &$sort_order_sql, &$total, $forum_id = 0, $topic_id = 0, $where_sql = 'WHERE')
601 4924 acydburn
{
602 4924 acydburn
        global $db, $user, $auth, $template;
603 4924 acydburn
604 6498 grahamje
        $sort_days = request_var('st', 0);
605 4924 acydburn
        $min_time = ($sort_days) ? time() - ($sort_days * 86400) : 0;
606 4924 acydburn
607 4924 acydburn
        switch ($mode)
608 4924 acydburn
        {
609 4924 acydburn
                case 'viewforum':
610 4924 acydburn
                        $type = 'topics';
611 4924 acydburn
                        $default_key = 't';
612 4924 acydburn
                        $default_dir = 'd';
613 6015 acydburn
614 4924 acydburn
                        $sql = 'SELECT COUNT(topic_id) AS total
615 4924 acydburn
                                FROM ' . TOPICS_TABLE . "
616 4924 acydburn
                                $where_sql forum_id = $forum_id
617 4924 acydburn
                                        AND topic_type NOT IN (" . POST_ANNOUNCE . ', ' . POST_GLOBAL . ")
618 4924 acydburn
                                        AND topic_last_post_time >= $min_time";
619 4924 acydburn
620 4924 acydburn
                        if (!$auth->acl_get('m_approve', $forum_id))
621 4924 acydburn
                        {
622 4924 acydburn
                                $sql .= 'AND topic_approved = 1';
623 4924 acydburn
                        }
624 6015 acydburn
                break;
625 4924 acydburn
626 4924 acydburn
                case 'viewtopic':
627 4924 acydburn
                        $type = 'posts';
628 4924 acydburn
                        $default_key = 't';
629 4924 acydburn
                        $default_dir = 'a';
630 6015 acydburn
631 4924 acydburn
                        $sql = 'SELECT COUNT(post_id) AS total
632 4924 acydburn
                                FROM ' . POSTS_TABLE . "
633 4924 acydburn
                                $where_sql topic_id = $topic_id
634 4924 acydburn
                                        AND post_time >= $min_time";
635 6015 acydburn
636 4924 acydburn
                        if (!$auth->acl_get('m_approve', $forum_id))
637 4924 acydburn
                        {
638 4924 acydburn
                                $sql .= 'AND post_approved = 1';
639 4924 acydburn
                        }
640 6015 acydburn
                break;
641 4924 acydburn
642 4924 acydburn
                case 'unapproved_posts':
643 4924 acydburn
                        $type = 'posts';
644 4924 acydburn
                        $default_key = 't';
645 4924 acydburn
                        $default_dir = 'd';
646 9739 nickvergessen
                        $where_sql .= ($topic_id) ? ' p.topic_id = ' . $topic_id . ' AND' : '';
647 5986 naderman
648 9739 nickvergessen
                        $sql = 'SELECT COUNT(p.post_id) AS total
649 9739 nickvergessen
                                FROM ' . POSTS_TABLE . ' p, ' . TOPICS_TABLE . " t
650 9739 nickvergessen
                                $where_sql " . $db->sql_in_set('p.forum_id', ($forum_id) ? array($forum_id) : array_intersect(get_forum_list('f_read'), get_forum_list('m_approve'))) . '
651 9739 nickvergessen
                                        AND p.post_approved = 0
652 9739 nickvergessen
                                        AND t.topic_id = p.topic_id
653 9739 nickvergessen
                                        AND t.topic_first_post_id <> p.post_id';
654 6411 acydburn
655 6411 acydburn
                        if ($min_time)
656 6411 acydburn
                        {
657 6411 acydburn
                                $sql .= ' AND post_time >= ' . $min_time;
658 6411 acydburn
                        }
659 6015 acydburn
                break;
660 4924 acydburn
661 4924 acydburn
                case 'unapproved_topics':
662 4924 acydburn
                        $type = 'topics';
663 4924 acydburn
                        $default_key = 't';
664 4924 acydburn
                        $default_dir = 'd';
665 6015 acydburn
666 4924 acydburn
                        $sql = 'SELECT COUNT(topic_id) AS total
667 4924 acydburn
                                FROM ' . TOPICS_TABLE . "
668 9015 toonarmy
                                $where_sql " . $db->sql_in_set('forum_id', ($forum_id) ? array($forum_id) : array_intersect(get_forum_list('f_read'), get_forum_list('m_approve'))) . '
669 6411 acydburn
                                        AND topic_approved = 0';
670 6411 acydburn
671 6411 acydburn
                        if ($min_time)
672 6411 acydburn
                        {
673 6411 acydburn
                                $sql .= ' AND topic_time >= ' . $min_time;
674 6411 acydburn
                        }
675 6015 acydburn
                break;
676 4924 acydburn
677 9814 naderman
                case 'pm_reports':
678 9814 naderman
                case 'pm_reports_closed':
679 4924 acydburn
                case 'reports':
680 5750 naderman
                case 'reports_closed':
681 9830 naderman
                        $pm = (strpos($mode, 'pm_') === 0) ? true : false;
682 9830 naderman
683 9830 naderman
                        $type = ($pm) ? 'pm_reports' : 'reports';
684 5649 naderman
                        $default_key = 't';
685 4924 acydburn
                        $default_dir = 'd';
686 4924 acydburn
                        $limit_time_sql = ($min_time) ? "AND r.report_time >= $min_time" : '';
687 4924 acydburn
688 4924 acydburn
                        if ($topic_id)
689 4924 acydburn
                        {
690 9814 naderman
                                $where_sql .= ' p.topic_id = ' . $topic_id . ' AND ';
691 4924 acydburn
                        }
692 4924 acydburn
                        else if ($forum_id)
693 4924 acydburn
                        {
694 9814 naderman
                                $where_sql .= ' p.forum_id = ' . $forum_id . ' AND ';
695 4924 acydburn
                        }
696 9830 naderman
                        else if (!$pm)
697 4924 acydburn
                        {
698 9814 naderman
                                $where_sql .= ' ' . $db->sql_in_set('p.forum_id', get_forum_list(array('!f_read', '!m_report')), true, true) . ' AND ';
699 4924 acydburn
                        }
700 5750 naderman
701 9830 naderman
                        if ($mode == 'reports' || $mode == 'pm_reports')
702 5750 naderman
                        {
703 9814 naderman
                                $where_sql .= ' r.report_closed = 0 AND ';
704 5750 naderman
                        }
705 5750 naderman
                        else
706 5750 naderman
                        {
707 9814 naderman
                                $where_sql .= ' r.report_closed = 1 AND ';
708 5750 naderman
                        }
709 5750 naderman
710 9814 naderman
                        if ($pm)
711 9814 naderman
                        {
712 9814 naderman
                                $sql = 'SELECT COUNT(r.report_id) AS total
713 9814 naderman
                                        FROM ' . REPORTS_TABLE . ' r, ' . PRIVMSGS_TABLE . " p
714 9814 naderman
                                        $where_sql r.post_id = 0
715 9814 naderman
                                                AND p.msg_id = r.pm_id
716 9814 naderman
                                                $limit_time_sql";
717 9814 naderman
                        }
718 9814 naderman
                        else
719 9814 naderman
                        {
720 9814 naderman
                                $sql = 'SELECT COUNT(r.report_id) AS total
721 9814 naderman
                                        FROM ' . REPORTS_TABLE . ' r, ' . POSTS_TABLE . " p
722 9814 naderman
                                        $where_sql r.pm_id = 0
723 9814 naderman
                                                AND p.post_id = r.post_id
724 9814 naderman
                                                $limit_time_sql";
725 9814 naderman
                        }
726 6015 acydburn
                break;
727 4924 acydburn
728 4924 acydburn
                case 'viewlogs':
729 4924 acydburn
                        $type = 'logs';
730 4924 acydburn
                        $default_key = 't';
731 4924 acydburn
                        $default_dir = 'd';
732 6015 acydburn
733 4924 acydburn
                        $sql = 'SELECT COUNT(log_id) AS total
734 4924 acydburn
                                FROM ' . LOG_TABLE . "
735 9015 toonarmy
                                $where_sql " . $db->sql_in_set('forum_id', ($forum_id) ? array($forum_id) : array_intersect(get_forum_list('f_read'), get_forum_list('m_'))) . '
736 4970 psotfx
                                        AND log_time >= ' . $min_time . '
737 4924 acydburn
                                        AND log_type = ' . LOG_MOD;
738 6015 acydburn
                break;
739 4924 acydburn
        }
740 4924 acydburn
741 4924 acydburn
        $sort_key = request_var('sk', $default_key);
742 4924 acydburn
        $sort_dir = request_var('sd', $default_dir);
743 4924 acydburn
        $sort_dir_text = array('a' => $user->lang['ASCENDING'], 'd' => $user->lang['DESCENDING']);
744 4924 acydburn
745 4924 acydburn
        switch ($type)
746 4924 acydburn
        {
747 4924 acydburn
                case 'topics':
748 5705 naderman
                        $limit_days = array(0 => $user->lang['ALL_TOPICS'], 1 => $user->lang['1_DAY'], 7 => $user->lang['7_DAYS'], 14 => $user->lang['2_WEEKS'], 30 => $user->lang['1_MONTH'], 90 => $user->lang['3_MONTHS'], 180 => $user->lang['6_MONTHS'], 365 => $user->lang['1_YEAR']);
749 4924 acydburn
                        $sort_by_text = array('a' => $user->lang['AUTHOR'], 't' => $user->lang['POST_TIME'], 'tt' => $user->lang['TOPIC_TIME'], 'r' => $user->lang['REPLIES'], 's' => $user->lang['SUBJECT'], 'v' => $user->lang['VIEWS']);
750 4924 acydburn
751 4924 acydburn
                        $sort_by_sql = array('a' => 't.topic_first_poster_name', 't' => 't.topic_last_post_time', 'tt' => 't.topic_time', 'r' => (($auth->acl_get('m_approve', $forum_id)) ? 't.topic_replies_real' : 't.topic_replies'), 's' => 't.topic_title', 'v' => 't.topic_views');
752 4924 acydburn
                        $limit_time_sql = ($min_time) ? "AND t.topic_last_post_time >= $min_time" : '';
753 6015 acydburn
                break;
754 4924 acydburn
755 4924 acydburn
                case 'posts':
756 5705 naderman
                        $limit_days = array(0 => $user->lang['ALL_POSTS'], 1 => $user->lang['1_DAY'], 7 => $user->lang['7_DAYS'], 14 => $user->lang['2_WEEKS'], 30 => $user->lang['1_MONTH'], 90 => $user->lang['3_MONTHS'], 180 => $user->lang['6_MONTHS'], 365 => $user->lang['1_YEAR']);
757 4924 acydburn
                        $sort_by_text = array('a' => $user->lang['AUTHOR'], 't' => $user->lang['POST_TIME'], 's' => $user->lang['SUBJECT']);
758 6650 acydburn
                        $sort_by_sql = array('a' => 'u.username_clean', 't' => 'p.post_time', 's' => 'p.post_subject');
759 4924 acydburn
                        $limit_time_sql = ($min_time) ? "AND p.post_time >= $min_time" : '';
760 6015 acydburn
                break;
761 4924 acydburn
762 4924 acydburn
                case 'reports':
763 5705 naderman
                        $limit_days = array(0 => $user->lang['ALL_REPORTS'], 1 => $user->lang['1_DAY'], 7 => $user->lang['7_DAYS'], 14 => $user->lang['2_WEEKS'], 30 => $user->lang['1_MONTH'], 90 => $user->lang['3_MONTHS'], 180 => $user->lang['6_MONTHS'], 365 => $user->lang['1_YEAR']);
764 5649 naderman
                        $sort_by_text = array('a' => $user->lang['AUTHOR'], 'r' => $user->lang['REPORTER'], 'p' => $user->lang['POST_TIME'], 't' => $user->lang['REPORT_TIME'], 's' => $user->lang['SUBJECT']);
765 6650 acydburn
                        $sort_by_sql = array('a' => 'u.username_clean', 'r' => 'ru.username', 'p' => 'p.post_time', 't' => 'r.report_time', 's' => 'p.post_subject');
766 6015 acydburn
                break;
767 4924 acydburn
768 9830 naderman
                case 'pm_reports':
769 9830 naderman
                        $limit_days = array(0 => $user->lang['ALL_REPORTS'], 1 => $user->lang['1_DAY'], 7 => $user->lang['7_DAYS'], 14 => $user->lang['2_WEEKS'], 30 => $user->lang['1_MONTH'], 90 => $user->lang['3_MONTHS'], 180 => $user->lang['6_MONTHS'], 365 => $user->lang['1_YEAR']);
770 9830 naderman
                        $sort_by_text = array('a' => $user->lang['AUTHOR'], 'r' => $user->lang['REPORTER'], 'p' => $user->lang['POST_TIME'], 't' => $user->lang['REPORT_TIME'], 's' => $user->lang['SUBJECT']);
771 9830 naderman
                        $sort_by_sql = array('a' => 'u.username_clean', 'r' => 'ru.username', 'p' => 'p.message_time', 't' => 'r.report_time', 's' => 'p.message_subject');
772 9830 naderman
                break;
773 9830 naderman
774 4924 acydburn
                case 'logs':
775 5705 naderman
                        $limit_days = array(0 => $user->lang['ALL_ENTRIES'], 1 => $user->lang['1_DAY'], 7 => $user->lang['7_DAYS'], 14 => $user->lang['2_WEEKS'], 30 => $user->lang['1_MONTH'], 90 => $user->lang['3_MONTHS'], 180 => $user->lang['6_MONTHS'], 365 => $user->lang['1_YEAR']);
776 4924 acydburn
                        $sort_by_text = array('u' => $user->lang['SORT_USERNAME'], 't' => $user->lang['SORT_DATE'], 'i' => $user->lang['SORT_IP'], 'o' => $user->lang['SORT_ACTION']);
777 4924 acydburn
778 6650 acydburn
                        $sort_by_sql = array('u' => 'u.username_clean', 't' => 'l.log_time', 'i' => 'l.log_ip', 'o' => 'l.log_operation');
779 4924 acydburn
                        $limit_time_sql = ($min_time) ? "AND l.log_time >= $min_time" : '';
780 6015 acydburn
                break;
781 4924 acydburn
        }
782 4924 acydburn
783 6477 acydburn
        if (!isset($sort_by_sql[$sort_key]))
784 6477 acydburn
        {
785 6477 acydburn
                $sort_key = $default_key;
786 6477 acydburn
        }
787 6477 acydburn
788 4924 acydburn
        $sort_order_sql = $sort_by_sql[$sort_key] . ' ' . (($sort_dir == 'd') ? 'DESC' : 'ASC');
789 4924 acydburn
790 4924 acydburn
        $s_limit_days = $s_sort_key = $s_sort_dir = $sort_url = '';
791 4924 acydburn
        gen_sort_selects($limit_days, $sort_by_text, $sort_days, $sort_key, $sort_dir, $s_limit_days, $s_sort_key, $s_sort_dir, $sort_url);
792 4924 acydburn
793 4924 acydburn
        $template->assign_vars(array(
794 6015 acydburn
                'S_SELECT_SORT_DIR'                => $s_sort_dir,
795 6015 acydburn
                'S_SELECT_SORT_KEY'                => $s_sort_key,
796 6015 acydburn
                'S_SELECT_SORT_DAYS'        => $s_limit_days)
797 4924 acydburn
        );
798 4924 acydburn
799 5733 naderman
        if (($sort_days && $mode != 'viewlogs') || in_array($mode, array('reports', 'unapproved_topics', 'unapproved_posts')) || $where_sql != 'WHERE')
800 4924 acydburn
        {
801 4924 acydburn
                $result = $db->sql_query($sql);
802 6015 acydburn
                $total = (int) $db->sql_fetchfield('total');
803 6015 acydburn
                $db->sql_freeresult($result);
804 4924 acydburn
        }
805 4924 acydburn
        else
806 4924 acydburn
        {
807 4924 acydburn
                $total = -1;
808 4924 acydburn
        }
809 4924 acydburn
}
810 4924 acydburn
811 5114 acydburn
/**
812 5114 acydburn
* Validate ids
813 6601 acydburn
*
814 6601 acydburn
* @param        array        &$ids                        The relevant ids to check
815 6601 acydburn
* @param        string        $table                        The table to find the ids in
816 6601 acydburn
* @param        string        $sql_id                        The ids relevant column name
817 6601 acydburn
* @param        array        $acl_list                A list of permissions the user need to have
818 6601 acydburn
* @param        mixed        $singe_forum        Limit to one forum id (int) or the first forum found (true)
819 6601 acydburn
*
820 6601 acydburn
* @return        mixed        False if no ids were able to be retrieved, true if at least one id left.
821 6601 acydburn
*                                        Additionally, this value can be the forum_id assigned if $single_forum was set.
822 6601 acydburn
*                                        Therefore checking the result for with !== false is the best method.
823 5114 acydburn
*/
824 6601 acydburn
function check_ids(&$ids, $table, $sql_id, $acl_list = false, $single_forum = false)
825 4924 acydburn
{
826 4924 acydburn
        global $db, $auth;
827 4924 acydburn
828 6601 acydburn
        if (!is_array($ids) || empty($ids))
829 4924 acydburn
        {
830 6601 acydburn
                return false;
831 4924 acydburn
        }
832 4924 acydburn
833 6601 acydburn
        $sql = "SELECT $sql_id, forum_id FROM $table
834 6601 acydburn
                WHERE " . $db->sql_in_set($sql_id, $ids);
835 4924 acydburn
        $result = $db->sql_query($sql);
836 4924 acydburn
837 6601 acydburn
        $ids = array();
838 6601 acydburn
        $forum_id = false;
839 6781 acydburn
840 6601 acydburn
        while ($row = $db->sql_fetchrow($result))
841 4924 acydburn
        {
842 6601 acydburn
                if ($acl_list && $row['forum_id'] && !$auth->acl_gets($acl_list, $row['forum_id']))
843 6601 acydburn
                {
844 6601 acydburn
                        continue;
845 6601 acydburn
                }
846 4924 acydburn
847 6601 acydburn
                if ($acl_list && !$row['forum_id'] && !$auth->acl_getf_global($acl_list))
848 6601 acydburn
                {
849 6601 acydburn
                        continue;
850 6601 acydburn
                }
851 5584 naderman
852 6601 acydburn
                // Limit forum? If not, just assign the id.
853 6601 acydburn
                if ($single_forum === false)
854 5584 naderman
                {
855 6601 acydburn
                        $ids[] = $row[$sql_id];
856 6601 acydburn
                        continue;
857 5584 naderman
                }
858 5584 naderman
859 6601 acydburn
                // Limit forum to a specific forum id?
860 6781 acydburn
                // This can get really tricky, because we do not want to create a failure on global topics. :)
861 6781 acydburn
                if ($row['forum_id'])
862 6601 acydburn
                {
863 6781 acydburn
                        if ($single_forum !== true && $row['forum_id'] == (int) $single_forum)
864 6781 acydburn
                        {
865 6781 acydburn
                                $forum_id = (int) $single_forum;
866 6781 acydburn
                        }
867 6781 acydburn
                        else if ($forum_id === false)
868 6781 acydburn
                        {
869 6781 acydburn
                                $forum_id = $row['forum_id'];
870 6781 acydburn
                        }
871 6781 acydburn
872 6781 acydburn
                        if ($row['forum_id'] == $forum_id)
873 6781 acydburn
                        {
874 6781 acydburn
                                $ids[] = $row[$sql_id];
875 6781 acydburn
                        }
876 6601 acydburn
                }
877 6781 acydburn
                else
878 6601 acydburn
                {
879 6781 acydburn
                        // Always add a global topic
880 6601 acydburn
                        $ids[] = $row[$sql_id];
881 6601 acydburn
                }
882 4924 acydburn
        }
883 6601 acydburn
        $db->sql_freeresult($result);
884 4924 acydburn
885 6601 acydburn
        if (!sizeof($ids))
886 4924 acydburn
        {
887 6601 acydburn
                return false;
888 4924 acydburn
        }
889 4924 acydburn
890 6781 acydburn
        // If forum id is false and ids populated we may have only global announcements selected (returning 0 because of (int) $forum_id)
891 6781 acydburn
892 6601 acydburn
        return ($single_forum === false) ? true : (int) $forum_id;
893 4924 acydburn
}