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

« back to all changes in this revision

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

Add an XHTMLUnauthorizedView which redirects unauthenticated users to the
login page if a page raises an Unauthorized. Alter UserSettingsView to raise
one in the right cases, for testing.

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'