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

« back to all changes in this revision

Viewing changes to www/php/phpBB3/posting.php

  • Committer: William Grant
  • Date: 2010-02-25 07:34:50 UTC
  • Revision ID: grantw@unimelb.edu.au-20100225073450-zcl8ev5hlyhbszeu
Activate the Storm C extensions if possible. Moar speed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<?php
2
 
/**
3
 
*
4
 
* @package phpBB3
5
 
* @version $Id: posting.php,v 1.494 2007/12/12 11:07:07 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
 
define('IN_PHPBB', true);
15
 
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
16
 
$phpEx = substr(strrchr(__FILE__, '.'), 1);
17
 
include($phpbb_root_path . 'common.' . $phpEx);
18
 
include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
19
 
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
20
 
include($phpbb_root_path . 'includes/message_parser.' . $phpEx);
21
 
 
22
 
 
23
 
// Start session management
24
 
$user->session_begin();
25
 
$auth->acl($user->data);
26
 
 
27
 
 
28
 
// Grab only parameters needed here
29
 
$post_id        = request_var('p', 0);
30
 
$topic_id       = request_var('t', 0);
31
 
$forum_id       = request_var('f', 0);
32
 
$draft_id       = request_var('d', 0);
33
 
$lastclick      = request_var('lastclick', 0);
34
 
 
35
 
$submit         = (isset($_POST['post'])) ? true : false;
36
 
$preview        = (isset($_POST['preview'])) ? true : false;
37
 
$save           = (isset($_POST['save'])) ? true : false;
38
 
$load           = (isset($_POST['load'])) ? true : false;
39
 
$delete         = (isset($_POST['delete'])) ? true : false;
40
 
$cancel         = (isset($_POST['cancel']) && !isset($_POST['save'])) ? true : false;
41
 
 
42
 
$refresh        = (isset($_POST['add_file']) || isset($_POST['delete_file']) || isset($_POST['cancel_unglobalise']) || $save || $load) ? true : false;
43
 
$mode           = ($delete && !$preview && !$refresh && $submit) ? 'delete' : request_var('mode', '');
44
 
 
45
 
$error = $post_data = array();
46
 
$current_time = time();
47
 
 
48
 
 
49
 
// Was cancel pressed? If so then redirect to the appropriate page
50
 
if ($cancel || ($current_time - $lastclick < 2 && $submit))
51
 
{
52
 
        $redirect = ($post_id) ? append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'p=' . $post_id) . '#p' . $post_id : (($topic_id) ? append_sid("{$phpbb_root_path}viewtopic.$phpEx", 't=' . $topic_id) : (($forum_id) ? append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id) : append_sid("{$phpbb_root_path}index.$phpEx")));
53
 
        redirect($redirect);
54
 
}
55
 
 
56
 
if (in_array($mode, array('post', 'reply', 'quote', 'edit', 'delete')) && !$forum_id)
57
 
{
58
 
        trigger_error('NO_FORUM');
59
 
}
60
 
 
61
 
// We need to know some basic information in all cases before we do anything.
62
 
switch ($mode)
63
 
{
64
 
        case 'post':
65
 
                $sql = 'SELECT *
66
 
                        FROM ' . FORUMS_TABLE . "
67
 
                        WHERE forum_id = $forum_id";
68
 
        break;
69
 
 
70
 
        case 'bump':
71
 
        case 'reply':
72
 
                if (!$topic_id)
73
 
                {
74
 
                        trigger_error('NO_TOPIC');
75
 
                }
76
 
 
77
 
                $sql = 'SELECT f.*, t.*
78
 
                        FROM ' . TOPICS_TABLE . ' t, ' . FORUMS_TABLE . " f
79
 
                        WHERE t.topic_id = $topic_id
80
 
                                AND (f.forum_id = t.forum_id
81
 
                                        OR f.forum_id = $forum_id)";
82
 
        break;
83
 
 
84
 
        case 'quote':
85
 
        case 'edit':
86
 
        case 'delete':
87
 
                if (!$post_id)
88
 
                {
89
 
                        $user->setup('posting');
90
 
                        trigger_error('NO_POST');
91
 
                }
92
 
 
93
 
                $sql = 'SELECT f.*, t.*, p.*, u.username, u.username_clean, u.user_sig, u.user_sig_bbcode_uid, u.user_sig_bbcode_bitfield
94
 
                        FROM ' . POSTS_TABLE . ' p, ' . TOPICS_TABLE . ' t, ' . FORUMS_TABLE . ' f, ' . USERS_TABLE . " u
95
 
                        WHERE p.post_id = $post_id
96
 
                                AND t.topic_id = p.topic_id
97
 
                                AND u.user_id = p.poster_id
98
 
                                AND (f.forum_id = t.forum_id
99
 
                                        OR f.forum_id = $forum_id)";
100
 
        break;
101
 
 
102
 
        case 'smilies':
103
 
                $sql = '';
104
 
                generate_smilies('window', $forum_id);
105
 
        break;
106
 
 
107
 
        case 'popup':
108
 
                if ($forum_id)
109
 
                {
110
 
                        $sql = 'SELECT forum_style
111
 
                                FROM ' . FORUMS_TABLE . '
112
 
                                WHERE forum_id = ' . $forum_id;
113
 
                }
114
 
                else
115
 
                {
116
 
                        upload_popup();
117
 
                        garbage_collection();
118
 
                        exit_handler();
119
 
                }
120
 
        break;
121
 
 
122
 
        default:
123
 
                $sql = '';
124
 
        break;
125
 
}
126
 
 
127
 
if (!$sql)
128
 
{
129
 
        $user->setup('posting');
130
 
        trigger_error('NO_POST_MODE');
131
 
}
132
 
 
133
 
$result = $db->sql_query($sql);
134
 
$post_data = $db->sql_fetchrow($result);
135
 
$db->sql_freeresult($result);
136
 
 
137
 
if (!$post_data)
138
 
{
139
 
        if (!($mode == 'post' || $mode == 'bump' || $mode == 'reply'))
140
 
        {
141
 
                $user->setup('posting');
142
 
        }
143
 
        trigger_error(($mode == 'post' || $mode == 'bump' || $mode == 'reply') ? 'NO_TOPIC' : 'NO_POST');
144
 
}
145
 
 
146
 
if ($mode == 'popup')
147
 
{
148
 
        upload_popup($post_data['forum_style']);
149
 
        exit_handler();
150
 
}
151
 
 
152
 
$user->setup(array('posting', 'mcp', 'viewtopic'), $post_data['forum_style']);
153
 
 
154
 
// Use post_row values in favor of submitted ones...
155
 
$forum_id       = (!empty($post_data['forum_id'])) ? (int) $post_data['forum_id'] : (int) $forum_id;
156
 
$topic_id       = (!empty($post_data['topic_id'])) ? (int) $post_data['topic_id'] : (int) $topic_id;
157
 
$post_id        = (!empty($post_data['post_id'])) ? (int) $post_data['post_id'] : (int) $post_id;
158
 
 
159
 
// Need to login to passworded forum first?
160
 
if ($post_data['forum_password'])
161
 
{
162
 
        login_forum_box(array(
163
 
                'forum_id'                      => $forum_id,
164
 
                'forum_password'        => $post_data['forum_password'])
165
 
        );
166
 
}
167
 
 
168
 
// Check permissions
169
 
if ($user->data['is_bot'])
170
 
{
171
 
        redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
172
 
}
173
 
 
174
 
// Is the user able to read within this forum?
175
 
if (!$auth->acl_get('f_read', $forum_id))
176
 
{
177
 
        if ($user->data['user_id'] != ANONYMOUS)
178
 
        {
179
 
                trigger_error('USER_CANNOT_READ');
180
 
        }
181
 
 
182
 
        login_box('', $user->lang['LOGIN_EXPLAIN_POST']);
183
 
}
184
 
 
185
 
// Permission to do the action asked?
186
 
$is_authed = false;
187
 
 
188
 
switch ($mode)
189
 
{
190
 
        case 'post':
191
 
                if ($auth->acl_get('f_post', $forum_id))
192
 
                {
193
 
                        $is_authed = true;
194
 
                }
195
 
        break;
196
 
 
197
 
        case 'bump':
198
 
                if ($auth->acl_get('f_bump', $forum_id))
199
 
                {
200
 
                        $is_authed = true;
201
 
                }
202
 
        break;
203
 
 
204
 
        case 'quote':
205
 
 
206
 
                $post_data['post_edit_locked'] = 0;
207
 
 
208
 
        // no break;
209
 
 
210
 
        case 'reply':
211
 
                if ($auth->acl_get('f_reply', $forum_id))
212
 
                {
213
 
                        $is_authed = true;
214
 
                }
215
 
        break;
216
 
 
217
 
        case 'edit':
218
 
                if ($user->data['is_registered'] && $auth->acl_gets('f_edit', 'm_edit', $forum_id))
219
 
                {
220
 
                        $is_authed = true;
221
 
                }
222
 
        break;
223
 
 
224
 
        case 'delete':
225
 
                if ($user->data['is_registered'] && $auth->acl_gets('f_delete', 'm_delete', $forum_id))
226
 
                {
227
 
                        $is_authed = true;
228
 
                }
229
 
        break;
230
 
}
231
 
 
232
 
if (!$is_authed)
233
 
{
234
 
        $check_auth = ($mode == 'quote') ? 'reply' : $mode;
235
 
 
236
 
        if ($user->data['is_registered'])
237
 
        {
238
 
                trigger_error('USER_CANNOT_' . strtoupper($check_auth));
239
 
        }
240
 
 
241
 
        login_box('', $user->lang['LOGIN_EXPLAIN_' . strtoupper($mode)]);
242
 
}
243
 
 
244
 
// Is the user able to post within this forum?
245
 
if ($post_data['forum_type'] != FORUM_POST && in_array($mode, array('post', 'bump', 'quote', 'reply')))
246
 
{
247
 
        trigger_error('USER_CANNOT_FORUM_POST');
248
 
}
249
 
 
250
 
// Forum/Topic locked?
251
 
if (($post_data['forum_status'] == ITEM_LOCKED || (isset($post_data['topic_status']) && $post_data['topic_status'] == ITEM_LOCKED)) && !$auth->acl_get('m_edit', $forum_id))
252
 
{
253
 
        trigger_error(($post_data['forum_status'] == ITEM_LOCKED) ? 'FORUM_LOCKED' : 'TOPIC_LOCKED');
254
 
}
255
 
 
256
 
// Can we edit this post ... if we're a moderator with rights then always yes
257
 
// else it depends on editing times, lock status and if we're the correct user
258
 
if ($mode == 'edit' && !$auth->acl_get('m_edit', $forum_id))
259
 
{
260
 
        if ($user->data['user_id'] != $post_data['poster_id'])
261
 
        {
262
 
                trigger_error('USER_CANNOT_EDIT');
263
 
        }
264
 
 
265
 
        if (!($post_data['post_time'] > time() - ($config['edit_time'] * 60) || !$config['edit_time']))
266
 
        {
267
 
                trigger_error('CANNOT_EDIT_TIME');
268
 
        }
269
 
 
270
 
        if ($post_data['post_edit_locked'])
271
 
        {
272
 
                trigger_error('CANNOT_EDIT_POST_LOCKED');
273
 
        }
274
 
}
275
 
 
276
 
// Handle delete mode...
277
 
if ($mode == 'delete')
278
 
{
279
 
        handle_post_delete($forum_id, $topic_id, $post_id, $post_data);
280
 
        exit_handler();
281
 
}
282
 
 
283
 
// Handle bump mode...
284
 
if ($mode == 'bump')
285
 
{
286
 
        if ($bump_time = bump_topic_allowed($forum_id, $post_data['topic_bumped'], $post_data['topic_last_post_time'], $post_data['topic_poster'], $post_data['topic_last_poster_id']))
287
 
        {
288
 
                $db->sql_transaction('begin');
289
 
 
290
 
                $sql = 'UPDATE ' . POSTS_TABLE . "
291
 
                        SET post_time = $current_time
292
 
                        WHERE post_id = {$post_data['topic_last_post_id']}
293
 
                                AND topic_id = $topic_id";
294
 
                $db->sql_query($sql);
295
 
 
296
 
                $sql = 'UPDATE ' . TOPICS_TABLE . "
297
 
                        SET topic_last_post_time = $current_time,
298
 
                                topic_bumped = 1,
299
 
                                topic_bumper = " . $user->data['user_id'] . "
300
 
                        WHERE topic_id = $topic_id";
301
 
                $db->sql_query($sql);
302
 
 
303
 
                update_post_information('forum', $forum_id);
304
 
 
305
 
                $sql = 'UPDATE ' . USERS_TABLE . "
306
 
                        SET user_lastpost_time = $current_time
307
 
                        WHERE user_id = " . $user->data['user_id'];
308
 
                $db->sql_query($sql);
309
 
 
310
 
                $db->sql_transaction('commit');
311
 
 
312
 
                markread('post', $forum_id, $topic_id, $current_time);
313
 
 
314
 
                add_log('mod', $forum_id, $topic_id, 'LOG_BUMP_TOPIC', $post_data['topic_title']);
315
 
 
316
 
                $meta_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&amp;t=$topic_id&amp;p={$post_data['topic_last_post_id']}") . "#p{$post_data['topic_last_post_id']}";
317
 
                meta_refresh(3, $meta_url);
318
 
 
319
 
                $message = $user->lang['TOPIC_BUMPED'] . '<br /><br />' . sprintf($user->lang['VIEW_MESSAGE'], '<a href="' . $meta_url . '">', '</a>');
320
 
                $message .= '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id) . '">', '</a>');
321
 
 
322
 
                trigger_error($message);
323
 
        }
324
 
 
325
 
        trigger_error('BUMP_ERROR');
326
 
}
327
 
 
328
 
// Subject length limiting to 60 characters if first post...
329
 
if ($mode == 'post' || ($mode == 'edit' && $post_data['topic_first_post_id'] == $post_data['post_id']))
330
 
{
331
 
        $template->assign_var('S_NEW_MESSAGE', true);
332
 
}
333
 
 
334
 
// Determine some vars
335
 
if (isset($post_data['poster_id']) && $post_data['poster_id'] == ANONYMOUS)
336
 
{
337
 
        $post_data['quote_username'] = (!empty($post_data['post_username'])) ? $post_data['post_username'] : $user->lang['GUEST'];
338
 
}
339
 
else
340
 
{
341
 
        $post_data['quote_username'] = isset($post_data['username']) ? $post_data['username'] : '';
342
 
}
343
 
 
344
 
$post_data['post_edit_locked']  = (isset($post_data['post_edit_locked'])) ? (int) $post_data['post_edit_locked'] : 0;
345
 
$post_data['post_subject']              = (in_array($mode, array('quote', 'edit'))) ? $post_data['post_subject'] : ((isset($post_data['topic_title'])) ? $post_data['topic_title'] : '');
346
 
$post_data['topic_time_limit']  = (isset($post_data['topic_time_limit'])) ? (($post_data['topic_time_limit']) ? (int) $post_data['topic_time_limit'] / 86400 : (int) $post_data['topic_time_limit']) : 0;
347
 
$post_data['poll_length']               = (!empty($post_data['poll_length'])) ? (int) $post_data['poll_length'] / 86400 : 0;
348
 
$post_data['poll_start']                = (!empty($post_data['poll_start'])) ? (int) $post_data['poll_start'] : 0;
349
 
$post_data['icon_id']                   = (!isset($post_data['icon_id']) || in_array($mode, array('quote', 'reply'))) ? 0 : (int) $post_data['icon_id'];
350
 
$post_data['poll_options']              = array();
351
 
 
352
 
// Get Poll Data
353
 
if ($post_data['poll_start'])
354
 
{
355
 
        $sql = 'SELECT poll_option_text
356
 
                FROM ' . POLL_OPTIONS_TABLE . "
357
 
                WHERE topic_id = $topic_id
358
 
                ORDER BY poll_option_id";
359
 
        $result = $db->sql_query($sql);
360
 
 
361
 
        while ($row = $db->sql_fetchrow($result))
362
 
        {
363
 
                $post_data['poll_options'][] = trim($row['poll_option_text']);
364
 
        }
365
 
        $db->sql_freeresult($result);
366
 
}
367
 
 
368
 
$orig_poll_options_size = sizeof($post_data['poll_options']);
369
 
 
370
 
$message_parser = new parse_message();
371
 
 
372
 
if (isset($post_data['post_text']))
373
 
{
374
 
        $message_parser->message = &$post_data['post_text'];
375
 
        unset($post_data['post_text']);
376
 
}
377
 
 
378
 
// Set some default variables
379
 
$uninit = array('post_attachment' => 0, 'poster_id' => $user->data['user_id'], 'enable_magic_url' => 0, 'topic_status' => 0, 'topic_type' => POST_NORMAL, 'post_subject' => '', 'topic_title' => '', 'post_time' => 0, 'post_edit_reason' => '', 'notify_set' => 0);
380
 
 
381
 
foreach ($uninit as $var_name => $default_value)
382
 
{
383
 
        if (!isset($post_data[$var_name]))
384
 
        {
385
 
                $post_data[$var_name] = $default_value;
386
 
        }
387
 
}
388
 
unset($uninit);
389
 
 
390
 
// Always check if the submitted attachment data is valid and belongs to the user.
391
 
// Further down (especially in submit_post()) we do not check this again.
392
 
$message_parser->get_submitted_attachment_data($post_data['poster_id']);
393
 
 
394
 
if ($post_data['post_attachment'] && !$submit && !$refresh && !$preview && $mode == 'edit')
395
 
{
396
 
        // Do not change to SELECT *
397
 
        $sql = 'SELECT attach_id, is_orphan, attach_comment, real_filename
398
 
                FROM ' . ATTACHMENTS_TABLE . "
399
 
                WHERE post_msg_id = $post_id
400
 
                        AND in_message = 0
401
 
                        AND is_orphan = 0
402
 
                ORDER BY filetime DESC";
403
 
        $result = $db->sql_query($sql);
404
 
        $message_parser->attachment_data = array_merge($message_parser->attachment_data, $db->sql_fetchrowset($result));
405
 
        $db->sql_freeresult($result);
406
 
}
407
 
 
408
 
if ($post_data['poster_id'] == ANONYMOUS)
409
 
{
410
 
        $post_data['username'] = ($mode == 'quote' || $mode == 'edit') ? trim($post_data['post_username']) : '';
411
 
}
412
 
else
413
 
{
414
 
        $post_data['username'] = ($mode == 'quote' || $mode == 'edit') ? trim($post_data['username']) : '';
415
 
}
416
 
 
417
 
$post_data['enable_urls'] = $post_data['enable_magic_url'];
418
 
 
419
 
if ($mode != 'edit')
420
 
{
421
 
        $post_data['enable_sig']                = ($config['allow_sig'] && $user->optionget('attachsig')) ? true: false;
422
 
        $post_data['enable_smilies']    = ($config['allow_smilies'] && $user->optionget('smilies')) ? true : false;
423
 
        $post_data['enable_bbcode']             = ($config['allow_bbcode'] && $user->optionget('bbcode')) ? true : false;
424
 
        $post_data['enable_urls']               = true;
425
 
}
426
 
 
427
 
$post_data['enable_magic_url'] = $post_data['drafts'] = false;
428
 
 
429
 
// User own some drafts?
430
 
if ($user->data['is_registered'] && $auth->acl_get('u_savedrafts') && ($mode == 'reply' || $mode == 'post' || $mode == 'quote'))
431
 
{
432
 
        $sql = 'SELECT draft_id
433
 
                FROM ' . DRAFTS_TABLE . '
434
 
                WHERE user_id = ' . $user->data['user_id'] .
435
 
                        (($forum_id) ? ' AND forum_id = ' . (int) $forum_id : '') .
436
 
                        (($topic_id) ? ' AND topic_id = ' . (int) $topic_id : '') .
437
 
                        (($draft_id) ? " AND draft_id <> $draft_id" : '');
438
 
        $result = $db->sql_query_limit($sql, 1);
439
 
 
440
 
        if ($db->sql_fetchrow($result))
441
 
        {
442
 
                $post_data['drafts'] = true;
443
 
        }
444
 
        $db->sql_freeresult($result);
445
 
}
446
 
 
447
 
$check_value = (($post_data['enable_bbcode']+1) << 8) + (($post_data['enable_smilies']+1) << 4) + (($post_data['enable_urls']+1) << 2) + (($post_data['enable_sig']+1) << 1);
448
 
 
449
 
// Check if user is watching this topic
450
 
if ($mode != 'post' && $config['allow_topic_notify'] && $user->data['is_registered'])
451
 
{
452
 
        $sql = 'SELECT topic_id
453
 
                FROM ' . TOPICS_WATCH_TABLE . '
454
 
                WHERE topic_id = ' . $topic_id . '
455
 
                        AND user_id = ' . $user->data['user_id'];
456
 
        $result = $db->sql_query($sql);
457
 
        $post_data['notify_set'] = (int) $db->sql_fetchfield('topic_id');
458
 
        $db->sql_freeresult($result);
459
 
}
460
 
 
461
 
// Do we want to edit our post ?
462
 
if ($mode == 'edit' && $post_data['bbcode_uid'])
463
 
{
464
 
        $message_parser->bbcode_uid = $post_data['bbcode_uid'];
465
 
}
466
 
 
467
 
// HTML, BBCode, Smilies, Images and Flash status
468
 
$bbcode_status  = ($config['allow_bbcode'] && $auth->acl_get('f_bbcode', $forum_id)) ? true : false;
469
 
$smilies_status = ($bbcode_status && $config['allow_smilies'] && $auth->acl_get('f_smilies', $forum_id)) ? true : false;
470
 
$img_status             = ($bbcode_status && $auth->acl_get('f_img', $forum_id)) ? true : false;
471
 
$url_status             = ($config['allow_post_links']) ? true : false;
472
 
$flash_status   = ($bbcode_status && $auth->acl_get('f_flash', $forum_id) && $config['allow_post_flash']) ? true : false;
473
 
$quote_status   = ($auth->acl_get('f_reply', $forum_id)) ? true : false;
474
 
 
475
 
// Save Draft
476
 
if ($save && $user->data['is_registered'] && $auth->acl_get('u_savedrafts') && ($mode == 'reply' || $mode == 'post' || $mode == 'quote'))
477
 
{
478
 
        $subject = utf8_normalize_nfc(request_var('subject', '', true));
479
 
        $subject = (!$subject && $mode != 'post') ? $post_data['topic_title'] : $subject;
480
 
        $message = utf8_normalize_nfc(request_var('message', '', true));
481
 
        
482
 
        if ($subject && $message)
483
 
        {
484
 
                if (confirm_box(true))
485
 
                {
486
 
                        $sql = 'INSERT INTO ' . DRAFTS_TABLE . ' ' . $db->sql_build_array('INSERT', array(
487
 
                                'user_id'               => (int) $user->data['user_id'],
488
 
                                'topic_id'              => (int) $topic_id,
489
 
                                'forum_id'              => (int) $forum_id,
490
 
                                'save_time'             => (int) $current_time,
491
 
                                'draft_subject' => (string) $subject,
492
 
                                'draft_message' => (string) $message)
493
 
                        );
494
 
                        $db->sql_query($sql);
495
 
 
496
 
                        $meta_info = ($mode == 'post') ? append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id) : append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&amp;t=$topic_id");
497
 
 
498
 
                        meta_refresh(3, $meta_info);
499
 
 
500
 
                        $message = $user->lang['DRAFT_SAVED'] . '<br /><br />';
501
 
                        $message .= ($mode != 'post') ? sprintf($user->lang['RETURN_TOPIC'], '<a href="' . $meta_info . '">', '</a>') . '<br /><br />' : '';
502
 
                        $message .= sprintf($user->lang['RETURN_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id) . '">', '</a>');
503
 
 
504
 
                        trigger_error($message);
505
 
                }
506
 
                else
507
 
                {
508
 
                        $s_hidden_fields = build_hidden_fields(array(
509
 
                                'mode'          => $mode,
510
 
                                'save'          => true,
511
 
                                'f'                     => $forum_id,
512
 
                                't'                     => $topic_id,
513
 
                                'subject'       => $subject,
514
 
                                'message'       => $message,
515
 
                                )
516
 
                        );
517
 
 
518
 
                        confirm_box(false, 'SAVE_DRAFT', $s_hidden_fields);
519
 
                }
520
 
        }
521
 
        else
522
 
        {
523
 
                if (!$subject || !utf8_clean_string($subject))
524
 
                {
525
 
                        $error[] = $user->lang['EMPTY_SUBJECT'];
526
 
                }
527
 
 
528
 
                if (!$message)
529
 
                {
530
 
                        $error[] = $user->lang['TOO_FEW_CHARS'];
531
 
                }
532
 
        }
533
 
        unset($subject, $message);
534
 
}
535
 
 
536
 
// Load requested Draft
537
 
if ($draft_id && ($mode == 'reply' || $mode == 'quote' || $mode == 'post') && $user->data['is_registered'] && $auth->acl_get('u_savedrafts'))
538
 
{
539
 
        $sql = 'SELECT draft_subject, draft_message
540
 
                FROM ' . DRAFTS_TABLE . "
541
 
                WHERE draft_id = $draft_id
542
 
                        AND user_id = " . $user->data['user_id'];
543
 
        $result = $db->sql_query_limit($sql, 1);
544
 
        $row = $db->sql_fetchrow($result);
545
 
        $db->sql_freeresult($result);
546
 
 
547
 
        if ($row)
548
 
        {
549
 
                $post_data['post_subject'] = $row['draft_subject'];
550
 
                $message_parser->message = $row['draft_message'];
551
 
 
552
 
                $template->assign_var('S_DRAFT_LOADED', true);
553
 
        }
554
 
        else
555
 
        {
556
 
                $draft_id = 0;
557
 
        }
558
 
}
559
 
 
560
 
// Load draft overview
561
 
if ($load && ($mode == 'reply' || $mode == 'quote' || $mode == 'post') && $post_data['drafts'])
562
 
{
563
 
        load_drafts($topic_id, $forum_id);
564
 
}
565
 
 
566
 
$solved_captcha = false;
567
 
 
568
 
if ($submit || $preview || $refresh)
569
 
{
570
 
        $post_data['topic_cur_post_id'] = request_var('topic_cur_post_id', 0);
571
 
        $post_data['post_subject']              = utf8_normalize_nfc(request_var('subject', '', true));
572
 
        $message_parser->message                = utf8_normalize_nfc(request_var('message', '', true));
573
 
 
574
 
        $post_data['username']                  = utf8_normalize_nfc(request_var('username', $post_data['username'], true));
575
 
        $post_data['post_edit_reason']  = (!empty($_POST['edit_reason']) && $mode == 'edit' && $auth->acl_get('m_edit', $forum_id)) ? utf8_normalize_nfc(request_var('edit_reason', '', true)) : '';
576
 
 
577
 
        $post_data['orig_topic_type']   = $post_data['topic_type'];
578
 
        $post_data['topic_type']                = request_var('topic_type', (($mode != 'post') ? (int) $post_data['topic_type'] : POST_NORMAL));
579
 
        $post_data['topic_time_limit']  = request_var('topic_time_limit', (($mode != 'post') ? (int) $post_data['topic_time_limit'] : 0));
580
 
        $post_data['icon_id']                   = request_var('icon', 0);
581
 
 
582
 
        $post_data['enable_bbcode']             = (!$bbcode_status || isset($_POST['disable_bbcode'])) ? false : true;
583
 
        $post_data['enable_smilies']    = (!$smilies_status || isset($_POST['disable_smilies'])) ? false : true;
584
 
        $post_data['enable_urls']               = (isset($_POST['disable_magic_url'])) ? 0 : 1;
585
 
        $post_data['enable_sig']                = (!$config['allow_sig']) ? false : ((isset($_POST['attach_sig']) && $user->data['is_registered']) ? true : false);
586
 
 
587
 
        if ($config['allow_topic_notify'] && $user->data['is_registered'])
588
 
        {
589
 
                $notify = (isset($_POST['notify'])) ? true : false;
590
 
        }
591
 
        else
592
 
        {
593
 
                $notify = false;
594
 
        }
595
 
 
596
 
        $topic_lock                     = (isset($_POST['lock_topic'])) ? true : false;
597
 
        $post_lock                      = (isset($_POST['lock_post'])) ? true : false;
598
 
        $poll_delete            = (isset($_POST['poll_delete'])) ? true : false;
599
 
 
600
 
        if ($submit)
601
 
        {
602
 
                $status_switch = (($post_data['enable_bbcode']+1) << 8) + (($post_data['enable_smilies']+1) << 4) + (($post_data['enable_urls']+1) << 2) + (($post_data['enable_sig']+1) << 1);
603
 
                $status_switch = ($status_switch != $check_value);
604
 
        }
605
 
        else
606
 
        {
607
 
                $status_switch = 1;
608
 
        }
609
 
 
610
 
        // Delete Poll
611
 
        if ($poll_delete && $mode == 'edit' && sizeof($post_data['poll_options']) &&
612
 
                ((!$post_data['poll_last_vote'] && $post_data['poster_id'] == $user->data['user_id'] && $auth->acl_get('f_delete', $forum_id)) || $auth->acl_get('m_delete', $forum_id)))
613
 
        {
614
 
                if ($submit && check_form_key('posting'))
615
 
                {
616
 
                        $sql = 'DELETE FROM ' . POLL_OPTIONS_TABLE . "
617
 
                                WHERE topic_id = $topic_id";
618
 
                        $db->sql_query($sql);
619
 
 
620
 
                        $sql = 'DELETE FROM ' . POLL_VOTES_TABLE . "
621
 
                                WHERE topic_id = $topic_id";
622
 
                        $db->sql_query($sql);
623
 
                        
624
 
                        $topic_sql = array(
625
 
                                'poll_title'            => '',
626
 
                                'poll_start'            => 0,
627
 
                                'poll_length'           => 0,
628
 
                                'poll_last_vote'        => 0,
629
 
                                'poll_max_options'      => 0,
630
 
                                'poll_vote_change'      => 0
631
 
                        );
632
 
 
633
 
                        $sql = 'UPDATE ' . TOPICS_TABLE . '
634
 
                                SET ' . $db->sql_build_array('UPDATE', $topic_sql) . "
635
 
                                WHERE topic_id = $topic_id";
636
 
                        $db->sql_query($sql);
637
 
                }
638
 
 
639
 
                $post_data['poll_title'] = $post_data['poll_option_text'] = '';
640
 
                $post_data['poll_vote_change'] = $post_data['poll_max_options'] = $post_data['poll_length'] = 0;
641
 
        }
642
 
        else
643
 
        {
644
 
                $post_data['poll_title']                = utf8_normalize_nfc(request_var('poll_title', '', true));
645
 
                $post_data['poll_length']               = request_var('poll_length', 0);
646
 
                $post_data['poll_option_text']  = utf8_normalize_nfc(request_var('poll_option_text', '', true));
647
 
                $post_data['poll_max_options']  = request_var('poll_max_options', 1);
648
 
                $post_data['poll_vote_change']  = ($auth->acl_get('f_votechg', $forum_id) && isset($_POST['poll_vote_change'])) ? 1 : 0;
649
 
        }
650
 
 
651
 
        // If replying/quoting and last post id has changed
652
 
        // give user option to continue submit or return to post
653
 
        // notify and show user the post made between his request and the final submit
654
 
        if (($mode == 'reply' || $mode == 'quote') && $post_data['topic_cur_post_id'] && $post_data['topic_cur_post_id'] != $post_data['topic_last_post_id'])
655
 
        {
656
 
                // Only do so if it is allowed forum-wide
657
 
                if ($post_data['forum_flags'] & FORUM_FLAG_POST_REVIEW)
658
 
                {
659
 
                        if (topic_review($topic_id, $forum_id, 'post_review', $post_data['topic_cur_post_id']))
660
 
                        {
661
 
                                $template->assign_var('S_POST_REVIEW', true);
662
 
                        }
663
 
 
664
 
                        $submit = false;
665
 
                        $refresh = true;
666
 
                }
667
 
        }
668
 
 
669
 
        // Parse Attachments - before checksum is calculated
670
 
        $message_parser->parse_attachments('fileupload', $mode, $forum_id, $submit, $preview, $refresh);
671
 
 
672
 
        // Grab md5 'checksum' of new message
673
 
        $message_md5 = md5($message_parser->message);
674
 
 
675
 
        // Check checksum ... don't re-parse message if the same
676
 
        $update_message = ($mode != 'edit' || $message_md5 != $post_data['post_checksum'] || $status_switch || strlen($post_data['bbcode_uid']) < BBCODE_UID_LEN) ? true : false;
677
 
        
678
 
        // Parse message
679
 
        if ($update_message)
680
 
        {
681
 
                if (sizeof($message_parser->warn_msg))
682
 
                {
683
 
                        $error[] = implode('<br />', $message_parser->warn_msg);
684
 
                        $message_parser->warn_msg = array();
685
 
                }
686
 
 
687
 
                $message_parser->parse($post_data['enable_bbcode'], ($config['allow_post_links']) ? $post_data['enable_urls'] : false, $post_data['enable_smilies'], $img_status, $flash_status, $quote_status, $config['allow_post_links']);
688
 
 
689
 
                // On a refresh we do not care about message parsing errors
690
 
                if (sizeof($message_parser->warn_msg) && $refresh)
691
 
                {
692
 
                        $message_parser->warn_msg = array();
693
 
                }
694
 
        }
695
 
        else
696
 
        {
697
 
                $message_parser->bbcode_bitfield = $post_data['bbcode_bitfield'];
698
 
        }
699
 
 
700
 
        if ($mode != 'edit' && !$preview && !$refresh && $config['flood_interval'] && !$auth->acl_get('f_ignoreflood', $forum_id))
701
 
        {
702
 
                // Flood check
703
 
                $last_post_time = 0;
704
 
 
705
 
                if ($user->data['is_registered'])
706
 
                {
707
 
                        $last_post_time = $user->data['user_lastpost_time'];
708
 
                }
709
 
                else
710
 
                {
711
 
                        $sql = 'SELECT post_time AS last_post_time
712
 
                                FROM ' . POSTS_TABLE . "
713
 
                                WHERE poster_ip = '" . $user->ip . "'
714
 
                                        AND post_time > " . ($current_time - $config['flood_interval']);
715
 
                        $result = $db->sql_query_limit($sql, 1);
716
 
                        if ($row = $db->sql_fetchrow($result))
717
 
                        {
718
 
                                $last_post_time = $row['last_post_time'];
719
 
                        }
720
 
                        $db->sql_freeresult($result);
721
 
                }
722
 
 
723
 
                if ($last_post_time && ($current_time - $last_post_time) < intval($config['flood_interval']))
724
 
                {
725
 
                        $error[] = $user->lang['FLOOD_ERROR'];
726
 
                }
727
 
        }
728
 
 
729
 
        // Validate username
730
 
        if (($post_data['username'] && !$user->data['is_registered']) || ($mode == 'edit' && $post_data['poster_id'] == ANONYMOUS && $post_data['username'] && $post_data['post_username'] && $post_data['post_username'] != $post_data['username']))
731
 
        {
732
 
                include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
733
 
 
734
 
                if (($result = validate_username($post_data['username'], (!empty($post_data['post_username'])) ? $post_data['post_username'] : '')) !== false)
735
 
                {
736
 
                        $user->add_lang('ucp');
737
 
                        $error[] = $user->lang[$result . '_USERNAME'];
738
 
                }
739
 
        }
740
 
 
741
 
        if ($config['enable_post_confirm'] && !$user->data['is_registered'] && in_array($mode, array('quote', 'post', 'reply')))
742
 
        {
743
 
                $confirm_id = request_var('confirm_id', '');
744
 
                $confirm_code = request_var('confirm_code', '');
745
 
 
746
 
                $sql = 'SELECT code
747
 
                        FROM ' . CONFIRM_TABLE . "
748
 
                        WHERE confirm_id = '" . $db->sql_escape($confirm_id) . "'
749
 
                                AND session_id = '" . $db->sql_escape($user->session_id) . "'
750
 
                                AND confirm_type = " . CONFIRM_POST;
751
 
                $result = $db->sql_query($sql);
752
 
                $confirm_row = $db->sql_fetchrow($result);
753
 
                $db->sql_freeresult($result);
754
 
 
755
 
                if (empty($confirm_row['code']) || strcasecmp($confirm_row['code'], $confirm_code) !== 0)
756
 
                {
757
 
                        $error[] = $user->lang['CONFIRM_CODE_WRONG'];
758
 
                }
759
 
                else
760
 
                {
761
 
                        $solved_captcha = true;
762
 
                }
763
 
        }
764
 
 
765
 
        // check form
766
 
        if (($submit || $preview) && !check_form_key('posting'))
767
 
        {
768
 
                $error[] = $user->lang['FORM_INVALID'];
769
 
        }
770
 
 
771
 
        // Parse subject
772
 
        if (!$preview && !$refresh && !utf8_clean_string($post_data['post_subject']) && ($mode == 'post' || ($mode == 'edit' && $post_data['topic_first_post_id'] == $post_id)))
773
 
        {
774
 
                $error[] = $user->lang['EMPTY_SUBJECT'];
775
 
        }
776
 
 
777
 
        $post_data['poll_last_vote'] = (isset($post_data['poll_last_vote'])) ? $post_data['poll_last_vote'] : 0;
778
 
 
779
 
        if ($post_data['poll_option_text'] &&
780
 
                ($mode == 'post' || ($mode == 'edit' && $post_id == $post_data['topic_first_post_id']/* && (!$post_data['poll_last_vote'] || $auth->acl_get('m_edit', $forum_id))*/))
