~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to www/php/phpBB3/includes/mcp/mcp_main.php

  • Committer: William Grant
  • Date: 2009-02-23 23:47:02 UTC
  • mfrom: (1099.1.211 new-dispatch)
  • Revision ID: grantw@unimelb.edu.au-20090223234702-db4b1llly46ignwo
Merge from lp:~ivle-dev/ivle/new-dispatch.

Pretty much everything changes. Reread the setup docs. Backup your databases.
Every file is now in a different installed location, the configuration system
is rewritten, the dispatch system is rewritten, URLs are different, the
database is different, worksheets and exercises are no longer on the
filesystem, we use a templating engine, jail service protocols are rewritten,
we don't repeat ourselves, we have authorization rewritten, phpBB is gone,
and probably lots of other things that I cannot remember.

This is certainly the biggest commit I have ever made, and hopefully
the largest I ever will.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<?php
2
 
/**
3
 
*
4
 
* @package mcp
5
 
* @version $Id: mcp_main.php,v 1.73 2007/10/05 14:36:33 acydburn Exp $
6
 
* @copyright (c) 2005 phpBB Group
7
 
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
8
 
*
9
 
*/
10
 
 
11
 
/**
12
 
* @ignore
13
 
*/
14
 
if (!defined('IN_PHPBB'))
15
 
{
16
 
        exit;
17
 
}
18
 
 
19
 
/**
20
 
* mcp_main
21
 
* Handling mcp actions
22
 
* @package mcp
23
 
*/
24
 
class mcp_main
25
 
{
26
 
        var $p_master;
27
 
        var $u_action;
28
 
 
29
 
        function mcp_main(&$p_master)
30
 
        {
31
 
                $this->p_master = &$p_master;
32
 
        }
33
 
 
34
 
        function main($id, $mode)
35
 
        {
36
 
                global $auth, $db, $user, $template, $action;
37
 
                global $config, $phpbb_root_path, $phpEx;
38
 
 
39
 
                $quickmod = ($mode == 'quickmod') ? true : false;
40
 
 
41
 
                switch ($action)
42
 
                {
43
 
                        case 'lock':
44
 
                        case 'unlock':
45
 
                                $topic_ids = (!$quickmod) ? request_var('topic_id_list', array(0)) : array(request_var('t', 0));
46
 
 
47
 
                                if (!sizeof($topic_ids))
48
 
                                {
49
 
                                        trigger_error('NO_TOPIC_SELECTED');
50
 
                                }
51
 
 
52
 
                                lock_unlock($action, $topic_ids);
53
 
                        break;
54
 
 
55
 
                        case 'lock_post':
56
 
                        case 'unlock_post':
57
 
 
58
 
                                $post_ids = (!$quickmod) ? request_var('post_id_list', array(0)) : array(request_var('p', 0));
59
 
 
60
 
                                if (!sizeof($post_ids))
61
 
                                {
62
 
                                        trigger_error('NO_POST_SELECTED');
63
 
                                }
64
 
 
65
 
                                lock_unlock($action, $post_ids);
66
 
                        break;
67
 
 
68
 
                        case 'make_announce':
69
 
                        case 'make_sticky':
70
 
                        case 'make_global':
71
 
                        case 'make_normal':
72
 
 
73
 
                                $topic_ids = (!$quickmod) ? request_var('topic_id_list', array(0)) : array(request_var('t', 0));
74
 
 
75
 
                                if (!sizeof($topic_ids))
76
 
                                {
77
 
                                        trigger_error('NO_TOPIC_SELECTED');
78
 
                                }
79
 
 
80
 
                                change_topic_type($action, $topic_ids);
81
 
                        break;
82
 
 
83
 
                        case 'move':
84
 
                                $user->add_lang('viewtopic');
85
 
 
86
 
                                $topic_ids = (!$quickmod) ? request_var('topic_id_list', array(0)) : array(request_var('t', 0));
87
 
 
88
 
                                if (!sizeof($topic_ids))
89
 
                                {
90
 
                                        trigger_error('NO_TOPIC_SELECTED');
91
 
                                }
92
 
 
93
 
                                mcp_move_topic($topic_ids);
94
 
                        break;
95
 
 
96
 
                        case 'fork':
97
 
                                $user->add_lang('viewtopic');
98
 
 
99
 
                                $topic_ids = (!$quickmod) ? request_var('topic_id_list', array(0)) : array(request_var('t', 0));
100
 
 
101
 
                                if (!sizeof($topic_ids))
102
 
                                {
103
 
                                        trigger_error('NO_TOPIC_SELECTED');
104
 
                                }
105
 
 
106
 
                                mcp_fork_topic($topic_ids);
107
 
                        break;
108
 
 
109
 
                        case 'delete_topic':
110
 
                                $user->add_lang('viewtopic');
111
 
 
112
 
                                $topic_ids = (!$quickmod) ? request_var('topic_id_list', array(0)) : array(request_var('t', 0));
113
 
 
114
 
                                if (!sizeof($topic_ids))
115
 
                                {
116
 
                                        trigger_error('NO_TOPIC_SELECTED');
117
 
                                }
118
 
 
119
 
                                mcp_delete_topic($topic_ids);
120
 
                        break;
121
 
 
122
 
                        case 'delete_post':
123
 
                                $user->add_lang('posting');
124
 
 
125
 
                                $post_ids = (!$quickmod) ? request_var('post_id_list', array(0)) : array(request_var('p', 0));
126
 
 
127
 
                                if (!sizeof($post_ids))
128
 
                                {
129
 
                                        trigger_error('NO_POST_SELECTED');
130
 
                                }
131
 
 
132
 
                                mcp_delete_post($post_ids);
133
 
                        break;
134
 
                }
135
 
 
136
 
                switch ($mode)
137
 
                {
138
 
                        case 'front':
139
 
                                include($phpbb_root_path . 'includes/mcp/mcp_front.' . $phpEx);
140
 
 
141
 
                                $user->add_lang('acp/common');
142
 
 
143
 
                                mcp_front_view($id, $mode, $action);
144
 
 
145
 
                                $this->tpl_name = 'mcp_front';
146
 
                                $this->page_title = 'MCP_MAIN';
147
 
                        break;
148
 
 
149
 
                        case 'forum_view':
150
 
                                include($phpbb_root_path . 'includes/mcp/mcp_forum.' . $phpEx);
151
 
 
152
 
                                $user->add_lang('viewforum');
153
 
 
154
 
                                $forum_id = request_var('f', 0);
155
 
 
156
 
                                $forum_info = get_forum_data($forum_id, 'm_', true);
157
 
 
158
 
                                if (!sizeof($forum_info))
159
 
                                {
160
 
                                        $this->main('main', 'front');
161
 
                                        return;
162
 
                                }
163
 
 
164
 
                                $forum_info = $forum_info[$forum_id];
165
 
 
166
 
                                mcp_forum_view($id, $mode, $action, $forum_info);
167
 
 
168
 
                                $this->tpl_name = 'mcp_forum';
169
 
                                $this->page_title = 'MCP_MAIN_FORUM_VIEW';
170
 
                        break;
171
 
 
172
 
                        case 'topic_view':
173
 
                                include($phpbb_root_path . 'includes/mcp/mcp_topic.' . $phpEx);
174
 
 
175
 
                                mcp_topic_view($id, $mode, $action);
176
 
 
177
 
                                $this->tpl_name = 'mcp_topic';
178
 
                                $this->page_title = 'MCP_MAIN_TOPIC_VIEW';
179
 
                        break;
180
 
 
181
 
                        case 'post_details':
182
 
                                include($phpbb_root_path . 'includes/mcp/mcp_post.' . $phpEx);
183
 
 
184
 
                                mcp_post_details($id, $mode, $action);
185
 
 
186
 
                                $this->tpl_name = ($action == 'whois') ? 'mcp_whois' : 'mcp_post';
187
 
                                $this->page_title = 'MCP_MAIN_POST_DETAILS';
188
 
                        break;
189
 
 
190
 
                        default:
191
 
                                trigger_error('NO_MODE', E_USER_ERROR);
192
 
                        break;
193
 
                }
194
 
        }
195
 
}
196
 
 
197
 
