phpBB
Statistics
| Revision:

root / tags / milestone_3 / phpBB / mcp.php

History | View | Annotate | Download (19.5 kB)

1 3281 psotfx
<?php
2 5114 acydburn
/**
3 5114 acydburn
*
4 5114 acydburn
* @package mcp
5 5114 acydburn
* @version $Id$
6 5114 acydburn
* @copyright (c) 2005 phpBB Group
7 5114 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 3281 psotfx
$phpbb_root_path = './';
16 4473 psotfx
$phpEx = substr(strrchr(__FILE__, '.'), 1);
17 3281 psotfx
include($phpbb_root_path . 'common.'.$phpEx);
18 3281 psotfx
include($phpbb_root_path . 'includes/functions_admin.'.$phpEx);
19 3281 psotfx
20 5114 acydburn
/**
21 5114 acydburn
* @package mcp
22 5114 acydburn
* MCP Module
23 5114 acydburn
*/
24 4496 ludovic_arnaud
class module
25 3480 ludovic_arnaud
{
26 4694 ludovic_arnaud
        var $id = 0;
27 4694 ludovic_arnaud
        var $type;
28 4694 ludovic_arnaud
        var $name;
29 4694 ludovic_arnaud
        var $mode;
30 4921 acydburn
        var $url;
31 3480 ludovic_arnaud
32 4694 ludovic_arnaud
        // Private methods, should not be overwritten
33 4921 acydburn
        function create($module_type, $module_url, $post_id, $topic_id, $forum_id, $selected_mod = false, $selected_submod = false)
34 3796 ludovic_arnaud
        {
35 4921 acydburn
                global $template, $auth, $db, $user, $config;
36 4921 acydburn
                global $phpbb_root_path, $phpEx;
37 3480 ludovic_arnaud
38 4694 ludovic_arnaud
                $sql = 'SELECT module_id, module_title, module_filename, module_subs, module_acl
39 4496 ludovic_arnaud
                        FROM ' . MODULES_TABLE . "
40 4496 ludovic_arnaud
                        WHERE module_type = '{$module_type}'
41 4496 ludovic_arnaud
                                AND module_enabled = 1
42 4496 ludovic_arnaud
                        ORDER BY module_order ASC";
43 4496 ludovic_arnaud
                $result = $db->sql_query($sql);
44 3520 ludovic_arnaud
45 4694 ludovic_arnaud
                $i = 0;
46 4496 ludovic_arnaud
                while ($row = $db->sql_fetchrow($result))
47 4496 ludovic_arnaud
                {
48 4694 ludovic_arnaud
                        // Authorisation is required for the basic module
49 4496 ludovic_arnaud
                        if ($row['module_acl'])
50 4496 ludovic_arnaud
                        {
51 4888 acydburn
                                $is_auth = false;
52 4925 acydburn
                                eval('$is_auth = (' . preg_replace(array('#acl_([a-z_]+)#e', '#cfg_([a-z_]+)#e'), array('(int) $auth->acl_get("\\1", ' . $forum_id . ')', '(int) $config["\\1"]'), trim($row['module_acl'])) . ');');
53 4694 ludovic_arnaud
54 4694 ludovic_arnaud
                                // The user is not authorised to use this module, skip it
55 4496 ludovic_arnaud
                                if (!$is_auth)
56 4496 ludovic_arnaud
                                {
57 4496 ludovic_arnaud
                                        continue;
58 4496 ludovic_arnaud
                                }
59 4496 ludovic_arnaud
                        }
60 3604 ludovic_arnaud
61 4694 ludovic_arnaud
                        $selected = ($row['module_filename'] == $selected_mod || $row['module_id'] == $selected_mod || (!$selected_mod && !$i)) ?  true : false;
62 4694 ludovic_arnaud
63 4694 ludovic_arnaud
                        // Get the localised lang string if available, or make up our own otherwise
64 4921 acydburn
                        $module_lang = strtoupper($module_type) . '_' . $row['module_title'];
65 4694 ludovic_arnaud
                        $template->assign_block_vars($module_type . '_section', array(
66 4921 acydburn
                                'L_TITLE'                => (isset($user->lang[$module_lang])) ? $user->lang[$module_lang] : ucfirst(str_replace('_', ' ', strtolower($row['module_title']))),
67 4970 psotfx
                                'S_SELECTED'        => $selected,
68 4694 ludovic_arnaud
                                'U_TITLE'                => $module_url . '&amp;i=' . $row['module_id'])
69 4694 ludovic_arnaud
                        );
70 4694 ludovic_arnaud
71 4694 ludovic_arnaud
                        if ($selected)
72 4496 ludovic_arnaud
                        {
73 4694 ludovic_arnaud
                                $module_id = $row['module_id'];
74 4496 ludovic_arnaud
                                $module_name = $row['module_filename'];
75 4694 ludovic_arnaud
76 4694 ludovic_arnaud
                                if ($row['module_subs'])
77 4694 ludovic_arnaud
                                {
78 4694 ludovic_arnaud
                                        $j = 0;
79 4694 ludovic_arnaud
                                        $submodules_ary = explode("\n", $row['module_subs']);
80 4694 ludovic_arnaud
                                        foreach ($submodules_ary as $submodule)
81 4694 ludovic_arnaud
                                        {
82 4925 acydburn
                                                if (!trim($submodule))
83 4925 acydburn
                                                {
84 4925 acydburn
                                                        continue;
85 4925 acydburn
                                                }
86 4925 acydburn
87 4694 ludovic_arnaud
                                                $submodule = explode(',', trim($submodule));
88 4694 ludovic_arnaud
                                                $submodule_title = array_shift($submodule);
89 4694 ludovic_arnaud
90 4694 ludovic_arnaud
                                                $is_auth = true;
91 4694 ludovic_arnaud
                                                foreach ($submodule as $auth_option)
92 4694 ludovic_arnaud
                                                {
93 4925 acydburn
                                                        eval('$is_auth = (' . preg_replace(array('#acl_([a-z_]+)#e', '#cfg_([a-z_]+)#e'), array('(int) $auth->acl_get("\\1", ' . $forum_id . ')', '(int) $config["\\1"]'), trim($auth_option)) . ');');
94 4925 acydburn
95 4925 acydburn
                                                        if (!$is_auth)
96 4694 ludovic_arnaud
                                                        {
97 4925 acydburn
                                                                break;
98 4694 ludovic_arnaud
                                                        }
99 4694 ludovic_arnaud
                                                }
100 4694 ludovic_arnaud
101 4925 acydburn
                                                if (!$is_auth)
102 4694 ludovic_arnaud
                                                {
103 4694 ludovic_arnaud
                                                        continue;
104 4694 ludovic_arnaud
                                                }
105 4694 ludovic_arnaud
106 4921 acydburn
                                                // Only show those rows we are able to access
107 4970 psotfx
                                                if (($submodule_title == 'post_details' && !$post_id) ||
108 4921 acydburn
                                                        ($submodule_title == 'topic_view' && !$topic_id) ||
109 4921 acydburn
                                                        ($submodule_title == 'forum_view' && !$forum_id))
110 4921 acydburn
                                                {
111 4921 acydburn
                                                        continue;
112 4921 acydburn
                                                }
113 4970 psotfx
114 4921 acydburn
                                                $suffix = ($post_id) ? "&amp;p=$post_id" : '';
115 4921 acydburn
                                                $suffix .= ($topic_id) ? "&amp;t=$topic_id" : '';
116 4921 acydburn
                                                $suffix .= ($forum_id) ? "&amp;f=$forum_id" : '';
117 4970 psotfx
118 4694 ludovic_arnaud
                                                $selected = ($submodule_title == $selected_submod || (!$selected_submod && !$j)) ? true : false;
119 4694 ludovic_arnaud
120 4694 ludovic_arnaud
                                                // Get the localised lang string if available, or make up our own otherwise
121 4921 acydburn
                                                $module_lang = strtoupper($module_type . '_' . $module_name . '_' . $submodule_title);
122 4921 acydburn
123 4694 ludovic_arnaud
                                                $template->assign_block_vars("{$module_type}_section.{$module_type}_subsection", array(
124 4921 acydburn
                                                        'L_TITLE'                => (isset($user->lang[$module_lang])) ? $user->lang[$module_lang] : ucfirst(str_replace('_', ' ', strtolower($module_lang))),
125 4924 acydburn
                                                        'S_SELECTED'        => $selected,
126 4924 acydburn
                                                        'ADD_ITEM'                => $this->add_menu_item($row['module_filename'], $submodule_title),
127 4921 acydburn
                                                        'U_TITLE'                => $module_url . '&amp;i=' . $module_id . '&amp;mode=' . $submodule_title . $suffix)
128 4694 ludovic_arnaud
                                                );
129 4694 ludovic_arnaud
130 4694 ludovic_arnaud
                                                if ($selected)
131 4694 ludovic_arnaud
                                                {
132 4694 ludovic_arnaud
                                                        $this->mode = $submodule_title;
133 4694 ludovic_arnaud
                                                }
134 4694 ludovic_arnaud
135 4694 ludovic_arnaud
                                                $j++;
136 4694 ludovic_arnaud
                                        }
137 4694 ludovic_arnaud
                                }
138 4496 ludovic_arnaud
                        }
139 3520 ludovic_arnaud
140 4694 ludovic_arnaud
                        $i++;
141 4496 ludovic_arnaud
                }
142 4496 ludovic_arnaud
                $db->sql_freeresult($result);
143 3554 ludovic_arnaud
144 4694 ludovic_arnaud
                if (!$module_id)
145 3480 ludovic_arnaud
                {
146 4496 ludovic_arnaud
                        trigger_error('MODULE_NOT_EXIST');
147 3480 ludovic_arnaud
                }
148 3480 ludovic_arnaud
149 4694 ludovic_arnaud
                $this->type = $module_type;
150 4694 ludovic_arnaud
                $this->id = $module_id;
151 4694 ludovic_arnaud
                $this->name = $module_name;
152 4921 acydburn
                $this->url = "{$phpbb_root_path}mcp.$phpEx?sid={$user->session_id}";
153 4921 acydburn
                $this->url .= ($post_id) ? "&amp;p=$post_id" : '';
154 4921 acydburn
                $this->url .= ($topic_id) ? "&amp;t=$topic_id" : '';
155 4921 acydburn
                $this->url .= ($forum_id) ? "&amp;f=$forum_id" : '';
156 3480 ludovic_arnaud
        }
157 3281 psotfx
158 4694 ludovic_arnaud
        function load($type = false, $name = false, $mode = false, $run = true)
159 3458 ludovic_arnaud
        {
160 4921 acydburn
                global $phpbb_root_path, $phpEx;
161 3281 psotfx
162 4694 ludovic_arnaud
                if ($type)
163 3281 psotfx
                {
164 4694 ludovic_arnaud
                        $this->type = $type;
165 4694 ludovic_arnaud
                }
166 3281 psotfx
167 4694 ludovic_arnaud
                if ($name)
168 4694 ludovic_arnaud
                {
169 4694 ludovic_arnaud
                        $this->name = $name;
170 4694 ludovic_arnaud
                }
171 4694 ludovic_arnaud
172 4694 ludovic_arnaud
                if (!class_exists($this->type . '_' . $this->name))
173 4694 ludovic_arnaud
                {
174 4921 acydburn
                        require_once($phpbb_root_path . "includes/{$this->type}/{$this->type}_{$this->name}.$phpEx");
175 4694 ludovic_arnaud
176 4694 ludovic_arnaud
                        if ($run)
177 4694 ludovic_arnaud
                        {
178 4921 acydburn
                                if (!isset($this->mode))
179 4496 ludovic_arnaud
                                {
180 4921 acydburn
                                        $this->mode = $mode;
181 4694 ludovic_arnaud
                                }
182 3281 psotfx
183 4921 acydburn
                                eval("\$this->module = new {$this->type}_{$this->name}(\$this->id, \$this->mode, \$this->url);");
184 4694 ludovic_arnaud
                                if (method_exists($this->module, 'init'))
185 4694 ludovic_arnaud
                                {
186 4694 ludovic_arnaud
                                        $this->module->init();
187 4496 ludovic_arnaud
                                }
188 4496 ludovic_arnaud
                        }
189 3281 psotfx
                }
190 3458 ludovic_arnaud
        }
191 3281 psotfx
192 4496 ludovic_arnaud
        // Displays the appropriate template with the given title
193 4496 ludovic_arnaud
        function display($page_title, $tpl_name)
194 3458 ludovic_arnaud
        {
195 4496 ludovic_arnaud
                global $template;
196 3281 psotfx
197 4496 ludovic_arnaud
                page_header($page_title);
198 3961 psotfx
199 4496 ludovic_arnaud
                $template->set_filenames(array(
200 4496 ludovic_arnaud
                        'body' => $tpl_name)
201 4496 ludovic_arnaud
                );
202 3961 psotfx
203 4496 ludovic_arnaud
                page_footer();
204 3458 ludovic_arnaud
        }
205 3281 psotfx
206 4924 acydburn
        // Add Item to Submodule Title
207 4924 acydburn
        function add_menu_item($module_name, $mode)
208 4924 acydburn
        {
209 4937 acydburn
                global $db, $user, $auth;
210 4694 ludovic_arnaud
211 4924 acydburn
                if ($module_name != 'queue')
212 4924 acydburn
                {
213 4924 acydburn
                        return '';
214 4924 acydburn
                }
215 4924 acydburn
216 4937 acydburn
                $forum_id = request_var('f', 0);
217 4937 acydburn
                if ($forum_id && $auth->acl_get('m_approve', $forum_id))
218 4937 acydburn
                {
219 4937 acydburn
                        $forum_list = array($forum_id);
220 4937 acydburn
                }
221 4937 acydburn
                else
222 4937 acydburn
                {
223 4937 acydburn
                        $forum_list = get_forum_list('m_approve');
224 4937 acydburn
                }
225 4924 acydburn
226 4924 acydburn
                switch ($mode)
227 4924 acydburn
                {
228 4924 acydburn
                        case 'unapproved_topics':
229 4924 acydburn
230 4924 acydburn
                                $sql = 'SELECT COUNT(*) AS total
231 4924 acydburn
                                        FROM ' . TOPICS_TABLE . '
232 4924 acydburn
                                        WHERE forum_id IN (' . implode(', ', $forum_list) . ')
233 4924 acydburn
                                                AND topic_approved = 0';
234 4924 acydburn
                                $result = $db->sql_query($sql);
235 4924 acydburn
                                $total_topics = $db->sql_fetchfield('total', 0, $result);
236 4924 acydburn
237 4924 acydburn
                                return ($total_topics) ? $total_topics : $user->lang['NONE'];
238 4924 acydburn
                                break;
239 4924 acydburn
240 4924 acydburn
                        case 'unapproved_posts':
241 4924 acydburn
242 4924 acydburn
                                $sql = 'SELECT COUNT(*) AS total
243 4970 psotfx
                                                FROM ' . POSTS_TABLE . ' p, ' . TOPICS_TABLE . ' t
244 4924 acydburn
                                                WHERE p.forum_id IN (' . implode(', ', $forum_list) . ')
245 4924 acydburn
                                                        AND p.post_approved = 0
246 4924 acydburn
                                                        AND t.topic_id = p.topic_id
247 4924 acydburn
                                                        AND t.topic_first_post_id <> p.post_id';
248 4924 acydburn
                                $result = $db->sql_query($sql);
249 4924 acydburn
                                $total_posts = $db->sql_fetchfield('total', 0, $result);
250 4924 acydburn
251 4924 acydburn
                                return ($total_posts) ? $total_posts : $user->lang['NONE'];
252 4924 acydburn
                                break;
253 4924 acydburn
                }
254 4924 acydburn
        }
255 4924 acydburn
256 4694 ludovic_arnaud
        // Public methods to be overwritten by modules
257 4694 ludovic_arnaud
        function module()
258 4195 ludovic_arnaud
        {
259 4694 ludovic_arnaud
                // Module name
260 4694 ludovic_arnaud
                // Module filename
261 4694 ludovic_arnaud
                // Module description
262 4694 ludovic_arnaud
                // Module version
263 4694 ludovic_arnaud
                // Module compatibility
264 4694 ludovic_arnaud
                return false;
265 4694 ludovic_arnaud
        }
266 3480 ludovic_arnaud
267 4694 ludovic_arnaud
        function init()
268 4694 ludovic_arnaud
        {
269 4694 ludovic_arnaud
                return false;
270 4694 ludovic_arnaud
        }
271 4496 ludovic_arnaud
272 4694 ludovic_arnaud
        function install()
273 4694 ludovic_arnaud
        {
274 4694 ludovic_arnaud
                return false;
275 3458 ludovic_arnaud
        }
276 4694 ludovic_arnaud
277 4694 ludovic_arnaud
        function uninstall()
278 4694 ludovic_arnaud
        {
279 4694 ludovic_arnaud
                return false;
280 4694 ludovic_arnaud
        }
281 3458 ludovic_arnaud
}
282 3784 ludovic_arnaud
283 5114 acydburn
/**
284 5114 acydburn
*/
285 4921 acydburn
286 4496 ludovic_arnaud
// Start session management
287 5247 acydburn
$user->session_begin();
288 4496 ludovic_arnaud
$auth->acl($user->data);
289 4844 acydburn
$user->setup('mcp');
290 3784 ludovic_arnaud
291 4694 ludovic_arnaud
$mcp = new module();
292 4694 ludovic_arnaud
293 4496 ludovic_arnaud
// Basic parameter data
294 4921 acydburn
$mode        = request_var('mode', '');
295 4921 acydburn
$mode2        = (isset($_REQUEST['quick'])) ? request_var('mode2', '') : '';
296 4921 acydburn
$module = request_var('i', '');
297 4921 acydburn
298 4937 acydburn
if (is_array($mode))
299 4937 acydburn
{
300 4937 acydburn
        list($mode, ) = each($mode);
301 4937 acydburn
}
302 4937 acydburn
303 4921 acydburn
if ($mode2)
304 3480 ludovic_arnaud
{
305 4921 acydburn
        $mode = $mode2;
306 4921 acydburn
        $action = '';
307 4921 acydburn
        unset($mode2);
308 3480 ludovic_arnaud
}
309 4921 acydburn
310 4959 acydburn
// Make sure we are using the correct module
311 4959 acydburn
if ($mode == 'approve' || $mode == 'disapprove')
312 4959 acydburn
{
313 4959 acydburn
        $module = 'queue';
314 4959 acydburn
}
315 4959 acydburn
316 4921 acydburn
// Only Moderators can go beyond this point
317 5117 acydburn
if (!$user->data['is_registered'])
318 4694 ludovic_arnaud
{
319 5117 acydburn
        if ($user->data['is_bot'])
320 4921 acydburn
        {
321 4921 acydburn
                redirect("index.$phpEx$SID");
322 4921 acydburn
        }
323 5117 acydburn
324 5117 acydburn
        login_box('', $user->lang['LOGIN_EXPLAIN_MCP']);
325 4694 ludovic_arnaud
}
326 4921 acydburn
327 4921 acydburn
$quickmod = (isset($_REQUEST['quickmod'])) ? true : false;
328 4921 acydburn
$action = request_var('action', '');
329 5152 acydburn
$action_ary = request_var('action', array('' => 0));
330 4921 acydburn
331 5152 acydburn
if (sizeof($action_ary))
332 3796 ludovic_arnaud
{
333 4921 acydburn
        list($action, ) = each($action);
334 4496 ludovic_arnaud
}
335 5152 acydburn
unset($action_ary);
336 3796 ludovic_arnaud
337 4921 acydburn
if ($action == 'merge_select')
338 4921 acydburn
{
339 4921 acydburn
        $mode = 'forum_view';
340 4921 acydburn
}
341 3796 ludovic_arnaud
342 4924 acydburn
// Topic view modes
343 4923 acydburn
if (in_array($mode, array('split', 'split_all', 'split_beyond', 'merge', 'merge_posts')))
344 4923 acydburn
{
345 4923 acydburn
        $_REQUEST['action'] = $action = $mode;
346 4923 acydburn
        $mode = 'topic_view';
347 4924 acydburn
        $quickmod = false;
348 4923 acydburn
}
349 4923 acydburn
350 4924 acydburn
// Forum view modes
351 4924 acydburn
if (in_array($mode, array('resync')))
352 4924 acydburn
{
353 4924 acydburn
        $_REQUEST['action'] = $action = $mode;
354 4924 acydburn
        $mode = 'forum_view';
355 4924 acydburn
        $quickmod = false;
356 4924 acydburn
}
357 4924 acydburn
358 4921 acydburn
if (!$quickmod)
359 4921 acydburn
{
360 4921 acydburn
        $post_id = request_var('p', 0);
361 4921 acydburn
        $topic_id = request_var('t', 0);
362 4921 acydburn
        $forum_id = request_var('f', 0);
363 3796 ludovic_arnaud
364 5024 acydburn
        if ($post_id)
365 5024 acydburn
        {
366 5024 acydburn
                // We determine the topic and forum id here, to make sure the moderator really has moderative rights on this post
367 5024 acydburn
                $sql = 'SELECT topic_id, forum_id
368 5024 acydburn
                        FROM ' . POSTS_TABLE . "
369 5024 acydburn
                        WHERE post_id = $post_id";
370 5024 acydburn
                $result = $db->sql_query($sql);
371 5024 acydburn
                $row = $db->sql_fetchrow($result);
372 5024 acydburn
                $db->sql_freeresult($result);
373 5024 acydburn
374 5024 acydburn
                $topic_id = (int) $row['topic_id'];
375 5024 acydburn
                $forum_id = (int) $row['forum_id'];
376 5024 acydburn
        }
377 5024 acydburn
378 5024 acydburn
        if ($topic_id && !$forum_id)
379 5024 acydburn
        {
380 5024 acydburn
                $sql = 'SELECT forum_id
381 5024 acydburn
                        FROM ' . TOPICS_TABLE . "
382 5024 acydburn
                        WHERE topic_id = $topic_id";
383 5024 acydburn
                $result = $db->sql_query($sql);
384 5024 acydburn
                $row = $db->sql_fetchrow($result);
385 5024 acydburn
                $db->sql_freeresult($result);
386 5024 acydburn
387 5024 acydburn
                $forum_id = (int) $row['forum_id'];
388 5024 acydburn
        }
389 5024 acydburn
390 5024 acydburn
        // If we do not have a forum id and the user is not a super moderator (global options are set to false, even if the user is able to moderator at least one forum
391 5024 acydburn
        if (!$forum_id && !$auth->acl_get('m_'))
392 5024 acydburn
        {
393 5024 acydburn
                $forum_list = get_forum_list('m_');
394 5024 acydburn
395 5024 acydburn
                if (!sizeof($forum_list))
396 5024 acydburn
                {
397 5024 acydburn
                        trigger_error('MODULE_NOT_EXIST');
398 5024 acydburn
                }
399 5024 acydburn
400 5024 acydburn
                // We do not check all forums, only the first one should be sufficiant.
401 5024 acydburn
                $forum_id = $forum_list[0];
402 5024 acydburn
        }
403 5024 acydburn
404 4921 acydburn
        // Instantiate module system and generate list of available modules
405 4921 acydburn
        $mcp->create('mcp', "mcp.$phpEx$SID", $post_id, $topic_id, $forum_id, $module, $mode);
406 4921 acydburn
407 4921 acydburn
        // Load and execute the relevant module
408 4925 acydburn
        $mcp->load('mcp', false, $mode);
409 4921 acydburn
        exit;
410 4921 acydburn
}
411 4921 acydburn
412 4921 acydburn
switch ($mode)
413 4921 acydburn
{
414 4921 acydburn
        case 'lock':
415 4921 acydburn
        case 'unlock':
416 4921 acydburn
        case 'lock_post':
417 4921 acydburn
        case 'unlock_post':
418 4921 acydburn
                $mcp->load('mcp', 'main', $mode);
419 4921 acydburn
                break;
420 4921 acydburn
        case 'make_sticky':
421 4921 acydburn
        case 'make_announce':
422 4921 acydburn
        case 'make_global':
423 4921 acydburn
        case 'make_normal':
424 4921 acydburn
                $mcp->load('mcp', 'main', $mode);
425 4921 acydburn
                break;
426 4924 acydburn
        case 'fork':
427 4921 acydburn
        case 'move':
428 4921 acydburn
                $mcp->load('mcp', 'main', $mode);
429 4921 acydburn
                break;
430 4924 acydburn
        case 'delete_post':
431 4921 acydburn
        case 'delete_topic':
432 4921 acydburn
                $mcp->load('mcp', 'main', $mode);
433 4921 acydburn
                break;
434 4921 acydburn
        default:
435 4921 acydburn
                trigger_error("$mode not allowed as quickmod");
436 4921 acydburn
}
437 4921 acydburn
438 4924 acydburn
439 4924 acydburn
440 4924 acydburn
//
441 4924 acydburn
// LITTLE HELPER
442 4924 acydburn
443 5114 acydburn
/**
444 5114 acydburn
* Get simple topic data
445 5114 acydburn
*/
446 4924 acydburn
function get_topic_data($topic_ids, $acl_list = false)
447 4924 acydburn
{
448 4924 acydburn
        global $auth, $db;
449 4924 acydburn
        $rowset = array();
450 4924 acydburn
451 4924 acydburn
        if (implode(', ', $topic_ids) == '')
452 4924 acydburn
        {
453 4924 acydburn
                return array();
454 4924 acydburn
        }
455 4924 acydburn
456 4924 acydburn
        $sql = 'SELECT f.*, t.*
457 4924 acydburn
                FROM ' . TOPICS_TABLE . ' t
458 4924 acydburn
                        LEFT JOIN ' . FORUMS_TABLE . ' f ON t.forum_id = f.forum_id
459 4924 acydburn
                WHERE t.topic_id IN (' . implode(', ', $topic_ids) . ')';
460 4924 acydburn
        $result = $db->sql_query($sql);
461 4970 psotfx
462 4924 acydburn
        while ($row = $db->sql_fetchrow($result))
463 4924 acydburn
        {
464 4924 acydburn
                if ($acl_list && !$auth->acl_get($acl_list, $row['forum_id']))
465 4924 acydburn
                {
466 4924 acydburn
                        continue;
467 4924 acydburn
                }
468 4924 acydburn
469 4924 acydburn
                $rowset[$row['topic_id']] = $row;
470 4924 acydburn
        }
471 4924 acydburn
472 4924 acydburn
        return $rowset;
473 4924 acydburn
}
474 4924 acydburn
475 5114 acydburn
/**
476 5114 acydburn
* Get simple post data
477 5114 acydburn
*/
478 4924 acydburn
function get_post_data($post_ids, $acl_list = false)
479 4924 acydburn
{
480 4924 acydburn
        global $db, $auth;
481 4924 acydburn
        $rowset = array();
482 4924 acydburn
483 4924 acydburn
        $sql = 'SELECT p.*, u.*, t.*, f.*
484 4924 acydburn
                FROM ' . POSTS_TABLE . ' p, ' . USERS_TABLE . ' u, ' . TOPICS_TABLE . ' t
485 4924 acydburn
                        LEFT JOIN ' . FORUMS_TABLE . ' f ON f.forum_id = p.forum_id
486 4924 acydburn
                WHERE p.post_id IN (' . implode(', ', $post_ids) . ')
487 4924 acydburn
                        AND u.user_id = p.poster_id
488 4924 acydburn
                        AND t.topic_id = p.topic_id';
489 4924 acydburn
        $result = $db->sql_query($sql);
490 4970 psotfx
491 4924 acydburn
        while ($row = $db->sql_fetchrow($result))
492 4924 acydburn
        {
493 4924 acydburn
                if ($acl_list && !$auth->acl_get($acl_list, $row['forum_id']))
494 4924 acydburn
                {
495 4924 acydburn
                        continue;
496 4924 acydburn
                }
497 4924 acydburn
498 4924 acydburn
                if (!$row['post_approved'] && !$auth->acl_get('m_approve', $row['forum_id']))
499 4924 acydburn
                {
500 4924 acydburn
                        // Moderators without the permission to approve post should at least not see them. ;)
501 4924 acydburn
                        continue;
502 4924 acydburn
                }
503 4924 acydburn
504 4924 acydburn
                $rowset[$row['post_id']] = $row;
505 4924 acydburn
        }
506 4924 acydburn
507 4924 acydburn
        return $rowset;
508 4924 acydburn
}
509 4924 acydburn
510 5114 acydburn
/**
511 5114 acydburn
* Get simple forum data
512 5114 acydburn
*/
513 4924 acydburn
function get_forum_data($forum_id, $acl_list = 'f_list')
514 4924 acydburn
{
515 4924 acydburn
        global $auth, $db;
516 4924 acydburn
        $rowset = array();
517 4924 acydburn
518 4924 acydburn
        $sql = 'SELECT *
519 4924 acydburn
                FROM ' . FORUMS_TABLE . '
520 4924 acydburn
                WHERE forum_id ' . ((is_array($forum_id)) ? 'IN (' . implode(', ', $forum_id) . ')' : "= $forum_id");
521 4924 acydburn
        $result = $db->sql_query($sql);
522 4970 psotfx
523 4924 acydburn
        while ($row = $db->sql_fetchrow($result))
524 4924 acydburn
        {
525 4924 acydburn
                if ($acl_list && !$auth->acl_get($acl_list, $row['forum_id']))
526 4924 acydburn
                {
527 4924 acydburn
                        continue;
528 4924 acydburn
                }
529 4924 acydburn
                if ($auth->acl_get('m_approve', $row['forum_id']))
530 4924 acydburn
                {
531 4924 acydburn
                        $row['forum_topics'] = $row['forum_topics_real'];
532 4924 acydburn
                }
533 4924 acydburn
534 4924 acydburn
                $rowset[$row['forum_id']] = $row;
535 4924 acydburn
        }
536 4924 acydburn
537 4924 acydburn
        return $rowset;
538 4924 acydburn
}
539 4924 acydburn
540 5114 acydburn
/**
541 5114 acydburn
* sorting in mcp
542 5114 acydburn
*/
543 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')
544 4924 acydburn
{
545 4924 acydburn
        global $db, $user, $auth, $template;
546 4924 acydburn
547 4924 acydburn
        $sort_days = request_var('sort_days', 0);
548 4924 acydburn
        $min_time = ($sort_days) ? time() - ($sort_days * 86400) : 0;
549 4924 acydburn
550 4924 acydburn
        switch ($mode)
551 4924 acydburn
        {
552 4924 acydburn
                case 'viewforum':
553 4924 acydburn
                        $type = 'topics';
554 4924 acydburn
                        $default_key = 't';
555 4924 acydburn
                        $default_dir = 'd';
556 4924 acydburn
                        $sql = 'SELECT COUNT(topic_id) AS total
557 4924 acydburn
                                FROM ' . TOPICS_TABLE . "
558 4924 acydburn
                                $where_sql forum_id = $forum_id
559 4924 acydburn
                                        AND topic_type NOT IN (" . POST_ANNOUNCE . ', ' . POST_GLOBAL . ")
560 4924 acydburn
                                        AND topic_last_post_time >= $min_time";
561 4924 acydburn
562 4924 acydburn
                        if (!$auth->acl_get('m_approve', $forum_id))
563 4924 acydburn
                        {
564 4924 acydburn
                                $sql .= 'AND topic_approved = 1';
565 4924 acydburn
                        }
566 4924 acydburn
                        break;
567 4924 acydburn
568 4924 acydburn
                case 'viewtopic':
569 4924 acydburn
                        $type = 'posts';
570 4924 acydburn
                        $default_key = 't';
571 4924 acydburn
                        $default_dir = 'a';
572 4924 acydburn
                        $sql = 'SELECT COUNT(post_id) AS total
573 4924 acydburn
                                FROM ' . POSTS_TABLE . "
574 4924 acydburn
                                $where_sql topic_id = $topic_id
575 4924 acydburn
                                        AND post_time >= $min_time";
576 4924 acydburn
                        if (!$auth->acl_get('m_approve', $forum_id))
577 4924 acydburn
                        {
578 4924 acydburn
                                $sql .= 'AND post_approved = 1';
579 4924 acydburn
                        }
580 4924 acydburn
                        break;
581 4924 acydburn
582 4924 acydburn
                case 'unapproved_posts':
583 4924 acydburn
                        $type = 'posts';
584 4924 acydburn
                        $default_key = 't';
585 4924 acydburn
                        $default_dir = 'd';
586 4924 acydburn
                        $sql = 'SELECT COUNT(post_id) AS total
587 4924 acydburn
                                FROM ' . POSTS_TABLE . "
588 4924 acydburn
                                $where_sql forum_id IN (" . (($forum_id) ? $forum_id : implode(', ', get_forum_list('m_approve'))) . ')
589 4924 acydburn
                                        AND post_approved = 0
590 4924 acydburn
                                        AND post_time >= ' . $min_time;
591 4924 acydburn
                        break;
592 4924 acydburn
593 4924 acydburn
                case 'unapproved_topics':
594 4924 acydburn
                        $type = 'topics';
595 4924 acydburn
                        $default_key = 't';
596 4924 acydburn
                        $default_dir = 'd';
597 4924 acydburn
                        $sql = 'SELECT COUNT(topic_id) AS total
598 4924 acydburn
                                FROM ' . TOPICS_TABLE . "
599 4924 acydburn
                                $where_sql forum_id IN (" . (($forum_id) ? $forum_id : implode(', ', get_forum_list('m_approve'))) . ')
600 4924 acydburn
                                        AND topic_approved = 0
601 4924 acydburn
                                        AND topic_time >= ' . $min_time;
602 4924 acydburn
                        break;
603 4924 acydburn
604 4924 acydburn
                case 'reports':
605 4924 acydburn
                        $type = 'reports';
606 4924 acydburn
                        $default_key = 'p';
607 4924 acydburn
                        $default_dir = 'd';
608 4924 acydburn
                        $limit_time_sql = ($min_time) ? "AND r.report_time >= $min_time" : '';
609 4924 acydburn
610 4924 acydburn
                        if ($topic_id)
611 4924 acydburn
                        {
612 4924 acydburn
                                $where_sql .= ' p.topic_id = ' . $topic_id;
613 4924 acydburn
                        }
614 4924 acydburn
                        else if ($forum_id)
615 4924 acydburn
                        {
616 4924 acydburn
                                $where_sql .= ' p.forum_id = ' . $forum_id;
617 4924 acydburn
                        }
618 4924 acydburn
                        else
619 4924 acydburn
                        {
620 4924 acydburn
                                $where_sql .= ' p.forum_id IN (' . implode(', ', get_forum_list('m_')) . ')';
621 4924 acydburn
                        }
622 4924 acydburn
                        $sql = 'SELECT COUNT(r.report_id) AS total
623 4924 acydburn
                                FROM ' . REPORTS_TABLE . ' r, ' . POSTS_TABLE . " p
624 4924 acydburn
                                $where_sql
625 4924 acydburn
                                        AND p.post_id = r.post_id
626 4924 acydburn
                                        $limit_time_sql";
627 4924 acydburn
                        break;
628 4924 acydburn
629 4924 acydburn
                case 'viewlogs':
630 4924 acydburn
                        $type = 'logs';
631 4924 acydburn
                        $default_key = 't';
632 4924 acydburn
                        $default_dir = 'd';
633 4924 acydburn
                        $sql = 'SELECT COUNT(log_id) AS total
634 4924 acydburn
                                FROM ' . LOG_TABLE . "
635 4924 acydburn
                                $where_sql forum_id IN (" . (($forum_id) ? $forum_id : implode(', ', get_forum_list('m_'))) . ')
636 4970 psotfx
                                        AND log_time >= ' . $min_time . '
637 4924 acydburn
                                        AND log_type = ' . LOG_MOD;
638 4924 acydburn
                        break;
639 4924 acydburn
        }
640 4924 acydburn
641 4924 acydburn
        $sort_key = request_var('sk', $default_key);
642 4924 acydburn
        $sort_dir = request_var('sd', $default_dir);
643 4924 acydburn
        $sort_dir_text = array('a' => $user->lang['ASCENDING'], 'd' => $user->lang['DESCENDING']);
644 4924 acydburn
645 4924 acydburn
        switch ($type)
646 4924 acydburn
        {
647 4924 acydburn
                case 'topics':
648 4924 acydburn
                        $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'], 364 => $user->lang['1_YEAR']);
649 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']);
650 4924 acydburn
651 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');
652 4924 acydburn
                        $limit_time_sql = ($min_time) ? "AND t.topic_last_post_time >= $min_time" : '';
653 4924 acydburn
                        break;
654 4924 acydburn
655 4924 acydburn
                case 'posts':
656 4924 acydburn
                        $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'], 364 => $user->lang['1_YEAR']);
657 4924 acydburn
                        $sort_by_text = array('a' => $user->lang['AUTHOR'], 't' => $user->lang['POST_TIME'], 's' => $user->lang['SUBJECT']);
658 4924 acydburn
                        $sort_by_sql = array('a' => 'u.username', 't' => 'p.post_id', 's' => 'p.post_subject');
659 4924 acydburn
                        $limit_time_sql = ($min_time) ? "AND p.post_time >= $min_time" : '';
660 4924 acydburn
                        break;
661 4924 acydburn
662 4924 acydburn
                case 'reports':
663 4924 acydburn
                        $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'], 364 => $user->lang['1_YEAR']);
664 4924 acydburn
                        $sort_by_text = array('p' => $user->lang['REPORT_PRIORITY'], 'r' => $user->lang['REPORTER'], 't' => $user->lang['REPORT_TIME']);
665 4924 acydburn
                        $sort_by_sql = array('p' => 'rr.reason_priority', 'r' => 'u.username', 't' => 'r.report_time');
666 4924 acydburn
                        break;
667 4924 acydburn
668 4924 acydburn
                case 'logs':
669 4924 acydburn
                        $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'], 364 => $user->lang['1_YEAR']);
670 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']);
671 4924 acydburn
672 4924 acydburn
                        $sort_by_sql = array('u' => 'l.user_id', 't' => 'l.log_time', 'i' => 'l.log_ip', 'o' => 'l.log_operation');
673 4924 acydburn
                        $limit_time_sql = ($min_time) ? "AND l.log_time >= $min_time" : '';
674 4924 acydburn
                        break;
675 4924 acydburn
        }
676 4924 acydburn
677 4924 acydburn
        $sort_order_sql = $sort_by_sql[$sort_key] . ' ' . (($sort_dir == 'd') ? 'DESC' : 'ASC');
678 4924 acydburn
679 4924 acydburn
        $s_limit_days = $s_sort_key = $s_sort_dir = $sort_url = '';
680 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);
681 4924 acydburn
682 4924 acydburn
        $template->assign_vars(array(
683 4924 acydburn
                'S_SELECT_SORT_DIR'        =>        $s_sort_dir,
684 4924 acydburn
                'S_SELECT_SORT_KEY' =>        $s_sort_key,
685 4924 acydburn
                'S_SELECT_SORT_DAYS'=>        $s_limit_days)
686 4924 acydburn
        );
687 4924 acydburn
688 4924 acydburn
        if (($sort_days && $mode != 'viewlogs') || $mode == 'reports' || $where_sql != 'WHERE')
689 4924 acydburn
        {
690 4924 acydburn
                $result = $db->sql_query($sql);
691 4924 acydburn
                $total = ($row = $db->sql_fetchrow($result)) ? $row['total'] : 0;
692 4924 acydburn
        }
693 4924 acydburn
        else
694 4924 acydburn
        {
695 4924 acydburn
                $total = -1;
696 4924 acydburn
        }
697 4924 acydburn
}
698 4924 acydburn
699 5114 acydburn
/**
700 5114 acydburn
* Validate ids
701 5114 acydburn
*/
702 4924 acydburn
function check_ids(&$ids, $table, $sql_id, $acl_list = false)
703 4924 acydburn
{
704 4924 acydburn
        global $db, $auth;
705 4924 acydburn
706 4924 acydburn
        if (!is_array($ids) || !$ids)
707 4924 acydburn
        {
708 4924 acydburn
                return 0;
709 4924 acydburn
        }
710 4924 acydburn
711 4924 acydburn
        // a small logical error, since global announcement are assigned to forum_id == 0
712 4924 acydburn
        // If the first topic id is a global announcement, we can force the forum. Though only global announcements can be
713 4924 acydburn
        // tricked... i really do not know how to prevent this atm.
714 4924 acydburn
715 4924 acydburn
        // With those two queries we make sure all ids are within one forum...
716 4924 acydburn
        $sql = "SELECT forum_id FROM $table
717 4924 acydburn
                WHERE $sql_id = {$ids[0]}";
718 4924 acydburn
        $result = $db->sql_query($sql);
719 4924 acydburn
        $forum_id = (int) $db->sql_fetchfield('forum_id', 0, $result);
720 4924 acydburn
        $db->sql_freeresult($result);
721 4924 acydburn
722 4924 acydburn
        if (!$forum_id)
723 4924 acydburn
        {
724 4924 acydburn
                // Global Announcement?
725 4924 acydburn
                $forum_id = request_var('f', 0);
726 4924 acydburn
        }
727 4924 acydburn
728 4924 acydburn
        if ($acl_list && !$auth->acl_get($acl_list, $forum_id))
729 4924 acydburn
        {
730 4924 acydburn
                trigger_error('NOT_AUTHORIZED');
731 4924 acydburn
        }
732 4924 acydburn
733 4924 acydburn
        if (!$forum_id)
734 4924 acydburn
        {
735 4924 acydburn
                trigger_error('Missing forum_id, has to be in url if global announcement...');
736 4924 acydburn
        }
737 4924 acydburn
738 4924 acydburn
        $sql = "SELECT $sql_id FROM $table
739 4924 acydburn
                WHERE $sql_id IN (" . implode(', ', $ids) . ")
740 4924 acydburn
                        AND (forum_id = $forum_id OR forum_id = 0)";
741 4924 acydburn
        $result = $db->sql_query($sql);
742 4924 acydburn
743 4924 acydburn
        $ids = array();
744 4924 acydburn
        while ($row = $db->sql_fetchrow($result))
745 4924 acydburn
        {
746 4924 acydburn
                $ids[] = $row[$sql_id];
747 4924 acydburn
        }
748 4924 acydburn
        $db->sql_freeresult($result);
749 4924 acydburn
750 4924 acydburn
        return $forum_id;
751 4924 acydburn
}
752 4924 acydburn
753 4924 acydburn
// LITTLE HELPER
754 4924 acydburn
//
755 4924 acydburn
756 3281 psotfx
?>