781
 
                && $auth->acl_get('f_poll', $forum_id))
782
 
        {
783
 
                $poll = array(
784
 
                        'poll_title'            => $post_data['poll_title'],
785
 
                        'poll_length'           => $post_data['poll_length'],
786
 
                        'poll_max_options'      => $post_data['poll_max_options'],
787
 
                        'poll_option_text'      => $post_data['poll_option_text'],
788
 
                        'poll_start'            => $post_data['poll_start'],
789
 
                        'poll_last_vote'        => $post_data['poll_last_vote'],
790
 
                        'poll_vote_change'      => $post_data['poll_vote_change'],
791
 
                        'enable_bbcode'         => $post_data['enable_bbcode'],
792
 
                        'enable_urls'           => $post_data['enable_urls'],
793
 
                        'enable_smilies'        => $post_data['enable_smilies'],
794
 
                        'img_status'            => $img_status
795
 
                );
796
 
 
797
 
                $message_parser->parse_poll($poll);
798
 
 
799
 
                $post_data['poll_options'] = (isset($poll['poll_options'])) ? $poll['poll_options'] : '';
800
 
                $post_data['poll_title'] = (isset($poll['poll_title'])) ? $poll['poll_title'] : '';
801
 
 
802
 
                /* We reset votes, therefore also allow removing options
803
 
                if ($post_data['poll_last_vote'] && ($poll['poll_options_size'] < $orig_poll_options_size))
804
 
                {
805
 
                        $message_parser->warn_msg[] = $user->lang['NO_DELETE_POLL_OPTIONS'];
806
 
                }*/
807
 
        }