/**
198
 
* Lock/Unlock Topic/Post
199
 
*/
200
 
function lock_unlock($action, $ids)
201
 
{
202
 
        global $auth, $user, $db, $phpEx, $phpbb_root_path;
203
 
 
204
 
        if ($action == 'lock' || $action == 'unlock')
205
 
        {
206
 
                $table = TOPICS_TABLE;
207
 
                $sql_id = 'topic_id';
208
 
                $set_id = 'topic_status';
209
 
                $l_prefix = 'TOPIC';
210
 
        }
211
 
        else
212
 
        {
213
 
                $table = POSTS_TABLE;
214
 
                $sql_id = 'post_id';
215
 
                $set_id = 'post_edit_locked';
216
 
                $l_prefix = 'POST';
217
 
        }
218
 
 
219
 
        $orig_ids = $ids;
220
 
 
221
 
        if (!check_ids($ids, $table, $sql_id, array('m_lock')))
222
 
        {
223
 
                // Make sure that for f_user_lock only the lock action is triggered.
224
 
                if ($action != 'lock')
225
 
                {
226
 
                        return;
227
 
                }
228
 
 
229
 
                $ids = $orig_ids;
230
 
 
231
 
                if (!check_ids($ids, $table, $sql_id, array('f_user_lock')))
232
 
                {
233
 
                        return;
234
 
                }
235
 
        }
236
 
        unset($orig_ids);
237
 
 
238
 
        $redirect = request_var('redirect', build_url(array('_f_', 'action', 'quickmod')));
239
 
 
240
 
        $s_hidden_fields = build_hidden_fields(array(
241
 
                $sql_id . '_list'       => $ids,
242
 
                'action'                        => $action,
243
 
                'redirect'                      => $redirect)
244
 
        );
245
 
        $success_msg = '';
246
 
 
247
 
        if (confirm_box(true))
248
 
        {
249
 
                $sql = "UPDATE $table
250
 
                        SET $set_id = " . (($action == 'lock' || $action == 'lock_post') ? ITEM_LOCKED : ITEM_UNLOCKED) . '
251
 
                        WHERE ' . $db->sql_in_set($sql_id, $ids);
252
 
                $db->sql_query($sql);
253
 
 
254
 
                $data = ($action == 'lock' || $action == 'unlock') ? get_topic_data($ids) : get_post_data($ids);
255
 
 
256
 
                foreach ($data as $id => $row)
257
 
                {
258
 
                        add_log('mod', $row['forum_id'], $row['topic_id'], 'LOG_' . strtoupper($action), $row['topic_title']);
259
 
                }
260
 
 
261
 
                $success_msg = $l_prefix . ((sizeof($ids) == 1) ? '' : 'S') . '_' . (($action == 'lock' || $action == 'lock_post') ? 'LOCKED' : 'UNLOCKED') . '_SUCCESS';
262
 
        }
263
 
        else
264
 
        {
265
 
                confirm_box(false, strtoupper($action) . '_' . $l_prefix . ((sizeof($ids) == 1) ? '' : 'S'), $s_hidden_fields);
266
 
        }
267
 
 
268
 
        $redirect = request_var('redirect', "index.$phpEx");
269
 
        $redirect = reapply_sid($redirect);
270
 
 
271
 
        if (!$success_msg)
272
 
        {
273
 
                redirect($redirect);
274
 
        }
275
 
        else
276
 
        {
277
 
                meta_refresh(2, $redirect);
278
 
                trigger_error($user->lang[$success_msg] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $redirect . '">', '</a>'));
279
 
        }
280
 
}
281
 
 
282
 
/**
283
 
* Change Topic Type
284
 
*/
285
 
function change_topic_type($action, $topic_ids)
286
 
