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

« back to all changes in this revision

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

  • Committer: mattgiuca
  • Date: 2008-07-15 07:19:34 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:875
Added "migrations" directory, which contains incremental database update
    scripts.
Updated users.sql, uniqueness key on offering table.
Added migration matching this update to the migrations directory. Mm handy!

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'