808
 
        else
809
 
        {
810
 
                $poll = array();
811
 
        }
812
 
 
813
 
        // Check topic type
814
 
        if ($post_data['topic_type'] != POST_NORMAL && ($mode == 'post' || ($mode == 'edit' && $post_data['topic_first_post_id'] == $post_id)))
815
 
        {
816
 
                switch ($post_data['topic_type'])
817
 
                {
818
 
                        case POST_GLOBAL:
819
 
                        case POST_ANNOUNCE:
820
 
                                $auth_option = 'f_announce';
821
 
                        break;
822
 
 
823
 
                        case POST_STICKY:
824
 
                                $auth_option = 'f_sticky';
825
 
                        break;
826
 
 
827
 
                        default:
828
 
                                $auth_option = '';
829
 
                        break;
830
 
                }
831
 
 
832
 
                if (!$auth->acl_get($auth_option, $forum_id))
833
 
                {
834
 
                        // There is a special case where a user edits his post whereby the topic type got changed by an admin/mod.
835
 
                        // Another case would be a mod not having sticky permissions for example but edit permissions.
836
 
                        if ($mode == 'edit')
837
 
                        {
838
 
                                // To prevent non-authed users messing around with the topic type we reset it to the original one.
839
 
                                $post_data['topic_type'] = $post_data['orig_topic_type'];
840
 
                        }
841
 
                        else
842
 
                        {
843
 
                                $error[] = $user->lang['CANNOT_POST_' . str_replace('F_', '', strtoupper($auth_option))];
844
 
                        }
845
 
                }
846
 
        }
