~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: dcoles
  • Date: 2008-02-13 04:10:55 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:443
Added Forum application along with unmodifed version of phpBB3 "Olympus" 3.0.0

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'