{
287
 
        global $auth, $user, $db, $phpEx, $phpbb_root_path;
288
 
 
289
 
        // For changing topic types, we only allow operations in one forum.
290
 
        $forum_id = check_ids($topic_ids, TOPICS_TABLE, 'topic_id', array('f_announce', 'f_sticky', 'm_'), true);
291
 
 
292
 
        if ($forum_id === false)
293
 
        {
294
 
                return;
295
 
        }
296
 
 
297
 
        switch ($action)
298
 
        {
299
 
                case 'make_announce':
300
 
                        $new_topic_type = POST_ANNOUNCE;
301
 
                        $check_acl = 'f_announce';
302
 
                        $l_new_type = (sizeof($topic_ids) == 1) ? 'MCP_MAKE_ANNOUNCEMENT' : 'MCP_MAKE_ANNOUNCEMENTS';
303
 
                break;
304
 
 
305
 
                case 'make_global':
306
 
                        $new_topic_type = POST_GLOBAL;
307
 
                        $check_acl = 'f_announce';
308
 
                        $l_new_type = (sizeof($topic_ids) == 1) ? 'MCP_MAKE_GLOBAL' : 'MCP_MAKE_GLOBALS';
309
 
                break;
310
 
 
311
 
                case 'make_sticky':
312
 
                        $new_topic_type = POST_STICKY;
313
 
                        $check_acl = 'f_sticky';
314
 
                        $l_new_type = (sizeof($topic_ids) == 1) ? 'MCP_MAKE_STICKY' : 'MCP_MAKE_STICKIES';
315
 
                break;
316
 
 
317
 
                default:
318
 
                        $new_topic_type = POST_NORMAL;
319
 
                        $check_acl = '';
320
 
                        $l_new_type = (sizeof($topic_ids) == 1) ? 'MCP_MAKE_NORMAL' : 'MCP_MAKE_NORMALS';
321
 
                break;
322
 
        }
323
 
 
324
 
        $redirect = request_var('redirect', build_url(array('_f_', 'action', 'quickmod')));
325
 
 
326
 
        $s_hidden_fields = array(
327
 
                'topic_id_list' => $topic_ids,
328
 
                'f'                             => $forum_id,
329
 
                'action'                => $action,
330
 
                'redirect'              => $redirect,
331
 
        );
332
 
        $success_msg = '';
333
 
 
334
 
        if (confirm_box(true))
335
 
        {
336
 
                if ($new_topic_type != POST_GLOBAL)
337
 
                {
338
 
                        $sql = 'UPDATE ' . TOPICS_TABLE . "
339
 
                                SET topic_type = $new_topic_type
340
 
                                WHERE " . $db->sql_in_set('topic_id', $topic_ids) . '
341
 
                                        AND forum_id <> 0';
342
 
                        $db->sql_query($sql);
343
 
 
344
 
                        // Reset forum id if a global topic is within the array
345
 
                        $to_forum_id = request_var('to_forum_id', 0);
346
 
 
347
 
                        if ($to_forum_id)
348
 
                        {
349
 
                                $sql = 'UPDATE ' . TOPICS_TABLE . "
350
 
                                        SET topic_type = $new_topic_type, forum_id = $to_forum_id
351
 
                                        WHERE " . $db->sql_in_set('topic_id', $topic_ids) . '
352
 
                                                AND forum_id = 0';
353
 
                                $db->sql_query($sql);
354
 
 
355
 
                                // Update forum_ids for all posts
356
 
                                $sql = 'UPDATE ' . POSTS_TABLE . "
357
 
                                        SET forum_id = $to_forum_id
358
 
                                        WHERE " . $db->sql_in_set('topic_id', $topic_ids) . '
359
 
                                                AND forum_id = 0';
360
 
                                $db->sql_query($sql);
361
 
 
362
 
                                // Do a little forum sync stuff
363
 
                                $sql = 'SELECT SUM(t.topic_replies + t.topic_approved) as topic_posts, COUNT(t.topic_approved) as topics_authed
364
 
                                        FROM ' . TOPICS_TABLE . ' t
365
 
                                        WHERE ' . $db->sql_in_set('t.topic_id', $topic_ids);
366
 
                                $result = $db->sql_query($sql);
367
 
                                $row_data = $db->sql_fetchrow($result);
368
 
                                $db->sql_freeresult($result);
369
 
 
370
 
                                $sync_sql = array();
371
 
 
372
 
                                if ($row_data['topic_posts'])
373
 
                                {
374
 
                                        $sync_sql[$to_forum_id][]       = 'forum_posts = forum_posts + ' . (int) $row_data['topic_posts'];
375
 
                                }
376
 
 
377
 
                                if ($row_data['topics_authed'])
378
 
                                {
379
 
                                        $sync_sql[$to_forum_id][]       = 'forum_topics = forum_topics + ' . (int) $row_data['topics_authed'];
380
 
                                }
381
 
 
382
 
                                $sync_sql[$to_forum_id][]       = 'forum_topics_real = forum_topics_real + ' . (int) sizeof($topic_ids);
383
 
 
384
 
                                foreach ($sync_sql as $forum_id_key => $array)
385
 
                                {
386
 
                                        $sql = 'UPDATE ' . FORUMS_TABLE . '
387
 
                                                SET ' . implode(', ', $array) . '
388
 
                                                WHERE forum_id = ' . $forum_id_key;
389
 
                                        $db->sql_query($sql);
390
 
                                }
391
 
 
392
 
                                sync('forum', 'forum_id', $to_forum_id);
393
 
                        }
394
 
                }
395
 
                else
396
 
                {
397
 
                        // Get away with those topics already being a global announcement by re-calculating $topic_ids
398
 
                        $sql = 'SELECT topic_id
399
 
                                FROM ' . TOPICS_TABLE . '
400
 
                                WHERE ' . $db->sql_in_set('topic_id', $topic_ids) . '
401
 
                                        AND forum_id <> 0';
402
 
                        $result = $db->sql_query($sql);
403
 
 
404
 
                        $topic_ids = array();
405
 
                        while ($row = $db->sql_fetchrow($result))
406
 
                        {
407
 
                                $topic_ids[] = $row['topic_id'];
408
 
                        }
409
 
                        $db->sql_freeresult($result);
410
 
 
411
 
                        if (sizeof($topic_ids))
412
 
                        {
413
 
                                // Delete topic shadows for global announcements
414
 
                                $sql = 'DELETE FROM ' . TOPICS_TABLE . '
415
 
                                        WHERE ' . $db->sql_in_set('topic_moved_id', $topic_ids);
416
 
                                $db->sql_query($sql);
417
 
 
418
 
                                $sql = 'UPDATE ' . TOPICS_TABLE . "
419
 
                                        SET topic_type = $new_topic_type, forum_id = 0
420
 
                                                WHERE " . $db->sql_in_set('topic_id', $topic_ids);
421
 
                                $db->sql_query($sql);
422
 
 
423
 
                                // Update forum_ids for all posts
424
 
                                $sql = 'UPDATE ' . POSTS_TABLE . '
425
 
                                        SET forum_id = 0
426
 
                                        WHERE ' . $db->sql_in_set('topic_id', $topic_ids);
427
 
                                $db->sql_query($sql);
428
 
 
429
 
                                // Do a little forum sync stuff
430
 
                                $sql = 'SELECT SUM(t.topic_replies + t.topic_approved) as topic_posts, COUNT(t.topic_approved) as topics_authed
431
 
                                        FROM ' . TOPICS_TABLE . ' t
432
 
                                        WHERE ' . $db->sql_in_set('t.topic_id', $topic_ids);
433
 
                                $result = $db->sql_query($sql);
434
 
                                $row_data = $db->sql_fetchrow($result);
435
 
                                $db->sql_freeresult($result);
436
 
 
437
 
                                $sync_sql = array();
438
 
 
439
 
                                if ($row_data['topic_posts'])
440
 
                                {
441
 
                                        $sync_sql[$forum_id][]  = 'forum_posts = forum_posts - ' . (int) $row_data['topic_posts'];
442
 
                                }
443
 
 
444
 
                                if ($row_data['topics_authed'])
445
 
                                {
446
 
                                        $sync_sql[$forum_id][]  = 'forum_topics = forum_topics - ' . (int) $row_data['topics_authed'];
447
 
                                }
448
 
 
449
 
                                $sync_sql[$forum_id][]  = 'forum_topics_real = forum_topics_real - ' . (int) sizeof($topic_ids);
450
 
 
451
 
                                foreach ($sync_sql as $forum_id_key => $array)
452
 
                                {
453
 
                                        $sql = 'UPDATE ' . FORUMS_TABLE . '
454
 
                                                SET ' . implode(', ', $array) . '
455
 
                                                WHERE forum_id = ' . $forum_id_key;
456
 
                                        $db->sql_query($sql);
457
 
                                }
458
 
 
459
 
                                sync('forum', 'forum_id', $forum_id);
460
 
                        }
461
 
                }
462
 
 
463
 
                $success_msg = (sizeof($topic_ids) == 1) ? 'TOPIC_TYPE_CHANGED' : 'TOPICS_TYPE_CHANGED';
464
 
 
465
 
                if (sizeof($topic_ids))
466
 
                {
467
 
                        $data = get_topic_data($topic_ids);
468
 
 
469
 
                        foreach ($data as $topic_id => $row)
470
 
                        {
471
 
                                add_log('mod', $forum_id, $topic_id, 'LOG_TOPIC_TYPE_CHANGED', $row['topic_title']);
472
 
                        }
473
 
                }
474
 
        }
475
 
        else
476
 
        {
477
 
                // Global topic involved?
478
 
                $global_involved = false;
479
 
 
480
 
                if ($new_topic_type != POST_GLOBAL)
481
 
                {
482
 
                        $sql = 'SELECT forum_id
483
 
                                FROM ' . TOPICS_TABLE . '
484
 
                                WHERE ' . $db->sql_in_set('topic_id', $topic_ids) . '
485
 
                                        AND forum_id = 0';
486
 
                        $result = $db->sql_query($sql);
487
 
                        $row = $db->sql_fetchrow($result);
488
 
                        $db->sql_freeresult($result);
489
 
 
490
 
                        if ($row)
491
 
                        {
492
 
                                $global_involved = true;
493
 
                        }
494
 
                }
495
 
 
496
 
                if ($global_involved)
497
 
                {
498
 
                        global $template;
499
 
 
500
 
                        $template->assign_vars(array(
501
 
                                'S_FORUM_SELECT'                => make_forum_select(request_var('f', $forum_id), false, false, true, true),
502
 
                                'S_CAN_LEAVE_SHADOW'    => false,
503
 
                                'ADDITIONAL_MSG'                => (sizeof($topic_ids) == 1) ? $user->lang['SELECT_FORUM_GLOBAL_ANNOUNCEMENT'] : $user->lang['SELECT_FORUM_GLOBAL_ANNOUNCEMENTS'])
504
 
                        );
505
 
 
506
 
                        confirm_box(false, $l_new_type, build_hidden_fields($s_hidden_fields), 'mcp_move.html');
507
 
                }
508
 
                else
509
 
                {
510
 
                        confirm_box(false, $l_new_type, build_hidden_fields($s_hidden_fields));
511
 
                }
512
 
        }
513
 
 
514
 
        $redirect = request_var('redirect', "index.$phpEx");
515
 
        $redirect = reapply_sid($redirect);
516
 
 
517
 
        if (!$success_msg)
518
 
        {
519
 
                redirect($redirect);
520
 
        }
521
 
        else
522
 
        {
523
 
                meta_refresh(2, $redirect);
524
 
                trigger_error($user->lang[$success_msg] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $redirect . '">', '</a>'));
525
 
        }