847
 
 
848
 
        if (sizeof($message_parser->warn_msg))
849
 
        {
850
 
                $error[] = implode('<br />', $message_parser->warn_msg);
851
 
        }
852
 
 
853
 
        // DNSBL check
854
 
        if ($config['check_dnsbl'] && !$refresh)
855
 
        {
856
 
                if (($dnsbl = $user->check_dnsbl('post')) !== false)
857
 
                {
858
 
                        $error[] = sprintf($user->lang['IP_BLACKLISTED'], $user->ip, $dnsbl[1]);
859
 
                }
860
 
        }
861
 
 
862
 
        // Store message, sync counters
863
 
        if (!sizeof($error) && $submit)
864
 
        {
865
 
                // Check if we want to de-globalize the topic... and ask for new forum
866
 
                if ($post_data['topic_type'] != POST_GLOBAL)
867
 
                {
868
 
                        $sql = 'SELECT topic_type, forum_id
869
 
                                FROM ' . TOPICS_TABLE . "
870
 
                                WHERE topic_id = $topic_id";
871
 
                        $result = $db->sql_query($sql);
872
 
                        $row = $db->sql_fetchrow($result);
873
 
                        $db->sql_freeresult($result);
874
 
 
875
 
                        if ($row && !$row['forum_id'] && $row['topic_type'] == POST_GLOBAL)
876
 
                        {
877
 
                                $to_forum_id = request_var('to_forum_id', 0);
878
 
 
879
 
                                if ($to_forum_id)
880
 
                                {
881
 
                                        $sql = 'SELECT forum_type
882
 
                                                FROM ' . FORUMS_TABLE . '
883
 
                                                WHERE forum_id = ' . $to_forum_id;
884
 
                                        $result = $db->sql_query($sql);
885
 
                                        $forum_type = (int) $db->sql_fetchfield('forum_type');
886
 
                                        $db->sql_freeresult($result);
887
 
 
888
 
                                        if ($forum_type != FORUM_POST || !$auth->acl_get('f_post', $to_forum_id))
889
 
                                        {
890
 
                                                $to_forum_id = 0;
891
 
                                        }
892
 
                                }
893
 
 
894
 
                                if (!$to_forum_id)
895
 
                                {
896
 
                                        include_once($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
897
 
 
898
 
                                        $template->assign_vars(array(
899
 
                                                'S_FORUM_SELECT'        => make_forum_select(false, false, false, true, true, true),
900
 
                                                'S_UNGLOBALISE'         => true)
901
 
                                        );
902
 
 
903
 
                                        $submit = false;
904
 
                                        $refresh = true;
905
 
                                }
906
 
                                else
907
 
                                {
908
 
                                        if (!$auth->acl_get('f_post', $to_forum_id))
909
 
                                        {
910
 
                                                // This will only be triggered if the user tried to trick the forum.
911
 
                                                trigger_error('NOT_AUTHORISED');
912
 
                                        }
913
 
 
914
 
                                        $forum_id = $to_forum_id;
915
 
                                }
916
 
                        }
917
 
                }
918
 
 
919
 
                if ($submit)
920
 
                {
921
 
                        // Lock/Unlock Topic
922
 
                        $change_topic_status = $post_data['topic_status'];
923
 
                        $perm_lock_unlock = ($auth->acl_get('m_lock', $forum_id) || ($auth->acl_get('f_user_lock', $forum_id) && $user->data['is_registered'] && !empty($post_data['topic_poster']) && $user->data['user_id'] == $post_data['topic_poster'] && $post_data['topic_status'] == ITEM_UNLOCKED)) ? true : false;
924
 
 
925
 
                        if ($post_data['topic_status'] == ITEM_LOCKED && !$topic_lock && $perm_lock_unlock)
926
 
                        {
927
 
                                $change_topic_status = ITEM_UNLOCKED;
928
 
                        }
929
 
                        else if ($post_data['topic_status'] == ITEM_UNLOCKED && $topic_lock && $perm_lock_unlock)
930
 
                        {
931
 
                                $change_topic_status = ITEM_LOCKED;
932
 
                        }
933
 
 
934
 
                        if ($change_topic_status != $post_data['topic_status'])
935
 
                        {
936
 
                                $sql = 'UPDATE ' . TOPICS_TABLE . "
937
 
                                        SET topic_status = $change_topic_status
938
 
                                        WHERE topic_id = $topic_id
939
 
                                                AND topic_moved_id = 0";
940
 
                                $db->sql_query($sql);
941
 
 
942
 
                                $user_lock = ($auth->acl_get('f_user_lock', $forum_id) && $user->data['is_registered'] && $user->data['user_id'] == $post_data['topic_poster']) ? 'USER_' : '';
943
 
 
944
 
                                add_log('mod', $forum_id, $topic_id, 'LOG_' . $user_lock . (($change_topic_status == ITEM_LOCKED) ? 'LOCK' : 'UNLOCK'), $post_data['topic_title']);
945
 
                        }
946
 
 
947
 
                        // Lock/Unlock Post Edit
948
 
                        if ($mode == 'edit' && $post_data['post_edit_locked'] == ITEM_LOCKED && !$post_lock && $auth->acl_get('m_edit', $forum_id))
949
 
                        {
950
 
                                $post_data['post_edit_locked'] = ITEM_UNLOCKED;
951
 
                        }
952
 
                        else if ($mode == 'edit' && $post_data['post_edit_locked'] == ITEM_UNLOCKED && $post_lock && $auth->acl_get('m_edit', $forum_id))
953
 
                        {
954
 
                                $post_data['post_edit_locked'] = ITEM_LOCKED;
955
 
                        }
956
 
 
957
 
                        $data = array(
958
 
                                'topic_title'                   => (empty($post_data['topic_title'])) ? $post_data['post_subject'] : $post_data['topic_title'],
959
 
                                'topic_first_post_id'   => (isset($post_data['topic_first_post_id'])) ? (int) $post_data['topic_first_post_id'] : 0,
960
 
                                'topic_last_post_id'    => (isset($post_data['topic_last_post_id'])) ? (int) $post_data['topic_last_post_id'] : 0,
961
 
                                'topic_time_limit'              => (int) $post_data['topic_time_limit'],
962
 
                                'topic_attachment'              => (isset($post_data['topic_attachment'])) ? (int) $post_data['topic_attachment'] : 0,
963
 
                                'post_id'                               => (int) $post_id,
964
 
                                'topic_id'                              => (int) $topic_id,
965
 
                                'forum_id'                              => (int) $forum_id,
966
 
                                'icon_id'                               => (int) $post_data['icon_id'],
967
 
                                'poster_id'                             => (int) $post_data['poster_id'],
968
 
                                'enable_sig'                    => (bool) $post_data['enable_sig'],
969
 
                                'enable_bbcode'                 => (bool) $post_data['enable_bbcode'],
970
 
                                'enable_smilies'                => (bool) $post_data['enable_smilies'],
971
 
                                'enable_urls'                   => (bool) $post_data['enable_urls'],
972
 
                                'enable_indexing'               => (bool) $post_data['enable_indexing'],
973
 
                                'message_md5'                   => (string) $message_md5,
974
 
                                'post_time'                             => (isset($post_data['post_time'])) ? (int) $post_data['post_time'] : $current_time,
975
 
                                'post_checksum'                 => (isset($post_data['post_checksum'])) ? (string) $post_data['post_checksum'] : '',
976
 
                                'post_edit_reason'              => $post_data['post_edit_reason'],
977
 
                                'post_edit_user'                => ($mode == 'edit') ? $user->data['user_id'] : ((isset($post_data['post_edit_user'])) ? (int) $post_data['post_edit_user'] : 0),
978
 
                                'forum_parents'                 => $post_data['forum_parents'],
979
 
                                'forum_name'                    => $post_data['forum_name'],
980
 
                                'notify'                                => $notify,
981
 
                                'notify_set'                    => $post_data['notify_set'],
982
 
                                'poster_ip'                             => (isset($post_data['poster_ip'])) ? $post_data['poster_ip'] : $user->ip,
983
 
                                'post_edit_locked'              => (int) $post_data['post_edit_locked'],
984
 
                                'bbcode_bitfield'               => $message_parser->bbcode_bitfield,
985
 
                                'bbcode_uid'                    => $message_parser->bbcode_uid,
986
 
                                'message'                               => $message_parser->message,
987
 
                                'attachment_data'               => $message_parser->attachment_data,
988
 
                                'filename_data'                 => $message_parser->filename_data,
989
 
 
990
 
                                'topic_approved'                => (isset($post_data['topic_approved'])) ? $post_data['topic_approved'] : false,
991
 
                                'post_approved'                 => (isset($post_data['post_approved'])) ? $post_data['post_approved'] : false,
992
 
                        );
993
 
 
994
 
                        if ($mode == 'edit')
995
 
                        {
996
 
                                $data['topic_replies_real'] = $post_data['topic_replies_real'];
997
 
                                $data['topic_replies'] = $post_data['topic_replies'];
998
 
                        }
999
 
 
1000
 
                        unset($message_parser);
1001
 
 
1002
 
                        $redirect_url = submit_post($mode, $post_data['post_subject'], $post_data['username'], $post_data['topic_type'], $poll, $data, $update_message);
1003
 
                        $post_need_approval = (!$auth->acl_get('f_noapprove', $data['forum_id']) && !$auth->acl_get('m_approve', $data['forum_id'])) ? true : false;
1004
 
 
1005
 
                        // If the post need approval we will wait a lot longer.
1006
 
                        if ($post_need_approval)
1007
 
                        {
1008
 
                                meta_refresh(10, $redirect_url);
1009
 
                                $message = ($mode == 'edit') ? $user->lang['POST_EDITED_MOD'] : $user->lang['POST_STORED_MOD'];
1010
 
                                $message .= (($user->data['user_id'] == ANONYMOUS) ? '' : ' '. $user->lang['POST_APPROVAL_NOTIFY']);
1011
 
                        }
1012
 
                        else
1013
 
                        {
1014
 
                                meta_refresh(3, $redirect_url);
1015
 
 
1016
 
                                $message = ($mode == 'edit') ? 'POST_EDITED' : 'POST_STORED';
1017
 
                                $message = $user->lang[$message] . '<br /><br />' . sprintf($user->lang['VIEW_MESSAGE'], '<a href="' . $redirect_url . '">', '</a>');
1018
 
                        }
1019
 
 
1020
 
                        $message .= '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $data['forum_id']) . '">', '</a>');
1021
 
                        trigger_error($message);
1022
 
                }
1023
 
        }
1024
 
}
1025
 
 
1026
 
