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

« back to all changes in this revision

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

  • Committer: William Grant
  • Date: 2009-02-23 23:47:02 UTC
  • mfrom: (1099.1.211 new-dispatch)
  • Revision ID: grantw@unimelb.edu.au-20090223234702-db4b1llly46ignwo
Merge from lp:~ivle-dev/ivle/new-dispatch.

Pretty much everything changes. Reread the setup docs. Backup your databases.
Every file is now in a different installed location, the configuration system
is rewritten, the dispatch system is rewritten, URLs are different, the
database is different, worksheets and exercises are no longer on the
filesystem, we use a templating engine, jail service protocols are rewritten,
we don't repeat ourselves, we have authorization rewritten, phpBB is gone,
and probably lots of other things that I cannot remember.

This is certainly the biggest commit I have ever made, and hopefully
the largest I ever will.

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'