526
 
}
527
 
 
528
 
/**
529
 
* Move Topic
530
 
*/
531
 
function mcp_move_topic($topic_ids)
532
 
{
533
 
        global $auth, $user, $db, $template;
534
 
        global $phpEx, $phpbb_root_path;
535
 
 
536
 
        // Here we limit the operation to one forum only
537
 
        $forum_id = check_ids($topic_ids, TOPICS_TABLE, 'topic_id', array('m_move'), true);
538
 
 
539
 
        if ($forum_id === false)
540
 
        {
541
 
                return;
542
 
        }
543
 
 
544
 
        $to_forum_id = request_var('to_forum_id', 0);
545
 
        $redirect = request_var('redirect', build_url(array('_f_', 'action', 'quickmod')));
546
 
        $additional_msg = $success_msg = '';
547
 
 
548
 
        $s_hidden_fields = build_hidden_fields(array(
549
 
                'topic_id_list' => $topic_ids,
550
 
                'f'                             => $forum_id,
551
 
                'action'                => 'move',
552
 
                'redirect'              => $redirect)
553
 
        );
554
 
 
555
 
        if ($to_forum_id)
556
 
        {
557
 
                $forum_data = get_forum_data($to_forum_id);
558
 
 
559
 
                if (!sizeof($forum_data))
560
 
                {
561
 
                        $additional_msg = $user->lang['FORUM_NOT_EXIST'];
562
 
                }
563
 
                else
564
 
                {
565
 
                        $forum_data = $forum_data[$to_forum_id];
566
 
 
567
 
                        if ($forum_data['forum_type'] != FORUM_POST)
568
 
                        {
569
 
                                $additional_msg = $user->lang['FORUM_NOT_POSTABLE'];
570
 
                        }
571
 
                        else if (!$auth->acl_get('f_post', $to_forum_id))
572
 
                        {
573
 
                                $additional_msg = $user->lang['USER_CANNOT_POST'];
574
 
                        }
575
 
                        else if ($forum_id == $to_forum_id)
576
 
                        {
577
 
                                $additional_msg = $user->lang['CANNOT_MOVE_SAME_FORUM'];
578
 
                        }
579
 
                }
580
 
        }
581
 
        else if (isset($_POST['confirm']))
582
 
        {
583
 
                $additional_msg = $user->lang['FORUM_NOT_EXIST'];
584
 
        }
585
 
 
586
 
        if (!$to_forum_id || $additional_msg)
587
 
        {
588
 
                unset($_POST['confirm']);
589
 
                unset($_REQUEST['confirm_key']);
590
 
        }
591
 
 
592
 
        if (confirm_box(true))
593
 
        {
594
 
                $topic_data = get_topic_data($topic_ids);
595
 
                $leave_shadow = (isset($_POST['move_leave_shadow'])) ? true : false;
596
 
 
597
 
                $topics_moved = sizeof($topic_ids);
598
 
                $topics_authed_moved = 0;
599
 
                $forum_sync_data = array();
600
 
 
601
 
                $forum_sync_data[$forum_id] = current($topic_data);
602
 
                $forum_sync_data[$to_forum_id] = $forum_data;
603
 
 
604
 
                foreach ($topic_data as $topic_id => $topic_info)
605
 
                {
606
 
                        if ($topic_info['topic_approved'] == '1')
607
 
                        {
608
 
                                $topics_authed_moved++;
609
 
                        }
610
 
                }
611
 
 
612
 
                $db->sql_transaction('begin');
613
 
 
614
 
                $sql = 'SELECT SUM(t.topic_replies + t.topic_approved) as topic_posts
615
 
                        FROM ' . TOPICS_TABLE . ' t
616
 
                        WHERE ' . $db->sql_in_set('t.topic_id', $topic_ids);
617
 
                $result = $db->sql_query($sql);
618
 
                $row_data = $db->sql_fetchrow($result);
619
 
                $db->sql_freeresult($result);
620
 
 
621
 
                $sync_sql = array();
622
 
 
623
 
                if ($row_data['topic_posts'])
624
 
                {
625
 
                        $sync_sql[$forum_id][]          = 'forum_posts = forum_posts - ' . (int) $row_data['topic_posts'];
626
 
                        $sync_sql[$to_forum_id][]       = 'forum_posts = forum_posts + ' . (int) $row_data['topic_posts'];
627
 
                }
628
 
 
629
 
                if ($topics_authed_moved)
630
 
                {
631
 
                        $sync_sql[$to_forum_id][]       = 'forum_topics = forum_topics + ' . (int) $topics_authed_moved;
632
 
                }
633
 
 
634
 
                $sync_sql[$to_forum_id][]       = 'forum_topics_real = forum_topics_real + ' . (int) $topics_moved;
635
 
 
636
 
                // Move topics, but do not resync yet
637
 
                move_topics($topic_ids, $to_forum_id, false);
638
 
 
639
 
                $forum_ids = array($to_forum_id);
640
 
                foreach ($topic_data as $topic_id => $row)
641
 
                {
642
 
                        // Get the list of forums to resync, add a log entry
643
 
                        $forum_ids[] = $row['forum_id'];
644
 
                        add_log('mod', $to_forum_id, $topic_id, 'LOG_MOVE', $row['forum_name']);
645
 
 
646
 
                        // If we have moved a global announcement, we need to correct the topic type
647
 
                        if ($row['topic_type'] == POST_GLOBAL)
648
 
                        {
649
 
                                $sql = 'UPDATE ' . TOPICS_TABLE . '
650
 
                                        SET topic_type = ' . POST_ANNOUNCE . '
651
 
                                        WHERE topic_id = ' . (int) $row['topic_id'];
652
 
                                $db->sql_query($sql);
653
 
                        }
654
 
 
655
 
                        // Leave a redirection if required and only if the topic is visible to users
656
 
                        if ($leave_shadow && $row['topic_approved'] && $row['topic_type'] != POST_GLOBAL)
657
 
                        {
658
 
                                $shadow = array(
659
 
                                        'forum_id'                              =>      (int) $row['forum_id'],
660
 
                                        'icon_id'                               =>      (int) $row['icon_id'],
661
 
                                        'topic_attachment'              =>      (int) $row['topic_attachment'],
662
 
                                        'topic_approved'                =>      1,
663
 
                                        'topic_reported'                =>      (int) $row['topic_reported'],
664
 
                                        'topic_title'                   =>      (string) $row['topic_title'],
665
 
                                        'topic_poster'                  =>      (int) $row['topic_poster'],
666
 
                                        'topic_time'                    =>      (int) $row['topic_time'],
667
 
                                        'topic_time_limit'              =>      (int) $row['topic_time_limit'],
668
 
                                        'topic_views'                   =>      (int) $row['topic_views'],
669
 
                                        'topic_replies'                 =>      (int) $row['topic_replies'],
670
 
                                        'topic_replies_real'    =>      (int) $row['topic_replies_real'],
671
 
                                        'topic_status'                  =>      ITEM_MOVED,
672
 
                                        'topic_type'                    =>      POST_NORMAL,
673
 
                                        'topic_first_post_id'   =>      (int) $row['topic_first_post_id'],
674
 
                                        'topic_first_poster_colour'=>(string) $row['topic_first_poster_colour'],
675
 
                                        'topic_first_poster_name'=>     (string) $row['topic_first_poster_name'],
676
 
                                        'topic_last_post_id'    =>      (int) $row['topic_last_post_id'],
677
 
                                        'topic_last_poster_id'  =>      (int) $row['topic_last_poster_id'],
678
 
                                        'topic_last_poster_colour'=>(string) $row['topic_last_poster_colour'],
679
 
                                        'topic_last_poster_name'=>      (string) $row['topic_last_poster_name'],
680
 
                                        'topic_last_post_subject'=>     (string)  $row['topic_last_post_subject'],
681
 
                                        'topic_last_post_time'  =>      (int) $row['topic_last_post_time'],
682
 
                                        'topic_last_view_time'  =>      (int) $row['topic_last_view_time'],
683
 
                                        'topic_moved_id'                =>      (int) $row['topic_id'],
684
 
                                        'topic_bumped'                  =>      (int) $row['topic_bumped'],
685
 
                                        'topic_bumper'                  =>      (int) $row['topic_bumper'],
686
 
                                        'poll_title'                    =>      (string) $row['poll_title'],
687
 
                                        'poll_start'                    =>      (int) $row['poll_start'],
688
 
                                        'poll_length'                   =>      (int) $row['poll_length'],
689
 
                                        'poll_max_options'              =>      (int) $row['poll_max_options'],
690
 
                                        'poll_last_vote'                =>      (int) $row['poll_last_vote']
691
 
                                );
692
 
 
693
 
                                $db->sql_query('INSERT INTO ' . TOPICS_TABLE . $db->sql_build_array('INSERT', $shadow));
694
 
 
695
 
                                $topics_authed_moved--;
696
 
                                $topics_moved--;
697
 
                        }
698
 
                }
699
 
                unset($topic_data);
700
 
 
701
 
                $sync_sql[$forum_id][]  = 'forum_topics_real = forum_topics_real - ' . (int) $topics_moved;
702
 
 
703
 
                if ($topics_authed_moved)
704
 
                {
705
 
                        $sync_sql[$forum_id][]  = 'forum_topics = forum_topics - ' . (int) $topics_authed_moved;
706
 
                }
707
 
 
708
 
                $success_msg = (sizeof($topic_ids) == 1) ? 'TOPIC_MOVED_SUCCESS' : 'TOPICS_MOVED_SUCCESS';
709
 
 
710
 
                foreach ($sync_sql as $forum_id_key => $array)
711
 
                {
712
 
                        $sql = 'UPDATE ' . FORUMS_TABLE . '
713
 
                                SET ' . implode(', ', $array) . '
714
 
                                WHERE forum_id = ' . $forum_id_key;
715
 
                        $db->sql_query($sql);
716
 
                }
717
 
 
718
 
                $db->sql_transaction('commit');
719
 
 
720
 
                sync('forum', 'forum_id', array($forum_id, $to_forum_id));
721
 
        }
722
 
        else
723
 
        {
724
 
                $template->assign_vars(array(
725
 
                        'S_FORUM_SELECT'                => make_forum_select($to_forum_id, $forum_id, false, true, true, true),
726
 
                        'S_CAN_LEAVE_SHADOW'    => true,
727
 
                        'ADDITIONAL_MSG'                => $additional_msg)
728
 
                );
729
 
 
730
 
                confirm_box(false, 'MOVE_TOPIC' . ((sizeof($topic_ids) == 1) ? '' : 'S'), $s_hidden_fields, 'mcp_move.html');
731
 
        }
732
 
 
733
 
        $redirect = request_var('redirect', "index.$phpEx");
734
 
        $redirect = reapply_sid($redirect);
735
 
 
736
 
        if (!$success_msg)
737
 
        {
738
 
                redirect($redirect);
739
 
        }
740
 
        else
741
 
        {
742
 
                meta_refresh(3, $redirect);
743
 
 
744
 
                $message = $user->lang[$success_msg];
745
 
                $message .= '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $redirect . '">', '</a>');
746
 
                $message .= '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", "f=$forum_id") . '">', '</a>');
747
 
                $message .= '<br /><br />' . sprintf($user->lang['RETURN_NEW_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", "f=$to_forum_id") . '">', '</a>');
748
 
 
749
 
                trigger_error($message);
750
 
        }
751
 
}
752
 
 
753
 
/**
754
 
* Delete Topics
755
 
*/
756
 
function mcp_delete_topic($topic_ids)
757
 
{
758
 
        global $auth, $user, $db, $phpEx, $phpbb_root_path;
759
 
 
760
 
        if (!check_ids($topic_ids, TOPICS_TABLE, 'topic_id', array('m_delete')))
761
 
        {
762
 
                return;
763
 
        }
764
 
 
765
 
        $redirect = request_var('redirect', build_url(array('_f_', 'action', 'quickmod')));
766
 
        $forum_id = request_var('f', 0);
767
 
 
768
 
        $s_hidden_fields = build_hidden_fields(array(
769
 
                'topic_id_list' => $topic_ids,
770
 
                'f'                             => $forum_id,
771
 
                'action'                => 'delete_topic',
772
 
                'redirect'              => $redirect)
773
 
        );
774
 
        $success_msg = '';
775
 
 
776
 
        if (confirm_box(true))
777
 
        {
778
 
                $success_msg = (sizeof($topic_ids) == 1) ? 'TOPIC_DELETED_SUCCESS' : 'TOPICS_DELETED_SUCCESS';
779
 
 
780
 
                $data = get_topic_data($topic_ids);
781
 
 
782
 
                foreach ($data as $topic_id => $row)
783
 
                {
784
 
                        add_log('mod', $row['forum_id'], 0, 'LOG_TOPIC_DELETED', $row['topic_title']);
785
 
                }
786
 
 
787
 
                $return = delete_topics('topic_id', $topic_ids);
788
 
        }
789
 
        else
790
 
        {
791
 
                confirm_box(false, (sizeof($topic_ids) == 1) ? 'DELETE_TOPIC' : 'DELETE_TOPICS', $s_hidden_fields);
792
 
        }
793
 
 
794
 
        $redirect = request_var('redirect', "index.$phpEx");
795
 
        $redirect = reapply_sid($redirect);
796
 
 
797
 
        if (!$success_msg)
798
 
        {
799
 
                redirect($redirect);
800
 
        }
801
 
        else
802
 
        {
803
 
                $redirect_url = append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id);
804
 
                meta_refresh(3, $redirect_url);
805
 
                trigger_error($user->lang[$success_msg] . '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="' . $redirect_url . '">', '</a>'));
806
 
        }
807
 
}
808
 
 
809
 