// Preview
1027
 
if (!sizeof($error) && $preview)
1028
 
{
1029
 
        $post_data['post_time'] = ($mode == 'edit') ? $post_data['post_time'] : $current_time;
1030
 
 
1031
 
        $preview_message = $message_parser->format_display($post_data['enable_bbcode'], $post_data['enable_urls'], $post_data['enable_smilies'], false);
1032
 
 
1033
 
        $preview_signature = ($mode == 'edit') ? $post_data['user_sig'] : $user->data['user_sig'];
1034
 
        $preview_signature_uid = ($mode == 'edit') ? $post_data['user_sig_bbcode_uid'] : $user->data['user_sig_bbcode_uid'];
1035
 
        $preview_signature_bitfield = ($mode == 'edit') ? $post_data['user_sig_bbcode_bitfield'] : $user->data['user_sig_bbcode_bitfield'];
1036
 
 
1037
 
        // Signature
1038
 
        if ($post_data['enable_sig'] && $config['allow_sig'] && $preview_signature && $auth->acl_get('f_sigs', $forum_id))
1039
 
        {
1040
 
                $parse_sig = new parse_message($preview_signature);
1041
 
                $parse_sig->bbcode_uid = $preview_signature_uid;
1042
 
                $parse_sig->bbcode_bitfield = $preview_signature_bitfield;
1043
 
 
1044
 
                // Not sure about parameters for bbcode/smilies/urls... in signatures
1045
 
                $parse_sig->format_display($config['allow_sig_bbcode'], true, $config['allow_sig_smilies']);
1046
 
                $preview_signature = $parse_sig->message;
1047
 
                unset($parse_sig);
1048
 
        }
1049
 
        else
1050
 
        {
1051
 
                $preview_signature = '';
1052
 
        }
1053
 
 
1054
 
        $preview_subject = censor_text($post_data['post_subject']);
1055
 
 
1056
 
        // Poll Preview
1057
 
        if (!$poll_delete && ($mode == 'post' || ($mode == 'edit' && $post_id == $post_data['topic_first_post_id']/* && (!$post_data['poll_last_vote'] || $auth->acl_get('m_edit', $forum_id))*/))
1058
 
        && $auth->acl_get('f_poll', $forum_id))
1059
 
        {
1060
 
                $parse_poll = new parse_message($post_data['poll_title']);
1061
 
                $parse_poll->bbcode_uid = $message_parser->bbcode_uid;
1062
 
                $parse_poll->bbcode_bitfield = $message_parser->bbcode_bitfield;
1063
 
 
1064
 
                $parse_poll->format_display($post_data['enable_bbcode'], $post_data['enable_urls'], $post_data['enable_smilies']);
1065
 
 
1066
 
                if ($post_data['poll_length'])
1067
 
                {
1068
 
                        $poll_end = ($post_data['poll_length'] * 86400) + (($post_data['poll_start']) ? $post_data['poll_start'] : time());
1069
 
                }
1070
 
 
1071
 
                $template->assign_vars(array(
1072
 
                        'S_HAS_POLL_OPTIONS'    => (sizeof($post_data['poll_options'])),
1073
 
                        'S_IS_MULTI_CHOICE'             => ($post_data['poll_max_options'] > 1) ? true : false,
1074
 
 
1075
 
                        'POLL_QUESTION'         => $parse_poll->message,
1076
 
                        
1077
 
                        'L_POLL_LENGTH'         => ($post_data['poll_length']) ? sprintf($user->lang['POLL_RUN_TILL'], $user->format_date($poll_end)) : '',
1078
 
                        'L_MAX_VOTES'           => ($post_data['poll_max_options'] == 1) ? $user->lang['MAX_OPTION_SELECT'] : sprintf($user->lang['MAX_OPTIONS_SELECT'], $post_data['poll_max_options']))
1079
 
                );
1080
 
 
1081
 
                $parse_poll->message = implode("\n", $post_data['poll_options']);
1082
 
                $parse_poll->format_display($post_data['enable_bbcode'], $post_data['enable_urls'], $post_data['enable_smilies']);
1083
 
                $preview_poll_options = explode('<br />', $parse_poll->message);
1084
 
                unset($parse_poll);
1085
 
 
1086
 
                foreach ($preview_poll_options as $key => $option)
1087
 
                {
1088
 
                        $template->assign_block_vars('poll_option', array(
1089
 
                                'POLL_OPTION_CAPTION'   => $option,
1090
 
                                'POLL_OPTION_ID'                => $key + 1)
1091
 
                        );
1092
 
                }
1093
 
                unset($preview_poll_options);
1094
 
        }
1095
 
 
1096
 
        // Attachment Preview
1097
 
        if (sizeof($message_parser->attachment_data))
1098
 
        {
1099
 
                $template->assign_var('S_HAS_ATTACHMENTS', true);
1100
 
 
1101
 
                $update_count = array();
1102
 
                $attachment_data = $message_parser->attachment_data;
1103
 
 
1104
 
                parse_attachments($forum_id, $preview_message, $attachment_data, $update_count, true);
1105
 
 
1106
 
                foreach ($attachment_data as $i => $attachment)
1107
 
                {
1108
 
                        $template->assign_block_vars('attachment', array(
1109
 
                                'DISPLAY_ATTACHMENT'    => $attachment)
1110
 
                        );
1111
 
                }
1112
 
                unset($attachment_data);
1113
 
        }
1114
 
 
1115
 
        if (!sizeof($error))
1116
 
        {
1117
 
                $template->assign_vars(array(
1118
 
                        'PREVIEW_SUBJECT'               => $preview_subject,
1119
 
                        'PREVIEW_MESSAGE'               => $preview_message,
1120
 
                        'PREVIEW_SIGNATURE'             => $preview_signature,
1121
 
 
1122
 
                        'S_DISPLAY_PREVIEW'             => true)
1123
 
                );
1124
 
        }
1125
 
}
1126
 
 
1127
 
