phpBB
Statistics
| Revision:

root / branches / phpBB-3_0_0 / phpBB / mcp.php

History | View | Annotate | Download (23.7 kB)

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