/**
810
 
* Delete Posts
811
 
*/
812
 
function mcp_delete_post($post_ids)
813
 
{
814
 
        global $auth, $user, $db, $phpEx, $phpbb_root_path;
815
 
 
816
 
        if (!check_ids($post_ids, POSTS_TABLE, 'post_id', array('m_delete')))
817
 
        {
818
 
                return;
819
 
        }
820
 
 
821
 
        $redirect = request_var('redirect', build_url(array('_f_', 'action', 'quickmod')));
822
 
        $forum_id = request_var('f', 0);
823
 
 
824
 
        $s_hidden_fields = build_hidden_fields(array(
825
 
                'post_id_list'  => $post_ids,
826
 
                'f'                             => $forum_id,
827
 
                'action'                => 'delete_post',
828
 
                'redirect'              => $redirect)
829
 
        );
830
 
        $success_msg = '';
831
 
 
832
 
        if (confirm_box(true))
833
 
        {
834
 
                if (!function_exists('delete_posts'))
835
 
                {
836
 
                        include($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
837
 
                }
838
 
 
839
 
                // Count the number of topics that are affected
840
 
                // I did not use COUNT(DISTINCT ...) because I remember having problems
841
 
                // with it on older versions of MySQL -- Ashe
842
 
 
843
 
                $sql = 'SELECT DISTINCT topic_id
844
 
                        FROM ' . POSTS_TABLE . '
845
 
                        WHERE ' . $db->sql_in_set('post_id', $post_ids);
846
 
                $result = $db->sql_query($sql);
847
 
 
848
 
                $topic_id_list = array();
849
 
                while ($row = $db->sql_fetchrow($result))
850
 
                {
851
 
                        $topic_id_list[] = $row['topic_id'];
852
 
                }
853
 
                $affected_topics = sizeof($topic_id_list);
854
 
                $db->sql_freeresult($result);
855
 
 
856
 
                $post_data = get_post_data($post_ids);
857
 
 
858
 
                foreach ($post_data as $id => $row)
859
 
                {
860
 
                        add_log('mod', $row['forum_id'], $row['topic_id'], 'LOG_DELETE_POST', $row['post_subject']);
861
 
                }
862
 
 
863
 
                // Now delete the posts, topics and forums are automatically resync'ed
864
 
                delete_posts('post_id', $post_ids);
865
 
 
866
 
                $sql = 'SELECT COUNT(topic_id) AS topics_left
867
 
                        FROM ' . TOPICS_TABLE . '
868
 
                        WHERE ' . $db->sql_in_set('topic_id', $topic_id_list);
869
 
                $result = $db->sql_query_limit($sql, 1);
870
 
 
871
 
                $deleted_topics = ($row = $db->sql_fetchrow($result)) ? ($affected_topics - $row['topics_left']) : $affected_topics;
872
 
                $db->sql_freeresult($result);
873
 
 
874
 
                $topic_id = request_var('t', 0);
875
 
 
876
 
                // Return links
877
 
                $return_link = array();
878
 
                if ($affected_topics == 1 && !$deleted_topics && $topic_id)
879
 
                {
880
 
                        $return_link[] = sprintf($user->lang['RETURN_TOPIC'], '<a href="' . append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&amp;t=$topic_id") . '">', '</a>');
881
 
                }
882
 
                $return_link[] = sprintf($user->lang['RETURN_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id) . '">', '</a>');
883
 
 
884
 
                if (sizeof($post_ids) == 1)
885
 
                {
886
 
                        if ($deleted_topics)
887
 
                        {
888
 
                                // We deleted the only post of a topic, which in turn has
889
 
                                // been removed from the database
890
 
                                $success_msg = $user->lang['TOPIC_DELETED_SUCCESS'];
891
 
                        }
892
 
                        else
893
 
                        {
894
 
                                $success_msg = $user->lang['POST_DELETED_SUCCESS'];
895
 
                        }
896
 
                }
897
 
                else
898
 
                {
899
 
                        if ($deleted_topics)
900
 
                        {
901
 
                                // Some of topics disappeared
902
 
                                $success_msg = $user->lang['POSTS_DELETED_SUCCESS'] . '<br /><br />' . $user->lang['EMPTY_TOPICS_REMOVED_WARNING'];
903
 
                        }
904
 
                        else
905
 
                        {
906
 
                                $success_msg = $user->lang['POSTS_DELETED_SUCCESS'];
907
 
                        }
908
 
                }
909
 
        }
910
 
        else
911
 
        {
912
 
                confirm_box(false, (sizeof($post_ids) == 1) ? 'DELETE_POST' : 'DELETE_POSTS', $s_hidden_fields);
913
 
        }
914
 
 
915
 
        $redirect = request_var('redirect', "index.$phpEx");
916
 
        $redirect = reapply_sid($redirect);
917
 
 
918
 
        if (!$success_msg)
919
 
        {
920
 
                redirect($redirect);
921
 
        }
922
 
        else
923
 
        {
924
 
                meta_refresh(3, $redirect);
925
 
                trigger_error($success_msg . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $redirect . '">', '</a>') . '<br /><br />' . implode('<br /><br />', $return_link));
926
 
        }
927
 
}
928
 
 
929
 
/**
930
 
* Fork Topic
931
 
*/
932
 
function mcp_fork_topic($topic_ids)
933
 
{
934
 
        global $auth, $user, $db, $template, $config;
935
 
        global $phpEx, $phpbb_root_path;
936
 
 
937
 
        if (!check_ids($topic_ids, TOPICS_TABLE, 'topic_id', array('m_')))
938
 
        {
939
 
                return;
940
 
        }
941
 
 
942
 
        $to_forum_id = request_var('to_forum_id', 0);
943
 
        $forum_id = request_var('f', 0);
944
 
        $redirect = request_var('redirect', build_url(array('_f_', 'action', 'quickmod')));
945
 
        $additional_msg = $success_msg = '';
946
 
 
947
 
        $s_hidden_fields = build_hidden_fields(array(
948
 
                'topic_id_list' => $topic_ids,
949
 
                'f'                             => $forum_id,
950
 
                'action'                => 'fork',
951
 
                'redirect'              => $redirect)
952
 
        );
953
 
 
954
 
        if ($to_forum_id)
955
 
        {
956
 
                $forum_data = get_forum_data($to_forum_id);
957
 
 
958
 
                if (!sizeof($topic_ids))
959
 
                {
960
 
                        $additional_msg = $user->lang['NO_TOPIC_SELECTED'];
961
 
                }
962
 
                else if (!sizeof($forum_data))
963
 
                {
964
 
                        $additional_msg = $user->lang['FORUM_NOT_EXIST'];
965
 
                }
966
 
                else
967
 
                {
968
 
                        $forum_data = $forum_data[$to_forum_id];
969
 
 
970
 
                        if ($forum_data['forum_type'] != FORUM_POST)
971
 
                        {
972
 
                                $additional_msg = $user->lang['FORUM_NOT_POSTABLE'];
973
 
                        }
974
 
                        else if (!$auth->acl_get('f_post', $to_forum_id))
975
 
                        {
976
 
                                $additional_msg = $user->lang['USER_CANNOT_POST'];
977
 
                        }
978
 
                }
979
 
        }
980
 
        else if (isset($_POST['confirm']))
981
 
        {
982
 
                $additional_msg = $user->lang['FORUM_NOT_EXIST'];
983
 
        }
984
 
 
985
 
        if ($additional_msg)
986
 
        {
987
 
                unset($_POST['confirm']);
988
 
                unset($_REQUEST['confirm_key']);
989
 
        }
990
 
 
991
 
        if (confirm_box(true))
992
 
        {
993
 
                $topic_data = get_topic_data($topic_ids);
994
 
 
995
 
                $total_posts = 0;
996
 
                $new_topic_id_list = array();
997
 
 
998
 
                foreach ($topic_data as $topic_id => $topic_row)
999
 
                {
1000
 
                        $sql_ary = array(
1001
 
                                'forum_id'                                      => (int) $to_forum_id,
1002
 
                                'icon_id'                                       => (int) $topic_row['icon_id'],
1003
 
                                'topic_attachment'                      => (int) $topic_row['topic_attachment'],
1004
 
                                'topic_approved'                        => 1,
1005
 
                                'topic_reported'                        => 0,
1006
 
                                'topic_title'                           => (string) $topic_row['topic_title'],
1007
 
                                'topic_poster'                          => (int) $topic_row['topic_poster'],
1008
 
                                'topic_time'                            => (int) $topic_row['topic_time'],
1009
 
                                'topic_replies'                         => (int) $topic_row['topic_replies_real'],
1010
 
                                'topic_replies_real'            => (int) $topic_row['topic_replies_real'],
1011
 
                                'topic_status'                          => (int) $topic_row['topic_status'],
1012
 
                                'topic_type'                            => (int) $topic_row['topic_type'],
1013
 
                                'topic_first_poster_name'       => (string) $topic_row['topic_first_poster_name'],
1014
 
                                'topic_last_poster_id'          => (int) $topic_row['topic_last_poster_id'],
1015
 
                                'topic_last_poster_name'        => (string) $topic_row['topic_last_poster_name'],
1016
 
                                'topic_last_post_time'          => (int) $topic_row['topic_last_post_time'],
1017
 
                                'topic_last_view_time'          => (int) $topic_row['topic_last_view_time'],
1018
 
                                'topic_bumped'                          => (int) $topic_row['topic_bumped'],
1019
 
                                'topic_bumper'                          => (int) $topic_row['topic_bumper'],
1020
 
                                'poll_title'                            => (string) $topic_row['poll_title'],
1021
 
                                'poll_start'                            => (int) $topic_row['poll_start'],
1022
 
                                'poll_length'                           => (int) $topic_row['poll_length']
1023
 
                        );
1024
 
 
1025
 
                        $db->sql_query('INSERT INTO ' . TOPICS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
1026
 
                        $new_topic_id = $db->sql_nextid();
1027
 
                        $new_topic_id_list[$topic_id] = $new_topic_id;
1028
 
 
1029
 
                        if ($topic_row['poll_start'])
1030
 
                        {
1031
 
                                $poll_rows = array();
1032
 
 
1033
 
                                $sql = 'SELECT *
1034
 
                                        FROM ' . POLL_OPTIONS_TABLE . "
1035
 
                                        WHERE topic_id = $topic_id";
1036
 
                                $result = $db->sql_query($sql);
1037
 
 
1038
 
                                while ($row = $db->sql_fetchrow($result))
1039
 
                                {
1040
 
                                        $sql_ary = array(
1041
 
                                                'poll_option_id'        => (int) $row['poll_option_id'],
1042
 
                                                'topic_id'                      => (int) $new_topic_id,
1043
 
                                                'poll_option_text'      => (string) $row['poll_option_text'],
1044
 
                                                'poll_option_total'     => 0
1045
 
                                        );
1046
 
 
1047
 
                                        $db->sql_query('INSERT INTO ' . POLL_OPTIONS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
1048
 
                                }
1049
 
                        }
1050
 
 
1051
 
                        $sql = 'SELECT *
1052
 
                                FROM ' . POSTS_TABLE . "
1053
 
                                WHERE topic_id = $topic_id
1054
 
                                ORDER BY post_time ASC";
1055
 
                        $result = $db->sql_query($sql);
1056
 
 
1057
 
                        $post_rows = array();
1058
 
                        while ($row = $db->sql_fetchrow($result))
1059
 
                        {
1060
 
                                $post_rows[] = $row;
1061
 
                        }
1062
 
                        $db->sql_freeresult($result);
1063
 
 
1064
 
                        if (!sizeof($post_rows))
1065
 
                        {
1066
 
                                continue;
1067
 
                        }
1068
 
 
1069
 
                        $total_posts += sizeof($post_rows);
1070
 
                        foreach ($post_rows as $row)
1071
 
                        {
1072
 
                                $sql_ary = array(
1073
 
                                        'topic_id'                      => (int) $new_topic_id,
1074
 
                                        'forum_id'                      => (int) $to_forum_id,
1075
 
                                        'poster_id'                     => (int) $row['poster_id'],
1076
 
                                        'icon_id'                       => (int) $row['icon_id'],
1077
 
                                        'poster_ip'                     => (string) $row['poster_ip'],
1078
 
                                        'post_time'                     => (int) $row['post_time'],
1079
 
                                        'post_approved'         => 1,
1080
 
                                        'post_reported'         => 0,
1081
 
                                        'enable_bbcode'         => (int) $row['enable_bbcode'],
1082
 
                                        'enable_smilies'        => (int) $row['enable_smilies'],
1083
 
                                        'enable_magic_url'      => (int) $row['enable_magic_url'],
1084
 
                                        'enable_sig'            => (int) $row['enable_sig'],
1085
 
                                        'post_username'         => (string) $row['post_username'],
1086
 
                                        'post_subject'          => (string) $row['post_subject'],
1087
 
                                        'post_text'                     => (string) $row['post_text'],
1088
 
                                        'post_edit_reason'      => (string) $row['post_edit_reason'],
1089
 
                                        'post_edit_user'        => (int) $row['post_edit_user'],
1090
 
                                        'post_checksum'         => (string) $row['post_checksum'],
1091
 
                                        'post_attachment'       => (int) $row['post_attachment'],
1092
 
                                        'bbcode_bitfield'       => $row['bbcode_bitfield'],
1093
 
                                        'bbcode_uid'            => (string) $row['bbcode_uid'],
1094
 
                                        'post_edit_time'        => (int) $row['post_edit_time'],
1095
 
                                        'post_edit_count'       => (int) $row['post_edit_count'],
1096
 
                                        'post_edit_locked'      => (int) $row['post_edit_locked'],
1097
 
                                        'post_postcount'        => 0,
1098
 
                                );
1099
 
 
1100
 
                                $db->sql_query('INSERT INTO ' . POSTS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
1101
 
                                $new_post_id = $db->sql_nextid();
1102
 
 
1103
 
                                // Copy whether the topic is dotted
1104
 
                                markread('post', $to_forum_id, $new_topic_id, 0, $row['poster_id']);
1105
 
 
1106
 
                                // Copy Attachments
1107
 
                                if ($row['post_attachment'])
1108
 
                                {
1109
 
                                        $sql = 'SELECT * FROM ' . ATTACHMENTS_TABLE . "
1110
 
                                                WHERE post_msg_id = {$row['post_id']}
1111
 
                                                        AND topic_id = $topic_id
1112
 
                                                        AND in_message = 0";
1113
 
                                        $result = $db->sql_query($sql);
1114
 
 
1115
 
                                        $sql_ary = array();
1116
 
                                        while ($attach_row = $db->sql_fetchrow($result))
1117
 
                                        {
1118
 
                                                $sql_ary[] = array(
1119
 
                                                        'post_msg_id'           => (int) $new_post_id,
1120
 
                                                        'topic_id'                      => (int) $new_topic_id,
1121
 
                                                        'in_message'            => 0,
1122
 
                                                        'is_orphan'                     => (int) $attach_row['is_orphan'],
1123
 
                                                        'poster_id'                     => (int) $attach_row['poster_id'],
1124
 
                                                        'physical_filename'     => (string) basename($attach_row['physical_filename']),
1125
 
                                                        'real_filename'         => (string) basename($attach_row['real_filename']),
1126
 
                                                        'download_count'        => (int) $attach_row['download_count'],
1127
 
                                                        'attach_comment'        => (string) $attach_row['attach_comment'],
1128
 
                                                        'extension'                     => (string) $attach_row['extension'],
1129
 
                                                        'mimetype'                      => (string) $attach_row['mimetype'],
1130
 
                                                        'filesize'                      => (int) $attach_row['filesize'],
1131
 
                                                        'filetime'                      => (int) $attach_row['filetime'],
1132
 
                                                        'thumbnail'                     => (int) $attach_row['thumbnail']
1133
 
                                                );
1134
 
                                        }
1135
 
                                        $db->sql_freeresult($result);
1136
 
 
1137
 
                                        if (sizeof($sql_ary))
1138
 
                                        {
1139
 
                                                $db->sql_multi_insert(ATTACHMENTS_TABLE, $sql_ary);
1140
 
                                        }
1141
 
                                }
1142
 
                        }
1143
 
 
1144
 
                        $sql = 'SELECT user_id, notify_status
1145
 
                                FROM ' . TOPICS_WATCH_TABLE . '
1146
 
                                WHERE topic_id = ' . $topic_id;
1147
 
                        $result = $db->sql_query($sql);
1148
 
 
1149
 
                        $sql_ary = array();
1150
 
                        while ($row = $db->sql_fetchrow($result))
1151
 
                        {
1152
 
                                $sql_ary[] = array(
1153
 
                                        'topic_id'              => (int) $new_topic_id,
1154
 
                                        'user_id'               => (int) $row['user_id'],
1155
 
                                        'notify_status' => (int) $row['notify_status'],
1156
 
                                );
1157
 
                        }
1158
 
                        $db->sql_freeresult($result);
1159
 
 
1160
 
                        if (sizeof($sql_ary))
1161
 
                        {
1162
 
                                $db->sql_multi_insert(TOPICS_WATCH_TABLE, $sql_ary);
1163
 
                        }
1164
 
                }
1165
 
 
1166
 
                // Sync new topics, parent forums and board stats
1167
 
                sync('topic', 'topic_id', $new_topic_id_list);
1168
 
 
1169
 
                $sync_sql = array();
1170
 
 
1171
 
                $sync_sql[$to_forum_id][]       = 'forum_posts = forum_posts + ' . $total_posts;
1172
 
                $sync_sql[$to_forum_id][]       = 'forum_topics = forum_topics + ' . sizeof($new_topic_id_list);
1173
 
                $sync_sql[$to_forum_id][]       = 'forum_topics_real = forum_topics_real + ' . sizeof($new_topic_id_list);
1174
 
 
1175
 
                foreach ($sync_sql as $forum_id_key => $array)
1176
 
                {
1177
 
                        $sql = 'UPDATE ' . FORUMS_TABLE . '
1178
 
                                SET ' . implode(', ', $array) . '
1179
 
                                WHERE forum_id = ' . $forum_id_key;
1180
 
                        $db->sql_query($sql);
1181
 
                }
1182
 
 
1183
 
                sync('forum', 'forum_id', $to_forum_id);
1184
 
                set_config('num_topics', $config['num_topics'] + sizeof($new_topic_id_list), true);
1185
 
                set_config('num_posts', $config['num_posts'] + $total_posts, true);
1186
 
 
1187
 
                foreach ($new_topic_id_list as $topic_id => $new_topic_id)
1188
 
                {
1189
 
                        add_log('mod', $to_forum_id, $new_topic_id, 'LOG_FORK', $topic_row['forum_name']);
1190
 
                }
1191
 
 
1192
 
                $success_msg = (sizeof($topic_ids) == 1) ? 'TOPIC_FORKED_SUCCESS' : 'TOPICS_FORKED_SUCCESS';
1193
 
        }
1194
 
        else
1195
 
        {
1196
 
                $template->assign_vars(array(
1197
 
                        'S_FORUM_SELECT'                => make_forum_select($to_forum_id, false, false, true, true, true),
1198
 
                        'S_CAN_LEAVE_SHADOW'    => false,
1199
 
                        'ADDITIONAL_MSG'                => $additional_msg)
1200
 
                );
1201
 
 
1202
 
                confirm_box(false, 'FORK_TOPIC' . ((sizeof($topic_ids) == 1) ? '' : 'S'), $s_hidden_fields, 'mcp_move.html');
1203
 
        }
1204
 
 
1205
 
        $redirect = request_var('redirect', "index.$phpEx");
1206
 
        $redirect = reapply_sid($redirect);
1207
 
 
1208
 
        if (!$success_msg)
1209
 
        {
1210
 
                redirect($redirect);
1211
 
        }
1212
 
        else
1213
 
        {
1214
 
                $redirect_url = append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id);
1215
 
                meta_refresh(3, $redirect_url);
1216
 
                $return_link = sprintf($user->lang['RETURN_FORUM'], '<a href="' . $redirect_url . '">', '</a>');
1217
 
 
1218
 
                if ($forum_id != $to_forum_id)
1219
 
                {
1220
 
                        $return_link .= '<br /><br />' . sprintf($user->lang['RETURN_NEW_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $to_forum_id) . '">', '</a>');
1221
 
                }
1222
 
 
1223
 
                trigger_error($user->lang[$success_msg] . '<br /><br />' . $return_link);
1224
 
        }
1225
 
}
1226
 
 
1227
 
?>
 
 
b'\\ No newline at end of file'