// Decode text for message display
1128
 
$post_data['bbcode_uid'] = ($mode == 'quote' && !$preview && !$refresh && !sizeof($error)) ? $post_data['bbcode_uid'] : $message_parser->bbcode_uid;
1129
 
$message_parser->decode_message($post_data['bbcode_uid']);
1130
 
 
1131
 
if ($mode == 'quote' && !$submit && !$preview && !$refresh)
1132
 
{
1133
 
        $message_parser->message = '[quote=&quot;' . $post_data['quote_username'] . '&quot;]' . censor_text(trim($message_parser->message)) . "[/quote]\n";
1134
 
}
1135
 
 
1136
 
if (($mode == 'reply' || $mode == 'quote') && !$submit && !$preview && !$refresh)
1137
 
{
1138
 
        $post_data['post_subject'] = ((strpos($post_data['post_subject'], 'Re: ') !== 0) ? 'Re: ' : '') . censor_text($post_data['post_subject']);
1139
 
}
1140
 
 
1141
 
$attachment_data = $message_parser->attachment_data;
1142
 
$filename_data = $message_parser->filename_data;
1143
 
$post_data['post_text'] = $message_parser->message;
1144
 
 
1145
 
if (sizeof($post_data['poll_options']) && $post_data['poll_title'])
1146
 
{
1147
 
        $message_parser->message = $post_data['poll_title'];
1148
 
        $message_parser->bbcode_uid = $post_data['bbcode_uid'];
1149
 
 
1150
 
        $message_parser->decode_message();
1151
 
        $post_data['poll_title'] = $message_parser->message;
1152
 
 
1153
 
        $message_parser->message = implode("\n", $post_data['poll_options']);
1154
 
        $message_parser->decode_message();
1155
 
        $post_data['poll_options'] = explode("\n", $message_parser->message);
1156
 
}
1157
 
unset($message_parser);
1158
 
 
1159
 
// MAIN POSTING PAGE BEGINS HERE
1160
 
 
1161
 
// Forum moderators?
1162
 
$moderators = array();
1163
 
get_moderators($moderators, $forum_id);
1164
 
 
1165
 
// Generate smiley listing
1166
 
generate_smilies('inline', $forum_id);
1167
 
 
1168
 
// Generate inline attachment select box
1169
 
posting_gen_inline_attachments($attachment_data);
1170
 
 
1171
 
// Do show topic type selection only in first post.
1172
 
$topic_type_toggle = false;
1173
 
 
1174
 
if ($mode == 'post' || ($mode == 'edit' && $post_id == $post_data['topic_first_post_id']))
1175
 
{
1176
 
        $topic_type_toggle = posting_gen_topic_types($forum_id, $post_data['topic_type']);
1177
 
}
1178
 
 
1179
 
$s_topic_icons = false;
1180
 
if ($post_data['enable_icons'] && $auth->acl_get('f_icons', $forum_id))
1181
 
{
1182
 
        $s_topic_icons = posting_gen_topic_icons($mode, $post_data['icon_id']);
1183
 
}
1184
 
 
1185
 
$bbcode_checked         = (isset($post_data['enable_bbcode'])) ? !$post_data['enable_bbcode'] : (($config['allow_bbcode']) ? !$user->optionget('bbcode') : 1);
1186
 
$smilies_checked        = (isset($post_data['enable_smilies'])) ? !$post_data['enable_smilies'] : (($config['allow_smilies']) ? !$user->optionget('smilies') : 1);
1187
 
$urls_checked           = (isset($post_data['enable_urls'])) ? !$post_data['enable_urls'] : 0;
1188
 
$sig_checked            = $post_data['enable_sig'];
1189
 
$lock_topic_checked     = (isset($topic_lock) && $topic_lock) ? $topic_lock : (($post_data['topic_status'] == ITEM_LOCKED) ? 1 : 0);
1190
 
$lock_post_checked      = (isset($post_lock)) ? $post_lock : $post_data['post_edit_locked'];
1191
 
 
1192
 
// If the user is replying or posting and not already watching this topic but set to always being notified we need to overwrite this setting
1193
 
$notify_set                     = ($mode != 'edit' && $config['allow_topic_notify'] && $user->data['is_registered'] && !$post_data['notify_set']) ? $user->data['user_notify'] : $post_data['notify_set'];
1194
 
