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

« back to all changes in this revision

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

Merge from no-phpbb-for-you. phpBB is no longer available by default.

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'