$notify_checked         = (isset($notify)) ? $notify : (($mode == 'post') ? $user->data['user_notify'] : $notify_set);
1195
 
 
1196
 
// Page title & action URL, include session_id for security purpose
1197
 
$s_action = append_sid("{$phpbb_root_path}posting.$phpEx", "mode=$mode&amp;f=$forum_id", true, $user->session_id);
1198
 
$s_action .= ($topic_id) ? "&amp;t=$topic_id" : '';
1199
 
$s_action .= ($post_id) ? "&amp;p=$post_id" : '';
1200
 
 
1201
 
switch ($mode)
1202
 
{
1203
 
        case 'post':
1204
 
                $page_title = $user->lang['POST_TOPIC'];
1205
 
        break;
1206
 
 
1207
 
        case 'quote':
1208
 
        case 'reply':
1209
 
                $page_title = $user->lang['POST_REPLY'];
1210
 
        break;
1211
 
 
1212
 
        case 'delete':
1213
 
        case 'edit':
1214
 
                $page_title = $user->lang['EDIT_POST'];
1215
 
        break;
1216
 
}
1217
 
 
1218
 
// Build Navigation Links
1219
 
generate_forum_nav($post_data);
1220
 
 
1221
 
// Build Forum Rules
1222
 
generate_forum_rules($post_data);
1223
 
 
1224
 
if ($config['enable_post_confirm'] && !$user->data['is_registered'] && $solved_captcha === false && ($mode == 'post' || $mode == 'reply' || $mode == 'quote'))
1225
 
{
1226
 
        // Show confirm image
1227
 
        $sql = 'DELETE FROM ' . CONFIRM_TABLE . "
1228
 
                WHERE session_id = '" . $db->sql_escape($user->session_id) . "'
1229
 
                        AND confirm_type = " . CONFIRM_POST;
1230
 
        $db->sql_query($sql);
1231
 
 
1232
 
        // Generate code
1233
 
        $code = gen_rand_string(mt_rand(5, 8));
1234
 
        $confirm_id = md5(unique_id($user->ip));
1235
 
        $seed = hexdec(substr(unique_id(), 4, 10));
1236
 
 
1237
 
        // compute $seed % 0x7fffffff
1238
 
        $seed -= 0x7fffffff * floor($seed / 0x7fffffff);
1239
 
 
1240
 
        $sql = 'INSERT INTO ' . CONFIRM_TABLE . ' ' . $db->sql_build_array('INSERT', array(
1241
 
                'confirm_id'    => (string) $confirm_id,
1242
 
                'session_id'    => (string) $user->session_id,
1243
 
                'confirm_type'  => (int) CONFIRM_POST,
1244
 
                'code'                  => (string) $code,
1245
 
                'seed'                  => (int) $seed)
1246
 
        );
1247
 
        $db->sql_query($sql);
1248
 
 
1249
 
        $template->assign_vars(array(
1250
 
                'S_CONFIRM_CODE'                        => true,
1251
 
                'CONFIRM_ID'                            => $confirm_id,
1252
 
                'CONFIRM_IMAGE'                         => '<img src="' . append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=confirm&amp;id=' . $confirm_id . '&amp;type=' . CONFIRM_POST) . '" alt="" title="" />',
1253
 
                'L_POST_CONFIRM_EXPLAIN'        => sprintf($user->lang['POST_CONFIRM_EXPLAIN'], '<a href="mailto:' . htmlspecialchars($config['board_contact']) . '">', '</a>'),
1254
 
        ));
1255
 
}
1256
 
 
1257
 
$s_hidden_fields = ($mode == 'reply' || $mode == 'quote') ? '<input type="hidden" name="topic_cur_post_id" value="' . $post_data['topic_last_post_id'] . '" />' : '';
1258
 
$s_hidden_fields .= '<input type="hidden" name="lastclick" value="' . $current_time . '" />';
1259
 
$s_hidden_fields .= ($draft_id || isset($_REQUEST['draft_loaded'])) ? '<input type="hidden" name="draft_loaded" value="' . request_var('draft_loaded', $draft_id) . '" />' : '';
1260
 
 
1261
 
// Add the confirm id/code pair to the hidden fields, else an error is displayed on next submit/preview
1262
 
if ($solved_captcha !== false)
1263
 
{
1264
 
        $s_hidden_fields .= build_hidden_fields(array(
1265
 
                'confirm_id'            => request_var('confirm_id', ''),
1266
 
                'confirm_code'          => request_var('confirm_code', ''))
1267
 
        );
1268
 
}
1269
 
 
1270
 
$form_enctype = (@ini_get('file_uploads') == '0' || strtolower(@ini_get('file_uploads')) == 'off' || @ini_get('file_uploads') == '0' || !$config['allow_attachments'] || !$auth->acl_get('u_attach') || !$auth->acl_get('f_attach', $forum_id)) ? '' : ' enctype="multipart/form-data"';
1271
 
add_form_key('posting');
1272
 
 
1273
 
 
1274
 
// Start assigning vars for main posting page ...
1275
 
$template->assign_vars(array(
1276
 
        'L_POST_A'                                      => $page_title,
1277
 
        'L_ICON'                                        => ($mode == 'reply' || $mode == 'quote' || ($mode == 'edit' && $post_id != $post_data['topic_first_post_id'])) ? $user->lang['POST_ICON'] : $user->lang['TOPIC_ICON'],
1278
 
        'L_MESSAGE_BODY_EXPLAIN'        => (intval($config['max_post_chars'])) ? sprintf($user->lang['MESSAGE_BODY_EXPLAIN'], intval($config['max_post_chars'])) : '',
1279
 
 
1280
 
        'FORUM_NAME'                    => $post_data['forum_name'],
1281
 
        'FORUM_DESC'                    => ($post_data['forum_desc']) ? generate_text_for_display($post_data['forum_desc'], $post_data['forum_desc_uid'], $post_data['forum_desc_bitfield'], $post_data['forum_desc_options']) : '',
1282
 
        'TOPIC_TITLE'                   => censor_text($post_data['topic_title']),
1283
 
        'MODERATORS'                    => (sizeof($moderators)) ? implode(', ', $moderators[$forum_id]) : '',
1284
 
        'USERNAME'                              => ((!$preview && $mode != 'quote') || $preview) ? $post_data['username'] : '',
1285
 
        'SUBJECT'                               => $post_data['post_subject'],
1286
 
        'MESSAGE'                               => $post_data['post_text'],
1287
 
        'BBCODE_STATUS'                 => ($bbcode_status) ? sprintf($user->lang['BBCODE_IS_ON'], '<a href="' . append_sid("{$phpbb_root_path}faq.$phpEx", 'mode=bbcode') . '">', '</a>') : sprintf($user->lang['BBCODE_IS_OFF'], '<a href="' . append_sid("{$phpbb_root_path}faq.$phpEx", 'mode=bbcode') . '">', '</a>'),
1288
 
        'IMG_STATUS'                    => ($img_status) ? $user->lang['IMAGES_ARE_ON'] : $user->lang['IMAGES_ARE_OFF'],
1289
 
        'FLASH_STATUS'                  => ($flash_status) ? $user->lang['FLASH_IS_ON'] : $user->lang['FLASH_IS_OFF'],
1290
 
        'SMILIES_STATUS'                => ($smilies_status) ? $user->lang['SMILIES_ARE_ON'] : $user->lang['SMILIES_ARE_OFF'],
1291
 
        'URL_STATUS'                    => ($bbcode_status && $url_status) ? $user->lang['URL_IS_ON'] : $user->lang['URL_IS_OFF'],
1292
 
        'MINI_POST_IMG'                 => $user->img('icon_post_target', $user->lang['POST']),
1293
 
        'POST_DATE'                             => ($post_data['post_time']) ? $user->format_date($post_data['post_time']) : '',
1294
 
        'ERROR'                                 => (sizeof($error)) ? implode('<br />', $error) : '',
1295
 
        'TOPIC_TIME_LIMIT'              => (int) $post_data['topic_time_limit'],
1296
 
        'EDIT_REASON'                   => $post_data['post_edit_reason'],
1297
 
        'U_VIEW_FORUM'                  => append_sid("{$phpbb_root_path}viewforum.$phpEx", "f=$forum_id"),
1298
 
        'U_VIEW_TOPIC'                  => ($mode != 'post') ? append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&amp;t=$topic_id") : '',
1299
 
        'U_PROGRESS_BAR'                => append_sid("{$phpbb_root_path}posting.$phpEx", "f=$forum_id&amp;mode=popup"),
1300
 
        'UA_PROGRESS_BAR'               => addslashes(append_sid("{$phpbb_root_path}posting.$phpEx", "f=$forum_id&amp;mode=popup")),
1301
 
 
1302
 
        'S_PRIVMSGS'                            => false,
1303
 
        'S_CLOSE_PROGRESS_WINDOW'       => (isset($_POST['add_file'])) ? true : false,
1304
 
        'S_EDIT_POST'                           => ($mode == 'edit') ? true : false,
1305
 
        'S_EDIT_REASON'                         => ($mode == 'edit' && $auth->acl_get('m_edit', $forum_id)) ? true : false,
1306
 
        'S_DISPLAY_USERNAME'            => (!$user->data['is_registered'] || ($mode == 'edit' && $post_data['poster_id'] == ANONYMOUS)) ? true : false,
1307
 
        'S_SHOW_TOPIC_ICONS'            => $s_topic_icons,
1308
 
        'S_DELETE_ALLOWED'                      => ($mode == 'edit' && (($post_id == $post_data['topic_last_post_id'] && $post_data['poster_id'] == $user->data['user_id'] && $auth->acl_get('f_delete', $forum_id)) || $auth->acl_get('m_delete', $forum_id))) ? true : false,
1309
 
        'S_BBCODE_ALLOWED'                      => $bbcode_status,
1310
 
        'S_BBCODE_CHECKED'                      => ($bbcode_checked) ? ' checked="checked"' : '',
1311
 
        'S_SMILIES_ALLOWED'                     => $smilies_status,
1312
 
        'S_SMILIES_CHECKED'                     => ($smilies_checked) ? ' checked="checked"' : '',
1313
 
        'S_SIG_ALLOWED'                         => ($auth->acl_get('f_sigs', $forum_id) && $config['allow_sig'] && $user->data['is_registered']) ? true : false,
1314
 
        'S_SIGNATURE_CHECKED'           => ($sig_checked) ? ' checked="checked"' : '',
1315
 
        'S_NOTIFY_ALLOWED'                      => (!$user->data['is_registered'] || ($mode == 'edit' && $user->data['user_id'] != $post_data['poster_id']) || !$config['allow_topic_notify'] || !$config['email_enable']) ? false : true,
1316
 
        'S_NOTIFY_CHECKED'                      => ($notify_checked) ? ' checked="checked"' : '',
1317
 
        'S_LOCK_TOPIC_ALLOWED'          => (($mode == 'edit' || $mode == 'reply' || $mode == 'quote') && ($auth->acl_get('m_lock', $forum_id) || ($auth->acl_get('f_user_lock', $forum_id) && $user->data['is_registered'] && !empty($post_data['topic_poster']) && $user->data['user_id'] == $post_data['topic_poster'] && $post_data['topic_status'] == ITEM_UNLOCKED))) ? true : false,
1318
 
        'S_LOCK_TOPIC_CHECKED'          => ($lock_topic_checked) ? ' checked="checked"' : '',
1319
 
        'S_LOCK_POST_ALLOWED'           => ($mode == 'edit' && $auth->acl_get('m_edit', $forum_id)) ? true : false,
1320
 
        'S_LOCK_POST_CHECKED'           => ($lock_post_checked) ? ' checked="checked"' : '',
1321
 
        'S_LINKS_ALLOWED'                       => $url_status,
1322
 
        'S_MAGIC_URL_CHECKED'           => ($urls_checked) ? ' checked="checked"' : '',
1323
 
        'S_TYPE_TOGGLE'                         => $topic_type_toggle,
1324
 
        'S_SAVE_ALLOWED'                        => ($auth->acl_get('u_savedrafts') && $user->data['is_registered'] && $mode != 'edit') ? true : false,
1325
 
        'S_HAS_DRAFTS'                          => ($auth->acl_get('u_savedrafts') && $user->data['is_registered'] && $post_data['drafts']) ? true : false,
1326
 
        'S_FORM_ENCTYPE'                        => $form_enctype,
1327
 
 
1328
 
        'S_BBCODE_IMG'                  => $img_status,
1329
 
        'S_BBCODE_URL'                  => $url_status,
1330
 
        'S_BBCODE_FLASH'                => $flash_status,
1331
 
        'S_BBCODE_QUOTE'                => $quote_status,
1332
 
 
1333
 
        'S_POST_ACTION'                 => $s_action,
1334
 
        'S_HIDDEN_FIELDS'               => $s_hidden_fields)
1335
 
);
1336
 
 
1337
 
// Build custom bbcodes array
1338
 
display_custom_bbcodes();
1339
 
 
1340
 
// Poll entry
1341
 
if (($mode == 'post' || ($mode == 'edit' && $post_id == $post_data['topic_first_post_id']/* && (!$post_data['poll_last_vote'] || $auth->acl_get('m_edit', $forum_id))*/))
1342
 
        && $auth->acl_get('f_poll', $forum_id))
1343
 
{
1344
 
        $template->assign_vars(array(
1345
 
                'S_SHOW_POLL_BOX'               => true,
1346
 
                'S_POLL_VOTE_CHANGE'    => ($auth->acl_get('f_votechg', $forum_id)),
1347
 
                'S_POLL_DELETE'                 => ($mode == 'edit' && sizeof($post_data['poll_options']) && ((!$post_data['poll_last_vote'] && $post_data['poster_id'] == $user->data['user_id'] && $auth->acl_get('f_delete', $forum_id)) || $auth->acl_get('m_delete', $forum_id))),
1348
 
                'S_POLL_DELETE_CHECKED' => (!empty($poll_delete)) ? true : false,
1349
 
 
1350
 
                'L_POLL_OPTIONS_EXPLAIN'        => sprintf($user->lang['POLL_OPTIONS_' . (($mode == 'edit') ? 'EDIT_' : '') . 'EXPLAIN'], $config['max_poll_options']),
1351
 
 
1352
 
                'VOTE_CHANGE_CHECKED'   => (!empty($post_data['poll_vote_change'])) ? ' checked="checked"' : '',
1353
 
                'POLL_TITLE'                    => (isset($post_data['poll_title'])) ? $post_data['poll_title'] : '',
1354
 
                'POLL_OPTIONS'                  => (!empty($post_data['poll_options'])) ? implode("\n", $post_data['poll_options']) : '',
1355
 
                'POLL_MAX_OPTIONS'              => (isset($post_data['poll_max_options'])) ? (int) $post_data['poll_max_options'] : 1,
1356
 
                'POLL_LENGTH'                   => $post_data['poll_length'])
1357
 
        );
1358
 
}
1359
 
 
1360
 
// Attachment entry
1361
 
// Not using acl_gets here, because it is using OR logic
1362
 
if ($auth->acl_get('f_attach', $forum_id) && $auth->acl_get('u_attach') && $config['allow_attachments'] && $form_enctype)
1363
 
{
1364
 
        posting_gen_attachment_entry($attachment_data, $filename_data);
1365
 
}
1366
 
 
1367
 
// Output page ...
1368
 
page_header($page_title);
1369
 
 
1370
 
$template->set_filenames(array(
1371
 
        'body' => 'posting_body.html')
1372
 
);
1373
 
 
1374
 
make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
1375
 
 
1376
 
// Topic review
1377
 
if ($mode == 'reply' || $mode == 'quote')
1378
 
{
1379
 
        if (topic_review($topic_id, $forum_id))
1380
 
        {
1381
 
                $template->assign_var('S_DISPLAY_REVIEW', true);
1382
 
        }
1383
 
}
1384
 
 
1385
 
page_footer();
1386
 
 
1387
 
/**
1388
 
* Show upload popup (progress bar)
1389
 
*/
1390
 
function upload_popup($forum_style = 0)
1391
 
{
1392
 
        global $template, $user;
1393
 
 
1394
 
        ($forum_style) ? $user->setup('posting', $forum_style) : $user->setup('posting');
1395
 
 
1396
 
        page_header($user->lang['PROGRESS_BAR']);
1397
 
 
1398
 
        $template->set_filenames(array(
1399
 
                'popup' => 'posting_progress_bar.html')
1400
 
        );
1401
 
 
1402
 
        $template->assign_vars(array(
1403
 
                'PROGRESS_BAR'  => $user->img('upload_bar', $user->lang['UPLOAD_IN_PROGRESS']))
1404
 
        );
1405
 
 
1406
 
        $template->display('popup');
1407
 
}
1408
 
 
1409
 
/**
1410
 
* Do the various checks required for removing posts as well as removing it
1411
 
*/
1412
 
function handle_post_delete($forum_id, $topic_id, $post_id, &$post_data)
1413
 
{
1414
 
        global $user, $db, $auth;
1415
 
        global $phpbb_root_path, $phpEx;
1416
 
 
1417
 
        // If moderator removing post or user itself removing post, present a confirmation screen
1418
 
        if ($auth->acl_get('m_delete', $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get('f_delete', $forum_id) && $post_id == $post_data['topic_last_post_id']))
1419
 
        {
1420
 
                $s_hidden_fields = build_hidden_fields(array(
1421
 
                        'p'             => $post_id,
1422
 
                        'f'             => $forum_id,
1423
 
                        'mode'  => 'delete')
1424
 
                );
1425
 
 
1426
 
                if (confirm_box(true))
1427
 
                {
1428
 
                        $data = array(
1429
 
                                'topic_first_post_id'   => $post_data['topic_first_post_id'],
1430
 
                                'topic_last_post_id'    => $post_data['topic_last_post_id'],
1431
 
                                'topic_approved'                => $post_data['topic_approved'],
1432
 
                                'topic_type'                    => $post_data['topic_type'],
1433
 
                                'post_approved'                 => $post_data['post_approved'],
1434
 
                                'post_reported'                 => $post_data['post_reported'],
1435
 
                                'post_time'                             => $post_data['post_time'],
1436
 
                                'poster_id'                             => $post_data['poster_id'],
1437
 
                                'post_postcount'                => $post_data['post_postcount']
1438
 
                        );
1439
 
 
1440
 
                        $next_post_id = delete_post($forum_id, $topic_id, $post_id, $data);
1441
 
 
1442
 
                        if ($post_data['topic_first_post_id'] == $post_data['topic_last_post_id'])
1443
 
                        {
1444
 
                                add_log('mod', $forum_id, $topic_id, 'LOG_DELETE_TOPIC', $post_data['topic_title']);
1445
 
 
1446
 
                                $meta_info = append_sid("{$phpbb_root_path}viewforum.$phpEx", "f=$forum_id");
1447
 
                                $message = $user->lang['POST_DELETED'];
1448
 
                        }
1449
 
                        else
1450
 
                        {
1451
 
                                add_log('mod', $forum_id, $topic_id, 'LOG_DELETE_POST', $post_data['post_subject']);
1452
 
 
1453
 
                                $meta_info = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&amp;t=$topic_id&amp;p=$next_post_id") . "#p$next_post_id";
1454
 
                                $message = $user->lang['POST_DELETED'] . '<br /><br />' . sprintf($user->lang['RETURN_TOPIC'], '<a href="' . $meta_info . '">', '</a>');
1455
 
                        }
1456
 
 
1457
 
                        meta_refresh(3, $meta_info);
1458
 
                        $message .= '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id) . '">', '</a>');
1459
 
                        trigger_error($message);
1460
 
                }
1461
 
                else
1462
 
                {
1463
 
                        confirm_box(false, 'DELETE_MESSAGE', $s_hidden_fields);
1464
 
                }
1465
 
        }
1466
 
 
1467
 
        // If we are here the user is not able to delete - present the correct error message
1468
 
        if ($post_data['poster_id'] != $user->data['user_id'] && $auth->acl_get('f_delete', $forum_id))
1469
 
        {
1470
 
                trigger_error('DELETE_OWN_POSTS');
1471
 
        }
1472
 
 
1473
 
        if ($post_data['poster_id'] == $user->data['user_id'] && $auth->acl_get('f_delete', $forum_id) && $post_id != $post_data['topic_last_post_id'])
1474
 
        {
1475
 
                trigger_error('CANNOT_DELETE_REPLIED');
1476
 
        }
1477
 
 
1478
 
        trigger_error('USER_CANNOT_DELETE');
1479
 
}
1480
 
 
1481
 
?>
 
 
b'\\ No newline at end of file'